diff --git a/AUTHORS b/AUTHORS index 20ba2287..0d9b8bb5 100644 --- a/AUTHORS +++ b/AUTHORS
@@ -668,6 +668,7 @@ Simon Arlott <simon.arlott@gmail.com> Siva Kumar Gunturi <siva.gunturi@samsung.com> Sohan Jyoti Ghosh <sohan.jyoti@samsung.com> +Sohan Jyoti Ghosh <sohan.jyoti@huawei.com> Song YeWen <ffmpeg@gmail.com> Sooho Park <sooho1000@gmail.com> Soorya R <soorya.r@samsung.com>
diff --git a/DEPS b/DEPS index a8300368..4644760 100644 --- a/DEPS +++ b/DEPS
@@ -36,15 +36,15 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling sfntly # and whatever else without interference from each other. - 'sfntly_revision': '64f78562d2003eb7cacaaa86a398cbd41881ba6f', + 'sfntly_revision': '84f71089cb80e6ed31d87f3aa5caab43f1427e85', # 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': '0166cfd311bb151af7745fe04fe850ee28b17e0a', + 'skia_revision': '26c90e04797e15c37ec00e0f836292b8a207d294', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling V8 # and whatever else without interference from each other. - 'v8_revision': 'd80c92bb602288bc35cecbf63b43ee7f9a8edd08', + 'v8_revision': '8dd39fe35df127390b0f1de3e236c39cd9222697', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling swarming_client # 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': '91da6b00584afd7dcaed66da88e2b617429b3950', + 'swiftshader_revision': '2ddef8858e5015140f374d5c06d1a68b7c78af10', # 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': '80e370c7d8b6541f59d98b6cbfbaae51f7e139da', + 'pdfium_revision': 'c83c28092f67f352cbd690138151b253dfdf547b', # 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.
diff --git a/android_webview/apk/java/proguard.flags b/android_webview/apk/java/proguard.flags index 495d4861..c4cf0a4 100644 --- a/android_webview/apk/java/proguard.flags +++ b/android_webview/apk/java/proguard.flags
@@ -70,11 +70,5 @@ } -dontnote com.android.webview.chromium.AwSafeBrowsingApiHandler -#TODO(hush): remove after N release. crbug.com/546762 --keep class com.android.webview.chromium.ContentSettingsAdapter { - public void setDisabledActionModeMenuItems(int); - public int getDisabledActionModeMenuItems(); -} - # We strip some unused resources when preprocessing the GMS client libs. -dontwarn com.google.android.gms.R**
diff --git a/android_webview/browser/net/aw_network_delegate.cc b/android_webview/browser/net/aw_network_delegate.cc index 012a5f83..5aab4e90 100644 --- a/android_webview/browser/net/aw_network_delegate.cc +++ b/android_webview/browser/net/aw_network_delegate.cc
@@ -56,8 +56,13 @@ url_blacklist_manager_ = AwBrowserContext::GetDefault()->GetURLBlacklistManager(); } - if (url_blacklist_manager_->IsURLBlocked(request->url())) + // Ignore blob scheme for two reasons: + // 1) PlzNavigate uses it to deliver the response to the renderer. + // 2) A whitelisted page can use blob URLs internally. + if (!request->url().SchemeIs(url::kBlobScheme) && + url_blacklist_manager_->IsURLBlocked(request->url())) { return net::ERR_BLOCKED_BY_ADMINISTRATOR; + } return net::OK; }
diff --git a/android_webview/glue/java/src/com/android/webview/chromium/WebViewChromium.java b/android_webview/glue/java/src/com/android/webview/chromium/WebViewChromium.java index 0ea0849..66779333 100644 --- a/android_webview/glue/java/src/com/android/webview/chromium/WebViewChromium.java +++ b/android_webview/glue/java/src/com/android/webview/chromium/WebViewChromium.java
@@ -1695,8 +1695,7 @@ mAwContents.setLayoutParams(layoutParams); } - // Overrides WebViewProvider.ViewDelegate.onActivityResult (not in system api jar yet). - // crbug.com/543272. + @Override public void onActivityResult(final int requestCode, final int resultCode, final Intent data) { if (checkNeedsPost()) { mFactory.addTask(new Runnable() { @@ -1730,8 +1729,7 @@ mAwContents.onConfigurationChanged(newConfig); } - //TODO(hush): add override after release. - //@Override + @Override public boolean onDragEvent(final DragEvent event) { mFactory.startYourEngines(false); if (checkNeedsPost()) { @@ -2213,14 +2211,16 @@ @Override public void super_startActivityForResult(Intent intent, int requestCode) { - // TODO(hush): Use mWebViewPrivate.super_startActivityForResult - // after N release. crbug.com/543272. - try { - Method startActivityForResultMethod = - View.class.getMethod("startActivityForResult", Intent.class, int.class); - startActivityForResultMethod.invoke(mWebView, intent, requestCode); - } catch (Exception e) { - throw new RuntimeException("Invalid reflection", e); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { + mWebViewPrivate.super_startActivityForResult(intent, requestCode); + } else { + try { + Method startActivityForResultMethod = + View.class.getMethod("startActivityForResult", Intent.class, int.class); + startActivityForResultMethod.invoke(mWebView, intent, requestCode); + } catch (Exception e) { + throw new RuntimeException("Invalid reflection", e); + } } }
diff --git a/android_webview/java/src/org/chromium/android_webview/AwContents.java b/android_webview/java/src/org/chromium/android_webview/AwContents.java index 896e9b6..f4e1cfe 100644 --- a/android_webview/java/src/org/chromium/android_webview/AwContents.java +++ b/android_webview/java/src/org/chromium/android_webview/AwContents.java
@@ -2356,9 +2356,7 @@ void startProcessTextIntent(Intent intent) { // on Android M, WebView is not able to replace the text with the processed text. // So set the readonly flag for M. - // TODO(hush): remove the part about VERSION.CODENAME equality with N, after N release. - // crbug.com/543272 - if (Build.VERSION.SDK_INT == Build.VERSION_CODES.M && !Build.VERSION.CODENAME.equals("N")) { + if (Build.VERSION.SDK_INT == Build.VERSION_CODES.M) { intent.putExtra(Intent.EXTRA_PROCESS_TEXT_READONLY, true); }
diff --git a/android_webview/java/src/org/chromium/android_webview/AwSettings.java b/android_webview/java/src/org/chromium/android_webview/AwSettings.java index 231091e2..a49d01c 100644 --- a/android_webview/java/src/org/chromium/android_webview/AwSettings.java +++ b/android_webview/java/src/org/chromium/android_webview/AwSettings.java
@@ -34,9 +34,6 @@ private static final String LOGTAG = AwSettings.class.getSimpleName(); private static final boolean TRACE = false; - // TODO(hush): Use android.webkit.WebSettings.MENU_ITEM_*. crbug.com/546762. - private static final int MENU_ITEM_NONE = 0; - private static final String TAG = "AwSettings"; // This class must be created on the UI thread. Afterwards, it can be @@ -89,7 +86,7 @@ private int mMixedContentMode = WebSettings.MIXED_CONTENT_NEVER_ALLOW; private boolean mOffscreenPreRaster; - private int mDisabledMenuItems = MENU_ITEM_NONE; + private int mDisabledMenuItems = WebSettings.MENU_ITEM_NONE; // Although this bit is stored on AwSettings it is actually controlled via the CookieManager. private boolean mAcceptThirdPartyCookies;
diff --git a/ash/BUILD.gn b/ash/BUILD.gn index 1dbd302..f6f6a1c 100644 --- a/ash/BUILD.gn +++ b/ash/BUILD.gn
@@ -108,6 +108,8 @@ "common/gpu_support_stub.h", "common/key_event_watcher.cc", "common/key_event_watcher.h", + "common/keyboard/keyboard_observer_register.cc", + "common/keyboard/keyboard_observer_register.h", "common/keyboard/keyboard_ui.cc", "common/keyboard/keyboard_ui.h", "common/keyboard/keyboard_ui_observer.h",
diff --git a/ash/accelerators/accelerator_controller_delegate_aura.cc b/ash/accelerators/accelerator_controller_delegate_aura.cc index a66d0a63..79b857aa 100644 --- a/ash/accelerators/accelerator_controller_delegate_aura.cc +++ b/ash/accelerators/accelerator_controller_delegate_aura.cc
@@ -12,11 +12,8 @@ #include "ash/accelerators/accelerator_commands_aura.h" #include "ash/common/accelerators/debug_commands.h" #include "ash/common/accessibility_types.h" -#include "ash/common/session/session_state_delegate.h" #include "ash/common/shelf/wm_shelf.h" -#include "ash/common/shell_delegate.h" #include "ash/common/system/system_notifier.h" -#include "ash/common/system/tray/system_tray.h" #include "ash/common/wm/maximize_mode/maximize_mode_controller.h" #include "ash/common/wm/window_state.h" #include "ash/common/wm/wm_event.h" @@ -39,12 +36,9 @@ #include "base/memory/ptr_util.h" #include "base/metrics/histogram_macros.h" #include "base/metrics/user_metrics.h" -#include "base/strings/string_split.h" -#include "base/strings/utf_string_conversions.h" #include "base/sys_info.h" #include "third_party/skia/include/core/SkColor.h" #include "ui/base/accelerators/accelerator.h" -#include "ui/base/l10n/l10n_util.h" #include "ui/compositor/layer.h" #include "ui/compositor/layer_animation_sequence.h" #include "ui/compositor/layer_animator.h" @@ -52,73 +46,12 @@ #include "ui/display/screen.h" #include "ui/events/event.h" #include "ui/events/keycodes/keyboard_codes.h" -#include "ui/message_center/message_center.h" -#include "ui/message_center/notification.h" -#include "ui/message_center/notifier_settings.h" namespace ash { namespace { using base::UserMetricsAction; -// The notification delegate that will be used to open the keyboard shortcut -// help page when the notification is clicked. -class DeprecatedAcceleratorNotificationDelegate - : public message_center::NotificationDelegate { - public: - DeprecatedAcceleratorNotificationDelegate() {} - - // message_center::NotificationDelegate: - bool HasClickedListener() override { return true; } - - void Click() override { - if (!WmShell::Get()->GetSessionStateDelegate()->IsUserSessionBlocked()) - Shell::Get()->shell_delegate()->OpenKeyboardShortcutHelpPage(); - } - - private: - // Private destructor since NotificationDelegate is ref-counted. - ~DeprecatedAcceleratorNotificationDelegate() override {} - - DISALLOW_COPY_AND_ASSIGN(DeprecatedAcceleratorNotificationDelegate); -}; - -// Ensures that there are no word breaks at the "+"s in the shortcut texts such -// as "Ctrl+Shift+Space". -void EnsureNoWordBreaks(base::string16* shortcut_text) { - std::vector<base::string16> keys = - base::SplitString(*shortcut_text, base::ASCIIToUTF16("+"), - base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL); - - if (keys.size() < 2U) - return; - - // The plus sign surrounded by the word joiner to guarantee an non-breaking - // shortcut. - const base::string16 non_breaking_plus = - base::UTF8ToUTF16("\xe2\x81\xa0+\xe2\x81\xa0"); - shortcut_text->clear(); - for (size_t i = 0; i < keys.size() - 1; ++i) { - *shortcut_text += keys[i]; - *shortcut_text += non_breaking_plus; - } - - *shortcut_text += keys.back(); -} - -// Gets the notification message after it formats it in such a way that there -// are no line breaks in the middle of the shortcut texts. -base::string16 GetNotificationText(int message_id, - int old_shortcut_id, - int new_shortcut_id) { - base::string16 old_shortcut = l10n_util::GetStringUTF16(old_shortcut_id); - base::string16 new_shortcut = l10n_util::GetStringUTF16(new_shortcut_id); - EnsureNoWordBreaks(&old_shortcut); - EnsureNoWordBreaks(&new_shortcut); - - return l10n_util::GetStringFUTF16(message_id, new_shortcut, old_shortcut); -} - bool CanHandleMagnifyScreen() { return Shell::GetInstance()->magnification_controller()->IsEnabled(); } @@ -187,17 +120,6 @@ } } -void HandleShowSystemTrayBubble() { - base::RecordAction(UserMetricsAction("Accel_Show_System_Tray_Bubble")); - RootWindowController* controller = - RootWindowController::ForTargetRootWindow(); - SystemTray* tray = controller->GetSystemTray(); - if (!tray->HasSystemBubble()) { - tray->ShowDefaultView(BUBBLE_CREATE_NEW); - tray->ActivateBubble(); - } -} - void HandleTakeWindowScreenshot(ScreenshotDelegate* screenshot_delegate) { base::RecordAction(UserMetricsAction("Accel_Take_Window_Screenshot")); DCHECK(screenshot_delegate); @@ -234,15 +156,14 @@ // two screens. Behave the same as mirroring: fail and notify if there are // three or more screens. Shell::GetInstance()->display_configuration_controller()->SetPrimaryDisplayId( - Shell::GetInstance()->display_manager()->GetSecondaryDisplay().id(), - true /* user_action */); + Shell::GetInstance()->display_manager()->GetSecondaryDisplay().id()); } void HandleToggleMirrorMode() { base::RecordAction(UserMetricsAction("Accel_Toggle_Mirror_Mode")); bool mirror = !Shell::GetInstance()->display_manager()->IsInMirrorMode(); Shell::GetInstance()->display_configuration_controller()->SetMirrorMode( - mirror, true /* user_action */); + mirror); } bool CanHandleTouchHud() { @@ -294,7 +215,6 @@ case SCALE_UI_RESET: case SCALE_UI_UP: case SHOW_MESSAGE_CENTER_BUBBLE: - case SHOW_SYSTEM_TRAY_BUBBLE: case SWAP_PRIMARY_DISPLAY: case TAKE_PARTIAL_SCREENSHOT: case TAKE_SCREENSHOT: @@ -343,7 +263,6 @@ case POWER_RELEASED: case ROTATE_SCREEN: case ROTATE_WINDOW: - case SHOW_SYSTEM_TRAY_BUBBLE: case TAKE_PARTIAL_SCREENSHOT: case TAKE_SCREENSHOT: case TAKE_WINDOW_SCREENSHOT: @@ -429,9 +348,6 @@ case SCALE_UI_UP: accelerators::ZoomInternalDisplay(true /* up */); break; - case SHOW_SYSTEM_TRAY_BUBBLE: - HandleShowSystemTrayBubble(); - break; case SWAP_PRIMARY_DISPLAY: HandleSwapPrimaryDisplay(); break; @@ -464,26 +380,4 @@ } } -void AcceleratorControllerDelegateAura::ShowDeprecatedAcceleratorNotification( - const char* const notification_id, - int message_id, - int old_shortcut_id, - int new_shortcut_id) { - const base::string16 message = - GetNotificationText(message_id, old_shortcut_id, new_shortcut_id); - std::unique_ptr<message_center::Notification> notification( - new message_center::Notification( - message_center::NOTIFICATION_TYPE_SIMPLE, notification_id, - base::string16(), message, - Shell::Get()->shell_delegate()->GetDeprecatedAcceleratorImage(), - base::string16(), GURL(), - message_center::NotifierId( - message_center::NotifierId::SYSTEM_COMPONENT, - system_notifier::kNotifierDeprecatedAccelerator), - message_center::RichNotificationData(), - new DeprecatedAcceleratorNotificationDelegate)); - message_center::MessageCenter::Get()->AddNotification( - std::move(notification)); -} - } // namespace ash
diff --git a/ash/accelerators/accelerator_controller_delegate_aura.h b/ash/accelerators/accelerator_controller_delegate_aura.h index 3f68382..549dd71 100644 --- a/ash/accelerators/accelerator_controller_delegate_aura.h +++ b/ash/accelerators/accelerator_controller_delegate_aura.h
@@ -36,10 +36,6 @@ const ui::Accelerator& previous_accelerator) override; void PerformAction(AcceleratorAction action, const ui::Accelerator& accelerator) override; - void ShowDeprecatedAcceleratorNotification(const char* const notification_id, - int message_id, - int old_shortcut_id, - int new_shortcut_id) override; private: std::unique_ptr<ScreenshotDelegate> screenshot_delegate_;
diff --git a/ash/accelerators/accelerator_controller_unittest.cc b/ash/accelerators/accelerator_controller_unittest.cc index f50aa050..c132a7b 100644 --- a/ash/accelerators/accelerator_controller_unittest.cc +++ b/ash/accelerators/accelerator_controller_unittest.cc
@@ -1020,7 +1020,7 @@ TEST_F(AcceleratorControllerTest, GlobalAcceleratorsToggleAppList) { app_list::test::TestAppListPresenter test_app_list_presenter; - WmShell::Get()->app_list()->SetAppListPresenter( + Shell::Get()->app_list()->SetAppListPresenter( test_app_list_presenter.CreateInterfacePtrAndBind()); AccessibilityDelegate* delegate = Shell::GetInstance()->accessibility_delegate();
diff --git a/ash/accelerators/accelerator_filter_unittest.cc b/ash/accelerators/accelerator_filter_unittest.cc index f19204b..bfa1c34 100644 --- a/ash/accelerators/accelerator_filter_unittest.cc +++ b/ash/accelerators/accelerator_filter_unittest.cc
@@ -163,8 +163,8 @@ EXPECT_FALSE(session_state_delegate->IsScreenLocked()); // Search+L is processed when the app_list target visibility is false. - WmShell::Get()->DismissAppList(); - EXPECT_FALSE(WmShell::Get()->GetAppListTargetVisibility()); + Shell::Get()->DismissAppList(); + EXPECT_FALSE(Shell::Get()->GetAppListTargetVisibility()); generator.PressKey(ui::VKEY_L, ui::EF_COMMAND_DOWN); generator.ReleaseKey(ui::VKEY_L, ui::EF_COMMAND_DOWN); EXPECT_TRUE(session_state_delegate->IsScreenLocked());
diff --git a/ash/accelerators/accelerator_interactive_uitest_chromeos.cc b/ash/accelerators/accelerator_interactive_uitest_chromeos.cc index 274ca6e..44693ce 100644 --- a/ash/accelerators/accelerator_interactive_uitest_chromeos.cc +++ b/ash/accelerators/accelerator_interactive_uitest_chromeos.cc
@@ -200,7 +200,7 @@ TEST_F(AcceleratorInteractiveUITest, MAYBE_ToggleAppList) { mojo::edk::Init(); app_list::test::TestAppListPresenter test_app_list_presenter; - WmShell::Get()->app_list()->SetAppListPresenter( + Shell::Get()->app_list()->SetAppListPresenter( test_app_list_presenter.CreateInterfacePtrAndBind()); EXPECT_EQ(0u, test_app_list_presenter.toggle_count());
diff --git a/ash/app_list/app_list_delegate_impl.cc b/ash/app_list/app_list_delegate_impl.cc index 8f5c63b..4013786 100644 --- a/ash/app_list/app_list_delegate_impl.cc +++ b/ash/app_list/app_list_delegate_impl.cc
@@ -9,16 +9,17 @@ #include "ash/common/shelf/wm_shelf.h" #include "ash/common/wm_shell.h" #include "ash/root_window_controller.h" +#include "ash/shell.h" #include "ui/app_list/presenter/app_list.h" namespace ash { AppListDelegateImpl::AppListDelegateImpl() { - WmShell::Get()->app_list()->set_delegate(this); + Shell::Get()->app_list()->set_delegate(this); } AppListDelegateImpl::~AppListDelegateImpl() { - WmShell::Get()->app_list()->set_delegate(nullptr); + Shell::Get()->app_list()->set_delegate(nullptr); } void AppListDelegateImpl::OnAppListVisibilityChanged(bool visible,
diff --git a/ash/common/accelerators/accelerator_controller.cc b/ash/common/accelerators/accelerator_controller.cc index 89c946f..d1077cd 100644 --- a/ash/common/accelerators/accelerator_controller.cc +++ b/ash/common/accelerators/accelerator_controller.cc
@@ -28,6 +28,7 @@ #include "ash/common/system/keyboard_brightness_control_delegate.h" #include "ash/common/system/status_area_widget.h" #include "ash/common/system/system_notifier.h" +#include "ash/common/system/tray/system_tray.h" #include "ash/common/system/tray/system_tray_delegate.h" #include "ash/common/system/tray/system_tray_notifier.h" #include "ash/common/system/web_notification/web_notification_tray.h" @@ -45,6 +46,8 @@ #include "ash/strings/grit/ash_strings.h" #include "base/metrics/histogram_macros.h" #include "base/metrics/user_metrics.h" +#include "base/strings/string_split.h" +#include "base/strings/utf_string_conversions.h" #include "chromeos/dbus/dbus_thread_manager.h" #include "chromeos/dbus/power_manager_client.h" #include "ui/base/accelerators/accelerator.h" @@ -66,6 +69,85 @@ const char kHighContrastToggleAccelNotificationId[] = "chrome://settings/accessibility/highcontrast"; +// The notification delegate that will be used to open the keyboard shortcut +// help page when the notification is clicked. +class DeprecatedAcceleratorNotificationDelegate + : public message_center::NotificationDelegate { + public: + DeprecatedAcceleratorNotificationDelegate() {} + + // message_center::NotificationDelegate: + bool HasClickedListener() override { return true; } + + void Click() override { + if (!WmShell::Get()->GetSessionStateDelegate()->IsUserSessionBlocked()) + Shell::Get()->shell_delegate()->OpenKeyboardShortcutHelpPage(); + } + + private: + // Private destructor since NotificationDelegate is ref-counted. + ~DeprecatedAcceleratorNotificationDelegate() override {} + + DISALLOW_COPY_AND_ASSIGN(DeprecatedAcceleratorNotificationDelegate); +}; + +// Ensures that there are no word breaks at the "+"s in the shortcut texts such +// as "Ctrl+Shift+Space". +void EnsureNoWordBreaks(base::string16* shortcut_text) { + std::vector<base::string16> keys = + base::SplitString(*shortcut_text, base::ASCIIToUTF16("+"), + base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL); + + if (keys.size() < 2U) + return; + + // The plus sign surrounded by the word joiner to guarantee an non-breaking + // shortcut. + const base::string16 non_breaking_plus = + base::UTF8ToUTF16("\xe2\x81\xa0+\xe2\x81\xa0"); + shortcut_text->clear(); + for (size_t i = 0; i < keys.size() - 1; ++i) { + *shortcut_text += keys[i]; + *shortcut_text += non_breaking_plus; + } + + *shortcut_text += keys.back(); +} + +// Gets the notification message after it formats it in such a way that there +// are no line breaks in the middle of the shortcut texts. +base::string16 GetNotificationText(int message_id, + int old_shortcut_id, + int new_shortcut_id) { + base::string16 old_shortcut = l10n_util::GetStringUTF16(old_shortcut_id); + base::string16 new_shortcut = l10n_util::GetStringUTF16(new_shortcut_id); + EnsureNoWordBreaks(&old_shortcut); + EnsureNoWordBreaks(&new_shortcut); + + return l10n_util::GetStringFUTF16(message_id, new_shortcut, old_shortcut); +} + +// Shows a warning the user is using a deprecated accelerator. +void ShowDeprecatedAcceleratorNotification(const char* const notification_id, + int message_id, + int old_shortcut_id, + int new_shortcut_id) { + const base::string16 message = + GetNotificationText(message_id, old_shortcut_id, new_shortcut_id); + std::unique_ptr<Notification> notification(new Notification( + message_center::NOTIFICATION_TYPE_SIMPLE, notification_id, + base::string16(), message, + Shell::Get()->shell_delegate()->GetDeprecatedAcceleratorImage(), + base::string16(), GURL(), + message_center::NotifierId( + message_center::NotifierId::SYSTEM_COMPONENT, + system_notifier::kNotifierDeprecatedAccelerator), + message_center::RichNotificationData(), + new DeprecatedAcceleratorNotificationDelegate)); + message_center::MessageCenter::Get()->AddNotification( + std::move(notification)); +} + ui::Accelerator CreateAccelerator(ui::KeyboardCode keycode, int modifiers, bool trigger_on_press) { @@ -232,6 +314,16 @@ } } +void HandleShowSystemTrayBubble() { + base::RecordAction(UserMetricsAction("Accel_Show_System_Tray_Bubble")); + WmWindow* target_root = Shell::GetWmRootWindowForNewWindows(); + SystemTray* tray = target_root->GetRootWindowController()->GetSystemTray(); + if (!tray->HasSystemBubble()) { + tray->ShowDefaultView(BUBBLE_CREATE_NEW); + tray->ActivateBubble(); + } +} + void HandleShowTaskManager() { base::RecordAction(UserMetricsAction("Accel_Show_Task_Manager")); WmShell::Get()->new_window_controller()->ShowTaskManager(); @@ -274,7 +366,7 @@ void HandleToggleAppList(const ui::Accelerator& accelerator) { if (accelerator.key_code() == ui::VKEY_LWIN) base::RecordAction(UserMetricsAction("Accel_Search_LWin")); - WmShell::Get()->ToggleAppList(); + Shell::Get()->ToggleAppList(); } void HandleToggleFullscreen(const ui::Accelerator& accelerator) { @@ -839,6 +931,7 @@ case RESTORE_TAB: case SHOW_IME_MENU_BUBBLE: case SHOW_KEYBOARD_OVERLAY: + case SHOW_SYSTEM_TRAY_BUBBLE: case SHOW_TASK_MANAGER: case SUSPEND: case TOGGLE_FULLSCREEN: @@ -1018,6 +1111,9 @@ case SHOW_STYLUS_TOOLS: HandleShowStylusTools(); break; + case SHOW_SYSTEM_TRAY_BUBBLE: + HandleShowSystemTrayBubble(); + break; case SHOW_TASK_MANAGER: HandleShowTaskManager(); break; @@ -1160,12 +1256,10 @@ // Record UMA stats. RecordUmaHistogram(data->uma_histogram_name, DEPRECATED_USED); - if (delegate_) { - // We always display the notification as long as this |data| entry exists. - delegate_->ShowDeprecatedAcceleratorNotification( - data->uma_histogram_name, data->notification_message_id, - data->old_shortcut_id, data->new_shortcut_id); - } + // We always display the notification as long as this |data| entry exists. + ShowDeprecatedAcceleratorNotification( + data->uma_histogram_name, data->notification_message_id, + data->old_shortcut_id, data->new_shortcut_id); if (!data->deprecated_enabled) return AcceleratorProcessingStatus::STOP;
diff --git a/ash/common/accelerators/accelerator_controller_delegate.h b/ash/common/accelerators/accelerator_controller_delegate.h index 291d9fd5..5be7cb33 100644 --- a/ash/common/accelerators/accelerator_controller_delegate.h +++ b/ash/common/accelerators/accelerator_controller_delegate.h
@@ -34,13 +34,6 @@ virtual void PerformAction(AcceleratorAction action, const ui::Accelerator& accelerator) = 0; - // Shows a warning the user is using a deprecated accelerator. - virtual void ShowDeprecatedAcceleratorNotification( - const char* const notification_id, - int message_id, - int old_shortcut_id, - int new_shortcut_id) = 0; - protected: virtual ~AcceleratorControllerDelegate() {} };
diff --git a/ash/common/accelerators/accelerator_router.cc b/ash/common/accelerators/accelerator_router.cc index 2a42383..c11c5f2 100644 --- a/ash/common/accelerators/accelerator_router.cc +++ b/ash/common/accelerators/accelerator_router.cc
@@ -8,6 +8,7 @@ #include "ash/common/wm/window_state.h" #include "ash/common/wm_shell.h" #include "ash/common/wm_window.h" +#include "ash/shell.h" #include "base/metrics/histogram_macros.h" #include "base/stl_util.h" #include "ui/base/accelerators/accelerator.h" @@ -128,7 +129,7 @@ if (accelerator_controller->IsPreferred(accelerator)) return true; - return WmShell::Get()->GetAppListTargetVisibility(); + return Shell::Get()->GetAppListTargetVisibility(); } } // namespace ash
diff --git a/ash/common/frame/custom_frame_view_ash.cc b/ash/common/frame/custom_frame_view_ash.cc index 9192562..37f1b009 100644 --- a/ash/common/frame/custom_frame_view_ash.cc +++ b/ash/common/frame/custom_frame_view_ash.cc
@@ -128,6 +128,7 @@ // views::View: void Layout() override; + const char* GetClassName() const override { return "OverlayView"; } private: // views::ViewTargeterDelegate: @@ -246,6 +247,10 @@ overlay_view_->SetHeaderHeight(height); } +views::View* CustomFrameViewAsh::header_view() { + return header_view_; +} + //////////////////////////////////////////////////////////////////////////////// // CustomFrameViewAsh, views::NonClientFrameView overrides:
diff --git a/ash/common/frame/custom_frame_view_ash.h b/ash/common/frame/custom_frame_view_ash.h index 4a4136e..6da54cb 100644 --- a/ash/common/frame/custom_frame_view_ash.h +++ b/ash/common/frame/custom_frame_view_ash.h
@@ -64,6 +64,8 @@ // preferred height is used. void SetHeaderHeight(base::Optional<int> height); + views::View* header_view(); + // views::NonClientFrameView: gfx::Rect GetBoundsForClientView() const override; gfx::Rect GetWindowBoundsForClientBounds(
diff --git a/ash/common/keyboard/keyboard_observer_register.cc b/ash/common/keyboard/keyboard_observer_register.cc new file mode 100644 index 0000000..ccd514d --- /dev/null +++ b/ash/common/keyboard/keyboard_observer_register.cc
@@ -0,0 +1,31 @@ +// 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 "ash/common/keyboard/keyboard_observer_register.h" + +#include "ui/keyboard/keyboard_controller.h" + +namespace ash { + +void UpdateKeyboardObserverFromStateChanged( + bool keyboard_activated, + WmWindow* keyboard_root_window, + WmWindow* observer_root_window, + ScopedObserver<keyboard::KeyboardController, + keyboard::KeyboardControllerObserver>* keyboard_observer) { + if (keyboard_root_window != observer_root_window) + return; + + keyboard::KeyboardController* const keyboard_controller = + keyboard::KeyboardController::GetInstance(); + if (keyboard_activated && + !keyboard_observer->IsObserving(keyboard_controller)) { + keyboard_observer->Add(keyboard_controller); + } else if (!keyboard_activated && + keyboard_observer->IsObserving(keyboard_controller)) { + keyboard_observer->Remove(keyboard_controller); + } +} + +} // namespace ash
diff --git a/ash/common/keyboard/keyboard_observer_register.h b/ash/common/keyboard/keyboard_observer_register.h new file mode 100644 index 0000000..11224a8 --- /dev/null +++ b/ash/common/keyboard/keyboard_observer_register.h
@@ -0,0 +1,35 @@ +// 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 ASH_COMMON_KEYBOARD_KEYBOAD_OBSERVER_REGISTER_H_ +#define ASH_COMMON_KEYBOARD_KEYBOAD_OBSERVER_REGISTER_H_ + +#include "base/scoped_observer.h" + +namespace keyboard { +class KeyboardController; +class KeyboardControllerObserver; +} + +namespace ash { + +class WmWindow; + +// Helper function to start/stop observing KeyboardController. +// |keyboard_root_window| is the root window where KeyboardController changes +// states. |observer_root_window| is the root window relevant to the +// |keyboard_observer|. If |keyboard_root_window| is different from +// |observer_root_window|, this function is a no-op. Otherwise, the observing +// starts if |keyboard_activated| is true and stops if |keyboard_activated| is +// false. +void UpdateKeyboardObserverFromStateChanged( + bool keyboard_activated, + WmWindow* keyboard_root_window, + WmWindow* observer_root_window, + ScopedObserver<keyboard::KeyboardController, + keyboard::KeyboardControllerObserver>* keyboard_observer); + +} // namespace ash + +#endif // ASH_COMMON_KEYBOARD_KEYBOAD_OBSERVER_REGISTER_H_
diff --git a/ash/common/mojo_interface_factory.cc b/ash/common/mojo_interface_factory.cc index f074291..83aa475 100644 --- a/ash/common/mojo_interface_factory.cc +++ b/ash/common/mojo_interface_factory.cc
@@ -35,7 +35,7 @@ } void BindAppListRequestOnMainThread(app_list::mojom::AppListRequest request) { - WmShell::Get()->app_list()->BindRequest(std::move(request)); + Shell::Get()->app_list()->BindRequest(std::move(request)); } void BindCastConfigOnMainThread(mojom::CastConfigRequest request) {
diff --git a/ash/common/shelf/OWNERS b/ash/common/shelf/OWNERS new file mode 100644 index 0000000..5511653d --- /dev/null +++ b/ash/common/shelf/OWNERS
@@ -0,0 +1 @@ +file://ash/shelf/OWNERS
diff --git a/ash/common/shelf/app_list_button.cc b/ash/common/shelf/app_list_button.cc index 361d96b..b1201dfc 100644 --- a/ash/common/shelf/app_list_button.cc +++ b/ash/common/shelf/app_list_button.cc
@@ -9,8 +9,8 @@ #include "ash/common/shelf/shelf_view.h" #include "ash/common/shelf/wm_shelf.h" #include "ash/common/system/tray/tray_popup_utils.h" -#include "ash/common/wm_shell.h" #include "ash/public/cpp/shelf_types.h" +#include "ash/shell.h" #include "ash/strings/grit/ash_strings.h" #include "base/memory/ptr_util.h" #include "ui/accessibility/ax_node_data.h" @@ -106,7 +106,7 @@ event->SetHandled(); return; case ui::ET_GESTURE_TAP_DOWN: - if (!WmShell::Get()->IsApplistVisible()) + if (!Shell::Get()->IsAppListVisible()) AnimateInkDrop(views::InkDropState::ACTION_PENDING, event); ImageButton::OnGestureEvent(event); break; @@ -133,19 +133,22 @@ // ring draws sharply and is centered at all scale factors. const float kRingOuterRadiusDp = 7.f; const float kRingThicknessDp = 1.5f; - gfx::ScopedCanvas scoped_canvas(canvas); - const float dsf = canvas->UndoDeviceScaleFactor(); - circle_center.Scale(dsf); - cc::PaintFlags fg_flags; - fg_flags.setAntiAlias(true); - fg_flags.setStyle(cc::PaintFlags::kStroke_Style); - fg_flags.setColor(kShelfIconColor); - const float thickness = std::ceil(kRingThicknessDp * dsf); - const float radius = std::ceil(kRingOuterRadiusDp * dsf) - thickness / 2; - fg_flags.setStrokeWidth(thickness); - // Make sure the center of the circle lands on pixel centers. - canvas->DrawCircle(circle_center, radius, fg_flags); + { + gfx::ScopedCanvas scoped_canvas(canvas); + const float dsf = canvas->UndoDeviceScaleFactor(); + circle_center.Scale(dsf); + + cc::PaintFlags fg_flags; + fg_flags.setAntiAlias(true); + fg_flags.setStyle(cc::PaintFlags::kStroke_Style); + fg_flags.setColor(kShelfIconColor); + const float thickness = std::ceil(kRingThicknessDp * dsf); + const float radius = std::ceil(kRingOuterRadiusDp * dsf) - thickness / 2; + fg_flags.setStrokeWidth(thickness); + // Make sure the center of the circle lands on pixel centers. + canvas->DrawCircle(circle_center, radius, fg_flags); + } views::Painter::PaintFocusPainter(this, canvas, focus_painter()); } @@ -176,7 +179,7 @@ bool AppListButton::ShouldEnterPushedState(const ui::Event& event) { if (!shelf_view_->ShouldEventActivateButton(this, event)) return false; - if (WmShell::Get()->IsApplistVisible()) + if (Shell::Get()->IsAppListVisible()) return false; return views::ImageButton::ShouldEnterPushedState(event); }
diff --git a/ash/common/shelf/app_list_shelf_item_delegate.cc b/ash/common/shelf/app_list_shelf_item_delegate.cc index bc9b724..42bf94d 100644 --- a/ash/common/shelf/app_list_shelf_item_delegate.cc +++ b/ash/common/shelf/app_list_shelf_item_delegate.cc
@@ -5,7 +5,7 @@ #include "ash/common/shelf/app_list_shelf_item_delegate.h" #include "ash/common/shelf/shelf_model.h" -#include "ash/common/wm_shell.h" +#include "ash/shell.h" #include "ash/strings/grit/ash_strings.h" #include "base/memory/ptr_util.h" #include "ui/app_list/app_list_switches.h" @@ -37,7 +37,7 @@ int64_t display_id, ShelfLaunchSource source, const ItemSelectedCallback& callback) { - WmShell::Get()->ToggleAppList(); + Shell::Get()->ToggleAppList(); callback.Run(SHELF_ACTION_APP_LIST_SHOWN, base::nullopt); }
diff --git a/ash/common/shelf/shelf_background_animator.cc b/ash/common/shelf/shelf_background_animator.cc index 548b826..177473b6 100644 --- a/ash/common/shelf/shelf_background_animator.cc +++ b/ash/common/shelf/shelf_background_animator.cc
@@ -98,14 +98,6 @@ animator_.reset(); } -void ShelfBackgroundAnimator::AnimationCanceled( - const gfx::Animation* animation) { - DCHECK_EQ(animation, animator_.get()); - SetAnimationValues(animator_->IsShowing() ? 1.0 : 0.0); - // Animations are only cancelled when they are being pre-empted so we don't - // destroy the |animator_| because it may be re-used immediately. -} - void ShelfBackgroundAnimator::OnWallpaperDataChanged() {} void ShelfBackgroundAnimator::OnWallpaperColorsChanged() {
diff --git a/ash/common/shelf/shelf_background_animator.h b/ash/common/shelf/shelf_background_animator.h index 72747494..d9bb90a6 100644 --- a/ash/common/shelf/shelf_background_animator.h +++ b/ash/common/shelf/shelf_background_animator.h
@@ -82,7 +82,6 @@ // gfx::AnimationDelegate: void AnimationProgressed(const gfx::Animation* animation) override; void AnimationEnded(const gfx::Animation* animation) override; - void AnimationCanceled(const gfx::Animation* animation) override; protected: // WmShelfObserver:
diff --git a/ash/common/shelf/shelf_background_animator_unittest.cc b/ash/common/shelf/shelf_background_animator_unittest.cc index 9a3784c..e1a8f4f 100644 --- a/ash/common/shelf/shelf_background_animator_unittest.cc +++ b/ash/common/shelf/shelf_background_animator_unittest.cc
@@ -278,19 +278,6 @@ EXPECT_NE(animator, test_api_->animator()); } -TEST_F(ShelfBackgroundAnimatorTest, - AnimationProgressesToTargetWhenStoppingUnfinishedAnimator) { - PaintBackground(SHELF_BACKGROUND_OVERLAP, AnimationChangeType::ANIMATE); - - EXPECT_NE(kShelfTranslucentAlpha, observer_.GetBackgroundAlpha()); - EXPECT_NE(0, observer_.GetItemBackgroundAlpha()); - - test_api_->animator()->Stop(); - - EXPECT_EQ(kShelfTranslucentAlpha, observer_.GetBackgroundAlpha()); - EXPECT_EQ(0, observer_.GetItemBackgroundAlpha()); -} - // Verify observers are always notified, even when alpha values don't change. TEST_F(ShelfBackgroundAnimatorTest, ObserversAreNotifiedWhenSnappingToSameTargetBackground) {
diff --git a/ash/common/shelf/shelf_layout_manager.cc b/ash/common/shelf/shelf_layout_manager.cc index 35de24c..044bcb3 100644 --- a/ash/common/shelf/shelf_layout_manager.cc +++ b/ash/common/shelf/shelf_layout_manager.cc
@@ -9,6 +9,7 @@ #include <vector> #include "ash/animation/animation_change_type.h" +#include "ash/common/keyboard/keyboard_observer_register.h" #include "ash/common/session/session_controller.h" #include "ash/common/session/session_state_delegate.h" #include "ash/common/shelf/shelf_constants.h" @@ -93,7 +94,7 @@ shelf_->update_shelf_observer_ = this; } - void Detach() { shelf_ = NULL; } + void Detach() { shelf_ = nullptr; } void OnImplicitAnimationsCompleted() override { if (shelf_) @@ -104,10 +105,10 @@ private: ~UpdateShelfObserver() override { if (shelf_) - shelf_->update_shelf_observer_ = NULL; + shelf_->update_shelf_observer_ = nullptr; } - // Shelf we're in. NULL if deleted before we're deleted. + // Shelf we're in. nullptr if deleted before we're deleted. ShelfLayoutManager* shelf_; DISALLOW_COPY_AND_ASSIGN(UpdateShelfObserver); @@ -150,10 +151,11 @@ gesture_drag_status_(GESTURE_DRAG_NONE), gesture_drag_amount_(0.f), gesture_drag_auto_hide_state_(SHELF_AUTO_HIDE_SHOWN), - update_shelf_observer_(NULL), + update_shelf_observer_(nullptr), chromevox_panel_height_(0), duration_override_in_ms_(0), - shelf_background_type_(SHELF_BACKGROUND_OVERLAP) { + shelf_background_type_(SHELF_BACKGROUND_OVERLAP), + keyboard_observer_(this) { DCHECK(shelf_widget_); DCHECK(wm_shelf_); Shell::GetInstance()->AddShellObserver(this); @@ -182,7 +184,7 @@ } bool ShelfLayoutManager::IsVisible() const { - // status_area_widget() may be NULL during the shutdown. + // status_area_widget() may be nullptr during the shutdown. return shelf_widget_->status_area_widget() && shelf_widget_->status_area_widget()->IsVisible() && (state_.visibility_state == SHELF_VISIBLE || @@ -210,7 +212,7 @@ void ShelfLayoutManager::LayoutShelfAndUpdateBounds(bool change_work_area) { TargetBounds target_bounds; CalculateTargetBounds(state_, &target_bounds); - UpdateBoundsAndOpacity(target_bounds, false, change_work_area, NULL); + UpdateBoundsAndOpacity(target_bounds, false, change_work_area, nullptr); // Update insets in ShelfWindowTargeter when shelf bounds change. for (auto& observer : observers_) @@ -405,6 +407,14 @@ UpdateVisibilityState(); } +void ShelfLayoutManager::OnVirtualKeyboardStateChanged(bool activated, + WmWindow* root_window) { + UpdateKeyboardObserverFromStateChanged( + activated, root_window, + WmWindow::Get(shelf_widget_->GetNativeWindow())->GetRootWindow(), + &keyboard_observer_); +} + void ShelfLayoutManager::OnWindowActivated(ActivationReason reason, aura::Window* gained_active, aura::Window* lost_active) { @@ -435,7 +445,9 @@ } } -void ShelfLayoutManager::OnKeyboardClosed() {} +void ShelfLayoutManager::OnKeyboardClosed() { + keyboard_observer_.RemoveAll(); +} ShelfBackgroundType ShelfLayoutManager::GetShelfBackgroundType() const { if (state_.pre_lock_screen_animation_active) @@ -537,7 +549,7 @@ CalculateTargetBounds(state_, &target_bounds); UpdateBoundsAndOpacity( target_bounds, true /* animate */, true /* change_work_area */, - delay_background_change ? update_shelf_observer_ : NULL); + delay_background_change ? update_shelf_observer_ : nullptr); // OnAutoHideStateChanged Should be emitted when: // - firstly state changed to auto-hide from other state @@ -1019,7 +1031,7 @@ TargetBounds target_bounds; CalculateTargetBounds(state_, &target_bounds); UpdateBoundsAndOpacity(target_bounds, true /* animate */, - true /* change_work_area */, NULL); + true /* change_work_area */, nullptr); UpdateVisibilityState(); }
diff --git a/ash/common/shelf/shelf_layout_manager.h b/ash/common/shelf/shelf_layout_manager.h index 7661de4..652549557 100644 --- a/ash/common/shelf/shelf_layout_manager.h +++ b/ash/common/shelf/shelf_layout_manager.h
@@ -18,12 +18,17 @@ #include "ash/public/cpp/shelf_types.h" #include "base/macros.h" #include "base/observer_list.h" +#include "base/scoped_observer.h" #include "base/timer/timer.h" #include "ui/gfx/geometry/insets.h" #include "ui/gfx/geometry/rect.h" #include "ui/keyboard/keyboard_controller_observer.h" #include "ui/wm/public/activation_change_observer.h" +namespace keyboard { +class KeyboardController; +} + namespace ui { class ImplicitAnimationObserver; class MouseEvent; @@ -135,6 +140,8 @@ // Overridden from ShellObserver: void OnShelfAutoHideBehaviorChanged(WmWindow* root_window) override; void OnPinnedStateChanged(WmWindow* pinned_window) override; + void OnVirtualKeyboardStateChanged(bool activated, + WmWindow* root_window) override; // Overridden from aura::client::ActivationChangeObserver: void OnWindowActivated(ActivationReason reason, @@ -358,6 +365,10 @@ // MaybeUpdateShelfBackground() instead. ShelfBackgroundType shelf_background_type_; + ScopedObserver<keyboard::KeyboardController, + keyboard::KeyboardControllerObserver> + keyboard_observer_; + DISALLOW_COPY_AND_ASSIGN(ShelfLayoutManager); };
diff --git a/ash/common/shell_observer.h b/ash/common/shell_observer.h index facc29b..e9cd61743 100644 --- a/ash/common/shell_observer.h +++ b/ash/common/shell_observer.h
@@ -67,8 +67,9 @@ // animating but have been restored. virtual void OnMaximizeModeEnded() {} - // Called when keyboard is activated/deactivated. - virtual void OnVirtualKeyboardStateChanged(bool activated) {} + // Called when keyboard is activated/deactivated in |root_window|. + virtual void OnVirtualKeyboardStateChanged(bool activated, + WmWindow* root_window) {} // Called at the end of Shell::Init. virtual void OnShellInitialized() {}
diff --git a/ash/common/system/tray/system_tray_bubble.cc b/ash/common/system/tray/system_tray_bubble.cc index de1dcdb..75e6b04a 100644 --- a/ash/common/system/tray/system_tray_bubble.cc +++ b/ash/common/system/tray/system_tray_bubble.cc
@@ -213,14 +213,8 @@ views::View* view = manager->GetNextFocusableView(nullptr, nullptr, false, false); - // TODO(oshima): RequestFocus calls View::OnFocus even if the widget - // is not active (crbug.com/621791). Remove this check once the bug - // is fixed. - if (bubble_view_->GetWidget()->IsActive()) { + if (view) view->RequestFocus(); - } else { - manager->SetStoredFocusView(view); - } } void SystemTrayBubble::DestroyItemViews() {
diff --git a/ash/common/system/tray/system_tray_unittest.cc b/ash/common/system/tray/system_tray_unittest.cc index ba66ce65..90b68324 100644 --- a/ash/common/system/tray/system_tray_unittest.cc +++ b/ash/common/system/tray/system_tray_unittest.cc
@@ -205,30 +205,31 @@ // Make sure the opening system tray bubble will not deactivate the // other window. crbug.com/120680. TEST_F(SystemTrayTest, Activation) { - // TODO: investigate why this fails in mash. http://crbug.com/695559. - if (WmShell::Get()->IsRunningInMash()) - return; - SystemTray* tray = GetPrimarySystemTray(); std::unique_ptr<views::Widget> widget(CreateTestWidget( nullptr, kShellWindowId_DefaultContainer, gfx::Rect(0, 0, 100, 100))); EXPECT_TRUE(widget->IsActive()); + // The window stays active after the bubble opens. tray->ShowDefaultView(BUBBLE_CREATE_NEW); ASSERT_TRUE(tray->GetWidget()); EXPECT_FALSE(tray->GetSystemBubble()->bubble_view()->GetWidget()->IsActive()); EXPECT_TRUE(widget->IsActive()); + // Activating the bubble makes the window lose activation. tray->ActivateBubble(); EXPECT_TRUE(tray->GetSystemBubble()->bubble_view()->GetWidget()->IsActive()); EXPECT_FALSE(widget->IsActive()); - // Accelerator will activate the bubble. + // Closing the bubble re-activates the window. tray->CloseSystemBubble(); - EXPECT_TRUE(widget->IsActive()); + + // Opening the bubble with an accelerator activates the bubble because the + // user will probably navigate with the keyboard. WmShell::Get()->accelerator_controller()->PerformActionIfEnabled( SHOW_SYSTEM_TRAY_BUBBLE); + ASSERT_TRUE(tray->GetWidget()); EXPECT_TRUE(tray->GetSystemBubble()->bubble_view()->GetWidget()->IsActive()); EXPECT_FALSE(widget->IsActive()); }
diff --git a/ash/common/wallpaper/OWNERS b/ash/common/wallpaper/OWNERS index 00e0d76..fee2d639 100644 --- a/ash/common/wallpaper/OWNERS +++ b/ash/common/wallpaper/OWNERS
@@ -1,3 +1,5 @@ achuith@chromium.org bshe@chromium.org xdai@chromium.org + +# COMPONENT: UI>Shell>Wallpaper
diff --git a/ash/common/wallpaper/wallpaper_controller.cc b/ash/common/wallpaper/wallpaper_controller.cc index ac10132..d1b23e2 100644 --- a/ash/common/wallpaper/wallpaper_controller.cc +++ b/ash/common/wallpaper/wallpaper_controller.cc
@@ -98,6 +98,12 @@ return gfx::ImageSkia(); } +uint32_t WallpaperController::GetWallpaperOriginalImageId() const { + if (current_wallpaper_) + return current_wallpaper_->original_image_id(); + return 0; +} + void WallpaperController::AddObserver(WallpaperControllerObserver* observer) { observers_.AddObserver(observer); }
diff --git a/ash/common/wallpaper/wallpaper_controller.h b/ash/common/wallpaper/wallpaper_controller.h index 0cead11..63244d6 100644 --- a/ash/common/wallpaper/wallpaper_controller.h +++ b/ash/common/wallpaper/wallpaper_controller.h
@@ -61,6 +61,7 @@ // Provides current image on the wallpaper, or empty gfx::ImageSkia if there // is no image, e.g. wallpaper is none. gfx::ImageSkia GetWallpaper() const; + uint32_t GetWallpaperOriginalImageId() const; wallpaper::WallpaperLayout GetWallpaperLayout() const;
diff --git a/ash/common/wm/OWNERS b/ash/common/wm/OWNERS index 6310ae0..3996e09 100644 --- a/ash/common/wm/OWNERS +++ b/ash/common/wm/OWNERS
@@ -1,3 +1 @@ -pkotwicz@chromium.org -varkha@chromium.org -flackr@chromium.org +file://ash/wm/OWNERS
diff --git a/ash/common/wm/dock/docked_window_layout_manager.cc b/ash/common/wm/dock/docked_window_layout_manager.cc index d004da9..0cbfc48 100644 --- a/ash/common/wm/dock/docked_window_layout_manager.cc +++ b/ash/common/wm/dock/docked_window_layout_manager.cc
@@ -5,6 +5,7 @@ #include "ash/common/wm/dock/docked_window_layout_manager.h" #include "ash/animation/animation_change_type.h" +#include "ash/common/keyboard/keyboard_observer_register.h" #include "ash/common/shelf/shelf_background_animator.h" #include "ash/common/shelf/shelf_background_animator_observer.h" #include "ash/common/shelf/shelf_constants.h" @@ -30,6 +31,7 @@ #include "ui/compositor/scoped_layer_animation_settings.h" #include "ui/display/display.h" #include "ui/display/screen.h" +#include "ui/keyboard/keyboard_controller.h" #include "ui/views/background.h" #include "ui/wm/core/coordinate_conversion.h" #include "ui/wm/core/window_animations.h" @@ -381,7 +383,8 @@ event_source_(DOCKED_ACTION_SOURCE_UNKNOWN), last_active_window_(nullptr), last_action_time_(base::Time::Now()), - background_widget_(nullptr) { + background_widget_(nullptr), + keyboard_observer_(this) { DCHECK(dock_container); Shell::GetInstance()->AddShellObserver(this); Shell::GetInstance()->activation_client()->AddObserver(this); @@ -895,6 +898,14 @@ UpdateDockBounds(DockedWindowLayoutManagerObserver::CHILD_CHANGED); } +void DockedWindowLayoutManager::OnVirtualKeyboardStateChanged( + bool activated, + WmWindow* root_window) { + UpdateKeyboardObserverFromStateChanged(activated, root_window, + dock_container_->GetRootWindow(), + &keyboard_observer_); +} + //////////////////////////////////////////////////////////////////////////////// // DockedWindowLayoutManager private implementation: @@ -1337,6 +1348,8 @@ UpdateDockBounds(DockedWindowLayoutManagerObserver::KEYBOARD_BOUNDS_CHANGING); } -void DockedWindowLayoutManager::OnKeyboardClosed() {} +void DockedWindowLayoutManager::OnKeyboardClosed() { + keyboard_observer_.RemoveAll(); +} } // namespace ash
diff --git a/ash/common/wm/dock/docked_window_layout_manager.h b/ash/common/wm/dock/docked_window_layout_manager.h index f3638907..f51e73b 100644 --- a/ash/common/wm/dock/docked_window_layout_manager.h +++ b/ash/common/wm/dock/docked_window_layout_manager.h
@@ -16,6 +16,7 @@ #include "base/compiler_specific.h" #include "base/macros.h" #include "base/observer_list.h" +#include "base/scoped_observer.h" #include "base/time/time.h" #include "ui/aura/window_observer.h" #include "ui/display/display_observer.h" @@ -23,6 +24,10 @@ #include "ui/keyboard/keyboard_controller_observer.h" #include "ui/wm/public/activation_change_observer.h" +namespace keyboard { +class KeyboardController; +} + namespace ash { class DockedBackgroundWidget; class DockedWindowLayoutManagerObserver; @@ -161,6 +166,8 @@ WmWindow* root_window) override; void OnOverviewModeStarting() override; void OnOverviewModeEnded() override; + void OnVirtualKeyboardStateChanged(bool activated, + WmWindow* root_window) override; private: struct CompareMinimumHeight; @@ -315,6 +322,10 @@ // Observers of dock bounds changes. base::ObserverList<DockedWindowLayoutManagerObserver> observer_list_; + ScopedObserver<keyboard::KeyboardController, + keyboard::KeyboardControllerObserver> + keyboard_observer_; + DISALLOW_COPY_AND_ASSIGN(DockedWindowLayoutManager); };
diff --git a/ash/common/wm/lock_layout_manager.cc b/ash/common/wm/lock_layout_manager.cc index f9d248f..1b5c27e 100644 --- a/ash/common/wm/lock_layout_manager.cc +++ b/ash/common/wm/lock_layout_manager.cc
@@ -4,6 +4,7 @@ #include "ash/common/wm/lock_layout_manager.h" +#include "ash/common/keyboard/keyboard_observer_register.h" #include "ash/common/wm/lock_window_state.h" #include "ash/common/wm/window_state.h" #include "ash/common/wm/wm_event.h" @@ -19,13 +20,11 @@ : wm::WmSnapToPixelLayoutManager(), window_(window), root_window_(window->GetRootWindow()), - is_observing_keyboard_(false) { + keyboard_observer_(this) { Shell::GetInstance()->AddShellObserver(this); root_window_->aura_window()->AddObserver(this); - if (keyboard::KeyboardController::GetInstance()) { - keyboard::KeyboardController::GetInstance()->AddObserver(this); - is_observing_keyboard_ = true; - } + if (keyboard::KeyboardController::GetInstance()) + keyboard_observer_.Add(keyboard::KeyboardController::GetInstance()); } LockLayoutManager::~LockLayoutManager() { @@ -36,11 +35,6 @@ child->aura_window()->RemoveObserver(this); Shell::GetInstance()->RemoveShellObserver(this); - - if (keyboard::KeyboardController::GetInstance() && is_observing_keyboard_) { - keyboard::KeyboardController::GetInstance()->RemoveObserver(this); - is_observing_keyboard_ = false; - } } void LockLayoutManager::OnWindowResized() { @@ -88,18 +82,10 @@ } } -void LockLayoutManager::OnVirtualKeyboardStateChanged(bool activated) { - if (keyboard::KeyboardController::GetInstance()) { - if (activated) { - if (!is_observing_keyboard_) { - keyboard::KeyboardController::GetInstance()->AddObserver(this); - is_observing_keyboard_ = true; - } - } else { - keyboard::KeyboardController::GetInstance()->RemoveObserver(this); - is_observing_keyboard_ = false; - } - } +void LockLayoutManager::OnVirtualKeyboardStateChanged(bool activated, + WmWindow* root_window) { + UpdateKeyboardObserverFromStateChanged(activated, root_window, root_window_, + &keyboard_observer_); } void LockLayoutManager::OnKeyboardBoundsChanging(const gfx::Rect& new_bounds) { @@ -107,7 +93,9 @@ OnWindowResized(); } -void LockLayoutManager::OnKeyboardClosed() {} +void LockLayoutManager::OnKeyboardClosed() { + keyboard_observer_.RemoveAll(); +} void LockLayoutManager::AdjustWindowsForWorkAreaChange( const wm::WMEvent* event) {
diff --git a/ash/common/wm/lock_layout_manager.h b/ash/common/wm/lock_layout_manager.h index 9ba7473..c903018 100644 --- a/ash/common/wm/lock_layout_manager.h +++ b/ash/common/wm/lock_layout_manager.h
@@ -10,6 +10,7 @@ #include "ash/common/wm/wm_snap_to_pixel_layout_manager.h" #include "ash/common/wm/wm_types.h" #include "base/macros.h" +#include "base/scoped_observer.h" #include "ui/aura/window_observer.h" #include "ui/gfx/geometry/rect.h" #include "ui/keyboard/keyboard_controller.h" @@ -57,7 +58,8 @@ const gfx::Rect& new_bounds) override; // ShellObserver: - void OnVirtualKeyboardStateChanged(bool activated) override; + void OnVirtualKeyboardStateChanged(bool activated, + WmWindow* root_window) override; // keyboard::KeyboardControllerObserver overrides: void OnKeyboardBoundsChanging(const gfx::Rect& new_bounds) override; @@ -71,8 +73,9 @@ WmWindow* window_; WmWindow* root_window_; - // True is subscribed as keyboard controller observer. - bool is_observing_keyboard_; + ScopedObserver<keyboard::KeyboardController, + keyboard::KeyboardControllerObserver> + keyboard_observer_; // The bounds of the keyboard. gfx::Rect keyboard_bounds_;
diff --git a/ash/common/wm/panels/panel_layout_manager.cc b/ash/common/wm/panels/panel_layout_manager.cc index ba2b0f8..4fe8a1b 100644 --- a/ash/common/wm/panels/panel_layout_manager.cc +++ b/ash/common/wm/panels/panel_layout_manager.cc
@@ -8,6 +8,7 @@ #include <map> #include <utility> +#include "ash/common/keyboard/keyboard_observer_register.h" #include "ash/common/shelf/wm_shelf.h" #include "ash/common/shelf/wm_shelf_util.h" #include "ash/common/wm/overview/window_selector_controller.h" @@ -101,7 +102,7 @@ max_major(0), major_pos(0), major_length(0), - window(NULL), + window(nullptr), slide_in(false) {} int min_major; @@ -245,9 +246,10 @@ in_add_window_(false), in_layout_(false), show_callout_widgets_(true), - dragged_panel_(NULL), + dragged_panel_(nullptr), shelf_(nullptr), - last_active_panel_(NULL), + last_active_panel_(nullptr), + keyboard_observer_(this), weak_factory_(this) { DCHECK(panel_container); WmShell* shell = panel_container->GetShell(); @@ -294,7 +296,7 @@ } void PanelLayoutManager::FinishDragging() { - dragged_panel_ = NULL; + dragged_panel_ = nullptr; Relayout(); } @@ -385,10 +387,10 @@ child->GetWindowState()->RemoveObserver(this); if (dragged_panel_ == child) - dragged_panel_ = NULL; + dragged_panel_ = nullptr; if (last_active_panel_ == child) - last_active_panel_ = NULL; + last_active_panel_ = nullptr; Relayout(); } @@ -452,6 +454,13 @@ Relayout(); } +void PanelLayoutManager::OnVirtualKeyboardStateChanged(bool activated, + WmWindow* root_window) { + UpdateKeyboardObserverFromStateChanged(activated, root_window, + panel_container_->GetRootWindow(), + &keyboard_observer_); +} + ///////////////////////////////////////////////////////////////////////////// // PanelLayoutManager, WindowObserver implementation: @@ -792,7 +801,7 @@ previous_panel = it->second; } - previous_panel = NULL; + previous_panel = nullptr; for (std::map<int, WmWindow*>::const_reverse_iterator it = window_ordering.rbegin(); it != window_ordering.rend() && it->second != active_panel; ++it) { @@ -930,6 +939,8 @@ OnWindowResized(); } -void PanelLayoutManager::OnKeyboardClosed() {} +void PanelLayoutManager::OnKeyboardClosed() { + keyboard_observer_.RemoveAll(); +} } // namespace ash
diff --git a/ash/common/wm/panels/panel_layout_manager.h b/ash/common/wm/panels/panel_layout_manager.h index 65c19ab..307ca5c 100644 --- a/ash/common/wm/panels/panel_layout_manager.h +++ b/ash/common/wm/panels/panel_layout_manager.h
@@ -18,6 +18,7 @@ #include "base/compiler_specific.h" #include "base/macros.h" #include "base/memory/weak_ptr.h" +#include "base/scoped_observer.h" #include "ui/aura/window_observer.h" #include "ui/aura/window_tracker.h" #include "ui/keyboard/keyboard_controller.h" @@ -95,6 +96,8 @@ // Overridden from ShellObserver: void OnOverviewModeEnded() override; void OnShelfAlignmentChanged(WmWindow* root_window) override; + void OnVirtualKeyboardStateChanged(bool activated, + WmWindow* root_window) override; // Overridden from aura::WindowObserver void OnWindowPropertyChanged(aura::Window* window, @@ -196,6 +199,11 @@ // The last active panel. Used to maintain stacking order even if no panels // are currently focused. WmWindow* last_active_panel_; + + ScopedObserver<keyboard::KeyboardController, + keyboard::KeyboardControllerObserver> + keyboard_observer_; + base::WeakPtrFactory<PanelLayoutManager> weak_factory_; DISALLOW_COPY_AND_ASSIGN(PanelLayoutManager);
diff --git a/ash/common/wm/workspace/workspace_layout_manager.cc b/ash/common/wm/workspace/workspace_layout_manager.cc index f33abb0f..ddef2f2 100644 --- a/ash/common/wm/workspace/workspace_layout_manager.cc +++ b/ash/common/wm/workspace/workspace_layout_manager.cc
@@ -6,6 +6,7 @@ #include <algorithm> +#include "ash/common/keyboard/keyboard_observer_register.h" #include "ash/common/session/session_state_delegate.h" #include "ash/common/shelf/wm_shelf.h" #include "ash/common/wm/always_on_top_controller.h" @@ -40,7 +41,8 @@ root_window_controller_(root_window_->GetRootWindowController()), shell_(window_->GetShell()), work_area_in_parent_(wm::GetDisplayWorkAreaBoundsInParent(window_)), - is_fullscreen_(wm::GetWindowForFullscreenMode(window) != nullptr) { + is_fullscreen_(wm::GetWindowForFullscreenMode(window) != nullptr), + keyboard_observer_(this) { Shell::GetInstance()->AddShellObserver(this); Shell::GetInstance()->activation_client()->AddObserver(this); root_window_->aura_window()->AddObserver(this); @@ -178,7 +180,9 @@ } } -void WorkspaceLayoutManager::OnKeyboardClosed() {} +void WorkspaceLayoutManager::OnKeyboardClosed() { + keyboard_observer_.RemoveAll(); +} ////////////////////////////////////////////////////////////////////////////// // WorkspaceLayoutManager, aura::WindowObserver implementation: @@ -327,6 +331,13 @@ UpdateAlwaysOnTop(WmShell::Get()->IsPinned() ? pinned_window : nullptr); } +void WorkspaceLayoutManager::OnVirtualKeyboardStateChanged( + bool activated, + WmWindow* root_window) { + UpdateKeyboardObserverFromStateChanged(activated, root_window, root_window_, + &keyboard_observer_); +} + ////////////////////////////////////////////////////////////////////////////// // WorkspaceLayoutManager, private:
diff --git a/ash/common/wm/workspace/workspace_layout_manager.h b/ash/common/wm/workspace/workspace_layout_manager.h index af7d795..3f3ac67 100644 --- a/ash/common/wm/workspace/workspace_layout_manager.h +++ b/ash/common/wm/workspace/workspace_layout_manager.h
@@ -14,12 +14,17 @@ #include "ash/common/wm/wm_types.h" #include "ash/common/wm_layout_manager.h" #include "base/macros.h" +#include "base/scoped_observer.h" #include "ui/aura/window_observer.h" #include "ui/display/display_observer.h" #include "ui/gfx/geometry/rect.h" #include "ui/keyboard/keyboard_controller_observer.h" #include "ui/wm/public/activation_change_observer.h" +namespace keyboard { +class KeyboardController; +} + namespace ash { class RootWindowController; @@ -92,6 +97,8 @@ void OnFullscreenStateChanged(bool is_fullscreen, WmWindow* root_window) override; void OnPinnedStateChanged(WmWindow* pinned_window) override; + void OnVirtualKeyboardStateChanged(bool activated, + WmWindow* root_window) override; private: typedef std::set<WmWindow*> WindowSet; @@ -134,6 +141,10 @@ // topmost visible window. std::unique_ptr<WorkspaceLayoutManagerBackdropDelegate> backdrop_delegate_; + ScopedObserver<keyboard::KeyboardController, + keyboard::KeyboardControllerObserver> + keyboard_observer_; + DISALLOW_COPY_AND_ASSIGN(WorkspaceLayoutManager); };
diff --git a/ash/common/wm_shell.cc b/ash/common/wm_shell.cc index 08ef8c0..0ddea52 100644 --- a/ash/common/wm_shell.cc +++ b/ash/common/wm_shell.cc
@@ -45,7 +45,6 @@ #include "base/bind.h" #include "base/logging.h" #include "base/memory/ptr_util.h" -#include "ui/app_list/presenter/app_list.h" #include "ui/display/display.h" namespace ash { @@ -144,8 +143,7 @@ } WmShell::WmShell() - : app_list_(base::MakeUnique<app_list::AppList>()), - brightness_control_delegate_( + : brightness_control_delegate_( base::MakeUnique<system::BrightnessControllerChromeos>()), cast_config_(base::MakeUnique<CastConfigController>()), focus_cycler_(base::MakeUnique<FocusCycler>()), @@ -168,7 +166,6 @@ DCHECK(!instance_); instance_ = this; session_controller_->AddSessionStateObserver(this); - } RootWindowController* WmShell::GetPrimaryRootWindowController() { @@ -223,30 +220,6 @@ } } -void WmShell::ShowAppList() { - // Show the app list on the default display for new windows. - app_list_->Show( - Shell::GetWmRootWindowForNewWindows()->GetDisplayNearestWindow().id()); -} - -void WmShell::DismissAppList() { - app_list_->Dismiss(); -} - -void WmShell::ToggleAppList() { - // Toggle the app list on the default display for new windows. - app_list_->ToggleAppList( - Shell::GetWmRootWindowForNewWindows()->GetDisplayNearestWindow().id()); -} - -bool WmShell::IsApplistVisible() const { - return app_list_->IsVisible(); -} - -bool WmShell::GetAppListTargetVisibility() const { - return app_list_->GetTargetVisibility(); -} - void WmShell::SetKeyboardUI(std::unique_ptr<KeyboardUI> keyboard_ui) { keyboard_ui_ = std::move(keyboard_ui); }
diff --git a/ash/common/wm_shell.h b/ash/common/wm_shell.h index ecf2d82b..2aaf72a9 100644 --- a/ash/common/wm_shell.h +++ b/ash/common/wm_shell.h
@@ -21,10 +21,6 @@ #include "ui/wm/public/activation_change_observer.h" #include "ui/wm/public/window_types.h" -namespace app_list { -class AppList; -} - namespace display { class Display; class ManagedDisplayInfo; @@ -100,8 +96,6 @@ return accelerator_controller_.get(); } - app_list::AppList* app_list() { return app_list_.get(); } - BrightnessControlDelegate* brightness_control_delegate() { return brightness_control_delegate_.get(); } @@ -234,22 +228,6 @@ simulate_modal_window_open_for_testing_ = modal_window_open; } - // Shows the app list on the active root window. - void ShowAppList(); - - // Dismisses the app list. - void DismissAppList(); - - // Shows the app list if it's not visible. Dismisses it otherwise. - void ToggleAppList(); - - // Returns app list actual visibility. This might differ from - // GetAppListTargetVisibility() when hiding animation is still in flight. - bool IsApplistVisible() const; - - // Returns app list target visibility. - bool GetAppListTargetVisibility() const; - // Returns true if a window is currently pinned. virtual bool IsPinned() = 0; @@ -386,7 +364,6 @@ static WmShell* instance_; std::unique_ptr<AcceleratorController> accelerator_controller_; - std::unique_ptr<app_list::AppList> app_list_; std::unique_ptr<BrightnessControlDelegate> brightness_control_delegate_; std::unique_ptr<CastConfigController> cast_config_; std::unique_ptr<FocusCycler> focus_cycler_;
diff --git a/ash/display/display_configuration_controller.cc b/ash/display/display_configuration_controller.cc index 2cbf475..6a3aa8a 100644 --- a/ash/display/display_configuration_controller.cc +++ b/ash/display/display_configuration_controller.cc
@@ -65,9 +65,8 @@ } void DisplayConfigurationController::SetDisplayLayout( - std::unique_ptr<display::DisplayLayout> layout, - bool user_action) { - if (user_action && display_animator_) { + std::unique_ptr<display::DisplayLayout> layout) { + if (display_animator_) { display_animator_->StartFadeOutAnimation( base::Bind(&DisplayConfigurationController::SetDisplayLayoutImpl, weak_ptr_factory_.GetWeakPtr(), base::Passed(&layout))); @@ -76,14 +75,11 @@ } } -void DisplayConfigurationController::SetMirrorMode(bool mirror, - bool user_action) { +void DisplayConfigurationController::SetMirrorMode(bool mirror) { if (display_manager_->num_connected_displays() > 2) { - if (user_action) { - ShowDisplayErrorNotification( - l10n_util::GetStringUTF16(IDS_ASH_DISPLAY_MIRRORING_NOT_SUPPORTED), - false); - } + ShowDisplayErrorNotification( + l10n_util::GetStringUTF16(IDS_ASH_DISPLAY_MIRRORING_NOT_SUPPORTED), + false); return; } if (display_manager_->num_connected_displays() <= 1 || @@ -91,7 +87,7 @@ return; } SetThrottleTimeout(kCycleDisplayThrottleTimeoutMs); - if (user_action && display_animator_) { + if (display_animator_) { display_animator_->StartFadeOutAnimation( base::Bind(&DisplayConfigurationController::SetMirrorModeImpl, weak_ptr_factory_.GetWeakPtr(), mirror)); @@ -111,13 +107,12 @@ display_manager_->SetDisplayRotation(display_id, rotation, source); } -void DisplayConfigurationController::SetPrimaryDisplayId(int64_t display_id, - bool user_action) { +void DisplayConfigurationController::SetPrimaryDisplayId(int64_t display_id) { if (display_manager_->GetNumDisplays() <= 1 || IsLimited()) return; SetThrottleTimeout(kSetPrimaryDisplayThrottleTimeoutMs); - if (user_action && display_animator_) { + if (display_animator_) { display_animator_->StartFadeOutAnimation( base::Bind(&DisplayConfigurationController::SetPrimaryDisplayIdImpl, weak_ptr_factory_.GetWeakPtr(), display_id));
diff --git a/ash/display/display_configuration_controller.h b/ash/display/display_configuration_controller.h index 3ab4d160..03563a2 100644 --- a/ash/display/display_configuration_controller.h +++ b/ash/display/display_configuration_controller.h
@@ -42,12 +42,11 @@ // Sets the layout for the current displays with a fade in/out // animation. Currently |display_id| is assumed to be the secondary // display. TODO(oshima/stevenjb): Support 3+ displays. - void SetDisplayLayout(std::unique_ptr<display::DisplayLayout> layout, - bool user_action); + void SetDisplayLayout(std::unique_ptr<display::DisplayLayout> layout); // Sets the mirror mode with a fade-in/fade-out animation. Affects all // displays. - void SetMirrorMode(bool mirror, bool user_action); + void SetMirrorMode(bool mirror); // Sets the display's rotation with animation if available. void SetDisplayRotation(int64_t display_id, @@ -55,7 +54,7 @@ display::Display::RotationSource source); // Sets the primary display id. - void SetPrimaryDisplayId(int64_t display_id, bool user_action); + void SetPrimaryDisplayId(int64_t display_id); // WindowTreeHostManager::Observer void OnDisplayConfigurationChanged() override;
diff --git a/ash/display/display_manager_unittest.cc b/ash/display/display_manager_unittest.cc index 7f3e87e..49240210 100644 --- a/ash/display/display_manager_unittest.cc +++ b/ash/display/display_manager_unittest.cc
@@ -968,7 +968,7 @@ TEST_F(DisplayManagerTest, NoMirrorInThreeDisplays) { UpdateDisplay("640x480,320x200,400x300"); ash::Shell::GetInstance()->display_configuration_controller()->SetMirrorMode( - true, true); + true); EXPECT_FALSE(display_manager()->IsInMirrorMode()); EXPECT_EQ(3u, display_manager()->GetNumDisplays()); EXPECT_EQ(l10n_util::GetStringUTF16(IDS_ASH_DISPLAY_MIRRORING_NOT_SUPPORTED),
diff --git a/ash/mus/BUILD.gn b/ash/mus/BUILD.gn index 753e2bc..784bdb3 100644 --- a/ash/mus/BUILD.gn +++ b/ash/mus/BUILD.gn
@@ -32,8 +32,6 @@ "disconnected_app_handler.h", "drag_window_resizer.cc", "drag_window_resizer.h", - "frame/custom_frame_view_mus.cc", - "frame/custom_frame_view_mus.h", "frame/detached_title_area_renderer.cc", "frame/detached_title_area_renderer.h", "keyboard_ui_mus.cc", @@ -190,6 +188,7 @@ sources = [ "app_launch_unittest.cc", "bridge/wm_shell_mus_test_api.h", + "non_client_frame_controller_unittest.cc", "screen_mus_unittest.cc", "test/ash_test_impl_mus.cc", "test/ash_test_impl_mus.h", @@ -210,6 +209,7 @@ "//base", "//base/test:test_config", "//base/test:test_support", + "//cc:test_support", "//mash/quick_launch/public/interfaces:constants", "//mojo/public/cpp/system", "//services/service_manager/public/cpp:service_test_support", @@ -222,6 +222,7 @@ "//ui/aura:test_support", "//ui/base", "//ui/base:test_support", + "//ui/compositor:test_support", "//ui/display", "//ui/events", "//ui/events:test_support",
diff --git a/ash/mus/DEPS b/ash/mus/DEPS index b508aea6..306f019f 100644 --- a/ash/mus/DEPS +++ b/ash/mus/DEPS
@@ -24,4 +24,10 @@ "app_launch_unittest.cc": [ "+mash/quick_launch/public", ], + + "non_client_frame_controller_unittest.cc": [ + # These tests inspect the DrawQuads in the CompositorFrame generated by the + # compositor. So this needs to explicitly depend on cc. + "+cc", + ], }
diff --git a/ash/mus/accelerators/accelerator_controller_delegate_mus.cc b/ash/mus/accelerators/accelerator_controller_delegate_mus.cc index 38771a2..41e30db5 100644 --- a/ash/mus/accelerators/accelerator_controller_delegate_mus.cc +++ b/ash/mus/accelerators/accelerator_controller_delegate_mus.cc
@@ -52,7 +52,6 @@ case POWER_PRESSED: case POWER_RELEASED: case ROTATE_WINDOW: - case SHOW_SYSTEM_TRAY_BUBBLE: case TAKE_PARTIAL_SCREENSHOT: case TAKE_SCREENSHOT: case TAKE_WINDOW_SCREENSHOT: @@ -146,14 +145,5 @@ } } -void AcceleratorControllerDelegateMus::ShowDeprecatedAcceleratorNotification( - const char* const notification_id, - int message_id, - int old_shortcut_id, - int new_shortcut_id) { - // TODO: http://crbug.com/630316. - NOTIMPLEMENTED(); -} - } // namespace mus } // namespace ash
diff --git a/ash/mus/accelerators/accelerator_controller_delegate_mus.h b/ash/mus/accelerators/accelerator_controller_delegate_mus.h index 79a30fee..f77afc3 100644 --- a/ash/mus/accelerators/accelerator_controller_delegate_mus.h +++ b/ash/mus/accelerators/accelerator_controller_delegate_mus.h
@@ -26,10 +26,6 @@ const ui::Accelerator& previous_accelerator) override; void PerformAction(AcceleratorAction action, const ui::Accelerator& accelerator) override; - void ShowDeprecatedAcceleratorNotification(const char* const notification_id, - int message_id, - int old_shortcut_id, - int new_shortcut_id) override; private: WindowManager* window_manager_;
diff --git a/ash/mus/frame/custom_frame_view_mus.cc b/ash/mus/frame/custom_frame_view_mus.cc deleted file mode 100644 index fddd1a8..0000000 --- a/ash/mus/frame/custom_frame_view_mus.cc +++ /dev/null
@@ -1,47 +0,0 @@ -// Copyright 2016 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 "ash/mus/frame/custom_frame_view_mus.h" - -#include "ui/compositor/paint_cache.h" -#include "ui/compositor/paint_recorder.h" -#include "ui/gfx/canvas.h" - -namespace ash { -namespace mus { - -CustomFrameViewMus::CustomFrameViewMus( - views::Widget* widget, - ImmersiveFullscreenControllerDelegate* immersive_delegate, - bool enable_immersive, - mojom::WindowStyle window_style) - : CustomFrameViewAsh(widget, - immersive_delegate, - enable_immersive, - window_style) {} - -CustomFrameViewMus::~CustomFrameViewMus() {} - -void CustomFrameViewMus::OnPaint(gfx::Canvas* canvas) { - canvas->Save(); - CustomFrameViewAsh::OnPaint(canvas); - canvas->Restore(); - - // The client app draws the client area. Make ours totally transparent so - // we only see the client app's client area. - canvas->FillRect(GetBoundsForClientView(), SK_ColorBLACK, - SkBlendMode::kClear); -} - -void CustomFrameViewMus::PaintChildren(const ui::PaintContext& context) { - CustomFrameViewAsh::PaintChildren(context); - // The client app draws the client area. Make ours totally transparent so - // we only see the client apps client area. - ui::PaintRecorder recorder(context, size(), &paint_cache_); - recorder.canvas()->FillRect(GetBoundsForClientView(), SK_ColorBLACK, - SkBlendMode::kClear); -} - -} // namespace mus -} // namespace ash
diff --git a/ash/mus/frame/custom_frame_view_mus.h b/ash/mus/frame/custom_frame_view_mus.h deleted file mode 100644 index 87588f1b..0000000 --- a/ash/mus/frame/custom_frame_view_mus.h +++ /dev/null
@@ -1,35 +0,0 @@ -// Copyright 2016 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 ASH_MUS_FRAME_CUSTOM_FRAME_VIEW_MUS_H_ -#define ASH_MUS_FRAME_CUSTOM_FRAME_VIEW_MUS_H_ - -#include "ash/common/frame/custom_frame_view_ash.h" -#include "ui/compositor/paint_cache.h" - -namespace ash { -namespace mus { - -class CustomFrameViewMus : public CustomFrameViewAsh { - public: - CustomFrameViewMus(views::Widget* widget, - ImmersiveFullscreenControllerDelegate* immersive_delegate, - bool enable_immersive, - mojom::WindowStyle window_style); - ~CustomFrameViewMus() override; - - // CustomFrameViewAsh: - void OnPaint(gfx::Canvas* canvas) override; - void PaintChildren(const ui::PaintContext& context) override; - - private: - ui::PaintCache paint_cache_; - - DISALLOW_COPY_AND_ASSIGN(CustomFrameViewMus); -}; - -} // namespace mus -} // namespace ash - -#endif // ASH_MUS_FRAME_CUSTOM_FRAME_VIEW_MUS_H_
diff --git a/ash/mus/non_client_frame_controller.cc b/ash/mus/non_client_frame_controller.cc index 0633c5a..7cdd368 100644 --- a/ash/mus/non_client_frame_controller.cc +++ b/ash/mus/non_client_frame_controller.cc
@@ -15,7 +15,6 @@ #include "ash/common/frame/custom_frame_view_ash.h" #include "ash/common/wm/panels/panel_frame_view.h" #include "ash/common/wm_window.h" -#include "ash/mus/frame/custom_frame_view_mus.h" #include "ash/mus/frame/detached_title_area_renderer.h" #include "ash/mus/move_event_handler.h" #include "ash/mus/property_util.h" @@ -205,11 +204,18 @@ immersive_delegate_ = base::MakeUnique<ImmersiveFullscreenControllerDelegateMus>(GetWidget(), window); - // See description for details on ownership. custom_frame_view_ = - new CustomFrameViewMus(GetWidget(), immersive_delegate_.get(), + new CustomFrameViewAsh(GetWidget(), immersive_delegate_.get(), enable_immersive_, window_style_); + // Only the header actually paints any content. So the rest of the region is + // marked as transparent content (see below in NonClientFrameController() + // ctor). So, it is necessary to provide a texture-layer for the header + // view. + views::View* header_view = custom_frame_view_->header_view(); + header_view->SetPaintToLayer(ui::LAYER_TEXTURED); + header_view->layer()->SetFillsBoundsOpaquely(false); + return custom_frame_view_; } @@ -226,7 +232,7 @@ // Not used for panels or if |remove_standard_frame_| is true. This is owned // by the Widget's view hierarchy (e.g. it's a child of Widget's root View). - CustomFrameViewMus* custom_frame_view_ = nullptr; + CustomFrameViewAsh* custom_frame_view_ = nullptr; DISALLOW_COPY_AND_ASSIGN(WmNativeWidgetAura); }; @@ -291,8 +297,8 @@ // (mus) window can have focus. params.delegate = this; params.bounds = bounds; - // The title area leaves notches in the corners, requring translucent windows. - params.opacity = views::Widget::InitParams::TRANSLUCENT_WINDOW; + params.opacity = views::Widget::InitParams::OPAQUE_WINDOW; + params.layer_type = ui::LAYER_SOLID_COLOR; WmNativeWidgetAura* native_widget = new WmNativeWidgetAura( widget_, window_manager_client_, ShouldRemoveStandardFrame(*properties), ShouldEnableImmersive(*properties), GetWindowStyle(*properties)); @@ -317,6 +323,15 @@ widget_->Init(params); did_init_native_widget_ = true; + // Only the caption draws any content. So the caption has its own layer (see + // above in WmNativeWidgetAura::CreateNonClientFrameView()). The rest of the + // region needs to take part in occlusion in the compositor, but not generate + // any content to draw. So the layer is marked as opaque and to draw + // solid-color (but the color is transparent, so nothing is actually drawn). + ui::Layer* layer = widget_->GetNativeWindow()->layer(); + layer->SetColor(SK_ColorTRANSPARENT); + layer->SetFillsBoundsOpaquely(true); + WmWindow* wm_window = WmWindow::Get(window_); const gfx::Insets extended_hit_region = wm_window->ShouldUseExtendedHitRegion() ? GetExtendedHitRegion()
diff --git a/ash/mus/non_client_frame_controller_unittest.cc b/ash/mus/non_client_frame_controller_unittest.cc new file mode 100644 index 0000000..ab38ac3 --- /dev/null +++ b/ash/mus/non_client_frame_controller_unittest.cc
@@ -0,0 +1,227 @@ +// 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 "ash/mus/non_client_frame_controller.h" + +#include "ash/common/ash_layout_constants.h" +#include "ash/mus/top_level_window_factory.h" +#include "ash/mus/window_manager_application.h" +#include "ash/test/ash_test_base.h" +#include "ash/test/ash_test_helper.h" +#include "cc/base/math_util.h" +#include "cc/output/compositor_frame.h" +#include "cc/output/compositor_frame_sink_client.h" +#include "cc/quads/solid_color_draw_quad.h" +#include "cc/scheduler/begin_frame_source.h" +#include "cc/scheduler/delay_based_time_source.h" +#include "cc/test/fake_compositor_frame_sink.h" +#include "cc/test/test_gpu_memory_buffer_manager.h" +#include "cc/test/test_task_graph_runner.h" +#include "cc/trees/layer_tree_settings.h" +#include "services/ui/public/interfaces/window_manager_constants.mojom.h" +#include "ui/aura/env.h" +#include "ui/aura/window.h" +#include "ui/compositor/compositor.h" +#include "ui/compositor/test/draw_waiter_for_test.h" +#include "ui/views/widget/widget.h" + +namespace ash { +namespace mus { + +namespace { + +gfx::Rect GetQuadBoundsInScreen(const cc::DrawQuad* quad) { + return cc::MathUtil::MapEnclosingClippedRect( + quad->shared_quad_state->quad_to_target_transform, quad->visible_rect); +} + +bool FindColorQuad(const cc::CompositorFrame& frame, + const gfx::Rect& screen_rect, + SkColor color) { + DCHECK_EQ(1u, frame.render_pass_list.size()); + const cc::QuadList& quad_list = frame.render_pass_list[0]->quad_list; + for (const auto* quad : quad_list) { + if (quad->material != cc::DrawQuad::Material::SOLID_COLOR) + continue; + + auto* color_quad = cc::SolidColorDrawQuad::MaterialCast(quad); + if (color_quad->color != color) + continue; + if (GetQuadBoundsInScreen(quad) == screen_rect) + return true; + } + return false; +} + +bool FindTiledContentQuad(const cc::CompositorFrame& frame, + const gfx::Rect& screen_rect) { + DCHECK_EQ(1u, frame.render_pass_list.size()); + const cc::QuadList& quad_list = frame.render_pass_list[0]->quad_list; + for (const auto* quad : quad_list) { + if (quad->material == cc::DrawQuad::Material::TILED_CONTENT && + GetQuadBoundsInScreen(quad) == screen_rect) + return true; + } + return false; +} + +class FakeCompositorFrameSink : public cc::FakeCompositorFrameSink { + public: + FakeCompositorFrameSink() + : cc::FakeCompositorFrameSink(cc::TestContextProvider::Create(), + cc::TestContextProvider::CreateWorker()) {} + ~FakeCompositorFrameSink() override = default; + + private: + // cc::FakeCompositorFrameSink: + bool BindToClient(cc::CompositorFrameSinkClient* client) override { + if (!cc::FakeCompositorFrameSink::BindToClient(client)) + return false; + begin_frame_source_ = base::MakeUnique<cc::BackToBackBeginFrameSource>( + base::MakeUnique<cc::DelayBasedTimeSource>( + base::ThreadTaskRunnerHandle::Get().get())); + client_->SetBeginFrameSource(begin_frame_source_.get()); + return true; + } + + std::unique_ptr<cc::BeginFrameSource> begin_frame_source_; + + DISALLOW_COPY_AND_ASSIGN(FakeCompositorFrameSink); +}; + +} // namespace + +class NonClientFrameControllerTest : public test::AshTestBase, + public ui::ContextFactory { + public: + NonClientFrameControllerTest() = default; + ~NonClientFrameControllerTest() override = default; + + const cc::CompositorFrame& GetLastCompositorFrame() const { + return *frame_sink_->last_sent_frame(); + } + + // test::AshTestBase: + void SetUp() override { + aura::Env* env = aura::Env::GetInstance(); + DCHECK(env); + context_factory_to_restore_ = env->context_factory(); + env->set_context_factory(this); + AshTestBase::SetUp(); + } + + void TearDown() override { + AshTestBase::TearDown(); + aura::Env::GetInstance()->set_context_factory(context_factory_to_restore_); + } + + // ui::ContextFactory:: + void CreateCompositorFrameSink( + base::WeakPtr<ui::Compositor> compositor) override { + auto frame_sink = base::MakeUnique<FakeCompositorFrameSink>(); + frame_sink_ = frame_sink.get(); + compositor->SetCompositorFrameSink(std::move(frame_sink)); + } + scoped_refptr<cc::ContextProvider> SharedMainThreadContextProvider() + override { + return nullptr; + } + void RemoveCompositor(ui::Compositor* compositor) override { + frame_sink_ = nullptr; + } + bool DoesCreateTestContexts() override { return true; } + uint32_t GetImageTextureTarget(gfx::BufferFormat format, + gfx::BufferUsage usage) override { + return GL_TEXTURE_2D; + } + gpu::GpuMemoryBufferManager* GetGpuMemoryBufferManager() override { + return &gpu_memory_buffer_manager_; + } + cc::TaskGraphRunner* GetTaskGraphRunner() override { + return &task_graph_runner_; + } + void AddObserver(ui::ContextFactoryObserver* observer) override {} + void RemoveObserver(ui::ContextFactoryObserver* observer) override {} + + private: + ui::ContextFactory* context_factory_to_restore_ = nullptr; + cc::FakeCompositorFrameSink* frame_sink_ = nullptr; + cc::TestTaskGraphRunner task_graph_runner_; + cc::TestGpuMemoryBufferManager gpu_memory_buffer_manager_; + + DISALLOW_COPY_AND_ASSIGN(NonClientFrameControllerTest); +}; + +TEST_F(NonClientFrameControllerTest, ContentRegionNotDrawnForClient) { + std::map<std::string, std::vector<uint8_t>> properties; + std::unique_ptr<aura::Window> window(mus::CreateAndParentTopLevelWindow( + ash_test_helper()->window_manager_app()->window_manager(), + ui::mojom::WindowType::WINDOW, &properties)); + ASSERT_TRUE(window); + + NonClientFrameController* controller = + NonClientFrameController::Get(window.get()); + ASSERT_TRUE(controller); + views::Widget* widget = views::Widget::GetWidgetForNativeWindow(window.get()); + ASSERT_TRUE(widget); + + const int caption_height = + GetAshLayoutSize(AshLayoutSize::NON_BROWSER_CAPTION_BUTTON).height(); + const gfx::Size tile_size = cc::LayerTreeSettings().default_tile_size; + const int tile_width = tile_size.width(); + const int tile_height = tile_size.height(); + const int tile_x = tile_width; + const int tile_y = tile_height; + + const gfx::Rect kTileBounds(gfx::Point(tile_x, tile_y), tile_size); + ui::Compositor* compositor = widget->GetCompositor(); + + // Without the window visible, there should be a tile for the wallpaper at + // (tile_x, tile_y) of size |tile_size|. + compositor->ScheduleDraw(); + ui::DrawWaiterForTest::WaitForCompositingEnded(compositor); + { + const cc::CompositorFrame& frame = GetLastCompositorFrame(); + ASSERT_EQ(1u, frame.render_pass_list.size()); + EXPECT_TRUE(FindColorQuad(frame, kTileBounds, SK_ColorBLACK)); + } + + // Show |widget|, and position it so that it covers that wallpaper tile. + const gfx::Rect widget_bound(tile_x - 10, tile_y - 10, tile_width + 20, + tile_height + 20); + widget->SetBounds(widget_bound); + widget->Show(); + compositor->ScheduleDraw(); + ui::DrawWaiterForTest::WaitForCompositingEnded(compositor); + { + // This time, that tile for the wallpaper will not be drawn. + const cc::CompositorFrame& frame = GetLastCompositorFrame(); + ASSERT_EQ(1u, frame.render_pass_list.size()); + EXPECT_FALSE(FindColorQuad(frame, kTileBounds, SK_ColorBLACK)); + + // Instead, there will be some solid-color quads for the widget. + const gfx::Rect top_left(widget_bound.origin(), tile_size); + const gfx::Rect top_right( + top_left.top_right(), + gfx::Size(widget_bound.width() - top_left.width(), top_left.height())); + const gfx::Rect bottom_left( + top_left.bottom_left(), + gfx::Size(top_left.width(), widget_bound.height() - top_left.height())); + const gfx::Rect bottom_right( + top_left.bottom_right(), + gfx::Size(top_right.width(), bottom_left.height())); + EXPECT_TRUE(FindColorQuad(frame, top_left, SK_ColorTRANSPARENT)); + EXPECT_TRUE(FindColorQuad(frame, top_right, SK_ColorTRANSPARENT)); + EXPECT_TRUE(FindColorQuad(frame, bottom_left, SK_ColorTRANSPARENT)); + EXPECT_TRUE(FindColorQuad(frame, bottom_right, SK_ColorTRANSPARENT)); + + // And there will be a content quad for the window caption. + gfx::Rect caption_bound(widget_bound); + caption_bound.set_height(caption_height); + EXPECT_TRUE(FindTiledContentQuad(frame, caption_bound)); + } +} + +} // namespace mus +} // namespace ash
diff --git a/ash/root_window_controller.cc b/ash/root_window_controller.cc index b68c8849..1ba82de 100644 --- a/ash/root_window_controller.cc +++ b/ash/root_window_controller.cc
@@ -673,13 +673,8 @@ return; } DCHECK(keyboard_controller); - keyboard_controller->AddObserver(wm_shelf_->shelf_layout_manager()); - keyboard_controller->AddObserver(panel_layout_manager()); - keyboard_controller->AddObserver(docked_window_layout_manager()); - keyboard_controller->AddObserver(workspace_controller()->layout_manager()); - keyboard_controller->AddObserver( - always_on_top_controller_->GetLayoutManager()); - Shell::GetInstance()->NotifyVirtualKeyboardActivated(true); + Shell::GetInstance()->NotifyVirtualKeyboardActivated( + true, WmWindow::Get(GetRootWindow())); aura::Window* parent = GetContainer(kShellWindowId_ImeWindowParentContainer); DCHECK(parent); aura::Window* keyboard_container = keyboard_controller->GetContainerWindow(); @@ -703,14 +698,8 @@ keyboard_controller->HideKeyboard( keyboard::KeyboardController::HIDE_REASON_AUTOMATIC); parent->RemoveChild(keyboard_container); - keyboard_controller->RemoveObserver(wm_shelf_->shelf_layout_manager()); - keyboard_controller->RemoveObserver(panel_layout_manager()); - keyboard_controller->RemoveObserver(docked_window_layout_manager()); - keyboard_controller->RemoveObserver( - workspace_controller()->layout_manager()); - keyboard_controller->RemoveObserver( - always_on_top_controller_->GetLayoutManager()); - Shell::GetInstance()->NotifyVirtualKeyboardActivated(false); + Shell::GetInstance()->NotifyVirtualKeyboardActivated( + false, WmWindow::Get(GetRootWindow())); } }
diff --git a/ash/shelf/OWNERS b/ash/shelf/OWNERS index 40e921d..3bc85fd 100644 --- a/ash/shelf/OWNERS +++ b/ash/shelf/OWNERS
@@ -1 +1,4 @@ +msw@chromium.org skuhne@chromium.org + +# COMPONENT: UI>Shell>Shelf
diff --git a/ash/shelf/shelf_view_unittest.cc b/ash/shelf/shelf_view_unittest.cc index 5ca11b6c..f8f8110 100644 --- a/ash/shelf/shelf_view_unittest.cc +++ b/ash/shelf/shelf_view_unittest.cc
@@ -1476,8 +1476,8 @@ TEST_F(ShelfViewTest, ShouldHideTooltipWithAppListWindowTest) { // Trigger mock notifications that the app list was shown. - WmShell::Get()->app_list()->OnTargetVisibilityChanged(true); - WmShell::Get()->app_list()->OnVisibilityChanged(true, GetPrimaryDisplayId()); + Shell::Get()->app_list()->OnTargetVisibilityChanged(true); + Shell::Get()->app_list()->OnVisibilityChanged(true, GetPrimaryDisplayId()); AppListButton* app_list_button = shelf_view_->GetAppListButton(); app_list_button->OnAppListShown(); @@ -2042,19 +2042,19 @@ void ShowAppList() { // Trigger a mock notification that the app list was shown. - WmShell::Get()->app_list()->OnTargetVisibilityChanged(true); + Shell::Get()->app_list()->OnTargetVisibilityChanged(true); app_list_button_->OnAppListShown(); } void DismissAppList() { // Trigger a mock notification that the app list was dismissed. - WmShell::Get()->app_list()->OnTargetVisibilityChanged(false); + Shell::Get()->app_list()->OnTargetVisibilityChanged(false); app_list_button_->OnAppListDismissed(); } void FinishAppListVisibilityChange() { // Trigger a mock notification that the app list finished animating. - app_list::AppList* app_list = WmShell::Get()->app_list(); + app_list::AppList* app_list = Shell::Get()->app_list(); app_list->OnVisibilityChanged(app_list->GetTargetVisibility(), GetPrimaryDisplayId()); }
diff --git a/ash/shell.cc b/ash/shell.cc index e416444d..5614eb1c 100644 --- a/ash/shell.cc +++ b/ash/shell.cc
@@ -111,6 +111,7 @@ #include "services/preferences/public/interfaces/preferences.mojom.h" #include "services/service_manager/public/cpp/connector.h" #include "services/ui/public/interfaces/constants.mojom.h" +#include "ui/app_list/presenter/app_list.h" #include "ui/aura/client/aura_constants.h" #include "ui/aura/env.h" #include "ui/aura/layout_manager.h" @@ -418,6 +419,30 @@ shell_observers_.RemoveObserver(observer); } +void Shell::ShowAppList() { + // Show the app list on the default display for new windows. + app_list_->Show( + GetWmRootWindowForNewWindows()->GetDisplayNearestWindow().id()); +} + +void Shell::DismissAppList() { + app_list_->Dismiss(); +} + +void Shell::ToggleAppList() { + // Toggle the app list on the default display for new windows. + app_list_->ToggleAppList( + GetWmRootWindowForNewWindows()->GetDisplayNearestWindow().id()); +} + +bool Shell::IsAppListVisible() const { + return app_list_->IsVisible(); +} + +bool Shell::GetAppListTargetVisibility() const { + return app_list_->GetTargetVisibility(); +} + void Shell::NotifyMaximizeModeStarted() { for (auto& observer : shell_observers_) observer.OnMaximizeModeStarted(); @@ -454,9 +479,10 @@ observer.OnPinnedStateChanged(pinned_window); } -void Shell::NotifyVirtualKeyboardActivated(bool activated) { +void Shell::NotifyVirtualKeyboardActivated(bool activated, + WmWindow* root_window) { for (auto& observer : shell_observers_) - observer.OnVirtualKeyboardStateChanged(activated); + observer.OnVirtualKeyboardStateChanged(activated, root_window); } void Shell::NotifyShelfCreatedForRootWindow(WmWindow* root_window) { @@ -481,6 +507,7 @@ std::unique_ptr<WmShell> wm_shell) : wm_shell_(std::move(wm_shell)), shell_delegate_(std::move(shell_delegate)), + app_list_(base::MakeUnique<app_list::AppList>()), link_handler_model_factory_(nullptr), display_configurator_(new display::DisplayConfigurator()), native_cursor_manager_(nullptr),
diff --git a/ash/shell.h b/ash/shell.h index b1f8169..a2a4664 100644 --- a/ash/shell.h +++ b/ash/shell.h
@@ -43,6 +43,10 @@ class AudioA11yController; } +namespace app_list { +class AppList; +} + namespace display { class DisplayChangeObserver; class DisplayConfigurator; @@ -276,6 +280,7 @@ AccessibilityDelegate* accessibility_delegate() { return accessibility_delegate_.get(); } + app_list::AppList* app_list() { return app_list_.get(); } const scoped_refptr<base::SequencedWorkerPool>& blocking_pool() { return blocking_pool_; } @@ -450,6 +455,22 @@ void AddShellObserver(ShellObserver* observer); void RemoveShellObserver(ShellObserver* observer); + // Shows the app list on the active root window. + void ShowAppList(); + + // Dismisses the app list. + void DismissAppList(); + + // Shows the app list if it's not visible. Dismisses it otherwise. + void ToggleAppList(); + + // Returns app list actual visibility. This might differ from + // GetAppListTargetVisibility() when hiding animation is still in flight. + bool IsAppListVisible() const; + + // Returns app list target visibility. + bool GetAppListTargetVisibility() const; + // Notifies observers that maximize mode has started, windows might still // animate. void NotifyMaximizeModeStarted(); @@ -475,8 +496,8 @@ void NotifyPinnedStateChanged(WmWindow* pinned_window); // Notifies observers that the virtual keyboard has been - // activated/deactivated. - void NotifyVirtualKeyboardActivated(bool activated); + // activated/deactivated for |root_window|. + void NotifyVirtualKeyboardActivated(bool activated, WmWindow* root_window); // Notifies observers that the shelf was created for |root_window|. // TODO(jamescook): Move to Shelf. @@ -563,6 +584,7 @@ std::unique_ptr<::wm::ShadowController> shadow_controller_; std::unique_ptr<::wm::VisibilityController> visibility_controller_; std::unique_ptr<::wm::WindowModalityController> window_modality_controller_; + std::unique_ptr<app_list::AppList> app_list_; scoped_refptr<preferences::PrefClientStore> pref_store_; std::unique_ptr<ui::devtools::UiDevToolsServer> devtools_server_; std::unique_ptr<views::corewm::TooltipController> tooltip_controller_;
diff --git a/ash/shell/app_list.cc b/ash/shell/app_list.cc index cd7b010..9109421 100644 --- a/ash/shell/app_list.cc +++ b/ash/shell/app_list.cc
@@ -9,6 +9,7 @@ #include "ash/common/session/session_state_delegate.h" #include "ash/common/wm_shell.h" +#include "ash/shell.h" #include "ash/shell/example_factory.h" #include "ash/shell/toplevel_window.h" #include "base/callback.h" @@ -282,7 +283,7 @@ void Dismiss() override { DCHECK(WmShell::HasInstance()); - WmShell::Get()->DismissAppList(); + Shell::Get()->DismissAppList(); } void ViewClosing() override {
diff --git a/ash/shell/content/client/shell_browser_main_parts.cc b/ash/shell/content/client/shell_browser_main_parts.cc index 84299c3..e5a807b 100644 --- a/ash/shell/content/client/shell_browser_main_parts.cc +++ b/ash/shell/content/client/shell_browser_main_parts.cc
@@ -141,7 +141,7 @@ // Initialize the example app list presenter. example_app_list_presenter_ = base::MakeUnique<ExampleAppListPresenter>(); - WmShell::Get()->app_list()->SetAppListPresenter( + Shell::Get()->app_list()->SetAppListPresenter( example_app_list_presenter_->CreateInterfacePtrAndBind()); ash::Shell::GetPrimaryRootWindow()->GetHost()->Show();
diff --git a/ash/shell_unittest.cc b/ash/shell_unittest.cc index 0aa8d19..ad89cd5 100644 --- a/ash/shell_unittest.cc +++ b/ash/shell_unittest.cc
@@ -167,10 +167,9 @@ EXPECT_TRUE(lock_widget->GetNativeView()->HasFocus()); // Verify menu is closed. - EXPECT_NE(views::MenuController::EXIT_NONE, menu_controller->exit_type()); + EXPECT_EQ(nullptr, views::MenuController::GetActiveInstance()); lock_widget->Close(); delegate->UnlockScreen(); - EXPECT_EQ(nullptr, views::MenuController::GetActiveInstance()); } };
diff --git a/ash/system/OWNERS b/ash/system/OWNERS index 9b29096b..6f83f3f7f 100644 --- a/ash/system/OWNERS +++ b/ash/system/OWNERS
@@ -3,3 +3,5 @@ jennyz@chromium.org skuhne@chromium.org tdanderson@chromium.org + +# COMPONENT: UI>Shell>StatusArea
diff --git a/ash/wm/OWNERS b/ash/wm/OWNERS index 6310ae0..c1e24dc9f 100644 --- a/ash/wm/OWNERS +++ b/ash/wm/OWNERS
@@ -1,3 +1,5 @@ pkotwicz@chromium.org varkha@chromium.org flackr@chromium.org + +# COMPONENT: UI>Shell>WindowManager
diff --git a/ash/wm/gestures/OWNERS b/ash/wm/gestures/OWNERS index b8e32c10..95f7b44c 100644 --- a/ash/wm/gestures/OWNERS +++ b/ash/wm/gestures/OWNERS
@@ -1 +1,3 @@ sadrul@chromium.org + +# COMPONENT: UI>Shell>GestureNav
diff --git a/ash/wm/maximize_mode/OWNERS b/ash/wm/maximize_mode/OWNERS index 0debac9..5e74144 100644 --- a/ash/wm/maximize_mode/OWNERS +++ b/ash/wm/maximize_mode/OWNERS
@@ -1,2 +1,3 @@ skuhne@chromium.org +# COMPONENT: UI>Shell>TouchView
diff --git a/ash/wm/overview/window_selector_unittest.cc b/ash/wm/overview/window_selector_unittest.cc index ed7528c4..490b5b8 100644 --- a/ash/wm/overview/window_selector_unittest.cc +++ b/ash/wm/overview/window_selector_unittest.cc
@@ -520,7 +520,7 @@ EXPECT_TRUE(wm::IsActiveWindow(window1.get())); EXPECT_EQ(window1.get(), GetFocusedWindow()); - WmShell::Get()->ToggleAppList(); + Shell::Get()->ToggleAppList(); // Activating overview cancels the App-list which normally would activate the // previously active |window1|. Overview mode should properly transfer focus
diff --git a/ash/wm/screen_pinning_controller.h b/ash/wm/screen_pinning_controller.h index 90e56a3..ac772ad 100644 --- a/ash/wm/screen_pinning_controller.h +++ b/ash/wm/screen_pinning_controller.h
@@ -24,7 +24,13 @@ template <typename UserData> class WindowUserData; -// Handles pinned state. +// Supports "screen pinning" for ARC++ apps. From the Android docs: +// "Lets you temporarily restrict users from leaving your task or being +// interrupted by notifications. This could be used, for example, if you are +// developing an education app to support high stakes assessment requirements on +// Android, or a single-purpose or kiosk application." +// https://developer.android.com/about/versions/android-5.0.html#ScreenPinning +// See also ArcKioskAppLauncher::CheckAndPinWindow(). class ScreenPinningController : public WindowTreeHostManager::Observer { public: explicit ScreenPinningController(
diff --git a/base/debug/stack_trace.cc b/base/debug/stack_trace.cc index af4a6ef..43a23d95 100644 --- a/base/debug/stack_trace.cc +++ b/base/debug/stack_trace.cc
@@ -35,7 +35,7 @@ namespace { -#if HAVE_TRACE_STACK_FRAME_POINTERS +#if HAVE_TRACE_STACK_FRAME_POINTERS && !defined(OS_WIN) #if defined(__arm__) && defined(__GNUC__) && !defined(__clang__) // GCC and LLVM generate slightly different frames on ARM, see @@ -142,7 +142,7 @@ return prev_parent_fp; } -#endif // HAVE_TRACE_STACK_FRAME_POINTERS +#endif // HAVE_TRACE_STACK_FRAME_POINTERS && !defined(OS_WIN) } // namespace @@ -225,6 +225,18 @@ size_t TraceStackFramePointers(const void** out_trace, size_t max_depth, size_t skip_initial) { +// TODO(699863): Merge the frame-pointer based stack unwinder into the +// base::debug::StackTrace platform-specific implementation files. +#if defined(OS_WIN) + StackTrace stack(max_depth); + size_t count = 0; + const void* const* frames = stack.Addresses(&count); + if (count < skip_initial) + return 0u; + count -= skip_initial; + memcpy(out_trace, frames + skip_initial, count * sizeof(void*)); + return count; +#elif defined(OS_POSIX) // Usage of __builtin_frame_address() enables frame pointers in this // function even if they are not enabled globally. So 'fp' will always // be valid. @@ -258,8 +270,10 @@ } return depth; +#endif } +#if !defined(OS_WIN) ScopedStackFrameLinker::ScopedStackFrameLinker(void* fp, void* parent_fp) : fp_(fp), parent_fp_(parent_fp), @@ -270,6 +284,7 @@ CHECK_EQ(parent_fp_, previous_parent_fp) << "Stack frame's parent pointer has changed!"; } +#endif // !defined(OS_WIN) #endif // HAVE_TRACE_STACK_FRAME_POINTERS
diff --git a/base/debug/stack_trace.h b/base/debug/stack_trace.h index 4c9b73e..ab1d2ebe 100644 --- a/base/debug/stack_trace.h +++ b/base/debug/stack_trace.h
@@ -23,13 +23,23 @@ struct _CONTEXT; #endif -#if defined(OS_POSIX) && ( \ - defined(__i386__) || defined(__x86_64__) || \ - (defined(__arm__) && !defined(__thumb__))) +// TODO(699863): Clean up HAVE_TRACE_STACK_FRAME_POINTERS. +#if defined(OS_POSIX) + +#if defined(__i386__) || defined(__x86_64__) #define HAVE_TRACE_STACK_FRAME_POINTERS 1 -#else +#elif defined(__arm__) && !defined(__thumb__) +#define HAVE_TRACE_STACK_FRAME_POINTERS 1 +#else // defined(__arm__) && !defined(__thumb__) #define HAVE_TRACE_STACK_FRAME_POINTERS 0 -#endif +#endif // defined(__arm__) && !defined(__thumb__) + +#elif defined(OS_WIN) +#define HAVE_TRACE_STACK_FRAME_POINTERS 1 + +#else // defined(OS_WIN) +#define HAVE_TRACE_STACK_FRAME_POINTERS 0 +#endif // defined(OS_WIN) namespace base { namespace debug { @@ -122,6 +132,7 @@ size_t max_depth, size_t skip_initial); +#if !defined(OS_WIN) // Links stack frame |fp| to |parent_fp|, so that during stack unwinding // TraceStackFramePointers() visits |parent_fp| after visiting |fp|. // Both frame pointers must come from __builtin_frame_address(). @@ -171,6 +182,7 @@ DISALLOW_COPY_AND_ASSIGN(ScopedStackFrameLinker); }; +#endif // !defined(OS_WIN) #endif // HAVE_TRACE_STACK_FRAME_POINTERS
diff --git a/base/debug/stack_trace_unittest.cc b/base/debug/stack_trace_unittest.cc index 560dc1d..79b0cb84 100644 --- a/base/debug/stack_trace_unittest.cc +++ b/base/debug/stack_trace_unittest.cc
@@ -171,11 +171,11 @@ // and e.g. mismatched new[]/delete would cause a hang because // of re-entering malloc. TEST_F(StackTraceTest, AsyncSignalUnsafeSignalHandlerHang) { - Process child = SpawnChild("MismatchedMallocChildProcess"); - ASSERT_TRUE(child.IsValid()); + SpawnChildResult spawn_result = SpawnChild("MismatchedMallocChildProcess"); + ASSERT_TRUE(spawn_result.process.IsValid()); int exit_code; - ASSERT_TRUE(child.WaitForExitWithTimeout(TestTimeouts::action_timeout(), - &exit_code)); + ASSERT_TRUE(spawn_result.process.WaitForExitWithTimeout( + TestTimeouts::action_timeout(), &exit_code)); } #endif // !defined(OS_IOS) @@ -254,8 +254,10 @@ } #endif // defined(OS_POSIX) && !defined(OS_ANDROID) -#if HAVE_TRACE_STACK_FRAME_POINTERS - +#if HAVE_TRACE_STACK_FRAME_POINTERS && !defined(OS_WIN) +// Windows x64 binaries cannot be built with frame pointer, and MSVC doesn't +// provide intrinsics to query the frame pointer even for the x86 build, nor +// does it allow us to take the address of labels, so skip these under Windows. template <size_t Depth> void NOINLINE ExpectStackFramePointers(const void** frames, size_t max_depth) { @@ -313,7 +315,7 @@ EXPECT_NE(0u, GetStackEnd()); } -#endif // HAVE_TRACE_STACK_FRAME_POINTERS +#endif // HAVE_TRACE_STACK_FRAME_POINTERS && !defined(OS_WIN) } // namespace debug } // namespace base
diff --git a/base/files/file_locking_unittest.cc b/base/files/file_locking_unittest.cc index b709b75..0cb8d8fe 100644 --- a/base/files/file_locking_unittest.cc +++ b/base/files/file_locking_unittest.cc
@@ -152,10 +152,10 @@ base::GetMultiProcessTestChildBaseCommandLine()); child_command_line.AppendSwitchPath(kTempDirFlag, temp_path); child_command_line.AppendSwitch(unlock_action); - lock_child_ = - base::SpawnMultiProcessTestChild(ChildMainString, child_command_line, - base::LaunchOptions()); - ASSERT_TRUE(lock_child_.IsValid()); + + spawn_child_ = base::SpawnMultiProcessTestChild( + ChildMainString, child_command_line, base::LaunchOptions()); + ASSERT_TRUE(spawn_child_.process.IsValid()); // Wait for the child to lock the file. ASSERT_TRUE(WaitForEventOrTimeout(kSignalLockFileLocked)); @@ -166,13 +166,13 @@ ASSERT_TRUE(SignalEvent(kSignalExit)); int rv = -1; ASSERT_TRUE(WaitForMultiprocessTestChildExit( - lock_child_, TestTimeouts::action_timeout(), &rv)); + spawn_child_.process, TestTimeouts::action_timeout(), &rv)); ASSERT_EQ(0, rv); } base::ScopedTempDir temp_dir_; base::File lock_file_; - base::Process lock_child_; + base::SpawnChildResult spawn_child_; private: DISALLOW_COPY_AND_ASSIGN(FileLockingTest); @@ -220,7 +220,7 @@ StartChildAndSignalLock(kExitUnlock); ASSERT_NE(File::FILE_OK, lock_file_.Lock()); - ASSERT_TRUE(TerminateMultiProcessTestChild(lock_child_, 0, true)); + ASSERT_TRUE(TerminateMultiProcessTestChild(spawn_child_.process, 0, true)); ASSERT_EQ(File::FILE_OK, lock_file_.Lock()); ASSERT_EQ(File::FILE_OK, lock_file_.Unlock()); }
diff --git a/base/mac/mach_port_broker_unittest.cc b/base/mac/mach_port_broker_unittest.cc index bff8eb6..cb4b82c 100644 --- a/base/mac/mach_port_broker_unittest.cc +++ b/base/mac/mach_port_broker_unittest.cc
@@ -95,21 +95,21 @@ CommandLine command_line( base::GetMultiProcessTestChildBaseCommandLine()); broker_.GetLock().Acquire(); - base::Process test_child_process = base::SpawnMultiProcessTestChild( + base::SpawnChildResult spawn_result = base::SpawnMultiProcessTestChild( "MachPortBrokerTestChild", command_line, LaunchOptions()); - broker_.AddPlaceholderForPid(test_child_process.Handle()); + broker_.AddPlaceholderForPid(spawn_result.process.Handle()); broker_.GetLock().Release(); WaitForTaskPort(); - EXPECT_EQ(test_child_process.Handle(), received_process_); + EXPECT_EQ(spawn_result.process.Handle(), received_process_); int rv = -1; - ASSERT_TRUE(test_child_process.WaitForExitWithTimeout( + ASSERT_TRUE(spawn_result.process.WaitForExitWithTimeout( TestTimeouts::action_timeout(), &rv)); EXPECT_EQ(0, rv); EXPECT_NE(static_cast<mach_port_t>(MACH_PORT_NULL), - broker_.TaskForPid(test_child_process.Handle())); + broker_.TaskForPid(spawn_result.process.Handle())); } TEST_F(MachPortBrokerTest, ReceivePortFromChildWithoutAdding) { @@ -117,17 +117,18 @@ CommandLine command_line( base::GetMultiProcessTestChildBaseCommandLine()); broker_.GetLock().Acquire(); - base::Process test_child_process = base::SpawnMultiProcessTestChild( + base::SpawnChildResult spawn_result = base::SpawnMultiProcessTestChild( "MachPortBrokerTestChild", command_line, LaunchOptions()); + broker_.GetLock().Release(); int rv = -1; - ASSERT_TRUE(test_child_process.WaitForExitWithTimeout( + ASSERT_TRUE(spawn_result.process.WaitForExitWithTimeout( TestTimeouts::action_timeout(), &rv)); EXPECT_EQ(0, rv); EXPECT_EQ(static_cast<mach_port_t>(MACH_PORT_NULL), - broker_.TaskForPid(test_child_process.Handle())); + broker_.TaskForPid(spawn_result.process.Handle())); } } // namespace base
diff --git a/base/memory/memory_pressure_monitor_mac.cc b/base/memory/memory_pressure_monitor_mac.cc index 6261de2..9ca520e 100644 --- a/base/memory/memory_pressure_monitor_mac.cc +++ b/base/memory/memory_pressure_monitor_mac.cc
@@ -162,7 +162,6 @@ MemoryPressureListener::MemoryPressureLevel MemoryPressureMonitor::GetCurrentPressureLevel() { - UpdatePressureLevel(); return last_pressure_level_; }
diff --git a/base/memory/memory_pressure_monitor_mac_unittest.cc b/base/memory/memory_pressure_monitor_mac_unittest.cc index 9d251f0..ff464fb3 100644 --- a/base/memory/memory_pressure_monitor_mac_unittest.cc +++ b/base/memory/memory_pressure_monitor_mac_unittest.cc
@@ -28,11 +28,6 @@ // 5 second delay between pressure readings. void ResetRunLoopUpdateTime() { next_run_loop_update_time_ = 0; } - // Access to the last-recorded memory pressure level. - MemoryPressureListener::MemoryPressureLevel LastPressureLevel() { - return last_pressure_level_; - } - // Sets the last UMA stat report time. Time spent in memory pressure is // recorded in 5-second "ticks" from the last time statistics were recorded. void SetLastStatisticReportTime(CFTimeInterval time) { @@ -111,20 +106,23 @@ TestMemoryPressureMonitor monitor; monitor.macos_pressure_level_for_testing_ = DISPATCH_MEMORYPRESSURE_NORMAL; + monitor.UpdatePressureLevel(); MemoryPressureListener::MemoryPressureLevel memory_pressure = monitor.GetCurrentPressureLevel(); - EXPECT_EQ(memory_pressure, - MemoryPressureListener::MEMORY_PRESSURE_LEVEL_NONE); + EXPECT_EQ(MemoryPressureListener::MEMORY_PRESSURE_LEVEL_NONE, + memory_pressure); monitor.macos_pressure_level_for_testing_ = DISPATCH_MEMORYPRESSURE_WARN; + monitor.UpdatePressureLevel(); memory_pressure = monitor.GetCurrentPressureLevel(); - EXPECT_EQ(memory_pressure, - MemoryPressureListener::MEMORY_PRESSURE_LEVEL_MODERATE); + EXPECT_EQ(MemoryPressureListener::MEMORY_PRESSURE_LEVEL_MODERATE, + memory_pressure); monitor.macos_pressure_level_for_testing_ = DISPATCH_MEMORYPRESSURE_CRITICAL; + monitor.UpdatePressureLevel(); memory_pressure = monitor.GetCurrentPressureLevel(); - EXPECT_EQ(memory_pressure, - MemoryPressureListener::MEMORY_PRESSURE_LEVEL_CRITICAL); + EXPECT_EQ(MemoryPressureListener::MEMORY_PRESSURE_LEVEL_CRITICAL, + memory_pressure); } TEST(MacMemoryPressureMonitorTest, MemoryPressureRunLoopChecking) { @@ -142,19 +140,19 @@ monitor.macos_pressure_level_for_testing_ = DISPATCH_MEMORYPRESSURE_WARN; monitor.ResetRunLoopUpdateTime(); CFRunLoopRunInMode(kMessageLoopExclusiveRunLoopMode, 0, true); - EXPECT_EQ(monitor.LastPressureLevel(), + EXPECT_EQ(monitor.GetCurrentPressureLevel(), MemoryPressureListener::MEMORY_PRESSURE_LEVEL_MODERATE); monitor.macos_pressure_level_for_testing_ = DISPATCH_MEMORYPRESSURE_CRITICAL; monitor.ResetRunLoopUpdateTime(); CFRunLoopRunInMode(kMessageLoopExclusiveRunLoopMode, 0, true); - EXPECT_EQ(monitor.LastPressureLevel(), + EXPECT_EQ(monitor.GetCurrentPressureLevel(), MemoryPressureListener::MEMORY_PRESSURE_LEVEL_CRITICAL); monitor.macos_pressure_level_for_testing_ = DISPATCH_MEMORYPRESSURE_NORMAL; monitor.ResetRunLoopUpdateTime(); CFRunLoopRunInMode(kMessageLoopExclusiveRunLoopMode, 0, true); - EXPECT_EQ(monitor.LastPressureLevel(), + EXPECT_EQ(monitor.GetCurrentPressureLevel(), MemoryPressureListener::MEMORY_PRESSURE_LEVEL_NONE); CFRunLoopRemoveTimer(CFRunLoopGetCurrent(), timer_ref,
diff --git a/base/memory/shared_memory_mac_unittest.cc b/base/memory/shared_memory_mac_unittest.cc index c7d20ec..4ccee89 100644 --- a/base/memory/shared_memory_mac_unittest.cc +++ b/base/memory/shared_memory_mac_unittest.cc
@@ -204,7 +204,7 @@ // similar tests. service_name_ = CreateRandomServiceName(); server_port_.reset(BecomeMachServer(service_name_.c_str())); - child_process_ = SpawnChild(name); + spawn_child_ = SpawnChild(name); client_port_.reset(ReceiveMachPort(server_port_.get())); } @@ -221,7 +221,7 @@ // process. mac::ScopedMachSendRight client_port_; - base::Process child_process_; + base::SpawnChildResult spawn_child_; DISALLOW_COPY_AND_ASSIGN(SharedMemoryMacMultiProcessTest); }; @@ -237,7 +237,7 @@ SendMachPort(client_port_.get(), shared_memory->handle().GetMemoryObject(), MACH_MSG_TYPE_COPY_SEND); int rv = -1; - ASSERT_TRUE(child_process_.WaitForExitWithTimeout( + ASSERT_TRUE(spawn_child_.process.WaitForExitWithTimeout( TestTimeouts::action_timeout(), &rv)); EXPECT_EQ(0, rv); } @@ -277,7 +277,7 @@ SendMachPort( client_port_.get(), shm.GetMemoryObject(), MACH_MSG_TYPE_COPY_SEND); int rv = -1; - ASSERT_TRUE(child_process_.WaitForExitWithTimeout( + ASSERT_TRUE(spawn_child_.process.WaitForExitWithTimeout( TestTimeouts::action_timeout(), &rv)); EXPECT_EQ(0, rv); }
diff --git a/base/memory/shared_memory_unittest.cc b/base/memory/shared_memory_unittest.cc index 19dedcc..d87fad0 100644 --- a/base/memory/shared_memory_unittest.cc +++ b/base/memory/shared_memory_unittest.cc
@@ -682,16 +682,16 @@ // Start |kNumTasks| processes, each of which atomically increments the first // word by 1. - Process processes[kNumTasks]; + SpawnChildResult children[kNumTasks]; for (int index = 0; index < kNumTasks; ++index) { - processes[index] = SpawnChild("SharedMemoryTestMain"); - ASSERT_TRUE(processes[index].IsValid()); + children[index] = SpawnChild("SharedMemoryTestMain"); + ASSERT_TRUE(children[index].process.IsValid()); } // Check that each process exited correctly. int exit_code = 0; for (int index = 0; index < kNumTasks; ++index) { - EXPECT_TRUE(processes[index].WaitForExit(&exit_code)); + EXPECT_TRUE(children[index].process.WaitForExit(&exit_code)); EXPECT_EQ(0, exit_code); }
diff --git a/base/memory/shared_memory_win_unittest.cc b/base/memory/shared_memory_win_unittest.cc index 5fc132d2..d04e840 100644 --- a/base/memory/shared_memory_win_unittest.cc +++ b/base/memory/shared_memory_win_unittest.cc
@@ -199,8 +199,10 @@ base::LaunchOptions options; options.as_user = lowered_process_token.Get(); - base::Process process = SpawnChildWithOptions("LowerPermissions", options); - ASSERT_TRUE(process.IsValid()); + + base::SpawnChildResult spawn_child = + SpawnChildWithOptions("LowerPermissions", options); + ASSERT_TRUE(spawn_child.process.IsValid()); SharedMemory memory; memory.CreateAndMapAnonymous(1001); @@ -208,15 +210,15 @@ // Duplicate into child process, giving only FILE_MAP_READ permissions. HANDLE raw_handle = nullptr; ::DuplicateHandle(::GetCurrentProcess(), memory.handle().GetHandle(), - process.Handle(), &raw_handle, + spawn_child.process.Handle(), &raw_handle, FILE_MAP_READ | SECTION_QUERY, FALSE, 0); ASSERT_TRUE(raw_handle); WriteHandleToPipe(communication_pipe.Get(), raw_handle); int exit_code; - EXPECT_TRUE(process.WaitForExitWithTimeout(TestTimeouts::action_max_timeout(), - &exit_code)); + EXPECT_TRUE(spawn_child.process.WaitForExitWithTimeout( + TestTimeouts::action_max_timeout(), &exit_code)); EXPECT_EQ(0, exit_code); }
diff --git a/base/process/process_metrics_unittest.cc b/base/process/process_metrics_unittest.cc index 3e059b4..3bb8552 100644 --- a/base/process/process_metrics_unittest.cc +++ b/base/process/process_metrics_unittest.cc
@@ -491,15 +491,15 @@ const FilePath temp_path = temp_dir.GetPath(); CommandLine child_command_line(GetMultiProcessTestChildBaseCommandLine()); child_command_line.AppendSwitchPath(kTempDirFlag, temp_path); - Process child = SpawnMultiProcessTestChild( + SpawnChildResult spawn_child = SpawnMultiProcessTestChild( ChildMainString, child_command_line, LaunchOptions()); - ASSERT_TRUE(child.IsValid()); + ASSERT_TRUE(spawn_child.process.IsValid()); WaitForEvent(temp_path, kSignalClosed); std::unique_ptr<ProcessMetrics> metrics( - ProcessMetrics::CreateProcessMetrics(child.Handle())); + ProcessMetrics::CreateProcessMetrics(spawn_child.process.Handle())); EXPECT_EQ(0, metrics->GetOpenFdCount()); - ASSERT_TRUE(child.Terminate(0, true)); + ASSERT_TRUE(spawn_child.process.Terminate(0, true)); } #endif // defined(OS_LINUX)
diff --git a/base/process/process_unittest.cc b/base/process/process_unittest.cc index 619d22b..839ec13 100644 --- a/base/process/process_unittest.cc +++ b/base/process/process_unittest.cc
@@ -42,11 +42,11 @@ }; TEST_F(ProcessTest, Create) { - Process process(SpawnChild("SimpleChildProcess")); - ASSERT_TRUE(process.IsValid()); - ASSERT_FALSE(process.is_current()); - process.Close(); - ASSERT_FALSE(process.IsValid()); + SpawnChildResult spawn_child = SpawnChild("SimpleChildProcess"); + ASSERT_TRUE(spawn_child.process.IsValid()); + ASSERT_FALSE(spawn_child.process.is_current()); + spawn_child.process.Close(); + ASSERT_FALSE(spawn_child.process.IsValid()); } TEST_F(ProcessTest, CreateCurrent) { @@ -58,7 +58,8 @@ } TEST_F(ProcessTest, Move) { - Process process1(SpawnChild("SimpleChildProcess")); + SpawnChildResult spawn_result = SpawnChild("SimpleChildProcess"); + Process& process1 = spawn_result.process; EXPECT_TRUE(process1.IsValid()); Process process2; @@ -77,7 +78,8 @@ } TEST_F(ProcessTest, Duplicate) { - Process process1(SpawnChild("SimpleChildProcess")); + SpawnChildResult spawn_result = SpawnChild("SimpleChildProcess"); + Process& process1 = spawn_result.process; ASSERT_TRUE(process1.IsValid()); Process process2 = process1.Duplicate(); @@ -107,7 +109,8 @@ } TEST_F(ProcessTest, DeprecatedGetProcessFromHandle) { - Process process1(SpawnChild("SimpleChildProcess")); + SpawnChildResult spawn_result = SpawnChild("SimpleChildProcess"); + Process& process1 = spawn_result.process; ASSERT_TRUE(process1.IsValid()); Process process2 = Process::DeprecatedGetProcessFromHandle(process1.Handle()); @@ -127,7 +130,8 @@ } TEST_F(ProcessTest, Terminate) { - Process process(SpawnChild("SleepyChildProcess")); + SpawnChildResult spawn_result = SpawnChild("SleepyChildProcess"); + Process& process = spawn_result.process; ASSERT_TRUE(process.IsValid()); const int kDummyExitCode = 42; @@ -173,11 +177,12 @@ } TEST_F(ProcessTest, TerminateCurrentProcessImmediatelyWithZeroExitCode) { - Process process(SpawnChild("TerminateCurrentProcessImmediatelyWithCode0")); - ASSERT_TRUE(process.IsValid()); + SpawnChildResult spawn_child = + SpawnChild("TerminateCurrentProcessImmediatelyWithCode0"); + ASSERT_TRUE(spawn_child.process.IsValid()); int exit_code = 42; - ASSERT_TRUE(process.WaitForExitWithTimeout(TestTimeouts::action_max_timeout(), - &exit_code)); + ASSERT_TRUE(spawn_child.process.WaitForExitWithTimeout( + TestTimeouts::action_max_timeout(), &exit_code)); EXPECT_EQ(0, exit_code); } @@ -188,11 +193,12 @@ } TEST_F(ProcessTest, TerminateCurrentProcessImmediatelyWithNonZeroExitCode) { - Process process(SpawnChild("TerminateCurrentProcessImmediatelyWithCode250")); - ASSERT_TRUE(process.IsValid()); + SpawnChildResult spawn_child = + SpawnChild("TerminateCurrentProcessImmediatelyWithCode250"); + ASSERT_TRUE(spawn_child.process.IsValid()); int exit_code = 42; - ASSERT_TRUE(process.WaitForExitWithTimeout(TestTimeouts::action_max_timeout(), - &exit_code)); + ASSERT_TRUE(spawn_child.process.WaitForExitWithTimeout( + TestTimeouts::action_max_timeout(), &exit_code)); EXPECT_EQ(250, exit_code); } @@ -202,26 +208,26 @@ } TEST_F(ProcessTest, WaitForExit) { - Process process(SpawnChild("FastSleepyChildProcess")); - ASSERT_TRUE(process.IsValid()); + SpawnChildResult spawn_child = SpawnChild("FastSleepyChildProcess"); + ASSERT_TRUE(spawn_child.process.IsValid()); const int kDummyExitCode = 42; int exit_code = kDummyExitCode; - EXPECT_TRUE(process.WaitForExit(&exit_code)); + EXPECT_TRUE(spawn_child.process.WaitForExit(&exit_code)); EXPECT_EQ(0, exit_code); } TEST_F(ProcessTest, WaitForExitWithTimeout) { - Process process(SpawnChild("SleepyChildProcess")); - ASSERT_TRUE(process.IsValid()); + SpawnChildResult spawn_child = SpawnChild("SleepyChildProcess"); + ASSERT_TRUE(spawn_child.process.IsValid()); const int kDummyExitCode = 42; int exit_code = kDummyExitCode; TimeDelta timeout = TestTimeouts::tiny_timeout(); - EXPECT_FALSE(process.WaitForExitWithTimeout(timeout, &exit_code)); + EXPECT_FALSE(spawn_child.process.WaitForExitWithTimeout(timeout, &exit_code)); EXPECT_EQ(kDummyExitCode, exit_code); - process.Terminate(kDummyExitCode, false); + spawn_child.process.Terminate(kDummyExitCode, false); } // Ensure that the priority of a process is restored correctly after @@ -231,13 +237,13 @@ TEST_F(ProcessTest, SetProcessBackgrounded) { if (!Process::CanBackgroundProcesses()) return; - Process process(SpawnChild("SimpleChildProcess")); - int old_priority = process.GetPriority(); + SpawnChildResult spawn_child = SpawnChild("SimpleChildProcess"); + int old_priority = spawn_child.process.GetPriority(); #if defined(OS_WIN) - EXPECT_TRUE(process.SetProcessBackgrounded(true)); - EXPECT_TRUE(process.IsProcessBackgrounded()); - EXPECT_TRUE(process.SetProcessBackgrounded(false)); - EXPECT_FALSE(process.IsProcessBackgrounded()); + EXPECT_TRUE(spawn_child.process.SetProcessBackgrounded(true)); + EXPECT_TRUE(spawn_child.process.IsProcessBackgrounded()); + EXPECT_TRUE(spawn_child.process.SetProcessBackgrounded(false)); + EXPECT_FALSE(spawn_child.process.IsProcessBackgrounded()); #elif defined(OS_MACOSX) // On the Mac, backgrounding a process requires a port to that process. // In the browser it's available through the MachBroker class, which is not @@ -246,16 +252,16 @@ // the ability to background/foreground a process, we can use the current // process's port instead. FakePortProvider provider; - EXPECT_TRUE(process.SetProcessBackgrounded(&provider, true)); - EXPECT_TRUE(process.IsProcessBackgrounded(&provider)); - EXPECT_TRUE(process.SetProcessBackgrounded(&provider, false)); - EXPECT_FALSE(process.IsProcessBackgrounded(&provider)); + EXPECT_TRUE(spawn_child.process.SetProcessBackgrounded(&provider, true)); + EXPECT_TRUE(spawn_child.process.IsProcessBackgrounded(&provider)); + EXPECT_TRUE(spawn_child.process.SetProcessBackgrounded(&provider, false)); + EXPECT_FALSE(spawn_child.process.IsProcessBackgrounded(&provider)); #else - process.SetProcessBackgrounded(true); - process.SetProcessBackgrounded(false); + spawn_child.process.SetProcessBackgrounded(true); + spawn_child.process.SetProcessBackgrounded(false); #endif - int new_priority = process.GetPriority(); + int new_priority = spawn_child.process.GetPriority(); EXPECT_EQ(old_priority, new_priority); }
diff --git a/base/process/process_util_unittest.cc b/base/process/process_util_unittest.cc index 7031706..3f28b89 100644 --- a/base/process/process_util_unittest.cc +++ b/base/process/process_util_unittest.cc
@@ -160,11 +160,11 @@ // TODO(viettrungluu): This should be in a "MultiProcessTestTest". TEST_F(ProcessUtilTest, SpawnChild) { - base::Process process = SpawnChild("SimpleChildProcess"); - ASSERT_TRUE(process.IsValid()); + base::SpawnChildResult spawn_child = SpawnChild("SimpleChildProcess"); + ASSERT_TRUE(spawn_child.process.IsValid()); int exit_code; - EXPECT_TRUE(process.WaitForExitWithTimeout( - TestTimeouts::action_max_timeout(), &exit_code)); + EXPECT_TRUE(spawn_child.process.WaitForExitWithTimeout( + TestTimeouts::action_max_timeout(), &exit_code)); } MULTIPROCESS_TEST_MAIN(SlowChildProcess) { @@ -176,12 +176,12 @@ const std::string signal_file = ProcessUtilTest::GetSignalFilePath(kSignalFileSlow); remove(signal_file.c_str()); - base::Process process = SpawnChild("SlowChildProcess"); - ASSERT_TRUE(process.IsValid()); + base::SpawnChildResult spawn_child = SpawnChild("SlowChildProcess"); + ASSERT_TRUE(spawn_child.process.IsValid()); SignalChildren(signal_file.c_str()); int exit_code; - EXPECT_TRUE(process.WaitForExitWithTimeout( - TestTimeouts::action_max_timeout(), &exit_code)); + EXPECT_TRUE(spawn_child.process.WaitForExitWithTimeout( + TestTimeouts::action_max_timeout(), &exit_code)); remove(signal_file.c_str()); } @@ -190,18 +190,19 @@ const std::string signal_file = ProcessUtilTest::GetSignalFilePath(kSignalFileSlow); remove(signal_file.c_str()); - base::Process process = SpawnChild("SlowChildProcess"); - ASSERT_TRUE(process.IsValid()); + base::SpawnChildResult spawn_child = SpawnChild("SlowChildProcess"); + ASSERT_TRUE(spawn_child.process.IsValid()); int exit_code = 42; - EXPECT_EQ(base::TERMINATION_STATUS_STILL_RUNNING, - base::GetTerminationStatus(process.Handle(), &exit_code)); + EXPECT_EQ( + base::TERMINATION_STATUS_STILL_RUNNING, + base::GetTerminationStatus(spawn_child.process.Handle(), &exit_code)); EXPECT_EQ(kExpectedStillRunningExitCode, exit_code); SignalChildren(signal_file.c_str()); exit_code = 42; base::TerminationStatus status = - WaitForChildTermination(process.Handle(), &exit_code); + WaitForChildTermination(spawn_child.process.Handle(), &exit_code); EXPECT_EQ(base::TERMINATION_STATUS_NORMAL_TERMINATION, status); EXPECT_EQ(kSuccess, exit_code); remove(signal_file.c_str()); @@ -235,11 +236,12 @@ base::LaunchOptions options; options.current_directory = tmp_dir; - base::Process process(SpawnChildWithOptions("CheckCwdProcess", options)); - ASSERT_TRUE(process.IsValid()); + base::SpawnChildResult spawn_child = + SpawnChildWithOptions("CheckCwdProcess", options); + ASSERT_TRUE(spawn_child.process.IsValid()); int exit_code = 42; - EXPECT_TRUE(process.WaitForExit(&exit_code)); + EXPECT_TRUE(spawn_child.process.WaitForExit(&exit_code)); EXPECT_EQ(kSuccess, exit_code); } #endif // !defined(OS_ANDROID) @@ -249,9 +251,9 @@ TEST_F(ProcessUtilTest, GetProcId) { base::ProcessId id1 = base::GetProcId(GetCurrentProcess()); EXPECT_NE(0ul, id1); - base::Process process = SpawnChild("SimpleChildProcess"); - ASSERT_TRUE(process.IsValid()); - base::ProcessId id2 = process.Pid(); + base::SpawnChildResult spawn_child = SpawnChild("SimpleChildProcess"); + ASSERT_TRUE(spawn_child.process.IsValid()); + base::ProcessId id2 = spawn_child.process.Pid(); EXPECT_NE(0ul, id2); EXPECT_NE(id1, id2); } @@ -295,18 +297,19 @@ const std::string signal_file = ProcessUtilTest::GetSignalFilePath(kSignalFileCrash); remove(signal_file.c_str()); - base::Process process = SpawnChild("CrashingChildProcess"); - ASSERT_TRUE(process.IsValid()); + base::SpawnChildResult spawn_child = SpawnChild("CrashingChildProcess"); + ASSERT_TRUE(spawn_child.process.IsValid()); int exit_code = 42; - EXPECT_EQ(base::TERMINATION_STATUS_STILL_RUNNING, - base::GetTerminationStatus(process.Handle(), &exit_code)); + EXPECT_EQ( + base::TERMINATION_STATUS_STILL_RUNNING, + base::GetTerminationStatus(spawn_child.process.Handle(), &exit_code)); EXPECT_EQ(kExpectedStillRunningExitCode, exit_code); SignalChildren(signal_file.c_str()); exit_code = 42; base::TerminationStatus status = - WaitForChildTermination(process.Handle(), &exit_code); + WaitForChildTermination(spawn_child.process.Handle(), &exit_code); EXPECT_EQ(base::TERMINATION_STATUS_PROCESS_CRASHED, status); #if defined(OS_WIN) @@ -350,18 +353,19 @@ const std::string signal_file = ProcessUtilTest::GetSignalFilePath(kSignalFileKill); remove(signal_file.c_str()); - base::Process process = SpawnChild("KilledChildProcess"); - ASSERT_TRUE(process.IsValid()); + base::SpawnChildResult spawn_child = SpawnChild("KilledChildProcess"); + ASSERT_TRUE(spawn_child.process.IsValid()); int exit_code = 42; - EXPECT_EQ(base::TERMINATION_STATUS_STILL_RUNNING, - base::GetTerminationStatus(process.Handle(), &exit_code)); + EXPECT_EQ( + base::TERMINATION_STATUS_STILL_RUNNING, + base::GetTerminationStatus(spawn_child.process.Handle(), &exit_code)); EXPECT_EQ(kExpectedStillRunningExitCode, exit_code); SignalChildren(signal_file.c_str()); exit_code = 42; base::TerminationStatus status = - WaitForChildTermination(process.Handle(), &exit_code); + WaitForChildTermination(spawn_child.process.Handle(), &exit_code); #if defined(OS_CHROMEOS) EXPECT_EQ(base::TERMINATION_STATUS_PROCESS_WAS_KILLED_BY_OOM, status); #else @@ -384,18 +388,19 @@ const std::string signal_file = ProcessUtilTest::GetSignalFilePath(kSignalFileTerm); remove(signal_file.c_str()); - base::Process process = SpawnChild("TerminatedChildProcess"); - ASSERT_TRUE(process.IsValid()); + base::SpawnChildResult spawn_child = SpawnChild("TerminatedChildProcess"); + ASSERT_TRUE(spawn_child.process.IsValid()); int exit_code = 42; - EXPECT_EQ(base::TERMINATION_STATUS_STILL_RUNNING, - base::GetTerminationStatus(process.Handle(), &exit_code)); + EXPECT_EQ( + base::TERMINATION_STATUS_STILL_RUNNING, + base::GetTerminationStatus(spawn_child.process.Handle(), &exit_code)); EXPECT_EQ(kExpectedStillRunningExitCode, exit_code); SignalChildren(signal_file.c_str()); exit_code = 42; base::TerminationStatus status = - WaitForChildTermination(process.Handle(), &exit_code); + WaitForChildTermination(spawn_child.process.Handle(), &exit_code); EXPECT_EQ(base::TERMINATION_STATUS_PROCESS_WAS_KILLED, status); int signaled = WIFSIGNALED(exit_code); @@ -627,9 +632,9 @@ fd_mapping_vec.push_back(std::pair<int, int>(fds[1], kChildPipe)); base::LaunchOptions options; options.fds_to_remap = &fd_mapping_vec; - base::Process process = + base::SpawnChildResult spawn_child = SpawnChildWithOptions("ProcessUtilsLeakFDChildProcess", options); - CHECK(process.IsValid()); + CHECK(spawn_child.process.IsValid()); int ret = IGNORE_EINTR(close(fds[1])); DPCHECK(ret == 0); @@ -646,7 +651,7 @@ base::TimeDelta timeout = base::TimeDelta::FromSeconds(1); #endif int exit_code; - CHECK(process.WaitForExitWithTimeout(timeout, &exit_code)); + CHECK(spawn_child.process.WaitForExitWithTimeout(timeout, &exit_code)); ret = IGNORE_EINTR(close(fds[0])); DPCHECK(ret == 0); @@ -869,15 +874,16 @@ } TEST_F(ProcessUtilTest, DelayedTermination) { - base::Process child_process = SpawnChild("process_util_test_never_die"); - ASSERT_TRUE(child_process.IsValid()); - base::EnsureProcessTerminated(child_process.Duplicate()); + base::SpawnChildResult spawn_child = + SpawnChild("process_util_test_never_die"); + ASSERT_TRUE(spawn_child.process.IsValid()); + base::EnsureProcessTerminated(spawn_child.process.Duplicate()); int exit_code; - child_process.WaitForExitWithTimeout(base::TimeDelta::FromSeconds(5), - &exit_code); + spawn_child.process.WaitForExitWithTimeout(base::TimeDelta::FromSeconds(5), + &exit_code); // Check that process was really killed. - EXPECT_TRUE(IsProcessDead(child_process.Handle())); + EXPECT_TRUE(IsProcessDead(spawn_child.process.Handle())); } MULTIPROCESS_TEST_MAIN(process_util_test_never_die) { @@ -888,14 +894,15 @@ } TEST_F(ProcessUtilTest, ImmediateTermination) { - base::Process child_process = SpawnChild("process_util_test_die_immediately"); - ASSERT_TRUE(child_process.IsValid()); + base::SpawnChildResult spawn_child = + SpawnChild("process_util_test_die_immediately"); + ASSERT_TRUE(spawn_child.process.IsValid()); // Give it time to die. sleep(2); - base::EnsureProcessTerminated(child_process.Duplicate()); + base::EnsureProcessTerminated(spawn_child.process.Duplicate()); // Check that process was really killed. - EXPECT_TRUE(IsProcessDead(child_process.Handle())); + EXPECT_TRUE(IsProcessDead(spawn_child.process.Handle())); } MULTIPROCESS_TEST_MAIN(process_util_test_die_immediately) { @@ -934,14 +941,15 @@ base::LaunchOptions options; options.fds_to_remap = &fds_to_remap; options.pre_exec_delegate = &read_from_pipe_delegate; - base::Process process(SpawnChildWithOptions("SimpleChildProcess", options)); - ASSERT_TRUE(process.IsValid()); + base::SpawnChildResult spawn_child = + SpawnChildWithOptions("SimpleChildProcess", options); + ASSERT_TRUE(spawn_child.process.IsValid()); read_fd.reset(); ASSERT_EQ(1, HANDLE_EINTR(write(write_fd.get(), &kPipeValue, 1))); int exit_code = 42; - EXPECT_TRUE(process.WaitForExit(&exit_code)); + EXPECT_TRUE(spawn_child.process.WaitForExit(&exit_code)); EXPECT_EQ(0, exit_code); } #endif // !defined(OS_ANDROID) @@ -969,11 +977,12 @@ base::LaunchOptions options; options.clone_flags = CLONE_NEWUSER | CLONE_NEWPID; - base::Process process(SpawnChildWithOptions("CheckPidProcess", options)); - ASSERT_TRUE(process.IsValid()); + base::SpawnChildResult spawn_child = + SpawnChildWithOptions("CheckPidProcess", options); + ASSERT_TRUE(spawn_child.process.IsValid()); int exit_code = 42; - EXPECT_TRUE(process.WaitForExit(&exit_code)); + EXPECT_TRUE(spawn_child.process.WaitForExit(&exit_code)); EXPECT_EQ(kSuccess, exit_code); } #endif // defined(CLONE_NEWUSER) && defined(CLONE_NEWPID) @@ -1010,11 +1019,12 @@ base::LaunchOptions options; options.current_directory = base::FilePath("/dev/null"); - base::Process process(SpawnChildWithOptions("SimpleChildProcess", options)); - ASSERT_TRUE(process.IsValid()); + base::SpawnChildResult spawn_child = + SpawnChildWithOptions("SimpleChildProcess", options); + ASSERT_TRUE(spawn_child.process.IsValid()); int exit_code = kSuccess; - EXPECT_TRUE(process.WaitForExit(&exit_code)); + EXPECT_TRUE(spawn_child.process.WaitForExit(&exit_code)); EXPECT_NE(kSuccess, exit_code); } #endif // defined(OS_LINUX)
diff --git a/base/test/multiprocess_test.cc b/base/test/multiprocess_test.cc index 3f64ef5..9da243347 100644 --- a/base/test/multiprocess_test.cc +++ b/base/test/multiprocess_test.cc
@@ -13,7 +13,7 @@ namespace base { #if !defined(OS_ANDROID) -Process SpawnMultiProcessTestChild( +SpawnChildResult SpawnMultiProcessTestChild( const std::string& procname, const CommandLine& base_command_line, const LaunchOptions& options) { @@ -24,7 +24,9 @@ if (!command_line.HasSwitch(switches::kTestChildProcess)) command_line.AppendSwitchASCII(switches::kTestChildProcess, procname); - return LaunchProcess(command_line, options); + SpawnChildResult result; + result.process = LaunchProcess(command_line, options); + return result; } bool WaitForMultiprocessTestChildExit(const Process& process, @@ -52,7 +54,7 @@ MultiProcessTest::MultiProcessTest() { } -Process MultiProcessTest::SpawnChild(const std::string& procname) { +SpawnChildResult MultiProcessTest::SpawnChild(const std::string& procname) { LaunchOptions options; #if defined(OS_WIN) options.start_hidden = true; @@ -60,7 +62,7 @@ return SpawnChildWithOptions(procname, options); } -Process MultiProcessTest::SpawnChildWithOptions( +SpawnChildResult MultiProcessTest::SpawnChildWithOptions( const std::string& procname, const LaunchOptions& options) { return SpawnMultiProcessTestChild(procname, MakeCmdLine(procname), options);
diff --git a/base/test/multiprocess_test.h b/base/test/multiprocess_test.h index bf966375..f0027d9 100644 --- a/base/test/multiprocess_test.h +++ b/base/test/multiprocess_test.h
@@ -17,6 +17,17 @@ class CommandLine; +struct SpawnChildResult { + SpawnChildResult() {} + SpawnChildResult(SpawnChildResult&& other) = default; + + SpawnChildResult& operator=(SpawnChildResult&& other) = default; + + Process process; + + DISALLOW_COPY_AND_ASSIGN(SpawnChildResult); +}; + // Helpers to spawn a child for a multiprocess test and execute a designated // function. Use these when you already have another base class for your test // fixture, but you want (some) of your tests to be multiprocess (otherwise you @@ -33,9 +44,10 @@ // // Maybe set some options (e.g., |start_hidden| on Windows).... // // // Start a child process and run |a_test_func|. -// base::Process test_child_process = +// SpawnChildResult result = // base::SpawnMultiProcessTestChild("a_test_func", command_line, // options); +// base::Process test_child_process = std::move(result.process); // // // Do stuff involving |test_child_process| and the child process.... // @@ -61,10 +73,9 @@ // |command_line| should be as provided by // |GetMultiProcessTestChildBaseCommandLine()| (below), possibly with arguments // added. Note: On Windows, you probably want to set |options.start_hidden|. -Process SpawnMultiProcessTestChild( - const std::string& procname, - const CommandLine& command_line, - const LaunchOptions& options); +SpawnChildResult SpawnMultiProcessTestChild(const std::string& procname, + const CommandLine& command_line, + const LaunchOptions& options); // Gets the base command line for |SpawnMultiProcessTestChild()|. To this, you // may add any flags needed for your child process. @@ -121,13 +132,13 @@ // } // // Returns the child process. - Process SpawnChild(const std::string& procname); + SpawnChildResult SpawnChild(const std::string& procname); // Run a child process using the given launch options. // // Note: On Windows, you probably want to set |options.start_hidden|. - Process SpawnChildWithOptions(const std::string& procname, - const LaunchOptions& options); + SpawnChildResult SpawnChildWithOptions(const std::string& procname, + const LaunchOptions& options); // Set up the command line used to spawn the child process. // Override this to add things to the command line (calling this first in the
diff --git a/base/test/multiprocess_test_android.cc b/base/test/multiprocess_test_android.cc index c74f013d..a1b8fcb 100644 --- a/base/test/multiprocess_test_android.cc +++ b/base/test/multiprocess_test_android.cc
@@ -25,9 +25,10 @@ // - All options except |fds_to_remap| are ignored. // // NOTE: This MUST NOT run on the main thread of the NativeTest application. -Process SpawnMultiProcessTestChild(const std::string& procname, - const CommandLine& base_command_line, - const LaunchOptions& options) { +SpawnChildResult SpawnMultiProcessTestChild( + const std::string& procname, + const CommandLine& base_command_line, + const LaunchOptions& options) { JNIEnv* env = android::AttachCurrentThread(); DCHECK(env); @@ -54,7 +55,10 @@ android::ToJavaArrayOfStrings(env, command_line.argv()); jint pid = android::Java_MultiprocessTestClientLauncher_launchClient( env, android::GetApplicationContext(), j_argv, fds); - return Process(pid); + + SpawnChildResult result; + result.process = Process(pid); + return result; } bool WaitForMultiprocessTestChildExit(const Process& process,
diff --git a/base/values.cc b/base/values.cc index 5cc0d69..25a25fb 100644 --- a/base/values.cc +++ b/base/values.cc
@@ -200,6 +200,7 @@ Value::~Value() { InternalCleanup(); + alive_ = false; } // static @@ -589,6 +590,8 @@ } void Value::InternalCleanup() { + CHECK(alive_); + switch (type_) { case Type::NONE: case Type::BOOLEAN:
diff --git a/base/values.h b/base/values.h index 35f66df..d4b334c 100644 --- a/base/values.h +++ b/base/values.h
@@ -173,6 +173,9 @@ // ListValue are properly inlined. Type type_; + // TODO(crbug.com/697817): Remove after diagnosing the bug. + bool alive_ = true; + union { bool bool_value_; int int_value_;
diff --git a/base/win/scoped_handle_unittest.cc b/base/win/scoped_handle_unittest.cc index ca6fb451..0a75115 100644 --- a/base/win/scoped_handle_unittest.cc +++ b/base/win/scoped_handle_unittest.cc
@@ -114,11 +114,11 @@ CommandLine command_line(base::GetMultiProcessTestChildBaseCommandLine()); command_line.AppendSwitch(switches::kTestDoNotInitializeIcu); - base::Process test_child_process = base::SpawnMultiProcessTestChild( + base::SpawnChildResult spawn_child = base::SpawnMultiProcessTestChild( "ActiveVerifierChildProcess", command_line, LaunchOptions()); int rv = -1; - ASSERT_TRUE(test_child_process.WaitForExitWithTimeout( + ASSERT_TRUE(spawn_child.process.WaitForExitWithTimeout( TestTimeouts::action_timeout(), &rv)); EXPECT_EQ(0, rv); }
diff --git a/base/win/wait_chain_unittest.cc b/base/win/wait_chain_unittest.cc index ba048722..d581491 100644 --- a/base/win/wait_chain_unittest.cc +++ b/base/win/wait_chain_unittest.cc
@@ -194,7 +194,9 @@ handle_vector.push_back(mutex); handle_vector.push_back(sync_event); options.handles_to_inherit = &handle_vector; - return SpawnMultiProcessTestChild("WaitChainTestProc", command_line, options); + base::SpawnChildResult spawn_result = + SpawnMultiProcessTestChild("WaitChainTestProc", command_line, options); + return std::move(spawn_result.process); } // Returns true if the |wait_chain| is an alternating sequence of thread objects
diff --git a/build/android/pylib/local/device/local_device_environment.py b/build/android/pylib/local/device/local_device_environment.py index 4612231..86ffc5f 100644 --- a/build/android/pylib/local/device/local_device_environment.py +++ b/build/android/pylib/local/device/local_device_environment.py
@@ -10,12 +10,14 @@ import tempfile import threading +import devil_chromium from devil import base_error from devil.android import device_blacklist from devil.android import device_errors from devil.android import device_list from devil.android import device_utils from devil.android import logcat_monitor +from devil.android.sdk import adb_wrapper from devil.utils import file_utils from devil.utils import parallelizer from pylib import constants @@ -94,6 +96,15 @@ self._tool_name = args.tool self._trace_output = args.trace_output + devil_chromium.Initialize( + output_directory=constants.GetOutDirectory(), + adb_path=args.adb_path) + + # Some things such as Forwarder require ADB to be in the environment path. + adb_dir = os.path.dirname(adb_wrapper.AdbWrapper.GetAdbPath()) + if adb_dir and adb_dir not in os.environ['PATH'].split(os.pathsep): + os.environ['PATH'] = adb_dir + os.pathsep + os.environ['PATH'] + #override def SetUp(self): if self.trace_output:
diff --git a/build/android/pylib/local/machine/local_machine_environment.py b/build/android/pylib/local/machine/local_machine_environment.py index b9f6acad..a816e7f4 100644 --- a/build/android/pylib/local/machine/local_machine_environment.py +++ b/build/android/pylib/local/machine/local_machine_environment.py
@@ -2,6 +2,8 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. +import devil_chromium +from pylib import constants from pylib.base import environment @@ -10,6 +12,9 @@ def __init__(self, _args, _error_func): super(LocalMachineEnvironment, self).__init__() + devil_chromium.Initialize( + output_directory=constants.GetOutDirectory()) + #override def SetUp(self): pass
diff --git a/build/android/test_runner.py b/build/android/test_runner.py index 9971172..ee6f87a 100755 --- a/build/android/test_runner.py +++ b/build/android/test_runner.py
@@ -18,13 +18,12 @@ import traceback import unittest -import devil_chromium +from pylib.constants import host_paths + +if host_paths.DEVIL_PATH not in sys.path: + sys.path.append(host_paths.DEVIL_PATH) + from devil import base_error -from devil.android import device_blacklist -from devil.android import device_errors -from devil.android import device_utils -from devil.android import forwarder -from devil.android import ports from devil.utils import reraiser_thread from devil.utils import run_tests_helper @@ -33,7 +32,6 @@ from pylib.base import environment_factory from pylib.base import test_instance_factory from pylib.base import test_run_factory -from pylib.constants import host_paths from pylib.results import json_results from pylib.results import report_results @@ -44,87 +42,77 @@ host_paths.DIR_SOURCE_ROOT, 'build', 'android', 'devil_config.json')) +def AddTestLauncherArgs(parser): + """Adds arguments mirroring //base/test/launcher. + + Args: + parser: The parser to which arguments should be added. + Returns: + The given parser. + """ + parser.add_argument( + '--test-launcher-retry-limit', + '--test_launcher_retry_limit', + '--num_retries', '--num-retries', + dest='num_retries', type=int, default=2, + help='Number of retries for a test before ' + 'giving up (default: %(default)s).') + parser.add_argument( + '--test-launcher-summary-output', + '--json-results-file', + dest='json_results_file', type=os.path.realpath, + help='If set, will dump results in JSON form ' + 'to specified file.') + + return parser + + +def AddTracingOptions(parser): + # TODO(shenghuazhang): Move this into AddCommonOptions once it's supported + # for all test types. + parser.add_argument( + '--trace-output', + metavar='FILENAME', type=os.path.realpath, + help='Path to save test_runner trace data to.') + + def AddCommonOptions(parser): """Adds all common options to |parser|.""" - group = parser.add_argument_group('Common Options') - default_build_type = os.environ.get('BUILDTYPE', 'Debug') - debug_or_release_group = group.add_mutually_exclusive_group() + debug_or_release_group = parser.add_mutually_exclusive_group() debug_or_release_group.add_argument( - '--debug', action='store_const', const='Debug', dest='build_type', + '--debug', + action='store_const', const='Debug', dest='build_type', default=default_build_type, - help=('If set, run test suites under out/Debug. ' - 'Default is env var BUILDTYPE or Debug.')) + help='If set, run test suites under out/Debug. ' + 'Default is env var BUILDTYPE or Debug.') debug_or_release_group.add_argument( - '--release', action='store_const', const='Release', dest='build_type', - help=('If set, run test suites under out/Release. ' - 'Default is env var BUILDTYPE or Debug.')) + '--release', + action='store_const', const='Release', dest='build_type', + help='If set, run test suites under out/Release. ' + 'Default is env var BUILDTYPE or Debug.') - # TODO(jbudorick): Remove --build-directory once no bots use it. - group.add_argument('--build-directory', dest='build_directory', - help='DEPRECATED') - group.add_argument('--output-directory', dest='output_directory', - type=os.path.realpath, - help=('Path to the directory in which build files are' - ' located (must include build type). This will take' - ' precedence over --debug, --release and' - ' --build-directory')) - group.add_argument('--num_retries', '--num-retries', - '--test_launcher_retry_limit', - '--test-launcher-retry-limit', - dest='num_retries', - type=int, default=2, - help=('Number of retries for a test before ' - 'giving up (default: %(default)s).')) - group.add_argument('--repeat', '--gtest_repeat', '--gtest-repeat', - dest='repeat', type=int, default=0, - help='Number of times to repeat the specified set of ' - 'tests.') - group.add_argument('--break-on-failure', '--break_on_failure', - dest='break_on_failure', action='store_true', - help='Whether to break on failure.') - group.add_argument('-v', - '--verbose', - dest='verbose_count', - default=0, - action='count', - help='Verbose level (multiple times for more)') - group.add_argument('--flakiness-dashboard-server', - dest='flakiness_dashboard_server', - help=('Address of the server that is hosting the ' - 'Chrome for Android flakiness dashboard.')) - group.add_argument('--enable-platform-mode', action='store_true', - help=('Run the test scripts in platform mode, which ' - 'conceptually separates the test runner from the ' - '"device" (local or remote, real or emulated) on ' - 'which the tests are running. [experimental]')) - group.add_argument('-e', '--environment', default='local', - choices=constants.VALID_ENVIRONMENTS, - help='Test environment to run in (default: %(default)s).') - group.add_argument('--adb-path', type=os.path.realpath, - help=('Specify the absolute path of the adb binary that ' - 'should be used.')) - group.add_argument('--json-results-file', '--test-launcher-summary-output', - dest='json_results_file', type=os.path.realpath, - help='If set, will dump results in JSON form ' - 'to specified file.') - group.add_argument('--trace-output', metavar='FILENAME', - type=os.path.realpath, - help='Path to save test_runner trace data to. This option ' - 'has been implemented for gtest, instrumentation ' - 'test and perf test.') + parser.add_argument( + '--break-on-failure', '--break_on_failure', + dest='break_on_failure', action='store_true', + help='Whether to break on failure.') - logcat_output_group = group.add_mutually_exclusive_group() - logcat_output_group.add_argument( - '--logcat-output-dir', type=os.path.realpath, - help='If set, will dump logcats recorded during test run to directory. ' - 'File names will be the device ids with timestamps.') - logcat_output_group.add_argument( - '--logcat-output-file', type=os.path.realpath, - help='If set, will merge logcats recorded during test run and dump them ' - 'to the specified file.') + # TODO(jbudorick): Remove this once everything has switched to platform + # mode. + parser.add_argument( + '--enable-platform-mode', + action='store_true', + help='Run the test scripts in platform mode, which ' + 'conceptually separates the test runner from the ' + '"device" (local or remote, real or emulated) on ' + 'which the tests are running. [experimental]') + + parser.add_argument( + '-e', '--environment', + default='local', choices=constants.VALID_ENVIRONMENTS, + help='Test environment to run in (default: %(default)s).') class FastLocalDevAction(argparse.Action): def __call__(self, parser, namespace, values, option_string=None): @@ -135,343 +123,382 @@ namespace.skip_clear_data = True namespace.extract_test_list_from_filter = True - group.add_argument('--fast-local-dev', type=bool, nargs=0, - action=FastLocalDevAction, - help='Alias for: --verbose --num-retries=0 ' - '--enable-device-cache --enable-concurrent-adb ' - '--skip-clear-data --extract-test-list-from-filter') + parser.add_argument( + '--fast-local-dev', + type=bool, nargs=0, action=FastLocalDevAction, + help='Alias for: --verbose --num-retries=0 ' + '--enable-device-cache --enable-concurrent-adb ' + '--skip-clear-data --extract-test-list-from-filter') + + # TODO(jbudorick): Remove this once downstream bots have switched to + # api.test_results. + parser.add_argument( + '--flakiness-dashboard-server', + dest='flakiness_dashboard_server', + help=argparse.SUPPRESS) + + parser.add_argument( + '--output-directory', + dest='output_directory', type=os.path.realpath, + help='Path to the directory in which build files are' + ' located (must include build type). This will take' + ' precedence over --debug and --release') + parser.add_argument( + '--repeat', '--gtest_repeat', '--gtest-repeat', + dest='repeat', type=int, default=0, + help='Number of times to repeat the specified set of tests.') + parser.add_argument( + '-v', '--verbose', + dest='verbose_count', default=0, action='count', + help='Verbose level (multiple times for more)') + + AddTestLauncherArgs(parser) + def ProcessCommonOptions(args): """Processes and handles all common options.""" run_tests_helper.SetLogLevel(args.verbose_count) constants.SetBuildType(args.build_type) - if args.build_directory: - constants.SetBuildDirectory(args.build_directory) if args.output_directory: constants.SetOutputDirectory(args.output_directory) - devil_chromium.Initialize( - output_directory=constants.GetOutDirectory(), - adb_path=args.adb_path) - - # Some things such as Forwarder require ADB to be in the environment path. - adb_dir = os.path.dirname(constants.GetAdbPath()) - if adb_dir and adb_dir not in os.environ['PATH'].split(os.pathsep): - os.environ['PATH'] = adb_dir + os.pathsep + os.environ['PATH'] - def AddDeviceOptions(parser): """Adds device options to |parser|.""" - group = parser.add_argument_group(title='Device Options') - group.add_argument('--tool', - dest='tool', - help=('Run the test under a tool ' - '(use --tool help to list them)')) - group.add_argument('-d', '--device', dest='test_device', - help=('Target device for the test suite ' - 'to run on.')) - group.add_argument('--blacklist-file', type=os.path.realpath, - help='Device blacklist file.') - group.add_argument('--enable-device-cache', action='store_true', - help='Cache device state to disk between runs') - group.add_argument('--enable-concurrent-adb', action='store_true', - help='Run multiple adb commands at the same time, even ' - 'for the same device.') - group.add_argument('--skip-clear-data', action='store_true', - help='Do not wipe app data between tests. Use this to ' - 'speed up local development and never on bots ' + + parser = parser.add_argument_group('device arguments') + + parser.add_argument( + '--adb-path', + type=os.path.realpath, + help='Specify the absolute path of the adb binary that ' + 'should be used.') + parser.add_argument( + '--blacklist-file', + type=os.path.realpath, + help='Device blacklist file.') + parser.add_argument( + '-d', '--device', + dest='test_device', + help='Target device for the test suite to run on.') + parser.add_argument( + '--enable-concurrent-adb', + action='store_true', + help='Run multiple adb commands at the same time, even ' + 'for the same device.') + parser.add_argument( + '--enable-device-cache', + action='store_true', + help='Cache device state to disk between runs') + parser.add_argument( + '--skip-clear-data', + action='store_true', + help='Do not wipe app data between tests. Use this to ' + 'speed up local development and never on bots ' '(increases flakiness)') - group.add_argument('--target-devices-file', type=os.path.realpath, - help='Path to file with json list of device serials to ' - 'run tests on. When not specified, all available ' - 'devices are used.') + parser.add_argument( + '--target-devices-file', + type=os.path.realpath, + help='Path to file with json list of device serials to ' + 'run tests on. When not specified, all available ' + 'devices are used.') + parser.add_argument( + '--tool', + dest='tool', + help='Run the test under a tool ' + '(use --tool help to list them)') + + logcat_output_group = parser.add_mutually_exclusive_group() + logcat_output_group.add_argument( + '--logcat-output-dir', type=os.path.realpath, + help='If set, will dump logcats recorded during test run to directory. ' + 'File names will be the device ids with timestamps.') + logcat_output_group.add_argument( + '--logcat-output-file', type=os.path.realpath, + help='If set, will merge logcats recorded during test run and dump them ' + 'to the specified file.') def AddGTestOptions(parser): """Adds gtest options to |parser|.""" - group = parser.add_argument_group('GTest Options') - group.add_argument('-s', '--suite', dest='suite_name', - nargs='+', metavar='SUITE_NAME', required=True, - help='Executable name of the test suite to run.') - group.add_argument('--executable-dist-dir', type=os.path.realpath, - help="Path to executable's dist directory for native" - " (non-apk) tests.") - group.add_argument('--test-apk-incremental-install-script', - type=os.path.realpath, - help='Path to install script for the test apk.') - group.add_argument('--gtest_also_run_disabled_tests', - '--gtest-also-run-disabled-tests', - dest='run_disabled', action='store_true', - help='Also run disabled tests if applicable.') - group.add_argument('-a', '--test-arguments', dest='test_arguments', - default='', - help='Additional arguments to pass to the test.') - group.add_argument('-t', '--shard-timeout', - dest='shard_timeout', type=int, default=120, - help='Timeout to wait for each test ' - '(default: %(default)s).') - # TODO(jbudorick): Remove this after ensuring nothing else uses it. - group.add_argument('--isolate_file_path', - '--isolate-file-path', - dest='isolate_file_path', - type=os.path.realpath, - help=argparse.SUPPRESS) - group.add_argument('--runtime-deps-path', - dest='runtime_deps_path', - type=os.path.realpath, - help='Runtime data dependency file from GN.') - group.add_argument('--app-data-file', action='append', dest='app_data_files', - help='A file path relative to the app data directory ' - 'that should be saved to the host.') - group.add_argument('--app-data-file-dir', - help='Host directory to which app data files will be' - ' saved. Used with --app-data-file.') - group.add_argument('--delete-stale-data', dest='delete_stale_data', - action='store_true', - help='Delete stale test data on the device.') - group.add_argument('--extract-test-list-from-filter', - action='store_true', - help='When a test filter is specified, and the list of ' - 'tests can be determined from it, skip querying the ' - 'device for the list of all tests. Speeds up local ' - 'development, but is not safe to use on bots (' - 'http://crbug.com/549214') - group.add_argument('--enable-xml-result-parsing', - action='store_true', - help=argparse.SUPPRESS) - group.add_argument('--store-tombstones', dest='store_tombstones', - action='store_true', - help='Add tombstones in results if crash.') + parser = parser.add_argument_group('gtest arguments') - filter_group = group.add_mutually_exclusive_group() - filter_group.add_argument('-f', '--gtest_filter', '--gtest-filter', - dest='test_filter', - help='googletest-style filter string.') - filter_group.add_argument('--gtest-filter-file', dest='test_filter_file', - type=os.path.realpath, - help='Path to file that contains googletest-style ' - 'filter strings. See also ' - '//testing/buildbot/filters/README.md.') - - AddDeviceOptions(parser) - AddCommonOptions(parser) - - -def AddLinkerTestOptions(parser): - group = parser.add_argument_group('Linker Test Options') - group.add_argument('-f', '--gtest-filter', dest='test_filter', - help='googletest-style filter string.') - group.add_argument('--test-apk', type=os.path.realpath, - help='Path to the linker test APK.') - AddCommonOptions(parser) - AddDeviceOptions(parser) - - -def AddJavaTestOptions(argument_group): - """Adds the Java test options to |option_parser|.""" - - argument_group.add_argument( - '-f', '--test-filter', '--gtest_filter', '--gtest-filter', - dest='test_filter', - help=('Test filter (if not fully qualified, will run all matches).')) - argument_group.add_argument( - '-A', '--annotation', dest='annotation_str', - help=('Comma-separated list of annotations. Run only tests with any of ' - 'the given annotations. An annotation can be either a key or a ' - 'key-values pair. A test that has no annotation is considered ' - '"SmallTest".')) - argument_group.add_argument( - '-E', '--exclude-annotation', dest='exclude_annotation_str', - help=('Comma-separated list of annotations. Exclude tests with these ' - 'annotations.')) - argument_group.add_argument( - '--screenshot-directory', dest='screenshot_dir', type=os.path.realpath, - help='Capture screenshots of test failures') - argument_group.add_argument( - '--save-perf-json', action='store_true', - help='Saves the JSON file for each UI Perf test.') - argument_group.add_argument( - '--official-build', action='store_true', help='Run official build tests.') - argument_group.add_argument( - '--disable-dalvik-asserts', dest='set_asserts', action='store_false', - default=True, help='Removes the dalvik.vm.enableassertions property') - argument_group.add_argument( + parser.add_argument( + '--app-data-file', + action='append', dest='app_data_files', + help='A file path relative to the app data directory ' + 'that should be saved to the host.') + parser.add_argument( + '--app-data-file-dir', + help='Host directory to which app data files will be' + ' saved. Used with --app-data-file.') + parser.add_argument( + '--delete-stale-data', + dest='delete_stale_data', action='store_true', + help='Delete stale test data on the device.') + parser.add_argument( + '--enable-xml-result-parsing', + action='store_true', help=argparse.SUPPRESS) + parser.add_argument( + '--executable-dist-dir', + type=os.path.realpath, + help="Path to executable's dist directory for native" + " (non-apk) tests.") + parser.add_argument( + '--extract-test-list-from-filter', + action='store_true', + help='When a test filter is specified, and the list of ' + 'tests can be determined from it, skip querying the ' + 'device for the list of all tests. Speeds up local ' + 'development, but is not safe to use on bots (' + 'http://crbug.com/549214') + parser.add_argument( '--gtest_also_run_disabled_tests', '--gtest-also-run-disabled-tests', dest='run_disabled', action='store_true', help='Also run disabled tests if applicable.') + parser.add_argument( + '--runtime-deps-path', + dest='runtime_deps_path', type=os.path.realpath, + help='Runtime data dependency file from GN.') + parser.add_argument( + '-t', '--shard-timeout', + dest='shard_timeout', type=int, default=120, + help='Timeout to wait for each test (default: %(default)s).') + parser.add_argument( + '--store-tombstones', + dest='store_tombstones', action='store_true', + help='Add tombstones in results if crash.') + parser.add_argument( + '-s', '--suite', + dest='suite_name', nargs='+', metavar='SUITE_NAME', required=True, + help='Executable name of the test suite to run.') + parser.add_argument( + '--test-apk-incremental-install-script', + type=os.path.realpath, + help='Path to install script for the test apk.') + parser.add_argument( + '-a', '--test-arguments', + dest='test_arguments', default='', + help='Additional arguments to pass to the test.') - - -def ProcessJavaTestOptions(args): - """Processes options/arguments and populates |options| with defaults.""" - - # TODO(jbudorick): Handle most of this function in argparse. - if args.annotation_str: - args.annotations = args.annotation_str.split(',') - elif args.test_filter: - args.annotations = [] - else: - args.annotations = ['SmallTest', 'MediumTest', 'LargeTest', 'EnormousTest', - 'IntegrationTest'] - - if args.exclude_annotation_str: - args.exclude_annotations = args.exclude_annotation_str.split(',') - else: - args.exclude_annotations = [] + filter_group = parser.add_mutually_exclusive_group() + filter_group.add_argument( + '-f', '--gtest_filter', '--gtest-filter', + dest='test_filter', + help='googletest-style filter string.') + filter_group.add_argument( + '--gtest-filter-file', + dest='test_filter_file', type=os.path.realpath, + help='Path to file that contains googletest-style filter strings. ' + 'See also //testing/buildbot/filters/README.md.') def AddInstrumentationTestOptions(parser): """Adds Instrumentation test options to |parser|.""" - parser.usage = '%(prog)s [options]' + parser.add_argument_group('instrumentation arguments') - group = parser.add_argument_group('Instrumentation Test Options') - AddJavaTestOptions(group) - - java_or_python_group = group.add_mutually_exclusive_group() - java_or_python_group.add_argument( - '-j', '--java-only', action='store_false', - dest='run_python_tests', default=True, help='Run only the Java tests.') - java_or_python_group.add_argument( - '-p', '--python-only', action='store_false', - dest='run_java_tests', default=True, - help='DEPRECATED') - - group.add_argument('--host-driven-root', - help='DEPRECATED') - group.add_argument('-w', '--wait_debugger', dest='wait_for_debugger', - action='store_true', - help='Wait for debugger.') + parser.add_argument( + '--additional-apk', + action='append', dest='additional_apks', default=[], + type=os.path.realpath, + help='Additional apk that must be installed on ' + 'the device when the tests are run') + parser.add_argument( + '-A', '--annotation', + dest='annotation_str', + help='Comma-separated list of annotations. Run only tests with any of ' + 'the given annotations. An annotation can be either a key or a ' + 'key-values pair. A test that has no annotation is considered ' + '"SmallTest".') # TODO(jbudorick): Remove support for name-style APK specification once # bots are no longer doing it. - group.add_argument('--apk-under-test', - help='Path or name of the apk under test.') - group.add_argument('--apk-under-test-incremental-install-script', - help='Path to install script for the --apk-under-test.') - group.add_argument('--test-apk', required=True, - help='Path or name of the apk containing the tests ' - '(name is without the .apk extension; ' - 'e.g. "ContentShellTest").') - group.add_argument('--test-jar', - help='Path of jar containing test java files.') - group.add_argument('--test-apk-incremental-install-script', - type=os.path.realpath, - help='Path to install script for the --test-apk.') - group.add_argument('--additional-apk', action='append', - dest='additional_apks', default=[], - type=os.path.realpath, - help='Additional apk that must be installed on ' - 'the device when the tests are run') - group.add_argument('--coverage-dir', type=os.path.realpath, - help=('Directory in which to place all generated ' - 'EMMA coverage files.')) - group.add_argument('--device-flags', dest='device_flags', - type=os.path.realpath, - help='The relative filepath to a file containing ' - 'command-line flags to set on the device') - group.add_argument('--device-flags-file', type=os.path.realpath, - help='The relative filepath to a file containing ' - 'command-line flags to set on the device') - # TODO(jbudorick): Remove this after ensuring nothing else uses it. - group.add_argument('--isolate_file_path', - '--isolate-file-path', - dest='isolate_file_path', - type=os.path.realpath, - help=argparse.SUPPRESS) - group.add_argument('--runtime-deps-path', - dest='runtime_deps_path', - type=os.path.realpath, - help='Runtime data dependency file from GN.') - group.add_argument('--delete-stale-data', dest='delete_stale_data', - action='store_true', - help='Delete stale test data on the device.') - group.add_argument('--timeout-scale', type=float, - help='Factor by which timeouts should be scaled.') - group.add_argument('--strict-mode', dest='strict_mode', default='testing', - help='StrictMode command-line flag set on the device, ' - 'death/testing to kill the process, off to stop ' - 'checking, flash to flash only. Default testing.') - group.add_argument('--regenerate-goldens', dest='regenerate_goldens', - action='store_true', - help='Causes the render tests to not fail when a check' - 'fails or the golden image is missing but to render' - 'the view and carry on.') - group.add_argument('--store-tombstones', dest='store_tombstones', - action='store_true', - help='Add tombstones in results if crash.') - group.add_argument('--shared-prefs-file', dest='shared_prefs_file', - type=os.path.realpath, - help='The relative path to a file containing JSON list ' - 'of shared preference files to edit and how to do ' - 'so. Example list: ' - '[{' - ' "package": "com.package.example",' - ' "filename": "ExampleSettings.xml",' - ' "set": {' - ' "boolean_key_in_xml": true,' - ' "string_key_in_xml": "string_value"' - ' },' - ' "remove": [' - ' "key_in_xml_to_remove"' - ' ]' - '}]') + parser.add_argument( + '--apk-under-test', + help='Path or name of the apk under test.') + parser.add_argument( + '--coverage-dir', + type=os.path.realpath, + help='Directory in which to place all generated ' + 'EMMA coverage files.') + parser.add_argument( + '--delete-stale-data', + action='store_true', dest='delete_stale_data', + help='Delete stale test data on the device.') + parser.add_argument( + '--device-flags', + dest='device_flags', + type=os.path.realpath, + help='The relative filepath to a file containing ' + 'command-line flags to set on the device') + parser.add_argument( + '--device-flags-file', + type=os.path.realpath, + help='The relative filepath to a file containing ' + 'command-line flags to set on the device') + parser.add_argument( + '--disable-dalvik-asserts', + dest='set_asserts', action='store_false', default=True, + help='Removes the dalvik.vm.enableassertions property') + parser.add_argument( + '-E', '--exclude-annotation', + dest='exclude_annotation_str', + help='Comma-separated list of annotations. Exclude tests with these ' + 'annotations.') + parser.add_argument( + '-f', '--test-filter', '--gtest_filter', '--gtest-filter', + dest='test_filter', + help='Test filter (if not fully qualified, will run all matches).') + parser.add_argument( + '--gtest_also_run_disabled_tests', '--gtest-also-run-disabled-tests', + dest='run_disabled', action='store_true', + help='Also run disabled tests if applicable.') + parser.add_argument( + '--regenerate-goldens', + action='store_true', dest='regenerate_goldens', + help='Causes the render tests to not fail when a check' + 'fails or the golden image is missing but to render' + 'the view and carry on.') + parser.add_argument( + '--runtime-deps-path', + dest='runtime_deps_path', type=os.path.realpath, + help='Runtime data dependency file from GN.') + parser.add_argument( + '--save-perf-json', + action='store_true', + help='Saves the JSON file for each UI Perf test.') + parser.add_argument( + '--screenshot-directory', + dest='screenshot_dir', type=os.path.realpath, + help='Capture screenshots of test failures') + parser.add_argument( + '--shared-prefs-file', + dest='shared_prefs_file', type=os.path.realpath, + help='The relative path to a file containing JSON list of shared ' + 'preference files to edit and how to do so. Example list: ' + '[{' + ' "package": "com.package.example",' + ' "filename": "ExampleSettings.xml",' + ' "set": {' + ' "boolean_key_in_xml": true,' + ' "string_key_in_xml": "string_value"' + ' },' + ' "remove": [' + ' "key_in_xml_to_remove"' + ' ]' + '}]') + parser.add_argument( + '--store-tombstones', + action='store_true', dest='store_tombstones', + help='Add tombstones in results if crash.') + parser.add_argument( + '--strict-mode', + dest='strict_mode', default='testing', + help='StrictMode command-line flag set on the device, ' + 'death/testing to kill the process, off to stop ' + 'checking, flash to flash only. (default: %(default)s)') + parser.add_argument( + '--test-apk', + required=True, + help='Path or name of the apk containing the tests.') + parser.add_argument( + '--test-jar', + help='Path of jar containing test java files.') + parser.add_argument( + '--timeout-scale', + type=float, + help='Factor by which timeouts should be scaled.') + parser.add_argument( + '-w', '--wait_debugger', + action='store_true', dest='wait_for_debugger', + help='Wait for debugger.') - AddCommonOptions(parser) - AddDeviceOptions(parser) + # These arguments are suppressed from the help text because they should + # only ever be specified by an intermediate script. + parser.add_argument( + '--apk-under-test-incremental-install-script', + help=argparse.SUPPRESS) + parser.add_argument( + '--test-apk-incremental-install-script', + type=os.path.realpath, + help=argparse.SUPPRESS) def AddJUnitTestOptions(parser): """Adds junit test options to |parser|.""" - group = parser.add_argument_group('JUnit Test Options') - group.add_argument( - '-s', '--test-suite', dest='test_suite', required=True, - help=('JUnit test suite to run.')) - group.add_argument( - '-f', '--test-filter', dest='test_filter', - help='Filters tests googletest-style.') - group.add_argument( - '--package-filter', dest='package_filter', - help='Filters tests by package.') - group.add_argument( - '--runner-filter', dest='runner_filter', - help='Filters tests by runner class. Must be fully qualified.') - group.add_argument( - '--coverage-dir', dest='coverage_dir', type=os.path.realpath, + parser = parser.add_argument_group('junit arguments') + + parser.add_argument( + '--coverage-dir', + dest='coverage_dir', type=os.path.realpath, help='Directory to store coverage info.') - AddCommonOptions(parser) + parser.add_argument( + '--package-filter', + dest='package_filter', + help='Filters tests by package.') + parser.add_argument( + '--runner-filter', + dest='runner_filter', + help='Filters tests by runner class. Must be fully qualified.') + parser.add_argument( + '-f', '--test-filter', + dest='test_filter', + help='Filters tests googletest-style.') + parser.add_argument( + '-s', '--test-suite', + dest='test_suite', required=True, + help='JUnit test suite to run.') + + +def AddLinkerTestOptions(parser): + + parser.add_argument_group('linker arguments') + + parser.add_argument( + '-f', '--gtest-filter', + dest='test_filter', + help='googletest-style filter string.') + parser.add_argument( + '--test-apk', + type=os.path.realpath, + help='Path to the linker test APK.') def AddMonkeyTestOptions(parser): """Adds monkey test options to |parser|.""" - group = parser.add_argument_group('Monkey Test Options') - group.add_argument( - '--browser', required=True, choices=constants.PACKAGE_INFO.keys(), + parser = parser.add_argument_group('monkey arguments') + + parser.add_argument( + '--browser', + required=True, choices=constants.PACKAGE_INFO.keys(), metavar='BROWSER', help='Browser under test.') - group.add_argument( - '--event-count', default=10000, type=int, - help='Number of events to generate (default: %(default)s).') - group.add_argument( - '--category', nargs='*', dest='categories', default=[], + parser.add_argument( + '--category', + nargs='*', dest='categories', default=[], help='A list of allowed categories. Monkey will only visit activities ' 'that are listed with one of the specified categories.') - group.add_argument( - '--throttle', default=100, type=int, - help='Delay between events (ms) (default: %(default)s). ') - group.add_argument( - '--seed', type=int, + parser.add_argument( + '--event-count', + default=10000, type=int, + help='Number of events to generate (default: %(default)s).') + parser.add_argument( + '--seed', + type=int, help='Seed value for pseudo-random generator. Same seed value generates ' 'the same sequence of events. Seed is randomized by default.') - AddCommonOptions(parser) - AddDeviceOptions(parser) + parser.add_argument( + '--throttle', + default=100, type=int, + help='Delay between events (ms) (default: %(default)s). ') def AddPerfTestOptions(parser): """Adds perf test options to |parser|.""" - group = parser.add_argument_group('Perf Test Options') + parser = parser.add_argument_group('perf arguments') class SingleStepAction(argparse.Action): def __call__(self, parser, namespace, values, option_string=None): @@ -483,92 +510,106 @@ 'but no single step command provided.') setattr(namespace, self.dest, values) - step_group = group.add_mutually_exclusive_group(required=True) + step_group = parser.add_mutually_exclusive_group(required=True) # TODO(jbudorick): Revise --single-step to use argparse.REMAINDER. # This requires removing "--" from client calls. step_group.add_argument( - '--single-step', action='store_true', + '--print-step', + help='The name of a previously executed perf step to print.') + step_group.add_argument( + '--single-step', + action='store_true', help='Execute the given command with retries, but only print the result ' 'for the "most successful" round.') step_group.add_argument( '--steps', help='JSON file containing the list of commands to run.') - step_group.add_argument( - '--print-step', - help='The name of a previously executed perf step to print.') - group.add_argument( - '--output-json-list', type=os.path.realpath, - help='Writes a JSON list of information for each --steps into the given ' - 'file. Information includes runtime and device affinity for each ' - '--steps.') - group.add_argument( + parser.add_argument( '--collect-chartjson-data', action='store_true', help='Cache the telemetry chartjson output from each step for later use.') - group.add_argument( - '--output-chartjson-data', - type=os.path.realpath, - help='Writes telemetry chartjson formatted output into the given file.') - group.add_argument( + parser.add_argument( '--collect-json-data', action='store_true', help='Cache the telemetry JSON output from each step for later use.') - group.add_argument( + parser.add_argument( + '--dry-run', + action='store_true', + help='Just print the steps without executing.') + parser.add_argument( + '--flaky-steps', + type=os.path.realpath, + help='A JSON file containing steps that are flaky ' + 'and will have its exit code ignored.') + # TODO(rnephew): Remove this when everything moves to new option in platform + # mode. + parser.add_argument( + '--get-output-dir-archive', + metavar='FILENAME', type=os.path.realpath, + help='Write the cached output directory archived by a step into the' + ' given ZIP file.') + parser.add_argument( + '--known-devices-file', + help='Path to known device list.') + # Uses 0.1 degrees C because that's what Android does. + parser.add_argument( + '--max-battery-temp', + type=int, + help='Only start tests when the battery is at or below the given ' + 'temperature (0.1 C)') + parser.add_argument( + '--min-battery-level', + type=int, + help='Only starts tests when the battery is charged above ' + 'given level.') + parser.add_argument( + '--no-timeout', + action='store_true', + help='Do not impose a timeout. Each perf step is responsible for ' + 'implementing the timeout logic.') + parser.add_argument( + '--output-chartjson-data', + type=os.path.realpath, + help='Writes telemetry chartjson formatted output into the given file.') + parser.add_argument( + '--output-dir-archive-path', + metavar='FILENAME', type=os.path.realpath, + help='Write the cached output directory archived by a step into the' + ' given ZIP file.') + parser.add_argument( '--output-json-data', type=os.path.realpath, help='Writes telemetry JSON formatted output into the given file.') - # TODO(rnephew): Remove this when everything moves to new option in platform - # mode. - group.add_argument( - '--get-output-dir-archive', metavar='FILENAME', type=os.path.realpath, - help='Write the cached output directory archived by a step into the' - ' given ZIP file.') - group.add_argument( - '--output-dir-archive-path', metavar='FILENAME', type=os.path.realpath, - help='Write the cached output directory archived by a step into the' - ' given ZIP file.') - group.add_argument( - '--flaky-steps', type=os.path.realpath, - help=('A JSON file containing steps that are flaky ' - 'and will have its exit code ignored.')) - group.add_argument( - '--no-timeout', action='store_true', - help=('Do not impose a timeout. Each perf step is responsible for ' - 'implementing the timeout logic.')) - group.add_argument( + parser.add_argument( + '--output-json-list', + type=os.path.realpath, + help='Writes a JSON list of information for each --steps into the given ' + 'file. Information includes runtime and device affinity for each ' + '--steps.') + parser.add_argument( '-f', '--test-filter', - help=('Test filter (will match against the names listed in --steps).')) - group.add_argument( - '--dry-run', action='store_true', - help='Just print the steps without executing.') - # Uses 0.1 degrees C because that's what Android does. - group.add_argument( - '--max-battery-temp', type=int, - help='Only start tests when the battery is at or below the given ' - 'temperature (0.1 C)') - group.add_argument( - 'single_step_command', nargs='*', action=SingleStepAction, - help='If --single-step is specified, the command to run.') - group.add_argument( - '--min-battery-level', type=int, - help='Only starts tests when the battery is charged above ' - 'given level.') - group.add_argument('--known-devices-file', help='Path to known device list.') - group.add_argument( - '--write-buildbot-json', action='store_true', + help='Test filter (will match against the names listed in --steps).') + parser.add_argument( + '--write-buildbot-json', + action='store_true', help='Whether to output buildbot json.') - AddCommonOptions(parser) - AddDeviceOptions(parser) + + parser.add_argument( + 'single_step_command', + nargs='*', action=SingleStepAction, + help='If --single-step is specified, the command to run.') def AddPythonTestOptions(parser): - group = parser.add_argument_group('Python Test Options') - group.add_argument( - '-s', '--suite', dest='suite_name', metavar='SUITE_NAME', + + parser = parser.add_argument_group('python arguments') + + parser.add_argument( + '-s', '--suite', + dest='suite_name', metavar='SUITE_NAME', choices=constants.PYTHON_UNIT_TEST_SUITES.keys(), help='Name of the test suite to run.') - AddCommonOptions(parser) def _RunPythonTests(args): @@ -588,43 +629,11 @@ sys.path = sys.path[1:] -def _GetAttachedDevices(blacklist_file, test_device, enable_cache, num_retries): - """Get all attached devices. - - Args: - blacklist_file: Path to device blacklist. - test_device: Name of a specific device to use. - enable_cache: Whether to enable checksum caching. - - Returns: - A list of attached devices. - """ - blacklist = (device_blacklist.Blacklist(blacklist_file) - if blacklist_file - else None) - - attached_devices = device_utils.DeviceUtils.HealthyDevices( - blacklist, enable_device_files_cache=enable_cache, - default_retries=num_retries) - if test_device: - test_device = [d for d in attached_devices if d == test_device] - if not test_device: - raise device_errors.DeviceUnreachableError( - 'Did not find device %s among attached device. Attached devices: %s' - % (test_device, ', '.join(attached_devices))) - return test_device - - else: - if not attached_devices: - raise device_errors.NoDevicesError() - return sorted(attached_devices) - - _DEFAULT_PLATFORM_MODE_TESTS = ['gtest', 'instrumentation', 'junit', 'linker', 'monkey', 'perf'] -def RunTestsCommand(args): # pylint: disable=too-many-return-statements +def RunTestsCommand(args): """Checks test type and dispatches to the appropriate function. Args: @@ -644,15 +653,6 @@ if args.enable_platform_mode or command in _DEFAULT_PLATFORM_MODE_TESTS: return RunTestsInPlatformMode(args) - forwarder.Forwarder.RemoveHostLog() - if not ports.ResetTestServerPortAllocation(): - raise Exception('Failed to reset test server port.') - - # pylint: disable=protected-access - if os.path.exists(ports._TEST_SERVER_PORT_LOCKFILE): - os.unlink(ports._TEST_SERVER_PORT_LOCKFILE) - # pylint: enable=protected-access - if command == 'python': return _RunPythonTests(args) else: @@ -798,34 +798,6 @@ else constants.ERROR_EXIT_CODE) -CommandConfigTuple = collections.namedtuple( - 'CommandConfigTuple', - ['add_options_func', 'help_txt']) -VALID_COMMANDS = { - 'gtest': CommandConfigTuple( - AddGTestOptions, - 'googletest-based C++ tests'), - 'instrumentation': CommandConfigTuple( - AddInstrumentationTestOptions, - 'InstrumentationTestCase-based Java tests'), - 'junit': CommandConfigTuple( - AddJUnitTestOptions, - 'JUnit4-based Java tests'), - 'monkey': CommandConfigTuple( - AddMonkeyTestOptions, - "Tests based on Android's monkey"), - 'perf': CommandConfigTuple( - AddPerfTestOptions, - 'Performance tests'), - 'python': CommandConfigTuple( - AddPythonTestOptions, - 'Python tests based on unittest.TestCase'), - 'linker': CommandConfigTuple( - AddLinkerTestOptions, - 'Linker tests'), -} - - def DumpThreadStacks(_signal, _frame): for thread in threading.enumerate(): reraiser_thread.LogThreadStack(thread) @@ -835,14 +807,58 @@ signal.signal(signal.SIGUSR1, DumpThreadStacks) parser = argparse.ArgumentParser() - command_parsers = parser.add_subparsers(title='test types', - dest='command') + command_parsers = parser.add_subparsers( + title='test types', dest='command') - for test_type, config in sorted(VALID_COMMANDS.iteritems(), - key=lambda x: x[0]): - subparser = command_parsers.add_parser( - test_type, usage='%(prog)s [options]', help=config.help_txt) - config.add_options_func(subparser) + subp = command_parsers.add_parser( + 'gtest', + help='googletest-based C++ tests') + AddCommonOptions(subp) + AddDeviceOptions(subp) + AddGTestOptions(subp) + AddTracingOptions(subp) + + subp = command_parsers.add_parser( + 'instrumentation', + help='InstrumentationTestCase-based Java tests') + AddCommonOptions(subp) + AddDeviceOptions(subp) + AddInstrumentationTestOptions(subp) + AddTracingOptions(subp) + + subp = command_parsers.add_parser( + 'junit', + help='JUnit4-based Java tests') + AddCommonOptions(subp) + AddJUnitTestOptions(subp) + + subp = command_parsers.add_parser( + 'linker', + help='linker tests') + AddCommonOptions(subp) + AddDeviceOptions(subp) + AddLinkerTestOptions(subp) + + subp = command_parsers.add_parser( + 'monkey', + help="tests based on Android's monkey command") + AddCommonOptions(subp) + AddDeviceOptions(subp) + AddMonkeyTestOptions(subp) + + subp = command_parsers.add_parser( + 'perf', + help='performance tests') + AddCommonOptions(subp) + AddDeviceOptions(subp) + AddPerfTestOptions(subp) + AddTracingOptions(subp) + + subp = command_parsers.add_parser( + 'python', + help='python tests based on unittest.TestCase') + AddCommonOptions(subp) + AddPythonTestOptions(subp) args = parser.parse_args()
diff --git a/build/config/BUILD.gn b/build/config/BUILD.gn index af99cf4..2e4cfd7f 100644 --- a/build/config/BUILD.gn +++ b/build/config/BUILD.gn
@@ -57,10 +57,6 @@ # TODO(brettw) should probably be "=1". defines += [ "USE_UDEV" ] } - if (ui_compositor_image_transport) { - # TODO(brettw) should probably be "=1". - defines += [ "UI_COMPOSITOR_IMAGE_TRANSPORT" ] - } if (use_ash) { defines += [ "USE_ASH=1" ] } @@ -140,9 +136,6 @@ if (enable_media_router) { defines += [ "ENABLE_MEDIA_ROUTER=1" ] } - if (enable_webvr) { - defines += [ "ENABLE_WEBVR" ] - } if (is_syzyasan) { defines += [ "SYZYASAN",
diff --git a/build/config/features.gni b/build/config/features.gni index 564b45a8..1287024 100644 --- a/build/config/features.gni +++ b/build/config/features.gni
@@ -70,19 +70,7 @@ # Whether or not to use external popup menu. use_external_popup_menu = is_android || is_mac - - # Enable WebVR support by default on Android - # Still requires command line flag to access API - # TODO(bshe): Enable for other architecture too. Currently we only support arm - # and arm64. - enable_webvr = is_android && (current_cpu == "arm" || current_cpu == "arm64") } - -# Additional dependent variables ----------------------------------------------- - -# Chrome OS: whether to also build the upcoming version of -# ChromeVox, which can then be enabled via a command-line switch. -enable_chromevox_next = false # # ============================================= # PLEASE DO NOT ADD MORE FLAGS TO THIS FILE
diff --git a/build/config/ui.gni b/build/config/ui.gni index 1904a2f60..aed71b47 100644 --- a/build/config/ui.gni +++ b/build/config/ui.gni
@@ -47,10 +47,6 @@ # # These variables depend on other variables and can't be set externally. -# Use GPU accelerated cross process image transport by default on linux builds -# with the Aura window manager. -ui_compositor_image_transport = use_aura && is_linux - # Indicates if the UI toolkit depends on X11. use_x11 = is_linux && !use_ozone
diff --git a/build/secondary/third_party/android_tools/BUILD.gn b/build/secondary/third_party/android_tools/BUILD.gn index cbd58b2cf..cf59b20 100644 --- a/build/secondary/third_party/android_tools/BUILD.gn +++ b/build/secondary/third_party/android_tools/BUILD.gn
@@ -50,6 +50,14 @@ aar_path = "$lib_path/$_lib_name/$lib_version/$_lib_name-$lib_version.aar" } +android_aar_prebuilt("android_support_transition_java") { + deps = [ + ":android_support_v7_appcompat_java", + ] + _lib_name = "transition" + aar_path = "$lib_path/$_lib_name/$lib_version/$_lib_name-$lib_version.aar" +} + android_aar_prebuilt("android_support_multidex_java") { # TODO(jbudorick): remove requires_android after crbug.com/522043 is fixed. requires_android = false
diff --git a/cc/BUILD.gn b/cc/BUILD.gn index f7991eee..7ca79c7 100644 --- a/cc/BUILD.gn +++ b/cc/BUILD.gn
@@ -44,8 +44,6 @@ "debug/rendering_stats_instrumentation.cc", "debug/rendering_stats_instrumentation.h", "debug/ring_buffer.h", - "debug/traced_display_item_list.cc", - "debug/traced_display_item_list.h", "debug/traced_value.cc", "debug/traced_value.h", "debug/unittest_only_benchmark.cc",
diff --git a/cc/blink/web_layer_impl.cc b/cc/blink/web_layer_impl.cc index 43d7caa..ff07c7c 100644 --- a/cc/blink/web_layer_impl.cc +++ b/cc/blink/web_layer_impl.cc
@@ -475,12 +475,4 @@ layer_->SetHasWillChangeTransformHint(has_will_change); } -void WebLayerImpl::setPreferredRasterBounds(const WebSize& bounds) { - layer_->SetPreferredRasterBounds(bounds); -} - -void WebLayerImpl::clearPreferredRasterBounds() { - layer_->ClearPreferredRasterBounds(); -} - } // namespace cc_blink
diff --git a/cc/blink/web_layer_impl.h b/cc/blink/web_layer_impl.h index 2401f1a..b0ef4f6 100644 --- a/cc/blink/web_layer_impl.h +++ b/cc/blink/web_layer_impl.h
@@ -126,8 +126,6 @@ void setCompositorMutableProperties(uint32_t properties) override; uint32_t compositorMutableProperties() const override; void setHasWillChangeTransformHint(bool has_will_change) override; - void setPreferredRasterBounds(const blink::WebSize&) override; - void clearPreferredRasterBounds() override; void setScrollParent(blink::WebLayer* parent) override; void setClipParent(blink::WebLayer* parent) override;
diff --git a/cc/debug/traced_display_item_list.cc b/cc/debug/traced_display_item_list.cc deleted file mode 100644 index b02446e9..0000000 --- a/cc/debug/traced_display_item_list.cc +++ /dev/null
@@ -1,27 +0,0 @@ -// Copyright 2015 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 "cc/debug/traced_display_item_list.h" - -#include "base/json/json_writer.h" -#include "cc/debug/traced_value.h" -#include "cc/playback/display_item_list.h" - -namespace cc { - -TracedDisplayItemList::TracedDisplayItemList( - scoped_refptr<const DisplayItemList> list, - bool include_items) - : display_item_list_(list), include_items_(include_items) { -} - -TracedDisplayItemList::~TracedDisplayItemList() { -} - -void TracedDisplayItemList::AppendAsTraceFormat(std::string* out) const { - std::unique_ptr<base::trace_event::ConvertableToTraceFormat> convertable( - display_item_list_->AsValue(include_items_)); - convertable->AppendAsTraceFormat(out); -} - -} // namespace cc
diff --git a/cc/debug/traced_display_item_list.h b/cc/debug/traced_display_item_list.h deleted file mode 100644 index 5073348..0000000 --- a/cc/debug/traced_display_item_list.h +++ /dev/null
@@ -1,44 +0,0 @@ -// Copyright 2015 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 CC_DEBUG_TRACED_DISPLAY_ITEM_LIST_H_ -#define CC_DEBUG_TRACED_DISPLAY_ITEM_LIST_H_ - -#include <memory> -#include <string> - -#include "base/macros.h" -#include "base/memory/ref_counted.h" -#include "base/trace_event/trace_event.h" -#include "cc/debug/traced_value.h" - -namespace cc { - -class DisplayItemList; - -class TracedDisplayItemList - : public base::trace_event::ConvertableToTraceFormat { - public: - static std::unique_ptr<ConvertableToTraceFormat> AsTraceableDisplayItemList( - scoped_refptr<const DisplayItemList> list, - bool include_items) { - return std::unique_ptr<ConvertableToTraceFormat>( - new TracedDisplayItemList(list, include_items)); - } - void AppendAsTraceFormat(std::string* out) const override; - - private: - explicit TracedDisplayItemList(scoped_refptr<const DisplayItemList> list, - bool include_items); - ~TracedDisplayItemList() override; - - scoped_refptr<const DisplayItemList> display_item_list_; - bool include_items_; - - DISALLOW_COPY_AND_ASSIGN(TracedDisplayItemList); -}; - -} // namespace cc - -#endif // CC_DEBUG_TRACED_DISPLAY_ITEM_LIST_H_
diff --git a/cc/input/scrollbar_animation_controller.cc b/cc/input/scrollbar_animation_controller.cc index da3ba8a..576ec2a 100644 --- a/cc/input/scrollbar_animation_controller.cc +++ b/cc/input/scrollbar_animation_controller.cc
@@ -170,7 +170,6 @@ void ScrollbarAnimationController::RunAnimationFrame(float progress) { ApplyOpacityToScrollbars(1.f - progress); - client_->SetNeedsRedrawForScrollbarAnimation(); if (progress == 1.f) StopAnimation(); } @@ -377,6 +376,9 @@ bool previouslyVisible = opacity_ > 0.0f; bool currentlyVisible = opacity > 0.0f; + if (opacity_ != opacity) + client_->SetNeedsRedrawForScrollbarAnimation(); + opacity_ = opacity; if (previouslyVisible != currentlyVisible)
diff --git a/cc/layers/layer.cc b/cc/layers/layer.cc index 04fa7f4..c966f75f 100644 --- a/cc/layers/layer.cc +++ b/cc/layers/layer.cc
@@ -62,7 +62,6 @@ scroll_parent(nullptr), clip_parent(nullptr), has_will_change_transform_hint(false), - has_preferred_raster_bounds(false), hide_layer_and_subtree(false), client(nullptr) {} @@ -1189,10 +1188,6 @@ layer->SetUpdateRect(inputs_.update_rect); layer->SetHasWillChangeTransformHint(has_will_change_transform_hint()); - if (has_preferred_raster_bounds()) - layer->SetPreferredRasterBounds(preferred_raster_bounds()); - else - layer->ClearPreferredRasterBounds(); layer->SetNeedsPushProperties(); // Reset any state that should be cleared for the next update. @@ -1426,24 +1421,6 @@ SetNeedsCommit(); } -void Layer::SetPreferredRasterBounds(const gfx::Size& preferred_raster_bounds) { - if (inputs_.has_preferred_raster_bounds && - inputs_.preferred_raster_bounds == preferred_raster_bounds) - return; - - inputs_.has_preferred_raster_bounds = true; - inputs_.preferred_raster_bounds = preferred_raster_bounds; - SetNeedsCommit(); -} - -void Layer::ClearPreferredRasterBounds() { - if (!inputs_.has_preferred_raster_bounds) - return; - inputs_.has_preferred_raster_bounds = false; - inputs_.preferred_raster_bounds = gfx::Size(); - SetNeedsCommit(); -} - MutatorHost* Layer::GetMutatorHost() const { return layer_tree_host_ ? layer_tree_host_->mutator_host() : nullptr; }
diff --git a/cc/layers/layer.h b/cc/layers/layer.h index c310377..d21cc8c 100644 --- a/cc/layers/layer.h +++ b/cc/layers/layer.h
@@ -424,20 +424,6 @@ return inputs_.has_will_change_transform_hint; } - // The preferred raster bounds are the ideal resolution at which to raster the - // contents of this Layer's bitmap. This may not be the same size as the Layer - // bounds, in cases where the contents have an "intrinsic" size that differs. - // Consider for example an image with a given intrinsic size that is being - // scaled into a Layer of a different size. - void SetPreferredRasterBounds(const gfx::Size& preferred_Raster_bounds); - bool has_preferred_raster_bounds() const { - return inputs_.has_preferred_raster_bounds; - } - const gfx::Size& preferred_raster_bounds() const { - return inputs_.preferred_raster_bounds; - } - void ClearPreferredRasterBounds(); - MutatorHost* GetMutatorHost() const; ElementListType GetElementTypeForAnimation() const; @@ -491,7 +477,6 @@ friend class base::RefCounted<Layer>; friend class LayerTreeHostCommon; friend class LayerTreeHost; - friend class LayerInternalsForTest; // Interactions with attached animations. gfx::ScrollOffset ScrollOffsetForAnimation() const; @@ -612,7 +597,6 @@ Layer* clip_parent; bool has_will_change_transform_hint : 1; - bool has_preferred_raster_bounds : 1; bool hide_layer_and_subtree : 1; @@ -620,8 +604,6 @@ LayerClient* client; base::Callback<void(const gfx::ScrollOffset&)> did_scroll_callback; std::vector<std::unique_ptr<CopyOutputRequest>> copy_requests; - - gfx::Size preferred_raster_bounds; }; Layer* parent_;
diff --git a/cc/layers/layer_impl.cc b/cc/layers/layer_impl.cc index 010df13..1a024ea4 100644 --- a/cc/layers/layer_impl.cc +++ b/cc/layers/layer_impl.cc
@@ -78,7 +78,6 @@ current_draw_mode_(DRAW_MODE_NONE), mutable_properties_(MutableProperty::kNone), debug_info_(nullptr), - has_preferred_raster_bounds_(false), has_will_change_transform_hint_(false), needs_push_properties_(false), scrollbars_hidden_(false) { @@ -107,16 +106,6 @@ has_will_change_transform_hint_ = has_will_change; } -void LayerImpl::SetPreferredRasterBounds( - const gfx::Size& preferred_raster_bounds) { - has_preferred_raster_bounds_ = true; - preferred_raster_bounds_ = preferred_raster_bounds; -} - -void LayerImpl::ClearPreferredRasterBounds() { - has_preferred_raster_bounds_ = false; - preferred_raster_bounds_ = gfx::Size(); -} MutatorHost* LayerImpl::GetMutatorHost() const { return layer_tree_impl_ ? layer_tree_impl_->mutator_host() : nullptr;
diff --git a/cc/layers/layer_impl.h b/cc/layers/layer_impl.h index fd7a692..d107566 100644 --- a/cc/layers/layer_impl.h +++ b/cc/layers/layer_impl.h
@@ -438,15 +438,6 @@ return has_will_change_transform_hint_; } - void SetPreferredRasterBounds(const gfx::Size& preferred_raster_bounds); - bool has_preferred_raster_bounds() const { - return has_preferred_raster_bounds_; - } - const gfx::Size& preferred_raster_scale() const { - return preferred_raster_bounds_; - } - void ClearPreferredRasterBounds(); - MutatorHost* GetMutatorHost() const; ElementListType GetElementTypeForAnimation() const; @@ -562,9 +553,7 @@ std::unique_ptr<base::trace_event::ConvertableToTraceFormat> owned_debug_info_; base::trace_event::ConvertableToTraceFormat* debug_info_; - gfx::Size preferred_raster_bounds_; - bool has_preferred_raster_bounds_ : 1; bool has_will_change_transform_hint_ : 1; bool needs_push_properties_ : 1; bool scrollbars_hidden_ : 1;
diff --git a/cc/output/overlay_candidate.cc b/cc/output/overlay_candidate.cc index e41b62b4..20d54b8 100644 --- a/cc/output/overlay_candidate.cc +++ b/cc/output/overlay_candidate.cc
@@ -173,7 +173,7 @@ OverlayCandidate::OverlayCandidate() : transform(gfx::OVERLAY_TRANSFORM_NONE), - format(RGBA_8888), + format(gfx::BufferFormat::RGBA_8888), uv_rect(0.f, 0.f, 1.f, 1.f), is_clipped(false), use_output_surface_for_resource(false), @@ -206,7 +206,6 @@ candidate->quad_rect_in_target_space = MathUtil::MapEnclosingClippedRect(transform, quad->rect); - candidate->format = RGBA_8888; candidate->clip_rect = quad->shared_quad_state->clip_rect; candidate->is_clipped = quad->shared_quad_state->is_clipped; @@ -262,11 +261,9 @@ OverlayCandidate* candidate) { if (!resource_provider->IsOverlayCandidate(quad->resource_id())) return false; - - gfx::BufferFormat format = - resource_provider->GetBufferFormat(quad->resource_id()); + candidate->format = resource_provider->GetBufferFormat(quad->resource_id()); if (std::find(std::begin(kOverlayFormats), std::end(kOverlayFormats), - format) == std::end(kOverlayFormats)) + candidate->format) == std::end(kOverlayFormats)) return false; gfx::OverlayTransform overlay_transform = GetOverlayTransform( quad->shared_quad_state->quad_to_target_transform, quad->y_flipped);
diff --git a/cc/output/overlay_candidate.h b/cc/output/overlay_candidate.h index e35299ded..8a6806e 100644 --- a/cc/output/overlay_candidate.h +++ b/cc/output/overlay_candidate.h
@@ -11,7 +11,7 @@ #include "cc/base/cc_export.h" #include "cc/base/resource_id.h" #include "cc/quads/render_pass.h" -#include "cc/resources/resource_format.h" +#include "ui/gfx/buffer_types.h" #include "ui/gfx/geometry/rect.h" #include "ui/gfx/geometry/rect_f.h" #include "ui/gfx/geometry/size.h" @@ -52,8 +52,8 @@ // Transformation to apply to layer during composition. gfx::OverlayTransform transform; - // Format of the buffer to composite. - ResourceFormat format; + // Format of the buffer to scanout. + gfx::BufferFormat format; // Size of the resource, in pixels. gfx::Size resource_size_in_pixels; // Rect on the display to position the overlay to. Implementer must convert
diff --git a/cc/playback/clip_display_item.cc b/cc/playback/clip_display_item.cc index 4b4f0df..8e9a9cf 100644 --- a/cc/playback/clip_display_item.cc +++ b/cc/playback/clip_display_item.cc
@@ -47,34 +47,6 @@ } } -void ClipDisplayItem::AsValueInto(const gfx::Rect& visual_rect, - base::trace_event::TracedValue* array) const { - std::string value = base::StringPrintf( - "ClipDisplayItem rect: [%s] visualRect: [%s]", - clip_rect_.ToString().c_str(), visual_rect.ToString().c_str()); - for (const SkRRect& rounded_rect : rounded_clip_rects_) { - base::StringAppendF( - &value, " rounded_rect: [rect: [%s]", - gfx::SkRectToRectF(rounded_rect.rect()).ToString().c_str()); - base::StringAppendF(&value, " radii: ["); - SkVector upper_left_radius = rounded_rect.radii(SkRRect::kUpperLeft_Corner); - base::StringAppendF(&value, "[%f,%f],", upper_left_radius.x(), - upper_left_radius.y()); - SkVector upper_right_radius = - rounded_rect.radii(SkRRect::kUpperRight_Corner); - base::StringAppendF(&value, " [%f,%f],", upper_right_radius.x(), - upper_right_radius.y()); - SkVector lower_right_radius = - rounded_rect.radii(SkRRect::kLowerRight_Corner); - base::StringAppendF(&value, " [%f,%f],", lower_right_radius.x(), - lower_right_radius.y()); - SkVector lower_left_radius = rounded_rect.radii(SkRRect::kLowerLeft_Corner); - base::StringAppendF(&value, " [%f,%f]]", lower_left_radius.x(), - lower_left_radius.y()); - } - array->AppendString(value); -} - EndClipDisplayItem::EndClipDisplayItem() : DisplayItem(END_CLIP) {} EndClipDisplayItem::~EndClipDisplayItem() { @@ -85,11 +57,4 @@ canvas->restore(); } -void EndClipDisplayItem::AsValueInto( - const gfx::Rect& visual_rect, - base::trace_event::TracedValue* array) const { - array->AppendString(base::StringPrintf("EndClipDisplayItem visualRect: [%s]", - visual_rect.ToString().c_str())); -} - } // namespace cc
diff --git a/cc/playback/clip_display_item.h b/cc/playback/clip_display_item.h index 8ab86ae..5830f96a 100644 --- a/cc/playback/clip_display_item.h +++ b/cc/playback/clip_display_item.h
@@ -28,14 +28,17 @@ void Raster(SkCanvas* canvas, SkPicture::AbortCallback* callback) const override; - void AsValueInto(const gfx::Rect& visual_rect, - base::trace_event::TracedValue* array) const override; size_t ExternalMemoryUsage() const { return rounded_clip_rects_.capacity() * sizeof(rounded_clip_rects_[0]); } int ApproximateOpCount() const { return 1; } + const gfx::Rect& clip_rect() const { return clip_rect_; } + const std::vector<SkRRect>& rounded_clip_rects() const { + return rounded_clip_rects_; + } + private: void SetNew(const gfx::Rect& clip_rect, const std::vector<SkRRect>& rounded_clip_rects, @@ -53,8 +56,6 @@ void Raster(SkCanvas* canvas, SkPicture::AbortCallback* callback) const override; - void AsValueInto(const gfx::Rect& visual_rect, - base::trace_event::TracedValue* array) const override; int ApproximateOpCount() const { return 0; } };
diff --git a/cc/playback/clip_path_display_item.cc b/cc/playback/clip_path_display_item.cc index c7bbcce..8f87c8c 100644 --- a/cc/playback/clip_path_display_item.cc +++ b/cc/playback/clip_path_display_item.cc
@@ -34,14 +34,6 @@ canvas->clipPath(clip_path_, antialias_); } -void ClipPathDisplayItem::AsValueInto( - const gfx::Rect& visual_rect, - base::trace_event::TracedValue* array) const { - array->AppendString(base::StringPrintf( - "ClipPathDisplayItem length: %d visualRect: [%s]", - clip_path_.countPoints(), visual_rect.ToString().c_str())); -} - EndClipPathDisplayItem::EndClipPathDisplayItem() : DisplayItem(END_CLIP_PATH) {} EndClipPathDisplayItem::~EndClipPathDisplayItem() { @@ -53,12 +45,4 @@ canvas->restore(); } -void EndClipPathDisplayItem::AsValueInto( - const gfx::Rect& visual_rect, - base::trace_event::TracedValue* array) const { - array->AppendString( - base::StringPrintf("EndClipPathDisplayItem visualRect: [%s]", - visual_rect.ToString().c_str())); -} - } // namespace cc
diff --git a/cc/playback/clip_path_display_item.h b/cc/playback/clip_path_display_item.h index f736b02..3cb6dc8 100644 --- a/cc/playback/clip_path_display_item.h +++ b/cc/playback/clip_path_display_item.h
@@ -25,8 +25,6 @@ void Raster(SkCanvas* canvas, SkPicture::AbortCallback* callback) const override; - void AsValueInto(const gfx::Rect& visual_rect, - base::trace_event::TracedValue* array) const override; size_t ExternalMemoryUsage() const { // The size of SkPath's external storage is not currently accounted for (and @@ -35,6 +33,8 @@ } int ApproximateOpCount() const { return 1; } + const SkPath& clip_path() const { return clip_path_; } + private: void SetNew(const SkPath& path, bool antialias); @@ -53,8 +53,6 @@ void Raster(SkCanvas* canvas, SkPicture::AbortCallback* callback) const override; - void AsValueInto(const gfx::Rect& visual_rect, - base::trace_event::TracedValue* array) const override; int ApproximateOpCount() const { return 0; } };
diff --git a/cc/playback/compositing_display_item.cc b/cc/playback/compositing_display_item.cc index 628ab56..77635bf 100644 --- a/cc/playback/compositing_display_item.cc +++ b/cc/playback/compositing_display_item.cc
@@ -61,21 +61,6 @@ canvas->saveLayerPreserveLCDTextRequests(bounds, &paint); } -void CompositingDisplayItem::AsValueInto( - const gfx::Rect& visual_rect, - base::trace_event::TracedValue* array) const { - std::string info = base::StringPrintf( - "CompositingDisplayItem alpha: %d, xfermode: %d, visualRect: [%s]", - alpha_, static_cast<int>(xfermode_), visual_rect.ToString().c_str()); - if (has_bounds_) { - base::StringAppendF( - &info, ", bounds: [%f, %f, %f, %f]", static_cast<float>(bounds_.x()), - static_cast<float>(bounds_.y()), static_cast<float>(bounds_.width()), - static_cast<float>(bounds_.height())); - } - array->AppendString(info); -} - EndCompositingDisplayItem::EndCompositingDisplayItem() : DisplayItem(END_COMPOSITING) {} @@ -88,12 +73,4 @@ canvas->restore(); } -void EndCompositingDisplayItem::AsValueInto( - const gfx::Rect& visual_rect, - base::trace_event::TracedValue* array) const { - array->AppendString( - base::StringPrintf("EndCompositingDisplayItem visualRect: [%s]", - visual_rect.ToString().c_str())); -} - } // namespace cc
diff --git a/cc/playback/compositing_display_item.h b/cc/playback/compositing_display_item.h index d562e5e..9555973 100644 --- a/cc/playback/compositing_display_item.h +++ b/cc/playback/compositing_display_item.h
@@ -33,8 +33,6 @@ void Raster(SkCanvas* canvas, SkPicture::AbortCallback* callback) const override; - void AsValueInto(const gfx::Rect& visual_rect, - base::trace_event::TracedValue* array) const override; size_t ExternalMemoryUsage() const { // TODO(pdr): Include color_filter's memory here. @@ -42,6 +40,11 @@ } int ApproximateOpCount() const { return 1; } + uint8_t alpha() const { return alpha_; } + SkBlendMode xfermode() const { return xfermode_; } + bool has_bounds() const { return has_bounds_; } + const SkRect& bounds() const { return bounds_; } + private: void SetNew(uint8_t alpha, SkBlendMode xfermode, @@ -68,8 +71,6 @@ void Raster(SkCanvas* canvas, SkPicture::AbortCallback* callback) const override; - void AsValueInto(const gfx::Rect& visual_rect, - base::trace_event::TracedValue* array) const override; int ApproximateOpCount() const { return 0; } };
diff --git a/cc/playback/discardable_image_map.cc b/cc/playback/discardable_image_map.cc index 7e1abd6..cf424fe 100644 --- a/cc/playback/discardable_image_map.cc +++ b/cc/playback/discardable_image_map.cc
@@ -140,7 +140,7 @@ } SaveLayerStrategy getSaveLayerStrategy(const SaveLayerRec& rec) override { - saved_paints_.push_back(*rec.fPaint); + saved_paints_.push_back(rec.fPaint ? *rec.fPaint : SkPaint()); return SkNWayCanvas::getSaveLayerStrategy(rec); }
diff --git a/cc/playback/discardable_image_map_unittest.cc b/cc/playback/discardable_image_map_unittest.cc index b0e71fc..ff8441e 100644 --- a/cc/playback/discardable_image_map_unittest.cc +++ b/cc/playback/discardable_image_map_unittest.cc
@@ -379,6 +379,29 @@ EXPECT_TRUE(images[0].image == discardable_image); } +TEST_F(DiscardableImageMapTest, NullPaintOnSaveLayer) { + gfx::Rect visible_rect(2048, 2048); + FakeContentLayerClient content_layer_client; + content_layer_client.set_bounds(visible_rect.size()); + + sk_sp<SkImage> discardable_image = CreateDiscardableImage(gfx::Size(10, 10)); + + DiscardableImageMap image_map; + { + DiscardableImageMap::ScopedMetadataGenerator generator(&image_map, + visible_rect.size()); + SkPaint* null_paint = nullptr; + generator.canvas()->saveLayer(gfx::RectToSkRect(visible_rect), null_paint); + generator.canvas()->drawImage(discardable_image, 0, 0, nullptr); + generator.canvas()->restore(); + } + + std::vector<PositionScaleDrawImage> images = + GetDiscardableImagesInRect(image_map, gfx::Rect(0, 0, 1, 1)); + EXPECT_EQ(1u, images.size()); + EXPECT_TRUE(images[0].image == discardable_image); +} + TEST_F(DiscardableImageMapTest, GetDiscardableImagesInRectMaxImage) { gfx::Rect visible_rect(2048, 2048); FakeContentLayerClient content_layer_client;
diff --git a/cc/playback/display_item.h b/cc/playback/display_item.h index 5065a4ee..09899a8 100644 --- a/cc/playback/display_item.h +++ b/cc/playback/display_item.h
@@ -40,8 +40,6 @@ virtual void Raster(SkCanvas* canvas, SkPicture::AbortCallback* callback) const = 0; - virtual void AsValueInto(const gfx::Rect& visual_rect, - base::trace_event::TracedValue* array) const = 0; Type type() const { return type_; }
diff --git a/cc/playback/display_item_list.cc b/cc/playback/display_item_list.cc index 779fc81..3229b830 100644 --- a/cc/playback/display_item_list.cc +++ b/cc/playback/display_item_list.cc
@@ -14,8 +14,6 @@ #include "base/trace_event/trace_event_argument.h" #include "cc/base/math_util.h" #include "cc/debug/picture_debug_util.h" -#include "cc/debug/traced_display_item_list.h" -#include "cc/debug/traced_value.h" #include "cc/playback/clip_display_item.h" #include "cc/playback/clip_path_display_item.h" #include "cc/playback/compositing_display_item.h" @@ -38,13 +36,6 @@ // operations. const int kOpCountThatIsOkToAnalyze = 10; -bool DisplayItemsTracingEnabled() { - bool tracing_enabled; - TRACE_EVENT_CATEGORY_GROUP_ENABLED( - TRACE_DISABLED_BY_DEFAULT("cc.debug.display_items"), &tracing_enabled); - return tracing_enabled; -} - bool GetCanvasClipBounds(SkCanvas* canvas, gfx::Rect* clip_bounds) { SkRect canvas_clip_bounds; if (!canvas->getLocalClipBounds(&canvas_clip_bounds)) @@ -194,50 +185,193 @@ return ApproximateOpCount() <= kOpCountThatIsOkToAnalyze; } -std::unique_ptr<base::trace_event::ConvertableToTraceFormat> -DisplayItemList::AsValue(bool include_items) const { - std::unique_ptr<base::trace_event::TracedValue> state( - new base::trace_event::TracedValue()); - - state->BeginDictionary("params"); - if (include_items) { - state->BeginArray("items"); - size_t item_index = 0; - for (const DisplayItem& item : inputs_.items) { - item.AsValueInto(item_index < inputs_.visual_rects.size() - ? inputs_.visual_rects[item_index] - : gfx::Rect(), - state.get()); - item_index++; - } - state->EndArray(); // "items". - } - MathUtil::AddToTracedValue("layer_rect", rtree_.GetBounds(), state.get()); - state->EndDictionary(); // "params". - - SkPictureRecorder recorder; - gfx::Rect bounds = rtree_.GetBounds(); - SkCanvas* canvas = recorder.beginRecording(bounds.width(), bounds.height()); - canvas->translate(-bounds.x(), -bounds.y()); - canvas->clipRect(gfx::RectToSkRect(bounds)); - Raster(canvas, nullptr, gfx::Rect(), 1.f); - sk_sp<SkPicture> picture = recorder.finishRecordingAsPicture(); - - std::string b64_picture; - PictureDebugUtil::SerializeAsBase64(picture.get(), &b64_picture); - state->SetString("skp64", b64_picture); - - return std::move(state); -} - void DisplayItemList::EmitTraceSnapshot() const { + bool include_items; + TRACE_EVENT_CATEGORY_GROUP_ENABLED( + TRACE_DISABLED_BY_DEFAULT("cc.debug.display_items"), &include_items); TRACE_EVENT_OBJECT_SNAPSHOT_WITH_ID( TRACE_DISABLED_BY_DEFAULT("cc.debug.display_items") "," TRACE_DISABLED_BY_DEFAULT("cc.debug.picture") "," TRACE_DISABLED_BY_DEFAULT("devtools.timeline.picture"), - "cc::DisplayItemList", this, - TracedDisplayItemList::AsTraceableDisplayItemList(this, - DisplayItemsTracingEnabled())); + "cc::DisplayItemList", this, CreateTracedValue(include_items)); +} + +std::unique_ptr<base::trace_event::TracedValue> +DisplayItemList::CreateTracedValue(bool include_items) const { + auto state = base::MakeUnique<base::trace_event::TracedValue>(); + state->BeginDictionary("params"); + + if (include_items) { + state->BeginArray("items"); + + auto visual_rects_it = inputs_.visual_rects.begin(); + for (const DisplayItem& base_item : inputs_.items) { + gfx::Rect visual_rect; + if (visual_rects_it != inputs_.visual_rects.end()) { + visual_rect = *visual_rects_it; + ++visual_rects_it; + } + + switch (base_item.type()) { + case DisplayItem::CLIP: { + const auto& item = static_cast<const ClipDisplayItem&>(base_item); + std::string output = + base::StringPrintf("ClipDisplayItem rect: [%s] visualRect: [%s]", + item.clip_rect().ToString().c_str(), + visual_rect.ToString().c_str()); + for (const SkRRect& rounded_rect : item.rounded_clip_rects()) { + base::StringAppendF( + &output, " rounded_rect: [rect: [%s]", + gfx::SkRectToRectF(rounded_rect.rect()).ToString().c_str()); + base::StringAppendF(&output, " radii: ["); + SkVector upper_left_radius = + rounded_rect.radii(SkRRect::kUpperLeft_Corner); + base::StringAppendF(&output, "[%f,%f],", upper_left_radius.x(), + upper_left_radius.y()); + SkVector upper_right_radius = + rounded_rect.radii(SkRRect::kUpperRight_Corner); + base::StringAppendF(&output, " [%f,%f],", upper_right_radius.x(), + upper_right_radius.y()); + SkVector lower_right_radius = + rounded_rect.radii(SkRRect::kLowerRight_Corner); + base::StringAppendF(&output, " [%f,%f],", lower_right_radius.x(), + lower_right_radius.y()); + SkVector lower_left_radius = + rounded_rect.radii(SkRRect::kLowerLeft_Corner); + base::StringAppendF(&output, " [%f,%f]]", lower_left_radius.x(), + lower_left_radius.y()); + } + state->AppendString(output); + break; + } + case DisplayItem::END_CLIP: + state->AppendString( + base::StringPrintf("EndClipDisplayItem visualRect: [%s]", + visual_rect.ToString().c_str())); + break; + case DisplayItem::CLIP_PATH: { + const auto& item = static_cast<const ClipPathDisplayItem&>(base_item); + state->AppendString(base::StringPrintf( + "ClipPathDisplayItem length: %d visualRect: [%s]", + item.clip_path().countPoints(), visual_rect.ToString().c_str())); + break; + } + case DisplayItem::END_CLIP_PATH: + state->AppendString( + base::StringPrintf("EndClipPathDisplayItem visualRect: [%s]", + visual_rect.ToString().c_str())); + break; + case DisplayItem::COMPOSITING: { + const auto& item = + static_cast<const CompositingDisplayItem&>(base_item); + std::string output = base::StringPrintf( + "CompositingDisplayItem alpha: %d, xfermode: %d, visualRect: " + "[%s]", + item.alpha(), static_cast<int>(item.xfermode()), + visual_rect.ToString().c_str()); + if (item.has_bounds()) { + base::StringAppendF( + &output, ", bounds: [%s]", + gfx::SkRectToRectF(item.bounds()).ToString().c_str()); + } + state->AppendString(output); + break; + } + case DisplayItem::END_COMPOSITING: + state->AppendString( + base::StringPrintf("EndCompositingDisplayItem visualRect: [%s]", + visual_rect.ToString().c_str())); + break; + case DisplayItem::DRAWING: { + const auto& item = static_cast<const DrawingDisplayItem&>(base_item); + state->BeginDictionary(); + state->SetString("name", "DrawingDisplayItem"); + + state->BeginArray("visualRect"); + state->AppendInteger(visual_rect.x()); + state->AppendInteger(visual_rect.y()); + state->AppendInteger(visual_rect.width()); + state->AppendInteger(visual_rect.height()); + state->EndArray(); + + state->BeginArray("cullRect"); + state->AppendInteger(item.picture().cullRect().x()); + state->AppendInteger(item.picture().cullRect().y()); + state->AppendInteger(item.picture().cullRect().width()); + state->AppendInteger(item.picture().cullRect().height()); + state->EndArray(); + + std::string b64_picture; + PictureDebugUtil::SerializeAsBase64(ToSkPicture(&item.picture()), + &b64_picture); + state->SetString("skp64", b64_picture); + state->EndDictionary(); + break; + } + case DisplayItem::FILTER: { + const auto& item = static_cast<const FilterDisplayItem&>(base_item); + state->AppendString(base::StringPrintf( + "FilterDisplayItem bounds: [%s] visualRect: [%s]", + item.bounds().ToString().c_str(), + visual_rect.ToString().c_str())); + break; + } + case DisplayItem::END_FILTER: + state->AppendString( + base::StringPrintf("EndFilterDisplayItem visualRect: [%s]", + visual_rect.ToString().c_str())); + break; + case DisplayItem::FLOAT_CLIP: { + const auto& item = + static_cast<const FloatClipDisplayItem&>(base_item); + state->AppendString(base::StringPrintf( + "FloatClipDisplayItem rect: [%s] visualRect: [%s]", + item.clip_rect().ToString().c_str(), + visual_rect.ToString().c_str())); + break; + } + case DisplayItem::END_FLOAT_CLIP: + state->AppendString( + base::StringPrintf("EndFloatClipDisplayItem visualRect: [%s]", + visual_rect.ToString().c_str())); + break; + case DisplayItem::TRANSFORM: { + const auto& item = + static_cast<const TransformDisplayItem&>(base_item); + state->AppendString(base::StringPrintf( + "TransformDisplayItem transform: [%s] visualRect: [%s]", + item.transform().ToString().c_str(), + visual_rect.ToString().c_str())); + break; + } + case DisplayItem::END_TRANSFORM: + state->AppendString( + base::StringPrintf("EndTransformDisplayItem visualRect: [%s]", + visual_rect.ToString().c_str())); + break; + } + } + state->EndArray(); // "items". + } + + MathUtil::AddToTracedValue("layer_rect", rtree_.GetBounds(), state.get()); + state->EndDictionary(); // "params". + + { + SkPictureRecorder recorder; + gfx::Rect bounds = rtree_.GetBounds(); + SkCanvas* canvas = recorder.beginRecording(bounds.width(), bounds.height()); + canvas->translate(-bounds.x(), -bounds.y()); + canvas->clipRect(gfx::RectToSkRect(bounds)); + Raster(canvas, nullptr, gfx::Rect(), 1.f); + sk_sp<SkPicture> picture = recorder.finishRecordingAsPicture(); + + std::string b64_picture; + PictureDebugUtil::SerializeAsBase64(picture.get(), &b64_picture); + state->SetString("skp64", b64_picture); + } + + return state; } void DisplayItemList::GenerateDiscardableImagesMetadata() {
diff --git a/cc/playback/display_item_list.h b/cc/playback/display_item_list.h index 5e1ea3d..165f89c3 100644 --- a/cc/playback/display_item_list.h +++ b/cc/playback/display_item_list.h
@@ -27,6 +27,12 @@ class SkCanvas; +namespace base { +namespace trace_event { +class TracedValue; +} +} + namespace cc { class DisplayItem; @@ -130,9 +136,6 @@ size_t ApproximateMemoryUsage() const; bool ShouldBeAnalyzedForSolidColor() const; - std::unique_ptr<base::trace_event::ConvertableToTraceFormat> AsValue( - bool include_items) const; - void EmitTraceSnapshot() const; void GenerateDiscardableImagesMetadata(); @@ -160,8 +163,14 @@ } private: + FRIEND_TEST_ALL_PREFIXES(DisplayItemListTest, AsValueWithNoItems); + FRIEND_TEST_ALL_PREFIXES(DisplayItemListTest, AsValueWithItems); + ~DisplayItemList(); + std::unique_ptr<base::trace_event::TracedValue> CreateTracedValue( + bool include_items) const; + RTree rtree_; // For testing purposes only. Whether to keep visual rects across calls to // Finalize().
diff --git a/cc/playback/display_item_list_unittest.cc b/cc/playback/display_item_list_unittest.cc index 426371e..46e8800 100644 --- a/cc/playback/display_item_list_unittest.cc +++ b/cc/playback/display_item_list_unittest.cc
@@ -9,6 +9,7 @@ #include <vector> #include "base/memory/ptr_util.h" +#include "base/trace_event/trace_event_argument.h" #include "cc/output/filter_operation.h" #include "cc/output/filter_operations.h" #include "cc/paint/paint_canvas.h" @@ -317,13 +318,13 @@ list->SetRetainVisualRectsForTesting(true); list->Finalize(); - std::string value = list->AsValue(true)->ToString(); + std::string value = list->CreateTracedValue(true)->ToString(); EXPECT_EQ(value.find("\"layer_rect\": [0,0,0,0]"), std::string::npos); EXPECT_NE(value.find("\"items\":[]"), std::string::npos); EXPECT_EQ(value.find("visualRect: [0,0 42x42]"), std::string::npos); EXPECT_NE(value.find("\"skp64\":"), std::string::npos); - value = list->AsValue(false)->ToString(); + value = list->CreateTracedValue(false)->ToString(); EXPECT_EQ(value.find("\"layer_rect\": [0,0,0,0]"), std::string::npos); EXPECT_EQ(value.find("\"items\":"), std::string::npos); EXPECT_EQ(value.find("visualRect: [0,0 42x42]"), std::string::npos); @@ -341,14 +342,14 @@ list->CreateAndAppendPairedEndItem<EndTransformDisplayItem>(); list->Finalize(); - std::string value = list->AsValue(true)->ToString(); + std::string value = list->CreateTracedValue(true)->ToString(); EXPECT_EQ(value.find("\"layer_rect\": [0,0,42,42]"), std::string::npos); EXPECT_NE(value.find("{\"items\":[\"TransformDisplayItem"), std::string::npos); EXPECT_NE(value.find("visualRect: [0,0 42x42]"), std::string::npos); EXPECT_NE(value.find("\"skp64\":"), std::string::npos); - value = list->AsValue(false)->ToString(); + value = list->CreateTracedValue(false)->ToString(); EXPECT_EQ(value.find("\"layer_rect\": [0,0,42,42]"), std::string::npos); EXPECT_EQ(value.find("{\"items\":[\"TransformDisplayItem"), std::string::npos);
diff --git a/cc/playback/drawing_display_item.cc b/cc/playback/drawing_display_item.cc index bf26d21..a6d2274 100644 --- a/cc/playback/drawing_display_item.cc +++ b/cc/playback/drawing_display_item.cc
@@ -53,33 +53,6 @@ } } -void DrawingDisplayItem::AsValueInto( - const gfx::Rect& visual_rect, - base::trace_event::TracedValue* array) const { - array->BeginDictionary(); - array->SetString("name", "DrawingDisplayItem"); - - array->BeginArray("visualRect"); - array->AppendInteger(visual_rect.x()); - array->AppendInteger(visual_rect.y()); - array->AppendInteger(visual_rect.width()); - array->AppendInteger(visual_rect.height()); - array->EndArray(); - - array->BeginArray("cullRect"); - array->AppendInteger(picture_->cullRect().x()); - array->AppendInteger(picture_->cullRect().y()); - array->AppendInteger(picture_->cullRect().width()); - array->AppendInteger(picture_->cullRect().height()); - array->EndArray(); - - std::string b64_picture; - PictureDebugUtil::SerializeAsBase64(ToSkPicture(picture_.get()), - &b64_picture); - array->SetString("skp64", b64_picture); - array->EndDictionary(); -} - void DrawingDisplayItem::CloneTo(DrawingDisplayItem* item) const { item->SetNew(picture_); }
diff --git a/cc/playback/drawing_display_item.h b/cc/playback/drawing_display_item.h index ef5f4d57..bd14b8f 100644 --- a/cc/playback/drawing_display_item.h +++ b/cc/playback/drawing_display_item.h
@@ -29,14 +29,14 @@ void Raster(SkCanvas* canvas, SkPicture::AbortCallback* callback) const override; - void AsValueInto(const gfx::Rect& visual_rect, - base::trace_event::TracedValue* array) const override; size_t ExternalMemoryUsage() const; int ApproximateOpCount() const; void CloneTo(DrawingDisplayItem* item) const; + const PaintRecord& picture() const { return *picture_; } + private: void SetNew(sk_sp<const PaintRecord> record);
diff --git a/cc/playback/filter_display_item.cc b/cc/playback/filter_display_item.cc index 3e9d9f1..8bf8e6a 100644 --- a/cc/playback/filter_display_item.cc +++ b/cc/playback/filter_display_item.cc
@@ -52,14 +52,6 @@ canvas->translate(-origin_.x(), -origin_.y()); } -void FilterDisplayItem::AsValueInto( - const gfx::Rect& visual_rect, - base::trace_event::TracedValue* array) const { - array->AppendString(base::StringPrintf( - "FilterDisplayItem bounds: [%s] visualRect: [%s]", - bounds_.ToString().c_str(), visual_rect.ToString().c_str())); -} - EndFilterDisplayItem::EndFilterDisplayItem() : DisplayItem(END_FILTER) {} EndFilterDisplayItem::~EndFilterDisplayItem() {} @@ -70,12 +62,4 @@ canvas->restore(); } -void EndFilterDisplayItem::AsValueInto( - const gfx::Rect& visual_rect, - base::trace_event::TracedValue* array) const { - array->AppendString( - base::StringPrintf("EndFilterDisplayItem visualRect: [%s]", - visual_rect.ToString().c_str())); -} - } // namespace cc
diff --git a/cc/playback/filter_display_item.h b/cc/playback/filter_display_item.h index 6cc77a0..054fed5 100644 --- a/cc/playback/filter_display_item.h +++ b/cc/playback/filter_display_item.h
@@ -28,8 +28,6 @@ void Raster(SkCanvas* canvas, SkPicture::AbortCallback* callback) const override; - void AsValueInto(const gfx::Rect& visual_rect, - base::trace_event::TracedValue* array) const override; size_t ExternalMemoryUsage() const { // FilterOperations doesn't expose its capacity, but size is probably good @@ -38,6 +36,8 @@ } int ApproximateOpCount() const { return 1; } + const gfx::RectF& bounds() const { return bounds_; } + private: void SetNew(const FilterOperations& filters, const gfx::RectF& bounds, @@ -59,8 +59,6 @@ void Raster(SkCanvas* canvas, SkPicture::AbortCallback* callback) const override; - void AsValueInto(const gfx::Rect& visual_rect, - base::trace_event::TracedValue* array) const override; int ApproximateOpCount() const { return 0; } };
diff --git a/cc/playback/float_clip_display_item.cc b/cc/playback/float_clip_display_item.cc index 648bb0a..39ae923 100644 --- a/cc/playback/float_clip_display_item.cc +++ b/cc/playback/float_clip_display_item.cc
@@ -31,14 +31,6 @@ canvas->clipRect(gfx::RectFToSkRect(clip_rect_)); } -void FloatClipDisplayItem::AsValueInto( - const gfx::Rect& visual_rect, - base::trace_event::TracedValue* array) const { - array->AppendString(base::StringPrintf( - "FloatClipDisplayItem rect: [%s] visualRect: [%s]", - clip_rect_.ToString().c_str(), visual_rect.ToString().c_str())); -} - EndFloatClipDisplayItem::EndFloatClipDisplayItem() : DisplayItem(END_FLOAT_CLIP) {} @@ -51,12 +43,4 @@ canvas->restore(); } -void EndFloatClipDisplayItem::AsValueInto( - const gfx::Rect& visual_rect, - base::trace_event::TracedValue* array) const { - array->AppendString( - base::StringPrintf("EndFloatClipDisplayItem visualRect: [%s]", - visual_rect.ToString().c_str())); -} - } // namespace cc
diff --git a/cc/playback/float_clip_display_item.h b/cc/playback/float_clip_display_item.h index 6233d3c..1f68cef3 100644 --- a/cc/playback/float_clip_display_item.h +++ b/cc/playback/float_clip_display_item.h
@@ -26,12 +26,12 @@ void Raster(SkCanvas* canvas, SkPicture::AbortCallback* callback) const override; - void AsValueInto(const gfx::Rect& visual_rect, - base::trace_event::TracedValue* array) const override; size_t ExternalMemoryUsage() const { return 0; } int ApproximateOpCount() const { return 1; } + const gfx::RectF& clip_rect() const { return clip_rect_; } + private: void SetNew(const gfx::RectF& clip_rect); @@ -49,8 +49,6 @@ void Raster(SkCanvas* canvas, SkPicture::AbortCallback* callback) const override; - void AsValueInto(const gfx::Rect& visual_rect, - base::trace_event::TracedValue* array) const override; int ApproximateOpCount() const { return 0; } };
diff --git a/cc/playback/raster_source.cc b/cc/playback/raster_source.cc index e53daf1..e15a919 100644 --- a/cc/playback/raster_source.cc +++ b/cc/playback/raster_source.cc
@@ -10,6 +10,7 @@ #include "cc/base/math_util.h" #include "cc/base/region.h" #include "cc/debug/debug_colors.h" +#include "cc/debug/traced_value.h" #include "cc/playback/display_item_list.h" #include "cc/playback/image_hijack_canvas.h" #include "cc/playback/skip_image_canvas.h"
diff --git a/cc/playback/transform_display_item.cc b/cc/playback/transform_display_item.cc index 173170f..1ffe66a 100644 --- a/cc/playback/transform_display_item.cc +++ b/cc/playback/transform_display_item.cc
@@ -31,14 +31,6 @@ canvas->concat(transform_.matrix()); } -void TransformDisplayItem::AsValueInto( - const gfx::Rect& visual_rect, - base::trace_event::TracedValue* array) const { - array->AppendString(base::StringPrintf( - "TransformDisplayItem transform: [%s] visualRect: [%s]", - transform_.ToString().c_str(), visual_rect.ToString().c_str())); -} - EndTransformDisplayItem::EndTransformDisplayItem() : DisplayItem(END_TRANSFORM) {} @@ -51,12 +43,4 @@ canvas->restore(); } -void EndTransformDisplayItem::AsValueInto( - const gfx::Rect& visual_rect, - base::trace_event::TracedValue* array) const { - array->AppendString( - base::StringPrintf("EndTransformDisplayItem visualRect: [%s]", - visual_rect.ToString().c_str())); -} - } // namespace cc
diff --git a/cc/playback/transform_display_item.h b/cc/playback/transform_display_item.h index 75ef6da..25eb755 100644 --- a/cc/playback/transform_display_item.h +++ b/cc/playback/transform_display_item.h
@@ -25,12 +25,12 @@ void Raster(SkCanvas* canvas, SkPicture::AbortCallback* callback) const override; - void AsValueInto(const gfx::Rect& visual_rect, - base::trace_event::TracedValue* array) const override; size_t ExternalMemoryUsage() const { return 0; } int ApproximateOpCount() const { return 1; } + const gfx::Transform& transform() const { return transform_; } + private: void SetNew(const gfx::Transform& transform); @@ -48,8 +48,6 @@ void Raster(SkCanvas* canvas, SkPicture::AbortCallback* callback) const override; - void AsValueInto(const gfx::Rect& visual_rect, - base::trace_event::TracedValue* array) const override; int ApproximateOpCount() const { return 0; } };
diff --git a/cc/trees/layer_tree_host.cc b/cc/trees/layer_tree_host.cc index d12e3e6..cdb60aa 100644 --- a/cc/trees/layer_tree_host.cc +++ b/cc/trees/layer_tree_host.cc
@@ -356,7 +356,6 @@ client_->WillCommit(); } -void LayerTreeHost::UpdateHudLayer() {} void LayerTreeHost::UpdateDeferCommitsInternal() { proxy_->SetDeferCommits(defer_commits_ || @@ -646,7 +645,6 @@ "source_frame_number", SourceFrameNumber()); UpdateHudLayer(debug_state_.ShowHudInfo()); - UpdateHudLayer(); Layer* root_scroll = PropertyTreeBuilder::FindFirstScrollableLayer(root_layer);
diff --git a/cc/trees/layer_tree_host.h b/cc/trees/layer_tree_host.h index a9dbe02..01ad6af0 100644 --- a/cc/trees/layer_tree_host.h +++ b/cc/trees/layer_tree_host.h
@@ -510,7 +510,6 @@ void InitializeProxy(std::unique_ptr<Proxy> proxy); bool DoUpdateLayers(Layer* root_layer); - void UpdateHudLayer(); void UpdateDeferCommitsInternal();
diff --git a/cc/trees/layer_tree_host_impl.cc b/cc/trees/layer_tree_host_impl.cc index d8bf8f8..2727eda2 100644 --- a/cc/trees/layer_tree_host_impl.cc +++ b/cc/trees/layer_tree_host_impl.cc
@@ -2322,6 +2322,9 @@ } void LayerTreeHostImpl::DidChangeScrollbarVisibility() { + // Need a commit since input handling for scrollbars is handled in Blink so + // we need to communicate to Blink when the compositor shows/hides the + // scrollbars. client_->SetNeedsCommitOnImplThread(); }
diff --git a/cc/trees/layer_tree_host_impl_unittest.cc b/cc/trees/layer_tree_host_impl_unittest.cc index 464cf8c..f6e8f731 100644 --- a/cc/trees/layer_tree_host_impl_unittest.cc +++ b/cc/trees/layer_tree_host_impl_unittest.cc
@@ -2803,6 +2803,10 @@ host_impl_->active_tree()->BuildPropertyTreesForTesting(); host_impl_->active_tree()->DidBecomeActive(); DrawFrame(); + + // SetScrollLayerId will initialize the scrollbar which will cause it to + // show and request a redraw. + did_request_redraw_ = false; } void RunTest(LayerTreeSettings::ScrollbarAnimator animator) { @@ -3128,6 +3132,70 @@ RunTest(LayerTreeSettings::NO_ANIMATOR); } +TEST_F(LayerTreeHostImplTest, ScrollbarVisibilityChangeCausesRedrawAndCommit) { + LayerTreeSettings settings = DefaultSettings(); + settings.scrollbar_animator = LayerTreeSettings::AURA_OVERLAY; + settings.scrollbar_show_delay = base::TimeDelta::FromMilliseconds(20); + settings.scrollbar_fade_out_delay = base::TimeDelta::FromMilliseconds(20); + settings.scrollbar_fade_out_duration = base::TimeDelta::FromMilliseconds(20); + gfx::Size content_size(100, 100); + + CreateHostImpl(settings, CreateCompositorFrameSink()); + host_impl_->CreatePendingTree(); + CreateScrollAndContentsLayers(host_impl_->pending_tree(), content_size); + std::unique_ptr<SolidColorScrollbarLayerImpl> scrollbar = + SolidColorScrollbarLayerImpl::Create(host_impl_->pending_tree(), 400, + VERTICAL, 10, 0, false, true); + scrollbar->test_properties()->opacity = 0.f; + LayerImpl* scroll = host_impl_->pending_tree()->OuterViewportScrollLayer(); + LayerImpl* container = + host_impl_->pending_tree()->InnerViewportContainerLayer(); + scrollbar->SetScrollLayerId(scroll->id()); + container->test_properties()->AddChild(std::move(scrollbar)); + host_impl_->pending_tree()->PushPageScaleFromMainThread(1.f, 1.f, 1.f); + host_impl_->pending_tree()->BuildPropertyTreesForTesting(); + host_impl_->ActivateSyncTree(); + + ScrollbarAnimationController* scrollbar_controller = + host_impl_->ScrollbarAnimationControllerForId(scroll->id()); + + // Scrollbars will flash shown but we should have a fade out animation + // queued. Run it and fade out the scrollbars. + { + ASSERT_FALSE(animation_task_.Equals(base::Closure())); + ASSERT_FALSE(animation_task_.IsCancelled()); + animation_task_.Run(); + + base::TimeTicks fake_now = base::TimeTicks::Now(); + scrollbar_controller->Animate(fake_now); + fake_now += settings.scrollbar_fade_out_delay; + scrollbar_controller->Animate(fake_now); + + ASSERT_TRUE(scrollbar_controller->ScrollbarsHidden()); + } + + // Move the mouse over the scrollbar region. This should post a delayed show + // task. Execute it to show the scrollbars. + { + animation_task_ = base::Closure(); + scrollbar_controller->DidMouseMoveNear(VERTICAL, 0); + ASSERT_FALSE(animation_task_.Equals(base::Closure())); + ASSERT_FALSE(animation_task_.IsCancelled()); + } + + // The show task should cause the scrollbars to show. Ensure that we + // requested a redraw and a commit. + { + did_request_redraw_ = false; + did_request_commit_ = false; + ASSERT_TRUE(scrollbar_controller->ScrollbarsHidden()); + animation_task_.Run(); + ASSERT_FALSE(scrollbar_controller->ScrollbarsHidden()); + EXPECT_TRUE(did_request_redraw_); + EXPECT_TRUE(did_request_commit_); + } +} + TEST_F(LayerTreeHostImplTest, ScrollbarInnerLargerThanOuter) { LayerTreeSettings settings = DefaultSettings(); CreateHostImpl(settings, CreateCompositorFrameSink());
diff --git a/cc/trees/property_tree.cc b/cc/trees/property_tree.cc index af6e451..f4f78d9 100644 --- a/cc/trees/property_tree.cc +++ b/cc/trees/property_tree.cc
@@ -130,9 +130,9 @@ } void TransformTree::set_needs_update(bool needs_update) { - if (needs_update && !needs_update_) + if (needs_update && !PropertyTree<TransformNode>::needs_update()) property_trees()->UpdateTransformTreeUpdateNumber(); - needs_update_ = needs_update; + PropertyTree<TransformNode>::set_needs_update(needs_update); } bool TransformTree::ComputeTranslation(int source_id,
diff --git a/cc/trees/property_tree.h b/cc/trees/property_tree.h index 8c9d158..f7e90ea7 100644 --- a/cc/trees/property_tree.h +++ b/cc/trees/property_tree.h
@@ -100,7 +100,6 @@ private: std::vector<T> nodes_; - friend class TransformTree; bool needs_update_; PropertyTrees* property_trees_; };
diff --git a/chrome/BUILD.gn b/chrome/BUILD.gn index 5604ed63..7a32fb0 100644 --- a/chrome/BUILD.gn +++ b/chrome/BUILD.gn
@@ -249,6 +249,12 @@ ldflags = [ "-pie" ] + # Chrome OS debug builds for arm need to pass --long-plt to the linker. + # See https://bugs.chromium.org/p/chromium/issues/detail?id=583532 + if (is_chromeos && is_debug && target_cpu == "arm") { + ldflags += [ "-Wl,--long-plt" ] + } + if (use_pango || use_cairo) { # Needed for chrome_main.cc initialization of libraries. configs += [ "//build/config/linux/pangocairo" ] @@ -1179,6 +1185,10 @@ "$root_out_dir/crashpad_handler", ] + if (enable_xpc_notifications) { + _chrome_symbols_sources += [ "$root_out_dir/AlertNotificationService.xpc/Contents/MacOS/AlertNotificationService" ] + } + # It is possible to run dump_syms on unstripped products without dSYMs, # but doing so isn't logical and won't happen in practice. action_foreach("chrome_dump_syms") { @@ -1207,6 +1217,10 @@ "//breakpad:dump_syms", "//third_party/crashpad/crashpad/handler:crashpad_handler", ] + + if (enable_xpc_notifications) { + deps += [ "//chrome/browser/ui/cocoa/notifications:alert_notification_xpc_service" ] + } } action("chrome_dsym_archive") { @@ -1223,6 +1237,10 @@ "$root_out_dir/crashpad_handler.dSYM", ] + if (enable_xpc_notifications) { + _dsyms += [ "$root_out_dir/AlertNotificationService.dSYM" ] + } + sources = _chrome_symbols_sources _output = "$root_out_dir/$chrome_product_full_name.dSYM.tar.bz2" @@ -1240,6 +1258,10 @@ ":chrome_helper_app", "//third_party/crashpad/crashpad/handler:crashpad_handler", ] + + if (enable_xpc_notifications) { + deps += [ "//chrome/browser/ui/cocoa/notifications:alert_notification_xpc_service" ] + } } } else { group("chrome_dump_syms") {
diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn index d6a6523..465a699a 100644 --- a/chrome/android/BUILD.gn +++ b/chrome/android/BUILD.gn
@@ -11,6 +11,7 @@ import("//chrome/chrome_paks.gni") import("//chrome/common/features.gni") import("//chrome/process_version_rc_template.gni") # For branding_file_path. +import("//device/vr/features.gni") import("//testing/test.gni") import("//third_party/icu/config.gni") import("//third_party/protobuf/proto_library.gni") @@ -96,6 +97,7 @@ "//third_party/android_data_chart:android_data_chart_java_resources", "//third_party/android_media:android_media_resources", "//third_party/android_tools:android_support_design_java", + "//third_party/android_tools:android_support_transition_java", "//third_party/android_tools:android_support_v7_appcompat_java", "//third_party/android_tools:android_support_v7_recyclerview_java", ] @@ -219,6 +221,7 @@ "//third_party/android_tools:android_gcm_java", "//third_party/android_tools:android_support_annotations_java", "//third_party/android_tools:android_support_design_java", + "//third_party/android_tools:android_support_transition_java", "//third_party/android_tools:android_support_v13_java", "//third_party/android_tools:android_support_v7_appcompat_java", "//third_party/android_tools:android_support_v7_gridlayout_java", @@ -445,6 +448,7 @@ "//third_party/WebKit/public:mojo_bindings_java", "//third_party/android_support_test_runner:runner_java", "//third_party/android_tools:android_support_design_java", + "//third_party/android_tools:android_support_transition_java", "//third_party/android_tools:android_support_v7_appcompat_java", "//third_party/android_tools:android_support_v7_recyclerview_java", "//third_party/android_tools:legacy_http_javalib",
diff --git a/chrome/android/java/proguard.flags b/chrome/android/java/proguard.flags index 9652617..e70f1e64 100644 --- a/chrome/android/java/proguard.flags +++ b/chrome/android/java/proguard.flags
@@ -27,3 +27,10 @@ # implementation of org.apache.http.params.HttpParams so it can safely be # ignored. -dontwarn org.apache.http.params.HttpParams + +# This class member is referenced in BottomSheetBottomNav as a temporary +# measure until the support library contains a solution for disabling shifting +# mode. TODO(twellington): remove once support library has a fix and is rolled. +-keepclassmembers class android.support.design.internal.BottomNavigationMenuView { + boolean mShiftingMode; +}
diff --git a/chrome/android/java/res/color/bottom_nav_tint.xml b/chrome/android/java/res/color/bottom_nav_tint.xml new file mode 100644 index 0000000..147dff525 --- /dev/null +++ b/chrome/android/java/res/color/bottom_nav_tint.xml
@@ -0,0 +1,9 @@ +<?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. +--> +<selector xmlns:android="http://schemas.android.com/apk/res/android"> + <item android:state_checked="true" android:color="@color/google_blue_700" /> + <item android:color="@color/google_grey_600"/> +</selector> \ No newline at end of file
diff --git a/chrome/android/java/res/drawable-hdpi/ic_file_download_grey600_24dp.png b/chrome/android/java/res/drawable-hdpi/ic_file_download_grey600_24dp.png new file mode 100644 index 0000000..edf2248a --- /dev/null +++ b/chrome/android/java/res/drawable-hdpi/ic_file_download_grey600_24dp.png Binary files differ
diff --git a/chrome/android/java/res/drawable-hdpi/ic_home_grey600_24dp.png b/chrome/android/java/res/drawable-hdpi/ic_home_grey600_24dp.png new file mode 100644 index 0000000..36cf6cf --- /dev/null +++ b/chrome/android/java/res/drawable-hdpi/ic_home_grey600_24dp.png Binary files differ
diff --git a/chrome/android/java/res/drawable-ldrtl-hdpi-v17/ic_history_grey600_24dp.png b/chrome/android/java/res/drawable-ldrtl-hdpi-v17/ic_history_grey600_24dp.png new file mode 100644 index 0000000..6571bf73 --- /dev/null +++ b/chrome/android/java/res/drawable-ldrtl-hdpi-v17/ic_history_grey600_24dp.png Binary files differ
diff --git a/chrome/android/java/res/drawable-ldrtl-mdpi-v17/ic_history_grey600_24dp.png b/chrome/android/java/res/drawable-ldrtl-mdpi-v17/ic_history_grey600_24dp.png new file mode 100644 index 0000000..41f31a0 --- /dev/null +++ b/chrome/android/java/res/drawable-ldrtl-mdpi-v17/ic_history_grey600_24dp.png Binary files differ
diff --git a/chrome/android/java/res/drawable-ldrtl-xhdpi-v17/ic_history_grey600_24dp.png b/chrome/android/java/res/drawable-ldrtl-xhdpi-v17/ic_history_grey600_24dp.png new file mode 100644 index 0000000..f04d215 --- /dev/null +++ b/chrome/android/java/res/drawable-ldrtl-xhdpi-v17/ic_history_grey600_24dp.png Binary files differ
diff --git a/chrome/android/java/res/drawable-ldrtl-xxhdpi-v17/ic_history_grey600_24dp.png b/chrome/android/java/res/drawable-ldrtl-xxhdpi-v17/ic_history_grey600_24dp.png new file mode 100644 index 0000000..03c7448 --- /dev/null +++ b/chrome/android/java/res/drawable-ldrtl-xxhdpi-v17/ic_history_grey600_24dp.png Binary files differ
diff --git a/chrome/android/java/res/drawable-ldrtl-xxxhdpi-v17/ic_history_grey600_24dp.png b/chrome/android/java/res/drawable-ldrtl-xxxhdpi-v17/ic_history_grey600_24dp.png new file mode 100644 index 0000000..37803b6a --- /dev/null +++ b/chrome/android/java/res/drawable-ldrtl-xxxhdpi-v17/ic_history_grey600_24dp.png Binary files differ
diff --git a/chrome/android/java/res/drawable-mdpi/ic_file_download_grey600_24dp.png b/chrome/android/java/res/drawable-mdpi/ic_file_download_grey600_24dp.png new file mode 100644 index 0000000..74d5547 --- /dev/null +++ b/chrome/android/java/res/drawable-mdpi/ic_file_download_grey600_24dp.png Binary files differ
diff --git a/chrome/android/java/res/drawable-mdpi/ic_home_grey600_24dp.png b/chrome/android/java/res/drawable-mdpi/ic_home_grey600_24dp.png new file mode 100644 index 0000000..c2163b2 --- /dev/null +++ b/chrome/android/java/res/drawable-mdpi/ic_home_grey600_24dp.png Binary files differ
diff --git a/chrome/android/java/res/drawable-xhdpi/ic_file_download_grey600_24dp.png b/chrome/android/java/res/drawable-xhdpi/ic_file_download_grey600_24dp.png new file mode 100644 index 0000000..95bf623 --- /dev/null +++ b/chrome/android/java/res/drawable-xhdpi/ic_file_download_grey600_24dp.png Binary files differ
diff --git a/chrome/android/java/res/drawable-xhdpi/ic_home_grey600_24dp.png b/chrome/android/java/res/drawable-xhdpi/ic_home_grey600_24dp.png new file mode 100644 index 0000000..e67c825 --- /dev/null +++ b/chrome/android/java/res/drawable-xhdpi/ic_home_grey600_24dp.png Binary files differ
diff --git a/chrome/android/java/res/drawable-xxhdpi/ic_file_download_grey600_24dp.png b/chrome/android/java/res/drawable-xxhdpi/ic_file_download_grey600_24dp.png new file mode 100644 index 0000000..c4d0b0c --- /dev/null +++ b/chrome/android/java/res/drawable-xxhdpi/ic_file_download_grey600_24dp.png Binary files differ
diff --git a/chrome/android/java/res/drawable-xxhdpi/ic_home_grey600_24dp.png b/chrome/android/java/res/drawable-xxhdpi/ic_home_grey600_24dp.png new file mode 100644 index 0000000..7ebcfed --- /dev/null +++ b/chrome/android/java/res/drawable-xxhdpi/ic_home_grey600_24dp.png Binary files differ
diff --git a/chrome/android/java/res/drawable-xxxhdpi/ic_file_download_grey600_24dp.png b/chrome/android/java/res/drawable-xxxhdpi/ic_file_download_grey600_24dp.png new file mode 100644 index 0000000..c4c6d90f --- /dev/null +++ b/chrome/android/java/res/drawable-xxxhdpi/ic_file_download_grey600_24dp.png Binary files differ
diff --git a/chrome/android/java/res/drawable-xxxhdpi/ic_home_grey600_24dp.png b/chrome/android/java/res/drawable-xxxhdpi/ic_home_grey600_24dp.png new file mode 100644 index 0000000..a830487 --- /dev/null +++ b/chrome/android/java/res/drawable-xxxhdpi/ic_home_grey600_24dp.png Binary files differ
diff --git a/chrome/android/java/res/layout/bottom_control_container.xml b/chrome/android/java/res/layout/bottom_control_container.xml index a6ca2886..9f45f2a4 100644 --- a/chrome/android/java/res/layout/bottom_control_container.xml +++ b/chrome/android/java/res/layout/bottom_control_container.xml
@@ -46,7 +46,8 @@ <FrameLayout android:id="@+id/bottom_sheet_content" android:layout_width="match_parent" - android:layout_height="match_parent" /> + android:layout_height="match_parent" + android:paddingBottom="@dimen/bottom_nav_height" /> <ViewStub android:id="@+id/bottom_omnibox_results_container_stub"
diff --git a/chrome/android/java/res/layout/bottom_sheet_bottom_nav.xml b/chrome/android/java/res/layout/bottom_sheet_bottom_nav.xml new file mode 100644 index 0000000..c154dea --- /dev/null +++ b/chrome/android/java/res/layout/bottom_sheet_bottom_nav.xml
@@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright 2016 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. --> + +<org.chromium.chrome.browser.widget.BottomSheetContentController + xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" + android:id="@+id/bottom_nav" + android:layout_width="match_parent" + android:layout_height="@dimen/bottom_nav_height" + android:layout_gravity="start|bottom" + android:background="@color/appbar_background" + app:menu="@menu/bottom_sheet_nav_menu" + app:itemIconTint="@color/bottom_nav_tint" + app:itemTextColor="@color/bottom_nav_tint" + android:visibility="gone" /> \ No newline at end of file
diff --git a/chrome/android/java/res/layout/main.xml b/chrome/android/java/res/layout/main.xml index 54c916c7..ceba8c6 100644 --- a/chrome/android/java/res/layout/main.xml +++ b/chrome/android/java/res/layout/main.xml
@@ -70,6 +70,14 @@ android:layout_width="match_parent" android:layout_height="match_parent" /> + <ViewStub + android:id="@+id/bottom_nav_stub" + android:layout_width="match_parent" + android:layout_height="@dimen/bottom_nav_height" + android:layout_gravity="start|bottom" + android:inflatedId="@+id/bottom_nav" + android:layout="@layout/bottom_sheet_bottom_nav" /> + </android.support.design.widget.CoordinatorLayout> <HorizontalScrollView
diff --git a/chrome/android/java/res/layout/selectable_list_layout.xml b/chrome/android/java/res/layout/selectable_list_layout.xml index 67e18fc9..85507de 100644 --- a/chrome/android/java/res/layout/selectable_list_layout.xml +++ b/chrome/android/java/res/layout/selectable_list_layout.xml
@@ -12,14 +12,6 @@ android:background="@color/appbar_background" android:layout_alignParentTop="true" /> - <android.support.v7.widget.RecyclerView - android:id="@+id/recycler_view" - android:layout_width="match_parent" - android:layout_height="match_parent" - android:layout_alignParentBottom="true" - android:layout_below="@id/action_bar" - android:visibility="gone" /> - <org.chromium.chrome.browser.widget.FadingShadowView android:id="@+id/shadow" android:layout_width="match_parent" @@ -27,23 +19,32 @@ android:layout_below="@id/action_bar" /> <FrameLayout - android:layout_below="@id/action_bar" - android:layout_width="match_parent" - android:layout_height="match_parent" > - <TextView - android:id="@+id/empty_view" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_gravity="center" - android:drawablePadding="3dp" - android:textColor="@color/google_grey_700" - android:textSize="16sp" - android:visibility="gone" /> - </FrameLayout> + android:id="@+id/list_content" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:layout_alignParentBottom="true" + android:layout_below="@id/action_bar"> - <org.chromium.chrome.browser.widget.LoadingView - android:id="@+id/loading_view" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_centerInParent="true" /> + <android.support.v7.widget.RecyclerView + android:id="@+id/recycler_view" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:visibility="gone" /> + + <TextView + android:id="@+id/empty_view" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center" + android:drawablePadding="3dp" + android:textColor="@color/google_grey_700" + android:textSize="16sp" + android:visibility="gone" /> + + <org.chromium.chrome.browser.widget.LoadingView + android:id="@+id/loading_view" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center" /> + </FrameLayout> </merge> \ No newline at end of file
diff --git a/chrome/android/java/res/menu/bottom_sheet_nav_menu.xml b/chrome/android/java/res/menu/bottom_sheet_nav_menu.xml new file mode 100644 index 0000000..c74e0d4 --- /dev/null +++ b/chrome/android/java/res/menu/bottom_sheet_nav_menu.xml
@@ -0,0 +1,21 @@ +<?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. --> + +<menu xmlns:android="http://schemas.android.com/apk/res/android"> + <item android:id="@+id/action_home" + android:title="@string/accessibility_toolbar_btn_home" + android:icon="@drawable/ic_home_grey600_24dp" /> + <!-- TODO(twellington): The padding on the downloads icon is slightly off. + Replace with a new asset when available. --> + <item android:id="@+id/action_downloads" + android:title="@string/menu_downloads" + android:icon="@drawable/ic_file_download_grey600_24dp" /> + <item android:id="@+id/action_bookmarks" + android:title="@string/menu_bookmarks" + android:icon="@drawable/btn_star_filled" /> + <item android:id="@+id/action_history" + android:title="@string/menu_history" + android:icon="@drawable/ic_history_grey600_24dp" /> +</menu> \ No newline at end of file
diff --git a/chrome/android/java/res/values/dimens.xml b/chrome/android/java/res/values/dimens.xml index fbdb7b11..bd848cf 100644 --- a/chrome/android/java/res/values/dimens.xml +++ b/chrome/android/java/res/values/dimens.xml
@@ -407,13 +407,20 @@ <dimen name="downloads_item_file_type_icon_padding">12dp</dimen> <dimen name="downloads_item_margin">16dp</dimen> - <!-- SelectableListLayout styles --> + <!-- SelectableListLayout dimensions --> <dimen name="selectable_list_layout_end_icon">24dp</dimen> <dimen name="selectable_list_layout_row_end_padding">16dp</dimen> <dimen name="selectable_list_layout_start_icon_width">56dp</dimen> <dimen name="toolbar_wide_display_nav_icon_offset">-18dp</dimen> <dimen name="toolbar_wide_display_end_offset">-14dp</dimen> + <!-- Bottom sheet bottom nav dimensions --> + <dimen name="bottom_nav_height">56dp</dimen> + <dimen name="bottom_nav_space_from_toolbar">96dp</dimen> + <!-- The following two dimensions override defaults in Android's BottomNavigationView --> + <dimen name="design_bottom_navigation_text_size">12sp</dimen> + <dimen name="design_bottom_navigation_active_text_size">14sp</dimen> + <!-- Miscellaneous dimensions --> <dimen name="action_bar_shadow_height">10dp</dimen> <dimen name="card_corner_radius">2dp</dimen>
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java index e1dc768..8a5a25f 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java
@@ -136,6 +136,7 @@ import org.chromium.chrome.browser.vr_shell.VrShellDelegate; import org.chromium.chrome.browser.webapps.AddToHomescreenManager; import org.chromium.chrome.browser.widget.BottomSheet; +import org.chromium.chrome.browser.widget.BottomSheetContentController; import org.chromium.chrome.browser.widget.ControlContainer; import org.chromium.chrome.browser.widget.EmptyBottomSheetObserver; import org.chromium.chrome.browser.widget.FadingBackgroundView; @@ -254,6 +255,7 @@ private AppMenuHandler mAppMenuHandler; private ToolbarManager mToolbarManager; private BottomSheet mBottomSheet; + private BottomSheetContentController mBottomSheetContentController; private FadingBackgroundView mFadingBackgroundView; // Time in ms that it took took us to inflate the initial layout @@ -368,6 +370,14 @@ } }); mFadingBackgroundView.addObserver(mBottomSheet); + + mBottomSheetContentController = + (BottomSheetContentController) ((ViewStub) findViewById(R.id.bottom_nav_stub)) + .inflate(); + int controlContainerHeight = + ((ControlContainer) findViewById(R.id.control_container)).getView().getHeight(); + mBottomSheetContentController.init( + mBottomSheet, controlContainerHeight, mTabModelSelector); } ((BottomContainer) findViewById(R.id.bottom_container)).initialize(mFullscreenManager); } @@ -931,8 +941,8 @@ DeferredStartupHandler.getInstance().addDeferredTask(new Runnable() { @Override public void run() { - if (isActivityDestroyed() || mBottomSheet == null) return; - mBottomSheet.initializeDefaultContent(); + if (isActivityDestroyed() || mBottomSheetContentController == null) return; + mBottomSheetContentController.initializeDefaultContent(); } }); }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/autofill/PhoneNumberUtil.java b/chrome/android/java/src/org/chromium/chrome/browser/autofill/PhoneNumberUtil.java new file mode 100644 index 0000000..2315304 --- /dev/null +++ b/chrome/android/java/src/org/chromium/chrome/browser/autofill/PhoneNumberUtil.java
@@ -0,0 +1,70 @@ +// 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. + +package org.chromium.chrome.browser.autofill; + +import android.text.Editable; +import android.text.TextWatcher; + +import org.chromium.base.annotations.JNINamespace; + +/** + * Android wrapper of i18n::phonenumbers::PhoneNumberUtil which provides convenient methods to + * format and validate phone number. + */ +@JNINamespace("autofill") +public class PhoneNumberUtil { + // Avoid instantiation by accident. + private PhoneNumberUtil() {} + + /** TextWatcher to watch phone number changes so as to format it dynamically */ + public static class FormatTextWatcher implements TextWatcher { + /** Indicates the change was caused by ourselves. */ + private boolean mSelfChange; + + @Override + public void afterTextChanged(Editable s) { + if (mSelfChange) return; + + String formattedNumber = format(s.toString()); + mSelfChange = true; + s.replace(0, s.length(), formattedNumber, 0, formattedNumber.length()); + mSelfChange = false; + } + + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) {} + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) {} + } + + /** + * Formats the given phone number in INTERNATIONAL format + * [i18n::phonenumbers::PhoneNumberUtil::PhoneNumberFormat::INTERNATIONAL], returning the + * original number if no formatting can be made. For example, the number of the Google Zürich + * office will be formatted as "+41 44 668 1800" in INTERNATIONAL format. + * + * @param phoneNumber The given phone number. + * @return formatted phone number. + */ + public static String format(String phoneNumber) { + return nativeFormat(phoneNumber); + } + + /** + * Checks whether the given phone number matches a valid pattern according to region code. The + * region code is from the given phone number if it starts with '+', otherwise application + * locale is used to figure out the region code. + * + * @param phoneNumber The given phone number. + * @return True if the given number is valid, otherwise return false. + */ + public static boolean isValidNumber(String phoneNumber) { + return nativeIsValidNumber(phoneNumber); + } + + private static native String nativeFormat(String phoneNumber); + private static native boolean nativeIsValidNumber(String phoneNumber); +} \ No newline at end of file
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkManager.java b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkManager.java index 541eedf..0cda58c 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkManager.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkManager.java
@@ -233,6 +233,20 @@ } /** + * See {@link SelectableListLayout#detachContentView()}. + */ + public View detachContentView() { + return mSelectableListLayout.detachContentView(); + } + + /** + * @return The vertical scroll offset of the content view. + */ + public int getVerticalScrollOffset() { + return mRecyclerView.computeVerticalScrollOffset(); + } + + /** * Sets the listener that reacts upon the change of the UI state of bookmark manager. */ public void setBasicNativePage(BasicNativePage nativePage) {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkSheetContent.java b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkSheetContent.java new file mode 100644 index 0000000..040bd843 --- /dev/null +++ b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkSheetContent.java
@@ -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. + +package org.chromium.chrome.browser.bookmarks; + +import android.app.Activity; +import android.view.View; + +import org.chromium.chrome.browser.UrlConstants; +import org.chromium.chrome.browser.widget.BottomSheet.BottomSheetContent; + +/** + * A {@link BottomSheetContent} holding a {@link BookmarkManager} for display in the BottomSheet. + */ +public class BookmarkSheetContent implements BottomSheetContent { + private final View mContentView; + private BookmarkManager mBookmarkManager; + + /** + * @param activity The activity displaying the bookmark manager UI. + */ + public BookmarkSheetContent(Activity activity) { + mBookmarkManager = new BookmarkManager(activity, false); + mBookmarkManager.updateForUrl(UrlConstants.BOOKMARKS_URL); + mContentView = mBookmarkManager.detachContentView(); + } + + @Override + public View getContentView() { + return mContentView; + } + + @Override + public View getToolbarView() { + return null; + } + + @Override + public int getVerticalScrollOffset() { + return mBookmarkManager.getVerticalScrollOffset(); + } + + @Override + public void destroy() { + mBookmarkManager.destroy(); + mBookmarkManager = null; + } +}
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadSheetContent.java b/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadSheetContent.java new file mode 100644 index 0000000..4767444 --- /dev/null +++ b/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadSheetContent.java
@@ -0,0 +1,74 @@ +// 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. + +package org.chromium.chrome.browser.download; + +import android.app.Activity; +import android.view.View; + +import org.chromium.base.ActivityState; +import org.chromium.base.ApplicationStatus; +import org.chromium.base.ApplicationStatus.ActivityStateListener; +import org.chromium.base.ThreadUtils; +import org.chromium.chrome.browser.download.ui.DownloadManagerUi; +import org.chromium.chrome.browser.widget.BottomSheet.BottomSheetContent; + +/** + * A {@link BottomSheetContent} holding a {@link DownloadManagerUi} for display in the BottomSheet. + */ +public class DownloadSheetContent implements BottomSheetContent { + private final View mContentView; + private final ActivityStateListener mActivityStateListener; + private DownloadManagerUi mDownloadManager; + + /** + * @param activity The activity displaying the download manager UI. + * @param isIncognito Whether the activity is currently displaying an incognito tab. + */ + public DownloadSheetContent(Activity activity, final boolean isIncognito) { + ThreadUtils.assertOnUiThread(); + + mDownloadManager = + new DownloadManagerUi(activity, isIncognito, activity.getComponentName()); + mContentView = mDownloadManager.detachContentView(); + + // #destroy() unregisters the ActivityStateListener to avoid checking for externally removed + // downloads after the downloads UI is closed. This requires each download UI to have its + // own ActivityStateListener. If multiple tabs are showing the downloads page, multiple + // requests to check for externally removed downloads will be issued when the activity is + // resumed. + mActivityStateListener = new ActivityStateListener() { + @Override + public void onActivityStateChange(Activity activity, int newState) { + if (newState == ActivityState.RESUMED) { + DownloadUtils.checkForExternallyRemovedDownloads( + mDownloadManager.getBackendProvider(), isIncognito); + } + } + }; + ApplicationStatus.registerStateListenerForActivity(mActivityStateListener, activity); + } + + @Override + public View getContentView() { + return mContentView; + } + + @Override + public View getToolbarView() { + return null; + } + + @Override + public int getVerticalScrollOffset() { + return mDownloadManager.getVerticalScrollOffset(); + } + + @Override + public void destroy() { + mDownloadManager.onDestroyed(); + mDownloadManager = null; + ApplicationStatus.unregisterActivityStateListener(mActivityStateListener); + } +}
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/download/ui/DownloadManagerUi.java b/chrome/android/java/src/org/chromium/chrome/browser/download/ui/DownloadManagerUi.java index 2528a0bbb..bd9fdd1 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/download/ui/DownloadManagerUi.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/download/ui/DownloadManagerUi.java
@@ -288,6 +288,20 @@ } /** + * See {@link SelectableListLayout#detachContentView()}. + */ + public View detachContentView() { + return mSelectableListLayout.detachContentView(); + } + + /** + * @return The vertical scroll offset of the content view. + */ + public int getVerticalScrollOffset() { + return mRecyclerView.computeVerticalScrollOffset(); + } + + /** * Sets the download manager to the state that the url represents. */ public void updateForUrl(String url) {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/history/HistoryManager.java b/chrome/android/java/src/org/chromium/chrome/browser/history/HistoryManager.java index 216c8a3..6104dc87 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/history/HistoryManager.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/history/HistoryManager.java
@@ -21,6 +21,7 @@ import android.support.v7.widget.Toolbar.OnMenuItemClickListener; import android.view.LayoutInflater; import android.view.MenuItem; +import android.view.View; import android.view.ViewGroup; import android.widget.TextView; @@ -223,6 +224,20 @@ } /** + * See {@link SelectableListLayout#detachContentView()}. + */ + public View detachContentView() { + return mSelectableListLayout.detachContentView(); + } + + /** + * @return The vertical scroll offset of the content view. + */ + public int getVerticalScrollOffset() { + return mRecyclerView.computeVerticalScrollOffset(); + } + + /** * Called when the activity/native page is destroyed. */ public void onDestroyed() {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/history/HistorySheetContent.java b/chrome/android/java/src/org/chromium/chrome/browser/history/HistorySheetContent.java new file mode 100644 index 0000000..bfbba16 --- /dev/null +++ b/chrome/android/java/src/org/chromium/chrome/browser/history/HistorySheetContent.java
@@ -0,0 +1,47 @@ +// 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. + +package org.chromium.chrome.browser.history; + +import android.app.Activity; +import android.view.View; + +import org.chromium.chrome.browser.widget.BottomSheet.BottomSheetContent; + +/** + * A {@link BottomSheetContent} holding a {@link HistoryManager} for display in the BottomSheet. + */ +public class HistorySheetContent implements BottomSheetContent { + private final View mContentView; + private HistoryManager mHistoryManager; + + /** + * @param activity The activity displaying the history manager UI. + */ + public HistorySheetContent(Activity activity) { + mHistoryManager = new HistoryManager(activity, null); + mContentView = mHistoryManager.detachContentView(); + } + + @Override + public View getContentView() { + return mContentView; + } + + @Override + public View getToolbarView() { + return null; + } + + @Override + public int getVerticalScrollOffset() { + return mHistoryManager.getVerticalScrollOffset(); + } + + @Override + public void destroy() { + mHistoryManager.onDestroyed(); + mHistoryManager = null; + } +}
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/OmniboxUrlEmphasizer.java b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/OmniboxUrlEmphasizer.java index ae692056..3d96dcf 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/OmniboxUrlEmphasizer.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/OmniboxUrlEmphasizer.java
@@ -64,6 +64,7 @@ * @return The scheme extracted from |url|, canonicalized to lowercase. */ public String extractScheme(String url) { + if (!hasScheme()) return ""; return url.subSequence(schemeStart, schemeStart + schemeLength) .toString() .toLowerCase(Locale.US);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/payments/AddressEditor.java b/chrome/android/java/src/org/chromium/chrome/browser/payments/AddressEditor.java index e6df2718..df37627 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/payments/AddressEditor.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/payments/AddressEditor.java
@@ -5,13 +5,13 @@ package org.chromium.chrome.browser.payments; import android.os.Handler; -import android.telephony.PhoneNumberUtils; import android.util.Pair; import org.chromium.base.Callback; import org.chromium.chrome.R; import org.chromium.chrome.browser.autofill.PersonalDataManager; import org.chromium.chrome.browser.autofill.PersonalDataManager.AutofillProfile; +import org.chromium.chrome.browser.autofill.PhoneNumberUtil; import org.chromium.chrome.browser.payments.ui.EditorFieldModel; import org.chromium.chrome.browser.payments.ui.EditorFieldModel.EditorFieldValidator; import org.chromium.chrome.browser.payments.ui.EditorModel; @@ -304,9 +304,7 @@ mPhoneValidator = new EditorFieldValidator() { @Override public boolean isValid(@Nullable CharSequence value) { - return value != null - && PhoneNumberUtils.isGlobalPhoneNumber( - PhoneNumberUtils.stripSeparators(value.toString())); + return value != null && PhoneNumberUtil.isValidNumber(value.toString()); } @Override
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/payments/AndroidPaymentAppFactory.java b/chrome/android/java/src/org/chromium/chrome/browser/payments/AndroidPaymentAppFactory.java index ac44d119..582b1bf 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/payments/AndroidPaymentAppFactory.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/payments/AndroidPaymentAppFactory.java
@@ -75,8 +75,6 @@ filterIntent.setPackage(packageName); if (pm.resolveActivity(filterIntent, 0) == null) continue; } - // Do not recommend disabled apps. - if (!PaymentPreferencesUtil.isAndroidPaymentAppEnabled(packageName)) continue; AndroidPaymentApp installedApp = installedApps.get(packageName); if (installedApp == null) { CharSequence label = match.loadLabel(pm);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/payments/PaymentPreferencesUtil.java b/chrome/android/java/src/org/chromium/chrome/browser/payments/PaymentPreferencesUtil.java index 5fcecc3..1e5f11b 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/payments/PaymentPreferencesUtil.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/payments/PaymentPreferencesUtil.java
@@ -42,28 +42,6 @@ } /** - * Checks whether the Android payment app is enabled by user from the settings. The default - * status is enabled. - * - * @param packageName The package name of the Android payment app. - * @return True If the Android payment app is enabled by user. - */ - public static boolean isAndroidPaymentAppEnabled(String packageName) { - return ContextUtils.getAppSharedPreferences().getBoolean( - getAndroidPaymentAppEnabledPreferenceKey(packageName), true); - } - - /** - * Gets preference key for status of the Android payment app. - * - * @param packageName The packageName of the Android payment app. - * @return The preference key. - */ - public static String getAndroidPaymentAppEnabledPreferenceKey(String packageName) { - return PAYMENT_ANDROID_APP_ENABLED_ + packageName; - } - - /** * Gets use count of the payment instrument. * * @param id The instrument identifier.
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/payments/ui/EditorView.java b/chrome/android/java/src/org/chromium/chrome/browser/payments/ui/EditorView.java index 75f294b7..da90122 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/payments/ui/EditorView.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/payments/ui/EditorView.java
@@ -13,12 +13,10 @@ import android.content.DialogInterface; import android.graphics.Color; import android.graphics.drawable.ColorDrawable; -import android.os.AsyncTask; import android.os.Handler; import android.support.v4.view.animation.FastOutLinearInInterpolator; import android.support.v4.view.animation.LinearOutSlowInInterpolator; import android.support.v7.widget.Toolbar.OnMenuItemClickListener; -import android.telephony.PhoneNumberFormattingTextWatcher; import android.text.InputFilter; import android.text.Spanned; import android.text.TextWatcher; @@ -40,6 +38,7 @@ import org.chromium.base.ApiCompatibilityUtils; import org.chromium.base.VisibleForTesting; import org.chromium.chrome.R; +import org.chromium.chrome.browser.autofill.PhoneNumberUtil; import org.chromium.chrome.browser.customtabs.CustomTabActivity; import org.chromium.chrome.browser.payments.ui.PaymentRequestUI.PaymentRequestObserverForTest; import org.chromium.chrome.browser.preferences.autofill.CreditCardNumberFormattingTextWatcher; @@ -151,20 +150,7 @@ }; mCardNumberFormatter = new CreditCardNumberFormattingTextWatcher(); - new AsyncTask<Void, Void, PhoneNumberFormattingTextWatcher>() { - @Override - protected PhoneNumberFormattingTextWatcher doInBackground(Void... unused) { - return new PhoneNumberFormattingTextWatcher(); - } - - @Override - protected void onPostExecute(PhoneNumberFormattingTextWatcher result) { - mPhoneFormatter = result; - if (mPhoneInput != null) { - mPhoneInput.addTextChangedListener(mPhoneFormatter); - } - } - }.execute(); + mPhoneFormatter = new PhoneNumberUtil.FormatTextWatcher(); } /** Launches the Autofill help page on top of the current Context. */
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/physicalweb/PhysicalWebBroadcastService.java b/chrome/android/java/src/org/chromium/chrome/browser/physicalweb/PhysicalWebBroadcastService.java index dfaac76..d18e18f1 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/physicalweb/PhysicalWebBroadcastService.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/physicalweb/PhysicalWebBroadcastService.java
@@ -5,13 +5,25 @@ package org.chromium.chrome.browser.physicalweb; import android.annotation.TargetApi; +import android.app.NotificationManager; +import android.app.PendingIntent; import android.app.Service; +import android.content.BroadcastReceiver; +import android.content.Context; import android.content.Intent; +import android.content.IntentFilter; import android.content.SharedPreferences; import android.os.Build; import android.os.IBinder; import org.chromium.base.ContextUtils; +import org.chromium.base.Log; +import org.chromium.chrome.R; +import org.chromium.chrome.browser.AppHooks; +import org.chromium.chrome.browser.notifications.ChromeNotificationBuilder; +import org.chromium.chrome.browser.notifications.NotificationConstants; +import org.chromium.chrome.browser.notifications.NotificationManagerProxy; +import org.chromium.chrome.browser.notifications.NotificationManagerProxyImpl; /** * Broadcasts Physical Web URLs via Bluetooth Low Energy (BLE). @@ -26,8 +38,8 @@ * service and will be the only way for the user to stop the service. * * If the user terminates Chrome or the OS shuts down this service mid-broadcasting, when the - * service get's restarted it will restart broadcasting as well by gathering the URL from - * shared preferences. This will create a seemless experience to the user by behaving as + * service gets restarted it will restart broadcasting as well by gathering the URL from + * shared preferences. This will create a seamless experience to the user by behaving as * though broadcasting is not connected to the Chrome application. * * bluetooth.le.AdvertiseCallback and bluetooth.BluetoothAdapter require API level 21. @@ -39,25 +51,52 @@ public static final String DISPLAY_URL_KEY = "display_url"; public static final String PREVIOUS_BROADCAST_URL_KEY = "previousUrl"; + private static final String STOP_SERVICE = + "org.chromium.chrome.browser.physicalweb.stop_service"; + private static final String TAG = "PhysicalWebSharing"; private boolean mStartedByRestart; + private final BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + String action = intent.getAction(); + + if (STOP_SERVICE.equals(action)) { + stopSelf(); + } else { + Log.e(TAG, "Unrecognized Broadcast Received"); + } + } + }; + @Override public int onStartCommand(Intent intent, int flags, int startId) { String displayUrl = fetchDisplayUrl(intent); // This should never happen. if (displayUrl == null) { + Log.e(TAG, "Given null display URL"); stopSelf(); return START_STICKY; } - // TODO(iankc): implement parsing, broadcasting, and notifications. - stopSelf(); + IntentFilter filter = new IntentFilter(STOP_SERVICE); + registerReceiver(mBroadcastReceiver, filter); + + // TODO(iankc): implement parsing, broadcasting, Url Shortener. + createBroadcastNotification(displayUrl); return START_STICKY; } @Override + public void onDestroy() { + unregisterReceiver(mBroadcastReceiver); + disableUrlBroadcasting(); + super.onDestroy(); + } + + @Override public IBinder onBind(Intent intent) { return null; } @@ -73,7 +112,42 @@ ContextUtils.getAppSharedPreferences() .edit() .putString(PREVIOUS_BROADCAST_URL_KEY, displayUrl) - .commit(); + .apply(); return displayUrl; } + + /** + * Surfaces a notification to the user that the Physical Web is broadcasting. + * The notification specifies the URL that is being broadcast. It cannot be swiped away, + * but broadcasting can be terminated with the stop button on the notification. + */ + private void createBroadcastNotification(String displayUrl) { + Context context = getApplicationContext(); + PendingIntent stopPendingIntent = PendingIntent.getBroadcast( + context, 0, new Intent(STOP_SERVICE), PendingIntent.FLAG_UPDATE_CURRENT); + NotificationManagerProxy notificationManager = new NotificationManagerProxyImpl( + (NotificationManager) getSystemService(NOTIFICATION_SERVICE)); + ChromeNotificationBuilder notificationBuilder = + AppHooks.get() + .createChromeNotificationBuilder(true /* preferCompat */, + NotificationConstants.CATEGORY_ID_BROWSER, + context.getString(R.string.notification_category_browser), + NotificationConstants.CATEGORY_GROUP_ID_GENERAL, + context.getString(R.string.notification_category_group_general)) + .setSmallIcon(R.drawable.ic_image_white_24dp) + .setContentTitle(getString(R.string.physical_web_broadcast_notification)) + .setContentText(displayUrl) + .setOngoing(true) + .addAction(android.R.drawable.ic_menu_close_clear_cancel, + getString(R.string.physical_web_stop_broadcast), stopPendingIntent); + notificationManager.notify( + NotificationConstants.NOTIFICATION_ID_PHYSICAL_WEB, notificationBuilder.build()); + } + + /** Turns off URL broadcasting. */ + private void disableUrlBroadcasting() { + NotificationManagerProxy notificationManager = new NotificationManagerProxyImpl( + (NotificationManager) getSystemService(NOTIFICATION_SERVICE)); + notificationManager.cancel(NotificationConstants.NOTIFICATION_ID_PHYSICAL_WEB); + } }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/physicalweb/PwCollection.java b/chrome/android/java/src/org/chromium/chrome/browser/physicalweb/PwCollection.java deleted file mode 100644 index b14b2755..0000000 --- a/chrome/android/java/src/org/chromium/chrome/browser/physicalweb/PwCollection.java +++ /dev/null
@@ -1,25 +0,0 @@ -// Copyright 2016 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. - -package org.chromium.chrome.browser.physicalweb; - -import java.util.List; - -/** - * A physical web collection stores UrlInfos and PwsResults for scanned URLs. - */ -public class PwCollection { - public final UrlInfo[] urlInfos; - public final PwsResult[] pwsResults; - - /** - * Construct a PwCollection. - * @param urlInfos All nearby URL infos. - * @param pwsResults The metadata for nearby URLs. - */ - public PwCollection(List<UrlInfo> urlInfos, List<PwsResult> pwsResults) { - this.urlInfos = urlInfos.toArray(new UrlInfo[0]); - this.pwsResults = pwsResults.toArray(new PwsResult[0]); - } -}
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/ChromeSwitchPreference.java b/chrome/android/java/src/org/chromium/chrome/browser/preferences/ChromeSwitchPreference.java index 8117be6..087eba3 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/preferences/ChromeSwitchPreference.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/preferences/ChromeSwitchPreference.java
@@ -6,9 +6,6 @@ import android.content.Context; import android.content.res.TypedArray; -import android.graphics.Rect; -import android.graphics.drawable.Drawable; -import android.graphics.drawable.LayerDrawable; import android.preference.SwitchPreference; import android.support.v7.widget.SwitchCompat; import android.text.TextUtils; @@ -17,6 +14,7 @@ import android.widget.TextView; import org.chromium.chrome.R; +import org.chromium.ui.HorizontalListDividerDrawable; /** * A super-powered SwitchPreference designed especially for Chrome. Special features: @@ -71,7 +69,7 @@ int right = view.getPaddingRight(); int top = view.getPaddingTop(); int bottom = view.getPaddingBottom(); - view.setBackground(DividerDrawable.create(getContext())); + view.setBackground(HorizontalListDividerDrawable.create(getContext())); view.setPadding(left, top, right, bottom); } @@ -100,31 +98,4 @@ if (mManagedPrefDelegate != null && mManagedPrefDelegate.onClickPreference(this)) return; super.onClick(); } - - /** - * Draws a horizontal list divider line at the bottom of its drawing area. - * - * Because ?android:attr/listDivider may be a 9-patch, there's no way to achieve this drawing - * effect with the platform Drawable classes; hence this custom Drawable. - */ - private static class DividerDrawable extends LayerDrawable { - - static DividerDrawable create(Context context) { - TypedArray a = context.obtainStyledAttributes(new int[] { android.R.attr.listDivider }); - Drawable listDivider = a.getDrawable(0); - a.recycle(); - return new DividerDrawable(new Drawable[] { listDivider }); - } - - private DividerDrawable(Drawable[] layers) { - super(layers); - } - - @Override - protected void onBoundsChange(Rect bounds) { - int listDividerHeight = getDrawable(0).getIntrinsicHeight(); - setLayerInset(0, 0, bounds.height() - listDividerHeight, 0, 0); - super.onBoundsChange(bounds); - } - } }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/autofill/AndroidPaymentAppPreference.java b/chrome/android/java/src/org/chromium/chrome/browser/preferences/autofill/AndroidPaymentAppPreference.java index 39e71a1..1c3bf71 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/preferences/autofill/AndroidPaymentAppPreference.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/preferences/autofill/AndroidPaymentAppPreference.java
@@ -5,14 +5,17 @@ package org.chromium.chrome.browser.preferences.autofill; import android.content.Context; +import android.preference.Preference; import android.view.View; import android.view.ViewGroup; import org.chromium.chrome.R; -import org.chromium.chrome.browser.preferences.ChromeSwitchPreference; +import org.chromium.ui.HorizontalListDividerDrawable; -/** ChromeSwitchPreference with fixed icon size for Android payment apps. */ -public class AndroidPaymentAppPreference extends ChromeSwitchPreference { +/** Preference with fixed icon size for Android payment apps. */ +public class AndroidPaymentAppPreference extends Preference { + private boolean mDrawDivider; + public AndroidPaymentAppPreference(Context context) { super(context, null); } @@ -31,4 +34,28 @@ return view; } + + @Override + protected void onBindView(View view) { + super.onBindView(view); + + if (mDrawDivider) { + int left = view.getPaddingLeft(); + int right = view.getPaddingRight(); + int top = view.getPaddingTop(); + int bottom = view.getPaddingBottom(); + view.setBackground(HorizontalListDividerDrawable.create(getContext())); + view.setPadding(left, top, right, bottom); + } + } + + /** + * Sets whether a horizontal divider line should be drawn at the bottom of this preference. + */ + public void setDrawDivider(boolean drawDivider) { + if (mDrawDivider != drawDivider) { + mDrawDivider = drawDivider; + notifyChanged(); + } + } } \ No newline at end of file
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/autofill/AndroidPaymentAppsFragment.java b/chrome/android/java/src/org/chromium/chrome/browser/preferences/autofill/AndroidPaymentAppsFragment.java index d02492b..a994e16 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/preferences/autofill/AndroidPaymentAppsFragment.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/preferences/autofill/AndroidPaymentAppsFragment.java
@@ -11,7 +11,6 @@ import org.chromium.chrome.R; import org.chromium.chrome.browser.payments.AndroidPaymentAppFactory; -import org.chromium.chrome.browser.payments.PaymentPreferencesUtil; import org.chromium.chrome.browser.preferences.TextMessagePreference; import java.util.Map; @@ -46,9 +45,6 @@ pref = new AndroidPaymentAppPreference(getActivity()); pref.setTitle(app.getValue().first); pref.setIcon(app.getValue().second); - pref.setDefaultValue(true); - pref.setKey( - PaymentPreferencesUtil.getAndroidPaymentAppEnabledPreferenceKey(app.getKey())); getPreferenceScreen().addPreference(pref); } // Add a divider line at the bottom of the last preference to separate it from below @@ -56,7 +52,7 @@ if (pref != null) pref.setDrawDivider(true); TextMessagePreference textPreference = new TextMessagePreference(getActivity(), null); - textPreference.setTitle(getActivity().getString(R.string.payment_apps_control_message)); + textPreference.setTitle(getActivity().getString(R.string.payment_apps_usage_message)); getPreferenceScreen().addPreference(textPreference); } }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/suggestions/SuggestionsBottomSheetContent.java b/chrome/android/java/src/org/chromium/chrome/browser/suggestions/SuggestionsBottomSheetContent.java index 0de7dac..d85b0985 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/suggestions/SuggestionsBottomSheetContent.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/suggestions/SuggestionsBottomSheetContent.java
@@ -4,7 +4,6 @@ package org.chromium.chrome.browser.suggestions; -import android.support.v7.widget.RecyclerView; import android.view.View; import org.chromium.chrome.browser.ChromeActivity; @@ -76,7 +75,7 @@ } @Override - public RecyclerView getScrollingContentView() { + public View getContentView() { return mRecyclerView; } @@ -85,6 +84,11 @@ return null; } + @Override + public int getVerticalScrollOffset() { + return mRecyclerView.computeVerticalScrollOffset(); + } + public ContextMenuManager getContextMenuManager() { return mContextMenuManager; }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/vr_shell/VrShellDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/vr_shell/VrShellDelegate.java index 14a0176..9c98d5d 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/vr_shell/VrShellDelegate.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/vr_shell/VrShellDelegate.java
@@ -722,7 +722,12 @@ if (mVrClassesWrapper == null) return false; mTabModelSelector = mActivity.getCompositorViewHolder().detachForVR(); if (mTabModelSelector == null) return false; - mVrShell = mVrClassesWrapper.createVrShell(mActivity, this, mTabModelSelector); + StrictMode.ThreadPolicy oldPolicy = StrictMode.allowThreadDiskWrites(); + try { + mVrShell = mVrClassesWrapper.createVrShell(mActivity, this, mTabModelSelector); + } finally { + StrictMode.setThreadPolicy(oldPolicy); + } return mVrShell != null; }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebApkInstaller.java b/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebApkInstaller.java index 02cc608..5e7314d 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebApkInstaller.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebApkInstaller.java
@@ -41,8 +41,8 @@ /** Monitors installation progress. */ private InstallerDelegate mInstallTask; - /** Indicates whether to install or update a WebAPK. */ - private boolean mIsInstall; + /** Whether a homescreen shortcut should be added on success. */ + private boolean mAddHomescreenShortcut; /** Weak pointer to the native WebApkInstaller. */ private long mNativePointer; @@ -70,16 +70,13 @@ } /** - * Installs a WebAPK and monitors the installation process. + * Installs WebAPK via "unsigned sources" using APK downloaded to {@link filePath}. * @param filePath File to install. * @param packageName Package name to install WebAPK at. - * @return True if the install was started. A "true" return value does not guarantee that the - * install succeeds. */ @CalledByNative - private boolean installAsyncAndMonitorInstallationFromNative( - String filePath, String packageName) { - mIsInstall = true; + private void installDownloadedWebApkAsync(String filePath, String packageName) { + mAddHomescreenShortcut = true; mWebApkPackageName = packageName; // Start monitoring the installation. @@ -91,7 +88,12 @@ mListener = createApplicationStateListener(); ApplicationStatus.registerApplicationStateListener(mListener); - return installDownloadedWebApk(filePath); + // Notify native only if the intent could not be delivered. If the intent was delivered + // successfully, notify native once InstallerDelegate has determined whether the install + // was successful. + if (!installOrUpdateDownloadedWebApkImpl(filePath)) { + notify(false); + } } /** @@ -129,21 +131,29 @@ } private void notify(boolean success) { + if (mListener != null) { + ApplicationStatus.unregisterApplicationStateListener(mListener); + mListener = null; + } + mInstallTask = null; if (mNativePointer != 0) { nativeOnInstallFinished(mNativePointer, success); } + if (mAddHomescreenShortcut && success) { + ShortcutHelper.addWebApkShortcut( + ContextUtils.getApplicationContext(), mWebApkPackageName); + } } /** - * Updates a WebAPK. + * Updates WebAPK via "unsigned sources" using APK downloaded to {@link filePath}. * @param filePath File to update. - * @return True if the update was started. A "true" return value does not guarantee that the - * update succeeds. */ @CalledByNative - private boolean updateAsyncFromNative(String filePath) { - mIsInstall = false; - return installDownloadedWebApk(filePath); + private void updateUsingDownloadedWebApkAsync(String filePath) { + // We can't use InstallerDelegate to detect whether updates are successful. If there was no + // error in delivering the intent, assume that the update will be successful. + notify(installOrUpdateDownloadedWebApkImpl(filePath)); } /** @@ -173,12 +183,10 @@ } /** - * Sends intent to Android to show prompt and install downloaded WebAPK. + * Sends intent to Android to show prompt to install or update downloaded WebAPK. * @param filePath File to install. */ - private boolean installDownloadedWebApk(String filePath) { - // TODO(pkotwicz|hanxi): For Chrome Stable figure out a different way of installing - // WebAPKs which does not involve enabling "installation from Unsigned Sources". + private boolean installOrUpdateDownloadedWebApkImpl(String filePath) { Context context = ContextUtils.getApplicationContext(); Intent intent; File pathToInstall = new File(filePath); @@ -202,23 +210,11 @@ @Override public void onInstallFinished(InstallerDelegate task, boolean success) { if (mInstallTask != task) return; - onInstallFinishedInternal(success); + WebApkInstaller.this.notify(success); } }; } - private void onInstallFinishedInternal(boolean success) { - ApplicationStatus.unregisterApplicationStateListener(mListener); - mInstallTask = null; - if (mNativePointer != 0) { - nativeOnInstallFinished(mNativePointer, success); - } - if (success && mIsInstall) { - ShortcutHelper.addWebApkShortcut(ContextUtils.getApplicationContext(), - mWebApkPackageName); - } - } - private ApplicationStatus.ApplicationStateListener createApplicationStateListener() { return new ApplicationStatus.ApplicationStateListener() { @Override @@ -233,7 +229,7 @@ */ if (newState == ApplicationState.HAS_RUNNING_ACTIVITIES && !isWebApkInstalled(mWebApkPackageName)) { - onInstallFinishedInternal(false); + WebApkInstaller.this.notify(false); return; } }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/widget/BottomSheet.java b/chrome/android/java/src/org/chromium/chrome/browser/widget/BottomSheet.java index 1bf6755..5a235403 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/widget/BottomSheet.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/widget/BottomSheet.java
@@ -11,7 +11,6 @@ import android.graphics.Region; import android.support.annotation.IntDef; import android.support.annotation.Nullable; -import android.support.v7.widget.RecyclerView; import android.util.AttributeSet; import android.view.GestureDetector; import android.view.MotionEvent; @@ -29,7 +28,6 @@ import org.chromium.chrome.browser.TabLoadStatus; import org.chromium.chrome.browser.fullscreen.ChromeFullscreenManager; import org.chromium.chrome.browser.ntp.NativePageFactory; -import org.chromium.chrome.browser.suggestions.SuggestionsBottomSheetContent; import org.chromium.chrome.browser.tab.Tab; import org.chromium.chrome.browser.tabmodel.TabModel; import org.chromium.chrome.browser.tabmodel.TabModelSelector; @@ -125,9 +123,6 @@ /** A handle to the content being shown by the sheet. */ private BottomSheetContent mSheetContent; - /** This is the default {@link BottomSheetContent} to show when the bottom sheet is opened. */ - private BottomSheetContent mSuggestionsContent; - /** A handle to the toolbar control container. */ private View mControlContainer; @@ -149,11 +144,11 @@ */ public interface BottomSheetContent { /** - * Gets the {@link RecyclerView} that holds the content to be displayed in the Chrome Home - * bottom sheet. - * @return The scrolling content view. + * Gets the {@link View} that holds the content to be displayed in the Chrome Home bottom + * sheet. + * @return The content view. */ - RecyclerView getScrollingContentView(); + View getContentView(); /** * Get the {@link View} that contains the toolbar specific to the content being displayed. @@ -164,6 +159,16 @@ */ @Nullable View getToolbarView(); + + /** + * @return The vertical scroll offset of the content view. + */ + int getVerticalScrollOffset(); + + /** + * Called to destroy the BottomSheetContent when it is no longer in use. + */ + void destroy(); } /** @@ -198,12 +203,9 @@ boolean isSheetInMaxPosition = MathUtils.areFloatsEqual(currentShownRatio, getFullRatio()); - RecyclerView scrollingView = null; - if (mSheetContent != null) scrollingView = mSheetContent.getScrollingContentView(); - // Allow the bottom sheet's content to be scrolled up without dragging the sheet down. - if (!isTouchEventInToolbar(e2) && isSheetInMaxPosition && scrollingView != null - && scrollingView.computeVerticalScrollOffset() > 0) { + if (!isTouchEventInToolbar(e2) && isSheetInMaxPosition && mSheetContent != null + && mSheetContent.getVerticalScrollOffset() > 0) { mIsScrolling = false; return false; } @@ -391,14 +393,6 @@ mBottomSheetContentContainer.addView(mPlaceholder, placeHolderParams); } - /** Initialise the default bottom sheet content. */ - public void initializeDefaultContent() { - assert mSheetContent == null; - mSuggestionsContent = new SuggestionsBottomSheetContent( - mTabModelSelector.getCurrentTab().getActivity(), this, mTabModelSelector); - showContent(mSuggestionsContent); - } - @Override public int loadUrl(LoadUrlParams params, boolean incognito) { for (BottomSheetObserver o : mObservers) o.onLoadUrl(params.getUrl()); @@ -446,6 +440,45 @@ } /** + * Gets the minimum offset of the bottom sheet. + * @return The min offset. + */ + public float getMinOffset() { + return getPeekRatio() * mContainerHeight; + } + + /** + * Gets the sheet's offset from the bottom of the screen. + * @return The sheet's distance from the bottom of the screen. + */ + public float getSheetOffsetFromBottom() { + return mContainerHeight - getTranslationY(); + } + + /** + * Show content in the bottom sheet's content area. + * @param content The {@link BottomSheetContent} to show. + */ + public void showContent(BottomSheetContent content) { + // If the desired content is already showing, do nothing. + if (mSheetContent == content) return; + + if (mSheetContent != null) { + mBottomSheetContentContainer.removeView(mSheetContent.getContentView()); + mSheetContent = null; + } + + if (content == null) { + mBottomSheetContentContainer.addView(mPlaceholder); + return; + } + + mBottomSheetContentContainer.removeView(mPlaceholder); + mSheetContent = content; + mBottomSheetContentContainer.addView(mSheetContent.getContentView()); + } + + /** * Determines if a touch event is inside the toolbar. This assumes the toolbar is the full * width of the screen and that the toolbar is at the top of the bottom sheet. * @param e The motion event to test. @@ -463,8 +496,6 @@ * A notification that the sheet is exiting the peek state into one that shows content. */ private void onSheetOpened() { - showContent(mSuggestionsContent); - for (BottomSheetObserver o : mObservers) o.onSheetOpened(); } @@ -476,29 +507,6 @@ } /** - * Show content in the bottom sheet's content area. - * @param content The {@link BottomSheetContent} to show. - */ - private void showContent(BottomSheetContent content) { - // If the desired content is already showing, do nothing. - if (mSheetContent == content) return; - - if (mSheetContent != null) { - mBottomSheetContentContainer.removeView(mSheetContent.getScrollingContentView()); - mSheetContent = null; - } - - if (content == null) { - mBottomSheetContentContainer.addView(mPlaceholder); - return; - } - - mBottomSheetContentContainer.removeView(mPlaceholder); - mSheetContent = content; - mBottomSheetContentContainer.addView(mSheetContent.getScrollingContentView()); - } - - /** * Creates an unadjusted version of a MotionEvent. * @param e The original event. * @return The unadjusted version of the event. @@ -595,22 +603,6 @@ } /** - * Gets the minimum offset of the bottom sheet. - * @return The min offset. - */ - private float getMinOffset() { - return getPeekRatio() * mContainerHeight; - } - - /** - * Gets the sheet's offset from the bottom of the screen. - * @return The sheet's distance from the bottom of the screen. - */ - private float getSheetOffsetFromBottom() { - return mContainerHeight - getTranslationY(); - } - - /** * Sets the sheet's offset relative to the bottom of the screen. * @param offset The offset that the sheet should be. */
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/widget/BottomSheetContentController.java b/chrome/android/java/src/org/chromium/chrome/browser/widget/BottomSheetContentController.java new file mode 100644 index 0000000..5fcd475 --- /dev/null +++ b/chrome/android/java/src/org/chromium/chrome/browser/widget/BottomSheetContentController.java
@@ -0,0 +1,171 @@ +// 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. + +package org.chromium.chrome.browser.widget; + +import android.content.Context; +import android.content.res.Resources; +import android.support.design.internal.BottomNavigationItemView; +import android.support.design.internal.BottomNavigationMenuView; +import android.support.design.widget.BottomNavigationView; +import android.support.design.widget.BottomNavigationView.OnNavigationItemSelectedListener; +import android.util.AttributeSet; +import android.view.MenuItem; +import android.view.View; + +import org.chromium.chrome.R; +import org.chromium.chrome.browser.bookmarks.BookmarkSheetContent; +import org.chromium.chrome.browser.download.DownloadSheetContent; +import org.chromium.chrome.browser.history.HistorySheetContent; +import org.chromium.chrome.browser.suggestions.SuggestionsBottomSheetContent; +import org.chromium.chrome.browser.tabmodel.TabModelSelector; +import org.chromium.chrome.browser.util.MathUtils; +import org.chromium.chrome.browser.widget.BottomSheet.BottomSheetContent; + +import java.lang.reflect.Field; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; +import java.util.Map.Entry; + +/** + * Displays and controls a {@link BottomNavigationView} fixed to the bottom of the + * {@link BottomSheet}. Also manages {@link BottomSheetContent} displayed in the BottomSheet. + */ +public class BottomSheetContentController extends BottomNavigationView + implements BottomSheetObserver, OnNavigationItemSelectedListener { + private BottomSheet mBottomSheet; + private TabModelSelector mTabModelSelector; + private float mDistanceBelowToolbarPx; + private int mSelectedItemId; + + private final Map<Integer, BottomSheetContent> mBottomSheetContents = new HashMap<>(); + + public BottomSheetContentController(Context context, AttributeSet atts) { + super(context, atts); + } + + /** + * Initializes the {@link BottomSheetContentController}. + * @param bottomSheet The {@link BottomSheet} associated with this bottom nav. + * @param controlContainerHeight The height of the control container in px. + * @param tabModelSelector The {@link TabModelSelector} for the application. + */ + public void init(BottomSheet bottomSheet, int controlContainerHeight, + TabModelSelector tabModelSelector) { + mBottomSheet = bottomSheet; + mBottomSheet.addObserver(this); + mTabModelSelector = tabModelSelector; + + Resources res = getContext().getResources(); + mDistanceBelowToolbarPx = controlContainerHeight + + res.getDimensionPixelOffset(R.dimen.bottom_nav_space_from_toolbar); + + setOnNavigationItemSelectedListener(this); + disableShiftingMode(); + } + + /** + * Initialize the default {@link BottomSheetContent}. + */ + public void initializeDefaultContent() { + mBottomSheet.showContent(getSheetContentForId(R.id.action_home)); + mSelectedItemId = R.id.action_home; + } + + @Override + public boolean onNavigationItemSelected(MenuItem item) { + if (mSelectedItemId == item.getItemId()) return false; + + showBottomSheetContent(item.getItemId()); + return true; + } + + @Override + public void onTransitionPeekToHalf(float transitionFraction) { + float offsetY = (mBottomSheet.getMinOffset() - mBottomSheet.getSheetOffsetFromBottom()) + + mDistanceBelowToolbarPx; + setTranslationY((int) Math.max(offsetY, 0f)); + setVisibility(MathUtils.areFloatsEqual(transitionFraction, 0f) ? View.GONE : View.VISIBLE); + } + + @Override + public void onSheetOpened() {} + + @Override + public void onSheetClosed() { + Iterator<Entry<Integer, BottomSheetContent>> contentIterator = + mBottomSheetContents.entrySet().iterator(); + while (contentIterator.hasNext()) { + Entry<Integer, BottomSheetContent> entry = contentIterator.next(); + if (entry.getKey() == R.id.action_home) continue; + + entry.getValue().destroy(); + contentIterator.remove(); + } + // TODO(twellington): determine a policy for destroying the SuggestionsBottomSheetContent. + + if (mSelectedItemId == 0 || mSelectedItemId == R.id.action_home) return; + + showBottomSheetContent(R.id.action_home); + } + + @Override + public void onLoadUrl(String url) {} + + @Override + public void onSheetOffsetChanged(float heightFraction) {} + + // TODO(twellington): remove this once the support library is updated to allow disabling + // shifting mode or determines shifting mode based on the width of the + // child views. + private void disableShiftingMode() { + BottomNavigationMenuView menuView = (BottomNavigationMenuView) getChildAt(0); + try { + Field shiftingMode = menuView.getClass().getDeclaredField("mShiftingMode"); + shiftingMode.setAccessible(true); + shiftingMode.setBoolean(menuView, false); + shiftingMode.setAccessible(false); + for (int i = 0; i < menuView.getChildCount(); i++) { + BottomNavigationItemView item = (BottomNavigationItemView) menuView.getChildAt(i); + item.setShiftingMode(false); + // Set the checked value so that the view will be updated. + item.setChecked(item.getItemData().isChecked()); + } + } catch (NoSuchFieldException | IllegalAccessException e) { + // Do nothing if reflection fails. + } + } + + private BottomSheetContent getSheetContentForId(int navItemId) { + BottomSheetContent content = mBottomSheetContents.get(navItemId); + if (content != null) return content; + + if (navItemId == R.id.action_home) { + content = new SuggestionsBottomSheetContent( + mTabModelSelector.getCurrentTab().getActivity(), mBottomSheet, + mTabModelSelector); + } else if (navItemId == R.id.action_downloads) { + content = new DownloadSheetContent(mTabModelSelector.getCurrentTab().getActivity(), + mTabModelSelector.getCurrentModel().isIncognito()); + } else if (navItemId == R.id.action_bookmarks) { + content = new BookmarkSheetContent(mTabModelSelector.getCurrentTab().getActivity()); + } else if (navItemId == R.id.action_history) { + content = new HistorySheetContent(mTabModelSelector.getCurrentTab().getActivity()); + } + mBottomSheetContents.put(navItemId, content); + return content; + } + + private void showBottomSheetContent(int navItemId) { + // There are some bugs related to programatically selecting menu items that are fixed in + // newer support library versions. + // TODO(twellington): remove this after the support library is rolled. + if (mSelectedItemId != 0) getMenu().findItem(mSelectedItemId).setChecked(false); + mSelectedItemId = navItemId; + getMenu().findItem(mSelectedItemId).setChecked(true); + + mBottomSheet.showContent(getSheetContentForId(mSelectedItemId)); + } +}
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/widget/selection/SelectableListLayout.java b/chrome/android/java/src/org/chromium/chrome/browser/widget/selection/SelectableListLayout.java index 75a6889e..8103d591 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/widget/selection/SelectableListLayout.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/widget/selection/SelectableListLayout.java
@@ -298,6 +298,24 @@ } /** + * Removes the content view from this view and returns it so that it may be re-attached + * elsewhere. + * @return The content view, which consists of the {@link RecyclerView} that holds the list of + * items, the empty view, and the loading view. + */ + public View detachContentView() { + View contentView = findViewById(R.id.list_content); + assert contentView != null; + removeView(contentView); + + // The background color is typically set on the SelectableListLayout rather than the content + // view. Set the background color for the content view so that it is not transparent. + contentView.setBackground(getBackground()); + + return contentView; + } + + /** * Called when a search is starting. */ public void onStartSearch() {
diff --git a/chrome/android/java/strings/android_chrome_strings.grd b/chrome/android/java/strings/android_chrome_strings.grd index f6da2cc..2d783596 100644 --- a/chrome/android/java/strings/android_chrome_strings.grd +++ b/chrome/android/java/strings/android_chrome_strings.grd
@@ -298,8 +298,8 @@ <message name="IDS_PAYMENT_NO_APPS_SUMMARY" desc="Summary of the preference to list the payment apps on device when no payments apps installed."> No supported apps installed </message> - <message name="IDS_PAYMENT_APPS_CONTROL_MESSAGE" desc="Message to explain what the user controls by toggling the switch of the payment app preference."> - On some websites, you can pay with supported payment apps. Choose which apps to use in Chrome. + <message name="IDS_PAYMENT_APPS_USAGE_MESSAGE" desc="Message to explain the usage of the listed payment apps."> + On some websites, you can pay with above supported payment apps on your device. </message> <message name="IDS_AUTOFILL_CREDIT_CARDS_TITLE" desc="Title of the preference to list the user's credit cards that can be automatically filled into web page forms. [CHAR-LIMIT=32]"> Credit cards @@ -1877,7 +1877,7 @@ No downloads found </message> <message name="IDS_DOWNLOAD_MANAGER_OFFLINE_HEADER_TITLE" desc="Text explaining the number of suggested offline pages."> - %1$s Chrome suggestions + <ph name="NUMBER_OF_SUGGESTIONS">%1$s<ex>10</ex></ph> Chrome suggestions </message> <message name="IDS_DOWNLOAD_MANAGER_OFFLINE_HEADER_DESCRIPTION" desc="Text containing the offline pages description."> Pages updated regularly @@ -2616,6 +2616,12 @@ <message name="IDS_PHYSICAL_WEB_SHARE_ACTIVITY_TITLE" desc="Title of the Physical Web Share activity that will appear in the Android share dialog."> Physical Web </message> + <message name="IDS_PHYSICAL_WEB_BROADCAST_NOTIFICATION" desc="The message that will be displayed when a Physical Web URL is broadcasted successfully."> + Website is broadcasting + </message> + <message name="IDS_PHYSICAL_WEB_STOP_BROADCAST" desc="The label for the button within a notification that stops a Physical Web broadcast."> + Stop + </message> <!-- WebUsb Picker UI strings --> <message name="IDS_USB_CHOOSER_DIALOG_PROMPT" desc="The text that is used to introduce the USB chooser dialog to the user.">
diff --git a/chrome/android/java_sources.gni b/chrome/android/java_sources.gni index 0f5e903..00911f8 100644 --- a/chrome/android/java_sources.gni +++ b/chrome/android/java_sources.gni
@@ -85,6 +85,7 @@ "java/src/org/chromium/chrome/browser/autofill/PasswordGenerationAdapter.java", "java/src/org/chromium/chrome/browser/autofill/PasswordGenerationPopupBridge.java", "java/src/org/chromium/chrome/browser/autofill/PersonalDataManager.java", + "java/src/org/chromium/chrome/browser/autofill/PhoneNumberUtil.java", "java/src/org/chromium/chrome/browser/banners/AppBannerManager.java", "java/src/org/chromium/chrome/browser/banners/AppData.java", "java/src/org/chromium/chrome/browser/banners/AppDetailsDelegate.java", @@ -115,6 +116,7 @@ "java/src/org/chromium/chrome/browser/bookmarks/BookmarkRow.java", "java/src/org/chromium/chrome/browser/bookmarks/BookmarkSearchRow.java", "java/src/org/chromium/chrome/browser/bookmarks/BookmarkSearchView.java", + "java/src/org/chromium/chrome/browser/bookmarks/BookmarkSheetContent.java", "java/src/org/chromium/chrome/browser/bookmarks/BookmarkUIObserver.java", "java/src/org/chromium/chrome/browser/bookmarks/BookmarkUIState.java", "java/src/org/chromium/chrome/browser/bookmarks/BookmarkUndoController.java", @@ -319,6 +321,7 @@ "java/src/org/chromium/chrome/browser/download/DownloadServiceDelegate.java", "java/src/org/chromium/chrome/browser/download/DownloadSharedPreferenceEntry.java", "java/src/org/chromium/chrome/browser/download/DownloadSharedPreferenceHelper.java", + "java/src/org/chromium/chrome/browser/download/DownloadSheetContent.java", "java/src/org/chromium/chrome/browser/download/DownloadSnackbarController.java", "java/src/org/chromium/chrome/browser/download/DownloadUmaStatsEntry.java", "java/src/org/chromium/chrome/browser/download/DownloadUtils.java", @@ -406,6 +409,7 @@ "java/src/org/chromium/chrome/browser/history/HistoryItem.java", "java/src/org/chromium/chrome/browser/history/HistoryItemView.java", "java/src/org/chromium/chrome/browser/history/HistoryManager.java", + "java/src/org/chromium/chrome/browser/history/HistorySheetContent.java", "java/src/org/chromium/chrome/browser/history/HistoryManagerToolbar.java", "java/src/org/chromium/chrome/browser/history/HistoryManagerUtils.java", "java/src/org/chromium/chrome/browser/history/HistoryProvider.java", @@ -759,7 +763,6 @@ "java/src/org/chromium/chrome/browser/physicalweb/PhysicalWebDiagnosticsPage.java", "java/src/org/chromium/chrome/browser/physicalweb/PhysicalWebShareActivity.java", "java/src/org/chromium/chrome/browser/physicalweb/PhysicalWebUma.java", - "java/src/org/chromium/chrome/browser/physicalweb/PwCollection.java", "java/src/org/chromium/chrome/browser/physicalweb/PwsClient.java", "java/src/org/chromium/chrome/browser/physicalweb/PwsClientImpl.java", "java/src/org/chromium/chrome/browser/physicalweb/PwsResult.java", @@ -1123,6 +1126,7 @@ "java/src/org/chromium/chrome/browser/widget/AlertDialogEditText.java", "java/src/org/chromium/chrome/browser/widget/AlwaysDismissedDialog.java", "java/src/org/chromium/chrome/browser/widget/BottomSheet.java", + "java/src/org/chromium/chrome/browser/widget/BottomSheetContentController.java", "java/src/org/chromium/chrome/browser/widget/BottomSheetObserver.java", "java/src/org/chromium/chrome/browser/widget/BoundedLinearLayout.java", "java/src/org/chromium/chrome/browser/widget/ClipDrawableProgressBar.java", @@ -1391,8 +1395,6 @@ "javatests/src/org/chromium/chrome/browser/partnercustomizations/PartnerDisableIncognitoModeUnitTest.java", "javatests/src/org/chromium/chrome/browser/partnercustomizations/PartnerHomepageIntegrationTest.java", "javatests/src/org/chromium/chrome/browser/partnercustomizations/PartnerHomepageUnitTest.java", - "javatests/src/org/chromium/chrome/browser/physicalweb/MockPwsClient.java", - "javatests/src/org/chromium/chrome/browser/physicalweb/UrlManagerTest.java", "javatests/src/org/chromium/chrome/browser/policy/CombinedPolicyProviderTest.java", "javatests/src/org/chromium/chrome/browser/payments/CurrencyFormatterTest.java", "javatests/src/org/chromium/chrome/browser/payments/PaymentRequestAbortTest.java", @@ -1610,9 +1612,11 @@ "junit/src/org/chromium/chrome/browser/omaha/VersionNumberTest.java", "junit/src/org/chromium/chrome/browser/payments/AutofillContactTest.java", "junit/src/org/chromium/chrome/browser/payments/AutofillContactUnitTest.java", + "junit/src/org/chromium/chrome/browser/physicalweb/MockPwsClient.java", "junit/src/org/chromium/chrome/browser/physicalweb/PwsClientImplTest.java", "junit/src/org/chromium/chrome/browser/physicalweb/PwsResultTest.java", "junit/src/org/chromium/chrome/browser/physicalweb/UrlInfoTest.java", + "junit/src/org/chromium/chrome/browser/physicalweb/UrlManagerTest.java", "junit/src/org/chromium/chrome/browser/snackbar/SnackbarCollectionUnitTest.java", "junit/src/org/chromium/chrome/browser/suggestions/TileGroupTest.java", "junit/src/org/chromium/chrome/browser/suggestions/TileTest.java",
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/omnibox/OmniboxUrlEmphasizerTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/omnibox/OmniboxUrlEmphasizerTest.java index fc55a95..b6b93ba 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/omnibox/OmniboxUrlEmphasizerTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/omnibox/OmniboxUrlEmphasizerTest.java
@@ -320,6 +320,22 @@ } /** + * Verify that an empty URL is processed correctly by + * OmniboxUrlEmphasizer.emphasizeUrl(). Regression test for crbug.com/700769 + */ + @UiThreadTest + @MediumTest + @Feature({"Browser", "Main"}) + public void testEmptyUrl() { + Spannable url = new SpannableStringBuilder(""); + OmniboxUrlEmphasizer.emphasizeUrl( + url, mResources, mProfile, ConnectionSecurityLevel.NONE, false, true, true); + EmphasizedUrlSpanHelper[] spans = EmphasizedUrlSpanHelper.getSpansForEmphasizedUrl(url); + + assertEquals("Unexpected number of spans:", 0, spans.length); + } + + /** * Verify that the origin index is calculated correctly for HTTP and HTTPS * URLs by OmniboxUrlEmphasizer.getOriginEndIndex(). */
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/payments/PaymentRequestBillingAddressTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/payments/PaymentRequestBillingAddressTest.java index cd6bc101..5015d36a 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/payments/PaymentRequestBillingAddressTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/payments/PaymentRequestBillingAddressTest.java
@@ -38,21 +38,21 @@ AutofillTestHelper helper = new AutofillTestHelper(); String profile1 = helper.setProfile(new AutofillProfile("", "https://example.com", true, "Jon Doe", "Google", "340 Main St", "CA", "Los Angeles", "", "90291", "", "US", - "310-310-6000", "jon.doe@gmail.com", "en-US")); + "650-253-0000", "jon.doe@gmail.com", "en-US")); helper.setCreditCard(new CreditCard("", "https://example.com", true, true, "Jon Doe", "4111111111111111", "1111", "12", "2050", "visa", R.drawable.pr_visa, profile1, "" /* serverId */)); String profile2 = helper.setProfile(new AutofillProfile("", "https://example.com", true, "Rob Doe", "Google", "340 Main St", "CA", "Los Angeles", "", "90291", "", "US", - "310-310-6000", "jon.doe@gmail.com", "en-US")); + "650-253-0000", "jon.doe@gmail.com", "en-US")); String profile3 = helper.setProfile(new AutofillProfile("", "https://example.com", true, "Tom Doe", "Google", "340 Main St", "CA", "Los Angeles", "", "90291", "", "US", - "310-310-6000", "jon.doe@gmail.com", "en-US")); + "650-253-0000", "jon.doe@gmail.com", "en-US")); // Incomplete profile (invalid address). String profile4 = helper.setProfile(new AutofillProfile("", "https://example.com", true, "Bart Doe", "Google", "340 Main St", "CA", "", "", "90291", "", "US", - "310-310-6000", "jon.doe@gmail.com", "en-US")); + "650-253-0000", "jon.doe@gmail.com", "en-US")); // Incomplete profile (missing phone number) String profile5 = helper.setProfile(new AutofillProfile("", "https://example.com", true, @@ -61,7 +61,7 @@ // Incomplete profile (missing recipient). String profile6 = helper.setProfile(new AutofillProfile("", "https://example.com", true, "", - "Google", "340 Main St", "CA", "Los Angeles", "", "90291", "", "US", "310-310-6000", + "Google", "340 Main St", "CA", "Los Angeles", "", "90291", "", "US", "650-253-0000", "jon.doe@gmail.com", "en-US")); // Incomplete profile (need more information). @@ -71,7 +71,7 @@ // Profile with empty street address (should not be presented to user). String profile8 = helper.setProfile(new AutofillProfile("", "https://example.com", true, "Jerry Doe", "Google", "" /* streetAddress */, "CA", "Los Angeles", "", "90291", "", - "US", "310-310-6000", "jerry.doe@gmail.com", "en-US")); + "US", "650-253-0000", "jerry.doe@gmail.com", "en-US")); // This card has no billing address selected. helper.setCreditCard(new CreditCard("", "https://example.com", true, true, "Jane Doe", @@ -251,7 +251,7 @@ setSpinnerSelectionsInCardEditorAndWait( new int[] {DECEMBER, NEXT_YEAR, ADD_BILLING_ADDRESS}, mReadyToEdit); setTextInEditorAndWait(new String[] {"Seb Doe", "Google", "340 Main St", "Los Angeles", - "CA", "90291", "999-999-9999"}, mEditorTextUpdate); + "CA", "90291", "650-253-0000"}, mEditorTextUpdate); clickInEditorAndWait(R.id.payments_edit_done_button, mReadyToEdit); // There should be 9 suggestions, the 7 initial addresses, the newly added address and the @@ -287,7 +287,7 @@ clickInShippingSummaryAndWait(R.id.payments_section, mReadyForInput); clickInShippingAddressAndWait(R.id.payments_add_option_button, mReadyToEdit); setTextInEditorAndWait(new String[] {"Seb Doe", "Google", "340 Main St", "Los Angeles", - "CA", "90291", "999-999-9999"}, mEditorTextUpdate); + "CA", "90291", "650-253-0000"}, mEditorTextUpdate); clickInEditorAndWait(R.id.payments_edit_done_button, mReadyToPay); // Navigate to the card editor UI. @@ -328,7 +328,7 @@ // editor. setSpinnerSelectionsInCardEditorAndWait(new int[] {DECEMBER, NEXT_YEAR, 4}, mReadyToEdit); setTextInEditorAndWait(new String[] {"Lisa Doh", "Google", "340 Main St", "Los Angeles", - "CA", "90291", "999-999-9999"}, mEditorTextUpdate); + "CA", "90291", "650-253-0000"}, mEditorTextUpdate); clickInEditorAndWait(R.id.payments_edit_done_button, mReadyToEdit); // The newly completed address must be selected and put at the top of the dropdown.
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/payments/PaymentRequestDynamicShippingSingleAddressTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/payments/PaymentRequestDynamicShippingSingleAddressTest.java index ce0775cc..e4e7dfe 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/payments/PaymentRequestDynamicShippingSingleAddressTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/payments/PaymentRequestDynamicShippingSingleAddressTest.java
@@ -36,7 +36,7 @@ // The user has a shipping address on disk. String billingAddressId = helper.setProfile(new AutofillProfile("", "https://example.com", true, "Jon Doe", "Google", "340 Main St", "CA", "Los Angeles", "", "90291", "", - "US", "555-555-5555", "", "en-US")); + "US", "650-253-0000", "", "en-US")); helper.setCreditCard(new CreditCard("", "https://example.com", true, true, "Jon Doe", "4111111111111111", "1111", "12", "2050", "visa", R.drawable.pr_visa, billingAddressId, "" /* serverId */)); @@ -152,13 +152,13 @@ clickInShippingSummaryAndWait(R.id.payments_section, mReadyForInput); clickInShippingAddressAndWait(R.id.payments_add_option_button, mReadyToEdit); setTextInEditorAndWait(new String[] {"Bob", "Google", "1600 Amphitheatre Pkwy", - "Mountain View", "CA", "94043", "999-999-9999"}, mEditorTextUpdate); + "Mountain View", "CA", "94043", "650-253-0000"}, mEditorTextUpdate); clickInEditorAndWait(R.id.payments_edit_done_button, mReadyToPay); clickAndWait(R.id.button_primary, mReadyForUnmaskInput); setTextInCardUnmaskDialogAndWait(R.id.card_unmask_input, "123", mReadyToUnmask); clickCardUnmaskButtonAndWait(DialogInterface.BUTTON_POSITIVE, mDismissed); expectResultContains(new String[] {"Bob", "Google", "1600 Amphitheatre Pkwy", - "Mountain View", "CA", "94043", "999-999-9999"}); + "Mountain View", "CA", "94043", "+1 650-253-0000"}); } /** Quickly pressing "add address" and then [X] should not crash. */
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/payments/PaymentRequestFreeShippingTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/payments/PaymentRequestFreeShippingTest.java index 1f12a41..626282a 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/payments/PaymentRequestFreeShippingTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/payments/PaymentRequestFreeShippingTest.java
@@ -35,7 +35,7 @@ // The user has a shipping address on disk. String billingAddressId = helper.setProfile(new AutofillProfile("", "https://example.com", true, "Jon Doe", "Google", "340 Main St", "CA", "Los Angeles", "", "90291", "", - "US", "555-555-5555", "", "en-US")); + "US", "650-253-0000", "", "en-US")); helper.setCreditCard(new CreditCard("", "https://example.com", true, true, "Jon Doe", "4111111111111111", "1111", "12", "2050", "visa", R.drawable.pr_visa, billingAddressId, "" /* serverId */)); @@ -78,13 +78,13 @@ clickInShippingSummaryAndWait(R.id.payments_section, mReadyForInput); clickInShippingAddressAndWait(R.id.payments_add_option_button, mReadyToEdit); setTextInEditorAndWait(new String[] {"Bob", "Google", "1600 Amphitheatre Pkwy", - "Mountain View", "CA", "94043", "999-999-9999"}, mEditorTextUpdate); + "Mountain View", "CA", "94043", "650-253-0000"}, mEditorTextUpdate); clickInEditorAndWait(R.id.payments_edit_done_button, mReadyToPay); clickAndWait(R.id.button_primary, mReadyForUnmaskInput); setTextInCardUnmaskDialogAndWait(R.id.card_unmask_input, "123", mReadyToUnmask); clickCardUnmaskButtonAndWait(DialogInterface.BUTTON_POSITIVE, mDismissed); expectResultContains(new String[] {"Bob", "Google", "1600 Amphitheatre Pkwy", - "Mountain View", "CA", "94043", "999-999-9999"}); + "Mountain View", "CA", "94043", "+1 650-253-0000"}); } /** Change the country in the spinner, add a valid address, and complete the transaction. */ @@ -97,13 +97,13 @@ clickInShippingAddressAndWait(R.id.payments_add_option_button, mReadyToEdit); setSpinnerSelectionInEditorAndWait(0 /* Afghanistan */, mReadyToEdit); setTextInEditorAndWait(new String[] {"Alice", "Supreme Court", "Airport Road", "Kabul", - "1043", "999-999-9999"}, mEditorTextUpdate); + "1043", "650-253-0000"}, mEditorTextUpdate); clickInEditorAndWait(R.id.payments_edit_done_button, mReadyToPay); clickAndWait(R.id.button_primary, mReadyForUnmaskInput); setTextInCardUnmaskDialogAndWait(R.id.card_unmask_input, "123", mReadyToUnmask); clickCardUnmaskButtonAndWait(DialogInterface.BUTTON_POSITIVE, mDismissed); - expectResultContains(new String[] {"Alice", "Supreme Court", "Airport Road", "Kabul", - "1043", "999-999-9999"}); + expectResultContains(new String[] { + "Alice", "Supreme Court", "Airport Road", "Kabul", "1043", "+1 650-253-0000"}); } /** Quickly pressing on "add address" and then [X] should not crash. */
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/payments/PaymentRequestIncompleteContactDetailsAndFreeShippingTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/payments/PaymentRequestIncompleteContactDetailsAndFreeShippingTest.java index b35d82a..1949e77 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/payments/PaymentRequestIncompleteContactDetailsAndFreeShippingTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/payments/PaymentRequestIncompleteContactDetailsAndFreeShippingTest.java
@@ -54,18 +54,17 @@ assertTrue(getShippingAddressSuggestionLabel(0).contains("Phone number required")); clickInShippingAddressAndWait(R.id.payments_first_radio_button, mReadyToEdit); setTextInEditorAndWait(new String[] {"Jon Doe", "Google", "340 Main St", "Los Angeles", - "CA", "90291", "555-555-5555"}, - mEditorTextUpdate); + "CA", "90291", "650-253-0000"}, mEditorTextUpdate); // The contact is now complete, but not selected. clickInEditorAndWait(R.id.payments_edit_done_button, mReadyForInput); // We select it. clickInContactInfoAndWait(R.id.payments_section, mReadyForInput); - assertEquals( - "Jon Doe\n555-555-5555\njon.doe@google.com", getContactDetailsSuggestionLabel(0)); + assertEquals("Jon Doe\n+1 650-253-0000\njon.doe@google.com", + getContactDetailsSuggestionLabel(0)); clickInContactInfoAndWait(R.id.payments_first_radio_button, mReadyToPay); clickAndWait(R.id.button_primary, mDismissed); - expectResultContains(new String[] {"Jon Doe", "555-555-5555", "jon.doe@google.com"}); + expectResultContains(new String[] {"Jon Doe", "+1 650-253-0000", "jon.doe@google.com"}); } /** Add a shipping address with valid data and see that the contacts section is updated. */ @@ -83,21 +82,21 @@ // Add a new Shipping Address and see that the contact section updates. clickInShippingAddressAndWait(R.id.payments_add_option_button, mReadyToEdit); setTextInEditorAndWait(new String[] {"Jane Doe", "Edge Corp.", "111 Wall St.", "New York", - "NY", "10110", "555-212-2222"}, - mEditorTextUpdate); + "NY", "10110", "650-253-0000"}, mEditorTextUpdate); clickInEditorAndWait(R.id.payments_edit_done_button, mReadyForInput); assertEquals("Jon Doe\njon.doe@google.com\nPhone number required", getContactDetailsSuggestionLabel(0)); - assertEquals("Jane Doe\n555-212-2222\nEmail required", getContactDetailsSuggestionLabel(1)); + assertEquals( + "Jane Doe\n+1 650-253-0000\nEmail required", getContactDetailsSuggestionLabel(1)); // Now edit the first contact and pay. clickInContactInfoAndWait(R.id.payments_section, mReadyForInput); clickInContactInfoAndWait(R.id.payments_first_radio_button, mReadyToEdit); setTextInEditorAndWait( - new String[] {"Jon Doe", "514-212-2222", "jon.doe@google.com"}, mEditorTextUpdate); + new String[] {"Jon Doe", "650-253-0000", "jon.doe@google.com"}, mEditorTextUpdate); clickInEditorAndWait(R.id.payments_edit_done_button, mReadyToPay); clickAndWait(R.id.button_primary, mDismissed); - expectResultContains(new String[] {"Jon Doe", "514-212-2222", "jon.doe@google.com"}); + expectResultContains(new String[] {"Jon Doe", "+1 650-253-0000", "jon.doe@google.com"}); } }
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/payments/PaymentRequestJourneyLoggerTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/payments/PaymentRequestJourneyLoggerTest.java index 8d619d9..e007e41 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/payments/PaymentRequestJourneyLoggerTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/payments/PaymentRequestJourneyLoggerTest.java
@@ -32,14 +32,14 @@ // The user has a shipping address and a credit card associated with that address on disk. String mBillingAddressId = mHelper.setProfile(new AutofillProfile("", "https://example.com", true, "Jon Doe", "Google", "340 Main St", "CA", "Los Angeles", "", "90291", "", - "US", "555-555-5555", "", "en-US")); + "US", "650-253-0000", "", "en-US")); mHelper.setCreditCard(new CreditCard("", "https://example.com", true, true, "Jon Doe", "4111111111111111", "1111", "12", "2050", "visa", R.drawable.pr_visa, mBillingAddressId, "" /* serverId */)); // The user also has an incomplete address and an incomplete card saved. String mIncompleteAddressId = mHelper.setProfile(new AutofillProfile("", "https://example.com", true, "In Complete", "Google", "344 Main St", "CA", "", "", - "90291", "", "US", "555-555-5555", "", "en-US")); + "90291", "", "US", "650-253-0000", "", "en-US")); mHelper.setCreditCard(new CreditCard("", "https://example.com", true, true, "", "4111111111111111", "1111", "18", "2075", "visa", R.drawable.pr_visa, mIncompleteAddressId, "" /* serverId */)); @@ -157,10 +157,8 @@ // Add a new shipping address. clickInShippingAddressAndWait(R.id.payments_add_option_button, mReadyToEdit); setSpinnerSelectionInEditorAndWait(0 /* Afghanistan */, mReadyToEdit); - setTextInEditorAndWait( - new String[] {"Alice", "Supreme Court", "Airport Road", "Kabul", "1043", - "999-999-9999"}, - mEditorTextUpdate); + setTextInEditorAndWait(new String[] {"Alice", "Supreme Court", "Airport Road", "Kabul", + "1043", "650-253-0000"}, mEditorTextUpdate); clickInEditorAndWait(R.id.payments_edit_done_button, mReadyToPay); // Complete the transaction.
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/payments/PaymentRequestMetricsTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/payments/PaymentRequestMetricsTest.java index 9c23333..5f47ee9 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/payments/PaymentRequestMetricsTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/payments/PaymentRequestMetricsTest.java
@@ -35,7 +35,7 @@ // The user has a shipping address and a credit card associated with that address on disk. String mBillingAddressId = mHelper.setProfile(new AutofillProfile("", "https://example.com", true, "Jon Doe", "Google", "340 Main St", "CA", "Los Angeles", "", "90291", "", - "US", "555-555-5555", "", "en-US")); + "US", "650-253-0000", "", "en-US")); mHelper.setCreditCard(new CreditCard("", "https://example.com", true, true, "Jon Doe", "4111111111111111", "1111", "12", "2050", "visa", R.drawable.pr_visa, mBillingAddressId, "" /* serverId */)); @@ -281,7 +281,7 @@ clickInShippingSummaryAndWait(R.id.payments_section, mReadyForInput); clickInShippingAddressAndWait(R.id.payments_add_option_button, mReadyToEdit); setTextInEditorAndWait(new String[] {"Seb Doe", "Google", "340 Main St", "Los Angeles", - "CA", "90291", "555-555-5555"}, mEditorTextUpdate); + "CA", "90291", "650-253-0000"}, mEditorTextUpdate); clickInEditorAndWait(R.id.payments_edit_done_button, mReadyToPay); // Make sure "Shown" is still logged only once.
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/payments/PaymentRequestNoShippingTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/payments/PaymentRequestNoShippingTest.java index 284a1780..e2d3884 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/payments/PaymentRequestNoShippingTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/payments/PaymentRequestNoShippingTest.java
@@ -34,7 +34,7 @@ AutofillTestHelper helper = new AutofillTestHelper(); String billingAddressId = helper.setProfile(new AutofillProfile("", "https://example.com", true, "Jon Doe", "Google", "340 Main St", "CA", "Los Angeles", "", "90291", "", - "US", "310-310-6000", "jon.doe@gmail.com", "en-US")); + "US", "650-253-0000", "jon.doe@gmail.com", "en-US")); helper.setCreditCard(new CreditCard("", "https://example.com", true, true, "Jon Doe", "4111111111111111", "1111", "12", "2050", "visa", R.drawable.pr_visa, billingAddressId, "" /* serverId */)); @@ -183,7 +183,7 @@ mReadyToEdit); setTextInEditorAndWait(new String[] {"Bob", "Google", "1600 Amphitheatre Pkwy", - "Mountain View", "CA", "94043", "999-999-9999"}, mEditorTextUpdate); + "Mountain View", "CA", "94043", "650-253-0000"}, mEditorTextUpdate); clickInEditorAndWait(R.id.payments_edit_done_button, mReadyToEdit); clickInCardEditorAndWait(R.id.payments_edit_done_button, mReadyToPay); @@ -191,7 +191,7 @@ setTextInCardUnmaskDialogAndWait(R.id.card_unmask_input, "123", mReadyToUnmask); clickCardUnmaskButtonAndWait(DialogInterface.BUTTON_POSITIVE, mDismissed); expectResultContains(new String[] {"5454545454545454", "12", "Bob", "Google", - "1600 Amphitheatre Pkwy", "Mountain View", "CA", "94043", "999-999-9999"}); + "1600 Amphitheatre Pkwy", "Mountain View", "CA", "94043", "+1 650-253-0000"}); } /** Quickly pressing on "add card" and then [X] should not crash. */
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/payments/PaymentRequestShippingAddressTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/payments/PaymentRequestShippingAddressTest.java index 713044e..c2b4a5a 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/payments/PaymentRequestShippingAddressTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/payments/PaymentRequestShippingAddressTest.java
@@ -106,12 +106,12 @@ clickInShippingSummaryAndWait(R.id.payments_section, mReadyForInput); clickInShippingAddressAndWait(R.id.payments_add_option_button, mReadyToEdit); setTextInEditorAndWait(new String[] {"Seb Doe", "Google", "340 Main St", "Los Angeles", - "CA", "90291", "555-555-5555"}, mEditorTextUpdate); + "CA", "90291", "650-253-0000"}, mEditorTextUpdate); clickInEditorAndWait(R.id.payments_edit_done_button, mReadyToPay); // Make sure that the shipping label does not include the country. assertTrue(getShippingAddressOptionRowAtIndex(0).getLabelText().toString().equals( - "Seb Doe\nGoogle, 340 Main St, Los Angeles, CA 90291\n555-555-5555")); + "Seb Doe\nGoogle, 340 Main St, Los Angeles, CA 90291\n+1 650-253-0000")); } /**
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/suggestions/SuggestionsBottomSheetTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/suggestions/SuggestionsBottomSheetTest.java index 641ae3a5..2781ecb 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/suggestions/SuggestionsBottomSheetTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/suggestions/SuggestionsBottomSheetTest.java
@@ -11,6 +11,7 @@ import android.support.v7.widget.RecyclerView.ViewHolder; import android.view.MotionEvent; +import org.chromium.base.ThreadUtils; import org.chromium.base.test.util.RetryOnFailure; import org.chromium.chrome.browser.ntp.cards.ItemViewType; import org.chromium.chrome.test.BottomSheetTestCaseBase; @@ -46,7 +47,7 @@ @MediumTest public void testContextMenu() throws InterruptedException { SuggestionsRecyclerView recyclerView = - (SuggestionsRecyclerView) getBottomSheetContent().getScrollingContentView(); + (SuggestionsRecyclerView) getBottomSheetContent().getContentView(); ViewHolder firstCardViewHolder = RecyclerViewTestUtils.waitForView(recyclerView, 2); assertEquals(firstCardViewHolder.getItemViewType(), ItemViewType.SNIPPET); @@ -56,7 +57,13 @@ TestTouchUtils.longClickView(getInstrumentation(), firstCardViewHolder.itemView); assertTrue(recyclerView.onInterceptTouchEvent(createTapEvent())); - getActivity().closeContextMenu(); + ThreadUtils.runOnUiThreadBlocking(new Runnable() { + @Override + public void run() { + getActivity().closeContextMenu(); + } + }); + assertFalse(recyclerView.onInterceptTouchEvent(createTapEvent())); }
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/physicalweb/MockPwsClient.java b/chrome/android/junit/src/org/chromium/chrome/browser/physicalweb/MockPwsClient.java similarity index 95% rename from chrome/android/javatests/src/org/chromium/chrome/browser/physicalweb/MockPwsClient.java rename to chrome/android/junit/src/org/chromium/chrome/browser/physicalweb/MockPwsClient.java index c52b276e..de82c78 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/physicalweb/MockPwsClient.java +++ b/chrome/android/junit/src/org/chromium/chrome/browser/physicalweb/MockPwsClient.java
@@ -77,8 +77,7 @@ * @param fetchIconCallback The callback to be run when the icon is received. */ @Override - public void fetchIcon(final String iconUrl, - final FetchIconCallback fetchIconCallback) { + public void fetchIcon(final String iconUrl, final FetchIconCallback fetchIconCallback) { mFetchIconCalls.add(iconUrl); fetchIconCallback.onIconReceived(iconUrl, mIconBitmaps.remove(0)); }
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/physicalweb/UrlManagerTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/physicalweb/UrlManagerTest.java similarity index 76% rename from chrome/android/javatests/src/org/chromium/chrome/browser/physicalweb/UrlManagerTest.java rename to chrome/android/junit/src/org/chromium/chrome/browser/physicalweb/UrlManagerTest.java index 8762260..d6668b2 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/physicalweb/UrlManagerTest.java +++ b/chrome/android/junit/src/org/chromium/chrome/browser/physicalweb/UrlManagerTest.java
@@ -4,26 +4,41 @@ package org.chromium.chrome.browser.physicalweb; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + import android.content.SharedPreferences; -import android.support.test.filters.SmallTest; -import android.test.InstrumentationTestCase; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; + +import org.robolectric.RuntimeEnvironment; +import org.robolectric.annotation.Config; +import org.robolectric.shadows.ShadowLooper; import org.chromium.base.ContextUtils; import org.chromium.base.test.util.DisabledTest; import org.chromium.base.test.util.FlakyTest; import org.chromium.base.test.util.RetryOnFailure; -import org.chromium.content.browser.test.util.Criteria; -import org.chromium.content.browser.test.util.CriteriaHelper; +import org.chromium.testing.local.LocalRobolectricTestRunner; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.locks.Condition; +import java.util.concurrent.locks.Lock; +import java.util.concurrent.locks.ReentrantLock; /** * Tests for {@link UrlManager}. */ -public class UrlManagerTest extends InstrumentationTestCase { +@RunWith(LocalRobolectricTestRunner.class) +@Config(manifest = Config.NONE) +public class UrlManagerTest { private static final String URL1 = "https://example.com/"; private static final String TITLE1 = "Example"; private static final String DESC1 = "Example Website"; @@ -40,13 +55,15 @@ private static final int PHYSICAL_WEB_OFF = 0; private static final int PHYSICAL_WEB_ON = 1; private static final int PHYSICAL_WEB_ONBOARDING = 2; + private static final double EPSILON = .001; private UrlManager mUrlManager = null; private MockPwsClient mMockPwsClient = null; - @Override - protected void setUp() throws Exception { - super.setUp(); - ContextUtils.getAppSharedPreferences().edit() + @Before + public void setUp() { + ContextUtils.initApplicationContextForTests(RuntimeEnvironment.application); + ContextUtils.getAppSharedPreferences() + .edit() .putInt(PREF_PHYSICAL_WEB, PHYSICAL_WEB_ON) .apply(); UrlManager.clearPrefsForTesting(); @@ -88,13 +105,13 @@ } private void setOnboarding() { - ContextUtils.getAppSharedPreferences().edit() + ContextUtils.getAppSharedPreferences() + .edit() .putInt(PREF_PHYSICAL_WEB, PHYSICAL_WEB_ONBOARDING) .apply(); } - @SmallTest - @RetryOnFailure + @Test public void testAddUrlAfterClearAllUrlsWorks() { addPwsResult1(); addPwsResult2(); @@ -102,25 +119,24 @@ addPwsResult2(); addUrlInfo1(); addUrlInfo2(); - getInstrumentation().waitForIdleSync(); + ShadowLooper.runUiThreadTasksIncludingDelayedTasks(); mUrlManager.clearAllUrls(); // Add some more URLs...this should not crash if we cleared correctly. addUrlInfo1(); addUrlInfo2(); - getInstrumentation().waitForIdleSync(); + ShadowLooper.runUiThreadTasksIncludingDelayedTasks(); List<UrlInfo> urlInfos = mUrlManager.getUrls(); assertEquals(2, urlInfos.size()); } - @SmallTest - @RetryOnFailure + @Test public void testClearNearbyUrlsWorks() { addPwsResult1(); addPwsResult2(); addUrlInfo1(); addUrlInfo2(); - getInstrumentation().waitForIdleSync(); + ShadowLooper.runUiThreadTasksIncludingDelayedTasks(); mUrlManager.clearNearbyUrls(); @@ -137,7 +153,7 @@ assertFalse(mUrlManager.containsInAnyCache(URL2)); } - @SmallTest + @Test @RetryOnFailure public void testAddUrlGarbageCollectsForSize() throws Exception { // Add and remove 101 URLs, making sure one is clearly slightly older than the others. @@ -158,7 +174,7 @@ assertTrue(mUrlManager.containsInAnyCache(URL1 + mUrlManager.getMaxCacheSize())); } - @SmallTest + @Test public void testAddUrlGarbageCollectsForAge() throws Exception { // Add a URL with a phony timestamp. addEmptyPwsResult(); @@ -175,7 +191,7 @@ assertTrue(mUrlManager.containsInAnyCache(URL2)); } - @SmallTest + @Test public void testAddUrlUpdatesCache() throws Exception { addEmptyPwsResult(); addEmptyPwsResult(); @@ -184,22 +200,19 @@ mUrlManager.addUrl(urlInfo); List<UrlInfo> urls = mUrlManager.getUrls(true); assertEquals(1, urls.size()); - assertEquals(urlInfo.getDistance(), urls.get(0).getDistance()); + assertEquals(urlInfo.getDistance(), urls.get(0).getDistance(), EPSILON); assertEquals(urlInfo.getDeviceAddress(), urls.get(0).getDeviceAddress()); assertEquals(urlInfo.getFirstSeenTimestamp(), urls.get(0).getFirstSeenTimestamp()); - urlInfo = new UrlInfo(URL1) - .setDistance(100.0) - .setDeviceAddress("00:11:22:33:AA:BB"); + urlInfo = new UrlInfo(URL1).setDistance(100.0).setDeviceAddress("00:11:22:33:AA:BB"); mUrlManager.addUrl(urlInfo); urls = mUrlManager.getUrls(true); assertEquals(1, urls.size()); - assertEquals(urlInfo.getDistance(), urls.get(0).getDistance()); + assertEquals(urlInfo.getDistance(), urls.get(0).getDistance(), EPSILON); assertEquals(urlInfo.getDeviceAddress(), urls.get(0).getDeviceAddress()); } - @SmallTest - @RetryOnFailure + @Test public void testAddUrlTwiceWorks() throws Exception { // Add and remove an old URL twice and add new URL twice before removing. // This should cover several issues involved with updating the cache queue. @@ -222,7 +235,7 @@ assertTrue(mUrlManager.containsInAnyCache(URL2)); } - @SmallTest + @Test public void testGetUrlsSortsAndDedups() throws Exception { // Construct results with matching group IDs and check that getUrls returns only the closest // URL in each group. The list should be sorted by distance, closest first. @@ -236,37 +249,38 @@ mUrlManager.addUrl(new UrlInfo(URL3, 10.0, System.currentTimeMillis())); mUrlManager.addUrl(new UrlInfo(URL4, 40.0, System.currentTimeMillis())); mUrlManager.addUrl(new UrlInfo(URL5, 50.0, System.currentTimeMillis())); - getInstrumentation().waitForIdleSync(); + ShadowLooper.runUiThreadTasksIncludingDelayedTasks(); // Make sure URLs are in order and duplicates are omitted. List<UrlInfo> urlInfos = mUrlManager.getUrls(); assertEquals(3, urlInfos.size()); - assertEquals(10.0, urlInfos.get(0).getDistance()); + assertEquals(10.0, urlInfos.get(0).getDistance(), EPSILON); assertEquals(URL3, urlInfos.get(0).getUrl()); - assertEquals(30.0, urlInfos.get(1).getDistance()); + assertEquals(30.0, urlInfos.get(1).getDistance(), EPSILON); assertEquals(URL1, urlInfos.get(1).getUrl()); - assertEquals(50.0, urlInfos.get(2).getDistance()); + assertEquals(50.0, urlInfos.get(2).getDistance(), EPSILON); assertEquals(URL5, urlInfos.get(2).getUrl()); } /* - * @SmallTest * Bug=crbug.com/684148 */ @DisabledTest + @Test public void testSerializationWorksWithPoorlySerializedResult() throws Exception { addPwsResult1(); addPwsResult2(); long curTime = System.currentTimeMillis(); mUrlManager.addUrl(new UrlInfo(URL1, 99.5, curTime + 42)); mUrlManager.addUrl(new UrlInfo(URL2, 100.5, curTime + 43)); - getInstrumentation().waitForIdleSync(); + ShadowLooper.runUiThreadTasksIncludingDelayedTasks(); // Create an invalid serialization. Set<String> serializedUrls = new HashSet<>(); serializedUrls.add(new UrlInfo(URL1, 99.5, curTime + 42).jsonSerialize().toString()); serializedUrls.add("{\"not_a_value\": \"This is totally not a serialized UrlInfo.\"}"); - ContextUtils.getAppSharedPreferences().edit() + ContextUtils.getAppSharedPreferences() + .edit() .putStringSet("physicalweb_all_urls", serializedUrls) .apply(); @@ -279,15 +293,14 @@ } @FlakyTest(message = "https://crbug.com/685471") - @SmallTest - @RetryOnFailure + @Test public void testSerializationWorksWithoutGarbageCollection() throws Exception { addPwsResult1(); addPwsResult2(); long curTime = System.currentTimeMillis(); mUrlManager.addUrl(new UrlInfo(URL1, 99.5, curTime + 42)); mUrlManager.addUrl(new UrlInfo(URL2, 100.5, curTime + 43)); - getInstrumentation().waitForIdleSync(); + ShadowLooper.runUiThreadTasksIncludingDelayedTasks(); // Make sure all URLs are restored. UrlManager urlManager = new UrlManager(); @@ -299,14 +312,14 @@ assertEquals(2, resolvedUrls.size()); } - @SmallTest @RetryOnFailure + @Test public void testSerializationWorksWithGarbageCollection() throws Exception { addPwsResult1(); addPwsResult2(); mUrlManager.addUrl(new UrlInfo(URL1, 99.5, 42)); mUrlManager.addUrl(new UrlInfo(URL2, 100.5, 43)); - getInstrumentation().waitForIdleSync(); + ShadowLooper.runUiThreadTasksIncludingDelayedTasks(); // Make sure all URLs are restored. UrlManager urlManager = new UrlManager(); @@ -316,34 +329,49 @@ assertEquals(0, resolvedUrls.size()); } - @SmallTest + @Test public void testUpgradeFromNone() throws Exception { Set<String> oldResolvedUrls = new HashSet<String>(); oldResolvedUrls.add("old"); - ContextUtils.getAppSharedPreferences().edit() + SharedPreferences prefs = ContextUtils.getAppSharedPreferences(); + prefs.edit() .remove(UrlManager.getVersionKey()) .putStringSet("physicalweb_nearby_urls", oldResolvedUrls) .putInt("org.chromium.chrome.browser.physicalweb.VERSION", 1) .putInt("org.chromium.chrome.browser.physicalweb.BOTTOM_BAR_DISPLAY_COUNT", 1) + .putBoolean("physical_web_ignore_other_clients", true) .apply(); + final Lock lock = new ReentrantLock(); + final Condition condition = lock.newCondition(); + prefs.registerOnSharedPreferenceChangeListener( + new SharedPreferences.OnSharedPreferenceChangeListener() { + public void onSharedPreferenceChanged( + SharedPreferences sharedPreferences, String key) { + lock.lock(); + try { + condition.signal(); + } finally { + lock.unlock(); + } + } + }); new UrlManager(); + lock.lock(); + try { + assertTrue(condition.await(2, TimeUnit.SECONDS)); + } finally { + lock.unlock(); + } // Make sure the new prefs are populated and old prefs are gone. - final SharedPreferences sharedPreferences = ContextUtils.getAppSharedPreferences(); - CriteriaHelper.pollInstrumentationThread(new Criteria() { - @Override - public boolean isSatisfied() { - SharedPreferences sharedPreferences = ContextUtils.getAppSharedPreferences(); - return sharedPreferences.contains(UrlManager.getVersionKey()) - && !sharedPreferences.contains("physicalweb_nearby_urls") - && !sharedPreferences.contains( - "org.chromium.chrome.browser.physicalweb.VERSION") - && !sharedPreferences.contains("org.chromium.chrome.browser.physicalweb" - + ".BOTTOM_BAR_DISPLAY_COUNT"); - } - }, 5000, CriteriaHelper.DEFAULT_POLLING_INTERVAL); - - assertEquals(UrlManager.getVersion(), - sharedPreferences.getInt(UrlManager.getVersionKey(), 0)); + SharedPreferences sharedPreferences = ContextUtils.getAppSharedPreferences(); + assertTrue(sharedPreferences.contains(UrlManager.getVersionKey())); + assertEquals( + UrlManager.getVersion(), sharedPreferences.getInt(UrlManager.getVersionKey(), 0)); + assertFalse(sharedPreferences.contains("physicalweb_nearby_urls")); + assertFalse(sharedPreferences.contains("org.chromium.chrome.browser.physicalweb.VERSION")); + assertFalse(sharedPreferences.contains( + "org.chromium.chrome.browser.physicalweb.BOTTOM_BAR_DISPLAY_COUNT")); + assertFalse(sharedPreferences.contains("physical_web_ignore_other_clients")); } }
diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd index e36d9af3..cf59764 100644 --- a/chrome/app/generated_resources.grd +++ b/chrome/app/generated_resources.grd
@@ -14978,6 +14978,14 @@ Enable receiving entity suggestions in Omnibox. </message> </if> + <if expr="chromeos"> + <message name="IDS_FLAGS_ENABLE_CHROMEVOX_ARC_SUPPORT_NAME" desc="Name of the flag that enables ChromeVox support for ARC."> + ChromeVox ARC support + </message> + <message name="IDS_FLAGS_ENABLE_CHROMEVOX_ARC_SUPPORT_DESCRIPTION" desc="Description of the flag that enables ChromeVox support for ARC."> + Enable ChromeVox screen reader features in ARC + </message> + </if> </messages> </release> </grit>
diff --git a/chrome/app/settings_strings.grdp b/chrome/app/settings_strings.grdp index b25cfb1..2da9672 100644 --- a/chrome/app/settings_strings.grdp +++ b/chrome/app/settings_strings.grdp
@@ -300,6 +300,9 @@ <message name="IDS_SETTINGS_SEARCH_NO_RESULTS_HELP" desc="Help text for a search that has no results."> Go to <ph name="BEGIN_LINK_CHROMIUM"><a target="_blank" href="$1"></ph>Google Chrome help<ph name="END_LINK_CHROMIUM"></a></ph> if you can't find what you're looking for </message> + <message name="IDS_SETTINGS_SEARCH_RESULTS" desc="Message announced to screenreader users when searching within settings completes and results are showing."> + Search results for '<ph name="SEARCH_TEXT">$1<ex>cookies</ex></ph>' + </message> <message name="IDS_SETTINGS_SETTINGS" desc="The settings page title."> Settings </message> @@ -2032,14 +2035,11 @@ <message name="IDS_SETTINGS_ADD_SITE_EXCEPTION_PLACEHOLDER" desc="Placeholder text shown before the user starts typing a new content settings exception for a site." > [*.]example.com </message> - <message name="IDS_SETTINGS_ADD_SITE_LINK" desc="Link text to show (to open the Add Site dialog)"> - Add site exception - </message> <message name="IDS_SETTINGS_ADD_SITE_TITLE" desc="Title for the Add Site dialog"> - Add an exception for a site + Add a site </message> <message name="IDS_SETTINGS_EDIT_SITE_TITLE" desc="Title for the Edit Site dialog"> - Edit exception + Edit site </message> <message name="IDS_SETTINGS_ADD_SITE" desc="The label for the input box for adding a site"> Site @@ -2400,7 +2400,7 @@ Passwords </message> <message name="IDS_SETTINGS_ENABLE_PAYMENTS_INTEGRATION_CHECKBOX_LABEL" desc="Label for the checkbox that controls the Autofill/Payments integration feature."> - Credit cards and addresses using Google Payments + Credit cards and addresses using Google Payments. </message> <message name="IDS_SETTINGS_OPEN_TABS_CHECKBOX_LABEL" desc="Label for the checkbox which enables or disables syncing open tabs between multiple browser instances."> Open Tabs
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn index 842be01..fc3bac2 100644 --- a/chrome/browser/BUILD.gn +++ b/chrome/browser/BUILD.gn
@@ -10,6 +10,7 @@ import("//chrome/common/features.gni") import("//components/os_crypt/features.gni") import("//components/spellcheck/spellcheck_build_features.gni") +import("//device/vr/features.gni") import("//extensions/features/features.gni") import("//media/media_options.gni") import("//net/features.gni") @@ -262,8 +263,6 @@ "component_updater/supervised_user_whitelist_installer.h", "component_updater/sw_reporter_installer_win.cc", "component_updater/sw_reporter_installer_win.h", - "component_updater/swiftshader_component_installer.cc", - "component_updater/swiftshader_component_installer.h", "conflicts/module_database_win.cc", "conflicts/module_database_win.h", "conflicts/module_event_sink_impl_win.cc", @@ -1558,6 +1557,7 @@ "//device/power_save_blocker", "//device/usb/mojo", "//device/usb/public/interfaces", + "//device/vr:features", "//extensions/features", "//gin:gin_features", "//google_apis", @@ -2332,9 +2332,6 @@ "//ui/views/mus", ] } - if (ui_compositor_image_transport) { - deps += [ "//ui/gl" ] - } if (use_ash) { # Cross-platform Ash sources. @@ -2948,6 +2945,8 @@ "android/webapps/webapp_registry.h", "autofill/android/personal_data_manager_android.cc", "autofill/android/personal_data_manager_android.h", + "autofill/android/phone_number_util_android.cc", + "autofill/android/phone_number_util_android.h", "chrome_browser_field_trials_mobile.cc", "chrome_browser_field_trials_mobile.h", "dom_distiller/dom_distiller_service_factory_android.cc", @@ -3080,6 +3079,7 @@ "//third_party/android_opengl/etc1", "//third_party/android_tools:cpu_features", "//third_party/libaddressinput:util", + "//third_party/libphonenumber", "//third_party/smhasher:murmurhash2", ] @@ -3959,6 +3959,7 @@ "../android/java/src/org/chromium/chrome/browser/autofill/CreditCardScannerBridge.java", "../android/java/src/org/chromium/chrome/browser/autofill/PasswordGenerationPopupBridge.java", "../android/java/src/org/chromium/chrome/browser/autofill/PersonalDataManager.java", + "../android/java/src/org/chromium/chrome/browser/autofill/PhoneNumberUtil.java", "../android/java/src/org/chromium/chrome/browser/banners/AppBannerManager.java", "../android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkBridge.java", "../android/java/src/org/chromium/chrome/browser/browsing_data/UrlFilterBridge.java",
diff --git a/chrome/browser/DEPS b/chrome/browser/DEPS index 3b311d4..dd38c85d 100644 --- a/chrome/browser/DEPS +++ b/chrome/browser/DEPS
@@ -22,6 +22,7 @@ "+device/media_transfer_protocol", "+device/power_save_blocker", "+device/usb", + "+device/vr/features.h", "+extensions/browser", "+extensions/common", "+extensions/components/javascript_dialog_extensions_client",
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc index c19be67..11fb300 100644 --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc
@@ -74,6 +74,7 @@ #include "content/public/common/feature_h264_with_openh264_ffmpeg.h" #include "content/public/common/features.h" #include "device/base/features.h" +#include "device/vr/features.h" #include "extensions/features/features.h" #include "gin/public/gin_features.h" #include "gpu/config/gpu_switches.h" @@ -1656,7 +1657,7 @@ #endif // OS_MACOSX {"enable-webvr", IDS_FLAGS_WEBVR_NAME, IDS_FLAGS_WEBVR_DESCRIPTION, kOsAll, SINGLE_VALUE_TYPE(switches::kEnableWebVR)}, -#if defined(ENABLE_WEBVR) +#if BUILDFLAG(ENABLE_WEBVR) {"enable-webvr-experimental-rendering", IDS_FLAGS_WEBVR_EXPERIMENTAL_RENDERING_NAME, IDS_FLAGS_WEBVR_EXPERIMENTAL_RENDERING_DESCRIPTION, kOsAndroid, @@ -2355,6 +2356,13 @@ FEATURE_VALUE_TYPE(features::kTabStripKeyboardFocus)} #endif +#if defined(OS_CHROMEOS) + {"enable-chromevox-arc-support", + IDS_FLAGS_ENABLE_CHROMEVOX_ARC_SUPPORT_NAME, + IDS_FLAGS_ENABLE_CHROMEVOX_ARC_SUPPORT_DESCRIPTION, kOsCrOS, + SINGLE_VALUE_TYPE(chromeos::switches::kEnableChromeVoxArcSupport)}, +#endif // defined(OS_CHROMEOS) + // NOTE: Adding new command-line switches requires adding corresponding // entries to enum "LoginCustomFlags" in histograms.xml. See note in // histograms.xml and don't forget to run AboutFlagsHistogramTest unit test.
diff --git a/chrome/browser/android/DEPS b/chrome/browser/android/DEPS index e298e019..b3599d7 100644 --- a/chrome/browser/android/DEPS +++ b/chrome/browser/android/DEPS
@@ -8,6 +8,7 @@ "+components/sync/test/fake_server/android", "+components/toolbar", "+components/web_contents_delegate_android", + "+device/vr/features.h", "+sandbox/linux/seccomp-bpf/sandbox_bpf.h", "+sandbox/sandbox_features.h", "+third_party/gvr-android-sdk",
diff --git a/chrome/browser/android/chrome_feature_list.cc b/chrome/browser/android/chrome_feature_list.cc index 6b3eea4..43eaf42 100644 --- a/chrome/browser/android/chrome_feature_list.cc +++ b/chrome/browser/android/chrome_feature_list.cc
@@ -100,7 +100,7 @@ base::FEATURE_ENABLED_BY_DEFAULT}; const base::Feature kAndroidPaymentApps{"AndroidPaymentApps", - base::FEATURE_ENABLED_BY_DEFAULT}; + base::FEATURE_DISABLED_BY_DEFAULT}; const base::Feature kAndroidPaymentAppsFilter{ "AndroidPaymentAppsFilter", base::FEATURE_DISABLED_BY_DEFAULT};
diff --git a/chrome/browser/android/chrome_jni_registrar.cc b/chrome/browser/android/chrome_jni_registrar.cc index bc699aab..d57a1cd6 100644 --- a/chrome/browser/android/chrome_jni_registrar.cc +++ b/chrome/browser/android/chrome_jni_registrar.cc
@@ -108,6 +108,7 @@ #include "chrome/browser/android/webapk/webapk_update_manager.h" #include "chrome/browser/android/webapps/add_to_homescreen_manager.h" #include "chrome/browser/autofill/android/personal_data_manager_android.h" +#include "chrome/browser/autofill/android/phone_number_util_android.h" #include "chrome/browser/dom_distiller/dom_distiller_service_factory_android.h" #include "chrome/browser/dom_distiller/tab_utils_android.h" #include "chrome/browser/engagement/site_engagement_service_android.h" @@ -182,13 +183,14 @@ #include "components/url_formatter/android/component_jni_registrar.h" #include "components/variations/android/component_jni_registrar.h" #include "components/web_contents_delegate_android/component_jni_registrar.h" +#include "device/vr/features.h" #include "printing/features/features.h" #if BUILDFLAG(ENABLE_PRINTING) && !BUILDFLAG(ENABLE_PRINT_PREVIEW) #include "printing/printing_context_android.h" #endif -#if defined(ENABLE_WEBVR) +#if BUILDFLAG(ENABLE_WEBVR) #include "chrome/browser/android/vr_shell/vr_shell.h" #include "chrome/browser/android/vr_shell/vr_shell_delegate.h" #include "third_party/gvr-android-sdk/display_synchronizer_jni.h" @@ -354,6 +356,7 @@ PermissionUpdateInfoBarDelegate::RegisterPermissionUpdateInfoBarDelegate}, {"PersonalDataManagerAndroid", autofill::PersonalDataManagerAndroid::Register}, + {"PhoneNumberUtil", RegisterPhoneNumberUtil}, {"PhysicalWebDataSourceAndroid", PhysicalWebDataSourceAndroid::RegisterPhysicalWebDataSource}, {"PolicyAuditor", RegisterPolicyAuditor}, @@ -414,7 +417,7 @@ {"UsbChooserDialogAndroid", UsbChooserDialogAndroid::Register}, {"Variations", variations::android::RegisterVariations}, {"VariationsSession", chrome::android::RegisterVariationsSession}, -#if defined(ENABLE_WEBVR) +#if BUILDFLAG(ENABLE_WEBVR) {"VrShell", vr_shell::RegisterVrShell}, {"VrShellDelegate", vr_shell::RegisterVrShellDelegate}, {"DisplaySynchronizer",
diff --git a/chrome/browser/android/preferences/pref_service_bridge.cc b/chrome/browser/android/preferences/pref_service_bridge.cc index ac89390..194474d 100644 --- a/chrome/browser/android/preferences/pref_service_bridge.cc +++ b/chrome/browser/android/preferences/pref_service_bridge.cc
@@ -29,6 +29,7 @@ #include "chrome/browser/browsing_data/browsing_data_helper.h" #include "chrome/browser/browsing_data/browsing_data_remover.h" #include "chrome/browser/browsing_data/browsing_data_remover_factory.h" +#include "chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.h" #include "chrome/browser/content_settings/host_content_settings_map_factory.h" #include "chrome/browser/engagement/important_sites_util.h" #include "chrome/browser/history/web_history_service_factory.h" @@ -653,20 +654,20 @@ for (const int data_type : data_types_vector) { switch (static_cast<browsing_data::BrowsingDataType>(data_type)) { case browsing_data::BrowsingDataType::HISTORY: - remove_mask |= BrowsingDataRemover::REMOVE_HISTORY; + remove_mask |= ChromeBrowsingDataRemoverDelegate::DATA_TYPE_HISTORY; break; case browsing_data::BrowsingDataType::CACHE: - remove_mask |= BrowsingDataRemover::REMOVE_CACHE; + remove_mask |= BrowsingDataRemover::DATA_TYPE_CACHE; break; case browsing_data::BrowsingDataType::COOKIES: - remove_mask |= BrowsingDataRemover::REMOVE_COOKIES; - remove_mask |= BrowsingDataRemover::REMOVE_SITE_DATA; + remove_mask |= BrowsingDataRemover::DATA_TYPE_COOKIES; + remove_mask |= ChromeBrowsingDataRemoverDelegate::DATA_TYPE_SITE_DATA; break; case browsing_data::BrowsingDataType::PASSWORDS: - remove_mask |= BrowsingDataRemover::REMOVE_PASSWORDS; + remove_mask |= ChromeBrowsingDataRemoverDelegate::DATA_TYPE_PASSWORDS; break; case browsing_data::BrowsingDataType::FORM_DATA: - remove_mask |= BrowsingDataRemover::REMOVE_FORM_DATA; + remove_mask |= ChromeBrowsingDataRemoverDelegate::DATA_TYPE_FORM_DATA; break; case browsing_data::BrowsingDataType::BOOKMARKS: // Bookmarks are deleted separately on the Java side. @@ -704,9 +705,11 @@ // Delete the types protected by Important Sites with a filter, // and the rest completely. int filterable_mask = - remove_mask & BrowsingDataRemover::IMPORTANT_SITES_DATATYPES; - int nonfilterable_mask = remove_mask & - ~BrowsingDataRemover::IMPORTANT_SITES_DATATYPES; + remove_mask & + ChromeBrowsingDataRemoverDelegate::IMPORTANT_SITES_DATA_TYPES; + int nonfilterable_mask = + remove_mask & + ~ChromeBrowsingDataRemoverDelegate::IMPORTANT_SITES_DATA_TYPES; // ClearBrowsingDataObserver deletes itself when |browsing_data_remover| is // done with both removal tasks. @@ -720,8 +723,8 @@ if (filterable_mask) { browsing_data_remover->RemoveWithFilterAndReply( browsing_data::CalculateBeginDeleteTime(period), - browsing_data::CalculateEndDeleteTime(period), - filterable_mask, BrowsingDataHelper::UNPROTECTED_WEB, + browsing_data::CalculateEndDeleteTime(period), filterable_mask, + BrowsingDataRemover::ORIGIN_TYPE_UNPROTECTED_WEB, std::move(filter_builder), observer); } else { // Make sure |observer| doesn't wait for the filtered task. @@ -731,8 +734,8 @@ if (nonfilterable_mask) { browsing_data_remover->RemoveAndReply( browsing_data::CalculateBeginDeleteTime(period), - browsing_data::CalculateEndDeleteTime(period), - nonfilterable_mask, BrowsingDataHelper::UNPROTECTED_WEB, observer); + browsing_data::CalculateEndDeleteTime(period), nonfilterable_mask, + BrowsingDataRemover::ORIGIN_TYPE_UNPROTECTED_WEB, observer); } else { // Make sure |observer| doesn't wait for the non-filtered task. observer->OnBrowsingDataRemoverDone();
diff --git a/chrome/browser/android/signin/signin_manager_android.cc b/chrome/browser/android/signin/signin_manager_android.cc index ff3571d6..7fc387d 100644 --- a/chrome/browser/android/signin/signin_manager_android.cc +++ b/chrome/browser/android/signin/signin_manager_android.cc
@@ -21,6 +21,7 @@ #include "chrome/browser/browsing_data/browsing_data_helper.h" #include "chrome/browser/browsing_data/browsing_data_remover.h" #include "chrome/browser/browsing_data/browsing_data_remover_factory.h" +#include "chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.h" #include "chrome/browser/policy/cloud/user_cloud_policy_manager_factory.h" #include "chrome/browser/policy/cloud/user_policy_signin_service_factory.h" #include "chrome/browser/policy/cloud/user_policy_signin_service_mobile.h" @@ -61,9 +62,10 @@ origin_runner_(base::ThreadTaskRunnerHandle::Get()), remover_(BrowsingDataRemoverFactory::GetForBrowserContext(profile)) { remover_->AddObserver(this); - remover_->RemoveAndReply(base::Time(), base::Time::Max(), - BrowsingDataRemover::REMOVE_ALL, - BrowsingDataHelper::ALL, this); + remover_->RemoveAndReply( + base::Time(), base::Time::Max(), + ChromeBrowsingDataRemoverDelegate::ALL_DATA_TYPES, + ChromeBrowsingDataRemoverDelegate::ALL_ORIGIN_TYPES, this); } ~ProfileDataRemover() override {}
diff --git a/chrome/browser/android/vr_shell/BUILD.gn b/chrome/browser/android/vr_shell/BUILD.gn index 3cda088..03de7eef 100644 --- a/chrome/browser/android/vr_shell/BUILD.gn +++ b/chrome/browser/android/vr_shell/BUILD.gn
@@ -4,6 +4,7 @@ import("//build/config/android/rules.gni") import("//chrome/common/features.gni") +import("//device/vr/features.gni") import("//testing/test.gni") assert(enable_webvr)
diff --git a/chrome/browser/android/webapk/webapk_installer.cc b/chrome/browser/android/webapk/webapk_installer.cc index c3d8b8e9..1841c873 100644 --- a/chrome/browser/android/webapk/webapk_installer.cc +++ b/chrome/browser/android/webapk/webapk_installer.cc
@@ -294,19 +294,19 @@ return RegisterNativesImpl(env); } -bool WebApkInstaller::StartInstallingDownloadedWebApk( +void WebApkInstaller::InstallDownloadedWebApk( JNIEnv* env, const base::android::ScopedJavaLocalRef<jstring>& java_file_path, const base::android::ScopedJavaLocalRef<jstring>& java_package_name) { - return Java_WebApkInstaller_installAsyncAndMonitorInstallationFromNative( + Java_WebApkInstaller_installDownloadedWebApkAsync( env, java_ref_, java_file_path, java_package_name); } -bool WebApkInstaller::StartUpdateUsingDownloadedWebApk( +void WebApkInstaller::UpdateUsingDownloadedWebApk( JNIEnv* env, const base::android::ScopedJavaLocalRef<jstring>& java_file_path) { - return Java_WebApkInstaller_updateAsyncFromNative(env, java_ref_, - java_file_path); + Java_WebApkInstaller_updateUsingDownloadedWebApkAsync(env, java_ref_, + java_file_path); } bool WebApkInstaller::CanUseGooglePlayInstallService() { @@ -604,23 +604,13 @@ JNIEnv* env = base::android::AttachCurrentThread(); base::android::ScopedJavaLocalRef<jstring> java_file_path = base::android::ConvertUTF8ToJavaString(env, file_path.value()); - base::android::ScopedJavaLocalRef<jstring> java_package_name = - base::android::ConvertUTF8ToJavaString(env, webapk_package_); - bool success = false; if (task_type_ == INSTALL) { - success = - StartInstallingDownloadedWebApk(env, java_file_path, java_package_name); + base::android::ScopedJavaLocalRef<jstring> java_package_name = + base::android::ConvertUTF8ToJavaString(env, webapk_package_); + InstallDownloadedWebApk(env, java_file_path, java_package_name); } else if (task_type_ == UPDATE) { - success = StartUpdateUsingDownloadedWebApk(env, java_file_path); - if (success) { - // Since WebApkInstaller doesn't listen to WebAPKs' update events - // we call OnSuccess() as long as the update started successfully. - OnSuccess(); - return; - } + UpdateUsingDownloadedWebApk(env, java_file_path); } - if (!success) - OnFailure(); } void WebApkInstaller::OnTimeout() {
diff --git a/chrome/browser/android/webapk/webapk_installer.h b/chrome/browser/android/webapk/webapk_installer.h index 0f0f325..ea049d7f 100644 --- a/chrome/browser/android/webapk/webapk_installer.h +++ b/chrome/browser/android/webapk/webapk_installer.h
@@ -110,19 +110,17 @@ const ShortcutInfo& shortcut_info, const SkBitmap& shortcut_icon); - // Starts installation of the downloaded WebAPK. Returns whether the install - // could be started. The installation may still fail if true is returned. + // Starts installion of the downloaded WebAPK. // |file_path| is the file path that the WebAPK was downloaded to. - // |package_name| is the package name that the WebAPK should be installed at. - virtual bool StartInstallingDownloadedWebApk( + // |package_name| is the package name of the WebAPK. + virtual void InstallDownloadedWebApk( JNIEnv* env, const base::android::ScopedJavaLocalRef<jstring>& java_file_path, const base::android::ScopedJavaLocalRef<jstring>& java_package_name); - // Starts update using the downloaded WebAPK. Returns whether the updating - // could be started. The updating may still fail if true is returned. + // Starts update using the downloaded WebAPK. // |file_path| is the file path that the WebAPK was downloaded to. - virtual bool StartUpdateUsingDownloadedWebApk( + virtual void UpdateUsingDownloadedWebApk( JNIEnv* env, const base::android::ScopedJavaLocalRef<jstring>& java_file_path);
diff --git a/chrome/browser/android/webapk/webapk_installer_unittest.cc b/chrome/browser/android/webapk/webapk_installer_unittest.cc index ae4c1cc..3b8997c 100644 --- a/chrome/browser/android/webapk/webapk_installer_unittest.cc +++ b/chrome/browser/android/webapk/webapk_installer_unittest.cc
@@ -66,18 +66,17 @@ can_use_google_play_install_service_( can_use_google_play_install_service) {} - bool StartInstallingDownloadedWebApk( + void InstallDownloadedWebApk( JNIEnv* env, const base::android::ScopedJavaLocalRef<jstring>& file_path, const base::android::ScopedJavaLocalRef<jstring>& package_name) override { PostTaskToRunSuccessCallback(); - return true; } - bool StartUpdateUsingDownloadedWebApk( + void UpdateUsingDownloadedWebApk( JNIEnv* env, const base::android::ScopedJavaLocalRef<jstring>& file_path) override { - return true; + PostTaskToRunSuccessCallback(); } bool CanUseGooglePlayInstallService() override {
diff --git a/chrome/browser/autofill/android/DEPS b/chrome/browser/autofill/android/DEPS index 901959f5..d04315b 100644 --- a/chrome/browser/autofill/android/DEPS +++ b/chrome/browser/autofill/android/DEPS
@@ -1,3 +1,4 @@ include_rules = [ '+third_party/libaddressinput', + '+third_party/libphonenumber', ]
diff --git a/chrome/browser/autofill/android/phone_number_util_android.cc b/chrome/browser/autofill/android/phone_number_util_android.cc new file mode 100644 index 0000000..21501eaa --- /dev/null +++ b/chrome/browser/autofill/android/phone_number_util_android.cc
@@ -0,0 +1,79 @@ +// 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 "chrome/browser/autofill/android/phone_number_util_android.h" + +#include "base/android/jni_string.h" +#include "base/android/scoped_java_ref.h" +#include "chrome/browser/browser_process.h" +#include "components/autofill/core/browser/autofill_country.h" +#include "jni/PhoneNumberUtil_jni.h" +#include "third_party/libphonenumber/phonenumber_api.h" + +namespace autofill { + +namespace { +using ::base::android::ConvertJavaStringToUTF8; +using ::base::android::ConvertUTF8ToJavaString; +using ::base::android::JavaParamRef; +using ::base::android::ScopedJavaLocalRef; +using ::i18n::phonenumbers::PhoneNumber; +using ::i18n::phonenumbers::PhoneNumberUtil; +} // namespace + +// Formats the given number |jphone_number| to +// i18n::phonenumbers::PhoneNumberUtil::PhoneNumberFormat::INTERNATIONAL format +// by using i18n::phonenumbers::PhoneNumberUtil::Format. +ScopedJavaLocalRef<jstring> Format( + JNIEnv* env, + const base::android::JavaParamRef<jclass>& jcaller, + const JavaParamRef<jstring>& jphone_number) { + const std::string phone_number = ConvertJavaStringToUTF8(env, jphone_number); + const std::string default_region_code = + autofill::AutofillCountry::CountryCodeForLocale( + g_browser_process->GetApplicationLocale()); + + PhoneNumber parsed_number; + PhoneNumberUtil* phone_number_util = PhoneNumberUtil::GetInstance(); + if (phone_number_util->Parse(phone_number, default_region_code, + &parsed_number) != + PhoneNumberUtil::NO_PARSING_ERROR) { + return ConvertUTF8ToJavaString(env, phone_number); + } + + std::string formatted_number; + phone_number_util->Format(parsed_number, + PhoneNumberUtil::PhoneNumberFormat::INTERNATIONAL, + &formatted_number); + + return ConvertUTF8ToJavaString(env, formatted_number); +} + +// Checks whether the given number |jphone_number| is valid by using +// i18n::phonenumbers::PhoneNumberUtil::IsValidNumber. +jboolean IsValidNumber(JNIEnv* env, + const base::android::JavaParamRef<jclass>& jcaller, + const JavaParamRef<jstring>& jphone_number) { + const std::string phone_number = ConvertJavaStringToUTF8(env, jphone_number); + const std::string default_region_code = + autofill::AutofillCountry::CountryCodeForLocale( + g_browser_process->GetApplicationLocale()); + + PhoneNumber parsed_number; + PhoneNumberUtil* phone_number_util = PhoneNumberUtil::GetInstance(); + if (phone_number_util->Parse(phone_number, default_region_code, + &parsed_number) != + PhoneNumberUtil::NO_PARSING_ERROR) { + return false; + } + + return phone_number_util->IsValidNumber(parsed_number); +} + +} // namespace autofill + +// static +bool RegisterPhoneNumberUtil(JNIEnv* env) { + return autofill::RegisterNativesImpl(env); +}
diff --git a/chrome/browser/autofill/android/phone_number_util_android.h b/chrome/browser/autofill/android/phone_number_util_android.h new file mode 100644 index 0000000..17c85c6 --- /dev/null +++ b/chrome/browser/autofill/android/phone_number_util_android.h
@@ -0,0 +1,12 @@ +// 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 CHROME_BROWSER_AUTOFILL_ANDROID_PHONE_NUMBER_UTIL_ANDROID_H_ +#define CHROME_BROWSER_AUTOFILL_ANDROID_PHONE_NUMBER_UTIL_ANDROID_H_ + +#include <jni.h> + +bool RegisterPhoneNumberUtil(JNIEnv* env); + +#endif // CHROME_BROWSER_AUTOFILL_ANDROID_PHONE_NUMBER_UTIL_ANDROID_H_
diff --git a/chrome/browser/browsing_data/browsing_data_helper.cc b/chrome/browser/browsing_data/browsing_data_helper.cc index 6e4fcbe..3240b04 100644 --- a/chrome/browser/browsing_data/browsing_data_helper.cc +++ b/chrome/browser/browsing_data/browsing_data_helper.cc
@@ -4,11 +4,11 @@ #include "chrome/browser/browsing_data/browsing_data_helper.h" +#include <algorithm> #include <vector> #include "base/strings/utf_string_conversions.h" #include "extensions/common/constants.h" -#include "storage/browser/quota/special_storage_policy.h" #include "url/gurl.h" #include "url/url_util.h" @@ -32,29 +32,3 @@ bool BrowsingDataHelper::HasExtensionScheme(const GURL& origin) { return BrowsingDataHelper::IsExtensionScheme(origin.scheme()); } - -// Static -bool BrowsingDataHelper::DoesOriginMatchMask( - const GURL& origin, - int origin_type_mask, - storage::SpecialStoragePolicy* policy) { - // Packaged apps and extensions match iff EXTENSION. - if (BrowsingDataHelper::HasExtensionScheme(origin.GetOrigin()) && - origin_type_mask & EXTENSION) - return true; - - // If a websafe origin is unprotected, it matches iff UNPROTECTED_WEB. - if ((!policy || !policy->IsStorageProtected(origin.GetOrigin())) && - BrowsingDataHelper::HasWebScheme(origin.GetOrigin()) && - origin_type_mask & UNPROTECTED_WEB) - return true; - - // Hosted applications (protected and websafe origins) iff PROTECTED_WEB. - if (policy && - policy->IsStorageProtected(origin.GetOrigin()) && - BrowsingDataHelper::HasWebScheme(origin.GetOrigin()) && - origin_type_mask & PROTECTED_WEB) - return true; - - return false; -}
diff --git a/chrome/browser/browsing_data/browsing_data_helper.h b/chrome/browser/browsing_data/browsing_data_helper.h index 780a62d0..09e6ed5 100644 --- a/chrome/browser/browsing_data/browsing_data_helper.h +++ b/chrome/browser/browsing_data/browsing_data_helper.h
@@ -11,22 +11,18 @@ #include "base/macros.h" -namespace storage { -class SpecialStoragePolicy; -} - class GURL; +// TODO(crbug.com/668114): DEPRECATED. Remove this class. +// The primary functionality of testing origin type masks has moved to +// BrowsingDataRemover. The secondary functionality of recognizing web schemes +// storing browsing data has moved to url::GetWebStorageSchemes(); +// or alternatively, it can also be retrieved from BrowsingDataRemover by +// testing the ORIGIN_TYPE_UNPROTECTED_ORIGIN | ORIGIN_TYPE_PROTECTED_ORIGIN +// origin mask. This class now merely forwards the functionality to several +// helper classes in the browsing_data codebase. class BrowsingDataHelper { public: - enum OriginTypeMask { - UNPROTECTED_WEB = 1 << 0, // drive-by web. - PROTECTED_WEB = 1 << 1, // hosted applications. - EXTENSION = 1 << 2, // chrome-extension://* - // Always add new items to the enum above ALL and add them to ALL. - ALL = UNPROTECTED_WEB | PROTECTED_WEB | EXTENSION, - }; - // Returns true iff the provided scheme is (really) web safe, and suitable // for treatment as "browsing data". This relies on the definition of web safe // in ChildProcessSecurityPolicy, but excluding schemes like @@ -38,11 +34,6 @@ static bool IsExtensionScheme(const std::string& scheme); static bool HasExtensionScheme(const GURL& origin); - // Returns true if the provided origin matches the provided mask. - static bool DoesOriginMatchMask(const GURL& origin, - int origin_type_mask, - storage::SpecialStoragePolicy* policy); - private: DISALLOW_IMPLICIT_CONSTRUCTORS(BrowsingDataHelper); };
diff --git a/chrome/browser/browsing_data/browsing_data_helper_unittest.cc b/chrome/browser/browsing_data/browsing_data_helper_unittest.cc index 5bf6ac4..54bef78d 100644 --- a/chrome/browser/browsing_data/browsing_data_helper_unittest.cc +++ b/chrome/browser/browsing_data/browsing_data_helper_unittest.cc
@@ -12,10 +12,6 @@ #include "url/gurl.h" #include "url/url_constants.h" -#if BUILDFLAG(ENABLE_EXTENSIONS) -#include "chrome/browser/extensions/mock_extension_special_storage_policy.h" -#endif - namespace { const char kTestOrigin1[] = "http://host1:1/"; @@ -30,10 +26,6 @@ const GURL kOriginExt(kTestOriginExt); const GURL kOriginDevTools(kTestOriginDevTools); -const int kExtension = BrowsingDataHelper::EXTENSION; -const int kProtected = BrowsingDataHelper::PROTECTED_WEB; -const int kUnprotected = BrowsingDataHelper::UNPROTECTED_WEB; - class BrowsingDataHelperTest : public testing::Test { public: BrowsingDataHelperTest() {} @@ -51,12 +43,6 @@ BrowsingDataHelper::IsExtensionScheme(scheme)); } - bool Match(const GURL& origin, - int mask, - storage::SpecialStoragePolicy* policy) { - return BrowsingDataHelper::DoesOriginMatchMask(origin, mask, policy); - } - private: DISALLOW_COPY_AND_ASSIGN(BrowsingDataHelperTest); }; @@ -117,71 +103,4 @@ EXPECT_FALSE(IsExtensionScheme("invalid-scheme-i-just-made-up")); } -#if BUILDFLAG(ENABLE_EXTENSIONS) -TEST_F(BrowsingDataHelperTest, TestMatches) { - scoped_refptr<MockExtensionSpecialStoragePolicy> mock_policy = - new MockExtensionSpecialStoragePolicy; - // Protect kOrigin1. - mock_policy->AddProtected(kOrigin1.GetOrigin()); - - EXPECT_FALSE(Match(kOrigin1, kUnprotected, mock_policy.get())); - EXPECT_TRUE(Match(kOrigin2, kUnprotected, mock_policy.get())); - EXPECT_FALSE(Match(kOriginExt, kUnprotected, mock_policy.get())); - EXPECT_FALSE(Match(kOriginDevTools, kUnprotected, mock_policy.get())); - - EXPECT_TRUE(Match(kOrigin1, kProtected, mock_policy.get())); - EXPECT_FALSE(Match(kOrigin2, kProtected, mock_policy.get())); - EXPECT_FALSE(Match(kOriginExt, kProtected, mock_policy.get())); - EXPECT_FALSE(Match(kOriginDevTools, kProtected, mock_policy.get())); - - EXPECT_FALSE(Match(kOrigin1, kExtension, mock_policy.get())); - EXPECT_FALSE(Match(kOrigin2, kExtension, mock_policy.get())); - EXPECT_TRUE(Match(kOriginExt, kExtension, mock_policy.get())); - EXPECT_FALSE(Match(kOriginDevTools, kExtension, mock_policy.get())); - - EXPECT_TRUE(Match(kOrigin1, kUnprotected | kProtected, mock_policy.get())); - EXPECT_TRUE(Match(kOrigin2, kUnprotected | kProtected, mock_policy.get())); - EXPECT_FALSE(Match(kOriginExt, kUnprotected | kProtected, mock_policy.get())); - EXPECT_FALSE( - Match(kOriginDevTools, kUnprotected | kProtected, mock_policy.get())); - - EXPECT_FALSE(Match(kOrigin1, kUnprotected | kExtension, mock_policy.get())); - EXPECT_TRUE(Match(kOrigin2, kUnprotected | kExtension, mock_policy.get())); - EXPECT_TRUE(Match(kOriginExt, kUnprotected | kExtension, mock_policy.get())); - EXPECT_FALSE( - Match(kOriginDevTools, kUnprotected | kExtension, mock_policy.get())); - - EXPECT_TRUE(Match(kOrigin1, kProtected | kExtension, mock_policy.get())); - EXPECT_FALSE(Match(kOrigin2, kProtected | kExtension, mock_policy.get())); - EXPECT_TRUE(Match(kOriginExt, kProtected | kExtension, mock_policy.get())); - EXPECT_FALSE( - Match(kOriginDevTools, kProtected | kExtension, mock_policy.get())); - - EXPECT_TRUE(Match( - kOrigin1, kUnprotected | kProtected | kExtension, mock_policy.get())); - EXPECT_TRUE(Match( - kOrigin2, kUnprotected | kProtected | kExtension, mock_policy.get())); - EXPECT_TRUE(Match( - kOriginExt, kUnprotected | kProtected | kExtension, mock_policy.get())); - EXPECT_FALSE(Match(kOriginDevTools, - kUnprotected | kProtected | kExtension, - mock_policy.get())); -} -#endif - -// If extensions are disabled, there is no policy. -TEST_F(BrowsingDataHelperTest, TestNoPolicyMatches) { - EXPECT_FALSE(Match(kOrigin1, kExtension, nullptr)); - EXPECT_TRUE(Match(kOrigin1, kUnprotected, nullptr)); - EXPECT_FALSE(Match(kOrigin1, kProtected, nullptr)); - - EXPECT_TRUE(Match(kOriginExt, kExtension, nullptr)); - EXPECT_FALSE(Match(kOriginExt, kUnprotected, nullptr)); - EXPECT_FALSE(Match(kOriginExt, kProtected, nullptr)); - - EXPECT_FALSE(Match(kOriginDevTools, kExtension, nullptr)); - EXPECT_FALSE(Match(kOriginDevTools, kUnprotected, nullptr)); - EXPECT_FALSE(Match(kOriginDevTools, kProtected, nullptr)); -} - } // namespace
diff --git a/chrome/browser/browsing_data/browsing_data_remover.h b/chrome/browser/browsing_data/browsing_data_remover.h index b811122..358c624 100644 --- a/chrome/browser/browsing_data/browsing_data_remover.h +++ b/chrome/browser/browsing_data/browsing_data_remover.h
@@ -54,85 +54,43 @@ class BrowsingDataRemover : public KeyedService { public: // Mask used for Remove. - enum RemoveDataMask { - REMOVE_APPCACHE = 1 << 0, - REMOVE_CACHE = 1 << 1, - REMOVE_COOKIES = 1 << 2, - REMOVE_DOWNLOADS = 1 << 3, - REMOVE_FILE_SYSTEMS = 1 << 4, - REMOVE_FORM_DATA = 1 << 5, - // In addition to visits, REMOVE_HISTORY removes keywords, last session and - // passwords UI statistics. - REMOVE_HISTORY = 1 << 6, - REMOVE_INDEXEDDB = 1 << 7, - REMOVE_LOCAL_STORAGE = 1 << 8, - REMOVE_PLUGIN_DATA = 1 << 9, - REMOVE_PASSWORDS = 1 << 10, - REMOVE_WEBSQL = 1 << 11, - REMOVE_CHANNEL_IDS = 1 << 12, - REMOVE_MEDIA_LICENSES = 1 << 13, - REMOVE_SERVICE_WORKERS = 1 << 14, - REMOVE_SITE_USAGE_DATA = 1 << 15, + enum DataType { + // Storage datatypes. + DATA_TYPE_APP_CACHE = 1 << 0, + DATA_TYPE_FILE_SYSTEMS = 1 << 1, + DATA_TYPE_INDEXED_DB = 1 << 2, + DATA_TYPE_LOCAL_STORAGE = 1 << 3, + DATA_TYPE_WEB_SQL = 1 << 4, + DATA_TYPE_SERVICE_WORKERS = 1 << 5, + DATA_TYPE_CACHE_STORAGE = 1 << 6, + + // Other datatypes. + DATA_TYPE_COOKIES = 1 << 7, + DATA_TYPE_CHANNEL_IDS = 1 << 8, + DATA_TYPE_CACHE = 1 << 9, + DATA_TYPE_DOWNLOADS = 1 << 10, + DATA_TYPE_MEDIA_LICENSES = 1 << 11, + // REMOVE_NOCHECKS intentionally does not check if the browser context is // prohibited from deleting history or downloads. - REMOVE_NOCHECKS = 1 << 16, - REMOVE_CACHE_STORAGE = 1 << 17, -#if defined(OS_ANDROID) - REMOVE_WEBAPP_DATA = 1 << 18, -#endif - REMOVE_DURABLE_PERMISSION = 1 << 19, - REMOVE_EXTERNAL_PROTOCOL_DATA = 1 << 20, + DATA_TYPE_NO_CHECKS = 1 << 12, - // The following flag is used only in tests. In normal usage, hosted app - // data is controlled by the REMOVE_COOKIES flag, applied to the - // protected-web origin. - REMOVE_HOSTED_APP_DATA_TESTONLY = 1 << 31, - - // "Site data" includes cookies, appcache, file systems, indexedDBs, local - // storage, webSQL, service workers, cache storage, plugin data, web app - // data (on Android) and statistics about passwords. - REMOVE_SITE_DATA = REMOVE_APPCACHE | REMOVE_COOKIES | REMOVE_FILE_SYSTEMS | - REMOVE_INDEXEDDB | - REMOVE_LOCAL_STORAGE | - REMOVE_PLUGIN_DATA | - REMOVE_SERVICE_WORKERS | - REMOVE_CACHE_STORAGE | - REMOVE_WEBSQL | - REMOVE_CHANNEL_IDS | -#if defined(OS_ANDROID) - REMOVE_WEBAPP_DATA | -#endif - REMOVE_SITE_USAGE_DATA | - REMOVE_DURABLE_PERMISSION | - REMOVE_EXTERNAL_PROTOCOL_DATA, - - // Datatypes protected by Important Sites. - IMPORTANT_SITES_DATATYPES = REMOVE_SITE_DATA | REMOVE_CACHE, - - // Datatypes that can be deleted partially per URL / origin / domain, - // whichever makes sense. - FILTERABLE_DATATYPES = REMOVE_SITE_DATA | REMOVE_CACHE | REMOVE_DOWNLOADS, - - // Includes all the available remove options. Meant to be used by clients - // that wish to wipe as much data as possible from a Profile, to make it - // look like a new Profile. - REMOVE_ALL = REMOVE_SITE_DATA | REMOVE_CACHE | REMOVE_DOWNLOADS | - REMOVE_FORM_DATA | - REMOVE_HISTORY | - REMOVE_PASSWORDS | - REMOVE_MEDIA_LICENSES, - - // Includes all available remove options. Meant to be used when the Profile - // is scheduled to be deleted, and all possible data should be wiped from - // disk as soon as possible. - REMOVE_WIPE_PROFILE = REMOVE_ALL | REMOVE_NOCHECKS, + // Embedders can add more datatypes beyond this point. + DATA_TYPE_CONTENT_END = DATA_TYPE_NO_CHECKS, }; - // Important sites protect a small set of sites from the deletion of certain - // datatypes. Therefore, those datatypes must be filterable by - // url/origin/domain. - static_assert(0 == (IMPORTANT_SITES_DATATYPES & ~FILTERABLE_DATATYPES), - "All important sites datatypes must be filterable."); + enum OriginType { + // Web storage origins that StoragePartition recognizes as NOT protected + // according to its special storage policy. + ORIGIN_TYPE_UNPROTECTED_WEB = 1 << 0, + + // Web storage origins that StoragePartition recognizes as protected + // according to its special storage policy. + ORIGIN_TYPE_PROTECTED_WEB = 1 << 1, + + // Embedders can add more origin types beyond this point. + ORIGIN_TYPE_CONTENT_END = ORIGIN_TYPE_PROTECTED_WEB, + }; // A helper enum to report the deletion of cookies and/or cache. Do not // reorder the entries, as this enum is passed to UMA. @@ -161,6 +119,13 @@ std::unique_ptr<BrowsingDataRemoverDelegate> embedder_delegate) = 0; virtual BrowsingDataRemoverDelegate* GetEmbedderDelegate() const = 0; + // Determines whether |origin| matches the |origin_type_mask| according to + // the |special_storage_policy|. + virtual bool DoesOriginMatchMask( + int origin_type_mask, + const GURL& origin, + storage::SpecialStoragePolicy* special_storage_policy) const = 0; + // Removes browsing data within the given |time_range|, with datatypes being // specified by |remove_mask| and origin types by |origin_type_mask|. virtual void Remove(const base::Time& delete_begin,
diff --git a/chrome/browser/browsing_data/browsing_data_remover_browsertest.cc b/chrome/browser/browsing_data/browsing_data_remover_browsertest.cc index cdde107..1fc217c3 100644 --- a/chrome/browser/browsing_data/browsing_data_remover_browsertest.cc +++ b/chrome/browser/browsing_data/browsing_data_remover_browsertest.cc
@@ -15,6 +15,7 @@ #include "chrome/browser/browsing_data/browsing_data_remover_factory.h" #include "chrome/browser/browsing_data/browsing_data_remover_test_util.h" #include "chrome/browser/browsing_data/cache_counter.h" +#include "chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.h" #include "chrome/browser/chrome_notification_types.h" #include "chrome/browser/external_protocol/external_protocol_handler.h" #include "chrome/browser/profiles/profile.h" @@ -118,9 +119,9 @@ BrowsingDataRemover* remover = BrowsingDataRemoverFactory::GetForBrowserContext(browser()->profile()); BrowsingDataRemoverCompletionObserver completion_observer(remover); - remover->RemoveAndReply( - base::Time(), base::Time::Max(), remove_mask, - BrowsingDataHelper::UNPROTECTED_WEB, &completion_observer); + remover->RemoveAndReply(base::Time(), base::Time::Max(), remove_mask, + BrowsingDataRemover::ORIGIN_TYPE_UNPROTECTED_WEB, + &completion_observer); completion_observer.BlockUntilCompletion(); } @@ -132,8 +133,8 @@ BrowsingDataRemoverCompletionObserver completion_observer(remover); remover->RemoveWithFilterAndReply( base::Time(), base::Time::Max(), remove_mask, - BrowsingDataHelper::UNPROTECTED_WEB, std::move(filter_builder), - &completion_observer); + BrowsingDataRemover::ORIGIN_TYPE_UNPROTECTED_WEB, + std::move(filter_builder), &completion_observer); completion_observer.BlockUntilCompletion(); } @@ -194,7 +195,7 @@ // Test BrowsingDataRemover for downloads. IN_PROC_BROWSER_TEST_F(BrowsingDataRemoverBrowserTest, Download) { DownloadAnItem(); - RemoveAndWait(BrowsingDataRemover::REMOVE_DOWNLOADS); + RemoveAndWait(BrowsingDataRemover::DATA_TYPE_DOWNLOADS); VerifyDownloadCount(0u); } @@ -208,7 +209,7 @@ prefs->SetBoolean(prefs::kAllowDeletingBrowserHistory, false); DownloadAnItem(); - RemoveAndWait(BrowsingDataRemover::REMOVE_DOWNLOADS); + RemoveAndWait(BrowsingDataRemover::DATA_TYPE_DOWNLOADS); VerifyDownloadCount(1u); } #endif @@ -223,7 +224,7 @@ RunScriptAndCheckResult("insertRecord('text')", "done"); RunScriptAndCheckResult("getRecords()", "text"); - RemoveAndWait(BrowsingDataRemover::REMOVE_SITE_DATA); + RemoveAndWait(ChromeBrowsingDataRemoverDelegate::DATA_TYPE_SITE_DATA); ui_test_utils::NavigateToURL(browser(), url); RunScriptAndCheckResult("createTable()", "done"); @@ -254,7 +255,7 @@ std::unique_ptr<BrowsingDataFilterBuilder> filter_builder = BrowsingDataFilterBuilder::Create(BrowsingDataFilterBuilder::WHITELIST); filter_builder->AddOrigin(url::Origin(url1)); - RemoveWithFilterAndWait(BrowsingDataRemover::REMOVE_CACHE, + RemoveWithFilterAndWait(BrowsingDataRemover::DATA_TYPE_CACHE, std::move(filter_builder)); // After the partial deletion, the cache should be smaller but still nonempty. @@ -265,12 +266,12 @@ filter_builder = BrowsingDataFilterBuilder::Create(BrowsingDataFilterBuilder::WHITELIST); filter_builder->AddOrigin(url::Origin(url1)); - RemoveWithFilterAndWait(BrowsingDataRemover::REMOVE_CACHE, + RemoveWithFilterAndWait(BrowsingDataRemover::DATA_TYPE_CACHE, std::move(filter_builder)); EXPECT_EQ(new_size, GetCacheSize()); // Delete the remaining data. - RemoveAndWait(BrowsingDataRemover::REMOVE_CACHE); + RemoveAndWait(BrowsingDataRemover::DATA_TYPE_CACHE); // The cache is empty. EXPECT_EQ(0, GetCacheSize()); @@ -285,7 +286,7 @@ ExternalProtocolHandler::BlockState block_state = ExternalProtocolHandler::GetBlockState("tel", profile); ASSERT_EQ(ExternalProtocolHandler::BLOCK, block_state); - RemoveAndWait(BrowsingDataRemover::REMOVE_SITE_DATA); + RemoveAndWait(ChromeBrowsingDataRemoverDelegate::DATA_TYPE_SITE_DATA); block_state = ExternalProtocolHandler::GetBlockState("tel", profile); ASSERT_EQ(ExternalProtocolHandler::UNKNOWN, block_state); } @@ -293,7 +294,7 @@ // Verify that TransportSecurityState data is cleared for REMOVE_CACHE. IN_PROC_BROWSER_TEST_F(BrowsingDataRemoverTransportSecurityStateBrowserTest, ClearTransportSecurityState) { - RemoveAndWait(BrowsingDataRemover::REMOVE_CACHE); + RemoveAndWait(BrowsingDataRemover::DATA_TYPE_CACHE); base::RunLoop run_loop; BrowserThread::PostTaskAndReply( BrowserThread::IO, FROM_HERE, @@ -309,7 +310,7 @@ // set. IN_PROC_BROWSER_TEST_F(BrowsingDataRemoverTransportSecurityStateBrowserTest, PreserveTransportSecurityState) { - RemoveAndWait(BrowsingDataRemover::REMOVE_SITE_DATA); + RemoveAndWait(ChromeBrowsingDataRemoverDelegate::DATA_TYPE_SITE_DATA); base::RunLoop run_loop; BrowserThread::PostTaskAndReply( BrowserThread::IO, FROM_HERE,
diff --git a/chrome/browser/browsing_data/browsing_data_remover_delegate.h b/chrome/browser/browsing_data/browsing_data_remover_delegate.h index bb3261e..0d0cdd9 100644 --- a/chrome/browser/browsing_data/browsing_data_remover_delegate.h +++ b/chrome/browser/browsing_data/browsing_data_remover_delegate.h
@@ -5,14 +5,29 @@ #ifndef CHROME_BROWSER_BROWSING_DATA_BROWSING_DATA_REMOVER_DELEGATE_H_ #define CHROME_BROWSER_BROWSING_DATA_BROWSING_DATA_REMOVER_DELEGATE_H_ +class GURL; + namespace content { class BrowsingDataFilterBuilder; } +namespace storage { +class SpecialStoragePolicy; +} + class BrowsingDataRemoverDelegate { public: virtual ~BrowsingDataRemoverDelegate() {} + // Determines whether |origin| matches |origin_type_mask| + // given the |special_storage_policy|. |origin_type_mask| should only contain + // embedder-specific datatypes. + virtual bool DoesOriginMatchEmbedderMask( + int origin_type_mask, + const GURL& origin, + storage::SpecialStoragePolicy* special_storage_policy) const = 0; + + // Removes embedder-specific data. virtual void RemoveEmbedderData( const base::Time& delete_begin, const base::Time& delete_end,
diff --git a/chrome/browser/browsing_data/browsing_data_remover_impl.cc b/chrome/browser/browsing_data/browsing_data_remover_impl.cc index dd3a924..c0ea686 100644 --- a/chrome/browser/browsing_data/browsing_data_remover_impl.cc +++ b/chrome/browser/browsing_data/browsing_data_remover_impl.cc
@@ -15,7 +15,6 @@ #include "base/logging.h" #include "base/memory/ptr_util.h" #include "base/metrics/histogram_macros.h" -#include "chrome/browser/browsing_data/browsing_data_helper.h" #include "chrome/browser/browsing_data/browsing_data_remover_delegate.h" #include "chrome/browser/profiles/profile.h" #include "chrome/common/pref_names.h" @@ -63,15 +62,23 @@ return base::Bind(&IgnoreArgumentHelper<T>, callback); } -// Helper to create callback for BrowsingDataRemoverImpl::DoesOriginMatchMask. bool DoesOriginMatchMaskAndUrls( + const base::WeakPtr<BrowsingDataRemoverImpl>& remover_weak_ptr, int origin_type_mask, const base::Callback<bool(const GURL&)>& predicate, const GURL& origin, storage::SpecialStoragePolicy* special_storage_policy) { + // If BrowsingDataRemoverImpl is null, it is not possible to determine which + // origins should have their data deleted, and so we do not delete + // anything. This is not a problem, because this can only happen shortly + // before shutdown and thus the deletion would likely not be able to + // finish anyway. + if (!remover_weak_ptr) + return false; + return predicate.Run(origin) && - BrowsingDataHelper::DoesOriginMatchMask(origin, origin_type_mask, - special_storage_policy); + remover_weak_ptr->DoesOriginMatchMask(origin_type_mask, origin, + special_storage_policy); } void ClearHttpAuthCacheOnIOThread( @@ -204,6 +211,41 @@ return embedder_delegate_.get(); } +bool BrowsingDataRemoverImpl::DoesOriginMatchMask( + int origin_type_mask, + const GURL& origin, + storage::SpecialStoragePolicy* policy) const { + const std::vector<std::string>& schemes = url::GetWebStorageSchemes(); + bool is_web_scheme = + (std::find(schemes.begin(), schemes.end(), origin.GetOrigin().scheme()) != + schemes.end()); + + // If a websafe origin is unprotected, it matches iff UNPROTECTED_WEB. + if ((!policy || !policy->IsStorageProtected(origin.GetOrigin())) && + is_web_scheme && (origin_type_mask & ORIGIN_TYPE_UNPROTECTED_WEB)) { + return true; + } + origin_type_mask &= ~ORIGIN_TYPE_UNPROTECTED_WEB; + + // Hosted applications (protected and websafe origins) iff PROTECTED_WEB. + if (policy && policy->IsStorageProtected(origin.GetOrigin()) && + is_web_scheme && (origin_type_mask & ORIGIN_TYPE_PROTECTED_WEB)) { + return true; + } + origin_type_mask &= ~ORIGIN_TYPE_PROTECTED_WEB; + + DCHECK(embedder_delegate_ || !origin_type_mask) + << "The mask contains embedder-defined origin types, but there is no " + << "embedder delegate to process them."; + + if (embedder_delegate_) { + return embedder_delegate_->DoesOriginMatchEmbedderMask(origin_type_mask, + origin, policy); + } + + return false; +} + void BrowsingDataRemoverImpl::Remove(const base::Time& delete_begin, const base::Time& delete_end, int remove_mask, @@ -229,7 +271,6 @@ int remove_mask, int origin_type_mask, std::unique_ptr<BrowsingDataFilterBuilder> filter_builder) { - DCHECK_EQ(0, remove_mask & ~FILTERABLE_DATATYPES); DCHECK(filter_builder); RemoveInternal(delete_begin, delete_end, remove_mask, origin_type_mask, std::move(filter_builder), nullptr); @@ -242,7 +283,6 @@ int origin_type_mask, std::unique_ptr<BrowsingDataFilterBuilder> filter_builder, Observer* observer) { - DCHECK_EQ(0, remove_mask & ~FILTERABLE_DATATYPES); DCHECK(filter_builder); DCHECK(observer); RemoveInternal(delete_begin, delete_end, remove_mask, origin_type_mask, @@ -323,33 +363,13 @@ remove_mask_ = remove_mask; origin_type_mask_ = origin_type_mask; - if (origin_type_mask_ & BrowsingDataHelper::UNPROTECTED_WEB) { - content::RecordAction( - UserMetricsAction("ClearBrowsingData_MaskContainsUnprotectedWeb")); - } - if (origin_type_mask_ & BrowsingDataHelper::PROTECTED_WEB) { - content::RecordAction( - UserMetricsAction("ClearBrowsingData_MaskContainsProtectedWeb")); - } - if (origin_type_mask_ & BrowsingDataHelper::EXTENSION) { - content::RecordAction( - UserMetricsAction("ClearBrowsingData_MaskContainsExtension")); - } - // If this fires, we added a new BrowsingDataHelper::OriginTypeMask without - // updating the user metrics above. - static_assert( - BrowsingDataHelper::ALL == (BrowsingDataHelper::UNPROTECTED_WEB | - BrowsingDataHelper::PROTECTED_WEB | - BrowsingDataHelper::EXTENSION), - "OriginTypeMask has been updated without updating user metrics"); - // Record the combined deletion of cookies and cache. CookieOrCacheDeletionChoice choice = NEITHER_COOKIES_NOR_CACHE; - if (remove_mask & REMOVE_COOKIES && - origin_type_mask_ & BrowsingDataHelper::UNPROTECTED_WEB) { - choice = remove_mask & REMOVE_CACHE ? BOTH_COOKIES_AND_CACHE - : ONLY_COOKIES; - } else if (remove_mask & REMOVE_CACHE) { + if (remove_mask & DATA_TYPE_COOKIES && + origin_type_mask_ & ORIGIN_TYPE_UNPROTECTED_WEB) { + choice = + remove_mask & DATA_TYPE_CACHE ? BOTH_COOKIES_AND_CACHE : ONLY_COOKIES; + } else if (remove_mask & DATA_TYPE_CACHE) { choice = ONLY_CACHE; } @@ -372,8 +392,8 @@ filter_builder.BuildGeneralFilter(); ////////////////////////////////////////////////////////////////////////////// - // REMOVE_DOWNLOADS - if ((remove_mask & REMOVE_DOWNLOADS) && may_delete_history) { + // DATA_TYPE_DOWNLOADS + if ((remove_mask & DATA_TYPE_DOWNLOADS) && may_delete_history) { content::RecordAction(UserMetricsAction("ClearBrowsingData_Downloads")); content::DownloadManager* download_manager = BrowserContext::GetDownloadManager(browser_context_); @@ -382,11 +402,11 @@ } ////////////////////////////////////////////////////////////////////////////// - // REMOVE_CHANNEL_IDS + // DATA_TYPE_CHANNEL_IDS // Channel IDs are not separated for protected and unprotected web // origins. We check the origin_type_mask_ to prevent unintended deletion. - if (remove_mask & REMOVE_CHANNEL_IDS && - origin_type_mask_ & BrowsingDataHelper::UNPROTECTED_WEB) { + if (remove_mask & DATA_TYPE_CHANNEL_IDS && + origin_type_mask_ & ORIGIN_TYPE_UNPROTECTED_WEB) { content::RecordAction( UserMetricsAction("ClearBrowsingData_ChannelIDs")); // Since we are running on the UI thread don't call GetURLRequestContext(). @@ -406,41 +426,41 @@ // STORAGE PARTITION DATA uint32_t storage_partition_remove_mask = 0; - // We ignore the REMOVE_COOKIES request if UNPROTECTED_WEB is not set, - // so that callers who request REMOVE_SITE_DATA with PROTECTED_WEB + // We ignore the DATA_TYPE_COOKIES request if UNPROTECTED_WEB is not set, + // so that callers who request DATA_TYPE_SITE_DATA with another origin type // don't accidentally remove the cookies that are associated with the // UNPROTECTED_WEB origin. This is necessary because cookies are not separated - // between UNPROTECTED_WEB and PROTECTED_WEB. - if (remove_mask & REMOVE_COOKIES && - origin_type_mask_ & BrowsingDataHelper::UNPROTECTED_WEB) { + // between UNPROTECTED_WEB and other origin types. + if (remove_mask & DATA_TYPE_COOKIES && + origin_type_mask_ & ORIGIN_TYPE_UNPROTECTED_WEB) { storage_partition_remove_mask |= content::StoragePartition::REMOVE_DATA_MASK_COOKIES; } - if (remove_mask & REMOVE_LOCAL_STORAGE) { + if (remove_mask & DATA_TYPE_LOCAL_STORAGE) { storage_partition_remove_mask |= content::StoragePartition::REMOVE_DATA_MASK_LOCAL_STORAGE; } - if (remove_mask & REMOVE_INDEXEDDB) { + if (remove_mask & DATA_TYPE_INDEXED_DB) { storage_partition_remove_mask |= content::StoragePartition::REMOVE_DATA_MASK_INDEXEDDB; } - if (remove_mask & REMOVE_WEBSQL) { + if (remove_mask & DATA_TYPE_WEB_SQL) { storage_partition_remove_mask |= content::StoragePartition::REMOVE_DATA_MASK_WEBSQL; } - if (remove_mask & REMOVE_APPCACHE) { + if (remove_mask & DATA_TYPE_APP_CACHE) { storage_partition_remove_mask |= content::StoragePartition::REMOVE_DATA_MASK_APPCACHE; } - if (remove_mask & REMOVE_SERVICE_WORKERS) { + if (remove_mask & DATA_TYPE_SERVICE_WORKERS) { storage_partition_remove_mask |= content::StoragePartition::REMOVE_DATA_MASK_SERVICE_WORKERS; } - if (remove_mask & REMOVE_CACHE_STORAGE) { + if (remove_mask & DATA_TYPE_CACHE_STORAGE) { storage_partition_remove_mask |= content::StoragePartition::REMOVE_DATA_MASK_CACHE_STORAGE; } - if (remove_mask & REMOVE_FILE_SYSTEMS) { + if (remove_mask & DATA_TYPE_FILE_SYSTEMS) { storage_partition_remove_mask |= content::StoragePartition::REMOVE_DATA_MASK_FILE_SYSTEMS; } @@ -448,7 +468,7 @@ // Content Decryption Modules used by Encrypted Media store licenses in a // private filesystem. These are different than content licenses used by // Flash (which are deleted father down in this method). - if (remove_mask & REMOVE_MEDIA_LICENSES) { + if (remove_mask & DATA_TYPE_MEDIA_LICENSES) { storage_partition_remove_mask |= content::StoragePartition::REMOVE_DATA_MASK_PLUGIN_PRIVATE_DATA; } @@ -468,8 +488,7 @@ ~content::StoragePartition::QUOTA_MANAGED_STORAGE_MASK_PERSISTENT; if (delete_begin_ == base::Time() || - origin_type_mask_ & - (BrowsingDataHelper::PROTECTED_WEB | BrowsingDataHelper::EXTENSION)) { + ((origin_type_mask_ & ~ORIGIN_TYPE_UNPROTECTED_WEB) != 0)) { // If we're deleting since the beginning of time, or we're removing // protected origins, then remove persistent quota data. quota_storage_remove_mask |= @@ -487,14 +506,15 @@ storage_partition->ClearData( storage_partition_remove_mask, quota_storage_remove_mask, - base::Bind(&DoesOriginMatchMaskAndUrls, origin_type_mask_, filter), + base::Bind(&DoesOriginMatchMaskAndUrls, weak_ptr_factory_.GetWeakPtr(), + origin_type_mask_, filter), cookie_matcher, delete_begin_, delete_end_, clear_storage_partition_data_.GetCompletionCallback()); } ////////////////////////////////////////////////////////////////////////////// // CACHE - if (remove_mask & REMOVE_CACHE) { + if (remove_mask & DATA_TYPE_CACHE) { // Tell the renderers to clear their cache. web_cache::WebCacheManager::GetInstance()->ClearCache(); @@ -523,7 +543,7 @@ ////////////////////////////////////////////////////////////////////////////// // Auth cache. - if (remove_mask & REMOVE_COOKIES) { + if (remove_mask & DATA_TYPE_COOKIES) { scoped_refptr<net::URLRequestContextGetter> request_context = BrowserContext::GetDefaultStoragePartition(browser_context_) ->GetURLRequestContext();
diff --git a/chrome/browser/browsing_data/browsing_data_remover_impl.h b/chrome/browser/browsing_data/browsing_data_remover_impl.h index 9015d1b..9889aea0 100644 --- a/chrome/browser/browsing_data/browsing_data_remover_impl.h +++ b/chrome/browser/browsing_data/browsing_data_remover_impl.h
@@ -91,7 +91,10 @@ void SetEmbedderDelegate( std::unique_ptr<BrowsingDataRemoverDelegate> embedder_delegate) override; BrowsingDataRemoverDelegate* GetEmbedderDelegate() const override; - + bool DoesOriginMatchMask( + int origin_type_mask, + const GURL& origin, + storage::SpecialStoragePolicy* special_storage_policy) const override; void Remove(const base::Time& delete_begin, const base::Time& delete_end, int remove_mask,
diff --git a/chrome/browser/browsing_data/browsing_data_remover_impl_unittest.cc b/chrome/browser/browsing_data/browsing_data_remover_impl_unittest.cc index d7a64313..4dc9b58 100644 --- a/chrome/browser/browsing_data/browsing_data_remover_impl_unittest.cc +++ b/chrome/browser/browsing_data/browsing_data_remover_impl_unittest.cc
@@ -41,6 +41,7 @@ #include "content/public/browser/local_storage_usage_info.h" #include "content/public/browser/storage_partition.h" #include "content/public/test/mock_download_manager.h" +#include "content/public/test/mock_special_storage_policy.h" #include "content/public/test/test_browser_thread.h" #include "content/public/test/test_browser_thread_bundle.h" #include "content/public/test/test_utils.h" @@ -58,12 +59,6 @@ #include "testing/gtest/include/gtest/gtest.h" #include "url/origin.h" -#if BUILDFLAG(ENABLE_EXTENSIONS) -#include "chrome/browser/extensions/mock_extension_special_storage_policy.h" -#endif - -class MockExtensionSpecialStoragePolicy; - using content::BrowserThread; using content::BrowserContext; using content::BrowsingDataFilterBuilder; @@ -550,9 +545,7 @@ ~BrowsingDataRemoverImplTest() override {} void TearDown() override { -#if BUILDFLAG(ENABLE_EXTENSIONS) mock_policy_ = nullptr; -#endif // BrowserContext contains a DOMStorageContext. BrowserContext's // destructor posts a message to the WEBKIT thread to delete some of its @@ -570,9 +563,9 @@ TestStoragePartition storage_partition; remover_->OverrideStoragePartitionForTesting(&storage_partition); - int origin_type_mask = BrowsingDataHelper::UNPROTECTED_WEB; + int origin_type_mask = BrowsingDataRemover::ORIGIN_TYPE_UNPROTECTED_WEB; if (include_protected_origins) - origin_type_mask |= BrowsingDataHelper::PROTECTED_WEB; + origin_type_mask |= BrowsingDataRemover::ORIGIN_TYPE_PROTECTED_WEB; BrowsingDataRemoverCompletionObserver completion_observer(remover_); remover_->RemoveAndReply( @@ -596,7 +589,7 @@ BrowsingDataRemoverCompletionObserver completion_observer(remover_); remover_->RemoveWithFilterAndReply( delete_begin, delete_end, remove_mask, - BrowsingDataHelper::UNPROTECTED_WEB, + BrowsingDataRemover::ORIGIN_TYPE_UNPROTECTED_WEB, std::move(filter_builder), &completion_observer); completion_observer.BlockUntilCompletion(); @@ -627,32 +620,19 @@ return storage_partition_removal_data_; } - MockExtensionSpecialStoragePolicy* CreateMockPolicy() { -#if BUILDFLAG(ENABLE_EXTENSIONS) - mock_policy_ = new MockExtensionSpecialStoragePolicy; + content::MockSpecialStoragePolicy* CreateMockPolicy() { + mock_policy_ = new content::MockSpecialStoragePolicy(); return mock_policy_.get(); -#else - NOTREACHED(); - return nullptr; -#endif } - storage::SpecialStoragePolicy* mock_policy() { -#if BUILDFLAG(ENABLE_EXTENSIONS) + content::MockSpecialStoragePolicy* mock_policy() { return mock_policy_.get(); -#else - return nullptr; -#endif } - // If |kOrigin1| is protected when extensions are enabled, the expected - // result for tests where the OriginMatcherFunction result is variable. - bool ShouldRemoveForProtectedOriginOne() const { -#if BUILDFLAG(ENABLE_EXTENSIONS) - return false; -#else - return true; -#endif + bool Match(const GURL& origin, + int mask, + storage::SpecialStoragePolicy* policy) { + return remover_->DoesOriginMatchMask(mask, origin, policy); } private: @@ -664,9 +644,7 @@ StoragePartitionRemovalData storage_partition_removal_data_; -#if BUILDFLAG(ENABLE_EXTENSIONS) - scoped_refptr<MockExtensionSpecialStoragePolicy> mock_policy_; -#endif + scoped_refptr<content::MockSpecialStoragePolicy> mock_policy_; DISALLOW_COPY_AND_ASSIGN(BrowsingDataRemoverImplTest); }; @@ -675,10 +653,11 @@ TEST_F(BrowsingDataRemoverImplTest, RemoveCookieForever) { BlockUntilBrowsingDataRemoved(base::Time(), base::Time::Max(), - BrowsingDataRemover::REMOVE_COOKIES, false); + BrowsingDataRemover::DATA_TYPE_COOKIES, false); - EXPECT_EQ(BrowsingDataRemover::REMOVE_COOKIES, GetRemovalMask()); - EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginTypeMask()); + EXPECT_EQ(BrowsingDataRemover::DATA_TYPE_COOKIES, GetRemovalMask()); + EXPECT_EQ(BrowsingDataRemover::ORIGIN_TYPE_UNPROTECTED_WEB, + GetOriginTypeMask()); // Verify that storage partition was instructed to remove the cookies. StoragePartitionRemovalData removal_data = GetStoragePartitionRemovalData(); @@ -691,10 +670,11 @@ TEST_F(BrowsingDataRemoverImplTest, RemoveCookieLastHour) { BlockUntilBrowsingDataRemoved(AnHourAgo(), base::Time::Max(), - BrowsingDataRemover::REMOVE_COOKIES, false); + BrowsingDataRemover::DATA_TYPE_COOKIES, false); - EXPECT_EQ(BrowsingDataRemover::REMOVE_COOKIES, GetRemovalMask()); - EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginTypeMask()); + EXPECT_EQ(BrowsingDataRemover::DATA_TYPE_COOKIES, GetRemovalMask()); + EXPECT_EQ(BrowsingDataRemover::ORIGIN_TYPE_UNPROTECTED_WEB, + GetOriginTypeMask()); // Verify that storage partition was instructed to remove the cookies. StoragePartitionRemovalData removal_data = GetStoragePartitionRemovalData(); @@ -713,11 +693,12 @@ filter->AddRegisterableDomain(kTestRegisterableDomain1); filter->AddRegisterableDomain(kTestRegisterableDomain3); BlockUntilOriginDataRemoved(AnHourAgo(), base::Time::Max(), - BrowsingDataRemover::REMOVE_COOKIES, + BrowsingDataRemover::DATA_TYPE_COOKIES, std::move(filter)); - EXPECT_EQ(BrowsingDataRemover::REMOVE_COOKIES, GetRemovalMask()); - EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginTypeMask()); + EXPECT_EQ(BrowsingDataRemover::DATA_TYPE_COOKIES, GetRemovalMask()); + EXPECT_EQ(BrowsingDataRemover::ORIGIN_TYPE_UNPROTECTED_WEB, + GetOriginTypeMask()); // Verify that storage partition was instructed to remove the cookies. StoragePartitionRemovalData removal_data = GetStoragePartitionRemovalData(); @@ -762,7 +743,7 @@ net::HttpAuth::AUTH_SCHEME_BASIC)); BlockUntilBrowsingDataRemoved(base::Time(), base::Time::Max(), - BrowsingDataRemover::REMOVE_COOKIES, false); + BrowsingDataRemover::DATA_TYPE_COOKIES, false); EXPECT_EQ(nullptr, http_auth_cache->Lookup(kOrigin1, kTestRealm, net::HttpAuth::AUTH_SCHEME_BASIC)); @@ -776,10 +757,12 @@ EXPECT_EQ(1, tester.ChannelIDCount()); BlockUntilBrowsingDataRemoved(base::Time(), base::Time::Max(), - BrowsingDataRemover::REMOVE_CHANNEL_IDS, false); + BrowsingDataRemover::DATA_TYPE_CHANNEL_IDS, + false); - EXPECT_EQ(BrowsingDataRemover::REMOVE_CHANNEL_IDS, GetRemovalMask()); - EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginTypeMask()); + EXPECT_EQ(BrowsingDataRemover::DATA_TYPE_CHANNEL_IDS, GetRemovalMask()); + EXPECT_EQ(BrowsingDataRemover::ORIGIN_TYPE_UNPROTECTED_WEB, + GetOriginTypeMask()); EXPECT_EQ(1, tester.ssl_config_changed_count()); EXPECT_EQ(0, tester.ChannelIDCount()); } @@ -795,10 +778,12 @@ EXPECT_EQ(2, tester.ChannelIDCount()); BlockUntilBrowsingDataRemoved(AnHourAgo(), base::Time::Max(), - BrowsingDataRemover::REMOVE_CHANNEL_IDS, false); + BrowsingDataRemover::DATA_TYPE_CHANNEL_IDS, + false); - EXPECT_EQ(BrowsingDataRemover::REMOVE_CHANNEL_IDS, GetRemovalMask()); - EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginTypeMask()); + EXPECT_EQ(BrowsingDataRemover::DATA_TYPE_CHANNEL_IDS, GetRemovalMask()); + EXPECT_EQ(BrowsingDataRemover::ORIGIN_TYPE_UNPROTECTED_WEB, + GetOriginTypeMask()); EXPECT_EQ(1, tester.ssl_config_changed_count()); ASSERT_EQ(1, tester.ChannelIDCount()); net::ChannelIDStore::ChannelIDList channel_ids; @@ -819,7 +804,7 @@ filter_builder->AddRegisterableDomain(kTestRegisterableDomain1); BlockUntilOriginDataRemoved(base::Time(), base::Time::Max(), - BrowsingDataRemover::REMOVE_CHANNEL_IDS, + BrowsingDataRemover::DATA_TYPE_CHANNEL_IDS, std::move(filter_builder)); EXPECT_EQ(1, tester.ChannelIDCount()); @@ -829,18 +814,17 @@ } TEST_F(BrowsingDataRemoverImplTest, RemoveUnprotectedLocalStorageForever) { -#if BUILDFLAG(ENABLE_EXTENSIONS) - MockExtensionSpecialStoragePolicy* policy = CreateMockPolicy(); + content::MockSpecialStoragePolicy* policy = CreateMockPolicy(); // Protect kOrigin1. policy->AddProtected(kOrigin1.GetOrigin()); -#endif BlockUntilBrowsingDataRemoved(base::Time(), base::Time::Max(), - BrowsingDataRemover::REMOVE_LOCAL_STORAGE, + BrowsingDataRemover::DATA_TYPE_LOCAL_STORAGE, false); - EXPECT_EQ(BrowsingDataRemover::REMOVE_LOCAL_STORAGE, GetRemovalMask()); - EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginTypeMask()); + EXPECT_EQ(BrowsingDataRemover::DATA_TYPE_LOCAL_STORAGE, GetRemovalMask()); + EXPECT_EQ(BrowsingDataRemover::ORIGIN_TYPE_UNPROTECTED_WEB, + GetOriginTypeMask()); // Verify that storage partition was instructed to remove the data correctly. StoragePartitionRemovalData removal_data = GetStoragePartitionRemovalData(); @@ -851,27 +835,25 @@ EXPECT_EQ(removal_data.remove_begin, GetBeginTime()); // Check origin matcher. - EXPECT_EQ(ShouldRemoveForProtectedOriginOne(), - removal_data.origin_matcher.Run(kOrigin1, mock_policy())); + EXPECT_FALSE(removal_data.origin_matcher.Run(kOrigin1, mock_policy())); EXPECT_TRUE(removal_data.origin_matcher.Run(kOrigin2, mock_policy())); EXPECT_TRUE(removal_data.origin_matcher.Run(kOrigin3, mock_policy())); EXPECT_FALSE(removal_data.origin_matcher.Run(kOriginExt, mock_policy())); } TEST_F(BrowsingDataRemoverImplTest, RemoveProtectedLocalStorageForever) { -#if BUILDFLAG(ENABLE_EXTENSIONS) // Protect kOrigin1. - MockExtensionSpecialStoragePolicy* policy = CreateMockPolicy(); + content::MockSpecialStoragePolicy* policy = CreateMockPolicy(); policy->AddProtected(kOrigin1.GetOrigin()); -#endif BlockUntilBrowsingDataRemoved(base::Time(), base::Time::Max(), - BrowsingDataRemover::REMOVE_LOCAL_STORAGE, + BrowsingDataRemover::DATA_TYPE_LOCAL_STORAGE, true); - EXPECT_EQ(BrowsingDataRemover::REMOVE_LOCAL_STORAGE, GetRemovalMask()); - EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB | - BrowsingDataHelper::PROTECTED_WEB, GetOriginTypeMask()); + EXPECT_EQ(BrowsingDataRemover::DATA_TYPE_LOCAL_STORAGE, GetRemovalMask()); + EXPECT_EQ(BrowsingDataRemover::ORIGIN_TYPE_UNPROTECTED_WEB | + BrowsingDataRemover::ORIGIN_TYPE_PROTECTED_WEB, + GetOriginTypeMask()); // Verify that storage partition was instructed to remove the data correctly. StoragePartitionRemovalData removal_data = GetStoragePartitionRemovalData(); @@ -896,10 +878,11 @@ BlockUntilBrowsingDataRemoved( base::Time::Now() - base::TimeDelta::FromDays(7), base::Time::Max(), - BrowsingDataRemover::REMOVE_LOCAL_STORAGE, false); + BrowsingDataRemover::DATA_TYPE_LOCAL_STORAGE, false); - EXPECT_EQ(BrowsingDataRemover::REMOVE_LOCAL_STORAGE, GetRemovalMask()); - EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginTypeMask()); + EXPECT_EQ(BrowsingDataRemover::DATA_TYPE_LOCAL_STORAGE, GetRemovalMask()); + EXPECT_EQ(BrowsingDataRemover::ORIGIN_TYPE_UNPROTECTED_WEB, + GetOriginTypeMask()); // Verify that storage partition was instructed to remove the data correctly. StoragePartitionRemovalData removal_data = GetStoragePartitionRemovalData(); @@ -924,14 +907,15 @@ EXPECT_CALL(*downloads_tester.download_manager(), RemoveDownloadsByURLAndTime(_, _, _)); - int removal_mask = BrowsingDataRemover::REMOVE_DOWNLOADS | - BrowsingDataRemover::REMOVE_COOKIES; + int removal_mask = BrowsingDataRemover::DATA_TYPE_DOWNLOADS | + BrowsingDataRemover::DATA_TYPE_COOKIES; BlockUntilBrowsingDataRemoved(base::Time(), base::Time::Max(), removal_mask, false); EXPECT_EQ(removal_mask, GetRemovalMask()); - EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginTypeMask()); + EXPECT_EQ(BrowsingDataRemover::ORIGIN_TYPE_UNPROTECTED_WEB, + GetOriginTypeMask()); // The cookie would be deleted throught the StorageParition, check if the // partition was requested to remove cookie. @@ -945,22 +929,23 @@ TEST_F(BrowsingDataRemoverImplTest, RemoveQuotaManagedDataForeverBoth) { BlockUntilBrowsingDataRemoved( base::Time(), base::Time::Max(), - BrowsingDataRemover::REMOVE_FILE_SYSTEMS | - BrowsingDataRemover::REMOVE_WEBSQL | - BrowsingDataRemover::REMOVE_APPCACHE | - BrowsingDataRemover::REMOVE_SERVICE_WORKERS | - BrowsingDataRemover::REMOVE_CACHE_STORAGE | - BrowsingDataRemover::REMOVE_INDEXEDDB, + BrowsingDataRemover::DATA_TYPE_FILE_SYSTEMS | + BrowsingDataRemover::DATA_TYPE_WEB_SQL | + BrowsingDataRemover::DATA_TYPE_APP_CACHE | + BrowsingDataRemover::DATA_TYPE_SERVICE_WORKERS | + BrowsingDataRemover::DATA_TYPE_CACHE_STORAGE | + BrowsingDataRemover::DATA_TYPE_INDEXED_DB, false); - EXPECT_EQ(BrowsingDataRemover::REMOVE_FILE_SYSTEMS | - BrowsingDataRemover::REMOVE_WEBSQL | - BrowsingDataRemover::REMOVE_APPCACHE | - BrowsingDataRemover::REMOVE_SERVICE_WORKERS | - BrowsingDataRemover::REMOVE_CACHE_STORAGE | - BrowsingDataRemover::REMOVE_INDEXEDDB, + EXPECT_EQ(BrowsingDataRemover::DATA_TYPE_FILE_SYSTEMS | + BrowsingDataRemover::DATA_TYPE_WEB_SQL | + BrowsingDataRemover::DATA_TYPE_APP_CACHE | + BrowsingDataRemover::DATA_TYPE_SERVICE_WORKERS | + BrowsingDataRemover::DATA_TYPE_CACHE_STORAGE | + BrowsingDataRemover::DATA_TYPE_INDEXED_DB, GetRemovalMask()); - EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginTypeMask()); + EXPECT_EQ(BrowsingDataRemover::ORIGIN_TYPE_UNPROTECTED_WEB, + GetOriginTypeMask()); // Verify storage partition related stuffs. StoragePartitionRemovalData removal_data = GetStoragePartitionRemovalData(); @@ -983,22 +968,23 @@ BlockUntilBrowsingDataRemoved( base::Time(), base::Time::Max(), - BrowsingDataRemover::REMOVE_FILE_SYSTEMS | - BrowsingDataRemover::REMOVE_WEBSQL | - BrowsingDataRemover::REMOVE_APPCACHE | - BrowsingDataRemover::REMOVE_SERVICE_WORKERS | - BrowsingDataRemover::REMOVE_CACHE_STORAGE | - BrowsingDataRemover::REMOVE_INDEXEDDB, + BrowsingDataRemover::DATA_TYPE_FILE_SYSTEMS | + BrowsingDataRemover::DATA_TYPE_WEB_SQL | + BrowsingDataRemover::DATA_TYPE_APP_CACHE | + BrowsingDataRemover::DATA_TYPE_SERVICE_WORKERS | + BrowsingDataRemover::DATA_TYPE_CACHE_STORAGE | + BrowsingDataRemover::DATA_TYPE_INDEXED_DB, false); - EXPECT_EQ(BrowsingDataRemover::REMOVE_FILE_SYSTEMS | - BrowsingDataRemover::REMOVE_WEBSQL | - BrowsingDataRemover::REMOVE_APPCACHE | - BrowsingDataRemover::REMOVE_SERVICE_WORKERS | - BrowsingDataRemover::REMOVE_CACHE_STORAGE | - BrowsingDataRemover::REMOVE_INDEXEDDB, + EXPECT_EQ(BrowsingDataRemover::DATA_TYPE_FILE_SYSTEMS | + BrowsingDataRemover::DATA_TYPE_WEB_SQL | + BrowsingDataRemover::DATA_TYPE_APP_CACHE | + BrowsingDataRemover::DATA_TYPE_SERVICE_WORKERS | + BrowsingDataRemover::DATA_TYPE_CACHE_STORAGE | + BrowsingDataRemover::DATA_TYPE_INDEXED_DB, GetRemovalMask()); - EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginTypeMask()); + EXPECT_EQ(BrowsingDataRemover::ORIGIN_TYPE_UNPROTECTED_WEB, + GetOriginTypeMask()); // Verify storage partition related stuffs. StoragePartitionRemovalData removal_data = GetStoragePartitionRemovalData(); @@ -1028,22 +1014,23 @@ BlockUntilBrowsingDataRemoved( base::Time(), base::Time::Max(), - BrowsingDataRemover::REMOVE_FILE_SYSTEMS | - BrowsingDataRemover::REMOVE_WEBSQL | - BrowsingDataRemover::REMOVE_APPCACHE | - BrowsingDataRemover::REMOVE_SERVICE_WORKERS | - BrowsingDataRemover::REMOVE_CACHE_STORAGE | - BrowsingDataRemover::REMOVE_INDEXEDDB, + BrowsingDataRemover::DATA_TYPE_FILE_SYSTEMS | + BrowsingDataRemover::DATA_TYPE_WEB_SQL | + BrowsingDataRemover::DATA_TYPE_APP_CACHE | + BrowsingDataRemover::DATA_TYPE_SERVICE_WORKERS | + BrowsingDataRemover::DATA_TYPE_CACHE_STORAGE | + BrowsingDataRemover::DATA_TYPE_INDEXED_DB, false); - EXPECT_EQ(BrowsingDataRemover::REMOVE_FILE_SYSTEMS | - BrowsingDataRemover::REMOVE_WEBSQL | - BrowsingDataRemover::REMOVE_APPCACHE | - BrowsingDataRemover::REMOVE_SERVICE_WORKERS | - BrowsingDataRemover::REMOVE_CACHE_STORAGE | - BrowsingDataRemover::REMOVE_INDEXEDDB, + EXPECT_EQ(BrowsingDataRemover::DATA_TYPE_FILE_SYSTEMS | + BrowsingDataRemover::DATA_TYPE_WEB_SQL | + BrowsingDataRemover::DATA_TYPE_APP_CACHE | + BrowsingDataRemover::DATA_TYPE_SERVICE_WORKERS | + BrowsingDataRemover::DATA_TYPE_CACHE_STORAGE | + BrowsingDataRemover::DATA_TYPE_INDEXED_DB, GetRemovalMask()); - EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginTypeMask()); + EXPECT_EQ(BrowsingDataRemover::ORIGIN_TYPE_UNPROTECTED_WEB, + GetOriginTypeMask()); // Verify storage partition related stuffs. StoragePartitionRemovalData removal_data = GetStoragePartitionRemovalData(); @@ -1072,22 +1059,23 @@ BlockUntilBrowsingDataRemoved( base::Time(), base::Time::Max(), - BrowsingDataRemover::REMOVE_FILE_SYSTEMS | - BrowsingDataRemover::REMOVE_WEBSQL | - BrowsingDataRemover::REMOVE_APPCACHE | - BrowsingDataRemover::REMOVE_SERVICE_WORKERS | - BrowsingDataRemover::REMOVE_CACHE_STORAGE | - BrowsingDataRemover::REMOVE_INDEXEDDB, + BrowsingDataRemover::DATA_TYPE_FILE_SYSTEMS | + BrowsingDataRemover::DATA_TYPE_WEB_SQL | + BrowsingDataRemover::DATA_TYPE_APP_CACHE | + BrowsingDataRemover::DATA_TYPE_SERVICE_WORKERS | + BrowsingDataRemover::DATA_TYPE_CACHE_STORAGE | + BrowsingDataRemover::DATA_TYPE_INDEXED_DB, false); - EXPECT_EQ(BrowsingDataRemover::REMOVE_FILE_SYSTEMS | - BrowsingDataRemover::REMOVE_WEBSQL | - BrowsingDataRemover::REMOVE_APPCACHE | - BrowsingDataRemover::REMOVE_SERVICE_WORKERS | - BrowsingDataRemover::REMOVE_CACHE_STORAGE | - BrowsingDataRemover::REMOVE_INDEXEDDB, + EXPECT_EQ(BrowsingDataRemover::DATA_TYPE_FILE_SYSTEMS | + BrowsingDataRemover::DATA_TYPE_WEB_SQL | + BrowsingDataRemover::DATA_TYPE_APP_CACHE | + BrowsingDataRemover::DATA_TYPE_SERVICE_WORKERS | + BrowsingDataRemover::DATA_TYPE_CACHE_STORAGE | + BrowsingDataRemover::DATA_TYPE_INDEXED_DB, GetRemovalMask()); - EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginTypeMask()); + EXPECT_EQ(BrowsingDataRemover::ORIGIN_TYPE_UNPROTECTED_WEB, + GetOriginTypeMask()); // Verify storage partition related stuffs. StoragePartitionRemovalData removal_data = GetStoragePartitionRemovalData(); @@ -1115,23 +1103,25 @@ BrowsingDataFilterBuilder::Create(BrowsingDataFilterBuilder::WHITELIST)); builder->AddRegisterableDomain(kTestRegisterableDomain1); // Remove Origin 1. - BlockUntilOriginDataRemoved(base::Time(), base::Time::Max(), - BrowsingDataRemover::REMOVE_APPCACHE | - BrowsingDataRemover::REMOVE_SERVICE_WORKERS | - BrowsingDataRemover::REMOVE_CACHE_STORAGE | - BrowsingDataRemover::REMOVE_FILE_SYSTEMS | - BrowsingDataRemover::REMOVE_INDEXEDDB | - BrowsingDataRemover::REMOVE_WEBSQL, - std::move(builder)); + BlockUntilOriginDataRemoved( + base::Time(), base::Time::Max(), + BrowsingDataRemover::DATA_TYPE_APP_CACHE | + BrowsingDataRemover::DATA_TYPE_SERVICE_WORKERS | + BrowsingDataRemover::DATA_TYPE_CACHE_STORAGE | + BrowsingDataRemover::DATA_TYPE_FILE_SYSTEMS | + BrowsingDataRemover::DATA_TYPE_INDEXED_DB | + BrowsingDataRemover::DATA_TYPE_WEB_SQL, + std::move(builder)); - EXPECT_EQ(BrowsingDataRemover::REMOVE_APPCACHE | - BrowsingDataRemover::REMOVE_SERVICE_WORKERS | - BrowsingDataRemover::REMOVE_CACHE_STORAGE | - BrowsingDataRemover::REMOVE_FILE_SYSTEMS | - BrowsingDataRemover::REMOVE_INDEXEDDB | - BrowsingDataRemover::REMOVE_WEBSQL, + EXPECT_EQ(BrowsingDataRemover::DATA_TYPE_APP_CACHE | + BrowsingDataRemover::DATA_TYPE_SERVICE_WORKERS | + BrowsingDataRemover::DATA_TYPE_CACHE_STORAGE | + BrowsingDataRemover::DATA_TYPE_FILE_SYSTEMS | + BrowsingDataRemover::DATA_TYPE_INDEXED_DB | + BrowsingDataRemover::DATA_TYPE_WEB_SQL, GetRemovalMask()); - EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginTypeMask()); + EXPECT_EQ(BrowsingDataRemover::ORIGIN_TYPE_UNPROTECTED_WEB, + GetOriginTypeMask()); // Verify storage partition related stuffs. StoragePartitionRemovalData removal_data = GetStoragePartitionRemovalData(); @@ -1154,22 +1144,23 @@ TEST_F(BrowsingDataRemoverImplTest, RemoveQuotaManagedDataForLastHour) { BlockUntilBrowsingDataRemoved( AnHourAgo(), base::Time::Max(), - BrowsingDataRemover::REMOVE_FILE_SYSTEMS | - BrowsingDataRemover::REMOVE_WEBSQL | - BrowsingDataRemover::REMOVE_APPCACHE | - BrowsingDataRemover::REMOVE_SERVICE_WORKERS | - BrowsingDataRemover::REMOVE_CACHE_STORAGE | - BrowsingDataRemover::REMOVE_INDEXEDDB, + BrowsingDataRemover::DATA_TYPE_FILE_SYSTEMS | + BrowsingDataRemover::DATA_TYPE_WEB_SQL | + BrowsingDataRemover::DATA_TYPE_APP_CACHE | + BrowsingDataRemover::DATA_TYPE_SERVICE_WORKERS | + BrowsingDataRemover::DATA_TYPE_CACHE_STORAGE | + BrowsingDataRemover::DATA_TYPE_INDEXED_DB, false); - EXPECT_EQ(BrowsingDataRemover::REMOVE_FILE_SYSTEMS | - BrowsingDataRemover::REMOVE_WEBSQL | - BrowsingDataRemover::REMOVE_APPCACHE | - BrowsingDataRemover::REMOVE_SERVICE_WORKERS | - BrowsingDataRemover::REMOVE_CACHE_STORAGE | - BrowsingDataRemover::REMOVE_INDEXEDDB, + EXPECT_EQ(BrowsingDataRemover::DATA_TYPE_FILE_SYSTEMS | + BrowsingDataRemover::DATA_TYPE_WEB_SQL | + BrowsingDataRemover::DATA_TYPE_APP_CACHE | + BrowsingDataRemover::DATA_TYPE_SERVICE_WORKERS | + BrowsingDataRemover::DATA_TYPE_CACHE_STORAGE | + BrowsingDataRemover::DATA_TYPE_INDEXED_DB, GetRemovalMask()); - EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginTypeMask()); + EXPECT_EQ(BrowsingDataRemover::ORIGIN_TYPE_UNPROTECTED_WEB, + GetOriginTypeMask()); // Verify storage partition related stuffs. StoragePartitionRemovalData removal_data = GetStoragePartitionRemovalData(); @@ -1194,22 +1185,23 @@ TEST_F(BrowsingDataRemoverImplTest, RemoveQuotaManagedDataForLastWeek) { BlockUntilBrowsingDataRemoved( base::Time::Now() - base::TimeDelta::FromDays(7), base::Time::Max(), - BrowsingDataRemover::REMOVE_FILE_SYSTEMS | - BrowsingDataRemover::REMOVE_WEBSQL | - BrowsingDataRemover::REMOVE_APPCACHE | - BrowsingDataRemover::REMOVE_SERVICE_WORKERS | - BrowsingDataRemover::REMOVE_CACHE_STORAGE | - BrowsingDataRemover::REMOVE_INDEXEDDB, + BrowsingDataRemover::DATA_TYPE_FILE_SYSTEMS | + BrowsingDataRemover::DATA_TYPE_WEB_SQL | + BrowsingDataRemover::DATA_TYPE_APP_CACHE | + BrowsingDataRemover::DATA_TYPE_SERVICE_WORKERS | + BrowsingDataRemover::DATA_TYPE_CACHE_STORAGE | + BrowsingDataRemover::DATA_TYPE_INDEXED_DB, false); - EXPECT_EQ(BrowsingDataRemover::REMOVE_FILE_SYSTEMS | - BrowsingDataRemover::REMOVE_WEBSQL | - BrowsingDataRemover::REMOVE_APPCACHE | - BrowsingDataRemover::REMOVE_SERVICE_WORKERS | - BrowsingDataRemover::REMOVE_CACHE_STORAGE | - BrowsingDataRemover::REMOVE_INDEXEDDB, + EXPECT_EQ(BrowsingDataRemover::DATA_TYPE_FILE_SYSTEMS | + BrowsingDataRemover::DATA_TYPE_WEB_SQL | + BrowsingDataRemover::DATA_TYPE_APP_CACHE | + BrowsingDataRemover::DATA_TYPE_SERVICE_WORKERS | + BrowsingDataRemover::DATA_TYPE_CACHE_STORAGE | + BrowsingDataRemover::DATA_TYPE_INDEXED_DB, GetRemovalMask()); - EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginTypeMask()); + EXPECT_EQ(BrowsingDataRemover::ORIGIN_TYPE_UNPROTECTED_WEB, + GetOriginTypeMask()); // Verify storage partition related stuffs. StoragePartitionRemovalData removal_data = GetStoragePartitionRemovalData(); @@ -1232,30 +1224,29 @@ } TEST_F(BrowsingDataRemoverImplTest, RemoveQuotaManagedUnprotectedOrigins) { -#if BUILDFLAG(ENABLE_EXTENSIONS) - MockExtensionSpecialStoragePolicy* policy = CreateMockPolicy(); + content::MockSpecialStoragePolicy* policy = CreateMockPolicy(); // Protect kOrigin1. policy->AddProtected(kOrigin1.GetOrigin()); -#endif BlockUntilBrowsingDataRemoved( base::Time(), base::Time::Max(), - BrowsingDataRemover::REMOVE_FILE_SYSTEMS | - BrowsingDataRemover::REMOVE_WEBSQL | - BrowsingDataRemover::REMOVE_APPCACHE | - BrowsingDataRemover::REMOVE_SERVICE_WORKERS | - BrowsingDataRemover::REMOVE_CACHE_STORAGE | - BrowsingDataRemover::REMOVE_INDEXEDDB, + BrowsingDataRemover::DATA_TYPE_FILE_SYSTEMS | + BrowsingDataRemover::DATA_TYPE_WEB_SQL | + BrowsingDataRemover::DATA_TYPE_APP_CACHE | + BrowsingDataRemover::DATA_TYPE_SERVICE_WORKERS | + BrowsingDataRemover::DATA_TYPE_CACHE_STORAGE | + BrowsingDataRemover::DATA_TYPE_INDEXED_DB, false); - EXPECT_EQ(BrowsingDataRemover::REMOVE_FILE_SYSTEMS | - BrowsingDataRemover::REMOVE_WEBSQL | - BrowsingDataRemover::REMOVE_APPCACHE | - BrowsingDataRemover::REMOVE_SERVICE_WORKERS | - BrowsingDataRemover::REMOVE_CACHE_STORAGE | - BrowsingDataRemover::REMOVE_INDEXEDDB, + EXPECT_EQ(BrowsingDataRemover::DATA_TYPE_FILE_SYSTEMS | + BrowsingDataRemover::DATA_TYPE_WEB_SQL | + BrowsingDataRemover::DATA_TYPE_APP_CACHE | + BrowsingDataRemover::DATA_TYPE_SERVICE_WORKERS | + BrowsingDataRemover::DATA_TYPE_CACHE_STORAGE | + BrowsingDataRemover::DATA_TYPE_INDEXED_DB, GetRemovalMask()); - EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginTypeMask()); + EXPECT_EQ(BrowsingDataRemover::ORIGIN_TYPE_UNPROTECTED_WEB, + GetOriginTypeMask()); // Verify storage partition related stuffs. StoragePartitionRemovalData removal_data = GetStoragePartitionRemovalData(); @@ -1271,41 +1262,40 @@ StoragePartition::QUOTA_MANAGED_STORAGE_MASK_ALL); // Check OriginMatcherFunction. - EXPECT_EQ(ShouldRemoveForProtectedOriginOne(), - removal_data.origin_matcher.Run(kOrigin1, mock_policy())); + EXPECT_FALSE(removal_data.origin_matcher.Run(kOrigin1, mock_policy())); EXPECT_TRUE(removal_data.origin_matcher.Run(kOrigin2, mock_policy())); EXPECT_TRUE(removal_data.origin_matcher.Run(kOrigin3, mock_policy())); } TEST_F(BrowsingDataRemoverImplTest, RemoveQuotaManagedProtectedSpecificOrigin) { -#if BUILDFLAG(ENABLE_EXTENSIONS) - MockExtensionSpecialStoragePolicy* policy = CreateMockPolicy(); + content::MockSpecialStoragePolicy* policy = CreateMockPolicy(); // Protect kOrigin1. policy->AddProtected(kOrigin1.GetOrigin()); -#endif std::unique_ptr<BrowsingDataFilterBuilder> builder( BrowsingDataFilterBuilder::Create(BrowsingDataFilterBuilder::WHITELIST)); builder->AddRegisterableDomain(kTestRegisterableDomain1); // Try to remove kOrigin1. Expect failure. - BlockUntilOriginDataRemoved(base::Time(), base::Time::Max(), - BrowsingDataRemover::REMOVE_APPCACHE | - BrowsingDataRemover::REMOVE_SERVICE_WORKERS | - BrowsingDataRemover::REMOVE_CACHE_STORAGE | - BrowsingDataRemover::REMOVE_FILE_SYSTEMS | - BrowsingDataRemover::REMOVE_INDEXEDDB | - BrowsingDataRemover::REMOVE_WEBSQL, - std::move(builder)); + BlockUntilOriginDataRemoved( + base::Time(), base::Time::Max(), + BrowsingDataRemover::DATA_TYPE_APP_CACHE | + BrowsingDataRemover::DATA_TYPE_SERVICE_WORKERS | + BrowsingDataRemover::DATA_TYPE_CACHE_STORAGE | + BrowsingDataRemover::DATA_TYPE_FILE_SYSTEMS | + BrowsingDataRemover::DATA_TYPE_INDEXED_DB | + BrowsingDataRemover::DATA_TYPE_WEB_SQL, + std::move(builder)); - EXPECT_EQ(BrowsingDataRemover::REMOVE_APPCACHE | - BrowsingDataRemover::REMOVE_SERVICE_WORKERS | - BrowsingDataRemover::REMOVE_CACHE_STORAGE | - BrowsingDataRemover::REMOVE_FILE_SYSTEMS | - BrowsingDataRemover::REMOVE_INDEXEDDB | - BrowsingDataRemover::REMOVE_WEBSQL, + EXPECT_EQ(BrowsingDataRemover::DATA_TYPE_APP_CACHE | + BrowsingDataRemover::DATA_TYPE_SERVICE_WORKERS | + BrowsingDataRemover::DATA_TYPE_CACHE_STORAGE | + BrowsingDataRemover::DATA_TYPE_FILE_SYSTEMS | + BrowsingDataRemover::DATA_TYPE_INDEXED_DB | + BrowsingDataRemover::DATA_TYPE_WEB_SQL, GetRemovalMask()); - EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginTypeMask()); + EXPECT_EQ(BrowsingDataRemover::ORIGIN_TYPE_UNPROTECTED_WEB, + GetOriginTypeMask()); // Verify storage partition related stuffs. StoragePartitionRemovalData removal_data = GetStoragePartitionRemovalData(); @@ -1321,8 +1311,7 @@ StoragePartition::QUOTA_MANAGED_STORAGE_MASK_ALL); // Check OriginMatcherFunction. - EXPECT_EQ(ShouldRemoveForProtectedOriginOne(), - removal_data.origin_matcher.Run(kOrigin1, mock_policy())); + EXPECT_FALSE(removal_data.origin_matcher.Run(kOrigin1, mock_policy())); // Since we use the matcher function to validate origins now, this should // return false for the origins we're not trying to clear. EXPECT_FALSE(removal_data.origin_matcher.Run(kOrigin2, mock_policy())); @@ -1330,32 +1319,31 @@ } TEST_F(BrowsingDataRemoverImplTest, RemoveQuotaManagedProtectedOrigins) { -#if BUILDFLAG(ENABLE_EXTENSIONS) - MockExtensionSpecialStoragePolicy* policy = CreateMockPolicy(); + content::MockSpecialStoragePolicy* policy = CreateMockPolicy(); // Protect kOrigin1. policy->AddProtected(kOrigin1.GetOrigin()); -#endif // Try to remove kOrigin1. Expect success. BlockUntilBrowsingDataRemoved( base::Time(), base::Time::Max(), - BrowsingDataRemover::REMOVE_APPCACHE | - BrowsingDataRemover::REMOVE_SERVICE_WORKERS | - BrowsingDataRemover::REMOVE_CACHE_STORAGE | - BrowsingDataRemover::REMOVE_FILE_SYSTEMS | - BrowsingDataRemover::REMOVE_INDEXEDDB | - BrowsingDataRemover::REMOVE_WEBSQL, + BrowsingDataRemover::DATA_TYPE_APP_CACHE | + BrowsingDataRemover::DATA_TYPE_SERVICE_WORKERS | + BrowsingDataRemover::DATA_TYPE_CACHE_STORAGE | + BrowsingDataRemover::DATA_TYPE_FILE_SYSTEMS | + BrowsingDataRemover::DATA_TYPE_INDEXED_DB | + BrowsingDataRemover::DATA_TYPE_WEB_SQL, true); - EXPECT_EQ(BrowsingDataRemover::REMOVE_APPCACHE | - BrowsingDataRemover::REMOVE_SERVICE_WORKERS | - BrowsingDataRemover::REMOVE_CACHE_STORAGE | - BrowsingDataRemover::REMOVE_FILE_SYSTEMS | - BrowsingDataRemover::REMOVE_INDEXEDDB | - BrowsingDataRemover::REMOVE_WEBSQL, + EXPECT_EQ(BrowsingDataRemover::DATA_TYPE_APP_CACHE | + BrowsingDataRemover::DATA_TYPE_SERVICE_WORKERS | + BrowsingDataRemover::DATA_TYPE_CACHE_STORAGE | + BrowsingDataRemover::DATA_TYPE_FILE_SYSTEMS | + BrowsingDataRemover::DATA_TYPE_INDEXED_DB | + BrowsingDataRemover::DATA_TYPE_WEB_SQL, GetRemovalMask()); - EXPECT_EQ(BrowsingDataHelper::PROTECTED_WEB | - BrowsingDataHelper::UNPROTECTED_WEB, GetOriginTypeMask()); + EXPECT_EQ(BrowsingDataRemover::ORIGIN_TYPE_PROTECTED_WEB | + BrowsingDataRemover::ORIGIN_TYPE_UNPROTECTED_WEB, + GetOriginTypeMask()); // Verify storage partition related stuffs. StoragePartitionRemovalData removal_data = GetStoragePartitionRemovalData(); @@ -1385,22 +1373,23 @@ BlockUntilBrowsingDataRemoved( base::Time(), base::Time::Max(), - BrowsingDataRemover::REMOVE_APPCACHE | - BrowsingDataRemover::REMOVE_SERVICE_WORKERS | - BrowsingDataRemover::REMOVE_CACHE_STORAGE | - BrowsingDataRemover::REMOVE_FILE_SYSTEMS | - BrowsingDataRemover::REMOVE_INDEXEDDB | - BrowsingDataRemover::REMOVE_WEBSQL, + BrowsingDataRemover::DATA_TYPE_APP_CACHE | + BrowsingDataRemover::DATA_TYPE_SERVICE_WORKERS | + BrowsingDataRemover::DATA_TYPE_CACHE_STORAGE | + BrowsingDataRemover::DATA_TYPE_FILE_SYSTEMS | + BrowsingDataRemover::DATA_TYPE_INDEXED_DB | + BrowsingDataRemover::DATA_TYPE_WEB_SQL, false); - EXPECT_EQ(BrowsingDataRemover::REMOVE_APPCACHE | - BrowsingDataRemover::REMOVE_SERVICE_WORKERS | - BrowsingDataRemover::REMOVE_CACHE_STORAGE | - BrowsingDataRemover::REMOVE_FILE_SYSTEMS | - BrowsingDataRemover::REMOVE_INDEXEDDB | - BrowsingDataRemover::REMOVE_WEBSQL, + EXPECT_EQ(BrowsingDataRemover::DATA_TYPE_APP_CACHE | + BrowsingDataRemover::DATA_TYPE_SERVICE_WORKERS | + BrowsingDataRemover::DATA_TYPE_CACHE_STORAGE | + BrowsingDataRemover::DATA_TYPE_FILE_SYSTEMS | + BrowsingDataRemover::DATA_TYPE_INDEXED_DB | + BrowsingDataRemover::DATA_TYPE_WEB_SQL, GetRemovalMask()); - EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginTypeMask()); + EXPECT_EQ(BrowsingDataRemover::ORIGIN_TYPE_UNPROTECTED_WEB, + GetOriginTypeMask()); // Verify storage partition related stuffs. StoragePartitionRemovalData removal_data = GetStoragePartitionRemovalData(); @@ -1448,10 +1437,9 @@ BrowsingDataRemoverImpl* remover = static_cast<BrowsingDataRemoverImpl*>( BrowsingDataRemoverFactory::GetForBrowserContext(GetBrowserContext())); InspectableCompletionObserver completion_observer(remover); - remover->RemoveAndReply(base::Time(), base::Time::Max(), - BrowsingDataRemover::REMOVE_HISTORY, - BrowsingDataHelper::UNPROTECTED_WEB, - &completion_observer); + remover->RemoveAndReply( + base::Time(), base::Time::Max(), BrowsingDataRemover::DATA_TYPE_COOKIES, + BrowsingDataRemover::ORIGIN_TYPE_UNPROTECTED_WEB, &completion_observer); // Process messages until the inhibitor is notified, and then some, to make // sure we do not complete asynchronously before ContinueToCompletion() is @@ -1478,10 +1466,9 @@ BrowsingDataRemoverFactory::GetForBrowserContext(GetBrowserContext())); InspectableCompletionObserver completion_observer(remover); BrowsingDataRemoverCompletionInhibitor completion_inhibitor; - remover->RemoveAndReply(base::Time(), base::Time::Max(), - BrowsingDataRemover::REMOVE_HISTORY, - BrowsingDataHelper::UNPROTECTED_WEB, - &completion_observer); + remover->RemoveAndReply( + base::Time(), base::Time::Max(), BrowsingDataRemover::DATA_TYPE_COOKIES, + BrowsingDataRemover::ORIGIN_TYPE_UNPROTECTED_WEB, &completion_observer); completion_inhibitor.BlockUntilNearCompletion(); @@ -1510,7 +1497,8 @@ RemoveDownloadsByURLAndTime(ProbablySameFilter(filter), _, _)); BlockUntilBrowsingDataRemoved(base::Time(), base::Time::Max(), - BrowsingDataRemover::REMOVE_DOWNLOADS, false); + BrowsingDataRemover::DATA_TYPE_DOWNLOADS, + false); } TEST_F(BrowsingDataRemoverImplTest, RemoveDownloadsByOrigin) { @@ -1525,7 +1513,7 @@ RemoveDownloadsByURLAndTime(ProbablySameFilter(filter), _, _)); BlockUntilOriginDataRemoved(base::Time(), base::Time::Max(), - BrowsingDataRemover::REMOVE_DOWNLOADS, + BrowsingDataRemover::DATA_TYPE_DOWNLOADS, std::move(builder)); } @@ -1599,36 +1587,32 @@ // Test several tasks with various configuration of masks, filters, and target // observers. std::list<BrowsingDataRemoverImpl::RemovalTask> tasks; - tasks.emplace_back(base::Time(), base::Time::Max(), - BrowsingDataRemover::REMOVE_HISTORY, - BrowsingDataHelper::UNPROTECTED_WEB, - BrowsingDataFilterBuilder::Create( - BrowsingDataFilterBuilder::BLACKLIST), - observer.target_a()); - tasks.emplace_back(base::Time(), base::Time::Max(), - BrowsingDataRemover::REMOVE_COOKIES, - BrowsingDataHelper::PROTECTED_WEB, - BrowsingDataFilterBuilder::Create( - BrowsingDataFilterBuilder::BLACKLIST), - nullptr); + tasks.emplace_back( + base::Time(), base::Time::Max(), BrowsingDataRemover::DATA_TYPE_DOWNLOADS, + BrowsingDataRemover::ORIGIN_TYPE_UNPROTECTED_WEB, + BrowsingDataFilterBuilder::Create(BrowsingDataFilterBuilder::BLACKLIST), + observer.target_a()); + tasks.emplace_back( + base::Time(), base::Time::Max(), BrowsingDataRemover::DATA_TYPE_COOKIES, + BrowsingDataRemover::ORIGIN_TYPE_PROTECTED_WEB, + BrowsingDataFilterBuilder::Create(BrowsingDataFilterBuilder::BLACKLIST), + nullptr); tasks.emplace_back( base::Time::Now(), base::Time::Max(), - BrowsingDataRemover::REMOVE_PASSWORDS, BrowsingDataHelper::ALL, - BrowsingDataFilterBuilder::Create( - BrowsingDataFilterBuilder::BLACKLIST), + BrowsingDataRemover::DATA_TYPE_DOWNLOADS, + BrowsingDataRemover::ORIGIN_TYPE_UNPROTECTED_WEB | + BrowsingDataRemover::ORIGIN_TYPE_PROTECTED_WEB, + BrowsingDataFilterBuilder::Create(BrowsingDataFilterBuilder::BLACKLIST), observer.target_b()); - tasks.emplace_back( - base::Time(), base::Time::UnixEpoch(), - BrowsingDataRemover::REMOVE_WEBSQL, - BrowsingDataHelper::UNPROTECTED_WEB, - std::move(filter_builder_1), - observer.target_b()); - tasks.emplace_back( - base::Time::UnixEpoch(), base::Time::Now(), - BrowsingDataRemover::REMOVE_CHANNEL_IDS, - BrowsingDataHelper::ALL, - std::move(filter_builder_2), - nullptr); + tasks.emplace_back(base::Time(), base::Time::UnixEpoch(), + BrowsingDataRemover::DATA_TYPE_WEB_SQL, + BrowsingDataRemover::ORIGIN_TYPE_UNPROTECTED_WEB, + std::move(filter_builder_1), observer.target_b()); + tasks.emplace_back(base::Time::UnixEpoch(), base::Time::Now(), + BrowsingDataRemover::DATA_TYPE_CHANNEL_IDS, + BrowsingDataRemover::ORIGIN_TYPE_UNPROTECTED_WEB | + BrowsingDataRemover::ORIGIN_TYPE_PROTECTED_WEB, + std::move(filter_builder_2), nullptr); for (BrowsingDataRemoverImpl::RemovalTask& task : tasks) { // All tasks can be directly translated to a RemoveInternal() call. Since @@ -1688,35 +1672,36 @@ EXPECT_FALSE(remover->is_removing()); int test_removal_masks[] = { - BrowsingDataRemover::REMOVE_COOKIES, - BrowsingDataRemover::REMOVE_PASSWORDS, - BrowsingDataRemover::REMOVE_COOKIES, - BrowsingDataRemover::REMOVE_COOKIES, - BrowsingDataRemover::REMOVE_COOKIES, - BrowsingDataRemover::REMOVE_HISTORY, - BrowsingDataRemover::REMOVE_HISTORY, - BrowsingDataRemover::REMOVE_HISTORY, - BrowsingDataRemover::REMOVE_COOKIES | BrowsingDataRemover::REMOVE_HISTORY, - BrowsingDataRemover::REMOVE_COOKIES | BrowsingDataRemover::REMOVE_HISTORY, - BrowsingDataRemover::REMOVE_COOKIES | - BrowsingDataRemover::REMOVE_HISTORY | - BrowsingDataRemover::REMOVE_PASSWORDS, - BrowsingDataRemover::REMOVE_PASSWORDS, - BrowsingDataRemover::REMOVE_PASSWORDS, + BrowsingDataRemover::DATA_TYPE_COOKIES, + BrowsingDataRemover::DATA_TYPE_LOCAL_STORAGE, + BrowsingDataRemover::DATA_TYPE_COOKIES, + BrowsingDataRemover::DATA_TYPE_COOKIES, + BrowsingDataRemover::DATA_TYPE_COOKIES, + BrowsingDataRemover::DATA_TYPE_DOWNLOADS, + BrowsingDataRemover::DATA_TYPE_DOWNLOADS, + BrowsingDataRemover::DATA_TYPE_DOWNLOADS, + BrowsingDataRemover::DATA_TYPE_COOKIES | + BrowsingDataRemover::DATA_TYPE_DOWNLOADS, + BrowsingDataRemover::DATA_TYPE_COOKIES | + BrowsingDataRemover::DATA_TYPE_DOWNLOADS, + BrowsingDataRemover::DATA_TYPE_COOKIES | + BrowsingDataRemover::DATA_TYPE_DOWNLOADS | + BrowsingDataRemover::DATA_TYPE_LOCAL_STORAGE, + BrowsingDataRemover::DATA_TYPE_LOCAL_STORAGE, + BrowsingDataRemover::DATA_TYPE_LOCAL_STORAGE, }; for (int removal_mask : test_removal_masks) { remover->Remove(base::Time(), base::Time::Max(), removal_mask, - BrowsingDataHelper::UNPROTECTED_WEB); + BrowsingDataRemover::ORIGIN_TYPE_UNPROTECTED_WEB); } EXPECT_TRUE(remover->is_removing()); // Add one more deletion and wait for it. BlockUntilBrowsingDataRemoved( - base::Time(), base::Time::Max(), - BrowsingDataRemover::REMOVE_COOKIES, - BrowsingDataHelper::UNPROTECTED_WEB); + base::Time(), base::Time::Max(), BrowsingDataRemover::DATA_TYPE_COOKIES, + BrowsingDataRemover::ORIGIN_TYPE_UNPROTECTED_WEB); EXPECT_FALSE(remover->is_removing()); }
diff --git a/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.cc b/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.cc index 4328956..a5522a5 100644 --- a/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.cc +++ b/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.cc
@@ -74,6 +74,7 @@ #include "net/http/http_transaction_factory.h" #include "net/url_request/url_request_context.h" #include "net/url_request/url_request_context_getter.h" +#include "url/url_util.h" #if defined(OS_ANDROID) #include "chrome/browser/android/offline_pages/offline_page_model_factory.h" @@ -87,6 +88,7 @@ #if BUILDFLAG(ENABLE_EXTENSIONS) #include "chrome/browser/extensions/activity_log/activity_log.h" #include "extensions/browser/extension_prefs.h" +#include "extensions/common/constants.h" #endif #if BUILDFLAG(ENABLE_SESSION_SERVICE) @@ -308,6 +310,29 @@ template_url_sub_.reset(); } +bool ChromeBrowsingDataRemoverDelegate::DoesOriginMatchEmbedderMask( + int origin_type_mask, + const GURL& origin, + storage::SpecialStoragePolicy* policy) const { + DCHECK_EQ(0, origin_type_mask & (ORIGIN_TYPE_EMBEDDER_BEGIN - 1)) + << "|origin_type_mask| can only contain origin types defined in " + << "the embedder."; + +#if BUILDFLAG(ENABLE_EXTENSIONS) + // Packaged apps and extensions match iff EXTENSION. + if ((origin.GetOrigin().scheme() == extensions::kExtensionScheme) && + (origin_type_mask & ORIGIN_TYPE_EXTENSION)) { + return true; + } + origin_type_mask &= ~ORIGIN_TYPE_EXTENSION; +#endif + + DCHECK(!origin_type_mask) + << "DoesOriginMatchEmbedderMask must handle all origin types."; + + return false; +} + void ChromeBrowsingDataRemoverDelegate::RemoveEmbedderData( const base::Time& delete_begin, const base::Time& delete_end, @@ -315,6 +340,33 @@ const BrowsingDataFilterBuilder& filter_builder, int origin_type_mask, const base::Closure& callback) { + DCHECK(((remove_mask & ~FILTERABLE_DATA_TYPES) == 0) || + filter_builder.IsEmptyBlacklist()); + + if (origin_type_mask & BrowsingDataRemover::ORIGIN_TYPE_UNPROTECTED_WEB) { + content::RecordAction( + UserMetricsAction("ClearBrowsingData_MaskContainsUnprotectedWeb")); + } + if (origin_type_mask & BrowsingDataRemover::ORIGIN_TYPE_PROTECTED_WEB) { + content::RecordAction( + UserMetricsAction("ClearBrowsingData_MaskContainsProtectedWeb")); + } +#if BUILDFLAG(ENABLE_EXTENSIONS) + if (origin_type_mask & ORIGIN_TYPE_EXTENSION) { + content::RecordAction( + UserMetricsAction("ClearBrowsingData_MaskContainsExtension")); + } +#endif + // If this fires, we added a new BrowsingDataHelper::OriginTypeMask without + // updating the user metrics above. + static_assert( + ALL_ORIGIN_TYPES == (BrowsingDataRemover::ORIGIN_TYPE_UNPROTECTED_WEB | +#if BUILDFLAG(ENABLE_EXTENSIONS) + ORIGIN_TYPE_EXTENSION | +#endif + BrowsingDataRemover::ORIGIN_TYPE_PROTECTED_WEB), + "OriginTypeMask has been updated without updating user metrics"); + ////////////////////////////////////////////////////////////////////////////// // INITIALIZATION synchronous_clear_operations_.Start(); @@ -341,14 +393,13 @@ // All the UI entry points into the BrowsingDataRemoverImpl should be // disabled, but this will fire if something was missed or added. DCHECK(may_delete_history || - (remove_mask & BrowsingDataRemover::REMOVE_NOCHECKS) || - (!(remove_mask & BrowsingDataRemover::REMOVE_HISTORY) && - !(remove_mask & BrowsingDataRemover::REMOVE_DOWNLOADS))); + (remove_mask & BrowsingDataRemover::DATA_TYPE_NO_CHECKS) || + (!(remove_mask & DATA_TYPE_HISTORY) && + !(remove_mask & BrowsingDataRemover::DATA_TYPE_DOWNLOADS))); ////////////////////////////////////////////////////////////////////////////// - // REMOVE_HISTORY - if ((remove_mask & BrowsingDataRemover::REMOVE_HISTORY) && - may_delete_history) { + // DATA_TYPE_HISTORY + if ((remove_mask & DATA_TYPE_HISTORY) && may_delete_history) { history::HistoryService* history_service = HistoryServiceFactory::GetForProfile( profile_, ServiceAccessType::EXPLICIT_ACCESS); @@ -572,8 +623,8 @@ } ////////////////////////////////////////////////////////////////////////////// - // REMOVE_DOWNLOADS - if ((remove_mask & BrowsingDataRemover::REMOVE_DOWNLOADS) && + // DATA_TYPE_DOWNLOADS + if ((remove_mask & BrowsingDataRemover::DATA_TYPE_DOWNLOADS) && may_delete_history) { DownloadPrefs* download_prefs = DownloadPrefs::FromDownloadManager( BrowserContext::GetDownloadManager(profile_)); @@ -581,14 +632,14 @@ } ////////////////////////////////////////////////////////////////////////////// - // REMOVE_COOKIES - // We ignore the REMOVE_COOKIES request if UNPROTECTED_WEB is not set, - // so that callers who request REMOVE_SITE_DATA with PROTECTED_WEB + // DATA_TYPE_COOKIES + // We ignore the DATA_TYPE_COOKIES request if UNPROTECTED_WEB is not set, + // so that callers who request DATA_TYPE_SITE_DATA with PROTECTED_WEB // don't accidentally remove the cookies that are associated with the // UNPROTECTED_WEB origin. This is necessary because cookies are not separated // between UNPROTECTED_WEB and PROTECTED_WEB. - if (remove_mask & BrowsingDataRemover::REMOVE_COOKIES && - origin_type_mask & BrowsingDataHelper::UNPROTECTED_WEB) { + if (remove_mask & BrowsingDataRemover::DATA_TYPE_COOKIES && + origin_type_mask & BrowsingDataRemover::ORIGIN_TYPE_UNPROTECTED_WEB) { content::RecordAction(UserMetricsAction("ClearBrowsingData_Cookies")); // Clear the safebrowsing cookies only if time period is for "all time". It @@ -631,8 +682,8 @@ } ////////////////////////////////////////////////////////////////////////////// - // REMOVE_DURABLE_PERMISSION - if (remove_mask & BrowsingDataRemover::REMOVE_DURABLE_PERMISSION) { + // DATA_TYPE_DURABLE_PERMISSION + if (remove_mask & DATA_TYPE_DURABLE_PERMISSION) { HostContentSettingsMapFactory::GetForProfile(profile_) ->ClearSettingsForOneTypeWithPredicate( CONTENT_SETTINGS_TYPE_DURABLE_STORAGE, @@ -640,16 +691,16 @@ } ////////////////////////////////////////////////////////////////////////////// - // REMOVE_SITE_USAGE_DATA - if (remove_mask & BrowsingDataRemover::REMOVE_SITE_USAGE_DATA) { + // DATA_TYPE_SITE_USAGE_DATA + if (remove_mask & DATA_TYPE_SITE_USAGE_DATA) { HostContentSettingsMapFactory::GetForProfile(profile_) ->ClearSettingsForOneTypeWithPredicate( CONTENT_SETTINGS_TYPE_SITE_ENGAGEMENT, base::Bind(&WebsiteSettingsFilterAdapter, filter)); } - if ((remove_mask & BrowsingDataRemover::REMOVE_SITE_USAGE_DATA) || - (remove_mask & BrowsingDataRemover::REMOVE_HISTORY)) { + if ((remove_mask & DATA_TYPE_SITE_USAGE_DATA) || + (remove_mask & DATA_TYPE_HISTORY)) { HostContentSettingsMapFactory::GetForProfile(profile_) ->ClearSettingsForOneTypeWithPredicate( CONTENT_SETTINGS_TYPE_APP_BANNER, @@ -661,7 +712,7 @@ ////////////////////////////////////////////////////////////////////////////// // Password manager - if (remove_mask & BrowsingDataRemover::REMOVE_PASSWORDS) { + if (remove_mask & DATA_TYPE_PASSWORDS) { content::RecordAction(UserMetricsAction("ClearBrowsingData_Passwords")); password_manager::PasswordStore* password_store = PasswordStoreFactory::GetForProfile( @@ -685,7 +736,7 @@ clear_http_auth_cache_.GetCompletionCallback()); } - if (remove_mask & BrowsingDataRemover::REMOVE_COOKIES) { + if (remove_mask & BrowsingDataRemover::DATA_TYPE_COOKIES) { password_manager::PasswordStore* password_store = PasswordStoreFactory::GetForProfile(profile_, ServiceAccessType::EXPLICIT_ACCESS) @@ -698,7 +749,7 @@ } } - if (remove_mask & BrowsingDataRemover::REMOVE_HISTORY) { + if (remove_mask & DATA_TYPE_HISTORY) { password_manager::PasswordStore* password_store = PasswordStoreFactory::GetForProfile( profile_, ServiceAccessType::EXPLICIT_ACCESS).get(); @@ -712,9 +763,9 @@ } ////////////////////////////////////////////////////////////////////////////// - // REMOVE_FORM_DATA + // DATA_TYPE_FORM_DATA // TODO(dmurph): Support all backends with filter (crbug.com/113621). - if (remove_mask & BrowsingDataRemover::REMOVE_FORM_DATA) { + if (remove_mask & DATA_TYPE_FORM_DATA) { content::RecordAction(UserMetricsAction("ClearBrowsingData_Autofill")); scoped_refptr<autofill::AutofillWebDataService> web_data_service = WebDataServiceFactory::GetAutofillWebDataForProfile( @@ -740,8 +791,8 @@ } ////////////////////////////////////////////////////////////////////////////// - // REMOVE_CACHE - if (remove_mask & BrowsingDataRemover::REMOVE_CACHE) { + // DATA_TYPE_CACHE + if (remove_mask & BrowsingDataRemover::DATA_TYPE_CACHE) { #if !defined(DISABLE_NACL) clear_nacl_cache_.Start(); @@ -797,7 +848,7 @@ #if defined(OS_ANDROID) // For now we're considering offline pages as cache, so if we're removing // cache we should remove offline pages as well. - if ((remove_mask & BrowsingDataRemover::REMOVE_CACHE)) { + if ((remove_mask & BrowsingDataRemover::DATA_TYPE_CACHE)) { clear_offline_page_data_.Start(); offline_pages::OfflinePageModelFactory::GetForBrowserContext(profile_) ->DeleteCachedPagesByURLPredicate( @@ -808,21 +859,21 @@ #endif } - ////////////////////////////////////////////////////////////////////////////// - // REMOVE_PLUGINS - // Plugins are known to //content and their bulk deletion is implemented in - // PluginDataRemover. However, the filtered deletion uses - // BrowsingDataFlashLSOHelper which (currently) has strong dependencies - // on //chrome. - // TODO(msramek): Investigate these dependencies and move the plugin deletion - // to BrowsingDataRemoverImpl in //content. Note that code in //content - // can simply take advantage of PluginDataRemover directly to delete plugin - // data in bulk. +////////////////////////////////////////////////////////////////////////////// +// DATA_TYPE_PLUGINS +// Plugins are known to //content and their bulk deletion is implemented in +// PluginDataRemover. However, the filtered deletion uses +// BrowsingDataFlashLSOHelper which (currently) has strong dependencies +// on //chrome. +// TODO(msramek): Investigate these dependencies and move the plugin deletion +// to BrowsingDataRemoverImpl in //content. Note that code in //content +// can simply take advantage of PluginDataRemover directly to delete plugin +// data in bulk. #if BUILDFLAG(ENABLE_PLUGINS) // Plugin is data not separated for protected and unprotected web origins. We // check the origin_type_mask_ to prevent unintended deletion. - if (remove_mask & BrowsingDataRemover::REMOVE_PLUGIN_DATA && - origin_type_mask & BrowsingDataHelper::UNPROTECTED_WEB) { + if (remove_mask & DATA_TYPE_PLUGIN_DATA && + origin_type_mask & BrowsingDataRemover::ORIGIN_TYPE_UNPROTECTED_WEB) { content::RecordAction(UserMetricsAction("ClearBrowsingData_LSOData")); clear_plugin_data_count_ = 1; @@ -849,8 +900,8 @@ #endif ////////////////////////////////////////////////////////////////////////////// - // REMOVE_MEDIA_LICENSES - if (remove_mask & BrowsingDataRemover::REMOVE_MEDIA_LICENSES) { + // DATA_TYPE_MEDIA_LICENSES + if (remove_mask & BrowsingDataRemover::DATA_TYPE_MEDIA_LICENSES) { // TODO(jrummell): This UMA should be renamed to indicate it is for Media // Licenses. content::RecordAction( @@ -892,21 +943,21 @@ // Remove omnibox zero-suggest cache results. Filtering is not supported. // This is not a problem, as deleting more data than necessary will just cause // another server round-trip; no data is actually lost. - if ((remove_mask & (BrowsingDataRemover::REMOVE_CACHE | - BrowsingDataRemover::REMOVE_COOKIES))) { + if ((remove_mask & (BrowsingDataRemover::DATA_TYPE_CACHE | + BrowsingDataRemover::DATA_TYPE_COOKIES))) { prefs->SetString(omnibox::kZeroSuggestCachedResults, std::string()); } ////////////////////////////////////////////////////////////////////////////// // Domain reliability service. - if (remove_mask & (BrowsingDataRemover::REMOVE_COOKIES | - BrowsingDataRemover::REMOVE_HISTORY)) { + if (remove_mask & + (BrowsingDataRemover::DATA_TYPE_COOKIES | DATA_TYPE_HISTORY)) { domain_reliability::DomainReliabilityService* service = domain_reliability::DomainReliabilityServiceFactory:: GetForBrowserContext(profile_); if (service) { domain_reliability::DomainReliabilityClearMode mode; - if (remove_mask & BrowsingDataRemover::REMOVE_COOKIES) + if (remove_mask & BrowsingDataRemover::DATA_TYPE_COOKIES) mode = domain_reliability::CLEAR_CONTEXTS; else mode = domain_reliability::CLEAR_BEACONS; @@ -919,17 +970,17 @@ } } - ////////////////////////////////////////////////////////////////////////////// - // REMOVE_WEBAPP_DATA +////////////////////////////////////////////////////////////////////////////// +// DATA_TYPE_WEB_APP_DATA #if defined(OS_ANDROID) // Clear all data associated with registered webapps. - if (remove_mask & BrowsingDataRemover::REMOVE_WEBAPP_DATA) + if (remove_mask & DATA_TYPE_WEB_APP_DATA) webapp_registry_->UnregisterWebappsForUrls(filter); #endif ////////////////////////////////////////////////////////////////////////////// // Remove external protocol data. - if (remove_mask & BrowsingDataRemover::REMOVE_EXTERNAL_PROTOCOL_DATA) + if (remove_mask & DATA_TYPE_EXTERNAL_PROTOCOL_DATA) ExternalProtocolHandler::ClearData(profile_); synchronous_clear_operations_.GetCompletionCallback().Run();
diff --git a/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.h b/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.h index 100ad552..17a19c46 100644 --- a/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.h +++ b/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.h
@@ -18,6 +18,7 @@ #include "components/browsing_data/core/browsing_data_utils.h" #include "components/offline_pages/core/offline_page_model.h" #include "components/search_engines/template_url_service.h" +#include "extensions/features/features.h" #include "media/media_features.h" #include "ppapi/features/features.h" @@ -46,6 +47,102 @@ #endif { public: + // This is an extension of BrowsingDataRemover::RemoveDataMask which includes + // all datatypes therefrom and adds additional Chrome-specific ones. + // TODO(crbug.com/668114): Extend this to uint64_t to ensure that we won't + // run out of space anytime soon. + enum DataType { + // Embedder can start adding datatypes after the last platform datatype. + DATA_TYPE_EMBEDDER_BEGIN = BrowsingDataRemover::DATA_TYPE_CONTENT_END << 1, + + // Chrome-specific datatypes. + DATA_TYPE_HISTORY = DATA_TYPE_EMBEDDER_BEGIN, + DATA_TYPE_FORM_DATA = DATA_TYPE_EMBEDDER_BEGIN << 1, + DATA_TYPE_PASSWORDS = DATA_TYPE_EMBEDDER_BEGIN << 2, + DATA_TYPE_PLUGIN_DATA = DATA_TYPE_EMBEDDER_BEGIN << 3, +#if defined(OS_ANDROID) + DATA_TYPE_WEB_APP_DATA = DATA_TYPE_EMBEDDER_BEGIN << 4, +#endif + DATA_TYPE_SITE_USAGE_DATA = DATA_TYPE_EMBEDDER_BEGIN << 5, + DATA_TYPE_DURABLE_PERMISSION = DATA_TYPE_EMBEDDER_BEGIN << 6, + DATA_TYPE_EXTERNAL_PROTOCOL_DATA = DATA_TYPE_EMBEDDER_BEGIN << 7, + DATA_TYPE_HOSTED_APP_DATA_TEST_ONLY = DATA_TYPE_EMBEDDER_BEGIN << 8, + + // Group datatypes. + + // "Site data" includes storage backend accessible to websites and some + // additional metadata kept by the browser (e.g. site usage data). + DATA_TYPE_SITE_DATA = BrowsingDataRemover::DATA_TYPE_APP_CACHE | + BrowsingDataRemover::DATA_TYPE_COOKIES | + BrowsingDataRemover::DATA_TYPE_FILE_SYSTEMS | + BrowsingDataRemover::DATA_TYPE_INDEXED_DB | + BrowsingDataRemover::DATA_TYPE_LOCAL_STORAGE | + BrowsingDataRemover::DATA_TYPE_SERVICE_WORKERS | + BrowsingDataRemover::DATA_TYPE_CACHE_STORAGE | + BrowsingDataRemover::DATA_TYPE_WEB_SQL | + BrowsingDataRemover::DATA_TYPE_CHANNEL_IDS | + DATA_TYPE_PLUGIN_DATA | +#if defined(OS_ANDROID) + DATA_TYPE_WEB_APP_DATA | +#endif + DATA_TYPE_SITE_USAGE_DATA | + DATA_TYPE_DURABLE_PERMISSION | + DATA_TYPE_EXTERNAL_PROTOCOL_DATA, + + // Datatypes protected by Important Sites. + IMPORTANT_SITES_DATA_TYPES = + DATA_TYPE_SITE_DATA | BrowsingDataRemover::DATA_TYPE_CACHE, + + // Datatypes that can be deleted partially per URL / origin / domain, + // whichever makes sense. + FILTERABLE_DATA_TYPES = DATA_TYPE_SITE_DATA | + BrowsingDataRemover::DATA_TYPE_CACHE | + BrowsingDataRemover::DATA_TYPE_DOWNLOADS, + + // Includes all the available remove options. Meant to be used by clients + // that wish to wipe as much data as possible from a Profile, to make it + // look like a new Profile. + ALL_DATA_TYPES = DATA_TYPE_SITE_DATA | + BrowsingDataRemover::DATA_TYPE_CACHE | + BrowsingDataRemover::DATA_TYPE_DOWNLOADS | + DATA_TYPE_FORM_DATA | + DATA_TYPE_HISTORY | + DATA_TYPE_PASSWORDS | + BrowsingDataRemover::DATA_TYPE_MEDIA_LICENSES, + + // Includes all available remove options. Meant to be used when the Profile + // is scheduled to be deleted, and all possible data should be wiped from + // disk as soon as possible. + WIPE_PROFILE = ALL_DATA_TYPES | BrowsingDataRemover::DATA_TYPE_NO_CHECKS, + }; + + // This is an extension of BrowsingDataRemover::OriginType which includes all + // origin types therefrom and adds additional Chrome-specific ones. + enum OriginType { + // Embedder can start adding origin types after the last + // platform origin type. + ORIGIN_TYPE_EMBEDDER_BEGIN = BrowsingDataRemover::ORIGIN_TYPE_CONTENT_END + << 1, + +#if BUILDFLAG(ENABLE_EXTENSIONS) + // Packaged apps and extensions (chrome-extension://*). + ORIGIN_TYPE_EXTENSION = ORIGIN_TYPE_EMBEDDER_BEGIN, +#endif + + // All origin types. + ALL_ORIGIN_TYPES = BrowsingDataRemover::ORIGIN_TYPE_UNPROTECTED_WEB | +#if BUILDFLAG(ENABLE_EXTENSIONS) + ORIGIN_TYPE_EXTENSION | +#endif + BrowsingDataRemover::ORIGIN_TYPE_PROTECTED_WEB, + }; + + // Important sites protect a small set of sites from the deletion of certain + // datatypes. Therefore, those datatypes must be filterable by + // url/origin/domain. + static_assert((IMPORTANT_SITES_DATA_TYPES & ~FILTERABLE_DATA_TYPES) == 0, + "All important sites datatypes must be filterable."); + // Used to track the deletion of a single data storage backend. class SubTask { public: @@ -75,7 +172,11 @@ ChromeBrowsingDataRemoverDelegate(content::BrowserContext* browser_context); ~ChromeBrowsingDataRemoverDelegate() override; - // Removes Chrome-specific data. + // BrowsingDataRemoverDelegate: + bool DoesOriginMatchEmbedderMask( + int origin_type_mask, + const GURL& origin, + storage::SpecialStoragePolicy* special_storage_policy) const override; void RemoveEmbedderData( const base::Time& delete_begin, const base::Time& delete_end,
diff --git a/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate_unittest.cc b/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate_unittest.cc index 2eb290a..2212e4d4 100644 --- a/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate_unittest.cc +++ b/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate_unittest.cc
@@ -82,6 +82,10 @@ #include "components/signin/core/account_id/account_id.h" #endif +#if BUILDFLAG(ENABLE_EXTENSIONS) +#include "chrome/browser/extensions/mock_extension_special_storage_policy.h" +#endif + #if BUILDFLAG(ENABLE_PLUGINS) #include "chrome/browser/browsing_data/mock_browsing_data_flash_lso_helper.h" #endif @@ -116,6 +120,8 @@ const char kTestOrigin3[] = "http://host3.com:1/"; const char kTestRegisterableDomain3[] = "host3.com"; const char kTestOrigin4[] = "https://host3.com:1/"; +const char kTestOriginExt[] = "chrome-extension://abcdefghijklmnopqrstuvwxyz/"; +const char kTestOriginDevTools[] = "chrome-devtools://abcdefghijklmnopqrstuvw/"; // For HTTP auth. const char kTestRealm[] = "TestRealm"; @@ -128,6 +134,16 @@ const GURL kOrigin3(kTestOrigin3); const GURL kOrigin4(kTestOrigin4); +const GURL kOriginExt(kTestOriginExt); +const GURL kOriginDevTools(kTestOriginDevTools); + +// Shorthands for origin types. +#if BUILDFLAG(ENABLE_EXTENSIONS) +const int kExtension = ChromeBrowsingDataRemoverDelegate::ORIGIN_TYPE_EXTENSION; +#endif +const int kProtected = BrowsingDataRemover::ORIGIN_TYPE_PROTECTED_WEB; +const int kUnprotected = BrowsingDataRemover::ORIGIN_TYPE_UNPROTECTED_WEB; + // Testers -------------------------------------------------------------------- #if defined(OS_ANDROID) @@ -858,9 +874,10 @@ const base::Time& delete_end, int remove_mask, bool include_protected_origins) { - int origin_type_mask = BrowsingDataHelper::UNPROTECTED_WEB; - if (include_protected_origins) - origin_type_mask |= BrowsingDataHelper::PROTECTED_WEB; + int origin_type_mask = BrowsingDataRemover::ORIGIN_TYPE_UNPROTECTED_WEB; + if (include_protected_origins) { + origin_type_mask |= BrowsingDataRemover::ORIGIN_TYPE_PROTECTED_WEB; + } BrowsingDataRemoverCompletionObserver completion_observer(remover_); remover_->RemoveAndReply( @@ -875,11 +892,10 @@ int remove_mask, std::unique_ptr<BrowsingDataFilterBuilder> filter_builder) { BrowsingDataRemoverCompletionObserver completion_observer(remover_); - static_cast<BrowsingDataRemoverImpl*>(remover_) - ->RemoveWithFilterAndReply(delete_begin, delete_end, remove_mask, - BrowsingDataHelper::UNPROTECTED_WEB, - std::move(filter_builder), - &completion_observer); + static_cast<BrowsingDataRemoverImpl*>(remover_)->RemoveWithFilterAndReply( + delete_begin, delete_end, remove_mask, + BrowsingDataRemover::ORIGIN_TYPE_UNPROTECTED_WEB, + std::move(filter_builder), &completion_observer); completion_observer.BlockUntilCompletion(); } @@ -903,6 +919,12 @@ return clear_domain_reliability_tester_; } + bool Match(const GURL& origin, + int mask, + storage::SpecialStoragePolicy* policy) { + return remover_->DoesOriginMatchMask(mask, origin, policy); + } + private: // Cached pointer to BrowsingDataRemoverImpl for access to testing methods. BrowsingDataRemover* remover_; @@ -923,10 +945,11 @@ ASSERT_TRUE(tester.ContainsCookie()); BlockUntilBrowsingDataRemoved(base::Time(), base::Time::Max(), - BrowsingDataRemover::REMOVE_COOKIES, false); + BrowsingDataRemover::DATA_TYPE_COOKIES, false); - EXPECT_EQ(BrowsingDataRemover::REMOVE_COOKIES, GetRemovalMask()); - EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginTypeMask()); + EXPECT_EQ(BrowsingDataRemover::DATA_TYPE_COOKIES, GetRemovalMask()); + EXPECT_EQ(BrowsingDataRemover::ORIGIN_TYPE_UNPROTECTED_WEB, + GetOriginTypeMask()); EXPECT_FALSE(tester.ContainsCookie()); } @@ -938,10 +961,11 @@ ASSERT_TRUE(tester.ContainsCookie()); BlockUntilBrowsingDataRemoved(AnHourAgo(), base::Time::Max(), - BrowsingDataRemover::REMOVE_COOKIES, false); + BrowsingDataRemover::DATA_TYPE_COOKIES, false); - EXPECT_EQ(BrowsingDataRemover::REMOVE_COOKIES, GetRemovalMask()); - EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginTypeMask()); + EXPECT_EQ(BrowsingDataRemover::DATA_TYPE_COOKIES, GetRemovalMask()); + EXPECT_EQ(BrowsingDataRemover::ORIGIN_TYPE_UNPROTECTED_WEB, + GetOriginTypeMask()); // Removing with time period other than all time should not clear safe // browsing cookies. EXPECT_TRUE(tester.ContainsCookie()); @@ -957,18 +981,19 @@ BrowsingDataFilterBuilder::Create(BrowsingDataFilterBuilder::BLACKLIST)); filter->AddRegisterableDomain(kTestRegisterableDomain1); BlockUntilOriginDataRemoved(base::Time(), base::Time::Max(), - BrowsingDataRemover::REMOVE_COOKIES, + BrowsingDataRemover::DATA_TYPE_COOKIES, std::move(filter)); - EXPECT_EQ(BrowsingDataRemover::REMOVE_COOKIES, GetRemovalMask()); - EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginTypeMask()); + EXPECT_EQ(BrowsingDataRemover::DATA_TYPE_COOKIES, GetRemovalMask()); + EXPECT_EQ(BrowsingDataRemover::ORIGIN_TYPE_UNPROTECTED_WEB, + GetOriginTypeMask()); EXPECT_TRUE(tester.ContainsCookie()); std::unique_ptr<BrowsingDataFilterBuilder> filter2( BrowsingDataFilterBuilder::Create(BrowsingDataFilterBuilder::WHITELIST)); filter2->AddRegisterableDomain(kTestRegisterableDomain1); BlockUntilOriginDataRemoved(base::Time(), base::Time::Max(), - BrowsingDataRemover::REMOVE_COOKIES, + BrowsingDataRemover::DATA_TYPE_COOKIES, std::move(filter2)); EXPECT_FALSE(tester.ContainsCookie()); } @@ -980,11 +1005,14 @@ tester.AddHistory(kOrigin1, base::Time::Now()); ASSERT_TRUE(tester.HistoryContainsURL(kOrigin1)); - BlockUntilBrowsingDataRemoved(base::Time(), base::Time::Max(), - BrowsingDataRemover::REMOVE_HISTORY, false); + BlockUntilBrowsingDataRemoved( + base::Time(), base::Time::Max(), + ChromeBrowsingDataRemoverDelegate::DATA_TYPE_HISTORY, false); - EXPECT_EQ(BrowsingDataRemover::REMOVE_HISTORY, GetRemovalMask()); - EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginTypeMask()); + EXPECT_EQ(ChromeBrowsingDataRemoverDelegate::DATA_TYPE_HISTORY, + GetRemovalMask()); + EXPECT_EQ(BrowsingDataRemover::ORIGIN_TYPE_UNPROTECTED_WEB, + GetOriginTypeMask()); EXPECT_FALSE(tester.HistoryContainsURL(kOrigin1)); } @@ -999,11 +1027,14 @@ ASSERT_TRUE(tester.HistoryContainsURL(kOrigin1)); ASSERT_TRUE(tester.HistoryContainsURL(kOrigin2)); - BlockUntilBrowsingDataRemoved(AnHourAgo(), base::Time::Max(), - BrowsingDataRemover::REMOVE_HISTORY, false); + BlockUntilBrowsingDataRemoved( + AnHourAgo(), base::Time::Max(), + ChromeBrowsingDataRemoverDelegate::DATA_TYPE_HISTORY, false); - EXPECT_EQ(BrowsingDataRemover::REMOVE_HISTORY, GetRemovalMask()); - EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginTypeMask()); + EXPECT_EQ(ChromeBrowsingDataRemoverDelegate::DATA_TYPE_HISTORY, + GetRemovalMask()); + EXPECT_EQ(BrowsingDataRemover::ORIGIN_TYPE_UNPROTECTED_WEB, + GetOriginTypeMask()); EXPECT_FALSE(tester.HistoryContainsURL(kOrigin1)); EXPECT_TRUE(tester.HistoryContainsURL(kOrigin2)); } @@ -1026,10 +1057,13 @@ ASSERT_TRUE(tester.HistoryContainsURL(kOrigin1)); ASSERT_TRUE(tester.HistoryContainsURL(kOrigin2)); - BlockUntilBrowsingDataRemoved(AnHourAgo(), base::Time::Max(), - BrowsingDataRemover::REMOVE_HISTORY, false); - EXPECT_EQ(BrowsingDataRemover::REMOVE_HISTORY, GetRemovalMask()); - EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginTypeMask()); + BlockUntilBrowsingDataRemoved( + AnHourAgo(), base::Time::Max(), + ChromeBrowsingDataRemoverDelegate::DATA_TYPE_HISTORY, false); + EXPECT_EQ(ChromeBrowsingDataRemoverDelegate::DATA_TYPE_HISTORY, + GetRemovalMask()); + EXPECT_EQ(BrowsingDataRemover::ORIGIN_TYPE_UNPROTECTED_WEB, + GetOriginTypeMask()); // Nothing should have been deleted. EXPECT_TRUE(tester.HistoryContainsURL(kOrigin1)); @@ -1052,13 +1086,14 @@ RemovePasswordsTester tester(GetProfile()); EXPECT_CALL(*tester.store(), RemoveLoginsByURLAndTimeImpl(_, _, _)); - int removal_mask = BrowsingDataRemover::REMOVE_HISTORY | - BrowsingDataRemover::REMOVE_PASSWORDS; + int removal_mask = ChromeBrowsingDataRemoverDelegate::DATA_TYPE_HISTORY | + ChromeBrowsingDataRemoverDelegate::DATA_TYPE_PASSWORDS; BlockUntilBrowsingDataRemoved(AnHourAgo(), base::Time::Max(), removal_mask, false); EXPECT_EQ(removal_mask, GetRemovalMask()); - EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginTypeMask()); + EXPECT_EQ(BrowsingDataRemover::ORIGIN_TYPE_UNPROTECTED_WEB, + GetOriginTypeMask()); // Verify that history was not deleted. EXPECT_TRUE(history_tester.HistoryContainsURL(kOrigin1)); @@ -1077,7 +1112,8 @@ BlockUntilBrowsingDataRemoved( AnHourAgo(), base::Time::Max(), - BrowsingDataRemover::REMOVE_EXTERNAL_PROTOCOL_DATA, false); + ChromeBrowsingDataRemoverDelegate::DATA_TYPE_EXTERNAL_PROTOCOL_DATA, + false); EXPECT_TRUE( profile->GetPrefs()->GetDictionary(prefs::kExcludedSchemes)->empty()); } @@ -1091,9 +1127,11 @@ favicon_tester.VisitAndAddFavicon(page_url); ASSERT_TRUE(favicon_tester.HasFaviconForPageURL(page_url)); - BlockUntilBrowsingDataRemoved(base::Time(), base::Time::Max(), - BrowsingDataRemover::REMOVE_HISTORY, false); - EXPECT_EQ(BrowsingDataRemover::REMOVE_HISTORY, GetRemovalMask()); + BlockUntilBrowsingDataRemoved( + base::Time(), base::Time::Max(), + ChromeBrowsingDataRemoverDelegate::DATA_TYPE_HISTORY, false); + EXPECT_EQ(ChromeBrowsingDataRemoverDelegate::DATA_TYPE_HISTORY, + GetRemovalMask()); EXPECT_FALSE(favicon_tester.HasFaviconForPageURL(page_url)); } @@ -1118,9 +1156,11 @@ favicon_tester.VisitAndAddFavicon(bookmarked_page); ASSERT_TRUE(favicon_tester.HasFaviconForPageURL(bookmarked_page)); - BlockUntilBrowsingDataRemoved(base::Time(), base::Time::Max(), - BrowsingDataRemover::REMOVE_HISTORY, false); - EXPECT_EQ(BrowsingDataRemover::REMOVE_HISTORY, GetRemovalMask()); + BlockUntilBrowsingDataRemoved( + base::Time(), base::Time::Max(), + ChromeBrowsingDataRemoverDelegate::DATA_TYPE_HISTORY, false); + EXPECT_EQ(ChromeBrowsingDataRemoverDelegate::DATA_TYPE_HISTORY, + GetRemovalMask()); EXPECT_TRUE(favicon_tester.HasExpiredFaviconForPageURL(bookmarked_page)); } @@ -1140,12 +1180,14 @@ std::unique_ptr<BrowsingDataFilterBuilder> builder( BrowsingDataFilterBuilder::Create(BrowsingDataFilterBuilder::BLACKLIST)); - BlockUntilOriginDataRemoved(AnHourAgo(), base::Time::Max(), - BrowsingDataRemover::REMOVE_HISTORY, - std::move(builder)); + BlockUntilOriginDataRemoved( + AnHourAgo(), base::Time::Max(), + ChromeBrowsingDataRemoverDelegate::DATA_TYPE_HISTORY, std::move(builder)); - EXPECT_EQ(BrowsingDataRemover::REMOVE_HISTORY, GetRemovalMask()); - EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginTypeMask()); + EXPECT_EQ(ChromeBrowsingDataRemoverDelegate::DATA_TYPE_HISTORY, + GetRemovalMask()); + EXPECT_EQ(BrowsingDataRemover::ORIGIN_TYPE_UNPROTECTED_WEB, + GetOriginTypeMask()); EXPECT_FALSE(tester.HistoryContainsURL(kOrigin1)); EXPECT_TRUE(tester.HistoryContainsURL(kOrigin2)); } @@ -1159,11 +1201,14 @@ tester.AddProfilesAndCards(); ASSERT_TRUE(tester.HasProfile()); - BlockUntilBrowsingDataRemoved(AnHourAgo(), base::Time::Max(), - BrowsingDataRemover::REMOVE_FORM_DATA, false); + BlockUntilBrowsingDataRemoved( + AnHourAgo(), base::Time::Max(), + ChromeBrowsingDataRemoverDelegate::DATA_TYPE_FORM_DATA, false); - EXPECT_EQ(BrowsingDataRemover::REMOVE_FORM_DATA, GetRemovalMask()); - EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginTypeMask()); + EXPECT_EQ(ChromeBrowsingDataRemoverDelegate::DATA_TYPE_FORM_DATA, + GetRemovalMask()); + EXPECT_EQ(BrowsingDataRemover::ORIGIN_TYPE_UNPROTECTED_WEB, + GetOriginTypeMask()); ASSERT_FALSE(tester.HasProfile()); } @@ -1175,11 +1220,14 @@ tester.AddProfilesAndCards(); ASSERT_TRUE(tester.HasProfile()); - BlockUntilBrowsingDataRemoved(base::Time(), base::Time::Max(), - BrowsingDataRemover::REMOVE_FORM_DATA, false); + BlockUntilBrowsingDataRemoved( + base::Time(), base::Time::Max(), + ChromeBrowsingDataRemoverDelegate::DATA_TYPE_FORM_DATA, false); - EXPECT_EQ(BrowsingDataRemover::REMOVE_FORM_DATA, GetRemovalMask()); - EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginTypeMask()); + EXPECT_EQ(ChromeBrowsingDataRemoverDelegate::DATA_TYPE_FORM_DATA, + GetRemovalMask()); + EXPECT_EQ(BrowsingDataRemover::ORIGIN_TYPE_UNPROTECTED_WEB, + GetOriginTypeMask()); ASSERT_FALSE(tester.HasProfile()); } @@ -1194,11 +1242,14 @@ EXPECT_TRUE(tester.HasOrigin(kWebOrigin)); EXPECT_TRUE(tester.HasOrigin(autofill::kSettingsOrigin)); - BlockUntilBrowsingDataRemoved(AnHourAgo(), base::Time::Max(), - BrowsingDataRemover::REMOVE_HISTORY, false); + BlockUntilBrowsingDataRemoved( + AnHourAgo(), base::Time::Max(), + ChromeBrowsingDataRemoverDelegate::DATA_TYPE_HISTORY, false); - EXPECT_EQ(BrowsingDataRemover::REMOVE_HISTORY, GetRemovalMask()); - EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginTypeMask()); + EXPECT_EQ(ChromeBrowsingDataRemoverDelegate::DATA_TYPE_HISTORY, + GetRemovalMask()); + EXPECT_EQ(BrowsingDataRemover::ORIGIN_TYPE_UNPROTECTED_WEB, + GetOriginTypeMask()); EXPECT_TRUE(tester.HasOrigin(std::string())); EXPECT_FALSE(tester.HasOrigin(kWebOrigin)); EXPECT_TRUE(tester.HasOrigin(autofill::kSettingsOrigin)); @@ -1209,12 +1260,13 @@ prefs->SetString(omnibox::kZeroSuggestCachedResults, "[\"\", [\"foo\", \"bar\"]]"); BlockUntilBrowsingDataRemoved(base::Time(), base::Time::Max(), - BrowsingDataRemover::REMOVE_COOKIES, false); + BrowsingDataRemover::DATA_TYPE_COOKIES, false); // Expect the prefs to be cleared when cookies are removed. EXPECT_TRUE(prefs->GetString(omnibox::kZeroSuggestCachedResults).empty()); - EXPECT_EQ(BrowsingDataRemover::REMOVE_COOKIES, GetRemovalMask()); - EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginTypeMask()); + EXPECT_EQ(BrowsingDataRemover::DATA_TYPE_COOKIES, GetRemovalMask()); + EXPECT_EQ(BrowsingDataRemover::ORIGIN_TYPE_UNPROTECTED_WEB, + GetOriginTypeMask()); } #if defined(OS_CHROMEOS) @@ -1241,7 +1293,7 @@ .WillOnce(WithArgs<3>(Invoke(FakeDBusCall))); BlockUntilBrowsingDataRemoved(base::Time(), base::Time::Max(), - BrowsingDataRemover::REMOVE_MEDIA_LICENSES, + BrowsingDataRemover::DATA_TYPE_MEDIA_LICENSES, false); chromeos::DBusThreadManager::Shutdown(); @@ -1259,8 +1311,9 @@ const ClearDomainReliabilityTester& tester = clear_domain_reliability_tester(); - BlockUntilBrowsingDataRemoved(base::Time(), base::Time::Max(), - BrowsingDataRemover::REMOVE_HISTORY, false); + BlockUntilBrowsingDataRemoved( + base::Time(), base::Time::Max(), + ChromeBrowsingDataRemoverDelegate::DATA_TYPE_HISTORY, false); EXPECT_EQ(1u, tester.clear_count()); EXPECT_EQ(CLEAR_BEACONS, tester.last_clear_mode()); EXPECT_TRUE(ProbablySameFilters( @@ -1278,9 +1331,9 @@ BrowsingDataFilterBuilder::Create(BrowsingDataFilterBuilder::WHITELIST)); builder->AddRegisterableDomain(kTestRegisterableDomain1); - BlockUntilOriginDataRemoved(base::Time(), base::Time::Max(), - BrowsingDataRemover::REMOVE_HISTORY, - builder->Copy()); + BlockUntilOriginDataRemoved( + base::Time(), base::Time::Max(), + ChromeBrowsingDataRemoverDelegate::DATA_TYPE_HISTORY, builder->Copy()); EXPECT_EQ(1u, tester.clear_count()); EXPECT_EQ(CLEAR_BEACONS, tester.last_clear_mode()); EXPECT_TRUE(ProbablySameFilters( @@ -1292,7 +1345,7 @@ clear_domain_reliability_tester(); BlockUntilBrowsingDataRemoved(base::Time(), base::Time::Max(), - BrowsingDataRemover::REMOVE_COOKIES, false); + BrowsingDataRemover::DATA_TYPE_COOKIES, false); EXPECT_EQ(1u, tester.clear_count()); EXPECT_EQ(CLEAR_CONTEXTS, tester.last_clear_mode()); EXPECT_TRUE(ProbablySameFilters( @@ -1309,7 +1362,7 @@ builder->AddRegisterableDomain(kTestRegisterableDomain1); BlockUntilOriginDataRemoved(base::Time(), base::Time::Max(), - BrowsingDataRemover::REMOVE_COOKIES, + BrowsingDataRemover::DATA_TYPE_COOKIES, builder->Copy()); EXPECT_EQ(1u, tester.clear_count()); EXPECT_EQ(CLEAR_CONTEXTS, tester.last_clear_mode()); @@ -1323,7 +1376,8 @@ BlockUntilBrowsingDataRemoved( base::Time(), base::Time::Max(), - BrowsingDataRemover::REMOVE_HISTORY | BrowsingDataRemover::REMOVE_COOKIES, + ChromeBrowsingDataRemoverDelegate::DATA_TYPE_HISTORY | + BrowsingDataRemover::DATA_TYPE_COOKIES, false); EXPECT_EQ(1u, tester.clear_count()); EXPECT_EQ(CLEAR_CONTEXTS, tester.last_clear_mode()); @@ -1335,7 +1389,7 @@ clear_domain_reliability_tester(); BlockUntilBrowsingDataRemoved(base::Time(), base::Time::Max(), - BrowsingDataRemover::REMOVE_COOKIES, true); + BrowsingDataRemover::DATA_TYPE_COOKIES, true); EXPECT_EQ(1u, tester.clear_count()); EXPECT_EQ(CLEAR_CONTEXTS, tester.last_clear_mode()); } @@ -1348,7 +1402,8 @@ DISABLED_DomainReliability_NoMonitor) { BlockUntilBrowsingDataRemoved( base::Time(), base::Time::Max(), - BrowsingDataRemover::REMOVE_HISTORY | BrowsingDataRemover::REMOVE_COOKIES, + ChromeBrowsingDataRemoverDelegate::DATA_TYPE_HISTORY | + BrowsingDataRemover::DATA_TYPE_COOKIES, false); } @@ -1361,7 +1416,8 @@ *tester.download_manager(), RemoveDownloadsByURLAndTime(_, _, _)); BlockUntilBrowsingDataRemoved(base::Time(), base::Time::Max(), - BrowsingDataRemover::REMOVE_DOWNLOADS, false); + BrowsingDataRemover::DATA_TYPE_DOWNLOADS, + false); } TEST_F(ChromeBrowsingDataRemoverDelegateTest, RemovePasswordStatistics) { @@ -1371,8 +1427,9 @@ EXPECT_CALL(*tester.store(), RemoveStatisticsByOriginAndTimeImpl( ProbablySameFilter(empty_filter), base::Time(), base::Time::Max())); - BlockUntilBrowsingDataRemoved(base::Time(), base::Time::Max(), - BrowsingDataRemover::REMOVE_HISTORY, false); + BlockUntilBrowsingDataRemoved( + base::Time(), base::Time::Max(), + ChromeBrowsingDataRemoverDelegate::DATA_TYPE_HISTORY, false); } // TODO(crbug.com/589586): Disabled, since history is not yet marked as @@ -1389,9 +1446,9 @@ EXPECT_CALL(*tester.store(), RemoveStatisticsByOriginAndTimeImpl( ProbablySameFilter(filter), base::Time(), base::Time::Max())); - BlockUntilOriginDataRemoved(base::Time(), base::Time::Max(), - BrowsingDataRemover::REMOVE_HISTORY, - std::move(builder)); + BlockUntilOriginDataRemoved( + base::Time(), base::Time::Max(), + ChromeBrowsingDataRemoverDelegate::DATA_TYPE_HISTORY, std::move(builder)); } TEST_F(ChromeBrowsingDataRemoverDelegateTest, RemovePasswordsByTimeOnly) { @@ -1402,8 +1459,9 @@ EXPECT_CALL(*tester.store(), RemoveLoginsByURLAndTimeImpl(ProbablySameFilter(filter), _, _)) .WillOnce(Return(password_manager::PasswordStoreChangeList())); - BlockUntilBrowsingDataRemoved(base::Time(), base::Time::Max(), - BrowsingDataRemover::REMOVE_PASSWORDS, false); + BlockUntilBrowsingDataRemoved( + base::Time(), base::Time::Max(), + ChromeBrowsingDataRemoverDelegate::DATA_TYPE_PASSWORDS, false); } // Disabled, since passwords are not yet marked as a filterable datatype. @@ -1418,9 +1476,10 @@ EXPECT_CALL(*tester.store(), RemoveLoginsByURLAndTimeImpl(ProbablySameFilter(filter), _, _)) .WillOnce(Return(password_manager::PasswordStoreChangeList())); - BlockUntilOriginDataRemoved(base::Time(), base::Time::Max(), - BrowsingDataRemover::REMOVE_PASSWORDS, - std::move(builder)); + BlockUntilOriginDataRemoved( + base::Time(), base::Time::Max(), + ChromeBrowsingDataRemoverDelegate::DATA_TYPE_PASSWORDS, + std::move(builder)); } TEST_F(ChromeBrowsingDataRemoverDelegateTest, DisableAutoSignIn) { @@ -1434,7 +1493,7 @@ .WillOnce(Return(password_manager::PasswordStoreChangeList())); BlockUntilBrowsingDataRemoved(base::Time(), base::Time::Max(), - BrowsingDataRemover::REMOVE_COOKIES, false); + BrowsingDataRemover::DATA_TYPE_COOKIES, false); } TEST_F(ChromeBrowsingDataRemoverDelegateTest, @@ -1450,10 +1509,11 @@ DisableAutoSignInForOriginsImpl(ProbablySameFilter(empty_filter))) .WillOnce(Return(password_manager::PasswordStoreChangeList())); - BlockUntilBrowsingDataRemoved(base::Time(), base::Time::Max(), - BrowsingDataRemover::REMOVE_COOKIES | - BrowsingDataRemover::REMOVE_PASSWORDS, - false); + BlockUntilBrowsingDataRemoved( + base::Time(), base::Time::Max(), + BrowsingDataRemover::DATA_TYPE_COOKIES | + ChromeBrowsingDataRemoverDelegate::DATA_TYPE_PASSWORDS, + false); } TEST_F(ChromeBrowsingDataRemoverDelegateTest, @@ -1479,12 +1539,15 @@ BrowsingDataFilterBuilder::Create(BrowsingDataFilterBuilder::BLACKLIST)); filter->AddRegisterableDomain(kTestRegisterableDomain1); filter->AddRegisterableDomain(kTestRegisterableDomain3); - BlockUntilOriginDataRemoved(AnHourAgo(), base::Time::Max(), - BrowsingDataRemover::REMOVE_SITE_USAGE_DATA, - std::move(filter)); + BlockUntilOriginDataRemoved( + AnHourAgo(), base::Time::Max(), + ChromeBrowsingDataRemoverDelegate::DATA_TYPE_SITE_USAGE_DATA, + std::move(filter)); - EXPECT_EQ(BrowsingDataRemover::REMOVE_SITE_USAGE_DATA, GetRemovalMask()); - EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginTypeMask()); + EXPECT_EQ(ChromeBrowsingDataRemoverDelegate::DATA_TYPE_SITE_USAGE_DATA, + GetRemovalMask()); + EXPECT_EQ(BrowsingDataRemover::ORIGIN_TYPE_UNPROTECTED_WEB, + GetOriginTypeMask()); // Verify we only have true, and they're origin1, origin3, and origin4. ContentSettingsForOneType host_settings; @@ -1518,12 +1581,15 @@ BrowsingDataFilterBuilder::Create(BrowsingDataFilterBuilder::BLACKLIST)); filter->AddRegisterableDomain(kTestRegisterableDomain1); filter->AddRegisterableDomain(kTestRegisterableDomain3); - BlockUntilOriginDataRemoved(AnHourAgo(), base::Time::Max(), - BrowsingDataRemover::REMOVE_DURABLE_PERMISSION, - std::move(filter)); + BlockUntilOriginDataRemoved( + AnHourAgo(), base::Time::Max(), + ChromeBrowsingDataRemoverDelegate::DATA_TYPE_DURABLE_PERMISSION, + std::move(filter)); - EXPECT_EQ(BrowsingDataRemover::REMOVE_DURABLE_PERMISSION, GetRemovalMask()); - EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginTypeMask()); + EXPECT_EQ(ChromeBrowsingDataRemoverDelegate::DATA_TYPE_DURABLE_PERMISSION, + GetRemovalMask()); + EXPECT_EQ(BrowsingDataRemover::ORIGIN_TYPE_UNPROTECTED_WEB, + GetOriginTypeMask()); // Verify we only have allow for the first origin. ContentSettingsForOneType host_settings; @@ -1563,8 +1629,9 @@ CHECK(http_auth_cache->Lookup(kOrigin1, kTestRealm, net::HttpAuth::AUTH_SCHEME_BASIC)); - BlockUntilBrowsingDataRemoved(base::Time(), base::Time::Max(), - BrowsingDataRemover::REMOVE_PASSWORDS, false); + BlockUntilBrowsingDataRemoved( + base::Time(), base::Time::Max(), + ChromeBrowsingDataRemoverDelegate::DATA_TYPE_PASSWORDS, false); EXPECT_EQ(nullptr, http_auth_cache->Lookup(kOrigin1, kTestRealm, net::HttpAuth::AUTH_SCHEME_BASIC)); @@ -1606,9 +1673,10 @@ tester.CheckEmbargo(kOrigin2, CONTENT_SETTINGS_TYPE_NOTIFICATIONS, CONTENT_SETTING_BLOCK); - BlockUntilOriginDataRemoved(AnHourAgo(), base::Time::Max(), - BrowsingDataRemover::REMOVE_SITE_USAGE_DATA, - std::move(filter_builder_1)); + BlockUntilOriginDataRemoved( + AnHourAgo(), base::Time::Max(), + ChromeBrowsingDataRemoverDelegate::DATA_TYPE_SITE_USAGE_DATA, + std::move(filter_builder_1)); // kOrigin1 should be gone, but kOrigin2 remains. EXPECT_EQ(0, tester.GetIgnoreCount(kOrigin1, @@ -1624,8 +1692,9 @@ tester.CheckEmbargo(kOrigin2, CONTENT_SETTINGS_TYPE_NOTIFICATIONS, CONTENT_SETTING_BLOCK); - BlockUntilBrowsingDataRemoved(AnHourAgo(), base::Time::Max(), - BrowsingDataRemover::REMOVE_HISTORY, false); + BlockUntilBrowsingDataRemoved( + AnHourAgo(), base::Time::Max(), + ChromeBrowsingDataRemoverDelegate::DATA_TYPE_HISTORY, false); // Everything should be gone. EXPECT_EQ(0, tester.GetIgnoreCount(kOrigin1, @@ -1658,9 +1727,10 @@ EXPECT_FALSE(tester.RecordDismissAndEmbargo( kOrigin2, CONTENT_SETTINGS_TYPE_NOTIFICATIONS)); - BlockUntilOriginDataRemoved(AnHourAgo(), base::Time::Max(), - BrowsingDataRemover::REMOVE_SITE_USAGE_DATA, - std::move(filter_builder_2)); + BlockUntilOriginDataRemoved( + AnHourAgo(), base::Time::Max(), + ChromeBrowsingDataRemoverDelegate::DATA_TYPE_SITE_USAGE_DATA, + std::move(filter_builder_2)); // kOrigin2 should be gone, but kOrigin1 remains. EXPECT_EQ(2, tester.GetIgnoreCount(kOrigin1, @@ -1683,9 +1753,9 @@ tester.CheckEmbargo(kOrigin1, CONTENT_SETTINGS_TYPE_MIDI_SYSEX, CONTENT_SETTING_BLOCK); - BlockUntilBrowsingDataRemoved(AnHourAgo(), base::Time::Max(), - BrowsingDataRemover::REMOVE_SITE_USAGE_DATA, - false); + BlockUntilBrowsingDataRemoved( + AnHourAgo(), base::Time::Max(), + ChromeBrowsingDataRemoverDelegate::DATA_TYPE_SITE_USAGE_DATA, false); // Everything should be gone. EXPECT_EQ(0, tester.GetIgnoreCount(kOrigin1, @@ -1719,9 +1789,10 @@ std::unique_ptr<BrowsingDataFilterBuilder> filter_builder( BrowsingDataFilterBuilder::Create(BrowsingDataFilterBuilder::WHITELIST)); filter_builder->AddRegisterableDomain(kTestRegisterableDomain3); - BlockUntilOriginDataRemoved(base::Time(), base::Time::Max(), - BrowsingDataRemover::REMOVE_PLUGIN_DATA, - std::move(filter_builder)); + BlockUntilOriginDataRemoved( + base::Time(), base::Time::Max(), + ChromeBrowsingDataRemoverDelegate::DATA_TYPE_PLUGIN_DATA, + std::move(filter_builder)); // Plugin data for |kOrigin3.host()| should have been removed. expected.pop_back(); @@ -1784,8 +1855,9 @@ BrowsingDataRemoverCompletionObserver completion_observer(remover); remover->RemoveAndReply(delete_begin, base::Time::Max(), - BrowsingDataRemover::REMOVE_HISTORY, - BrowsingDataHelper::ALL, &completion_observer); + ChromeBrowsingDataRemoverDelegate::DATA_TYPE_HISTORY, + ChromeBrowsingDataRemoverDelegate::ALL_ORIGIN_TYPES, + &completion_observer); completion_observer.BlockUntilCompletion(); // There should be only 1 recently visited bookmarks. @@ -1813,18 +1885,88 @@ } // Clearing a part of the history has no effect. - BlockUntilBrowsingDataRemoved(AnHourAgo(), base::Time::Max(), - BrowsingDataRemover::REMOVE_HISTORY, false); + BlockUntilBrowsingDataRemoved( + AnHourAgo(), base::Time::Max(), + ChromeBrowsingDataRemoverDelegate::DATA_TYPE_HISTORY, false); EXPECT_THAT(language_model->GetTopLanguages(), SizeIs(2)); EXPECT_THAT(language_model->GetLanguageFrequency("en"), FloatEq(0.75)); EXPECT_THAT(language_model->GetLanguageFrequency("es"), FloatEq(0.25)); // Clearing the full history does the trick. - BlockUntilBrowsingDataRemoved(base::Time(), base::Time::Max(), - BrowsingDataRemover::REMOVE_HISTORY, false); + BlockUntilBrowsingDataRemoved( + base::Time(), base::Time::Max(), + ChromeBrowsingDataRemoverDelegate::DATA_TYPE_HISTORY, false); EXPECT_THAT(language_model->GetTopLanguages(), SizeIs(0)); EXPECT_THAT(language_model->GetLanguageFrequency("en"), FloatEq(0.0)); EXPECT_THAT(language_model->GetLanguageFrequency("es"), FloatEq(0.0)); } + +#if BUILDFLAG(ENABLE_EXTENSIONS) +TEST_F(ChromeBrowsingDataRemoverDelegateTest, OriginTypeMasks) { + scoped_refptr<MockExtensionSpecialStoragePolicy> mock_policy = + new MockExtensionSpecialStoragePolicy; + // Protect kOrigin1. + mock_policy->AddProtected(kOrigin1.GetOrigin()); + + EXPECT_FALSE(Match(kOrigin1, kUnprotected, mock_policy.get())); + EXPECT_TRUE(Match(kOrigin2, kUnprotected, mock_policy.get())); + EXPECT_FALSE(Match(kOriginExt, kUnprotected, mock_policy.get())); + EXPECT_FALSE(Match(kOriginDevTools, kUnprotected, mock_policy.get())); + + EXPECT_TRUE(Match(kOrigin1, kProtected, mock_policy.get())); + EXPECT_FALSE(Match(kOrigin2, kProtected, mock_policy.get())); + EXPECT_FALSE(Match(kOriginExt, kProtected, mock_policy.get())); + EXPECT_FALSE(Match(kOriginDevTools, kProtected, mock_policy.get())); + + EXPECT_FALSE(Match(kOrigin1, kExtension, mock_policy.get())); + EXPECT_FALSE(Match(kOrigin2, kExtension, mock_policy.get())); + EXPECT_TRUE(Match(kOriginExt, kExtension, mock_policy.get())); + EXPECT_FALSE(Match(kOriginDevTools, kExtension, mock_policy.get())); + + EXPECT_TRUE(Match(kOrigin1, kUnprotected | kProtected, mock_policy.get())); + EXPECT_TRUE(Match(kOrigin2, kUnprotected | kProtected, mock_policy.get())); + EXPECT_FALSE(Match(kOriginExt, kUnprotected | kProtected, mock_policy.get())); + EXPECT_FALSE( + Match(kOriginDevTools, kUnprotected | kProtected, mock_policy.get())); + + EXPECT_FALSE(Match(kOrigin1, kUnprotected | kExtension, mock_policy.get())); + EXPECT_TRUE(Match(kOrigin2, kUnprotected | kExtension, mock_policy.get())); + EXPECT_TRUE(Match(kOriginExt, kUnprotected | kExtension, mock_policy.get())); + EXPECT_FALSE( + Match(kOriginDevTools, kUnprotected | kExtension, mock_policy.get())); + + EXPECT_TRUE(Match(kOrigin1, kProtected | kExtension, mock_policy.get())); + EXPECT_FALSE(Match(kOrigin2, kProtected | kExtension, mock_policy.get())); + EXPECT_TRUE(Match(kOriginExt, kProtected | kExtension, mock_policy.get())); + EXPECT_FALSE( + Match(kOriginDevTools, kProtected | kExtension, mock_policy.get())); + + EXPECT_TRUE(Match(kOrigin1, kUnprotected | kProtected | kExtension, + mock_policy.get())); + EXPECT_TRUE(Match(kOrigin2, kUnprotected | kProtected | kExtension, + mock_policy.get())); + EXPECT_TRUE(Match(kOriginExt, kUnprotected | kProtected | kExtension, + mock_policy.get())); + EXPECT_FALSE(Match(kOriginDevTools, kUnprotected | kProtected | kExtension, + mock_policy.get())); +} +#endif + +// If extensions are disabled, there is no policy. +TEST_F(ChromeBrowsingDataRemoverDelegateTest, OriginTypeMasksNoPolicy) { + EXPECT_TRUE(Match(kOrigin1, kUnprotected, nullptr)); + EXPECT_FALSE(Match(kOriginExt, kUnprotected, nullptr)); + EXPECT_FALSE(Match(kOriginDevTools, kUnprotected, nullptr)); + + EXPECT_FALSE(Match(kOrigin1, kProtected, nullptr)); + EXPECT_FALSE(Match(kOriginExt, kProtected, nullptr)); + EXPECT_FALSE(Match(kOriginDevTools, kProtected, nullptr)); + +#if BUILDFLAG(ENABLE_EXTENSIONS) + EXPECT_FALSE(Match(kOrigin1, kExtension, nullptr)); + EXPECT_TRUE(Match(kOriginExt, kExtension, nullptr)); + EXPECT_FALSE(Match(kOriginDevTools, kExtension, nullptr)); +#endif +}
diff --git a/chrome/browser/browsing_data/mock_browsing_data_remover.cc b/chrome/browser/browsing_data/mock_browsing_data_remover.cc index 0bf01cf..239c8141 100644 --- a/chrome/browser/browsing_data/mock_browsing_data_remover.cc +++ b/chrome/browser/browsing_data/mock_browsing_data_remover.cc
@@ -40,13 +40,19 @@ observer); } +bool MockBrowsingDataRemover::DoesOriginMatchMask( + int origin_type_mask, + const GURL& origin, + storage::SpecialStoragePolicy* special_storage_policy) const { + return true; +} + void MockBrowsingDataRemover::RemoveWithFilter( const base::Time& delete_begin, const base::Time& delete_end, int remove_mask, int origin_type_mask, std::unique_ptr<content::BrowsingDataFilterBuilder> filter_builder) { - DCHECK_EQ(0, remove_mask & ~FILTERABLE_DATATYPES); DCHECK(filter_builder); RemoveInternal(delete_begin, delete_end, remove_mask, origin_type_mask, std::move(filter_builder), nullptr); @@ -59,7 +65,6 @@ int origin_type_mask, std::unique_ptr<content::BrowsingDataFilterBuilder> filter_builder, Observer* observer) { - DCHECK_EQ(0, remove_mask & ~FILTERABLE_DATATYPES); DCHECK(filter_builder); DCHECK(observer); RemoveInternal(delete_begin, delete_end, remove_mask, origin_type_mask,
diff --git a/chrome/browser/browsing_data/mock_browsing_data_remover.h b/chrome/browser/browsing_data/mock_browsing_data_remover.h index fa1f8bfa..2bee7c2 100644 --- a/chrome/browser/browsing_data/mock_browsing_data_remover.h +++ b/chrome/browser/browsing_data/mock_browsing_data_remover.h
@@ -26,6 +26,12 @@ void Shutdown() override; // BrowsingDataRemover: + // Determines whether |origin| matches the |origin_type_mask| according to + // the |special_storage_policy|. + bool DoesOriginMatchMask( + int origin_type_mask, + const GURL& origin, + storage::SpecialStoragePolicy* special_storage_policy) const override; void Remove(const base::Time& delete_begin, const base::Time& delete_end, int remove_mask,
diff --git a/chrome/browser/chooser_controller/chooser_controller.cc b/chrome/browser/chooser_controller/chooser_controller.cc index 4434032..4539037 100644 --- a/chrome/browser/chooser_controller/chooser_controller.cc +++ b/chrome/browser/chooser_controller/chooser_controller.cc
@@ -14,24 +14,16 @@ #include "ui/base/l10n/l10n_util.h" #include "url/origin.h" -ChooserController::ChooserController(content::RenderFrameHost* owner, - int title_string_id_origin, - int title_string_id_extension) - : owning_frame_(owner), - title_string_id_origin_(title_string_id_origin), - title_string_id_extension_(title_string_id_extension) {} +namespace { -ChooserController::~ChooserController() {} - -base::string16 ChooserController::GetTitle() const { - if (!owning_frame_) - return base::string16(); - - url::Origin origin = owning_frame_->GetLastCommittedOrigin(); +base::string16 CreateTitle(content::RenderFrameHost* render_frame_host, + int title_string_id_origin, + int title_string_id_extension) { + url::Origin origin = render_frame_host->GetLastCommittedOrigin(); if (origin.scheme() == extensions::kExtensionScheme) { content::WebContents* web_contents = - content::WebContents::FromRenderFrameHost(owning_frame_); + content::WebContents::FromRenderFrameHost(render_frame_host); content::BrowserContext* browser_context = web_contents->GetBrowserContext(); extensions::ExtensionRegistry* extension_registry = @@ -40,18 +32,35 @@ const extensions::Extension* extension = extension_registry->enabled_extensions().GetByID(origin.host()); if (extension) { - return l10n_util::GetStringFUTF16(title_string_id_extension_, + return l10n_util::GetStringFUTF16(title_string_id_extension, base::UTF8ToUTF16(extension->name())); } } } return l10n_util::GetStringFUTF16( - title_string_id_origin_, + title_string_id_origin, url_formatter::FormatOriginForSecurityDisplay( origin, url_formatter::SchemeDisplay::OMIT_CRYPTOGRAPHIC)); } +} // namespace + +ChooserController::ChooserController(content::RenderFrameHost* owner, + int title_string_id_origin, + int title_string_id_extension) { + if (owner) { + title_ = + CreateTitle(owner, title_string_id_origin, title_string_id_extension); + } +} + +ChooserController::~ChooserController() {} + +base::string16 ChooserController::GetTitle() const { + return title_; +} + bool ChooserController::ShouldShowIconBeforeText() const { return false; }
diff --git a/chrome/browser/chooser_controller/chooser_controller.h b/chrome/browser/chooser_controller/chooser_controller.h index 6b2e1f4..33658c6 100644 --- a/chrome/browser/chooser_controller/chooser_controller.h +++ b/chrome/browser/chooser_controller/chooser_controller.h
@@ -131,9 +131,7 @@ View* view() const { return view_; } private: - content::RenderFrameHost* const owning_frame_; - const int title_string_id_origin_; - const int title_string_id_extension_; + base::string16 title_; View* view_ = nullptr; DISALLOW_COPY_AND_ASSIGN(ChooserController);
diff --git a/chrome/browser/chooser_controller/mock_chooser_controller.cc b/chrome/browser/chooser_controller/mock_chooser_controller.cc index 03b224f..9763d8c 100644 --- a/chrome/browser/chooser_controller/mock_chooser_controller.cc +++ b/chrome/browser/chooser_controller/mock_chooser_controller.cc
@@ -11,8 +11,8 @@ #include "chrome/grit/generated_resources.h" #include "ui/base/l10n/l10n_util.h" -MockChooserController::MockChooserController(content::RenderFrameHost* owner) - : ChooserController(owner, +MockChooserController::MockChooserController() + : ChooserController(nullptr, IDS_USB_DEVICE_CHOOSER_PROMPT_ORIGIN, IDS_USB_DEVICE_CHOOSER_PROMPT_EXTENSION_NAME) {}
diff --git a/chrome/browser/chooser_controller/mock_chooser_controller.h b/chrome/browser/chooser_controller/mock_chooser_controller.h index 54255a8..e151c240 100644 --- a/chrome/browser/chooser_controller/mock_chooser_controller.h +++ b/chrome/browser/chooser_controller/mock_chooser_controller.h
@@ -20,7 +20,7 @@ PAIRED = 1 << 1, }; - explicit MockChooserController(content::RenderFrameHost* owner); + MockChooserController(); ~MockChooserController() override; // ChooserController:
diff --git a/chrome/browser/chrome_browser_main.cc b/chrome/browser/chrome_browser_main.cc index 247a008..8878bb27 100644 --- a/chrome/browser/chrome_browser_main.cc +++ b/chrome/browser/chrome_browser_main.cc
@@ -57,7 +57,6 @@ #include "chrome/browser/component_updater/sth_set_component_installer.h" #include "chrome/browser/component_updater/subresource_filter_component_installer.h" #include "chrome/browser/component_updater/supervised_user_whitelist_installer.h" -#include "chrome/browser/component_updater/swiftshader_component_installer.h" #include "chrome/browser/component_updater/widevine_cdm_component_installer.h" #include "chrome/browser/defaults.h" #include "chrome/browser/first_run/first_run.h" @@ -478,7 +477,6 @@ #if !defined(OS_ANDROID) RegisterPepperFlashComponent(cus); #if !defined(OS_CHROMEOS) - RegisterSwiftShaderComponent(cus); RegisterWidevineCdmComponent(cus); #endif // !defined(OS_CHROMEOS) #endif // !defined(OS_ANDROID)
diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc index add454a7..569bb3e6 100644 --- a/chrome/browser/chrome_content_browser_client.cc +++ b/chrome/browser/chrome_content_browser_client.cc
@@ -37,6 +37,7 @@ #include "chrome/browser/browsing_data/browsing_data_helper.h" #include "chrome/browser/browsing_data/browsing_data_remover.h" #include "chrome/browser/browsing_data/browsing_data_remover_factory.h" +#include "chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.h" #include "chrome/browser/budget_service/budget_service_impl.h" #include "chrome/browser/chrome_content_browser_client_parts.h" #include "chrome/browser/chrome_quota_permission_context.h" @@ -2724,8 +2725,8 @@ BrowsingDataRemover* remover = BrowsingDataRemoverFactory::GetForBrowserContext(profile); remover->Remove(base::Time(), base::Time::Max(), - BrowsingDataRemover::REMOVE_CACHE, - BrowsingDataHelper::UNPROTECTED_WEB); + BrowsingDataRemover::DATA_TYPE_CACHE, + BrowsingDataRemover::ORIGIN_TYPE_UNPROTECTED_WEB); } void ChromeContentBrowserClient::ClearCookies(RenderFrameHost* rfh) { @@ -2733,9 +2734,9 @@ rfh->GetSiteInstance()->GetProcess()->GetBrowserContext()); BrowsingDataRemover* remover = BrowsingDataRemoverFactory::GetForBrowserContext(profile); - int remove_mask = BrowsingDataRemover::REMOVE_SITE_DATA; + int remove_mask = ChromeBrowsingDataRemoverDelegate::DATA_TYPE_SITE_DATA; remover->Remove(base::Time(), base::Time::Max(), remove_mask, - BrowsingDataHelper::UNPROTECTED_WEB); + BrowsingDataRemover::ORIGIN_TYPE_UNPROTECTED_WEB); } void ChromeContentBrowserClient::ClearSiteData( @@ -2773,10 +2774,11 @@ remover->RemoveWithFilterAndReply( base::Time(), base::Time::Max(), - BrowsingDataRemover::REMOVE_COOKIES | - BrowsingDataRemover::REMOVE_CHANNEL_IDS | - BrowsingDataRemover::REMOVE_PLUGIN_DATA, - BrowsingDataHelper::ALL, std::move(domain_filter_builder), observer); + BrowsingDataRemover::DATA_TYPE_COOKIES | + BrowsingDataRemover::DATA_TYPE_CHANNEL_IDS | + ChromeBrowsingDataRemoverDelegate::DATA_TYPE_PLUGIN_DATA, + ChromeBrowsingDataRemoverDelegate::ALL_ORIGIN_TYPES, + std::move(domain_filter_builder), observer); } else { // The first removal task is a no-op. observer->OnBrowsingDataRemoverDone(); @@ -2785,13 +2787,13 @@ // Delete origin-scoped data. int remove_mask = 0; if (remove_storage) { - remove_mask |= BrowsingDataRemover::REMOVE_SITE_DATA & - ~BrowsingDataRemover::REMOVE_COOKIES & - ~BrowsingDataRemover::REMOVE_CHANNEL_IDS & - ~BrowsingDataRemover::REMOVE_PLUGIN_DATA; + remove_mask |= ChromeBrowsingDataRemoverDelegate::DATA_TYPE_SITE_DATA & + ~BrowsingDataRemover::DATA_TYPE_COOKIES & + ~BrowsingDataRemover::DATA_TYPE_CHANNEL_IDS & + ~ChromeBrowsingDataRemoverDelegate::DATA_TYPE_PLUGIN_DATA; } if (remove_cache) - remove_mask |= BrowsingDataRemover::REMOVE_CACHE; + remove_mask |= BrowsingDataRemover::DATA_TYPE_CACHE; if (remove_mask) { std::unique_ptr<BrowsingDataFilterBuilder> origin_filter_builder( @@ -2800,9 +2802,9 @@ origin_filter_builder->AddOrigin(origin); remover->RemoveWithFilterAndReply( - base::Time(), base::Time::Max(), - remove_mask, BrowsingDataHelper::ALL, std::move(origin_filter_builder), - observer); + base::Time(), base::Time::Max(), remove_mask, + ChromeBrowsingDataRemoverDelegate::ALL_ORIGIN_TYPES, + std::move(origin_filter_builder), observer); } else { // The second removal task is a no-op. observer->OnBrowsingDataRemoverDone();
diff --git a/chrome/browser/chrome_content_browser_client_unittest.cc b/chrome/browser/chrome_content_browser_client_unittest.cc index 70725c8..95736423 100644 --- a/chrome/browser/chrome_content_browser_client_unittest.cc +++ b/chrome/browser/chrome_content_browser_client_unittest.cc
@@ -19,6 +19,7 @@ #include "build/build_config.h" #include "chrome/browser/browsing_data/browsing_data_helper.h" #include "chrome/browser/browsing_data/browsing_data_remover_factory.h" +#include "chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.h" #include "chrome/browser/browsing_data/mock_browsing_data_remover.h" #include "chrome/browser/search_engines/template_url_service_factory.h" #include "chrome/test/base/testing_profile.h" @@ -387,26 +388,32 @@ int mask; } test_cases[] = { {false, false, false, 0}, - {true, false, false, BrowsingDataRemover::REMOVE_COOKIES | - BrowsingDataRemover::REMOVE_CHANNEL_IDS | - BrowsingDataRemover::REMOVE_PLUGIN_DATA}, - {false, true, false, BrowsingDataRemover::REMOVE_SITE_DATA & - ~BrowsingDataRemover::REMOVE_COOKIES & - ~BrowsingDataRemover::REMOVE_CHANNEL_IDS & - ~BrowsingDataRemover::REMOVE_PLUGIN_DATA}, - {false, false, true, BrowsingDataRemover::REMOVE_CACHE}, - {true, true, false, BrowsingDataRemover::REMOVE_SITE_DATA}, - {true, false, true, BrowsingDataRemover::REMOVE_COOKIES | - BrowsingDataRemover::REMOVE_CHANNEL_IDS | - BrowsingDataRemover::REMOVE_PLUGIN_DATA | - BrowsingDataRemover::REMOVE_CACHE}, - {false, true, true, BrowsingDataRemover::REMOVE_CACHE | - (BrowsingDataRemover::REMOVE_SITE_DATA & - ~BrowsingDataRemover::REMOVE_COOKIES & - ~BrowsingDataRemover::REMOVE_CHANNEL_IDS & - ~BrowsingDataRemover::REMOVE_PLUGIN_DATA)}, - {true, true, true, BrowsingDataRemover::REMOVE_SITE_DATA | - BrowsingDataRemover::REMOVE_CACHE}, + {true, false, false, + BrowsingDataRemover::DATA_TYPE_COOKIES | + BrowsingDataRemover::DATA_TYPE_CHANNEL_IDS | + ChromeBrowsingDataRemoverDelegate::DATA_TYPE_PLUGIN_DATA}, + {false, true, false, + ChromeBrowsingDataRemoverDelegate::DATA_TYPE_SITE_DATA & + ~BrowsingDataRemover::DATA_TYPE_COOKIES & + ~BrowsingDataRemover::DATA_TYPE_CHANNEL_IDS & + ~ChromeBrowsingDataRemoverDelegate::DATA_TYPE_PLUGIN_DATA}, + {false, false, true, BrowsingDataRemover::DATA_TYPE_CACHE}, + {true, true, false, + ChromeBrowsingDataRemoverDelegate::DATA_TYPE_SITE_DATA}, + {true, false, true, + BrowsingDataRemover::DATA_TYPE_COOKIES | + BrowsingDataRemover::DATA_TYPE_CHANNEL_IDS | + ChromeBrowsingDataRemoverDelegate::DATA_TYPE_PLUGIN_DATA | + BrowsingDataRemover::DATA_TYPE_CACHE}, + {false, true, true, + BrowsingDataRemover::DATA_TYPE_CACHE | + (ChromeBrowsingDataRemoverDelegate::DATA_TYPE_SITE_DATA & + ~BrowsingDataRemover::DATA_TYPE_COOKIES & + ~BrowsingDataRemover::DATA_TYPE_CHANNEL_IDS & + ~ChromeBrowsingDataRemoverDelegate::DATA_TYPE_PLUGIN_DATA)}, + {true, true, true, + ChromeBrowsingDataRemoverDelegate::DATA_TYPE_SITE_DATA | + BrowsingDataRemover::DATA_TYPE_CACHE}, }; for (unsigned int i = 0; i < arraysize(test_cases); ++i) { @@ -414,16 +421,16 @@ const TestCase& test_case = test_cases[i]; // We always delete data for all time and all origin types. - BrowsingDataHelper::OriginTypeMask all_origin_types = - BrowsingDataHelper::ALL; + int all_origin_types = ChromeBrowsingDataRemoverDelegate::ALL_ORIGIN_TYPES; // Some data are deleted for the origin and some for the registrable domain. // Depending on the chosen datatypes, this might result into one or two // calls. In the latter case, the removal mask will be split into two // parts - one for the origin deletion and one for the registrable domain. - const int domain_scoped_types = BrowsingDataRemover::REMOVE_COOKIES | - BrowsingDataRemover::REMOVE_CHANNEL_IDS | - BrowsingDataRemover::REMOVE_PLUGIN_DATA; + const int domain_scoped_types = + BrowsingDataRemover::DATA_TYPE_COOKIES | + BrowsingDataRemover::DATA_TYPE_CHANNEL_IDS | + ChromeBrowsingDataRemoverDelegate::DATA_TYPE_PLUGIN_DATA; int registrable_domain_deletion_mask = test_case.mask & domain_scoped_types; int origin_deletion_mask = test_case.mask & ~domain_scoped_types; @@ -505,20 +512,21 @@ remover()->ExpectCall( base::Time(), base::Time::Max(), - BrowsingDataRemover::REMOVE_COOKIES | - BrowsingDataRemover::REMOVE_CHANNEL_IDS | - BrowsingDataRemover::REMOVE_PLUGIN_DATA, - BrowsingDataHelper::ALL, std::move(registrable_domain_filter_builder)); + BrowsingDataRemover::DATA_TYPE_COOKIES | + BrowsingDataRemover::DATA_TYPE_CHANNEL_IDS | + ChromeBrowsingDataRemoverDelegate::DATA_TYPE_PLUGIN_DATA, + ChromeBrowsingDataRemoverDelegate::ALL_ORIGIN_TYPES, + std::move(registrable_domain_filter_builder)); std::unique_ptr<BrowsingDataFilterBuilder> origin_filter_builder( BrowsingDataFilterBuilder::Create( BrowsingDataFilterBuilder::WHITELIST)); origin_filter_builder->AddOrigin(url::Origin(GURL(test_case.origin))); - remover()->ExpectCall( - base::Time(), base::Time::Max(), - BrowsingDataRemover::REMOVE_CACHE, BrowsingDataHelper::ALL, - std::move(origin_filter_builder)); + remover()->ExpectCall(base::Time(), base::Time::Max(), + BrowsingDataRemover::DATA_TYPE_CACHE, + ChromeBrowsingDataRemoverDelegate::ALL_ORIGIN_TYPES, + std::move(origin_filter_builder)); SetClearingFinished(false); client.ClearSiteData(
diff --git a/chrome/browser/chromeos/BUILD.gn b/chrome/browser/chromeos/BUILD.gn index 2086fd8..13c322c4 100644 --- a/chrome/browser/chromeos/BUILD.gn +++ b/chrome/browser/chromeos/BUILD.gn
@@ -1461,10 +1461,6 @@ if (use_cras) { defines = [ "USE_CRAS" ] } - - if (ui_compositor_image_transport) { - deps += [ "//ui/gl" ] - } } static_library("arc_test_support") {
diff --git a/chrome/browser/chromeos/accessibility/sticky_keys_browsertest.cc b/chrome/browser/chromeos/accessibility/sticky_keys_browsertest.cc index 986be19..5b33159 100644 --- a/chrome/browser/chromeos/accessibility/sticky_keys_browsertest.cc +++ b/chrome/browser/chromeos/accessibility/sticky_keys_browsertest.cc
@@ -163,7 +163,7 @@ // Make sure that the AppList is not erroneously displayed and the omnibox // doesn't lose focus. - EXPECT_FALSE(ash::WmShell::Get()->GetAppListTargetVisibility()); + EXPECT_FALSE(ash::Shell::Get()->GetAppListTargetVisibility()); EXPECT_TRUE(omnibox->GetNativeView()->HasFocus()); // Type 'foo'. @@ -177,14 +177,14 @@ ASSERT_EQ(3U, start); ASSERT_EQ(3U, end); - EXPECT_FALSE(ash::WmShell::Get()->GetAppListTargetVisibility()); + EXPECT_FALSE(ash::Shell::Get()->GetAppListTargetVisibility()); EXPECT_TRUE(omnibox->GetNativeView()->HasFocus()); // Hit Home by sequencing Search (left Windows) and Left (arrow). SendKeyPress(ui::VKEY_LWIN); SendKeyPress(ui::VKEY_LEFT); - EXPECT_FALSE(ash::WmShell::Get()->GetAppListTargetVisibility()); + EXPECT_FALSE(ash::Shell::Get()->GetAppListTargetVisibility()); EXPECT_TRUE(omnibox->GetNativeView()->HasFocus()); // Verify caret moved to the beginning.
diff --git a/chrome/browser/chromeos/arc/intent_helper/arc_settings_service.cc b/chrome/browser/chromeos/arc/intent_helper/arc_settings_service.cc index 8959cb3..f6c9b3e 100644 --- a/chrome/browser/chromeos/arc/intent_helper/arc_settings_service.cc +++ b/chrome/browser/chromeos/arc/intent_helper/arc_settings_service.cc
@@ -152,10 +152,18 @@ // Returns the integer value of the pref. pref_name must exist. int GetIntegerPref(const std::string& pref_name) const; + // Gets whether this is a managed pref. + bool IsBooleanPrefManaged(const std::string& pref_name) const; + // Sends boolean pref broadcast to the delegate. void SendBoolPrefSettingsBroadcast(const std::string& pref_name, const std::string& action) const; + // Same as above, except sends a specific boolean value. + void SendBoolValueSettingsBroadcast(bool value, + bool managed, + const std::string& action) const; + // Sends a broadcast to the delegate. void SendSettingsBroadcast(const std::string& action, const base::DictionaryValue& extras) const; @@ -490,14 +498,39 @@ } void ArcSettingsServiceImpl::SyncSpokenFeedbackEnabled() const { - std::string setting = - "org.chromium.arc.intent_helper.SET_SPOKEN_FEEDBACK_ENABLED"; - if (base::CommandLine::ForCurrentProcess()->HasSwitch( - chromeos::switches::kEnableChromeVoxArcSupport)) - setting = "org.chromium.arc.intent_helper.SET_ACCESSIBILITY_HELPER_ENABLED"; + // Chrome spoken feedback triggers enabling of Android spoken feedback. + // There are two types of spoken feedback from Android: + // 1. Talkback (default) + // 2. accessibility helper (experimental, works through ChromeVox). + // These two features are mutually exclusive. - SendBoolPrefSettingsBroadcast(prefs::kAccessibilitySpokenFeedbackEnabled, - setting); + const PrefService::Preference* pref = registrar_.prefs()->FindPreference( + prefs::kAccessibilitySpokenFeedbackEnabled); + DCHECK(pref); + bool enabled = false; + bool value_exists = pref->GetValue()->GetAsBoolean(&enabled); + CHECK(value_exists); + bool managed = + IsBooleanPrefManaged(prefs::kAccessibilitySpokenFeedbackEnabled); + + std::string talkback_setting = + "org.chromium.arc.intent_helper.SET_SPOKEN_FEEDBACK_ENABLED"; + std::string accessibility_helper_setting = + "org.chromium.arc.intent_helper.SET_ACCESSIBILITY_HELPER_ENABLED"; + + if (base::CommandLine::ForCurrentProcess()->HasSwitch( + chromeos::switches::kEnableChromeVoxArcSupport)) { + // Make sure if ChromeVox is on, TalkBack is off. + if (enabled) + SendBoolValueSettingsBroadcast(false, managed, talkback_setting); + + SendBoolValueSettingsBroadcast(enabled, managed, + accessibility_helper_setting); + + return; + } + + SendBoolValueSettingsBroadcast(enabled, managed, talkback_setting); } void ArcSettingsServiceImpl::SyncTimeZone() const { @@ -558,6 +591,16 @@ return val; } +bool ArcSettingsServiceImpl::IsBooleanPrefManaged( + const std::string& pref_name) const { + const PrefService::Preference* pref = + registrar_.prefs()->FindPreference(pref_name); + DCHECK(pref); + bool value_exists = pref->GetValue()->is_bool(); + DCHECK(value_exists); + return !pref->IsUserModifiable(); +} + void ArcSettingsServiceImpl::SendBoolPrefSettingsBroadcast( const std::string& pref_name, const std::string& action) const { @@ -567,9 +610,16 @@ bool enabled = false; bool value_exists = pref->GetValue()->GetAsBoolean(&enabled); DCHECK(value_exists); + SendBoolValueSettingsBroadcast(enabled, !pref->IsUserModifiable(), action); +} + +void ArcSettingsServiceImpl::SendBoolValueSettingsBroadcast( + bool enabled, + bool managed, + const std::string& action) const { base::DictionaryValue extras; extras.SetBoolean("enabled", enabled); - extras.SetBoolean("managed", !pref->IsUserModifiable()); + extras.SetBoolean("managed", managed); SendSettingsBroadcast(action, extras); }
diff --git a/chrome/browser/chromeos/arc/wallpaper/arc_wallpaper_service.cc b/chrome/browser/chromeos/arc/wallpaper/arc_wallpaper_service.cc index 2bcb3aa..b0ec1fa 100644 --- a/chrome/browser/chromeos/arc/wallpaper/arc_wallpaper_service.cc +++ b/chrome/browser/chromeos/arc/wallpaper/arc_wallpaper_service.cc
@@ -4,17 +4,23 @@ #include "chrome/browser/chromeos/arc/wallpaper/arc_wallpaper_service.h" +#include <stdlib.h> + +#include <deque> + #include "ash/common/wallpaper/wallpaper_controller.h" #include "ash/shell.h" #include "base/logging.h" #include "base/memory/ptr_util.h" #include "base/task_scheduler/post_task.h" #include "chrome/browser/chromeos/login/users/wallpaper/wallpaper_manager.h" +#include "chrome/browser/image_decoder.h" #include "components/arc/arc_bridge_service.h" #include "components/signin/core/account_id/account_id.h" #include "components/user_manager/user_manager.h" #include "components/wallpaper/wallpaper_files_id.h" #include "components/wallpaper/wallpaper_layout.h" +#include "components/wallpaper/wallpaper_resizer.h" #include "content/public/browser/browser_thread.h" #include "ui/gfx/codec/png_codec.h" #include "ui/gfx/geometry/size.h" @@ -25,39 +31,22 @@ using user_manager::UserManager; namespace arc { - namespace { constexpr char kAndroidWallpaperFilename[] = "android.jpg"; -// Sets a decoded bitmap as the wallpaper. -void SetBitmapAsWallpaper(const SkBitmap& bitmap) { - // Make the SkBitmap immutable as we won't modify it. This is important - // because otherwise it gets duplicated during painting, wasting memory. - SkBitmap immutable_bitmap(bitmap); - immutable_bitmap.setImmutable(); - gfx::ImageSkia image = gfx::ImageSkia::CreateFrom1xBitmap(immutable_bitmap); - image.MakeThreadSafe(); +// The structure must not go out from a method invoked on BrowserThread::UI +// because the primary account referenced by the class will be released. +struct PrimaryAccount { + const AccountId& id; + const bool is_active; +}; - chromeos::WallpaperManager* wallpaper_manager = - chromeos::WallpaperManager::Get(); - - const AccountId& account_id = - UserManager::Get()->GetPrimaryUser()->GetAccountId(); - wallpaper::WallpaperFilesId wallpaper_files_id = - wallpaper_manager->GetFilesId(account_id); - const bool update_wallpaper = - account_id == UserManager::Get()->GetActiveUser()->GetAccountId(); - // TODO(crbug.com/618922): Allow specifying layout. - wallpaper_manager->SetCustomWallpaper( - account_id, wallpaper_files_id, kAndroidWallpaperFilename, - wallpaper::WALLPAPER_LAYOUT_CENTER_CROPPED, - user_manager::User::CUSTOMIZED, image, update_wallpaper); - - // TODO(crbug.com/618922): Register the wallpaper to Chrome OS wallpaper - // picker. Currently the new wallpaper does not appear there. The best way to - // make this happen seems to do the same things as wallpaper_api.cc and - // wallpaper_private_api.cc. +PrimaryAccount GetPrimaryAccount() { + UserManager* const user_manager = UserManager::Get(); + const AccountId& account_id = user_manager->GetPrimaryUser()->GetAccountId(); + return {account_id, + account_id == user_manager->GetActiveUser()->GetAccountId()}; } std::vector<uint8_t> EncodeImagePng(const gfx::ImageSkia image) { @@ -74,16 +63,112 @@ } // namespace +// Store for mapping between ImageSkia ID and Android wallpaper ID. +// Skia image ID is used to keep track of the wallpaper on the Chrome side, and +// we need to map it to the Android's wallpaper ID in ARC++. Because setting +// wallpaper is async operation, the caller stores the pair of ImageSkia ID and +// wallpaper ID when it requests setting a wallpaper, then it obtains the +// corresponding Andorid ID when the completion of setting a wallpaper is +// notified. +class ArcWallpaperService::AndroidIdStore { + public: + AndroidIdStore() = default; + + // Remembers a pair of image and Android ID. + void Push(const gfx::ImageSkia& image, int32_t android_id) { + pairs_.push_back( + {wallpaper::WallpaperResizer::GetImageId(image), android_id}); + } + + // Gets Android ID for |image_id|. Returns -1 if it does not found Android ID + // corresponding to |image_id|. Sometimes the corresonpding |Pop| is not + // called after |Push| is invoked, thus |Pop| removes older pairs in addition + // to the pair of given |image_id| when the pair is found. + int32_t Pop(uint32_t image_id) { + for (size_t i = 0; i < pairs_.size(); ++i) { + if (pairs_[i].image_id == image_id) { + const int32_t result = pairs_[i].android_id; + pairs_.erase(pairs_.begin(), pairs_.begin() + i + 1); + return result; + } + } + return -1; + } + + private: + struct Pair { + uint32_t image_id; + int32_t android_id; + }; + std::deque<Pair> pairs_; + + DISALLOW_COPY_AND_ASSIGN(AndroidIdStore); +}; + +class ArcWallpaperService::DecodeRequest : public ImageDecoder::ImageRequest { + public: + DecodeRequest(ArcWallpaperService* service, int32_t android_id) + : service_(service), android_id_(android_id) {} + ~DecodeRequest() override = default; + + // ImageDecoder::ImageRequest overrides. + void OnImageDecoded(const SkBitmap& bitmap) override { + DCHECK_CURRENTLY_ON(content::BrowserThread::UI); + + // Make the SkBitmap immutable as we won't modify it. This is important + // because otherwise it gets duplicated during painting, wasting memory. + SkBitmap immutable_bitmap(bitmap); + immutable_bitmap.setImmutable(); + gfx::ImageSkia image = gfx::ImageSkia::CreateFrom1xBitmap(immutable_bitmap); + image.MakeThreadSafe(); + service_->android_id_store()->Push(image, android_id_); + + chromeos::WallpaperManager* const wallpaper_manager = + chromeos::WallpaperManager::Get(); + const PrimaryAccount& account = GetPrimaryAccount(); + wallpaper::WallpaperFilesId wallpaper_files_id = + wallpaper_manager->GetFilesId(account.id); + // TODO(crbug.com/618922): Allow specifying layout. + wallpaper_manager->SetCustomWallpaper( + account.id, wallpaper_files_id, kAndroidWallpaperFilename, + wallpaper::WALLPAPER_LAYOUT_CENTER_CROPPED, + user_manager::User::CUSTOMIZED, image, + account.is_active /*update_wallpaper*/); + + // TODO(crbug.com/618922): Register the wallpaper to Chrome OS wallpaper + // picker. Currently the new wallpaper does not appear there. The best way + // to make this happen seems to do the same things as wallpaper_api.cc and + // wallpaper_private_api.cc. + } + + void OnDecodeImageFailed() override { + DCHECK_CURRENTLY_ON(content::BrowserThread::UI); + DLOG(ERROR) << "Failed to decode wallpaper image."; + + // Android regards the new wallpaper was set to Chrome. Invoke + // OnWallpaperDataChanged to notify that the previous wallpaper is still + // used in chrome. Note that |wallpaper_id| is not passed back to ARC in + // this case. + service_->OnWallpaperDataChanged(); + } + + private: + // ArcWallpaperService owns DecodeRequest, so it will outlive this. + ArcWallpaperService* const service_; + const int32_t android_id_; + + DISALLOW_COPY_AND_ASSIGN(DecodeRequest); +}; + ArcWallpaperService::ArcWallpaperService(ArcBridgeService* bridge_service) - : ArcService(bridge_service), binding_(this) { + : ArcService(bridge_service), + binding_(this), + android_id_store_(new AndroidIdStore()) { arc_bridge_service()->wallpaper()->AddObserver(this); } ArcWallpaperService::~ArcWallpaperService() { DCHECK_CURRENTLY_ON(content::BrowserThread::UI); - // Make sure the callback is never called after destruction. It is safe to - // call Cancel() even when there is no in-flight request. - ImageDecoder::Cancel(this); ash::WallpaperController* wc = GetWallpaperController(); if (wc) wc->RemoveObserver(this); @@ -96,7 +181,9 @@ ARC_GET_INSTANCE_FOR_METHOD(arc_bridge_service()->wallpaper(), Init); DCHECK(wallpaper_instance); wallpaper_instance->Init(binding_.CreateInterfacePtrAndBind()); - ash::Shell::GetInstance()->wallpaper_controller()->AddObserver(this); + ash::WallpaperController* wc = GetWallpaperController(); + DCHECK(wc); + wc->AddObserver(this); } void ArcWallpaperService::OnInstanceClosed() { @@ -106,13 +193,29 @@ wc->RemoveObserver(this); } -void ArcWallpaperService::SetWallpaper(const std::vector<uint8_t>& data) { +void ArcWallpaperService::SetWallpaper(const std::vector<uint8_t>& data, + int32_t wallpaper_id) { DCHECK_CURRENTLY_ON(content::BrowserThread::UI); - ImageDecoder::Cancel(this); - ImageDecoder::StartWithOptions(this, data, ImageDecoder::DEFAULT_CODEC, true, + if (wallpaper_id == 0) + wallpaper_id = -1; + // Previous request will be cancelled at destructor of + // ImageDecoder::ImageRequest. + decode_request_ = base::MakeUnique<DecodeRequest>(this, wallpaper_id); + ImageDecoder::StartWithOptions(decode_request_.get(), data, + ImageDecoder::DEFAULT_CODEC, true, gfx::Size()); } +void ArcWallpaperService::SetDefaultWallpaper() { + DCHECK_CURRENTLY_ON(content::BrowserThread::UI); + // Previous request will be cancelled at destructor of + // ImageDecoder::ImageRequest. + decode_request_.reset(); + const PrimaryAccount& account = GetPrimaryAccount(); + chromeos::WallpaperManager::Get()->SetDefaultWallpaper(account.id, + account.is_active); +} + void ArcWallpaperService::GetWallpaper(const GetWallpaperCallback& callback) { DCHECK_CURRENTLY_ON(content::BrowserThread::UI); ash::WallpaperController* wc = @@ -124,23 +227,17 @@ base::Bind(&EncodeImagePng, wallpaper), callback); } -void ArcWallpaperService::OnImageDecoded(const SkBitmap& bitmap) { - DCHECK_CURRENTLY_ON(content::BrowserThread::UI); - SetBitmapAsWallpaper(bitmap); -} - -void ArcWallpaperService::OnDecodeImageFailed() { - DCHECK_CURRENTLY_ON(content::BrowserThread::UI); - LOG(ERROR) << "Failed to decode wallpaper image."; -} - void ArcWallpaperService::OnWallpaperDataChanged() { DCHECK_CURRENTLY_ON(content::BrowserThread::UI); - auto* wallpaper_instance = ARC_GET_INSTANCE_FOR_METHOD( + + auto* const wallpaper_instance = ARC_GET_INSTANCE_FOR_METHOD( arc_bridge_service()->wallpaper(), OnWallpaperChanged); + const ash::WallpaperController* const wc = GetWallpaperController(); + const int32_t android_id = + wc ? android_id_store_->Pop(wc->GetWallpaperOriginalImageId()) : -1; if (!wallpaper_instance) return; - wallpaper_instance->OnWallpaperChanged(); + wallpaper_instance->OnWallpaperChanged(android_id); } } // namespace arc
diff --git a/chrome/browser/chromeos/arc/wallpaper/arc_wallpaper_service.h b/chrome/browser/chromeos/arc/wallpaper/arc_wallpaper_service.h index 63d7e45..ab6094a 100644 --- a/chrome/browser/chromeos/arc/wallpaper/arc_wallpaper_service.h +++ b/chrome/browser/chromeos/arc/wallpaper/arc_wallpaper_service.h
@@ -6,28 +6,28 @@ #define CHROME_BROWSER_CHROMEOS_ARC_WALLPAPER_ARC_WALLPAPER_SERVICE_H_ #include <stdint.h> + +#include <memory> #include <vector> #include "ash/common/wallpaper/wallpaper_controller_observer.h" #include "base/macros.h" -#include "chrome/browser/image_decoder.h" #include "components/arc/arc_service.h" #include "components/arc/common/wallpaper.mojom.h" #include "components/arc/instance_holder.h" #include "mojo/public/cpp/bindings/binding.h" -class SkBitmap; - namespace arc { // Lives on the UI thread. class ArcWallpaperService : public ArcService, public ash::WallpaperControllerObserver, - public ImageDecoder::ImageRequest, public InstanceHolder<mojom::WallpaperInstance>::Observer, public mojom::WallpaperHost { public: + class AndroidIdStore; + explicit ArcWallpaperService(ArcBridgeService* bridge_service); ~ArcWallpaperService() override; @@ -38,18 +38,22 @@ // mojom::WallpaperHost overrides. // TODO(muyuanli): change callback prototype when use_new_wrapper_types is // updated and merge them with the functions below. - void SetWallpaper(const std::vector<uint8_t>& data) override; + void SetWallpaper(const std::vector<uint8_t>& data, + int32_t wallpaper_id) override; + void SetDefaultWallpaper() override; void GetWallpaper(const GetWallpaperCallback& callback) override; - // ImageDecoder::ImageRequest implementation. - void OnImageDecoded(const SkBitmap& bitmap) override; - void OnDecodeImageFailed() override; - // WallpaperControllerObserver implementation. void OnWallpaperDataChanged() override; + AndroidIdStore* android_id_store() { return android_id_store_.get(); } + private: + class DecodeRequest; mojo::Binding<mojom::WallpaperHost> binding_; + std::unique_ptr<DecodeRequest> decode_request_; + std::unique_ptr<AndroidIdStore> android_id_store_; + DISALLOW_COPY_AND_ASSIGN(ArcWallpaperService); };
diff --git a/chrome/browser/chromeos/extensions/wallpaper_private_api.cc b/chrome/browser/chromeos/extensions/wallpaper_private_api.cc index c9eac15..2713cb37 100644 --- a/chrome/browser/chromeos/extensions/wallpaper_private_api.cc +++ b/chrome/browser/chromeos/extensions/wallpaper_private_api.cc
@@ -596,22 +596,10 @@ ~WallpaperPrivateResetWallpaperFunction() {} bool WallpaperPrivateResetWallpaperFunction::RunAsync() { - chromeos::WallpaperManager* wallpaper_manager = - chromeos::WallpaperManager::Get(); - user_manager::UserManager* user_manager = user_manager::UserManager::Get(); + const AccountId& account_id = + user_manager::UserManager::Get()->GetActiveUser()->GetAccountId(); + chromeos::WallpaperManager::Get()->SetDefaultWallpaper(account_id, true); - const AccountId& account_id = user_manager->GetActiveUser()->GetAccountId(); - wallpaper_manager->RemoveUserWallpaperInfo(account_id); - - wallpaper::WallpaperInfo info = {std::string(), - wallpaper::WALLPAPER_LAYOUT_CENTER, - user_manager::User::DEFAULT, - base::Time::Now().LocalMidnight()}; - bool is_persistent = - !user_manager->IsCurrentUserNonCryptohomeDataEphemeral(); - wallpaper_manager->SetUserWallpaperInfo(account_id, info, is_persistent); - - wallpaper_manager->SetDefaultWallpaperNow(account_id); Profile* profile = Profile::FromBrowserContext(browser_context()); // This API is only available to the component wallpaper picker. We do not // need to show the app's name if it is the component wallpaper picker. So set
diff --git a/chrome/browser/chromeos/login/lock/webui_screen_locker.cc b/chrome/browser/chromeos/login/lock/webui_screen_locker.cc index aac5466..4e4ace6 100644 --- a/chrome/browser/chromeos/login/lock/webui_screen_locker.cc +++ b/chrome/browser/chromeos/login/lock/webui_screen_locker.cc
@@ -416,7 +416,9 @@ //////////////////////////////////////////////////////////////////////////////// // ash::ShellObserver: -void WebUIScreenLocker::OnVirtualKeyboardStateChanged(bool activated) { +void WebUIScreenLocker::OnVirtualKeyboardStateChanged( + bool activated, + ash::WmWindow* root_window) { if (keyboard::KeyboardController::GetInstance()) { if (activated) { if (!is_observing_keyboard_) {
diff --git a/chrome/browser/chromeos/login/lock/webui_screen_locker.h b/chrome/browser/chromeos/login/lock/webui_screen_locker.h index 7f5f64d..be1b2fc5 100644 --- a/chrome/browser/chromeos/login/lock/webui_screen_locker.h +++ b/chrome/browser/chromeos/login/lock/webui_screen_locker.h
@@ -138,7 +138,8 @@ void RenderProcessGone(base::TerminationStatus status) override; // ash::ShellObserver: - void OnVirtualKeyboardStateChanged(bool activated) override; + void OnVirtualKeyboardStateChanged(bool activated, + ash::WmWindow* root_window) override; // keyboard::KeyboardControllerObserver: void OnKeyboardBoundsChanging(const gfx::Rect& new_bounds) override;
diff --git a/chrome/browser/chromeos/login/ui/login_display_host_impl.cc b/chrome/browser/chromeos/login/ui/login_display_host_impl.cc index 7e7b547..5230a0d 100644 --- a/chrome/browser/chromeos/login/ui/login_display_host_impl.cc +++ b/chrome/browser/chromeos/login/ui/login_display_host_impl.cc
@@ -1028,7 +1028,9 @@ //////////////////////////////////////////////////////////////////////////////// // LoginDisplayHostImpl, ash::ShellObserver: -void LoginDisplayHostImpl::OnVirtualKeyboardStateChanged(bool activated) { +void LoginDisplayHostImpl::OnVirtualKeyboardStateChanged( + bool activated, + ash::WmWindow* root_window) { if (keyboard::KeyboardController::GetInstance()) { if (activated) { if (!is_observing_keyboard_) {
diff --git a/chrome/browser/chromeos/login/ui/login_display_host_impl.h b/chrome/browser/chromeos/login/ui/login_display_host_impl.h index d7041af..1638c38f 100644 --- a/chrome/browser/chromeos/login/ui/login_display_host_impl.h +++ b/chrome/browser/chromeos/login/ui/login_display_host_impl.h
@@ -122,7 +122,8 @@ void OnActiveOutputNodeChanged() override; // ash::ShellObserver: - void OnVirtualKeyboardStateChanged(bool activated) override; + void OnVirtualKeyboardStateChanged(bool activated, + ash::WmWindow* root_window) override; // Overridden from keyboard::KeyboardControllerObserver: void OnKeyboardBoundsChanging(const gfx::Rect& new_bounds) override;
diff --git a/chrome/browser/chromeos/policy/device_status_collector.cc b/chrome/browser/chromeos/policy/device_status_collector.cc index f58540c..982310d 100644 --- a/chrome/browser/chromeos/policy/device_status_collector.cc +++ b/chrome/browser/chromeos/policy/device_status_collector.cc
@@ -25,7 +25,7 @@ #include "base/strings/string_util.h" #include "base/strings/stringprintf.h" #include "base/sys_info.h" -#include "base/task_runner_util.h" +#include "base/task_scheduler/post_task.h" #include "base/threading/sequenced_task_runner_handle.h" #include "base/threading/sequenced_worker_pool.h" #include "base/values.h" @@ -65,7 +65,6 @@ #include "components/user_manager/user_manager.h" #include "components/user_manager/user_type.h" #include "components/version_info/version_info.h" -#include "content/public/browser/browser_thread.h" #include "extensions/browser/extension_registry.h" #include "extensions/common/extension.h" #include "storage/browser/fileapi/external_mount_points.h" @@ -354,8 +353,10 @@ } // Call out to the blocking pool to sample disk volume info. - base::PostTaskAndReplyWithResult( - content::BrowserThread::GetBlockingPool(), FROM_HERE, + base::PostTaskWithTraitsAndReplyWithResult( + FROM_HERE, + base::TaskTraits().MayBlock().WithPriority( + base::TaskPriority::BACKGROUND), base::Bind(volume_info_fetcher, mount_points), base::Bind(&GetStatusState::OnVolumeInfoReceived, this)); } @@ -364,8 +365,11 @@ void SampleCPUTempInfo( const policy::DeviceStatusCollector::CPUTempFetcher& cpu_temp_fetcher) { // Call out to the blocking pool to sample CPU temp. - base::PostTaskAndReplyWithResult( - content::BrowserThread::GetBlockingPool(), FROM_HERE, cpu_temp_fetcher, + base::PostTaskWithTraitsAndReplyWithResult( + FROM_HERE, + base::TaskTraits().MayBlock().WithPriority( + base::TaskPriority::BACKGROUND), + cpu_temp_fetcher, base::Bind(&GetStatusState::OnCPUTempInfoReceived, this)); } @@ -491,16 +495,18 @@ UpdateReportingSettings(); // Get the the OS and firmware version info. - base::PostTaskAndReplyWithResult( - content::BrowserThread::GetBlockingPool(), + base::PostTaskWithTraitsAndReplyWithResult( FROM_HERE, + base::TaskTraits().MayBlock().WithPriority( + base::TaskPriority::BACKGROUND), base::Bind(&chromeos::version_loader::GetVersion, chromeos::version_loader::VERSION_FULL), base::Bind(&DeviceStatusCollector::OnOSVersion, weak_factory_.GetWeakPtr())); - base::PostTaskAndReplyWithResult( - content::BrowserThread::GetBlockingPool(), + base::PostTaskWithTraitsAndReplyWithResult( FROM_HERE, + base::TaskTraits().MayBlock().WithPriority( + base::TaskPriority::BACKGROUND), base::Bind(&chromeos::version_loader::GetFirmware), base::Bind(&DeviceStatusCollector::OnOSFirmware, weak_factory_.GetWeakPtr())); @@ -711,8 +717,10 @@ return; // Call out to the blocking pool to sample CPU stats. - base::PostTaskAndReplyWithResult( - content::BrowserThread::GetBlockingPool(), FROM_HERE, + base::PostTaskWithTraitsAndReplyWithResult( + FROM_HERE, + base::TaskTraits().MayBlock().WithPriority( + base::TaskPriority::BACKGROUND), cpu_statistics_fetcher_, base::Bind(&DeviceStatusCollector::ReceiveCPUStatistics, weak_factory_.GetWeakPtr()));
diff --git a/chrome/browser/chromeos/policy/device_status_collector_browsertest.cc b/chrome/browser/chromeos/policy/device_status_collector_browsertest.cc index bbaaef7..4d3014d 100644 --- a/chrome/browser/chromeos/policy/device_status_collector_browsertest.cc +++ b/chrome/browser/chromeos/policy/device_status_collector_browsertest.cc
@@ -18,7 +18,6 @@ #include "base/logging.h" #include "base/macros.h" #include "base/memory/ptr_util.h" -#include "base/message_loop/message_loop.h" #include "base/run_loop.h" #include "base/sys_info.h" #include "base/test/scoped_path_override.h" @@ -57,7 +56,7 @@ #include "components/prefs/pref_service.h" #include "components/prefs/testing_pref_service.h" #include "content/public/browser/browser_thread.h" -#include "content/public/test/test_browser_thread.h" +#include "content/public/test/test_browser_thread_bundle.h" #include "content/public/test/test_utils.h" #include "storage/browser/fileapi/external_mount_points.h" #include "storage/browser/fileapi/mount_points.h" @@ -273,10 +272,7 @@ class DeviceStatusCollectorTest : public testing::Test { public: DeviceStatusCollectorTest() - : ui_thread_(content::BrowserThread::UI, &message_loop_), - file_thread_(content::BrowserThread::FILE, &message_loop_), - io_thread_(content::BrowserThread::IO, &message_loop_), - install_attributes_( + : install_attributes_( chromeos::ScopedStubInstallAttributes::CreateEnterprise( "managed.com", "device_id")), @@ -490,10 +486,7 @@ // Since this is a unit test running in browser_tests we must do additional // unit test setup and make a TestingBrowserProcess. Must be first member. TestingBrowserProcessInitializer initializer_; - base::MessageLoopForUI message_loop_; - content::TestBrowserThread ui_thread_; - content::TestBrowserThread file_thread_; - content::TestBrowserThread io_thread_; + content::TestBrowserThreadBundle test_browser_thread_bundle_; chromeos::ScopedStubInstallAttributes install_attributes_; chromeos::system::ScopedFakeStatisticsProvider fake_statistics_provider_;
diff --git a/chrome/browser/chromeos/profiles/profile_helper.cc b/chrome/browser/chromeos/profiles/profile_helper.cc index bb90818..a319f9b 100644 --- a/chrome/browser/chromeos/profiles/profile_helper.cc +++ b/chrome/browser/chromeos/profiles/profile_helper.cc
@@ -12,6 +12,7 @@ #include "chrome/browser/browsing_data/browsing_data_helper.h" #include "chrome/browser/browsing_data/browsing_data_remover.h" #include "chrome/browser/browsing_data/browsing_data_remover_factory.h" +#include "chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.h" #include "chrome/browser/chromeos/base/file_flusher.h" #include "chrome/browser/chromeos/login/helper.h" #include "chrome/browser/chromeos/login/signin/oauth2_login_manager_factory.h" @@ -263,8 +264,9 @@ BrowsingDataRemoverFactory::GetForBrowserContext(GetSigninProfile()); browsing_data_remover_->AddObserver(this); browsing_data_remover_->RemoveAndReply( - base::Time(), base::Time::Max(), BrowsingDataRemover::REMOVE_SITE_DATA, - BrowsingDataHelper::ALL, this); + base::Time(), base::Time::Max(), + ChromeBrowsingDataRemoverDelegate::DATA_TYPE_SITE_DATA, + ChromeBrowsingDataRemoverDelegate::ALL_ORIGIN_TYPES, this); } else { on_clear_profile_stage_finished_.Run(); }
diff --git a/chrome/browser/component_updater/component_patcher_operation_out_of_process.cc b/chrome/browser/component_updater/component_patcher_operation_out_of_process.cc index 5f3b42b0..9ba253d 100644 --- a/chrome/browser/component_updater/component_patcher_operation_out_of_process.cc +++ b/chrome/browser/component_updater/component_patcher_operation_out_of_process.cc
@@ -61,12 +61,9 @@ DCHECK_CURRENTLY_ON(content::BrowserThread::IO); DCHECK(!utility_process_mojo_client_); - const base::string16 utility_process_name = - l10n_util::GetStringUTF16(IDS_UTILITY_PROCESS_COMPONENT_PATCHER_NAME); - - utility_process_mojo_client_.reset( - new content::UtilityProcessMojoClient<chrome::mojom::FilePatcher>( - utility_process_name)); + utility_process_mojo_client_ = base::MakeUnique< + content::UtilityProcessMojoClient<chrome::mojom::FilePatcher>>( + l10n_util::GetStringUTF16(IDS_UTILITY_PROCESS_COMPONENT_PATCHER_NAME)); utility_process_mojo_client_->set_error_callback( base::Bind(&ChromeOutOfProcessPatcher::PatchDone, this, -1));
diff --git a/chrome/browser/component_updater/swiftshader_component_installer.cc b/chrome/browser/component_updater/swiftshader_component_installer.cc deleted file mode 100644 index 544756e..0000000 --- a/chrome/browser/component_updater/swiftshader_component_installer.cc +++ /dev/null
@@ -1,284 +0,0 @@ -// Copyright (c) 2012 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 "chrome/browser/component_updater/swiftshader_component_installer.h" - -#include <stdint.h> -#include <string> -#include <vector> - -#include "base/base_paths.h" -#include "base/bind.h" -#include "base/bind_helpers.h" -#include "base/files/file_enumerator.h" -#include "base/files/file_path.h" -#include "base/files/file_util.h" -#include "base/logging.h" -#include "base/path_service.h" -#include "base/strings/string_util.h" -#include "base/values.h" -#include "build/build_config.h" -#include "components/component_updater/component_updater_paths.h" -#include "components/component_updater/component_updater_service.h" -#include "components/update_client/update_client.h" -#include "components/update_client/utils.h" -#include "content/public/browser/browser_thread.h" -#include "content/public/browser/gpu_data_manager.h" -#include "content/public/browser/gpu_data_manager_observer.h" -#include "gpu/config/gpu_feature_type.h" -#include "ui/gl/gl_features.h" - -using content::BrowserThread; -using content::GpuDataManager; - -namespace component_updater { - -namespace { - -// CRX hash. The extension id is: nhfgdggnnopgbfdlpeoalgcjdgfafocg. -const uint8_t kSha2Hash[] = {0xd7, 0x56, 0x36, 0x6d, 0xde, 0xf6, 0x15, 0x3b, - 0xf4, 0xe0, 0xb6, 0x29, 0x36, 0x50, 0x5e, 0x26, - 0xbd, 0x77, 0x8b, 0x8e, 0x35, 0xc2, 0x7e, 0x43, - 0x52, 0x47, 0x62, 0xed, 0x12, 0xca, 0xcc, 0x6a}; - -// File name of the internal SwiftShader plugin on different platforms. -const base::FilePath::CharType kSwiftShaderEglName[] = - FILE_PATH_LITERAL("libegl.dll"); -const base::FilePath::CharType kSwiftShaderGlesName[] = - FILE_PATH_LITERAL("libglesv2.dll"); - -const char kSwiftShaderManifestName[] = "SwiftShader"; - -// If we don't have a SwiftShader component, this is the version we claim. -const char kNullVersion[] = "0.0.0.0"; - -// The base directory on windows looks like: -// <profile>\AppData\Local\Google\Chrome\User Data\SwiftShader\. -base::FilePath GetSwiftShaderBaseDirectory() { - base::FilePath result; - if (!PathService::Get(DIR_SWIFT_SHADER, &result)) - NOTREACHED() << "Couldn't get SwiftShader directory."; - return result; -} - -// SwiftShader has version encoded in the path itself -// so we need to enumerate the directories to find the full path. -// On success it returns something like: -// <profile>\AppData\Local\Google\Chrome\User Data\SwiftShader\10.3.44.555\. -bool GetLatestSwiftShaderDirectory(base::FilePath* result, - base::Version* latest, - std::vector<base::FilePath>* older_dirs) { - base::FilePath base_dir = GetSwiftShaderBaseDirectory(); - bool found = false; - base::FileEnumerator file_enumerator( - base_dir, false, base::FileEnumerator::DIRECTORIES); - for (base::FilePath path = file_enumerator.Next(); !path.value().empty(); - path = file_enumerator.Next()) { - base::Version version(path.BaseName().MaybeAsASCII()); - if (!version.IsValid()) - continue; - if (version.CompareTo(*latest) > 0 && - base::PathExists(path.Append(kSwiftShaderEglName)) && - base::PathExists(path.Append(kSwiftShaderGlesName))) { - if (found && older_dirs) - older_dirs->push_back(*result); - *latest = version; - *result = path; - found = true; - } else { - if (older_dirs) - older_dirs->push_back(path); - } - } - return found; -} - -void RegisterSwiftShaderWithChrome(const base::FilePath& path) { - DCHECK_CURRENTLY_ON(BrowserThread::UI); - GpuDataManager::GetInstance()->RegisterSwiftShaderPath(path); -} - -class SwiftShaderComponentInstaller : public update_client::CrxInstaller { - public: - explicit SwiftShaderComponentInstaller(const base::Version& version); - - // ComponentInstaller implementation: - void OnUpdateError(int error) override; - - update_client::CrxInstaller::Result Install( - const base::DictionaryValue& manifest, - const base::FilePath& unpack_path) override; - - bool GetInstalledFile(const std::string& file, - base::FilePath* installed_file) override; - - bool Uninstall() override; - - private: - ~SwiftShaderComponentInstaller() override {} - - bool DoInstall(const base::DictionaryValue& manifest, - const base::FilePath& unpack_path); - - base::Version current_version_; -}; - -SwiftShaderComponentInstaller::SwiftShaderComponentInstaller( - const base::Version& version) - : current_version_(version) { - DCHECK(version.IsValid()); -} - -void SwiftShaderComponentInstaller::OnUpdateError(int error) { - NOTREACHED() << "SwiftShader update error: " << error; -} - -update_client::CrxInstaller::Result SwiftShaderComponentInstaller::Install( - const base::DictionaryValue& manifest, - const base::FilePath& unpack_path) { - return update_client::InstallFunctionWrapper(base::Bind( - &SwiftShaderComponentInstaller::DoInstall, base::Unretained(this), - base::ConstRef(manifest), base::ConstRef(unpack_path))); -} - -bool SwiftShaderComponentInstaller::DoInstall( - const base::DictionaryValue& manifest, - const base::FilePath& unpack_path) { - std::string name; - manifest.GetStringASCII("name", &name); - if (name != kSwiftShaderManifestName) - return false; - std::string proposed_version; - manifest.GetStringASCII("version", &proposed_version); - base::Version version(proposed_version.c_str()); - if (!version.IsValid()) - return false; - if (current_version_.CompareTo(version) >= 0) - return false; - if (!base::PathExists(unpack_path.Append(kSwiftShaderEglName)) || - !base::PathExists(unpack_path.Append(kSwiftShaderGlesName))) - return false; - // Passed the basic tests. Time to install it. - base::FilePath path = - GetSwiftShaderBaseDirectory().AppendASCII(version.GetString()); - if (base::PathExists(path)) - return false; - if (!base::Move(unpack_path, path)) - return false; - // Installation is done. Now tell the rest of chrome. - current_version_ = version; - BrowserThread::PostTask(BrowserThread::UI, - FROM_HERE, - base::Bind(&RegisterSwiftShaderWithChrome, path)); - return true; -} - -bool SwiftShaderComponentInstaller::GetInstalledFile( - const std::string& file, - base::FilePath* installed_file) { - return false; -} - -bool SwiftShaderComponentInstaller::Uninstall() { - return false; -} - -void FinishSwiftShaderUpdateRegistration(ComponentUpdateService* cus, - const base::Version& version) { - DCHECK_CURRENTLY_ON(BrowserThread::UI); - - update_client::CrxComponent swiftshader; - swiftshader.name = "Swift Shader"; - swiftshader.installer = new SwiftShaderComponentInstaller(version); - swiftshader.version = version; - swiftshader.pk_hash.assign(kSha2Hash, &kSha2Hash[sizeof(kSha2Hash)]); - swiftshader.supports_group_policy_enable_component_updates = true; - swiftshader.requires_network_encryption = false; - if (!cus->RegisterComponent(swiftshader)) { - NOTREACHED() << "SwiftShader component registration fail"; - } -} - -class UpdateChecker : public content::GpuDataManagerObserver { - public: - explicit UpdateChecker(ComponentUpdateService* cus); - - void OnGpuInfoUpdate() override; - - private: - ComponentUpdateService* cus_; -}; - -UpdateChecker::UpdateChecker(ComponentUpdateService* cus) : cus_(cus) { -} - -void UpdateChecker::OnGpuInfoUpdate() { - GpuDataManager* gpu_data_manager = GpuDataManager::GetInstance(); - - if (!gpu_data_manager->GpuAccessAllowed(NULL) || - gpu_data_manager->IsFeatureBlacklisted( - gpu::GPU_FEATURE_TYPE_ACCELERATED_WEBGL) || - gpu_data_manager->ShouldUseSwiftShader()) { - gpu_data_manager->RemoveObserver(this); - DCHECK_CURRENTLY_ON(BrowserThread::FILE); - base::FilePath path = GetSwiftShaderBaseDirectory(); - - base::Version version(kNullVersion); - GetLatestSwiftShaderDirectory(&path, &version, NULL); - - BrowserThread::PostTask( - BrowserThread::UI, - FROM_HERE, - base::Bind(&FinishSwiftShaderUpdateRegistration, cus_, version)); - } -} - -#if BUILDFLAG(ENABLE_SWIFTSHADER) && defined(ARCH_CPU_X86) - -// Check if there already is a version of swiftshader installed, -// and if so register it. -void RegisterSwiftShaderPath(ComponentUpdateService* cus) { - DCHECK_CURRENTLY_ON(BrowserThread::FILE); - base::FilePath path = GetSwiftShaderBaseDirectory(); - if (!base::PathExists(path)) { - if (!base::CreateDirectory(path)) { - NOTREACHED() << "Could not create SwiftShader directory."; - return; - } - } - - base::Version version(kNullVersion); - std::vector<base::FilePath> older_dirs; - if (GetLatestSwiftShaderDirectory(&path, &version, &older_dirs)) - BrowserThread::PostTask(BrowserThread::UI, - FROM_HERE, - base::Bind(&RegisterSwiftShaderWithChrome, path)); - - UpdateChecker* update_checker = new UpdateChecker(cus); - GpuDataManager::GetInstance()->AddObserver(update_checker); - update_checker->OnGpuInfoUpdate(); - // We leak update_checker here, because it has to stick around for the life - // of the GpuDataManager. - - // Remove older versions of SwiftShader. - for (std::vector<base::FilePath>::iterator iter = older_dirs.begin(); - iter != older_dirs.end(); - ++iter) { - base::DeleteFile(*iter, true); - } -} - -#endif // ENABLE_SWIFTSHADER - -} // namespace - -void RegisterSwiftShaderComponent(ComponentUpdateService* cus) { -#if BUILDFLAG(ENABLE_SWIFTSHADER) && defined(ARCH_CPU_X86) - BrowserThread::PostTask(BrowserThread::FILE, - FROM_HERE, - base::Bind(&RegisterSwiftShaderPath, cus)); -#endif -} - -} // namespace component_updater
diff --git a/chrome/browser/component_updater/swiftshader_component_installer.h b/chrome/browser/component_updater/swiftshader_component_installer.h deleted file mode 100644 index 945e157..0000000 --- a/chrome/browser/component_updater/swiftshader_component_installer.h +++ /dev/null
@@ -1,19 +0,0 @@ -// Copyright (c) 2011 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 CHROME_BROWSER_COMPONENT_UPDATER_SWIFTSHADER_COMPONENT_INSTALLER_H_ -#define CHROME_BROWSER_COMPONENT_UPDATER_SWIFTSHADER_COMPONENT_INSTALLER_H_ - -namespace component_updater { - -class ComponentUpdateService; - -// Our job is to 1) find what version of SwiftShader is installed (if any) -// and 2) register with the gpu data manager and then register with the -// component updater if the current gpu is blacklisted. -void RegisterSwiftShaderComponent(ComponentUpdateService* cus); - -} // namespace component_updater - -#endif // CHROME_BROWSER_COMPONENT_UPDATER_SWIFTSHADER_COMPONENT_INSTALLER_H_
diff --git a/chrome/browser/extensions/api/autofill_private/autofill_private_api.cc b/chrome/browser/extensions/api/autofill_private/autofill_private_api.cc index 72c7af1..0444ddc 100644 --- a/chrome/browser/extensions/api/autofill_private/autofill_private_api.cc +++ b/chrome/browser/extensions/api/autofill_private/autofill_private_api.cc
@@ -31,6 +31,9 @@ static const char kSettingsOrigin[] = "Chrome settings"; static const char kErrorDataUnavailable[] = "Autofill data unavailable."; +// TODO(mad): This does basically the same thing as +// components/autofill/core/browser/autofill_address_util.cc, we +// should refactor to use a single code path for this. // Fills |components| with the address UI components that should be used to // input an address for |country_code| when UI BCP 47 language code is // |ui_language_code|.
diff --git a/chrome/browser/extensions/api/browsing_data/browsing_data_api.cc b/chrome/browser/extensions/api/browsing_data/browsing_data_api.cc index 36610d5..00c27fc 100644 --- a/chrome/browser/extensions/api/browsing_data/browsing_data_api.cc +++ b/chrome/browser/extensions/api/browsing_data/browsing_data_api.cc
@@ -15,6 +15,7 @@ #include "chrome/browser/browsing_data/browsing_data_helper.h" #include "chrome/browser/browsing_data/browsing_data_remover.h" #include "chrome/browser/browsing_data/browsing_data_remover_factory.h" +#include "chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.h" #include "chrome/browser/plugins/plugin_data_remover_helper.h" #include "chrome/browser/plugins/plugin_prefs.h" #include "chrome/browser/profiles/profile.h" @@ -71,38 +72,38 @@ namespace { int MaskForKey(const char* key) { if (strcmp(key, extension_browsing_data_api_constants::kAppCacheKey) == 0) - return BrowsingDataRemover::REMOVE_APPCACHE; + return BrowsingDataRemover::DATA_TYPE_APP_CACHE; if (strcmp(key, extension_browsing_data_api_constants::kCacheKey) == 0) - return BrowsingDataRemover::REMOVE_CACHE; + return BrowsingDataRemover::DATA_TYPE_CACHE; if (strcmp(key, extension_browsing_data_api_constants::kCookiesKey) == 0) { - return BrowsingDataRemover::REMOVE_COOKIES; + return BrowsingDataRemover::DATA_TYPE_COOKIES; } if (strcmp(key, extension_browsing_data_api_constants::kDownloadsKey) == 0) - return BrowsingDataRemover::REMOVE_DOWNLOADS; + return BrowsingDataRemover::DATA_TYPE_DOWNLOADS; if (strcmp(key, extension_browsing_data_api_constants::kFileSystemsKey) == 0) - return BrowsingDataRemover::REMOVE_FILE_SYSTEMS; + return BrowsingDataRemover::DATA_TYPE_FILE_SYSTEMS; if (strcmp(key, extension_browsing_data_api_constants::kFormDataKey) == 0) - return BrowsingDataRemover::REMOVE_FORM_DATA; + return ChromeBrowsingDataRemoverDelegate::DATA_TYPE_FORM_DATA; if (strcmp(key, extension_browsing_data_api_constants::kHistoryKey) == 0) - return BrowsingDataRemover::REMOVE_HISTORY; + return ChromeBrowsingDataRemoverDelegate::DATA_TYPE_HISTORY; if (strcmp(key, extension_browsing_data_api_constants::kIndexedDBKey) == 0) - return BrowsingDataRemover::REMOVE_INDEXEDDB; + return BrowsingDataRemover::DATA_TYPE_INDEXED_DB; if (strcmp(key, extension_browsing_data_api_constants::kLocalStorageKey) == 0) - return BrowsingDataRemover::REMOVE_LOCAL_STORAGE; + return BrowsingDataRemover::DATA_TYPE_LOCAL_STORAGE; if (strcmp(key, extension_browsing_data_api_constants::kChannelIDsKey) == 0) - return BrowsingDataRemover::REMOVE_CHANNEL_IDS; + return BrowsingDataRemover::DATA_TYPE_CHANNEL_IDS; if (strcmp(key, extension_browsing_data_api_constants::kPasswordsKey) == 0) - return BrowsingDataRemover::REMOVE_PASSWORDS; + return ChromeBrowsingDataRemoverDelegate::DATA_TYPE_PASSWORDS; if (strcmp(key, extension_browsing_data_api_constants::kPluginDataKey) == 0) - return BrowsingDataRemover::REMOVE_PLUGIN_DATA; + return ChromeBrowsingDataRemoverDelegate::DATA_TYPE_PLUGIN_DATA; if (strcmp(key, extension_browsing_data_api_constants::kServiceWorkersKey) == 0) - return BrowsingDataRemover::REMOVE_SERVICE_WORKERS; + return BrowsingDataRemover::DATA_TYPE_SERVICE_WORKERS; if (strcmp(key, extension_browsing_data_api_constants::kCacheStorageKey) == 0) - return BrowsingDataRemover::REMOVE_CACHE_STORAGE; + return BrowsingDataRemover::DATA_TYPE_CACHE_STORAGE; if (strcmp(key, extension_browsing_data_api_constants::kWebSQLKey) == 0) - return BrowsingDataRemover::REMOVE_WEBSQL; + return BrowsingDataRemover::DATA_TYPE_WEB_SQL; return 0; } @@ -112,8 +113,8 @@ bool IsRemovalPermitted(int removal_mask, PrefService* prefs) { // Enterprise policy or user preference might prohibit deleting browser or // download history. - if ((removal_mask & BrowsingDataRemover::REMOVE_HISTORY) || - (removal_mask & BrowsingDataRemover::REMOVE_DOWNLOADS)) { + if ((removal_mask & ChromeBrowsingDataRemoverDelegate::DATA_TYPE_HISTORY) || + (removal_mask & BrowsingDataRemover::DATA_TYPE_DOWNLOADS)) { return prefs->GetBoolean(prefs::kAllowDeletingBrowserHistory); } return true; @@ -278,7 +279,8 @@ return false; } - if (removal_mask_ & BrowsingDataRemover::REMOVE_PLUGIN_DATA) { + if (removal_mask_ & + ChromeBrowsingDataRemoverDelegate::DATA_TYPE_PLUGIN_DATA) { // If we're being asked to remove plugin data, check whether it's actually // supported. BrowserThread::PostTask( @@ -301,7 +303,7 @@ void BrowsingDataRemoverFunction::CheckRemovingPluginDataSupported( scoped_refptr<PluginPrefs> plugin_prefs) { if (!PluginDataRemoverHelper::IsSupported(plugin_prefs.get())) - removal_mask_ &= ~BrowsingDataRemover::REMOVE_PLUGIN_DATA; + removal_mask_ &= ~ChromeBrowsingDataRemoverDelegate::DATA_TYPE_PLUGIN_DATA; BrowserThread::PostTask( BrowserThread::UI, FROM_HERE, @@ -329,7 +331,7 @@ int* origin_type_mask) { // Parse the |options| dictionary to generate the origin set mask. Default to // UNPROTECTED_WEB if the developer doesn't specify anything. - *origin_type_mask = BrowsingDataHelper::UNPROTECTED_WEB; + *origin_type_mask = BrowsingDataRemover::ORIGIN_TYPE_UNPROTECTED_WEB; const base::DictionaryValue* d = NULL; if (options.HasKey(extension_browsing_data_api_constants::kOriginTypesKey)) { @@ -349,7 +351,8 @@ &value)) { return false; } - *origin_type_mask |= value ? BrowsingDataHelper::UNPROTECTED_WEB : 0; + *origin_type_mask |= + value ? BrowsingDataRemover::ORIGIN_TYPE_UNPROTECTED_WEB : 0; } // Protected web. @@ -359,7 +362,8 @@ &value)) { return false; } - *origin_type_mask |= value ? BrowsingDataHelper::PROTECTED_WEB : 0; + *origin_type_mask |= + value ? BrowsingDataRemover::ORIGIN_TYPE_PROTECTED_WEB : 0; } // Extensions. @@ -368,7 +372,8 @@ &value)) { return false; } - *origin_type_mask |= value ? BrowsingDataHelper::EXTENSION : 0; + *origin_type_mask |= + value ? ChromeBrowsingDataRemoverDelegate::ORIGIN_TYPE_EXTENSION : 0; } } @@ -398,73 +403,73 @@ } bool BrowsingDataRemoveAppcacheFunction::GetRemovalMask(int* removal_mask) { - *removal_mask = BrowsingDataRemover::REMOVE_APPCACHE; + *removal_mask = BrowsingDataRemover::DATA_TYPE_APP_CACHE; return true; } bool BrowsingDataRemoveCacheFunction::GetRemovalMask(int* removal_mask) { - *removal_mask = BrowsingDataRemover::REMOVE_CACHE; + *removal_mask = BrowsingDataRemover::DATA_TYPE_CACHE; return true; } bool BrowsingDataRemoveCookiesFunction::GetRemovalMask(int* removal_mask) { - *removal_mask = BrowsingDataRemover::REMOVE_COOKIES | - BrowsingDataRemover::REMOVE_CHANNEL_IDS; + *removal_mask = BrowsingDataRemover::DATA_TYPE_COOKIES | + BrowsingDataRemover::DATA_TYPE_CHANNEL_IDS; return true; } bool BrowsingDataRemoveDownloadsFunction::GetRemovalMask(int* removal_mask) { - *removal_mask = BrowsingDataRemover::REMOVE_DOWNLOADS; + *removal_mask = BrowsingDataRemover::DATA_TYPE_DOWNLOADS; return true; } bool BrowsingDataRemoveFileSystemsFunction::GetRemovalMask(int* removal_mask) { - *removal_mask = BrowsingDataRemover::REMOVE_FILE_SYSTEMS; + *removal_mask = BrowsingDataRemover::DATA_TYPE_FILE_SYSTEMS; return true; } bool BrowsingDataRemoveFormDataFunction::GetRemovalMask(int* removal_mask) { - *removal_mask = BrowsingDataRemover::REMOVE_FORM_DATA; + *removal_mask = ChromeBrowsingDataRemoverDelegate::DATA_TYPE_FORM_DATA; return true; } bool BrowsingDataRemoveHistoryFunction::GetRemovalMask(int* removal_mask) { - *removal_mask = BrowsingDataRemover::REMOVE_HISTORY; + *removal_mask = ChromeBrowsingDataRemoverDelegate::DATA_TYPE_HISTORY; return true; } bool BrowsingDataRemoveIndexedDBFunction::GetRemovalMask(int* removal_mask) { - *removal_mask = BrowsingDataRemover::REMOVE_INDEXEDDB; + *removal_mask = BrowsingDataRemover::DATA_TYPE_INDEXED_DB; return true; } bool BrowsingDataRemoveLocalStorageFunction::GetRemovalMask(int* removal_mask) { - *removal_mask = BrowsingDataRemover::REMOVE_LOCAL_STORAGE; + *removal_mask = BrowsingDataRemover::DATA_TYPE_LOCAL_STORAGE; return true; } bool BrowsingDataRemovePluginDataFunction::GetRemovalMask(int* removal_mask) { - *removal_mask = BrowsingDataRemover::REMOVE_PLUGIN_DATA; + *removal_mask = ChromeBrowsingDataRemoverDelegate::DATA_TYPE_PLUGIN_DATA; return true; } bool BrowsingDataRemovePasswordsFunction::GetRemovalMask(int* removal_mask) { - *removal_mask = BrowsingDataRemover::REMOVE_PASSWORDS; + *removal_mask = ChromeBrowsingDataRemoverDelegate::DATA_TYPE_PASSWORDS; return true; } bool BrowsingDataRemoveServiceWorkersFunction::GetRemovalMask( int* removal_mask) { - *removal_mask = BrowsingDataRemover::REMOVE_SERVICE_WORKERS; + *removal_mask = BrowsingDataRemover::DATA_TYPE_SERVICE_WORKERS; return true; } bool BrowsingDataRemoveCacheStorageFunction::GetRemovalMask(int* removal_mask) { - *removal_mask = BrowsingDataRemover::REMOVE_CACHE_STORAGE; + *removal_mask = BrowsingDataRemover::DATA_TYPE_CACHE_STORAGE; return true; } bool BrowsingDataRemoveWebSQLFunction::GetRemovalMask(int* removal_mask) { - *removal_mask = BrowsingDataRemover::REMOVE_WEBSQL; + *removal_mask = BrowsingDataRemover::DATA_TYPE_WEB_SQL; return true; }
diff --git a/chrome/browser/extensions/api/browsing_data/browsing_data_test.cc b/chrome/browser/extensions/api/browsing_data/browsing_data_test.cc index 9a90887..e4843473 100644 --- a/chrome/browser/extensions/api/browsing_data/browsing_data_test.cc +++ b/chrome/browser/extensions/api/browsing_data/browsing_data_test.cc
@@ -13,6 +13,7 @@ #include "chrome/browser/browsing_data/browsing_data_helper.h" #include "chrome/browser/browsing_data/browsing_data_remover.h" #include "chrome/browser/browsing_data/browsing_data_remover_factory.h" +#include "chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.h" #include "chrome/browser/extensions/api/browsing_data/browsing_data_api.h" #include "chrome/browser/extensions/extension_function_test_utils.h" #include "chrome/browser/profiles/profile.h" @@ -29,9 +30,9 @@ namespace { enum OriginTypeMask { - UNPROTECTED_WEB = BrowsingDataHelper::UNPROTECTED_WEB, - PROTECTED_WEB = BrowsingDataHelper::PROTECTED_WEB, - EXTENSION = BrowsingDataHelper::EXTENSION + UNPROTECTED_WEB = BrowsingDataRemover::ORIGIN_TYPE_UNPROTECTED_WEB, + PROTECTED_WEB = BrowsingDataRemover::ORIGIN_TYPE_PROTECTED_WEB, + EXTENSION = ChromeBrowsingDataRemoverDelegate::ORIGIN_TYPE_EXTENSION }; const char kRemoveEverythingArguments[] = @@ -153,23 +154,34 @@ int expected_origin_type_mask, int expected_removal_mask) { PrefService* prefs = browser()->profile()->GetPrefs(); - prefs->SetBoolean(browsing_data::prefs::kDeleteCache, - !!(data_type_flags & BrowsingDataRemover::REMOVE_CACHE)); - prefs->SetBoolean(browsing_data::prefs::kDeleteCookies, - !!(data_type_flags & BrowsingDataRemover::REMOVE_COOKIES)); + prefs->SetBoolean( + browsing_data::prefs::kDeleteCache, + !!(data_type_flags & BrowsingDataRemover::DATA_TYPE_CACHE)); + prefs->SetBoolean( + browsing_data::prefs::kDeleteCookies, + !!(data_type_flags & BrowsingDataRemover::DATA_TYPE_COOKIES)); prefs->SetBoolean(browsing_data::prefs::kDeleteBrowsingHistory, - !!(data_type_flags & BrowsingDataRemover::REMOVE_HISTORY)); - prefs->SetBoolean(browsing_data::prefs::kDeleteFormData, - !!(data_type_flags & BrowsingDataRemover::REMOVE_FORM_DATA)); - prefs->SetBoolean(browsing_data::prefs::kDeleteDownloadHistory, - !!(data_type_flags & BrowsingDataRemover::REMOVE_DOWNLOADS)); - prefs->SetBoolean(browsing_data::prefs::kDeleteHostedAppsData, + !!(data_type_flags & + ChromeBrowsingDataRemoverDelegate::DATA_TYPE_HISTORY)); + prefs->SetBoolean( + browsing_data::prefs::kDeleteFormData, !!(data_type_flags & - BrowsingDataRemover::REMOVE_HOSTED_APP_DATA_TESTONLY)); - prefs->SetBoolean(browsing_data::prefs::kDeletePasswords, - !!(data_type_flags & BrowsingDataRemover::REMOVE_PASSWORDS)); - prefs->SetBoolean(prefs::kClearPluginLSODataEnabled, - !!(data_type_flags & BrowsingDataRemover::REMOVE_PLUGIN_DATA)); + ChromeBrowsingDataRemoverDelegate::DATA_TYPE_FORM_DATA)); + prefs->SetBoolean( + browsing_data::prefs::kDeleteDownloadHistory, + !!(data_type_flags & BrowsingDataRemover::DATA_TYPE_DOWNLOADS)); + prefs->SetBoolean( + browsing_data::prefs::kDeleteHostedAppsData, + !!(data_type_flags & ChromeBrowsingDataRemoverDelegate:: + DATA_TYPE_HOSTED_APP_DATA_TEST_ONLY)); + prefs->SetBoolean( + browsing_data::prefs::kDeletePasswords, + !!(data_type_flags & + ChromeBrowsingDataRemoverDelegate::DATA_TYPE_PASSWORDS)); + prefs->SetBoolean( + prefs::kClearPluginLSODataEnabled, + !!(data_type_flags & + ChromeBrowsingDataRemoverDelegate::DATA_TYPE_PLUGIN_DATA)); scoped_refptr<BrowsingDataSettingsFunction> function = new BrowsingDataSettingsFunction(); @@ -195,34 +207,35 @@ EXPECT_TRUE(result->GetDictionary("dataToRemove", &data_to_remove)); int removal_mask = GetAsMask(data_to_remove, "appcache", - BrowsingDataRemover::REMOVE_APPCACHE) | - GetAsMask(data_to_remove, "cache", BrowsingDataRemover::REMOVE_CACHE) | + BrowsingDataRemover::DATA_TYPE_APP_CACHE) | + GetAsMask(data_to_remove, "cache", + BrowsingDataRemover::DATA_TYPE_CACHE) | GetAsMask(data_to_remove, "cookies", - BrowsingDataRemover::REMOVE_COOKIES) | + BrowsingDataRemover::DATA_TYPE_COOKIES) | GetAsMask(data_to_remove, "downloads", - BrowsingDataRemover::REMOVE_DOWNLOADS) | + BrowsingDataRemover::DATA_TYPE_DOWNLOADS) | GetAsMask(data_to_remove, "fileSystems", - BrowsingDataRemover::REMOVE_FILE_SYSTEMS) | + BrowsingDataRemover::DATA_TYPE_FILE_SYSTEMS) | GetAsMask(data_to_remove, "formData", - BrowsingDataRemover::REMOVE_FORM_DATA) | + ChromeBrowsingDataRemoverDelegate::DATA_TYPE_FORM_DATA) | GetAsMask(data_to_remove, "history", - BrowsingDataRemover::REMOVE_HISTORY) | + ChromeBrowsingDataRemoverDelegate::DATA_TYPE_HISTORY) | GetAsMask(data_to_remove, "indexedDB", - BrowsingDataRemover::REMOVE_INDEXEDDB) | + BrowsingDataRemover::DATA_TYPE_INDEXED_DB) | GetAsMask(data_to_remove, "localStorage", - BrowsingDataRemover::REMOVE_LOCAL_STORAGE) | + BrowsingDataRemover::DATA_TYPE_LOCAL_STORAGE) | GetAsMask(data_to_remove, "pluginData", - BrowsingDataRemover::REMOVE_PLUGIN_DATA) | + ChromeBrowsingDataRemoverDelegate::DATA_TYPE_PLUGIN_DATA) | GetAsMask(data_to_remove, "passwords", - BrowsingDataRemover::REMOVE_PASSWORDS) | + ChromeBrowsingDataRemoverDelegate::DATA_TYPE_PASSWORDS) | GetAsMask(data_to_remove, "serviceWorkers", - BrowsingDataRemover::REMOVE_SERVICE_WORKERS) | + BrowsingDataRemover::DATA_TYPE_SERVICE_WORKERS) | GetAsMask(data_to_remove, "cacheStorage", - BrowsingDataRemover::REMOVE_CACHE_STORAGE) | + BrowsingDataRemover::DATA_TYPE_CACHE_STORAGE) | GetAsMask(data_to_remove, "webSQL", - BrowsingDataRemover::REMOVE_WEBSQL) | + BrowsingDataRemover::DATA_TYPE_WEB_SQL) | GetAsMask(data_to_remove, "serverBoundCertificates", - BrowsingDataRemover::REMOVE_CHANNEL_IDS); + BrowsingDataRemover::DATA_TYPE_CHANNEL_IDS); EXPECT_EQ(expected_removal_mask, removal_mask); } @@ -291,23 +304,23 @@ EXPECT_EQ(base::Time::FromDoubleT(1.0), GetBeginTime()); EXPECT_EQ( - (BrowsingDataRemover::REMOVE_SITE_DATA | - BrowsingDataRemover::REMOVE_CACHE | - BrowsingDataRemover::REMOVE_DOWNLOADS | - BrowsingDataRemover::REMOVE_FORM_DATA | - BrowsingDataRemover::REMOVE_HISTORY | - BrowsingDataRemover::REMOVE_PASSWORDS) & + (ChromeBrowsingDataRemoverDelegate::DATA_TYPE_SITE_DATA | + BrowsingDataRemover::DATA_TYPE_CACHE | + BrowsingDataRemover::DATA_TYPE_DOWNLOADS | + ChromeBrowsingDataRemoverDelegate::DATA_TYPE_FORM_DATA | + ChromeBrowsingDataRemoverDelegate::DATA_TYPE_HISTORY | + ChromeBrowsingDataRemoverDelegate::DATA_TYPE_PASSWORDS) & // TODO(benwells): implement clearing of site usage data via the // browsing data API. https://crbug.com/500801. - ~BrowsingDataRemover::REMOVE_SITE_USAGE_DATA & + ~ChromeBrowsingDataRemoverDelegate::DATA_TYPE_SITE_USAGE_DATA & // TODO(dmurph): implement clearing of durable storage permission // via the browsing data API. https://crbug.com/500801. - ~BrowsingDataRemover::REMOVE_DURABLE_PERMISSION & + ~ChromeBrowsingDataRemoverDelegate::DATA_TYPE_DURABLE_PERMISSION & // We can't remove plugin data inside a test profile. - ~BrowsingDataRemover::REMOVE_PLUGIN_DATA & + ~ChromeBrowsingDataRemoverDelegate::DATA_TYPE_PLUGIN_DATA & // TODO(ramyasharma): implement clearing of external protocol data // via the browsing data API. https://crbug.com/692850. - ~BrowsingDataRemover::REMOVE_EXTERNAL_PROTOCOL_DATA, + ~ChromeBrowsingDataRemoverDelegate::DATA_TYPE_EXTERNAL_PROTOCOL_DATA, GetRemovalMask()); } @@ -340,45 +353,44 @@ IN_PROC_BROWSER_TEST_F(ExtensionBrowsingDataTest, BrowsingDataRemovalMask) { RunBrowsingDataRemoveWithKeyAndCompareRemovalMask( - "appcache", BrowsingDataRemover::REMOVE_APPCACHE); + "appcache", BrowsingDataRemover::DATA_TYPE_APP_CACHE); RunBrowsingDataRemoveWithKeyAndCompareRemovalMask( - "cache", BrowsingDataRemover::REMOVE_CACHE); + "cache", BrowsingDataRemover::DATA_TYPE_CACHE); RunBrowsingDataRemoveWithKeyAndCompareRemovalMask( - "cookies", BrowsingDataRemover::REMOVE_COOKIES); + "cookies", BrowsingDataRemover::DATA_TYPE_COOKIES); RunBrowsingDataRemoveWithKeyAndCompareRemovalMask( - "downloads", BrowsingDataRemover::REMOVE_DOWNLOADS); + "downloads", BrowsingDataRemover::DATA_TYPE_DOWNLOADS); RunBrowsingDataRemoveWithKeyAndCompareRemovalMask( - "fileSystems", BrowsingDataRemover::REMOVE_FILE_SYSTEMS); + "fileSystems", BrowsingDataRemover::DATA_TYPE_FILE_SYSTEMS); RunBrowsingDataRemoveWithKeyAndCompareRemovalMask( - "formData", BrowsingDataRemover::REMOVE_FORM_DATA); + "formData", ChromeBrowsingDataRemoverDelegate::DATA_TYPE_FORM_DATA); RunBrowsingDataRemoveWithKeyAndCompareRemovalMask( - "history", BrowsingDataRemover::REMOVE_HISTORY); + "history", ChromeBrowsingDataRemoverDelegate::DATA_TYPE_HISTORY); RunBrowsingDataRemoveWithKeyAndCompareRemovalMask( - "indexedDB", BrowsingDataRemover::REMOVE_INDEXEDDB); + "indexedDB", BrowsingDataRemover::DATA_TYPE_INDEXED_DB); RunBrowsingDataRemoveWithKeyAndCompareRemovalMask( - "localStorage", BrowsingDataRemover::REMOVE_LOCAL_STORAGE); + "localStorage", BrowsingDataRemover::DATA_TYPE_LOCAL_STORAGE); RunBrowsingDataRemoveWithKeyAndCompareRemovalMask( - "serverBoundCertificates", - BrowsingDataRemover::REMOVE_CHANNEL_IDS); + "serverBoundCertificates", BrowsingDataRemover::DATA_TYPE_CHANNEL_IDS); RunBrowsingDataRemoveWithKeyAndCompareRemovalMask( - "passwords", BrowsingDataRemover::REMOVE_PASSWORDS); + "passwords", ChromeBrowsingDataRemoverDelegate::DATA_TYPE_PASSWORDS); // We can't remove plugin data inside a test profile. RunBrowsingDataRemoveWithKeyAndCompareRemovalMask( - "serviceWorkers", BrowsingDataRemover::REMOVE_SERVICE_WORKERS); + "serviceWorkers", BrowsingDataRemover::DATA_TYPE_SERVICE_WORKERS); RunBrowsingDataRemoveWithKeyAndCompareRemovalMask( - "cacheStorage", BrowsingDataRemover::REMOVE_CACHE_STORAGE); + "cacheStorage", BrowsingDataRemover::DATA_TYPE_CACHE_STORAGE); RunBrowsingDataRemoveWithKeyAndCompareRemovalMask( - "webSQL", BrowsingDataRemover::REMOVE_WEBSQL); + "webSQL", BrowsingDataRemover::DATA_TYPE_WEB_SQL); } // Test an arbitrary combination of data types. IN_PROC_BROWSER_TEST_F(ExtensionBrowsingDataTest, BrowsingDataRemovalMaskCombination) { RunBrowsingDataRemoveFunctionAndCompareRemovalMask( - "{\"appcache\": true, \"cookies\": true, \"history\": true}", - BrowsingDataRemover::REMOVE_APPCACHE | - BrowsingDataRemover::REMOVE_COOKIES | - BrowsingDataRemover::REMOVE_HISTORY); + "{\"appcache\": true, \"cookies\": true, \"history\": true}", + BrowsingDataRemover::DATA_TYPE_APP_CACHE | + BrowsingDataRemover::DATA_TYPE_COOKIES | + ChromeBrowsingDataRemoverDelegate::DATA_TYPE_HISTORY); } // Make sure the remove() function accepts the format produced by settings(). @@ -393,9 +405,9 @@ prefs->SetBoolean(browsing_data::prefs::kDeleteHostedAppsData, false); prefs->SetBoolean(browsing_data::prefs::kDeletePasswords, false); prefs->SetBoolean(prefs::kClearPluginLSODataEnabled, false); - int expected_mask = BrowsingDataRemover::REMOVE_CACHE | - BrowsingDataRemover::REMOVE_DOWNLOADS | - BrowsingDataRemover::REMOVE_HISTORY; + int expected_mask = BrowsingDataRemover::DATA_TYPE_CACHE | + BrowsingDataRemover::DATA_TYPE_DOWNLOADS | + ChromeBrowsingDataRemoverDelegate::DATA_TYPE_HISTORY; std::string json; // Scoping for the traces. { @@ -428,31 +440,31 @@ IN_PROC_BROWSER_TEST_F(ExtensionBrowsingDataTest, ShortcutFunctionRemovalMask) { RunAndCompareRemovalMask<BrowsingDataRemoveAppcacheFunction>( - BrowsingDataRemover::REMOVE_APPCACHE); + BrowsingDataRemover::DATA_TYPE_APP_CACHE); RunAndCompareRemovalMask<BrowsingDataRemoveCacheFunction>( - BrowsingDataRemover::REMOVE_CACHE); + BrowsingDataRemover::DATA_TYPE_CACHE); RunAndCompareRemovalMask<BrowsingDataRemoveCookiesFunction>( - BrowsingDataRemover::REMOVE_COOKIES | - BrowsingDataRemover::REMOVE_CHANNEL_IDS); + BrowsingDataRemover::DATA_TYPE_COOKIES | + BrowsingDataRemover::DATA_TYPE_CHANNEL_IDS); RunAndCompareRemovalMask<BrowsingDataRemoveDownloadsFunction>( - BrowsingDataRemover::REMOVE_DOWNLOADS); + BrowsingDataRemover::DATA_TYPE_DOWNLOADS); RunAndCompareRemovalMask<BrowsingDataRemoveFileSystemsFunction>( - BrowsingDataRemover::REMOVE_FILE_SYSTEMS); + BrowsingDataRemover::DATA_TYPE_FILE_SYSTEMS); RunAndCompareRemovalMask<BrowsingDataRemoveFormDataFunction>( - BrowsingDataRemover::REMOVE_FORM_DATA); + ChromeBrowsingDataRemoverDelegate::DATA_TYPE_FORM_DATA); RunAndCompareRemovalMask<BrowsingDataRemoveHistoryFunction>( - BrowsingDataRemover::REMOVE_HISTORY); + ChromeBrowsingDataRemoverDelegate::DATA_TYPE_HISTORY); RunAndCompareRemovalMask<BrowsingDataRemoveIndexedDBFunction>( - BrowsingDataRemover::REMOVE_INDEXEDDB); + BrowsingDataRemover::DATA_TYPE_INDEXED_DB); RunAndCompareRemovalMask<BrowsingDataRemoveLocalStorageFunction>( - BrowsingDataRemover::REMOVE_LOCAL_STORAGE); + BrowsingDataRemover::DATA_TYPE_LOCAL_STORAGE); // We can't remove plugin data inside a test profile. RunAndCompareRemovalMask<BrowsingDataRemovePasswordsFunction>( - BrowsingDataRemover::REMOVE_PASSWORDS); + ChromeBrowsingDataRemoverDelegate::DATA_TYPE_PASSWORDS); RunAndCompareRemovalMask<BrowsingDataRemoveServiceWorkersFunction>( - BrowsingDataRemover::REMOVE_SERVICE_WORKERS); + BrowsingDataRemover::DATA_TYPE_SERVICE_WORKERS); RunAndCompareRemovalMask<BrowsingDataRemoveWebSQLFunction>( - BrowsingDataRemover::REMOVE_WEBSQL); + BrowsingDataRemover::DATA_TYPE_WEB_SQL); } // Test the processing of the 'delete since' preference. @@ -470,60 +482,64 @@ // Test straightforward settings, mapped 1:1 to data types. IN_PROC_BROWSER_TEST_F(ExtensionBrowsingDataTest, SettingsFunctionSimple) { - SetPrefsAndVerifySettings(BrowsingDataRemover::REMOVE_CACHE, 0, - BrowsingDataRemover::REMOVE_CACHE); - SetPrefsAndVerifySettings(BrowsingDataRemover::REMOVE_HISTORY, 0, - BrowsingDataRemover::REMOVE_HISTORY); - SetPrefsAndVerifySettings(BrowsingDataRemover::REMOVE_FORM_DATA, 0, - BrowsingDataRemover::REMOVE_FORM_DATA); - SetPrefsAndVerifySettings(BrowsingDataRemover::REMOVE_DOWNLOADS, 0, - BrowsingDataRemover::REMOVE_DOWNLOADS); - SetPrefsAndVerifySettings(BrowsingDataRemover::REMOVE_PASSWORDS, 0, - BrowsingDataRemover::REMOVE_PASSWORDS); + SetPrefsAndVerifySettings(BrowsingDataRemover::DATA_TYPE_CACHE, 0, + BrowsingDataRemover::DATA_TYPE_CACHE); + SetPrefsAndVerifySettings( + ChromeBrowsingDataRemoverDelegate::DATA_TYPE_HISTORY, 0, + ChromeBrowsingDataRemoverDelegate::DATA_TYPE_HISTORY); + SetPrefsAndVerifySettings( + ChromeBrowsingDataRemoverDelegate::DATA_TYPE_FORM_DATA, 0, + ChromeBrowsingDataRemoverDelegate::DATA_TYPE_FORM_DATA); + SetPrefsAndVerifySettings(BrowsingDataRemover::DATA_TYPE_DOWNLOADS, 0, + BrowsingDataRemover::DATA_TYPE_DOWNLOADS); + SetPrefsAndVerifySettings( + ChromeBrowsingDataRemoverDelegate::DATA_TYPE_PASSWORDS, 0, + ChromeBrowsingDataRemoverDelegate::DATA_TYPE_PASSWORDS); } // Test cookie and app data settings. IN_PROC_BROWSER_TEST_F(ExtensionBrowsingDataTest, SettingsFunctionSiteData) { int site_data_no_durable_or_usage_or_external = - BrowsingDataRemover::REMOVE_SITE_DATA & - ~BrowsingDataRemover::REMOVE_SITE_USAGE_DATA & - ~BrowsingDataRemover::REMOVE_DURABLE_PERMISSION & - ~BrowsingDataRemover::REMOVE_EXTERNAL_PROTOCOL_DATA; + ChromeBrowsingDataRemoverDelegate::DATA_TYPE_SITE_DATA & + ~ChromeBrowsingDataRemoverDelegate::DATA_TYPE_SITE_USAGE_DATA & + ~ChromeBrowsingDataRemoverDelegate::DATA_TYPE_DURABLE_PERMISSION & + ~ChromeBrowsingDataRemoverDelegate::DATA_TYPE_EXTERNAL_PROTOCOL_DATA; int site_data_no_plugins_durable_usage_external = site_data_no_durable_or_usage_or_external & - ~BrowsingDataRemover::REMOVE_PLUGIN_DATA; + ~ChromeBrowsingDataRemoverDelegate::DATA_TYPE_PLUGIN_DATA; - SetPrefsAndVerifySettings(BrowsingDataRemover::REMOVE_COOKIES, + SetPrefsAndVerifySettings(BrowsingDataRemover::DATA_TYPE_COOKIES, UNPROTECTED_WEB, site_data_no_plugins_durable_usage_external); SetPrefsAndVerifySettings( - BrowsingDataRemover::REMOVE_HOSTED_APP_DATA_TESTONLY, PROTECTED_WEB, - site_data_no_plugins_durable_usage_external); + ChromeBrowsingDataRemoverDelegate::DATA_TYPE_HOSTED_APP_DATA_TEST_ONLY, + PROTECTED_WEB, site_data_no_plugins_durable_usage_external); + SetPrefsAndVerifySettings(BrowsingDataRemover::DATA_TYPE_COOKIES | + ChromeBrowsingDataRemoverDelegate:: + DATA_TYPE_HOSTED_APP_DATA_TEST_ONLY, + PROTECTED_WEB | UNPROTECTED_WEB, + site_data_no_plugins_durable_usage_external); SetPrefsAndVerifySettings( - BrowsingDataRemover::REMOVE_COOKIES | - BrowsingDataRemover::REMOVE_HOSTED_APP_DATA_TESTONLY, - PROTECTED_WEB | UNPROTECTED_WEB, - site_data_no_plugins_durable_usage_external); - SetPrefsAndVerifySettings(BrowsingDataRemover::REMOVE_COOKIES | - BrowsingDataRemover::REMOVE_PLUGIN_DATA, - UNPROTECTED_WEB, - site_data_no_durable_or_usage_or_external); + BrowsingDataRemover::DATA_TYPE_COOKIES | + ChromeBrowsingDataRemoverDelegate::DATA_TYPE_PLUGIN_DATA, + UNPROTECTED_WEB, site_data_no_durable_or_usage_or_external); } // Test an arbitrary assortment of settings. IN_PROC_BROWSER_TEST_F(ExtensionBrowsingDataTest, SettingsFunctionAssorted) { int site_data_no_plugins_durable_usage_external = - BrowsingDataRemover::REMOVE_SITE_DATA & - ~BrowsingDataRemover::REMOVE_DURABLE_PERMISSION & - ~BrowsingDataRemover::REMOVE_SITE_USAGE_DATA & - ~BrowsingDataRemover::REMOVE_PLUGIN_DATA & - ~BrowsingDataRemover::REMOVE_EXTERNAL_PROTOCOL_DATA; + ChromeBrowsingDataRemoverDelegate::DATA_TYPE_SITE_DATA & + ~ChromeBrowsingDataRemoverDelegate::DATA_TYPE_DURABLE_PERMISSION & + ~ChromeBrowsingDataRemoverDelegate::DATA_TYPE_SITE_USAGE_DATA & + ~ChromeBrowsingDataRemoverDelegate::DATA_TYPE_PLUGIN_DATA & + ~ChromeBrowsingDataRemoverDelegate::DATA_TYPE_EXTERNAL_PROTOCOL_DATA; - SetPrefsAndVerifySettings(BrowsingDataRemover::REMOVE_COOKIES | - BrowsingDataRemover::REMOVE_HISTORY | - BrowsingDataRemover::REMOVE_DOWNLOADS, - UNPROTECTED_WEB, - site_data_no_plugins_durable_usage_external | - BrowsingDataRemover::REMOVE_HISTORY | - BrowsingDataRemover::REMOVE_DOWNLOADS); + SetPrefsAndVerifySettings( + BrowsingDataRemover::DATA_TYPE_COOKIES | + ChromeBrowsingDataRemoverDelegate::DATA_TYPE_HISTORY | + BrowsingDataRemover::DATA_TYPE_DOWNLOADS, + UNPROTECTED_WEB, + site_data_no_plugins_durable_usage_external | + ChromeBrowsingDataRemoverDelegate::DATA_TYPE_HISTORY | + BrowsingDataRemover::DATA_TYPE_DOWNLOADS); }
diff --git a/chrome/browser/extensions/api/desktop_capture/desktop_capture_apitest.cc b/chrome/browser/extensions/api/desktop_capture/desktop_capture_apitest.cc index 3d12098..cc6b793 100644 --- a/chrome/browser/extensions/api/desktop_capture/desktop_capture_apitest.cc +++ b/chrome/browser/extensions/api/desktop_capture/desktop_capture_apitest.cc
@@ -206,23 +206,28 @@ webrtc::kFullDesktopScreenId)}, // cancelDialog() {true, true, false, false, content::DesktopMediaID(), true}, + + // Some test cases below are commented out because getUserMedia will fail + // due to the fake source id currently. + // TODO(braveyao): get these cases working again. http://crbug.com/699201 + // tabShareWithAudioGetStream() - {false, false, true, true, - content::DesktopMediaID(content::DesktopMediaID::TYPE_WEB_CONTENTS, 0, - true)}, + //{false, false, true, true, + // content::DesktopMediaID(content::DesktopMediaID::TYPE_WEB_CONTENTS, 0, + // true)}, // windowShareWithAudioGetStream() - {false, true, false, true, - content::DesktopMediaID(content::DesktopMediaID::TYPE_WINDOW, 0, true)}, + //{false, true, false, true, + //content::DesktopMediaID(content::DesktopMediaID::TYPE_WINDOW, 0, true)}, // screenShareWithAudioGetStream() {true, false, false, true, content::DesktopMediaID(content::DesktopMediaID::TYPE_SCREEN, webrtc::kFullDesktopScreenId, true)}, // tabShareWithoutAudioGetStream() - {false, false, true, true, - content::DesktopMediaID(content::DesktopMediaID::TYPE_WEB_CONTENTS, 0)}, + //{false, false, true, true, + //content::DesktopMediaID(content::DesktopMediaID::TYPE_WEB_CONTENTS, 0)}, // windowShareWithoutAudioGetStream() - {false, true, false, true, - content::DesktopMediaID(content::DesktopMediaID::TYPE_WINDOW, 0)}, + //{false, true, false, true, + // content::DesktopMediaID(content::DesktopMediaID::TYPE_WINDOW, 0)}, // screenShareWithoutAudioGetStream() {true, false, false, true, content::DesktopMediaID(content::DesktopMediaID::TYPE_SCREEN,
diff --git a/chrome/browser/extensions/api/gcm/OWNERS b/chrome/browser/extensions/api/gcm/OWNERS index 46bb266..b3ca3ad 100644 --- a/chrome/browser/extensions/api/gcm/OWNERS +++ b/chrome/browser/extensions/api/gcm/OWNERS
@@ -1,2 +1,4 @@ fgorski@chromium.org jianli@chromium.org + +# COMPONENT: Services>CloudMessaging
diff --git a/chrome/browser/extensions/api/image_writer_private/image_writer_utility_client.cc b/chrome/browser/extensions/api/image_writer_private/image_writer_utility_client.cc index 30ab7cd..1fff11c 100644 --- a/chrome/browser/extensions/api/image_writer_private/image_writer_utility_client.cc +++ b/chrome/browser/extensions/api/image_writer_private/image_writer_utility_client.cc
@@ -72,7 +72,7 @@ success_callback_ = success_callback; error_callback_ = error_callback; - StartUtilityProcess(); + StartUtilityProcessIfNeeded(); extensions::mojom::RemovableStorageWriterClientPtr client; removable_storage_writer_client_ = @@ -94,7 +94,7 @@ success_callback_ = success_callback; error_callback_ = error_callback; - StartUtilityProcess(); + StartUtilityProcessIfNeeded(); extensions::mojom::RemovableStorageWriterClientPtr client; removable_storage_writer_client_ = @@ -118,18 +118,16 @@ utility_process_mojo_client_.reset(); } -void ImageWriterUtilityClient::StartUtilityProcess() { +void ImageWriterUtilityClient::StartUtilityProcessIfNeeded() { DCHECK_CURRENTLY_ON(content::BrowserThread::IO); if (utility_process_mojo_client_) return; - const base::string16 utility_process_name = - l10n_util::GetStringUTF16(IDS_UTILITY_PROCESS_IMAGE_WRITER_NAME); - - utility_process_mojo_client_.reset( - new content::UtilityProcessMojoClient< - extensions::mojom::RemovableStorageWriter>(utility_process_name)); + utility_process_mojo_client_ = + base::MakeUnique<content::UtilityProcessMojoClient< + extensions::mojom::RemovableStorageWriter>>( + l10n_util::GetStringUTF16(IDS_UTILITY_PROCESS_IMAGE_WRITER_NAME)); utility_process_mojo_client_->set_error_callback( base::Bind(&ImageWriterUtilityClient::UtilityProcessError, this));
diff --git a/chrome/browser/extensions/api/image_writer_private/image_writer_utility_client.h b/chrome/browser/extensions/api/image_writer_private/image_writer_utility_client.h index 0aa0a6d..ad122fc2 100644 --- a/chrome/browser/extensions/api/image_writer_private/image_writer_utility_client.h +++ b/chrome/browser/extensions/api/image_writer_private/image_writer_utility_client.h
@@ -65,9 +65,7 @@ private: class RemovableStorageWriterClientImpl; - // Ensures the utility process has been created. - void StartUtilityProcess(); - + void StartUtilityProcessIfNeeded(); void UtilityProcessError(); void OperationProgress(int64_t progress);
diff --git a/chrome/browser/extensions/api/instance_id/OWNERS b/chrome/browser/extensions/api/instance_id/OWNERS index e8e7e8b..331d36d 100644 --- a/chrome/browser/extensions/api/instance_id/OWNERS +++ b/chrome/browser/extensions/api/instance_id/OWNERS
@@ -1,2 +1,4 @@ fgorski@chromium.org -jianli@chromium.org \ No newline at end of file +jianli@chromium.org + +# COMPONENT: Platform>Extensions>API
diff --git a/chrome/browser/extensions/display_info_provider_chromeos.cc b/chrome/browser/extensions/display_info_provider_chromeos.cc index b323908..8686809 100644 --- a/chrome/browser/extensions/display_info_provider_chromeos.cc +++ b/chrome/browser/extensions/display_info_provider_chromeos.cc
@@ -223,7 +223,7 @@ ash::Shell::GetInstance() ->display_configuration_controller() - ->SetDisplayLayout(std::move(layout), true /* user_action */); + ->SetDisplayLayout(std::move(layout)); } // Validates that parameters passed to the SetInfo function are valid for the @@ -473,16 +473,13 @@ } // Process 'isPrimary' parameter. - if (info.is_primary && *info.is_primary && target.id() != primary.id()) { - display_configuration_controller->SetPrimaryDisplayId( - display_id, true /* user_action */); - } + if (info.is_primary && *info.is_primary && target.id() != primary.id()) + display_configuration_controller->SetPrimaryDisplayId(display_id); // Process 'mirroringSourceId' parameter. if (info.mirroring_source_id) { bool mirror = !info.mirroring_source_id->empty(); - display_configuration_controller->SetMirrorMode(mirror, - true /* user_action */); + display_configuration_controller->SetMirrorMode(mirror); } // Process 'overscan' parameter. @@ -559,7 +556,7 @@ } ash::Shell::GetInstance() ->display_configuration_controller() - ->SetDisplayLayout(std::move(layout), true /* user_action */); + ->SetDisplayLayout(std::move(layout)); return true; }
diff --git a/chrome/browser/extensions/process_management_browsertest.cc b/chrome/browser/extensions/process_management_browsertest.cc index 012fb55..c446d02a 100644 --- a/chrome/browser/extensions/process_management_browsertest.cc +++ b/chrome/browser/extensions/process_management_browsertest.cc
@@ -6,16 +6,19 @@ #include "base/strings/utf_string_conversions.h" #include "build/build_config.h" +#include "chrome/browser/chrome_notification_types.h" #include "chrome/browser/extensions/extension_apitest.h" #include "chrome/browser/extensions/extension_service.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/profiles/profile_manager.h" +#include "chrome/browser/sessions/session_tab_helper.h" #include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/tabs/tab_strip_model.h" #include "chrome/common/chrome_switches.h" #include "chrome/common/extensions/extension_process_policy.h" #include "chrome/common/url_constants.h" #include "chrome/test/base/ui_test_utils.h" +#include "content/public/browser/notification_service.h" #include "content/public/browser/render_frame_host.h" #include "content/public/browser/render_process_host.h" #include "content/public/browser/render_view_host.h" @@ -390,3 +393,68 @@ // Verify that Chrome Web Store is isolated in a separate renderer process. EXPECT_NE(old_process_host, new_process_host); } + +// This test verifies that blocked navigations to extensions pages do not +// overwrite process-per-site map inside content/. +IN_PROC_BROWSER_TEST_F(ExtensionBrowserTest, + NavigateToBlockedExtensionPageInNewTab) { + host_resolver()->AddRule("*", "127.0.0.1"); + ASSERT_TRUE(embedded_test_server()->Start()); + + // Load an extension, which will block a request for a specific page in it. + const extensions::Extension* extension = LoadExtension( + test_data_dir_.AppendASCII("web_request_site_process_registration")); + ASSERT_TRUE(extension); + + WebContents* web_contents = + browser()->tab_strip_model()->GetActiveWebContents(); + GURL blocked_url(extension->GetResourceURL("/blocked.html")); + + // Navigating to the blocked extension URL should be done through a redirect, + // otherwise it will result in an OpenURL IPC from the renderer process, which + // will initiate a navigation through the browser process. + GURL redirect_url( + embedded_test_server()->GetURL("/server-redirect?" + blocked_url.spec())); + + // Navigate the current tab to the test page in the extension, which will + // create the extension process and register the webRequest blocking listener. + ui_test_utils::NavigateToURL(browser(), + extension->GetResourceURL("/test.html")); + + // Open a new tab to about:blank, which will result in a new SiteInstance + // without an explicit site URL set. + ui_test_utils::NavigateToURLWithDisposition( + browser(), GURL(url::kAboutBlankURL), + WindowOpenDisposition::NEW_FOREGROUND_TAB, + ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); + WebContents* new_web_contents = + browser()->tab_strip_model()->GetActiveWebContents(); + + // Navigate the new tab to an extension URL that will be blocked by + // webRequest. It must be a renderer-initiated navigation. It also uses a + // redirect, otherwise the regular renderer process will send an OpenURL + // IPC to the browser due to the chrome-extension:// URL. + std::string script = + base::StringPrintf("location.href = '%s';", redirect_url.spec().c_str()); + content::TestNavigationObserver observer(new_web_contents); + EXPECT_TRUE(content::ExecuteScript(new_web_contents, script)); + observer.Wait(); + + EXPECT_EQ(observer.last_navigation_url(), blocked_url); + EXPECT_FALSE(observer.last_navigation_succeeded()); + + // Very subtle check for content/ internal functionality :(. + // When a navigation is blocked, it still commits an error page. Since + // extensions use the process-per-site model, each extension URL is registered + // in a map from URL to a process. Creating a brand new SiteInstance for the + // extension URL should always result in a SiteInstance that has a process and + // the process is the same for all SiteInstances. This allows us to verify + // that the site-to-process map for the extension hasn't been overwritten by + // the process of the |blocked_url|. + scoped_refptr<content::SiteInstance> new_site_instance = + content::SiteInstance::CreateForURL(web_contents->GetBrowserContext(), + extension->GetResourceURL("")); + EXPECT_TRUE(new_site_instance->HasProcess()); + EXPECT_EQ(new_site_instance->GetProcess(), + web_contents->GetSiteInstance()->GetProcess()); +}
diff --git a/chrome/browser/media_galleries/fileapi/safe_audio_video_checker.cc b/chrome/browser/media_galleries/fileapi/safe_audio_video_checker.cc index f6bd328..7676c853 100644 --- a/chrome/browser/media_galleries/fileapi/safe_audio_video_checker.cc +++ b/chrome/browser/media_galleries/fileapi/safe_audio_video_checker.cc
@@ -17,7 +17,7 @@ base::File file, const storage::CopyOrMoveFileValidator::ResultCallback& callback) : file_(std::move(file)), callback_(callback) { - DCHECK(!callback_.is_null()); + DCHECK(callback_); } void SafeAudioVideoChecker::Start() { @@ -30,12 +30,9 @@ DCHECK(!utility_process_mojo_client_); - const base::string16 utility_process_name = - l10n_util::GetStringUTF16(IDS_UTILITY_PROCESS_MEDIA_FILE_CHECKER_NAME); - - utility_process_mojo_client_.reset( - new content::UtilityProcessMojoClient<extensions::mojom::MediaParser>( - utility_process_name)); + utility_process_mojo_client_ = base::MakeUnique< + content::UtilityProcessMojoClient<extensions::mojom::MediaParser>>( + l10n_util::GetStringUTF16(IDS_UTILITY_PROCESS_MEDIA_FILE_CHECKER_NAME)); utility_process_mojo_client_->set_error_callback( base::Bind(&SafeAudioVideoChecker::CheckMediaFileDone, this, false));
diff --git a/chrome/browser/media_galleries/fileapi/safe_media_metadata_parser.cc b/chrome/browser/media_galleries/fileapi/safe_media_metadata_parser.cc index 223e2a2..675f30e 100644 --- a/chrome/browser/media_galleries/fileapi/safe_media_metadata_parser.cc +++ b/chrome/browser/media_galleries/fileapi/safe_media_metadata_parser.cc
@@ -66,16 +66,13 @@ void SafeMediaMetadataParser::StartOnIOThread(const DoneCallback& callback) { DCHECK_CURRENTLY_ON(content::BrowserThread::IO); DCHECK(!utility_process_mojo_client_); - DCHECK(!callback.is_null()); + DCHECK(callback); callback_ = callback; - const base::string16 utility_process_name = - l10n_util::GetStringUTF16(IDS_UTILITY_PROCESS_MEDIA_FILE_CHECKER_NAME); - - utility_process_mojo_client_.reset( - new content::UtilityProcessMojoClient<extensions::mojom::MediaParser>( - utility_process_name)); + utility_process_mojo_client_ = base::MakeUnique< + content::UtilityProcessMojoClient<extensions::mojom::MediaParser>>( + l10n_util::GetStringUTF16(IDS_UTILITY_PROCESS_MEDIA_FILE_CHECKER_NAME)); utility_process_mojo_client_->set_error_callback( base::Bind(&SafeMediaMetadataParser::ParseMediaMetadataFailed, this));
diff --git a/chrome/browser/net/errorpage_browsertest.cc b/chrome/browser/net/errorpage_browsertest.cc index 095061c..584e04a 100644 --- a/chrome/browser/net/errorpage_browsertest.cc +++ b/chrome/browser/net/errorpage_browsertest.cc
@@ -23,6 +23,7 @@ #include "chrome/browser/browsing_data/browsing_data_helper.h" #include "chrome/browser/browsing_data/browsing_data_remover.h" #include "chrome/browser/browsing_data/browsing_data_remover_factory.h" +#include "chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.h" #include "chrome/browser/net/net_error_diagnostics_dialog.h" #include "chrome/browser/net/url_request_mock_util.h" #include "chrome/browser/profiles/profile.h" @@ -1009,8 +1010,8 @@ BrowsingDataRemover* remover = BrowsingDataRemoverFactory::GetForBrowserContext(browser()->profile()); remover->Remove(base::Time(), base::Time::Max(), - BrowsingDataRemover::REMOVE_CACHE, - BrowsingDataHelper::UNPROTECTED_WEB); + BrowsingDataRemover::DATA_TYPE_CACHE, + BrowsingDataRemover::ORIGIN_TYPE_UNPROTECTED_WEB); ui_test_utils::NavigateToURL(browser(), test_url); EXPECT_TRUE(ProbeStaleCopyValue(false)); EXPECT_FALSE(IsDisplayingText(browser(), GetShowSavedButtonLabel())); @@ -1282,8 +1283,8 @@ BrowsingDataRemover* remover = BrowsingDataRemoverFactory::GetForBrowserContext(browser()->profile()); remover->Remove(base::Time(), base::Time::Max(), - BrowsingDataRemover::REMOVE_CACHE, - BrowsingDataHelper::UNPROTECTED_WEB); + BrowsingDataRemover::DATA_TYPE_CACHE, + BrowsingDataRemover::ORIGIN_TYPE_UNPROTECTED_WEB); ui_test_utils::NavigateToURLBlockUntilNavigationsComplete( browser(), test_url, 2); EXPECT_TRUE(ProbeStaleCopyValue(false));
diff --git a/chrome/browser/net/predictor_browsertest.cc b/chrome/browser/net/predictor_browsertest.cc index e583c516..abd1dcd 100644 --- a/chrome/browser/net/predictor_browsertest.cc +++ b/chrome/browser/net/predictor_browsertest.cc
@@ -26,6 +26,7 @@ #include "chrome/browser/browsing_data/browsing_data_helper.h" #include "chrome/browser/browsing_data/browsing_data_remover.h" #include "chrome/browser/browsing_data/browsing_data_remover_factory.h" +#include "chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.h" #include "chrome/browser/net/predictor.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/ui/browser.h" @@ -1410,8 +1411,8 @@ BrowsingDataRemover* remover = BrowsingDataRemoverFactory::GetForBrowserContext(browser()->profile()); remover->Remove(base::Time(), base::Time::Max(), - BrowsingDataRemover::REMOVE_HISTORY, - BrowsingDataHelper::UNPROTECTED_WEB); + ChromeBrowsingDataRemoverDelegate::DATA_TYPE_HISTORY, + BrowsingDataRemover::ORIGIN_TYPE_UNPROTECTED_WEB); GetListFromPrefsAsString(prefs::kDnsPrefetchingStartupList, &cleared_startup_list);
diff --git a/chrome/browser/net/sdch_browsertest.cc b/chrome/browser/net/sdch_browsertest.cc index 0966cc4..1fa5318 100644 --- a/chrome/browser/net/sdch_browsertest.cc +++ b/chrome/browser/net/sdch_browsertest.cc
@@ -26,6 +26,7 @@ #include "chrome/browser/browsing_data/browsing_data_remover.h" #include "chrome/browser/browsing_data/browsing_data_remover_factory.h" #include "chrome/browser/browsing_data/browsing_data_remover_test_util.h" +#include "chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/profiles/profile_manager.h" #include "chrome/browser/ui/browser.h" @@ -413,7 +414,8 @@ browsing_data::TimePeriod::LAST_HOUR), browsing_data::CalculateEndDeleteTime( browsing_data::TimePeriod::LAST_HOUR), - remove_mask, BrowsingDataHelper::UNPROTECTED_WEB, + remove_mask, + BrowsingDataRemover::ORIGIN_TYPE_UNPROTECTED_WEB, &completion_observer); completion_observer.BlockUntilCompletion(); } @@ -676,14 +678,14 @@ // Confirm browsing data remover without removing the cache leaves // SDCH alone. - BrowsingDataRemoveAndWait(BrowsingDataRemover::REMOVE_ALL & - ~BrowsingDataRemover::REMOVE_CACHE); + BrowsingDataRemoveAndWait(ChromeBrowsingDataRemoverDelegate::ALL_DATA_TYPES & + ~BrowsingDataRemover::DATA_TYPE_CACHE); bool sdch_encoding_used = false; ASSERT_TRUE(GetData(&sdch_encoding_used)); EXPECT_TRUE(sdch_encoding_used); // Confirm browsing data remover removing the cache clears SDCH state. - BrowsingDataRemoveAndWait(BrowsingDataRemover::REMOVE_CACHE); + BrowsingDataRemoveAndWait(BrowsingDataRemover::DATA_TYPE_CACHE); sdch_encoding_used = false; ASSERT_TRUE(GetData(&sdch_encoding_used)); EXPECT_FALSE(sdch_encoding_used);
diff --git a/chrome/browser/notifications/platform_notification_service_interactive_uitest.cc b/chrome/browser/notifications/platform_notification_service_interactive_uitest.cc index 1d29b9cf..2314d24 100644 --- a/chrome/browser/notifications/platform_notification_service_interactive_uitest.cc +++ b/chrome/browser/notifications/platform_notification_service_interactive_uitest.cc
@@ -461,10 +461,8 @@ EXPECT_EQ(TestPageUrl().spec(), notification.service_worker_scope().spec()); } -// TODO(felt): This DCHECKs when bubbles are enabled, when the file_url is -// persisted. crbug.com/502057 IN_PROC_BROWSER_TEST_F(PlatformNotificationServiceBrowserTest, - DISABLED_CheckFilePermissionNotGranted) { + CheckFilePermissionNotGranted) { // This case should succeed because a normal page URL is used. std::string script_result;
diff --git a/chrome/browser/page_load_metrics/observers/ukm_page_load_metrics_observer.cc b/chrome/browser/page_load_metrics/observers/ukm_page_load_metrics_observer.cc index 29b01b3..43f8634 100644 --- a/chrome/browser/page_load_metrics/observers/ukm_page_load_metrics_observer.cc +++ b/chrome/browser/page_load_metrics/observers/ukm_page_load_metrics_observer.cc
@@ -24,8 +24,12 @@ const char kUkmFirstMeaningfulPaintName[] = "Experimental.PaintTiming.NavigationToFirstMeaningfulPaint"; const char kUkmForegroundDurationName[] = "PageTiming.ForegroundDuration"; +const char kUkmFailedProvisionaLoadName[] = + "PageTiming.NavigationToFailedProvisionalLoad"; const char kUkmEffectiveConnectionType[] = "Net.EffectiveConnectionType.OnNavigationStart"; +const char kUkmNetErrorCode[] = "Net.ErrorCode.OnFailedProvisionalLoad"; +const char kUkmPageTransition[] = "Navigation.PageTransition"; } // namespace internal @@ -78,6 +82,14 @@ effective_connection_type_ = network_quality_provider_->GetEffectiveConnectionType(); } + page_transition_ = navigation_handle->GetPageTransition(); + return CONTINUE_OBSERVING; +} + +UkmPageLoadMetricsObserver::ObservePolicy UkmPageLoadMetricsObserver::OnCommit( + content::NavigationHandle* navigation_handle) { + // The PageTransition for the navigation may be updated on commit. + page_transition_ = navigation_handle->GetPageTransition(); return CONTINUE_OBSERVING; } @@ -104,6 +116,19 @@ const page_load_metrics::PageLoadExtraInfo& extra_info) { RecordPageLoadExtraInfoMetrics( extra_info, base::TimeTicks() /* no app_background_time */); + + ukm::UkmService* ukm_service = g_browser_process->ukm_service(); + std::unique_ptr<ukm::UkmEntryBuilder> builder = + ukm_service->GetEntryBuilder(source_id_, internal::kUkmPageLoadEventName); + // Error codes have negative values, however we log net error code enum values + // for UMA histograms using the equivalent positive value. For consistency in + // UKM, we convert to a positive value here. + int64_t net_error_code = static_cast<int64_t>(failed_load_info.error) * -1; + DCHECK_GE(net_error_code, 0); + builder->AddMetric(internal::kUkmNetErrorCode, net_error_code); + builder->AddMetric( + internal::kUkmFailedProvisionaLoadName, + failed_load_info.time_to_failed_provisional_load.InMilliseconds()); } void UkmPageLoadMetricsObserver::OnComplete( @@ -162,4 +187,7 @@ builder->AddMetric(internal::kUkmEffectiveConnectionType, static_cast<int64_t>(effective_connection_type_)); } + // page_transition_ fits in a uint32_t, so we can safely cast to int64_t. + builder->AddMetric(internal::kUkmPageTransition, + static_cast<int64_t>(page_transition_)); }
diff --git a/chrome/browser/page_load_metrics/observers/ukm_page_load_metrics_observer.h b/chrome/browser/page_load_metrics/observers/ukm_page_load_metrics_observer.h index 16dfbbb..6b16592 100644 --- a/chrome/browser/page_load_metrics/observers/ukm_page_load_metrics_observer.h +++ b/chrome/browser/page_load_metrics/observers/ukm_page_load_metrics_observer.h
@@ -8,6 +8,7 @@ #include "base/macros.h" #include "chrome/browser/page_load_metrics/page_load_metrics_observer.h" #include "net/nqe/network_quality_estimator.h" +#include "ui/base/page_transition_types.h" namespace content { class WebContents; @@ -23,7 +24,10 @@ extern const char kUkmFirstContentfulPaintName[]; extern const char kUkmFirstMeaningfulPaintName[]; extern const char kUkmForegroundDurationName[]; +extern const char kUkmFailedProvisionaLoadName[]; +extern const char kUkmNetErrorCode[]; extern const char kUkmEffectiveConnectionType[]; +extern const char kUkmPageTransition[]; } // namespace internal @@ -46,6 +50,8 @@ const GURL& currently_committed_url, bool started_in_foreground) override; + ObservePolicy OnCommit(content::NavigationHandle* navigation_handle) override; + ObservePolicy FlushMetricsOnAppEnterBackground( const page_load_metrics::PageLoadTiming& timing, const page_load_metrics::PageLoadExtraInfo& info) override; @@ -82,6 +88,9 @@ net::EffectiveConnectionType effective_connection_type_ = net::EFFECTIVE_CONNECTION_TYPE_UNKNOWN; + // PAGE_TRANSITION_LINK is the default PageTransition value. + ui::PageTransition page_transition_ = ui::PAGE_TRANSITION_LINK; + DISALLOW_COPY_AND_ASSIGN(UkmPageLoadMetricsObserver); };
diff --git a/chrome/browser/page_load_metrics/observers/ukm_page_load_metrics_observer_unittest.cc b/chrome/browser/page_load_metrics/observers/ukm_page_load_metrics_observer_unittest.cc index fe9d7f5..c0c8eb70 100644 --- a/chrome/browser/page_load_metrics/observers/ukm_page_load_metrics_observer_unittest.cc +++ b/chrome/browser/page_load_metrics/observers/ukm_page_load_metrics_observer_unittest.cc
@@ -75,9 +75,8 @@ return mock_network_quality_provider_; } - const ukm::UkmSource* GetUkmSource(size_t source_index) { - return ukm_service_test_harness_.test_ukm_service()->GetSource( - source_index); + const ukm::UkmSource* GetUkmSourceForUrl(const char* url) { + return ukm_service_test_harness_.test_ukm_service()->GetSourceForUrl(url); } const ukm::UkmEntry* GetUkmEntry(size_t entry_index) { @@ -181,7 +180,7 @@ DeleteContents(); EXPECT_EQ(1ul, ukm_source_count()); - const ukm::UkmSource* source = GetUkmSource(0); + const ukm::UkmSource* source = GetUkmSourceForUrl(kTestUrl1); EXPECT_EQ(GURL(kTestUrl1), source->url()); EXPECT_GE(ukm_entry_count(), 1ul); @@ -190,6 +189,8 @@ EXPECT_EQ(entry_proto.event_hash(), base::HashMetricName(internal::kUkmPageLoadEventName)); EXPECT_FALSE(entry_proto.metrics().empty()); + ExpectMetric(internal::kUkmPageTransition, ui::PAGE_TRANSITION_LINK, + entry_proto.metrics()); ExpectMetric(internal::kUkmParseStartName, 100, entry_proto.metrics()); ExpectMetric(internal::kUkmDomContentLoadedName, 200, entry_proto.metrics()); ExpectMetric(internal::kUkmFirstContentfulPaintName, 300, @@ -201,6 +202,47 @@ HasMetric(internal::kUkmForegroundDurationName, entry_proto.metrics())); } +TEST_F(UkmPageLoadMetricsObserverTest, FailedProvisionalLoad) { + EXPECT_CALL(mock_network_quality_provider(), GetEffectiveConnectionType()) + .WillRepeatedly(Return(net::EFFECTIVE_CONNECTION_TYPE_2G)); + + GURL url(kTestUrl1); + content::RenderFrameHostTester* rfh_tester = + content::RenderFrameHostTester::For(main_rfh()); + rfh_tester->SimulateNavigationStart(url); + rfh_tester->SimulateNavigationError(url, net::ERR_TIMED_OUT); + rfh_tester->SimulateNavigationStop(); + + // Simulate closing the tab. + DeleteContents(); + + EXPECT_EQ(1ul, ukm_source_count()); + const ukm::UkmSource* source = GetUkmSourceForUrl(kTestUrl1); + EXPECT_EQ(GURL(kTestUrl1), source->url()); + + EXPECT_GE(ukm_entry_count(), 1ul); + ukm::Entry entry_proto = GetMergedEntryProtoForSourceID(source->id()); + EXPECT_EQ(entry_proto.source_id(), source->id()); + EXPECT_EQ(entry_proto.event_hash(), + base::HashMetricName(internal::kUkmPageLoadEventName)); + + // Make sure that only the following metrics are logged. In particular, no + // paint/document/etc timing metrics should be logged for failed provisional + // loads. + EXPECT_EQ(5, entry_proto.metrics().size()); + ExpectMetric(internal::kUkmPageTransition, ui::PAGE_TRANSITION_LINK, + entry_proto.metrics()); + ExpectMetric(internal::kUkmEffectiveConnectionType, + net::EFFECTIVE_CONNECTION_TYPE_2G, entry_proto.metrics()); + ExpectMetric(internal::kUkmNetErrorCode, + static_cast<int64_t>(net::ERR_TIMED_OUT) * -1, + entry_proto.metrics()); + EXPECT_TRUE( + HasMetric(internal::kUkmForegroundDurationName, entry_proto.metrics())); + EXPECT_TRUE( + HasMetric(internal::kUkmFailedProvisionaLoadName, entry_proto.metrics())); +} + TEST_F(UkmPageLoadMetricsObserverTest, FirstMeaningfulPaint) { page_load_metrics::PageLoadTiming timing; timing.navigation_start = base::Time::FromDoubleT(1); @@ -214,7 +256,7 @@ DeleteContents(); EXPECT_EQ(1ul, ukm_source_count()); - const ukm::UkmSource* source = GetUkmSource(0); + const ukm::UkmSource* source = GetUkmSourceForUrl(kTestUrl1); EXPECT_EQ(GURL(kTestUrl1), source->url()); EXPECT_GE(ukm_entry_count(), 1ul); @@ -250,8 +292,8 @@ DeleteContents(); EXPECT_EQ(2ul, ukm_source_count()); - const ukm::UkmSource* source1 = GetUkmSource(0); - const ukm::UkmSource* source2 = GetUkmSource(1); + const ukm::UkmSource* source1 = GetUkmSourceForUrl(kTestUrl1); + const ukm::UkmSource* source2 = GetUkmSourceForUrl(kTestUrl2); EXPECT_EQ(GURL(kTestUrl1), source1->url()); EXPECT_EQ(GURL(kTestUrl2), source2->url()); EXPECT_NE(source1->id(), source2->id()); @@ -295,7 +337,7 @@ DeleteContents(); EXPECT_EQ(1ul, ukm_source_count()); - const ukm::UkmSource* source = GetUkmSource(0); + const ukm::UkmSource* source = GetUkmSourceForUrl(kTestUrl1); EXPECT_EQ(GURL(kTestUrl1), source->url()); EXPECT_GE(ukm_entry_count(), 1ul); @@ -307,3 +349,25 @@ ExpectMetric(internal::kUkmEffectiveConnectionType, net::EFFECTIVE_CONNECTION_TYPE_3G, entry_proto.metrics()); } + +TEST_F(UkmPageLoadMetricsObserverTest, PageTransitionReload) { + GURL url(kTestUrl1); + NavigateWithPageTransitionAndCommit(GURL(kTestUrl1), + ui::PAGE_TRANSITION_RELOAD); + + // Simulate closing the tab. + DeleteContents(); + + EXPECT_EQ(1ul, ukm_source_count()); + const ukm::UkmSource* source = GetUkmSourceForUrl(kTestUrl1); + EXPECT_EQ(GURL(kTestUrl1), source->url()); + + EXPECT_GE(ukm_entry_count(), 1ul); + ukm::Entry entry_proto = GetMergedEntryProtoForSourceID(source->id()); + EXPECT_EQ(entry_proto.source_id(), source->id()); + EXPECT_EQ(entry_proto.event_hash(), + base::HashMetricName(internal::kUkmPageLoadEventName)); + EXPECT_FALSE(entry_proto.metrics().empty()); + ExpectMetric(internal::kUkmPageTransition, ui::PAGE_TRANSITION_RELOAD, + entry_proto.metrics()); +}
diff --git a/chrome/browser/password_manager/password_store_proxy_mac.cc b/chrome/browser/password_manager/password_store_proxy_mac.cc index cb78af3..e82ebe5 100644 --- a/chrome/browser/password_manager/password_store_proxy_mac.cc +++ b/chrome/browser/password_manager/password_store_proxy_mac.cc
@@ -46,12 +46,12 @@ return false; } - if (!password_manager::PasswordStore::Init(flare)) + if (!ScheduleTask(base::Bind( + &PasswordStoreProxyMac::InitOnBackgroundThread, this, + static_cast<MigrationStatus>(migration_status_.GetValue())))) return false; - return ScheduleTask( - base::Bind(&PasswordStoreProxyMac::InitOnBackgroundThread, this, - static_cast<MigrationStatus>(migration_status_.GetValue()))); + return password_manager::PasswordStore::Init(flare); } void PasswordStoreProxyMac::ShutdownOnUIThread() {
diff --git a/chrome/browser/predictors/resource_prefetch_predictor.cc b/chrome/browser/predictors/resource_prefetch_predictor.cc index b3e5453..dd33e10 100644 --- a/chrome/browser/predictors/resource_prefetch_predictor.cc +++ b/chrome/browser/predictors/resource_prefetch_predictor.cc
@@ -645,6 +645,15 @@ return GetPrefetchData(main_frame_url, nullptr); } +bool ResourcePrefetchPredictor::IsResourcePrefetchable( + const ResourceData& resource) const { + float confidence = static_cast<float>(resource.number_of_hits()) / + (resource.number_of_hits() + resource.number_of_misses()); + return confidence >= config_.min_resource_confidence_to_trigger_prefetch && + resource.number_of_hits() >= + config_.min_resource_hits_to_trigger_prefetch; +} + void ResourcePrefetchPredictor::SetObserverForTesting(TestObserver* observer) { observer_ = observer; } @@ -1343,15 +1352,6 @@ } } -bool ResourcePrefetchPredictor::IsResourcePrefetchable( - const ResourceData& resource) const { - float confidence = static_cast<float>(resource.number_of_hits()) / - (resource.number_of_hits() + resource.number_of_misses()); - return confidence >= config_.min_resource_confidence_to_trigger_prefetch && - resource.number_of_hits() >= - config_.min_resource_hits_to_trigger_prefetch; -} - void ResourcePrefetchPredictor::ReportDatabaseReadiness( const history::TopHostsList& top_hosts) const { DCHECK_CURRENTLY_ON(BrowserThread::UI);
diff --git a/chrome/browser/predictors/resource_prefetch_predictor.h b/chrome/browser/predictors/resource_prefetch_predictor.h index 291da28..fa2cfd1 100644 --- a/chrome/browser/predictors/resource_prefetch_predictor.h +++ b/chrome/browser/predictors/resource_prefetch_predictor.h
@@ -220,6 +220,10 @@ // Returns true if prefetching data exists for the |main_frame_url|. virtual bool IsUrlPrefetchable(const GURL& main_frame_url); + // Returns true iff |resource| has sufficient confidence level and required + // number of hits. + bool IsResourcePrefetchable(const ResourceData& resource) const; + // Sets the |observer| to be notified when the resource prefetch predictor // data changes. Previously registered observer will be discarded. Call // this with nullptr parameter to de-register observer. @@ -372,10 +376,6 @@ size_t max_redirect_map_size, RedirectDataMap* redirect_map); - // Returns true iff |resource| has sufficient confidence level and required - // number of hits. - bool IsResourcePrefetchable(const ResourceData& resource) const; - // Reports database readiness metric defined as percentage of navigated hosts // found in DB for last X entries in history. void ReportDatabaseReadiness(const history::TopHostsList& top_hosts) const;
diff --git a/chrome/browser/predictors/resource_prefetch_predictor_browsertest.cc b/chrome/browser/predictors/resource_prefetch_predictor_browsertest.cc index 44f7cd7..b5ed25f1 100644 --- a/chrome/browser/predictors/resource_prefetch_predictor_browsertest.cc +++ b/chrome/browser/predictors/resource_prefetch_predictor_browsertest.cc
@@ -13,6 +13,7 @@ #include "chrome/browser/browsing_data/browsing_data_helper.h" #include "chrome/browser/browsing_data/browsing_data_remover.h" #include "chrome/browser/browsing_data/browsing_data_remover_factory.h" +#include "chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.h" #include "chrome/browser/predictors/resource_prefetch_predictor.h" #include "chrome/browser/predictors/resource_prefetch_predictor_factory.h" #include "chrome/browser/predictors/resource_prefetch_predictor_test_util.h" @@ -468,9 +469,9 @@ BrowsingDataRemover* remover = BrowsingDataRemoverFactory::GetForBrowserContext(browser()->profile()); BrowsingDataRemoverObserver observer(remover); - remover->RemoveAndReply(base::Time(), base::Time::Max(), - BrowsingDataRemover::REMOVE_CACHE, - BrowsingDataHelper::UNPROTECTED_WEB, &observer); + remover->RemoveAndReply( + base::Time(), base::Time::Max(), BrowsingDataRemover::DATA_TYPE_CACHE, + BrowsingDataRemover::ORIGIN_TYPE_UNPROTECTED_WEB, &observer); observer.Wait(); for (auto& kv : resources_)
diff --git a/chrome/browser/prerender/prerender_browsertest.cc b/chrome/browser/prerender/prerender_browsertest.cc index 991e8f7..293ac7d 100644 --- a/chrome/browser/prerender/prerender_browsertest.cc +++ b/chrome/browser/prerender/prerender_browsertest.cc
@@ -34,6 +34,7 @@ #include "chrome/browser/browsing_data/browsing_data_remover.h" #include "chrome/browser/browsing_data/browsing_data_remover_factory.h" #include "chrome/browser/browsing_data/browsing_data_remover_test_util.h" +#include "chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.h" #include "chrome/browser/chrome_content_browser_client.h" #include "chrome/browser/chrome_notification_types.h" #include "chrome/browser/content_settings/host_content_settings_map_factory.h" @@ -236,7 +237,8 @@ BrowsingDataRemoverFactory::GetForBrowserContext(browser->profile()); BrowsingDataRemoverCompletionObserver observer(remover); remover->RemoveAndReply(base::Time(), base::Time::Max(), remove_mask, - BrowsingDataHelper::UNPROTECTED_WEB, &observer); + BrowsingDataRemover::ORIGIN_TYPE_UNPROTECTED_WEB, + &observer); observer.BlockUntilCompletion(); // BrowsingDataRemover deletes itself. } @@ -2524,7 +2526,8 @@ PrerenderTestURL("/prerender/prerender_page.html", FINAL_STATUS_CACHE_OR_HISTORY_CLEARED, 1); - ClearBrowsingData(current_browser(), BrowsingDataRemover::REMOVE_HISTORY); + ClearBrowsingData(current_browser(), + ChromeBrowsingDataRemoverDelegate::DATA_TYPE_HISTORY); prerender->WaitForStop(); // Make sure prerender history was cleared. @@ -2538,7 +2541,7 @@ PrerenderTestURL("/prerender/prerender_page.html", FINAL_STATUS_CACHE_OR_HISTORY_CLEARED, 1); - ClearBrowsingData(current_browser(), BrowsingDataRemover::REMOVE_CACHE); + ClearBrowsingData(current_browser(), BrowsingDataRemover::DATA_TYPE_CACHE); prerender->WaitForStop(); // Make sure prerender history was not cleared. Not a vital behavior, but
diff --git a/chrome/browser/printing/cloud_print/test/cloud_print_proxy_process_browsertest.cc b/chrome/browser/printing/cloud_print/test/cloud_print_proxy_process_browsertest.cc index db561a30..789a4fb4 100644 --- a/chrome/browser/printing/cloud_print/test/cloud_print_proxy_process_browsertest.cc +++ b/chrome/browser/printing/cloud_print/test/cloud_print_proxy_process_browsertest.cc
@@ -20,6 +20,7 @@ #include "base/run_loop.h" #include "base/single_thread_task_runner.h" #include "base/synchronization/waitable_event.h" +#include "base/task_scheduler/post_task.h" #include "base/test/multiprocess_test.h" #include "base/test/test_timeouts.h" #include "base/threading/platform_thread.h" @@ -99,8 +100,8 @@ bool OnMessageReceived(const IPC::Message& message) override { return false; } }; -void ConnectOnBlockingPool(mojo::ScopedMessagePipeHandle handle, - mojo::edk::NamedPlatformHandle os_pipe) { +void ConnectAsync(mojo::ScopedMessagePipeHandle handle, + mojo::edk::NamedPlatformHandle os_pipe) { mojo::edk::ScopedPlatformHandle os_pipe_handle = mojo::edk::CreateClientHandle(os_pipe); if (!os_pipe_handle.is_valid()) @@ -401,7 +402,10 @@ }; CloudPrintProxyPolicyStartupTest::CloudPrintProxyPolicyStartupTest() - : thread_bundle_(content::TestBrowserThreadBundle::REAL_IO_THREAD) { + : // TaskScheduler must run on its own thread because the main thread waits + // for a task running in it. + thread_bundle_(content::TestBrowserThreadBundle::REAL_IO_THREAD | + content::TestBrowserThreadBundle::REAL_TASK_SCHEDULER) { // Although is really a unit test which runs in the browser_tests binary, it // doesn't get the unit setup which normally happens in the unit test binary. ChromeUnitTestSuite::InitializeProviders(); @@ -470,9 +474,9 @@ .release(), IPC::Channel::MODE_SERVER, this, IOTaskRunner()); - base::Process process = SpawnChild(name); - EXPECT_TRUE(process.IsValid()); - return process; + base::SpawnChildResult spawn_result = SpawnChild(name); + EXPECT_TRUE(spawn_result.process.IsValid()); + return std::move(spawn_result.process); } void CloudPrintProxyPolicyStartupTest::WaitForConnect() { @@ -481,9 +485,12 @@ EXPECT_TRUE(base::ThreadTaskRunnerHandle::Get().get()); mojo::MessagePipe pipe; - BrowserThread::PostBlockingPoolTask( - FROM_HERE, base::Bind(&ConnectOnBlockingPool, base::Passed(&pipe.handle1), - GetServiceProcessChannel())); + base::PostTaskWithTraits( + FROM_HERE, + base::TaskTraits().MayBlock().WithPriority( + base::TaskPriority::BACKGROUND), + base::Bind(&ConnectAsync, base::Passed(&pipe.handle1), + GetServiceProcessChannel())); ServiceProcessControl::GetInstance()->SetChannel( IPC::ChannelProxy::Create(IPC::ChannelMojo::CreateClientFactory( std::move(pipe.handle0), IOTaskRunner()),
diff --git a/chrome/browser/process_singleton_win_unittest.cc b/chrome/browser/process_singleton_win_unittest.cc index df53228d..39225ff 100644 --- a/chrome/browser/process_singleton_win_unittest.cc +++ b/chrome/browser/process_singleton_win_unittest.cc
@@ -161,9 +161,9 @@ void TearDown() override { chrome::SetNotificationTimeoutForTesting(old_notification_timeout_); - if (browser_victim_.IsValid()) { + if (browser_victim_.process.IsValid()) { EXPECT_TRUE(::SetEvent(continue_event_.Get())); - EXPECT_TRUE(browser_victim_.WaitForExit(nullptr)); + EXPECT_TRUE(browser_victim_.process.WaitForExit(nullptr)); } base::MultiProcessTest::TearDown(); @@ -195,7 +195,7 @@ SpawnChildWithOptions("ProcessSingletonTestProcessMain", options); // Wait for the ready event (or process exit). - HANDLE handles[] = {ready_event.Get(), browser_victim_.Handle()}; + HANDLE handles[] = {ready_event.Get(), browser_victim_.process.Handle()}; // The wait should always return because either |ready_event| is signaled or // |browser_victim_| died unexpectedly or exited on error. DWORD result = @@ -228,7 +228,7 @@ base::Unretained(this), allow_kill)); } - base::Process* browser_victim() { return &browser_victim_; } + base::Process* browser_victim() { return &(browser_victim_.process); } const base::FilePath& user_data_dir() const { return user_data_dir_.GetPath(); } @@ -246,7 +246,7 @@ WindowOption window_option_; base::ScopedTempDir user_data_dir_; - base::Process browser_victim_; + base::SpawnChildResult browser_victim_; base::win::ScopedHandle continue_event_; std::unique_ptr<ProcessSingleton> test_singleton_;
diff --git a/chrome/browser/profile_resetter/profile_resetter.cc b/chrome/browser/profile_resetter/profile_resetter.cc index cf97bf1..d9ef5a1 100644 --- a/chrome/browser/profile_resetter/profile_resetter.cc +++ b/chrome/browser/profile_resetter/profile_resetter.cc
@@ -15,6 +15,7 @@ #include "chrome/browser/browsing_data/browsing_data_helper.h" #include "chrome/browser/browsing_data/browsing_data_remover.h" #include "chrome/browser/browsing_data/browsing_data_remover_factory.h" +#include "chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.h" #include "chrome/browser/content_settings/host_content_settings_map_factory.h" #include "chrome/browser/extensions/extension_service.h" #include "chrome/browser/google/google_url_tracker_factory.h" @@ -252,16 +253,17 @@ cookies_remover_ = BrowsingDataRemoverFactory::GetForBrowserContext(profile_); cookies_remover_->AddObserver(this); - int remove_mask = BrowsingDataRemover::REMOVE_SITE_DATA | - BrowsingDataRemover::REMOVE_CACHE; + int remove_mask = ChromeBrowsingDataRemoverDelegate::DATA_TYPE_SITE_DATA | + BrowsingDataRemover::DATA_TYPE_CACHE; PrefService* prefs = profile_->GetPrefs(); DCHECK(prefs); // Don't try to clear LSO data if it's not supported. if (!prefs->GetBoolean(prefs::kClearPluginLSODataEnabled)) - remove_mask &= ~BrowsingDataRemover::REMOVE_PLUGIN_DATA; - cookies_remover_->RemoveAndReply(base::Time(), base::Time::Max(), remove_mask, - BrowsingDataHelper::UNPROTECTED_WEB, this); + remove_mask &= ~ChromeBrowsingDataRemoverDelegate::DATA_TYPE_PLUGIN_DATA; + cookies_remover_->RemoveAndReply( + base::Time(), base::Time::Max(), remove_mask, + BrowsingDataRemover::ORIGIN_TYPE_UNPROTECTED_WEB, this); } void ProfileResetter::ResetExtensions() {
diff --git a/chrome/browser/profiles/profiles_state.cc b/chrome/browser/profiles/profiles_state.cc index 005c922..609a3ce6 100644 --- a/chrome/browser/profiles/profiles_state.cc +++ b/chrome/browser/profiles/profiles_state.cc
@@ -13,6 +13,7 @@ #include "chrome/browser/browsing_data/browsing_data_helper.h" #include "chrome/browser/browsing_data/browsing_data_remover.h" #include "chrome/browser/browsing_data/browsing_data_remover_factory.h" +#include "chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.h" #include "chrome/browser/profiles/gaia_info_update_service.h" #include "chrome/browser/profiles/gaia_info_update_service_factory.h" #include "chrome/browser/profiles/profile.h" @@ -248,7 +249,8 @@ BrowsingDataRemoverFactory::GetForBrowserContext(profile)->Remove( base::Time(), base::Time::Max(), - BrowsingDataRemover::REMOVE_WIPE_PROFILE, BrowsingDataHelper::ALL); + ChromeBrowsingDataRemoverDelegate::WIPE_PROFILE, + ChromeBrowsingDataRemoverDelegate::ALL_ORIGIN_TYPES); } void SetLastUsedProfile(const std::string& profile_dir) {
diff --git a/chrome/browser/push_messaging/push_messaging_browsertest.cc b/chrome/browser/push_messaging/push_messaging_browsertest.cc index 50645a7..2223632e 100644 --- a/chrome/browser/push_messaging/push_messaging_browsertest.cc +++ b/chrome/browser/push_messaging/push_messaging_browsertest.cc
@@ -22,6 +22,7 @@ #include "chrome/browser/browsing_data/browsing_data_remover.h" #include "chrome/browser/browsing_data/browsing_data_remover_factory.h" #include "chrome/browser/browsing_data/browsing_data_remover_test_util.h" +#include "chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.h" #include "chrome/browser/content_settings/host_content_settings_map_factory.h" #include "chrome/browser/engagement/site_engagement_score.h" #include "chrome/browser/engagement/site_engagement_service.h" @@ -2067,9 +2068,10 @@ BrowsingDataRemover* remover = BrowsingDataRemoverFactory::GetForBrowserContext(GetBrowser()->profile()); BrowsingDataRemoverCompletionObserver observer(remover); - remover->RemoveAndReply(base::Time(), base::Time::Max(), - BrowsingDataRemover::REMOVE_SITE_DATA, - BrowsingDataHelper::UNPROTECTED_WEB, &observer); + remover->RemoveAndReply( + base::Time(), base::Time::Max(), + ChromeBrowsingDataRemoverDelegate::DATA_TYPE_SITE_DATA, + BrowsingDataRemover::ORIGIN_TYPE_UNPROTECTED_WEB, &observer); observer.BlockUntilCompletion(); base::RunLoop run_loop;
diff --git a/chrome/browser/resources/chromeos/login/header_bar.css b/chrome/browser/resources/chromeos/login/header_bar.css index ddf9b33..b157b00 100644 --- a/chrome/browser/resources/chromeos/login/header_bar.css +++ b/chrome/browser/resources/chromeos/login/header_bar.css
@@ -148,8 +148,9 @@ } #login-header-bar #cancel-multiple-sign-in-button-text { - /* TODO(dzhioev): replace with appropriate image when possible. */ - background-image: url(chrome://theme/IDR_PANEL_CLOSE); + background-image: -webkit-image-set( + url(images/1x/cancel.svg) 1x, + url(images/2x/cancel.svg) 2x ); } #login-header-bar #sign-out-user-button-text {
diff --git a/chrome/browser/resources/chromeos/login/images/1x/cancel.svg b/chrome/browser/resources/chromeos/login/images/1x/cancel.svg new file mode 100644 index 0000000..d7d5470 --- /dev/null +++ b/chrome/browser/resources/chromeos/login/images/1x/cancel.svg
@@ -0,0 +1,6 @@ +<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> + <g fill="none" fill-rule="evenodd"> + <path d="M0 0h20v20H0"/> + <path d="M9.72 5.89c-2.2 0-4.194.88-5.73 2.31L1 5v8h7.474L5.468 9.782c1.154-1.03 2.624-1.67 4.252-1.67 2.94 0 5.44 2.052 6.312 4.888L18 12.307C16.846 8.582 13.582 5.89 9.72 5.89z" fill="#FFF" fill-rule="nonzero"/> + </g> +</svg>
diff --git a/chrome/browser/resources/chromeos/login/images/2x/cancel.svg b/chrome/browser/resources/chromeos/login/images/2x/cancel.svg new file mode 100644 index 0000000..91dee1b --- /dev/null +++ b/chrome/browser/resources/chromeos/login/images/2x/cancel.svg
@@ -0,0 +1,6 @@ +<svg width="40" height="40" viewBox="0 0 40 40" xmlns="http://www.w3.org/2000/svg"> + <g fill="none" fill-rule="evenodd"> + <path d="M0 0h40v40H0"/> + <path d="M20.44 12.667c-4.4 0-8.388 1.65-11.46 4.333L3 11v15h14.95l-6.014-6.033c2.31-1.934 5.25-3.134 8.504-3.134 5.88 0 10.88 3.85 12.624 9.167L37 24.7c-2.31-6.983-8.836-12.033-16.56-12.033z" fill="#FFF" fill-rule="nonzero"/> + </g> +</svg>
diff --git a/chrome/browser/resources/md_bookmarks/actions.js b/chrome/browser/resources/md_bookmarks/actions.js index 1ff0eaa..7ed4cfc 100644 --- a/chrome/browser/resources/md_bookmarks/actions.js +++ b/chrome/browser/resources/md_bookmarks/actions.js
@@ -52,6 +52,7 @@ * @return {!Action} */ function selectFolder(id) { + assert(id != '0', 'Cannot select root folder'); return { name: 'select-folder', id: id, @@ -71,11 +72,46 @@ }; } + /** @return {!Action} */ + function clearSearch() { + return { + name: 'clear-search', + }; + } + + /** + * @param {string} term + * @return {!Action} + */ + function setSearchTerm(term) { + if (!term) + return clearSearch(); + + return { + name: 'start-search', + term: term, + }; + } + + /** + * @param {!Array<string>} ids + * @return {!Action} + */ + function setSearchResults(ids) { + return { + name: 'finish-search', + results: ids, + }; + } + return { changeFolderOpen: changeFolderOpen, + clearSearch: clearSearch, editBookmark: editBookmark, refreshNodes: refreshNodes, removeBookmark: removeBookmark, selectFolder: selectFolder, + setSearchResults: setSearchResults, + setSearchTerm: setSearchTerm, }; });
diff --git a/chrome/browser/resources/md_bookmarks/app.js b/chrome/browser/resources/md_bookmarks/app.js index 23bb498..026fc9c6 100644 --- a/chrome/browser/resources/md_bookmarks/app.js +++ b/chrome/browser/resources/md_bookmarks/app.js
@@ -9,8 +9,20 @@ bookmarks.StoreClient, ], + properties: { + /** @private */ + searchTerm_: { + type: String, + observer: 'searchTermChanged_', + }, + }, + /** @override */ attached: function() { + this.watch('searchTerm_', function(store) { + return store.search.term; + }); + chrome.bookmarks.getTree(function(results) { var nodeList = bookmarks.util.normalizeNodes(results[0]); var initialState = bookmarks.util.createEmptyState(); @@ -21,4 +33,16 @@ bookmarks.ApiListener.init(); }.bind(this)); }, + + searchTermChanged_: function() { + if (!this.searchTerm_) + return; + + chrome.bookmarks.search(this.searchTerm_, function(results) { + var ids = results.map(function(node) { + return node.id; + }); + this.dispatch(bookmarks.actions.setSearchResults(ids)); + }.bind(this)); + }, });
diff --git a/chrome/browser/resources/md_bookmarks/compiled_resources2.gyp b/chrome/browser/resources/md_bookmarks/compiled_resources2.gyp index 25383b90..e87ab9b2 100644 --- a/chrome/browser/resources/md_bookmarks/compiled_resources2.gyp +++ b/chrome/browser/resources/md_bookmarks/compiled_resources2.gyp
@@ -118,6 +118,7 @@ '<(DEPTH)/ui/webui/resources/cr_elements/cr_action_menu/compiled_resources2.gyp:cr_action_menu', '<(DEPTH)/ui/webui/resources/cr_elements/cr_toolbar/compiled_resources2.gyp:cr_toolbar', '<(EXTERNS_GYP):chrome_extensions', + 'store_client', ], 'includes': ['../../../../third_party/closure_compiler/compile_js2.gypi'], },
diff --git a/chrome/browser/resources/md_bookmarks/item.html b/chrome/browser/resources/md_bookmarks/item.html index 06007817..5b52358 100644 --- a/chrome/browser/resources/md_bookmarks/item.html +++ b/chrome/browser/resources/md_bookmarks/item.html
@@ -14,6 +14,7 @@ -webkit-padding-start: 20px; -webkit-user-select: none; align-items: center; + cursor: pointer; display: flex; flex-direction: row; height: 40px; @@ -25,7 +26,6 @@ #website-title { color: var(--primary-text-color); - cursor: pointer; flex: 1; overflow: hidden; text-decoration: none;
diff --git a/chrome/browser/resources/md_bookmarks/item.js b/chrome/browser/resources/md_bookmarks/item.js index 16a525b..45ff2b6 100644 --- a/chrome/browser/resources/md_bookmarks/item.js +++ b/chrome/browser/resources/md_bookmarks/item.js
@@ -12,7 +12,7 @@ properties: { itemId: { type: String, - observer: 'updateFromStore', + observer: 'onItemIdChanged_', }, /** @private {BookmarkNode} */ @@ -61,6 +61,14 @@ }, /** @private */ + onItemIdChanged_: function() { + // TODO(tsergeant): Add a histogram to measure whether this assertion fails + // for real users. + assert(this.getState().nodes[this.itemId]); + this.updateFromStore(); + }, + + /** @private */ onItemChanged_: function() { this.isFolder_ = !(this.item_.url); },
diff --git a/chrome/browser/resources/md_bookmarks/list.html b/chrome/browser/resources/md_bookmarks/list.html index 335f6eea..09d9093 100644 --- a/chrome/browser/resources/md_bookmarks/list.html +++ b/chrome/browser/resources/md_bookmarks/list.html
@@ -72,15 +72,15 @@ </paper-button> </div> </dialog> - <div id="bookmarksCard" hidden$="[[isEmptyList_(displayedList.length)]]"> - <template is="dom-repeat" items="[[displayedList]]" as="id"> + <div id="bookmarksCard" hidden$="[[isEmptyList_(displayedList_.length)]]"> + <template is="dom-repeat" items="[[displayedList_]]" as="id"> <bookmarks-item item-id="[[id]]"> </bookmarks-item> </template> </div> <div class="centered-message" - hidden$="[[!isEmptyList_(displayedList.length)]]"> - [[emptyListMessage_(searchTerm)]] + hidden$="[[!isEmptyList_(displayedList_.length)]]"> + [[emptyListMessage_(searchTerm_)]] </div> </template> <script src="chrome://bookmarks/list.js"></script>
diff --git a/chrome/browser/resources/md_bookmarks/list.js b/chrome/browser/resources/md_bookmarks/list.js index 83652a1..296620b 100644 --- a/chrome/browser/resources/md_bookmarks/list.js +++ b/chrome/browser/resources/md_bookmarks/list.js
@@ -13,8 +13,8 @@ /** @type {BookmarkNode} */ menuItem_: Object, - /** @type {Array<string>} */ - displayedList: { + /** @private {Array<string>} */ + displayedList_: { type: Array, value: function() { // Use an empty list during initialization so that the databinding to @@ -23,7 +23,8 @@ }, }, - searchTerm: String, + /** @private */ + searchTerm_: String, }, listeners: { @@ -31,9 +32,12 @@ }, attached: function() { - this.watch('displayedList', function(state) { + this.watch('displayedList_', function(state) { return bookmarks.util.getDisplayedList(state); }); + this.watch('searchTerm_', function(state) { + return state.search.term; + }); this.updateFromStore(); }, @@ -113,12 +117,12 @@ /** @private */ emptyListMessage_: function() { - var emptyListMessage = this.searchTerm ? 'noSearchResults' : 'emptyList'; + var emptyListMessage = this.searchTerm_ ? 'noSearchResults' : 'emptyList'; return loadTimeData.getString(emptyListMessage); }, /** @private */ isEmptyList_: function() { - return this.displayedList.length == 0; + return this.displayedList_.length == 0; }, });
diff --git a/chrome/browser/resources/md_bookmarks/reducers.js b/chrome/browser/resources/md_bookmarks/reducers.js index 4021761c..629017b2 100644 --- a/chrome/browser/resources/md_bookmarks/reducers.js +++ b/chrome/browser/resources/md_bookmarks/reducers.js
@@ -10,6 +10,61 @@ */ cr.define('bookmarks', function() { + var SearchState = {}; + + /** + * @param {SearchState} search + * @param {Action} action + * @return {SearchState} + */ + SearchState.startSearch = function(search, action) { + return { + term: action.term, + inProgress: true, + results: [], + }; + }; + + /** + * @param {SearchState} search + * @param {Action} action + * @return {SearchState} + */ + SearchState.finishSearch = function(search, action) { + return /** @type {SearchState} */ (Object.assign({}, search, { + inProgress: false, + results: action.results, + })); + }; + + /** @return {SearchState} */ + SearchState.clearSearch = function() { + return { + term: '', + inProgress: false, + results: [], + }; + }; + + /** + * @param {SearchState} search + * @param {Action} action + * @return {SearchState} + */ + SearchState.updateSearch = function(search, action) { + switch (action.name) { + case 'start-search': + return SearchState.startSearch(search, action); + case 'select-folder': + case 'clear-search': + return SearchState.clearSearch(); + case 'finish-search': + return SearchState.finishSearch(search, action); + default: + return search; + } + }; + var NodeState = {}; /** @@ -112,6 +167,12 @@ return action.id; } return selectedFolder; + case 'finish-search': + return null; + case 'clear-search': + // TODO(tsergeant): Return to the folder that was selected before the + // search. + return nodes['0'].children[0]; default: return selectedFolder; } @@ -183,6 +244,7 @@ state.selectedFolder, action, state.nodes), closedFolders: ClosedFolderState.updateClosedFolders( state.closedFolders, action, state.nodes), + search: SearchState.updateSearch(state.search, action), }; } @@ -190,6 +252,7 @@ reduceAction: reduceAction, ClosedFolderState: ClosedFolderState, NodeState: NodeState, + SearchState: SearchState, SelectedFolderState: SelectedFolderState, }; });
diff --git a/chrome/browser/resources/md_bookmarks/toolbar.js b/chrome/browser/resources/md_bookmarks/toolbar.js index 5b80c74..6b89342c 100644 --- a/chrome/browser/resources/md_bookmarks/toolbar.js +++ b/chrome/browser/resources/md_bookmarks/toolbar.js
@@ -5,13 +5,24 @@ Polymer({ is: 'bookmarks-toolbar', + behaviors: [ + bookmarks.StoreClient, + ], + properties: { - searchTerm: { + /** @private */ + searchTerm_: { type: String, observer: 'onSearchTermChanged_', }, }, + attached: function() { + this.watch('searchTerm_', function(state) { + return state.search.term; + }); + }, + /** @return {CrToolbarSearchFieldElement} */ get searchField() { return /** @type {CrToolbarElement} */ (this.$$('cr-toolbar')) @@ -66,11 +77,11 @@ */ onSearchChanged_: function(e) { var searchTerm = /** @type {string} */ (e.detail); - this.fire('search-term-changed', searchTerm); + this.dispatch(bookmarks.actions.setSearchTerm(searchTerm)); }, /** @private */ onSearchTermChanged_: function() { - this.searchField.setValue(this.searchTerm || ''); + this.searchField.setValue(this.searchTerm_ || ''); }, });
diff --git a/chrome/browser/resources/md_bookmarks/types.js b/chrome/browser/resources/md_bookmarks/types.js index 3494f311..9ffdc99c 100644 --- a/chrome/browser/resources/md_bookmarks/types.js +++ b/chrome/browser/resources/md_bookmarks/types.js
@@ -26,6 +26,15 @@ */ var NodeList; +/** + * @typedef{{ + * term: string, + * inProgress: boolean, + * results: !Array<string>, + * }} + */ +var SearchState; + /** @typedef {!Object<string, boolean>} */ var ClosedFolderState; @@ -34,6 +43,7 @@ * nodes: NodeList, * selectedFolder: ?string, * closedFolders: ClosedFolderState, + * search: SearchState, * }} */ var BookmarksPageState;
diff --git a/chrome/browser/resources/md_bookmarks/util.js b/chrome/browser/resources/md_bookmarks/util.js index 3bc4703..8fac070 100644 --- a/chrome/browser/resources/md_bookmarks/util.js +++ b/chrome/browser/resources/md_bookmarks/util.js
@@ -12,7 +12,10 @@ * @return {!Array<string>} */ function getDisplayedList(state) { - return assert(state.nodes[assert(state.selectedFolder)].children); + if (state.selectedFolder) + return assert(state.nodes[state.selectedFolder].children); + + return state.search.results; } /** @@ -52,6 +55,11 @@ nodes: {}, selectedFolder: '0', closedFolders: {}, + search: { + term: '', + inProgress: false, + results: [], + }, }; }
diff --git a/chrome/browser/resources/md_history/history.html b/chrome/browser/resources/md_history/history.html index e9e4b1c..cc221ba 100644 --- a/chrome/browser/resources/md_history/history.html +++ b/chrome/browser/resources/md_history/history.html
@@ -12,6 +12,7 @@ body { height: 100%; margin: 0; + overflow: hidden; } body {
diff --git a/chrome/browser/resources/predictors/predictors.css b/chrome/browser/resources/predictors/predictors.css index fb70515..e1380e4 100644 --- a/chrome/browser/resources/predictors/predictors.css +++ b/chrome/browser/resources/predictors/predictors.css
@@ -37,6 +37,10 @@ padding: 3px; } +tr td:first-child[rowspan] { + background-color: rgb(215, 215, 215); +} + tbody > td:first-child { white-space: nowrap; }
diff --git a/chrome/browser/resources/predictors/resource_prefetch_predictor.js b/chrome/browser/resources/predictors/resource_prefetch_predictor.js index f725105..35e59385 100644 --- a/chrome/browser/resources/predictors/resource_prefetch_predictor.js +++ b/chrome/browser/resources/predictors/resource_prefetch_predictor.js
@@ -72,12 +72,11 @@ var t = document.createElement('td'); t.rowSpan = main.resources.length; t.textContent = truncateString(main.main_frame_url); - t.className = 'last'; row.appendChild(t); } - if (j == main.resources.length - 1) - row.className = 'last'; + row.className = resource.is_prefetchable ? 'action-prerender' + : 'action-none'; row.appendChild(document.createElement('td')).textContent = truncateString(resource.resource_url);
diff --git a/chrome/browser/resources/settings/android_apps_page/android_apps_page.html b/chrome/browser/resources/settings/android_apps_page/android_apps_page.html index be48d94..e8bbd3c 100644 --- a/chrome/browser/resources/settings/android_apps_page/android_apps_page.html +++ b/chrome/browser/resources/settings/android_apps_page/android_apps_page.html
@@ -12,7 +12,6 @@ <style include="settings-shared"> a { -webkit-margin-start: 4px; - height: var(--checkbox-size); } .indented { @@ -24,7 +23,7 @@ <settings-toggle-button id="enabled" class="start" pref="{{prefs.arc.enabled}}" label="$i18n{androidAppsEnabled}" - on-change="onArcEnabledChange_" + on-settings-boolean-control-change="onArcEnabledChange_" no-set-pref> <a href="$i18nRaw{androidAppsLearnMoreUrl}" target="_blank" class="more-actions" on-tap="stopPropagation_">
diff --git a/chrome/browser/resources/settings/appearance_page/appearance_fonts_page.html b/chrome/browser/resources/settings/appearance_page/appearance_fonts_page.html index 53654b0..2ef0b67 100644 --- a/chrome/browser/resources/settings/appearance_page/appearance_fonts_page.html +++ b/chrome/browser/resources/settings/appearance_page/appearance_fonts_page.html
@@ -22,10 +22,14 @@ <div class="settings-box"> <div class="start">$i18n{minimumFont}</div> <div class="list-item" - style$="[[computeStyle_( - prefs.webkit.webprefs.minimum_font_size.value, - prefs.webkit.webprefs.fonts.standard.Zyyy.value)]]"> - <span>[[prefs.webkit.webprefs.minimum_font_size.value]]</span> + style=" + font-size:[[computeMinimumFontSize_( + prefs.webkit.webprefs.minimum_font_size.value)]]px; + font-family: + '[[prefs.webkit.webprefs.fonts.standard.Zyyy.value]]';" + <span>[[ + computeMinimumFontSize_( + prefs.webkit.webprefs.minimum_font_size.value)]]</span> : $i18n{quickBrownFox} </div> <cr-slider id="minimumSizeSlider" @@ -45,9 +49,10 @@ </settings-dropdown-menu> </div> <div class="list-item underbar" - style$="[[computeStyle_( - prefs.webkit.webprefs.default_font_size.value, - prefs.webkit.webprefs.fonts.standard.Zyyy.value)]]"> + style=" + font-size:[[prefs.webkit.webprefs.default_font_size.value]]px; + font-family: + '[[prefs.webkit.webprefs.fonts.standard.Zyyy.value]]';" <span> [[prefs.webkit.webprefs.default_font_size.value]]: $i18n{quickBrownFox} @@ -63,9 +68,10 @@ </settings-dropdown-menu> </div> <div class="list-item underbar" - style$="[[computeStyle_( - prefs.webkit.webprefs.default_font_size.value, - prefs.webkit.webprefs.fonts.serif.Zyyy.value)]]"> + style=" + font-size:[[prefs.webkit.webprefs.default_font_size.value]]px; + font-family: + '[[prefs.webkit.webprefs.fonts.serif.Zyyy.value]]';" <span> [[prefs.webkit.webprefs.default_font_size.value]]: $i18n{quickBrownFox} @@ -81,9 +87,10 @@ </settings-dropdown-menu> </div> <div class="list-item underbar" - style$="{{computeStyle_( - prefs.webkit.webprefs.default_font_size.value, - prefs.webkit.webprefs.fonts.sansserif.Zyyy.value)}}"> + style=" + font-size:[[prefs.webkit.webprefs.default_font_size.value]]px; + font-family: + '[[prefs.webkit.webprefs.fonts.sansserif.Zyyy.value]]';" <span> [[prefs.webkit.webprefs.default_font_size.value]]: $i18n{quickBrownFox} @@ -97,11 +104,12 @@ pref="{{prefs.webkit.webprefs.fonts.fixed.Zyyy}}" menu-options="[[fontOptions_]]"> </settings-dropdown-menu> - </div> + </div> <div class="list-item" - style$="[[computeStyle_( - prefs.webkit.webprefs.default_fixed_font_size.value, - prefs.webkit.webprefs.fonts.fixed.Zyyy.value)]]"> + style=" + font-size:[[prefs.webkit.webprefs.default_font_size.value]]px; + font-family: + '[[prefs.webkit.webprefs.fonts.fixed.Zyyy.value]]';" <span> [[prefs.webkit.webprefs.default_font_size.value]]: $i18n{quickBrownFox}
diff --git a/chrome/browser/resources/settings/appearance_page/appearance_fonts_page.js b/chrome/browser/resources/settings/appearance_page/appearance_fonts_page.js index 17d826a..7d1509d 100644 --- a/chrome/browser/resources/settings/appearance_page/appearance_fonts_page.js +++ b/chrome/browser/resources/settings/appearance_page/appearance_fonts_page.js
@@ -156,15 +156,13 @@ }, /** - * Creates an html style value. - * @param {number} fontSize The font size to use. - * @param {string} fontFamily The name of the font family use. - * @return {string} + * Get the minimum font size, accounting for unset prefs. + * @return {?} * @private */ - computeStyle_: function(fontSize, fontFamily) { - return 'font-size: ' + fontSize + "px; font-family: '" + fontFamily + - "';"; + computeMinimumFontSize_: function() { + return this.get('prefs.webkit.webprefs.minimum_font_size.value') || + MINIMUM_FONT_SIZE_RANGE_[0]; }, }); })();
diff --git a/chrome/browser/resources/settings/focusable_iron_list_item_behavior.js b/chrome/browser/resources/settings/focusable_iron_list_item_behavior.js index 9972177..20e58c5 100644 --- a/chrome/browser/resources/settings/focusable_iron_list_item_behavior.js +++ b/chrome/browser/resources/settings/focusable_iron_list_item_behavior.js
@@ -29,10 +29,15 @@ /** * Unflag when moving away via keyboard (e.g. tabbing onto its children). + * @param {!Event} event * @private */ - onKeyDown_: function() { + onKeyDown_: function(event) { this.focusedByKey_ = false; + + // For these types of items, don't propagate enter to iron-list's listener. + if (event.key == 'Enter') + event.stopPropagation(); }, /**
diff --git a/chrome/browser/resources/settings/icons.html b/chrome/browser/resources/settings/icons.html index 39ac0e83..66566f1 100644 --- a/chrome/browser/resources/settings/icons.html +++ b/chrome/browser/resources/settings/icons.html
@@ -1,6 +1,9 @@ <link rel="import" href="chrome://resources/html/polymer.html"> <link rel="import" href="chrome://resources/polymer/v1_0/iron-iconset-svg/iron-iconset-svg.html"> +<!-- +List icons here rather than importing large sets of (e.g. Polymer) icons. +--> <iron-iconset-svg name="settings" size="24"> <svg> <defs> @@ -90,7 +93,6 @@ <g id="notifications"><path d="M12 22c1.1 0 2-.9 2-2h-4c0 1.1.89 2 2 2zm6-6v-5c0-3.07-1.64-5.64-4.5-6.32V4c0-.83-.67-1.5-1.5-1.5s-1.5.67-1.5 1.5v.68C7.63 5.36 6 7.92 6 11v5l-2 2v1h16v-1l-2-2z"></path></g> <g id="pdf"><path d="M7 11.5h1v-1H7v1zM19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-9.5 8.5c0 .83-.67 1.5-1.5 1.5H7v2H5.5V9H8c.83 0 1.5.67 1.5 1.5v1zm10-1H17v1h1.5V13H17v2h-1.5V9h4v1.5zm-5 3c0 .83-.67 1.5-1.5 1.5h-2.5V9H13c.83 0 1.5.67 1.5 1.5v3zm-2.5 0h1v-3h-1v3z"></path><path fill="none" d="M0 0h24v24H0z"></path></g> <g id="palette"><path d="M12 3c-4.97 0-9 4.03-9 9s4.03 9 9 9c.83 0 1.5-.67 1.5-1.5 0-.39-.15-.74-.39-1.01-.23-.26-.38-.61-.38-.99 0-.83.67-1.5 1.5-1.5H16c2.76 0 5-2.24 5-5 0-4.42-4.03-8-9-8zm-5.5 9c-.83 0-1.5-.67-1.5-1.5S5.67 9 6.5 9 8 9.67 8 10.5 7.33 12 6.5 12zm3-4C8.67 8 8 7.33 8 6.5S8.67 5 9.5 5s1.5.67 1.5 1.5S10.33 8 9.5 8zm5 0c-.83 0-1.5-.67-1.5-1.5S13.67 5 14.5 5s1.5.67 1.5 1.5S15.33 8 14.5 8zm3 4c-.83 0-1.5-.67-1.5-1.5S16.67 9 17.5 9s1.5.67 1.5 1.5-.67 1.5-1.5 1.5z"></path></g> - <g id="people"><path d="M16 11c1.66 0 2.99-1.34 2.99-3S17.66 5 16 5c-1.66 0-3 1.34-3 3s1.34 3 3 3zm-8 0c1.66 0 2.99-1.34 2.99-3S9.66 5 8 5C6.34 5 5 6.34 5 8s1.34 3 3 3zm0 2c-2.33 0-7 1.17-7 3.5V19h14v-2.5c0-2.33-4.67-3.5-7-3.5zm8 0c-.29 0-.62.02-.97.05 1.16.84 1.97 1.97 1.97 3.45V19h6v-2.5c0-2.33-4.67-3.5-7-3.5z"></path></g> <g id="photo"><path d="M21 19V5c0-1.1-.9-2-2-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2zM8.5 13.5l2.5 3.01L14.5 12l4.5 6H5l3.5-4.5z"></path></g> <g id="power-settings-new"><path d="M13 3h-2v10h2V3zm4.83 2.17l-1.42 1.42C17.99 7.86 19 9.81 19 12c0 3.87-3.13 7-7 7s-7-3.13-7-7c0-2.19 1.01-4.14 2.58-5.42L6.17 5.17C4.23 6.82 3 9.26 3 12c0 4.97 4.03 9 9 9s9-4.03 9-9c0-2.74-1.23-5.18-3.17-6.83z"></path></g> <g id="protocol-handler"><path d="M21.72 11.33l-6.644-7.035a.97.97 0 0 0-1.38-.01l-1.67 1.72-1.617-1.712a.97.97 0 0 0-1.38-.01l-6.737 6.935c-.187.191-.29.447-.292.719-.002.272.099.529.28.722l6.644 7.034a.949.949 0 0 0 1.38.011l1.671-1.718 1.615 1.71a.949.949 0 0 0 1.381.01l6.74-6.935a1.054 1.054 0 0 0 .01-1.44zM6.947 12.464l3.657 3.785-.974.98-5.273-5.456 5.349-5.378.929.962-3.677 3.7a.998.998 0 0 0-.292.702 1 1 0 0 0 .28.705zm7.35 4.768l-.931-.963 3.68-3.7a1.012 1.012 0 0 0 .007-1.407l-3.656-3.784.974-.98 5.273 5.456-5.348 5.378z"></path></g>
diff --git a/chrome/browser/resources/settings/internet_page/network_proxy.html b/chrome/browser/resources/settings/internet_page/network_proxy.html index 4ed793c..843691f 100644 --- a/chrome/browser/resources/settings/internet_page/network_proxy.html +++ b/chrome/browser/resources/settings/internet_page/network_proxy.html
@@ -80,7 +80,7 @@ <settings-toggle-button id="allowShared" class="start" pref="{{prefs.settings.use_shared_proxies}}" label="$i18n{networkProxyAllowShared}" - on-change="onAllowSharedProxiesChange_" + on-settings-boolean-control-change="onAllowSharedProxiesChange_" no-set-pref> </settings-toggle-button> </div>
diff --git a/chrome/browser/resources/settings/people_page/people_page.html b/chrome/browser/resources/settings/people_page/people_page.html index 75d06407..80a0c9f2 100644 --- a/chrome/browser/resources/settings/people_page/people_page.html +++ b/chrome/browser/resources/settings/people_page/people_page.html
@@ -123,14 +123,20 @@ </if> <div class="flex text-elide"> <span id="profile-name">[[profileName_]]</span> - <div class="secondary" hidden="[[!syncStatus.signedIn]]" - id="profileNameSecondary"> + <div class="secondary" hidden="[[!syncStatus.signedIn]]"> [[syncStatus.signedInUsername]] </div> </div> +<if expr="not chromeos"> <button class="subpage-arrow" is="paper-icon-button-light" - aria-labelledby="profile-name" - aria-describedby="profileNameSecondary"></button> + aria-label="$i18n{editPerson}" + aria-describedby="profile-name"></button> +</if> +<if expr="chromeos"> + <button class="subpage-arrow" is="paper-icon-button-light" + aria-label="$i18n{changePictureTitle}" + aria-describedby="profile-name"></button> +</if> </div> <if expr="not chromeos"> <template is="dom-if" if="[[showSignin_(syncStatus)]]">
diff --git a/chrome/browser/resources/settings/settings_main/compiled_resources2.gyp b/chrome/browser/resources/settings/settings_main/compiled_resources2.gyp index 2efdb05..bb2d24bf 100644 --- a/chrome/browser/resources/settings/settings_main/compiled_resources2.gyp +++ b/chrome/browser/resources/settings/settings_main/compiled_resources2.gyp
@@ -6,12 +6,14 @@ { 'target_name': 'settings_main', 'dependencies': [ + '<(DEPTH)/third_party/polymer/v1_0/components-chromium/iron-a11y-announcer/compiled_resources2.gyp:iron-a11y-announcer-extracted', + '<(DEPTH)/ui/webui/resources/js/compiled_resources2.gyp:assert', + '<(DEPTH)/ui/webui/resources/js/compiled_resources2.gyp:load_time_data', '../compiled_resources2.gyp:route', '../compiled_resources2.gyp:search_settings', '../about_page/compiled_resources2.gyp:about_page', '../basic_page/compiled_resources2.gyp:basic_page', '../settings_page/compiled_resources2.gyp:main_page_behavior', - '<(DEPTH)/ui/webui/resources/js/compiled_resources2.gyp:assert', '../settings_page/compiled_resources2.gyp:settings_page_visibility', '../settings_ui/compiled_resources2.gyp:settings_ui_types', ],
diff --git a/chrome/browser/resources/settings/settings_main/settings_main.html b/chrome/browser/resources/settings/settings_main/settings_main.html index 76c37239..e20499de 100644 --- a/chrome/browser/resources/settings/settings_main/settings_main.html +++ b/chrome/browser/resources/settings/settings_main/settings_main.html
@@ -1,10 +1,12 @@ <link rel="import" href="chrome://resources/cr_elements/icons.html"> <link rel="import" href="chrome://resources/html/polymer.html"> <link rel="import" href="chrome://resources/html/promise_resolver.html"> +<link rel="import" href="chrome://resources/polymer/v1_0/iron-a11y-announcer/iron-a11y-announcer.html"> <link rel="import" href="chrome://resources/polymer/v1_0/iron-icon/iron-icon.html"> <link rel="import" href="chrome://resources/polymer/v1_0/paper-button/paper-button.html"> <link rel="import" href="../about_page/about_page.html"> <link rel="import" href="../basic_page/basic_page.html"> +<link rel="import" href="../i18n_setup.html"> <link rel="import" href="../route.html"> <link rel="import" href="../settings_vars_css.html">
diff --git a/chrome/browser/resources/settings/settings_main/settings_main.js b/chrome/browser/resources/settings/settings_main/settings_main.js index af79c71c..2fb914d 100644 --- a/chrome/browser/resources/settings/settings_main/settings_main.js +++ b/chrome/browser/resources/settings/settings_main/settings_main.js
@@ -267,6 +267,15 @@ this.inSearchMode_ = !result.wasClearSearch; this.showNoResultsFound_ = this.inSearchMode_ && result.didFindMatches; + + if (this.inSearchMode_) { + Polymer.IronA11yAnnouncer.requestAvailability(); + this.fire('iron-announce', { + text: this.showNoResultsFound_ ? + loadTimeData.getString('searchNoResults') : + loadTimeData.getStringF('searchResults', query) + }); + } }.bind(this)); }.bind(this), 0); }.bind(this));
diff --git a/chrome/browser/resources/settings/settings_menu/settings_menu.html b/chrome/browser/resources/settings/settings_menu/settings_menu.html index 849f62e..afc0aa9 100644 --- a/chrome/browser/resources/settings/settings_menu/settings_menu.html +++ b/chrome/browser/resources/settings/settings_menu/settings_menu.html
@@ -92,7 +92,7 @@ </a> </if> <a id="people" href="/people" hidden="[[!pageVisibility.people]]"> - <iron-icon icon="settings:people"></iron-icon> + <iron-icon icon="cr:person"></iron-icon> $i18n{peoplePageTitle} </a> <a href="/appearance" hidden="[[!pageVisibility.appearance]]">
diff --git a/chrome/browser/resources/welcome/welcome.css b/chrome/browser/resources/welcome/welcome.css index 403538f..2ca056c 100644 --- a/chrome/browser/resources/welcome/welcome.css +++ b/chrome/browser/resources/welcome/welcome.css
@@ -9,8 +9,8 @@ flex-direction: column; font-size: 100%; justify-content: center; + margin: 0; min-height: 100vh; - overflow-y: hidden; } @keyframes slideUpContent { @@ -99,6 +99,11 @@ } .content { + height: 100%; + overflow-y: hidden; +} + +.slider { align-items: center; animation: slideUpContent 600ms 1.8s cubic-bezier(.4, .2, 0, 1) both; display: flex;
diff --git a/chrome/browser/resources/welcome/welcome.html b/chrome/browser/resources/welcome/welcome.html index d183cea3..198ea7df 100644 --- a/chrome/browser/resources/welcome/welcome.html +++ b/chrome/browser/resources/welcome/welcome.html
@@ -15,21 +15,23 @@ </head> <body> <div class="content"> - <div class="logo"> - <div class="logo-icon"></div> - <div class="logo-shadow"></div> - </div> - <div class="heading">$i18n{headerText}</div> + <div class="slider"> + <div class="logo"> + <div class="logo-icon"></div> + <div class="logo-shadow"></div> + </div> + <div class="heading">$i18n{headerText}</div> <if expr="_google_chrome"> - <div class="subheading">$i18n{subheaderText}</div> + <div class="subheading">$i18n{subheaderText}</div> </if> - <div class="signin"> - <div class="signin-description">$i18n{descriptionText}</div> - <div class="signin-buttons"> - <paper-button class="action" id="accept-button"> - $i18n{acceptText} - </paper-button> - <a href="#" class="link" id="decline-button">$i18n{declineText}</a> + <div class="signin"> + <div class="signin-description">$i18n{descriptionText}</div> + <div class="signin-buttons"> + <paper-button class="action" id="accept-button"> + $i18n{acceptText} + </paper-button> + <a href="#" class="link" id="decline-button">$i18n{declineText}</a> + </div> </div> </div> </div>
diff --git a/chrome/browser/ssl/chrome_ssl_host_state_delegate_test.cc b/chrome/browser/ssl/chrome_ssl_host_state_delegate_test.cc index c505b2c18..9dae48a 100644 --- a/chrome/browser/ssl/chrome_ssl_host_state_delegate_test.cc +++ b/chrome/browser/ssl/chrome_ssl_host_state_delegate_test.cc
@@ -15,6 +15,7 @@ #include "chrome/browser/browsing_data/browsing_data_remover.h" #include "chrome/browser/browsing_data/browsing_data_remover_factory.h" #include "chrome/browser/browsing_data/browsing_data_remover_test_util.h" +#include "chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.h" #include "chrome/browser/content_settings/host_content_settings_map_factory.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/ssl/chrome_ssl_host_state_delegate_factory.h" @@ -619,13 +620,13 @@ BrowsingDataRemover* remover = BrowsingDataRemoverFactory::GetForBrowserContext(profile); BrowsingDataRemoverCompletionObserver completion_observer(remover); - remover->RemoveAndReply(browsing_data::CalculateBeginDeleteTime( - browsing_data::TimePeriod::LAST_HOUR), - browsing_data::CalculateEndDeleteTime( - browsing_data::TimePeriod::LAST_HOUR), - BrowsingDataRemover::REMOVE_HISTORY, - BrowsingDataHelper::UNPROTECTED_WEB, - &completion_observer); + remover->RemoveAndReply( + browsing_data::CalculateBeginDeleteTime( + browsing_data::TimePeriod::LAST_HOUR), + browsing_data::CalculateEndDeleteTime( + browsing_data::TimePeriod::LAST_HOUR), + ChromeBrowsingDataRemoverDelegate::DATA_TYPE_HISTORY, + BrowsingDataRemover::ORIGIN_TYPE_UNPROTECTED_WEB, &completion_observer); completion_observer.BlockUntilCompletion(); } };
diff --git a/chrome/browser/sync/test/integration/enable_disable_test.cc b/chrome/browser/sync/test/integration/enable_disable_test.cc index d39871c..a76f61c 100644 --- a/chrome/browser/sync/test/integration/enable_disable_test.cc +++ b/chrome/browser/sync/test/integration/enable_disable_test.cc
@@ -158,7 +158,13 @@ DISALLOW_COPY_AND_ASSIGN(EnableDisableSingleClientTest); }; -IN_PROC_BROWSER_TEST_F(EnableDisableSingleClientTest, EnableOneAtATime) { +// crbug.com/689662 +#if defined(OS_CHROMEOS) +#define MAYBE_EnableOneAtATime DISABLED_EnableOneAtATime +#else +#define MAYBE_EnableOneAtATime EnableOneAtATime +#endif +IN_PROC_BROWSER_TEST_F(EnableDisableSingleClientTest, MAYBE_EnableOneAtATime) { // Setup sync with no enabled types. SetupTest(false); @@ -180,7 +186,13 @@ } } -IN_PROC_BROWSER_TEST_F(EnableDisableSingleClientTest, DisableOneAtATime) { +// crbug.com/689662 +#if defined(OS_CHROMEOS) +#define MAYBE_DisableOneAtATime DISABLED_DisableOneAtATime +#else +#define MAYBE_DisableOneAtATime DisableOneAtATime +#endif +IN_PROC_BROWSER_TEST_F(EnableDisableSingleClientTest, MAYBE_DisableOneAtATime) { // Setup sync with no disabled types. SetupTest(true);
diff --git a/chrome/browser/sync/test/integration/single_client_printers_sync_test.cc b/chrome/browser/sync/test/integration/single_client_printers_sync_test.cc index 4b41c7e..f8f87d9 100644 --- a/chrome/browser/sync/test/integration/single_client_printers_sync_test.cc +++ b/chrome/browser/sync/test/integration/single_client_printers_sync_test.cc
@@ -79,7 +79,13 @@ } // Verify that merging data added before sync works. -IN_PROC_BROWSER_TEST_F(SingleClientPrintersSyncTest, AddBeforeSetup) { +// crbug.com/689662 +#if defined(OS_CHROMEOS) +#define MAYBE_AddBeforeSetup DISABLED_AddBeforeSetup +#else +#define MAYBE_AddBeforeSetup AddBeforeSetup +#endif +IN_PROC_BROWSER_TEST_F(SingleClientPrintersSyncTest, MAYBE_AddBeforeSetup) { ASSERT_TRUE(SetupClients()); AddPrinter(GetPrinterStore(0), printers_helper::CreateTestPrinter(0));
diff --git a/chrome/browser/sync/test/integration/single_client_sessions_sync_test.cc b/chrome/browser/sync/test/integration/single_client_sessions_sync_test.cc index 6816ff4..216834d 100644 --- a/chrome/browser/sync/test/integration/single_client_sessions_sync_test.cc +++ b/chrome/browser/sync/test/integration/single_client_sessions_sync_test.cc
@@ -323,7 +323,13 @@ {{base_url.spec()}, {new_window_url.spec(), moved_tab_url.spec()}})); } -IN_PROC_BROWSER_TEST_F(SingleClientSessionsSyncTest, CookieJarMismatch) { +// crbug.com/689662 +#if defined(OS_CHROMEOS) +#define MAYBE_CookieJarMismatch DISABLED_CookieJarMismatch +#else +#define MAYBE_CookieJarMismatch CookieJarMismatch +#endif +IN_PROC_BROWSER_TEST_F(SingleClientSessionsSyncTest, MAYBE_CookieJarMismatch) { ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; ASSERT_TRUE(CheckInitialState(0));
diff --git a/chrome/browser/sync/test/integration/sync_errors_test.cc b/chrome/browser/sync/test/integration/sync_errors_test.cc index 9e28f92e..7b2227a3 100644 --- a/chrome/browser/sync/test/integration/sync_errors_test.cc +++ b/chrome/browser/sync/test/integration/sync_errors_test.cc
@@ -147,7 +147,13 @@ // This test verifies that sync keeps retrying if it encounters error during // setup. -IN_PROC_BROWSER_TEST_F(SyncErrorTest, ErrorWhileSettingUp) { +// crbug.com/689662 +#if defined(OS_CHROMEOS) +#define MAYBE_ErrorWhileSettingUp DISABLED_ErrorWhileSettingUp +#else +#define MAYBE_ErrorWhileSettingUp ErrorWhileSettingUp +#endif +IN_PROC_BROWSER_TEST_F(SyncErrorTest, MAYBE_ErrorWhileSettingUp) { ASSERT_TRUE(SetupClients()); #if !defined(OS_CHROMEOS)
diff --git a/chrome/browser/sync/test/integration/two_client_app_list_sync_test.cc b/chrome/browser/sync/test/integration/two_client_app_list_sync_test.cc index b46323a..c8d22d29 100644 --- a/chrome/browser/sync/test/integration/two_client_app_list_sync_test.cc +++ b/chrome/browser/sync/test/integration/two_client_app_list_sync_test.cc
@@ -332,7 +332,13 @@ ASSERT_FALSE(IsIncognitoEnabled(GetProfile(1), 0)); } -IN_PROC_BROWSER_TEST_F(TwoClientAppListSyncTest, DisableApps) { +// crbug.com/689662 +#if defined(OS_CHROMEOS) +#define MAYBE_DisableApps DISABLED_DisableApps +#else +#define MAYBE_DisableApps DisableApps +#endif +IN_PROC_BROWSER_TEST_F(TwoClientAppListSyncTest, MAYBE_DisableApps) { ASSERT_TRUE(SetupSync()); ASSERT_TRUE(AllProfilesHaveSameAppList()); @@ -371,7 +377,13 @@ // Install some apps on both clients, then sync. Move an app on one client // and sync. Both clients should have the updated position for the app. -IN_PROC_BROWSER_TEST_F(TwoClientAppListSyncTest, Move) { +// crbug.com/689662 +#if defined(OS_CHROMEOS) +#define MAYBE_Move DISABLED_Move +#else +#define MAYBE_Move Move +#endif +IN_PROC_BROWSER_TEST_F(TwoClientAppListSyncTest, MAYBE_Move) { ASSERT_TRUE(SetupSync()); ASSERT_TRUE(AllProfilesHaveSameAppList());
diff --git a/chrome/browser/sync/test/integration/two_client_printers_sync_test.cc b/chrome/browser/sync/test/integration/two_client_printers_sync_test.cc index 9633883..29ea6f0 100644 --- a/chrome/browser/sync/test/integration/two_client_printers_sync_test.cc +++ b/chrome/browser/sync/test/integration/two_client_printers_sync_test.cc
@@ -128,7 +128,13 @@ EXPECT_EQ(valid_message, GetPrinterStore(1)->GetPrinters()[0]->description()); } -IN_PROC_BROWSER_TEST_F(TwoClientPrintersSyncTest, SimpleMerge) { +// crbug.com/689662 +#if defined(OS_CHROMEOS) +#define MAYBE_SimpleMerge DISABLED_SimpleMerge +#else +#define MAYBE_SimpleMerge SimpleMerge +#endif +IN_PROC_BROWSER_TEST_F(TwoClientPrintersSyncTest, MAYBE_SimpleMerge) { ASSERT_TRUE(SetupClients()); base::RunLoop().RunUntilIdle();
diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn index 6add01a..b886345a 100644 --- a/chrome/browser/ui/BUILD.gn +++ b/chrome/browser/ui/BUILD.gn
@@ -8,6 +8,7 @@ import("//build/config/ui.gni") import("//build/split_static_library.gni") import("//chrome/common/features.gni") +import("//device/vr/features.gni") import("//extensions/features/features.gni") import("//media/media_options.gni") import("//ppapi/features/features.gni") @@ -578,6 +579,7 @@ "//device/base", "//device/bluetooth/public/interfaces:experimental_interfaces", "//device/usb", + "//device/vr:features", "//extensions/features", "//media", "//net:net", @@ -1524,6 +1526,8 @@ "views/payments/preselected_combobox_model.h", "views/payments/profile_list_view_controller.cc", "views/payments/profile_list_view_controller.h", + "views/payments/shipping_option_view_controller.cc", + "views/payments/shipping_option_view_controller.h", "views/payments/validating_combobox.cc", "views/payments/validating_combobox.h", "views/payments/validating_textfield.cc", @@ -2114,9 +2118,6 @@ ] } } - if (ui_compositor_image_transport) { - deps += [ "//ui/gl" ] - } if (use_nss_certs) { sources += [ "crypto_module_delegate_nss.cc", @@ -2838,6 +2839,14 @@ "cocoa/one_click_signin_dialog_controller.mm", "cocoa/one_click_signin_view_controller.h", "cocoa/one_click_signin_view_controller.mm", + "cocoa/page_info/permission_selector_button.h", + "cocoa/page_info/permission_selector_button.mm", + "cocoa/page_info/split_block_button.h", + "cocoa/page_info/split_block_button.mm", + "cocoa/page_info/website_settings_bubble_controller.h", + "cocoa/page_info/website_settings_bubble_controller.mm", + "cocoa/page_info/website_settings_utils_cocoa.h", + "cocoa/page_info/website_settings_utils_cocoa.mm", "cocoa/passwords/account_avatar_fetcher_manager.h", "cocoa/passwords/account_avatar_fetcher_manager.mm", "cocoa/passwords/account_chooser_view_controller.h", @@ -2986,14 +2995,6 @@ "cocoa/website_settings/permission_bubble_controller.h", "cocoa/website_settings/permission_bubble_controller.mm", "cocoa/website_settings/permission_prompt_impl_views_mac.mm", - "cocoa/website_settings/permission_selector_button.h", - "cocoa/website_settings/permission_selector_button.mm", - "cocoa/website_settings/split_block_button.h", - "cocoa/website_settings/split_block_button.mm", - "cocoa/website_settings/website_settings_bubble_controller.h", - "cocoa/website_settings/website_settings_bubble_controller.mm", - "cocoa/website_settings/website_settings_utils_cocoa.h", - "cocoa/website_settings/website_settings_utils_cocoa.mm", "cocoa/window_size_autosaver.h", "cocoa/window_size_autosaver.mm",
diff --git a/chrome/browser/ui/android/external_protocol_dialog_android.cc b/chrome/browser/ui/android/external_protocol_dialog_android.cc index 5ce3e65..56851e1 100644 --- a/chrome/browser/ui/android/external_protocol_dialog_android.cc +++ b/chrome/browser/ui/android/external_protocol_dialog_android.cc
@@ -39,6 +39,7 @@ page_transition, false, // is_redirect, doesn't matter here. true, // is_external_protocol - false); // is_main_frame + false, // is_main_frame + GURL()); // base_url_for_data_url, not applicable. delegate->ShouldIgnoreNavigation(navigation_params); }
diff --git a/chrome/browser/ui/android/usb_chooser_dialog_android.cc b/chrome/browser/ui/android/usb_chooser_dialog_android.cc index a31f6ab..c74ce3a 100644 --- a/chrome/browser/ui/android/usb_chooser_dialog_android.cc +++ b/chrome/browser/ui/android/usb_chooser_dialog_android.cc
@@ -236,7 +236,8 @@ return device::FindInWebUsbAllowedOrigins( device->webusb_allowed_origins(), - render_frame_host_->GetLastCommittedURL().GetOrigin()); + render_frame_host_->GetLastCommittedURL().GetOrigin(), base::nullopt, + base::nullopt); } // static
diff --git a/chrome/browser/ui/ash/app_list/app_list_interactive_uitest.cc b/chrome/browser/ui/ash/app_list/app_list_interactive_uitest.cc index a4386b1f..84b19b6 100644 --- a/chrome/browser/ui/ash/app_list/app_list_interactive_uitest.cc +++ b/chrome/browser/ui/ash/app_list/app_list_interactive_uitest.cc
@@ -10,6 +10,7 @@ #include "ash/common/wm_shell.h" #include "ash/common/wm_window.h" #include "ash/public/cpp/shell_window_ids.h" +#include "ash/shell.h" #include "base/run_loop.h" #include "chrome/test/base/in_process_browser_test.h" #include "ui/app_list/presenter/app_list.h" @@ -19,12 +20,14 @@ // An integration test to toggle the app list by pressing the shelf button. IN_PROC_BROWSER_TEST_F(AppListTest, PressAppListButtonToShowAndDismiss) { - ash::WmShell* shell = ash::WmShell::Get(); - ash::WmShelf* shelf = ash::WmShelf::ForWindow(shell->GetActiveWindow()); + ash::Shell* shell = ash::Shell::Get(); + ash::WmShelf* shelf = + ash::WmShelf::ForWindow(ash::WmShell::Get()->GetActiveWindow()); ash::ShelfWidget* shelf_widget = shelf->shelf_widget(); ash::AppListButton* app_list_button = shelf_widget->GetAppListButton(); - ash::WmWindow* root_window = shell->GetActiveWindow()->GetRootWindow(); + ash::WmWindow* root_window = + ash::WmShell::Get()->GetActiveWindow()->GetRootWindow(); ash::WmWindow* app_list_container = root_window->GetChildByShellWindowId( ash::kShellWindowId_AppListContainer); ui::test::EventGenerator generator(shelf_widget->GetNativeWindow());
diff --git a/chrome/browser/ui/ash/launcher/arc_app_deferred_launcher_controller.cc b/chrome/browser/ui/ash/launcher/arc_app_deferred_launcher_controller.cc index 0cde6b0..57f6d0c 100644 --- a/chrome/browser/ui/ash/launcher/arc_app_deferred_launcher_controller.cc +++ b/chrome/browser/ui/ash/launcher/arc_app_deferred_launcher_controller.cc
@@ -197,9 +197,9 @@ ArcAppWindowLauncherController::GetShelfAppIdFromArcAppId(app_id); const ash::ShelfID shelf_id = owner_->GetShelfIDForAppID(shelf_app_id); - // We are allowed to apply new deferred controller only over shortcut. + // We are allowed to apply new deferred controller only over non-active items. const ash::ShelfItem* item = owner_->GetItem(shelf_id); - if (item && item->type != ash::TYPE_APP_SHORTCUT) + if (item && item->status != ash::STATUS_CLOSED) return; ArcAppDeferredLauncherItemController* controller =
diff --git a/chrome/browser/ui/ash/launcher/chrome_launcher_controller_impl_unittest.cc b/chrome/browser/ui/ash/launcher/chrome_launcher_controller_impl_unittest.cc index 98b84660..fc73b21 100644 --- a/chrome/browser/ui/ash/launcher/chrome_launcher_controller_impl_unittest.cc +++ b/chrome/browser/ui/ash/launcher/chrome_launcher_controller_impl_unittest.cc
@@ -1932,6 +1932,55 @@ (request1->IsForApp(app3) && request2->IsForApp(app2))); } +// Ensure the deferred controller does not override the active app controller +// (crbug.com/701152). +TEST_P(ChromeLauncherControllerImplWithArcTest, ArcDeferredLaunchForActiveApp) { + RecreateChromeLauncher(); + SendListOfArcApps(); + arc_test_.StopArcInstance(); + + const arc::mojom::AppInfo& app = arc_test_.fake_apps()[0]; + const std::string app_id = ArcAppTest::GetAppId(app); + + launcher_controller_->PinAppWithID(app_id); + EXPECT_TRUE(launcher_controller_->IsAppPinned(app_id)); + const ash::ShelfID shelf_id = + launcher_controller_->GetShelfIDForAppID(app_id); + EXPECT_NE(ash::kInvalidShelfID, shelf_id); + + int item_index = model_->ItemIndexByID(shelf_id); + ASSERT_GE(item_index, 0); + + EXPECT_EQ(model_->items()[item_index].status, ash::STATUS_CLOSED); + EXPECT_EQ(model_->items()[item_index].type, ash::TYPE_APP_SHORTCUT); + + // Play Store app is ARC app that might be represented by native Chrome + // platform app. + AppWindowLauncherItemController* app_controller = + new ExtensionAppWindowLauncherItemController(app_id, "", + launcher_controller_.get()); + launcher_controller_->SetItemController(shelf_id, app_controller); + launcher_controller_->SetItemStatus(shelf_id, ash::STATUS_RUNNING); + + // This launch request should be ignored in case of active app. + arc::LaunchApp(profile(), app_id, ui::EF_LEFT_MOUSE_BUTTON); + EXPECT_FALSE(launcher_controller_->GetArcDeferredLauncher()->HasApp(app_id)); + + // Close app but shortcut should exist. + launcher_controller_->CloseLauncherItem(shelf_id); + EXPECT_EQ(shelf_id, launcher_controller_->GetShelfIDForAppID(app_id)); + + // This should switch shelf item into closed state. + item_index = model_->ItemIndexByID(shelf_id); + ASSERT_GE(item_index, 0); + EXPECT_EQ(model_->items()[item_index].status, ash::STATUS_CLOSED); + EXPECT_EQ(model_->items()[item_index].type, ash::TYPE_APP_SHORTCUT); + + // Now launch request should not be ignored. + arc::LaunchApp(profile(), app_id, ui::EF_LEFT_MOUSE_BUTTON); + EXPECT_TRUE(launcher_controller_->GetArcDeferredLauncher()->HasApp(app_id)); +} + TEST_P(ChromeLauncherControllerImplMultiProfileWithArcTest, ArcMultiUser) { SendListOfArcApps();
diff --git a/chrome/browser/ui/ash/multi_user/user_switch_animator_chromeos.cc b/chrome/browser/ui/ash/multi_user/user_switch_animator_chromeos.cc index 525587b..ca9a7fac 100644 --- a/chrome/browser/ui/ash/multi_user/user_switch_animator_chromeos.cc +++ b/chrome/browser/ui/ash/multi_user/user_switch_animator_chromeos.cc
@@ -115,7 +115,7 @@ animation_step_(ANIMATION_STEP_HIDE_OLD_USER), screen_cover_(GetScreenCover(NULL)), windows_by_account_id_() { - ash::WmShell::Get()->DismissAppList(); + ash::Shell::Get()->DismissAppList(); BuildUserToWindowsListMap(); AdvanceUserTransitionAnimation();
diff --git a/chrome/browser/ui/browser_commands.cc b/chrome/browser/ui/browser_commands.cc index 5225294..7f01f95 100644 --- a/chrome/browser/ui/browser_commands.cc +++ b/chrome/browser/ui/browser_commands.cc
@@ -14,6 +14,7 @@ #include "chrome/browser/browsing_data/browsing_data_helper.h" #include "chrome/browser/browsing_data/browsing_data_remover.h" #include "chrome/browser/browsing_data/browsing_data_remover_factory.h" +#include "chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.h" #include "chrome/browser/chrome_notification_types.h" #include "chrome/browser/devtools/devtools_window.h" #include "chrome/browser/dom_distiller/tab_utils.h" @@ -1202,8 +1203,8 @@ BrowsingDataRemover* remover = BrowsingDataRemoverFactory::GetForBrowserContext(browser->profile()); remover->Remove(base::Time(), base::Time::Max(), - BrowsingDataRemover::REMOVE_CACHE, - BrowsingDataHelper::UNPROTECTED_WEB); + BrowsingDataRemover::DATA_TYPE_CACHE, + BrowsingDataRemover::ORIGIN_TYPE_UNPROTECTED_WEB); // BrowsingDataRemover takes care of deleting itself when done. }
diff --git a/chrome/browser/ui/cocoa/browser_window_cocoa.mm b/chrome/browser/ui/cocoa/browser_window_cocoa.mm index 0f2bf1a..f5b2d54 100644 --- a/chrome/browser/ui/cocoa/browser_window_cocoa.mm +++ b/chrome/browser/ui/cocoa/browser_window_cocoa.mm
@@ -40,12 +40,12 @@ #include "chrome/browser/ui/cocoa/key_equivalent_constants.h" #import "chrome/browser/ui/cocoa/location_bar/location_bar_view_mac.h" #import "chrome/browser/ui/cocoa/nsmenuitem_additions.h" +#import "chrome/browser/ui/cocoa/page_info/website_settings_bubble_controller.h" #import "chrome/browser/ui/cocoa/profiles/avatar_base_controller.h" #include "chrome/browser/ui/cocoa/restart_browser.h" #include "chrome/browser/ui/cocoa/status_bubble_mac.h" #include "chrome/browser/ui/cocoa/task_manager_mac.h" #import "chrome/browser/ui/cocoa/toolbar/toolbar_controller.h" -#import "chrome/browser/ui/cocoa/website_settings/website_settings_bubble_controller.h" #include "chrome/browser/ui/exclusive_access/exclusive_access_context.h" #include "chrome/browser/ui/profile_chooser_constants.h" #include "chrome/browser/ui/tabs/tab_strip_model.h"
diff --git a/chrome/browser/ui/cocoa/browser_window_touch_bar.mm b/chrome/browser/ui/cocoa/browser_window_touch_bar.mm index 274ff4cb..06d7c2e1 100644 --- a/chrome/browser/ui/cocoa/browser_window_touch_bar.mm +++ b/chrome/browser/ui/cocoa/browser_window_touch_bar.mm
@@ -9,6 +9,7 @@ #include "base/mac/mac_util.h" #import "base/mac/scoped_nsobject.h" #import "base/mac/sdk_forward_declarations.h" +#include "base/metrics/histogram_macros.h" #include "base/strings/sys_string_conversions.h" #include "chrome/app/chrome_command_ids.h" #include "chrome/app/vector_icons/vector_icons.h" @@ -35,6 +36,20 @@ namespace { +// The touch bar actions that are being recorded in a histogram. These values +// should not be re-ordered or removed. +enum TouchBarAction { + BACK = 0, + FORWARD, + STOP, + RELOAD, + HOME, + SEARCH, + STAR, + NEW_TAB, + TOUCH_BAR_ACTION_COUNT +}; + // The touch bar's identifier. const NSTouchBarCustomizationIdentifier kBrowserWindowTouchBarId = @"BrowserWindowTouchBarId"; @@ -83,6 +98,37 @@ return button; } +TouchBarAction TouchBarActionFromCommand(int command) { + switch (command) { + case IDC_BACK: + return TouchBarAction::BACK; + case IDC_FORWARD: + return TouchBarAction::FORWARD; + case IDC_STOP: + return TouchBarAction::STOP; + case IDC_RELOAD: + return TouchBarAction::RELOAD; + case IDC_HOME: + return TouchBarAction::HOME; + case IDC_FOCUS_LOCATION: + return TouchBarAction::SEARCH; + case IDC_BOOKMARK_PAGE: + return TouchBarAction::STAR; + case IDC_NEW_TAB: + return TouchBarAction::NEW_TAB; + default: + NOTREACHED(); + return TouchBarAction::TOUCH_BAR_ACTION_COUNT; + } +} + +// Logs the sample's UMA metrics into the DefaultTouchBar.Metrics histogram. +void LogTouchBarUMA(int command) { + UMA_HISTOGRAM_ENUMERATION("TouchBar.Default.Metrics", + TouchBarActionFromCommand(command), + TOUCH_BAR_ACTION_COUNT); +} + // A class registered for C++ notifications. This is used to detect changes in // the home button preferences and update the Touch Bar. class HomePrefNotificationBridge { @@ -268,14 +314,16 @@ - (void)backOrForward:(id)sender { NSSegmentedControl* control = sender; - if ([control selectedSegment] == kBackSegmentIndex) - commandUpdater_->ExecuteCommand(IDC_BACK); - else - commandUpdater_->ExecuteCommand(IDC_FORWARD); + int command = + [control selectedSegment] == kBackSegmentIndex ? IDC_BACK : IDC_FORWARD; + LogTouchBarUMA(command); + commandUpdater_->ExecuteCommand(command); } - (void)executeCommand:(id)sender { - commandUpdater_->ExecuteCommand([sender tag]); + int command = [sender tag]; + LogTouchBarUMA(command); + commandUpdater_->ExecuteCommand(command); } @end
diff --git a/chrome/browser/ui/cocoa/extensions/chooser_dialog_cocoa_controller_unittest.mm b/chrome/browser/ui/cocoa/extensions/chooser_dialog_cocoa_controller_unittest.mm index ec368cb..c4008ad 100644 --- a/chrome/browser/ui/cocoa/extensions/chooser_dialog_cocoa_controller_unittest.mm +++ b/chrome/browser/ui/cocoa/extensions/chooser_dialog_cocoa_controller_unittest.mm
@@ -60,9 +60,7 @@ content::WebContents::Create(content::WebContents::CreateParams( profile(), content::SiteInstance::Create(profile()))); ASSERT_TRUE(web_contents); - std::unique_ptr<MockChooserController> chooser_controller( - new MockChooserController(web_contents->GetMainFrame())); - ASSERT_TRUE(chooser_controller); + auto chooser_controller = base::MakeUnique<MockChooserController>(); mock_chooser_controller_ = chooser_controller.get(); chooser_dialog_.reset( new ChooserDialogCocoa(web_contents, std::move(chooser_controller)));
diff --git a/chrome/browser/ui/cocoa/page_info/OWNERS b/chrome/browser/ui/cocoa/page_info/OWNERS new file mode 100644 index 0000000..a58718a4 --- /dev/null +++ b/chrome/browser/ui/cocoa/page_info/OWNERS
@@ -0,0 +1,4 @@ +palmer@chromium.org +rsesek@chromium.org + +# COMPONENT: UI>Browser>Bubbles>PageInfo
diff --git a/chrome/browser/ui/cocoa/website_settings/permission_selector_button.h b/chrome/browser/ui/cocoa/page_info/permission_selector_button.h similarity index 83% rename from chrome/browser/ui/cocoa/website_settings/permission_selector_button.h rename to chrome/browser/ui/cocoa/page_info/permission_selector_button.h index 5e0c7f63..c3acdd9 100644 --- a/chrome/browser/ui/cocoa/website_settings/permission_selector_button.h +++ b/chrome/browser/ui/cocoa/page_info/permission_selector_button.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_UI_COCOA_WEBSITE_SETTINGS_PERMISSION_SELECTOR_BUTTON_H_ -#define CHROME_BROWSER_UI_COCOA_WEBSITE_SETTINGS_PERMISSION_SELECTOR_BUTTON_H_ +#ifndef CHROME_BROWSER_UI_COCOA_PAGE_INFO_PERMISSION_SELECTOR_BUTTON_H_ +#define CHROME_BROWSER_UI_COCOA_PAGE_INFO_PERMISSION_SELECTOR_BUTTON_H_ #import <Cocoa/Cocoa.h> @@ -37,4 +37,4 @@ @end -#endif // CHROME_BROWSER_UI_COCOA_WEBSITE_SETTINGS_PERMISSION_SELECTOR_BUTTON_H_ +#endif // CHROME_BROWSER_UI_COCOA_PAGE_INFO_PERMISSION_SELECTOR_BUTTON_H_
diff --git a/chrome/browser/ui/cocoa/website_settings/permission_selector_button.mm b/chrome/browser/ui/cocoa/page_info/permission_selector_button.mm similarity index 94% rename from chrome/browser/ui/cocoa/website_settings/permission_selector_button.mm rename to chrome/browser/ui/cocoa/page_info/permission_selector_button.mm index d39cbfa..46ec36d 100644 --- a/chrome/browser/ui/cocoa/website_settings/permission_selector_button.mm +++ b/chrome/browser/ui/cocoa/page_info/permission_selector_button.mm
@@ -2,10 +2,10 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "chrome/browser/ui/cocoa/website_settings/permission_selector_button.h" +#import "chrome/browser/ui/cocoa/page_info/permission_selector_button.h" #include "base/strings/sys_string_conversions.h" -#include "chrome/browser/ui/cocoa/website_settings/website_settings_utils_cocoa.h" +#include "chrome/browser/ui/cocoa/page_info/website_settings_utils_cocoa.h" #include "chrome/browser/ui/page_info/website_settings_ui.h" #import "ui/base/cocoa/menu_controller.h"
diff --git a/chrome/browser/ui/cocoa/website_settings/permission_selector_button_unittest.mm b/chrome/browser/ui/cocoa/page_info/permission_selector_button_unittest.mm similarity index 95% rename from chrome/browser/ui/cocoa/website_settings/permission_selector_button_unittest.mm rename to chrome/browser/ui/cocoa/page_info/permission_selector_button_unittest.mm index 8e855e8..fda06b5 100644 --- a/chrome/browser/ui/cocoa/website_settings/permission_selector_button_unittest.mm +++ b/chrome/browser/ui/cocoa/page_info/permission_selector_button_unittest.mm
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "chrome/browser/ui/cocoa/website_settings/permission_selector_button.h" +#import "chrome/browser/ui/cocoa/page_info/permission_selector_button.h" #include "base/mac/scoped_nsobject.h" #import "chrome/browser/ui/cocoa/test/cocoa_test_helper.h"
diff --git a/chrome/browser/ui/cocoa/website_settings/split_block_button.h b/chrome/browser/ui/cocoa/page_info/split_block_button.h similarity index 83% rename from chrome/browser/ui/cocoa/website_settings/split_block_button.h rename to chrome/browser/ui/cocoa/page_info/split_block_button.h index 5a38fe16..689ae1a 100644 --- a/chrome/browser/ui/cocoa/website_settings/split_block_button.h +++ b/chrome/browser/ui/cocoa/page_info/split_block_button.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_UI_COCOA_WEBSITE_SETTINGS_SPLIT_BLOCK_BUTTON_H_ -#define CHROME_BROWSER_UI_COCOA_WEBSITE_SETTINGS_SPLIT_BLOCK_BUTTON_H_ +#ifndef CHROME_BROWSER_UI_COCOA_PAGE_INFO_SPLIT_BLOCK_BUTTON_H_ +#define CHROME_BROWSER_UI_COCOA_PAGE_INFO_SPLIT_BLOCK_BUTTON_H_ #import <Cocoa/Cocoa.h> @@ -32,4 +32,4 @@ @end -#endif // CHROME_BROWSER_UI_COCOA_WEBSITE_SETTINGS_SPLIT_BLOCK_BUTTON_H_ +#endif // CHROME_BROWSER_UI_COCOA_PAGE_INFO_SPLIT_BLOCK_BUTTON_H_
diff --git a/chrome/browser/ui/cocoa/website_settings/split_block_button.mm b/chrome/browser/ui/cocoa/page_info/split_block_button.mm similarity index 99% rename from chrome/browser/ui/cocoa/website_settings/split_block_button.mm rename to chrome/browser/ui/cocoa/page_info/split_block_button.mm index ba0939c..9b4f51a 100644 --- a/chrome/browser/ui/cocoa/website_settings/split_block_button.mm +++ b/chrome/browser/ui/cocoa/page_info/split_block_button.mm
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "chrome/browser/ui/cocoa/website_settings/split_block_button.h" +#import "chrome/browser/ui/cocoa/page_info/split_block_button.h" #include <cmath>
diff --git a/chrome/browser/ui/cocoa/website_settings/website_settings_bubble_controller.h b/chrome/browser/ui/cocoa/page_info/website_settings_bubble_controller.h similarity index 100% rename from chrome/browser/ui/cocoa/website_settings/website_settings_bubble_controller.h rename to chrome/browser/ui/cocoa/page_info/website_settings_bubble_controller.h
diff --git a/chrome/browser/ui/cocoa/website_settings/website_settings_bubble_controller.mm b/chrome/browser/ui/cocoa/page_info/website_settings_bubble_controller.mm similarity index 99% rename from chrome/browser/ui/cocoa/website_settings/website_settings_bubble_controller.mm rename to chrome/browser/ui/cocoa/page_info/website_settings_bubble_controller.mm index 9bf39e1fb..585b90f 100644 --- a/chrome/browser/ui/cocoa/website_settings/website_settings_bubble_controller.mm +++ b/chrome/browser/ui/cocoa/page_info/website_settings_bubble_controller.mm
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "chrome/browser/ui/cocoa/website_settings/website_settings_bubble_controller.h" +#import "chrome/browser/ui/cocoa/page_info/website_settings_bubble_controller.h" #import <AppKit/AppKit.h> @@ -20,7 +20,7 @@ #import "chrome/browser/ui/cocoa/info_bubble_view.h" #import "chrome/browser/ui/cocoa/info_bubble_window.h" #import "chrome/browser/ui/cocoa/location_bar/location_bar_view_mac.h" -#import "chrome/browser/ui/cocoa/website_settings/permission_selector_button.h" +#import "chrome/browser/ui/cocoa/page_info/permission_selector_button.h" #include "chrome/browser/ui/page_info/permission_menu_model.h" #import "chrome/browser/ui/tab_dialogs.h" #include "chrome/common/url_constants.h"
diff --git a/chrome/browser/ui/cocoa/website_settings/website_settings_bubble_controller_unittest.mm b/chrome/browser/ui/cocoa/page_info/website_settings_bubble_controller_unittest.mm similarity index 98% rename from chrome/browser/ui/cocoa/website_settings/website_settings_bubble_controller_unittest.mm rename to chrome/browser/ui/cocoa/page_info/website_settings_bubble_controller_unittest.mm index 4823a53..45dbb1df 100644 --- a/chrome/browser/ui/cocoa/website_settings/website_settings_bubble_controller_unittest.mm +++ b/chrome/browser/ui/cocoa/page_info/website_settings_bubble_controller_unittest.mm
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "chrome/browser/ui/cocoa/website_settings/website_settings_bubble_controller.h" +#import "chrome/browser/ui/cocoa/page_info/website_settings_bubble_controller.h" #include <stddef.h>
diff --git a/chrome/browser/ui/cocoa/page_info/website_settings_utils_cocoa.h b/chrome/browser/ui/cocoa/page_info/website_settings_utils_cocoa.h new file mode 100644 index 0000000..f4cbb0b --- /dev/null +++ b/chrome/browser/ui/cocoa/page_info/website_settings_utils_cocoa.h
@@ -0,0 +1,13 @@ +// Copyright 2014 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 CHROME_BROWSER_UI_COCOA_PAGE_INFO_WEBSITE_SETTINGS_UTILS_COCOA_H_ +#define CHROME_BROWSER_UI_COCOA_PAGE_INFO_WEBSITE_SETTINGS_UTILS_COCOA_H_ + +#import <Cocoa/Cocoa.h> + +NSSize SizeForWebsiteSettingsButtonTitle(NSPopUpButton* button, + NSString* title); + +#endif // CHROME_BROWSER_UI_COCOA_PAGE_INFO_WEBSITE_SETTINGS_UTILS_COCOA_H_
diff --git a/chrome/browser/ui/cocoa/website_settings/website_settings_utils_cocoa.mm b/chrome/browser/ui/cocoa/page_info/website_settings_utils_cocoa.mm similarity index 91% rename from chrome/browser/ui/cocoa/website_settings/website_settings_utils_cocoa.mm rename to chrome/browser/ui/cocoa/page_info/website_settings_utils_cocoa.mm index e1c566c..f0c57c7 100644 --- a/chrome/browser/ui/cocoa/website_settings/website_settings_utils_cocoa.mm +++ b/chrome/browser/ui/cocoa/page_info/website_settings_utils_cocoa.mm
@@ -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/ui/cocoa/website_settings/website_settings_utils_cocoa.h" +#include "chrome/browser/ui/cocoa/page_info/website_settings_utils_cocoa.h" namespace { // The amount of horizontal space between the button's title and its arrow icon.
diff --git a/chrome/browser/ui/cocoa/website_settings/OWNERS b/chrome/browser/ui/cocoa/website_settings/OWNERS index eb34ac6..c683e3c 100644 --- a/chrome/browser/ui/cocoa/website_settings/OWNERS +++ b/chrome/browser/ui/cocoa/website_settings/OWNERS
@@ -1,4 +1,4 @@ palmer@chromium.org rsesek@chromium.org -# COMPONENT: UI>Browser>SiteSettings +# COMPONENT: UI>Browser>Permissions>Prompts
diff --git a/chrome/browser/ui/cocoa/website_settings/permission_bubble_controller.mm b/chrome/browser/ui/cocoa/website_settings/permission_bubble_controller.mm index 2de68f3..5872ab0 100644 --- a/chrome/browser/ui/cocoa/website_settings/permission_bubble_controller.mm +++ b/chrome/browser/ui/cocoa/website_settings/permission_bubble_controller.mm
@@ -22,10 +22,10 @@ #import "chrome/browser/ui/cocoa/info_bubble_view.h" #import "chrome/browser/ui/cocoa/info_bubble_window.h" #import "chrome/browser/ui/cocoa/location_bar/location_bar_view_mac.h" +#include "chrome/browser/ui/cocoa/page_info/permission_selector_button.h" +#include "chrome/browser/ui/cocoa/page_info/split_block_button.h" +#include "chrome/browser/ui/cocoa/page_info/website_settings_utils_cocoa.h" #include "chrome/browser/ui/cocoa/website_settings/permission_bubble_cocoa.h" -#include "chrome/browser/ui/cocoa/website_settings/permission_selector_button.h" -#include "chrome/browser/ui/cocoa/website_settings/split_block_button.h" -#include "chrome/browser/ui/cocoa/website_settings/website_settings_utils_cocoa.h" #include "chrome/browser/ui/exclusive_access/exclusive_access_context.h" #include "chrome/browser/ui/exclusive_access/exclusive_access_manager.h" #include "chrome/browser/ui/exclusive_access/fullscreen_controller.h"
diff --git a/chrome/browser/ui/cocoa/website_settings/permission_bubble_controller_unittest.mm b/chrome/browser/ui/cocoa/website_settings/permission_bubble_controller_unittest.mm index c0879420..fb360b4 100644 --- a/chrome/browser/ui/cocoa/website_settings/permission_bubble_controller_unittest.mm +++ b/chrome/browser/ui/cocoa/website_settings/permission_bubble_controller_unittest.mm
@@ -17,10 +17,10 @@ #include "chrome/browser/ui/browser_window.h" #include "chrome/browser/ui/cocoa/browser_window_controller.h" #include "chrome/browser/ui/cocoa/location_bar/location_bar_view_mac.h" +#import "chrome/browser/ui/cocoa/page_info/split_block_button.h" #import "chrome/browser/ui/cocoa/test/cocoa_profile_test.h" #include "chrome/browser/ui/cocoa/test/run_loop_testing.h" #import "chrome/browser/ui/cocoa/website_settings/permission_bubble_cocoa.h" -#import "chrome/browser/ui/cocoa/website_settings/split_block_button.h" #include "chrome/grit/generated_resources.h" #include "components/strings/grit/components_strings.h" #include "testing/gmock/include/gmock/gmock.h"
diff --git a/chrome/browser/ui/cocoa/website_settings/website_settings_utils_cocoa.h b/chrome/browser/ui/cocoa/website_settings/website_settings_utils_cocoa.h deleted file mode 100644 index bd311ff7..0000000 --- a/chrome/browser/ui/cocoa/website_settings/website_settings_utils_cocoa.h +++ /dev/null
@@ -1,13 +0,0 @@ -// Copyright 2014 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 CHROME_BROWSER_UI_COCOA_WEBSITE_SETTINGS_WEBSITE_SETTINGS_UTILS_COCOA_H_ -#define CHROME_BROWSER_UI_COCOA_WEBSITE_SETTINGS_WEBSITE_SETTINGS_UTILS_COCOA_H_ - -#import <Cocoa/Cocoa.h> - -NSSize SizeForWebsiteSettingsButtonTitle(NSPopUpButton* button, - NSString* title); - -#endif // CHROME_BROWSER_UI_COCOA_WEBSITE_SETTINGS_WEBSITE_SETTINGS_UTILS_COCOA_H_
diff --git a/chrome/browser/ui/passwords/manage_passwords_bubble_model_unittest.cc b/chrome/browser/ui/passwords/manage_passwords_bubble_model_unittest.cc index 700ed85..8cff984 100644 --- a/chrome/browser/ui/passwords/manage_passwords_bubble_model_unittest.cc +++ b/chrome/browser/ui/passwords/manage_passwords_bubble_model_unittest.cc
@@ -110,16 +110,7 @@ password_manager::BuildPasswordStore< content::BrowserContext, testing::StrictMock<password_manager::MockPasswordStore>>); -#if !defined(OS_MACOSX) - // TODO(crbug.com/668155): Remove conditional compilation when - // PasswordReuseDetector initialization will be implemented for Mac. - // The call of FillAutofillableLogins is caused by a posted task for an - // initialization of PasswordReuseDetector in the call of - // BuildPasswordStore() in the previous code. There is no thread race since - // unit tests run in one thread, and any post task will be executed after - // finishing the current function. EXPECT_CALL(*GetStore(), FillAutofillableLogins(_)); -#endif } void TearDown() override {
diff --git a/chrome/browser/ui/sync/OWNERS b/chrome/browser/ui/sync/OWNERS index bf1ae96..a7a62bf 100644 --- a/chrome/browser/ui/sync/OWNERS +++ b/chrome/browser/ui/sync/OWNERS
@@ -2,3 +2,5 @@ msarda@chromium.org rogerta@chromium.org + +# COMPONENT: Services>Sync
diff --git a/chrome/browser/ui/views/DEPS b/chrome/browser/ui/views/DEPS index a1c27b4..0d30d90 100644 --- a/chrome/browser/ui/views/DEPS +++ b/chrome/browser/ui/views/DEPS
@@ -3,4 +3,5 @@ "+components/constrained_window", "+services/ui/public/cpp", "+components/user_manager", + "+third_party/libaddressinput", ]
diff --git a/chrome/browser/ui/views/device_chooser_content_view_unittest.cc b/chrome/browser/ui/views/device_chooser_content_view_unittest.cc index 047d238a..7d6cce1 100644 --- a/chrome/browser/ui/views/device_chooser_content_view_unittest.cc +++ b/chrome/browser/ui/views/device_chooser_content_view_unittest.cc
@@ -45,8 +45,7 @@ // views::ViewsTestBase: void SetUp() override { views::ViewsTestBase::SetUp(); - std::unique_ptr<MockChooserController> mock_chooser_controller( - new MockChooserController(nullptr)); + auto mock_chooser_controller = base::MakeUnique<MockChooserController>(); mock_chooser_controller_ = mock_chooser_controller.get(); mock_table_view_observer_ = base::MakeUnique<MockTableViewObserver>(); device_chooser_content_view_ = base::MakeUnique<DeviceChooserContentView>(
diff --git a/chrome/browser/ui/views/extensions/chooser_dialog_view_unittest.cc b/chrome/browser/ui/views/extensions/chooser_dialog_view_unittest.cc index efd22b17..f63b11ca 100644 --- a/chrome/browser/ui/views/extensions/chooser_dialog_view_unittest.cc +++ b/chrome/browser/ui/views/extensions/chooser_dialog_view_unittest.cc
@@ -30,8 +30,7 @@ // views::ViewsTestBase: void SetUp() override { views::ViewsTestBase::SetUp(); - std::unique_ptr<MockChooserController> mock_chooser_controller( - new MockChooserController(nullptr)); + auto mock_chooser_controller = base::MakeUnique<MockChooserController>(); mock_chooser_controller_ = mock_chooser_controller.get(); std::unique_ptr<ChooserDialogView> chooser_dialog_view( new ChooserDialogView(std::move(mock_chooser_controller)));
diff --git a/chrome/browser/ui/views/payments/payment_request_dialog_view.cc b/chrome/browser/ui/views/payments/payment_request_dialog_view.cc index 71e4220..7242a75 100644 --- a/chrome/browser/ui/views/payments/payment_request_dialog_view.cc +++ b/chrome/browser/ui/views/payments/payment_request_dialog_view.cc
@@ -13,6 +13,7 @@ #include "chrome/browser/ui/views/payments/payment_method_view_controller.h" #include "chrome/browser/ui/views/payments/payment_sheet_view_controller.h" #include "chrome/browser/ui/views/payments/profile_list_view_controller.h" +#include "chrome/browser/ui/views/payments/shipping_option_view_controller.h" #include "components/constrained_window/constrained_window_views.h" #include "components/payments/content/payment_request.h" #include "content/public/browser/browser_thread.h" @@ -140,6 +141,14 @@ /* animate = */ true); } +void PaymentRequestDialogView::ShowShippingOptionSheet() { + view_stack_.Push( + CreateViewAndInstallController( + base::MakeUnique<ShippingOptionViewController>(request_, this), + &controller_map_), + /* animate = */ true); +} + void PaymentRequestDialogView::ShowCreditCardEditor() { view_stack_.Push( CreateViewAndInstallController(
diff --git a/chrome/browser/ui/views/payments/payment_request_dialog_view.h b/chrome/browser/ui/views/payments/payment_request_dialog_view.h index ec2e44b..7968c47 100644 --- a/chrome/browser/ui/views/payments/payment_request_dialog_view.h +++ b/chrome/browser/ui/views/payments/payment_request_dialog_view.h
@@ -69,6 +69,7 @@ void ShowOrderSummary(); void ShowShippingProfileSheet(); void ShowPaymentMethodSheet(); + void ShowShippingOptionSheet(); void ShowCreditCardEditor(); ViewStack* view_stack_for_testing() { return &view_stack_; }
diff --git a/chrome/browser/ui/views/payments/payment_request_views_util.cc b/chrome/browser/ui/views/payments/payment_request_views_util.cc index dd9a83e5..4e3a9b4 100644 --- a/chrome/browser/ui/views/payments/payment_request_views_util.cc +++ b/chrome/browser/ui/views/payments/payment_request_views_util.cc
@@ -277,4 +277,24 @@ return l10n_util::GetStringUTF16(IDS_PAYMENTS_SHIPPING_OPTION_LABEL); } +std::unique_ptr<views::View> CreateShippingOptionLabel( + payments::mojom::PaymentShippingOption* shipping_option, + const base::string16& formatted_amount) { + std::unique_ptr<views::View> container = base::MakeUnique<views::View>(); + + std::unique_ptr<views::BoxLayout> layout = + base::MakeUnique<views::BoxLayout>(views::BoxLayout::kVertical, 0, 0, 0); + layout->set_cross_axis_alignment( + views::BoxLayout::CROSS_AXIS_ALIGNMENT_START); + container->SetLayoutManager(layout.release()); + + if (shipping_option) { + container->AddChildView( + new views::Label(base::ASCIIToUTF16(shipping_option->label))); + container->AddChildView(new views::Label(formatted_amount)); + } + + return container; +} + } // namespace payments
diff --git a/chrome/browser/ui/views/payments/payment_request_views_util.h b/chrome/browser/ui/views/payments/payment_request_views_util.h index c7cfbc6..69aad15 100644 --- a/chrome/browser/ui/views/payments/payment_request_views_util.h +++ b/chrome/browser/ui/views/payments/payment_request_views_util.h
@@ -94,6 +94,10 @@ base::string16 GetShippingOptionSectionString( payments::mojom::PaymentShippingType shipping_type); +std::unique_ptr<views::View> CreateShippingOptionLabel( + payments::mojom::PaymentShippingOption* shipping_option, + const base::string16& formatted_amount); + } // namespace payments #endif // CHROME_BROWSER_UI_VIEWS_PAYMENTS_PAYMENT_REQUEST_VIEWS_UTIL_H_
diff --git a/chrome/browser/ui/views/payments/payment_sheet_view_controller.cc b/chrome/browser/ui/views/payments/payment_sheet_view_controller.cc index 39a5c2a..52d3f1c 100644 --- a/chrome/browser/ui/views/payments/payment_sheet_view_controller.cc +++ b/chrome/browser/ui/views/payments/payment_sheet_view_controller.cc
@@ -301,6 +301,11 @@ dialog()->ShowContactProfileSheet(); break; + case static_cast<int>( + PaymentSheetViewControllerTags::SHOW_SHIPPING_OPTION_BUTTON): + dialog()->ShowShippingOptionSheet(); + break; + default: PaymentRequestSheetController::ButtonPressed(sender, event); break; @@ -503,34 +508,17 @@ return section; } -std::unique_ptr<views::View> -PaymentSheetViewController::CreateShippingOptionContent() { - std::unique_ptr<views::View> container = base::MakeUnique<views::View>(); - - std::unique_ptr<views::BoxLayout> layout = - base::MakeUnique<views::BoxLayout>(views::BoxLayout::kVertical, 0, 0, 0); - layout->set_cross_axis_alignment( - views::BoxLayout::CROSS_AXIS_ALIGNMENT_START); - container->SetLayoutManager(layout.release()); - - payments::mojom::PaymentShippingOption* selected_shipping_option = - request()->selected_shipping_option(); - if (selected_shipping_option) { - container->AddChildView( - new views::Label(base::ASCIIToUTF16(selected_shipping_option->label))); - container->AddChildView( - new views::Label(request()->GetFormattedCurrencyAmount( - selected_shipping_option->amount->value))); - } - - return container; -} - std::unique_ptr<views::Button> PaymentSheetViewController::CreateShippingOptionRow() { + payments::mojom::PaymentShippingOption* selected_option = + request()->selected_shipping_option(); + std::unique_ptr<views::View> option_label = CreateShippingOptionLabel( + selected_option, selected_option ? request()->GetFormattedCurrencyAmount( + selected_option->amount->value) + : base::ASCIIToUTF16("")); std::unique_ptr<views::Button> section = CreatePaymentSheetRow( this, GetShippingOptionSectionString(request()->options()->shipping_type), - CreateShippingOptionContent(), std::unique_ptr<views::View>(nullptr), + std::move(option_label), std::unique_ptr<views::View>(nullptr), widest_name_column_view_width_); section->set_tag(static_cast<int>( PaymentSheetViewControllerTags::SHOW_SHIPPING_OPTION_BUTTON));
diff --git a/chrome/browser/ui/views/payments/shipping_option_view_controller.cc b/chrome/browser/ui/views/payments/shipping_option_view_controller.cc new file mode 100644 index 0000000..fdceffe --- /dev/null +++ b/chrome/browser/ui/views/payments/shipping_option_view_controller.cc
@@ -0,0 +1,70 @@ +// 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 "chrome/browser/ui/views/payments/shipping_option_view_controller.h" + +#include "chrome/browser/ui/views/payments/payment_request_views_util.h" +#include "components/payments/content/payment_request.h" + +namespace payments { + +namespace { + +class ShippingOptionItem : public PaymentRequestItemList::Item { + public: + ShippingOptionItem(payments::mojom::PaymentShippingOption* shipping_option, + PaymentRequest* request, + PaymentRequestItemList* parent_list, + bool selected) + : PaymentRequestItemList::Item(request, parent_list, selected), + shipping_option_(shipping_option) {} + ~ShippingOptionItem() override {} + + private: + // payments::PaymentRequestItemList::Item: + std::unique_ptr<views::View> CreateItemView() override { + return CreateShippingOptionLabel( + shipping_option_, + request()->GetFormattedCurrencyAmount(shipping_option_->amount->value)); + } + + void SelectedStateChanged() override {} + + mojom::PaymentShippingOption* shipping_option_; + + DISALLOW_COPY_AND_ASSIGN(ShippingOptionItem); +}; + +} // namespace + +ShippingOptionViewController::ShippingOptionViewController( + PaymentRequest* request, + PaymentRequestDialogView* dialog) + : PaymentRequestSheetController(request, dialog) { + for (const auto& option : request->details()->shipping_options) { + shipping_option_list_.AddItem(base::MakeUnique<ShippingOptionItem>( + option.get(), request, &shipping_option_list_, + option.get() == request->selected_shipping_option())); + } +} + +ShippingOptionViewController::~ShippingOptionViewController() {} + +std::unique_ptr<views::View> ShippingOptionViewController::CreateView() { + std::unique_ptr<views::View> list_view = + shipping_option_list_.CreateListView(); + return CreatePaymentView( + CreateSheetHeaderView( + true, + GetShippingOptionSectionString(request()->options()->shipping_type), + this), + std::move(list_view)); +} + +std::unique_ptr<views::View> +ShippingOptionViewController::CreateExtraFooterView() { + return nullptr; +} + +} // namespace payments
diff --git a/chrome/browser/ui/views/payments/shipping_option_view_controller.h b/chrome/browser/ui/views/payments/shipping_option_view_controller.h new file mode 100644 index 0000000..e3f7827 --- /dev/null +++ b/chrome/browser/ui/views/payments/shipping_option_view_controller.h
@@ -0,0 +1,34 @@ +// 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 CHROME_BROWSER_UI_VIEWS_PAYMENTS_SHIPPING_OPTION_VIEW_CONTROLLER_H_ +#define CHROME_BROWSER_UI_VIEWS_PAYMENTS_SHIPPING_OPTION_VIEW_CONTROLLER_H_ + +#include "base/macros.h" +#include "chrome/browser/ui/views/payments/payment_request_item_list.h" +#include "chrome/browser/ui/views/payments/payment_request_sheet_controller.h" + +namespace payments { + +class ShippingOptionViewController : public PaymentRequestSheetController { + public: + ShippingOptionViewController(PaymentRequest* request, + PaymentRequestDialogView* dialog); + ~ShippingOptionViewController() override; + + // PaymentRequestSheetController: + std::unique_ptr<views::View> CreateView() override; + + private: + // PaymentRequestSheetController: + std::unique_ptr<views::View> CreateExtraFooterView() override; + + PaymentRequestItemList shipping_option_list_; + + DISALLOW_COPY_AND_ASSIGN(ShippingOptionViewController); +}; + +} // namespace payments + +#endif // CHROME_BROWSER_UI_VIEWS_PAYMENTS_SHIPPING_OPTION_VIEW_CONTROLLER_H_
diff --git a/chrome/browser/ui/views/payments/validating_combobox.cc b/chrome/browser/ui/views/payments/validating_combobox.cc index ce76d85..3c4324fba 100644 --- a/chrome/browser/ui/views/payments/validating_combobox.cc +++ b/chrome/browser/ui/views/payments/validating_combobox.cc
@@ -6,6 +6,8 @@ #include <utility> +#include "ui/base/models/combobox_model.h" + namespace payments { ValidatingCombobox::ValidatingCombobox( @@ -13,7 +15,10 @@ std::unique_ptr<ValidationDelegate> delegate) : Combobox(std::move(model)), delegate_(std::move(delegate)), - was_blurred_(false) {} + was_blurred_(false) { + // No need to remove observer on owned model. + this->model()->AddObserver(this); +} ValidatingCombobox::~ValidatingCombobox() {} @@ -37,6 +42,11 @@ Validate(); } +void ValidatingCombobox::OnComboboxModelChanged( + ui::ComboboxModel* unused_model) { + ModelChanged(); +} + void ValidatingCombobox::Validate() { // ValidateCombobox may have side-effects, such as displaying errors. SetInvalid(!delegate_->ValidateCombobox(this));
diff --git a/chrome/browser/ui/views/payments/validating_combobox.h b/chrome/browser/ui/views/payments/validating_combobox.h index 105759a..d001690 100644 --- a/chrome/browser/ui/views/payments/validating_combobox.h +++ b/chrome/browser/ui/views/payments/validating_combobox.h
@@ -5,13 +5,17 @@ #ifndef CHROME_BROWSER_UI_VIEWS_PAYMENTS_VALIDATING_COMBOBOX_H_ #define CHROME_BROWSER_UI_VIEWS_PAYMENTS_VALIDATING_COMBOBOX_H_ +#include <memory> + #include "base/macros.h" #include "chrome/browser/ui/views/payments/validation_delegate.h" +#include "ui/base/models/combobox_model_observer.h" #include "ui/views/controls/combobox/combobox.h" namespace payments { -class ValidatingCombobox : public views::Combobox { +class ValidatingCombobox : public views::Combobox, + public ui::ComboboxModelObserver { public: ValidatingCombobox(std::unique_ptr<ui::ComboboxModel> model, std::unique_ptr<ValidationDelegate> delegate); @@ -24,6 +28,9 @@ // Called when the combobox contents is changed. May do validation. void OnContentsChanged(); + // ui::ComboboxModelObserver: + void OnComboboxModelChanged(ui::ComboboxModel* model) override; + private: // Will call to the ValidationDelegate to validate the contents of the // combobox.
diff --git a/chrome/browser/ui/webui/DEPS b/chrome/browser/ui/webui/DEPS index 6d59d74..e54b94ad 100644 --- a/chrome/browser/ui/webui/DEPS +++ b/chrome/browser/ui/webui/DEPS
@@ -17,7 +17,6 @@ "+third_party/angle", # For ANGLE version. "+third_party/brotli", # For compressed resources. "+third_party/zlib/zlib.h", # For compression level constants. - "+third_party/libaddressinput", # For i18n address input. # DOM Distiller. "+components/dom_distiller/core",
diff --git a/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc b/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc index df5e8b38..5be5b1ff 100644 --- a/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc +++ b/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc
@@ -81,6 +81,7 @@ #include "content/public/browser/web_ui.h" #include "content/public/common/content_client.h" #include "content/public/common/url_utils.h" +#include "device/vr/features.h" #include "extensions/features/features.h" #include "media/media_features.h" #include "ppapi/features/features.h" @@ -116,7 +117,7 @@ #include "chrome/browser/ui/webui/popular_sites_internals_ui.h" #include "chrome/browser/ui/webui/snippets_internals_ui.h" #include "chrome/browser/ui/webui/webapks_ui.h" -#if defined(ENABLE_WEBVR) +#if BUILDFLAG(ENABLE_WEBVR) #include "chrome/browser/ui/webui/vr_shell/vr_shell_ui_ui.h" #endif #else @@ -522,7 +523,7 @@ return &NewWebUI<SnippetsInternalsUI>; if (url.host_piece() == chrome::kChromeUIWebApksHost) return &NewWebUI<WebApksUI>; -#if defined(ENABLE_WEBVR) +#if BUILDFLAG(ENABLE_WEBVR) if (url.host_piece() == chrome::kChromeUIVrShellUIHost) return &NewWebUI<VrShellUIUI>; #endif
diff --git a/chrome/browser/ui/webui/chromeos/image_source.cc b/chrome/browser/ui/webui/chromeos/image_source.cc index a269e5f..d24f282 100644 --- a/chrome/browser/ui/webui/chromeos/image_source.cc +++ b/chrome/browser/ui/webui/chromeos/image_source.cc
@@ -15,7 +15,7 @@ #include "base/memory/ref_counted_memory.h" #include "base/sequenced_task_runner.h" #include "base/single_thread_task_runner.h" -#include "base/task_runner_util.h" +#include "base/task_scheduler/post_task.h" #include "base/threading/sequenced_worker_pool.h" #include "base/threading/thread_task_runner_handle.h" #include "chrome/browser/chromeos/login/users/avatar/user_image_loader.h" @@ -73,9 +73,10 @@ const base::FilePath asset_dir(FILE_PATH_LITERAL(chrome::kChromeOSAssetPath)); const base::FilePath image_path = asset_dir.AppendASCII(path); - base::PostTaskAndReplyWithResult( - content::BrowserThread::GetBlockingPool(), + base::PostTaskWithTraitsAndReplyWithResult( FROM_HERE, + base::TaskTraits().MayBlock().WithPriority( + base::TaskPriority::USER_VISIBLE), base::Bind(&base::PathExists, image_path), base::Bind(&ImageSource::StartDataRequestAfterPathExists, weak_factory_.GetWeakPtr(), image_path, got_data_callback));
diff --git a/chrome/browser/ui/webui/net_internals/net_internals_ui.cc b/chrome/browser/ui/webui/net_internals/net_internals_ui.cc index 21441c4d..3a72ef90 100644 --- a/chrome/browser/ui/webui/net_internals/net_internals_ui.cc +++ b/chrome/browser/ui/webui/net_internals/net_internals_ui.cc
@@ -35,6 +35,7 @@ #include "chrome/browser/browsing_data/browsing_data_helper.h" #include "chrome/browser/browsing_data/browsing_data_remover.h" #include "chrome/browser/browsing_data/browsing_data_remover_factory.h" +#include "chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.h" #include "chrome/browser/chrome_notification_types.h" #include "chrome/browser/download/download_prefs.h" #include "chrome/browser/io_thread.h" @@ -505,8 +506,8 @@ BrowsingDataRemoverFactory::GetForBrowserContext( Profile::FromWebUI(web_ui())); remover->Remove(base::Time(), base::Time::Max(), - BrowsingDataRemover::REMOVE_CACHE, - BrowsingDataHelper::UNPROTECTED_WEB); + BrowsingDataRemover::DATA_TYPE_CACHE, + BrowsingDataRemover::ORIGIN_TYPE_UNPROTECTED_WEB); // BrowsingDataRemover deletes itself. }
diff --git a/chrome/browser/ui/webui/options/DEPS b/chrome/browser/ui/webui/options/DEPS index 42a8243..0cb6537c 100644 --- a/chrome/browser/ui/webui/options/DEPS +++ b/chrome/browser/ui/webui/options/DEPS
@@ -1,3 +1,4 @@ include_rules = [ "+components/user_manager", + "+third_party/libaddressinput", # for third_party/libaddressinput/messages.h ]
diff --git a/chrome/browser/ui/webui/options/autofill_options_handler.cc b/chrome/browser/ui/webui/options/autofill_options_handler.cc index 8241b38..b3362a2a 100644 --- a/chrome/browser/ui/webui/options/autofill_options_handler.cc +++ b/chrome/browser/ui/webui/options/autofill_options_handler.cc
@@ -28,7 +28,7 @@ #include "chrome/common/url_constants.h" #include "chrome/grit/chromium_strings.h" #include "chrome/grit/generated_resources.h" -#include "components/autofill/core/browser/autofill_country.h" +#include "components/autofill/core/browser/autofill_address_util.h" #include "components/autofill/core/browser/autofill_data_util.h" #include "components/autofill/core/browser/autofill_profile.h" #include "components/autofill/core/browser/country_combobox_model.h" @@ -41,32 +41,16 @@ #include "components/strings/grit/components_strings.h" #include "content/public/browser/web_ui.h" #include "third_party/libaddressinput/messages.h" -#include "third_party/libaddressinput/src/cpp/include/libaddressinput/address_ui.h" -#include "third_party/libaddressinput/src/cpp/include/libaddressinput/address_ui_component.h" -#include "third_party/libaddressinput/src/cpp/include/libaddressinput/localization.h" #include "ui/base/l10n/l10n_util.h" #include "ui/base/webui/web_ui_util.h" -using autofill::AutofillCountry; using autofill::AutofillType; -using autofill::ServerFieldType; using autofill::AutofillProfile; using autofill::CreditCard; using autofill::PersonalDataManager; -using i18n::addressinput::AddressUiComponent; namespace { -static const char kFullNameField[] = "fullName"; -static const char kCompanyNameField[] = "companyName"; -static const char kAddressLineField[] = "addrLines"; -static const char kDependentLocalityField[] = "dependentLocality"; -static const char kCityField[] = "city"; -static const char kStateField[] = "state"; -static const char kPostalCodeField[] = "postalCode"; -static const char kSortingCodeField[] = "sortingCode"; -static const char kCountryField[] = "country"; - static const char kComponents[] = "components"; static const char kLanguageCode[] = "languageCode"; @@ -83,126 +67,6 @@ return value; } -// Fills |components| with the address UI components that should be used to -// input an address for |country_code| when UI BCP 47 language code is -// |ui_language_code|. If |components_language_code| is not NULL, then sets it -// to the BCP 47 language code that should be used to format the address for -// display. -void GetAddressComponents(const std::string& country_code, - const std::string& ui_language_code, - base::ListValue* address_components, - std::string* components_language_code) { - DCHECK(address_components); - - i18n::addressinput::Localization localization; - localization.SetGetter(l10n_util::GetStringUTF8); - std::string not_used; - std::vector<AddressUiComponent> components = - i18n::addressinput::BuildComponents( - country_code, localization, ui_language_code, - components_language_code ? components_language_code : ¬_used); - if (components.empty()) { - static const char kDefaultCountryCode[] = "US"; - components = i18n::addressinput::BuildComponents( - kDefaultCountryCode, localization, ui_language_code, - components_language_code ? components_language_code : ¬_used); - } - DCHECK(!components.empty()); - - base::ListValue* line = nullptr; - static const char kField[] = "field"; - static const char kLength[] = "length"; - for (size_t i = 0; i < components.size(); ++i) { - if (i == 0 || - components[i - 1].length_hint == AddressUiComponent::HINT_LONG || - components[i].length_hint == AddressUiComponent::HINT_LONG) { - line = new base::ListValue; - address_components->Append(base::WrapUnique(line)); - } - - std::unique_ptr<base::DictionaryValue> component(new base::DictionaryValue); - component->SetString("name", components[i].name); - - switch (components[i].field) { - case i18n::addressinput::COUNTRY: - component->SetString(kField, kCountryField); - break; - case i18n::addressinput::ADMIN_AREA: - component->SetString(kField, kStateField); - break; - case i18n::addressinput::LOCALITY: - component->SetString(kField, kCityField); - break; - case i18n::addressinput::DEPENDENT_LOCALITY: - component->SetString(kField, kDependentLocalityField); - break; - case i18n::addressinput::SORTING_CODE: - component->SetString(kField, kSortingCodeField); - break; - case i18n::addressinput::POSTAL_CODE: - component->SetString(kField, kPostalCodeField); - break; - case i18n::addressinput::STREET_ADDRESS: - component->SetString(kField, kAddressLineField); - break; - case i18n::addressinput::ORGANIZATION: - component->SetString(kField, kCompanyNameField); - break; - case i18n::addressinput::RECIPIENT: - component->SetString(kField, kFullNameField); - break; - } - - switch (components[i].length_hint) { - case AddressUiComponent::HINT_LONG: - component->SetString(kLength, "long"); - break; - case AddressUiComponent::HINT_SHORT: - component->SetString(kLength, "short"); - break; - } - - line->Append(std::move(component)); - } -} - -// Sets data related to the country <select>. -void SetCountryData(const PersonalDataManager& manager, - base::DictionaryValue* localized_strings, - const std::string& ui_language_code) { - autofill::CountryComboboxModel model; - model.SetCountries(manager, base::Callback<bool(const std::string&)>(), - ui_language_code); - const std::vector<std::unique_ptr<autofill::AutofillCountry>>& countries = - model.countries(); - localized_strings->SetString("defaultCountryCode", - countries.front()->country_code()); - - // An ordered list of options to show in the <select>. - std::unique_ptr<base::ListValue> country_list(new base::ListValue()); - for (size_t i = 0; i < countries.size(); ++i) { - std::unique_ptr<base::DictionaryValue> option_details( - new base::DictionaryValue()); - option_details->SetString("name", model.GetItemAt(i)); - option_details->SetString( - "value", - countries[i] ? countries[i]->country_code() : "separator"); - country_list->Append(std::move(option_details)); - } - localized_strings->Set("autofillCountrySelectList", country_list.release()); - - std::unique_ptr<base::ListValue> default_country_components( - new base::ListValue); - std::string default_country_language_code; - GetAddressComponents(countries.front()->country_code(), ui_language_code, - default_country_components.get(), - &default_country_language_code); - localized_strings->Set("autofillDefaultCountryComponents", - default_country_components.release()); - localized_strings->SetString("autofillDefaultCountryLanguageCode", - default_country_language_code); -} - } // namespace namespace options { @@ -423,8 +287,9 @@ base::DictionaryValue input; std::unique_ptr<base::ListValue> components(new base::ListValue); std::string language_code; - GetAddressComponents(country_code, g_browser_process->GetApplicationLocale(), - components.get(), &language_code); + autofill::GetAddressComponents(country_code, + g_browser_process->GetApplicationLocale(), + components.get(), &language_code); input.Set(kComponents, components.release()); input.SetString(kLanguageCode, language_code); @@ -607,25 +472,25 @@ base::DictionaryValue* address) { address->SetString("guid", profile.guid()); address->SetString( - kFullNameField, + autofill::kFullNameField, profile.GetInfo(AutofillType(autofill::NAME_FULL), g_browser_process->GetApplicationLocale())); - address->SetString(kCompanyNameField, + address->SetString(autofill::kCompanyNameField, profile.GetRawInfo(autofill::COMPANY_NAME)); - address->SetString(kAddressLineField, + address->SetString(autofill::kAddressLineField, profile.GetRawInfo(autofill::ADDRESS_HOME_STREET_ADDRESS)); - address->SetString(kCityField, + address->SetString(autofill::kCityField, profile.GetRawInfo(autofill::ADDRESS_HOME_CITY)); - address->SetString(kStateField, + address->SetString(autofill::kStateField, profile.GetRawInfo(autofill::ADDRESS_HOME_STATE)); address->SetString( - kDependentLocalityField, + autofill::kDependentLocalityField, profile.GetRawInfo(autofill::ADDRESS_HOME_DEPENDENT_LOCALITY)); - address->SetString(kSortingCodeField, + address->SetString(autofill::kSortingCodeField, profile.GetRawInfo(autofill::ADDRESS_HOME_SORTING_CODE)); - address->SetString(kPostalCodeField, + address->SetString(autofill::kPostalCodeField, profile.GetRawInfo(autofill::ADDRESS_HOME_ZIP)); - address->SetString(kCountryField, + address->SetString(autofill::kCountryField, profile.GetRawInfo(autofill::ADDRESS_HOME_COUNTRY)); address->SetString("phone", profile.GetRawInfo(autofill::PHONE_HOME_WHOLE_NUMBER)); @@ -633,7 +498,7 @@ address->SetString(kLanguageCode, profile.language_code()); std::unique_ptr<base::ListValue> components(new base::ListValue); - GetAddressComponents( + autofill::GetAddressComponents( base::UTF16ToUTF8(profile.GetRawInfo(autofill::ADDRESS_HOME_COUNTRY)), profile.language_code(), components.get(), nullptr); address->Set(kComponents, components.release());
diff --git a/chrome/browser/ui/webui/options/chromeos/display_options_handler.cc b/chrome/browser/ui/webui/options/chromeos/display_options_handler.cc index 3f86ad0..1470826 100644 --- a/chrome/browser/ui/webui/options/chromeos/display_options_handler.cc +++ b/chrome/browser/ui/webui/options/chromeos/display_options_handler.cc
@@ -409,8 +409,7 @@ NOTREACHED(); content::RecordAction( base::UserMetricsAction("Options_DisplayToggleMirroring")); - GetDisplayConfigurationController()->SetMirrorMode(is_mirroring, - true /* user_action */); + GetDisplayConfigurationController()->SetMirrorMode(is_mirroring); } void DisplayOptionsHandler::HandleSetPrimary(const base::ListValue* args) { @@ -420,8 +419,7 @@ return; content::RecordAction(base::UserMetricsAction("Options_DisplaySetPrimary")); - GetDisplayConfigurationController()->SetPrimaryDisplayId( - display_id, true /* user_action */); + GetDisplayConfigurationController()->SetPrimaryDisplayId(display_id); } void DisplayOptionsHandler::HandleSetDisplayLayout( @@ -469,8 +467,7 @@ } VLOG(1) << "Updating display layout: " << layout->ToString(); - GetDisplayConfigurationController()->SetDisplayLayout(std::move(layout), - true /* user_action */); + GetDisplayConfigurationController()->SetDisplayLayout(std::move(layout)); } void DisplayOptionsHandler::HandleSetDisplayMode(const base::ListValue* args) {
diff --git a/chrome/browser/ui/webui/options/clear_browser_data_handler.cc b/chrome/browser/ui/webui/options/clear_browser_data_handler.cc index 157d1b6..fb1914e 100644 --- a/chrome/browser/ui/webui/options/clear_browser_data_handler.cc +++ b/chrome/browser/ui/webui/options/clear_browser_data_handler.cc
@@ -26,6 +26,7 @@ #include "chrome/browser/browsing_data/browsing_data_helper.h" #include "chrome/browser/browsing_data/browsing_data_remover.h" #include "chrome/browser/browsing_data/browsing_data_remover_factory.h" +#include "chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.h" #include "chrome/browser/history/web_history_service_factory.h" #include "chrome/browser/prefs/incognito_mode_prefs.h" #include "chrome/browser/profiles/profile.h" @@ -246,36 +247,36 @@ Profile* profile = Profile::FromWebUI(web_ui()); PrefService* prefs = profile->GetPrefs(); - int site_data_mask = BrowsingDataRemover::REMOVE_SITE_DATA; + int site_data_mask = ChromeBrowsingDataRemoverDelegate::DATA_TYPE_SITE_DATA; // Don't try to clear LSO data if it's not supported. if (!*clear_plugin_lso_data_enabled_) - site_data_mask &= ~BrowsingDataRemover::REMOVE_PLUGIN_DATA; + site_data_mask &= ~ChromeBrowsingDataRemoverDelegate::DATA_TYPE_PLUGIN_DATA; int remove_mask = 0; int origin_mask = 0; if (prefs->GetBoolean(browsing_data::prefs::kDeleteBrowsingHistory) && *allow_deleting_browser_history_) { - remove_mask |= BrowsingDataRemover::REMOVE_HISTORY; + remove_mask |= ChromeBrowsingDataRemoverDelegate::DATA_TYPE_HISTORY; } if (prefs->GetBoolean(browsing_data::prefs::kDeleteDownloadHistory) && *allow_deleting_browser_history_) { - remove_mask |= BrowsingDataRemover::REMOVE_DOWNLOADS; + remove_mask |= BrowsingDataRemover::DATA_TYPE_DOWNLOADS; } if (prefs->GetBoolean(browsing_data::prefs::kDeleteCache)) - remove_mask |= BrowsingDataRemover::REMOVE_CACHE; + remove_mask |= BrowsingDataRemover::DATA_TYPE_CACHE; if (prefs->GetBoolean(browsing_data::prefs::kDeleteCookies)) { remove_mask |= site_data_mask; - origin_mask |= BrowsingDataHelper::UNPROTECTED_WEB; + origin_mask |= BrowsingDataRemover::ORIGIN_TYPE_UNPROTECTED_WEB; } if (prefs->GetBoolean(browsing_data::prefs::kDeletePasswords)) - remove_mask |= BrowsingDataRemover::REMOVE_PASSWORDS; + remove_mask |= ChromeBrowsingDataRemoverDelegate::DATA_TYPE_PASSWORDS; if (prefs->GetBoolean(browsing_data::prefs::kDeleteFormData)) - remove_mask |= BrowsingDataRemover::REMOVE_FORM_DATA; + remove_mask |= ChromeBrowsingDataRemoverDelegate::DATA_TYPE_FORM_DATA; if (prefs->GetBoolean(browsing_data::prefs::kDeleteMediaLicenses)) - remove_mask |= BrowsingDataRemover::REMOVE_MEDIA_LICENSES; + remove_mask |= BrowsingDataRemover::DATA_TYPE_MEDIA_LICENSES; if (prefs->GetBoolean(browsing_data::prefs::kDeleteHostedAppsData)) { remove_mask |= site_data_mask; - origin_mask |= BrowsingDataHelper::PROTECTED_WEB; + origin_mask |= BrowsingDataRemover::ORIGIN_TYPE_PROTECTED_WEB; } // Record the deletion of cookies and cache.
diff --git a/chrome/browser/ui/webui/predictors/predictors_handler.cc b/chrome/browser/ui/webui/predictors/predictors_handler.cc index 6cd66b4e..bd03c65 100644 --- a/chrome/browser/ui/webui/predictors/predictors_handler.cc +++ b/chrome/browser/ui/webui/predictors/predictors_handler.cc
@@ -131,6 +131,9 @@ resource->SetDouble("position", r.average_position()); resource->SetDouble( "score", ResourcePrefetchPredictorTables::ComputeResourceScore(r)); + resource->SetBoolean( + "is_prefetchable", + resource_prefetch_predictor_->IsResourcePrefetchable(r)); resources->Append(std::move(resource)); } main->Set("resources", resources);
diff --git a/chrome/browser/ui/webui/settings/md_settings_localized_strings_provider.cc b/chrome/browser/ui/webui/settings/md_settings_localized_strings_provider.cc index c952c24..ad8cafa 100644 --- a/chrome/browser/ui/webui/settings/md_settings_localized_strings_provider.cc +++ b/chrome/browser/ui/webui/settings/md_settings_localized_strings_provider.cc
@@ -1478,11 +1478,12 @@ void AddSearchInSettingsStrings(content::WebUIDataSource* html_source) { LocalizedString localized_strings[] = { - {"searchPrompt", IDS_SETTINGS_SEARCH_PROMPT}, - {"searchNoResults", IDS_SETTINGS_SEARCH_NO_RESULTS}, - // TODO(dpapad): IDS_DOWNLOAD_CLEAR_SEARCH and IDS_MD_HISTORY_CLEAR_SEARCH - // are identical, merge them to one and re-use here. - {"clearSearch", IDS_DOWNLOAD_CLEAR_SEARCH}, + {"searchPrompt", IDS_SETTINGS_SEARCH_PROMPT}, + {"searchNoResults", IDS_SETTINGS_SEARCH_NO_RESULTS}, + {"searchResults", IDS_SETTINGS_SEARCH_RESULTS}, + // TODO(dpapad): IDS_DOWNLOAD_CLEAR_SEARCH and IDS_MD_HISTORY_CLEAR_SEARCH + // are identical, merge them to one and re-use here. + {"clearSearch", IDS_DOWNLOAD_CLEAR_SEARCH}, }; AddLocalizedStringsBulk(html_source, localized_strings, arraysize(localized_strings)); @@ -1557,7 +1558,6 @@ {"addSite", IDS_SETTINGS_ADD_SITE}, {"addSiteExceptionPlaceholder", IDS_SETTINGS_ADD_SITE_EXCEPTION_PLACEHOLDER}, - {"addSiteLink", IDS_SETTINGS_ADD_SITE_LINK}, {"addSiteTitle", IDS_SETTINGS_ADD_SITE_TITLE}, {"cookieAppCache", IDS_SETTINGS_COOKIES_APPLICATION_CACHE}, {"cookieCacheStorage", IDS_SETTINGS_COOKIES_CACHE_STORAGE}, @@ -1960,11 +1960,11 @@ AddAccountUITweaksStrings(html_source, profile); AddAndroidAppStrings(html_source); AddBluetoothStrings(html_source); + AddChromeOSUserStrings(html_source, profile); AddDateTimeStrings(html_source); AddDeviceStrings(html_source); AddEasyUnlockStrings(html_source); AddInternetStrings(html_source); - AddChromeOSUserStrings(html_source, profile); AddOncStrings(html_source); #else AddDefaultBrowserStrings(html_source);
diff --git a/chrome/browser/ui/webui/settings/settings_clear_browsing_data_handler.cc b/chrome/browser/ui/webui/settings/settings_clear_browsing_data_handler.cc index 30f8aa2e..70be7a4 100644 --- a/chrome/browser/ui/webui/settings/settings_clear_browsing_data_handler.cc +++ b/chrome/browser/ui/webui/settings/settings_clear_browsing_data_handler.cc
@@ -14,6 +14,7 @@ #include "chrome/browser/browsing_data/browsing_data_counter_utils.h" #include "chrome/browser/browsing_data/browsing_data_helper.h" #include "chrome/browser/browsing_data/browsing_data_remover_factory.h" +#include "chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.h" #include "chrome/browser/history/web_history_service_factory.h" #include "chrome/browser/sync/profile_sync_service_factory.h" #include "chrome/common/channel_info.h" @@ -122,40 +123,40 @@ PrefService* prefs = profile_->GetPrefs(); - int site_data_mask = BrowsingDataRemover::REMOVE_SITE_DATA; + int site_data_mask = ChromeBrowsingDataRemoverDelegate::DATA_TYPE_SITE_DATA; // Don't try to clear LSO data if it's not supported. if (!prefs->GetBoolean(prefs::kClearPluginLSODataEnabled)) - site_data_mask &= ~BrowsingDataRemover::REMOVE_PLUGIN_DATA; + site_data_mask &= ~ChromeBrowsingDataRemoverDelegate::DATA_TYPE_PLUGIN_DATA; int remove_mask = 0; if (prefs->GetBoolean(prefs::kAllowDeletingBrowserHistory)) { if (prefs->GetBoolean(browsing_data::prefs::kDeleteBrowsingHistory)) - remove_mask |= BrowsingDataRemover::REMOVE_HISTORY; + remove_mask |= ChromeBrowsingDataRemoverDelegate::DATA_TYPE_HISTORY; if (prefs->GetBoolean(browsing_data::prefs::kDeleteDownloadHistory)) - remove_mask |= BrowsingDataRemover::REMOVE_DOWNLOADS; + remove_mask |= BrowsingDataRemover::DATA_TYPE_DOWNLOADS; } if (prefs->GetBoolean(browsing_data::prefs::kDeleteCache)) - remove_mask |= BrowsingDataRemover::REMOVE_CACHE; + remove_mask |= BrowsingDataRemover::DATA_TYPE_CACHE; int origin_mask = 0; if (prefs->GetBoolean(browsing_data::prefs::kDeleteCookies)) { remove_mask |= site_data_mask; - origin_mask |= BrowsingDataHelper::UNPROTECTED_WEB; + origin_mask |= BrowsingDataRemover::ORIGIN_TYPE_UNPROTECTED_WEB; } if (prefs->GetBoolean(browsing_data::prefs::kDeletePasswords)) - remove_mask |= BrowsingDataRemover::REMOVE_PASSWORDS; + remove_mask |= ChromeBrowsingDataRemoverDelegate::DATA_TYPE_PASSWORDS; if (prefs->GetBoolean(browsing_data::prefs::kDeleteFormData)) - remove_mask |= BrowsingDataRemover::REMOVE_FORM_DATA; + remove_mask |= ChromeBrowsingDataRemoverDelegate::DATA_TYPE_FORM_DATA; if (prefs->GetBoolean(browsing_data::prefs::kDeleteMediaLicenses)) - remove_mask |= BrowsingDataRemover::REMOVE_MEDIA_LICENSES; + remove_mask |= BrowsingDataRemover::DATA_TYPE_MEDIA_LICENSES; if (prefs->GetBoolean(browsing_data::prefs::kDeleteHostedAppsData)) { remove_mask |= site_data_mask; - origin_mask |= BrowsingDataHelper::PROTECTED_WEB; + origin_mask |= BrowsingDataRemover::ORIGIN_TYPE_PROTECTED_WEB; } // Record the deletion of cookies and cache.
diff --git a/chrome/browser/usb/usb_chooser_context.cc b/chrome/browser/usb/usb_chooser_context.cc index 231853d..af54a60 100644 --- a/chrome/browser/usb/usb_chooser_context.cc +++ b/chrome/browser/usb/usb_chooser_context.cc
@@ -54,7 +54,8 @@ UsbChooserContext::UsbChooserContext(Profile* profile) : ChooserContextBase(profile, CONTENT_SETTINGS_TYPE_USB_CHOOSER_DATA), is_incognito_(profile->IsOffTheRecord()), - observer_(this) { + observer_(this), + weak_factory_(this) { usb_service_ = device::DeviceClient::Get()->GetUsbService(); if (usb_service_) observer_.Add(usb_service_); @@ -183,6 +184,10 @@ return false; } +base::WeakPtr<UsbChooserContext> UsbChooserContext::AsWeakPtr() { + return weak_factory_.GetWeakPtr(); +} + bool UsbChooserContext::IsValidObject(const base::DictionaryValue& object) { return object.size() == 4 && object.HasKey(kDeviceNameKey) && object.HasKey(kVendorIdKey) && object.HasKey(kProductIdKey) &&
diff --git a/chrome/browser/usb/usb_chooser_context.h b/chrome/browser/usb/usb_chooser_context.h index 09b009c0..c3ef423 100644 --- a/chrome/browser/usb/usb_chooser_context.h +++ b/chrome/browser/usb/usb_chooser_context.h
@@ -49,6 +49,8 @@ const GURL& embedding_origin, scoped_refptr<const device::UsbDevice> device); + base::WeakPtr<UsbChooserContext> AsWeakPtr(); + private: // ChooserContextBase implementation. bool IsValidObject(const base::DictionaryValue& object) override; @@ -60,6 +62,7 @@ std::map<std::pair<GURL, GURL>, std::set<std::string>> ephemeral_devices_; device::UsbService* usb_service_; ScopedObserver<device::UsbService, device::UsbService::Observer> observer_; + base::WeakPtrFactory<UsbChooserContext> weak_factory_; DISALLOW_COPY_AND_ASSIGN(UsbChooserContext); };
diff --git a/chrome/browser/usb/usb_chooser_controller.cc b/chrome/browser/usb/usb_chooser_controller.cc index ddd08f8..2750234 100644 --- a/chrome/browser/usb/usb_chooser_controller.cc +++ b/chrome/browser/usb/usb_chooser_controller.cc
@@ -35,6 +35,8 @@ using content::RenderFrameHost; using content::WebContents; +using device::UsbDevice; +using device::UsbDeviceFilter; namespace { @@ -45,7 +47,7 @@ return browser_displayer.browser(); } -base::string16 GetDeviceName(scoped_refptr<device::UsbDevice> device) { +base::string16 GetDeviceName(scoped_refptr<UsbDevice> device) { base::string16 device_name = device->product_string(); if (device_name.empty()) { uint16_t vendor_id = device->vendor_id(); @@ -73,26 +75,33 @@ UsbChooserController::UsbChooserController( RenderFrameHost* render_frame_host, - const std::vector<device::UsbDeviceFilter>& device_filters, + const std::vector<UsbDeviceFilter>& device_filters, const device::usb::ChooserService::GetPermissionCallback& callback) : ChooserController(render_frame_host, IDS_USB_DEVICE_CHOOSER_PROMPT_ORIGIN, IDS_USB_DEVICE_CHOOSER_PROMPT_EXTENSION_NAME), - render_frame_host_(render_frame_host), + filters_(device_filters), callback_(callback), usb_service_observer_(this), - filters_(device_filters), weak_factory_(this) { device::UsbService* usb_service = device::DeviceClient::Get()->GetUsbService(); - if (!usb_service) - return; - - if (!usb_service_observer_.IsObserving(usb_service)) + if (usb_service) { usb_service_observer_.Add(usb_service); + usb_service->GetDevices(base::Bind(&UsbChooserController::GotUsbDeviceList, + weak_factory_.GetWeakPtr())); + } - usb_service->GetDevices(base::Bind(&UsbChooserController::GotUsbDeviceList, - weak_factory_.GetWeakPtr())); + WebContents* web_contents = + WebContents::FromRenderFrameHost(render_frame_host); + RenderFrameHost* main_frame = web_contents->GetMainFrame(); + requesting_origin_ = render_frame_host->GetLastCommittedURL().GetOrigin(); + embedding_origin_ = main_frame->GetLastCommittedURL().GetOrigin(); + is_embedded_frame_ = render_frame_host != main_frame; + Profile* profile = + Profile::FromBrowserContext(web_contents->GetBrowserContext()); + chooser_context_ = + UsbChooserContextFactory::GetForProfile(profile)->AsWeakPtr(); } UsbChooserController::~UsbChooserController() { @@ -125,8 +134,14 @@ } bool UsbChooserController::IsPaired(size_t index) const { - return WebUSBPermissionProvider::HasDevicePermission(render_frame_host_, - devices_[index].first); + scoped_refptr<UsbDevice> device = devices_[index].first; + + if (!chooser_context_) + return false; + + return WebUSBPermissionProvider::HasDevicePermission( + chooser_context_.get(), requesting_origin_, embedding_origin_, + is_embedded_frame_, device); } void UsbChooserController::RefreshOptions() {} @@ -139,17 +154,11 @@ DCHECK_EQ(1u, indices.size()); size_t index = indices[0]; DCHECK_LT(index, devices_.size()); - WebContents* web_contents = - WebContents::FromRenderFrameHost(render_frame_host_); - GURL embedding_origin = - web_contents->GetMainFrame()->GetLastCommittedURL().GetOrigin(); - Profile* profile = - Profile::FromBrowserContext(web_contents->GetBrowserContext()); - UsbChooserContext* chooser_context = - UsbChooserContextFactory::GetForProfile(profile); - chooser_context->GrantDevicePermission( - render_frame_host_->GetLastCommittedURL().GetOrigin(), embedding_origin, - devices_[index].first->guid()); + + if (chooser_context_) { + chooser_context_->GrantDevicePermission( + requesting_origin_, embedding_origin_, devices_[index].first->guid()); + } device::usb::DeviceInfoPtr device_info_ptr = device::usb::DeviceInfo::From(*devices_[index].first); @@ -177,8 +186,7 @@ ui::PAGE_TRANSITION_AUTO_TOPLEVEL, false /* is_renderer_initialized */)); } -void UsbChooserController::OnDeviceAdded( - scoped_refptr<device::UsbDevice> device) { +void UsbChooserController::OnDeviceAdded(scoped_refptr<UsbDevice> device) { if (DisplayDevice(device)) { base::string16 device_name = GetDeviceName(device); devices_.push_back(std::make_pair(device, device_name)); @@ -188,8 +196,7 @@ } } -void UsbChooserController::OnDeviceRemoved( - scoped_refptr<device::UsbDevice> device) { +void UsbChooserController::OnDeviceRemoved(scoped_refptr<UsbDevice> device) { for (auto it = devices_.begin(); it != devices_.end(); ++it) { if (it->first == device) { size_t index = it - devices_.begin(); @@ -207,7 +214,7 @@ // Get a list of devices that can be shown in the chooser bubble UI for // user to grant permsssion. void UsbChooserController::GotUsbDeviceList( - const std::vector<scoped_refptr<device::UsbDevice>>& devices) { + const std::vector<scoped_refptr<UsbDevice>>& devices) { for (const auto& device : devices) { if (DisplayDevice(device)) { base::string16 device_name = GetDeviceName(device); @@ -220,20 +227,18 @@ } bool UsbChooserController::DisplayDevice( - scoped_refptr<device::UsbDevice> device) const { - if (!device::UsbDeviceFilter::MatchesAny(device, filters_)) + scoped_refptr<UsbDevice> device) const { + if (!UsbDeviceFilter::MatchesAny(device, filters_)) return false; if (UsbBlocklist::Get().IsExcluded(device)) return false; // Embedded frames must have their origin in the list provided by the device. - RenderFrameHost* main_frame = - WebContents::FromRenderFrameHost(render_frame_host_)->GetMainFrame(); - if (render_frame_host_ != main_frame) { - return device::FindInWebUsbAllowedOrigins( - device->webusb_allowed_origins(), - render_frame_host_->GetLastCommittedURL().GetOrigin()); + if (is_embedded_frame_) { + return device::FindInWebUsbAllowedOrigins(device->webusb_allowed_origins(), + requesting_origin_, base::nullopt, + base::nullopt); } return true;
diff --git a/chrome/browser/usb/usb_chooser_controller.h b/chrome/browser/usb/usb_chooser_controller.h index 95f5807..b990e888 100644 --- a/chrome/browser/usb/usb_chooser_controller.h +++ b/chrome/browser/usb/usb_chooser_controller.h
@@ -16,6 +16,7 @@ #include "chrome/browser/chooser_controller/chooser_controller.h" #include "device/usb/public/interfaces/chooser_service.mojom.h" #include "device/usb/usb_service.h" +#include "url/gurl.h" namespace content { class RenderFrameHost; @@ -26,6 +27,8 @@ struct UsbDeviceFilter; } +class UsbChooserContext; + // UsbChooserController creates a chooser for WebUSB. // It is owned by ChooserBubbleDelegate. class UsbChooserController : public ChooserController, @@ -59,11 +62,16 @@ const std::vector<scoped_refptr<device::UsbDevice>>& devices); bool DisplayDevice(scoped_refptr<device::UsbDevice> device) const; - content::RenderFrameHost* const render_frame_host_; + std::vector<device::UsbDeviceFilter> filters_; device::usb::ChooserService::GetPermissionCallback callback_; + GURL requesting_origin_; + GURL embedding_origin_; + bool is_embedded_frame_; + + base::WeakPtr<UsbChooserContext> chooser_context_; ScopedObserver<device::UsbService, device::UsbService::Observer> usb_service_observer_; - std::vector<device::UsbDeviceFilter> filters_; + // Each pair is a (device, device name). std::vector<std::pair<scoped_refptr<device::UsbDevice>, base::string16>> devices_;
diff --git a/chrome/browser/usb/web_usb_permission_provider.cc b/chrome/browser/usb/web_usb_permission_provider.cc index c7f1913..5693689 100644 --- a/chrome/browser/usb/web_usb_permission_provider.cc +++ b/chrome/browser/usb/web_usb_permission_provider.cc
@@ -22,53 +22,18 @@ using content::RenderFrameHost; using content::WebContents; -namespace { - -bool FindOriginInDescriptorSet(const device::WebUsbAllowedOrigins* set, - const GURL& origin, - const uint8_t* configuration_value, - const uint8_t* first_interface) { - if (!set) - return false; - if (base::ContainsValue(set->origins, origin)) - return true; - for (const auto& configuration : set->configurations) { - if (configuration_value && - *configuration_value != configuration.configuration_value) - continue; - if (base::ContainsValue(configuration.origins, origin)) - return true; - for (const auto& function : configuration.functions) { - if (first_interface && *first_interface != function.first_interface) - continue; - if (base::ContainsValue(function.origins, origin)) - return true; - } - } - return false; -} - -} // namespace - // static bool WebUSBPermissionProvider::HasDevicePermission( - RenderFrameHost* render_frame_host, + UsbChooserContext* chooser_context, + const GURL& requesting_origin, + const GURL& embedding_origin, + bool is_embedded_frame, scoped_refptr<const device::UsbDevice> device) { DCHECK_CURRENTLY_ON(content::BrowserThread::UI); if (UsbBlocklist::Get().IsExcluded(device)) return false; - WebContents* web_contents = - WebContents::FromRenderFrameHost(render_frame_host); - RenderFrameHost* main_frame = web_contents->GetMainFrame(); - GURL embedding_origin = main_frame->GetLastCommittedURL().GetOrigin(); - GURL requesting_origin = render_frame_host->GetLastCommittedURL().GetOrigin(); - Profile* profile = - Profile::FromBrowserContext(web_contents->GetBrowserContext()); - UsbChooserContext* chooser_context = - UsbChooserContextFactory::GetForProfile(profile); - if (!chooser_context->HasDevicePermission(requesting_origin, embedding_origin, device)) { return false; @@ -82,9 +47,10 @@ return true; // Embedded frames must have their origin in the list provided by the device. - if (render_frame_host != main_frame) { - return FindOriginInDescriptorSet(device->webusb_allowed_origins(), - requesting_origin, nullptr, nullptr); + if (is_embedded_frame) { + return device::FindInWebUsbAllowedOrigins(device->webusb_allowed_origins(), + requesting_origin, base::nullopt, + base::nullopt); } return true; @@ -106,7 +72,19 @@ bool WebUSBPermissionProvider::HasDevicePermission( scoped_refptr<const device::UsbDevice> device) const { - return HasDevicePermission(render_frame_host_, device); + DCHECK_CURRENTLY_ON(content::BrowserThread::UI); + + WebContents* web_contents = + WebContents::FromRenderFrameHost(render_frame_host_); + RenderFrameHost* main_frame = web_contents->GetMainFrame(); + Profile* profile = + Profile::FromBrowserContext(web_contents->GetBrowserContext()); + + return HasDevicePermission( + UsbChooserContextFactory::GetForProfile(profile), + render_frame_host_->GetLastCommittedURL().GetOrigin(), + main_frame->GetLastCommittedURL().GetOrigin(), + render_frame_host_ != main_frame, device); } bool WebUSBPermissionProvider::HasConfigurationPermission( @@ -119,10 +97,10 @@ RenderFrameHost* main_frame = WebContents::FromRenderFrameHost(render_frame_host_)->GetMainFrame(); if (render_frame_host_ != main_frame) { - return FindOriginInDescriptorSet( + return device::FindInWebUsbAllowedOrigins( device->webusb_allowed_origins(), render_frame_host_->GetLastCommittedURL().GetOrigin(), - &requested_configuration_value, nullptr); + requested_configuration_value, base::nullopt); } return true; @@ -139,10 +117,10 @@ RenderFrameHost* main_frame = WebContents::FromRenderFrameHost(render_frame_host_)->GetMainFrame(); if (render_frame_host_ != main_frame) { - return FindOriginInDescriptorSet( + return device::FindInWebUsbAllowedOrigins( device->webusb_allowed_origins(), render_frame_host_->GetLastCommittedURL().GetOrigin(), - &configuration_value, &requested_function); + configuration_value, requested_function); } return true;
diff --git a/chrome/browser/usb/web_usb_permission_provider.h b/chrome/browser/usb/web_usb_permission_provider.h index 5668ee3..436255e 100644 --- a/chrome/browser/usb/web_usb_permission_provider.h +++ b/chrome/browser/usb/web_usb_permission_provider.h
@@ -14,6 +14,9 @@ class RenderFrameHost; } +class GURL; +class UsbChooserContext; + // This implementation of the permission provider interface enforces the rules // of the WebUSB permission model. Devices are checked for WebUSB descriptors // granting access to the render frame's current origin as well as permission @@ -21,7 +24,10 @@ class WebUSBPermissionProvider : public device::usb::PermissionProvider { public: static bool HasDevicePermission( - content::RenderFrameHost* render_frame_host, + UsbChooserContext* chooser_context, + const GURL& requesting_origin, + const GURL& embedding_origin, + bool is_embedded_frame, scoped_refptr<const device::UsbDevice> device); explicit WebUSBPermissionProvider(
diff --git a/chrome/common/BUILD.gn b/chrome/common/BUILD.gn index b2fcf05..8ce8043 100644 --- a/chrome/common/BUILD.gn +++ b/chrome/common/BUILD.gn
@@ -207,6 +207,7 @@ "//components/visitedlink/common", "//content/public/common", "//crypto", + "//device/vr:features", "//extensions/common:common_constants", "//extensions/features", "//google_apis",
diff --git a/chrome/common/DEPS b/chrome/common/DEPS index 0d712737..9b6353e 100644 --- a/chrome/common/DEPS +++ b/chrome/common/DEPS
@@ -28,6 +28,7 @@ "+components/translate/core/common", "+components/url_formatter", "+components/version_info", + "+device/vr/features.h", "+extensions/common", "+extensions/features", "+gin/public", # For profiling.cc
diff --git a/chrome/common/component_flash_hint_file_linux_unittest.cc b/chrome/common/component_flash_hint_file_linux_unittest.cc index fa3fa1f2..7fdd301d5 100644 --- a/chrome/common/component_flash_hint_file_linux_unittest.cc +++ b/chrome/common/component_flash_hint_file_linux_unittest.cc
@@ -157,11 +157,11 @@ } TEST_F(ComponentFlashHintFileTest, ExecTest2) { - base::Process process = SpawnChild("NoExecMountTest"); - ASSERT_TRUE(process.IsValid()); + base::SpawnChildResult spawn_child = SpawnChild("NoExecMountTest"); + ASSERT_TRUE(spawn_child.process.IsValid()); int exit_code = 42; - ASSERT_TRUE(process.WaitForExitWithTimeout(TestTimeouts::action_max_timeout(), - &exit_code)); + ASSERT_TRUE(spawn_child.process.WaitForExitWithTimeout( + TestTimeouts::action_max_timeout(), &exit_code)); EXPECT_EQ(0, exit_code); }
diff --git a/chrome/common/extensions/docs/server2/api_categorizer.py b/chrome/common/extensions/docs/server2/api_categorizer.py index 1daf828..9b531e6 100644 --- a/chrome/common/extensions/docs/server2/api_categorizer.py +++ b/chrome/common/extensions/docs/server2/api_categorizer.py
@@ -34,11 +34,19 @@ return template_names def GetCategory(self, api_name): - '''Return the type of api.'Chrome' means the public apis, - private means the api only used by chrome, and experimental means - the apis with "experimental" prefix. + '''Returns the type of api: + "internal": Used by chrome internally. Never documented. + "private": APIs which are undocumented or are available to + whitelisted apps/extensions. + "experimental": Experimental APIs. + "chrome": Public APIs. ''' documented_apis = self._GenerateAPICategories() + if api_name.endswith('Internal'): + assert api_name not in documented_apis, \ + "Internal API %s on %s platform should not be documented" % ( + api_name, self._platform) + return 'internal' if (api_name.endswith('Private') or api_name not in documented_apis): return 'private'
diff --git a/chrome/common/extensions/docs/server2/api_data_source.py b/chrome/common/extensions/docs/server2/api_data_source.py index 67004e9c..47b1e55 100644 --- a/chrome/common/extensions/docs/server2/api_data_source.py +++ b/chrome/common/extensions/docs/server2/api_data_source.py
@@ -11,7 +11,6 @@ from future import All, Future from jsc_view import CreateJSCView, GetEventByNameFromEvents from platform_util import GetPlatforms -from third_party.json_schema_compiler.model import UnixName class APIDataSource(DataSource): @@ -90,9 +89,13 @@ return self._GetSchemaView(platform, api) def get_platform_schemas(platform): + # Internal APIs are an internal implementation detail. Do not pass them to + # templates. return All([get_api_schema(platform, api) - for api in self._platform_bundle.GetAPIModels(platform) - .GetNames()], + for api in self._platform_bundle.GetAPIModels(platform) + .GetNames() + if self._platform_bundle.GetAPICategorizer(platform) + .GetCategory(api) != 'internal'], except_pass=FileNotFoundError) return All([get_platform_schemas(platform) for platform in GetPlatforms()])
diff --git a/chrome/common/extensions/docs/server2/api_schema_graph.py b/chrome/common/extensions/docs/server2/api_schema_graph.py index 0c90ba1..1ec5833 100644 --- a/chrome/common/extensions/docs/server2/api_schema_graph.py +++ b/chrome/common/extensions/docs/server2/api_schema_graph.py
@@ -80,7 +80,8 @@ if self._lookup_path[-1] == 'callback': # This is an event callback, so lookup_path[-2] is the event # node name, thus lookup_path[-3] must be 'events'. - assert self._lookup_path[-3] == 'events' + assert self._lookup_path[-3] == 'events' , \ + 'Invalid lookup path: %s' % (self._lookup_path) return self._lookup_path[:-1] # This is a function parameter. assert self._lookup_path[-2] == 'parameters'
diff --git a/chrome/common/extensions/docs/server2/app.yaml b/chrome/common/extensions/docs/server2/app.yaml index 5a8a588..c61678d 100644 --- a/chrome/common/extensions/docs/server2/app.yaml +++ b/chrome/common/extensions/docs/server2/app.yaml
@@ -1,5 +1,5 @@ application: chrome-apps-doc -version: 3-50-5 +version: 3-52-0 runtime: python27 api_version: 1 threadsafe: false
diff --git a/chrome/common/extensions/docs/server2/availability_finder.py b/chrome/common/extensions/docs/server2/availability_finder.py index 35a9df1a..078fd1a 100644 --- a/chrome/common/extensions/docs/server2/availability_finder.py +++ b/chrome/common/extensions/docs/server2/availability_finder.py
@@ -144,11 +144,14 @@ JSON_TEMPLATES + 'api_availabilities.json').Get().get(node_name) if node_info is None: return None + + channel_info = None if node_info['channel'] == 'stable': - return AvailabilityInfo( - self._branch_utility.GetStableChannelInfo(node_info['version'])) - return AvailabilityInfo( - self._branch_utility.GetChannelInfo(node_info['channel'])) + channel_info = self._branch_utility.GetStableChannelInfo( + node_info['version']) + else: + channel_info = self._branch_utility.GetChannelInfo(node_info['channel']) + return AvailabilityInfo(channel_info) if channel_info else None @memoize def _CreateAPISchemaFileSystem(self, file_system):
diff --git a/chrome/common/extensions/docs/server2/jsc_view.py b/chrome/common/extensions/docs/server2/jsc_view.py index 2bf46d70..0bdfe1e 100644 --- a/chrome/common/extensions/docs/server2/jsc_view.py +++ b/chrome/common/extensions/docs/server2/jsc_view.py
@@ -429,6 +429,7 @@ for value in type_.enum_values] if len(dst_dict['enum_values']) > 0: dst_dict['enum_values'][-1]['last'] = True + dst_dict['enum_values'][0]['first'] = True elif type_.instance_of is not None: dst_dict['simple_type'] = type_.instance_of else:
diff --git a/chrome/common/extensions/docs/server2/test_data/object_level_availability/tabs.py b/chrome/common/extensions/docs/server2/test_data/object_level_availability/tabs.py index 731e2b5..6d9cb2ea 100644 --- a/chrome/common/extensions/docs/server2/test_data/object_level_availability/tabs.py +++ b/chrome/common/extensions/docs/server2/test_data/object_level_availability/tabs.py
@@ -139,6 +139,10 @@ 'name': 'get', 'parameters': [ { + 'name': 'tabId', + 'type': 'any' + }, + { 'name': 'callback', 'type': 'function', 'parameters': [ @@ -147,10 +151,6 @@ 'type': 'any' } ] - }, - { - 'name': 'tabId', - 'type': 'any' } ] }, @@ -269,15 +269,15 @@ 'name': 'get', 'parameters': [ { + 'name': 'tabId' + }, + { 'name': 'callback', 'parameters': [ { 'name': 'tab' } ] - }, - { - 'name': 'tabId' } ] }, @@ -378,15 +378,15 @@ 'name': 'get', 'parameters': [ { + 'name': 'tabId' + }, + { 'name': 'callback', 'parameters': [ { 'name': 'tab' } ] - }, - { - 'name': 'tabId' } ] },
diff --git a/chrome/common/extensions/docs/templates/private/type.html b/chrome/common/extensions/docs/templates/private/type.html index e5a27b0..2ab669c 100644 --- a/chrome/common/extensions/docs/templates/private/type.html +++ b/chrome/common/extensions/docs/templates/private/type.html
@@ -22,7 +22,11 @@ </dd> </dl> {{:e.description}} - {{?e.last}}or {{/}}<code>"{{e.name}}"</code>{{^e.last}}, {{/}} + {{^e.last}} + <code>"{{e.name}}"</code>, + {{:e.last}} + {{^e.first}}or {{/e.first}}<code>"{{e.name}}"</code> + {{/e.last}} {{/e.description}} {{/enum_values}} </td></tr>
diff --git a/chrome/common/extensions/docs/templates/private/variable_type.html b/chrome/common/extensions/docs/templates/private/variable_type.html index 0b9f232..9534f5a 100644 --- a/chrome/common/extensions/docs/templates/private/variable_type.html +++ b/chrome/common/extensions/docs/templates/private/variable_type.html
@@ -18,7 +18,14 @@ {{simple_type}} {{/simple_type}} {{?enum_values}} -enum of {{#e:enum_values}}{{?e.last}}or {{/}}<code>"{{e.name}}"</code>{{^e.last}}, {{/}}{{/}} +enum of +{{#e:enum_values}} + {{^e.last}} + <code>"{{e.name}}"</code>, + {{:e.last}} + {{^e.first}}or {{/e.first}}<code>"{{e.name}}"</code> + {{/e.last}} +{{/}} {{/enum_values}} {{?value}} <code>{{value}}</code>
diff --git a/chrome/common/features.gni b/chrome/common/features.gni index 56e5d608..a2c22fa 100644 --- a/chrome/common/features.gni +++ b/chrome/common/features.gni
@@ -6,6 +6,7 @@ import("//build/config/chromecast_build.gni") import("//build/config/compiler/compiler.gni") import("//build/config/features.gni") +import("//device/vr/features.gni") import("//extensions/features/features.gni") import("//media/media_options.gni") import("//net/features.gni")
diff --git a/chrome/common/multi_process_lock_unittest.cc b/chrome/common/multi_process_lock_unittest.cc index e51726d..11f5644 100644 --- a/chrome/common/multi_process_lock_unittest.cc +++ b/chrome/common/multi_process_lock_unittest.cc
@@ -54,20 +54,22 @@ void MultiProcessLockTest::ExpectLockIsLocked(const std::string &name) { ScopedEnvironmentVariable var(kLockEnviromentVarName, name); - base::Process process = SpawnChild("MultiProcessLockTryFailMain"); - ASSERT_TRUE(process.IsValid()); + base::SpawnChildResult spawn_child = + SpawnChild("MultiProcessLockTryFailMain"); + ASSERT_TRUE(spawn_child.process.IsValid()); int exit_code = -1; - EXPECT_TRUE(process.WaitForExit(&exit_code)); + EXPECT_TRUE(spawn_child.process.WaitForExit(&exit_code)); EXPECT_EQ(0, exit_code); } void MultiProcessLockTest::ExpectLockIsUnlocked( const std::string &name) { ScopedEnvironmentVariable var(kLockEnviromentVarName, name); - base::Process process = SpawnChild("MultiProcessLockTrySucceedMain"); - ASSERT_TRUE(process.IsValid()); + base::SpawnChildResult spawn_child = + SpawnChild("MultiProcessLockTrySucceedMain"); + ASSERT_TRUE(spawn_child.process.IsValid()); int exit_code = -1; - EXPECT_TRUE(process.WaitForExit(&exit_code)); + EXPECT_TRUE(spawn_child.process.WaitForExit(&exit_code)); EXPECT_EQ(0, exit_code); }
diff --git a/chrome/common/service_process_util_unittest.cc b/chrome/common/service_process_util_unittest.cc index 41a0c0e..e761c3a7 100644 --- a/chrome/common/service_process_util_unittest.cc +++ b/chrome/common/service_process_util_unittest.cc
@@ -101,10 +101,10 @@ } void ServiceProcessStateTest::LaunchAndWait(const std::string& name) { - base::Process process = SpawnChild(name); - ASSERT_TRUE(process.IsValid()); + base::SpawnChildResult spawn_child = SpawnChild(name); + ASSERT_TRUE(spawn_child.process.IsValid()); int exit_code = 0; - ASSERT_TRUE(process.WaitForExit(&exit_code)); + ASSERT_TRUE(spawn_child.process.WaitForExit(&exit_code)); ASSERT_EQ(exit_code, 0); } @@ -195,8 +195,9 @@ } TEST_F(ServiceProcessStateTest, MAYBE_ForceShutdown) { - base::Process process = SpawnChild("ServiceProcessStateTestShutdown"); - ASSERT_TRUE(process.IsValid()); + base::SpawnChildResult spawn_child = + SpawnChild("ServiceProcessStateTestShutdown"); + ASSERT_TRUE(spawn_child.process.IsValid()); for (int i = 0; !CheckServiceProcessReady() && i < 10; ++i) { base::PlatformThread::Sleep(TestTimeouts::tiny_timeout()); } @@ -206,8 +207,8 @@ ASSERT_TRUE(GetServiceProcessData(&version, &pid)); ASSERT_TRUE(ForceServiceProcessShutdown(version, pid)); int exit_code = 0; - ASSERT_TRUE(process.WaitForExitWithTimeout(TestTimeouts::action_max_timeout(), - &exit_code)); + ASSERT_TRUE(spawn_child.process.WaitForExitWithTimeout( + TestTimeouts::action_max_timeout(), &exit_code)); ASSERT_EQ(exit_code, 0); }
diff --git a/chrome/common/url_constants.cc b/chrome/common/url_constants.cc index 5054801..99dd99b 100644 --- a/chrome/common/url_constants.cc +++ b/chrome/common/url_constants.cc
@@ -290,7 +290,7 @@ const char kChromeUIWebApksHost[] = "webapks"; #endif -#if defined(ENABLE_WEBVR) +#if BUILDFLAG(ENABLE_WEBVR) const char kChromeUIVrShellUIHost[] = "vr-shell-ui"; #endif
diff --git a/chrome/common/url_constants.h b/chrome/common/url_constants.h index 4dfb7a6..5f8d4a0 100644 --- a/chrome/common/url_constants.h +++ b/chrome/common/url_constants.h
@@ -15,6 +15,7 @@ #include "build/build_config.h" #include "chrome/common/features.h" #include "content/public/common/url_constants.h" +#include "device/vr/features.h" #include "media/media_features.h" #include "ppapi/features/features.h" #include "printing/features/features.h" @@ -270,7 +271,7 @@ extern const char kChromeUIWebApksHost[]; #endif -#if defined(ENABLE_WEBVR) +#if BUILDFLAG(ENABLE_WEBVR) extern const char kChromeUIVrShellUIHost[]; #endif
diff --git a/chrome/installer/mini_installer/chrome.release b/chrome/installer/mini_installer/chrome.release index 5a603b1..e29974a6 100644 --- a/chrome/installer/mini_installer/chrome.release +++ b/chrome/installer/mini_installer/chrome.release
@@ -56,6 +56,12 @@ SmallLogo.png: %(VersionDir)s\VisualElements\ SmallLogoCanary.png: %(VersionDir)s\VisualElements\ +# +# SwiftShader sub-dir +# +swiftshader\libEGL.dll: %(VersionDir)s\swiftshader\ +swiftshader\libGLESv2.dll: %(VersionDir)s\swiftshader\ + [HIDPI] chrome_200_percent.pak: %(VersionDir)s\
diff --git a/chrome/installer/setup/setup_singleton_unittest.cc b/chrome/installer/setup/setup_singleton_unittest.cc index 60c69a9..b6459cf 100644 --- a/chrome/installer/setup/setup_singleton_unittest.cc +++ b/chrome/installer/setup/setup_singleton_unittest.cc
@@ -140,7 +140,9 @@ base::Process SpawnChildProcess(const std::string& process_name) { base::LaunchOptions options; options.start_hidden = true; - return SpawnChildWithOptions(process_name, options); + base::SpawnChildResult spawn_result = + SpawnChildWithOptions(process_name, options); + return std::move(spawn_result.process); } const base::FilePath& install_dir_path() const {
diff --git a/chrome/renderer/autofill/password_generation_agent_browsertest.cc b/chrome/renderer/autofill/password_generation_agent_browsertest.cc index 4b2a2da..7da0adf 100644 --- a/chrome/renderer/autofill/password_generation_agent_browsertest.cc +++ b/chrome/renderer/autofill/password_generation_agent_browsertest.cc
@@ -272,6 +272,14 @@ " <INPUT type = 'submit' value = 'Login'/> " "</FORM>"; +const char kPasswordFormAndSpanHTML[] = + "<FORM name = 'blah' action = 'http://www.random.com/pa/th?q=1&p=3#first'>" + " <INPUT type = 'text' id = 'username'/> " + " <INPUT type = 'password' id = 'password'/> " + " <INPUT type = 'button' id = 'dummy'/> " + "</FORM>" + "<SPAN id='span'>Text to click on</SPAN>"; + TEST_F(PasswordGenerationAgentTest, DetectionTest) { // Don't shown the icon for non account creation forms. LoadHTMLWithUserGesture(kSigninFormHTML); @@ -767,4 +775,39 @@ EXPECT_EQ(password, confirmation_password_element.value().utf16()); } +TEST_F(PasswordGenerationAgentTest, RevealPassword) { + // Checks that revealed password is masked when the field lost focus. + // Test cases: user click on another input field and on non-focusable element. + LoadHTMLWithUserGesture(kPasswordFormAndSpanHTML); + SetNotBlacklistedMessage(password_generation_, kPasswordFormAndSpanHTML); + SetAccountCreationFormsDetectedMessage(password_generation_, + GetMainFrame()->document(), 0, 1); + const char* kGenerationElementId = "password"; + const char* kSpanId = "span"; + const char* kTextFieldId = "username"; + + ExpectGenerationAvailable(kGenerationElementId, true); + password_generation_->GeneratedPasswordAccepted(base::ASCIIToUTF16("pwd")); + + const bool kFalseTrue[] = {false, true}; + for (bool clickOnInputField : kFalseTrue) { + SCOPED_TRACE(testing::Message("clickOnInputField = ") << clickOnInputField); + // Click on the generation field to reveal the password value. + FocusField(kGenerationElementId); + + WebDocument document = GetMainFrame()->document(); + blink::WebElement element = document.getElementById( + blink::WebString::fromUTF8(kGenerationElementId)); + ASSERT_FALSE(element.isNull()); + blink::WebInputElement input = element.to<WebInputElement>(); + EXPECT_TRUE(input.shouldRevealPassword()); + + // Click on another HTML element. + const char* const click_target_name = + clickOnInputField ? kTextFieldId : kSpanId; + EXPECT_TRUE(SimulateElementClick(click_target_name)); + EXPECT_FALSE(input.shouldRevealPassword()); + } +} + } // namespace autofill
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn index 753b752..3c5f150a 100644 --- a/chrome/test/BUILD.gn +++ b/chrome/test/BUILD.gn
@@ -4643,6 +4643,8 @@ "../browser/ui/cocoa/omnibox/omnibox_popup_separator_view_unittest.mm", "../browser/ui/cocoa/omnibox/omnibox_popup_view_mac_unittest.mm", "../browser/ui/cocoa/omnibox/omnibox_view_mac_unittest.mm", + "../browser/ui/cocoa/page_info/permission_selector_button_unittest.mm", + "../browser/ui/cocoa/page_info/website_settings_bubble_controller_unittest.mm", "../browser/ui/cocoa/passwords/account_chooser_view_controller_unittest.mm", "../browser/ui/cocoa/passwords/autosignin_prompt_view_controller_unittest.mm", "../browser/ui/cocoa/passwords/base_passwords_controller_test.h", @@ -4691,8 +4693,6 @@ "../browser/ui/cocoa/view_resizer_pong.h", "../browser/ui/cocoa/view_resizer_pong.mm", "../browser/ui/cocoa/website_settings/permission_bubble_controller_unittest.mm", - "../browser/ui/cocoa/website_settings/permission_selector_button_unittest.mm", - "../browser/ui/cocoa/website_settings/website_settings_bubble_controller_unittest.mm", "../browser/ui/cocoa/window_size_autosaver_unittest.mm", ] }
diff --git a/chrome/test/android/javatests/src/org/chromium/chrome/test/BottomSheetTestCaseBase.java b/chrome/test/android/javatests/src/org/chromium/chrome/test/BottomSheetTestCaseBase.java index c3043f7..a24a1bf 100644 --- a/chrome/test/android/javatests/src/org/chromium/chrome/test/BottomSheetTestCaseBase.java +++ b/chrome/test/android/javatests/src/org/chromium/chrome/test/BottomSheetTestCaseBase.java
@@ -6,6 +6,8 @@ import static org.chromium.chrome.test.util.ChromeRestriction.RESTRICTION_TYPE_PHONE; +import android.support.v7.widget.RecyclerView; + import org.chromium.base.ThreadUtils; import org.chromium.base.test.util.CommandLineFlags; import org.chromium.base.test.util.Restriction; @@ -42,8 +44,10 @@ BottomSheet.SHEET_STATE_FULL, /* animate = */ false); } }); + // The default BottomSheetContent is SuggestionsBottomSheetContent, whose content view is a + // RecyclerView. RecyclerViewTestUtils.waitForStableRecyclerView( - getBottomSheetContent().getScrollingContentView()); + ((RecyclerView) getBottomSheetContent().getContentView())); mBottomSheet = getActivity().getBottomSheet(); }
diff --git a/chrome/test/android/javatests/src/org/chromium/chrome/test/ChromeInstrumentationTestRunner.java b/chrome/test/android/javatests/src/org/chromium/chrome/test/ChromeInstrumentationTestRunner.java index 9148df99..6ac1505 100644 --- a/chrome/test/android/javatests/src/org/chromium/chrome/test/ChromeInstrumentationTestRunner.java +++ b/chrome/test/android/javatests/src/org/chromium/chrome/test/ChromeInstrumentationTestRunner.java
@@ -74,10 +74,9 @@ (Class<? extends VrClassesWrapper>) Class.forName( "org.chromium.chrome.browser.vr_shell.VrClassesWrapperImpl"); Constructor<?> vrClassesBuilderConstructor = - vrClassesBuilderClass.getConstructor(Context.class); + vrClassesBuilderClass.getConstructor(); VrClassesWrapper vrClassesBuilder = - (VrClassesWrapper) vrClassesBuilderConstructor.newInstance( - getTargetContext()); + (VrClassesWrapper) vrClassesBuilderConstructor.newInstance(); mDaydreamApi = vrClassesBuilder.createVrDaydreamApi(getTargetContext()); } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException
diff --git a/chrome/test/chromedriver/chrome/console_logger_unittest.cc b/chrome/test/chromedriver/chrome/console_logger_unittest.cc index c4b6e5bd..c3492d25 100644 --- a/chrome/test/chromedriver/chrome/console_logger_unittest.cc +++ b/chrome/test/chromedriver/chrome/console_logger_unittest.cc
@@ -87,6 +87,8 @@ const std::string& source, const std::string& message) override; + bool Emptied() const override; + const ScopedVector<LogEntry>& GetEntries() { return entries_; } @@ -102,6 +104,10 @@ entries_.push_back(new LogEntry(timestamp, level, source, message)); } +bool FakeLog::Emptied() const { + return true; +} + void ValidateLogEntry(const LogEntry *entry, Log::Level expected_level, const std::string& expected_source,
diff --git a/chrome/test/chromedriver/chrome/log.h b/chrome/test/chromedriver/chrome/log.h index 4e7ecc2..6bb9269 100644 --- a/chrome/test/chromedriver/chrome/log.h +++ b/chrome/test/chromedriver/chrome/log.h
@@ -35,6 +35,8 @@ const std::string& source, const std::string& message) = 0; + virtual bool Emptied() const = 0; + // Adds an entry to the log, timestamped with the current time. void AddEntry(Level level, const std::string& source,
diff --git a/chrome/test/chromedriver/logging.cc b/chrome/test/chromedriver/logging.cc index e7662f64..eacb53fa 100644 --- a/chrome/test/chromedriver/logging.cc +++ b/chrome/test/chromedriver/logging.cc
@@ -142,8 +142,7 @@ } WebDriverLog::WebDriverLog(const std::string& type, Log::Level min_level) - : type_(type), min_level_(min_level) { -} + : type_(type), min_level_(min_level), emptied_(true) {} WebDriverLog::~WebDriverLog() { size_t sum = 0; @@ -157,9 +156,11 @@ std::unique_ptr<base::ListValue> ret; if (batches_of_entries_.empty()) { ret.reset(new base::ListValue()); + emptied_ = true; } else { ret = std::move(batches_of_entries_.front()); batches_of_entries_.pop_front(); + emptied_ = false; } return ret; } @@ -215,6 +216,10 @@ } } +bool WebDriverLog::Emptied() const { + return emptied_; +} + const std::string& WebDriverLog::type() const { return type_; }
diff --git a/chrome/test/chromedriver/logging.h b/chrome/test/chromedriver/logging.h index 09a065b9..6518f83 100644 --- a/chrome/test/chromedriver/logging.h +++ b/chrome/test/chromedriver/logging.h
@@ -56,6 +56,9 @@ const std::string& source, const std::string& message) override; + // Whether or not batches_of_entries_ is empty when it is being emptied. + bool Emptied() const override; + const std::string& type() const; void set_min_level(Level min_level); Level min_level() const; @@ -63,6 +66,9 @@ private: const std::string type_; // WebDriver log type. Level min_level_; // Minimum level of entries to store. + // Log is empty when it is emptied, or when it is initialized (because we + // want GetLog to collect trace events initially). + bool emptied_; // A queue of batches of entries. Each batch can have no more than // |kMaxReturnedEntries| values in it. This is to avoid HTTP response buffer
diff --git a/chrome/test/chromedriver/performance_logger.cc b/chrome/test/chromedriver/performance_logger.cc index 4cc8599..5887650e 100644 --- a/chrome/test/chromedriver/performance_logger.cc +++ b/chrome/test/chromedriver/performance_logger.cc
@@ -42,7 +42,13 @@ } // Returns whether |command| is in kRequestTraceCommands[] (case-insensitive). -bool ShouldRequestTraceEvents(const std::string& command) { +// In the case of GetLog, also check if it has been called previously, that it +// was emptying an empty log. +bool ShouldRequestTraceEvents(const std::string& command, + const bool log_emptied) { + if (base::EqualsCaseInsensitiveASCII(command, "GetLog") && !log_emptied) + return false; + for (auto* request_command : kRequestTraceCommands) { if (base::EqualsCaseInsensitiveASCII(command, request_command)) return true; @@ -103,7 +109,8 @@ Status PerformanceLogger::BeforeCommand(const std::string& command_name) { // Only dump trace buffer after tracing has been started. - if (trace_buffering_ && ShouldRequestTraceEvents(command_name)) { + if (trace_buffering_ && + ShouldRequestTraceEvents(command_name, log_->Emptied())) { Status status = CollectTraceEvents(); if (status.IsError()) return status;
diff --git a/chrome/test/chromedriver/performance_logger_unittest.cc b/chrome/test/chromedriver/performance_logger_unittest.cc index c499ff62..0c906ec9 100644 --- a/chrome/test/chromedriver/performance_logger_unittest.cc +++ b/chrome/test/chromedriver/performance_logger_unittest.cc
@@ -106,6 +106,8 @@ const std::string& source, const std::string& message) override; + bool Emptied() const override; + const ScopedVector<LogEntry>& GetEntries() { return entries_; } @@ -121,6 +123,10 @@ entries_.push_back(new LogEntry(timestamp, level, source, message)); } +bool FakeLog::Emptied() const { + return true; +} + std::unique_ptr<base::DictionaryValue> ParseDictionary( const std::string& json) { std::string error;
diff --git a/chrome/test/chromedriver/test/run_py_tests.py b/chrome/test/chromedriver/test/run_py_tests.py index 712e9072e..799137f 100755 --- a/chrome/test/chromedriver/test/run_py_tests.py +++ b/chrome/test/chromedriver/test/run_py_tests.py
@@ -73,14 +73,6 @@ _VERSION_SPECIFIC_FILTER['HEAD'] = [ # https://bugs.chromium.org/p/chromedriver/issues/detail?id=992 'ChromeDownloadDirTest.testDownloadDirectoryOverridesExistingPreferences', - # https://bugs.chromium.org/p/chromedriver/issues/detail?id=1673 - 'ChromeDownloadDirTest.testFileDownloadWithGet', - 'ChromeDriverPageLoadTimeoutTest.*', -] -_VERSION_SPECIFIC_FILTER['58'] = [ - # https://bugs.chromium.org/p/chromedriver/issues/detail?id=1673 - 'ChromeDownloadDirTest.testFileDownloadWithGet', - 'ChromeDriverPageLoadTimeoutTest.*', ] _VERSION_SPECIFIC_FILTER['57'] = [ # https://bugs.chromium.org/p/chromedriver/issues/detail?id=992 @@ -175,8 +167,6 @@ 'ChromeDriverTest.testHoverOverElement', # https://bugs.chromium.org/p/chromedriver/issues/detail?id=1478 'ChromeDriverTest.testShouldHandleNewWindowLoadingProperly', - # https://bugs.chromium.org/p/chromedriver/issues/detail?id=1673 - 'ChromeDriverPageLoadTimeoutTest.testPageLoadTimeoutCrossDomain', ] ) _ANDROID_NEGATIVE_FILTER['chromedriver_webview_shell'] = (
diff --git a/chrome/test/data/extensions/api_test/desktop_capture/test.js b/chrome/test/data/extensions/api_test/desktop_capture/test.js index bdf3131..1061fec 100644 --- a/chrome/test/data/extensions/api_test/desktop_capture/test.js +++ b/chrome/test/data/extensions/api_test/desktop_capture/test.js
@@ -134,15 +134,21 @@ // 5. To actually get audio track, user permission is always necessary; // 6. To actually get audio track, getUserMedia() should set audio // constraint. - function tabShareWithAudioPermissionGetStream() { - chrome.desktopCapture.chooseDesktopMedia( - ["tab", "audio"], onPickerResult.bind(undefined, 1)); - }, - function windowShareWithAudioPermissionGetStream() { - chrome.desktopCapture.chooseDesktopMedia( - ["window", "audio"], onPickerResult.bind(undefined, 0)); - }, + // Only screenShare can be tested currently, because "chooseDesktopMedia" will + // return fake source id to tab/windowShare, with which tab/window catpure + // can't be started successfully. + // TODO(braveyao): get below cases working again. http://crbug.com/699201 + + //function tabShareWithAudioPermissionGetStream() { + // chrome.desktopCapture.chooseDesktopMedia( + // ["tab", "audio"], onPickerResult.bind(undefined, 1)); + //}, + + //function windowShareWithAudioPermissionGetStream() { + // chrome.desktopCapture.chooseDesktopMedia( + // ["window", "audio"], onPickerResult.bind(undefined, 0)); + //}, function screenShareWithAudioPermissionGetStream() { chrome.desktopCapture.chooseDesktopMedia( @@ -151,15 +157,15 @@ expected_audio_tracks_for_screen_share)); }, - function tabShareWithoutAudioPermissionGetStream() { - chrome.desktopCapture.chooseDesktopMedia( - ["tab", "audio"], onPickerResult.bind(undefined, 0)); - }, + //function tabShareWithoutAudioPermissionGetStream() { + // chrome.desktopCapture.chooseDesktopMedia( + // ["tab", "audio"], onPickerResult.bind(undefined, 0)); + //}, - function windowShareWithoutAudioPermissionGetStream() { - chrome.desktopCapture.chooseDesktopMedia( - ["window", "audio"], onPickerResult.bind(undefined, 0)); - }, + //function windowShareWithoutAudioPermissionGetStream() { + // chrome.desktopCapture.chooseDesktopMedia( + // ["window", "audio"], onPickerResult.bind(undefined, 0)); + //}, function screenShareWithoutAudioPermissionGetStream() { chrome.desktopCapture.chooseDesktopMedia(
diff --git a/chrome/test/data/extensions/web_request_site_process_registration/blocked.html b/chrome/test/data/extensions/web_request_site_process_registration/blocked.html new file mode 100644 index 0000000..f251fa3 --- /dev/null +++ b/chrome/test/data/extensions/web_request_site_process_registration/blocked.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> +<head></head> +<body>Mostly empty page, which will be blocked from loading.</body> +</html>
diff --git a/chrome/test/data/extensions/web_request_site_process_registration/manifest.json b/chrome/test/data/extensions/web_request_site_process_registration/manifest.json new file mode 100644 index 0000000..7df7d42 --- /dev/null +++ b/chrome/test/data/extensions/web_request_site_process_registration/manifest.json
@@ -0,0 +1,8 @@ +{ + "name": "webRequest Blocking", + "version": "1.0", + "manifest_version": 2, + "description": "Tests navigation to a page blocked by webRequest API.", + "permissions": ["webRequest", "webRequestBlocking", "<all_urls>"], + "web_accessible_resources": [ "blocked.html" ] +}
diff --git a/chrome/test/data/extensions/web_request_site_process_registration/test.html b/chrome/test/data/extensions/web_request_site_process_registration/test.html new file mode 100644 index 0000000..89b5fc26 --- /dev/null +++ b/chrome/test/data/extensions/web_request_site_process_registration/test.html
@@ -0,0 +1,6 @@ +<!-- + * 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. +--> +<script src="test.js"></script>
diff --git a/chrome/test/data/extensions/web_request_site_process_registration/test.js b/chrome/test/data/extensions/web_request_site_process_registration/test.js new file mode 100644 index 0000000..a7f5d61 --- /dev/null +++ b/chrome/test/data/extensions/web_request_site_process_registration/test.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. + +chrome.webRequest.onBeforeRequest.addListener( + function(details) { + if (details.url == chrome.extension.getURL("/blocked.html")) { + return {cancel: true}; + } + }, + {urls: ["<all_urls>"]}, + ["blocking"] +);
diff --git a/chrome/test/data/safe_browsing/dmg/make_hfs.sh b/chrome/test/data/safe_browsing/dmg/make_hfs.sh index 129dfd0d..4287ee4 100755 --- a/chrome/test/data/safe_browsing/dmg/make_hfs.sh +++ b/chrome/test/data/safe_browsing/dmg/make_hfs.sh
@@ -33,6 +33,7 @@ RAMDISK_VOLUME=$(hdiutil attach -nomount ram://$RAMDISK_SIZE) diskutil erasevolume "${FILESYSTEM_TYPE}" "${VOLUME_NAME}" ${RAMDISK_VOLUME} +diskutil mount ${RAMDISK_VOLUME} pushd "/Volumes/${VOLUME_NAME}"
diff --git a/chrome/test/data/webui/md_bookmarks/item_test.js b/chrome/test/data/webui/md_bookmarks/item_test.js index 05d7fac3..3c4ab5c 100644 --- a/chrome/test/data/webui/md_bookmarks/item_test.js +++ b/chrome/test/data/webui/md_bookmarks/item_test.js
@@ -9,18 +9,18 @@ setup(function() { store = new bookmarks.TestStore({ - nodes: testTree(createFolder('1', [createItem(['0'])])), + nodes: testTree(createFolder('1', [createItem(['2'])])), }); bookmarks.Store.instance_ = store; item = document.createElement('bookmarks-item'); - item.itemId = '0'; + item.itemId = '2'; replaceBody(item); }); test('changing the url changes the favicon', function() { var favicon = item.$.icon.style.backgroundImage; - store.data.nodes['0'] = createItem('0', {url: 'https://mail.google.com'}); + store.data.nodes['2'] = createItem('0', {url: 'https://mail.google.com'}); store.notifyObservers(); assertNotEquals(favicon, item.$.icon.style.backgroundImage); });
diff --git a/chrome/test/data/webui/md_bookmarks/reducers_test.js b/chrome/test/data/webui/md_bookmarks/reducers_test.js index 381515db..0d9da77 100644 --- a/chrome/test/data/webui/md_bookmarks/reducers_test.js +++ b/chrome/test/data/webui/md_bookmarks/reducers_test.js
@@ -4,37 +4,39 @@ suite('closed folder state', function() { var nodes; + // TODO(tsergeant): Remove use of 'initialState' and 'nextState'. var initialState; setup(function() { - nodes = testTree(createFolder('0', [ - createFolder('1', []), + nodes = testTree(createFolder('1', [ + createFolder('2', []), ])); initialState = {}; }); test('toggle folder open state', function() { - var action = bookmarks.actions.changeFolderOpen('1', false); + var action = bookmarks.actions.changeFolderOpen('2', false); var nextState = bookmarks.ClosedFolderState.updateClosedFolders( initialState, action, nodes); - assertTrue(nextState['1']); - assertFalse(!!nextState['0']); + assertFalse(!!nextState['1']); + assertTrue(nextState['2']); }); test('select folder with closed parent', function() { var action; var nextState; - // Close '0' - action = bookmarks.actions.changeFolderOpen('0', false); + // Close '1' + action = bookmarks.actions.changeFolderOpen('1', false); nextState = bookmarks.ClosedFolderState.updateClosedFolders( initialState, action, nodes); - assertTrue(nextState['0']); + assertTrue(nextState['1']); + assertFalse(!!nextState['2']); - // Should re-open when '1' is selected. - action = bookmarks.actions.selectFolder('1'); + // Should re-open when '2' is selected. + action = bookmarks.actions.selectFolder('2'); nextState = bookmarks.ClosedFolderState.updateClosedFolders( nextState, action, nodes); - assertFalse(nextState['0']); + assertFalse(!!nextState['1']); }); }); @@ -43,32 +45,32 @@ var initialState; setup(function() { - nodes = testTree(createFolder('0', [ - createFolder('1', []), + nodes = testTree(createFolder('1', [ + createFolder('2', []), ])); - initialState = '0'; + initialState = '1'; }); test('updates from selectFolder action', function() { - var action = bookmarks.actions.selectFolder('1'); + var action = bookmarks.actions.selectFolder('2'); var newState = bookmarks.SelectedFolderState.updateSelectedFolder( initialState, action, nodes); - assertEquals('1', newState); + assertEquals('2', newState); }); test('updates when parent of selected folder is closed', function() { var action; var newState; - action = bookmarks.actions.selectFolder('1'); + action = bookmarks.actions.selectFolder('2'); newState = bookmarks.SelectedFolderState.updateSelectedFolder( initialState, action, nodes); - action = bookmarks.actions.changeFolderOpen('0', false); + action = bookmarks.actions.changeFolderOpen('1', false); newState = bookmarks.SelectedFolderState.updateSelectedFolder( newState, action, nodes); - assertEquals('0', newState); + assertEquals('1', newState); }); }); @@ -76,16 +78,15 @@ var initialState; setup(function() { - initialState = testTree(createFolder('0', [ - createFolder( - '1', - [ - createItem('2', {title: 'a', url: 'a.com'}), - createItem('3'), - createFolder('4', []), - ]), - createFolder('5', []), - ])); + initialState = testTree( + createFolder( + '1', + [ + createItem('2', {title: 'a', url: 'a.com'}), + createItem('3'), + createFolder('4', []), + ]), + createFolder('5', [])); }); test('updates when a node is edited', function() { @@ -125,3 +126,64 @@ // entirely. }); }); + +suite('search state', function() { + var state; + + setup(function() { + // Search touches a few different things, so we test using the entire state: + state = bookmarks.util.createEmptyState(); + state.nodes = testTree(createFolder('1', [ + createFolder( + '2', + [ + createItem('3'), + ]), + ])); + }); + + test('updates when search is started and finished', function() { + var action; + + action = bookmarks.actions.selectFolder('2'); + state = bookmarks.reduceAction(state, action); + + action = bookmarks.actions.setSearchTerm('test'); + state = bookmarks.reduceAction(state, action); + + assertEquals('test', state.search.term); + assertTrue(state.search.inProgress); + + // UI should not have changed yet: + assertEquals('2', state.selectedFolder); + assertDeepEquals(['3'], bookmarks.util.getDisplayedList(state)); + + action = bookmarks.actions.setSearchResults(['2', '3']); + var searchedState = bookmarks.reduceAction(state, action); + + assertFalse(searchedState.search.inProgress); + + // UI changes once search results arrive: + assertEquals(null, searchedState.selectedFolder); + assertDeepEquals( + ['2', '3'], bookmarks.util.getDisplayedList(searchedState)); + + // Case 1: Clear search by setting an empty search term. + action = bookmarks.actions.setSearchTerm(''); + var clearedState = bookmarks.reduceAction(searchedState, action); + + assertEquals('1', clearedState.selectedFolder); + assertDeepEquals(['2'], bookmarks.util.getDisplayedList(clearedState)); + assertEquals('', clearedState.search.term); + assertDeepEquals([], clearedState.search.results); + + // Case 2: Clear search by selecting a new folder. + action = bookmarks.actions.selectFolder('2'); + var selectedState = bookmarks.reduceAction(searchedState, action); + + assertEquals('2', selectedState.selectedFolder); + assertDeepEquals(['3'], bookmarks.util.getDisplayedList(selectedState)); + assertEquals('', selectedState.search.term); + assertDeepEquals([], selectedState.search.results); + }); +});
diff --git a/chrome/test/data/webui/md_bookmarks/sidebar_test.js b/chrome/test/data/webui/md_bookmarks/sidebar_test.js index b43113f3..7906669 100644 --- a/chrome/test/data/webui/md_bookmarks/sidebar_test.js +++ b/chrome/test/data/webui/md_bookmarks/sidebar_test.js
@@ -8,20 +8,19 @@ setup(function() { store = new bookmarks.TestStore({ - nodes: testTree(createFolder('0', [ - createFolder( - '1', - [ - createFolder( - '2', - [ - createFolder('3', []), - createFolder('4', []), - ]), - createItem('5'), - ]), - createFolder('7', []), - ])), + nodes: testTree( + createFolder( + '1', + [ + createFolder( + '2', + [ + createFolder('3', []), + createFolder('4', []), + ]), + createItem('5'), + ]), + createFolder('7', [])), }); bookmarks.Store.instance_ = store;
diff --git a/chrome/test/data/webui/md_bookmarks/test_util.js b/chrome/test/data/webui/md_bookmarks/test_util.js index 60dace2..f8c4de2 100644 --- a/chrome/test/data/webui/md_bookmarks/test_util.js +++ b/chrome/test/data/webui/md_bookmarks/test_util.js
@@ -12,10 +12,13 @@ } /** - * Convert a tree of bookmark nodes into a normalized lookup table of nodes. + * Convert a list of top-level bookmark nodes into a normalized lookup table of + * nodes. + * @param {...BookmarkTreeNode} nodes */ -function testTree(root) { - return bookmarks.util.normalizeNodes(root); +function testTree(nodes) { + return bookmarks.util.normalizeNodes( + createFolder('0', Array.from(arguments))); } /**
diff --git a/chrome/test/data/webui/settings/focusable_iron_list_item_behavior_test.js b/chrome/test/data/webui/settings/focusable_iron_list_item_behavior_test.js index ca95400..3decda4e 100644 --- a/chrome/test/data/webui/settings/focusable_iron_list_item_behavior_test.js +++ b/chrome/test/data/webui/settings/focusable_iron_list_item_behavior_test.js
@@ -41,4 +41,22 @@ MockInteractions.tap(testElement); assertTrue(testElement.classList.contains('no-outline')); }); + + test('"enter" key event should not propagate out of element', function() { + var container = document.createElement('div'); + container.appendChild(testElement); + document.body.appendChild(container); + + var reached = false; + container.addEventListener('keydown', function() { + reached = true; + }); + + MockInteractions.keyEventOn(testElement, 'keydown', 13, undefined, 'Enter'); + assertFalse(reached); + + // Test other keys still work. + MockInteractions.keyEventOn(testElement, 'keydown', 9, undefined, 'Tab'); + assertTrue(reached); + }); });
diff --git a/chrome/tools/build/win/FILES.cfg b/chrome/tools/build/win/FILES.cfg index 74ec2ab..3caabf85 100644 --- a/chrome/tools/build/win/FILES.cfg +++ b/chrome/tools/build/win/FILES.cfg
@@ -382,6 +382,17 @@ 'buildtype': ['dev', 'official'], 'filegroup': ['default', 'symsrc'], }, + # SwiftShader files: + { + 'filename': 'swiftshader/libEGL.dll', + 'buildtype': ['dev', 'official'], + 'filegroup': ['default', 'symsrc'], + }, + { + 'filename': 'swiftshader/libGLESv2.dll', + 'buildtype': ['dev', 'official'], + 'filegroup': ['default', 'symsrc'], + }, # Native Client plugin files: { 'filename': 'nacl_irt_x86_32.nexe', @@ -607,6 +618,16 @@ 'archive': 'chrome-win32-syms.zip', }, { + 'filename': 'swiftshader/libEGL.dll.pdb', + 'buildtype': ['dev', 'official'], + 'archive': 'chrome-win32-syms.zip', + }, + { + 'filename': 'swiftshader/libGLESv2.dll.pdb', + 'buildtype': ['dev', 'official'], + 'archive': 'chrome-win32-syms.zip', + }, + { 'filename': 'mini_installer.exe.pdb', 'buildtype': ['dev', 'official'], 'archive': 'chrome-win32-syms.zip',
diff --git a/chromecast/browser/cast_browser_main_parts.cc b/chromecast/browser/cast_browser_main_parts.cc index bf8e156..81bf1e9 100644 --- a/chromecast/browser/cast_browser_main_parts.cc +++ b/chromecast/browser/cast_browser_main_parts.cc
@@ -227,8 +227,12 @@ { switches::kEnableDefaultMediaSession, "" }, #endif #if BUILDFLAG(IS_CAST_AUDIO_ONLY) +#if defined(OS_ANDROID) + { switches::kDisableGLDrawingForTests, "" }, +#else { switches::kDisableGpu, "" }, -#endif +#endif // defined(OS_ANDROID) +#endif // BUILDFLAG(IS_CAST_AUDIO_ONLY) #if defined(OS_LINUX) #if defined(ARCH_CPU_X86_FAMILY) // This is needed for now to enable the x11 Ozone platform to work with
diff --git a/chromecast/media/audio/cast_audio_output_stream.cc b/chromecast/media/audio/cast_audio_output_stream.cc index 654c4b4..612519c 100644 --- a/chromecast/media/audio/cast_audio_output_stream.cc +++ b/chromecast/media/audio/cast_audio_output_stream.cc
@@ -16,6 +16,8 @@ #include "chromecast/public/media/decoder_config.h" #include "chromecast/public/media/media_pipeline_backend.h" #include "chromecast/public/media/media_pipeline_device_params.h" +#include "chromecast/public/volume_control.h" +#include "media/audio/audio_device_description.h" #include "media/base/decoder_buffer.h" namespace { @@ -48,7 +50,8 @@ MediaPipelineDeviceParams device_params( MediaPipelineDeviceParams::kModeIgnorePts, MediaPipelineDeviceParams::kAudioStreamSoundEffects, - backend_task_runner_.get()); + backend_task_runner_.get(), AudioContentType::kMedia, + ::media::AudioDeviceDescription::kDefaultDeviceId); backend_ = audio_manager->CreateMediaPipelineBackend(device_params); if (!backend_) return false;
diff --git a/chromecast/media/base/audio_device_ids.cc b/chromecast/media/base/audio_device_ids.cc index 1ddb012..4f0f9b7 100644 --- a/chromecast/media/base/audio_device_ids.cc +++ b/chromecast/media/base/audio_device_ids.cc
@@ -7,8 +7,8 @@ namespace chromecast { namespace media { +const char kLocalAudioDeviceId[] = "local"; const char kAlarmAudioDeviceId[] = "assistant-alarm"; -const char kEarconAudioDeviceId[] = "default-earcon"; const char kTtsAudioDeviceId[] = "assistant-tts"; } // namespace media
diff --git a/chromecast/media/base/audio_device_ids.h b/chromecast/media/base/audio_device_ids.h index f8d639a17..845a679 100644 --- a/chromecast/media/base/audio_device_ids.h +++ b/chromecast/media/base/audio_device_ids.h
@@ -8,13 +8,14 @@ namespace chromecast { namespace media { -extern const char kAlarmAudioDeviceId[]; -extern const char kEarconAudioDeviceId[]; -extern const char kTtsAudioDeviceId[]; +// Local-only audio (don't send over multiroom). +extern const char kLocalAudioDeviceId[]; -const int kDefaultAudioStreamType = 0; -const int kAlarmAudioStreamType = 1; -const int kTtsAudioStreamType = 2; +extern const char kAlarmAudioDeviceId[]; + +// TODO(kmackay|bshaya) Remove this, just use +// ::media::AudioDeviceDescription::kCommunicationsDeviceId. +extern const char kTtsAudioDeviceId[]; } // namespace media } // namespace chromecast
diff --git a/chromecast/media/cma/backend/BUILD.gn b/chromecast/media/cma/backend/BUILD.gn index 46ebcdb..e24eee2 100644 --- a/chromecast/media/cma/backend/BUILD.gn +++ b/chromecast/media/cma/backend/BUILD.gn
@@ -7,8 +7,6 @@ source_set("backend") { sources = [ - "audio_decoder_wrapper.cc", - "audio_decoder_wrapper.h", "media_pipeline_backend_factory.cc", "media_pipeline_backend_factory.h", "media_pipeline_backend_manager.cc",
diff --git a/chromecast/media/cma/backend/alsa/stream_mixer_alsa.cc b/chromecast/media/cma/backend/alsa/stream_mixer_alsa.cc index e8a9558..0430d33 100644 --- a/chromecast/media/cma/backend/alsa/stream_mixer_alsa.cc +++ b/chromecast/media/cma/backend/alsa/stream_mixer_alsa.cc
@@ -269,7 +269,7 @@ filter_groups_.push_back(base::MakeUnique<FilterGroup>( std::unordered_set<std::string>( {::media::AudioDeviceDescription::kDefaultDeviceId, - kEarconAudioDeviceId, ""}), + kLocalAudioDeviceId, ""}), AudioFilterFactory::MEDIA_AUDIO_FILTER)); DefineAlsaParameters();
diff --git a/chromecast/media/cma/backend/audio_decoder_wrapper.cc b/chromecast/media/cma/backend/audio_decoder_wrapper.cc deleted file mode 100644 index eff40d3e..0000000 --- a/chromecast/media/cma/backend/audio_decoder_wrapper.cc +++ /dev/null
@@ -1,55 +0,0 @@ -// Copyright 2016 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 "chromecast/media/cma/backend/audio_decoder_wrapper.h" - -#include "base/logging.h" - -namespace chromecast { -namespace media { - -AudioDecoderWrapper::AudioDecoderWrapper( - MediaPipelineBackend::AudioDecoder* audio_decoder) - : audio_decoder_(audio_decoder), - stream_type_volume_(1.0), - stream_volume_(1.0) { - DCHECK(audio_decoder_); -} - -AudioDecoderWrapper::~AudioDecoderWrapper() { -} - -void AudioDecoderWrapper::SetDelegate(Delegate* delegate) { - audio_decoder_->SetDelegate(delegate); -} - -MediaPipelineBackend::BufferStatus AudioDecoderWrapper::PushBuffer( - CastDecoderBuffer* buffer) { - return audio_decoder_->PushBuffer(buffer); -} - -void AudioDecoderWrapper::GetStatistics(Statistics* statistics) { - audio_decoder_->GetStatistics(statistics); -} - -bool AudioDecoderWrapper::SetConfig(const AudioConfig& config) { - return audio_decoder_->SetConfig(config); -} - -bool AudioDecoderWrapper::SetVolume(float multiplier) { - stream_volume_ = multiplier; - return audio_decoder_->SetVolume(stream_volume_ * stream_type_volume_); -} - -AudioDecoderWrapper::RenderingDelay AudioDecoderWrapper::GetRenderingDelay() { - return audio_decoder_->GetRenderingDelay(); -} - -bool AudioDecoderWrapper::SetStreamTypeVolume(float stream_type_volume) { - stream_type_volume_ = stream_type_volume; - return audio_decoder_->SetVolume(stream_volume_ * stream_type_volume_); -} - -} // namespace media -} // namespace chromecast
diff --git a/chromecast/media/cma/backend/audio_decoder_wrapper.h b/chromecast/media/cma/backend/audio_decoder_wrapper.h deleted file mode 100644 index 3a4ccf4..0000000 --- a/chromecast/media/cma/backend/audio_decoder_wrapper.h +++ /dev/null
@@ -1,42 +0,0 @@ -// Copyright 2016 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 CHROMECAST_MEDIA_CMA_BACKEND_AUDIO_DECODER_WRAPPER_H_ -#define CHROMECAST_MEDIA_CMA_BACKEND_AUDIO_DECODER_WRAPPER_H_ - -#include "base/macros.h" -#include "chromecast/public/media/media_pipeline_backend.h" - -namespace chromecast { -namespace media { - -class AudioDecoderWrapper : public MediaPipelineBackend::AudioDecoder { - public: - explicit AudioDecoderWrapper( - MediaPipelineBackend::AudioDecoder* audio_decoder); - ~AudioDecoderWrapper() override; - - // MediaPipelineBackend::AudioDecoder implementation: - void SetDelegate(Delegate* delegate) override; - MediaPipelineBackend::BufferStatus PushBuffer( - CastDecoderBuffer* buffer) override; - void GetStatistics(Statistics* statistics) override; - bool SetConfig(const AudioConfig& config) override; - bool SetVolume(float multiplier) override; - RenderingDelay GetRenderingDelay() override; - - bool SetStreamTypeVolume(float stream_type_volume); - - private: - MediaPipelineBackend::AudioDecoder* const audio_decoder_; - float stream_type_volume_; - float stream_volume_; - - DISALLOW_COPY_AND_ASSIGN(AudioDecoderWrapper); -}; - -} // namespace media -} // namespace chromecast - -#endif // CHROMECAST_MEDIA_CMA_BACKEND_AUDIO_DECODER_WRAPPER_H_
diff --git a/chromecast/media/cma/backend/audio_video_pipeline_device_unittest.cc b/chromecast/media/cma/backend/audio_video_pipeline_device_unittest.cc index 56f9a9a..883edd2 100644 --- a/chromecast/media/cma/backend/audio_video_pipeline_device_unittest.cc +++ b/chromecast/media/cma/backend/audio_video_pipeline_device_unittest.cc
@@ -35,6 +35,8 @@ #include "chromecast/public/media/decoder_config.h" #include "chromecast/public/media/media_pipeline_backend.h" #include "chromecast/public/media/media_pipeline_device_params.h" +#include "chromecast/public/volume_control.h" +#include "media/audio/audio_device_description.h" #include "media/base/audio_decoder_config.h" #include "media/base/audio_timestamp_helper.h" #include "media/base/decoder_buffer.h" @@ -188,12 +190,18 @@ void SetUp() override { CastMediaShlib::Initialize( base::CommandLine::ForCurrentProcess()->argv()); + if (VolumeControl::Initialize) { + VolumeControl::Initialize(base::CommandLine::ForCurrentProcess()->argv()); + } } void TearDown() override { // Pipeline must be destroyed before finalizing media shlib. backend_.reset(); effects_backends_.clear(); + if (VolumeControl::Finalize) { + VolumeControl::Finalize(); + } CastMediaShlib::Finalize(); } @@ -616,7 +624,9 @@ void AudioVideoPipelineDeviceTest::Initialize() { // Create the media device. task_runner_.reset(new TaskRunnerImpl()); - MediaPipelineDeviceParams params(sync_type_, audio_type_, task_runner_.get()); + MediaPipelineDeviceParams params( + sync_type_, audio_type_, task_runner_.get(), AudioContentType::kMedia, + ::media::AudioDeviceDescription::kDefaultDeviceId); backend_.reset(CastMediaShlib::CreateMediaPipelineBackend(params)); CHECK(backend_); } @@ -638,8 +648,9 @@ for (int i = 0; i < kNumEffectsStreams; ++i) { MediaPipelineDeviceParams params( MediaPipelineDeviceParams::kModeIgnorePts, - MediaPipelineDeviceParams::kAudioStreamSoundEffects, - task_runner_.get()); + MediaPipelineDeviceParams::kAudioStreamSoundEffects, task_runner_.get(), + AudioContentType::kMedia, + ::media::AudioDeviceDescription::kDefaultDeviceId); MediaPipelineBackend* effects_backend = CastMediaShlib::CreateMediaPipelineBackend(params); CHECK(effects_backend);
diff --git a/chromecast/media/cma/backend/media_pipeline_backend_factory.cc b/chromecast/media/cma/backend/media_pipeline_backend_factory.cc index db4ea64..d6df9d7 100644 --- a/chromecast/media/cma/backend/media_pipeline_backend_factory.cc +++ b/chromecast/media/cma/backend/media_pipeline_backend_factory.cc
@@ -21,8 +21,7 @@ std::unique_ptr<MediaPipelineBackend> MediaPipelineBackendFactory::CreateBackend( - const MediaPipelineDeviceParams& params, - const std::string& audio_device_id) { + const MediaPipelineDeviceParams& params) { return media_pipeline_backend_manager_->CreateMediaPipelineBackend(params); }
diff --git a/chromecast/media/cma/backend/media_pipeline_backend_factory.h b/chromecast/media/cma/backend/media_pipeline_backend_factory.h index dbbb60a1..087d20e4 100644 --- a/chromecast/media/cma/backend/media_pipeline_backend_factory.h +++ b/chromecast/media/cma/backend/media_pipeline_backend_factory.h
@@ -27,8 +27,7 @@ virtual ~MediaPipelineBackendFactory(); virtual std::unique_ptr<MediaPipelineBackend> CreateBackend( - const MediaPipelineDeviceParams& params, - const std::string& audio_device_id); + const MediaPipelineDeviceParams& params); protected: MediaPipelineBackendManager* media_pipeline_backend_manager() {
diff --git a/chromecast/media/cma/backend/media_pipeline_backend_manager.cc b/chromecast/media/cma/backend/media_pipeline_backend_manager.cc index df0b8895..216b1d5f 100644 --- a/chromecast/media/cma/backend/media_pipeline_backend_manager.cc +++ b/chromecast/media/cma/backend/media_pipeline_backend_manager.cc
@@ -7,10 +7,10 @@ #include <algorithm> #include <limits> +#include "base/location.h" #include "base/memory/ptr_util.h" #include "chromecast/chromecast_features.h" #include "chromecast/media/cma/backend/media_pipeline_backend_wrapper.h" -#include "chromecast/public/cast_media_shlib.h" namespace chromecast { namespace media { @@ -18,16 +18,19 @@ #if BUILDFLAG(IS_CAST_AUDIO_ONLY) constexpr int kAudioDecoderLimit = std::numeric_limits<int>::max(); #else -constexpr int kAudioDecoderLimit = 2; +constexpr int kAudioDecoderLimit = 1; #endif } // namespace MediaPipelineBackendManager::MediaPipelineBackendManager( scoped_refptr<base::SingleThreadTaskRunner> media_task_runner) - : media_task_runner_(std::move(media_task_runner)) { - DCHECK_EQ(2, NUM_DECODER_TYPES); - decoder_count_[AUDIO_DECODER] = 0; - decoder_count_[VIDEO_DECODER] = 0; + : media_task_runner_(std::move(media_task_runner)), + playing_noneffects_audio_streams_count_(0), + allow_volume_feedback_observers_( + new base::ObserverListThreadSafe<AllowVolumeFeedbackObserver>()) { + for (int i = 0; i < NUM_DECODER_TYPES; ++i) { + decoder_count_[i] = 0; + } } MediaPipelineBackendManager::~MediaPipelineBackendManager() { @@ -37,22 +40,7 @@ MediaPipelineBackendManager::CreateMediaPipelineBackend( const media::MediaPipelineDeviceParams& params) { DCHECK(media_task_runner_->BelongsToCurrentThread()); - return CreateMediaPipelineBackend(params, 0); -} - -std::unique_ptr<MediaPipelineBackend> -MediaPipelineBackendManager::CreateMediaPipelineBackend( - const media::MediaPipelineDeviceParams& params, - int stream_type) { - DCHECK(media_task_runner_->BelongsToCurrentThread()); - LOG(INFO) << "Creating a " << params.device_id << " stream."; - std::unique_ptr<MediaPipelineBackend> backend_ptr( - new MediaPipelineBackendWrapper( - base::WrapUnique( - media::CastMediaShlib::CreateMediaPipelineBackend(params)), - stream_type, GetVolumeMultiplier(stream_type), this)); - media_pipeline_backends_.push_back(backend_ptr.get()); - return backend_ptr; + return base::MakeUnique<MediaPipelineBackendWrapper>(params, this); } bool MediaPipelineBackendManager::IncrementDecoderCount(DecoderType type) { @@ -72,42 +60,35 @@ DCHECK(media_task_runner_->BelongsToCurrentThread()); DCHECK(type < NUM_DECODER_TYPES); DCHECK(decoder_count_[type] > 0); + decoder_count_[type]--; } -void MediaPipelineBackendManager::OnMediaPipelineBackendDestroyed( - const MediaPipelineBackend* backend) { - DCHECK(media_task_runner_->BelongsToCurrentThread()); - media_pipeline_backends_.erase( - std::remove(media_pipeline_backends_.begin(), - media_pipeline_backends_.end(), backend), - media_pipeline_backends_.end()); -} +void MediaPipelineBackendManager::UpdatePlayingAudioCount(int change) { + DCHECK(change == -1 || change == 1) << "bad count change: " << change; -void MediaPipelineBackendManager::SetVolumeMultiplier(int stream_type, - float volume) { - DCHECK(media_task_runner_->BelongsToCurrentThread()); - volume = std::max(0.0f, std::min(volume, 1.0f)); - volume_by_stream_type_[stream_type] = volume; + // Volume feedback sounds are only allowed when there are no non-effects + // audio streams playing. + bool prev_allow_feedback = (playing_noneffects_audio_streams_count_ == 0); + playing_noneffects_audio_streams_count_ += change; + DCHECK_GE(playing_noneffects_audio_streams_count_, 0); + bool new_allow_feedback = (playing_noneffects_audio_streams_count_ == 0); - // Set volume for each open media pipeline backends. - for (auto it = media_pipeline_backends_.begin(); - it != media_pipeline_backends_.end(); it++) { - MediaPipelineBackendWrapper* wrapper = - static_cast<MediaPipelineBackendWrapper*>(*it); - if (wrapper->GetStreamType() == stream_type) - wrapper->SetStreamTypeVolume(volume); + if (new_allow_feedback != prev_allow_feedback) { + allow_volume_feedback_observers_->Notify( + FROM_HERE, &AllowVolumeFeedbackObserver::AllowVolumeFeedbackSounds, + new_allow_feedback); } } -float MediaPipelineBackendManager::GetVolumeMultiplier(int stream_type) { - DCHECK(media_task_runner_->BelongsToCurrentThread()); - auto it = volume_by_stream_type_.find(stream_type); - if (it == volume_by_stream_type_.end()) { - return 1.0; - } else { - return it->second; - } +void MediaPipelineBackendManager::AddAllowVolumeFeedbackObserver( + AllowVolumeFeedbackObserver* observer) { + allow_volume_feedback_observers_->AddObserver(observer); +} + +void MediaPipelineBackendManager::RemoveAllowVolumeFeedbackObserver( + AllowVolumeFeedbackObserver* observer) { + allow_volume_feedback_observers_->RemoveObserver(observer); } } // namespace media
diff --git a/chromecast/media/cma/backend/media_pipeline_backend_manager.h b/chromecast/media/cma/backend/media_pipeline_backend_manager.h index 3cb32760..622c0ef9 100644 --- a/chromecast/media/cma/backend/media_pipeline_backend_manager.h +++ b/chromecast/media/cma/backend/media_pipeline_backend_manager.h
@@ -11,6 +11,7 @@ #include "base/macros.h" #include "base/memory/ref_counted.h" +#include "base/observer_list_threadsafe.h" #include "base/single_thread_task_runner.h" #include "chromecast/public/media/media_pipeline_backend.h" #include "chromecast/public/media/media_pipeline_device_params.h" @@ -18,36 +19,45 @@ namespace chromecast { namespace media { -// This class manages created media pipelines, and provides volume control by -// stream type. -// All functions in this class should be called on the media thread. +// This class tracks all created media backends, tracking whether or not volume +// feedback sounds should be enabled based on the currently active backends. +// Volume feedback sounds are only enabled when there are no active audio +// streams (apart from sound-effects streams). class MediaPipelineBackendManager { public: - enum DecoderType { AUDIO_DECODER, VIDEO_DECODER, NUM_DECODER_TYPES }; + class AllowVolumeFeedbackObserver { + public: + virtual void AllowVolumeFeedbackSounds(bool allow) = 0; + + protected: + virtual ~AllowVolumeFeedbackObserver() = default; + }; + + enum DecoderType { + AUDIO_DECODER, + VIDEO_DECODER, + SFX_DECODER, + NUM_DECODER_TYPES + }; explicit MediaPipelineBackendManager( scoped_refptr<base::SingleThreadTaskRunner> media_task_runner); ~MediaPipelineBackendManager(); - // Create media pipeline backend. + // Creates a media pipeline backend. Must be called on the same thread as + // |media_task_runner_|. std::unique_ptr<MediaPipelineBackend> CreateMediaPipelineBackend( const MediaPipelineDeviceParams& params); - // Create media pipeline backend with a specific stream_type. - std::unique_ptr<MediaPipelineBackend> CreateMediaPipelineBackend( - const MediaPipelineDeviceParams& params, - int stream_type); - - // Sets the relative volume for a specified stream type, - // with range [0.0, 1.0] inclusive. If |multiplier| is outside the - // range [0.0, 1.0], it is clamped to that range. - // TODO(tianyuwang): change stream_type to use a enum. - void SetVolumeMultiplier(int stream_type, float volume); - base::SingleThreadTaskRunner* task_runner() const { return media_task_runner_.get(); } + // Adds/removes an observer for when folume feedback sounds are allowed. + // An observer must be removed on the same thread that added it. + void AddAllowVolumeFeedbackObserver(AllowVolumeFeedbackObserver* observer); + void RemoveAllowVolumeFeedbackObserver(AllowVolumeFeedbackObserver* observer); + private: friend class MediaPipelineBackendWrapper; @@ -56,21 +66,19 @@ bool IncrementDecoderCount(DecoderType type); void DecrementDecoderCount(DecoderType type); - // Internal clean up when a new media pipeline backend is destroyed. - void OnMediaPipelineBackendDestroyed(const MediaPipelineBackend* backend); - - float GetVolumeMultiplier(int stream_type); + // Update the count of playing non-effects audio streams. + void UpdatePlayingAudioCount(int change); const scoped_refptr<base::SingleThreadTaskRunner> media_task_runner_; - // A vector that stores all of the existing media_pipeline_backends_. - std::vector<MediaPipelineBackend*> media_pipeline_backends_; - // Total count of decoders created int decoder_count_[NUM_DECODER_TYPES]; - // Volume multiplier for each type of audio streams. - std::map<int, float> volume_by_stream_type_; + // Total number of playing non-effects streams. + int playing_noneffects_audio_streams_count_; + + scoped_refptr<base::ObserverListThreadSafe<AllowVolumeFeedbackObserver>> + allow_volume_feedback_observers_; DISALLOW_COPY_AND_ASSIGN(MediaPipelineBackendManager); };
diff --git a/chromecast/media/cma/backend/media_pipeline_backend_wrapper.cc b/chromecast/media/cma/backend/media_pipeline_backend_wrapper.cc index 88e96b36a..acf268f5 100644 --- a/chromecast/media/cma/backend/media_pipeline_backend_wrapper.cc +++ b/chromecast/media/cma/backend/media_pipeline_backend_wrapper.cc
@@ -5,7 +5,9 @@ #include "chromecast/media/cma/backend/media_pipeline_backend_wrapper.h" #include "base/logging.h" +#include "base/memory/ptr_util.h" #include "chromecast/media/cma/backend/media_pipeline_backend_manager.h" +#include "chromecast/public/cast_media_shlib.h" namespace chromecast { namespace media { @@ -13,46 +15,49 @@ using DecoderType = MediaPipelineBackendManager::DecoderType; MediaPipelineBackendWrapper::MediaPipelineBackendWrapper( - std::unique_ptr<MediaPipelineBackend> backend, - int stream_type, - float stream_type_volume, + const media::MediaPipelineDeviceParams& params, MediaPipelineBackendManager* backend_manager) - : backend_(std::move(backend)), - stream_type_(stream_type), - audio_decoder_wrapper_(nullptr), - stream_type_volume_(stream_type_volume), - is_initialized_(false), + : backend_(base::WrapUnique( + media::CastMediaShlib::CreateMediaPipelineBackend(params))), + backend_manager_(backend_manager), + sfx_backend_(params.audio_type == + media::MediaPipelineDeviceParams::kAudioStreamSoundEffects), + have_audio_decoder_(false), have_video_decoder_(false), - backend_manager_(backend_manager) { + playing_(false) { DCHECK(backend_); + DCHECK(backend_manager_); } MediaPipelineBackendWrapper::~MediaPipelineBackendWrapper() { - backend_manager_->OnMediaPipelineBackendDestroyed(this); - - if (audio_decoder_wrapper_) - backend_manager_->DecrementDecoderCount(DecoderType::AUDIO_DECODER); + if (have_audio_decoder_) + backend_manager_->DecrementDecoderCount( + sfx_backend_ ? DecoderType::SFX_DECODER : DecoderType::AUDIO_DECODER); if (have_video_decoder_) backend_manager_->DecrementDecoderCount(DecoderType::VIDEO_DECODER); + + if (playing_) { + LOG(WARNING) << "Destroying media backend while still in 'playing' state"; + if (have_audio_decoder_ && !sfx_backend_) { + backend_manager_->UpdatePlayingAudioCount(-1); + } + } } MediaPipelineBackend::AudioDecoder* MediaPipelineBackendWrapper::CreateAudioDecoder() { - DCHECK(!is_initialized_); - if (audio_decoder_wrapper_) - return nullptr; + DCHECK(!have_audio_decoder_); - if (!backend_manager_->IncrementDecoderCount(DecoderType::AUDIO_DECODER)) + if (!backend_manager_->IncrementDecoderCount( + sfx_backend_ ? DecoderType::SFX_DECODER : DecoderType::AUDIO_DECODER)) return nullptr; + have_audio_decoder_ = true; - audio_decoder_wrapper_.reset( - new AudioDecoderWrapper(backend_->CreateAudioDecoder())); - return audio_decoder_wrapper_.get(); + return backend_->CreateAudioDecoder(); } MediaPipelineBackend::VideoDecoder* MediaPipelineBackendWrapper::CreateVideoDecoder() { - DCHECK(!is_initialized_); DCHECK(!have_video_decoder_); if (!backend_manager_->IncrementDecoderCount(DecoderType::VIDEO_DECODER)) @@ -63,28 +68,36 @@ } bool MediaPipelineBackendWrapper::Initialize() { - DCHECK(!is_initialized_); - is_initialized_ = backend_->Initialize(); - if (is_initialized_ && audio_decoder_wrapper_) - audio_decoder_wrapper_->SetStreamTypeVolume(stream_type_volume_); - - return is_initialized_; + return backend_->Initialize(); } bool MediaPipelineBackendWrapper::Start(int64_t start_pts) { - return backend_->Start(start_pts); + if (!backend_->Start(start_pts)) { + return false; + } + SetPlaying(true); + return true; } void MediaPipelineBackendWrapper::Stop() { backend_->Stop(); + SetPlaying(false); } bool MediaPipelineBackendWrapper::Pause() { - return backend_->Pause(); + if (!backend_->Pause()) { + return false; + } + SetPlaying(false); + return true; } bool MediaPipelineBackendWrapper::Resume() { - return backend_->Resume(); + if (!backend_->Resume()) { + return false; + } + SetPlaying(true); + return true; } int64_t MediaPipelineBackendWrapper::GetCurrentPts() { @@ -95,15 +108,14 @@ return backend_->SetPlaybackRate(rate); } -int MediaPipelineBackendWrapper::GetStreamType() const { - return stream_type_; -} - -void MediaPipelineBackendWrapper::SetStreamTypeVolume( - float stream_type_volume) { - stream_type_volume_ = stream_type_volume; - if (is_initialized_ && audio_decoder_wrapper_) - audio_decoder_wrapper_->SetStreamTypeVolume(stream_type_volume_); +void MediaPipelineBackendWrapper::SetPlaying(bool playing) { + if (playing == playing_) { + return; + } + playing_ = playing; + if (have_audio_decoder_ && !sfx_backend_) { + backend_manager_->UpdatePlayingAudioCount(playing_ ? 1 : -1); + } } } // namespace media
diff --git a/chromecast/media/cma/backend/media_pipeline_backend_wrapper.h b/chromecast/media/cma/backend/media_pipeline_backend_wrapper.h index ad15891..24b8b65 100644 --- a/chromecast/media/cma/backend/media_pipeline_backend_wrapper.h +++ b/chromecast/media/cma/backend/media_pipeline_backend_wrapper.h
@@ -12,7 +12,6 @@ #include "base/macros.h" #include "base/memory/ref_counted.h" #include "base/time/time.h" -#include "chromecast/media/cma/backend/audio_decoder_wrapper.h" #include "chromecast/public/media/media_pipeline_backend.h" #include "chromecast/public/media/media_pipeline_device_params.h" @@ -23,9 +22,7 @@ class MediaPipelineBackendWrapper : public MediaPipelineBackend { public: - MediaPipelineBackendWrapper(std::unique_ptr<MediaPipelineBackend> backend, - int stream_type, - float stream_type_volume, + MediaPipelineBackendWrapper(const media::MediaPipelineDeviceParams& params, MediaPipelineBackendManager* backend_manager); ~MediaPipelineBackendWrapper() override; @@ -40,18 +37,17 @@ int64_t GetCurrentPts() override; bool SetPlaybackRate(float rate) override; - int GetStreamType() const; - void SetStreamTypeVolume(float stream_type_volume); - private: - std::unique_ptr<MediaPipelineBackend> backend_; - const int stream_type_; - std::unique_ptr<AudioDecoderWrapper> audio_decoder_wrapper_; - float stream_type_volume_; - bool is_initialized_; - bool have_video_decoder_; + void SetPlaying(bool playing); + + const std::unique_ptr<MediaPipelineBackend> backend_; MediaPipelineBackendManager* const backend_manager_; + bool sfx_backend_; + bool have_audio_decoder_; + bool have_video_decoder_; + bool playing_; + DISALLOW_COPY_AND_ASSIGN(MediaPipelineBackendWrapper); };
diff --git a/chromecast/media/cma/backend/multizone_backend_unittest.cc b/chromecast/media/cma/backend/multizone_backend_unittest.cc index 08f03b42..b471fa6 100644 --- a/chromecast/media/cma/backend/multizone_backend_unittest.cc +++ b/chromecast/media/cma/backend/multizone_backend_unittest.cc
@@ -27,6 +27,8 @@ #include "chromecast/public/media/decoder_config.h" #include "chromecast/public/media/media_pipeline_backend.h" #include "chromecast/public/media/media_pipeline_device_params.h" +#include "chromecast/public/volume_control.h" +#include "media/audio/audio_device_description.h" #include "media/base/audio_decoder_config.h" #include "media/base/decoder_buffer.h" #include "testing/gtest/include/gtest/gtest.h" @@ -136,12 +138,18 @@ void SetUp() override { srand(12345); CastMediaShlib::Initialize(base::CommandLine::ForCurrentProcess()->argv()); + if (VolumeControl::Initialize) { + VolumeControl::Initialize(base::CommandLine::ForCurrentProcess()->argv()); + } } void TearDown() override { // Pipeline must be destroyed before finalizing media shlib. audio_feeder_.reset(); effects_feeders_.clear(); + if (VolumeControl::Finalize) { + VolumeControl::Finalize(); + } CastMediaShlib::Finalize(); } @@ -189,7 +197,8 @@ MediaPipelineDeviceParams::kModeIgnorePts, effects_only_ ? MediaPipelineDeviceParams::kAudioStreamSoundEffects : MediaPipelineDeviceParams::kAudioStreamNormal, - task_runner_.get()); + task_runner_.get(), AudioContentType::kMedia, + ::media::AudioDeviceDescription::kDefaultDeviceId); backend_.reset(CastMediaShlib::CreateMediaPipelineBackend(params)); CHECK(backend_);
diff --git a/chromecast/media/service/cast_renderer.cc b/chromecast/media/service/cast_renderer.cc index ff4efa9..5a04adfb 100644 --- a/chromecast/media/service/cast_renderer.cc +++ b/chromecast/media/service/cast_renderer.cc
@@ -18,6 +18,7 @@ #include "chromecast/media/cma/pipeline/video_pipeline_client.h" #include "chromecast/public/media/media_pipeline_backend.h" #include "chromecast/public/media/media_pipeline_device_params.h" +#include "chromecast/public/volume_control.h" #include "media/audio/audio_device_description.h" #include "media/base/audio_decoder_config.h" #include "media/base/demuxer_stream.h" @@ -98,9 +99,16 @@ if (device_id == "") device_id = ::media::AudioDeviceDescription::kDefaultDeviceId; - MediaPipelineDeviceParams params( - sync_type, MediaPipelineDeviceParams::kAudioStreamNormal, device_id, - backend_task_runner_.get()); + AudioContentType content_type; + if (device_id == kAlarmAudioDeviceId) { + content_type = AudioContentType::kAlarm; + } else if (audio_device_id_ == kTtsAudioDeviceId) { + content_type = AudioContentType::kCommunication; + } else { + content_type = AudioContentType::kMedia; + } + MediaPipelineDeviceParams params(sync_type, backend_task_runner_.get(), + content_type, audio_device_id_); if (audio_device_id_ == kTtsAudioDeviceId || audio_device_id_ == @@ -109,7 +117,7 @@ } std::unique_ptr<MediaPipelineBackend> backend = - backend_factory_->CreateBackend(params, audio_device_id_); + backend_factory_->CreateBackend(params); // Create pipeline. MediaPipelineClient pipeline_client;
diff --git a/chromecast/public/BUILD.gn b/chromecast/public/BUILD.gn index ecd7f4ca..4e6f58f 100644 --- a/chromecast/public/BUILD.gn +++ b/chromecast/public/BUILD.gn
@@ -24,6 +24,7 @@ "reboot_shlib.h", "task_runner.h", "video_plane.h", + "volume_control.h", ] public_configs = [ ":public_config" ]
diff --git a/chromecast/public/avsettings.h b/chromecast/public/avsettings.h index 0b99842..311bf341 100644 --- a/chromecast/public/avsettings.h +++ b/chromecast/public/avsettings.h
@@ -73,6 +73,8 @@ // Initialize() was called. ACTIVE_STATE_CHANGED = 0, + // DEPRECATED - Prefer to implement volume control in the media shlib using + // the VolumeControl API (see chromecast/public/volume_control.h). // This event shall be fired whenever the system volume level or muted state // are changed including when user changed volume via a remote controller, // or after a call to SetAudioVolume() or SetAudioMuted(). @@ -203,19 +205,27 @@ // - UNKNOWN_VOLUME: 0.01 (1%) virtual bool GetAudioVolumeStepInterval(float* step_inteval) = 0; + // DEPRECATED - Prefer to implement volume control in the media shlib using + // the VolumeControl API (see chromecast/public/volume_control.h). // Returns the current volume level, which must be from 0.0 (inclusive) to // 1.0 (inclusive). virtual float GetAudioVolume() = 0; + // DEPRECATED - Prefer to implement volume control in the media shlib using + // the VolumeControl API (see chromecast/public/volume_control.h). // Sets new volume level of the device (or HDMI sinks). |level| is from 0.0 // (inclusive) to 1.0 (inclusive). // If successful and the level has changed, it must return true and fire // AUDIO_VOLUME_CHANGED. virtual bool SetAudioVolume(float level) = 0; + // DEPRECATED - Prefer to implement volume control in the media shlib using + // the VolumeControl API (see chromecast/public/volume_control.h). // Whether or not the device (or HDMI sinks) is muted. virtual bool IsAudioMuted() = 0; + // DEPRECATED - Prefer to implement volume control in the media shlib using + // the VolumeControl API (see chromecast/public/volume_control.h). // Sets the device (or HDMI sinks) muted. // If successful and the muted state has changed, it must return true and fire // AUDIO_VOLUME_CHANGED.
diff --git a/chromecast/public/media/media_pipeline_device_params.h b/chromecast/public/media/media_pipeline_device_params.h index d6ba837..47375d3c 100644 --- a/chromecast/public/media/media_pipeline_device_params.h +++ b/chromecast/public/media/media_pipeline_device_params.h
@@ -12,6 +12,8 @@ namespace media { +enum class AudioContentType; // See chromecast/public/volume_control.h + // Supplies creation parameters to platform-specific pipeline backend. struct MediaPipelineDeviceParams { enum MediaSyncType { @@ -39,44 +41,48 @@ kAudioStreamSoundEffects = 1, }; - MediaPipelineDeviceParams(TaskRunner* task_runner_in) + MediaPipelineDeviceParams(TaskRunner* task_runner_in, + AudioContentType content_type_in, + const std::string& device_id_in) : sync_type(kModeSyncPts), audio_type(kAudioStreamNormal), - task_runner(task_runner_in) {} + task_runner(task_runner_in), + content_type(content_type_in), + device_id(device_id_in) {} MediaPipelineDeviceParams(MediaSyncType sync_type_in, - TaskRunner* task_runner_in) + TaskRunner* task_runner_in, + AudioContentType content_type_in, + const std::string& device_id_in) : sync_type(sync_type_in), audio_type(kAudioStreamNormal), - task_runner(task_runner_in) {} + task_runner(task_runner_in), + content_type(content_type_in), + device_id(device_id_in) {} MediaPipelineDeviceParams(MediaSyncType sync_type_in, AudioStreamType audio_type_in, - TaskRunner* task_runner_in) + TaskRunner* task_runner_in, + AudioContentType content_type_in, + const std::string& device_id_in) : sync_type(sync_type_in), audio_type(audio_type_in), - task_runner(task_runner_in) {} - - // |device_id_in| should be from media/audio/audio_device_description.h or - // chromecast/media/base/audio_device_ids.h - MediaPipelineDeviceParams(MediaSyncType sync_type_in, - AudioStreamType audio_type_in, - const std::string& device_id_in, - TaskRunner* task_runner_in) - : sync_type(sync_type_in), - audio_type(audio_type_in), - device_id(device_id_in), - task_runner(task_runner_in) {} + task_runner(task_runner_in), + content_type(content_type_in), + device_id(device_id_in) {} const MediaSyncType sync_type; const AudioStreamType audio_type; - const std::string device_id; // task_runner allows backend implementations to post tasks to the media // thread. Since all calls from cast_shell into the backend are made on // the media thread, this may simplify thread management and safety for // some backends. TaskRunner* const task_runner; + + // Identifies the content type for volume control. + const AudioContentType content_type; + const std::string device_id; }; } // namespace media
diff --git a/chromecast/public/volume_control.h b/chromecast/public/volume_control.h new file mode 100644 index 0000000..56e1432 --- /dev/null +++ b/chromecast/public/volume_control.h
@@ -0,0 +1,94 @@ +// 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 CHROMECAST_PUBLIC_VOLUME_CONTROL_H_ +#define CHROMECAST_PUBLIC_VOLUME_CONTROL_H_ + +#include <string> +#include <vector> + +#include "chromecast_export.h" + +namespace chromecast { +namespace media { + +// Audio content types for volume control. Each content type has a separate +// volume and mute state. +enum class AudioContentType { + kMedia, // Normal audio playback; also used for system sound effects. + kAlarm, // Alarm sounds. + kCommunication, // Voice communication, eg assistant TTS. +}; + +// Observer for volume/mute state changes. This is useful to detect volume +// changes that occur outside of cast_shell. Add/RemoveVolumeObserver() must not +// be called synchronously from OnVolumeChange() or OnMuteChange(). +class VolumeObserver { + public: + // Called whenever the volume changes for a given stream |type|. May be called + // on an arbitrary thread. + virtual void OnVolumeChange(AudioContentType type, float new_volume) = 0; + + // Called whenever the mute state changes for a given stream |type|. May be + // called on an arbitrary thread. + virtual void OnMuteChange(AudioContentType type, bool new_muted) = 0; + + protected: + virtual ~VolumeObserver() = default; +}; + +// Volume control is initialized once when cast_shell starts up, and finalized +// on shutdown. Revoking resources has no effect on volume control. All volume +// control methods are called on the same thread that calls Initialize(). +class CHROMECAST_EXPORT VolumeControl { + public: + // Initializes platform-specific volume control. Only called when volume + // control is in an uninitialized state. The implementation of this method + // should load previously set volume and mute states from persistent storage, + // so that the volume and mute are preserved across reboots. + static void Initialize(const std::vector<std::string>& argv) + __attribute__((__weak__)); + + // Tears down platform-specific volume control and returns to the + // uninitialized state. + static void Finalize() __attribute__((__weak__)); + + // Adds a volume observer. + static void AddVolumeObserver(VolumeObserver* observer) + __attribute__((__weak__)); + // Removes a volume observer. After this is called, the implementation must + // not call any more methods on the observer. + static void RemoveVolumeObserver(VolumeObserver* observer) + __attribute__((__weak__)); + + // Gets/sets the output volume for a given audio stream |type|. The volume + // |level| is in the range [0.0, 1.0]. + static float GetVolume(AudioContentType type) __attribute__((__weak__)); + static void SetVolume(AudioContentType type, float level) + __attribute__((__weak__)); + + // Gets/sets the mute state for a given audio stream |type|. + static bool IsMuted(AudioContentType type) __attribute__((__weak__)); + static void SetMuted(AudioContentType type, bool muted) + __attribute__((__weak__)); + + // Limits the output volume for a given stream |type| to no more than |limit|. + // This does not affect the logical volume for the stream type; the volume + // returned by GetVolume() should not change, and no OnVolumeChange() event + // should be sent to observers. + static void SetOutputLimit(AudioContentType type, float limit) + __attribute__((__weak__)); + + // Converts a volume level in the range [0.0, 1.0] to/from a volume in dB. + // The volume in dB should be full-scale (so a volume level of 1.0 would be + // 0.0 dBFS, and any lower volume level would be negative). + // May be called from multiple processes. + static float VolumeToDbFS(float volume) __attribute__((__weak__)); + static float DbFSToVolume(float dbfs) __attribute__((__weak__)); +}; + +} // namespace media +} // namespace chromecast + +#endif // CHROMECAST_PUBLIC_VOLUME_CONTROL_H_
diff --git a/chromeos/dbus/services/org.chromium.LivenessService.conf b/chromeos/dbus/services/org.chromium.LivenessService.conf new file mode 100644 index 0000000..c5f24d8 --- /dev/null +++ b/chromeos/dbus/services/org.chromium.LivenessService.conf
@@ -0,0 +1,18 @@ +<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN" + "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd"> +<!-- + Copyright (c) 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 file will be installed at /etc/dbus-1/system.d on Chromium OS. +--> +<busconfig> + <policy user="chronos"> + <allow own="org.chromium.LivenessService"/> + </policy> + + <policy user="root"> + <allow send_destination="org.chromium.LivenessService"/> + </policy> +</busconfig>
diff --git a/components/arc/common/wallpaper.mojom b/components/arc/common/wallpaper.mojom index 4feb1f42..d2dd78dc5 100644 --- a/components/arc/common/wallpaper.mojom +++ b/components/arc/common/wallpaper.mojom
@@ -2,27 +2,30 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // -// Next MinVersion: 2 +// Next MinVersion: 3 module arc.mojom; // Handles wallpaper calls from ARC in Chrome. -// Next method ID:2 +// Next method ID:3 interface WallpaperHost { // Gets current wallpaper encoded in PNG and send it back to ARC. GetWallpaper@0() => (array<uint8> wallpaper); // Sets an image from ARC as the wallpaper. // |data| is a byte array of the wallpaper image. - SetWallpaper@1(array<uint8> data); + SetWallpaper@1(array<uint8> data, [MinVersion=2] int32 wallpaper_id); + + // Sets the default wallpaper. + [MinVersion=2] SetDefaultWallpaper@2(); }; // Connects with container side to publish wallpaper related intents. -// Next method ID:2 +// Next method ID:3 interface WallpaperInstance { // Establishes communication with the container side. Init@0(WallpaperHost host_ptr); // Notifies ArcWallpaperManagerService that wallpaper is changed. - [MinVersion=1] OnWallpaperChanged@1(); -}; \ No newline at end of file + [MinVersion=1] OnWallpaperChanged@1([MinVersion=2] int32 wallpaper_id); +};
diff --git a/components/autofill/content/renderer/autofill_agent.cc b/components/autofill/content/renderer/autofill_agent.cc index c655255..a0e275a 100644 --- a/components/autofill/content/renderer/autofill_agent.cc +++ b/components/autofill/content/renderer/autofill_agent.cc
@@ -289,15 +289,15 @@ WebElement focused_element; if (!doc.isNull()) focused_element = doc.focusedElement(); - if (!focused_element.isNull()) { - if (password_generation_agent_ && - password_generation_agent_->FocusedNodeHasChanged(focused_element)) { - is_generation_popup_possibly_visible_ = true; - is_popup_possibly_visible_ = true; - } - if (password_autofill_agent_) - password_autofill_agent_->FocusedNodeHasChanged(focused_element); + // PasswordGenerationAgent needs to know about focus changes, even if there is + // no focused element. + if (password_generation_agent_ && + password_generation_agent_->FocusedNodeHasChanged(focused_element)) { + is_generation_popup_possibly_visible_ = true; + is_popup_possibly_visible_ = true; } + if (!focused_element.isNull() && password_autofill_agent_) + password_autofill_agent_->FocusedNodeHasChanged(focused_element); } void AutofillAgent::FormControlElementClicked(
diff --git a/components/autofill/core/browser/BUILD.gn b/components/autofill/core/browser/BUILD.gn index 4e6332c..8149865 100644 --- a/components/autofill/core/browser/BUILD.gn +++ b/components/autofill/core/browser/BUILD.gn
@@ -18,6 +18,8 @@ "autocomplete_history_manager.cc", "autocomplete_history_manager.h", "autofill-inl.h", + "autofill_address_util.cc", + "autofill_address_util.h", "autofill_client.h", "autofill_country.cc", "autofill_country.h", @@ -109,6 +111,8 @@ "phone_number_i18n.cc", "phone_number_i18n.h", "popup_item_ids.h", + "region_combobox_model.cc", + "region_combobox_model.h", "server_field_types_util.cc", "server_field_types_util.h", "state_names.cc", @@ -210,7 +214,7 @@ "//sql", "//third_party/fips181", "//third_party/icu", - "//third_party/libaddressinput:util", + "//third_party/libaddressinput", "//third_party/libphonenumber", "//third_party/re2", "//ui/base", @@ -336,6 +340,7 @@ "phone_field_unittest.cc", "phone_number_i18n_unittest.cc", "phone_number_unittest.cc", + "region_combobox_model_unittest.cc", "ui/card_unmask_prompt_controller_impl_unittest.cc", "validation_unittest.cc", "webdata/autocomplete_sync_bridge_unittest.cc",
diff --git a/components/autofill/core/browser/address_i18n_unittest.cc b/components/autofill/core/browser/address_i18n_unittest.cc index 59ddc21..7b0a9a0 100644 --- a/components/autofill/core/browser/address_i18n_unittest.cc +++ b/components/autofill/core/browser/address_i18n_unittest.cc
@@ -35,61 +35,91 @@ using ::i18n::addressinput::SORTING_CODE; using ::i18n::addressinput::STREET_ADDRESS; -TEST(AddressI18nTest, FieldTypeMirrorConversions) { - static const struct { - bool billing; - ServerFieldType server_field; - AddressField address_field; - } kTestData[] = { - {true, ADDRESS_BILLING_COUNTRY, COUNTRY}, - {true, ADDRESS_BILLING_STATE, ADMIN_AREA}, - {true, ADDRESS_BILLING_CITY, LOCALITY}, - {true, ADDRESS_BILLING_DEPENDENT_LOCALITY, DEPENDENT_LOCALITY}, - {true, ADDRESS_BILLING_SORTING_CODE, SORTING_CODE}, - {true, ADDRESS_BILLING_ZIP, POSTAL_CODE}, - {true, ADDRESS_BILLING_STREET_ADDRESS, STREET_ADDRESS}, - {true, COMPANY_NAME, ORGANIZATION}, - {true, NAME_BILLING_FULL, RECIPIENT}, - {false, ADDRESS_HOME_COUNTRY, COUNTRY}, - {false, ADDRESS_HOME_STATE, ADMIN_AREA}, - {false, ADDRESS_HOME_CITY, LOCALITY}, - {false, ADDRESS_HOME_DEPENDENT_LOCALITY, DEPENDENT_LOCALITY}, - {false, ADDRESS_HOME_SORTING_CODE, SORTING_CODE}, - {false, ADDRESS_HOME_ZIP, POSTAL_CODE}, - {false, ADDRESS_HOME_STREET_ADDRESS, STREET_ADDRESS}, - {false, COMPANY_NAME, ORGANIZATION}, - {false, NAME_FULL, RECIPIENT}, - }; +struct FieldTypeMirrorConversionsTestCase { + bool billing; + ServerFieldType server_field; + AddressField address_field; +}; - for (const auto& test_data : kTestData) { - AddressField address_field; - EXPECT_TRUE(FieldForType(test_data.server_field, &address_field)); - EXPECT_EQ(test_data.address_field, address_field); +class FieldTypeMirrorConversionsTest + : public testing::TestWithParam<FieldTypeMirrorConversionsTestCase> {}; - ServerFieldType server_field = - TypeForField(test_data.address_field, test_data.billing); - EXPECT_EQ(test_data.server_field, server_field); - } +TEST_P(FieldTypeMirrorConversionsTest, FieldTypeMirrorConversions) { + auto test_data = GetParam(); + AddressField address_field; + EXPECT_TRUE(FieldForType(test_data.server_field, &address_field)); + EXPECT_EQ(test_data.address_field, address_field); + + ServerFieldType server_field = + TypeForField(test_data.address_field, test_data.billing); + EXPECT_EQ(test_data.server_field, server_field); } -TEST(AddressI18nTest, FieldTypeUnidirectionalConversions) { - static const struct { - ServerFieldType server_field; - AddressField expected_address_field; - } kTestData[] = { - {ADDRESS_BILLING_LINE1, STREET_ADDRESS}, - {ADDRESS_BILLING_LINE2, STREET_ADDRESS}, - {ADDRESS_HOME_LINE1, STREET_ADDRESS}, - {ADDRESS_HOME_LINE2, STREET_ADDRESS}, - }; +INSTANTIATE_TEST_CASE_P( + AddressI18nTest, + FieldTypeMirrorConversionsTest, + testing::Values( + FieldTypeMirrorConversionsTestCase{true, ADDRESS_BILLING_COUNTRY, + COUNTRY}, + FieldTypeMirrorConversionsTestCase{true, ADDRESS_BILLING_STATE, + ADMIN_AREA}, + FieldTypeMirrorConversionsTestCase{true, ADDRESS_BILLING_CITY, + LOCALITY}, + FieldTypeMirrorConversionsTestCase{ + true, ADDRESS_BILLING_DEPENDENT_LOCALITY, DEPENDENT_LOCALITY}, + FieldTypeMirrorConversionsTestCase{true, ADDRESS_BILLING_SORTING_CODE, + SORTING_CODE}, + FieldTypeMirrorConversionsTestCase{true, ADDRESS_BILLING_ZIP, + POSTAL_CODE}, + FieldTypeMirrorConversionsTestCase{true, ADDRESS_BILLING_STREET_ADDRESS, + STREET_ADDRESS}, + FieldTypeMirrorConversionsTestCase{true, COMPANY_NAME, ORGANIZATION}, + FieldTypeMirrorConversionsTestCase{true, NAME_BILLING_FULL, RECIPIENT}, + FieldTypeMirrorConversionsTestCase{false, ADDRESS_HOME_COUNTRY, + COUNTRY}, + FieldTypeMirrorConversionsTestCase{false, ADDRESS_HOME_STATE, + ADMIN_AREA}, + FieldTypeMirrorConversionsTestCase{false, ADDRESS_HOME_CITY, LOCALITY}, + FieldTypeMirrorConversionsTestCase{ + false, ADDRESS_HOME_DEPENDENT_LOCALITY, DEPENDENT_LOCALITY}, + FieldTypeMirrorConversionsTestCase{false, ADDRESS_HOME_SORTING_CODE, + SORTING_CODE}, + FieldTypeMirrorConversionsTestCase{false, ADDRESS_HOME_ZIP, + POSTAL_CODE}, + FieldTypeMirrorConversionsTestCase{false, ADDRESS_HOME_STREET_ADDRESS, + STREET_ADDRESS}, + FieldTypeMirrorConversionsTestCase{false, COMPANY_NAME, ORGANIZATION}, + FieldTypeMirrorConversionsTestCase{false, NAME_FULL, RECIPIENT})); - for (const auto& test_data : kTestData) { - AddressField actual_address_field; - FieldForType(test_data.server_field, &actual_address_field); - EXPECT_EQ(test_data.expected_address_field, actual_address_field); - } +struct FieldTypeUnidirectionalConversionsTestCase { + ServerFieldType server_field; + AddressField expected_address_field; +}; + +class FieldTypeUnidirectionalConversionsTest + : public testing::TestWithParam< + FieldTypeUnidirectionalConversionsTestCase> {}; + +TEST_P(FieldTypeUnidirectionalConversionsTest, + FieldTypeUnidirectionalConversions) { + auto test_data = GetParam(); + AddressField actual_address_field; + FieldForType(test_data.server_field, &actual_address_field); + EXPECT_EQ(test_data.expected_address_field, actual_address_field); } +INSTANTIATE_TEST_CASE_P(AddressI18nTest, + FieldTypeUnidirectionalConversionsTest, + testing::Values( + FieldTypeUnidirectionalConversionsTestCase{ + ADDRESS_BILLING_LINE1, STREET_ADDRESS}, + FieldTypeUnidirectionalConversionsTestCase{ + ADDRESS_BILLING_LINE2, STREET_ADDRESS}, + FieldTypeUnidirectionalConversionsTestCase{ + ADDRESS_HOME_LINE1, STREET_ADDRESS}, + FieldTypeUnidirectionalConversionsTestCase{ + ADDRESS_HOME_LINE2, STREET_ADDRESS})); + TEST(AddressI18nTest, UnconvertableServerFields) { EXPECT_FALSE(FieldForType(PHONE_HOME_NUMBER, NULL)); EXPECT_FALSE(FieldForType(EMAIL_ADDRESS, NULL));
diff --git a/components/autofill/core/browser/autofill_address_util.cc b/components/autofill/core/browser/autofill_address_util.cc new file mode 100644 index 0000000..e0e9b28 --- /dev/null +++ b/components/autofill/core/browser/autofill_address_util.cc
@@ -0,0 +1,163 @@ +// 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/autofill/core/browser/autofill_address_util.h" + +#include <memory> +#include <utility> + +#include "base/memory/ptr_util.h" +#include "base/values.h" +#include "components/autofill/core/browser/autofill_country.h" +#include "components/autofill/core/browser/country_combobox_model.h" +#include "components/autofill/core/browser/field_types.h" +#include "third_party/libaddressinput/src/cpp/include/libaddressinput/address_ui.h" +#include "third_party/libaddressinput/src/cpp/include/libaddressinput/address_ui_component.h" +#include "third_party/libaddressinput/src/cpp/include/libaddressinput/localization.h" +#include "ui/base/l10n/l10n_util.h" + +using autofill::AutofillCountry; +using autofill::ServerFieldType; +using i18n::addressinput::AddressUiComponent; + +namespace autofill { + +// Dictionary keys for address components info. +const char kFieldTypeKey[] = "field"; +const char kFieldLengthKey[] = "length"; +const char kFieldNameKey[] = "name"; + +// Field names for the address components. +const char kFullNameField[] = "fullName"; +const char kCompanyNameField[] = "companyName"; +const char kAddressLineField[] = "addrLines"; +const char kDependentLocalityField[] = "dependentLocality"; +const char kCityField[] = "city"; +const char kStateField[] = "state"; +const char kPostalCodeField[] = "postalCode"; +const char kSortingCodeField[] = "sortingCode"; +const char kCountryField[] = "country"; + +// Address field length values. +const char kShortField[] = "short"; +const char kLongField[] = "long"; + +// Fills |components| with the address UI components that should be used to +// input an address for |country_code| when UI BCP 47 language code is +// |ui_language_code|. If |components_language_code| is not NULL, then sets it +// to the BCP 47 language code that should be used to format the address for +// display. +void GetAddressComponents(const std::string& country_code, + const std::string& ui_language_code, + base::ListValue* address_components, + std::string* components_language_code) { + DCHECK(address_components); + + i18n::addressinput::Localization localization; + localization.SetGetter(l10n_util::GetStringUTF8); + std::string not_used; + std::vector<AddressUiComponent> components = + i18n::addressinput::BuildComponents( + country_code, localization, ui_language_code, + components_language_code ? components_language_code : ¬_used); + if (components.empty()) { + static const char kDefaultCountryCode[] = "US"; + components = i18n::addressinput::BuildComponents( + kDefaultCountryCode, localization, ui_language_code, + components_language_code ? components_language_code : ¬_used); + } + DCHECK(!components.empty()); + + base::ListValue* line = nullptr; + for (size_t i = 0; i < components.size(); ++i) { + if (i == 0 || + components[i - 1].length_hint == AddressUiComponent::HINT_LONG || + components[i].length_hint == AddressUiComponent::HINT_LONG) { + line = new base::ListValue; + address_components->Append(base::WrapUnique(line)); + } + + std::unique_ptr<base::DictionaryValue> component(new base::DictionaryValue); + component->SetString(kFieldNameKey, components[i].name); + + switch (components[i].field) { + case i18n::addressinput::COUNTRY: + component->SetString(kFieldTypeKey, kCountryField); + break; + case i18n::addressinput::ADMIN_AREA: + component->SetString(kFieldTypeKey, kStateField); + break; + case i18n::addressinput::LOCALITY: + component->SetString(kFieldTypeKey, kCityField); + break; + case i18n::addressinput::DEPENDENT_LOCALITY: + component->SetString(kFieldTypeKey, kDependentLocalityField); + break; + case i18n::addressinput::SORTING_CODE: + component->SetString(kFieldTypeKey, kSortingCodeField); + break; + case i18n::addressinput::POSTAL_CODE: + component->SetString(kFieldTypeKey, kPostalCodeField); + break; + case i18n::addressinput::STREET_ADDRESS: + component->SetString(kFieldTypeKey, kAddressLineField); + break; + case i18n::addressinput::ORGANIZATION: + component->SetString(kFieldTypeKey, kCompanyNameField); + break; + case i18n::addressinput::RECIPIENT: + component->SetString(kFieldTypeKey, kFullNameField); + break; + } + + switch (components[i].length_hint) { + case AddressUiComponent::HINT_LONG: + component->SetString(kFieldLengthKey, kLongField); + break; + case AddressUiComponent::HINT_SHORT: + component->SetString(kFieldLengthKey, kShortField); + break; + } + + line->Append(std::move(component)); + } +} + +// Sets data related to the country <select>. +void SetCountryData(const PersonalDataManager& manager, + base::DictionaryValue* localized_strings, + const std::string& ui_language_code) { + autofill::CountryComboboxModel model; + model.SetCountries(manager, base::Callback<bool(const std::string&)>(), + ui_language_code); + const std::vector<std::unique_ptr<autofill::AutofillCountry>>& countries = + model.countries(); + localized_strings->SetString("defaultCountryCode", + countries.front()->country_code()); + + // An ordered list of options to show in the <select>. + std::unique_ptr<base::ListValue> country_list(new base::ListValue()); + for (size_t i = 0; i < countries.size(); ++i) { + std::unique_ptr<base::DictionaryValue> option_details( + new base::DictionaryValue()); + option_details->SetString("name", model.GetItemAt(i)); + option_details->SetString( + "value", countries[i] ? countries[i]->country_code() : "separator"); + country_list->Append(std::move(option_details)); + } + localized_strings->Set("autofillCountrySelectList", country_list.release()); + + std::unique_ptr<base::ListValue> default_country_components( + new base::ListValue); + std::string default_country_language_code; + GetAddressComponents(countries.front()->country_code(), ui_language_code, + default_country_components.get(), + &default_country_language_code); + localized_strings->Set("autofillDefaultCountryComponents", + default_country_components.release()); + localized_strings->SetString("autofillDefaultCountryLanguageCode", + default_country_language_code); +} + +} // namespace autofill
diff --git a/components/autofill/core/browser/autofill_address_util.h b/components/autofill/core/browser/autofill_address_util.h new file mode 100644 index 0000000..e90ff5bf --- /dev/null +++ b/components/autofill/core/browser/autofill_address_util.h
@@ -0,0 +1,78 @@ +// 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_AUTOFILL_CORE_BROWSER_AUTOFILL_ADDRESS_UTIL_H_ +#define COMPONENTS_AUTOFILL_CORE_BROWSER_AUTOFILL_ADDRESS_UTIL_H_ + +#include <string> + +namespace base { +class ListValue; +class DictionaryValue; +} + +namespace autofill { + +class PersonalDataManager; + +// Dictionary key for the field type. +extern const char kFieldTypeKey[]; + +// Dictionary key for the field length. +extern const char kFieldLengthKey[]; + +// Dictionary key for the field name. +extern const char kFieldNameKey[]; + +// Field name for autofill::NAME_FULL. +extern const char kFullNameField[]; + +// Field name for autofill::COMPANY_NAME. +extern const char kCompanyNameField[]; + +// Field name for autofill::ADDRESS_HOME_STREET_ADDRESS. +extern const char kAddressLineField[]; + +// Field name for autofill::ADDRESS_HOME_DEPENDENT_LOCALITY. +extern const char kDependentLocalityField[]; + +// Field name for autofill::ADDRESS_HOME_CITY. +extern const char kCityField[]; + +// Field name for autofill::ADDRESS_HOME_STATE. +extern const char kStateField[]; + +// Field name for autofill::ADDRESS_HOME_ZIP. +extern const char kPostalCodeField[]; + +// Field name for autofill::ADDRESS_HOME_SORTING_CODE. +extern const char kSortingCodeField[]; + +// Field name for autofill::ADDRESS_HOME_COUNTRY. +extern const char kCountryField[]; + +// AddressUiComponent::HINT_SHORT. +extern const char kShortField[]; + +// AddressUiComponent::HINT_LONG. +extern const char kLongField[]; + +// Fills |components| with the address UI components that should be used to +// input an address for |country_code| when UI BCP 47 language code is +// |ui_language_code|. If |components_language_code| is not NULL, then sets it +// to the BCP 47 language code that should be used to format the address for +// display. +void GetAddressComponents(const std::string& country_code, + const std::string& ui_language_code, + base::ListValue* address_components, + std::string* components_language_code); + +// Sets data related to the country combobox. +void SetCountryData(const PersonalDataManager& manager, + base::DictionaryValue* localized_strings, + const std::string& ui_language_code); + +} // namespace autofill + +#endif // COMPONENTS_AUTOFILL_CORE_BROWSER_AUTOFILL_ADDRESS_UTIL_H_
diff --git a/components/autofill/core/browser/autofill_data_model_unittest.cc b/components/autofill/core/browser/autofill_data_model_unittest.cc index 99021740..8432b10 100644 --- a/components/autofill/core/browser/autofill_data_model_unittest.cc +++ b/components/autofill/core/browser/autofill_data_model_unittest.cc
@@ -71,53 +71,63 @@ EXPECT_FALSE(model.IsVerified()); } -TEST(AutofillDataModelTest, CompareFrecency) { - base::Time now = base::Time::Now(); - enum Expectation { GREATER, LESS }; +enum Expectation { GREATER, LESS }; +struct CompareFrecencyTestCase { + const std::string guid_a; + const int use_count_a; + const base::Time use_date_a; + const std::string guid_b; + const int use_count_b; + const base::Time use_date_b; + Expectation expectation; +}; - struct { - const std::string guid_a; - const int use_count_a; - const base::Time use_date_a; - const std::string guid_b; - const int use_count_b; - const base::Time use_date_b; - Expectation expectation; - } test_cases[] = { - // Same frecency, model_a has a smaller GUID (tie breaker). - {"guid_a", 8, now, "guid_b", 8, now, LESS}, - // Same recency, model_a has a bigger frequency. - {"guid_a", 10, now, "guid_b", 8, now, GREATER}, - // Same recency, model_a has a smaller frequency. - {"guid_a", 8, now, "guid_b", 10, now, LESS}, - // Same frequency, model_a is more recent. - {"guid_a", 8, now, "guid_b", 8, now - base::TimeDelta::FromDays(1), - GREATER}, - // Same frequency, model_a is less recent. - {"guid_a", 8, now - base::TimeDelta::FromDays(1), "guid_b", 8, now, LESS}, - // Special case: occasional profiles. A profile with relatively low usage - // and used recently (model_b) should not rank higher than a more used - // profile that has been unused for a short amount of time (model_a). - {"guid_a", 300, now - base::TimeDelta::FromDays(5), "guid_b", 10, - now - base::TimeDelta::FromDays(1), GREATER}, - // Special case: moving. A new profile used frequently (model_b) should - // rank higher than a profile with more usage that has not been used for a - // while (model_a). - {"guid_a", 300, now - base::TimeDelta::FromDays(15), "guid_b", 10, - now - base::TimeDelta::FromDays(1), LESS}, - }; +base::Time now = base::Time::Now(); - for (auto test_case : test_cases) { - TestAutofillDataModel model_a(test_case.guid_a, test_case.use_count_a, - test_case.use_date_a); - TestAutofillDataModel model_b(test_case.guid_b, test_case.use_count_b, - test_case.use_date_b); +class CompareFrecencyTest + : public testing::TestWithParam<CompareFrecencyTestCase> {}; - EXPECT_EQ(test_case.expectation == GREATER, - model_a.CompareFrecency(&model_b, now)); - EXPECT_NE(test_case.expectation == GREATER, - model_b.CompareFrecency(&model_a, now)); - } +TEST_P(CompareFrecencyTest, CompareFrecency) { + auto test_case = GetParam(); + TestAutofillDataModel model_a(test_case.guid_a, test_case.use_count_a, + test_case.use_date_a); + TestAutofillDataModel model_b(test_case.guid_b, test_case.use_count_b, + test_case.use_date_b); + + EXPECT_EQ(test_case.expectation == GREATER, + model_a.CompareFrecency(&model_b, now)); + EXPECT_NE(test_case.expectation == GREATER, + model_b.CompareFrecency(&model_a, now)); } +INSTANTIATE_TEST_CASE_P( + AutofillDataModelTest, + CompareFrecencyTest, + testing::Values( + // Same frecency, model_a has a smaller GUID (tie breaker). + CompareFrecencyTestCase{"guid_a", 8, now, "guid_b", 8, now, LESS}, + // Same recency, model_a has a bigger frequency. + CompareFrecencyTestCase{"guid_a", 10, now, "guid_b", 8, now, GREATER}, + // Same recency, model_a has a smaller frequency. + CompareFrecencyTestCase{"guid_a", 8, now, "guid_b", 10, now, LESS}, + // Same frequency, model_a is more recent. + CompareFrecencyTestCase{"guid_a", 8, now, "guid_b", 8, + now - base::TimeDelta::FromDays(1), GREATER}, + // Same frequency, model_a is less recent. + CompareFrecencyTestCase{"guid_a", 8, now - base::TimeDelta::FromDays(1), + "guid_b", 8, now, LESS}, + // Special case: occasional profiles. A profile with relatively low + // usage and used recently (model_b) should not rank higher than a more + // used profile that has been unused for a short amount of time + // (model_a). + CompareFrecencyTestCase{ + "guid_a", 300, now - base::TimeDelta::FromDays(5), "guid_b", 10, + now - base::TimeDelta::FromDays(1), GREATER}, + // Special case: moving. A new profile used frequently (model_b) should + // rank higher than a profile with more usage that has not been used for + // a while (model_a). + CompareFrecencyTestCase{"guid_a", 300, + now - base::TimeDelta::FromDays(15), "guid_b", + 10, now - base::TimeDelta::FromDays(1), LESS})); + } // namespace autofill
diff --git a/components/autofill/core/browser/autofill_data_util_unittest.cc b/components/autofill/core/browser/autofill_data_util_unittest.cc index 584690d..9aadd58b 100644 --- a/components/autofill/core/browser/autofill_data_util_unittest.cc +++ b/components/autofill/core/browser/autofill_data_util_unittest.cc
@@ -11,151 +11,166 @@ namespace autofill { namespace data_util { -TEST(AutofillDataUtilTest, IsCJKName) { - typedef struct { - const char* full_name; - bool is_cjk; - } TestCase; +struct IsCJKNameTestCase { + const char* full_name; + bool is_cjk; +}; - TestCase test_cases[] = { - // Non-CJK language with only ASCII characters. - {"Homer Jay Simpson", false}, - // Non-CJK language with some ASCII characters. - {"Éloïse Paré", false}, - // Non-CJK language with no ASCII characters. - {"Σωκράτης", false}, +class IsCJKNameTest : public testing::TestWithParam<IsCJKNameTestCase> {}; - // (Simplified) Chinese name, Unihan. - {"刘翔", true}, - // (Simplified) Chinese name, Unihan, with an ASCII space. - {"成 龙", true}, - // Korean name, Hangul. - {"송지효", true}, - // Korean name, Hangul, with an 'IDEOGRAPHIC SPACE' (U+3000). - {"김 종국", true}, - // Japanese name, Unihan. - {"山田貴洋", true}, - // Japanese name, Katakana, with a 'KATAKANA MIDDLE DOT' (U+30FB). - {"ビル・ゲイツ", true}, - // Japanese name, Katakana, with a 'MIDDLE DOT' (U+00B7) (likely a typo). - {"ビル·ゲイツ", true}, - - // CJK names don't have a middle name, so a 3-part name is bogus to us. - {"반 기 문", false} - }; - - for (const TestCase& test_case : test_cases) { - EXPECT_EQ(test_case.is_cjk, - IsCJKName(base::UTF8ToUTF16(test_case.full_name))) - << "Failed for: " << test_case.full_name; - } +TEST_P(IsCJKNameTest, IsCJKName) { + auto test_case = GetParam(); + EXPECT_EQ(test_case.is_cjk, IsCJKName(base::UTF8ToUTF16(test_case.full_name))) + << "Failed for: " << test_case.full_name; } -TEST(AutofillDataUtilTest, SplitName) { - typedef struct { - std::string full_name; - std::string given_name; - std::string middle_name; - std::string family_name; +INSTANTIATE_TEST_CASE_P( + AutofillDataUtilTest, + IsCJKNameTest, + testing::Values( + // Non-CJK language with only ASCII characters. + IsCJKNameTestCase{"Homer Jay Simpson", false}, + // Non-CJK language with some ASCII characters. + IsCJKNameTestCase{"Éloïse Paré", false}, + // Non-CJK language with no ASCII characters. + IsCJKNameTestCase{"Σωκράτης", false}, - } TestCase; + // (Simplified) Chinese name, Unihan. + IsCJKNameTestCase{"刘翔", true}, + // (Simplified) Chinese name, Unihan, with an ASCII space. + IsCJKNameTestCase{"成 龙", true}, + // Korean name, Hangul. + IsCJKNameTestCase{"송지효", true}, + // Korean name, Hangul, with an 'IDEOGRAPHIC SPACE' (U+3000). + IsCJKNameTestCase{"김 종국", true}, + // Japanese name, Unihan. + IsCJKNameTestCase{"山田貴洋", true}, + // Japanese name, Katakana, with a 'KATAKANA MIDDLE DOT' (U+30FB). + IsCJKNameTestCase{"ビル・ゲイツ", true}, + // Japanese name, Katakana, with a 'MIDDLE DOT' (U+00B7) (likely a + // typo). + IsCJKNameTestCase{"ビル·ゲイツ", true}, - const TestCase test_cases[] = { - // Full name including given, middle and family names. - {"Homer Jay Simpson", "Homer", "Jay", "Simpson"}, - // No middle name. - {"Moe Szyslak", "Moe", "", "Szyslak"}, - // Common name prefixes removed. - {"Reverend Timothy Lovejoy", "Timothy", "", "Lovejoy"}, - // Common name suffixes removed. - {"John Frink Phd", "John", "", "Frink"}, - // Exception to the name suffix removal. - {"John Ma", "John", "", "Ma"}, - // Common family name prefixes not considered a middle name. - {"Milhouse Van Houten", "Milhouse", "", "Van Houten"}, + // CJK names don't have a middle name, so a 3-part name is bogus to us. + IsCJKNameTestCase{"반 기 문", false})); - // CJK names have reverse order (surname goes first, given name goes - // second). - {"孫 德明", "德明", "", "孫"}, // Chinese name, Unihan - {"孫 德明", "德明", "", "孫"}, // Chinese name, Unihan, 'IDEOGRAPHIC SPACE' - {"홍 길동", "길동", "", "홍"}, // Korean name, Hangul - {"山田 貴洋", "貴洋", "", "山田"}, // Japanese name, Unihan +struct FullNameTestCase { + std::string full_name; + std::string given_name; + std::string middle_name; + std::string family_name; +}; - // In Japanese, foreign names use 'KATAKANA MIDDLE DOT' (U+30FB) as a - // separator. There is no consensus for the ordering. For now, we use the - // same ordering as regular Japanese names ("last・first"). - {"ゲイツ・ビル", "ビル", "", "ゲイツ"}, // Foreign name in Japanese, Katakana - // 'KATAKANA MIDDLE DOT' is occasionally typoed as 'MIDDLE DOT' (U+00B7). - {"ゲイツ·ビル", "ビル", "", "ゲイツ"}, // Foreign name in Japanese, Katakana +class SplitNameTest : public testing::TestWithParam<FullNameTestCase> {}; - // CJK names don't usually have a space in the middle, but most of the - // time, the surname is only one character (in Chinese & Korean). - {"최성훈", "성훈", "", "최"}, // Korean name, Hangul - {"刘翔", "翔", "", "刘"}, // (Simplified) Chinese name, Unihan - {"劉翔", "翔", "", "劉"}, // (Traditional) Chinese name, Unihan +TEST_P(SplitNameTest, SplitName) { + auto test_case = GetParam(); + NameParts name_parts = SplitName(base::UTF8ToUTF16(test_case.full_name)); - // There are a few exceptions. Occasionally, the surname has two - // characters. - {"남궁도", "도", "", "남궁"}, // Korean name, Hangul - {"황보혜정", "혜정", "", "황보"}, // Korean name, Hangul - {"歐陽靖", "靖", "", "歐陽"}, // (Traditional) Chinese name, Unihan - - // In Korean, some 2-character surnames are rare/ambiguous, like "강전": - // "강" is a common surname, and "전" can be part of a given name. In - // those cases, we assume it's 1/2 for 3-character names, or 2/2 for - // 4-character names. - {"강전희", "전희", "", "강"}, // Korean name, Hangul - {"황목치승", "치승", "", "황목"}, // Korean name, Hangul - - // It occasionally happens that a full name is 2 characters, 1/1. - {"이도", "도", "", "이"}, // Korean name, Hangul - {"孫文", "文", "", "孫"} // Chinese name, Unihan - }; - - for (TestCase test_case : test_cases) { - NameParts name_parts = SplitName(base::UTF8ToUTF16(test_case.full_name)); - - EXPECT_EQ(base::UTF8ToUTF16(test_case.given_name), name_parts.given); - EXPECT_EQ(base::UTF8ToUTF16(test_case.middle_name), name_parts.middle); - EXPECT_EQ(base::UTF8ToUTF16(test_case.family_name), name_parts.family); - } + EXPECT_EQ(base::UTF8ToUTF16(test_case.given_name), name_parts.given); + EXPECT_EQ(base::UTF8ToUTF16(test_case.middle_name), name_parts.middle); + EXPECT_EQ(base::UTF8ToUTF16(test_case.family_name), name_parts.family); } -TEST(AutofillDataUtilTest, JoinNameParts) { - typedef struct { - std::string given_name; - std::string middle_name; - std::string family_name; - std::string full_name; - } TestCase; +INSTANTIATE_TEST_CASE_P( + AutofillDataUtil, + SplitNameTest, + testing::Values( + // Full name including given, middle and family names. + FullNameTestCase{"Homer Jay Simpson", "Homer", "Jay", "Simpson"}, + // No middle name. + FullNameTestCase{"Moe Szyslak", "Moe", "", "Szyslak"}, + // Common name prefixes removed. + FullNameTestCase{"Reverend Timothy Lovejoy", "Timothy", "", "Lovejoy"}, + // Common name suffixes removed. + FullNameTestCase{"John Frink Phd", "John", "", "Frink"}, + // Exception to the name suffix removal. + FullNameTestCase{"John Ma", "John", "", "Ma"}, + // Common family name prefixes not considered a middle name. + FullNameTestCase{"Milhouse Van Houten", "Milhouse", "", "Van Houten"}, - TestCase test_cases[] = { - // Full name including given, middle and family names. - {"Homer", "Jay", "Simpson", "Homer Jay Simpson"}, - // No middle name. - {"Moe", "", "Szyslak", "Moe Szyslak"}, + // CJK names have reverse order (surname goes first, given name goes + // second). + FullNameTestCase{"孫 德明", "德明", "", "孫"}, // Chinese name, Unihan + FullNameTestCase{"孫 德明", "德明", "", + "孫"}, // Chinese name, Unihan, 'IDEOGRAPHIC SPACE' + FullNameTestCase{"홍 길동", "길동", "", "홍"}, // Korean name, Hangul + FullNameTestCase{"山田 貴洋", "貴洋", "", + "山田"}, // Japanese name, Unihan - // CJK names have reversed order, no space. - {"德明", "", "孫", "孫德明"}, // Chinese name, Unihan - {"길동", "", "홍", "홍길동"}, // Korean name, Hangul - {"貴洋", "", "山田", "山田貴洋"}, // Japanese name, Unihan + // In Japanese, foreign names use 'KATAKANA MIDDLE DOT' (U+30FB) as a + // separator. There is no consensus for the ordering. For now, we use + // the same ordering as regular Japanese names ("last・first"). + FullNameTestCase{"ゲイツ・ビル", "ビル", "", + "ゲイツ"}, // Foreign name in Japanese, Katakana + // 'KATAKANA MIDDLE DOT' is occasionally typoed as 'MIDDLE DOT' + // (U+00B7). + FullNameTestCase{"ゲイツ·ビル", "ビル", "", + "ゲイツ"}, // Foreign name in Japanese, Katakana - // These are no CJK names for us, they're just bogus. - {"Homer", "", "シンプソン", "Homer シンプソン"}, - {"ホーマー", "", "Simpson", "ホーマー Simpson"}, - {"반", "기", "문", "반 기 문"} // Has a middle-name, too unusual - }; + // CJK names don't usually have a space in the middle, but most of the + // time, the surname is only one character (in Chinese & Korean). + FullNameTestCase{"최성훈", "성훈", "", "최"}, // Korean name, Hangul + FullNameTestCase{"刘翔", "翔", "", + "刘"}, // (Simplified) Chinese name, Unihan + FullNameTestCase{"劉翔", "翔", "", + "劉"}, // (Traditional) Chinese name, Unihan - for (const TestCase& test_case : test_cases) { - base::string16 joined = JoinNameParts( - base::UTF8ToUTF16(test_case.given_name), - base::UTF8ToUTF16(test_case.middle_name), - base::UTF8ToUTF16(test_case.family_name)); + // There are a few exceptions. Occasionally, the surname has two + // characters. + FullNameTestCase{"남궁도", "도", "", "남궁"}, // Korean name, Hangul + FullNameTestCase{"황보혜정", "혜정", "", + "황보"}, // Korean name, Hangul + FullNameTestCase{"歐陽靖", "靖", "", + "歐陽"}, // (Traditional) Chinese name, Unihan - EXPECT_EQ(base::UTF8ToUTF16(test_case.full_name), joined); - } + // In Korean, some 2-character surnames are rare/ambiguous, like "강전": + // "강" is a common surname, and "전" can be part of a given name. In + // those cases, we assume it's 1/2 for 3-character names, or 2/2 for + // 4-character names. + FullNameTestCase{"강전희", "전희", "", "강"}, // Korean name, Hangul + FullNameTestCase{"황목치승", "치승", "", + "황목"}, // Korean name, Hangul + + // It occasionally happens that a full name is 2 characters, 1/1. + FullNameTestCase{"이도", "도", "", "이"}, // Korean name, Hangul + FullNameTestCase{"孫文", "文", "", "孫"} // Chinese name, Unihan + )); + +class JoinNamePartsTest : public testing::TestWithParam<FullNameTestCase> {}; + +TEST_P(JoinNamePartsTest, JoinNameParts) { + auto test_case = GetParam(); + base::string16 joined = + JoinNameParts(base::UTF8ToUTF16(test_case.given_name), + base::UTF8ToUTF16(test_case.middle_name), + base::UTF8ToUTF16(test_case.family_name)); + + EXPECT_EQ(base::UTF8ToUTF16(test_case.full_name), joined); } +INSTANTIATE_TEST_CASE_P( + AutofillDataUtil, + JoinNamePartsTest, + testing::Values( + // Full name including given, middle and family names. + FullNameTestCase{"Homer Jay Simpson", "Homer", "Jay", "Simpson"}, + // No middle name. + FullNameTestCase{"Moe Szyslak", "Moe", "", "Szyslak"}, + + // CJK names have reversed order, no space. + FullNameTestCase{"孫德明", "德明", "", "孫"}, // Chinese name, Unihan + FullNameTestCase{"홍길동", "길동", "", "홍"}, // Korean name, Hangul + FullNameTestCase{"山田貴洋", "貴洋", "", + "山田"}, // Japanese name, Unihan + + // These are no CJK names for us, they're just bogus. + FullNameTestCase{"Homer シンプソン", "Homer", "", "シンプソン"}, + FullNameTestCase{"ホーマー Simpson", "ホーマー", "", "Simpson"}, + FullNameTestCase{"반 기 문", "반", "기", "문"} + // Has a middle-name, too unusual + )); + TEST(AutofillDataUtilTest, ProfileMatchesFullName) { autofill::AutofillProfile profile; autofill::test::SetProfileInfo(
diff --git a/components/autofill/core/browser/autofill_field_unittest.cc b/components/autofill/core/browser/autofill_field_unittest.cc index ef4c047..5731f37 100644 --- a/components/autofill/core/browser/autofill_field_unittest.cc +++ b/components/autofill/core/browser/autofill_field_unittest.cc
@@ -283,181 +283,240 @@ EXPECT_EQ(ASCIIToUTF16("4111111111111111"), field.value); } +struct AutofillFieldTestCase { + HtmlFieldType field_type; + size_t field_max_length; + std::string value_to_fill; + std::string expected_value; +}; + +class AutofillFieldPhoneNumberTest + : public testing::TestWithParam<AutofillFieldTestCase> { + public: + AutofillFieldPhoneNumberTest() { CountryNames::SetLocaleString("en-US"); } +}; + // TODO(crbug.com/581514): Add support for filling only the prefix/suffix for // phone numbers with 10 or 11 digits. -TEST_F(AutofillFieldTest, FillPhoneNumber) { - typedef struct { - HtmlFieldType field_type; - size_t field_max_length; - std::string value_to_fill; - std::string expected_value; - } TestCase; +TEST_P(AutofillFieldPhoneNumberTest, FillPhoneNumber) { + auto test_case = GetParam(); + AutofillField field; + field.SetHtmlType(test_case.field_type, HtmlFieldMode()); + field.max_length = test_case.field_max_length; - TestCase test_cases[] = { - // Filling a phone type field with text should fill the text as is. - {HTML_TYPE_TEL, /* default value */ 0, "Oh hai", "Oh hai"}, - // Filling a prefix type field with a phone number of 7 digits should just - // fill the prefix. - {HTML_TYPE_TEL_LOCAL_PREFIX, /* default value */ 0, "5551234", "555"}, - // Filling a suffix type field with a phone number of 7 digits should just - // fill the suffix. - {HTML_TYPE_TEL_LOCAL_SUFFIX, /* default value */ 0, "5551234", "1234"}, - // Filling a phone type field with a max length of 3 with a phone number - // of - // 7 digits should fill only the prefix. - {HTML_TYPE_TEL, 3, "5551234", "555"}, - // Filling a phone type field with a max length of 4 with a phone number - // of - // 7 digits should fill only the suffix. - {HTML_TYPE_TEL, 4, "5551234", "1234"}, - // Filling a phone type field with a max length of 10 with a phone number - // including the country code should fill the phone number without the - // country code. - {HTML_TYPE_TEL, 10, "15141254578", "5141254578"}, - // Filling a phone type field with a max length of 5 with a phone number - // should fill with the last 5 digits of that phone number. - {HTML_TYPE_TEL, 5, "5141254578", "54578"}}; - - for (TestCase test_case : test_cases) { - AutofillField field; - field.SetHtmlType(test_case.field_type, HtmlFieldMode()); - field.max_length = test_case.field_max_length; - - AutofillField::FillFormField(field, ASCIIToUTF16(test_case.value_to_fill), - "en-US", "en-US", &field); - EXPECT_EQ(ASCIIToUTF16(test_case.expected_value), field.value); - } + AutofillField::FillFormField(field, ASCIIToUTF16(test_case.value_to_fill), + "en-US", "en-US", &field); + EXPECT_EQ(ASCIIToUTF16(test_case.expected_value), field.value); } -TEST_F(AutofillFieldTest, FillExpirationYearInput) { - typedef struct { - HtmlFieldType field_type; - size_t field_max_length; - std::string value_to_fill; - std::string expected_value; - } TestCase; +INSTANTIATE_TEST_CASE_P( + AutofillFieldTest, + AutofillFieldPhoneNumberTest, + testing::Values( + // Filling a phone type field with text should fill the text as is. + AutofillFieldTestCase{HTML_TYPE_TEL, /* default value */ 0, "Oh hai", + "Oh hai"}, + // Filling a prefix type field with a phone number of 7 digits should + // just fill the prefix. + AutofillFieldTestCase{HTML_TYPE_TEL_LOCAL_PREFIX, /* default value */ 0, + "5551234", "555"}, + // Filling a suffix type field with a phone number of 7 digits should + // just fill the suffix. + AutofillFieldTestCase{HTML_TYPE_TEL_LOCAL_SUFFIX, /* default value */ 0, + "5551234", "1234"}, + // Filling a phone type field with a max length of 3 with a phone number + // of + // 7 digits should fill only the prefix. + AutofillFieldTestCase{HTML_TYPE_TEL, 3, "5551234", "555"}, + // Filling a phone type field with a max length of 4 with a phone number + // of + // 7 digits should fill only the suffix. + AutofillFieldTestCase{HTML_TYPE_TEL, 4, "5551234", "1234"}, + // Filling a phone type field with a max length of 10 with a phone + // number including the country code should fill the phone number + // without the country code. + AutofillFieldTestCase{HTML_TYPE_TEL, 10, "15141254578", "5141254578"}, + // Filling a phone type field with a max length of 5 with a phone number + // should fill with the last 5 digits of that phone number. + AutofillFieldTestCase{HTML_TYPE_TEL, 5, "5141254578", "54578"})); - TestCase test_cases[] = { - // A field predicted as a 2 digits expiration year should fill the last 2 - // digits of the expiration year if the field has an unspecified max - // length (0) or if it's greater than 1. - {HTML_TYPE_CREDIT_CARD_EXP_2_DIGIT_YEAR, /* default value */ 0, "2023", - "23"}, - {HTML_TYPE_CREDIT_CARD_EXP_2_DIGIT_YEAR, 2, "2023", "23"}, - {HTML_TYPE_CREDIT_CARD_EXP_2_DIGIT_YEAR, 12, "2023", "23"}, - // A field predicted as a 2 digit expiration year should fill the last - // digit of the expiration year if the field has a max length of 1. - {HTML_TYPE_CREDIT_CARD_EXP_2_DIGIT_YEAR, 1, "2023", "3"}, - // A field predicted as a 4 digit expiration year should fill the 4 - // digits of the expiration year if the field has an unspecified max - // length (0) or if it's greater than 3 . - {HTML_TYPE_CREDIT_CARD_EXP_4_DIGIT_YEAR, /* default value */ 0, "2023", - "2023"}, - {HTML_TYPE_CREDIT_CARD_EXP_4_DIGIT_YEAR, 4, "2023", "2023"}, - {HTML_TYPE_CREDIT_CARD_EXP_4_DIGIT_YEAR, 12, "2023", "2023"}, - // A field predicted as a 4 digits expiration year should fill the last 2 - // digits of the expiration year if the field has a max length of 2. - {HTML_TYPE_CREDIT_CARD_EXP_4_DIGIT_YEAR, 2, "2023", "23"}, - // A field predicted as a 4 digits expiration year should fill the last - // digit of the expiration year if the field has a max length of 1. - {HTML_TYPE_CREDIT_CARD_EXP_4_DIGIT_YEAR, 1, "2023", "3"}, - }; +class AutofillFieldExpirationYearTest + : public testing::TestWithParam<AutofillFieldTestCase> { + public: + AutofillFieldExpirationYearTest() { CountryNames::SetLocaleString("en-US"); } +}; - for (TestCase test_case : test_cases) { - AutofillField field; - field.form_control_type = "text"; - field.SetHtmlType(test_case.field_type, HtmlFieldMode()); - field.max_length = test_case.field_max_length; +TEST_P(AutofillFieldExpirationYearTest, FillExpirationYearInput) { + auto test_case = GetParam(); + AutofillField field; + field.form_control_type = "text"; + field.SetHtmlType(test_case.field_type, HtmlFieldMode()); + field.max_length = test_case.field_max_length; - AutofillField::FillFormField(field, ASCIIToUTF16(test_case.value_to_fill), - "en-US", "en-US", &field); - EXPECT_EQ(ASCIIToUTF16(test_case.expected_value), field.value); - } + AutofillField::FillFormField(field, ASCIIToUTF16(test_case.value_to_fill), + "en-US", "en-US", &field); + EXPECT_EQ(ASCIIToUTF16(test_case.expected_value), field.value); } -TEST_F(AutofillFieldTest, FillExpirationDateInput) { - typedef struct { - HtmlFieldType field_type; - size_t field_max_length; - std::string value_to_fill; - std::string expected_value; - bool expected_response; - } TestCase; +INSTANTIATE_TEST_CASE_P( + AutofillFieldTest, + AutofillFieldExpirationYearTest, + testing::Values( + // A field predicted as a 2 digits expiration year should fill the last + // 2 digits of the expiration year if the field has an unspecified max + // length (0) or if it's greater than 1. + AutofillFieldTestCase{HTML_TYPE_CREDIT_CARD_EXP_2_DIGIT_YEAR, + /* default value */ 0, "2023", "23"}, + AutofillFieldTestCase{HTML_TYPE_CREDIT_CARD_EXP_2_DIGIT_YEAR, 2, "2023", + "23"}, + AutofillFieldTestCase{HTML_TYPE_CREDIT_CARD_EXP_2_DIGIT_YEAR, 12, + "2023", "23"}, + // A field predicted as a 2 digit expiration year should fill the last + // digit of the expiration year if the field has a max length of 1. + AutofillFieldTestCase{HTML_TYPE_CREDIT_CARD_EXP_2_DIGIT_YEAR, 1, "2023", + "3"}, + // A field predicted as a 4 digit expiration year should fill the 4 + // digits of the expiration year if the field has an unspecified max + // length (0) or if it's greater than 3 . + AutofillFieldTestCase{HTML_TYPE_CREDIT_CARD_EXP_4_DIGIT_YEAR, + /* default value */ 0, "2023", "2023"}, + AutofillFieldTestCase{HTML_TYPE_CREDIT_CARD_EXP_4_DIGIT_YEAR, 4, "2023", + "2023"}, + AutofillFieldTestCase{HTML_TYPE_CREDIT_CARD_EXP_4_DIGIT_YEAR, 12, + "2023", "2023"}, + // A field predicted as a 4 digits expiration year should fill the last + // 2 digits of the expiration year if the field has a max length of 2. + AutofillFieldTestCase{HTML_TYPE_CREDIT_CARD_EXP_4_DIGIT_YEAR, 2, "2023", + "23"}, + // A field predicted as a 4 digits expiration year should fill the last + // digit of the expiration year if the field has a max length of 1. + AutofillFieldTestCase{HTML_TYPE_CREDIT_CARD_EXP_4_DIGIT_YEAR, 1, "2023", + "3"})); - TestCase test_cases[] = { - // Test invalid inputs - {HTML_TYPE_CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR, 0, "1/21", "", false}, - {HTML_TYPE_CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR, 0, "01-21", "", false}, - {HTML_TYPE_CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR, 0, "1/2021", "", false}, - {HTML_TYPE_CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR, 0, "01-2021", "", false}, - // Trim whitespace - {HTML_TYPE_CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR, 0, "01/22 ", "01/22", - true}, - {HTML_TYPE_CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR, 0, "01/2022 ", "01/2022", - true}, - // A field predicted as a expiration date w/ 2 digit year should fill - // with a format of MM/YY unless it has max-length of: - // 4: Use format MMYY - // 6: Use format MMYYYY - // 7: Use format MM/YYYY - {HTML_TYPE_CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR, /* default value */ 0, - "01/23", "01/23", true}, - // Unsupported max lengths of 1-3, fail - {HTML_TYPE_CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR, 1, "01/23", "", false}, - {HTML_TYPE_CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR, 2, "02/23", "", false}, - {HTML_TYPE_CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR, 3, "03/23", "", false}, - // A max length of 4 indicates a format of MMYY. - {HTML_TYPE_CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR, 4, "02/23", "0223", true}, - // A max length of 6 indicates a format of MMYYYY, the 21st century is - // assumed. - // Desired case of proper max length >= 5 - {HTML_TYPE_CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR, 5, "03/23", "03/23", true}, - {HTML_TYPE_CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR, 6, "04/23", "042023", true}, - // A max length of 7 indicates a format of MM/YYYY, the 21st century is - // assumed. - {HTML_TYPE_CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR, 7, "05/23", "05/2023", - true}, - {HTML_TYPE_CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR, 12, "06/23", "06/23", true}, +struct AutofillFieldExpirationDateTestCase { + HtmlFieldType field_type; + size_t field_max_length; + std::string value_to_fill; + std::string expected_value; + bool expected_response; +}; - // A field predicted as a expiration date w/ 4 digit year should fill - // with a format of MM/YYYY unless it has max-length of: - // 4: Use format MMYY - // 5: Use format MM/YY - // 6: Use format MMYYYY - {HTML_TYPE_CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR, /* default value */ 0, - "01/2024", "01/2024", true}, - // Unsupported max lengths of 1-3, fail - {HTML_TYPE_CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR, 1, "01/2024", "", false}, - {HTML_TYPE_CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR, 2, "02/2024", "", false}, - {HTML_TYPE_CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR, 3, "03/2024", "", false}, - // A max length of 4 indicates a format of MMYY. - {HTML_TYPE_CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR, 4, "02/2024", "0224", true}, - // A max length of 5 indicates a format of MM/YY. - {HTML_TYPE_CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR, 5, "03/2024", "03/24", - true}, - // A max length of 6 indicates a format of MMYYYY. - {HTML_TYPE_CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR, 6, "04/2024", "042024", - true}, - // Desired case of proper max length >= 7 - {HTML_TYPE_CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR, 7, "05/2024", "05/2024", - true}, - {HTML_TYPE_CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR, 12, "06/2024", "06/2024", - true}, - }; +class AutofillFieldExpirationDateTest + : public testing::TestWithParam<AutofillFieldExpirationDateTestCase> { + public: + AutofillFieldExpirationDateTest() { CountryNames::SetLocaleString("en-US"); } +}; - for (TestCase test_case : test_cases) { - AutofillField field; - field.form_control_type = "text"; - field.SetHtmlType(test_case.field_type, HtmlFieldMode()); - field.max_length = test_case.field_max_length; +TEST_P(AutofillFieldExpirationDateTest, FillExpirationDateInput) { + auto test_case = GetParam(); + AutofillField field; + field.form_control_type = "text"; + field.SetHtmlType(test_case.field_type, HtmlFieldMode()); + field.max_length = test_case.field_max_length; - bool response = AutofillField::FillFormField( + bool response = AutofillField::FillFormField( field, ASCIIToUTF16(test_case.value_to_fill), "en-US", "en-US", &field); - EXPECT_EQ(ASCIIToUTF16(test_case.expected_value), field.value); - EXPECT_EQ(response, test_case.expected_response); - } + EXPECT_EQ(ASCIIToUTF16(test_case.expected_value), field.value); + EXPECT_EQ(response, test_case.expected_response); } +INSTANTIATE_TEST_CASE_P( + AutofillFieldTest, + AutofillFieldExpirationDateTest, + testing::Values( + // Test invalid inputs + AutofillFieldExpirationDateTestCase{ + HTML_TYPE_CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR, 0, "1/21", "", false}, + AutofillFieldExpirationDateTestCase{ + HTML_TYPE_CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR, 0, "01-21", "", false}, + AutofillFieldExpirationDateTestCase{ + HTML_TYPE_CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR, 0, "1/2021", "", + false}, + AutofillFieldExpirationDateTestCase{ + HTML_TYPE_CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR, 0, "01-2021", "", + false}, + // Trim whitespace + AutofillFieldExpirationDateTestCase{ + HTML_TYPE_CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR, 0, "01/22 ", "01/22", + true}, + AutofillFieldExpirationDateTestCase{ + HTML_TYPE_CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR, 0, "01/2022 ", + "01/2022", true}, + // A field predicted as a expiration date w/ 2 digit year should fill + // with a format of MM/YY unless it has max-length of: + // 4: Use format MMYY + // 6: Use format MMYYYY + // 7: Use format MM/YYYY + AutofillFieldExpirationDateTestCase{ + HTML_TYPE_CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR, /* default value */ 0, + "01/23", "01/23", true}, + // Unsupported max lengths of 1-3, fail + AutofillFieldExpirationDateTestCase{ + HTML_TYPE_CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR, 1, "01/23", "", false}, + AutofillFieldExpirationDateTestCase{ + HTML_TYPE_CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR, 2, "02/23", "", false}, + AutofillFieldExpirationDateTestCase{ + HTML_TYPE_CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR, 3, "03/23", "", false}, + // A max length of 4 indicates a format of MMYY. + AutofillFieldExpirationDateTestCase{ + HTML_TYPE_CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR, 4, "02/23", "0223", + true}, + // A max length of 6 indicates a format of MMYYYY, the 21st century is + // assumed. + // Desired case of proper max length >= 5 + AutofillFieldExpirationDateTestCase{ + HTML_TYPE_CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR, 5, "03/23", "03/23", + true}, + AutofillFieldExpirationDateTestCase{ + HTML_TYPE_CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR, 6, "04/23", "042023", + true}, + // A max length of 7 indicates a format of MM/YYYY, the 21st century is + // assumed. + AutofillFieldExpirationDateTestCase{ + HTML_TYPE_CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR, 7, "05/23", "05/2023", + true}, + AutofillFieldExpirationDateTestCase{ + HTML_TYPE_CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR, 12, "06/23", "06/23", + true}, + + // A field predicted as a expiration date w/ 4 digit year should fill + // with a format of MM/YYYY unless it has max-length of: + // 4: Use format MMYY + // 5: Use format MM/YY + // 6: Use format MMYYYY + AutofillFieldExpirationDateTestCase{ + HTML_TYPE_CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR, /* default value */ 0, + "01/2024", "01/2024", true}, + // Unsupported max lengths of 1-3, fail + AutofillFieldExpirationDateTestCase{ + HTML_TYPE_CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR, 1, "01/2024", "", + false}, + AutofillFieldExpirationDateTestCase{ + HTML_TYPE_CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR, 2, "02/2024", "", + false}, + AutofillFieldExpirationDateTestCase{ + HTML_TYPE_CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR, 3, "03/2024", "", + false}, + // A max length of 4 indicates a format of MMYY. + AutofillFieldExpirationDateTestCase{ + HTML_TYPE_CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR, 4, "02/2024", "0224", + true}, + // A max length of 5 indicates a format of MM/YY. + AutofillFieldExpirationDateTestCase{ + HTML_TYPE_CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR, 5, "03/2024", "03/24", + true}, + // A max length of 6 indicates a format of MMYYYY. + AutofillFieldExpirationDateTestCase{ + HTML_TYPE_CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR, 6, "04/2024", "042024", + true}, + // Desired case of proper max length >= 7 + AutofillFieldExpirationDateTestCase{ + HTML_TYPE_CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR, 7, "05/2024", + "05/2024", true}, + AutofillFieldExpirationDateTestCase{ + HTML_TYPE_CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR, 12, "06/2024", + "06/2024", true})); + TEST_F(AutofillFieldTest, FillSelectControlByValue) { std::vector<const char*> kOptions = { "Eenie", "Meenie", "Miney", "Mo", @@ -493,131 +552,179 @@ EXPECT_EQ(ASCIIToUTF16("2"), field.value); // Corresponds to "Miney". } -TEST_F(AutofillFieldTest, FillSelectWithStates) { - typedef struct { - std::vector<const char*> select_values; - const char* input_value; - const char* expected_value; - } TestCase; +struct FillSelectTestCase { + std::vector<const char*> select_values; + const char* input_value; + const char* expected_value; +}; - TestCase test_cases[] = { - // Filling the abbreviation. - {{"Alabama", "California"}, "CA", "California"}, - // Attempting to fill the full name in a select full of abbreviations. - {{"AL", "CA"}, "California", "CA"}, - // Different case and diacritics. - {{"QUÉBEC", "ALBERTA"}, "Quebec", "QUÉBEC"}, - // Inexact state names. - {{"SC - South Carolina", "CA - California", "NC - North Carolina"}, - "California", - "CA - California"}, - // Don't accidentally match "Virginia" to "West Virginia". - {{"WV - West Virginia", "VA - Virginia", "NV - North Virginia"}, - "Virginia", - "VA - Virginia"}, - // Do accidentally match "Virginia" to "West Virginia". - // TODO(crbug.com/624770): This test should not pass, but it does because - // "Virginia" is a substring of "West Virginia". - {{"WV - West Virginia", "TX - Texas"}, "Virginia", "WV - West Virginia"}, - // Tests that substring matches work for full state names (a full token - // match isn't required). Also tests that matches work for states with - // whitespace in the middle. - {{"California.", "North Carolina."}, "North Carolina", "North Carolina."}, - {{"NC - North Carolina", "CA - California"}, "CA", "CA - California"}, - // These are not states. - {{"NCNCA", "SCNCA"}, "NC", ""}}; +class AutofillSelectWithStatesTest + : public testing::TestWithParam<FillSelectTestCase> { + public: + AutofillSelectWithStatesTest() { CountryNames::SetLocaleString("en-US"); } +}; - for (TestCase test_case : test_cases) { - AutofillField field; - test::CreateTestSelectField(test_case.select_values, &field); - field.set_heuristic_type(ADDRESS_HOME_STATE); +TEST_P(AutofillSelectWithStatesTest, FillSelectWithStates) { + auto test_case = GetParam(); + AutofillField field; + test::CreateTestSelectField(test_case.select_values, &field); + field.set_heuristic_type(ADDRESS_HOME_STATE); - AutofillField::FillFormField(field, UTF8ToUTF16(test_case.input_value), - "en-US", "en-US", &field); - EXPECT_EQ(UTF8ToUTF16(test_case.expected_value), field.value); - } + AutofillField::FillFormField(field, UTF8ToUTF16(test_case.input_value), + "en-US", "en-US", &field); + EXPECT_EQ(UTF8ToUTF16(test_case.expected_value), field.value); } -TEST_F(AutofillFieldTest, FillSelectWithCountries) { - typedef struct { - std::vector<const char*> select_values; - const char* input_value; - const char* expected_value; - } TestCase; +INSTANTIATE_TEST_CASE_P( + AutofillFieldTest, + AutofillSelectWithStatesTest, + testing::Values( + // Filling the abbreviation. + FillSelectTestCase{{"Alabama", "California"}, "CA", "California"}, + // Attempting to fill the full name in a select full of abbreviations. + FillSelectTestCase{{"AL", "CA"}, "California", "CA"}, + // Different case and diacritics. + FillSelectTestCase{{"QUÉBEC", "ALBERTA"}, "Quebec", "QUÉBEC"}, + // Inexact state names. + FillSelectTestCase{ + {"SC - South Carolina", "CA - California", "NC - North Carolina"}, + "California", + "CA - California"}, + // Don't accidentally match "Virginia" to "West Virginia". + FillSelectTestCase{ + {"WV - West Virginia", "VA - Virginia", "NV - North Virginia"}, + "Virginia", + "VA - Virginia"}, + // Do accidentally match "Virginia" to "West Virginia". + // TODO(crbug.com/624770): This test should not pass, but it does + // because "Virginia" is a substring of "West Virginia". + FillSelectTestCase{{"WV - West Virginia", "TX - Texas"}, + "Virginia", + "WV - West Virginia"}, + // Tests that substring matches work for full state names (a full token + // match isn't required). Also tests that matches work for states with + // whitespace in the middle. + FillSelectTestCase{{"California.", "North Carolina."}, + "North Carolina", + "North Carolina."}, + FillSelectTestCase{{"NC - North Carolina", "CA - California"}, + "CA", + "CA - California"}, + // These are not states. + FillSelectTestCase{{"NCNCA", "SCNCA"}, "NC", ""})); - TestCase test_cases[] = {// Full country names. - {{"Albania", "Canada"}, "CA", "Canada"}, - // Abbreviations. - {{"AL", "CA"}, "Canada", "CA"}}; +class AutofillSelectWithCountriesTest + : public testing::TestWithParam<FillSelectTestCase> { + public: + AutofillSelectWithCountriesTest() { CountryNames::SetLocaleString("en-US"); } +}; - for (TestCase test_case : test_cases) { - AutofillField field; - test::CreateTestSelectField(test_case.select_values, &field); - field.set_heuristic_type(ADDRESS_HOME_COUNTRY); +TEST_P(AutofillSelectWithCountriesTest, FillSelectWithCountries) { + auto test_case = GetParam(); + AutofillField field; + test::CreateTestSelectField(test_case.select_values, &field); + field.set_heuristic_type(ADDRESS_HOME_COUNTRY); - AutofillField::FillFormField(field, UTF8ToUTF16(test_case.input_value), - "en-US", "en-US", &field); - EXPECT_EQ(UTF8ToUTF16(test_case.expected_value), field.value); - } + AutofillField::FillFormField(field, UTF8ToUTF16(test_case.input_value), + "en-US", "en-US", &field); + EXPECT_EQ(UTF8ToUTF16(test_case.expected_value), field.value); } -TEST_F(AutofillFieldTest, FillSelectControlWithExpirationMonth) { - typedef struct { - std::vector<const char*> select_values; - std::vector<const char*> select_contents; - } TestCase; +INSTANTIATE_TEST_CASE_P( + AutofillFieldTest, + AutofillSelectWithCountriesTest, + testing::Values( + // Full country names. + FillSelectTestCase{{"Albania", "Canada"}, "CA", "Canada"}, + // Abbreviations. + FillSelectTestCase{{"AL", "CA"}, "Canada", "CA"})); - TestCase test_cases[] = { - // Values start at 1. - {{"1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"}, - NotNumericMonthsContentsNoPlaceholder()}, - // Values start at 1 but single digits are whitespace padded! - {{" 1", " 2", " 3", " 4", " 5", " 6", " 7", " 8", " 9", "10", "11", "12"}, - NotNumericMonthsContentsNoPlaceholder()}, - // Values start at 0. - {{"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11"}, - NotNumericMonthsContentsNoPlaceholder()}, - // Values start at 00. - {{"00", "01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11"}, - NotNumericMonthsContentsNoPlaceholder()}, - // The AngularJS framework adds a prefix to number types. Test that it is - // removed. - {{"number:1", "number:2", "number:3", "number:4", "number:5", "number:6", - "number:7", "number:8", "number:9", "number:10", "number:11", - "number:12"}, - NotNumericMonthsContentsNoPlaceholder()}, - // Values start at 0 and the first content is a placeholder. - {{"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"}, - NotNumericMonthsContentsWithPlaceholder()}, - // Values start at 1 and the first content is a placeholder. - {{"1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13"}, - NotNumericMonthsContentsWithPlaceholder()}, - // Values start at 01 and the first content is a placeholder. - {{"01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12", - "13"}, - NotNumericMonthsContentsWithPlaceholder()}, - // Values start at 0 after a placeholder. - {{"?", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11"}, - NotNumericMonthsContentsWithPlaceholder()}, - // Values start at 1 after a placeholder. - {{"?", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"}, - NotNumericMonthsContentsWithPlaceholder()}, - // Values start at 0 after a negative number. - {{"-1", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11"}, - NotNumericMonthsContentsWithPlaceholder()}, - // Values start at 1 after a negative number. - {{"-1", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"}, - NotNumericMonthsContentsWithPlaceholder()}}; +struct FillWithExpirationMonthTestCase { + std::vector<const char*> select_values; + std::vector<const char*> select_contents; +}; - for (TestCase test_case : test_cases) { - ASSERT_EQ(test_case.select_values.size(), test_case.select_contents.size()); - - TestFillingExpirationMonth(test_case.select_values, - test_case.select_contents, - test_case.select_values.size()); +class AutofillSelectWithExpirationMonthTest + : public testing::TestWithParam<FillWithExpirationMonthTestCase> { + public: + AutofillSelectWithExpirationMonthTest() { + CountryNames::SetLocaleString("en-US"); } +}; + +TEST_P(AutofillSelectWithExpirationMonthTest, + FillSelectControlWithExpirationMonth) { + auto test_case = GetParam(); + ASSERT_EQ(test_case.select_values.size(), test_case.select_contents.size()); + + TestFillingExpirationMonth(test_case.select_values, test_case.select_contents, + test_case.select_values.size()); } +INSTANTIATE_TEST_CASE_P( + AutofillFieldTest, + AutofillSelectWithExpirationMonthTest, + testing::Values( + // Values start at 1. + FillWithExpirationMonthTestCase{ + {"1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"}, + NotNumericMonthsContentsNoPlaceholder()}, + // Values start at 1 but single digits are whitespace padded! + FillWithExpirationMonthTestCase{ + {" 1", " 2", " 3", " 4", " 5", " 6", " 7", " 8", " 9", "10", "11", + "12"}, + NotNumericMonthsContentsNoPlaceholder()}, + // Values start at 0. + FillWithExpirationMonthTestCase{ + {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11"}, + NotNumericMonthsContentsNoPlaceholder()}, + // Values start at 00. + FillWithExpirationMonthTestCase{ + {"00", "01", "02", "03", "04", "05", "06", "07", "08", "09", "10", + "11"}, + NotNumericMonthsContentsNoPlaceholder()}, + // The AngularJS framework adds a prefix to number types. Test that it + // is removed. + FillWithExpirationMonthTestCase{ + {"number:1", "number:2", "number:3", "number:4", "number:5", + "number:6", "number:7", "number:8", "number:9", "number:10", + "number:11", "number:12"}, + NotNumericMonthsContentsNoPlaceholder()}, + // Values start at 0 and the first content is a placeholder. + FillWithExpirationMonthTestCase{ + {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", + "12"}, + NotNumericMonthsContentsWithPlaceholder()}, + // Values start at 1 and the first content is a placeholder. + FillWithExpirationMonthTestCase{ + {"1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", + "13"}, + NotNumericMonthsContentsWithPlaceholder()}, + // Values start at 01 and the first content is a placeholder. + FillWithExpirationMonthTestCase{ + {"01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", + "12", "13"}, + NotNumericMonthsContentsWithPlaceholder()}, + // Values start at 0 after a placeholder. + FillWithExpirationMonthTestCase{ + {"?", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11"}, + NotNumericMonthsContentsWithPlaceholder()}, + // Values start at 1 after a placeholder. + FillWithExpirationMonthTestCase{ + {"?", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", + "12"}, + NotNumericMonthsContentsWithPlaceholder()}, + // Values start at 0 after a negative number. + FillWithExpirationMonthTestCase{ + {"-1", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", + "11"}, + NotNumericMonthsContentsWithPlaceholder()}, + // Values start at 1 after a negative number. + FillWithExpirationMonthTestCase{ + {"-1", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", + "12"}, + NotNumericMonthsContentsWithPlaceholder()})); + TEST_F(AutofillFieldTest, FillSelectControlWithAbbreviatedMonthName) { std::vector<const char*> kMonthsAbbreviated = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", @@ -920,50 +1027,64 @@ // Tests that text state fields are filled correctly depending on their // maxlength attribute value. -TEST_F(AutofillFieldTest, FillStateText) { - typedef struct { - HtmlFieldType field_type; - size_t field_max_length; - std::string value_to_fill; - std::string expected_value; - bool should_fill; - } TestCase; +struct FillStateTextTestCase { + HtmlFieldType field_type; + size_t field_max_length; + std::string value_to_fill; + std::string expected_value; + bool should_fill; +}; - TestCase test_cases[] = { - // Filling a state to a text field with the default maxlength value should - // fill the state value as is. - {HTML_TYPE_ADDRESS_LEVEL1, /* default value */ 0, "New York", "New York", - true}, - {HTML_TYPE_ADDRESS_LEVEL1, /* default value */ 0, "NY", "NY", true}, - // Filling a state to a text field with a maxlength value equal to the - // value's length should fill the state value as is. - {HTML_TYPE_ADDRESS_LEVEL1, 8, "New York", "New York", true}, - // Filling a state to a text field with a maxlength value lower than the - // value's length but higher than the value's abbreviation should fill the - // state abbreviation. - {HTML_TYPE_ADDRESS_LEVEL1, 2, "New York", "NY", true}, - {HTML_TYPE_ADDRESS_LEVEL1, 2, "NY", "NY", true}, - // Filling a state to a text field with a maxlength value lower than the - // value's length and the value's abbreviation should not fill at all. - {HTML_TYPE_ADDRESS_LEVEL1, 1, "New York", "", false}, - {HTML_TYPE_ADDRESS_LEVEL1, 1, "NY", "", false}, - // Filling a state to a text field with a maxlength value lower than the - // value's length and that has no associated abbreviation should not fill - // at all. - {HTML_TYPE_ADDRESS_LEVEL1, 3, "Quebec", "", false}}; +class AutofillStateTextTest + : public testing::TestWithParam<FillStateTextTestCase> { + public: + AutofillStateTextTest() { CountryNames::SetLocaleString("en-US"); } +}; - for (const TestCase& test_case : test_cases) { - AutofillField field; - field.SetHtmlType(test_case.field_type, HtmlFieldMode()); - field.max_length = test_case.field_max_length; +TEST_P(AutofillStateTextTest, FillStateText) { + auto test_case = GetParam(); + AutofillField field; + field.SetHtmlType(test_case.field_type, HtmlFieldMode()); + field.max_length = test_case.field_max_length; - bool has_filled = AutofillField::FillFormField( - field, ASCIIToUTF16(test_case.value_to_fill), "en-US", "en-US", &field); + bool has_filled = AutofillField::FillFormField( + field, ASCIIToUTF16(test_case.value_to_fill), "en-US", "en-US", &field); - EXPECT_EQ(test_case.should_fill, has_filled); - EXPECT_EQ(ASCIIToUTF16(test_case.expected_value), field.value); - } + EXPECT_EQ(test_case.should_fill, has_filled); + EXPECT_EQ(ASCIIToUTF16(test_case.expected_value), field.value); } +INSTANTIATE_TEST_CASE_P( + AutofillFieldTest, + AutofillStateTextTest, + testing::Values( + // Filling a state to a text field with the default maxlength value + // should + // fill the state value as is. + FillStateTextTestCase{HTML_TYPE_ADDRESS_LEVEL1, /* default value */ 0, + "New York", "New York", true}, + FillStateTextTestCase{HTML_TYPE_ADDRESS_LEVEL1, /* default value */ 0, + "NY", "NY", true}, + // Filling a state to a text field with a maxlength value equal to the + // value's length should fill the state value as is. + FillStateTextTestCase{HTML_TYPE_ADDRESS_LEVEL1, 8, "New York", + "New York", true}, + // Filling a state to a text field with a maxlength value lower than the + // value's length but higher than the value's abbreviation should fill + // the state abbreviation. + FillStateTextTestCase{HTML_TYPE_ADDRESS_LEVEL1, 2, "New York", "NY", + true}, + FillStateTextTestCase{HTML_TYPE_ADDRESS_LEVEL1, 2, "NY", "NY", true}, + // Filling a state to a text field with a maxlength value lower than the + // value's length and the value's abbreviation should not fill at all. + FillStateTextTestCase{HTML_TYPE_ADDRESS_LEVEL1, 1, "New York", "", + false}, + FillStateTextTestCase{HTML_TYPE_ADDRESS_LEVEL1, 1, "NY", "", false}, + // Filling a state to a text field with a maxlength value lower than the + // value's length and that has no associated abbreviation should not + // fill at all. + FillStateTextTestCase{HTML_TYPE_ADDRESS_LEVEL1, 3, "Quebec", "", + false})); + } // namespace } // namespace autofill
diff --git a/components/autofill/core/browser/autofill_manager_unittest.cc b/components/autofill/core/browser/autofill_manager_unittest.cc index d33e0fe..dfa9bad 100644 --- a/components/autofill/core/browser/autofill_manager_unittest.cc +++ b/components/autofill/core/browser/autofill_manager_unittest.cc
@@ -792,6 +792,15 @@ return nullptr; } +// Get Ukm sources from the Ukm service. +std::vector<const ukm::UkmSource*> GetUkmSources(ukm::TestUkmService* service) { + std::vector<const ukm::UkmSource*> sources; + for (const auto& kv : service->GetSources()) + sources.push_back(kv.second.get()); + + return sources; +} + } // namespace class AutofillManagerTest : public testing::Test { @@ -1026,7 +1035,7 @@ // Check that one source is logged. ASSERT_EQ(1U, ukm_service->sources_count()); - const ukm::UkmSource* source = ukm_service->GetSource(0); + const ukm::UkmSource* source = GetUkmSources(ukm_service)[0]; // Check that one entry is logged. EXPECT_EQ(1U, ukm_service->entries_count());
diff --git a/components/autofill/core/browser/autofill_metrics_unittest.cc b/components/autofill/core/browser/autofill_metrics_unittest.cc index 36039f5..efea6e7 100644 --- a/components/autofill/core/browser/autofill_metrics_unittest.cc +++ b/components/autofill/core/browser/autofill_metrics_unittest.cc
@@ -4385,7 +4385,8 @@ ukm_service_test_harness.test_ukm_service(); ASSERT_EQ(1U, ukm_service->sources_count()); - const ukm::UkmSource* source = ukm_service->GetSource(0); + const ukm::UkmSource* source = + ukm_service->GetSourceForUrl(url.spec().c_str()); EXPECT_EQ(url.spec(), source->url().spec()); EXPECT_EQ(1U, ukm_service->entries_count());
diff --git a/components/autofill/core/browser/autofill_profile.cc b/components/autofill/core/browser/autofill_profile.cc index 1828497..4ef1222 100644 --- a/components/autofill/core/browser/autofill_profile.cc +++ b/components/autofill/core/browser/autofill_profile.cc
@@ -48,8 +48,8 @@ using base::ASCIIToUTF16; using base::UTF16ToUTF8; -using i18n::addressinput::AddressData; -using i18n::addressinput::AddressField; +using ::i18n::addressinput::AddressData; +using ::i18n::addressinput::AddressField; namespace autofill { namespace {
diff --git a/components/autofill/core/browser/contact_info_unittest.cc b/components/autofill/core/browser/contact_info_unittest.cc index d501b5d..d07dfa0 100644 --- a/components/autofill/core/browser/contact_info_unittest.cc +++ b/components/autofill/core/browser/contact_info_unittest.cc
@@ -25,47 +25,53 @@ std::string given_name_output; std::string middle_name_output; std::string family_name_output; -} full_name_test_cases[] = { - { "", "", "", "" }, - { "John Smith", "John", "", "Smith" }, - { "Julien van der Poel", "Julien", "", "van der Poel" }, - { "John J Johnson", "John", "J", "Johnson" }, - { "John Smith, Jr.", "John", "", "Smith" }, - { "Mr John Smith", "John", "", "Smith" }, - { "Mr. John Smith", "John", "", "Smith" }, - { "Mr. John Smith, M.D.", "John", "", "Smith" }, - { "Mr. John Smith, MD", "John", "", "Smith" }, - { "Mr. John Smith MD", "John", "", "Smith" }, - { "William Hubert J.R.", "William", "Hubert", "J.R." }, - { "John Ma", "John", "", "Ma" }, - { "John Smith, MA", "John", "", "Smith" }, - { "John Jacob Jingleheimer Smith", "John Jacob", "Jingleheimer", "Smith" }, - { "Virgil", "Virgil", "", "" }, - { "Murray Gell-Mann", "Murray", "", "Gell-Mann" }, - { "Mikhail Yevgrafovich Saltykov-Shchedrin", "Mikhail", "Yevgrafovich", - "Saltykov-Shchedrin" }, - { "Arthur Ignatius Conan Doyle", "Arthur Ignatius", "Conan", "Doyle" }, }; -TEST(NameInfoTest, SetFullName) { - for (const FullNameTestCase& test_case : full_name_test_cases) { - SCOPED_TRACE(test_case.full_name_input); +class SetFullNameTest : public testing::TestWithParam<FullNameTestCase> {}; - NameInfo name; - name.SetInfo(AutofillType(NAME_FULL), - ASCIIToUTF16(test_case.full_name_input), - "en-US"); - EXPECT_EQ(ASCIIToUTF16(test_case.given_name_output), - name.GetInfo(AutofillType(NAME_FIRST), "en-US")); - EXPECT_EQ(ASCIIToUTF16(test_case.middle_name_output), - name.GetInfo(AutofillType(NAME_MIDDLE), "en-US")); - EXPECT_EQ(ASCIIToUTF16(test_case.family_name_output), - name.GetInfo(AutofillType(NAME_LAST), "en-US")); - EXPECT_EQ(ASCIIToUTF16(test_case.full_name_input), - name.GetInfo(AutofillType(NAME_FULL), "en-US")); - } +TEST_P(SetFullNameTest, SetFullName) { + auto test_case = GetParam(); + SCOPED_TRACE(test_case.full_name_input); + + NameInfo name; + name.SetInfo(AutofillType(NAME_FULL), ASCIIToUTF16(test_case.full_name_input), + "en-US"); + EXPECT_EQ(ASCIIToUTF16(test_case.given_name_output), + name.GetInfo(AutofillType(NAME_FIRST), "en-US")); + EXPECT_EQ(ASCIIToUTF16(test_case.middle_name_output), + name.GetInfo(AutofillType(NAME_MIDDLE), "en-US")); + EXPECT_EQ(ASCIIToUTF16(test_case.family_name_output), + name.GetInfo(AutofillType(NAME_LAST), "en-US")); + EXPECT_EQ(ASCIIToUTF16(test_case.full_name_input), + name.GetInfo(AutofillType(NAME_FULL), "en-US")); } +INSTANTIATE_TEST_CASE_P( + ContactInfoTest, + SetFullNameTest, + testing::Values( + FullNameTestCase{"", "", "", ""}, + FullNameTestCase{"John Smith", "John", "", "Smith"}, + FullNameTestCase{"Julien van der Poel", "Julien", "", "van der Poel"}, + FullNameTestCase{"John J Johnson", "John", "J", "Johnson"}, + FullNameTestCase{"John Smith, Jr.", "John", "", "Smith"}, + FullNameTestCase{"Mr John Smith", "John", "", "Smith"}, + FullNameTestCase{"Mr. John Smith", "John", "", "Smith"}, + FullNameTestCase{"Mr. John Smith, M.D.", "John", "", "Smith"}, + FullNameTestCase{"Mr. John Smith, MD", "John", "", "Smith"}, + FullNameTestCase{"Mr. John Smith MD", "John", "", "Smith"}, + FullNameTestCase{"William Hubert J.R.", "William", "Hubert", "J.R."}, + FullNameTestCase{"John Ma", "John", "", "Ma"}, + FullNameTestCase{"John Smith, MA", "John", "", "Smith"}, + FullNameTestCase{"John Jacob Jingleheimer Smith", "John Jacob", + "Jingleheimer", "Smith"}, + FullNameTestCase{"Virgil", "Virgil", "", ""}, + FullNameTestCase{"Murray Gell-Mann", "Murray", "", "Gell-Mann"}, + FullNameTestCase{"Mikhail Yevgrafovich Saltykov-Shchedrin", "Mikhail", + "Yevgrafovich", "Saltykov-Shchedrin"}, + FullNameTestCase{"Arthur Ignatius Conan Doyle", "Arthur Ignatius", + "Conan", "Doyle"})); + TEST(NameInfoTest, GetFullName) { NameInfo name; name.SetRawInfo(NAME_FIRST, ASCIIToUTF16("First")); @@ -174,209 +180,221 @@ name.GetInfo(AutofillType(NAME_FULL), "en-US")); } -TEST(NameInfoTest, ParsedNamesAreEqual) { - struct TestCase { - std::string starting_names[3]; - std::string additional_names[3]; - bool expected_result; +struct ParsedNamesAreEqualTestCase { + std::string starting_names[3]; + std::string additional_names[3]; + bool expected_result; }; - struct TestCase test_cases[] = { - // Identical name comparison. - {{"Marion", "Mitchell", "Morrison"}, - {"Marion", "Mitchell", "Morrison"}, - true}, + class ParsedNamesAreEqualTest + : public testing::TestWithParam<ParsedNamesAreEqualTestCase> {}; - // Case-sensitive comparisons. - {{"Marion", "Mitchell", "Morrison"}, - {"Marion", "Mitchell", "MORRISON"}, - false}, - {{"Marion", "Mitchell", "Morrison"}, - {"MARION", "Mitchell", "MORRISON"}, - false}, - {{"Marion", "Mitchell", "Morrison"}, - {"MARION", "MITCHELL", "MORRISON"}, - false}, - {{"Marion", "", "Mitchell Morrison"}, - {"MARION", "", "MITCHELL MORRISON"}, - false}, - {{"Marion Mitchell", "", "Morrison"}, - {"MARION MITCHELL", "", "MORRISON"}, - false}, - - // Identical full names but different canonical forms. - {{"Marion", "Mitchell", "Morrison"}, - {"Marion", "", "Mitchell Morrison"}, - false}, - {{"Marion", "Mitchell", "Morrison"}, - {"Marion Mitchell", "", "MORRISON"}, - false}, - - // Different names. - {{"Marion", "Mitchell", "Morrison"}, {"Marion", "M.", "Morrison"}, false}, - {{"Marion", "Mitchell", "Morrison"}, {"MARION", "M.", "MORRISON"}, false}, - {{"Marion", "Mitchell", "Morrison"}, - {"David", "Mitchell", "Morrison"}, - false}, - - // Non-ASCII characters. - {{"M\xc3\xa1rion Mitchell", "", "Morrison"}, - {"M\xc3\xa1rion Mitchell", "", "Morrison"}, - true}, - }; - - for (size_t i = 0; i < arraysize(test_cases); ++i) { - SCOPED_TRACE(base::StringPrintf("i: %" PRIuS, i)); + TEST_P(ParsedNamesAreEqualTest, ParsedNamesAreEqual) { + auto test_case = GetParam(); // Construct the starting_profile. NameInfo starting_profile; starting_profile.SetRawInfo(NAME_FIRST, - UTF8ToUTF16(test_cases[i].starting_names[0])); + UTF8ToUTF16(test_case.starting_names[0])); starting_profile.SetRawInfo(NAME_MIDDLE, - UTF8ToUTF16(test_cases[i].starting_names[1])); + UTF8ToUTF16(test_case.starting_names[1])); starting_profile.SetRawInfo(NAME_LAST, - UTF8ToUTF16(test_cases[i].starting_names[2])); + UTF8ToUTF16(test_case.starting_names[2])); // Construct the additional_profile. NameInfo additional_profile; - additional_profile.SetRawInfo( - NAME_FIRST, UTF8ToUTF16(test_cases[i].additional_names[0])); - additional_profile.SetRawInfo( - NAME_MIDDLE, UTF8ToUTF16(test_cases[i].additional_names[1])); - additional_profile.SetRawInfo( - NAME_LAST, UTF8ToUTF16(test_cases[i].additional_names[2])); + additional_profile.SetRawInfo(NAME_FIRST, + UTF8ToUTF16(test_case.additional_names[0])); + additional_profile.SetRawInfo(NAME_MIDDLE, + UTF8ToUTF16(test_case.additional_names[1])); + additional_profile.SetRawInfo(NAME_LAST, + UTF8ToUTF16(test_case.additional_names[2])); // Verify the test expectations. - EXPECT_EQ(test_cases[i].expected_result, + EXPECT_EQ(test_case.expected_result, starting_profile.ParsedNamesAreEqual(additional_profile)); } -} -TEST(NameInfoTest, OverwriteName) { - struct TestCase { + INSTANTIATE_TEST_CASE_P( + ContactInfoTest, + ParsedNamesAreEqualTest, + testing::Values( + // Identical name comparison. + ParsedNamesAreEqualTestCase{{"Marion", "Mitchell", "Morrison"}, + {"Marion", "Mitchell", "Morrison"}, + true}, + + // Case-sensitive comparisons. + ParsedNamesAreEqualTestCase{{"Marion", "Mitchell", "Morrison"}, + {"Marion", "Mitchell", "MORRISON"}, + false}, + ParsedNamesAreEqualTestCase{{"Marion", "Mitchell", "Morrison"}, + {"MARION", "Mitchell", "MORRISON"}, + false}, + ParsedNamesAreEqualTestCase{{"Marion", "Mitchell", "Morrison"}, + {"MARION", "MITCHELL", "MORRISON"}, + false}, + ParsedNamesAreEqualTestCase{{"Marion", "", "Mitchell Morrison"}, + {"MARION", "", "MITCHELL MORRISON"}, + false}, + ParsedNamesAreEqualTestCase{{"Marion Mitchell", "", "Morrison"}, + {"MARION MITCHELL", "", "MORRISON"}, + false}, + + // Identical full names but different canonical forms. + ParsedNamesAreEqualTestCase{{"Marion", "Mitchell", "Morrison"}, + {"Marion", "", "Mitchell Morrison"}, + false}, + ParsedNamesAreEqualTestCase{{"Marion", "Mitchell", "Morrison"}, + {"Marion Mitchell", "", "MORRISON"}, + false}, + + // Different names. + ParsedNamesAreEqualTestCase{{"Marion", "Mitchell", "Morrison"}, + {"Marion", "M.", "Morrison"}, + false}, + ParsedNamesAreEqualTestCase{{"Marion", "Mitchell", "Morrison"}, + {"MARION", "M.", "MORRISON"}, + false}, + ParsedNamesAreEqualTestCase{{"Marion", "Mitchell", "Morrison"}, + {"David", "Mitchell", "Morrison"}, + false}, + + // Non-ASCII characters. + ParsedNamesAreEqualTestCase{ + {"M\xc3\xa1rion Mitchell", "", "Morrison"}, + {"M\xc3\xa1rion Mitchell", "", "Morrison"}, + true})); + + struct OverwriteNameTestCase { std::string existing_name[4]; std::string new_name[4]; std::string expected_name[4]; }; - struct TestCase test_cases[] = { - // Missing information in the original name gets filled with the new - // name's information. - { - {"", "", "", ""}, - {"Marion", "Mitchell", "Morrison", "Marion Mitchell Morrison"}, - {"Marion", "Mitchell", "Morrison", "Marion Mitchell Morrison"}, - }, - // The new name's values overwrite the exsiting name values if they are - // different - { - {"Marion", "Mitchell", "Morrison", "Marion Mitchell Morrison"}, - {"Mario", "Mitchell", "Thompson", "Mario Mitchell Morrison"}, - {"Mario", "Mitchell", "Thompson", "Mario Mitchell Morrison"}, - }, - // An existing name values do not get replaced with empty values. - { - {"Marion", "Mitchell", "Morrison", "Marion Mitchell Morrison"}, - {"", "", "", ""}, - {"Marion", "Mitchell", "Morrison", "Marion Mitchell Morrison"}, - }, - // An existing full middle not does not get replaced by a middle name - // initial. - { - {"Marion", "Mitchell", "Morrison", "Marion Mitchell Morrison"}, - {"Marion", "M", "Morrison", "Marion Mitchell Morrison"}, - {"Marion", "Mitchell", "Morrison", "Marion Mitchell Morrison"}, - }, - // An existing middle name initial is overwritten by the new profile's - // middle name value. - { - {"Marion", "M", "Morrison", "Marion Mitchell Morrison"}, - {"Marion", "Mitchell", "Morrison", "Marion Mitchell Morrison"}, - {"Marion", "Mitchell", "Morrison", "Marion Mitchell Morrison"}, - }, - // A NameInfo with only the full name set overwritten with a NameInfo - // with only the name parts set result in a NameInfo with all the name - // parts and name full set. - { - {"", "", "", "Marion Mitchell Morrison"}, - {"Marion", "Mitchell", "Morrison", ""}, - {"Marion", "Mitchell", "Morrison", "Marion Mitchell Morrison"}, - }, - // A NameInfo with only the name parts set overwritten with a NameInfo - // with only the full name set result in a NameInfo with all the name - // parts and name full set. - { - {"Marion", "Mitchell", "Morrison", ""}, - {"", "", "", "Marion Mitchell Morrison"}, - {"Marion", "Mitchell", "Morrison", "Marion Mitchell Morrison"}, - }, - }; + class OverwriteNameTest + : public testing::TestWithParam<OverwriteNameTestCase> {}; - for (size_t i = 0; i < arraysize(test_cases); ++i) { - SCOPED_TRACE(base::StringPrintf("i: %" PRIuS, i)); - + TEST_P(OverwriteNameTest, OverwriteName) { + auto test_case = GetParam(); // Construct the starting_profile. NameInfo existing_name; existing_name.SetRawInfo(NAME_FIRST, - UTF8ToUTF16(test_cases[i].existing_name[0])); + UTF8ToUTF16(test_case.existing_name[0])); existing_name.SetRawInfo(NAME_MIDDLE, - UTF8ToUTF16(test_cases[i].existing_name[1])); + UTF8ToUTF16(test_case.existing_name[1])); existing_name.SetRawInfo(NAME_LAST, - UTF8ToUTF16(test_cases[i].existing_name[2])); + UTF8ToUTF16(test_case.existing_name[2])); existing_name.SetRawInfo(NAME_FULL, - UTF8ToUTF16(test_cases[i].existing_name[3])); + UTF8ToUTF16(test_case.existing_name[3])); // Construct the additional_profile. NameInfo new_name; - new_name.SetRawInfo(NAME_FIRST, UTF8ToUTF16(test_cases[i].new_name[0])); - new_name.SetRawInfo(NAME_MIDDLE, UTF8ToUTF16(test_cases[i].new_name[1])); - new_name.SetRawInfo(NAME_LAST, UTF8ToUTF16(test_cases[i].new_name[2])); - new_name.SetRawInfo(NAME_FULL, UTF8ToUTF16(test_cases[i].new_name[3])); + new_name.SetRawInfo(NAME_FIRST, UTF8ToUTF16(test_case.new_name[0])); + new_name.SetRawInfo(NAME_MIDDLE, UTF8ToUTF16(test_case.new_name[1])); + new_name.SetRawInfo(NAME_LAST, UTF8ToUTF16(test_case.new_name[2])); + new_name.SetRawInfo(NAME_FULL, UTF8ToUTF16(test_case.new_name[3])); existing_name.OverwriteName(new_name); // Verify the test expectations. - EXPECT_EQ(UTF8ToUTF16(test_cases[i].expected_name[0]), + EXPECT_EQ(UTF8ToUTF16(test_case.expected_name[0]), existing_name.GetRawInfo(NAME_FIRST)); - EXPECT_EQ(UTF8ToUTF16(test_cases[i].expected_name[1]), + EXPECT_EQ(UTF8ToUTF16(test_case.expected_name[1]), existing_name.GetRawInfo(NAME_MIDDLE)); - EXPECT_EQ(UTF8ToUTF16(test_cases[i].expected_name[2]), + EXPECT_EQ(UTF8ToUTF16(test_case.expected_name[2]), existing_name.GetRawInfo(NAME_LAST)); - EXPECT_EQ(UTF8ToUTF16(test_cases[i].expected_name[3]), + EXPECT_EQ(UTF8ToUTF16(test_case.expected_name[3]), existing_name.GetRawInfo(NAME_FULL)); - } } -TEST(NameInfoTest, NamePartsAreEmpty) { - struct TestCase { - std::string first; - std::string middle; - std::string last; - std::string full; - bool expected_result; +INSTANTIATE_TEST_CASE_P( + ContactInfoTest, + OverwriteNameTest, + testing::Values( + // Missing information in the original name gets filled with the new + // name's information. + OverwriteNameTestCase{ + {"", "", "", ""}, + {"Marion", "Mitchell", "Morrison", "Marion Mitchell Morrison"}, + {"Marion", "Mitchell", "Morrison", "Marion Mitchell Morrison"}, + }, + // The new name's values overwrite the exsiting name values if they are + // different + OverwriteNameTestCase{ + {"Marion", "Mitchell", "Morrison", "Marion Mitchell Morrison"}, + {"Mario", "Mitchell", "Thompson", "Mario Mitchell Morrison"}, + {"Mario", "Mitchell", "Thompson", "Mario Mitchell Morrison"}, + }, + // An existing name values do not get replaced with empty values. + OverwriteNameTestCase{ + {"Marion", "Mitchell", "Morrison", "Marion Mitchell Morrison"}, + {"", "", "", ""}, + {"Marion", "Mitchell", "Morrison", "Marion Mitchell Morrison"}, + }, + // An existing full middle not does not get replaced by a middle name + // initial. + OverwriteNameTestCase{ + {"Marion", "Mitchell", "Morrison", "Marion Mitchell Morrison"}, + {"Marion", "M", "Morrison", "Marion Mitchell Morrison"}, + {"Marion", "Mitchell", "Morrison", "Marion Mitchell Morrison"}, + }, + // An existing middle name initial is overwritten by the new profile's + // middle name value. + OverwriteNameTestCase{ + {"Marion", "M", "Morrison", "Marion Mitchell Morrison"}, + {"Marion", "Mitchell", "Morrison", "Marion Mitchell Morrison"}, + {"Marion", "Mitchell", "Morrison", "Marion Mitchell Morrison"}, + }, + // A NameInfo with only the full name set overwritten with a NameInfo + // with only the name parts set result in a NameInfo with all the name + // parts and name full set. + OverwriteNameTestCase{ + {"", "", "", "Marion Mitchell Morrison"}, + {"Marion", "Mitchell", "Morrison", ""}, + {"Marion", "Mitchell", "Morrison", "Marion Mitchell Morrison"}, + }, + // A NameInfo with only the name parts set overwritten with a NameInfo + // with only the full name set result in a NameInfo with all the name + // parts and name full set. + OverwriteNameTestCase{ + {"Marion", "Mitchell", "Morrison", ""}, + {"", "", "", "Marion Mitchell Morrison"}, + {"Marion", "Mitchell", "Morrison", "Marion Mitchell Morrison"}, + })); + +struct NamePartsAreEmptyTestCase { + std::string first; + std::string middle; + std::string last; + std::string full; + bool expected_result; }; - struct TestCase test_cases[] = { - {"", "", "", "", true}, - {"", "", "", "Marion Mitchell Morrison", true}, - {"Marion", "", "", "", false}, - {"", "Mitchell", "", "", false}, - {"", "", "Morrison", "", false}, - }; + class NamePartsAreEmptyTest + : public testing::TestWithParam<NamePartsAreEmptyTestCase> {}; - for (size_t i = 0; i < arraysize(test_cases); ++i) { - SCOPED_TRACE(base::StringPrintf("i: %" PRIuS, i)); - + TEST_P(NamePartsAreEmptyTest, NamePartsAreEmpty) { + auto test_case = GetParam(); // Construct the NameInfo. NameInfo name; - name.SetRawInfo(NAME_FIRST, UTF8ToUTF16(test_cases[i].first)); - name.SetRawInfo(NAME_MIDDLE, UTF8ToUTF16(test_cases[i].middle)); - name.SetRawInfo(NAME_LAST, UTF8ToUTF16(test_cases[i].last)); - name.SetRawInfo(NAME_FULL, UTF8ToUTF16(test_cases[i].full)); + name.SetRawInfo(NAME_FIRST, UTF8ToUTF16(test_case.first)); + name.SetRawInfo(NAME_MIDDLE, UTF8ToUTF16(test_case.middle)); + name.SetRawInfo(NAME_LAST, UTF8ToUTF16(test_case.last)); + name.SetRawInfo(NAME_FULL, UTF8ToUTF16(test_case.full)); // Verify the test expectations. - EXPECT_EQ(test_cases[i].expected_result, name.NamePartsAreEmpty()); - } + EXPECT_EQ(test_case.expected_result, name.NamePartsAreEmpty()); } +INSTANTIATE_TEST_CASE_P( + ContactInfoTest, + NamePartsAreEmptyTest, + testing::Values(NamePartsAreEmptyTestCase{"", "", "", "", true}, + NamePartsAreEmptyTestCase{"", "", "", + "Marion Mitchell Morrison", true}, + NamePartsAreEmptyTestCase{"Marion", "", "", "", false}, + NamePartsAreEmptyTestCase{"", "Mitchell", "", "", false}, + NamePartsAreEmptyTestCase{"", "", "Morrison", "", false})); + } // namespace autofill
diff --git a/components/autofill/core/browser/credit_card_field.h b/components/autofill/core/browser/credit_card_field.h index a737add0..3d462507 100644 --- a/components/autofill/core/browser/credit_card_field.h +++ b/components/autofill/core/browser/credit_card_field.h
@@ -27,7 +27,7 @@ void AddClassifications(FieldCandidatesMap* field_candidates) const override; private: - friend class CreditCardFieldTest; + friend class CreditCardFieldTestBase; // Returns true if |scanner| points to a field that looks like a month // <select>.
diff --git a/components/autofill/core/browser/credit_card_field_unittest.cc b/components/autofill/core/browser/credit_card_field_unittest.cc index 5b44a651..bb7b6b2 100644 --- a/components/autofill/core/browser/credit_card_field_unittest.cc +++ b/components/autofill/core/browser/credit_card_field_unittest.cc
@@ -19,10 +19,10 @@ namespace autofill { -class CreditCardFieldTest : public testing::Test { +class CreditCardFieldTestBase { public: - CreditCardFieldTest() {} - ~CreditCardFieldTest() override {} + CreditCardFieldTestBase() {} + ~CreditCardFieldTestBase() {} protected: std::vector<std::unique_ptr<AutofillField>> list_; @@ -59,6 +59,15 @@ } private: + DISALLOW_COPY_AND_ASSIGN(CreditCardFieldTestBase); +}; + +class CreditCardFieldTest : public CreditCardFieldTestBase, + public testing::Test { + public: + CreditCardFieldTest() {} + + private: DISALLOW_COPY_AND_ASSIGN(CreditCardFieldTest); }; @@ -292,124 +301,144 @@ field_candidates_map_[ASCIIToUTF16("year4")].BestHeuristicType()); } -TEST_F(CreditCardFieldTest, ParseExpField) { - typedef struct { - const std::string label; - const int max_length; - const ServerFieldType expected_prediction; - } TestCase; +typedef struct { + const std::string label; + const int max_length; + const ServerFieldType expected_prediction; +} ParseExpFieldTestCase; - TestCase test_cases[] = { - // General label, no maxlength. - {"Expiration Date", 0, CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR}, - // General label, maxlength 4. - {"Expiration Date", 4, CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR}, - // General label, maxlength 5. - {"Expiration Date", 5, CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR}, - // General label, maxlength 6. - {"Expiration Date", 6, CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR}, - // General label, maxlength 7. - {"Expiration Date", 7, CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR}, - // General label, large maxlength. - {"Expiration Date", 12, CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR}, +class ParseExpFieldTest : public CreditCardFieldTestBase, + public testing::TestWithParam<ParseExpFieldTestCase> { +}; - // Unsupported maxlength, general label. - {"Expiration Date", 3, UNKNOWN_TYPE}, - // Unsupported maxlength, two digit year label. - {"Expiration Date (MM/YY)", 3, UNKNOWN_TYPE}, - // Unsupported maxlength, four digit year label. - {"Expiration Date (MM/YYYY)", 3, UNKNOWN_TYPE}, +TEST_P(ParseExpFieldTest, ParseExpField) { + auto test_case = GetParam(); + // Clean up after previous test cases. + list_.clear(); + field_.reset(); + field_candidates_map_.clear(); - // Two digit year, simple label. - {"MM / YY", 0, CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR}, - // Two digit year, with slash (MM/YY). - {"Expiration Date (MM/YY)", 0, CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR}, - // Two digit year, no slash (MMYY). - {"Expiration Date (MMYY)", 4, CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR}, - // Two digit year, with slash and maxlength (MM/YY). - {"Expiration Date (MM/YY)", 5, CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR}, - // Two digit year, with slash and large maxlength (MM/YY). - {"Expiration Date (MM/YY)", 12, CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR}, + FormFieldData field; + field.form_control_type = "text"; - // Four digit year, simple label. - {"MM / YYYY", 0, CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR}, - // Four digit year, with slash (MM/YYYY). - {"Expiration Date (MM/YYYY)", 0, CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR}, - // Four digit year, no slash (MMYYYY). - {"Expiration Date (MMYYYY)", 6, CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR}, - // Four digit year, with slash and maxlength (MM/YYYY). - {"Expiration Date (MM/YYYY)", 7, CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR}, - // Four digit year, with slash and large maxlength (MM/YYYY). - {"Expiration Date (MM/YYYY)", 12, CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR}, + field.label = ASCIIToUTF16("Name on Card"); + field.name = ASCIIToUTF16("name_on_card"); + list_.push_back( + base::MakeUnique<AutofillField>(field, ASCIIToUTF16("name1"))); - // Four digit year label with restrictive maxlength (4). - {"Expiration Date (MM/YYYY)", 4, CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR}, - // Four digit year label with restrictive maxlength (5). - {"Expiration Date (MM/YYYY)", 5, CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR}, - }; + field.label = ASCIIToUTF16("Card Number"); + field.name = ASCIIToUTF16("card_number"); + list_.push_back(base::MakeUnique<AutofillField>(field, ASCIIToUTF16("num2"))); - for (const TestCase &test_case : test_cases) { - // Clean up after previous test cases. - list_.clear(); - field_.reset(); - field_candidates_map_.clear(); - - FormFieldData field; - field.form_control_type = "text"; - - field.label = ASCIIToUTF16("Name on Card"); - field.name = ASCIIToUTF16("name_on_card"); - list_.push_back( - base::MakeUnique<AutofillField>(field, ASCIIToUTF16("name1"))); - - field.label = ASCIIToUTF16("Card Number"); - field.name = ASCIIToUTF16("card_number"); - list_.push_back( - base::MakeUnique<AutofillField>(field, ASCIIToUTF16("num2"))); - - field.label = ASCIIToUTF16(test_case.label); - if (test_case.max_length != 0) { - field.max_length = test_case.max_length; - } - field.name = ASCIIToUTF16("cc_exp"); - list_.push_back( - base::MakeUnique<AutofillField>(field, ASCIIToUTF16("exp3"))); - - Parse(); - - // Assists in identifing which case has failed. - SCOPED_TRACE(test_case.expected_prediction); - SCOPED_TRACE(test_case.max_length); - SCOPED_TRACE(test_case.label); - - if (test_case.expected_prediction == UNKNOWN_TYPE) { - // Expect failure and continue to next test case. - // The expiry date is a required field for credit card forms, and thus the - // parse sets |field_| to nullptr. - EXPECT_EQ(nullptr, field_.get()); - continue; - } - - // Ensure that the form was determined as valid. - ASSERT_NE(nullptr, field_.get()); - AddClassifications(); - ASSERT_TRUE(field_candidates_map_.find(ASCIIToUTF16("name1")) != - field_candidates_map_.end()); - EXPECT_EQ(CREDIT_CARD_NAME_FULL, - field_candidates_map_[ASCIIToUTF16("name1")].BestHeuristicType()); - - ASSERT_TRUE(field_candidates_map_.find(ASCIIToUTF16("num2")) != - field_candidates_map_.end()); - EXPECT_EQ(CREDIT_CARD_NUMBER, - field_candidates_map_[ASCIIToUTF16("num2")].BestHeuristicType()); - - ASSERT_TRUE(field_candidates_map_.find(ASCIIToUTF16("exp3")) != - field_candidates_map_.end()); - EXPECT_EQ(test_case.expected_prediction, - field_candidates_map_[ASCIIToUTF16("exp3")].BestHeuristicType()); + field.label = ASCIIToUTF16(test_case.label); + if (test_case.max_length != 0) { + field.max_length = test_case.max_length; } + field.name = ASCIIToUTF16("cc_exp"); + list_.push_back(base::MakeUnique<AutofillField>(field, ASCIIToUTF16("exp3"))); + + Parse(); + + // Assists in identifing which case has failed. + SCOPED_TRACE(test_case.expected_prediction); + SCOPED_TRACE(test_case.max_length); + SCOPED_TRACE(test_case.label); + + if (test_case.expected_prediction == UNKNOWN_TYPE) { + // Expect failure and continue to next test case. + // The expiry date is a required field for credit card forms, and thus the + // parse sets |field_| to nullptr. + EXPECT_EQ(nullptr, field_.get()); + return; + } + + // Ensure that the form was determined as valid. + ASSERT_NE(nullptr, field_.get()); + AddClassifications(); + ASSERT_TRUE(field_candidates_map_.find(ASCIIToUTF16("name1")) != + field_candidates_map_.end()); + EXPECT_EQ(CREDIT_CARD_NAME_FULL, + field_candidates_map_[ASCIIToUTF16("name1")].BestHeuristicType()); + + ASSERT_TRUE(field_candidates_map_.find(ASCIIToUTF16("num2")) != + field_candidates_map_.end()); + EXPECT_EQ(CREDIT_CARD_NUMBER, + field_candidates_map_[ASCIIToUTF16("num2")].BestHeuristicType()); + + ASSERT_TRUE(field_candidates_map_.find(ASCIIToUTF16("exp3")) != + field_candidates_map_.end()); + EXPECT_EQ(test_case.expected_prediction, + field_candidates_map_[ASCIIToUTF16("exp3")].BestHeuristicType()); } +INSTANTIATE_TEST_CASE_P( + CreditCardFieldTest, + ParseExpFieldTest, + testing::Values( + // General label, no maxlength. + ParseExpFieldTestCase{"Expiration Date", 0, + CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR}, + // General label, maxlength 4. + ParseExpFieldTestCase{"Expiration Date", 4, + CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR}, + // General label, maxlength 5. + ParseExpFieldTestCase{"Expiration Date", 5, + CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR}, + // General label, maxlength 6. + ParseExpFieldTestCase{"Expiration Date", 6, + CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR}, + // General label, maxlength 7. + ParseExpFieldTestCase{"Expiration Date", 7, + CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR}, + // General label, large maxlength. + ParseExpFieldTestCase{"Expiration Date", 12, + CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR}, + + // Unsupported maxlength, general label. + ParseExpFieldTestCase{"Expiration Date", 3, UNKNOWN_TYPE}, + // Unsupported maxlength, two digit year label. + ParseExpFieldTestCase{"Expiration Date (MM/YY)", 3, UNKNOWN_TYPE}, + // Unsupported maxlength, four digit year label. + ParseExpFieldTestCase{"Expiration Date (MM/YYYY)", 3, UNKNOWN_TYPE}, + + // Two digit year, simple label. + ParseExpFieldTestCase{"MM / YY", 0, CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR}, + // Two digit year, with slash (MM/YY). + ParseExpFieldTestCase{"Expiration Date (MM/YY)", 0, + CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR}, + // Two digit year, no slash (MMYY). + ParseExpFieldTestCase{"Expiration Date (MMYY)", 4, + CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR}, + // Two digit year, with slash and maxlength (MM/YY). + ParseExpFieldTestCase{"Expiration Date (MM/YY)", 5, + CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR}, + // Two digit year, with slash and large maxlength (MM/YY). + ParseExpFieldTestCase{"Expiration Date (MM/YY)", 12, + CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR}, + + // Four digit year, simple label. + ParseExpFieldTestCase{"MM / YYYY", 0, + CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR}, + // Four digit year, with slash (MM/YYYY). + ParseExpFieldTestCase{"Expiration Date (MM/YYYY)", 0, + CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR}, + // Four digit year, no slash (MMYYYY). + ParseExpFieldTestCase{"Expiration Date (MMYYYY)", 6, + CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR}, + // Four digit year, with slash and maxlength (MM/YYYY). + ParseExpFieldTestCase{"Expiration Date (MM/YYYY)", 7, + CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR}, + // Four digit year, with slash and large maxlength (MM/YYYY). + ParseExpFieldTestCase{"Expiration Date (MM/YYYY)", 12, + CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR}, + + // Four digit year label with restrictive maxlength (4). + ParseExpFieldTestCase{"Expiration Date (MM/YYYY)", 4, + CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR}, + // Four digit year label with restrictive maxlength (5). + ParseExpFieldTestCase{"Expiration Date (MM/YYYY)", 5, + CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR})); + TEST_F(CreditCardFieldTest, ParseCreditCardHolderNameWithCCFullName) { FormFieldData field; field.form_control_type = "text";
diff --git a/components/autofill/core/browser/credit_card_unittest.cc b/components/autofill/core/browser/credit_card_unittest.cc index 993862f..4e371ec 100644 --- a/components/autofill/core/browser/credit_card_unittest.cc +++ b/components/autofill/core/browser/credit_card_unittest.cc
@@ -158,77 +158,90 @@ EXPECT_TRUE(a == b); } -TEST(CreditCardTest, SetExpirationYearFromString) { - static const struct { - std::string expiration_year; - int expected_year; - } kTestCases[] = { - // Valid values. - {"2040", 2040}, - {"45", 2045}, - {"045", 2045}, - {"9", 2009}, +struct SetExpirationYearFromStringTestCase { + std::string expiration_year; + int expected_year; +}; - // Unrecognized year values. - {"052045", 0}, - {"123", 0}, - {"y2045", 0}, - }; +class SetExpirationYearFromStringTest + : public testing::TestWithParam<SetExpirationYearFromStringTestCase> {}; - for (const auto& test_case : kTestCases) { - CreditCard card(base::GenerateGUID(), "some origin"); - card.SetExpirationYearFromString(ASCIIToUTF16(test_case.expiration_year)); +TEST_P(SetExpirationYearFromStringTest, SetExpirationYearFromString) { + auto test_case = GetParam(); + CreditCard card(base::GenerateGUID(), "some origin"); + card.SetExpirationYearFromString(ASCIIToUTF16(test_case.expiration_year)); - EXPECT_EQ(test_case.expected_year, card.expiration_year()) - << test_case.expiration_year << " " << test_case.expected_year; - } + EXPECT_EQ(test_case.expected_year, card.expiration_year()) + << test_case.expiration_year << " " << test_case.expected_year; } -TEST(CreditCardTest, SetExpirationDateFromString) { - static const struct { - std::string expiration_date; - int expected_month; - int expected_year; - } kTestCases[] = {{"10", 0, 0}, // Too small. - {"1020451", 0, 0}, // Too long. +INSTANTIATE_TEST_CASE_P(CreditCardTest, + SetExpirationYearFromStringTest, + testing::Values( + // Valid values. + SetExpirationYearFromStringTestCase{"2040", 2040}, + SetExpirationYearFromStringTestCase{"45", 2045}, + SetExpirationYearFromStringTestCase{"045", 2045}, + SetExpirationYearFromStringTestCase{"9", 2009}, - // No separators. - {"105", 0, 0}, // Too ambiguous. - {"0545", 5, 2045}, - {"52045", 0, 0}, // Too ambiguous. - {"052045", 5, 2045}, + // Unrecognized year values. + SetExpirationYearFromStringTestCase{"052045", 0}, + SetExpirationYearFromStringTestCase{"123", 0}, + SetExpirationYearFromStringTestCase{"y2045", 0})); - // "/" separator. - {"05/45", 5, 2045}, - {"5/2045", 5, 2045}, - {"05/2045", 5, 2045}, +struct SetExpirationDateFromStringTestCase { + std::string expiration_date; + int expected_month; + int expected_year; +}; - // "-" separator. - {"05-45", 5, 2045}, - {"5-2045", 5, 2045}, - {"05-2045", 5, 2045}, +class SetExpirationDateFromStringTest + : public testing::TestWithParam<SetExpirationDateFromStringTestCase> {}; - // "|" separator. - {"05|45", 5, 2045}, - {"5|2045", 5, 2045}, - {"05|2045", 5, 2045}, +TEST_P(SetExpirationDateFromStringTest, SetExpirationDateFromString) { + auto test_case = GetParam(); + CreditCard card(base::GenerateGUID(), "some origin"); + card.SetExpirationDateFromString(ASCIIToUTF16(test_case.expiration_date)); - // Invalid values. - {"13/2016", 0, 2016}, - {"16/13", 0, 2013}, - {"May-2015", 0, 0}, - {"05-/2045", 0, 0}, - {"05_2045", 0, 0}}; - - for (const auto& test_case : kTestCases) { - CreditCard card(base::GenerateGUID(), "some origin"); - card.SetExpirationDateFromString(ASCIIToUTF16(test_case.expiration_date)); - - EXPECT_EQ(test_case.expected_month, card.expiration_month()); - EXPECT_EQ(test_case.expected_year, card.expiration_year()); - } + EXPECT_EQ(test_case.expected_month, card.expiration_month()); + EXPECT_EQ(test_case.expected_year, card.expiration_year()); } +INSTANTIATE_TEST_CASE_P( + CreditCardTest, + SetExpirationDateFromStringTest, + testing::Values( + SetExpirationDateFromStringTestCase{"10", 0, 0}, // Too small. + SetExpirationDateFromStringTestCase{"1020451", 0, 0}, // Too long. + + // No separators. + SetExpirationDateFromStringTestCase{"105", 0, 0}, // Too ambiguous. + SetExpirationDateFromStringTestCase{"0545", 5, 2045}, + SetExpirationDateFromStringTestCase{"52045", 0, 0}, // Too ambiguous. + SetExpirationDateFromStringTestCase{"052045", 5, 2045}, + + // "/" separator. + SetExpirationDateFromStringTestCase{"05/45", 5, 2045}, + SetExpirationDateFromStringTestCase{"5/2045", 5, 2045}, + SetExpirationDateFromStringTestCase{"05/2045", 5, 2045}, + + // "-" separator. + SetExpirationDateFromStringTestCase{"05-45", 5, 2045}, + SetExpirationDateFromStringTestCase{"5-2045", 5, 2045}, + SetExpirationDateFromStringTestCase{"05-2045", 5, 2045}, + + // "|" separator. + SetExpirationDateFromStringTestCase{"05|45", 5, 2045}, + SetExpirationDateFromStringTestCase{"5|2045", 5, 2045}, + SetExpirationDateFromStringTestCase{"05|2045", 5, 2045}, + + // Invalid values. + SetExpirationDateFromStringTestCase{"13/2016", 0, 2016}, + SetExpirationDateFromStringTestCase{"16/13", 0, 2013}, + SetExpirationDateFromStringTestCase{"May-2015", 0, 0}, + SetExpirationDateFromStringTestCase{"05-/2045", 0, 0}, + SetExpirationDateFromStringTestCase{"05_2045", 0, 0})); + TEST(CreditCardTest, Copy) { CreditCard a(base::GenerateGUID(), "https://www.example.com"); test::SetCreditCardInfo(&a, "John Dillinger", "123456789012", "01", "2010"); @@ -238,73 +251,85 @@ EXPECT_TRUE(a == b); } -TEST(CreditCardTest, IsLocalDuplicateOfServerCard) { - struct { - CreditCard::RecordType first_card_record_type; - const char* first_card_name; - const char* first_card_number; - const char* first_card_exp_mo; - const char* first_card_exp_yr; +struct IsLocalDuplicateOfServerCardTestCase { + CreditCard::RecordType first_card_record_type; + const char* first_card_name; + const char* first_card_number; + const char* first_card_exp_mo; + const char* first_card_exp_yr; - CreditCard::RecordType second_card_record_type; - const char* second_card_name; - const char* second_card_number; - const char* second_card_exp_mo; - const char* second_card_exp_yr; - const char* second_card_type; + CreditCard::RecordType second_card_record_type; + const char* second_card_name; + const char* second_card_number; + const char* second_card_exp_mo; + const char* second_card_exp_yr; + const char* second_card_type; - bool is_local_duplicate; - } test_cases[] = { - { LOCAL_CARD, "", "", "", "", - LOCAL_CARD, "", "", "", "", nullptr, false }, - { LOCAL_CARD, "", "", "", "", - FULL_SERVER_CARD, "", "", "", "", nullptr, true}, - { FULL_SERVER_CARD, "", "", "", "", - FULL_SERVER_CARD, "", "", "", "", nullptr, false}, - { LOCAL_CARD, "John Dillinger", "423456789012", "01", "2010", - FULL_SERVER_CARD, "John Dillinger", "423456789012", "01", "2010", nullptr, - true }, - { LOCAL_CARD, "J Dillinger", "423456789012", "01", "2010", - FULL_SERVER_CARD, "John Dillinger", "423456789012", "01", "2010", nullptr, - false }, - { LOCAL_CARD, "", "423456789012", "01", "2010", - FULL_SERVER_CARD, "John Dillinger", "423456789012", "01", "2010", nullptr, - true }, - { LOCAL_CARD, "", "423456789012", "", "", - FULL_SERVER_CARD, "John Dillinger", "423456789012", "01", "2010", nullptr, - true }, - { LOCAL_CARD, "", "423456789012", "", "", - MASKED_SERVER_CARD, "John Dillinger", "9012", "01", "2010", kVisaCard, - true }, - { LOCAL_CARD, "", "423456789012", "", "", - MASKED_SERVER_CARD, "John Dillinger", "9012", "01", "2010", kMasterCard, - false }, - { LOCAL_CARD, "John Dillinger", "4234-5678-9012", "01", "2010", - FULL_SERVER_CARD, "John Dillinger", "423456789012", "01", "2010", nullptr, - true }, - }; + bool is_local_duplicate; +}; - for (const auto& test_case : test_cases) { - CreditCard a(base::GenerateGUID(), std::string()); - a.set_record_type(test_case.first_card_record_type); - test::SetCreditCardInfo( - &a, test_case.first_card_name, test_case.first_card_number, - test_case.first_card_exp_mo, test_case.first_card_exp_yr); +class IsLocalDuplicateOfServerCardTest + : public testing::TestWithParam<IsLocalDuplicateOfServerCardTestCase> {}; - CreditCard b(base::GenerateGUID(), std::string()); - b.set_record_type(test_case.second_card_record_type); - test::SetCreditCardInfo( - &b, test_case.second_card_name, test_case.second_card_number, - test_case.second_card_exp_mo, test_case.second_card_exp_yr); +TEST_P(IsLocalDuplicateOfServerCardTest, IsLocalDuplicateOfServerCard) { + auto test_case = GetParam(); + CreditCard a(base::GenerateGUID(), std::string()); + a.set_record_type(test_case.first_card_record_type); + test::SetCreditCardInfo( + &a, test_case.first_card_name, test_case.first_card_number, + test_case.first_card_exp_mo, test_case.first_card_exp_yr); - if (test_case.second_card_record_type == CreditCard::MASKED_SERVER_CARD) - b.SetTypeForMaskedCard(test_case.second_card_type); + CreditCard b(base::GenerateGUID(), std::string()); + b.set_record_type(test_case.second_card_record_type); + test::SetCreditCardInfo( + &b, test_case.second_card_name, test_case.second_card_number, + test_case.second_card_exp_mo, test_case.second_card_exp_yr); - EXPECT_EQ(test_case.is_local_duplicate, a.IsLocalDuplicateOfServerCard(b)) - << " when comparing cards " << a.Label() << " and " << b.Label(); - } + if (test_case.second_card_record_type == CreditCard::MASKED_SERVER_CARD) + b.SetTypeForMaskedCard(test_case.second_card_type); + + EXPECT_EQ(test_case.is_local_duplicate, a.IsLocalDuplicateOfServerCard(b)) + << " when comparing cards " << a.Label() << " and " << b.Label(); } +INSTANTIATE_TEST_CASE_P( + CreditCardTest, + IsLocalDuplicateOfServerCardTest, + testing::Values( + IsLocalDuplicateOfServerCardTestCase{LOCAL_CARD, "", "", "", "", + LOCAL_CARD, "", "", "", "", + nullptr, false}, + IsLocalDuplicateOfServerCardTestCase{LOCAL_CARD, "", "", "", "", + FULL_SERVER_CARD, "", "", "", "", + nullptr, true}, + IsLocalDuplicateOfServerCardTestCase{FULL_SERVER_CARD, "", "", "", "", + FULL_SERVER_CARD, "", "", "", "", + nullptr, false}, + IsLocalDuplicateOfServerCardTestCase{ + LOCAL_CARD, "John Dillinger", "423456789012", "01", "2010", + FULL_SERVER_CARD, "John Dillinger", "423456789012", "01", "2010", + nullptr, true}, + IsLocalDuplicateOfServerCardTestCase{ + LOCAL_CARD, "J Dillinger", "423456789012", "01", "2010", + FULL_SERVER_CARD, "John Dillinger", "423456789012", "01", "2010", + nullptr, false}, + IsLocalDuplicateOfServerCardTestCase{ + LOCAL_CARD, "", "423456789012", "01", "2010", FULL_SERVER_CARD, + "John Dillinger", "423456789012", "01", "2010", nullptr, true}, + IsLocalDuplicateOfServerCardTestCase{ + LOCAL_CARD, "", "423456789012", "", "", FULL_SERVER_CARD, + "John Dillinger", "423456789012", "01", "2010", nullptr, true}, + IsLocalDuplicateOfServerCardTestCase{ + LOCAL_CARD, "", "423456789012", "", "", MASKED_SERVER_CARD, + "John Dillinger", "9012", "01", "2010", kVisaCard, true}, + IsLocalDuplicateOfServerCardTestCase{ + LOCAL_CARD, "", "423456789012", "", "", MASKED_SERVER_CARD, + "John Dillinger", "9012", "01", "2010", kMasterCard, false}, + IsLocalDuplicateOfServerCardTestCase{ + LOCAL_CARD, "John Dillinger", "4234-5678-9012", "01", "2010", + FULL_SERVER_CARD, "John Dillinger", "423456789012", "01", "2010", + nullptr, true})); + TEST(CreditCardTest, HasSameNumberAs) { CreditCard a(base::GenerateGUID(), std::string()); CreditCard b(base::GenerateGUID(), std::string()); @@ -603,178 +628,223 @@ EXPECT_EQ(base::string16(), card.GetRawInfo(CREDIT_CARD_VERIFICATION_CODE)); } +struct GetCreditCardTypeTestCase { + std::string card_number; + std::string type; + bool is_valid; +}; -TEST(CreditCardTest, GetCreditCardType) { - struct { - std::string card_number; - std::string type; - bool is_valid; - } test_cases[] = { - // The relevant sample numbers from - // http://www.paypalobjects.com/en_US/vhelp/paypalmanager_help/credit_card_numbers.htm - { "378282246310005", kAmericanExpressCard, true }, - { "371449635398431", kAmericanExpressCard, true }, - { "378734493671000", kAmericanExpressCard, true }, - { "30569309025904", kDinersCard, true }, - { "38520000023237", kDinersCard, true }, - { "6011111111111117", kDiscoverCard, true }, - { "6011000990139424", kDiscoverCard, true }, - { "3530111333300000", kJCBCard, true }, - { "3566002020360505", kJCBCard, true }, - { "5555555555554444", kMasterCard, true }, - { "5105105105105100", kMasterCard, true }, - { "4111111111111111", kVisaCard, true }, - { "4012888888881881", kVisaCard, true }, - { "4222222222222", kVisaCard, true }, +// We are doing batches here because INSTANTIATE_TEST_CASE_P has a +// 50 upper limit. +class GetCreditCardTypeTestBatch1 + : public testing::TestWithParam<GetCreditCardTypeTestCase> {}; - // The relevant sample numbers from - // https://www.auricsystems.com/sample-credit-card-numbers/ - { "343434343434343", kAmericanExpressCard, true }, - { "371144371144376", kAmericanExpressCard, true }, - { "341134113411347", kAmericanExpressCard, true }, - { "36438936438936", kDinersCard, true }, - { "36110361103612", kDinersCard, true }, - { "36111111111111", kDinersCard, true }, - { "6011016011016011", kDiscoverCard, true }, - { "6011000990139424", kDiscoverCard, true }, - { "6011000000000004", kDiscoverCard, true }, - { "6011000995500000", kDiscoverCard, true }, - { "6500000000000002", kDiscoverCard, true }, - { "3566002020360505", kJCBCard, true }, - { "3528000000000007", kJCBCard, true }, - { "5500005555555559", kMasterCard, true }, - { "5555555555555557", kMasterCard, true }, - { "5454545454545454", kMasterCard, true }, - { "5555515555555551", kMasterCard, true }, - { "5405222222222226", kMasterCard, true }, - { "5478050000000007", kMasterCard, true }, - { "5111005111051128", kMasterCard, true }, - { "5112345112345114", kMasterCard, true }, - { "5115915115915118", kMasterCard, true }, - { "6247130048162403", kUnionPay, true }, - { "6247130048162403", kUnionPay, true }, - { "622384452162063648", kUnionPay, true }, - { "2204883716636153", kMirCard, true }, - { "2200111234567898", kMirCard, true }, - { "2200481349288130", kMirCard, true }, - - // Empty string - { std::string(), kGenericCard, false }, - - // Non-numeric - { "garbage", kGenericCard, false }, - { "4garbage", kVisaCard, false }, - - // Fails Luhn check. - { "4111111111111112", kVisaCard, false }, - { "6247130048162413", kUnionPay, false }, - { "2204883716636154", kMirCard, false }, - - // Invalid length. - { "3434343434343434", kAmericanExpressCard, false }, - { "411111111111116", kVisaCard, false }, - { "220011123456783", kMirCard, false }, - - // Issuer Identification Numbers (IINs) that Chrome recognizes. - { "4", kVisaCard, false }, - { "22", kMirCard, false }, - { "34", kAmericanExpressCard, false }, - { "37", kAmericanExpressCard, false }, - { "300", kDinersCard, false }, - { "301", kDinersCard, false }, - { "302", kDinersCard, false }, - { "303", kDinersCard, false }, - { "304", kDinersCard, false }, - { "305", kDinersCard, false }, - { "3095", kDinersCard, false }, - { "36", kDinersCard, false }, - { "38", kDinersCard, false }, - { "39", kDinersCard, false }, - { "6011", kDiscoverCard, false }, - { "644", kDiscoverCard, false }, - { "645", kDiscoverCard, false }, - { "646", kDiscoverCard, false }, - { "647", kDiscoverCard, false }, - { "648", kDiscoverCard, false }, - { "649", kDiscoverCard, false }, - { "65", kDiscoverCard, false }, - { "3528", kJCBCard, false }, - { "3531", kJCBCard, false }, - { "3589", kJCBCard, false }, - { "51", kMasterCard, false }, - { "52", kMasterCard, false }, - { "53", kMasterCard, false }, - { "54", kMasterCard, false }, - { "55", kMasterCard, false }, - { "62", kUnionPay, false }, - - // Not enough data to determine an IIN uniquely. - { "2", kGenericCard, false }, - { "3", kGenericCard, false }, - { "30", kGenericCard, false }, - { "309", kGenericCard, false }, - { "35", kGenericCard, false }, - { "5", kGenericCard, false }, - { "6", kGenericCard, false }, - { "60", kGenericCard, false }, - { "601", kGenericCard, false }, - { "64", kGenericCard, false }, - - // Unknown IINs. - { "0", kGenericCard, false }, - { "1", kGenericCard, false }, - { "306", kGenericCard, false }, - { "307", kGenericCard, false }, - { "308", kGenericCard, false }, - { "3091", kGenericCard, false }, - { "3094", kGenericCard, false }, - { "3096", kGenericCard, false }, - { "31", kGenericCard, false }, - { "32", kGenericCard, false }, - { "33", kGenericCard, false }, - { "351", kGenericCard, false }, - { "3527", kGenericCard, false }, - { "359", kGenericCard, false }, - { "50", kGenericCard, false }, - { "56", kGenericCard, false }, - { "57", kGenericCard, false }, - { "58", kGenericCard, false }, - { "59", kGenericCard, false }, - { "600", kGenericCard, false }, - { "602", kGenericCard, false }, - { "603", kGenericCard, false }, - { "604", kGenericCard, false }, - { "605", kGenericCard, false }, - { "606", kGenericCard, false }, - { "607", kGenericCard, false }, - { "608", kGenericCard, false }, - { "609", kGenericCard, false }, - { "61", kGenericCard, false }, - { "63", kGenericCard, false }, - { "640", kGenericCard, false }, - { "641", kGenericCard, false }, - { "642", kGenericCard, false }, - { "643", kGenericCard, false }, - { "66", kGenericCard, false }, - { "67", kGenericCard, false }, - { "68", kGenericCard, false }, - { "69", kGenericCard, false }, - { "7", kGenericCard, false }, - { "8", kGenericCard, false }, - { "9", kGenericCard, false }, - - // Oddball case: Unknown issuer, but valid Luhn check and plausible length. - { "7000700070007000", kGenericCard, true }, - }; - - for (const auto& test_case : test_cases) { - base::string16 card_number = ASCIIToUTF16(test_case.card_number); - SCOPED_TRACE(card_number); - EXPECT_EQ(test_case.type, CreditCard::GetCreditCardType(card_number)); - EXPECT_EQ(test_case.is_valid, IsValidCreditCardNumber(card_number)); - } +TEST_P(GetCreditCardTypeTestBatch1, GetCreditCardType) { + auto test_case = GetParam(); + base::string16 card_number = ASCIIToUTF16(test_case.card_number); + SCOPED_TRACE(card_number); + EXPECT_EQ(test_case.type, CreditCard::GetCreditCardType(card_number)); + EXPECT_EQ(test_case.is_valid, IsValidCreditCardNumber(card_number)); } +INSTANTIATE_TEST_CASE_P( + CreditCardTest, + GetCreditCardTypeTestBatch1, + testing::Values( + // The relevant sample numbers from + // http://www.paypalobjects.com/en_US/vhelp/paypalmanager_help/credit_card_numbers.htm + GetCreditCardTypeTestCase{"378282246310005", kAmericanExpressCard, + true}, + GetCreditCardTypeTestCase{"371449635398431", kAmericanExpressCard, + true}, + GetCreditCardTypeTestCase{"378734493671000", kAmericanExpressCard, + true}, + GetCreditCardTypeTestCase{"30569309025904", kDinersCard, true}, + GetCreditCardTypeTestCase{"38520000023237", kDinersCard, true}, + GetCreditCardTypeTestCase{"6011111111111117", kDiscoverCard, true}, + GetCreditCardTypeTestCase{"6011000990139424", kDiscoverCard, true}, + GetCreditCardTypeTestCase{"3530111333300000", kJCBCard, true}, + GetCreditCardTypeTestCase{"3566002020360505", kJCBCard, true}, + GetCreditCardTypeTestCase{"5555555555554444", kMasterCard, true}, + GetCreditCardTypeTestCase{"5105105105105100", kMasterCard, true}, + GetCreditCardTypeTestCase{"4111111111111111", kVisaCard, true}, + GetCreditCardTypeTestCase{"4012888888881881", kVisaCard, true}, + GetCreditCardTypeTestCase{"4222222222222", kVisaCard, true}, + + // The relevant sample numbers from + // https://www.auricsystems.com/sample-credit-card-numbers/ + GetCreditCardTypeTestCase{"343434343434343", kAmericanExpressCard, + true}, + GetCreditCardTypeTestCase{"371144371144376", kAmericanExpressCard, + true}, + GetCreditCardTypeTestCase{"341134113411347", kAmericanExpressCard, + true}, + GetCreditCardTypeTestCase{"36438936438936", kDinersCard, true}, + GetCreditCardTypeTestCase{"36110361103612", kDinersCard, true}, + GetCreditCardTypeTestCase{"36111111111111", kDinersCard, true}, + GetCreditCardTypeTestCase{"6011016011016011", kDiscoverCard, true}, + GetCreditCardTypeTestCase{"6011000990139424", kDiscoverCard, true}, + GetCreditCardTypeTestCase{"6011000000000004", kDiscoverCard, true}, + GetCreditCardTypeTestCase{"6011000995500000", kDiscoverCard, true}, + GetCreditCardTypeTestCase{"6500000000000002", kDiscoverCard, true}, + GetCreditCardTypeTestCase{"3566002020360505", kJCBCard, true}, + GetCreditCardTypeTestCase{"3528000000000007", kJCBCard, true}, + GetCreditCardTypeTestCase{"5500005555555559", kMasterCard, true}, + GetCreditCardTypeTestCase{"5555555555555557", kMasterCard, true}, + GetCreditCardTypeTestCase{"5454545454545454", kMasterCard, true}, + GetCreditCardTypeTestCase{"5555515555555551", kMasterCard, true}, + GetCreditCardTypeTestCase{"5405222222222226", kMasterCard, true}, + GetCreditCardTypeTestCase{"5478050000000007", kMasterCard, true}, + GetCreditCardTypeTestCase{"5111005111051128", kMasterCard, true}, + GetCreditCardTypeTestCase{"5112345112345114", kMasterCard, true}, + GetCreditCardTypeTestCase{"5115915115915118", kMasterCard, true}, + GetCreditCardTypeTestCase{"6247130048162403", kUnionPay, true}, + GetCreditCardTypeTestCase{"6247130048162403", kUnionPay, true}, + GetCreditCardTypeTestCase{"622384452162063648", kUnionPay, true}, + GetCreditCardTypeTestCase{"2204883716636153", kMirCard, true}, + GetCreditCardTypeTestCase{"2200111234567898", kMirCard, true}, + GetCreditCardTypeTestCase{"2200481349288130", kMirCard, true}, + + // Empty string + GetCreditCardTypeTestCase{std::string(), kGenericCard, false}, + + // Non-numeric + GetCreditCardTypeTestCase{"garbage", kGenericCard, false}, + GetCreditCardTypeTestCase{"4garbage", kVisaCard, false}, + + // Fails Luhn check. + GetCreditCardTypeTestCase{"4111111111111112", kVisaCard, false}, + GetCreditCardTypeTestCase{"6247130048162413", kUnionPay, false}, + GetCreditCardTypeTestCase{"2204883716636154", kMirCard, false})); + +class GetCreditCardTypeTestBatch2 + : public testing::TestWithParam<GetCreditCardTypeTestCase> {}; + +TEST_P(GetCreditCardTypeTestBatch2, GetCreditCardType) { + auto test_case = GetParam(); + base::string16 card_number = ASCIIToUTF16(test_case.card_number); + SCOPED_TRACE(card_number); + EXPECT_EQ(test_case.type, CreditCard::GetCreditCardType(card_number)); + EXPECT_EQ(test_case.is_valid, IsValidCreditCardNumber(card_number)); +} + +INSTANTIATE_TEST_CASE_P( + CreditCardTest, + GetCreditCardTypeTestBatch2, + testing::Values( + // Invalid length. + GetCreditCardTypeTestCase{"3434343434343434", kAmericanExpressCard, + false}, + GetCreditCardTypeTestCase{"411111111111116", kVisaCard, false}, + GetCreditCardTypeTestCase{"220011123456783", kMirCard, false}, + + // Issuer Identification Numbers (IINs) that Chrome recognizes. + GetCreditCardTypeTestCase{"4", kVisaCard, false}, + GetCreditCardTypeTestCase{"22", kMirCard, false}, + GetCreditCardTypeTestCase{"34", kAmericanExpressCard, false}, + GetCreditCardTypeTestCase{"37", kAmericanExpressCard, false}, + GetCreditCardTypeTestCase{"300", kDinersCard, false}, + GetCreditCardTypeTestCase{"301", kDinersCard, false}, + GetCreditCardTypeTestCase{"302", kDinersCard, false}, + GetCreditCardTypeTestCase{"303", kDinersCard, false}, + GetCreditCardTypeTestCase{"304", kDinersCard, false}, + GetCreditCardTypeTestCase{"305", kDinersCard, false}, + GetCreditCardTypeTestCase{"3095", kDinersCard, false}, + GetCreditCardTypeTestCase{"36", kDinersCard, false}, + GetCreditCardTypeTestCase{"38", kDinersCard, false}, + GetCreditCardTypeTestCase{"39", kDinersCard, false}, + GetCreditCardTypeTestCase{"6011", kDiscoverCard, false}, + GetCreditCardTypeTestCase{"644", kDiscoverCard, false}, + GetCreditCardTypeTestCase{"645", kDiscoverCard, false}, + GetCreditCardTypeTestCase{"646", kDiscoverCard, false}, + GetCreditCardTypeTestCase{"647", kDiscoverCard, false}, + GetCreditCardTypeTestCase{"648", kDiscoverCard, false}, + GetCreditCardTypeTestCase{"649", kDiscoverCard, false}, + GetCreditCardTypeTestCase{"65", kDiscoverCard, false}, + GetCreditCardTypeTestCase{"3528", kJCBCard, false}, + GetCreditCardTypeTestCase{"3531", kJCBCard, false}, + GetCreditCardTypeTestCase{"3589", kJCBCard, false}, + GetCreditCardTypeTestCase{"51", kMasterCard, false}, + GetCreditCardTypeTestCase{"52", kMasterCard, false}, + GetCreditCardTypeTestCase{"53", kMasterCard, false}, + GetCreditCardTypeTestCase{"54", kMasterCard, false}, + GetCreditCardTypeTestCase{"55", kMasterCard, false}, + GetCreditCardTypeTestCase{"62", kUnionPay, false}, + + // Not enough data to determine an IIN uniquely. + GetCreditCardTypeTestCase{"2", kGenericCard, false}, + GetCreditCardTypeTestCase{"3", kGenericCard, false}, + GetCreditCardTypeTestCase{"30", kGenericCard, false}, + GetCreditCardTypeTestCase{"309", kGenericCard, false}, + GetCreditCardTypeTestCase{"35", kGenericCard, false}, + GetCreditCardTypeTestCase{"5", kGenericCard, false}, + GetCreditCardTypeTestCase{"6", kGenericCard, false}, + GetCreditCardTypeTestCase{"60", kGenericCard, false}, + GetCreditCardTypeTestCase{"601", kGenericCard, false}, + GetCreditCardTypeTestCase{"64", kGenericCard, false})); + +class GetCreditCardTypeTestBatch3 + : public testing::TestWithParam<GetCreditCardTypeTestCase> {}; + +TEST_P(GetCreditCardTypeTestBatch3, GetCreditCardType) { + auto test_case = GetParam(); + base::string16 card_number = ASCIIToUTF16(test_case.card_number); + SCOPED_TRACE(card_number); + EXPECT_EQ(test_case.type, CreditCard::GetCreditCardType(card_number)); + EXPECT_EQ(test_case.is_valid, IsValidCreditCardNumber(card_number)); +} + +INSTANTIATE_TEST_CASE_P( + CreditCardTest, + GetCreditCardTypeTestBatch3, + testing::Values( + // Unknown IINs. + GetCreditCardTypeTestCase{"0", kGenericCard, false}, + GetCreditCardTypeTestCase{"1", kGenericCard, false}, + GetCreditCardTypeTestCase{"306", kGenericCard, false}, + GetCreditCardTypeTestCase{"307", kGenericCard, false}, + GetCreditCardTypeTestCase{"308", kGenericCard, false}, + GetCreditCardTypeTestCase{"3091", kGenericCard, false}, + GetCreditCardTypeTestCase{"3094", kGenericCard, false}, + GetCreditCardTypeTestCase{"3096", kGenericCard, false}, + GetCreditCardTypeTestCase{"31", kGenericCard, false}, + GetCreditCardTypeTestCase{"32", kGenericCard, false}, + GetCreditCardTypeTestCase{"33", kGenericCard, false}, + GetCreditCardTypeTestCase{"351", kGenericCard, false}, + GetCreditCardTypeTestCase{"3527", kGenericCard, false}, + GetCreditCardTypeTestCase{"359", kGenericCard, false}, + GetCreditCardTypeTestCase{"50", kGenericCard, false}, + GetCreditCardTypeTestCase{"56", kGenericCard, false}, + GetCreditCardTypeTestCase{"57", kGenericCard, false}, + GetCreditCardTypeTestCase{"58", kGenericCard, false}, + GetCreditCardTypeTestCase{"59", kGenericCard, false}, + GetCreditCardTypeTestCase{"600", kGenericCard, false}, + GetCreditCardTypeTestCase{"602", kGenericCard, false}, + GetCreditCardTypeTestCase{"603", kGenericCard, false}, + GetCreditCardTypeTestCase{"604", kGenericCard, false}, + GetCreditCardTypeTestCase{"605", kGenericCard, false}, + GetCreditCardTypeTestCase{"606", kGenericCard, false}, + GetCreditCardTypeTestCase{"607", kGenericCard, false}, + GetCreditCardTypeTestCase{"608", kGenericCard, false}, + GetCreditCardTypeTestCase{"609", kGenericCard, false}, + GetCreditCardTypeTestCase{"61", kGenericCard, false}, + GetCreditCardTypeTestCase{"63", kGenericCard, false}, + GetCreditCardTypeTestCase{"640", kGenericCard, false}, + GetCreditCardTypeTestCase{"641", kGenericCard, false}, + GetCreditCardTypeTestCase{"642", kGenericCard, false}, + GetCreditCardTypeTestCase{"643", kGenericCard, false}, + GetCreditCardTypeTestCase{"66", kGenericCard, false}, + GetCreditCardTypeTestCase{"67", kGenericCard, false}, + GetCreditCardTypeTestCase{"68", kGenericCard, false}, + GetCreditCardTypeTestCase{"69", kGenericCard, false}, + GetCreditCardTypeTestCase{"7", kGenericCard, false}, + GetCreditCardTypeTestCase{"8", kGenericCard, false}, + GetCreditCardTypeTestCase{"9", kGenericCard, false}, + + // Oddball case: Unknown issuer, but valid Luhn check and plausible + // length. + GetCreditCardTypeTestCase{"7000700070007000", kGenericCard, true})); + TEST(CreditCardTest, LastFourDigits) { CreditCard card(base::GenerateGUID(), "https://www.example.com/"); ASSERT_EQ(base::string16(), card.LastFourDigits()); @@ -791,104 +861,149 @@ } // Verifies that a credit card should be updated. -TEST(CreditCardTest, ShouldUpdateExpiration) { - base::Time now = base::Time::Now(); +struct ShouldUpdateExpirationTestCase { + bool should_update_expiration; + int month; + int year; + CreditCard::RecordType record_type; + CreditCard::ServerStatus server_status; +}; - base::Time::Exploded last_year; - (now - base::TimeDelta::FromDays(365)).LocalExplode(&last_year); +class ShouldUpdateExpirationTest + : public testing::TestWithParam<ShouldUpdateExpirationTestCase> {}; - base::Time::Exploded last_month; - (now - base::TimeDelta::FromDays(31)).LocalExplode(&last_month); - - base::Time::Exploded current; - now.LocalExplode(¤t); - - base::Time::Exploded next_month; - (now + base::TimeDelta::FromDays(31)).LocalExplode(&next_month); - - base::Time::Exploded next_year; - (now + base::TimeDelta::FromDays(365)).LocalExplode(&next_year); - - static const struct { - bool should_update_expiration; - int month; - int year; - CreditCard::RecordType record_type; - CreditCard::ServerStatus server_status; - } kTestCases[] = { - - // Cards that expired last year should always be updated. - {true, last_year.month, last_year.year, CreditCard::LOCAL_CARD}, - {true, last_year.month, last_year.year, CreditCard::FULL_SERVER_CARD, - CreditCard::OK}, - {true, last_year.month, last_year.year, CreditCard::MASKED_SERVER_CARD, - CreditCard::OK}, - {true, last_year.month, last_year.year, CreditCard::FULL_SERVER_CARD, - CreditCard::EXPIRED}, - {true, last_year.month, last_year.year, CreditCard::MASKED_SERVER_CARD, - CreditCard::EXPIRED}, - - // Cards that expired last month should always be updated. - {true, last_month.month, last_month.year, CreditCard::LOCAL_CARD}, - {true, last_month.month, last_month.year, CreditCard::FULL_SERVER_CARD, - CreditCard::OK}, - {true, last_month.month, last_month.year, CreditCard::MASKED_SERVER_CARD, - CreditCard::OK}, - {true, last_month.month, last_month.year, CreditCard::FULL_SERVER_CARD, - CreditCard::EXPIRED}, - {true, last_month.month, last_month.year, CreditCard::MASKED_SERVER_CARD, - CreditCard::EXPIRED}, - - // Cards that expire this month should be updated only if the server - // status is EXPIRED. - {false, current.month, current.year, CreditCard::LOCAL_CARD}, - {false, current.month, current.year, CreditCard::FULL_SERVER_CARD, - CreditCard::OK}, - {false, current.month, current.year, CreditCard::MASKED_SERVER_CARD, - CreditCard::OK}, - {true, current.month, current.year, CreditCard::FULL_SERVER_CARD, - CreditCard::EXPIRED}, - {true, current.month, current.year, CreditCard::MASKED_SERVER_CARD, - CreditCard::EXPIRED}, - - // Cards that expire next month should be updated only if the server - // status is EXPIRED. - {false, next_month.month, next_month.year, CreditCard::LOCAL_CARD}, - {false, next_month.month, next_month.year, CreditCard::MASKED_SERVER_CARD, - CreditCard::OK}, - {false, next_month.month, next_month.year, CreditCard::FULL_SERVER_CARD, - CreditCard::OK}, - {true, next_month.month, next_month.year, CreditCard::MASKED_SERVER_CARD, - CreditCard::EXPIRED}, - {true, next_month.month, next_month.year, CreditCard::FULL_SERVER_CARD, - CreditCard::EXPIRED}, - - // Cards that expire next year should be updated only if the server status - // is EXPIRED. - {false, next_year.month, next_year.year, CreditCard::LOCAL_CARD}, - {false, next_year.month, next_year.year, CreditCard::MASKED_SERVER_CARD, - CreditCard::OK}, - {false, next_year.month, next_year.year, CreditCard::FULL_SERVER_CARD, - CreditCard::OK}, - {true, next_year.month, next_year.year, CreditCard::MASKED_SERVER_CARD, - CreditCard::EXPIRED}, - {true, next_year.month, next_year.year, CreditCard::FULL_SERVER_CARD, - CreditCard::EXPIRED}, - }; - - for (const auto& test_case : kTestCases) { - CreditCard card; - card.SetExpirationMonth(test_case.month); - card.SetExpirationYear(test_case.year); - card.set_record_type(test_case.record_type); - if (card.record_type() != CreditCard::LOCAL_CARD) - card.SetServerStatus(test_case.server_status); - - EXPECT_EQ(test_case.should_update_expiration, - card.ShouldUpdateExpiration(now)); +class TestingTimes { + public: + TestingTimes() { + now_ = base::Time::Now(); + (now_ - base::TimeDelta::FromDays(365)).LocalExplode(&last_year_); + (now_ - base::TimeDelta::FromDays(31)).LocalExplode(&last_month_); + now_.LocalExplode(¤t_); + (now_ + base::TimeDelta::FromDays(31)).LocalExplode(&next_month_); + (now_ + base::TimeDelta::FromDays(365)).LocalExplode(&next_year_); } + + base::Time now_; + base::Time::Exploded last_year_; + base::Time::Exploded last_month_; + base::Time::Exploded current_; + base::Time::Exploded next_month_; + base::Time::Exploded next_year_; +}; + +TestingTimes testingTimes; + +TEST_P(ShouldUpdateExpirationTest, ShouldUpdateExpiration) { + auto test_case = GetParam(); + CreditCard card; + card.SetExpirationMonth(test_case.month); + card.SetExpirationYear(test_case.year); + card.set_record_type(test_case.record_type); + if (card.record_type() != CreditCard::LOCAL_CARD) + card.SetServerStatus(test_case.server_status); + + EXPECT_EQ(test_case.should_update_expiration, + card.ShouldUpdateExpiration(testingTimes.now_)); } +INSTANTIATE_TEST_CASE_P( + CreditCardTest, + ShouldUpdateExpirationTest, + testing::Values( + // Cards that expired last year should always be updated. + ShouldUpdateExpirationTestCase{true, testingTimes.last_year_.month, + testingTimes.last_year_.year, + CreditCard::LOCAL_CARD}, + ShouldUpdateExpirationTestCase{ + true, testingTimes.last_year_.month, testingTimes.last_year_.year, + CreditCard::FULL_SERVER_CARD, CreditCard::OK}, + ShouldUpdateExpirationTestCase{ + true, testingTimes.last_year_.month, testingTimes.last_year_.year, + CreditCard::MASKED_SERVER_CARD, CreditCard::OK}, + ShouldUpdateExpirationTestCase{ + true, testingTimes.last_year_.month, testingTimes.last_year_.year, + CreditCard::FULL_SERVER_CARD, CreditCard::EXPIRED}, + ShouldUpdateExpirationTestCase{ + true, testingTimes.last_year_.month, testingTimes.last_year_.year, + CreditCard::MASKED_SERVER_CARD, CreditCard::EXPIRED}, + + // Cards that expired last month should always be updated. + ShouldUpdateExpirationTestCase{true, testingTimes.last_month_.month, + testingTimes.last_month_.year, + CreditCard::LOCAL_CARD}, + ShouldUpdateExpirationTestCase{ + true, testingTimes.last_month_.month, testingTimes.last_month_.year, + CreditCard::FULL_SERVER_CARD, CreditCard::OK}, + ShouldUpdateExpirationTestCase{ + true, testingTimes.last_month_.month, testingTimes.last_month_.year, + CreditCard::MASKED_SERVER_CARD, CreditCard::OK}, + ShouldUpdateExpirationTestCase{ + true, testingTimes.last_month_.month, testingTimes.last_month_.year, + CreditCard::FULL_SERVER_CARD, CreditCard::EXPIRED}, + ShouldUpdateExpirationTestCase{ + true, testingTimes.last_month_.month, testingTimes.last_month_.year, + CreditCard::MASKED_SERVER_CARD, CreditCard::EXPIRED}, + + // Cards that expire this month should be updated only if the server + // status is EXPIRED. + ShouldUpdateExpirationTestCase{false, testingTimes.current_.month, + testingTimes.current_.year, + CreditCard::LOCAL_CARD}, + ShouldUpdateExpirationTestCase{ + false, testingTimes.current_.month, testingTimes.current_.year, + CreditCard::FULL_SERVER_CARD, CreditCard::OK}, + ShouldUpdateExpirationTestCase{ + false, testingTimes.current_.month, testingTimes.current_.year, + CreditCard::MASKED_SERVER_CARD, CreditCard::OK}, + ShouldUpdateExpirationTestCase{ + true, testingTimes.current_.month, testingTimes.current_.year, + CreditCard::FULL_SERVER_CARD, CreditCard::EXPIRED}, + ShouldUpdateExpirationTestCase{ + true, testingTimes.current_.month, testingTimes.current_.year, + CreditCard::MASKED_SERVER_CARD, CreditCard::EXPIRED}, + + // Cards that expire next month should be updated only if the server + // status is EXPIRED. + ShouldUpdateExpirationTestCase{false, testingTimes.next_month_.month, + testingTimes.next_month_.year, + CreditCard::LOCAL_CARD}, + ShouldUpdateExpirationTestCase{false, testingTimes.next_month_.month, + testingTimes.next_month_.year, + CreditCard::MASKED_SERVER_CARD, + CreditCard::OK}, + ShouldUpdateExpirationTestCase{false, testingTimes.next_month_.month, + testingTimes.next_month_.year, + CreditCard::FULL_SERVER_CARD, + CreditCard::OK}, + ShouldUpdateExpirationTestCase{ + true, testingTimes.next_month_.month, testingTimes.next_month_.year, + CreditCard::MASKED_SERVER_CARD, CreditCard::EXPIRED}, + ShouldUpdateExpirationTestCase{ + true, testingTimes.next_month_.month, testingTimes.next_month_.year, + CreditCard::FULL_SERVER_CARD, CreditCard::EXPIRED}, + + // Cards that expire next year should be updated only if the server + // status is EXPIRED. + ShouldUpdateExpirationTestCase{false, testingTimes.next_year_.month, + testingTimes.next_year_.year, + CreditCard::LOCAL_CARD}, + ShouldUpdateExpirationTestCase{ + false, testingTimes.next_year_.month, testingTimes.next_year_.year, + CreditCard::MASKED_SERVER_CARD, CreditCard::OK}, + ShouldUpdateExpirationTestCase{ + false, testingTimes.next_year_.month, testingTimes.next_year_.year, + CreditCard::FULL_SERVER_CARD, CreditCard::OK}, + ShouldUpdateExpirationTestCase{ + true, testingTimes.next_year_.month, testingTimes.next_year_.year, + CreditCard::MASKED_SERVER_CARD, CreditCard::EXPIRED}, + ShouldUpdateExpirationTestCase{ + true, testingTimes.next_year_.month, testingTimes.next_year_.year, + CreditCard::FULL_SERVER_CARD, CreditCard::EXPIRED})); + +// TODO(wuandy): rewriting below test with INSTANTIATE_TEST_CASE_P seems to +// trigger a complaint on windows compilers. Removing it and revert to +// original test for now. + // Test that credit card last used date suggestion can be generated correctly // in different variations. TEST(CreditCardTest, GetLastUsedDateForDisplay) {
diff --git a/components/autofill/core/browser/personal_data_manager.h b/components/autofill/core/browser/personal_data_manager.h index a7f9808e..a889157 100644 --- a/components/autofill/core/browser/personal_data_manager.h +++ b/components/autofill/core/browser/personal_data_manager.h
@@ -341,6 +341,8 @@ friend class autofill::AutofillTest; friend class autofill::PersonalDataManagerFactory; friend class PersonalDataManagerTest; + friend class PersonalDataManagerTestBase; + friend class SaveImportedProfileTest; friend class ProfileSyncServiceAutofillTest; friend class ::RemoveAutofillTester; friend std::default_delete<PersonalDataManager>;
diff --git a/components/autofill/core/browser/personal_data_manager_unittest.cc b/components/autofill/core/browser/personal_data_manager_unittest.cc index 6bb7a52..67f7aa5 100644 --- a/components/autofill/core/browser/personal_data_manager_unittest.cc +++ b/components/autofill/core/browser/personal_data_manager_unittest.cc
@@ -119,60 +119,9 @@ } // anonymous namespace -class PersonalDataManagerTest : public testing::Test { +class PersonalDataManagerTestBase { protected: - PersonalDataManagerTest() : autofill_table_(nullptr) {} - - void SetUp() override { - OSCryptMocker::SetUpWithSingleton(); - prefs_ = test::PrefServiceForTesting(); - ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); - base::FilePath path = temp_dir_.GetPath().AppendASCII("TestWebDB"); - web_database_ = - new WebDatabaseService(path, base::ThreadTaskRunnerHandle::Get(), - base::ThreadTaskRunnerHandle::Get()); - - // Setup account tracker. - signin_client_.reset(new TestSigninClient(prefs_.get())); - account_tracker_.reset(new AccountTrackerService()); - account_tracker_->Initialize(signin_client_.get()); - signin_manager_.reset(new FakeSigninManagerBase(signin_client_.get(), - account_tracker_.get())); - signin_manager_->Initialize(prefs_.get()); - - // Hacky: hold onto a pointer but pass ownership. - autofill_table_ = new AutofillTable; - web_database_->AddTable(std::unique_ptr<WebDatabaseTable>(autofill_table_)); - web_database_->LoadDatabase(); - autofill_database_service_ = new AutofillWebDataService( - web_database_, base::ThreadTaskRunnerHandle::Get(), - base::ThreadTaskRunnerHandle::Get(), - WebDataServiceBase::ProfileErrorCallback()); - autofill_database_service_->Init(); - - test::DisableSystemServices(prefs_.get()); - ResetPersonalDataManager(USER_MODE_NORMAL); - - // Reset the deduping pref to its default value. - personal_data_->pref_service_->SetInteger( - prefs::kAutofillLastVersionDeduped, 0); - personal_data_->pref_service_->SetBoolean( - prefs::kAutofillProfileUseDatesFixed, false); - } - - void TearDown() override { - // Order of destruction is important as AutofillManager relies on - // PersonalDataManager to be around when it gets destroyed. - signin_manager_->Shutdown(); - signin_manager_.reset(); - - account_tracker_->Shutdown(); - account_tracker_.reset(); - signin_client_.reset(); - - test::DisableSystemServices(prefs_.get()); - OSCryptMocker::TearDown(); - } + PersonalDataManagerTestBase() : autofill_table_(nullptr) {} void ResetPersonalDataManager(UserMode user_mode) { bool is_incognito = (user_mode == USER_MODE_INCOGNITO); @@ -351,6 +300,60 @@ variations::testing::VariationParamsManager variation_params_; }; +class PersonalDataManagerTest : public PersonalDataManagerTestBase, + public testing::Test { + void SetUp() override { + OSCryptMocker::SetUpWithSingleton(); + prefs_ = test::PrefServiceForTesting(); + ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); + base::FilePath path = temp_dir_.GetPath().AppendASCII("TestWebDB"); + web_database_ = + new WebDatabaseService(path, base::ThreadTaskRunnerHandle::Get(), + base::ThreadTaskRunnerHandle::Get()); + + // Setup account tracker. + signin_client_.reset(new TestSigninClient(prefs_.get())); + account_tracker_.reset(new AccountTrackerService()); + account_tracker_->Initialize(signin_client_.get()); + signin_manager_.reset(new FakeSigninManagerBase(signin_client_.get(), + account_tracker_.get())); + signin_manager_->Initialize(prefs_.get()); + + // Hacky: hold onto a pointer but pass ownership. + autofill_table_ = new AutofillTable; + web_database_->AddTable(std::unique_ptr<WebDatabaseTable>(autofill_table_)); + web_database_->LoadDatabase(); + autofill_database_service_ = new AutofillWebDataService( + web_database_, base::ThreadTaskRunnerHandle::Get(), + base::ThreadTaskRunnerHandle::Get(), + WebDataServiceBase::ProfileErrorCallback()); + autofill_database_service_->Init(); + + test::DisableSystemServices(prefs_.get()); + ResetPersonalDataManager(USER_MODE_NORMAL); + + // Reset the deduping pref to its default value. + personal_data_->pref_service_->SetInteger( + prefs::kAutofillLastVersionDeduped, 0); + personal_data_->pref_service_->SetBoolean( + prefs::kAutofillProfileUseDatesFixed, false); + } + + void TearDown() override { + // Order of destruction is important as AutofillManager relies on + // PersonalDataManager to be around when it gets destroyed. + signin_manager_->Shutdown(); + signin_manager_.reset(); + + account_tracker_->Shutdown(); + account_tracker_.reset(); + signin_client_.reset(); + + test::DisableSystemServices(prefs_.get()); + OSCryptMocker::TearDown(); + } +}; + TEST_F(PersonalDataManagerTest, AddProfile) { // Add profile0 to the database. AutofillProfile profile0(test::GetFullProfile()); @@ -4170,10 +4173,9 @@ // Tests the SaveImportedProfile method with different profiles to make sure the // merge logic works correctly. -TEST_F(PersonalDataManagerTest, SaveImportedProfile) { - typedef struct { - autofill::ServerFieldType field_type; - std::string field_value; +typedef struct { + autofill::ServerFieldType field_type; + std::string field_value; } ProfileField; typedef std::vector<ProfileField> ProfileFields; @@ -4188,254 +4190,72 @@ // For tests with profile merging, makes sure that these fields' values are // the ones we expect (depending on the test). ProfileFields changed_field_values; - } TestCase; + } SaveImportedProfileTestCase; - TestCase test_cases[] = { - // Test that saving an identical profile except for the name results in - // two profiles being saved. - {ProfileFields(), {{NAME_FIRST, "Marionette"}}}, + class SaveImportedProfileTest + : public PersonalDataManagerTestBase, + public testing::TestWithParam<SaveImportedProfileTestCase> { + public: + SaveImportedProfileTest() {} + ~SaveImportedProfileTest() override {} - // Test that saving an identical profile except with the middle name - // initial instead of the full middle name results in the profiles - // getting merged and the full middle name being kept. - {ProfileFields(), - {{NAME_MIDDLE, "M"}}, - {{NAME_MIDDLE, "Mitchell"}, {NAME_FULL, "Marion Mitchell Morrison"}}}, + void SetUp() override { + OSCryptMocker::SetUpWithSingleton(); + prefs_ = test::PrefServiceForTesting(); + ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); + base::FilePath path = temp_dir_.GetPath().AppendASCII("TestWebDB"); + web_database_ = + new WebDatabaseService(path, base::ThreadTaskRunnerHandle::Get(), + base::ThreadTaskRunnerHandle::Get()); - // Test that saving an identical profile except with the full middle name - // instead of the middle name initial results in the profiles getting - // merged and the full middle name replacing the initial. - {{{NAME_MIDDLE, "M"}}, - {{NAME_MIDDLE, "Mitchell"}}, - {{NAME_MIDDLE, "Mitchell"}}}, + // Setup account tracker. + signin_client_.reset(new TestSigninClient(prefs_.get())); + account_tracker_.reset(new AccountTrackerService()); + account_tracker_->Initialize(signin_client_.get()); + signin_manager_.reset(new FakeSigninManagerBase(signin_client_.get(), + account_tracker_.get())); + signin_manager_->Initialize(prefs_.get()); - // Test that saving an identical profile except with no middle name - // results in the profiles getting merged and the full middle name being - // kept. - {ProfileFields(), {{NAME_MIDDLE, ""}}, {{NAME_MIDDLE, "Mitchell"}}}, + // Hacky: hold onto a pointer but pass ownership. + autofill_table_ = new AutofillTable; + web_database_->AddTable( + std::unique_ptr<WebDatabaseTable>(autofill_table_)); + web_database_->LoadDatabase(); + autofill_database_service_ = new AutofillWebDataService( + web_database_, base::ThreadTaskRunnerHandle::Get(), + base::ThreadTaskRunnerHandle::Get(), + WebDataServiceBase::ProfileErrorCallback()); + autofill_database_service_->Init(); - // Test that saving an identical profile except with a middle name initial - // results in the profiles getting merged and the middle name initial - // being saved. - {{{NAME_MIDDLE, ""}}, {{NAME_MIDDLE, "M"}}, {{NAME_MIDDLE, "M"}}}, + test::DisableSystemServices(prefs_.get()); + ResetPersonalDataManager(USER_MODE_NORMAL); - // Test that saving an identical profile except with a middle name - // results in the profiles getting merged and the full middle name being - // saved. - {{{NAME_MIDDLE, ""}}, - {{NAME_MIDDLE, "Mitchell"}}, - {{NAME_MIDDLE, "Mitchell"}}}, + // Reset the deduping pref to its default value. + personal_data_->pref_service_->SetInteger( + prefs::kAutofillLastVersionDeduped, 0); + personal_data_->pref_service_->SetBoolean( + prefs::kAutofillProfileUseDatesFixed, false); + } - // Test that saving a identical profile except with the full name set - // instead of the name parts results in the two profiles being merged and - // all the name parts kept and the full name being added. - { - { - {NAME_FIRST, "Marion"}, - {NAME_MIDDLE, "Mitchell"}, - {NAME_LAST, "Morrison"}, - {NAME_FULL, ""}, - }, - { - {NAME_FIRST, ""}, - {NAME_MIDDLE, ""}, - {NAME_LAST, ""}, - {NAME_FULL, "Marion Mitchell Morrison"}, - }, - { - {NAME_FIRST, "Marion"}, - {NAME_MIDDLE, "Mitchell"}, - {NAME_LAST, "Morrison"}, - {NAME_FULL, "Marion Mitchell Morrison"}, - }, - }, + void TearDown() override { + // Order of destruction is important as AutofillManager relies on + // PersonalDataManager to be around when it gets destroyed. + signin_manager_->Shutdown(); + signin_manager_.reset(); - // Test that saving a identical profile except with the name parts set - // instead of the full name results in the two profiles being merged and - // the full name being kept and all the name parts being added. - { - { - {NAME_FIRST, ""}, - {NAME_MIDDLE, ""}, - {NAME_LAST, ""}, - {NAME_FULL, "Marion Mitchell Morrison"}, - }, - { - {NAME_FIRST, "Marion"}, - {NAME_MIDDLE, "Mitchell"}, - {NAME_LAST, "Morrison"}, - {NAME_FULL, ""}, - }, - { - {NAME_FIRST, "Marion"}, - {NAME_MIDDLE, "Mitchell"}, - {NAME_LAST, "Morrison"}, - {NAME_FULL, "Marion Mitchell Morrison"}, - }, - }, + account_tracker_->Shutdown(); + account_tracker_.reset(); + signin_client_.reset(); - // Test that saving a profile that has only a full name set does not get - // merged with a profile with only the name parts set if the names are - // different. - { - { - {NAME_FIRST, "Marion"}, - {NAME_MIDDLE, "Mitchell"}, - {NAME_LAST, "Morrison"}, - {NAME_FULL, ""}, - }, - { - {NAME_FIRST, ""}, - {NAME_MIDDLE, ""}, - {NAME_LAST, ""}, - {NAME_FULL, "John Thompson Smith"}, - }, - }, - - // Test that saving a profile that has only the name parts set does not - // get merged with a profile with only the full name set if the names are - // different. - { - { - {NAME_FIRST, ""}, - {NAME_MIDDLE, ""}, - {NAME_LAST, ""}, - {NAME_FULL, "John Thompson Smith"}, - }, - { - {NAME_FIRST, "Marion"}, - {NAME_MIDDLE, "Mitchell"}, - {NAME_LAST, "Morrison"}, - {NAME_FULL, ""}, - }, - }, - - // Test that saving an identical profile except for the first address line - // results in two profiles being saved. - {ProfileFields(), {{ADDRESS_HOME_LINE1, "123 Aquarium St."}}}, - - // Test that saving an identical profile except for the second address - // line results in two profiles being saved. - {ProfileFields(), {{ADDRESS_HOME_LINE2, "unit 7"}}}, - - // Tests that saving an identical profile that has a new piece of - // information (company name) results in a merge and that the original - // empty value gets overwritten by the new information. - {{{COMPANY_NAME, ""}}, ProfileFields(), {{COMPANY_NAME, "Fox"}}}, - - // Tests that saving an identical profile except a loss of information - // results in a merge but the original value is not overwritten (no - // information loss). - {ProfileFields(), {{COMPANY_NAME, ""}}, {{COMPANY_NAME, "Fox"}}}, - - // Tests that saving an identical profile except a slightly different - // postal code results in a merge with the new value kept. - {{{ADDRESS_HOME_ZIP, "R2C 0A1"}}, - {{ADDRESS_HOME_ZIP, "R2C0A1"}}, - {{ADDRESS_HOME_ZIP, "R2C0A1"}}}, - {{{ADDRESS_HOME_ZIP, "R2C0A1"}}, - {{ADDRESS_HOME_ZIP, "R2C 0A1"}}, - {{ADDRESS_HOME_ZIP, "R2C 0A1"}}}, - {{{ADDRESS_HOME_ZIP, "r2c 0a1"}}, - {{ADDRESS_HOME_ZIP, "R2C0A1"}}, - {{ADDRESS_HOME_ZIP, "R2C0A1"}}}, - - // Tests that saving an identical profile plus a new piece of information - // on the address line 2 results in a merge and that the original empty - // value gets overwritten by the new information. - {{{ADDRESS_HOME_LINE2, ""}}, - ProfileFields(), - {{ADDRESS_HOME_LINE2, "unit 5"}}}, - - // Tests that saving an identical profile except a loss of information on - // the address line 2 results in a merge but that the original value gets - // not overwritten (no information loss). - {ProfileFields(), - {{ADDRESS_HOME_LINE2, ""}}, - {{ADDRESS_HOME_LINE2, "unit 5"}}}, - - // Tests that saving an identical except with more punctuation in the fist - // address line, while the second is empty, results in a merge and that - // the original address gets overwritten. - {{{ADDRESS_HOME_LINE2, ""}}, - {{ADDRESS_HOME_LINE2, ""}, {ADDRESS_HOME_LINE1, "123, Zoo St."}}, - {{ADDRESS_HOME_LINE1, "123, Zoo St."}}}, - - // Tests that saving an identical profile except with less punctuation in - // the fist address line, while the second is empty, results in a merge - // and that the longer address is retained. - {{{ADDRESS_HOME_LINE2, ""}, {ADDRESS_HOME_LINE1, "123, Zoo St."}}, - {{ADDRESS_HOME_LINE2, ""}}, - {{ADDRESS_HOME_LINE1, "123 Zoo St"}}}, - - // Tests that saving an identical profile except additional punctuation in - // the two address lines results in a merge and that the newer address - // is retained. - {ProfileFields(), - {{ADDRESS_HOME_LINE1, "123, Zoo St."}, {ADDRESS_HOME_LINE2, "unit. 5"}}, - {{ADDRESS_HOME_LINE1, "123, Zoo St."}, {ADDRESS_HOME_LINE2, "unit. 5"}}}, - - // Tests that saving an identical profile except less punctuation in the - // two address lines results in a merge and that the newer address is - // retained. - {{{ADDRESS_HOME_LINE1, "123, Zoo St."}, {ADDRESS_HOME_LINE2, "unit. 5"}}, - ProfileFields(), - {{ADDRESS_HOME_LINE1, "123 Zoo St"}, {ADDRESS_HOME_LINE2, "unit 5"}}}, - - // Tests that saving an identical profile with accented characters in - // the two address lines results in a merge and that the newer address - // is retained. - {ProfileFields(), - {{ADDRESS_HOME_LINE1, "123 Zôö St"}, {ADDRESS_HOME_LINE2, "üñìt 5"}}, - {{ADDRESS_HOME_LINE1, "123 Zôö St"}, {ADDRESS_HOME_LINE2, "üñìt 5"}}}, - - // Tests that saving an identical profile without accented characters in - // the two address lines results in a merge and that the newer address - // is retained. - {{{ADDRESS_HOME_LINE1, "123 Zôö St"}, {ADDRESS_HOME_LINE2, "üñìt 5"}}, - ProfileFields(), - {{ADDRESS_HOME_LINE1, "123 Zoo St"}, {ADDRESS_HOME_LINE2, "unit 5"}}}, - - // Tests that saving an identical profile except that the address line 1 - // is in the address line 2 results in a merge and that the multi-lne - // address is retained. - {ProfileFields(), - {{ADDRESS_HOME_LINE1, "123 Zoo St, unit 5"}, {ADDRESS_HOME_LINE2, ""}}, - {{ADDRESS_HOME_LINE1, "123 Zoo St"}, {ADDRESS_HOME_LINE2, "unit 5"}}}, - - // Tests that saving an identical profile except that the address line 2 - // contains part of the old address line 1 results in a merge and that the - // original address lines of the reference profile get overwritten. - {{{ADDRESS_HOME_LINE1, "123 Zoo St, unit 5"}, {ADDRESS_HOME_LINE2, ""}}, - ProfileFields(), - {{ADDRESS_HOME_LINE1, "123 Zoo St"}, {ADDRESS_HOME_LINE2, "unit 5"}}}, - - // Tests that saving an identical profile except that the state is the - // abbreviation instead of the full form results in a merge and that the - // original state gets overwritten. - {{{ADDRESS_HOME_STATE, "California"}}, - ProfileFields(), - {{ADDRESS_HOME_STATE, "CA"}}}, - - // Tests that saving an identical profile except that the state is the - // full form instead of the abbreviation results in a merge and that the - // abbreviated state is retained. - {ProfileFields(), - {{ADDRESS_HOME_STATE, "California"}}, - {{ADDRESS_HOME_STATE, "CA"}}}, - - // Tests that saving and identical profile except that the company name - // has different punctuation and case results in a merge and that the - // syntax of the new profile replaces the old one. - {{{COMPANY_NAME, "Stark inc"}}, - {{COMPANY_NAME, "Stark Inc."}}, - {{COMPANY_NAME, "Stark Inc."}}}, + test::DisableSystemServices(prefs_.get()); + OSCryptMocker::TearDown(); + } }; - // Create the test clock. - TestAutofillClock test_clock; - - for (TestCase test_case : test_cases) { + TEST_P(SaveImportedProfileTest, SaveImportedProfile) { + // Create the test clock. + TestAutofillClock test_clock; + auto test_case = GetParam(); // Set the time to a specific value. test_clock.SetNow(kArbitraryTime); @@ -4490,45 +4310,322 @@ // Erase the profiles for the next test. ResetProfiles(); } -} -// Tests that MergeProfile tries to merge the imported profile into the -// existing profile in decreasing order of frecency. -TEST_F(PersonalDataManagerTest, MergeProfile_Frecency) { - // Create two very similar profiles except with different company names. - std::unique_ptr<AutofillProfile> profile1 = base::MakeUnique<AutofillProfile>( - base::GenerateGUID(), "https://www.example.com"); - test::SetProfileInfo(profile1.get(), "Homer", "Jay", "Simpson", - "homer.simpson@abc.com", "SNP", "742 Evergreen Terrace", - "", "Springfield", "IL", "91601", "US", "12345678910"); - AutofillProfile* profile2 = - new AutofillProfile(base::GenerateGUID(), "https://www.example.com"); - test::SetProfileInfo(profile2, "Homer", "Jay", "Simpson", - "homer.simpson@abc.com", "Fox", "742 Evergreen Terrace", - "", "Springfield", "IL", "91601", "US", "12345678910"); + INSTANTIATE_TEST_CASE_P( + PersonalDataManagerTest, + SaveImportedProfileTest, + testing::Values( + // Test that saving an identical profile except for the name results + // in two profiles being saved. + SaveImportedProfileTestCase{ProfileFields(), + {{NAME_FIRST, "Marionette"}}}, - // Give the "Fox" profile a bigger frecency score. - profile2->set_use_count(15); + // Test that saving an identical profile except with the middle name + // initial instead of the full middle name results in the profiles + // getting merged and the full middle name being kept. + SaveImportedProfileTestCase{ + ProfileFields(), + {{NAME_MIDDLE, "M"}}, + {{NAME_MIDDLE, "Mitchell"}, + {NAME_FULL, "Marion Mitchell Morrison"}}}, - // Create the |existing_profiles| vector. - std::vector<std::unique_ptr<AutofillProfile>> existing_profiles; - existing_profiles.push_back(std::move(profile1)); - existing_profiles.push_back(base::WrapUnique(profile2)); + // Test that saving an identical profile except with the full middle + // name instead of the middle name initial results in the profiles + // getting merged and the full middle name replacing the initial. + SaveImportedProfileTestCase{{{NAME_MIDDLE, "M"}}, + {{NAME_MIDDLE, "Mitchell"}}, + {{NAME_MIDDLE, "Mitchell"}}}, - // Create a new imported profile with no company name. - AutofillProfile imported_profile(base::GenerateGUID(), - "https://www.example.com"); - test::SetProfileInfo(&imported_profile, "Homer", "Jay", "Simpson", - "homer.simpson@abc.com", "", "742 Evergreen Terrace", "", - "Springfield", "IL", "91601", "US", "12345678910"); + // Test that saving an identical profile except with no middle name + // results in the profiles getting merged and the full middle name + // being kept. + SaveImportedProfileTestCase{ProfileFields(), + {{NAME_MIDDLE, ""}}, + {{NAME_MIDDLE, "Mitchell"}}}, - // Merge the imported profile into the existing profiles. - std::vector<AutofillProfile> profiles; - std::string guid = personal_data_->MergeProfile( - imported_profile, &existing_profiles, "US-EN", &profiles); + // Test that saving an identical profile except with a middle name + // initial results in the profiles getting merged and the middle name + // initial being saved. + SaveImportedProfileTestCase{{{NAME_MIDDLE, ""}}, + {{NAME_MIDDLE, "M"}}, + {{NAME_MIDDLE, "M"}}}, - // The new profile should be merged into the "fox" profile. - EXPECT_EQ(profile2->guid(), guid); + // Test that saving an identical profile except with a middle name + // results in the profiles getting merged and the full middle name + // being saved. + SaveImportedProfileTestCase{{{NAME_MIDDLE, ""}}, + {{NAME_MIDDLE, "Mitchell"}}, + {{NAME_MIDDLE, "Mitchell"}}}, + + // Test that saving a identical profile except with the full name set + // instead of the name parts results in the two profiles being merged + // and all the name parts kept and the full name being added. + SaveImportedProfileTestCase{ + { + {NAME_FIRST, "Marion"}, + {NAME_MIDDLE, "Mitchell"}, + {NAME_LAST, "Morrison"}, + {NAME_FULL, ""}, + }, + { + {NAME_FIRST, ""}, + {NAME_MIDDLE, ""}, + {NAME_LAST, ""}, + {NAME_FULL, "Marion Mitchell Morrison"}, + }, + { + {NAME_FIRST, "Marion"}, + {NAME_MIDDLE, "Mitchell"}, + {NAME_LAST, "Morrison"}, + {NAME_FULL, "Marion Mitchell Morrison"}, + }, + }, + + // Test that saving a identical profile except with the name parts set + // instead of the full name results in the two profiles being merged + // and the full name being kept and all the name parts being added. + SaveImportedProfileTestCase{ + { + {NAME_FIRST, ""}, + {NAME_MIDDLE, ""}, + {NAME_LAST, ""}, + {NAME_FULL, "Marion Mitchell Morrison"}, + }, + { + {NAME_FIRST, "Marion"}, + {NAME_MIDDLE, "Mitchell"}, + {NAME_LAST, "Morrison"}, + {NAME_FULL, ""}, + }, + { + {NAME_FIRST, "Marion"}, + {NAME_MIDDLE, "Mitchell"}, + {NAME_LAST, "Morrison"}, + {NAME_FULL, "Marion Mitchell Morrison"}, + }, + }, + + // Test that saving a profile that has only a full name set does not + // get merged with a profile with only the name parts set if the names + // are different. + SaveImportedProfileTestCase{ + { + {NAME_FIRST, "Marion"}, + {NAME_MIDDLE, "Mitchell"}, + {NAME_LAST, "Morrison"}, + {NAME_FULL, ""}, + }, + { + {NAME_FIRST, ""}, + {NAME_MIDDLE, ""}, + {NAME_LAST, ""}, + {NAME_FULL, "John Thompson Smith"}, + }, + }, + + // Test that saving a profile that has only the name parts set does + // not get merged with a profile with only the full name set if the + // names are different. + SaveImportedProfileTestCase{ + { + {NAME_FIRST, ""}, + {NAME_MIDDLE, ""}, + {NAME_LAST, ""}, + {NAME_FULL, "John Thompson Smith"}, + }, + { + {NAME_FIRST, "Marion"}, + {NAME_MIDDLE, "Mitchell"}, + {NAME_LAST, "Morrison"}, + {NAME_FULL, ""}, + }, + }, + + // Test that saving an identical profile except for the first address + // line results in two profiles being saved. + SaveImportedProfileTestCase{ + ProfileFields(), + {{ADDRESS_HOME_LINE1, "123 Aquarium St."}}}, + + // Test that saving an identical profile except for the second address + // line results in two profiles being saved. + SaveImportedProfileTestCase{ProfileFields(), + {{ADDRESS_HOME_LINE2, "unit 7"}}}, + + // Tests that saving an identical profile that has a new piece of + // information (company name) results in a merge and that the original + // empty value gets overwritten by the new information. + SaveImportedProfileTestCase{{{COMPANY_NAME, ""}}, + ProfileFields(), + {{COMPANY_NAME, "Fox"}}}, + + // Tests that saving an identical profile except a loss of information + // results in a merge but the original value is not overwritten (no + // information loss). + SaveImportedProfileTestCase{ProfileFields(), + {{COMPANY_NAME, ""}}, + {{COMPANY_NAME, "Fox"}}}, + + // Tests that saving an identical profile except a slightly different + // postal code results in a merge with the new value kept. + SaveImportedProfileTestCase{{{ADDRESS_HOME_ZIP, "R2C 0A1"}}, + {{ADDRESS_HOME_ZIP, "R2C0A1"}}, + {{ADDRESS_HOME_ZIP, "R2C0A1"}}}, + SaveImportedProfileTestCase{{{ADDRESS_HOME_ZIP, "R2C0A1"}}, + {{ADDRESS_HOME_ZIP, "R2C 0A1"}}, + {{ADDRESS_HOME_ZIP, "R2C 0A1"}}}, + SaveImportedProfileTestCase{{{ADDRESS_HOME_ZIP, "r2c 0a1"}}, + {{ADDRESS_HOME_ZIP, "R2C0A1"}}, + {{ADDRESS_HOME_ZIP, "R2C0A1"}}}, + + // Tests that saving an identical profile plus a new piece of + // information on the address line 2 results in a merge and that the + // original empty value gets overwritten by the new information. + SaveImportedProfileTestCase{{{ADDRESS_HOME_LINE2, ""}}, + ProfileFields(), + {{ADDRESS_HOME_LINE2, "unit 5"}}}, + + // Tests that saving an identical profile except a loss of information + // on the address line 2 results in a merge but that the original + // value gets not overwritten (no information loss). + SaveImportedProfileTestCase{ProfileFields(), + {{ADDRESS_HOME_LINE2, ""}}, + {{ADDRESS_HOME_LINE2, "unit 5"}}}, + + // Tests that saving an identical except with more punctuation in the + // fist address line, while the second is empty, results in a merge + // and that the original address gets overwritten. + SaveImportedProfileTestCase{ + {{ADDRESS_HOME_LINE2, ""}}, + {{ADDRESS_HOME_LINE2, ""}, {ADDRESS_HOME_LINE1, "123, Zoo St."}}, + {{ADDRESS_HOME_LINE1, "123, Zoo St."}}}, + + // Tests that saving an identical profile except with less punctuation + // in the fist address line, while the second is empty, results in a + // merge and that the longer address is retained. + SaveImportedProfileTestCase{ + {{ADDRESS_HOME_LINE2, ""}, {ADDRESS_HOME_LINE1, "123, Zoo St."}}, + {{ADDRESS_HOME_LINE2, ""}}, + {{ADDRESS_HOME_LINE1, "123 Zoo St"}}}, + + // Tests that saving an identical profile except additional + // punctuation in the two address lines results in a merge and that + // the newer address is retained. + SaveImportedProfileTestCase{ProfileFields(), + {{ADDRESS_HOME_LINE1, "123, Zoo St."}, + {ADDRESS_HOME_LINE2, "unit. 5"}}, + {{ADDRESS_HOME_LINE1, "123, Zoo St."}, + {ADDRESS_HOME_LINE2, "unit. 5"}}}, + + // Tests that saving an identical profile except less punctuation in + // the two address lines results in a merge and that the newer address + // is retained. + SaveImportedProfileTestCase{{{ADDRESS_HOME_LINE1, "123, Zoo St."}, + {ADDRESS_HOME_LINE2, "unit. 5"}}, + ProfileFields(), + {{ADDRESS_HOME_LINE1, "123 Zoo St"}, + {ADDRESS_HOME_LINE2, "unit 5"}}}, + + // Tests that saving an identical profile with accented characters in + // the two address lines results in a merge and that the newer address + // is retained. + SaveImportedProfileTestCase{ProfileFields(), + {{ADDRESS_HOME_LINE1, "123 Zôö St"}, + {ADDRESS_HOME_LINE2, "üñìt 5"}}, + {{ADDRESS_HOME_LINE1, "123 Zôö St"}, + {ADDRESS_HOME_LINE2, "üñìt 5"}}}, + + // Tests that saving an identical profile without accented characters + // in the two address lines results in a merge and that the newer + // address is retained. + SaveImportedProfileTestCase{{{ADDRESS_HOME_LINE1, "123 Zôö St"}, + {ADDRESS_HOME_LINE2, "üñìt 5"}}, + ProfileFields(), + {{ADDRESS_HOME_LINE1, "123 Zoo St"}, + {ADDRESS_HOME_LINE2, "unit 5"}}}, + + // Tests that saving an identical profile except that the address line + // 1 is in the address line 2 results in a merge and that the + // multi-lne address is retained. + SaveImportedProfileTestCase{ + ProfileFields(), + {{ADDRESS_HOME_LINE1, "123 Zoo St, unit 5"}, + {ADDRESS_HOME_LINE2, ""}}, + {{ADDRESS_HOME_LINE1, "123 Zoo St"}, + {ADDRESS_HOME_LINE2, "unit 5"}}}, + + // Tests that saving an identical profile except that the address line + // 2 contains part of the old address line 1 results in a merge and + // that the original address lines of the reference profile get + // overwritten. + SaveImportedProfileTestCase{ + {{ADDRESS_HOME_LINE1, "123 Zoo St, unit 5"}, + {ADDRESS_HOME_LINE2, ""}}, + ProfileFields(), + {{ADDRESS_HOME_LINE1, "123 Zoo St"}, + {ADDRESS_HOME_LINE2, "unit 5"}}}, + + // Tests that saving an identical profile except that the state is the + // abbreviation instead of the full form results in a merge and that + // the original state gets overwritten. + SaveImportedProfileTestCase{{{ADDRESS_HOME_STATE, "California"}}, + ProfileFields(), + {{ADDRESS_HOME_STATE, "CA"}}}, + + // Tests that saving an identical profile except that the state is the + // full form instead of the abbreviation results in a merge and that + // the abbreviated state is retained. + SaveImportedProfileTestCase{ProfileFields(), + {{ADDRESS_HOME_STATE, "California"}}, + {{ADDRESS_HOME_STATE, "CA"}}}, + + // Tests that saving and identical profile except that the company + // name has different punctuation and case results in a merge and that + // the syntax of the new profile replaces the old one. + SaveImportedProfileTestCase{{{COMPANY_NAME, "Stark inc"}}, + {{COMPANY_NAME, "Stark Inc."}}, + {{COMPANY_NAME, "Stark Inc."}}})); + + // Tests that MergeProfile tries to merge the imported profile into the + // existing profile in decreasing order of frecency. + TEST_F(PersonalDataManagerTest, MergeProfile_Frecency) { + // Create two very similar profiles except with different company names. + std::unique_ptr<AutofillProfile> profile1 = + base::MakeUnique<AutofillProfile>(base::GenerateGUID(), + "https://www.example.com"); + test::SetProfileInfo(profile1.get(), "Homer", "Jay", "Simpson", + "homer.simpson@abc.com", "SNP", + "742 Evergreen Terrace", "", "Springfield", "IL", + "91601", "US", "12345678910"); + AutofillProfile* profile2 = + new AutofillProfile(base::GenerateGUID(), "https://www.example.com"); + test::SetProfileInfo(profile2, "Homer", "Jay", "Simpson", + "homer.simpson@abc.com", "Fox", + "742 Evergreen Terrace", "", "Springfield", "IL", + "91601", "US", "12345678910"); + + // Give the "Fox" profile a bigger frecency score. + profile2->set_use_count(15); + + // Create the |existing_profiles| vector. + std::vector<std::unique_ptr<AutofillProfile>> existing_profiles; + existing_profiles.push_back(std::move(profile1)); + existing_profiles.push_back(base::WrapUnique(profile2)); + + // Create a new imported profile with no company name. + AutofillProfile imported_profile(base::GenerateGUID(), + "https://www.example.com"); + test::SetProfileInfo(&imported_profile, "Homer", "Jay", "Simpson", + "homer.simpson@abc.com", "", "742 Evergreen Terrace", + "", "Springfield", "IL", "91601", "US", "12345678910"); + + // Merge the imported profile into the existing profiles. + std::vector<AutofillProfile> profiles; + std::string guid = personal_data_->MergeProfile( + imported_profile, &existing_profiles, "US-EN", &profiles); + + // The new profile should be merged into the "fox" profile. + EXPECT_EQ(profile2->guid(), guid); } // Tests that MergeProfile produces a merged profile with the expected usage
diff --git a/components/autofill/core/browser/phone_number_i18n_unittest.cc b/components/autofill/core/browser/phone_number_i18n_unittest.cc index 240319e..17a2431 100644 --- a/components/autofill/core/browser/phone_number_i18n_unittest.cc +++ b/components/autofill/core/browser/phone_number_i18n_unittest.cc
@@ -46,101 +46,117 @@ EXPECT_EQ(NormalizePhoneNumber(phone5, "US"), ASCIIToUTF16("6502346789")); } -TEST(PhoneNumberI18NTest, ParsePhoneNumber) { - const struct test_case { - // Expected parsing result. - bool valid; - // Inputs. - std::string input; - std::string assumed_region; - // Further expectations. - std::string number; - std::string city_code; - std::string country_code; - std::string deduced_region; - } test_cases[] = { +struct ParseNumberTestCase { + // Expected parsing result. + bool valid; + // Inputs. + std::string input; + std::string assumed_region; + // Further expectations. + std::string number; + std::string city_code; + std::string country_code; + std::string deduced_region; +}; + +class ParseNumberTest : public testing::TestWithParam<ParseNumberTestCase> {}; + +TEST_P(ParseNumberTest, ParsePhoneNumber) { + auto test_case = GetParam(); + SCOPED_TRACE("Testing phone number " + test_case.input); + + base::string16 country_code, city_code, number; + std::string deduced_region; + ::i18n::phonenumbers::PhoneNumber unused_i18n_number; + EXPECT_EQ( + test_case.valid, + ParsePhoneNumber(ASCIIToUTF16(test_case.input), test_case.assumed_region, + &country_code, &city_code, &number, &deduced_region, + &unused_i18n_number)); + EXPECT_EQ(ASCIIToUTF16(test_case.number), number); + EXPECT_EQ(ASCIIToUTF16(test_case.city_code), city_code); + EXPECT_EQ(ASCIIToUTF16(test_case.country_code), country_code); + EXPECT_EQ(test_case.deduced_region, deduced_region); +} + +INSTANTIATE_TEST_CASE_P( + PhoneNumberI18NTest, + ParseNumberTest, + testing::Values( // Test for empty string. Should give back empty strings. - {false, "", "US"}, + ParseNumberTestCase{false, "", "US"}, // Test for string with less than 7 digits. Should give back empty // strings. - {false, "1234", "US"}, + ParseNumberTestCase{false, "1234", "US"}, // Test for string with exactly 7 digits. // Not a valid number - starts with 1 - {false, "17134567", "US"}, + ParseNumberTestCase{false, "17134567", "US"}, // Not a valid number - does not have area code. - {false, "7134567", "US"}, + ParseNumberTestCase{false, "7134567", "US"}, // Valid Canadian toll-free number. - {true, "3101234", "US", "3101234", "", "", "CA"}, + ParseNumberTestCase{true, "3101234", "US", "3101234", "", "", "CA"}, // Test for string with greater than 7 digits but less than 10 digits. // Should fail parsing in US. - {false, "123456789", "US"}, + ParseNumberTestCase{false, "123456789", "US"}, // Test for string with greater than 7 digits but less than 10 digits // and // separators. // Should fail parsing in US. - {false, "12.345-6789", "US"}, + ParseNumberTestCase{false, "12.345-6789", "US"}, // Test for string with exactly 10 digits. // Should give back phone number and city code. // This one going to fail because of the incorrect area code. - {false, "1234567890", "US"}, + ParseNumberTestCase{false, "1234567890", "US"}, // This one going to fail because of the incorrect number (starts with // 1). - {false, "6501567890", "US"}, - {true, "6504567890", "US", "4567890", "650", "", "US"}, + ParseNumberTestCase{false, "6501567890", "US"}, + ParseNumberTestCase{true, "6504567890", "US", "4567890", "650", "", + "US"}, // Test for string with exactly 10 digits and separators. // Should give back phone number and city code. - {true, "(650) 456-7890", "US", "4567890", "650", "", "US"}, + ParseNumberTestCase{true, "(650) 456-7890", "US", "4567890", "650", "", + "US"}, // Tests for string with over 10 digits. // 01 is incorrect prefix in the USA, and if we interpret 011 as prefix, // the // rest is too short for international number - the parsing should fail. - {false, "0116504567890", "US"}, + ParseNumberTestCase{false, "0116504567890", "US"}, // 011 is a correct "dial out" prefix in the USA - the parsing should // succeed. - {true, "01116504567890", "US", "4567890", "650", "1", "US"}, + ParseNumberTestCase{true, "01116504567890", "US", "4567890", "650", "1", + "US"}, // 011 is a correct "dial out" prefix in the USA but the rest of the // number // can't parse as a US number. - {true, "01178124567890", "US", "4567890", "812", "7", "RU"}, + ParseNumberTestCase{true, "01178124567890", "US", "4567890", "812", "7", + "RU"}, // Test for string with over 10 digits with separator characters. // Should give back phone number, city code, and country code. "011" is // US "dial out" code, which is discarded. - {true, "(0111) 650-456.7890", "US", "4567890", "650", "1", "US"}, + ParseNumberTestCase{true, "(0111) 650-456.7890", "US", "4567890", "650", + "1", "US"}, // Now try phone from Czech republic - it has 00 dial out code, 420 // country // code and variable length area codes. - {true, "+420 27-89.10.112", "US", "910112", "278", "420", "CZ"}, - {false, "27-89.10.112", "US"}, - {true, "27-89.10.112", "CZ", "910112", "278", "", "CZ"}, - {false, "420 57-89.10.112", "US"}, - {true, "420 57-89.10.112", "CZ", "910112", "578", "420", "CZ"}, + ParseNumberTestCase{true, "+420 27-89.10.112", "US", "910112", "278", + "420", "CZ"}, + ParseNumberTestCase{false, "27-89.10.112", "US"}, + ParseNumberTestCase{true, "27-89.10.112", "CZ", "910112", "278", "", + "CZ"}, + ParseNumberTestCase{false, "420 57-89.10.112", "US"}, + ParseNumberTestCase{true, "420 57-89.10.112", "CZ", "910112", "578", + "420", "CZ"}, // Parses vanity numbers. - {true, "1-650-FLOWERS", "US", "3569377", "650", "1", "US"}, + ParseNumberTestCase{true, "1-650-FLOWERS", "US", "3569377", "650", "1", + "US"}, // 800 is not an area code, but the destination code. In our library // these // codes should be treated the same as area codes. - {true, "1-800-FLOWERS", "US", "3569377", "800", "1", "US"}, + ParseNumberTestCase{true, "1-800-FLOWERS", "US", "3569377", "800", "1", + "US"}, // Don't add a country code where there was none. - {true, "(08) 450 777 7777", "DE", "7777777", "8450", "", "DE"}, - }; - - for (const auto& test_case : test_cases) { - SCOPED_TRACE("Testing phone number " + test_case.input); - - base::string16 country_code, city_code, number; - std::string deduced_region; - ::i18n::phonenumbers::PhoneNumber unused_i18n_number; - EXPECT_EQ( - test_case.valid, - ParsePhoneNumber(ASCIIToUTF16(test_case.input), - test_case.assumed_region, &country_code, &city_code, - &number, &deduced_region, &unused_i18n_number)); - EXPECT_EQ(ASCIIToUTF16(test_case.number), number); - EXPECT_EQ(ASCIIToUTF16(test_case.city_code), city_code); - EXPECT_EQ(ASCIIToUTF16(test_case.country_code), country_code); - EXPECT_EQ(test_case.deduced_region, deduced_region); - } -} + ParseNumberTestCase{true, "(08) 450 777 7777", "DE", "7777777", "8450", + "", "DE"})); TEST(PhoneNumberI18NTest, ConstructPhoneNumber) { base::string16 number;
diff --git a/components/autofill/core/browser/region_combobox_model.cc b/components/autofill/core/browser/region_combobox_model.cc new file mode 100644 index 0000000..ffdb13e --- /dev/null +++ b/components/autofill/core/browser/region_combobox_model.cc
@@ -0,0 +1,99 @@ +// 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/autofill/core/browser/region_combobox_model.h" + +#include <utility> + +#include "base/callback.h" +#include "base/logging.h" +#include "base/strings/utf_string_conversions.h" +#include "components/strings/grit/components_strings.h" +#include "third_party/libaddressinput/src/cpp/include/libaddressinput/region_data.h" +#include "third_party/libaddressinput/src/cpp/include/libaddressinput/region_data_builder.h" +#include "ui/base/l10n/l10n_util.h" +#include "ui/base/models/combobox_model_observer.h" + +namespace autofill { + +RegionComboboxModel::RegionComboboxModel( + std::unique_ptr<const ::i18n::addressinput::Source> source, + std::unique_ptr<::i18n::addressinput::Storage> storage, + const std::string& app_locale, + const std::string& country_code) + : app_locale_(app_locale), + region_data_supplier_(source.release(), storage.release()) { + region_data_supplier_callback_.reset(::i18n::addressinput::BuildCallback( + this, &RegionComboboxModel::RegionDataLoaded)); + region_data_supplier_.LoadRules(country_code, + *region_data_supplier_callback_.get()); +} + +RegionComboboxModel::~RegionComboboxModel() {} + +int RegionComboboxModel::GetItemCount() const { + // The combobox view needs to always have at least one item. If the regions + // have not been completely loaded yet, we display a single "loading" item. + // But if we failed to load, we return 0 so that the view can be identified + // as empty and potentially replaced by another view during ReLayout. + if (regions_.size() == 0 && !failed_to_load_data_) + return 1; + return regions_.size(); +} + +base::string16 RegionComboboxModel::GetItemAt(int index) { + DCHECK_GE(index, 0); + // This might happen because of the asynchonous nature of the data. + if (static_cast<size_t>(index) >= regions_.size()) + return l10n_util::GetStringUTF16(IDS_AUTOFILL_LOADING_REGIONS); + + if (!regions_[index].first.empty()) + return base::UTF8ToUTF16(regions_[index].second); + + // The separator item. Implemented for platforms that don't yet support + // IsItemSeparatorAt(). + return base::ASCIIToUTF16("---"); +} + +bool RegionComboboxModel::IsItemSeparatorAt(int index) { + // This might happen because of the asynchonous nature of the data. + DCHECK_GE(index, 0); + if (static_cast<size_t>(index) >= regions_.size()) + return false; + return regions_[index].first.empty(); +} + +void RegionComboboxModel::AddObserver(ui::ComboboxModelObserver* observer) { + observers_.AddObserver(observer); +} + +void RegionComboboxModel::RemoveObserver(ui::ComboboxModelObserver* observer) { + observers_.RemoveObserver(observer); +} + +void RegionComboboxModel::RegionDataLoaded(bool success, + const std::string& country_code, + int rule_count) { + if (success) { + failed_to_load_data_ = false; + std::string best_region_tree_language_tag; + ::i18n::addressinput::RegionDataBuilder builder(®ion_data_supplier_); + const std::vector<const ::i18n::addressinput::RegionData*>& regions = + builder.Build(country_code, app_locale_, &best_region_tree_language_tag) + .sub_regions(); + for (auto* const region : regions) { + regions_.push_back(std::make_pair(region->key(), region->name())); + } + } else { + // TODO(mad): Maybe use a static list as is done for countries in + // components\autofill\core\browser\country_data.cc + failed_to_load_data_ = true; + } + + for (auto& observer : observers_) { + observer.OnComboboxModelChanged(this); + } +} + +} // namespace autofill
diff --git a/components/autofill/core/browser/region_combobox_model.h b/components/autofill/core/browser/region_combobox_model.h new file mode 100644 index 0000000..7d92571 --- /dev/null +++ b/components/autofill/core/browser/region_combobox_model.h
@@ -0,0 +1,75 @@ +// 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_AUTOFILL_CORE_BROWSER_REGION_COMBOBOX_MODEL_H_ +#define COMPONENTS_AUTOFILL_CORE_BROWSER_REGION_COMBOBOX_MODEL_H_ + +#include <memory> +#include <string> +#include <utility> +#include <vector> + +#include "base/macros.h" +#include "base/observer_list.h" +#include "third_party/libaddressinput/src/cpp/include/libaddressinput/preload_supplier.h" +#include "third_party/libaddressinput/src/cpp/include/libaddressinput/source.h" +#include "third_party/libaddressinput/src/cpp/include/libaddressinput/storage.h" +#include "ui/base/models/combobox_model.h" + +namespace autofill { + +// A model for country regions (aka state/provinces) to be used to enter +// addresses. Note that loading these regions can happen asynchronously so a +// ui::ComboboxModelObserver should be attached to this model to be updated when +// the regions load is completed. +class RegionComboboxModel : public ui::ComboboxModel { + public: + // |source| and |storage| are needed to initialize the + // ::i18n::addressinput::PreloadSupplier, |app_locale| is needed for + // ::i18n::addressinput::RegionDataBuilder and |country_code| identifies which + // country's region to load into the model. + RegionComboboxModel( + std::unique_ptr<const ::i18n::addressinput::Source> source, + std::unique_ptr<::i18n::addressinput::Storage> storage, + const std::string& app_locale, + const std::string& country_code); + ~RegionComboboxModel() override; + + // ui::ComboboxModel implementation: + int GetItemCount() const override; + base::string16 GetItemAt(int index) override; + bool IsItemSeparatorAt(int index) override; + void AddObserver(ui::ComboboxModelObserver* observer) override; + void RemoveObserver(ui::ComboboxModelObserver* observer) override; + + // Callback for ::i18n::addressinput::PreloadSupplier::LoadRules + void RegionDataLoaded(bool success, const std::string&, int rule_count); + + private: + // Whether the region data load failed or not. + bool failed_to_load_data_{false}; + + // The application locale. + const std::string app_locale_; + + // The callback to give to |region_data_supplier_| for async operations. + ::i18n::addressinput::scoped_ptr< + ::i18n::addressinput::PreloadSupplier::Callback> + region_data_supplier_callback_; + + // A supplier of region data. + ::i18n::addressinput::PreloadSupplier region_data_supplier_; + + // List of <code, name> pairs for ADDRESS_HOME_STATE combobox values; + std::vector<std::pair<std::string, std::string>> regions_; + + // To be called when the data for the given country code was loaded. + base::ObserverList<ui::ComboboxModelObserver> observers_; + + DISALLOW_COPY_AND_ASSIGN(RegionComboboxModel); +}; + +} // namespace autofill + +#endif // COMPONENTS_AUTOFILL_CORE_BROWSER_REGION_COMBOBOX_MODEL_H_
diff --git a/components/autofill/core/browser/region_combobox_model_unittest.cc b/components/autofill/core/browser/region_combobox_model_unittest.cc new file mode 100644 index 0000000..f749e65 --- /dev/null +++ b/components/autofill/core/browser/region_combobox_model_unittest.cc
@@ -0,0 +1,105 @@ +// 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/autofill/core/browser/region_combobox_model.h" + +#include <memory> + +#include "base/json/json_writer.h" +#include "base/memory/ptr_util.h" +#include "base/strings/utf_string_conversions.h" +#include "base/values.h" +#include "components/autofill/core/browser/autofill_test_utils.h" +#include "components/autofill/core/browser/test_personal_data_manager.h" +#include "components/prefs/pref_service.h" +#include "testing/gtest/include/gtest/gtest.h" +#include "third_party/libaddressinput/src/cpp/include/libaddressinput/null_storage.h" +#include "third_party/libaddressinput/src/cpp/include/libaddressinput/source.h" + +namespace autofill { + +// Strings used in more than one place and must be the same everywhere. +const char kTestCountryCode[] = "CA"; +const char kQuebec[] = "Quebec"; +const char kOntario[] = "Ontario"; + +class RegionComboboxModelTest : public testing::Test { + public: + RegionComboboxModelTest() + : pref_service_(autofill::test::PrefServiceForTesting()) { + manager_.SetTestingPrefService(pref_service_.get()); + manager_.set_timezone_country_code(kTestCountryCode); + } + + void SetupCombobox(bool source_failure) { + model_.reset(new RegionComboboxModel( + base::WrapUnique(new TestSource(source_failure)), + base::WrapUnique(new ::i18n::addressinput::NullStorage), + manager_.app_locale(), kTestCountryCode)); + } + + void TearDown() override { manager_.SetTestingPrefService(nullptr); } + + RegionComboboxModel* model() { return model_.get(); } + + private: + // The source that returns the region data. Using + // third_party/libaddressinput/src/cpp/test/testdata_source.h wouldn't help + // much since it only implements the Get method overriden below anyway. + class TestSource : public ::i18n::addressinput::Source { + public: + explicit TestSource(bool source_failure) + : source_failure_(source_failure) {} + ~TestSource() override {} + + void Get(const std::string& key, + const ::i18n::addressinput::Source::Callback& data_ready) + const override { + if (source_failure_) { + data_ready(false, key, nullptr); + return; + } + // Only set the fields needed to fill the combobox, since only the + // combobox code needs to be tested here. + std::string* json = new std::string("{\"data/CA\":{"); + *json += "\"id\":\"data/CA\","; + *json += "\"key\":\"CA\","; + *json += "\"sub_keys\":\"QC~ON\"},"; + + *json += "\"data/CA/ON\":{"; + *json += "\"id\":\"data/CA/ON\","; + *json += "\"key\":\"ON\","; + *json += "\"name\":\"Ontario\"},"; + + *json += "\"data/CA/QC\":{"; + *json += "\"id\":\"data/CA/QC\","; + *json += "\"key\":\"QC\","; + *json += "\"name\":\"Quebec\"}}"; + data_ready(true, key, json); + } + + private: + bool source_failure_{false}; + }; + TestPersonalDataManager manager_; + std::unique_ptr<PrefService> pref_service_; + std::unique_ptr<RegionComboboxModel> model_; +}; + +// Make sure the two regions returned by the source are properly set in the +// model. +TEST_F(RegionComboboxModelTest, QuebecOntarioRegions) { + SetupCombobox(false); + EXPECT_EQ(2, model()->GetItemCount()); + EXPECT_EQ(base::ASCIIToUTF16(kQuebec), model()->GetItemAt(0)); + EXPECT_EQ(base::ASCIIToUTF16(kOntario), model()->GetItemAt(1)); +} + +// Make sure the combo box properly support source failures. +TEST_F(RegionComboboxModelTest, FailingSource) { + SetupCombobox(true); + EXPECT_EQ(0, model()->GetItemCount()); +} + +} // namespace autofill
diff --git a/components/autofill/core/browser/ui/card_unmask_prompt_controller_impl_unittest.cc b/components/autofill/core/browser/ui/card_unmask_prompt_controller_impl_unittest.cc index 7a6ff9f0..1ba526d 100644 --- a/components/autofill/core/browser/ui/card_unmask_prompt_controller_impl_unittest.cc +++ b/components/autofill/core/browser/ui/card_unmask_prompt_controller_impl_unittest.cc
@@ -82,19 +82,9 @@ DISALLOW_COPY_AND_ASSIGN(TestCardUnmaskPromptController); }; -class CardUnmaskPromptControllerImplTest : public testing::Test { +class CardUnmaskPromptControllerImplGenericTest { public: - CardUnmaskPromptControllerImplTest() {} - ~CardUnmaskPromptControllerImplTest() override {} - - void SetUp() override { - test_unmask_prompt_view_.reset(new TestCardUnmaskPromptView()); - pref_service_.reset(new TestingPrefServiceSimple()); - controller_.reset(new TestCardUnmaskPromptController(pref_service_.get())); - delegate_.reset(new TestCardUnmaskDelegate()); - pref_service_->registry()->RegisterBooleanPref( - prefs::kAutofillWalletImportStorageCheckboxState, false); - } + CardUnmaskPromptControllerImplGenericTest() {} void ShowPrompt() { controller_->ShowPrompt(test_unmask_prompt_view_.get(), @@ -134,6 +124,26 @@ std::unique_ptr<TestCardUnmaskDelegate> delegate_; private: + DISALLOW_COPY_AND_ASSIGN(CardUnmaskPromptControllerImplGenericTest); +}; + +class CardUnmaskPromptControllerImplTest + : public CardUnmaskPromptControllerImplGenericTest, + public testing::Test { + public: + CardUnmaskPromptControllerImplTest() {} + ~CardUnmaskPromptControllerImplTest() override {} + + void SetUp() override { + test_unmask_prompt_view_.reset(new TestCardUnmaskPromptView()); + pref_service_.reset(new TestingPrefServiceSimple()); + controller_.reset(new TestCardUnmaskPromptController(pref_service_.get())); + delegate_.reset(new TestCardUnmaskDelegate()); + pref_service_->registry()->RegisterBooleanPref( + prefs::kAutofillWalletImportStorageCheckboxState, false); + } + + private: DISALLOW_COPY_AND_ASSIGN(CardUnmaskPromptControllerImplTest); }; @@ -433,80 +443,138 @@ "Autofill.UnmaskPrompt.UnmaskingDuration.Failure", 1); } -TEST_F(CardUnmaskPromptControllerImplTest, CvcInputValidation) { - struct CvcCase { - const char* input; - bool valid; - // null when |valid| is false. - const char* canonicalized_input; - }; - CvcCase cvc_cases[] = { - { "123", true, "123" }, - { "123 ", true, "123" }, - { " 1234 ", false }, - { "IOU", false }, - }; +struct CvcCase { + const char* input; + bool valid; + // null when |valid| is false. + const char* canonicalized_input; +}; - ShowPrompt(); +class CvcInputValidationTest : public CardUnmaskPromptControllerImplGenericTest, + public testing::TestWithParam<CvcCase> { + public: + CvcInputValidationTest() {} + ~CvcInputValidationTest() override {} - for (const CvcCase& cvc_case : cvc_cases) { - EXPECT_EQ(cvc_case.valid, - controller_->InputCvcIsValid(ASCIIToUTF16(cvc_case.input))); - if (!cvc_case.valid) - continue; - - controller_->OnUnmaskResponse(ASCIIToUTF16(cvc_case.input), - ASCIIToUTF16("1"), ASCIIToUTF16("2050"), - false); - EXPECT_EQ(ASCIIToUTF16(cvc_case.canonicalized_input), - delegate_->response().cvc); + void SetUp() override { + test_unmask_prompt_view_.reset(new TestCardUnmaskPromptView()); + pref_service_.reset(new TestingPrefServiceSimple()); + controller_.reset(new TestCardUnmaskPromptController(pref_service_.get())); + delegate_.reset(new TestCardUnmaskDelegate()); + pref_service_->registry()->RegisterBooleanPref( + prefs::kAutofillWalletImportStorageCheckboxState, false); } - CvcCase cvc_cases_amex[] = { - { "123", false }, - { "123 ", false }, - { "1234", true, "1234" }, - { "\t1234 ", true, "1234" }, - { " 1234", true, "1234" }, - { "IOU$", false }, - }; + private: + DISALLOW_COPY_AND_ASSIGN(CvcInputValidationTest); +}; +TEST_P(CvcInputValidationTest, CvcInputValidation) { + auto cvc_case = GetParam(); + ShowPrompt(); + EXPECT_EQ(cvc_case.valid, + controller_->InputCvcIsValid(ASCIIToUTF16(cvc_case.input))); + if (!cvc_case.valid) + return; + + controller_->OnUnmaskResponse(ASCIIToUTF16(cvc_case.input), ASCIIToUTF16("1"), + ASCIIToUTF16("2050"), false); + EXPECT_EQ(ASCIIToUTF16(cvc_case.canonicalized_input), + delegate_->response().cvc); +} + +INSTANTIATE_TEST_CASE_P(CardUnmaskPromptControllerImplTest, + CvcInputValidationTest, + testing::Values(CvcCase{"123", true, "123"}, + CvcCase{"123 ", true, "123"}, + CvcCase{" 1234 ", false}, + CvcCase{"IOU", false})); + +class CvcInputAmexValidationTest + : public CardUnmaskPromptControllerImplGenericTest, + public testing::TestWithParam<CvcCase> { + public: + CvcInputAmexValidationTest() {} + ~CvcInputAmexValidationTest() override {} + + void SetUp() override { + test_unmask_prompt_view_.reset(new TestCardUnmaskPromptView()); + pref_service_.reset(new TestingPrefServiceSimple()); + controller_.reset(new TestCardUnmaskPromptController(pref_service_.get())); + delegate_.reset(new TestCardUnmaskDelegate()); + pref_service_->registry()->RegisterBooleanPref( + prefs::kAutofillWalletImportStorageCheckboxState, false); + } + + private: + DISALLOW_COPY_AND_ASSIGN(CvcInputAmexValidationTest); +}; + +TEST_P(CvcInputAmexValidationTest, CvcInputValidation) { + auto cvc_case_amex = GetParam(); ShowPromptAmex(); + EXPECT_EQ(cvc_case_amex.valid, + controller_->InputCvcIsValid(ASCIIToUTF16(cvc_case_amex.input))); + if (!cvc_case_amex.valid) + return; - for (const CvcCase& cvc_case_amex : cvc_cases_amex) { - EXPECT_EQ(cvc_case_amex.valid, - controller_->InputCvcIsValid(ASCIIToUTF16(cvc_case_amex.input))); - if (!cvc_case_amex.valid) - continue; - - controller_->OnUnmaskResponse(ASCIIToUTF16(cvc_case_amex.input), - base::string16(), base::string16(), false); - EXPECT_EQ(ASCIIToUTF16(cvc_case_amex.canonicalized_input), - delegate_->response().cvc); - } + controller_->OnUnmaskResponse(ASCIIToUTF16(cvc_case_amex.input), + base::string16(), base::string16(), false); + EXPECT_EQ(ASCIIToUTF16(cvc_case_amex.canonicalized_input), + delegate_->response().cvc); } -TEST_F(CardUnmaskPromptControllerImplTest, ExpirationDateValidation) { - struct { - const char* input_month; - const char* input_year; - bool valid; - } exp_cases[] = { - {"01", "2040", true}, - {"1", "2040", true}, - {"1", "40", true}, - {"10", "40", true}, - {"01", "1940", false}, - {"13", "2040", false}, - }; +INSTANTIATE_TEST_CASE_P(CardUnmaskPromptControllerImplTest, + CvcInputAmexValidationTest, + testing::Values(CvcCase{"123", false}, + CvcCase{"123 ", false}, + CvcCase{"1234", true, "1234"}, + CvcCase{"\t1234 ", true, "1234"}, + CvcCase{" 1234", true, "1234"}, + CvcCase{"IOU$", false})); +struct ExpirationDateTestCase { + const char* input_month; + const char* input_year; + bool valid; +}; + +class ExpirationDateValidationTest + : public CardUnmaskPromptControllerImplGenericTest, + public testing::TestWithParam<ExpirationDateTestCase> { + public: + ExpirationDateValidationTest() {} + ~ExpirationDateValidationTest() override {} + + void SetUp() override { + test_unmask_prompt_view_.reset(new TestCardUnmaskPromptView()); + pref_service_.reset(new TestingPrefServiceSimple()); + controller_.reset(new TestCardUnmaskPromptController(pref_service_.get())); + delegate_.reset(new TestCardUnmaskDelegate()); + pref_service_->registry()->RegisterBooleanPref( + prefs::kAutofillWalletImportStorageCheckboxState, false); + } + + private: + DISALLOW_COPY_AND_ASSIGN(ExpirationDateValidationTest); +}; + +TEST_P(ExpirationDateValidationTest, ExpirationDateValidation) { + auto exp_case = GetParam(); ShowPrompt(); - - for (const auto& exp_case : exp_cases) { - EXPECT_EQ(exp_case.valid, controller_->InputExpirationIsValid( - ASCIIToUTF16(exp_case.input_month), - ASCIIToUTF16(exp_case.input_year))); - } + EXPECT_EQ(exp_case.valid, controller_->InputExpirationIsValid( + ASCIIToUTF16(exp_case.input_month), + ASCIIToUTF16(exp_case.input_year))); } +INSTANTIATE_TEST_CASE_P( + CardUnmaskPromptControllerImplTest, + ExpirationDateValidationTest, + testing::Values(ExpirationDateTestCase{"01", "2040", true}, + ExpirationDateTestCase{"1", "2040", true}, + ExpirationDateTestCase{"1", "40", true}, + ExpirationDateTestCase{"10", "40", true}, + ExpirationDateTestCase{"01", "1940", false}, + ExpirationDateTestCase{"13", "2040", false})); + } // namespace autofill
diff --git a/components/autofill/core/browser/webdata/autofill_profile_syncable_service_unittest.cc b/components/autofill/core/browser/webdata/autofill_profile_syncable_service_unittest.cc index e5bc5b9..7c84046 100644 --- a/components/autofill/core/browser/webdata/autofill_profile_syncable_service_unittest.cc +++ b/components/autofill/core/browser/webdata/autofill_profile_syncable_service_unittest.cc
@@ -1191,77 +1191,127 @@ autofill_syncable_service_.StopSyncing(syncer::AUTOFILL_PROFILE); } -// Usage stats should be updated by sync. -TEST_F(AutofillProfileSyncableServiceTest, SyncUpdatesUsageStats) { - typedef struct { - size_t local_use_count; - base::Time local_use_date; - size_t remote_use_count; - int remote_use_date; - size_t synced_use_count; - base::Time synced_use_date; - } TestCase; +struct SyncUpdatesUsageStatsTestCase { + size_t local_use_count; + base::Time local_use_date; + size_t remote_use_count; + int remote_use_date; + size_t synced_use_count; + base::Time synced_use_date; +}; - TestCase test_cases[] = { - // Local profile with default stats. - {0U, base::Time(), 9U, 4321, 9U, base::Time::FromTimeT(4321)}, - // Local profile has older stats than the server. - {3U, base::Time::FromTimeT(1234), 9U, 4321, 9U, - base::Time::FromTimeT(4321)}, - // Local profile has newer stats than the server - {10U, base::Time::FromTimeT(9999), 9U, 4321, 9U, - base::Time::FromTimeT(4321)}}; +class SyncUpdatesUsageStatsTest + : public testing::TestWithParam<SyncUpdatesUsageStatsTestCase> { + public: + SyncUpdatesUsageStatsTest() { CountryNames::SetLocaleString("en-US"); } - for (const TestCase& test_case : test_cases) { - SetUp(); - std::vector<std::unique_ptr<AutofillProfile>> profiles_from_web_db; + void SetUp() override { sync_processor_.reset(new MockSyncChangeProcessor); } - AutofillProfile profile(kGuid1, kHttpsOrigin); - profile.set_language_code("en"); - profile.set_use_count(test_case.local_use_count); - profile.set_use_date(test_case.local_use_date); - EXPECT_EQ(test_case.local_use_count, profile.use_count()); - EXPECT_EQ(test_case.local_use_date, profile.use_date()); - profiles_from_web_db.push_back(base::MakeUnique<AutofillProfile>(profile)); + // Wrapper around AutofillProfileSyncableService::MergeDataAndStartSyncing() + // that also verifies expectations. + void MergeDataAndStartSyncing( + std::vector<std::unique_ptr<AutofillProfile>> profiles_from_web_db, + const syncer::SyncDataList& data_list, + const MockAutofillProfileSyncableService::DataBundle& expected_bundle, + const syncer::SyncChangeList& expected_change_list) { + auto profile_returner = [&profiles_from_web_db]() { + return std::move(profiles_from_web_db); + }; + EXPECT_CALL(autofill_syncable_service_, LoadAutofillData(_)) + .Times(1) + .WillOnce(DoAll(LoadAutofillProfiles(profile_returner), Return(true))); + EXPECT_CALL(autofill_syncable_service_, + SaveChangesToWebData(DataBundleCheck(expected_bundle))) + .Times(1) + .WillOnce(Return(true)); + if (expected_change_list.empty()) { + EXPECT_CALL(*sync_processor_, ProcessSyncChanges(_, _)).Times(0); + } else { + ON_CALL(*sync_processor_, ProcessSyncChanges(_, _)) + .WillByDefault(Return(syncer::SyncError())); + EXPECT_CALL(*sync_processor_, + ProcessSyncChanges(_, CheckSyncChanges(expected_change_list))) + .Times(1) + .WillOnce(Return(syncer::SyncError())); + } - // Remote data has usage stats. - sync_pb::EntitySpecifics specifics; - sync_pb::AutofillProfileSpecifics* autofill_specifics = - specifics.mutable_autofill_profile(); - autofill_specifics->set_guid(profile.guid()); - autofill_specifics->set_origin(profile.origin()); - autofill_specifics->add_name_first(std::string()); - autofill_specifics->add_name_middle(std::string()); - autofill_specifics->add_name_last(std::string()); - autofill_specifics->add_name_full(std::string()); - autofill_specifics->add_email_address(std::string()); - autofill_specifics->add_phone_home_whole_number(std::string()); - autofill_specifics->set_address_home_language_code("en"); - autofill_specifics->set_use_count(test_case.remote_use_count); - autofill_specifics->set_use_date(test_case.remote_use_date); - EXPECT_TRUE(autofill_specifics->has_use_count()); - EXPECT_TRUE(autofill_specifics->has_use_date()); - - syncer::SyncDataList data_list; - data_list.push_back(syncer::SyncData::CreateLocalData( - profile.guid(), profile.guid(), specifics)); - - // Expect the local autofill profile to have usage stats after sync. - MockAutofillProfileSyncableService::DataBundle expected_bundle; - AutofillProfile expected_profile = profile; - expected_profile.set_use_count(test_case.synced_use_count); - expected_profile.set_use_date(test_case.synced_use_date); - expected_bundle.profiles_to_update.push_back(&expected_profile); - - // Expect no changes to remote data. - syncer::SyncChangeList expected_empty_change_list; - - MergeDataAndStartSyncing(std::move(profiles_from_web_db), data_list, - expected_bundle, expected_empty_change_list); - autofill_syncable_service_.StopSyncing(syncer::AUTOFILL_PROFILE); + // Takes ownership of sync_processor_. + autofill_syncable_service_.MergeDataAndStartSyncing( + syncer::AUTOFILL_PROFILE, data_list, std::move(sync_processor_), + std::unique_ptr<syncer::SyncErrorFactory>( + new syncer::SyncErrorFactoryMock())); } + + protected: + base::MessageLoop message_loop_; + MockAutofillProfileSyncableService autofill_syncable_service_; + std::unique_ptr<MockSyncChangeProcessor> sync_processor_; +}; + +TEST_P(SyncUpdatesUsageStatsTest, SyncUpdatesUsageStats) { + auto test_case = GetParam(); + SetUp(); + std::vector<std::unique_ptr<AutofillProfile>> profiles_from_web_db; + + AutofillProfile profile(kGuid1, kHttpsOrigin); + profile.set_language_code("en"); + profile.set_use_count(test_case.local_use_count); + profile.set_use_date(test_case.local_use_date); + EXPECT_EQ(test_case.local_use_count, profile.use_count()); + EXPECT_EQ(test_case.local_use_date, profile.use_date()); + profiles_from_web_db.push_back(base::MakeUnique<AutofillProfile>(profile)); + + // Remote data has usage stats. + sync_pb::EntitySpecifics specifics; + sync_pb::AutofillProfileSpecifics* autofill_specifics = + specifics.mutable_autofill_profile(); + autofill_specifics->set_guid(profile.guid()); + autofill_specifics->set_origin(profile.origin()); + autofill_specifics->add_name_first(std::string()); + autofill_specifics->add_name_middle(std::string()); + autofill_specifics->add_name_last(std::string()); + autofill_specifics->add_name_full(std::string()); + autofill_specifics->add_email_address(std::string()); + autofill_specifics->add_phone_home_whole_number(std::string()); + autofill_specifics->set_address_home_language_code("en"); + autofill_specifics->set_use_count(test_case.remote_use_count); + autofill_specifics->set_use_date(test_case.remote_use_date); + EXPECT_TRUE(autofill_specifics->has_use_count()); + EXPECT_TRUE(autofill_specifics->has_use_date()); + + syncer::SyncDataList data_list; + data_list.push_back(syncer::SyncData::CreateLocalData( + profile.guid(), profile.guid(), specifics)); + + // Expect the local autofill profile to have usage stats after sync. + MockAutofillProfileSyncableService::DataBundle expected_bundle; + AutofillProfile expected_profile = profile; + expected_profile.set_use_count(test_case.synced_use_count); + expected_profile.set_use_date(test_case.synced_use_date); + expected_bundle.profiles_to_update.push_back(&expected_profile); + + // Expect no changes to remote data. + syncer::SyncChangeList expected_empty_change_list; + + MergeDataAndStartSyncing(std::move(profiles_from_web_db), data_list, + expected_bundle, expected_empty_change_list); + autofill_syncable_service_.StopSyncing(syncer::AUTOFILL_PROFILE); } +INSTANTIATE_TEST_CASE_P( + AutofillProfileSyncableServiceTest, + SyncUpdatesUsageStatsTest, + testing::Values( + // Local profile with default stats. + SyncUpdatesUsageStatsTestCase{0U, base::Time(), 9U, 4321, 9U, + base::Time::FromTimeT(4321)}, + // Local profile has older stats than the server. + SyncUpdatesUsageStatsTestCase{3U, base::Time::FromTimeT(1234), 9U, 4321, + 9U, base::Time::FromTimeT(4321)}, + // Local profile has newer stats than the server + SyncUpdatesUsageStatsTestCase{10U, base::Time::FromTimeT(9999), 9U, + 4321, 9U, base::Time::FromTimeT(4321)})); + // Usage stats should be updated by the client. TEST_F(AutofillProfileSyncableServiceTest, ClientOverwritesUsageStats) { TestSyncChangeProcessor* sync_change_processor = new TestSyncChangeProcessor;
diff --git a/components/autofill/core/browser/webdata/autofill_table_unittest.cc b/components/autofill/core/browser/webdata/autofill_table_unittest.cc index 235dd062..58439067 100644 --- a/components/autofill/core/browser/webdata/autofill_table_unittest.cc +++ b/components/autofill/core/browser/webdata/autofill_table_unittest.cc
@@ -1955,61 +1955,112 @@ outputs.clear(); } -TEST_F(AutofillTableTest, GetFormValuesForElementName_SubstringMatchEnabled) { +const size_t kMaxCount = 2; +struct GetFormValuesTestCase { + const char* const field_suggestion[kMaxCount]; + const char* const field_contents; + size_t expected_suggestion_count; + const char* const expected_suggestion[kMaxCount]; +}; + +class GetFormValuesTest : public testing::TestWithParam<GetFormValuesTestCase> { + public: + GetFormValuesTest() {} + ~GetFormValuesTest() override {} + + protected: + void SetUp() override { + OSCryptMocker::SetUpWithSingleton(); + ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); + file_ = temp_dir_.GetPath().AppendASCII("TestWebDatabase"); + + table_.reset(new AutofillTable); + db_.reset(new WebDatabase); + db_->AddTable(table_.get()); + ASSERT_EQ(sql::INIT_OK, db_->Init(file_)); + } + + void TearDown() override { OSCryptMocker::TearDown(); } + + base::FilePath file_; + base::ScopedTempDir temp_dir_; + std::unique_ptr<AutofillTable> table_; + std::unique_ptr<WebDatabase> db_; + + private: + DISALLOW_COPY_AND_ASSIGN(GetFormValuesTest); +}; + +TEST_P(GetFormValuesTest, GetFormValuesForElementName_SubstringMatchEnabled) { // Token matching is currently behind a flag. base::CommandLine::ForCurrentProcess()->AppendSwitch( switches::kEnableSuggestionsWithSubstringMatch); - const size_t kMaxCount = 2; - const struct { - const char* const field_suggestion[kMaxCount]; - const char* const field_contents; - size_t expected_suggestion_count; - const char* const expected_suggestion[kMaxCount]; - } kTestCases[] = { - {{"user.test", "test_user"}, "TEST", 2, {"test_user", "user.test"}}, - {{"user test", "test-user"}, "user", 2, {"user test", "test-user"}}, - {{"user test", "test-rest"}, "user", 1, {"user test", nullptr}}, - {{"user@test", "test_user"}, "user@t", 1, {"user@test", nullptr}}, - {{"user.test", "test_user"}, "er.tes", 0, {nullptr, nullptr}}, - {{"user test", "test_user"}, "_ser", 0, {nullptr, nullptr}}, - {{"user.test", "test_user"}, "%ser", 0, {nullptr, nullptr}}, - {{"user.test", "test_user"}, - "; DROP TABLE autofill;", - 0, - {nullptr, nullptr}}, - }; + auto test_case = GetParam(); + SCOPED_TRACE(testing::Message() + << "suggestion = " << test_case.field_suggestion[0] + << ", contents = " << test_case.field_contents); - for (const auto& test_case : kTestCases) { - SCOPED_TRACE(testing::Message() - << "suggestion = " << test_case.field_suggestion[0] - << ", contents = " << test_case.field_contents); + Time t1 = Time::Now(); - Time t1 = Time::Now(); - - // Simulate the submission of a handful of entries in a field called "Name". - AutofillChangeList changes; - FormFieldData field; - for (size_t k = 0; k < kMaxCount; ++k) { - field.name = ASCIIToUTF16("Name"); - field.value = ASCIIToUTF16(test_case.field_suggestion[k]); - table_->AddFormFieldValue(field, &changes); - } - - std::vector<base::string16> v; - table_->GetFormValuesForElementName( - ASCIIToUTF16("Name"), ASCIIToUTF16(test_case.field_contents), &v, 6); - - EXPECT_EQ(test_case.expected_suggestion_count, v.size()); - for (size_t j = 0; j < test_case.expected_suggestion_count; ++j) { - EXPECT_EQ(ASCIIToUTF16(test_case.expected_suggestion[j]), v[j]); - } - - changes.clear(); - table_->RemoveFormElementsAddedBetween(t1, Time(), &changes); + // Simulate the submission of a handful of entries in a field called "Name". + AutofillChangeList changes; + FormFieldData field; + for (size_t k = 0; k < kMaxCount; ++k) { + field.name = ASCIIToUTF16("Name"); + field.value = ASCIIToUTF16(test_case.field_suggestion[k]); + table_->AddFormFieldValue(field, &changes); } + + std::vector<base::string16> v; + table_->GetFormValuesForElementName( + ASCIIToUTF16("Name"), ASCIIToUTF16(test_case.field_contents), &v, 6); + + EXPECT_EQ(test_case.expected_suggestion_count, v.size()); + for (size_t j = 0; j < test_case.expected_suggestion_count; ++j) { + EXPECT_EQ(ASCIIToUTF16(test_case.expected_suggestion[j]), v[j]); + } + + changes.clear(); + table_->RemoveFormElementsAddedBetween(t1, Time(), &changes); } +INSTANTIATE_TEST_CASE_P( + AutofillTableTest, + GetFormValuesTest, + testing::Values(GetFormValuesTestCase{{"user.test", "test_user"}, + "TEST", + 2, + {"test_user", "user.test"}}, + GetFormValuesTestCase{{"user test", "test-user"}, + "user", + 2, + {"user test", "test-user"}}, + GetFormValuesTestCase{{"user test", "test-rest"}, + "user", + 1, + {"user test", nullptr}}, + GetFormValuesTestCase{{"user@test", "test_user"}, + "user@t", + 1, + {"user@test", nullptr}}, + GetFormValuesTestCase{{"user.test", "test_user"}, + "er.tes", + 0, + {nullptr, nullptr}}, + GetFormValuesTestCase{{"user test", "test_user"}, + "_ser", + 0, + {nullptr, nullptr}}, + GetFormValuesTestCase{{"user.test", "test_user"}, + "%ser", + 0, + {nullptr, nullptr}}, + GetFormValuesTestCase{{"user.test", "test_user"}, + "; DROP TABLE autofill;", + 0, + {nullptr, nullptr}})); + TEST_F(AutofillTableTest, AutofillNoMetadata) { MetadataBatch metadata_batch; EXPECT_TRUE(table_->GetAllSyncMetadata(syncer::AUTOFILL, &metadata_batch));
diff --git a/components/autofill/core/common/autofill_regexes_unittest.cc b/components/autofill/core/common/autofill_regexes_unittest.cc index 107830d..a267e414 100644 --- a/components/autofill/core/common/autofill_regexes_unittest.cc +++ b/components/autofill/core/common/autofill_regexes_unittest.cc
@@ -16,194 +16,217 @@ namespace autofill { -TEST(AutofillRegexesTest, SampleRegexes) { - struct TestCase { - const char* const input; - const char* const pattern; +struct InputPatternTestCase { + const char* const input; + const char* const pattern; }; - const TestCase kPositiveCases[] = { - // Empty pattern - {"", ""}, - {"Look, ma' -- a non-empty string!", ""}, - // Substring - {"string", "tri"}, - // Substring at beginning - {"string", "str"}, - {"string", "^str"}, - // Substring at end - {"string", "ring"}, - {"string", "ring$"}, - // Case-insensitive - {"StRiNg", "string"}, - }; - for (const auto& test_case : kPositiveCases) { + class PositiveSampleTest + : public testing::TestWithParam<InputPatternTestCase> {}; + + TEST_P(PositiveSampleTest, SampleRegexes) { + auto test_case = GetParam(); SCOPED_TRACE(test_case.input); SCOPED_TRACE(test_case.pattern); EXPECT_TRUE(MatchesPattern(ASCIIToUTF16(test_case.input), ASCIIToUTF16(test_case.pattern))); } - const TestCase kNegativeCases[] = { - // Empty string - {"", "Look, ma' -- a non-empty pattern!"}, - // Substring - {"string", "trn"}, - // Substring at beginning - {"string", " str"}, - {"string", "^tri"}, - // Substring at end - {"string", "ring "}, - {"string", "rin$"}, - }; - for (const auto& test_case : kNegativeCases) { + INSTANTIATE_TEST_CASE_P(AutofillRegexes, + PositiveSampleTest, + testing::Values( + // Empty pattern + InputPatternTestCase{"", ""}, + InputPatternTestCase{ + "Look, ma' -- a non-empty string!", ""}, + // Substring + InputPatternTestCase{"string", "tri"}, + // Substring at beginning + InputPatternTestCase{"string", "str"}, + InputPatternTestCase{"string", "^str"}, + // Substring at end + InputPatternTestCase{"string", "ring"}, + InputPatternTestCase{"string", "ring$"}, + // Case-insensitive + InputPatternTestCase{"StRiNg", "string"})); + + class NegativeSampleTest + : public testing::TestWithParam<InputPatternTestCase> {}; + + TEST_P(NegativeSampleTest, SampleRegexes) { + auto test_case = GetParam(); SCOPED_TRACE(test_case.input); SCOPED_TRACE(test_case.pattern); EXPECT_FALSE(MatchesPattern(ASCIIToUTF16(test_case.input), ASCIIToUTF16(test_case.pattern))); - } } -TEST(AutofillRegexesTest, ExpirationDate2DigitYearRegexes) { - struct TestCase { - const char* const input; +INSTANTIATE_TEST_CASE_P(AutofillRegexes, + NegativeSampleTest, + testing::Values( + // Empty string + InputPatternTestCase{ + "", "Look, ma' -- a non-empty pattern!"}, + // Substring + InputPatternTestCase{"string", "trn"}, + // Substring at beginning + InputPatternTestCase{"string", " str"}, + InputPatternTestCase{"string", "^tri"}, + // Substring at end + InputPatternTestCase{"string", "ring "}, + InputPatternTestCase{"string", "rin$"})); + +struct InputTestCase { + const char* const input; }; - const base::string16 pattern = ASCIIToUTF16(kExpirationDate2DigitYearRe); + class ExpirationDate2DigitYearPositive + : public testing::TestWithParam<InputTestCase> {}; - const TestCase kPositiveCases[] = { - // Simple two year cases - {"mm / yy"}, - {"mm/ yy"}, - {"mm /yy"}, - {"mm/yy"}, - {"mm - yy"}, - {"mm- yy"}, - {"mm -yy"}, - {"mm-yy"}, - {"mmyy"}, - // Complex two year cases - {"Expiration Date (MM / YY)"}, - {"Expiration Date (MM/YY)"}, - {"Expiration Date (MM - YY)"}, - {"Expiration Date (MM-YY)"}, - {"Expiration Date MM / YY"}, - {"Expiration Date MM/YY"}, - {"Expiration Date MM - YY"}, - {"Expiration Date MM-YY"}, - {"expiration date yy"}, - {"Exp Date (MM / YY)"}, - }; - - for (const auto& test_case : kPositiveCases) { + TEST_P(ExpirationDate2DigitYearPositive, ExpirationDate2DigitYearRegexes) { + auto test_case = GetParam(); SCOPED_TRACE(test_case.input); - EXPECT_TRUE(MatchesPattern(ASCIIToUTF16(test_case.input),pattern)); + const base::string16 pattern = ASCIIToUTF16(kExpirationDate2DigitYearRe); + EXPECT_TRUE(MatchesPattern(ASCIIToUTF16(test_case.input), pattern)); } - const TestCase kNegativeCases[] = { - {""}, - {"Look, ma' -- an invalid string!"}, - {"mmfavouritewordyy"}, - {"mm a yy"}, - {"mm a yyyy"}, - // Simple four year cases - {"mm / yyyy"}, - {"mm/ yyyy"}, - {"mm /yyyy"}, - {"mm/yyyy"}, - {"mm - yyyy"}, - {"mm- yyyy"}, - {"mm -yyyy"}, - {"mm-yyyy"}, - {"mmyyyy"}, - // Complex four year cases - {"Expiration Date (MM / YYYY)"}, - {"Expiration Date (MM/YYYY)"}, - {"Expiration Date (MM - YYYY)"}, - {"Expiration Date (MM-YYYY)"}, - {"Expiration Date MM / YYYY"}, - {"Expiration Date MM/YYYY"}, - {"Expiration Date MM - YYYY"}, - {"Expiration Date MM-YYYY"}, - {"expiration date yyyy"}, - {"Exp Date (MM / YYYY)"}, - }; + INSTANTIATE_TEST_CASE_P( + AutofillRegexes, + ExpirationDate2DigitYearPositive, + testing::Values(InputTestCase{"mm / yy"}, + InputTestCase{"mm/ yy"}, + InputTestCase{"mm /yy"}, + InputTestCase{"mm/yy"}, + InputTestCase{"mm - yy"}, + InputTestCase{"mm- yy"}, + InputTestCase{"mm -yy"}, + InputTestCase{"mm-yy"}, + InputTestCase{"mmyy"}, + // Complex two year cases + InputTestCase{"Expiration Date (MM / YY)"}, + InputTestCase{"Expiration Date (MM/YY)"}, + InputTestCase{"Expiration Date (MM - YY)"}, + InputTestCase{"Expiration Date (MM-YY)"}, + InputTestCase{"Expiration Date MM / YY"}, + InputTestCase{"Expiration Date MM/YY"}, + InputTestCase{"Expiration Date MM - YY"}, + InputTestCase{"Expiration Date MM-YY"}, + InputTestCase{"expiration date yy"}, + InputTestCase{"Exp Date (MM / YY)"})); - for (const auto& test_case : kNegativeCases) { + class ExpirationDate2DigitYearNegative + : public testing::TestWithParam<InputTestCase> {}; + + TEST_P(ExpirationDate2DigitYearNegative, ExpirationDate2DigitYearRegexes) { + auto test_case = GetParam(); SCOPED_TRACE(test_case.input); + const base::string16 pattern = ASCIIToUTF16(kExpirationDate2DigitYearRe); EXPECT_FALSE(MatchesPattern(ASCIIToUTF16(test_case.input), pattern)); } -} -TEST(AutofillRegexesTest, ExpirationDate4DigitYearRegexes) { - struct TestCase { - const char* const input; - }; + INSTANTIATE_TEST_CASE_P( + AutofillRegexes, + ExpirationDate2DigitYearNegative, + testing::Values(InputTestCase{""}, + InputTestCase{"Look, ma' -- an invalid string!"}, + InputTestCase{"mmfavouritewordyy"}, + InputTestCase{"mm a yy"}, + InputTestCase{"mm a yyyy"}, + // Simple four year cases + InputTestCase{"mm / yyyy"}, + InputTestCase{"mm/ yyyy"}, + InputTestCase{"mm /yyyy"}, + InputTestCase{"mm/yyyy"}, + InputTestCase{"mm - yyyy"}, + InputTestCase{"mm- yyyy"}, + InputTestCase{"mm -yyyy"}, + InputTestCase{"mm-yyyy"}, + InputTestCase{"mmyyyy"}, + // Complex four year cases + InputTestCase{"Expiration Date (MM / YYYY)"}, + InputTestCase{"Expiration Date (MM/YYYY)"}, + InputTestCase{"Expiration Date (MM - YYYY)"}, + InputTestCase{"Expiration Date (MM-YYYY)"}, + InputTestCase{"Expiration Date MM / YYYY"}, + InputTestCase{"Expiration Date MM/YYYY"}, + InputTestCase{"Expiration Date MM - YYYY"}, + InputTestCase{"Expiration Date MM-YYYY"}, + InputTestCase{"expiration date yyyy"}, + InputTestCase{"Exp Date (MM / YYYY)"})); - const base::string16 pattern = ASCIIToUTF16(kExpirationDate4DigitYearRe); + class ExpirationDate4DigitYearPositive + : public testing::TestWithParam<InputTestCase> {}; - const TestCase kPositiveCases[] = { - // Simple four year cases - {"mm / yyyy"}, - {"mm/ yyyy"}, - {"mm /yyyy"}, - {"mm/yyyy"}, - {"mm - yyyy"}, - {"mm- yyyy"}, - {"mm -yyyy"}, - {"mm-yyyy"}, - {"mmyyyy"}, - // Complex four year cases - {"Expiration Date (MM / YYYY)"}, - {"Expiration Date (MM/YYYY)"}, - {"Expiration Date (MM - YYYY)"}, - {"Expiration Date (MM-YYYY)"}, - {"Expiration Date MM / YYYY"}, - {"Expiration Date MM/YYYY"}, - {"Expiration Date MM - YYYY"}, - {"Expiration Date MM-YYYY"}, - {"expiration date yyyy"}, - {"Exp Date (MM / YYYY)"}, - }; - - for (const auto& test_case : kPositiveCases) { + TEST_P(ExpirationDate4DigitYearPositive, ExpirationDate4DigitYearRegexes) { + auto test_case = GetParam(); + const base::string16 pattern = ASCIIToUTF16(kExpirationDate4DigitYearRe); SCOPED_TRACE(test_case.input); - EXPECT_TRUE(MatchesPattern(ASCIIToUTF16(test_case.input),pattern)); + EXPECT_TRUE(MatchesPattern(ASCIIToUTF16(test_case.input), pattern)); } - const TestCase kNegativeCases[] = { - {""}, - {"Look, ma' -- an invalid string!"}, - {"mmfavouritewordyy"}, - {"mm a yy"}, - {"mm a yyyy"}, - // Simple two year cases - {"mm / yy"}, - {"mm/ yy"}, - {"mm /yy"}, - {"mm/yy"}, - {"mm - yy"}, - {"mm- yy"}, - {"mm -yy"}, - {"mm-yy"}, - {"mmyy"}, - // Complex two year cases - {"Expiration Date (MM / YY)"}, - {"Expiration Date (MM/YY)"}, - {"Expiration Date (MM - YY)"}, - {"Expiration Date (MM-YY)"}, - {"Expiration Date MM / YY"}, - {"Expiration Date MM/YY"}, - {"Expiration Date MM - YY"}, - {"Expiration Date MM-YY"}, - {"expiration date yy"}, - {"Exp Date (MM / YY)"}, - }; + INSTANTIATE_TEST_CASE_P(AutofillRegexes, + ExpirationDate4DigitYearPositive, + testing::Values( + // Simple four year cases + InputTestCase{"mm / yyyy"}, + InputTestCase{"mm/ yyyy"}, + InputTestCase{"mm /yyyy"}, + InputTestCase{"mm/yyyy"}, + InputTestCase{"mm - yyyy"}, + InputTestCase{"mm- yyyy"}, + InputTestCase{"mm -yyyy"}, + InputTestCase{"mm-yyyy"}, + InputTestCase{"mmyyyy"}, + // Complex four year cases + InputTestCase{"Expiration Date (MM / YYYY)"}, + InputTestCase{"Expiration Date (MM/YYYY)"}, + InputTestCase{"Expiration Date (MM - YYYY)"}, + InputTestCase{"Expiration Date (MM-YYYY)"}, + InputTestCase{"Expiration Date MM / YYYY"}, + InputTestCase{"Expiration Date MM/YYYY"}, + InputTestCase{"Expiration Date MM - YYYY"}, + InputTestCase{"Expiration Date MM-YYYY"}, + InputTestCase{"expiration date yyyy"}, + InputTestCase{"Exp Date (MM / YYYY)"})); - for (const auto& test_case : kNegativeCases) { + class ExpirationDate4DigitYearNegative + : public testing::TestWithParam<InputTestCase> {}; + + TEST_P(ExpirationDate4DigitYearNegative, ExpirationDate4DigitYearRegexes) { + auto test_case = GetParam(); + const base::string16 pattern = ASCIIToUTF16(kExpirationDate4DigitYearRe); SCOPED_TRACE(test_case.input); EXPECT_FALSE(MatchesPattern(ASCIIToUTF16(test_case.input), pattern)); - } } +INSTANTIATE_TEST_CASE_P( + AutofillRegexes, + ExpirationDate4DigitYearNegative, + testing::Values(InputTestCase{""}, + InputTestCase{"Look, ma' -- an invalid string!"}, + InputTestCase{"mmfavouritewordyy"}, + InputTestCase{"mm a yy"}, + InputTestCase{"mm a yyyy"}, + // Simple two year cases + InputTestCase{"mm / yy"}, + InputTestCase{"mm/ yy"}, + InputTestCase{"mm /yy"}, + InputTestCase{"mm/yy"}, + InputTestCase{"mm - yy"}, + InputTestCase{"mm- yy"}, + InputTestCase{"mm -yy"}, + InputTestCase{"mm-yy"}, + InputTestCase{"mmyy"}, + // Complex two year cases + InputTestCase{"Expiration Date (MM / YY)"}, + InputTestCase{"Expiration Date (MM/YY)"}, + InputTestCase{"Expiration Date (MM - YY)"}, + InputTestCase{"Expiration Date (MM-YY)"}, + InputTestCase{"Expiration Date MM / YY"}, + InputTestCase{"Expiration Date MM/YY"}, + InputTestCase{"Expiration Date MM - YY"}, + InputTestCase{"Expiration Date MM-YY"}, + InputTestCase{"expiration date yy"}, + InputTestCase{"Exp Date (MM / YY)"})); + } // namespace autofill
diff --git a/components/autofill/core/common/autofill_util_unittest.cc b/components/autofill/core/common/autofill_util_unittest.cc index 2115b3e..6e04dc7 100644 --- a/components/autofill/core/common/autofill_util_unittest.cc +++ b/components/autofill/core/common/autofill_util_unittest.cc
@@ -15,7 +15,18 @@ namespace autofill { // Tests for FieldIsSuggestionSubstringStartingOnTokenBoundary(). -TEST(AutofillUtilTest, FieldIsSuggestionSubstringStartingOnTokenBoundary) { +struct FieldIsTokenBoundarySubstringCase { + const char* const field_suggestion; + const char* const field_contents; + const bool case_sensitive; + const bool expected_result; +}; + +class FieldIsTokenBoundarySubstringCaseTest + : public testing::TestWithParam<FieldIsTokenBoundarySubstringCase> {}; + +TEST_P(FieldIsTokenBoundarySubstringCaseTest, + FieldIsSuggestionSubstringStartingOnTokenBoundary) { // FieldIsSuggestionSubstringStartingOnTokenBoundary should not work yet // without a flag. EXPECT_FALSE(FieldIsSuggestionSubstringStartingOnTokenBoundary( @@ -25,106 +36,124 @@ base::CommandLine::ForCurrentProcess()->AppendSwitch( switches::kEnableSuggestionsWithSubstringMatch); - const struct { - const char* const field_suggestion; - const char* const field_contents; - bool case_sensitive; - bool expected_result; - } kTestCases[] = { - {"ab@cd.b", "a", false, true}, - {"ab@cd.b", "b", false, true}, - {"ab@cd.b", "Ab", false, true}, - {"ab@cd.b", "Ab", true, false}, - {"ab@cd.b", "cd", true, true}, - {"ab@cd.b", "d", false, false}, - {"ab@cd.b", "b@", true, false}, - {"ab@cd.b", "ab", false, true}, - {"ab@cd.b", "cd.b", true, true}, - {"ab@cd.b", "b@cd", false, false}, - {"ab@cd.b", "ab@c", false, true}, - {"ba.a.ab", "a.a", false, true}, - {"", "ab", false, false}, - {"", "ab", true, false}, - {"ab", "", false, true}, - {"ab", "", true, true}, - }; + auto test_case = GetParam(); + SCOPED_TRACE(testing::Message() + << "suggestion = " << test_case.field_suggestion + << ", contents = " << test_case.field_contents + << ", case_sensitive = " << test_case.case_sensitive); - for (const auto& test_case : kTestCases) { - SCOPED_TRACE(testing::Message() - << "suggestion = " << test_case.field_suggestion - << ", contents = " << test_case.field_contents - << ", case_sensitive = " << test_case.case_sensitive); - - EXPECT_EQ(test_case.expected_result, - FieldIsSuggestionSubstringStartingOnTokenBoundary( - base::ASCIIToUTF16(test_case.field_suggestion), - base::ASCIIToUTF16(test_case.field_contents), - test_case.case_sensitive)); - } + EXPECT_EQ(test_case.expected_result, + FieldIsSuggestionSubstringStartingOnTokenBoundary( + base::ASCIIToUTF16(test_case.field_suggestion), + base::ASCIIToUTF16(test_case.field_contents), + test_case.case_sensitive)); } +INSTANTIATE_TEST_CASE_P( + AutofillUtilTest, + FieldIsTokenBoundarySubstringCaseTest, + testing::Values( + FieldIsTokenBoundarySubstringCase{"ab@cd.b", "a", false, true}, + FieldIsTokenBoundarySubstringCase{"ab@cd.b", "b", false, true}, + FieldIsTokenBoundarySubstringCase{"ab@cd.b", "Ab", false, true}, + FieldIsTokenBoundarySubstringCase{"ab@cd.b", "Ab", true, false}, + FieldIsTokenBoundarySubstringCase{"ab@cd.b", "cd", true, true}, + FieldIsTokenBoundarySubstringCase{"ab@cd.b", "d", false, false}, + FieldIsTokenBoundarySubstringCase{"ab@cd.b", "b@", true, false}, + FieldIsTokenBoundarySubstringCase{"ab@cd.b", "ab", false, true}, + FieldIsTokenBoundarySubstringCase{"ab@cd.b", "cd.b", true, true}, + FieldIsTokenBoundarySubstringCase{"ab@cd.b", "b@cd", false, false}, + FieldIsTokenBoundarySubstringCase{"ab@cd.b", "ab@c", false, true}, + FieldIsTokenBoundarySubstringCase{"ba.a.ab", "a.a", false, true}, + FieldIsTokenBoundarySubstringCase{"", "ab", false, false}, + FieldIsTokenBoundarySubstringCase{"", "ab", true, false}, + FieldIsTokenBoundarySubstringCase{"ab", "", false, true}, + FieldIsTokenBoundarySubstringCase{"ab", "", true, true})); + // Tests for GetTextSelectionStart(). -TEST(AutofillUtilTest, GetTextSelectionStart) { - const size_t kInvalid = base::string16::npos; - const struct { - const char* const field_suggestion; - const char* const field_contents; - bool case_sensitive; - size_t expected_start; - } kTestCases[] = { - {"ab@cd.b", "a", false, 1}, - {"ab@cd.b", "A", true, kInvalid}, - {"ab@cd.b", "Ab", false, 2}, - {"ab@cd.b", "Ab", true, kInvalid}, - {"ab@cd.b", "cd", false, 5}, - {"ab@cd.b", "ab@c", false, 4}, - {"ab@cd.b", "cd.b", false, 7}, - {"ab@cd.b", "b@cd", false, kInvalid}, - {"ab@cd.b", "b", false, 7}, - {"ba.a.ab", "a.a", false, 6}, - {"texample@example.com", "example", false, 16}, - }; +struct GetTextSelectionStartCase { + const char* const field_suggestion; + const char* const field_contents; + const bool case_sensitive; + const size_t expected_start; +}; - for (const auto& test_case : kTestCases) { - SCOPED_TRACE(testing::Message() - << "suggestion = " << test_case.field_suggestion - << ", contents = " << test_case.field_contents - << ", case_sensitive = " << test_case.case_sensitive); +class GetTextSelectionStartTest + : public testing::TestWithParam<GetTextSelectionStartCase> {}; - EXPECT_EQ( - test_case.expected_start, - GetTextSelectionStart(base::ASCIIToUTF16(test_case.field_suggestion), - base::ASCIIToUTF16(test_case.field_contents), - test_case.case_sensitive)); - } +TEST_P(GetTextSelectionStartTest, GetTextSelectionStart) { + auto test_case = GetParam(); + SCOPED_TRACE(testing::Message() + << "suggestion = " << test_case.field_suggestion + << ", contents = " << test_case.field_contents + << ", case_sensitive = " << test_case.case_sensitive); + EXPECT_EQ( + test_case.expected_start, + GetTextSelectionStart(base::ASCIIToUTF16(test_case.field_suggestion), + base::ASCIIToUTF16(test_case.field_contents), + test_case.case_sensitive)); } +INSTANTIATE_TEST_CASE_P( + AutofillUtilTest, + GetTextSelectionStartTest, + testing::Values( + GetTextSelectionStartCase{"ab@cd.b", "a", false, 1}, + GetTextSelectionStartCase{"ab@cd.b", "A", true, base::string16::npos}, + GetTextSelectionStartCase{"ab@cd.b", "Ab", false, 2}, + GetTextSelectionStartCase{"ab@cd.b", "Ab", true, base::string16::npos}, + GetTextSelectionStartCase{"ab@cd.b", "cd", false, 5}, + GetTextSelectionStartCase{"ab@cd.b", "ab@c", false, 4}, + GetTextSelectionStartCase{"ab@cd.b", "cd.b", false, 7}, + GetTextSelectionStartCase{"ab@cd.b", "b@cd", false, + base::string16::npos}, + GetTextSelectionStartCase{"ab@cd.b", "b", false, 7}, + GetTextSelectionStartCase{"ba.a.ab", "a.a", false, 6}, + GetTextSelectionStartCase{"texample@example.com", "example", false, + 16})); + // Tests for LowercaseAndTokenizeAttributeString -TEST(AutofillUtilTest, LowercaseAndTokenizeAttributeString) { - const struct { - const char* const attribute; - std::vector<std::string> tokens; - } kTestCases[] = { - // Test leading and trailing whitespace, test tabs and newlines - {"foo bar baz", {"foo", "bar", "baz"}}, - {" foo bar baz ", {"foo", "bar", "baz"}}, - {"foo\tbar baz ", {"foo", "bar", "baz"}}, - {"foo\nbar baz ", {"foo", "bar", "baz"}}, +struct LowercaseAndTokenizeAttributeStringCase { + const char* const attribute; + std::vector<std::string> tokens; +}; - // Test different forms of capitalization - {"FOO BAR BAZ", {"foo", "bar", "baz"}}, - {"foO baR bAz", {"foo", "bar", "baz"}}, +class LowercaseAndTokenizeAttributeStringTest + : public testing::TestWithParam<LowercaseAndTokenizeAttributeStringCase> {}; - // Test collapsing of multiple whitespace characters in a row - {" \t\t\n\n ", std::vector<std::string>()}, - {"foO baR bAz", {"foo", "bar", "baz"}}, - }; +TEST_P(LowercaseAndTokenizeAttributeStringTest, + LowercaseAndTokenizeAttributeStringTest) { + auto test_case = GetParam(); + SCOPED_TRACE(testing::Message() << "attribute = " << test_case.attribute); - for (const auto& test_case : kTestCases) { - SCOPED_TRACE(testing::Message() << "attribute = " << test_case.attribute); - - EXPECT_EQ(test_case.tokens, - LowercaseAndTokenizeAttributeString(test_case.attribute)); - } + EXPECT_EQ(test_case.tokens, + LowercaseAndTokenizeAttributeString(test_case.attribute)); } + +INSTANTIATE_TEST_CASE_P( + AutofillUtilTest, + LowercaseAndTokenizeAttributeStringTest, + testing::Values( + // Test leading and trailing whitespace, test tabs and newlines + LowercaseAndTokenizeAttributeStringCase{"foo bar baz", + {"foo", "bar", "baz"}}, + LowercaseAndTokenizeAttributeStringCase{" foo bar baz ", + {"foo", "bar", "baz"}}, + LowercaseAndTokenizeAttributeStringCase{"foo\tbar baz ", + {"foo", "bar", "baz"}}, + LowercaseAndTokenizeAttributeStringCase{"foo\nbar baz ", + {"foo", "bar", "baz"}}, + + // Test different forms of capitalization + LowercaseAndTokenizeAttributeStringCase{"FOO BAR BAZ", + {"foo", "bar", "baz"}}, + LowercaseAndTokenizeAttributeStringCase{"foO baR bAz", + {"foo", "bar", "baz"}}, + + // Test collapsing of multiple whitespace characters in a row + LowercaseAndTokenizeAttributeStringCase{" \t\t\n\n ", + std::vector<std::string>()}, + LowercaseAndTokenizeAttributeStringCase{"foO baR bAz", + {"foo", "bar", "baz"}})); + } // namespace autofill
diff --git a/components/autofill_strings.grdp b/components/autofill_strings.grdp index 22cf48f..73c48b7 100644 --- a/components/autofill_strings.grdp +++ b/components/autofill_strings.grdp
@@ -343,4 +343,10 @@ <message name="IDS_AUTOFILL_DIALOG_PLACEHOLDER_CVC" desc="The placeholder/label text for credit card verification code in the requestAutocomplete dialog."> CVC </message> + <message name="IDS_AUTOFILL_LOADING_REGIONS" desc="The string to display in the regions combo box while loading the region data."> + Loading... + </message> + <message name="IDS_AUTOFILL_FAILED_LOADING_REGIONS" desc="The string to display in the regions combo box when loading the region data failed."> + Failed loading regions data + </message> </grit-part>
diff --git a/components/browser_watcher/exit_code_watcher_win_unittest.cc b/components/browser_watcher/exit_code_watcher_win_unittest.cc index 9c1a074..1d5badf 100644 --- a/components/browser_watcher/exit_code_watcher_win_unittest.cc +++ b/components/browser_watcher/exit_code_watcher_win_unittest.cc
@@ -41,36 +41,37 @@ } ~ScopedSleeperProcess() { - if (process_.IsValid()) { - process_.Terminate(-1, false); - EXPECT_TRUE(process_.WaitForExit(nullptr)); + if (spawn_child_.process.IsValid()) { + spawn_child_.process.Terminate(-1, false); + EXPECT_TRUE(spawn_child_.process.WaitForExit(nullptr)); } } void Launch() { - ASSERT_FALSE(process_.IsValid()); + ASSERT_FALSE(spawn_child_.process.IsValid()); base::CommandLine cmd_line(base::GetMultiProcessTestChildBaseCommandLine()); base::LaunchOptions options; options.start_hidden = true; - process_ = base::SpawnMultiProcessTestChild("Sleeper", cmd_line, options); - ASSERT_TRUE(process_.IsValid()); + spawn_child_ = + base::SpawnMultiProcessTestChild("Sleeper", cmd_line, options); + ASSERT_TRUE(spawn_child_.process.IsValid()); } void Kill(int exit_code, bool wait) { - ASSERT_TRUE(process_.IsValid()); + ASSERT_TRUE(spawn_child_.process.IsValid()); ASSERT_FALSE(is_killed_); - process_.Terminate(exit_code, false); + spawn_child_.process.Terminate(exit_code, false); int seen_exit_code = 0; - EXPECT_TRUE(process_.WaitForExit(&seen_exit_code)); + EXPECT_TRUE(spawn_child_.process.WaitForExit(&seen_exit_code)); EXPECT_EQ(exit_code, seen_exit_code); is_killed_ = true; } - const base::Process& process() const { return process_; } + const base::Process& process() const { return spawn_child_.process; } private: - base::Process process_; + base::SpawnChildResult spawn_child_; bool is_killed_; };
diff --git a/components/crash/content/app/fallback_crash_handler_launcher_win_unittest.cc b/components/crash/content/app/fallback_crash_handler_launcher_win_unittest.cc index c19ae79..07340432 100644 --- a/components/crash/content/app/fallback_crash_handler_launcher_win_unittest.cc +++ b/components/crash/content/app/fallback_crash_handler_launcher_win_unittest.cc
@@ -143,9 +143,10 @@ // Because this process is heavily multithreaded it's going to be flaky // and generally fraught with peril to try and grab a minidump of it. // Instead, fire off a sacrificial process to do the testing. - base::Process test_process = SpawnChild("TestCrashHandlerLauncherMain"); + base::SpawnChildResult spawn_child = + SpawnChild("TestCrashHandlerLauncherMain"); int exit_code = 0; - ASSERT_TRUE(test_process.WaitForExit(&exit_code)); + ASSERT_TRUE(spawn_child.process.WaitForExit(&exit_code)); ASSERT_EQ(0, exit_code); }
diff --git a/components/crash/content/app/fallback_crash_handler_win_unittest.cc b/components/crash/content/app/fallback_crash_handler_win_unittest.cc index 13ca131..92c008e 100644 --- a/components/crash/content/app/fallback_crash_handler_win_unittest.cc +++ b/components/crash/content/app/fallback_crash_handler_win_unittest.cc
@@ -169,12 +169,12 @@ cmd_line.AppendSwitchPath("directory", database_dir_.GetPath()); base::LaunchOptions options; options.start_hidden = true; - base::Process test_child = base::SpawnMultiProcessTestChild( + base::SpawnChildResult spawn_child = base::SpawnMultiProcessTestChild( "FallbackCrashHandlerWinMain", cmd_line, options); - ASSERT_TRUE(test_child.IsValid()); + ASSERT_TRUE(spawn_child.process.IsValid()); int exit_code = -1; - ASSERT_TRUE(test_child.WaitForExit(&exit_code)); + ASSERT_TRUE(spawn_child.process.WaitForExit(&exit_code)); ASSERT_EQ(0, exit_code); // Validate that the database contains one valid crash dump.
diff --git a/components/crash/content/app/fallback_crash_handling_win_unittest.cc b/components/crash/content/app/fallback_crash_handling_win_unittest.cc index 7df6b20..02d69c5 100644 --- a/components/crash/content/app/fallback_crash_handling_win_unittest.cc +++ b/components/crash/content/app/fallback_crash_handling_win_unittest.cc
@@ -62,12 +62,12 @@ base::LaunchOptions options; options.start_hidden = true; - base::Process test_child = base::SpawnMultiProcessTestChild( + base::SpawnChildResult spawn_child = base::SpawnMultiProcessTestChild( "FallbackCrashHandlingWinRunHandler", cmd_line, options); - ASSERT_TRUE(test_child.IsValid()); + ASSERT_TRUE(spawn_child.process.IsValid()); int exit_code = -1; - ASSERT_TRUE(test_child.WaitForExit(&exit_code)); + ASSERT_TRUE(spawn_child.process.WaitForExit(&exit_code)); ASSERT_EQ(kFallbackCrashTerminationCode, static_cast<uint32_t>(exit_code)); // Validate that the database contains one valid crash dump.
diff --git a/components/display_compositor/compositor_overlay_candidate_validator_ozone.cc b/components/display_compositor/compositor_overlay_candidate_validator_ozone.cc index b044623a..901076a 100644 --- a/components/display_compositor/compositor_overlay_candidate_validator_ozone.cc +++ b/components/display_compositor/compositor_overlay_candidate_validator_ozone.cc
@@ -29,18 +29,6 @@ } // namespace -static gfx::BufferFormat GetBufferFormat(cc::ResourceFormat overlay_format) { - switch (overlay_format) { - // TODO(dshwang): overlay video still uses RGBA_8888. - case cc::RGBA_8888: - case cc::BGRA_8888: - return gfx::BufferFormat::BGRA_8888; - default: - NOTREACHED(); - return gfx::BufferFormat::BGRA_8888; - } -} - // |overlay_candidates| is an object used to answer questions about possible // overlays configuarations. // |strategies_string| is a comma-separated string containing all the overaly @@ -111,7 +99,7 @@ for (size_t i = 0; i < surfaces->size(); i++) { ozone_surface_list.at(i).transform = surfaces->at(i).transform; - ozone_surface_list.at(i).format = GetBufferFormat(surfaces->at(i).format); + ozone_surface_list.at(i).format = surfaces->at(i).format; ozone_surface_list.at(i).display_rect = surfaces->at(i).display_rect; ozone_surface_list.at(i).crop_rect = surfaces->at(i).uv_rect; ozone_surface_list.at(i).quad_rect_in_target_space =
diff --git a/components/exo/wayland/clients/client_base.cc b/components/exo/wayland/clients/client_base.cc index d423ac4..4e347ea 100644 --- a/components/exo/wayland/clients/client_base.cc +++ b/components/exo/wayland/clients/client_base.cc
@@ -126,21 +126,25 @@ return eglGetProcAddress(name); }); } + +zwp_linux_buffer_params_v1_listener g_params_listener = { + LinuxBufferParamsCreated, LinuxBufferParamsFailed}; #endif wl_registry_listener g_registry_listener = {RegistryHandler, RegistryRemover}; wl_buffer_listener g_buffer_listener = {BufferRelease}; -zwp_linux_buffer_params_v1_listener g_params_listener = { - LinuxBufferParamsCreated, LinuxBufferParamsFailed}; - } // namespace //////////////////////////////////////////////////////////////////////////////// // ClientBase::InitParams, public: -ClientBase::InitParams::InitParams() {} +ClientBase::InitParams::InitParams() { +#if defined(OZONE_PLATFORM_GBM) + drm_format = DRM_FORMAT_ABGR8888; +#endif +} ClientBase::InitParams::~InitParams() {} @@ -366,8 +370,8 @@ std::unique_ptr<ClientBase::Buffer> ClientBase::CreateBuffer( int32_t drm_format) { -#if defined(OZONE_PLATFORM_GBM) std::unique_ptr<Buffer> buffer(new Buffer()); +#if defined(OZONE_PLATFORM_GBM) if (device_) { buffer->bo.reset(gbm_bo_create(device_.get(), width_, height_, drm_format, GBM_BO_USE_SCANOUT | GBM_BO_USE_RENDERING));
diff --git a/components/exo/wayland/clients/client_base.h b/components/exo/wayland/clients/client_base.h index ce10e44..be00a8c 100644 --- a/components/exo/wayland/clients/client_base.h +++ b/components/exo/wayland/clients/client_base.h
@@ -5,8 +5,6 @@ #ifndef COMPONENTS_EXO_WAYLAND_CLIENTS_CLIENT_BASE_H_ #define COMPONENTS_EXO_WAYLAND_CLIENTS_CLIENT_BASE_H_ -#include <drm_fourcc.h> - #include <memory> #include <string> #include <vector> @@ -44,7 +42,7 @@ bool transparent_background = false; bool use_drm = false; std::string use_drm_value; - int32_t drm_format = DRM_FORMAT_ABGR8888; + int32_t drm_format = 0; }; struct Globals {
diff --git a/components/nacl/browser/nacl_browser.cc b/components/nacl/browser/nacl_browser.cc index 579d312..1d9f29d 100644 --- a/components/nacl/browser/nacl_browser.cc +++ b/components/nacl/browser/nacl_browser.cc
@@ -16,6 +16,7 @@ #include "base/pickle.h" #include "base/rand_util.h" #include "base/single_thread_task_runner.h" +#include "base/task_scheduler/post_task.h" #include "base/threading/thread_task_runner_handle.h" #include "base/time/time.h" #include "build/build_config.h" @@ -375,13 +376,13 @@ // We can get away not giving this a sequence ID because this is the first // task and further file access will not occur until after we get a // response. - if (!content::BrowserThread::PostBlockingPoolTaskAndReply( - FROM_HERE, - base::Bind(ReadCache, validation_cache_file_path_, data), - base::Bind(&NaClBrowser::OnValidationCacheLoaded, - base::Unretained(this), base::Owned(data)))) { - RunWithoutValidationCache(); - } + base::PostTaskWithTraitsAndReply( + FROM_HERE, + base::TaskTraits().MayBlock().WithPriority( + base::TaskPriority::BACKGROUND), + base::Bind(ReadCache, validation_cache_file_path_, data), + base::Bind(&NaClBrowser::OnValidationCacheLoaded, + base::Unretained(this), base::Owned(data))); } else { RunWithoutValidationCache(); }
diff --git a/components/nacl/browser/nacl_host_message_filter.cc b/components/nacl/browser/nacl_host_message_filter.cc index c8d0ebfe..a3125a7 100644 --- a/components/nacl/browser/nacl_host_message_filter.cc +++ b/components/nacl/browser/nacl_host_message_filter.cc
@@ -9,6 +9,7 @@ #include <utility> #include "base/sys_info.h" +#include "base/task_scheduler/post_task.h" #include "build/build_config.h" #include "components/nacl/browser/bad_message.h" #include "components/nacl/browser/nacl_browser.h" @@ -193,13 +194,14 @@ // Process a list of resource file URLs in // |launch_params.resource_files_to_prefetch|. - content::BrowserThread::PostBlockingPoolTask( + base::PostTaskWithTraits( FROM_HERE, - base::Bind(&NaClHostMessageFilter::BatchOpenResourceFiles, - this, - safe_launch_params, - reply_msg, - permissions)); + base::TaskTraits() + .MayBlock() + .WithPriority(base::TaskPriority::USER_BLOCKING) + .WithShutdownBehavior(base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN), + base::Bind(&NaClHostMessageFilter::BatchOpenResourceFiles, this, + safe_launch_params, reply_msg, permissions)); } void NaClHostMessageFilter::BatchOpenResourceFiles(
diff --git a/components/nacl/browser/nacl_process_host.cc b/components/nacl/browser/nacl_process_host.cc index 989de24..d92d9cc 100644 --- a/components/nacl/browser/nacl_process_host.cc +++ b/components/nacl/browser/nacl_process_host.cc
@@ -30,6 +30,7 @@ #include "base/strings/stringprintf.h" #include "base/strings/utf_string_conversions.h" #include "base/sys_byteorder.h" +#include "base/task_scheduler/post_task.h" #include "base/threading/sequenced_worker_pool.h" #include "base/threading/thread_task_runner_handle.h" #include "build/build_config.h" @@ -838,18 +839,14 @@ // We have to reopen the file in the browser process; we don't want a // compromised renderer to pass an arbitrary fd that could get loaded // into the plugin process. - if (base::PostTaskAndReplyWithResult( - content::BrowserThread::GetBlockingPool(), - FROM_HERE, - base::Bind(OpenNaClReadExecImpl, - file_path, - true /* is_executable */), - base::Bind(&NaClProcessHost::StartNaClFileResolved, - weak_factory_.GetWeakPtr(), - params, - file_path))) { - return true; - } + base::PostTaskWithTraitsAndReplyWithResult( + FROM_HERE, + base::TaskTraits().MayBlock().WithPriority( + base::TaskPriority::BACKGROUND), + base::Bind(OpenNaClReadExecImpl, file_path, true /* is_executable */), + base::Bind(&NaClProcessHost::StartNaClFileResolved, + weak_factory_.GetWeakPtr(), params, file_path)); + return true; } } @@ -1064,21 +1061,13 @@ } // Open the file. - if (!base::PostTaskAndReplyWithResult( - content::BrowserThread::GetBlockingPool(), - FROM_HERE, - base::Bind(OpenNaClReadExecImpl, file_path, true /* is_executable */), - base::Bind(&NaClProcessHost::FileResolved, - weak_factory_.GetWeakPtr(), - file_token_lo, - file_token_hi, - file_path))) { - Send(new NaClProcessMsg_ResolveFileTokenReply( - file_token_lo, - file_token_hi, - IPC::PlatformFileForTransit(), - base::FilePath())); - } + base::PostTaskWithTraitsAndReplyWithResult( + FROM_HERE, + base::TaskTraits().MayBlock().WithPriority( + base::TaskPriority::BACKGROUND), + base::Bind(OpenNaClReadExecImpl, file_path, true /* is_executable */), + base::Bind(&NaClProcessHost::FileResolved, weak_factory_.GetWeakPtr(), + file_token_lo, file_token_hi, file_path)); } void NaClProcessHost::FileResolved(
diff --git a/components/nacl/browser/pnacl_host.cc b/components/nacl/browser/pnacl_host.cc index 605d7d7..fe9cb5d 100644 --- a/components/nacl/browser/pnacl_host.cc +++ b/components/nacl/browser/pnacl_host.cc
@@ -14,6 +14,7 @@ #include "base/logging.h" #include "base/numerics/safe_math.h" #include "base/task_runner_util.h" +#include "base/task_scheduler/post_task.h" #include "base/threading/sequenced_worker_pool.h" #include "components/nacl/browser/nacl_browser.h" #include "components/nacl/browser/pnacl_translation_cache.h" @@ -30,11 +31,17 @@ // Delay to wait for initialization of the cache backend static const int kTranslationCacheInitializationDelayMs = 20; -void CloseBaseFile(base::File auto_file_closer) { +void CloseBaseFile(base::File file) { + base::PostTaskWithTraits( + FROM_HERE, + base::TaskTraits() + .MayBlock() + .WithPriority(base::TaskPriority::BACKGROUND) + .WithShutdownBehavior( + base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN), + base::Bind([](base::File file) {}, Passed(std::move(file)))); } -void CloseScopedFile(std::unique_ptr<base::File> auto_file_closer) {} - } // namespace namespace pnacl { @@ -179,8 +186,6 @@ // static void PnaclHost::DoCreateTemporaryFile(base::FilePath temp_dir, TempFileCallback cb) { - DCHECK(BrowserThread::GetBlockingPool()->RunsTasksOnCurrentThread()); - base::FilePath file_path; base::File file; bool rv = temp_dir.empty() @@ -320,8 +325,7 @@ // The renderer may have signaled an error or closed while the temp // file was being created. LOG(ERROR) << "OnTempFileReturn: id not found"; - BrowserThread::PostBlockingPoolTask( - FROM_HERE, base::Bind(CloseBaseFile, Passed(std::move(file)))); + CloseBaseFile(std::move(file)); return; } if (!file.IsValid()) { @@ -469,9 +473,7 @@ if (entry->second.got_nexe_fd) { std::unique_ptr<base::File> file(entry->second.nexe_fd); entry->second.nexe_fd = NULL; - BrowserThread::PostBlockingPoolTask( - FROM_HERE, - base::Bind(CloseScopedFile, Passed(&file))); + CloseBaseFile(std::move(*file.get())); } pending_translations_.erase(entry); } @@ -550,24 +552,18 @@ DCHECK(thread_checker_.CalledOnValidThread()); PendingTranslationMap::iterator entry(pending_translations_.find(id)); if (entry == pending_translations_.end()) { - BrowserThread::PostBlockingPoolTask( - FROM_HERE, - base::Bind(CloseScopedFile, Passed(&file))); + CloseBaseFile(std::move(*file.get())); return; } if (file_error == -1) { // Write error on the temp file. Request a new file and start over. - BrowserThread::PostBlockingPoolTask( - FROM_HERE, - base::Bind(CloseScopedFile, Passed(&file))); + CloseBaseFile(std::move(*file.get())); CreateTemporaryFile(base::Bind(&PnaclHost::OnTempFileReturn, base::Unretained(this), entry->first)); return; } entry->second.callback.Run(*file.get(), true); - BrowserThread::PostBlockingPoolTask( - FROM_HERE, - base::Bind(CloseScopedFile, Passed(&file))); + CloseBaseFile(std::move(*file.get())); pending_translations_.erase(entry); } @@ -584,9 +580,7 @@ // Clean up the open files. std::unique_ptr<base::File> file(to_erase->second.nexe_fd); to_erase->second.nexe_fd = NULL; - BrowserThread::PostBlockingPoolTask( - FROM_HERE, - base::Bind(CloseScopedFile, Passed(&file))); + CloseBaseFile(std::move(*file.get())); std::string key(to_erase->second.cache_key); bool may_be_cached = TranslationMayBeCached(to_erase); pending_translations_.erase(to_erase);
diff --git a/components/navigation_interception/intercept_navigation_throttle.cc b/components/navigation_interception/intercept_navigation_throttle.cc index 84292c9..c66a3022 100644 --- a/components/navigation_interception/intercept_navigation_throttle.cc +++ b/components/navigation_interception/intercept_navigation_throttle.cc
@@ -69,7 +69,8 @@ navigation_handle()->GetURL(), navigation_handle()->GetReferrer(), navigation_handle()->HasUserGesture(), navigation_handle()->IsPost(), navigation_handle()->GetPageTransition(), is_redirect, - navigation_handle()->IsExternalProtocol(), true); + navigation_handle()->IsExternalProtocol(), true, + navigation_handle()->GetBaseURLForDataURL()); if (run_callback_synchronously_) { bool should_ignore_navigation = should_ignore_callback_.Run(
diff --git a/components/navigation_interception/navigation_params.cc b/components/navigation_interception/navigation_params.cc index 54288f76..fb66ba6e 100644 --- a/components/navigation_interception/navigation_params.cc +++ b/components/navigation_interception/navigation_params.cc
@@ -17,7 +17,8 @@ ui::PageTransition transition_type, bool is_redirect, bool is_external_protocol, - bool is_main_frame) + bool is_main_frame, + const GURL& base_url_for_data_url) : url_(url), referrer_(referrer), has_user_gesture_(has_user_gesture), @@ -25,8 +26,8 @@ transition_type_(transition_type), is_redirect_(is_redirect), is_external_protocol_(is_external_protocol), - is_main_frame_(is_main_frame) { -} + is_main_frame_(is_main_frame), + base_url_for_data_url_(base_url_for_data_url) {} void NavigationParams::operator=(const NavigationParams& rhs) { Assign(rhs);
diff --git a/components/navigation_interception/navigation_params.h b/components/navigation_interception/navigation_params.h index 3417816..c42637b 100644 --- a/components/navigation_interception/navigation_params.h +++ b/components/navigation_interception/navigation_params.h
@@ -21,7 +21,8 @@ ui::PageTransition page_transition_type, bool is_redirect, bool is_external_protocol, - bool is_main_frame); + bool is_main_frame, + const GURL& base_url_for_data_url); NavigationParams(const NavigationParams& other); void operator=(const NavigationParams& rhs); @@ -34,6 +35,7 @@ bool is_redirect() const { return is_redirect_; } bool is_external_protocol() const { return is_external_protocol_; } bool is_main_frame() const { return is_main_frame_; } + const GURL& base_url_for_data_url() const { return base_url_for_data_url_; } private: void Assign(const NavigationParams& other); @@ -46,6 +48,7 @@ bool is_redirect_; bool is_external_protocol_; bool is_main_frame_; + GURL base_url_for_data_url_; }; } // namespace navigation_interception
diff --git a/components/navigation_interception/navigation_params_android.cc b/components/navigation_interception/navigation_params_android.cc index e459d362..2b063ae 100644 --- a/components/navigation_interception/navigation_params_android.cc +++ b/components/navigation_interception/navigation_params_android.cc
@@ -16,8 +16,13 @@ JNIEnv* env, const NavigationParams& params, bool has_user_gesture_carryover) { + const GURL& url = params.base_url_for_data_url().is_empty() + ? params.url() + : params.base_url_for_data_url(); + DCHECK(params.base_url_for_data_url().is_empty() || + params.url().SchemeIs(url::kDataScheme)); ScopedJavaLocalRef<jstring> jstring_url = - ConvertUTF8ToJavaString(env, params.url().spec()); + ConvertUTF8ToJavaString(env, url.spec()); ScopedJavaLocalRef<jstring> jstring_referrer = ConvertUTF8ToJavaString(env, params.referrer().url.spec());
diff --git a/components/offline_items_collection/OWNERS b/components/offline_items_collection/OWNERS index 23fe46f..20949be 100644 --- a/components/offline_items_collection/OWNERS +++ b/components/offline_items_collection/OWNERS
@@ -2,3 +2,5 @@ dtrainor@chromium.org fgorski@chromium.org qinmin@chromium.org + +# COMPONENT: UI>Browser>Downloads
diff --git a/components/omnibox/browser/url_index_private_data.cc b/components/omnibox/browser/url_index_private_data.cc index 63b4110..f7baf34 100644 --- a/components/omnibox/browser/url_index_private_data.cc +++ b/components/omnibox/browser/url_index_private_data.cc
@@ -222,13 +222,11 @@ search_term_cache_.clear(); } else { // Remove any stale SearchTermCacheItems. - for (SearchTermCacheMap::iterator cache_iter = search_term_cache_.begin(); - cache_iter != search_term_cache_.end(); ) { - if (!cache_iter->second.used_) - cache_iter = search_term_cache_.erase(cache_iter); - else - ++cache_iter; - } + base::EraseIf( + search_term_cache_, + [](const std::pair<base::string16, SearchTermCacheItem>& item) { + return !item.second.used_; + }); } return scored_items; @@ -586,12 +584,9 @@ // We must filter the word list because the resulting word set surely // contains words which do not have the search term as a proper subset. - word_id_set.erase(std::remove_if(word_id_set.begin(), word_id_set.end(), - [&](WordID word_id) { - return word_list_[word_id].find(term) == - base::string16::npos; - }), - word_id_set.end()); + base::EraseIf(word_id_set, [this, &term](WordID word_id) { + return word_list_[word_id].find(term) == base::string16::npos; + }); } else { word_id_set = WordIDSetForTermChars(Char16SetFromString16(term)); } @@ -681,12 +676,9 @@ &lower_terms_to_word_starts_offsets); // Filter bad matches and other matches we don't want to display. - auto filter = [this, template_url_service](const HistoryID history_id) { + base::EraseIf(history_ids, [&](const HistoryID history_id) { return ShouldFilter(history_id, template_url_service); - }; - history_ids.erase( - std::remove_if(history_ids.begin(), history_ids.end(), filter), - history_ids.end()); + }); // Score the matches. const size_t num_matches = history_ids.size();
diff --git a/components/password_manager/core/browser/password_store.cc b/components/password_manager/core/browser/password_store.cc index 4750796..b9f7f2b 100644 --- a/components/password_manager/core/browser/password_store.cc +++ b/components/password_manager/core/browser/password_store.cc
@@ -705,12 +705,8 @@ syncable_service_.reset(new PasswordSyncableService(this)); syncable_service_->InjectStartSyncFlare(flare); reuse_detector_.reset(new PasswordReuseDetector); -#if !defined(OS_MACOSX) - // TODO(crbug.com/668155): For non-migrated keychain users it can lead to - // hundreds of requests to unlock keychain. GetAutofillableLoginsImpl( base::MakeUnique<GetLoginsRequest>(reuse_detector_.get())); -#endif } void PasswordStore::DestroyOnBackgroundThread() {
diff --git a/components/password_manager/core/browser/password_store_unittest.cc b/components/password_manager/core/browser/password_store_unittest.cc index c47fceb..9a16268 100644 --- a/components/password_manager/core/browser/password_store_unittest.cc +++ b/components/password_manager/core/browser/password_store_unittest.cc
@@ -31,6 +31,10 @@ #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" +#if defined(OS_MACOSX) +#include "components/os_crypt/os_crypt_mocker.h" +#endif + using autofill::PasswordForm; using base::WaitableEvent; using testing::_; @@ -840,9 +844,6 @@ } } -#if !defined(OS_MACOSX) -// TODO(crbug.com/668155): Enable this test after fixing issues with -// initialization PasswordStore with MockKeyChain in tests on MacOS. TEST_F(PasswordStoreTest, CheckPasswordReuse) { static constexpr PasswordFormData kTestCredentials[] = { {PasswordForm::SCHEME_HTML, "https://www.google.com", @@ -850,6 +851,11 @@ {PasswordForm::SCHEME_HTML, "https://facebook.com", "https://facebook.com", "", L"", L"", L"", L"", L"topsecret", true, 1}}; +#if defined(OS_MACOSX) + // Mock Keychain. There is a call to Keychain on initializling + // PasswordReuseDetector, so it should be mocked. + OSCryptMocker::SetUpWithSingleton(); +#endif scoped_refptr<PasswordStoreDefault> store(new PasswordStoreDefault( base::ThreadTaskRunnerHandle::Get(), base::ThreadTaskRunnerHandle::Get(), base::MakeUnique<LoginDatabase>(test_login_db_file_path()))); @@ -889,7 +895,9 @@ store->ShutdownOnUIThread(); base::RunLoop().RunUntilIdle(); -} +#if defined(OS_MACOSX) + OSCryptMocker::TearDown(); #endif +} } // namespace password_manager
diff --git a/components/payments/core/address_normalizer.h b/components/payments/core/address_normalizer.h index 0280d82..f3d2a24 100644 --- a/components/payments/core/address_normalizer.h +++ b/components/payments/core/address_normalizer.h
@@ -49,8 +49,8 @@ virtual ~Request() {} }; - AddressNormalizer(std::unique_ptr<i18n::addressinput::Source> source, - std::unique_ptr<i18n::addressinput::Storage> storage); + AddressNormalizer(std::unique_ptr<::i18n::addressinput::Source> source, + std::unique_ptr<::i18n::addressinput::Storage> storage); ~AddressNormalizer() override; // Start loading the validation rules for the specified |region_code|.
diff --git a/components/payments/core/address_normalizer_unittest.cc b/components/payments/core/address_normalizer_unittest.cc index 0d2f3fa..ee934bbb 100644 --- a/components/payments/core/address_normalizer_unittest.cc +++ b/components/payments/core/address_normalizer_unittest.cc
@@ -4,6 +4,8 @@ #include "components/payments/core/address_normalizer.h" +#include <utility> + #include "base/run_loop.h" #include "base/strings/utf_string_conversions.h" #include "base/test/scoped_task_scheduler.h" @@ -75,8 +77,8 @@ // loaded. class TestAddressNormalizer : public AddressNormalizer { public: - TestAddressNormalizer(std::unique_ptr<i18n::addressinput::Source> source, - std::unique_ptr<i18n::addressinput::Storage> storage) + TestAddressNormalizer(std::unique_ptr<::i18n::addressinput::Source> source, + std::unique_ptr<::i18n::addressinput::Storage> storage) : AddressNormalizer(std::move(source), std::move(storage)), should_load_rules_(true) {} @@ -188,4 +190,4 @@ EXPECT_FALSE(delegate.not_normalized_called()); } -} // namespace payments \ No newline at end of file +} // namespace payments
diff --git a/components/signin/core/browser/android/java/src/org/chromium/components/signin/SystemAccountManagerDelegate.java b/components/signin/core/browser/android/java/src/org/chromium/components/signin/SystemAccountManagerDelegate.java index 1f27097c..6cc91e8 100644 --- a/components/signin/core/browser/android/java/src/org/chromium/components/signin/SystemAccountManagerDelegate.java +++ b/components/signin/core/browser/android/java/src/org/chromium/components/signin/SystemAccountManagerDelegate.java
@@ -193,7 +193,10 @@ } } }; - mAccountManager.updateCredentials(account, "android", null, activity, realCallback, null); + // Android 4.4 throws NullPointerException if null is passed + Bundle emptyOptions = new Bundle(); + mAccountManager.updateCredentials( + account, "android", emptyOptions, activity, realCallback, null); } protected boolean hasGetAccountsPermission() {
diff --git a/components/signin/ios/OWNERS b/components/signin/ios/OWNERS index f5e9e65..d45210b 100644 --- a/components/signin/ios/OWNERS +++ b/components/signin/ios/OWNERS
@@ -1,2 +1,4 @@ bzanotti@chromium.org msarda@chromium.org + +# COMPONENT: Services>SignIn
diff --git a/components/ukm/test_ukm_service.cc b/components/ukm/test_ukm_service.cc index b22e5f3d..e3fcef86 100644 --- a/components/ukm/test_ukm_service.cc +++ b/components/ukm/test_ukm_service.cc
@@ -4,6 +4,8 @@ #include "components/ukm/test_ukm_service.h" +#include "components/ukm/ukm_source.h" + namespace ukm { UkmServiceTestingHarness::UkmServiceTestingHarness() { @@ -25,8 +27,17 @@ TestUkmService::~TestUkmService() = default; -const UkmSource* TestUkmService::GetSource(size_t source_num) const { - return sources_for_testing()[source_num].get(); +const std::map<int32_t, std::unique_ptr<UkmSource>>& +TestUkmService::GetSources() const { + return sources_for_testing(); +} + +const UkmSource* TestUkmService::GetSourceForUrl(const char* url) const { + for (const auto& kv : sources_for_testing()) { + if (kv.second->url() == url) + return kv.second.get(); + } + return nullptr; } const UkmEntry* TestUkmService::GetEntry(size_t entry_num) const {
diff --git a/components/ukm/test_ukm_service.h b/components/ukm/test_ukm_service.h index 33c81f2..e3ffbf9 100644 --- a/components/ukm/test_ukm_service.h +++ b/components/ukm/test_ukm_service.h
@@ -22,7 +22,8 @@ ~TestUkmService() override; size_t sources_count() const { return sources_for_testing().size(); } - const UkmSource* GetSource(size_t source_num) const; + const std::map<int32_t, std::unique_ptr<UkmSource>>& GetSources() const; + const UkmSource* GetSourceForUrl(const char* url) const; size_t entries_count() const { return entries_for_testing().size(); } const UkmEntry* GetEntry(size_t entry_num) const;
diff --git a/components/ukm/ukm_service.cc b/components/ukm/ukm_service.cc index a43f426..ee2c31c 100644 --- a/components/ukm/ukm_service.cc +++ b/components/ukm/ukm_service.cc
@@ -334,9 +334,9 @@ if (ShouldRecordSessionId()) report.set_session_id(session_id_); - for (const auto& source : sources_) { + for (const auto& kv : sources_) { Source* proto_source = report.add_sources(); - source->PopulateProto(proto_source); + kv.second->PopulateProto(proto_source); if (!ShouldRecordInitialUrl()) proto_source->clear_initial_url(); } @@ -397,23 +397,25 @@ bool upload_succeeded = response_code == 200; - // Provide boolean for error recovery (allow us to ignore response_code). - bool discard_log = false; - const size_t log_size_bytes = persisted_logs_.staged_log().length(); - if (upload_succeeded) { - UMA_HISTOGRAM_COUNTS_10000("UKM.LogSize.OnSuccess", log_size_bytes / 1024); - } else if (response_code == 400) { - // Bad syntax. Retransmission won't work. - discard_log = true; - } + // Staged log may have been deleted by Purge already, otherwise we may + // remove it from the log store here. + if (persisted_logs_.has_staged_log()) { + // Provide boolean for error recovery (allow us to ignore response_code). + bool discard_log = false; + const size_t log_size_bytes = persisted_logs_.staged_log().length(); + if (upload_succeeded) { + UMA_HISTOGRAM_COUNTS_10000("UKM.LogSize.OnSuccess", + log_size_bytes / 1024); + } else if (response_code == 400) { + // Bad syntax. Retransmission won't work. + discard_log = true; + } - if (upload_succeeded || discard_log) { - // TODO(holte): The if below is a temporary fix for a crash bug. We should - // revisit the logic and update it with a more correct fix. crbug.com/698819 - if (persisted_logs_.has_staged_log()) + if (upload_succeeded || discard_log) { persisted_logs_.DiscardStagedLog(); - // Store the updated list to disk now that the removed log is uploaded. - persisted_logs_.PersistUnsentLogs(); + // Store the updated list to disk now that the removed log is uploaded. + persisted_logs_.PersistUnsentLogs(); + } } // Error 400 indicates a problem with the log, not with the server, so @@ -423,21 +425,6 @@ persisted_logs_.has_unsent_logs()); } -void UkmService::RecordSource(std::unique_ptr<UkmSource> source) { - DCHECK(thread_checker_.CalledOnValidThread()); - - if (!recording_enabled_) { - RecordDroppedSource(DroppedDataReason::RECORDING_DISABLED); - return; - } - if (sources_.size() >= GetMaxSources()) { - RecordDroppedSource(DroppedDataReason::MAX_HIT); - return; - } - - sources_.push_back(std::move(source)); -} - // static int32_t UkmService::GetNewSourceID() { static int32_t next_source_id = 0; @@ -463,11 +450,8 @@ // Update the pre-existing source if there is any. This happens when the // initial URL is different from the committed URL for the same source, e.g., // when there is redirection. - for (auto& source : sources_) { - if (source_id != source->id()) - continue; - - source->UpdateUrl(url); + if (base::ContainsKey(sources_, source_id)) { + sources_[source_id]->UpdateUrl(url); return; } @@ -478,7 +462,7 @@ std::unique_ptr<UkmSource> source = base::MakeUnique<UkmSource>(); source->set_id(source_id); source->set_url(url); - sources_.push_back(std::move(source)); + sources_.insert(std::make_pair(source_id, std::move(source))); } void UkmService::AddEntry(std::unique_ptr<UkmEntry> entry) {
diff --git a/components/ukm/ukm_service.h b/components/ukm/ukm_service.h index d5d19c4..613658f 100644 --- a/components/ukm/ukm_service.h +++ b/components/ukm/ukm_service.h
@@ -99,7 +99,8 @@ using AddEntryCallback = base::Callback<void(std::unique_ptr<UkmEntry>)>; protected: - const std::vector<std::unique_ptr<UkmSource>>& sources_for_testing() const { + const std::map<int32_t, std::unique_ptr<UkmSource>>& sources_for_testing() + const { return sources_; } @@ -126,11 +127,6 @@ std::unique_ptr<UkmEntryBuilder> GetEntryBuilder(int32_t source_id, const char* event_name); - // Adds a new source of UKM metrics, which will be stored until periodically - // serialized for upload, and then deleted. This method is deprecated. Please - // use GetEntryBuilder and UpdateSourceURL above. - void RecordSource(std::unique_ptr<UkmSource> source); - // Starts metrics client initialization. void StartInitTask(); @@ -190,8 +186,7 @@ // Contains newly added sources and entries of UKM metrics which periodically // get serialized and cleared by BuildAndStoreLog(). - // TODO(zhenw): update sources to a map keyed by source ID. - std::vector<std::unique_ptr<UkmSource>> sources_; + std::map<int32_t, std::unique_ptr<UkmSource>> sources_; std::vector<std::unique_ptr<UkmEntry>> entries_; // Weak pointers factory used to post task on different threads. All weak
diff --git a/components/ukm/ukm_service_unittest.cc b/components/ukm/ukm_service_unittest.cc index 8a2782a..4cfc97d 100644 --- a/components/ukm/ukm_service_unittest.cc +++ b/components/ukm/ukm_service_unittest.cc
@@ -470,4 +470,24 @@ EXPECT_EQ(2, proto_report.sources_size()); } +TEST_F(UkmServiceTest, PurgeMidUpload) { + UkmService service(&prefs_, &client_); + EXPECT_EQ(GetPersistedLogCount(), 0); + service.Initialize(); + task_runner_->RunUntilIdle(); + service.EnableRecording(); + service.EnableReporting(); + auto id = UkmService::GetNewSourceID(); + service.UpdateSourceURL(id, GURL("https://google.com/foobar1")); + // Should init, generate a log, and start an upload. + task_runner_->RunPendingTasks(); + EXPECT_TRUE(client_.uploader()->is_uploading()); + // Purge should delete all logs, including the one being sent. + service.Purge(); + // Upload succeeds after logs was deleted. + client_.uploader()->CompleteUpload(200); + EXPECT_EQ(GetPersistedLogCount(), 0); + EXPECT_FALSE(client_.uploader()->is_uploading()); +} + } // namespace ukm
diff --git a/components/wallpaper/wallpaper_manager_base.cc b/components/wallpaper/wallpaper_manager_base.cc index 98022796..e573abe 100644 --- a/components/wallpaper/wallpaper_manager_base.cc +++ b/components/wallpaper/wallpaper_manager_base.cc
@@ -372,6 +372,22 @@ user_manager::UserManager::Get()->GetActiveUser()->GetAccountId(), info); } +void WallpaperManagerBase::SetDefaultWallpaper(const AccountId& account_id, + bool update_wallpaper) { + RemoveUserWallpaperInfo(account_id); + + const wallpaper::WallpaperInfo info = { + std::string(), wallpaper::WALLPAPER_LAYOUT_CENTER, + user_manager::User::DEFAULT, base::Time::Now().LocalMidnight()}; + const bool is_persistent = + !user_manager::UserManager::Get()->IsUserNonCryptohomeDataEphemeral( + account_id); + SetUserWallpaperInfo(account_id, info, is_persistent); + + if (update_wallpaper) + SetDefaultWallpaperNow(account_id); +} + // static bool WallpaperManagerBase::ResizeImage( const gfx::ImageSkia& image,
diff --git a/components/wallpaper/wallpaper_manager_base.h b/components/wallpaper/wallpaper_manager_base.h index 4e9aed77..2902fab 100644 --- a/components/wallpaper/wallpaper_manager_base.h +++ b/components/wallpaper/wallpaper_manager_base.h
@@ -276,6 +276,11 @@ const gfx::ImageSkia& image, bool update_wallpaper) = 0; + // Updates wallpaper info for |account_id| to default. If |update_wallpaper| + // is false, don't change wallpaper but only update cache. + virtual void SetDefaultWallpaper(const AccountId& account_id, + bool update_wallpaper); + // Use given files as new default wallpaper. // Reloads current wallpaper, if old default was loaded. // Current value of default_wallpaper_image_ is destroyed.
diff --git a/content/browser/BUILD.gn b/content/browser/BUILD.gn index f50ccbd1..8d10c1b 100644 --- a/content/browser/BUILD.gn +++ b/content/browser/BUILD.gn
@@ -78,6 +78,7 @@ "//device/sensors", "//device/vibration", "//device/vr", + "//device/vr:features", "//device/wake_lock", "//google_apis", "//gpu", @@ -147,6 +148,7 @@ "//ui/gfx/geometry", "//ui/gfx/geometry/mojo", "//ui/gl", + "//ui/gl:gl_features", "//ui/native_theme", "//ui/resources", "//ui/shell_dialogs", @@ -1131,7 +1133,6 @@ "renderer_host/media/audio_input_sync_writer.h", "renderer_host/media/audio_output_authorization_handler.cc", "renderer_host/media/audio_output_authorization_handler.h", - "renderer_host/media/audio_output_delegate.h", "renderer_host/media/audio_output_delegate_impl.cc", "renderer_host/media/audio_output_delegate_impl.h", "renderer_host/media/audio_renderer_host.cc", @@ -1592,6 +1593,7 @@ deps += [ "//third_party/iaccessible2", "//third_party/isimpledom", + "//third_party/swiftshader", ] libs += [ "comctl32.lib",
diff --git a/content/browser/appcache/appcache_group.cc b/content/browser/appcache/appcache_group.cc index 573983eb..c5e1e5a 100644 --- a/content/browser/appcache/appcache_group.cc +++ b/content/browser/appcache/appcache_group.cc
@@ -176,6 +176,8 @@ void AppCacheGroup::CancelUpdate() { if (update_job_) { delete update_job_; + // The update_job_ destructor calls AppCacheGroup::SetUpdateAppCacheStatus + // which zeroes update_job_. DCHECK(!update_job_); DCHECK_EQ(IDLE, update_status_); }
diff --git a/content/browser/download/download_file_impl.cc b/content/browser/download/download_file_impl.cc index e4ec806..eb1ef9b 100644 --- a/content/browser/download/download_file_impl.cc +++ b/content/browser/download/download_file_impl.cc
@@ -19,6 +19,7 @@ #include "content/browser/download/download_interrupt_reasons_impl.h" #include "content/browser/download/download_net_log_parameters.h" #include "content/browser/download/download_stats.h" +#include "content/browser/download/parallel_download_utils.h" #include "content/public/browser/browser_thread.h" #include "crypto/secure_hash.h" #include "crypto/sha2.h" @@ -42,7 +43,11 @@ const int kMaxRenameRetries = 3; DownloadFileImpl::SourceStream::SourceStream(int64_t offset, int64_t length) - : offset_(offset), length_(length), bytes_written_(0), finished_(false) {} + : offset_(offset), + length_(length), + bytes_written_(0), + finished_(false), + index_(0u) {} DownloadFileImpl::SourceStream::~SourceStream() = default; @@ -320,8 +325,21 @@ disk_writes_time_ += (base::TimeTicks::Now() - write_start); bytes_seen_ += incoming_data_size; total_incoming_data_size += incoming_data_size; - if (reason == DOWNLOAD_INTERRUPT_REASON_NONE) + if (reason == DOWNLOAD_INTERRUPT_REASON_NONE) { + int64_t prev_bytes_written = source_stream->bytes_written(); source_stream->OnWriteBytesToDisk(incoming_data_size); + if (!is_sparse_file_) + break; + // If the write operation creates a new slice, add it to the + // |received_slices_| and update all the entries in + // |source_streams_|. + if (incoming_data_size > 0 && prev_bytes_written == 0) { + AddNewSlice(source_stream->offset(), incoming_data_size); + } else { + received_slices_[source_stream->index()].received_bytes += + incoming_data_size; + } + } } break; case ByteStreamReader::STREAM_COMPLETE: @@ -375,18 +393,8 @@ // Inform observers. SendUpdate(); - // TODO(xingliu): Use slice info to determine if the file is fully - // downloaded. - bool all_stream_complete = true; - for (auto& stream : source_streams_) { - if (!stream.second->is_finished()) { - all_stream_complete = false; - break; - } - } - // All the stream reader are completed, shut down file IO processing. - if (all_stream_complete) { + if (IsDownloadCompleted()) { RecordFileBandwidth(bytes_seen_, disk_writes_time_, base::TimeTicks::Now() - download_start_); weak_factory_.InvalidateWeakPtrs(); @@ -440,6 +448,73 @@ rate_estimator_.Increment(data_len); } +void DownloadFileImpl::AddNewSlice(int64_t offset, int64_t length) { + if (!is_sparse_file_) + return; + size_t index = AddOrMergeReceivedSliceIntoSortedArray( + DownloadItem::ReceivedSlice(offset, length), received_slices_); + // Check if the slice is added as a new slice, or merged with an existing one. + bool slice_added = (offset == received_slices_[index].offset); + // Update the index of exising SourceStreams. + for (auto& stream : source_streams_) { + SourceStream* source_stream = stream.second.get(); + if (source_stream->offset() > offset) { + if (slice_added && source_stream->bytes_written() > 0) + source_stream->set_index(source_stream->index() + 1); + } else if (source_stream->offset() == offset) { + source_stream->set_index(index); + } else if (source_stream->length() == + DownloadSaveInfo::kLengthFullContent || + source_stream->length() > offset - source_stream->offset()) { + // The newly introduced slice will impact the length of the SourceStreams + // preceding it. + source_stream->set_length(offset - source_stream->offset()); + } + } +} + +bool DownloadFileImpl::IsDownloadCompleted() { + SourceStream* stream_for_last_slice = nullptr; + int64_t last_slice_offset = 0; + for (auto& stream : source_streams_) { + SourceStream* source_stream = stream.second.get(); + if (source_stream->offset() >= last_slice_offset && + source_stream->bytes_written() > 0) { + stream_for_last_slice = source_stream; + last_slice_offset = source_stream->offset(); + } + if (!source_stream->is_finished()) + return false; + } + + if (!is_sparse_file_) + return true; + + // Verify that all the file slices have been downloaded. + std::vector<DownloadItem::ReceivedSlice> slices_to_download = + FindSlicesToDownload(received_slices_); + if (slices_to_download.size() > 1) { + // If there are 1 or more holes in the file, download is not finished. + // Some streams might not have been added to |source_streams_| yet. + return false; + } + if (stream_for_last_slice) { + DCHECK_EQ(slices_to_download[0].received_bytes, + DownloadSaveInfo::kLengthFullContent); + // The last stream should not have a length limit. If it has, it might + // not reach the end of the file. + if (stream_for_last_slice->length() != + DownloadSaveInfo::kLengthFullContent) { + return false; + } + DCHECK_EQ(slices_to_download[0].offset, + stream_for_last_slice->offset() + + stream_for_last_slice->bytes_written()); + } + + return true; +} + DownloadFileImpl::RenameParameters::RenameParameters( RenameOption option, const base::FilePath& new_path,
diff --git a/content/browser/download/download_file_impl.h b/content/browser/download/download_file_impl.h index 61f1f4d..2a68ca9e 100644 --- a/content/browser/download/download_file_impl.h +++ b/content/browser/download/download_file_impl.h
@@ -109,9 +109,12 @@ ByteStreamReader* stream_reader() const { return stream_reader_.get(); } int64_t offset() const { return offset_; } int64_t length() const { return length_; } + void set_length(int64_t length) { length_ = length; } int64_t bytes_written() const { return bytes_written_; } bool is_finished() const { return finished_; } void set_finished(bool finish) { finished_ = finish; } + size_t index() { return index_; } + void set_index(size_t index) { index_ = index; } private: // Starting position for the stream to write to disk. @@ -129,6 +132,10 @@ // disk. bool finished_; + // The slice index in the |received_slices_| vector. A slice was created + // once the stream started writing data to the target file. + size_t index_; + // The stream through which data comes. std::unique_ptr<ByteStreamReader> stream_reader_; @@ -183,6 +190,14 @@ // Register callback and start to read data from the stream. void RegisterAndActivateStream(SourceStream* source_stream); + // Adds a new slice to |received_slices_| and update the existing entries in + // |source_streams_| as their lengths will change. + // TODO(qinmin): add a test for this function. + void AddNewSlice(int64_t offset, int64_t length); + + // Check if download is completed. + bool IsDownloadCompleted(); + // Return the total valid bytes received in the target file. // If the file is a sparse file, return the total number of valid bytes. // Otherwise, return the current file size. @@ -215,7 +230,8 @@ // Set to true when multiple byte streams write to the same file. // The file may contain null bytes(holes) in between of valid data slices. - // TODO(xingliu): Pass a slice info vector to determine if the file is sparse. + // TODO(xingliu): Remove this variable. We can use size of |received_slices_| + // to determine if the file is sparse bool is_sparse_file_; // Statistics
diff --git a/content/browser/download/download_file_unittest.cc b/content/browser/download/download_file_unittest.cc index 055b883e..1a2c560 100644 --- a/content/browser/download/download_file_unittest.cc +++ b/content/browser/download/download_file_unittest.cc
@@ -395,8 +395,11 @@ return result_reason; } - // Prepare two byte streams to write to the same file sink. - void PrepareMultipleStreams(int64_t second_stream_length) { + // Prepare two byte streams to write to the same file sink. If + // |first_stream_completes_early| is true, the first stream will complete + // before the second stream starts. + void PrepareMultipleStreams(bool first_stream_completes_early, + int64_t second_stream_length) { // Create a sparse file. ASSERT_TRUE(CreateDownloadFile(0, true, true)); base::FilePath initial_path(download_file_->FullPath()); @@ -423,13 +426,19 @@ ::testing::Sequence s1; SetupDataAppend(stream_1_data, 2, input_stream_1_, s1, stream_1_offset); SetupDataAppend(stream_0_data, 2, input_stream_, s0, 0); - SetupFinishStream(DOWNLOAD_INTERRUPT_REASON_NONE, input_stream_, s0); + // If the first stream doesn't finish before the second stream starts + // writing, its length will be cut short by the second stream. So + // STREAM_COMPLETE will never get called. + if (first_stream_completes_early) + SetupFinishStream(DOWNLOAD_INTERRUPT_REASON_NONE, input_stream_, s0); + else + EXPECT_CALL(*input_stream_, RegisterCallback(_)).RetiresOnSaturation(); // Expectation on MockByteStreamReader for MultipleStreams tests: // 1. RegisterCallback: Must called twice. One to set the callback, the // other to release the stream. // 2. Read: If filled with N buffer, called (N+1) times, where the last Read - // call doesn't read any data but returns STRAM_COMPLETE. + // call doesn't read any data but returns STREAM_COMPLETE. // The stream may terminate in the middle and less Read calls are expected. // 3. GetStatus: Only called if the stream is completed and last Read call // returns STREAM_COMPLETE. @@ -903,7 +912,7 @@ // // Activate both streams at the same time. TEST_F(DownloadFileTest, MutipleStreamsWrite) { - PrepareMultipleStreams(0); + PrepareMultipleStreams(false, 0); EXPECT_CALL(*(observer_.get()), MockDestinationCompleted(_, _)); int64_t stream_0_length = @@ -927,7 +936,7 @@ // Activate and deplete one stream, later add the second stream. TEST_F(DownloadFileTest, MutipleStreamsOneStreamFirst) { - PrepareMultipleStreams(0); + PrepareMultipleStreams(true, 0); int64_t stream_0_length = static_cast<int64_t>(strlen(kTestData1) + strlen(kTestData2)); @@ -970,9 +979,7 @@ int64_t stream_0_length = static_cast<int64_t>(strlen(kTestData1) + strlen(kTestData2)); int64_t stream_1_length = static_cast<int64_t>(strlen(kTestData4)) - 1; - PrepareMultipleStreams(stream_1_length); - - EXPECT_CALL(*(observer_.get()), MockDestinationCompleted(_, _)); + PrepareMultipleStreams(false, stream_1_length); download_file_->AddByteStream( std::unique_ptr<MockByteStreamReader>(input_stream_1_), stream_0_length); @@ -997,6 +1004,7 @@ size_t size; input_stream_1_->Read(&data, &size); + download_file_->Cancel(); DestroyDownloadFile(0, false); }
diff --git a/content/browser/download/parallel_download_utils.cc b/content/browser/download/parallel_download_utils.cc index d21ea49..5bd4413c 100644 --- a/content/browser/download/parallel_download_utils.cc +++ b/content/browser/download/parallel_download_utils.cc
@@ -28,6 +28,13 @@ // specified. const int kParallelRequestCount = 2; +// TODO(qinmin): replace this with a comparator operator in +// DownloadItem::ReceivedSlice. +bool compareReceivedSlices(const DownloadItem::ReceivedSlice& lhs, + const DownloadItem::ReceivedSlice& rhs) { + return lhs.offset < rhs.offset; +} + } // namespace std::vector<DownloadItem::ReceivedSlice> FindSlicesToDownload( @@ -61,6 +68,24 @@ return result; } +size_t AddOrMergeReceivedSliceIntoSortedArray( + const DownloadItem::ReceivedSlice& new_slice, + std::vector<DownloadItem::ReceivedSlice>& received_slices) { + std::vector<DownloadItem::ReceivedSlice>::iterator it = + std::upper_bound(received_slices.begin(), received_slices.end(), + new_slice, compareReceivedSlices); + if (it != received_slices.begin()) { + std::vector<DownloadItem::ReceivedSlice>::iterator prev = std::prev(it); + if (prev->offset + prev->received_bytes == new_slice.offset) { + prev->received_bytes += new_slice.received_bytes; + return static_cast<size_t>(std::distance(received_slices.begin(), prev)); + } + } + + it = received_slices.emplace(it, new_slice); + return static_cast<size_t>(std::distance(received_slices.begin(), it)); +} + int64_t GetMinSliceSizeConfig() { std::string finch_value = base::GetFieldTrialParamValueByFeature( features::kParallelDownloading, kMinSliceSizeFinchKey);
diff --git a/content/browser/download/parallel_download_utils.h b/content/browser/download/parallel_download_utils.h index 85a5d0b8..c788ac2f 100644 --- a/content/browser/download/parallel_download_utils.h +++ b/content/browser/download/parallel_download_utils.h
@@ -17,6 +17,14 @@ CONTENT_EXPORT std::vector<DownloadItem::ReceivedSlice> FindSlicesToDownload( const std::vector<DownloadItem::ReceivedSlice>& received_slices); +// Adds or merges a new received slice into a vector of sorted slices. If the +// slice can be merged with the slice preceding it, merge the 2 slices. +// Otherwise, insert the slice and keep the vector sorted. Returns the index +// of the newly updated slice. +CONTENT_EXPORT size_t AddOrMergeReceivedSliceIntoSortedArray( + const DownloadItem::ReceivedSlice& new_slice, + std::vector<DownloadItem::ReceivedSlice>& received_slices); + // Finch configuration utilities. // // Get the minimum slice size to use parallel download from finch configuration.
diff --git a/content/browser/download/parallel_download_utils_unittest.cc b/content/browser/download/parallel_download_utils_unittest.cc index f6c52a9..74f4511 100644 --- a/content/browser/download/parallel_download_utils_unittest.cc +++ b/content/browser/download/parallel_download_utils_unittest.cc
@@ -55,4 +55,40 @@ slices_to_download[1].received_bytes); } +TEST(ParallelDownloadUtilsTest, AddOrMergeReceivedSliceIntoSortedArray) { + std::vector<DownloadItem::ReceivedSlice> slices; + DownloadItem::ReceivedSlice slice1(500, 500); + EXPECT_EQ(0u, AddOrMergeReceivedSliceIntoSortedArray(slice1, slices)); + EXPECT_EQ(1u, slices.size()); + EXPECT_EQ(slice1, slices[0]); + + // Adding a slice that can be merged with existing slice. + DownloadItem::ReceivedSlice slice2(1000, 400); + EXPECT_EQ(0u, AddOrMergeReceivedSliceIntoSortedArray(slice2, slices)); + EXPECT_EQ(1u, slices.size()); + EXPECT_EQ(500, slices[0].offset); + EXPECT_EQ(900, slices[0].received_bytes); + + DownloadItem::ReceivedSlice slice3(0, 50); + EXPECT_EQ(0u, AddOrMergeReceivedSliceIntoSortedArray(slice3, slices)); + EXPECT_EQ(2u, slices.size()); + EXPECT_EQ(slice3, slices[0]); + + DownloadItem::ReceivedSlice slice4(100, 50); + EXPECT_EQ(1u, AddOrMergeReceivedSliceIntoSortedArray(slice4, slices)); + EXPECT_EQ(3u, slices.size()); + EXPECT_EQ(slice3, slices[0]); + EXPECT_EQ(slice4, slices[1]); + + // A new slice can only merge with an existing slice earlier in the file, not + // later in the file. + DownloadItem::ReceivedSlice slice5(50, 50); + EXPECT_EQ(0u, AddOrMergeReceivedSliceIntoSortedArray(slice5, slices)); + EXPECT_EQ(3u, slices.size()); + EXPECT_EQ(0, slices[0].offset); + EXPECT_EQ(100, slices[0].received_bytes); + EXPECT_EQ(slice4, slices[1]); + +} + } // namespace content
diff --git a/content/browser/frame_host/navigation_entry_impl.cc b/content/browser/frame_host/navigation_entry_impl.cc index ef704580..c7f361d 100644 --- a/content/browser/frame_host/navigation_entry_impl.cc +++ b/content/browser/frame_host/navigation_entry_impl.cc
@@ -685,7 +685,8 @@ dest_url, dest_referrer, GetTransitionType(), navigation_type, !IsViewSourceMode(), should_replace_entry(), ui_timestamp, report_type, GetBaseURLForDataURL(), GetHistoryURLForDataURL(), previews_state, - navigation_start, method, post_body ? post_body : post_data_); + navigation_start, method, post_body ? post_body : post_data_, + base::Optional<SourceLocation>()); } StartNavigationParams NavigationEntryImpl::ConstructStartNavigationParams()
diff --git a/content/browser/frame_host/navigation_handle_impl.cc b/content/browser/frame_host/navigation_handle_impl.cc index 8a45b47..c20e6bd5 100644 --- a/content/browser/frame_host/navigation_handle_impl.cc +++ b/content/browser/frame_host/navigation_handle_impl.cc
@@ -458,6 +458,10 @@ return restore_type_; } +const GURL& NavigationHandleImpl::GetBaseURLForDataURL() { + return base_url_for_data_url_; +} + NavigationData* NavigationHandleImpl::GetNavigationData() { return navigation_data_.get(); }
diff --git a/content/browser/frame_host/navigation_handle_impl.h b/content/browser/frame_host/navigation_handle_impl.h index 853c2fb..8552ad4 100644 --- a/content/browser/frame_host/navigation_handle_impl.h +++ b/content/browser/frame_host/navigation_handle_impl.h
@@ -162,6 +162,7 @@ const std::string& GetSearchableFormEncoding() override; ReloadType GetReloadType() override; RestoreType GetRestoreType() override; + const GURL& GetBaseURLForDataURL() override; const GlobalRequestID& GetGlobalRequestID() override; NavigationData* GetNavigationData() override; @@ -351,6 +352,10 @@ complete_callback_for_testing_ = callback; } + void set_base_url_for_data_url(const GURL& url) { + base_url_for_data_url_ = url; + } + private: friend class NavigationHandleImplTest; @@ -512,6 +517,7 @@ GURL previous_url_; GURL base_url_; + GURL base_url_for_data_url_; net::HostPortPair socket_address_; NavigationType navigation_type_;
diff --git a/content/browser/frame_host/navigation_request.cc b/content/browser/frame_host/navigation_request.cc index a33257a2..e08de57 100644 --- a/content/browser/frame_host/navigation_request.cc +++ b/content/browser/frame_host/navigation_request.cc
@@ -19,6 +19,7 @@ #include "content/browser/frame_host/navigation_request_info.h" #include "content/browser/frame_host/navigator.h" #include "content/browser/frame_host/navigator_impl.h" +#include "content/browser/frame_host/render_frame_host_impl.h" #include "content/browser/loader/navigation_url_loader.h" #include "content/browser/renderer_host/render_process_host_impl.h" #include "content/browser/service_worker/service_worker_context_wrapper.h" @@ -32,6 +33,7 @@ #include "content/public/browser/navigation_controller.h" #include "content/public/browser/navigation_data.h" #include "content/public/browser/navigation_ui_data.h" +#include "content/public/browser/render_view_host.h" #include "content/public/browser/storage_partition.h" #include "content/public/browser/stream_handle.h" #include "content/public/common/appcache_info.h" @@ -40,6 +42,7 @@ #include "content/public/common/request_context_type.h" #include "content/public/common/resource_response.h" #include "content/public/common/url_constants.h" +#include "content/public/common/web_preferences.h" #include "net/base/load_flags.h" #include "net/base/net_errors.h" #include "net/base/url_util.h" @@ -526,14 +529,20 @@ } DCHECK(render_frame_host || !response_should_be_rendered_); - // For renderer-initiated navigations that are set to commit in a different - // renderer, allow the embedder to cancel the transfer. if (!browser_initiated_ && render_frame_host && - render_frame_host != frame_tree_node_->current_frame_host() && - !frame_tree_node_->navigator()->GetDelegate()->ShouldTransferNavigation( - frame_tree_node_->IsMainFrame())) { - frame_tree_node_->ResetNavigationRequest(false); - return; + render_frame_host != frame_tree_node_->current_frame_host()) { + // Reset the source location information if the navigation will not commit + // in the current renderer process. This information originated in another + // process (the current one), it should not be transferred to the new one. + common_params_.source_location.reset(); + + // Allow the embedder to cancel the cross-process commit if needed. + // TODO(clamy): Rename ShouldTransferNavigation once PlzNavigate ships. + if (!frame_tree_node_->navigator()->GetDelegate()->ShouldTransferNavigation( + frame_tree_node_->IsMainFrame())) { + frame_tree_node_->ResetNavigationRequest(false); + return; + } } if (navigation_data) @@ -661,8 +670,14 @@ } if (IsSchemeSupportedForAppCache(common_params_.url)) { - navigation_handle_->InitAppCacheHandle( - static_cast<ChromeAppCacheService*>(partition->GetAppCacheService())); + RenderFrameHostImpl* render_frame_host = + frame_tree_node_->render_manager()->GetFrameHostForNavigation(*this); + if (render_frame_host->GetRenderViewHost() + ->GetWebkitPreferences() + .application_cache_enabled) { + navigation_handle_->InitAppCacheHandle( + static_cast<ChromeAppCacheService*>(partition->GetAppCacheService())); + } } // Mark the fetch_start (Navigation Timing API).
diff --git a/content/browser/frame_host/navigator_impl.cc b/content/browser/frame_host/navigator_impl.cc index b2533a8..722ee0d 100644 --- a/content/browser/frame_host/navigator_impl.cc +++ b/content/browser/frame_host/navigator_impl.cc
@@ -625,12 +625,12 @@ } // Update the site of the SiteInstance if it doesn't have one yet, unless - // assigning a site is not necessary for this URL. In that case, the - // SiteInstance can still be considered unused until a navigation to a real - // page. + // assigning a site is not necessary for this URL or the commit was for an + // error page. In that case, the SiteInstance can still be considered unused + // until a navigation to a real page. SiteInstanceImpl* site_instance = render_frame_host->GetSiteInstance(); - if (!site_instance->HasSite() && - ShouldAssignSiteForURL(params.url)) { + if (!site_instance->HasSite() && ShouldAssignSiteForURL(params.url) && + !params.url_is_unreachable) { site_instance->SetSite(params.url); } @@ -1175,6 +1175,9 @@ if (!navigation_request) return; // Navigation was synchronously stopped. + navigation_request->navigation_handle()->set_base_url_for_data_url( + entry.GetBaseURLForDataURL()); + // Have the current renderer execute its beforeunload event if needed. If it // is not needed then NavigationRequest::BeginNavigation should be directly // called instead.
diff --git a/content/browser/frame_host/render_frame_host_impl.cc b/content/browser/frame_host/render_frame_host_impl.cc index 6f244fc..a308aae 100644 --- a/content/browser/frame_host/render_frame_host_impl.cc +++ b/content/browser/frame_host/render_frame_host_impl.cc
@@ -97,6 +97,7 @@ #include "device/generic_sensor/sensor_provider_impl.h" #include "device/geolocation/geolocation_service_context.h" #include "device/vibration/vibration_manager_impl.h" +#include "device/vr/features.h" #include "device/wake_lock/wake_lock_service_context.h" #include "media/base/media_switches.h" #include "media/media_features.h" @@ -125,7 +126,7 @@ #include "content/browser/frame_host/popup_menu_helper_mac.h" #endif -#if defined(ENABLE_WEBVR) +#if BUILDFLAG(ENABLE_WEBVR) #include "device/vr/vr_service_impl.h" // nogncheck #else #include "device/vr/vr_service.mojom.h" // nogncheck @@ -2367,7 +2368,7 @@ process_->GetID(), routing_id_)); -#if defined(ENABLE_WEBVR) +#if BUILDFLAG(ENABLE_WEBVR) GetInterfaceRegistry()->AddInterface<device::mojom::VRService>( base::Bind(&device::VRServiceImpl::Create)); #else @@ -2508,7 +2509,8 @@ data_url, Referrer(), ui::PAGE_TRANSITION_LINK, FrameMsg_Navigate_Type::DIFFERENT_DOCUMENT, false, false, base::TimeTicks::Now(), FrameMsg_UILoadMetricsReportType::NO_REPORT, - GURL(), GURL(), PREVIEWS_OFF, base::TimeTicks::Now(), "GET", nullptr); + GURL(), GURL(), PREVIEWS_OFF, base::TimeTicks::Now(), "GET", nullptr, + base::Optional<SourceLocation>()); if (IsBrowserSideNavigationEnabled()) { CommitNavigation(nullptr, nullptr, common_params, RequestNavigationParams(), false);
diff --git a/content/browser/gpu/gpu_data_manager_impl.cc b/content/browser/gpu/gpu_data_manager_impl.cc index b111a1d0b..0c74a29 100644 --- a/content/browser/gpu/gpu_data_manager_impl.cc +++ b/content/browser/gpu/gpu_data_manager_impl.cc
@@ -86,12 +86,6 @@ return private_->ShouldUseSwiftShader(); } -void GpuDataManagerImpl::RegisterSwiftShaderPath( - const base::FilePath& path) { - base::AutoLock auto_lock(lock_); - private_->RegisterSwiftShaderPath(path); -} - void GpuDataManagerImpl::AddObserver( GpuDataManagerObserver* observer) { base::AutoLock auto_lock(lock_);
diff --git a/content/browser/gpu/gpu_data_manager_impl.h b/content/browser/gpu/gpu_data_manager_impl.h index 83227bf..83697df 100644 --- a/content/browser/gpu/gpu_data_manager_impl.h +++ b/content/browser/gpu/gpu_data_manager_impl.h
@@ -12,7 +12,6 @@ #include <string> #include "base/compiler_specific.h" -#include "base/files/file_path.h" #include "base/logging.h" #include "base/macros.h" #include "base/memory/singleton.h" @@ -80,7 +79,6 @@ bool IsCompleteGpuInfoAvailable() const override; void RequestVideoMemoryUsageStatsUpdate() const override; bool ShouldUseSwiftShader() const override; - void RegisterSwiftShaderPath(const base::FilePath& path) override; // TODO(kbr): the threading model for the GpuDataManagerObservers is // not well defined, and it's impossible for callers to correctly // delete observers from anywhere except in one of the observer's
diff --git a/content/browser/gpu/gpu_data_manager_impl_private.cc b/content/browser/gpu/gpu_data_manager_impl_private.cc index 864feb3..319a130a 100644 --- a/content/browser/gpu/gpu_data_manager_impl_private.cc +++ b/content/browser/gpu/gpu_data_manager_impl_private.cc
@@ -43,6 +43,7 @@ #include "gpu/ipc/service/switches.h" #include "media/media_features.h" #include "ui/base/ui_base_switches.h" +#include "ui/gl/gl_features.h" #include "ui/gl/gl_implementation.h" #include "ui/gl/gl_switches.h" #include "ui/gl/gpu_switching_manager.h" @@ -452,12 +453,6 @@ return use_swiftshader_; } -void GpuDataManagerImplPrivate::RegisterSwiftShaderPath( - const base::FilePath& path) { - swiftshader_path_ = path; - EnableSwiftShaderIfNecessary(); -} - void GpuDataManagerImplPrivate::AddObserver(GpuDataManagerObserver* observer) { GpuDataManagerImpl::UnlockedSession session(owner_); observer_list_->AddObserver(observer); @@ -766,11 +761,6 @@ else command_line->AppendSwitchASCII(switches::kSupportsDualGpus, "false"); - if (!swiftshader_path_.empty()) { - command_line->AppendSwitchPath(switches::kSwiftShaderPath, - swiftshader_path_); - } - if (!gpu_driver_bugs_.empty()) { command_line->AppendSwitchASCII(switches::kGpuDriverBugWorkarounds, IntSetToString(gpu_driver_bugs_)); @@ -1152,8 +1142,6 @@ DCHECK(owner_); const base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); - swiftshader_path_ = command_line->GetSwitchValuePath( - switches::kSwiftShaderPath); if (ShouldDisableHardwareAcceleration()) DisableHardwareAcceleration(); @@ -1258,13 +1246,14 @@ } void GpuDataManagerImplPrivate::EnableSwiftShaderIfNecessary() { - if (!GpuAccessAllowed(NULL) || +#if BUILDFLAG(ENABLE_SWIFTSHADER) + if (!GpuAccessAllowed(nullptr) || blacklisted_features_.count(gpu::GPU_FEATURE_TYPE_ACCELERATED_WEBGL)) { - if (!swiftshader_path_.empty() && - !base::CommandLine::ForCurrentProcess()->HasSwitch( - switches::kDisableSoftwareRasterizer)) + if (!base::CommandLine::ForCurrentProcess()->HasSwitch( + switches::kDisableSoftwareRasterizer)) use_swiftshader_ = true; } +#endif } std::string GpuDataManagerImplPrivate::GetDomainFromURL(
diff --git a/content/browser/gpu/gpu_data_manager_impl_private.h b/content/browser/gpu/gpu_data_manager_impl_private.h index b7d0b33b..5028618 100644 --- a/content/browser/gpu/gpu_data_manager_impl_private.h +++ b/content/browser/gpu/gpu_data_manager_impl_private.h
@@ -55,7 +55,6 @@ bool IsCompleteGpuInfoAvailable() const; void RequestVideoMemoryUsageStatsUpdate() const; bool ShouldUseSwiftShader() const; - void RegisterSwiftShaderPath(const base::FilePath& path); void AddObserver(GpuDataManagerObserver* observer); void RemoveObserver(GpuDataManagerObserver* observer); void UnblockDomainFrom3DAPIs(const GURL& url); @@ -252,8 +251,6 @@ bool use_swiftshader_; - base::FilePath swiftshader_path_; - // Current card force-blacklisted due to GPU crashes, or disabled through // the --disable-gpu commandline switch. bool card_blacklisted_;
diff --git a/content/browser/gpu/gpu_data_manager_impl_private_unittest.cc b/content/browser/gpu/gpu_data_manager_impl_private_unittest.cc index 7e813da..0a239f3 100644 --- a/content/browser/gpu/gpu_data_manager_impl_private_unittest.cc +++ b/content/browser/gpu/gpu_data_manager_impl_private_unittest.cc
@@ -179,16 +179,30 @@ EXPECT_TRUE(manager->GpuAccessAllowed(&reason)); EXPECT_TRUE(reason.empty()); - EXPECT_EQ(1u, manager->GetBlacklistedFeatureCount()); + if (manager->ShouldUseSwiftShader()) { + EXPECT_EQ(static_cast<size_t>(gpu::NUMBER_OF_GPU_FEATURE_TYPES), + manager->GetBlacklistedFeatureCount()); + } else { + EXPECT_EQ(1u, manager->GetBlacklistedFeatureCount()); + } EXPECT_TRUE( manager->IsFeatureBlacklisted(gpu::GPU_FEATURE_TYPE_ACCELERATED_WEBGL)); gpu_info.gl_vendor = "NVIDIA"; gpu_info.gl_renderer = "NVIDIA GeForce GT 120"; manager->UpdateGpuInfo(gpu_info); - EXPECT_FALSE(manager->GpuAccessAllowed(&reason)); - EXPECT_FALSE(reason.empty()); - EXPECT_EQ(2u, manager->GetBlacklistedFeatureCount()); + if (manager->ShouldUseSwiftShader()) { + EXPECT_TRUE(manager->GpuAccessAllowed(&reason)); + EXPECT_TRUE(reason.empty()); + EXPECT_EQ(static_cast<size_t>(gpu::NUMBER_OF_GPU_FEATURE_TYPES), + manager->GetBlacklistedFeatureCount()); + EXPECT_TRUE(manager->IsFeatureBlacklisted(gpu::GPU_FEATURE_TYPE_WEBGL2)); + } else { + EXPECT_FALSE(manager->GpuAccessAllowed(&reason)); + EXPECT_FALSE(reason.empty()); + EXPECT_EQ(2u, manager->GetBlacklistedFeatureCount()); + EXPECT_FALSE(manager->IsFeatureBlacklisted(gpu::GPU_FEATURE_TYPE_WEBGL2)); + } EXPECT_TRUE( manager->IsFeatureBlacklisted(gpu::GPU_FEATURE_TYPE_ACCELERATED_WEBGL)); EXPECT_TRUE(manager->IsFeatureBlacklisted( @@ -236,7 +250,12 @@ EXPECT_TRUE(manager->GpuAccessAllowed(&reason)); EXPECT_TRUE(reason.empty()); - EXPECT_EQ(1u, manager->GetBlacklistedFeatureCount()); + if (manager->ShouldUseSwiftShader()) { + EXPECT_EQ(static_cast<size_t>(gpu::NUMBER_OF_GPU_FEATURE_TYPES), + manager->GetBlacklistedFeatureCount()); + } else { + EXPECT_EQ(1u, manager->GetBlacklistedFeatureCount()); + } EXPECT_TRUE(manager->IsFeatureBlacklisted( gpu::GPU_FEATURE_TYPE_ACCELERATED_2D_CANVAS)); @@ -245,7 +264,12 @@ manager->UpdateGpuInfo(gpu_info); EXPECT_TRUE(manager->GpuAccessAllowed(&reason)); EXPECT_TRUE(reason.empty()); - EXPECT_EQ(3u, manager->GetBlacklistedFeatureCount()); + if (manager->ShouldUseSwiftShader()) { + EXPECT_EQ(static_cast<size_t>(gpu::NUMBER_OF_GPU_FEATURE_TYPES), + manager->GetBlacklistedFeatureCount()); + } else { + EXPECT_EQ(3u, manager->GetBlacklistedFeatureCount()); + } EXPECT_TRUE(manager->IsFeatureBlacklisted( gpu::GPU_FEATURE_TYPE_ACCELERATED_2D_CANVAS)); EXPECT_TRUE( @@ -283,13 +307,21 @@ manager->InitializeForTesting(blacklist_json, gpu_info); EXPECT_TRUE(manager->GpuAccessAllowed(NULL)); - EXPECT_EQ(1u, manager->GetBlacklistedFeatureCount()); + EXPECT_EQ(manager->ShouldUseSwiftShader() + ? static_cast<size_t>(gpu::NUMBER_OF_GPU_FEATURE_TYPES) + : 1u, + manager->GetBlacklistedFeatureCount()); // Now assume gpu process launches and full GPU info is collected. gpu_info.gl_renderer = "NVIDIA GeForce GT 120"; manager->UpdateGpuInfo(gpu_info); EXPECT_TRUE(manager->GpuAccessAllowed(NULL)); - EXPECT_EQ(0u, manager->GetBlacklistedFeatureCount()); + // Since SwiftShader was enabled by first gpu_info, UpdateGpuInfo + // should have failed and SwiftShader should still be active + EXPECT_EQ(manager->ShouldUseSwiftShader() + ? static_cast<size_t>(gpu::NUMBER_OF_GPU_FEATURE_TYPES) + : 0u, + manager->GetBlacklistedFeatureCount()); } TEST_F(GpuDataManagerImplPrivateTest, DisableHardwareAcceleration) { @@ -301,8 +333,13 @@ EXPECT_TRUE(reason.empty()); manager->DisableHardwareAcceleration(); - EXPECT_FALSE(manager->GpuAccessAllowed(&reason)); - EXPECT_FALSE(reason.empty()); + if (manager->ShouldUseSwiftShader()) { + EXPECT_TRUE(manager->GpuAccessAllowed(&reason)); + EXPECT_TRUE(reason.empty()); + } else { + EXPECT_FALSE(manager->GpuAccessAllowed(&reason)); + EXPECT_FALSE(reason.empty()); + } EXPECT_EQ(static_cast<size_t>(gpu::NUMBER_OF_GPU_FEATURE_TYPES), manager->GetBlacklistedFeatureCount()); } @@ -316,19 +353,12 @@ EXPECT_FALSE(manager->ShouldUseSwiftShader()); manager->DisableHardwareAcceleration(); - EXPECT_FALSE(manager->GpuAccessAllowed(NULL)); - EXPECT_FALSE(manager->ShouldUseSwiftShader()); - - // If SwiftShader is enabled, even if we blacklist GPU, - // GPU process is still allowed. - const base::FilePath test_path(FILE_PATH_LITERAL("AnyPath")); - manager->RegisterSwiftShaderPath(test_path); - EXPECT_TRUE(manager->ShouldUseSwiftShader()); - EXPECT_TRUE(manager->GpuAccessAllowed(NULL)); + EXPECT_EQ(manager->ShouldUseSwiftShader(), manager->GpuAccessAllowed(NULL)); EXPECT_EQ(static_cast<size_t>(gpu::NUMBER_OF_GPU_FEATURE_TYPES), manager->GetBlacklistedFeatureCount()); EXPECT_TRUE(manager->IsFeatureBlacklisted( gpu::GPU_FEATURE_TYPE_ACCELERATED_2D_CANVAS)); + EXPECT_TRUE(manager->IsFeatureBlacklisted(gpu::GPU_FEATURE_TYPE_WEBGL2)); } TEST_F(GpuDataManagerImplPrivateTest, SwiftShaderRendering2) { @@ -339,19 +369,17 @@ EXPECT_TRUE(manager->GpuAccessAllowed(NULL)); EXPECT_FALSE(manager->ShouldUseSwiftShader()); - const base::FilePath test_path(FILE_PATH_LITERAL("AnyPath")); - manager->RegisterSwiftShaderPath(test_path); - EXPECT_EQ(0u, manager->GetBlacklistedFeatureCount()); - EXPECT_TRUE(manager->GpuAccessAllowed(NULL)); - EXPECT_FALSE(manager->ShouldUseSwiftShader()); - manager->DisableHardwareAcceleration(); - EXPECT_TRUE(manager->GpuAccessAllowed(NULL)); - EXPECT_TRUE(manager->ShouldUseSwiftShader()); + if (manager->ShouldUseSwiftShader()) { + EXPECT_TRUE(manager->GpuAccessAllowed(NULL)); + } else { + EXPECT_FALSE(manager->GpuAccessAllowed(NULL)); + } EXPECT_EQ(static_cast<size_t>(gpu::NUMBER_OF_GPU_FEATURE_TYPES), manager->GetBlacklistedFeatureCount()); EXPECT_TRUE(manager->IsFeatureBlacklisted( gpu::GPU_FEATURE_TYPE_ACCELERATED_2D_CANVAS)); + EXPECT_TRUE(manager->IsFeatureBlacklisted(gpu::GPU_FEATURE_TYPE_WEBGL2)); } TEST_F(GpuDataManagerImplPrivateTest, GpuInfoUpdate) { @@ -380,10 +408,11 @@ manager->InitializeForTesting("", gpu::GPUInfo()); manager->DisableHardwareAcceleration(); - const base::FilePath test_path(FILE_PATH_LITERAL("AnyPath")); - manager->RegisterSwiftShaderPath(test_path); - EXPECT_TRUE(manager->ShouldUseSwiftShader()); - EXPECT_TRUE(manager->GpuAccessAllowed(NULL)); + if (manager->ShouldUseSwiftShader()) { + EXPECT_TRUE(manager->GpuAccessAllowed(NULL)); + } else { + EXPECT_FALSE(manager->GpuAccessAllowed(NULL)); + } { base::RunLoop run_loop; @@ -404,7 +433,12 @@ base::RunLoop run_loop; run_loop.RunUntilIdle(); } - EXPECT_FALSE(observer.gpu_info_updated()); + if (manager->ShouldUseSwiftShader()) { + // Once SwiftShader is enabled, the gpu info can no longer be updated + EXPECT_FALSE(observer.gpu_info_updated()); + } else { + EXPECT_TRUE(observer.gpu_info_updated()); + } } TEST_F(GpuDataManagerImplPrivateTest, GPUVideoMemoryUsageStatsUpdate) { @@ -759,15 +793,10 @@ EXPECT_EQ(static_cast<size_t>(gpu::NUMBER_OF_GPU_FEATURE_TYPES), manager->GetBlacklistedFeatureCount()); - // TODO(zmo): remove the Linux specific behavior once we fix - // crbug.com/238466. -#if defined(OS_LINUX) - EXPECT_TRUE(manager->GpuAccessAllowed(&reason)); - EXPECT_TRUE(reason.empty()); -#else - EXPECT_FALSE(manager->GpuAccessAllowed(&reason)); - EXPECT_FALSE(reason.empty()); -#endif + if (manager->ShouldUseSwiftShader()) { + EXPECT_TRUE(manager->GpuAccessAllowed(&reason)); + EXPECT_TRUE(reason.empty()); + } } TEST_F(GpuDataManagerImplPrivateTest, UpdateActiveGpu) { @@ -805,7 +834,12 @@ TestObserver observer; manager->AddObserver(&observer); - EXPECT_EQ(1u, manager->GetBlacklistedFeatureCount()); + if (manager->ShouldUseSwiftShader()) { + EXPECT_EQ(static_cast<size_t>(gpu::NUMBER_OF_GPU_FEATURE_TYPES), + manager->GetBlacklistedFeatureCount()); + } else { + EXPECT_EQ(1u, manager->GetBlacklistedFeatureCount()); + } // Update with the same Intel GPU active. EXPECT_FALSE(manager->UpdateActiveGpu(0x8086, 0x04a1)); @@ -814,7 +848,12 @@ run_loop.RunUntilIdle(); } EXPECT_FALSE(observer.gpu_info_updated()); - EXPECT_EQ(1u, manager->GetBlacklistedFeatureCount()); + if (manager->ShouldUseSwiftShader()) { + EXPECT_EQ(static_cast<size_t>(gpu::NUMBER_OF_GPU_FEATURE_TYPES), + manager->GetBlacklistedFeatureCount()); + } else { + EXPECT_EQ(1u, manager->GetBlacklistedFeatureCount()); + } // Set NVIDIA GPU to be active. EXPECT_TRUE(manager->UpdateActiveGpu(0x10de, 0x0640)); @@ -823,7 +862,12 @@ run_loop.RunUntilIdle(); } EXPECT_TRUE(observer.gpu_info_updated()); - EXPECT_EQ(0u, manager->GetBlacklistedFeatureCount()); + if (manager->ShouldUseSwiftShader()) { + EXPECT_EQ(static_cast<size_t>(gpu::NUMBER_OF_GPU_FEATURE_TYPES), + manager->GetBlacklistedFeatureCount()); + } else { + EXPECT_EQ(0u, manager->GetBlacklistedFeatureCount()); + } observer.Reset(); EXPECT_FALSE(observer.gpu_info_updated()); @@ -835,7 +879,12 @@ run_loop.RunUntilIdle(); } EXPECT_FALSE(observer.gpu_info_updated()); - EXPECT_EQ(0u, manager->GetBlacklistedFeatureCount()); + if (manager->ShouldUseSwiftShader()) { + EXPECT_EQ(static_cast<size_t>(gpu::NUMBER_OF_GPU_FEATURE_TYPES), + manager->GetBlacklistedFeatureCount()); + } else { + EXPECT_EQ(0u, manager->GetBlacklistedFeatureCount()); + } // Set Intel GPU to be active. EXPECT_TRUE(manager->UpdateActiveGpu(0x8086, 0x04a1)); @@ -844,7 +893,12 @@ run_loop.RunUntilIdle(); } EXPECT_TRUE(observer.gpu_info_updated()); - EXPECT_EQ(1u, manager->GetBlacklistedFeatureCount()); + if (manager->ShouldUseSwiftShader()) { + EXPECT_EQ(static_cast<size_t>(gpu::NUMBER_OF_GPU_FEATURE_TYPES), + manager->GetBlacklistedFeatureCount()); + } else { + EXPECT_EQ(1u, manager->GetBlacklistedFeatureCount()); + } } } // namespace content
diff --git a/content/browser/loader/mime_sniffing_resource_handler.cc b/content/browser/loader/mime_sniffing_resource_handler.cc index 29d9b12..11adad4 100644 --- a/content/browser/loader/mime_sniffing_resource_handler.cc +++ b/content/browser/loader/mime_sniffing_resource_handler.cc
@@ -47,9 +47,9 @@ const char kAcceptHeader[] = "Accept"; const char kFrameAcceptHeader[] = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp," - "*/*;q=0.8"; + "image/apng,*/*;q=0.8"; const char kStylesheetAcceptHeader[] = "text/css,*/*;q=0.1"; -const char kImageAcceptHeader[] = "image/webp,image/*,*/*;q=0.8"; +const char kImageAcceptHeader[] = "image/webp,image/apng,image/*,*/*;q=0.8"; const char kDefaultAcceptHeader[] = "*/*"; // Used to write into an existing IOBuffer at a given offset.
diff --git a/content/browser/loader/mime_sniffing_resource_handler_unittest.cc b/content/browser/loader/mime_sniffing_resource_handler_unittest.cc index ae18ed3b..4045a55c 100644 --- a/content/browser/loader/mime_sniffing_resource_handler_unittest.cc +++ b/content/browser/loader/mime_sniffing_resource_handler_unittest.cc
@@ -621,18 +621,18 @@ TEST_F(MimeSniffingResourceHandlerTest, AcceptHeaders) { EXPECT_EQ( "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp," - "*/*;q=0.8", + "image/apng,*/*;q=0.8", TestAcceptHeaderSetting(RESOURCE_TYPE_MAIN_FRAME)); EXPECT_EQ( "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp," - "*/*;q=0.8", + "image/apng,*/*;q=0.8", TestAcceptHeaderSetting(RESOURCE_TYPE_SUB_FRAME)); EXPECT_EQ("text/css,*/*;q=0.1", TestAcceptHeaderSetting(RESOURCE_TYPE_STYLESHEET)); EXPECT_EQ("*/*", TestAcceptHeaderSetting(RESOURCE_TYPE_SCRIPT)); - EXPECT_EQ("image/webp,image/*,*/*;q=0.8", + EXPECT_EQ("image/webp,image/apng,image/*,*/*;q=0.8", TestAcceptHeaderSetting(RESOURCE_TYPE_IMAGE)); - EXPECT_EQ("image/webp,image/*,*/*;q=0.8", + EXPECT_EQ("image/webp,image/apng,image/*,*/*;q=0.8", TestAcceptHeaderSetting(RESOURCE_TYPE_FAVICON)); EXPECT_EQ("*/*", TestAcceptHeaderSetting(RESOURCE_TYPE_FONT_RESOURCE)); EXPECT_EQ("*/*", TestAcceptHeaderSetting(RESOURCE_TYPE_SUB_RESOURCE));
diff --git a/content/browser/mach_broker_mac_unittest.cc b/content/browser/mach_broker_mac_unittest.cc index 261f500..a170d43 100644 --- a/content/browser/mach_broker_mac_unittest.cc +++ b/content/browser/mach_broker_mac_unittest.cc
@@ -42,14 +42,15 @@ return broker_.child_process_id_map_.count(child_process_id); } - base::Process LaunchTestChild(const std::string& function, - int child_process_id) { + base::SpawnChildResult LaunchTestChild(const std::string& function, + int child_process_id) { base::AutoLock lock(broker_.GetLock()); - base::Process test_child_process = base::SpawnMultiProcessTestChild( + base::SpawnChildResult spawn_child = base::SpawnMultiProcessTestChild( function, base::GetMultiProcessTestChildBaseCommandLine(), base::LaunchOptions()); - broker_.AddPlaceholderForPid(test_child_process.Handle(), child_process_id); - return test_child_process; + broker_.AddPlaceholderForPid(spawn_child.process.Handle(), + child_process_id); + return spawn_child; } void WaitForChildExit(base::Process& process) { @@ -91,22 +92,23 @@ base::AutoLock lock(broker_.GetLock()); broker_.EnsureRunning(); } - base::Process child_process = LaunchTestChild("MachBrokerTestChild", 7); + base::SpawnChildResult spawn_child = + LaunchTestChild("MachBrokerTestChild", 7); WaitForTaskPort(); - EXPECT_EQ(child_process.Handle(), received_process_); - WaitForChildExit(child_process); + EXPECT_EQ(spawn_child.process.Handle(), received_process_); + WaitForChildExit(spawn_child.process); EXPECT_NE(static_cast<mach_port_t>(MACH_PORT_NULL), - broker_.TaskForPid(child_process.Handle())); + broker_.TaskForPid(spawn_child.process.Handle())); EXPECT_EQ(1, GetChildProcessCount(7)); // Should be no entry for any other PID. EXPECT_EQ(static_cast<mach_port_t>(MACH_PORT_NULL), - broker_.TaskForPid(child_process.Handle() + 1)); + broker_.TaskForPid(spawn_child.process.Handle() + 1)); InvalidateChildProcessId(7); EXPECT_EQ(static_cast<mach_port_t>(MACH_PORT_NULL), - broker_.TaskForPid(child_process.Handle())); + broker_.TaskForPid(spawn_child.process.Handle())); EXPECT_EQ(0, GetChildProcessCount(7)); }
diff --git a/content/browser/media/capture/web_contents_video_capture_device_unittest.cc b/content/browser/media/capture/web_contents_video_capture_device_unittest.cc index d86758c..1983a83 100644 --- a/content/browser/media/capture/web_contents_video_capture_device_unittest.cc +++ b/content/browser/media/capture/web_contents_video_capture_device_unittest.cc
@@ -294,11 +294,14 @@ // analysis is too slow, the backlog of frames will grow without bound and // trouble erupts. http://crbug.com/174519 using media::VideoFrame; - auto buffer_access = buffer.handle_provider->GetHandleForInProcessAccess(); - auto frame = VideoFrame::WrapExternalSharedMemory( - media::PIXEL_FORMAT_I420, format.frame_size, visible_rect, - format.frame_size, buffer_access->data(), buffer_access->mapped_size(), - base::SharedMemory::NULLHandle(), 0u, base::TimeDelta()); + std::unique_ptr<media::VideoCaptureBufferHandle> buffer_access = + buffer.handle_provider->GetHandleForInProcessAccess(); + scoped_refptr<media::VideoFrame> frame = + VideoFrame::WrapExternalSharedMemory( + media::PIXEL_FORMAT_I420, format.frame_size, visible_rect, + format.frame_size, buffer_access->data(), + buffer_access->mapped_size(), base::SharedMemory::NULLHandle(), 0u, + base::TimeDelta()); const gfx::Point center = visible_rect.CenterPoint(); const int center_offset_y = (frame->stride(VideoFrame::kYPlane) * center.y()) + center.x(); @@ -554,7 +557,7 @@ void SimulateSourceSizeChange(const gfx::Size& size) { DCHECK_CURRENTLY_ON(BrowserThread::UI); - auto* const view = test_view(); + CaptureTestView* const view = test_view(); view->SetSize(size); // Normally, RenderWidgetHostImpl would notify WebContentsImpl that the size // has changed. However, in this test setup, where there is no render @@ -575,7 +578,8 @@ while ((base::TimeTicks::Now() - start_time) < TestTimeouts::action_max_timeout()) { SimulateDrawEvent(); - const auto color_and_size = client_observer()->WaitForNextFrame(); + const std::pair<SkColor, gfx::Size>& color_and_size = + client_observer()->WaitForNextFrame(); if (color_and_size.first == ConvertRgbToYuv(color) && color_and_size.second == size) { return; @@ -643,7 +647,7 @@ TEST_F(WebContentsVideoCaptureDeviceTest, SafelyStartsUpAfterWebContentsHasGone) { ResetWebContents(); - auto client = client_observer()->PassClient(); + std::unique_ptr<StubClient> client = client_observer()->PassClient(); EXPECT_CALL(*client, OnStarted()); device()->AllocateAndStart(DefaultCaptureParams(), std::move(client)); ASSERT_NO_FATAL_FAILURE(client_observer()->WaitForError()); @@ -657,7 +661,7 @@ RunsThenErrorsOutWhenWebContentsIsDestroyed) { // We'll simulate the tab being closed after the capture pipeline is up and // running. - auto client = client_observer()->PassClient(); + std::unique_ptr<StubClient> client = client_observer()->PassClient(); EXPECT_CALL(*client, OnStarted()); device()->AllocateAndStart(DefaultCaptureParams(), std::move(client)); @@ -703,7 +707,7 @@ DeliversToCorrectClientAcrossRestarts) { // While the device is up-and-running, expect frame captures. client_observer()->SetIsExpectingFrames(true); - auto client = client_observer()->PassClient(); + std::unique_ptr<StubClient> client = client_observer()->PassClient(); EXPECT_CALL(*client, OnStarted()); device()->AllocateAndStart(DefaultCaptureParams(), std::move(client)); base::RunLoop().RunUntilIdle(); @@ -729,7 +733,7 @@ // expect to see any frame captures. StubClientObserver observer2; observer2.SetIsExpectingFrames(true); - auto client2 = observer2.PassClient(); + std::unique_ptr<StubClient> client2 = observer2.PassClient(); EXPECT_CALL(*client2, OnStarted()); device()->AllocateAndStart(DefaultCaptureParams(), std::move(client2)); test_view()->SetSolidColor(SK_ColorBLUE); @@ -746,7 +750,7 @@ // consumer. The test will alternate between the RGB/SkBitmap and YUV/VideoFrame // capture paths. TEST_F(WebContentsVideoCaptureDeviceTest, GoesThroughAllTheMotions) { - auto client = client_observer()->PassClient(); + std::unique_ptr<StubClient> client = client_observer()->PassClient(); EXPECT_CALL(*client, OnStarted()); device()->AllocateAndStart(DefaultCaptureParams(), std::move(client)); @@ -781,10 +785,10 @@ // policy, the source size changes result in video frames of possibly varying // resolutions, but all with the same aspect ratio. TEST_F(WebContentsVideoCaptureDeviceTest, VariableResolution_FixedAspectRatio) { - auto capture_params = DefaultCaptureParams(); + media::VideoCaptureParams capture_params = DefaultCaptureParams(); capture_params.resolution_change_policy = media::RESOLUTION_POLICY_FIXED_ASPECT_RATIO; - auto client = client_observer()->PassClient(); + std::unique_ptr<StubClient> client = client_observer()->PassClient(); EXPECT_CALL(*client, OnStarted()); device()->AllocateAndStart(capture_params, std::move(client)); @@ -829,10 +833,10 @@ // policy, the source size changes result in video frames of possibly varying // resolutions. TEST_F(WebContentsVideoCaptureDeviceTest, VariableResolution_AnyWithinLimits) { - auto capture_params = DefaultCaptureParams(); + media::VideoCaptureParams capture_params = DefaultCaptureParams(); capture_params.resolution_change_policy = media::RESOLUTION_POLICY_ANY_WITHIN_LIMIT; - auto client = client_observer()->PassClient(); + std::unique_ptr<StubClient> client = client_observer()->PassClient(); EXPECT_CALL(*client, OnStarted()); device()->AllocateAndStart(capture_params, std::move(client)); @@ -901,11 +905,11 @@ ASSERT_NE(capture_preferred_size, web_contents()->GetPreferredSize()); // Start the WebContentsVideoCaptureDevice. - auto capture_params = DefaultCaptureParams(); + media::VideoCaptureParams capture_params = DefaultCaptureParams(); capture_params.requested_format.frame_size = oddball_size; capture_params.resolution_change_policy = policy; StubClientObserver unused_observer; - auto client = unused_observer.PassClient(); + std::unique_ptr<StubClient> client = unused_observer.PassClient(); EXPECT_CALL(*client, OnStarted()); device()->AllocateAndStart(capture_params, std::move(client)); base::RunLoop().RunUntilIdle(); @@ -973,7 +977,7 @@ // Tests the Suspend/Resume() functionality. TEST_F(WebContentsVideoCaptureDeviceTest, SuspendsAndResumes) { - auto client = client_observer()->PassClient(); + std::unique_ptr<StubClient> client = client_observer()->PassClient(); EXPECT_CALL(*client, OnStarted()); device()->AllocateAndStart(DefaultCaptureParams(), std::move(client)); @@ -1008,7 +1012,7 @@ // Tests the RequestRefreshFrame() functionality. TEST_F(WebContentsVideoCaptureDeviceTest, ProvidesRefreshFrames) { - auto client = client_observer()->PassClient(); + std::unique_ptr<StubClient> client = client_observer()->PassClient(); EXPECT_CALL(*client, OnStarted()); device()->AllocateAndStart(DefaultCaptureParams(), std::move(client));
diff --git a/content/browser/media/media_devices_permission_checker.cc b/content/browser/media/media_devices_permission_checker.cc index d18a0a0..5e95f32 100644 --- a/content/browser/media/media_devices_permission_checker.cc +++ b/content/browser/media/media_devices_permission_checker.cc
@@ -113,22 +113,6 @@ callback); } -MediaDevicesManager::BoolDeviceTypes -MediaDevicesPermissionChecker::CheckPermissionsOnUIThread( - MediaDevicesManager::BoolDeviceTypes requested_device_types, - int render_process_id, - int render_frame_id, - const url::Origin& security_origin) const { - if (use_override_) { - MediaDevicesManager::BoolDeviceTypes result; - result.fill(override_value_); - return result; - } - - return DoCheckPermissionsOnUIThread(requested_device_types, render_process_id, - render_frame_id, security_origin); -} - void MediaDevicesPermissionChecker::CheckPermissions( MediaDevicesManager::BoolDeviceTypes requested, int render_process_id,
diff --git a/content/browser/media/media_devices_permission_checker.h b/content/browser/media/media_devices_permission_checker.h index 43b175b..3eb2255 100644 --- a/content/browser/media/media_devices_permission_checker.h +++ b/content/browser/media/media_devices_permission_checker.h
@@ -52,20 +52,6 @@ // Checks if the origin |security_origin| associated to a render frame // identified by |render_process_id| and |render_frame_id| is allowed to // access the media device types marked with a value of true in - // |requested_device_types|. The result is indexed by MediaDeviceType. - // Entries in the result with a value of true for requested device types - // indicate that the frame has permission to access devices of the - // corresponding types. - // This method must be called on the UI thread. - MediaDevicesManager::BoolDeviceTypes CheckPermissionsOnUIThread( - MediaDevicesManager::BoolDeviceTypes requested_device_types, - int render_process_id, - int render_frame_id, - const url::Origin& security_origin) const; - - // Checks if the origin |security_origin| associated to a render frame - // identified by |render_process_id| and |render_frame_id| is allowed to - // access the media device types marked with a value of true in // |requested_device_types|. The result is passed to |callback|. The result is // indexed by MediaDeviceType. Entries in the result with a value of true for // requested device types indicate that the frame has permission to access
diff --git a/content/browser/memory/memory_coordinator_impl_unittest.cc b/content/browser/memory/memory_coordinator_impl_unittest.cc index f731614..8663ae2 100644 --- a/content/browser/memory/memory_coordinator_impl_unittest.cc +++ b/content/browser/memory/memory_coordinator_impl_unittest.cc
@@ -552,8 +552,12 @@ coordinator_->CreateChildMemoryCoordinator(1); coordinator_->CreateChildMemoryCoordinator(2); - base::Process process1 = SpawnChild("process1"); - base::Process process2 = SpawnChild("process2"); + + base::SpawnChildResult spawn_result1 = SpawnChild("process1"); + base::Process& process1 = spawn_result1.process; + base::SpawnChildResult spawn_result2 = SpawnChild("process2"); + base::Process& process2 = spawn_result2.process; + coordinator_->GetMockRenderProcessHost(1)->SetProcessHandle( base::MakeUnique<base::ProcessHandle>(process1.Handle())); coordinator_->GetMockRenderProcessHost(2)->SetProcessHandle(
diff --git a/content/browser/renderer_host/browser_compositor_view_mac.h b/content/browser/renderer_host/browser_compositor_view_mac.h index d0ecb715..9bf3e8b 100644 --- a/content/browser/renderer_host/browser_compositor_view_mac.h +++ b/content/browser/renderer_host/browser_compositor_view_mac.h
@@ -64,7 +64,7 @@ void SwapCompositorFrame(uint32_t compositor_frame_sink_id, cc::CompositorFrame frame); void SetHasTransparentBackground(bool transparent); - void SetDisplayColorSpace(const gfx::ColorSpace& color_space); + void SetDisplayColorProfile(const gfx::ICCProfile& icc_profile); void UpdateVSyncParameters(const base::TimeTicks& timebase, const base::TimeDelta& interval); void SetNeedsBeginFrames(bool needs_begin_frames);
diff --git a/content/browser/renderer_host/browser_compositor_view_mac.mm b/content/browser/renderer_host/browser_compositor_view_mac.mm index 4971cac..7e4355a 100644 --- a/content/browser/renderer_host/browser_compositor_view_mac.mm +++ b/content/browser/renderer_host/browser_compositor_view_mac.mm
@@ -293,10 +293,10 @@ } } -void BrowserCompositorMac::SetDisplayColorSpace( - const gfx::ColorSpace& color_space) { +void BrowserCompositorMac::SetDisplayColorProfile( + const gfx::ICCProfile& icc_profile) { if (recyclable_compositor_) - recyclable_compositor_->compositor()->SetDisplayColorSpace(color_space); + recyclable_compositor_->compositor()->SetDisplayColorProfile(icc_profile); } void BrowserCompositorMac::UpdateVSyncParameters(
diff --git a/content/browser/renderer_host/input/touch_action_filter.cc b/content/browser/renderer_host/input/touch_action_filter.cc index 8c86cd5..d51412c 100644 --- a/content/browser/renderer_host/input/touch_action_filter.cc +++ b/content/browser/renderer_host/input/touch_action_filter.cc
@@ -18,22 +18,20 @@ // Actions on an axis are disallowed if the perpendicular axis has a filter set // and no filter is set for the queried axis. bool IsYAxisActionDisallowed(TouchAction action) { - return ((action & TOUCH_ACTION_PAN_X) && !(action & TOUCH_ACTION_PAN_Y)); + return (action & TOUCH_ACTION_PAN_X) && !(action & TOUCH_ACTION_PAN_Y); } bool IsXAxisActionDisallowed(TouchAction action) { - return ((action & TOUCH_ACTION_PAN_Y) && !(action & TOUCH_ACTION_PAN_X)); + return (action & TOUCH_ACTION_PAN_Y) && !(action & TOUCH_ACTION_PAN_X); } } // namespace -TouchActionFilter::TouchActionFilter() : - drop_scroll_gesture_events_(false), - drop_pinch_gesture_events_(false), - drop_current_tap_ending_event_(false), - allow_current_double_tap_event_(true), - allowed_touch_action_(TOUCH_ACTION_AUTO) { -} +TouchActionFilter::TouchActionFilter() + : suppress_manipulation_events_(false), + drop_current_tap_ending_event_(false), + allow_current_double_tap_event_(true), + allowed_touch_action_(TOUCH_ACTION_AUTO) {} bool TouchActionFilter::FilterGestureEvent(WebGestureEvent* gesture_event) { if (gesture_event->sourceDevice != blink::WebGestureDeviceTouchscreen) @@ -43,26 +41,29 @@ // can decide to send a touch cancel event). switch (gesture_event->type()) { case WebInputEvent::GestureScrollBegin: - DCHECK(!drop_scroll_gesture_events_); - DCHECK(!drop_pinch_gesture_events_); - drop_pinch_gesture_events_ = - (allowed_touch_action_ & TOUCH_ACTION_PINCH_ZOOM) == 0; - drop_scroll_gesture_events_ = ShouldSuppressScroll(*gesture_event); - return drop_scroll_gesture_events_; + DCHECK(!suppress_manipulation_events_); + suppress_manipulation_events_ = + ShouldSuppressManipulation(*gesture_event); + return suppress_manipulation_events_; case WebInputEvent::GestureScrollUpdate: - if (drop_scroll_gesture_events_) { + if (suppress_manipulation_events_) return true; - } else { - // Scrolls restricted to a specific axis shouldn't permit movement - // in the perpendicular axis. - if (IsYAxisActionDisallowed(allowed_touch_action_)) { - gesture_event->data.scrollUpdate.deltaY = 0; - gesture_event->data.scrollUpdate.velocityY = 0; - } else if (IsXAxisActionDisallowed(allowed_touch_action_)) { - gesture_event->data.scrollUpdate.deltaX = 0; - gesture_event->data.scrollUpdate.velocityX = 0; - } + + // Scrolls restricted to a specific axis shouldn't permit movement + // in the perpendicular axis. + // + // Note the direction suppression with pinch-zoom here, which matches + // Edge: a "touch-action: pan-y pinch-zoom" region allows vertical + // two-finger scrolling but a "touch-action: pan-x pinch-zoom" region + // doesn't. + // TODO(mustaq): Add it to spec? + if (IsYAxisActionDisallowed(allowed_touch_action_)) { + gesture_event->data.scrollUpdate.deltaY = 0; + gesture_event->data.scrollUpdate.velocityY = 0; + } else if (IsXAxisActionDisallowed(allowed_touch_action_)) { + gesture_event->data.scrollUpdate.deltaX = 0; + gesture_event->data.scrollUpdate.velocityX = 0; } break; @@ -70,7 +71,7 @@ // Touchscreen flings should always have non-zero velocity. DCHECK(gesture_event->data.flingStart.velocityX || gesture_event->data.flingStart.velocityY); - if (!drop_scroll_gesture_events_) { + if (!suppress_manipulation_events_) { // Flings restricted to a specific axis shouldn't permit velocity // in the perpendicular axis. if (IsYAxisActionDisallowed(allowed_touch_action_)) @@ -84,23 +85,15 @@ gesture_event->setType(WebInputEvent::GestureScrollEnd); } } - return FilterScrollEndingGesture(); + return FilterManipulationEventAndResetState(); case WebInputEvent::GestureScrollEnd: - return FilterScrollEndingGesture(); + return FilterManipulationEventAndResetState(); case WebInputEvent::GesturePinchBegin: - return drop_pinch_gesture_events_; - case WebInputEvent::GesturePinchUpdate: - return drop_pinch_gesture_events_; - case WebInputEvent::GesturePinchEnd: - // TODO(mustaq): Don't reset drop_pinch_gesture_events_ here because a - // pinch-zoom-out-then-zoom-in sends two separate pinch sequences within a - // single gesture-scroll sequence, see crbug.com/662047#c13. Is it - // expected? - return drop_pinch_gesture_events_; + return suppress_manipulation_events_; // The double tap gesture is a tap ending event. If a double tap gesture is // filtered out, replace it with a tap event. @@ -126,6 +119,7 @@ allow_current_double_tap_event_ = (allowed_touch_action_ & TOUCH_ACTION_DOUBLE_TAP_ZOOM) != 0; // Fall through. + case WebInputEvent::GestureTapCancel: if (drop_current_tap_ending_event_) { drop_current_tap_ending_event_ = false; @@ -146,10 +140,9 @@ return false; } -bool TouchActionFilter::FilterScrollEndingGesture() { - drop_pinch_gesture_events_ = false; - if (drop_scroll_gesture_events_) { - drop_scroll_gesture_events_ = false; +bool TouchActionFilter::FilterManipulationEventAndResetState() { + if (suppress_manipulation_events_) { + suppress_manipulation_events_ = false; return true; } return false; @@ -176,15 +169,15 @@ allowed_touch_action_ = TOUCH_ACTION_AUTO; } -bool TouchActionFilter::ShouldSuppressScroll( +bool TouchActionFilter::ShouldSuppressManipulation( const blink::WebGestureEvent& gesture_event) { DCHECK_EQ(gesture_event.type(), WebInputEvent::GestureScrollBegin); - // if there are two or more pointers then ensure that we allow panning - // if pinch-zoom is allowed. Determine if this should really occur in the - // GestureScrollBegin or not; see crbug.com/649034. - if (!drop_pinch_gesture_events_ && - gesture_event.data.scrollBegin.pointerCount >= 2) { - return false; + + if (gesture_event.data.scrollBegin.pointerCount >= 2) { + // Any GestureScrollBegin with more than one fingers is like a pinch-zoom + // for touch-actions, see crbug.com/632525. Therefore, we switch to + // blocked-manipulation mode iff pinch-zoom is disallowed. + return (allowed_touch_action_ & TOUCH_ACTION_PINCH_ZOOM) == 0; } if ((allowed_touch_action_ & TOUCH_ACTION_PAN) == TOUCH_ACTION_PAN) @@ -196,6 +189,11 @@ return true; // If there's no hint or it's perfectly diagonal, then allow the scroll. + // Note, however, that the panning direction of the following GSU/GPB events + // is updated if needed to make them touch-action compliant. + // + // TODO(mustaq): With unidirectional touch-action, this can + // allow wrong panning with diagonal swipes. Investigate. crbug.com/697102 if (fabs(gesture_event.data.scrollBegin.deltaXHint) == fabs(gesture_event.data.scrollBegin.deltaYHint)) return false;
diff --git a/content/browser/renderer_host/input/touch_action_filter.h b/content/browser/renderer_host/input/touch_action_filter.h index 34e32d5..7296c1f 100644 --- a/content/browser/renderer_host/input/touch_action_filter.h +++ b/content/browser/renderer_host/input/touch_action_filter.h
@@ -20,11 +20,13 @@ // each touch point. // For details see the touch-action design doc at http://goo.gl/KcKbxQ. class CONTENT_EXPORT TouchActionFilter { -public: + public: TouchActionFilter(); - // Returns true if the supplied gesture event should be dropped based on - // the current touch-action state. + // Returns true if the supplied gesture event should be dropped based on the + // current touch-action state. Otherwise returns false, and possibly modifies + // the event's directional parameters to make the event compatible with + // the effective touch-action. bool FilterGestureEvent(blink::WebGestureEvent* gesture_event); // Called when a set-touch-action message is received from the renderer @@ -39,18 +41,12 @@ TouchAction allowed_touch_action() const { return allowed_touch_action_; } - // Return the intersection of two TouchAction values. - static TouchAction Intersect(TouchAction ta1, TouchAction ta2); + private: + bool ShouldSuppressManipulation(const blink::WebGestureEvent&); + bool FilterManipulationEventAndResetState(); -private: - bool ShouldSuppressScroll(const blink::WebGestureEvent& gesture_event); - bool FilterScrollEndingGesture(); - - // Whether GestureScroll events should be discarded due to touch-action. - bool drop_scroll_gesture_events_; - - // Whether GesturePinch events should be discarded due to touch-action. - bool drop_pinch_gesture_events_; + // Whether scroll and pinch gestures should be discarded due to touch-action. + bool suppress_manipulation_events_; // Whether a tap ending event in this sequence should be discarded because a // previous GestureTapUnconfirmed event was turned into a GestureTap.
diff --git a/content/browser/renderer_host/input/touch_action_filter_unittest.cc b/content/browser/renderer_host/input/touch_action_filter_unittest.cc index 237ba50..0b4b4234 100644 --- a/content/browser/renderer_host/input/touch_action_filter_unittest.cc +++ b/content/browser/renderer_host/input/touch_action_filter_unittest.cc
@@ -106,7 +106,6 @@ EXPECT_TRUE(filter.FilterGestureEvent(&scroll_end)); } - filter.ResetTouchAction(); } TEST(TouchActionFilterTest, SimpleFilter) { @@ -182,7 +181,6 @@ EXPECT_EQ(kDeltaX, scroll_update.data.scrollUpdate.deltaX); EXPECT_EQ(kDeltaY, scroll_update.data.scrollUpdate.deltaY); EXPECT_TRUE(filter.FilterGestureEvent(&scroll_end)); - filter.ResetTouchAction(); } TEST(TouchActionFilterTest, Fling) { @@ -216,7 +214,6 @@ EXPECT_TRUE(filter.FilterGestureEvent(&scroll_update)); EXPECT_FALSE(filter.FilterGestureEvent(&pad_fling)); EXPECT_TRUE(filter.FilterGestureEvent(&fling_start)); - filter.ResetTouchAction(); } TEST(TouchActionFilterTest, PanLeft) { @@ -341,7 +338,25 @@ EXPECT_EQ(kFlingX, fling_start.data.flingStart.velocityX); EXPECT_EQ(kFlingY, fling_start.data.flingStart.velocityY); } - filter.ResetTouchAction(); + + { + // A two-finger gesture is not allowed. + filter.ResetTouchAction(); + filter.OnSetTouchAction(TOUCH_ACTION_PAN); + WebGestureEvent scroll_begin = + SyntheticWebGestureEventBuilder::BuildScrollBegin(-6, 7, kSourceDevice, + 2); + EXPECT_TRUE(filter.FilterGestureEvent(&scroll_begin)); + + WebGestureEvent scroll_update = + SyntheticWebGestureEventBuilder::BuildScrollUpdate(kDX, kDY, 0, + kSourceDevice); + EXPECT_TRUE(filter.FilterGestureEvent(&scroll_update)); + + WebGestureEvent fling_start = SyntheticWebGestureEventBuilder::BuildFling( + kFlingX, kFlingY, kSourceDevice); + EXPECT_TRUE(filter.FilterGestureEvent(&fling_start)); + } } TEST(TouchActionFilterTest, BitMath) { @@ -389,14 +404,13 @@ EXPECT_TRUE(filter.FilterGestureEvent(&scroll_begin)); EXPECT_TRUE(filter.FilterGestureEvent(&scroll_update)); EXPECT_TRUE(filter.FilterGestureEvent(&scroll_end)); - filter.ResetTouchAction(); } TEST(TouchActionFilterTest, Pinch) { TouchActionFilter filter; WebGestureEvent scroll_begin = - SyntheticWebGestureEventBuilder::BuildScrollBegin(2, 3, kSourceDevice); + SyntheticWebGestureEventBuilder::BuildScrollBegin(2, 3, kSourceDevice, 2); WebGestureEvent pinch_begin = SyntheticWebGestureEventBuilder::Build( WebInputEvent::GesturePinchBegin, kSourceDevice); WebGestureEvent pinch_update = @@ -431,11 +445,11 @@ // Pinch is not allowed with touch-action: pan-x pan-y. filter.ResetTouchAction(); filter.OnSetTouchAction(TOUCH_ACTION_PAN); - EXPECT_FALSE(filter.FilterGestureEvent(&scroll_begin)); + EXPECT_TRUE(filter.FilterGestureEvent(&scroll_begin)); EXPECT_TRUE(filter.FilterGestureEvent(&pinch_begin)); EXPECT_TRUE(filter.FilterGestureEvent(&pinch_update)); EXPECT_TRUE(filter.FilterGestureEvent(&pinch_end)); - EXPECT_FALSE(filter.FilterGestureEvent(&scroll_end)); + EXPECT_TRUE(filter.FilterGestureEvent(&scroll_end)); // Pinch is allowed with touch-action: manipulation. filter.ResetTouchAction(); @@ -484,19 +498,6 @@ EXPECT_FALSE(filter.FilterGestureEvent(&pinch_update)); EXPECT_FALSE(filter.FilterGestureEvent(&pinch_end)); EXPECT_FALSE(filter.FilterGestureEvent(&scroll_end)); - filter.ResetTouchAction(); - - scroll_begin.data.scrollBegin.pointerCount = 1; - // Scrolling should be disallowed for pinch zoom with only - // one pointer down. - filter.OnSetTouchAction(TOUCH_ACTION_PINCH_ZOOM); - EXPECT_TRUE(filter.FilterGestureEvent(&scroll_begin)); - EXPECT_FALSE(filter.FilterGestureEvent(&pinch_begin)); - EXPECT_FALSE(filter.FilterGestureEvent(&pinch_update)); - EXPECT_FALSE(filter.FilterGestureEvent(&pinch_end)); - EXPECT_TRUE(filter.FilterGestureEvent(&scroll_end)); - - scroll_begin.data.scrollBegin.pointerCount = 2; // Scrolling is allowed when two fingers are down. filter.ResetTouchAction(); @@ -506,6 +507,17 @@ EXPECT_FALSE(filter.FilterGestureEvent(&pinch_update)); EXPECT_FALSE(filter.FilterGestureEvent(&pinch_end)); EXPECT_FALSE(filter.FilterGestureEvent(&scroll_end)); + + // A pinch event sequence with only one pointer is equivalent to a scroll + // gesture, so disallowed as a pinch gesture. + scroll_begin.data.scrollBegin.pointerCount = 1; + filter.ResetTouchAction(); + filter.OnSetTouchAction(TOUCH_ACTION_PINCH_ZOOM); + EXPECT_TRUE(filter.FilterGestureEvent(&scroll_begin)); + EXPECT_TRUE(filter.FilterGestureEvent(&pinch_begin)); + EXPECT_TRUE(filter.FilterGestureEvent(&pinch_update)); + EXPECT_TRUE(filter.FilterGestureEvent(&pinch_end)); + EXPECT_TRUE(filter.FilterGestureEvent(&scroll_end)); } TEST(TouchActionFilterTest, DoubleTapWithTouchActionAuto) { @@ -533,7 +545,6 @@ EXPECT_FALSE(filter.FilterGestureEvent(&tap_cancel)); EXPECT_FALSE(filter.FilterGestureEvent(&tap_down)); EXPECT_FALSE(filter.FilterGestureEvent(&double_tap)); - filter.ResetTouchAction(); } TEST(TouchActionFilterTest, DoubleTap) { @@ -562,7 +573,6 @@ EXPECT_FALSE(filter.FilterGestureEvent(&tap_down)); EXPECT_FALSE(filter.FilterGestureEvent(&double_tap)); EXPECT_EQ(WebInputEvent::GestureTap, double_tap.type()); - filter.ResetTouchAction(); } TEST(TouchActionFilterTest, SingleTapWithTouchActionAuto) { @@ -581,7 +591,6 @@ EXPECT_FALSE(filter.FilterGestureEvent(&unconfirmed_tap1)); EXPECT_EQ(WebInputEvent::GestureTapUnconfirmed, unconfirmed_tap1.type()); EXPECT_FALSE(filter.FilterGestureEvent(&tap)); - filter.ResetTouchAction(); } TEST(TouchActionFilterTest, SingleTap) { @@ -601,7 +610,6 @@ EXPECT_FALSE(filter.FilterGestureEvent(&unconfirmed_tap1)); EXPECT_EQ(WebInputEvent::GestureTap, unconfirmed_tap1.type()); EXPECT_TRUE(filter.FilterGestureEvent(&tap)); - filter.ResetTouchAction(); } TEST(TouchActionFilterTest, TouchActionResetsOnResetTouchAction) {
diff --git a/content/browser/renderer_host/input/touch_selection_controller_client_aura.cc b/content/browser/renderer_host/input/touch_selection_controller_client_aura.cc index 92c33f4..b07e3adb 100644 --- a/content/browser/renderer_host/input/touch_selection_controller_client_aura.cc +++ b/content/browser/renderer_host/input/touch_selection_controller_client_aura.cc
@@ -121,7 +121,8 @@ quick_menu_requested_(false), touch_down_(false), scroll_in_progress_(false), - handle_drag_in_progress_(false) { + handle_drag_in_progress_(false), + show_quick_menu_immediately_for_test_(false) { DCHECK(rwhva_); }
diff --git a/content/browser/renderer_host/media/audio_output_authorization_handler.cc b/content/browser/renderer_host/media/audio_output_authorization_handler.cc index cd9f959..3ed7c30 100644 --- a/content/browser/renderer_host/media/audio_output_authorization_handler.cc +++ b/content/browser/renderer_host/media/audio_output_authorization_handler.cc
@@ -10,6 +10,7 @@ #include "content/browser/renderer_host/media/audio_input_device_manager.h" #include "content/public/browser/browser_thread.h" #include "content/public/browser/media_device_id.h" +#include "media/audio/audio_system.h" #include "media/base/limits.h" namespace { @@ -34,26 +35,16 @@ : media::AudioParameters::UnavailableDeviceParams(); } -media::AudioParameters GetDeviceParametersOnDeviceThread( - media::AudioManager* audio_manager, - const std::string& unique_id) { - DCHECK(audio_manager->GetTaskRunner()->BelongsToCurrentThread()); - - return media::AudioDeviceDescription::IsDefaultDevice(unique_id) - ? audio_manager->GetDefaultOutputStreamParameters() - : audio_manager->GetOutputStreamParameters(unique_id); -} - } // namespace namespace content { AudioOutputAuthorizationHandler::AudioOutputAuthorizationHandler( - media::AudioManager* audio_manager, + media::AudioSystem* audio_system, MediaStreamManager* media_stream_manager, int render_process_id, const std::string& salt) - : audio_manager_(audio_manager), + : audio_system_(audio_system), media_stream_manager_(media_stream_manager), permission_checker_(base::MakeUnique<MediaDevicesPermissionChecker>()), render_process_id_(render_process_id), @@ -191,18 +182,8 @@ const std::string& raw_device_id) const { DCHECK_CURRENTLY_ON(BrowserThread::IO); DCHECK(!raw_device_id.empty()); - base::PostTaskAndReplyWithResult( - // Note: In the case of a shutdown, the task to delete |audio_manager_| is - // posted to the audio thread after the IO thread is stopped, so the task - // to delete the audio manager hasn't been posted yet. This means that - // unretained is safe here. - // Mac is a special case. Since the audio manager lives on the UI thread - // on Mac, this task is posted to the UI thread, but tasks posted to the - // UI task runner will be ignored when the shutdown has progressed to - // deleting the audio manager, so this is still safe. - audio_manager_->GetTaskRunner(), FROM_HERE, - base::Bind(&GetDeviceParametersOnDeviceThread, - base::Unretained(audio_manager_), raw_device_id), + audio_system_->GetOutputStreamParameters( + raw_device_id, base::Bind(&AudioOutputAuthorizationHandler::DeviceParametersReceived, weak_factory_.GetWeakPtr(), std::move(cb), false, raw_device_id));
diff --git a/content/browser/renderer_host/media/audio_output_authorization_handler.h b/content/browser/renderer_host/media/audio_output_authorization_handler.h index c0b5640..d7c99fb5 100644 --- a/content/browser/renderer_host/media/audio_output_authorization_handler.h +++ b/content/browser/renderer_host/media/audio_output_authorization_handler.h
@@ -14,10 +14,13 @@ #include "content/browser/media/media_devices_permission_checker.h" #include "content/browser/renderer_host/media/media_stream_manager.h" #include "media/audio/audio_device_description.h" -#include "media/audio/audio_manager.h" #include "media/base/audio_parameters.h" #include "media/base/output_device_info.h" +namespace media { +class AudioSystem; +} + namespace content { // This class, which lives on the IO thread, handles the logic of an IPC device @@ -40,7 +43,7 @@ const media::AudioParameters& params, const std::string& raw_device_id)>; - AudioOutputAuthorizationHandler(media::AudioManager* audio_manager, + AudioOutputAuthorizationHandler(media::AudioSystem* audio_system, MediaStreamManager* media_stream_manager, int render_process_id_, const std::string& salt); @@ -84,7 +87,7 @@ const std::string& raw_device_id, const media::AudioParameters& output_params) const; - media::AudioManager* audio_manager_; + media::AudioSystem* audio_system_; MediaStreamManager* const media_stream_manager_; std::unique_ptr<MediaDevicesPermissionChecker> permission_checker_; const int render_process_id_;
diff --git a/content/browser/renderer_host/media/audio_output_authorization_handler_unittest.cc b/content/browser/renderer_host/media/audio_output_authorization_handler_unittest.cc index f82855a..4e34099 100644 --- a/content/browser/renderer_host/media/audio_output_authorization_handler_unittest.cc +++ b/content/browser/renderer_host/media/audio_output_authorization_handler_unittest.cc
@@ -18,6 +18,7 @@ #include "content/public/test/test_browser_context.h" #include "content/public/test/test_browser_thread_bundle.h" #include "media/audio/audio_device_description.h" +#include "media/audio/audio_system_impl.h" #include "media/audio/fake_audio_log_factory.h" #include "media/audio/fake_audio_manager.h" #include "media/base/media_switches.h" @@ -66,6 +67,7 @@ audio_manager_.reset(new media::FakeAudioManager( audio_thread_->task_runner(), audio_thread_->worker_task_runner(), &log_factory_)); + audio_system_ = media::AudioSystemImpl::Create(audio_manager_.get()); media_stream_manager_ = base::MakeUnique<MediaStreamManager>(audio_manager_.get()); // Make sure everything is done initializing: @@ -79,7 +81,7 @@ return media_stream_manager_.get(); } - media::AudioManager* GetAudioManager() { return audio_manager_.get(); } + media::AudioSystem* GetAudioSystem() { return audio_system_.get(); } void SyncWithAllThreads() { // New tasks might be posted while we are syncing, but in @@ -140,6 +142,7 @@ std::unique_ptr<AudioManagerThread> audio_thread_; media::FakeAudioLogFactory log_factory_; media::ScopedAudioManagerPtr audio_manager_; + std::unique_ptr<media::AudioSystem> audio_system_; DISALLOW_COPY_AND_ASSIGN(AudioOutputAuthorizationHandlerTest); }; @@ -151,7 +154,7 @@ .Times(1); std::unique_ptr<AudioOutputAuthorizationHandler> handler = base::MakeUnique<AudioOutputAuthorizationHandler>( - GetAudioManager(), GetMediaStreamManager(), kRenderProcessId, kSalt); + GetAudioSystem(), GetMediaStreamManager(), kRenderProcessId, kSalt); BrowserThread::PostTask( BrowserThread::IO, FROM_HERE, @@ -172,7 +175,7 @@ .Times(1); std::unique_ptr<AudioOutputAuthorizationHandler> handler = base::MakeUnique<AudioOutputAuthorizationHandler>( - GetAudioManager(), GetMediaStreamManager(), kRenderProcessId, kSalt); + GetAudioSystem(), GetMediaStreamManager(), kRenderProcessId, kSalt); BrowserThread::PostTask( BrowserThread::IO, FROM_HERE, @@ -194,7 +197,7 @@ MockAuthorizationCallback listener; std::unique_ptr<AudioOutputAuthorizationHandler> handler = base::MakeUnique<AudioOutputAuthorizationHandler>( - GetAudioManager(), GetMediaStreamManager(), kRenderProcessId, kSalt); + GetAudioSystem(), GetMediaStreamManager(), kRenderProcessId, kSalt); BrowserThread::PostTask( BrowserThread::IO, FROM_HERE, base::Bind( @@ -225,7 +228,7 @@ MockAuthorizationCallback listener; std::unique_ptr<AudioOutputAuthorizationHandler> handler = base::MakeUnique<AudioOutputAuthorizationHandler>( - GetAudioManager(), GetMediaStreamManager(), kRenderProcessId, kSalt); + GetAudioSystem(), GetMediaStreamManager(), kRenderProcessId, kSalt); BrowserThread::PostTask( BrowserThread::IO, FROM_HERE, base::Bind( @@ -255,7 +258,7 @@ MockAuthorizationCallback listener; std::unique_ptr<AudioOutputAuthorizationHandler> handler = base::MakeUnique<AudioOutputAuthorizationHandler>( - GetAudioManager(), GetMediaStreamManager(), RPH->GetID(), kSalt); + GetAudioSystem(), GetMediaStreamManager(), RPH->GetID(), kSalt); EXPECT_EQ(RPH->bad_msg_count(), 0); EXPECT_CALL(listener, @@ -290,7 +293,7 @@ MockAuthorizationCallback listener; std::unique_ptr<AudioOutputAuthorizationHandler> handler = base::MakeUnique<AudioOutputAuthorizationHandler>( - GetAudioManager(), GetMediaStreamManager(), RPH->GetID(), kSalt); + GetAudioSystem(), GetMediaStreamManager(), RPH->GetID(), kSalt); EXPECT_EQ(RPH->bad_msg_count(), 0); EXPECT_CALL(listener, Run(_, _, _, _)).Times(0); @@ -314,7 +317,7 @@ MockAuthorizationCallback listener; std::unique_ptr<AudioOutputAuthorizationHandler> handler = base::MakeUnique<AudioOutputAuthorizationHandler>( - GetAudioManager(), GetMediaStreamManager(), kRenderProcessId, kSalt); + GetAudioSystem(), GetMediaStreamManager(), kRenderProcessId, kSalt); EXPECT_CALL(listener, Run(media::OUTPUT_DEVICE_STATUS_OK, false, _, kDefaultDeviceId))
diff --git a/content/browser/renderer_host/media/audio_output_delegate_impl.h b/content/browser/renderer_host/media/audio_output_delegate_impl.h index b83e789f..e8134799 100644 --- a/content/browser/renderer_host/media/audio_output_delegate_impl.h +++ b/content/browser/renderer_host/media/audio_output_delegate_impl.h
@@ -10,8 +10,8 @@ #include "base/macros.h" #include "base/memory/weak_ptr.h" -#include "content/browser/renderer_host/media/audio_output_delegate.h" #include "content/common/content_export.h" +#include "media/audio/audio_output_delegate.h" namespace content { class AudioMirroringManager; @@ -30,9 +30,10 @@ // This class, except for the AudioOutputDelegateImpl::EventHandler // implementation, is operated on the IO thread. -class CONTENT_EXPORT AudioOutputDelegateImpl : public AudioOutputDelegate { +class CONTENT_EXPORT AudioOutputDelegateImpl + : public media::AudioOutputDelegate { public: - AudioOutputDelegateImpl(AudioOutputDelegate::EventHandler* handler, + AudioOutputDelegateImpl(EventHandler* handler, media::AudioManager* audio_manager, std::unique_ptr<media::AudioLog> audio_log, AudioMirroringManager* mirroring_manager,
diff --git a/content/browser/renderer_host/media/audio_output_delegate_impl_unittest.cc b/content/browser/renderer_host/media/audio_output_delegate_impl_unittest.cc index 255c5aa..5073da89 100644 --- a/content/browser/renderer_host/media/audio_output_delegate_impl_unittest.cc +++ b/content/browser/renderer_host/media/audio_output_delegate_impl_unittest.cc
@@ -76,7 +76,7 @@ void(int render_process_id, int render_frame_id)); }; -class MockEventHandler : public AudioOutputDelegate::EventHandler { +class MockEventHandler : public media::AudioOutputDelegate::EventHandler { public: MOCK_METHOD3(OnStreamCreated, void(int stream_id,
diff --git a/content/browser/renderer_host/media/audio_renderer_host.cc b/content/browser/renderer_host/media/audio_renderer_host.cc index 6a99670..2c79886d 100644 --- a/content/browser/renderer_host/media/audio_renderer_host.cc +++ b/content/browser/renderer_host/media/audio_renderer_host.cc
@@ -61,6 +61,7 @@ AudioRendererHost::AudioRendererHost(int render_process_id, media::AudioManager* audio_manager, + media::AudioSystem* audio_system, AudioMirroringManager* mirroring_manager, MediaStreamManager* media_stream_manager, const std::string& salt) @@ -71,7 +72,7 @@ media_stream_manager_(media_stream_manager), salt_(salt), validate_render_frame_id_function_(&ValidateRenderFrameId), - authorization_handler_(audio_manager_, + authorization_handler_(audio_system, media_stream_manager, render_process_id_, salt) { @@ -310,7 +311,7 @@ media_internals->SetWebContentsTitleForAudioLogEntry( stream_id, render_process_id_, render_frame_id, audio_log.get()); delegates_.push_back( - base::WrapUnique<AudioOutputDelegate>(new AudioOutputDelegateImpl( + base::WrapUnique<media::AudioOutputDelegate>(new AudioOutputDelegateImpl( this, audio_manager_, std::move(audio_log), mirroring_manager_, media_observer, stream_id, render_frame_id, render_process_id_, params, device_unique_id))); @@ -319,7 +320,7 @@ void AudioRendererHost::OnPlayStream(int stream_id) { DCHECK_CURRENTLY_ON(BrowserThread::IO); - AudioOutputDelegate* delegate = LookupById(stream_id); + media::AudioOutputDelegate* delegate = LookupById(stream_id); if (!delegate) { SendErrorMessage(stream_id); return; @@ -331,7 +332,7 @@ void AudioRendererHost::OnPauseStream(int stream_id) { DCHECK_CURRENTLY_ON(BrowserThread::IO); - AudioOutputDelegate* delegate = LookupById(stream_id); + media::AudioOutputDelegate* delegate = LookupById(stream_id); if (!delegate) { SendErrorMessage(stream_id); return; @@ -343,7 +344,7 @@ void AudioRendererHost::OnSetVolume(int stream_id, double volume) { DCHECK_CURRENTLY_ON(BrowserThread::IO); - AudioOutputDelegate* delegate = LookupById(stream_id); + media::AudioOutputDelegate* delegate = LookupById(stream_id); if (!delegate) { SendErrorMessage(stream_id); return; @@ -380,12 +381,12 @@ return std::find_if( delegates_.begin(), delegates_.end(), - [stream_id](const std::unique_ptr<AudioOutputDelegate>& d) { + [stream_id](const std::unique_ptr<media::AudioOutputDelegate>& d) { return d->GetStreamId() == stream_id; }); } -AudioOutputDelegate* AudioRendererHost::LookupById(int stream_id) { +media::AudioOutputDelegate* AudioRendererHost::LookupById(int stream_id) { DCHECK_CURRENTLY_ON(BrowserThread::IO); auto i = LookupIteratorById(stream_id);
diff --git a/content/browser/renderer_host/media/audio_renderer_host.h b/content/browser/renderer_host/media/audio_renderer_host.h index 0d0ca36..5e4ce65c 100644 --- a/content/browser/renderer_host/media/audio_renderer_host.h +++ b/content/browser/renderer_host/media/audio_renderer_host.h
@@ -47,10 +47,10 @@ #include <vector> #include "content/browser/renderer_host/media/audio_output_authorization_handler.h" -#include "content/browser/renderer_host/media/audio_output_delegate.h" #include "content/common/content_export.h" #include "content/public/browser/browser_message_filter.h" #include "content/public/browser/render_process_host.h" +#include "media/audio/audio_output_delegate.h" namespace base { class SharedMemory; @@ -60,6 +60,7 @@ namespace media { class AudioManager; class AudioParameters; +class AudioSystem; } namespace content { @@ -69,11 +70,12 @@ class CONTENT_EXPORT AudioRendererHost : public BrowserMessageFilter, - public AudioOutputDelegate::EventHandler { + public media::AudioOutputDelegate::EventHandler { public: // Called from UI thread from the owner of this object. AudioRendererHost(int render_process_id, media::AudioManager* audio_manager, + media::AudioSystem* audio_system, AudioMirroringManager* mirroring_manager, MediaStreamManager* media_stream_manager, const std::string& salt); @@ -110,7 +112,7 @@ typedef base::Callback<void(bool have_access)> OutputDeviceAccessCB; using AudioOutputDelegateVector = - std::vector<std::unique_ptr<AudioOutputDelegate>>; + std::vector<std::unique_ptr<media::AudioOutputDelegate>>; // The type of a function that is run on the UI thread to check whether the // routing IDs reference a valid RenderFrameHost. The function then runs @@ -186,7 +188,7 @@ // Returns delegates_.end() if not found. AudioOutputDelegateVector::iterator LookupIteratorById(int stream_id); // Returns nullptr if not found. - AudioOutputDelegate* LookupById(int stream_id); + media::AudioOutputDelegate* LookupById(int stream_id); // Helper method to check if the authorization procedure for stream // |stream_id| has started.
diff --git a/content/browser/renderer_host/media/audio_renderer_host_unittest.cc b/content/browser/renderer_host/media/audio_renderer_host_unittest.cc index 6be7fab..121ee6f 100644 --- a/content/browser/renderer_host/media/audio_renderer_host_unittest.cc +++ b/content/browser/renderer_host/media/audio_renderer_host_unittest.cc
@@ -26,6 +26,7 @@ #include "content/public/test/test_browser_context.h" #include "content/public/test/test_browser_thread_bundle.h" #include "ipc/ipc_message_utils.h" +#include "media/audio/audio_system_impl.h" #include "media/audio/fake_audio_log_factory.h" #include "media/audio/fake_audio_manager.h" #include "media/base/bind_to_current_loop.h" @@ -128,11 +129,13 @@ MockAudioRendererHost(base::RunLoop* auth_run_loop, int render_process_id, media::AudioManager* audio_manager, + media::AudioSystem* audio_system, AudioMirroringManager* mirroring_manager, MediaStreamManager* media_stream_manager, const std::string& salt) : AudioRendererHost(render_process_id, audio_manager, + audio_system, mirroring_manager, media_stream_manager, salt), @@ -235,13 +238,15 @@ audio_manager_(base::MakeUnique<FakeAudioManagerWithAssociations>( base::ThreadTaskRunnerHandle::Get(), log_factory.get())), + audio_system_(media::AudioSystemImpl::Create(audio_manager_.get())), render_process_host_(&browser_context_, &auth_run_loop_) { base::CommandLine::ForCurrentProcess()->AppendSwitch( switches::kUseFakeDeviceForMediaStream); media_stream_manager_.reset(new MediaStreamManager(audio_manager_.get())); host_ = new MockAudioRendererHost( &auth_run_loop_, render_process_host_.GetID(), audio_manager_.get(), - &mirroring_manager_, media_stream_manager_.get(), kSalt); + audio_system_.get(), &mirroring_manager_, media_stream_manager_.get(), + kSalt); // Simulate IPC channel connected. host_->set_peer_process_for_testing(base::Process::Current()); @@ -511,6 +516,7 @@ TestBrowserContext browser_context_; std::unique_ptr<media::FakeAudioLogFactory> log_factory; std::unique_ptr<FakeAudioManagerWithAssociations> audio_manager_; + std::unique_ptr<media::AudioSystem> audio_system_; MockAudioMirroringManager mirroring_manager_; base::RunLoop auth_run_loop_; MockRenderProcessHostWithSignaling render_process_host_;
diff --git a/content/browser/renderer_host/media/media_stream_dispatcher_host.cc b/content/browser/renderer_host/media/media_stream_dispatcher_host.cc index 3a2e040a..68046699 100644 --- a/content/browser/renderer_host/media/media_stream_dispatcher_host.cc +++ b/content/browser/renderer_host/media/media_stream_dispatcher_host.cc
@@ -91,6 +91,7 @@ OnCloseDevice) IPC_MESSAGE_HANDLER(MediaStreamHostMsg_SetCapturingLinkSecured, OnSetCapturingLinkSecured) + IPC_MESSAGE_HANDLER(MediaStreamHostMsg_StreamStarted, OnStreamStarted) IPC_MESSAGE_UNHANDLED(handled = false) IPC_END_MESSAGE_MAP() return handled; @@ -182,4 +183,10 @@ type, is_secure); } +void MediaStreamDispatcherHost::OnStreamStarted(const std::string& label) { + DCHECK_CURRENTLY_ON(BrowserThread::IO); + + media_stream_manager_->OnStreamStarted(label); +} + } // namespace content
diff --git a/content/browser/renderer_host/media/media_stream_dispatcher_host.h b/content/browser/renderer_host/media/media_stream_dispatcher_host.h index 158e177..f74da88 100644 --- a/content/browser/renderer_host/media/media_stream_dispatcher_host.h +++ b/content/browser/renderer_host/media/media_stream_dispatcher_host.h
@@ -91,6 +91,8 @@ content::MediaStreamType type, bool is_secure); + void OnStreamStarted(const std::string& label); + int render_process_id_; std::string salt_; MediaStreamManager* media_stream_manager_;
diff --git a/content/browser/renderer_host/media/media_stream_dispatcher_host_unittest.cc b/content/browser/renderer_host/media/media_stream_dispatcher_host_unittest.cc index c71b1a4..d4a940e 100644 --- a/content/browser/renderer_host/media/media_stream_dispatcher_host_unittest.cc +++ b/content/browser/renderer_host/media/media_stream_dispatcher_host_unittest.cc
@@ -122,6 +122,10 @@ render_frame_id, page_request_id, device_id, type, security_origin); } + void OnStreamStarted(const std::string label) { + MediaStreamDispatcherHost::OnStreamStarted(label); + } + std::string label_; StreamDeviceInfoArray audio_devices_; StreamDeviceInfoArray video_devices_; @@ -164,6 +168,9 @@ StreamDeviceInfoArray video_device_list) { OnStreamGenerated(current_ipc_->routing_id(), request_id, audio_device_list.size(), video_device_list.size()); + // Simulate the stream started event back to host for UI testing. + OnStreamStarted(label); + // Notify that the event have occurred. base::Closure quit_closure = quit_closures_.front(); quit_closures_.pop();
diff --git a/content/browser/renderer_host/media/media_stream_manager.cc b/content/browser/renderer_host/media/media_stream_manager.cc index bbe23de..8d42ffe2 100644 --- a/content/browser/renderer_host/media/media_stream_manager.cc +++ b/content/browser/renderer_host/media/media_stream_manager.cc
@@ -1338,6 +1338,7 @@ switch (request->request_type) { case MEDIA_OPEN_DEVICE_PEPPER_ONLY: FinalizeOpenDevice(label, request); + OnStreamStarted(label); break; case MEDIA_GENERATE_STREAM: { FinalizeGenerateStream(label, request); @@ -1347,17 +1348,6 @@ NOTREACHED(); break; } - - if (request->ui_proxy.get()) { - request->ui_proxy->OnStarted( - base::Bind(&MediaStreamManager::StopMediaStreamFromBrowser, - base::Unretained(this), - label), - base::Bind(&MediaStreamManager::OnMediaStreamUIWindowId, - base::Unretained(this), - request->video_type(), - request->devices)); - } } void MediaStreamManager::Closed(MediaStreamType stream_type, @@ -1775,4 +1765,19 @@ return devices; } +void MediaStreamManager::OnStreamStarted(const std::string& label) { + DeviceRequest* const request = FindRequest(label); + if (!request) + return; + + if (request->ui_proxy) { + request->ui_proxy->OnStarted( + base::Bind(&MediaStreamManager::StopMediaStreamFromBrowser, + base::Unretained(this), label), + base::Bind(&MediaStreamManager::OnMediaStreamUIWindowId, + base::Unretained(this), request->video_type(), + request->devices)); + } +} + } // namespace content
diff --git a/content/browser/renderer_host/media/media_stream_manager.h b/content/browser/renderer_host/media/media_stream_manager.h index d152fe1..50f049b5 100644 --- a/content/browser/renderer_host/media/media_stream_manager.h +++ b/content/browser/renderer_host/media/media_stream_manager.h
@@ -264,6 +264,9 @@ void FlushVideoCaptureThreadForTesting(); #endif + // This method is called when all tracks are started. + void OnStreamStarted(const std::string& label); + private: // Contains all data needed to keep track of requests. class DeviceRequest;
diff --git a/content/browser/renderer_host/media/video_capture_controller.cc b/content/browser/renderer_host/media/video_capture_controller.cc index ec20aa0..267d85a 100644 --- a/content/browser/renderer_host/media/video_capture_controller.cc +++ b/content/browser/renderer_host/media/video_capture_controller.cc
@@ -147,7 +147,7 @@ VideoCaptureController::VideoCaptureController() : consumer_feedback_observer_(nullptr), - state_(VIDEO_CAPTURE_STATE_STARTED), + state_(VIDEO_CAPTURE_STATE_STARTING), has_received_frames_(false), weak_ptr_factory_(this) { DCHECK_CURRENTLY_ON(BrowserThread::IO); @@ -208,13 +208,16 @@ if (FindClient(id, event_handler, controller_clients_)) return; + // If the device has reported OnStarted event, report it to this client here. + if (state_ == VIDEO_CAPTURE_STATE_STARTED) + event_handler->OnStarted(id); + std::unique_ptr<ControllerClient> client = base::MakeUnique<ControllerClient>(id, event_handler, session_id, params); // If we already have gotten frame_info from the device, repeat it to the new // client. - if (state_ == VIDEO_CAPTURE_STATE_STARTED) { + if (state_ != VIDEO_CAPTURE_STATE_ERROR) { controller_clients_.push_back(std::move(client)); - return; } } @@ -374,7 +377,7 @@ buffer_context_iter->set_frame_feedback_id(frame_feedback_id); DCHECK(!buffer_context_iter->HasConsumers()); - if (state_ == VIDEO_CAPTURE_STATE_STARTED) { + if (state_ != VIDEO_CAPTURE_STATE_ERROR) { const int buffer_context_id = buffer_context_iter->buffer_context_id(); for (const auto& client : controller_clients_) { if (client->session_closed || client->paused) @@ -463,6 +466,7 @@ void VideoCaptureController::OnStarted() { DCHECK_CURRENTLY_ON(BrowserThread::IO); + state_ = VIDEO_CAPTURE_STATE_STARTED; for (const auto& client : controller_clients_) { if (client->session_closed)
diff --git a/content/browser/renderer_host/media/video_capture_controller.h b/content/browser/renderer_host/media/video_capture_controller.h index 634fb16..b5f4a10 100644 --- a/content/browser/renderer_host/media/video_capture_controller.h +++ b/content/browser/renderer_host/media/video_capture_controller.h
@@ -180,8 +180,8 @@ // All clients served by this controller. ControllerClients controller_clients_; - // Takes on only the states 'STARTED' and 'ERROR'. 'ERROR' is an absorbing - // state which stops the flow of data to clients. + // Takes on only the states 'STARTING', 'STARTED' and 'ERROR'. 'ERROR' is an + // absorbing state which stops the flow of data to clients. VideoCaptureState state_; int next_buffer_context_id_ = 0;
diff --git a/content/browser/renderer_host/media/video_capture_controller_unittest.cc b/content/browser/renderer_host/media/video_capture_controller_unittest.cc index eacde47..f944970 100644 --- a/content/browser/renderer_host/media/video_capture_controller_unittest.cc +++ b/content/browser/renderer_host/media/video_capture_controller_unittest.cc
@@ -803,4 +803,35 @@ Mock::VerifyAndClearExpectations(client_a_.get()); } +// Tests that the VideoCaptureController reports OnStarted() to all clients, +// even if they connect after VideoCaptureController::OnStarted() has been +// invoked. +TEST_F(VideoCaptureControllerTest, OnStartedForMultipleClients) { + media::VideoCaptureParams session_100; + session_100.requested_format = media::VideoCaptureFormat( + gfx::Size(320, 240), 30, media::PIXEL_FORMAT_I420); + media::VideoCaptureParams session_200 = session_100; + media::VideoCaptureParams session_300 = session_100; + + const VideoCaptureControllerID client_a_route_1(1); + const VideoCaptureControllerID client_a_route_2(2); + const VideoCaptureControllerID client_b_route_1(3); + + controller_->AddClient(client_a_route_1, client_a_.get(), 100, session_100); + controller_->AddClient(client_b_route_1, client_b_.get(), 300, session_300); + ASSERT_EQ(2, controller_->GetClientCount()); + + { + InSequence s; + // Simulate the OnStarted event from device. + EXPECT_CALL(*client_a_, OnStarted(_)); + EXPECT_CALL(*client_b_, OnStarted(_)); + device_client_->OnStarted(); + + // VideoCaptureController will take care of the OnStarted event for the + // clients who join later. + EXPECT_CALL(*client_a_, OnStarted(_)); + controller_->AddClient(client_a_route_2, client_a_.get(), 200, session_200); + } +} } // namespace content
diff --git a/content/browser/renderer_host/media/video_capture_manager_unittest.cc b/content/browser/renderer_host/media/video_capture_manager_unittest.cc index 6a10d7d..094a225 100644 --- a/content/browser/renderer_host/media/video_capture_manager_unittest.cc +++ b/content/browser/renderer_host/media/video_capture_manager_unittest.cc
@@ -742,6 +742,7 @@ // Add a second client that is never paused, then pause/resume the first // client, and no calls to VideoCaptureDevice::MaybeSuspend() or Resume() are // made. + EXPECT_CALL(*frame_observer_, OnStarted(_)); const VideoCaptureControllerID client_id2 = StartClient(video_session_id, true); PauseClient(client_id);
diff --git a/content/browser/renderer_host/render_process_host_impl.cc b/content/browser/renderer_host/render_process_host_impl.cc index dce4d82..5548729 100644 --- a/content/browser/renderer_host/render_process_host_impl.cc +++ b/content/browser/renderer_host/render_process_host_impl.cc
@@ -333,7 +333,13 @@ SiteProcessMap() {} void RegisterProcess(const std::string& site, RenderProcessHost* process) { - map_[site] = process; + // There could already exist a site to process mapping due to races between + // two WebContents with blank SiteInstances. If that occurs, keeping the + // exising entry and not overwriting it is a predictable behavior that is + // safe. + SiteToProcessMap::iterator i = map_.find(site); + if (i == map_.end()) + map_[site] = process; } RenderProcessHost* FindProcess(const std::string& site) { @@ -1091,8 +1097,8 @@ BrowserMainLoop::GetInstance()->user_input_monitor()); AddFilter(audio_input_renderer_host_.get()); audio_renderer_host_ = new AudioRendererHost( - GetID(), audio_manager, AudioMirroringManager::GetInstance(), - media_stream_manager, + GetID(), audio_manager, BrowserMainLoop::GetInstance()->audio_system(), + AudioMirroringManager::GetInstance(), media_stream_manager, browser_context->GetResourceContext()->GetMediaDeviceIDSalt()); AddFilter(audio_renderer_host_.get()); AddFilter(
diff --git a/content/browser/renderer_host/render_widget_host_view_mac.mm b/content/browser/renderer_host/render_widget_host_view_mac.mm index bac8af0..6266020 100644 --- a/content/browser/renderer_host/render_widget_host_view_mac.mm +++ b/content/browser/renderer_host/render_widget_host_view_mac.mm
@@ -3307,8 +3307,8 @@ color_space = base::mac::GetSystemColorSpace(); gfx::ICCProfile icc_profile = gfx::ICCProfile::FromCGColorSpace(color_space); - renderWidgetHostView_->browser_compositor_->SetDisplayColorSpace( - icc_profile.GetColorSpace()); + renderWidgetHostView_->browser_compositor_->SetDisplayColorProfile( + icc_profile); } }
diff --git a/content/child/service_worker/service_worker_network_provider.cc b/content/child/service_worker/service_worker_network_provider.cc index 7a13d72..f66d85c7 100644 --- a/content/child/service_worker/service_worker_network_provider.cc +++ b/content/child/service_worker/service_worker_network_provider.cc
@@ -59,6 +59,21 @@ extra_data = new RequestExtraData(); extra_data->set_service_worker_provider_id(provider_->provider_id()); request.setExtraData(extra_data); + + // If the provider does not have a controller at this point, the renderer + // expects the request to never be handled by a controlling service worker, + // so set the ServiceWorkerMode to skip local workers here. Otherwise, a + // service worker that is in the process of becoming the controller (i.e., + // via claim()) on the browser-side could handle the request and break + // the assumptions of the renderer. + if (request.getFrameType() != blink::WebURLRequest::FrameTypeTopLevel && + request.getFrameType() != blink::WebURLRequest::FrameTypeNested && + !provider_->IsControlledByServiceWorker() && + request.getServiceWorkerMode() != + blink::WebURLRequest::ServiceWorkerMode::None) { + request.setServiceWorkerMode( + blink::WebURLRequest::ServiceWorkerMode::Foreign); + } } bool isControlledByServiceWorker() override {
diff --git a/content/common/frame_messages.h b/content/common/frame_messages.h index 4285e17..e47289f 100644 --- a/content/common/frame_messages.h +++ b/content/common/frame_messages.h
@@ -332,6 +332,12 @@ IPC_STRUCT_MEMBER(std::vector<content::MessagePort>, message_ports) IPC_STRUCT_END() +IPC_STRUCT_TRAITS_BEGIN(content::SourceLocation) + IPC_STRUCT_TRAITS_MEMBER(url) + IPC_STRUCT_TRAITS_MEMBER(line_number) + IPC_STRUCT_TRAITS_MEMBER(column_number) +IPC_STRUCT_TRAITS_END() + IPC_STRUCT_TRAITS_BEGIN(content::CommonNavigationParams) IPC_STRUCT_TRAITS_MEMBER(url) IPC_STRUCT_TRAITS_MEMBER(referrer) @@ -347,6 +353,7 @@ IPC_STRUCT_TRAITS_MEMBER(navigation_start) IPC_STRUCT_TRAITS_MEMBER(method) IPC_STRUCT_TRAITS_MEMBER(post_data) + IPC_STRUCT_TRAITS_MEMBER(source_location) IPC_STRUCT_TRAITS_END() IPC_STRUCT_TRAITS_BEGIN(content::BeginNavigationParams)
diff --git a/content/common/input/synthetic_web_input_event_builders.cc b/content/common/input/synthetic_web_input_event_builders.cc index 6533863..9d1b751c 100644 --- a/content/common/input/synthetic_web_input_event_builders.cc +++ b/content/common/input/synthetic_web_input_event_builders.cc
@@ -117,11 +117,13 @@ WebGestureEvent SyntheticWebGestureEventBuilder::BuildScrollBegin( float dx_hint, float dy_hint, - blink::WebGestureDevice source_device) { + blink::WebGestureDevice source_device, + int pointer_count) { WebGestureEvent result = Build(WebInputEvent::GestureScrollBegin, source_device); result.data.scrollBegin.deltaXHint = dx_hint; result.data.scrollBegin.deltaYHint = dy_hint; + result.data.scrollBegin.pointerCount = pointer_count; return result; }
diff --git a/content/common/input/synthetic_web_input_event_builders.h b/content/common/input/synthetic_web_input_event_builders.h index 58620d3..fca7e7b 100644 --- a/content/common/input/synthetic_web_input_event_builders.h +++ b/content/common/input/synthetic_web_input_event_builders.h
@@ -62,7 +62,8 @@ static blink::WebGestureEvent BuildScrollBegin( float dx_hint, float dy_hint, - blink::WebGestureDevice source_device); + blink::WebGestureDevice source_device, + int pointer_count = 1); static blink::WebGestureEvent BuildScrollUpdate( float dx, float dy,
diff --git a/content/common/media/audio_messages.h b/content/common/media/audio_messages.h index aed2973..773b16c8 100644 --- a/content/common/media/audio_messages.h +++ b/content/common/media/audio_messages.h
@@ -16,6 +16,7 @@ #include "media/audio/audio_input_ipc.h" #include "media/audio/audio_output_ipc.h" #include "media/base/ipc/media_param_traits.h" +#include "media/base/ipc/media_param_traits_macros.h" #include "media/gpu/ipc/common/media_param_traits.h" #include "url/origin.h" @@ -23,9 +24,6 @@ #define IPC_MESSAGE_EXPORT CONTENT_EXPORT #define IPC_MESSAGE_START AudioMsgStart -IPC_ENUM_TRAITS_MAX_VALUE(media::OutputDeviceStatus, - media::OUTPUT_DEVICE_STATUS_MAX) - IPC_STRUCT_BEGIN(AudioInputHostMsg_CreateStream_Config) IPC_STRUCT_MEMBER(media::AudioParameters, params) IPC_STRUCT_MEMBER(bool, automatic_gain_control)
diff --git a/content/common/media/media_stream_messages.h b/content/common/media/media_stream_messages.h index c888f8c..85fdb5f 100644 --- a/content/common/media/media_stream_messages.h +++ b/content/common/media/media_stream_messages.h
@@ -133,3 +133,6 @@ int, /* session_id */ content::MediaStreamType, /* type */ bool /* is_secure */) + +// Tell the browser process that the stream has been started successfully. +IPC_MESSAGE_CONTROL1(MediaStreamHostMsg_StreamStarted, std::string /* label */)
diff --git a/content/common/media/video_capture.h b/content/common/media/video_capture.h index 298d575a..3605baf 100644 --- a/content/common/media/video_capture.h +++ b/content/common/media/video_capture.h
@@ -23,6 +23,7 @@ // browser process and renderer process. Browser process sends information about // the current capture state and error to the renderer process using this type. enum VideoCaptureState { + VIDEO_CAPTURE_STATE_STARTING, VIDEO_CAPTURE_STATE_STARTED, VIDEO_CAPTURE_STATE_PAUSED, VIDEO_CAPTURE_STATE_RESUMED,
diff --git a/content/common/navigation_params.cc b/content/common/navigation_params.cc index 613918e..33ce95e6 100644 --- a/content/common/navigation_params.cc +++ b/content/common/navigation_params.cc
@@ -26,6 +26,15 @@ url != content::kAboutSrcDocURL; } +SourceLocation::SourceLocation() : line_number(0), column_number(0) {} + +SourceLocation::SourceLocation(const std::string& url, + unsigned int line_number, + unsigned int column_number) + : url(url), line_number(line_number), column_number(column_number) {} + +SourceLocation::~SourceLocation() {} + CommonNavigationParams::CommonNavigationParams() : transition(ui::PAGE_TRANSITION_LINK), navigation_type(FrameMsg_Navigate_Type::DIFFERENT_DOCUMENT), @@ -50,7 +59,8 @@ PreviewsState previews_state, const base::TimeTicks& navigation_start, std::string method, - const scoped_refptr<ResourceRequestBodyImpl>& post_data) + const scoped_refptr<ResourceRequestBodyImpl>& post_data, + base::Optional<SourceLocation> source_location) : url(url), referrer(referrer), transition(transition), @@ -64,7 +74,8 @@ previews_state(previews_state), navigation_start(navigation_start), method(method), - post_data(post_data) { + post_data(post_data), + source_location(source_location) { // |method != "POST"| should imply absence of |post_data|. if (method != "POST" && post_data) { NOTREACHED();
diff --git a/content/common/navigation_params.h b/content/common/navigation_params.h index 1051307..fe8c71a7 100644 --- a/content/common/navigation_params.h +++ b/content/common/navigation_params.h
@@ -36,6 +36,21 @@ // about:blank. In these cases, no request needs to be sent. bool CONTENT_EXPORT ShouldMakeNetworkRequestForURL(const GURL& url); +// PlzNavigate +// Struct keeping track of the Javascript SourceLocation that triggered the +// navigation. This is initialized based on information from Blink at the start +// of navigation, and passed back to Blink when the navigation commits. +struct CONTENT_EXPORT SourceLocation { + SourceLocation(); + SourceLocation(const std::string& url, + unsigned int line_number, + unsigned int column_number); + ~SourceLocation(); + std::string url; + unsigned int line_number; + unsigned int column_number; +}; + // The following structures hold parameters used during a navigation. In // particular they are used by FrameMsg_Navigate, FrameMsg_CommitNavigation and // FrameHostMsg_BeginNavigation. @@ -59,7 +74,8 @@ PreviewsState previews_state, const base::TimeTicks& navigation_start, std::string method, - const scoped_refptr<ResourceRequestBodyImpl>& post_data); + const scoped_refptr<ResourceRequestBodyImpl>& post_data, + base::Optional<SourceLocation> source_location); CommonNavigationParams(const CommonNavigationParams& other); ~CommonNavigationParams(); @@ -120,6 +136,13 @@ // Body of HTTP POST request. scoped_refptr<ResourceRequestBodyImpl> post_data; + + // PlzNavigate + // Information about the Javascript source for this navigation. Used for + // providing information in console error messages triggered by the + // navigation. If the navigation was not caused by Javascript, this should not + // be set. + base::Optional<SourceLocation> source_location; }; // Provided by the renderer ----------------------------------------------------
diff --git a/content/common/page_state_serialization.cc b/content/common/page_state_serialization.cc index 52ed1a19..f1d77d9 100644 --- a/content/common/page_state_serialization.cc +++ b/content/common/page_state_serialization.cc
@@ -191,7 +191,7 @@ // 18: Add referrer policy. // 19: Remove target frame id, which was a bad idea, and original url string, // which is no longer used. -// 20: Add pinch viewport scroll offset, the offset of the pinched zoomed +// 20: Add visual viewport scroll offset, the offset of the pinched zoomed // viewport within the unzoomed main frame. // 21: Add frame sequence number. // 22: Add scroll restoration type.
diff --git a/content/common/sandbox_mac_diraccess_unittest.mm b/content/common/sandbox_mac_diraccess_unittest.mm index 828395f..5cf973f 100644 --- a/content/common/sandbox_mac_diraccess_unittest.mm +++ b/content/common/sandbox_mac_diraccess_unittest.mm
@@ -39,13 +39,13 @@ public: bool CheckSandbox(const std::string& directory_to_try) { setenv(kSandboxAccessPathKey, directory_to_try.c_str(), 1); - base::Process child_process = SpawnChild("mac_sandbox_path_access"); - if (!child_process.IsValid()) { + base::SpawnChildResult spawn_child = SpawnChild("mac_sandbox_path_access"); + if (!spawn_child.process.IsValid()) { LOG(WARNING) << "SpawnChild failed"; return false; } int code = -1; - if (!child_process.WaitForExit(&code)) { + if (!spawn_child.process.WaitForExit(&code)) { LOG(WARNING) << "Process::WaitForExit failed"; return false; }
diff --git a/content/common/sandbox_mac_unittest_helper.mm b/content/common/sandbox_mac_unittest_helper.mm index 5988ffe6..9d8ddd45 100644 --- a/content/common/sandbox_mac_unittest_helper.mm +++ b/content/common/sandbox_mac_unittest_helper.mm
@@ -77,13 +77,13 @@ if (test_data) setenv(kTestDataKey, test_data, 1); - base::Process child_process = SpawnChild("mac_sandbox_test_runner"); - if (!child_process.IsValid()) { + base::SpawnChildResult spawn_child = SpawnChild("mac_sandbox_test_runner"); + if (!spawn_child.process.IsValid()) { LOG(WARNING) << "SpawnChild failed"; return false; } int code = -1; - if (!child_process.WaitForExit(&code)) { + if (!spawn_child.process.WaitForExit(&code)) { LOG(WARNING) << "Process::WaitForExit failed"; return false; }
diff --git a/content/public/android/java/src/org/chromium/content/browser/ContentViewCore.java b/content/public/android/java/src/org/chromium/content/browser/ContentViewCore.java index 35bd096..b22367f 100644 --- a/content/public/android/java/src/org/chromium/content/browser/ContentViewCore.java +++ b/content/public/android/java/src/org/chromium/content/browser/ContentViewCore.java
@@ -2416,8 +2416,7 @@ /** * @see View#onDragEvent(DragEvent) */ - // TODO(hush): uncomment below when we build with API 24. - // @TargetApi(Build.VERSION_CODES.N) + @TargetApi(Build.VERSION_CODES.N) public boolean onDragEvent(DragEvent event) { if (mNativeContentViewCore == 0 || Build.VERSION.SDK_INT <= Build.VERSION_CODES.M) { return false; @@ -2437,9 +2436,8 @@ StringBuilder content = new StringBuilder(""); if (event.getAction() == DragEvent.ACTION_DROP) { - // TODO(hush): obtain dragdrop permissions (via reflection?), when dragging files into - // Chrome/WebView is supported. Not necessary to do so for now, because only text - // dragging is supported. + // TODO(hush): obtain dragdrop permissions, when dragging files into Chrome/WebView is + // supported. Not necessary to do so for now, because only text dragging is supported. ClipData clipData = event.getClipData(); final int itemCount = clipData.getItemCount(); for (int i = 0; i < itemCount; i++) {
diff --git a/content/public/browser/gpu_data_manager.h b/content/public/browser/gpu_data_manager.h index f2e3b64..a90aaa7 100644 --- a/content/public/browser/gpu_data_manager.h +++ b/content/public/browser/gpu_data_manager.h
@@ -14,10 +14,6 @@ class GURL; -namespace base { -class FilePath; -} - namespace gpu { struct GPUInfo; } @@ -76,9 +72,6 @@ // Returns true if SwiftShader should be used. virtual bool ShouldUseSwiftShader() const = 0; - // Register a path to SwiftShader. - virtual void RegisterSwiftShaderPath(const base::FilePath& path) = 0; - // Registers/unregister |observer|. virtual void AddObserver(GpuDataManagerObserver* observer) = 0; virtual void RemoveObserver(GpuDataManagerObserver* observer) = 0;
diff --git a/content/public/browser/navigation_handle.h b/content/public/browser/navigation_handle.h index 4795ef2..b81bb39 100644 --- a/content/public/browser/navigation_handle.h +++ b/content/public/browser/navigation_handle.h
@@ -110,6 +110,9 @@ // if the navigation is not a restore. virtual RestoreType GetRestoreType() = 0; + // Used for specifying a base URL for pages loaded via data URLs. + virtual const GURL& GetBaseURLForDataURL() = 0; + // Parameters available at network request start time ------------------------ // // The following parameters are only available when the network request is
diff --git a/content/public/test/render_view_test.cc b/content/public/test/render_view_test.cc index f3857d4..11ec59859 100644 --- a/content/public/test/render_view_test.cc +++ b/content/public/test/render_view_test.cc
@@ -517,7 +517,8 @@ url, Referrer(), ui::PAGE_TRANSITION_LINK, FrameMsg_Navigate_Type::RELOAD, true, false, base::TimeTicks(), FrameMsg_UILoadMetricsReportType::NO_REPORT, GURL(), GURL(), - PREVIEWS_UNSPECIFIED, base::TimeTicks::Now(), "GET", nullptr); + PREVIEWS_UNSPECIFIED, base::TimeTicks::Now(), "GET", nullptr, + base::Optional<SourceLocation>()); RenderViewImpl* impl = static_cast<RenderViewImpl*>(view_); TestRenderFrame* frame = static_cast<TestRenderFrame*>(impl->GetMainRenderFrame()); @@ -654,7 +655,8 @@ url, Referrer(), ui::PAGE_TRANSITION_FORWARD_BACK, FrameMsg_Navigate_Type::HISTORY_DIFFERENT_DOCUMENT, true, false, base::TimeTicks(), FrameMsg_UILoadMetricsReportType::NO_REPORT, GURL(), - GURL(), PREVIEWS_UNSPECIFIED, base::TimeTicks::Now(), "GET", nullptr); + GURL(), PREVIEWS_UNSPECIFIED, base::TimeTicks::Now(), "GET", nullptr, + base::Optional<SourceLocation>()); RequestNavigationParams request_params; request_params.page_state = state; request_params.nav_entry_id = pending_offset + 1;
diff --git a/content/renderer/gpu/render_widget_compositor.cc b/content/renderer/gpu/render_widget_compositor.cc index 12fcd455..8dadd144 100644 --- a/content/renderer/gpu/render_widget_compositor.cc +++ b/content/renderer/gpu/render_widget_compositor.cc
@@ -751,8 +751,6 @@ // TODO(bokan): This check can probably be removed now, but it looks // like overscroll elasticity may still be NULL until VisualViewport // registers its layers. - // The scroll elasticity layer will only exist when using pinch virtual - // viewports. overscrollElasticityLayer ? static_cast<const cc_blink::WebLayerImpl*>( overscrollElasticityLayer) ->layer() @@ -763,8 +761,6 @@ // TODO(bokan): This check can probably be removed now, but it looks // like overscroll elasticity may still be NULL until VisualViewport // registers its layers. - // The outer viewport layer will only exist when using pinch virtual - // viewports. outerViewportScrollLayer ? static_cast<const cc_blink::WebLayerImpl*>(outerViewportScrollLayer) ->layer()
diff --git a/content/renderer/media/media_stream_dispatcher.cc b/content/renderer/media/media_stream_dispatcher.cc index 077c27cd..2ce2c83 100644 --- a/content/renderer/media/media_stream_dispatcher.cc +++ b/content/renderer/media/media_stream_dispatcher.cc
@@ -168,6 +168,13 @@ Send(new MediaStreamHostMsg_CloseDevice(routing_id(), label)); } +void MediaStreamDispatcher::OnStreamStarted(const std::string& label) { + DCHECK(thread_checker_.CalledOnValidThread()); + DVLOG(1) << "MediaStreamDispatcher::OnStreamStarted(" << label << ")"; + + Send(new MediaStreamHostMsg_StreamStarted(label)); +} + void MediaStreamDispatcher::OnDestruct() { // Do not self-destruct. UserMediaClientImpl owns |this|. }
diff --git a/content/renderer/media/media_stream_dispatcher.h b/content/renderer/media/media_stream_dispatcher.h index b5fc1d82..18803c12 100644 --- a/content/renderer/media/media_stream_dispatcher.h +++ b/content/renderer/media/media_stream_dispatcher.h
@@ -72,6 +72,9 @@ // Close a started device. |label| is provided in OnDeviceOpened. void CloseDevice(const std::string& label); + // This method is called when the stream is started successfully. + void OnStreamStarted(const std::string& label); + // Check if the label is a valid stream. virtual bool IsStream(const std::string& label); // Get the video session_id given a label. The label identifies a stream.
diff --git a/content/renderer/media/media_stream_video_capturer_source.cc b/content/renderer/media/media_stream_video_capturer_source.cc index 8734698c..1a97c2d 100644 --- a/content/renderer/media/media_stream_video_capturer_source.cc +++ b/content/renderer/media/media_stream_video_capturer_source.cc
@@ -364,6 +364,7 @@ base::ResetAndReturn(&running_callback_).Run(false); break; + case VIDEO_CAPTURE_STATE_STARTING: case VIDEO_CAPTURE_STATE_PAUSED: case VIDEO_CAPTURE_STATE_RESUMED: // Not applicable to reporting on device starts or errors.
diff --git a/content/renderer/media/user_media_client_impl.cc b/content/renderer/media/user_media_client_impl.cc index 1ae142d1..0b8fb8c 100644 --- a/content/renderer/media/user_media_client_impl.cc +++ b/content/renderer/media/user_media_client_impl.cc
@@ -548,7 +548,7 @@ // Wait for the tracks to be started successfully or to fail. request_info->CallbackOnTracksStarted( base::Bind(&UserMediaClientImpl::OnCreateNativeTracksCompleted, - weak_factory_.GetWeakPtr())); + weak_factory_.GetWeakPtr(), label)); } void UserMediaClientImpl::OnStreamGeneratedForCancelledRequest( @@ -817,6 +817,7 @@ } void UserMediaClientImpl::OnCreateNativeTracksCompleted( + const std::string& label, UserMediaRequestInfo* request, MediaStreamRequestResult result, const blink::WebString& result_name) { @@ -827,6 +828,7 @@ if (result == content::MEDIA_DEVICE_OK) { GetUserMediaRequestSucceeded(request->web_stream, request->request); + media_stream_dispatcher_->OnStreamStarted(label); } else { GetUserMediaRequestFailed(request->request, result, result_name);
diff --git a/content/renderer/media/user_media_client_impl.h b/content/renderer/media/user_media_client_impl.h index 7c72248..fd0cde4 100644 --- a/content/renderer/media/user_media_client_impl.h +++ b/content/renderer/media/user_media_client_impl.h
@@ -229,10 +229,10 @@ // Callback function triggered when all native versions of the // underlying media sources and tracks have been created and started. - void OnCreateNativeTracksCompleted( - UserMediaRequestInfo* request, - MediaStreamRequestResult result, - const blink::WebString& result_name); + void OnCreateNativeTracksCompleted(const std::string& label, + UserMediaRequestInfo* request, + MediaStreamRequestResult result, + const blink::WebString& result_name); void OnStreamGeneratedForCancelledRequest( const StreamDeviceInfoArray& audio_array,
diff --git a/content/renderer/media/video_capture_impl.cc b/content/renderer/media/video_capture_impl.cc index 089fcbc..7381c63 100644 --- a/content/renderer/media/video_capture_impl.cc +++ b/content/renderer/media/video_capture_impl.cc
@@ -83,7 +83,9 @@ VideoCaptureImpl::~VideoCaptureImpl() { DCHECK(io_thread_checker_.CalledOnValidThread()); - if (state_ == VIDEO_CAPTURE_STATE_STARTED && GetVideoCaptureHost()) + if ((state_ == VIDEO_CAPTURE_STATE_STARTING || + state_ == VIDEO_CAPTURE_STATE_STARTED) && + GetVideoCaptureHost()) GetVideoCaptureHost()->Stop(device_id_); } @@ -107,29 +109,23 @@ client_info.state_update_cb = state_update_cb; client_info.deliver_frame_cb = deliver_frame_cb; - if (state_ == VIDEO_CAPTURE_STATE_ERROR) { - state_update_cb.Run(VIDEO_CAPTURE_STATE_ERROR); - } else if (clients_pending_on_restart_.count(client_id) || - clients_.count(client_id)) { - DLOG(FATAL) << __func__ << " This client has already started."; - } else { - // Note: |state_| might not be started at this point. But we tell - // client that we have started. - state_update_cb.Run(VIDEO_CAPTURE_STATE_STARTED); - if (state_ == VIDEO_CAPTURE_STATE_STARTED) { + switch (state_) { + case VIDEO_CAPTURE_STATE_STARTING: + case VIDEO_CAPTURE_STATE_STARTED: clients_[client_id] = client_info; // TODO(sheu): Allowing resolution change will require that all // outstanding clients of a capture session support resolution change. DCHECK_EQ(params_.resolution_change_policy, params.resolution_change_policy); - } else if (state_ == VIDEO_CAPTURE_STATE_STOPPING) { + return; + case VIDEO_CAPTURE_STATE_STOPPING: clients_pending_on_restart_[client_id] = client_info; DVLOG(1) << __func__ << " Got new resolution while stopping: " << params.requested_format.frame_size.ToString(); - } else { + return; + case VIDEO_CAPTURE_STATE_STOPPED: + case VIDEO_CAPTURE_STATE_ENDED: clients_[client_id] = client_info; - if (state_ == VIDEO_CAPTURE_STATE_STARTED) - return; params_ = params; params_.requested_format.frame_rate = std::min(params_.requested_format.frame_rate, @@ -138,7 +134,16 @@ DVLOG(1) << "StartCapture: starting with first resolution " << params_.requested_format.frame_size.ToString(); StartCaptureInternal(); - } + return; + case VIDEO_CAPTURE_STATE_ERROR: + state_update_cb.Run(VIDEO_CAPTURE_STATE_ERROR); + return; + case VIDEO_CAPTURE_STATE_PAUSED: + case VIDEO_CAPTURE_STATE_RESUMED: + // The internal |state_| is never set to PAUSED/RESUMED since + // VideoCaptureImpl is not modified by those. + NOTREACHED(); + return; } } @@ -188,8 +193,13 @@ switch (state) { case mojom::VideoCaptureState::STARTED: - // Capture has started in the browser process. Since we have already - // told all clients that we have started there's nothing to do. + state_ = VIDEO_CAPTURE_STATE_STARTED; + for (const auto& client : clients_) + client.second.state_update_cb.Run(VIDEO_CAPTURE_STATE_STARTED); + // In case there is any frame dropped before STARTED, always request for + // a frame refresh to start the video call with. + // Capture device will make a decision if it should refresh a frame. + RequestRefreshFrame(); break; case mojom::VideoCaptureState::STOPPED: state_ = VIDEO_CAPTURE_STATE_STOPPED; @@ -228,9 +238,6 @@ DCHECK(io_thread_checker_.CalledOnValidThread()); DCHECK(handle.is_valid()); - if (state_ != VIDEO_CAPTURE_STATE_STARTED) - return; - base::SharedMemoryHandle memory_handle; size_t memory_size = 0; bool read_only_flag = false; @@ -350,7 +357,8 @@ void VideoCaptureImpl::StopDevice() { DCHECK(io_thread_checker_.CalledOnValidThread()); - if (state_ != VIDEO_CAPTURE_STATE_STARTED) + if (state_ != VIDEO_CAPTURE_STATE_STARTING && + state_ != VIDEO_CAPTURE_STATE_STARTED) return; state_ = VIDEO_CAPTURE_STATE_STOPPING; GetVideoCaptureHost()->Stop(device_id_); @@ -379,10 +387,10 @@ void VideoCaptureImpl::StartCaptureInternal() { DCHECK(io_thread_checker_.CalledOnValidThread()); + state_ = VIDEO_CAPTURE_STATE_STARTING; GetVideoCaptureHost()->Start(device_id_, session_id_, params_, observer_binding_.CreateInterfacePtrAndBind()); - state_ = VIDEO_CAPTURE_STATE_STARTED; } void VideoCaptureImpl::OnDeviceSupportedFormats(
diff --git a/content/renderer/media/video_capture_impl_manager_unittest.cc b/content/renderer/media/video_capture_impl_manager_unittest.cc index a68a26b..817b228 100644 --- a/content/renderer/media/video_capture_impl_manager_unittest.cc +++ b/content/renderer/media/video_capture_impl_manager_unittest.cc
@@ -21,6 +21,7 @@ using ::testing::_; using ::testing::DoAll; +using ::testing::InSequence; using ::testing::SaveArg; using media::BindToCurrentLoop; @@ -63,6 +64,8 @@ mojom::VideoCaptureObserverPtr observer) override { // For every Start(), expect a corresponding Stop() call. EXPECT_CALL(*this, Stop(_)); + // Simulate device started. + OnStateChanged(mojom::VideoCaptureState::STARTED); } MOCK_METHOD1(Stop, void(int32_t)); @@ -131,8 +134,15 @@ bool same_session_id) { base::RunLoop run_loop; base::Closure quit_closure = BindToCurrentLoop(run_loop.QuitClosure()); - EXPECT_CALL(*this, OnStarted(_)).Times(kNumClients - 1) - .RetiresOnSaturation(); + + InSequence s; + if (!same_session_id) { + // |OnStarted| will only be received once from each device if there are + // multiple request to the same device. + EXPECT_CALL(*this, OnStarted(_)) + .Times(kNumClients - 1) + .RetiresOnSaturation(); + } EXPECT_CALL(*this, OnStarted(_)).WillOnce(RunClosure(quit_closure)) .RetiresOnSaturation(); std::array<base::Closure, kNumClients> stop_callbacks;
diff --git a/content/renderer/media/video_capture_impl_unittest.cc b/content/renderer/media/video_capture_impl_unittest.cc index f130682..562492b 100644 --- a/content/renderer/media/video_capture_impl_unittest.cc +++ b/content/renderer/media/video_capture_impl_unittest.cc
@@ -15,6 +15,7 @@ #include "testing/gtest/include/gtest/gtest.h" using ::testing::_; +using ::testing::InSequence; using ::testing::Invoke; using ::testing::InvokeWithoutArgs; using ::testing::SaveArg; @@ -29,6 +30,8 @@ callback.Run(formats); } +ACTION(DoNothing) {} + // Mock implementation of the Mojo Host service. class MockMojoVideoCaptureHost : public mojom::VideoCaptureHost { public: @@ -89,6 +92,12 @@ video_capture_impl_->SetVideoCaptureHostForTesting( &mock_video_capture_host_); + + ON_CALL(mock_video_capture_host_, DoStart(_, _, _)) + .WillByDefault(InvokeWithoutArgs([this]() { + video_capture_impl_->OnStateChanged( + mojom::VideoCaptureState::STARTED); + })); } protected: @@ -184,7 +193,7 @@ } TEST_F(VideoCaptureImplTest, TwoClientsInSequence) { - EXPECT_CALL(*this, OnStateUpdate(VIDEO_CAPTURE_STATE_STARTED)).Times(2); + EXPECT_CALL(*this, OnStateUpdate(VIDEO_CAPTURE_STATE_STARTED)); EXPECT_CALL(*this, OnStateUpdate(VIDEO_CAPTURE_STATE_STOPPED)).Times(2); EXPECT_CALL(mock_video_capture_host_, DoStart(_, kSessionId, params_small_)); EXPECT_CALL(mock_video_capture_host_, Stop(_)); @@ -196,7 +205,7 @@ } TEST_F(VideoCaptureImplTest, LargeAndSmall) { - EXPECT_CALL(*this, OnStateUpdate(VIDEO_CAPTURE_STATE_STARTED)).Times(2); + EXPECT_CALL(*this, OnStateUpdate(VIDEO_CAPTURE_STATE_STARTED)); EXPECT_CALL(*this, OnStateUpdate(VIDEO_CAPTURE_STATE_STOPPED)).Times(2); EXPECT_CALL(mock_video_capture_host_, DoStart(_, kSessionId, params_large_)); EXPECT_CALL(mock_video_capture_host_, Stop(_)); @@ -208,7 +217,7 @@ } TEST_F(VideoCaptureImplTest, SmallAndLarge) { - EXPECT_CALL(*this, OnStateUpdate(VIDEO_CAPTURE_STATE_STARTED)).Times(2); + EXPECT_CALL(*this, OnStateUpdate(VIDEO_CAPTURE_STATE_STARTED)); EXPECT_CALL(*this, OnStateUpdate(VIDEO_CAPTURE_STATE_STOPPED)).Times(2); EXPECT_CALL(mock_video_capture_host_, DoStart(_, kSessionId, params_small_)); EXPECT_CALL(mock_video_capture_host_, Stop(_)); @@ -303,10 +312,14 @@ TEST_F(VideoCaptureImplTest, AlreadyStarted) { media::VideoCaptureParams params = {}; - EXPECT_CALL(*this, OnStateUpdate(VIDEO_CAPTURE_STATE_STARTED)).Times(2); + EXPECT_CALL(*this, OnStateUpdate(VIDEO_CAPTURE_STATE_STARTED)); EXPECT_CALL(*this, OnStateUpdate(VIDEO_CAPTURE_STATE_STOPPED)).Times(2); - EXPECT_CALL(mock_video_capture_host_, DoStart(_, kSessionId, _)) - .WillOnce(SaveArg<2>(¶ms)); + EXPECT_CALL(mock_video_capture_host_, DoStart(_, kSessionId, params_small_)) + .WillOnce(DoAll(InvokeWithoutArgs([this]() { + video_capture_impl_->OnStateChanged( + mojom::VideoCaptureState::STARTED); + }), + SaveArg<2>(¶ms))); EXPECT_CALL(mock_video_capture_host_, Stop(_)); StartCapture(0, params_small_); @@ -340,4 +353,34 @@ StopCapture(0); } +TEST_F(VideoCaptureImplTest, BufferReceivedBeforeOnStarted) { + const int kBufferId = 16; + + base::SharedMemory shm; + const size_t frame_size = media::VideoFrame::AllocationSize( + media::PIXEL_FORMAT_I420, params_small_.requested_format.frame_size); + ASSERT_TRUE(shm.CreateAndMapAnonymous(frame_size)); + + InSequence s; + EXPECT_CALL(mock_video_capture_host_, DoStart(_, kSessionId, params_small_)) + .WillOnce(DoNothing()); + EXPECT_CALL(mock_video_capture_host_, ReleaseBuffer(_, kBufferId, _)); + StartCapture(0, params_small_); + SimulateOnBufferCreated(kBufferId, shm); + SimulateBufferReceived(kBufferId, params_small_.requested_format.frame_size); + + EXPECT_CALL(*this, OnStateUpdate(VIDEO_CAPTURE_STATE_STARTED)); + EXPECT_CALL(mock_video_capture_host_, RequestRefreshFrame(_)); + video_capture_impl_->OnStateChanged(mojom::VideoCaptureState::STARTED); + + // Additional STARTED will cause RequestRefreshFrame a second time. + EXPECT_CALL(*this, OnStateUpdate(VIDEO_CAPTURE_STATE_STARTED)); + EXPECT_CALL(mock_video_capture_host_, RequestRefreshFrame(_)); + video_capture_impl_->OnStateChanged(mojom::VideoCaptureState::STARTED); + + EXPECT_CALL(*this, OnStateUpdate(VIDEO_CAPTURE_STATE_STOPPED)); + EXPECT_CALL(mock_video_capture_host_, Stop(_)); + StopCapture(0); +} + } // namespace content
diff --git a/content/renderer/media_recorder/video_track_recorder.cc b/content/renderer/media_recorder/video_track_recorder.cc index 8cf76c2..9ca982ed 100644 --- a/content/renderer/media_recorder/video_track_recorder.cc +++ b/content/renderer/media_recorder/video_track_recorder.cc
@@ -692,10 +692,8 @@ DVLOG(3) << __func__; DCHECK(encoding_task_runner_->BelongsToCurrentThread()); - if (input_size_ != frame->visible_rect().size() && video_encoder_) { - video_encoder_->Destroy(); + if (input_size_ != frame->visible_rect().size() && video_encoder_) video_encoder_.reset(); - } if (!video_encoder_) ConfigureEncoderOnEncodingTaskRunner(frame->visible_rect().size());
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc index 91b13ef7..607afe6f2 100644 --- a/content/renderer/render_frame_impl.cc +++ b/content/renderer/render_frame_impl.cc
@@ -677,6 +677,13 @@ navigation_type = FrameMsg_Navigate_Type::RELOAD; } + base::Optional<SourceLocation> source_location; + if (!info.sourceLocation.url.isNull()) { + source_location = SourceLocation(info.sourceLocation.url.latin1(), + info.sourceLocation.lineNumber, + info.sourceLocation.columnNumber); + } + const RequestExtraData* extra_data = static_cast<RequestExtraData*>(info.urlRequest.getExtraData()); DCHECK(extra_data); @@ -686,7 +693,7 @@ report_type, GURL(), GURL(), static_cast<PreviewsState>(info.urlRequest.getPreviewsState()), base::TimeTicks::Now(), info.urlRequest.httpMethod().latin1(), - GetRequestBodyForWebURLRequest(info.urlRequest)); + GetRequestBodyForWebURLRequest(info.urlRequest), source_location); } media::Context3D GetSharedMainThreadContext3D( @@ -3417,6 +3424,20 @@ // UnloadEventStart and UnloadEventEnd are still missing. } + // PlzNavigate: update the source location before processing the navigation + // commit. + if (IsBrowserSideNavigationEnabled() && + navigation_state->common_params().source_location.has_value()) { + blink::WebSourceLocation source_location; + source_location.url = WebString::fromLatin1( + navigation_state->common_params().source_location->url); + source_location.lineNumber = + navigation_state->common_params().source_location->line_number; + source_location.columnNumber = + navigation_state->common_params().source_location->column_number; + datasource->setSourceLocation(source_location); + } + // Create the serviceworker's per-document network observing object if it // does not exist (When navigation happens within a page, the provider already // exists). @@ -4301,37 +4322,6 @@ // when it is re-created in the new process. bool should_replace_current_entry = data_source->replacesCurrentHistoryItem(); - // Initializes service worker related request info. - if (request.getFrameType() == blink::WebURLRequest::FrameTypeTopLevel || - request.getFrameType() == blink::WebURLRequest::FrameTypeNested) { - // |provisionalDataSource| may be null in some content::ResourceFetcher - // use cases, we don't hook those requests. - if (frame->provisionalDataSource()) { - blink::WebServiceWorkerNetworkProvider* provider = - frame->provisionalDataSource()->getServiceWorkerNetworkProvider(); - DCHECK(provider); - provider->willSendRequest(request); - } - } else if (frame->dataSource()) { - blink::WebServiceWorkerNetworkProvider* provider = - frame->dataSource()->getServiceWorkerNetworkProvider(); - DCHECK(provider); - provider->willSendRequest(request); - - // If the provider does not have a controller at this point, the renderer - // expects the request to never be handled by a controlling service worker, - // so set the ServiceWorkerMode to skip local workers here. Otherwise, a - // service worker that is in the process of becoming the controller (i.e., - // via claim()) on the browser-side could handle the request and break - // the assumptions of the renderer. - if (!provider->isControlledByServiceWorker() && - request.getServiceWorkerMode() != - blink::WebURLRequest::ServiceWorkerMode::None) { - request.setServiceWorkerMode( - blink::WebURLRequest::ServiceWorkerMode::Foreign); - } - } - WebFrame* parent = frame->parent(); int parent_routing_id = parent ? GetRoutingIdForFrameOrProxy(parent) : -1; @@ -6123,6 +6113,14 @@ // In case LoadRequest failed before didCreateDataSource was called. pending_navigation_params_.reset(); + + // PlzNavigate: reset the source location now that the commit checks have been + // processed. + if (IsBrowserSideNavigationEnabled()) { + frame_->dataSource()->resetSourceLocation(); + if (frame_->provisionalDataSource()) + frame_->provisionalDataSource()->resetSourceLocation(); + } } void RenderFrameImpl::UpdateEncoding(WebFrame* frame,
diff --git a/content/renderer/render_view_browsertest.cc b/content/renderer/render_view_browsertest.cc index bbd4236..befcd2d 100644 --- a/content/renderer/render_view_browsertest.cc +++ b/content/renderer/render_view_browsertest.cc
@@ -1995,7 +1995,7 @@ blink::WebURLRequest request(GURL("http://foo.com")); request.setRequestContext(blink::WebURLRequest::RequestContextSubresource); blink::WebURLResponse redirect_response; - frame()->willSendRequest(GetMainFrame(), request); + webprovider->willSendRequest(request); extra_data = static_cast<RequestExtraData*>(request.getExtraData()); ASSERT_TRUE(extra_data); EXPECT_EQ(extra_data->service_worker_provider_id(), provider->provider_id());
diff --git a/content/renderer/render_widget.cc b/content/renderer/render_widget.cc index 9dc6a650..b3a44e0a 100644 --- a/content/renderer/render_widget.cc +++ b/content/renderer/render_widget.cc
@@ -1196,7 +1196,8 @@ if (compositor_) { compositor_->setViewportSize(params.physical_backing_size); compositor_->setBottomControlsHeight(params.bottom_controls_height); - compositor_->SetRasterColorSpace(screen_info_.icc_profile.GetColorSpace()); + compositor_->SetRasterColorSpace( + screen_info_.icc_profile.GetParametricColorSpace()); } visible_viewport_size_ = params.visible_viewport_size;
diff --git a/content/test/gpu/gpu_tests/webgl2_conformance_expectations.py b/content/test/gpu/gpu_tests/webgl2_conformance_expectations.py index 6133726..db99f21 100644 --- a/content/test/gpu/gpu_tests/webgl2_conformance_expectations.py +++ b/content/test/gpu/gpu_tests/webgl2_conformance_expectations.py
@@ -1004,6 +1004,9 @@ self.Fail('conformance2/textures/image_bitmap_from_video/' + 'tex-2d-rgba16f-rgba-half_float.html', ['linux', ('amd', 0x6613)], bug=701138) + self.Fail('conformance2/textures/image_bitmap_from_video/' + + 'tex-2d-rgba32f-rgba-float.html', + ['linux', ('amd', 0x6613)], bug=701138) # Conflicting expectations to test that the # "Expectations have no collisions" unittest works.
diff --git a/device/BUILD.gn b/device/BUILD.gn index 7cca2165..77f7b74 100644 --- a/device/BUILD.gn +++ b/device/BUILD.gn
@@ -2,6 +2,7 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. +import("vr/features.gni") import("//build/config/features.gni") import("//testing/test.gni")
diff --git a/device/usb/mojo/device_impl.cc b/device/usb/mojo/device_impl.cc index 8c6a2f0..68b8074 100644 --- a/device/usb/mojo/device_impl.cc +++ b/device/usb/mojo/device_impl.cc
@@ -172,12 +172,20 @@ } } -void DeviceImpl::OnOpen(const OpenCallback& callback, +// static +void DeviceImpl::OnOpen(base::WeakPtr<DeviceImpl> self, + const OpenCallback& callback, scoped_refptr<UsbDeviceHandle> handle) { - device_handle_ = handle; - if (device_handle_ && permission_provider_) - permission_provider_->IncrementConnectionCount(); - callback.Run(handle ? OpenDeviceError::OK : OpenDeviceError::ACCESS_DENIED); + if (!self) { + handle->Close(); + return; + } + + self->device_handle_ = std::move(handle); + if (self->device_handle_ && self->permission_provider_) + self->permission_provider_->IncrementConnectionCount(); + callback.Run(self->device_handle_ ? OpenDeviceError::OK + : OpenDeviceError::ACCESS_DENIED); } void DeviceImpl::OnPermissionGrantedForOpen(const OpenCallback& callback,
diff --git a/device/usb/mojo/device_impl.h b/device/usb/mojo/device_impl.h index 4f78ffcf..c6a8d50 100644 --- a/device/usb/mojo/device_impl.h +++ b/device/usb/mojo/device_impl.h
@@ -46,8 +46,9 @@ uint16_t index); // Handles completion of an open request. - void OnOpen(const OpenCallback& callback, - scoped_refptr<device::UsbDeviceHandle> handle); + static void OnOpen(base::WeakPtr<DeviceImpl> device, + const OpenCallback& callback, + scoped_refptr<device::UsbDeviceHandle> handle); void OnPermissionGrantedForOpen(const OpenCallback& callback, bool granted); // Device implementation:
diff --git a/device/usb/usb_device_handle_impl.cc b/device/usb/usb_device_handle_impl.cc index 1b7e560..d8b28a9 100644 --- a/device/usb/usb_device_handle_impl.cc +++ b/device/usb/usb_device_handle_impl.cc
@@ -830,6 +830,11 @@ void UsbDeviceHandleImpl::SetConfigurationComplete( bool success, const ResultCallback& callback) { + if (!device_) { + callback.Run(false); + return; + } + if (success) { device_->RefreshActiveConfiguration(); RefreshEndpointMap(); @@ -857,6 +862,16 @@ void UsbDeviceHandleImpl::ClaimInterfaceComplete( scoped_refptr<InterfaceClaimer> interface_claimer, const ResultCallback& callback) { + if (!device_) { + // Ensure that the InterfaceClaimer is released on the blocking thread. + InterfaceClaimer* raw_interface_claimer = interface_claimer.get(); + interface_claimer->AddRef(); + interface_claimer = nullptr; + blocking_task_runner_->ReleaseSoon(FROM_HERE, raw_interface_claimer); + callback.Run(false); + return; + } + if (interface_claimer) { claimed_interfaces_[interface_claimer->interface_number()] = interface_claimer; @@ -888,6 +903,11 @@ int alternate_setting, bool success, const ResultCallback& callback) { + if (!device_) { + callback.Run(false); + return; + } + if (success) { claimed_interfaces_[interface_number]->set_alternate_setting( alternate_setting); @@ -919,6 +939,7 @@ void UsbDeviceHandleImpl::RefreshEndpointMap() { DCHECK(thread_checker_.CalledOnValidThread()); + DCHECK(device_); endpoint_map_.clear(); const UsbConfigDescriptor* config = device_->active_configuration(); if (config) {
diff --git a/device/usb/webusb_descriptors.cc b/device/usb/webusb_descriptors.cc index 57468182..1bc243d 100644 --- a/device/usb/webusb_descriptors.cc +++ b/device/usb/webusb_descriptors.cc
@@ -576,7 +576,9 @@ bool FindInWebUsbAllowedOrigins( const device::WebUsbAllowedOrigins* allowed_origins, - const GURL& origin) { + const GURL& origin, + base::Optional<uint8_t> config_value, + base::Optional<uint8_t> first_interface) { if (!allowed_origins) return false; @@ -584,10 +586,16 @@ return true; for (const auto& config : allowed_origins->configurations) { + if (config_value && *config_value != config.configuration_value) + continue; + if (base::ContainsValue(config.origins, origin)) return true; for (const auto& function : config.functions) { + if (first_interface && *first_interface != function.first_interface) + continue; + if (base::ContainsValue(function.origins, origin)) return true; }
diff --git a/device/usb/webusb_descriptors.h b/device/usb/webusb_descriptors.h index c88b1f9..34a7d61 100644 --- a/device/usb/webusb_descriptors.h +++ b/device/usb/webusb_descriptors.h
@@ -12,6 +12,7 @@ #include "base/callback_forward.h" #include "base/memory/ref_counted.h" +#include "base/optional.h" #include "url/gurl.h" namespace device { @@ -70,10 +71,13 @@ void(std::unique_ptr<WebUsbAllowedOrigins> allowed_origins, const GURL& landing_page)>& callback); -// Check if the origin is allowed. +// Check if the origin is allowed to access a given device, optionally filtering +// by configuration and function. bool FindInWebUsbAllowedOrigins( const device::WebUsbAllowedOrigins* allowed_origins, - const GURL& origin); + const GURL& origin, + base::Optional<uint8_t> configuration_value, + base::Optional<uint8_t> first_interface); } // device
diff --git a/device/vr/BUILD.gn b/device/vr/BUILD.gn index 27cd5c38..54fb4a3a 100644 --- a/device/vr/BUILD.gn +++ b/device/vr/BUILD.gn
@@ -2,13 +2,20 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. -import("//build/config/features.gni") +import("features.gni") +import("//build/buildflag_header.gni") import("//mojo/public/tools/bindings/mojom.gni") if (is_android) { import("//build/config/android/rules.gni") # For generate_jni(). } +# Generate a buildflag header for compile-time checking of WebVR support. +buildflag_header("features") { + header = "features.h" + flags = [ "ENABLE_WEBVR=$enable_webvr" ] +} + component("vr") { output_name = "device_vr"
diff --git a/device/vr/features.gni b/device/vr/features.gni new file mode 100644 index 0000000..aba238e --- /dev/null +++ b/device/vr/features.gni
@@ -0,0 +1,11 @@ +# Copyright 2016 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. + +declare_args() { + # Enable WebVR support by default on Android + # Still requires command line flag to access API + # TODO(bshe): Enable for other architecture too. Currently we only support arm + # and arm64. + enable_webvr = is_android && (current_cpu == "arm" || current_cpu == "arm64") +}
diff --git a/docs/callback.md b/docs/callback.md index b891a0f..6b7dd693 100644 --- a/docs/callback.md +++ b/docs/callback.md
@@ -67,8 +67,11 @@ // |Qux| takes the ownership of |cb| and transfers ownership to PostTask(), // which also takes the ownership of |cb|. +// NOTE: TaskRunner is not actually migrated to OnceClosure yet. Once TaskRunner +// supports OnceClosure, a OnceCallback can be posted as follows: void Qux(OnceCallback<void(int)> cb) { - PostTask(FROM_HERE, std::move(cb)); + PostTask(FROM_HERE, + base::BindOnce(std::move(cb), 42)); // not yet implemented! } ```
diff --git a/google_apis/gaia/OWNERS b/google_apis/gaia/OWNERS index 38f087d..3708c42 100644 --- a/google_apis/gaia/OWNERS +++ b/google_apis/gaia/OWNERS
@@ -1,3 +1,5 @@ msarda@chromium.org rogerta@chromium.org zelidrag@chromium.org + +# COMPONENT: Services>SignIn
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder.cc b/gpu/command_buffer/service/gles2_cmd_decoder.cc index 04ef6af..125ef53 100644 --- a/gpu/command_buffer/service/gles2_cmd_decoder.cc +++ b/gpu/command_buffer/service/gles2_cmd_decoder.cc
@@ -5166,11 +5166,6 @@ width = std::max(1U, width); height = std::max(1U, height); -#if defined(OS_POSIX) && !defined(OS_MACOSX) && \ - !defined(UI_COMPOSITOR_IMAGE_TRANSPORT) - // Make sure that we are done drawing to the back buffer before resizing. - glFinish(); -#endif bool is_offscreen = !!offscreen_target_frame_buffer_.get(); if (is_offscreen) { if (!ResizeOffscreenFramebuffer(gfx::Size(width, height))) {
diff --git a/gpu/command_buffer/service/query_manager.cc b/gpu/command_buffer/service/query_manager.cc index 8c2fe286..56f3594 100644 --- a/gpu/command_buffer/service/query_manager.cc +++ b/gpu/command_buffer/service/query_manager.cc
@@ -1118,6 +1118,9 @@ bool QueryManager::QueryCounter( Query* query, base::subtle::Atomic32 submit_count) { DCHECK(query); + if (!RemovePendingQuery(query)) { + return false; + } return query->QueryCounter(submit_count); }
diff --git a/gpu/command_buffer/service/query_manager_unittest.cc b/gpu/command_buffer/service/query_manager_unittest.cc index d6d14478..aa6be4f 100644 --- a/gpu/command_buffer/service/query_manager_unittest.cc +++ b/gpu/command_buffer/service/query_manager_unittest.cc
@@ -829,6 +829,36 @@ manager_->Destroy(false); } +TEST_F(QueryManagerTest, TimeStampQueryPending) { + const GLuint kClient1Id = 1; + const GLenum kTarget = GL_TIMESTAMP_EXT; + const base::subtle::Atomic32 kSubmitCount = 123; + gl::GPUTimingFake fake_timing_queries; + + decoder_->GetGLContext()->CreateGPUTimingClient()->SetCpuTimeForTesting( + base::Bind(&gl::GPUTimingFake::GetFakeCPUTime)); + + QueryManager::Query* query = manager_->CreateQuery( + kTarget, kClient1Id, kSharedMemoryId, kSharedMemoryOffset); + ASSERT_TRUE(query != NULL); + + const uint64_t expected_result = + 100u * base::Time::kNanosecondsPerMicrosecond; + fake_timing_queries.SetCurrentGLTime(expected_result); + fake_timing_queries.ExpectGPUTimeStampQuery(*gl_, false); + EXPECT_TRUE(manager_->QueryCounter(query, kSubmitCount)); + EXPECT_TRUE(query->IsPending()); + fake_timing_queries.ExpectGPUTimeStampQuery(*gl_, false); + EXPECT_TRUE(manager_->QueryCounter(query, kSubmitCount)); + EXPECT_TRUE(manager_->ProcessPendingQueries(false)); + + QuerySync* sync = decoder_->GetSharedMemoryAs<QuerySync*>( + kSharedMemoryId, kSharedMemoryOffset, sizeof(*sync)); + EXPECT_EQ(expected_result, sync->result); + + manager_->Destroy(false); +} + TEST_F(QueryManagerManualSetupTest, TimeStampDisjoint) { GpuServiceTest::SetUpWithGLVersion("OpenGL ES 3.0", "GL_EXT_disjoint_timer_query");
diff --git a/ios/chrome/browser/content_suggestions/content_suggestions_mediator.mm b/ios/chrome/browser/content_suggestions/content_suggestions_mediator.mm index fe99bd5..6ba0cfd0899 100644 --- a/ios/chrome/browser/content_suggestions/content_suggestions_mediator.mm +++ b/ios/chrome/browser/content_suggestions/content_suggestions_mediator.mm
@@ -113,7 +113,7 @@ sectionInformationByCategory; // Converts the data in |category| to ContentSuggestion and adds them to the -// |contentArray|. +// |contentArray| if the category is available. - (void)addContentInCategory:(ntp_snippets::Category&)category toArray:(NSMutableArray<ContentSuggestion*>*)contentArray; @@ -164,19 +164,21 @@ self.contentService->GetCategories(); NSMutableArray<ContentSuggestion*>* dataHolders = [NSMutableArray array]; for (auto& category : categories) { - if (self.contentService->GetCategoryStatus(category) != - ntp_snippets::CategoryStatus::AVAILABLE) { - continue; - } - if (!self.sectionInformationByCategory[ - [ContentSuggestionsCategoryWrapper wrapperWithCategory:category]]) { - [self addSectionInformationForCategory:category]; - } [self addContentInCategory:category toArray:dataHolders]; } return dataHolders; } +- (NSArray<ContentSuggestion*>*)suggestionsForSection: + (ContentSuggestionsSectionInformation*)sectionInfo { + ntp_snippets::Category category = + [[self categoryWrapperForSectionInfo:sectionInfo] category]; + + NSMutableArray* suggestions = [NSMutableArray array]; + [self addContentInCategory:category toArray:suggestions]; + return suggestions; +} + - (id<ContentSuggestionsImageFetcher>)imageFetcher { return self; } @@ -186,7 +188,13 @@ - (void)contentSuggestionsService: (ntp_snippets::ContentSuggestionsService*)suggestionsService newSuggestionsInCategory:(ntp_snippets::Category)category { - [self.dataSink dataAvailable]; + ContentSuggestionsCategoryWrapper* wrapper = + [ContentSuggestionsCategoryWrapper wrapperWithCategory:category]; + if (!self.sectionInformationByCategory[wrapper]) { + [self addSectionInformationForCategory:category]; + } + [self.dataSink + dataAvailableForSection:self.sectionInformationByCategory[wrapper]]; } - (void)contentSuggestionsService: @@ -246,12 +254,22 @@ - (void)addContentInCategory:(ntp_snippets::Category&)category toArray:(NSMutableArray<ContentSuggestion*>*)contentArray { + if (self.contentService->GetCategoryStatus(category) != + ntp_snippets::CategoryStatus::AVAILABLE) { + return; + } + ContentSuggestionsCategoryWrapper* categoryWrapper = + [ContentSuggestionsCategoryWrapper wrapperWithCategory:category]; + if (!self.sectionInformationByCategory[categoryWrapper]) { + [self addSectionInformationForCategory:category]; + } + const std::vector<ntp_snippets::ContentSuggestion>& suggestions = self.contentService->GetSuggestionsForCategory(category); - ContentSuggestionsCategoryWrapper* categoryWrapper = - [[ContentSuggestionsCategoryWrapper alloc] initWithCategory:category]; + for (auto& contentSuggestion : suggestions) { ContentSuggestion* suggestion = ConvertContentSuggestion(contentSuggestion); + suggestion.type = TypeForCategory(category); suggestion.suggestionIdentifier.sectionInfo = self.sectionInformationByCategory[categoryWrapper];
diff --git a/ios/chrome/browser/first_run/OWNERS b/ios/chrome/browser/first_run/OWNERS index f5e9e65..4905815 100644 --- a/ios/chrome/browser/first_run/OWNERS +++ b/ios/chrome/browser/first_run/OWNERS
@@ -1,2 +1,4 @@ bzanotti@chromium.org msarda@chromium.org + +# COMPONENT: UI>Browser>FirstRun
diff --git a/ios/chrome/browser/native_app_launcher/DEPS b/ios/chrome/browser/native_app_launcher/DEPS deleted file mode 100644 index 1c40ab5f..0000000 --- a/ios/chrome/browser/native_app_launcher/DEPS +++ /dev/null
@@ -1,8 +0,0 @@ -specific_include_rules = { - # TODO(crbug.com/619984): Remove the following exceptions. - "^native_app_navigation_util_unittest\.mm$": [ - "+ios/web/navigation/crw_session_controller.h", - "+ios/web/navigation/navigation_manager_impl.h", - "+ios/web/web_state/web_state_impl.h", - ], -}
diff --git a/ios/chrome/browser/native_app_launcher/native_app_navigation_util_unittest.mm b/ios/chrome/browser/native_app_launcher/native_app_navigation_util_unittest.mm index e37c3331..d329f0a 100644 --- a/ios/chrome/browser/native_app_launcher/native_app_navigation_util_unittest.mm +++ b/ios/chrome/browser/native_app_launcher/native_app_navigation_util_unittest.mm
@@ -4,47 +4,36 @@ #include "ios/chrome/browser/native_app_launcher/native_app_navigation_util.h" -#import "ios/web/navigation/crw_session_controller.h" -#import "ios/web/navigation/navigation_manager_impl.h" -#include "ios/web/public/referrer.h" -#include "ios/web/public/test/web_test.h" -#import "ios/web/web_state/web_state_impl.h" +#include "base/memory/ptr_util.h" +#import "ios/web/public/test/fakes/test_navigation_manager.h" +#import "ios/web/public/test/fakes/test_web_state.h" +#include "testing/platform_test.h" #include "ui/base/page_transition_types.h" #include "url/gurl.h" -namespace { - -class NativeAppNavigationUtilsTest : public web::WebTest { +// Tests the implementation of IsLinkNavigation(). The function being tested +// uses public NavigationManager interfaces and can be tested by using +// TestNavigationManager that implements the same interface. +class NativeAppNavigationUtilsTest : public PlatformTest { protected: void SetUp() override { - web::WebTest::SetUp(); - // WebStateImpl object is needed here to have access to CRWSessionController - // for setting up NavigationManager entries. - std::unique_ptr<web::WebStateImpl> web_state( - new web::WebStateImpl(GetBrowserState())); - web_state->GetNavigationManagerImpl().InitializeSession(NO); - web_state->SetWebUsageEnabled(true); - web_state_.reset(web_state.release()); + PlatformTest::SetUp(); + std::unique_ptr<web::TestNavigationManager> test_navigation_manager = + base::MakeUnique<web::TestNavigationManager>(); + test_navigation_manager_ = test_navigation_manager.get(); + test_web_state_.SetNavigationManager(std::move(test_navigation_manager)); } - void TearDown() override { - web_state_.reset(); - web::WebTest::TearDown(); - } + web::WebState* web_state() { return &test_web_state_; } - web::WebState* web_state() { return web_state_->GetWebState(); } - + // Adds a navigation item of |transition| type to current WebState. void AddItem(const std::string& url_spec, ui::PageTransition transition) { - CRWSessionController* session_controller = - web_state_->GetNavigationManagerImpl().GetSessionController(); - web_state_->GetNavigationManagerImpl().AddPendingItem( - GURL(url_spec), web::Referrer(), transition, - web::NavigationInitiationType::USER_INITIATED); - [session_controller commitPendingItem]; + test_navigation_manager_->AddItem(GURL(url_spec), transition); } private: - std::unique_ptr<web::WebStateImpl> web_state_; + web::TestNavigationManager* test_navigation_manager_; + web::TestWebState test_web_state_; }; // Tests that default state is not a link click. @@ -95,5 +84,3 @@ AddItem("http://blah.com/page2", ui::PAGE_TRANSITION_TYPED); EXPECT_FALSE(native_app_launcher::IsLinkNavigation(web_state())); } - -} // namespace
diff --git a/ios/chrome/browser/net/cookies_egtest.mm b/ios/chrome/browser/net/cookies_egtest.mm index ec866b0..b464fa9f 100644 --- a/ios/chrome/browser/net/cookies_egtest.mm +++ b/ios/chrome/browser/net/cookies_egtest.mm
@@ -29,43 +29,11 @@ const char kTestUrlIncognitoSetCookie[] = "http://choux/incognito/set_cookie"; const char kTestResponse[] = "fleur"; -NSString* const kNoCookieText = @"No cookies!"; -NSString* const kNormalCookieKey = @"request"; +NSString* const kNormalCookieName = @"request"; NSString* const kNormalCookieValue = @"pony"; -NSString* const kIncognitoCookieKey = @"secret"; +NSString* const kIncognitoCookieName = @"secret"; NSString* const kIncognitoCookieValue = @"rainbow"; -NSString* const kGetCookieScript = - @"var c = document.cookie ? document.cookie.split(/;\\s*/) : [];" - "if (!c.length) {" - " document.documentElement.innerHTML = 'No cookies!';" - "} else {" - " document.documentElement.innerHTML = 'OK: ' + c.join(',');" - "}"; - -// Checks that a cookie of key=value is the only cookie exists in current domain -// in current web state. -// Returns true if cookie |key| of value |value| is the only cookie that exists. -bool CheckCookieExists(NSString* key, NSString* value) { - NSError* error = nil; - id result = chrome_test_util::ExecuteJavaScript(kGetCookieScript, &error); - if (error) - return false; - NSString* stringResult = base::mac::ObjCCastStrict<NSString>(result); - NSString* expectedText = [NSString stringWithFormat:@"OK: %@=%@", key, value]; - return [stringResult isEqualToString:expectedText]; -} - -// Checks that there is no cookie in current domain in current web state. -bool CheckNoCookieExists() { - NSError* error = nil; - id result = chrome_test_util::ExecuteJavaScript(kGetCookieScript, &error); - if (error) - return false; - NSString* stringResult = base::mac::ObjCCastStrict<NSString>(result); - return [stringResult isEqualToString:kNoCookieText]; -} - } // namespace @interface CookiesTestCase : ChromeTestCase @@ -84,9 +52,9 @@ std::map<GURL, std::pair<std::string, std::string>> responses; NSString* normalCookie = [NSString - stringWithFormat:@"%@=%@", kNormalCookieKey, kNormalCookieValue]; + stringWithFormat:@"%@=%@", kNormalCookieName, kNormalCookieValue]; NSString* incognitoCookie = [NSString - stringWithFormat:@"%@=%@", kIncognitoCookieKey, kIncognitoCookieValue]; + stringWithFormat:@"%@=%@", kIncognitoCookieName, kIncognitoCookieValue]; responses[web::test::HttpServer::MakeUrl(kTestUrlNormalBrowsing)] = std::pair<std::string, std::string>("", kTestResponse); @@ -132,39 +100,43 @@ // the incognito test cookie is not found. [ChromeEarlGrey loadURL:web::test::HttpServer::MakeUrl(kTestUrlNormalSetCookie)]; - GREYAssertTrue(CheckCookieExists(kNormalCookieKey, kNormalCookieValue), - @"Failed to set normal cookie in normal mode. (1)"); - GREYAssertFalse(CheckCookieExists(kIncognitoCookieKey, kIncognitoCookieValue), - @"Incognito cookie should not be found in normal mode. (1)"); + NSDictionary* cookies = [ChromeEarlGrey cookies]; + GREYAssertEqualObjects(kNormalCookieValue, cookies[kNormalCookieName], + @"Failed to set normal cookie in normal mode."); + GREYAssertEqual(1U, cookies.count, + @"Only one cookie should be found in normal mode."); // Opens an incognito tab, loads the dummy page, and sets incognito test // cookie. chrome_test_util::OpenNewIncognitoTab(); [ChromeEarlGrey loadURL:web::test::HttpServer::MakeUrl(kTestUrlIncognitoSetCookie)]; - GREYAssertTrue(CheckCookieExists(kIncognitoCookieKey, kIncognitoCookieValue), - @"Failed to set incognito cookie in incognito mode. (2)"); + cookies = [ChromeEarlGrey cookies]; + GREYAssertEqualObjects(kIncognitoCookieValue, cookies[kIncognitoCookieName], + @"Failed to set incognito cookie in incognito mode."); + GREYAssertEqual(1U, cookies.count, + @"Only one cookie should be found in incognito mode."); // Switches back to normal profile by opening up a new tab. Test cookie // should not be found. chrome_test_util::OpenNewTab(); [ChromeEarlGrey loadURL:web::test::HttpServer::MakeUrl(kTestUrlNormalBrowsing)]; - GREYAssertTrue(CheckCookieExists(kNormalCookieKey, kNormalCookieValue), - @"Normal cookie should be found in normal mode. (3)"); - GREYAssertFalse(CheckCookieExists(kIncognitoCookieKey, kIncognitoCookieValue), - @"Incognito cookie should not be found in normal mode. (3)"); + cookies = [ChromeEarlGrey cookies]; + GREYAssertEqualObjects(kNormalCookieValue, cookies[kNormalCookieName], + @"Normal cookie should still exist in normal mode."); + GREYAssertEqual(1U, cookies.count, + @"Only one cookie should be found in normal mode."); // Finally, closes all incognito tabs while still in normal tab. // Checks that incognito cookie is gone. chrome_test_util::CloseAllIncognitoTabs(); chrome_test_util::OpenNewTab(); [ChromeEarlGrey - loadURL:web::test::HttpServer::MakeUrl(kTestUrlNormalBrowsing)]; - GREYAssertTrue(CheckCookieExists(kNormalCookieKey, kNormalCookieValue), - @"Normal cookie should be found in normal mode. (4)"); - GREYAssertFalse(CheckCookieExists(kIncognitoCookieKey, kIncognitoCookieValue), - @"Incognito cookie should be gone from normal mode. (4)"); + loadURL:web::test::HttpServer::MakeUrl(kTestUrlIncognitoBrowsing)]; + cookies = [ChromeEarlGrey cookies]; + GREYAssertEqual(0U, cookies.count, + @"Incognito cookie should be gone from normal mode."); } // Tests that a cookie set in incognito tab is removed after closing all @@ -179,8 +151,11 @@ chrome_test_util::OpenNewIncognitoTab(); [ChromeEarlGrey loadURL:web::test::HttpServer::MakeUrl(kTestUrlIncognitoSetCookie)]; - GREYAssertTrue(CheckCookieExists(kIncognitoCookieKey, kIncognitoCookieValue), - @"Failed to set incognito cookie in incognito mode. (1)"); + NSDictionary* cookies = [ChromeEarlGrey cookies]; + GREYAssertEqualObjects(kIncognitoCookieValue, cookies[kIncognitoCookieName], + @"Failed to set incognito cookie in incognito mode."); + GREYAssertEqual(1U, cookies.count, + @"Only one cookie should be found in incognito mode."); // Closes all incognito tabs and switch back to a normal tab. chrome_test_util::CloseAllIncognitoTabs(); @@ -193,14 +168,18 @@ chrome_test_util::OpenNewIncognitoTab(); [ChromeEarlGrey loadURL:web::test::HttpServer::MakeUrl(kTestUrlIncognitoBrowsing)]; - GREYAssertTrue(CheckNoCookieExists(), - @"Incognito cookie should be gone from incognito mode. (2)"); + cookies = [ChromeEarlGrey cookies]; + GREYAssertEqual(0U, cookies.count, + @"Incognito cookie should be gone from incognito mode."); // Verifies that new incognito cookies can be set. [ChromeEarlGrey loadURL:web::test::HttpServer::MakeUrl(kTestUrlIncognitoSetCookie)]; - GREYAssertTrue(CheckCookieExists(kIncognitoCookieKey, kIncognitoCookieValue), - @"Failed to set incognito cookie in incognito mode. (3)"); + cookies = [ChromeEarlGrey cookies]; + GREYAssertEqualObjects(kIncognitoCookieValue, cookies[kIncognitoCookieName], + @"Failed to set incognito cookie in incognito mode."); + GREYAssertEqual(1U, cookies.count, + @"Only one cookie should be found in incognito mode."); } // Tests that a cookie set in normal tab is not available in an incognito tab. @@ -208,15 +187,19 @@ // Sets cookie in normal tab. [ChromeEarlGrey loadURL:web::test::HttpServer::MakeUrl(kTestUrlNormalSetCookie)]; - GREYAssertTrue(CheckCookieExists(kNormalCookieKey, kNormalCookieValue), - @"Failed to set normal cookie in normal mode. (1)"); + NSDictionary* cookies = [ChromeEarlGrey cookies]; + GREYAssertEqualObjects(kNormalCookieValue, cookies[kNormalCookieName], + @"Normal cookie should still exist in normal mode."); + GREYAssertEqual(1U, cookies.count, + @"Only one cookie should be found in normal mode."); // Switches to a new incognito tab and verifies that cookie is not there. chrome_test_util::OpenNewIncognitoTab(); [ChromeEarlGrey loadURL:web::test::HttpServer::MakeUrl(kTestUrlIncognitoBrowsing)]; - GREYAssertTrue(CheckNoCookieExists(), - @"Normal cookie should not be found in incognito mode. (2)"); + cookies = [ChromeEarlGrey cookies]; + GREYAssertEqual(0U, cookies.count, + @"Normal cookie should not be found in incognito mode."); // Closes all incognito tabs and then switching back to a normal tab. Verifies // that the cookie set earlier is still there. @@ -224,8 +207,12 @@ chrome_test_util::OpenNewTab(); [ChromeEarlGrey loadURL:web::test::HttpServer::MakeUrl(kTestUrlNormalBrowsing)]; - GREYAssertTrue(CheckCookieExists(kNormalCookieKey, kNormalCookieValue), - @"Normal cookie should still be found in normal mode. (3)"); + cookies = [ChromeEarlGrey cookies]; + GREYAssertEqualObjects( + kNormalCookieValue, cookies[kNormalCookieName], + @"Normal cookie should still be found in normal mode."); + GREYAssertEqual(1U, cookies.count, + @"Only one cookie should be found in normal mode."); } // Tests that a cookie set in incognito tab is only available in another @@ -238,21 +225,31 @@ chrome_test_util::OpenNewIncognitoTab(); [ChromeEarlGrey loadURL:web::test::HttpServer::MakeUrl(kTestUrlIncognitoSetCookie)]; - GREYAssertTrue(CheckCookieExists(kIncognitoCookieKey, kIncognitoCookieValue), - @"Failed to set incognito cookie in incognito mode. (1)"); + NSDictionary* cookies = [ChromeEarlGrey cookies]; + GREYAssertEqualObjects(kIncognitoCookieValue, cookies[kIncognitoCookieName], + @"Failed to set incognito cookie in incognito mode."); + GREYAssertEqual(1U, cookies.count, + @"Only one cookie should be found in incognito mode."); + // Switches back to a normal tab and verifies that cookie set in incognito tab // is not available. chrome_test_util::OpenNewTab(); [ChromeEarlGrey loadURL:web::test::HttpServer::MakeUrl(kTestUrlNormalBrowsing)]; - GREYAssertTrue(CheckNoCookieExists(), - @"Incognito cookie should not be found in normal mode. (2)"); + cookies = [ChromeEarlGrey cookies]; + GREYAssertEqual(0U, cookies.count, + @"Incognito cookie should not be found in normal mode."); + // Returns back to Incognito tab and cookie is still there. chrome_test_util::OpenNewIncognitoTab(); [ChromeEarlGrey loadURL:web::test::HttpServer::MakeUrl(kTestUrlIncognitoBrowsing)]; - GREYAssertTrue(CheckCookieExists(kIncognitoCookieKey, kIncognitoCookieValue), - @"Incognito cookie should be found in incognito mode. (3)"); + cookies = [ChromeEarlGrey cookies]; + GREYAssertEqualObjects( + kIncognitoCookieValue, cookies[kIncognitoCookieName], + @"Incognito cookie should be found in incognito mode."); + GREYAssertEqual(1U, cookies.count, + @"Only one cookie should be found in incognito mode."); } // Tests that a cookie set in a normal tab can be found in another normal tab. @@ -260,15 +257,22 @@ // Loads page and sets cookie in first normal tab. [ChromeEarlGrey loadURL:web::test::HttpServer::MakeUrl(kTestUrlNormalSetCookie)]; - GREYAssertTrue(CheckCookieExists(kNormalCookieKey, kNormalCookieValue), - @"Failed to set normal cookie in normal mode. (1)"); + NSDictionary* cookies = [ChromeEarlGrey cookies]; + GREYAssertEqualObjects(kNormalCookieValue, cookies[kNormalCookieName], + @"Failed to set normal cookie in normal mode."); + GREYAssertEqual(1U, cookies.count, + @"Only one cookie should be found in normal mode."); // Creates another normal tab and verifies that the cookie is also there. chrome_test_util::OpenNewTab(); [ChromeEarlGrey loadURL:web::test::HttpServer::MakeUrl(kTestUrlNormalBrowsing)]; - GREYAssertTrue(CheckCookieExists(kNormalCookieKey, kNormalCookieValue), - @"Normal cookie should still be found in normal mode. (2)"); + cookies = [ChromeEarlGrey cookies]; + GREYAssertEqualObjects( + kNormalCookieValue, cookies[kNormalCookieName], + @"Normal cookie should still be found in normal mode."); + GREYAssertEqual(1U, cookies.count, + @"Only one cookie should be found in normal mode."); } @end
diff --git a/ios/chrome/browser/signin/OWNERS b/ios/chrome/browser/signin/OWNERS index f5e9e65..d45210b 100644 --- a/ios/chrome/browser/signin/OWNERS +++ b/ios/chrome/browser/signin/OWNERS
@@ -1,2 +1,4 @@ bzanotti@chromium.org msarda@chromium.org + +# COMPONENT: Services>SignIn
diff --git a/ios/chrome/browser/tabs/BUILD.gn b/ios/chrome/browser/tabs/BUILD.gn index 9a97750..37b9693 100644 --- a/ios/chrome/browser/tabs/BUILD.gn +++ b/ios/chrome/browser/tabs/BUILD.gn
@@ -118,6 +118,8 @@ source_set("tabs_internal_arc") { sources = [ "legacy_tab_helper.mm", + "tab_helper_util.h", + "tab_helper_util.mm", "tab_model_list.mm", "tab_model_observers.h", "tab_model_observers.mm", @@ -133,8 +135,30 @@ deps = [ ":tabs", "//base", + "//components/favicon/ios", + "//components/history/core/browser", + "//components/history/ios/browser", + "//components/keyed_service/core", + "//components/reading_list/core", + "//components/signin/ios/browser", "//ios/chrome/browser", + "//ios/chrome/browser/bookmarks", "//ios/chrome/browser/browser_state", + "//ios/chrome/browser/favicon", + "//ios/chrome/browser/find_in_page", + "//ios/chrome/browser/find_in_page", + "//ios/chrome/browser/history", + "//ios/chrome/browser/infobars", + "//ios/chrome/browser/reading_list", + "//ios/chrome/browser/sessions", + "//ios/chrome/browser/signin", + "//ios/chrome/browser/ssl", + "//ios/chrome/browser/store_kit", + "//ios/chrome/browser/sync", + "//ios/chrome/browser/translate", + "//ios/chrome/browser/web", + "//ios/chrome/browser/web:web_internal", + "//ios/public/provider/chrome/browser", "//ios/shared/chrome/browser/tabs", "//ios/web", ]
diff --git a/ios/chrome/browser/tabs/tab.h b/ios/chrome/browser/tabs/tab.h index 2623b46..a4c009d 100644 --- a/ios/chrome/browser/tabs/tab.h +++ b/ios/chrome/browser/tabs/tab.h
@@ -40,6 +40,7 @@ @protocol TabHeadersDelegate; @class TabModel; @protocol TabSnapshottingDelegate; +@protocol FindInPageControllerDelegate; namespace infobars { class InfoBarManager; @@ -138,6 +139,8 @@ @property(nonatomic, assign) id<TabHeadersDelegate> tabHeadersDelegate; @property(nonatomic, assign) id<TabSnapshottingDelegate> tabSnapshottingDelegate; +@property(nonatomic, readonly) id<FindInPageControllerDelegate> + findInPageControllerDelegate; // Whether or not desktop user agent is used for the currently visible page. @property(nonatomic, readonly) BOOL usesDesktopUserAgent;
diff --git a/ios/chrome/browser/tabs/tab.mm b/ios/chrome/browser/tabs/tab.mm index 6627920e..d48ffed 100644 --- a/ios/chrome/browser/tabs/tab.mm +++ b/ios/chrome/browser/tabs/tab.mm
@@ -54,14 +54,11 @@ #import "ios/chrome/browser/autofill/autofill_controller.h" #import "ios/chrome/browser/autofill/form_input_accessory_view_controller.h" #import "ios/chrome/browser/autofill/form_suggestion_controller.h" -#include "ios/chrome/browser/bookmarks/bookmark_model_factory.h" #include "ios/chrome/browser/browser_state/chrome_browser_state.h" #include "ios/chrome/browser/chrome_url_constants.h" #import "ios/chrome/browser/crash_loop_detection_util.h" #include "ios/chrome/browser/experimental_flags.h" -#include "ios/chrome/browser/favicon/favicon_service_factory.h" #import "ios/chrome/browser/find_in_page/find_in_page_controller.h" -#import "ios/chrome/browser/find_in_page/find_tab_helper.h" #import "ios/chrome/browser/geolocation/omnibox_geolocation_controller.h" #include "ios/chrome/browser/history/history_service_factory.h" #include "ios/chrome/browser/history/top_sites_factory.h" @@ -72,8 +69,6 @@ #import "ios/chrome/browser/passwords/password_controller.h" #import "ios/chrome/browser/passwords/passwords_ui_delegate_impl.h" #include "ios/chrome/browser/pref_names.h" -#include "ios/chrome/browser/reading_list/reading_list_model_factory.h" -#include "ios/chrome/browser/reading_list/reading_list_web_state_observer.h" #include "ios/chrome/browser/search_engines/template_url_service_factory.h" #include "ios/chrome/browser/sessions/ios_chrome_session_tab_helper.h" #include "ios/chrome/browser/signin/account_consistency_service_factory.h" @@ -84,13 +79,11 @@ #import "ios/chrome/browser/snapshots/snapshot_manager.h" #import "ios/chrome/browser/snapshots/snapshot_overlay_provider.h" #import "ios/chrome/browser/snapshots/web_controller_snapshot_helper.h" -#include "ios/chrome/browser/ssl/ios_security_state_tab_helper.h" -#import "ios/chrome/browser/store_kit/store_kit_tab_helper.h" -#include "ios/chrome/browser/sync/ios_chrome_synced_tab_delegate.h" #import "ios/chrome/browser/tabs/legacy_tab_helper.h" #import "ios/chrome/browser/tabs/tab_delegate.h" #import "ios/chrome/browser/tabs/tab_dialog_delegate.h" #import "ios/chrome/browser/tabs/tab_headers_delegate.h" +#import "ios/chrome/browser/tabs/tab_helper_util.h" #import "ios/chrome/browser/tabs/tab_model.h" #import "ios/chrome/browser/tabs/tab_private.h" #import "ios/chrome/browser/tabs/tab_snapshotting_delegate.h" @@ -111,12 +104,9 @@ #import "ios/chrome/browser/ui/sad_tab/sad_tab_view.h" #include "ios/chrome/browser/ui/ui_util.h" #import "ios/chrome/browser/web/auto_reload_bridge.h" -#import "ios/chrome/browser/web/blocked_popup_tab_helper.h" #import "ios/chrome/browser/web/external_app_launcher.h" -#include "ios/chrome/browser/web/network_activity_indicator_tab_helper.h" #import "ios/chrome/browser/web/passkit_dialog_provider.h" #include "ios/chrome/browser/web/print_observer.h" -#import "ios/chrome/browser/web/repost_form_tab_helper.h" #import "ios/chrome/browser/xcallback_parameters.h" #include "ios/chrome/grit/ios_strings.h" #include "ios/public/provider/chrome/browser/chrome_browser_provider.h" @@ -547,35 +537,11 @@ [self initNativeAppNavigationController]; if (attachTabHelpers) { - // IOSChromeSessionTabHelper comes first because it sets up the tab ID, - // and other helpers may rely on that. - IOSChromeSessionTabHelper::CreateForWebState(self.webState); - - NetworkActivityIndicatorTabHelper::CreateForWebState(self.webState, - self.tabId); - IOSChromeSyncedTabDelegate::CreateForWebState(self.webState); - InfoBarManagerImpl::CreateForWebState(self.webState); - IOSSecurityStateTabHelper::CreateForWebState(self.webState); - RepostFormTabHelper::CreateForWebState(self.webState); - BlockedPopupTabHelper::CreateForWebState(self.webState); - FindTabHelper::CreateForWebState(self.webState, self); - StoreKitTabHelper::CreateForWebState(self.webState); - - if (reading_list::switches::IsReadingListEnabled()) { - ReadingListModel* model = - ReadingListModelFactory::GetForBrowserState(browserState_); - ReadingListWebStateObserver::FromWebState(self.webState, model); - } + AttachTabHelpers(self.webState); tabInfoBarObserver_.reset(new TabInfoBarObserver(self)); tabInfoBarObserver_->SetShouldObserveInfoBarManager(true); - if (AccountConsistencyService* account_consistency_service = - ios::AccountConsistencyServiceFactory::GetForBrowserState( - browserState_)) { - account_consistency_service->SetWebStateHandler(self.webState, self); - } - ChromeIOSTranslateClient::CreateForWebState(self.webState); if (experimental_flags::IsAutoReloadEnabled()) { autoReloadBridge_.reset([[AutoReloadBridge alloc] initWithTab:self]); } @@ -600,22 +566,6 @@ initWithWebState:self.webState providers:[self accessoryViewProviders]]); - ios::ChromeBrowserState* original_browser_state = - ios::ChromeBrowserState::FromBrowserState( - self.webState->GetBrowserState()) - ->GetOriginalChromeBrowserState(); - favicon::WebFaviconDriver::CreateForWebState( - self.webState, - ios::FaviconServiceFactory::GetForBrowserState( - original_browser_state, ServiceAccessType::IMPLICIT_ACCESS), - ios::HistoryServiceFactory::GetForBrowserState( - original_browser_state, ServiceAccessType::IMPLICIT_ACCESS), - ios::BookmarkModelFactory::GetForBrowserState( - original_browser_state)); - history::WebStateTopSitesObserver::CreateForWebState( - self.webState, - ios::TopSitesFactory::GetForBrowserState(original_browser_state) - .get()); [self setShouldObserveFaviconChanges:YES]; if (parentModel && parentModel.syncedWindowDelegate) { @@ -630,9 +580,6 @@ initWithWebState:self.webState delegate:self]); } - - // Allow the embedder to attach tab helpers. - ios::GetChromeBrowserProvider()->AttachTabHelpers(self.webState, self); } [[NSNotificationCenter defaultCenter] @@ -661,6 +608,10 @@ return providers; } +- (id<FindInPageControllerDelegate>)findInPageControllerDelegate { + return self; +} + + (Tab*)preloadingTabWithBrowserState:(ios::ChromeBrowserState*)browserState url:(const GURL&)URL referrer:(const web::Referrer&)referrer @@ -1225,6 +1176,11 @@ // Reset association with the webController. [self.webController setDelegate:nil]; + webStateImpl_->ClearTransientContentView(); + // Terminate the network activity before notifying the parent model, because + // the parent model may initiate the request context destruction. + [self terminateNetworkActivity]; + // Cancel any queued dialogs. [self.dialogDelegate cancelDialogForTab:self];
diff --git a/ios/chrome/browser/tabs/tab_helper_util.h b/ios/chrome/browser/tabs/tab_helper_util.h new file mode 100644 index 0000000..a2d89f4 --- /dev/null +++ b/ios/chrome/browser/tabs/tab_helper_util.h
@@ -0,0 +1,15 @@ +// 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_TABS_TAB_HELPER_UTIL_H_ +#define IOS_CHROME_BROWSER_TABS_TAB_HELPER_UTIL_H_ + +namespace web { +class WebState; +} + +// Attaches tab helpers to WebState. +void AttachTabHelpers(web::WebState* web_state); + +#endif // IOS_CHROME_BROWSER_TABS_TAB_HELPER_UTIL_H_
diff --git a/ios/chrome/browser/tabs/tab_helper_util.mm b/ios/chrome/browser/tabs/tab_helper_util.mm new file mode 100644 index 0000000..4d54930 --- /dev/null +++ b/ios/chrome/browser/tabs/tab_helper_util.mm
@@ -0,0 +1,87 @@ +// 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/tabs/tab_helper_util.h" + +#if !defined(__has_feature) || !__has_feature(objc_arc) +#error "This file requires ARC support." +#endif + +#import "components/favicon/ios/web_favicon_driver.h" +#include "components/history/core/browser/top_sites.h" +#import "components/history/ios/browser/web_state_top_sites_observer.h" +#include "components/keyed_service/core/service_access_type.h" +#include "components/reading_list/core/reading_list_switches.h" +#import "components/signin/ios/browser/account_consistency_service.h" +#include "ios/chrome/browser/bookmarks/bookmark_model_factory.h" +#include "ios/chrome/browser/browser_state/chrome_browser_state.h" +#include "ios/chrome/browser/favicon/favicon_service_factory.h" +#import "ios/chrome/browser/find_in_page/find_tab_helper.h" +#include "ios/chrome/browser/history/history_service_factory.h" +#include "ios/chrome/browser/history/top_sites_factory.h" +#import "ios/chrome/browser/infobars/infobar_manager_impl.h" +#include "ios/chrome/browser/reading_list/reading_list_model_factory.h" +#import "ios/chrome/browser/reading_list/reading_list_web_state_observer.h" +#import "ios/chrome/browser/sessions/ios_chrome_session_tab_helper.h" +#import "ios/chrome/browser/signin/account_consistency_service_factory.h" +#import "ios/chrome/browser/ssl/ios_security_state_tab_helper.h" +#import "ios/chrome/browser/store_kit/store_kit_tab_helper.h" +#import "ios/chrome/browser/sync/ios_chrome_synced_tab_delegate.h" +#import "ios/chrome/browser/tabs/legacy_tab_helper.h" +#import "ios/chrome/browser/tabs/tab.h" +#import "ios/chrome/browser/translate/chrome_ios_translate_client.h" +#import "ios/chrome/browser/web/blocked_popup_tab_helper.h" +#import "ios/chrome/browser/web/network_activity_indicator_tab_helper.h" +#import "ios/chrome/browser/web/repost_form_tab_helper.h" +#import "ios/public/provider/chrome/browser/chrome_browser_provider.h" +#import "ios/web/public/web_state/web_state.h" + +void AttachTabHelpers(web::WebState* web_state) { + Tab* tab = LegacyTabHelper::GetTabForWebState(web_state); + + ios::ChromeBrowserState* browser_state = + ios::ChromeBrowserState::FromBrowserState(web_state->GetBrowserState()); + + // IOSChromeSessionTabHelper comes first because it sets up the tab ID, + // and other helpers may rely on that. + IOSChromeSessionTabHelper::CreateForWebState(web_state); + + NetworkActivityIndicatorTabHelper::CreateForWebState(web_state, tab.tabId); + IOSChromeSyncedTabDelegate::CreateForWebState(web_state); + InfoBarManagerImpl::CreateForWebState(web_state); + IOSSecurityStateTabHelper::CreateForWebState(web_state); + RepostFormTabHelper::CreateForWebState(web_state); + BlockedPopupTabHelper::CreateForWebState(web_state); + FindTabHelper::CreateForWebState(web_state, tab.findInPageControllerDelegate); + StoreKitTabHelper::CreateForWebState(web_state); + + if (reading_list::switches::IsReadingListEnabled()) { + ReadingListModel* model = + ReadingListModelFactory::GetForBrowserState(browser_state); + ReadingListWebStateObserver::FromWebState(web_state, model); + } + + if (AccountConsistencyService* account_consistency_service = + ios::AccountConsistencyServiceFactory::GetForBrowserState( + browser_state)) { + account_consistency_service->SetWebStateHandler(web_state, tab); + } + ChromeIOSTranslateClient::CreateForWebState(web_state); + + ios::ChromeBrowserState* original_browser_state = + browser_state->GetOriginalChromeBrowserState(); + favicon::WebFaviconDriver::CreateForWebState( + web_state, + ios::FaviconServiceFactory::GetForBrowserState( + original_browser_state, ServiceAccessType::IMPLICIT_ACCESS), + ios::HistoryServiceFactory::GetForBrowserState( + original_browser_state, ServiceAccessType::IMPLICIT_ACCESS), + ios::BookmarkModelFactory::GetForBrowserState(original_browser_state)); + history::WebStateTopSitesObserver::CreateForWebState( + web_state, + ios::TopSitesFactory::GetForBrowserState(original_browser_state).get()); + + // Allow the embedder to attach tab helpers. + ios::GetChromeBrowserProvider()->AttachTabHelpers(web_state, tab); +}
diff --git a/ios/chrome/browser/ui/authentication/OWNERS b/ios/chrome/browser/ui/authentication/OWNERS index f5e9e65..d45210b 100644 --- a/ios/chrome/browser/ui/authentication/OWNERS +++ b/ios/chrome/browser/ui/authentication/OWNERS
@@ -1,2 +1,4 @@ bzanotti@chromium.org msarda@chromium.org + +# COMPONENT: Services>SignIn
diff --git a/ios/chrome/browser/ui/content_suggestions/BUILD.gn b/ios/chrome/browser/ui/content_suggestions/BUILD.gn index 184ac543..0e274b4 100644 --- a/ios/chrome/browser/ui/content_suggestions/BUILD.gn +++ b/ios/chrome/browser/ui/content_suggestions/BUILD.gn
@@ -22,6 +22,8 @@ "content_suggestions_favicon_internal_cell.mm", "content_suggestions_favicon_item.h", "content_suggestions_favicon_item.mm", + "content_suggestions_footer_item.h", + "content_suggestions_footer_item.mm", "content_suggestions_image_fetcher.h", "content_suggestions_section_information.h", "content_suggestions_section_information.mm", @@ -58,6 +60,7 @@ "content_suggestions_article_item_unittest.mm", "content_suggestions_expandable_item_unittest.mm", "content_suggestions_favicon_item_unittest.mm", + "content_suggestions_footer_item_unittest.mm", "content_suggestions_stack_item_unittest.mm", "content_suggestions_text_item_unittest.mm", ]
diff --git a/ios/chrome/browser/ui/content_suggestions/content_suggestions_collection_updater.mm b/ios/chrome/browser/ui/content_suggestions/content_suggestions_collection_updater.mm index 13cb713..9bce876 100644 --- a/ios/chrome/browser/ui/content_suggestions/content_suggestions_collection_updater.mm +++ b/ios/chrome/browser/ui/content_suggestions/content_suggestions_collection_updater.mm
@@ -123,8 +123,19 @@ #pragma mark - ContentSuggestionsDataSink -- (void)dataAvailable { - [self reloadAllData]; +- (void)dataAvailableForSection: + (ContentSuggestionsSectionInformation*)sectionInfo { + SectionIdentifier sectionIdentifier = SectionIdentifierForInfo(sectionInfo); + + CollectionViewModel* model = + self.collectionViewController.collectionViewModel; + if ([model hasSectionForSectionIdentifier:sectionIdentifier] && + [model itemsInSectionWithIdentifier:sectionIdentifier].count > 0) { + // Do not dismiss the presented items. + return; + } + + [self addSuggestions:[self.dataSource suggestionsForSection:sectionInfo]]; } - (void)clearSuggestion:(ContentSuggestionIdentifier*)suggestionIdentifier { @@ -159,33 +170,7 @@ - (void)reloadAllData { [self resetModels]; - CollectionViewModel* model = - self.collectionViewController.collectionViewModel; - - NSArray<ContentSuggestion*>* suggestions = [self.dataSource allSuggestions]; - - for (ContentSuggestion* suggestion in suggestions) { - NSInteger sectionIdentifier = - [self addSectionIfNeeded:suggestion.suggestionIdentifier.sectionInfo]; - ContentSuggestionsArticleItem* articleItem = - [[ContentSuggestionsArticleItem alloc] - initWithType:ItemTypeForContentSuggestionType(suggestion.type) - title:suggestion.title - subtitle:suggestion.text - delegate:self - url:suggestion.url]; - - articleItem.publisher = suggestion.publisher; - articleItem.publishDate = suggestion.publishDate; - - articleItem.suggestionIdentifier = suggestion.suggestionIdentifier; - - [model addItem:articleItem toSectionWithIdentifier:sectionIdentifier]; - } - - if ([self.collectionViewController isViewLoaded]) { - [self.collectionViewController.collectionView reloadData]; - } + [self addSuggestions:[self.dataSource allSuggestions]]; } - (void)clearSection:(ContentSuggestionsSectionInformation*)sectionInfo { @@ -243,6 +228,39 @@ #pragma mark - Private methods +// Add the |suggestions| to the model and reload the data. +- (void)addSuggestions:(NSArray<ContentSuggestion*>*)suggestions { + if (suggestions.count == 0) { + return; + } + + CollectionViewModel* model = + self.collectionViewController.collectionViewModel; + + for (ContentSuggestion* suggestion in suggestions) { + NSInteger sectionIdentifier = + [self addSectionIfNeeded:suggestion.suggestionIdentifier.sectionInfo]; + ContentSuggestionsArticleItem* articleItem = + [[ContentSuggestionsArticleItem alloc] + initWithType:ItemTypeForContentSuggestionType(suggestion.type) + title:suggestion.title + subtitle:suggestion.text + delegate:self + url:suggestion.url]; + + articleItem.publisher = suggestion.publisher; + articleItem.publishDate = suggestion.publishDate; + + articleItem.suggestionIdentifier = suggestion.suggestionIdentifier; + + [model addItem:articleItem toSectionWithIdentifier:sectionIdentifier]; + } + + if ([self.collectionViewController isViewLoaded]) { + [self.collectionViewController.collectionView reloadData]; + } +} + - (NSInteger)addSectionIfNeeded: (ContentSuggestionsSectionInformation*)sectionInformation { NSInteger sectionIdentifier = SectionIdentifierForInfo(sectionInformation);
diff --git a/ios/chrome/browser/ui/content_suggestions/content_suggestions_data_sink.h b/ios/chrome/browser/ui/content_suggestions/content_suggestions_data_sink.h index 7c16378..b34ba83 100644 --- a/ios/chrome/browser/ui/content_suggestions/content_suggestions_data_sink.h +++ b/ios/chrome/browser/ui/content_suggestions/content_suggestions_data_sink.h
@@ -12,8 +12,10 @@ // to be pulled. @protocol ContentSuggestionsDataSink -// Notifies the Data Sink that new data is available. -- (void)dataAvailable; +// Notifies the Data Sink that new data is available for the section identified +// by |sectionInfo|. +- (void)dataAvailableForSection: + (ContentSuggestionsSectionInformation*)sectionInfo; // The suggestion associated with |suggestionIdentifier| has been invalidated by // the backend data source and should be cleared now. This is why this method is
diff --git a/ios/chrome/browser/ui/content_suggestions/content_suggestions_data_source.h b/ios/chrome/browser/ui/content_suggestions/content_suggestions_data_source.h index b02a64a..fc7a26e 100644 --- a/ios/chrome/browser/ui/content_suggestions/content_suggestions_data_source.h +++ b/ios/chrome/browser/ui/content_suggestions/content_suggestions_data_source.h
@@ -6,6 +6,7 @@ #define IOS_CHROME_BROWSER_UI_CONTENT_SUGGESTIONS_CONTENT_SUGGESTIONS_DATA_SOURCE_H_ @class ContentSuggestion; +@class ContentSuggestionsSectionInformation; @protocol ContentSuggestionsDataSink; @protocol ContentSuggestionsImageFetcher; @@ -14,14 +15,18 @@ @protocol ContentSuggestionsDataSource // The data sink that will be notified when the data change. -@property(nonatomic, weak) id<ContentSuggestionsDataSink> dataSink; +@property(nonatomic, nullable, weak) id<ContentSuggestionsDataSink> dataSink; -// Returns all the data currently available. Returns an empty array if nothing -// is available. -- (NSArray<ContentSuggestion*>*)allSuggestions; +// Returns all the data currently available. +- (nonnull NSArray<ContentSuggestion*>*)allSuggestions; + +// Returns the data currently available for the section identified by +// |sectionInfo|. +- (nonnull NSArray<ContentSuggestion*>*)suggestionsForSection: + (nonnull ContentSuggestionsSectionInformation*)sectionInfo; // Returns an image updater for the suggestions provided by this data source. -- (id<ContentSuggestionsImageFetcher>)imageFetcher; +- (nullable id<ContentSuggestionsImageFetcher>)imageFetcher; @end
diff --git a/ios/chrome/browser/ui/content_suggestions/content_suggestions_footer_item.h b/ios/chrome/browser/ui/content_suggestions/content_suggestions_footer_item.h new file mode 100644 index 0000000..a5e3b5e --- /dev/null +++ b/ios/chrome/browser/ui/content_suggestions/content_suggestions_footer_item.h
@@ -0,0 +1,34 @@ +// 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_UI_CONTENT_SUGGESTIONS_CONTENT_SUGGESTIONS_FOOTER_ITEM_H_ +#define IOS_CHROME_BROWSER_UI_CONTENT_SUGGESTIONS_CONTENT_SUGGESTIONS_FOOTER_ITEM_H_ + +#import "base/ios/block_types.h" +#import "ios/chrome/browser/ui/collection_view/cells/collection_view_item.h" +#import "ios/chrome/browser/ui/content_suggestions/content_suggestion_identifier.h" +#import "ios/third_party/material_components_ios/src/components/CollectionCells/src/MaterialCollectionCells.h" + +// Item for a footer of a Content Suggestions section. +@interface ContentSuggestionsFooterItem + : CollectionViewItem<ContentSuggestionIdentification> + +// Initialize a footer with a button taking all the space, with a |title| and a +// |block| run when tapped. +- (instancetype)initWithType:(NSInteger)type + title:(NSString*)title + block:(ProceduralBlock)block NS_DESIGNATED_INITIALIZER; + +- (instancetype)initWithType:(NSInteger)type NS_UNAVAILABLE; + +@end + +// Corresponding cell for a Content Suggestions' section footer. +@interface ContentSuggestionsFooterCell : MDCCollectionViewCell + +@property(nonatomic, readonly, strong) UIButton* button; + +@end + +#endif // IOS_CHROME_BROWSER_UI_CONTENT_SUGGESTIONS_CONTENT_SUGGESTIONS_FOOTER_ITEM_H_
diff --git a/ios/chrome/browser/ui/content_suggestions/content_suggestions_footer_item.mm b/ios/chrome/browser/ui/content_suggestions/content_suggestions_footer_item.mm new file mode 100644 index 0000000..7f37c499 --- /dev/null +++ b/ios/chrome/browser/ui/content_suggestions/content_suggestions_footer_item.mm
@@ -0,0 +1,89 @@ +// 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/ui/content_suggestions/content_suggestions_footer_item.h" + +#import "ios/chrome/browser/ui/uikit_ui_util.h" + +#if !defined(__has_feature) || !__has_feature(objc_arc) +#error "This file requires ARC support." +#endif + +namespace { +const CGFloat kMinimalCellHeight = 44; +} + +#pragma mark - ContentSuggestionsFooterItem + +@interface ContentSuggestionsFooterItem () + +@property(nonatomic, copy) NSString* title; +@property(nonatomic, copy) ProceduralBlock block; + +@end + +@implementation ContentSuggestionsFooterItem + +@synthesize title = _title; +@synthesize block = _block; +@synthesize suggestionIdentifier = _suggestionIdentifier; + +- (instancetype)initWithType:(NSInteger)type + title:(NSString*)title + block:(ProceduralBlock)block { + self = [super initWithType:type]; + if (self) { + self.cellClass = [ContentSuggestionsFooterCell class]; + _title = [title copy]; + _block = [block copy]; + } + return self; +} + +- (void)configureCell:(ContentSuggestionsFooterCell*)cell { + [super configureCell:cell]; + [cell.button setTitle:self.title forState:UIControlStateNormal]; + [cell.button addTarget:self + action:@selector(executeBlock) + forControlEvents:UIControlEventTouchUpInside]; +} + +#pragma mark - Private + +// Executes the |_block| if not nil. +- (void)executeBlock { + if (self.block) { + self.block(); + } +} + +@end + +#pragma mark - ContentSuggestionsFooterCell + +@implementation ContentSuggestionsFooterCell + +@synthesize button = _button; + +- (instancetype)initWithFrame:(CGRect)frame { + self = [super initWithFrame:frame]; + if (self) { + _button = [UIButton buttonWithType:UIButtonTypeSystem]; + _button.translatesAutoresizingMaskIntoConstraints = NO; + [self.contentView addSubview:_button]; + [_button.heightAnchor + constraintGreaterThanOrEqualToConstant:kMinimalCellHeight] + .active = YES; + AddSameSizeConstraint(self.contentView, _button); + } + return self; +} + +- (void)prepareForReuse { + [self.button removeTarget:nil + action:NULL + forControlEvents:UIControlEventAllEvents]; +} + +@end
diff --git a/ios/chrome/browser/ui/content_suggestions/content_suggestions_footer_item_unittest.mm b/ios/chrome/browser/ui/content_suggestions/content_suggestions_footer_item_unittest.mm new file mode 100644 index 0000000..f26c69b --- /dev/null +++ b/ios/chrome/browser/ui/content_suggestions/content_suggestions_footer_item_unittest.mm
@@ -0,0 +1,64 @@ +// 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/ui/content_suggestions/content_suggestions_footer_item.h" + +#include "testing/gtest/include/gtest/gtest.h" +#import "third_party/ocmock/OCMock/OCMock.h" +#import "third_party/ocmock/gtest_support.h" + +#if !defined(__has_feature) || !__has_feature(objc_arc) +#error "This file requires ARC support." +#endif + +namespace { + +// Tests that configureCell: sets the title of the button and the action. +TEST(ContentSuggestionsFooterItemTest, CellIsConfigured) { + // Setup. + NSString* title = @"testTitle"; + __block BOOL hasBeenCalled = NO; + ProceduralBlock block = ^void() { + hasBeenCalled = YES; + }; + ContentSuggestionsFooterItem* item = + [[ContentSuggestionsFooterItem alloc] initWithType:0 + title:title + block:block]; + ContentSuggestionsFooterCell* cell = [[[item cellClass] alloc] init]; + ASSERT_EQ([ContentSuggestionsFooterCell class], [cell class]); + ASSERT_EQ(nil, [cell.button titleForState:UIControlStateNormal]); + + // Action. + [item configureCell:cell]; + + // Tests. + ASSERT_EQ(title, [cell.button titleForState:UIControlStateNormal]); + ASSERT_FALSE(hasBeenCalled); + [cell.button sendActionsForControlEvents:UIControlEventTouchUpInside]; + ASSERT_TRUE(hasBeenCalled); +} + +// Tests that when the cell is reused the button's block is removed. +TEST(ContentSuggestionsFooterItemTest, ReuseCell) { + __block BOOL hasBeenCalled = NO; + ProceduralBlock block = ^void() { + hasBeenCalled = YES; + }; + ContentSuggestionsFooterItem* item = + [[ContentSuggestionsFooterItem alloc] initWithType:0 + title:@"" + block:block]; + ContentSuggestionsFooterCell* cell = [[[item cellClass] alloc] init]; + [item configureCell:cell]; + + // Action. + [cell prepareForReuse]; + + // Test. + ASSERT_FALSE(hasBeenCalled); + [cell.button sendActionsForControlEvents:UIControlEventTouchUpInside]; + ASSERT_FALSE(hasBeenCalled); +} +}
diff --git a/ios/chrome/browser/ui/reading_list/BUILD.gn b/ios/chrome/browser/ui/reading_list/BUILD.gn index 6f99991..fd7fe3b9 100644 --- a/ios/chrome/browser/ui/reading_list/BUILD.gn +++ b/ios/chrome/browser/ui/reading_list/BUILD.gn
@@ -134,6 +134,7 @@ "//base", "//components/reading_list/ios", "//ios/chrome/app/strings", + "//ios/chrome/app/theme:theme_grit", "//ios/chrome/browser/reading_list", "//ios/chrome/browser/ui:ui", "//ios/chrome/browser/ui/commands",
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 82e6ba61..02f700d9d 100644 --- a/ios/chrome/browser/ui/reading_list/reading_list_egtest.mm +++ b/ios/chrome/browser/ui/reading_list/reading_list_egtest.mm
@@ -7,6 +7,7 @@ #import <XCTest/XCTest.h> #include "base/strings/sys_string_conversions.h" +#include "base/strings/utf_string_conversions.h" #include "components/reading_list/ios/reading_list_model.h" #include "ios/chrome/browser/reading_list/reading_list_model_factory.h" #import "ios/chrome/browser/ui/commands/generic_chrome_command.h" @@ -14,6 +15,7 @@ #import "ios/chrome/browser/ui/reading_list/reading_list_collection_view_item.h" #include "ios/chrome/browser/ui/ui_util.h" #include "ios/chrome/grit/ios_strings.h" +#include "ios/chrome/grit/ios_theme_resources.h" #import "ios/chrome/test/app/chrome_test_util.h" #import "ios/chrome/test/earl_grey/accessibility_util.h" #import "ios/chrome/test/earl_grey/chrome_earl_grey.h" @@ -221,28 +223,29 @@ // 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. - (void)testSavingToReadingList { - // TODO(crbug.com/700001): This test is failing on iPad. - if (IsIPadIdiom()) { - EARL_GREY_TEST_DISABLED(@"Disabled for iPad"); - } - - // Setup a server serving a page at http://potato with the title "tomato". + // Setup a server serving a distillable page at http://potato with the title + // "tomato", and a non distillable page at http://beans std::map<GURL, std::string> responses; - const GURL regularPageURL = web::test::HttpServer::MakeUrl("http://potato"); + const GURL distillablePageURL = + web::test::HttpServer::MakeUrl("http://potato"); + std::string pageTitle = "tomato"; std::string contentToRemove = "Text that distillation should remove."; std::string contentToKeep = "Text that distillation should keep."; - // Distillation only occurs on pages that are not too small. - responses[regularPageURL] = "<html><head><title>tomato</title></head>" + - contentToRemove * 20 + "<article>" + - contentToKeep * 20 + "</article>" + - contentToRemove * 20 + "</html>"; + responses[distillablePageURL] = + "<html><head><title>" + pageTitle + "</title></head>" + + contentToRemove * 20 + "<article>" + contentToKeep * 20 + "</article>" + + contentToRemove * 20 + "</html>"; + const GURL nonDistillablePageURL = + web::test::HttpServer::MakeUrl("http://beans"); + responses[nonDistillablePageURL] = + "<html><head><title>greens</title></head></html>"; web::test::SetUpSimpleHttpServer(responses); // Open http://potato - [ChromeEarlGrey loadURL:regularPageURL]; + [ChromeEarlGrey loadURL:distillablePageURL]; // Add the page to the reading list. [ChromeEarlGreyUI openShareMenu]; @@ -275,15 +278,35 @@ waitForDisappearance), @"Snackbar did not disappear."); - // Verify that a page with the title "tomato" is present in the reading list. - OpenReadingList(); - AssertEntryVisible("tomato"); + // Navigate to http://beans + [ChromeEarlGrey loadURL:nonDistillablePageURL]; + [ChromeEarlGrey waitForPageToFinishLoading]; - // Long press the "tomato" entry, and open it offline. - LongPressEntry("tomato"); + // Verify that an entry with the correct title is present in the reading list. + OpenReadingList(); + AssertEntryVisible(pageTitle); + + // Long press the entry, and open it offline. + LongPressEntry(pageTitle); TapButtonWithID(IDS_IOS_READING_LIST_CONTENT_CONTEXT_OFFLINE); - // TODO(crbug.com/699110): Verify that distilled content is shown. + // Verify that the correct distilled content is shown. + [[EarlGrey + selectElementWithMatcher:chrome_test_util::StaticHtmlViewContainingText( + base::SysUTF8ToNSString( + contentToKeep.c_str()))] + assertWithMatcher:grey_notNil()]; + [[EarlGrey + selectElementWithMatcher:chrome_test_util::StaticHtmlViewContainingText( + base::SysUTF8ToNSString( + contentToRemove.c_str()))] + assertWithMatcher:grey_nil()]; + + // Verify that the Omnibox' Info Bubble uses the offline icon. + [[EarlGrey + selectElementWithMatcher:chrome_test_util::PageSecurityInfoButton()] + assertWithMatcher:chrome_test_util::ButtonWithImage( + IDR_IOS_OMNIBOX_OFFLINE)]; // Tap the Omnibox' Info Bubble to open the Page Info. [[EarlGrey @@ -296,6 +319,10 @@ IDS_IOS_PAGE_INFO_OFFLINE_TITLE); [[EarlGrey selectElementWithMatcher:pageInfoTitleMatcher] assertWithMatcher:grey_notNil()]; + + // Verify that the webState's title is correct. + XCTAssertTrue(chrome_test_util::GetCurrentWebState()->GetTitle() == + base::ASCIIToUTF16(pageTitle.c_str())); } // Tests that only the "Edit" button is showing when not editing.
diff --git a/ios/chrome/browser/ui/settings/BUILD.gn b/ios/chrome/browser/ui/settings/BUILD.gn index e7d6d7d..4c0b09aa 100644 --- a/ios/chrome/browser/ui/settings/BUILD.gn +++ b/ios/chrome/browser/ui/settings/BUILD.gn
@@ -162,6 +162,7 @@ "//ios/chrome/browser/ui/collection_view", "//ios/chrome/browser/ui/colors", "//ios/chrome/browser/ui/commands", + "//ios/chrome/browser/ui/content_suggestions", "//ios/chrome/browser/ui/contextual_search", "//ios/chrome/browser/ui/icons", "//ios/chrome/browser/ui/keyboard",
diff --git a/ios/chrome/browser/ui/settings/autofill_credit_card_edit_collection_view_controller.mm b/ios/chrome/browser/ui/settings/autofill_credit_card_edit_collection_view_controller.mm index 3c4ad8a..ab1f966 100644 --- a/ios/chrome/browser/ui/settings/autofill_credit_card_edit_collection_view_controller.mm +++ b/ios/chrome/browser/ui/settings/autofill_credit_card_edit_collection_view_controller.mm
@@ -160,7 +160,8 @@ : base::SysUTF16ToNSString(_creditCard.LastFourDigits()); cardNumberitem.textFieldEnabled = isEditing; cardNumberitem.autofillType = autofill::CREDIT_CARD_NUMBER; - [self setCardTypeIconForItem:cardNumberitem]; + cardNumberitem.cardTypeIcon = + [self cardTypeIconFromCardNumber:cardNumberitem.textFieldValue]; [model addItem:cardNumberitem toSectionWithIdentifier:SectionIdentifierFields]; @@ -200,22 +201,34 @@ #pragma mark - UITextFieldDelegate -- (void)textFieldDidEndEditing:(UITextField*)textField { - NSIndexPath* cellPath = [self indexPathForCurrentTextField]; - DCHECK(cellPath); - NSIndexPath* itemPath = [NSIndexPath indexPathForItem:[cellPath row] - inSection:[cellPath section]]; +// This method is called as the text is being typed in, pasted, or deleted. Asks +// the delegate if the text should be changed. Should always return YES. During +// typing/pasting text, |newText| contains one or more new characters. When user +// deletes text, |newText| is empty. |range| is the range of characters to be +// replaced. +- (BOOL)textField:(UITextField*)textField + shouldChangeCharactersInRange:(NSRange)range + replacementString:(NSString*)newText { + // Find the respective item for the text field. + NSIndexPath* indexPath = [self indexPathForCurrentTextField]; + DCHECK(indexPath); AutofillEditItem* item = base::mac::ObjCCastStrict<AutofillEditItem>( - [self.collectionViewModel itemAtIndexPath:itemPath]); + [self.collectionViewModel itemAtIndexPath:indexPath]); - if (item.autofillType == autofill::CREDIT_CARD_NUMBER) - [self setCardTypeIconForItem:item]; + // If the user is typing in the credit card number field, update the card type + // icon (e.g. "Visa") to reflect the number being typed. + if (item.autofillType == autofill::CREDIT_CARD_NUMBER) { + // Obtain the text being typed. + NSString* updatedText = + [textField.text stringByReplacingCharactersInRange:range + withString:newText]; + item.cardTypeIcon = [self cardTypeIconFromCardNumber:updatedText]; + // Update the cell. + [self reconfigureCellsForItems:@[ item ] + inSectionWithIdentifier:SectionIdentifierFields]; + } - // Update the cell. - [self reconfigureCellsForItems:@[ item ] - inSectionWithIdentifier:SectionIdentifierFields]; - - [super textFieldDidEndEditing:textField]; + return YES; } #pragma mark - MDCCollectionViewEditingDelegate @@ -297,19 +310,19 @@ #pragma mark - Helper Methods -- (void)setCardTypeIconForItem:(AutofillEditItem*)item { +- (UIImage*)cardTypeIconFromCardNumber:(NSString*)cardNumber { const char* cardType = autofill::CreditCard::GetCreditCardType( - base::SysNSStringToUTF16(item.textFieldValue)); + base::SysNSStringToUTF16(cardNumber)); if (cardType != autofill::kGenericCard) { int resourceID = autofill::data_util::GetPaymentRequestData(cardType).icon_resource_id; // Resize and set the card type icon. CGFloat dimension = kCardTypeIconDimension; - item.cardTypeIcon = - ResizeImage(NativeImage(resourceID), CGSizeMake(dimension, dimension), - ProjectionMode::kAspectFillNoClipping); + return ResizeImage(NativeImage(resourceID), + CGSizeMake(dimension, dimension), + ProjectionMode::kAspectFillNoClipping); } else { - item.cardTypeIcon = nil; + return nil; } }
diff --git a/ios/chrome/browser/ui/settings/material_cell_catalog_view_controller.mm b/ios/chrome/browser/ui/settings/material_cell_catalog_view_controller.mm index 8448f2c..69b8fca 100644 --- a/ios/chrome/browser/ui/settings/material_cell_catalog_view_controller.mm +++ b/ios/chrome/browser/ui/settings/material_cell_catalog_view_controller.mm
@@ -24,6 +24,8 @@ #import "ios/chrome/browser/ui/collection_view/cells/collection_view_switch_item.h" #import "ios/chrome/browser/ui/collection_view/cells/collection_view_text_item.h" #import "ios/chrome/browser/ui/collection_view/collection_view_model.h" +#import "ios/chrome/browser/ui/content_suggestions/content_suggestions_article_item.h" +#import "ios/chrome/browser/ui/content_suggestions/content_suggestions_footer_item.h" #import "ios/chrome/browser/ui/icons/chrome_icon.h" #import "ios/chrome/browser/ui/settings/cells/account_signin_item.h" #import "ios/chrome/browser/ui/settings/cells/autofill_data_item.h" @@ -51,6 +53,7 @@ SectionIdentifierAccountCell, SectionIdentifierAccountControlCell, SectionIdentifierFooters, + SectionIdentifierContentSuggestionsCell, }; typedef NS_ENUM(NSInteger, ItemType) { @@ -80,6 +83,7 @@ ItemTypeAutofillStorageSwitch, ItemTypeAccountControlDynamicHeight, ItemTypeFooter, + ItemTypeContentSuggestions, }; // Image fixed horizontal size. @@ -302,6 +306,13 @@ [model addItem:[self accountControlItemWithExtraLongText] toSectionWithIdentifier:SectionIdentifierAccountControlCell]; + // Content Suggestions cells. + [model addSectionWithIdentifier:SectionIdentifierContentSuggestionsCell]; + [model addItem:[self contentSuggestionsArticleItem] + toSectionWithIdentifier:SectionIdentifierContentSuggestionsCell]; + [model addItem:[self contentSuggestionsFooterItem] + toSectionWithIdentifier:SectionIdentifierContentSuggestionsCell]; + // Footers. [model addSectionWithIdentifier:SectionIdentifierFooters]; [model addItem:[self shortFooterItem] @@ -344,6 +355,7 @@ CollectionViewItem* item = [self.collectionViewModel itemAtIndexPath:indexPath]; switch (item.type) { + case ItemTypeContentSuggestions: case ItemTypeFooter: case ItemTypeSwitchDynamicHeight: case ItemTypeSwitchSync: @@ -668,4 +680,27 @@ return footerItem; } +- (ContentSuggestionsArticleItem*)contentSuggestionsArticleItem { + ContentSuggestionsArticleItem* articleItem = + [[ContentSuggestionsArticleItem alloc] + initWithType:ItemTypeContentSuggestions + title:@"This is an incredible article, you should read it!" + subtitle:@"Really, this is the best article I have ever seen, it " + @"is mandatory to read it! It describes how to write " + @"the best article." + delegate:nil + url:GURL()]; + articleItem.publisher = @"Top Publisher.com"; + return articleItem; +} + +- (ContentSuggestionsFooterItem*)contentSuggestionsFooterItem { + ContentSuggestionsFooterItem* footerItem = + [[ContentSuggestionsFooterItem alloc] + initWithType:ItemTypeContentSuggestions + title:@"Footer title" + block:nil]; + return footerItem; +} + @end
diff --git a/ios/chrome/browser/ui/settings/settings_egtest.mm b/ios/chrome/browser/ui/settings/settings_egtest.mm index ac39ef9..87f28d3 100644 --- a/ios/chrome/browser/ui/settings/settings_egtest.mm +++ b/ios/chrome/browser/ui/settings/settings_egtest.mm
@@ -9,6 +9,7 @@ #include "base/bind.h" #import "base/mac/bind_objc_block.h" +#include "base/mac/foundation_util.h" #include "base/memory/ptr_util.h" #include "base/strings/sys_string_conversions.h" #include "components/browsing_data/core/pref_names.h" @@ -61,15 +62,8 @@ const char kUrlWithSetCookie[] = "http://foo/set_cookie"; const char kResponse[] = "bar"; const char kResponseWithSetCookie[] = "bar with set cookie"; -const char kNoCookieText[] = "No cookies"; -const char kCookie[] = "a=b"; -const char kJavaScriptGetCookies[] = - "var c = document.cookie ? document.cookie.split(/;\\s*/) : [];" - "if (!c.length) {" - " document.documentElement.innerHTML = 'No cookies!';" - "} else {" - " document.documentElement.innerHTML = 'OK: ' + c.join(',');" - "}"; +NSString* const kCookieName = @"name"; +NSString* const kCookieValue = @"value"; enum MetricsServiceType { kMetrics, @@ -164,29 +158,6 @@ return ButtonWithAccessibilityLabelId(IDS_IOS_PASSWORD_MANAGER_SAVE_BUTTON); } -// Asserts that there is no cookie in current web state. -void AssertNoCookieExists() { - NSError* error = nil; - chrome_test_util::ExecuteJavaScript( - base::SysUTF8ToNSString(kJavaScriptGetCookies), &error); - [[EarlGrey selectElementWithMatcher:chrome_test_util::WebViewContainingText( - kNoCookieText)] - assertWithMatcher:grey_notNil()]; -} - -// Asserts |cookie| exists in current web state. -void AssertCookieExists(const char cookie[]) { - NSError* error = nil; - chrome_test_util::ExecuteJavaScript( - base::SysUTF8ToNSString(kJavaScriptGetCookies), &error); - NSString* const expectedCookieText = - [NSString stringWithFormat:@"OK: %@", base::SysUTF8ToNSString(cookie)]; - [[EarlGrey - selectElementWithMatcher:chrome_test_util::WebViewContainingText( - base::SysNSStringToUTF8(expectedCookieText))] - assertWithMatcher:grey_notNil()]; -} - // Run as a task to check if a certificate has been added to the ChannelIDStore. // Signals the given |semaphore| if the cert was added, or reposts itself // otherwise. @@ -675,8 +646,12 @@ // Creates a map of canned responses and set up the test HTML server. std::map<GURL, std::pair<std::string, std::string>> response; + NSString* cookieForURL = + [NSString stringWithFormat:@"%@=%@", kCookieName, kCookieValue]; + response[web::test::HttpServer::MakeUrl(kUrlWithSetCookie)] = - std::pair<std::string, std::string>(kCookie, kResponseWithSetCookie); + std::pair<std::string, std::string>(base::SysNSStringToUTF8(cookieForURL), + kResponseWithSetCookie); response[web::test::HttpServer::MakeUrl(kUrl)] = std::pair<std::string, std::string>("", kResponse); @@ -687,7 +662,9 @@ [[EarlGrey selectElementWithMatcher:chrome_test_util::WebViewContainingText( kResponse)] assertWithMatcher:grey_notNil()]; - AssertNoCookieExists(); + + NSDictionary* cookies = [ChromeEarlGrey cookies]; + GREYAssertEqual(0U, cookies.count, @"No cookie should be found."); // Visit |kUrlWithSetCookie| to set a cookie and then load |kUrl| to check it // is still set. @@ -700,10 +677,13 @@ kResponse)] assertWithMatcher:grey_notNil()]; - AssertCookieExists(kCookie); + cookies = [ChromeEarlGrey cookies]; + GREYAssertEqualObjects(kCookieValue, cookies[kCookieName], + @"Failed to set cookie."); + GREYAssertEqual(1U, cookies.count, @"Only one cookie should be found."); - // Restore the Clear Browsing Data checkmarks prefs to their default state in - // Teardown. + // Restore the Clear Browsing Data checkmarks prefs to their default state + // in Teardown. [self setTearDownHandler:^{ [self restoreClearBrowsingDataCheckmarksToDefault]; }]; @@ -716,7 +696,10 @@ [[EarlGrey selectElementWithMatcher:chrome_test_util::WebViewContainingText( kResponse)] assertWithMatcher:grey_notNil()]; - AssertNoCookieExists(); + + cookies = [ChromeEarlGrey cookies]; + GREYAssertEqual(0U, cookies.count, @"No cookie should be found."); + chrome_test_util::CloseAllTabs(); }
diff --git a/ios/chrome/browser/ui/sync/OWNERS b/ios/chrome/browser/ui/sync/OWNERS index f5e9e65..a975dee3 100644 --- a/ios/chrome/browser/ui/sync/OWNERS +++ b/ios/chrome/browser/ui/sync/OWNERS
@@ -1,2 +1,4 @@ bzanotti@chromium.org msarda@chromium.org + +# COMPONENT: Services>Sync
diff --git a/ios/chrome/browser/ui/webui/ntp_tiles_internals_ui.cc b/ios/chrome/browser/ui/webui/ntp_tiles_internals_ui.cc index 8c3753a..2f1bb4eb 100644 --- a/ios/chrome/browser/ui/webui/ntp_tiles_internals_ui.cc +++ b/ios/chrome/browser/ui/webui/ntp_tiles_internals_ui.cc
@@ -54,8 +54,7 @@ } bool IOSNTPTilesInternalsMessageHandlerBridge::SupportsNTPTiles() { - auto* state = ios::ChromeBrowserState::FromWebUIIOS(web_ui()); - return state == state->GetOriginalChromeBrowserState(); + return !ios::ChromeBrowserState::FromWebUIIOS(web_ui())->IsOffTheRecord(); } bool IOSNTPTilesInternalsMessageHandlerBridge::DoesSourceExist(
diff --git a/ios/chrome/test/earl_grey/BUILD.gn b/ios/chrome/test/earl_grey/BUILD.gn index 3f1c658..beb0dd3 100644 --- a/ios/chrome/test/earl_grey/BUILD.gn +++ b/ios/chrome/test/earl_grey/BUILD.gn
@@ -175,6 +175,7 @@ "//ios/web:earl_grey_test_support", "//ios/web:test_support", "//ui/base", + "//ui/base:test_support", "//url", ]
diff --git a/ios/chrome/test/earl_grey/chrome_earl_grey.h b/ios/chrome/test/earl_grey/chrome_earl_grey.h index fdacda6..1689743 100644 --- a/ios/chrome/test/earl_grey/chrome_earl_grey.h +++ b/ios/chrome/test/earl_grey/chrome_earl_grey.h
@@ -34,6 +34,13 @@ // Clears browsing history. + (void)clearBrowsingHistory; +#pragma mark - Cookie Utilities + +// Returns cookies as key value pairs, where key is a cookie name and value is a +// cookie value. +// NOTE: this method fails the test if there are errors getting cookies. ++ (NSDictionary*)cookies; + #pragma mark - Navigation Utilities // Loads |URL| in the current WebState with transition of type
diff --git a/ios/chrome/test/earl_grey/chrome_earl_grey.mm b/ios/chrome/test/earl_grey/chrome_earl_grey.mm index ffcfa51..efbd2d3 100644 --- a/ios/chrome/test/earl_grey/chrome_earl_grey.mm +++ b/ios/chrome/test/earl_grey/chrome_earl_grey.mm
@@ -7,6 +7,7 @@ #import <Foundation/Foundation.h> #import <WebKit/WebKit.h> +#include "base/mac/foundation_util.h" #include "base/strings/sys_string_conversions.h" #import "ios/chrome/test/app/chrome_test_util.h" #import "ios/chrome/test/app/history_test_util.h" @@ -66,6 +67,33 @@ [[GREYUIThreadExecutor sharedInstance] drainUntilIdle]; } +#pragma mark - Cookie Utilities + ++ (NSDictionary*)cookies { + NSString* const kGetCookiesScript = + @"document.cookie ? document.cookie.split(/;\\s*/) : [];"; + + // TODO(crbug.com/690057): Remove __unsafe_unretained once all callers of + // |ExecuteJavaScript| are converted to ARC. + NSError* __unsafe_unretained error = nil; + id result = chrome_test_util::ExecuteJavaScript(kGetCookiesScript, &error); + + GREYAssertTrue(result && !error, @"Failed to get cookies."); + + NSArray* nameValuePairs = base::mac::ObjCCastStrict<NSArray>(result); + NSMutableDictionary* cookies = [NSMutableDictionary dictionary]; + for (NSString* nameValuePair in nameValuePairs) { + NSArray* cookieNameValue = [nameValuePair componentsSeparatedByString:@"="]; + GREYAssertEqual(2U, cookieNameValue.count, @"Cookie has invalid format."); + + NSString* cookieName = cookieNameValue[0]; + NSString* cookieValue = cookieNameValue[1]; + cookies[cookieName] = cookieValue; + } + + return cookies; +} + #pragma mark - Navigation Utilities + (void)loadURL:(GURL)URL {
diff --git a/ios/chrome/test/earl_grey/chrome_matchers.h b/ios/chrome/test/earl_grey/chrome_matchers.h index ba8b266b..2f7e4833 100644 --- a/ios/chrome/test/earl_grey/chrome_matchers.h +++ b/ios/chrome/test/earl_grey/chrome_matchers.h
@@ -11,20 +11,24 @@ namespace chrome_test_util { -// Matcher for element with accessbitility label corresponding to |message_id| -// and acessibility trait UIAccessibilityTraitButton. +// Matcher for element with accessibility label corresponding to |message_id| +// and accessibility trait UIAccessibilityTraitButton. id<GREYMatcher> ButtonWithAccessibilityLabelId(int message_id); -// Matcher for element with accessbitility label corresponding to |label| and -// acessibility trait UIAccessibilityTraitButton. +// Matcher for element with accessibility label corresponding to |label| and +// accessibility trait UIAccessibilityTraitButton. id<GREYMatcher> ButtonWithAccessibilityLabel(NSString* label); -// Matcher for element with accessbitility label corresponding to |message_id| -// and acessibility trait UIAccessibilityTraitStaticText. +// Matcher for element with an image corresponding to |image_id| and +// accessibility trait UIAccessibilityTraitButton. +id<GREYMatcher> ButtonWithImage(int image_id); + +// Matcher for element with accessibility label corresponding to |message_id| +// and accessibility trait UIAccessibilityTraitStaticText. id<GREYMatcher> StaticTextWithAccessibilityLabelId(int message_id); -// Matcher for element with accessbitility label corresponding to |label| and -// acessibility trait UIAccessibilityTraitStaticText. +// Matcher for element with accessibility label corresponding to |label| and +// accessibility trait UIAccessibilityTraitStaticText. id<GREYMatcher> StaticTextWithAccessibilityLabel(NSString* label); // Returns matcher for webview containing |text|.
diff --git a/ios/chrome/test/earl_grey/chrome_matchers.mm b/ios/chrome/test/earl_grey/chrome_matchers.mm index 688ed1c0..33f4b7d0 100644 --- a/ios/chrome/test/earl_grey/chrome_matchers.mm +++ b/ios/chrome/test/earl_grey/chrome_matchers.mm
@@ -16,12 +16,14 @@ #import "ios/chrome/browser/ui/omnibox/omnibox_text_field_ios.h" #import "ios/chrome/browser/ui/static_content/static_html_view_controller.h" #import "ios/chrome/browser/ui/toolbar/toolbar_controller.h" +#import "ios/chrome/browser/ui/uikit_ui_util.h" #include "ios/chrome/grit/ios_strings.h" #import "ios/chrome/test/app/chrome_test_util.h" #import "ios/testing/wait_util.h" #import "ios/web/public/block_types.h" #import "ios/web/public/test/earl_grey/web_view_matchers.h" #include "ui/base/l10n/l10n_util.h" +#include "ui/base/test/ios/ui_image_test_utils.h" #if !defined(__has_feature) || !__has_feature(objc_arc) #error "This file requires ARC support." @@ -76,17 +78,17 @@ descriptionBlock:describe]; } -id<GREYMatcher> CollectionViewSwitchIsOn(BOOL isOn) { +id<GREYMatcher> CollectionViewSwitchIsOn(BOOL is_on) { MatchesBlock matches = ^BOOL(id element) { - CollectionViewSwitchCell* switchCell = + CollectionViewSwitchCell* switch_cell = base::mac::ObjCCastStrict<CollectionViewSwitchCell>(element); - UISwitch* switchView = switchCell.switchView; - return (switchView.on && isOn) || (!switchView.on && !isOn); + UISwitch* switch_view = switch_cell.switchView; + return (switch_view.on && is_on) || (!switch_view.on && !is_on); }; DescribeToBlock describe = ^void(id<GREYDescription> description) { NSString* name = [NSString stringWithFormat:@"collectionViewSwitchInState(%@)", - isOn ? @"ON" : @"OFF"]; + is_on ? @"ON" : @"OFF"]; [description appendText:name]; }; return [[GREYElementMatcherBlock alloc] initWithMatchesBlock:matches @@ -107,6 +109,24 @@ l10n_util::GetNSStringWithFixup(message_id)); } +id<GREYMatcher> ButtonWithImage(int image_id) { + UIImage* expected_image = NativeImage(image_id); + MatchesBlock matches = ^BOOL(UIButton* button) { + return ui::test::uiimage_utils::UIImagesAreEqual(expected_image, + [button currentImage]); + }; + NSString* description_string = + [NSString stringWithFormat:@"Images matching %i", image_id]; + DescribeToBlock describe = ^(id<GREYDescription> description) { + [description appendText:description_string]; + }; + id<GREYMatcher> image_matcher = + [[GREYElementMatcherBlock alloc] initWithMatchesBlock:matches + descriptionBlock:describe]; + return grey_allOf(grey_accessibilityTrait(UIAccessibilityTraitButton), + image_matcher, nil); +} + id<GREYMatcher> StaticTextWithAccessibilityLabel(NSString* label) { return grey_allOf(grey_accessibilityLabel(label), grey_accessibilityTrait(UIAccessibilityTraitStaticText), @@ -221,9 +241,9 @@ } id<GREYMatcher> CollectionViewSwitchCell(NSString* accessibilityIdentifier, - BOOL isOn) { + BOOL is_on) { return grey_allOf(grey_accessibilityID(accessibilityIdentifier), - CollectionViewSwitchIsOn(isOn), grey_sufficientlyVisible(), + CollectionViewSwitchIsOn(is_on), grey_sufficientlyVisible(), nil); }
diff --git a/ios/clean/chrome/browser/ui/tab_grid/BUILD.gn b/ios/clean/chrome/browser/ui/tab_grid/BUILD.gn index a197d8f..522ec62e 100644 --- a/ios/clean/chrome/browser/ui/tab_grid/BUILD.gn +++ b/ios/clean/chrome/browser/ui/tab_grid/BUILD.gn
@@ -20,6 +20,7 @@ "//ios/clean/chrome/browser/ui/settings", "//ios/clean/chrome/browser/ui/tab", "//ios/shared/chrome/browser/coordinator_context", + "//ios/shared/chrome/browser/tabs", "//ios/web", "//net", "//ui/base",
diff --git a/ios/clean/chrome/browser/ui/tab_grid/tab_grid_coordinator.mm b/ios/clean/chrome/browser/ui/tab_grid/tab_grid_coordinator.mm index 1b620951..9362a14 100644 --- a/ios/clean/chrome/browser/ui/tab_grid/tab_grid_coordinator.mm +++ b/ios/clean/chrome/browser/ui/tab_grid/tab_grid_coordinator.mm
@@ -21,6 +21,7 @@ #import "ios/clean/chrome/browser/ui/tab/tab_coordinator.h" #import "ios/clean/chrome/browser/ui/tab_grid/tab_grid_view_controller.h" #import "ios/shared/chrome/browser/coordinator_context/coordinator_context.h" +#import "ios/shared/chrome/browser/tabs/web_state_list.h" #import "ios/web/public/navigation_manager.h" #include "ios/web/public/web_state/web_state.h" #import "net/base/mac/url_conversions.h" @@ -33,13 +34,10 @@ @interface TabGridCoordinator ()<TabGridDataSource, SettingsCommands, TabCommands, - TabGridCommands> { - std::vector<std::unique_ptr<web::WebState>> _webStates; - size_t _activeWebStateIndex; -} - + TabGridCommands> @property(nonatomic, strong) TabGridViewController* viewController; @property(nonatomic, weak) SettingsCoordinator* settingsCoordinator; +@property(nonatomic, readonly) WebStateList& webStateList; @end @implementation TabGridCoordinator @@ -55,9 +53,13 @@ web::WebState::CreateParams webStateCreateParams(browser->browser_state()); std::unique_ptr<web::WebState> webState = web::WebState::Create(webStateCreateParams); - _webStates.push_back(std::move(webState)); + self.webStateList.InsertWebState(0, webState.release(), nullptr); } - _activeWebStateIndex = 0; + self.webStateList.ActivateWebStateAt(0); +} + +- (WebStateList&)webStateList { + return self.browser->web_state_list(); } #pragma mark - BrowserCoordinator @@ -80,15 +82,12 @@ #pragma mark - TabGridDataSource -- (NSUInteger)numberOfTabsInTabGrid { - return static_cast<NSUInteger>(_webStates.size()); +- (int)numberOfTabsInTabGrid { + return self.webStateList.count(); } -- (NSString*)titleAtIndex:(NSInteger)index { - size_t i = static_cast<size_t>(index); - DCHECK(i < _webStates.size()); - web::WebState* webState = _webStates[i].get(); - GURL url = webState->GetVisibleURL(); +- (NSString*)titleAtIndex:(int)index { + GURL url = self.webStateList.GetWebStateAt(index)->GetVisibleURL(); NSString* urlText = @"<New Tab>"; if (url.is_valid()) { urlText = base::SysUTF8ToNSString(url.spec()); @@ -96,27 +95,30 @@ return urlText; } -- (NSInteger)indexOfActiveTab { - return static_cast<NSInteger>(_activeWebStateIndex); +- (int)indexOfActiveTab { + return self.webStateList.active_index(); } #pragma mark - TabCommands - (void)showTabAtIndexPath:(NSIndexPath*)indexPath { TabCoordinator* tabCoordinator = [[TabCoordinator alloc] init]; - size_t index = static_cast<size_t>(indexPath.item); - DCHECK(index < _webStates.size()); - tabCoordinator.webState = _webStates[index].get(); + DCHECK_LE(indexPath.item, INT_MAX); + int index = static_cast<int>(indexPath.item); + self.webStateList.ActivateWebStateAt(index); + // PLACEHOLDER: The tab coordinator should be able to get the active webState + // on its own. + tabCoordinator.webState = self.webStateList.GetWebStateAt(index); tabCoordinator.presentationKey = indexPath; [self addChildCoordinator:tabCoordinator]; [tabCoordinator start]; - _activeWebStateIndex = index; } - (void)closeTabAtIndexPath:(NSIndexPath*)indexPath { - size_t index = static_cast<size_t>(indexPath.item); - DCHECK(index < _webStates.size()); - _webStates.erase(_webStates.begin() + index); + DCHECK_LE(indexPath.item, INT_MAX); + int index = static_cast<int>(indexPath.item); + std::unique_ptr<web::WebState> closedWebState( + self.webStateList.DetachWebStateAt(index)); } - (void)createNewTabAtIndexPath:(NSIndexPath*)indexPath { @@ -124,7 +126,8 @@ self.browser->browser_state()); std::unique_ptr<web::WebState> webState = web::WebState::Create(webStateCreateParams); - _webStates.push_back(std::move(webState)); + self.webStateList.InsertWebState(self.webStateList.count(), + webState.release(), nullptr); } #pragma mark - TabGridCommands @@ -157,17 +160,19 @@ #pragma mark - URLOpening - (void)openURL:(NSURL*)URL { + if (self.webStateList.active_index() == WebStateList::kInvalidIndex) { + return; + } [self.overlayCoordinator stop]; [self removeOverlayCoordinator]; - web::WebState* activeWebState = _webStates[_activeWebStateIndex].get(); + web::WebState* activeWebState = self.webStateList.GetActiveWebState(); web::NavigationManager::WebLoadParams params(net::GURLWithNSURL(URL)); params.transition_type = ui::PAGE_TRANSITION_LINK; activeWebState->GetNavigationManager()->LoadURLWithParams(params); if (!self.children.count) { - [self showTabAtIndexPath:[NSIndexPath - indexPathForItem:static_cast<NSUInteger>( - _activeWebStateIndex) - inSection:0]]; + [self + showTabAtIndexPath:[NSIndexPath indexPathForItem:[self indexOfActiveTab] + inSection:0]]; } }
diff --git a/ios/clean/chrome/browser/ui/tab_grid/tab_grid_view_controller.h b/ios/clean/chrome/browser/ui/tab_grid/tab_grid_view_controller.h index 2bc70ab..07cf132 100644 --- a/ios/clean/chrome/browser/ui/tab_grid/tab_grid_view_controller.h +++ b/ios/clean/chrome/browser/ui/tab_grid/tab_grid_view_controller.h
@@ -13,6 +13,8 @@ #import "ios/clean/chrome/browser/ui/animators/zoom_transition_delegate.h" +const int kTabGridDataSourceInvalidIndex = -1; + @protocol SettingsCommands; @protocol TabCommands; @protocol TabGridCommands; @@ -24,13 +26,14 @@ @protocol TabGridDataSource<NSObject> // The number of tabs to be displayed in the grid. -- (NSUInteger)numberOfTabsInTabGrid; +- (int)numberOfTabsInTabGrid; // Title for the tab at |index| in the grid. -- (NSString*)titleAtIndex:(NSInteger)index; +- (NSString*)titleAtIndex:(int)index; -// Index for the active tab. -- (NSInteger)indexOfActiveTab; +// Index for the active tab or kTabGridDataSourceInvalidIndex if there is no +// active tab. +- (int)indexOfActiveTab; @end
diff --git a/ios/clean/chrome/browser/ui/tab_grid/tab_grid_view_controller.mm b/ios/clean/chrome/browser/ui/tab_grid/tab_grid_view_controller.mm index 9ee9700b..4edb8fc 100644 --- a/ios/clean/chrome/browser/ui/tab_grid/tab_grid_view_controller.mm +++ b/ios/clean/chrome/browser/ui/tab_grid/tab_grid_view_controller.mm
@@ -105,7 +105,7 @@ - (NSInteger)collectionView:(UICollectionView*)collectionView numberOfItemsInSection:(NSInteger)section { - NSInteger items = [self.dataSource numberOfTabsInTabGrid]; + int items = [self.dataSource numberOfTabsInTabGrid]; // HACK: Do not make showing noTabsOverlay a side effect of the dataSource // callback. if (items) { @@ -124,7 +124,9 @@ forIndexPath:indexPath]); cell.delegate = self; [cell setSessionType:TabSwitcherSessionType::REGULAR_SESSION]; - [cell setAppearanceForTabTitle:[self.dataSource titleAtIndex:indexPath.item] + DCHECK_LE(indexPath.item, INT_MAX); + int item = static_cast<int>(indexPath.item); + [cell setAppearanceForTabTitle:[self.dataSource titleAtIndex:item] favicon:nil cellSize:CGSizeZero]; [cell setSelected:(indexPath.item == [self.dataSource indexOfActiveTab])]; @@ -162,15 +164,13 @@ } - (void)createNewTab:(id)sender { - // PLACEHOLDER: The new WebStateList data structure will have implications - // on how new tabs are created. NSInteger index = [self.grid numberOfItemsInSection:0]; NSIndexPath* indexPath = [NSIndexPath indexPathForItem:index inSection:0]; auto updateBlock = ^{ // Unselect current selected item. - NSInteger selectedIndex = [self.dataSource indexOfActiveTab]; NSIndexPath* selectedIndexPath = - [NSIndexPath indexPathForItem:selectedIndex inSection:0]; + [NSIndexPath indexPathForItem:[self.dataSource indexOfActiveTab] + inSection:0]; [self.grid reloadItemsAtIndexPaths:@[ selectedIndexPath ]]; // Create and show new tab. @@ -189,10 +189,12 @@ } - (void)cellPressed:(UICollectionViewCell*)cell { - NSInteger selectedIndex = [self.dataSource indexOfActiveTab]; + int selectedIndex = [self.dataSource indexOfActiveTab]; NSIndexPath* newSelectedIndexPath = [self.grid indexPathForCell:cell]; [self.tabCommandHandler showTabAtIndexPath:newSelectedIndexPath]; - if (newSelectedIndexPath.item != selectedIndex) { + if (selectedIndex == kTabGridDataSourceInvalidIndex) { + [self.grid reloadItemsAtIndexPaths:@[ newSelectedIndexPath ]]; + } else if (newSelectedIndexPath.item != selectedIndex) { NSIndexPath* selectedIndexPath = [NSIndexPath indexPathForItem:selectedIndex inSection:0]; [self.grid
diff --git a/ios/public/provider/chrome/browser/signin/OWNERS b/ios/public/provider/chrome/browser/signin/OWNERS index f5e9e65..d45210b 100644 --- a/ios/public/provider/chrome/browser/signin/OWNERS +++ b/ios/public/provider/chrome/browser/signin/OWNERS
@@ -1,2 +1,4 @@ bzanotti@chromium.org msarda@chromium.org + +# COMPONENT: Services>SignIn
diff --git a/ios/showcase/tab_grid/sc_tab_grid_coordinator.mm b/ios/showcase/tab_grid/sc_tab_grid_coordinator.mm index e47bd47b..d9d2e14 100644 --- a/ios/showcase/tab_grid/sc_tab_grid_coordinator.mm +++ b/ios/showcase/tab_grid/sc_tab_grid_coordinator.mm
@@ -40,16 +40,16 @@ #pragma mark - TabGridDataSource -- (NSUInteger)numberOfTabsInTabGrid { +- (int)numberOfTabsInTabGrid { return 3; } -- (NSString*)titleAtIndex:(NSInteger)index { - return [NSString stringWithFormat:@"Tab %" PRIdNS, index]; +- (NSString*)titleAtIndex:(int)index { + return [NSString stringWithFormat:@"Tab %d", index]; } -- (NSInteger)indexOfActiveTab { - return NSNotFound; +- (int)indexOfActiveTab { + return kTabGridDataSourceInvalidIndex; } @end
diff --git a/ios/web/net/crw_cert_verification_controller.mm b/ios/web/net/crw_cert_verification_controller.mm index b67742c..edbafe34 100644 --- a/ios/web/net/crw_cert_verification_controller.mm +++ b/ios/web/net/crw_cert_verification_controller.mm
@@ -11,6 +11,7 @@ #import "base/mac/bind_objc_block.h" #include "base/memory/ref_counted.h" #include "base/strings/sys_string_conversions.h" +#include "base/task_scheduler/post_task.h" #include "base/threading/worker_pool.h" #include "ios/web/public/browser_state.h" #include "ios/web/public/certificate_policy_cache.h" @@ -192,18 +193,20 @@ DCHECK(completionHandler); // SecTrustEvaluate performs trust evaluation synchronously, possibly making // network requests. The UI thread should not be blocked by that operation. - base::WorkerPool::PostTask( - FROM_HERE, base::BindBlockArc(^{ + base::PostTaskWithTraits( + FROM_HERE, + base::TaskTraits().WithShutdownBehavior( + base::TaskShutdownBehavior::BLOCK_SHUTDOWN), + base::BindBlockArc(^{ SecTrustResultType trustResult = kSecTrustResultInvalid; if (SecTrustEvaluate(trust.get(), &trustResult) != errSecSuccess) { trustResult = kSecTrustResultInvalid; } - web::WebThread::PostTask(web::WebThread::UI, FROM_HERE, - base::BindBlockArc(^{ - completionHandler(trustResult); - })); - }), - false /* task_is_slow */); + // Use GCD API, which is guaranteed to be called during shutdown. + dispatch_async(dispatch_get_main_queue(), ^{ + completionHandler(trustResult); + }); + })); } - (web::CertAcceptPolicy)
diff --git a/ios/web/public/test/fakes/test_navigation_manager.h b/ios/web/public/test/fakes/test_navigation_manager.h index 76751a5..e0d6cc6a 100644 --- a/ios/web/public/test/fakes/test_navigation_manager.h +++ b/ios/web/public/test/fakes/test_navigation_manager.h
@@ -5,7 +5,10 @@ #ifndef IOS_WEB_PUBLIC_TEST_FAKES_TEST_NAVIGATION_MANAGER_H_ #define IOS_WEB_PUBLIC_TEST_FAKES_TEST_NAVIGATION_MANAGER_H_ +#import "ios/web/public/navigation_item.h" +#include "ios/web/public/navigation_item_list.h" #import "ios/web/public/navigation_manager.h" +#include "ui/base/page_transition_types.h" namespace web { @@ -44,11 +47,29 @@ void OverrideDesktopUserAgentForNextPendingItem() override; // Setters for test data. + // Sets a value for last committed item that will be returned by + // GetLastCommittedItem(). void SetLastCommittedItem(NavigationItem* item); + + // Sets a value for pending item that will be returned by GetPendingItem(). void SetPendingItem(NavigationItem* item); + + // Sets a value for visible item that will be returned by GetVisibleItem(). void SetVisibleItem(NavigationItem* item); + // Adds an item to items_. Affects the return values for, GetItemCount(), + // GetItemAtIndex(), and GetCurrentItemIndex(). + void AddItem(const GURL& url, ui::PageTransition transition); + + // Sets the index to be returned by GetCurrentItemIndex(). |index| must be + // either -1 or between 0 and GetItemCount()-1, inclusively. + void SetCurrentItemIndex(const int index); + private: + // A list of items constructed by calling AddItem(). + web::ScopedNavigationItemList items_; + int items_index_; + // Individual backing instance variables for Set* test set up methods. NavigationItem* pending_item_; NavigationItem* last_committed_item_; NavigationItem* visible_item_;
diff --git a/ios/web/public/test/fakes/test_navigation_manager.mm b/ios/web/public/test/fakes/test_navigation_manager.mm index 3508b52..579a1e7 100644 --- a/ios/web/public/test/fakes/test_navigation_manager.mm +++ b/ios/web/public/test/fakes/test_navigation_manager.mm
@@ -7,7 +7,8 @@ namespace web { TestNavigationManager::TestNavigationManager() - : pending_item_(nullptr), + : items_index_(-1), + pending_item_(nullptr), last_committed_item_(nullptr), visible_item_(nullptr) {} @@ -71,18 +72,20 @@ } int TestNavigationManager::GetItemCount() const { - NOTREACHED(); - return 0; + return items_.size(); } web::NavigationItem* TestNavigationManager::GetItemAtIndex(size_t index) const { - NOTREACHED(); - return nullptr; + return items_[index].get(); } int TestNavigationManager::GetCurrentItemIndex() const { - NOTREACHED(); - return 0; + return items_index_; +} + +void TestNavigationManager::SetCurrentItemIndex(const int index) { + DCHECK(index == -1 || index >= 0 && index < GetItemCount()); + items_index_ = index; } int TestNavigationManager::GetLastCommittedItemIndex() const { @@ -96,8 +99,13 @@ } bool TestNavigationManager::RemoveItemAtIndex(int index) { - NOTREACHED(); - return false; + if (index < 0 || index >= GetItemCount()) + return false; + DCHECK(items_index_ != index); + items_.erase(items_.begin() + index); + if (items_index_ > index) + --items_index_; + return true; } bool TestNavigationManager::CanGoBack() const { @@ -146,4 +154,14 @@ NOTREACHED(); } +// Adds a new navigation item of |transition| type at the end of this +// navigation manager. +void TestNavigationManager::AddItem(const GURL& url, + ui::PageTransition transition) { + items_.push_back(web::NavigationItem::Create()); + items_.back()->SetTransitionType(transition); + items_.back()->SetURL(url); + SetCurrentItemIndex(GetItemCount() - 1); +} + } // namespace web
diff --git a/ios/web_view/BUILD.gn b/ios/web_view/BUILD.gn index 1755748..f96dc15 100644 --- a/ios/web_view/BUILD.gn +++ b/ios/web_view/BUILD.gn
@@ -2,13 +2,93 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. -# Public target that should be used to depend on web_view. Only give access -# to the web_view public headers while still linking with the implementation. -group("web_view") { +import("//build/config/ios/ios_sdk.gni") +import("//build/config/ios/rules.gni") +import("//tools/grit/repack.gni") + +config("config") { + include_dirs = [ + "internal", + "public", + ] +} + +ios_framework_bundle("web_view") { + output_name = "ChromeWebView" + info_plist = "Info.plist" + + sources = [ + "public/cwv.h", + ] + + public_headers = [ + "public/criwv_translate_manager.h", + "public/cwv.h", + "public/cwv_delegate.h", + "public/cwv_html_element.h", + "public/cwv_navigation_delegate.h", + "public/cwv_translate_delegate.h", + "public/cwv_ui_delegate.h", + "public/cwv_web_view.h", + "public/cwv_web_view_configuration.h", + "public/cwv_website_data_store.h", + ] + + deps = [ + ":packed_resources", + "//base", + "//components/infobars/core", + "//components/keyed_service/core", + "//components/keyed_service/ios", + "//components/pref_registry", + "//components/prefs", + "//components/translate/core/browser", + "//components/translate/core/common", + "//components/translate/ios/browser", + "//ios/net", + "//ios/web", + "//ios/web:user_agent", + "//ios/web/public/app", + "//ios/web_view/internal", + "//net", + "//net:extras", + "//ui/base", + "//url", + ] + public_deps = [ "//ios/web_view/public", ] + + libs = [ "UIKit.framework" ] + + public_configs = [ ":config" ] + + configs += [ "//build/config/compiler:enable_arc" ] +} + +repack("repack_resources") { + visibility = [ ":packed_resources" ] deps = [ - "//ios/web_view/internal", + "//components/resources:components_resources", + "//ios/web:resources", + ] + sources = [ + "$root_gen_dir/components/components_resources.pak", + "$root_gen_dir/ios/web/ios_web_resources.pak", + ] + output = "$target_gen_dir/web_view_resources.pak" +} + +bundle_data("packed_resources") { + visibility = [ "//ios/web_view:*" ] + public_deps = [ + ":repack_resources", + ] + sources = [ + "$target_gen_dir/web_view_resources.pak", + ] + outputs = [ + "{{bundle_resources_dir}}/{{source_file_part}}", ] }
diff --git a/ios/web_view/Info.plist b/ios/web_view/Info.plist new file mode 100644 index 0000000..e0cebf0f --- /dev/null +++ b/ios/web_view/Info.plist
@@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<dict> + <key>CFBundleVersion</key> + <string>1.0</string> + <key>CFBundleSignature</key> + <string>????</string> + <key>CFBundlePackageType</key> + <string>FMWK</string> + <key>CFBundleInfoDictionaryVersion</key> + <string>6.0</string> + <key>CFBundleIdentifier</key> + <string>${IOS_BUNDLE_ID_PREFIX}.${EXECUTABLE_NAME:rfc1034identifier}</string> + <key>CFBundleExecutable</key> + <string>${EXECUTABLE_NAME}</string> + <key>CFBundleDevelopmentRegion</key> + <string>English</string> +</dict> +</plist>
diff --git a/ios/web_view/internal/BUILD.gn b/ios/web_view/internal/BUILD.gn index 167256b..3031f76 100644 --- a/ios/web_view/internal/BUILD.gn +++ b/ios/web_view/internal/BUILD.gn
@@ -4,7 +4,7 @@ source_set("internal") { visibility = [ - "//ios/web_view", + "//ios/web_view:*", "//ios/web_view/internal/*", ]
diff --git a/ios/web_view/internal/web_view_web_main_parts.mm b/ios/web_view/internal/web_view_web_main_parts.mm index 3b98e727..651d357 100644 --- a/ios/web_view/internal/web_view_web_main_parts.mm +++ b/ios/web_view/internal/web_view_web_main_parts.mm
@@ -4,12 +4,16 @@ #import "ios/web_view/internal/web_view_web_main_parts.h" +#import <Foundation/Foundation.h> + #include "base/base_paths.h" +#import "base/mac/bundle_locations.h" #include "base/memory/ptr_util.h" #include "base/path_service.h" #include "components/translate/core/browser/translate_download_manager.h" #include "ios/web_view/internal/web_view_browser_state.h" #import "ios/web_view/public/cwv_delegate.h" +#import "ios/web_view/public/cwv_web_view.h" #include "ui/base/l10n/l10n_util_mac.h" #include "ui/base/resource/resource_bundle.h" @@ -26,6 +30,9 @@ WebViewWebMainParts::~WebViewWebMainParts() = default; void WebViewWebMainParts::PreMainMessageLoopRun() { + base::mac::SetOverrideFrameworkBundle( + [NSBundle bundleForClass:[CWVWebView class]]); + // Initialize resources. l10n_util::OverrideLocaleWithCocoaLocale(); ui::ResourceBundle::InitSharedInstanceWithLocale(
diff --git a/ios/web_view/public/BUILD.gn b/ios/web_view/public/BUILD.gn index 001c91f..85c95e9 100644 --- a/ios/web_view/public/BUILD.gn +++ b/ios/web_view/public/BUILD.gn
@@ -4,7 +4,7 @@ source_set("public") { visibility = [ - "//ios/web_view", + "//ios/web_view:*", "//ios/web_view/internal/*", ]
diff --git a/ios/web_view/shell/BUILD.gn b/ios/web_view/shell/BUILD.gn index 389cc590..14032cd 100644 --- a/ios/web_view/shell/BUILD.gn +++ b/ios/web_view/shell/BUILD.gn
@@ -2,7 +2,6 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. -import("//tools/grit/repack.gni") import("//build/config/ios/rules.gni") ios_app_bundle("ios_web_view_shell") { @@ -10,11 +9,10 @@ deps = [ ":shell", + "//ios/web_view", + "//ios/web_view:web_view+link", ] - bundle_deps = [ - ":resources", - ":packed_resources", - ] + bundle_deps = [ "//ios/web_view:web_view+bundle" ] configs += [ "//build/config/compiler:enable_arc" ] } @@ -33,7 +31,7 @@ ] deps = [ - "//base", + ":resources", "//ios/web_view", ] @@ -56,7 +54,7 @@ } bundle_data("resources") { - visibility = [ ":ios_web_view_shell" ] + visibility = [ ":shell" ] sources = [ "Default-568h@2x.png", "textfield_background@2x.png", @@ -68,27 +66,3 @@ "{{bundle_resources_dir}}/{{source_file_part}}", ] } - -repack("repack_resources") { - visibility = [ ":packed_resources" ] - deps = [ - "//components/resources:components_resources", - ] - sources = [ - "$root_gen_dir/components/components_resources.pak", - ] - output = "$target_gen_dir/web_view_resources.pak" -} - -bundle_data("packed_resources") { - visibility = [ ":ios_web_view_shell" ] - public_deps = [ - ":repack_resources", - ] - sources = [ - "$target_gen_dir/web_view_resources.pak", - ] - outputs = [ - "{{bundle_resources_dir}}/{{source_file_part}}", - ] -}
diff --git a/ios/web_view/shell/test/BUILD.gn b/ios/web_view/shell/test/BUILD.gn index 6c29a4c..4d9517c 100644 --- a/ios/web_view/shell/test/BUILD.gn +++ b/ios/web_view/shell/test/BUILD.gn
@@ -20,6 +20,7 @@ deps = [ ":earl_grey_test_support", + "//ios/web_view:web_view+link", # All shared libraries must have the sanitizer deps to properly link in # asan mode (this target will be empty in other cases). @@ -37,12 +38,17 @@ deps = [ "//base", "//ios/testing:ios_test_support", - "//ios/third_party/earl_grey", "//ios/web_view/shell", ] public_deps = [ "//build/config/ios:xctest", + "//ios/third_party/earl_grey", + ] + + libs = [ + "WebKit.framework", + "XCTest.framework", ] sources = [
diff --git a/media/audio/BUILD.gn b/media/audio/BUILD.gn index 11e618a..4b79155 100644 --- a/media/audio/BUILD.gn +++ b/media/audio/BUILD.gn
@@ -81,6 +81,8 @@ "audio_manager_base.h", "audio_output_controller.cc", "audio_output_controller.h", + "audio_output_delegate.cc", + "audio_output_delegate.h", "audio_output_device.cc", "audio_output_device.h", "audio_output_dispatcher.cc",
diff --git a/media/audio/audio_output_delegate.cc b/media/audio/audio_output_delegate.cc new file mode 100644 index 0000000..6ac2b2e42 --- /dev/null +++ b/media/audio/audio_output_delegate.cc
@@ -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. + +#include "audio_output_delegate.h" + +media::AudioOutputDelegate::EventHandler::EventHandler() {} +media::AudioOutputDelegate::EventHandler::~EventHandler() {} + +media::AudioOutputDelegate::AudioOutputDelegate() {} +media::AudioOutputDelegate::~AudioOutputDelegate() {}
diff --git a/content/browser/renderer_host/media/audio_output_delegate.h b/media/audio/audio_output_delegate.h similarity index 71% rename from content/browser/renderer_host/media/audio_output_delegate.h rename to media/audio/audio_output_delegate.h index 1bab027..0d9c540 100644 --- a/content/browser/renderer_host/media/audio_output_delegate.h +++ b/media/audio/audio_output_delegate.h
@@ -2,15 +2,15 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CONTENT_BROWSER_RENDERER_HOST_MEDIA_AUDIO_OUTPUT_DELEGATE_H_ -#define CONTENT_BROWSER_RENDERER_HOST_MEDIA_AUDIO_OUTPUT_DELEGATE_H_ +#ifndef MEDIA_AUDIO_AUDIO_OUTPUT_DELEGATE_H_ +#define MEDIA_AUDIO_AUDIO_OUTPUT_DELEGATE_H_ #include <memory> #include <string> #include "base/macros.h" #include "base/memory/ref_counted.h" -#include "content/common/content_export.h" +#include "media/base/media_export.h" namespace base { class SharedMemory; @@ -18,18 +18,17 @@ } namespace media { + class AudioOutputController; -} -namespace content { - -class CONTENT_EXPORT AudioOutputDelegate { +class MEDIA_EXPORT AudioOutputDelegate { public: - class CONTENT_EXPORT EventHandler { + // An AudioOutputDelegate must not call back to its EventHandler in its + // constructor. + class MEDIA_EXPORT EventHandler { public: - virtual ~EventHandler() {} - - // All these methods are called on the IO thread. + EventHandler(); + virtual ~EventHandler(); // Called when construction is finished and the stream is ready for // playout. @@ -41,7 +40,8 @@ virtual void OnStreamError(int stream_id) = 0; }; - virtual ~AudioOutputDelegate() {} + AudioOutputDelegate(); + virtual ~AudioOutputDelegate(); // TODO(maxmorin): Remove GetController() when crbug.com/647185 is closed. // This function is used to provide control of the audio stream to @@ -50,7 +50,7 @@ // AudioOutputDelegate. In this case, it is still safe to call functions on // the controller, but it will not do anything. The controller is also shared // with AudioStreamMonitor. - virtual scoped_refptr<media::AudioOutputController> GetController() const = 0; + virtual scoped_refptr<AudioOutputController> GetController() const = 0; virtual int GetStreamId() const = 0; // Stream control: @@ -59,6 +59,6 @@ virtual void OnSetVolume(double volume) = 0; }; -} // namespace content +} // namespace media -#endif // CONTENT_BROWSER_RENDERER_HOST_MEDIA_AUDIO_OUTPUT_DELEGATE_H_ +#endif // MEDIA_AUDIO_AUDIO_OUTPUT_DELEGATE_H_
diff --git a/media/audio/audio_system.h b/media/audio/audio_system.h index a11b030..76319cc 100644 --- a/media/audio/audio_system.h +++ b/media/audio/audio_system.h
@@ -25,11 +25,26 @@ virtual ~AudioSystem(); - // Callback will receive invalid parameters if the device is not found. + // Callback may receive invalid parameters, it means the specified device is + // not found. This is best-effort: valid parameters do not guarantee existance + // of the device. + // TODO(olka,tommi): fix all AudioManager implementations to return invalid + // parameters if the device is not found. virtual void GetInputStreamParameters( const std::string& device_id, OnAudioParamsCallback on_params_cb) const = 0; + // If media::AudioDeviceDescription::IsDefaultDevice(device_id) is true, + // callback will receive the parameters of the default output device. + // Callback may receive invalid parameters, it means the specified device is + // not found. This is best-effort: valid parameters do not guarantee existance + // of the device. + // TODO(olka,tommi): fix all AudioManager implementations to return invalid + // parameters if the device is not found. + virtual void GetOutputStreamParameters( + const std::string& device_id, + OnAudioParamsCallback on_params_cb) const = 0; + virtual void HasInputDevices(OnBoolCallback on_has_devices_cb) const = 0; // Must not be used for anything but stream creation.
diff --git a/media/audio/audio_system_impl.cc b/media/audio/audio_system_impl.cc index fdffa70f..a6c51a6 100644 --- a/media/audio/audio_system_impl.cc +++ b/media/audio/audio_system_impl.cc
@@ -7,6 +7,7 @@ #include "base/memory/ptr_util.h" #include "base/single_thread_task_runner.h" #include "base/task_runner_util.h" +#include "media/audio/audio_device_description.h" #include "media/audio/audio_manager.h" // Using base::Unretained for |audio_manager_| is safe since it is deleted after @@ -21,13 +22,29 @@ DCHECK(audio_manager->GetTaskRunner()->BelongsToCurrentThread()); // TODO(olka): remove this when AudioManager::GetInputStreamParameters() - // works this way on all the platforms. + // returns invalid parameters if the device is not found. if (!audio_manager->HasAudioInputDevices()) return AudioParameters(); return audio_manager->GetInputStreamParameters(device_id); } +AudioParameters GetOutputParametersOnDeviceThread( + AudioManager* audio_manager, + const std::string& device_id) { + DCHECK(audio_manager->GetTaskRunner()->BelongsToCurrentThread()); + + // TODO(olka): remove this when + // AudioManager::Get[Default]OutputStreamParameters() returns invalid + // parameters if the device is not found. + if (!audio_manager->HasAudioOutputDevices()) + return AudioParameters(); + + return media::AudioDeviceDescription::IsDefaultDevice(device_id) + ? audio_manager->GetDefaultOutputStreamParameters() + : audio_manager->GetOutputStreamParameters(device_id); +} + } // namespace AudioSystemImpl::AudioSystemImpl(AudioManager* audio_manager) @@ -62,6 +79,22 @@ std::move(on_params_cb)); } +void AudioSystemImpl::GetOutputStreamParameters( + const std::string& device_id, + OnAudioParamsCallback on_params_cb) const { + if (GetTaskRunner()->BelongsToCurrentThread()) { + GetTaskRunner()->PostTask( + FROM_HERE, base::Bind(on_params_cb, GetOutputParametersOnDeviceThread( + audio_manager_, device_id))); + return; + } + base::PostTaskAndReplyWithResult( + GetTaskRunner(), FROM_HERE, + base::Bind(&GetOutputParametersOnDeviceThread, + base::Unretained(audio_manager_), device_id), + std::move(on_params_cb)); +} + void AudioSystemImpl::HasInputDevices(OnBoolCallback on_has_devices_cb) const { if (GetTaskRunner()->BelongsToCurrentThread()) { GetTaskRunner()->PostTask(
diff --git a/media/audio/audio_system_impl.h b/media/audio/audio_system_impl.h index e7efd10..dd9342c 100644 --- a/media/audio/audio_system_impl.h +++ b/media/audio/audio_system_impl.h
@@ -24,7 +24,13 @@ void GetInputStreamParameters( const std::string& device_id, OnAudioParamsCallback on_params_cb) const override; + + void GetOutputStreamParameters( + const std::string& device_id, + OnAudioParamsCallback on_params_cb) const override; + void HasInputDevices(OnBoolCallback on_has_devices_cb) const override; + AudioManager* GetAudioManager() const override; protected:
diff --git a/media/audio/audio_system_impl_unittest.cc b/media/audio/audio_system_impl_unittest.cc index 04f6f64..ba4de57 100644 --- a/media/audio/audio_system_impl_unittest.cc +++ b/media/audio/audio_system_impl_unittest.cc
@@ -16,12 +16,31 @@ #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" +namespace { +const char* kNonDefaultDeviceId = "non-default-device-id"; +} namespace media { class AudioSystemImplTest : public testing::TestWithParam<bool> { public: AudioSystemImplTest() - : use_audio_thread_(GetParam()), audio_thread_("AudioSystemThread") { + : use_audio_thread_(GetParam()), + audio_thread_("AudioSystemThread"), + input_params_(AudioParameters::AUDIO_PCM_LINEAR, + CHANNEL_LAYOUT_MONO, + AudioParameters::kTelephoneSampleRate, + 16, + AudioParameters::kTelephoneSampleRate / 10), + output_params_(AudioParameters::AUDIO_PCM_LINEAR, + CHANNEL_LAYOUT_MONO, + AudioParameters::kTelephoneSampleRate, + 16, + AudioParameters::kTelephoneSampleRate / 20), + default_output_params_(AudioParameters::AUDIO_PCM_LINEAR, + CHANNEL_LAYOUT_MONO, + AudioParameters::kTelephoneSampleRate, + 16, + AudioParameters::kTelephoneSampleRate / 30) { if (use_audio_thread_) { audio_thread_.StartAndWaitForTesting(); audio_manager_.reset( @@ -30,8 +49,11 @@ audio_manager_.reset(new media::MockAudioManager( base::ThreadTaskRunnerHandle::Get().get())); } - audio_manager_->SetInputStreamParameters( - media::AudioParameters::UnavailableDeviceParams()); + + audio_manager_->SetInputStreamParameters(input_params_); + audio_manager_->SetOutputStreamParameters(output_params_); + audio_manager_->SetDefaultOutputStreamParameters(default_output_params_); + audio_system_ = media::AudioSystemImpl::Create(audio_manager_.get()); EXPECT_EQ(AudioSystem::Get(), audio_system_.get()); } @@ -52,12 +74,17 @@ AudioParametersReceived(); } + void OnHasInputDevices(bool result) { + EXPECT_TRUE(thread_checker_.CalledOnValidThread()); + HasInputDevicesCallback(result); + } + void WaitForCallback() { if (!use_audio_thread_) { base::RunLoop().RunUntilIdle(); return; } - media::WaitableMessageLoopEvent event; + WaitableMessageLoopEvent event; audio_thread_.task_runner()->PostTaskAndReply( FROM_HERE, base::Bind(&base::DoNothing), event.GetClosure()); // Runs the loop and waits for the |audio_thread_| to call event's closure, @@ -77,6 +104,9 @@ base::Thread audio_thread_; MockAudioManager::UniquePtr audio_manager_; std::unique_ptr<media::AudioSystem> audio_system_; + AudioParameters input_params_; + AudioParameters output_params_; + AudioParameters default_output_params_; }; TEST_P(AudioSystemImplTest, GetInputStreamParameters) { @@ -84,7 +114,7 @@ audio_system_->GetInputStreamParameters( media::AudioDeviceDescription::kDefaultDeviceId, base::Bind(&AudioSystemImplTest::OnAudioParams, base::Unretained(this), - media::AudioParameters::UnavailableDeviceParams())); + input_params_)); WaitForCallback(); } @@ -98,10 +128,44 @@ WaitForCallback(); } +TEST_P(AudioSystemImplTest, GetStreamParameters) { + EXPECT_CALL(*this, AudioParametersReceived()); + audio_system_->GetOutputStreamParameters( + kNonDefaultDeviceId, base::Bind(&AudioSystemImplTest::OnAudioParams, + base::Unretained(this), output_params_)); + WaitForCallback(); +} + +TEST_P(AudioSystemImplTest, GetDefaultOutputStreamParameters) { + EXPECT_CALL(*this, AudioParametersReceived()); + audio_system_->GetOutputStreamParameters( + media::AudioDeviceDescription::kDefaultDeviceId, + base::Bind(&AudioSystemImplTest::OnAudioParams, base::Unretained(this), + default_output_params_)); + WaitForCallback(); +} + +TEST_P(AudioSystemImplTest, GetOutputStreamParametersNoDevice) { + audio_manager_->SetHasOutputDevices(false); + EXPECT_CALL(*this, AudioParametersReceived()).Times(2); + + audio_system_->GetOutputStreamParameters( + media::AudioDeviceDescription::kDefaultDeviceId, + base::Bind(&AudioSystemImplTest::OnAudioParams, base::Unretained(this), + media::AudioParameters())); + WaitForCallback(); + + audio_system_->GetOutputStreamParameters( + kNonDefaultDeviceId, + base::Bind(&AudioSystemImplTest::OnAudioParams, base::Unretained(this), + media::AudioParameters())); + WaitForCallback(); +} + TEST_P(AudioSystemImplTest, HasInputDevices) { EXPECT_CALL(*this, HasInputDevicesCallback(true)); audio_system_->HasInputDevices(base::Bind( - &AudioSystemImplTest::HasInputDevicesCallback, base::Unretained(this))); + &AudioSystemImplTest::OnHasInputDevices, base::Unretained(this))); WaitForCallback(); } @@ -109,7 +173,7 @@ audio_manager_->SetHasInputDevices(false); EXPECT_CALL(*this, HasInputDevicesCallback(false)); audio_system_->HasInputDevices(base::Bind( - &AudioSystemImplTest::HasInputDevicesCallback, base::Unretained(this))); + &AudioSystemImplTest::OnHasInputDevices, base::Unretained(this))); WaitForCallback(); }
diff --git a/media/audio/mock_audio_manager.cc b/media/audio/mock_audio_manager.cc index 04b59aa..26fc563 100644 --- a/media/audio/mock_audio_manager.cc +++ b/media/audio/mock_audio_manager.cc
@@ -33,7 +33,7 @@ bool MockAudioManager::HasAudioOutputDevices() { DCHECK(GetTaskRunner()->BelongsToCurrentThread()); - return true; + return has_output_devices_; } bool MockAudioManager::HasAudioInputDevices() { @@ -91,13 +91,13 @@ } AudioParameters MockAudioManager::GetDefaultOutputStreamParameters() { - return AudioParameters(); + return default_output_params_; } AudioParameters MockAudioManager::GetOutputStreamParameters( const std::string& device_id) { DCHECK(GetTaskRunner()->BelongsToCurrentThread()); - return AudioParameters(); + return output_params_; } AudioParameters MockAudioManager::GetInputStreamParameters( @@ -129,13 +129,26 @@ return nullptr; } -void MockAudioManager::SetInputStreamParameters( - const AudioParameters& input_params) { - input_params_ = input_params; +void MockAudioManager::SetInputStreamParameters(const AudioParameters& params) { + input_params_ = params; +} + +void MockAudioManager::SetOutputStreamParameters( + const AudioParameters& params) { + output_params_ = params; +} + +void MockAudioManager::SetDefaultOutputStreamParameters( + const AudioParameters& params) { + default_output_params_ = params; } void MockAudioManager::SetHasInputDevices(bool has_input_devices) { has_input_devices_ = has_input_devices; } +void MockAudioManager::SetHasOutputDevices(bool has_output_devices) { + has_output_devices_ = has_output_devices; +} + } // namespace media.
diff --git a/media/audio/mock_audio_manager.h b/media/audio/mock_audio_manager.h index dedfdec..a75e940 100644 --- a/media/audio/mock_audio_manager.h +++ b/media/audio/mock_audio_manager.h
@@ -78,16 +78,23 @@ const char* GetName() override; // Setters to emulate desired in-test behavior. - void SetInputStreamParameters(const AudioParameters& input_params); + void SetInputStreamParameters(const AudioParameters& params); + void SetOutputStreamParameters(const AudioParameters& params); + void SetDefaultOutputStreamParameters(const AudioParameters& params); void SetHasInputDevices(bool has_input_devices); + void SetHasOutputDevices(bool has_output_devices); protected: ~MockAudioManager() override; private: friend class base::DeleteHelper<MockAudioManager>; + AudioParameters input_params_; + AudioParameters output_params_; + AudioParameters default_output_params_; bool has_input_devices_ = true; + bool has_output_devices_ = true; DISALLOW_COPY_AND_ASSIGN(MockAudioManager); };
diff --git a/media/base/ipc/media_param_traits_macros.h b/media/base/ipc/media_param_traits_macros.h index fff70465..70766ac9 100644 --- a/media/base/ipc/media_param_traits_macros.h +++ b/media/base/ipc/media_param_traits_macros.h
@@ -18,6 +18,7 @@ #include "media/base/demuxer_stream.h" #include "media/base/eme_constants.h" #include "media/base/encryption_scheme.h" +#include "media/base/output_device_info.h" #include "media/base/sample_format.h" #include "media/base/subsample_entry.h" #include "media/base/video_codecs.h" @@ -72,6 +73,9 @@ IPC_ENUM_TRAITS_MAX_VALUE(media::CdmSessionType, media::CdmSessionType::SESSION_TYPE_MAX) +IPC_ENUM_TRAITS_MAX_VALUE(media::OutputDeviceStatus, + media::OUTPUT_DEVICE_STATUS_MAX) + IPC_ENUM_TRAITS_MAX_VALUE(media::SampleFormat, media::kSampleFormatMax) IPC_ENUM_TRAITS_MAX_VALUE(media::VideoCodec, media::kVideoCodecMax)
diff --git a/media/capture/video/fake_video_capture_device_unittest.cc b/media/capture/video/fake_video_capture_device_unittest.cc index 9dd25db..d84b0169 100644 --- a/media/capture/video/fake_video_capture_device_unittest.cc +++ b/media/capture/video/fake_video_capture_device_unittest.cc
@@ -285,7 +285,7 @@ EnumerateDevices()); ASSERT_FALSE(descriptors->empty()); - auto device = + std::unique_ptr<VideoCaptureDevice> device = FakeVideoCaptureDeviceFactory::CreateDeviceWithDefaultResolutions( testing::get<0>(GetParam()), testing::get<1>(GetParam()), testing::get<2>(GetParam())); @@ -301,7 +301,7 @@ gfx::Size(1920, 1080)); for (const auto& resolution : resolutions_to_test) { - auto client = CreateClient(); + std::unique_ptr<MockClient> client = CreateClient(); EXPECT_CALL(*client, OnError(_, _)).Times(0); EXPECT_CALL(*client, OnStarted()); @@ -397,7 +397,7 @@ } TEST_F(FakeVideoCaptureDeviceTest, GetAndSetCapabilities) { - auto device = + std::unique_ptr<VideoCaptureDevice> device = FakeVideoCaptureDeviceFactory::CreateDeviceWithDefaultResolutions( PIXEL_FORMAT_I420, FakeVideoCaptureDevice::DeliveryMode::USE_DEVICE_INTERNAL_BUFFERS, @@ -422,7 +422,8 @@ run_loop_.reset(new base::RunLoop()); run_loop_->Run(); - auto* capabilities = image_capture_client_->capabilities(); + const mojom::PhotoCapabilities* capabilities = + image_capture_client_->capabilities(); ASSERT_TRUE(capabilities); EXPECT_EQ(100, capabilities->iso->min); EXPECT_EQ(100, capabilities->iso->max); @@ -510,7 +511,7 @@ } TEST_F(FakeVideoCaptureDeviceTest, TakePhoto) { - auto device = + std::unique_ptr<VideoCaptureDevice> device = FakeVideoCaptureDeviceFactory::CreateDeviceWithDefaultResolutions( PIXEL_FORMAT_I420, FakeVideoCaptureDevice::DeliveryMode::USE_DEVICE_INTERNAL_BUFFERS, @@ -602,7 +603,7 @@ capture_params.requested_format.frame_rate = GetParam().expected_fps; capture_params.requested_format.pixel_format = GetParam().expected_pixel_formats[device_index]; - auto client = CreateClient(); + std::unique_ptr<MockClient> client = CreateClient(); EXPECT_CALL(*client, OnStarted()); device->AllocateAndStart(capture_params, std::move(client)); WaitForCapturedFrame();
diff --git a/media/gpu/vt_video_decode_accelerator_mac.cc b/media/gpu/vt_video_decode_accelerator_mac.cc index 59cb2ce..db21aeb 100644 --- a/media/gpu/vt_video_decode_accelerator_mac.cc +++ b/media/gpu/vt_video_decode_accelerator_mac.cc
@@ -209,6 +209,13 @@ // TODO(sandersd): Share this computation with the VAAPI decoder. int32_t ComputeReorderWindow(const H264SPS* sps) { + // When |pic_order_cnt_type| == 2, decode order always matches presentation + // order. + // TODO(sandersd): For |pic_order_cnt_type| == 1, analyze the delta cycle to + // find the minimum required reorder window. + if (sps->pic_order_cnt_type == 2) + return 0; + // TODO(sandersd): Compute MaxDpbFrames. int32_t max_dpb_frames = 16; @@ -592,6 +599,7 @@ frame->has_slice = true; frame->is_idr = nalu.nal_unit_type == media::H264NALU::kIDRSlice; + frame->has_mmco5 = poc_.IsPendingMMCO5(); frame->pic_order_cnt = pic_order_cnt; frame->reorder_window = ComputeReorderWindow(sps); } @@ -604,9 +612,8 @@ } } - if (frame->is_idr) { + if (frame->is_idr) waiting_for_idr_ = false; - } // If no IDR has been seen yet, skip decoding. Note that Flash sends // configuration changes as a bitstream with only SPS/PPS; we don't print @@ -941,9 +948,14 @@ const Task& task = task_queue_.front(); switch (task.type) { - case TASK_FRAME: - if (reorder_queue_.size() < kMaxReorderQueueSize && - (!task.frame->is_idr || reorder_queue_.empty())) { + case TASK_FRAME: { + bool reorder_queue_has_space = + reorder_queue_.size() < kMaxReorderQueueSize; + bool reorder_queue_flush_needed = + task.frame->is_idr || task.frame->has_mmco5; + bool reorder_queue_flush_done = reorder_queue_.empty(); + if (reorder_queue_has_space && + (!reorder_queue_flush_needed || reorder_queue_flush_done)) { DVLOG(2) << "Decode(" << task.frame->bitstream_id << ") complete"; assigned_bitstream_ids_.erase(task.frame->bitstream_id); client_->NotifyEndOfBitstreamBuffer(task.frame->bitstream_id); @@ -952,6 +964,7 @@ return true; } return false; + } case TASK_FLUSH: DCHECK_EQ(task.type, pending_flush_tasks_.front()); @@ -995,7 +1008,8 @@ // the next frame. bool flushing = !task_queue_.empty() && (task_queue_.front().type != TASK_FRAME || - task_queue_.front().frame->is_idr); + task_queue_.front().frame->is_idr || + task_queue_.front().frame->has_mmco5); size_t reorder_window = std::max(0, reorder_queue_.top()->reorder_window); DVLOG(3) << __func__ << " size=" << reorder_queue_.size()
diff --git a/media/gpu/vt_video_decode_accelerator_mac.h b/media/gpu/vt_video_decode_accelerator_mac.h index aebe512..75dbce5e 100644 --- a/media/gpu/vt_video_decode_accelerator_mac.h +++ b/media/gpu/vt_video_decode_accelerator_mac.h
@@ -102,6 +102,7 @@ // Slice header information. bool has_slice = false; bool is_idr = false; + bool has_mmco5 = false; int32_t pic_order_cnt = 0; int32_t reorder_window = 0;
diff --git a/media/mojo/BUILD.gn b/media/mojo/BUILD.gn index 2ffbeed..16556b2 100644 --- a/media/mojo/BUILD.gn +++ b/media/mojo/BUILD.gn
@@ -14,6 +14,7 @@ "common/media_type_converters_unittest.cc", "common/mojo_decoder_buffer_converter_unittest.cc", "common/mojo_shared_buffer_video_frame_unittest.cc", + "services/mojo_audio_output_stream_unittest.cc", "services/mojo_cdm_allocator_unittest.cc", ]
diff --git a/media/mojo/interfaces/BUILD.gn b/media/mojo/interfaces/BUILD.gn index 3d818274..561d796a 100644 --- a/media/mojo/interfaces/BUILD.gn +++ b/media/mojo/interfaces/BUILD.gn
@@ -7,7 +7,7 @@ mojom("interfaces") { sources = [ "audio_decoder.mojom", - "audio_output.mojom", + "audio_output_stream.mojom", "audio_parameters.mojom", "content_decryption_module.mojom", "decryptor.mojom",
diff --git a/media/mojo/interfaces/OWNERS b/media/mojo/interfaces/OWNERS index 1544352..2c44a46 100644 --- a/media/mojo/interfaces/OWNERS +++ b/media/mojo/interfaces/OWNERS
@@ -2,3 +2,5 @@ per-file *.mojom=file://ipc/SECURITY_OWNERS per-file *_struct_traits*.*=set noparent per-file *_struct_traits*.*=file://ipc/SECURITY_OWNERS +per-file *.typemap=set noparent +per-file *.typemap=file://ipc/SECURITY_OWNERS
diff --git a/media/mojo/interfaces/audio_output.mojom b/media/mojo/interfaces/audio_output.mojom deleted file mode 100644 index 895a93e4..0000000 --- a/media/mojo/interfaces/audio_output.mojom +++ /dev/null
@@ -1,33 +0,0 @@ -// Copyright 2016 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. - -module media.mojom; - -import "media/mojo/interfaces/audio_parameters.mojom"; - -// This interface handles audio output stream operations. -// It allows to close a stream. -// TODO(rchtara): Add methods that allow the interaction with audio output -// streams: Play, Pause and SetVolume to this interface. -// See crbug.com/606707 for more details. -interface AudioOutputStream { - Close(); -}; - -// This interface manages audio output streams. -// It allows to create an AudioOutputStream. -// TODO(rchtara): Add a method to request device authorization to this -// interface. -// See crbug.com/606707 for more details. -interface AudioOutput { - // TODO(rchtara): Remove |stream_id| from AudioOutput::CreateStream when all - // the stream operations are mojofied. - CreateStream( - int32 stream_id, - AudioParameters params) => - (int32 stream_id, - AudioOutputStream? stream, - handle<shared_buffer>? shared_buffer, - handle? socket_descriptor); -}; \ No newline at end of file
diff --git a/media/mojo/interfaces/audio_output_stream.mojom b/media/mojo/interfaces/audio_output_stream.mojom new file mode 100644 index 0000000..67926c3d --- /dev/null +++ b/media/mojo/interfaces/audio_output_stream.mojom
@@ -0,0 +1,31 @@ +// Copyright 2016 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. + +module media.mojom; + +import "media/mojo/interfaces/audio_parameters.mojom"; +import "media/mojo/interfaces/media_types.mojom"; + +// An interface for controlling an audio output stream. +// On error, the message pipe is closed. +// To close the stream, just close the message pipe. +interface AudioOutputStream { + // Starts rendering audio. + Play(); + + // Stops rendering audio and sends a signal to the |socket_descriptor| + // indicating this. + Pause(); + + // Sets volume. Volume must be in the range [0, 1]. + SetVolume(double volume); +}; + +interface AudioOutputStreamProvider { + // Creates a new AudioOutputStream using |params|. |shared_buffer| and + // |socket_descriptor| are used to write data to the stream as defined + // in AudioDeviceThread. Can only be called once. + Acquire(AudioOutputStream& output_stream, AudioParameters params) + => (handle<shared_buffer> shared_buffer, handle socket_descriptor); +};
diff --git a/media/mojo/interfaces/media_types.mojom b/media/mojo/interfaces/media_types.mojom index 8f6a1fe..6d57ff5a 100644 --- a/media/mojo/interfaces/media_types.mojom +++ b/media/mojo/interfaces/media_types.mojom
@@ -24,6 +24,10 @@ [Native] enum ChannelLayout; +// See media/base/output_device_info.h for descriptions. +[Native] +enum OutputDeviceStatus; + // See media/base/sample_format.h for descriptions. [Native] enum SampleFormat;
diff --git a/media/mojo/interfaces/media_types.typemap b/media/mojo/interfaces/media_types.typemap index 13a1525..db421145 100644 --- a/media/mojo/interfaces/media_types.typemap +++ b/media/mojo/interfaces/media_types.typemap
@@ -10,6 +10,7 @@ "//media/base/channel_layout.h", "//media/base/decode_status.h", "//media/base/encryption_scheme.h", + "//media/base/output_device_info.h", "//media/base/sample_format.h", "//media/base/subsample_entry.h", "//media/base/video_codecs.h", @@ -30,6 +31,7 @@ "media.mojom.ColorSpace=media::ColorSpace", "media.mojom.DecodeStatus=media::DecodeStatus", "media.mojom.EncryptionScheme.CipherMode=media::EncryptionScheme::CipherMode", + "media.mojom.OutputDeviceStatus=media::OutputDeviceStatus", "media.mojom.SampleFormat=media::SampleFormat", "media.mojom.SubsampleEntry=media::SubsampleEntry", "media.mojom.VideoCodec=media::VideoCodec",
diff --git a/media/mojo/services/BUILD.gn b/media/mojo/services/BUILD.gn index 432130d..f77082f 100644 --- a/media/mojo/services/BUILD.gn +++ b/media/mojo/services/BUILD.gn
@@ -79,6 +79,10 @@ "media_service_factory.h", "mojo_audio_decoder_service.cc", "mojo_audio_decoder_service.h", + "mojo_audio_output_stream.cc", + "mojo_audio_output_stream.h", + "mojo_audio_output_stream_provider.cc", + "mojo_audio_output_stream_provider.h", "mojo_cdm_allocator.cc", "mojo_cdm_allocator.h", "mojo_cdm_promise.cc",
diff --git a/media/mojo/services/mojo_audio_output_stream.cc b/media/mojo/services/mojo_audio_output_stream.cc new file mode 100644 index 0000000..1be3171 --- /dev/null +++ b/media/mojo/services/mojo_audio_output_stream.cc
@@ -0,0 +1,94 @@ +// 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 "media/mojo/services/mojo_audio_output_stream.h" + +#include <memory> +#include <utility> + +#include "base/callback_helpers.h" +#include "base/memory/shared_memory.h" +#include "base/sync_socket.h" +#include "mojo/public/cpp/system/platform_handle.h" + +namespace media { + +MojoAudioOutputStream::MojoAudioOutputStream( + mojom::AudioOutputStreamRequest request, + CreateDelegateCallback create_delegate_callback, + StreamCreatedCallback stream_created_callback, + base::OnceClosure deleter_callback) + : stream_created_callback_(std::move(stream_created_callback)), + deleter_callback_(std::move(deleter_callback)), + binding_(this, std::move(request)) { + DCHECK(thread_checker_.CalledOnValidThread()); + DCHECK(deleter_callback_); + // |this| owns |binding_|, so unretained is safe. + binding_.set_connection_error_handler( + base::Bind(&MojoAudioOutputStream::OnError, base::Unretained(this))); + delegate_ = std::move(create_delegate_callback).Run(this); +} + +MojoAudioOutputStream::~MojoAudioOutputStream() { + DCHECK(thread_checker_.CalledOnValidThread()); +} + +void MojoAudioOutputStream::Play() { + DCHECK(thread_checker_.CalledOnValidThread()); + delegate_->OnPlayStream(); +} + +void MojoAudioOutputStream::Pause() { + DCHECK(thread_checker_.CalledOnValidThread()); + delegate_->OnPauseStream(); +} + +void MojoAudioOutputStream::SetVolume(double volume) { + DCHECK(thread_checker_.CalledOnValidThread()); + if (volume < 0 || volume > 1) { + LOG(ERROR) << "MojoAudioOutputStream::SetVolume(" << volume + << ") out of range."; + OnError(); + return; + } + delegate_->OnSetVolume(volume); +} + +void MojoAudioOutputStream::OnStreamCreated( + int stream_id, + base::SharedMemory* shared_memory, + base::CancelableSyncSocket* foreign_socket) { + DCHECK(thread_checker_.CalledOnValidThread()); + DCHECK(stream_created_callback_); + DCHECK(shared_memory); + DCHECK(foreign_socket); + + base::SharedMemoryHandle foreign_memory_handle = + base::SharedMemory::DuplicateHandle(shared_memory->handle()); + DCHECK(base::SharedMemory::IsHandleValid(foreign_memory_handle)); + + mojo::ScopedSharedBufferHandle buffer_handle = mojo::WrapSharedMemoryHandle( + foreign_memory_handle, shared_memory->requested_size(), false); + mojo::ScopedHandle socket_handle = + mojo::WrapPlatformFile(foreign_socket->handle()); + + DCHECK(buffer_handle.is_valid()); + DCHECK(socket_handle.is_valid()); + + base::ResetAndReturn(&stream_created_callback_) + .Run(std::move(buffer_handle), std::move(socket_handle)); +} + +void MojoAudioOutputStream::OnStreamError(int stream_id) { + DCHECK(thread_checker_.CalledOnValidThread()); + OnError(); +} + +void MojoAudioOutputStream::OnError() { + DCHECK(thread_checker_.CalledOnValidThread()); + DCHECK(deleter_callback_); + std::move(deleter_callback_).Run(); // Deletes |this|. +} + +} // namespace media
diff --git a/media/mojo/services/mojo_audio_output_stream.h b/media/mojo/services/mojo_audio_output_stream.h new file mode 100644 index 0000000..533424e --- /dev/null +++ b/media/mojo/services/mojo_audio_output_stream.h
@@ -0,0 +1,69 @@ +// 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 MEDIA_MOJO_SERVICES_MOJO_AUDIO_OUTPUT_STREAM_H_ +#define MEDIA_MOJO_SERVICES_MOJO_AUDIO_OUTPUT_STREAM_H_ + +#include <memory> +#include <string> + +#include "base/threading/thread_checker.h" +#include "media/audio/audio_output_delegate.h" +#include "media/mojo/interfaces/audio_output_stream.mojom.h" +#include "media/mojo/services/media_mojo_export.h" +#include "mojo/public/cpp/bindings/binding.h" + +namespace media { + +// This class handles IPC for single audio output stream by delegating method +// calls to its AudioOutputDelegate. +class MEDIA_MOJO_EXPORT MojoAudioOutputStream + : NON_EXPORTED_BASE(public mojom::AudioOutputStream), + NON_EXPORTED_BASE(public AudioOutputDelegate::EventHandler) { + public: + using StreamCreatedCallback = + mojom::AudioOutputStreamProvider::AcquireCallback; + using CreateDelegateCallback = + base::OnceCallback<std::unique_ptr<AudioOutputDelegate>( + AudioOutputDelegate::EventHandler*)>; + + // |create_delegate_callback| is used to obtain an AudioOutputDelegate for the + // stream in the constructor. |stream_created_callback| is called when the + // stream has been initialized. |deleter_callback| is called when this class + // should be removed (stream ended/error). |deleter_callback| is required to + // destroy |this| synchronously. + MojoAudioOutputStream(mojom::AudioOutputStreamRequest request, + CreateDelegateCallback create_delegate_callback, + StreamCreatedCallback stream_created_callback, + base::OnceClosure deleter_callback); + + ~MojoAudioOutputStream() override; + + private: + // mojom::AudioOutputStream implementation. + void Play() override; + void Pause() override; + void SetVolume(double volume) override; + + // AudioOutputDelegate::EventHandler implementation. + void OnStreamCreated(int stream_id, + base::SharedMemory* shared_memory, + base::CancelableSyncSocket* foreign_socket) override; + void OnStreamError(int stream_id) override; + + // Closes connection to client and notifies owner. + void OnError(); + + StreamCreatedCallback stream_created_callback_; + base::OnceClosure deleter_callback_; + mojo::Binding<AudioOutputStream> binding_; + base::ThreadChecker thread_checker_; + std::unique_ptr<AudioOutputDelegate> delegate_; + + DISALLOW_COPY_AND_ASSIGN(MojoAudioOutputStream); +}; + +} // namespace media + +#endif // MEDIA_MOJO_SERVICES_MOJO_AUDIO_OUTPUT_STREAM_H_
diff --git a/media/mojo/services/mojo_audio_output_stream_provider.cc b/media/mojo/services/mojo_audio_output_stream_provider.cc new file mode 100644 index 0000000..10f8c89d --- /dev/null +++ b/media/mojo/services/mojo_audio_output_stream_provider.cc
@@ -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. + +#include "media/mojo/services/mojo_audio_output_stream_provider.h" + +#include <utility> + +namespace media { + +MojoAudioOutputStreamProvider::MojoAudioOutputStreamProvider( + mojom::AudioOutputStreamProviderRequest request, + CreateDelegateCallback create_delegate_callback, + DeleterCallback deleter_callback) + : binding_(this, std::move(request)), + create_delegate_callback_(std::move(create_delegate_callback)), + deleter_callback_(base::Bind(std::move(deleter_callback), this)) { + DCHECK(thread_checker_.CalledOnValidThread()); + binding_.set_connection_error_handler(deleter_callback_); + DCHECK(create_delegate_callback_); + DCHECK(deleter_callback_); +} + +MojoAudioOutputStreamProvider::~MojoAudioOutputStreamProvider() { + DCHECK(thread_checker_.CalledOnValidThread()); +} + +void MojoAudioOutputStreamProvider::Acquire( + mojom::AudioOutputStreamRequest stream_request, + const AudioParameters& params, + const AcquireCallback& callback) { + DCHECK(thread_checker_.CalledOnValidThread()); + if (audio_output_) { + LOG(ERROR) << "Output acquired twice."; + binding_.Unbind(); + deleter_callback_.Run(); // deletes |this|. + return; + } + + audio_output_.emplace( + std::move(stream_request), + base::BindOnce(std::move(create_delegate_callback_), params), + std::move(callback), deleter_callback_); +} + +} // namespace media
diff --git a/media/mojo/services/mojo_audio_output_stream_provider.h b/media/mojo/services/mojo_audio_output_stream_provider.h new file mode 100644 index 0000000..03eeb8d --- /dev/null +++ b/media/mojo/services/mojo_audio_output_stream_provider.h
@@ -0,0 +1,60 @@ +// 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 MEDIA_MOJO_SERVICES_MOJO_AUDIO_OUTPUT_STREAM_PROVIDER_H_ +#define MEDIA_MOJO_SERVICES_MOJO_AUDIO_OUTPUT_STREAM_PROVIDER_H_ + +#include <memory> +#include <string> + +#include "base/threading/thread_checker.h" +#include "media/audio/audio_output_delegate.h" +#include "media/mojo/interfaces/audio_output_stream.mojom.h" +#include "media/mojo/services/media_mojo_export.h" +#include "media/mojo/services/mojo_audio_output_stream.h" +#include "mojo/public/cpp/bindings/binding.h" + +namespace media { + +// Provides a single AudioOutput, given the audio parameters to use. +class MEDIA_MOJO_EXPORT MojoAudioOutputStreamProvider + : NON_EXPORTED_BASE(public mojom::AudioOutputStreamProvider) { + public: + using CreateDelegateCallback = + base::OnceCallback<std::unique_ptr<AudioOutputDelegate>( + const AudioParameters& params, + AudioOutputDelegate::EventHandler*)>; + using DeleterCallback = base::Callback<void(AudioOutputStreamProvider*)>; + + // |create_delegate_callback| is used to obtain an AudioOutputDelegate for the + // AudioOutput when it's initialized and |deleter_callback| is called when + // this class should be removed (stream ended/error). |deleter_callback| is + // required to destroy |this| synchronously. + MojoAudioOutputStreamProvider(mojom::AudioOutputStreamProviderRequest request, + CreateDelegateCallback create_delegate_callback, + DeleterCallback deleter_callback); + + ~MojoAudioOutputStreamProvider() override; + + private: + // mojom::AudioOutputStreamProvider implementation. + void Acquire(mojom::AudioOutputStreamRequest stream_request, + const AudioParameters& params, + const AcquireCallback& acquire_callback) override; + + // The callback for the Acquire() must be stored until the response is ready. + AcquireCallback acquire_callback_; + + base::Optional<MojoAudioOutputStream> audio_output_; + mojo::Binding<AudioOutputStreamProvider> binding_; + CreateDelegateCallback create_delegate_callback_; + base::Closure deleter_callback_; + base::ThreadChecker thread_checker_; + + DISALLOW_COPY_AND_ASSIGN(MojoAudioOutputStreamProvider); +}; + +} // namespace media + +#endif // MEDIA_MOJO_SERVICES_MOJO_AUDIO_OUTPUT_STREAM_PROVIDER_H_
diff --git a/media/mojo/services/mojo_audio_output_stream_unittest.cc b/media/mojo/services/mojo_audio_output_stream_unittest.cc new file mode 100644 index 0000000..c2b02a6 --- /dev/null +++ b/media/mojo/services/mojo_audio_output_stream_unittest.cc
@@ -0,0 +1,249 @@ +// 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 "media/mojo/services/mojo_audio_output_stream.h" + +#include <utility> + +#include "base/memory/shared_memory.h" +#include "base/message_loop/message_loop.h" +#include "base/run_loop.h" +#include "base/sync_socket.h" +#include "media/audio/audio_output_controller.h" +#include "media/mojo/interfaces/audio_output_stream.mojom.h" +#include "mojo/public/cpp/system/platform_handle.h" +#include "testing/gmock/include/gmock/gmock.h" +#include "testing/gtest/include/gtest/gtest.h" + +namespace media { + +namespace { + +const double kNewVolume = 0.618; +// Not actually used, but sent from the AudioOutputDelegate. +const int kStreamId = 0; +const int kShmemSize = 100; + +using testing::_; +using testing::Mock; +using testing::NotNull; +using testing::Return; +using testing::SaveArg; +using testing::StrictMock; +using testing::Test; +using AudioOutputStream = mojom::AudioOutputStream; +using AudioOutputStreamPtr = mojo::InterfacePtr<AudioOutputStream>; + +class MockDelegate : NON_EXPORTED_BASE(public AudioOutputDelegate) { + public: + MockDelegate() {} + ~MockDelegate() {} + + MOCK_CONST_METHOD0(GetController, scoped_refptr<AudioOutputController>()); + MOCK_CONST_METHOD0(GetStreamId, int()); + MOCK_METHOD0(OnPlayStream, void()); + MOCK_METHOD0(OnPauseStream, void()); + MOCK_METHOD1(OnSetVolume, void(double)); +}; + +class MockDelegateFactory { + public: + void PrepareDelegateForCreation( + std::unique_ptr<AudioOutputDelegate> delegate) { + ASSERT_EQ(nullptr, delegate_); + delegate_.swap(delegate); + } + + std::unique_ptr<AudioOutputDelegate> CreateDelegate( + AudioOutputDelegate::EventHandler* handler) { + MockCreateDelegate(handler); + EXPECT_NE(nullptr, delegate_); + return std::move(delegate_); + } + + MOCK_METHOD1(MockCreateDelegate, void(AudioOutputDelegate::EventHandler*)); + + private: + std::unique_ptr<AudioOutputDelegate> delegate_; +}; + +class MockDeleter { + public: + MOCK_METHOD0(Finished, void()); +}; + +class MockClient { + public: + MockClient() {} + + void Initialized(mojo::ScopedSharedBufferHandle shared_buffer, + mojo::ScopedHandle socket_handle) { + ASSERT_TRUE(shared_buffer.is_valid()); + ASSERT_TRUE(socket_handle.is_valid()); + + base::PlatformFile fd; + mojo::UnwrapPlatformFile(std::move(socket_handle), &fd); + socket_ = base::MakeUnique<base::CancelableSyncSocket>(fd); + EXPECT_NE(socket_->handle(), base::CancelableSyncSocket::kInvalidHandle); + + size_t memory_length; + base::SharedMemoryHandle shmem_handle; + bool read_only; + EXPECT_EQ( + mojo::UnwrapSharedMemoryHandle(std::move(shared_buffer), &shmem_handle, + &memory_length, &read_only), + MOJO_RESULT_OK); + EXPECT_FALSE(read_only); + buffer_ = base::MakeUnique<base::SharedMemory>(shmem_handle, read_only); + + GotNotification(); + } + + MOCK_METHOD0(GotNotification, void()); + + private: + std::unique_ptr<base::SharedMemory> buffer_; + std::unique_ptr<base::CancelableSyncSocket> socket_; +}; + +} // namespace + +class MojoAudioOutputStreamTest : public Test { + public: + MojoAudioOutputStreamTest() {} + + AudioOutputStreamPtr CreateAudioOutput() { + AudioOutputStreamPtr p; + ExpectDelegateCreation(); + impl_ = base::MakeUnique<MojoAudioOutputStream>( + mojo::MakeRequest(&p), + base::BindOnce(&MockDelegateFactory::CreateDelegate, + base::Unretained(&mock_delegate_factory_)), + base::Bind(&MockClient::Initialized, base::Unretained(&client_)), + base::BindOnce(&MockDeleter::Finished, base::Unretained(&deleter_))); + EXPECT_NE(nullptr, p); + return p; + } + + protected: + void ExpectDelegateCreation() { + delegate_ = new StrictMock<MockDelegate>(); + mock_delegate_factory_.PrepareDelegateForCreation( + base::WrapUnique(delegate_)); + EXPECT_TRUE( + base::CancelableSyncSocket::CreatePair(&local_, &foreign_socket_)); + EXPECT_TRUE(mem_.CreateAnonymous(kShmemSize)); + EXPECT_CALL(mock_delegate_factory_, MockCreateDelegate(NotNull())) + .WillOnce(SaveArg<0>(&delegate_event_handler_)); + } + + base::MessageLoop loop_; + base::CancelableSyncSocket local_, foreign_socket_; + base::SharedMemory mem_; + StrictMock<MockDelegate>* delegate_ = nullptr; + AudioOutputDelegate::EventHandler* delegate_event_handler_ = nullptr; + StrictMock<MockDelegateFactory> mock_delegate_factory_; + StrictMock<MockDeleter> deleter_; + MockClient client_; + std::unique_ptr<MojoAudioOutputStream> impl_; +}; + +TEST_F(MojoAudioOutputStreamTest, Play_Plays) { + AudioOutputStreamPtr audio_output_ptr = CreateAudioOutput(); + EXPECT_CALL(*delegate_, OnPlayStream()); + + audio_output_ptr->Play(); + base::RunLoop().RunUntilIdle(); +} + +TEST_F(MojoAudioOutputStreamTest, Pause_Pauses) { + AudioOutputStreamPtr audio_output_ptr = CreateAudioOutput(); + EXPECT_CALL(*delegate_, OnPauseStream()); + + audio_output_ptr->Pause(); + base::RunLoop().RunUntilIdle(); +} + +TEST_F(MojoAudioOutputStreamTest, SetVolume_SetsVolume) { + AudioOutputStreamPtr audio_output_ptr = CreateAudioOutput(); + EXPECT_CALL(*delegate_, OnSetVolume(kNewVolume)); + + audio_output_ptr->SetVolume(kNewVolume); + base::RunLoop().RunUntilIdle(); +} + +TEST_F(MojoAudioOutputStreamTest, DestructWithCallPending_Safe) { + AudioOutputStreamPtr audio_output_ptr = CreateAudioOutput(); + base::RunLoop().RunUntilIdle(); + + ASSERT_NE(nullptr, delegate_event_handler_); + delegate_event_handler_->OnStreamCreated(kStreamId, &mem_, &foreign_socket_); + audio_output_ptr->Play(); + impl_.reset(); + base::RunLoop().RunUntilIdle(); +} + +TEST_F(MojoAudioOutputStreamTest, Created_NotifiesClient) { + AudioOutputStreamPtr audio_output_ptr = CreateAudioOutput(); + base::RunLoop().RunUntilIdle(); + + EXPECT_CALL(client_, GotNotification()); + + ASSERT_NE(nullptr, delegate_event_handler_); + delegate_event_handler_->OnStreamCreated(kStreamId, &mem_, &foreign_socket_); + + base::RunLoop().RunUntilIdle(); +} + +TEST_F(MojoAudioOutputStreamTest, SetVolumeTooLarge_Error) { + AudioOutputStreamPtr audio_output_ptr = CreateAudioOutput(); + EXPECT_CALL(deleter_, Finished()); + + audio_output_ptr->SetVolume(15); + base::RunLoop().RunUntilIdle(); + Mock::VerifyAndClear(&deleter_); +} + +TEST_F(MojoAudioOutputStreamTest, SetVolumeNegative_Error) { + AudioOutputStreamPtr audio_output_ptr = CreateAudioOutput(); + EXPECT_CALL(deleter_, Finished()); + + audio_output_ptr->SetVolume(-0.5); + base::RunLoop().RunUntilIdle(); + Mock::VerifyAndClear(&deleter_); +} + +TEST_F(MojoAudioOutputStreamTest, DelegateErrorBeforeCreated_PropagatesError) { + AudioOutputStreamPtr audio_output_ptr = CreateAudioOutput(); + EXPECT_CALL(deleter_, Finished()); + + ASSERT_NE(nullptr, delegate_event_handler_); + delegate_event_handler_->OnStreamError(kStreamId); + + base::RunLoop().RunUntilIdle(); + Mock::VerifyAndClear(&deleter_); +} + +TEST_F(MojoAudioOutputStreamTest, DelegateErrorAfterCreated_PropagatesError) { + AudioOutputStreamPtr audio_output_ptr = CreateAudioOutput(); + EXPECT_CALL(deleter_, Finished()); + base::RunLoop().RunUntilIdle(); + + ASSERT_NE(nullptr, delegate_event_handler_); + delegate_event_handler_->OnStreamCreated(kStreamId, &mem_, &foreign_socket_); + delegate_event_handler_->OnStreamError(kStreamId); + + base::RunLoop().RunUntilIdle(); + Mock::VerifyAndClear(&deleter_); +} + +TEST_F(MojoAudioOutputStreamTest, RemoteEndGone_Error) { + AudioOutputStreamPtr audio_output_ptr = CreateAudioOutput(); + EXPECT_CALL(deleter_, Finished()); + audio_output_ptr.reset(); + base::RunLoop().RunUntilIdle(); + Mock::VerifyAndClear(&deleter_); +} + +} // namespace media
diff --git a/media/video/h264_poc.cc b/media/video/h264_poc.cc index cfa91057..c643ed7 100644 --- a/media/video/h264_poc.cc +++ b/media/video/h264_poc.cc
@@ -13,25 +13,11 @@ namespace media { -H264POC::H264POC() { - Reset(); -} - -H264POC::~H264POC() { -} - -void H264POC::Reset() { - // It shouldn't be necessary to reset these values, but doing so will improve - // reproducibility for buggy streams. - ref_pic_order_cnt_msb_ = 0; - ref_pic_order_cnt_lsb_ = 0; - prev_frame_num_ = 0; - prev_frame_num_offset_ = 0; -} +namespace { // Check if a slice includes memory management control operation 5, which // results in some |pic_order_cnt| state being cleared. -static bool HasMMCO5(const media::H264SliceHeader& slice_hdr) { +bool HasMMCO5(const media::H264SliceHeader& slice_hdr) { // Require that the frame actually has memory management control operations. if (slice_hdr.nal_ref_idc == 0 || slice_hdr.idr_pic_flag || @@ -53,6 +39,24 @@ return false; } +} // namespace + +H264POC::H264POC() { + Reset(); +} + +H264POC::~H264POC() {} + +void H264POC::Reset() { + // It shouldn't be necessary to reset these values, but doing so will improve + // reproducibility for buggy streams. + ref_pic_order_cnt_msb_ = 0; + ref_pic_order_cnt_lsb_ = 0; + prev_frame_num_ = 0; + prev_frame_num_offset_ = 0; + pending_mmco5_ = false; +} + bool H264POC::ComputePicOrderCnt( const H264SPS* sps, const H264SliceHeader& slice_hdr, @@ -67,19 +71,14 @@ int32_t max_pic_order_cnt_lsb = 1 << (sps->log2_max_pic_order_cnt_lsb_minus4 + 4); - // Note: Duplicate frame numbers are ignored. They occur in many videos - // despite appearing to be invalid according to the spec. - // TODO(sandersd): Check if these videos are using slices or have redundant - // streams. - - // Note: Gaps in frame numbers are also ignored. They do not affect POC - // computation. - // Based on T-REC-H.264 8.2.1, "Decoding process for picture order // count", available from http://www.itu.int/rec/T-REC-H.264. // // Reorganized slightly from spec pseudocode to handle MMCO5 when storing // state instead of when loading it. + // + // Note: Gaps in frame numbers are ignored. They do not affect POC + // computation. switch (sps->pic_order_cnt_type) { case 0: { int32_t prev_pic_order_cnt_msb = ref_pic_order_cnt_msb_; @@ -111,9 +110,19 @@ // (assuming no interlacing). int32_t top_foc = pic_order_cnt_msb + slice_hdr.pic_order_cnt_lsb; int32_t bottom_foc = top_foc + slice_hdr.delta_pic_order_cnt_bottom; - *pic_order_cnt = std::min(top_foc, bottom_foc); + + // Compute POC. + // + // MMCO5, like IDR, starts a new reordering group. The POC is specified to + // change to 0 after decoding; we change it immediately and set the + // |pending_mmco5_| flag. + if (mmco5) + *pic_order_cnt = 0; + else + *pic_order_cnt = std::min(top_foc, bottom_foc); // Store state. + pending_mmco5_ = mmco5; prev_frame_num_ = slice_hdr.frame_num; if (slice_hdr.nal_ref_idc != 0) { if (mmco5) { @@ -180,13 +189,20 @@ int32_t top_foc = expected_pic_order_cnt + slice_hdr.delta_pic_order_cnt0; int32_t bottom_foc = top_foc + sps->offset_for_top_to_bottom_field + slice_hdr.delta_pic_order_cnt1; - *pic_order_cnt = std::min(top_foc, bottom_foc); + + // Compute POC. MMCO5 handling is the same as |pic_order_cnt_type| == 0. + if (mmco5) + *pic_order_cnt = 0; + else + *pic_order_cnt = std::min(top_foc, bottom_foc); // Store state. + pending_mmco5_ = mmco5; prev_frame_num_ = slice_hdr.frame_num; - prev_frame_num_offset_ = frame_num_offset; if (mmco5) prev_frame_num_offset_ = 0; + else + prev_frame_num_offset_ = frame_num_offset; break; } @@ -203,18 +219,27 @@ // 8-12, 8-13. Derive |temp_pic_order_count| (it's always the // |pic_order_cnt|, regardless of interlacing). + int32_t temp_pic_order_count; if (slice_hdr.idr_pic_flag) - *pic_order_cnt = 0; + temp_pic_order_count = 0; else if (slice_hdr.nal_ref_idc == 0) - *pic_order_cnt = 2 * (frame_num_offset + slice_hdr.frame_num) - 1; + temp_pic_order_count = 2 * (frame_num_offset + slice_hdr.frame_num) - 1; else - *pic_order_cnt = 2 * (frame_num_offset + slice_hdr.frame_num); + temp_pic_order_count = 2 * (frame_num_offset + slice_hdr.frame_num); + + // Compute POC. MMCO5 handling is the same as |pic_order_cnt_type| == 0. + if (mmco5) + *pic_order_cnt = 0; + else + *pic_order_cnt = temp_pic_order_count; // Store state. + pending_mmco5_ = mmco5; prev_frame_num_ = slice_hdr.frame_num; - prev_frame_num_offset_ = frame_num_offset; if (mmco5) prev_frame_num_offset_ = 0; + else + prev_frame_num_offset_ = frame_num_offset; break; }
diff --git a/media/video/h264_poc.h b/media/video/h264_poc.h index a2319ca..90d0eb9 100644 --- a/media/video/h264_poc.h +++ b/media/video/h264_poc.h
@@ -21,11 +21,21 @@ // Compute the picture order count for a slice, storing the result into // |*pic_order_cnt|. + // TODO(sandersd): Switch to a base::Optional<int32_t> return type. bool ComputePicOrderCnt( const H264SPS* sps, const H264SliceHeader& slice_hdr, int32_t* pic_order_cnt); + // As specified, the POC of a frame with MMCO5 changes (to zero) after + // decoding. We instead return 0 immediately, and flag that this has occurred + // by returning true here until ComputePicOrderCnt() is called again. + // + // Frames with MMCO5 do not reorder relative to frames earlier in decode + // order, but may reorder relative to frames later in decode order (just like + // IDRs). + bool IsPendingMMCO5() { return pending_mmco5_; } + // Reset computation state. It's best (although not strictly required) to call // this after a seek. void Reset(); @@ -35,6 +45,7 @@ int32_t ref_pic_order_cnt_lsb_; int32_t prev_frame_num_; int32_t prev_frame_num_offset_; + bool pending_mmco5_; DISALLOW_COPY_AND_ASSIGN(H264POC); };
diff --git a/media/video/h264_poc_unittest.cc b/media/video/h264_poc_unittest.cc index d2022d5..df040b3 100644 --- a/media/video/h264_poc_unittest.cc +++ b/media/video/h264_poc_unittest.cc
@@ -23,7 +23,15 @@ protected: bool ComputePOC() { - return h264_poc_.ComputePicOrderCnt(&sps_, slice_hdr_, &poc_); + bool result = h264_poc_.ComputePicOrderCnt(&sps_, slice_hdr_, &poc_); + + // Clear MMCO5. + slice_hdr_.adaptive_ref_pic_marking_mode_flag = false; + slice_hdr_.ref_pic_marking[0].memory_mgmnt_control_operation = 0; + slice_hdr_.ref_pic_marking[1].memory_mgmnt_control_operation = 0; + slice_hdr_.ref_pic_marking[2].memory_mgmnt_control_operation = 0; + + return result; } // Also sets as a reference frame and unsets IDR, which is required for @@ -105,14 +113,14 @@ ASSERT_TRUE(ComputePOC()); ASSERT_EQ(24, poc_); + // MMCO5 resets to 0. slice_hdr_.frame_num = 4; slice_hdr_.pic_order_cnt_lsb = 0; SetMMCO5(); ASSERT_TRUE(ComputePOC()); - ASSERT_EQ(32, poc_); + ASSERT_EQ(0, poc_); - // Due to the MMCO5 above, this is relative to 0, but also detected as - // positive wrapping. + // Still detected as positive wrapping. slice_hdr_.frame_num = 5; slice_hdr_.pic_order_cnt_lsb = 8; ASSERT_TRUE(ComputePOC()); @@ -184,7 +192,7 @@ SetMMCO5(); slice_hdr_.frame_num = 0; ASSERT_TRUE(ComputePOC()); - ASSERT_EQ(24, poc_); + ASSERT_EQ(0, poc_); // Ref frame, wrapping from before has been cleared. slice_hdr_.frame_num = 1; @@ -192,8 +200,7 @@ ASSERT_EQ(1, poc_); } -// Despite being invalid, videos with duplicate non-keyframe |frame_num| values -// are common. http://crbug.com/615289, http://crbug.com/616349. +// |frame_num| values may be duplicated by non-reference frames. TEST_F(H264POCTest, PicOrderCntType1_DupFrameNum) { sps_.pic_order_cnt_type = 1; sps_.log2_max_frame_num_minus4 = 0; // 16 @@ -215,8 +222,9 @@ ASSERT_EQ(1, poc_); // Duplicate |frame_num| frame. + slice_hdr_.nal_ref_idc = 0; slice_hdr_.frame_num = 1; - slice_hdr_.delta_pic_order_cnt0 = 1; + slice_hdr_.delta_pic_order_cnt0 = 2; ASSERT_TRUE(ComputePOC()); ASSERT_EQ(2, poc_); } @@ -276,7 +284,7 @@ SetMMCO5(); slice_hdr_.frame_num = 0; ASSERT_TRUE(ComputePOC()); - ASSERT_EQ(32, poc_); + ASSERT_EQ(0, poc_); // Ref frame, wrapping from before has been cleared. slice_hdr_.frame_num = 1;
diff --git a/mojo/edk/test/multiprocess_test_helper.cc b/mojo/edk/test/multiprocess_test_helper.cc index de6e2d9..4bc550f5 100644 --- a/mojo/edk/test/multiprocess_test_helper.cc +++ b/mojo/edk/test/multiprocess_test_helper.cc
@@ -58,7 +58,7 @@ MultiprocessTestHelper::MultiprocessTestHelper() {} MultiprocessTestHelper::~MultiprocessTestHelper() { - CHECK(!test_child_.IsValid()); + CHECK(!test_child_.process.IsValid()); } ScopedMessagePipeHandle MultiprocessTestHelper::StartChild( @@ -74,7 +74,7 @@ const std::string& switch_value, LaunchType launch_type) { CHECK(!test_child_name.empty()); - CHECK(!test_child_.IsValid()); + CHECK(!test_child_.process.IsValid()); std::string test_child_main = test_child_name + "TestChildMain"; @@ -168,22 +168,22 @@ if (launch_type == LaunchType::CHILD || launch_type == LaunchType::NAMED_CHILD) { DCHECK(server_handle.is_valid()); - process.Connect(test_child_.Handle(), + process.Connect(test_child_.process.Handle(), ConnectionParams(std::move(server_handle)), process_error_callback_); } - CHECK(test_child_.IsValid()); + CHECK(test_child_.process.IsValid()); return pipe; } int MultiprocessTestHelper::WaitForChildShutdown() { - CHECK(test_child_.IsValid()); + CHECK(test_child_.process.IsValid()); int rv = -1; - WaitForMultiprocessTestChildExit(test_child_, TestTimeouts::action_timeout(), - &rv); - test_child_.Close(); + WaitForMultiprocessTestChildExit(test_child_.process, + TestTimeouts::action_timeout(), &rv); + test_child_.process.Close(); return rv; }
diff --git a/mojo/edk/test/multiprocess_test_helper.h b/mojo/edk/test/multiprocess_test_helper.h index dd9bd6a6..c3b6e01 100644 --- a/mojo/edk/test/multiprocess_test_helper.h +++ b/mojo/edk/test/multiprocess_test_helper.h
@@ -80,7 +80,7 @@ // |EXPECT_TRUE(WaitForChildTestShutdown());|. bool WaitForChildTestShutdown(); - const base::Process& test_child() const { return test_child_; } + const base::Process& test_child() const { return test_child_.process; } // Used by macros in mojo/edk/test/mojo_test_base.h to support multiprocess // test client initialization. @@ -93,7 +93,7 @@ private: // Valid after |StartChild()| and before |WaitForChildShutdown()|. - base::Process test_child_; + base::SpawnChildResult test_child_; ProcessErrorCallback process_error_callback_;
diff --git a/net/android/BUILD.gn b/net/android/BUILD.gn index 1cf3789..ef2b43311 100644 --- a/net/android/BUILD.gn +++ b/net/android/BUILD.gn
@@ -126,7 +126,9 @@ ":net_java_test_support", "//base:base_java", "//base:base_java_test_support", + "//third_party/android_support_test_runner:rules_java", "//third_party/android_support_test_runner:runner_java", + "//third_party/junit", ] }
diff --git a/net/android/javatests/src/org/chromium/net/AndroidProxySelectorTest.java b/net/android/javatests/src/org/chromium/net/AndroidProxySelectorTest.java index 40d7db7..231e887 100644 --- a/net/android/javatests/src/org/chromium/net/AndroidProxySelectorTest.java +++ b/net/android/javatests/src/org/chromium/net/AndroidProxySelectorTest.java
@@ -15,8 +15,13 @@ package org.chromium.net; import android.support.test.filters.SmallTest; -import android.test.InstrumentationTestCase; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; + +import org.chromium.base.test.BaseJUnit4ClassRunner; import org.chromium.base.test.util.Feature; import java.net.Proxy; @@ -26,7 +31,8 @@ import java.util.List; import java.util.Properties; -public class AndroidProxySelectorTest extends InstrumentationTestCase { +@RunWith(BaseJUnit4ClassRunner.class) +public class AndroidProxySelectorTest { Properties mProperties; public AndroidProxySelectorTest() { @@ -34,7 +40,7 @@ mProperties = new Properties(); } - @Override + @Before public void setUp() { System.setProperties(mProperties); } @@ -52,7 +58,7 @@ return "DIRECT"; default: // If a new proxy type is supported in future, add a case to match it. - fail("Unknown proxy type" + type); + Assert.fail("Unknown proxy type" + type); return "unknown://"; } } @@ -69,7 +75,7 @@ static void checkMapping(String url, String expected) throws URISyntaxException { URI uri = new URI(url); List<Proxy> proxies = ProxySelector.getDefault().select(uri); - assertEquals("Mapping", expected, toString(proxies)); + Assert.assertEquals("Mapping", expected, toString(proxies)); } /** @@ -77,6 +83,7 @@ * * @throws Exception */ + @Test @SmallTest @Feature({"AndroidWebView"}) public void testNoProxy() throws Exception { @@ -90,6 +97,7 @@ * * @throws Exception */ + @Test @SmallTest @Feature({"AndroidWebView"}) public void testHttpProxyHostAndPort() throws Exception { @@ -105,6 +113,7 @@ * * @throws Exception */ + @Test @SmallTest @Feature({"AndroidWebView"}) public void testHttpProxyHostOnly() throws Exception { @@ -119,6 +128,7 @@ * * @throws Exception */ + @Test @SmallTest @Feature({"AndroidWebView"}) public void testHttpProxyPortOnly() throws Exception { @@ -133,6 +143,7 @@ * * @throws Exception */ + @Test @SmallTest @Feature({"AndroidWebView"}) public void testHttpNonProxyHosts1() throws Exception { @@ -148,6 +159,7 @@ * * @throws Exception */ + @Test @SmallTest @Feature({"AndroidWebView"}) public void testHttpNonProxyHosts2() throws Exception { @@ -164,6 +176,7 @@ * * @throws Exception */ + @Test @SmallTest @Feature({"AndroidWebView"}) public void testHttpNonProxyHosts3() throws Exception { @@ -180,6 +193,7 @@ * * @throws Exception */ + @Test @SmallTest @Feature({"AndroidWebView"}) public void testFtpNonProxyHosts() throws Exception { @@ -195,6 +209,7 @@ * * @throws Exception */ + @Test @SmallTest @Feature({"AndroidWebView"}) public void testFtpProxyHostAndPort() throws Exception { @@ -210,6 +225,7 @@ * * @throws Exception */ + @Test @SmallTest @Feature({"AndroidWebView"}) public void testFtpProxyHostOnly() throws Exception { @@ -224,6 +240,7 @@ * * @throws Exception */ + @Test @SmallTest @Feature({"AndroidWebView"}) public void testHttpsProxyHostAndPort() throws Exception { @@ -239,6 +256,7 @@ * * @throws Exception */ + @Test @SmallTest @Feature({"AndroidWebView"}) public void testDefaultProxyExplictPort() throws Exception { @@ -256,6 +274,7 @@ * * @throws Exception */ + @Test @SmallTest @Feature({"AndroidWebView"}) public void testFallbackToSocks() throws Exception { @@ -271,6 +290,7 @@ * * @throws Exception */ + @Test @SmallTest @Feature({"AndroidWebView"}) public void testSocksExplicitPort() throws Exception { @@ -284,6 +304,7 @@ * * @throws Exception */ + @Test @SmallTest @Feature({"AndroidWebView"}) public void testHttpProxySupercedesSocks() throws Exception {
diff --git a/net/android/javatests/src/org/chromium/net/NetErrorsTest.java b/net/android/javatests/src/org/chromium/net/NetErrorsTest.java index fb2a8b5..48e3c3e3 100644 --- a/net/android/javatests/src/org/chromium/net/NetErrorsTest.java +++ b/net/android/javatests/src/org/chromium/net/NetErrorsTest.java
@@ -9,11 +9,16 @@ package org.chromium.net; import android.support.test.filters.SmallTest; -import android.test.InstrumentationTestCase; +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; + +import org.chromium.base.test.BaseJUnit4ClassRunner; import org.chromium.base.test.util.Feature; -public class NetErrorsTest extends InstrumentationTestCase { +@RunWith(BaseJUnit4ClassRunner.class) +public class NetErrorsTest { // These are manually copied and should be kept in sync with net_error_list.h. private static final int IO_PENDING_ERROR = -1; private static final int FAILED_ERROR = -2; @@ -23,10 +28,11 @@ * * @throws Exception */ + @Test @SmallTest @Feature({"Android-AppBase"}) public void testExampleErrorDefined() throws Exception { - assertEquals(IO_PENDING_ERROR, NetError.ERR_IO_PENDING); - assertEquals(FAILED_ERROR, NetError.ERR_FAILED); + Assert.assertEquals(IO_PENDING_ERROR, NetError.ERR_IO_PENDING); + Assert.assertEquals(FAILED_ERROR, NetError.ERR_FAILED); } }
diff --git a/net/android/javatests/src/org/chromium/net/X509UtilTest.java b/net/android/javatests/src/org/chromium/net/X509UtilTest.java index bf90029..c6f9e93 100644 --- a/net/android/javatests/src/org/chromium/net/X509UtilTest.java +++ b/net/android/javatests/src/org/chromium/net/X509UtilTest.java
@@ -7,8 +7,13 @@ import static org.chromium.net.test.util.CertTestUtil.CERTS_DIRECTORY; import android.support.test.filters.MediumTest; -import android.test.InstrumentationTestCase; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; + +import org.chromium.base.test.BaseJUnit4ClassRunner; import org.chromium.net.test.util.CertTestUtil; import java.io.IOException; @@ -19,7 +24,8 @@ /** * Tests for org.chromium.net.X509Util. */ -public class X509UtilTest extends InstrumentationTestCase { +@RunWith(BaseJUnit4ClassRunner.class) +public class X509UtilTest { private static final String BAD_EKU_TEST_ROOT = "eku-test-root.pem"; private static final String CRITICAL_CODE_SIGNING_EE = "crit-codeSigning-chain.pem"; private static final String NON_CRITICAL_CODE_SIGNING_EE = "non-crit-codeSigning-chain.pem"; @@ -38,33 +44,33 @@ return bytes; } - @Override + @Before public void setUp() { X509Util.setDisableNativeCodeForTest(true); } + @Test @MediumTest public void testEkusVerified() throws GeneralSecurityException, IOException { X509Util.addTestRootCertificate(CertTestUtil.pemToDer(CERTS_DIRECTORY + BAD_EKU_TEST_ROOT)); X509Util.addTestRootCertificate(CertTestUtil.pemToDer(CERTS_DIRECTORY + GOOD_ROOT_CA)); - assertFalse(X509Util.verifyKeyUsage(X509Util.createCertificateFromBytes( + Assert.assertFalse(X509Util.verifyKeyUsage(X509Util.createCertificateFromBytes( CertTestUtil.pemToDer(CERTS_DIRECTORY + CRITICAL_CODE_SIGNING_EE)))); - assertFalse(X509Util.verifyKeyUsage(X509Util.createCertificateFromBytes( + Assert.assertFalse(X509Util.verifyKeyUsage(X509Util.createCertificateFromBytes( CertTestUtil.pemToDer(CERTS_DIRECTORY + NON_CRITICAL_CODE_SIGNING_EE)))); - assertFalse(X509Util.verifyKeyUsage( - X509Util.createCertificateFromBytes( - readFileBytes(CERTS_DIRECTORY + WEB_CLIENT_AUTH_EE)))); + Assert.assertFalse(X509Util.verifyKeyUsage(X509Util.createCertificateFromBytes( + readFileBytes(CERTS_DIRECTORY + WEB_CLIENT_AUTH_EE)))); - assertTrue(X509Util.verifyKeyUsage(X509Util.createCertificateFromBytes( + Assert.assertTrue(X509Util.verifyKeyUsage(X509Util.createCertificateFromBytes( CertTestUtil.pemToDer(CERTS_DIRECTORY + OK_CERT)))); try { X509Util.clearTestRootCertificates(); } catch (Exception e) { - fail("Could not clear test root certificates: " + e.toString()); + Assert.fail("Could not clear test root certificates: " + e.toString()); } } }
diff --git a/net/cert/cert_verify_proc_unittest.cc b/net/cert/cert_verify_proc_unittest.cc index d4a0886..f9ebaa8 100644 --- a/net/cert/cert_verify_proc_unittest.cc +++ b/net/cert/cert_verify_proc_unittest.cc
@@ -642,8 +642,8 @@ DigestAlgorithm tbs_algorithm; }; - // On iOS trying to import a certificate with mismatched signature will - // fail. Consequently the rest of the tests can't be performed. + // On some platforms trying to import a certificate with mismatched signature + // will fail. Consequently the rest of the tests can't be performed. WARN_UNUSED_RESULT bool SupportsImportingMismatchedAlgorithms() const { #if defined(OS_IOS) LOG(INFO) << "Skipping test on iOS because certs with mismatched "
diff --git a/net/dns/dns_util.cc b/net/dns/dns_util.cc index 217aedc..f80eaee 100644 --- a/net/dns/dns_util.cc +++ b/net/dns/dns_util.cc
@@ -15,20 +15,6 @@ #include "build/build_config.h" #include "net/base/address_list.h" -#if defined(OS_POSIX) -#include <netinet/in.h> -#if !defined(OS_NACL) -#include <net/if.h> -#if !defined(OS_ANDROID) -#include <ifaddrs.h> -#endif // !defined(OS_ANDROID) -#endif // !defined(OS_NACL) -#endif // defined(OS_POSIX) - -#if defined(OS_ANDROID) -#include "net/android/network_library.h" -#endif - namespace net { // Based on DJB's public domain code. @@ -110,57 +96,6 @@ return ret; } -bool HaveOnlyLoopbackAddresses() { -#if defined(OS_ANDROID) - return android::HaveOnlyLoopbackAddresses(); -#elif defined(OS_NACL) - NOTIMPLEMENTED(); - return false; -#elif defined(OS_POSIX) - struct ifaddrs* interface_addr = NULL; - int rv = getifaddrs(&interface_addr); - if (rv != 0) { - DVLOG(1) << "getifaddrs() failed with errno = " << errno; - return false; - } - - bool result = true; - for (struct ifaddrs* interface = interface_addr; - interface != NULL; - interface = interface->ifa_next) { - if (!(IFF_UP & interface->ifa_flags)) - continue; - if (IFF_LOOPBACK & interface->ifa_flags) - continue; - const struct sockaddr* addr = interface->ifa_addr; - if (!addr) - continue; - if (addr->sa_family == AF_INET6) { - // Safe cast since this is AF_INET6. - const struct sockaddr_in6* addr_in6 = - reinterpret_cast<const struct sockaddr_in6*>(addr); - const struct in6_addr* sin6_addr = &addr_in6->sin6_addr; - if (IN6_IS_ADDR_LOOPBACK(sin6_addr) || IN6_IS_ADDR_LINKLOCAL(sin6_addr)) - continue; - } - if (addr->sa_family != AF_INET6 && addr->sa_family != AF_INET) - continue; - - result = false; - break; - } - freeifaddrs(interface_addr); - return result; -#elif defined(OS_WIN) - // TODO(wtc): implement with the GetAdaptersAddresses function. - NOTIMPLEMENTED(); - return false; -#else - NOTIMPLEMENTED(); - return false; -#endif // defined(various platforms) -} - #if !defined(OS_NACL) namespace {
diff --git a/net/dns/dns_util.h b/net/dns/dns_util.h index c81ffde..06cc3d6f 100644 --- a/net/dns/dns_util.h +++ b/net/dns/dns_util.h
@@ -32,11 +32,6 @@ NET_EXPORT_PRIVATE std::string DNSDomainToString( const base::StringPiece& domain); -// Returns true if it can determine that only loopback addresses are configured. -// i.e. if only 127.0.0.1 and ::1 are routable. -// Also returns false if it cannot determine this. -NET_EXPORT_PRIVATE bool HaveOnlyLoopbackAddresses(); - #if !defined(OS_NACL) NET_EXPORT_PRIVATE base::TimeDelta GetTimeDeltaForConnectionTypeFromFieldTrialOrDefault(
diff --git a/net/dns/host_resolver_impl.cc b/net/dns/host_resolver_impl.cc index 7596c77..31e535d 100644 --- a/net/dns/host_resolver_impl.cc +++ b/net/dns/host_resolver_impl.cc
@@ -10,6 +10,16 @@ #include <netdb.h> #endif +#if defined(OS_POSIX) +#include <netinet/in.h> +#if !defined(OS_NACL) +#include <net/if.h> +#if !defined(OS_ANDROID) +#include <ifaddrs.h> +#endif // !defined(OS_ANDROID) +#endif // !defined(OS_NACL) +#endif // defined(OS_POSIX) + #include <cmath> #include <memory> #include <utility> @@ -69,6 +79,10 @@ #include "net/base/winsock_init.h" #endif +#if defined(OS_ANDROID) +#include "net/android/network_library.h" +#endif + namespace net { namespace { @@ -337,6 +351,60 @@ return true; } +// Returns true if it can determine that only loopback addresses are configured. +// i.e. if only 127.0.0.1 and ::1 are routable. +// Also returns false if it cannot determine this. +bool HaveOnlyLoopbackAddresses() { +#if defined(OS_ANDROID) + return android::HaveOnlyLoopbackAddresses(); +#elif defined(OS_NACL) + NOTIMPLEMENTED(); + return false; +#elif defined(OS_POSIX) + struct ifaddrs* interface_addr = NULL; + int rv = getifaddrs(&interface_addr); + if (rv != 0) { + DVLOG(1) << "getifaddrs() failed with errno = " << errno; + return false; + } + + bool result = true; + for (struct ifaddrs* interface = interface_addr; + interface != NULL; + interface = interface->ifa_next) { + if (!(IFF_UP & interface->ifa_flags)) + continue; + if (IFF_LOOPBACK & interface->ifa_flags) + continue; + const struct sockaddr* addr = interface->ifa_addr; + if (!addr) + continue; + if (addr->sa_family == AF_INET6) { + // Safe cast since this is AF_INET6. + const struct sockaddr_in6* addr_in6 = + reinterpret_cast<const struct sockaddr_in6*>(addr); + const struct in6_addr* sin6_addr = &addr_in6->sin6_addr; + if (IN6_IS_ADDR_LOOPBACK(sin6_addr) || IN6_IS_ADDR_LINKLOCAL(sin6_addr)) + continue; + } + if (addr->sa_family != AF_INET6 && addr->sa_family != AF_INET) + continue; + + result = false; + break; + } + freeifaddrs(interface_addr); + return result; +#elif defined(OS_WIN) + // TODO(wtc): implement with the GetAdaptersAddresses function. + NOTIMPLEMENTED(); + return false; +#else + NOTIMPLEMENTED(); + return false; +#endif // defined(various platforms) +} + // Creates NetLog parameters when the resolve failed. std::unique_ptr<base::Value> NetLogProcTaskFailedCallback( uint32_t attempt_number,
diff --git a/net/http/transport_security_state_static.h b/net/http/transport_security_state_static.h index 7b3069b..c1ed98a0 100644 --- a/net/http/transport_security_state_static.h +++ b/net/http/transport_security_state_static.h
@@ -588,6 +588,7 @@ "https://log.getdropbox.com/log/ocsp_expect_staple", "https://reporting.caddyserver.com/expect-staple", "https://asac.casa/expectstaple.jsp", + "https://scotthelme.report-uri.io/r/default/staple/reportOnly", NULL, }; @@ -811,15534 +812,17618 @@ 0xb3, 0x0b, 0xb4, 0xb0, 0x0c, 0x0d, 0xae, 0x0e, 0xf8, 0xea, 0x0f, 0x10, 0xeb, 0x11, 0xe3, 0x12, 0x13, 0xe1, 0x14, 0xff, 0xe2, 0xe7, 0xec, 0x16, 0xe5, 0x17, 0xb1, 0xb2, 0xc1, 0xb7, 0x1a, 0xb5, 0xb6, 0x1b, 0x1c, 0xf1, - 0x19, 0x1d, 0xfa, 0x1e, 0xf6, 0x1f, 0xe8, 0x20, 0xf3, 0x21, 0xf4, 0xee, + 0x19, 0x1d, 0xfa, 0x1e, 0xf6, 0x1f, 0x20, 0xe8, 0xf3, 0x21, 0xf4, 0xee, 0x22, 0x23, 0x18, 0x24, 0x15, 0x25, 0x0a, 0x26, }; static const uint8_t kPreloadedHSTSData[] = { - 0xf6, 0xec, 0xdb, 0xaa, 0x42, 0x52, 0xf3, 0x75, 0xf5, 0x8a, 0xd1, 0xe7, + 0xf6, 0xec, 0xdb, 0xaa, 0x42, 0x52, 0xf3, 0x77, 0xf5, 0x8a, 0xd1, 0xe7, 0x9c, 0xc6, 0xf7, 0xdf, 0x4b, 0x17, 0xfe, 0x6e, 0x63, 0xea, 0x47, 0xbc, - 0xac, 0x5f, 0xb5, 0x9e, 0xeb, 0x65, 0x8b, 0x9a, 0x11, 0x87, 0xd3, 0x87, + 0xac, 0x5f, 0xb5, 0x9e, 0xef, 0x65, 0x8b, 0x9a, 0x11, 0x87, 0xd3, 0x87, 0xd7, 0xfe, 0xc7, 0x04, 0x81, 0x88, 0x58, 0xb1, 0x7f, 0x10, 0xa2, 0xfb, 0x44, 0xb1, 0x7f, 0xce, 0x3c, 0x28, 0x3f, 0xc4, 0xb1, 0x68, 0xcc, 0x4d, 0xee, 0x22, 0x23, 0xc2, 0x18, 0x8b, 0xf8, 0x79, 0xe3, 0x0b, 0xa3, 0x73, - 0x56, 0x2e, 0x00, 0x96, 0x2f, 0x40, 0xa3, 0xd6, 0x2e, 0xeb, 0xcb, 0x17, - 0xff, 0xd3, 0xf9, 0x81, 0x31, 0xbd, 0x42, 0x73, 0xcb, 0x17, 0xfd, 0x87, - 0xeb, 0xcf, 0xfc, 0xee, 0x58, 0xb7, 0x16, 0x28, 0x67, 0x9e, 0xc7, 0xb7, - 0xc2, 0xee, 0x1c, 0xac, 0x5f, 0xfc, 0x59, 0xb6, 0xa4, 0x9d, 0xba, 0x82, - 0xc5, 0x41, 0x34, 0x31, 0x8c, 0xbc, 0x27, 0xfe, 0x43, 0xe2, 0x6b, 0xf8, - 0x22, 0x9f, 0x7d, 0xd6, 0x2f, 0x17, 0x5c, 0x58, 0xac, 0x3c, 0xc1, 0x17, - 0x5d, 0xe0, 0xd6, 0x2e, 0x67, 0x58, 0xbf, 0xd1, 0x99, 0xb3, 0xc8, 0x99, - 0x62, 0xb0, 0xf9, 0x7e, 0x33, 0xdf, 0x8b, 0x5f, 0xfe, 0x17, 0x7f, 0xcd, - 0xfe, 0xff, 0x9c, 0xd4, 0x16, 0x2f, 0xfe, 0xe3, 0xf6, 0x2c, 0x00, 0xb9, - 0xf1, 0x2c, 0x5f, 0xf3, 0x01, 0x8b, 0xaf, 0x7e, 0x56, 0x2f, 0xff, 0xbe, - 0xe2, 0x6e, 0xa1, 0xac, 0xea, 0x0e, 0x75, 0x8b, 0xfd, 0xf0, 0xe2, 0xe3, - 0xf4, 0x12, 0xc5, 0xba, 0x58, 0xa9, 0x44, 0xf6, 0x29, 0x31, 0xcd, 0x4a, - 0x73, 0x98, 0xa2, 0xe8, 0xe5, 0x0d, 0x7b, 0xfe, 0x07, 0x07, 0xf6, 0x86, - 0x71, 0x62, 0xff, 0xe6, 0xec, 0x42, 0x60, 0xc7, 0xf7, 0x35, 0x62, 0xfe, - 0x79, 0x39, 0x4c, 0x4b, 0x17, 0xf4, 0xc9, 0xca, 0x62, 0x58, 0xbe, 0x92, - 0x17, 0x3e, 0x7b, 0x5c, 0x2d, 0xa9, 0x4c, 0x51, 0xce, 0xbf, 0x0a, 0x2b, - 0x12, 0xc5, 0xfe, 0x81, 0x67, 0x62, 0xce, 0x2c, 0x56, 0x1e, 0x2b, 0x08, - 0xdf, 0xfc, 0x23, 0xfc, 0xb3, 0xaf, 0x13, 0x7d, 0x62, 0xff, 0xfd, 0x02, - 0x6f, 0x31, 0xf9, 0x23, 0x9f, 0xcc, 0x16, 0x2b, 0x88, 0x99, 0x0d, 0x16, - 0xec, 0xe2, 0xc5, 0xe6, 0x6d, 0xd5, 0x21, 0x69, 0x50, 0x3e, 0x5c, 0x24, - 0xdc, 0x5e, 0xff, 0xfe, 0xfb, 0x61, 0x37, 0xb9, 0xcd, 0xfe, 0xfd, 0xa7, - 0x8b, 0x17, 0xde, 0x26, 0x35, 0x62, 0xfd, 0x3a, 0xce, 0xbc, 0xb1, 0x67, - 0xd2, 0x2a, 0x7e, 0xba, 0x02, 0x3b, 0xd1, 0xe4, 0x35, 0x8b, 0xf3, 0x9b, - 0xed, 0x4a, 0xc5, 0xb8, 0xb1, 0x7e, 0x63, 0xfa, 0x60, 0xb1, 0x78, 0xdc, - 0x1a, 0xc5, 0x68, 0xf6, 0x18, 0x48, 0x45, 0x17, 0xff, 0xfd, 0xfc, 0xd4, - 0xf6, 0x0f, 0x4c, 0x0c, 0xd6, 0x9c, 0xd9, 0xd2, 0xc5, 0xf8, 0x29, 0xec, - 0xdf, 0x58, 0xbf, 0xde, 0x63, 0xb4, 0x1b, 0x4b, 0x15, 0x27, 0xbc, 0xe5, - 0x77, 0xb8, 0x1f, 0x96, 0x2a, 0x0b, 0x8f, 0x43, 0x79, 0xd4, 0x63, 0xdf, - 0x86, 0xc3, 0x1a, 0x91, 0x07, 0x21, 0x03, 0xe2, 0xee, 0xd0, 0xc8, 0x0c, - 0x82, 0xff, 0xfc, 0x2e, 0xf8, 0x66, 0x1c, 0x9b, 0xaf, 0x18, 0x67, 0xe3, - 0x96, 0x2e, 0xf7, 0x96, 0x2f, 0xff, 0x85, 0xee, 0x0f, 0xf3, 0xc9, 0xf8, - 0xa7, 0x8b, 0x17, 0xff, 0xcd, 0xfc, 0x2d, 0x6b, 0x3a, 0x87, 0x9c, 0xeb, - 0x15, 0x29, 0x8e, 0xc1, 0x90, 0xd1, 0x81, 0x28, 0xdd, 0xbc, 0xac, 0x5d, - 0xfc, 0x58, 0xbe, 0x3b, 0x85, 0xc5, 0x8b, 0xff, 0xff, 0xd9, 0x91, 0x44, - 0xcd, 0xb7, 0x3f, 0x9d, 0xb0, 0x7f, 0x9e, 0x0c, 0x6c, 0xb1, 0x7f, 0xf8, - 0xd7, 0xd7, 0xba, 0xdd, 0xf0, 0x28, 0x6c, 0xb1, 0x47, 0x47, 0x78, 0x09, - 0x3c, 0xf7, 0x7f, 0xcc, 0x19, 0x64, 0x5a, 0x90, 0x96, 0x29, 0xcf, 0xac, - 0x46, 0x17, 0x10, 0x4b, 0x15, 0x89, 0xe1, 0x6e, 0x31, 0xf8, 0xdc, 0x42, - 0x21, 0xbf, 0x8e, 0xfd, 0x72, 0x7a, 0x58, 0xbf, 0xf6, 0x17, 0x84, 0xc3, - 0xe4, 0x9a, 0xb1, 0x7f, 0xa4, 0x2e, 0x03, 0xde, 0xe9, 0x62, 0xa4, 0xfd, - 0xbc, 0x7f, 0x7f, 0x48, 0xfa, 0xe4, 0xc4, 0xb1, 0x52, 0x8f, 0x78, 0x42, - 0x9b, 0x84, 0x37, 0x37, 0x65, 0x8b, 0xe9, 0xdc, 0xe2, 0x58, 0xa7, 0x37, - 0xa4, 0x33, 0x73, 0xfd, 0x62, 0x86, 0x6d, 0xbb, 0x0f, 0xdf, 0xba, 0x1e, - 0x9a, 0x0b, 0x17, 0xed, 0x0f, 0x24, 0x0b, 0x17, 0xf0, 0x0b, 0x36, 0x0e, - 0x0b, 0x14, 0xe7, 0xb0, 0x22, 0x8b, 0xc2, 0x9d, 0x96, 0x2f, 0x9f, 0x4d, - 0x05, 0x8b, 0xd3, 0xee, 0x1c, 0xf0, 0x3e, 0x3d, 0x52, 0x98, 0xb7, 0xe1, - 0x04, 0x4c, 0x37, 0xfe, 0x2f, 0x7f, 0x20, 0x14, 0xf5, 0xc5, 0x8b, 0xfe, - 0xeb, 0x9e, 0x7d, 0xb6, 0x7f, 0x2c, 0x5f, 0xf1, 0x14, 0x9b, 0xad, 0x38, - 0x4b, 0x17, 0xff, 0xb6, 0x1e, 0x9b, 0x72, 0xce, 0xda, 0x7e, 0x2c, 0x54, - 0xa3, 0x17, 0x0f, 0x44, 0x75, 0x7f, 0xf1, 0x7b, 0xed, 0x03, 0x5b, 0xc2, - 0x65, 0x8b, 0x87, 0x2b, 0x15, 0x29, 0xc8, 0x6a, 0x30, 0x66, 0x2e, 0x24, - 0x5b, 0x80, 0xcb, 0x17, 0xf6, 0xfa, 0xc8, 0x47, 0x62, 0xc5, 0x39, 0xe4, - 0x88, 0x5e, 0xff, 0x3f, 0x67, 0xec, 0x77, 0xf2, 0xc5, 0x86, 0xb1, 0x7f, - 0xb9, 0x3a, 0x8a, 0x27, 0xfa, 0xc5, 0xfb, 0x34, 0x29, 0x02, 0xc5, 0x0c, - 0xfc, 0x38, 0x24, 0x11, 0xb5, 0xfd, 0xa9, 0x3e, 0x11, 0xd6, 0x2f, 0xf1, - 0x3f, 0x1c, 0xba, 0x82, 0xc5, 0x68, 0xf8, 0x02, 0x2d, 0xb9, 0xf6, 0x58, - 0xbf, 0x7f, 0x00, 0x19, 0xd6, 0x2f, 0x1c, 0x0e, 0xb1, 0x7f, 0x69, 0xb8, - 0xd9, 0xf5, 0x8a, 0x63, 0xca, 0x10, 0xed, 0x71, 0x12, 0xbe, 0x74, 0xba, - 0x63, 0xd6, 0x2f, 0xf6, 0x72, 0x2f, 0xb8, 0x5e, 0x58, 0xbf, 0xf8, 0x8a, - 0x7a, 0xfb, 0xfb, 0x82, 0x8f, 0x58, 0xa9, 0x3f, 0xe7, 0x36, 0xbf, 0x8f, - 0x31, 0x81, 0x04, 0x12, 0xc5, 0xb8, 0xb1, 0x52, 0x78, 0xec, 0x6b, 0x43, - 0x4f, 0xbd, 0xe1, 0x5a, 0x72, 0x3e, 0x42, 0x63, 0xb9, 0x9e, 0xa5, 0x5d, - 0x06, 0x42, 0x9d, 0xe1, 0x20, 0xd2, 0x84, 0xaf, 0xf8, 0xf9, 0xad, 0x3f, - 0x66, 0xdd, 0x62, 0xfe, 0xcc, 0x1f, 0x69, 0xfa, 0xc5, 0xfe, 0x7f, 0xe6, - 0xec, 0xfb, 0x2c, 0x5f, 0xfd, 0xbe, 0xa4, 0xd9, 0x2f, 0x46, 0xa8, 0xd5, - 0xde, 0x2c, 0x5b, 0xb9, 0x62, 0xf7, 0x7a, 0x43, 0x58, 0xbf, 0x8e, 0x2f, - 0x8c, 0x6c, 0xb1, 0x7f, 0x6b, 0x3e, 0xfd, 0x12, 0xc5, 0xf1, 0xa0, 0x9f, - 0x2c, 0x5b, 0xf2, 0x7a, 0x4e, 0x5d, 0x7f, 0xe2, 0xcd, 0xbf, 0x9d, 0xde, - 0x7d, 0x2c, 0x5f, 0xdf, 0x21, 0x31, 0xbb, 0xac, 0x5f, 0xf6, 0x67, 0x3d, - 0xfc, 0xde, 0x56, 0x2f, 0xfd, 0x9e, 0x35, 0xf7, 0xf7, 0x33, 0x65, 0x8b, - 0xfa, 0x75, 0x83, 0x68, 0x2c, 0x56, 0xc9, 0xe0, 0x8e, 0x10, 0x3b, 0x93, - 0x3a, 0x14, 0x46, 0x1d, 0x8e, 0x43, 0x42, 0xb8, 0xb8, 0xb1, 0x7f, 0x63, - 0x77, 0xff, 0x6d, 0x96, 0x2a, 0x55, 0x84, 0xc1, 0x60, 0x62, 0xb9, 0x1f, - 0x19, 0x37, 0x88, 0x5e, 0xff, 0xb7, 0x0f, 0xcf, 0x00, 0xb3, 0xeb, 0x17, - 0xff, 0xfe, 0x7f, 0x49, 0xc9, 0x8d, 0xfb, 0xfa, 0x61, 0x14, 0x27, 0x5b, - 0x2c, 0x5f, 0xf1, 0x4e, 0x6d, 0xee, 0x66, 0xcb, 0x17, 0xff, 0x71, 0xc2, - 0xf7, 0x30, 0xe5, 0x21, 0x2c, 0x5f, 0xfe, 0x62, 0x90, 0x4f, 0xdf, 0x42, - 0x63, 0xac, 0x5f, 0xfe, 0x70, 0x6a, 0x60, 0xfc, 0xe4, 0xea, 0x0b, 0x17, - 0xff, 0x73, 0x22, 0x29, 0x3e, 0xb5, 0x3d, 0x2c, 0x56, 0x91, 0x21, 0xe4, - 0xab, 0xfe, 0x17, 0x7e, 0x3c, 0xf7, 0x33, 0xeb, 0x15, 0x27, 0xc4, 0xc4, - 0x75, 0xd2, 0x74, 0x1a, 0x46, 0xf4, 0x67, 0x57, 0xfd, 0xbe, 0x16, 0x6d, - 0xb0, 0x89, 0x62, 0xd1, 0xeb, 0x17, 0xda, 0xe6, 0x04, 0xb1, 0x7e, 0x22, - 0x9e, 0x83, 0x93, 0x73, 0x82, 0xb7, 0xff, 0x6a, 0x4d, 0x92, 0x9d, 0xe5, - 0xfe, 0xb1, 0x7f, 0xee, 0xd8, 0x3f, 0xcf, 0x06, 0x36, 0x58, 0xbf, 0x9f, - 0x9a, 0xd4, 0xc1, 0x62, 0xf1, 0x34, 0x16, 0x2f, 0xcf, 0x1d, 0x80, 0x95, - 0x8b, 0xf7, 0x85, 0xa6, 0xe6, 0x1e, 0x37, 0x87, 0x29, 0x61, 0xcd, 0xf5, - 0x62, 0x61, 0xdb, 0xa0, 0xb4, 0x2c, 0xaf, 0xfb, 0x6f, 0xe7, 0xb8, 0x4f, - 0x12, 0xc5, 0xfc, 0xf8, 0x5d, 0x43, 0x8b, 0x17, 0xdb, 0x1c, 0x46, 0xac, - 0x5f, 0xfe, 0xe3, 0xf4, 0x16, 0x6f, 0x24, 0x26, 0x82, 0xc5, 0xb3, 0x64, - 0x50, 0x68, 0xb8, 0x04, 0xd7, 0xff, 0xfb, 0x08, 0x63, 0x90, 0x38, 0x67, - 0xe3, 0xfa, 0x7a, 0x09, 0x62, 0xff, 0x8b, 0xdc, 0xf6, 0x60, 0x5c, 0x58, - 0xb9, 0xbe, 0xb1, 0x58, 0x7a, 0x3d, 0x1d, 0x5f, 0xfd, 0xf7, 0xf7, 0x3e, - 0xf8, 0x22, 0xf2, 0xc5, 0xff, 0xfa, 0x28, 0x48, 0x35, 0x9b, 0xcc, 0x1f, - 0x4f, 0xc5, 0x8b, 0xf3, 0x03, 0x90, 0x95, 0x8a, 0x94, 0x72, 0xc0, 0x8b, - 0x11, 0x09, 0x5e, 0xfe, 0x9e, 0x98, 0x7f, 0xc5, 0x8b, 0xff, 0xda, 0xf0, - 0x98, 0x32, 0xf7, 0xc4, 0xd0, 0x58, 0xbe, 0xfc, 0x6f, 0xdf, 0x23, 0x5a, - 0xc5, 0x4a, 0x20, 0x71, 0x32, 0xa5, 0x91, 0x51, 0x03, 0xd1, 0xb7, 0x64, - 0x7b, 0x5b, 0x9c, 0x3b, 0xa6, 0x8f, 0x3f, 0x1a, 0x93, 0x1a, 0x94, 0x36, - 0xf8, 0x6d, 0xe8, 0xe6, 0x44, 0x74, 0x14, 0x2b, 0xef, 0xd1, 0x42, 0x75, - 0xb2, 0xc5, 0xe8, 0xd3, 0x3b, 0x2c, 0x54, 0x0f, 0x3d, 0x8a, 0xef, 0xfd, - 0x9e, 0x62, 0x03, 0x1c, 0xee, 0xb1, 0x7f, 0x49, 0x40, 0x1d, 0x80, 0xb1, - 0x7b, 0x77, 0xd9, 0x62, 0xff, 0xff, 0xc2, 0xfe, 0x0f, 0xdf, 0xc3, 0xe7, - 0xfe, 0xcf, 0xe9, 0xf7, 0x16, 0x2f, 0xfa, 0x7c, 0xf0, 0x7d, 0x69, 0xd6, - 0x2f, 0xfc, 0x44, 0xc6, 0x87, 0xad, 0x37, 0x4b, 0x17, 0xb9, 0x84, 0xb1, - 0x7f, 0xba, 0xfe, 0x0f, 0x4d, 0xba, 0xc5, 0x62, 0x24, 0xdd, 0x05, 0x87, - 0x2a, 0x55, 0x08, 0xc0, 0x84, 0xd3, 0xde, 0x8c, 0x1c, 0x7c, 0x9b, 0x39, - 0x0c, 0xbb, 0xff, 0xd8, 0x3f, 0xe3, 0x91, 0x66, 0xec, 0x4b, 0x17, 0x67, - 0x72, 0xc5, 0xf8, 0x32, 0x2c, 0x8f, 0x58, 0xa9, 0x44, 0x61, 0xa8, 0xe1, - 0x8d, 0x5f, 0xed, 0x10, 0xba, 0xf1, 0x4a, 0xc5, 0xbb, 0xc5, 0x8b, 0x77, - 0x2c, 0x54, 0x9f, 0x00, 0x0d, 0x3b, 0x85, 0xee, 0xce, 0x92, 0x2d, 0x29, - 0x16, 0x06, 0x8d, 0x48, 0x06, 0x2f, 0xf7, 0xb3, 0x40, 0x3b, 0xf1, 0x22, - 0x30, 0xd3, 0xdc, 0x71, 0xac, 0x5f, 0xff, 0xb7, 0xfb, 0x17, 0xb9, 0xa9, - 0x17, 0x89, 0xfb, 0x2c, 0x5f, 0xbe, 0xfd, 0xb2, 0x25, 0x8a, 0xd9, 0x10, - 0x70, 0x58, 0xa9, 0x4c, 0x19, 0xd1, 0xda, 0x13, 0x77, 0xf4, 0x1c, 0xbd, - 0x20, 0x58, 0xa5, 0x8b, 0xc3, 0x14, 0xc4, 0x6e, 0x40, 0x5b, 0x7c, 0x53, - 0xd7, 0x16, 0x2b, 0x47, 0xad, 0xd8, 0xce, 0xff, 0xff, 0xfa, 0x4b, 0x76, - 0xf3, 0x74, 0x0f, 0x73, 0x08, 0x98, 0xd0, 0xf5, 0xa6, 0xe9, 0x62, 0xfa, - 0x40, 0x7c, 0x58, 0xa0, 0x22, 0x8b, 0xd0, 0x80, 0xbf, 0xe1, 0xf3, 0x99, - 0xa1, 0xff, 0x16, 0x2f, 0xff, 0x77, 0x7a, 0x42, 0x9e, 0x7d, 0xbb, 0x60, - 0xd6, 0x2f, 0xef, 0xbe, 0xf2, 0x77, 0x58, 0xbf, 0xd8, 0x76, 0xe8, 0xd8, - 0x74, 0xb1, 0x7f, 0xd8, 0x37, 0xe0, 0xd9, 0x82, 0x58, 0xbd, 0xef, 0x36, - 0x8f, 0xc0, 0x06, 0xf7, 0xfa, 0x41, 0xb3, 0x42, 0x63, 0xd6, 0x2f, 0xff, - 0xee, 0x3f, 0xbf, 0x83, 0xcd, 0xe7, 0xce, 0x59, 0xd2, 0xc5, 0x4a, 0x6c, - 0x79, 0x09, 0xe2, 0x33, 0xf1, 0xbd, 0xff, 0xf8, 0xb0, 0x0c, 0x40, 0x0c, - 0xfe, 0x13, 0x6d, 0x2b, 0x15, 0x8a, 0xdc, 0x7a, 0x86, 0x33, 0x94, 0x44, - 0x74, 0x51, 0xd9, 0xf9, 0x02, 0xf7, 0x9f, 0x4b, 0x16, 0x8c, 0x8d, 0xdd, - 0x79, 0xbf, 0x78, 0x3d, 0x1a, 0xc6, 0x26, 0x36, 0x3d, 0xa1, 0x37, 0x08, - 0x43, 0x0e, 0x3c, 0xfc, 0x9d, 0xcd, 0x36, 0x3c, 0x1d, 0xe5, 0x00, 0x75, - 0x19, 0xe3, 0xc2, 0x9e, 0x28, 0xce, 0x75, 0x1e, 0x21, 0xe1, 0x15, 0xf9, - 0x78, 0x2c, 0x98, 0x03, 0xce, 0xfc, 0xbc, 0xa5, 0x9e, 0xf2, 0x92, 0x09, - 0xe9, 0x67, 0x82, 0x87, 0xb0, 0x50, 0x91, 0x8e, 0x8e, 0x1c, 0x39, 0xc3, - 0x3e, 0xe6, 0x3b, 0xff, 0xff, 0x98, 0xf1, 0x8f, 0xad, 0x0b, 0x5a, 0x92, - 0xc3, 0x5f, 0xff, 0xc0, 0xd6, 0x2f, 0x0b, 0xd8, 0xb1, 0x7f, 0xe2, 0xce, - 0xb7, 0x9f, 0xe6, 0xb1, 0x62, 0xb4, 0x7b, 0x9e, 0x1d, 0xbf, 0xc2, 0xea, - 0x36, 0xe1, 0xdf, 0x8b, 0x17, 0xff, 0x1a, 0x14, 0x7e, 0xc3, 0x8d, 0x8c, - 0x33, 0xf1, 0xcb, 0x17, 0xe9, 0xd9, 0xb5, 0xba, 0xc5, 0xcf, 0xd9, 0x62, - 0xf4, 0xfb, 0x8b, 0x17, 0xb8, 0x23, 0xe8, 0xf8, 0x00, 0x54, 0x43, 0x35, - 0x1a, 0x91, 0xf0, 0xf0, 0xb8, 0xbf, 0xd8, 0x0e, 0x66, 0xec, 0x35, 0x8b, - 0xf1, 0x30, 0x5c, 0xe2, 0xc5, 0x61, 0xee, 0xe8, 0xd2, 0xf8, 0x5e, 0xc2, - 0x58, 0xbe, 0xdd, 0x9b, 0x75, 0x49, 0x44, 0x5e, 0x36, 0x78, 0xb1, 0x7f, - 0x7e, 0x7d, 0x3d, 0x04, 0xb1, 0x67, 0x58, 0xbe, 0x28, 0x39, 0xd6, 0x2f, - 0xd0, 0xc2, 0x71, 0xac, 0x56, 0x22, 0xa1, 0xc7, 0xbe, 0x60, 0xc2, 0x3e, - 0x22, 0xbf, 0xc4, 0x26, 0x80, 0x87, 0x8b, 0x17, 0xe7, 0x21, 0xb6, 0xeb, - 0x15, 0xb2, 0x73, 0xba, 0x22, 0x3c, 0x36, 0x78, 0x8f, 0xd8, 0xce, 0xfb, - 0xf9, 0xac, 0x58, 0xbc, 0xf1, 0x77, 0x2c, 0x5f, 0x66, 0xc7, 0xf2, 0xc5, - 0x49, 0xf3, 0xfc, 0x88, 0x88, 0x6f, 0x49, 0x6e, 0xb1, 0x7c, 0xdf, 0x9f, - 0xac, 0x5e, 0x7c, 0x09, 0x62, 0xf1, 0xf9, 0x2b, 0x15, 0xb1, 0xfc, 0xee, - 0x3b, 0x1e, 0x44, 0x21, 0xdb, 0x6c, 0xb1, 0x7f, 0x7d, 0x88, 0x61, 0xf4, - 0xb1, 0x7f, 0xfc, 0xc6, 0x99, 0xe3, 0x64, 0xa1, 0x9f, 0x73, 0xac, 0x58, - 0x52, 0x89, 0x57, 0x13, 0x23, 0x0b, 0x84, 0x1a, 0xc5, 0xe1, 0xc9, 0xd6, - 0x2f, 0x8d, 0x0c, 0xb7, 0x58, 0xa1, 0x9e, 0x19, 0xa3, 0xb7, 0xda, 0x79, - 0x3a, 0xc5, 0xff, 0xf4, 0x36, 0x8d, 0x53, 0x1a, 0x6d, 0xbe, 0x8c, 0x33, - 0xf1, 0xcb, 0x17, 0xf3, 0x37, 0x5f, 0xcc, 0x58, 0xa9, 0x4c, 0xd1, 0xd7, - 0x18, 0x8c, 0x04, 0x44, 0xcd, 0x7e, 0xd3, 0xee, 0xfd, 0x96, 0x2f, 0x4e, - 0x12, 0xc5, 0xfc, 0xe7, 0x1e, 0x9b, 0x75, 0x8a, 0x19, 0xe5, 0x7c, 0x6e, - 0xfc, 0xc6, 0xe7, 0xd9, 0x62, 0xb0, 0xf2, 0x84, 0x45, 0x7f, 0xff, 0x08, - 0x98, 0xd3, 0x3c, 0x6c, 0x94, 0x33, 0xee, 0x75, 0x8b, 0xed, 0x6b, 0x23, - 0x96, 0x28, 0xe8, 0x83, 0x65, 0xdb, 0xfd, 0x25, 0x01, 0xfd, 0xce, 0xb1, - 0x7f, 0xff, 0xde, 0xcf, 0x66, 0x80, 0x76, 0x84, 0xf1, 0xf8, 0xfd, 0x79, - 0x62, 0xf6, 0xcc, 0x4b, 0x15, 0x88, 0x84, 0x13, 0x3d, 0x1a, 0x8d, 0x9e, - 0x42, 0xde, 0xff, 0xb3, 0xad, 0xc9, 0xb3, 0xad, 0xd6, 0x2f, 0xf7, 0x5b, - 0x93, 0x67, 0x5b, 0xac, 0x5f, 0x9a, 0x05, 0x3c, 0x30, 0xfc, 0xf0, 0xf2, - 0xf6, 0xc2, 0xf2, 0xc5, 0xdb, 0x0d, 0x62, 0xb0, 0xdc, 0x30, 0xfd, 0xf0, - 0x59, 0xf6, 0x58, 0xbe, 0x29, 0xce, 0x96, 0x2a, 0x4f, 0x17, 0xc4, 0x77, - 0x86, 0xfd, 0x96, 0x2d, 0x19, 0x2c, 0xb9, 0x4d, 0x88, 0xa1, 0x19, 0x98, - 0xe1, 0x15, 0x91, 0xdf, 0x6f, 0x0b, 0xa7, 0x85, 0x31, 0xe1, 0xad, 0xf8, - 0xd9, 0xd9, 0x1c, 0xa1, 0x7f, 0xc8, 0x52, 0x7a, 0x1f, 0x7d, 0xa1, 0x39, - 0x1c, 0xea, 0x1b, 0x27, 0x71, 0x0d, 0xed, 0xe0, 0x75, 0x8b, 0xdf, 0x98, - 0xf5, 0x8b, 0xe2, 0x60, 0xbe, 0xb1, 0x7e, 0xe0, 0x98, 0x80, 0xb1, 0x7d, - 0x84, 0xfe, 0x58, 0xbd, 0xfc, 0x02, 0xc5, 0xec, 0x3c, 0x64, 0xa3, 0x21, - 0xc7, 0xe2, 0x20, 0xf1, 0x1c, 0x71, 0x47, 0x71, 0x0d, 0xff, 0x7d, 0xf5, - 0xf6, 0xe6, 0x06, 0xb1, 0x70, 0xc9, 0x62, 0xfe, 0x80, 0xf4, 0xe2, 0xd9, - 0x62, 0xfd, 0xac, 0xe6, 0x04, 0xb1, 0x7f, 0xa7, 0xcd, 0xf3, 0x07, 0x2b, - 0x17, 0xe8, 0xa7, 0xe2, 0xd9, 0x62, 0xfc, 0xd0, 0xf3, 0xec, 0xb1, 0x58, - 0x7a, 0x8e, 0x57, 0x79, 0xbc, 0xeb, 0x17, 0x4c, 0x66, 0x26, 0xdd, 0xd1, - 0xd3, 0x8b, 0xe8, 0xc0, 0xe5, 0x3f, 0x84, 0x47, 0x08, 0x28, 0x6a, 0x95, - 0x79, 0x1e, 0xf5, 0xec, 0x0b, 0x16, 0x2f, 0x98, 0xe5, 0x2b, 0x17, 0xff, - 0x39, 0x4f, 0x9f, 0x4e, 0x7c, 0x1a, 0xc5, 0x11, 0xf1, 0xf7, 0x10, 0xdd, - 0x3b, 0x2c, 0x56, 0x1b, 0xc1, 0x12, 0x5c, 0x2f, 0xac, 0x5f, 0xcd, 0x0e, - 0xb9, 0x3b, 0x2c, 0x5e, 0xd9, 0x82, 0x58, 0xbe, 0xe7, 0xda, 0x0b, 0x15, - 0xb1, 0xe1, 0x30, 0xfd, 0xff, 0x37, 0x45, 0x9d, 0xb4, 0xfc, 0x58, 0xbf, - 0x3c, 0xc1, 0xa0, 0xb1, 0x5b, 0x26, 0x1c, 0x31, 0x8d, 0x39, 0x1c, 0x8b, - 0xe7, 0x77, 0xf6, 0x6c, 0x39, 0xc1, 0xac, 0x5f, 0xe6, 0xfb, 0x61, 0xdf, - 0x8b, 0x17, 0xc3, 0xfb, 0xc4, 0xb1, 0x60, 0x96, 0x2b, 0x11, 0x2e, 0x69, - 0x73, 0x19, 0x78, 0x92, 0xfc, 0x4d, 0xdd, 0x9b, 0x2c, 0x5f, 0xf0, 0x24, - 0xb3, 0xdc, 0x93, 0xac, 0x5e, 0x09, 0xbe, 0xb1, 0x74, 0x8d, 0x62, 0xa4, - 0xda, 0xfc, 0x7a, 0xf1, 0x4c, 0x7a, 0xc5, 0xff, 0x67, 0xbe, 0xdb, 0xc9, - 0x0d, 0x62, 0xff, 0x17, 0xb9, 0xac, 0x93, 0xac, 0x54, 0x9f, 0x63, 0x1c, - 0xdf, 0x9c, 0x88, 0x51, 0xeb, 0x17, 0xfd, 0xcc, 0x1e, 0x6a, 0x13, 0xa5, - 0x8a, 0x93, 0xe3, 0xd1, 0x55, 0xb6, 0x58, 0xa9, 0x36, 0x98, 0x43, 0x7f, - 0x67, 0xfe, 0x22, 0xd9, 0x62, 0xf4, 0xe8, 0xd5, 0x8b, 0xb3, 0x4b, 0x15, - 0xb9, 0xb5, 0xf0, 0xf5, 0xfa, 0x0d, 0xe8, 0x32, 0xc5, 0xf4, 0x80, 0x12, - 0xb1, 0x7f, 0xa7, 0x5b, 0x61, 0xf0, 0xeb, 0x15, 0x27, 0xfc, 0x45, 0x1c, - 0x22, 0xbf, 0xe2, 0x1e, 0x68, 0x6c, 0xc3, 0x58, 0xb0, 0x96, 0x2a, 0x4f, - 0x29, 0x8e, 0x29, 0x62, 0xc4, 0xb1, 0xb1, 0x32, 0xfd, 0xb6, 0x99, 0xbc, - 0xb1, 0x4e, 0x79, 0x2c, 0x41, 0x71, 0xc6, 0xb1, 0x7d, 0xf7, 0xfc, 0x67, - 0x7a, 0xbe, 0x94, 0x38, 0x5e, 0x64, 0x65, 0xc6, 0xc3, 0x8f, 0x73, 0xc7, - 0x2b, 0x89, 0xb7, 0x44, 0x07, 0x84, 0x5f, 0xe1, 0x6e, 0x43, 0xfc, 0x64, - 0xf4, 0x28, 0x02, 0x77, 0x8e, 0x75, 0xee, 0x20, 0xbd, 0xcc, 0x25, 0x8b, - 0xed, 0xd9, 0xb7, 0x54, 0x97, 0xa5, 0xff, 0xd2, 0x01, 0xfe, 0x79, 0x87, - 0x98, 0xf5, 0x8a, 0xd1, 0xfc, 0x1c, 0xc6, 0xfc, 0xfd, 0xdb, 0x8b, 0x65, - 0x8b, 0x41, 0x62, 0xc7, 0x58, 0xbc, 0x53, 0x05, 0x8a, 0x93, 0xc0, 0x61, - 0x2f, 0x09, 0x5d, 0x20, 0x58, 0xbd, 0xf9, 0xe9, 0x62, 0xe9, 0xe9, 0x62, - 0xf7, 0x1c, 0xd5, 0x8a, 0x34, 0xf5, 0x3e, 0x3d, 0xe1, 0x8b, 0xec, 0xf3, - 0xec, 0xb1, 0x7f, 0x6c, 0x1c, 0x73, 0x10, 0x16, 0x2f, 0xfc, 0xc4, 0x0c, - 0xf4, 0x93, 0x81, 0x62, 0xa4, 0xfb, 0xe3, 0x8c, 0xed, 0x19, 0x05, 0x54, - 0x59, 0x09, 0x4d, 0x11, 0x33, 0x70, 0x0b, 0x44, 0xd7, 0x1c, 0x60, 0x1c, - 0x24, 0xaf, 0xc7, 0xf7, 0x1b, 0xa5, 0x8b, 0xfe, 0x84, 0x66, 0x6b, 0x76, - 0x6d, 0xd5, 0x22, 0x31, 0x7f, 0xec, 0xf1, 0x30, 0x30, 0xb3, 0x4b, 0x17, - 0xff, 0xde, 0xeb, 0x77, 0xd1, 0x9a, 0x9d, 0x9b, 0x5b, 0xac, 0x5a, 0x32, - 0x53, 0x07, 0x62, 0xa2, 0x4b, 0xe1, 0xe5, 0xff, 0xe8, 0xc3, 0xb4, 0x23, - 0x33, 0x5b, 0xb3, 0x6e, 0xa9, 0x1e, 0x0b, 0xf6, 0xb7, 0x66, 0xdd, 0x52, - 0x3f, 0x97, 0x76, 0x75, 0x8b, 0xf4, 0x61, 0xda, 0x11, 0x98, 0x7a, 0x0e, - 0x6f, 0x7f, 0xfa, 0x30, 0xed, 0x08, 0xcc, 0xd6, 0xec, 0xdb, 0xaa, 0x48, - 0x62, 0xff, 0xfe, 0xc3, 0xcc, 0x23, 0x03, 0x29, 0x1f, 0xf3, 0x7c, 0xd2, - 0xc5, 0xfb, 0x5b, 0xb3, 0x6e, 0xa9, 0x22, 0x0b, 0xe9, 0x29, 0xe9, 0x62, - 0xf3, 0x42, 0x33, 0x0f, 0x66, 0x3c, 0xde, 0xfe, 0x6d, 0xe3, 0x00, 0xfb, - 0x2c, 0x51, 0xcf, 0xaf, 0xb1, 0xc5, 0xff, 0xa1, 0x18, 0x2e, 0x19, 0x3c, - 0x98, 0x2c, 0x54, 0x61, 0xf4, 0x49, 0x25, 0xff, 0xa2, 0x7f, 0xf5, 0x9e, - 0x1e, 0x1d, 0x62, 0xff, 0xf3, 0x46, 0x0d, 0x89, 0xb7, 0x30, 0x36, 0x3a, - 0xc5, 0xfc, 0xfe, 0x7d, 0x30, 0x16, 0x2f, 0xf0, 0xbd, 0xf9, 0x29, 0xf2, - 0xc5, 0xf6, 0x7b, 0x00, 0xb1, 0x7e, 0x21, 0x34, 0x38, 0xb1, 0x63, 0xac, - 0x5f, 0xf7, 0x6c, 0xea, 0x1a, 0x66, 0x82, 0xc5, 0xe2, 0x68, 0xc8, 0x23, - 0xe3, 0x45, 0xa4, 0x67, 0xe2, 0x28, 0xe2, 0x80, 0xc4, 0xaf, 0xe8, 0xa3, - 0x38, 0x53, 0xb2, 0xc5, 0xf4, 0x94, 0xfd, 0x62, 0xfb, 0x35, 0x27, 0x58, - 0xa1, 0x9e, 0x1f, 0xc8, 0x6f, 0xff, 0xdf, 0xc2, 0xc3, 0x7e, 0xd0, 0xf8, - 0x4c, 0x19, 0xd6, 0x2f, 0x33, 0x6e, 0xa9, 0x24, 0x4b, 0xe8, 0x61, 0x6c, - 0xb1, 0x5b, 0x9e, 0x6c, 0x45, 0x55, 0x04, 0x64, 0xea, 0x14, 0xb7, 0xe1, - 0x78, 0xa7, 0xeb, 0x17, 0xfe, 0xec, 0xda, 0xe3, 0x7f, 0x93, 0xb2, 0xc5, - 0xfa, 0x62, 0xd4, 0x9d, 0x62, 0xbe, 0x7d, 0x7c, 0x42, 0xbf, 0xf9, 0xba, - 0xe7, 0xc2, 0x90, 0x18, 0x19, 0xd6, 0x2f, 0xf4, 0x27, 0x5b, 0x4e, 0xb6, - 0x58, 0xbf, 0xfb, 0xdc, 0x93, 0x96, 0x0f, 0xf9, 0xe5, 0x8b, 0xfe, 0x9e, - 0xd9, 0xa6, 0xd9, 0xb8, 0xb1, 0x4b, 0x14, 0x61, 0xe3, 0x88, 0xee, 0xa5, - 0x1c, 0x98, 0x6c, 0x08, 0x45, 0xdf, 0xb3, 0xf2, 0x50, 0x58, 0xbf, 0xfb, - 0x3f, 0xe2, 0x90, 0x61, 0x34, 0x16, 0x28, 0xe7, 0xd2, 0x44, 0xf7, 0xff, - 0xdf, 0x9f, 0x70, 0xc0, 0xdb, 0xcd, 0xa6, 0xee, 0x58, 0xbe, 0xe0, 0x3c, - 0xcb, 0x17, 0x14, 0x8c, 0xfe, 0x0e, 0xab, 0x7f, 0xdf, 0xcd, 0xe4, 0xce, - 0x6a, 0x25, 0x8b, 0xfb, 0xc7, 0x7f, 0x7d, 0xd6, 0x2a, 0x07, 0xd6, 0xc7, - 0xb6, 0x8c, 0x95, 0xce, 0x3c, 0x87, 0x5c, 0x45, 0x0d, 0x09, 0x30, 0x11, - 0x14, 0x65, 0xdc, 0x84, 0xe7, 0xa1, 0x32, 0x1c, 0x25, 0xef, 0xf7, 0x89, - 0x8d, 0x3b, 0x41, 0x62, 0xf8, 0x9b, 0xdc, 0x58, 0xb3, 0x41, 0x1f, 0xa3, - 0x85, 0x3e, 0xe6, 0x97, 0xfe, 0x8c, 0x9f, 0xe6, 0xbb, 0x37, 0xd9, 0x62, - 0xe8, 0xdf, 0x75, 0x8b, 0xb0, 0xeb, 0x17, 0xd0, 0xd0, 0xb7, 0x58, 0xbf, - 0xd2, 0xfb, 0x60, 0xc3, 0x3a, 0xc5, 0xa3, 0x3b, 0xc4, 0x47, 0xc8, 0xf7, - 0x42, 0xff, 0x25, 0xbb, 0x3b, 0x2c, 0x5f, 0xfe, 0xdf, 0x3d, 0x25, 0xee, - 0x31, 0x0b, 0x16, 0x2d, 0x19, 0xc3, 0xe2, 0x0c, 0x66, 0x86, 0x9d, 0x5b, - 0xc3, 0x4b, 0xb4, 0x2b, 0x6f, 0xfe, 0x8c, 0xd3, 0x01, 0xbc, 0xfa, 0xc3, - 0xac, 0x5e, 0x07, 0x9d, 0x62, 0xa0, 0x7c, 0x84, 0x8f, 0x7f, 0xee, 0xb9, - 0x07, 0xe7, 0x27, 0x50, 0x58, 0xbe, 0x73, 0xb7, 0x72, 0xc5, 0xfe, 0xde, - 0x4f, 0xcf, 0x4c, 0x16, 0x2a, 0x4f, 0x69, 0xc9, 0x6e, 0xfe, 0x2c, 0x5d, - 0x21, 0x2c, 0x5f, 0xc2, 0xd0, 0x0c, 0x1c, 0x4b, 0x16, 0x8c, 0x82, 0x20, - 0x46, 0x41, 0xf1, 0x7e, 0x0c, 0x53, 0x26, 0xc4, 0x08, 0xc7, 0x2f, 0xfd, - 0x8e, 0x09, 0x03, 0x10, 0xb1, 0x62, 0xfe, 0x86, 0x7f, 0xed, 0x05, 0x8b, - 0xfd, 0x3a, 0x2c, 0xd8, 0x38, 0x2c, 0x5f, 0xc7, 0x7f, 0x7c, 0x46, 0xac, - 0x5f, 0xf7, 0xdd, 0x81, 0x22, 0xef, 0xe5, 0x62, 0xf3, 0xc5, 0x19, 0xb2, - 0x28, 0xb0, 0xd7, 0xc6, 0x17, 0xfe, 0xde, 0x30, 0x6e, 0x63, 0x16, 0xf2, - 0xb1, 0x58, 0x88, 0x96, 0x45, 0xbf, 0xff, 0xb0, 0x7f, 0x90, 0xe3, 0x3c, - 0x4c, 0x0e, 0x72, 0x40, 0x91, 0x68, 0xc9, 0x67, 0x49, 0x0d, 0x07, 0x78, - 0xd1, 0xfa, 0x6d, 0x3c, 0xf2, 0xb7, 0xe3, 0xe6, 0x68, 0x50, 0x02, 0x38, - 0x32, 0x29, 0xf1, 0xe7, 0x68, 0xd6, 0x63, 0x88, 0x6f, 0xfa, 0x63, 0x30, - 0x9c, 0xd9, 0xe2, 0xc5, 0xff, 0xee, 0xf6, 0x36, 0x33, 0x07, 0x25, 0xe7, - 0xf8, 0x96, 0x2f, 0xff, 0x36, 0xfd, 0x49, 0xaf, 0x3d, 0x0c, 0x5d, 0x2c, - 0x5e, 0xe6, 0x71, 0x62, 0xfb, 0x93, 0xd4, 0x16, 0x2f, 0x85, 0xdc, 0x39, - 0x58, 0xbf, 0xfd, 0xc1, 0xe3, 0x9a, 0xfc, 0xe4, 0xea, 0x0b, 0x15, 0xba, - 0x60, 0x3d, 0x27, 0xc4, 0x3b, 0xf2, 0x4e, 0x13, 0x5f, 0xff, 0xf0, 0xba, - 0xe7, 0x33, 0xfa, 0xd6, 0x05, 0x9d, 0x9c, 0xba, 0xf2, 0xc5, 0xff, 0xb2, - 0x1f, 0x9d, 0x66, 0x11, 0xab, 0x17, 0xff, 0xdf, 0x9f, 0xb9, 0xbc, 0xe6, - 0x10, 0x23, 0xb1, 0x62, 0xf1, 0x03, 0x8b, 0x17, 0xd3, 0xc1, 0xba, 0xc5, - 0xf6, 0xec, 0xdb, 0xaa, 0x45, 0x02, 0xff, 0x1d, 0xa1, 0xf9, 0x6d, 0x2c, - 0x5f, 0xf0, 0xca, 0x7a, 0x33, 0x9a, 0x95, 0x8b, 0x48, 0x0f, 0xb8, 0x23, - 0x3a, 0x82, 0x6b, 0x38, 0xa6, 0x68, 0xee, 0x88, 0x8a, 0x13, 0xf7, 0xff, - 0xbe, 0xfb, 0x1c, 0x5a, 0x07, 0x38, 0xc3, 0x58, 0xbf, 0xef, 0xce, 0xa2, - 0x7f, 0xcc, 0x4b, 0x17, 0xfc, 0xda, 0xdb, 0x53, 0x06, 0xd2, 0xc5, 0xfe, - 0x60, 0x8b, 0x01, 0x20, 0x58, 0xbf, 0xd8, 0x3c, 0x1c, 0x97, 0x96, 0x2a, - 0x08, 0x9f, 0x23, 0xae, 0x19, 0xdf, 0xfa, 0x76, 0x2c, 0xe8, 0x0d, 0xd7, - 0x16, 0x2f, 0xe6, 0x81, 0x3c, 0x9a, 0xb1, 0x7f, 0x68, 0x03, 0x66, 0xfa, - 0xc5, 0xf8, 0x07, 0x68, 0x62, 0xc5, 0x49, 0xeb, 0x61, 0x75, 0xfd, 0xee, - 0x4f, 0x0f, 0xdc, 0xb1, 0x67, 0x58, 0xa2, 0x3c, 0x3e, 0xc6, 0x57, 0xff, - 0x37, 0x5c, 0xdb, 0x02, 0x11, 0x4f, 0x16, 0x2f, 0xfa, 0x76, 0x3b, 0xeb, - 0x82, 0x3a, 0xc5, 0xfe, 0x93, 0xe7, 0x98, 0x5d, 0xfa, 0xc5, 0x7c, 0xfc, - 0xf8, 0x77, 0x7f, 0xa7, 0x83, 0xd3, 0x8b, 0x65, 0x8b, 0xfe, 0x60, 0x4e, - 0x79, 0x88, 0x0b, 0x16, 0xcf, 0x22, 0x3b, 0xb1, 0x10, 0x46, 0xb7, 0x6a, - 0x56, 0x2f, 0xf4, 0x03, 0x86, 0x02, 0x60, 0xb1, 0x43, 0x3c, 0xcd, 0x0b, - 0xdf, 0xfd, 0xd7, 0x8b, 0x36, 0x3e, 0x1f, 0x09, 0x62, 0xfa, 0x0f, 0xa8, - 0x2c, 0x5e, 0x61, 0xe2, 0xc5, 0xff, 0x71, 0xba, 0x2c, 0xf7, 0xdd, 0x62, - 0xff, 0x16, 0x73, 0x5a, 0xce, 0x2c, 0x56, 0x26, 0x24, 0xe4, 0x51, 0x22, - 0xf0, 0x8f, 0xc3, 0x9d, 0x8e, 0x6f, 0xf6, 0x7c, 0xb3, 0xdf, 0x75, 0x8b, - 0xf4, 0x27, 0xf3, 0xd9, 0x62, 0xff, 0xc3, 0xfb, 0x9b, 0xf9, 0x86, 0x04, - 0xb1, 0x7f, 0xa7, 0xe5, 0x9e, 0xfb, 0xac, 0x54, 0x11, 0x9f, 0xd1, 0x93, - 0x95, 0x09, 0x06, 0xff, 0xcf, 0xad, 0x3f, 0x50, 0xf3, 0x74, 0xb1, 0x7e, - 0xd9, 0xc6, 0x29, 0x58, 0xb3, 0x6c, 0x7d, 0x5a, 0x41, 0xbf, 0xc1, 0x67, - 0x5e, 0x0c, 0x5b, 0x2c, 0x5f, 0xce, 0x6c, 0x93, 0x1a, 0xb1, 0x7f, 0xff, - 0xf1, 0x0a, 0x19, 0xc2, 0xcd, 0x83, 0x87, 0x8d, 0x7e, 0xb8, 0x3c, 0x25, - 0x8b, 0xfa, 0x70, 0xb5, 0xa9, 0x58, 0xa3, 0x51, 0x9e, 0xe5, 0xda, 0x75, - 0xa9, 0x4c, 0xe3, 0xd1, 0x84, 0x5e, 0xff, 0x8e, 0xb1, 0x74, 0x23, 0x3b, - 0xed, 0x99, 0xd5, 0x31, 0xab, 0x6c, 0x9c, 0x36, 0xcc, 0x8e, 0x5f, 0x74, - 0xf7, 0x4d, 0x8a, 0x1b, 0x5a, 0x2f, 0x3a, 0x0f, 0xe1, 0x06, 0xcc, 0x60, - 0x23, 0x28, 0xd2, 0x39, 0x1c, 0xb7, 0xa3, 0x28, 0x8e, 0x85, 0x38, 0x71, - 0xb0, 0x77, 0x14, 0xdf, 0xff, 0xb3, 0xf1, 0x9d, 0x43, 0xd2, 0x16, 0x1d, - 0xca, 0x0b, 0x16, 0x8c, 0x83, 0x3b, 0x45, 0xa9, 0xa4, 0xbe, 0x8d, 0x4a, - 0xb6, 0x7f, 0x0f, 0x78, 0x5a, 0xf9, 0xc1, 0xca, 0x11, 0xde, 0x98, 0xcc, - 0xf3, 0x8a, 0x11, 0xf3, 0xee, 0xba, 0x97, 0x86, 0x78, 0xe3, 0xfe, 0x88, - 0x08, 0x57, 0xf7, 0xe8, 0x64, 0xbf, 0xc8, 0xe2, 0xc5, 0x4e, 0xb6, 0xee, - 0xa7, 0xd6, 0x5f, 0xa1, 0x19, 0xa2, 0x12, 0xc5, 0xff, 0x9a, 0x11, 0x99, - 0xad, 0xd9, 0xb7, 0x54, 0x8e, 0x65, 0xd9, 0xa5, 0x8b, 0xfd, 0xcc, 0xfc, - 0xed, 0x9a, 0x58, 0xbf, 0xcd, 0xbc, 0x60, 0x67, 0x29, 0xd8, 0xf2, 0xf0, - 0x5e, 0xd1, 0x87, 0x47, 0x4f, 0x68, 0x4d, 0xdb, 0x8b, 0x17, 0x42, 0x56, - 0x2f, 0xfc, 0xd0, 0x8c, 0xcd, 0x6e, 0xcd, 0xba, 0xa4, 0x89, 0x2e, 0x08, - 0x25, 0x8b, 0x46, 0x6c, 0x89, 0x3d, 0xc4, 0x8e, 0x2e, 0x12, 0x85, 0xdd, - 0xf3, 0x65, 0x8b, 0xfc, 0xe0, 0x6f, 0x7e, 0x4d, 0x58, 0xbf, 0xb9, 0xc9, - 0x00, 0x7b, 0x2c, 0x5f, 0xe6, 0xd4, 0x3b, 0xe7, 0x60, 0x3a, 0xc5, 0x61, - 0xf6, 0x88, 0xc6, 0xf3, 0xf5, 0xc5, 0x8b, 0xc5, 0x27, 0x58, 0xbf, 0xe2, - 0x6e, 0xbc, 0xde, 0x83, 0x2c, 0x5f, 0xdf, 0xcc, 0xf7, 0xf1, 0x62, 0xb6, - 0x45, 0x03, 0x8f, 0x00, 0x73, 0xc7, 0x37, 0x89, 0xb7, 0x58, 0xbf, 0xed, - 0x6f, 0xf7, 0x8f, 0x7c, 0xd9, 0x62, 0xd2, 0xb1, 0x42, 0x3c, 0xfe, 0xc7, - 0xd7, 0xee, 0x3e, 0x68, 0xd5, 0x8b, 0xe9, 0x38, 0xfe, 0xb1, 0x50, 0x3c, - 0xcf, 0x14, 0xdf, 0xb5, 0x3d, 0x9f, 0xb2, 0xc5, 0xe8, 0x9c, 0xeb, 0x17, - 0xe6, 0xf7, 0xb3, 0x4b, 0x14, 0x33, 0xf2, 0x72, 0xc2, 0x1e, 0xbf, 0xbc, - 0xd0, 0xe3, 0x8d, 0x62, 0xff, 0x3e, 0x86, 0x26, 0xd4, 0x16, 0x2b, 0x0f, - 0x8b, 0xe5, 0xd7, 0xdb, 0xbb, 0x77, 0x2c, 0x5f, 0x70, 0xf3, 0xc5, 0x8b, - 0xfe, 0x7e, 0x60, 0xe1, 0x0f, 0x89, 0x62, 0xfd, 0xc8, 0xa0, 0xe0, 0x58, - 0xbd, 0xdf, 0xcf, 0x96, 0x2b, 0x11, 0x53, 0xb9, 0x1b, 0x9d, 0x08, 0xaa, - 0xf1, 0xd8, 0x0b, 0x17, 0xfd, 0xbb, 0x6b, 0x61, 0xb3, 0x1a, 0xb1, 0x7e, - 0xf7, 0xa7, 0x40, 0x58, 0xad, 0xcf, 0x97, 0xe7, 0x95, 0x28, 0xa5, 0xc8, - 0x41, 0x5f, 0xfb, 0xac, 0xf3, 0xf4, 0x16, 0x75, 0xe5, 0x8b, 0xf1, 0x37, - 0x69, 0x35, 0x62, 0xa4, 0xfb, 0x5d, 0x0e, 0xfe, 0xc1, 0x86, 0x36, 0x3a, - 0xc5, 0xff, 0xfb, 0x0a, 0x06, 0x60, 0xdf, 0x9d, 0x78, 0x4d, 0xc5, 0x8b, - 0xdc, 0x10, 0x4b, 0x17, 0xfa, 0x76, 0x0e, 0x39, 0x88, 0x0b, 0x17, 0x42, - 0x32, 0x36, 0x5f, 0x1e, 0x91, 0xf1, 0xc2, 0x87, 0x21, 0x82, 0x69, 0xee, - 0xed, 0x9d, 0x38, 0x3c, 0x25, 0x22, 0x84, 0x7e, 0x88, 0x7f, 0x0c, 0xf2, - 0x87, 0x0f, 0xa1, 0x27, 0xd8, 0x80, 0x22, 0xf8, 0xe5, 0x70, 0xc7, 0xef, - 0x46, 0xfd, 0xf7, 0x1c, 0xb1, 0x7f, 0x70, 0x8c, 0x8d, 0xc6, 0xeb, 0x17, - 0xf4, 0xbf, 0xbf, 0x3a, 0x58, 0xbf, 0xf1, 0x60, 0x24, 0x1a, 0xd4, 0x84, - 0xb1, 0x7c, 0x45, 0x9e, 0x58, 0xb4, 0x64, 0x6b, 0x47, 0x74, 0x96, 0xfc, - 0xd3, 0x85, 0xa1, 0x9f, 0xd6, 0x95, 0x37, 0x02, 0x50, 0xad, 0x4b, 0x2f, - 0x73, 0x51, 0x8a, 0xf2, 0x18, 0xc2, 0xa4, 0xea, 0xdf, 0xff, 0xff, 0xb6, - 0x0e, 0x3e, 0x35, 0xf7, 0xe6, 0x19, 0xf8, 0xe8, 0xc2, 0x8d, 0x51, 0xb7, - 0x79, 0x1f, 0x1a, 0x83, 0x30, 0xcf, 0xc7, 0x2c, 0x5f, 0xb5, 0xbb, 0x36, - 0xea, 0x90, 0x70, 0xbf, 0x85, 0xbe, 0x9e, 0x49, 0x62, 0xfc, 0xe5, 0xe9, - 0x3a, 0xc5, 0xa3, 0x31, 0x11, 0x9f, 0x37, 0x8e, 0x2e, 0xbf, 0xb0, 0x3f, - 0xcb, 0xe9, 0x62, 0xfc, 0x1f, 0xe5, 0xf4, 0xb1, 0x73, 0x86, 0xb1, 0x58, - 0x78, 0x2e, 0x53, 0x7f, 0x60, 0x7f, 0x97, 0xd2, 0xc5, 0xfd, 0x81, 0xfe, - 0x5f, 0x4b, 0x17, 0xf6, 0x07, 0xf9, 0x7d, 0x2c, 0x5f, 0xd8, 0x1f, 0xe5, - 0xf4, 0xb1, 0x7f, 0xf7, 0x7c, 0xef, 0x3f, 0x22, 0xee, 0xdf, 0xf2, 0x12, - 0xc5, 0xff, 0x9c, 0x78, 0x72, 0xce, 0xbc, 0xcb, 0x17, 0xfb, 0x59, 0xbf, - 0xe7, 0xa8, 0x2c, 0x58, 0x25, 0x8a, 0x93, 0xc9, 0xc3, 0x6a, 0x58, 0xbf, - 0xb9, 0xc9, 0x00, 0x7b, 0x2c, 0x5f, 0xf9, 0x8d, 0xdf, 0xef, 0xad, 0x48, - 0x4b, 0x15, 0x87, 0xe6, 0x46, 0x37, 0xdb, 0x0e, 0x76, 0x58, 0xbc, 0x2e, - 0x4a, 0xc5, 0xff, 0xdb, 0xfe, 0x4d, 0x7e, 0x77, 0xd7, 0xbc, 0x6f, 0xac, - 0x58, 0x4b, 0x17, 0xf4, 0xfb, 0xf3, 0xd0, 0x16, 0x2a, 0x3d, 0x12, 0xa7, - 0x54, 0xe0, 0x95, 0xec, 0x63, 0xac, 0x52, 0xc5, 0x8b, 0xa3, 0x50, 0x43, - 0x97, 0xdb, 0xb3, 0x6e, 0xa9, 0x0b, 0xcb, 0xfd, 0x9d, 0x03, 0x8c, 0xfb, - 0x2c, 0x5f, 0x89, 0x80, 0xdc, 0x58, 0xbf, 0x64, 0x50, 0x6e, 0x2c, 0x56, - 0x2a, 0x0e, 0xe8, 0x95, 0xe1, 0x65, 0x12, 0xde, 0x89, 0x88, 0xc7, 0xc6, - 0xa1, 0x93, 0xdf, 0xed, 0xbf, 0x9f, 0xc7, 0xd9, 0x62, 0xf4, 0x85, 0xe5, - 0x8b, 0x36, 0x8f, 0x4c, 0x8d, 0x6e, 0x14, 0x7a, 0xc5, 0xfd, 0xcf, 0xb1, - 0xdf, 0x8b, 0x17, 0x0b, 0x4b, 0x15, 0x03, 0xe1, 0x38, 0xdb, 0x17, 0x5e, - 0xfb, 0xe9, 0x62, 0xf8, 0xa6, 0x3e, 0x25, 0x8a, 0x39, 0xe1, 0xfc, 0x76, - 0xff, 0x9b, 0x50, 0x8a, 0x0f, 0xa8, 0x2c, 0x5f, 0x77, 0x39, 0x44, 0xb1, - 0x70, 0x51, 0x2c, 0x5f, 0xd8, 0x3f, 0xe0, 0x19, 0x62, 0xfa, 0x45, 0xdf, - 0xf1, 0x62, 0xa0, 0x8d, 0x0c, 0x3b, 0x62, 0x6e, 0x0d, 0x04, 0x5b, 0x7f, - 0xde, 0x70, 0x71, 0xba, 0x80, 0x16, 0x2f, 0xf3, 0x83, 0x80, 0x03, 0xf9, - 0x62, 0xfd, 0x27, 0x06, 0xe0, 0x58, 0xa9, 0x44, 0xce, 0x1d, 0xb9, 0xa5, - 0xc1, 0xf1, 0x62, 0xfd, 0xa6, 0xe6, 0xd2, 0xb1, 0x68, 0x2c, 0x54, 0x9e, - 0xa6, 0x0c, 0xb1, 0x4d, 0xfe, 0x07, 0xb9, 0xfc, 0x71, 0xac, 0x5b, 0x65, - 0x8a, 0xd1, 0xe3, 0x91, 0xa5, 0x82, 0x58, 0xbf, 0x4e, 0xb5, 0x3b, 0x2c, - 0x5f, 0xe2, 0x93, 0x86, 0x3f, 0xca, 0xc5, 0x61, 0xf8, 0x10, 0x9f, 0x8a, - 0x6f, 0xcd, 0x03, 0xcc, 0x16, 0x2c, 0x75, 0x8a, 0x94, 0x7c, 0x3c, 0x24, - 0x7e, 0x5b, 0xe2, 0x8b, 0xe7, 0x1b, 0x71, 0x62, 0xf8, 0xcf, 0x66, 0x96, - 0x2a, 0x4f, 0x1b, 0x72, 0x2b, 0xe0, 0x67, 0x5e, 0x58, 0xbc, 0xd0, 0xc5, - 0x8b, 0xf9, 0x8b, 0x7d, 0x43, 0x8b, 0x15, 0xd1, 0xf7, 0x91, 0x20, 0x87, - 0x2f, 0xf6, 0x1f, 0x37, 0xdd, 0xfe, 0xb1, 0x7a, 0x0d, 0x05, 0x8b, 0xf7, - 0xf2, 0x03, 0xe9, 0x62, 0x9c, 0xff, 0x22, 0x35, 0xf0, 0xed, 0xdc, 0xe9, - 0x62, 0xfb, 0xd0, 0x93, 0x52, 0x2f, 0xb0, 0x7e, 0xe2, 0xc5, 0x62, 0x23, - 0xce, 0x5e, 0xc3, 0x24, 0x49, 0x7f, 0xfc, 0xcd, 0xe1, 0xbb, 0x10, 0xff, - 0x21, 0x9d, 0x62, 0xf6, 0x07, 0xde, 0x2c, 0x5f, 0xba, 0x87, 0x1c, 0xd5, - 0x8a, 0x93, 0xce, 0xc2, 0x3a, 0xd2, 0x2f, 0x4a, 0x13, 0xb7, 0xe0, 0x02, - 0x48, 0xd5, 0x8b, 0xdb, 0xb4, 0x16, 0x2a, 0x4f, 0x1f, 0x0a, 0x6f, 0x83, - 0x28, 0xbb, 0x96, 0x2b, 0xe7, 0x90, 0x02, 0x0b, 0xf3, 0x74, 0x26, 0xf2, - 0xc5, 0xd1, 0xc4, 0xb1, 0x7f, 0x1d, 0xcb, 0x0f, 0x2b, 0x17, 0xdb, 0x7b, - 0x3e, 0xb1, 0x58, 0x7a, 0x0c, 0x59, 0x7f, 0x03, 0x08, 0x5c, 0x95, 0x8b, - 0xff, 0x16, 0x6c, 0x59, 0xef, 0xcc, 0x16, 0x2f, 0xf9, 0xe0, 0xff, 0x11, - 0xce, 0xeb, 0x15, 0x28, 0xa4, 0x22, 0xdf, 0x1f, 0x5a, 0x33, 0xbc, 0x6c, - 0x06, 0x7b, 0xd6, 0xf8, 0xd0, 0x82, 0x36, 0x2e, 0xef, 0xb2, 0xee, 0xf8, - 0x5d, 0x1a, 0x8b, 0xa5, 0x5b, 0x68, 0x43, 0xc0, 0x80, 0x6f, 0xf9, 0x28, - 0xbb, 0x78, 0x65, 0xf5, 0x08, 0x77, 0x71, 0x8a, 0x1e, 0x5a, 0x87, 0x11, - 0xe1, 0x03, 0xf8, 0xda, 0xda, 0x10, 0xc0, 0x84, 0x89, 0x46, 0x75, 0xc8, - 0x7b, 0xfa, 0x16, 0xc2, 0x22, 0xec, 0x53, 0x1c, 0xd4, 0x1c, 0x31, 0x2f, - 0xf9, 0xb7, 0x8c, 0x86, 0x6b, 0x20, 0xb1, 0x76, 0x71, 0x62, 0xff, 0xff, - 0xf8, 0x9a, 0x33, 0x05, 0xdf, 0xb9, 0xaf, 0xef, 0xe3, 0xc3, 0x86, 0x61, - 0xb3, 0x05, 0x8b, 0xf6, 0x70, 0xe3, 0x95, 0x8b, 0xff, 0xe6, 0xdb, 0x53, - 0xb7, 0x18, 0x85, 0xbe, 0x71, 0x62, 0xfd, 0xad, 0xd9, 0xb7, 0x54, 0x8c, - 0x85, 0xe6, 0x84, 0x64, 0xa2, 0x27, 0x14, 0xae, 0x7e, 0x2c, 0x5a, 0x33, - 0x64, 0xf5, 0xe0, 0x7b, 0xb8, 0xbe, 0xa1, 0x0c, 0x78, 0x58, 0xf8, 0xd6, - 0xff, 0xef, 0xbe, 0xa1, 0x18, 0x3c, 0x38, 0xce, 0xb1, 0x71, 0xf8, 0xb1, - 0x79, 0x98, 0xeb, 0x16, 0x8c, 0xd1, 0xb4, 0xf8, 0xc5, 0xef, 0x61, 0xd6, - 0x2e, 0xf9, 0xd6, 0x2f, 0xda, 0xdd, 0x9b, 0x75, 0x49, 0xbc, 0x5a, 0x32, - 0x4f, 0xb0, 0x63, 0xb8, 0x31, 0x68, 0xe5, 0x8b, 0xb0, 0x96, 0x2d, 0x18, - 0xc6, 0xae, 0x38, 0x56, 0xe6, 0xee, 0x58, 0xbf, 0xc0, 0x91, 0x89, 0xb5, - 0x05, 0x8b, 0xff, 0x34, 0x23, 0x33, 0x5b, 0xb3, 0x6e, 0xa9, 0x24, 0xcb, - 0x46, 0x62, 0x27, 0x9c, 0x68, 0xe6, 0x97, 0x46, 0xf1, 0xa2, 0xc5, 0xff, - 0xb0, 0xb3, 0xda, 0x73, 0x7e, 0x25, 0x8b, 0x1d, 0x62, 0xff, 0x84, 0xdd, - 0x6b, 0x42, 0x8b, 0x8b, 0x15, 0x03, 0xcf, 0xe0, 0x95, 0xff, 0x78, 0x98, - 0x2f, 0x3f, 0x41, 0x2c, 0x5c, 0x7e, 0x96, 0x2f, 0xec, 0xf1, 0x4c, 0x9d, - 0x62, 0xfe, 0xe8, 0x01, 0xe9, 0x80, 0xb1, 0x77, 0xe3, 0x3b, 0xd4, 0xe1, - 0x06, 0x45, 0x90, 0x8e, 0xe8, 0x88, 0xe7, 0x9f, 0x19, 0x62, 0xca, 0x8d, - 0x9b, 0xa5, 0x39, 0x8d, 0x32, 0x15, 0x82, 0xa6, 0x4b, 0xd0, 0x76, 0xdd, - 0x3e, 0xf2, 0x12, 0xde, 0x61, 0xed, 0x0c, 0xa0, 0xe3, 0xbb, 0xbf, 0xb3, - 0x5b, 0xb3, 0x6e, 0xa9, 0x07, 0x4b, 0xff, 0xdd, 0xa6, 0x3c, 0xc6, 0xf4, - 0xee, 0xe5, 0x2b, 0x17, 0xfb, 0x39, 0xc9, 0x00, 0x7b, 0x2c, 0x5f, 0xfb, - 0xf8, 0x44, 0xde, 0xfc, 0x1d, 0x62, 0xfe, 0xd7, 0xc2, 0x61, 0xc6, 0x4a, - 0x30, 0x86, 0x9f, 0xe3, 0x6a, 0x8c, 0x4d, 0x51, 0xa1, 0xfd, 0x7e, 0xd6, - 0xec, 0xdb, 0xaa, 0x45, 0x82, 0xfb, 0x00, 0x77, 0x58, 0xbf, 0x46, 0x1d, - 0xa1, 0x19, 0x87, 0xb3, 0x1c, 0x6f, 0x7f, 0xce, 0x3c, 0x3b, 0xee, 0xe3, - 0x58, 0xbf, 0x6b, 0x76, 0x6d, 0xd5, 0x21, 0x81, 0x68, 0xc9, 0x3f, 0x0c, - 0x39, 0xbc, 0x14, 0x9d, 0x62, 0xe2, 0xdd, 0x62, 0xff, 0x30, 0xf3, 0xb9, - 0xa4, 0xeb, 0x15, 0x87, 0x9b, 0xf1, 0x8b, 0xd0, 0x71, 0xac, 0x5d, 0x3d, - 0x2c, 0x5f, 0xcf, 0xf6, 0x3f, 0xc4, 0xb1, 0x5a, 0x3c, 0x6f, 0x0c, 0x5f, - 0xb3, 0x59, 0x9d, 0x2c, 0x5f, 0xa1, 0x9c, 0x6e, 0x2c, 0x5e, 0xc2, 0x1a, - 0xc5, 0xff, 0xd1, 0xcc, 0x40, 0xcf, 0x49, 0x38, 0x16, 0x2d, 0x19, 0x89, - 0xe1, 0x6e, 0xd7, 0x11, 0x0b, 0x31, 0x91, 0x10, 0x8a, 0x02, 0x28, 0x0c, - 0x72, 0xff, 0xfc, 0xc0, 0x8e, 0xc8, 0xc2, 0x6f, 0x43, 0x3d, 0x83, 0x58, - 0xbf, 0xff, 0x39, 0xdf, 0x51, 0x9e, 0x8e, 0xcf, 0xfa, 0x7a, 0x09, 0x62, - 0x89, 0x33, 0x4e, 0x3e, 0x79, 0x6a, 0xec, 0xe2, 0xc5, 0xbb, 0x96, 0x2d, - 0x19, 0x03, 0x59, 0x10, 0xbd, 0xef, 0x3c, 0x4b, 0x17, 0xff, 0xff, 0xfd, - 0x24, 0x23, 0xea, 0x7c, 0xfb, 0xb8, 0xff, 0x3b, 0xfe, 0x76, 0x3b, 0xf9, - 0xa2, 0x6f, 0x2c, 0x5f, 0x39, 0x30, 0x16, 0x2f, 0x60, 0x51, 0x9d, 0x22, - 0xdf, 0x90, 0x96, 0xbf, 0xb9, 0xb7, 0xf0, 0x0c, 0xb1, 0x7f, 0xff, 0xd0, - 0xe4, 0x66, 0xff, 0x68, 0xb7, 0xfe, 0x6b, 0xbc, 0xfc, 0x47, 0xe2, 0xc5, - 0xf4, 0xfc, 0x5e, 0x58, 0xbf, 0x67, 0x81, 0x3b, 0xac, 0x5f, 0xfd, 0xe7, - 0x04, 0xc0, 0x7f, 0x92, 0xdd, 0x62, 0xfb, 0x91, 0x4c, 0x7a, 0xc5, 0x49, - 0xf6, 0x62, 0x2d, 0xf7, 0x50, 0x62, 0x58, 0xbc, 0x77, 0xe2, 0xc5, 0xa4, - 0xe7, 0x80, 0x02, 0x3b, 0xfa, 0x27, 0xfb, 0xea, 0x25, 0x8b, 0xfe, 0xd6, - 0xc2, 0x06, 0x10, 0x67, 0x58, 0xb7, 0x65, 0x8a, 0x94, 0x40, 0x39, 0x81, - 0xcf, 0x2f, 0x9c, 0x80, 0xeb, 0x17, 0xdb, 0xb3, 0x6e, 0xa9, 0x0f, 0x4a, - 0x81, 0xe9, 0x68, 0x86, 0xff, 0xf4, 0x79, 0x4b, 0x0d, 0xf8, 0x79, 0x18, - 0x16, 0x2f, 0xb8, 0xdd, 0x76, 0x58, 0xb4, 0x64, 0x13, 0x14, 0xc8, 0x40, - 0x31, 0x17, 0x93, 0x2f, 0xff, 0xfd, 0x19, 0xb4, 0xc4, 0xe4, 0xfb, 0xb7, - 0xd8, 0x23, 0x06, 0x40, 0x1a, 0xc5, 0x41, 0x17, 0xbb, 0xa5, 0x5f, 0xbd, - 0xc1, 0x6a, 0x0b, 0x17, 0xfd, 0xbb, 0x69, 0xbf, 0x16, 0x79, 0x62, 0xff, - 0xf0, 0xb3, 0xf8, 0x40, 0xc2, 0xf7, 0xf1, 0x62, 0xf4, 0xea, 0x25, 0x8b, - 0x46, 0x3a, 0x28, 0x48, 0xef, 0x89, 0x15, 0x89, 0x81, 0x34, 0x32, 0xef, - 0xbc, 0xfd, 0x04, 0xb1, 0x7f, 0xe8, 0x4e, 0xb6, 0xd6, 0x9f, 0xdc, 0x58, - 0xba, 0x7a, 0xc3, 0xe6, 0x88, 0x96, 0xff, 0xff, 0x1e, 0x31, 0x82, 0x6d, - 0x9c, 0x26, 0x0d, 0xcb, 0xd3, 0xc5, 0x8a, 0x95, 0xf8, 0xfd, 0xa1, 0xaa, - 0x33, 0xee, 0x8b, 0xdd, 0xda, 0x22, 0x3d, 0x42, 0x57, 0xec, 0x0d, 0x29, - 0xe0, 0xa3, 0x26, 0xf4, 0x23, 0x43, 0x2e, 0xbf, 0xd9, 0xce, 0x48, 0x03, - 0xd9, 0x62, 0xfd, 0x24, 0xf3, 0xc5, 0x8b, 0xf3, 0x19, 0xec, 0xdd, 0x62, - 0xff, 0xff, 0x0e, 0x5b, 0x5f, 0x09, 0x87, 0xef, 0xe1, 0x13, 0x79, 0x62, - 0xd1, 0x83, 0x47, 0x33, 0x9b, 0x7c, 0x9b, 0x85, 0x55, 0x18, 0x9f, 0x7e, - 0xd1, 0xd5, 0x5f, 0xd0, 0x6d, 0x6d, 0xf1, 0x2c, 0x5f, 0xb9, 0x20, 0x0f, - 0x65, 0x8b, 0x64, 0x47, 0xb7, 0xc3, 0x0b, 0x9c, 0xeb, 0x17, 0xfc, 0x26, - 0x1c, 0x73, 0xf3, 0x36, 0x58, 0xaf, 0x9e, 0xa7, 0x70, 0xbd, 0xff, 0xbe, - 0xfa, 0x80, 0x70, 0xcf, 0xb2, 0xc5, 0xee, 0x08, 0x0b, 0x17, 0xbc, 0xdb, - 0xac, 0x5c, 0x09, 0x58, 0xbf, 0xe2, 0x93, 0x00, 0x70, 0xf4, 0xcb, 0x14, - 0xe7, 0xa5, 0xe1, 0x7b, 0xfc, 0x42, 0xdc, 0xf3, 0xad, 0xd6, 0x2f, 0xfd, - 0xe7, 0x83, 0xfc, 0x47, 0x3b, 0xac, 0x5f, 0x13, 0x05, 0x18, 0x35, 0x40, - 0xb8, 0xf9, 0xb9, 0x2f, 0x48, 0x0c, 0x3d, 0xc7, 0x01, 0x10, 0x86, 0x6d, - 0x68, 0xf5, 0x8b, 0xf6, 0xb7, 0x66, 0xdd, 0x52, 0x61, 0x97, 0xfa, 0x05, - 0x39, 0xcc, 0x25, 0x8b, 0xb9, 0xc5, 0x8b, 0xde, 0xc3, 0xac, 0x58, 0xeb, - 0x15, 0x86, 0xbf, 0xc3, 0xb6, 0x8c, 0x94, 0x72, 0x60, 0xaf, 0x46, 0xfa, - 0x31, 0x24, 0x7b, 0xe8, 0xc0, 0x16, 0x2c, 0x5e, 0x6f, 0xf1, 0x62, 0xee, - 0xbc, 0xb1, 0x7f, 0x0b, 0x67, 0x21, 0x1d, 0x62, 0xa4, 0xf2, 0x08, 0x66, - 0xfa, 0x63, 0xe6, 0x25, 0x8b, 0xd2, 0x5b, 0x2c, 0x5a, 0x56, 0x2f, 0xa4, - 0x10, 0x3a, 0xc5, 0x7c, 0xda, 0x10, 0x8d, 0x0d, 0x31, 0xc7, 0x65, 0x88, - 0x83, 0xe4, 0xde, 0x51, 0xbd, 0xac, 0x35, 0x62, 0xff, 0xf0, 0xdc, 0xfd, - 0x43, 0x9d, 0x43, 0x35, 0xb2, 0xc5, 0xf4, 0xcf, 0x23, 0x06, 0x7d, 0xbe, - 0x1e, 0xa8, 0xc4, 0x79, 0x94, 0x2e, 0x2b, 0x65, 0x4b, 0xda, 0x94, 0x69, - 0x7f, 0xff, 0x8d, 0x8c, 0xe7, 0xba, 0xdd, 0xcb, 0x53, 0xe7, 0xdd, 0xc6, - 0xb1, 0x52, 0x89, 0x51, 0x16, 0xdf, 0xe8, 0xcc, 0xd6, 0xec, 0xdb, 0xaa, - 0x4e, 0x72, 0xff, 0xb9, 0x84, 0x03, 0xe0, 0xb8, 0xb1, 0x77, 0xfb, 0x2c, - 0x5a, 0x56, 0x2f, 0x07, 0x21, 0x2c, 0x5f, 0xf6, 0x74, 0x10, 0x65, 0x9d, - 0xb1, 0x62, 0xfe, 0x13, 0x75, 0xef, 0xba, 0xc5, 0x6c, 0x89, 0xcf, 0x88, - 0x90, 0xff, 0x0f, 0x6f, 0x40, 0x43, 0x58, 0xbf, 0xe8, 0x3e, 0xa1, 0xe3, - 0x73, 0x4b, 0x17, 0x6d, 0xc5, 0x8b, 0xe1, 0x77, 0x61, 0x2c, 0x5e, 0x79, - 0x02, 0xc5, 0xff, 0x67, 0x47, 0x61, 0xfe, 0x49, 0x62, 0xbe, 0x7a, 0xa4, - 0x39, 0x73, 0x1d, 0x62, 0xf9, 0xf5, 0xa6, 0x58, 0xbf, 0xfb, 0x08, 0x11, - 0xd9, 0xef, 0xb9, 0x01, 0x62, 0xfb, 0x92, 0x46, 0xac, 0x56, 0x22, 0x2f, - 0x84, 0x41, 0xa3, 0x5f, 0xf6, 0x7b, 0xed, 0x0f, 0x4c, 0x16, 0x2f, 0x49, - 0x79, 0x62, 0xbe, 0x7a, 0xa2, 0x39, 0xb0, 0x16, 0x2e, 0xc3, 0xac, 0x54, - 0x9a, 0x96, 0x12, 0xbf, 0xff, 0x69, 0xcf, 0x26, 0xfd, 0xb8, 0x03, 0xb7, - 0x5e, 0x58, 0xbc, 0x53, 0xd2, 0xc5, 0xf3, 0x6a, 0x11, 0x92, 0xb8, 0x7e, - 0x33, 0x9c, 0x85, 0xb7, 0x47, 0xb1, 0x0f, 0x1c, 0xef, 0xe3, 0x2c, 0xf4, - 0x44, 0x3c, 0x85, 0x17, 0xa1, 0x0a, 0x12, 0x58, 0x63, 0xfd, 0xcb, 0x17, - 0xff, 0xff, 0xff, 0x4f, 0x7d, 0xc3, 0x6d, 0xfe, 0x61, 0x9f, 0x8e, 0x8c, - 0xd8, 0x46, 0xc6, 0xb9, 0xef, 0x7a, 0xdb, 0x6d, 0xce, 0x61, 0x9f, 0x8e, - 0x58, 0xa9, 0x6f, 0x01, 0x36, 0x84, 0x24, 0x21, 0x6f, 0x92, 0xc7, 0xf7, - 0x5c, 0x7a, 0x4d, 0x4e, 0xa5, 0x47, 0x1e, 0x37, 0x2f, 0xcb, 0x44, 0xf1, - 0x10, 0xa7, 0x21, 0x3b, 0xa1, 0xdd, 0x7f, 0xdc, 0x3e, 0x19, 0x0c, 0x1c, - 0xac, 0x5f, 0xb5, 0xbb, 0x36, 0xea, 0x90, 0x78, 0xbf, 0xfd, 0xf7, 0x93, - 0xb0, 0xc3, 0xee, 0x92, 0x82, 0xc5, 0xff, 0xff, 0xef, 0xe1, 0xfe, 0x59, - 0xd9, 0xb7, 0x8c, 0xe7, 0x24, 0x1e, 0x29, 0x3f, 0x16, 0x2d, 0x19, 0x29, - 0x9d, 0xe1, 0xd7, 0x0d, 0xfc, 0x9b, 0x7f, 0xf9, 0xbd, 0x27, 0x29, 0x62, - 0x29, 0x82, 0xc5, 0xdd, 0xec, 0x6b, 0x58, 0xbf, 0xdd, 0xef, 0xf0, 0x07, - 0x9d, 0x2c, 0x5e, 0xf8, 0xa0, 0xb1, 0x7f, 0xd3, 0xf9, 0xdb, 0x53, 0x83, - 0x58, 0xbf, 0xfd, 0xcc, 0x29, 0x87, 0xf3, 0xef, 0x84, 0xb1, 0x7f, 0xed, - 0x3f, 0x24, 0x6c, 0x4e, 0x75, 0x8a, 0xe9, 0x1b, 0x7f, 0x1e, 0xe1, 0xcf, - 0x64, 0x7b, 0xde, 0xdc, 0x0b, 0x17, 0xfb, 0x52, 0xfe, 0x29, 0x3a, 0xc5, - 0xfd, 0x3a, 0xd4, 0x99, 0x2b, 0x17, 0xf7, 0x0c, 0x19, 0x37, 0xd6, 0x28, - 0x8f, 0x74, 0x45, 0xd7, 0xff, 0xf6, 0x0d, 0xf9, 0x85, 0xcd, 0xfe, 0xe4, - 0x59, 0xd2, 0xc5, 0xff, 0xfe, 0x63, 0x62, 0xe4, 0xf8, 0xc0, 0xfc, 0xe4, - 0x28, 0x67, 0x16, 0x2b, 0xe8, 0xbf, 0x25, 0xab, 0xff, 0xe1, 0x79, 0xfd, - 0xe9, 0x33, 0xf9, 0x85, 0xba, 0xc5, 0xf9, 0xf4, 0xde, 0x8d, 0x6b, 0x17, - 0xf0, 0x32, 0x12, 0x0e, 0x2c, 0x5f, 0xff, 0xfe, 0xcd, 0x6a, 0x7a, 0x80, - 0x7e, 0x72, 0x14, 0x33, 0x85, 0x9b, 0x07, 0x05, 0x8a, 0x94, 0x54, 0xfc, - 0xba, 0xff, 0xfc, 0x59, 0xc7, 0x6d, 0xb0, 0x67, 0x78, 0xe9, 0x3a, 0xc5, - 0xf6, 0xec, 0xdb, 0xaa, 0x42, 0x62, 0xfd, 0x8f, 0xed, 0x09, 0x62, 0xfa, - 0x3f, 0xf2, 0x6a, 0xc5, 0xff, 0xfe, 0xd1, 0x66, 0xd8, 0x3c, 0x08, 0x5a, - 0xcd, 0xff, 0x3d, 0x96, 0x2e, 0xcd, 0x96, 0x29, 0x62, 0xf8, 0x47, 0xc1, - 0xac, 0x76, 0x26, 0x54, 0xa2, 0xf3, 0xa6, 0x5e, 0xe2, 0x4b, 0xff, 0xfe, - 0x6f, 0x4f, 0x62, 0xce, 0x6c, 0xd9, 0xce, 0x31, 0xb3, 0xa5, 0x8b, 0xf7, - 0xb9, 0xb6, 0x04, 0xb1, 0x7f, 0xde, 0x11, 0xa6, 0x7f, 0x00, 0xcb, 0x15, - 0x89, 0x81, 0x39, 0x9b, 0x34, 0x08, 0xae, 0xc2, 0x58, 0xbf, 0xde, 0x13, - 0x75, 0xf9, 0xec, 0xb1, 0x7e, 0xcd, 0xb1, 0xf8, 0xb1, 0x50, 0x5c, 0xad, - 0x19, 0x11, 0xaa, 0x3b, 0xc3, 0x5d, 0xc8, 0xb4, 0xae, 0x73, 0x16, 0x28, - 0x28, 0xf9, 0x78, 0x77, 0xe1, 0x2e, 0xc6, 0xf7, 0xfc, 0xcc, 0x40, 0xd3, - 0xc9, 0xab, 0x17, 0xff, 0xdf, 0x7e, 0xa1, 0x2d, 0x03, 0x30, 0xed, 0xd2, - 0xc5, 0xff, 0xff, 0xff, 0xf0, 0x33, 0x8d, 0x1e, 0x67, 0xbe, 0xf3, 0xc3, - 0x33, 0x5a, 0xcf, 0x96, 0x7a, 0x4e, 0x66, 0x69, 0xa1, 0x8b, 0x17, 0x0b, - 0x65, 0x8b, 0x62, 0xc5, 0xcf, 0xdf, 0xac, 0x51, 0x1e, 0x37, 0x61, 0x90, - 0x84, 0x6f, 0xff, 0x7c, 0x32, 0x9e, 0xbf, 0x83, 0x13, 0x6e, 0xb1, 0x7f, - 0x1c, 0x32, 0x2c, 0xd9, 0x62, 0xfc, 0x16, 0xb3, 0xfc, 0x58, 0xa9, 0x3d, - 0x9c, 0x2f, 0xa8, 0x23, 0x18, 0xa1, 0x4d, 0x7f, 0x78, 0xa7, 0x77, 0x25, - 0x8b, 0xf1, 0x4e, 0xee, 0x4b, 0x17, 0xe9, 0xea, 0x0e, 0x73, 0x0f, 0x53, - 0xc5, 0xb7, 0xe0, 0x70, 0xcc, 0x1a, 0xc5, 0xfe, 0x70, 0xb0, 0xb3, 0xaf, - 0x2c, 0x5c, 0xdb, 0x2c, 0x56, 0x22, 0xd9, 0xd0, 0x34, 0x54, 0xc6, 0x97, - 0x67, 0x72, 0xc5, 0xed, 0xdc, 0x6b, 0x17, 0x10, 0xf0, 0xdc, 0x38, 0xd5, - 0xee, 0x60, 0xd6, 0x29, 0x8f, 0x1f, 0xc5, 0x57, 0xe7, 0x30, 0xfb, 0xc4, - 0xb1, 0x4c, 0x79, 0xa4, 0x43, 0x7f, 0xe3, 0xfc, 0x5b, 0x99, 0x9f, 0x6d, - 0x2c, 0x5f, 0xfd, 0xee, 0x72, 0x5f, 0xaf, 0x7a, 0x4e, 0xb1, 0x7f, 0xd3, - 0xf9, 0xec, 0x79, 0x2d, 0x96, 0x2f, 0xfe, 0x17, 0xb8, 0x42, 0x17, 0xa1, - 0x26, 0xac, 0x5e, 0xe3, 0x12, 0xc5, 0xff, 0xfa, 0x74, 0x0f, 0xcf, 0x68, - 0xa6, 0x4f, 0xcc, 0x1a, 0xc5, 0xff, 0x7f, 0xf3, 0xda, 0x19, 0xa9, 0x58, - 0xbf, 0xd3, 0x31, 0x67, 0x67, 0xd2, 0xc5, 0x7d, 0x19, 0x0c, 0xb0, 0x47, - 0x77, 0xff, 0x09, 0xb6, 0x2c, 0x39, 0xdf, 0x5c, 0x58, 0xac, 0x54, 0x3f, - 0x12, 0x31, 0x1d, 0xf1, 0x1f, 0xd0, 0xe4, 0x08, 0xba, 0xff, 0x13, 0x00, - 0x9a, 0x04, 0xb1, 0x7e, 0xf6, 0x02, 0x74, 0xb1, 0x73, 0xfa, 0x4f, 0x65, - 0xcc, 0x6f, 0xb6, 0xf8, 0xb6, 0x58, 0xa9, 0x56, 0xd3, 0x92, 0x98, 0x5a, - 0x16, 0xe2, 0x2b, 0xbd, 0xd0, 0xfb, 0x2c, 0x5f, 0x6c, 0x79, 0xd2, 0xc5, - 0xf6, 0xe2, 0x23, 0x56, 0x2e, 0x66, 0x58, 0xa8, 0x22, 0x01, 0x88, 0x48, - 0x90, 0x32, 0x5b, 0xed, 0x0d, 0xf4, 0xb1, 0x7e, 0x8f, 0x72, 0xf7, 0x16, - 0x2f, 0x37, 0x5c, 0x30, 0xf3, 0xa2, 0x23, 0xbf, 0xfd, 0xa9, 0x8b, 0x9b, - 0xfd, 0xfd, 0xe7, 0xee, 0x58, 0xb8, 0x7f, 0x58, 0xc3, 0xd0, 0xbf, 0xfd, - 0xe8, 0x66, 0xb4, 0xd0, 0xc3, 0xce, 0xeb, 0x17, 0xff, 0xfc, 0x59, 0xef, - 0xb9, 0x99, 0xe8, 0x67, 0x9f, 0xa8, 0x14, 0xac, 0x5f, 0xfa, 0x02, 0x1e, - 0x3b, 0x76, 0x9d, 0x2c, 0x5b, 0x1d, 0x14, 0xcc, 0xcd, 0x58, 0x99, 0xfb, - 0x14, 0x0a, 0x1e, 0x37, 0xfb, 0x53, 0xf6, 0x1c, 0x0e, 0xb1, 0x7f, 0xde, - 0x17, 0xe4, 0x7f, 0x70, 0x2c, 0x5f, 0xf4, 0xc3, 0x1c, 0xb2, 0x4d, 0x58, - 0xbf, 0xff, 0x7e, 0x74, 0x0e, 0x60, 0xfc, 0x26, 0xdf, 0x34, 0xb1, 0x51, - 0xe8, 0xc8, 0x88, 0xeb, 0xc6, 0xf7, 0x78, 0xeb, 0x17, 0xa3, 0x9b, 0x4b, - 0x17, 0xfd, 0xa9, 0xf0, 0xfe, 0x26, 0xe2, 0xc5, 0xff, 0x67, 0x38, 0x22, - 0xd8, 0xd8, 0x96, 0x2f, 0xd8, 0x73, 0xc8, 0xd6, 0x2f, 0xfc, 0x1e, 0xdc, - 0x97, 0xeb, 0xd2, 0x75, 0x8b, 0xff, 0xb8, 0xcd, 0xbe, 0x6f, 0x25, 0x3b, - 0xac, 0x54, 0x48, 0xaf, 0xf9, 0x47, 0x10, 0xaf, 0xff, 0x1f, 0x99, 0x0f, - 0xc9, 0x0b, 0x9c, 0x95, 0x8a, 0xc3, 0xfb, 0x63, 0x1b, 0xd3, 0xae, 0x2c, - 0x5f, 0xe8, 0x4f, 0xf3, 0x3d, 0xc5, 0x8b, 0xff, 0xb1, 0xc0, 0x58, 0xfd, - 0x9f, 0x4c, 0xb1, 0x7f, 0xe2, 0xce, 0x6f, 0xf7, 0xee, 0x7e, 0x2c, 0x54, - 0x48, 0xb8, 0xf1, 0x9f, 0x64, 0x3b, 0xe6, 0x0f, 0x36, 0x58, 0xac, 0x3d, - 0x71, 0x19, 0xdf, 0xdb, 0x07, 0xa7, 0x91, 0xac, 0x5f, 0xff, 0x67, 0x6c, - 0x1f, 0xc4, 0xdc, 0x0e, 0x74, 0x05, 0x8a, 0x74, 0x41, 0xfc, 0xc2, 0xff, - 0xa6, 0x01, 0xe6, 0xb9, 0x81, 0x2c, 0x5f, 0xe8, 0x49, 0xaf, 0xf6, 0xd9, - 0x62, 0xff, 0x80, 0x32, 0x98, 0x7f, 0x80, 0x58, 0xb9, 0x8d, 0x58, 0xad, - 0x91, 0x84, 0xe7, 0x7a, 0x35, 0x23, 0xab, 0xfe, 0xcf, 0xfa, 0x18, 0x4e, - 0x35, 0x8b, 0xc4, 0x21, 0xac, 0x50, 0xd7, 0x9b, 0xb2, 0x1f, 0x9d, 0x1a, - 0x38, 0xc4, 0x44, 0x1a, 0x3a, 0xfc, 0x6c, 0xe0, 0x20, 0x28, 0xcb, 0x3d, - 0x0a, 0x41, 0x43, 0x90, 0x23, 0xc0, 0xce, 0x2f, 0xfb, 0x0b, 0xdc, 0xfc, - 0xb6, 0x96, 0x2f, 0xf4, 0x1f, 0x5a, 0x66, 0x02, 0xc5, 0xf8, 0x99, 0xc8, - 0x0b, 0x17, 0xe0, 0x85, 0x3a, 0xd9, 0x62, 0x8c, 0x3d, 0x10, 0x89, 0xaf, - 0xfe, 0x76, 0x06, 0xa4, 0xbd, 0xfc, 0x82, 0xc5, 0xfe, 0xd6, 0x4f, 0x50, - 0x73, 0xac, 0x5f, 0xd9, 0x3d, 0x41, 0xce, 0xb1, 0x7d, 0x3b, 0xb9, 0x18, - 0x7c, 0x5a, 0x34, 0xbe, 0x67, 0xd6, 0x2c, 0x5f, 0xef, 0xb9, 0xfd, 0xc7, - 0xd2, 0xc5, 0x62, 0xa1, 0x3e, 0x8e, 0x1e, 0x10, 0x9f, 0x24, 0x28, 0x52, - 0xf8, 0xe4, 0x44, 0x37, 0x39, 0xd6, 0x2f, 0xa1, 0xf0, 0xf8, 0xb1, 0x7d, - 0x9b, 0x07, 0x05, 0x8b, 0x98, 0x35, 0x48, 0x2e, 0x57, 0x47, 0xde, 0x44, - 0xa2, 0x25, 0xa8, 0x91, 0x6b, 0xe8, 0x43, 0x5f, 0xbf, 0x9b, 0x08, 0x96, - 0x2f, 0x9b, 0x53, 0xd9, 0x62, 0x86, 0x79, 0xa0, 0x29, 0xbf, 0x87, 0x2e, - 0x3c, 0x3a, 0xc5, 0xfd, 0xf6, 0x2f, 0x67, 0xd6, 0x2f, 0xa1, 0x8c, 0x4b, - 0x17, 0xfb, 0x6c, 0x81, 0x09, 0xb8, 0xb1, 0x7b, 0xdf, 0x75, 0x8a, 0xc4, - 0x66, 0x39, 0x6c, 0x45, 0xac, 0x42, 0x23, 0x4b, 0xd2, 0x78, 0x2c, 0x5f, - 0xff, 0x39, 0xe4, 0xd3, 0x38, 0x22, 0xc1, 0x8b, 0x65, 0x8b, 0xc4, 0x23, - 0x56, 0x2f, 0xbe, 0x13, 0x6c, 0xb1, 0x5d, 0x22, 0xcf, 0x43, 0xa4, 0xa7, - 0xe1, 0xeb, 0xfd, 0xb3, 0x07, 0xff, 0xe6, 0x96, 0x2f, 0x3c, 0xc4, 0xb1, - 0x58, 0x7a, 0x7f, 0x36, 0xb4, 0x64, 0x6e, 0xe8, 0x6c, 0x7b, 0xd4, 0x68, - 0xd8, 0x8e, 0x63, 0x14, 0xd9, 0x02, 0x03, 0xe3, 0x84, 0x7e, 0x4e, 0xc6, - 0x9b, 0x0b, 0x4d, 0xce, 0x3a, 0x52, 0x78, 0x7a, 0x45, 0x0f, 0x7d, 0x46, - 0x62, 0x78, 0xc1, 0xbf, 0x2e, 0x25, 0xa1, 0x90, 0x08, 0x45, 0x14, 0x78, - 0xbc, 0x9e, 0xa2, 0xf4, 0xae, 0x41, 0x46, 0x47, 0xd9, 0xda, 0x3a, 0x1d, - 0xc1, 0xc3, 0xef, 0xba, 0x12, 0x17, 0xfe, 0xfb, 0xf5, 0xe0, 0xcb, 0x3b, - 0x62, 0xc5, 0xff, 0x64, 0x45, 0x27, 0xf0, 0xfe, 0xb1, 0x70, 0x23, 0x37, - 0x3f, 0xcf, 0x21, 0x5f, 0xb3, 0x5c, 0x79, 0x58, 0xbd, 0xdf, 0x5e, 0xf9, - 0x1b, 0x2c, 0x5f, 0xfb, 0x42, 0xdb, 0x3f, 0x11, 0x48, 0xd6, 0x2f, 0xd9, - 0xc0, 0x9b, 0x4b, 0x17, 0xfb, 0x79, 0xfc, 0x9f, 0xe2, 0x58, 0xbd, 0x38, - 0x6a, 0xc5, 0x61, 0xe9, 0x11, 0xad, 0xf3, 0x43, 0xf8, 0xb1, 0x7f, 0x7f, - 0x33, 0xdf, 0xc5, 0x8a, 0x19, 0xe7, 0xf8, 0x8a, 0xf9, 0xba, 0x1f, 0x4b, - 0x17, 0xee, 0x7e, 0x7a, 0xe2, 0xc5, 0xbf, 0x27, 0x9e, 0xe4, 0xb7, 0x8d, - 0xd7, 0x4b, 0x17, 0x83, 0x9e, 0x96, 0x2f, 0x1c, 0x47, 0x58, 0xa9, 0x37, - 0xb8, 0x3f, 0x7c, 0xfd, 0x85, 0xdc, 0xb1, 0x7f, 0x49, 0x60, 0xc7, 0x2b, - 0x15, 0x87, 0xa9, 0xa2, 0x8b, 0xff, 0x31, 0x1a, 0xde, 0x9f, 0x30, 0x16, - 0x2f, 0x07, 0x24, 0xb1, 0x68, 0x2c, 0x50, 0xcd, 0x79, 0xa3, 0xb7, 0x85, - 0xa8, 0x2c, 0x5f, 0xff, 0xbc, 0x2d, 0x37, 0x30, 0xbf, 0x98, 0x50, 0xe2, - 0xc5, 0x6c, 0x7e, 0x4e, 0x3d, 0x52, 0x8b, 0x66, 0x84, 0xa5, 0x2c, 0x5f, - 0x9b, 0x3d, 0x87, 0x58, 0xb8, 0x13, 0x26, 0xcc, 0x83, 0x2f, 0xff, 0xec, - 0xec, 0x59, 0xcc, 0x3c, 0x91, 0xbf, 0x79, 0x3a, 0xc5, 0xf3, 0x8b, 0xbf, - 0xe2, 0xc5, 0xf6, 0x80, 0x64, 0xac, 0x50, 0xcf, 0x30, 0x45, 0x17, 0x7d, - 0x96, 0x2f, 0xff, 0xb6, 0xda, 0x4b, 0x3c, 0xfd, 0x05, 0x9d, 0x79, 0x62, - 0xe7, 0x35, 0x62, 0xc2, 0x58, 0xac, 0x44, 0xab, 0x8b, 0xc4, 0xa9, 0xc1, - 0x8b, 0xee, 0x7e, 0x40, 0xb1, 0x7f, 0xb4, 0x03, 0xb4, 0x0c, 0xf2, 0xc5, - 0xa3, 0xd6, 0x2b, 0x0f, 0x2c, 0xd3, 0x6b, 0xef, 0x49, 0x76, 0x58, 0xbf, - 0xfe, 0x14, 0x0b, 0x0f, 0xe8, 0x64, 0x7b, 0x10, 0x16, 0x2f, 0x4e, 0x74, - 0xb1, 0x4b, 0x14, 0x46, 0xa7, 0xc3, 0xb7, 0xff, 0x4e, 0xa7, 0x79, 0x70, - 0x37, 0x84, 0xb1, 0x5f, 0x4c, 0x0c, 0x89, 0x3c, 0xf7, 0x1c, 0x41, 0x7f, - 0xba, 0xd6, 0x1a, 0xd9, 0xf5, 0x8b, 0xb9, 0x19, 0x1a, 0x32, 0x14, 0xe3, - 0x59, 0x3c, 0x98, 0xc1, 0x04, 0x6f, 0x78, 0xdf, 0xbb, 0x8f, 0x44, 0xce, - 0xbb, 0xa7, 0x33, 0x90, 0xfe, 0x32, 0x30, 0x2c, 0x91, 0x57, 0x21, 0x4f, - 0xe8, 0x5b, 0x88, 0xf2, 0x39, 0xb8, 0x38, 0xc9, 0x7b, 0x90, 0x2b, 0x4c, - 0x9c, 0xb0, 0x52, 0x21, 0x6d, 0x1e, 0xb1, 0x7f, 0x98, 0x1d, 0x78, 0x9b, - 0xeb, 0x17, 0xf3, 0xf4, 0x0d, 0x60, 0xd6, 0x29, 0xcf, 0xe3, 0x42, 0xbf, - 0x34, 0xbc, 0xed, 0x05, 0x8b, 0x87, 0x19, 0x87, 0x95, 0xf2, 0xeb, 0xfb, - 0xa8, 0x36, 0xc1, 0xee, 0xb1, 0x7f, 0xff, 0xfd, 0x8e, 0x4d, 0xe9, 0x26, - 0xda, 0x74, 0x66, 0x10, 0xbc, 0x58, 0x09, 0x58, 0xbe, 0x78, 0x72, 0x33, - 0x11, 0x59, 0xc3, 0x3a, 0x94, 0xc6, 0x32, 0x1b, 0x95, 0x2a, 0x8c, 0x7f, - 0x28, 0x2a, 0xfe, 0xd6, 0x79, 0xfe, 0x25, 0x8b, 0xff, 0xff, 0xfe, 0x30, - 0xb3, 0xd3, 0x9d, 0x78, 0xcc, 0x87, 0xf1, 0xe1, 0xc3, 0x03, 0x2c, 0xf7, - 0x03, 0x3a, 0xc5, 0xa3, 0x7e, 0xf5, 0x18, 0xf1, 0xa1, 0x75, 0xf7, 0x1f, - 0x6e, 0xf5, 0x62, 0xec, 0xee, 0x58, 0xbf, 0x08, 0x89, 0xe0, 0xb1, 0x51, - 0xba, 0x28, 0xbb, 0xc3, 0x82, 0x29, 0xe0, 0xd5, 0xff, 0xa3, 0x7e, 0xf5, - 0xf6, 0x93, 0x37, 0xe6, 0x2c, 0x5f, 0xdd, 0xef, 0x26, 0x21, 0x69, 0x62, - 0xc4, 0xb1, 0x5d, 0xf6, 0x78, 0xd1, 0xa8, 0xd6, 0xd1, 0xeb, 0x17, 0x66, - 0x96, 0x2f, 0xbb, 0xcf, 0xb7, 0x78, 0xb1, 0x5f, 0x3c, 0x46, 0x17, 0xb8, - 0x11, 0x2c, 0x54, 0x6e, 0x9a, 0xa7, 0x79, 0x09, 0x21, 0x97, 0xfd, 0x66, - 0x38, 0x86, 0xff, 0xd9, 0x02, 0x63, 0x62, 0xe4, 0xf9, 0x62, 0xfb, 0xcf, - 0xac, 0x58, 0xae, 0xfb, 0x3e, 0x2c, 0x40, 0xbf, 0xec, 0xf0, 0x7b, 0x36, - 0x9e, 0x25, 0x8b, 0xfa, 0x11, 0xab, 0x6e, 0xf6, 0x35, 0xf7, 0xc5, 0x8b, - 0xc5, 0x9f, 0x58, 0xbf, 0x9c, 0xf9, 0x3a, 0x35, 0x62, 0x86, 0x79, 0x5b, - 0x8e, 0x5e, 0xef, 0xaf, 0x7d, 0xc6, 0x8b, 0x16, 0x8e, 0x58, 0xbf, 0xd9, - 0xce, 0x63, 0x96, 0xeb, 0x15, 0xde, 0x27, 0x27, 0xde, 0x94, 0x46, 0x87, - 0x91, 0xb4, 0x24, 0xa3, 0x59, 0x18, 0x0c, 0x88, 0x56, 0xf6, 0x9b, 0x8b, - 0x17, 0xf4, 0x6e, 0x1f, 0xff, 0x9b, 0x2c, 0x5d, 0x1d, 0xd2, 0xc5, 0xff, - 0x67, 0x62, 0xce, 0x19, 0xe0, 0x96, 0x2d, 0xf5, 0x8a, 0x31, 0x17, 0xd1, - 0xb8, 0xef, 0x7d, 0x9b, 0x10, 0xe0, 0x8f, 0x6f, 0xfb, 0xbd, 0xe6, 0x11, - 0x63, 0x6e, 0xb1, 0x66, 0x58, 0xa8, 0xdc, 0xf3, 0xba, 0x3d, 0xb8, 0xd9, - 0x58, 0xbd, 0x17, 0x25, 0x62, 0xf8, 0x78, 0x51, 0x2c, 0x5c, 0xfe, 0x58, - 0xa7, 0x37, 0x5f, 0x23, 0xbf, 0xf7, 0xb3, 0xfd, 0xde, 0x17, 0x50, 0xe2, - 0xc5, 0x1d, 0x17, 0xbe, 0x58, 0xee, 0x20, 0xbf, 0xdd, 0x7b, 0xa8, 0x08, - 0x8d, 0x58, 0xbf, 0xf4, 0xc4, 0x59, 0xd9, 0x8e, 0x77, 0x58, 0xa6, 0x3f, - 0x81, 0x1c, 0x5f, 0x80, 0x06, 0xeb, 0x8b, 0x17, 0xff, 0xfc, 0x37, 0xcd, - 0x44, 0x59, 0xdb, 0xf8, 0x39, 0xe7, 0x24, 0xd5, 0x8b, 0x7d, 0xd1, 0x26, - 0x22, 0xab, 0xff, 0xcf, 0x14, 0x33, 0xa8, 0x18, 0x76, 0x62, 0x58, 0xb9, - 0xbb, 0x96, 0x2f, 0xec, 0xff, 0x81, 0x9d, 0x2c, 0x5f, 0xff, 0xee, 0x67, + 0x56, 0x2e, 0x00, 0x96, 0x2f, 0x40, 0xa3, 0xd6, 0x2e, 0xef, 0xcb, 0x17, + 0xff, 0xd3, 0xf9, 0x81, 0x31, 0xbd, 0xc2, 0x73, 0xcb, 0x17, 0xfd, 0x87, + 0xef, 0xcf, 0xfc, 0xea, 0x58, 0xb7, 0x16, 0x28, 0x67, 0x9e, 0xc7, 0xb7, + 0xc2, 0xea, 0x1c, 0xac, 0x5f, 0xfc, 0x59, 0xb6, 0xa4, 0x9d, 0xbb, 0x82, + 0xc5, 0x41, 0x34, 0x31, 0x8c, 0xbc, 0x27, 0xfe, 0x43, 0xe2, 0x6b, 0x9f, + 0xcb, 0x17, 0xd3, 0xef, 0xba, 0xc5, 0x82, 0x39, 0xb9, 0x21, 0x7b, 0xc5, + 0xdf, 0x16, 0x2b, 0x0f, 0x14, 0x44, 0xf7, 0x78, 0x35, 0x8b, 0x99, 0xd6, + 0x2f, 0xf4, 0x66, 0x6c, 0xf2, 0x26, 0x58, 0xac, 0x3e, 0x5f, 0x8c, 0xf5, + 0xe2, 0xd7, 0xff, 0x85, 0xd7, 0xf3, 0x7f, 0xbf, 0xe7, 0x35, 0x05, 0x8b, + 0xff, 0xb8, 0xfd, 0x0b, 0x00, 0x2e, 0x7c, 0x4b, 0x17, 0xfc, 0xc0, 0x62, + 0xef, 0xdf, 0x95, 0x8b, 0xff, 0xef, 0xb8, 0x9b, 0xb8, 0x6b, 0x3b, 0x83, + 0x9d, 0x62, 0xff, 0x7c, 0x38, 0xb8, 0xfd, 0x84, 0xb1, 0x6e, 0xd6, 0x2a, + 0x51, 0x3d, 0x8a, 0x4c, 0x73, 0x52, 0x9c, 0xe6, 0x28, 0xba, 0x39, 0x43, + 0x5e, 0xff, 0x81, 0xc1, 0xfd, 0xa1, 0x9c, 0x58, 0xbf, 0xf9, 0xba, 0x10, + 0x98, 0x31, 0xfd, 0xcd, 0x58, 0xbf, 0x9e, 0x4e, 0x53, 0x12, 0xc5, 0xfd, + 0x32, 0x72, 0x98, 0x96, 0x2f, 0xa4, 0x85, 0xcf, 0x9e, 0xd7, 0x0b, 0x6a, + 0x53, 0x14, 0x73, 0xaf, 0xc2, 0x8a, 0xc4, 0xb1, 0x7f, 0xa0, 0x59, 0xd0, + 0xb3, 0x8b, 0x15, 0x87, 0x8a, 0xc2, 0x37, 0xff, 0x08, 0xff, 0x2c, 0xef, + 0xc4, 0xdf, 0x58, 0xbf, 0xff, 0x40, 0x9b, 0xcc, 0x7e, 0x48, 0xe7, 0xf3, + 0x05, 0x8a, 0xe2, 0x26, 0x43, 0x45, 0xbb, 0x38, 0xb1, 0x79, 0x9b, 0x75, + 0x48, 0x5a, 0x5f, 0xf1, 0xdf, 0x9e, 0x60, 0x1d, 0xd6, 0x2a, 0x08, 0x9e, + 0xc2, 0x4d, 0xc5, 0xc0, 0x55, 0x7f, 0xff, 0x7d, 0xb0, 0x9b, 0xdc, 0xe6, + 0xff, 0x7e, 0x93, 0xc5, 0x8b, 0xef, 0x13, 0x1a, 0xb1, 0x7e, 0x9d, 0x67, + 0x7e, 0x58, 0xb3, 0xe9, 0x15, 0x3f, 0x5d, 0x01, 0x1d, 0xe8, 0xf2, 0x1a, + 0xc5, 0xf9, 0xcd, 0xf6, 0xa5, 0x62, 0xdc, 0x58, 0xbf, 0x31, 0xfd, 0x30, + 0x58, 0xbc, 0x6e, 0x0d, 0x62, 0xb4, 0x7b, 0x0c, 0x24, 0x22, 0x8b, 0xff, + 0xfe, 0xfe, 0x6a, 0x7a, 0x07, 0xa6, 0x06, 0x6b, 0x4e, 0x6c, 0xe9, 0x62, + 0xfc, 0x14, 0xf4, 0x6f, 0xac, 0x5f, 0xef, 0x31, 0xda, 0x0d, 0xa5, 0x8a, + 0x93, 0xde, 0x72, 0xbb, 0xdc, 0x0f, 0xcb, 0x15, 0x05, 0xcc, 0x11, 0xbc, + 0xea, 0x35, 0x7f, 0xc3, 0x99, 0x8d, 0x48, 0x83, 0x90, 0x81, 0xf1, 0x77, + 0x48, 0x64, 0x06, 0x41, 0x7f, 0xfe, 0x17, 0x5c, 0x33, 0x0e, 0x4d, 0xdf, + 0x8c, 0x33, 0xf1, 0xcb, 0x17, 0x7b, 0xcb, 0x17, 0xff, 0xc2, 0xf7, 0x07, + 0xf9, 0xe4, 0xfc, 0x53, 0xc5, 0x8b, 0xff, 0xe6, 0xfe, 0x16, 0xb5, 0x9d, + 0xc3, 0xce, 0x75, 0x8a, 0x94, 0xc7, 0x60, 0xc8, 0x68, 0xc0, 0x94, 0x6e, + 0xde, 0x56, 0x2e, 0xfe, 0x2c, 0x5f, 0x1d, 0xc2, 0xe2, 0xc5, 0xff, 0xff, + 0xec, 0xc8, 0xa2, 0x66, 0xdb, 0x9f, 0xce, 0x98, 0x3f, 0xcf, 0x06, 0x36, + 0x58, 0xbf, 0xfc, 0x6b, 0xeb, 0xdd, 0xee, 0xf8, 0x14, 0x36, 0x58, 0xa3, + 0xa3, 0xbc, 0x04, 0x9e, 0x7b, 0xbf, 0xe6, 0x0c, 0xb2, 0x2d, 0x48, 0x4b, + 0x14, 0xe7, 0xd6, 0x23, 0x0b, 0x88, 0x25, 0x8a, 0xc4, 0xf0, 0xb7, 0x18, + 0xfc, 0x6e, 0x21, 0x10, 0xdf, 0xc7, 0x7e, 0xf9, 0x3d, 0xac, 0x5f, 0xfb, + 0x0b, 0xc2, 0x61, 0xf2, 0x4d, 0x58, 0xbf, 0xd2, 0x17, 0x01, 0xef, 0x76, + 0xb1, 0x52, 0x7e, 0xde, 0x3f, 0xbf, 0xa4, 0x7d, 0xf2, 0x62, 0x58, 0xa9, + 0x47, 0xbc, 0x21, 0x4d, 0xc2, 0x1b, 0x9b, 0xa2, 0xc5, 0xf4, 0xee, 0x71, + 0x2c, 0x53, 0x9b, 0xd2, 0x19, 0xb9, 0xfe, 0xb1, 0x43, 0x36, 0xdd, 0x07, + 0xef, 0xbc, 0x77, 0xf2, 0xc5, 0xfb, 0xb1, 0xe9, 0xa0, 0xb1, 0x7e, 0xd0, + 0xf2, 0x40, 0xb1, 0x7f, 0x00, 0xb3, 0x60, 0xe0, 0xb1, 0x4e, 0x7b, 0x02, + 0x28, 0xbc, 0x29, 0xd9, 0x62, 0xf9, 0xf4, 0xd0, 0x58, 0xbd, 0x3e, 0xe1, + 0xcf, 0x03, 0xe3, 0xd5, 0x29, 0x8b, 0x7e, 0x10, 0x44, 0xc3, 0x7f, 0xe2, + 0xf7, 0xf2, 0x01, 0x4f, 0x7c, 0x58, 0xbf, 0xee, 0xf9, 0xe7, 0xdb, 0x67, + 0xf2, 0xc5, 0xff, 0x11, 0x49, 0xba, 0xd3, 0x84, 0xb1, 0x7f, 0xfb, 0x61, + 0xe9, 0xb7, 0x2c, 0xe9, 0xa7, 0xe2, 0xc5, 0x4a, 0x31, 0x70, 0xf4, 0x47, + 0x57, 0xff, 0x17, 0xbe, 0xd0, 0x35, 0xbc, 0x26, 0x58, 0xb8, 0x72, 0xb1, + 0x52, 0x9c, 0x86, 0xa3, 0x06, 0x62, 0xe2, 0x45, 0xb8, 0x0c, 0xb1, 0x78, + 0x9a, 0x0b, 0x17, 0xed, 0x64, 0x23, 0xb1, 0x62, 0xb0, 0xf1, 0xf7, 0x1c, + 0xa7, 0x44, 0x00, 0x97, 0xaf, 0xf3, 0xf4, 0x7e, 0x87, 0x7f, 0x2c, 0x58, + 0x6b, 0x17, 0x6e, 0xcb, 0x17, 0xfb, 0x93, 0xa8, 0xa2, 0x7f, 0xac, 0x5f, + 0xb3, 0x42, 0x90, 0x2c, 0x50, 0xd1, 0x11, 0xa1, 0x2e, 0x0c, 0x04, 0x6d, + 0x7f, 0x6a, 0x4f, 0x84, 0x75, 0x8b, 0xfc, 0x4f, 0xc7, 0x2e, 0xe0, 0xb1, + 0x5a, 0x3e, 0x00, 0x8b, 0x6e, 0x7d, 0x96, 0x2f, 0xdf, 0xc0, 0x06, 0x75, + 0x8b, 0xc7, 0x03, 0xac, 0x5f, 0xda, 0x6e, 0x36, 0x7d, 0x62, 0x98, 0xf2, + 0x84, 0x3b, 0x5c, 0x44, 0xaf, 0x9d, 0x2e, 0x98, 0xf5, 0x8b, 0xfd, 0x9c, + 0x8b, 0xee, 0x17, 0x96, 0x2f, 0xfe, 0x22, 0x9e, 0xfe, 0xfe, 0xe0, 0xa3, + 0xd6, 0x2f, 0xfd, 0xdb, 0x47, 0xc8, 0xbb, 0xe3, 0x47, 0xac, 0x5c, 0xda, + 0x58, 0xa9, 0x46, 0xe3, 0x9b, 0x7d, 0x20, 0x24, 0x7b, 0xf8, 0xf3, 0x18, + 0x10, 0x41, 0x2c, 0x5b, 0x8b, 0x15, 0x27, 0x8e, 0xc6, 0xb4, 0x35, 0x4d, + 0x2f, 0x0a, 0xd3, 0x91, 0xf2, 0x1e, 0xdd, 0x50, 0x83, 0xbd, 0xd3, 0x06, + 0xb1, 0x52, 0xb8, 0xcb, 0x90, 0xbf, 0x78, 0x4f, 0x34, 0xa8, 0xc0, 0xd7, + 0x6f, 0xf8, 0xf9, 0xad, 0x3f, 0x46, 0xdd, 0x62, 0xfe, 0xcc, 0x1f, 0x49, + 0xfa, 0xc5, 0xfe, 0x7f, 0xe6, 0xec, 0xfb, 0x2c, 0x5f, 0xfd, 0xbe, 0xa4, + 0xd9, 0x2f, 0x46, 0xa8, 0xd5, 0xd6, 0x2c, 0x5b, 0xa9, 0x62, 0xf7, 0x5a, + 0x43, 0x58, 0xbf, 0x8e, 0x2f, 0x8c, 0x6c, 0xb1, 0x7f, 0x6b, 0x3e, 0xfd, + 0x92, 0xc5, 0xf1, 0xa0, 0x9f, 0x2c, 0x5b, 0xf2, 0x7a, 0x4e, 0x5d, 0x7f, + 0xe2, 0xcd, 0xbf, 0x9d, 0x5e, 0x7d, 0x2c, 0x5f, 0xdf, 0x21, 0x31, 0xbb, + 0xac, 0x5f, 0xf6, 0x67, 0x3d, 0xfc, 0xde, 0x56, 0x2f, 0xff, 0xe9, 0x0b, + 0x37, 0x1b, 0x96, 0xc6, 0xb7, 0xc2, 0x6f, 0x2c, 0x5f, 0xfb, 0x3c, 0x6b, + 0xef, 0xee, 0x66, 0xcb, 0x17, 0xf4, 0xeb, 0x06, 0xd0, 0x58, 0xad, 0x95, + 0x10, 0x0e, 0x10, 0x3b, 0x93, 0x3a, 0x14, 0x46, 0x1e, 0x39, 0xe8, 0xbe, + 0x1a, 0x15, 0xc5, 0xc5, 0x8b, 0xfb, 0x1b, 0xaf, 0xfb, 0x6c, 0xb1, 0x52, + 0xad, 0xda, 0x0b, 0x03, 0x15, 0xc9, 0x48, 0x44, 0xfa, 0x21, 0x7b, 0xfe, + 0xdc, 0x3f, 0x3c, 0x02, 0xcf, 0xac, 0x5f, 0xff, 0xf9, 0xfd, 0x27, 0x26, + 0x37, 0xef, 0xe9, 0x84, 0x50, 0x9d, 0x6c, 0xb1, 0x7f, 0x66, 0xde, 0xe6, + 0x6c, 0xb1, 0x7f, 0xfa, 0x18, 0x46, 0x1d, 0xf3, 0xbd, 0x4f, 0x96, 0x2c, + 0x52, 0x7f, 0x6c, 0x61, 0x7f, 0xf7, 0x1c, 0x2f, 0x73, 0x0e, 0x52, 0x12, + 0xc5, 0xff, 0xe6, 0x29, 0x04, 0xfd, 0xf4, 0x26, 0x3a, 0xc5, 0xff, 0xe7, + 0x06, 0xa6, 0x0f, 0xce, 0x4e, 0xa0, 0xb1, 0x7f, 0xf7, 0x32, 0x22, 0x93, + 0xeb, 0x53, 0xda, 0xc5, 0x69, 0x12, 0x1e, 0x4a, 0xbf, 0xe1, 0x75, 0xe3, + 0xcf, 0x73, 0x3e, 0xb1, 0x52, 0x7c, 0x4c, 0x47, 0x5d, 0xa7, 0x41, 0xa4, + 0x6f, 0x46, 0x75, 0x7f, 0xb0, 0xb3, 0x6d, 0x84, 0x4b, 0x16, 0x25, 0x8a, + 0xdc, 0xf1, 0x44, 0x69, 0x68, 0xf5, 0x8b, 0xed, 0x73, 0x02, 0x58, 0xbf, + 0x11, 0x4f, 0x61, 0xc9, 0xb9, 0xc1, 0x5b, 0xfc, 0x4c, 0x17, 0xe7, 0x36, + 0x58, 0xbf, 0xfb, 0x52, 0x6c, 0x94, 0xef, 0x2f, 0xf5, 0x8b, 0xff, 0x74, + 0xc1, 0xfe, 0x78, 0x31, 0xb2, 0xc5, 0xfc, 0xfc, 0xd6, 0xa6, 0x0b, 0x17, + 0x89, 0xa0, 0xb1, 0x7e, 0x78, 0xec, 0x04, 0xac, 0x5f, 0xbc, 0x2d, 0x37, + 0x30, 0xf1, 0xbc, 0x39, 0x4b, 0x0e, 0x6f, 0xab, 0x13, 0x0e, 0xdd, 0x05, + 0xa1, 0x65, 0x7f, 0xbf, 0x9e, 0xe1, 0x3c, 0x4b, 0x17, 0xff, 0x3c, 0xc3, + 0x07, 0xc7, 0x2e, 0xe0, 0xb1, 0x5b, 0x1f, 0xc1, 0x1a, 0x5f, 0xcf, 0x85, + 0xdc, 0x38, 0xb1, 0x7d, 0xb1, 0xc4, 0x6a, 0xc5, 0xff, 0xee, 0x3f, 0x61, + 0x66, 0xf2, 0x42, 0x68, 0x2c, 0x5f, 0xb8, 0x03, 0xe0, 0xd6, 0x2d, 0x9b, + 0x23, 0x27, 0x45, 0xc0, 0x26, 0xf2, 0x65, 0xff, 0xfe, 0xc2, 0x18, 0xe4, + 0x0e, 0x19, 0xf8, 0xfe, 0x9e, 0xc2, 0x58, 0xbf, 0xe2, 0xf7, 0x3d, 0x98, + 0x17, 0x16, 0x2e, 0x6f, 0xac, 0x56, 0x1e, 0x8f, 0x67, 0x57, 0xff, 0x7d, + 0xfd, 0xcf, 0xbe, 0x08, 0xbc, 0xb1, 0x7f, 0xfe, 0x8a, 0x12, 0x0d, 0x66, + 0xf3, 0x07, 0xd3, 0xf1, 0x62, 0xfc, 0xc0, 0xe4, 0x25, 0x62, 0xa5, 0x1c, + 0xb0, 0x22, 0xc4, 0x42, 0x57, 0xbf, 0xa7, 0xb6, 0x1f, 0xf1, 0x62, 0xff, + 0xf6, 0xbc, 0x26, 0x0c, 0xbd, 0xf1, 0x34, 0x16, 0x2f, 0xbf, 0x1b, 0xf5, + 0xc8, 0xd6, 0xb1, 0x52, 0x88, 0x1c, 0x4c, 0xa9, 0x65, 0x02, 0x40, 0xf4, + 0x70, 0xe9, 0xc8, 0xf1, 0x77, 0x7d, 0x75, 0xc8, 0x8f, 0x34, 0x69, 0xf8, + 0xd4, 0x9a, 0x15, 0xa5, 0x0e, 0xbe, 0x21, 0xfa, 0x39, 0x91, 0x1d, 0x05, + 0x0a, 0xfb, 0xf4, 0x50, 0x9d, 0x6c, 0xb1, 0x7a, 0x34, 0xce, 0x8b, 0x15, + 0x03, 0xcf, 0x62, 0xbb, 0xff, 0x67, 0x98, 0x80, 0xc7, 0x3b, 0xac, 0x5f, + 0xd2, 0x50, 0x07, 0x40, 0x2c, 0x5e, 0xdd, 0xf6, 0x58, 0xbf, 0xff, 0xf0, + 0xbf, 0x83, 0xf7, 0xf0, 0xf9, 0xff, 0xb3, 0xfa, 0x7d, 0xc5, 0x8b, 0xfe, + 0x9f, 0x3c, 0x1f, 0x5a, 0x75, 0x8b, 0xff, 0x11, 0x31, 0xa1, 0xeb, 0x4d, + 0xda, 0xc5, 0xee, 0x61, 0x2c, 0x5f, 0xee, 0xff, 0x83, 0xd3, 0x6e, 0xb1, + 0x58, 0x89, 0x37, 0x41, 0x61, 0xca, 0x95, 0x42, 0x30, 0x21, 0x34, 0xf7, + 0xb3, 0x07, 0x1f, 0x26, 0xce, 0x43, 0x2e, 0xff, 0xf6, 0x0f, 0xf8, 0xe4, + 0x59, 0xbb, 0x12, 0xc5, 0xd9, 0xd4, 0xb1, 0x7e, 0x0c, 0x8b, 0x23, 0xd6, + 0x2a, 0x51, 0x18, 0x6a, 0x38, 0x63, 0x57, 0xfb, 0x44, 0x2e, 0xfc, 0x52, + 0xb1, 0x6e, 0xb1, 0x62, 0xdd, 0x4b, 0x15, 0x27, 0xc0, 0x03, 0x4e, 0xa1, + 0x7b, 0xfd, 0xec, 0xd0, 0x0e, 0xfc, 0x58, 0xb8, 0xe3, 0x58, 0xbf, 0xff, + 0x6f, 0xf6, 0x2f, 0x73, 0x52, 0x2f, 0x13, 0xf4, 0x58, 0xbf, 0x7d, 0xfa, + 0x64, 0x4b, 0x15, 0xb2, 0x20, 0xe0, 0xb1, 0x52, 0x8f, 0x37, 0x34, 0x68, + 0x4d, 0xdf, 0xd0, 0x72, 0xf4, 0x81, 0x62, 0x96, 0x2f, 0x0c, 0x53, 0x11, + 0xb9, 0x01, 0x6d, 0xf1, 0x4f, 0x7c, 0x58, 0xad, 0x1e, 0xb7, 0x43, 0x3b, + 0xff, 0xff, 0xe9, 0x2d, 0xdb, 0xcd, 0xd8, 0x3d, 0xcc, 0x22, 0x63, 0x43, + 0xd6, 0x9b, 0xb5, 0x8b, 0xe9, 0x01, 0xf1, 0x62, 0x80, 0x8a, 0x2f, 0x42, + 0x02, 0xff, 0x87, 0xce, 0x66, 0x87, 0xfc, 0x58, 0xbf, 0xfd, 0xd5, 0xe9, + 0x0a, 0x79, 0xf6, 0xe9, 0x83, 0x58, 0xbd, 0x27, 0x75, 0x8b, 0x79, 0x62, + 0xef, 0xbe, 0xe6, 0xb8, 0x87, 0x2f, 0xf6, 0x1d, 0xbb, 0x36, 0x1d, 0xac, + 0x5f, 0xf6, 0x0d, 0xf8, 0x36, 0x60, 0x96, 0x2f, 0x7b, 0xcd, 0xa3, 0xf0, + 0x01, 0xbd, 0xfe, 0x90, 0x6c, 0xd0, 0x98, 0xf5, 0x8b, 0xff, 0xfb, 0x8f, + 0xef, 0xe0, 0xf3, 0x79, 0xf3, 0x96, 0x76, 0xb1, 0x52, 0x9b, 0x0e, 0x42, + 0x70, 0x8c, 0xfc, 0x6f, 0x7f, 0xfe, 0x2c, 0x03, 0x10, 0x03, 0x3f, 0x84, + 0xdb, 0x4a, 0xc5, 0x62, 0xb9, 0xde, 0xe1, 0x8c, 0xe5, 0x11, 0x1d, 0x14, + 0x7b, 0xfe, 0x40, 0xbd, 0xe7, 0xd2, 0xc5, 0xa3, 0x23, 0x77, 0x65, 0x13, + 0xd6, 0x0f, 0x46, 0xb1, 0x89, 0x8d, 0x8f, 0x68, 0x66, 0xc2, 0x10, 0xc3, + 0x8f, 0x3f, 0x27, 0x85, 0x0d, 0x8f, 0x07, 0x79, 0x40, 0x1d, 0xc6, 0x78, + 0xf0, 0xa7, 0x8f, 0x23, 0x8a, 0x33, 0x9d, 0x47, 0x88, 0x78, 0x60, 0xfe, + 0x72, 0x1d, 0x96, 0xc0, 0x79, 0xd7, 0x97, 0x94, 0xba, 0xae, 0x52, 0x98, + 0x7d, 0x2d, 0x50, 0x50, 0xf6, 0x0a, 0x12, 0x31, 0xd1, 0x92, 0x07, 0x38, + 0xbd, 0xd4, 0xc7, 0x7f, 0xff, 0xf3, 0x1e, 0x31, 0xf5, 0xa1, 0x6b, 0x52, + 0x58, 0x6b, 0xff, 0xf8, 0x1a, 0xc5, 0xe1, 0x7b, 0x16, 0x2f, 0xfc, 0x59, + 0xde, 0xf3, 0xfc, 0xd6, 0x2c, 0x56, 0x8f, 0x73, 0xc3, 0xb7, 0xf8, 0x5d, + 0xc6, 0xdc, 0x3b, 0xf1, 0x62, 0xff, 0xe3, 0x42, 0x8f, 0xd8, 0x71, 0xb1, + 0x86, 0x7e, 0x39, 0x62, 0xfd, 0x3b, 0x36, 0xb7, 0x58, 0xb9, 0xfa, 0x2c, + 0x5e, 0x9f, 0x71, 0x62, 0xf7, 0x04, 0x7d, 0x1f, 0x00, 0x0a, 0x88, 0x66, + 0xa3, 0x52, 0x3e, 0x1e, 0x17, 0x17, 0xf0, 0x39, 0x9b, 0xb0, 0xd6, 0x2e, + 0x9f, 0xac, 0x56, 0x1e, 0x31, 0xcb, 0xef, 0xc4, 0xc1, 0x73, 0x8b, 0x15, + 0x87, 0x95, 0xa2, 0x1b, 0xe1, 0x7b, 0x09, 0x62, 0xfb, 0x76, 0x6d, 0xd5, + 0x25, 0x11, 0x78, 0xd9, 0xe2, 0xc5, 0xfd, 0xf9, 0xf4, 0xf6, 0x12, 0xc5, + 0x9d, 0x62, 0xf8, 0xa0, 0xe7, 0x58, 0xbf, 0x43, 0x09, 0xc6, 0xb1, 0x58, + 0x8a, 0x87, 0x1e, 0xf9, 0x83, 0x08, 0xf8, 0x8a, 0xff, 0x10, 0x9a, 0x02, + 0x1e, 0x2c, 0x5f, 0x9c, 0x86, 0xdb, 0xac, 0x56, 0xc9, 0xce, 0xe8, 0x88, + 0xf0, 0xd9, 0xe2, 0x3f, 0x43, 0x3b, 0xef, 0xe6, 0xb1, 0x62, 0xdd, 0x4b, + 0x17, 0xff, 0x4e, 0xe5, 0x9b, 0xff, 0x3a, 0x49, 0x2c, 0x59, 0xe2, 0x3d, + 0xb3, 0x8a, 0xdf, 0x66, 0xc7, 0xf2, 0xc5, 0x4a, 0x32, 0x7e, 0xfa, 0x45, + 0x17, 0xa4, 0xb7, 0x58, 0xbe, 0x6f, 0xcf, 0xd6, 0x2f, 0x3e, 0x04, 0xb1, + 0x78, 0xfc, 0x95, 0x8a, 0xd8, 0xfe, 0x77, 0x1d, 0x8f, 0x22, 0x10, 0xed, + 0xfc, 0xfd, 0x0b, 0x3b, 0xe2, 0xc5, 0xb6, 0x58, 0xbf, 0xbe, 0xc4, 0x30, + 0xfb, 0x58, 0xbf, 0xfe, 0x63, 0x4c, 0xf1, 0xb2, 0x50, 0xcf, 0xb9, 0xd6, + 0x2c, 0x29, 0x44, 0xab, 0x89, 0x91, 0x85, 0xc2, 0x0d, 0x62, 0xf0, 0xe4, + 0xeb, 0x17, 0xc6, 0x86, 0x5b, 0xac, 0x50, 0xcf, 0x0c, 0xd1, 0xdb, 0xed, + 0x3c, 0x9d, 0x62, 0xff, 0xfa, 0x1b, 0x46, 0xa9, 0x8d, 0x36, 0xdf, 0x46, + 0x19, 0xf8, 0xe5, 0x8b, 0xf9, 0x9b, 0xbf, 0xe6, 0x2c, 0x54, 0xa6, 0x68, + 0xeb, 0x8c, 0x46, 0x02, 0x22, 0x66, 0xbf, 0xff, 0x86, 0x2f, 0x70, 0xce, + 0x3e, 0x98, 0x19, 0xf7, 0x89, 0x62, 0xf9, 0xf7, 0x7e, 0x8b, 0x14, 0xe8, + 0x83, 0xd2, 0xf5, 0xe9, 0xc2, 0x58, 0xbf, 0x1c, 0x7a, 0x6d, 0xd6, 0x2e, + 0x3b, 0xac, 0x53, 0x9e, 0x0b, 0x15, 0x50, 0xcf, 0xf3, 0xeb, 0x97, 0xe6, + 0x37, 0x3e, 0xcb, 0x15, 0x87, 0x94, 0x22, 0x2b, 0xff, 0xf8, 0x44, 0xc6, + 0x99, 0xe3, 0x64, 0xa1, 0x9f, 0x73, 0xac, 0x5f, 0x9e, 0x20, 0x30, 0x16, + 0x2f, 0xb5, 0xac, 0x8e, 0x58, 0xa3, 0xa2, 0xb3, 0xeb, 0xac, 0x53, 0x7f, + 0xa4, 0xa0, 0x3f, 0xb9, 0xd6, 0x2f, 0xff, 0xfb, 0xd9, 0xec, 0xd0, 0x0e, + 0xd0, 0x9e, 0x3f, 0x1f, 0xbf, 0x2c, 0x5e, 0xd9, 0x89, 0x62, 0xb1, 0x10, + 0x82, 0x67, 0xa3, 0x51, 0xb3, 0xc8, 0x5b, 0xdf, 0xf6, 0x77, 0xb9, 0x36, + 0x77, 0xba, 0xc5, 0xfe, 0xef, 0x72, 0x6c, 0xef, 0x75, 0x8b, 0xf3, 0x40, + 0xa7, 0x86, 0x1f, 0x9e, 0x1e, 0x5e, 0xd8, 0x5e, 0x58, 0xbb, 0x61, 0xac, + 0x56, 0x1b, 0x86, 0x1f, 0xbe, 0x0b, 0x3e, 0xcb, 0x17, 0xc5, 0x39, 0xda, + 0xc5, 0x49, 0xe2, 0xf8, 0x8e, 0xf0, 0xdf, 0xa2, 0xc5, 0xa3, 0x25, 0x9a, + 0x79, 0xb1, 0x14, 0x23, 0x33, 0x1c, 0x2f, 0x72, 0x3b, 0xed, 0xe3, 0x1c, + 0x78, 0x53, 0xc4, 0x82, 0x78, 0x62, 0xfe, 0x36, 0x76, 0x86, 0x51, 0x43, + 0xa3, 0x90, 0xcd, 0xf4, 0x61, 0x1d, 0x21, 0x39, 0x1c, 0xea, 0x1b, 0x27, + 0x51, 0x0d, 0xed, 0xe0, 0x75, 0x8b, 0xdf, 0x98, 0xf5, 0x8b, 0xe2, 0x60, + 0xbe, 0xb1, 0x7e, 0xe0, 0x98, 0x80, 0xb1, 0x7d, 0x84, 0xfe, 0x58, 0xbd, + 0xfc, 0x02, 0xc5, 0xec, 0x3c, 0x64, 0xa3, 0x21, 0xc7, 0xe2, 0x20, 0xf1, + 0x1c, 0x71, 0x47, 0x51, 0x0d, 0xff, 0x9f, 0x5a, 0xcf, 0xfe, 0x7b, 0x82, + 0xc5, 0xfe, 0x7d, 0x7d, 0xb9, 0x81, 0xac, 0x51, 0xa7, 0xe9, 0xf4, 0x0b, + 0xff, 0xec, 0x72, 0xd8, 0x3f, 0x39, 0x0a, 0x19, 0xc5, 0x8b, 0x86, 0x4b, + 0x17, 0xf4, 0x07, 0xa7, 0x16, 0xcb, 0x17, 0xff, 0xfb, 0xff, 0x9e, 0xe1, + 0x9c, 0x72, 0x01, 0x67, 0xbf, 0x8b, 0x17, 0xd9, 0xcc, 0x09, 0x62, 0xb1, + 0x10, 0x7a, 0x60, 0xbf, 0xd3, 0xe6, 0xf9, 0x83, 0x95, 0x8b, 0xf4, 0x53, + 0xf1, 0x6c, 0xb1, 0x7e, 0x68, 0x79, 0xf6, 0x58, 0xac, 0x3d, 0x47, 0x2b, + 0xbb, 0xce, 0xb1, 0x7f, 0xfd, 0x9f, 0x2c, 0xf7, 0xf2, 0x13, 0xe9, 0x1a, + 0xc5, 0x31, 0xf2, 0x84, 0x2f, 0x74, 0xc6, 0x62, 0xa8, 0xe3, 0x48, 0xfb, + 0x50, 0x71, 0x7d, 0x42, 0xcc, 0xe4, 0x5f, 0x84, 0x47, 0x21, 0x0b, 0x43, + 0x5c, 0x02, 0xe4, 0xb7, 0x2b, 0xd8, 0x16, 0x2c, 0x5f, 0x31, 0xca, 0x56, + 0x2f, 0xfe, 0x72, 0x9f, 0x3e, 0x9c, 0xf8, 0x35, 0x8a, 0x23, 0xe3, 0xea, + 0x21, 0xb1, 0xd6, 0x2e, 0x9d, 0x96, 0x2b, 0x0f, 0x38, 0x89, 0x04, 0x25, + 0x70, 0xbe, 0xb1, 0x7f, 0x34, 0x3b, 0xe4, 0xec, 0xb1, 0x7b, 0x66, 0x09, + 0x62, 0xfb, 0x9f, 0x68, 0x2c, 0x56, 0xc7, 0x84, 0xc3, 0xf7, 0xfc, 0xdd, + 0x96, 0x74, 0xd3, 0xf1, 0x62, 0xfc, 0xf3, 0x06, 0x82, 0xc5, 0x6c, 0x98, + 0x70, 0xc6, 0x34, 0xe4, 0x72, 0x2f, 0x9d, 0xdf, 0xd9, 0xb0, 0xe7, 0x06, + 0xb1, 0x7f, 0x9b, 0xed, 0x87, 0x7e, 0x2c, 0x5f, 0x0f, 0xef, 0x12, 0xc5, + 0x82, 0x58, 0xac, 0x44, 0xb9, 0xa5, 0xcc, 0x65, 0xe2, 0x4b, 0xf1, 0x37, + 0x56, 0x6c, 0xb1, 0x7f, 0xc0, 0x92, 0xcf, 0x72, 0x4e, 0xb1, 0x78, 0x26, + 0xfa, 0xc5, 0xd2, 0x35, 0x8a, 0x93, 0x6b, 0xf1, 0xeb, 0xc5, 0x31, 0xeb, + 0x17, 0xfd, 0x9e, 0xfb, 0x6f, 0x24, 0x35, 0x8b, 0xfc, 0x5e, 0xe6, 0xb2, + 0x4e, 0xb1, 0x52, 0x7d, 0x8c, 0x73, 0x7e, 0x72, 0x21, 0x47, 0xac, 0x5f, + 0xf7, 0x30, 0x79, 0xa8, 0x4e, 0x96, 0x2a, 0x4f, 0x8f, 0x45, 0x54, 0xb1, + 0x7c, 0x4d, 0xdf, 0x16, 0x2b, 0x63, 0x5f, 0xe0, 0xca, 0x93, 0xf2, 0xc5, + 0x0b, 0xb7, 0x12, 0xc5, 0xfd, 0x9f, 0xf8, 0x8b, 0x65, 0x8b, 0xd3, 0xa3, + 0x56, 0x2e, 0xcd, 0x2c, 0x56, 0xe6, 0xd7, 0xc3, 0xd7, 0xe8, 0x37, 0xa0, + 0xcb, 0x17, 0xd2, 0x00, 0x4a, 0xc5, 0xfe, 0x9d, 0x6d, 0x87, 0xc3, 0xac, + 0x54, 0x9f, 0xf1, 0x14, 0x70, 0x8a, 0xff, 0x88, 0x79, 0xa1, 0xb3, 0x0d, + 0x62, 0xc2, 0x58, 0xa9, 0x3c, 0xa6, 0x38, 0xa5, 0x8b, 0x12, 0xc6, 0xc4, + 0xcb, 0xf6, 0xda, 0x66, 0xf2, 0xc5, 0x39, 0xe4, 0xb1, 0x05, 0xc7, 0x1a, + 0xc5, 0xf7, 0xdf, 0xf1, 0x9d, 0x6a, 0xfe, 0x08, 0xe1, 0x9d, 0x91, 0x9d, + 0x9b, 0x0e, 0x3d, 0xcf, 0x1c, 0xae, 0x26, 0xdd, 0x10, 0x1e, 0x11, 0x7f, + 0x87, 0xab, 0x10, 0x10, 0xcf, 0x19, 0x3d, 0x0a, 0x00, 0x9d, 0xe3, 0x9d, + 0x7a, 0x88, 0x2f, 0x73, 0x09, 0x62, 0xfb, 0x76, 0x6d, 0xd5, 0x25, 0xe9, + 0x7f, 0xf4, 0x80, 0x7f, 0x9e, 0x61, 0xe6, 0x3d, 0x62, 0xb4, 0x7f, 0x07, + 0x31, 0xbf, 0x3f, 0x56, 0xe2, 0xd9, 0x62, 0xd0, 0x58, 0xb1, 0xd6, 0x2f, + 0x14, 0xc1, 0x62, 0xa4, 0xf0, 0x18, 0x4b, 0xc2, 0x57, 0x48, 0x16, 0x2f, + 0x7e, 0x7b, 0x58, 0xba, 0x7b, 0x58, 0xbd, 0xc7, 0x35, 0x62, 0x8d, 0x3d, + 0x4f, 0x8f, 0x78, 0x62, 0xfb, 0x3c, 0xfb, 0x2c, 0x5f, 0xdb, 0x07, 0x1c, + 0xc4, 0x05, 0x8b, 0xff, 0x31, 0x03, 0x3d, 0x24, 0xe0, 0x58, 0xa9, 0x3e, + 0xf8, 0xe3, 0x3b, 0x46, 0x41, 0x55, 0x16, 0x42, 0x53, 0x44, 0x4c, 0xdc, + 0x02, 0xd1, 0x35, 0xc7, 0x18, 0x07, 0x09, 0x2b, 0xf1, 0xfd, 0xc6, 0xed, + 0x62, 0xfb, 0xae, 0xbd, 0xc3, 0x65, 0x8b, 0xfd, 0x27, 0x83, 0x14, 0x9d, + 0x62, 0xa4, 0xf8, 0x1c, 0xba, 0xfe, 0xcd, 0x6e, 0xcd, 0xba, 0xa4, 0x46, + 0x2f, 0xff, 0xcc, 0x4c, 0x7d, 0xfe, 0xe3, 0x92, 0xf1, 0xfc, 0xb1, 0x68, + 0x46, 0x22, 0x46, 0x07, 0x97, 0xfd, 0xe2, 0x60, 0x61, 0x66, 0x96, 0x2f, + 0xff, 0xff, 0xff, 0xb0, 0x36, 0xe9, 0xf6, 0x80, 0x87, 0x9f, 0x79, 0x83, + 0x14, 0x9f, 0x05, 0xd7, 0xbf, 0x84, 0xdb, 0x4e, 0x96, 0x2b, 0x11, 0xce, + 0x23, 0x7b, 0xff, 0xcf, 0x9c, 0xfb, 0x43, 0x87, 0xce, 0xf8, 0xb1, 0x7f, + 0xfb, 0xbd, 0xdf, 0x46, 0x6a, 0x76, 0x6d, 0x6e, 0xb1, 0x5a, 0x44, 0xdf, + 0x92, 0xed, 0x19, 0x2a, 0xcb, 0xb5, 0x08, 0xa6, 0x85, 0x89, 0x46, 0x27, + 0xc8, 0x5e, 0xdf, 0xfe, 0x8c, 0x3b, 0x42, 0x33, 0x35, 0xbb, 0x36, 0xea, + 0x91, 0xe0, 0xbf, 0x6b, 0x76, 0x6d, 0xd5, 0x23, 0xf9, 0x77, 0x47, 0x58, + 0xbf, 0x46, 0x1d, 0xa1, 0x19, 0x87, 0xa0, 0xe6, 0xf7, 0xff, 0xa3, 0x0e, + 0xd0, 0x8c, 0xcd, 0x6e, 0xcd, 0xba, 0xa4, 0x86, 0x2f, 0xff, 0xec, 0x3c, + 0xc2, 0x30, 0x32, 0x91, 0xff, 0x37, 0xcd, 0x2c, 0x5f, 0xb5, 0xbb, 0x36, + 0xea, 0x92, 0x20, 0xbe, 0x92, 0x9e, 0xd6, 0x2f, 0x34, 0x23, 0x30, 0xf6, + 0x63, 0xcd, 0xef, 0xe6, 0xde, 0x30, 0x0f, 0xb2, 0xc5, 0x1c, 0xfa, 0xfa, + 0x1c, 0x5f, 0xfa, 0x11, 0x82, 0xe1, 0x93, 0xc9, 0x82, 0xc5, 0x46, 0x1f, + 0x44, 0x92, 0x5f, 0xfa, 0x27, 0xff, 0x79, 0xe1, 0xe1, 0xd6, 0x2f, 0xff, + 0x34, 0x60, 0xd8, 0x9b, 0x73, 0x03, 0x63, 0xac, 0x5f, 0xcf, 0xe7, 0xd3, + 0x01, 0x62, 0xff, 0x0b, 0xdf, 0x92, 0x9f, 0x2c, 0x5f, 0x67, 0xb0, 0x0b, + 0x17, 0xe2, 0x13, 0x43, 0x8b, 0x16, 0x3a, 0xc5, 0xff, 0x74, 0xce, 0xe1, + 0xa6, 0x68, 0x2c, 0x5e, 0x26, 0x8c, 0x82, 0x3e, 0x34, 0x5a, 0x46, 0x7e, + 0x22, 0x8e, 0x28, 0x0c, 0x4a, 0xfe, 0x8a, 0x33, 0x85, 0x3b, 0x2c, 0x5f, + 0x49, 0x4f, 0xd6, 0x2f, 0xb3, 0x52, 0x75, 0x8a, 0x19, 0xe1, 0xfc, 0x86, + 0xff, 0x14, 0x86, 0xc5, 0xbc, 0xac, 0x5f, 0xc6, 0x9a, 0xda, 0xd4, 0xac, + 0x5f, 0xff, 0x61, 0x61, 0xbf, 0x68, 0x7c, 0x26, 0x0c, 0xeb, 0x14, 0xe8, + 0x82, 0xf9, 0x85, 0xe6, 0x6d, 0xd5, 0x24, 0x89, 0x7d, 0x0c, 0x2d, 0x96, + 0x2b, 0x73, 0xcd, 0x88, 0xaa, 0xa0, 0x89, 0x3d, 0x37, 0xdf, 0x85, 0xe2, + 0x9f, 0xac, 0x5f, 0xfb, 0xa3, 0x6b, 0x8d, 0xfe, 0x4e, 0xcb, 0x17, 0xe9, + 0x8b, 0x52, 0x75, 0x8a, 0xf9, 0xf5, 0xf1, 0x0a, 0xff, 0xe6, 0xef, 0x9f, + 0x0a, 0x40, 0x60, 0x67, 0x58, 0xbf, 0xd0, 0x9d, 0x6d, 0x3a, 0xd9, 0x62, + 0xff, 0xef, 0x72, 0x4e, 0x58, 0x3f, 0xe7, 0x96, 0x2f, 0xfa, 0x7a, 0x66, + 0x9b, 0x66, 0xe2, 0xc5, 0x2c, 0x51, 0x87, 0x8e, 0x23, 0xba, 0x94, 0x72, + 0x61, 0xb0, 0x21, 0x17, 0x7e, 0xcf, 0xc9, 0x41, 0x62, 0xff, 0xec, 0xff, + 0x8a, 0x41, 0x84, 0xd0, 0x58, 0xa3, 0x9f, 0x49, 0x13, 0xdf, 0xff, 0x7e, + 0x7d, 0xc3, 0x03, 0x6f, 0x36, 0x9b, 0xa9, 0x62, 0xfb, 0x80, 0xf3, 0x2c, + 0x5c, 0x52, 0x33, 0xf8, 0x3a, 0xad, 0xff, 0x7f, 0x37, 0x93, 0x39, 0xa8, + 0x96, 0x2f, 0xef, 0x1d, 0xfd, 0xf7, 0x58, 0xa8, 0x1f, 0x5b, 0x1e, 0xda, + 0x32, 0x57, 0x57, 0x46, 0x45, 0x91, 0xa4, 0x44, 0x46, 0xd0, 0x93, 0x01, + 0x11, 0x46, 0x5d, 0xc8, 0x4e, 0x7a, 0x13, 0x21, 0xc2, 0x5e, 0xff, 0x78, + 0x98, 0xd3, 0xb4, 0x16, 0x2f, 0x89, 0xbd, 0xc5, 0x8b, 0xfb, 0x60, 0xc6, + 0x37, 0x89, 0x62, 0xcd, 0x04, 0xcf, 0x47, 0x0b, 0x5d, 0xcd, 0x18, 0x8a, + 0xff, 0xd1, 0x93, 0xfc, 0xd7, 0x46, 0xfb, 0x2c, 0x5d, 0x1b, 0xee, 0xb1, + 0x76, 0x1d, 0x62, 0xfa, 0x1a, 0x16, 0xeb, 0x17, 0xfa, 0x5f, 0x6c, 0x18, + 0x67, 0x58, 0xb9, 0xc6, 0xb1, 0x68, 0xce, 0xb1, 0x14, 0xd2, 0x3d, 0xd8, + 0xbf, 0xc9, 0x7a, 0x8d, 0x6e, 0xce, 0x8b, 0x17, 0xff, 0xb7, 0xcf, 0x49, + 0x7b, 0x8c, 0x42, 0xc5, 0x8b, 0x46, 0x70, 0xf8, 0x83, 0x19, 0xa1, 0xa7, + 0xa4, 0xf0, 0xe9, 0xe9, 0x0b, 0xdb, 0xff, 0xa3, 0x34, 0xc0, 0x6f, 0x3e, + 0xb0, 0xeb, 0x17, 0x81, 0xe7, 0x58, 0xa8, 0x1f, 0x21, 0x23, 0xdf, 0xfb, + 0xbe, 0x41, 0xf9, 0xc9, 0xd4, 0x16, 0x2f, 0xee, 0xb7, 0xae, 0xe3, 0x5b, + 0xf4, 0x95, 0x8b, 0xe7, 0x3b, 0x75, 0x2c, 0x5f, 0xed, 0xe4, 0xfc, 0xf4, + 0xc1, 0x62, 0xa4, 0xf6, 0x9c, 0x96, 0xef, 0xe2, 0xc5, 0xd2, 0x12, 0xc5, + 0xfc, 0x2d, 0x00, 0xc1, 0xc4, 0xb1, 0x68, 0xce, 0xb8, 0x98, 0xec, 0x21, + 0x38, 0x32, 0x0f, 0x8b, 0xf0, 0x62, 0x99, 0x3b, 0xd0, 0x46, 0xbd, 0x7f, + 0xec, 0x70, 0x48, 0x18, 0x85, 0x8b, 0x17, 0xf4, 0x33, 0xff, 0x68, 0x2c, + 0x5f, 0xe9, 0xd1, 0x66, 0xc1, 0xc1, 0x62, 0xfe, 0x3b, 0xfb, 0xe2, 0x35, + 0x62, 0xff, 0xbe, 0xec, 0x09, 0x17, 0x5f, 0x2b, 0x17, 0x9e, 0x28, 0xcd, + 0x91, 0x45, 0x86, 0xbe, 0x30, 0xbf, 0xf6, 0xf1, 0x83, 0x73, 0x18, 0xb7, + 0x95, 0x8a, 0xc4, 0x44, 0xb2, 0x2d, 0xff, 0xfd, 0x83, 0xfc, 0x87, 0x19, + 0xe2, 0x60, 0x73, 0x92, 0x04, 0x8b, 0x46, 0x4b, 0x3f, 0x6c, 0x68, 0x3b, + 0xc6, 0x8f, 0xdb, 0x69, 0xe7, 0xc4, 0x3f, 0x28, 0x69, 0xa1, 0x40, 0x08, + 0xf7, 0x88, 0xa7, 0xc7, 0x9d, 0x23, 0x59, 0x8e, 0x21, 0xbf, 0xe9, 0x8c, + 0xc2, 0x73, 0x67, 0x8b, 0x17, 0xf9, 0xbf, 0x19, 0x91, 0x4c, 0x7a, 0xc5, + 0xff, 0xee, 0xb6, 0x36, 0x33, 0x07, 0x25, 0xe7, 0xf8, 0x96, 0x2f, 0xf0, + 0x3f, 0x9d, 0x80, 0x3e, 0xd6, 0x2f, 0xff, 0x36, 0xfd, 0xc9, 0xaf, 0x3d, + 0x8c, 0x5d, 0xac, 0x5e, 0xe6, 0x71, 0x62, 0xfb, 0x93, 0xdc, 0x16, 0x2f, + 0x85, 0xd4, 0x39, 0x58, 0xbf, 0xfd, 0xc1, 0xe3, 0x9a, 0xfc, 0xe4, 0xea, + 0x0b, 0x14, 0x34, 0xce, 0x77, 0x38, 0xed, 0x3e, 0x21, 0xdf, 0x92, 0x70, + 0x9a, 0xff, 0xff, 0x85, 0xdf, 0x39, 0x9f, 0xd6, 0xb0, 0x2c, 0xe8, 0xe5, + 0xdf, 0x96, 0x2f, 0xfd, 0x90, 0xfc, 0xeb, 0x30, 0x8d, 0x58, 0xbf, 0xfe, + 0xd0, 0x3d, 0x91, 0x14, 0x9f, 0x53, 0x3d, 0x16, 0x2f, 0xff, 0x4f, 0xdc, + 0xde, 0x73, 0x08, 0x11, 0xd8, 0xb1, 0x52, 0x89, 0xff, 0xa9, 0x5e, 0x20, + 0x71, 0x62, 0xfa, 0x78, 0x37, 0x58, 0xbf, 0xfe, 0xd1, 0x4f, 0x70, 0xfb, + 0x3f, 0xa7, 0xdc, 0x58, 0xbe, 0xdd, 0x9b, 0x75, 0x48, 0xa0, 0x5f, 0xe3, + 0xb4, 0x3f, 0x2d, 0xa5, 0x8b, 0xfe, 0x19, 0x4f, 0x66, 0x73, 0x52, 0xb1, + 0x40, 0x3e, 0xe0, 0x8c, 0xef, 0xd0, 0x78, 0xe9, 0x3a, 0xc5, 0x49, 0xe7, + 0x31, 0x1d, 0x41, 0x3b, 0xec, 0x22, 0x34, 0x75, 0xc8, 0xb4, 0xa0, 0x50, + 0xed, 0xbf, 0xfd, 0xf7, 0xd8, 0xe2, 0xd0, 0x39, 0xc6, 0x1a, 0xc5, 0xff, + 0x7e, 0x75, 0x13, 0xfe, 0x62, 0x58, 0xbf, 0xe6, 0xd6, 0xda, 0x98, 0x36, + 0x96, 0x2f, 0xf3, 0x04, 0x58, 0x09, 0x02, 0xc5, 0xfe, 0xc1, 0xe0, 0xe4, + 0xbc, 0xb1, 0x50, 0x44, 0xf9, 0x1d, 0x70, 0xce, 0xff, 0xd3, 0xb1, 0x67, + 0x60, 0x6e, 0xf8, 0xb1, 0x7f, 0x34, 0x09, 0xe4, 0xd5, 0x8b, 0xfb, 0x40, + 0x1b, 0x37, 0xd6, 0x2f, 0x00, 0x3e, 0xd6, 0x2f, 0x8e, 0xd0, 0xc5, 0x8a, + 0xec, 0xf0, 0x80, 0x41, 0x7f, 0x6d, 0x9e, 0xe4, 0x81, 0x62, 0xff, 0x80, + 0x26, 0x80, 0x1b, 0xbe, 0x2c, 0x54, 0xa3, 0xf7, 0x1c, 0x1c, 0x8d, 0x8b, + 0xef, 0xef, 0x72, 0x78, 0x7e, 0xa5, 0x8b, 0x3a, 0xc5, 0x11, 0xe1, 0xf4, + 0x32, 0xbf, 0xf9, 0xbb, 0xe6, 0xd8, 0x10, 0x8a, 0x78, 0xb1, 0x7c, 0x5a, + 0x62, 0x58, 0xbf, 0xe9, 0xd8, 0xef, 0xae, 0x08, 0xeb, 0x17, 0xfa, 0x4f, + 0x9e, 0x61, 0x75, 0xeb, 0x15, 0xf3, 0xf3, 0xe1, 0xdd, 0xfe, 0x9e, 0x0f, + 0x4e, 0x2d, 0x96, 0x2f, 0xf9, 0x81, 0x39, 0xe6, 0x20, 0x2c, 0x5b, 0x19, + 0x32, 0x2f, 0x42, 0x53, 0xa1, 0x10, 0x46, 0xb7, 0x6a, 0x56, 0x2f, 0xf4, + 0x03, 0x86, 0x02, 0x60, 0xb1, 0x43, 0x3c, 0xcd, 0x0b, 0xdf, 0xfd, 0xdf, + 0x8b, 0x36, 0x3e, 0x1f, 0x09, 0x62, 0xfa, 0x0f, 0xa8, 0x2c, 0x5f, 0xf9, + 0x9b, 0xd0, 0xcf, 0x47, 0x39, 0xab, 0x17, 0x98, 0x78, 0xb1, 0x7f, 0xdc, + 0x6e, 0xcb, 0x3d, 0xf7, 0x58, 0xbf, 0xc5, 0x9c, 0xd6, 0xb3, 0x8b, 0x15, + 0x89, 0xaa, 0x39, 0x14, 0x48, 0xba, 0x23, 0xe2, 0x17, 0x87, 0x3a, 0x1c, + 0xdf, 0xec, 0xf9, 0x67, 0xbe, 0xeb, 0x17, 0xe8, 0x4f, 0xe7, 0xa2, 0xc5, + 0xff, 0x87, 0xf7, 0x37, 0xf3, 0x0c, 0x09, 0x62, 0xff, 0x4f, 0xcb, 0x3d, + 0xf7, 0x58, 0xa8, 0x23, 0x3f, 0xb3, 0x27, 0x2a, 0x12, 0x0d, 0xff, 0x9f, + 0x5a, 0x7e, 0xe1, 0xe6, 0xed, 0x62, 0xfd, 0xb3, 0x8c, 0x52, 0xb1, 0x66, + 0xd8, 0xfa, 0xb4, 0x83, 0x7f, 0x82, 0xce, 0xfc, 0x18, 0xb6, 0x58, 0xbf, + 0x9c, 0x7a, 0x71, 0x6c, 0xb1, 0x7f, 0x39, 0xb2, 0x4c, 0x6a, 0xc5, 0xff, + 0xff, 0xc4, 0x28, 0x67, 0x0b, 0x36, 0x0e, 0x1e, 0x35, 0xfb, 0xe0, 0xf0, + 0x96, 0x2f, 0xe9, 0xc2, 0xd6, 0xa5, 0x62, 0x8d, 0x46, 0x7b, 0x97, 0x69, + 0xd6, 0xa5, 0x36, 0x73, 0x4e, 0x7d, 0x0f, 0xeb, 0xdf, 0xf1, 0xd6, 0x2e, + 0x84, 0x67, 0x5d, 0xb3, 0xef, 0x66, 0x38, 0xed, 0x96, 0xc6, 0xd9, 0x92, + 0xa6, 0xf7, 0x5b, 0x74, 0xd8, 0xa1, 0xb5, 0xa2, 0xf3, 0xa0, 0xfe, 0x32, + 0xa6, 0x7c, 0x01, 0x19, 0x46, 0xd3, 0xc8, 0xfa, 0xbd, 0x19, 0xac, 0x74, + 0x29, 0xc3, 0x8e, 0x3f, 0xa8, 0xda, 0xff, 0xfd, 0x9f, 0x8c, 0xee, 0x1e, + 0x90, 0xb0, 0xee, 0x50, 0x58, 0xb4, 0x64, 0x1b, 0x1e, 0x03, 0x9d, 0xb5, + 0x3f, 0xdf, 0xd1, 0xaa, 0x56, 0xcf, 0xfd, 0xf5, 0x0b, 0x65, 0xdc, 0x39, + 0x44, 0x5b, 0xd3, 0x83, 0x9e, 0x78, 0x4a, 0x3e, 0x7f, 0xbb, 0x52, 0xf3, + 0xcf, 0x2e, 0xdb, 0xec, 0xe0, 0x85, 0x7f, 0x5e, 0x86, 0x4b, 0xfc, 0x8e, + 0x2c, 0x54, 0xff, 0xfe, 0xaa, 0xca, 0xf2, 0xfd, 0x08, 0xcd, 0x10, 0x96, + 0x2f, 0xfc, 0xd0, 0x8c, 0xcd, 0x6e, 0xcd, 0xba, 0xa4, 0x73, 0x2e, 0xcd, + 0x2c, 0x5f, 0xee, 0x67, 0xe7, 0x6c, 0xd2, 0xc5, 0xfe, 0x6d, 0xe3, 0x03, + 0x39, 0x4e, 0xc7, 0x97, 0x82, 0xf6, 0x8c, 0x3a, 0x3a, 0x7a, 0x42, 0x6e, + 0xdc, 0x58, 0xba, 0x12, 0xb1, 0x7f, 0xe6, 0x84, 0x66, 0x6b, 0x76, 0x6d, + 0xd5, 0x24, 0x49, 0x70, 0x41, 0x2c, 0x5a, 0x33, 0x64, 0x49, 0xee, 0x24, + 0x71, 0x70, 0x94, 0x2e, 0xff, 0x96, 0x2e, 0xeb, 0x9b, 0x2c, 0x5f, 0xe7, + 0x03, 0x7b, 0xf2, 0x6a, 0xc5, 0xff, 0xcf, 0xa6, 0xee, 0x4f, 0x38, 0x43, + 0x58, 0xbf, 0xb9, 0xc9, 0x00, 0x7b, 0x2c, 0x5f, 0xe6, 0xd4, 0x3a, 0xe7, + 0x40, 0x3a, 0xc5, 0x61, 0xf6, 0x88, 0xc6, 0xf3, 0xf7, 0xc5, 0x8b, 0xc5, + 0x27, 0x58, 0xbf, 0xe2, 0x6e, 0xfc, 0xde, 0x83, 0x2c, 0x5f, 0xdf, 0xcc, + 0xf7, 0xf1, 0x62, 0xb6, 0x45, 0x03, 0x8f, 0x00, 0x73, 0xc7, 0x37, 0x89, + 0xb7, 0x58, 0xbf, 0xed, 0x6f, 0xf7, 0x8f, 0x7c, 0xd9, 0x62, 0xd2, 0xb1, + 0x42, 0x3c, 0xfe, 0x87, 0xd7, 0xee, 0x3e, 0x68, 0xd5, 0x8b, 0xe9, 0x38, + 0xfe, 0xb1, 0x50, 0x3c, 0xcf, 0x14, 0xdf, 0xb5, 0x3d, 0x1f, 0xa2, 0xc5, + 0xe8, 0x9c, 0xeb, 0x17, 0xe6, 0xf7, 0xb3, 0x4b, 0x14, 0x33, 0xf2, 0x72, + 0xc2, 0x1e, 0xbf, 0xbc, 0xd0, 0xe3, 0x8d, 0x62, 0xff, 0x3e, 0x86, 0x26, + 0xd4, 0x16, 0x2b, 0x0f, 0x8b, 0xe5, 0xd7, 0xdb, 0xbb, 0x75, 0x2c, 0x5f, + 0x70, 0xf3, 0xc5, 0x8b, 0xfe, 0x7e, 0x60, 0xe1, 0x0f, 0x89, 0x62, 0xfd, + 0xc8, 0xa0, 0xe0, 0x58, 0xbd, 0xd7, 0xcf, 0x96, 0x2b, 0x11, 0x53, 0xb9, + 0x1b, 0x9d, 0x08, 0xaa, 0xf1, 0xd8, 0x0b, 0x17, 0xfd, 0xbb, 0x6b, 0x61, + 0xb3, 0x1a, 0xb1, 0x7e, 0xf7, 0xa7, 0x40, 0x58, 0xad, 0xcf, 0x97, 0xe7, + 0x95, 0x28, 0xa5, 0xc8, 0x41, 0x5f, 0xf1, 0x64, 0x52, 0xe0, 0x7f, 0x2c, + 0x5f, 0xfb, 0xbc, 0xf3, 0xf6, 0x16, 0x77, 0xe5, 0x8b, 0xf1, 0x37, 0x49, + 0x35, 0x62, 0xa4, 0xfb, 0x5d, 0x0e, 0xfe, 0xc1, 0x86, 0x36, 0x3a, 0xc5, + 0xff, 0xfb, 0x0a, 0x06, 0x60, 0xdf, 0x9d, 0xf8, 0x4d, 0xc5, 0x8b, 0xdc, + 0x10, 0x4b, 0x17, 0xfa, 0x76, 0x0e, 0x39, 0x88, 0x0b, 0x17, 0x42, 0x32, + 0x37, 0x5f, 0xb1, 0x8d, 0x86, 0x24, 0x7e, 0x06, 0x83, 0x85, 0x86, 0x43, + 0x04, 0xd3, 0xdd, 0xdb, 0x3b, 0x70, 0x78, 0x4a, 0x45, 0x08, 0xfd, 0x10, + 0xfe, 0x19, 0xe5, 0x0e, 0x1e, 0x13, 0x7a, 0x14, 0xbd, 0x08, 0x02, 0x2f, + 0x8e, 0x57, 0x0c, 0x7e, 0xf4, 0x6f, 0xd7, 0x71, 0xcb, 0x17, 0xf7, 0x08, + 0xc8, 0xdc, 0x6e, 0xb1, 0x7e, 0x9c, 0x2f, 0x71, 0x62, 0xfe, 0x97, 0xf7, + 0xe7, 0x4b, 0x17, 0xfe, 0x2c, 0x04, 0x83, 0x5a, 0x90, 0x96, 0x2f, 0x88, + 0xb3, 0xcb, 0x16, 0x8c, 0x8d, 0x69, 0x8a, 0xc9, 0x69, 0xcd, 0x3e, 0x4f, + 0xc2, 0xd0, 0xcf, 0xeb, 0x4a, 0xb3, 0xc1, 0x29, 0xa2, 0xa5, 0x99, 0xa1, + 0xa8, 0xc5, 0x79, 0x0c, 0x61, 0x52, 0xb2, 0x6f, 0xfe, 0x8d, 0x51, 0xb7, + 0x59, 0x1f, 0x1a, 0x83, 0x30, 0xcf, 0xc7, 0x2c, 0x5f, 0xef, 0x39, 0x0a, + 0x19, 0xc5, 0x8b, 0xff, 0xb6, 0x0e, 0x3e, 0x35, 0xf5, 0xe6, 0x19, 0xf8, + 0xe8, 0xc2, 0x44, 0xd0, 0x6c, 0xf7, 0xed, 0x6e, 0xcd, 0xba, 0xa4, 0x1c, + 0x2f, 0xe1, 0x6f, 0xa7, 0x92, 0x58, 0xbf, 0x39, 0x7a, 0x4e, 0xb1, 0x68, + 0xcc, 0x44, 0x67, 0xcd, 0xe3, 0x8b, 0xaf, 0xec, 0x0f, 0xf2, 0xfa, 0x58, + 0xbf, 0x07, 0xf9, 0x7d, 0x2c, 0x5c, 0xe1, 0xac, 0x56, 0x1e, 0x0b, 0x94, + 0xdf, 0xd8, 0x1f, 0xe5, 0xf4, 0xb1, 0x7f, 0x60, 0x7f, 0x97, 0xd2, 0xc5, + 0xfd, 0x81, 0xfe, 0x5f, 0x4b, 0x17, 0xf6, 0x07, 0xf9, 0x7d, 0x2c, 0x5f, + 0xfd, 0xd7, 0x3a, 0xcf, 0xc8, 0xba, 0xb7, 0xfc, 0x84, 0xb1, 0x7a, 0x28, + 0xa5, 0x62, 0xfe, 0x39, 0x67, 0x7e, 0x65, 0x8b, 0x9c, 0x72, 0x79, 0xb8, + 0x3f, 0x7f, 0xb5, 0x9b, 0xfe, 0x7b, 0x82, 0xc5, 0xe0, 0x02, 0x56, 0x2c, + 0x12, 0xc5, 0x49, 0xf3, 0x0c, 0xdb, 0x07, 0x69, 0x62, 0xfe, 0xe7, 0x24, + 0x01, 0xec, 0xb1, 0x7f, 0xe6, 0x37, 0x7f, 0xbe, 0xb5, 0x21, 0x2c, 0x5f, + 0xe6, 0xd4, 0x03, 0xea, 0x68, 0x2c, 0x56, 0x22, 0xac, 0x8c, 0x44, 0x85, + 0x7d, 0xb0, 0xe7, 0x65, 0x8b, 0xc2, 0xe4, 0xac, 0x5f, 0xfd, 0xbf, 0xe4, + 0xd7, 0xe7, 0x5d, 0x7a, 0xc6, 0xfa, 0xc5, 0x84, 0xb1, 0x7f, 0x4f, 0xbf, + 0x3d, 0x81, 0x62, 0xa3, 0xd1, 0x2a, 0x75, 0x4e, 0x09, 0x5e, 0xc6, 0x3a, + 0xc5, 0x2c, 0x58, 0xbb, 0x35, 0x04, 0x39, 0x7d, 0xbb, 0x36, 0xea, 0x90, + 0xbc, 0xbf, 0xd9, 0xd8, 0x38, 0xcf, 0xb2, 0xc5, 0xf8, 0x98, 0x0d, 0xc5, + 0x8b, 0xf6, 0x45, 0x06, 0xe2, 0xc5, 0x62, 0xa0, 0xee, 0xc9, 0x5e, 0x16, + 0x51, 0x2d, 0xe8, 0x98, 0x8c, 0x7c, 0x6a, 0x19, 0x3d, 0x86, 0xb1, 0x7f, + 0xb6, 0xfe, 0x7f, 0x1f, 0x65, 0x8b, 0xd2, 0x17, 0x96, 0x2b, 0x47, 0xa6, + 0x46, 0xb5, 0x1b, 0xa2, 0x19, 0x99, 0x6e, 0x14, 0x7a, 0xc5, 0xfd, 0xcf, + 0xb1, 0xdf, 0x8b, 0x17, 0x0b, 0x4b, 0x15, 0x03, 0xe1, 0x38, 0xdb, 0x17, + 0x5c, 0xfa, 0x58, 0xb7, 0x96, 0x2b, 0xe6, 0xa5, 0x85, 0xef, 0x8a, 0x63, + 0xe2, 0x58, 0xbf, 0x4b, 0x79, 0xfb, 0x58, 0xb8, 0xd9, 0x58, 0xa3, 0xa2, + 0x1b, 0xe4, 0x00, 0x26, 0x22, 0x8b, 0xfe, 0x6d, 0x42, 0x28, 0x3e, 0xa0, + 0xb1, 0x7d, 0xd4, 0xe5, 0x12, 0xc5, 0xc1, 0x44, 0xb1, 0x7f, 0x60, 0xff, + 0x80, 0x65, 0x8b, 0xe9, 0x17, 0x5f, 0xc5, 0x8a, 0x82, 0x34, 0x30, 0xed, + 0x89, 0xb8, 0x34, 0x11, 0x6d, 0xff, 0x79, 0xc1, 0xc6, 0xee, 0x00, 0x58, + 0xbf, 0xce, 0x0e, 0x00, 0x0f, 0xe5, 0x8b, 0xb7, 0x02, 0xc5, 0xcf, 0x2b, + 0x17, 0x49, 0xc0, 0x6b, 0xc8, 0x66, 0xa5, 0x19, 0x38, 0x76, 0xec, 0x77, + 0x07, 0xc5, 0x8b, 0xf6, 0x9b, 0x9b, 0x4a, 0xc5, 0xa0, 0xb1, 0x52, 0x7a, + 0x98, 0x32, 0xc5, 0x37, 0xf8, 0x1e, 0xe7, 0xf1, 0xc6, 0xb1, 0x6d, 0x96, + 0x2b, 0x47, 0x8e, 0x46, 0x96, 0x09, 0x62, 0xfd, 0x3a, 0xd4, 0xec, 0xb1, + 0x7f, 0x8a, 0x4e, 0x18, 0xff, 0x2b, 0x15, 0x87, 0xe0, 0x42, 0x7e, 0x29, + 0xbf, 0x34, 0x0f, 0x30, 0x58, 0xb1, 0xd6, 0x2a, 0x51, 0xf0, 0xf0, 0x91, + 0xf9, 0x6f, 0x8a, 0x2f, 0x9c, 0x6d, 0xc5, 0x8b, 0xe3, 0x3d, 0x9a, 0x58, + 0xa9, 0x3c, 0x6d, 0xc8, 0xaf, 0x81, 0x9d, 0xf9, 0x62, 0xf3, 0x43, 0x16, + 0x2f, 0xe6, 0x2d, 0xf5, 0x0e, 0x2c, 0x57, 0x67, 0xde, 0x44, 0x82, 0x1c, + 0xbf, 0xd8, 0x7c, 0xdf, 0x77, 0xfa, 0xc5, 0xe8, 0x34, 0x16, 0x2f, 0xdf, + 0xc8, 0x0f, 0xb5, 0x8a, 0x73, 0xfc, 0x88, 0xd7, 0xc3, 0xb7, 0x73, 0xb5, + 0x8b, 0xef, 0x42, 0x4d, 0x48, 0xbe, 0xc1, 0xfb, 0x8b, 0x15, 0x88, 0x8f, + 0x39, 0x7b, 0x0c, 0x91, 0x25, 0xff, 0xf3, 0x37, 0x86, 0xec, 0x43, 0xfc, + 0x86, 0x75, 0x8b, 0xd8, 0x1f, 0x58, 0xb1, 0x7e, 0xee, 0x1c, 0x73, 0x56, + 0x2a, 0x4f, 0x3b, 0x08, 0xef, 0xff, 0x61, 0x02, 0x3b, 0x3d, 0x9f, 0x9d, + 0x01, 0x62, 0xb4, 0x98, 0x49, 0x42, 0x77, 0x84, 0x17, 0xd1, 0x74, 0xc1, + 0xac, 0x5f, 0x80, 0x09, 0x23, 0x56, 0x2f, 0x6e, 0xd0, 0x58, 0xa9, 0x3c, + 0x7c, 0x29, 0xbe, 0x0c, 0xa2, 0xea, 0x58, 0xa7, 0x45, 0xaf, 0xdb, 0x40, + 0x41, 0x7f, 0xfb, 0x98, 0xfd, 0x18, 0xfb, 0x1e, 0x37, 0x8d, 0xe3, 0x45, + 0x8b, 0xee, 0xc4, 0xde, 0x58, 0xa8, 0xd9, 0x10, 0x2c, 0xbb, 0x7a, 0x38, + 0xd3, 0x56, 0x2c, 0x4b, 0x14, 0xe6, 0xd2, 0x38, 0x8e, 0xfe, 0x3b, 0x96, + 0x1e, 0x56, 0x2f, 0xb6, 0xf6, 0x7d, 0x62, 0xb0, 0xf4, 0x18, 0xb2, 0xfe, + 0x06, 0x10, 0xb9, 0x2b, 0x17, 0xfe, 0x2c, 0xd8, 0xb3, 0xdf, 0x98, 0x2c, + 0x5f, 0xf3, 0xc1, 0xfe, 0x23, 0x9d, 0xd6, 0x2a, 0x51, 0x48, 0x45, 0xbe, + 0x3e, 0xb4, 0x67, 0x58, 0xd9, 0x7b, 0x75, 0xad, 0xf1, 0xa1, 0x04, 0x6c, + 0x5d, 0xd7, 0x65, 0xdd, 0x70, 0xba, 0x35, 0x17, 0x4c, 0x28, 0xf6, 0x84, + 0x8c, 0x0b, 0x47, 0x0b, 0x7c, 0x94, 0x79, 0xbc, 0x3f, 0xbb, 0x84, 0x43, + 0xc3, 0x76, 0x28, 0xc3, 0x35, 0x18, 0x91, 0xe1, 0x03, 0xf8, 0xda, 0xda, + 0x10, 0xc0, 0x84, 0x89, 0x46, 0x75, 0xc8, 0xd0, 0xfd, 0x0e, 0xa1, 0x42, + 0xc3, 0xa2, 0xdc, 0x73, 0x98, 0x70, 0xc4, 0xbf, 0xff, 0xf7, 0xe5, 0xc9, + 0xbd, 0x22, 0x86, 0x18, 0xd8, 0x2e, 0xbc, 0xa5, 0x62, 0xff, 0x9b, 0x78, + 0xc8, 0x66, 0xb2, 0x0b, 0x17, 0x67, 0x16, 0x2f, 0xff, 0xff, 0x89, 0xa3, + 0x30, 0x5d, 0x7b, 0x9a, 0xfe, 0xfe, 0x3c, 0x38, 0x66, 0x1b, 0x30, 0x58, + 0xbf, 0x67, 0x0e, 0x39, 0x58, 0xbf, 0xfe, 0x6d, 0xb5, 0x3b, 0x71, 0x88, + 0x5b, 0xe7, 0x16, 0x2f, 0xda, 0xdd, 0x9b, 0x75, 0x48, 0xc8, 0x5e, 0x68, + 0x46, 0x4a, 0x22, 0x71, 0x4a, 0xe7, 0xe2, 0xc5, 0xa3, 0x25, 0x52, 0x2e, + 0xcd, 0xd0, 0x3d, 0xdc, 0x5f, 0x50, 0x86, 0x3c, 0x2c, 0x7c, 0x6b, 0x7f, + 0xf7, 0xdf, 0x50, 0x8c, 0x1e, 0x1c, 0x67, 0x58, 0xb8, 0xf1, 0xeb, 0x17, + 0x1f, 0x8b, 0x17, 0x99, 0x8e, 0xb1, 0x68, 0xcd, 0x8f, 0x3f, 0x43, 0x7f, + 0x18, 0xbd, 0xec, 0x3a, 0xc5, 0xdf, 0x3a, 0xc5, 0xfb, 0x5b, 0xb3, 0x6e, + 0xa9, 0x37, 0x8b, 0x46, 0x49, 0xf6, 0x0c, 0x77, 0x06, 0x2d, 0x1c, 0xb1, + 0x76, 0x12, 0xc5, 0xa3, 0x18, 0xd5, 0xc7, 0x0a, 0xdc, 0xdd, 0x4b, 0x17, + 0xf8, 0x12, 0x31, 0x36, 0xa0, 0xb1, 0x7f, 0xe6, 0x84, 0x66, 0x6b, 0x76, + 0x6d, 0xd5, 0x24, 0x99, 0x68, 0xcc, 0x44, 0xf3, 0x8d, 0x1c, 0xd2, 0xe8, + 0xde, 0x34, 0x58, 0xbf, 0xf6, 0x16, 0x7b, 0x4e, 0x6f, 0xc4, 0xb1, 0x63, + 0xac, 0x5f, 0xf0, 0x9b, 0xbd, 0x68, 0x51, 0x71, 0x62, 0xa0, 0x79, 0xfc, + 0x12, 0xbf, 0xef, 0x13, 0x05, 0xe7, 0xec, 0x25, 0x8b, 0x8f, 0xda, 0xc5, + 0xfd, 0x9e, 0x29, 0x93, 0xac, 0x5f, 0xdd, 0x80, 0x3d, 0x30, 0x16, 0x2f, + 0xfd, 0x14, 0x05, 0xc6, 0xc3, 0xbf, 0x45, 0x8b, 0xbf, 0x19, 0xd6, 0xa7, + 0x8c, 0x32, 0x2c, 0x84, 0x77, 0x64, 0x47, 0x3c, 0xf8, 0xcb, 0x16, 0x70, + 0xc6, 0xa3, 0x66, 0xf7, 0xca, 0x63, 0x03, 0x85, 0x66, 0x63, 0x93, 0x8a, + 0xae, 0xf5, 0xa8, 0x4c, 0x72, 0x14, 0xbe, 0x61, 0xe9, 0x0c, 0xa0, 0xe3, + 0xfd, 0xbf, 0xb3, 0x5b, 0xb3, 0x6e, 0xa9, 0x07, 0x4b, 0xff, 0xdd, 0x26, + 0x3c, 0xc6, 0xf4, 0xee, 0xe5, 0x2b, 0x17, 0xfb, 0x39, 0xc9, 0x00, 0x7b, + 0x2c, 0x5f, 0xd0, 0x6d, 0x13, 0x79, 0x62, 0xff, 0xdf, 0xc2, 0x26, 0xf7, + 0xe0, 0xeb, 0x17, 0xf6, 0xbe, 0x13, 0x0e, 0x32, 0x51, 0xde, 0x34, 0xf8, + 0x8d, 0xbc, 0x5b, 0x51, 0x89, 0xc7, 0xb4, 0x65, 0x77, 0xed, 0x6e, 0xcd, + 0xba, 0xa4, 0x58, 0x2f, 0xb0, 0x07, 0x75, 0x8b, 0xf4, 0x61, 0xda, 0x11, + 0x98, 0x7b, 0x31, 0xc6, 0xf7, 0xfc, 0xe3, 0xc3, 0xbe, 0xee, 0x35, 0x8b, + 0xf6, 0xb7, 0x66, 0xdd, 0x52, 0x18, 0x16, 0x8c, 0x93, 0xf0, 0xc3, 0x9b, + 0xc1, 0x49, 0xd6, 0x2e, 0x2d, 0xd6, 0x2f, 0xf3, 0x0f, 0x3a, 0x9a, 0x4e, + 0xb1, 0x58, 0x79, 0xbf, 0x18, 0xbd, 0x07, 0x1a, 0xc5, 0xd3, 0xda, 0xc5, + 0xfc, 0xff, 0x63, 0xfc, 0x4b, 0x15, 0xa3, 0xc6, 0xf0, 0xc5, 0xfe, 0x04, + 0xe1, 0x4b, 0x9a, 0xb1, 0x7e, 0xcd, 0x66, 0x76, 0xb1, 0x7e, 0x86, 0x71, + 0xb8, 0xb1, 0x7b, 0x08, 0x6b, 0x17, 0xff, 0x47, 0x31, 0x03, 0x3d, 0x24, + 0xe0, 0x58, 0xb4, 0x66, 0x27, 0xe9, 0xbb, 0x5c, 0x44, 0x2c, 0xc6, 0x02, + 0x22, 0x32, 0x11, 0x40, 0x45, 0x01, 0x8e, 0x5f, 0xff, 0x98, 0x11, 0xd9, + 0x18, 0x4d, 0xe8, 0x67, 0xb0, 0x6b, 0x17, 0xff, 0xe7, 0x3b, 0xea, 0x33, + 0xd1, 0xd9, 0xff, 0x4f, 0x61, 0x2c, 0x51, 0x26, 0x83, 0xc8, 0x44, 0xf9, + 0x6a, 0xec, 0xe2, 0xc5, 0xba, 0x96, 0x2c, 0x35, 0x8b, 0x46, 0x40, 0xdf, + 0x44, 0x2e, 0xc2, 0xb7, 0xbc, 0xf1, 0x2c, 0x5f, 0xff, 0xff, 0xf4, 0x90, + 0x8f, 0xa9, 0xf3, 0xee, 0xe3, 0xfc, 0xef, 0xf9, 0xd8, 0xef, 0xe6, 0x89, + 0xbc, 0xb1, 0x7c, 0xe4, 0xc0, 0x58, 0xbd, 0x81, 0x46, 0x76, 0x8b, 0x7e, + 0x42, 0x5a, 0xfe, 0xe6, 0xdf, 0xc0, 0x32, 0xc5, 0xff, 0xff, 0x43, 0x91, + 0x9b, 0xfd, 0xa2, 0xdf, 0xf9, 0xae, 0xb3, 0xf1, 0x1f, 0x8b, 0x17, 0xd3, + 0xf1, 0x79, 0x62, 0xfe, 0xdd, 0xbf, 0x16, 0x79, 0x62, 0xf0, 0x27, 0x75, + 0x8b, 0x66, 0x1e, 0x77, 0x8c, 0x2f, 0xfe, 0xf3, 0x82, 0x60, 0x3f, 0xc9, + 0x6e, 0xb1, 0x7d, 0xc8, 0xa6, 0x3d, 0x62, 0xa4, 0xfb, 0x31, 0x16, 0xfb, + 0xb8, 0x31, 0x2c, 0x5e, 0x3b, 0xf1, 0x62, 0xd2, 0x73, 0xc0, 0x01, 0x1d, + 0xfd, 0x13, 0xfd, 0xf5, 0x12, 0xc5, 0xff, 0x6b, 0x61, 0x03, 0x08, 0x33, + 0xac, 0x5b, 0xa2, 0xc5, 0x4a, 0x20, 0x1c, 0xc0, 0xe7, 0x97, 0xce, 0x40, + 0x75, 0x8b, 0xed, 0xd9, 0xb7, 0x54, 0x87, 0xa5, 0x40, 0xf4, 0xb4, 0x43, + 0x7f, 0xfa, 0x3c, 0xa5, 0x86, 0xfc, 0x3c, 0x8c, 0x0b, 0x17, 0xdc, 0x6e, + 0xfa, 0x2c, 0x5a, 0x32, 0x09, 0x8a, 0x64, 0x20, 0x18, 0x8b, 0xc9, 0x97, + 0xff, 0xfe, 0x8c, 0xda, 0x62, 0x72, 0x7d, 0xdb, 0xec, 0x11, 0x83, 0x20, + 0x0d, 0x62, 0xa0, 0x8b, 0xdd, 0xd2, 0xaf, 0xde, 0xe0, 0xb5, 0x05, 0x8b, + 0xfe, 0xdd, 0xb4, 0xdf, 0x8b, 0x3c, 0xb1, 0x7f, 0xf8, 0x59, 0xfc, 0x20, + 0x61, 0x7b, 0xf8, 0xb1, 0x7a, 0x75, 0x12, 0xc5, 0xa3, 0x1d, 0x14, 0x24, + 0x77, 0xc4, 0x8a, 0xc4, 0xc0, 0x9a, 0x19, 0x77, 0xfe, 0xe6, 0x68, 0xb3, + 0xa3, 0x90, 0xd6, 0x2f, 0xbc, 0xfd, 0x84, 0xb1, 0x7f, 0xe8, 0x4e, 0xb6, + 0xd6, 0x9f, 0xdc, 0x58, 0xba, 0x7b, 0xc3, 0xe6, 0x88, 0x96, 0xf8, 0x65, + 0x9b, 0x2c, 0x5f, 0xff, 0xe3, 0xc6, 0x30, 0x4d, 0xb3, 0x84, 0xc1, 0xb9, + 0x7a, 0x78, 0xb1, 0x52, 0xc8, 0x3c, 0xda, 0x1a, 0xa3, 0x3e, 0xec, 0xbd, + 0xdd, 0xa2, 0x71, 0xd4, 0x24, 0xbe, 0xc0, 0xd2, 0x9e, 0x0a, 0x32, 0x6e, + 0x13, 0xfa, 0x14, 0xa2, 0x2e, 0x0c, 0x8e, 0xff, 0x67, 0x39, 0x20, 0x0f, + 0x65, 0x8b, 0xf4, 0x93, 0xcf, 0x16, 0x2f, 0xcc, 0x67, 0xb3, 0x75, 0x8b, + 0xff, 0xfc, 0x39, 0x6d, 0x7c, 0x26, 0x1f, 0xbf, 0x84, 0x4d, 0xe5, 0x8b, + 0x46, 0x0d, 0x1c, 0xce, 0x6d, 0xf2, 0x6e, 0x15, 0x54, 0x62, 0xa0, 0xad, + 0xa3, 0xc5, 0xbf, 0xa0, 0xda, 0xdb, 0xe2, 0x58, 0xbf, 0x72, 0x40, 0x1e, + 0xcb, 0x16, 0xc8, 0x8f, 0x6f, 0x86, 0x17, 0x39, 0xd6, 0x2f, 0xf8, 0x4c, + 0x38, 0xe7, 0xe6, 0x6c, 0xb1, 0x5f, 0x3d, 0x4e, 0xa1, 0x7b, 0xff, 0x7d, + 0xf5, 0x00, 0xe1, 0x9f, 0x65, 0x8b, 0xdc, 0x10, 0x16, 0x2f, 0x79, 0xb7, + 0x58, 0xb8, 0x12, 0xb1, 0x7f, 0xc5, 0x26, 0x00, 0xe1, 0xe9, 0x96, 0x29, + 0xcf, 0x4b, 0xc2, 0xf7, 0xf8, 0x85, 0xb9, 0xe7, 0x5b, 0xac, 0x5f, 0xfb, + 0xcf, 0x07, 0xf8, 0x8e, 0x77, 0x58, 0xbe, 0x26, 0x0a, 0x30, 0x6a, 0x81, + 0x71, 0xf3, 0x72, 0x5e, 0xd0, 0x18, 0x7b, 0x8e, 0x02, 0x21, 0x0c, 0xda, + 0x96, 0x2f, 0xf3, 0x7e, 0x7d, 0x2e, 0x05, 0x8a, 0x8f, 0x37, 0xc2, 0x0c, + 0xbf, 0x6b, 0x76, 0x6d, 0xd5, 0x26, 0x19, 0x7f, 0xa0, 0x53, 0x9c, 0xc2, + 0x58, 0xbb, 0x9c, 0x58, 0xbd, 0xec, 0x3a, 0xc5, 0x8e, 0xb1, 0x58, 0x6b, + 0xfc, 0x3b, 0x68, 0xc9, 0x47, 0x9e, 0x12, 0x76, 0x6f, 0xa3, 0x12, 0x47, + 0xbe, 0x8c, 0x01, 0x62, 0xc5, 0xe6, 0xff, 0x16, 0x2e, 0xef, 0xcb, 0x17, + 0xf0, 0xb6, 0x72, 0x11, 0xd6, 0x2a, 0x4f, 0x20, 0x86, 0x6f, 0xa6, 0x3e, + 0x62, 0x58, 0xbd, 0x25, 0xb2, 0xc5, 0xa5, 0x62, 0xfa, 0x41, 0x03, 0xac, + 0x57, 0xcd, 0xa1, 0x08, 0xd0, 0xd3, 0x1c, 0x76, 0x58, 0x88, 0x3e, 0x4d, + 0xe5, 0x1b, 0xda, 0xc3, 0x56, 0x2f, 0x9c, 0x22, 0xc5, 0x8b, 0xff, 0xc3, + 0x73, 0xf7, 0x0e, 0x77, 0x0c, 0xd6, 0xcb, 0x17, 0xd3, 0x3c, 0x8c, 0x1a, + 0x23, 0xfe, 0x3d, 0xe2, 0x2a, 0x8c, 0x4c, 0x8c, 0xa1, 0xb5, 0x5b, 0x2a, + 0x8f, 0xd4, 0xa6, 0x4b, 0xff, 0xfc, 0x6c, 0x67, 0x3d, 0xde, 0xee, 0x5a, + 0x9f, 0x3e, 0xee, 0x35, 0x8a, 0x94, 0x4a, 0x88, 0xb6, 0xff, 0x46, 0x66, + 0xb7, 0x66, 0xdd, 0x52, 0x73, 0x97, 0xfd, 0xcc, 0x20, 0x1f, 0x05, 0xc5, + 0x8b, 0xbf, 0xd1, 0x62, 0xd2, 0xb1, 0x78, 0x39, 0x09, 0x62, 0xff, 0xb3, + 0xb0, 0x83, 0x2c, 0xe9, 0x8b, 0x17, 0xf0, 0x9b, 0xbf, 0x7d, 0xd6, 0x2b, + 0x64, 0x4e, 0x7c, 0x44, 0x87, 0xf8, 0x7b, 0x7a, 0x02, 0x1a, 0xc5, 0xff, + 0x41, 0xf5, 0x0f, 0x1b, 0x9a, 0x58, 0xbb, 0x6e, 0x2c, 0x5f, 0x0b, 0xab, + 0x09, 0x62, 0xf3, 0xc8, 0x16, 0x2f, 0xfb, 0x3b, 0x3b, 0x0f, 0xf2, 0x4b, + 0x15, 0xf3, 0xd5, 0x21, 0xcb, 0x98, 0xeb, 0x17, 0xcf, 0xad, 0x32, 0xc5, + 0xff, 0xd8, 0x40, 0x8e, 0xcf, 0x7d, 0xc8, 0x0b, 0x17, 0xdc, 0x92, 0x35, + 0x62, 0xb1, 0x11, 0x7c, 0x22, 0x0d, 0x1a, 0xff, 0xb3, 0xdf, 0x68, 0x7a, + 0x60, 0xb1, 0x7a, 0x4b, 0xcb, 0x15, 0xf3, 0xd5, 0x11, 0xcd, 0x80, 0xb1, + 0x76, 0x1d, 0x62, 0xa4, 0xd4, 0xb0, 0x95, 0xff, 0xfb, 0x4e, 0x79, 0x37, + 0xed, 0xc0, 0x1d, 0xbb, 0xf2, 0xc5, 0xe2, 0x9e, 0xd6, 0x2f, 0x9b, 0x50, + 0x8c, 0x95, 0xc3, 0xf1, 0x9c, 0xe4, 0x2d, 0xbb, 0x3d, 0x88, 0x78, 0xe7, + 0x7f, 0x19, 0x67, 0xa2, 0x21, 0xe4, 0x28, 0xbd, 0x08, 0x50, 0x92, 0xc3, + 0x1f, 0xea, 0x58, 0xbf, 0xff, 0xff, 0xfa, 0x7a, 0xee, 0x1b, 0x6f, 0xf3, + 0x0c, 0xfc, 0x74, 0x66, 0xc2, 0x36, 0x35, 0xcf, 0x5b, 0xde, 0xdb, 0x6e, + 0x73, 0x0c, 0xfc, 0x72, 0xc5, 0x4b, 0x7b, 0x5d, 0xb4, 0x21, 0x61, 0x0b, + 0x7c, 0x96, 0xbd, 0xbb, 0x9b, 0xd2, 0x9f, 0x75, 0x2a, 0x3c, 0xf1, 0xdf, + 0xfe, 0x5b, 0xaf, 0x88, 0x85, 0x39, 0x09, 0xd5, 0x0e, 0xeb, 0xfe, 0xe1, + 0xf0, 0xc8, 0x60, 0xe5, 0x62, 0xfd, 0xad, 0xd9, 0xb7, 0x54, 0x83, 0xc5, + 0xf7, 0x22, 0x3f, 0x6b, 0x17, 0xff, 0xbe, 0xf2, 0x76, 0x18, 0x7d, 0x52, + 0x50, 0x58, 0xbf, 0xff, 0xfd, 0xfc, 0x3f, 0xcb, 0x3a, 0x36, 0xf1, 0x9c, + 0xe4, 0x83, 0xc5, 0x27, 0xe2, 0xc5, 0xa3, 0x25, 0x36, 0x1c, 0x3a, 0xeb, + 0xcd, 0xf8, 0x4d, 0xe4, 0xdb, 0xba, 0xee, 0x35, 0x2c, 0x5f, 0xfd, 0xe9, + 0x39, 0x4b, 0x11, 0x4c, 0x16, 0x2b, 0xae, 0x1f, 0x33, 0x12, 0xdd, 0xd6, + 0xc6, 0xb5, 0x8b, 0xfd, 0xd6, 0xff, 0x00, 0x79, 0xd2, 0xc5, 0xf8, 0x72, + 0x79, 0x3a, 0xc5, 0xc2, 0x82, 0xc5, 0xa2, 0x58, 0xaf, 0x9a, 0xb6, 0x18, + 0xbf, 0xe9, 0xfc, 0xed, 0xa9, 0xc1, 0xac, 0x5f, 0xfe, 0xe6, 0x14, 0xc3, + 0xf9, 0xf7, 0xc2, 0x58, 0xbf, 0xf6, 0x9f, 0x92, 0x36, 0x27, 0x3a, 0xc5, + 0x62, 0x66, 0x1d, 0xa9, 0xfc, 0x83, 0x87, 0x3d, 0x11, 0xef, 0x7b, 0x70, + 0x2c, 0x5f, 0xd2, 0xfe, 0x29, 0x3a, 0xc5, 0xe0, 0xf9, 0x2b, 0x15, 0xa3, + 0xca, 0xf9, 0x65, 0xe6, 0xec, 0x0b, 0x17, 0xf4, 0xeb, 0x52, 0x64, 0xac, + 0x5f, 0xdc, 0x30, 0x64, 0xdf, 0x58, 0xa6, 0x3f, 0xb2, 0x1e, 0x11, 0x75, + 0xff, 0xfd, 0x83, 0x7e, 0x61, 0x73, 0x7f, 0xb9, 0x16, 0x76, 0xb1, 0x7f, + 0xff, 0x98, 0xd8, 0xb9, 0x3e, 0x30, 0x3f, 0x39, 0x0a, 0x19, 0xc5, 0x8a, + 0xfa, 0x2f, 0xc9, 0x6a, 0xff, 0xf8, 0x5e, 0x7f, 0x7a, 0x4c, 0xfe, 0x61, + 0x6e, 0xb1, 0x7e, 0x7d, 0x37, 0xa3, 0x5a, 0xc5, 0xfc, 0x0c, 0x84, 0x83, + 0x8b, 0x17, 0xff, 0xff, 0xb3, 0x5a, 0x9e, 0xe0, 0x1f, 0x9c, 0x85, 0x0c, + 0xe1, 0x66, 0xc1, 0xc1, 0x62, 0xa5, 0x15, 0x3f, 0x2e, 0xbf, 0xff, 0x16, + 0x71, 0xdb, 0x6c, 0x19, 0xde, 0x3a, 0x4e, 0xb1, 0x7d, 0xbb, 0x36, 0xea, + 0x90, 0x98, 0xbf, 0x63, 0xfb, 0x42, 0x58, 0xbf, 0xfe, 0x7d, 0x7d, 0xb8, + 0x59, 0xef, 0xb9, 0x01, 0x62, 0xfa, 0x3f, 0xf2, 0x6a, 0xc5, 0xff, 0xfe, + 0xd1, 0x66, 0xd8, 0x3c, 0x08, 0x5a, 0xcd, 0xff, 0x3d, 0x16, 0x2e, 0xcd, + 0x96, 0x29, 0x62, 0xf8, 0x47, 0xc1, 0xac, 0x74, 0x26, 0x54, 0xa2, 0xf3, + 0xb6, 0x5e, 0xa2, 0x4b, 0xff, 0xfe, 0x6f, 0x4f, 0x42, 0xce, 0x6c, 0xd9, + 0xce, 0x31, 0xb3, 0xa5, 0x8b, 0xf7, 0xb9, 0xb6, 0x04, 0xb1, 0x7f, 0xde, + 0x11, 0xa6, 0x7f, 0x00, 0xcb, 0x15, 0x89, 0x81, 0x39, 0x9b, 0x34, 0x08, + 0xae, 0xff, 0xee, 0xf0, 0x6f, 0xcd, 0x4f, 0xe6, 0x0b, 0x16, 0x12, 0xc3, + 0x1e, 0x2d, 0xfe, 0xf0, 0x9b, 0xbf, 0xcf, 0x45, 0x8b, 0xf6, 0x6d, 0x8f, + 0xc5, 0x8a, 0x82, 0xea, 0x80, 0xc8, 0x8d, 0x51, 0xde, 0x1a, 0xee, 0x45, + 0xa5, 0x73, 0x98, 0xfc, 0xa1, 0x93, 0x8a, 0x3e, 0x5e, 0x42, 0x03, 0xc4, + 0x5d, 0x0d, 0xef, 0xf9, 0x98, 0x81, 0xa7, 0x93, 0x56, 0x2f, 0xfd, 0x09, + 0x68, 0x19, 0x87, 0x6e, 0xd6, 0x2f, 0xec, 0xe8, 0xd0, 0x88, 0xd5, 0x8b, + 0xff, 0xa7, 0x34, 0x59, 0xef, 0xb9, 0x01, 0x62, 0xef, 0xbf, 0x68, 0xb4, + 0x24, 0x0e, 0x19, 0x5e, 0x27, 0xea, 0x58, 0xbf, 0xff, 0xff, 0xfd, 0x9c, + 0x68, 0xf3, 0x3d, 0xf7, 0x9e, 0x19, 0x9a, 0xd6, 0x7c, 0xb3, 0xd2, 0x73, + 0x33, 0x4d, 0x0c, 0x58, 0xa6, 0x46, 0x38, 0x07, 0xee, 0x16, 0xcb, 0x16, + 0xc5, 0x8b, 0x9f, 0xaf, 0x58, 0xa2, 0x3c, 0x6e, 0x83, 0x21, 0x08, 0xdf, + 0xfe, 0xf8, 0x65, 0x3d, 0xff, 0x06, 0x26, 0xdd, 0x62, 0xfe, 0x38, 0x64, + 0x59, 0xb2, 0xc5, 0xf8, 0x2d, 0x67, 0xf8, 0xb1, 0x52, 0x7b, 0x38, 0x5f, + 0x50, 0x46, 0x31, 0x42, 0x9a, 0xfe, 0xf1, 0x4e, 0xee, 0x4b, 0x17, 0xe2, + 0x9d, 0xdc, 0x96, 0x2f, 0xbb, 0x83, 0x9c, 0xc3, 0xd4, 0xf1, 0x6d, 0xe3, + 0xbf, 0x16, 0x2a, 0x4f, 0x60, 0x07, 0x77, 0xe0, 0x70, 0xcc, 0x1a, 0xc5, + 0xfe, 0x70, 0xb0, 0xb3, 0xbf, 0x2c, 0x5c, 0xdb, 0x2c, 0x56, 0x22, 0x5d, + 0xc8, 0x74, 0x54, 0xc6, 0x97, 0x67, 0x52, 0xc5, 0xed, 0xdc, 0x6b, 0x17, + 0x10, 0xf0, 0xdc, 0x38, 0xd5, 0xee, 0x60, 0xd6, 0x29, 0x8f, 0x1f, 0xc5, + 0x57, 0xe7, 0x30, 0xfb, 0xc4, 0xb1, 0x4c, 0x79, 0xa4, 0x43, 0x7f, 0xe3, + 0xfc, 0x5b, 0x99, 0x9f, 0x6d, 0x2c, 0x5f, 0xfd, 0xee, 0x72, 0x5f, 0xbf, + 0x7a, 0x4e, 0xb1, 0x7f, 0xd3, 0xf9, 0xe8, 0x79, 0x2d, 0x96, 0x2f, 0xff, + 0xec, 0x07, 0x0b, 0x22, 0x60, 0x67, 0xdf, 0x5f, 0x65, 0x8b, 0xff, 0x85, + 0xee, 0x10, 0x85, 0xe8, 0x49, 0xab, 0x17, 0xb8, 0xc4, 0xb1, 0x7f, 0xfe, + 0x9d, 0x03, 0xf3, 0xd2, 0x29, 0x93, 0xf3, 0x06, 0xb1, 0x7f, 0xdf, 0xfc, + 0xf4, 0x86, 0x6a, 0x56, 0x2f, 0xf4, 0xcc, 0x59, 0xd1, 0xf4, 0xb1, 0x5f, + 0x46, 0x43, 0x2c, 0x11, 0xdd, 0xff, 0xc2, 0x6d, 0x8b, 0x0e, 0x77, 0xd7, + 0x16, 0x2b, 0x15, 0x3c, 0xc4, 0x8d, 0xa3, 0xb2, 0x5a, 0xe2, 0x3f, 0xa1, + 0xc8, 0x11, 0x75, 0xfe, 0x26, 0x01, 0x34, 0x09, 0x62, 0xfd, 0xec, 0x04, + 0xe9, 0x62, 0xe7, 0xf4, 0x9e, 0xcb, 0x98, 0xdf, 0x6d, 0xf1, 0x6c, 0xb1, + 0x7f, 0x82, 0xce, 0x06, 0x77, 0xf2, 0xc5, 0x4a, 0xe0, 0x36, 0x4a, 0xbb, + 0x68, 0x62, 0x08, 0xac, 0x32, 0x6b, 0xdd, 0x8f, 0xa2, 0xc5, 0xf6, 0xc7, + 0x9d, 0x2c, 0x5f, 0x6e, 0x22, 0x35, 0x62, 0xfd, 0xfc, 0x26, 0x35, 0x62, + 0xe6, 0x65, 0x8a, 0x82, 0x2a, 0x18, 0x84, 0x89, 0x3c, 0x4a, 0x19, 0x45, + 0xf6, 0x86, 0xfa, 0x58, 0xbf, 0x47, 0xb9, 0x7b, 0x8b, 0x17, 0x9b, 0xbe, + 0x18, 0x79, 0xd1, 0x11, 0xdf, 0xfe, 0xd4, 0xc5, 0xcd, 0xfe, 0xfe, 0xf3, + 0xf5, 0x2c, 0x5c, 0x3f, 0xac, 0x61, 0xe8, 0x5f, 0xfe, 0xf4, 0x33, 0x5a, + 0x68, 0x61, 0xe7, 0x75, 0x8b, 0xff, 0xfe, 0x2c, 0xf7, 0xdc, 0xcc, 0xf4, + 0x33, 0xcf, 0xdc, 0x0a, 0x56, 0x2f, 0xfd, 0x01, 0x0f, 0x1d, 0xba, 0x4e, + 0x96, 0x2f, 0xfd, 0x3d, 0x3b, 0xe4, 0x84, 0x53, 0x05, 0x8b, 0x63, 0xa3, + 0xa1, 0x99, 0x80, 0x81, 0x58, 0x9c, 0x73, 0x14, 0x0a, 0x33, 0x3b, 0xfa, + 0x7e, 0xc3, 0x81, 0xd6, 0x2f, 0xf4, 0xc3, 0xc6, 0xbe, 0xf8, 0xb1, 0x5a, + 0x3e, 0x32, 0x2e, 0xbf, 0xef, 0x0b, 0xf2, 0x3f, 0xb8, 0x16, 0x2f, 0xfa, + 0x61, 0x8e, 0x59, 0x26, 0xac, 0x5f, 0xff, 0xbf, 0x3a, 0x07, 0x30, 0x7e, + 0x13, 0x6f, 0x9a, 0x58, 0xa8, 0xf4, 0x64, 0x44, 0x75, 0xe3, 0x7b, 0xbc, + 0x75, 0x8b, 0xd1, 0xcd, 0xa5, 0x8b, 0xfe, 0xd4, 0xf8, 0x7f, 0x13, 0x71, + 0x62, 0xff, 0xb3, 0x9c, 0x11, 0x6c, 0x6c, 0x4b, 0x17, 0xec, 0x39, 0xe4, + 0x6b, 0x17, 0xfe, 0x0f, 0x6e, 0x4b, 0xf7, 0xe9, 0x3a, 0xc5, 0xff, 0xdc, + 0x66, 0xdf, 0x37, 0x92, 0x9d, 0xd6, 0x2a, 0x24, 0x57, 0xfc, 0xa3, 0x88, + 0x57, 0xff, 0xf7, 0x26, 0x10, 0x63, 0x0b, 0x1f, 0xbf, 0x0a, 0x76, 0x58, + 0xbf, 0xfb, 0x99, 0x0f, 0xc9, 0x0b, 0x9c, 0x95, 0x8a, 0x74, 0x50, 0x9d, + 0x76, 0xb1, 0x1e, 0x8d, 0x0d, 0x2b, 0xd3, 0xae, 0x2c, 0x5f, 0xff, 0xff, + 0xa0, 0x3c, 0xe0, 0x8c, 0x00, 0x98, 0xb7, 0xce, 0x8f, 0xe6, 0x3b, 0x78, + 0x52, 0xb1, 0x7f, 0xa1, 0x3f, 0xcc, 0xf7, 0x16, 0x2f, 0xfe, 0xc7, 0x01, + 0x63, 0xf4, 0x7d, 0x32, 0xc5, 0xff, 0x8b, 0x39, 0xbf, 0xdf, 0xa9, 0xf8, + 0xb1, 0x51, 0x22, 0xe3, 0xc6, 0x7d, 0x10, 0xef, 0x98, 0x3c, 0xd9, 0x62, + 0xa5, 0x39, 0x5c, 0x8c, 0xf8, 0x46, 0x77, 0xf6, 0xc1, 0xe9, 0xe4, 0x6b, + 0x17, 0xff, 0xd9, 0xd3, 0x07, 0xf1, 0x37, 0x03, 0x9d, 0x01, 0x62, 0x9d, + 0x10, 0x7f, 0x30, 0xbf, 0xe9, 0x80, 0x79, 0xae, 0x60, 0x4b, 0x17, 0xfa, + 0x12, 0x6b, 0xfd, 0xb6, 0x58, 0xbf, 0xe0, 0x0c, 0xa6, 0x1f, 0xe0, 0x16, + 0x2e, 0x63, 0x56, 0x2b, 0x64, 0x61, 0x39, 0xde, 0x8d, 0x48, 0xea, 0xff, + 0xb3, 0xfe, 0x86, 0x13, 0x8d, 0x62, 0xff, 0xb7, 0x33, 0xd9, 0xad, 0x30, + 0x16, 0x2e, 0x10, 0xd6, 0x2b, 0xb3, 0xd4, 0x23, 0xca, 0x1a, 0xfe, 0x6e, + 0x43, 0xa7, 0xb3, 0x47, 0x18, 0x88, 0x83, 0x47, 0x5f, 0x8f, 0x80, 0x04, + 0xc5, 0x1d, 0x97, 0xa1, 0x70, 0x28, 0x72, 0x04, 0x78, 0x1c, 0x23, 0x2f, + 0xfb, 0x0b, 0xdc, 0xfc, 0xb6, 0x96, 0x2f, 0xf4, 0x94, 0x0b, 0x30, 0x0b, + 0x17, 0xfa, 0x0f, 0xad, 0x33, 0x01, 0x62, 0xfc, 0x4c, 0xe4, 0x05, 0x8b, + 0xf0, 0x42, 0x9d, 0x6c, 0xb1, 0x46, 0x1e, 0x88, 0x44, 0xd7, 0xff, 0x3b, + 0x03, 0x52, 0x5e, 0xfe, 0x41, 0x62, 0xff, 0x6b, 0x27, 0xb8, 0x39, 0xd6, + 0x2f, 0xec, 0x9e, 0xe0, 0xe7, 0x58, 0xbd, 0xbb, 0x91, 0x87, 0xc5, 0xa3, + 0x4b, 0xfe, 0x8f, 0xe1, 0xf3, 0x5a, 0x70, 0x96, 0x2a, 0x4f, 0xc9, 0x8d, + 0x2f, 0x99, 0xf5, 0x8b, 0x17, 0xfb, 0xee, 0x7f, 0x71, 0xf4, 0xb1, 0x58, + 0xaa, 0x74, 0xd3, 0x8e, 0xcc, 0x5e, 0x10, 0x9f, 0x24, 0x28, 0xc5, 0xfc, + 0x40, 0x22, 0x1b, 0x9c, 0xeb, 0x17, 0xe0, 0xf0, 0xa4, 0x6b, 0x17, 0xd0, + 0xf8, 0x7c, 0x58, 0xbe, 0xcd, 0x83, 0x82, 0xc5, 0xcc, 0x1a, 0xa4, 0x17, + 0x2b, 0xb3, 0xef, 0x22, 0x51, 0x12, 0xd4, 0x48, 0xdd, 0x61, 0x7f, 0x42, + 0x5e, 0xfd, 0xfc, 0xd8, 0x44, 0xb1, 0x7c, 0xda, 0x9e, 0x8b, 0x14, 0x33, + 0xcd, 0x01, 0x4d, 0xfc, 0x39, 0x71, 0xe1, 0xd6, 0x2f, 0xef, 0xb1, 0x7b, + 0x3e, 0xb1, 0x7d, 0x0c, 0x62, 0x58, 0xbf, 0xdb, 0x64, 0x08, 0x4d, 0xc5, + 0x8b, 0xde, 0xfb, 0xac, 0x56, 0x23, 0x31, 0xcb, 0x62, 0x2d, 0x62, 0x11, + 0x1a, 0x5e, 0x93, 0xc1, 0x62, 0xff, 0xf9, 0xcf, 0x26, 0x99, 0xc1, 0x16, + 0x0c, 0x5b, 0x2c, 0x5e, 0x21, 0x1a, 0xb1, 0x7d, 0xf0, 0x9b, 0x65, 0x8a, + 0xed, 0x16, 0x7a, 0x1d, 0x25, 0x3f, 0x0f, 0x5f, 0xed, 0x98, 0x3f, 0xff, + 0x34, 0xb1, 0x79, 0xe6, 0x25, 0x8a, 0xc3, 0xd3, 0xf9, 0xb5, 0xa3, 0x23, + 0x77, 0x4f, 0xc7, 0xd6, 0x93, 0xc6, 0xc4, 0x73, 0x1b, 0x4e, 0xc9, 0xb0, + 0x69, 0x1c, 0x27, 0x72, 0x78, 0xf0, 0xd8, 0x63, 0x6f, 0x0e, 0xce, 0xe3, + 0x02, 0x76, 0x88, 0xa1, 0xef, 0xa8, 0xda, 0x8f, 0x18, 0x37, 0xe7, 0x09, + 0x9a, 0x1f, 0xe0, 0x84, 0xb9, 0x4a, 0x14, 0xe5, 0x21, 0x97, 0xd2, 0xdc, + 0xc5, 0x1a, 0xd7, 0x48, 0x41, 0x47, 0x43, 0xb8, 0x38, 0x7d, 0xf5, 0x42, + 0x42, 0xff, 0xdf, 0x7e, 0xfc, 0x19, 0x67, 0x4c, 0x58, 0xbf, 0xec, 0x88, + 0xa4, 0xfe, 0x1f, 0xd6, 0x2e, 0x04, 0x66, 0xe7, 0xf9, 0xe4, 0x2b, 0xf6, + 0x6b, 0x8f, 0x2b, 0x17, 0xba, 0xeb, 0xd7, 0x23, 0x65, 0x8b, 0xff, 0x68, + 0x5b, 0x67, 0xe2, 0x29, 0x1a, 0xc5, 0xfb, 0x38, 0x13, 0x69, 0x62, 0xff, + 0x6f, 0x3f, 0x93, 0xfc, 0x4b, 0x17, 0xa7, 0x0d, 0x58, 0xac, 0x3d, 0x22, + 0x35, 0xbe, 0x68, 0x7f, 0x16, 0x2f, 0xef, 0xe6, 0x7b, 0xf8, 0xb1, 0x43, + 0x3c, 0xff, 0x11, 0x5f, 0x37, 0x63, 0xed, 0x62, 0xfd, 0xcf, 0xcf, 0x7c, + 0x58, 0xb7, 0xe4, 0xf3, 0xdc, 0x96, 0xf6, 0xc1, 0xc1, 0x62, 0xed, 0x76, + 0xb1, 0x5b, 0x1b, 0x93, 0x48, 0x2f, 0x07, 0x3d, 0xac, 0x5e, 0x38, 0x8e, + 0xb1, 0x52, 0x6f, 0x70, 0x7e, 0xf9, 0xfa, 0x0b, 0xa9, 0x62, 0xfe, 0x92, + 0xc1, 0x8e, 0x56, 0x2b, 0x0f, 0x53, 0x45, 0x17, 0xfe, 0x62, 0x35, 0xbd, + 0x3e, 0x60, 0x2c, 0x5e, 0x0e, 0x49, 0x62, 0xd0, 0x58, 0xa1, 0x9a, 0xf3, + 0x47, 0x6f, 0x0b, 0x50, 0x58, 0xbf, 0xff, 0x78, 0x5a, 0x6e, 0x61, 0x7f, + 0x30, 0xa1, 0xc5, 0x8a, 0xd8, 0xfc, 0x9c, 0x7a, 0xa5, 0x16, 0xcd, 0x09, + 0x4b, 0xb0, 0x6b, 0x17, 0x3c, 0x4b, 0x14, 0x03, 0x5e, 0x18, 0xbd, 0x2c, + 0x5f, 0x9b, 0x3d, 0x87, 0x58, 0xb8, 0x13, 0x26, 0xcc, 0x83, 0x2f, 0xff, + 0xdd, 0x0b, 0x39, 0x87, 0x92, 0x37, 0xef, 0x27, 0x58, 0xbf, 0xda, 0x04, + 0x73, 0x69, 0xbb, 0x58, 0xac, 0x44, 0x73, 0x2b, 0x5f, 0x38, 0xba, 0xfe, + 0x2c, 0x5f, 0x68, 0x06, 0x4a, 0xc5, 0x0c, 0xf3, 0x04, 0x51, 0x77, 0xd9, + 0x62, 0xff, 0xfb, 0x6d, 0xa4, 0xb3, 0xcf, 0xd8, 0x59, 0xdf, 0x96, 0x2e, + 0x73, 0x56, 0x2c, 0x25, 0x8a, 0xc4, 0x4a, 0xb8, 0xbc, 0x4a, 0x9c, 0x18, + 0xbe, 0xe7, 0xe4, 0x0b, 0x17, 0xfb, 0x40, 0x3b, 0x40, 0xcf, 0x2c, 0x5a, + 0x3d, 0x62, 0xb0, 0xf2, 0xcd, 0x36, 0xbf, 0x68, 0x1e, 0x7d, 0x96, 0x2f, + 0xbd, 0x25, 0xd1, 0x62, 0xff, 0xf8, 0x50, 0x2c, 0x3f, 0xa1, 0x91, 0xec, + 0x40, 0x58, 0xbd, 0x39, 0xda, 0xc5, 0x2c, 0x51, 0x1a, 0x9f, 0x0e, 0xdf, + 0xfd, 0x3a, 0x9d, 0xe5, 0xc0, 0xde, 0x12, 0xc5, 0x4a, 0x65, 0xbf, 0x2a, + 0x22, 0x4f, 0x3d, 0xc7, 0x10, 0x5f, 0xee, 0xf5, 0x86, 0xb6, 0x7d, 0x62, + 0xee, 0x46, 0x46, 0x8c, 0x96, 0xa8, 0xd6, 0x4f, 0x26, 0x30, 0x41, 0x1b, + 0xde, 0x37, 0xee, 0xe3, 0xda, 0xfb, 0xb0, 0x69, 0xcc, 0xe4, 0x3f, 0x8c, + 0x8d, 0x95, 0x40, 0xaa, 0x50, 0xb8, 0xe3, 0x6f, 0xa1, 0x6e, 0x23, 0xc8, + 0xe6, 0xe0, 0xe3, 0x4f, 0xea, 0x4c, 0xad, 0x32, 0xbb, 0x81, 0x49, 0x9c, + 0xb4, 0x7a, 0xc5, 0xfe, 0x60, 0x77, 0xe2, 0x6f, 0xac, 0x5f, 0xcf, 0xd8, + 0x35, 0x83, 0x58, 0xa7, 0x3f, 0x8d, 0x0a, 0xfc, 0xd2, 0xf3, 0xb4, 0x16, + 0x2e, 0x1c, 0x66, 0x1e, 0x57, 0xcb, 0xaf, 0xee, 0xe0, 0xdb, 0x07, 0xba, + 0xc5, 0xff, 0xff, 0xf6, 0x39, 0x37, 0xa4, 0x9b, 0x69, 0xd1, 0x98, 0x42, + 0xf1, 0x60, 0x25, 0x62, 0xf9, 0xe1, 0xc8, 0xcc, 0x45, 0x67, 0x0c, 0xea, + 0x53, 0x18, 0xc8, 0x6e, 0x54, 0xaa, 0x31, 0xfc, 0xa0, 0xab, 0xfb, 0x59, + 0xe7, 0xf8, 0x96, 0x2f, 0xff, 0xff, 0xf8, 0xc2, 0xcf, 0x4e, 0x77, 0xe3, + 0x32, 0x1f, 0xc7, 0x87, 0x0c, 0x0c, 0xb3, 0xdc, 0x0c, 0xeb, 0x16, 0x8d, + 0xfa, 0xd4, 0x63, 0xc6, 0x85, 0xd7, 0xdc, 0x7d, 0xba, 0xd5, 0x8b, 0xfd, + 0x1a, 0xba, 0xc8, 0xec, 0xf3, 0x12, 0xc5, 0xfd, 0x1a, 0x6d, 0x81, 0x06, + 0x75, 0x8b, 0xb3, 0xa9, 0x62, 0xfc, 0x22, 0x27, 0x82, 0xc5, 0x46, 0xe9, + 0x8d, 0x75, 0x87, 0x11, 0xb1, 0x4f, 0x5c, 0x41, 0x23, 0x7e, 0x0d, 0x5f, + 0xfa, 0x37, 0xeb, 0x5f, 0x69, 0x33, 0x7e, 0x62, 0xc5, 0xfd, 0xd6, 0xf2, + 0x62, 0x16, 0x96, 0x2c, 0x4b, 0x15, 0xd7, 0x67, 0x8d, 0x1a, 0x8d, 0x6d, + 0x1e, 0xb1, 0x76, 0x69, 0x62, 0xfb, 0xac, 0xfb, 0x75, 0x8b, 0x15, 0xf3, + 0xc4, 0x61, 0x7b, 0x81, 0x12, 0xc5, 0x46, 0xe9, 0xaa, 0x75, 0x90, 0x92, + 0x19, 0x7f, 0xd6, 0x63, 0x88, 0x6f, 0xfd, 0x90, 0x26, 0x36, 0x2e, 0x4f, + 0x96, 0x2f, 0xbc, 0xfa, 0xc5, 0x8a, 0xeb, 0xb3, 0xe2, 0xc4, 0x0b, 0xfe, + 0xcf, 0x07, 0xb3, 0x69, 0xe2, 0x58, 0xbf, 0xa1, 0x1a, 0xb6, 0xeb, 0x63, + 0x5f, 0x5c, 0x58, 0xbc, 0x59, 0xf5, 0x8b, 0xf9, 0xcf, 0x93, 0xa3, 0x56, + 0x28, 0x67, 0x95, 0xb8, 0xe5, 0xee, 0xba, 0xf5, 0xdc, 0x68, 0xb1, 0x68, + 0xe5, 0x8b, 0xfd, 0x9c, 0xe6, 0x39, 0x6e, 0xb1, 0x5d, 0x62, 0x72, 0x7d, + 0x69, 0x44, 0x68, 0x79, 0x1b, 0x42, 0x4a, 0x35, 0x91, 0x80, 0xc8, 0x85, + 0x6f, 0x69, 0xb8, 0xb1, 0x7f, 0x46, 0xe1, 0xff, 0xf9, 0xb2, 0xc5, 0xd1, + 0xdd, 0xac, 0x5f, 0xf6, 0x74, 0x2c, 0xe1, 0x9e, 0x09, 0x62, 0xdf, 0x58, + 0xa3, 0x11, 0x7d, 0x1b, 0x8e, 0xf5, 0xd9, 0xb1, 0x0e, 0x08, 0xf6, 0xff, + 0xba, 0xde, 0x61, 0x16, 0x36, 0xeb, 0x16, 0x65, 0x8a, 0x8d, 0xcf, 0x3b, + 0xb3, 0xdb, 0x8d, 0x95, 0x8b, 0xd1, 0x72, 0x56, 0x2f, 0x87, 0x85, 0x12, + 0xc5, 0xcf, 0xe5, 0x8a, 0x73, 0x75, 0xf2, 0x3b, 0xff, 0x7b, 0x3f, 0xd5, + 0xe1, 0x77, 0x0e, 0x2c, 0x51, 0xd1, 0x7b, 0xe5, 0x8e, 0xa2, 0x0b, 0xfd, + 0xdf, 0xbb, 0x80, 0x88, 0xd5, 0x8b, 0xff, 0x4c, 0x45, 0x9d, 0x18, 0xe7, + 0x75, 0x8a, 0x63, 0xf8, 0x11, 0xc5, 0xf8, 0x00, 0x6e, 0xf8, 0xb1, 0x7f, + 0xff, 0xc3, 0x7c, 0xd4, 0x45, 0x9d, 0x3f, 0x83, 0x9e, 0x72, 0x4d, 0x58, + 0xb7, 0xdd, 0x12, 0x62, 0x2a, 0xbf, 0xfc, 0xf1, 0x43, 0x3b, 0x81, 0x87, + 0x66, 0x25, 0x8b, 0x9b, 0xa9, 0x62, 0xfd, 0xff, 0x03, 0x3b, 0x58, 0xbf, + 0x48, 0x0c, 0x14, 0xac, 0x56, 0x1e, 0x9b, 0x95, 0x5f, 0xff, 0xee, 0x67, 0x8c, 0xfe, 0x6f, 0x21, 0x16, 0x0f, 0xef, 0x12, 0xc5, 0xfb, 0xc2, 0x9c, - 0xd9, 0x62, 0xb6, 0x56, 0xfd, 0x90, 0xd5, 0x36, 0x15, 0x7b, 0xc2, 0xd3, - 0xe5, 0x0c, 0x98, 0x43, 0x5e, 0x2f, 0x0d, 0x92, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0x0e, 0x35, 0x99, 0xdf, 0x58, 0xd8, 0xde, 0xf4, 0xce, 0xfb, - 0x8d, 0x50, 0x93, 0x33, 0xbe, 0xfb, 0xeb, 0x86, 0x46, 0xb8, 0xd6, 0x31, - 0x99, 0xdf, 0x58, 0xd3, 0xbd, 0x8d, 0x8c, 0x8d, 0x63, 0x8d, 0xf0, 0xce, - 0xf2, 0x7b, 0xde, 0xf4, 0xce, 0xf2, 0x7b, 0xeb, 0xde, 0x99, 0x1a, 0xe3, - 0x68, 0xda, 0x35, 0xac, 0x5e, 0x8d, 0x5d, 0xe4, 0x6c, 0xb1, 0x7f, 0x46, - 0xae, 0xf0, 0xce, 0xdc, 0xf2, 0xc5, 0x77, 0x8b, 0xcc, 0xbd, 0xec, 0xba, - 0x68, 0xd2, 0x12, 0x11, 0xb4, 0x78, 0x71, 0xac, 0xba, 0xf7, 0x78, 0x44, - 0xb1, 0x7e, 0x8d, 0xfb, 0xd1, 0x79, 0xd6, 0x2f, 0xf7, 0x53, 0xec, 0xce, - 0xa0, 0xb1, 0x7f, 0x63, 0xf8, 0xa7, 0xa5, 0x8b, 0x47, 0x2c, 0x58, 0xd5, - 0x8a, 0x8d, 0xd1, 0xbd, 0xde, 0x10, 0xc6, 0xa3, 0x38, 0xd6, 0x6b, 0xf2, + 0xd9, 0x62, 0xb6, 0x57, 0x85, 0x90, 0xd5, 0x36, 0x15, 0x7b, 0xc2, 0xd3, + 0xe5, 0x0c, 0x98, 0x4d, 0xbe, 0x20, 0x0d, 0x92, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0x0e, 0x35, 0x99, 0xd7, 0x58, 0xd8, 0xde, 0xb4, 0xce, 0xbb, + 0x8d, 0x50, 0x93, 0x33, 0xae, 0xfa, 0xeb, 0x86, 0x46, 0xb8, 0xd6, 0x31, + 0x99, 0xd7, 0x58, 0xd3, 0xad, 0x8d, 0x8c, 0x8d, 0x63, 0x8d, 0xf0, 0xce, + 0xb2, 0x7a, 0xde, 0xb4, 0xce, 0xb2, 0x7a, 0xeb, 0xd6, 0x99, 0x1a, 0xe3, + 0x68, 0xda, 0x35, 0xac, 0x5e, 0x8d, 0x5d, 0x64, 0x6c, 0xb1, 0x7f, 0x46, + 0xae, 0xb0, 0xce, 0x9c, 0xf2, 0xc5, 0x75, 0x8b, 0xd5, 0x3d, 0x6c, 0xbe, + 0xa8, 0xd2, 0x12, 0x11, 0xb4, 0x78, 0x71, 0xac, 0xba, 0xf7, 0x58, 0x44, + 0xb1, 0x7e, 0x8d, 0xfa, 0xd1, 0x79, 0xd6, 0x2f, 0xf7, 0x73, 0xec, 0xce, + 0xe0, 0xb1, 0x7f, 0x63, 0xf8, 0xa7, 0xb5, 0x8b, 0x47, 0x2c, 0x58, 0xd5, + 0x8a, 0x8d, 0xd1, 0xbd, 0xd6, 0x10, 0xc6, 0xa3, 0x38, 0xd6, 0x6b, 0xf2, 0xd8, 0xe1, 0x5b, 0xdc, 0x0b, 0x65, 0x8b, 0x7d, 0x62, 0xe2, 0xd9, 0x62, - 0xbb, 0xc3, 0xca, 0xd8, 0x80, 0x42, 0x57, 0x47, 0x46, 0xeb, 0x17, 0xb5, - 0xce, 0x2c, 0x5c, 0x5c, 0x58, 0xae, 0xf4, 0xda, 0xf6, 0x1e, 0xb0, 0xd6, - 0x2c, 0x35, 0x8a, 0x63, 0x49, 0xc1, 0x2b, 0xc7, 0x9d, 0xd6, 0x2b, 0xbc, - 0x46, 0xfc, 0x6c, 0xab, 0xdf, 0x13, 0x30, 0x82, 0xfe, 0x8d, 0x24, 0x26, - 0xde, 0x56, 0x2f, 0xe8, 0xd7, 0xde, 0x14, 0x74, 0x9d, 0x62, 0xa3, 0x43, + 0xba, 0xc3, 0xca, 0xd8, 0x80, 0x42, 0x57, 0x47, 0x46, 0xeb, 0x17, 0xb5, + 0xce, 0x2c, 0x5c, 0x5c, 0x58, 0xae, 0xb4, 0xda, 0xf4, 0x1e, 0xb0, 0xd6, + 0x2c, 0x35, 0x8a, 0x63, 0x49, 0xc1, 0x2b, 0xc7, 0x9d, 0xd6, 0x2b, 0xac, + 0x46, 0xfc, 0x6c, 0xab, 0xd7, 0x13, 0x30, 0x82, 0xfe, 0x8d, 0x24, 0x26, + 0xde, 0x56, 0x2f, 0xe8, 0xd7, 0xd6, 0x14, 0x74, 0x9d, 0x62, 0xa3, 0x43, 0xf0, 0x8d, 0x66, 0x97, 0xa3, 0x5c, 0x5b, 0x2c, 0x5f, 0xff, 0x86, 0x66, 0x70, 0xb6, 0xd9, 0xa3, 0xcc, 0x33, 0xf1, 0xcb, 0x17, 0xff, 0xfe, 0x63, 0x0b, 0x22, 0x7d, 0x8c, 0x16, 0xfa, 0xd4, 0x98, 0x67, 0xe3, 0x96, 0x2f, 0xfe, 0x73, 0xc9, 0x64, 0x0c, 0x0b, 0x7c, 0x58, 0xbf, 0x98, 0xb6, 0xfc, 0xc7, 0xac, 0x5e, 0x38, 0x7c, 0x58, 0xbd, 0x09, 0x02, 0xc5, 0xa3, 0x75, 0x8a, 0x1a, 0x21, 0x30, 0xc5, 0x87, 0xe3, 0x87, 0x6f, 0xdf, 0x6f, 0x34, - 0x16, 0x2f, 0xf7, 0x7a, 0x67, 0x00, 0x7c, 0xe2, 0xc5, 0xf1, 0x66, 0x69, - 0x62, 0xef, 0xb2, 0xc5, 0x68, 0xdc, 0x76, 0x21, 0xbf, 0xc1, 0x99, 0x25, - 0x30, 0x95, 0x8a, 0x73, 0xd7, 0x62, 0x3b, 0xdb, 0xed, 0xf5, 0x8b, 0xfe, - 0x01, 0x9c, 0x97, 0xd9, 0xbc, 0xb1, 0x7e, 0x9e, 0x77, 0xd6, 0x37, 0x8d, - 0xd6, 0x2e, 0x39, 0xd6, 0x29, 0xd1, 0x1d, 0xc3, 0xb1, 0x1d, 0xdf, 0xa7, - 0x82, 0xfb, 0xac, 0x51, 0x89, 0x82, 0xc2, 0x15, 0xdc, 0x2f, 0xa5, 0x8b, - 0xf4, 0x1b, 0x4d, 0xba, 0xc5, 0xcf, 0x12, 0xc5, 0x49, 0xe0, 0xe1, 0x4d, - 0xd1, 0x7d, 0x62, 0xff, 0x16, 0x75, 0x02, 0x6d, 0x96, 0x2b, 0x47, 0xda, - 0x02, 0x0e, 0x0c, 0xdf, 0x6e, 0x2d, 0x44, 0xb1, 0x7d, 0x81, 0xe1, 0xab, - 0x17, 0xee, 0x09, 0x88, 0x0b, 0x14, 0x62, 0x28, 0x70, 0xbc, 0x89, 0xbc, - 0x49, 0x7f, 0x16, 0x76, 0x2c, 0xe2, 0xc5, 0x1c, 0xfa, 0x80, 0x79, 0x7b, - 0x8e, 0x05, 0x8b, 0xe7, 0x29, 0xe2, 0xc5, 0x61, 0xf0, 0x39, 0x17, 0xc7, - 0x6f, 0xfd, 0x9b, 0x1a, 0xc3, 0xd1, 0x30, 0x4b, 0x17, 0xdc, 0x16, 0x80, - 0xb1, 0x73, 0x79, 0x62, 0xe9, 0x3f, 0x46, 0xec, 0x32, 0x4b, 0xc1, 0x04, - 0x12, 0x45, 0xef, 0x7f, 0x12, 0x23, 0x0d, 0x0d, 0xf9, 0xcd, 0x62, 0x02, - 0xc5, 0x98, 0x8f, 0x63, 0xc6, 0x17, 0xff, 0xff, 0x4e, 0xc6, 0x70, 0x53, - 0xd7, 0xbf, 0x87, 0xcf, 0x14, 0x80, 0x12, 0xb1, 0x74, 0x76, 0x2c, 0x5f, - 0x7a, 0x2c, 0xf2, 0xc5, 0x86, 0xb1, 0x6e, 0xe5, 0x8a, 0x1a, 0x36, 0x71, - 0xd1, 0x86, 0x84, 0x48, 0x18, 0x95, 0x4a, 0xe5, 0xe8, 0xe5, 0x12, 0xe8, - 0xb7, 0xef, 0x80, 0x85, 0x39, 0x43, 0xfe, 0xfd, 0xf2, 0xef, 0x91, 0xdd, - 0xcb, 0x17, 0x33, 0x2c, 0x5b, 0xee, 0x79, 0x6c, 0x6b, 0x7e, 0x7e, 0xd8, - 0x2e, 0x2c, 0x5f, 0xfe, 0x14, 0xf5, 0xfc, 0xda, 0x42, 0xea, 0x1c, 0x58, - 0xa9, 0x3f, 0x9e, 0x15, 0x5f, 0xff, 0xc0, 0xd4, 0x99, 0xa9, 0xf7, 0x50, - 0x93, 0x74, 0xc1, 0x2c, 0x5f, 0x07, 0xc6, 0x02, 0xc5, 0xd1, 0x7d, 0x62, - 0xff, 0xc7, 0x33, 0x1f, 0x4e, 0x79, 0x35, 0x62, 0x9c, 0xf6, 0x58, 0x66, - 0xff, 0xcf, 0x11, 0x9f, 0x97, 0xd0, 0xa3, 0xd6, 0x2f, 0xe6, 0x1c, 0x0a, - 0x4e, 0xb1, 0x46, 0x27, 0x1f, 0x24, 0x3a, 0x60, 0xfb, 0xe8, 0x08, 0x09, - 0x12, 0xff, 0xfb, 0xe4, 0x2f, 0x18, 0x59, 0xdd, 0xe7, 0xce, 0xe5, 0x8b, - 0x9c, 0x0b, 0x15, 0xb9, 0xf6, 0xf7, 0x2b, 0x5c, 0x2f, 0xac, 0x5f, 0xfd, - 0xd7, 0x0c, 0xe0, 0xa7, 0xac, 0xcf, 0x2c, 0x5e, 0xf0, 0xa3, 0xd6, 0x2f, - 0xbb, 0xb5, 0xce, 0x2c, 0x56, 0x1e, 0x43, 0x90, 0xde, 0xe6, 0x6c, 0xb1, - 0x7d, 0xe2, 0x9d, 0x96, 0x2a, 0x53, 0x2f, 0x34, 0x99, 0xc6, 0x35, 0x09, - 0x06, 0x20, 0x10, 0xf5, 0xff, 0xd8, 0x5d, 0x78, 0xce, 0x00, 0xf9, 0xc5, - 0x8b, 0xf4, 0xeb, 0xa8, 0x71, 0x62, 0xff, 0xfc, 0xe5, 0xbf, 0x3c, 0x32, - 0x9e, 0xbe, 0xf8, 0x4b, 0x17, 0xe1, 0x79, 0xf6, 0x95, 0x8a, 0xc4, 0x77, - 0xee, 0x8e, 0x72, 0xa2, 0x55, 0xbf, 0xdf, 0x9d, 0xb5, 0x38, 0x35, 0x8b, - 0xf4, 0x7c, 0x6c, 0x09, 0x3a, 0xc5, 0xf9, 0xf9, 0xec, 0xfa, 0xc5, 0xfe, - 0x92, 0x9e, 0x4b, 0x9d, 0x62, 0xf3, 0x7b, 0x8b, 0x14, 0x69, 0xe7, 0x68, - 0xc6, 0xf7, 0x70, 0xe5, 0x62, 0xa5, 0x31, 0xec, 0x34, 0xdc, 0xc5, 0xdd, - 0x84, 0x47, 0x7f, 0xf9, 0x88, 0x59, 0xe2, 0x6f, 0x96, 0x69, 0x62, 0xf7, - 0xdb, 0xbf, 0x58, 0xbf, 0x76, 0x14, 0x33, 0x8b, 0x17, 0xff, 0xb3, 0xe6, - 0x49, 0x36, 0x8d, 0x32, 0x74, 0xb1, 0x7f, 0xe7, 0x88, 0xc9, 0xc2, 0x1f, - 0xe5, 0x62, 0xf7, 0x30, 0x6b, 0x15, 0x27, 0xb8, 0x03, 0xfb, 0xe0, 0x39, - 0x09, 0x62, 0xb1, 0x31, 0x6d, 0xca, 0xda, 0x15, 0x02, 0x21, 0xbc, 0x3c, - 0xd9, 0x62, 0xf7, 0x69, 0xd2, 0xc5, 0xfc, 0xd1, 0x3f, 0xc4, 0x05, 0x8a, - 0xc3, 0xec, 0x71, 0xef, 0x8f, 0xdf, 0x47, 0x99, 0x3d, 0xe2, 0xc5, 0xf1, - 0x19, 0x83, 0x58, 0xbf, 0xc5, 0x31, 0xd8, 0x4e, 0x6a, 0xc5, 0xfe, 0xf3, - 0x75, 0xc6, 0xe8, 0x25, 0x8b, 0xfe, 0xd0, 0x30, 0x13, 0x0e, 0x62, 0xc5, - 0xa5, 0x62, 0xf3, 0xc9, 0x2c, 0x54, 0x9f, 0x2e, 0x8e, 0x7c, 0x23, 0x5d, - 0xe3, 0x68, 0xad, 0x1a, 0x98, 0xa0, 0xee, 0x38, 0x65, 0x61, 0xf1, 0xa5, - 0x1b, 0xc3, 0x2b, 0xa8, 0xc9, 0x5e, 0x73, 0xd2, 0x3e, 0x16, 0x91, 0x4a, - 0x2e, 0xd4, 0x7e, 0x67, 0x8d, 0x2b, 0xf1, 0xad, 0x01, 0x27, 0xbf, 0x47, - 0x28, 0xce, 0x3d, 0x0a, 0xee, 0xc5, 0xa1, 0x16, 0x47, 0x11, 0x86, 0x6b, - 0xdd, 0x09, 0xcb, 0xc7, 0x78, 0x2c, 0x58, 0x4b, 0x17, 0xed, 0x67, 0x69, - 0xe9, 0x62, 0xf1, 0x67, 0x96, 0x2f, 0xff, 0x75, 0x0e, 0x72, 0x5f, 0xaf, - 0x7a, 0x4e, 0xb1, 0x5a, 0x44, 0xa1, 0x15, 0x84, 0x39, 0x7b, 0x33, 0xcb, - 0x17, 0xfe, 0xdb, 0x0a, 0x42, 0xf1, 0xad, 0xc5, 0x8b, 0xfd, 0x9d, 0x99, - 0xf7, 0xc2, 0x58, 0xb8, 0xbd, 0x87, 0xea, 0x48, 0x37, 0xfb, 0xf2, 0xfe, - 0x04, 0xc1, 0x62, 0xf7, 0x9f, 0x16, 0x2f, 0x60, 0xdd, 0x62, 0xfb, 0xa8, - 0x49, 0xd6, 0x28, 0xc3, 0xdc, 0x91, 0xcf, 0x0e, 0x53, 0xa3, 0xa7, 0x85, - 0x61, 0x42, 0x3e, 0xf0, 0xbd, 0xc5, 0x8b, 0xff, 0xff, 0xe3, 0x4c, 0x2c, - 0x34, 0xde, 0xa1, 0xc3, 0x0b, 0x3e, 0x58, 0x11, 0x86, 0x7e, 0x39, 0x62, - 0xff, 0xa3, 0xdb, 0xd1, 0x41, 0xf5, 0x12, 0xc5, 0xf8, 0xcd, 0xe4, 0x2e, - 0x96, 0x2f, 0xfa, 0x60, 0x13, 0x6b, 0xd3, 0x8b, 0x17, 0xff, 0xff, 0xfd, - 0xc3, 0x3f, 0x9b, 0x48, 0x5d, 0x43, 0x86, 0x0b, 0x7d, 0x6a, 0x4c, 0x88, - 0xde, 0x8c, 0x33, 0xf1, 0xcb, 0x17, 0xf7, 0x46, 0x45, 0x99, 0xba, 0xc5, - 0xff, 0xff, 0xfb, 0xb8, 0xcf, 0xfe, 0x4f, 0xae, 0x85, 0x11, 0x85, 0x9b, - 0xb8, 0xc8, 0xc3, 0x3f, 0x1c, 0xb1, 0x5d, 0xea, 0xea, 0xdf, 0x7d, 0x8e, - 0xcc, 0x29, 0x86, 0x61, 0x91, 0xbd, 0x6e, 0x6a, 0xe3, 0xcd, 0x08, 0xa0, - 0x1f, 0x91, 0x6f, 0x8e, 0x45, 0x0a, 0x8e, 0xc6, 0x57, 0xff, 0xff, 0xff, - 0xff, 0x39, 0x9f, 0xce, 0x0a, 0x7a, 0x2c, 0xf7, 0x3e, 0x73, 0x3e, 0xf8, - 0x59, 0xd9, 0xf0, 0xb3, 0xa8, 0x71, 0xcd, 0x30, 0xcf, 0xc7, 0x2c, 0x5f, - 0xbf, 0x20, 0x98, 0xf5, 0x8b, 0x8e, 0xeb, 0x14, 0xb1, 0x40, 0x34, 0x61, - 0x0b, 0xdf, 0xd0, 0x81, 0xe2, 0x9e, 0xe5, 0x8b, 0x01, 0x62, 0x9d, 0x16, - 0xa0, 0x4e, 0x22, 0x21, 0x19, 0xdd, 0x1d, 0x2b, 0x17, 0xa4, 0xd7, 0x58, - 0xbf, 0x4c, 0x46, 0x66, 0xcb, 0x17, 0xc3, 0x9e, 0x4a, 0xc5, 0xd2, 0x75, - 0x8b, 0xa7, 0xa5, 0x8b, 0xfb, 0x98, 0x7e, 0xc3, 0xc5, 0x8b, 0xed, 0xb6, - 0x17, 0x96, 0x28, 0xc4, 0x69, 0x49, 0x58, 0xc8, 0xa2, 0x17, 0xe0, 0xc0, - 0x8c, 0x28, 0x93, 0x61, 0xe0, 0xd7, 0xa1, 0xdf, 0x74, 0x74, 0x6e, 0xb1, - 0x7f, 0xf8, 0x12, 0x5b, 0x99, 0x84, 0x28, 0x67, 0x16, 0x2f, 0xc0, 0xd3, - 0xf4, 0x05, 0x8b, 0xf7, 0x9a, 0x0e, 0x05, 0x8b, 0xf8, 0xce, 0xbc, 0x52, - 0x35, 0x8b, 0x37, 0x48, 0x82, 0x22, 0xae, 0x14, 0x5f, 0x67, 0xde, 0x0b, - 0x17, 0xf6, 0x70, 0xb3, 0xb3, 0x2c, 0x5c, 0x23, 0x98, 0x7a, 0x12, 0x45, - 0x7f, 0x31, 0x66, 0xc1, 0xc1, 0x62, 0xfd, 0x31, 0x33, 0x69, 0x62, 0x80, - 0x7a, 0xfc, 0x2f, 0xae, 0x93, 0xf9, 0xfc, 0x33, 0x79, 0x08, 0x5f, 0x42, - 0x16, 0xf1, 0x90, 0xdd, 0x62, 0xfe, 0x33, 0x8d, 0x3d, 0x41, 0x62, 0xe0, - 0x71, 0x62, 0x9c, 0xf2, 0x18, 0xc2, 0xff, 0xf8, 0xc2, 0xcf, 0x3e, 0x6c, - 0x53, 0xe7, 0x3a, 0xc5, 0xff, 0x70, 0xcc, 0x29, 0x17, 0x7f, 0xc5, 0x8b, - 0xc6, 0x75, 0x05, 0x8b, 0xfc, 0x7f, 0xbf, 0x8a, 0x4e, 0xb1, 0x7c, 0x79, - 0x07, 0x16, 0x2b, 0xbe, 0xab, 0xe9, 0xf3, 0x1c, 0x5e, 0x47, 0x38, 0x69, - 0xab, 0xca, 0x19, 0x3a, 0x77, 0xda, 0x00, 0x40, 0x49, 0xfc, 0x3f, 0x11, - 0x00, 0x46, 0x77, 0x42, 0x34, 0x58, 0xbf, 0x46, 0xe6, 0x8e, 0x76, 0x58, - 0xbf, 0xff, 0xb4, 0x61, 0x67, 0x6c, 0xd4, 0x0c, 0x91, 0xb4, 0x5c, 0x58, - 0xbf, 0xfd, 0xaf, 0x84, 0xc3, 0x30, 0x30, 0x01, 0xfb, 0x96, 0x2f, 0xfe, - 0xc0, 0xbb, 0x8e, 0x27, 0x3e, 0x10, 0x16, 0x2f, 0xff, 0xfd, 0xd4, 0x9a, - 0x58, 0x3f, 0xbc, 0x46, 0x73, 0x3a, 0x86, 0xb0, 0x25, 0x8a, 0x74, 0x5d, - 0x12, 0x45, 0x62, 0x71, 0xac, 0xc0, 0x51, 0x86, 0x5f, 0xd2, 0x6e, 0x0e, - 0x3a, 0x37, 0x58, 0xbe, 0xf0, 0xa7, 0x65, 0x8b, 0xf3, 0x6b, 0x8e, 0x35, - 0x8b, 0xf0, 0xc3, 0xeb, 0x06, 0xb1, 0x50, 0x3d, 0x32, 0x28, 0xbf, 0xb3, - 0xf8, 0x79, 0xdd, 0x62, 0xe1, 0xe2, 0xc5, 0x49, 0xf3, 0x40, 0x85, 0xcb, - 0xaf, 0xcf, 0xa7, 0xed, 0x8b, 0x15, 0x04, 0xda, 0x9c, 0xdf, 0xd0, 0xdd, - 0xee, 0x2d, 0xbe, 0x8e, 0xcd, 0x4a, 0xc5, 0xfd, 0x3c, 0xfc, 0x97, 0x96, - 0x2f, 0xfe, 0xc2, 0x33, 0xb9, 0xff, 0xb3, 0xe6, 0x96, 0x2f, 0xff, 0xb3, - 0xde, 0x90, 0x8c, 0xcf, 0xe0, 0x8b, 0x75, 0x8b, 0xdd, 0x43, 0x87, 0x44, - 0xd7, 0xd2, 0x2d, 0x1e, 0xb1, 0x60, 0xd6, 0x2f, 0x7b, 0x38, 0xb1, 0x50, - 0x4d, 0x0b, 0x21, 0x8f, 0xb9, 0xb0, 0x05, 0x44, 0x27, 0x7f, 0xff, 0x8b, - 0x37, 0xfb, 0x96, 0x0b, 0xaf, 0x18, 0xc1, 0x61, 0xab, 0x17, 0x9f, 0x6e, - 0x2c, 0x5f, 0xfb, 0x37, 0x6d, 0xbf, 0x9b, 0xe1, 0x2c, 0x5e, 0xcd, 0x84, - 0xb1, 0x60, 0x8c, 0x47, 0x06, 0x32, 0x7c, 0x78, 0x90, 0x2f, 0xc2, 0x9f, - 0x94, 0xac, 0x5f, 0xfe, 0xd6, 0x3e, 0xc6, 0x72, 0x5f, 0x66, 0xf2, 0xc5, - 0x8d, 0x19, 0xf9, 0xe1, 0x3d, 0xfd, 0x0e, 0x1a, 0x29, 0xe9, 0x62, 0xfb, - 0x06, 0xd0, 0x58, 0xae, 0x8f, 0x4c, 0x23, 0x1b, 0xed, 0x4c, 0xec, 0xb1, - 0x7d, 0x14, 0xf9, 0x96, 0x2f, 0xf4, 0xed, 0xc9, 0x89, 0xfb, 0x2c, 0x5e, - 0x88, 0x70, 0x58, 0xad, 0x8f, 0x5b, 0x0d, 0xee, 0x60, 0xb8, 0x8b, 0xe1, - 0x11, 0x86, 0xf3, 0x7b, 0xb7, 0x83, 0x58, 0xa9, 0x54, 0xe3, 0x90, 0xb6, - 0x77, 0xb2, 0x87, 0x10, 0x47, 0xb7, 0x4f, 0x16, 0x2e, 0x92, 0x58, 0xaf, - 0x1a, 0xd0, 0xc5, 0xef, 0xf9, 0xf5, 0xb0, 0x81, 0x85, 0x8b, 0x17, 0x44, - 0x75, 0x8b, 0xfd, 0x0e, 0x78, 0x58, 0x33, 0x22, 0x3d, 0x20, 0x1c, 0xdf, - 0xff, 0x60, 0xfe, 0x20, 0xb8, 0xfe, 0xfb, 0xb0, 0x16, 0x2b, 0xa4, 0x4f, - 0x12, 0x6d, 0xc7, 0x82, 0xc5, 0xff, 0xe9, 0xd6, 0xe6, 0x83, 0x18, 0xba, - 0x87, 0x16, 0x2a, 0x07, 0xcb, 0xc1, 0x8b, 0xec, 0xd4, 0x9d, 0x62, 0xf1, - 0x67, 0x63, 0x0f, 0x10, 0x88, 0xaf, 0xff, 0xfb, 0x85, 0x83, 0x70, 0x8c, - 0x2c, 0xee, 0xf3, 0xf0, 0x53, 0xa5, 0x8a, 0xd2, 0x6d, 0x5c, 0x86, 0x67, - 0x8d, 0x2f, 0xf1, 0x1a, 0x58, 0xfd, 0x79, 0x62, 0xdd, 0x96, 0x2b, 0x0f, - 0x23, 0x86, 0x95, 0x28, 0x9f, 0x13, 0xf5, 0xb7, 0x58, 0xbf, 0xc1, 0x6b, - 0x0e, 0x76, 0x25, 0x8b, 0xe9, 0xcf, 0xf1, 0x62, 0xe7, 0xd9, 0x62, 0xa2, - 0x37, 0x5e, 0x22, 0xa3, 0xa2, 0x8d, 0x84, 0xc0, 0xdd, 0x7f, 0xb7, 0x2c, - 0x1f, 0xdb, 0x8b, 0x17, 0xf0, 0x30, 0x87, 0xf9, 0x58, 0xbf, 0xbe, 0xe4, - 0x00, 0xce, 0xb1, 0x4e, 0x7b, 0x9e, 0x2d, 0xb8, 0x6e, 0xb1, 0x7f, 0xff, - 0x7d, 0xf0, 0xb1, 0xc7, 0x92, 0x06, 0xdd, 0xb4, 0xb1, 0x7f, 0xb6, 0x93, - 0x94, 0xf4, 0x05, 0x8b, 0xf8, 0xcc, 0xd6, 0xf3, 0x8b, 0x15, 0x29, 0xc2, - 0x42, 0x12, 0x1b, 0x90, 0xf4, 0x2e, 0xcb, 0x01, 0x9a, 0xdf, 0x00, 0x5a, - 0x95, 0x8b, 0xe3, 0x1b, 0x38, 0xb1, 0x46, 0x9e, 0x37, 0xc8, 0xea, 0x51, - 0x8f, 0x90, 0xa4, 0xb0, 0x96, 0x2f, 0xf9, 0xa3, 0xcb, 0x07, 0x25, 0xe5, - 0x8b, 0xfd, 0x33, 0xc7, 0xd9, 0x8e, 0xb1, 0x7e, 0x29, 0x86, 0x79, 0x62, - 0xb1, 0x12, 0x84, 0x75, 0xe3, 0x3b, 0xb3, 0x65, 0x8b, 0xe2, 0x2c, 0xf2, - 0xc5, 0xdb, 0x09, 0x62, 0xe9, 0x35, 0x62, 0x96, 0x2e, 0x6e, 0x2c, 0x51, - 0xcd, 0x18, 0x41, 0x97, 0xd8, 0x1e, 0x1d, 0x62, 0xf8, 0xd1, 0x68, 0xd5, - 0x8b, 0xe0, 0x1d, 0xf8, 0xb1, 0x46, 0x9e, 0x4e, 0x89, 0xaf, 0x36, 0xa0, - 0x62, 0x6d, 0x9d, 0xe9, 0x74, 0x8c, 0x39, 0x09, 0xc6, 0x7e, 0x76, 0x44, - 0x41, 0xb6, 0x51, 0x8d, 0x92, 0xf4, 0x6e, 0x3b, 0x31, 0xde, 0xe4, 0x73, - 0xdd, 0x22, 0xbc, 0x6c, 0xfa, 0x97, 0x42, 0x78, 0x40, 0x7e, 0x58, 0xdb, - 0x43, 0x14, 0xa5, 0x3d, 0x70, 0x98, 0x52, 0x84, 0xaf, 0xfd, 0xa7, 0xd9, - 0x8e, 0x5d, 0x08, 0x96, 0x2d, 0x1e, 0xb1, 0x6f, 0x2c, 0x5d, 0x20, 0x58, - 0xbf, 0xfc, 0xe2, 0xef, 0xe4, 0xce, 0x08, 0x07, 0xcf, 0x2c, 0x57, 0x47, - 0xd1, 0xa1, 0x7b, 0xff, 0xb7, 0xfc, 0xf3, 0xda, 0x9e, 0xbe, 0xeb, 0x17, - 0xf4, 0x39, 0x82, 0xd0, 0x16, 0x2f, 0xd9, 0xcc, 0x72, 0x58, 0xbe, 0x28, - 0x9c, 0xfd, 0x1e, 0xaf, 0xcb, 0xef, 0xfd, 0x3b, 0xf2, 0x5f, 0xaf, 0x49, - 0xd6, 0x29, 0x62, 0xe1, 0x47, 0xac, 0x5f, 0xdb, 0x60, 0x58, 0xe3, 0x58, - 0xad, 0x1e, 0x57, 0x06, 0xea, 0x07, 0xf1, 0xe5, 0x6b, 0x8d, 0x3a, 0xc5, - 0x4a, 0x79, 0x2d, 0x09, 0xc2, 0x3a, 0x14, 0x2e, 0x23, 0x88, 0xaf, 0x81, - 0xcd, 0xbc, 0xb1, 0x7f, 0x37, 0xe4, 0xa6, 0x0b, 0x17, 0xff, 0xfe, 0xf6, - 0x49, 0x66, 0xe4, 0xdb, 0x4e, 0xb5, 0x3e, 0xfe, 0x0d, 0x62, 0xfb, 0xb1, - 0x67, 0x0c, 0x44, 0xbe, 0x16, 0x5f, 0xff, 0x61, 0x61, 0xbf, 0x68, 0x7c, - 0x26, 0x0c, 0xeb, 0x17, 0xfe, 0x63, 0x4c, 0xf3, 0x31, 0x19, 0xb2, 0xc5, - 0x4a, 0x71, 0x6f, 0x0b, 0xcf, 0x9d, 0x92, 0x95, 0xf8, 0x18, 0x79, 0xdd, - 0x62, 0xf3, 0x7b, 0x8b, 0x17, 0x0b, 0x65, 0x8a, 0x81, 0xb6, 0xd0, 0xed, - 0xfb, 0x21, 0xf6, 0x82, 0xc5, 0x44, 0x79, 0x3f, 0x21, 0xb1, 0x4a, 0x32, - 0xfd, 0x0a, 0x8b, 0xbf, 0x1e, 0xb1, 0x7f, 0xff, 0xff, 0xf7, 0xb9, 0x24, - 0x66, 0xe4, 0x2d, 0xbf, 0x83, 0xd3, 0x19, 0xee, 0x7f, 0x1c, 0x7e, 0x6f, - 0xc0, 0x0b, 0x17, 0xf9, 0x88, 0x3f, 0xfe, 0x46, 0xb1, 0x7f, 0xfd, 0xee, - 0x4e, 0x19, 0xa9, 0xf3, 0xee, 0xe3, 0x58, 0xbb, 0xa0, 0x96, 0x2c, 0x12, - 0xc5, 0xdb, 0x98, 0x33, 0x5b, 0xd0, 0xd5, 0x71, 0x15, 0xc2, 0x7e, 0xbd, - 0xd4, 0x9a, 0xb1, 0x7f, 0xff, 0xf6, 0xa4, 0xcf, 0xe7, 0x77, 0xa7, 0x5b, - 0x96, 0x7b, 0x42, 0xea, 0x1c, 0x58, 0xbc, 0x17, 0xf0, 0x91, 0x31, 0xe1, - 0xfb, 0xe1, 0x44, 0xc3, 0x58, 0xbf, 0x67, 0xb5, 0x81, 0x2c, 0x5b, 0x73, - 0x0f, 0x37, 0xe4, 0x95, 0x28, 0xab, 0x78, 0x40, 0xdd, 0xa8, 0x2c, 0x5f, - 0xfc, 0x2c, 0x23, 0x4c, 0xf9, 0x67, 0xb8, 0xb1, 0x7f, 0xfe, 0x0e, 0x42, - 0xdf, 0xee, 0x7c, 0xe8, 0xcc, 0xeb, 0xcb, 0x17, 0xf3, 0x73, 0x3c, 0x1e, - 0xcb, 0x14, 0x62, 0x23, 0x0d, 0x5c, 0xbe, 0x33, 0x70, 0xa5, 0x62, 0xa0, - 0x79, 0x67, 0x25, 0xa9, 0x5c, 0xb0, 0x81, 0x66, 0x0d, 0xf5, 0x0a, 0x47, - 0x87, 0x16, 0xa3, 0x66, 0x39, 0x37, 0xc6, 0x1a, 0x31, 0xdb, 0xf4, 0x6d, - 0xa7, 0x93, 0x56, 0x2f, 0xde, 0xfc, 0xbe, 0xeb, 0x14, 0x69, 0xeb, 0xf8, - 0xba, 0xf8, 0x99, 0xbe, 0xb1, 0x7f, 0xff, 0xb0, 0xfa, 0xd3, 0x98, 0x5d, - 0x60, 0x45, 0x82, 0xc3, 0x56, 0x28, 0x68, 0x84, 0xf9, 0x0d, 0x12, 0x32, - 0xb9, 0x0a, 0x7b, 0xf6, 0x73, 0xcd, 0xa5, 0x8b, 0xff, 0xdc, 0xc6, 0x23, - 0x39, 0xd4, 0x94, 0xf1, 0x62, 0xd0, 0xf9, 0xf9, 0x78, 0xa2, 0xfe, 0x91, - 0xcf, 0xe6, 0x0b, 0x17, 0xfa, 0x7c, 0x63, 0x6e, 0xfd, 0x96, 0x2b, 0x47, - 0xc8, 0x45, 0xb7, 0xff, 0xfe, 0x7e, 0xbc, 0xdf, 0x2c, 0x1f, 0xde, 0x2e, - 0x6f, 0x8e, 0x51, 0x2c, 0x5f, 0xff, 0x4f, 0x8c, 0x21, 0x77, 0x19, 0x9e, - 0x8e, 0xcf, 0x2c, 0x54, 0xa6, 0xe6, 0xf0, 0x8c, 0xd1, 0x08, 0x9b, 0xae, - 0x6f, 0x2c, 0x5f, 0xe3, 0x3c, 0x4d, 0xe9, 0xf2, 0xc5, 0xff, 0x40, 0xc9, - 0x33, 0xdc, 0x14, 0x7a, 0xc5, 0xdf, 0x93, 0x4f, 0xd3, 0x46, 0x97, 0xf7, - 0x50, 0x7f, 0x88, 0xeb, 0x17, 0x3e, 0xcb, 0x14, 0x61, 0xe4, 0x78, 0xc2, - 0xbe, 0x99, 0x20, 0x21, 0x16, 0x4e, 0xd7, 0xe0, 0x9b, 0xf1, 0x46, 0xeb, - 0x17, 0xfd, 0x83, 0x33, 0xc6, 0xb8, 0x5c, 0x58, 0xb6, 0x68, 0xfb, 0x7b, - 0x18, 0x5f, 0xfe, 0x08, 0x7f, 0x9d, 0x7d, 0xf0, 0xb3, 0xb2, 0xc5, 0xff, - 0xe9, 0x26, 0x33, 0xec, 0xfc, 0xe3, 0x9d, 0x62, 0xff, 0xed, 0x4b, 0x8f, - 0x3f, 0x86, 0x9a, 0xcb, 0x17, 0xf3, 0x7c, 0xd9, 0xd3, 0x2c, 0x5f, 0x6b, - 0x05, 0xb2, 0xc5, 0xfe, 0xd6, 0x39, 0x6d, 0x3b, 0xac, 0x5f, 0xa5, 0xf6, - 0x6f, 0x2c, 0x5e, 0xd4, 0x46, 0x61, 0xee, 0x70, 0xd2, 0xa5, 0x54, 0x40, - 0xe1, 0x45, 0x85, 0x3f, 0x4c, 0x64, 0x92, 0x45, 0xf1, 0x70, 0xa1, 0x01, - 0x7f, 0xf8, 0x44, 0x0e, 0x19, 0xc1, 0x7a, 0x7d, 0xc5, 0x8b, 0xfe, 0xe6, - 0xb5, 0x9f, 0xea, 0x1c, 0x58, 0xac, 0x44, 0x48, 0x93, 0x6e, 0x60, 0x2c, - 0x5f, 0xff, 0x18, 0x53, 0xc9, 0xd8, 0xb0, 0x7f, 0x78, 0x96, 0x2f, 0xff, - 0xfe, 0xe6, 0x8a, 0x62, 0x30, 0x3f, 0x3c, 0x33, 0xaf, 0x67, 0x62, 0xce, - 0x2c, 0x56, 0x91, 0x90, 0x4a, 0x35, 0x04, 0xc8, 0xfc, 0x44, 0x28, 0x6f, - 0xd2, 0xc5, 0xff, 0xf1, 0x30, 0x0c, 0xf6, 0x7c, 0xb3, 0xdf, 0x75, 0x8b, - 0xff, 0xfc, 0xc6, 0x99, 0xdd, 0xe7, 0x23, 0x79, 0x38, 0x43, 0xfc, 0xac, - 0x5f, 0x49, 0x6e, 0xdf, 0x45, 0xa7, 0x93, 0xef, 0xff, 0x9b, 0x4d, 0xfe, - 0xa1, 0x9e, 0x62, 0x0c, 0x0b, 0x14, 0xb1, 0x7f, 0x4b, 0x93, 0x68, 0xd5, - 0x8b, 0xbc, 0x61, 0xa6, 0xe7, 0xe1, 0x97, 0x8d, 0x36, 0x56, 0x2d, 0x05, - 0x8a, 0x73, 0x63, 0x10, 0xfd, 0xff, 0xd9, 0xd4, 0x0c, 0xc8, 0xbf, 0x24, - 0x6a, 0xc5, 0x4a, 0xa4, 0xc3, 0x61, 0x81, 0xb9, 0xcf, 0x50, 0x8a, 0xd3, - 0x01, 0xc8, 0x6f, 0xf6, 0x8b, 0x37, 0xc9, 0x8f, 0x58, 0xbf, 0xff, 0xef, - 0xe7, 0x46, 0x6d, 0x8e, 0x5e, 0xcd, 0xbd, 0xc2, 0x63, 0x56, 0x2f, 0xfd, - 0xee, 0x76, 0x7f, 0x4e, 0x14, 0x4b, 0x15, 0xf4, 0x55, 0x93, 0x55, 0xff, - 0xb5, 0xb6, 0x67, 0x06, 0x4d, 0xf5, 0x8b, 0xf6, 0x9f, 0x93, 0xd2, 0xc5, - 0x4a, 0x6d, 0x79, 0x0e, 0x17, 0x22, 0x63, 0xfb, 0xff, 0xf4, 0x38, 0x01, - 0x44, 0x66, 0x3e, 0x9c, 0xf2, 0x6a, 0xc5, 0xfd, 0xde, 0xc5, 0x07, 0xf7, - 0x16, 0x2f, 0x70, 0x3e, 0x2c, 0x56, 0xc7, 0xa8, 0x73, 0x5b, 0xa4, 0x0b, - 0x17, 0xe2, 0xf7, 0xf3, 0xb9, 0x62, 0xfd, 0x17, 0x1b, 0x46, 0xac, 0x5e, - 0x60, 0xb5, 0x27, 0xad, 0x85, 0x77, 0xe8, 0x9c, 0xa4, 0xeb, 0x17, 0xe9, - 0x7d, 0xa4, 0xd5, 0x8b, 0x1b, 0x27, 0xa3, 0xf2, 0x8b, 0xe3, 0x3a, 0x83, - 0xac, 0x51, 0x1e, 0x6f, 0x8a, 0x2f, 0xe7, 0xee, 0x68, 0x39, 0x2c, 0x5f, - 0xc6, 0xb4, 0x0a, 0x4e, 0xb1, 0x52, 0x7f, 0xd8, 0x42, 0xe5, 0xf7, 0xf1, - 0xfc, 0x6f, 0xc5, 0xdc, 0xb1, 0x7e, 0x3f, 0x0a, 0x74, 0xb1, 0x7f, 0xd1, - 0xe3, 0x11, 0x78, 0xe4, 0xeb, 0x15, 0x28, 0x98, 0xc3, 0x41, 0x14, 0x5f, - 0xfb, 0xcf, 0xa6, 0x21, 0xfe, 0x78, 0xb1, 0x50, 0x57, 0xf5, 0xd1, 0xfb, - 0xc2, 0xb6, 0x22, 0x3d, 0x36, 0xfe, 0x34, 0xe2, 0x86, 0x27, 0x8b, 0xaf, - 0x9f, 0x76, 0xd2, 0xc5, 0xe3, 0xb0, 0x4b, 0x16, 0xe4, 0x0f, 0x05, 0x88, - 0xef, 0xb3, 0xb3, 0x69, 0x62, 0xfe, 0x1e, 0x14, 0x3f, 0x8b, 0x15, 0x27, - 0xa2, 0xe4, 0x97, 0xff, 0xb1, 0xc2, 0x30, 0xb0, 0x05, 0x8d, 0x12, 0xc5, - 0xf3, 0xeb, 0x0d, 0x58, 0xb7, 0x0c, 0x3e, 0xd8, 0xe4, 0xab, 0xfe, 0xfb, - 0xea, 0x2f, 0xb6, 0x69, 0x62, 0xff, 0xff, 0xfe, 0x07, 0x0b, 0x1b, 0xa3, - 0x07, 0xf1, 0x18, 0x59, 0xd4, 0x30, 0x5b, 0x16, 0x37, 0x4b, 0x15, 0x88, - 0xf3, 0xdc, 0xb1, 0xce, 0xaf, 0xff, 0xb5, 0x8c, 0x11, 0x83, 0x29, 0xdc, - 0xe4, 0xeb, 0x17, 0xb3, 0x90, 0x58, 0xb9, 0xb7, 0x54, 0x93, 0x05, 0x8d, - 0x58, 0xaf, 0x9e, 0xab, 0x0e, 0x88, 0x96, 0xfd, 0xb3, 0x1f, 0x91, 0xcb, - 0x17, 0xfb, 0x86, 0x45, 0xcf, 0xc8, 0xd6, 0x2f, 0xf4, 0x82, 0x7b, 0xbf, - 0x9c, 0x58, 0xa8, 0x8f, 0xb4, 0x8d, 0xef, 0xff, 0xf7, 0xb9, 0x86, 0xbe, - 0x8c, 0x0f, 0xcf, 0xf7, 0x37, 0xee, 0xb1, 0x52, 0xb8, 0x39, 0xb3, 0xc6, - 0x47, 0x00, 0x69, 0x7e, 0xf0, 0xa6, 0x72, 0xe6, 0x84, 0xd0, 0x64, 0x57, - 0xfb, 0x7c, 0x26, 0x39, 0x1d, 0x62, 0xff, 0xff, 0x7b, 0x81, 0xf0, 0xcc, - 0x87, 0xe5, 0xf4, 0x03, 0xb4, 0x16, 0x2f, 0xf8, 0xba, 0x87, 0x3d, 0x3a, - 0x89, 0x62, 0xf1, 0x67, 0xd6, 0x2f, 0xfb, 0x71, 0x37, 0xf3, 0xcd, 0xf5, - 0x8a, 0x19, 0xeb, 0x74, 0x39, 0x58, 0x8b, 0x5f, 0x42, 0x4a, 0xff, 0xcd, - 0xd6, 0x3e, 0x9c, 0xf2, 0x6a, 0xc5, 0xe0, 0xe4, 0x96, 0x2f, 0x63, 0x81, - 0x62, 0xd8, 0xb1, 0x6c, 0x01, 0xad, 0xec, 0x39, 0x73, 0xec, 0xb1, 0x4b, - 0x0c, 0x5c, 0x5d, 0xac, 0x58, 0xb7, 0x46, 0x22, 0xec, 0x92, 0xb8, 0x80, - 0x21, 0xab, 0xd9, 0xd7, 0x96, 0x2a, 0x55, 0x67, 0xe1, 0x9b, 0xc6, 0x33, - 0xa2, 0x76, 0x87, 0xd4, 0x72, 0x25, 0xec, 0x16, 0x96, 0x2f, 0x49, 0x79, - 0x62, 0xd1, 0x2c, 0x5f, 0xe0, 0x3c, 0x3e, 0xe4, 0x05, 0x8b, 0xe1, 0x67, - 0x44, 0xb1, 0x5b, 0x1f, 0x4b, 0x89, 0x9c, 0xce, 0xc1, 0x2c, 0x5c, 0xe3, - 0x58, 0xa8, 0xf3, 0x55, 0xc1, 0x3b, 0xfd, 0xd4, 0x85, 0xc2, 0x14, 0x4b, - 0x17, 0x0e, 0x25, 0x8b, 0xfe, 0xd6, 0x0f, 0xf2, 0x11, 0xc4, 0xb1, 0x7f, - 0x7f, 0x06, 0xe5, 0xe5, 0x8b, 0x6c, 0xb1, 0x77, 0xf8, 0xb1, 0x46, 0x9a, - 0xb6, 0x13, 0xbf, 0x89, 0x82, 0xf6, 0x7d, 0x62, 0xfa, 0x3a, 0x75, 0x8b, - 0x15, 0x29, 0xea, 0x62, 0xce, 0x89, 0x0e, 0x6f, 0xf1, 0x9f, 0x1d, 0x84, - 0xb1, 0x1c, 0x42, 0x19, 0x75, 0xfb, 0xe2, 0x37, 0x36, 0x58, 0xbf, 0x61, - 0xce, 0xc7, 0x58, 0xb8, 0xe0, 0x58, 0xa3, 0x11, 0xda, 0x38, 0x41, 0x68, - 0xac, 0x05, 0x16, 0xfb, 0xab, 0x89, 0x69, 0x68, 0xd7, 0xf6, 0xa7, 0xc4, - 0xc0, 0x58, 0xad, 0x1e, 0xef, 0x71, 0x85, 0xfd, 0xd4, 0x0a, 0x73, 0x8b, - 0x17, 0xfe, 0x6c, 0xfb, 0x7d, 0xb3, 0xec, 0xb1, 0x7f, 0xa2, 0xcc, 0x34, - 0xd9, 0x89, 0x62, 0xff, 0xd8, 0xfb, 0xe7, 0xa4, 0xbd, 0xc5, 0x8b, 0xff, - 0x70, 0x5d, 0xc6, 0x70, 0xdd, 0x49, 0x2c, 0x51, 0x88, 0x83, 0x73, 0xea, - 0x31, 0x34, 0x7f, 0x97, 0x11, 0xe7, 0x74, 0x2e, 0xab, 0xa5, 0xdb, 0x57, - 0x9c, 0x03, 0x68, 0xdb, 0x2f, 0xef, 0x66, 0xd9, 0xa8, 0x96, 0x2f, 0xdf, - 0x30, 0x13, 0x1e, 0xb1, 0x7f, 0xfc, 0xfc, 0x33, 0xed, 0xcf, 0x4c, 0x5c, - 0xfe, 0x2c, 0x54, 0xa2, 0xbd, 0x8c, 0x00, 0x5b, 0x4b, 0x17, 0xf0, 0x9c, - 0x6e, 0x4e, 0xb1, 0x63, 0x5c, 0xdc, 0x1c, 0x32, 0xfc, 0xdc, 0xfb, 0x41, - 0x62, 0xf9, 0xa0, 0xe7, 0x58, 0xbf, 0x6e, 0xda, 0xcd, 0xd6, 0x2f, 0xf8, - 0x5d, 0x43, 0x86, 0x73, 0xdb, 0xac, 0x5f, 0xc5, 0xe8, 0x60, 0x38, 0xb1, - 0x78, 0xd6, 0xe1, 0x88, 0x97, 0xd1, 0x53, 0x1f, 0xd7, 0xd1, 0xf7, 0xe8, - 0x5c, 0xd6, 0x93, 0x72, 0xf9, 0x38, 0x51, 0x91, 0xdf, 0xbe, 0xcf, 0xb4, - 0xac, 0x5f, 0x37, 0xdb, 0xa5, 0x8a, 0x73, 0xcb, 0xec, 0x51, 0x7a, 0x13, - 0xd2, 0xc5, 0xfc, 0x6e, 0xb5, 0x9d, 0x71, 0x62, 0xff, 0xfc, 0x59, 0xd7, - 0x8c, 0xfb, 0x76, 0x30, 0x7f, 0x16, 0xcb, 0x17, 0xef, 0xce, 0xd8, 0x12, - 0xc5, 0xf9, 0xf3, 0xb3, 0x69, 0x62, 0xa5, 0x16, 0x03, 0x5d, 0xe1, 0x55, - 0xfd, 0xc8, 0x3f, 0x04, 0x75, 0x8a, 0x39, 0xef, 0x78, 0xbe, 0xfe, 0xce, - 0x41, 0xc1, 0x8b, 0x17, 0xa1, 0x9e, 0x58, 0xa8, 0x1e, 0x57, 0x8b, 0x6a, - 0x55, 0x48, 0xe4, 0x20, 0xfa, 0x23, 0x71, 0xe6, 0x8c, 0xfc, 0x4d, 0x97, - 0xfc, 0x59, 0xe1, 0x00, 0xed, 0x05, 0x8b, 0xff, 0xc3, 0x7c, 0x08, 0xce, - 0x4b, 0xec, 0xde, 0x58, 0xbf, 0xfe, 0xd8, 0xb3, 0xda, 0x73, 0x73, 0xef, - 0x91, 0x2c, 0x5f, 0x3f, 0x27, 0xa5, 0x8b, 0xfb, 0x63, 0x1a, 0x0e, 0x4b, - 0x15, 0xb2, 0x65, 0x1d, 0x1c, 0xe9, 0x33, 0xea, 0x24, 0x47, 0x7e, 0xeb, - 0x72, 0x9e, 0xcb, 0x17, 0xf0, 0x46, 0x44, 0x4e, 0x35, 0x8b, 0xff, 0x80, - 0x42, 0xe1, 0x67, 0xb8, 0xfc, 0x58, 0xac, 0x3f, 0x52, 0x31, 0xbf, 0x19, - 0xc2, 0x9d, 0x2c, 0x5f, 0x3f, 0x8a, 0x56, 0x2d, 0x87, 0x3c, 0xae, 0x14, - 0xdf, 0xcd, 0xa8, 0xa0, 0xff, 0x58, 0xbf, 0xc2, 0xdb, 0xef, 0xdb, 0x22, - 0x58, 0xbf, 0x83, 0xff, 0xe4, 0xb7, 0x58, 0xbe, 0x29, 0x3f, 0x16, 0x2f, - 0xb3, 0xec, 0x75, 0x8b, 0x9b, 0xae, 0x1f, 0xa7, 0x8c, 0x03, 0x22, 0xa9, - 0x55, 0x2b, 0x89, 0x8f, 0x0a, 0x1f, 0xb5, 0x31, 0x3f, 0x0b, 0xc5, 0x0a, - 0xcb, 0xfc, 0x3f, 0xce, 0x86, 0xe7, 0x58, 0xbb, 0x9c, 0x58, 0xb6, 0x2c, - 0x5f, 0xf3, 0x9a, 0xfe, 0x2c, 0xee, 0x33, 0x46, 0xa7, 0xb0, 0xc5, 0xff, - 0xec, 0xe7, 0xdf, 0xf9, 0xad, 0x67, 0xb8, 0xb1, 0x7f, 0x10, 0x30, 0xed, - 0xd2, 0xc5, 0xf7, 0xfe, 0xfc, 0x58, 0xa7, 0x3d, 0x16, 0x2e, 0xad, 0xd3, - 0x6c, 0x89, 0x74, 0x95, 0x3b, 0x42, 0x6e, 0xff, 0xff, 0x16, 0x6f, 0xef, - 0x4f, 0xb9, 0x11, 0x60, 0x46, 0x4f, 0x78, 0xb1, 0x7f, 0xed, 0xe4, 0xff, - 0xce, 0x63, 0x92, 0xc5, 0x4a, 0x29, 0xfe, 0xd3, 0x7f, 0xff, 0xe8, 0x4e, - 0xba, 0x87, 0x0c, 0xe0, 0xa7, 0xa2, 0x6f, 0x7d, 0xa2, 0x58, 0xbf, 0x6a, - 0x7b, 0x4e, 0x96, 0x2f, 0xff, 0xff, 0x61, 0x7d, 0xf3, 0x7f, 0xce, 0x9b, - 0x9f, 0x6e, 0xa1, 0xcf, 0x71, 0xd6, 0x2f, 0xa7, 0x7c, 0x3a, 0xc5, 0xfe, - 0x33, 0x39, 0xc7, 0xc0, 0x96, 0x2a, 0x23, 0xd8, 0xd1, 0x1d, 0xff, 0xff, - 0xf6, 0x38, 0xcc, 0xcf, 0xbe, 0xbe, 0xc6, 0x7f, 0x06, 0x58, 0xdd, 0x66, - 0xcb, 0x14, 0xe8, 0xa1, 0xf9, 0x1d, 0xff, 0xff, 0x60, 0xba, 0x34, 0x0d, - 0x17, 0x33, 0x58, 0x3f, 0xe0, 0xba, 0x58, 0xbf, 0x98, 0x8c, 0x1c, 0x92, - 0xc5, 0xed, 0xb7, 0xf2, 0xc5, 0x4a, 0xbf, 0x5c, 0x87, 0x6f, 0x44, 0x4e, - 0xe3, 0xf2, 0xae, 0x46, 0xe3, 0xe2, 0x21, 0x35, 0x86, 0x5b, 0x7f, 0xf9, - 0xfc, 0x26, 0xdb, 0x7f, 0xb8, 0xdc, 0x96, 0x2f, 0x78, 0xd7, 0x58, 0xae, - 0xfc, 0xfa, 0x49, 0x2e, 0xfb, 0x0f, 0x3b, 0xac, 0x5f, 0xdb, 0xbe, 0xd9, - 0xd7, 0x96, 0x2a, 0x07, 0xa8, 0x11, 0x1d, 0xa3, 0x96, 0x2f, 0xe0, 0x19, - 0x3b, 0xb0, 0x6b, 0x17, 0xfd, 0x38, 0x50, 0x32, 0x7b, 0x4a, 0xc5, 0x1a, - 0x88, 0x02, 0x15, 0xf1, 0x8d, 0xfb, 0x58, 0x36, 0x82, 0xc5, 0x4a, 0x3e, - 0xde, 0x14, 0x6c, 0x61, 0x7a, 0x75, 0x05, 0x8b, 0xff, 0xf8, 0x5d, 0x43, - 0x86, 0x49, 0x0f, 0xf3, 0x1d, 0x9a, 0x95, 0x8b, 0xf8, 0x51, 0x18, 0x76, - 0xf2, 0xc5, 0x69, 0x12, 0x3f, 0x60, 0xa3, 0x1d, 0xeb, 0x74, 0x68, 0x81, - 0xdf, 0x51, 0x59, 0x7a, 0xda, 0x3e, 0xc8, 0x47, 0xc0, 0x39, 0xdb, 0xbc, - 0x8e, 0xd4, 0xd9, 0x41, 0x9b, 0xcb, 0xed, 0xea, 0x51, 0x2b, 0xca, 0x82, - 0x8a, 0x77, 0x2b, 0x53, 0x9c, 0x07, 0x96, 0xa7, 0xf9, 0xe1, 0x80, 0x43, - 0xbc, 0xa7, 0x1a, 0x79, 0x38, 0x3d, 0xe9, 0xdc, 0xd1, 0x43, 0xcf, 0xb4, - 0x6e, 0xa1, 0x19, 0x77, 0x42, 0xba, 0xff, 0xfc, 0x5b, 0x99, 0xf9, 0x7d, - 0x39, 0xde, 0x3a, 0x4e, 0xb1, 0x7b, 0x93, 0xd2, 0xc5, 0xed, 0xb3, 0x65, - 0x8b, 0xf8, 0xbc, 0x02, 0x9d, 0x2c, 0x5f, 0xe6, 0x08, 0xc6, 0x1b, 0x6c, - 0xb1, 0x7f, 0xff, 0xfd, 0xee, 0x6c, 0xf8, 0x5e, 0x38, 0xa4, 0xbd, 0x9c, - 0x7c, 0x21, 0xc9, 0x2c, 0x5f, 0xfd, 0xee, 0x0f, 0xf3, 0x1c, 0x2f, 0xbe, - 0x96, 0x2b, 0x13, 0x26, 0xd1, 0x6b, 0x1b, 0x09, 0xea, 0xf4, 0x3a, 0xdd, - 0x62, 0xff, 0xc7, 0xd6, 0x74, 0x3c, 0x72, 0x35, 0x62, 0xf1, 0x38, 0xd6, - 0x2e, 0x60, 0x8c, 0x3d, 0xc8, 0x90, 0x2e, 0x80, 0x16, 0x2e, 0xd8, 0xeb, - 0x14, 0x61, 0xb1, 0x71, 0x8b, 0xff, 0xf1, 0x3e, 0xc6, 0x3e, 0x16, 0x6f, - 0xdd, 0xec, 0x3a, 0xc5, 0xe3, 0xce, 0xeb, 0x17, 0xba, 0xfe, 0x44, 0x7e, - 0xe0, 0x59, 0xbf, 0xff, 0x8e, 0xfd, 0x43, 0x85, 0x83, 0xfc, 0xc7, 0x66, - 0xa5, 0x62, 0xff, 0xfe, 0xcd, 0x98, 0xbd, 0xc9, 0xdc, 0xc3, 0x9d, 0xcb, - 0x75, 0x8b, 0xfa, 0x1c, 0x8a, 0x13, 0x12, 0xc5, 0x0d, 0x11, 0xfd, 0x2f, - 0x5f, 0xfe, 0xc1, 0xfd, 0xe2, 0x31, 0xff, 0x27, 0x95, 0x8b, 0xe6, 0x9e, - 0xa0, 0xb1, 0x61, 0x91, 0xf7, 0x71, 0x2e, 0xa5, 0x17, 0x2d, 0x09, 0x2b, - 0xe8, 0x14, 0x9d, 0x62, 0xf1, 0x49, 0xd6, 0x2f, 0xfb, 0xf9, 0xbc, 0xeb, - 0xa8, 0x70, 0xc3, 0x7d, 0x02, 0x2b, 0xff, 0x8c, 0x2c, 0xeb, 0x39, 0xf2, - 0xc3, 0x56, 0x2b, 0xa4, 0x4c, 0x44, 0xa5, 0x7f, 0x8c, 0xd6, 0x3f, 0xe4, - 0x6b, 0x15, 0x27, 0xb2, 0x44, 0xb6, 0x8d, 0x96, 0x2e, 0x98, 0xf5, 0x8a, - 0x95, 0xee, 0xe1, 0xac, 0xe0, 0xf1, 0xb1, 0xa2, 0xb9, 0xe6, 0x9f, 0x3e, - 0xc2, 0xd0, 0x98, 0x01, 0xa9, 0x47, 0x4c, 0x28, 0xd5, 0x7b, 0x10, 0x06, - 0x2f, 0x7d, 0x84, 0x6c, 0x7a, 0xc5, 0xff, 0xff, 0xfb, 0xef, 0xef, 0xe6, - 0xa7, 0xb1, 0x87, 0x17, 0x71, 0x99, 0xd4, 0x30, 0x44, 0x0e, 0x2c, 0x5b, - 0xce, 0x8b, 0x2e, 0x13, 0x5f, 0xff, 0x14, 0x5f, 0x97, 0xd3, 0x9d, 0xe3, - 0xa4, 0xeb, 0x17, 0x39, 0xd6, 0x2f, 0x3c, 0xee, 0xb1, 0x7f, 0xfd, 0xd4, - 0x09, 0xe2, 0x30, 0xb3, 0xdc, 0x7d, 0x2c, 0x53, 0xa3, 0x62, 0x25, 0x22, - 0x17, 0x08, 0x76, 0xff, 0x31, 0x60, 0xf1, 0xfe, 0xb1, 0x7f, 0x9e, 0x2f, - 0xb1, 0x4c, 0xac, 0x57, 0x47, 0xc6, 0x73, 0x1b, 0xff, 0xfd, 0xad, 0x60, - 0xcc, 0xea, 0x13, 0xb6, 0xb3, 0x9c, 0x9e, 0x96, 0x2f, 0xfc, 0x07, 0xcd, - 0x19, 0xda, 0x47, 0x1e, 0xb1, 0x47, 0x46, 0x70, 0x44, 0x7d, 0xcc, 0xd7, - 0x7e, 0x0b, 0x17, 0x03, 0x8b, 0x17, 0x0f, 0x16, 0x2f, 0xed, 0xcb, 0xac, - 0xd1, 0x90, 0x3c, 0x7e, 0x0c, 0x76, 0x18, 0xbf, 0xfc, 0x29, 0x2f, 0x70, - 0xc9, 0xe6, 0xa7, 0x8b, 0x17, 0xf9, 0xa1, 0x17, 0xdf, 0xaf, 0x2c, 0x5f, - 0xe8, 0x72, 0x4d, 0xf3, 0xec, 0xb1, 0x7f, 0x84, 0x5e, 0x9e, 0xcd, 0xf5, - 0x8b, 0xff, 0x30, 0x5e, 0xcf, 0xe1, 0x34, 0x16, 0x2a, 0x07, 0xe6, 0x46, - 0xb7, 0xfb, 0x0d, 0x32, 0x77, 0xc3, 0xac, 0x5f, 0xfe, 0xc1, 0x11, 0xbe, - 0xd4, 0xf4, 0x0e, 0x4a, 0xc5, 0x62, 0x20, 0xba, 0x36, 0xbf, 0x8f, 0x85, - 0xe8, 0xec, 0x58, 0xbf, 0x37, 0x0f, 0x24, 0xb1, 0x7c, 0x79, 0xcf, 0x2c, - 0x5e, 0x9d, 0xcc, 0xc3, 0xf9, 0x23, 0x08, 0xe2, 0x7b, 0xf4, 0x97, 0x8c, - 0x1a, 0xc5, 0xfd, 0x27, 0xcc, 0x23, 0x56, 0x2f, 0xde, 0x30, 0x1d, 0x01, - 0x62, 0x9d, 0x10, 0x5f, 0x29, 0x11, 0x6d, 0xff, 0xef, 0xbe, 0xff, 0xc3, - 0x38, 0x2f, 0xcc, 0x7a, 0xc5, 0xfc, 0x53, 0xd4, 0x1c, 0x96, 0x29, 0x62, - 0xff, 0x67, 0xcb, 0x3d, 0xf7, 0x58, 0xa1, 0x9f, 0x59, 0x16, 0xf8, 0x32, - 0xff, 0xbd, 0x30, 0xe4, 0x50, 0x9d, 0x96, 0x2d, 0x98, 0x99, 0x2f, 0x50, - 0xbb, 0xf1, 0x75, 0xff, 0xff, 0xb7, 0x18, 0xb6, 0x0c, 0x9b, 0xd2, 0x07, - 0x83, 0xf8, 0xa4, 0x0b, 0x17, 0xff, 0xfc, 0x2e, 0x7d, 0xa0, 0x67, 0x9c, - 0xc2, 0xc3, 0xe4, 0x96, 0xcb, 0x17, 0xff, 0xde, 0xfe, 0x00, 0xc3, 0xce, - 0x78, 0x78, 0x4b, 0x16, 0xd2, 0xc5, 0x82, 0x58, 0xbf, 0x98, 0x7a, 0xd0, - 0xb6, 0x58, 0xbf, 0x4e, 0x17, 0xa3, 0x96, 0x2d, 0x1a, 0x2c, 0x56, 0x22, - 0x58, 0xd1, 0x2d, 0xc4, 0xce, 0x61, 0xc2, 0xab, 0xef, 0x3e, 0xb1, 0x62, - 0xdd, 0x18, 0x7d, 0xb8, 0x97, 0x58, 0x9b, 0xe3, 0x46, 0xa7, 0x58, 0xa9, - 0xeb, 0x4d, 0xdc, 0x8f, 0x92, 0xff, 0xff, 0xff, 0xbe, 0x2e, 0x16, 0x0f, - 0x1f, 0xe6, 0x6f, 0xf7, 0xee, 0xf8, 0xb8, 0x59, 0xb3, 0x18, 0x69, 0xab, - 0x15, 0xb3, 0x20, 0x2c, 0x69, 0x7d, 0x1b, 0x45, 0x0a, 0x9d, 0x42, 0x8c, - 0xf0, 0x9c, 0xfc, 0x31, 0x4a, 0x35, 0x4f, 0x4a, 0xb5, 0xee, 0x37, 0xbf, - 0xff, 0x8b, 0x02, 0xcd, 0x8c, 0x8f, 0xc6, 0x34, 0xcd, 0x05, 0xa5, 0x8b, - 0xff, 0xfd, 0x81, 0x66, 0xc3, 0xf8, 0x8b, 0x72, 0xcf, 0x7d, 0xfa, 0x58, - 0xbf, 0xff, 0xfe, 0x87, 0x09, 0x8d, 0xfe, 0x7f, 0xa9, 0x30, 0xb0, 0x59, - 0xef, 0xe6, 0xd2, 0xb1, 0x7f, 0xff, 0xe1, 0x75, 0x0e, 0x19, 0x8e, 0x09, - 0x2c, 0xeb, 0xc3, 0xf8, 0x82, 0x58, 0xbf, 0xff, 0xfc, 0xf8, 0x7c, 0xfb, - 0xe1, 0xcc, 0x2c, 0xf7, 0xf2, 0x1f, 0x7c, 0x3a, 0xc5, 0xff, 0xff, 0xd0, - 0x7e, 0x16, 0x76, 0xfe, 0x45, 0xf9, 0x28, 0x8c, 0x6d, 0xdf, 0xb2, 0xc5, - 0xff, 0xe0, 0xba, 0x87, 0x0b, 0x3b, 0x7b, 0x58, 0x12, 0xc5, 0xff, 0xe7, - 0xc0, 0x8b, 0x39, 0x9f, 0xfb, 0xf1, 0x62, 0xd9, 0xd2, 0x62, 0x2c, 0xf1, - 0xe5, 0x0b, 0xff, 0xf9, 0xf0, 0x22, 0xcd, 0xb0, 0x5e, 0x26, 0x35, 0xb8, - 0xb1, 0x7f, 0xec, 0xd7, 0xe4, 0xc6, 0xf0, 0xa5, 0x62, 0xff, 0xee, 0x66, - 0xe6, 0x75, 0x0e, 0x13, 0xc4, 0xb1, 0x7f, 0xfb, 0x59, 0xee, 0x77, 0x7a, - 0x79, 0xf7, 0xc5, 0x8b, 0xff, 0x36, 0xb9, 0xe7, 0xcd, 0x8a, 0x56, 0x2f, - 0xc5, 0x9d, 0xbf, 0x9a, 0x44, 0x5f, 0x13, 0x6d, 0x3e, 0x4c, 0x50, 0x28, - 0x6a, 0x53, 0xa7, 0x05, 0xa8, 0xd4, 0xef, 0xff, 0xfb, 0x08, 0xd3, 0x35, - 0x3d, 0x9f, 0xdc, 0xc3, 0x5f, 0x4d, 0xd2, 0xc5, 0xff, 0xff, 0xfd, 0xec, - 0xf9, 0x67, 0x63, 0x33, 0x53, 0xe7, 0xdd, 0xc6, 0x64, 0xf8, 0xa7, 0xa8, - 0x2c, 0x56, 0xcb, 0xce, 0x3b, 0xb2, 0x74, 0xc9, 0xa7, 0xff, 0xb8, 0x94, - 0x70, 0xdc, 0x36, 0xf4, 0x7b, 0xa1, 0x94, 0xf7, 0x35, 0xd4, 0xb6, 0x04, - 0xef, 0x48, 0x61, 0x14, 0xf9, 0x35, 0xf9, 0xb9, 0xa6, 0xe2, 0xc5, 0xff, - 0xe7, 0x19, 0x87, 0x73, 0x24, 0x6d, 0x17, 0x16, 0x2f, 0xf7, 0xe7, 0x63, - 0x0b, 0x06, 0xb1, 0x7e, 0xf6, 0x44, 0x28, 0x96, 0x2a, 0x23, 0xe0, 0xee, - 0x35, 0xbf, 0x7d, 0xfd, 0x87, 0x58, 0xb4, 0x16, 0x2f, 0xfe, 0xfb, 0x90, - 0xc3, 0xdc, 0xb3, 0xf8, 0xb1, 0x7f, 0xe8, 0x7a, 0x60, 0x79, 0xc2, 0x1a, - 0xc5, 0xfe, 0xdb, 0x8f, 0xff, 0xce, 0xcb, 0x16, 0xce, 0x8f, 0xd1, 0xcf, - 0xaf, 0xef, 0x75, 0xbb, 0xfe, 0x25, 0x8a, 0x31, 0x37, 0x2e, 0xf4, 0x9a, - 0x05, 0x11, 0x09, 0x14, 0x2e, 0x78, 0x4f, 0x52, 0xaa, 0x0b, 0x69, 0x43, - 0xf7, 0xf8, 0xd2, 0xce, 0xc5, 0x9c, 0x58, 0xa8, 0x2b, 0x0b, 0xd4, 0xaa, - 0xa2, 0x2c, 0xbf, 0x73, 0x92, 0x5b, 0xac, 0x5f, 0xff, 0x14, 0x46, 0x7f, - 0x77, 0xe6, 0x0f, 0x6c, 0x09, 0x62, 0xb0, 0xff, 0x98, 0xa6, 0xf7, 0xb3, - 0x8b, 0x16, 0xdb, 0xe6, 0xf7, 0xc4, 0x17, 0xe8, 0x4f, 0x50, 0xe2, 0xc5, - 0xff, 0xff, 0xff, 0xb0, 0x8d, 0x31, 0xfe, 0x28, 0xc8, 0x9f, 0xd2, 0x72, - 0x63, 0x7e, 0xf1, 0x99, 0xfe, 0x81, 0x23, 0x48, 0xbf, 0xff, 0xcf, 0xaf, - 0xe7, 0x4d, 0xd1, 0x87, 0x21, 0x78, 0xce, 0xdc, 0x58, 0xbf, 0xff, 0xf3, - 0x84, 0x31, 0x68, 0xc1, 0x4e, 0xdc, 0xdf, 0xe2, 0xff, 0x4c, 0x12, 0xc5, - 0xff, 0xfd, 0x9d, 0xa4, 0x8c, 0xe3, 0xe9, 0x80, 0xc5, 0x14, 0xac, 0x56, - 0xe8, 0xd1, 0xfb, 0xad, 0xff, 0x16, 0x08, 0x23, 0x27, 0xb4, 0x7a, 0xc5, - 0xb6, 0xe9, 0x53, 0x53, 0x95, 0x1e, 0x14, 0x7c, 0x8c, 0xe7, 0xb8, 0x92, - 0xb1, 0x57, 0x98, 0xa5, 0x49, 0x5f, 0xff, 0xd8, 0xe0, 0xe1, 0x81, 0xf9, - 0xf8, 0x59, 0xd9, 0xc6, 0xb1, 0x7f, 0xec, 0x8b, 0xa8, 0x71, 0xce, 0xd1, - 0x2c, 0x5b, 0xbb, 0x48, 0xa0, 0xe2, 0xf5, 0xf8, 0xb3, 0xdf, 0x75, 0x8b, - 0xff, 0x7d, 0xf3, 0x79, 0xf7, 0xdf, 0x16, 0x2b, 0x11, 0x22, 0x69, 0x67, - 0x71, 0x3d, 0xc3, 0xc5, 0x8a, 0x96, 0xef, 0xaf, 0x23, 0x00, 0x78, 0xdb, - 0xbf, 0x58, 0x51, 0x34, 0xb4, 0xf2, 0x97, 0xcc, 0x28, 0xd7, 0x23, 0x8c, - 0xee, 0xcd, 0x2c, 0x5b, 0xb9, 0x62, 0xd1, 0xa2, 0xc5, 0xe9, 0xfe, 0x2c, - 0x58, 0xeb, 0x17, 0xf9, 0xa1, 0x87, 0x62, 0x02, 0xc5, 0xf6, 0x7e, 0x62, - 0x58, 0xa8, 0xd0, 0xf9, 0xfe, 0x24, 0xc6, 0x57, 0x73, 0x16, 0x2e, 0x3e, - 0xe6, 0x1e, 0x53, 0x99, 0xdf, 0xb4, 0xfd, 0x43, 0x8b, 0x17, 0xff, 0xf0, - 0xfe, 0xf8, 0x7c, 0xdf, 0xf9, 0xd4, 0x09, 0xe2, 0x58, 0xbf, 0xe9, 0x7d, - 0x3c, 0x46, 0x7b, 0x8b, 0x17, 0xfe, 0x2c, 0x33, 0xd1, 0x14, 0x9c, 0xcc, - 0x44, 0xc7, 0xd7, 0x6d, 0xb0, 0xd3, 0x19, 0xd4, 0x30, 0xad, 0x1e, 0xb1, - 0x7e, 0xfb, 0x9c, 0xa5, 0x62, 0xf8, 0x44, 0x0e, 0x2c, 0x50, 0x0f, 0x2b, - 0xc4, 0xf7, 0xff, 0xee, 0x3e, 0x10, 0x0c, 0x2c, 0xec, 0x59, 0xce, 0xcb, - 0x17, 0xfc, 0xf8, 0x40, 0x33, 0xbe, 0xb1, 0xbc, 0x6e, 0xb1, 0x7d, 0xb9, - 0x67, 0x63, 0x11, 0x49, 0xc5, 0x8b, 0xfe, 0x35, 0xbd, 0xc8, 0x89, 0xc2, - 0x58, 0xbe, 0x63, 0xbf, 0x16, 0x2f, 0xdf, 0x63, 0xbf, 0x16, 0x28, 0xd4, - 0x43, 0x7c, 0xf3, 0x84, 0x55, 0xa4, 0x7a, 0x14, 0x30, 0xef, 0xff, 0x7c, - 0x58, 0x46, 0x99, 0xee, 0xa1, 0x84, 0xb1, 0x7f, 0xb1, 0x8e, 0x64, 0x74, - 0x9d, 0x62, 0xff, 0xf4, 0x27, 0x9f, 0x16, 0xb3, 0xde, 0x73, 0xac, 0x50, - 0xd1, 0x9f, 0xba, 0x6f, 0x46, 0xf7, 0xfe, 0x2c, 0x11, 0xba, 0x79, 0x3e, - 0x2c, 0x5f, 0xc2, 0x2c, 0xd8, 0x5d, 0x2c, 0x5f, 0xff, 0x49, 0x85, 0x83, - 0xfb, 0x9a, 0x39, 0x34, 0x0b, 0x15, 0xa4, 0x41, 0x08, 0xc2, 0xb1, 0x50, - 0x5e, 0xa1, 0xec, 0x73, 0x22, 0x86, 0x05, 0xff, 0xd3, 0x9c, 0xf7, 0x24, - 0xd3, 0x00, 0x12, 0xc5, 0xfe, 0xd1, 0xbe, 0x36, 0x4a, 0x25, 0x8b, 0xff, - 0xde, 0xfe, 0x77, 0x7a, 0x2c, 0x8f, 0x62, 0x02, 0xc5, 0xfe, 0x93, 0xb1, - 0x75, 0x09, 0x58, 0xac, 0x45, 0xd9, 0x1b, 0xf9, 0x46, 0xff, 0xfb, 0x27, - 0xa3, 0x3b, 0x78, 0xcd, 0x4f, 0xe6, 0x25, 0x8b, 0xff, 0x38, 0x0c, 0x2c, - 0xec, 0xfa, 0x65, 0x8b, 0xff, 0xda, 0x33, 0xf2, 0xfe, 0xe4, 0xed, 0x9c, - 0x58, 0xac, 0x44, 0x60, 0x90, 0x2f, 0xfe, 0x07, 0xe5, 0xfd, 0xc7, 0x2e, - 0xa0, 0xb1, 0x4e, 0x9b, 0xbf, 0xcb, 0xbd, 0x0e, 0x21, 0x11, 0x5f, 0x04, - 0x67, 0x22, 0x58, 0xb7, 0x96, 0x2a, 0x4d, 0xcb, 0x13, 0xdf, 0xf8, 0xb6, - 0x2c, 0xed, 0xc1, 0x4f, 0x4b, 0x17, 0xfd, 0xf9, 0xe8, 0xce, 0xf9, 0xd8, - 0x0e, 0xb1, 0x7d, 0x9d, 0xa4, 0x96, 0x2f, 0xba, 0x83, 0xc7, 0x2c, 0x57, - 0xcf, 0x2b, 0xc4, 0x74, 0x34, 0x58, 0x72, 0x11, 0xd5, 0x29, 0x8d, 0x6d, - 0x0f, 0x2a, 0x96, 0x47, 0x94, 0x0c, 0x31, 0x7d, 0xe5, 0xe2, 0x92, 0x3f, - 0x25, 0x3d, 0x79, 0xec, 0x51, 0x9c, 0xdf, 0xbb, 0x77, 0x7b, 0x3e, 0xb1, - 0x62, 0x58, 0xb6, 0xeb, 0x17, 0xfe, 0xce, 0x0a, 0x4d, 0xe4, 0xea, 0x25, - 0x8a, 0x74, 0x49, 0xe8, 0xbb, 0xb0, 0x88, 0x42, 0x77, 0xff, 0xc2, 0x62, - 0x33, 0xdf, 0x9f, 0x73, 0xed, 0x05, 0x8b, 0x98, 0x6b, 0x17, 0xf1, 0x64, - 0x50, 0x17, 0x72, 0xc5, 0xf4, 0x05, 0xb7, 0x96, 0x2d, 0xa8, 0x1f, 0x71, - 0xa2, 0xfd, 0x19, 0x5f, 0xff, 0xff, 0xff, 0xbd, 0xcf, 0xe3, 0x8f, 0xf9, - 0xbb, 0xeb, 0x4e, 0x13, 0xe1, 0x1b, 0xcc, 0x1f, 0xc5, 0xb1, 0x8d, 0x16, - 0x32, 0xc5, 0xcd, 0xba, 0xc5, 0xfb, 0x59, 0x1c, 0xe0, 0x58, 0xbf, 0xdb, - 0xfd, 0xfe, 0x42, 0xd9, 0x62, 0xfd, 0x3d, 0x03, 0x52, 0xb1, 0x50, 0x3d, - 0xff, 0x1b, 0x56, 0xc8, 0xac, 0x28, 0x45, 0x5e, 0xf6, 0x77, 0xeb, 0x17, - 0xd0, 0x29, 0x3a, 0xc5, 0x18, 0x9f, 0x27, 0x7b, 0x0b, 0x49, 0x86, 0x26, - 0x14, 0x08, 0x8a, 0xe0, 0x7d, 0x62, 0x96, 0x2f, 0x39, 0x62, 0xc5, 0xb9, - 0x86, 0x9e, 0x20, 0xcb, 0xcf, 0x3c, 0x58, 0xbf, 0x78, 0x01, 0x94, 0x16, - 0x2f, 0x07, 0x9c, 0x58, 0xb4, 0xe1, 0xe4, 0x1a, 0x55, 0x7f, 0xf1, 0xcc, - 0x2c, 0xff, 0x8b, 0x1a, 0x25, 0x8b, 0xb3, 0xeb, 0x15, 0x29, 0xa6, 0xe1, - 0xff, 0xc9, 0xc9, 0x90, 0x44, 0xf1, 0xc8, 0xb6, 0x95, 0x8b, 0xff, 0xba, - 0x86, 0x9c, 0xed, 0x31, 0x4c, 0x4b, 0x17, 0xff, 0xf7, 0x30, 0x7a, 0x90, - 0x8c, 0xfb, 0x3f, 0x3f, 0x80, 0x58, 0xa3, 0x51, 0x6b, 0x10, 0x89, 0x23, - 0xdd, 0x83, 0x58, 0xa3, 0x1b, 0x27, 0x6e, 0xf0, 0x5f, 0xbd, 0x15, 0x91, - 0x7d, 0xa1, 0x9b, 0x0a, 0x51, 0xd6, 0x46, 0x31, 0xb9, 0xfb, 0x42, 0xff, - 0x92, 0x86, 0xfd, 0x1d, 0x30, 0xa3, 0x0d, 0xec, 0x63, 0x7d, 0xc2, 0xce, - 0xcb, 0x17, 0xc2, 0x86, 0x71, 0x62, 0xf3, 0xc8, 0xd6, 0x28, 0x07, 0xc6, - 0x44, 0x81, 0x11, 0xde, 0x17, 0xb8, 0xb1, 0x7e, 0xee, 0xfe, 0x08, 0xeb, - 0x14, 0x47, 0x94, 0x21, 0xeb, 0xf3, 0xfb, 0x98, 0x05, 0x8b, 0xdd, 0x9f, - 0xb2, 0xc5, 0xf1, 0xf8, 0xd0, 0x58, 0xb7, 0xf0, 0xf1, 0x04, 0x43, 0x7f, - 0xfd, 0x9a, 0xe9, 0xa2, 0x33, 0xef, 0xa2, 0xcd, 0x96, 0x2f, 0xff, 0xf7, - 0xbf, 0x31, 0x18, 0x59, 0xf7, 0xf7, 0x05, 0xb8, 0xa5, 0x62, 0x8d, 0x45, - 0xbb, 0x29, 0xdc, 0x28, 0xe5, 0x8a, 0x23, 0x7c, 0x11, 0x1d, 0xd8, 0x05, - 0x8b, 0xff, 0x88, 0x05, 0x8f, 0x17, 0xe4, 0x8d, 0x58, 0xa7, 0x3d, 0xb6, - 0x17, 0xbc, 0x42, 0x3a, 0xc5, 0xfb, 0x9e, 0x79, 0xe9, 0x62, 0xff, 0xa7, - 0xf8, 0x31, 0x44, 0xc4, 0xb1, 0x50, 0x3e, 0x2e, 0x14, 0xdd, 0x9d, 0x96, - 0x2f, 0xff, 0xf9, 0xa2, 0x33, 0x9c, 0xcf, 0xeb, 0x58, 0x11, 0x60, 0x4c, - 0x05, 0x8b, 0xf4, 0x97, 0xda, 0x0b, 0x17, 0xfd, 0xec, 0xda, 0x78, 0xfa, - 0xc5, 0x8b, 0xd2, 0x39, 0x58, 0xa1, 0x9f, 0xe7, 0x44, 0xe7, 0x39, 0xa5, - 0x8a, 0x58, 0xbf, 0xef, 0x66, 0xd3, 0xc7, 0xd6, 0x2c, 0x5e, 0x91, 0xca, - 0xc5, 0xee, 0x34, 0x46, 0x22, 0x76, 0x4c, 0x30, 0x33, 0xa0, 0xc3, 0x9c, - 0xdb, 0x09, 0x3d, 0xff, 0x47, 0x07, 0x7d, 0x1a, 0x77, 0xd6, 0x36, 0x8d, - 0x16, 0x2f, 0x9d, 0x88, 0x6b, 0x16, 0x08, 0xc3, 0xdc, 0x19, 0xdd, 0xfb, - 0x1b, 0xa8, 0x71, 0x62, 0xff, 0xf6, 0x86, 0x19, 0x19, 0xe7, 0xdc, 0x9f, - 0x65, 0x8b, 0xf4, 0x5e, 0xc2, 0xf2, 0xc5, 0x61, 0xfb, 0xb2, 0x75, 0x01, - 0x18, 0x01, 0x42, 0x82, 0xa0, 0x9c, 0xeb, 0xc2, 0x2b, 0x90, 0xea, 0xbe, - 0xdf, 0xef, 0xba, 0xc5, 0xf0, 0xbf, 0x27, 0x58, 0xbf, 0xfe, 0x16, 0xb5, - 0x25, 0x86, 0xbf, 0xff, 0x81, 0xac, 0x5f, 0xfd, 0x08, 0x31, 0x6d, 0x07, - 0xde, 0x4e, 0xb1, 0x52, 0x8d, 0xfc, 0x25, 0xd1, 0x1b, 0x28, 0xde, 0xee, - 0xe7, 0x4b, 0x17, 0xa4, 0x44, 0xb1, 0x58, 0x6f, 0xbe, 0x45, 0x7c, 0x26, - 0xeb, 0xcb, 0x17, 0xfa, 0x77, 0xc3, 0xe9, 0xb4, 0xb1, 0x4b, 0x16, 0x23, - 0x4f, 0x03, 0xc6, 0x97, 0xd9, 0x81, 0x77, 0xeb, 0x17, 0xff, 0xff, 0x1b, - 0x9a, 0xd3, 0x9c, 0xc8, 0xa0, 0x23, 0xf5, 0x0e, 0x72, 0x75, 0xba, 0xc5, - 0xdf, 0x65, 0x8b, 0x33, 0xa2, 0x47, 0xb3, 0xd5, 0xf3, 0x9b, 0x27, 0x58, - 0xbf, 0xa4, 0xbd, 0xfc, 0x1a, 0xc5, 0x49, 0xe8, 0x70, 0x8e, 0xf8, 0x12, - 0x39, 0x58, 0xbc, 0x21, 0xca, 0xc5, 0xf3, 0x1d, 0xfc, 0xb1, 0x7f, 0xfc, - 0xe3, 0x76, 0xf3, 0xb7, 0x8c, 0xe3, 0xc4, 0xb1, 0x52, 0xcb, 0x35, 0xd9, - 0xe6, 0x04, 0x23, 0x6c, 0xc8, 0xc7, 0x0d, 0x7c, 0xdc, 0x83, 0xa7, 0xf7, - 0x22, 0x8a, 0x5c, 0xae, 0xa3, 0x19, 0x3b, 0xc7, 0xc8, 0x19, 0x90, 0x05, - 0x05, 0x0b, 0x9e, 0x3c, 0xf8, 0x87, 0xb1, 0x10, 0x43, 0xb1, 0xc4, 0x56, - 0xee, 0x58, 0xb0, 0x4b, 0x17, 0xb6, 0x9d, 0x96, 0x29, 0x62, 0xfe, 0xc3, - 0x8f, 0xf9, 0xc5, 0x8b, 0xf6, 0xc6, 0x6e, 0xfb, 0x2c, 0x5f, 0xfb, 0xe5, - 0x9d, 0x7b, 0xf8, 0x2d, 0xd6, 0x2f, 0xee, 0x6f, 0xbb, 0x11, 0xab, 0x15, - 0x1a, 0x91, 0xb3, 0xb0, 0x66, 0x8b, 0x98, 0xb7, 0xc8, 0x37, 0xf8, 0x8c, - 0xed, 0xd4, 0x39, 0x12, 0xc5, 0xff, 0xdd, 0x9b, 0x46, 0x71, 0xfd, 0x25, - 0xba, 0xc5, 0xfd, 0xf7, 0xc2, 0xce, 0xcb, 0x16, 0x86, 0x1f, 0xb7, 0x12, - 0x2f, 0xff, 0xf0, 0xff, 0x9e, 0xf3, 0x16, 0xf8, 0xfa, 0x73, 0xc9, 0xab, - 0x16, 0xe9, 0x62, 0xdd, 0x96, 0x2b, 0x63, 0x4f, 0xa1, 0x3b, 0xf7, 0xda, - 0x3e, 0x40, 0xb1, 0x43, 0x4e, 0xb3, 0xa8, 0x58, 0x39, 0x3b, 0x42, 0x23, - 0xb8, 0x8a, 0xfc, 0x60, 0x7b, 0x4e, 0xcb, 0x17, 0xe2, 0xcf, 0xb7, 0x96, - 0x2a, 0x07, 0xa9, 0x11, 0x6d, 0xfc, 0x6b, 0xf5, 0xc1, 0x71, 0x62, 0xf7, - 0x7f, 0x1c, 0xeb, 0x15, 0xa3, 0xf9, 0x22, 0x31, 0x18, 0xdf, 0xff, 0x7c, - 0x5d, 0xde, 0x9e, 0x78, 0x4c, 0x1c, 0xe9, 0x62, 0xfc, 0x59, 0xb6, 0xa5, - 0x62, 0xe2, 0x18, 0xcf, 0xf7, 0x8a, 0xb7, 0xc3, 0x32, 0x63, 0xd6, 0x2a, - 0x57, 0x07, 0xf2, 0x3f, 0xc7, 0x8c, 0x90, 0x50, 0xab, 0x0c, 0xb6, 0xff, - 0xfd, 0x0e, 0x7a, 0x76, 0x17, 0x5c, 0x13, 0x94, 0x9d, 0x62, 0xf8, 0xce, - 0xd8, 0x35, 0x8a, 0xe8, 0xff, 0xbc, 0xb1, 0x7f, 0xa4, 0xc2, 0xce, 0xd9, - 0xf5, 0x8b, 0x3a, 0xc5, 0x2c, 0x5f, 0xf0, 0x88, 0xc8, 0x9f, 0x61, 0x44, - 0xb1, 0x7f, 0x60, 0xe2, 0x84, 0xc7, 0xac, 0x5f, 0xff, 0xfa, 0x19, 0xe2, - 0xcf, 0x73, 0xf8, 0x69, 0x85, 0x86, 0x81, 0x86, 0xb1, 0x76, 0x6c, 0xb1, - 0x5d, 0x22, 0x1b, 0x8d, 0xd7, 0xff, 0x78, 0xd9, 0xea, 0x1c, 0xea, 0x12, - 0x6a, 0xc5, 0x8e, 0xb1, 0x7f, 0x1c, 0x98, 0xdf, 0xb9, 0x87, 0xb9, 0xb2, - 0x55, 0xff, 0x1f, 0x8d, 0x17, 0x77, 0xf3, 0x65, 0x8a, 0x94, 0x42, 0xe2, - 0x35, 0x46, 0xea, 0x8a, 0x36, 0x0c, 0xd1, 0xf7, 0xe1, 0x71, 0xe8, 0xc1, - 0x6f, 0xf8, 0xc2, 0xcf, 0x73, 0xf8, 0x6a, 0xc5, 0xf4, 0x5f, 0x7e, 0x2c, - 0x56, 0xc7, 0xbf, 0xe3, 0xbb, 0xb0, 0x96, 0x2f, 0x42, 0x40, 0xb1, 0x43, - 0x36, 0x78, 0x2d, 0x7d, 0xc1, 0xb0, 0x16, 0x2f, 0xe7, 0xd3, 0x9e, 0x4d, - 0x58, 0xbf, 0xd9, 0xff, 0xcf, 0x4d, 0x1e, 0xb1, 0x77, 0x0c, 0xc3, 0xe5, - 0xe1, 0x75, 0x74, 0x8b, 0x60, 0x42, 0x22, 0xb4, 0x8f, 0xf2, 0x86, 0xb5, - 0xf0, 0x39, 0x1f, 0xba, 0xc5, 0x4a, 0x74, 0x8f, 0x1a, 0xa8, 0x89, 0xef, - 0xdb, 0xfe, 0x75, 0x12, 0xc5, 0xfd, 0xac, 0xe3, 0x31, 0xd6, 0x2e, 0xf3, - 0xac, 0x57, 0xcf, 0xbd, 0x8a, 0xf8, 0x5b, 0x7e, 0x06, 0x78, 0x3d, 0x96, - 0x2f, 0xf1, 0x9f, 0xfc, 0xf0, 0x5c, 0x58, 0xbf, 0xff, 0xbf, 0x3d, 0x19, - 0x13, 0xfa, 0x4e, 0x4c, 0x6f, 0xdd, 0x62, 0xff, 0x16, 0x05, 0xdd, 0xec, - 0xfa, 0xc5, 0xff, 0xff, 0xff, 0x3e, 0x7b, 0x77, 0xf1, 0x61, 0xbf, 0x6f, - 0x66, 0xc6, 0x64, 0x5d, 0x43, 0x9e, 0xfe, 0x74, 0xb1, 0x7f, 0x73, 0x3f, - 0xe7, 0x35, 0x62, 0xff, 0xb9, 0xf1, 0x44, 0x60, 0x51, 0xfd, 0x2c, 0x5c, - 0x23, 0x56, 0x2f, 0xff, 0xc2, 0xea, 0x1c, 0xea, 0x0d, 0xd1, 0x83, 0xfb, - 0x9d, 0x62, 0xfd, 0x8e, 0x58, 0x6a, 0xc5, 0xf7, 0xb3, 0xe6, 0x69, 0x10, - 0x7f, 0x5c, 0xa1, 0xaa, 0x78, 0x89, 0x7b, 0x46, 0xfc, 0x84, 0xd7, 0x8b, - 0xe3, 0x90, 0xfb, 0xa1, 0x39, 0x51, 0x2b, 0x25, 0x0a, 0x55, 0x75, 0xfb, - 0x99, 0xe0, 0xf6, 0x58, 0xb7, 0x96, 0x2d, 0xc5, 0x8b, 0xbe, 0x61, 0xa6, - 0x93, 0xa1, 0x2b, 0x82, 0xf4, 0x9f, 0xfe, 0x27, 0xde, 0xda, 0x06, 0xac, - 0x54, 0xae, 0x25, 0x64, 0xb5, 0x06, 0x85, 0x68, 0x8b, 0x6a, 0x36, 0x6c, - 0x1b, 0xfb, 0xea, 0x2b, 0x22, 0x70, 0x9d, 0x17, 0xc8, 0x6d, 0x1a, 0x47, - 0xb9, 0xab, 0xca, 0x39, 0xfc, 0xa6, 0x06, 0x85, 0x21, 0x4e, 0x3c, 0x5f, - 0xdd, 0x43, 0x86, 0x49, 0x2c, 0x5f, 0x84, 0x43, 0xce, 0x2c, 0x5f, 0xf9, - 0xb9, 0x9b, 0x37, 0xb6, 0xc0, 0x96, 0x2f, 0xec, 0xdc, 0xc0, 0x4c, 0x4b, - 0x15, 0x03, 0xf2, 0xfa, 0x0d, 0xff, 0xfc, 0x42, 0x68, 0xf3, 0x25, 0xc0, - 0xf0, 0xfb, 0x90, 0x16, 0x2f, 0xfb, 0x3e, 0x60, 0x6d, 0x1f, 0xfc, 0x58, - 0xbf, 0xbf, 0x9b, 0xc2, 0x4e, 0xb1, 0x7f, 0xbf, 0x90, 0x62, 0xce, 0x96, - 0x2b, 0x0f, 0x8b, 0xc5, 0xf7, 0xff, 0xfe, 0x84, 0xed, 0xd4, 0x38, 0xe6, - 0x99, 0xcc, 0xdd, 0xce, 0x2d, 0x6c, 0xb1, 0x7f, 0xed, 0xdc, 0x66, 0x67, - 0x89, 0xfa, 0x58, 0xbd, 0xed, 0xc6, 0xb1, 0x7d, 0xde, 0x94, 0xc1, 0x62, - 0xff, 0x60, 0x46, 0x7d, 0xf0, 0xeb, 0x17, 0xff, 0xdb, 0x63, 0x97, 0x8b, - 0x3b, 0x19, 0xc0, 0x89, 0x62, 0xe6, 0x01, 0x88, 0xce, 0x8d, 0x87, 0xf6, - 0x27, 0xe1, 0xad, 0x74, 0x9e, 0x93, 0xba, 0x14, 0x61, 0xf7, 0xff, 0xb7, - 0x7f, 0xfd, 0xb8, 0x58, 0x01, 0x71, 0x62, 0xff, 0xe7, 0xff, 0xdb, 0x85, - 0x80, 0x17, 0x16, 0x2f, 0xf8, 0x88, 0x4c, 0x0f, 0x30, 0x16, 0x2f, 0xcf, - 0xee, 0x61, 0xa6, 0x23, 0x1f, 0x74, 0xb7, 0x44, 0xbf, 0xbf, 0x85, 0xd4, - 0x9a, 0xb1, 0x7f, 0x31, 0x78, 0x5a, 0xd9, 0x62, 0xa5, 0x76, 0x17, 0x63, - 0x07, 0x84, 0xd7, 0xc8, 0x80, 0xba, 0x50, 0xa0, 0xf4, 0x7e, 0x7d, 0xa1, - 0xfa, 0x12, 0x70, 0x65, 0xf7, 0x75, 0xe5, 0x8b, 0x77, 0x2c, 0x51, 0x86, - 0xb8, 0x63, 0x36, 0x89, 0x62, 0xff, 0x8f, 0xe2, 0x9d, 0x3f, 0xb8, 0xb1, - 0x4e, 0x79, 0x8c, 0x27, 0x7f, 0xf8, 0xde, 0x6f, 0xf1, 0x6c, 0x58, 0x16, - 0x6c, 0xb1, 0x58, 0x7e, 0x0e, 0x41, 0x7f, 0xd9, 0x11, 0x9c, 0x9f, 0xb4, - 0x7a, 0xc5, 0xff, 0xff, 0xf4, 0xf5, 0xac, 0xf7, 0x9c, 0xfc, 0xfe, 0x6d, - 0x9a, 0xfc, 0x8d, 0xe7, 0xb9, 0x62, 0x9d, 0x17, 0xff, 0x3e, 0xbf, 0xcd, - 0xd7, 0xf3, 0xc0, 0x65, 0x8b, 0xb2, 0x25, 0x8b, 0xff, 0xfb, 0x3c, 0x67, - 0xf3, 0xf8, 0x22, 0xdc, 0xcc, 0x71, 0xac, 0x56, 0x22, 0xa5, 0xcd, 0x04, - 0x31, 0x7f, 0xe9, 0xf9, 0x9a, 0xcd, 0xb1, 0x8e, 0xb1, 0x79, 0xca, 0x25, - 0x8b, 0xfe, 0x29, 0x07, 0x50, 0xe4, 0x84, 0xb1, 0x71, 0xb1, 0x2c, 0x5f, - 0x7e, 0x7a, 0x32, 0x23, 0xd5, 0xee, 0x3b, 0xbf, 0xf6, 0x11, 0x85, 0x9f, - 0xfb, 0x0d, 0x62, 0xbc, 0x7f, 0xa2, 0x3f, 0xac, 0x4c, 0x47, 0x90, 0xef, - 0xbf, 0xd9, 0xb1, 0x91, 0x6c, 0x0d, 0x2c, 0x54, 0x0f, 0x87, 0xc5, 0x17, - 0xfe, 0xf1, 0xb2, 0x51, 0x1a, 0x29, 0x89, 0x62, 0xed, 0x4a, 0xc5, 0xed, - 0x39, 0xd6, 0x2a, 0x4d, 0xa0, 0x85, 0xea, 0x24, 0x4b, 0x93, 0xbd, 0xff, - 0xe6, 0x8f, 0x30, 0x7f, 0x93, 0x22, 0x26, 0x09, 0x62, 0xff, 0xfe, 0x19, - 0x9c, 0x78, 0xe9, 0x20, 0x7f, 0x0b, 0x1f, 0xeb, 0x17, 0xff, 0x9e, 0x3a, - 0x48, 0x1f, 0xc2, 0xc7, 0xfa, 0xc5, 0xec, 0x39, 0x84, 0x8a, 0x7e, 0x2e, - 0xd4, 0x13, 0x2c, 0x28, 0x7c, 0x5b, 0x8b, 0x17, 0xf9, 0x8d, 0xc1, 0xfc, - 0x5d, 0x2c, 0x54, 0x9e, 0x41, 0x09, 0x5f, 0xfa, 0x7a, 0x33, 0x92, 0xfb, - 0x37, 0x96, 0x2f, 0xf6, 0x4f, 0x51, 0x14, 0x9d, 0x62, 0xb0, 0xfd, 0x7a, - 0x41, 0xb8, 0x46, 0xac, 0x5f, 0x16, 0x0b, 0x65, 0x8a, 0xf9, 0xbc, 0x61, - 0x9b, 0xa7, 0x75, 0x8b, 0x84, 0x6a, 0xc5, 0xf7, 0x24, 0x1c, 0x58, 0xb8, - 0x51, 0xeb, 0x17, 0xe2, 0xce, 0xa1, 0xc5, 0x8b, 0xe3, 0xe7, 0xb8, 0x62, - 0x2e, 0x37, 0x20, 0xf8, 0xc7, 0x06, 0x63, 0x88, 0xfb, 0x86, 0xef, 0xff, - 0xb6, 0xc1, 0x98, 0x76, 0x86, 0x9f, 0x66, 0x3a, 0xc5, 0xfd, 0xd7, 0x3f, - 0x8d, 0xa5, 0x8b, 0xff, 0xff, 0xf6, 0x3f, 0x6c, 0xe7, 0xe7, 0xa3, 0x0e, - 0xe6, 0x16, 0x72, 0x4d, 0xe4, 0xeb, 0x75, 0x8b, 0xff, 0xf9, 0xf3, 0xa2, - 0x17, 0xa7, 0xe6, 0x76, 0x7f, 0x45, 0x2b, 0x17, 0xff, 0xba, 0xcd, 0x19, - 0xfc, 0x8b, 0xf2, 0x46, 0xac, 0x5c, 0xe7, 0xd2, 0x2b, 0x49, 0x7e, 0x9d, - 0x3e, 0x46, 0x53, 0x22, 0xff, 0x46, 0x6b, 0x7f, 0xe9, 0x2f, 0x4c, 0x1c, - 0x8d, 0x95, 0x8b, 0xf6, 0xef, 0xcc, 0x1a, 0xc5, 0xff, 0xf0, 0xa3, 0xfe, - 0xc5, 0x11, 0x9a, 0xcf, 0x37, 0x4b, 0x1f, 0x35, 0x35, 0xb3, 0x2c, 0x50, - 0x70, 0xdf, 0x36, 0x19, 0x7b, 0x97, 0x75, 0x1d, 0x93, 0xc2, 0xe6, 0x28, - 0xd3, 0xce, 0xe1, 0xf8, 0x4a, 0x82, 0x31, 0x6f, 0x4a, 0x5a, 0xec, 0x82, - 0x13, 0x35, 0xff, 0xe6, 0xdb, 0xf2, 0xfe, 0xe4, 0xed, 0x9c, 0x58, 0xbe, - 0x33, 0x6c, 0xe2, 0xc5, 0x61, 0xf8, 0x1d, 0x2e, 0xff, 0xf6, 0x34, 0x46, - 0x31, 0x7a, 0x2c, 0xd6, 0x2c, 0x5f, 0xed, 0x6d, 0x2f, 0xac, 0x25, 0x8b, - 0xc6, 0xf2, 0x25, 0x8a, 0xc3, 0xd3, 0xe8, 0xce, 0xc7, 0x58, 0x30, 0xd1, - 0x5f, 0xff, 0xe6, 0x3b, 0x17, 0xa2, 0xcd, 0x61, 0x9e, 0xee, 0xf6, 0x47, - 0xac, 0x5f, 0x44, 0xf9, 0xb2, 0xc5, 0xe2, 0xc1, 0xac, 0x5f, 0x81, 0x82, - 0xd6, 0xcb, 0x17, 0x07, 0xc5, 0x8b, 0xc3, 0xfc, 0xac, 0x18, 0x5c, 0xd6, - 0x1f, 0x80, 0x90, 0xef, 0x8c, 0xfb, 0x44, 0xb1, 0x52, 0x9c, 0x0e, 0xc4, - 0x78, 0xd1, 0xd1, 0x21, 0x42, 0x33, 0x84, 0x37, 0xed, 0xe7, 0xf2, 0x75, - 0x8b, 0xe9, 0xc0, 0xb6, 0x58, 0xac, 0x3c, 0xd2, 0x29, 0xbd, 0x1c, 0x2f, - 0x2c, 0x5f, 0xb7, 0x9f, 0xc9, 0xd6, 0x2f, 0xde, 0xe1, 0x39, 0xab, 0x17, - 0xfc, 0xc6, 0xe6, 0xf3, 0xf9, 0x3a, 0xc5, 0xf0, 0xf5, 0xa9, 0x58, 0xbe, - 0x37, 0xed, 0x05, 0x8a, 0xc3, 0xc7, 0x72, 0x3a, 0x8d, 0x93, 0x34, 0x81, - 0x06, 0x10, 0x9c, 0xa4, 0x8a, 0x42, 0x84, 0x0d, 0xfb, 0x99, 0x84, 0x6a, - 0xc5, 0xff, 0xee, 0xa1, 0xc8, 0x9c, 0xb0, 0x78, 0x46, 0xac, 0x5e, 0x1b, - 0x1d, 0x62, 0xff, 0xef, 0x0b, 0xa8, 0x73, 0xf9, 0xe9, 0x1a, 0xc5, 0xff, - 0x0d, 0xfb, 0x38, 0xfe, 0xe6, 0x61, 0xf2, 0x77, 0x0e, 0xd7, 0x49, 0x96, - 0x31, 0x40, 0xa1, 0x61, 0x78, 0x39, 0x02, 0xc5, 0xfe, 0xdf, 0x77, 0x08, - 0x62, 0xd2, 0xc5, 0x1c, 0xf5, 0x88, 0x7a, 0xfc, 0x09, 0x3c, 0xe9, 0x62, - 0xff, 0xf6, 0xc3, 0xd3, 0x6e, 0x59, 0xdb, 0x4f, 0xc5, 0x8a, 0x95, 0x56, - 0x19, 0x1c, 0x6b, 0xc2, 0x31, 0x88, 0x44, 0x51, 0x77, 0xb8, 0xb1, 0x7f, - 0xe6, 0xe1, 0x93, 0x13, 0xfd, 0x8e, 0xb1, 0x7f, 0x7b, 0xed, 0x10, 0x67, - 0x58, 0xa5, 0x8b, 0x7d, 0x62, 0xbe, 0x5f, 0x30, 0x65, 0xd9, 0xc5, 0x8b, - 0x9b, 0x4b, 0x16, 0x04, 0x0d, 0x76, 0x85, 0xee, 0x70, 0x2c, 0x58, 0x6b, - 0x17, 0x34, 0x0c, 0x35, 0x21, 0x8b, 0xdb, 0xd2, 0x7f, 0xdf, 0x50, 0xa8, - 0x93, 0x81, 0x64, 0x00, 0x27, 0x94, 0x32, 0xee, 0x38, 0x6b, 0x17, 0x48, - 0xd6, 0x2e, 0xe3, 0xac, 0x5d, 0xd0, 0x16, 0x2b, 0xe7, 0x8f, 0xdf, 0x8b, - 0x88, 0x5e, 0xe7, 0x09, 0x62, 0xff, 0xd1, 0x3f, 0x03, 0xe8, 0x0c, 0xfb, - 0x2c, 0x5f, 0x74, 0x0d, 0x4a, 0xc5, 0x18, 0x7c, 0xf2, 0x87, 0x43, 0x45, - 0x0f, 0x1f, 0xee, 0x1b, 0xac, 0x54, 0xb7, 0x15, 0x7b, 0x43, 0x4f, 0x29, - 0x7e, 0x5b, 0xc6, 0xb5, 0xd1, 0x0b, 0xca, 0x41, 0xd4, 0xe4, 0x6f, 0xd4, - 0xda, 0x39, 0x90, 0x21, 0x13, 0x07, 0x21, 0xab, 0xd8, 0x8e, 0xff, 0x8c, - 0xfe, 0x77, 0x3f, 0x9e, 0x0b, 0x17, 0xf7, 0x86, 0x26, 0xd4, 0x16, 0x2f, - 0x76, 0xfe, 0x2c, 0x5f, 0x39, 0xe7, 0xeb, 0x17, 0xe6, 0xf9, 0x83, 0x95, - 0x8a, 0x82, 0x35, 0xb0, 0xf5, 0xcb, 0xfe, 0x3f, 0xe2, 0x2b, 0xcd, 0x17, - 0x16, 0x2f, 0x43, 0x38, 0xb1, 0x7f, 0x78, 0xa6, 0x19, 0xe5, 0x8b, 0xec, - 0x26, 0x82, 0xc5, 0xc1, 0xf0, 0xc3, 0xce, 0x8d, 0x8b, 0x69, 0xd1, 0x41, - 0xc6, 0xba, 0xd2, 0x38, 0x3d, 0x0b, 0xeb, 0xd3, 0xee, 0x2c, 0x5f, 0xcf, - 0xb6, 0x7c, 0x5e, 0x58, 0xa2, 0x3c, 0xcf, 0x0e, 0xdb, 0x16, 0x2f, 0x72, - 0x4d, 0x58, 0xaf, 0x9a, 0xff, 0x08, 0xda, 0x25, 0x8b, 0xfb, 0x05, 0x9f, - 0xdf, 0x65, 0x8b, 0xff, 0xd3, 0xf3, 0x07, 0x3b, 0x18, 0x2d, 0xa7, 0xeb, - 0x15, 0x28, 0x92, 0xe0, 0x98, 0x8c, 0x2f, 0xc6, 0x60, 0xf0, 0x96, 0x2b, - 0xa3, 0xd7, 0x22, 0xfb, 0xdf, 0x91, 0xac, 0x54, 0xa6, 0x93, 0x91, 0x85, - 0x44, 0x45, 0x7f, 0xf8, 0xd2, 0xcd, 0xfe, 0xfd, 0xde, 0xfb, 0xc4, 0xb1, - 0x7f, 0xfe, 0x33, 0x7f, 0xb8, 0xca, 0x5b, 0x6d, 0xfe, 0xda, 0x58, 0xa7, - 0x45, 0x48, 0x94, 0x2f, 0xec, 0xd0, 0x1c, 0xbc, 0xb1, 0x77, 0x5d, 0x2c, - 0x58, 0xe6, 0x1e, 0x39, 0xcb, 0x6f, 0xde, 0x7d, 0x89, 0x96, 0x2f, 0xff, - 0xd9, 0x84, 0x69, 0x81, 0xf9, 0xfe, 0xe6, 0xfd, 0xd6, 0x2f, 0x9f, 0x8f, - 0xd9, 0x62, 0xff, 0xfb, 0x6f, 0xb7, 0x0c, 0xfb, 0x3f, 0x9c, 0x78, 0xb1, - 0x7d, 0x9e, 0x9f, 0xac, 0x5e, 0x36, 0x62, 0x58, 0xbe, 0x6d, 0x61, 0xd6, - 0x2f, 0xfd, 0xc3, 0x3b, 0xbd, 0x9f, 0xf3, 0x9d, 0x62, 0x86, 0x7c, 0xde, - 0x22, 0xb4, 0xac, 0x5f, 0xf4, 0xf4, 0x08, 0xa1, 0x3a, 0xd9, 0x62, 0xb6, - 0x3c, 0xef, 0x88, 0xd4, 0x15, 0x17, 0x8c, 0xa2, 0x25, 0x8d, 0x12, 0x7d, - 0x45, 0x88, 0x8a, 0x10, 0xbe, 0x70, 0xbf, 0xbe, 0xd0, 0x3e, 0x9d, 0x62, - 0xff, 0xc6, 0xb7, 0xb9, 0xe2, 0x9e, 0xa0, 0xb1, 0x7d, 0x26, 0x73, 0x4b, - 0x14, 0x69, 0xf2, 0xe9, 0x06, 0xfe, 0xcc, 0x62, 0xf7, 0x16, 0x2f, 0xc5, - 0x30, 0xcf, 0x2c, 0x51, 0x1e, 0x9f, 0x8b, 0x2f, 0xfe, 0x37, 0xde, 0x9d, - 0x00, 0xcd, 0xbf, 0xe5, 0x8b, 0x32, 0xc5, 0x4a, 0x3c, 0xa0, 0xec, 0xc4, - 0x3e, 0x4a, 0xbf, 0x10, 0xa2, 0x61, 0xac, 0x5f, 0xe7, 0xf0, 0x7a, 0x9f, - 0xca, 0xc5, 0xff, 0xff, 0x4e, 0x9f, 0x61, 0x47, 0x98, 0x5d, 0x4c, 0x79, - 0x8d, 0x16, 0x32, 0xc5, 0xfd, 0x06, 0xd8, 0xc8, 0xfd, 0xd6, 0x2f, 0x1c, - 0x71, 0xa2, 0xc5, 0xb8, 0xb1, 0x58, 0x6d, 0x5c, 0x8e, 0xc7, 0x58, 0xbd, - 0xac, 0xe9, 0x62, 0xf6, 0x3e, 0xcb, 0x17, 0xd2, 0x73, 0xba, 0xc5, 0xb3, - 0x63, 0x7f, 0xe1, 0xdb, 0xff, 0xfe, 0x9f, 0x9c, 0x3d, 0xcc, 0x36, 0x4b, - 0x73, 0x1f, 0x5a, 0x70, 0x96, 0x28, 0x69, 0x91, 0xfc, 0x7c, 0x02, 0x44, - 0xbb, 0xc2, 0x7b, 0xec, 0x38, 0xbc, 0xb1, 0x7f, 0xfd, 0x9d, 0xcf, 0xa6, - 0x07, 0x30, 0x7f, 0x16, 0xcb, 0x17, 0x98, 0x1b, 0x2c, 0x5f, 0xfa, 0x77, - 0x2c, 0xed, 0xdd, 0xa6, 0xe9, 0x62, 0xff, 0x3e, 0x75, 0xdd, 0xa6, 0xe9, - 0x62, 0xd9, 0xc3, 0xfd, 0xee, 0x45, 0xa7, 0x4c, 0x67, 0x4a, 0x85, 0x09, - 0xbb, 0xe7, 0x36, 0x4e, 0xb1, 0x7d, 0xb0, 0xb5, 0xba, 0xc5, 0xff, 0xec, - 0xf1, 0x4e, 0xe6, 0x16, 0x73, 0xe2, 0x58, 0xbf, 0xce, 0x59, 0xe6, 0xe6, - 0x2c, 0x5f, 0xfd, 0x14, 0x1c, 0x2f, 0x7f, 0x23, 0xb8, 0xcb, 0x17, 0xf9, - 0xf3, 0xae, 0xed, 0x37, 0x4b, 0x16, 0xc8, 0x91, 0x67, 0xa3, 0x1e, 0xe4, - 0xab, 0xfe, 0x36, 0x4a, 0x19, 0xf7, 0x3a, 0xc5, 0xcc, 0x69, 0x89, 0xf6, - 0xc9, 0xa6, 0xc4, 0x7f, 0x26, 0x28, 0x7f, 0x78, 0xe6, 0xfb, 0x9c, 0x93, - 0xac, 0x5f, 0x7e, 0x7b, 0x4a, 0xc5, 0x39, 0xe3, 0xb1, 0x1d, 0x4a, 0xf4, - 0xec, 0x0a, 0x70, 0xd3, 0xa7, 0x07, 0x8e, 0x37, 0x49, 0x45, 0x2c, 0xa7, - 0xb4, 0x2c, 0x2a, 0x5b, 0x02, 0xec, 0x8c, 0xa0, 0xd7, 0x47, 0x8e, 0x67, - 0x50, 0xdf, 0x3b, 0x4b, 0x4a, 0x58, 0x03, 0xb9, 0x47, 0x0a, 0x29, 0xed, - 0x8b, 0x04, 0xb1, 0x6d, 0x96, 0x2b, 0xb1, 0xa6, 0x8e, 0x13, 0xbc, 0xf3, - 0xdc, 0xb1, 0x68, 0x2c, 0x5f, 0xff, 0xf0, 0x33, 0xdc, 0x33, 0xf9, 0xbe, - 0x6e, 0x67, 0x06, 0x59, 0xf5, 0x8b, 0xf0, 0xdc, 0x98, 0x6b, 0x17, 0xb8, - 0x3e, 0x96, 0x2f, 0x7e, 0x36, 0xd2, 0xc5, 0xc0, 0xdd, 0x62, 0xff, 0xf6, - 0x45, 0xf9, 0x23, 0x4b, 0x3d, 0xf1, 0x2c, 0x51, 0x88, 0x87, 0x34, 0x8f, - 0xe3, 0x37, 0xdb, 0x89, 0xa0, 0xb1, 0x46, 0x23, 0xf2, 0x10, 0xa6, 0xe8, - 0xca, 0x86, 0x9f, 0xb6, 0xe3, 0xfd, 0x09, 0x3b, 0x5e, 0xa3, 0x23, 0xba, - 0x38, 0x96, 0x2f, 0xa0, 0x60, 0x67, 0x58, 0xbf, 0xb5, 0xfc, 0xd0, 0xb1, - 0x62, 0xff, 0xfe, 0xce, 0xa1, 0xcf, 0x7e, 0x4f, 0x2e, 0x33, 0x27, 0xbc, - 0x58, 0xbf, 0xa1, 0xcc, 0x16, 0x80, 0xb1, 0x7f, 0x67, 0x50, 0xe0, 0xa2, - 0x58, 0xbf, 0x67, 0x31, 0xc9, 0x62, 0xf8, 0xa2, 0x73, 0xf4, 0x88, 0x6d, - 0x17, 0xfc, 0xc6, 0xff, 0xf1, 0x6f, 0xf6, 0xf1, 0x9a, 0xcf, 0x37, 0x4b, - 0x15, 0x89, 0xd5, 0xb9, 0x73, 0x43, 0xa0, 0x49, 0x17, 0xf3, 0x30, 0xd9, - 0xbb, 0x2c, 0x5e, 0xeb, 0x0d, 0x58, 0xbf, 0xb3, 0x6d, 0x85, 0xad, 0x96, - 0x2d, 0xa3, 0x0f, 0xff, 0xe5, 0xc4, 0x3f, 0x7f, 0xce, 0x46, 0xf8, 0x65, - 0x3d, 0x2c, 0x5f, 0xb4, 0x44, 0xdf, 0x58, 0xbf, 0xfe, 0x26, 0xea, 0x1f, - 0xcf, 0x8a, 0x78, 0xc0, 0x58, 0xbf, 0xdd, 0xec, 0x8f, 0xf9, 0xbc, 0xac, - 0x5d, 0x9c, 0x31, 0x11, 0x3d, 0xe2, 0x85, 0xfc, 0x46, 0x6f, 0xc0, 0x0d, - 0x62, 0xa5, 0x38, 0x4c, 0x35, 0x73, 0xaf, 0xc2, 0xc1, 0x8d, 0x2f, 0xff, - 0xe7, 0xe7, 0xf3, 0x5a, 0x9d, 0x8c, 0xc2, 0x1f, 0xe5, 0x62, 0xff, 0xc2, - 0xe1, 0x87, 0x0f, 0xed, 0xf9, 0x58, 0xbf, 0x67, 0x85, 0x9d, 0x2c, 0x5e, - 0x37, 0x3a, 0x58, 0xba, 0x62, 0x30, 0xf2, 0x3c, 0x53, 0x58, 0x98, 0xa9, - 0x2e, 0x0a, 0x11, 0x57, 0xfe, 0x37, 0xf3, 0x9f, 0x7c, 0xd4, 0x4b, 0x17, - 0xff, 0xef, 0x63, 0x9c, 0xc2, 0xcd, 0xdf, 0x5a, 0x7d, 0x96, 0x28, 0x91, - 0x2e, 0x12, 0x05, 0xff, 0xff, 0xf8, 0x44, 0x60, 0x4d, 0xd4, 0x34, 0xc0, - 0x33, 0x82, 0x9e, 0xbf, 0x8e, 0x58, 0x6a, 0xc5, 0xff, 0xff, 0xfe, 0xdf, - 0x37, 0x2c, 0xf7, 0xc5, 0xf6, 0xea, 0x1c, 0xf6, 0xb0, 0x2c, 0x71, 0xfb, - 0x8e, 0xb1, 0x7f, 0x38, 0xcc, 0x87, 0x34, 0xb1, 0x7f, 0xec, 0xf1, 0x48, - 0x0c, 0xc7, 0x1a, 0xc5, 0xff, 0xfe, 0xc3, 0x9e, 0x62, 0xce, 0x3e, 0x03, - 0x86, 0x63, 0x8d, 0x62, 0xf8, 0x58, 0x46, 0x3a, 0x27, 0xc8, 0xfa, 0xb4, - 0x98, 0x3f, 0xa1, 0x9f, 0x7f, 0xc7, 0xc3, 0x98, 0x78, 0xfe, 0xd0, 0x58, - 0xbf, 0xff, 0xfd, 0x86, 0x68, 0x3e, 0x49, 0x9c, 0x7c, 0x28, 0xb9, 0xe7, - 0xcd, 0x8a, 0x56, 0x2f, 0xff, 0xff, 0x7f, 0x04, 0x73, 0x32, 0x2c, 0xeb, - 0xcc, 0x09, 0x33, 0xc3, 0x9f, 0x71, 0x62, 0xb4, 0x9b, 0x01, 0xca, 0x7e, - 0x83, 0xc7, 0xab, 0xff, 0xed, 0x6b, 0x3d, 0xcf, 0xbe, 0x19, 0xf0, 0x4a, - 0xc5, 0x4a, 0xb8, 0x87, 0x95, 0xf2, 0x23, 0xeb, 0xff, 0xfa, 0x7f, 0x83, - 0x34, 0x53, 0xfc, 0xf4, 0x9d, 0xbc, 0xb1, 0x52, 0xb9, 0x8b, 0x84, 0x7f, - 0x9c, 0x10, 0x11, 0xbd, 0xff, 0xe0, 0x63, 0x44, 0x67, 0x33, 0x5a, 0xce, - 0x96, 0x2f, 0xfe, 0xc2, 0x2c, 0xfe, 0x0f, 0xe2, 0x89, 0x62, 0xff, 0xb2, - 0x4b, 0x7c, 0xf7, 0xdd, 0x62, 0xf7, 0xe6, 0x25, 0x8b, 0xff, 0xc0, 0x9f, - 0xf5, 0x0e, 0x16, 0x00, 0x5c, 0x58, 0xbf, 0xff, 0xfe, 0x78, 0xbf, 0x9c, - 0xd6, 0x6e, 0x67, 0xdf, 0x0b, 0x3b, 0x16, 0x0c, 0x44, 0xb1, 0x7f, 0xf8, - 0xa4, 0xfd, 0x79, 0xc6, 0x66, 0xb3, 0xcb, 0x17, 0xec, 0x2d, 0xc3, 0x3a, - 0xc5, 0xff, 0xdf, 0xc9, 0x28, 0x8b, 0x3d, 0xc6, 0x58, 0xb4, 0x0d, 0x54, - 0xd6, 0xe9, 0xba, 0x44, 0xf9, 0xc0, 0x07, 0x89, 0x33, 0x8f, 0xfe, 0x4c, - 0xee, 0x2a, 0xbe, 0x9d, 0xf5, 0x8b, 0x17, 0xfe, 0xee, 0xf4, 0xf2, 0x28, - 0x36, 0xb6, 0x58, 0xbd, 0xe7, 0x35, 0x62, 0xc7, 0x30, 0xf8, 0xe3, 0x64, - 0x5b, 0xfe, 0xf7, 0x24, 0x0c, 0x42, 0xc5, 0x8a, 0xc3, 0xe6, 0x11, 0x75, - 0xff, 0xcf, 0xb3, 0x1c, 0xee, 0x60, 0xdf, 0xb2, 0xc5, 0x41, 0x35, 0x51, - 0xc3, 0xb3, 0x44, 0x37, 0xa2, 0x78, 0xf5, 0x8b, 0xf8, 0x3d, 0x00, 0xef, - 0xc5, 0x8b, 0xff, 0x03, 0x86, 0x7f, 0x07, 0xac, 0xe9, 0x62, 0xba, 0x3f, - 0x27, 0x30, 0xbf, 0xff, 0xbc, 0xfb, 0x60, 0xcc, 0x3b, 0x43, 0x4f, 0xb3, - 0x1d, 0x62, 0xff, 0x6c, 0xc7, 0x29, 0xd4, 0x4b, 0x17, 0xfb, 0x0d, 0x01, - 0xf0, 0xcd, 0x62, 0x24, 0xdd, 0x7a, 0xff, 0xff, 0x1a, 0x71, 0x1c, 0x5d, - 0xdc, 0x7d, 0xbf, 0x91, 0x41, 0xbb, 0x96, 0x2f, 0xff, 0x16, 0xff, 0xc0, - 0x00, 0x41, 0x75, 0x0e, 0x2c, 0x54, 0xa2, 0xed, 0xdb, 0x2b, 0x13, 0xdc, - 0xea, 0x16, 0xba, 0x8c, 0x1a, 0xf8, 0x0c, 0xd1, 0x2c, 0x5a, 0x56, 0x2f, - 0x61, 0x6c, 0x61, 0xb4, 0xdc, 0x8e, 0xfb, 0x73, 0x39, 0x8b, 0x17, 0xff, - 0x68, 0xc8, 0xbe, 0x23, 0x5f, 0x08, 0xd5, 0x8b, 0x66, 0x1f, 0x70, 0x89, - 0x6f, 0xf1, 0x7b, 0xc4, 0xc0, 0xe2, 0xc5, 0xf0, 0x0c, 0x3e, 0x96, 0x2a, - 0x4f, 0x60, 0x46, 0x77, 0xe3, 0x1b, 0x72, 0xc5, 0x8b, 0xff, 0xb1, 0xa2, - 0x33, 0xf2, 0xfb, 0x49, 0xab, 0x14, 0x74, 0x48, 0xb1, 0x08, 0x0a, 0x6f, - 0xff, 0xf0, 0x5a, 0xc7, 0x07, 0x0c, 0xea, 0x0e, 0x5e, 0xc7, 0x1a, 0xc5, - 0xfd, 0x0e, 0x60, 0xb4, 0x05, 0x8b, 0xfb, 0x3a, 0x87, 0x05, 0x12, 0xc5, - 0xfb, 0x39, 0x8e, 0x4b, 0x16, 0xed, 0xd2, 0x21, 0xb4, 0x5f, 0xf3, 0x1b, - 0xff, 0xde, 0x9d, 0x08, 0xef, 0xc3, 0x39, 0x0e, 0x2c, 0x5f, 0xfb, 0x63, - 0x45, 0x31, 0x19, 0x08, 0x62, 0xc5, 0xff, 0xb9, 0xef, 0xe1, 0xf7, 0x92, - 0x35, 0x62, 0xb1, 0x10, 0xa0, 0x44, 0xa9, 0x54, 0x2c, 0xf0, 0xe9, 0x63, - 0x91, 0x43, 0x4a, 0xff, 0xb5, 0xb4, 0xed, 0xb0, 0xb5, 0xb2, 0xc5, 0xff, - 0xfc, 0xfd, 0x7b, 0xd2, 0x73, 0x3f, 0x3d, 0x03, 0x3d, 0xc5, 0x8b, 0xff, - 0xf1, 0x49, 0xa6, 0x1c, 0x4f, 0xc9, 0xf9, 0xc3, 0xdd, 0x62, 0xff, 0xf4, - 0xbf, 0xb8, 0xe5, 0xd4, 0x0c, 0xe0, 0xd6, 0x2f, 0xfc, 0x64, 0x5f, 0x11, - 0xaf, 0x84, 0x6a, 0xc5, 0xff, 0xfa, 0x63, 0xcc, 0xea, 0x13, 0xb7, 0x50, - 0xe1, 0x31, 0xab, 0x17, 0xf8, 0x8c, 0xe0, 0xa3, 0x85, 0xa5, 0x8a, 0xc4, - 0x6d, 0x7d, 0x0c, 0x4b, 0xd7, 0xff, 0xff, 0xb3, 0x76, 0xd8, 0xce, 0x3c, - 0x74, 0x90, 0x3d, 0xdc, 0x52, 0x58, 0xfe, 0x58, 0xbf, 0xff, 0xbd, 0x25, - 0x9b, 0x19, 0xb0, 0xb5, 0x0f, 0x4c, 0x5c, 0x58, 0xba, 0x7a, 0xfa, 0x37, - 0x7b, 0x9f, 0x6a, 0x55, 0xae, 0x61, 0xf9, 0xd7, 0xfe, 0xb5, 0xc8, 0xc9, - 0x85, 0x18, 0x65, 0xfc, 0x59, 0xd8, 0xb3, 0x8b, 0x17, 0xb1, 0xc2, 0x58, - 0xb9, 0x89, 0x62, 0xb7, 0x36, 0x7d, 0x0e, 0xd1, 0x88, 0x84, 0xc6, 0x1b, - 0xfc, 0xe0, 0x31, 0xfe, 0xe7, 0x58, 0xa1, 0x9e, 0xb9, 0x11, 0xdf, 0xfc, - 0x67, 0x3e, 0x23, 0x3d, 0xce, 0x4e, 0x96, 0x2f, 0xff, 0xe9, 0xd0, 0x0c, - 0x9e, 0xcd, 0xf9, 0xd6, 0xb3, 0xdc, 0x58, 0xad, 0x91, 0x4f, 0xf4, 0x9b, - 0xff, 0x42, 0x7c, 0x2d, 0xcc, 0xe7, 0x9d, 0x62, 0xff, 0xfb, 0xf3, 0xb1, - 0x85, 0x9d, 0x9b, 0xff, 0x9e, 0x96, 0x2f, 0xff, 0xfb, 0xae, 0x3e, 0x04, - 0x67, 0xf3, 0xdc, 0xcd, 0x8c, 0xc7, 0x1a, 0xc5, 0x0d, 0x17, 0xf8, 0xa9, - 0x7f, 0xef, 0x3f, 0x50, 0x29, 0x33, 0xbb, 0x75, 0x8b, 0xff, 0xd2, 0x72, - 0xce, 0xc5, 0x9d, 0xb3, 0x50, 0x58, 0xac, 0x44, 0x89, 0x22, 0xdf, 0xfb, - 0x9f, 0x7c, 0xf7, 0x50, 0x7f, 0xac, 0x5f, 0xff, 0xfd, 0xce, 0x61, 0x1b, - 0x8e, 0x3d, 0x49, 0xfa, 0x84, 0x9b, 0xf7, 0xc5, 0x8b, 0x75, 0x04, 0x59, - 0xe2, 0x05, 0xff, 0xf8, 0x2e, 0x6f, 0xf1, 0x1f, 0xac, 0xf9, 0x75, 0x21, - 0x2c, 0x54, 0xa2, 0x17, 0x0a, 0x6f, 0xf8, 0xb3, 0x59, 0xbe, 0x38, 0xd6, - 0x2f, 0xed, 0xbd, 0x11, 0x49, 0xd6, 0x2f, 0xbf, 0xd6, 0x1a, 0xb1, 0x7e, - 0x69, 0x8a, 0x62, 0x58, 0xbf, 0x60, 0xfe, 0x20, 0x96, 0x28, 0xc3, 0xd3, - 0x22, 0x9b, 0x4e, 0xe8, 0x9a, 0x89, 0xe2, 0xff, 0xfd, 0xb6, 0x38, 0xc8, - 0x5f, 0x32, 0x46, 0xd1, 0x71, 0x62, 0xfe, 0xd4, 0x8c, 0x58, 0x6a, 0xc5, - 0x62, 0x21, 0xdd, 0x62, 0xfe, 0xcf, 0xbe, 0xbe, 0xcb, 0x17, 0xef, 0xbe, - 0xbe, 0xcb, 0x17, 0x60, 0x46, 0x1e, 0xae, 0x16, 0xd4, 0xaf, 0x38, 0xe4, - 0x32, 0x3a, 0x24, 0x78, 0xc0, 0x62, 0x85, 0x9e, 0xa3, 0x59, 0xf9, 0x0b, - 0x1c, 0x14, 0x32, 0xb9, 0x0b, 0x1f, 0x3b, 0x5f, 0x7b, 0x30, 0x6b, 0x15, - 0xb3, 0xa0, 0xf8, 0x1c, 0xa4, 0x33, 0x63, 0x61, 0xde, 0x76, 0x43, 0xa9, - 0x56, 0x2f, 0x1e, 0xec, 0x46, 0xda, 0x94, 0xde, 0x77, 0x0f, 0xc2, 0x88, - 0x11, 0x87, 0x94, 0xa4, 0x5e, 0x4b, 0xa2, 0xf4, 0xfd, 0x7f, 0x74, 0x2e, - 0x2f, 0xff, 0x9f, 0x4d, 0x13, 0xfc, 0xc9, 0x8f, 0xf4, 0xc4, 0xb1, 0x79, - 0xf2, 0x25, 0x8b, 0xfb, 0xf9, 0xef, 0xb4, 0x16, 0x2a, 0x08, 0xa0, 0xfa, - 0xaf, 0x87, 0x6f, 0xf6, 0x04, 0x61, 0x16, 0x74, 0xb1, 0x7c, 0xfc, 0xc1, - 0x98, 0x7c, 0xbb, 0x18, 0x5f, 0x43, 0x0b, 0xeb, 0x17, 0xfb, 0xc5, 0x9e, - 0xfe, 0x6c, 0xb1, 0x7c, 0x28, 0x0a, 0x56, 0x2f, 0xa6, 0x3c, 0x51, 0x2c, - 0x5d, 0xac, 0x58, 0xbd, 0x9e, 0xe2, 0xc5, 0xfd, 0xdd, 0xe7, 0x26, 0x3a, - 0xc5, 0x2c, 0x5f, 0x73, 0x27, 0x63, 0x0d, 0xe1, 0xcc, 0x2b, 0x64, 0x54, - 0xc4, 0x2f, 0xe5, 0x9b, 0xdf, 0x63, 0x56, 0x2f, 0xf1, 0x9a, 0xce, 0xa0, - 0xe7, 0x58, 0xad, 0x22, 0x1b, 0xc6, 0x41, 0x0f, 0x5f, 0xf9, 0xb5, 0xfc, - 0xf4, 0x93, 0x81, 0x62, 0xdd, 0xcb, 0x17, 0xb6, 0x3e, 0xeb, 0x17, 0xe7, - 0xc2, 0xce, 0xcb, 0x17, 0xd8, 0xf1, 0x19, 0xd1, 0xe4, 0x7c, 0x82, 0xef, - 0x4a, 0xc5, 0xfd, 0xf1, 0x6c, 0x64, 0x5b, 0x2c, 0x5d, 0x3a, 0x58, 0xbf, - 0xc2, 0xf6, 0x61, 0xc0, 0x12, 0xc5, 0xec, 0xd8, 0xc1, 0xa2, 0x02, 0x23, - 0x40, 0x0b, 0xd7, 0x48, 0xdb, 0x28, 0x4b, 0xde, 0xf3, 0xec, 0xb1, 0x68, - 0xe5, 0x8a, 0x81, 0xb3, 0x8f, 0x1e, 0xbf, 0xdb, 0xbf, 0x30, 0x66, 0x0d, - 0x62, 0xfe, 0xea, 0x1c, 0x33, 0xce, 0xb1, 0x6c, 0xf9, 0xf3, 0x84, 0x6d, - 0x7f, 0xfe, 0x29, 0x39, 0x83, 0xf8, 0x8c, 0x98, 0xff, 0xc9, 0xd6, 0x2f, - 0xf9, 0xc0, 0xf0, 0xfb, 0x90, 0x16, 0x2f, 0xfd, 0x09, 0xc0, 0x7f, 0x30, - 0xb7, 0x58, 0xbf, 0xfd, 0xf7, 0x21, 0x98, 0x1e, 0xe5, 0x9f, 0xc5, 0x8b, - 0xfe, 0x6f, 0x72, 0x28, 0x08, 0xbc, 0xb1, 0x52, 0x8f, 0xdc, 0x38, 0x88, - 0xf8, 0x09, 0x97, 0xfd, 0xf7, 0x3c, 0xe1, 0x7b, 0x8b, 0x17, 0xff, 0xf8, - 0x5e, 0xd0, 0xa2, 0x33, 0xd1, 0x7c, 0x40, 0xf3, 0xe7, 0x72, 0xc5, 0xf4, - 0xef, 0x27, 0x31, 0x1b, 0xdb, 0x9e, 0x11, 0xc5, 0x4a, 0xf8, 0xd6, 0xc6, - 0x83, 0x23, 0xc8, 0xd5, 0xb7, 0x31, 0x73, 0xd8, 0x97, 0x75, 0x18, 0xb3, - 0x2d, 0x94, 0x22, 0xfc, 0x51, 0xdd, 0x28, 0xda, 0xff, 0xf3, 0x44, 0x63, - 0x14, 0x1c, 0xe6, 0x49, 0x2c, 0x5f, 0xff, 0xb1, 0x8e, 0x61, 0xad, 0xd7, - 0xf3, 0xff, 0x9f, 0x2c, 0x56, 0x22, 0x8f, 0x49, 0x77, 0xb0, 0x1c, 0x58, - 0xbf, 0xa4, 0x23, 0x38, 0x7e, 0x96, 0x2b, 0x0f, 0x3f, 0x43, 0xb7, 0x38, - 0x4b, 0x17, 0xb5, 0x14, 0x16, 0x2f, 0xfd, 0x9d, 0x78, 0xce, 0x4f, 0xda, - 0x3d, 0x62, 0x86, 0x7f, 0x78, 0x31, 0xa1, 0xfb, 0xff, 0x9f, 0xa8, 0x70, - 0xc1, 0xbf, 0x69, 0x1a, 0xc5, 0xee, 0xa6, 0x3d, 0x62, 0xff, 0xf4, 0xc5, - 0xcf, 0x75, 0x07, 0xff, 0x50, 0x75, 0x8a, 0x35, 0x17, 0x0c, 0x92, 0x22, - 0x1b, 0xec, 0xfb, 0x76, 0x58, 0xbf, 0xa1, 0x9f, 0xce, 0xdc, 0x58, 0xbf, - 0x81, 0x9d, 0x19, 0xd7, 0x16, 0x2d, 0x83, 0x44, 0x34, 0x44, 0x80, 0x30, - 0xbf, 0xfe, 0xf8, 0xb8, 0x67, 0xdf, 0xdf, 0xcd, 0x4f, 0x65, 0x8b, 0xf7, - 0x26, 0x21, 0x69, 0x62, 0xfa, 0x62, 0x16, 0x96, 0x2e, 0x03, 0x18, 0x79, - 0xdc, 0x2a, 0xbf, 0x71, 0xf3, 0xa3, 0xac, 0x5e, 0xcd, 0x71, 0x62, 0x86, - 0x98, 0xb0, 0x21, 0x45, 0xe2, 0xee, 0xc5, 0x37, 0xf6, 0xb0, 0x5f, 0x93, - 0xac, 0x5e, 0xcc, 0x02, 0xc5, 0xd9, 0xd1, 0x87, 0x94, 0x45, 0xd5, 0x88, - 0xbd, 0x28, 0x47, 0xdf, 0xa7, 0xaf, 0xe6, 0xcb, 0x17, 0xfe, 0x70, 0x8c, - 0xd4, 0xc3, 0x92, 0x05, 0x8a, 0x23, 0xeb, 0xf1, 0x55, 0xfb, 0x3e, 0x67, - 0x6d, 0xd6, 0x2e, 0x93, 0x8d, 0x74, 0x83, 0x21, 0x38, 0x6c, 0x39, 0xb5, - 0x0b, 0x62, 0x94, 0x13, 0xe8, 0x48, 0x88, 0x86, 0xed, 0x62, 0xc5, 0xff, - 0xda, 0x90, 0xbb, 0x8a, 0x42, 0xea, 0x1c, 0x58, 0xb4, 0xac, 0x5f, 0x3e, - 0x9b, 0xa5, 0x8b, 0x79, 0xcd, 0xa7, 0x04, 0x68, 0x68, 0xa5, 0x77, 0xfb, - 0xfe, 0x62, 0xdf, 0xee, 0x72, 0x95, 0x8b, 0xff, 0x86, 0x4d, 0x14, 0x53, - 0xe0, 0x67, 0x16, 0x2f, 0xff, 0x8a, 0x76, 0xfc, 0xbf, 0xb8, 0xe5, 0xd4, - 0x16, 0x2e, 0x38, 0x6b, 0x16, 0x89, 0x62, 0x96, 0x2a, 0x4b, 0xfd, 0x09, - 0xd4, 0x9e, 0xbb, 0x9c, 0x5e, 0xdb, 0x02, 0x58, 0xbf, 0xc3, 0x32, 0x62, - 0x1b, 0x04, 0xb1, 0x6e, 0xc6, 0x1e, 0xb3, 0x8f, 0xdf, 0xfd, 0xa0, 0x47, - 0x67, 0xbf, 0x9a, 0x7e, 0x2c, 0x5f, 0xfb, 0x38, 0x59, 0xbe, 0xec, 0x40, - 0x58, 0xa7, 0x45, 0x8b, 0x15, 0x71, 0x22, 0xff, 0xff, 0xf1, 0x39, 0xbf, - 0x68, 0x8c, 0x21, 0x77, 0x19, 0x9d, 0x43, 0x04, 0x40, 0xe2, 0xc5, 0xff, - 0xf3, 0xc3, 0xdc, 0xce, 0xda, 0xc0, 0x71, 0xb7, 0x58, 0xbf, 0xd8, 0xc6, - 0x98, 0x13, 0x04, 0xb1, 0x7f, 0xff, 0xb3, 0x73, 0x0b, 0x3e, 0xf9, 0xc3, - 0x31, 0xff, 0x9b, 0xac, 0x5b, 0x06, 0x89, 0x9f, 0x9b, 0xdf, 0xb9, 0x3d, - 0x9c, 0x96, 0x2f, 0xfb, 0xda, 0x14, 0x3a, 0x86, 0x79, 0x62, 0xf9, 0xe4, - 0xb6, 0x58, 0xa7, 0x3d, 0xef, 0x9e, 0x51, 0xd5, 0x1d, 0xfd, 0xfc, 0xa1, - 0xd9, 0xe2, 0x8e, 0xd0, 0x87, 0xbf, 0xff, 0x84, 0x36, 0x20, 0x19, 0xec, + 0x16, 0x2f, 0xe3, 0x38, 0x03, 0xe7, 0x16, 0x2f, 0xe3, 0x44, 0x31, 0x31, + 0xab, 0x15, 0xd6, 0x9f, 0x0c, 0x98, 0x5e, 0x3f, 0x09, 0x62, 0xf6, 0x66, + 0x96, 0x28, 0xc3, 0x72, 0x43, 0xb7, 0x7d, 0x96, 0x2b, 0x46, 0xe3, 0xa1, + 0x0d, 0xfe, 0x0c, 0xc9, 0x29, 0x84, 0xac, 0x53, 0x9e, 0xbb, 0x11, 0xde, + 0xdf, 0x6f, 0xac, 0x5f, 0xf0, 0x0c, 0xe4, 0xbe, 0xcd, 0xe5, 0x8b, 0xf4, + 0xf3, 0xae, 0xb1, 0xbc, 0x6e, 0xb1, 0x71, 0xce, 0xb1, 0x4e, 0x88, 0xee, + 0x1d, 0x88, 0xee, 0xfd, 0x3c, 0x17, 0xdd, 0x62, 0x8c, 0x4c, 0x16, 0x10, + 0xae, 0xe1, 0x7d, 0x2c, 0x5f, 0x9c, 0x62, 0x2c, 0x58, 0xbf, 0x41, 0xb4, + 0xdb, 0xac, 0x5c, 0xf1, 0x2c, 0x54, 0x9e, 0x0e, 0x14, 0xdd, 0x17, 0xd6, + 0x2f, 0xf1, 0x67, 0x70, 0x26, 0xd9, 0x62, 0xb4, 0x7d, 0xa0, 0x20, 0xe0, + 0xcd, 0xf6, 0xe2, 0xd4, 0x4b, 0x17, 0xd8, 0x1e, 0x1a, 0xb1, 0x7e, 0xe0, + 0x98, 0x80, 0xb1, 0x46, 0x22, 0x87, 0x0b, 0xc8, 0x9b, 0xc4, 0x97, 0xf1, + 0x67, 0x42, 0xce, 0x2c, 0x51, 0xcf, 0xa8, 0x07, 0x97, 0xb8, 0xe0, 0x58, + 0xbe, 0x72, 0x9e, 0x2c, 0x56, 0x1f, 0x03, 0x91, 0x7c, 0x76, 0xff, 0x49, + 0xff, 0xac, 0x68, 0x96, 0x2f, 0xfd, 0x9b, 0x1a, 0xc3, 0xd1, 0x30, 0x4b, + 0x17, 0xdc, 0x16, 0x80, 0xb1, 0x73, 0x79, 0x62, 0xe9, 0x3f, 0x66, 0xec, + 0x32, 0x4b, 0xc1, 0x04, 0x12, 0x45, 0xef, 0x7f, 0x12, 0x23, 0x0d, 0x0d, + 0xf9, 0xcd, 0x62, 0x02, 0xc5, 0x98, 0x8f, 0x63, 0xc6, 0x17, 0xff, 0xff, + 0x4e, 0xc6, 0x70, 0x53, 0xdf, 0xbf, 0x87, 0xcf, 0x14, 0x80, 0x12, 0xb1, + 0x7f, 0xfb, 0xee, 0x61, 0xac, 0x67, 0x33, 0x53, 0xe5, 0x8b, 0x62, 0xc5, + 0x78, 0xf7, 0xa3, 0x93, 0x6f, 0xbd, 0x16, 0x79, 0x62, 0xc3, 0x58, 0xb7, + 0x52, 0xc5, 0x0d, 0x34, 0x2c, 0x86, 0x93, 0x12, 0x88, 0x90, 0x31, 0x2a, + 0x95, 0xd8, 0x78, 0x06, 0x0e, 0x52, 0x01, 0xa5, 0xba, 0x34, 0xfb, 0xe0, + 0x21, 0x4e, 0x51, 0xb4, 0x5f, 0xbe, 0x5d, 0x72, 0x3b, 0xa9, 0x62, 0xe6, + 0x65, 0x8b, 0x7d, 0xcf, 0x2d, 0x8d, 0x6f, 0xcf, 0xd3, 0x05, 0xc5, 0x8b, + 0xff, 0xc2, 0x9e, 0xff, 0x9b, 0x48, 0x5d, 0xc3, 0x8b, 0x15, 0x27, 0xf3, + 0xc2, 0xab, 0xff, 0xf8, 0x1a, 0x93, 0x35, 0x3e, 0xee, 0x12, 0x6e, 0x98, + 0x25, 0x8b, 0xff, 0xa6, 0x23, 0x33, 0x79, 0xf7, 0xd8, 0xeb, 0x17, 0xc1, + 0xf1, 0x80, 0xb1, 0x74, 0x5f, 0x58, 0xbf, 0xf1, 0xcc, 0xc7, 0xd3, 0x9e, + 0x4d, 0x58, 0xa7, 0x3d, 0x96, 0x19, 0xbf, 0xf3, 0xc4, 0x67, 0xe5, 0xf4, + 0x28, 0xf5, 0x8b, 0xf9, 0x87, 0x02, 0x93, 0xac, 0x51, 0x89, 0xeb, 0x49, + 0x0b, 0xb0, 0x69, 0x1f, 0xef, 0xa0, 0x20, 0x24, 0x4b, 0xff, 0xef, 0x90, + 0xbc, 0x61, 0x67, 0x57, 0x9f, 0x3a, 0x96, 0x2e, 0x70, 0x2c, 0x56, 0xe7, + 0xdb, 0xd4, 0xad, 0x70, 0xbe, 0xb1, 0x7f, 0xf7, 0x7c, 0x33, 0x82, 0x9e, + 0xf3, 0x3c, 0xb1, 0x7b, 0xc2, 0x8f, 0x58, 0xbe, 0xea, 0xd7, 0x38, 0xb1, + 0x58, 0x79, 0x0e, 0x43, 0x7b, 0x99, 0xb2, 0xc5, 0xf7, 0x8a, 0x76, 0x58, + 0xa9, 0x4c, 0xbc, 0xd2, 0x67, 0x18, 0xd4, 0x24, 0x18, 0x80, 0x43, 0xd7, + 0xf1, 0x67, 0xcb, 0x02, 0x58, 0xbf, 0xf1, 0x77, 0xe3, 0x38, 0x03, 0xe7, + 0x16, 0x28, 0xc3, 0xef, 0xc2, 0xdb, 0xf4, 0xeb, 0xb8, 0x71, 0x62, 0xff, + 0xfc, 0xe5, 0xbf, 0x3c, 0x32, 0x9e, 0xfe, 0xf8, 0x4b, 0x17, 0xe1, 0x79, + 0xf6, 0x95, 0x8a, 0xc4, 0x65, 0x6e, 0x44, 0x72, 0xa2, 0x55, 0xbf, 0xdf, + 0x9d, 0xb5, 0x38, 0x35, 0x8b, 0xf4, 0x7c, 0x6c, 0x09, 0x3a, 0xc5, 0xf9, + 0xf9, 0xec, 0xfa, 0xc5, 0xfe, 0x92, 0x9e, 0x4b, 0x9d, 0x62, 0xf3, 0x7b, + 0x8b, 0x14, 0x69, 0xe7, 0x68, 0xc6, 0xf7, 0x50, 0xe5, 0x62, 0xa5, 0x31, + 0xec, 0x34, 0xdc, 0xc5, 0xdd, 0x84, 0x47, 0x7f, 0xf9, 0x88, 0x59, 0xe2, + 0x6f, 0x96, 0x69, 0x62, 0xf7, 0xdb, 0xaf, 0x58, 0xbf, 0x74, 0x14, 0x33, + 0x8b, 0x17, 0xff, 0xb3, 0xe6, 0x49, 0x36, 0x8d, 0x32, 0x74, 0xb1, 0x7f, + 0xe7, 0x88, 0xc9, 0xc2, 0x1f, 0xe5, 0x62, 0xf7, 0x30, 0x6b, 0x17, 0x0b, + 0x16, 0x2a, 0x4f, 0xcc, 0x07, 0xe4, 0x3b, 0x7c, 0x07, 0x21, 0x2c, 0x56, + 0x26, 0x73, 0xb9, 0x5b, 0x42, 0xfc, 0x45, 0xb7, 0x87, 0x9b, 0x2c, 0x5e, + 0xe9, 0x3a, 0x58, 0xbc, 0xdc, 0x75, 0x8b, 0xf9, 0xa2, 0x7f, 0x88, 0x0b, + 0x15, 0x88, 0x88, 0x71, 0xed, 0x0f, 0xfc, 0x72, 0xf1, 0x93, 0xd6, 0x2c, + 0x5f, 0xdf, 0xe0, 0xa0, 0x52, 0xb1, 0x51, 0xe7, 0xa2, 0xc4, 0x77, 0xc4, + 0x66, 0x0d, 0x62, 0xff, 0x14, 0xc7, 0x61, 0x39, 0xab, 0x17, 0xfb, 0xcd, + 0xdf, 0x1b, 0xb0, 0x96, 0x2f, 0xc0, 0x98, 0x73, 0x16, 0x2f, 0xb3, 0x93, + 0xa5, 0x8b, 0xb4, 0x0c, 0x3c, 0xa2, 0x28, 0xb4, 0xac, 0x5e, 0x79, 0x25, + 0x8a, 0x93, 0xd8, 0xd1, 0x67, 0x84, 0x6b, 0xac, 0x6d, 0xcc, 0x63, 0x53, + 0x14, 0x1d, 0xc7, 0x0c, 0xac, 0x3e, 0x36, 0x11, 0x3b, 0xc3, 0xbb, 0xb8, + 0xc9, 0x5e, 0x76, 0xfa, 0x3e, 0x1a, 0x11, 0x4a, 0x75, 0xd4, 0x7f, 0xe7, + 0x8e, 0x53, 0xf1, 0xad, 0x01, 0x27, 0xaf, 0x47, 0x28, 0xd6, 0xfd, 0x0c, + 0xae, 0x90, 0x8c, 0x08, 0x92, 0x38, 0x8c, 0x33, 0x5e, 0xa8, 0x6c, 0xde, + 0x3b, 0xc1, 0x62, 0xc2, 0x58, 0xbf, 0x6b, 0x3a, 0x4f, 0x6b, 0x17, 0x8b, + 0x3c, 0xb1, 0x7f, 0xfb, 0xb8, 0x73, 0x92, 0xfd, 0xfb, 0xd2, 0x75, 0x8a, + 0xd2, 0x25, 0x08, 0xac, 0x21, 0xcb, 0xd9, 0x9e, 0x58, 0xbf, 0xf6, 0xd8, + 0x52, 0x17, 0x8d, 0x6e, 0x2c, 0x5f, 0xec, 0xe8, 0xcf, 0xbe, 0x12, 0xc5, + 0xc5, 0xec, 0x3f, 0x52, 0x41, 0xbf, 0xdf, 0x97, 0xf0, 0x26, 0x0b, 0x17, + 0xbc, 0xf8, 0xb1, 0x7b, 0x06, 0xeb, 0x17, 0xdd, 0xc2, 0x4e, 0xb1, 0x46, + 0x1e, 0xe4, 0x8e, 0x78, 0x72, 0x9d, 0x1d, 0x3c, 0x2b, 0x0a, 0x11, 0xf7, + 0x85, 0xee, 0x2c, 0x5f, 0xff, 0xff, 0x1a, 0x61, 0x61, 0xa6, 0xf7, 0x0e, + 0x18, 0x59, 0xf2, 0xc0, 0x8c, 0x33, 0xf1, 0xcb, 0x17, 0xfd, 0x1e, 0xde, + 0x8a, 0x0f, 0xa8, 0x96, 0x2f, 0xc6, 0x6f, 0x21, 0x76, 0xb1, 0x7f, 0xd3, + 0x00, 0x9b, 0x5e, 0x9c, 0x58, 0xbf, 0xff, 0xff, 0xee, 0x19, 0xfc, 0xda, + 0x42, 0xee, 0x1c, 0x30, 0x5b, 0xeb, 0x52, 0x64, 0x46, 0xf6, 0x61, 0x9f, + 0x8e, 0x58, 0xbf, 0xbb, 0x32, 0x2c, 0xcd, 0xd6, 0x2f, 0xff, 0xff, 0xdd, + 0x46, 0x7f, 0xf2, 0x7d, 0x76, 0x28, 0x8c, 0x2c, 0xdd, 0xc6, 0x46, 0x19, + 0xf8, 0xe5, 0x8a, 0xeb, 0x57, 0x56, 0xfa, 0xec, 0x76, 0x61, 0x4c, 0x33, + 0x0c, 0x8d, 0xeb, 0x73, 0x57, 0x1e, 0x68, 0x45, 0x00, 0xfc, 0x8b, 0x7c, + 0x72, 0x28, 0x54, 0x74, 0x32, 0xbf, 0xff, 0xff, 0xff, 0xf9, 0xcc, 0xfe, + 0x70, 0x53, 0xd9, 0x67, 0xb9, 0xf3, 0x99, 0xf7, 0xc2, 0xce, 0x8f, 0x85, + 0x9d, 0xc3, 0x8e, 0x69, 0x86, 0x7e, 0x39, 0x62, 0xfd, 0xf9, 0x04, 0xc7, + 0xac, 0x5c, 0x77, 0x58, 0xa5, 0x8a, 0x01, 0xa3, 0x08, 0x5e, 0xfe, 0x84, + 0x0f, 0x14, 0xf5, 0x2c, 0x58, 0x0b, 0x14, 0xe8, 0xb5, 0x02, 0x71, 0x11, + 0x08, 0xce, 0xe8, 0xe9, 0x58, 0xbd, 0x26, 0xba, 0xc5, 0xfa, 0x62, 0x33, + 0x36, 0x58, 0xbe, 0x1c, 0xf2, 0x56, 0x2e, 0x93, 0xac, 0x5d, 0x3d, 0xac, + 0x5f, 0xdc, 0xc3, 0xf4, 0x1e, 0x2c, 0x5f, 0x6d, 0xb0, 0xbc, 0xb1, 0x46, + 0x23, 0x4a, 0x4a, 0xc6, 0x45, 0x10, 0xbf, 0x06, 0x04, 0x61, 0x44, 0x9b, + 0x0f, 0x06, 0xbd, 0x0e, 0xfb, 0xa3, 0xa3, 0x75, 0x8b, 0xff, 0xc0, 0x92, + 0xdc, 0xcc, 0x21, 0x43, 0x38, 0xb1, 0x7e, 0x06, 0x9f, 0xb0, 0x2c, 0x5f, + 0xbc, 0xd0, 0x70, 0x2c, 0x5f, 0xc6, 0x77, 0xe2, 0x91, 0xac, 0x59, 0xbb, + 0x44, 0x11, 0x15, 0x70, 0xa2, 0xff, 0xef, 0x43, 0x35, 0x86, 0x30, 0x53, + 0xd4, 0xb1, 0x7d, 0x9f, 0x78, 0x2c, 0x5f, 0xd9, 0xc2, 0xce, 0x8c, 0xb1, + 0x70, 0x8e, 0x61, 0xe8, 0x49, 0x15, 0xfc, 0xc5, 0x9b, 0x07, 0x05, 0x8b, + 0xf4, 0xc4, 0xcd, 0xa5, 0x8a, 0x01, 0xeb, 0xf0, 0xbe, 0xbb, 0x54, 0x85, + 0xf8, 0x66, 0x91, 0xaf, 0x21, 0x33, 0xe8, 0x42, 0xde, 0x32, 0x1b, 0xac, + 0x5f, 0xc6, 0x71, 0xa7, 0xb8, 0x2c, 0x5c, 0x0e, 0x2c, 0x53, 0x9e, 0x43, + 0x18, 0x5f, 0xff, 0x18, 0x59, 0xe7, 0xcd, 0x8a, 0x7c, 0xe7, 0x58, 0xbf, + 0xee, 0x19, 0x85, 0x22, 0xeb, 0xf8, 0xb1, 0x78, 0xce, 0xe0, 0xb1, 0x7f, + 0x8f, 0xf7, 0xf1, 0x49, 0xd6, 0x2f, 0x8f, 0x20, 0xe2, 0xc5, 0x75, 0xd5, + 0x7e, 0x96, 0x63, 0x8b, 0xc8, 0xe7, 0x0d, 0x35, 0x79, 0x4c, 0x47, 0x5b, + 0xfb, 0x40, 0x08, 0x09, 0x3f, 0x87, 0xe2, 0x20, 0x08, 0xce, 0xe8, 0x46, + 0x8b, 0x17, 0xe8, 0xdc, 0xd1, 0xce, 0xcb, 0x17, 0xff, 0xf6, 0x8c, 0x2c, + 0xe9, 0x9a, 0x81, 0x92, 0x36, 0x8b, 0x8b, 0x16, 0x65, 0x8b, 0xff, 0xda, + 0xf8, 0x4c, 0x33, 0x03, 0x00, 0x1f, 0xa9, 0x62, 0xff, 0xec, 0x0b, 0xa8, + 0xe2, 0x73, 0xe1, 0x01, 0x62, 0xff, 0xff, 0xdd, 0xc9, 0xa5, 0x83, 0xfb, + 0xc4, 0x67, 0x33, 0xb8, 0x6b, 0x02, 0x58, 0xa7, 0x45, 0xd1, 0x24, 0x5f, + 0xee, 0xbf, 0x86, 0x1b, 0xa6, 0x09, 0x62, 0xb1, 0x3d, 0xb8, 0x98, 0x18, + 0x44, 0xa3, 0x0c, 0x11, 0x0d, 0xfd, 0x26, 0xe0, 0xe3, 0xa3, 0x75, 0x8b, + 0xef, 0x0a, 0x76, 0x58, 0xbf, 0x36, 0xb8, 0xe3, 0x58, 0xbf, 0x0c, 0x3e, + 0xf0, 0x6b, 0x15, 0x03, 0xd3, 0x22, 0x8b, 0xfb, 0x3f, 0x87, 0x9d, 0xd6, + 0x2e, 0x1e, 0x2c, 0x54, 0x9f, 0x34, 0x08, 0x5c, 0xba, 0xfc, 0xfa, 0x7e, + 0x98, 0xb1, 0x50, 0x4d, 0xa9, 0xcd, 0xfd, 0x0d, 0xde, 0xa2, 0xdb, 0xe8, + 0xec, 0xd4, 0xac, 0x5f, 0xd3, 0xcf, 0xc9, 0x79, 0x62, 0xff, 0xec, 0x23, + 0x3a, 0x9f, 0xfb, 0x3e, 0x69, 0x62, 0xff, 0xfb, 0x3d, 0xe9, 0x08, 0xcc, + 0xfe, 0x08, 0xb7, 0x58, 0xbd, 0xdc, 0x38, 0x74, 0x4d, 0x7d, 0x22, 0xd1, + 0xeb, 0x16, 0x0d, 0x62, 0xf7, 0xb3, 0x8b, 0x15, 0x04, 0xd0, 0xb2, 0x18, + 0xfb, 0x9b, 0x00, 0x54, 0x42, 0x77, 0xff, 0xf8, 0xb3, 0x7f, 0xb9, 0x60, + 0xbb, 0xf1, 0x8c, 0x16, 0x1a, 0xb1, 0x79, 0xf6, 0xe2, 0xc5, 0xff, 0xb3, + 0x76, 0xdb, 0xf9, 0xbe, 0x12, 0xc5, 0xec, 0xd8, 0x4b, 0x16, 0x08, 0xc4, + 0x70, 0x63, 0x27, 0xc7, 0x89, 0x02, 0xfc, 0x29, 0xf9, 0x4a, 0xc5, 0xff, + 0xed, 0x63, 0xec, 0x67, 0x25, 0xf6, 0x6f, 0x2c, 0x58, 0xd1, 0x9f, 0x9e, + 0x13, 0xdf, 0xd0, 0xe1, 0xa2, 0x9e, 0xd6, 0x2f, 0xb0, 0x6d, 0x05, 0x8a, + 0xec, 0xf4, 0xc2, 0x31, 0xbe, 0xd4, 0xce, 0xcb, 0x17, 0xd1, 0x4f, 0x99, + 0x62, 0xff, 0x4e, 0xdc, 0x98, 0x9f, 0xa2, 0xc5, 0xe8, 0x87, 0x05, 0x8a, + 0xd8, 0xf5, 0xb0, 0xde, 0xe6, 0x0b, 0x88, 0xbe, 0x11, 0x18, 0x6f, 0x37, + 0xba, 0x78, 0x35, 0x8a, 0x95, 0x4e, 0x39, 0x0b, 0x67, 0x7b, 0x28, 0x71, + 0x04, 0x7b, 0x74, 0xf1, 0x62, 0xe9, 0x25, 0x8a, 0xf1, 0xad, 0x0c, 0x5e, + 0xff, 0x9f, 0x5b, 0x08, 0x18, 0x58, 0xb1, 0x74, 0x47, 0x58, 0xbf, 0xd0, + 0xe7, 0x85, 0x83, 0x32, 0x23, 0xd2, 0x01, 0xcd, 0xff, 0xdf, 0x10, 0x5c, + 0x7f, 0x7d, 0xd8, 0x0b, 0x17, 0xff, 0xd8, 0xfc, 0x30, 0x7a, 0x7d, 0xbc, + 0x68, 0xb4, 0xb1, 0x6c, 0x1a, 0x26, 0xb7, 0x46, 0xbf, 0xf1, 0xb2, 0x50, + 0x0f, 0xaa, 0x4a, 0x0b, 0x15, 0xda, 0x6a, 0x65, 0x0e, 0x7f, 0x14, 0xdc, + 0x78, 0x2c, 0x5f, 0xfe, 0x9d, 0x6e, 0x68, 0x31, 0x8b, 0xb8, 0x71, 0x62, + 0xa0, 0x7c, 0xbc, 0x18, 0xbe, 0xcd, 0x49, 0xd6, 0x2f, 0x16, 0x74, 0x30, + 0xf1, 0x08, 0x8a, 0xff, 0xff, 0xb8, 0x58, 0x37, 0x08, 0xc2, 0xce, 0xaf, + 0x3f, 0x05, 0x3a, 0x58, 0xad, 0x26, 0xfb, 0xc8, 0x6f, 0xf8, 0xd2, 0xff, + 0xff, 0x45, 0xcc, 0xdb, 0x1f, 0x46, 0x31, 0x7a, 0x2c, 0xd6, 0x2c, 0x5f, + 0xff, 0x16, 0x74, 0x33, 0x52, 0x4d, 0xee, 0x48, 0x16, 0x2f, 0xf1, 0x1a, + 0x58, 0xfd, 0xf9, 0x62, 0xdd, 0x16, 0x2b, 0x64, 0x4c, 0xe2, 0x8f, 0x0d, + 0x2a, 0x53, 0x62, 0x73, 0x61, 0x43, 0xf2, 0xdb, 0xac, 0x5f, 0xe0, 0xb5, + 0x87, 0x3b, 0x12, 0xc5, 0xf4, 0xe7, 0xf8, 0xb1, 0x73, 0xec, 0xb1, 0x51, + 0x1b, 0xaf, 0x11, 0x51, 0xd1, 0x46, 0xc2, 0x60, 0x6e, 0xbf, 0xdb, 0x96, + 0x0f, 0xed, 0xc5, 0x8b, 0xf8, 0x18, 0x43, 0xfc, 0xac, 0x5f, 0xdf, 0x72, + 0x00, 0x67, 0x58, 0xa7, 0x3d, 0xcf, 0x16, 0xdc, 0x37, 0x58, 0xbf, 0xff, + 0xbe, 0xf8, 0x58, 0xe3, 0xc9, 0x03, 0x6e, 0xda, 0x58, 0xbf, 0xdb, 0x49, + 0xca, 0x7b, 0x02, 0xc5, 0xfc, 0x66, 0x6b, 0x79, 0xc5, 0x8a, 0x94, 0xe1, + 0x21, 0x09, 0x0d, 0xc8, 0x7b, 0x17, 0x65, 0x80, 0xcd, 0x6f, 0x80, 0x2d, + 0x4a, 0xc5, 0xe6, 0xce, 0x2c, 0x5e, 0x7e, 0x98, 0xb1, 0x46, 0x1b, 0xad, + 0x0e, 0x51, 0xa7, 0xff, 0xf5, 0xda, 0x94, 0xc0, 0x32, 0x1b, 0xb6, 0x12, + 0xc5, 0xff, 0x34, 0x79, 0x60, 0xe4, 0xbc, 0xb1, 0x7f, 0xa6, 0x78, 0xfb, + 0x31, 0xd6, 0x2f, 0xec, 0xee, 0x0f, 0x84, 0xb1, 0x7d, 0x30, 0xcf, 0x2c, + 0x56, 0x8f, 0x3c, 0x8b, 0x6b, 0x11, 0xba, 0x47, 0x5e, 0x84, 0x15, 0xd9, + 0xb2, 0xc5, 0xf1, 0x16, 0x79, 0x62, 0xed, 0x84, 0xb1, 0x74, 0x9a, 0xb1, + 0x4b, 0x17, 0x37, 0x16, 0x28, 0xe6, 0x8c, 0x20, 0xcb, 0x8a, 0x56, 0x2f, + 0xb0, 0x3c, 0x3a, 0xc5, 0xf1, 0xa2, 0xd1, 0xab, 0x17, 0xc0, 0x3b, 0xf1, + 0x62, 0x8d, 0x3c, 0x9d, 0x13, 0x5e, 0x6d, 0x40, 0xc4, 0xe1, 0xfa, 0xd3, + 0x39, 0x18, 0x72, 0x13, 0x8c, 0xfc, 0xed, 0x88, 0x88, 0x58, 0x36, 0xca, + 0x31, 0xb5, 0x0e, 0x8d, 0xc7, 0x66, 0x50, 0x5e, 0x47, 0x73, 0xda, 0x2b, + 0xc6, 0xcf, 0xa9, 0x74, 0x27, 0x84, 0x07, 0xe7, 0x29, 0x9a, 0x1a, 0xe5, + 0x2a, 0xcf, 0x84, 0xe2, 0x94, 0xed, 0x7f, 0xed, 0x3e, 0xcc, 0x72, 0xec, + 0x44, 0xb1, 0x68, 0xf5, 0x8b, 0x79, 0x62, 0xe9, 0x02, 0xc5, 0xff, 0xe7, + 0x17, 0x5f, 0x26, 0x70, 0x40, 0x3e, 0x79, 0x62, 0xbb, 0x3e, 0x8d, 0x0b, + 0xdf, 0xfd, 0xbf, 0xe7, 0x9e, 0xd4, 0xf7, 0xf7, 0x58, 0xbf, 0xa1, 0xcc, + 0x16, 0x80, 0xb1, 0x7e, 0xce, 0x63, 0x92, 0xc5, 0xf1, 0x44, 0xe7, 0xec, + 0xf5, 0x7e, 0x5f, 0x7f, 0xe9, 0xdf, 0x92, 0xfd, 0xfa, 0x4e, 0xb1, 0x4b, + 0x17, 0x0a, 0x3d, 0x62, 0xfe, 0xdb, 0x02, 0xc7, 0x1a, 0xc5, 0x68, 0xf2, + 0xb8, 0x37, 0x50, 0x3f, 0x8f, 0x2b, 0x5c, 0x69, 0xd6, 0x2a, 0x53, 0xc9, + 0x68, 0x4e, 0x11, 0xd0, 0xa1, 0x71, 0x1c, 0x45, 0x7c, 0x0e, 0x6d, 0xe5, + 0x8b, 0xf9, 0xbf, 0x25, 0x30, 0x58, 0xbf, 0xff, 0xf7, 0xb2, 0x4b, 0x37, + 0x26, 0xda, 0x75, 0xa9, 0xf7, 0xf0, 0x6b, 0x17, 0xdd, 0x0b, 0x38, 0x62, + 0x25, 0xf0, 0xb2, 0xff, 0x0c, 0xb3, 0xde, 0xcd, 0x2c, 0x5f, 0xfe, 0x2c, + 0x37, 0xed, 0x0f, 0x84, 0xc1, 0x9d, 0x62, 0xa5, 0x10, 0x18, 0x67, 0x7f, + 0xe6, 0x34, 0xcf, 0x33, 0x11, 0x9b, 0x2c, 0x54, 0xa7, 0xb4, 0xf0, 0xbc, + 0xfc, 0x2e, 0xc8, 0x86, 0xfc, 0x0c, 0x3c, 0xee, 0xb1, 0x79, 0xbd, 0xc5, + 0x8b, 0x85, 0xb2, 0xc5, 0x40, 0xdb, 0x68, 0x76, 0xfd, 0x90, 0xfb, 0x41, + 0x62, 0xa2, 0x3c, 0x9f, 0x90, 0xd8, 0xa5, 0x19, 0x7e, 0x85, 0x45, 0xdf, + 0x8f, 0x58, 0xbf, 0xff, 0xff, 0xfb, 0xdc, 0x92, 0x33, 0x72, 0x16, 0xdf, + 0xc1, 0xe9, 0x8c, 0xf7, 0x3f, 0x8e, 0x3f, 0x37, 0xe0, 0x05, 0x8b, 0xfc, + 0xc4, 0x1f, 0xff, 0x23, 0x58, 0xbf, 0xe8, 0xa7, 0x5e, 0x9c, 0x2d, 0xd6, + 0x2f, 0xff, 0x72, 0x70, 0xcd, 0x4f, 0x9f, 0x77, 0x1a, 0xc5, 0x62, 0x21, + 0x7c, 0x75, 0x77, 0x61, 0x2c, 0x58, 0x25, 0x8b, 0xb7, 0x30, 0x66, 0xb7, + 0xb1, 0xaa, 0xe1, 0xff, 0x89, 0x3e, 0xfe, 0xfe, 0x0f, 0x59, 0xda, 0xc5, + 0xee, 0xe4, 0xd5, 0x8b, 0xff, 0xff, 0xb5, 0x26, 0x7f, 0x3a, 0xbd, 0x3a, + 0xdc, 0xb3, 0xda, 0x17, 0x70, 0xe2, 0xc5, 0xdf, 0xc2, 0x44, 0xc7, 0x87, + 0xeb, 0xb4, 0x7a, 0x05, 0x0c, 0x7b, 0xe1, 0x44, 0xc3, 0x58, 0xbf, 0x67, + 0xb5, 0x81, 0x2c, 0x5b, 0x73, 0x0f, 0x37, 0xe4, 0x95, 0x28, 0xa1, 0x77, + 0x7b, 0xb5, 0x05, 0x8b, 0xff, 0x85, 0x84, 0x69, 0x9f, 0x2c, 0xf7, 0x16, + 0x2f, 0xff, 0xc1, 0xc8, 0x5b, 0xfd, 0xcf, 0x9d, 0x99, 0x9d, 0xf9, 0x62, + 0xfe, 0x6e, 0x67, 0x83, 0xd9, 0x62, 0x8c, 0x44, 0x61, 0xab, 0x97, 0xc6, + 0x6e, 0x14, 0xac, 0x54, 0x0f, 0x2c, 0xe4, 0xb5, 0x2b, 0xaa, 0x50, 0x2c, + 0xc1, 0xbe, 0xe1, 0x48, 0xf1, 0x9c, 0x6a, 0x3b, 0x73, 0x90, 0xfc, 0x61, + 0xa3, 0x1d, 0xbf, 0xfd, 0xa6, 0x81, 0x8c, 0x5e, 0x8b, 0x35, 0x8b, 0x17, + 0xe8, 0xdb, 0x4f, 0x26, 0xac, 0x5f, 0xbd, 0xf9, 0x7d, 0xd6, 0x28, 0xd3, + 0xd7, 0xf1, 0x75, 0xf1, 0x33, 0x7d, 0x62, 0xff, 0xff, 0x61, 0xf5, 0xa7, + 0x30, 0xbb, 0xc0, 0x8b, 0x05, 0x86, 0xac, 0x50, 0xd1, 0x09, 0xf2, 0x1a, + 0xd2, 0x6d, 0x85, 0x0a, 0x2e, 0x42, 0x9e, 0xfd, 0x9c, 0xf3, 0x69, 0x62, + 0xff, 0xf7, 0x31, 0x88, 0xce, 0x77, 0x25, 0x3c, 0x58, 0xb4, 0x3e, 0x7e, + 0x5e, 0x28, 0xbf, 0xa4, 0x73, 0xf9, 0x82, 0xc5, 0xfe, 0x9f, 0x18, 0xdb, + 0xbf, 0x45, 0x8a, 0xd1, 0xf2, 0x11, 0x6d, 0xff, 0xff, 0x9f, 0xbf, 0x37, + 0xcb, 0x07, 0xf7, 0x8b, 0x9b, 0xe3, 0x94, 0x4b, 0x17, 0xff, 0xd3, 0xe3, + 0x08, 0x5d, 0x46, 0x67, 0xa3, 0xb3, 0xcb, 0x15, 0x29, 0xb9, 0xbc, 0x23, + 0x34, 0x42, 0x26, 0xeb, 0xf7, 0xe4, 0x0d, 0xe5, 0x8b, 0x9b, 0xcb, 0x17, + 0xf8, 0xcf, 0x13, 0x7a, 0x7c, 0xb1, 0x7f, 0xd0, 0x32, 0x4c, 0xf7, 0x05, + 0x1e, 0xb1, 0x77, 0xe4, 0xd3, 0xf4, 0xd1, 0xa5, 0xfd, 0xdc, 0x1f, 0xe2, + 0x3a, 0xc5, 0xff, 0x6e, 0x67, 0xf0, 0xe2, 0xd6, 0xcb, 0x17, 0x3e, 0xcb, + 0x14, 0x62, 0x21, 0xa4, 0xc3, 0xc7, 0xd5, 0xa4, 0xe5, 0xfe, 0x50, 0x08, + 0x45, 0x94, 0x2d, 0x2f, 0xc1, 0x37, 0xe2, 0x8d, 0xd6, 0x2f, 0xfb, 0x06, + 0x67, 0x8d, 0x70, 0xb8, 0xb1, 0x6c, 0xd1, 0xf6, 0xf4, 0x30, 0xb8, 0xd0, + 0x2c, 0x5f, 0xfc, 0x3f, 0xce, 0xbe, 0xf8, 0x59, 0xd1, 0x62, 0xb4, 0x7b, + 0xc1, 0x0c, 0xdf, 0xfc, 0x4c, 0x67, 0xd9, 0xf9, 0xc7, 0x3a, 0xc5, 0xfe, + 0x6d, 0x16, 0x0c, 0x99, 0x62, 0xa4, 0xfd, 0x44, 0x89, 0x7f, 0xf6, 0xa5, + 0xc7, 0x9f, 0xc3, 0x4d, 0x65, 0x8b, 0xf9, 0xbe, 0x6c, 0xe9, 0x96, 0x2f, + 0xb5, 0x82, 0xd9, 0x62, 0xff, 0x6b, 0x1c, 0xb6, 0x9d, 0xd6, 0x2f, 0xd2, + 0xfb, 0x37, 0x96, 0x2f, 0x6a, 0x23, 0x30, 0xf7, 0x38, 0x69, 0x52, 0xac, + 0x70, 0x70, 0xb4, 0xc8, 0x43, 0xfe, 0x13, 0x0c, 0x42, 0x48, 0xbe, 0x2e, + 0x14, 0x20, 0x2f, 0xff, 0x08, 0x81, 0xc3, 0x38, 0x2f, 0x4f, 0xb8, 0xb1, + 0x7f, 0xdc, 0xd6, 0xb3, 0xfd, 0xc3, 0x8b, 0x15, 0x88, 0x89, 0x12, 0x6d, + 0xcc, 0x05, 0x8b, 0xff, 0xe3, 0x0a, 0x79, 0x3b, 0x16, 0x0f, 0xef, 0x12, + 0xc5, 0xff, 0xff, 0xdc, 0xd1, 0x4c, 0x46, 0x07, 0xe7, 0x86, 0x77, 0xec, + 0xe8, 0x59, 0xc5, 0x8a, 0xd2, 0x32, 0x09, 0x46, 0xa0, 0x99, 0x1f, 0x88, + 0x85, 0x0d, 0xfa, 0x58, 0xbb, 0xf1, 0xeb, 0x17, 0xff, 0xc4, 0xc0, 0x33, + 0xd9, 0xf2, 0xcf, 0x7d, 0xd6, 0x2f, 0xff, 0xf3, 0x1a, 0x67, 0x57, 0x9c, + 0x8d, 0xe4, 0xe1, 0x0f, 0xf2, 0xb1, 0x7d, 0x25, 0xbb, 0x7d, 0x16, 0x9e, + 0x4f, 0xbf, 0xfe, 0x6d, 0x37, 0xfb, 0x86, 0x79, 0x88, 0x30, 0x2c, 0x52, + 0xc5, 0xfd, 0x2e, 0x4d, 0xa3, 0x56, 0x2e, 0xf1, 0x86, 0x9b, 0x9f, 0x86, + 0x5e, 0x34, 0xd9, 0x58, 0xb4, 0x16, 0x29, 0xcd, 0x8c, 0x43, 0xf7, 0xff, + 0x67, 0x70, 0x33, 0x22, 0xfc, 0x91, 0xab, 0x15, 0x2a, 0x99, 0xe0, 0x18, + 0x6c, 0x33, 0xf7, 0x39, 0xee, 0x11, 0x5a, 0x60, 0x39, 0x0d, 0xfe, 0xd1, + 0x66, 0xf9, 0x31, 0xeb, 0x17, 0xff, 0xfd, 0xfc, 0xec, 0xcd, 0xb1, 0xcb, + 0xd9, 0xb7, 0xb8, 0x4c, 0x6a, 0xc5, 0xff, 0xbd, 0xce, 0x8f, 0xe9, 0xc2, + 0x89, 0x62, 0xbe, 0x8a, 0xb2, 0x6a, 0xbf, 0xf6, 0xb6, 0xcc, 0xe0, 0xc9, + 0xbe, 0xb1, 0x7e, 0xd3, 0xf2, 0x7b, 0x58, 0xa9, 0x4d, 0xaf, 0x21, 0xc2, + 0xe4, 0x4c, 0x7f, 0x7f, 0xf8, 0xed, 0x11, 0x93, 0xff, 0xcf, 0x05, 0xc5, + 0x8b, 0xff, 0x85, 0x11, 0x98, 0xfa, 0x73, 0xc9, 0xab, 0x17, 0x43, 0x8e, + 0x89, 0x40, 0x26, 0xdf, 0xdd, 0x6c, 0x50, 0x7f, 0x71, 0x62, 0xf7, 0x03, + 0xe2, 0xc5, 0x6c, 0x7a, 0x87, 0x35, 0xba, 0x40, 0xb1, 0x7e, 0x2f, 0x7f, + 0x3a, 0x96, 0x2f, 0xd1, 0x71, 0xb4, 0x6a, 0xc5, 0xe6, 0x0b, 0x52, 0x7a, + 0xd8, 0x57, 0x7f, 0xf6, 0x11, 0x98, 0xfa, 0x73, 0xc9, 0xab, 0x17, 0xe8, + 0x9c, 0xa4, 0xeb, 0x17, 0xe9, 0x7d, 0xa4, 0xd5, 0x8b, 0x1b, 0x27, 0xa3, + 0xf2, 0x8b, 0xe3, 0x3b, 0x83, 0xac, 0x51, 0x1e, 0x6f, 0x8a, 0x2f, 0xe7, + 0xea, 0x68, 0x39, 0x2c, 0x5e, 0x29, 0x3a, 0xc5, 0xfb, 0xd1, 0x66, 0xb1, + 0x62, 0xe3, 0x5a, 0x07, 0x8a, 0x43, 0x95, 0x28, 0xc2, 0xc2, 0x17, 0x74, + 0xbf, 0x8f, 0xe3, 0x7e, 0x2e, 0xa5, 0x8b, 0xf1, 0xf8, 0x53, 0xa5, 0x8b, + 0xfe, 0x8f, 0x18, 0x8b, 0xc7, 0x27, 0x58, 0xa9, 0x44, 0xc6, 0x1a, 0x08, + 0xa2, 0xff, 0xde, 0x7d, 0x31, 0x0f, 0xf3, 0xc5, 0x8a, 0x82, 0xe7, 0x67, + 0x70, 0xd3, 0x78, 0x41, 0x44, 0x47, 0xa6, 0xd3, 0x99, 0x7e, 0x3a, 0x42, + 0x86, 0x2f, 0x8b, 0xaf, 0x9f, 0x76, 0xd2, 0xc5, 0xe3, 0xb0, 0x4b, 0x16, + 0xe4, 0x0f, 0x05, 0x88, 0xef, 0xb3, 0xa3, 0x69, 0x62, 0xfe, 0x1e, 0x14, + 0x3f, 0x8b, 0x15, 0x27, 0xa2, 0xe4, 0x97, 0xff, 0xb1, 0xc2, 0x30, 0xb0, + 0x05, 0x8d, 0x12, 0xc5, 0xf3, 0xeb, 0x0d, 0x58, 0xb7, 0x0c, 0x3e, 0xd8, + 0xe4, 0xab, 0xfe, 0xfb, 0xea, 0x2f, 0xb6, 0x69, 0x62, 0xff, 0xff, 0xfe, + 0x07, 0x0b, 0x1b, 0xb3, 0x07, 0xf1, 0x18, 0x59, 0xdc, 0x30, 0x5b, 0x16, + 0x37, 0x6b, 0x15, 0x88, 0xf3, 0xdc, 0xb1, 0xce, 0xaf, 0xff, 0xb5, 0x8c, + 0x11, 0x83, 0x29, 0xdc, 0xe4, 0xeb, 0x17, 0xb3, 0x90, 0x58, 0xb9, 0xb7, + 0x54, 0x93, 0x05, 0x8d, 0x58, 0xaf, 0x9e, 0xab, 0x0e, 0x88, 0x96, 0xfd, + 0xb3, 0x1f, 0x91, 0xcb, 0x17, 0xfb, 0x86, 0x45, 0xcf, 0xc8, 0xd6, 0x2f, + 0xf4, 0x82, 0x7a, 0xbf, 0x9c, 0x58, 0xa8, 0x8f, 0xb4, 0x8d, 0xef, 0xff, + 0xf7, 0xb9, 0x86, 0xbe, 0x8c, 0x0f, 0xcf, 0xf7, 0x37, 0xee, 0xb1, 0x52, + 0xb8, 0x39, 0xb3, 0xc6, 0x47, 0x00, 0x69, 0x7e, 0xf0, 0xa6, 0x72, 0xe6, + 0x84, 0xd0, 0x64, 0x57, 0xf6, 0x13, 0x1c, 0x8e, 0xb1, 0x71, 0xbb, 0xac, + 0x56, 0xe7, 0x8d, 0xa2, 0xcb, 0xff, 0xfd, 0xee, 0x07, 0xc3, 0x32, 0x1f, + 0x97, 0xd0, 0x0e, 0xd0, 0x58, 0xbf, 0xe2, 0xee, 0x1c, 0xf4, 0xea, 0x25, + 0x8b, 0xc5, 0x9f, 0x58, 0xbc, 0x4e, 0x12, 0xc5, 0xff, 0x6e, 0x26, 0xfe, + 0x79, 0xbe, 0xb1, 0x43, 0x3f, 0x3c, 0x1c, 0xec, 0x76, 0xb1, 0x1b, 0xde, + 0x85, 0x7d, 0xff, 0x9b, 0xbc, 0x7d, 0x39, 0xe4, 0xd5, 0x8b, 0xc1, 0xc9, + 0x2c, 0x5e, 0xc7, 0x02, 0xc5, 0xb1, 0x62, 0xd8, 0x03, 0x5b, 0xd0, 0x72, + 0xe7, 0xd9, 0x62, 0x96, 0x18, 0xb8, 0xbb, 0x58, 0xb1, 0x6e, 0xcc, 0x45, + 0xd9, 0x25, 0x71, 0x00, 0x43, 0x57, 0xb3, 0xbf, 0x2c, 0x54, 0xaa, 0xe8, + 0xc2, 0x37, 0x8d, 0x0b, 0x44, 0xed, 0x0f, 0xa8, 0xe4, 0x4b, 0xd8, 0x2d, + 0x2c, 0x5e, 0x92, 0xf2, 0xc5, 0xa2, 0x58, 0xbf, 0xc0, 0x78, 0x7d, 0xc8, + 0x0b, 0x17, 0xc2, 0xce, 0xc9, 0x62, 0xb6, 0x3e, 0x97, 0x13, 0x39, 0x9d, + 0x82, 0x58, 0xb9, 0xc6, 0xb1, 0x51, 0xe6, 0xab, 0x82, 0x77, 0xfb, 0xb9, + 0x0b, 0x84, 0x28, 0x96, 0x2e, 0x1c, 0x4b, 0x17, 0xfd, 0xac, 0x1f, 0xe4, + 0x23, 0x89, 0x62, 0xfe, 0xfe, 0x0d, 0xcb, 0xcb, 0x16, 0xd9, 0x62, 0xef, + 0xf1, 0x62, 0x8d, 0x35, 0x6c, 0x27, 0x7f, 0x13, 0x05, 0xec, 0xfa, 0xc5, + 0xf4, 0x74, 0xeb, 0x16, 0x2a, 0x53, 0xd4, 0xc5, 0x9d, 0x12, 0x1c, 0xdf, + 0xe3, 0x3e, 0x3b, 0x09, 0x62, 0x38, 0x84, 0x32, 0xeb, 0xf7, 0xc4, 0x6e, + 0x6c, 0xb1, 0x7e, 0xc3, 0x9d, 0x8e, 0xb1, 0x71, 0xc0, 0xb1, 0x46, 0x23, + 0xb4, 0x70, 0x82, 0xd1, 0x58, 0x0a, 0x2d, 0xf7, 0x57, 0x12, 0xd2, 0xd1, + 0xaf, 0xed, 0x4f, 0x89, 0x80, 0xb1, 0x5a, 0x3d, 0xde, 0xa3, 0x0b, 0xfb, + 0xb8, 0x14, 0xe7, 0x16, 0x2f, 0xfc, 0xd9, 0xf6, 0xfb, 0x67, 0xd9, 0x62, + 0xff, 0x45, 0x98, 0x69, 0xb3, 0x12, 0xc5, 0xff, 0xb1, 0xf7, 0xcf, 0x49, + 0x7b, 0x8b, 0x17, 0xfe, 0xe0, 0xba, 0x8c, 0xe1, 0xba, 0x92, 0x58, 0xa3, + 0x11, 0x06, 0xe7, 0xd4, 0x62, 0x68, 0xff, 0x2e, 0x23, 0xce, 0xa8, 0x5d, + 0x57, 0x6b, 0xb6, 0xaf, 0x38, 0x06, 0xd1, 0xb6, 0x5f, 0xde, 0xcd, 0xb3, + 0x51, 0x2c, 0x5f, 0xbe, 0x60, 0x26, 0x3d, 0x62, 0xff, 0xf9, 0xf8, 0x67, + 0xdb, 0x9e, 0x98, 0xb9, 0xfc, 0x58, 0xa9, 0x45, 0x7b, 0x18, 0x00, 0xb6, + 0x96, 0x2f, 0xe1, 0x38, 0xdc, 0x9d, 0x62, 0xc6, 0xb9, 0xb8, 0x38, 0x65, + 0xf9, 0xb9, 0xf6, 0x82, 0xc5, 0xf3, 0x41, 0xce, 0xb1, 0x7e, 0xdd, 0xb5, + 0x9b, 0xac, 0x5f, 0xf0, 0xbb, 0x87, 0x0c, 0xe7, 0xb7, 0x58, 0xbf, 0x8b, + 0xd0, 0xc0, 0x71, 0x62, 0xf1, 0xad, 0xc3, 0x11, 0x2f, 0xa2, 0xa6, 0x3f, + 0xaf, 0xa3, 0xef, 0xd0, 0xb9, 0xad, 0x26, 0xe5, 0xf2, 0x70, 0xa3, 0x23, + 0xbf, 0x7d, 0x9f, 0x69, 0x58, 0xbe, 0x6f, 0xb7, 0x6b, 0x14, 0xe7, 0x97, + 0xd0, 0xa2, 0xf4, 0x27, 0xb5, 0x8b, 0xf8, 0xdd, 0x6b, 0x3b, 0xe2, 0xc5, + 0xff, 0xf8, 0xb3, 0xbf, 0x19, 0xf6, 0xe8, 0x60, 0xfe, 0x2d, 0x96, 0x2f, + 0xdf, 0x9d, 0xb0, 0x25, 0x8b, 0xf3, 0xe7, 0x46, 0xd2, 0xc5, 0x4a, 0x2c, + 0x06, 0xbb, 0xc2, 0xab, 0xfb, 0x90, 0x7e, 0x08, 0xeb, 0x14, 0x73, 0xde, + 0xf1, 0x7d, 0xfd, 0x9c, 0x83, 0x83, 0x16, 0x2f, 0x43, 0x3c, 0xb1, 0x50, + 0x3c, 0xaf, 0x16, 0xd4, 0xaa, 0x91, 0xc8, 0x41, 0xf6, 0x46, 0xe3, 0xcd, + 0x19, 0xf8, 0x9b, 0x2f, 0xf8, 0xb3, 0xc2, 0x01, 0xda, 0x0b, 0x17, 0xff, + 0x86, 0xf8, 0x11, 0x9c, 0x97, 0xd9, 0xbc, 0xb1, 0x7f, 0xfd, 0xb1, 0x67, + 0xb4, 0xe6, 0xe7, 0xdf, 0x22, 0x58, 0xbe, 0x7e, 0x4f, 0x6b, 0x17, 0xf6, + 0xc6, 0x34, 0x1c, 0x96, 0x2b, 0x64, 0xca, 0x3b, 0x39, 0xd2, 0x67, 0xd4, + 0x48, 0x8e, 0xfd, 0xde, 0xe5, 0x3d, 0x16, 0x2f, 0xe0, 0x8c, 0x88, 0x9c, + 0x6b, 0x17, 0xff, 0x00, 0x85, 0xc2, 0xcf, 0x71, 0xf8, 0xb1, 0x58, 0x7e, + 0xa4, 0x63, 0x7e, 0x33, 0x85, 0x3a, 0x58, 0xbe, 0x7f, 0x14, 0xac, 0x5b, + 0x0e, 0x79, 0x5c, 0x29, 0xbf, 0x9b, 0x51, 0x41, 0xfe, 0xb1, 0x7f, 0x85, + 0xb7, 0xdf, 0xa6, 0x44, 0xb1, 0x7f, 0x07, 0xff, 0xc9, 0x6e, 0xb1, 0x7c, + 0x52, 0x7e, 0x2c, 0x5f, 0x67, 0xd8, 0xeb, 0x17, 0x37, 0x7c, 0x3f, 0x4f, + 0x18, 0x06, 0x45, 0x52, 0xaa, 0x57, 0x13, 0x1e, 0x14, 0x3f, 0x6a, 0x62, + 0x7e, 0x17, 0x8a, 0x15, 0x97, 0xec, 0x20, 0x60, 0xd6, 0x2f, 0xf0, 0xff, + 0x3a, 0x1b, 0x9d, 0x62, 0xee, 0x71, 0x62, 0xd8, 0xb1, 0x7f, 0xce, 0x6b, + 0xf8, 0xb3, 0xa8, 0xcd, 0x1a, 0x9e, 0x83, 0x17, 0xff, 0xb3, 0x9f, 0x7f, + 0xe6, 0xb5, 0x9e, 0xe2, 0xc5, 0xfc, 0x40, 0xc3, 0xb7, 0x6b, 0x17, 0xdf, + 0xfb, 0xf1, 0x62, 0x9c, 0xf4, 0x58, 0xba, 0xa0, 0x9c, 0x9e, 0xe4, 0xf1, + 0x2e, 0x92, 0xa7, 0x48, 0x4d, 0xdf, 0xff, 0xe2, 0xcd, 0xfd, 0xe9, 0xf7, + 0x22, 0x2c, 0x08, 0xc9, 0xeb, 0x16, 0x2f, 0xfd, 0xbc, 0x9f, 0xf9, 0xcc, + 0x72, 0x58, 0xa9, 0x45, 0x3f, 0xda, 0x6f, 0xff, 0xfd, 0x09, 0xd7, 0x70, + 0xe1, 0x9c, 0x14, 0xf6, 0x4d, 0xef, 0xb4, 0x4b, 0x17, 0xed, 0x4f, 0x49, + 0xd2, 0xc5, 0xff, 0xff, 0xec, 0x2f, 0xbe, 0x6f, 0xf9, 0xd3, 0x73, 0xed, + 0xdc, 0x39, 0xee, 0x3a, 0xc5, 0xff, 0xff, 0xd3, 0xec, 0xf0, 0xb7, 0xcf, + 0xbe, 0x6f, 0x3e, 0xfe, 0x0f, 0x23, 0xd6, 0x2f, 0xbc, 0x71, 0x12, 0xc5, + 0xed, 0xf0, 0xeb, 0x17, 0xd9, 0xb8, 0xa2, 0x58, 0xa9, 0x3c, 0x3d, 0x0f, + 0x5f, 0xe3, 0x33, 0x9c, 0x7c, 0x09, 0x62, 0xa2, 0x3d, 0x6d, 0x10, 0xdf, + 0xff, 0xff, 0x63, 0x8c, 0xcc, 0xfb, 0xeb, 0xec, 0x67, 0xf0, 0x65, 0x8d, + 0xde, 0x6c, 0xb1, 0x52, 0x9a, 0xeb, 0xc2, 0xf3, 0xe4, 0x77, 0xff, 0xfd, + 0x82, 0xec, 0xd0, 0x34, 0x5c, 0xcd, 0x60, 0xff, 0x82, 0xed, 0x62, 0xfe, + 0x62, 0x30, 0x72, 0x4b, 0x17, 0xb6, 0xdf, 0xcb, 0x15, 0x2b, 0x9d, 0xb9, + 0x0f, 0xae, 0xc8, 0x9d, 0xc7, 0xe5, 0x44, 0xf1, 0xc8, 0xf4, 0xbc, 0x68, + 0x26, 0xb0, 0xcb, 0x6f, 0xff, 0x3f, 0x84, 0xdb, 0x6f, 0xf7, 0x1b, 0x92, + 0xc5, 0xef, 0x1a, 0xeb, 0x15, 0xd7, 0x9f, 0x49, 0x25, 0xdf, 0x61, 0xe7, + 0x75, 0x8b, 0xfb, 0x77, 0xdb, 0x3b, 0xf2, 0xc5, 0x40, 0xf5, 0x02, 0x23, + 0xb4, 0x72, 0xc5, 0xfc, 0x03, 0x27, 0x76, 0x0d, 0x62, 0xff, 0xa7, 0x0a, + 0x06, 0x4f, 0x49, 0x58, 0xa3, 0x51, 0x00, 0x42, 0xbe, 0x31, 0xbf, 0x6b, + 0x06, 0xd0, 0x58, 0xa9, 0x47, 0xdb, 0xc2, 0x8d, 0x8c, 0x2f, 0x4e, 0xa0, + 0xb1, 0x7f, 0xff, 0x0b, 0xb8, 0x70, 0xc9, 0x21, 0xfe, 0x63, 0xb3, 0x52, + 0xb1, 0x7f, 0x0a, 0x23, 0x0e, 0xde, 0x58, 0xad, 0x22, 0x47, 0xec, 0x14, + 0x63, 0xe1, 0x46, 0x46, 0x88, 0x1d, 0x75, 0x15, 0x97, 0xad, 0xa3, 0xec, + 0x84, 0xa2, 0xf1, 0xcf, 0x31, 0x64, 0xa0, 0x13, 0x65, 0x0f, 0xef, 0x39, + 0xe9, 0xdc, 0xa2, 0xf7, 0x95, 0x3b, 0x14, 0xf6, 0x4e, 0xa7, 0x3c, 0xcf, + 0x2e, 0xcb, 0xf3, 0xc3, 0x00, 0x87, 0x79, 0x4e, 0x34, 0xf2, 0x70, 0x7b, + 0xd3, 0xdd, 0x82, 0x8c, 0x03, 0xa4, 0x6e, 0xa1, 0x19, 0x75, 0x42, 0xba, + 0xff, 0xfc, 0x5b, 0x99, 0xf9, 0x7d, 0x39, 0xde, 0x3a, 0x4e, 0xb1, 0x7b, + 0x93, 0xda, 0xc5, 0xed, 0xb3, 0x65, 0x8b, 0xf8, 0xbc, 0x02, 0x9d, 0x2c, + 0x5f, 0xe6, 0x08, 0xc6, 0x1b, 0x6c, 0xb1, 0x7f, 0xff, 0x60, 0xcb, 0x18, + 0x23, 0x18, 0xbd, 0x16, 0x6b, 0x16, 0x2f, 0xff, 0xff, 0x73, 0x67, 0xc2, + 0xf1, 0xc5, 0x25, 0xec, 0xe3, 0xe1, 0x0e, 0x49, 0x62, 0xbb, 0x46, 0x7f, + 0x96, 0xef, 0xff, 0x98, 0x7c, 0x62, 0xf1, 0x91, 0x3f, 0x80, 0xcb, 0x17, + 0xff, 0x7b, 0x83, 0xfc, 0xc7, 0x0b, 0xef, 0xa5, 0x8a, 0xc4, 0xfc, 0x34, + 0x5a, 0xd1, 0x82, 0x91, 0x20, 0x94, 0x6f, 0x43, 0xbd, 0xd6, 0x2f, 0xfc, + 0x7d, 0x67, 0x63, 0xc7, 0x23, 0x56, 0x2f, 0x13, 0x8d, 0x62, 0xe6, 0x08, + 0xc3, 0xdc, 0x89, 0x02, 0xe8, 0x01, 0x62, 0xed, 0x8e, 0xb1, 0x46, 0x1b, + 0x17, 0x18, 0xbf, 0xff, 0x13, 0xec, 0x63, 0xe1, 0x66, 0xfd, 0x5e, 0xc3, + 0xac, 0x5e, 0x3c, 0xee, 0xb1, 0x7b, 0xbf, 0xe4, 0x47, 0xee, 0x05, 0x9b, + 0xff, 0xf8, 0xef, 0xdc, 0x38, 0x58, 0x3f, 0xcc, 0x76, 0x6a, 0x56, 0x2f, + 0xff, 0xec, 0xd9, 0x8b, 0xdc, 0x9d, 0xcc, 0x39, 0xdc, 0xb7, 0x58, 0xbf, + 0xa1, 0xc8, 0xa1, 0x31, 0x2c, 0x50, 0xd1, 0x1f, 0xda, 0xf5, 0xff, 0xec, + 0x1f, 0xde, 0x23, 0x1f, 0xf2, 0x79, 0x58, 0xbe, 0x69, 0xee, 0x0b, 0x16, + 0x19, 0x1f, 0x77, 0x12, 0xea, 0x51, 0x72, 0xd0, 0x92, 0xbe, 0x81, 0x49, + 0xd6, 0x2f, 0x14, 0x9d, 0x62, 0xff, 0xbf, 0x9b, 0xce, 0xbb, 0x87, 0x0c, + 0x37, 0xd0, 0x22, 0xbf, 0xf8, 0xc2, 0xce, 0xf3, 0x9f, 0x2c, 0x35, 0x62, + 0xbb, 0x44, 0xc4, 0x4a, 0x57, 0xf8, 0xcd, 0x63, 0xfe, 0x46, 0xb1, 0x52, + 0x7b, 0x24, 0x4b, 0x4b, 0x16, 0xfa, 0xc5, 0x46, 0xc5, 0xf6, 0xe1, 0x97, + 0x4c, 0x7a, 0xc5, 0x4a, 0xff, 0xb8, 0xd6, 0x70, 0x78, 0xd9, 0x41, 0xee, + 0x9d, 0xa7, 0xcf, 0xb0, 0xb4, 0x26, 0x00, 0x6a, 0x51, 0xd3, 0x0a, 0x35, + 0x5e, 0x87, 0xc1, 0x93, 0x5f, 0xff, 0x16, 0x74, 0x33, 0xb8, 0x4e, 0xc5, + 0x82, 0x95, 0x8b, 0xec, 0x23, 0x63, 0xd6, 0x2f, 0xff, 0xff, 0xdf, 0x7f, + 0x7f, 0x35, 0x3d, 0x0c, 0x38, 0xba, 0x8c, 0xce, 0xe1, 0x82, 0x20, 0x71, + 0x62, 0x9d, 0x16, 0x5c, 0x26, 0xad, 0x26, 0x4f, 0xe8, 0xc1, 0x6f, 0xff, + 0x8a, 0x2f, 0xcb, 0xe9, 0xce, 0xf1, 0xd2, 0x75, 0x8b, 0x9c, 0xeb, 0x17, + 0x9e, 0x77, 0x58, 0xbf, 0xfe, 0xee, 0x04, 0xf1, 0x18, 0x59, 0xee, 0x3e, + 0x96, 0x29, 0xd1, 0xb1, 0x12, 0x91, 0x0b, 0x84, 0x3b, 0x7f, 0x98, 0xb0, + 0x78, 0xff, 0x58, 0xbf, 0xcf, 0x17, 0xd8, 0xa6, 0x56, 0x2b, 0xb3, 0xe3, + 0x39, 0x8d, 0xff, 0xfe, 0xd6, 0xb0, 0x66, 0x77, 0x09, 0xdb, 0x59, 0xce, + 0x4f, 0x6b, 0x17, 0xfe, 0x03, 0xe6, 0x8c, 0xe9, 0x23, 0x8f, 0x58, 0xa3, + 0xa3, 0x38, 0x22, 0x3e, 0xa6, 0x6b, 0xbf, 0x05, 0x8b, 0x81, 0xc5, 0x8b, + 0x87, 0x8b, 0x17, 0xe2, 0xef, 0x34, 0x64, 0x0f, 0x1f, 0x83, 0x1d, 0x06, + 0x2c, 0x6a, 0xc5, 0x6e, 0x7c, 0x5e, 0x4f, 0xbf, 0xfc, 0x29, 0x2f, 0x70, + 0xc9, 0xe6, 0xa7, 0x8b, 0x17, 0xf8, 0xbc, 0x67, 0x30, 0xa5, 0x62, 0xfe, + 0x84, 0x5f, 0x7e, 0xfc, 0xb1, 0x52, 0x7c, 0x8c, 0x67, 0x7f, 0xa1, 0xc9, + 0x37, 0xcf, 0xb2, 0xc5, 0xfe, 0x11, 0x7a, 0x7a, 0x37, 0xd6, 0x2f, 0xfc, + 0xc1, 0x7b, 0x3f, 0x84, 0xd0, 0x58, 0xa8, 0x1f, 0x99, 0x1a, 0xdf, 0xec, + 0x34, 0xc9, 0xdf, 0x0e, 0xb1, 0x7f, 0xfb, 0x04, 0x46, 0xfb, 0x53, 0xd8, + 0x39, 0x2b, 0x17, 0x38, 0xd6, 0x2b, 0x11, 0x33, 0xd9, 0xb0, 0x13, 0x2f, + 0xe3, 0xe1, 0x7a, 0x3b, 0x16, 0x2f, 0xcd, 0xc3, 0xc9, 0x2c, 0x5f, 0x1e, + 0x73, 0xcb, 0x17, 0xa7, 0x73, 0x30, 0xfe, 0x48, 0xc2, 0x38, 0x9e, 0xfd, + 0x25, 0xe3, 0x06, 0xb1, 0x7f, 0x49, 0xf3, 0x08, 0xd5, 0x8b, 0xf7, 0x8c, + 0x07, 0x60, 0x58, 0xa7, 0x44, 0x17, 0xca, 0x44, 0x5b, 0x7f, 0xfb, 0xef, + 0xbf, 0xf0, 0xce, 0x0b, 0xf3, 0x1e, 0xb1, 0x7f, 0x14, 0xf7, 0x07, 0x25, + 0x8a, 0x58, 0xbf, 0xd9, 0xf2, 0xcf, 0x7d, 0xd6, 0x28, 0x67, 0xd6, 0x45, + 0xbe, 0x0c, 0xbf, 0xef, 0x4c, 0x39, 0x14, 0x27, 0x65, 0x8b, 0x66, 0x26, + 0x4b, 0xdc, 0x2e, 0xfc, 0x5d, 0x7f, 0xff, 0xed, 0xc6, 0x2d, 0x83, 0x26, + 0xf4, 0x81, 0xe0, 0xfe, 0x29, 0x02, 0xc5, 0xff, 0xff, 0x0b, 0x9f, 0x68, + 0x19, 0xe7, 0x30, 0xb0, 0xf9, 0x25, 0xb2, 0xc5, 0xff, 0xf7, 0xbf, 0x80, + 0x30, 0xf3, 0x9e, 0x1e, 0x12, 0xc5, 0xb4, 0xb1, 0x60, 0x96, 0x2f, 0xe6, + 0x1e, 0xb4, 0x2d, 0x96, 0x2f, 0xd3, 0x85, 0xe8, 0xe5, 0x8b, 0x46, 0x8b, + 0x15, 0x88, 0x96, 0x34, 0x4b, 0x71, 0x33, 0x98, 0x70, 0xaa, 0xfb, 0xcf, + 0xac, 0x58, 0xb7, 0x66, 0x1f, 0x6e, 0x25, 0xd6, 0x26, 0xf8, 0xd1, 0xa9, + 0xd6, 0x2a, 0x7a, 0xd3, 0x77, 0x23, 0xe4, 0xbf, 0xff, 0xff, 0xef, 0x8b, + 0x85, 0x83, 0xc7, 0xf9, 0x9b, 0xfd, 0xfa, 0xbe, 0x2e, 0x16, 0x6c, 0xc6, + 0x1a, 0x6a, 0xc5, 0x6c, 0xc8, 0x7d, 0x1c, 0x2b, 0xfb, 0x20, 0x8a, 0x15, + 0x3a, 0x85, 0xd1, 0xe1, 0x53, 0xf8, 0x62, 0x94, 0x6a, 0x9e, 0x95, 0x6b, + 0xd4, 0x6f, 0x7f, 0xff, 0x16, 0x05, 0x9b, 0x19, 0x1f, 0x8c, 0x69, 0x9a, + 0x0b, 0x4b, 0x17, 0xff, 0x6b, 0x0f, 0xf9, 0x33, 0xa0, 0xe3, 0xf1, 0x62, + 0xff, 0xff, 0x60, 0x59, 0xb0, 0xfe, 0x22, 0xdc, 0xb3, 0xdf, 0x7e, 0xd6, + 0x2f, 0xff, 0xff, 0xa1, 0xc2, 0x63, 0x7f, 0x9f, 0xee, 0x4c, 0x2c, 0x16, + 0x7b, 0xf9, 0xb4, 0xac, 0x5f, 0xff, 0xf8, 0x5d, 0xc3, 0x86, 0x63, 0x82, + 0x4b, 0x3b, 0xf0, 0xfe, 0x20, 0x96, 0x2f, 0xff, 0xff, 0x3e, 0x1f, 0x3e, + 0xf8, 0x73, 0x0b, 0x3d, 0xfc, 0x87, 0xdf, 0x0e, 0xb1, 0x7f, 0xff, 0xf3, + 0xe7, 0xb8, 0x59, 0xd3, 0x9b, 0xfe, 0x42, 0xea, 0xcf, 0xbe, 0x1d, 0x62, + 0xff, 0xff, 0xe8, 0x3f, 0x0b, 0x3a, 0x7f, 0x22, 0xfc, 0x94, 0x46, 0x36, + 0xef, 0xd1, 0x62, 0xff, 0xff, 0xba, 0xbf, 0x3f, 0x73, 0x58, 0xe7, 0x73, + 0x33, 0xef, 0x87, 0x58, 0xbf, 0xfc, 0x17, 0x70, 0xe1, 0x67, 0x4f, 0x6b, + 0x02, 0x58, 0xbf, 0xfc, 0xf8, 0x11, 0x67, 0x33, 0xff, 0x7e, 0x2c, 0x5b, + 0x37, 0x4f, 0xcb, 0xb7, 0x77, 0x78, 0x66, 0xaf, 0x28, 0x5f, 0xff, 0xcf, + 0x81, 0x16, 0x6d, 0x82, 0xf1, 0x31, 0xad, 0xc5, 0x8b, 0xff, 0x66, 0xbf, + 0x26, 0x37, 0x85, 0x2b, 0x17, 0xff, 0x73, 0x37, 0x33, 0xb8, 0x70, 0x9e, + 0x25, 0x8b, 0xff, 0xda, 0xcf, 0x73, 0xab, 0xd3, 0xcf, 0xbe, 0x2c, 0x5f, + 0xf9, 0xb5, 0xcf, 0x3e, 0x6c, 0x52, 0xb1, 0x7e, 0x2c, 0xe9, 0xfc, 0xd2, + 0x22, 0xf8, 0x9b, 0x69, 0xf2, 0x62, 0x81, 0x43, 0x52, 0x9d, 0x38, 0x2d, + 0x46, 0xa7, 0x7f, 0xff, 0xd8, 0x46, 0x99, 0xa9, 0xe8, 0xfe, 0xe6, 0x1a, + 0xfa, 0x6e, 0xd6, 0x2f, 0xff, 0xff, 0xef, 0x67, 0xcb, 0x3a, 0x19, 0x9a, + 0x9f, 0x3e, 0xee, 0x33, 0x27, 0xc5, 0x3d, 0xc1, 0x62, 0xb6, 0x5f, 0xb7, + 0x1b, 0x26, 0xe9, 0x7d, 0xb2, 0x69, 0xff, 0xee, 0x25, 0x29, 0x9f, 0x8a, + 0x1e, 0x8f, 0x74, 0x32, 0x9e, 0xa6, 0xba, 0x96, 0xc6, 0xfd, 0xe9, 0x14, + 0x02, 0xa4, 0x38, 0xdf, 0x9b, 0x9a, 0x6e, 0x2c, 0x5f, 0xfe, 0x71, 0x98, + 0x77, 0x32, 0x46, 0xd1, 0x71, 0x62, 0xff, 0x7e, 0x76, 0x30, 0xb0, 0x6b, + 0x17, 0xef, 0x64, 0x42, 0x89, 0x62, 0xa2, 0x3e, 0x0e, 0xa3, 0x5b, 0xf7, + 0xdf, 0xd8, 0x75, 0x8b, 0x41, 0x62, 0xff, 0xef, 0xb9, 0x0c, 0x3d, 0xcb, + 0x3f, 0x8b, 0x17, 0xfe, 0x87, 0xa6, 0x07, 0x9c, 0x21, 0xac, 0x5f, 0xed, + 0xb8, 0xff, 0xfc, 0xec, 0xb1, 0x6c, 0xec, 0xfd, 0x1c, 0xfa, 0xfe, 0xf7, + 0x7b, 0xbf, 0xe2, 0x58, 0xa3, 0x13, 0x72, 0xeb, 0x49, 0xa0, 0x51, 0x10, + 0x91, 0x42, 0xe7, 0x84, 0xf5, 0x2a, 0xa0, 0xb6, 0x94, 0x3f, 0x7f, 0x8d, + 0x2c, 0xe8, 0x59, 0xc5, 0x8a, 0x82, 0xb0, 0xbd, 0x4a, 0xaa, 0x22, 0xcb, + 0xf7, 0x39, 0x25, 0xba, 0xc5, 0xff, 0xf1, 0x44, 0x67, 0xf7, 0x7e, 0x60, + 0xf6, 0xc0, 0x96, 0x2f, 0xff, 0xff, 0xb0, 0x5f, 0x33, 0xde, 0x9f, 0x72, + 0x22, 0xc0, 0x8c, 0xdf, 0xef, 0xf1, 0x79, 0x62, 0xb1, 0x30, 0x26, 0x29, + 0x25, 0x5b, 0xde, 0xce, 0x2c, 0x5b, 0x6f, 0x9e, 0x5f, 0x8b, 0xaf, 0xd0, + 0x9e, 0xe1, 0xc5, 0x8b, 0xff, 0xff, 0xff, 0x61, 0x1a, 0x63, 0xfc, 0x51, + 0x91, 0x3f, 0xa4, 0xe4, 0xc6, 0xfd, 0xe3, 0x33, 0xfd, 0x82, 0x46, 0x91, + 0x7f, 0xff, 0x9f, 0x5f, 0xce, 0xdb, 0xb3, 0x0e, 0x42, 0xf1, 0x9d, 0x38, + 0xb1, 0x7f, 0xff, 0xe7, 0x08, 0x62, 0xd1, 0x82, 0x9d, 0xb9, 0xbf, 0xc5, + 0xfe, 0xd8, 0x25, 0x8b, 0xff, 0xfb, 0x3a, 0x49, 0x19, 0xc7, 0xd3, 0x01, + 0x8a, 0x29, 0x58, 0xad, 0xd1, 0xa3, 0xf7, 0x5b, 0xfe, 0x2c, 0x10, 0x46, + 0x4f, 0x48, 0xf5, 0x8b, 0x6d, 0xda, 0xa6, 0xa7, 0x2a, 0x3c, 0x28, 0xf9, + 0x19, 0xcf, 0x51, 0x25, 0x62, 0xaf, 0x41, 0x4a, 0x93, 0xbf, 0xff, 0xb1, + 0xc1, 0xc3, 0x03, 0xf3, 0xf0, 0xb3, 0xa3, 0x8d, 0x62, 0xff, 0xd9, 0x17, + 0x70, 0xe3, 0x9d, 0xa2, 0x58, 0xb7, 0x56, 0x91, 0x41, 0xc5, 0xeb, 0xf1, + 0x67, 0xbe, 0xeb, 0x17, 0xfe, 0xfb, 0xe6, 0xf3, 0xef, 0xbe, 0x2c, 0x56, + 0x22, 0x44, 0xd2, 0xce, 0xa2, 0x7b, 0x87, 0x8b, 0x15, 0x2d, 0xf3, 0xde, + 0x46, 0x04, 0xf1, 0xb7, 0x7e, 0xb2, 0x9c, 0x69, 0x6a, 0x05, 0x38, 0xf2, + 0x28, 0xd7, 0x23, 0x8c, 0xee, 0xcd, 0x2c, 0x5b, 0xa9, 0x62, 0xd1, 0xa2, + 0xc5, 0xe9, 0xfe, 0x2c, 0x58, 0xeb, 0x17, 0xff, 0xe9, 0x39, 0xad, 0xd9, + 0x8c, 0x5e, 0x8b, 0x35, 0x8b, 0x17, 0xf4, 0x30, 0xec, 0x40, 0x58, 0xaf, + 0xa2, 0x15, 0x96, 0x2f, 0xb3, 0xf3, 0x12, 0xc5, 0x46, 0x88, 0xdc, 0xfc, + 0x25, 0xd8, 0x8a, 0xee, 0x62, 0xc5, 0xc7, 0xdc, 0xc3, 0xd0, 0x73, 0x9b, + 0xf6, 0x9f, 0xb8, 0x71, 0x62, 0xff, 0xfe, 0x1f, 0xdf, 0x0f, 0x9b, 0xff, + 0x3b, 0x81, 0x3c, 0x4b, 0x17, 0xfd, 0x2f, 0xa7, 0x88, 0xcf, 0x71, 0x62, + 0xff, 0xc5, 0x86, 0x7a, 0x22, 0x93, 0x99, 0x88, 0x98, 0xfa, 0xed, 0xff, + 0xf6, 0x0f, 0x0e, 0x67, 0x5c, 0xeb, 0x91, 0xaf, 0xac, 0x33, 0xa7, 0x16, + 0x2f, 0xff, 0x71, 0x88, 0xc6, 0x2f, 0x45, 0x9a, 0xc5, 0x8b, 0x6c, 0x34, + 0xf4, 0x35, 0x0c, 0x2f, 0xab, 0xf1, 0xb6, 0xd1, 0xeb, 0x17, 0xef, 0xb9, + 0xca, 0x56, 0x2f, 0x84, 0x40, 0xe2, 0xc5, 0x00, 0xf2, 0xbc, 0x4f, 0x7f, + 0xfe, 0xe3, 0xe1, 0x00, 0xc2, 0xce, 0x85, 0x9c, 0xe8, 0xb1, 0x7f, 0xcf, + 0x84, 0x03, 0x3a, 0xeb, 0x1b, 0xc6, 0xeb, 0x17, 0xdb, 0x96, 0x74, 0x31, + 0x14, 0x9c, 0x58, 0xbf, 0xe3, 0x5b, 0xdc, 0x88, 0x9c, 0x25, 0x8b, 0xd9, + 0xa8, 0x96, 0x2f, 0x1d, 0xf8, 0xb1, 0x4e, 0x6e, 0xd8, 0x7a, 0xfd, 0xf6, + 0x3b, 0xf1, 0x62, 0x8d, 0x45, 0xf7, 0xdd, 0xf8, 0x3f, 0x5a, 0x4c, 0xb0, + 0xa1, 0xf7, 0x7f, 0xfb, 0xe2, 0xc2, 0x34, 0xcf, 0x77, 0x0c, 0x25, 0x8b, + 0xfd, 0x8c, 0x73, 0x23, 0xa4, 0xeb, 0x17, 0xff, 0xa1, 0x3c, 0xf8, 0xb5, + 0x9e, 0xf3, 0x9d, 0x62, 0x86, 0x8c, 0xfd, 0xd3, 0x7b, 0x37, 0xbf, 0xf1, + 0x60, 0x8d, 0xd3, 0xc9, 0xf1, 0x62, 0xfe, 0x11, 0x66, 0xc2, 0xed, 0x62, + 0xff, 0xf6, 0x38, 0xfe, 0xe7, 0x98, 0xff, 0xe6, 0xcb, 0x17, 0xff, 0xd2, + 0x61, 0x60, 0xfe, 0xe6, 0x8e, 0x4d, 0x02, 0xc5, 0x69, 0x19, 0xfe, 0x30, + 0x12, 0x6d, 0x62, 0xa6, 0x6d, 0x43, 0xdc, 0xe6, 0x45, 0x18, 0x6d, 0xff, + 0xd3, 0x9c, 0xf7, 0x24, 0xd3, 0x00, 0x12, 0xc5, 0xfe, 0xd1, 0xbe, 0x36, + 0x4a, 0x25, 0x8b, 0xff, 0xde, 0xfe, 0x75, 0x7a, 0x2c, 0x8f, 0x62, 0x02, + 0xc5, 0xfe, 0x93, 0xb1, 0x77, 0x09, 0x58, 0xac, 0x45, 0xd9, 0x1b, 0xf9, + 0x46, 0xff, 0xfb, 0x27, 0xb3, 0x3a, 0x78, 0xcd, 0x4f, 0xe6, 0x25, 0x8b, + 0x86, 0x75, 0x8b, 0xff, 0x38, 0x0c, 0x2c, 0xe8, 0xfa, 0x65, 0x8b, 0x7d, + 0x62, 0xff, 0xe3, 0x3f, 0x2f, 0xee, 0x4e, 0xd9, 0xc5, 0x8a, 0x93, 0xd8, + 0xd0, 0x95, 0x62, 0x2e, 0x45, 0x09, 0x8b, 0xff, 0x7e, 0x5f, 0xdc, 0x72, + 0xee, 0x0b, 0x17, 0xfe, 0x70, 0x8c, 0xfc, 0xbe, 0x85, 0x1e, 0xb1, 0x40, + 0x44, 0x1f, 0x8f, 0xe9, 0xd5, 0x11, 0x7c, 0xb9, 0x95, 0xbd, 0x0d, 0x11, + 0x42, 0xaa, 0xf8, 0x23, 0x39, 0x12, 0xc5, 0xbc, 0xb1, 0x52, 0x6e, 0x58, + 0x9e, 0xff, 0xc5, 0xb1, 0x67, 0x4e, 0x0a, 0x7b, 0x58, 0xbf, 0xef, 0xcf, + 0x66, 0x75, 0xce, 0x80, 0x75, 0x8b, 0xec, 0xe9, 0x24, 0xb1, 0x7d, 0xdc, + 0x1e, 0x39, 0x62, 0xbe, 0x79, 0x5e, 0x23, 0xa1, 0xa2, 0xc3, 0x90, 0x8e, + 0xa9, 0x4c, 0x6b, 0x68, 0x79, 0x54, 0xb2, 0x97, 0x60, 0x95, 0x8b, 0xef, + 0x38, 0xb0, 0x49, 0x1c, 0x96, 0x4b, 0xe8, 0x46, 0x8a, 0x33, 0x9b, 0xf7, + 0x4e, 0xaf, 0x67, 0xd6, 0x2c, 0x4b, 0x17, 0xff, 0x7d, 0xf2, 0x2f, 0xbe, + 0xdd, 0xc1, 0xd6, 0x2d, 0xba, 0xc5, 0xff, 0xb3, 0x82, 0x93, 0x79, 0x3a, + 0x89, 0x62, 0x9d, 0x1b, 0x5a, 0x2e, 0x21, 0x1e, 0x88, 0xe1, 0x09, 0xdf, + 0xff, 0x09, 0x88, 0xcf, 0x7e, 0x7d, 0xcf, 0xb4, 0x16, 0x2e, 0x61, 0xac, + 0x5f, 0xc5, 0x91, 0x40, 0x5d, 0x4b, 0x17, 0xd0, 0x16, 0xde, 0x58, 0xb6, + 0xa0, 0x7d, 0xc6, 0x8b, 0xf6, 0x65, 0x7f, 0xff, 0xff, 0xfe, 0xf7, 0x3f, + 0x8e, 0x3f, 0xe6, 0xef, 0xad, 0x38, 0x4f, 0x84, 0x6f, 0x30, 0x7f, 0x16, + 0xc6, 0x34, 0x58, 0xcb, 0x17, 0x36, 0xeb, 0x17, 0xed, 0x64, 0x73, 0x81, + 0x62, 0xff, 0x6f, 0xf7, 0xf9, 0x0b, 0x65, 0x8b, 0xf4, 0xf6, 0x0d, 0x4a, + 0xc5, 0x40, 0xf7, 0xfc, 0x6d, 0x5b, 0x22, 0xb0, 0xa1, 0x15, 0x7b, 0xd9, + 0xd7, 0xac, 0x5f, 0x40, 0xa4, 0xeb, 0x14, 0x62, 0x7c, 0x9d, 0x6c, 0x2d, + 0x26, 0x18, 0x98, 0x50, 0x22, 0x2b, 0x7d, 0x62, 0xff, 0xc4, 0xdd, 0xf2, + 0x5f, 0x66, 0xf2, 0xc5, 0x00, 0xf4, 0x7a, 0x09, 0x52, 0xc5, 0xe7, 0x2c, + 0x58, 0xb7, 0x30, 0xd3, 0xc4, 0x19, 0x79, 0xe7, 0x8b, 0x17, 0xef, 0x00, + 0x32, 0x82, 0xc5, 0xe0, 0xf3, 0x8b, 0x16, 0x9c, 0x3c, 0x83, 0x4a, 0xaf, + 0xfe, 0x39, 0x85, 0x9f, 0xf1, 0x63, 0x44, 0xb1, 0x76, 0x7d, 0x62, 0xa5, + 0x35, 0x9c, 0x4b, 0xf9, 0x39, 0x32, 0x08, 0x9e, 0x39, 0x16, 0xd2, 0xb1, + 0x7f, 0xf7, 0x70, 0xd3, 0x9d, 0xa6, 0x29, 0x89, 0x62, 0xff, 0xfe, 0xe6, + 0x0f, 0x52, 0x11, 0x9f, 0x67, 0xe7, 0xf0, 0x0b, 0x14, 0x6a, 0x2d, 0x62, + 0x11, 0x24, 0x7b, 0xb0, 0x6b, 0x14, 0x63, 0x6b, 0x93, 0xd6, 0x0b, 0xf5, + 0xa2, 0xb2, 0x2f, 0xb4, 0x69, 0x10, 0xa6, 0x2e, 0x64, 0x6c, 0xbb, 0xa5, + 0xb4, 0x2f, 0xf9, 0x28, 0x6f, 0xd2, 0x80, 0xc5, 0x18, 0x6f, 0x43, 0x1b, + 0xee, 0x16, 0x74, 0x58, 0xbe, 0x14, 0x33, 0x8b, 0x17, 0x9e, 0x46, 0xb1, + 0x40, 0x3e, 0x32, 0x24, 0x08, 0x8e, 0xf0, 0xbd, 0xc5, 0x8b, 0xf7, 0x57, + 0xf0, 0x47, 0x58, 0xa2, 0x3c, 0xa1, 0x0f, 0x5f, 0x9f, 0xdc, 0xc0, 0x2c, + 0x5e, 0xe8, 0xfd, 0x16, 0x2f, 0x8f, 0xc6, 0x82, 0xc5, 0xbf, 0x87, 0x88, + 0x22, 0x1b, 0xff, 0xec, 0xd7, 0x6d, 0x11, 0x9f, 0x7d, 0x16, 0x6c, 0xb1, + 0x7f, 0xff, 0xbd, 0xf9, 0x88, 0xc2, 0xcf, 0xbf, 0xb8, 0x2d, 0xc5, 0x2b, + 0x14, 0x6a, 0x2d, 0xd9, 0x4e, 0xe1, 0x47, 0x2c, 0x51, 0x1b, 0xe0, 0x88, + 0xec, 0x05, 0x8b, 0xec, 0x89, 0xf4, 0xb1, 0x58, 0x6d, 0x7b, 0x12, 0xbf, + 0xf8, 0x80, 0x58, 0xf1, 0x7e, 0x48, 0xd5, 0x8a, 0x73, 0xe5, 0x62, 0x1b, + 0xc4, 0x23, 0xac, 0x5f, 0xb9, 0xe7, 0x9e, 0xd6, 0x2f, 0xfa, 0x7f, 0x83, + 0x14, 0x4c, 0x4b, 0x15, 0x03, 0xe2, 0xe1, 0x4d, 0xd9, 0xd1, 0x62, 0xff, + 0xff, 0x9a, 0x23, 0x39, 0xcc, 0xfe, 0xb5, 0x81, 0x16, 0x04, 0xc0, 0x58, + 0xbf, 0x49, 0x7d, 0xa0, 0xb1, 0x7f, 0xde, 0xcd, 0xa7, 0x8f, 0xac, 0x58, + 0xbd, 0x23, 0x95, 0x8a, 0x19, 0xfe, 0x76, 0x4e, 0x73, 0x9a, 0x58, 0xa5, + 0x8b, 0xfe, 0xf6, 0x6d, 0x3c, 0x7d, 0x62, 0xc5, 0xe9, 0x1c, 0xac, 0x5e, + 0xe3, 0x44, 0x62, 0x27, 0x64, 0xc3, 0x03, 0x3b, 0x0c, 0x39, 0xcd, 0xb0, + 0x93, 0xdf, 0xf4, 0x70, 0x77, 0xd1, 0xa7, 0x5d, 0x63, 0x68, 0xd1, 0x62, + 0xf9, 0xd8, 0x86, 0xb1, 0x60, 0x8c, 0x3d, 0xc1, 0x9d, 0xdf, 0xb1, 0xbb, + 0x87, 0x16, 0x2f, 0xff, 0x68, 0x61, 0x91, 0x9e, 0x7d, 0xc9, 0xf6, 0x58, + 0xbf, 0x45, 0xec, 0x2f, 0x2c, 0x56, 0x1f, 0xbb, 0x27, 0x50, 0x11, 0x80, + 0x14, 0x28, 0x2a, 0x09, 0xce, 0xbc, 0x22, 0xb9, 0x0e, 0xab, 0xed, 0xfe, + 0xfb, 0xac, 0x5f, 0x0b, 0xf2, 0x75, 0x8b, 0xff, 0xe1, 0x6b, 0x52, 0x58, + 0x6b, 0xff, 0xf8, 0x1a, 0xc5, 0xff, 0xd0, 0x83, 0x16, 0xd0, 0x7d, 0xe4, + 0xeb, 0x17, 0xff, 0x3f, 0xdc, 0xe6, 0x7d, 0xb5, 0x3c, 0x58, 0xa9, 0x4c, + 0x93, 0x09, 0x74, 0x46, 0xca, 0x20, 0x46, 0xbd, 0xd5, 0xce, 0xd6, 0x2f, + 0x48, 0x89, 0x62, 0xb0, 0xdf, 0x7c, 0x8a, 0xfd, 0xd1, 0x87, 0x20, 0x58, + 0xbc, 0xdd, 0xf9, 0x62, 0xa4, 0xf2, 0x04, 0x55, 0x7f, 0xa7, 0x7c, 0x3e, + 0x9b, 0x4b, 0x14, 0xb1, 0x62, 0x34, 0xf0, 0x3c, 0x69, 0x7d, 0x98, 0x17, + 0x5e, 0xb1, 0x7f, 0xff, 0xf1, 0xb9, 0xad, 0x39, 0xcc, 0x8a, 0x02, 0x3f, + 0x70, 0xe7, 0x27, 0x5b, 0xac, 0x5d, 0xf6, 0x58, 0xb3, 0x3a, 0x24, 0x7a, + 0x3d, 0x5f, 0x39, 0xb2, 0x75, 0x8b, 0xfa, 0x4b, 0xdf, 0xc1, 0xac, 0x54, + 0x9e, 0x87, 0x08, 0xef, 0x81, 0x23, 0x95, 0x8b, 0xc2, 0x1c, 0xac, 0x5f, + 0x31, 0xdf, 0xcb, 0x17, 0xff, 0xce, 0x37, 0x6f, 0x3b, 0x78, 0xce, 0x3c, + 0x4b, 0x15, 0x2c, 0xc0, 0xcd, 0x9e, 0x60, 0x42, 0x36, 0xcc, 0x8c, 0x70, + 0xd8, 0x5d, 0xee, 0x41, 0xdb, 0xfb, 0x91, 0x45, 0x2e, 0x57, 0x51, 0xaf, + 0x1e, 0x10, 0xdf, 0x68, 0x66, 0x10, 0x14, 0x14, 0x2e, 0x78, 0xf3, 0xe2, + 0x1e, 0x84, 0x41, 0x0e, 0xc7, 0x11, 0x5b, 0xa9, 0x62, 0xc1, 0x2c, 0x5e, + 0xda, 0x76, 0x58, 0xa5, 0x8b, 0xfb, 0x0e, 0x3f, 0xe7, 0x16, 0x2f, 0xdb, + 0x19, 0xbb, 0xec, 0xb1, 0x7f, 0xef, 0x96, 0x77, 0xef, 0xe0, 0xb7, 0x58, + 0xbf, 0xb9, 0xbe, 0xec, 0x46, 0xac, 0x54, 0x6a, 0x46, 0xce, 0xc1, 0x9a, + 0x2e, 0x62, 0xdf, 0x20, 0xdf, 0xe2, 0x33, 0xa7, 0x70, 0xe4, 0x4b, 0x17, + 0xff, 0x74, 0x6d, 0x19, 0xc7, 0xf4, 0x96, 0xeb, 0x17, 0xbe, 0xf1, 0x2c, + 0x5f, 0xdf, 0x7c, 0x2c, 0xe8, 0xb1, 0x68, 0x62, 0x25, 0x19, 0x23, 0x83, + 0xd7, 0xff, 0xf8, 0x7f, 0xcf, 0x79, 0x8b, 0x7c, 0x7d, 0x39, 0xe4, 0xd5, + 0x8b, 0x76, 0xb1, 0x6e, 0x8b, 0x15, 0xb1, 0xa7, 0xd0, 0x9d, 0xfb, 0xed, + 0x1f, 0x20, 0x58, 0xa1, 0xa7, 0xaf, 0xdc, 0x33, 0x9c, 0xd1, 0xa1, 0x11, + 0xd4, 0x45, 0x7e, 0x30, 0x3d, 0xa7, 0x65, 0x8b, 0xf1, 0x67, 0xdb, 0xcb, + 0x15, 0x03, 0xd4, 0x88, 0xb6, 0xfe, 0x35, 0xfb, 0xe0, 0xb8, 0xb1, 0x7b, + 0xaf, 0x8e, 0x75, 0x8a, 0xd1, 0xfc, 0x91, 0x18, 0x8c, 0x6f, 0xf7, 0xd9, + 0xfb, 0xe4, 0x9a, 0xb1, 0x7f, 0xee, 0x18, 0xc5, 0xe8, 0xb3, 0x58, 0xb1, + 0x43, 0x3f, 0x5f, 0x1a, 0xdf, 0xff, 0x7c, 0x5d, 0x5e, 0x9e, 0x78, 0x4c, + 0x1c, 0xe9, 0x62, 0xfc, 0x59, 0xb6, 0xa5, 0x62, 0xe2, 0x18, 0xcf, 0xf7, + 0x8a, 0xb7, 0xc3, 0x32, 0x63, 0xd6, 0x2a, 0x57, 0x38, 0x72, 0x51, 0x3b, + 0xc6, 0x48, 0xd0, 0xa3, 0x14, 0x27, 0xc3, 0x2d, 0xbf, 0xff, 0x43, 0x9e, + 0x9d, 0x85, 0xdf, 0x04, 0xe5, 0x27, 0x58, 0xbe, 0x33, 0xa6, 0x0d, 0x62, + 0xbb, 0x3f, 0xef, 0x2c, 0x5f, 0xe9, 0x30, 0xb3, 0xa6, 0x7d, 0x62, 0xce, + 0xb1, 0x4b, 0x17, 0xfc, 0x22, 0x32, 0x27, 0xd8, 0x51, 0x2c, 0x5f, 0xd8, + 0x38, 0xa1, 0x31, 0xeb, 0x17, 0xfc, 0x73, 0x09, 0xbd, 0x13, 0xf4, 0x58, + 0xbf, 0xff, 0xde, 0x2c, 0xf7, 0x3f, 0x86, 0x98, 0x58, 0x68, 0x18, 0x6b, + 0x16, 0x84, 0xa2, 0x83, 0x0f, 0x6e, 0xcd, 0x96, 0x2b, 0xb3, 0x7f, 0xc2, + 0x7b, 0xff, 0xbc, 0x6c, 0xf7, 0x0e, 0x77, 0x09, 0x35, 0x62, 0xc7, 0x58, + 0xbf, 0x8e, 0x4c, 0x6f, 0xdc, 0xc3, 0xdc, 0xd9, 0x2a, 0xff, 0x8f, 0xc6, + 0x8b, 0xab, 0xf9, 0xb2, 0xc5, 0x4a, 0x21, 0x71, 0x1a, 0xf6, 0x42, 0x56, + 0x2a, 0x37, 0x55, 0x37, 0xb0, 0x66, 0x8f, 0xbf, 0x18, 0x8f, 0xa3, 0x03, + 0xe8, 0x43, 0x7f, 0xc6, 0x16, 0x7b, 0x9f, 0xc3, 0x56, 0x2f, 0xa2, 0xfb, + 0xf1, 0x62, 0xb6, 0x3d, 0xff, 0x1d, 0xdd, 0x84, 0xb1, 0x7a, 0x12, 0x05, + 0x8a, 0x19, 0xb3, 0xc1, 0x6b, 0xee, 0x0d, 0x80, 0xb1, 0x7f, 0x3e, 0x9c, + 0xf2, 0x6a, 0xc5, 0xfe, 0xcf, 0xfe, 0x7b, 0x68, 0xf5, 0x8b, 0xb8, 0x66, + 0x1f, 0x2f, 0x0b, 0xab, 0xb4, 0x5b, 0x02, 0x11, 0x15, 0xa4, 0x7f, 0x94, + 0x35, 0xaf, 0xff, 0xce, 0x52, 0x73, 0x38, 0x29, 0xef, 0x06, 0xc7, 0x58, + 0xbe, 0x07, 0x23, 0xf7, 0x58, 0xa9, 0x4f, 0xe9, 0xe3, 0x55, 0x62, 0x71, + 0x2b, 0x5f, 0xb7, 0xfc, 0xea, 0x25, 0x8b, 0xfb, 0x59, 0xc6, 0x63, 0xac, + 0x5d, 0xe7, 0x58, 0xaf, 0x9f, 0x7b, 0x15, 0xf0, 0xb6, 0xfc, 0x0c, 0xf0, + 0x7b, 0x2c, 0x5f, 0xe3, 0x3f, 0xf9, 0xe0, 0xb8, 0xb1, 0x7f, 0xff, 0x7e, + 0x7b, 0x32, 0x27, 0xf4, 0x9c, 0x98, 0xdf, 0xba, 0xc5, 0xfe, 0x2c, 0x0b, + 0xab, 0xd9, 0xf5, 0x8b, 0xff, 0xff, 0xfe, 0x7c, 0xf6, 0xef, 0xe2, 0xc3, + 0x7e, 0xde, 0xcd, 0x8c, 0xc8, 0xbb, 0x87, 0x3d, 0xfc, 0xed, 0x62, 0xfe, + 0xe6, 0x7f, 0xce, 0x6a, 0xc5, 0xff, 0x73, 0xe2, 0x88, 0xc0, 0xa3, 0xfb, + 0x58, 0xb8, 0x46, 0xac, 0x5f, 0xff, 0x85, 0xdc, 0x39, 0xdc, 0x1b, 0xb3, + 0x07, 0xf7, 0x3a, 0xc5, 0xfb, 0x1c, 0xb0, 0xd5, 0x8b, 0xef, 0x67, 0xcc, + 0xd2, 0x20, 0xfe, 0xb9, 0x43, 0x54, 0xf1, 0x12, 0xf6, 0x8d, 0xf9, 0x09, + 0xaf, 0x17, 0xc7, 0x21, 0xf5, 0x42, 0x72, 0xa2, 0x56, 0x4a, 0x14, 0xaa, + 0xeb, 0xf7, 0x33, 0xc1, 0xec, 0xb1, 0x6f, 0x2c, 0x5b, 0x8b, 0x14, 0x69, + 0xa4, 0xec, 0x4a, 0xff, 0xbf, 0x3a, 0x2c, 0x00, 0xb8, 0xb1, 0x6f, 0x98, + 0x7b, 0x83, 0x23, 0xb8, 0x2f, 0x4a, 0x35, 0x32, 0x15, 0x77, 0xb6, 0x81, + 0xab, 0x15, 0x2b, 0x94, 0xb9, 0x2d, 0x41, 0xa3, 0x02, 0x11, 0x9d, 0x46, + 0xcd, 0x94, 0x27, 0x5d, 0x45, 0x64, 0x4e, 0x13, 0xbb, 0x39, 0x0e, 0xc3, + 0x48, 0xf7, 0x35, 0x79, 0x55, 0x9f, 0x95, 0x8c, 0xd0, 0xb0, 0x29, 0xcd, + 0x3b, 0xfb, 0xb8, 0x70, 0xc9, 0x25, 0x8b, 0xf0, 0x88, 0x79, 0xc5, 0x8b, + 0xff, 0x37, 0x33, 0x66, 0xf6, 0xd8, 0x12, 0xc5, 0xfd, 0x9b, 0x98, 0x09, + 0x89, 0x62, 0xa0, 0x7e, 0x5f, 0x41, 0xbf, 0xff, 0x88, 0x4d, 0x1e, 0x64, + 0xb8, 0x1e, 0x1f, 0x72, 0x02, 0xc5, 0xff, 0x67, 0xcc, 0x0d, 0xa3, 0xff, + 0x8b, 0x17, 0xf7, 0xf3, 0x78, 0x49, 0xd6, 0x2f, 0xf7, 0xf2, 0x0c, 0x59, + 0xda, 0xc5, 0x61, 0xf1, 0x78, 0xbe, 0xff, 0xff, 0xd0, 0x9d, 0xbb, 0x87, + 0x1c, 0xd3, 0x39, 0x9b, 0xb9, 0xc5, 0xad, 0x96, 0x2f, 0xfd, 0xbb, 0x8c, + 0xcc, 0xf1, 0x3f, 0x6b, 0x17, 0xbd, 0xb8, 0xd6, 0x2f, 0xba, 0xd2, 0x98, + 0x2c, 0x5f, 0xec, 0x08, 0xcf, 0xbe, 0x1d, 0x62, 0xff, 0xfb, 0x6c, 0x72, + 0xf1, 0x67, 0x43, 0x38, 0x11, 0x2c, 0x5f, 0xff, 0xfb, 0xcf, 0xa7, 0xda, + 0x7e, 0xf3, 0xee, 0x0b, 0x9f, 0xfb, 0x6c, 0xb1, 0x73, 0x00, 0xc4, 0xcf, + 0x23, 0x61, 0xfd, 0x89, 0xf8, 0x6a, 0x1a, 0x9d, 0x76, 0xa9, 0x3d, 0xdd, + 0x0a, 0x37, 0xdb, 0xff, 0xdb, 0xbf, 0xfe, 0xdc, 0x2c, 0x00, 0xb8, 0xb1, + 0x7f, 0xf3, 0xff, 0xed, 0xc2, 0xc0, 0x0b, 0x8b, 0x17, 0xfc, 0x44, 0x26, + 0x07, 0x98, 0x0b, 0x17, 0xe7, 0xf7, 0x30, 0xd3, 0x11, 0x8f, 0xba, 0x5b, + 0xa2, 0x5f, 0xdf, 0xc2, 0xee, 0x4d, 0x58, 0xbf, 0x98, 0xbc, 0x2d, 0x6c, + 0xb1, 0x52, 0xbc, 0x07, 0xb1, 0x83, 0xc2, 0x6b, 0xe4, 0x40, 0x5d, 0x28, + 0x50, 0x7a, 0x53, 0x87, 0x48, 0x7f, 0x04, 0x9c, 0x19, 0x7d, 0xdd, 0xf9, + 0x62, 0xdd, 0x4b, 0x14, 0x61, 0xae, 0x18, 0xcd, 0xa2, 0x58, 0xbf, 0xe3, + 0xf8, 0xa7, 0x4f, 0xee, 0x2c, 0x53, 0x9e, 0x63, 0x09, 0xdf, 0xfe, 0x37, + 0x9b, 0xfc, 0x5b, 0x16, 0x05, 0x9b, 0x2c, 0x56, 0x1f, 0x83, 0x90, 0x5f, + 0xf6, 0x44, 0x67, 0x27, 0xed, 0x1e, 0xb1, 0x7f, 0xff, 0xfd, 0x3d, 0xeb, + 0x3d, 0xe7, 0x3f, 0x3f, 0x9b, 0x66, 0xbf, 0x23, 0x79, 0xea, 0x58, 0xa7, + 0x45, 0xff, 0xcf, 0xaf, 0xff, 0xfb, 0xc6, 0x16, 0x7f, 0xe2, 0x2d, 0xb9, + 0xbb, 0xff, 0x1a, 0x25, 0x8b, 0xfc, 0xdd, 0xff, 0x3c, 0x06, 0x58, 0xbb, + 0x22, 0x58, 0xbf, 0xff, 0xb3, 0xc6, 0x7f, 0x3f, 0x82, 0x2d, 0xcc, 0xc7, + 0x1a, 0xc5, 0x4a, 0x62, 0x78, 0xd4, 0xe6, 0x82, 0x18, 0xbf, 0xf4, 0xfc, + 0xcd, 0x66, 0xd8, 0xc7, 0x58, 0xbc, 0xe5, 0x12, 0xc5, 0xff, 0x14, 0x83, + 0xb8, 0x72, 0x42, 0x58, 0xb8, 0xd8, 0x96, 0x2f, 0xbf, 0x3d, 0x99, 0x11, + 0xea, 0xf5, 0x1d, 0xdf, 0xfb, 0x08, 0xc2, 0xcf, 0xfd, 0x86, 0xb1, 0x5e, + 0x3f, 0xd1, 0x1f, 0xd6, 0x26, 0x23, 0xc8, 0x77, 0xdf, 0xec, 0xd8, 0xc8, + 0xb6, 0x06, 0x96, 0x2a, 0x07, 0xc3, 0xe2, 0x8b, 0xdd, 0x0d, 0x89, 0x62, + 0xff, 0x8d, 0x92, 0x88, 0xd1, 0x4c, 0x4b, 0x14, 0x61, 0xef, 0xf8, 0x8a, + 0xfa, 0x35, 0x46, 0xd1, 0xbf, 0x5a, 0xb1, 0x7f, 0xf7, 0xdc, 0x2c, 0xdc, + 0xcd, 0x0d, 0xf4, 0xb1, 0x6e, 0x18, 0x88, 0x1f, 0x9c, 0xdd, 0xa9, 0x58, + 0xbd, 0xa7, 0x3a, 0xc5, 0x49, 0xb4, 0x10, 0xbd, 0x44, 0x99, 0x10, 0x21, + 0x48, 0x4b, 0xd7, 0xff, 0x9a, 0x3c, 0xc1, 0xfe, 0x4c, 0x88, 0x98, 0x25, + 0x8b, 0xff, 0xf8, 0x66, 0x71, 0xe3, 0xa4, 0x81, 0xfc, 0x2c, 0x7f, 0xac, + 0x5f, 0xfe, 0x78, 0xe9, 0x20, 0x7f, 0x0b, 0x1f, 0xeb, 0x17, 0xb0, 0xe6, + 0x12, 0x29, 0xf8, 0xbb, 0x50, 0x4c, 0xb0, 0xa1, 0xf1, 0x6e, 0x2c, 0x5f, + 0xe6, 0x37, 0x07, 0xf1, 0x76, 0xb1, 0x52, 0x79, 0x04, 0x25, 0x7f, 0xe9, + 0xec, 0xce, 0x4b, 0xec, 0xde, 0x58, 0xbf, 0xd9, 0x3d, 0xc4, 0x52, 0x75, + 0x8a, 0xc3, 0xf5, 0xed, 0x06, 0xe1, 0x1a, 0xb1, 0x7c, 0x58, 0x2d, 0x96, + 0x2b, 0xe6, 0xf1, 0x86, 0x6e, 0x9d, 0xd6, 0x2e, 0x11, 0xab, 0x17, 0xdc, + 0x90, 0x71, 0x62, 0xe1, 0x47, 0xac, 0x5f, 0x8b, 0x3b, 0x87, 0x16, 0x2f, + 0x8f, 0x9e, 0xe1, 0x88, 0xb8, 0xdc, 0x83, 0xe3, 0x1c, 0x19, 0x8e, 0x23, + 0xea, 0x1b, 0xbf, 0xfd, 0x83, 0x30, 0xed, 0x0d, 0x3e, 0xcc, 0x75, 0x8b, + 0x9b, 0x4b, 0x15, 0xb1, 0xf1, 0xee, 0x99, 0x7f, 0x77, 0xcf, 0xe3, 0x69, + 0x62, 0xff, 0xff, 0xfd, 0x8f, 0xd3, 0x39, 0xf9, 0xec, 0xc3, 0xb9, 0x85, + 0x9c, 0x93, 0x79, 0x3a, 0xdd, 0x62, 0xff, 0xfe, 0x7c, 0xec, 0x85, 0xe9, + 0xf9, 0x9d, 0x1f, 0xd1, 0x4a, 0xc5, 0xfe, 0xfe, 0x45, 0xf9, 0x23, 0x56, + 0x2f, 0xec, 0x8b, 0xf2, 0x46, 0xac, 0x5e, 0xef, 0x34, 0x61, 0xf2, 0x7c, + 0xd6, 0xe7, 0x3e, 0x91, 0xf0, 0x50, 0xc3, 0xa7, 0x54, 0x0a, 0xc4, 0x84, + 0x5f, 0xe8, 0xe0, 0x2f, 0xfd, 0x25, 0xe9, 0x83, 0x91, 0xb2, 0xb1, 0x7e, + 0xdd, 0xf9, 0x83, 0x58, 0xbf, 0xfe, 0x14, 0x7f, 0xd8, 0xa2, 0x33, 0x59, + 0xe6, 0xed, 0x63, 0xe6, 0xa6, 0xb6, 0x66, 0x86, 0x8e, 0x1b, 0xe6, 0xc6, + 0x6b, 0xb9, 0xdf, 0x71, 0xd9, 0x3c, 0x74, 0x71, 0x46, 0xc4, 0x77, 0x0f, + 0xc2, 0x54, 0x11, 0x8b, 0x7a, 0x56, 0xf7, 0x44, 0x20, 0x99, 0xaf, 0xff, + 0x36, 0xdf, 0x97, 0xf7, 0x27, 0x6c, 0xe2, 0xc5, 0xf1, 0x9b, 0x67, 0x16, + 0x2b, 0x0f, 0xc0, 0xe9, 0x77, 0xff, 0xb1, 0xa2, 0x31, 0x8b, 0xd1, 0x66, + 0xb1, 0x62, 0xff, 0x6b, 0x69, 0x7d, 0x61, 0x2c, 0x5e, 0x37, 0x91, 0x2c, + 0x56, 0x1e, 0x9f, 0x66, 0x76, 0x3a, 0xc1, 0x86, 0x8a, 0xff, 0xff, 0x31, + 0xd8, 0xbd, 0x16, 0x6b, 0x0c, 0xf7, 0x57, 0xb2, 0x3d, 0x62, 0xfa, 0x27, + 0xcd, 0x96, 0x2f, 0x16, 0x0d, 0x62, 0xfc, 0x0c, 0x16, 0xb6, 0x58, 0xb8, + 0x3e, 0x2c, 0x5e, 0x1f, 0xe5, 0x60, 0xc2, 0xe6, 0xb0, 0xfc, 0x04, 0x87, + 0x7c, 0x67, 0xda, 0x25, 0x8a, 0x94, 0xe0, 0x76, 0x23, 0xc6, 0x8e, 0xc9, + 0x0a, 0x11, 0x9c, 0x21, 0xbf, 0x6f, 0x3f, 0x93, 0xac, 0x5f, 0x4e, 0x05, + 0xb2, 0xc5, 0x61, 0xe6, 0x91, 0x4d, 0xe8, 0xe1, 0x79, 0x62, 0xfd, 0xbc, + 0xfe, 0x4e, 0xb1, 0x7e, 0xf7, 0x09, 0xcd, 0x58, 0xbf, 0xe6, 0x37, 0x37, + 0x9f, 0xc9, 0xd6, 0x2f, 0x87, 0xad, 0x4a, 0xc5, 0xf1, 0xbf, 0x68, 0x2c, + 0x56, 0x1e, 0x3b, 0x91, 0xd4, 0x6c, 0x99, 0xa4, 0x08, 0x30, 0x84, 0xe5, + 0x24, 0x52, 0x14, 0x20, 0x6f, 0xdc, 0xcc, 0x23, 0x56, 0x2f, 0xff, 0x77, + 0x0e, 0x44, 0xe5, 0x83, 0xc2, 0x35, 0x62, 0xf0, 0xd8, 0xeb, 0x17, 0xff, + 0x78, 0x5d, 0xc3, 0x9f, 0xcf, 0x48, 0xd6, 0x2f, 0xf8, 0x6f, 0xd1, 0xc7, + 0xf7, 0x33, 0x0f, 0x93, 0xa8, 0x76, 0xff, 0xff, 0xfc, 0x6e, 0x98, 0x72, + 0x46, 0x6c, 0x2d, 0x43, 0xdd, 0xc2, 0x43, 0x26, 0xf3, 0x1d, 0x62, 0xbb, + 0x4e, 0xd1, 0x8a, 0x05, 0x0b, 0x0e, 0xa5, 0x4b, 0xc1, 0xc8, 0x16, 0x2f, + 0xf6, 0xfb, 0xb8, 0x43, 0x16, 0x96, 0x28, 0xe7, 0xac, 0x43, 0xd7, 0xe0, + 0x49, 0xe7, 0x4b, 0x17, 0xff, 0xb6, 0x1e, 0x9b, 0x72, 0xce, 0x9a, 0x7e, + 0x2c, 0x54, 0xab, 0x48, 0xc9, 0x42, 0xaf, 0x09, 0xc6, 0x21, 0x11, 0x45, + 0xde, 0xe2, 0xc5, 0xff, 0x9b, 0x86, 0x4c, 0x4f, 0xf6, 0x3a, 0xc5, 0xfd, + 0xef, 0xb4, 0x41, 0x9d, 0x62, 0x96, 0x2d, 0xf5, 0x8a, 0xf9, 0x7c, 0xc1, + 0x97, 0x67, 0x16, 0x2e, 0x6d, 0x2c, 0x58, 0x10, 0x35, 0xda, 0x17, 0xb9, + 0xc0, 0xb1, 0x61, 0xac, 0x5c, 0xd0, 0x30, 0xd4, 0x86, 0x2f, 0x6f, 0x49, + 0xff, 0x7d, 0x42, 0xa2, 0x4e, 0x05, 0x90, 0x00, 0x9e, 0x50, 0xcb, 0xbf, + 0xfb, 0xbf, 0xcb, 0xfb, 0x93, 0xb6, 0x71, 0x62, 0x96, 0x2c, 0x79, 0x3d, + 0x20, 0xd1, 0xae, 0x91, 0xac, 0x5d, 0xc7, 0x58, 0xbb, 0xb0, 0x2c, 0x57, + 0xcf, 0x1f, 0xaf, 0x17, 0x10, 0xbd, 0xce, 0x12, 0xc5, 0xff, 0xa2, 0x7e, + 0x07, 0xd8, 0x19, 0xf6, 0x58, 0xbe, 0xec, 0x1a, 0x95, 0x8a, 0x30, 0xf9, + 0xe5, 0x0e, 0x86, 0x8a, 0x1e, 0x3f, 0xdf, 0xa4, 0x05, 0xdc, 0x16, 0x2e, + 0x1b, 0xac, 0x54, 0xb7, 0x79, 0x5b, 0x43, 0x53, 0x29, 0xbd, 0x7b, 0xc6, + 0xb9, 0xd9, 0x0b, 0xca, 0x41, 0xd4, 0xe9, 0x2f, 0xd5, 0x1a, 0x39, 0x90, + 0x42, 0x50, 0x9b, 0xf9, 0x0d, 0x51, 0x11, 0xf4, 0x29, 0xbf, 0xe3, 0x3f, + 0x9d, 0x4f, 0xe7, 0x82, 0xc5, 0xf4, 0xfa, 0x46, 0xb1, 0x7e, 0x18, 0x9b, + 0x50, 0x58, 0xad, 0x8f, 0x2f, 0xc4, 0x57, 0xba, 0x7f, 0x16, 0x2f, 0x9c, + 0xf3, 0xf5, 0x8b, 0xf3, 0x7c, 0xc1, 0xca, 0xc5, 0x41, 0x31, 0x5c, 0x84, + 0x43, 0x91, 0xfc, 0x7f, 0xc4, 0x57, 0x9a, 0x2e, 0x2c, 0x5e, 0x86, 0x71, + 0x62, 0xfe, 0xf1, 0x4c, 0x33, 0xcb, 0x17, 0xd8, 0x4d, 0x05, 0x8b, 0x83, + 0xe1, 0x87, 0x9d, 0x1b, 0x16, 0xd3, 0xa2, 0x83, 0x8d, 0x75, 0xa4, 0x70, + 0x7a, 0x17, 0xd7, 0xa7, 0xdc, 0x58, 0xbf, 0x9f, 0x6c, 0xf8, 0xbc, 0xb1, + 0x44, 0x79, 0x9e, 0x1d, 0xbf, 0xfd, 0x8e, 0x33, 0x18, 0xbd, 0x16, 0x6b, + 0x16, 0x2d, 0x8b, 0x17, 0xb9, 0x26, 0xac, 0x57, 0xcd, 0x7f, 0x84, 0x6d, + 0x12, 0xc5, 0xfd, 0x82, 0xcf, 0xef, 0xb2, 0xc5, 0xff, 0xe9, 0xf9, 0x83, + 0x9d, 0x8c, 0x16, 0xd3, 0xf5, 0x8a, 0x94, 0x49, 0x70, 0x4c, 0x46, 0x17, + 0xe3, 0x30, 0x78, 0x4b, 0x15, 0xd9, 0xeb, 0x91, 0x7d, 0xef, 0xc8, 0xd6, + 0x2f, 0xef, 0xb9, 0x9e, 0xe3, 0xac, 0x54, 0xa6, 0xf1, 0x91, 0x85, 0x44, + 0x45, 0xe1, 0xdb, 0xff, 0xc6, 0x96, 0x6f, 0xf7, 0xea, 0xf7, 0xde, 0x25, + 0x8b, 0xff, 0xf1, 0x9b, 0xfd, 0xc6, 0x52, 0xdb, 0x6f, 0xf6, 0xd2, 0xc5, + 0x3a, 0x2a, 0x44, 0xa1, 0x7f, 0x66, 0x80, 0xe5, 0xe5, 0x8b, 0xbb, 0xed, + 0x62, 0xc7, 0x30, 0xf1, 0xce, 0x5b, 0x7e, 0xf3, 0xec, 0x4c, 0xb1, 0x7f, + 0xfe, 0xcc, 0x23, 0x4c, 0x0f, 0xcf, 0xf7, 0x37, 0xee, 0xb1, 0x7c, 0xfc, + 0x7e, 0x8b, 0x17, 0xff, 0xdb, 0x7d, 0xb8, 0x67, 0xd9, 0xfc, 0xe3, 0xc5, + 0x8b, 0xec, 0xf4, 0xfd, 0x62, 0xf1, 0xb3, 0x12, 0xc5, 0xf3, 0x6b, 0x0e, + 0xb1, 0x7f, 0xee, 0x19, 0xd5, 0xec, 0xff, 0x9c, 0xeb, 0x14, 0x33, 0xe6, + 0xf1, 0x15, 0xa5, 0x62, 0xff, 0xa7, 0xb0, 0x45, 0x09, 0xd6, 0xcb, 0x15, + 0xb1, 0xe7, 0x7c, 0x46, 0xa0, 0xa8, 0xbc, 0x65, 0x11, 0x2c, 0x68, 0x93, + 0xea, 0x2c, 0x44, 0x50, 0x85, 0xf3, 0x85, 0xfd, 0xf6, 0x81, 0xf4, 0xeb, + 0x17, 0xfe, 0x35, 0xbd, 0xcf, 0x14, 0xf7, 0x05, 0x8b, 0xb9, 0xa5, 0x8b, + 0xfd, 0x01, 0x10, 0xc7, 0x9a, 0x58, 0xb4, 0x16, 0x2d, 0x26, 0x1e, 0xf4, + 0x43, 0x04, 0x69, 0x46, 0xa3, 0x53, 0x50, 0x9f, 0xbf, 0xb3, 0x18, 0xbd, + 0xc5, 0x8b, 0xf1, 0x4c, 0x33, 0xcb, 0x14, 0x47, 0xa7, 0xe2, 0xcb, 0xff, + 0x8d, 0xf7, 0xa7, 0x40, 0x33, 0x6f, 0xf9, 0x62, 0xcc, 0xb1, 0x52, 0x8f, + 0x88, 0x3e, 0x31, 0x0f, 0x92, 0xaf, 0xc4, 0x28, 0x98, 0x6b, 0x17, 0xf9, + 0xfc, 0x1e, 0xa7, 0xf2, 0xb1, 0x7f, 0xff, 0xd3, 0xa7, 0xd8, 0x51, 0xe6, + 0x17, 0x73, 0x1e, 0x63, 0x45, 0x8c, 0xb1, 0x7f, 0x41, 0xb6, 0x32, 0x3f, + 0x75, 0x8b, 0xc7, 0x1c, 0x68, 0xb1, 0x6e, 0x2c, 0x56, 0x1b, 0x57, 0x23, + 0xb1, 0xd6, 0x2f, 0x6b, 0x3b, 0x58, 0xbd, 0x8f, 0xb2, 0xc5, 0xf4, 0x9c, + 0xee, 0xb1, 0x6c, 0xd8, 0xdf, 0xf8, 0x76, 0xff, 0xff, 0xa7, 0xe7, 0x0f, + 0x73, 0x0d, 0x92, 0xdc, 0xc7, 0xd6, 0x9c, 0x25, 0x8a, 0x1a, 0x64, 0x7f, + 0x1f, 0x00, 0x91, 0x2e, 0xf0, 0x9e, 0xfb, 0x0e, 0x2f, 0x2c, 0x5f, 0xff, + 0x67, 0x53, 0xe9, 0x81, 0xcc, 0x1f, 0xc5, 0xb2, 0xc5, 0xe6, 0x06, 0xcb, + 0x17, 0xfe, 0x9d, 0xcb, 0x3a, 0x75, 0x69, 0xbb, 0x58, 0xbf, 0xcf, 0x9d, + 0xf5, 0x69, 0xbb, 0x58, 0xb6, 0x70, 0xff, 0x7a, 0x91, 0x69, 0xd3, 0x19, + 0xd2, 0xa1, 0x42, 0x6e, 0xf9, 0xcd, 0x93, 0xac, 0x5f, 0x6c, 0x2d, 0x6e, + 0xb1, 0x7f, 0xfb, 0x3c, 0x53, 0xb9, 0x85, 0x9c, 0xf8, 0x96, 0x2f, 0xf3, + 0x96, 0x79, 0xb9, 0x8b, 0x17, 0xff, 0x45, 0x07, 0x0b, 0xdf, 0xc8, 0xee, + 0x32, 0xc5, 0xfe, 0x7c, 0xef, 0xab, 0x4d, 0xda, 0xc5, 0xb2, 0x24, 0x59, + 0xe8, 0xc7, 0xa9, 0x2a, 0xff, 0x8d, 0x92, 0x86, 0x7d, 0xce, 0xb1, 0x73, + 0x1a, 0x62, 0x7d, 0xb2, 0x69, 0xb1, 0x1f, 0xc9, 0x8a, 0x1f, 0xde, 0x39, + 0xbe, 0xe7, 0x24, 0xeb, 0x17, 0xdf, 0x9e, 0x92, 0xb1, 0x4e, 0x78, 0xec, + 0x47, 0x52, 0xbd, 0x3b, 0x02, 0x9c, 0x34, 0xed, 0xc1, 0xe3, 0x8d, 0xd2, + 0x51, 0x4b, 0x29, 0xe9, 0x0b, 0x0a, 0x96, 0xc4, 0xbf, 0x23, 0x2e, 0x35, + 0xd3, 0xb2, 0x17, 0x8f, 0xc7, 0x50, 0xec, 0x3b, 0x4b, 0x4a, 0x58, 0x03, + 0xb9, 0x47, 0xf4, 0x29, 0xed, 0x8b, 0x04, 0xb1, 0x6d, 0x96, 0x2b, 0xa1, + 0xa6, 0x8e, 0x13, 0xba, 0x7a, 0x96, 0x2f, 0xf4, 0xea, 0x4e, 0xdd, 0xf9, + 0x62, 0x9c, 0xf3, 0x84, 0x35, 0x68, 0x2c, 0x5f, 0xff, 0xec, 0xf7, 0x0c, + 0xfe, 0x6f, 0x9b, 0x99, 0xc1, 0x96, 0x7d, 0x62, 0xff, 0xe9, 0xf9, 0x87, + 0xd6, 0x77, 0xa7, 0x09, 0x62, 0x80, 0x8a, 0xdf, 0x32, 0xdf, 0x39, 0x30, + 0xd6, 0x2f, 0xff, 0xee, 0x39, 0x77, 0x01, 0xfc, 0x53, 0x1f, 0xfc, 0xe9, + 0xc5, 0x8a, 0x1a, 0x20, 0xfc, 0x43, 0x7b, 0x83, 0xed, 0x62, 0xf7, 0xe3, + 0x6d, 0x2c, 0x5c, 0x0d, 0xd6, 0x2f, 0xff, 0x64, 0x5f, 0x92, 0x34, 0xb3, + 0xdf, 0x12, 0xc5, 0x18, 0x88, 0x73, 0x48, 0xfe, 0x33, 0x7d, 0xb8, 0x9a, + 0x0b, 0x14, 0x62, 0x3f, 0x21, 0x0a, 0x6e, 0xcc, 0xaf, 0xd3, 0xb1, 0x90, + 0xc5, 0x8a, 0x1a, 0xb0, 0x6d, 0xc8, 0x7b, 0x85, 0xfb, 0xc2, 0x9b, 0x51, + 0x8f, 0x91, 0xbd, 0xd1, 0xc4, 0xb1, 0x7d, 0x03, 0x03, 0x3a, 0xc5, 0xfd, + 0xaf, 0xe6, 0x85, 0x8b, 0x17, 0xff, 0xf6, 0x77, 0x0e, 0x7b, 0xf2, 0x79, + 0x71, 0x99, 0x3d, 0x62, 0xc5, 0xfd, 0x0e, 0x60, 0xb4, 0x05, 0x8b, 0xfb, + 0x3b, 0x87, 0x05, 0x12, 0xc5, 0xfb, 0x39, 0x8e, 0x4b, 0x17, 0xc5, 0x13, + 0x9f, 0xb4, 0x43, 0x68, 0xbf, 0xe6, 0x37, 0xff, 0x8b, 0x7f, 0xb7, 0x8c, + 0xd6, 0x79, 0xbb, 0x58, 0xac, 0x4e, 0xad, 0xcb, 0x9a, 0x1d, 0x02, 0x48, + 0xbf, 0x99, 0x86, 0xcd, 0xd1, 0x62, 0xf7, 0x78, 0x6a, 0xc5, 0xf9, 0x86, + 0xcd, 0xd1, 0x62, 0xfe, 0xcd, 0xb6, 0x16, 0xb6, 0x58, 0xb6, 0x8c, 0x45, + 0x47, 0xcb, 0x98, 0x7c, 0x8a, 0x6f, 0xf9, 0xc8, 0xdf, 0x0c, 0xa7, 0xb5, + 0x8b, 0xf6, 0x88, 0x9b, 0xeb, 0x17, 0xff, 0xc4, 0xdd, 0xc3, 0xf9, 0xf1, + 0x4f, 0x18, 0x0b, 0x17, 0xfb, 0xad, 0x91, 0xff, 0x37, 0x95, 0x8b, 0xb3, + 0x86, 0x22, 0x27, 0xac, 0x50, 0xbf, 0x88, 0xcd, 0xf8, 0x01, 0xac, 0x54, + 0xa7, 0x23, 0x88, 0x4e, 0x75, 0xf8, 0x58, 0x31, 0xa5, 0xff, 0xfc, 0xfc, + 0xfe, 0x6b, 0x53, 0xb1, 0x98, 0x43, 0xfc, 0xac, 0x5f, 0xf8, 0x5c, 0x30, + 0xe1, 0xfd, 0xbf, 0x2b, 0x17, 0xec, 0xf0, 0xb3, 0xb5, 0x8b, 0xc6, 0xe7, + 0x6b, 0x17, 0x4c, 0x46, 0x1e, 0x47, 0x8a, 0x6b, 0x13, 0x15, 0x25, 0xc1, + 0x42, 0x2a, 0xff, 0xc6, 0xfe, 0x73, 0xef, 0x9a, 0x89, 0x62, 0xff, 0xfd, + 0xec, 0x73, 0x98, 0x59, 0xbb, 0xeb, 0x4f, 0xb2, 0xc5, 0x12, 0x25, 0xc2, + 0x40, 0xbf, 0xff, 0xff, 0x08, 0x8c, 0x09, 0xbb, 0x86, 0x98, 0x06, 0x70, + 0x53, 0xdf, 0xf1, 0xcb, 0x0d, 0x58, 0xbf, 0xff, 0xff, 0xdb, 0xe6, 0xe5, + 0x9e, 0xf8, 0xbe, 0xdd, 0xc3, 0x9e, 0xd6, 0x05, 0x8e, 0x3f, 0x71, 0xd6, + 0x2f, 0xe7, 0x19, 0x90, 0xe6, 0x96, 0x2f, 0xfd, 0x9e, 0x29, 0x01, 0x98, + 0xe3, 0x58, 0xbf, 0xff, 0xd8, 0x73, 0xcc, 0x59, 0xc7, 0xc0, 0x70, 0xcc, + 0x71, 0xac, 0x5f, 0x0b, 0x08, 0xc7, 0x44, 0xf9, 0x1f, 0x56, 0x93, 0x07, + 0xf4, 0x33, 0xef, 0xf8, 0xf8, 0x73, 0x0f, 0x1f, 0xd2, 0x0b, 0x17, 0xff, + 0xff, 0xb0, 0xcd, 0x07, 0xc9, 0x33, 0x8f, 0x85, 0x17, 0x3c, 0xf9, 0xb1, + 0x4a, 0xc5, 0xff, 0xff, 0xef, 0xe0, 0x8e, 0x66, 0x45, 0x9d, 0xf9, 0x81, + 0x26, 0x78, 0x73, 0xee, 0x2c, 0x56, 0x93, 0x60, 0x39, 0x4f, 0xd0, 0x78, + 0xf5, 0x7f, 0xfd, 0xad, 0x67, 0xb9, 0xf7, 0xc3, 0x3e, 0x09, 0x58, 0xa9, + 0x57, 0x10, 0xf2, 0xbe, 0x44, 0x7d, 0x7f, 0xff, 0x4f, 0xf0, 0x66, 0x8a, + 0x7f, 0x9e, 0x93, 0xb7, 0x96, 0x2a, 0x57, 0x31, 0x70, 0x8f, 0xf3, 0x82, + 0x02, 0x37, 0xbe, 0x9e, 0x9c, 0x25, 0x8b, 0xff, 0xc0, 0xc6, 0x88, 0xce, + 0x66, 0xb5, 0x9d, 0xac, 0x5f, 0xfd, 0x84, 0x59, 0xfc, 0x1f, 0xc5, 0x12, + 0xc5, 0xff, 0x64, 0x96, 0xf9, 0xef, 0xba, 0xc5, 0xef, 0xcc, 0x4b, 0x17, + 0xff, 0x81, 0x3f, 0xee, 0x1c, 0x2c, 0x00, 0xb8, 0xb1, 0x7f, 0xff, 0xfc, + 0xf1, 0x7f, 0x39, 0xac, 0xdc, 0xcf, 0xbe, 0x16, 0x74, 0x2c, 0x18, 0x89, + 0x62, 0xff, 0xf1, 0x49, 0xfb, 0xf3, 0x8c, 0xcd, 0x67, 0x96, 0x2f, 0xd8, + 0x5b, 0x86, 0x75, 0x8b, 0xff, 0xbf, 0x92, 0x51, 0x16, 0x7b, 0x8c, 0xb1, + 0x68, 0x4a, 0xa8, 0xf3, 0x49, 0x1d, 0x37, 0x48, 0x9f, 0x38, 0x00, 0xf1, + 0x26, 0x71, 0xff, 0xc9, 0x9d, 0x45, 0x57, 0xd3, 0xbe, 0xb1, 0x62, 0xff, + 0xdd, 0x5e, 0x9e, 0x45, 0x06, 0xd6, 0xcb, 0x17, 0xbc, 0xe6, 0xac, 0x58, + 0xe6, 0x1f, 0x1c, 0x6c, 0x8b, 0x7f, 0xde, 0xe4, 0x81, 0x88, 0x58, 0xb1, + 0x58, 0x7c, 0xc2, 0x2e, 0xbf, 0xf9, 0xf6, 0x63, 0x9d, 0xcc, 0x1b, 0xf4, + 0x58, 0xa8, 0x26, 0xaa, 0x38, 0x76, 0x68, 0x86, 0xff, 0xc2, 0xdf, 0xf2, + 0x67, 0x70, 0x16, 0xcb, 0x17, 0xfc, 0x28, 0x8b, 0x37, 0xf8, 0xa2, 0x58, + 0xb9, 0xe3, 0xd6, 0x2a, 0x08, 0x9c, 0xc4, 0x58, 0x8f, 0x6f, 0xe0, 0xf4, + 0x03, 0xbf, 0x16, 0x2f, 0xfc, 0x0e, 0x19, 0xfc, 0x1e, 0xb3, 0xb5, 0x8a, + 0xec, 0xfc, 0x9c, 0xc2, 0xff, 0xd1, 0x18, 0xc5, 0xe8, 0xb3, 0x58, 0xb1, + 0x7f, 0xff, 0x79, 0xf6, 0xc1, 0x98, 0x76, 0x86, 0x9f, 0x66, 0x3a, 0xc5, + 0xfe, 0xd9, 0x8e, 0x53, 0xa8, 0x96, 0x2f, 0xe3, 0x40, 0x7c, 0x33, 0x58, + 0x89, 0x37, 0x5e, 0xa9, 0x4c, 0x6b, 0x21, 0xa9, 0x7f, 0xff, 0x8d, 0x38, + 0x8e, 0x2e, 0xae, 0x3e, 0xdf, 0xc8, 0xa0, 0xdd, 0x4b, 0x17, 0xff, 0x8b, + 0x7f, 0xe0, 0x00, 0x20, 0xbb, 0x87, 0x16, 0x2a, 0x51, 0x76, 0xed, 0x95, + 0x8a, 0x8f, 0xfb, 0x8c, 0xf3, 0x50, 0xe2, 0xbe, 0x03, 0x34, 0x4b, 0x16, + 0x95, 0x8b, 0xd8, 0x5b, 0x18, 0x6d, 0x37, 0x23, 0xbe, 0xdc, 0xce, 0x62, + 0xc5, 0xff, 0xda, 0x32, 0x2f, 0x88, 0xd7, 0xc2, 0x35, 0x62, 0xd9, 0x87, + 0xdc, 0x22, 0x5b, 0xfc, 0x5e, 0xf1, 0x30, 0x38, 0xb1, 0x7c, 0x03, 0x0f, + 0xa5, 0x8a, 0x93, 0xd8, 0x11, 0x9d, 0xf8, 0xc6, 0xdc, 0xb1, 0x62, 0xff, + 0xec, 0x68, 0x8c, 0xfc, 0xbe, 0xd2, 0x6a, 0xc5, 0x1d, 0x12, 0x2c, 0x42, + 0x02, 0x9b, 0xff, 0xfc, 0x16, 0xb1, 0xc1, 0xc3, 0x3b, 0x83, 0x97, 0xb1, + 0xc6, 0xb1, 0x7f, 0x43, 0x98, 0x2d, 0x01, 0x62, 0xfe, 0xce, 0xe1, 0xc1, + 0x44, 0xb1, 0x7e, 0xce, 0x63, 0x92, 0xc5, 0xba, 0x76, 0x88, 0x6d, 0x17, + 0xfc, 0xc6, 0xff, 0xf7, 0xa7, 0x42, 0x3b, 0xf0, 0xce, 0x43, 0x8b, 0x17, + 0xfe, 0xd8, 0xd1, 0x4c, 0x46, 0x42, 0x18, 0xb1, 0x7f, 0xee, 0x7b, 0xf8, + 0x7d, 0xe4, 0x8d, 0x58, 0xac, 0x44, 0x28, 0x11, 0x2a, 0x55, 0x0b, 0x3c, + 0x3a, 0x58, 0xe4, 0x50, 0xd2, 0xbf, 0xed, 0x6d, 0x3b, 0x6c, 0x2d, 0x6c, + 0xb1, 0x7f, 0xff, 0x3f, 0x7e, 0xf4, 0x9c, 0xcf, 0xcf, 0x60, 0xcf, 0x71, + 0x62, 0xff, 0xfc, 0x52, 0x69, 0x87, 0x13, 0xf2, 0x7e, 0x70, 0xf7, 0x58, + 0xbf, 0x61, 0x0f, 0xf2, 0xb1, 0x7f, 0xef, 0x71, 0xcb, 0xb8, 0x19, 0xc1, + 0xac, 0x5a, 0x7b, 0x3e, 0x97, 0x27, 0xbf, 0xed, 0x7d, 0xf8, 0x66, 0x38, + 0xd6, 0x2f, 0xfc, 0x64, 0x5f, 0x11, 0xaf, 0x84, 0x6a, 0xc5, 0xff, 0xfa, + 0x63, 0xcc, 0xee, 0x13, 0xb7, 0x70, 0xe1, 0x31, 0xab, 0x17, 0xf8, 0x8c, + 0xe0, 0xa3, 0x85, 0xa5, 0x8a, 0xc4, 0x6d, 0x7d, 0x0c, 0x4b, 0xd7, 0xff, + 0xff, 0xb3, 0x76, 0xd8, 0xce, 0x3c, 0x74, 0x90, 0x3d, 0xd4, 0x52, 0x58, + 0xfe, 0x58, 0xbf, 0xff, 0xbd, 0x25, 0x9b, 0x19, 0xb0, 0xb5, 0x0f, 0x4c, + 0x5c, 0x58, 0xba, 0x7b, 0xfa, 0x37, 0x7a, 0x9f, 0x6a, 0x55, 0xed, 0x61, + 0xf9, 0xd7, 0xff, 0x0c, 0x36, 0x27, 0xe4, 0x62, 0x82, 0x8c, 0x32, 0xfe, + 0x2c, 0xe8, 0x59, 0xc5, 0x8b, 0xd8, 0xe1, 0x2c, 0x5c, 0xc4, 0xb1, 0x5b, + 0x9b, 0x3e, 0xc7, 0x68, 0xc4, 0x42, 0x63, 0x0d, 0xfe, 0x70, 0x18, 0xff, + 0x73, 0xac, 0x50, 0xcf, 0x5c, 0x88, 0xef, 0xfe, 0x33, 0x9f, 0x11, 0x9e, + 0xe7, 0x27, 0x4b, 0x17, 0xff, 0xf4, 0xe8, 0x06, 0x4f, 0x46, 0xfc, 0xeb, + 0x59, 0xee, 0x2c, 0x56, 0xc8, 0xa7, 0xfa, 0x4d, 0xff, 0xa1, 0x3e, 0x16, + 0xe6, 0x73, 0xce, 0xb1, 0x7f, 0xfd, 0xf9, 0xd8, 0xc2, 0xce, 0x8d, 0xff, + 0xcf, 0x6b, 0x17, 0xff, 0xfd, 0xdf, 0x1f, 0x02, 0x33, 0xf9, 0xee, 0x66, + 0xc6, 0x63, 0x8d, 0x62, 0x86, 0x8b, 0xfc, 0x54, 0xbf, 0xf7, 0x9f, 0xb8, + 0x14, 0x99, 0xd5, 0xba, 0xc5, 0xff, 0xe9, 0x39, 0x67, 0x42, 0xce, 0x99, + 0xa8, 0x2c, 0x56, 0x22, 0x44, 0x91, 0x6f, 0xfd, 0xcf, 0xbe, 0x7b, 0xb8, + 0x3f, 0xd6, 0x2f, 0xff, 0xfe, 0xe7, 0x30, 0x8d, 0xc7, 0x1e, 0xa4, 0xfd, + 0xc2, 0x4d, 0xfb, 0xe2, 0xc5, 0xbb, 0x82, 0x2c, 0xf1, 0x02, 0xfe, 0x83, + 0xfb, 0x81, 0x9d, 0x62, 0xff, 0xf6, 0xff, 0x11, 0xfb, 0xcf, 0x97, 0x72, + 0x12, 0xc5, 0x82, 0x30, 0xff, 0xf8, 0x61, 0x52, 0x8d, 0x2c, 0x85, 0x45, + 0xff, 0x16, 0x6b, 0x37, 0xc7, 0x1a, 0xc5, 0xfd, 0xb7, 0xa2, 0x29, 0x3a, + 0xc5, 0xf7, 0xfb, 0xc3, 0x56, 0x2f, 0xcd, 0x31, 0x4c, 0x4b, 0x17, 0xec, + 0x1f, 0xc4, 0x12, 0xc5, 0x18, 0x7a, 0x64, 0x53, 0x5b, 0xa2, 0x6a, 0x27, + 0x8b, 0xff, 0xde, 0xcf, 0xf7, 0x3c, 0x2c, 0x00, 0xb8, 0xb1, 0x52, 0x7e, + 0x0c, 0x4b, 0x7f, 0xfe, 0xdb, 0x1c, 0x64, 0x2f, 0x99, 0x23, 0x68, 0xb8, + 0xb1, 0x7f, 0x6a, 0x46, 0x2c, 0x35, 0x62, 0xb1, 0x10, 0xee, 0xb1, 0x7f, + 0x67, 0xdf, 0x5f, 0x65, 0x8b, 0xf7, 0xdf, 0x5f, 0x65, 0x8b, 0xb0, 0x23, + 0x0f, 0x57, 0x0b, 0x6a, 0x57, 0xca, 0x72, 0x19, 0x1d, 0x92, 0x3c, 0x60, + 0x31, 0x42, 0xcf, 0x51, 0xd3, 0x7c, 0x99, 0x8e, 0x0a, 0x33, 0xae, 0x42, + 0x9f, 0xce, 0xd7, 0x08, 0x96, 0x2f, 0x66, 0x0d, 0x62, 0xbe, 0x6c, 0xfc, + 0x2f, 0x5b, 0x3a, 0x3e, 0x71, 0xca, 0x79, 0x36, 0x36, 0x1d, 0xe7, 0x64, + 0x3b, 0x95, 0xaa, 0xf1, 0xf4, 0xc5, 0x0d, 0x2d, 0x4a, 0xe1, 0x3b, 0x8f, + 0xe1, 0x44, 0x08, 0xc3, 0xca, 0x52, 0x2f, 0x27, 0x08, 0x3d, 0x48, 0x78, + 0xea, 0x87, 0x65, 0xff, 0xf3, 0xe9, 0xa2, 0x7f, 0x99, 0x31, 0xfe, 0x98, + 0x96, 0x2f, 0x3e, 0x44, 0xb1, 0x7f, 0x7f, 0x3d, 0xf6, 0x82, 0xc5, 0x41, + 0x14, 0x1f, 0x55, 0xf0, 0xed, 0xfe, 0xc0, 0x8c, 0x22, 0xce, 0xd6, 0x2f, + 0x9f, 0x98, 0x33, 0x0f, 0x97, 0x63, 0x0b, 0xd8, 0x5f, 0x58, 0xbf, 0xee, + 0x19, 0xac, 0x8b, 0xef, 0xda, 0xc5, 0x40, 0xf6, 0x58, 0x72, 0xff, 0x78, + 0xb3, 0xdf, 0xcd, 0x96, 0x2f, 0x85, 0x01, 0x4a, 0xc5, 0xf4, 0xc7, 0x8a, + 0x25, 0x8b, 0xff, 0xfa, 0x1c, 0xf0, 0xb7, 0x33, 0x9c, 0xcf, 0xeb, 0x58, + 0x12, 0xc5, 0xda, 0xc5, 0x8b, 0xd9, 0xee, 0x2c, 0x5f, 0xdd, 0x5e, 0x72, + 0x63, 0xac, 0x52, 0xc5, 0xf7, 0x32, 0x76, 0x30, 0xde, 0x1c, 0xc2, 0xb6, + 0x45, 0x4c, 0x42, 0xfe, 0x59, 0xbd, 0xf6, 0x35, 0x62, 0xff, 0x19, 0xac, + 0xee, 0x0e, 0x75, 0x8a, 0xed, 0x39, 0x0d, 0x46, 0x15, 0xe3, 0x20, 0x87, + 0xaf, 0xfc, 0xda, 0xfe, 0x7a, 0x49, 0xc0, 0xb1, 0x6e, 0xa5, 0x8b, 0xdb, + 0x1f, 0x75, 0x8b, 0xf3, 0xe1, 0x67, 0x45, 0x8b, 0xec, 0x78, 0x8c, 0xec, + 0xf2, 0x3e, 0x41, 0x77, 0xa5, 0x62, 0xfe, 0xf8, 0xb6, 0x32, 0x2d, 0x96, + 0x2e, 0x9d, 0x2c, 0x5f, 0xe1, 0x7b, 0x30, 0xe0, 0x09, 0x62, 0xf6, 0x6c, + 0x60, 0xd1, 0x01, 0x11, 0xa0, 0x05, 0xeb, 0xb4, 0x6d, 0x94, 0x25, 0xef, + 0x79, 0xf6, 0x58, 0xb4, 0x72, 0xc5, 0x40, 0xd9, 0xc7, 0x8f, 0x5f, 0xed, + 0xdf, 0x98, 0x33, 0x06, 0xb1, 0x7b, 0x76, 0x0d, 0x62, 0xce, 0xb1, 0x7d, + 0xdc, 0x38, 0x64, 0x9b, 0x0f, 0x0f, 0xdb, 0x3e, 0x8a, 0x00, 0x99, 0xaf, + 0xff, 0xc5, 0x27, 0x30, 0x7f, 0x11, 0x93, 0x1f, 0xf9, 0x3a, 0xc5, 0xff, + 0x38, 0x1e, 0x1f, 0x72, 0x02, 0xc5, 0xff, 0xa1, 0x38, 0x0f, 0xe6, 0x16, + 0xeb, 0x17, 0xff, 0xbe, 0xe4, 0x33, 0x03, 0xdc, 0xb3, 0xf8, 0xb1, 0x7f, + 0xcd, 0xee, 0x45, 0x01, 0x17, 0x96, 0x2a, 0x51, 0xfb, 0x87, 0x11, 0x1f, + 0x01, 0x32, 0xff, 0xbe, 0xe7, 0x9c, 0x2f, 0x71, 0x62, 0xff, 0xff, 0x0b, + 0xda, 0x14, 0x46, 0x7a, 0x2f, 0x88, 0x1e, 0x7c, 0xea, 0x58, 0xbe, 0x9d, + 0xe4, 0xe6, 0x23, 0x7b, 0x73, 0xc2, 0x38, 0xa9, 0x5f, 0xca, 0xd8, 0xd0, + 0x64, 0x79, 0x1d, 0xbe, 0xe8, 0xce, 0x7b, 0x12, 0xee, 0xa3, 0x16, 0x65, + 0xb2, 0x86, 0x27, 0x8a, 0x7a, 0xa5, 0x1b, 0x5f, 0xfe, 0x68, 0x8c, 0x62, + 0x83, 0x9c, 0xc9, 0x25, 0x8b, 0xff, 0xf6, 0x31, 0xcc, 0x35, 0xbb, 0xfe, + 0x7f, 0xf3, 0xe5, 0x8a, 0xc4, 0x51, 0xe9, 0x2e, 0xf6, 0x03, 0x8b, 0x17, + 0xf4, 0x84, 0x67, 0x0f, 0xda, 0xc5, 0x61, 0xe7, 0xe8, 0x76, 0xe7, 0x09, + 0x62, 0xf6, 0xa2, 0x82, 0xc5, 0xff, 0xb3, 0xbf, 0x19, 0xc9, 0xfb, 0x47, + 0xac, 0x50, 0xcf, 0xef, 0x06, 0x34, 0x3f, 0x7f, 0xf3, 0xf7, 0x0e, 0x18, + 0x37, 0xe9, 0x23, 0x58, 0xbd, 0xdc, 0xc7, 0xac, 0x5f, 0xfe, 0x98, 0xb9, + 0xee, 0xe0, 0xff, 0xee, 0x0e, 0xb1, 0x46, 0xa2, 0xe1, 0x92, 0x44, 0x43, + 0x7d, 0x9f, 0x6e, 0x8b, 0x17, 0xf4, 0x33, 0xf9, 0xd3, 0x8b, 0x17, 0xf0, + 0x33, 0xb3, 0x3b, 0xe2, 0xc5, 0xb0, 0x68, 0x86, 0x88, 0x90, 0x06, 0x17, + 0xff, 0xdf, 0x17, 0x0c, 0xfb, 0xfb, 0xf9, 0xa9, 0xe8, 0xb1, 0x7e, 0xe4, + 0xc4, 0x2d, 0x2c, 0x5f, 0x4c, 0x42, 0xd2, 0xc5, 0xc0, 0x63, 0x0f, 0x3b, + 0x85, 0x57, 0xee, 0x3e, 0x76, 0x75, 0x8b, 0xd9, 0xae, 0x2c, 0x50, 0xd3, + 0x16, 0x04, 0x28, 0xbc, 0x5d, 0xd0, 0xa6, 0xfe, 0xd6, 0x0b, 0xf2, 0x75, + 0x8b, 0xd9, 0x80, 0x58, 0xbb, 0x3b, 0x30, 0xf2, 0x88, 0xba, 0xb1, 0x17, + 0xa5, 0x08, 0xfb, 0xf4, 0xf7, 0xfc, 0xd9, 0x62, 0xff, 0xce, 0x11, 0x9a, + 0x98, 0x72, 0x40, 0xb1, 0x44, 0x7d, 0x7e, 0x2a, 0xbf, 0x67, 0xcc, 0xe9, + 0xba, 0xc5, 0x8e, 0x35, 0xd2, 0x0c, 0x84, 0xe1, 0xb0, 0xe6, 0xd4, 0x2d, + 0x8a, 0x50, 0x4f, 0xa1, 0x22, 0x22, 0x1b, 0xff, 0x68, 0xd3, 0x3c, 0x59, + 0xb3, 0x12, 0xc5, 0x4a, 0x32, 0x03, 0x84, 0x3d, 0xda, 0xc5, 0x8b, 0xff, + 0xb5, 0x21, 0x75, 0x14, 0x85, 0xdc, 0x38, 0xb1, 0x69, 0x58, 0xbe, 0x7d, + 0x37, 0x6b, 0x16, 0xf3, 0x9b, 0x4e, 0x08, 0xd0, 0xd1, 0x4a, 0xef, 0xf7, + 0xfc, 0xc5, 0xbf, 0xdc, 0xe5, 0x2b, 0x17, 0xff, 0x0c, 0x9a, 0x28, 0xa7, + 0xc0, 0xce, 0x2c, 0x5f, 0xff, 0x14, 0xed, 0xf9, 0x7f, 0x71, 0xcb, 0xb8, + 0x2c, 0x5c, 0x70, 0xd6, 0x2d, 0x12, 0xc5, 0x2c, 0x54, 0x97, 0xfa, 0x13, + 0xa9, 0x3d, 0x77, 0x38, 0xbd, 0xb6, 0x04, 0xb1, 0x7f, 0x86, 0x64, 0xc4, + 0x36, 0x09, 0x62, 0xdd, 0x0c, 0x3d, 0x67, 0x1f, 0xbf, 0xfb, 0x40, 0x8e, + 0xcf, 0x7f, 0x34, 0xfc, 0x58, 0xbf, 0xf6, 0x70, 0xb3, 0x7d, 0xd8, 0x80, + 0xb1, 0x4e, 0x8b, 0x16, 0x2a, 0xe2, 0x45, 0xff, 0xde, 0x14, 0x99, 0xc1, + 0x10, 0xa4, 0xeb, 0x17, 0xff, 0xff, 0x39, 0xbf, 0x68, 0x8c, 0x21, 0x75, + 0x19, 0x9d, 0xc3, 0x04, 0x40, 0xe2, 0xc5, 0x32, 0x30, 0x09, 0x1a, 0xff, + 0xf9, 0xe1, 0xee, 0x67, 0x4d, 0x60, 0x38, 0xdb, 0xac, 0x5f, 0xec, 0x63, + 0x4c, 0x09, 0x82, 0x58, 0xbf, 0xff, 0xd9, 0xb9, 0x85, 0x9f, 0x7c, 0xe1, + 0x98, 0xff, 0xcd, 0xd6, 0x2d, 0x83, 0x44, 0xcf, 0xcd, 0xef, 0xdc, 0x9e, + 0x8e, 0x4b, 0x17, 0xfd, 0xed, 0x0a, 0x1d, 0xc3, 0x3c, 0xb1, 0x7c, 0xf2, + 0x5b, 0x2c, 0x53, 0x9e, 0xf7, 0xcf, 0x28, 0xe9, 0xee, 0xfc, 0x84, 0xa1, + 0xd9, 0xe2, 0x8e, 0x90, 0x87, 0xbf, 0xff, 0x84, 0x36, 0x20, 0x19, 0xec, 0xfc, 0xfb, 0x58, 0x35, 0x8b, 0xe3, 0xbb, 0x84, 0xb1, 0x7f, 0xb4, 0xdc, - 0x30, 0x2e, 0x6c, 0xb1, 0x52, 0x98, 0x74, 0x15, 0xd9, 0x70, 0x44, 0x74, - 0x4b, 0x9b, 0x5c, 0x8c, 0x9f, 0xd2, 0xdd, 0xef, 0xfc, 0xfe, 0xe4, 0xfb, - 0xf3, 0xd0, 0x16, 0x2f, 0x16, 0x4a, 0xc5, 0xfd, 0x3b, 0x7d, 0xf0, 0x6b, - 0x15, 0x87, 0x93, 0xa1, 0xbb, 0xff, 0xe7, 0xe1, 0x83, 0xf8, 0x8c, 0x97, - 0x18, 0x7a, 0x58, 0xbf, 0xfc, 0x72, 0xc0, 0x48, 0x22, 0x84, 0xeb, 0x65, - 0x8b, 0xe9, 0x8b, 0x8e, 0xb1, 0x7f, 0xa4, 0xf3, 0x18, 0x10, 0x41, 0x2c, - 0x54, 0xb2, 0x30, 0xe1, 0x0b, 0xc1, 0x91, 0x61, 0xc6, 0xe8, 0xcf, 0x3b, - 0x03, 0x11, 0xfe, 0xa1, 0x12, 0x72, 0x16, 0x54, 0x24, 0xce, 0xe2, 0x3b, - 0xff, 0xef, 0x8b, 0x86, 0x7d, 0xcc, 0xf1, 0x30, 0x38, 0xb1, 0x7f, 0xff, - 0x42, 0x74, 0x69, 0xc9, 0xfa, 0x87, 0x07, 0xa7, 0xd9, 0x62, 0xff, 0xff, - 0x71, 0xc4, 0x33, 0x0d, 0x26, 0x18, 0xb3, 0xe6, 0x45, 0x12, 0xc5, 0xb0, - 0x69, 0x8c, 0xc4, 0xa7, 0xc5, 0xfb, 0xd3, 0x17, 0x16, 0x2d, 0xf5, 0x8b, - 0x84, 0x35, 0x8b, 0xa7, 0xcb, 0x17, 0xa1, 0x27, 0x58, 0xbf, 0xb8, 0x45, - 0x80, 0xe2, 0xc5, 0x18, 0x88, 0xb8, 0x84, 0xb4, 0x30, 0xc2, 0xfe, 0x1d, - 0xbf, 0xff, 0x89, 0xbd, 0xcc, 0xd0, 0x01, 0x39, 0xd7, 0xb8, 0xeb, 0x17, - 0xd0, 0x9d, 0x6c, 0xb1, 0x73, 0x0f, 0x0f, 0xfe, 0x25, 0xbb, 0x46, 0xeb, - 0x14, 0x63, 0xe1, 0x7c, 0xcc, 0xa1, 0xcd, 0x94, 0x86, 0x35, 0x96, 0x8b, - 0x27, 0x79, 0x45, 0x9d, 0x1d, 0x3c, 0xf9, 0xe6, 0xa3, 0x64, 0xfc, 0xec, - 0x8b, 0x52, 0x53, 0xca, 0x3d, 0x4f, 0x1b, 0x8a, 0x15, 0x21, 0x43, 0x2a, - 0x38, 0xb6, 0xf7, 0xb3, 0xeb, 0x17, 0xb9, 0x9b, 0xac, 0x5f, 0xa0, 0xe3, - 0xc2, 0x58, 0xb9, 0xfa, 0x58, 0xa3, 0x0f, 0x76, 0x47, 0x86, 0x4f, 0x7b, - 0x8f, 0xa5, 0x8b, 0xff, 0x99, 0xfd, 0x09, 0x2f, 0x71, 0xc6, 0xb1, 0x52, - 0x7c, 0x1f, 0x1d, 0xbb, 0x58, 0xb1, 0x7b, 0xcf, 0xd9, 0x62, 0x80, 0x6d, - 0x88, 0x5e, 0xfa, 0x02, 0x6f, 0x2c, 0x5d, 0x31, 0xeb, 0x17, 0x0a, 0x3d, - 0x62, 0xf4, 0x94, 0xac, 0x56, 0xe7, 0xa1, 0xa1, 0xa3, 0x8d, 0xdf, 0xfd, - 0x9d, 0xc3, 0xd4, 0x84, 0x32, 0x6f, 0xac, 0x54, 0xa6, 0x17, 0x84, 0x0e, - 0xe7, 0xf3, 0x0b, 0xef, 0x71, 0x80, 0xb1, 0x7f, 0xfc, 0x2d, 0x8c, 0x97, - 0xfe, 0xf2, 0x03, 0xb4, 0x16, 0x2f, 0xfc, 0xe6, 0x3e, 0x85, 0xb3, 0x6b, - 0x75, 0x8a, 0x35, 0x12, 0xbf, 0x53, 0xbe, 0x7f, 0xb6, 0xcb, 0x17, 0xcf, - 0xbb, 0x69, 0x62, 0xfd, 0x24, 0x73, 0x4d, 0x58, 0xbf, 0xcf, 0xc7, 0x17, - 0x7e, 0x39, 0x58, 0xbd, 0x3e, 0x95, 0x8a, 0x82, 0x28, 0x46, 0x47, 0xe2, - 0xae, 0xc7, 0x17, 0xf1, 0x85, 0x83, 0x90, 0x2c, 0x5f, 0x1d, 0xcb, 0x75, - 0x8a, 0x19, 0xe8, 0xfc, 0xba, 0xfb, 0x3c, 0xfc, 0x58, 0xac, 0x3c, 0x4e, - 0x11, 0x5e, 0x8e, 0xc1, 0xac, 0x5d, 0xe7, 0x58, 0xa9, 0x36, 0xee, 0x41, - 0x7a, 0x12, 0x75, 0x8b, 0x98, 0x35, 0x8a, 0xf9, 0xb5, 0xe0, 0xed, 0xff, - 0xbd, 0xf7, 0xcc, 0x19, 0x60, 0x4b, 0x15, 0x87, 0xbe, 0xe4, 0x37, 0xda, - 0x7e, 0xa0, 0xb1, 0x7f, 0xee, 0x4c, 0x59, 0xf7, 0xd7, 0xd9, 0x62, 0xfe, - 0xd6, 0x7f, 0xa8, 0x71, 0x62, 0xec, 0xfa, 0xc5, 0xdc, 0xc5, 0x8a, 0x1a, - 0x30, 0x5c, 0x93, 0x47, 0xe7, 0x30, 0x61, 0x7b, 0xda, 0x73, 0x56, 0x2f, - 0xfc, 0x7c, 0x7f, 0x37, 0xbf, 0x3e, 0x58, 0xb9, 0xfe, 0xb1, 0x6c, 0x58, - 0xbf, 0xfe, 0x16, 0x3f, 0xf3, 0x7f, 0xb9, 0x81, 0x1f, 0x75, 0x8b, 0xde, - 0xc0, 0x96, 0x2d, 0xb1, 0x1f, 0x97, 0x95, 0x28, 0xe8, 0xab, 0x14, 0x20, - 0xef, 0x6c, 0x2f, 0x2c, 0x5f, 0x7d, 0xd8, 0x0b, 0x15, 0x87, 0x83, 0xe1, - 0xfb, 0x4a, 0xc5, 0xbe, 0xb1, 0x6c, 0xd8, 0xd1, 0x9a, 0x23, 0x60, 0x96, - 0x2f, 0xa2, 0xcd, 0x61, 0x86, 0xef, 0x85, 0x16, 0xe2, 0xc5, 0xd3, 0xf5, - 0x8a, 0xe8, 0xd4, 0xc4, 0x25, 0x43, 0x54, 0x5f, 0x90, 0xc2, 0x03, 0x4f, - 0x9f, 0xc4, 0xc5, 0x7f, 0xf8, 0x44, 0x66, 0x6b, 0x63, 0xe7, 0x3f, 0x8b, - 0x17, 0xdd, 0xf9, 0x37, 0x96, 0x2b, 0x63, 0xf3, 0x12, 0x65, 0xff, 0x18, - 0x77, 0x2c, 0xf7, 0xdd, 0x62, 0xfd, 0xb3, 0x17, 0xb8, 0xb1, 0x77, 0x25, - 0x62, 0xfc, 0xdb, 0x19, 0x0f, 0x2c, 0x56, 0xc7, 0x85, 0xf1, 0x7b, 0xf1, - 0x02, 0x5f, 0xb2, 0xc5, 0xfa, 0x20, 0xf9, 0x38, 0xb1, 0x4e, 0x7a, 0x6c, - 0x53, 0x7e, 0x6d, 0x17, 0x4e, 0xb1, 0x7c, 0x60, 0x46, 0x04, 0xb1, 0x74, - 0xf9, 0x62, 0xa4, 0xdf, 0xc4, 0x51, 0x52, 0x9f, 0x2c, 0x08, 0xf0, 0xe5, - 0xda, 0xfe, 0xed, 0xe2, 0x01, 0x33, 0xda, 0x0b, 0x17, 0x38, 0xd6, 0x2a, - 0x34, 0x35, 0x32, 0x25, 0x7b, 0xec, 0x4b, 0x15, 0xde, 0xb3, 0x53, 0x76, - 0x7a, 0x84, 0x23, 0xc7, 0x1b, 0x16, 0x1d, 0x9b, 0x0b, 0x8d, 0xc9, 0x1e, - 0x18, 0x91, 0x43, 0x53, 0x4b, 0x07, 0x85, 0x9f, 0xe1, 0xc2, 0xc9, 0x00, - 0x1e, 0x29, 0x4d, 0xbe, 0x95, 0x51, 0xda, 0x11, 0x61, 0x12, 0xde, 0x14, - 0xec, 0xb1, 0x7e, 0xe6, 0xb4, 0xe7, 0x58, 0xae, 0x1e, 0x3f, 0x87, 0xae, - 0x7e, 0x96, 0x2d, 0xde, 0xac, 0x5d, 0xf8, 0xf5, 0x8b, 0xf8, 0xce, 0x3f, - 0xdc, 0xeb, 0x17, 0xbd, 0x27, 0x58, 0xa8, 0xd8, 0xff, 0xa0, 0x2f, 0xd0, - 0xd9, 0x17, 0xdf, 0xff, 0xd8, 0xe0, 0x92, 0xce, 0xbc, 0xdd, 0x40, 0x3e, - 0x01, 0x62, 0xdb, 0x2c, 0x51, 0x87, 0xe1, 0x05, 0xdb, 0xba, 0x35, 0x62, - 0xfe, 0x3b, 0x43, 0x58, 0x12, 0xc5, 0xba, 0x19, 0xe4, 0xe0, 0xd5, 0xfe, - 0xf7, 0x0c, 0xcf, 0xe1, 0x2c, 0x56, 0x1e, 0xe3, 0x14, 0x5e, 0xe7, 0xb1, - 0x62, 0xff, 0xf4, 0x0b, 0x0e, 0x76, 0xe1, 0x9c, 0x91, 0xac, 0x5f, 0x7b, - 0x1b, 0x75, 0x8a, 0xef, 0x51, 0x17, 0x23, 0xb8, 0x97, 0x7f, 0xbe, 0xe7, - 0xfe, 0x01, 0x96, 0x2f, 0xfd, 0x85, 0x9a, 0xdf, 0xf8, 0x0e, 0x2c, 0x5e, - 0x8a, 0x46, 0xb1, 0x7d, 0xbe, 0x10, 0x16, 0x2f, 0xfd, 0xf9, 0x29, 0xdf, - 0x53, 0x84, 0xb1, 0x43, 0x47, 0x83, 0x99, 0xe8, 0xfd, 0x87, 0xbc, 0x47, - 0x78, 0xf3, 0x05, 0x8b, 0xfb, 0x36, 0x93, 0x5b, 0x8b, 0x17, 0xff, 0xdf, - 0x7d, 0x7d, 0x8c, 0xce, 0xa1, 0x9a, 0xd9, 0x62, 0xfe, 0xfb, 0x8d, 0xf5, - 0xba, 0xc5, 0xf6, 0x6f, 0x9d, 0x2c, 0x5f, 0xff, 0xb3, 0xdc, 0xfb, 0x1f, - 0x59, 0xd4, 0x38, 0x28, 0x96, 0x2f, 0xff, 0xcd, 0xd0, 0xf4, 0x4c, 0x11, - 0x60, 0x01, 0x80, 0x58, 0xbb, 0xae, 0x18, 0x9f, 0x4c, 0xa4, 0x0c, 0x77, - 0x0b, 0xf7, 0x53, 0xf9, 0x79, 0x12, 0x79, 0x66, 0xf4, 0x52, 0x12, 0xc5, - 0xfb, 0xc5, 0x99, 0xa5, 0x8b, 0xfd, 0xf9, 0x72, 0x6d, 0x1a, 0xb1, 0x7f, - 0x4b, 0x93, 0x68, 0xd5, 0x8b, 0xed, 0x69, 0xf4, 0x61, 0xf0, 0x7c, 0xce, - 0xfe, 0x2c, 0x8b, 0x4d, 0xd9, 0x62, 0xfd, 0x91, 0x69, 0xbb, 0x2c, 0x52, - 0xc5, 0xb7, 0x30, 0xf9, 0xc8, 0xc3, 0xb1, 0x5d, 0x01, 0x1b, 0x25, 0x0a, - 0x1a, 0x94, 0xe9, 0x9c, 0x7d, 0xa3, 0x60, 0xbf, 0xf7, 0x5e, 0x6e, 0xb8, - 0x39, 0xce, 0x96, 0x2f, 0x16, 0x1d, 0x62, 0xdd, 0x2c, 0x5a, 0x10, 0x35, - 0xfc, 0x1c, 0xa9, 0x44, 0xc3, 0x38, 0xdf, 0xff, 0xfe, 0x30, 0xf3, 0x9e, - 0x33, 0x20, 0xfd, 0x8b, 0x38, 0x64, 0x8d, 0xa2, 0xe2, 0xc5, 0xe0, 0xb8, - 0x05, 0x8b, 0xfb, 0x0e, 0x36, 0x6d, 0xd6, 0x2e, 0x2d, 0xcc, 0x3c, 0xdf, - 0x8f, 0xd4, 0x11, 0xf0, 0xd0, 0xc9, 0xbf, 0xe3, 0x39, 0x9f, 0xc1, 0x16, - 0xeb, 0x16, 0xc5, 0x8a, 0xc6, 0x53, 0x26, 0xe4, 0x4f, 0x09, 0x68, 0xa1, - 0x63, 0xa8, 0x64, 0x1e, 0x15, 0x6d, 0x2c, 0x30, 0x12, 0x89, 0x0a, 0x19, - 0x82, 0x8c, 0x64, 0x22, 0x78, 0xe3, 0xbb, 0xdc, 0xf3, 0xac, 0x5e, 0x88, - 0x1d, 0x2c, 0x5f, 0xf6, 0x43, 0xf2, 0xfa, 0xd4, 0xac, 0x5c, 0x69, 0x9b, - 0x9f, 0xa8, 0x07, 0x78, 0x41, 0x7b, 0x9d, 0xff, 0x16, 0x2a, 0x4f, 0x87, - 0xa3, 0xeb, 0xe0, 0x00, 0x51, 0xeb, 0x16, 0x02, 0xc5, 0xef, 0x72, 0x56, - 0x2f, 0x85, 0xd4, 0x38, 0xb1, 0x63, 0x24, 0xf0, 0xb4, 0x3b, 0x7e, 0xd6, - 0xd3, 0xad, 0x96, 0x2f, 0xce, 0x5e, 0x0c, 0xeb, 0x15, 0x27, 0xa8, 0x02, - 0xbb, 0xd0, 0xe6, 0x2c, 0x5f, 0xbb, 0xd2, 0x9c, 0x02, 0xc5, 0x68, 0xf2, - 0x40, 0x3b, 0x79, 0x9c, 0x96, 0x2f, 0xc2, 0x88, 0xa4, 0xeb, 0x17, 0x9f, - 0x02, 0x30, 0xf1, 0x38, 0x37, 0x7f, 0xf9, 0xcf, 0x9c, 0x30, 0xb3, 0x40, - 0xc8, 0x96, 0x2f, 0xf7, 0x50, 0x11, 0x6d, 0xb4, 0xac, 0x5f, 0x66, 0x6b, - 0x8b, 0x16, 0xe1, 0x87, 0xb2, 0x03, 0x7b, 0xc2, 0x6e, 0x2c, 0x56, 0xca, - 0x9a, 0xa0, 0xf9, 0x8d, 0x47, 0x66, 0xf9, 0xa7, 0xa1, 0x48, 0x19, 0x4d, - 0xfe, 0x08, 0xf2, 0xfa, 0x14, 0x7a, 0xc5, 0xc4, 0x25, 0x8a, 0x58, 0xb6, - 0x8c, 0x34, 0x7c, 0x17, 0xbf, 0x19, 0xd4, 0x05, 0xb2, 0xc5, 0xff, 0x6f, - 0x8f, 0xf9, 0xd6, 0x1d, 0x62, 0xa5, 0x11, 0xd0, 0x28, 0x22, 0xda, 0xc4, - 0xc5, 0xc5, 0x0e, 0x9b, 0xff, 0xf9, 0xf4, 0x66, 0x3e, 0x11, 0xbf, 0x7c, - 0x3e, 0x6e, 0xb1, 0x7f, 0xd9, 0xd4, 0x39, 0xd4, 0x05, 0xa5, 0x8b, 0xff, - 0xff, 0x1f, 0x9b, 0xfe, 0x77, 0xea, 0x04, 0x21, 0x98, 0xe6, 0xb1, 0x01, - 0x62, 0xff, 0xff, 0x6d, 0xa9, 0x3f, 0x05, 0x26, 0x4e, 0xa4, 0x7f, 0x93, - 0xac, 0x56, 0x23, 0x55, 0xdc, 0xaf, 0xfa, 0x06, 0x49, 0x9e, 0xfe, 0x12, - 0xc5, 0x62, 0x79, 0x2e, 0xb7, 0xa8, 0xc4, 0x98, 0x86, 0xfc, 0x0e, 0x3f, - 0x41, 0x2c, 0x5f, 0xe1, 0x17, 0x50, 0xe1, 0x0d, 0x62, 0xff, 0xf6, 0x4f, - 0x50, 0xe1, 0x67, 0xcb, 0x02, 0x58, 0xbf, 0x75, 0x27, 0xda, 0x56, 0x2f, - 0xba, 0x83, 0xfd, 0x62, 0xec, 0xeb, 0xe7, 0x9d, 0xe2, 0xab, 0xf4, 0x50, - 0x92, 0x82, 0xc5, 0xfe, 0xe8, 0xce, 0xef, 0x61, 0x6c, 0xb1, 0x58, 0x9a, - 0xf1, 0xa6, 0xba, 0x84, 0xc0, 0x0b, 0x84, 0x53, 0x7f, 0x74, 0xd0, 0x29, - 0x3a, 0xc5, 0xff, 0xd1, 0xe7, 0x21, 0x05, 0xac, 0x72, 0x02, 0xc5, 0xff, - 0xff, 0x14, 0x5f, 0xce, 0xa1, 0x24, 0x33, 0x0b, 0x3b, 0x69, 0xf8, 0xb1, - 0x7f, 0xc5, 0x17, 0x8b, 0x36, 0x62, 0x58, 0xa9, 0x47, 0x5b, 0xa4, 0x09, - 0xaa, 0xfd, 0xb9, 0x87, 0x6f, 0x2c, 0x5f, 0xff, 0xfd, 0xa7, 0xd8, 0xcf, - 0xe7, 0x8a, 0x62, 0xfe, 0x6d, 0x3d, 0x78, 0x5b, 0xac, 0x56, 0x22, 0x8f, - 0x45, 0x77, 0xff, 0xff, 0x49, 0xbf, 0x93, 0x0b, 0x04, 0x69, 0x9d, 0x43, - 0x8e, 0x41, 0xce, 0xcb, 0x17, 0xe2, 0x07, 0x08, 0x4b, 0x17, 0xec, 0x14, - 0xeb, 0x65, 0x8b, 0xcf, 0x84, 0xb1, 0x6e, 0x88, 0xf1, 0x38, 0x53, 0x58, - 0x98, 0x63, 0xbc, 0x09, 0xb2, 0xff, 0xfb, 0x3b, 0x8b, 0x0e, 0xc5, 0xee, - 0x19, 0x21, 0x2c, 0x54, 0xab, 0x9a, 0xc8, 0xc6, 0x5e, 0x1a, 0x3f, 0x8c, - 0xb8, 0x45, 0xf7, 0xfe, 0xf1, 0xce, 0xd1, 0x18, 0x58, 0x12, 0xc5, 0xff, - 0xe0, 0x70, 0x62, 0x6d, 0x43, 0xef, 0x87, 0x58, 0xbf, 0xf1, 0x75, 0x9c, - 0x14, 0x45, 0x27, 0x58, 0xac, 0x44, 0x5e, 0x92, 0xef, 0xf1, 0xbf, 0x97, - 0xda, 0x4d, 0x58, 0xbf, 0xcf, 0xd7, 0xd8, 0xef, 0xc5, 0x8a, 0x73, 0xea, - 0x23, 0x6a, 0x74, 0x56, 0x72, 0x11, 0x94, 0x62, 0x74, 0x10, 0x8d, 0xe6, - 0xff, 0xdc, 0xce, 0xa0, 0xfa, 0x2e, 0xb1, 0x62, 0xff, 0xd1, 0x7b, 0x05, - 0xa3, 0x18, 0x62, 0x58, 0xbf, 0x1c, 0xb3, 0xa8, 0xf5, 0x8b, 0x1f, 0x0f, - 0xbb, 0x88, 0x57, 0xf8, 0x51, 0x16, 0x7d, 0xbc, 0xb1, 0x5b, 0x26, 0x13, - 0x90, 0xae, 0x22, 0x7b, 0xff, 0x08, 0x1c, 0x2c, 0xe7, 0x24, 0x25, 0x8b, - 0xf8, 0xb6, 0x8e, 0xf8, 0x7a, 0x58, 0xa8, 0x1f, 0xa3, 0x20, 0x5f, 0x04, - 0x66, 0xce, 0xb1, 0x7e, 0x08, 0x7f, 0x63, 0xac, 0x5f, 0xee, 0xa1, 0xc3, - 0x39, 0xe7, 0x58, 0xa9, 0x3e, 0x17, 0x2a, 0xac, 0x45, 0x3f, 0xe1, 0x0f, - 0x7f, 0xec, 0x0b, 0xc3, 0x7c, 0xea, 0x1c, 0x58, 0xbf, 0xdf, 0x97, 0x26, - 0xd1, 0xab, 0x17, 0xff, 0x8e, 0x66, 0x0b, 0xbf, 0x7f, 0xb9, 0xd8, 0x6b, - 0x15, 0x12, 0x20, 0xc4, 0x67, 0x7f, 0x45, 0xf2, 0x60, 0x71, 0x62, 0xb0, - 0xf4, 0xc4, 0x49, 0x7f, 0xc7, 0xce, 0x19, 0x11, 0x49, 0xd6, 0x2f, 0xfc, - 0xc3, 0x30, 0x65, 0x22, 0x1e, 0x2c, 0x5f, 0xff, 0xb9, 0xb3, 0x18, 0x3f, - 0xce, 0xb5, 0x9d, 0xa7, 0xa5, 0x8b, 0xff, 0x49, 0x40, 0xc0, 0xfb, 0xa4, - 0xa0, 0xb1, 0x43, 0x54, 0xee, 0xe4, 0xfa, 0x8c, 0x5c, 0xe4, 0x20, 0x3b, - 0xf1, 0xf8, 0x4b, 0x77, 0xff, 0xd9, 0xb1, 0x83, 0xd3, 0xed, 0xe7, 0xc2, - 0xd9, 0x62, 0xff, 0xde, 0xe1, 0x9f, 0x70, 0x98, 0x8d, 0x58, 0xbf, 0xf8, - 0x8d, 0x06, 0xb2, 0x7a, 0x83, 0x9d, 0x62, 0xb1, 0x11, 0x0c, 0x85, 0x7f, - 0xec, 0x92, 0xf7, 0xba, 0x83, 0xe9, 0x62, 0xa5, 0x33, 0xb3, 0xc3, 0x6c, - 0x44, 0x37, 0xf7, 0x81, 0x9d, 0xd8, 0x4b, 0x17, 0xfc, 0x29, 0x23, 0x1f, - 0xd3, 0x12, 0xc5, 0xda, 0x01, 0x87, 0xd4, 0x73, 0x0b, 0xee, 0xd8, 0x2d, - 0xd6, 0x2f, 0xf6, 0x75, 0x1c, 0xfa, 0xc3, 0x56, 0x2f, 0xff, 0xf9, 0xb5, - 0xfc, 0xf3, 0xe1, 0x6d, 0xc9, 0xc2, 0x1f, 0xe5, 0x62, 0xda, 0x58, 0xbf, - 0xb3, 0xbb, 0xce, 0x5b, 0x2c, 0x5d, 0xe3, 0x36, 0x3c, 0x32, 0x12, 0xbf, - 0xff, 0xe0, 0x64, 0x46, 0x7d, 0x9f, 0xd2, 0x52, 0x0c, 0x92, 0x02, 0xc5, - 0xff, 0xf6, 0x6b, 0xa8, 0x37, 0x5a, 0xc7, 0xfc, 0x8d, 0x62, 0xff, 0x48, - 0x24, 0xef, 0xa8, 0x96, 0x29, 0xd1, 0x0a, 0x4a, 0x37, 0xff, 0xef, 0xe0, - 0x8e, 0x67, 0x25, 0xfa, 0xf7, 0xa4, 0xeb, 0x15, 0x2a, 0xb1, 0xb0, 0xbc, - 0xd2, 0x6e, 0x8e, 0x1a, 0x14, 0xe0, 0x2f, 0xf4, 0x3a, 0xbb, 0x88, 0x6f, - 0xff, 0xfd, 0xd6, 0x6c, 0x2e, 0xe3, 0x3a, 0x87, 0xa4, 0x23, 0x33, 0x40, - 0x04, 0xac, 0x5f, 0xf6, 0x45, 0x1c, 0x2f, 0x67, 0x5e, 0x58, 0xbd, 0x9a, - 0x1a, 0xc5, 0xd3, 0x05, 0x8b, 0xff, 0xee, 0x19, 0xa9, 0xdf, 0x0a, 0x28, - 0x67, 0xb8, 0xb1, 0x58, 0x8c, 0x63, 0x9f, 0x80, 0x74, 0x42, 0xf7, 0xfe, - 0x62, 0xcf, 0xe7, 0xb5, 0x81, 0x2c, 0x5f, 0xff, 0xee, 0x60, 0xb4, 0x69, - 0x9f, 0x7c, 0xf7, 0x0c, 0x2c, 0x1a, 0xc5, 0x6c, 0x8a, 0x2f, 0x1f, 0x5f, - 0x8d, 0x33, 0xb4, 0x3b, 0xd5, 0x8b, 0xff, 0xff, 0xe1, 0x1a, 0x42, 0xf4, - 0x59, 0xe7, 0xea, 0x05, 0x25, 0x9f, 0x7c, 0xd4, 0x4b, 0x15, 0x28, 0xb2, - 0xc3, 0x3a, 0xc4, 0x7b, 0xf5, 0x0d, 0x6b, 0xe0, 0x98, 0x80, 0xb1, 0x7f, - 0xd8, 0x17, 0xe4, 0xdc, 0xf7, 0x16, 0x2f, 0xf1, 0x6f, 0x3b, 0x94, 0x9d, - 0x62, 0xff, 0xf0, 0xff, 0x3a, 0xcf, 0x7b, 0x36, 0x9d, 0x96, 0x2d, 0x8e, - 0x88, 0x03, 0x9a, 0x5f, 0xfc, 0xc5, 0xb1, 0xc4, 0xe3, 0x72, 0x75, 0x8a, - 0xc4, 0xd2, 0x1c, 0x8f, 0x90, 0xbb, 0x08, 0x9e, 0xfb, 0xaf, 0x7d, 0xd6, - 0x2f, 0xdd, 0x40, 0x53, 0xe5, 0x8a, 0xc3, 0xce, 0x88, 0x92, 0xff, 0xb6, - 0xfc, 0x99, 0xcf, 0x8c, 0x6b, 0x17, 0xfb, 0xaf, 0xe7, 0xb5, 0x81, 0x2c, - 0x53, 0x9f, 0x98, 0x8f, 0x6f, 0xff, 0xe8, 0x4e, 0xba, 0x87, 0x0c, 0xfc, - 0xb9, 0x36, 0x8d, 0x58, 0xbf, 0xff, 0x64, 0x1f, 0xb1, 0x67, 0x0c, 0xcf, - 0xb7, 0x40, 0x58, 0xbc, 0x59, 0x05, 0x8b, 0x40, 0xc3, 0xf4, 0xf2, 0xc5, - 0xff, 0xba, 0x1f, 0xc4, 0xdc, 0x2c, 0x1a, 0xc5, 0x61, 0xf4, 0x88, 0xa6, - 0xff, 0xed, 0x98, 0x8c, 0xd6, 0x9c, 0xdc, 0x25, 0x8b, 0xfe, 0x6f, 0x7b, - 0x22, 0x83, 0xf9, 0x62, 0xfe, 0xc3, 0x4d, 0x6f, 0x71, 0x62, 0xfe, 0xce, - 0xa1, 0xc1, 0x44, 0xb1, 0x7d, 0x9f, 0x6f, 0x2c, 0x5c, 0xc7, 0x31, 0x10, - 0x7a, 0x30, 0x23, 0x1a, 0x94, 0x7c, 0x7e, 0x17, 0xb7, 0x00, 0x25, 0x8b, - 0xe8, 0xec, 0xd4, 0xac, 0x56, 0x8d, 0xf7, 0x61, 0x9b, 0xff, 0xe3, 0xf3, - 0xf2, 0x5e, 0xd4, 0xff, 0x77, 0xe2, 0xc5, 0xe7, 0x93, 0xac, 0x59, 0xd6, - 0x2b, 0x46, 0xb7, 0xc3, 0x97, 0x85, 0x20, 0x58, 0xb1, 0x18, 0x6f, 0xb4, - 0x43, 0x58, 0x98, 0x33, 0x91, 0xb4, 0x2f, 0x2e, 0xc2, 0x58, 0xa9, 0x5d, - 0x04, 0xc8, 0x4a, 0xf4, 0x43, 0xf8, 0xce, 0xd8, 0x87, 0x91, 0x9f, 0x7a, - 0x36, 0xb1, 0x19, 0xdf, 0xfb, 0xa8, 0x70, 0xce, 0x4c, 0x42, 0xd2, 0xc5, - 0xff, 0xbd, 0xc3, 0x35, 0x8f, 0xf9, 0x1a, 0xc5, 0x4a, 0x21, 0x31, 0x12, - 0xff, 0xbf, 0xf9, 0xe8, 0xc0, 0x8f, 0xba, 0xc5, 0xed, 0xda, 0x3d, 0x62, - 0xfe, 0xcf, 0x6b, 0x59, 0x05, 0x8a, 0x58, 0xbf, 0x67, 0xcb, 0x37, 0x58, - 0xa0, 0x1b, 0x42, 0x0c, 0xa7, 0x45, 0x1c, 0x44, 0x3e, 0x62, 0xbd, 0x9d, - 0x79, 0x62, 0xff, 0x60, 0xdf, 0xb7, 0x9f, 0x4b, 0x17, 0x67, 0x0c, 0x44, - 0x1c, 0x79, 0x83, 0x0f, 0x53, 0x27, 0x46, 0x51, 0xb2, 0xdf, 0xc7, 0x31, - 0xf6, 0x6f, 0x2c, 0x5e, 0xc7, 0x09, 0x62, 0xfd, 0x2f, 0xa1, 0x47, 0xac, - 0x58, 0xe3, 0x3c, 0x8f, 0x8e, 0xd4, 0xa2, 0x83, 0x1e, 0x2f, 0xdb, 0x94, - 0xfb, 0x8b, 0x17, 0xfe, 0xc9, 0x0b, 0xf9, 0xe7, 0xce, 0x2c, 0x5f, 0x9f, - 0x62, 0x63, 0xac, 0x54, 0xa2, 0x3f, 0x45, 0x3e, 0x3e, 0xad, 0x9d, 0x16, - 0xa0, 0xe3, 0xf1, 0xc4, 0x13, 0x63, 0x89, 0xde, 0x5f, 0x57, 0x51, 0xfd, - 0x3c, 0x66, 0x91, 0x42, 0xa7, 0x52, 0xcf, 0xcf, 0x1d, 0x3f, 0xe5, 0xb2, - 0xb3, 0xf8, 0x23, 0x3d, 0x28, 0xf5, 0x79, 0x1b, 0x87, 0xa7, 0x65, 0x05, - 0x18, 0x6f, 0x68, 0xf1, 0x03, 0x86, 0x47, 0x74, 0x2c, 0x2f, 0x85, 0x24, - 0x35, 0x8b, 0xfa, 0x3c, 0xc6, 0x8b, 0x19, 0x62, 0xff, 0xa4, 0xe5, 0x83, - 0xd3, 0xec, 0xb1, 0x7f, 0xff, 0x82, 0xf8, 0xa7, 0xa3, 0x35, 0xa9, 0xd8, - 0x99, 0xb4, 0x6a, 0xc5, 0xfe, 0x2c, 0x16, 0x1b, 0x00, 0x2c, 0x53, 0x22, - 0x68, 0x26, 0x6a, 0x94, 0xca, 0x20, 0x65, 0x90, 0xd3, 0xbf, 0xfe, 0x9d, - 0x8c, 0xfc, 0xbf, 0xb9, 0x3b, 0x67, 0x16, 0x2f, 0xfe, 0x9d, 0x79, 0xf3, - 0xb8, 0xe2, 0x92, 0x58, 0xbc, 0x6c, 0xe9, 0x62, 0xff, 0xfa, 0x4c, 0xfb, - 0x76, 0x33, 0x0e, 0x79, 0xd1, 0xab, 0x17, 0xe0, 0x1f, 0x33, 0xcb, 0x17, - 0xf8, 0xcd, 0x67, 0xcb, 0x22, 0x58, 0xbf, 0xc7, 0x33, 0xc5, 0x27, 0xe2, - 0xc5, 0x61, 0xf5, 0x39, 0xad, 0x62, 0x2c, 0x8a, 0x12, 0x57, 0xff, 0xfb, - 0xec, 0x0e, 0x18, 0x59, 0xd8, 0xb3, 0x98, 0x79, 0xdd, 0x62, 0xff, 0xff, - 0xfb, 0x42, 0x3b, 0xf0, 0xc8, 0xa0, 0x22, 0xf1, 0x9f, 0x98, 0x39, 0x61, - 0xe5, 0x62, 0xff, 0xb3, 0x99, 0xa7, 0xd9, 0x8e, 0xb1, 0x6e, 0x2c, 0x5f, - 0xbc, 0x66, 0xfe, 0x3a, 0xc5, 0x4a, 0x3d, 0xe1, 0x08, 0x06, 0x39, 0x10, - 0x95, 0x6c, 0xac, 0xae, 0x24, 0x6f, 0x8f, 0x14, 0x60, 0xfc, 0x26, 0xf4, - 0x6b, 0x57, 0xd8, 0x6c, 0xc1, 0x62, 0xf4, 0x96, 0xeb, 0x17, 0x08, 0xe6, - 0x1e, 0x01, 0xa4, 0x77, 0x1a, 0xeb, 0x17, 0xff, 0xf8, 0xb0, 0x73, 0xee, - 0x19, 0xee, 0xe2, 0x9e, 0x0a, 0x7a, 0x58, 0xbb, 0x0d, 0x58, 0xb7, 0x0c, - 0x3f, 0xd9, 0x65, 0xbf, 0xf9, 0xff, 0x9b, 0xfd, 0xc5, 0x25, 0xb2, 0xc5, - 0xff, 0x60, 0x86, 0x64, 0xf2, 0x60, 0xb1, 0x7c, 0x5e, 0x7f, 0xac, 0x51, - 0x87, 0xb8, 0xc7, 0x57, 0xf7, 0xcc, 0xe7, 0xe7, 0xa5, 0x8b, 0xff, 0xfe, - 0x93, 0x45, 0xf9, 0x3f, 0x22, 0x2c, 0x08, 0xb0, 0x58, 0x6a, 0xc5, 0xfd, - 0x9b, 0xc9, 0x99, 0x05, 0x8a, 0x94, 0x64, 0xc4, 0x63, 0xf6, 0x9a, 0xc4, - 0xef, 0x01, 0x0a, 0x1f, 0x43, 0xae, 0xa3, 0x77, 0x62, 0x85, 0x1a, 0x89, - 0xe6, 0x55, 0xf6, 0x5a, 0x45, 0x7d, 0xe3, 0x82, 0xea, 0x34, 0xa7, 0x34, - 0x69, 0x6f, 0xa5, 0x0a, 0x6e, 0x18, 0x7a, 0x12, 0xa2, 0x8f, 0x92, 0xf6, - 0xd3, 0x12, 0xc5, 0xe6, 0x20, 0x2c, 0x5f, 0xbe, 0x19, 0x74, 0x05, 0x8b, - 0xfe, 0x33, 0xbb, 0xd9, 0xff, 0x39, 0xd6, 0x2f, 0xfe, 0xd9, 0xbd, 0xac, - 0xd9, 0x8b, 0xdc, 0x58, 0xad, 0x91, 0x97, 0x83, 0x9b, 0x95, 0xb9, 0xf5, - 0xfe, 0xd6, 0x7f, 0xac, 0x14, 0x4b, 0x17, 0xff, 0xf4, 0x3f, 0x8f, 0x0e, - 0x61, 0x0b, 0xc5, 0x80, 0x95, 0x8b, 0x3a, 0xc5, 0xb5, 0x87, 0xd4, 0x05, - 0x9b, 0xff, 0xec, 0xf7, 0xf0, 0x62, 0xf7, 0x27, 0x82, 0xe2, 0xc5, 0xfd, - 0x38, 0x5b, 0x86, 0x75, 0x8b, 0xfd, 0xe1, 0x4e, 0x6c, 0x19, 0xd6, 0x2f, - 0xfd, 0xf9, 0x21, 0x45, 0x9c, 0xe4, 0xac, 0x5a, 0x3f, 0xe8, 0xf5, 0xf2, - 0x88, 0x65, 0xfd, 0xc6, 0xd7, 0xfd, 0xcf, 0x7e, 0x7d, 0xcf, 0xba, 0xc5, - 0x18, 0xa9, 0x02, 0x61, 0x40, 0xd1, 0x8e, 0x09, 0x2a, 0xe3, 0x8d, 0x62, - 0xff, 0xd8, 0x46, 0x4f, 0xdf, 0x59, 0x05, 0x8b, 0xff, 0xe2, 0x34, 0xce, - 0x0f, 0x44, 0xc1, 0x66, 0x79, 0x62, 0xf7, 0x80, 0x25, 0x8b, 0x63, 0x9f, - 0x81, 0x29, 0x5f, 0xfe, 0x3c, 0xef, 0xee, 0x60, 0x27, 0x3a, 0x82, 0xc5, - 0xf1, 0xaf, 0xbb, 0xac, 0x5d, 0x30, 0xc3, 0xf0, 0xf2, 0x65, 0xff, 0xe6, - 0xd4, 0x37, 0xfb, 0x8f, 0x4e, 0x2d, 0x96, 0x2b, 0xbe, 0xa9, 0xea, 0x48, - 0xc7, 0xe1, 0x5c, 0x50, 0x95, 0x11, 0x65, 0xec, 0x68, 0x96, 0x2f, 0xfc, - 0x50, 0x73, 0xfb, 0xf2, 0xfb, 0xac, 0x56, 0xc7, 0xb8, 0xc3, 0xb7, 0xff, - 0xfe, 0x7e, 0xc5, 0x9c, 0x33, 0xce, 0x66, 0x7a, 0x77, 0x7e, 0xd3, 0xf5, - 0x8b, 0xff, 0xff, 0xbf, 0x85, 0xb1, 0x9b, 0xfc, 0x5f, 0x9d, 0x03, 0xf9, - 0xe2, 0x9d, 0xd6, 0x2f, 0xe9, 0x07, 0xa3, 0xb3, 0xeb, 0x17, 0xf8, 0x72, - 0x03, 0x33, 0xaf, 0x2c, 0x5f, 0xff, 0x36, 0x9b, 0xfd, 0x43, 0x3c, 0x66, - 0xfc, 0x8f, 0x58, 0xbf, 0xff, 0x79, 0x98, 0xfc, 0x33, 0x07, 0xf1, 0x73, - 0x37, 0x58, 0xbf, 0xf3, 0x34, 0x0c, 0x2c, 0x09, 0x80, 0xb1, 0x7f, 0xee, - 0x7f, 0x18, 0x8c, 0xfc, 0xc7, 0xac, 0x5f, 0xe6, 0xf7, 0x22, 0x83, 0xfd, - 0x62, 0xfe, 0x78, 0x37, 0xbe, 0xeb, 0x17, 0xff, 0xcc, 0x71, 0xfe, 0x74, - 0x58, 0x3f, 0xb0, 0x4b, 0x14, 0x35, 0x43, 0x1b, 0x9b, 0x74, 0xaf, 0xf5, - 0x80, 0x1f, 0x92, 0x17, 0x8d, 0x7b, 0x16, 0xdf, 0x67, 0x50, 0xe2, 0xc5, - 0xfa, 0x3c, 0x65, 0x9f, 0x58, 0xaf, 0x9e, 0x7b, 0x12, 0x5f, 0x1b, 0xf7, - 0x3a, 0xc5, 0xfa, 0x27, 0x21, 0x4a, 0xc5, 0xe9, 0xdc, 0xc8, 0xd0, 0xf3, - 0x18, 0x92, 0xf8, 0x8e, 0xfe, 0x58, 0xb8, 0xfc, 0x58, 0xbc, 0xdc, 0x75, - 0x8b, 0xfb, 0xdf, 0xce, 0xc3, 0x95, 0x8a, 0x93, 0xe4, 0x00, 0xc0, 0x87, - 0x2f, 0xf8, 0x3d, 0xb0, 0x98, 0xed, 0xf5, 0x8b, 0xe7, 0xd1, 0x32, 0xc5, - 0x6c, 0xbb, 0x99, 0x02, 0x21, 0xb8, 0xee, 0xec, 0xf2, 0x92, 0x62, 0x86, - 0x29, 0xdb, 0x58, 0xe4, 0xa1, 0x0d, 0xe2, 0xee, 0xc7, 0x57, 0x8d, 0x60, - 0x96, 0x2f, 0xfd, 0xf7, 0xeb, 0xda, 0x9f, 0x3f, 0x65, 0x8b, 0xfd, 0xce, - 0x4b, 0xec, 0xde, 0x58, 0xbf, 0xee, 0x30, 0x5d, 0xcf, 0x84, 0x35, 0x8b, - 0xfb, 0x3d, 0x8c, 0x51, 0x2c, 0x5f, 0x67, 0x27, 0x4b, 0x16, 0x37, 0xe7, - 0x9e, 0x45, 0xb6, 0x84, 0xa3, 0x9f, 0x0d, 0x05, 0x08, 0xbb, 0x41, 0x62, - 0xf0, 0xc4, 0x05, 0x8b, 0xff, 0xfa, 0x63, 0xcc, 0x7c, 0x2c, 0xfb, 0xe1, - 0x75, 0x0e, 0x2c, 0x5f, 0xee, 0xe7, 0xce, 0xbe, 0xf8, 0xb1, 0x62, 0xe9, - 0x12, 0x60, 0x5d, 0xbf, 0xcc, 0x40, 0x3b, 0xe7, 0x4b, 0x17, 0xf6, 0x7b, - 0x9f, 0x73, 0x56, 0x2f, 0xb9, 0xf7, 0x35, 0x62, 0xfd, 0xb6, 0x68, 0xb0, - 0x8f, 0x4f, 0xc5, 0xf7, 0x8e, 0xc3, 0x58, 0xbf, 0xa1, 0x07, 0xe0, 0x8e, - 0xb1, 0x52, 0x79, 0x9d, 0x0e, 0xdf, 0xe2, 0x14, 0x32, 0x29, 0x8f, 0x58, - 0xa9, 0x54, 0xa8, 0x31, 0x2c, 0x85, 0x89, 0xa5, 0x3f, 0x84, 0x31, 0x42, - 0x27, 0xc4, 0x56, 0xef, 0x16, 0x2f, 0x6e, 0xe7, 0x58, 0xbf, 0x7f, 0x3d, - 0x23, 0x58, 0xb9, 0xb4, 0xb1, 0x58, 0x7b, 0xb1, 0x0f, 0x78, 0xa2, 0xf0, - 0x72, 0x4b, 0x17, 0x89, 0xa0, 0xb1, 0x7e, 0xc3, 0x71, 0xe2, 0x58, 0xbd, - 0x9f, 0x33, 0x0f, 0x14, 0x87, 0x2e, 0x92, 0x58, 0xb9, 0x82, 0x31, 0x15, - 0x5e, 0x62, 0x0c, 0xca, 0xb1, 0x31, 0x72, 0x86, 0xcd, 0xff, 0xec, 0x19, - 0x82, 0x60, 0xfc, 0x26, 0xda, 0x56, 0x2f, 0xa4, 0xfc, 0x3a, 0xc5, 0xf9, - 0xbc, 0x66, 0xe1, 0x2c, 0x5f, 0xfb, 0x0d, 0xfe, 0x7b, 0x85, 0x30, 0x58, - 0xa9, 0x46, 0xdb, 0xa6, 0xb1, 0x18, 0x8b, 0x2f, 0xb6, 0xf3, 0xec, 0xb1, - 0x7f, 0xa7, 0xa8, 0x70, 0xcf, 0x3a, 0xc5, 0xfb, 0xcc, 0x77, 0xf2, 0xc5, - 0x62, 0x20, 0xce, 0x4a, 0x46, 0xd7, 0x86, 0xe3, 0x58, 0xbf, 0xff, 0xf0, - 0xa7, 0x46, 0x4f, 0xe4, 0x66, 0x79, 0xf3, 0xbb, 0xa8, 0x37, 0x4b, 0x17, - 0x80, 0xd1, 0xeb, 0x17, 0xee, 0x14, 0xc5, 0xe5, 0x8a, 0x1a, 0x36, 0x48, - 0x77, 0x8e, 0x7e, 0x20, 0xbf, 0xff, 0xbc, 0x2d, 0x37, 0x3c, 0xe6, 0x7f, - 0x36, 0x62, 0xdd, 0x62, 0xdd, 0xf5, 0x58, 0xa7, 0x3f, 0x8e, 0x2f, 0x5a, - 0x0b, 0x17, 0xff, 0xc6, 0x3e, 0x6c, 0x64, 0x4f, 0xe7, 0xd3, 0x01, 0x62, - 0xa5, 0x52, 0x0e, 0x46, 0x0e, 0xd0, 0xb4, 0xf1, 0x08, 0x84, 0xaf, 0xfe, - 0x36, 0x4b, 0x73, 0x1f, 0x5a, 0x70, 0x96, 0x2f, 0xfd, 0xd4, 0x3f, 0x9d, - 0x43, 0xcf, 0x12, 0xc5, 0xe9, 0x29, 0x58, 0xbe, 0xfb, 0x80, 0x25, 0x8b, - 0xc5, 0xbc, 0xac, 0x5f, 0xbf, 0x3a, 0xcd, 0x96, 0x2f, 0xff, 0x14, 0xf5, - 0xc6, 0xd1, 0xe7, 0xa8, 0x71, 0x62, 0xff, 0xff, 0xf6, 0x7b, 0x8d, 0x11, - 0x85, 0x9d, 0x43, 0x05, 0xb1, 0x60, 0xfe, 0xf1, 0x2c, 0x56, 0xe8, 0xf0, - 0x39, 0x4f, 0xd3, 0x2e, 0x2f, 0x2c, 0x5f, 0xfe, 0xe4, 0xc3, 0xd9, 0xf2, - 0xcf, 0x7d, 0xd6, 0x2a, 0x4f, 0x81, 0xc5, 0xee, 0x11, 0xab, 0x14, 0x62, - 0xaa, 0x19, 0x48, 0x1a, 0x19, 0xa3, 0x6e, 0x49, 0xa8, 0xc3, 0x7f, 0x09, - 0x1f, 0x10, 0x5e, 0x3f, 0xd9, 0x62, 0xf1, 0x81, 0x9d, 0x62, 0xfd, 0x23, - 0xee, 0x93, 0xac, 0x5c, 0x23, 0x56, 0x2f, 0xbf, 0xf1, 0x1a, 0xb1, 0x5f, - 0x37, 0xc1, 0x8c, 0xdc, 0x23, 0x56, 0x2f, 0xbf, 0xf1, 0x1a, 0xb1, 0x77, - 0xb8, 0x61, 0xf0, 0x7c, 0x88, 0x31, 0x9b, 0xff, 0x02, 0x2f, 0xb8, 0x09, - 0xba, 0x82, 0xc5, 0x2c, 0x53, 0x1e, 0x6f, 0x10, 0x68, 0xc4, 0xdd, 0x26, - 0x19, 0x39, 0x08, 0xab, 0xdf, 0x37, 0xcb, 0x17, 0xef, 0x7b, 0xd8, 0x12, - 0xc5, 0x49, 0xe4, 0xb8, 0xfd, 0x4a, 0xa5, 0x4e, 0x87, 0x4f, 0x1c, 0xa0, - 0x21, 0x07, 0x78, 0xf3, 0xba, 0xc5, 0xda, 0xc5, 0x8b, 0xd8, 0xe3, 0x58, - 0xb7, 0x16, 0x2e, 0x2c, 0xdc, 0xd7, 0x74, 0x39, 0x7f, 0xef, 0xc9, 0x19, - 0xa9, 0x0d, 0x89, 0x62, 0xff, 0xf6, 0x98, 0xbd, 0xf6, 0x86, 0x0d, 0xa0, - 0xb1, 0x79, 0xf0, 0x96, 0x2e, 0x98, 0x96, 0x2f, 0xd3, 0xad, 0x34, 0x7a, - 0xc5, 0x39, 0xe1, 0x88, 0x62, 0xff, 0xec, 0x01, 0x9f, 0x7f, 0x70, 0x9e, - 0x25, 0x8b, 0x0d, 0x62, 0xf8, 0x07, 0xce, 0x2c, 0x5f, 0x16, 0x70, 0xcc, - 0x36, 0xbc, 0x12, 0xad, 0x93, 0xe6, 0xdc, 0xb7, 0x47, 0xe7, 0x49, 0xe2, - 0xf7, 0x88, 0x7b, 0x3d, 0xd9, 0x96, 0x2f, 0xfe, 0x8b, 0xbb, 0xf9, 0xec, - 0x01, 0xda, 0x25, 0x8a, 0x8d, 0x15, 0x86, 0xc8, 0xf6, 0x4a, 0x2b, 0x26, - 0x91, 0x08, 0xdf, 0xff, 0x8c, 0xea, 0x13, 0xf3, 0x3f, 0x9e, 0xf4, 0xe8, - 0x0b, 0x17, 0x06, 0x75, 0x8b, 0xfe, 0xfe, 0x6d, 0x3d, 0x13, 0x84, 0xb1, - 0x58, 0x7a, 0x9c, 0x19, 0xa3, 0xa3, 0x3c, 0x10, 0xae, 0xbf, 0xcc, 0x40, - 0x30, 0x2c, 0xfa, 0xc5, 0xff, 0x81, 0x1d, 0x9f, 0x79, 0x3b, 0x0d, 0x62, - 0xff, 0xbe, 0xe7, 0x98, 0xff, 0xe6, 0xcb, 0x14, 0xb1, 0x6e, 0x18, 0x79, - 0x3b, 0x1e, 0xd4, 0x11, 0xd2, 0x46, 0xa2, 0x84, 0x55, 0xfd, 0xac, 0x81, - 0x49, 0xd6, 0x2f, 0xd9, 0x02, 0x93, 0xac, 0x5c, 0x40, 0x30, 0xf5, 0x34, - 0x5b, 0x7f, 0xff, 0xfe, 0x87, 0x38, 0x29, 0xf3, 0x8f, 0x0a, 0x23, 0x0b, - 0x35, 0x25, 0xef, 0xe7, 0x72, 0xc5, 0xff, 0xa7, 0x1f, 0xdf, 0x92, 0x9d, - 0xd6, 0x2f, 0xe3, 0xf5, 0x3f, 0xfc, 0xac, 0x5e, 0xea, 0x1c, 0xd8, 0xfb, - 0x30, 0xf6, 0xb1, 0x35, 0x5e, 0x8b, 0xb5, 0x0f, 0x2b, 0x71, 0x62, 0xa5, - 0x59, 0xb6, 0x46, 0x22, 0x28, 0xf7, 0x43, 0x36, 0xbf, 0x67, 0x3e, 0xf0, - 0x58, 0xb6, 0xcb, 0x17, 0xd3, 0xec, 0x02, 0xc5, 0x2c, 0x56, 0xc6, 0xbb, - 0xbf, 0x22, 0xbf, 0xff, 0xec, 0xed, 0x86, 0x7d, 0x9f, 0xcc, 0x7c, 0x30, - 0x7a, 0x70, 0x96, 0x2f, 0xe1, 0xb1, 0x41, 0xce, 0xb1, 0x7f, 0xf6, 0x43, - 0xed, 0x09, 0xf6, 0xb0, 0x6b, 0x17, 0xed, 0x67, 0x50, 0xe2, 0xc5, 0xfb, - 0xed, 0x0f, 0xba, 0xc5, 0xed, 0xff, 0x8b, 0x15, 0xb1, 0xf8, 0x40, 0xab, - 0x45, 0x17, 0xf0, 0x38, 0x60, 0x39, 0xa5, 0x8a, 0xc3, 0xe1, 0x63, 0x0b, - 0xfe, 0xea, 0x75, 0xb1, 0x98, 0xe3, 0x58, 0xba, 0x27, 0x58, 0xbf, 0xfb, - 0x3c, 0x66, 0x43, 0xf8, 0xf0, 0xe2, 0xc5, 0x41, 0x57, 0xae, 0x14, 0x3a, - 0x0f, 0xc9, 0xd9, 0xa8, 0x05, 0xa5, 0x18, 0xa8, 0x88, 0x3b, 0x1e, 0x47, - 0x0c, 0x5f, 0x7e, 0x34, 0xde, 0x39, 0x62, 0xff, 0xf6, 0x6a, 0x5c, 0x78, - 0x73, 0x39, 0x23, 0x58, 0xbf, 0x75, 0x09, 0x04, 0xac, 0x5f, 0xfb, 0x3d, - 0xec, 0x7e, 0xc5, 0x9c, 0x58, 0xa3, 0x11, 0x65, 0x89, 0x5f, 0x29, 0xbf, - 0xd1, 0x73, 0x8c, 0x5b, 0x9d, 0x62, 0xfc, 0x59, 0xf6, 0xf2, 0xc5, 0x74, - 0x88, 0xdd, 0x18, 0x1c, 0xda, 0xf6, 0x45, 0x2b, 0x17, 0xd3, 0xfc, 0xe2, - 0xc5, 0x68, 0xdf, 0x90, 0xed, 0xff, 0x3c, 0x74, 0x9f, 0x9f, 0xc3, 0xac, - 0x5f, 0x3f, 0x6c, 0xd2, 0xc5, 0xff, 0x76, 0xea, 0x1c, 0xc1, 0x68, 0x0b, - 0x17, 0xdc, 0xfb, 0x1d, 0x62, 0x9c, 0xf8, 0x7c, 0x7d, 0x5d, 0xe2, 0xad, - 0xe9, 0x8d, 0xb1, 0xdc, 0x0e, 0x41, 0xf3, 0xc2, 0x84, 0x2d, 0xf1, 0x9b, - 0xec, 0x12, 0xc5, 0xfb, 0x3e, 0x67, 0xb8, 0xb1, 0x7f, 0x16, 0x00, 0xf3, - 0x05, 0x8b, 0xf1, 0x67, 0xbe, 0xeb, 0x14, 0x33, 0xd4, 0x08, 0xb6, 0xfd, - 0xb1, 0x82, 0x98, 0x96, 0x2e, 0xe1, 0xd6, 0x2f, 0xff, 0xf8, 0xa4, 0x1d, - 0x43, 0x82, 0x9f, 0x16, 0x0d, 0xf3, 0x51, 0x2c, 0x54, 0xa3, 0x39, 0x88, - 0xf8, 0x59, 0xe1, 0x8a, 0x31, 0xd6, 0x63, 0x4c, 0x3a, 0xb6, 0x94, 0xfa, - 0x39, 0x43, 0xb9, 0x3d, 0x06, 0x6c, 0x2b, 0xb7, 0x1f, 0xea, 0x32, 0x97, - 0x95, 0x1b, 0x1e, 0xe7, 0x14, 0x71, 0x7a, 0x8c, 0x0b, 0xf2, 0xbf, 0x9a, - 0x57, 0xa8, 0x25, 0x69, 0x14, 0xb5, 0x7e, 0x4e, 0x2d, 0x7a, 0x59, 0xf8, - 0xa5, 0xb9, 0x76, 0x66, 0x08, 0xa0, 0x38, 0xd3, 0x2f, 0xb2, 0x21, 0x0d, - 0x62, 0xfd, 0x07, 0xd6, 0x74, 0xb1, 0x7b, 0x9f, 0xc5, 0x8b, 0xf6, 0x73, - 0x6c, 0x09, 0x62, 0xff, 0xef, 0x88, 0x7f, 0x17, 0xb9, 0xf1, 0x44, 0xb1, - 0x7d, 0xc1, 0x4e, 0x96, 0x2b, 0x74, 0xc0, 0x3a, 0x24, 0x88, 0xa7, 0xe3, - 0xa4, 0x55, 0xc4, 0x9a, 0x58, 0xbb, 0xdc, 0x58, 0xa9, 0x34, 0x84, 0x19, - 0x7f, 0xf9, 0xf4, 0xf9, 0xd1, 0x9e, 0x88, 0xa4, 0xeb, 0x17, 0xff, 0x63, - 0x74, 0x60, 0xe7, 0x63, 0x0d, 0x35, 0x62, 0xb7, 0x44, 0xbf, 0x49, 0x97, - 0xf4, 0x9c, 0xb3, 0x6c, 0x58, 0xbd, 0xee, 0x7f, 0x0f, 0x4b, 0xe4, 0xb7, - 0xff, 0xe3, 0xf5, 0x0e, 0x6b, 0xa9, 0xf7, 0x27, 0xef, 0xe5, 0x8b, 0xfe, - 0xc3, 0x4b, 0x3d, 0xf7, 0x09, 0x62, 0xfd, 0x81, 0x60, 0xce, 0xb1, 0x7f, - 0x7f, 0x39, 0x3a, 0xdd, 0x62, 0xfe, 0x86, 0x18, 0xfa, 0x12, 0xc5, 0xff, - 0x3e, 0x10, 0xdf, 0xb4, 0x8d, 0x62, 0xe9, 0xe8, 0xc4, 0x4b, 0xc4, 0x5f, - 0xf2, 0xfa, 0x94, 0xf1, 0x1c, 0xcf, 0x4b, 0x3f, 0x3a, 0x28, 0x60, 0x5d, - 0x1e, 0x35, 0x8b, 0xff, 0xbc, 0xfa, 0x9c, 0x2f, 0x73, 0x09, 0x62, 0xff, - 0xfb, 0x6c, 0xdc, 0x7f, 0x7c, 0x34, 0xc3, 0x45, 0x2b, 0x17, 0xf6, 0x6b, - 0x59, 0xee, 0x2c, 0x5f, 0xc4, 0xc6, 0x9d, 0xa0, 0xb1, 0x7a, 0x0f, 0xef, - 0x9e, 0xe7, 0x8b, 0xad, 0xb2, 0xc5, 0xfb, 0x0e, 0x59, 0xd2, 0xc5, 0xfd, - 0xe7, 0xed, 0x25, 0xba, 0xc5, 0x70, 0xf6, 0x03, 0x28, 0xbb, 0xf8, 0xb1, - 0x7f, 0x1e, 0x77, 0x33, 0x86, 0xac, 0x5f, 0xa0, 0xe4, 0x0e, 0x2c, 0x5f, - 0xa4, 0xef, 0xf9, 0x58, 0xbc, 0x41, 0xfd, 0x62, 0xff, 0x67, 0xbe, 0xfe, - 0xcd, 0xd6, 0x2e, 0x7e, 0x96, 0x2f, 0xa7, 0x0b, 0x75, 0x8a, 0x31, 0x34, - 0x78, 0x11, 0xe0, 0xbc, 0x46, 0x5a, 0x28, 0x62, 0x72, 0x1e, 0xe1, 0xa7, - 0x86, 0x2f, 0xc0, 0xc1, 0xb4, 0x16, 0x2f, 0xff, 0x4c, 0x9c, 0xc1, 0xfe, - 0x4c, 0xfc, 0xc7, 0xac, 0x54, 0x6c, 0xaf, 0xa2, 0x46, 0xdd, 0x0a, 0x28, - 0x58, 0x9c, 0xcf, 0xf1, 0xd9, 0x33, 0xf1, 0x14, 0x5f, 0xff, 0xed, 0x67, - 0x33, 0x7c, 0xd4, 0xf9, 0xf7, 0x71, 0xc5, 0x2b, 0x17, 0xf3, 0x6d, 0xdc, - 0x59, 0xd2, 0xc5, 0xd0, 0xe6, 0x91, 0x29, 0xe6, 0x2b, 0xfb, 0xf3, 0x01, - 0x30, 0x6b, 0x17, 0xe1, 0xff, 0x0b, 0xcb, 0x15, 0x03, 0xd7, 0x88, 0xbe, - 0xba, 0x45, 0x49, 0x42, 0x1a, 0xff, 0xb4, 0xf8, 0x17, 0xbc, 0xc4, 0xb1, - 0x77, 0x46, 0xac, 0x5c, 0xfd, 0x18, 0x7a, 0x63, 0x39, 0xbc, 0xe0, 0xc5, - 0x8b, 0xe8, 0x99, 0xa0, 0xb1, 0x73, 0x0d, 0x62, 0x9c, 0xdd, 0x00, 0x8e, - 0xdc, 0x81, 0xfb, 0x62, 0xb5, 0xff, 0xec, 0x0b, 0xbb, 0xf9, 0xec, 0x01, - 0xda, 0x25, 0x8b, 0xf6, 0x4e, 0xa0, 0x05, 0x8a, 0x94, 0xef, 0xb4, 0xf6, - 0xd0, 0xa5, 0x22, 0x71, 0x27, 0xdf, 0xf9, 0xbb, 0x16, 0x7b, 0x00, 0x43, - 0x58, 0xb0, 0x16, 0x29, 0xcf, 0x46, 0x23, 0xfb, 0xfe, 0xfe, 0xcf, 0x85, - 0xd4, 0x38, 0xb1, 0x7f, 0xdf, 0x8b, 0xf9, 0xd4, 0x30, 0x96, 0x2f, 0xf7, - 0xf3, 0x72, 0xc1, 0x47, 0xac, 0x54, 0x9f, 0x97, 0x47, 0x77, 0xf8, 0xce, - 0x61, 0x4e, 0xa2, 0x58, 0xbd, 0xd6, 0x6e, 0xb1, 0x7f, 0xfb, 0x37, 0xe6, - 0x7a, 0x2c, 0x34, 0xb0, 0x0b, 0x15, 0xa4, 0x50, 0x70, 0xd4, 0x21, 0xfb, - 0xff, 0xfe, 0xc3, 0x4c, 0xc3, 0x74, 0xfd, 0x16, 0x78, 0x40, 0x3b, 0x41, - 0x62, 0xa5, 0x50, 0x56, 0x42, 0xb5, 0xe1, 0x84, 0x23, 0x1b, 0xfc, 0xfa, - 0x1b, 0xc0, 0x5a, 0x58, 0xa8, 0x1f, 0xd6, 0xe8, 0xd4, 0xb1, 0x7f, 0x4e, - 0xbc, 0xf9, 0xd2, 0xc5, 0xff, 0x48, 0xb7, 0xeb, 0xcf, 0x84, 0xb1, 0x5f, - 0x3e, 0x82, 0x2e, 0xbe, 0x84, 0x83, 0x8b, 0x17, 0xf3, 0xf4, 0x0d, 0x30, - 0xd6, 0x2f, 0x66, 0x80, 0xb1, 0x7e, 0xe3, 0xe1, 0x01, 0x62, 0xd8, 0xe7, - 0x89, 0xc1, 0xdb, 0xf3, 0x80, 0x19, 0xa5, 0x8b, 0xe1, 0xfe, 0x60, 0xb1, - 0x51, 0xb2, 0x73, 0x83, 0x74, 0xc2, 0x1f, 0x91, 0x93, 0x9f, 0x09, 0x83, - 0x28, 0xb7, 0x78, 0xb1, 0x7a, 0x35, 0xc6, 0xf1, 0xb2, 0xc5, 0xf9, 0xb0, - 0x9c, 0xd5, 0x8b, 0xde, 0xcf, 0xac, 0x57, 0x7c, 0x3f, 0x22, 0x2e, 0xee, - 0x27, 0xbe, 0xcc, 0xff, 0x16, 0x2f, 0xff, 0xff, 0xf9, 0xf7, 0xfe, 0x4f, - 0x5b, 0x4e, 0x3f, 0x40, 0x92, 0xdd, 0xbe, 0x4c, 0x03, 0x37, 0xeb, 0x8b, - 0x17, 0xff, 0xd3, 0xb7, 0xba, 0x80, 0x88, 0xd3, 0x1f, 0xb3, 0xac, 0x56, - 0xe8, 0xef, 0x28, 0x4c, 0xdc, 0xe7, 0x58, 0xbe, 0x33, 0xa1, 0x12, 0xc5, - 0xfe, 0xc0, 0x8c, 0x90, 0x48, 0x16, 0x2f, 0xff, 0xfa, 0x0d, 0xd1, 0x84, - 0x2e, 0xe3, 0x33, 0xa8, 0x60, 0x88, 0x1c, 0x58, 0xbc, 0x76, 0x3a, 0xc5, - 0x6c, 0x8c, 0x0e, 0x8d, 0x59, 0xba, 0xa2, 0x4d, 0x54, 0xe5, 0x1d, 0x85, - 0xfb, 0xa1, 0xcb, 0x7f, 0xd1, 0xb7, 0xbc, 0xe5, 0xd4, 0x38, 0xb1, 0x7d, - 0x1f, 0xfc, 0x8f, 0x58, 0xbd, 0x1c, 0xfd, 0xfa, 0xc5, 0x18, 0xb8, 0xcd, - 0x1b, 0x34, 0xed, 0x08, 0x91, 0x9b, 0xe4, 0xa6, 0x63, 0x52, 0x59, 0x02, - 0x38, 0xa6, 0xff, 0xf1, 0x49, 0xcc, 0xfe, 0x75, 0xec, 0x68, 0x96, 0x2f, - 0xff, 0xff, 0xba, 0xe0, 0xa7, 0xa3, 0x3f, 0x83, 0x30, 0xb0, 0x46, 0x99, - 0xc0, 0x01, 0xfc, 0xb1, 0x7f, 0xe1, 0x4f, 0x76, 0xb3, 0xdc, 0x9d, 0x96, + 0x30, 0x2e, 0x6c, 0xb1, 0x52, 0x98, 0x6c, 0x15, 0x99, 0x70, 0x44, 0x74, + 0x4b, 0xa7, 0x7c, 0x8c, 0x9f, 0xd2, 0xf6, 0x2f, 0xfc, 0xfe, 0xe4, 0xfb, + 0xf3, 0xd8, 0x16, 0x2f, 0x16, 0x4a, 0xc5, 0xfd, 0x3b, 0x7d, 0xf0, 0x6b, + 0x15, 0x87, 0x93, 0xa1, 0xbb, 0xff, 0xdc, 0x30, 0x7f, 0x11, 0x92, 0xe3, + 0x0f, 0x4b, 0x17, 0xff, 0x86, 0x42, 0x6f, 0x0a, 0x74, 0xf9, 0xa5, 0x8a, + 0x74, 0x4c, 0x09, 0x3e, 0xff, 0xf1, 0xcb, 0x01, 0x20, 0x8a, 0x13, 0xad, + 0x96, 0x2f, 0x45, 0xc7, 0x58, 0xbd, 0x1d, 0x92, 0xb1, 0x52, 0x6f, 0x7c, + 0x3d, 0x7f, 0xfd, 0xa1, 0x17, 0x8c, 0x00, 0x1f, 0x4f, 0xd8, 0x16, 0x2f, + 0xf4, 0x9e, 0x63, 0x02, 0x08, 0x25, 0x8a, 0x96, 0x50, 0xbc, 0x21, 0x78, + 0x32, 0x2c, 0x38, 0xdd, 0x19, 0xe7, 0x78, 0xa2, 0x3f, 0xd4, 0x22, 0x4f, + 0x0b, 0x96, 0x22, 0x28, 0x44, 0xf0, 0x83, 0xa9, 0x4e, 0xff, 0xfb, 0xe2, + 0xe1, 0x9f, 0x73, 0x3c, 0x4c, 0x0e, 0x2c, 0x5f, 0xff, 0xd0, 0x9d, 0x1a, + 0x72, 0x7e, 0xe1, 0xc1, 0xe9, 0xf6, 0x58, 0xbf, 0xff, 0xdc, 0x71, 0x0c, + 0xc3, 0x49, 0x86, 0x2c, 0xf9, 0x91, 0x44, 0xb1, 0x6c, 0x1a, 0x63, 0x31, + 0x29, 0xf1, 0x7e, 0xf4, 0xc5, 0xc5, 0x8b, 0x7d, 0x62, 0xe1, 0x0d, 0x62, + 0xe9, 0xf2, 0xc5, 0xe8, 0x49, 0xd6, 0x2f, 0xee, 0x11, 0x60, 0x38, 0xb1, + 0x46, 0x22, 0x2e, 0x21, 0x2d, 0x0c, 0x30, 0xbf, 0x87, 0x6f, 0xff, 0xe2, + 0x6f, 0x73, 0x34, 0x00, 0x4e, 0x77, 0xee, 0x3a, 0xc5, 0xf4, 0x27, 0x5b, + 0x2c, 0x5c, 0xc3, 0xc3, 0xff, 0x89, 0x6e, 0xd1, 0xba, 0xc5, 0x18, 0xf9, + 0x47, 0x73, 0x2d, 0xeb, 0x66, 0x91, 0x8d, 0x65, 0xa5, 0xb8, 0xde, 0x51, + 0x9f, 0x70, 0x93, 0x79, 0xfe, 0xbd, 0x46, 0xc9, 0xf9, 0xe5, 0x96, 0xa5, + 0x1f, 0x94, 0x7d, 0x7e, 0x37, 0x14, 0x2a, 0x42, 0x86, 0x54, 0x71, 0x6d, + 0xef, 0x67, 0xd6, 0x2f, 0x73, 0x37, 0x58, 0xbf, 0x41, 0xc7, 0x84, 0xb1, + 0x73, 0xf6, 0xb1, 0x46, 0x1e, 0xec, 0x8f, 0x0c, 0x9e, 0xfe, 0xce, 0xe1, + 0x82, 0x89, 0x62, 0xf7, 0x1f, 0x4b, 0x17, 0xff, 0x33, 0xfa, 0x12, 0x5e, + 0xe3, 0x8d, 0x62, 0x8c, 0x44, 0x84, 0x98, 0x7c, 0x76, 0xed, 0x62, 0xc5, + 0xef, 0x3f, 0x45, 0x8a, 0x01, 0xb6, 0x21, 0x7b, 0xe8, 0x09, 0xbc, 0xb1, + 0x74, 0xc7, 0xac, 0x5c, 0x28, 0xf5, 0x8b, 0xd2, 0x52, 0xb1, 0x5b, 0x9e, + 0x86, 0x86, 0x8e, 0x37, 0x7f, 0xf6, 0x75, 0x0f, 0x52, 0x10, 0xc9, 0xbe, + 0xb1, 0x52, 0x98, 0x5e, 0x10, 0x3b, 0x9f, 0xcc, 0x2f, 0xbd, 0xc6, 0x02, + 0xc5, 0xff, 0xf0, 0xb6, 0x32, 0x5f, 0xfb, 0xc8, 0x0e, 0xd0, 0x58, 0xbf, + 0xf3, 0x98, 0xfa, 0x16, 0xcd, 0xad, 0xd6, 0x28, 0xd4, 0x4a, 0xfd, 0x4e, + 0xf9, 0xfe, 0xdb, 0x2c, 0x5f, 0x3e, 0xed, 0xa5, 0x8b, 0xf4, 0x91, 0xcd, + 0x35, 0x62, 0xff, 0x3f, 0x1c, 0x5d, 0x78, 0xe5, 0x62, 0xf4, 0xfa, 0x56, + 0x2a, 0x08, 0xa1, 0x19, 0x1f, 0x8a, 0xba, 0x1c, 0x5f, 0xc6, 0x16, 0x0e, + 0x40, 0xb1, 0x7c, 0x77, 0x2d, 0xd6, 0x28, 0x67, 0xa3, 0xf2, 0xeb, 0xec, + 0xf3, 0xf1, 0x62, 0xb0, 0xf1, 0x38, 0x45, 0x7a, 0x3b, 0x06, 0xb1, 0x77, + 0x9d, 0x62, 0xa4, 0xdb, 0xb9, 0x05, 0xe8, 0x49, 0xd6, 0x2e, 0x60, 0xd6, + 0x2b, 0xe6, 0xd7, 0x83, 0xb7, 0xfe, 0xf7, 0xdf, 0x30, 0x65, 0x81, 0x2c, + 0x56, 0x1e, 0xfb, 0x90, 0xdf, 0x69, 0xfb, 0x82, 0xc5, 0xff, 0xb9, 0x31, + 0x67, 0xdf, 0x5f, 0x65, 0x8b, 0xfb, 0x59, 0xfe, 0xe1, 0xc5, 0x8b, 0xb3, + 0xeb, 0x17, 0x73, 0x16, 0x28, 0x68, 0xc1, 0x72, 0x4d, 0x1f, 0x9c, 0xc1, + 0x85, 0xef, 0x69, 0xcd, 0x58, 0xbf, 0xf1, 0xf1, 0xfc, 0xde, 0xfc, 0xf9, + 0x62, 0xe7, 0xfa, 0xc5, 0xb1, 0x62, 0xff, 0xf8, 0x58, 0xff, 0xcd, 0xfe, + 0xe6, 0x04, 0x7d, 0xd6, 0x2f, 0x7b, 0x02, 0x58, 0xb6, 0xc4, 0x7e, 0x5e, + 0x54, 0xa3, 0xa2, 0xac, 0x50, 0x83, 0xbd, 0xb0, 0xbc, 0xb1, 0x7d, 0xf7, + 0x60, 0x2c, 0x56, 0x1e, 0x0f, 0x87, 0xed, 0x2b, 0x16, 0xfa, 0xc5, 0x6c, + 0x68, 0xcd, 0x11, 0xbf, 0x1a, 0x2c, 0x34, 0x0b, 0x17, 0xbe, 0xe1, 0x2c, + 0x5b, 0x0d, 0x3c, 0x9f, 0x15, 0xdf, 0x77, 0x09, 0x3a, 0xc5, 0x62, 0x2e, + 0x09, 0xb3, 0xc5, 0x17, 0xa1, 0x9d, 0xac, 0x58, 0x25, 0x8a, 0x30, 0xf7, + 0xe2, 0x2e, 0xe0, 0xf5, 0xb6, 0x58, 0xbd, 0x16, 0x6b, 0x0f, 0x11, 0x8c, + 0x6d, 0xc5, 0x8b, 0xa7, 0xeb, 0x15, 0xd9, 0xa9, 0x88, 0x4a, 0x86, 0xad, + 0x23, 0x21, 0x84, 0x06, 0x9f, 0x47, 0x3e, 0x25, 0xbb, 0xff, 0xc2, 0x23, + 0x33, 0x5b, 0x1f, 0x39, 0xfc, 0x58, 0xbe, 0xeb, 0xc9, 0xbc, 0xb1, 0x5b, + 0x1f, 0x98, 0x93, 0x2f, 0xf8, 0xc3, 0xb9, 0x67, 0xbe, 0xeb, 0x17, 0xed, + 0x98, 0xbd, 0xc5, 0x8b, 0xb9, 0x2b, 0x17, 0xe6, 0xd8, 0xc8, 0x79, 0x62, + 0xb6, 0x3c, 0x2f, 0x8b, 0xdf, 0x88, 0x12, 0xfd, 0x16, 0x2f, 0xd1, 0x07, + 0xc9, 0xc5, 0x8a, 0x73, 0xd3, 0x62, 0x9b, 0x47, 0xac, 0x5f, 0x9b, 0x45, + 0xdb, 0xac, 0x5f, 0x18, 0x11, 0x81, 0x2c, 0x5d, 0x3e, 0x58, 0xa9, 0x37, + 0xf1, 0x14, 0x54, 0xa7, 0xf5, 0x02, 0x3c, 0x39, 0x76, 0xbf, 0xbb, 0x31, + 0x07, 0x85, 0x44, 0xcf, 0x68, 0x2c, 0x5c, 0xe3, 0x58, 0xa8, 0xd0, 0xd4, + 0xc8, 0x95, 0xef, 0xb1, 0x2c, 0x57, 0x5a, 0xce, 0xcc, 0xd9, 0xea, 0x10, + 0xbf, 0x1c, 0x6e, 0x38, 0x76, 0x6c, 0x2e, 0x37, 0x24, 0x78, 0x62, 0x45, + 0x0d, 0x4d, 0x2c, 0x1e, 0x16, 0x7f, 0x87, 0x0b, 0x24, 0x00, 0x78, 0xa5, + 0xc3, 0x7a, 0x56, 0x1f, 0x48, 0x4b, 0x84, 0x4b, 0x78, 0x53, 0xb2, 0xc5, + 0xfb, 0x9a, 0xd3, 0x9d, 0x62, 0xb8, 0x78, 0xfe, 0x1e, 0xb9, 0xfb, 0x58, + 0xb7, 0x5a, 0xb1, 0x79, 0xf5, 0x2b, 0x17, 0x7e, 0x3d, 0x62, 0xfe, 0x33, + 0x8f, 0xf7, 0x3a, 0xc5, 0xef, 0x49, 0xd6, 0x2a, 0x36, 0x44, 0xd6, 0xc2, + 0xf0, 0x1c, 0xec, 0x6c, 0x8b, 0xef, 0xff, 0xec, 0x70, 0x49, 0x67, 0x7e, + 0x6e, 0xe0, 0x1f, 0x00, 0xb1, 0x6d, 0x96, 0x28, 0xc3, 0xf0, 0x82, 0xed, + 0xdd, 0x9a, 0xb1, 0x7f, 0x1d, 0xa1, 0xac, 0x09, 0x62, 0xdd, 0x8c, 0xf2, + 0x70, 0x6a, 0xff, 0x7b, 0x86, 0x67, 0xf0, 0x96, 0x2b, 0x0f, 0x71, 0x8a, + 0x2f, 0x73, 0xd8, 0xb1, 0x7f, 0xfa, 0x05, 0x87, 0x3b, 0x70, 0xce, 0x48, + 0xd6, 0x2f, 0xbd, 0x8d, 0xba, 0xc5, 0x75, 0xa8, 0x8b, 0x91, 0xdc, 0x4b, + 0xbf, 0xdf, 0x73, 0xff, 0x00, 0xcb, 0x17, 0xfe, 0xc2, 0xcd, 0x6f, 0xfc, + 0x07, 0x16, 0x2f, 0x45, 0x23, 0x58, 0xbe, 0xdf, 0x08, 0x0b, 0x17, 0xfe, + 0xfc, 0x94, 0xef, 0xa9, 0xc2, 0x58, 0xa1, 0xa3, 0xc1, 0xcc, 0xf4, 0x7e, + 0xc3, 0xde, 0x23, 0xbc, 0x79, 0x82, 0xc5, 0xfd, 0x9b, 0x49, 0xad, 0xc5, + 0x8b, 0xff, 0xef, 0xbe, 0xbe, 0xc6, 0x67, 0x70, 0xcd, 0x6c, 0xb1, 0x7f, + 0x7d, 0xc6, 0xfa, 0xdd, 0x62, 0xfb, 0x37, 0xce, 0xd6, 0x2f, 0xff, 0xd9, + 0xee, 0x7d, 0x8f, 0xac, 0xee, 0x1c, 0x14, 0x4b, 0x17, 0xff, 0xe6, 0xec, + 0x7a, 0x26, 0x08, 0xb0, 0x00, 0xc0, 0x2c, 0x5d, 0xdf, 0x0c, 0x4f, 0xa6, + 0x52, 0x06, 0x3b, 0x85, 0xfb, 0xa9, 0xfc, 0xbc, 0x89, 0x3c, 0xb3, 0x7a, + 0x29, 0x09, 0x62, 0xfd, 0xe2, 0xcc, 0xd2, 0xc5, 0xff, 0xd1, 0x0f, 0xe2, + 0x2c, 0x8a, 0x19, 0xda, 0xc5, 0xfe, 0xfc, 0xb9, 0x36, 0x8d, 0x58, 0xbf, + 0xa5, 0xc9, 0xb4, 0x6a, 0xc5, 0xf6, 0xb4, 0xfa, 0x30, 0xf8, 0x3e, 0x67, + 0x7f, 0x16, 0x45, 0xa6, 0xe8, 0xb1, 0x7e, 0xc8, 0xb4, 0xdd, 0x16, 0x29, + 0x62, 0xdb, 0x98, 0x7c, 0xe4, 0x61, 0xd0, 0xae, 0xbe, 0x9c, 0x08, 0x21, + 0x50, 0x50, 0xa1, 0xa9, 0x54, 0x02, 0xe3, 0xed, 0x1d, 0x45, 0xff, 0xbb, + 0xf3, 0x77, 0xc1, 0xce, 0x76, 0xb1, 0x78, 0xb0, 0xeb, 0x16, 0xed, 0x62, + 0xd0, 0x81, 0xaf, 0xe0, 0xe5, 0x4a, 0x26, 0x19, 0xc6, 0xff, 0xff, 0xf1, + 0x87, 0x9c, 0xf1, 0x99, 0x07, 0xe8, 0x59, 0xc3, 0x24, 0x6d, 0x17, 0x16, + 0x2f, 0x05, 0xc0, 0x2c, 0x5f, 0xd8, 0x71, 0xb3, 0x6e, 0xb1, 0x71, 0x6e, + 0x61, 0xe6, 0xfc, 0x7e, 0xa0, 0x8f, 0x86, 0x86, 0x4d, 0xff, 0x19, 0xcc, + 0xfe, 0x08, 0xb7, 0x58, 0xb6, 0x2c, 0x56, 0x32, 0xba, 0xf7, 0x22, 0x78, + 0x59, 0x45, 0x0c, 0x0d, 0x43, 0x20, 0xf0, 0xab, 0x69, 0x61, 0x80, 0x94, + 0xfe, 0x50, 0xcd, 0x14, 0x63, 0x21, 0x13, 0xc7, 0x1d, 0xde, 0xe7, 0x9d, + 0x62, 0xf4, 0x40, 0xed, 0x62, 0xff, 0xb2, 0x1f, 0x97, 0xd6, 0xa5, 0x62, + 0xe3, 0x4c, 0xdc, 0xfd, 0x40, 0x3b, 0xc2, 0x0b, 0xdc, 0xeb, 0xf8, 0xb1, + 0x52, 0x7c, 0x3d, 0x9f, 0x5f, 0x00, 0x02, 0x8f, 0x58, 0xb0, 0x16, 0x2f, + 0x7b, 0x92, 0xb1, 0x7c, 0x2e, 0xe1, 0xc5, 0x8b, 0x19, 0x27, 0x85, 0xa1, + 0xdb, 0xf6, 0xb6, 0x9d, 0x6c, 0xb1, 0x7e, 0x72, 0xf0, 0x67, 0x58, 0xa9, + 0x3d, 0x40, 0x15, 0xde, 0x87, 0x31, 0x62, 0xfd, 0xd6, 0x94, 0xe0, 0x16, + 0x2b, 0x47, 0x92, 0x01, 0xdb, 0xcc, 0xe4, 0xb1, 0x7e, 0x14, 0x45, 0x27, + 0x58, 0xbb, 0x02, 0x30, 0xf1, 0x38, 0x37, 0x7c, 0x2e, 0xe1, 0xc5, 0x8a, + 0x73, 0xd4, 0x39, 0x7d, 0xff, 0xe7, 0x3e, 0x70, 0xc2, 0xcd, 0x03, 0x22, + 0x58, 0xbf, 0xdd, 0xc0, 0x45, 0xb6, 0xd2, 0xb1, 0x7e, 0x6d, 0xde, 0x78, + 0xb1, 0x7d, 0x99, 0xae, 0x2c, 0x5b, 0x86, 0x22, 0x07, 0xe6, 0xe0, 0x28, + 0xbc, 0x26, 0xe2, 0xc5, 0x6c, 0xab, 0x86, 0x0f, 0x98, 0xd4, 0x78, 0x5d, + 0x7c, 0x87, 0xd0, 0xcc, 0x0c, 0xde, 0xff, 0x04, 0x79, 0x7d, 0x0a, 0x3d, + 0x62, 0xe2, 0x12, 0xc5, 0x2c, 0x5b, 0x46, 0x1a, 0x3e, 0x0b, 0xdf, 0x8c, + 0xee, 0x02, 0xd9, 0x62, 0xff, 0xb7, 0xc7, 0xfc, 0xeb, 0x0e, 0xb1, 0x52, + 0x88, 0xe8, 0x14, 0x11, 0x6d, 0x62, 0x62, 0xe2, 0x87, 0x4d, 0xff, 0xfc, + 0xfa, 0x33, 0x1f, 0x08, 0xdf, 0xbe, 0x1f, 0x37, 0x58, 0xbf, 0xec, 0xee, + 0x1c, 0xee, 0x02, 0xd2, 0xc5, 0xff, 0xff, 0x8f, 0xcd, 0xff, 0x3b, 0xf7, + 0x02, 0x10, 0xcc, 0x73, 0x58, 0x80, 0xb1, 0x7f, 0xff, 0xb6, 0xd4, 0x9f, + 0x82, 0x93, 0x27, 0x52, 0x3f, 0xc9, 0xd6, 0x2b, 0x11, 0xaa, 0xee, 0x57, + 0xff, 0x9c, 0xd1, 0xc9, 0xa0, 0xea, 0x16, 0x14, 0x4b, 0x17, 0xfd, 0x03, + 0x24, 0xcf, 0x7f, 0x09, 0x62, 0xb1, 0x50, 0xcb, 0xad, 0xea, 0x31, 0x2f, + 0x90, 0xb2, 0x85, 0xf8, 0x1c, 0x7e, 0xc2, 0x58, 0xbf, 0xc2, 0x2e, 0xe1, + 0xc2, 0x1a, 0xc5, 0xff, 0xd3, 0xdc, 0x38, 0x59, 0xf2, 0xc0, 0x96, 0x2f, + 0xff, 0x61, 0xa0, 0x31, 0x8b, 0xd1, 0x66, 0xb1, 0x62, 0xb1, 0x12, 0x2e, + 0x8b, 0x7e, 0xee, 0x4f, 0xb4, 0xac, 0x5f, 0x77, 0x07, 0xfa, 0xc5, 0xd9, + 0xdf, 0xcf, 0x3b, 0xc5, 0x57, 0xe8, 0xa1, 0x25, 0x05, 0x8b, 0xfd, 0xd9, + 0x9d, 0x5e, 0xc2, 0xd9, 0x62, 0xb1, 0x3c, 0x63, 0x61, 0x8d, 0xa6, 0xf0, + 0x17, 0x08, 0xa6, 0xfe, 0xed, 0xa0, 0x52, 0x75, 0x8b, 0xff, 0xa3, 0xce, + 0x42, 0x0b, 0x58, 0xe4, 0x05, 0x8b, 0xff, 0xfe, 0x28, 0xbf, 0x9d, 0xc2, + 0x48, 0x66, 0x16, 0x74, 0xd3, 0xf1, 0x62, 0x96, 0x2f, 0xc5, 0x9b, 0x31, + 0x2c, 0x5c, 0x51, 0x75, 0xa6, 0xcf, 0xc1, 0x95, 0x29, 0x8b, 0xba, 0x40, + 0xa1, 0x3b, 0x7e, 0xdc, 0xc3, 0xb7, 0x96, 0x2f, 0xff, 0xfe, 0xd3, 0xec, + 0x67, 0xf3, 0xc5, 0x31, 0x7f, 0x36, 0x9e, 0xfc, 0x2d, 0xd6, 0x2b, 0x11, + 0x47, 0xa2, 0xbb, 0xff, 0xff, 0xa4, 0xdf, 0xc9, 0x85, 0x82, 0x34, 0xce, + 0xe1, 0xc7, 0x20, 0xe7, 0x65, 0x8b, 0xf1, 0x03, 0x84, 0x25, 0x8b, 0xf6, + 0x0a, 0x75, 0xb2, 0xc5, 0xe7, 0xc2, 0x58, 0xb7, 0x64, 0x78, 0x9c, 0x29, + 0xac, 0x4c, 0x31, 0xde, 0x04, 0xd9, 0x7f, 0xff, 0xfb, 0x36, 0xfe, 0x75, + 0x7e, 0x48, 0xc2, 0xc8, 0xa1, 0x83, 0xee, 0x12, 0x35, 0x8b, 0xff, 0xec, + 0xea, 0x2c, 0x3b, 0x17, 0xb8, 0x64, 0x84, 0xb1, 0x52, 0xb8, 0x93, 0x91, + 0xa2, 0xbc, 0x35, 0xff, 0x19, 0x71, 0x17, 0x89, 0xf6, 0xff, 0xde, 0x39, + 0xda, 0x23, 0x0b, 0x02, 0x58, 0xbf, 0xfc, 0x0e, 0x0c, 0x4d, 0xa8, 0x7d, + 0xf0, 0xeb, 0x17, 0xfe, 0x2e, 0xf3, 0x82, 0x88, 0xa4, 0xeb, 0x15, 0x88, + 0x8b, 0xd2, 0x5d, 0xfe, 0x37, 0xf2, 0xfb, 0x49, 0xab, 0x17, 0xf9, 0xfb, + 0xfb, 0x1d, 0xf8, 0xb1, 0x7f, 0xff, 0xd3, 0xec, 0x39, 0x64, 0x84, 0x32, + 0xc3, 0x33, 0x4d, 0xc5, 0x8a, 0x74, 0x67, 0x91, 0xb0, 0x8d, 0x29, 0xd3, + 0x1f, 0xe4, 0x3c, 0x68, 0xc5, 0x42, 0x90, 0x8f, 0xb2, 0xff, 0xdc, 0xce, + 0xe0, 0xfa, 0x2e, 0xf1, 0x62, 0xff, 0xd1, 0x7b, 0x05, 0xa3, 0x18, 0x62, + 0x58, 0xbf, 0x1c, 0xb3, 0xb8, 0xf5, 0x8b, 0x1f, 0x0f, 0xbb, 0x88, 0x57, + 0xf8, 0x51, 0x16, 0x7d, 0xbc, 0xb1, 0x5b, 0x26, 0x13, 0x90, 0xae, 0x22, + 0x7b, 0xff, 0x08, 0x1c, 0x2c, 0xe7, 0x24, 0x25, 0x8b, 0xf8, 0xb6, 0x8e, + 0xf8, 0x7a, 0x58, 0xa8, 0x1f, 0xa3, 0x20, 0x5f, 0x04, 0x66, 0xce, 0xb1, + 0x7e, 0x08, 0x7f, 0x63, 0xac, 0x5f, 0xee, 0xe1, 0xc3, 0x39, 0xe7, 0x58, + 0xa9, 0x3e, 0x17, 0x2a, 0xac, 0x45, 0x3f, 0xe1, 0x0f, 0x7b, 0x24, 0xd5, + 0x8b, 0xff, 0x60, 0x5e, 0x1b, 0xe7, 0x70, 0xe2, 0xc5, 0xfe, 0xfc, 0xb9, + 0x36, 0x8d, 0x58, 0xbf, 0x8f, 0xc9, 0xfb, 0x47, 0xac, 0x5f, 0xfe, 0x39, + 0x98, 0x2e, 0xbd, 0xfe, 0xe7, 0x61, 0xac, 0x54, 0x48, 0xb4, 0x63, 0x31, + 0x18, 0xdf, 0xd1, 0x7c, 0x98, 0x1c, 0x58, 0xac, 0x3d, 0xf1, 0x18, 0x5f, + 0xf1, 0xf3, 0x86, 0x44, 0x52, 0x75, 0x8b, 0xff, 0x30, 0xcc, 0x19, 0x48, + 0x87, 0x8b, 0x17, 0xdb, 0x18, 0x38, 0xd1, 0x62, 0xff, 0xf3, 0x18, 0x3f, + 0xce, 0xb5, 0x9d, 0x27, 0xb5, 0x8b, 0x72, 0x4f, 0xe7, 0x62, 0xbb, 0xff, + 0x49, 0x40, 0xc0, 0xfa, 0xa4, 0xa0, 0xb1, 0x43, 0x56, 0x2f, 0xd9, 0x3b, + 0x8e, 0xea, 0x35, 0x43, 0x90, 0x80, 0xef, 0xd0, 0xb8, 0x08, 0xa2, 0xff, + 0xfb, 0x36, 0x30, 0x7a, 0x7d, 0xbc, 0xf8, 0x5b, 0x2c, 0x5f, 0xfb, 0xdc, + 0x33, 0xee, 0x13, 0x11, 0xab, 0x17, 0xff, 0x11, 0xa0, 0xd6, 0x4f, 0x70, + 0x73, 0xac, 0x56, 0x22, 0x21, 0x90, 0xaf, 0xfd, 0x92, 0x5e, 0xf7, 0x70, + 0x7d, 0x2c, 0x54, 0xa6, 0x76, 0x78, 0x6d, 0x88, 0x86, 0xfe, 0xf0, 0x33, + 0xab, 0x09, 0x62, 0xff, 0x85, 0x24, 0x63, 0xfa, 0x62, 0x58, 0xbb, 0x40, + 0x30, 0xfa, 0x8e, 0x61, 0x7d, 0xd3, 0x05, 0xba, 0xc5, 0xfe, 0xce, 0xe3, + 0x9f, 0x58, 0x6a, 0xc5, 0xff, 0xff, 0x36, 0xbf, 0x9e, 0x7c, 0x2d, 0xb9, + 0x38, 0x43, 0xfc, 0xac, 0x5b, 0x4b, 0x17, 0xf6, 0x75, 0x79, 0xcb, 0x65, + 0x8b, 0xbc, 0x66, 0xc7, 0x86, 0x42, 0x57, 0xff, 0xfc, 0x0c, 0x88, 0xcf, + 0xb3, 0xfa, 0x4a, 0x41, 0x92, 0x40, 0x58, 0xbf, 0xfe, 0xcd, 0x77, 0x06, + 0xef, 0x58, 0xff, 0x91, 0xac, 0x5f, 0xe9, 0x04, 0x9d, 0xf5, 0x12, 0xc5, + 0x3a, 0x21, 0x49, 0x46, 0xff, 0xfd, 0xfc, 0x11, 0xcc, 0xe4, 0xbf, 0x7e, + 0xf4, 0x9d, 0x62, 0xa5, 0x56, 0x36, 0x17, 0x9a, 0x4d, 0xd9, 0xc3, 0x42, + 0x9c, 0x05, 0xfe, 0x87, 0x57, 0x51, 0x0d, 0xff, 0xff, 0xbb, 0xcd, 0x85, + 0xd4, 0x67, 0x70, 0xf4, 0x84, 0x66, 0x68, 0x00, 0x95, 0x8b, 0xfe, 0xc8, + 0xa3, 0x85, 0xec, 0xef, 0xcb, 0x17, 0xb3, 0x43, 0x58, 0xba, 0x60, 0xb1, + 0x7f, 0xfd, 0xc3, 0x35, 0x3b, 0xe1, 0x45, 0x0c, 0xf7, 0x16, 0x2b, 0x11, + 0x8c, 0x73, 0xf0, 0x0e, 0x88, 0x5e, 0xff, 0xcc, 0x59, 0xfc, 0xf6, 0xb0, + 0x25, 0x8b, 0xff, 0xfd, 0xcc, 0x16, 0x8d, 0x33, 0xef, 0x9e, 0xe1, 0x85, + 0x83, 0x58, 0xad, 0x91, 0x45, 0xe3, 0xeb, 0xf1, 0xa6, 0x74, 0x87, 0x5a, + 0xb1, 0x7f, 0xff, 0xfc, 0x23, 0x48, 0x5e, 0x8b, 0x3c, 0xfd, 0xc0, 0xa4, + 0xb3, 0xef, 0x9a, 0x89, 0x62, 0xa5, 0x16, 0x58, 0x67, 0x58, 0x8f, 0x7e, + 0xe1, 0xad, 0x7c, 0x13, 0x10, 0x16, 0x2f, 0xfb, 0x02, 0xfc, 0x9b, 0x9e, + 0xe2, 0xc5, 0xfe, 0x2d, 0xe7, 0x72, 0x93, 0xac, 0x5f, 0xfe, 0x1f, 0xe7, + 0x59, 0xef, 0x66, 0xd3, 0xb2, 0xc5, 0xb1, 0xd1, 0x00, 0x73, 0x4b, 0xff, + 0x98, 0xb6, 0x38, 0x9c, 0x6e, 0x4e, 0xb1, 0x58, 0x9a, 0x43, 0x91, 0xf2, + 0x17, 0x61, 0x13, 0xdf, 0x77, 0xef, 0xba, 0xc5, 0xfb, 0xb8, 0x0a, 0x7c, + 0xb1, 0x58, 0x79, 0xd1, 0x12, 0x5f, 0xfd, 0xf7, 0x8b, 0x91, 0x43, 0x05, + 0xad, 0xd6, 0x2f, 0xfb, 0x6f, 0xc9, 0x9c, 0xf8, 0xc6, 0xb1, 0x7f, 0xbb, + 0xfe, 0x7b, 0x58, 0x12, 0xc5, 0x39, 0xf9, 0x88, 0xf6, 0xff, 0xfe, 0x84, + 0xeb, 0xb8, 0x70, 0xcf, 0xcb, 0x93, 0x68, 0xd5, 0x8b, 0xd3, 0x13, 0x2c, + 0x5f, 0xff, 0x41, 0xfa, 0x16, 0x70, 0xcc, 0xfb, 0x76, 0x05, 0x8a, 0x19, + 0xf8, 0x60, 0xed, 0xe2, 0xc8, 0x2c, 0x5a, 0x06, 0x1b, 0xdf, 0x10, 0xdf, + 0xfb, 0xb1, 0xfc, 0x4d, 0xc2, 0xc1, 0xac, 0x56, 0x1f, 0x40, 0x8a, 0x2f, + 0xfe, 0xd9, 0x88, 0xcd, 0x69, 0xcd, 0xc2, 0x58, 0xbf, 0xe6, 0xf7, 0xb2, + 0x28, 0x3f, 0x96, 0x2f, 0xec, 0x34, 0xd6, 0xf7, 0x16, 0x2f, 0xec, 0xee, + 0x1c, 0x14, 0x4b, 0x17, 0xd9, 0xf6, 0xf2, 0xc5, 0xcc, 0x73, 0x11, 0x07, + 0xa3, 0x02, 0x31, 0xa9, 0x47, 0xc7, 0xe1, 0x7b, 0x70, 0x02, 0x58, 0xbe, + 0x8e, 0xcd, 0x4a, 0xc5, 0x68, 0xdf, 0x74, 0x19, 0xbf, 0xfe, 0x3f, 0x3f, + 0x25, 0xed, 0x4f, 0xf7, 0x7e, 0x2c, 0x5e, 0x79, 0x3a, 0xc5, 0x9d, 0x62, + 0xb4, 0x6b, 0x7c, 0x39, 0x78, 0x52, 0x05, 0x8b, 0x11, 0x86, 0xfb, 0x44, + 0x35, 0x89, 0x83, 0x39, 0x1b, 0x42, 0xf2, 0xec, 0x25, 0x8a, 0x95, 0xd8, + 0x51, 0x91, 0x64, 0x2f, 0x3b, 0x21, 0xfc, 0x6e, 0x6c, 0x43, 0xc8, 0xcf, + 0xbd, 0x1b, 0x58, 0x8c, 0xef, 0xff, 0x19, 0xee, 0xe0, 0x2e, 0x18, 0x29, + 0x23, 0x56, 0x2f, 0xfa, 0x1c, 0x33, 0x93, 0x10, 0xb4, 0xb1, 0x5b, 0x22, + 0x37, 0xb5, 0x0b, 0xff, 0x7b, 0x86, 0x6b, 0x1f, 0xf2, 0x35, 0x8a, 0x93, + 0xe5, 0xc2, 0x5b, 0xfe, 0xff, 0xe7, 0xb3, 0x02, 0x3e, 0xeb, 0x17, 0xb7, + 0x68, 0xf5, 0x8b, 0xfb, 0x3d, 0xad, 0x64, 0x16, 0x29, 0x62, 0xfd, 0x9f, + 0x2c, 0xdd, 0x62, 0x80, 0x6d, 0x08, 0x32, 0x9d, 0x14, 0x71, 0x10, 0xf9, + 0x8a, 0xf6, 0x77, 0xe5, 0x8b, 0xfd, 0x83, 0x7e, 0x9e, 0x7d, 0x2c, 0x5d, + 0x9c, 0x31, 0x10, 0x71, 0xe6, 0x0c, 0x3d, 0x4c, 0x9d, 0x19, 0x46, 0xcb, + 0x7f, 0x1c, 0xc7, 0xd9, 0xbc, 0xb1, 0x7b, 0x1c, 0x25, 0x8b, 0xf4, 0xbe, + 0x85, 0x1e, 0xb1, 0x63, 0x8c, 0xf2, 0x3e, 0x3b, 0x52, 0x8a, 0x0c, 0x78, + 0xbf, 0x6e, 0x53, 0xee, 0x2c, 0x5f, 0xfb, 0x24, 0x2f, 0xe7, 0x9f, 0x38, + 0xb1, 0x7e, 0x7d, 0x89, 0x8e, 0xb1, 0x73, 0x0d, 0x62, 0xa5, 0x14, 0xda, + 0x29, 0xf1, 0xf0, 0x8a, 0x2b, 0x67, 0x4d, 0x3a, 0x39, 0x48, 0x38, 0x9e, + 0x6c, 0x7e, 0x3b, 0xce, 0x4c, 0xf7, 0x29, 0xed, 0xe3, 0x35, 0x8a, 0x15, + 0x3a, 0x97, 0xbe, 0x78, 0xee, 0xbf, 0x2d, 0x95, 0x9f, 0xc1, 0x19, 0xe9, + 0x47, 0xab, 0xc8, 0xdc, 0x3d, 0x3c, 0x2a, 0x28, 0xe2, 0x3a, 0x47, 0x86, + 0x1c, 0x32, 0x3a, 0xa1, 0x8f, 0x7c, 0x29, 0x21, 0xac, 0x5f, 0xd1, 0xe6, + 0x34, 0x58, 0xcb, 0x17, 0xfd, 0x27, 0x2c, 0x1e, 0x9f, 0x65, 0x8b, 0xff, + 0xfc, 0x17, 0xc5, 0x3d, 0x99, 0xad, 0x4e, 0xc4, 0xcd, 0xa3, 0x56, 0x2f, + 0xf1, 0x60, 0xb0, 0xd8, 0x01, 0x62, 0x99, 0x13, 0x41, 0x33, 0x54, 0xa6, + 0x51, 0x03, 0x2c, 0x86, 0x9d, 0xff, 0xf4, 0xec, 0x67, 0xe5, 0xfd, 0xc9, + 0xdb, 0x38, 0xb1, 0x7f, 0xf4, 0xeb, 0xcf, 0x9d, 0x47, 0x14, 0x92, 0xc5, + 0xe3, 0x67, 0x4b, 0x17, 0xff, 0xd2, 0x67, 0xdb, 0xa1, 0x98, 0x73, 0xce, + 0x8d, 0x58, 0xbf, 0x00, 0xf9, 0x9e, 0x58, 0xbf, 0xc6, 0x6b, 0x3e, 0x59, + 0x12, 0xc5, 0xfe, 0x39, 0x9e, 0x29, 0x3f, 0x16, 0x2b, 0x0f, 0xa9, 0xcd, + 0x6b, 0x11, 0x64, 0x50, 0x92, 0xbf, 0xff, 0xdf, 0x60, 0x70, 0xc2, 0xce, + 0x85, 0x9c, 0xc3, 0xce, 0xeb, 0x17, 0xff, 0xff, 0xda, 0x11, 0xdf, 0x86, + 0x45, 0x01, 0x17, 0x8c, 0xfc, 0xc1, 0xcb, 0x0f, 0x2b, 0x17, 0xfd, 0x9c, + 0xcd, 0x3e, 0xcc, 0x75, 0x8b, 0x71, 0x62, 0xfd, 0xe3, 0x37, 0xf1, 0xd6, + 0x2a, 0x51, 0xef, 0x08, 0x40, 0x31, 0xc8, 0x84, 0xab, 0x65, 0x65, 0x71, + 0x23, 0x7c, 0x78, 0xa3, 0x07, 0xe1, 0x37, 0xa3, 0x5a, 0xbe, 0xc3, 0x66, + 0x0b, 0x17, 0xa4, 0xb7, 0x58, 0xb8, 0x47, 0x30, 0xf0, 0x0d, 0x23, 0xb8, + 0xd7, 0x58, 0xbf, 0xff, 0xc5, 0x83, 0x9f, 0x70, 0xcf, 0x75, 0x14, 0xf0, + 0x53, 0xda, 0xc5, 0xd8, 0x6a, 0xc5, 0xb8, 0x61, 0xfe, 0xcb, 0x2d, 0xff, + 0xcf, 0xfc, 0xdf, 0xee, 0x29, 0x2d, 0x96, 0x2f, 0xfb, 0x04, 0x33, 0x27, + 0x93, 0x05, 0x8b, 0xe2, 0xf3, 0xfd, 0x62, 0x8c, 0x3d, 0xc6, 0x3a, 0xbf, + 0xbe, 0x67, 0x3f, 0x3d, 0xac, 0x5f, 0xff, 0xf4, 0x9a, 0x2f, 0xc9, 0xf9, + 0x11, 0x60, 0x45, 0x82, 0xc3, 0x56, 0x2f, 0xec, 0xde, 0x4c, 0xc8, 0x2c, + 0x54, 0xa3, 0x26, 0x23, 0x1f, 0xb4, 0xd6, 0x27, 0x78, 0x08, 0x50, 0xfa, + 0x1d, 0x77, 0xec, 0x08, 0xed, 0xc5, 0x8a, 0x8d, 0xdd, 0xad, 0x9c, 0x6a, + 0x27, 0x99, 0x66, 0xb9, 0x6a, 0x09, 0x77, 0x8e, 0x17, 0xb8, 0xd2, 0x9c, + 0xd1, 0xa5, 0xbe, 0x94, 0x29, 0xb8, 0x61, 0xe8, 0x4a, 0x8a, 0x3e, 0x40, + 0xce, 0xaf, 0x6d, 0x31, 0x2c, 0x5e, 0x62, 0x02, 0xc5, 0xfb, 0xe1, 0x97, + 0x60, 0x58, 0xbf, 0xe3, 0x3a, 0xbd, 0x9f, 0xf3, 0x9d, 0x62, 0xff, 0xed, + 0x9b, 0xda, 0xcd, 0x98, 0xbd, 0xc5, 0x8a, 0xd9, 0x19, 0x78, 0x39, 0xb9, + 0x5b, 0x9f, 0x5f, 0xed, 0x67, 0xfb, 0xc1, 0x44, 0xb1, 0x7f, 0xff, 0x43, + 0xf8, 0xf0, 0xe6, 0x10, 0xbc, 0x58, 0x09, 0x58, 0xbd, 0xcc, 0xfa, 0xc5, + 0x9d, 0x62, 0xda, 0xc4, 0x43, 0xb2, 0xc8, 0x07, 0x6f, 0xf8, 0xcf, 0xb6, + 0x6f, 0xf1, 0x0d, 0x62, 0xff, 0xfb, 0x3d, 0xfc, 0x18, 0xbd, 0xc9, 0xe0, + 0xb8, 0xb1, 0x7f, 0x4e, 0x16, 0xe1, 0x9d, 0x62, 0xff, 0x78, 0x53, 0x9b, + 0x06, 0x75, 0x8b, 0xff, 0x7e, 0x48, 0x51, 0x67, 0x39, 0x2b, 0x16, 0x8f, + 0xfa, 0x3d, 0x7c, 0xa2, 0x19, 0x7f, 0x51, 0xb5, 0xff, 0x73, 0xdf, 0x9f, + 0x73, 0xee, 0xb1, 0x46, 0x2a, 0xa6, 0x98, 0x5e, 0xec, 0x68, 0xd1, 0x98, + 0x89, 0x2a, 0xe3, 0x8d, 0x62, 0xff, 0xd8, 0x46, 0x4f, 0xdf, 0x59, 0x05, + 0x8b, 0xff, 0xe2, 0x34, 0xce, 0x0f, 0x44, 0xc1, 0x66, 0x79, 0x62, 0xf7, + 0x80, 0x25, 0x8b, 0x63, 0x9f, 0x81, 0x29, 0x5f, 0xfe, 0x3c, 0xef, 0xee, + 0x60, 0x27, 0x3b, 0x82, 0xc5, 0xf1, 0xaf, 0xbb, 0xac, 0x5a, 0x18, 0x7e, + 0x1e, 0x4c, 0xb9, 0xf7, 0x58, 0xa9, 0x37, 0xf8, 0x4f, 0x7f, 0xf9, 0xb5, + 0x0d, 0xfe, 0xe3, 0xd3, 0x8b, 0x65, 0x8a, 0xeb, 0xaa, 0xa0, 0x69, 0x18, + 0xfc, 0x2b, 0x8a, 0x1a, 0x82, 0x1f, 0xbd, 0x8d, 0x12, 0xc5, 0xff, 0x8a, + 0x0e, 0x7f, 0x7e, 0x5f, 0x75, 0x8a, 0xd8, 0xf7, 0x18, 0x76, 0xff, 0xff, + 0xcf, 0xd0, 0xb3, 0x86, 0x79, 0xcc, 0xcf, 0x4e, 0xef, 0xd2, 0x7e, 0xb1, + 0x7f, 0xff, 0xf7, 0xf0, 0xb6, 0x33, 0x7f, 0x8b, 0xf3, 0xa0, 0x7f, 0x3c, + 0x53, 0xba, 0xc5, 0xf8, 0x1e, 0x8e, 0xcf, 0xac, 0x5f, 0xfa, 0x62, 0x62, + 0xf4, 0x59, 0xac, 0x58, 0xa9, 0x3e, 0xb2, 0x2c, 0xbf, 0xc3, 0x90, 0x19, + 0x9d, 0xf9, 0x62, 0xff, 0xf9, 0xb4, 0xdf, 0xee, 0x19, 0xe3, 0x37, 0xe4, + 0x7a, 0xc5, 0xff, 0xfb, 0xcc, 0xc7, 0xe1, 0x98, 0x3f, 0x8b, 0x99, 0xba, + 0xc5, 0xff, 0x99, 0xa0, 0x61, 0x60, 0x4c, 0x05, 0x8b, 0xff, 0x73, 0xf8, + 0xc4, 0x67, 0xe6, 0x3d, 0x62, 0xff, 0x37, 0xb9, 0x14, 0x1f, 0xeb, 0x17, + 0xf3, 0xc1, 0xbd, 0xf7, 0x58, 0xbf, 0xf7, 0xe7, 0x45, 0x83, 0xfb, 0x04, + 0xb1, 0x7a, 0x27, 0xd2, 0xc5, 0xcc, 0x71, 0x9e, 0xee, 0x1f, 0xd0, 0xd5, + 0x28, 0xee, 0x6d, 0xda, 0xbf, 0xd6, 0x00, 0x7e, 0x48, 0x5e, 0x35, 0xe9, + 0x08, 0xab, 0xec, 0xee, 0x1c, 0x58, 0xbf, 0x47, 0x8c, 0xb3, 0xeb, 0x15, + 0xf3, 0xcf, 0x62, 0x4b, 0xe3, 0x7e, 0xe7, 0x58, 0xbf, 0x44, 0xe4, 0x29, + 0x58, 0xbd, 0x3b, 0x99, 0x1a, 0x1e, 0x63, 0x12, 0x5f, 0x11, 0xdf, 0xcb, + 0x17, 0x1f, 0x8b, 0x17, 0x9b, 0x8e, 0xb1, 0x7f, 0x7b, 0xf9, 0xd0, 0x72, + 0xb1, 0x52, 0x7c, 0x80, 0x18, 0x10, 0xe5, 0xff, 0x07, 0xb6, 0x13, 0x1d, + 0xbe, 0xb1, 0x7c, 0xfa, 0x26, 0x58, 0xad, 0x97, 0x99, 0x20, 0x44, 0x37, + 0x1d, 0xe1, 0xc2, 0xf2, 0x9c, 0x62, 0x86, 0x51, 0xdb, 0x58, 0xe4, 0xa1, + 0x0d, 0xe2, 0xee, 0x87, 0x57, 0x30, 0x4b, 0x17, 0xed, 0xf4, 0xcd, 0x05, + 0x8a, 0x34, 0xf0, 0x5c, 0x62, 0xff, 0x9f, 0xbf, 0x6a, 0x7c, 0xfd, 0x16, + 0x2f, 0xf1, 0x1b, 0x3e, 0x06, 0x76, 0xb1, 0x5f, 0x3f, 0x16, 0x3c, 0xbf, + 0xdc, 0xe4, 0xbe, 0xcd, 0xe5, 0x8b, 0xfe, 0xe3, 0x05, 0xd4, 0xf8, 0x43, + 0x58, 0xbf, 0xb3, 0xd8, 0xc5, 0x12, 0xc5, 0xf6, 0x72, 0x74, 0xb1, 0x63, + 0x7e, 0x79, 0xe4, 0x5b, 0x68, 0x4a, 0x39, 0xf0, 0xd0, 0x50, 0x8b, 0xb4, + 0x16, 0x2f, 0x0c, 0x40, 0x58, 0xbf, 0xff, 0xa6, 0x3c, 0xc7, 0xc2, 0xcf, + 0xbe, 0x17, 0x70, 0xe2, 0xc5, 0xfe, 0xea, 0x7c, 0xef, 0xef, 0x8b, 0x16, + 0x2e, 0xd1, 0x26, 0x05, 0xdb, 0xfc, 0xc4, 0x03, 0xbe, 0x76, 0xb1, 0x7f, + 0x67, 0xb9, 0xf7, 0x35, 0x62, 0xfb, 0x9f, 0x73, 0x56, 0x2f, 0xdb, 0x66, + 0x8b, 0x08, 0xf4, 0xfc, 0x5f, 0x78, 0xec, 0x35, 0x8b, 0xfa, 0x10, 0x7e, + 0x08, 0xeb, 0x15, 0x27, 0x99, 0xd8, 0xed, 0xfe, 0x21, 0x43, 0x22, 0x98, + 0xf5, 0x8a, 0x95, 0x4a, 0x83, 0x12, 0xc8, 0x58, 0x9a, 0x53, 0xf8, 0x43, + 0x14, 0x22, 0x7c, 0x45, 0x6e, 0xb1, 0x62, 0xff, 0x8f, 0x3b, 0x8c, 0xa5, + 0xb6, 0x58, 0xb1, 0xd6, 0x2e, 0x9d, 0xd6, 0x2d, 0xbe, 0x1f, 0x23, 0x9d, + 0x06, 0x25, 0x7e, 0xfe, 0x7a, 0x46, 0xb1, 0x73, 0x69, 0x62, 0xb0, 0xfd, + 0x22, 0x35, 0xf1, 0x45, 0xe0, 0xe4, 0x96, 0x2f, 0x13, 0x41, 0x62, 0xfd, + 0x91, 0x7c, 0x46, 0xac, 0x5f, 0xb0, 0xdc, 0x78, 0x96, 0x2f, 0x67, 0xcc, + 0xc3, 0xf0, 0xf8, 0xe1, 0x15, 0xdd, 0x24, 0xb1, 0x73, 0x04, 0x62, 0x38, + 0xbd, 0x08, 0xd0, 0xcf, 0xeb, 0x13, 0x54, 0x28, 0xc4, 0x6f, 0xff, 0x60, + 0xcc, 0x13, 0x07, 0xe1, 0x36, 0xd2, 0xb1, 0x7d, 0x27, 0xe1, 0xd6, 0x2f, + 0xcd, 0xe3, 0x37, 0x09, 0x62, 0xff, 0xd8, 0x6f, 0xf3, 0xdc, 0x29, 0x82, + 0xc5, 0x4a, 0x36, 0xdd, 0x35, 0x88, 0xc4, 0x59, 0x7f, 0xbb, 0x32, 0x62, + 0x79, 0x89, 0x62, 0xfb, 0x6f, 0x3e, 0xcb, 0x17, 0xfa, 0x7b, 0x87, 0x0c, + 0xf3, 0xac, 0x5f, 0xbc, 0xc7, 0x7f, 0x2c, 0x56, 0x22, 0x0c, 0xe4, 0xa4, + 0x6d, 0x71, 0x76, 0xb1, 0x78, 0x6e, 0x35, 0x8b, 0xff, 0xff, 0x0a, 0x74, + 0x64, 0xfe, 0x46, 0x67, 0x9f, 0x3a, 0xbb, 0x83, 0x76, 0xb1, 0x78, 0x0d, + 0x1e, 0xb1, 0x7e, 0xe1, 0x4c, 0x5e, 0x58, 0xa1, 0xa3, 0x64, 0x87, 0x78, + 0xe7, 0xe2, 0x0b, 0xff, 0xfb, 0xc2, 0xd3, 0x73, 0xce, 0x67, 0xf3, 0x66, + 0x2d, 0xd6, 0x29, 0x62, 0xd8, 0xb1, 0x5d, 0x75, 0x2f, 0x7e, 0x19, 0x4e, + 0x8a, 0x3e, 0x3d, 0xda, 0x0b, 0x17, 0xff, 0xc6, 0x3e, 0x6c, 0x64, 0x4f, + 0xe7, 0xd3, 0x01, 0x62, 0xa5, 0x54, 0x28, 0xcb, 0xb2, 0x1e, 0x2d, 0x0d, + 0xff, 0x11, 0x08, 0x4a, 0xff, 0xe3, 0x64, 0xb7, 0x31, 0xf5, 0xa7, 0x09, + 0x62, 0xff, 0xdd, 0xc3, 0xf9, 0xdc, 0x3c, 0xf1, 0x2c, 0x5e, 0x92, 0x95, + 0x8b, 0xef, 0xb8, 0x02, 0x58, 0xbc, 0x5b, 0xca, 0xc5, 0xfb, 0xf3, 0xac, + 0xd9, 0x62, 0xff, 0xf1, 0x4f, 0x7c, 0x6d, 0x1e, 0x7b, 0x87, 0x16, 0x2f, + 0xff, 0xff, 0x67, 0xb8, 0xd1, 0x18, 0x59, 0xdc, 0x30, 0x5b, 0x16, 0x0f, + 0xef, 0x12, 0xc5, 0x6e, 0x8f, 0x03, 0x94, 0xfd, 0x32, 0xe2, 0xf2, 0xc5, + 0xff, 0xee, 0x4c, 0x3d, 0x9f, 0x2c, 0xf7, 0xdd, 0x62, 0xa4, 0xf8, 0x1c, + 0x5e, 0xe1, 0x1a, 0xb1, 0x46, 0x2a, 0xa1, 0x94, 0x81, 0xa1, 0x9a, 0x36, + 0xe4, 0x9a, 0x8c, 0x37, 0xf0, 0x91, 0xf1, 0x05, 0xe3, 0xfd, 0x96, 0x2f, + 0x18, 0x19, 0xd6, 0x2f, 0xd2, 0x3e, 0xa9, 0x3a, 0xc5, 0xc2, 0x35, 0x62, + 0xfb, 0xff, 0x11, 0xab, 0x15, 0xf3, 0x7c, 0x18, 0xcd, 0xc2, 0x35, 0x62, + 0xfb, 0xff, 0x11, 0xab, 0x17, 0x7b, 0x86, 0x1f, 0x07, 0xc8, 0x83, 0x19, + 0xbf, 0xf0, 0x22, 0xfb, 0x80, 0x9b, 0xb8, 0x2c, 0x52, 0xc5, 0x31, 0xe6, + 0xf1, 0x06, 0x8c, 0x4d, 0xd2, 0x61, 0x93, 0x90, 0x8a, 0xb8, 0xdf, 0x2c, + 0x5d, 0x9f, 0x58, 0xaf, 0x9b, 0x0f, 0x0c, 0xdf, 0xbd, 0xef, 0x60, 0x4b, + 0x15, 0x27, 0x96, 0xe4, 0x35, 0x2a, 0xa1, 0xbb, 0x1d, 0x3c, 0x72, 0x80, + 0x85, 0xad, 0xe3, 0xce, 0xeb, 0x17, 0x6b, 0x16, 0x2f, 0xfb, 0x67, 0xea, + 0xf4, 0xf7, 0x0e, 0x2c, 0x5e, 0xc7, 0x1a, 0xc5, 0xb8, 0xb1, 0x71, 0x66, + 0xe6, 0xbb, 0xb1, 0xcb, 0xff, 0x7e, 0x48, 0xcd, 0x48, 0x6c, 0x4b, 0x17, + 0xff, 0xb4, 0xc5, 0xef, 0xb4, 0x30, 0x6d, 0x05, 0x8b, 0xcf, 0x84, 0xb1, + 0x74, 0xc4, 0xb1, 0x7e, 0x9d, 0x69, 0xa3, 0xd6, 0x29, 0xcf, 0x0c, 0x43, + 0x17, 0xfe, 0x01, 0x9f, 0x7f, 0x70, 0x9e, 0x25, 0x8b, 0xfd, 0x9a, 0x33, + 0xf8, 0x06, 0x58, 0xac, 0x3f, 0x5f, 0x20, 0xd8, 0x6b, 0x17, 0xc0, 0x3e, + 0x71, 0x62, 0xf8, 0xb3, 0x86, 0x61, 0xb5, 0xe0, 0x95, 0x4a, 0xaa, 0x3d, + 0x9b, 0x77, 0x2d, 0xd1, 0xf9, 0xd2, 0x78, 0xbd, 0xe8, 0x4b, 0x74, 0x56, + 0xb3, 0x2c, 0x5f, 0xfd, 0x17, 0x57, 0xf3, 0xd8, 0x03, 0xb4, 0x4b, 0x15, + 0x1a, 0x2b, 0xae, 0x91, 0xec, 0x95, 0x74, 0x4f, 0x62, 0x11, 0xbf, 0xff, + 0x19, 0xdc, 0x27, 0xe6, 0x7f, 0x3d, 0xe9, 0xd0, 0x16, 0x2e, 0x0c, 0xeb, + 0x17, 0xfd, 0xfc, 0xda, 0x7b, 0x27, 0x09, 0x62, 0xb0, 0xf5, 0x38, 0x33, + 0x47, 0x46, 0x78, 0x21, 0x5d, 0x7f, 0x98, 0x80, 0x60, 0x59, 0xf5, 0x8b, + 0xff, 0x02, 0x3b, 0x3e, 0xf2, 0x76, 0x1a, 0xc5, 0xff, 0x7d, 0xcf, 0x31, + 0xff, 0xcd, 0x96, 0x29, 0x62, 0xdc, 0x30, 0xf2, 0x76, 0x3d, 0xa8, 0x23, + 0xa4, 0x8d, 0x45, 0x08, 0xab, 0xff, 0xff, 0xfe, 0x08, 0xcf, 0xb6, 0xf8, + 0x61, 0x67, 0xb8, 0xf8, 0x72, 0xc8, 0xa1, 0x83, 0xee, 0x12, 0x35, 0x8b, + 0xa2, 0x1a, 0xc5, 0x62, 0x2c, 0x7f, 0x09, 0x8b, 0xfb, 0x59, 0x02, 0x93, + 0xac, 0x5f, 0xb2, 0x05, 0x27, 0x58, 0xb8, 0x80, 0x61, 0xea, 0x68, 0xb6, + 0xff, 0xff, 0xfd, 0x0e, 0x70, 0x53, 0xe7, 0x1e, 0x14, 0x46, 0x16, 0x6a, + 0x4b, 0xdf, 0xce, 0xa5, 0x8b, 0xff, 0x4e, 0x3f, 0xbf, 0x25, 0x3b, 0xac, + 0x5f, 0xc7, 0xee, 0x7f, 0xf9, 0x58, 0xbd, 0xdc, 0x39, 0xb1, 0xf6, 0x61, + 0xed, 0x62, 0x6a, 0xbd, 0x97, 0x6a, 0x1e, 0x56, 0xe2, 0xc5, 0x4a, 0xe0, + 0x76, 0x46, 0x22, 0xf0, 0xe5, 0x14, 0x7a, 0x01, 0x9b, 0x5f, 0xe8, 0x18, + 0xdb, 0xfe, 0x7c, 0xb1, 0x7e, 0xce, 0x7d, 0xe0, 0xb1, 0x6d, 0x96, 0x2f, + 0xa7, 0xd8, 0x05, 0x8a, 0x58, 0xad, 0x8d, 0x77, 0x5e, 0x45, 0x7f, 0xff, + 0x7d, 0xe7, 0xc5, 0x9e, 0xfe, 0x19, 0x3a, 0x68, 0x96, 0x2f, 0xff, 0xec, + 0x33, 0xec, 0xfe, 0x63, 0xe1, 0x83, 0xd3, 0x84, 0xb1, 0x6c, 0x3a, 0x2e, + 0x3a, 0x2d, 0xdf, 0xc3, 0x62, 0x83, 0x9d, 0x62, 0xff, 0xec, 0x87, 0xda, + 0x13, 0xed, 0x60, 0xd6, 0x2f, 0xda, 0xce, 0xe1, 0xc5, 0x8b, 0xf7, 0xda, + 0x1f, 0x75, 0x8b, 0xdb, 0xff, 0x16, 0x2b, 0x63, 0xf0, 0x81, 0x56, 0x8a, + 0x2f, 0xe0, 0x70, 0xc0, 0x73, 0x4b, 0x15, 0x87, 0xc2, 0xc6, 0x17, 0xfd, + 0xdc, 0xeb, 0x63, 0x31, 0xc6, 0xb1, 0x74, 0x4e, 0xb1, 0x7f, 0xf6, 0x78, + 0xcc, 0x87, 0xf1, 0xe1, 0xc5, 0x8a, 0x95, 0x74, 0x70, 0x36, 0xc2, 0x87, + 0x41, 0xfc, 0x37, 0xd8, 0xa8, 0x05, 0xa5, 0x18, 0xa8, 0x88, 0x3a, 0x1e, + 0x47, 0x0c, 0x5f, 0x7e, 0x34, 0xde, 0x39, 0x62, 0xff, 0xf6, 0x6a, 0x5c, + 0x78, 0x73, 0x39, 0x23, 0x58, 0xbf, 0x77, 0x09, 0x04, 0xac, 0x5f, 0xfb, + 0x3d, 0xec, 0x7e, 0x85, 0x9c, 0x58, 0xa3, 0x11, 0x65, 0x89, 0x5f, 0x29, + 0xbf, 0xd1, 0x73, 0x8c, 0x5b, 0x9d, 0x62, 0xfc, 0x59, 0xf6, 0xf2, 0xc5, + 0x76, 0x88, 0xdd, 0x18, 0x1c, 0xda, 0xf4, 0xf7, 0x1c, 0xb1, 0x7b, 0x22, + 0x95, 0x8b, 0xe9, 0xfe, 0x71, 0x62, 0x86, 0x7c, 0x1a, 0x21, 0x21, 0xdb, + 0xfe, 0x78, 0xe9, 0x3f, 0x3f, 0x87, 0x58, 0xbe, 0x7e, 0x99, 0xa5, 0x8b, + 0xfe, 0xe9, 0xdc, 0x39, 0x82, 0xd0, 0x16, 0x2f, 0xb9, 0xf6, 0x3a, 0xc5, + 0x39, 0xf0, 0xf8, 0xfa, 0xff, 0x7b, 0x85, 0x9b, 0x07, 0x05, 0x8b, 0xc0, + 0xcf, 0x2c, 0x54, 0x9e, 0x9b, 0x9b, 0x57, 0x58, 0xae, 0x02, 0x63, 0x6c, + 0x78, 0x48, 0x9c, 0xbb, 0xe7, 0x85, 0x08, 0x5f, 0x3a, 0x5f, 0x19, 0xbe, + 0xc1, 0x2c, 0x5f, 0xb3, 0xe6, 0x7b, 0x8b, 0x17, 0xb3, 0x52, 0xb1, 0x7f, + 0x16, 0x00, 0xf3, 0x05, 0x8b, 0xf1, 0x67, 0xbe, 0xeb, 0x14, 0x33, 0xd4, + 0x08, 0xb6, 0xf7, 0x85, 0x05, 0x8b, 0xf6, 0xc6, 0x0a, 0x62, 0x58, 0xbb, + 0x87, 0x58, 0xbf, 0xff, 0xe2, 0x90, 0x77, 0x0e, 0x0a, 0x7c, 0x58, 0x37, + 0xcd, 0x44, 0xb1, 0x52, 0x8e, 0xcc, 0x23, 0x61, 0xee, 0x16, 0x78, 0x62, + 0x8c, 0x76, 0x6a, 0x93, 0x0e, 0xad, 0xa5, 0x71, 0x8e, 0x52, 0xee, 0x4f, + 0x8e, 0x1b, 0x0f, 0x4d, 0xe1, 0x27, 0xdc, 0x61, 0x0f, 0x2a, 0x36, 0x3d, + 0xce, 0x29, 0x48, 0x7a, 0x8c, 0x0c, 0xe7, 0x5f, 0x96, 0x7e, 0xd2, 0xc0, + 0x41, 0x2c, 0x10, 0xa5, 0xfc, 0x72, 0x74, 0xcb, 0xd2, 0xff, 0xc5, 0x38, + 0x4b, 0xd1, 0xe0, 0x22, 0x88, 0xe2, 0xa0, 0xe3, 0x5c, 0xbe, 0xc8, 0x84, + 0x35, 0x8b, 0xf4, 0x1f, 0x59, 0xda, 0xc5, 0xee, 0x7f, 0x16, 0x2f, 0xd9, + 0xcd, 0xb0, 0x25, 0x8b, 0xff, 0xbe, 0x21, 0xfc, 0x5e, 0xe7, 0xc5, 0x12, + 0xc5, 0xf7, 0x05, 0x3a, 0x58, 0xad, 0xd3, 0x00, 0xec, 0x92, 0x22, 0x9f, + 0x8e, 0x91, 0x57, 0x12, 0x69, 0x62, 0xef, 0x71, 0x62, 0xa4, 0xd2, 0x10, + 0x65, 0xff, 0xe7, 0xd3, 0xe7, 0x66, 0x7a, 0x22, 0x93, 0xac, 0x5f, 0xfd, + 0x8d, 0xd9, 0x83, 0x9d, 0x8c, 0x34, 0xd5, 0x8a, 0xdd, 0x12, 0xfd, 0xa6, + 0x5f, 0xd2, 0x72, 0xcd, 0xb1, 0x62, 0xf7, 0xb9, 0xfc, 0x3d, 0x2f, 0x92, + 0xdf, 0xf4, 0xfb, 0x87, 0xee, 0x4b, 0x65, 0x8b, 0xff, 0xf1, 0xfb, 0x87, + 0x35, 0xdc, 0xfb, 0x93, 0xf7, 0xf2, 0xc5, 0xff, 0x61, 0xa5, 0x9e, 0xfb, + 0x84, 0xb1, 0x7e, 0xc0, 0xb0, 0x67, 0x58, 0xbf, 0xbf, 0x9c, 0x9d, 0x6e, + 0xb1, 0x7f, 0x43, 0x0c, 0x7d, 0x09, 0x62, 0xff, 0x9f, 0x08, 0x6f, 0xd2, + 0x46, 0xb1, 0x74, 0xc4, 0xb1, 0x74, 0xf6, 0x62, 0x2b, 0xe2, 0x2f, 0xf9, + 0x7f, 0x8e, 0x6a, 0x55, 0x12, 0x61, 0x9b, 0x9d, 0xe9, 0x67, 0xe7, 0x45, + 0x0d, 0x8b, 0xa3, 0xc6, 0xb1, 0x7f, 0xf7, 0x9f, 0x53, 0x85, 0xee, 0x61, + 0x2c, 0x5f, 0xff, 0x6d, 0x9b, 0x8f, 0xef, 0x86, 0x98, 0x68, 0xa5, 0x62, + 0xfe, 0xcd, 0x6b, 0x3d, 0xc5, 0x8b, 0xf8, 0x98, 0xd3, 0xb4, 0x16, 0x2f, + 0x41, 0xfd, 0xf3, 0xdc, 0xf1, 0x75, 0xb6, 0x58, 0xba, 0x4e, 0xb1, 0x78, + 0xb3, 0xb5, 0x8b, 0x64, 0x0d, 0xa1, 0xc5, 0xef, 0xef, 0x3f, 0x49, 0x2d, + 0xd6, 0x2b, 0x87, 0xac, 0x19, 0x35, 0xdf, 0xc5, 0x8b, 0xf8, 0xf3, 0xb9, + 0x9c, 0x35, 0x62, 0xfd, 0x07, 0x20, 0x71, 0x62, 0xfd, 0x27, 0x7f, 0xca, + 0xc5, 0xe2, 0x0f, 0xeb, 0x17, 0xfb, 0x3d, 0xf7, 0xf6, 0x6e, 0xb1, 0x73, + 0xf6, 0xb1, 0x7b, 0x0b, 0x75, 0x8b, 0xcd, 0x0e, 0x2c, 0x54, 0x9b, 0xa1, + 0x0e, 0xd1, 0x89, 0xbf, 0xc0, 0x8f, 0x05, 0xe2, 0x32, 0xd1, 0x43, 0x13, + 0x90, 0xf7, 0x0d, 0x3c, 0xa5, 0x7e, 0x06, 0x0d, 0xa0, 0xb1, 0x7f, 0xf4, + 0x9c, 0xc1, 0xfe, 0x4c, 0xfc, 0xc7, 0xac, 0x5c, 0x2e, 0xa5, 0x8a, 0x93, + 0xe5, 0x24, 0xaa, 0x8d, 0x97, 0x22, 0x24, 0x6d, 0xd0, 0xa2, 0x85, 0x89, + 0xcc, 0xff, 0x28, 0x71, 0x9f, 0x8a, 0x11, 0xb7, 0xff, 0xfb, 0x59, 0xcc, + 0xdf, 0x35, 0x3e, 0x7d, 0xdc, 0x71, 0x4a, 0xc5, 0xfc, 0xdb, 0x75, 0x16, + 0x76, 0xb1, 0x74, 0x39, 0xa4, 0x4a, 0x79, 0x8a, 0xfd, 0x30, 0x13, 0x06, + 0xb1, 0x7b, 0x30, 0x0b, 0x15, 0xf3, 0xc5, 0x22, 0x9b, 0xf0, 0xff, 0x85, + 0xe5, 0x8a, 0x81, 0xe4, 0xc4, 0x43, 0x5d, 0xa3, 0x80, 0xa1, 0x7b, 0x7f, + 0xda, 0x7c, 0x0b, 0xde, 0x62, 0x58, 0xbb, 0xb3, 0x56, 0x2e, 0x7e, 0xcc, + 0x3d, 0x31, 0x9c, 0xde, 0x70, 0x62, 0xc5, 0xf4, 0x4c, 0xd0, 0x58, 0xb9, + 0x86, 0xb1, 0x4e, 0x6e, 0x80, 0x47, 0x6e, 0x40, 0xfd, 0xb1, 0x5a, 0xff, + 0xf6, 0x05, 0xd5, 0xfc, 0xf6, 0x00, 0xed, 0x12, 0xc5, 0xfb, 0x27, 0x50, + 0x02, 0xc5, 0x4a, 0x77, 0xda, 0x7b, 0x68, 0x52, 0x91, 0x38, 0x93, 0xef, + 0xfc, 0xdd, 0x0b, 0x3d, 0x80, 0x21, 0xac, 0x58, 0x0b, 0x14, 0xe7, 0xa3, + 0x11, 0xfd, 0xff, 0x7f, 0x67, 0xc2, 0xee, 0x1c, 0x58, 0xbf, 0xef, 0xc5, + 0xfc, 0xee, 0x18, 0x4b, 0x17, 0xfb, 0xf9, 0xb9, 0x60, 0xa3, 0xd6, 0x2a, + 0x4f, 0xcb, 0xb3, 0xbb, 0xfc, 0x67, 0x30, 0xa7, 0x51, 0x2c, 0x5e, 0xef, + 0x37, 0x58, 0xbf, 0xfd, 0x9b, 0xf3, 0x3d, 0x16, 0x1a, 0x58, 0x05, 0x8a, + 0xd2, 0x28, 0x38, 0x6a, 0x10, 0xfd, 0xff, 0xf1, 0xba, 0x7e, 0xcb, 0x3c, + 0x20, 0x1d, 0xa0, 0xb1, 0x7f, 0xff, 0xfb, 0x00, 0x0c, 0x68, 0x8c, 0xf6, + 0xa4, 0x2f, 0xcf, 0x3d, 0xdc, 0x30, 0x96, 0x2f, 0x61, 0xa6, 0x62, 0x33, + 0x7e, 0xa5, 0x52, 0xaa, 0x8b, 0x21, 0x5a, 0xf0, 0xc2, 0x14, 0x3f, 0xaf, + 0xf3, 0xe8, 0x6f, 0x01, 0x69, 0x62, 0xa0, 0x7f, 0xfb, 0xa5, 0xd2, 0xc5, + 0xfd, 0x3a, 0xf3, 0xe7, 0x6b, 0x17, 0xfd, 0x22, 0xdf, 0xbf, 0x3e, 0x12, + 0xc5, 0x7c, 0xfa, 0x08, 0xba, 0xfa, 0x12, 0x0e, 0x2c, 0x5f, 0xcf, 0xd8, + 0x34, 0xc3, 0x58, 0xbd, 0x9a, 0x02, 0xc5, 0xfb, 0x8f, 0x84, 0x05, 0x8b, + 0x63, 0x9e, 0x27, 0x07, 0x6f, 0xce, 0x00, 0x66, 0x96, 0x2f, 0x87, 0xf9, + 0x82, 0xc5, 0x46, 0xc9, 0xce, 0x0d, 0xd3, 0x08, 0x7e, 0x46, 0x4e, 0x7c, + 0x26, 0x0c, 0xa2, 0xdd, 0x62, 0xc5, 0xe8, 0xd7, 0x1b, 0xc6, 0xcb, 0x17, + 0xe6, 0xc2, 0x73, 0x56, 0x2f, 0x7b, 0x3e, 0xb1, 0x5d, 0x70, 0xfc, 0x88, + 0xbb, 0xa8, 0x9e, 0xfb, 0x33, 0xfc, 0x58, 0xbf, 0xff, 0xff, 0xe7, 0xdf, + 0xf9, 0x3d, 0xed, 0x38, 0xfd, 0x82, 0x4b, 0x76, 0xf9, 0x30, 0x0c, 0xdf, + 0xbe, 0x2c, 0x5f, 0xff, 0x4e, 0xde, 0xee, 0x02, 0x23, 0x4c, 0x7e, 0x8e, + 0xb1, 0x5b, 0xa3, 0xbc, 0xa1, 0x33, 0x73, 0x9d, 0x62, 0xf8, 0xce, 0xc4, + 0x4b, 0x17, 0xfb, 0x02, 0x32, 0x41, 0x20, 0x58, 0xbf, 0xff, 0xe8, 0x37, + 0x66, 0x10, 0xba, 0x8c, 0xce, 0xe1, 0x82, 0x20, 0x71, 0x62, 0xf1, 0xd8, + 0xeb, 0x15, 0xb2, 0x30, 0x3b, 0x35, 0x66, 0xea, 0x89, 0x35, 0x53, 0x94, + 0x74, 0x17, 0xea, 0x87, 0x2d, 0xff, 0x46, 0xde, 0xf3, 0x97, 0x70, 0xe2, + 0xc5, 0xf4, 0x7f, 0xf2, 0x3d, 0x62, 0xfa, 0x0d, 0xad, 0x96, 0x2e, 0x7e, + 0xbd, 0x62, 0xa2, 0x3c, 0x08, 0xe2, 0x4a, 0x31, 0x72, 0x9e, 0x36, 0x69, + 0xda, 0x11, 0x23, 0x37, 0xc9, 0x4c, 0xc6, 0xa4, 0xb2, 0x04, 0x73, 0x4d, + 0xff, 0xf4, 0xed, 0xcc, 0xd8, 0x53, 0xad, 0xfb, 0x83, 0xac, 0x5f, 0xfd, + 0x27, 0x33, 0xf9, 0xdf, 0xb1, 0xa2, 0x58, 0xa8, 0x22, 0x6c, 0x95, 0x2f, + 0xff, 0xff, 0xbb, 0xe0, 0xa7, 0xb3, 0x3f, 0x83, 0x30, 0xb0, 0x46, 0x99, + 0xc0, 0x01, 0xfc, 0xb1, 0x7f, 0xe1, 0x4f, 0x56, 0xb3, 0xdc, 0x9d, 0x96, 0x2f, 0xff, 0xf1, 0xcf, 0x3e, 0xe6, 0x7b, 0x9a, 0x7c, 0xdc, 0xb0, 0x6b, - 0x16, 0xcd, 0x91, 0x48, 0x34, 0x3b, 0xff, 0xde, 0x14, 0xe6, 0xc6, 0x71, - 0xc9, 0xf4, 0xb1, 0x60, 0x88, 0xfd, 0x03, 0x29, 0xa9, 0x4f, 0x1b, 0x23, - 0x9d, 0xbf, 0x49, 0x74, 0xdb, 0x2c, 0x5f, 0xcf, 0xac, 0xf3, 0x74, 0xb1, - 0x7f, 0x44, 0xe3, 0xc3, 0xba, 0xc5, 0xff, 0xff, 0xff, 0x6f, 0x3f, 0x93, - 0xfb, 0x39, 0xc9, 0xd6, 0xa4, 0xb3, 0x6c, 0x17, 0x05, 0x11, 0x49, 0xd6, - 0x2f, 0xff, 0xfc, 0xf3, 0xe2, 0xcf, 0x7f, 0x0c, 0xeb, 0x8e, 0x6e, 0x7c, - 0x5e, 0x58, 0xa9, 0x4c, 0xc7, 0x0b, 0xbf, 0x09, 0x5b, 0xc2, 0xd1, 0xab, - 0x14, 0x34, 0xec, 0x8f, 0x1a, 0xfc, 0x71, 0xa5, 0xf9, 0x80, 0x1b, 0x6c, - 0xb1, 0x7f, 0xff, 0xf6, 0xc6, 0x7b, 0x67, 0xcd, 0x6c, 0x64, 0x50, 0x7f, - 0xe0, 0xfa, 0xce, 0xe5, 0x8a, 0xc4, 0x70, 0xb9, 0xd0, 0x8a, 0xaf, 0x38, - 0x25, 0x62, 0xff, 0x18, 0x59, 0xa7, 0x93, 0xac, 0x5f, 0xfb, 0x4d, 0xed, - 0x63, 0xfe, 0x46, 0xb1, 0x7f, 0x0c, 0xb3, 0xed, 0xe5, 0x8b, 0xf7, 0xba, - 0x83, 0xe9, 0x62, 0xb0, 0xf5, 0xf8, 0x5b, 0x5b, 0x26, 0x0a, 0x31, 0xcd, - 0x19, 0x82, 0x12, 0xb7, 0x0e, 0x56, 0x2f, 0xfe, 0xee, 0xfb, 0x44, 0x61, - 0x66, 0xc1, 0xc1, 0x62, 0xa4, 0xf8, 0xf0, 0x5e, 0xfe, 0x0a, 0x28, 0x14, - 0x81, 0x62, 0xf6, 0x98, 0x35, 0x8b, 0xf4, 0xf8, 0xef, 0xe5, 0x8a, 0x63, - 0xc6, 0x10, 0xf5, 0xff, 0x85, 0x3b, 0x19, 0x25, 0x3a, 0x82, 0xc5, 0xf1, - 0x75, 0x87, 0x58, 0xad, 0x91, 0x08, 0x72, 0x10, 0x90, 0x2f, 0xfd, 0x26, - 0xf7, 0x0b, 0x0a, 0x20, 0xce, 0xb1, 0x7f, 0xc1, 0x66, 0x86, 0xf9, 0xee, - 0x2c, 0x5f, 0xfe, 0x17, 0x0c, 0xfb, 0x39, 0x3e, 0xa1, 0x1c, 0xb1, 0x7b, - 0xd2, 0x4b, 0x17, 0x78, 0xeb, 0x15, 0x86, 0xd3, 0x71, 0xcb, 0xff, 0xbf, - 0xd4, 0x38, 0x61, 0x61, 0xf4, 0x25, 0x8b, 0x61, 0x87, 0xd3, 0x84, 0x36, - 0x00, 0x13, 0x12, 0xe4, 0x3a, 0xef, 0xff, 0xff, 0x3e, 0x13, 0x7b, 0xf3, - 0x11, 0x85, 0x9f, 0x7f, 0x70, 0x5b, 0x8a, 0x56, 0x2f, 0x02, 0x4e, 0xb1, - 0x78, 0xd2, 0xc3, 0x11, 0x2b, 0x1b, 0x3c, 0x54, 0xab, 0xbb, 0xc8, 0x7d, - 0x74, 0x64, 0xe8, 0xad, 0x1a, 0x60, 0xa1, 0x89, 0x7e, 0xfe, 0x7a, 0x46, - 0xb1, 0x7f, 0xfb, 0xbf, 0x32, 0x7e, 0xfe, 0xe3, 0x97, 0x50, 0x58, 0xad, - 0x1f, 0xc8, 0x8a, 0x2f, 0xff, 0x31, 0xb8, 0x42, 0xf7, 0xf3, 0xb0, 0xe5, - 0x62, 0xff, 0xec, 0xf6, 0x3e, 0xd9, 0xbb, 0xc5, 0xc5, 0x8b, 0xbb, 0xde, - 0xf1, 0x62, 0xff, 0xd9, 0x80, 0xe1, 0x9a, 0xe0, 0xf8, 0xb1, 0x7f, 0xb5, - 0x9b, 0xfd, 0xf5, 0x12, 0xc5, 0xfd, 0x9c, 0xc9, 0x23, 0x56, 0x28, 0xc4, - 0xc3, 0x23, 0x44, 0x61, 0x91, 0x62, 0x0f, 0xcd, 0xaf, 0xff, 0xbe, 0xe6, - 0x64, 0x5d, 0x43, 0x9e, 0xfe, 0x74, 0xb1, 0x7f, 0xff, 0x0c, 0x9b, 0xff, - 0xea, 0x7b, 0x8a, 0x4e, 0x61, 0xfb, 0xf5, 0x8a, 0x25, 0x4c, 0x5e, 0x8d, - 0x63, 0xb2, 0x80, 0x4a, 0xb7, 0xde, 0xd0, 0x8e, 0xb1, 0x7f, 0xff, 0xb0, - 0xe7, 0x7e, 0x8c, 0x34, 0xdc, 0x2f, 0x1a, 0x29, 0xd2, 0xc5, 0xb7, 0x74, - 0x45, 0x68, 0x92, 0xe1, 0x12, 0xc5, 0xfe, 0x68, 0xf3, 0x3a, 0x84, 0x9a, - 0xb1, 0x7a, 0x7e, 0x5d, 0x1e, 0x88, 0x85, 0xeb, 0x11, 0x5b, 0xa7, 0xab, - 0xff, 0xff, 0xff, 0x38, 0xff, 0x9b, 0xbe, 0xb4, 0xe1, 0x3e, 0x11, 0xbc, - 0xc1, 0xfc, 0x5b, 0x18, 0xd1, 0x63, 0x2c, 0x5f, 0xf4, 0x46, 0x7b, 0x8e, - 0x64, 0x8d, 0x62, 0xb1, 0x1b, 0x42, 0x84, 0xed, 0xe9, 0x07, 0x16, 0x2e, - 0x90, 0x96, 0x2a, 0x06, 0xd4, 0x87, 0x6e, 0xc8, 0xe5, 0x8b, 0xfc, 0x67, - 0xe5, 0xf6, 0xc1, 0xac, 0x5b, 0xac, 0x3e, 0xf2, 0x20, 0xec, 0x35, 0x7f, - 0x84, 0x17, 0x22, 0xd3, 0x76, 0x58, 0xa9, 0x5e, 0x38, 0xc9, 0x50, 0x8f, - 0x1b, 0xf7, 0xe1, 0xf8, 0xd0, 0xcb, 0x23, 0x6b, 0xf9, 0xfe, 0xe7, 0x61, - 0xac, 0x52, 0xc5, 0x81, 0x03, 0x72, 0x32, 0xdb, 0xff, 0xee, 0x44, 0x58, - 0x17, 0xf3, 0xbb, 0xd2, 0x0e, 0x2c, 0x51, 0x1f, 0xe7, 0x89, 0xef, 0x9b, - 0xb3, 0xe9, 0x62, 0xf4, 0x09, 0xd6, 0x2b, 0x47, 0x80, 0x72, 0x4a, 0x94, - 0x41, 0xe3, 0x0d, 0xfd, 0xf6, 0x2f, 0x61, 0xd6, 0x2f, 0x39, 0x79, 0x62, - 0xfe, 0x87, 0x18, 0xe2, 0xe2, 0xc5, 0xc0, 0x65, 0x8b, 0xff, 0xff, 0x7b, - 0x9f, 0x73, 0x0b, 0x05, 0x3d, 0x7f, 0x00, 0xdd, 0x43, 0x8b, 0x15, 0x28, - 0x86, 0x71, 0x7a, 0x94, 0xc7, 0xf6, 0x2d, 0x61, 0xcf, 0x42, 0xd6, 0xe6, - 0x82, 0xc5, 0x9d, 0x62, 0xec, 0xff, 0xcd, 0x44, 0x70, 0xbd, 0xe9, 0x23, - 0x56, 0x2f, 0xf4, 0x79, 0x99, 0xdd, 0xf9, 0xf2, 0xc5, 0xf6, 0xb6, 0xcd, - 0xd6, 0x2b, 0x0f, 0x81, 0xce, 0xeb, 0xe8, 0x9d, 0xf3, 0xed, 0x4b, 0xaa, - 0xeb, 0xd9, 0xf8, 0x72, 0xb3, 0x32, 0x70, 0xd4, 0xd9, 0x6f, 0x7b, 0xc2, - 0x7b, 0xa9, 0x54, 0xcf, 0x3c, 0x4b, 0x14, 0x22, 0x75, 0x28, 0x48, 0xe5, - 0x1f, 0x95, 0x78, 0xd1, 0x99, 0x82, 0x14, 0xe5, 0x2f, 0x6f, 0x93, 0xe2, - 0xfe, 0x8e, 0x90, 0x51, 0xa0, 0x47, 0x35, 0x77, 0x43, 0x32, 0xfd, 0x9e, - 0xe3, 0x74, 0xb1, 0x7f, 0xc5, 0x81, 0x77, 0x77, 0x7b, 0x3e, 0xb1, 0x7f, - 0x89, 0x8d, 0xcc, 0x23, 0x56, 0x2e, 0xdf, 0x16, 0x28, 0x68, 0xb4, 0xdc, - 0xa4, 0xe8, 0x0c, 0x67, 0x4b, 0x17, 0xff, 0x19, 0x91, 0x75, 0x0e, 0x7b, - 0xf9, 0xd2, 0xc5, 0xff, 0x3e, 0x74, 0x46, 0x73, 0x09, 0x62, 0xf7, 0xdf, - 0x4b, 0x15, 0xf3, 0xd6, 0xee, 0x39, 0xbf, 0xd0, 0x91, 0x98, 0x37, 0x89, - 0x62, 0xff, 0x8c, 0xf1, 0x60, 0x58, 0xfc, 0x58, 0xbf, 0xf6, 0x1b, 0x25, - 0xb9, 0x9d, 0xb8, 0x12, 0xc5, 0xff, 0xff, 0xbc, 0xd1, 0x16, 0x6c, 0xc6, - 0x17, 0x58, 0x11, 0x60, 0xb0, 0xd5, 0x8a, 0x8d, 0xd3, 0xf5, 0xd8, 0x33, - 0x78, 0x50, 0x74, 0x4b, 0x11, 0xb7, 0xce, 0xbb, 0x91, 0x6d, 0xe5, 0x8b, - 0xc2, 0x1c, 0xac, 0x54, 0x9a, 0xfc, 0x12, 0xbd, 0xf9, 0x02, 0xc5, 0xfe, - 0xfb, 0x82, 0x7c, 0xfd, 0x96, 0x2f, 0xd0, 0xe7, 0xa7, 0x65, 0x8b, 0xe8, - 0x70, 0x51, 0x2c, 0x5f, 0x9e, 0x42, 0x98, 0x96, 0x2b, 0xa3, 0xce, 0x72, - 0x5b, 0xfd, 0x87, 0x6d, 0xbe, 0x2d, 0x96, 0x2f, 0x14, 0x81, 0x62, 0xfb, - 0xcc, 0x40, 0x58, 0xbf, 0xff, 0x31, 0xa6, 0x81, 0xa2, 0xee, 0x29, 0x0b, - 0xa8, 0x71, 0x62, 0x99, 0x10, 0x04, 0x45, 0x5e, 0x45, 0xe8, 0x70, 0x9c, - 0xbd, 0x03, 0x3b, 0xd5, 0x8b, 0xc6, 0xe7, 0x16, 0x2f, 0x0b, 0x06, 0xb1, - 0x71, 0x44, 0xb1, 0x7c, 0xd1, 0xf2, 0x05, 0x8a, 0x8d, 0x97, 0x66, 0xa6, - 0x51, 0x90, 0xe1, 0x4b, 0x83, 0xfb, 0x8e, 0xf4, 0x6b, 0x13, 0xc7, 0xc8, - 0x9a, 0x1e, 0x60, 0x29, 0x22, 0x4e, 0x0f, 0x08, 0x74, 0x21, 0x8b, 0xdc, - 0xf3, 0xac, 0x52, 0xc5, 0xfe, 0x84, 0xed, 0xcf, 0xb0, 0xd6, 0x2f, 0xf1, - 0x60, 0x5e, 0x35, 0xb8, 0xb1, 0x76, 0x19, 0xd1, 0xf5, 0x44, 0x6b, 0x7e, - 0x3c, 0xfd, 0xbe, 0xb1, 0x79, 0xa1, 0x8b, 0x15, 0x87, 0x89, 0xc2, 0x8b, - 0x69, 0x62, 0xfb, 0x93, 0xae, 0x2c, 0x52, 0xc5, 0xfd, 0xe7, 0xed, 0x25, - 0xba, 0xc5, 0x61, 0xf8, 0xf4, 0x25, 0x11, 0x18, 0x61, 0x97, 0xa7, 0x34, - 0xb1, 0x46, 0x1e, 0xd1, 0x1f, 0x5e, 0xfb, 0x9a, 0xb1, 0x74, 0xe2, 0xc5, - 0x18, 0x9a, 0x10, 0xe1, 0xd8, 0x69, 0x16, 0x87, 0xaf, 0xff, 0x40, 0xa4, - 0xc3, 0x94, 0x9b, 0xe7, 0xd9, 0x62, 0xff, 0xdf, 0x2c, 0xf6, 0xa4, 0xce, - 0x1d, 0x62, 0xfe, 0x93, 0x23, 0xf1, 0x8d, 0x58, 0xa9, 0x3f, 0x28, 0x90, - 0x2b, 0xa4, 0x70, 0x7a, 0x17, 0xd7, 0xc6, 0x4c, 0x34, 0xb1, 0x7b, 0x9a, - 0x3a, 0xc5, 0xff, 0xc6, 0x7b, 0x58, 0x16, 0x6c, 0x58, 0x12, 0xc5, 0x18, - 0xb8, 0x43, 0x23, 0xa3, 0x76, 0xc8, 0xed, 0x9e, 0x32, 0x50, 0x14, 0x91, - 0x27, 0x87, 0xae, 0x90, 0x2c, 0x5f, 0xb4, 0x61, 0x76, 0x09, 0x62, 0xff, - 0xfc, 0x68, 0x22, 0xe1, 0x9e, 0x3c, 0xff, 0x0b, 0xac, 0x58, 0xbe, 0x36, - 0x38, 0x5e, 0x58, 0xb7, 0x16, 0x2f, 0x30, 0x25, 0x62, 0xb4, 0x7a, 0xc7, - 0x28, 0xf8, 0x95, 0xe6, 0x8a, 0x56, 0x2f, 0x7f, 0x34, 0xb1, 0x46, 0x26, - 0xbb, 0x22, 0xf0, 0x2d, 0x68, 0x58, 0x04, 0x5f, 0xdc, 0x3b, 0x7f, 0x6d, - 0x14, 0x23, 0x6d, 0x6c, 0xb1, 0x7c, 0x19, 0x67, 0x65, 0x8b, 0xe7, 0x1e, - 0x0d, 0x62, 0xba, 0x3c, 0x73, 0x92, 0xda, 0x25, 0x8b, 0xe0, 0x79, 0x86, - 0xb1, 0x74, 0x9d, 0x62, 0xde, 0x58, 0xad, 0x1a, 0x96, 0x17, 0xa1, 0x9f, - 0xfe, 0x84, 0xfe, 0x99, 0x7d, 0x23, 0x68, 0x2c, 0x5f, 0xc5, 0xb4, 0x9d, - 0xbc, 0xb1, 0x76, 0x71, 0x62, 0xa4, 0xf1, 0x7c, 0x5d, 0x79, 0x88, 0xd5, - 0x8b, 0xff, 0x63, 0x74, 0x08, 0xa1, 0x3a, 0xd9, 0x62, 0xf6, 0xa6, 0x25, - 0x8b, 0x84, 0x12, 0xc5, 0xcd, 0xd2, 0xc5, 0x61, 0xb1, 0xe0, 0xcd, 0x6c, - 0x9a, 0xb1, 0xac, 0xe7, 0x21, 0xf8, 0xeb, 0x21, 0x79, 0x3e, 0xfa, 0x0c, - 0x51, 0xcb, 0x17, 0xdf, 0xc0, 0x32, 0xc5, 0x99, 0x62, 0x8c, 0x36, 0x71, - 0x11, 0x5d, 0x0d, 0x96, 0x2f, 0x7a, 0x60, 0xb1, 0x7d, 0x91, 0x3e, 0x96, - 0x2f, 0xef, 0xb7, 0x40, 0x0c, 0xeb, 0x17, 0xd9, 0xec, 0x3a, 0xc5, 0xa5, - 0x62, 0xff, 0x71, 0x81, 0x82, 0xd6, 0xcb, 0x17, 0xd1, 0x4f, 0x99, 0x62, - 0x8c, 0x47, 0xe4, 0x8e, 0xe1, 0x1b, 0x18, 0x80, 0x8b, 0xc2, 0x22, 0x35, - 0xbf, 0xfe, 0xc9, 0x20, 0x4b, 0xfb, 0xf8, 0x7c, 0x1a, 0xc5, 0xd3, 0xa5, - 0x8b, 0xde, 0x83, 0x2c, 0x5c, 0x2d, 0x96, 0x2b, 0x63, 0xcd, 0x61, 0x70, - 0xc7, 0x6e, 0xce, 0x2c, 0x5d, 0x26, 0xac, 0x56, 0xc9, 0xad, 0xc1, 0x88, - 0xd8, 0x4d, 0x1c, 0xc3, 0xc2, 0xf7, 0xbd, 0x9b, 0x2c, 0x5f, 0x9c, 0xb6, - 0x0f, 0xa5, 0x8b, 0x98, 0x29, 0x3c, 0x91, 0x8f, 0x5f, 0xbf, 0x85, 0xd0, - 0x96, 0x2f, 0xe7, 0xd7, 0x50, 0x29, 0x58, 0xbf, 0x4f, 0xa0, 0xfe, 0x58, - 0xbf, 0xbf, 0x3d, 0x43, 0x3c, 0xb1, 0x50, 0x3d, 0x71, 0x94, 0x56, 0x91, - 0xa1, 0xf2, 0x9f, 0x42, 0x16, 0xff, 0xb6, 0xd6, 0x45, 0x07, 0x23, 0x56, - 0x2f, 0xfa, 0x4b, 0xda, 0x7e, 0xd8, 0x35, 0x8a, 0x63, 0xf6, 0x8e, 0x3c, - 0xbb, 0x3c, 0xb1, 0x68, 0x96, 0x2b, 0xe6, 0xa8, 0x85, 0xea, 0x37, 0x64, - 0x4d, 0xcb, 0xfe, 0x42, 0x89, 0xe3, 0x85, 0x89, 0x64, 0xeb, 0x1f, 0x23, - 0x69, 0x4e, 0x05, 0x09, 0xb1, 0x43, 0xf6, 0x3a, 0x15, 0x61, 0xa7, 0x5f, - 0xff, 0xf6, 0xff, 0x7f, 0x8b, 0xc6, 0x60, 0xdf, 0x9d, 0x78, 0x4d, 0xc5, - 0x8b, 0xf0, 0x9b, 0xc0, 0x65, 0x8a, 0x31, 0x12, 0x7e, 0x6b, 0xbf, 0xb2, - 0x04, 0x26, 0xe2, 0xc5, 0x0c, 0xf4, 0x42, 0x24, 0xbf, 0xdb, 0x7d, 0xf3, - 0xdc, 0x75, 0x8a, 0x58, 0xa9, 0x3c, 0x0e, 0x1a, 0x5e, 0x32, 0x60, 0xb1, - 0x7b, 0xef, 0xa5, 0x8b, 0xf8, 0x85, 0xcd, 0x73, 0x8b, 0x17, 0xb3, 0xa8, - 0x2c, 0x54, 0x48, 0x88, 0xd0, 0xf7, 0x61, 0xd0, 0x8b, 0xef, 0xdd, 0x04, - 0xc4, 0x05, 0x8b, 0x88, 0xd5, 0x8b, 0xff, 0xcc, 0x51, 0x30, 0x35, 0xa7, - 0x27, 0x89, 0x62, 0xdc, 0x74, 0x46, 0x08, 0xab, 0xb0, 0xc5, 0xcd, 0xf5, - 0x8b, 0xff, 0x1e, 0x4d, 0xf7, 0xf3, 0xd2, 0x05, 0x8b, 0xf3, 0x0e, 0x70, - 0x96, 0x2c, 0x6a, 0xc5, 0x6c, 0x89, 0x07, 0x17, 0xfa, 0x01, 0x13, 0x5d, - 0x9c, 0x58, 0xb9, 0xce, 0xb1, 0x67, 0xf1, 0xae, 0x10, 0xbd, 0xff, 0x78, - 0x9b, 0xe7, 0x9c, 0xf2, 0xc5, 0xf1, 0xcb, 0x37, 0x30, 0xf7, 0xba, 0x26, - 0xbf, 0xfe, 0xcd, 0x98, 0xb7, 0x33, 0x92, 0x76, 0xeb, 0xcb, 0x17, 0x14, - 0x4b, 0x15, 0x28, 0xa6, 0xd1, 0xdb, 0x29, 0xdf, 0xe8, 0xff, 0xe6, 0xda, - 0xd4, 0xac, 0x52, 0xc5, 0xfd, 0xc0, 0xcf, 0xad, 0x4a, 0xc5, 0xff, 0xcd, - 0x0c, 0x21, 0x94, 0xc0, 0x7c, 0x58, 0xb6, 0x61, 0xff, 0xf8, 0x33, 0xb1, - 0x85, 0xff, 0x19, 0xc1, 0x4f, 0x42, 0xcf, 0xac, 0x5d, 0xce, 0xf1, 0x62, - 0xff, 0xf1, 0x61, 0xe7, 0x73, 0x03, 0xdb, 0x66, 0xe9, 0x62, 0xfe, 0x11, - 0xce, 0xd0, 0x33, 0xc7, 0xdb, 0xdc, 0x3b, 0x7f, 0xdc, 0x33, 0xbb, 0xd9, - 0x10, 0xa2, 0x58, 0xbb, 0x5c, 0x58, 0xb8, 0x50, 0xc3, 0xd9, 0x0d, 0x06, - 0xa0, 0x9b, 0xcf, 0xe1, 0x52, 0x50, 0xa2, 0xbc, 0x13, 0x6c, 0xb1, 0x67, - 0x58, 0xa7, 0x3e, 0xaf, 0x9d, 0x00, 0x7e, 0xfc, 0x3c, 0x8b, 0xee, 0xb1, - 0x7d, 0x91, 0x7d, 0xd6, 0x2d, 0xb9, 0x87, 0x98, 0x32, 0x9b, 0xff, 0xf4, - 0xea, 0x77, 0xc3, 0xce, 0xf0, 0x7e, 0x08, 0xeb, 0x15, 0x2c, 0x80, 0x6d, - 0x98, 0xf2, 0x15, 0x31, 0x43, 0x37, 0x50, 0xc7, 0xfc, 0x6d, 0xcc, 0x5c, - 0x50, 0xb7, 0xf4, 0xa1, 0x81, 0x3d, 0x47, 0x15, 0x5d, 0x13, 0x2c, 0x5f, - 0xda, 0xc9, 0x36, 0x49, 0x62, 0xff, 0xff, 0x76, 0x33, 0x7f, 0x88, 0x7a, - 0x7d, 0x8b, 0x3c, 0xf8, 0x12, 0xc5, 0xcd, 0xf5, 0x8b, 0xa3, 0x7e, 0xf1, - 0x62, 0xf1, 0x31, 0xd6, 0x2f, 0xfc, 0xdd, 0x75, 0x01, 0x6c, 0x67, 0xb1, - 0x62, 0xfe, 0x35, 0xa2, 0x27, 0x3a, 0xc5, 0x8e, 0xb1, 0x7f, 0xff, 0xf6, - 0x77, 0x45, 0x3f, 0xcf, 0x14, 0xc4, 0x66, 0x16, 0x75, 0x07, 0xe2, 0xc5, - 0xff, 0xfd, 0xf6, 0x88, 0xe2, 0x26, 0x37, 0x99, 0xbf, 0xc5, 0x1e, 0xb1, - 0x52, 0x8e, 0xa0, 0x09, 0x71, 0xda, 0x89, 0x34, 0x8f, 0x46, 0x33, 0x7f, - 0xfe, 0x2f, 0x70, 0xce, 0xbd, 0x9b, 0x4f, 0x1f, 0x58, 0xb1, 0x52, 0x88, - 0x11, 0x14, 0xde, 0x86, 0xd2, 0xb1, 0x7d, 0xee, 0x75, 0x05, 0x8b, 0x4a, - 0xc5, 0x18, 0x7a, 0x98, 0x3c, 0x02, 0x5b, 0x44, 0xb1, 0x7d, 0xf7, 0xd4, - 0x4b, 0x14, 0x61, 0xb7, 0x88, 0x4e, 0xfe, 0x2c, 0x1e, 0x3f, 0xd6, 0x2b, - 0xe7, 0x9f, 0xc2, 0x3b, 0xb3, 0x8b, 0x17, 0x85, 0x84, 0xb1, 0x7f, 0xfe, - 0xea, 0x1c, 0x33, 0x05, 0xdf, 0xbf, 0xd8, 0xb3, 0xb2, 0xc5, 0xff, 0x67, - 0x50, 0xe3, 0x4f, 0x50, 0x58, 0xbf, 0xfe, 0xe6, 0x36, 0x8c, 0x9f, 0x8b, - 0xc4, 0xc6, 0xac, 0x51, 0xd1, 0x19, 0xc3, 0xbb, 0xff, 0xfc, 0x69, 0x99, - 0x07, 0xec, 0x59, 0xcf, 0xe3, 0x8f, 0x0e, 0xb1, 0x5b, 0xa7, 0x47, 0xa1, - 0x73, 0x8e, 0x7e, 0x1d, 0x44, 0x47, 0x7f, 0xed, 0x45, 0xc9, 0xd3, 0x41, - 0xfe, 0xb1, 0x70, 0x7b, 0x2c, 0x56, 0x2a, 0x6f, 0x78, 0xf1, 0x59, 0x40, - 0x90, 0x2f, 0x49, 0x6c, 0xb1, 0x52, 0xbe, 0x0d, 0x01, 0x81, 0x96, 0xe3, - 0x3f, 0x42, 0xee, 0x45, 0xa1, 0xcf, 0xca, 0x0d, 0x27, 0x6f, 0x4b, 0x24, - 0xec, 0x83, 0x51, 0xbc, 0xa2, 0x3f, 0x8e, 0xf2, 0x39, 0xae, 0xf6, 0x52, - 0x94, 0x69, 0x1a, 0x0c, 0x6d, 0x3e, 0x13, 0xdf, 0x71, 0xab, 0xf7, 0xc8, - 0x5d, 0x77, 0xd6, 0x31, 0x48, 0xd5, 0x0b, 0xc8, 0xd6, 0x5b, 0x35, 0xa3, - 0xe6, 0xd3, 0xdf, 0x10, 0xa4, 0x11, 0x8e, 0xb3, 0x1f, 0xcb, 0x7c, 0xbe, - 0x6d, 0x23, 0x33, 0x7a, 0xf5, 0xa3, 0xaa, 0xcc, 0x51, 0xe9, 0x90, 0xf1, - 0x56, 0x35, 0x7a, 0xaf, 0xbf, 0xcf, 0x58, 0xf4, 0xfe, 0xf0, 0xf4, 0x5a, - 0x9c, 0xf0, 0x0a, 0x5f, 0x0f, 0x7f, 0x1d, 0x71, 0x5b, 0x16, 0x4e, 0x5a, - 0xda, 0xef, 0x5a, 0xd9, 0x11, 0x4f, 0xe7, 0xf6, 0x9c, 0xf9, 0x0a, 0x3d, - 0xa8, 0xea, 0x47, 0xd8, 0x74, 0x9b, 0x9e, 0xe9, 0xfc, 0x4b, 0xf7, 0xa4, - 0x9c, 0x0b, 0x17, 0xec, 0x19, 0x4e, 0xeb, 0x17, 0x8b, 0xd1, 0x98, 0x79, - 0xff, 0x27, 0xbf, 0xf7, 0xcb, 0x3b, 0x38, 0xf5, 0x27, 0x58, 0xbf, 0xfb, - 0xda, 0x9c, 0xea, 0x36, 0x1b, 0x31, 0xab, 0x17, 0x85, 0xbc, 0x64, 0xa2, - 0x2f, 0xa4, 0x0a, 0x8c, 0x5c, 0x85, 0x99, 0x71, 0x8f, 0x0c, 0x0b, 0xfd, - 0x1e, 0xcf, 0xee, 0x39, 0x2c, 0x5f, 0xe1, 0x34, 0x7e, 0x00, 0x0c, 0xb1, - 0x7e, 0xd6, 0xec, 0xdb, 0xaa, 0x49, 0xd2, 0xec, 0xe9, 0x62, 0xfe, 0x89, - 0xc2, 0x17, 0xbc, 0xb1, 0x7e, 0xc2, 0xdf, 0x25, 0x62, 0xdf, 0x58, 0xbf, - 0xf8, 0x44, 0xe5, 0x3f, 0x73, 0xe7, 0x16, 0x2b, 0x87, 0xa8, 0x21, 0x2b, - 0xb4, 0x75, 0x8b, 0xff, 0x88, 0x62, 0x1e, 0xa7, 0xef, 0x84, 0xb1, 0x7f, - 0xcd, 0xce, 0x61, 0xac, 0x40, 0x58, 0xa9, 0x3f, 0xc2, 0x43, 0xbc, 0x4c, - 0x6a, 0xc5, 0x9d, 0x62, 0xb0, 0xd7, 0x1a, 0x3b, 0x52, 0xaa, 0x2c, 0x66, - 0xb8, 0x6d, 0xd1, 0xbb, 0x8c, 0x68, 0xc4, 0xef, 0x60, 0x22, 0xe4, 0x25, - 0x23, 0x93, 0xaf, 0xb3, 0x3e, 0xeb, 0x17, 0xee, 0xbd, 0xe9, 0x3a, 0xc5, - 0xd1, 0x32, 0xc5, 0xf7, 0x98, 0x8d, 0x58, 0xa9, 0x37, 0x7d, 0x0c, 0x5f, - 0x1a, 0xd0, 0x8c, 0x1a, 0x29, 0xdc, 0x84, 0x36, 0x5a, 0x8c, 0x4e, 0x14, - 0xd8, 0xce, 0xaf, 0xff, 0xd0, 0x8c, 0xc8, 0x7f, 0x1e, 0x1c, 0x9f, 0x48, - 0xd6, 0x2f, 0x40, 0x5a, 0x58, 0xbf, 0x78, 0x5f, 0x93, 0xac, 0x5f, 0xd3, - 0x84, 0x66, 0x6c, 0xb1, 0x7b, 0xa6, 0xd9, 0x62, 0xec, 0xe2, 0xc5, 0x49, - 0xb6, 0xc1, 0xfb, 0xed, 0xb6, 0x9e, 0x96, 0x2f, 0xe6, 0xdb, 0xdc, 0x60, - 0x2c, 0x5d, 0xa8, 0xcc, 0x4c, 0x7f, 0xa1, 0xed, 0x14, 0xfd, 0x91, 0x87, - 0xe3, 0x89, 0xaa, 0x53, 0xe0, 0x78, 0xdd, 0xef, 0xda, 0xdd, 0x9b, 0x75, - 0x49, 0x46, 0x5f, 0xf9, 0xa1, 0x19, 0x9a, 0xdd, 0x9b, 0x75, 0x48, 0xd0, - 0x5f, 0xfe, 0x2c, 0x8a, 0x0d, 0xa8, 0x16, 0x76, 0x65, 0x8b, 0xd3, 0x9d, - 0x2c, 0x5e, 0x6d, 0xa5, 0x62, 0x88, 0xdd, 0x08, 0x76, 0xb1, 0x32, 0xc3, - 0x9b, 0xf1, 0x43, 0xd0, 0x85, 0xbf, 0xc1, 0xb7, 0x68, 0xcf, 0x3e, 0xcb, - 0x15, 0x18, 0x7f, 0xb2, 0x85, 0x7f, 0xfe, 0xcf, 0xfd, 0xa0, 0x16, 0x3f, - 0x62, 0x69, 0xe2, 0xc5, 0xff, 0xbe, 0x2f, 0xb3, 0xf5, 0xc9, 0x35, 0x62, - 0xde, 0x82, 0x25, 0xdd, 0x5a, 0xff, 0x4e, 0x83, 0x26, 0xf7, 0x16, 0x2b, - 0x0f, 0x73, 0xe5, 0x17, 0xe1, 0x79, 0x82, 0xf2, 0xc5, 0xfb, 0x60, 0xf6, - 0x9d, 0x96, 0x2f, 0xb7, 0x66, 0xdd, 0x52, 0x57, 0x95, 0xb2, 0x22, 0x30, - 0xab, 0x45, 0xb7, 0xfe, 0xde, 0x7d, 0x09, 0x39, 0x34, 0x16, 0x2f, 0xfb, - 0x93, 0x0f, 0xc8, 0x4c, 0x4b, 0x16, 0x7d, 0xcf, 0xe3, 0xc7, 0xf7, 0xfe, - 0xd6, 0xdc, 0x9d, 0xc9, 0x8f, 0xc5, 0x8a, 0xf9, 0xf4, 0xb1, 0x45, 0xff, - 0xde, 0x06, 0x0f, 0xf8, 0x31, 0xbf, 0x4b, 0x17, 0xee, 0xd2, 0x5f, 0x12, - 0xc5, 0xff, 0x9b, 0xa8, 0x73, 0x37, 0x1e, 0x74, 0xb1, 0x58, 0x7d, 0x8c, - 0x55, 0x63, 0x56, 0x2f, 0xe7, 0x18, 0xe7, 0x52, 0xb1, 0x73, 0x12, 0xc5, - 0xd2, 0x6a, 0xc5, 0xf4, 0x7e, 0x78, 0x96, 0x2f, 0xdc, 0x26, 0x9e, 0x2c, - 0x5f, 0xfe, 0xfb, 0x40, 0x2c, 0x7e, 0xc4, 0xd3, 0xc5, 0x8b, 0xff, 0xfc, - 0xe3, 0x3b, 0x31, 0x6e, 0x3f, 0xce, 0x0d, 0xcb, 0x65, 0x8b, 0x67, 0xd1, - 0x56, 0x49, 0x75, 0x28, 0xf9, 0x84, 0x34, 0xaf, 0xfb, 0xd9, 0xd7, 0xb3, - 0x08, 0xd5, 0x8b, 0xff, 0xcf, 0xd8, 0x73, 0x9d, 0x7d, 0xf5, 0x27, 0x58, - 0xbf, 0xf7, 0xe2, 0x6f, 0x7b, 0xad, 0xdc, 0x96, 0x2b, 0x11, 0x1c, 0xc9, - 0x97, 0xec, 0xff, 0xf2, 0x25, 0x8b, 0xff, 0xf0, 0x08, 0x47, 0x0c, 0x63, - 0x90, 0x1e, 0x73, 0xcb, 0x17, 0xf3, 0x7b, 0x99, 0xd7, 0x96, 0x28, 0x68, - 0xaf, 0xe8, 0xa4, 0x95, 0xed, 0x18, 0x35, 0xe2, 0x8c, 0x85, 0x4e, 0xf1, - 0x88, 0xf4, 0x43, 0xa8, 0x59, 0x1c, 0x83, 0xe2, 0x6c, 0x5b, 0xdf, 0x8b, - 0x10, 0xc7, 0xa3, 0x1e, 0xec, 0x4e, 0x14, 0x32, 0x03, 0x86, 0x85, 0xfb, - 0x5b, 0xb3, 0x6e, 0xa9, 0x2d, 0x8b, 0xfe, 0x84, 0x66, 0x6b, 0x76, 0x6d, - 0xd5, 0x22, 0x09, 0x7d, 0x87, 0x98, 0xf5, 0x8b, 0x46, 0x62, 0x29, 0xd8, - 0xdf, 0x89, 0x77, 0xc7, 0x72, 0x95, 0x8b, 0xf6, 0xb7, 0x66, 0xdd, 0x52, - 0x21, 0x97, 0xf6, 0x85, 0xda, 0x42, 0x3a, 0xc5, 0xfc, 0x59, 0xcf, 0x42, - 0x56, 0x2f, 0x34, 0x23, 0x25, 0x16, 0xf8, 0x42, 0xe6, 0xfd, 0x8c, 0xaf, - 0xfe, 0xec, 0xfe, 0x9f, 0x96, 0x7b, 0x52, 0xb1, 0x7f, 0x8e, 0x66, 0x69, - 0xbd, 0xc5, 0x8b, 0xb6, 0x8c, 0xc3, 0xfa, 0x0d, 0x16, 0xa3, 0x11, 0xf8, - 0xf0, 0xca, 0xbf, 0xbc, 0xe3, 0xc2, 0x89, 0x62, 0xf6, 0x76, 0xc5, 0x8a, - 0xc3, 0xcc, 0x22, 0xeb, 0xfc, 0x42, 0xe4, 0xe6, 0x80, 0xb1, 0x78, 0xdc, - 0x8f, 0x58, 0xbc, 0xc6, 0xc6, 0x61, 0xea, 0x1a, 0x67, 0x6e, 0x46, 0x22, - 0xac, 0x9d, 0x2f, 0x33, 0x6e, 0xb9, 0x40, 0xca, 0x93, 0xd5, 0xdc, 0xae, - 0xfd, 0x1a, 0xfb, 0xcd, 0xb6, 0xd9, 0x62, 0xdb, 0xac, 0x5f, 0x8f, 0xd4, - 0x30, 0xeb, 0x16, 0x8f, 0x58, 0xa8, 0xd6, 0x88, 0xac, 0x38, 0x88, 0x4f, - 0xe5, 0x57, 0x05, 0xe5, 0x8b, 0xdc, 0x73, 0x56, 0x28, 0x66, 0xdf, 0xa1, - 0x9b, 0xa3, 0x4d, 0x96, 0x2f, 0xfb, 0xf3, 0xee, 0x77, 0x9c, 0x8d, 0x09, - 0x62, 0xa3, 0x73, 0xe2, 0x80, 0xf5, 0xfd, 0x25, 0xef, 0xe4, 0x16, 0x2f, - 0x7b, 0x3b, 0x96, 0x2b, 0x47, 0x9b, 0xe2, 0xdb, 0x12, 0xc5, 0xee, 0xfa, - 0x47, 0x46, 0xeb, 0x17, 0xa6, 0x3a, 0x37, 0x58, 0xae, 0xfa, 0x1e, 0x9c, - 0x97, 0x59, 0xd6, 0x2b, 0xbc, 0x44, 0xf7, 0x7d, 0xb2, 0x46, 0xb2, 0x9b, - 0xff, 0xd1, 0xae, 0x35, 0xf7, 0x9f, 0x93, 0x93, 0x7d, 0xf4, 0xb1, 0x6e, - 0x96, 0x2e, 0x28, 0x2c, 0x5e, 0xf6, 0x01, 0x62, 0xc4, 0xb1, 0x7c, 0x21, - 0xb4, 0x7a, 0xc5, 0x39, 0xb7, 0xe0, 0x8d, 0xe1, 0x7b, 0x16, 0x2e, 0x98, - 0x96, 0x2f, 0xe3, 0xe6, 0xe4, 0xd1, 0xeb, 0x17, 0xb1, 0xf6, 0x58, 0xb0, - 0x6b, 0x15, 0x87, 0xc3, 0xa3, 0x11, 0x0e, 0xd8, 0x6b, 0x17, 0x87, 0x3e, - 0x58, 0x62, 0xca, 0xc7, 0x58, 0xb9, 0xfb, 0x2c, 0x54, 0x9e, 0xb3, 0x95, - 0xf8, 0x4a, 0xf7, 0x61, 0x41, 0x62, 0xf7, 0xf3, 0x8b, 0x16, 0x65, 0x8a, - 0x19, 0xae, 0xf0, 0xed, 0xec, 0x3c, 0xac, 0x50, 0xd5, 0x41, 0x60, 0x9c, - 0x78, 0xbc, 0x4a, 0x9a, 0x20, 0xf8, 0xef, 0x1e, 0x7d, 0x09, 0x6e, 0xc5, - 0xa1, 0xa7, 0x77, 0x10, 0xdf, 0x67, 0x50, 0xf2, 0xc5, 0xfc, 0x53, 0xd4, - 0x1c, 0x96, 0x2f, 0x71, 0xfb, 0x2c, 0x56, 0xc7, 0xe0, 0x32, 0x4f, 0x16, - 0xd8, 0x96, 0x2f, 0xb0, 0xec, 0x35, 0x8b, 0xf0, 0xe4, 0xb6, 0x8f, 0x58, - 0xbf, 0xd2, 0x68, 0x60, 0x04, 0xf4, 0xb1, 0x52, 0x7c, 0x7b, 0x16, 0x5f, - 0x9b, 0xee, 0x7c, 0x58, 0xac, 0x46, 0xff, 0xc4, 0x4a, 0x10, 0xbd, 0x88, - 0xaf, 0xe0, 0xf2, 0x27, 0x07, 0x16, 0x2f, 0xec, 0xdf, 0xf3, 0x31, 0x2c, - 0x5f, 0xb5, 0xa9, 0xc2, 0x58, 0xb4, 0x72, 0xc5, 0x3a, 0x37, 0x62, 0x42, - 0xf9, 0x83, 0x17, 0x88, 0x9e, 0xf0, 0x58, 0x12, 0xc5, 0xe1, 0xe7, 0xd6, - 0x2b, 0x46, 0xf3, 0xb8, 0x7e, 0xf1, 0x03, 0x8b, 0x17, 0xe6, 0xd8, 0x3c, - 0x89, 0x62, 0xf0, 0x03, 0xd9, 0x62, 0xf8, 0xf9, 0xd7, 0x16, 0x2d, 0xc9, - 0x3c, 0x47, 0x20, 0xbd, 0xac, 0x3a, 0xc5, 0x62, 0x33, 0xc8, 0x77, 0x8d, - 0xfe, 0x26, 0xa5, 0x8b, 0xb3, 0xa5, 0x8a, 0xec, 0x69, 0x23, 0x83, 0x2e, - 0x08, 0x6b, 0x17, 0xb7, 0x28, 0xf5, 0x8b, 0xfe, 0x0b, 0xee, 0xd0, 0xf3, - 0xec, 0xb1, 0x68, 0x2c, 0x53, 0x1e, 0x6f, 0x8e, 0xeb, 0xe8, 0xa8, 0x61, - 0x92, 0x6e, 0xb8, 0x5a, 0x58, 0xbf, 0x84, 0x6e, 0x1e, 0x77, 0x58, 0xbe, - 0xed, 0x33, 0xd2, 0xc5, 0xff, 0x81, 0x9d, 0x70, 0x3d, 0x39, 0xf1, 0x62, - 0xe7, 0x89, 0x62, 0xba, 0x3d, 0x9d, 0x20, 0xdf, 0xb6, 0xdf, 0xef, 0x12, - 0xc5, 0x4a, 0x33, 0x71, 0xf9, 0xc8, 0xef, 0xb6, 0xe7, 0x4e, 0xb1, 0x7f, - 0xfa, 0x7a, 0x83, 0x9c, 0x2c, 0x21, 0xfe, 0x56, 0x2a, 0x57, 0x00, 0x32, - 0x1e, 0x6e, 0xbf, 0xa8, 0x67, 0x1c, 0xbb, 0xe3, 0x05, 0x0f, 0xde, 0x16, - 0x88, 0x96, 0xfc, 0xc3, 0x0e, 0x49, 0x62, 0xff, 0x38, 0xa3, 0xff, 0x39, - 0xb2, 0xc5, 0xff, 0xb5, 0xe0, 0xc9, 0xb7, 0xc2, 0xdd, 0x62, 0xe6, 0xf2, - 0xc5, 0xcf, 0x1c, 0xb1, 0x51, 0x1b, 0x13, 0x8b, 0xdf, 0x7f, 0x0d, 0x75, - 0x8b, 0xfd, 0x9d, 0xb0, 0xb3, 0xaf, 0x2c, 0x54, 0x9f, 0xd6, 0xe4, 0x5f, - 0x23, 0xba, 0x7b, 0x96, 0x2f, 0xfc, 0x13, 0x43, 0x58, 0xff, 0x91, 0xac, - 0x5b, 0xa5, 0x8b, 0xc5, 0xd7, 0x16, 0x2f, 0x9c, 0x78, 0x4b, 0x15, 0x27, - 0xa4, 0xe2, 0x7c, 0x1e, 0xbf, 0xba, 0xe6, 0x1e, 0x63, 0xd6, 0x2f, 0xf6, - 0xc2, 0xdb, 0xdf, 0x61, 0xac, 0x5e, 0x66, 0xdd, 0x52, 0x62, 0x17, 0x83, - 0xf7, 0x16, 0x2a, 0x51, 0x65, 0xb1, 0x96, 0xe6, 0xfa, 0x2a, 0xbe, 0xd3, - 0x17, 0x96, 0x2c, 0x05, 0x8a, 0xd1, 0xb4, 0xee, 0x22, 0xbe, 0xf9, 0x34, - 0x7a, 0xc5, 0xfd, 0xaf, 0xb7, 0x30, 0x35, 0x8b, 0xbe, 0x25, 0x8b, 0xee, - 0x06, 0x50, 0x58, 0xa1, 0x9b, 0xcf, 0x0c, 0x5e, 0x9d, 0x6c, 0xb1, 0x52, - 0x8c, 0xf7, 0x25, 0x66, 0xb0, 0xc8, 0x6f, 0xdf, 0x6e, 0x4c, 0x7a, 0xc5, - 0xb4, 0xb1, 0x44, 0x6f, 0x44, 0x57, 0x73, 0x84, 0xb1, 0x7f, 0xe8, 0x67, - 0x3d, 0xfc, 0x7d, 0x41, 0x62, 0x9c, 0xf5, 0xc4, 0x31, 0x7f, 0x4c, 0xf4, - 0x76, 0x1a, 0xc5, 0xfe, 0x18, 0x05, 0xee, 0x0a, 0x3d, 0x62, 0xe9, 0xdd, - 0x62, 0xe9, 0xec, 0xb1, 0x7f, 0x61, 0x0b, 0x34, 0x6a, 0xc5, 0xc5, 0x05, - 0x8a, 0x94, 0x57, 0xb9, 0xcf, 0xc6, 0x3c, 0x32, 0x22, 0xeb, 0xfb, 0x98, - 0x46, 0x40, 0x0b, 0x17, 0xf4, 0xe6, 0x80, 0x0f, 0x2c, 0x54, 0x0f, 0x77, - 0x72, 0xfb, 0xfe, 0x72, 0x1e, 0xa6, 0x0d, 0xa5, 0x8b, 0xe9, 0xea, 0x1c, - 0x58, 0xad, 0x97, 0xde, 0xa0, 0x51, 0x86, 0xfb, 0xc3, 0xb3, 0xa2, 0xf7, - 0x1a, 0x8a, 0x12, 0x3a, 0x86, 0xf9, 0xdc, 0xbf, 0x0f, 0x36, 0x78, 0x27, - 0x7e, 0x10, 0xfa, 0x1b, 0xa2, 0x85, 0x2f, 0x62, 0x30, 0x8e, 0x2e, 0xe3, - 0xac, 0x5f, 0x6a, 0x48, 0xd5, 0x8b, 0xef, 0x39, 0x04, 0xb1, 0x7d, 0x11, - 0x3e, 0xcb, 0x16, 0x6c, 0x3c, 0x7e, 0x88, 0xef, 0x42, 0x63, 0xd6, 0x28, - 0x68, 0xc8, 0xc1, 0x73, 0x5a, 0xa2, 0x27, 0xbe, 0x7e, 0x4c, 0x4b, 0x17, - 0xff, 0x7b, 0x36, 0xe4, 0xe9, 0xa0, 0xff, 0x58, 0xad, 0x1f, 0x47, 0x88, - 0xec, 0xeb, 0x16, 0x75, 0x8b, 0x40, 0xd3, 0x44, 0x01, 0x1b, 0xba, 0x8f, - 0x58, 0xbe, 0x8e, 0xcd, 0x4a, 0xc5, 0x08, 0xf0, 0x43, 0x1c, 0xbd, 0x10, - 0xb4, 0xb1, 0x74, 0xf1, 0x62, 0xff, 0x0c, 0xa7, 0xdc, 0x11, 0xd6, 0x2f, - 0x38, 0x89, 0x62, 0xc4, 0xb1, 0x74, 0x92, 0xc5, 0xfd, 0x3c, 0x0f, 0x69, - 0xd9, 0x62, 0x8d, 0x45, 0xfc, 0x42, 0xe7, 0x34, 0x21, 0xce, 0x08, 0x86, - 0x2d, 0x73, 0xe9, 0x62, 0xf3, 0xe0, 0x16, 0x28, 0x66, 0xcc, 0x85, 0xef, - 0xa3, 0xfe, 0x28, 0xf5, 0x8a, 0x94, 0xf5, 0xf0, 0x8d, 0xe1, 0xbc, 0xd0, - 0x8c, 0x11, 0x05, 0xff, 0x0b, 0x62, 0xc1, 0xfc, 0x46, 0xac, 0x54, 0xab, - 0x11, 0x35, 0x13, 0xf2, 0x90, 0x09, 0x46, 0xfb, 0xfc, 0x14, 0xac, 0x5b, - 0x8b, 0x17, 0xff, 0xb3, 0xae, 0x80, 0xde, 0xe3, 0x97, 0x50, 0x58, 0xbf, - 0xc2, 0xdb, 0xa8, 0x7c, 0x5a, 0x58, 0xbf, 0xfa, 0x73, 0x98, 0x43, 0x70, - 0x49, 0x2c, 0x5e, 0x29, 0xd9, 0x62, 0xb1, 0x1e, 0xae, 0x25, 0xf4, 0xd2, - 0x38, 0x12, 0x0d, 0xf7, 0xfa, 0x68, 0xf5, 0x8b, 0x85, 0xa5, 0x8b, 0xda, - 0x93, 0xac, 0x5c, 0x1c, 0xac, 0x54, 0x9b, 0x5c, 0x1d, 0xbf, 0xd2, 0x0d, - 0x6a, 0x4f, 0xc5, 0x8a, 0x95, 0x44, 0xd0, 0x8c, 0x60, 0xe8, 0xec, 0x4f, - 0xc4, 0xdf, 0x0f, 0xdf, 0x0c, 0x3e, 0xf2, 0x0b, 0x17, 0xe0, 0x6f, 0xf7, - 0xef, 0xd6, 0x2f, 0x7f, 0x00, 0xb1, 0x7f, 0x75, 0xcf, 0xcb, 0xf9, 0x62, - 0xe6, 0xf2, 0xc5, 0x39, 0xe3, 0x1c, 0xbe, 0xf3, 0x67, 0xd6, 0x2e, 0x90, - 0x2c, 0x5f, 0x39, 0x48, 0xd6, 0x2a, 0x4f, 0x53, 0xe3, 0x9c, 0x17, 0xbf, - 0xc0, 0x7d, 0x69, 0xfa, 0x02, 0xc5, 0xc2, 0x8e, 0x58, 0xbc, 0x53, 0xb2, - 0xc5, 0xd3, 0xf5, 0x8a, 0x73, 0x69, 0xc1, 0xdb, 0xe9, 0x00, 0x19, 0x62, - 0xff, 0xf6, 0x75, 0x02, 0x17, 0x99, 0xca, 0x46, 0xb1, 0x4e, 0x7d, 0x7e, - 0x22, 0xbf, 0xb8, 0x22, 0xf3, 0xc1, 0x62, 0xfe, 0x39, 0x64, 0xc7, 0xc4, - 0xb1, 0x60, 0x2c, 0x54, 0x9e, 0x1b, 0x98, 0xdd, 0xe8, 0x2c, 0x5e, 0x69, - 0xe9, 0x62, 0xa3, 0x45, 0x6a, 0xb8, 0x55, 0xb9, 0x7e, 0x98, 0xfe, 0xea, - 0x02, 0xe2, 0x35, 0xe2, 0x7f, 0xa1, 0x16, 0x22, 0x18, 0xe7, 0x10, 0xc8, - 0x3b, 0x86, 0x2f, 0xb5, 0x9d, 0x71, 0x62, 0xfb, 0x0f, 0x31, 0xeb, 0x15, - 0xa3, 0xc9, 0xe1, 0x25, 0xe6, 0xf7, 0x16, 0x2f, 0x88, 0x5e, 0xe2, 0xc5, - 0xff, 0xe8, 0x1c, 0xa7, 0x52, 0x3c, 0x8a, 0x7e, 0xb1, 0x5b, 0x1f, 0x6e, - 0x88, 0xe9, 0xd1, 0x5a, 0xd0, 0x8a, 0xbd, 0xbb, 0x71, 0x62, 0xe0, 0xfa, - 0x58, 0xac, 0x37, 0x1f, 0x1e, 0xba, 0x7b, 0x2c, 0x5e, 0x13, 0x71, 0x62, - 0x86, 0x6d, 0xbb, 0x0c, 0xd9, 0xd6, 0x2f, 0xfa, 0x7d, 0xce, 0x7a, 0x7a, - 0x09, 0x62, 0xf3, 0x85, 0xdf, 0xac, 0x5e, 0xfe, 0x6c, 0xb1, 0x67, 0xd1, - 0xe0, 0xfc, 0x8e, 0xdd, 0x2c, 0x54, 0x13, 0x9f, 0xc5, 0xe7, 0x56, 0x88, - 0x8f, 0x42, 0x3f, 0x7d, 0x0c, 0x9e, 0xff, 0xcf, 0xfe, 0xa1, 0x9e, 0xce, - 0xbc, 0xb1, 0x7f, 0xbf, 0x87, 0xc6, 0xd6, 0xcb, 0x15, 0x03, 0xf5, 0x1a, - 0x0d, 0xd1, 0xa1, 0x2c, 0x5f, 0xbd, 0xe6, 0x87, 0x16, 0x2f, 0x66, 0xa5, + 0x16, 0xcd, 0x91, 0x48, 0x34, 0x3b, 0xff, 0xdb, 0xfc, 0x47, 0xef, 0x3e, + 0x5d, 0xc8, 0x4b, 0x17, 0xff, 0xbc, 0x29, 0xcd, 0x8c, 0xe3, 0x93, 0xe9, + 0x62, 0xc1, 0x12, 0x30, 0xf8, 0x52, 0x1a, 0x7d, 0x4a, 0xa2, 0x3c, 0x8f, + 0xb2, 0xfd, 0x25, 0xdb, 0x6c, 0xb1, 0x7f, 0x3e, 0xb3, 0xcd, 0xda, 0xc5, + 0xfd, 0x13, 0x8f, 0x0e, 0xeb, 0x17, 0xff, 0xff, 0x67, 0x39, 0x3a, 0xd4, + 0x96, 0x6d, 0x82, 0xe0, 0xa2, 0x29, 0x3a, 0xc5, 0xff, 0xfb, 0xcf, 0xa7, + 0x84, 0x9a, 0x64, 0xc4, 0xf3, 0x12, 0xc5, 0xfb, 0x79, 0xfc, 0x9f, 0xc8, + 0xca, 0x0d, 0xca, 0xff, 0xff, 0xcf, 0x3e, 0x2c, 0xf7, 0xf0, 0xce, 0xf8, + 0xe6, 0xe7, 0xc5, 0xe5, 0x8a, 0x94, 0xe9, 0xf2, 0x1f, 0x1f, 0x41, 0xbc, + 0x2d, 0x1a, 0xb1, 0x43, 0x54, 0x50, 0x78, 0xf5, 0x63, 0x8d, 0x2f, 0xcc, + 0x00, 0xdb, 0x65, 0x8b, 0xff, 0xff, 0xb6, 0x33, 0xdb, 0x3e, 0x6b, 0x63, + 0x22, 0x83, 0xff, 0x07, 0xde, 0x75, 0x2c, 0x56, 0x23, 0x89, 0xce, 0xc4, + 0x55, 0x79, 0xc1, 0x2b, 0x17, 0xee, 0x31, 0x0b, 0x16, 0x2f, 0xf1, 0x85, + 0x9a, 0x79, 0x3a, 0xc5, 0xff, 0xb4, 0xde, 0xd6, 0x3f, 0xe4, 0x6b, 0x17, + 0xf0, 0xcb, 0x3e, 0xde, 0x58, 0xbf, 0x7b, 0xb8, 0x3e, 0x96, 0x2b, 0x0f, + 0x5f, 0x85, 0xb5, 0xb2, 0x65, 0x90, 0x1c, 0x19, 0x3e, 0x8c, 0xc1, 0x09, + 0x5b, 0x87, 0x2b, 0x17, 0xff, 0x75, 0x7d, 0xa2, 0x30, 0xb3, 0x60, 0xe0, + 0xb1, 0x52, 0x7c, 0x78, 0x2f, 0x7f, 0x05, 0x14, 0x0a, 0x40, 0xb1, 0x7b, + 0x4c, 0x1a, 0xc5, 0xfa, 0x7c, 0x77, 0xf2, 0xc5, 0x31, 0xe3, 0x08, 0x7a, + 0xff, 0xc2, 0x9d, 0x8c, 0x92, 0x9d, 0x41, 0x62, 0xf8, 0xbb, 0xc3, 0xac, + 0x56, 0xc8, 0x84, 0x39, 0x08, 0x48, 0x17, 0xfe, 0x93, 0x7a, 0x85, 0x85, + 0x10, 0x67, 0x58, 0xbf, 0xe0, 0xb3, 0x43, 0x7c, 0xf7, 0x16, 0x2f, 0xff, + 0x0b, 0x86, 0x7d, 0x9c, 0x9f, 0x50, 0x8e, 0x58, 0xbd, 0xe9, 0x25, 0x8b, + 0xbc, 0x75, 0x8a, 0xc3, 0x69, 0xb8, 0xe5, 0xff, 0xdf, 0xee, 0x1c, 0x30, + 0xb0, 0xfa, 0x12, 0xc5, 0xb0, 0xc3, 0xe9, 0xc2, 0x1b, 0x00, 0x09, 0x89, + 0x72, 0x1d, 0x77, 0xfd, 0xf1, 0x1f, 0x37, 0xc7, 0xe2, 0xc5, 0xff, 0xfd, + 0xf1, 0x75, 0x3e, 0x76, 0x61, 0x66, 0xb7, 0xc7, 0xea, 0x58, 0xbf, 0x7e, + 0x48, 0xd3, 0x06, 0x89, 0xdd, 0xce, 0xaf, 0xff, 0xff, 0x3e, 0x13, 0x7b, + 0xf3, 0x11, 0x85, 0x9f, 0x7f, 0x70, 0x5b, 0x8a, 0x56, 0x2f, 0x02, 0x4e, + 0xb1, 0x6c, 0x31, 0x12, 0xb1, 0xb3, 0xc5, 0x8d, 0x89, 0x30, 0x52, 0x86, + 0xbd, 0x4a, 0xe5, 0xf6, 0x43, 0xeb, 0xb3, 0x27, 0x45, 0x68, 0xd3, 0x05, + 0x1e, 0x8d, 0xfb, 0xf9, 0xe9, 0x1a, 0xc5, 0xff, 0xee, 0xbc, 0xc9, 0xfb, + 0xfb, 0x8e, 0x5d, 0xc1, 0x62, 0xb4, 0x7f, 0x22, 0x28, 0xbf, 0xfc, 0xc6, + 0xe1, 0x0b, 0xdf, 0xce, 0x83, 0x95, 0x8b, 0xff, 0x7b, 0x1f, 0x6c, 0xdd, + 0xe2, 0xe2, 0xc5, 0xff, 0xd9, 0xe2, 0x9d, 0xcc, 0xe0, 0xa7, 0xb5, 0x8a, + 0xc4, 0x44, 0x7d, 0x06, 0xee, 0xb7, 0xac, 0x58, 0xbf, 0xf6, 0x60, 0x38, + 0x66, 0xb8, 0x3e, 0x2c, 0x5f, 0xed, 0x66, 0xff, 0x7d, 0x44, 0xb1, 0x7f, + 0x67, 0x32, 0x48, 0xd5, 0x8a, 0x31, 0x1d, 0x11, 0xa1, 0x10, 0xc8, 0xb1, + 0x07, 0xe6, 0xd7, 0xff, 0xdf, 0x73, 0x32, 0x2e, 0xe1, 0xcf, 0x7f, 0x3b, + 0x58, 0xbf, 0xff, 0x86, 0x4d, 0xff, 0xf7, 0x3d, 0x45, 0x27, 0x30, 0xfd, + 0x7a, 0xc5, 0x12, 0xac, 0x5f, 0x47, 0x79, 0xd1, 0x3c, 0x25, 0x5b, 0xef, + 0x68, 0x47, 0x58, 0xbf, 0xff, 0xd8, 0x73, 0xbf, 0x66, 0x1a, 0x6e, 0x17, + 0x8d, 0x14, 0xe9, 0x62, 0xdb, 0xba, 0x22, 0xb4, 0x49, 0x70, 0x89, 0x62, + 0xff, 0x34, 0x79, 0x9d, 0xc2, 0x4d, 0x58, 0xbd, 0x3f, 0x2e, 0xcf, 0x44, + 0x42, 0xf5, 0x88, 0xad, 0xd3, 0xd5, 0xff, 0xef, 0x8a, 0x23, 0x0b, 0x3b, + 0x87, 0x1c, 0xd5, 0x8b, 0xff, 0xff, 0xe7, 0xd6, 0x9c, 0x27, 0xc2, 0x37, + 0x98, 0x3f, 0x8b, 0x63, 0x1a, 0x2c, 0x65, 0x8b, 0xe7, 0x1f, 0xf0, 0x68, + 0xcf, 0xdd, 0x3e, 0xff, 0xa2, 0x33, 0xdc, 0x73, 0x24, 0x6b, 0x15, 0x87, + 0xee, 0x23, 0xab, 0xd2, 0x0e, 0x2c, 0x5d, 0x21, 0x2c, 0x54, 0x0d, 0xa9, + 0x0e, 0xdd, 0x91, 0xcb, 0x17, 0xf8, 0xcf, 0xcb, 0xed, 0x83, 0x58, 0xb7, + 0x78, 0x7d, 0xe4, 0x41, 0xd0, 0x6a, 0xff, 0x08, 0x2e, 0x45, 0xa6, 0xe8, + 0xb1, 0x52, 0xbe, 0x03, 0x92, 0xb9, 0xde, 0x37, 0xef, 0xc6, 0xd0, 0xd0, + 0xc5, 0x23, 0x6b, 0xf9, 0xfe, 0xe7, 0x61, 0xac, 0x52, 0xc5, 0x81, 0x03, + 0x72, 0x32, 0xdb, 0xff, 0xee, 0x44, 0x58, 0x17, 0xf3, 0xab, 0xd2, 0x0e, + 0x2c, 0x51, 0x1f, 0xe7, 0x89, 0xef, 0x9b, 0xa3, 0xe9, 0x62, 0xf4, 0x09, + 0xd6, 0x2b, 0x47, 0x80, 0x72, 0x4a, 0x94, 0x41, 0xe3, 0x0d, 0xfd, 0xf6, + 0x2f, 0x61, 0xd6, 0x2f, 0x39, 0x79, 0x62, 0xfe, 0x87, 0x18, 0xe2, 0xe2, + 0xc5, 0xc0, 0x65, 0x8b, 0xff, 0xff, 0x7b, 0x9f, 0x73, 0x0b, 0x05, 0x3d, + 0xff, 0x00, 0xdd, 0xc3, 0x8b, 0x15, 0x28, 0x86, 0x71, 0x7a, 0x94, 0xc7, + 0xf6, 0x2d, 0x61, 0xcf, 0x42, 0xd6, 0xe6, 0x82, 0xc5, 0x9d, 0x62, 0xec, + 0xff, 0xcd, 0x44, 0x70, 0xbd, 0xe9, 0x23, 0x56, 0x2f, 0xf4, 0x79, 0x99, + 0xd5, 0xf9, 0xf2, 0xc5, 0xf6, 0xb6, 0xcd, 0xd6, 0x2b, 0x0f, 0x81, 0xce, + 0xeb, 0xe8, 0x9d, 0xf3, 0xed, 0x4b, 0xb0, 0x5d, 0xd9, 0xf8, 0x72, 0xcb, + 0x32, 0x73, 0x88, 0xd9, 0x77, 0x3b, 0xc2, 0x7b, 0xb9, 0x68, 0x6f, 0x3c, + 0xcd, 0x14, 0x64, 0x9a, 0x94, 0x8a, 0x72, 0x9f, 0xcb, 0x33, 0x68, 0xd6, + 0x81, 0x0b, 0x42, 0x9c, 0xde, 0xe4, 0xff, 0x17, 0xa3, 0xa5, 0x14, 0x68, + 0x11, 0xcd, 0x5d, 0x50, 0xcc, 0xbf, 0x67, 0xb8, 0xdd, 0xac, 0x5f, 0xd2, + 0x73, 0x75, 0x9c, 0x58, 0xbf, 0xfa, 0x42, 0x19, 0x4f, 0x71, 0xb6, 0xb5, + 0x2b, 0x14, 0x33, 0xfa, 0x22, 0xfb, 0xfe, 0x2c, 0x0b, 0xab, 0xab, 0xd9, + 0xf5, 0x8b, 0xfc, 0x4c, 0x6e, 0x61, 0x1a, 0xb1, 0x76, 0xf8, 0xb1, 0x43, + 0x4d, 0x3f, 0x21, 0x47, 0xb9, 0x09, 0xd0, 0x18, 0xce, 0x96, 0x2f, 0xfe, + 0x33, 0x22, 0xee, 0x1c, 0xf7, 0xf3, 0xb5, 0x8b, 0xfe, 0x7c, 0xec, 0x8c, + 0xe6, 0x12, 0xc5, 0xef, 0xbe, 0x96, 0x2b, 0xe7, 0xad, 0xd4, 0x73, 0x7f, + 0xa1, 0x23, 0x30, 0x6f, 0x12, 0xc5, 0xff, 0x19, 0xe2, 0xc0, 0xb1, 0xf8, + 0xb1, 0x7f, 0xa4, 0xb7, 0x33, 0xa7, 0x02, 0x58, 0xbf, 0xfe, 0xd3, 0x99, + 0xf9, 0xd0, 0x3c, 0x39, 0xf7, 0x16, 0x2d, 0x86, 0xa2, 0x2c, 0xe7, 0x37, + 0xff, 0xfe, 0xf3, 0x44, 0x59, 0xb3, 0x18, 0x5d, 0xe0, 0x45, 0x82, 0xc3, + 0x56, 0x2a, 0x37, 0x54, 0xc9, 0xb0, 0x66, 0xf0, 0xa0, 0xec, 0x96, 0x23, + 0x6f, 0xc3, 0x17, 0xa8, 0xa6, 0xff, 0xc6, 0xb7, 0x65, 0x9e, 0xfb, 0xf6, + 0xb1, 0x6f, 0x2c, 0x5e, 0x10, 0xe5, 0x62, 0xa4, 0xd7, 0xe0, 0x95, 0xef, + 0xc8, 0x16, 0x2f, 0xf7, 0xdc, 0x13, 0xe7, 0xe8, 0xb1, 0x7e, 0x87, 0x3d, + 0x3b, 0x2c, 0x5f, 0x43, 0x82, 0x89, 0x62, 0xfc, 0xf2, 0x14, 0xc4, 0xb1, + 0x5d, 0x9e, 0x73, 0x92, 0xdf, 0xec, 0x3b, 0x6d, 0xf1, 0x6c, 0xb1, 0x78, + 0xa4, 0x0b, 0x17, 0xde, 0x62, 0x02, 0xc5, 0xff, 0xf9, 0x8d, 0x34, 0x0d, + 0x17, 0x51, 0x48, 0x5d, 0xc3, 0x8b, 0x14, 0xc8, 0x80, 0x22, 0x2a, 0xf2, + 0x2f, 0x43, 0x84, 0xe5, 0xe8, 0x19, 0xd6, 0xac, 0x5e, 0x37, 0x38, 0xb1, + 0x78, 0x58, 0x35, 0x8b, 0x8a, 0x25, 0x8b, 0xe6, 0x8f, 0x90, 0x2c, 0x54, + 0x6c, 0xbc, 0xc5, 0x32, 0xac, 0xf6, 0x7c, 0x1b, 0x86, 0x0f, 0xee, 0x3b, + 0xd9, 0xac, 0x4f, 0x1f, 0x22, 0x68, 0x79, 0x80, 0xa4, 0x89, 0x38, 0x3c, + 0x21, 0xd0, 0x86, 0x2f, 0x73, 0xce, 0xb1, 0x4b, 0x17, 0xfa, 0x13, 0xb7, + 0x3e, 0xc3, 0x58, 0xbf, 0xc5, 0x81, 0x78, 0xd6, 0xe2, 0xc5, 0xd8, 0x67, + 0x67, 0xd5, 0x11, 0xad, 0xe9, 0x6d, 0x2c, 0x5f, 0x8f, 0x3f, 0x6f, 0xac, + 0x5e, 0x68, 0x62, 0xc5, 0x0c, 0xf8, 0x30, 0x73, 0x85, 0x16, 0xd2, 0xc5, + 0xf7, 0x27, 0x5c, 0x58, 0xa5, 0x8b, 0xfb, 0xcf, 0xd2, 0x4b, 0x75, 0x8a, + 0xc3, 0xf1, 0xec, 0x4a, 0x22, 0x30, 0xc3, 0x2d, 0x05, 0x8b, 0x98, 0xd5, + 0x8b, 0xd3, 0x9a, 0x58, 0xa3, 0x11, 0x09, 0xb1, 0xf3, 0x09, 0x10, 0xc5, + 0xef, 0xb9, 0xab, 0x17, 0x4e, 0x2c, 0x51, 0x89, 0xca, 0x0e, 0x32, 0x33, + 0x4f, 0x74, 0x3d, 0x7f, 0xfa, 0x05, 0x26, 0x1c, 0xa4, 0xdf, 0x3e, 0xcb, + 0x17, 0xfe, 0xf9, 0x67, 0xb5, 0x26, 0x70, 0xeb, 0x17, 0xf4, 0x99, 0x1f, + 0x8c, 0x6a, 0xc5, 0x49, 0xf9, 0x44, 0x81, 0x5d, 0xa3, 0x83, 0xd0, 0xbe, + 0xbe, 0x32, 0x61, 0xa5, 0x8b, 0xf7, 0x06, 0x59, 0xda, 0xc5, 0xda, 0x3a, + 0xc5, 0x61, 0xe0, 0xf0, 0xa6, 0xff, 0xe3, 0x3d, 0xac, 0x0b, 0x36, 0x2c, + 0x09, 0x62, 0x8c, 0x5c, 0xd4, 0x91, 0xd1, 0xbb, 0x64, 0xa2, 0x47, 0x8c, + 0x98, 0x05, 0x24, 0xcb, 0xe2, 0x1b, 0xa4, 0x0b, 0x17, 0xed, 0x18, 0x5d, + 0x02, 0x58, 0xbf, 0xff, 0x1a, 0x08, 0xb8, 0x67, 0x8f, 0x3f, 0xc2, 0xef, + 0x16, 0x2e, 0x8b, 0x4b, 0x17, 0xc6, 0xc7, 0x0b, 0xcb, 0x16, 0xe2, 0xc5, + 0xe6, 0x04, 0xac, 0x56, 0x8f, 0x58, 0xe5, 0x1f, 0x12, 0xb9, 0xb4, 0xb1, + 0x79, 0xa2, 0x95, 0x8b, 0xdf, 0xcd, 0x2c, 0x51, 0x89, 0xc6, 0xc8, 0xbc, + 0x0b, 0x7e, 0xb4, 0xcd, 0xfe, 0x2f, 0x08, 0x5f, 0xa8, 0x76, 0xfe, 0xda, + 0x28, 0x46, 0xda, 0xd9, 0x62, 0xf8, 0x32, 0xce, 0x8b, 0x17, 0xce, 0x3c, + 0x1a, 0xc5, 0x76, 0x78, 0xe7, 0x25, 0xb4, 0x4b, 0x17, 0xc0, 0xf3, 0x0d, + 0x62, 0xe9, 0x3a, 0xc5, 0xbc, 0xb1, 0x5a, 0x35, 0x2c, 0x2f, 0x43, 0x3f, + 0xfd, 0x09, 0xfd, 0x32, 0xfa, 0x46, 0xd0, 0x58, 0xbf, 0x8b, 0x69, 0x3b, + 0x79, 0x62, 0xec, 0xe2, 0xc5, 0x49, 0xe2, 0xf8, 0xba, 0xf3, 0x11, 0xab, + 0x17, 0xfe, 0xc6, 0xec, 0x11, 0x42, 0x75, 0xb2, 0xc5, 0xed, 0x4c, 0x4b, + 0x17, 0x08, 0x25, 0x8b, 0x9b, 0xb5, 0x8a, 0xc3, 0x63, 0xc1, 0x9a, 0xd9, + 0x35, 0x63, 0x59, 0xce, 0x43, 0xf1, 0xd6, 0x42, 0xf2, 0x7d, 0xf4, 0x18, + 0xa3, 0x96, 0x2f, 0x67, 0x60, 0x58, 0xbe, 0xfe, 0x01, 0x96, 0x2c, 0xcb, + 0x14, 0x61, 0xb3, 0x88, 0x8a, 0xe8, 0x6c, 0xb1, 0x7b, 0xd3, 0x05, 0x8b, + 0xec, 0x89, 0xf4, 0xb1, 0x7f, 0x7d, 0xbb, 0x00, 0x67, 0x58, 0xbe, 0xcf, + 0x61, 0xd6, 0x2d, 0x2b, 0x17, 0xfb, 0x8c, 0x0c, 0x16, 0xb6, 0x58, 0xbe, + 0x8a, 0x7c, 0xcb, 0x14, 0x62, 0x3f, 0x24, 0x77, 0x08, 0xd8, 0xc4, 0x04, + 0x5e, 0x11, 0x11, 0xad, 0xff, 0xf6, 0x49, 0x02, 0x5f, 0xdf, 0xc3, 0xe0, + 0xd6, 0x2e, 0x9d, 0x2c, 0x5e, 0xf4, 0x19, 0x62, 0xe1, 0x6c, 0xb1, 0x5b, + 0x1e, 0x6b, 0x0b, 0x86, 0x3b, 0x76, 0x71, 0x62, 0xe9, 0x35, 0x62, 0xb6, + 0x4d, 0x6e, 0x0c, 0x46, 0xc2, 0x68, 0xe6, 0x1e, 0x17, 0xbd, 0xec, 0xd9, + 0x62, 0xfc, 0xe5, 0xb0, 0x7d, 0xac, 0x5c, 0xc1, 0x49, 0xe4, 0x8c, 0x7a, + 0xfd, 0xfc, 0x2e, 0xc4, 0xb1, 0x7e, 0xe0, 0x8c, 0xc0, 0x96, 0x2f, 0xc2, + 0x23, 0x30, 0x25, 0x8a, 0xc3, 0xd5, 0xf9, 0x5d, 0xe8, 0x14, 0xac, 0x5c, + 0xfa, 0x30, 0xde, 0xf6, 0x43, 0x7e, 0x9f, 0x41, 0xfc, 0xb1, 0x7f, 0x7e, + 0x7b, 0x86, 0x79, 0x62, 0xa0, 0x7a, 0xe3, 0x28, 0xad, 0x26, 0xc5, 0xf8, + 0x5d, 0xfa, 0x10, 0xb7, 0xfd, 0xb6, 0xb2, 0x28, 0x39, 0x1a, 0xb1, 0x7f, + 0xd2, 0x5e, 0xd3, 0xf4, 0xc1, 0xac, 0x53, 0x1f, 0xb4, 0x71, 0xe5, 0xcd, + 0xe5, 0x8b, 0xb3, 0xcb, 0x16, 0x89, 0x62, 0xb6, 0x3c, 0x1f, 0x8b, 0x90, + 0xbd, 0x46, 0xec, 0x97, 0x79, 0x7f, 0xc8, 0x51, 0x3c, 0x70, 0xb1, 0x2c, + 0xe8, 0x94, 0xea, 0x3f, 0x23, 0x69, 0x4e, 0x05, 0x09, 0xb1, 0x47, 0x1f, + 0x1d, 0x0b, 0x10, 0xd9, 0x6f, 0xff, 0xfb, 0x7f, 0xbf, 0xc5, 0xe3, 0x30, + 0x6f, 0xce, 0xfc, 0x26, 0xe2, 0xc5, 0xf8, 0x4d, 0xe0, 0x32, 0xc5, 0x18, + 0x89, 0x3f, 0x35, 0xdf, 0xf8, 0x19, 0xa6, 0x23, 0x00, 0x46, 0xac, 0x5c, + 0x2c, 0x58, 0xbf, 0xb2, 0x04, 0x26, 0xe2, 0xc5, 0x0d, 0x15, 0x1a, 0x24, + 0x02, 0x00, 0x42, 0xf7, 0xfb, 0x6f, 0xbe, 0x7b, 0x8e, 0xb1, 0x4b, 0x15, + 0x27, 0x81, 0xc3, 0x4b, 0xc6, 0x4c, 0x16, 0x2f, 0x7d, 0xf4, 0xb1, 0x7f, + 0x10, 0xb9, 0xae, 0x71, 0x62, 0xf6, 0x77, 0x05, 0x8a, 0x89, 0x11, 0x1a, + 0x1e, 0xe8, 0x3a, 0x11, 0x7d, 0xef, 0x70, 0xd5, 0x8b, 0xf9, 0xb5, 0x22, + 0xeb, 0xe5, 0x62, 0xfd, 0xd8, 0x4c, 0x40, 0x58, 0xbf, 0xf3, 0x96, 0x0f, + 0x42, 0xee, 0x1c, 0x58, 0xb8, 0x8d, 0x58, 0xbf, 0xfc, 0xc5, 0x13, 0x03, + 0x5a, 0x72, 0x78, 0x96, 0x2f, 0xff, 0xff, 0x9b, 0x44, 0xc6, 0x71, 0xe3, + 0xa4, 0x81, 0xa7, 0xce, 0xc8, 0x5e, 0x9f, 0xac, 0x5b, 0x8e, 0x9a, 0x5f, + 0xca, 0x84, 0x81, 0xd0, 0x60, 0x24, 0xab, 0x9b, 0xeb, 0x17, 0xfe, 0x3c, + 0x9b, 0xef, 0xe7, 0xa4, 0x0b, 0x17, 0xe6, 0x1c, 0xe1, 0x2c, 0x5c, 0x09, + 0x58, 0xb1, 0xab, 0x15, 0xb2, 0x29, 0xdc, 0x5f, 0xe8, 0x0c, 0x4c, 0x42, + 0xf7, 0x67, 0x16, 0x2e, 0x73, 0xac, 0x59, 0xfc, 0x6b, 0x84, 0x2f, 0x7f, + 0xde, 0x26, 0xf9, 0xe7, 0x3c, 0xb1, 0x7c, 0x72, 0xcd, 0xcc, 0x3d, 0xee, + 0xc9, 0xaf, 0xff, 0xb3, 0x66, 0x2d, 0xcc, 0xe4, 0x9d, 0xbb, 0xf2, 0xc5, + 0xc5, 0x12, 0xc5, 0x4a, 0x29, 0xb4, 0x76, 0xca, 0x77, 0xfa, 0x3f, 0xf9, + 0xb6, 0xb5, 0x2b, 0x14, 0xb1, 0x7f, 0x70, 0x33, 0xeb, 0x52, 0xb1, 0x7f, + 0xf3, 0x43, 0x08, 0x65, 0x30, 0x1f, 0x16, 0x2d, 0x98, 0x7f, 0xfe, 0x0c, + 0xe8, 0x61, 0x7f, 0xb8, 0x29, 0xec, 0x59, 0xf5, 0x8b, 0xf9, 0xa2, 0xdf, + 0xf3, 0xb2, 0xc5, 0x18, 0x7c, 0xd1, 0x1a, 0xdd, 0xce, 0xb1, 0x62, 0xff, + 0xf1, 0x61, 0xe7, 0x73, 0x03, 0xdb, 0x66, 0xed, 0x62, 0xfe, 0x11, 0xce, + 0xd0, 0x33, 0xc7, 0xdb, 0xd4, 0x3b, 0x7f, 0xdc, 0x33, 0xab, 0xd9, 0x10, + 0xa2, 0x58, 0xbb, 0x5c, 0x58, 0xb8, 0x50, 0xc3, 0xd9, 0x0d, 0x06, 0xa0, + 0x9b, 0x0f, 0xe1, 0x22, 0x50, 0xa2, 0xbc, 0x13, 0x6c, 0xb1, 0x67, 0x58, + 0xa7, 0x3e, 0xaf, 0x9d, 0x00, 0x7e, 0xfc, 0x3c, 0x8b, 0xee, 0xb1, 0x7d, + 0x91, 0x7d, 0xd6, 0x2d, 0xb9, 0x87, 0x98, 0x32, 0x9b, 0xff, 0xf4, 0xea, + 0x77, 0xc3, 0xce, 0xf0, 0x7e, 0x08, 0xeb, 0x15, 0x2c, 0x9b, 0xed, 0x9f, + 0xb2, 0x15, 0x26, 0xa0, 0xee, 0x3f, 0x14, 0x6f, 0xba, 0x87, 0xd7, 0xe3, + 0x7a, 0x62, 0xe2, 0x85, 0xbf, 0xa5, 0x33, 0x09, 0xea, 0x38, 0xaa, 0xe8, + 0x99, 0x62, 0xfe, 0xd6, 0x49, 0xb2, 0x4b, 0x17, 0xff, 0xfb, 0xa1, 0x9b, + 0xfc, 0x43, 0xd3, 0xec, 0x59, 0xe7, 0xc0, 0x96, 0x2d, 0xf5, 0x8b, 0xdd, + 0x4c, 0x75, 0x8a, 0x63, 0x65, 0xd4, 0x25, 0x74, 0x6f, 0xd6, 0x2c, 0x5f, + 0xfd, 0xbf, 0xdf, 0x3b, 0x87, 0x3c, 0x2d, 0xd6, 0x2e, 0x63, 0xac, 0x56, + 0x1f, 0x01, 0x24, 0xdf, 0xf9, 0xbb, 0xee, 0x02, 0xd8, 0xcf, 0x62, 0xc5, + 0xfc, 0x6b, 0x44, 0x4e, 0x75, 0x8b, 0x1d, 0x62, 0xff, 0xff, 0xec, 0xea, + 0x8a, 0x7f, 0x9e, 0x29, 0x88, 0xcc, 0x2c, 0xee, 0x0f, 0xc5, 0x8b, 0xff, + 0xfb, 0xed, 0x11, 0xc4, 0x4c, 0x6f, 0x33, 0x7f, 0x8a, 0x3d, 0x62, 0xa5, + 0x1d, 0x40, 0x12, 0xe3, 0xb5, 0x12, 0x69, 0x1e, 0x8c, 0x66, 0xff, 0xc4, + 0xda, 0x30, 0xb0, 0x3c, 0xfa, 0xc5, 0xff, 0xf8, 0xbd, 0xc3, 0x3b, 0xf6, + 0x6d, 0x3c, 0x7d, 0x62, 0xc5, 0x4a, 0x30, 0x30, 0xa4, 0x47, 0xf7, 0xa1, + 0xb4, 0xac, 0x5f, 0x7b, 0x9d, 0xc1, 0x62, 0xd2, 0xb1, 0x46, 0x1e, 0xa6, + 0x0f, 0x00, 0x96, 0xff, 0xf6, 0x81, 0xac, 0x70, 0x73, 0xab, 0xd9, 0xf5, + 0x8b, 0xfc, 0xc5, 0xe8, 0xb3, 0x58, 0xb1, 0x68, 0x96, 0x2f, 0x8d, 0x62, + 0x02, 0xc5, 0xf7, 0xdf, 0x51, 0x2c, 0x5f, 0xfc, 0xdd, 0x98, 0xc5, 0xe8, + 0xb3, 0x58, 0xb1, 0x46, 0x22, 0x81, 0xc4, 0xe2, 0x23, 0x22, 0x4b, 0xf8, + 0xb0, 0x78, 0xff, 0x58, 0xa3, 0xa6, 0x79, 0xf8, 0x69, 0xf0, 0xf6, 0xec, + 0xe2, 0xc5, 0xe1, 0x61, 0x2c, 0x5f, 0xff, 0xbb, 0x87, 0x0c, 0xc1, 0x75, + 0xef, 0xf6, 0x2c, 0xe8, 0xb1, 0x7f, 0xd9, 0xdc, 0x38, 0xd3, 0xdc, 0x16, + 0x2f, 0xff, 0xb9, 0x8d, 0xa3, 0x27, 0xe2, 0xf1, 0x31, 0xab, 0x14, 0x74, + 0x46, 0x70, 0xee, 0xff, 0xff, 0x1a, 0x66, 0x41, 0xfa, 0x16, 0x73, 0xf8, + 0xe3, 0xc3, 0xac, 0x56, 0xe9, 0xd1, 0xe8, 0x5c, 0xe3, 0x9f, 0x87, 0x51, + 0x11, 0xdf, 0x8d, 0xce, 0x34, 0x7a, 0xc5, 0xfe, 0xe4, 0xe9, 0xa0, 0xff, + 0x58, 0xb6, 0x8c, 0x3d, 0xf8, 0x8b, 0x2f, 0xe6, 0xde, 0x05, 0x27, 0x58, + 0xb6, 0xcb, 0x15, 0x87, 0x82, 0x19, 0x75, 0x4a, 0xe4, 0xfe, 0x47, 0x14, + 0xf1, 0xec, 0xb4, 0x2b, 0xc9, 0xae, 0xf4, 0x96, 0xcb, 0x15, 0x2c, 0x9b, + 0x58, 0x0c, 0x0c, 0xb7, 0x21, 0x33, 0xd9, 0x1b, 0xc2, 0x0b, 0x44, 0x1f, + 0x94, 0x98, 0x50, 0x82, 0xf4, 0xe6, 0x77, 0x45, 0x9a, 0x8d, 0xe5, 0x30, + 0x7b, 0xf5, 0x91, 0xe0, 0x75, 0xb2, 0x94, 0xa3, 0x48, 0xd0, 0x63, 0x69, + 0xf4, 0xde, 0xbb, 0x8d, 0x5f, 0xae, 0x42, 0xeb, 0xae, 0xb1, 0x8a, 0x46, + 0xa8, 0x5e, 0x46, 0xb2, 0xd9, 0xad, 0xd5, 0xf6, 0x9f, 0x02, 0x85, 0x21, + 0xe4, 0x75, 0xae, 0x7e, 0x5e, 0x1b, 0xf9, 0xb4, 0x9d, 0xad, 0xed, 0x03, + 0x77, 0x75, 0xb3, 0x43, 0xd3, 0x58, 0x22, 0xac, 0xf2, 0xb5, 0x68, 0xa7, + 0x0f, 0x59, 0x9d, 0xfe, 0xf2, 0xc8, 0x5a, 0x9f, 0xf8, 0x0a, 0x63, 0x47, + 0x5f, 0x1d, 0x71, 0x5b, 0x5d, 0x5e, 0x5b, 0x44, 0xaf, 0x5b, 0x32, 0x71, + 0x52, 0x4d, 0x3a, 0x4e, 0xda, 0x85, 0x28, 0x2e, 0x3a, 0x93, 0xd8, 0x1d, + 0x2f, 0x5b, 0xaa, 0x95, 0x21, 0x7e, 0xf4, 0x93, 0x81, 0x62, 0xfd, 0x83, + 0x29, 0xdd, 0x62, 0xf1, 0x7a, 0x33, 0x0f, 0x3f, 0xe4, 0xf7, 0xd3, 0xf9, + 0x89, 0x62, 0xff, 0x8b, 0x3a, 0x38, 0xf5, 0x27, 0x58, 0xbe, 0x8b, 0x8c, + 0x75, 0x8a, 0x1a, 0x20, 0x7e, 0x47, 0xd0, 0xea, 0xff, 0x7e, 0x75, 0x16, + 0x16, 0xeb, 0x17, 0xf1, 0x67, 0x40, 0x4c, 0x4b, 0x17, 0xd9, 0xfc, 0xdd, + 0x62, 0x86, 0x7a, 0x7d, 0x0c, 0x2f, 0xfe, 0xf6, 0xa7, 0x3b, 0x8d, 0x86, + 0xcc, 0x6a, 0xc5, 0xff, 0x3f, 0x49, 0x8f, 0x88, 0x3c, 0x25, 0x8b, 0xda, + 0xcd, 0x96, 0x2f, 0xa1, 0x91, 0xfe, 0x58, 0xad, 0xcf, 0x12, 0x21, 0xeb, + 0x98, 0x0b, 0x16, 0xc7, 0x37, 0x7a, 0x24, 0xbc, 0x2d, 0xe3, 0x25, 0x50, + 0x60, 0xcc, 0xb2, 0x11, 0x1d, 0x92, 0x44, 0x97, 0xf8, 0x5f, 0x54, 0x62, + 0xf6, 0x6c, 0xcb, 0x92, 0x79, 0x58, 0x57, 0xf9, 0xdb, 0xb9, 0x8f, 0x93, + 0xac, 0x5f, 0x9f, 0xdc, 0x72, 0x58, 0xa1, 0x9e, 0xeb, 0x1b, 0x5f, 0x69, + 0xb8, 0xeb, 0x15, 0x1e, 0x78, 0x7e, 0x21, 0xbf, 0xc2, 0x68, 0xfc, 0x00, + 0x19, 0x62, 0xfd, 0xad, 0xd9, 0xb7, 0x54, 0x93, 0xa5, 0xd9, 0xda, 0xc5, + 0xfd, 0x13, 0x84, 0x2f, 0x79, 0x62, 0xfd, 0x85, 0xbe, 0x4a, 0xc5, 0xbe, + 0xb1, 0x7f, 0xf0, 0x89, 0xca, 0x7e, 0xe7, 0xce, 0x2c, 0x57, 0x0f, 0x50, + 0x42, 0x57, 0x68, 0xeb, 0x17, 0xff, 0x10, 0xc4, 0x3d, 0x4f, 0xdf, 0x09, + 0x62, 0xff, 0x9b, 0x9c, 0xc3, 0x58, 0x80, 0xb1, 0x52, 0x7f, 0x84, 0x87, + 0x78, 0x98, 0xd5, 0x8b, 0x3a, 0xc5, 0x61, 0xae, 0x34, 0x76, 0xff, 0xff, + 0xda, 0x73, 0xc9, 0xbc, 0x92, 0x18, 0x87, 0xa9, 0xfb, 0xe1, 0x2c, 0x54, + 0xaa, 0xe6, 0x19, 0x2e, 0x1b, 0x76, 0x6e, 0xe3, 0x1a, 0x31, 0x3b, 0xd8, + 0x08, 0xb9, 0x09, 0x48, 0xe4, 0xe0, 0xc8, 0x6f, 0xb3, 0x3e, 0xeb, 0x17, + 0xff, 0x8e, 0xdc, 0xce, 0x93, 0xdb, 0xfe, 0x60, 0xb1, 0x79, 0xb5, 0xb2, + 0xc5, 0xfb, 0xbf, 0x7a, 0x4e, 0xb1, 0x7e, 0x18, 0xb3, 0x80, 0x58, 0xba, + 0x26, 0x58, 0xbe, 0xf3, 0x11, 0xab, 0x15, 0x26, 0xef, 0xb1, 0x8b, 0xe3, + 0x5a, 0x11, 0x83, 0x4c, 0xeb, 0x08, 0x77, 0x4c, 0x71, 0xe6, 0x2a, 0x0d, + 0x92, 0xa3, 0x15, 0x26, 0x9b, 0x1e, 0xdd, 0xff, 0xd0, 0xfe, 0x3c, 0x39, + 0x3e, 0x91, 0xac, 0x5f, 0x1a, 0x76, 0x82, 0xc5, 0xd0, 0x8c, 0xc3, 0xe8, + 0x0d, 0x12, 0xf4, 0x05, 0xa5, 0x8b, 0xcf, 0x9a, 0x58, 0xbf, 0x69, 0x86, + 0x22, 0x58, 0xbe, 0x17, 0xe4, 0xeb, 0x15, 0xb9, 0xf3, 0x80, 0x73, 0xc5, + 0x17, 0xf4, 0xe1, 0x19, 0x9b, 0x2c, 0x5e, 0xed, 0xb6, 0x58, 0xbb, 0x38, + 0xb1, 0x52, 0x6d, 0xb0, 0x7e, 0xfb, 0x6d, 0xa7, 0xb5, 0x8b, 0xf9, 0xb6, + 0xf7, 0x18, 0x0b, 0x17, 0x6a, 0x33, 0x13, 0x8d, 0xee, 0x10, 0xba, 0x30, + 0xfb, 0x23, 0x0f, 0xc7, 0x13, 0x54, 0xaa, 0x2c, 0x78, 0xef, 0xaf, 0xdd, + 0x27, 0xa3, 0xf5, 0x2c, 0x5f, 0xb5, 0xbb, 0x36, 0xea, 0x92, 0x8c, 0xbf, + 0xf3, 0x42, 0x33, 0x35, 0xbb, 0x36, 0xea, 0x91, 0xa0, 0xbf, 0xfc, 0x59, + 0x14, 0x1b, 0x50, 0x2c, 0xe8, 0xcb, 0x17, 0xa7, 0x3b, 0x58, 0xbc, 0xdb, + 0x4a, 0xc5, 0x11, 0xba, 0x10, 0xed, 0x4a, 0x6b, 0x78, 0x5e, 0x73, 0x7e, + 0x28, 0x7a, 0x10, 0xb7, 0xf8, 0x36, 0xe9, 0x19, 0xe7, 0xd9, 0x62, 0xa3, + 0x11, 0x13, 0x29, 0xd6, 0xdd, 0x62, 0xf6, 0xd0, 0x95, 0x8b, 0xff, 0xf6, + 0x7f, 0xed, 0x00, 0xb1, 0xfa, 0x13, 0x4f, 0x16, 0x2f, 0xfd, 0xf1, 0x7d, + 0x9f, 0xbe, 0x49, 0xab, 0x16, 0xf4, 0x11, 0x2e, 0xea, 0xd7, 0xfa, 0x74, + 0x19, 0x37, 0xb8, 0xb1, 0x58, 0x7b, 0x9f, 0x28, 0xbf, 0x0b, 0xcc, 0x17, + 0x96, 0x2f, 0xdb, 0x07, 0xb4, 0xec, 0xb1, 0x7d, 0xbb, 0x36, 0xea, 0x92, + 0xbc, 0xbf, 0xff, 0x85, 0xe7, 0xf9, 0x08, 0xd2, 0x66, 0x1f, 0x84, 0xcb, + 0x15, 0xb2, 0x38, 0xf0, 0xab, 0x45, 0xa4, 0x63, 0x7f, 0xed, 0xe7, 0xd0, + 0x93, 0x93, 0x41, 0x62, 0xff, 0xb9, 0x30, 0xfc, 0x84, 0xc4, 0xb1, 0x67, + 0xdc, 0xfe, 0x3c, 0x7f, 0x7f, 0xed, 0x6d, 0xc9, 0xdc, 0x98, 0xfc, 0x58, + 0xaf, 0x9f, 0x4b, 0x14, 0x5f, 0xfd, 0xe0, 0x60, 0xff, 0x83, 0x1b, 0xf6, + 0xb1, 0x7e, 0xe9, 0x25, 0xf1, 0x2c, 0x5f, 0xf9, 0xbb, 0x87, 0x33, 0x71, + 0xe7, 0x6b, 0x15, 0x87, 0xd8, 0xc5, 0x56, 0x35, 0x62, 0xfe, 0x71, 0x8e, + 0x75, 0x2b, 0x17, 0x31, 0x2c, 0x5d, 0x26, 0xac, 0x5f, 0x47, 0xe7, 0x89, + 0x62, 0xfd, 0xc2, 0x69, 0xe2, 0xc5, 0xff, 0xef, 0xb4, 0x02, 0xc7, 0xe8, + 0x4d, 0x3c, 0x58, 0xbf, 0xff, 0xce, 0x33, 0xb3, 0x16, 0xe3, 0xfc, 0xe0, + 0xdc, 0xb6, 0x58, 0xb6, 0x7d, 0x15, 0x64, 0x97, 0x52, 0x8f, 0x98, 0x43, + 0x4a, 0xff, 0xbd, 0x9d, 0xfb, 0x30, 0x8d, 0x58, 0xbf, 0xfc, 0xfd, 0x07, + 0x39, 0xdf, 0xdf, 0x52, 0x75, 0x8b, 0xff, 0x7e, 0x26, 0xf7, 0xbb, 0xdd, + 0xc9, 0x62, 0xb1, 0x11, 0xcc, 0x99, 0x7e, 0xcf, 0xff, 0x22, 0x58, 0xbf, + 0xff, 0x00, 0x84, 0x70, 0xc6, 0x39, 0x01, 0xe7, 0x3c, 0xb1, 0x7f, 0x37, + 0xb9, 0x9d, 0xf9, 0x62, 0x86, 0x8a, 0xfe, 0xca, 0x49, 0x5e, 0xd1, 0x9d, + 0x62, 0xfd, 0x9c, 0x04, 0xc7, 0x18, 0x8e, 0x46, 0x09, 0xbc, 0x63, 0xbd, + 0x90, 0xea, 0x16, 0x47, 0x20, 0xf8, 0x9b, 0x16, 0xf5, 0xe2, 0xc4, 0x31, + 0xe8, 0xc7, 0xba, 0x13, 0x85, 0x0c, 0x80, 0xe1, 0xa1, 0x7e, 0xd6, 0xec, + 0xdb, 0xaa, 0x4b, 0x62, 0xff, 0xa1, 0x19, 0x9a, 0xdd, 0x9b, 0x75, 0x48, + 0x82, 0x5f, 0x61, 0xe6, 0x3d, 0x62, 0xd1, 0x98, 0x8a, 0x76, 0x37, 0xe2, + 0x5d, 0xf1, 0xdc, 0xa5, 0x62, 0xfd, 0xad, 0xd9, 0xb7, 0x54, 0x88, 0x65, + 0xfd, 0xa1, 0x74, 0x90, 0x8e, 0xb1, 0x7f, 0x16, 0x73, 0xd0, 0x95, 0x8b, + 0xcd, 0x08, 0xc9, 0x45, 0xbe, 0x10, 0xb9, 0xbf, 0x43, 0x2b, 0xff, 0xba, + 0x3f, 0xa7, 0xe5, 0x9e, 0xd4, 0xac, 0x5f, 0xe3, 0x99, 0x9a, 0x6f, 0x71, + 0x62, 0xed, 0xa3, 0x30, 0xfe, 0x83, 0x45, 0xa8, 0xc4, 0x7e, 0x3c, 0x32, + 0xaf, 0xef, 0x38, 0xf0, 0xa2, 0x58, 0xbd, 0x9d, 0x31, 0x62, 0xb0, 0xf3, + 0x08, 0xba, 0xff, 0x10, 0xb9, 0x39, 0xa0, 0x2c, 0x5e, 0x37, 0x23, 0xd6, + 0x2f, 0x31, 0xb1, 0x98, 0x7a, 0x86, 0x99, 0xdb, 0x91, 0x88, 0xab, 0x27, + 0x4b, 0xcc, 0xdb, 0xae, 0x50, 0x32, 0xa4, 0xf5, 0x77, 0x2b, 0xbf, 0x46, + 0xbe, 0xb3, 0x6d, 0xb6, 0x58, 0xb6, 0xeb, 0x17, 0xe3, 0xf7, 0x0c, 0x3a, + 0xc5, 0xa3, 0xd6, 0x2a, 0x35, 0xa2, 0x2b, 0x0e, 0x22, 0x13, 0xf9, 0x55, + 0xc1, 0x79, 0x62, 0xf7, 0x1c, 0xd5, 0x8a, 0x19, 0xb7, 0xec, 0x66, 0xe8, + 0xd3, 0x65, 0x8b, 0x1a, 0xb1, 0x7f, 0xdf, 0x9f, 0x73, 0xac, 0xe4, 0x68, + 0x4b, 0x15, 0x1b, 0x9f, 0xac, 0x6c, 0x3d, 0x01, 0x3b, 0xfa, 0x4b, 0xdf, + 0xc8, 0x2c, 0x5f, 0xf7, 0x70, 0xc2, 0x14, 0x33, 0x8b, 0x17, 0x67, 0x52, + 0xc5, 0x49, 0xea, 0x78, 0xea, 0xb4, 0x8a, 0x2f, 0x42, 0x06, 0xc4, 0xb1, + 0x7b, 0xae, 0x91, 0xd1, 0xba, 0xc5, 0xe9, 0x8e, 0x8d, 0xd6, 0x2b, 0xae, + 0x87, 0xa7, 0x25, 0xd6, 0x75, 0x8a, 0xeb, 0x11, 0x3d, 0xd7, 0x6c, 0x91, + 0xac, 0xa6, 0xff, 0xf4, 0x6b, 0x8d, 0x7d, 0x67, 0xe4, 0xe4, 0xdf, 0x7d, + 0x2c, 0x5b, 0xb5, 0x8b, 0x8a, 0x0b, 0x17, 0xbd, 0x80, 0x58, 0xb1, 0x2c, + 0x5f, 0x08, 0x6d, 0x1e, 0xb1, 0x4e, 0x6d, 0xf8, 0x23, 0x78, 0x5e, 0xc5, + 0x8b, 0xa6, 0x25, 0x8b, 0xf8, 0xf9, 0xb9, 0x34, 0x7a, 0xc5, 0xec, 0x7d, + 0x96, 0x2c, 0x1a, 0xc5, 0x61, 0xf0, 0xe8, 0xc4, 0x43, 0xb6, 0x1a, 0xc5, + 0xe1, 0xcf, 0x96, 0x18, 0xb2, 0xbf, 0xfa, 0x02, 0x8b, 0x59, 0x3d, 0xc1, + 0xce, 0xb1, 0x63, 0xac, 0x5b, 0xa2, 0xc5, 0xe2, 0xf7, 0x16, 0x29, 0xcd, + 0x88, 0x85, 0x2a, 0x51, 0xab, 0xd9, 0x5b, 0xa3, 0xf9, 0x0e, 0xf7, 0x41, + 0x41, 0x62, 0xf7, 0xf3, 0x8b, 0x16, 0x65, 0x8a, 0x19, 0xae, 0xf0, 0xed, + 0xec, 0x3c, 0xac, 0x50, 0xd5, 0x88, 0x60, 0x9c, 0x78, 0xbc, 0x4a, 0x9a, + 0x20, 0xf8, 0xef, 0x1e, 0x7d, 0x18, 0xaf, 0x43, 0xc0, 0xd3, 0xba, 0x88, + 0x6f, 0xb3, 0xb8, 0x79, 0x62, 0xfe, 0x29, 0xee, 0x0e, 0x4b, 0x17, 0xf6, + 0x77, 0xe3, 0xcb, 0xac, 0x5f, 0x39, 0x77, 0x05, 0x8b, 0xdc, 0x7e, 0x8b, + 0x15, 0xb2, 0x30, 0x46, 0x48, 0xe5, 0xbc, 0x2e, 0xf1, 0x1d, 0x89, 0x62, + 0xfb, 0x0e, 0xc3, 0x58, 0xbf, 0x0e, 0x4b, 0x68, 0xf5, 0x8b, 0xfd, 0x26, + 0x86, 0x00, 0x4f, 0x6b, 0x15, 0x27, 0xc7, 0xb1, 0x65, 0xf9, 0xbe, 0xe7, + 0xc5, 0x8a, 0xc4, 0x6f, 0xfc, 0x44, 0xa1, 0x0b, 0xd0, 0x8a, 0xfe, 0x0f, + 0x22, 0x70, 0x71, 0x62, 0xfe, 0xcd, 0xff, 0x33, 0x12, 0xc5, 0xfb, 0x5a, + 0x9c, 0x25, 0x8b, 0xed, 0x33, 0x41, 0x62, 0xd1, 0xcb, 0x14, 0xe8, 0xff, + 0x89, 0x0b, 0xe6, 0x0c, 0x5e, 0x44, 0xe2, 0x22, 0xbc, 0x16, 0x04, 0xb1, + 0x78, 0x79, 0xf5, 0x8a, 0xd1, 0xbc, 0xea, 0x1f, 0xbc, 0x40, 0xe2, 0xc5, + 0xf9, 0xb6, 0x0f, 0x22, 0x58, 0xbc, 0x00, 0xf6, 0x58, 0xbe, 0x3e, 0x77, + 0xc5, 0x8b, 0x72, 0x4f, 0x11, 0xc8, 0x2f, 0x6b, 0x0e, 0xb1, 0x58, 0x8c, + 0xf2, 0x1d, 0xe3, 0x7f, 0x89, 0xa9, 0x62, 0xec, 0xed, 0x62, 0xba, 0x1a, + 0x48, 0xe0, 0xcb, 0x82, 0x1a, 0xc5, 0xed, 0xca, 0x3d, 0x62, 0xfa, 0x77, + 0x90, 0x2c, 0x5f, 0xce, 0xd0, 0xf3, 0xec, 0xb1, 0x60, 0xb4, 0x7a, 0x3f, + 0x23, 0xb4, 0x16, 0x29, 0x8d, 0xdf, 0x8a, 0x6b, 0xe8, 0xe6, 0x61, 0x92, + 0x85, 0x6d, 0xf7, 0xb8, 0x1f, 0x16, 0x2d, 0xa5, 0x8a, 0xc3, 0x6e, 0x22, + 0x5b, 0xd8, 0x46, 0xac, 0x5f, 0x8d, 0xc3, 0xce, 0xeb, 0x15, 0x87, 0x8e, + 0x21, 0xdb, 0xee, 0x93, 0x3d, 0xac, 0x5f, 0xf8, 0x19, 0xdf, 0x03, 0xd3, + 0x9f, 0x16, 0x2e, 0x78, 0x96, 0x2b, 0xb3, 0xd9, 0xd2, 0x0d, 0xfb, 0x6d, + 0xfe, 0xf1, 0x2c, 0x54, 0xa3, 0x37, 0x1f, 0x9c, 0x8e, 0xfb, 0x6e, 0x76, + 0xeb, 0x17, 0xff, 0xa7, 0xb8, 0x39, 0xc2, 0xc2, 0x1f, 0xe5, 0x62, 0xa5, + 0x72, 0xeb, 0x21, 0xe6, 0xeb, 0xfa, 0x8c, 0x30, 0xed, 0x5f, 0x67, 0x28, + 0x77, 0x70, 0xb4, 0x44, 0xb7, 0xe6, 0x18, 0x72, 0x4b, 0x17, 0xf9, 0xc5, + 0x1f, 0xf9, 0xcd, 0x96, 0x2f, 0xfd, 0xaf, 0x06, 0x4d, 0xbe, 0x16, 0xeb, + 0x17, 0x37, 0x96, 0x2e, 0x78, 0xe5, 0x8a, 0x88, 0xd8, 0x9c, 0x5e, 0xfb, + 0xf8, 0x6b, 0xac, 0x5f, 0xec, 0xe9, 0x85, 0x9d, 0xf9, 0x62, 0xa4, 0xfe, + 0xb7, 0x22, 0xf9, 0x1d, 0xd3, 0xd4, 0xb1, 0x7f, 0xe0, 0x9a, 0x1a, 0xc7, + 0xfc, 0x8d, 0x62, 0xdd, 0xac, 0x5e, 0x2e, 0xf8, 0xb1, 0x7c, 0xe3, 0xc2, + 0x58, 0xa9, 0x3d, 0x27, 0x13, 0xe0, 0xf5, 0xfd, 0xdf, 0x30, 0xf3, 0x1e, + 0xb1, 0x7a, 0x13, 0xda, 0xc5, 0xef, 0xb0, 0xd6, 0x2f, 0x6c, 0x2d, 0xa2, + 0x37, 0x7e, 0x1e, 0xbc, 0xcd, 0xba, 0xa4, 0xc4, 0x2f, 0xdd, 0x3e, 0xf2, + 0x4b, 0x17, 0x7b, 0x8b, 0x14, 0xe7, 0x82, 0x19, 0x4d, 0x4a, 0x66, 0x1b, + 0x36, 0xee, 0x6d, 0xa6, 0xbb, 0xf7, 0x9f, 0xa4, 0xfd, 0x62, 0xfb, 0x4c, + 0x5e, 0x58, 0xb0, 0x16, 0x29, 0xcf, 0x7b, 0x45, 0x5d, 0x44, 0x57, 0xdf, + 0x26, 0x8f, 0x58, 0xbf, 0x8e, 0xc0, 0xd6, 0x1d, 0x62, 0xfe, 0xd7, 0xdb, + 0x98, 0x1a, 0xc5, 0xdf, 0x12, 0xc5, 0xf7, 0x03, 0x28, 0x2c, 0x50, 0xcd, + 0xe7, 0x86, 0x2f, 0x4e, 0xb6, 0x58, 0xa9, 0x47, 0xee, 0x12, 0xb9, 0x73, + 0x35, 0x86, 0x43, 0x7e, 0xfb, 0x72, 0x63, 0xd6, 0x2d, 0xa5, 0x8a, 0x23, + 0x7a, 0x22, 0xbb, 0x9c, 0x25, 0x8b, 0xff, 0xbe, 0xd0, 0xfe, 0x16, 0x79, + 0xf8, 0xb1, 0x7f, 0xe8, 0x67, 0x3d, 0xfc, 0x7d, 0x41, 0x62, 0x9d, 0x13, + 0x5e, 0x18, 0x12, 0x1d, 0xfd, 0x33, 0xd9, 0xd8, 0x6b, 0x17, 0xf8, 0x60, + 0x17, 0xb8, 0x28, 0xf5, 0x8b, 0xa7, 0x75, 0x8b, 0xa7, 0xa2, 0xc5, 0xfd, + 0x84, 0x2c, 0xd1, 0xab, 0x17, 0x14, 0x16, 0x2a, 0x51, 0x5e, 0xe7, 0x3f, + 0x18, 0xf0, 0xc8, 0x8b, 0xaf, 0xee, 0x61, 0x19, 0x00, 0x2c, 0x5f, 0xd3, + 0x9a, 0x00, 0x3c, 0xb1, 0x50, 0x3d, 0xdd, 0xcb, 0xef, 0xf1, 0x0f, 0x53, + 0x06, 0xd2, 0xc5, 0xed, 0x6d, 0xb2, 0xc5, 0x39, 0xe9, 0xb1, 0x9d, 0xf4, + 0xf7, 0x0e, 0x2c, 0x56, 0xcc, 0x8f, 0x68, 0x14, 0x61, 0xbe, 0xf0, 0xec, + 0xec, 0xbd, 0xc6, 0xa2, 0x84, 0x8e, 0xa3, 0x5d, 0x3c, 0x27, 0x7f, 0x19, + 0x73, 0x42, 0x10, 0xa1, 0x75, 0xc2, 0xff, 0x43, 0x74, 0x50, 0xa5, 0xe8, + 0xec, 0x11, 0x05, 0xdc, 0x75, 0x8b, 0xed, 0x49, 0x1a, 0xb1, 0x7d, 0xe7, + 0x20, 0x96, 0x2f, 0xa2, 0x27, 0xd9, 0x62, 0xcd, 0x87, 0x8f, 0xd9, 0x1d, + 0xe8, 0x4c, 0x7a, 0xc5, 0x0d, 0x19, 0x18, 0x2e, 0x6b, 0x54, 0x44, 0xf7, + 0xcf, 0xc9, 0x89, 0x62, 0xff, 0xef, 0x66, 0xdc, 0x9d, 0x34, 0x1f, 0xeb, + 0x15, 0xa3, 0xe8, 0xf1, 0x1d, 0x9d, 0x62, 0xce, 0xb1, 0x68, 0x1a, 0x68, + 0x80, 0x23, 0x77, 0x71, 0xeb, 0x17, 0xd1, 0xd9, 0xa9, 0x58, 0xa1, 0x1e, + 0x08, 0x63, 0x97, 0xa2, 0x16, 0x96, 0x2e, 0x9e, 0x2c, 0x5f, 0xe1, 0x94, + 0xfb, 0x82, 0x3a, 0xc5, 0xe7, 0x11, 0x2c, 0x58, 0x96, 0x2e, 0x92, 0x58, + 0xbf, 0xa7, 0x81, 0xed, 0x3b, 0x2c, 0x51, 0xa8, 0xbf, 0x88, 0x5c, 0xe6, + 0x84, 0x39, 0xc1, 0x10, 0xc5, 0xae, 0x7d, 0x2c, 0x5f, 0x84, 0x6f, 0xc5, + 0xc5, 0x8b, 0xcf, 0x80, 0x58, 0xa1, 0x9e, 0xf6, 0x85, 0xc8, 0xae, 0xfa, + 0x3f, 0xe2, 0x8f, 0x58, 0xa9, 0x54, 0x21, 0x84, 0x6f, 0x0d, 0xe6, 0x85, + 0xb8, 0x8b, 0xaf, 0xf8, 0x5b, 0x16, 0x0f, 0xe2, 0x35, 0x62, 0xa5, 0x5a, + 0x59, 0xa8, 0x9f, 0x94, 0xf2, 0x4a, 0x57, 0xdf, 0xe0, 0xa5, 0x62, 0xdc, + 0x58, 0xbf, 0xfb, 0xbe, 0xc0, 0xde, 0xe3, 0x97, 0x70, 0x58, 0xbe, 0x1e, + 0x38, 0xd6, 0x2b, 0x0f, 0xa8, 0x92, 0x2f, 0xf0, 0xb6, 0xee, 0x1f, 0x16, + 0x96, 0x2f, 0xfe, 0x9c, 0xe6, 0x10, 0xdc, 0x12, 0x4b, 0x17, 0x8a, 0x76, + 0x58, 0xac, 0x4c, 0xc9, 0xdf, 0x3e, 0x40, 0x47, 0x02, 0x41, 0xbe, 0xff, + 0x6d, 0x1e, 0xb1, 0x70, 0xb4, 0xb1, 0x7b, 0x52, 0x75, 0x8b, 0x83, 0x95, + 0x8a, 0x93, 0x6b, 0x83, 0xb7, 0xfa, 0x41, 0xad, 0x49, 0xf8, 0xb1, 0x52, + 0xa9, 0x92, 0x11, 0xaa, 0x9d, 0x21, 0x89, 0xf8, 0x9b, 0xe1, 0xfb, 0xe1, + 0x87, 0xd6, 0x41, 0x62, 0xfc, 0x0d, 0xfe, 0xfd, 0x7a, 0xc5, 0xef, 0xe0, + 0x16, 0x2f, 0x41, 0xe3, 0xd6, 0x2f, 0xee, 0xf9, 0xf9, 0x7f, 0x2c, 0x5c, + 0xde, 0x58, 0xa7, 0x3c, 0x63, 0x97, 0xde, 0x6c, 0xfa, 0xc5, 0xd2, 0x05, + 0x8b, 0xe7, 0x29, 0x1a, 0xc5, 0x49, 0xea, 0x7c, 0x73, 0x82, 0xf7, 0xf8, + 0x0f, 0xad, 0x3f, 0x60, 0x58, 0xb8, 0x51, 0xcb, 0x17, 0x8a, 0x76, 0x58, + 0xba, 0x7e, 0xb1, 0x4e, 0x6d, 0x38, 0x3b, 0x62, 0x58, 0xbe, 0x90, 0x01, + 0x96, 0x2f, 0xff, 0x67, 0x70, 0x21, 0x79, 0x9c, 0xa4, 0x6b, 0x15, 0xb1, + 0xfe, 0x38, 0x8f, 0x88, 0xaf, 0xee, 0x08, 0xbc, 0xf0, 0x58, 0xbf, 0x8e, + 0x59, 0x31, 0xf1, 0x2c, 0x58, 0x0b, 0x15, 0x27, 0x86, 0xe6, 0x37, 0x7a, + 0x0b, 0x17, 0x9a, 0x7b, 0x58, 0xa8, 0xd1, 0x5c, 0xa6, 0x15, 0x6e, 0x5f, + 0xd8, 0xee, 0x99, 0xbe, 0xea, 0x02, 0xe2, 0x35, 0xe2, 0x7f, 0xa1, 0x38, + 0x22, 0xf8, 0xe7, 0x10, 0xc8, 0x3a, 0x86, 0x2f, 0xb5, 0x9d, 0xf1, 0x62, + 0xfb, 0x0f, 0x31, 0xeb, 0x15, 0xa3, 0xc9, 0xe1, 0x25, 0xe6, 0xf7, 0x16, + 0x2f, 0x88, 0x5e, 0xe2, 0xc5, 0xff, 0xe8, 0x1c, 0xa7, 0x52, 0x3c, 0x8a, + 0x7e, 0xb1, 0x5b, 0x1f, 0x6e, 0x88, 0xed, 0x12, 0xc5, 0xb6, 0x58, 0xad, + 0x1a, 0x62, 0x13, 0xa7, 0x47, 0x9b, 0x42, 0x28, 0x49, 0x37, 0xb7, 0x6e, + 0x2c, 0x5c, 0x1f, 0x6b, 0x15, 0x86, 0xe3, 0xe3, 0xd7, 0x4f, 0x45, 0x8b, + 0xc2, 0x6e, 0x2c, 0x50, 0xcd, 0xb7, 0x41, 0x9b, 0x3a, 0xc5, 0xff, 0x4f, + 0xb9, 0xcf, 0x4f, 0x61, 0x2c, 0x5e, 0x70, 0xba, 0xf5, 0x8b, 0xdf, 0xcd, + 0x96, 0x2c, 0xfa, 0x3c, 0x1f, 0x91, 0xdf, 0xf3, 0x05, 0xf6, 0xe7, 0xa4, + 0x25, 0x8b, 0x76, 0xb1, 0x50, 0x4f, 0x9f, 0x1a, 0xdd, 0x5a, 0x22, 0x3d, + 0x08, 0xfd, 0xf4, 0x89, 0xc3, 0x3b, 0xbf, 0xf3, 0xff, 0xb8, 0x67, 0xb3, + 0xbf, 0x2c, 0x5f, 0xef, 0xe1, 0xf1, 0xb5, 0xb2, 0xc5, 0xfe, 0xfe, 0x1f, + 0x35, 0xac, 0x58, 0xa8, 0x22, 0xa0, 0x68, 0x3e, 0x34, 0xba, 0x34, 0x25, + 0x8b, 0xdf, 0x9f, 0x2c, 0x5f, 0xbd, 0xe6, 0x87, 0x16, 0x2f, 0x66, 0xa5, 0x62, 0xf1, 0x61, 0xd6, 0x23, 0x8b, 0xcb, 0xd2, 0x52, 0xb1, 0x7e, 0x1e, - 0x44, 0xc0, 0x58, 0xbf, 0xf0, 0xb3, 0xa1, 0xf6, 0xfe, 0x34, 0x4b, 0x15, - 0xd2, 0x3e, 0xa2, 0x45, 0xf9, 0x70, 0x86, 0xfb, 0x14, 0xdf, 0xec, 0xeb, - 0xbb, 0xf9, 0xd4, 0x16, 0x2d, 0x05, 0x8b, 0xdd, 0x71, 0x96, 0x2f, 0xb3, - 0x02, 0xe2, 0xc5, 0x49, 0xe9, 0xe0, 0x97, 0x87, 0xad, 0xd9, 0x62, 0xe1, - 0x12, 0xc5, 0xbb, 0xf5, 0x8b, 0x76, 0x58, 0xa9, 0x55, 0x2b, 0xb1, 0x16, - 0x46, 0x2d, 0x12, 0x76, 0xa1, 0x18, 0x02, 0xde, 0x0a, 0x78, 0x5f, 0xb0, - 0xbd, 0xf7, 0xbf, 0x80, 0x58, 0xbd, 0x3e, 0xe2, 0xc5, 0xb7, 0x93, 0xc0, - 0xf1, 0x1d, 0xfc, 0x1e, 0x6b, 0x32, 0x25, 0x8a, 0x23, 0xd7, 0xe1, 0x45, - 0xfb, 0xae, 0x4e, 0xb8, 0xb1, 0x7f, 0xba, 0xf6, 0x7f, 0xf9, 0x12, 0xc5, - 0xb1, 0x62, 0xb4, 0x78, 0xfd, 0xf9, 0xb5, 0xee, 0x77, 0x1a, 0xb1, 0x6d, - 0xd6, 0x2c, 0x4b, 0x15, 0xf3, 0x48, 0x42, 0x77, 0xc0, 0xe0, 0x71, 0xeb, - 0x17, 0xfb, 0xdc, 0x18, 0x9b, 0x50, 0x58, 0xac, 0x3d, 0xd6, 0x28, 0xbf, - 0xdb, 0x75, 0x0e, 0x13, 0xc4, 0xb1, 0x7f, 0x7d, 0x88, 0x61, 0xf4, 0xb1, - 0x7d, 0xe2, 0x16, 0xcb, 0x15, 0x28, 0x8b, 0x73, 0x72, 0x30, 0xa9, 0x54, - 0xa9, 0x84, 0x2e, 0xe3, 0xa2, 0x76, 0x46, 0x27, 0xd1, 0x42, 0xae, 0xfe, - 0xd4, 0x01, 0x99, 0x12, 0xc5, 0xc2, 0x0d, 0x62, 0xff, 0xb0, 0x82, 0xc2, - 0x1f, 0xe5, 0x62, 0xe7, 0x8e, 0x58, 0xb7, 0x72, 0xc5, 0x9a, 0x4d, 0x78, - 0x86, 0xaf, 0xdf, 0x7e, 0xd2, 0x4b, 0x17, 0x30, 0x6b, 0x14, 0x33, 0xc1, - 0x11, 0x4d, 0xdc, 0x89, 0x62, 0xf6, 0x83, 0xe2, 0xc5, 0x62, 0x6d, 0xe6, - 0x97, 0xee, 0x33, 0xa6, 0x72, 0x66, 0xf1, 0x17, 0x61, 0x9b, 0xb0, 0xd5, - 0x8b, 0x9f, 0x4b, 0x15, 0x26, 0xbf, 0xe3, 0x17, 0xfc, 0x50, 0xe1, 0x8c, - 0x6f, 0xdd, 0x62, 0xff, 0x1b, 0xa9, 0x1f, 0xe7, 0xb2, 0xc5, 0x0d, 0x12, - 0x58, 0x41, 0xc3, 0xbb, 0xfc, 0xfc, 0xc1, 0xb4, 0x1d, 0x62, 0xff, 0xfc, - 0x5e, 0x2c, 0xe0, 0x4c, 0x5b, 0x7b, 0xf8, 0x4b, 0x17, 0xc2, 0x8a, 0x7a, - 0x58, 0xbe, 0x80, 0x7f, 0x95, 0x8b, 0xf9, 0xe2, 0x72, 0x10, 0x6b, 0x17, - 0xfe, 0x29, 0x3c, 0xbc, 0x0a, 0x77, 0x58, 0xba, 0x60, 0xb1, 0x7c, 0xfd, - 0xa6, 0x25, 0x8a, 0xd1, 0xbc, 0xf8, 0xbd, 0x4a, 0x6c, 0xfb, 0xaa, 0xb1, - 0x29, 0x12, 0x78, 0xbf, 0xb3, 0xcd, 0xe7, 0xd4, 0x4b, 0x17, 0xbc, 0xfb, - 0x2c, 0x58, 0xf8, 0x6f, 0x3c, 0x3d, 0x68, 0xf5, 0x8a, 0x93, 0x76, 0xc4, - 0xd7, 0xc1, 0xcf, 0x77, 0x16, 0x2d, 0xc5, 0x8b, 0xfc, 0x53, 0xd7, 0x5c, - 0x68, 0xf5, 0x8b, 0xef, 0xb8, 0x5c, 0x58, 0xbf, 0xe2, 0x63, 0xf3, 0x0f, - 0x31, 0xeb, 0x17, 0xe9, 0x1e, 0x34, 0x7a, 0xc5, 0x11, 0xf2, 0xf6, 0x3b, - 0xbf, 0xf3, 0xec, 0xc5, 0xf6, 0xe4, 0xc7, 0xac, 0x5e, 0x37, 0x23, 0xd6, - 0x29, 0x62, 0xef, 0xc9, 0xa6, 0xb7, 0xe4, 0x34, 0xb1, 0x6c, 0x19, 0xb9, - 0x39, 0x6d, 0xe7, 0x0a, 0x3d, 0x62, 0xec, 0x02, 0xc5, 0x68, 0xdc, 0x11, - 0x0d, 0x62, 0x7a, 0x2f, 0x08, 0x9f, 0x91, 0x94, 0x29, 0xf8, 0xbd, 0x7f, - 0xfb, 0x4e, 0x79, 0xeb, 0xf2, 0x32, 0x68, 0xf5, 0x8a, 0x1a, 0xae, 0x1c, - 0x27, 0x38, 0x97, 0x25, 0x04, 0xf9, 0x4a, 0xff, 0xf9, 0xa0, 0x06, 0x06, - 0x75, 0xee, 0x72, 0x40, 0xb1, 0x7d, 0xbf, 0xe7, 0x4b, 0x17, 0xdb, 0xfe, - 0x42, 0x58, 0xbc, 0xf9, 0xa5, 0x8a, 0xe8, 0xf9, 0x63, 0xc9, 0x03, 0x25, - 0xbf, 0xc0, 0x13, 0x07, 0xf9, 0x82, 0xc5, 0x4b, 0x20, 0xc3, 0x23, 0x28, - 0xdc, 0xbd, 0xe3, 0x99, 0xfc, 0x33, 0xda, 0x58, 0x01, 0x29, 0x0a, 0x16, - 0xc1, 0x1a, 0x5a, 0x0b, 0x16, 0x95, 0x8a, 0x93, 0x46, 0x42, 0x57, 0xdf, - 0x9e, 0xbb, 0x96, 0x2d, 0xdc, 0xb1, 0x5b, 0x9b, 0xc7, 0x27, 0xa1, 0x9f, - 0xe7, 0x4b, 0x76, 0x1a, 0xc5, 0xf8, 0x98, 0xf3, 0xf5, 0x8a, 0xc3, 0x72, - 0xe2, 0x57, 0xff, 0xa4, 0xf3, 0x01, 0x94, 0xfd, 0xb3, 0x4b, 0x17, 0x1e, - 0x56, 0x2f, 0x7e, 0x63, 0xd6, 0x2e, 0x16, 0x2c, 0x58, 0x96, 0x29, 0x62, - 0xa0, 0x8b, 0x3c, 0x48, 0xdc, 0x5c, 0x04, 0x1e, 0x17, 0x8e, 0x11, 0xbe, - 0x17, 0xb8, 0x05, 0x8b, 0xe9, 0xfc, 0xc7, 0xac, 0x5f, 0x77, 0x39, 0x7d, - 0x62, 0x86, 0x7d, 0xc4, 0x49, 0xdc, 0x4b, 0x7b, 0xd8, 0x05, 0x8b, 0xf8, - 0xef, 0xce, 0x38, 0xd6, 0x2f, 0x36, 0x8d, 0x58, 0xa1, 0x1e, 0x60, 0x45, - 0xd7, 0xf1, 0x67, 0x62, 0xce, 0x2c, 0x5c, 0xfa, 0x58, 0xad, 0xcf, 0x17, - 0xe5, 0xd6, 0xe2, 0xc5, 0xfe, 0x8f, 0x30, 0x39, 0x26, 0x35, 0x62, 0xff, - 0x41, 0xb0, 0xb3, 0xdc, 0x58, 0xbf, 0xb8, 0xc1, 0xcf, 0x4c, 0xb1, 0x7e, - 0xcc, 0x2e, 0xbc, 0xb1, 0x7f, 0xb3, 0xe5, 0x9e, 0xfb, 0xac, 0x50, 0xcf, - 0x6b, 0xc5, 0x15, 0x29, 0x94, 0x60, 0x97, 0x47, 0x2c, 0x64, 0x08, 0x44, - 0xde, 0x96, 0xd2, 0xc5, 0xff, 0x05, 0x3c, 0x78, 0x39, 0x62, 0xc5, 0xf6, - 0x10, 0x38, 0xb1, 0x43, 0x3f, 0x6c, 0x1c, 0xe1, 0xc5, 0xe3, 0xf3, 0x8b, - 0x14, 0xb1, 0x7b, 0xef, 0x12, 0xc5, 0x8e, 0xe6, 0xa9, 0x83, 0x2a, 0x4f, - 0xb5, 0x92, 0x2f, 0xfd, 0x9d, 0x43, 0xf3, 0xc3, 0x7f, 0x2b, 0x15, 0x2b, - 0xc0, 0x70, 0x5c, 0xea, 0x1a, 0x4f, 0x0c, 0x88, 0x8c, 0x74, 0xd3, 0xf6, - 0x82, 0x8d, 0x2f, 0x90, 0xc4, 0xf4, 0x26, 0xfb, 0x88, 0x2f, 0xa2, 0x29, - 0x3a, 0xc5, 0xff, 0x43, 0xed, 0x07, 0xd3, 0xf1, 0x62, 0xff, 0xc3, 0xfc, - 0xec, 0xe7, 0x38, 0xb7, 0x58, 0xbe, 0x04, 0xfe, 0x25, 0x8b, 0xbf, 0x19, - 0x87, 0xcc, 0x04, 0x2a, 0xe9, 0x19, 0xed, 0x09, 0xfb, 0xef, 0x33, 0x6c, - 0xb1, 0x68, 0xe5, 0x8b, 0xa1, 0xc5, 0x8b, 0x34, 0x0d, 0x6f, 0x42, 0xb7, - 0xde, 0x72, 0x09, 0x22, 0xc2, 0x58, 0xb4, 0xe1, 0xb5, 0xf9, 0x1d, 0xd9, - 0xa5, 0x8b, 0xfc, 0x5e, 0xe7, 0x5c, 0x68, 0xf5, 0x8b, 0xfb, 0x07, 0x1f, - 0x9d, 0x47, 0xac, 0x52, 0xc5, 0x31, 0xfc, 0x91, 0xc7, 0x71, 0xad, 0x41, - 0x55, 0x5b, 0xc3, 0xca, 0x3c, 0xa1, 0x94, 0x00, 0xb8, 0x44, 0xa2, 0x84, - 0x85, 0xe0, 0xfe, 0x25, 0x8b, 0xf7, 0x5c, 0x92, 0xd9, 0x62, 0xff, 0x85, - 0x17, 0x5c, 0x98, 0x9f, 0xb2, 0xc5, 0x61, 0xf4, 0x9c, 0xaa, 0xf7, 0x0c, - 0x89, 0x62, 0xff, 0xa6, 0x3f, 0x08, 0x50, 0xce, 0x2c, 0x5f, 0xe7, 0xe7, - 0xd8, 0xa6, 0x56, 0x2e, 0x17, 0xd6, 0x2f, 0xf1, 0x6f, 0xef, 0x34, 0x38, - 0xb1, 0x5b, 0x22, 0xe7, 0x47, 0x67, 0x31, 0x10, 0xc5, 0xff, 0xf6, 0x7f, - 0xa8, 0x72, 0x28, 0x39, 0x7a, 0x40, 0xb1, 0x7f, 0x49, 0xca, 0x7a, 0x82, - 0xc5, 0x3a, 0x20, 0x3e, 0xa5, 0x71, 0x6e, 0xb1, 0x7b, 0x5a, 0xc5, 0x8b, - 0xdd, 0x43, 0x8b, 0x16, 0x7e, 0x1b, 0xc0, 0x87, 0x6b, 0x0f, 0xef, 0xea, - 0x97, 0xfb, 0xdf, 0xc2, 0x26, 0xf2, 0xc5, 0xfe, 0x2c, 0xf6, 0xb4, 0x2d, - 0x96, 0x28, 0x07, 0xce, 0x46, 0x57, 0xdb, 0x1d, 0xbc, 0xb1, 0x7f, 0xe9, - 0x0b, 0xec, 0x3f, 0xc9, 0x6c, 0xb1, 0x52, 0x7c, 0x9a, 0x24, 0xbe, 0xd6, - 0x37, 0x72, 0xc5, 0xe7, 0x8e, 0x95, 0x8b, 0xec, 0x17, 0xb8, 0xb1, 0x4c, - 0x78, 0x44, 0x3f, 0x7a, 0x42, 0x82, 0xc5, 0xfe, 0xf7, 0x35, 0x9c, 0x9e, - 0x96, 0x2d, 0x8b, 0x15, 0x87, 0x8c, 0x46, 0xb7, 0xb5, 0x27, 0x58, 0xbd, - 0x8d, 0xba, 0xc5, 0x6e, 0x8b, 0xe7, 0x64, 0xd1, 0x01, 0x0e, 0xdf, 0xfa, - 0x42, 0x0f, 0x6e, 0x61, 0xe6, 0x3d, 0x62, 0xb6, 0x5c, 0x4f, 0x1c, 0x2f, - 0xb7, 0x84, 0xeb, 0xc2, 0x22, 0x28, 0x42, 0xe8, 0x84, 0xec, 0xff, 0x86, - 0xf7, 0x8f, 0x2e, 0xe7, 0x4b, 0x17, 0x05, 0x12, 0xc5, 0xd0, 0x8f, 0x58, - 0xbb, 0x38, 0xb1, 0x77, 0x76, 0x96, 0x2a, 0x57, 0x99, 0x60, 0x43, 0x93, - 0xa5, 0x0f, 0x09, 0xc3, 0x8c, 0xb0, 0xd0, 0x63, 0x7d, 0xc2, 0xf7, 0x7c, - 0x6b, 0x17, 0xff, 0x6b, 0x71, 0x30, 0xf0, 0x87, 0xf7, 0x58, 0xbf, 0x67, - 0xfa, 0x87, 0x16, 0x2f, 0xf8, 0x4d, 0xc1, 0xfc, 0x4c, 0x6a, 0xc5, 0xf8, - 0xf1, 0x9b, 0xf6, 0x09, 0x62, 0x9d, 0x12, 0xdf, 0x2a, 0x0c, 0xee, 0xe3, - 0xca, 0xc5, 0xf0, 0xc5, 0x3f, 0x58, 0xbf, 0x34, 0x78, 0x42, 0xe9, 0x62, - 0xf3, 0xf6, 0xc5, 0x8b, 0xfe, 0xdc, 0x9b, 0x9c, 0x14, 0xee, 0xb1, 0x58, - 0x8c, 0x1d, 0x0b, 0xfc, 0x8f, 0xc5, 0xc2, 0x1e, 0xbf, 0xdf, 0x7e, 0xbd, - 0xad, 0x4a, 0xc5, 0xc1, 0xee, 0xb1, 0x63, 0x56, 0x2f, 0xfc, 0xcf, 0xe8, - 0x61, 0xa5, 0x80, 0x58, 0xbf, 0x75, 0x02, 0xc1, 0xac, 0x5f, 0xcf, 0xe8, - 0xa1, 0x3d, 0x2c, 0x54, 0x11, 0x88, 0x68, 0xd7, 0xc4, 0xc8, 0xfb, 0xb1, - 0x4d, 0xd8, 0x12, 0xc5, 0x2c, 0x57, 0xcd, 0x27, 0x86, 0x2f, 0xf4, 0x27, - 0xac, 0x3c, 0xee, 0xb1, 0x7f, 0x60, 0x51, 0xf2, 0x39, 0x58, 0xb1, 0xd6, - 0x2b, 0x47, 0x86, 0xc6, 0x37, 0xf3, 0xf3, 0xef, 0x2e, 0xb1, 0x7f, 0xfe, - 0x2c, 0xcd, 0xff, 0x31, 0xe5, 0x9e, 0xc7, 0x02, 0xc5, 0x1d, 0x10, 0x4c, - 0x59, 0x73, 0xc7, 0x2c, 0x5f, 0xba, 0x9e, 0x34, 0x7a, 0xc5, 0xb0, 0xe7, - 0x8c, 0x43, 0x57, 0xe2, 0x8a, 0x7f, 0x2b, 0x17, 0xf6, 0x8d, 0xf7, 0xc5, - 0x05, 0x8a, 0x58, 0xbb, 0x06, 0xb1, 0x66, 0xe8, 0xd1, 0xf6, 0x0c, 0xa9, - 0x3f, 0xd0, 0x2a, 0x5f, 0xde, 0xe7, 0xc9, 0x80, 0xb1, 0x7b, 0xa6, 0x8f, - 0x58, 0xbf, 0xcd, 0xb7, 0xdf, 0xb6, 0x44, 0xb1, 0x5f, 0x3d, 0x80, 0x88, - 0x6a, 0x51, 0x53, 0x90, 0x86, 0xbd, 0xac, 0xf2, 0xc5, 0xd2, 0x4b, 0x16, - 0x06, 0x1b, 0x3e, 0x0e, 0xdf, 0xdf, 0x67, 0xe3, 0xf6, 0x58, 0xbb, 0x87, - 0x58, 0xad, 0x1e, 0x38, 0x8b, 0xee, 0x35, 0xd6, 0x2a, 0x51, 0x4f, 0x8d, - 0xac, 0x45, 0x7f, 0xec, 0x22, 0x6f, 0x19, 0x09, 0x3a, 0xc5, 0xb7, 0x58, - 0xaf, 0x9e, 0x88, 0x8f, 0xaf, 0xbc, 0x26, 0x0d, 0x62, 0xec, 0xf2, 0xc5, - 0x31, 0xbb, 0x8e, 0x24, 0xbf, 0xff, 0xe1, 0x14, 0x30, 0x7f, 0x9e, 0xde, - 0x2c, 0x9f, 0xbe, 0x12, 0xc5, 0x46, 0x8c, 0x93, 0x29, 0x18, 0x1c, 0x36, - 0xf2, 0x1e, 0x3b, 0xa4, 0xbc, 0x3e, 0x63, 0xdc, 0x22, 0x21, 0xd3, 0xc1, - 0xe1, 0x47, 0xf6, 0x86, 0x26, 0x04, 0x29, 0x4a, 0x19, 0x5c, 0x8c, 0x03, - 0xcf, 0xc2, 0x5d, 0x0c, 0x8e, 0xfe, 0x0a, 0x75, 0xa6, 0x89, 0x62, 0xff, - 0x87, 0x3b, 0x86, 0x00, 0x4f, 0x4b, 0x17, 0xa0, 0x2e, 0x96, 0x2f, 0x71, - 0xba, 0x58, 0xbd, 0xc6, 0x25, 0x8b, 0xfe, 0x6d, 0x61, 0xde, 0x3a, 0x4e, - 0xb1, 0x5b, 0xa3, 0x47, 0xa3, 0xd7, 0x1f, 0xe0, 0xf0, 0x87, 0x2f, 0x9b, - 0x91, 0xe1, 0xac, 0x5f, 0xba, 0x18, 0xdf, 0x8b, 0x17, 0xb5, 0x9c, 0x58, - 0xbe, 0x38, 0x70, 0x75, 0x8a, 0x93, 0xeb, 0xc2, 0xa7, 0x1d, 0xbe, 0xf4, - 0xf5, 0x05, 0x8b, 0xf9, 0xc1, 0x1c, 0x4e, 0x05, 0x8b, 0xb0, 0x0b, 0x15, - 0xb1, 0xf5, 0xe8, 0x90, 0x8c, 0x2f, 0x13, 0xca, 0xc5, 0xfb, 0x91, 0xd9, - 0xa3, 0x56, 0x2d, 0x3d, 0x1e, 0x47, 0x86, 0xef, 0x0a, 0x27, 0x58, 0xbf, - 0xf3, 0x3f, 0xb3, 0x40, 0x3b, 0x41, 0x62, 0xfe, 0xcf, 0x7d, 0x86, 0xeb, - 0x15, 0xa4, 0x44, 0xfc, 0x7a, 0x38, 0xfa, 0xf1, 0x1b, 0xf5, 0x8b, 0xc3, - 0xfb, 0xac, 0x53, 0x9f, 0x73, 0x19, 0x88, 0x7a, 0xfa, 0x75, 0xa9, 0x58, - 0xbf, 0x89, 0x82, 0xc2, 0x02, 0xc5, 0x6c, 0x79, 0xf1, 0x11, 0x5e, 0x29, - 0xd9, 0x62, 0x98, 0xf0, 0x48, 0x92, 0xfe, 0xcf, 0x61, 0xb3, 0xc5, 0x8b, - 0xde, 0xc0, 0xd6, 0x2a, 0x57, 0x4d, 0x32, 0x30, 0x13, 0x52, 0xff, 0x09, - 0x26, 0x84, 0xb9, 0x3b, 0xf2, 0x31, 0xf1, 0x42, 0xf6, 0x38, 0x83, 0xb8, - 0xba, 0xc2, 0x58, 0xbe, 0xee, 0x69, 0xd2, 0xc5, 0xfc, 0x53, 0x09, 0xed, - 0x2b, 0x16, 0x02, 0xc5, 0xf8, 0xd6, 0x21, 0x44, 0xb1, 0x52, 0x6f, 0x04, - 0x25, 0x7c, 0x27, 0xee, 0x3a, 0xc5, 0xfd, 0xdb, 0x4d, 0x2f, 0x1c, 0xb1, - 0x7f, 0x40, 0xb3, 0xfb, 0x4a, 0xc5, 0xb6, 0x58, 0xae, 0x8f, 0x05, 0xcb, - 0xad, 0x8b, 0x15, 0x89, 0xc6, 0xf4, 0x24, 0xe4, 0xb1, 0x35, 0x68, 0x80, - 0xe4, 0xcc, 0xe6, 0x44, 0x57, 0xdd, 0x6c, 0x31, 0x2c, 0x5b, 0x75, 0x8b, - 0xa3, 0xb6, 0x58, 0xbd, 0xd9, 0xf4, 0xb1, 0x43, 0x37, 0x7f, 0x1c, 0xbc, - 0xe2, 0xd2, 0xc5, 0xc5, 0x05, 0x8a, 0x94, 0x64, 0x8c, 0x9b, 0x13, 0xb8, - 0x43, 0xd8, 0x76, 0xf4, 0xb6, 0x96, 0x2c, 0xcb, 0x14, 0x33, 0x5a, 0x68, - 0xe5, 0xfd, 0x0f, 0xbf, 0x6c, 0x1a, 0xc5, 0x68, 0xf4, 0x88, 0x8a, 0xd2, - 0xb1, 0x67, 0x58, 0xb4, 0x6b, 0x58, 0xa6, 0x3d, 0xb2, 0x21, 0x08, 0x44, - 0x31, 0x1b, 0xd9, 0xa9, 0x58, 0xbe, 0x88, 0x29, 0x35, 0x62, 0xf8, 0xd0, - 0xe2, 0xe2, 0xc5, 0xbe, 0xb1, 0x69, 0x58, 0xb7, 0x9c, 0xd1, 0xf7, 0x09, - 0x56, 0x8f, 0xcc, 0x92, 0xad, 0x1c, 0xb1, 0x76, 0x6e, 0xb1, 0x4c, 0x6b, - 0x7c, 0x2b, 0x7a, 0x3a, 0x4e, 0xb1, 0x5b, 0x1e, 0x01, 0xa4, 0x17, 0xf9, - 0x8d, 0x0f, 0xff, 0x98, 0x2c, 0x54, 0xa7, 0x3b, 0x83, 0x8f, 0x09, 0x96, - 0x84, 0x74, 0x71, 0x25, 0xff, 0xbf, 0x83, 0x1b, 0xf5, 0x9d, 0x79, 0x62, - 0xfe, 0x30, 0x61, 0xb6, 0xb4, 0xb1, 0x69, 0x58, 0xad, 0x91, 0x06, 0x34, - 0x18, 0x8c, 0x6f, 0xf0, 0xf3, 0xdf, 0x92, 0xdd, 0x62, 0xf4, 0xbc, 0x72, - 0xc5, 0xf7, 0xb8, 0x19, 0xd6, 0x29, 0x8f, 0x10, 0x43, 0xf7, 0xff, 0x1b, - 0x9d, 0x73, 0xf9, 0xdb, 0x3d, 0xc5, 0x8b, 0x41, 0x62, 0xff, 0xcf, 0x27, - 0x3c, 0xbf, 0x30, 0x35, 0x8b, 0xff, 0x14, 0xf5, 0xc9, 0x3b, 0x75, 0xe5, - 0x8a, 0x35, 0x1b, 0x31, 0xe9, 0x3c, 0x12, 0xec, 0x7d, 0x7f, 0xff, 0xc0, - 0x92, 0xdd, 0xbe, 0x4c, 0x0d, 0x4e, 0xf9, 0xad, 0x3a, 0xc5, 0xfe, 0xe7, - 0x66, 0xe4, 0x94, 0x4b, 0x17, 0xf1, 0xbe, 0x7f, 0x66, 0x96, 0x2d, 0x12, - 0xc5, 0xff, 0x0c, 0xcc, 0xe4, 0xe6, 0x80, 0xb1, 0x7b, 0xe1, 0xf1, 0x62, - 0xa4, 0xfb, 0x30, 0x4d, 0x8e, 0xaf, 0xb9, 0xc7, 0x3a, 0xc5, 0xee, 0x7d, - 0xd6, 0x2f, 0xe1, 0xf8, 0x9b, 0xae, 0x2c, 0x52, 0xc5, 0x39, 0xbb, 0xee, - 0x2f, 0xa5, 0x8b, 0xfb, 0x8f, 0xd6, 0x75, 0xe5, 0x8a, 0xe8, 0xde, 0x78, - 0x32, 0xe3, 0x8d, 0x62, 0xed, 0xa5, 0x62, 0xa5, 0x16, 0x2c, 0xbf, 0xe2, - 0x21, 0x0c, 0x5c, 0xf0, 0x58, 0xbf, 0x04, 0xda, 0x6e, 0x96, 0x2f, 0x4e, - 0x74, 0xb1, 0x52, 0x78, 0xe4, 0x55, 0x6e, 0xe5, 0x8b, 0xec, 0xe3, 0x81, - 0x62, 0x96, 0x2d, 0x12, 0xc4, 0x44, 0xca, 0x95, 0xd9, 0x4d, 0x8c, 0x86, - 0xf1, 0x90, 0xfa, 0xe9, 0x0e, 0x26, 0x6d, 0x1b, 0x7e, 0x13, 0x6c, 0x58, - 0x02, 0x32, 0x8c, 0x27, 0x87, 0x7e, 0x5e, 0x08, 0x82, 0x38, 0x54, 0x32, - 0xeb, 0xfe, 0x71, 0x93, 0x7a, 0x0f, 0xd9, 0x62, 0xfa, 0x1f, 0xc3, 0xac, - 0x5f, 0xf9, 0xb7, 0xfb, 0x0f, 0xf2, 0x5b, 0x2c, 0x57, 0x47, 0xc6, 0x72, - 0x3b, 0xfe, 0x83, 0xf8, 0x13, 0xf0, 0xf8, 0xb1, 0x7e, 0x87, 0xe4, 0x8d, - 0x58, 0xb8, 0x40, 0x58, 0xa9, 0x4c, 0xf3, 0x21, 0x3b, 0x11, 0x1b, 0x1d, - 0xf7, 0x14, 0xd7, 0x78, 0xfc, 0xc9, 0x3d, 0xeb, 0xd4, 0x69, 0x08, 0x48, - 0xd9, 0xd3, 0xbe, 0xe1, 0x81, 0xdf, 0x54, 0x29, 0x95, 0xbb, 0xb4, 0x63, - 0x10, 0x8f, 0xb0, 0x73, 0x90, 0xb9, 0x48, 0x06, 0x36, 0x3d, 0x2d, 0xe5, - 0xdb, 0xf5, 0x29, 0xad, 0xe5, 0xd9, 0x47, 0xc6, 0x1b, 0x14, 0xa6, 0xed, - 0x4b, 0x6f, 0x3c, 0xb7, 0x8f, 0xd2, 0x81, 0x5a, 0x7c, 0xf8, 0x12, 0xd8, - 0xbb, 0xf7, 0x02, 0x9e, 0xed, 0xe5, 0x26, 0xcf, 0xd3, 0xca, 0xa2, 0x94, - 0x73, 0xda, 0x33, 0x90, 0xa3, 0x24, 0x8e, 0x8f, 0x64, 0x39, 0xe6, 0xbe, - 0xe9, 0x45, 0x97, 0xfb, 0xbe, 0xfb, 0xd6, 0xf7, 0xe7, 0xcb, 0x17, 0x6f, - 0x2b, 0x17, 0xcd, 0xbc, 0xe9, 0x62, 0x82, 0x37, 0x7d, 0xc3, 0x17, 0xe9, - 0xeb, 0x1f, 0xeb, 0x17, 0x05, 0x8b, 0x17, 0xf0, 0x27, 0xfd, 0x43, 0x8b, - 0x17, 0xf9, 0xfa, 0x03, 0x7f, 0x23, 0x96, 0x2f, 0xfc, 0xf3, 0xef, 0xb1, - 0xb8, 0x40, 0x58, 0xbf, 0xfc, 0xda, 0x31, 0xbc, 0x67, 0xba, 0xdd, 0xc9, - 0x62, 0xb7, 0x4c, 0xcd, 0xca, 0x22, 0x18, 0xd1, 0x87, 0xcd, 0xfb, 0x1f, - 0x5f, 0xb9, 0x16, 0x69, 0x96, 0x2f, 0xa7, 0x76, 0x65, 0x8b, 0xda, 0xc8, - 0x2c, 0x5c, 0xe7, 0x58, 0xa7, 0x3f, 0xf3, 0x94, 0xf8, 0x8b, 0xb8, 0x76, - 0xfe, 0xcf, 0x4b, 0x9f, 0x8b, 0x17, 0xa4, 0x0e, 0xb1, 0x7f, 0x4c, 0x33, - 0x59, 0xc5, 0x8b, 0xf7, 0xf3, 0xd3, 0xf5, 0x8b, 0xf1, 0x78, 0x85, 0xb2, - 0xc5, 0x0c, 0xff, 0x98, 0xb4, 0x45, 0x17, 0xff, 0xb5, 0xa1, 0x43, 0x59, - 0x3d, 0x41, 0xce, 0xb1, 0x7c, 0x6f, 0x9f, 0x4b, 0x17, 0x44, 0xeb, 0x15, - 0x88, 0x88, 0x74, 0xc6, 0x24, 0xbd, 0xc0, 0xf8, 0xb1, 0x7f, 0xfe, 0xc9, - 0xea, 0x1c, 0xfe, 0x7b, 0x84, 0xdd, 0x79, 0x62, 0xfe, 0x3e, 0xb5, 0x9e, - 0xe2, 0xc5, 0xff, 0x0b, 0x68, 0xcf, 0xb1, 0xdf, 0x8b, 0x16, 0x84, 0x9f, - 0x6f, 0x8b, 0xef, 0x6e, 0xdd, 0x96, 0x2f, 0xf8, 0xf3, 0xee, 0x6b, 0x4e, - 0x12, 0xc5, 0xff, 0xbe, 0x2e, 0xb9, 0x27, 0x6e, 0xbc, 0xb1, 0x6c, 0x35, - 0x38, 0x8e, 0xa1, 0x89, 0xa2, 0x70, 0x10, 0x78, 0xee, 0xff, 0xde, 0x93, - 0xf2, 0x5f, 0x66, 0xf2, 0xc5, 0xfc, 0xd1, 0xed, 0x9d, 0x79, 0x62, 0xba, - 0x3f, 0x0f, 0x9f, 0xdf, 0xd8, 0x37, 0xe8, 0x99, 0x62, 0xf9, 0xcd, 0x9e, - 0xe5, 0x8a, 0x63, 0xd3, 0x22, 0xda, 0xc4, 0x4b, 0x09, 0xda, 0xc6, 0xac, - 0x5f, 0xb3, 0xc5, 0x3b, 0x2c, 0x50, 0xcd, 0xde, 0x84, 0xef, 0xff, 0xcc, - 0xfa, 0x9e, 0x7e, 0x5c, 0xb3, 0x53, 0xd9, 0x62, 0xfa, 0x7d, 0x06, 0x58, - 0xbe, 0xd7, 0x74, 0x92, 0xc5, 0x89, 0x62, 0xa4, 0xdb, 0x04, 0x4b, 0x7f, - 0xdc, 0xec, 0xd1, 0x38, 0xc5, 0xa5, 0x8b, 0xff, 0xfe, 0x90, 0x1d, 0xa0, - 0x59, 0xd7, 0x9b, 0xf3, 0xee, 0x0a, 0x3d, 0x62, 0xe2, 0x95, 0x8a, 0x89, - 0x17, 0xbf, 0x3d, 0xf3, 0x55, 0xdf, 0x8c, 0x8d, 0x6c, 0x9d, 0x29, 0x7b, - 0xc8, 0xd6, 0x1e, 0x1b, 0x51, 0x1f, 0x68, 0xb4, 0xf0, 0x9a, 0xfc, 0x2d, - 0x98, 0xb4, 0xa3, 0xa7, 0xe4, 0x6b, 0xbe, 0x5d, 0x11, 0x0f, 0x65, 0x40, - 0x96, 0x03, 0x86, 0xf5, 0x46, 0x33, 0x63, 0x26, 0x98, 0xe9, 0x7f, 0x66, - 0xb7, 0x66, 0xdd, 0x52, 0x66, 0x97, 0xff, 0xe6, 0xd3, 0x42, 0x33, 0x72, - 0xcd, 0xb5, 0xd4, 0x8d, 0x62, 0xec, 0x3a, 0xc5, 0xf8, 0xa7, 0xd0, 0x12, - 0xc5, 0xf7, 0xb5, 0x3c, 0x58, 0xad, 0xcf, 0x8b, 0xe2, 0xe4, 0x51, 0x7f, - 0xb3, 0x9c, 0x90, 0x07, 0xb2, 0xc5, 0xff, 0xf4, 0x27, 0x91, 0x42, 0x4f, - 0xd4, 0x39, 0x9b, 0xac, 0x5f, 0x9f, 0x41, 0x67, 0xd6, 0x2f, 0x88, 0x4d, - 0x12, 0xc5, 0xf7, 0xdd, 0x89, 0x62, 0xba, 0x46, 0x0f, 0xd5, 0x00, 0x53, - 0xe2, 0x3b, 0xff, 0xef, 0xbf, 0x1f, 0xc5, 0x9d, 0x87, 0x31, 0x7d, 0x62, - 0xff, 0x02, 0x78, 0xed, 0xd0, 0x4b, 0x17, 0xed, 0x3e, 0xc2, 0x8f, 0x58, - 0xbd, 0xf7, 0x1a, 0xc5, 0x85, 0x87, 0x95, 0x11, 0x6d, 0xe8, 0x98, 0x6b, - 0x17, 0xfe, 0xc6, 0x8b, 0xaf, 0x18, 0x13, 0xca, 0xc5, 0x49, 0xf0, 0x68, - 0x7a, 0xff, 0x66, 0x1a, 0x32, 0x7d, 0x96, 0x2f, 0xfe, 0x38, 0xbf, 0xf6, - 0x37, 0x35, 0x9e, 0x58, 0xa1, 0x9f, 0xd1, 0xcd, 0x2f, 0xfe, 0x9d, 0xf9, - 0x93, 0x16, 0x6d, 0x84, 0xb1, 0x7f, 0xb3, 0x93, 0xad, 0x3f, 0x65, 0x8a, - 0xd8, 0xfe, 0xbe, 0x8b, 0x58, 0x8b, 0xf6, 0x84, 0xe5, 0xe6, 0xcf, 0x2c, - 0x5f, 0xfb, 0x8f, 0xac, 0xf4, 0x93, 0x81, 0x62, 0xff, 0xe0, 0x49, 0x6e, - 0xd0, 0x78, 0xec, 0xd2, 0xc5, 0xff, 0x3c, 0x1f, 0xe2, 0x39, 0xdd, 0x62, - 0xfe, 0x62, 0x07, 0xa6, 0x25, 0x8a, 0xe9, 0x15, 0xde, 0x47, 0x8e, 0x39, - 0xbe, 0xd7, 0xda, 0x32, 0x57, 0x5e, 0x06, 0x5f, 0x90, 0xf7, 0xdc, 0xf9, - 0xd4, 0x8e, 0xff, 0xf8, 0x44, 0x14, 0x6b, 0x5c, 0x26, 0xf0, 0xe0, 0x70, - 0xeb, 0xbd, 0x10, 0x83, 0x58, 0xbf, 0xec, 0x8a, 0x0d, 0xad, 0xbe, 0x25, - 0x8b, 0xfd, 0xef, 0xe3, 0xec, 0x79, 0x58, 0xbe, 0xce, 0xcd, 0xa5, 0x8b, - 0xf1, 0x4e, 0x7d, 0x96, 0x28, 0x07, 0x95, 0xe2, 0x4b, 0xff, 0x4e, 0x81, - 0xee, 0x7f, 0x1c, 0x6b, 0x16, 0x65, 0x8b, 0x9f, 0xeb, 0x15, 0x1b, 0x9a, - 0x88, 0x08, 0xdb, 0x65, 0x8b, 0xd0, 0x9e, 0x96, 0x2d, 0x92, 0x6c, 0x62, - 0x13, 0xbe, 0x72, 0x6d, 0x96, 0x2f, 0xfb, 0xee, 0xc0, 0xc1, 0x6b, 0x65, - 0x8b, 0xfb, 0x60, 0xe3, 0x98, 0x80, 0xb1, 0x7f, 0xe6, 0x20, 0x67, 0xa4, - 0x9c, 0x0b, 0x15, 0x27, 0xdf, 0x1c, 0x67, 0x52, 0xab, 0x3c, 0x64, 0x18, - 0x79, 0xd3, 0xf7, 0xc8, 0x99, 0x9c, 0x95, 0xf8, 0x4d, 0xe2, 0x20, 0xe1, - 0x53, 0x7c, 0x43, 0x0f, 0xa5, 0x8b, 0x7d, 0x62, 0xfd, 0xf9, 0xe7, 0xdd, - 0x62, 0xff, 0xcf, 0xe9, 0x39, 0x31, 0xbf, 0x75, 0x8b, 0xa7, 0xeb, 0x17, - 0xf9, 0xbd, 0x09, 0x37, 0x09, 0x62, 0xfe, 0x2c, 0xed, 0xf6, 0x82, 0xc5, - 0xe6, 0xd7, 0x16, 0x2d, 0x19, 0x29, 0x99, 0xec, 0x4b, 0x82, 0x51, 0x14, - 0x7c, 0xf8, 0x85, 0xfc, 0x66, 0x11, 0x7d, 0x46, 0x2a, 0x3e, 0xee, 0x8f, - 0x0e, 0xfa, 0x76, 0x21, 0x2c, 0x5f, 0xff, 0xec, 0xf3, 0xf3, 0xdf, 0xc3, - 0x81, 0xb5, 0x9d, 0xb0, 0x6b, 0x17, 0xf8, 0x4d, 0xb6, 0xb0, 0xf1, 0x9f, - 0x44, 0x2f, 0x08, 0xea, 0x31, 0x9a, 0x97, 0xb9, 0xe3, 0xcf, 0x1a, 0xb4, - 0xee, 0xa9, 0x42, 0xda, 0xee, 0xf3, 0xa5, 0x8b, 0xc7, 0x0f, 0x4b, 0x16, - 0x3a, 0xc5, 0xe3, 0xb1, 0xd6, 0x29, 0xcd, 0x7b, 0x09, 0x5f, 0xc2, 0x36, - 0x42, 0x11, 0xab, 0x14, 0xe8, 0x9f, 0x89, 0x38, 0x21, 0xfb, 0x9c, 0x25, - 0x8b, 0x83, 0x3a, 0xc5, 0xf6, 0x7b, 0x91, 0xeb, 0x16, 0x98, 0x1b, 0xf0, - 0x86, 0x6b, 0xe7, 0xfc, 0x4a, 0xf6, 0x75, 0x8b, 0xf4, 0xfa, 0x39, 0xce, - 0xb1, 0x47, 0x37, 0x80, 0x11, 0xbb, 0x86, 0xac, 0x5f, 0x70, 0xa4, 0x25, - 0x8b, 0xdb, 0xe7, 0xd6, 0x2e, 0xe4, 0xac, 0x5f, 0x85, 0xcf, 0x4f, 0x16, - 0x2a, 0x07, 0x81, 0x10, 0xbd, 0xc2, 0xe2, 0xc5, 0xf7, 0x4e, 0x2e, 0x96, - 0x2a, 0x51, 0x7c, 0xeb, 0xd1, 0x11, 0x88, 0x62, 0xfe, 0x29, 0x3f, 0x1f, - 0x65, 0x8b, 0xc5, 0xa1, 0x2c, 0x54, 0x0f, 0x2d, 0xcb, 0xae, 0x0b, 0x4b, - 0x17, 0xe1, 0x3f, 0x7c, 0xef, 0x7b, 0xc5, 0x8b, 0xcf, 0x87, 0x58, 0xbc, - 0x2e, 0xb8, 0xb1, 0x7e, 0x0f, 0xc5, 0x20, 0x58, 0xa8, 0x8f, 0x93, 0x43, - 0x9d, 0x87, 0xef, 0xdb, 0x0a, 0x02, 0x95, 0x8a, 0x93, 0xdc, 0x73, 0x2b, - 0xe7, 0x3b, 0xf7, 0x2c, 0x5c, 0x20, 0xd6, 0x2f, 0x16, 0x71, 0x62, 0xa4, - 0xf6, 0xa2, 0x25, 0x0c, 0x66, 0xe1, 0x6e, 0xb1, 0x7f, 0x75, 0x08, 0xb3, - 0xfc, 0x58, 0xba, 0x42, 0x58, 0xa9, 0x3c, 0x97, 0x31, 0xbe, 0xfb, 0xf5, - 0xc5, 0x8b, 0xa7, 0xa5, 0x8b, 0xa7, 0xeb, 0x17, 0xde, 0x76, 0x0d, 0x62, - 0xd1, 0xcb, 0x16, 0x35, 0x62, 0x9c, 0xd4, 0x08, 0x56, 0xa3, 0xd1, 0x7d, - 0x11, 0x21, 0xc6, 0x38, 0x2e, 0x1a, 0x5d, 0xf3, 0xc7, 0x38, 0x16, 0x2e, - 0x0a, 0x56, 0x2f, 0x79, 0xbe, 0xb1, 0x73, 0x41, 0x62, 0x9c, 0xda, 0x1c, - 0x76, 0xc6, 0xac, 0x51, 0xa6, 0xcf, 0x44, 0x17, 0x1e, 0x33, 0xbc, 0x5f, - 0x9d, 0x98, 0x5e, 0x8e, 0x15, 0xf8, 0xba, 0x69, 0x0f, 0x43, 0x2f, 0x0e, - 0x18, 0xa1, 0x0f, 0xa2, 0x13, 0x8c, 0xfe, 0x1f, 0x2c, 0xf5, 0xc3, 0x0f, - 0x31, 0x0a, 0x1b, 0xdd, 0x93, 0xc2, 0x25, 0x0d, 0xfe, 0xec, 0x75, 0x8b, - 0x0d, 0x62, 0xc7, 0x58, 0xac, 0x34, 0x8c, 0x25, 0x62, 0x58, 0xbf, 0xe8, - 0x46, 0x66, 0xb7, 0x66, 0xdd, 0x52, 0x40, 0x15, 0x87, 0xb8, 0xc2, 0x37, - 0xf9, 0xcf, 0x31, 0xff, 0xcd, 0x96, 0x2f, 0xdb, 0xc8, 0x05, 0xdc, 0xb1, - 0x79, 0xb4, 0x6a, 0xc5, 0xff, 0xd1, 0xcc, 0x40, 0xcf, 0x49, 0x38, 0x16, - 0x2d, 0x19, 0x04, 0xe7, 0x30, 0xe8, 0xef, 0x7f, 0x20, 0x63, 0x70, 0x8b, - 0x43, 0x1e, 0xb7, 0x65, 0x8b, 0xec, 0xf0, 0x7b, 0x2c, 0x5f, 0xbd, 0xc9, - 0x1c, 0xac, 0x56, 0x1f, 0x09, 0xc5, 0x08, 0x96, 0xe8, 0x1d, 0x62, 0xfe, - 0x7e, 0x44, 0x52, 0x35, 0x8a, 0x58, 0xbb, 0xa8, 0x2c, 0x57, 0x46, 0x97, - 0x41, 0x94, 0x33, 0xf5, 0x65, 0x3b, 0xd2, 0x5b, 0xac, 0x5e, 0xf3, 0x69, - 0x62, 0xf8, 0x47, 0xcf, 0xac, 0x5a, 0x7a, 0x3c, 0x0f, 0x8e, 0xdd, 0x01, - 0xac, 0x5f, 0xfa, 0x70, 0xbd, 0xc9, 0xf4, 0x8d, 0x62, 0xfd, 0x25, 0x9d, - 0x79, 0x62, 0xfb, 0x90, 0x70, 0x2c, 0x51, 0xcf, 0x2f, 0xc5, 0x16, 0xec, - 0xb1, 0x6f, 0x2c, 0x54, 0x0d, 0x36, 0xe2, 0x97, 0xf3, 0xfe, 0x4a, 0x7c, - 0xb1, 0x68, 0xe5, 0x8b, 0x01, 0x62, 0xa4, 0xd3, 0x88, 0x56, 0xf0, 0xd9, - 0xd6, 0x2a, 0x55, 0x7c, 0xc0, 0xb7, 0x21, 0x1a, 0x69, 0x0b, 0xae, 0xe8, - 0xa0, 0xe3, 0x0d, 0x08, 0x82, 0x48, 0xe1, 0x17, 0x94, 0xc4, 0x41, 0x7a, - 0x29, 0x82, 0xc5, 0xfe, 0x7f, 0xb1, 0x7b, 0x37, 0x58, 0xb7, 0x96, 0x2a, - 0x07, 0x8b, 0xa3, 0x3b, 0x46, 0x62, 0x21, 0x78, 0xc7, 0x7f, 0xbb, 0xcf, - 0xb6, 0xc5, 0x30, 0x58, 0xbf, 0xdf, 0xce, 0x81, 0x25, 0xba, 0xc5, 0xff, - 0x4f, 0xbf, 0x87, 0xcd, 0x62, 0xc5, 0xf4, 0x59, 0x9b, 0xac, 0x5f, 0xbc, - 0x6b, 0x72, 0x33, 0xbd, 0x46, 0x56, 0x1c, 0xe8, 0xd4, 0x33, 0x8a, 0x82, - 0x6b, 0x01, 0x43, 0xd6, 0xfe, 0x8d, 0x5d, 0xec, 0x6a, 0x07, 0x31, 0x62, - 0xfe, 0x6f, 0x75, 0x0c, 0xf2, 0xc5, 0xef, 0x72, 0x33, 0xbe, 0xcf, 0xbc, - 0x34, 0x0b, 0xff, 0x73, 0xef, 0x19, 0x3d, 0xbb, 0x0a, 0x0b, 0x15, 0x18, - 0xae, 0xa6, 0x65, 0x45, 0x34, 0x26, 0x44, 0x7f, 0x7d, 0xf2, 0x6f, 0x2c, - 0x5d, 0xcf, 0x2c, 0x5a, 0x56, 0x2d, 0xf5, 0x8a, 0x39, 0xa3, 0x10, 0x8d, - 0xf7, 0x7b, 0xdb, 0xae, 0x2c, 0x5e, 0x1e, 0x1d, 0x62, 0xff, 0xef, 0x38, - 0xb8, 0x19, 0xf5, 0xa7, 0x35, 0x62, 0xff, 0xfd, 0xda, 0x7e, 0xe3, 0xfc, - 0xc3, 0x8d, 0xf7, 0xe2, 0xc5, 0xff, 0xc7, 0x6d, 0x6d, 0xfc, 0x89, 0x88, - 0xd5, 0x8b, 0xfe, 0x9f, 0xce, 0xda, 0x9c, 0x1a, 0xc5, 0xfd, 0xc9, 0x39, - 0x4c, 0x4b, 0x16, 0xfa, 0xc5, 0xe0, 0xca, 0x25, 0x8b, 0x7b, 0x0d, 0x88, - 0x04, 0xae, 0xcd, 0x96, 0x2b, 0x0d, 0xf1, 0x13, 0x5f, 0xff, 0x39, 0x80, - 0x00, 0xa7, 0x9a, 0x30, 0xcf, 0xc7, 0x2c, 0x5f, 0x39, 0xe6, 0x25, 0x8a, - 0xd9, 0x53, 0x9c, 0x07, 0x5d, 0x20, 0xea, 0xff, 0x47, 0x01, 0xc9, 0x42, - 0x74, 0x43, 0xf1, 0xcb, 0x17, 0xff, 0x85, 0xa8, 0x67, 0x1c, 0x5d, 0xf9, - 0x49, 0xd6, 0x2d, 0xc5, 0x8b, 0xf7, 0x27, 0xef, 0xd9, 0x62, 0xfe, 0xfb, - 0x37, 0xe6, 0x0b, 0x17, 0xc3, 0x72, 0x02, 0xc5, 0x18, 0x88, 0xbc, 0x12, - 0x72, 0xa6, 0x2d, 0xbf, 0xfe, 0xd6, 0xc3, 0xfb, 0xeb, 0x93, 0xa8, 0x9f, - 0xeb, 0x17, 0xfe, 0x07, 0x09, 0x8d, 0xce, 0xcf, 0xa5, 0x8b, 0xff, 0x9f, - 0xe2, 0xfb, 0x3f, 0x5c, 0x93, 0x56, 0x2b, 0x11, 0x0f, 0xe4, 0x1b, 0xc2, - 0x1e, 0x2c, 0x5f, 0xda, 0xf1, 0x49, 0xf8, 0xb1, 0x7f, 0xfe, 0xd0, 0xd8, - 0x8d, 0xfe, 0x47, 0xe9, 0xcf, 0x26, 0xac, 0x56, 0x22, 0x20, 0x45, 0xd6, - 0x8e, 0x58, 0xa9, 0x4f, 0x63, 0x21, 0xb4, 0xe4, 0x5f, 0x85, 0x28, 0x08, - 0xaf, 0x36, 0xb1, 0x62, 0xe1, 0x01, 0x62, 0xf7, 0x24, 0x0b, 0x17, 0xd0, - 0x72, 0xc5, 0x8a, 0xf1, 0xbe, 0x08, 0x76, 0xfb, 0x76, 0x6d, 0xd5, 0x26, - 0xf9, 0x7a, 0x39, 0xbc, 0xb1, 0x7c, 0x1e, 0x16, 0xeb, 0x17, 0xe9, 0x38, - 0x1b, 0xcb, 0x17, 0xfd, 0x3b, 0xc9, 0xf0, 0x01, 0x84, 0xb1, 0x67, 0xd2, - 0x22, 0x08, 0x93, 0xb8, 0xa2, 0xf4, 0x58, 0x05, 0x8b, 0xf0, 0x7b, 0x7e, - 0x74, 0xb1, 0x5b, 0xa7, 0xdb, 0xd0, 0xe3, 0xab, 0x68, 0x88, 0xe6, 0x3f, - 0x85, 0x43, 0x1b, 0xf8, 0x7a, 0xff, 0x9f, 0xf3, 0xd4, 0xc7, 0xe7, 0x4b, - 0x17, 0xf8, 0x3d, 0x98, 0x7f, 0x9e, 0x2c, 0x5f, 0xff, 0xf3, 0x44, 0x37, - 0xd7, 0xf0, 0x65, 0x3b, 0xb6, 0xc5, 0x27, 0x58, 0xbf, 0xed, 0x0b, 0x9f, - 0x68, 0x01, 0xd6, 0x2c, 0xe0, 0x45, 0x0f, 0x99, 0xef, 0xbd, 0xc6, 0xf2, - 0xc5, 0xff, 0xb5, 0x91, 0xf1, 0x7d, 0x8e, 0xfc, 0x58, 0xbb, 0x36, 0xc3, - 0xe6, 0xd1, 0x1d, 0x6e, 0x9c, 0x97, 0xe1, 0xae, 0x50, 0x8e, 0xbf, 0x7a, - 0x76, 0xc1, 0xac, 0x58, 0x25, 0x8b, 0xfe, 0x62, 0xdf, 0x93, 0xf6, 0x8f, - 0x58, 0xa8, 0x1f, 0xc1, 0xa5, 0x3e, 0x13, 0xbc, 0x4f, 0x12, 0xc5, 0xfd, - 0x91, 0x11, 0x37, 0xd6, 0x2b, 0x0f, 0x28, 0xe3, 0xb7, 0xcf, 0x9a, 0xec, - 0xb1, 0x7d, 0xd4, 0x36, 0x95, 0x8b, 0xd2, 0x14, 0x72, 0xc5, 0x61, 0xe3, - 0x68, 0x96, 0xfb, 0x7f, 0x66, 0xeb, 0x17, 0xa3, 0x85, 0x2b, 0x14, 0xb1, - 0x58, 0x6b, 0x08, 0x82, 0xb0, 0xfc, 0x3c, 0xa3, 0x7b, 0xf3, 0xa5, 0x8b, - 0xf7, 0xdf, 0x5f, 0x65, 0x8b, 0xff, 0xdf, 0x9d, 0xbd, 0x9f, 0x2c, 0xf7, - 0xdd, 0x62, 0xf1, 0xf0, 0x6b, 0x16, 0x3a, 0xc5, 0xfe, 0x9d, 0x87, 0x81, - 0x72, 0x32, 0x51, 0x7d, 0x83, 0xb1, 0x14, 0x32, 0x50, 0x63, 0xb5, 0x04, - 0xf9, 0xb2, 0x12, 0x3f, 0x86, 0xfd, 0xd9, 0xa5, 0x8b, 0xc7, 0xce, 0x96, - 0x2f, 0xfe, 0x26, 0x07, 0x07, 0x3e, 0xe3, 0x6c, 0xb1, 0x5b, 0x1f, 0xd0, - 0xc5, 0xfc, 0x3d, 0x79, 0xfd, 0xc5, 0x8b, 0xda, 0x14, 0x4b, 0x17, 0xb6, - 0x63, 0xe8, 0xde, 0x78, 0x76, 0xfa, 0x1c, 0x0f, 0x8b, 0x15, 0x28, 0xc4, - 0x76, 0xcf, 0x19, 0xdf, 0x67, 0xb9, 0x8b, 0x17, 0xf3, 0x74, 0x37, 0x2d, - 0x96, 0x2f, 0xf6, 0x47, 0xe9, 0xcf, 0x26, 0xac, 0x54, 0xa2, 0x23, 0x44, - 0x5f, 0x2f, 0xbd, 0xcf, 0x8d, 0x62, 0xfc, 0x1f, 0x8a, 0x40, 0xb1, 0x47, - 0x3c, 0x7e, 0xc3, 0xd7, 0xfb, 0x76, 0xd6, 0xdd, 0xbc, 0x25, 0x8b, 0x8a, - 0x56, 0x2f, 0xfe, 0xf7, 0x1f, 0x92, 0x59, 0xef, 0xba, 0xc5, 0xff, 0x9b, - 0xbb, 0x4e, 0x6e, 0x7d, 0xe0, 0xb1, 0x7f, 0xe0, 0x08, 0xb7, 0x61, 0xfe, - 0x78, 0xb1, 0x70, 0xb1, 0x62, 0xff, 0x80, 0xfe, 0x26, 0xf4, 0x8d, 0x62, - 0xf1, 0x67, 0xd6, 0x2b, 0x74, 0xdf, 0xf4, 0x72, 0x71, 0x6f, 0xa1, 0x81, - 0x08, 0x90, 0x38, 0x2f, 0xd8, 0xe2, 0xff, 0x9f, 0x98, 0x39, 0x89, 0xce, - 0xb1, 0x7e, 0x1c, 0xc7, 0x88, 0xeb, 0x17, 0xfe, 0xcd, 0xb6, 0x10, 0xe7, - 0x52, 0x35, 0x8b, 0xf7, 0x9f, 0x53, 0xd9, 0x62, 0xff, 0x9b, 0x93, 0x84, - 0x3f, 0xca, 0xc5, 0xf9, 0xa3, 0xce, 0xde, 0x58, 0xbf, 0xdf, 0x91, 0xbf, - 0x69, 0x1a, 0xc5, 0xff, 0x6b, 0x3a, 0xf9, 0x34, 0x7e, 0xcb, 0x16, 0xc1, - 0x9f, 0x99, 0xcd, 0x6d, 0xcd, 0x23, 0xf3, 0xe6, 0xe5, 0x09, 0xea, 0x24, - 0xd8, 0x39, 0x19, 0x35, 0x4a, 0xe2, 0x36, 0x47, 0x47, 0xbb, 0xa3, 0x9c, - 0xe8, 0xb1, 0xa3, 0xa1, 0xbf, 0xd3, 0xee, 0x68, 0xa6, 0x25, 0x8b, 0xf0, - 0x79, 0xf6, 0x3a, 0xc5, 0xc2, 0x35, 0x62, 0xf8, 0xf1, 0x48, 0x6b, 0x17, - 0x4f, 0xd6, 0x2f, 0xfd, 0xdc, 0xc7, 0x0f, 0x40, 0x3b, 0xf1, 0x62, 0xb6, - 0x47, 0xb6, 0xe6, 0x87, 0x29, 0x61, 0x92, 0x25, 0xee, 0x17, 0xbf, 0x84, - 0x07, 0x21, 0x69, 0x62, 0xf3, 0x97, 0x96, 0x2e, 0x17, 0x4b, 0x17, 0xfc, - 0xd0, 0xf7, 0x30, 0x2f, 0xba, 0xc5, 0xee, 0x9b, 0xeb, 0x14, 0x74, 0x5d, - 0xb1, 0x70, 0x07, 0x08, 0x64, 0x47, 0x57, 0xf7, 0x30, 0x7f, 0x7d, 0x2c, - 0x5f, 0xe9, 0xe6, 0x75, 0xe7, 0xd2, 0xc5, 0xfc, 0xdb, 0x76, 0xc2, 0xd9, - 0x62, 0xa2, 0x44, 0x9e, 0x8b, 0xa3, 0x8d, 0x2f, 0xf7, 0xc4, 0x43, 0xfb, - 0x84, 0xb1, 0x7f, 0xf4, 0x42, 0x1b, 0x10, 0x0c, 0x73, 0xf9, 0x62, 0xbe, - 0x7f, 0x9e, 0x35, 0xbf, 0xfa, 0x40, 0x29, 0x0f, 0x72, 0xcf, 0xe2, 0xc5, - 0xed, 0x4f, 0x96, 0x2f, 0xfd, 0x3e, 0x13, 0x6d, 0x3f, 0x93, 0xac, 0x5f, - 0xd1, 0x30, 0xfe, 0xe7, 0x58, 0xbf, 0xbc, 0xf8, 0x39, 0x3a, 0xc5, 0x74, - 0x89, 0xbf, 0x1f, 0x84, 0x5f, 0x7c, 0xdb, 0x08, 0x96, 0x2e, 0xe1, 0x2c, - 0x5f, 0xdd, 0x72, 0x77, 0xc3, 0xac, 0x5f, 0x1f, 0x7c, 0x25, 0x8a, 0x95, - 0x51, 0xd9, 0x0b, 0x07, 0x22, 0xd2, 0x2b, 0x42, 0xe0, 0x8c, 0xb8, 0x46, - 0x21, 0x70, 0xcc, 0x29, 0x62, 0xff, 0xf6, 0x39, 0xbf, 0xcc, 0x2d, 0xf3, - 0xaf, 0x2c, 0x5f, 0xff, 0xd3, 0x0c, 0x3c, 0xef, 0xee, 0x60, 0x27, 0x3a, - 0x82, 0xc5, 0x69, 0x14, 0xe4, 0x97, 0x7d, 0x24, 0x52, 0xb1, 0x7c, 0xdf, - 0x73, 0xac, 0x54, 0x47, 0x84, 0x44, 0x17, 0xfa, 0x0e, 0x08, 0xa0, 0xda, - 0x58, 0xbe, 0xed, 0x9e, 0xe2, 0xc5, 0xff, 0xf9, 0xfd, 0x30, 0x7d, 0x00, - 0x13, 0x1d, 0x9a, 0x35, 0x62, 0xb0, 0xff, 0x98, 0x96, 0xed, 0xf4, 0xb1, - 0x7f, 0xc0, 0x19, 0x4c, 0x3f, 0xc0, 0x2c, 0x58, 0x96, 0x2b, 0x47, 0x96, - 0xc7, 0x55, 0x2a, 0xa4, 0x47, 0x0b, 0x37, 0x64, 0x88, 0x8b, 0xf0, 0xb3, - 0xf1, 0x00, 0x99, 0x2f, 0xcd, 0xb4, 0xfd, 0x96, 0x2f, 0xed, 0x36, 0xde, - 0x6f, 0xac, 0x5e, 0x29, 0x35, 0x62, 0xfb, 0x23, 0xdb, 0xeb, 0x17, 0x37, - 0xb7, 0x3c, 0x2e, 0x0e, 0xd4, 0xa2, 0x7c, 0x9c, 0x6f, 0xf8, 0xb3, 0xde, - 0xc8, 0x9a, 0x25, 0x8b, 0xfb, 0x3c, 0xdb, 0xbc, 0x16, 0x2f, 0x44, 0x2f, - 0xac, 0x5c, 0x33, 0xac, 0x5f, 0xb2, 0x28, 0x4f, 0x4b, 0x15, 0x87, 0xc2, - 0x68, 0xf9, 0x0c, 0x5f, 0xc2, 0xeb, 0x6d, 0xb0, 0x25, 0x8b, 0xff, 0xfc, - 0xf1, 0x14, 0xf3, 0x7f, 0xb9, 0x45, 0x3c, 0x26, 0x35, 0x62, 0xe9, 0x25, - 0x8a, 0xdd, 0x3c, 0x37, 0x21, 0x88, 0xeb, 0xf0, 0x8f, 0xe1, 0x77, 0x63, - 0x30, 0x98, 0xaf, 0x7c, 0x26, 0x58, 0xbf, 0xf8, 0x5c, 0xfb, 0x44, 0x58, - 0x01, 0x71, 0x62, 0xfd, 0x85, 0xe9, 0xe2, 0xc5, 0xa0, 0xb1, 0x7d, 0x9d, - 0x9f, 0x4b, 0x17, 0xf0, 0x05, 0xc8, 0xfc, 0xe9, 0x62, 0xa2, 0x3d, 0x70, - 0x12, 0x56, 0x22, 0x31, 0x9a, 0x6f, 0xfc, 0xdd, 0x75, 0xc7, 0x1e, 0x05, - 0xc5, 0x8a, 0x95, 0xc7, 0x2c, 0x95, 0x14, 0xed, 0xda, 0x1e, 0xfa, 0x31, - 0x42, 0xcf, 0x84, 0x37, 0xff, 0xcd, 0xd6, 0xb3, 0x3a, 0x0b, 0xe2, 0x9e, - 0xb8, 0xb1, 0x7d, 0xb6, 0xec, 0x35, 0x8b, 0xf7, 0x6c, 0x89, 0xf8, 0xb1, - 0x4c, 0x7a, 0x02, 0x25, 0xbf, 0xfa, 0x7c, 0xe0, 0xe3, 0x74, 0x07, 0xec, + 0x44, 0xc0, 0x58, 0xbf, 0xf0, 0xb3, 0xb1, 0xf4, 0xfe, 0x34, 0x4b, 0x15, + 0xba, 0x62, 0xfd, 0x8e, 0xc4, 0x8b, 0xf2, 0xe1, 0x0d, 0xf4, 0x29, 0xbf, + 0xd9, 0xdf, 0x57, 0xf3, 0xb8, 0x2c, 0x52, 0xc5, 0xe8, 0x67, 0x16, 0x2a, + 0x06, 0xa4, 0x20, 0xcb, 0xff, 0x00, 0xf3, 0x0f, 0xbe, 0x9a, 0x0b, 0x17, + 0x71, 0x96, 0x2b, 0x63, 0xd6, 0xec, 0xfe, 0xfb, 0x30, 0x2e, 0x2c, 0x54, + 0xa2, 0xff, 0x1e, 0x3c, 0x49, 0x6e, 0x8b, 0x17, 0x08, 0x96, 0x2d, 0xd7, + 0xac, 0x5b, 0xa2, 0xc5, 0x4a, 0xb6, 0x5d, 0x8c, 0x32, 0x33, 0x38, 0x97, + 0x75, 0x19, 0x08, 0x0b, 0xb8, 0x29, 0xe1, 0x7e, 0x82, 0xf7, 0xde, 0xfe, + 0x01, 0x62, 0xfd, 0xf6, 0x2e, 0xe0, 0xb1, 0x7a, 0x7d, 0xc5, 0x8b, 0x6f, + 0x27, 0xd2, 0xc4, 0x7e, 0x29, 0xbf, 0x83, 0xcd, 0x66, 0x44, 0xb1, 0x44, + 0x7c, 0x7c, 0x34, 0xbf, 0x9f, 0xa4, 0x8d, 0xf4, 0xb1, 0x7e, 0xef, 0x93, + 0xae, 0x2c, 0x5f, 0xee, 0xfd, 0x9f, 0xfe, 0x44, 0xb1, 0x6c, 0x58, 0xad, + 0x1e, 0x3f, 0x5e, 0x6d, 0x7b, 0x9d, 0x46, 0xac, 0x5b, 0x75, 0x8b, 0x12, + 0xc5, 0x7c, 0xd2, 0x10, 0x9d, 0xf0, 0x38, 0x1c, 0x7a, 0xc5, 0xfe, 0xf7, + 0x06, 0x26, 0xd4, 0x16, 0x2b, 0x0f, 0x75, 0x8a, 0x2f, 0xf6, 0xdd, 0xc3, + 0x84, 0xf1, 0x2c, 0x5f, 0xdf, 0x62, 0x18, 0x7d, 0xac, 0x5f, 0x78, 0x85, + 0xb2, 0xc5, 0x4a, 0x22, 0xdc, 0xdc, 0x8c, 0x2a, 0x55, 0x41, 0x8c, 0x87, + 0x0b, 0xdd, 0xc7, 0x44, 0xec, 0x8c, 0x4f, 0xa2, 0x85, 0x5d, 0xfd, 0xa8, + 0x03, 0x32, 0x25, 0x8b, 0x84, 0x1a, 0xc5, 0xff, 0x61, 0x05, 0x84, 0x3f, + 0xca, 0xc5, 0xcf, 0x1c, 0xb1, 0x6e, 0xa5, 0x8b, 0x34, 0x9a, 0xf1, 0x0d, + 0x5f, 0xbe, 0xfd, 0x24, 0x96, 0x2e, 0x60, 0xd6, 0x28, 0x67, 0x82, 0x22, + 0x9b, 0xb9, 0x12, 0xc5, 0xed, 0x07, 0xc5, 0x8a, 0xc4, 0xdb, 0xcd, 0x2f, + 0xdc, 0x67, 0x4c, 0xe4, 0xcd, 0xe2, 0x2e, 0x83, 0x37, 0x61, 0xab, 0x17, + 0x3e, 0x96, 0x2a, 0x4d, 0x7f, 0xc6, 0x2f, 0x98, 0xdf, 0xba, 0xc5, 0x2c, + 0x5e, 0x28, 0x70, 0xc3, 0x5e, 0xc4, 0x77, 0xf4, 0x22, 0xd6, 0x30, 0x4b, + 0x17, 0xf8, 0xdd, 0x48, 0xff, 0x3d, 0x16, 0x2f, 0x7a, 0x62, 0x58, 0xa1, + 0xa6, 0x0d, 0x89, 0xfd, 0x99, 0x70, 0xc3, 0xa8, 0xde, 0xff, 0x3f, 0x30, + 0x6d, 0x07, 0x58, 0xbf, 0xff, 0x17, 0x8b, 0x38, 0x13, 0x16, 0xde, 0xfe, + 0x12, 0xc5, 0xf0, 0xa2, 0x9e, 0xd6, 0x2f, 0xa0, 0x1f, 0xe5, 0x62, 0xfe, + 0x78, 0x9c, 0x84, 0x1a, 0xc5, 0xff, 0x8a, 0x4f, 0x2f, 0x02, 0x9d, 0xd6, + 0x2e, 0x98, 0x2c, 0x5f, 0x3f, 0x49, 0x89, 0x62, 0xb4, 0x6f, 0x3e, 0x2f, + 0x52, 0x9b, 0x3e, 0xea, 0xac, 0x4a, 0x44, 0x9e, 0x2f, 0xe8, 0xf3, 0x79, + 0xf5, 0x12, 0xc5, 0xef, 0x3e, 0xcb, 0x16, 0x3e, 0x1b, 0xcf, 0x0f, 0x5a, + 0x3d, 0x62, 0xa4, 0xdd, 0xb1, 0x35, 0xf0, 0x73, 0xd5, 0xc5, 0x8b, 0x71, + 0x62, 0xff, 0x14, 0xf7, 0xdf, 0x1a, 0x3d, 0x62, 0xfb, 0xee, 0x17, 0x16, + 0x2f, 0xf8, 0x98, 0xfc, 0xc3, 0xcc, 0x7a, 0xc5, 0xfa, 0x47, 0x8d, 0x1e, + 0xb1, 0x44, 0x7c, 0xbd, 0x0e, 0xef, 0xfc, 0xfb, 0x31, 0x7d, 0xb9, 0x31, + 0xeb, 0x17, 0xfd, 0x80, 0x26, 0xd0, 0x73, 0xe5, 0x8b, 0xc6, 0xe4, 0x7a, + 0xc5, 0x2c, 0x5d, 0xf9, 0x34, 0xd6, 0xfc, 0x86, 0x96, 0x28, 0x66, 0xe4, + 0xe5, 0xb5, 0x28, 0xc0, 0xc8, 0x4f, 0xde, 0x70, 0xa3, 0xd6, 0x2e, 0xc0, + 0x2c, 0x56, 0x8d, 0xc1, 0x10, 0xd6, 0x2a, 0x2b, 0x78, 0x44, 0xfc, 0x8c, + 0xa3, 0x01, 0xe2, 0xf5, 0xff, 0xed, 0x39, 0xe7, 0xbf, 0xc8, 0xc9, 0xa3, + 0xd6, 0x2e, 0x72, 0x58, 0xa1, 0xab, 0x53, 0xc2, 0x73, 0x89, 0x72, 0x53, + 0x1f, 0x95, 0x3a, 0x93, 0x6f, 0xff, 0x9a, 0x00, 0x60, 0x67, 0x7e, 0xe7, + 0x24, 0x0b, 0x17, 0xdb, 0xfe, 0x74, 0xb1, 0x7d, 0xbf, 0xe4, 0x25, 0x8b, + 0xcf, 0x9a, 0x58, 0xae, 0xcf, 0x96, 0x3c, 0x90, 0x32, 0x5b, 0xfc, 0x01, + 0x30, 0x7f, 0x98, 0x2c, 0x5f, 0xff, 0x6b, 0x58, 0x16, 0x6b, 0x5c, 0x70, + 0xb3, 0x4b, 0x15, 0x2c, 0x99, 0x7c, 0x8e, 0x73, 0x74, 0xe7, 0x8e, 0x67, + 0xf0, 0xcf, 0x69, 0x6e, 0x44, 0xc4, 0x28, 0x5b, 0x04, 0x68, 0x19, 0xad, + 0xa0, 0xb1, 0x69, 0x58, 0xa9, 0x34, 0x64, 0x25, 0x7d, 0xf9, 0xef, 0xa9, + 0x62, 0xdd, 0x4b, 0x15, 0xb9, 0xbc, 0x72, 0x7a, 0x19, 0xfe, 0x76, 0xb7, + 0x61, 0xac, 0x5f, 0x89, 0x8f, 0x3f, 0x58, 0xac, 0x37, 0x2e, 0x25, 0x7f, + 0xfa, 0x4f, 0x30, 0x19, 0x4f, 0xdb, 0x34, 0xb1, 0x71, 0xe5, 0x62, 0xf7, + 0xe6, 0x3d, 0x62, 0xe1, 0x62, 0xc5, 0x89, 0x62, 0x96, 0x2a, 0x08, 0xb3, + 0xc4, 0x8d, 0xc5, 0xc0, 0x41, 0xe1, 0x78, 0xe1, 0x1b, 0xe1, 0x7b, 0x80, + 0x58, 0xbe, 0x9f, 0xcc, 0x7a, 0xc5, 0xf7, 0x53, 0x97, 0xd6, 0x28, 0x67, + 0xdc, 0x44, 0x9d, 0x44, 0xb7, 0xbd, 0x80, 0x58, 0xbf, 0x8e, 0xfc, 0xe3, + 0x8d, 0x62, 0xf3, 0x68, 0xd5, 0x8a, 0x11, 0xe6, 0x04, 0x5d, 0x7f, 0x16, + 0x74, 0x2c, 0xe2, 0xc5, 0xcf, 0xa5, 0x8a, 0xdc, 0xf1, 0x7e, 0x5d, 0x6e, + 0x2c, 0x5f, 0xe8, 0xf3, 0x03, 0x92, 0x63, 0x56, 0x2f, 0xf4, 0x1b, 0x0b, + 0x3d, 0xc5, 0x8b, 0xfb, 0x8c, 0x1c, 0xf6, 0xcb, 0x17, 0xec, 0xc2, 0xef, + 0xcb, 0x17, 0xfb, 0x3e, 0x59, 0xef, 0xba, 0xc5, 0x0c, 0xf6, 0xbc, 0x51, + 0x52, 0x99, 0x46, 0x09, 0x76, 0x72, 0xc6, 0x40, 0x84, 0x4d, 0xe9, 0x6d, + 0x2c, 0x5f, 0xf0, 0x53, 0xc7, 0x83, 0x96, 0x2c, 0x5f, 0x61, 0x03, 0x8b, + 0x14, 0x33, 0xf6, 0xc1, 0xce, 0x1c, 0x5e, 0x3f, 0x38, 0xb1, 0x4b, 0x17, + 0xbe, 0xf1, 0x2c, 0x58, 0xee, 0x6a, 0x98, 0x32, 0xa4, 0xfb, 0x59, 0x22, + 0xff, 0xd9, 0xdc, 0x3f, 0x3c, 0x37, 0xf2, 0xb1, 0x52, 0xbc, 0x07, 0x05, + 0xce, 0xe1, 0xa4, 0xf0, 0xc8, 0x88, 0xc7, 0x4d, 0x3f, 0x68, 0x28, 0xd2, + 0xf9, 0x0c, 0x4f, 0x42, 0x6f, 0xa8, 0x82, 0xfa, 0x22, 0x93, 0xac, 0x5f, + 0xf4, 0x3e, 0xd0, 0x7d, 0x3f, 0x16, 0x2f, 0xfc, 0x3f, 0xce, 0xce, 0x73, + 0x8b, 0x75, 0x8b, 0xff, 0xa2, 0x33, 0x8f, 0xef, 0xce, 0xbd, 0x2b, 0x17, + 0xc0, 0x9f, 0xc4, 0xb1, 0x77, 0xe3, 0x31, 0x15, 0xbd, 0xa1, 0x01, 0x1e, + 0xbb, 0x4c, 0x95, 0xa1, 0xcd, 0x7d, 0xe6, 0x6d, 0x96, 0x2d, 0x1c, 0xb1, + 0x74, 0x38, 0xb1, 0x66, 0x81, 0xad, 0xec, 0x56, 0xfb, 0xce, 0x41, 0x24, + 0x58, 0x4b, 0x16, 0x9c, 0x36, 0xbf, 0x23, 0xbb, 0x34, 0xb1, 0x7f, 0x8b, + 0xdc, 0xef, 0x8d, 0x1e, 0xb1, 0x7f, 0x60, 0xe3, 0xf3, 0xb8, 0xf5, 0x8a, + 0x58, 0xa6, 0x3f, 0x92, 0x38, 0xea, 0x35, 0xa8, 0x2b, 0x02, 0x78, 0xd2, + 0x23, 0xca, 0x59, 0x40, 0x0b, 0x84, 0x4a, 0x28, 0x48, 0x5e, 0x0f, 0xe2, + 0x58, 0xbf, 0x77, 0xc9, 0x2d, 0x96, 0x2f, 0xf8, 0x51, 0x77, 0xc9, 0x89, + 0xfa, 0x2c, 0x56, 0x1f, 0x49, 0xca, 0xaf, 0x70, 0xc8, 0x96, 0x2f, 0xfa, + 0x63, 0xf0, 0x85, 0x0c, 0xe2, 0xc5, 0xfe, 0x7e, 0x7d, 0x8a, 0x65, 0x62, + 0xe1, 0x7d, 0x62, 0xff, 0x16, 0xfe, 0xf3, 0x43, 0x8b, 0x15, 0xb2, 0x2e, + 0x74, 0x76, 0x73, 0x11, 0x0c, 0x5f, 0xff, 0x67, 0xfb, 0x87, 0x22, 0x83, + 0x97, 0xa4, 0x0b, 0x17, 0xf4, 0x9c, 0xa7, 0xb8, 0x2c, 0x53, 0xa2, 0x03, + 0xea, 0x57, 0x16, 0xeb, 0x17, 0xb5, 0xac, 0x58, 0xbd, 0xdc, 0x38, 0xb1, + 0x67, 0xe1, 0xbc, 0x08, 0x76, 0xb0, 0xfe, 0xfe, 0xa9, 0x7f, 0xbd, 0xfc, + 0x22, 0x6f, 0x2c, 0x5f, 0xe2, 0xcf, 0x6b, 0x42, 0xd9, 0x62, 0x80, 0x7c, + 0xe4, 0x65, 0x73, 0x01, 0x62, 0xfb, 0x63, 0xb7, 0x96, 0x2f, 0xfd, 0x21, + 0x7d, 0x87, 0xf9, 0x2d, 0x96, 0x2a, 0x4f, 0x93, 0x44, 0x97, 0xda, 0xc6, + 0xea, 0x58, 0xbc, 0xf1, 0xd2, 0xb1, 0x7d, 0x82, 0xf7, 0x16, 0x29, 0x8f, + 0x08, 0x87, 0xef, 0x48, 0x50, 0x58, 0xbf, 0xde, 0xe6, 0xb3, 0x93, 0xda, + 0xc5, 0xb1, 0x62, 0xb0, 0xf1, 0x88, 0xd6, 0xf6, 0xa4, 0xeb, 0x17, 0xb1, + 0xb7, 0x58, 0xad, 0xd1, 0x7c, 0xec, 0x9a, 0x20, 0x21, 0xdb, 0xd8, 0xe3, + 0x58, 0xbf, 0xf4, 0x84, 0x1e, 0xdc, 0xc3, 0xcc, 0x7a, 0xc5, 0x6c, 0xb9, + 0x04, 0x38, 0x5f, 0x6f, 0x09, 0xd7, 0x84, 0x44, 0x79, 0x0c, 0x4f, 0x7a, + 0x21, 0x3b, 0x3f, 0xe1, 0xbd, 0xc3, 0xcf, 0x0e, 0x5d, 0xce, 0xd6, 0x2e, + 0x0a, 0x25, 0x8b, 0x47, 0xac, 0x5f, 0xed, 0x49, 0x7b, 0xf9, 0x05, 0x8a, + 0x81, 0xe4, 0x1a, 0x2b, 0x76, 0x71, 0x62, 0xee, 0xad, 0x2c, 0x54, 0xaf, + 0x80, 0x40, 0x87, 0x27, 0x56, 0xde, 0x16, 0x87, 0x19, 0x66, 0x20, 0xc8, + 0xfa, 0x85, 0xee, 0xf8, 0xd6, 0x2f, 0xfd, 0xb8, 0x98, 0x78, 0x43, 0xfb, + 0xac, 0x5e, 0xe3, 0xec, 0xb1, 0x5a, 0x3d, 0xd0, 0x8f, 0xee, 0xee, 0x0b, + 0x17, 0xec, 0xff, 0x70, 0xe2, 0xc5, 0xff, 0x09, 0xb8, 0x3f, 0x89, 0x8d, + 0x58, 0xbf, 0x1e, 0x33, 0x7e, 0x81, 0x2c, 0x53, 0xa2, 0x5b, 0xe5, 0x41, + 0x9d, 0xdc, 0x79, 0x58, 0xbe, 0x18, 0xa7, 0xeb, 0x17, 0xe6, 0x8f, 0x08, + 0x5d, 0xac, 0x5e, 0x7e, 0x98, 0xb1, 0x7f, 0xdb, 0x93, 0x73, 0x82, 0x9d, + 0xd6, 0x2b, 0x11, 0x83, 0xa1, 0x7f, 0x91, 0xf8, 0xb8, 0x43, 0xd7, 0xde, + 0xd6, 0xa5, 0x62, 0xff, 0xf4, 0x9c, 0x32, 0x9f, 0xbe, 0xf2, 0x77, 0x58, + 0xbb, 0xef, 0xd9, 0xf6, 0xc4, 0x47, 0x70, 0x7b, 0xac, 0x58, 0xd5, 0x8b, + 0xfb, 0xec, 0x4e, 0x2e, 0xd6, 0x2f, 0xfc, 0xcf, 0xe8, 0x61, 0xa5, 0x80, + 0x58, 0xbf, 0x77, 0x02, 0xc1, 0xac, 0x5f, 0xcf, 0xe8, 0xa1, 0x3d, 0xac, + 0x54, 0x11, 0xe4, 0x68, 0xd6, 0xe2, 0x7f, 0x2e, 0x23, 0xee, 0x85, 0x37, + 0x60, 0x4b, 0x14, 0xb1, 0x5f, 0x34, 0x9e, 0x18, 0xbf, 0xd0, 0x9e, 0xf0, + 0xf3, 0xba, 0xc5, 0xfd, 0x81, 0x47, 0xc8, 0xe5, 0x62, 0xc7, 0x58, 0xad, + 0x1e, 0x1b, 0x18, 0xdf, 0xcf, 0xcf, 0xbc, 0xba, 0xc5, 0xff, 0xf8, 0xb3, + 0x37, 0xfc, 0xc7, 0x96, 0x7b, 0x1c, 0x0b, 0x14, 0x74, 0x41, 0x31, 0x65, + 0xcf, 0x1c, 0xb1, 0x7e, 0xee, 0x78, 0xd1, 0xeb, 0x16, 0xc3, 0x9e, 0x31, + 0x0d, 0x5f, 0xd3, 0xd8, 0x33, 0xdc, 0x58, 0xbe, 0x8a, 0x7f, 0x2b, 0x15, + 0xf3, 0xd2, 0x22, 0xfb, 0xfb, 0x46, 0xfb, 0xe2, 0x82, 0xc5, 0x2c, 0x5d, + 0x83, 0x58, 0xb3, 0x76, 0x68, 0xfa, 0x06, 0x54, 0x9f, 0xe8, 0x15, 0x2f, + 0xef, 0x73, 0xe4, 0xc0, 0x58, 0xbd, 0xdb, 0x47, 0xac, 0x5f, 0xe6, 0xdb, + 0xef, 0xd3, 0x22, 0x58, 0xaf, 0x9e, 0xc0, 0x44, 0x35, 0x28, 0xa9, 0xc8, + 0x43, 0x5e, 0xd6, 0x79, 0x62, 0xe9, 0x25, 0x8b, 0x03, 0x0d, 0x9f, 0x07, + 0x6f, 0xef, 0xb3, 0xf1, 0xfa, 0x2c, 0x5d, 0xc3, 0xac, 0x56, 0x8f, 0x1c, + 0x45, 0xf7, 0x1a, 0xeb, 0x15, 0x28, 0xa7, 0xc6, 0xd6, 0x22, 0xbf, 0xf6, + 0x11, 0x37, 0x8c, 0x84, 0x9d, 0x62, 0xdb, 0xac, 0x57, 0xcf, 0x44, 0x47, + 0xd7, 0xde, 0x13, 0x06, 0xb1, 0x76, 0x79, 0x62, 0x98, 0xdd, 0xc7, 0x12, + 0x5f, 0xff, 0xf0, 0x8a, 0x18, 0x3f, 0xcf, 0x4f, 0x16, 0x4f, 0xdf, 0x09, + 0x62, 0xa3, 0x46, 0x53, 0xa4, 0xba, 0xec, 0x46, 0x38, 0x57, 0xe4, 0x3c, + 0x77, 0x85, 0xb3, 0xc6, 0x43, 0x1e, 0xfd, 0x11, 0x0e, 0x9e, 0x0f, 0x0a, + 0x3f, 0xb4, 0x33, 0xc0, 0x21, 0x3c, 0x50, 0xca, 0xe4, 0x60, 0x1e, 0x7e, + 0x12, 0xe8, 0x64, 0x77, 0xf0, 0x53, 0xad, 0x34, 0x4b, 0x17, 0xfc, 0x39, + 0xdc, 0x30, 0x02, 0x7b, 0x58, 0xbd, 0x01, 0x76, 0xb1, 0x7b, 0x8d, 0xda, + 0xc5, 0xf4, 0x30, 0xa0, 0xb1, 0x7b, 0x8c, 0x4b, 0x17, 0xfc, 0xda, 0xc3, + 0xbc, 0x74, 0x9d, 0x62, 0xb7, 0x47, 0x9f, 0x67, 0xae, 0x3f, 0x10, 0xf7, + 0x08, 0x84, 0x39, 0x7c, 0xdc, 0x8f, 0x0d, 0x62, 0xfd, 0xc7, 0x29, 0xed, + 0x62, 0xfd, 0xd8, 0xc6, 0xfc, 0x58, 0xbd, 0xac, 0xe2, 0xc5, 0xf1, 0xc3, + 0x83, 0xac, 0x54, 0x9f, 0x5e, 0x15, 0x38, 0xed, 0xf7, 0xa7, 0xb8, 0x2c, + 0x5f, 0xce, 0x08, 0xe2, 0x70, 0x2c, 0x5d, 0x80, 0x58, 0xad, 0x8f, 0xaf, + 0x44, 0x84, 0x61, 0x78, 0x9e, 0x56, 0x2f, 0xdc, 0x8e, 0xcd, 0x1a, 0xb1, + 0x69, 0xec, 0xf2, 0x3c, 0x37, 0x78, 0x51, 0x3a, 0xc5, 0xff, 0x99, 0xfd, + 0x9a, 0x01, 0xda, 0x0b, 0x17, 0xf6, 0x7b, 0xec, 0x37, 0x58, 0xad, 0x22, + 0x27, 0xe3, 0xd1, 0xc7, 0xd7, 0x88, 0xdf, 0xac, 0x5e, 0x1f, 0xdd, 0x62, + 0x9c, 0xfb, 0x98, 0xcc, 0x43, 0xd7, 0xd3, 0xad, 0x4a, 0xc5, 0xfc, 0x4c, + 0x16, 0x10, 0x16, 0x2b, 0x63, 0xcf, 0x88, 0x8a, 0xf1, 0x4e, 0xcb, 0x14, + 0xc7, 0x82, 0x44, 0x97, 0xf6, 0x7b, 0x0d, 0x9e, 0x2c, 0x5e, 0xf6, 0x06, + 0xb1, 0x52, 0xbb, 0x19, 0x91, 0x91, 0x9a, 0xb3, 0xd9, 0x3f, 0xe1, 0x26, + 0xd0, 0x97, 0x27, 0x7e, 0x46, 0x3e, 0x28, 0x5e, 0xc7, 0x10, 0x75, 0x17, + 0x58, 0x4b, 0x17, 0xdd, 0x4d, 0x3a, 0x58, 0xbf, 0x8a, 0x61, 0x3d, 0x25, + 0x62, 0xc0, 0x58, 0xbf, 0x1a, 0xc4, 0x28, 0x96, 0x2a, 0x4d, 0xe0, 0x84, + 0xaf, 0x84, 0xfd, 0x47, 0x58, 0xbf, 0xba, 0x69, 0xa5, 0xe3, 0x96, 0x2f, + 0xe8, 0x16, 0x7f, 0x69, 0x58, 0xb6, 0xcb, 0x15, 0xd9, 0xe0, 0xb9, 0x75, + 0x2c, 0x5f, 0x6e, 0xe2, 0xfa, 0xc5, 0x61, 0xb0, 0x10, 0x65, 0x62, 0x79, + 0x9d, 0x89, 0x39, 0x2c, 0x4d, 0x5a, 0x20, 0x39, 0x33, 0x39, 0x92, 0x95, + 0xf7, 0x7b, 0x0c, 0x4b, 0x16, 0xdd, 0x62, 0xe8, 0xed, 0x96, 0x2f, 0x74, + 0x7d, 0x2c, 0x50, 0xcd, 0xdf, 0xc7, 0x2f, 0x38, 0xb4, 0xb1, 0x71, 0x41, + 0x62, 0xa5, 0x19, 0x23, 0x26, 0xc4, 0xee, 0x10, 0xf4, 0x1d, 0xbd, 0x2d, + 0xa5, 0x8b, 0x32, 0xc5, 0x0c, 0xd6, 0x9a, 0x39, 0x7f, 0x43, 0xef, 0xd3, + 0x06, 0xb1, 0x5a, 0x3d, 0x22, 0x22, 0xb4, 0xac, 0x58, 0x4b, 0x16, 0x75, + 0x8b, 0x46, 0xb5, 0x8a, 0x63, 0xed, 0x22, 0x1f, 0x08, 0x84, 0x24, 0x18, + 0x8d, 0xf7, 0x7d, 0x5a, 0x02, 0xc5, 0xec, 0xd4, 0xac, 0x5f, 0x44, 0x14, + 0x9a, 0xb1, 0x7c, 0x68, 0x71, 0x71, 0x62, 0xdf, 0x58, 0xb4, 0xac, 0x5b, + 0xce, 0x68, 0xfa, 0x84, 0xab, 0x47, 0xe6, 0x49, 0x56, 0x8e, 0x58, 0xbb, + 0x37, 0x58, 0xa6, 0x35, 0xbe, 0x15, 0xbd, 0x1d, 0x27, 0x58, 0xad, 0x8f, + 0x00, 0xd2, 0x0b, 0xfc, 0xc6, 0x87, 0xff, 0xcc, 0x16, 0x2a, 0x36, 0x4f, + 0x16, 0x4a, 0x30, 0x71, 0xe1, 0x32, 0xd0, 0x8e, 0x8e, 0x24, 0xbf, 0xf7, + 0xf0, 0x63, 0x7e, 0xf3, 0xbf, 0x2c, 0x5f, 0xc6, 0x0c, 0x36, 0xd6, 0x96, + 0x2d, 0x2b, 0x15, 0xb2, 0x20, 0xc6, 0x83, 0x11, 0x8d, 0xfe, 0x1e, 0x7b, + 0xf2, 0x5b, 0xac, 0x5e, 0x97, 0x8e, 0x58, 0xbe, 0xf7, 0x03, 0x3a, 0xc5, + 0x31, 0xe2, 0x08, 0x7e, 0xff, 0xe3, 0x73, 0xbe, 0x7f, 0x3a, 0x67, 0xb8, + 0xb1, 0x68, 0x2c, 0x5f, 0xf9, 0xe4, 0xe7, 0x97, 0xe6, 0x06, 0xb1, 0x7f, + 0xe2, 0x9e, 0xf9, 0x27, 0x6e, 0xfc, 0xb1, 0x46, 0xa3, 0x66, 0x3d, 0x27, + 0x82, 0x5d, 0x0f, 0xaf, 0xff, 0xf8, 0x12, 0x5b, 0xb7, 0xc9, 0x81, 0xa9, + 0xdf, 0x35, 0xa7, 0x58, 0xbf, 0x37, 0x24, 0xa2, 0x58, 0xbd, 0x85, 0xba, + 0xc5, 0xb9, 0xd0, 0xf1, 0x43, 0x28, 0xbf, 0x8d, 0xf3, 0xfb, 0x34, 0xb1, + 0x68, 0x96, 0x2f, 0xf8, 0x66, 0x67, 0x27, 0x34, 0x05, 0x8b, 0xdf, 0x0f, + 0x8b, 0x15, 0x27, 0xd9, 0x82, 0x6c, 0x75, 0x7d, 0xce, 0x39, 0xd6, 0x2f, + 0x73, 0xee, 0xb1, 0x7f, 0x0f, 0xc4, 0xdd, 0xf1, 0x62, 0x96, 0x29, 0xcd, + 0xdf, 0x51, 0x7d, 0x2c, 0x5f, 0xdc, 0x7e, 0xf3, 0xbf, 0x2c, 0x57, 0x66, + 0xf3, 0xc1, 0x97, 0x1c, 0x6b, 0x17, 0x6d, 0x2b, 0x15, 0x28, 0xb1, 0x65, + 0xff, 0x11, 0x08, 0x62, 0xe7, 0x82, 0xc5, 0xf8, 0x26, 0xd3, 0x76, 0xb1, + 0x7a, 0x73, 0xb5, 0x8a, 0x93, 0xc7, 0x22, 0xab, 0x75, 0x2c, 0x5f, 0x67, + 0x1c, 0x0b, 0x14, 0xb1, 0x68, 0x96, 0x22, 0x26, 0x54, 0xae, 0xe7, 0x6c, + 0x64, 0x37, 0x8c, 0x87, 0xd7, 0x68, 0x71, 0x42, 0xaf, 0x45, 0x7f, 0x84, + 0xdb, 0x16, 0x00, 0x8c, 0xa3, 0x09, 0xe1, 0xdf, 0x97, 0x82, 0x20, 0x8e, + 0x15, 0x0c, 0xba, 0xff, 0x9c, 0x64, 0xde, 0x83, 0xf4, 0x58, 0xbe, 0x87, + 0xf0, 0xeb, 0x17, 0xfe, 0x6d, 0xfe, 0xc3, 0xfc, 0x96, 0xcb, 0x15, 0xd9, + 0xf1, 0x9c, 0x8e, 0xff, 0xa0, 0xfe, 0x04, 0xfc, 0x3e, 0x2c, 0x5f, 0xa1, + 0xf9, 0x23, 0x56, 0x2e, 0x10, 0x16, 0x2a, 0x53, 0x3c, 0xc8, 0x4e, 0xc4, + 0x46, 0xc7, 0x7d, 0x45, 0x35, 0xd6, 0x3f, 0x90, 0x4f, 0x5a, 0xf5, 0x1a, + 0x42, 0x5e, 0x36, 0x86, 0xdf, 0x5d, 0xc3, 0x1b, 0xae, 0xa8, 0x53, 0x2d, + 0xaf, 0x68, 0xda, 0xa1, 0x28, 0xa0, 0x73, 0xa9, 0x79, 0x49, 0x83, 0x36, + 0x3e, 0x4d, 0xe5, 0xf8, 0xf7, 0x2a, 0xa5, 0xe5, 0xf8, 0xc7, 0xc6, 0x37, + 0x14, 0xaf, 0xcd, 0x4e, 0x3f, 0x1e, 0x5e, 0xef, 0xe9, 0x6f, 0x2d, 0x3e, + 0x98, 0x09, 0x77, 0x3d, 0x7b, 0x89, 0x4f, 0xc4, 0x72, 0x95, 0xeb, 0xe9, + 0xec, 0x11, 0x4a, 0x86, 0xe9, 0x19, 0xc8, 0x51, 0x9b, 0x47, 0x4a, 0x0e, + 0x0e, 0x7a, 0xdf, 0xaa, 0x51, 0x8d, 0xfe, 0xeb, 0xbe, 0xb5, 0xbd, 0xf9, + 0xf2, 0xc5, 0xdb, 0xca, 0xc5, 0xf3, 0x6f, 0x3a, 0x58, 0xa0, 0x8d, 0xdf, + 0x50, 0xc5, 0xfa, 0x7b, 0xc7, 0xfa, 0xc5, 0xc1, 0x62, 0xc5, 0xfc, 0x09, + 0xff, 0x70, 0xe2, 0xc5, 0xfe, 0x7e, 0xc0, 0xdf, 0xc8, 0xe5, 0x8b, 0xff, + 0x3c, 0xfb, 0xec, 0x6e, 0x10, 0x16, 0x2f, 0xff, 0x36, 0x8c, 0x6f, 0x19, + 0xee, 0xf7, 0x72, 0x58, 0xad, 0xd3, 0x33, 0x72, 0x88, 0x86, 0x34, 0x61, + 0xf3, 0x7e, 0x87, 0xd7, 0xee, 0x45, 0x9a, 0x65, 0x8b, 0xe6, 0x29, 0x82, + 0xc5, 0xf4, 0xee, 0xcc, 0xb1, 0x7b, 0x59, 0x05, 0x8b, 0x9c, 0xeb, 0x14, + 0xe8, 0xa0, 0xd1, 0x49, 0xc8, 0x7c, 0x45, 0xd4, 0x3b, 0x7e, 0xf4, 0xb9, + 0xf8, 0xb1, 0x7f, 0xf4, 0x8e, 0x32, 0x28, 0x39, 0x7a, 0x40, 0xb1, 0x58, + 0x7e, 0x04, 0x51, 0x7a, 0x40, 0xeb, 0x17, 0xf4, 0xc3, 0x35, 0x9c, 0x58, + 0xbf, 0x7f, 0x3d, 0x3f, 0x58, 0xbf, 0x17, 0x88, 0x5b, 0x2c, 0x50, 0xcf, + 0xf9, 0x8b, 0x44, 0x51, 0x7f, 0xfb, 0x5a, 0x14, 0x35, 0x93, 0xdc, 0x1c, + 0xeb, 0x17, 0xc6, 0xf9, 0xf4, 0xb1, 0x74, 0x4e, 0xb1, 0x58, 0x88, 0x87, + 0x4c, 0x62, 0x4b, 0xdc, 0x0f, 0x8b, 0x17, 0xff, 0xec, 0x9e, 0xe1, 0xcf, + 0xe7, 0xb8, 0x4d, 0xdf, 0x96, 0x2f, 0xe3, 0xeb, 0x59, 0xee, 0x2c, 0x5f, + 0xf0, 0xb6, 0x8c, 0xfb, 0x1d, 0xf8, 0xb1, 0x68, 0x49, 0xf6, 0xf8, 0xbe, + 0xf6, 0xed, 0xd1, 0x62, 0xff, 0x8f, 0x3e, 0xe6, 0xb4, 0xe1, 0x2c, 0x5f, + 0xfb, 0xe2, 0xef, 0x92, 0x76, 0xef, 0xcb, 0x16, 0xc3, 0x53, 0x88, 0xee, + 0x18, 0x9a, 0x27, 0x01, 0x07, 0x8e, 0xef, 0xfd, 0xe9, 0x3f, 0x25, 0xf6, + 0x6f, 0x2c, 0x5f, 0xcd, 0x1e, 0xd9, 0xdf, 0x96, 0x2b, 0xb3, 0xf0, 0xf9, + 0xfd, 0xfd, 0x83, 0x7e, 0xc9, 0x96, 0x2f, 0x9c, 0xd9, 0xea, 0x58, 0xa6, + 0x3d, 0x32, 0x2d, 0xac, 0x44, 0xb0, 0x9d, 0xaf, 0xf8, 0x9c, 0x1d, 0xc3, + 0x35, 0xb2, 0xc5, 0x8d, 0x58, 0xbf, 0x67, 0x8a, 0x76, 0x58, 0xa9, 0x3f, + 0x61, 0x9d, 0xe8, 0x4e, 0xff, 0xfc, 0xcf, 0xa9, 0xe7, 0xe5, 0xcb, 0x35, + 0x3d, 0x16, 0x2f, 0xa7, 0xd0, 0x65, 0x8b, 0xed, 0x75, 0x49, 0x2c, 0x58, + 0x96, 0x2a, 0x4d, 0xb0, 0x44, 0xb7, 0xfd, 0xce, 0x8d, 0x13, 0x8c, 0x5a, + 0x58, 0xbf, 0xff, 0xe9, 0x01, 0xda, 0x05, 0x9d, 0xf9, 0xbf, 0x3e, 0xe0, + 0xa3, 0xd6, 0x2e, 0x29, 0x58, 0xa8, 0x91, 0x7b, 0xf3, 0xdf, 0x35, 0x5d, + 0xf8, 0xc8, 0xd6, 0xca, 0xac, 0x97, 0xbc, 0x8d, 0x61, 0xe1, 0xf7, 0x14, + 0x2f, 0x34, 0x40, 0x78, 0x4d, 0x7e, 0x16, 0xcc, 0x5a, 0x51, 0xd3, 0xf2, + 0x35, 0xdf, 0x42, 0x60, 0x45, 0xdd, 0x15, 0x02, 0x58, 0x0e, 0x1b, 0xd5, + 0x18, 0xce, 0x78, 0x9a, 0x6a, 0xb5, 0xfd, 0x9a, 0xdd, 0x9b, 0x75, 0x49, + 0x9a, 0x5f, 0xff, 0x9b, 0x4d, 0x08, 0xcd, 0xcb, 0x36, 0xd7, 0x72, 0x35, + 0x8b, 0xb0, 0xeb, 0x17, 0xe2, 0x9f, 0x40, 0x4b, 0x17, 0xde, 0xd4, 0xf1, + 0x62, 0xb7, 0x3e, 0x2f, 0x8b, 0x91, 0x45, 0xfe, 0xce, 0x72, 0x40, 0x1e, + 0xcb, 0x17, 0xff, 0xd0, 0x9e, 0x45, 0x09, 0x3f, 0x70, 0xe6, 0x6e, 0xb1, + 0x7e, 0x7d, 0x05, 0x9f, 0x58, 0xbe, 0x21, 0x34, 0x4b, 0x17, 0xdf, 0x76, + 0x25, 0x8a, 0xed, 0x18, 0x3f, 0x54, 0x01, 0x4f, 0x88, 0xef, 0xff, 0xbe, + 0xfc, 0x7f, 0x16, 0x74, 0x1c, 0xc5, 0xf5, 0x8b, 0xff, 0xee, 0x4f, 0x66, + 0x07, 0xe7, 0xf7, 0xf0, 0x6e, 0xb1, 0x7f, 0x81, 0x3c, 0x76, 0xec, 0x25, + 0x8b, 0xf6, 0x1e, 0x47, 0x2b, 0x17, 0xed, 0x3e, 0xc2, 0x8f, 0x58, 0xbd, + 0xf7, 0x1a, 0xc5, 0x85, 0x87, 0x95, 0x11, 0x6d, 0xe8, 0x98, 0x6b, 0x17, + 0xfe, 0xc6, 0x8b, 0xbf, 0x18, 0x13, 0xca, 0xc5, 0x49, 0xf0, 0x68, 0x7a, + 0xf3, 0x97, 0x96, 0x2f, 0xf6, 0x61, 0xa3, 0x27, 0xd9, 0x62, 0xff, 0xe3, + 0x8b, 0xff, 0x63, 0x73, 0x59, 0xe5, 0x8a, 0x19, 0xfd, 0x1c, 0xd2, 0xff, + 0xe9, 0xdf, 0x99, 0x31, 0x66, 0xd8, 0x4b, 0x17, 0xfb, 0x39, 0x3a, 0xd3, + 0xf4, 0x58, 0xad, 0x8f, 0xeb, 0xe8, 0xb5, 0x88, 0xbf, 0x68, 0x4e, 0x5b, + 0xcb, 0x17, 0xf7, 0x47, 0xd1, 0x66, 0x96, 0x2c, 0xd8, 0x78, 0x24, 0x25, + 0x7f, 0xee, 0x3e, 0xb3, 0xd2, 0x4e, 0x05, 0x8b, 0xff, 0x81, 0x25, 0xbb, + 0x41, 0xe3, 0xb3, 0x4b, 0x17, 0xfc, 0xf0, 0x7f, 0x88, 0xe7, 0x75, 0x8b, + 0xf9, 0x88, 0x1e, 0x98, 0x96, 0x2b, 0xb4, 0x57, 0x79, 0x1e, 0x38, 0xe6, + 0xfb, 0x5f, 0x68, 0xc9, 0x5e, 0x58, 0x19, 0x7e, 0x43, 0xdf, 0x73, 0xee, + 0xd4, 0x9d, 0x4e, 0x23, 0x53, 0xb8, 0xfe, 0x11, 0x0c, 0x42, 0x51, 0xaa, + 0xf1, 0x9f, 0xc4, 0xa1, 0xc3, 0xae, 0xe1, 0x06, 0xb1, 0x7b, 0xed, 0xb2, + 0xc5, 0x44, 0x6d, 0xfc, 0x33, 0x7f, 0xd9, 0x14, 0x1b, 0x5b, 0x7c, 0x4b, + 0x17, 0xfb, 0xdf, 0xc7, 0xd8, 0xf2, 0xb1, 0x7d, 0x9d, 0x1b, 0x4b, 0x17, + 0xe2, 0x9c, 0xfb, 0x2c, 0x50, 0x0f, 0x2b, 0xc4, 0x97, 0xfe, 0x9d, 0x03, + 0xdc, 0xfe, 0x38, 0xd6, 0x2c, 0xcb, 0x17, 0x3f, 0xd6, 0x2a, 0x37, 0x35, + 0x10, 0x11, 0xb6, 0xcb, 0x17, 0x13, 0x2c, 0x5e, 0x84, 0xf6, 0xb1, 0x6c, + 0x93, 0xc7, 0x18, 0x9c, 0x42, 0xd7, 0xce, 0x4d, 0xb2, 0xc5, 0xff, 0x7d, + 0xd8, 0x18, 0x2d, 0x6c, 0xb1, 0x7f, 0x6c, 0x1c, 0x73, 0x10, 0x16, 0x2f, + 0xfc, 0xc4, 0x0c, 0xf4, 0x93, 0x81, 0x62, 0xa4, 0xfb, 0xe3, 0x8c, 0xea, + 0x55, 0x7a, 0x8c, 0x8b, 0x0f, 0x3b, 0x7e, 0xf9, 0x13, 0x33, 0x93, 0x6f, + 0x0d, 0x3c, 0x44, 0x1c, 0x2a, 0x6f, 0x88, 0x61, 0xf6, 0xb1, 0x6f, 0xac, + 0x5f, 0x4f, 0x3e, 0xeb, 0x16, 0x95, 0x8a, 0xf9, 0xb3, 0xe8, 0x45, 0x7f, + 0xe7, 0xf4, 0x9c, 0x98, 0xdf, 0xba, 0xc5, 0xd3, 0xf5, 0x8b, 0xfc, 0xde, + 0x84, 0x9b, 0x84, 0xb1, 0x7f, 0x16, 0x74, 0xfb, 0x41, 0x62, 0xf3, 0x6b, + 0x8b, 0x16, 0x8c, 0x94, 0xd8, 0x76, 0x25, 0xc4, 0x58, 0x88, 0xfe, 0x7c, + 0x42, 0xfe, 0x33, 0x08, 0xbe, 0xa3, 0x15, 0x36, 0x75, 0x47, 0xe3, 0x7b, + 0x62, 0x12, 0xc5, 0xf9, 0xa0, 0xff, 0x12, 0xc5, 0x49, 0xe3, 0x10, 0xf5, + 0xff, 0xfe, 0xcf, 0x3f, 0x3d, 0xfc, 0x38, 0x1b, 0x59, 0xd3, 0x06, 0xb1, + 0x7f, 0x84, 0xdb, 0x6b, 0x0f, 0x19, 0xf4, 0x41, 0x70, 0x82, 0xa3, 0x19, + 0xe4, 0x3b, 0x9e, 0x3c, 0xf8, 0xab, 0x4f, 0x44, 0x14, 0x3e, 0x6e, 0xeb, + 0x3b, 0x58, 0xbf, 0xa3, 0x68, 0xd1, 0x88, 0x51, 0x2c, 0x5e, 0x38, 0x7a, + 0x58, 0xb1, 0xd6, 0x2f, 0x1d, 0x8e, 0xb1, 0x4e, 0x6b, 0xd8, 0x4a, 0xc7, + 0x58, 0xbf, 0x84, 0x6c, 0x84, 0x23, 0x56, 0x29, 0xd1, 0x63, 0x12, 0x73, + 0x0f, 0x84, 0x25, 0x73, 0x84, 0xb1, 0x70, 0x67, 0x58, 0xbe, 0xcf, 0x72, + 0x3d, 0x62, 0xd3, 0x03, 0x7e, 0x10, 0xcd, 0x7c, 0xff, 0x89, 0x5e, 0xe9, + 0xe2, 0xc5, 0x9d, 0x62, 0xfd, 0x3e, 0x8e, 0x73, 0xac, 0x51, 0xa7, 0xa6, + 0x71, 0x70, 0x08, 0xdd, 0xc3, 0x56, 0x2f, 0xb8, 0x52, 0x12, 0xc5, 0xed, + 0xf3, 0xeb, 0x17, 0x72, 0x56, 0x2f, 0xc2, 0xe7, 0xa7, 0x8b, 0x15, 0x03, + 0xc0, 0x88, 0x5e, 0xe1, 0x71, 0x62, 0xfb, 0xb7, 0x17, 0x6b, 0x15, 0x28, + 0xbe, 0x75, 0xe8, 0x88, 0xc4, 0x31, 0x7f, 0x14, 0x9f, 0x8f, 0xb2, 0xc5, + 0xe2, 0xd0, 0x96, 0x2a, 0x07, 0x96, 0xe5, 0xd6, 0xd2, 0xc5, 0xe2, 0x91, + 0xac, 0x50, 0x46, 0xb8, 0x31, 0x2b, 0xf0, 0x9f, 0xae, 0x75, 0xbd, 0x62, + 0xc5, 0xe7, 0xc3, 0xac, 0x5e, 0x17, 0x7c, 0x58, 0xbf, 0x07, 0xe2, 0x90, + 0x2c, 0x54, 0x47, 0xc9, 0xa1, 0xce, 0x83, 0xf7, 0xed, 0x85, 0x01, 0x4a, + 0xc5, 0x49, 0xee, 0x39, 0x95, 0xf3, 0x9d, 0xfa, 0x96, 0x2e, 0xc3, 0x56, + 0x2e, 0x10, 0x6b, 0x17, 0x8b, 0x38, 0xb1, 0x52, 0x7e, 0x43, 0x25, 0x88, + 0x60, 0x31, 0x9b, 0xee, 0x73, 0x34, 0xb1, 0x7e, 0x6d, 0xe4, 0x86, 0xb1, + 0x6d, 0xd6, 0x29, 0xcf, 0x7b, 0xe4, 0x62, 0x28, 0xbf, 0xbb, 0x84, 0x59, + 0xfe, 0x2c, 0x5d, 0x21, 0x2c, 0x54, 0x9e, 0x4b, 0x98, 0xdf, 0x7d, 0xfb, + 0xe2, 0xc5, 0xd3, 0xda, 0xc5, 0xd3, 0xf5, 0x8b, 0xf0, 0x8a, 0x7b, 0x82, + 0xc5, 0xf7, 0x9d, 0x83, 0x58, 0xb4, 0x72, 0xc5, 0x8d, 0x58, 0xa7, 0x35, + 0x02, 0x15, 0xa8, 0xf4, 0x73, 0xc4, 0x48, 0x71, 0x82, 0x17, 0xe1, 0x48, + 0x69, 0x77, 0xcf, 0x1c, 0xe0, 0x58, 0xb8, 0x29, 0x58, 0xbf, 0x9b, 0x6c, + 0xd3, 0x9a, 0xb1, 0x7b, 0xcd, 0xf5, 0x8b, 0x9a, 0x0b, 0x14, 0xe6, 0xd0, + 0xe3, 0xb6, 0x35, 0x62, 0x8d, 0x36, 0x7a, 0x20, 0xb8, 0xf1, 0x9d, 0x63, + 0x25, 0x3b, 0xae, 0x0f, 0x4c, 0x3a, 0x87, 0x0b, 0xbc, 0x74, 0x34, 0xc3, + 0xb1, 0x97, 0x87, 0x0c, 0x50, 0x87, 0xd2, 0x79, 0xc8, 0xff, 0x0f, 0x96, + 0x84, 0x97, 0x21, 0x37, 0xe7, 0x71, 0x46, 0x0f, 0xd1, 0x6c, 0x22, 0x58, + 0xe1, 0x80, 0xe1, 0x2d, 0x76, 0x3a, 0xc5, 0x86, 0xb1, 0x63, 0xac, 0x56, + 0x1a, 0x46, 0x12, 0xb1, 0x2c, 0x5f, 0xf4, 0x23, 0x33, 0x5b, 0xb3, 0x6e, + 0xa9, 0x20, 0x0a, 0xc3, 0xdc, 0x61, 0x1b, 0xfc, 0xe7, 0x98, 0xff, 0xe6, + 0xcb, 0x17, 0xed, 0xe4, 0x02, 0xea, 0x58, 0xbc, 0xda, 0x35, 0x62, 0xff, + 0xe8, 0xe6, 0x20, 0x67, 0xa4, 0x9c, 0x0b, 0x16, 0x8c, 0x82, 0x73, 0x98, + 0x74, 0x77, 0xbf, 0x90, 0x31, 0xb8, 0x45, 0xa1, 0x8f, 0x5b, 0xa2, 0xc5, + 0xf6, 0x78, 0x3d, 0x96, 0x2f, 0xde, 0xe4, 0x8e, 0x56, 0x2b, 0x0f, 0x84, + 0xe2, 0x84, 0x4b, 0x74, 0x0e, 0xb1, 0x78, 0xb0, 0x0b, 0x17, 0xf3, 0xf2, + 0x22, 0x91, 0xac, 0x52, 0xc5, 0xdd, 0xc1, 0x62, 0xbb, 0x34, 0xba, 0x0c, + 0xa1, 0x9f, 0xab, 0x29, 0xde, 0x92, 0xdd, 0x62, 0xf7, 0x9b, 0x4b, 0x17, + 0xc2, 0x3e, 0x7d, 0x62, 0xd3, 0xd9, 0xe0, 0x7c, 0x76, 0xe8, 0x0d, 0x62, + 0xff, 0xd3, 0x85, 0xee, 0x4f, 0xa4, 0x6b, 0x17, 0xe9, 0x2c, 0xef, 0xcb, + 0x17, 0xc3, 0xfc, 0xec, 0xb1, 0x7a, 0x0e, 0x05, 0x8a, 0x73, 0xc1, 0xe1, + 0x25, 0x1d, 0x11, 0x5e, 0x69, 0xb7, 0x45, 0x8b, 0x79, 0x62, 0xa0, 0x69, + 0xb7, 0x14, 0xbf, 0x9f, 0xf2, 0x53, 0xe5, 0x8b, 0x47, 0x2c, 0x58, 0x0b, + 0x15, 0x26, 0x9c, 0x42, 0xb7, 0x86, 0xce, 0xb1, 0x52, 0xad, 0x56, 0x05, + 0xa3, 0x18, 0xc8, 0x48, 0x9a, 0x42, 0xeb, 0xba, 0x28, 0x38, 0xc3, 0x43, + 0x1c, 0x92, 0x78, 0x45, 0xe5, 0x31, 0x10, 0x5e, 0x8a, 0x60, 0xb1, 0x73, + 0x1a, 0xb1, 0x7f, 0x9f, 0xec, 0x5e, 0xcd, 0xd6, 0x2d, 0xe5, 0x8a, 0x81, + 0xe2, 0xe8, 0xce, 0xd1, 0x98, 0x89, 0xd2, 0x1e, 0xe2, 0xed, 0xfe, 0xeb, + 0x3e, 0xdb, 0x14, 0xc1, 0x62, 0xff, 0x7f, 0x3b, 0x04, 0x96, 0xeb, 0x17, + 0xfd, 0x3e, 0xfe, 0x1f, 0x35, 0x8b, 0x17, 0xf3, 0xff, 0x3a, 0x7d, 0xd6, + 0x2f, 0xa2, 0xcc, 0xdd, 0x62, 0xfd, 0xe3, 0x5b, 0x91, 0x9d, 0x6a, 0x3e, + 0x70, 0xe7, 0x46, 0xac, 0x70, 0x19, 0x7d, 0x41, 0x39, 0xf0, 0xa3, 0x30, + 0xbf, 0xa3, 0x57, 0x5b, 0x1a, 0x81, 0xcc, 0x58, 0xbf, 0xf4, 0xe7, 0x70, + 0xce, 0xfd, 0xf6, 0x58, 0xbf, 0x9b, 0xdd, 0xc3, 0x3c, 0xb1, 0x7b, 0xdc, + 0x8c, 0xeb, 0xb4, 0x57, 0x81, 0x00, 0x34, 0x0b, 0xff, 0x73, 0xef, 0x19, + 0x3d, 0x3a, 0x0a, 0x0b, 0x15, 0x18, 0xb8, 0xc9, 0x32, 0xbd, 0x9a, 0x1b, + 0x42, 0x4d, 0xbe, 0xf9, 0x37, 0x96, 0x2e, 0xe7, 0x96, 0x2d, 0x2b, 0x16, + 0xfa, 0xc5, 0x1c, 0xd1, 0x88, 0x46, 0xfb, 0xad, 0xe9, 0xdf, 0x16, 0x2f, + 0x0f, 0x0e, 0xb1, 0x7f, 0xf7, 0x9c, 0x5c, 0x0c, 0xfa, 0xd3, 0x9a, 0xb1, + 0x7e, 0x71, 0x88, 0xb1, 0x62, 0xff, 0xfa, 0x7e, 0xe3, 0xfc, 0xc3, 0x8d, + 0xf7, 0xe2, 0xc5, 0x40, 0xfd, 0xba, 0x13, 0xdf, 0xfd, 0x3e, 0x63, 0xcf, + 0x98, 0x36, 0xf2, 0xc5, 0xff, 0xc7, 0x6d, 0x6d, 0xfc, 0x89, 0x88, 0xd5, + 0x8b, 0xfe, 0x9f, 0xce, 0xda, 0x9c, 0x1a, 0xc5, 0xfd, 0xc9, 0x39, 0x4c, + 0x4b, 0x16, 0xfa, 0xc5, 0xe0, 0xca, 0x25, 0x8b, 0x7b, 0x0d, 0x88, 0x04, + 0xae, 0xcd, 0x96, 0x2b, 0x0d, 0xf1, 0x13, 0x5f, 0x69, 0xb8, 0xeb, 0x17, + 0xff, 0xce, 0x60, 0x00, 0x29, 0xe6, 0x8c, 0x33, 0xf1, 0xcb, 0x17, 0xce, + 0x79, 0x89, 0x62, 0xb6, 0x56, 0x39, 0x01, 0xd7, 0x85, 0xf6, 0x89, 0x0e, + 0x89, 0xf4, 0x70, 0x1c, 0x94, 0x27, 0x7c, 0x3e, 0x22, 0x28, 0xe5, 0x8b, + 0xed, 0x41, 0xfa, 0x2c, 0x5f, 0xfd, 0xa8, 0x67, 0x1c, 0x5d, 0x79, 0x49, + 0xd6, 0x2a, 0x4f, 0xb8, 0x44, 0xb6, 0xe2, 0xc5, 0xfb, 0x93, 0xf7, 0xe8, + 0xb1, 0x7f, 0x7d, 0x9b, 0xf3, 0x05, 0x8b, 0xce, 0x40, 0x58, 0xb6, 0xeb, + 0x14, 0x33, 0x5f, 0xc1, 0xca, 0x31, 0x17, 0x38, 0x24, 0xe5, 0x4c, 0xb9, + 0x7f, 0xfd, 0xad, 0x87, 0xf7, 0xd7, 0x27, 0x51, 0x3f, 0xd6, 0x2f, 0xfc, + 0x0e, 0x13, 0x1b, 0x9d, 0x1f, 0x4b, 0x17, 0xff, 0x3f, 0xc5, 0xf6, 0x7e, + 0xf9, 0x26, 0xac, 0x56, 0x22, 0x1f, 0xc8, 0x37, 0x84, 0x3c, 0x58, 0xbf, + 0xb5, 0xe2, 0x93, 0xf1, 0x62, 0xff, 0xfd, 0xa1, 0xb1, 0x1b, 0xfc, 0x8f, + 0xd3, 0x9e, 0x4d, 0x58, 0xac, 0x44, 0x40, 0x8b, 0xad, 0x1c, 0xb1, 0x52, + 0x9e, 0xc6, 0x43, 0x69, 0xc8, 0xbf, 0x0a, 0x50, 0x11, 0x5e, 0x6d, 0x62, + 0xc5, 0xc2, 0x02, 0xc5, 0xee, 0x48, 0x16, 0x2f, 0xa0, 0xe5, 0x8b, 0x15, + 0xe3, 0x7c, 0x10, 0xed, 0xf6, 0xec, 0xdb, 0xaa, 0x4d, 0xf2, 0xf4, 0x73, + 0x79, 0x62, 0xf8, 0x3c, 0x2d, 0xd6, 0x2f, 0xd2, 0x70, 0x37, 0x96, 0x2f, + 0xfa, 0x77, 0x93, 0xe0, 0x03, 0x09, 0x62, 0xcf, 0xa4, 0x44, 0x11, 0x27, + 0x51, 0x45, 0xe8, 0xb0, 0x0b, 0x17, 0xe0, 0xf6, 0xfc, 0xe9, 0x62, 0xb7, + 0x4f, 0xb7, 0xb1, 0xc7, 0x56, 0xd1, 0x11, 0xcc, 0x7f, 0x0a, 0x86, 0x37, + 0xf0, 0xf5, 0xff, 0x3f, 0xe7, 0xb9, 0x8f, 0xce, 0xd6, 0x2f, 0xf0, 0x7b, + 0x30, 0xff, 0x3c, 0x58, 0xbf, 0xa6, 0x0c, 0x42, 0xc5, 0x8b, 0xff, 0xfd, + 0x10, 0xdf, 0x5f, 0xc1, 0x94, 0xee, 0xdb, 0x14, 0x9d, 0x62, 0x8e, 0x88, + 0xe6, 0x2c, 0xbf, 0xed, 0x0b, 0x9f, 0x68, 0x01, 0xd6, 0x2c, 0xe0, 0x3d, + 0xcf, 0x11, 0x5f, 0x7b, 0x8d, 0xe5, 0x8b, 0xff, 0x6b, 0x23, 0xe2, 0xfb, + 0x1d, 0xf8, 0xb1, 0x76, 0x6d, 0x87, 0xcd, 0xa2, 0x3a, 0xdd, 0x3d, 0xaf, + 0xc6, 0x40, 0x50, 0x8d, 0xbf, 0x7a, 0x76, 0xc1, 0xac, 0x58, 0x25, 0x8b, + 0xfe, 0x62, 0xdf, 0x93, 0xf6, 0x8f, 0x58, 0xa8, 0x1f, 0xc1, 0xa5, 0x3e, + 0x13, 0xbc, 0x4f, 0x12, 0xc5, 0xcc, 0x35, 0x8b, 0xfb, 0x22, 0x22, 0x6f, + 0xac, 0x56, 0x1f, 0x0e, 0x87, 0x4e, 0x2f, 0x7c, 0xf9, 0xae, 0x8b, 0x17, + 0xdd, 0xc3, 0x69, 0x58, 0xbd, 0x21, 0x47, 0x2c, 0x56, 0x1e, 0x36, 0x89, + 0x6f, 0xb7, 0xf6, 0x6e, 0xb1, 0x7a, 0x38, 0x52, 0xb1, 0x4b, 0x15, 0x86, + 0xb0, 0x88, 0x2b, 0x0f, 0xc3, 0xca, 0x37, 0xbf, 0x3a, 0x58, 0xbf, 0x7d, + 0xf5, 0xf6, 0x58, 0xbf, 0xfd, 0xf9, 0xdb, 0xd9, 0xf2, 0xcf, 0x7d, 0xd6, + 0x2f, 0x1f, 0x06, 0xb1, 0x63, 0xac, 0x5f, 0xe9, 0xd8, 0x78, 0x17, 0x23, + 0x25, 0x17, 0xd8, 0x3b, 0x11, 0x43, 0x25, 0x06, 0x3b, 0x50, 0x4f, 0x9b, + 0x21, 0x23, 0xf8, 0x6f, 0xdd, 0x9a, 0x58, 0xbc, 0x7c, 0xed, 0x62, 0xff, + 0xe2, 0x60, 0x70, 0x73, 0xee, 0x36, 0xcb, 0x15, 0xb1, 0xfd, 0x0c, 0x5f, + 0xc3, 0xd7, 0x9f, 0xdc, 0x58, 0xbd, 0xa1, 0x44, 0xb1, 0x7b, 0x66, 0x3e, + 0x8d, 0xe7, 0x87, 0x6f, 0xa1, 0xc0, 0xf8, 0xb1, 0x52, 0x8c, 0x47, 0x6c, + 0xf1, 0x9d, 0xf6, 0x7b, 0x98, 0xb1, 0x7f, 0x37, 0x63, 0x72, 0xd9, 0x62, + 0xff, 0x64, 0x7e, 0x9c, 0xf2, 0x6a, 0xc5, 0x4a, 0x22, 0x34, 0x45, 0xf2, + 0xfb, 0xdc, 0xf8, 0xd6, 0x2f, 0xc1, 0xf8, 0xa4, 0x0b, 0x14, 0x73, 0xc7, + 0xe8, 0x3d, 0x7f, 0xb7, 0x6d, 0x6d, 0xd3, 0xc2, 0x58, 0xb8, 0xa5, 0x62, + 0xff, 0xef, 0x71, 0xf9, 0x25, 0x9e, 0xfb, 0xac, 0x52, 0xc5, 0xff, 0xe6, + 0xd3, 0x7e, 0x2c, 0xf4, 0xfa, 0x46, 0xb1, 0x7d, 0xe8, 0xb3, 0x83, 0x3d, + 0x6d, 0xc3, 0x2f, 0xf6, 0x9c, 0xdc, 0xfb, 0xc1, 0x62, 0xcc, 0xe7, 0xdf, + 0xd4, 0x77, 0x7f, 0x4c, 0x7f, 0x67, 0x7f, 0x2c, 0x5f, 0xf0, 0x8b, 0x76, + 0x1f, 0xe7, 0x8b, 0x15, 0xa3, 0xec, 0x01, 0x95, 0xc2, 0xc5, 0x8b, 0xfe, + 0x03, 0xf8, 0x9b, 0xd2, 0x35, 0x8b, 0xc5, 0x9f, 0x58, 0xad, 0xd5, 0x3c, + 0xe8, 0xe4, 0xe2, 0xdf, 0x8c, 0x20, 0x10, 0x95, 0x22, 0x2e, 0x0b, 0xf4, + 0x38, 0xbf, 0xe7, 0xe6, 0x0e, 0x62, 0x73, 0xac, 0x5f, 0x87, 0x31, 0xe2, + 0x3a, 0xc5, 0xff, 0xb3, 0x6d, 0x84, 0x39, 0xd4, 0x8d, 0x62, 0xfd, 0xe7, + 0xd4, 0xf4, 0x58, 0xbf, 0xe6, 0xe4, 0xe1, 0x0f, 0xf2, 0xb1, 0x7e, 0x68, + 0xf3, 0xb7, 0x96, 0x2f, 0xf7, 0xe4, 0x6f, 0xd2, 0x46, 0xb1, 0x7f, 0xda, + 0xce, 0xfe, 0x4d, 0x1f, 0xb2, 0xc5, 0xb0, 0x67, 0xe6, 0x73, 0x5b, 0x73, + 0x48, 0xfc, 0xf9, 0xb9, 0x42, 0x7a, 0x89, 0x36, 0x0e, 0x46, 0x4d, 0x52, + 0xba, 0x99, 0x92, 0xa7, 0x77, 0x84, 0x03, 0x9c, 0xe8, 0xb1, 0xa3, 0xa1, + 0xbf, 0xd3, 0xee, 0x68, 0xa6, 0x25, 0x8b, 0xf0, 0x79, 0xf6, 0x3a, 0xc5, + 0xc2, 0x35, 0x62, 0xf7, 0xdc, 0xeb, 0x17, 0x48, 0x6b, 0x16, 0x3b, 0x9b, + 0x58, 0x87, 0x6e, 0x9f, 0xac, 0x5f, 0xfb, 0xa9, 0x8e, 0x1e, 0x80, 0x77, + 0xe2, 0xc5, 0x6c, 0x99, 0x6e, 0xe6, 0x87, 0x29, 0x64, 0xe2, 0x27, 0xea, + 0x17, 0xbf, 0x84, 0x07, 0x21, 0x69, 0x62, 0xf3, 0x97, 0x96, 0x2e, 0x17, + 0x6b, 0x17, 0xfc, 0xd0, 0xf7, 0x30, 0x2f, 0xba, 0xc5, 0xee, 0xdb, 0xeb, + 0x14, 0x74, 0x5d, 0xb1, 0x70, 0x07, 0x08, 0x64, 0x47, 0x57, 0xf7, 0x30, + 0x7f, 0x7d, 0x2c, 0x5f, 0xe9, 0xe6, 0x77, 0xe7, 0xd2, 0xc5, 0xfc, 0xdb, + 0x74, 0xc2, 0xd9, 0x62, 0xa2, 0x44, 0x9e, 0x8b, 0xa3, 0x8d, 0x2f, 0xf7, + 0xc4, 0x43, 0xfb, 0x84, 0xb1, 0x7f, 0xf4, 0x42, 0x1b, 0x10, 0x0c, 0x73, + 0xf9, 0x62, 0xbe, 0x7f, 0x9e, 0x35, 0xbf, 0xfa, 0x40, 0x29, 0x0f, 0x72, + 0xcf, 0xe2, 0xc5, 0xed, 0x4f, 0x96, 0x2f, 0xfd, 0x3e, 0x13, 0x6d, 0x3f, + 0x93, 0xac, 0x5f, 0xd1, 0x30, 0xfe, 0xe7, 0x58, 0xbf, 0xbc, 0xf8, 0x39, + 0x3a, 0xc5, 0x76, 0x89, 0xbf, 0x1f, 0x84, 0x5f, 0x7c, 0xdb, 0x08, 0x96, + 0x2e, 0xe1, 0x2c, 0x5f, 0xdd, 0xf2, 0x77, 0xc3, 0xac, 0x5f, 0x1f, 0x7c, + 0x25, 0x8a, 0x95, 0x51, 0xd9, 0x0b, 0x07, 0x22, 0xd2, 0x2b, 0x42, 0xe0, + 0x8c, 0xb8, 0x46, 0x21, 0x70, 0xcc, 0x29, 0x62, 0xff, 0x4e, 0x89, 0x86, + 0x52, 0xb1, 0x7f, 0xfb, 0x1c, 0xdf, 0xe6, 0x16, 0xf9, 0xdf, 0x96, 0x2f, + 0xff, 0xe9, 0x86, 0x1e, 0x77, 0xf7, 0x30, 0x13, 0x9d, 0xc1, 0x62, 0xb4, + 0x8a, 0x72, 0x4b, 0xbb, 0x9b, 0xac, 0x5f, 0x49, 0x14, 0xac, 0x5f, 0x37, + 0xdc, 0xeb, 0x15, 0x11, 0xe1, 0x11, 0x05, 0xfe, 0x83, 0x82, 0x28, 0x36, + 0x96, 0x2f, 0xba, 0x67, 0xb8, 0xb1, 0x7f, 0xfe, 0x7f, 0x4c, 0x1f, 0x40, + 0x04, 0xc7, 0x66, 0x8d, 0x58, 0xac, 0x3f, 0xe6, 0x25, 0xb6, 0x96, 0x2f, + 0xe6, 0x07, 0x9f, 0xbe, 0x2c, 0x56, 0xe7, 0x83, 0xc1, 0x2b, 0xfe, 0x00, + 0xca, 0x61, 0xfe, 0x01, 0x62, 0xc4, 0xb1, 0x5a, 0x3c, 0xb6, 0x3a, 0xa9, + 0x56, 0x4d, 0xb0, 0x60, 0xe1, 0xb1, 0xb9, 0x13, 0xad, 0xc4, 0x45, 0xf8, + 0x59, 0xf9, 0x84, 0x4d, 0xd7, 0xe6, 0xda, 0x7e, 0xcb, 0x17, 0xf6, 0x9b, + 0x6f, 0x37, 0xd6, 0x2f, 0x14, 0x9a, 0xb1, 0x7d, 0x91, 0xed, 0xf5, 0x8b, + 0x9b, 0xdb, 0x9e, 0x17, 0x07, 0x6a, 0x51, 0x3e, 0x4e, 0x37, 0xfc, 0x59, + 0xef, 0x64, 0x4d, 0x12, 0xc5, 0xfd, 0x9e, 0x6d, 0xde, 0x0b, 0x17, 0xa2, + 0x17, 0xd6, 0x2e, 0x19, 0xd6, 0x29, 0x62, 0xfd, 0x91, 0x42, 0x7b, 0x58, + 0xac, 0x3e, 0xd3, 0x47, 0xdc, 0x60, 0x83, 0x2f, 0xe1, 0x77, 0xb6, 0xd8, + 0x12, 0xc5, 0xff, 0xfe, 0x78, 0x8a, 0x79, 0xbf, 0xdc, 0xa2, 0x9e, 0x13, + 0x1a, 0xb1, 0x74, 0x92, 0xc5, 0x6e, 0x9e, 0xdb, 0x90, 0xc4, 0x75, 0xf8, + 0x4d, 0xf0, 0xeb, 0xa1, 0x98, 0x4c, 0x57, 0xfa, 0x4a, 0x05, 0x98, 0x05, + 0x8b, 0xdf, 0x09, 0x96, 0x2f, 0xfe, 0x17, 0x3e, 0xd1, 0x16, 0x00, 0x5c, + 0x58, 0xbf, 0x61, 0x7a, 0x78, 0xb1, 0x68, 0x2c, 0x5f, 0x67, 0x47, 0xd2, + 0xc5, 0xfc, 0x01, 0x72, 0x3f, 0x3b, 0x58, 0xa8, 0x8f, 0x5c, 0x04, 0x95, + 0x88, 0x8c, 0x66, 0x9b, 0xff, 0x37, 0x7d, 0xf1, 0xc7, 0x81, 0x71, 0x62, + 0xa5, 0x72, 0xef, 0x25, 0x51, 0x1a, 0xdc, 0xe6, 0x3a, 0x1e, 0xfa, 0x31, + 0x42, 0xcf, 0x84, 0x37, 0xff, 0xcd, 0xde, 0xb3, 0x3b, 0x0b, 0xe2, 0x9e, + 0xf8, 0xb1, 0x7d, 0xb6, 0xec, 0x35, 0x8b, 0xf7, 0x4c, 0x89, 0xf8, 0xb1, + 0x4c, 0x7a, 0x02, 0x25, 0xbf, 0xfa, 0x7c, 0xe0, 0xe3, 0x76, 0x07, 0xe8, 0xb1, 0x7c, 0xdb, 0xb6, 0xcb, 0x17, 0x79, 0xf4, 0x7d, 0x7c, 0x47, 0xbf, 0x31, 0x0f, 0xf2, 0xb1, 0x7c, 0x07, 0x23, 0x56, 0x29, 0x8f, 0x28, 0x04, - 0xf5, 0xde, 0x3a, 0x5a, 0x4e, 0xf4, 0x8a, 0x34, 0x3b, 0xef, 0xb2, 0x19, - 0x95, 0x3f, 0xb4, 0x21, 0xe1, 0x0d, 0xa1, 0xca, 0x13, 0xc9, 0x47, 0xe6, - 0xbb, 0xef, 0x1e, 0x7f, 0x50, 0xb3, 0x77, 0xa8, 0xf2, 0x18, 0xa5, 0x28, - 0x6a, 0x37, 0x83, 0xc2, 0xdb, 0xf3, 0x97, 0x8d, 0x1a, 0xc8, 0x23, 0x15, - 0x29, 0x6d, 0x3c, 0x96, 0x2f, 0xe9, 0xce, 0x11, 0x37, 0xc7, 0x42, 0x90, - 0x38, 0x46, 0x77, 0x3b, 0xdd, 0x3b, 0x2c, 0x5c, 0xde, 0x58, 0xbf, 0xa1, - 0x84, 0x4d, 0x05, 0x8b, 0xcd, 0xd4, 0x60, 0xcf, 0x6c, 0xe3, 0x1e, 0x17, - 0xbf, 0x40, 0x3d, 0xa7, 0x65, 0x8b, 0xd8, 0x5b, 0xac, 0x5e, 0x6e, 0xa3, - 0x38, 0x79, 0x21, 0x96, 0x54, 0x62, 0xb1, 0xe2, 0x94, 0xb2, 0x28, 0x46, - 0xde, 0x80, 0xa0, 0xb1, 0x7f, 0x41, 0xb5, 0xb7, 0xc4, 0xb1, 0x7e, 0xe4, - 0x80, 0x3d, 0x96, 0x2d, 0x91, 0x1e, 0xdf, 0x0c, 0x2f, 0x9e, 0x38, 0x80, - 0xb1, 0x7b, 0xdc, 0xe9, 0x62, 0xff, 0xde, 0x78, 0x3f, 0xc4, 0x73, 0xba, - 0xc5, 0xc3, 0x8c, 0x82, 0x64, 0x83, 0x79, 0x62, 0x8e, 0x12, 0x86, 0x3f, - 0x78, 0xf8, 0x4b, 0x17, 0xfb, 0x39, 0xc9, 0x00, 0x7b, 0x2c, 0x5f, 0x8f, - 0x25, 0x3d, 0x2c, 0x5c, 0xdb, 0xac, 0x5f, 0xf7, 0xa2, 0x83, 0x6b, 0x6f, - 0x89, 0x62, 0xff, 0x38, 0xb8, 0x02, 0x16, 0xcb, 0x15, 0xb2, 0x2c, 0xb7, - 0x28, 0xe8, 0x63, 0xc7, 0xb7, 0xfe, 0xe3, 0x8f, 0x30, 0x8d, 0x18, 0xd6, - 0x2f, 0x6e, 0xf0, 0x58, 0xbf, 0xfd, 0xa9, 0x1e, 0x45, 0x06, 0xd6, 0xdf, - 0x12, 0xc5, 0xff, 0xc1, 0xee, 0x64, 0xeb, 0x4e, 0x4d, 0xba, 0xc5, 0xe8, - 0xe2, 0x02, 0xc5, 0xce, 0x4b, 0x17, 0x0b, 0x75, 0x8b, 0xfd, 0x14, 0x6d, - 0x8f, 0xd9, 0x8e, 0xb1, 0x4e, 0x88, 0xa3, 0x90, 0x70, 0x5b, 0xc3, 0x37, - 0x9f, 0xe2, 0x58, 0xbf, 0x9f, 0x7f, 0xbf, 0x5e, 0x58, 0xbf, 0x98, 0x7f, - 0x92, 0xd9, 0x62, 0xb0, 0xf7, 0xbe, 0x61, 0x7c, 0xfe, 0xc0, 0x2c, 0x5f, - 0xf1, 0x9e, 0x93, 0x22, 0x66, 0xd2, 0xc5, 0xff, 0x64, 0x50, 0x6d, 0x6d, - 0xf1, 0x2c, 0x5d, 0x31, 0x2c, 0x5f, 0xf1, 0xe2, 0x83, 0x6b, 0x6f, 0x89, - 0x62, 0xf3, 0x10, 0x09, 0x12, 0x3e, 0x3c, 0x0c, 0x62, 0x8e, 0x98, 0x6c, - 0x74, 0x33, 0x6a, 0x57, 0x3c, 0xc6, 0x39, 0x90, 0xe8, 0xe9, 0x01, 0xcf, - 0xf4, 0x3c, 0x74, 0xd6, 0x86, 0x97, 0x7e, 0x79, 0xc7, 0xbf, 0x10, 0x87, - 0x19, 0x7d, 0xd1, 0xbc, 0x68, 0xb1, 0x78, 0xed, 0xd2, 0xc5, 0xe0, 0x37, - 0xd6, 0x2f, 0xff, 0xfb, 0xef, 0x14, 0x04, 0x69, 0x67, 0x5e, 0x63, 0xfb, - 0x99, 0xb2, 0xc5, 0xff, 0x79, 0xcf, 0xcf, 0xe0, 0x4c, 0xb1, 0x77, 0x67, - 0x58, 0xbd, 0x83, 0x1a, 0xc5, 0xed, 0x60, 0x6b, 0x17, 0xec, 0x19, 0xca, - 0x0b, 0x15, 0xa3, 0xc6, 0x38, 0xf5, 0xff, 0x4c, 0x02, 0x6d, 0x6b, 0x03, - 0x58, 0xbf, 0x67, 0xb5, 0x27, 0x58, 0xbf, 0x1f, 0xdc, 0x14, 0x7a, 0xc5, - 0xfe, 0xf7, 0xf0, 0x89, 0xbc, 0xb1, 0x7b, 0x02, 0x8c, 0xef, 0x15, 0x31, - 0x49, 0x16, 0x0f, 0x6e, 0x3b, 0xd3, 0x5c, 0x47, 0x5f, 0x19, 0x66, 0x32, - 0x22, 0xe1, 0xd8, 0x65, 0x1d, 0xc5, 0xb6, 0xe4, 0x62, 0xbe, 0x1d, 0xa5, - 0x8e, 0xde, 0x3e, 0x1d, 0x62, 0xff, 0xbe, 0xec, 0x0c, 0x16, 0xb6, 0x58, - 0xbf, 0xde, 0x7f, 0x73, 0xef, 0x19, 0x87, 0xaf, 0xe1, 0xda, 0x96, 0x50, - 0x3b, 0xd2, 0x4b, 0x85, 0x08, 0xdb, 0xf4, 0x83, 0xe2, 0x0d, 0x62, 0xe1, - 0x74, 0xb1, 0x7e, 0xcd, 0x66, 0x74, 0xb1, 0x76, 0xd1, 0x9f, 0x3e, 0xb0, - 0x15, 0x10, 0xcd, 0xff, 0xfe, 0x7f, 0x09, 0xb6, 0x8c, 0xc8, 0x7e, 0x75, - 0x98, 0x46, 0xac, 0x56, 0x91, 0x45, 0xdf, 0x9f, 0x5f, 0xff, 0xfd, 0xbb, - 0x69, 0xbf, 0x0c, 0xf6, 0x0f, 0x8c, 0x7c, 0xd6, 0xd3, 0xd2, 0xc5, 0xfd, - 0x83, 0x63, 0xe1, 0x2c, 0x5f, 0xff, 0x60, 0xbb, 0xfc, 0x26, 0x7f, 0xb7, - 0xbf, 0x2b, 0x14, 0xe8, 0xf2, 0xd3, 0xa7, 0xcb, 0x2f, 0xda, 0xdd, 0x9b, - 0x75, 0x49, 0x28, 0x5f, 0xff, 0x37, 0x8b, 0x36, 0xd4, 0xfd, 0xff, 0x9a, - 0x58, 0xbf, 0xfe, 0x61, 0xe0, 0xff, 0x84, 0x03, 0xe6, 0xb1, 0x62, 0xee, - 0x04, 0xb1, 0x7f, 0xef, 0xc8, 0x0e, 0xd0, 0xe7, 0x02, 0x58, 0xbc, 0xd0, - 0x8c, 0x94, 0xd7, 0x70, 0xbc, 0x06, 0xe4, 0x9f, 0xc4, 0xe0, 0xc6, 0x6f, - 0xfc, 0xfb, 0xb6, 0x9a, 0x0f, 0xc0, 0x2c, 0x5f, 0xb5, 0xbb, 0x36, 0xea, - 0x91, 0x38, 0xba, 0x11, 0x92, 0x7e, 0xd8, 0x7f, 0x47, 0x4c, 0x3d, 0xa1, - 0xc1, 0x7f, 0xd9, 0x14, 0x1b, 0x5b, 0x7c, 0x4b, 0x17, 0xff, 0xb3, 0xaf, - 0x4e, 0x05, 0x90, 0x90, 0x71, 0x62, 0xfd, 0xfc, 0xd3, 0xf1, 0x62, 0xff, - 0x67, 0x03, 0x1f, 0xe7, 0xa5, 0x8b, 0xb5, 0x18, 0x34, 0x72, 0x91, 0xe7, - 0x92, 0xe3, 0x8a, 0x2f, 0xf9, 0xa1, 0x90, 0x21, 0x37, 0x16, 0x2f, 0x4c, - 0x4c, 0xb1, 0x7f, 0x79, 0x8e, 0x52, 0x75, 0x8b, 0xe7, 0x2c, 0x82, 0xc5, - 0x0d, 0x14, 0x7f, 0x38, 0xf0, 0xef, 0x71, 0x6d, 0xf6, 0xe4, 0x23, 0x56, - 0x2e, 0xd4, 0x66, 0x1f, 0x2b, 0x20, 0x54, 0x62, 0xa9, 0x27, 0x8c, 0x35, - 0xa3, 0x56, 0xa9, 0x96, 0x7e, 0x4d, 0xb5, 0xa1, 0xf6, 0x85, 0x39, 0x8c, - 0x7a, 0x8a, 0x84, 0x72, 0x71, 0x40, 0xd9, 0x41, 0xdb, 0xc7, 0xa2, 0xf3, - 0xe7, 0xf1, 0xf1, 0xcd, 0x45, 0x1f, 0x56, 0xa3, 0x76, 0x3d, 0xfa, 0x40, - 0xfe, 0x9a, 0xfa, 0xd4, 0x80, 0x10, 0x4a, 0xc7, 0x29, 0xf7, 0x1e, 0x5a, - 0x90, 0xef, 0x52, 0xda, 0xc5, 0x1a, 0x6f, 0x69, 0xe1, 0x8b, 0x71, 0x62, - 0xfd, 0xad, 0xd9, 0xb7, 0x54, 0x83, 0xe5, 0xff, 0x9a, 0x11, 0x99, 0xad, - 0xd9, 0xb7, 0x54, 0x8a, 0x65, 0xa3, 0x06, 0x89, 0x9c, 0x12, 0x39, 0xbd, - 0xfe, 0x8c, 0xcd, 0x6e, 0xcd, 0xba, 0xa4, 0x27, 0x2f, 0x46, 0x9d, 0xf7, - 0xde, 0x2c, 0x5f, 0x9f, 0xdc, 0x11, 0xd6, 0x2f, 0xc2, 0x39, 0x31, 0xab, - 0x17, 0xbf, 0x31, 0x2c, 0x5d, 0xd4, 0x16, 0x2a, 0x24, 0x44, 0xe8, 0xa7, - 0xe5, 0x22, 0x1e, 0xbf, 0xc2, 0xe8, 0x31, 0x8b, 0xdc, 0x58, 0xbf, 0xfd, - 0x1a, 0x8d, 0x0a, 0x3f, 0x61, 0xc6, 0xc6, 0x19, 0xf8, 0xe5, 0x8b, 0xed, - 0xd9, 0xb7, 0x54, 0x86, 0x25, 0xff, 0xf3, 0x43, 0x85, 0x39, 0xb8, 0xf4, - 0xe2, 0xdd, 0x62, 0xff, 0x84, 0xc7, 0x6d, 0x6b, 0x3a, 0x58, 0xad, 0x22, - 0xf0, 0x8c, 0x78, 0xa3, 0x7e, 0xe3, 0xf6, 0x93, 0xac, 0x5e, 0xea, 0x1b, - 0x2c, 0x54, 0x9e, 0x56, 0x15, 0x5f, 0x66, 0xc7, 0xf2, 0xc5, 0x7c, 0xf1, - 0x08, 0x82, 0xff, 0x46, 0xae, 0xdd, 0xf5, 0x30, 0xcf, 0xc7, 0x2c, 0x5f, - 0xbb, 0x37, 0x26, 0x0b, 0x17, 0xf7, 0x3d, 0xd6, 0xef, 0xf5, 0x8b, 0xdf, - 0x70, 0x96, 0x2e, 0x84, 0xfc, 0xf3, 0xc0, 0x63, 0x7f, 0x7d, 0x88, 0x61, - 0xf4, 0xb1, 0x7f, 0xfc, 0xc6, 0x99, 0xe3, 0x64, 0xa1, 0x9f, 0x73, 0xac, - 0x58, 0x4e, 0x88, 0x22, 0x30, 0xb7, 0xd6, 0x2f, 0xa7, 0xa8, 0x32, 0xc5, - 0x39, 0xb5, 0x88, 0x4a, 0xfa, 0x4f, 0xb8, 0x16, 0x2f, 0x07, 0x31, 0x2c, - 0x5f, 0xff, 0x43, 0x68, 0xd5, 0x31, 0xa6, 0xdb, 0xe8, 0xc3, 0x3f, 0x1c, - 0xb1, 0x58, 0x8c, 0xaf, 0x90, 0xb1, 0x20, 0x07, 0xef, 0xda, 0x7d, 0xdf, - 0xb2, 0xc5, 0xf8, 0x5e, 0x9e, 0xa0, 0xb1, 0x7b, 0x3a, 0xf2, 0xc5, 0xfe, - 0xc2, 0xfe, 0x7a, 0x46, 0xb1, 0x76, 0x7a, 0x4f, 0x41, 0xc7, 0xaf, 0xfd, - 0xe3, 0x64, 0xa1, 0x9f, 0x73, 0xac, 0x5f, 0xf1, 0xb2, 0x50, 0xcf, 0xb9, - 0xd6, 0x2f, 0x84, 0x4c, 0x69, 0x87, 0xf1, 0xe3, 0xfb, 0xb7, 0xdd, 0x62, - 0xfd, 0xa0, 0x3f, 0xe5, 0x62, 0x8e, 0x7f, 0x9c, 0x3a, 0x10, 0xd5, 0xee, - 0xa1, 0x1a, 0x2c, 0x5f, 0xdf, 0xf7, 0x33, 0xa8, 0x2c, 0x53, 0x9e, 0xa0, - 0x89, 0x2f, 0x3e, 0xa3, 0x96, 0x2f, 0xc6, 0x44, 0x52, 0x35, 0x8b, 0xc1, - 0xc2, 0x3d, 0x62, 0xd1, 0x9d, 0xf1, 0x91, 0xa9, 0x30, 0xb8, 0xd8, 0xfa, - 0x07, 0x19, 0x19, 0x06, 0xf0, 0xbd, 0xe8, 0x85, 0xd2, 0xe2, 0x79, 0x3c, - 0x2b, 0xff, 0x19, 0x33, 0x1d, 0x80, 0xac, 0x9e, 0xb9, 0x18, 0xff, 0xa1, - 0x06, 0x22, 0x18, 0xe2, 0x0e, 0xe2, 0xab, 0xff, 0xd1, 0x87, 0x68, 0x46, - 0x66, 0xb7, 0x66, 0xdd, 0x52, 0x3c, 0x97, 0xbb, 0x4f, 0xd6, 0x2d, 0x2b, - 0x15, 0x26, 0xc3, 0x43, 0xf7, 0xd2, 0x50, 0xe2, 0xc5, 0xd9, 0xc5, 0x8b, - 0xff, 0x37, 0xa7, 0x42, 0x86, 0xa6, 0x0b, 0x17, 0x07, 0xc5, 0x8b, 0xde, - 0x93, 0xac, 0x5f, 0x39, 0x67, 0x65, 0x8b, 0xf7, 0xa4, 0x9c, 0x0b, 0x17, - 0xfd, 0x3b, 0x67, 0xa4, 0x9c, 0x0b, 0x17, 0x98, 0x81, 0x87, 0xbe, 0x19, - 0x3d, 0x7d, 0x16, 0x91, 0xd0, 0x82, 0xad, 0x27, 0x5a, 0x02, 0x0e, 0xfc, - 0x88, 0x85, 0xf8, 0x7f, 0xe1, 0x90, 0xe1, 0xa3, 0x4b, 0x17, 0xfa, 0x37, - 0xfc, 0x40, 0xef, 0x35, 0xc5, 0x8a, 0x58, 0xbc, 0x3c, 0x3a, 0xc5, 0xb9, - 0xf3, 0x52, 0x20, 0xcb, 0xa0, 0x1a, 0xc5, 0xf0, 0x9b, 0x50, 0x58, 0xbd, - 0xe0, 0xf6, 0x58, 0xbf, 0xe6, 0x2f, 0x48, 0x34, 0xda, 0x58, 0xbf, 0xfc, - 0x4d, 0x07, 0xf8, 0xa2, 0x84, 0xeb, 0x65, 0x8b, 0xc7, 0x14, 0x7a, 0xc5, - 0xee, 0xa1, 0xba, 0xc5, 0xf9, 0x87, 0xf9, 0xe2, 0xc5, 0xfd, 0xff, 0xcf, - 0x4d, 0x1e, 0xb1, 0x4b, 0x15, 0x86, 0xfb, 0x86, 0x56, 0x8c, 0xef, 0x55, - 0x22, 0x77, 0xd4, 0x32, 0x5a, 0xa0, 0x4e, 0x31, 0x9c, 0x23, 0xd1, 0x07, - 0xce, 0x00, 0x99, 0xdf, 0x90, 0x91, 0x07, 0x19, 0xaa, 0x31, 0x5b, 0x90, - 0x52, 0xac, 0xef, 0xfe, 0x8c, 0xe7, 0x8a, 0x40, 0xde, 0x14, 0xac, 0x54, - 0xb6, 0x16, 0x9b, 0x1c, 0x42, 0x92, 0x33, 0xf8, 0xcf, 0xbd, 0x3b, 0x5c, - 0x11, 0x85, 0xfb, 0x5b, 0xb3, 0x6e, 0xa9, 0x08, 0x0b, 0xff, 0x34, 0x23, - 0x33, 0x5b, 0xb3, 0x6e, 0xa9, 0x15, 0x0b, 0xfb, 0x42, 0xfc, 0x96, 0xeb, - 0x17, 0xf6, 0xef, 0x9d, 0xdf, 0x95, 0x8a, 0x93, 0xe0, 0xc2, 0xfb, 0xfb, - 0xd8, 0x45, 0x3b, 0x2c, 0x5a, 0x33, 0x13, 0x34, 0x39, 0xb9, 0x42, 0xc3, - 0xc4, 0x17, 0xf6, 0x69, 0xa2, 0xdf, 0x65, 0x8b, 0xd2, 0x5b, 0x2c, 0x50, - 0xcf, 0x3b, 0xb1, 0x8d, 0xfb, 0x5b, 0xb3, 0x6e, 0xa9, 0x0a, 0x0b, 0xf6, - 0xa4, 0xf3, 0xd2, 0xc5, 0xfd, 0xa9, 0x3f, 0xb0, 0x0b, 0x17, 0x8e, 0x21, - 0xac, 0x5f, 0xf9, 0xfd, 0x14, 0xbe, 0x76, 0x78, 0xf5, 0x8b, 0x7d, 0xcf, - 0x87, 0xb0, 0xf5, 0xe3, 0x8a, 0x3d, 0x62, 0xfd, 0xee, 0x7c, 0x5c, 0x58, - 0xbf, 0xd0, 0xc1, 0x93, 0x30, 0xd6, 0x2f, 0xec, 0xd0, 0x08, 0x40, 0x58, - 0xa9, 0x44, 0x53, 0x15, 0x00, 0xca, 0xff, 0xc2, 0x6d, 0x34, 0x3c, 0xfc, - 0x12, 0xc5, 0xff, 0x4f, 0x45, 0x9e, 0xe4, 0x9d, 0x62, 0x88, 0xfe, 0x04, - 0x7f, 0x7f, 0xdf, 0xc1, 0xbf, 0x30, 0x80, 0xb1, 0x7a, 0x41, 0x8b, 0x16, - 0x8c, 0x95, 0x60, 0x58, 0x48, 0xe6, 0xfa, 0x29, 0x68, 0x47, 0x80, 0xa4, - 0xa1, 0x57, 0xc8, 0x53, 0x78, 0x84, 0x33, 0x8b, 0xfd, 0x19, 0x9a, 0xdd, - 0x9b, 0x75, 0x48, 0x64, 0x5f, 0xb5, 0xbb, 0x36, 0xea, 0x91, 0x94, 0xbf, - 0x43, 0x3c, 0xdb, 0xac, 0x5f, 0xa3, 0x0e, 0xd0, 0x8c, 0xc3, 0xe0, 0xe8, - 0xde, 0xee, 0xf7, 0xbc, 0x58, 0xbb, 0xa1, 0x2c, 0x5f, 0xb5, 0xbb, 0x36, - 0xea, 0x92, 0x90, 0xb1, 0x2c, 0x5d, 0x03, 0xac, 0x5f, 0x1f, 0x33, 0xcb, - 0x17, 0x77, 0xfd, 0xfa, 0xc5, 0xfd, 0x07, 0x19, 0x67, 0x65, 0x8b, 0x06, - 0xb1, 0x7c, 0x5f, 0xce, 0x96, 0x2f, 0x77, 0x08, 0x0b, 0x16, 0x8c, 0x8d, - 0x13, 0x65, 0x81, 0x16, 0x0c, 0xc7, 0x9b, 0xe8, 0x45, 0x86, 0x3b, 0xf2, - 0x2f, 0x11, 0x08, 0xbc, 0x31, 0x3e, 0xe2, 0x3b, 0xf6, 0xb7, 0x66, 0xdd, - 0x52, 0x5d, 0x17, 0xf7, 0xdf, 0x5a, 0x68, 0x2c, 0x5a, 0x33, 0x0f, 0x97, - 0x86, 0xf7, 0x83, 0x93, 0xac, 0x5f, 0xb5, 0xbb, 0x36, 0xea, 0x93, 0x14, - 0xb4, 0x64, 0x9e, 0xae, 0x0f, 0x5f, 0xf4, 0xf3, 0x92, 0x7f, 0x66, 0xeb, - 0x17, 0xdb, 0xb3, 0x6e, 0xa9, 0x1e, 0x8b, 0xf1, 0xda, 0x11, 0x99, 0xb9, - 0xf5, 0xe8, 0xea, 0xf0, 0x4d, 0xba, 0xc5, 0xfd, 0xf9, 0x7d, 0x3f, 0x7e, - 0xb1, 0x7b, 0xbf, 0x7e, 0x2c, 0x5f, 0xcf, 0xb3, 0x4f, 0x5c, 0x58, 0xbf, - 0x4b, 0xc7, 0x3f, 0x72, 0xc5, 0xf4, 0xf4, 0xdd, 0xcb, 0x17, 0x05, 0x19, - 0x88, 0xf5, 0xdc, 0x7d, 0xcc, 0xbe, 0x44, 0xc5, 0xe4, 0x5b, 0x7f, 0xfa, - 0x4a, 0x33, 0x3e, 0xc6, 0x1e, 0x73, 0xcb, 0x17, 0xff, 0xff, 0x87, 0x81, - 0x46, 0x16, 0x1a, 0x6b, 0x7b, 0x8e, 0x51, 0x4e, 0xfa, 0xce, 0x96, 0x2f, - 0xff, 0xff, 0xde, 0x6d, 0x42, 0x33, 0x38, 0x26, 0xeb, 0x0a, 0x42, 0x0f, - 0xcf, 0x0c, 0xeb, 0xcb, 0x17, 0xff, 0xf9, 0xe4, 0xbd, 0x19, 0xf7, 0x92, - 0xdb, 0xdd, 0x6e, 0xe4, 0xb1, 0x7e, 0xcf, 0x7d, 0xc2, 0x58, 0xbf, 0xf7, - 0x30, 0x98, 0xdf, 0xbc, 0x92, 0xc5, 0xff, 0x66, 0x7d, 0xf7, 0xfe, 0x46, - 0x11, 0xf3, 0x78, 0xa6, 0xf9, 0xc8, 0xd9, 0x58, 0xbc, 0x4d, 0x12, 0xc5, - 0x2c, 0x5c, 0x22, 0x58, 0xa9, 0x34, 0x7c, 0x0c, 0xbf, 0xe9, 0xfb, 0x8f, - 0xf3, 0x0e, 0x2c, 0x57, 0x0f, 0x67, 0xb1, 0x05, 0xf8, 0xa6, 0x29, 0x8f, - 0x58, 0xa8, 0x26, 0x15, 0x84, 0x4f, 0x09, 0x9f, 0x12, 0x5e, 0x92, 0x95, - 0x8b, 0xde, 0x6d, 0xd6, 0x2f, 0xd2, 0x0e, 0x3f, 0x4b, 0x16, 0x7e, 0x8f, - 0x1f, 0xe3, 0xd7, 0xfb, 0x35, 0xb4, 0xf1, 0xc6, 0xb1, 0x73, 0x12, 0xc5, - 0xfe, 0x21, 0x36, 0xda, 0xc3, 0xac, 0x5f, 0xf6, 0x1e, 0x7f, 0xec, 0x7e, - 0xcb, 0x17, 0xf4, 0x9f, 0x42, 0x6e, 0x2c, 0x51, 0xd1, 0x65, 0xf1, 0x6e, - 0x1a, 0x78, 0xea, 0xf4, 0xe0, 0xd6, 0x2f, 0x3e, 0x6c, 0xb1, 0x63, 0x56, - 0x2e, 0xfb, 0xc7, 0x9b, 0x0d, 0x0e, 0xdf, 0x71, 0xc9, 0xd6, 0x2e, 0xeb, - 0xcb, 0x17, 0xe8, 0x49, 0x4c, 0x4b, 0x17, 0xf7, 0xdf, 0x9a, 0xce, 0x96, - 0x2f, 0xf4, 0xfb, 0x8f, 0x14, 0x81, 0x62, 0xa5, 0x14, 0x9d, 0x0c, 0xc4, - 0x51, 0xf2, 0xfb, 0xd3, 0xad, 0x96, 0x2f, 0x61, 0x6e, 0xb1, 0x7e, 0x8b, - 0x7f, 0xce, 0xcb, 0x14, 0xb1, 0x50, 0x3f, 0x3c, 0x1e, 0x61, 0xd1, 0x16, - 0x5f, 0xf4, 0x24, 0x8b, 0x3d, 0xf7, 0x58, 0xbf, 0xbc, 0xe4, 0xe0, 0xe2, - 0xc5, 0x39, 0xf2, 0x08, 0xde, 0xf3, 0x67, 0x16, 0x2a, 0x4d, 0xe8, 0x88, - 0x6f, 0xbc, 0x26, 0xe2, 0xc5, 0xc7, 0x95, 0x8e, 0x8d, 0x1d, 0xfd, 0x3d, - 0x78, 0x4d, 0xc5, 0x8a, 0xc3, 0xd7, 0x34, 0xa2, 0xec, 0x3a, 0xc5, 0x9c, - 0x8d, 0xcc, 0x71, 0x15, 0xfd, 0xb6, 0xce, 0x53, 0x05, 0x8b, 0xdb, 0x9b, - 0x2b, 0x17, 0xe3, 0xb6, 0x9a, 0x0b, 0x17, 0xcf, 0xc1, 0x1d, 0x62, 0xf7, - 0xe6, 0x0b, 0x17, 0xdb, 0x1e, 0x60, 0xb1, 0x52, 0x78, 0x2c, 0x3b, 0x7d, - 0xee, 0x0a, 0x56, 0x2c, 0xeb, 0x14, 0x46, 0xd3, 0xc4, 0x77, 0xdd, 0xd2, - 0x5b, 0x2c, 0x54, 0x9e, 0x33, 0x90, 0x5f, 0x99, 0xfa, 0xf6, 0x2c, 0x5f, - 0x83, 0x9d, 0x49, 0xd6, 0x2b, 0x64, 0xe5, 0xe0, 0x50, 0x36, 0x4d, 0x42, - 0x68, 0x04, 0x1c, 0x28, 0xbc, 0xf3, 0xe5, 0x8a, 0x82, 0xa8, 0x7c, 0x28, - 0xe8, 0xbd, 0xe3, 0xb6, 0x09, 0x7a, 0xfb, 0x45, 0x9b, 0x2c, 0x5f, 0x0f, - 0xed, 0xa5, 0x8a, 0x94, 0x4c, 0x3a, 0x93, 0x11, 0xdf, 0x3f, 0xa7, 0x4b, - 0x17, 0xde, 0xf4, 0xf9, 0x62, 0xf4, 0x4d, 0xe5, 0x8a, 0xf9, 0xf1, 0xb1, - 0x10, 0x64, 0x77, 0xdb, 0x89, 0xa0, 0xb1, 0x7f, 0x48, 0x22, 0x84, 0xec, - 0xb1, 0x6d, 0x96, 0x2a, 0x07, 0x86, 0xe6, 0x17, 0x8a, 0x4d, 0x58, 0xa8, - 0x8d, 0xf1, 0xc8, 0x6f, 0xbd, 0x06, 0x1a, 0xc5, 0x4a, 0x3a, 0xb2, 0x14, - 0xac, 0x45, 0x7f, 0x9f, 0x4d, 0xd7, 0xa6, 0x0b, 0x17, 0xdc, 0x21, 0x7d, - 0x62, 0xff, 0xa5, 0xfd, 0xc7, 0x2e, 0xa0, 0xb1, 0x74, 0xe9, 0x62, 0xfe, - 0xd6, 0x76, 0x92, 0xf2, 0xc5, 0xff, 0x75, 0xbb, 0x9b, 0x84, 0xe6, 0xac, - 0x5b, 0x34, 0x7d, 0x7e, 0x2f, 0xbe, 0x26, 0x07, 0x16, 0x2a, 0x09, 0xad, - 0xe1, 0xa7, 0xc8, 0xd8, 0xe4, 0xa1, 0x05, 0xe2, 0x7b, 0xfa, 0x19, 0xff, - 0xb4, 0x16, 0x2d, 0xb2, 0xc5, 0xf4, 0x38, 0xc7, 0x58, 0xad, 0x8d, 0xb3, - 0x09, 0xdf, 0xb3, 0xe3, 0x0f, 0x8b, 0x17, 0x0e, 0x32, 0x59, 0x9d, 0x7b, - 0x20, 0xc1, 0x88, 0x65, 0x19, 0x0e, 0x63, 0x4f, 0x77, 0x4c, 0xe8, 0xbd, - 0xe1, 0x8b, 0x14, 0x2c, 0x75, 0x0d, 0xbf, 0xcb, 0xf2, 0x68, 0x48, 0x14, - 0x63, 0x3c, 0x8e, 0x37, 0xcb, 0x41, 0x32, 0x06, 0x43, 0x7c, 0xfa, 0xfb, - 0x2c, 0x5f, 0xce, 0x10, 0xd9, 0x8d, 0x58, 0xbf, 0xa2, 0x29, 0x3c, 0x66, - 0x7c, 0xf4, 0x78, 0x45, 0x7f, 0xb7, 0x7d, 0x46, 0x1d, 0xc6, 0xb1, 0x77, - 0x3c, 0xb1, 0x7f, 0x7d, 0xf9, 0xcc, 0xd2, 0xc5, 0xff, 0xcc, 0xfe, 0x72, - 0xf0, 0xbf, 0x1e, 0x4b, 0x17, 0x67, 0x16, 0x2f, 0xfd, 0x9a, 0xea, 0x4f, - 0xf6, 0xcd, 0x2c, 0x5d, 0xc0, 0x2c, 0x5f, 0x89, 0x8e, 0x52, 0xb1, 0x7f, - 0x0b, 0x9f, 0x68, 0x46, 0x46, 0x89, 0x90, 0x6e, 0x31, 0xf2, 0xe6, 0x46, - 0x21, 0x70, 0x8f, 0xc3, 0x18, 0xbd, 0xb4, 0xc7, 0xac, 0x5f, 0xda, 0xda, - 0x47, 0x84, 0xb1, 0x76, 0xbc, 0xb1, 0x7e, 0xcf, 0x71, 0xce, 0xb1, 0x7d, - 0x03, 0xf4, 0x12, 0xc5, 0xff, 0xe9, 0xeb, 0xd9, 0x13, 0xeb, 0xdc, 0x14, - 0x7a, 0xc5, 0xe6, 0xea, 0x32, 0x53, 0x05, 0xc2, 0x16, 0x2e, 0x21, 0x8e, - 0x14, 0x78, 0x9a, 0xa5, 0x74, 0x8f, 0x23, 0x85, 0xe9, 0x1f, 0x51, 0xac, - 0x72, 0x39, 0x6a, 0x83, 0x6b, 0xca, 0x34, 0xce, 0x9f, 0xff, 0x08, 0x92, - 0x86, 0x57, 0xab, 0x36, 0x9a, 0x8c, 0x6d, 0xfc, 0x26, 0x33, 0x77, 0xad, - 0x92, 0x6f, 0xff, 0xf6, 0xbd, 0xe9, 0x87, 0xe5, 0xf5, 0x25, 0xee, 0x0a, - 0x56, 0x2f, 0xfb, 0xc2, 0xd8, 0x38, 0xb8, 0x2e, 0x96, 0x2f, 0x37, 0xf8, - 0xb1, 0x68, 0xcc, 0x45, 0xef, 0x98, 0x02, 0x40, 0xbe, 0xd1, 0xdb, 0xcb, - 0x17, 0x47, 0xc7, 0xac, 0x5f, 0x41, 0xcb, 0x16, 0x2f, 0xee, 0x67, 0xbf, - 0x80, 0x58, 0xbf, 0x78, 0xa7, 0x3a, 0x58, 0xbb, 0x68, 0xc7, 0x45, 0xc4, - 0x79, 0x1c, 0x43, 0xde, 0x21, 0x0c, 0xba, 0x86, 0x9a, 0x7e, 0xa1, 0xe3, - 0x7a, 0x45, 0xdf, 0xac, 0x5f, 0xb5, 0xbf, 0xdf, 0x8b, 0x14, 0xe7, 0x98, - 0x22, 0x2b, 0xbd, 0x2b, 0x15, 0xde, 0x1b, 0x8e, 0x88, 0x6f, 0x6d, 0x1d, - 0x1b, 0xac, 0x5f, 0x9b, 0x62, 0x98, 0x2c, 0x5f, 0xec, 0xec, 0x59, 0xc0, - 0x1d, 0x62, 0xbb, 0xe2, 0x21, 0x3e, 0x4e, 0x45, 0x17, 0xe7, 0xf9, 0x34, - 0x4b, 0x17, 0xe1, 0x1c, 0xed, 0x12, 0xc5, 0xf9, 0xfa, 0xcc, 0xd9, 0x62, - 0xd9, 0xf3, 0xd3, 0xec, 0x55, 0x74, 0x74, 0x6e, 0xb1, 0x7b, 0xbe, 0xe0, - 0x35, 0x8b, 0xf4, 0x30, 0x66, 0x62, 0xc5, 0xf9, 0x9f, 0x6d, 0x4a, 0xc5, - 0xf7, 0x5b, 0xb9, 0x2c, 0x5f, 0xbc, 0x42, 0x68, 0xd9, 0x62, 0xbb, 0xc4, - 0xf0, 0x3b, 0xd3, 0x58, 0xd9, 0xef, 0xbe, 0xca, 0x7b, 0xe1, 0x04, 0x92, - 0xfc, 0xa7, 0xc5, 0x01, 0x92, 0x5c, 0x70, 0x2c, 0x5f, 0xf7, 0x7a, 0x11, - 0xbb, 0xc5, 0x01, 0x1a, 0xb1, 0x7e, 0xcf, 0x38, 0xb8, 0xb1, 0x77, 0x79, - 0xdf, 0x55, 0x8b, 0xf4, 0x69, 0x1a, 0x7b, 0x52, 0xb1, 0x5d, 0xe2, 0x37, - 0xa3, 0x41, 0x8e, 0xfa, 0xa3, 0x46, 0xa2, 0x88, 0x12, 0xdf, 0xa3, 0x5f, - 0x79, 0xcd, 0x79, 0x62, 0xff, 0x06, 0x59, 0xad, 0x4e, 0xeb, 0x15, 0xde, - 0x1f, 0x54, 0x6c, 0x6b, 0x7d, 0xa3, 0xfb, 0xa5, 0x8b, 0xf4, 0x6f, 0xde, - 0x9f, 0x86, 0xac, 0x5c, 0xfc, 0x58, 0xb0, 0x4b, 0x15, 0xde, 0x1e, 0xfe, - 0xe6, 0xa1, 0x8b, 0xdf, 0xa3, 0x7e, 0xf6, 0x60, 0x75, 0x8b, 0xa6, 0x3d, - 0x62, 0xc3, 0x58, 0xaf, 0x9a, 0xcf, 0x0d, 0x5f, 0xfa, 0x35, 0x46, 0x91, - 0xb7, 0x7b, 0x1b, 0x46, 0xdd, 0xf2, 0x36, 0xef, 0x16, 0x2f, 0xfd, 0x1a, - 0xe3, 0x6e, 0xf9, 0x1a, 0xe3, 0x5f, 0x7b, 0xde, 0xc6, 0xfd, 0xe2, 0xc5, - 0xff, 0xbb, 0xe4, 0x6a, 0x8d, 0x7d, 0xf2, 0x35, 0xf7, 0xbd, 0xf5, 0x8d, - 0x7d, 0xe2, 0xc5, 0xff, 0x7c, 0x70, 0x8c, 0x87, 0x0a, 0x33, 0xbd, 0x4d, - 0x72, 0x34, 0x71, 0xef, 0xab, 0x9d, 0x77, 0x8a, 0x95, 0x3b, 0xd5, 0xfe, - 0xfa, 0xc6, 0xfb, 0x7e, 0xef, 0x4e, 0xcc, 0x4b, 0x17, 0xf4, 0xbf, 0xbd, - 0x27, 0x58, 0xb8, 0x71, 0xeb, 0x15, 0x1b, 0x9f, 0xa4, 0x6b, 0x2c, 0xe8, - 0xb6, 0xf6, 0xf9, 0xf4, 0x8b, 0xb9, 0xa5, 0x8b, 0xa7, 0x8b, 0x16, 0xd2, - 0xc5, 0x8e, 0xb1, 0x47, 0x37, 0x7e, 0x17, 0x08, 0x4a, 0xff, 0xf1, 0xcb, - 0x3a, 0x3e, 0x6f, 0x25, 0x3b, 0xac, 0x5f, 0xff, 0xb5, 0x3f, 0x9c, 0xdc, - 0x6e, 0x5b, 0x1e, 0x60, 0xb1, 0x6f, 0x62, 0x28, 0x43, 0x4b, 0xbb, 0x52, - 0xb1, 0x4e, 0x78, 0x00, 0x29, 0xbe, 0xd6, 0x9a, 0x0b, 0x17, 0xfb, 0x37, - 0x93, 0x3e, 0xc7, 0x58, 0xa9, 0x3d, 0x8f, 0x91, 0xdf, 0xfc, 0x42, 0x93, - 0x19, 0xfd, 0x0c, 0xe2, 0xc5, 0xff, 0xdf, 0x9e, 0x30, 0x7f, 0xfb, 0xf5, - 0xc5, 0x8b, 0xfe, 0x79, 0x2c, 0xed, 0xa9, 0xe2, 0xc5, 0x6e, 0x88, 0x0f, - 0xa3, 0xde, 0x89, 0xc2, 0x58, 0xbf, 0x00, 0x50, 0x83, 0x2c, 0x53, 0x9e, - 0x40, 0x63, 0xf7, 0xa2, 0x70, 0x96, 0x2e, 0xc8, 0x2c, 0x53, 0x9b, 0x66, - 0x1f, 0xa3, 0x9f, 0xb8, 0x16, 0x2f, 0xfc, 0xe6, 0x7d, 0xda, 0x1e, 0x7d, - 0x96, 0x2f, 0x36, 0xa0, 0xb1, 0x58, 0x7f, 0xff, 0x22, 0x12, 0x05, 0xfb, - 0xc0, 0x0c, 0xa2, 0x58, 0xbf, 0xf3, 0x70, 0xce, 0x73, 0x21, 0x09, 0x58, - 0xb7, 0x16, 0x2f, 0xe9, 0xdd, 0xf6, 0x62, 0x58, 0xbf, 0xff, 0x13, 0x1a, - 0xfa, 0x98, 0x43, 0x38, 0x00, 0x4a, 0xc5, 0xfe, 0x6f, 0x0b, 0x30, 0x8d, - 0x58, 0xa1, 0xa6, 0xc3, 0x85, 0xc6, 0x95, 0xc4, 0x81, 0xa1, 0x2f, 0x97, - 0x01, 0x56, 0xfc, 0x52, 0x31, 0x71, 0x62, 0xc2, 0x58, 0xbe, 0x92, 0x98, - 0x96, 0x28, 0x8d, 0xa7, 0x84, 0xae, 0x9d, 0x2c, 0x5b, 0xbf, 0x58, 0xbd, - 0x3f, 0x95, 0x8a, 0x94, 0x63, 0x62, 0xe1, 0xa4, 0x11, 0x0b, 0x90, 0xbd, - 0xff, 0x8b, 0x05, 0xb9, 0x66, 0xc1, 0xc1, 0x62, 0xfe, 0xcd, 0x01, 0xb0, - 0x0b, 0x17, 0xfd, 0x3a, 0xd3, 0xf7, 0x6e, 0x2d, 0x96, 0x2e, 0x63, 0x98, - 0x7d, 0x91, 0x85, 0xb7, 0x69, 0xc9, 0x1b, 0xdd, 0xd0, 0xad, 0xbe, 0x7f, - 0x86, 0x75, 0x8b, 0x3a, 0xc5, 0xdb, 0x32, 0xc5, 0x7c, 0xd4, 0xf8, 0x46, - 0xff, 0xf3, 0x9a, 0x66, 0x13, 0x75, 0xc3, 0x4d, 0x65, 0x8a, 0xdd, 0x17, - 0x8e, 0x9a, 0x44, 0x37, 0xdd, 0x37, 0xe5, 0x62, 0xff, 0x85, 0x9a, 0x2c, - 0xf7, 0xdd, 0x62, 0xfe, 0x81, 0x87, 0x6f, 0x4a, 0xc5, 0x40, 0xf9, 0xfa, - 0x38, 0xbf, 0xfb, 0x85, 0x80, 0x8c, 0xfb, 0xee, 0xda, 0x58, 0xbb, 0x31, - 0x62, 0xa5, 0x30, 0xb7, 0x84, 0x53, 0x11, 0x84, 0x91, 0x71, 0x04, 0xb1, - 0x7e, 0xe1, 0x09, 0xa0, 0xb1, 0x7f, 0xfb, 0x8e, 0x7e, 0xb8, 0xde, 0x17, - 0x5c, 0x95, 0x8b, 0xfb, 0xd1, 0x41, 0xb4, 0x6a, 0xc5, 0xd9, 0xba, 0xc5, - 0xe1, 0xe1, 0xac, 0x79, 0x3e, 0x31, 0xbe, 0xfc, 0x9f, 0x75, 0x8a, 0x94, - 0xcb, 0x70, 0x63, 0xa2, 0x86, 0x84, 0xb7, 0x8c, 0xee, 0x10, 0x16, 0x2f, - 0xde, 0xfb, 0x8b, 0xbf, 0x58, 0xa8, 0x1e, 0x36, 0x0c, 0x5f, 0x66, 0x11, - 0xab, 0x17, 0xd0, 0xd9, 0x8d, 0x58, 0xbf, 0xf8, 0xa7, 0xdc, 0xc2, 0x17, - 0x84, 0x6a, 0xc5, 0x18, 0x7d, 0x5c, 0x25, 0xae, 0x23, 0x43, 0xc4, 0x22, - 0x84, 0x65, 0xe1, 0xe7, 0xd6, 0x2f, 0x44, 0xe1, 0x2c, 0x58, 0x70, 0x37, - 0x8e, 0x3b, 0x7f, 0xfb, 0x37, 0x1b, 0x90, 0x79, 0xad, 0x4f, 0x65, 0x8b, - 0xff, 0x8c, 0x99, 0x29, 0x39, 0x86, 0x7e, 0x39, 0x62, 0xa5, 0x17, 0xa0, - 0x26, 0x24, 0xdb, 0xff, 0x18, 0x3c, 0x27, 0x07, 0x3e, 0xeb, 0x17, 0xfa, - 0x13, 0x84, 0x39, 0x3a, 0xc5, 0x68, 0xfc, 0x7b, 0xf3, 0xfb, 0xef, 0x6b, - 0x06, 0xb1, 0x7d, 0xa6, 0x23, 0x56, 0x2e, 0x14, 0x16, 0x2a, 0x4f, 0x79, - 0x88, 0xfb, 0x11, 0xdf, 0xfb, 0x8c, 0x60, 0xf3, 0xdc, 0x6e, 0x96, 0x2f, - 0xfd, 0xfc, 0x8b, 0xef, 0xf9, 0xd4, 0xac, 0x5c, 0xdd, 0x2c, 0x5e, 0x29, - 0x8f, 0x58, 0xbf, 0xcd, 0xc6, 0xf8, 0x8b, 0x65, 0x8a, 0x23, 0xeb, 0xf0, - 0xc0, 0x87, 0xe8, 0xc6, 0xc1, 0xbb, 0x65, 0x38, 0x46, 0x20, 0x37, 0x9c, - 0x21, 0xea, 0x18, 0x8f, 0x2b, 0x0e, 0x28, 0xcb, 0x35, 0x19, 0x39, 0xe1, - 0xe3, 0xf8, 0xce, 0x8a, 0x36, 0xee, 0x46, 0xc9, 0xe8, 0xcb, 0x85, 0x09, - 0xfe, 0xd0, 0x85, 0x08, 0xbc, 0x34, 0x1e, 0xe8, 0x55, 0x5d, 0xc1, 0x2c, - 0x5e, 0x98, 0xe8, 0xdd, 0x62, 0xda, 0x58, 0xba, 0x74, 0xb1, 0x78, 0xb3, - 0xb9, 0x62, 0xf9, 0xa7, 0xa8, 0x2c, 0x5d, 0x9f, 0x58, 0xbf, 0x6b, 0xa8, - 0x7a, 0x56, 0x2f, 0x67, 0x6c, 0x58, 0xac, 0x3c, 0x82, 0x2a, 0xa3, 0x11, - 0xd5, 0xb8, 0x93, 0x0b, 0xf0, 0x7e, 0x38, 0x8c, 0x35, 0xfb, 0xec, 0x3b, - 0xf9, 0x62, 0xa5, 0x3a, 0x58, 0x0c, 0x6a, 0x30, 0xff, 0x2e, 0x5c, 0x2d, - 0x2c, 0x58, 0xeb, 0x15, 0xb9, 0xaa, 0x38, 0xc5, 0xf6, 0x44, 0xe7, 0x58, - 0xbb, 0x40, 0x58, 0xb9, 0xb1, 0x62, 0xba, 0x35, 0xda, 0x18, 0xbc, 0x4d, - 0xe5, 0x8b, 0xc4, 0xfc, 0x58, 0xbc, 0x59, 0xd2, 0xc5, 0xd9, 0xd2, 0xc5, - 0x82, 0xef, 0x4f, 0xb6, 0x47, 0x36, 0x1c, 0x18, 0xed, 0xd3, 0xf5, 0x8b, - 0xed, 0x76, 0x63, 0xac, 0x5f, 0xdb, 0x9c, 0xa7, 0xa0, 0x2c, 0x5c, 0xc7, - 0x58, 0xbd, 0xc8, 0x4a, 0xc5, 0xfb, 0x99, 0x98, 0xeb, 0x15, 0x87, 0x86, - 0x01, 0xdb, 0xff, 0xce, 0x64, 0xc4, 0xfe, 0xd4, 0xee, 0x2d, 0xd6, 0x2f, - 0x01, 0xba, 0x58, 0xbe, 0xcf, 0x48, 0x4b, 0x15, 0x87, 0x82, 0x43, 0xd7, - 0xff, 0x9c, 0xcf, 0xe4, 0x4f, 0xd7, 0x3f, 0x9b, 0xac, 0x5c, 0x5c, 0x58, - 0xbf, 0xe8, 0x67, 0xb0, 0x5b, 0xb1, 0x2c, 0x5f, 0x13, 0x7b, 0x8b, 0x15, - 0x03, 0xf2, 0xe8, 0x5c, 0xe7, 0x37, 0xa7, 0x34, 0xb1, 0x7f, 0xfb, 0x76, - 0xd3, 0x79, 0xf9, 0x25, 0x20, 0x58, 0xb4, 0x3e, 0x7c, 0xa1, 0x8e, 0x5f, - 0xb3, 0xbd, 0x27, 0x1a, 0xc5, 0x74, 0x8e, 0xad, 0x42, 0x54, 0x05, 0x35, - 0x2b, 0xa5, 0xbb, 0x36, 0xc0, 0x88, 0x6a, 0x39, 0x08, 0xfd, 0xd2, 0x1c, - 0x5e, 0x22, 0x5d, 0x18, 0x1d, 0x68, 0x04, 0x3c, 0x84, 0x7f, 0x88, 0x05, - 0x1d, 0x55, 0xf0, 0xce, 0x17, 0x16, 0x2f, 0xf6, 0xff, 0x7d, 0x3e, 0x41, - 0x62, 0xe3, 0x5d, 0x62, 0xfe, 0x2c, 0x2d, 0x9f, 0x4b, 0x17, 0xf1, 0x66, - 0xdb, 0x4c, 0x7a, 0xc5, 0x01, 0x15, 0x7c, 0x34, 0xec, 0x31, 0xdc, 0x5b, - 0x7b, 0x60, 0xce, 0xb1, 0x79, 0xc3, 0x3a, 0xc5, 0x8e, 0xb1, 0x73, 0x8d, - 0x62, 0x9c, 0xf9, 0xd8, 0x83, 0x83, 0xc1, 0x89, 0x5e, 0xfc, 0x92, 0xc5, - 0xee, 0x77, 0x77, 0x2c, 0x5f, 0x19, 0x00, 0x1d, 0x62, 0xf6, 0xb0, 0x6b, - 0x17, 0xf1, 0x85, 0x80, 0x90, 0x2c, 0x5e, 0x2c, 0xe2, 0xc5, 0xf6, 0xc2, - 0x06, 0x11, 0xe5, 0x76, 0x2e, 0xbf, 0xcd, 0xe9, 0x8b, 0x8e, 0x75, 0x8b, - 0xf0, 0x8f, 0xed, 0xa3, 0x96, 0x28, 0xd4, 0xc1, 0x34, 0xcf, 0xf3, 0xbe, - 0x1a, 0x5f, 0xe9, 0x81, 0x67, 0x5e, 0xc5, 0x8b, 0xf6, 0xef, 0xd6, 0xc4, - 0xb1, 0x7f, 0xf3, 0x6f, 0x24, 0x38, 0xa1, 0x3a, 0xd9, 0x62, 0xba, 0x3f, - 0x2f, 0x95, 0xdb, 0x8b, 0x14, 0xe6, 0xd7, 0x84, 0x77, 0x8f, 0x87, 0x58, - 0xbe, 0x39, 0xe4, 0xeb, 0x17, 0xed, 0x33, 0x37, 0x96, 0x28, 0x67, 0xce, - 0xc3, 0xa4, 0x47, 0x7f, 0xfd, 0xee, 0x0f, 0x58, 0xe6, 0xfc, 0x26, 0x2d, - 0x96, 0x2d, 0xb2, 0xc5, 0xe1, 0xe1, 0xab, 0x15, 0xa3, 0x62, 0x42, 0x77, - 0xbe, 0x23, 0xac, 0x5d, 0xd8, 0x6b, 0x15, 0xdf, 0x6b, 0xb8, 0xd3, 0x0d, - 0x08, 0x42, 0xa4, 0x67, 0x78, 0x39, 0xd1, 0x23, 0xc6, 0x53, 0xa3, 0xff, - 0xc3, 0x69, 0xa1, 0x0f, 0xc2, 0xdf, 0x42, 0x10, 0x44, 0x01, 0x0f, 0x5f, - 0xb0, 0x8a, 0x76, 0x58, 0xb7, 0x4b, 0x1a, 0x34, 0xf4, 0xb1, 0x71, 0x41, - 0x62, 0x9c, 0xd1, 0x88, 0x32, 0xff, 0xb5, 0x84, 0x0e, 0x7b, 0x9d, 0x2c, - 0x5f, 0xb9, 0x14, 0x96, 0xcb, 0x15, 0x88, 0xcb, 0x35, 0x19, 0x88, 0x3c, - 0x77, 0x78, 0xc8, 0x6c, 0xb1, 0x7f, 0xc4, 0xfa, 0x9c, 0x2f, 0x89, 0x62, - 0xf1, 0xdf, 0x8b, 0x17, 0xe2, 0x35, 0xf3, 0x8b, 0x17, 0xfe, 0x83, 0x6b, - 0x6f, 0x8b, 0x60, 0x79, 0x62, 0xff, 0x38, 0x0e, 0xd0, 0xc2, 0x58, 0xbf, - 0x7d, 0xf8, 0xe3, 0x58, 0xbc, 0xf2, 0x75, 0x8b, 0x6a, 0x07, 0x89, 0xf2, - 0x8b, 0xe6, 0xf3, 0x6e, 0xb1, 0x4e, 0x79, 0x61, 0x14, 0x5f, 0x0b, 0xbf, - 0xe6, 0xcb, 0x17, 0xfe, 0x09, 0x81, 0x9b, 0xfd, 0x81, 0xc5, 0x8a, 0x93, - 0xeb, 0xc2, 0xab, 0xf7, 0x24, 0x01, 0xec, 0xb1, 0x7f, 0xff, 0x84, 0x45, - 0x9e, 0xfb, 0xe4, 0x3f, 0x9a, 0x67, 0xec, 0xb1, 0x7f, 0xcd, 0xd4, 0x93, - 0x0f, 0x0d, 0x58, 0xa0, 0x22, 0x67, 0x8c, 0x14, 0x6a, 0xad, 0xd7, 0x1d, - 0x88, 0xa3, 0x48, 0x7f, 0x86, 0x09, 0x42, 0x37, 0x84, 0x1e, 0x86, 0x25, - 0xff, 0xf9, 0xfa, 0xe7, 0xc2, 0x6f, 0x49, 0x31, 0x0a, 0x56, 0x2f, 0xff, - 0xc6, 0x7f, 0x06, 0xe5, 0x87, 0xeb, 0xc2, 0x6e, 0x2c, 0x50, 0x11, 0x59, - 0xd9, 0x56, 0xe0, 0x86, 0xb1, 0x7f, 0xfb, 0xdf, 0xc3, 0x81, 0xb5, 0x9d, - 0xb0, 0x6b, 0x17, 0x4f, 0xd6, 0x2c, 0x35, 0x8a, 0x39, 0xa9, 0x21, 0x7b, - 0x1a, 0xb1, 0x78, 0x81, 0x2b, 0x17, 0x10, 0xcc, 0x35, 0xfc, 0x13, 0xbb, - 0x3c, 0xb1, 0x7e, 0xe0, 0x4c, 0x5b, 0x2c, 0x5f, 0x49, 0xf0, 0x0b, 0x15, - 0x87, 0x99, 0xb9, 0x55, 0x4a, 0x6e, 0xd8, 0xea, 0xc9, 0xe0, 0x2d, 0x26, - 0x3b, 0xcd, 0xbe, 0x2c, 0x5f, 0xff, 0x84, 0xc1, 0xe7, 0xa4, 0xb3, 0x59, - 0x08, 0x4a, 0xc5, 0xe2, 0x60, 0x8c, 0x3f, 0x12, 0x1d, 0xbe, 0x26, 0x8f, - 0xe9, 0x62, 0xf7, 0x1b, 0x75, 0x8a, 0xf1, 0xe2, 0x08, 0x9a, 0xff, 0xc2, - 0x1f, 0xde, 0x7b, 0x68, 0x3e, 0x2c, 0x56, 0x8f, 0x94, 0x88, 0xaf, 0xbd, - 0x1d, 0x9f, 0x58, 0xbd, 0xc1, 0xca, 0xc5, 0xfe, 0xcd, 0xe4, 0x84, 0xd0, - 0x58, 0xbf, 0xff, 0xb7, 0xce, 0xbd, 0xf7, 0xd4, 0xb4, 0x01, 0x99, 0x12, - 0xc5, 0x1a, 0x89, 0x02, 0x33, 0xa3, 0x51, 0xa0, 0xd0, 0xad, 0xa9, 0x4c, - 0xff, 0x08, 0x45, 0x0f, 0x6b, 0xdc, 0x6e, 0xcb, 0x16, 0xe2, 0xc5, 0xb1, - 0x62, 0x9c, 0xd1, 0xf7, 0x09, 0x5f, 0x37, 0x80, 0x25, 0x8b, 0xc5, 0x26, - 0xac, 0x5f, 0xfd, 0xee, 0x60, 0x41, 0xb1, 0x69, 0xf7, 0x58, 0xad, 0xd1, - 0x0f, 0xd1, 0x18, 0x43, 0xb7, 0xf0, 0x67, 0xcc, 0x23, 0x56, 0x2e, 0x90, - 0x2c, 0x53, 0x9e, 0x30, 0x65, 0xf5, 0xd2, 0x70, 0xe7, 0x42, 0x68, 0x55, - 0x01, 0xe6, 0xff, 0x13, 0x43, 0x90, 0x0b, 0x65, 0x8b, 0xff, 0xff, 0x89, - 0x81, 0x85, 0xb6, 0x05, 0x9a, 0xd9, 0xf9, 0xfc, 0xf4, 0x76, 0x2c, 0x56, - 0x22, 0xaf, 0xc6, 0xd7, 0xd0, 0xe3, 0x92, 0xc5, 0xf7, 0xf7, 0x9d, 0xd6, - 0x2f, 0xfd, 0xb9, 0x37, 0xdb, 0xac, 0xeb, 0xcb, 0x17, 0xf8, 0x98, 0xdd, - 0x3c, 0x9a, 0xb1, 0x50, 0x46, 0xf7, 0x44, 0x4e, 0x44, 0x22, 0x50, 0x90, - 0x6c, 0x1a, 0xc5, 0xf6, 0xc1, 0x34, 0x16, 0x2f, 0xfe, 0x9d, 0x08, 0xe4, - 0xc6, 0x8f, 0x5d, 0xfa, 0xc5, 0xec, 0x63, 0xac, 0x51, 0xa7, 0xcf, 0xa4, - 0xba, 0x94, 0xc3, 0x7a, 0x4b, 0x71, 0x36, 0x84, 0x65, 0xf1, 0x79, 0xce, - 0xb1, 0x7a, 0x66, 0x0b, 0x18, 0x68, 0xaf, 0xe9, 0xe4, 0xfe, 0x78, 0xb1, - 0x7b, 0x77, 0xdd, 0x62, 0xf3, 0xfd, 0x96, 0x2f, 0xcd, 0x07, 0xf8, 0x96, - 0x29, 0x8f, 0x10, 0x87, 0x2f, 0x47, 0x67, 0xd6, 0x2e, 0xd4, 0x25, 0x14, - 0x7f, 0x63, 0xf1, 0x05, 0x69, 0x30, 0xb6, 0x86, 0x85, 0xde, 0xc5, 0x8a, - 0x96, 0x7c, 0x8e, 0xc7, 0x90, 0x20, 0xc9, 0x62, 0x86, 0xc6, 0x5d, 0xd1, - 0x2b, 0xc7, 0x1f, 0xa8, 0x5c, 0x7e, 0x50, 0xdb, 0x47, 0x76, 0x52, 0xb6, - 0x78, 0xc6, 0x28, 0xcd, 0x83, 0x28, 0xbf, 0x3f, 0x08, 0x5e, 0x58, 0xbe, - 0x07, 0x03, 0x02, 0xc5, 0xff, 0xe3, 0x5b, 0x3a, 0xf7, 0xa7, 0x3b, 0x3e, - 0xeb, 0x17, 0x9c, 0x80, 0xb1, 0x7f, 0xe8, 0x72, 0x4a, 0x77, 0x97, 0xfa, - 0xc5, 0xfd, 0x25, 0xef, 0xe4, 0x16, 0x2e, 0xd7, 0x16, 0x2b, 0x47, 0x8a, - 0xc5, 0xb5, 0xd2, 0x29, 0x3b, 0x42, 0x0e, 0xff, 0x16, 0x73, 0xcc, 0xc4, - 0xb1, 0x46, 0xa6, 0xd5, 0xf4, 0xe6, 0x86, 0x07, 0x62, 0xbb, 0xee, 0xee, - 0xe9, 0x8f, 0x58, 0xbf, 0xfe, 0xf3, 0x90, 0xa1, 0x9c, 0x18, 0x9b, 0x50, - 0x58, 0xb4, 0x98, 0x7f, 0x81, 0x96, 0x5f, 0xf8, 0xed, 0x0c, 0xfb, 0xeb, - 0xec, 0xb1, 0x6d, 0x68, 0xf9, 0xc0, 0x53, 0x7e, 0xe4, 0x45, 0x23, 0x58, - 0xa7, 0x3d, 0x1f, 0x14, 0x5f, 0xff, 0xc5, 0x86, 0xe1, 0x19, 0xcf, 0x7f, - 0x0e, 0x1c, 0x81, 0x62, 0xa4, 0xff, 0xb0, 0x86, 0xff, 0x09, 0xb8, 0xf1, - 0x38, 0x4b, 0x15, 0x2a, 0xf6, 0xde, 0x38, 0xff, 0xc7, 0xee, 0x44, 0x17, - 0xfc, 0x11, 0x31, 0xb8, 0x37, 0x25, 0x8b, 0xdf, 0x92, 0x58, 0xbe, 0xf7, - 0x9b, 0x75, 0x8b, 0xbc, 0x75, 0x8b, 0x47, 0x2c, 0x54, 0x0f, 0x47, 0xa2, - 0x4f, 0x8c, 0x54, 0xa3, 0x5b, 0x73, 0x96, 0x6d, 0xbe, 0x1e, 0x9c, 0x25, - 0x8b, 0xfb, 0x33, 0x6c, 0xcf, 0x2c, 0x5c, 0x6f, 0x65, 0x8b, 0xd8, 0x21, - 0xac, 0x56, 0xc8, 0x89, 0x19, 0x21, 0x16, 0xf0, 0x6e, 0xfd, 0x90, 0x90, - 0x71, 0x62, 0xff, 0xfe, 0xfc, 0xf3, 0x21, 0xf9, 0x39, 0x31, 0xa5, 0x80, - 0x58, 0xa8, 0x22, 0x0b, 0xc5, 0x17, 0xfd, 0xa3, 0x3f, 0x83, 0x29, 0xdd, - 0x62, 0xa4, 0xf7, 0x9c, 0x8e, 0xf3, 0x97, 0x96, 0x2f, 0x6f, 0x9a, 0x58, - 0xbd, 0xd9, 0xb7, 0x58, 0xa9, 0x37, 0xd8, 0x3d, 0x7d, 0xf9, 0xed, 0x8b, - 0x17, 0xf3, 0x76, 0x78, 0x9c, 0x25, 0x8a, 0x3a, 0x33, 0x89, 0x6b, 0xc3, - 0xe1, 0x92, 0x5f, 0xe1, 0x6b, 0x63, 0xce, 0x79, 0x62, 0xff, 0xb9, 0x27, - 0x1f, 0xe4, 0xb7, 0x58, 0xb9, 0xcb, 0x0f, 0xbc, 0xd3, 0x5b, 0x8b, 0x65, - 0x8a, 0x94, 0x78, 0x0e, 0x15, 0x98, 0x59, 0x7f, 0xdb, 0x66, 0xf2, 0x2f, - 0xe6, 0x96, 0x29, 0x62, 0xc2, 0x93, 0xc7, 0xe1, 0xdd, 0xf7, 0xdb, 0xa8, - 0x2c, 0x54, 0x0f, 0x2f, 0x72, 0x7b, 0xf3, 0x68, 0x11, 0xd8, 0xb1, 0x7b, - 0xbd, 0xed, 0xe5, 0x8a, 0x19, 0xe8, 0x76, 0x2b, 0xbd, 0xf0, 0xfb, 0x2c, - 0x5c, 0xfb, 0x2c, 0x5f, 0xf4, 0x9c, 0xb3, 0x7d, 0x38, 0x16, 0x2c, 0x35, - 0x8b, 0xdc, 0xe6, 0x2c, 0x58, 0x72, 0x6b, 0xd8, 0x4a, 0xa0, 0x8c, 0x6d, - 0x10, 0xf0, 0x60, 0x4d, 0x17, 0xe6, 0x7d, 0xf0, 0x96, 0x2f, 0xfe, 0xcc, - 0x23, 0x74, 0xfc, 0xe3, 0x1a, 0xb1, 0x5f, 0x3e, 0xc0, 0xc9, 0xef, 0xf4, - 0x31, 0xf9, 0xc1, 0x4a, 0xc5, 0xfc, 0x3c, 0x28, 0x7f, 0x16, 0x2f, 0xff, - 0xff, 0x67, 0x3f, 0x9a, 0x92, 0x6e, 0xa1, 0xf9, 0xf7, 0xa7, 0xaf, 0xc9, - 0xd6, 0x2a, 0x51, 0xb0, 0xe6, 0x67, 0x2d, 0xbf, 0xdf, 0x7e, 0xcf, 0xb8, - 0x67, 0x58, 0xbf, 0xf7, 0xa4, 0xfd, 0x6e, 0xfd, 0x66, 0x96, 0x2f, 0xdf, - 0xcd, 0x3f, 0x16, 0x2f, 0x13, 0xc3, 0x74, 0x51, 0x74, 0x71, 0xe4, 0x2b, - 0xfd, 0xf1, 0x6d, 0x16, 0x66, 0xeb, 0x17, 0x75, 0xe5, 0x8b, 0xf7, 0x5e, - 0x29, 0xc5, 0x8b, 0xf1, 0x30, 0xf0, 0xd5, 0x8b, 0xe8, 0x4e, 0x79, 0x62, - 0xec, 0x01, 0x87, 0xe5, 0x25, 0x1d, 0x14, 0x5f, 0xd3, 0xec, 0x71, 0x77, - 0xeb, 0x14, 0xc7, 0xda, 0x03, 0xbb, 0xfe, 0xcd, 0xb0, 0x78, 0x53, 0x1e, - 0xb1, 0x7f, 0xff, 0xee, 0x4c, 0x02, 0xcf, 0x87, 0xe2, 0x90, 0x37, 0x80, - 0x19, 0x41, 0x62, 0xa5, 0x70, 0x1f, 0x68, 0x7d, 0xc2, 0x1a, 0x03, 0x42, - 0x63, 0x70, 0x43, 0xe0, 0x88, 0x7c, 0x77, 0x7f, 0xf8, 0xbd, 0x1d, 0x91, - 0x41, 0xb5, 0xb0, 0xe5, 0x62, 0xff, 0xfe, 0x28, 0x4f, 0x9b, 0xfc, 0x76, - 0xf0, 0x03, 0x28, 0x2c, 0x52, 0xc5, 0xef, 0x64, 0x7a, 0xc5, 0x39, 0xac, - 0xf0, 0x65, 0xff, 0x4e, 0x43, 0xf8, 0xf0, 0xe2, 0xc5, 0x70, 0xf6, 0x3c, - 0x41, 0x7e, 0x1c, 0x5f, 0x14, 0x7a, 0xc5, 0x74, 0x7a, 0x04, 0x45, 0x58, - 0x9d, 0x03, 0xa7, 0xb4, 0x65, 0xf7, 0xed, 0x13, 0xe1, 0xab, 0x17, 0xe9, - 0xfb, 0xf5, 0x05, 0x8b, 0x8f, 0x05, 0x8b, 0xfd, 0x9d, 0x78, 0xc8, 0xe7, - 0x35, 0x62, 0xfd, 0xd7, 0xa3, 0x9c, 0xd5, 0x8b, 0xc7, 0x7f, 0x18, 0x7d, - 0x18, 0x75, 0x7f, 0xcd, 0x9b, 0x8f, 0x34, 0x07, 0x58, 0xa3, 0x13, 0x15, - 0x19, 0x4e, 0x42, 0x03, 0xe6, 0x77, 0xfb, 0xae, 0x06, 0x4f, 0x23, 0x58, - 0xbf, 0xfa, 0x77, 0x93, 0xc9, 0x30, 0xf0, 0xd5, 0x8a, 0xd2, 0x2f, 0x09, - 0x0f, 0xb8, 0xd6, 0xfe, 0xeb, 0x9f, 0x66, 0x3a, 0xc5, 0x4a, 0xa5, 0xa7, - 0x8f, 0xe4, 0x33, 0x2b, 0xfd, 0x0e, 0x14, 0x81, 0x8e, 0xb1, 0x7e, 0x6e, - 0xbd, 0xb4, 0xac, 0x54, 0x9e, 0xe9, 0x19, 0xdf, 0x8d, 0xc1, 0x6b, 0x65, - 0x8b, 0xdb, 0x8a, 0x56, 0x2f, 0xff, 0x8d, 0x6e, 0x6a, 0x7d, 0xfc, 0x3e, - 0x6b, 0x16, 0x2a, 0x4f, 0xbb, 0xc3, 0xd5, 0xa4, 0x5d, 0x05, 0x09, 0x9b, - 0xf9, 0xf5, 0xb0, 0x81, 0x8b, 0x17, 0xee, 0xe1, 0x1f, 0x06, 0xb1, 0x7b, - 0x4c, 0x05, 0x8b, 0xff, 0x4e, 0x75, 0xec, 0x3b, 0x10, 0x16, 0x2f, 0xa7, - 0x0b, 0x75, 0x8a, 0xf9, 0xf0, 0x78, 0xfa, 0xfb, 0xaf, 0x49, 0xd6, 0x2a, - 0x51, 0x86, 0x6b, 0xef, 0x44, 0x56, 0x25, 0x8b, 0xf9, 0xda, 0x1e, 0x7d, - 0x96, 0x2f, 0xef, 0x3f, 0xdc, 0xbc, 0xb1, 0x46, 0x1f, 0x67, 0xc4, 0x43, - 0x2e, 0xbf, 0xb8, 0xf9, 0xd9, 0xb4, 0xb1, 0x7f, 0xfb, 0x83, 0x29, 0x1f, - 0xe7, 0xdc, 0x33, 0x16, 0x2a, 0x08, 0xab, 0x39, 0x8f, 0x8b, 0xef, 0xfd, - 0x91, 0xe3, 0xfc, 0xfe, 0x7d, 0xc5, 0x8b, 0xff, 0xd3, 0x9d, 0x7b, 0xf3, - 0xe2, 0x90, 0x71, 0x62, 0xff, 0xfb, 0x38, 0x60, 0x0e, 0x21, 0xeb, 0xbf, - 0xe0, 0x67, 0x58, 0xba, 0x40, 0xb1, 0x76, 0x0d, 0x62, 0xef, 0x9d, 0x62, - 0xff, 0xfc, 0x22, 0xf7, 0x24, 0x8d, 0xfb, 0xe1, 0x34, 0x16, 0x2f, 0xff, - 0xe1, 0x41, 0xcb, 0x04, 0x03, 0x33, 0x84, 0x26, 0xd9, 0x62, 0xa0, 0x8b, - 0x0d, 0x2a, 0x54, 0x13, 0x73, 0xdd, 0x6a, 0x3c, 0x5f, 0x82, 0xfe, 0x86, - 0x45, 0x4a, 0xe8, 0x96, 0xc5, 0x38, 0x5e, 0xf0, 0xef, 0x68, 0xd2, 0x08, - 0xc3, 0xc8, 0x42, 0x8e, 0xf6, 0xfd, 0xb1, 0xdb, 0xd2, 0xb1, 0x7e, 0x1b, - 0x10, 0x8e, 0xb1, 0x7f, 0xe1, 0x03, 0x37, 0xcd, 0x69, 0xa0, 0xb1, 0x76, - 0xc4, 0xb1, 0x7f, 0xf0, 0x9a, 0x07, 0x17, 0xbf, 0x22, 0xef, 0xd6, 0x2e, - 0x93, 0xac, 0x54, 0xa6, 0x17, 0x85, 0x3a, 0x28, 0x64, 0x02, 0x18, 0xe2, - 0x5d, 0xff, 0xff, 0x9b, 0xb0, 0xe7, 0x9e, 0xeb, 0x77, 0x2f, 0x7f, 0x06, - 0x2f, 0x71, 0x62, 0xff, 0xf3, 0x45, 0x3d, 0x13, 0x1b, 0x83, 0x68, 0x2c, - 0x5e, 0xdb, 0x02, 0x58, 0xbe, 0x70, 0x44, 0x25, 0x8a, 0x82, 0x3f, 0xc6, - 0xe3, 0xa4, 0xb2, 0x1f, 0xbd, 0xb3, 0xe9, 0x62, 0xff, 0x82, 0xd6, 0x4f, - 0x50, 0x73, 0xac, 0x5f, 0xf7, 0x1f, 0xaf, 0x45, 0x09, 0xe9, 0x62, 0xfd, - 0xcf, 0x73, 0x3c, 0xb1, 0x52, 0x8a, 0x1e, 0x1d, 0x88, 0xf6, 0xfd, 0xdf, - 0xbc, 0x4e, 0x12, 0xc5, 0xfc, 0x53, 0x10, 0x98, 0x35, 0x8a, 0x11, 0xef, - 0x06, 0x5f, 0x76, 0x7d, 0x62, 0xff, 0xfd, 0xe2, 0x60, 0x73, 0xf3, 0x07, - 0x2c, 0x3c, 0xac, 0x5e, 0x08, 0x20, 0x92, 0x2f, 0x83, 0xd4, 0xc1, 0x22, - 0x30, 0xd0, 0xdf, 0xde, 0x7f, 0x73, 0xef, 0xc4, 0x55, 0xc7, 0x3a, 0x54, - 0xaa, 0xb5, 0x34, 0xf1, 0xe1, 0x7e, 0xd0, 0x8d, 0xf1, 0x18, 0xa1, 0x85, - 0x77, 0xba, 0x58, 0xbf, 0xcf, 0xad, 0x84, 0x0c, 0x25, 0x8b, 0xdf, 0x93, - 0xac, 0x51, 0xcf, 0xab, 0xbf, 0x19, 0x0c, 0xd2, 0xfb, 0xae, 0x4f, 0x4b, - 0x17, 0x67, 0x16, 0x2f, 0x40, 0xa4, 0xc3, 0x78, 0xc4, 0xb7, 0x44, 0xeb, - 0x17, 0xff, 0xf4, 0x24, 0xb3, 0xdf, 0x7c, 0xf4, 0x9d, 0xf5, 0x05, 0x8a, - 0xe9, 0x14, 0x5a, 0x31, 0xf0, 0xc5, 0xfc, 0x70, 0xcb, 0x3b, 0x62, 0xc5, - 0xfb, 0x38, 0x22, 0xf2, 0xc5, 0x3a, 0x22, 0x58, 0xc4, 0x8c, 0x2f, 0xff, - 0xb5, 0xb4, 0xfd, 0x9f, 0x5a, 0x73, 0xc6, 0xfd, 0xf6, 0xb1, 0x7e, 0xea, - 0x49, 0xce, 0xb1, 0x52, 0x88, 0x5c, 0x5d, 0xa9, 0x74, 0x75, 0x10, 0x9c, - 0x03, 0x1c, 0x63, 0xd9, 0x0b, 0x83, 0x63, 0x1d, 0xde, 0x3d, 0xee, 0xa1, - 0x8a, 0xee, 0x71, 0x43, 0xab, 0x53, 0x96, 0x07, 0x94, 0x43, 0xf9, 0x51, - 0xc0, 0x84, 0xa1, 0x4e, 0xf6, 0x72, 0x38, 0xcf, 0x4e, 0x04, 0x0a, 0x1a, - 0x1d, 0xa3, 0x9c, 0xee, 0x85, 0x95, 0xff, 0x75, 0x0e, 0x73, 0x06, 0xde, - 0x58, 0xb8, 0x99, 0x62, 0xf0, 0x1f, 0x75, 0x8b, 0xc5, 0x30, 0x58, 0x30, - 0xbe, 0xb8, 0xc3, 0x70, 0xf8, 0x1c, 0xd2, 0xfd, 0xe9, 0x17, 0x7f, 0xc5, - 0x8a, 0x73, 0xdc, 0xd1, 0x75, 0xcf, 0x1c, 0xb1, 0x74, 0x47, 0x58, 0xbf, - 0x66, 0xbc, 0x2f, 0xac, 0x56, 0x8f, 0x70, 0x03, 0x41, 0x8c, 0xdb, 0x16, - 0x2d, 0x8b, 0x11, 0xe5, 0x8d, 0xf6, 0x89, 0xbb, 0x2c, 0x5e, 0xc6, 0x25, - 0x8b, 0x04, 0xb1, 0x71, 0x98, 0xb1, 0x4c, 0x6a, 0xfc, 0x27, 0x52, 0xa9, - 0x88, 0x70, 0xf7, 0xc7, 0xd3, 0x50, 0x5c, 0x8f, 0x44, 0x87, 0x46, 0xbf, - 0x7d, 0xe4, 0xb6, 0x58, 0xba, 0x34, 0x09, 0x62, 0xfb, 0xcd, 0xd0, 0x16, - 0x2f, 0xfe, 0xf0, 0xba, 0x87, 0x3f, 0x9e, 0x91, 0xac, 0x54, 0x11, 0x12, - 0xc3, 0xdd, 0xc4, 0x95, 0xa4, 0x71, 0xfa, 0x16, 0x37, 0xa7, 0x90, 0x58, - 0xbf, 0x8a, 0x23, 0x40, 0xd1, 0x2c, 0x5f, 0xff, 0xb3, 0xdf, 0xc8, 0x6a, - 0x7e, 0xcf, 0xe9, 0xfa, 0xc5, 0x3a, 0x21, 0x48, 0xc6, 0xf0, 0x39, 0x8b, - 0x17, 0xdd, 0xcd, 0x3d, 0x2c, 0x5f, 0xed, 0x3f, 0x7f, 0xbf, 0xe4, 0x25, - 0x8b, 0xc2, 0x2d, 0xd6, 0x2f, 0xda, 0xdb, 0x66, 0x09, 0x62, 0xb0, 0xf2, - 0x83, 0x1e, 0xae, 0x91, 0x9a, 0xe4, 0xda, 0x84, 0x2d, 0xfe, 0x68, 0x45, - 0xf7, 0xeb, 0xcb, 0x17, 0xfd, 0xbb, 0x6b, 0x69, 0xdf, 0x0e, 0xb1, 0x60, - 0x96, 0x2f, 0x49, 0x41, 0x62, 0xff, 0xf3, 0x05, 0xec, 0xf9, 0x85, 0x86, - 0xcf, 0x16, 0x2a, 0x07, 0xd0, 0x43, 0x96, 0x65, 0x8b, 0xd3, 0xfe, 0x2c, - 0x57, 0x46, 0xb9, 0xc4, 0x6f, 0xfd, 0x3b, 0x99, 0x85, 0x22, 0xef, 0xf8, - 0xb1, 0x7f, 0x72, 0x73, 0x58, 0x4b, 0x17, 0xcd, 0x09, 0xd9, 0x62, 0xff, - 0x37, 0x9f, 0xec, 0x73, 0x30, 0xf3, 0xfe, 0x59, 0x7f, 0xee, 0x61, 0x0c, - 0xcc, 0x1b, 0xf6, 0x58, 0xbf, 0xfb, 0x8d, 0xd7, 0x39, 0x84, 0x08, 0xec, - 0x58, 0xbf, 0xf7, 0x26, 0x3b, 0x3d, 0x08, 0x67, 0x16, 0x2f, 0xff, 0xc3, - 0xcf, 0x71, 0xf9, 0xc9, 0xf0, 0x9b, 0x69, 0x58, 0xb3, 0xee, 0x89, 0x8d, - 0x21, 0x50, 0xd5, 0xc2, 0x6e, 0x6d, 0xd1, 0xe4, 0x4f, 0x7a, 0x4f, 0x39, - 0x09, 0x42, 0x53, 0x89, 0x3e, 0x41, 0xed, 0x0e, 0x0b, 0xdf, 0xc2, 0x58, - 0xbe, 0xdf, 0xf8, 0x35, 0x8a, 0xd1, 0xe0, 0x06, 0x39, 0x7f, 0xfe, 0x2c, - 0x7e, 0x3e, 0xa4, 0x5e, 0x8a, 0x70, 0x6b, 0x15, 0x2b, 0xa1, 0x6f, 0x2e, - 0xe5, 0xa1, 0xb6, 0x22, 0x3b, 0xf0, 0x70, 0x70, 0x71, 0x62, 0xf6, 0x4c, - 0xac, 0x5f, 0x14, 0x1c, 0xeb, 0x17, 0xe0, 0xf8, 0x16, 0x7d, 0x62, 0xb6, - 0x3e, 0x86, 0x1b, 0xe1, 0x15, 0xfc, 0x0e, 0xef, 0x3e, 0xb6, 0x58, 0xa1, - 0xa3, 0xd3, 0x50, 0x92, 0x22, 0xfb, 0xf8, 0x8c, 0x0f, 0x93, 0x8b, 0x17, - 0xf7, 0xfc, 0x6b, 0xf5, 0xc5, 0x8b, 0xe9, 0xf3, 0x7d, 0x62, 0xee, 0x6c, - 0xb1, 0x79, 0x8e, 0xeb, 0x15, 0xb1, 0xeb, 0x8c, 0x8b, 0x43, 0x37, 0xde, - 0x9e, 0x82, 0x58, 0xa9, 0x64, 0xae, 0xec, 0x51, 0x90, 0xa2, 0xdc, 0x87, - 0xf3, 0xbe, 0xad, 0x19, 0xe8, 0x0d, 0x08, 0xbc, 0x50, 0x88, 0x08, 0xc2, - 0xfc, 0xfc, 0xe6, 0x47, 0xac, 0x5f, 0xf8, 0x73, 0x27, 0xce, 0x09, 0xba, - 0x58, 0xbf, 0xfe, 0x10, 0x7e, 0x29, 0x03, 0x78, 0x01, 0x94, 0x16, 0x2a, - 0x08, 0xbc, 0x72, 0xbf, 0x1f, 0xdf, 0xb6, 0x30, 0x1d, 0x01, 0x62, 0xfd, - 0xef, 0x61, 0x1d, 0x62, 0xff, 0xe6, 0x04, 0xff, 0x07, 0x3c, 0x90, 0x2c, - 0x5f, 0xff, 0xd9, 0xcc, 0x2d, 0x4c, 0x1c, 0xf9, 0xd4, 0x22, 0x12, 0xc5, - 0xff, 0xdd, 0x43, 0xdf, 0x63, 0xe6, 0xf3, 0xc5, 0x8a, 0x94, 0x51, 0x89, - 0x72, 0xff, 0x48, 0x5d, 0x79, 0xe4, 0xd5, 0x8a, 0x94, 0xe4, 0xdc, 0xb5, - 0x8a, 0x0a, 0x1c, 0xde, 0x22, 0xbf, 0xf8, 0x5b, 0x7d, 0xc7, 0x91, 0xbc, - 0x6f, 0xdf, 0x3b, 0xd5, 0x8b, 0x7d, 0x62, 0x88, 0xfb, 0x82, 0x5c, 0xbf, - 0xfd, 0x25, 0xb8, 0x7a, 0x60, 0x3f, 0xbf, 0x2b, 0x17, 0xcd, 0xb3, 0x12, - 0xc5, 0xfb, 0xdf, 0xc0, 0x32, 0xc5, 0x74, 0x79, 0x44, 0x45, 0x7f, 0x1c, - 0xcf, 0xe0, 0x19, 0x62, 0xfe, 0x0b, 0x99, 0x85, 0xb2, 0xc5, 0xf0, 0x7f, - 0x7f, 0x2c, 0x54, 0xa2, 0x93, 0x08, 0x9c, 0xbf, 0x85, 0xf7, 0xf6, 0xb0, - 0x85, 0x3a, 0x58, 0xbc, 0x03, 0x20, 0xb1, 0x7f, 0xcd, 0xcc, 0x72, 0x6f, - 0x71, 0x62, 0xff, 0x09, 0x83, 0xe0, 0x4d, 0xd2, 0xc5, 0xe9, 0xce, 0x8d, - 0x3e, 0xe2, 0x37, 0xbe, 0x9e, 0x4f, 0x65, 0x8b, 0xff, 0xa4, 0x9b, 0xd0, - 0x93, 0x58, 0x2f, 0x2c, 0x54, 0x6c, 0x9a, 0xb4, 0x96, 0xea, 0x11, 0xbf, - 0x33, 0x11, 0x25, 0xe3, 0x1b, 0x75, 0x8a, 0x95, 0xdd, 0xa8, 0x47, 0x85, - 0xbc, 0x2e, 0x80, 0x45, 0xc8, 0xce, 0x7d, 0x1c, 0x87, 0x72, 0xa5, 0xf8, - 0x33, 0x9d, 0xe3, 0xd6, 0x2f, 0xd8, 0x5e, 0x73, 0xac, 0x54, 0x0f, 0x50, - 0xe5, 0xb6, 0xe2, 0xc5, 0xcd, 0xc5, 0x8a, 0xc3, 0x52, 0xc2, 0x57, 0xb9, - 0x30, 0x58, 0xbe, 0x9d, 0x4e, 0xeb, 0x15, 0x87, 0x80, 0x43, 0xb7, 0xbe, - 0xe1, 0xac, 0x58, 0x35, 0x8a, 0x58, 0xa1, 0x17, 0xe1, 0x89, 0xd6, 0x8f, - 0x78, 0x23, 0xdb, 0xdf, 0x10, 0xd6, 0x2f, 0xe8, 0x73, 0xcf, 0x3d, 0x2c, - 0x5f, 0x1c, 0x39, 0x25, 0x8b, 0xe7, 0x1e, 0x1d, 0x62, 0xf9, 0x98, 0x80, - 0xb1, 0x77, 0xbc, 0xb1, 0x60, 0xa4, 0xf6, 0xcd, 0x22, 0x11, 0x0d, 0x2c, - 0x5c, 0x23, 0xac, 0x5f, 0xe0, 0x9a, 0x2c, 0x84, 0xc7, 0xac, 0x5f, 0xbb, - 0x85, 0x13, 0xc4, 0xb1, 0x4e, 0x8c, 0x08, 0x8d, 0xbe, 0x19, 0xc1, 0x81, - 0x1c, 0x5f, 0xfb, 0x07, 0xa9, 0xf3, 0xee, 0xe3, 0x58, 0xbf, 0xe7, 0x3f, - 0xfa, 0x68, 0xff, 0x71, 0x62, 0xfe, 0xdd, 0xbf, 0xfc, 0x1a, 0xc5, 0x49, - 0xf6, 0x88, 0xfa, 0xf0, 0x82, 0xf2, 0xc5, 0xe0, 0x98, 0x25, 0x8b, 0x01, - 0x62, 0xa4, 0xd8, 0x86, 0x3f, 0x7d, 0xee, 0x08, 0x6b, 0x17, 0xe7, 0xea, - 0x1e, 0xdd, 0x62, 0xff, 0x4b, 0x6b, 0xe1, 0x30, 0xd2, 0x2e, 0x08, 0x24, - 0x8a, 0x19, 0xe7, 0x04, 0x69, 0x73, 0xc7, 0xa4, 0x46, 0x1a, 0x3a, 0x02, - 0x32, 0x7d, 0x09, 0xcb, 0xf6, 0xef, 0xcf, 0xba, 0xc5, 0xff, 0x48, 0x3f, - 0x3c, 0x26, 0x89, 0x62, 0xfe, 0x99, 0x29, 0x04, 0xac, 0x57, 0x48, 0x8d, - 0x22, 0x9f, 0x1c, 0xde, 0x3c, 0x9d, 0x62, 0xf4, 0x05, 0xe5, 0x8a, 0x93, - 0x76, 0x21, 0xda, 0x95, 0xe8, 0xbd, 0x92, 0xc6, 0xbf, 0x8f, 0xdb, 0x91, - 0xf4, 0x3c, 0xe5, 0xf1, 0x46, 0x7d, 0xa4, 0xa3, 0xc2, 0xb3, 0xe4, 0x20, - 0x50, 0x22, 0x1e, 0x43, 0xb7, 0xd0, 0xb5, 0x8e, 0x6b, 0xbf, 0xff, 0xfb, - 0xbe, 0xfb, 0x6d, 0xc8, 0xd7, 0xb4, 0x69, 0xde, 0x6a, 0x22, 0xf6, 0x0c, - 0xc3, 0x3f, 0x1c, 0xb1, 0x7c, 0x43, 0xfb, 0x2c, 0x5d, 0x07, 0x58, 0xbd, - 0x8d, 0x1e, 0xb1, 0x7b, 0x58, 0x35, 0x8a, 0x8d, 0x13, 0x0c, 0xc8, 0x4b, - 0xb9, 0x16, 0x85, 0xfb, 0x0f, 0xde, 0xfc, 0xe9, 0x62, 0xef, 0x71, 0x62, - 0xfc, 0x7d, 0x6a, 0x76, 0x58, 0xb8, 0x05, 0x27, 0x85, 0x83, 0x17, 0xf8, - 0xb3, 0xc5, 0x3d, 0x41, 0x62, 0xfa, 0x48, 0x5c, 0x58, 0xac, 0x44, 0x03, - 0x15, 0xf0, 0xce, 0xfd, 0xd7, 0x27, 0x46, 0xac, 0x5c, 0x17, 0x17, 0x58, - 0x81, 0x6c, 0x58, 0xbe, 0x8b, 0x33, 0x75, 0x8a, 0xc3, 0xdb, 0xf1, 0x30, - 0x42, 0x35, 0xb2, 0x2d, 0x7a, 0x84, 0x35, 0xf7, 0x50, 0xef, 0x7a, 0x58, - 0xbd, 0xc3, 0x20, 0xb1, 0x7f, 0xfe, 0x18, 0x9b, 0x7f, 0xb7, 0x26, 0x3f, - 0x30, 0x8d, 0x58, 0xae, 0x8f, 0xe3, 0x43, 0xf6, 0xfa, 0xc5, 0xff, 0xb8, - 0x32, 0x91, 0xfe, 0x7d, 0xc5, 0x8a, 0x93, 0xd1, 0xe0, 0x95, 0x4a, 0x6c, - 0x58, 0x54, 0xd0, 0xa3, 0x13, 0xa5, 0xef, 0xf7, 0x0d, 0x62, 0xff, 0xff, - 0xb0, 0x2c, 0x87, 0xf1, 0xe1, 0xce, 0xb8, 0xfe, 0x72, 0xd9, 0x62, 0xef, - 0xc4, 0xb1, 0x7f, 0xbe, 0xed, 0x0f, 0x3e, 0xcb, 0x17, 0xce, 0x5e, 0x95, - 0x8b, 0xfe, 0x7d, 0x30, 0x3b, 0xbd, 0x9f, 0x58, 0xaf, 0x9e, 0xef, 0x88, - 0x6f, 0xf9, 0xc2, 0x2c, 0xf3, 0x88, 0x0b, 0x17, 0xce, 0x41, 0xf1, 0x62, - 0xf8, 0xa0, 0xe7, 0x58, 0xb7, 0xa4, 0xf1, 0x58, 0x8e, 0xfc, 0x77, 0x89, - 0xc2, 0x58, 0xa9, 0x3d, 0x07, 0x26, 0xbe, 0xd0, 0xe7, 0x65, 0x8b, 0x8f, - 0x1c, 0xb1, 0x4e, 0x6f, 0xd8, 0x92, 0xfe, 0x2c, 0xf7, 0x24, 0x0b, 0x17, - 0xef, 0xb1, 0xdf, 0x8b, 0x17, 0xef, 0x70, 0x9c, 0xd5, 0x8a, 0x81, 0xe8, - 0xe8, 0xa2, 0xbe, 0x8a, 0x06, 0x7e, 0xb9, 0xc2, 0x58, 0xb8, 0x3d, 0x96, - 0x2f, 0x75, 0xcc, 0x23, 0x65, 0xe1, 0x8b, 0xf0, 0x5a, 0xd3, 0x04, 0xb1, - 0x74, 0x9d, 0x62, 0xff, 0xff, 0xf7, 0x03, 0xd4, 0xfe, 0x70, 0xee, 0x50, - 0x97, 0xfb, 0xee, 0x4f, 0xd9, 0x62, 0xff, 0xff, 0x7f, 0x0a, 0x41, 0xc1, - 0x36, 0x6f, 0x24, 0x26, 0x82, 0xc5, 0x3a, 0x35, 0xfc, 0xf1, 0x7c, 0x17, - 0xb3, 0xe3, 0x4c, 0x43, 0x90, 0xee, 0xa9, 0x4e, 0xbb, 0x0c, 0x9a, 0x33, - 0xbb, 0xf1, 0xb9, 0xac, 0xf2, 0xc5, 0xfe, 0x6f, 0x16, 0x6c, 0x1c, 0x16, - 0x2f, 0xfe, 0xc3, 0x70, 0x5a, 0x61, 0xcf, 0xe5, 0x62, 0x9d, 0x14, 0x44, - 0x53, 0xc3, 0x5b, 0x81, 0xc5, 0x8b, 0xff, 0x13, 0x05, 0xbf, 0xdf, 0xb3, - 0xe9, 0x62, 0xf0, 0xff, 0x2b, 0x14, 0x33, 0xdf, 0x0d, 0x0a, 0xbb, 0xd6, - 0x52, 0x2c, 0xc3, 0x7e, 0x12, 0x91, 0x46, 0x81, 0x84, 0x3b, 0xb4, 0x74, - 0x32, 0xf0, 0x91, 0x8f, 0x22, 0xd4, 0x33, 0xbe, 0xbe, 0xd0, 0xbf, 0x29, - 0x40, 0x5c, 0x86, 0xb7, 0x8b, 0x84, 0xef, 0x7a, 0x26, 0xd2, 0xc5, 0xff, - 0x7b, 0xf8, 0x01, 0x4f, 0x41, 0xac, 0x5f, 0xff, 0xf9, 0x9f, 0xd3, 0xf2, - 0xcf, 0x7d, 0xc3, 0x84, 0xf6, 0x72, 0x02, 0xc5, 0xfb, 0x7c, 0x3c, 0xf1, - 0x62, 0xf0, 0x88, 0x6b, 0x17, 0xff, 0x63, 0xec, 0x79, 0x67, 0x83, 0x71, - 0x62, 0xff, 0x30, 0x03, 0x8e, 0x62, 0x02, 0xc5, 0x7c, 0xfe, 0x89, 0x0e, - 0xfe, 0x7f, 0x70, 0x78, 0x4b, 0x17, 0xa7, 0xa8, 0x2c, 0x5f, 0xcf, 0xee, - 0x61, 0xb1, 0x40, 0xf2, 0xf4, 0x5b, 0x7f, 0xfb, 0x3f, 0x85, 0xee, 0x67, - 0x62, 0x9e, 0x96, 0x2a, 0x55, 0x41, 0xf4, 0x3d, 0xf3, 0xc6, 0x6c, 0x01, - 0x4f, 0xa1, 0x2f, 0xd9, 0xb0, 0x24, 0x6b, 0x9f, 0xa5, 0x8b, 0xd2, 0x5e, - 0x58, 0xb9, 0xf4, 0xb1, 0x5b, 0x1b, 0x3c, 0x1c, 0xbf, 0x7f, 0xac, 0x14, - 0x4b, 0x17, 0xfa, 0x0e, 0x7f, 0xf4, 0xd1, 0xeb, 0x17, 0xf4, 0x8e, 0x3b, - 0x35, 0x2b, 0x17, 0xf1, 0x60, 0xff, 0x3d, 0x96, 0x2b, 0xe7, 0xbf, 0xdc, - 0x61, 0x7c, 0xda, 0x98, 0x2c, 0x5f, 0x75, 0x82, 0x89, 0x62, 0xff, 0xc2, - 0x9d, 0x1a, 0xc1, 0xf9, 0xe0, 0xb1, 0x7f, 0xcd, 0xd1, 0x9d, 0x73, 0x08, - 0xd5, 0x8a, 0xd9, 0x3c, 0xd1, 0x90, 0xf4, 0x56, 0xf0, 0x97, 0x39, 0x2f, - 0xc8, 0x88, 0x97, 0xc8, 0x37, 0xdf, 0x8f, 0x73, 0xac, 0x5e, 0x29, 0x02, - 0xc5, 0x18, 0x78, 0x5c, 0x26, 0xbf, 0xbc, 0xc7, 0x3c, 0x9d, 0x62, 0xc7, - 0xc3, 0xd1, 0xe8, 0x8e, 0xff, 0x75, 0xfc, 0x8b, 0xef, 0xa5, 0x8b, 0xff, - 0xf8, 0x9b, 0xcc, 0x78, 0x3f, 0xb3, 0xaf, 0x7c, 0x3e, 0x2c, 0x54, 0xa2, - 0xef, 0x0a, 0x18, 0xda, 0xfc, 0xc5, 0x9d, 0x4a, 0xc5, 0xfe, 0xfc, 0x9f, - 0x7f, 0xbc, 0x4b, 0x16, 0x98, 0xd8, 0xf7, 0x7a, 0x27, 0xbe, 0x6e, 0x74, - 0xcb, 0x17, 0xfd, 0x0e, 0x7d, 0xb7, 0x92, 0x1a, 0xc5, 0xbc, 0xb1, 0x78, - 0x1e, 0xfa, 0xc5, 0xf8, 0xcf, 0x1a, 0xfc, 0x58, 0xa8, 0x22, 0xe3, 0xa2, - 0x36, 0x3a, 0x00, 0x97, 0x87, 0xaf, 0xff, 0xfd, 0xac, 0x1f, 0x1a, 0x3d, - 0xfa, 0xfb, 0x3c, 0x24, 0x7f, 0x11, 0xab, 0x16, 0x02, 0xc5, 0x32, 0x33, - 0x78, 0x94, 0x1b, 0x8d, 0xc0, 0x65, 0x8b, 0xed, 0xf1, 0x8e, 0xb1, 0x52, - 0x6e, 0x9c, 0x5e, 0xfd, 0xcf, 0xe0, 0x19, 0x62, 0xa5, 0x7d, 0x12, 0x0f, - 0x59, 0x28, 0x61, 0xe3, 0xc5, 0xd4, 0x22, 0x9a, 0x3b, 0x22, 0x6a, 0xe0, - 0xfd, 0xee, 0x3e, 0xeb, 0x17, 0xd9, 0x22, 0xef, 0xd6, 0x2f, 0x68, 0xf1, - 0xcb, 0x17, 0xe1, 0xf3, 0x8e, 0x75, 0x8a, 0xd8, 0xf2, 0x88, 0x86, 0xfd, - 0xbb, 0x6d, 0x81, 0x2c, 0x5f, 0xa7, 0x43, 0xc2, 0x58, 0xa1, 0xa3, 0x97, - 0x1c, 0x48, 0x8b, 0xc5, 0x77, 0xe9, 0x8e, 0x7f, 0x89, 0x62, 0xec, 0xdd, - 0x62, 0xe1, 0xee, 0xb1, 0x7c, 0x45, 0x86, 0xac, 0x56, 0x1b, 0xb1, 0x0c, - 0xd8, 0x0b, 0x17, 0xb4, 0xff, 0x58, 0xa8, 0x22, 0x8b, 0x75, 0x37, 0x20, - 0x21, 0x2b, 0xef, 0xe0, 0x19, 0x62, 0xfb, 0xbb, 0xce, 0x6a, 0xc5, 0xd2, - 0x1a, 0xc5, 0x44, 0x7c, 0x3c, 0x22, 0x8e, 0x27, 0xbf, 0xfa, 0x41, 0x3f, - 0x39, 0x31, 0xbf, 0x75, 0x8b, 0x46, 0xcb, 0x17, 0xfe, 0xcd, 0x67, 0x83, - 0xcf, 0xb0, 0x16, 0x2f, 0xff, 0xb0, 0x8d, 0xcd, 0x6d, 0x21, 0x67, 0xf0, - 0x96, 0x2f, 0xd2, 0x41, 0x37, 0x4b, 0x15, 0x87, 0xf3, 0xf5, 0x0b, 0xff, - 0x14, 0x53, 0x85, 0xb6, 0x75, 0xe5, 0x8b, 0xf7, 0xb8, 0x7d, 0x4a, 0xc5, - 0x41, 0x34, 0x21, 0xc2, 0xe1, 0x88, 0x49, 0x02, 0xff, 0x6b, 0xcd, 0xa6, - 0x8e, 0x95, 0x8b, 0xcc, 0x40, 0x58, 0xa3, 0x4f, 0x4b, 0x73, 0x6b, 0xf7, - 0xb9, 0xe7, 0xd9, 0x62, 0xa4, 0xf3, 0x98, 0x92, 0xff, 0xbf, 0x3b, 0xc8, - 0x18, 0x80, 0xb1, 0x7f, 0xf4, 0xb9, 0x4f, 0x9f, 0x4f, 0xe1, 0x2c, 0x5f, - 0xc0, 0x33, 0x38, 0xc4, 0xb1, 0x7f, 0xf0, 0xa4, 0x98, 0xd8, 0x8a, 0x41, - 0xc5, 0x8a, 0x1a, 0x3b, 0xbe, 0x72, 0x48, 0x5e, 0x2e, 0xbf, 0x77, 0xa3, - 0x72, 0xdd, 0x62, 0x9c, 0xfa, 0x98, 0xf2, 0xf8, 0x26, 0x93, 0xac, 0x5f, - 0xdc, 0x11, 0xe7, 0x06, 0xb1, 0x7e, 0x6e, 0x6c, 0xfa, 0x58, 0xbe, 0xd3, - 0x8b, 0x65, 0xc9, 0xea, 0x5e, 0xdc, 0x5b, 0x2e, 0x4f, 0x52, 0xff, 0xd8, - 0xfd, 0xb0, 0xb0, 0x6d, 0x05, 0xc9, 0xea, 0x5f, 0x98, 0xba, 0x84, 0x60, - 0xd1, 0x53, 0xc3, 0x10, 0x8b, 0x6e, 0x6e, 0xe5, 0x8a, 0x1a, 0x67, 0xa7, - 0x86, 0x91, 0x28, 0xde, 0x73, 0xca, 0xc5, 0xfe, 0xda, 0x33, 0x9a, 0x79, - 0xf2, 0xc5, 0xdc, 0x75, 0x8b, 0xcc, 0xc4, 0xb1, 0x79, 0xfe, 0x25, 0x8b, - 0x1b, 0xc3, 0xcf, 0xf0, 0xbc, 0x70, 0xdd, 0xe2, 0x16, 0xcb, 0x14, 0xc7, - 0xaf, 0xe3, 0x9a, 0xc5, 0x57, 0x6f, 0x1b, 0x5e, 0x8d, 0x58, 0x70, 0xa1, - 0xbd, 0x51, 0xa3, 0x28, 0x8a, 0x63, 0x03, 0x19, 0xde, 0x43, 0x35, 0xe1, - 0x3b, 0xa3, 0x33, 0xa2, 0x34, 0x6b, 0x25, 0x0e, 0x1e, 0x46, 0xf1, 0xe2, - 0x01, 0x4a, 0xde, 0xb0, 0x4b, 0x17, 0xee, 0x7f, 0x42, 0xec, 0xb1, 0x7f, - 0xf1, 0x7d, 0xb8, 0x58, 0x69, 0xb9, 0x1e, 0xb1, 0x7f, 0x31, 0xff, 0x38, - 0x35, 0x8a, 0xc3, 0xf5, 0x24, 0x8b, 0xbb, 0xc8, 0xd1, 0x62, 0xfd, 0x38, - 0x5e, 0xe2, 0xc5, 0xe7, 0x9d, 0x2c, 0x5b, 0xcb, 0x15, 0x1b, 0x1f, 0xb9, - 0xc8, 0xbe, 0x4f, 0xe1, 0xcb, 0xff, 0xb4, 0xe7, 0x98, 0xf2, 0xc3, 0xf5, - 0x2b, 0x15, 0x04, 0x44, 0x44, 0x83, 0x7c, 0xd0, 0x98, 0xf5, 0x8b, 0xc4, - 0xc3, 0x58, 0xbd, 0xcd, 0x99, 0x62, 0x9c, 0xdd, 0x06, 0x39, 0x7f, 0xbc, - 0xfa, 0x9d, 0xf3, 0xb2, 0xc5, 0xc7, 0x75, 0x8b, 0xfa, 0x46, 0xfd, 0xa4, - 0x6b, 0x17, 0xef, 0x49, 0x4c, 0x4b, 0x15, 0x28, 0xa4, 0xd8, 0xd8, 0x62, - 0xec, 0x5f, 0x7e, 0xc3, 0xe9, 0xba, 0x58, 0xad, 0x93, 0x89, 0x1a, 0xf9, - 0x43, 0x17, 0x87, 0x97, 0xe8, 0x67, 0x69, 0x82, 0xc5, 0xf6, 0xba, 0x90, - 0x96, 0x2f, 0x66, 0xa5, 0x62, 0xfe, 0xd0, 0xf0, 0xd0, 0xce, 0xb1, 0x73, - 0x47, 0xac, 0x5e, 0xed, 0x83, 0x58, 0xbf, 0x9e, 0x7d, 0x03, 0x46, 0xb1, - 0x78, 0x9f, 0x65, 0x8a, 0x82, 0xe6, 0x8e, 0xf0, 0xa1, 0xea, 0x31, 0xf7, - 0x8e, 0xb7, 0x48, 0x67, 0x2a, 0xf9, 0x2b, 0x0e, 0x11, 0x88, 0x86, 0x82, - 0x1f, 0xee, 0x2f, 0xb0, 0x4b, 0x17, 0xf9, 0xc2, 0x97, 0x1e, 0x1d, 0x62, - 0xcf, 0x87, 0x8d, 0x10, 0x9d, 0xf7, 0xdf, 0xa8, 0x2c, 0x5e, 0x26, 0x82, - 0xc5, 0xa1, 0x27, 0x81, 0x84, 0x97, 0xfe, 0x29, 0xdf, 0xf3, 0xdb, 0x41, - 0xf1, 0x62, 0xf3, 0x6b, 0x65, 0x8a, 0x58, 0xb1, 0x6e, 0x6a, 0xa2, 0x1e, - 0xbf, 0xd0, 0xe7, 0x50, 0xc1, 0x1a, 0xb1, 0x7d, 0x16, 0xa7, 0x65, 0x8b, - 0x7d, 0x61, 0x8d, 0x2d, 0xfc, 0xfd, 0x73, 0xf9, 0xba, 0xc5, 0xf7, 0xf1, - 0xe2, 0x58, 0xbd, 0x92, 0x35, 0x8b, 0xfa, 0x7b, 0x67, 0xff, 0x2b, 0x17, - 0xec, 0xf7, 0x32, 0x25, 0x8f, 0x9a, 0xfb, 0xff, 0xff, 0xec, 0xeb, 0x8f, - 0x81, 0x19, 0x9d, 0x43, 0x8f, 0xee, 0x3f, 0x43, 0x18, 0xb6, 0x58, 0xbf, - 0xf4, 0xee, 0x59, 0x17, 0xc5, 0xa8, 0x96, 0x2f, 0xff, 0xcf, 0xae, 0x78, - 0xd9, 0xea, 0x1c, 0xea, 0x12, 0x6a, 0xc5, 0x2c, 0x53, 0xa6, 0x5a, 0x50, - 0x84, 0xe2, 0x17, 0x72, 0xdd, 0xfe, 0x92, 0x37, 0xbb, 0xd9, 0xf5, 0x8b, - 0xff, 0x67, 0x46, 0xb7, 0x30, 0x9c, 0xd5, 0x8b, 0xff, 0xe2, 0x19, 0x81, - 0xf9, 0xf8, 0xce, 0x42, 0x82, 0xc5, 0x4a, 0x24, 0x5d, 0x02, 0xf9, 0xb6, - 0xfb, 0xac, 0x50, 0xd7, 0x19, 0xb1, 0xb7, 0xa2, 0x87, 0x5c, 0x88, 0x87, - 0x46, 0x07, 0x23, 0x24, 0xbf, 0x46, 0xcc, 0x24, 0x4e, 0xd0, 0xc8, 0x8e, - 0x21, 0xbc, 0x2d, 0x41, 0x62, 0xff, 0xc7, 0x61, 0xea, 0x7d, 0xfc, 0x1a, - 0xc5, 0xfc, 0xde, 0x00, 0x65, 0x05, 0x8b, 0xf3, 0x78, 0x38, 0xe6, 0x58, - 0xbf, 0x6d, 0xbf, 0xe7, 0x4b, 0x17, 0xf9, 0x98, 0x20, 0x37, 0xb8, 0xb1, - 0x70, 0x7c, 0x58, 0xa1, 0x9e, 0x6f, 0xcd, 0x2f, 0x85, 0x14, 0xf4, 0xb1, - 0x7b, 0x1e, 0x25, 0x8b, 0xff, 0x0e, 0x7c, 0xd0, 0xce, 0xcc, 0x35, 0x8b, - 0x9f, 0x4b, 0x17, 0x3e, 0xcb, 0x1b, 0x16, 0xf7, 0xe9, 0x22, 0x11, 0xd6, - 0x2d, 0x0f, 0x1e, 0x78, 0x65, 0x14, 0x62, 0xa6, 0x39, 0x1e, 0xd8, 0xfe, - 0x05, 0xf8, 0x58, 0x6b, 0xc6, 0xe4, 0x51, 0x12, 0x9c, 0x75, 0xa1, 0x4d, - 0x77, 0x31, 0x62, 0xff, 0xb3, 0x5b, 0x3f, 0x3f, 0x9c, 0x58, 0xbf, 0x3c, - 0x60, 0x41, 0x04, 0x91, 0x7f, 0xe3, 0x5b, 0xa3, 0x3e, 0xc7, 0x7e, 0x2c, - 0x5a, 0x60, 0x7e, 0x27, 0x2f, 0xbb, 0x3e, 0xb1, 0x76, 0x77, 0xeb, 0x17, - 0x60, 0xd6, 0x2f, 0xde, 0x00, 0x65, 0x05, 0x8a, 0x19, 0xee, 0x9a, 0x38, - 0xc2, 0xf7, 0xe6, 0xd6, 0xf3, 0xe5, 0x8b, 0x9f, 0x4b, 0x15, 0xf3, 0xc0, - 0x11, 0x4d, 0xb7, 0x58, 0xb9, 0x86, 0xb1, 0x7f, 0x69, 0xb9, 0xf6, 0x82, - 0xc5, 0xba, 0x58, 0xb9, 0xc2, 0x58, 0xb8, 0x30, 0x2c, 0x54, 0x46, 0xc4, - 0x03, 0x17, 0xa0, 0xc3, 0x58, 0xb8, 0x20, 0x96, 0x2a, 0x08, 0xe2, 0xc1, - 0x7d, 0xcb, 0x9d, 0x13, 0x84, 0x41, 0x0e, 0xdc, 0x18, 0x12, 0x23, 0x0f, - 0x5e, 0x99, 0x37, 0x9f, 0x46, 0x99, 0x7f, 0x0b, 0xa8, 0x79, 0xfa, 0x58, - 0xbf, 0xd8, 0x77, 0x1e, 0xc2, 0xe2, 0xc5, 0xff, 0xfc, 0x08, 0xec, 0xd4, - 0xf9, 0xf7, 0x71, 0xed, 0x25, 0x2b, 0x17, 0xb3, 0xaf, 0x2c, 0x5b, 0x08, - 0xff, 0x38, 0xbd, 0x5f, 0x46, 0xbf, 0x21, 0x63, 0x7f, 0xce, 0x3c, 0x3b, - 0xc4, 0xe1, 0x2c, 0x5f, 0xff, 0x4b, 0xf4, 0x0d, 0x60, 0xe7, 0x4f, 0xd0, - 0x16, 0x2f, 0x8d, 0xfb, 0x41, 0x62, 0xf4, 0x3f, 0x23, 0x3f, 0x57, 0x51, - 0xbf, 0xff, 0xdf, 0x67, 0xf4, 0xc0, 0x43, 0xc0, 0xf3, 0x5e, 0x17, 0xd6, - 0x2c, 0xcb, 0x15, 0x27, 0xe7, 0xc6, 0x2b, 0xff, 0xcc, 0x3c, 0xc2, 0x37, - 0x9c, 0xc2, 0x02, 0xc5, 0xf7, 0xc4, 0xc6, 0xca, 0x77, 0xd9, 0x0a, 0xfd, - 0x42, 0x94, 0xe4, 0x37, 0x8a, 0x7e, 0xb1, 0x7f, 0xff, 0x41, 0xb9, 0xc9, - 0xcd, 0x85, 0x01, 0xe8, 0x98, 0x25, 0x8b, 0xff, 0xf3, 0xc1, 0xfc, 0x52, - 0x01, 0x93, 0x72, 0x11, 0x2c, 0x5f, 0xf7, 0xb4, 0x28, 0x75, 0x0c, 0xf2, - 0xc5, 0xff, 0x67, 0x3e, 0xd0, 0x1e, 0xbb, 0xf5, 0x8a, 0x73, 0xfb, 0x23, - 0xca, 0x1a, 0x78, 0xe6, 0xaf, 0x38, 0xe0, 0x17, 0x7b, 0x43, 0x42, 0xfe, - 0xd3, 0x42, 0x74, 0x05, 0x8b, 0xff, 0xfd, 0xf6, 0x87, 0xe5, 0xb5, 0xce, - 0x67, 0xdf, 0x82, 0xd9, 0x62, 0xd9, 0xa4, 0x48, 0x7c, 0xba, 0xff, 0xfb, - 0x52, 0xd0, 0xd4, 0xfd, 0x9f, 0x7c, 0x25, 0x8a, 0x94, 0xd6, 0x21, 0x0e, - 0x27, 0x28, 0xaf, 0xaf, 0x20, 0xf2, 0x30, 0x8f, 0x4e, 0x82, 0xdf, 0xc7, - 0x68, 0x6d, 0x14, 0x72, 0xc5, 0xf1, 0xf7, 0x84, 0xac, 0x5e, 0x84, 0x7c, - 0x16, 0x2f, 0x7d, 0xf8, 0xb1, 0x78, 0x39, 0x25, 0x8a, 0x93, 0xdb, 0x81, - 0x0f, 0x87, 0x6f, 0xf6, 0x72, 0x2f, 0xb8, 0x5e, 0x58, 0xbf, 0x6d, 0x98, - 0x46, 0xac, 0x54, 0x9e, 0xfb, 0x1b, 0x5f, 0xce, 0x7d, 0xf0, 0xb7, 0x58, - 0xbe, 0x6d, 0xb9, 0xf5, 0x8a, 0xd1, 0xe9, 0xf0, 0xbe, 0x8c, 0x65, 0x7f, - 0x41, 0xd0, 0x6d, 0xfd, 0x47, 0x36, 0xf3, 0xcd, 0x47, 0x41, 0x63, 0x42, - 0x7f, 0xe4, 0x23, 0x7c, 0xe7, 0x6e, 0xf1, 0x62, 0xf3, 0x31, 0xd6, 0x2f, - 0x7d, 0xfc, 0xb1, 0x6e, 0xdd, 0xe9, 0xe8, 0x7c, 0x5c, 0x31, 0xcb, 0xfc, - 0xc7, 0x79, 0x3e, 0x12, 0xc5, 0xfd, 0xf9, 0xd7, 0xb3, 0x75, 0x8a, 0x19, - 0xf0, 0x78, 0xc6, 0xfd, 0x08, 0xe7, 0xf8, 0x96, 0x2b, 0x0f, 0x39, 0x88, - 0xac, 0xcb, 0x17, 0x4f, 0x16, 0x28, 0xd3, 0x50, 0xc2, 0x37, 0xd8, 0x42, - 0x89, 0x62, 0xf9, 0xfb, 0x48, 0xd6, 0x2f, 0xff, 0xdc, 0x6f, 0x70, 0xb3, - 0x93, 0xd0, 0x3d, 0x9c, 0x58, 0xae, 0x91, 0x3a, 0x72, 0x3f, 0x12, 0x5f, - 0xf6, 0xff, 0x76, 0xdf, 0x9e, 0x75, 0x8b, 0xdc, 0x0c, 0xeb, 0x16, 0x61, - 0x9e, 0xd7, 0x8e, 0xee, 0xd4, 0x4b, 0x16, 0x3a, 0xc5, 0xda, 0x95, 0x8a, - 0x93, 0xc2, 0x18, 0xce, 0x09, 0x54, 0x68, 0xdf, 0x38, 0xcc, 0xe7, 0x24, - 0x23, 0x02, 0x1b, 0x3e, 0x4e, 0x46, 0x3c, 0xb1, 0xad, 0x42, 0x50, 0xe2, - 0xff, 0x85, 0x5b, 0x52, 0xc9, 0x41, 0x0f, 0x12, 0x87, 0x5f, 0x92, 0x05, - 0x0b, 0xe0, 0xa1, 0x17, 0x1c, 0xd3, 0x7a, 0x3d, 0xa5, 0x62, 0xf9, 0xa1, - 0xa9, 0x58, 0xb3, 0x2c, 0x53, 0x9e, 0x91, 0x0f, 0xf0, 0x8a, 0xff, 0xff, - 0xff, 0xff, 0x47, 0x61, 0xda, 0x0f, 0xc0, 0x60, 0x3e, 0xcf, 0x09, 0x1f, - 0xc4, 0x6c, 0xb9, 0x37, 0xa6, 0x0d, 0xdb, 0xed, 0x05, 0x8b, 0xf7, 0xdf, - 0xb6, 0x6c, 0xb1, 0x4e, 0x8e, 0x9e, 0x42, 0xfa, 0xff, 0xfa, 0x27, 0x93, - 0x04, 0x19, 0x30, 0xff, 0x9e, 0x58, 0xbf, 0xc2, 0xf7, 0xf3, 0x4f, 0xc5, - 0x8a, 0x74, 0x43, 0x7d, 0x4a, 0xfe, 0xfb, 0x98, 0x40, 0x12, 0xc5, 0xf6, - 0x61, 0xe5, 0x62, 0xe6, 0x89, 0x62, 0xfd, 0x87, 0x72, 0x02, 0xc5, 0x70, - 0xdf, 0x84, 0x31, 0x70, 0xa5, 0x62, 0xff, 0xa4, 0xa2, 0x17, 0xdb, 0xf2, - 0xb1, 0x7f, 0xa7, 0xec, 0xf0, 0x71, 0xac, 0x56, 0xc8, 0x82, 0x18, 0xb9, - 0x1c, 0xdf, 0x1e, 0x7a, 0x82, 0xc5, 0xff, 0xb3, 0xb4, 0x8c, 0xb3, 0xd8, - 0x05, 0x8b, 0xb0, 0x96, 0x2d, 0x9d, 0x1e, 0xaf, 0x63, 0xfb, 0xf7, 0xfd, - 0x30, 0x3a, 0xc5, 0xc1, 0x81, 0x62, 0x9d, 0x1c, 0xba, 0x79, 0xf9, 0x50, - 0x0a, 0x6e, 0xda, 0x0b, 0x16, 0x89, 0x62, 0xa4, 0xd6, 0x06, 0x33, 0x79, - 0xc8, 0x6b, 0x17, 0x8b, 0x06, 0xb1, 0x7f, 0xc7, 0xcf, 0x48, 0x04, 0xc0, - 0x58, 0xbf, 0xf9, 0xc6, 0xde, 0x7e, 0x64, 0x33, 0xeb, 0x17, 0x37, 0x72, - 0xc5, 0xdd, 0x79, 0x62, 0xfd, 0x9b, 0x1c, 0x5f, 0x58, 0xac, 0x3c, 0x32, - 0x19, 0xaf, 0xa3, 0x03, 0xc8, 0x7d, 0xcb, 0xb7, 0xf6, 0x6a, 0x7d, 0xcc, - 0x58, 0xbf, 0xfe, 0x6e, 0xa1, 0x30, 0xc1, 0xf2, 0x61, 0x24, 0xb1, 0x7f, - 0xf7, 0x26, 0x18, 0x3e, 0xec, 0x2c, 0x02, 0xc5, 0x62, 0x3d, 0x5c, 0xcc, - 0x8b, 0x7c, 0x9f, 0x7f, 0x71, 0xbe, 0xf2, 0x05, 0x8b, 0xf1, 0x7b, 0x98, - 0x4b, 0x17, 0xff, 0x74, 0x0d, 0x33, 0x75, 0x0e, 0x06, 0x75, 0x8b, 0xf6, - 0x7b, 0xd9, 0xb2, 0xc5, 0x80, 0xb1, 0x78, 0x32, 0x81, 0x1b, 0xb0, 0xca, - 0x6f, 0xff, 0xff, 0x61, 0xaf, 0xf9, 0x3e, 0xd8, 0x16, 0x6b, 0x67, 0xe7, - 0xf3, 0xd1, 0xd8, 0xb1, 0x4e, 0x9a, 0xdb, 0x13, 0x82, 0x10, 0x9c, 0x33, - 0xbf, 0x69, 0xbb, 0x77, 0x32, 0xc5, 0x4b, 0x24, 0x32, 0x11, 0x8b, 0x0e, - 0x15, 0xa6, 0x91, 0x6e, 0x5f, 0xd3, 0x03, 0xc2, 0x93, 0x51, 0x8a, 0x9d, - 0xa3, 0xe4, 0x2c, 0x38, 0x01, 0xc2, 0x8f, 0xbb, 0x87, 0x5e, 0x8e, 0x23, - 0xb2, 0x0d, 0xfb, 0xbc, 0x8d, 0xa3, 0x78, 0xef, 0x2c, 0x5f, 0xed, 0xbc, + 0xf5, 0xd6, 0x3a, 0x99, 0x3e, 0xb4, 0x8a, 0x34, 0x3b, 0xeb, 0xb2, 0x19, + 0x96, 0x91, 0xb4, 0x62, 0x90, 0x86, 0xd0, 0xe5, 0x09, 0xe4, 0xa3, 0xf3, + 0x5d, 0xf7, 0x94, 0x2f, 0xdc, 0x2d, 0x1e, 0x12, 0x31, 0xe5, 0xd1, 0x4a, + 0x50, 0xd4, 0x6f, 0x07, 0x85, 0xb7, 0xe7, 0x70, 0x9a, 0x39, 0x60, 0x46, + 0x2c, 0x52, 0xda, 0x79, 0x2e, 0xb3, 0xd3, 0xa8, 0xc2, 0x7d, 0x8e, 0x85, + 0x20, 0x70, 0x8c, 0xea, 0x77, 0xba, 0x76, 0x58, 0xb9, 0xbc, 0xb1, 0x7f, + 0x43, 0x08, 0x9a, 0x0b, 0x17, 0x9b, 0xb8, 0xc1, 0x9e, 0xd9, 0xc6, 0x3c, + 0x2f, 0x7e, 0x11, 0xa1, 0xb4, 0x7a, 0xc5, 0xff, 0x60, 0x65, 0x3b, 0x94, + 0xf9, 0x62, 0xfd, 0x00, 0xf6, 0x9d, 0x96, 0x2f, 0x61, 0x6e, 0xb1, 0x79, + 0xbb, 0x8c, 0xd2, 0x2c, 0x3e, 0x5d, 0xc3, 0x90, 0xcb, 0x2a, 0x31, 0x5d, + 0x39, 0x4a, 0x60, 0x14, 0x3d, 0x2f, 0x40, 0x50, 0x58, 0xbf, 0xa0, 0xda, + 0xdb, 0xe2, 0x58, 0xbf, 0x72, 0x40, 0x1e, 0xcb, 0x16, 0xc8, 0x8f, 0x6f, + 0x86, 0x17, 0xcf, 0x1c, 0x40, 0x58, 0xbd, 0xee, 0x76, 0xb1, 0x7f, 0xef, + 0x3c, 0x1f, 0xe2, 0x39, 0xdd, 0x62, 0xe1, 0xc6, 0x41, 0x32, 0x41, 0xbc, + 0xb1, 0x47, 0x09, 0x43, 0x1f, 0xbc, 0x7c, 0x25, 0x8b, 0xfd, 0x9c, 0xe4, + 0x80, 0x3d, 0x96, 0x2f, 0xc7, 0x92, 0x9e, 0xd6, 0x2e, 0x6d, 0xd6, 0x2f, + 0xfb, 0xd1, 0x41, 0xb5, 0xb7, 0xc4, 0xb1, 0x7f, 0x9c, 0x5c, 0x01, 0x0b, + 0x65, 0x8a, 0xd9, 0x16, 0x5b, 0x94, 0x76, 0x31, 0xe3, 0xdb, 0xff, 0x71, + 0xc7, 0x98, 0x46, 0x8c, 0x6b, 0x17, 0xb7, 0x78, 0x2c, 0x5f, 0xc5, 0x17, + 0xd8, 0x12, 0xb1, 0x7f, 0xf4, 0x8f, 0x22, 0x83, 0x6b, 0x6f, 0x89, 0x62, + 0xa4, 0xfd, 0x74, 0x5d, 0x7f, 0xf0, 0x7b, 0x99, 0x3a, 0xd3, 0x93, 0x6e, + 0xb1, 0x7a, 0x38, 0x80, 0xb1, 0x73, 0x92, 0xc5, 0xc2, 0xdd, 0x62, 0xff, + 0x45, 0x1b, 0x63, 0xf4, 0x63, 0xac, 0x53, 0xa2, 0x28, 0xe4, 0x1c, 0x16, + 0xf0, 0xcd, 0xe7, 0xf8, 0x96, 0x2f, 0xe7, 0x1b, 0x96, 0xf2, 0xb1, 0x7f, + 0x3e, 0xff, 0x7e, 0xfc, 0xb1, 0x7f, 0x30, 0xff, 0x25, 0xb2, 0xc5, 0x61, + 0xef, 0x7c, 0xc2, 0xf9, 0xfd, 0x80, 0x58, 0xbf, 0xe3, 0x3d, 0x26, 0x44, + 0xcd, 0xa5, 0x8b, 0xfe, 0xc8, 0xa0, 0xda, 0xdb, 0xe2, 0x58, 0xba, 0x62, + 0x58, 0xbf, 0xe3, 0xc5, 0x06, 0xd6, 0xdf, 0x12, 0xc5, 0xe6, 0x20, 0x12, + 0x24, 0x7c, 0x78, 0x18, 0xc5, 0x1d, 0x30, 0xd8, 0xe8, 0x66, 0xd4, 0xae, + 0xb4, 0x8c, 0x73, 0x21, 0xd1, 0xda, 0x03, 0x9f, 0xea, 0x12, 0x67, 0x21, + 0x68, 0x69, 0x75, 0xe7, 0x84, 0x3b, 0xc8, 0x45, 0xf8, 0x84, 0x38, 0xcb, + 0xee, 0x8d, 0xe3, 0x45, 0x8b, 0xc7, 0x6e, 0xd6, 0x2f, 0xe7, 0xd9, 0x8e, + 0xe7, 0x58, 0xb9, 0xbe, 0xb1, 0x5a, 0x3c, 0x50, 0x17, 0x5f, 0xff, 0xf7, + 0xde, 0x28, 0x08, 0xd2, 0xce, 0xfc, 0xc7, 0xf7, 0x33, 0x65, 0x8b, 0xfe, + 0xf3, 0x9f, 0x9f, 0xc0, 0x99, 0x62, 0xee, 0x8e, 0xb1, 0x7b, 0x06, 0x35, + 0x8b, 0xda, 0xc0, 0xd6, 0x2f, 0xd8, 0x33, 0x94, 0x16, 0x2b, 0x47, 0x8c, + 0x71, 0xeb, 0xfe, 0x98, 0x04, 0xda, 0xd6, 0x06, 0xb1, 0x7e, 0xcf, 0x6a, + 0x4e, 0xb1, 0x7e, 0x3f, 0xb8, 0x28, 0xf5, 0x8b, 0xfd, 0xef, 0xe1, 0x13, + 0x79, 0x62, 0xf6, 0x05, 0x19, 0xd6, 0x2a, 0xac, 0x92, 0x2c, 0x63, 0xdc, + 0x8b, 0xb6, 0xb8, 0x8e, 0xbe, 0x32, 0xcc, 0x64, 0x45, 0xc3, 0xb0, 0xca, + 0x3a, 0x8b, 0x6d, 0xc8, 0xc5, 0xc4, 0x1d, 0xa5, 0xbe, 0xde, 0x3e, 0x1d, + 0x62, 0xff, 0x3b, 0x03, 0x05, 0xad, 0x96, 0x2f, 0xf4, 0xe6, 0xde, 0x7e, + 0xf8, 0xb1, 0x5f, 0x3e, 0x9e, 0x1a, 0x5f, 0xef, 0x3f, 0xb9, 0xf7, 0x8c, + 0xc4, 0x54, 0x7a, 0x10, 0xd5, 0x2c, 0xb3, 0x57, 0xa5, 0x02, 0x0a, 0x1b, + 0xf7, 0xe7, 0x17, 0x85, 0xba, 0xc5, 0xfa, 0x41, 0xf1, 0x06, 0xb1, 0x70, + 0xbb, 0x58, 0xbf, 0x66, 0xb3, 0x3b, 0x58, 0xbb, 0x68, 0xc9, 0x44, 0xaf, + 0xca, 0x80, 0x54, 0x43, 0x37, 0xff, 0xf9, 0xfc, 0x26, 0xda, 0x33, 0x21, + 0xf9, 0xd6, 0x61, 0x1a, 0xb1, 0x5a, 0x45, 0x7f, 0x5e, 0x97, 0x7f, 0xff, + 0xf6, 0xed, 0xa6, 0xfc, 0x33, 0xd8, 0x3e, 0x31, 0xf3, 0x5b, 0x4f, 0x6b, + 0x17, 0xf6, 0x0d, 0x8f, 0x84, 0xb1, 0x7f, 0xfd, 0x82, 0xeb, 0xf0, 0x99, + 0xfe, 0xde, 0xfc, 0xac, 0x53, 0xa3, 0xcb, 0x4e, 0x9f, 0x2c, 0xbf, 0x6b, + 0x76, 0x6d, 0xd5, 0x24, 0xa1, 0x7f, 0xfc, 0xde, 0x2c, 0xdb, 0x53, 0xf7, + 0xfe, 0x69, 0x62, 0xff, 0xf9, 0x87, 0x83, 0xfe, 0x10, 0x0f, 0x9a, 0xc5, + 0x8b, 0xb8, 0x12, 0xc5, 0xff, 0xbf, 0x20, 0x3b, 0x43, 0x9c, 0x09, 0x62, + 0xf3, 0x42, 0x32, 0x53, 0x5d, 0xc2, 0xf0, 0x1b, 0x92, 0x7f, 0x13, 0x83, + 0x19, 0xbf, 0xf3, 0xee, 0xda, 0x68, 0x3f, 0x00, 0xb1, 0x7e, 0xd6, 0xec, + 0xdb, 0xaa, 0x44, 0xe2, 0xe8, 0x46, 0x49, 0xfb, 0x61, 0xfd, 0x1d, 0x30, + 0xf6, 0x87, 0x05, 0xff, 0x64, 0x50, 0x6d, 0x6d, 0xf1, 0x2c, 0x5f, 0xfe, + 0xce, 0xfd, 0x38, 0x16, 0x42, 0x41, 0xc5, 0x8b, 0xf7, 0xf3, 0x4f, 0xc5, + 0x8b, 0xfd, 0x9c, 0x0c, 0x7f, 0x9e, 0xd6, 0x2e, 0xd4, 0x60, 0xd1, 0xca, + 0x47, 0x9e, 0x4b, 0x8e, 0x28, 0xbf, 0xe6, 0x86, 0x40, 0x84, 0xdc, 0x58, + 0xbd, 0x31, 0x32, 0xc5, 0xfd, 0xe6, 0x39, 0x49, 0xd6, 0x2f, 0x9c, 0xb2, + 0x0b, 0x14, 0x34, 0x51, 0xfc, 0xe3, 0xc3, 0xbd, 0x45, 0xb7, 0xdb, 0x90, + 0x8d, 0x58, 0xbf, 0xde, 0x72, 0x14, 0x33, 0x8b, 0x17, 0x6a, 0x33, 0x11, + 0x30, 0xc8, 0x01, 0x92, 0xd4, 0x62, 0xad, 0x47, 0x8c, 0x35, 0xa3, 0x89, + 0xa9, 0x97, 0x43, 0xa7, 0xb5, 0xa8, 0xa0, 0x85, 0x3e, 0x50, 0x7a, 0x9a, + 0x74, 0x32, 0x78, 0x54, 0xd9, 0x58, 0x7b, 0xca, 0x0d, 0x79, 0xfd, 0x88, + 0xf8, 0xf0, 0x22, 0x8f, 0xab, 0x51, 0xbb, 0x1f, 0x10, 0x25, 0xbf, 0xa7, + 0xa9, 0xb5, 0x26, 0xc8, 0x12, 0xbe, 0xca, 0x91, 0x11, 0xcb, 0x5b, 0x0f, + 0xea, 0x64, 0xc8, 0xa3, 0x84, 0xe9, 0x3c, 0xb5, 0x6e, 0x2c, 0x5f, 0xb5, + 0xbb, 0x36, 0xea, 0x90, 0x7c, 0xbf, 0xf3, 0x42, 0x33, 0x35, 0xbb, 0x36, + 0xea, 0x91, 0x4c, 0xb4, 0x60, 0xd1, 0x33, 0x82, 0x47, 0x37, 0xbf, 0xd1, + 0x99, 0xad, 0xd9, 0xb7, 0x54, 0x84, 0xe5, 0xe8, 0xd3, 0xae, 0xfa, 0xc5, + 0x8b, 0xe8, 0xd7, 0x1b, 0xc6, 0xff, 0x58, 0xbf, 0x3f, 0xb8, 0x23, 0xac, + 0x5f, 0x84, 0x72, 0x63, 0x56, 0x2f, 0x7e, 0x62, 0x58, 0xbb, 0xb8, 0x2c, + 0x54, 0x48, 0x89, 0xd1, 0x4f, 0xca, 0x44, 0x3d, 0x7f, 0x85, 0xd8, 0x63, + 0x17, 0xb8, 0xb1, 0x7f, 0xfa, 0x35, 0x1a, 0x14, 0x7e, 0xc3, 0x8d, 0x8c, + 0x33, 0xf1, 0xcb, 0x17, 0xd9, 0xb8, 0x83, 0x58, 0xbe, 0xdd, 0x9b, 0x75, + 0x48, 0x62, 0x5f, 0xff, 0x34, 0x38, 0x53, 0x9b, 0x8f, 0x4e, 0x2d, 0xd6, + 0x2f, 0xf8, 0x4c, 0x76, 0xd6, 0xb3, 0xb5, 0x8a, 0xdd, 0x1c, 0x3a, 0x25, + 0x23, 0x1e, 0x28, 0xdf, 0xe0, 0xb9, 0x14, 0x1f, 0xdc, 0x58, 0xbf, 0x71, + 0xfa, 0x49, 0xd6, 0x2f, 0x77, 0x0d, 0x96, 0x2a, 0x4f, 0x2b, 0x0a, 0xaf, + 0xb3, 0x63, 0xf9, 0x62, 0xa5, 0x18, 0xbf, 0x84, 0x09, 0x10, 0x5f, 0xe8, + 0xd5, 0xd3, 0xae, 0xa6, 0x19, 0xf8, 0xe5, 0x8b, 0xf7, 0x46, 0xe4, 0xc1, + 0x62, 0xfe, 0x73, 0x83, 0x59, 0xda, 0xc5, 0xfd, 0xcf, 0x77, 0xbb, 0xfd, + 0x62, 0xf7, 0xdc, 0x25, 0x8b, 0xa1, 0x3f, 0x3c, 0xf0, 0x18, 0xdf, 0xdf, + 0x62, 0x18, 0x7d, 0xac, 0x5f, 0xff, 0x31, 0xa6, 0x78, 0xd9, 0x28, 0x67, + 0xdc, 0xeb, 0x16, 0x13, 0xa2, 0x08, 0x8c, 0x2f, 0xec, 0xd8, 0x3e, 0x81, + 0xf4, 0x58, 0xb7, 0xd6, 0x2f, 0xa7, 0xb8, 0x32, 0xc5, 0x39, 0xb5, 0x88, + 0x4a, 0xfa, 0x4f, 0xb8, 0x16, 0x2f, 0x07, 0x31, 0x2c, 0x5f, 0xff, 0x43, + 0x68, 0xd5, 0x31, 0xa6, 0xdb, 0xe8, 0xc3, 0x3f, 0x1c, 0xb1, 0x52, 0x99, + 0xae, 0x35, 0xfc, 0x85, 0x89, 0x00, 0x3f, 0x7e, 0xd3, 0xee, 0xfd, 0x16, + 0x2f, 0xc2, 0xf4, 0xf7, 0x05, 0x8b, 0xd9, 0xdf, 0x96, 0x2f, 0xf6, 0x17, + 0xf3, 0xd2, 0x35, 0x8b, 0xb3, 0xd2, 0x7a, 0x0e, 0x3d, 0x7f, 0xe8, 0x4f, + 0x39, 0x2f, 0xb3, 0x79, 0x62, 0xff, 0xde, 0x36, 0x4a, 0x19, 0xf7, 0x3a, + 0xc5, 0xff, 0x1b, 0x25, 0x0c, 0xfb, 0x9d, 0x62, 0xf8, 0x44, 0xc6, 0x98, + 0x7f, 0x1e, 0x3f, 0xbf, 0x3c, 0x40, 0x60, 0x2c, 0x5d, 0xbe, 0xeb, 0x17, + 0xb8, 0xdd, 0xac, 0x5f, 0xb4, 0x07, 0xfc, 0xac, 0x57, 0x69, 0xbd, 0x1e, + 0x16, 0xff, 0x3a, 0xe1, 0x4f, 0x86, 0x84, 0x3d, 0x7b, 0xb8, 0x46, 0x8b, + 0x17, 0xf7, 0xfd, 0xcc, 0xee, 0x0b, 0x14, 0xe7, 0xa8, 0x22, 0x4b, 0xcf, + 0xa8, 0xe5, 0x8b, 0xf1, 0x91, 0x14, 0x8d, 0x62, 0xf0, 0x70, 0x8f, 0x58, + 0xae, 0xb8, 0xca, 0xab, 0x8d, 0x65, 0xf3, 0x0b, 0xdd, 0x8f, 0xa0, 0x71, + 0x91, 0xa2, 0xef, 0x18, 0x17, 0x66, 0x6e, 0x97, 0x1e, 0x55, 0x13, 0xf1, + 0xe1, 0x5f, 0xf8, 0xd7, 0x19, 0x20, 0x05, 0x64, 0xf5, 0xc8, 0xe9, 0x7d, + 0x0b, 0x21, 0x10, 0xc7, 0x10, 0x75, 0x15, 0x5f, 0xff, 0xff, 0xff, 0xba, + 0xc0, 0x18, 0x67, 0xe3, 0xa3, 0x27, 0xae, 0xbb, 0x6d, 0x08, 0x87, 0xad, + 0xba, 0xe4, 0xed, 0xbc, 0x21, 0x31, 0xbc, 0x6b, 0x30, 0xcf, 0xc7, 0x2c, + 0x54, 0x62, 0xa4, 0x19, 0x8d, 0x66, 0xff, 0xf4, 0x61, 0xda, 0x11, 0x99, + 0xad, 0xd9, 0xb7, 0x54, 0x8f, 0x25, 0xee, 0x93, 0xf5, 0x8b, 0x4a, 0xc5, + 0x49, 0xb0, 0xd0, 0xfd, 0xf4, 0x94, 0x38, 0xb1, 0x76, 0x71, 0x62, 0xff, + 0xcd, 0xe9, 0xd0, 0xa1, 0xa9, 0x82, 0xc5, 0xc1, 0xf1, 0x62, 0xf7, 0xa4, + 0xeb, 0x17, 0xce, 0x59, 0xd1, 0x62, 0xfd, 0xe9, 0x27, 0x02, 0xc5, 0xff, + 0x4e, 0xd9, 0xe9, 0x27, 0x02, 0xc5, 0xe6, 0x20, 0x61, 0xef, 0x86, 0x4f, + 0x5f, 0x45, 0xa4, 0x74, 0x20, 0xab, 0x49, 0xd6, 0x80, 0x83, 0xaf, 0x22, + 0x21, 0x7e, 0x1f, 0xf8, 0x64, 0x38, 0x68, 0xd2, 0xc5, 0xfe, 0x8d, 0xff, + 0x10, 0x3a, 0xcd, 0x71, 0x62, 0x96, 0x2f, 0x0f, 0x0e, 0xb1, 0x6e, 0x7c, + 0xd4, 0x88, 0x32, 0xe8, 0x06, 0xb1, 0x7c, 0x26, 0xd4, 0x16, 0x2f, 0x78, + 0x3d, 0x96, 0x2f, 0xf9, 0x8b, 0xd2, 0x0d, 0x36, 0x96, 0x2f, 0xff, 0x13, + 0x41, 0xfe, 0x28, 0xa1, 0x3a, 0xd9, 0x62, 0xf1, 0xc5, 0x1e, 0xb1, 0x7b, + 0xb8, 0x6e, 0xb1, 0x7e, 0x61, 0xfe, 0x78, 0xb1, 0x7f, 0x7f, 0xf3, 0xdb, + 0x47, 0xac, 0x52, 0xc5, 0x61, 0xbe, 0xe1, 0x95, 0xa3, 0x3a, 0xd5, 0x48, + 0x9d, 0x75, 0x0c, 0x96, 0xa8, 0x13, 0x8c, 0x67, 0x08, 0xf4, 0x41, 0xf3, + 0x80, 0x26, 0x75, 0xe4, 0x24, 0x41, 0xc6, 0x6a, 0x8c, 0x56, 0xe4, 0x14, + 0xab, 0x3b, 0xff, 0xa3, 0x39, 0xe2, 0x90, 0x37, 0x85, 0x2b, 0x15, 0x2d, + 0x9d, 0xde, 0xc7, 0x10, 0xa6, 0x98, 0xfc, 0xb7, 0xd3, 0xb5, 0xc1, 0x18, + 0x5f, 0xb5, 0xbb, 0x36, 0xea, 0x90, 0x80, 0xbf, 0xf3, 0x42, 0x33, 0x35, + 0xbb, 0x36, 0xea, 0x91, 0x50, 0xbf, 0xb4, 0x2f, 0xc9, 0x6e, 0xb1, 0x7f, + 0x6e, 0xf9, 0xd5, 0xf9, 0x58, 0xa9, 0x3e, 0x0c, 0x2f, 0xbf, 0xbd, 0x84, + 0x53, 0xb2, 0xc5, 0xa3, 0x31, 0x33, 0x43, 0x9b, 0x94, 0x2c, 0x3c, 0x41, + 0x7f, 0x66, 0x9a, 0x2d, 0xf6, 0x58, 0xbd, 0x25, 0xb2, 0xc5, 0x0c, 0xf3, + 0xba, 0x18, 0xdf, 0xb5, 0xbb, 0x36, 0xea, 0x90, 0xa0, 0xbf, 0x6a, 0x4f, + 0x3d, 0xac, 0x5f, 0xda, 0x93, 0xfb, 0x00, 0xb1, 0x78, 0xe2, 0x1a, 0xc5, + 0xff, 0x9f, 0xd1, 0x4b, 0xe7, 0x47, 0x8f, 0x58, 0xb7, 0xdc, 0xf8, 0x7a, + 0x0f, 0x5e, 0x38, 0xa3, 0xd6, 0x2f, 0xde, 0xe7, 0xc5, 0xc5, 0x8b, 0xfe, + 0x70, 0x48, 0x18, 0x85, 0x8b, 0x17, 0xfa, 0x18, 0x32, 0x66, 0x1a, 0xc5, + 0xfd, 0x9a, 0x01, 0x08, 0x0b, 0x15, 0x28, 0xc1, 0xc2, 0xa6, 0x37, 0x01, + 0x95, 0xff, 0x84, 0xda, 0x68, 0x79, 0xf8, 0x25, 0x8b, 0xf4, 0x83, 0x03, + 0x3a, 0xc5, 0xff, 0x4f, 0x65, 0x9e, 0xe4, 0x9d, 0x62, 0x89, 0x14, 0x3c, + 0x3f, 0x11, 0x4d, 0xff, 0x7f, 0x06, 0xfc, 0xc2, 0x02, 0xc5, 0xe9, 0x06, + 0x2c, 0x5a, 0x32, 0x55, 0xbe, 0x61, 0x23, 0x9b, 0xe8, 0xa5, 0xa1, 0x1e, + 0x02, 0x92, 0x87, 0x17, 0x21, 0xb7, 0xe2, 0xf0, 0xce, 0x2f, 0xf4, 0x66, + 0x6b, 0x76, 0x6d, 0xd5, 0x21, 0x91, 0x7e, 0xd6, 0xec, 0xdb, 0xaa, 0x46, + 0x52, 0xfd, 0x0c, 0xf3, 0x6e, 0xb1, 0x7e, 0x8c, 0x3b, 0x42, 0x33, 0x0f, + 0x83, 0xb3, 0x7b, 0xba, 0xde, 0xb1, 0x62, 0xee, 0xc4, 0xb1, 0x7e, 0xd6, + 0xec, 0xdb, 0xaa, 0x4a, 0x42, 0xed, 0x84, 0xb1, 0x62, 0x58, 0xba, 0x07, + 0x58, 0xb7, 0x52, 0xc5, 0xec, 0xcf, 0x2c, 0x51, 0xa6, 0xc4, 0xe2, 0xb7, + 0x75, 0xfd, 0x7a, 0xc5, 0xfd, 0x07, 0x19, 0x67, 0x45, 0x8b, 0x06, 0xb1, + 0x7c, 0x5f, 0xce, 0xd6, 0x2f, 0x75, 0x08, 0x0b, 0x16, 0x8c, 0x8d, 0x13, + 0xaf, 0x81, 0x16, 0x0c, 0xb9, 0xbc, 0x78, 0xce, 0x84, 0x59, 0x27, 0xaf, + 0x22, 0xf1, 0x10, 0x8b, 0xc3, 0x13, 0xea, 0x23, 0xbf, 0x6b, 0x76, 0x6d, + 0xd5, 0x25, 0xd1, 0x7f, 0x7d, 0xf5, 0xa6, 0x82, 0xc5, 0xa3, 0x30, 0xf9, + 0x78, 0x6f, 0x78, 0x39, 0x3a, 0xc5, 0xfb, 0x5b, 0xb3, 0x6e, 0xa9, 0x31, + 0x4b, 0x46, 0x49, 0xea, 0xe0, 0xf5, 0xfe, 0x26, 0xf3, 0xfd, 0x8e, 0xb1, + 0x7f, 0xd3, 0xce, 0x49, 0xfd, 0x9b, 0xac, 0x5f, 0x6e, 0xcd, 0xba, 0xa4, + 0x7a, 0x2f, 0x9a, 0x11, 0x99, 0xb9, 0xf5, 0xe8, 0xea, 0x9d, 0x1b, 0x27, + 0x84, 0xed, 0xe0, 0x9b, 0x75, 0x8b, 0xfb, 0xf2, 0xfa, 0x7e, 0xbd, 0x62, + 0xf7, 0x5e, 0xfc, 0x58, 0xbf, 0x9f, 0x66, 0x9e, 0xf8, 0xb1, 0x7e, 0x97, + 0x8e, 0x7e, 0xa5, 0x8b, 0xe9, 0xed, 0xba, 0x96, 0x2e, 0x0a, 0x33, 0x11, + 0xeb, 0xb8, 0xfb, 0x99, 0x7c, 0x89, 0x8b, 0xc8, 0xb6, 0xff, 0xf4, 0x94, + 0x66, 0x7d, 0x8c, 0x3c, 0xe7, 0x96, 0x2f, 0xfb, 0xa3, 0x7e, 0x75, 0xa7, + 0x3a, 0xc5, 0xff, 0xfd, 0x86, 0x9a, 0xde, 0xe3, 0x94, 0x53, 0xbe, 0xb3, + 0xb5, 0x8b, 0xe1, 0xe0, 0x51, 0x92, 0x89, 0xa2, 0x3b, 0xbf, 0xff, 0xff, + 0x79, 0xb5, 0x08, 0xcc, 0xe0, 0x9b, 0xbc, 0x29, 0x08, 0x3f, 0x3c, 0x33, + 0xbf, 0x2c, 0x5f, 0xff, 0xe7, 0x92, 0xf4, 0x67, 0xde, 0x4b, 0x6f, 0x77, + 0xbb, 0x92, 0xc5, 0xfb, 0x3d, 0xf7, 0x09, 0x62, 0xff, 0xdc, 0xc2, 0x63, + 0x7e, 0xf2, 0x4b, 0x17, 0xfd, 0x99, 0xf7, 0xdf, 0xf9, 0x18, 0x47, 0xcd, + 0xe2, 0x9b, 0xe7, 0x23, 0x65, 0x62, 0xf1, 0x34, 0x4b, 0x14, 0xb1, 0x70, + 0x89, 0x62, 0xa4, 0xd1, 0xf0, 0x32, 0xff, 0xa7, 0xee, 0x3f, 0xcc, 0x38, + 0xb1, 0x5c, 0x3d, 0x9e, 0x84, 0x17, 0xe2, 0x98, 0xa6, 0x3d, 0x62, 0xa0, + 0x98, 0x56, 0x11, 0x3c, 0x26, 0x7c, 0x49, 0x7a, 0x4a, 0x56, 0x2f, 0x79, + 0xb7, 0x58, 0xbf, 0x48, 0x38, 0xfd, 0xac, 0x59, 0xfb, 0x3c, 0x7f, 0x8f, + 0x5f, 0xec, 0xd6, 0xd3, 0xc7, 0x1a, 0xc5, 0xcc, 0x4b, 0x17, 0xf8, 0x84, + 0xdb, 0x6b, 0x0e, 0xb1, 0x7f, 0x4f, 0xfd, 0x8f, 0xd1, 0x62, 0xf9, 0xf5, + 0x3b, 0x2c, 0x5b, 0x0e, 0x7a, 0x5f, 0x2f, 0xbf, 0xa4, 0xfa, 0x13, 0x71, + 0x62, 0x8e, 0x8f, 0x1f, 0x8b, 0x72, 0x10, 0xde, 0x27, 0xbd, 0x38, 0x35, + 0x8b, 0xcf, 0x9b, 0x2c, 0x58, 0xd5, 0x8b, 0xbe, 0xf1, 0xe6, 0xc3, 0x43, + 0xb7, 0x88, 0x5e, 0x58, 0xb3, 0xac, 0x5d, 0xc7, 0x88, 0xd7, 0x10, 0xed, + 0xdd, 0xf9, 0x62, 0xfd, 0x09, 0x29, 0x89, 0x62, 0xfe, 0xfb, 0xf3, 0x59, + 0xda, 0xc5, 0xfe, 0x9f, 0x71, 0xe2, 0x90, 0x2c, 0x54, 0xa2, 0x93, 0xb1, + 0x98, 0x8a, 0x3e, 0x5f, 0x7a, 0x75, 0xb2, 0xc5, 0xec, 0x2d, 0xd6, 0x2f, + 0xd1, 0x6f, 0xf9, 0xd9, 0x62, 0x96, 0x2a, 0x07, 0xe7, 0x83, 0xcc, 0x3a, + 0x22, 0xcb, 0xfe, 0x84, 0x91, 0x67, 0xbe, 0xeb, 0x17, 0xf7, 0x9c, 0x9c, + 0x1c, 0x58, 0xa7, 0x3e, 0x41, 0x1b, 0xde, 0x6c, 0xe2, 0xc5, 0x49, 0xbd, + 0x11, 0x0d, 0xf7, 0x84, 0xdc, 0x58, 0xb8, 0xf2, 0xb1, 0xd9, 0xa3, 0xbf, + 0xa7, 0xbf, 0x09, 0xb8, 0xb1, 0x58, 0x7a, 0xe6, 0x94, 0x5d, 0x87, 0x58, + 0xb3, 0x91, 0xb9, 0x8e, 0x22, 0xbf, 0xb6, 0xd9, 0xca, 0x60, 0xb1, 0x7b, + 0x73, 0x65, 0x62, 0xfc, 0x76, 0xd3, 0x41, 0x62, 0xf9, 0xf8, 0x23, 0xac, + 0x5e, 0xfc, 0xc1, 0x62, 0xfb, 0x63, 0xcc, 0x16, 0x2a, 0x4f, 0x05, 0x87, + 0x6f, 0xbd, 0xc1, 0x4a, 0xc5, 0x9d, 0x62, 0x88, 0xda, 0x78, 0x8e, 0xfb, + 0xaa, 0x4b, 0x65, 0x8a, 0x93, 0xc6, 0x72, 0x0b, 0xf3, 0x3f, 0x7e, 0xc5, + 0x8b, 0xf0, 0x73, 0xa9, 0x3a, 0xc5, 0x6c, 0x9c, 0xbc, 0x0a, 0x06, 0xc9, + 0xa8, 0x4d, 0x00, 0x83, 0x85, 0x17, 0x9e, 0x7c, 0xb1, 0x50, 0x55, 0x0f, + 0x85, 0x1d, 0x97, 0xbc, 0x76, 0xc1, 0x2f, 0x5f, 0x68, 0xb3, 0x65, 0x8b, + 0xe1, 0xfd, 0xb4, 0xb1, 0x52, 0x89, 0x87, 0x52, 0x62, 0x3b, 0xe7, 0xf4, + 0xe9, 0x62, 0xfb, 0xde, 0x9f, 0x2c, 0x5e, 0x89, 0xbc, 0xb1, 0x5f, 0x3e, + 0x36, 0x22, 0x0c, 0x8e, 0xfb, 0x71, 0x34, 0x16, 0x2f, 0xe9, 0x04, 0x50, + 0x9d, 0x96, 0x2d, 0xb2, 0xc5, 0x40, 0xf0, 0xdc, 0xc2, 0xf1, 0x49, 0xab, + 0x15, 0x11, 0xbe, 0x39, 0x0d, 0xf7, 0xa0, 0xc3, 0x58, 0xa9, 0x47, 0x56, + 0x42, 0x95, 0x88, 0xaf, 0xf3, 0xe9, 0xbb, 0xf4, 0xc1, 0x62, 0xfb, 0x84, + 0x2f, 0xac, 0x5f, 0xf4, 0xbf, 0xb8, 0xe5, 0xdc, 0x16, 0x2e, 0x9d, 0x2c, + 0x5f, 0xda, 0xce, 0x92, 0x5e, 0x58, 0xbf, 0xee, 0xf7, 0x73, 0x70, 0x9c, + 0xd5, 0x8b, 0x66, 0x8f, 0xaf, 0xc5, 0xf7, 0xc4, 0xc0, 0xe2, 0xc5, 0x41, + 0x35, 0xbc, 0x34, 0xf9, 0x1b, 0x1c, 0x94, 0x20, 0xbc, 0x4f, 0x7f, 0x43, + 0x3f, 0xf6, 0x82, 0xc5, 0xb6, 0x58, 0xbe, 0x87, 0x18, 0xeb, 0x15, 0xb1, + 0xb6, 0x61, 0x3b, 0xf6, 0x7c, 0x61, 0xf1, 0x62, 0xe1, 0xc6, 0x4b, 0x35, + 0xa3, 0x64, 0x18, 0x31, 0x0c, 0xa3, 0x23, 0x25, 0x35, 0x0b, 0x74, 0xce, + 0xd7, 0x5e, 0x1a, 0x11, 0x42, 0xc7, 0x50, 0xdb, 0xfc, 0xbf, 0x26, 0x84, + 0x81, 0x46, 0x33, 0xc8, 0xe3, 0x7c, 0xb4, 0x13, 0x20, 0x64, 0x37, 0xcf, + 0xaf, 0xb2, 0xc5, 0xfc, 0xe1, 0x0d, 0x98, 0xd5, 0x8b, 0xfa, 0x22, 0x93, + 0xc6, 0x67, 0xcf, 0x47, 0x84, 0x57, 0xfb, 0x77, 0xd4, 0x61, 0xdc, 0x6b, + 0x17, 0x73, 0xcb, 0x17, 0xf8, 0x98, 0x2e, 0x72, 0x40, 0xb1, 0x7f, 0x7d, + 0xf9, 0xcc, 0xd2, 0xc5, 0xff, 0xa4, 0xfd, 0xc3, 0x9e, 0xc2, 0x89, 0x62, + 0xff, 0xcf, 0xe7, 0x2f, 0x0b, 0xf1, 0xe4, 0xb1, 0x5f, 0x44, 0x13, 0x20, + 0xdd, 0x9c, 0x58, 0xbf, 0xa4, 0xff, 0x6c, 0xd2, 0xc5, 0xff, 0x63, 0x1f, + 0x93, 0xf6, 0x8f, 0x58, 0xbb, 0x35, 0xd9, 0xf4, 0x68, 0xb6, 0xee, 0x01, + 0x62, 0xfc, 0x4c, 0x72, 0x95, 0x8b, 0xf8, 0x5c, 0xfb, 0x42, 0x32, 0x34, + 0x54, 0x12, 0x31, 0x8d, 0xcd, 0x3f, 0x0b, 0x06, 0x22, 0x27, 0xf0, 0x8b, + 0x83, 0x18, 0xbd, 0xb4, 0xc7, 0xac, 0x5f, 0x9f, 0xd3, 0xee, 0x2c, 0x5f, + 0xda, 0xda, 0x47, 0x84, 0xb1, 0x76, 0xbc, 0xb1, 0x7e, 0xcf, 0x71, 0xce, + 0xb1, 0x7d, 0x03, 0xf6, 0x12, 0xc5, 0xff, 0xe9, 0xef, 0xd9, 0x13, 0xeb, + 0xdc, 0x14, 0x7a, 0xc5, 0xe6, 0xee, 0x32, 0x53, 0x2d, 0x81, 0x0e, 0x14, + 0x31, 0x71, 0x0c, 0x70, 0xa3, 0xc4, 0xd5, 0x2b, 0xca, 0xb9, 0x1c, 0x37, + 0x68, 0xfa, 0x94, 0x83, 0xc8, 0xf4, 0x6a, 0x0d, 0xbf, 0x60, 0xe1, 0xcd, + 0xd9, 0xe7, 0xe1, 0x12, 0x50, 0xca, 0xf5, 0x6a, 0x31, 0x51, 0x8d, 0xcf, + 0x0c, 0xc6, 0x38, 0xf5, 0xc2, 0x85, 0xff, 0xfe, 0xd7, 0xbd, 0x30, 0xfc, + 0xbe, 0xa4, 0xbd, 0xc1, 0x4a, 0xc5, 0xfd, 0x9e, 0x66, 0xef, 0x8b, 0x17, + 0xfd, 0xe1, 0x6c, 0x1c, 0x5c, 0x17, 0x6b, 0x17, 0x9b, 0xfc, 0x58, 0xb4, + 0x66, 0x23, 0xac, 0x98, 0x3c, 0x5c, 0x12, 0x05, 0xf6, 0x8e, 0xde, 0x58, + 0xba, 0x3e, 0x3d, 0x62, 0xfa, 0x0e, 0x58, 0xb1, 0x78, 0xbd, 0x05, 0x8b, + 0xfc, 0xe5, 0xe1, 0xe9, 0xc2, 0x58, 0xbf, 0xb9, 0x9e, 0xfe, 0x01, 0x62, + 0xfd, 0xe2, 0x9c, 0xed, 0x62, 0xed, 0xa3, 0x1d, 0x30, 0x98, 0xf2, 0x38, + 0x87, 0xb4, 0x42, 0x01, 0xdf, 0x1a, 0x06, 0x5d, 0x43, 0x4f, 0x1f, 0x51, + 0xa7, 0x5e, 0x91, 0x75, 0xeb, 0x17, 0xed, 0x6f, 0xf7, 0xe2, 0xc5, 0x39, + 0xe6, 0x08, 0x8a, 0xef, 0x4a, 0xc5, 0x75, 0x86, 0xe3, 0xb2, 0x1b, 0xf4, + 0x6d, 0xdf, 0x05, 0xb2, 0xc5, 0xed, 0xa3, 0xa3, 0x75, 0x8b, 0xf3, 0x6c, + 0x53, 0x05, 0x8b, 0xfd, 0x9d, 0x0b, 0x38, 0x03, 0xac, 0x57, 0x5c, 0x44, + 0x27, 0xc9, 0xc8, 0xa2, 0xfc, 0xff, 0x26, 0x89, 0x62, 0xfc, 0x23, 0x9d, + 0xa2, 0x58, 0xbf, 0x3f, 0x79, 0x9b, 0x2c, 0x5b, 0x3e, 0x7a, 0x7d, 0x0a, + 0xae, 0x8e, 0x8d, 0xd6, 0x2f, 0x75, 0xdc, 0x06, 0xb1, 0x7e, 0x86, 0x0c, + 0xcc, 0x58, 0xbf, 0x33, 0xed, 0xa9, 0x58, 0xbe, 0xef, 0x77, 0x25, 0x8b, + 0xf7, 0x88, 0x4d, 0x1b, 0x2c, 0x57, 0x58, 0x9e, 0x07, 0x5a, 0x6b, 0x1b, + 0x3d, 0xf5, 0xd9, 0x4f, 0x5c, 0x20, 0x92, 0x5f, 0x94, 0xf8, 0xa0, 0x32, + 0x4b, 0x8e, 0x05, 0x8b, 0xfe, 0xeb, 0x42, 0x37, 0x78, 0xa0, 0x23, 0x56, + 0x2f, 0xd9, 0xe7, 0x17, 0x16, 0x2e, 0xeb, 0x3a, 0xea, 0xb1, 0x7e, 0x8d, + 0x23, 0x4f, 0x6a, 0x56, 0x2b, 0xac, 0x46, 0xf4, 0x68, 0x31, 0xd7, 0x54, + 0x68, 0xd4, 0x51, 0x02, 0x5b, 0xf4, 0x6b, 0xeb, 0x39, 0xaf, 0x2c, 0x5f, + 0xe0, 0xcb, 0x35, 0xa9, 0xdd, 0x62, 0xba, 0xc3, 0xea, 0x8d, 0x8d, 0x6f, + 0xee, 0xb7, 0xdd, 0xee, 0xe6, 0xac, 0x5e, 0x3f, 0xbb, 0x58, 0xae, 0xb0, + 0xf5, 0xb4, 0x6f, 0x7e, 0x8d, 0xfa, 0xd3, 0xf0, 0xd5, 0x8b, 0x9f, 0x8b, + 0x16, 0x09, 0x62, 0xba, 0xc3, 0xdf, 0xdc, 0xd4, 0x31, 0x7b, 0xf4, 0x6f, + 0xd6, 0xcc, 0x0e, 0xb1, 0x74, 0xc7, 0xac, 0x58, 0x6b, 0x15, 0xf3, 0x59, + 0xe1, 0xab, 0xff, 0xec, 0x8e, 0x34, 0x33, 0x99, 0x07, 0xf4, 0xfb, 0x8b, + 0x17, 0xff, 0xe1, 0x34, 0x71, 0xa1, 0x9c, 0xc8, 0x3f, 0xa7, 0xdc, 0x58, + 0xbf, 0xff, 0x4b, 0x47, 0x1a, 0x19, 0xcc, 0x83, 0xfa, 0x7d, 0xc5, 0x8b, + 0xfd, 0xd7, 0x71, 0xaf, 0xae, 0xb1, 0xaa, 0x37, 0x8d, 0x46, 0x62, 0x62, + 0x11, 0x2b, 0x89, 0x76, 0xff, 0xd1, 0xaa, 0x34, 0x8d, 0xba, 0xd8, 0xda, + 0x36, 0xeb, 0x91, 0xb7, 0x58, 0xb1, 0x7f, 0xd1, 0xaf, 0xac, 0x8d, 0x71, + 0xbc, 0x6d, 0x1b, 0x75, 0xce, 0xb1, 0x62, 0xff, 0xa3, 0x6e, 0xb9, 0x1a, + 0xe3, 0x5f, 0x5b, 0xd6, 0xc6, 0xfd, 0x62, 0xc5, 0x46, 0x88, 0xce, 0x8d, + 0x6c, 0xf7, 0xfd, 0x1a, 0xa3, 0x5f, 0x5c, 0x8d, 0x7d, 0x6f, 0x5d, 0x63, + 0x5f, 0x58, 0xb1, 0x7f, 0xd1, 0xb4, 0x69, 0xd7, 0x3a, 0xde, 0xb2, 0x36, + 0x8d, 0xfa, 0xc5, 0x8a, 0xeb, 0x88, 0xd1, 0x8d, 0x6d, 0x97, 0xfe, 0x8d, + 0x23, 0x5f, 0x5c, 0xeb, 0x63, 0x54, 0x6b, 0xeb, 0xb8, 0xd3, 0xac, 0x58, + 0xb8, 0xa3, 0x3a, 0xd5, 0x5c, 0x51, 0xa4, 0x67, 0xfd, 0x75, 0x87, 0xfc, + 0x6a, 0x2f, 0xbf, 0x7c, 0x70, 0x8c, 0x84, 0x62, 0xbd, 0x4e, 0x4b, 0x64, + 0xae, 0xb1, 0x76, 0xd3, 0xad, 0x5f, 0xeb, 0xac, 0xe8, 0x2d, 0xfb, 0xad, + 0x3b, 0x31, 0x2c, 0x5f, 0xd1, 0xbf, 0x5a, 0x03, 0xc1, 0xd6, 0x2f, 0xe9, + 0x7f, 0x7a, 0x4e, 0xb1, 0x70, 0xe3, 0xd6, 0x2a, 0x37, 0x45, 0x6f, 0x58, + 0x59, 0x1a, 0xce, 0x7b, 0x2d, 0xbd, 0xbe, 0x7d, 0x22, 0xee, 0x69, 0x62, + 0xe9, 0xe2, 0xc5, 0xb4, 0xb1, 0x63, 0xac, 0x51, 0xcd, 0xdf, 0x85, 0xc2, + 0x12, 0xbf, 0xfc, 0x72, 0xce, 0xcf, 0x9b, 0xc9, 0x4e, 0xeb, 0x17, 0xfc, + 0xd3, 0xec, 0xfc, 0xb8, 0x16, 0x2f, 0xff, 0xda, 0x9f, 0xce, 0x6e, 0x37, + 0x2d, 0x8f, 0x30, 0x58, 0xb7, 0xb1, 0x1b, 0x1e, 0x4b, 0x0c, 0xde, 0xed, + 0x4a, 0xc5, 0x39, 0xe6, 0x80, 0xda, 0xf6, 0x9a, 0x0b, 0x17, 0xf4, 0xc0, + 0x07, 0x98, 0x2c, 0x56, 0x8f, 0x2f, 0xe3, 0xb7, 0xfb, 0x37, 0x93, 0x3e, + 0xc7, 0x58, 0xa9, 0x3d, 0x7f, 0x91, 0x5f, 0xfc, 0x42, 0x93, 0x19, 0xfd, + 0x0c, 0xe2, 0xc5, 0xff, 0xdf, 0x9e, 0x30, 0x7f, 0xfb, 0xf7, 0xc5, 0x8b, + 0xfe, 0x79, 0x2c, 0xe9, 0xa9, 0xe2, 0xc5, 0x6e, 0x88, 0x0f, 0xa3, 0xde, + 0x89, 0xc2, 0x58, 0xbf, 0x00, 0x50, 0x83, 0x2c, 0x53, 0x9e, 0x40, 0x63, + 0xf7, 0xa2, 0x70, 0x96, 0x2e, 0xc8, 0x2c, 0x53, 0x9b, 0x66, 0x1f, 0xa3, + 0x9f, 0xb8, 0x16, 0x2f, 0xfc, 0xe6, 0x7d, 0xda, 0x1e, 0x7d, 0x96, 0x2f, + 0x36, 0xa0, 0xb1, 0x58, 0x7f, 0xff, 0x22, 0x12, 0x05, 0xfb, 0xc0, 0x0c, + 0xa2, 0x58, 0xbf, 0x41, 0xf5, 0x86, 0xac, 0x5f, 0xf7, 0x0c, 0xe7, 0x32, + 0x10, 0x95, 0x8a, 0x73, 0xe4, 0x62, 0x9b, 0x71, 0x62, 0xfe, 0x9d, 0xdf, + 0x66, 0x25, 0x8b, 0xff, 0xf1, 0x31, 0xaf, 0xa9, 0x84, 0x33, 0x80, 0x04, + 0xac, 0x5d, 0x23, 0x58, 0xbf, 0x0b, 0x30, 0x8d, 0x58, 0xb3, 0x11, 0xbf, + 0xf0, 0xbd, 0x0d, 0x3d, 0x6c, 0x2e, 0x36, 0x11, 0xf1, 0x10, 0x68, 0x4b, + 0xe5, 0xc0, 0x84, 0xa5, 0xf8, 0xa4, 0x62, 0xe2, 0xc5, 0x84, 0xb1, 0x7d, + 0x25, 0x31, 0x2c, 0x51, 0x1b, 0x4f, 0x09, 0x5d, 0x3a, 0x58, 0xb7, 0x5e, + 0xb1, 0x7a, 0x7f, 0x2b, 0x15, 0x28, 0xc6, 0xc5, 0xc3, 0x48, 0x22, 0x17, + 0x21, 0x7b, 0xff, 0x16, 0x0b, 0x72, 0xcd, 0x83, 0x82, 0xc5, 0xfd, 0x9a, + 0x03, 0x60, 0x16, 0x2f, 0xfa, 0x75, 0xa7, 0xea, 0xdc, 0x5b, 0x2c, 0x5c, + 0xc7, 0x30, 0xfb, 0x23, 0x0b, 0x6e, 0xd3, 0x92, 0x37, 0xba, 0xa1, 0x5b, + 0x7c, 0xff, 0x0c, 0xeb, 0x16, 0x75, 0x8b, 0xb6, 0x65, 0x8a, 0xf9, 0xa9, + 0xf0, 0x8d, 0xff, 0xee, 0xe7, 0x51, 0x36, 0xff, 0x7e, 0x8c, 0x75, 0x8b, + 0xff, 0xce, 0x69, 0x98, 0x4d, 0xdf, 0x0d, 0x35, 0x96, 0x2b, 0x74, 0xc2, + 0xdd, 0x35, 0x88, 0x49, 0x3e, 0xfb, 0xb6, 0xfc, 0xac, 0x5f, 0xf0, 0xb3, + 0x45, 0x9e, 0xfb, 0xac, 0x5f, 0xd0, 0x30, 0xed, 0xe9, 0x58, 0xa8, 0x1f, + 0x3f, 0x67, 0x17, 0xff, 0x70, 0xb0, 0x11, 0x9f, 0x7d, 0xdb, 0x4b, 0x17, + 0x66, 0x2c, 0x54, 0xa6, 0x16, 0xf0, 0x8a, 0x62, 0x30, 0x92, 0x2e, 0x20, + 0x96, 0x2f, 0xf3, 0xe8, 0xcf, 0x4f, 0x70, 0x58, 0xbe, 0x21, 0x34, 0x16, + 0x2b, 0x63, 0xd8, 0xe1, 0xb5, 0xff, 0xee, 0x39, 0xfb, 0xe3, 0x78, 0x5d, + 0xf2, 0x56, 0x2f, 0xef, 0x45, 0x06, 0xd1, 0xab, 0x17, 0x66, 0xeb, 0x17, + 0x87, 0x86, 0xb1, 0xe4, 0xf8, 0xc6, 0xfb, 0xf2, 0x7d, 0xd6, 0x2a, 0x53, + 0x80, 0xc7, 0x0e, 0xc8, 0xda, 0x12, 0xde, 0x33, 0xb8, 0x40, 0x58, 0xbf, + 0x7b, 0xee, 0x2e, 0xbd, 0x62, 0xa0, 0x78, 0xd8, 0x31, 0x7d, 0x98, 0x46, + 0xac, 0x5f, 0x43, 0x66, 0x35, 0x62, 0xff, 0xe2, 0x9f, 0x73, 0x08, 0x5e, + 0x11, 0xab, 0x14, 0x61, 0xf5, 0x70, 0x96, 0xb8, 0x8d, 0x0f, 0x10, 0x8a, + 0x11, 0x97, 0x87, 0x9f, 0x58, 0xbd, 0x13, 0x84, 0xb1, 0x61, 0xc0, 0xde, + 0x38, 0xed, 0xf1, 0x0b, 0xbe, 0x2c, 0x5f, 0xfe, 0xcd, 0xc6, 0xe4, 0x1e, + 0x6b, 0x53, 0xd1, 0x62, 0xff, 0xe3, 0x26, 0x4a, 0x4e, 0x61, 0x9f, 0x8e, + 0x58, 0xbf, 0xff, 0xe7, 0xd4, 0xf0, 0xb3, 0xa3, 0xfc, 0x5a, 0x9f, 0x13, + 0x01, 0x62, 0xfa, 0x7b, 0x86, 0x2c, 0x54, 0xa6, 0xd4, 0xe4, 0xc0, 0x24, + 0x24, 0xde, 0x25, 0x79, 0x9a, 0xff, 0xc6, 0x0f, 0x09, 0xc1, 0xcf, 0xba, + 0xc5, 0xfe, 0x84, 0xe1, 0x0e, 0x4e, 0xb1, 0x5a, 0x3f, 0x1e, 0xbc, 0xfe, + 0xfb, 0xda, 0xc1, 0xac, 0x5f, 0x69, 0x88, 0xd5, 0x8b, 0x85, 0x05, 0x8a, + 0x93, 0xde, 0x62, 0x3e, 0x84, 0x77, 0xfe, 0xe3, 0x18, 0x3c, 0xf7, 0x1b, + 0xb5, 0x8b, 0xff, 0x7f, 0x22, 0xfb, 0xfe, 0x75, 0x2b, 0x17, 0xd8, 0x4e, + 0x6a, 0xc5, 0xcd, 0xda, 0xc5, 0xe2, 0x98, 0xf5, 0x8b, 0xfc, 0xdc, 0x6f, + 0x88, 0xb6, 0x58, 0xaf, 0xa2, 0x34, 0x88, 0xbc, 0x30, 0x21, 0xfa, 0x31, + 0xb3, 0x2e, 0xd9, 0x4e, 0x11, 0xaa, 0x0e, 0x18, 0x78, 0x43, 0xdc, 0x31, + 0x1e, 0x59, 0xc4, 0x51, 0x9b, 0x6a, 0x32, 0x73, 0xc6, 0x81, 0xf8, 0xd1, + 0xca, 0x3c, 0x1e, 0x46, 0xc9, 0xe8, 0xf6, 0xc5, 0x0c, 0x6e, 0x90, 0x85, + 0x08, 0xbc, 0x34, 0x1e, 0xa8, 0x66, 0x5d, 0xc1, 0x2c, 0x5e, 0x98, 0xe8, + 0xdd, 0x62, 0xda, 0x58, 0xbf, 0x3c, 0x1f, 0x52, 0xb1, 0x74, 0xe9, 0x62, + 0xf1, 0x67, 0x52, 0xc5, 0xfd, 0x80, 0xe3, 0xf6, 0x12, 0xc5, 0xf3, 0x4f, + 0x70, 0x58, 0xbb, 0x3e, 0xb1, 0x7e, 0xd7, 0x70, 0xf4, 0xac, 0x5e, 0xce, + 0x98, 0xb1, 0x58, 0x79, 0x04, 0x55, 0x46, 0x26, 0x83, 0x22, 0x5b, 0x93, + 0xb0, 0xb9, 0x0f, 0xf0, 0xc2, 0x38, 0x8c, 0x35, 0xfb, 0xec, 0x3b, 0xf9, + 0x62, 0xa5, 0x50, 0xac, 0x06, 0x35, 0x1b, 0x37, 0x9d, 0x6e, 0x16, 0x96, + 0x2c, 0x75, 0x8a, 0xdc, 0xd5, 0x1c, 0x62, 0xfb, 0x22, 0x73, 0xac, 0x5d, + 0xa0, 0x2c, 0x5c, 0xd8, 0xb1, 0x5d, 0x9a, 0xed, 0x0c, 0x5e, 0x26, 0xf2, + 0xc5, 0xe2, 0x7e, 0x2c, 0x5e, 0x2c, 0xed, 0x62, 0xec, 0xed, 0x62, 0xc1, + 0x75, 0xa7, 0xdb, 0x23, 0x9b, 0x0e, 0x0c, 0x76, 0xe9, 0xfa, 0xc5, 0xe6, + 0x20, 0x2c, 0x5d, 0x9c, 0x58, 0xb9, 0x8e, 0xb1, 0x6d, 0x40, 0xf2, 0x98, + 0x73, 0xa0, 0xbd, 0xfd, 0xb9, 0xca, 0x7b, 0x02, 0xc5, 0xcc, 0x75, 0x8b, + 0xdc, 0x84, 0xac, 0x5f, 0xb9, 0x99, 0x8e, 0xb1, 0x58, 0x78, 0x60, 0x1d, + 0xbf, 0xfc, 0xe6, 0x4c, 0x4f, 0xed, 0x4e, 0xe2, 0xdd, 0x62, 0xf0, 0x1b, + 0xb5, 0x8b, 0xec, 0xf4, 0x84, 0xb1, 0x58, 0x78, 0x24, 0x3d, 0x7f, 0xf9, + 0xcc, 0xfe, 0x44, 0xfd, 0xf3, 0xf9, 0xba, 0xc5, 0xc5, 0xc5, 0x8b, 0xfe, + 0x86, 0x7b, 0x05, 0xbb, 0x12, 0xc5, 0xf1, 0x37, 0xb8, 0xb1, 0x50, 0x3f, + 0x2e, 0xc5, 0xce, 0x73, 0x7a, 0x73, 0x4b, 0x17, 0xff, 0xb7, 0x6d, 0x37, + 0x9f, 0x92, 0x52, 0x05, 0x8b, 0x43, 0xe7, 0xca, 0x18, 0xe5, 0xfb, 0x3a, + 0xd2, 0x71, 0xac, 0x57, 0x68, 0xea, 0xd4, 0x25, 0x40, 0x53, 0x52, 0xbb, + 0x13, 0xb3, 0x74, 0x08, 0x86, 0xa3, 0x90, 0x8f, 0xdd, 0x21, 0xd8, 0x62, + 0x36, 0xd1, 0x81, 0xd6, 0x80, 0x43, 0xc8, 0x47, 0xf8, 0x80, 0x51, 0xd5, + 0x5f, 0x0c, 0xe1, 0x71, 0x62, 0xff, 0x6f, 0xf7, 0xd3, 0xe4, 0x16, 0x2e, + 0x35, 0xd6, 0x2f, 0xe2, 0xc2, 0xd9, 0xf4, 0xb1, 0x7f, 0x16, 0x6d, 0xb4, + 0xc7, 0xac, 0x50, 0x11, 0x57, 0xc3, 0x4e, 0x83, 0x1d, 0x45, 0xb7, 0xc5, + 0x38, 0x35, 0x8b, 0xdb, 0x06, 0x75, 0x8b, 0xce, 0x19, 0xd6, 0x2c, 0x75, + 0x8b, 0x9c, 0x6b, 0x14, 0x6a, 0x22, 0x1c, 0x85, 0x88, 0x38, 0x3c, 0x18, + 0x95, 0xff, 0xbd, 0xc9, 0xce, 0xfc, 0x4d, 0xf5, 0x8b, 0xbe, 0x75, 0x8b, + 0xa4, 0x96, 0x2a, 0x07, 0xdb, 0x87, 0xff, 0x18, 0xbb, 0xab, 0xa9, 0x62, + 0xf6, 0x37, 0xd6, 0x2b, 0x86, 0xea, 0x38, 0x7a, 0xf8, 0xc8, 0x00, 0xeb, + 0x17, 0xb5, 0x83, 0x58, 0xbf, 0x8c, 0x2c, 0x04, 0x81, 0x62, 0xf1, 0x67, + 0x16, 0x2f, 0xb6, 0x10, 0x30, 0x8f, 0x2b, 0xa1, 0x75, 0xff, 0xfd, 0xdc, + 0x30, 0xf9, 0xd1, 0xfc, 0xc7, 0x6f, 0x0a, 0x56, 0x2f, 0xef, 0x4c, 0x5c, + 0x73, 0xac, 0x54, 0xa2, 0x31, 0x97, 0x6f, 0xc2, 0x3f, 0xb6, 0x8e, 0x58, + 0xa3, 0x53, 0x7d, 0xd3, 0x3f, 0xe1, 0x8f, 0xc2, 0x1b, 0xfd, 0x30, 0x2c, + 0xef, 0xd8, 0xb1, 0x7e, 0xdd, 0xfb, 0xd8, 0x96, 0x2f, 0xfe, 0x6d, 0xe4, + 0x87, 0x14, 0x27, 0x5b, 0x2c, 0x57, 0x67, 0xe5, 0xf2, 0xbb, 0x71, 0x62, + 0x9c, 0xda, 0xf0, 0x8e, 0xf1, 0xf0, 0xeb, 0x17, 0xc7, 0x3c, 0x9d, 0x62, + 0xfd, 0xa6, 0x66, 0xf2, 0xc5, 0x0c, 0xf9, 0xd8, 0x74, 0x88, 0xef, 0xff, + 0xbd, 0xc1, 0xeb, 0x1c, 0xdf, 0x84, 0xc5, 0xb2, 0xc5, 0xb6, 0x58, 0xbc, + 0x3c, 0x35, 0x62, 0xb4, 0x6c, 0x48, 0x4e, 0xf7, 0xc4, 0x75, 0x8b, 0xba, + 0x0d, 0x62, 0xba, 0xed, 0x7c, 0xb6, 0x61, 0xa1, 0x08, 0x65, 0x0e, 0x16, + 0xf8, 0xd1, 0xd9, 0x23, 0xc7, 0x45, 0xa4, 0x4f, 0xc3, 0x69, 0xa1, 0x0f, + 0xc2, 0xdf, 0x42, 0x10, 0x44, 0x01, 0x0f, 0x5f, 0xb0, 0x8a, 0x76, 0x58, + 0xb7, 0x6b, 0x1a, 0x34, 0xf4, 0xb1, 0x71, 0x41, 0x62, 0x9c, 0xd1, 0x88, + 0x32, 0xff, 0xb5, 0x84, 0x0e, 0x7b, 0x9d, 0xac, 0x5f, 0xb9, 0x14, 0x96, + 0xcb, 0x15, 0x88, 0xcb, 0x35, 0x19, 0x88, 0x3c, 0x77, 0x78, 0xc8, 0x6c, + 0xb1, 0x7f, 0xc4, 0xfa, 0x9c, 0x2f, 0x89, 0x62, 0xf1, 0xdf, 0x8b, 0x17, + 0xe2, 0x35, 0xf3, 0x8b, 0x17, 0xfe, 0x83, 0x6b, 0x6f, 0x8b, 0x60, 0x79, + 0x62, 0xff, 0x38, 0x0e, 0xd0, 0xc2, 0x58, 0xbf, 0xff, 0xec, 0xc1, 0xe1, + 0x67, 0x7e, 0xdf, 0xef, 0xd1, 0xfa, 0x61, 0x2c, 0x5f, 0xbe, 0xfc, 0x71, + 0xac, 0x5e, 0x79, 0x3a, 0xc5, 0xb5, 0x03, 0xc4, 0xf9, 0x45, 0xf3, 0x79, + 0xb7, 0x58, 0xa7, 0x3c, 0xb0, 0x8a, 0x2f, 0x85, 0xd7, 0xf3, 0x65, 0x8b, + 0xf6, 0xff, 0x60, 0x71, 0x62, 0xfe, 0xce, 0xe1, 0x39, 0xe5, 0x8b, 0xc1, + 0x30, 0x30, 0xf6, 0x08, 0xaa, 0xa5, 0x16, 0x99, 0x08, 0x2b, 0xf7, 0x24, + 0x01, 0xec, 0xb1, 0x7f, 0xff, 0x84, 0x45, 0x9e, 0xfb, 0xe4, 0x3f, 0x9a, + 0x67, 0xe8, 0xb1, 0x7f, 0xcd, 0xdc, 0x93, 0x0f, 0x0d, 0x58, 0xa0, 0x22, + 0x67, 0x8c, 0x14, 0x6a, 0xb9, 0x57, 0x1d, 0x88, 0xa3, 0x48, 0x67, 0x32, + 0xfc, 0x3e, 0x0a, 0x1a, 0xdc, 0x26, 0xf4, 0x31, 0x2f, 0xff, 0xcf, 0xdf, + 0x3e, 0x13, 0x7a, 0x49, 0x88, 0x52, 0xb1, 0x7f, 0xfe, 0x33, 0xf8, 0x37, + 0x2c, 0x3f, 0x7e, 0x13, 0x71, 0x62, 0x80, 0x8a, 0xce, 0x8a, 0xb7, 0x04, + 0x35, 0x8b, 0xff, 0xde, 0xfe, 0x1c, 0x0d, 0xac, 0xe9, 0x83, 0x58, 0xba, + 0x7e, 0xb1, 0x61, 0xac, 0x51, 0xcd, 0x49, 0x0b, 0xd8, 0xd5, 0x8b, 0xc4, + 0x09, 0x58, 0xb8, 0x86, 0x61, 0xaf, 0xe0, 0x9d, 0xd9, 0xe5, 0x8b, 0xf7, + 0x02, 0x62, 0xd9, 0x62, 0xfa, 0x4f, 0x80, 0x58, 0xac, 0x3c, 0xcd, 0xca, + 0xaa, 0x53, 0x76, 0xc7, 0x56, 0x4f, 0x01, 0x69, 0x31, 0xde, 0x6d, 0xf1, + 0x62, 0xff, 0xfc, 0x26, 0x0f, 0x3d, 0x25, 0x9a, 0xc8, 0x42, 0x56, 0x2c, + 0x11, 0x87, 0xe2, 0x43, 0xb6, 0x25, 0x86, 0x35, 0x37, 0xc4, 0xd1, 0xfd, + 0xac, 0x5e, 0xe3, 0x6e, 0xb1, 0x5e, 0x3c, 0x41, 0x13, 0x5f, 0xf8, 0x43, + 0xfb, 0xcf, 0x4d, 0x07, 0xc5, 0x8a, 0xd1, 0xf2, 0x91, 0x15, 0xf7, 0xa3, + 0xb3, 0xeb, 0x17, 0xb8, 0x39, 0x58, 0xbf, 0xd9, 0xbc, 0x90, 0x9a, 0x0b, + 0x17, 0xff, 0xf6, 0xf9, 0xdf, 0xbe, 0xfa, 0x96, 0x80, 0x33, 0x22, 0x58, + 0xa3, 0x51, 0x20, 0x46, 0x74, 0x6a, 0x34, 0x1a, 0x15, 0xb5, 0x29, 0x9f, + 0xe1, 0x08, 0xa1, 0xed, 0x7b, 0x8d, 0xd1, 0x62, 0xdc, 0x58, 0xb6, 0x2c, + 0x53, 0x9a, 0x3e, 0xa1, 0x2b, 0xe6, 0xf0, 0x04, 0xb1, 0x63, 0x56, 0x2f, + 0xf8, 0xa4, 0x1f, 0x9d, 0xdb, 0x4b, 0x17, 0xfd, 0x39, 0xf7, 0xf7, 0x9b, + 0x65, 0x8b, 0xfb, 0x6e, 0xf7, 0x7c, 0xfc, 0x47, 0xe4, 0x23, 0x9b, 0x14, + 0xa3, 0x35, 0xa1, 0x0b, 0x7f, 0xf7, 0xb9, 0x81, 0x06, 0xc5, 0xa7, 0xdd, + 0x62, 0xb7, 0x4d, 0x8b, 0xb8, 0x78, 0x04, 0x57, 0x7f, 0x06, 0x7c, 0xc2, + 0x35, 0x62, 0xe9, 0x02, 0xc5, 0x39, 0xe3, 0x06, 0x5f, 0x5d, 0xaa, 0x68, + 0x3a, 0x13, 0x47, 0x0a, 0x07, 0xfb, 0xfc, 0x4d, 0x0e, 0x40, 0x2d, 0x96, + 0x2f, 0xff, 0xfe, 0x26, 0x06, 0x16, 0xd8, 0x16, 0x6b, 0x67, 0xe7, 0xf3, + 0xd1, 0xd8, 0xb1, 0x58, 0x8a, 0xbf, 0x1b, 0x5f, 0x43, 0x8e, 0x4b, 0x17, + 0xdf, 0xde, 0x77, 0x58, 0xbf, 0xdb, 0x49, 0xca, 0x7b, 0x02, 0xc5, 0xff, + 0xb7, 0x26, 0xfb, 0x77, 0x9d, 0xf9, 0x62, 0xff, 0x13, 0x1b, 0xa7, 0x93, + 0x56, 0x2a, 0x09, 0x89, 0xf6, 0x44, 0xe4, 0x4c, 0x4a, 0x23, 0x50, 0x90, + 0x6c, 0x1a, 0xc5, 0xf6, 0xc1, 0x34, 0x16, 0x2f, 0xfd, 0xa1, 0x1c, 0x98, + 0xd1, 0xeb, 0xaf, 0x58, 0xbf, 0xf4, 0x97, 0xb8, 0x1f, 0xdb, 0xdc, 0x58, + 0xa9, 0x44, 0x37, 0x91, 0xaf, 0x63, 0x1d, 0x62, 0x8d, 0x37, 0xda, 0x22, + 0xa9, 0x4d, 0xdb, 0xb5, 0x87, 0x13, 0x68, 0x74, 0xdf, 0x17, 0x9c, 0xeb, + 0x17, 0xa6, 0x60, 0xb1, 0x86, 0x8a, 0xfe, 0x9e, 0x4f, 0xe7, 0x8b, 0x17, + 0xb7, 0x7d, 0xd6, 0x2f, 0x3f, 0xd9, 0x62, 0xfc, 0xd0, 0x7f, 0x89, 0x62, + 0x98, 0xf1, 0x08, 0x72, 0xf4, 0x76, 0x7d, 0x62, 0xed, 0x42, 0x51, 0x47, + 0xf6, 0x3f, 0x10, 0x56, 0x93, 0x0b, 0x68, 0x68, 0x5d, 0xec, 0x58, 0xa9, + 0x6c, 0x7b, 0x76, 0x3c, 0x81, 0x06, 0x4b, 0xcc, 0x36, 0x33, 0xbe, 0xc9, + 0x5e, 0x38, 0xfd, 0x43, 0x87, 0xf2, 0x82, 0x1a, 0x54, 0xe1, 0x4b, 0x79, + 0xe3, 0x18, 0xa3, 0x36, 0x0c, 0xa2, 0xfc, 0xfc, 0x21, 0x79, 0x62, 0xf8, + 0x1c, 0x0c, 0x0b, 0x17, 0x33, 0xac, 0x5f, 0xfe, 0x35, 0xb3, 0xbf, 0x7a, + 0x73, 0xa3, 0xee, 0xb1, 0x79, 0xc8, 0x0b, 0x17, 0xfe, 0x87, 0x24, 0xa7, + 0x79, 0x7f, 0xac, 0x5f, 0xd2, 0x5e, 0xfe, 0x41, 0x62, 0xed, 0x71, 0x62, + 0xb4, 0x78, 0xac, 0x5b, 0x5d, 0xa2, 0x93, 0xa4, 0x20, 0xef, 0xf1, 0x67, + 0x3c, 0xcc, 0x4b, 0x14, 0x34, 0xe0, 0x0d, 0x16, 0xfa, 0x73, 0x43, 0x03, + 0xa1, 0x5d, 0xf7, 0x57, 0x54, 0xc7, 0xac, 0x5f, 0xff, 0x79, 0xc8, 0x50, + 0xce, 0x0c, 0x4d, 0xa8, 0x2c, 0x5a, 0x4c, 0x3f, 0xc0, 0xcb, 0x2f, 0xfc, + 0x76, 0x86, 0x7d, 0xf5, 0xf6, 0x58, 0xb6, 0xb4, 0x7c, 0xe0, 0x29, 0xbf, + 0xff, 0x69, 0xf3, 0xa1, 0x0b, 0x9e, 0xef, 0x77, 0x35, 0xd6, 0x2f, 0xdc, + 0x88, 0xa4, 0x6b, 0x14, 0xe8, 0xab, 0xd1, 0x47, 0x96, 0xaf, 0xf7, 0x0b, + 0x3d, 0xec, 0xd9, 0x62, 0xff, 0x3f, 0x30, 0xbd, 0x9b, 0xac, 0x54, 0x0f, + 0x9f, 0x46, 0x97, 0xff, 0xec, 0x37, 0x08, 0xce, 0x7b, 0xf8, 0x70, 0xe4, + 0x0b, 0x14, 0xe7, 0xf4, 0x44, 0x55, 0x29, 0x98, 0x64, 0x62, 0x17, 0xf8, + 0x4d, 0xc7, 0x89, 0xc2, 0x58, 0xa9, 0x5d, 0x12, 0x78, 0xe9, 0x7f, 0x2c, + 0x40, 0x8a, 0x2f, 0xf8, 0x22, 0x63, 0x70, 0x6e, 0x4b, 0x17, 0xbf, 0x24, + 0xb1, 0x7d, 0xef, 0x36, 0xeb, 0x17, 0x78, 0xeb, 0x16, 0x8e, 0x58, 0xa8, + 0x1e, 0x8f, 0x64, 0x9f, 0x18, 0xa9, 0x46, 0xb6, 0xe7, 0x2c, 0xdb, 0x7c, + 0x3d, 0x38, 0x4b, 0x17, 0xf6, 0x66, 0xd9, 0x9e, 0x58, 0xb8, 0xde, 0x8b, + 0x17, 0xb0, 0x43, 0x58, 0xad, 0x91, 0x12, 0x32, 0x42, 0x2d, 0xe0, 0xdd, + 0xfb, 0x21, 0x20, 0xe2, 0xc5, 0xff, 0xfd, 0xf9, 0xe6, 0x43, 0xf2, 0x72, + 0x63, 0x4b, 0x00, 0xb1, 0x50, 0x44, 0x17, 0x8a, 0x2f, 0xfb, 0x46, 0x7f, + 0x06, 0x53, 0xba, 0xc5, 0x49, 0xef, 0x39, 0x1d, 0xe7, 0x2f, 0x2c, 0x5e, + 0xdf, 0x34, 0xb1, 0x7b, 0xa3, 0x6e, 0xb1, 0x52, 0x6f, 0xb0, 0x7a, 0xfb, + 0xf3, 0xd3, 0x16, 0x2f, 0xe6, 0xe8, 0xf1, 0x38, 0x4b, 0x14, 0x74, 0x67, + 0x12, 0xd7, 0x87, 0xc3, 0x24, 0xbf, 0xc2, 0xd6, 0xc7, 0x9c, 0xf2, 0xc5, + 0xff, 0x72, 0x4e, 0x3f, 0xc9, 0x6e, 0xb1, 0x73, 0x96, 0x1f, 0x79, 0xa6, + 0xb7, 0x16, 0xcb, 0x15, 0x28, 0xf0, 0x1c, 0x2b, 0x30, 0xb2, 0xff, 0xb6, + 0xcd, 0xe4, 0x5f, 0xcd, 0x2c, 0x52, 0xc5, 0x85, 0x27, 0x8f, 0xc3, 0xbb, + 0xef, 0xb7, 0x70, 0x58, 0xa8, 0x1e, 0x5e, 0xe4, 0xf7, 0xe6, 0xd0, 0x23, + 0xb1, 0x62, 0xf7, 0x5b, 0xd3, 0xcb, 0x14, 0x33, 0xd0, 0xe8, 0x57, 0x7b, + 0xe1, 0xf4, 0x58, 0xb9, 0xf6, 0x58, 0xbf, 0xe9, 0x39, 0x66, 0xfa, 0x70, + 0x2c, 0x58, 0x6b, 0x17, 0xb9, 0xcc, 0x58, 0xb0, 0xe4, 0xd7, 0xb0, 0x95, + 0x41, 0x18, 0xda, 0x21, 0xe0, 0xc0, 0x9a, 0x2f, 0xcc, 0xfb, 0xe1, 0x2c, + 0x5f, 0xfd, 0x98, 0x46, 0xe9, 0xf9, 0xc6, 0x35, 0x62, 0xbe, 0x7d, 0x81, + 0x93, 0xdf, 0xd8, 0xfc, 0xe0, 0xa5, 0x62, 0xf8, 0x0f, 0xa3, 0x56, 0x2a, + 0x07, 0xa3, 0xe2, 0xdb, 0xf8, 0x78, 0x50, 0xfe, 0x2c, 0x5f, 0xff, 0xfe, + 0xce, 0x7f, 0x35, 0x24, 0xdd, 0xc3, 0xf3, 0xef, 0x4f, 0x7f, 0x93, 0xac, + 0x54, 0xa3, 0x1d, 0xc8, 0x8e, 0x5b, 0x7f, 0xbe, 0xfd, 0x1f, 0x70, 0xce, + 0xb1, 0x7f, 0xef, 0x49, 0xfb, 0xdd, 0xfb, 0xcd, 0x2c, 0x5f, 0xbf, 0x9a, + 0x7e, 0x2c, 0x5e, 0x27, 0x86, 0xe8, 0xa2, 0xec, 0xe3, 0xc8, 0x57, 0xfb, + 0xe2, 0xda, 0x2c, 0xcd, 0xd6, 0x2e, 0xef, 0xcb, 0x17, 0xee, 0xfc, 0x53, + 0x8b, 0x17, 0xe2, 0x61, 0xe1, 0xab, 0x17, 0xd0, 0x9c, 0xf2, 0xc5, 0xd8, + 0x03, 0x0f, 0xca, 0x4a, 0x3b, 0x28, 0xbf, 0xa7, 0xd8, 0xe2, 0xeb, 0xd6, + 0x29, 0x8f, 0xb4, 0x07, 0x77, 0xfd, 0x9b, 0x60, 0xf0, 0xa6, 0x3d, 0x62, + 0xff, 0xff, 0xdc, 0x98, 0x05, 0x9f, 0x0f, 0xc5, 0x20, 0x6f, 0x00, 0x32, + 0x82, 0xc5, 0x4a, 0xe2, 0x3e, 0xd1, 0x9d, 0xc2, 0x1a, 0x03, 0x42, 0x63, + 0x70, 0x43, 0xe0, 0x88, 0x7c, 0x77, 0x7f, 0xf8, 0xbd, 0x1d, 0x91, 0x41, + 0xb5, 0xb0, 0xe5, 0x62, 0xff, 0xfd, 0x09, 0xf3, 0x7f, 0x8e, 0xde, 0x00, + 0x65, 0x05, 0x8b, 0xcc, 0xdd, 0x4b, 0x14, 0x47, 0xeb, 0xe5, 0x6b, 0xfc, + 0xe3, 0xc3, 0x86, 0xe3, 0x58, 0xa5, 0x8b, 0xde, 0xc8, 0xf5, 0x8a, 0x73, + 0x59, 0xe0, 0xcb, 0xfe, 0x9c, 0x87, 0xf1, 0xe1, 0xc5, 0x8a, 0x94, 0x5c, + 0x71, 0x83, 0xc4, 0x17, 0xe1, 0xc5, 0xf1, 0x47, 0xac, 0x57, 0x67, 0xba, + 0x45, 0xf5, 0x8a, 0x87, 0x1e, 0x18, 0x8d, 0x19, 0xb5, 0x82, 0x58, 0xbc, + 0xf8, 0x6a, 0xc5, 0xb4, 0xe6, 0xc0, 0x84, 0xef, 0xd3, 0xf7, 0xee, 0x0b, + 0x17, 0x1e, 0x0b, 0x17, 0xfb, 0x3b, 0xf1, 0x91, 0xce, 0x6a, 0xc5, 0xfb, + 0xbf, 0x47, 0x39, 0xab, 0x17, 0x8e, 0xfe, 0x30, 0xfa, 0x30, 0xea, 0xf6, + 0x3f, 0x96, 0x2f, 0xed, 0xc7, 0x9a, 0x03, 0xac, 0x59, 0x8c, 0x3c, 0xbc, + 0x1c, 0xa3, 0x13, 0x4e, 0x19, 0x4e, 0x42, 0x03, 0xef, 0xd7, 0xfb, 0xbe, + 0x06, 0x4f, 0x23, 0x58, 0xbf, 0xfa, 0x77, 0x93, 0xc9, 0x30, 0xf0, 0xd5, + 0x8a, 0xd2, 0x2f, 0x09, 0x0f, 0xa8, 0xd6, 0xfe, 0xef, 0x9f, 0x66, 0x3a, + 0xc5, 0x4a, 0xa9, 0x07, 0x94, 0x5e, 0x19, 0x95, 0xfb, 0xbe, 0x06, 0x2d, + 0x96, 0x2f, 0xf4, 0x38, 0x52, 0x06, 0x3a, 0xc5, 0xf9, 0xbb, 0xf6, 0xd2, + 0xb1, 0x52, 0x7b, 0xa4, 0x67, 0x7e, 0x37, 0x05, 0xad, 0x96, 0x2f, 0x6e, + 0x29, 0x58, 0xbf, 0xfe, 0x35, 0xb9, 0xa9, 0xf7, 0xf0, 0xf9, 0xac, 0x58, + 0xa9, 0x3e, 0xef, 0x0f, 0x56, 0x91, 0x74, 0x14, 0x26, 0x6f, 0xe7, 0xd6, + 0xc2, 0x06, 0x2c, 0x5f, 0xba, 0x84, 0x7c, 0x1a, 0xc5, 0xed, 0x30, 0x16, + 0x2f, 0xfb, 0x3b, 0xf6, 0x1d, 0x88, 0x0b, 0x17, 0x61, 0x2c, 0x54, 0x9e, + 0x7f, 0xce, 0x6f, 0xa7, 0x0b, 0x75, 0x8a, 0xf9, 0xe1, 0xf8, 0x86, 0xfb, + 0xbf, 0x49, 0xd6, 0x2a, 0x51, 0xea, 0x6c, 0x2b, 0xfb, 0x22, 0xb1, 0x2c, + 0x5f, 0xce, 0xd0, 0xf3, 0xec, 0xb1, 0x7f, 0x79, 0xfe, 0xe5, 0xe5, 0x8a, + 0x30, 0xfb, 0x3e, 0x22, 0x19, 0x75, 0xfd, 0xc7, 0xce, 0x8d, 0xa5, 0x8b, + 0xff, 0x14, 0x8f, 0xf3, 0xee, 0x19, 0x8b, 0x17, 0xfb, 0x03, 0x6d, 0x00, + 0xf8, 0xb1, 0x6e, 0x0c, 0xfc, 0xf0, 0xfe, 0xa0, 0x8f, 0xa3, 0x98, 0xfa, + 0x14, 0x57, 0xfe, 0xc8, 0xf1, 0xfe, 0x7f, 0x3e, 0xe2, 0xc5, 0xff, 0xe9, + 0xce, 0xfd, 0xf9, 0xf1, 0x48, 0x38, 0xb1, 0x7f, 0xfd, 0x9c, 0x30, 0x07, + 0x10, 0xf5, 0xd7, 0xf0, 0x33, 0xac, 0x5d, 0x20, 0x58, 0xbb, 0x06, 0xb1, + 0x77, 0xce, 0xb1, 0x7f, 0xfe, 0x11, 0x7b, 0x92, 0x46, 0xfd, 0xf0, 0x9a, + 0x0b, 0x17, 0xff, 0xf0, 0xa0, 0xe5, 0x82, 0x01, 0x99, 0xc2, 0x13, 0x6c, + 0xb1, 0x50, 0x45, 0x86, 0x95, 0x2a, 0x09, 0xb9, 0xee, 0xb5, 0x1e, 0x2f, + 0xc1, 0x7f, 0x43, 0x22, 0xa5, 0x76, 0x77, 0x62, 0x9c, 0x2f, 0x78, 0xc8, + 0x5a, 0x39, 0xc2, 0x35, 0xf2, 0x10, 0xa3, 0xbd, 0xbf, 0x6c, 0x76, 0xf4, + 0xac, 0x5f, 0x86, 0xc4, 0x23, 0xac, 0x5f, 0xff, 0xe2, 0x01, 0x67, 0xbf, + 0x90, 0x73, 0xe0, 0xe6, 0x12, 0xb1, 0x7f, 0xe1, 0x03, 0x37, 0xcd, 0x69, + 0xa0, 0xb1, 0x62, 0x58, 0xbf, 0xf0, 0x7e, 0xfc, 0x83, 0x53, 0xf9, 0x58, + 0xad, 0x8f, 0x47, 0xb1, 0x1b, 0xff, 0x84, 0xd0, 0x38, 0xbd, 0xf9, 0x17, + 0x5e, 0xb1, 0x74, 0x9d, 0x62, 0xa5, 0x3c, 0x6c, 0x29, 0x72, 0x8d, 0x2f, + 0x34, 0x24, 0x48, 0x93, 0x89, 0x77, 0xff, 0xfe, 0x6e, 0x83, 0x9e, 0x7b, + 0xbd, 0xdc, 0xbd, 0xfc, 0x18, 0xbd, 0xc5, 0x8b, 0xff, 0xcd, 0x14, 0xf6, + 0x4c, 0x6e, 0x0d, 0xa0, 0xb1, 0x7b, 0x6c, 0x09, 0x62, 0xff, 0xff, 0xfc, + 0xcf, 0xe2, 0x60, 0x31, 0x00, 0x7f, 0x90, 0xca, 0x79, 0xcc, 0x86, 0x7d, + 0x62, 0xff, 0xfe, 0xce, 0x4b, 0x8c, 0x9a, 0x0e, 0x59, 0xc7, 0x3a, 0xc5, + 0xe0, 0x44, 0x25, 0x8a, 0xdc, 0xfd, 0x9d, 0x5e, 0xa0, 0x9f, 0x98, 0xdc, + 0x74, 0x97, 0xf1, 0xf2, 0x87, 0xb5, 0xed, 0x9f, 0x4b, 0x17, 0xfc, 0x16, + 0xb2, 0x7b, 0x83, 0x9d, 0x62, 0xff, 0xb8, 0xfd, 0xfa, 0x28, 0x4f, 0x6b, + 0x17, 0xee, 0x7b, 0x99, 0xe5, 0x8a, 0x94, 0x50, 0xf0, 0xec, 0x47, 0xb7, + 0xee, 0xbd, 0xe2, 0x70, 0x96, 0x2f, 0xe2, 0x98, 0x84, 0xc1, 0xac, 0x50, + 0x8f, 0x78, 0x32, 0xfb, 0xb3, 0xeb, 0x17, 0xff, 0xef, 0x13, 0x03, 0x9f, + 0x98, 0x39, 0x61, 0xe5, 0x62, 0xf0, 0x41, 0x04, 0x91, 0x7c, 0x1e, 0xa6, + 0x09, 0x11, 0x86, 0x86, 0xfe, 0xf3, 0xfb, 0x9f, 0x7e, 0x22, 0xae, 0x39, + 0xd2, 0xa5, 0x56, 0x41, 0xa9, 0xef, 0x0b, 0xf6, 0x84, 0x6f, 0x88, 0xc5, + 0x0c, 0x2b, 0xff, 0xd3, 0x9a, 0xe7, 0xf3, 0xa9, 0xfc, 0xf0, 0x58, 0xbb, + 0xdd, 0xac, 0x5f, 0xe7, 0xd6, 0xc2, 0x06, 0x12, 0xc5, 0xef, 0xc9, 0xd6, + 0x2b, 0x74, 0x5b, 0x1d, 0x33, 0xaf, 0x19, 0x0c, 0xd2, 0xfb, 0xbe, 0x4f, + 0x6b, 0x17, 0x67, 0x16, 0x2f, 0x40, 0xa4, 0xc3, 0x78, 0xc4, 0xb7, 0x44, + 0xeb, 0x17, 0xff, 0xf4, 0x24, 0xb3, 0xdf, 0x7c, 0xf4, 0x9d, 0xf5, 0x05, + 0x8a, 0xed, 0x14, 0x5a, 0x31, 0xf0, 0xc5, 0x89, 0x62, 0xfc, 0x19, 0x67, + 0x4c, 0x58, 0xad, 0x1b, 0xb3, 0x88, 0xdf, 0xb3, 0x82, 0x2f, 0x2c, 0x53, + 0xa2, 0xd5, 0x9b, 0x08, 0x86, 0xff, 0xfb, 0x5b, 0x4f, 0xd9, 0xf5, 0xa7, + 0x3c, 0x6f, 0xd7, 0x6b, 0x17, 0xee, 0xe4, 0x9c, 0xeb, 0x17, 0xf6, 0x7c, + 0xef, 0x9d, 0xac, 0x54, 0xa2, 0xcf, 0x17, 0x7c, 0x51, 0x52, 0xea, 0x56, + 0x61, 0x3a, 0x74, 0x38, 0xc8, 0x32, 0x17, 0x06, 0xc6, 0x3b, 0xbc, 0x7b, + 0xdd, 0xc3, 0x15, 0xdc, 0xe2, 0x87, 0x56, 0xa7, 0x3c, 0x0f, 0x2a, 0x7b, + 0xf2, 0xbe, 0x98, 0xe0, 0x10, 0x8a, 0x29, 0xe7, 0x7e, 0x4a, 0x48, 0xf4, + 0xe9, 0x00, 0xa3, 0x1c, 0xe9, 0x1e, 0xbf, 0x54, 0x38, 0x2f, 0xfb, 0xb8, + 0x73, 0x98, 0x36, 0xf2, 0xc5, 0xc4, 0xcb, 0x17, 0x80, 0xfb, 0xac, 0x5e, + 0x29, 0x82, 0xc1, 0x85, 0xf5, 0xc6, 0x1b, 0x87, 0xc0, 0xe6, 0x97, 0xef, + 0x48, 0xba, 0xfe, 0x2c, 0x53, 0x9e, 0xe6, 0x8b, 0xae, 0x78, 0xe5, 0x8b, + 0xa2, 0x3a, 0xc5, 0xfb, 0x35, 0xe1, 0x7d, 0x62, 0xb4, 0x7b, 0x80, 0x1a, + 0x0c, 0x66, 0xd8, 0xb1, 0x6c, 0x58, 0x8f, 0x2c, 0x6f, 0xb4, 0x4d, 0xd1, + 0x62, 0xfd, 0xc3, 0xb3, 0x6c, 0xb1, 0x62, 0x58, 0xb6, 0x76, 0x6e, 0x98, + 0xa6, 0xc1, 0x2c, 0x5c, 0x66, 0x2c, 0x53, 0x1a, 0xbf, 0x09, 0xd4, 0xaa, + 0xa7, 0x1c, 0x3d, 0xf1, 0xf4, 0xd4, 0x17, 0x23, 0xd2, 0xf1, 0xd4, 0x6f, + 0xdf, 0x79, 0x2d, 0x96, 0x2e, 0x8d, 0x02, 0x58, 0xbe, 0xf3, 0x76, 0x05, + 0x8b, 0xff, 0xbc, 0x2e, 0xe1, 0xcf, 0xe7, 0xa4, 0x6b, 0x15, 0x04, 0x44, + 0xb0, 0xf7, 0x51, 0x25, 0x69, 0x1c, 0x7e, 0x85, 0x8d, 0xdc, 0x82, 0xc5, + 0xa5, 0x62, 0xa4, 0xd4, 0x88, 0x62, 0x96, 0x2f, 0x8d, 0x03, 0x44, 0xb1, + 0x62, 0xdc, 0xd8, 0xc4, 0x19, 0x7f, 0xfe, 0xcf, 0x7f, 0x21, 0xa9, 0xfb, + 0x3f, 0xa7, 0xeb, 0x14, 0xe7, 0xf8, 0x45, 0x17, 0x81, 0xcc, 0x58, 0xbe, + 0xea, 0x69, 0xed, 0x62, 0xff, 0x69, 0xfa, 0xfd, 0xff, 0x21, 0x2c, 0x5e, + 0x11, 0x6e, 0xb1, 0x7e, 0xd6, 0xdb, 0x30, 0x4b, 0x15, 0x87, 0x94, 0x18, + 0xf5, 0x76, 0x8c, 0xd7, 0x26, 0xd4, 0x21, 0x6f, 0xf3, 0x42, 0x2f, 0xbf, + 0x7e, 0x58, 0xbf, 0xed, 0xdb, 0x5b, 0x4e, 0xf8, 0x75, 0x8b, 0x04, 0xb1, + 0x7a, 0x4a, 0x0b, 0x17, 0xff, 0x98, 0x2f, 0x67, 0xcc, 0x2c, 0x36, 0x78, + 0xb1, 0x50, 0x3e, 0x82, 0x1c, 0xb3, 0x2c, 0x5e, 0x9f, 0xf1, 0x62, 0xbb, + 0x35, 0xce, 0x23, 0x7f, 0xe9, 0xdc, 0xcc, 0x29, 0x17, 0x5f, 0xc5, 0x8b, + 0xfd, 0x80, 0x04, 0x9a, 0x19, 0xd6, 0x2f, 0xee, 0x4e, 0x6b, 0x09, 0x62, + 0xf9, 0xa1, 0x3b, 0x2c, 0x5f, 0xe6, 0xf3, 0xfd, 0x8e, 0x66, 0x1e, 0x7f, + 0xcb, 0x2f, 0xfd, 0xcc, 0x21, 0x99, 0x83, 0x7e, 0x8b, 0x17, 0xff, 0x71, + 0xbb, 0xe7, 0x30, 0x81, 0x1d, 0x8b, 0x17, 0xfe, 0xe4, 0xc7, 0x67, 0xa1, + 0x0c, 0xe2, 0xc5, 0xff, 0xf8, 0x79, 0xee, 0x3f, 0x39, 0x3e, 0x13, 0x6d, + 0x2b, 0x15, 0xba, 0x26, 0x34, 0x85, 0x7f, 0xfc, 0xdd, 0x33, 0xec, 0xfe, + 0x98, 0x08, 0x78, 0xb1, 0x4e, 0x7e, 0x9a, 0x24, 0xbf, 0xff, 0x81, 0xcf, + 0x73, 0xef, 0x3b, 0xc8, 0xff, 0x3e, 0xe2, 0xc5, 0xf3, 0xf9, 0xe0, 0xb1, + 0x43, 0x5c, 0xa5, 0xdc, 0xdb, 0xb3, 0xc8, 0x9e, 0xf4, 0x9e, 0x72, 0x1f, + 0xa2, 0x94, 0x21, 0x78, 0x93, 0xe4, 0x1e, 0x91, 0xaa, 0x06, 0x43, 0xd4, + 0xbb, 0x7b, 0xf8, 0x4b, 0x17, 0xdb, 0xff, 0x06, 0xb1, 0x5a, 0x3c, 0x00, + 0xc7, 0x2f, 0xff, 0xc5, 0x8f, 0xc7, 0xd4, 0x8b, 0xd1, 0x4e, 0x0d, 0x62, + 0xa5, 0x79, 0x65, 0xe7, 0x36, 0x9a, 0x30, 0x81, 0x11, 0xdf, 0x83, 0x83, + 0x83, 0x8b, 0x17, 0xb2, 0x65, 0x62, 0xf8, 0xa0, 0xe7, 0x58, 0xbf, 0x07, + 0xc0, 0xb3, 0xeb, 0x15, 0xb1, 0xf4, 0x30, 0xdf, 0x08, 0xaf, 0xe0, 0x75, + 0x79, 0xf5, 0xb2, 0xc5, 0x0d, 0x1e, 0x9a, 0x84, 0x91, 0x17, 0xdf, 0xc4, + 0x60, 0x7c, 0x9c, 0x58, 0xbf, 0xbf, 0xe3, 0x5f, 0xbe, 0x2c, 0x5f, 0x4f, + 0x9b, 0xeb, 0x17, 0x73, 0x65, 0x8b, 0xcc, 0x77, 0x58, 0xad, 0x8f, 0x5c, + 0x64, 0x5a, 0x19, 0xbe, 0xf4, 0xf6, 0x12, 0xc5, 0x4b, 0x2c, 0x03, 0x65, + 0x1c, 0x86, 0x6e, 0xe4, 0x1f, 0x9f, 0x43, 0x68, 0xcf, 0xc0, 0x68, 0x45, + 0xe2, 0x84, 0x40, 0x46, 0x17, 0xe7, 0xe7, 0x32, 0x3d, 0x62, 0xff, 0xc3, + 0x99, 0x3e, 0x70, 0x4d, 0xda, 0xc5, 0xff, 0xf0, 0x83, 0xf1, 0x48, 0x1b, + 0xc0, 0x0c, 0xa0, 0xb1, 0x50, 0x45, 0xe3, 0x95, 0xf8, 0xfe, 0xfd, 0xb1, + 0x80, 0xec, 0x0b, 0x17, 0xfb, 0xdc, 0x14, 0x27, 0x69, 0x58, 0xbf, 0x7b, + 0xd8, 0x47, 0x58, 0xbf, 0xf9, 0x81, 0x3f, 0xc1, 0xcf, 0x24, 0x0b, 0x17, + 0xff, 0xf6, 0x73, 0x0b, 0x53, 0x07, 0x3e, 0x77, 0x08, 0x84, 0xb1, 0x7f, + 0xf7, 0x70, 0xf7, 0xd8, 0xf9, 0xbc, 0xf1, 0x62, 0xa5, 0x14, 0x62, 0x5c, + 0xbf, 0xf7, 0xbb, 0xdd, 0xc8, 0x30, 0x34, 0x16, 0x2f, 0xbc, 0xf2, 0x6a, + 0xc5, 0xd2, 0x11, 0x87, 0xcb, 0xda, 0x15, 0x4a, 0xa2, 0x7c, 0x2d, 0x73, + 0x56, 0x28, 0x28, 0x73, 0x7a, 0x10, 0xf7, 0xff, 0x0b, 0x6f, 0xb8, 0xf2, + 0x37, 0x8d, 0xfa, 0xe7, 0x5a, 0xb1, 0x6f, 0xac, 0x51, 0x1f, 0x70, 0x4b, + 0x97, 0xff, 0x16, 0xe1, 0xe9, 0x80, 0xfe, 0xfc, 0xac, 0x5f, 0xb8, 0xc6, + 0xfd, 0xd6, 0x2a, 0x4f, 0xbd, 0x91, 0xaf, 0x9b, 0x66, 0x25, 0x8b, 0xf7, + 0xbf, 0x80, 0x65, 0x8a, 0xec, 0xf2, 0x88, 0x8a, 0xfe, 0x39, 0x9f, 0xc0, + 0x32, 0xc5, 0xff, 0xc3, 0xd3, 0x6e, 0x1f, 0x46, 0x62, 0xdd, 0x62, 0xfd, + 0xcc, 0xc2, 0xd9, 0x62, 0x8d, 0x3f, 0x10, 0x92, 0x6f, 0x83, 0xfb, 0xf9, + 0x62, 0xa5, 0x30, 0xac, 0x22, 0x78, 0x50, 0x70, 0x92, 0xfe, 0xd6, 0x10, + 0xa7, 0x4b, 0x17, 0xff, 0x0f, 0xf3, 0xbf, 0xdc, 0x73, 0x84, 0xb1, 0x71, + 0x90, 0x58, 0xa3, 0x9e, 0xe8, 0x11, 0x2f, 0xf9, 0xb9, 0x8e, 0x4d, 0xee, + 0x2c, 0x5f, 0xe1, 0x30, 0x7c, 0x09, 0xbb, 0x58, 0xbd, 0x39, 0xd9, 0xa7, + 0xdc, 0x46, 0xf7, 0xd3, 0xc9, 0xe8, 0xb1, 0x7f, 0xff, 0xa7, 0x37, 0xfb, + 0xf4, 0x9e, 0x13, 0x1b, 0xc1, 0xbc, 0x4b, 0x17, 0xfe, 0x26, 0xf4, 0x24, + 0xd6, 0x0b, 0xcb, 0x17, 0xff, 0xf8, 0x30, 0xe2, 0xfb, 0xc5, 0x3e, 0x6e, + 0x67, 0xfe, 0xe7, 0x58, 0xa9, 0x45, 0x2b, 0x20, 0x54, 0x6c, 0xaa, 0x6e, + 0x61, 0x15, 0xa8, 0x48, 0x7c, 0xcc, 0x89, 0x05, 0x18, 0x4d, 0xe3, 0x1b, + 0x75, 0x8a, 0x96, 0x44, 0x6c, 0x25, 0x2b, 0x6f, 0x0c, 0xc0, 0x42, 0x47, + 0x91, 0xba, 0x7a, 0x56, 0xdf, 0x53, 0x65, 0xf8, 0x33, 0x9d, 0xe3, 0xd6, + 0x2f, 0xd8, 0x5e, 0x73, 0xac, 0x54, 0x0f, 0x50, 0xe5, 0xb6, 0xe2, 0xc5, + 0xcd, 0xc5, 0x8a, 0xc3, 0x52, 0xc2, 0x57, 0xb9, 0x30, 0x58, 0xbe, 0x9d, + 0x4e, 0xeb, 0x15, 0x87, 0x80, 0x43, 0xb7, 0xbe, 0xe1, 0xac, 0x58, 0x35, + 0x8a, 0x58, 0xa1, 0x17, 0xe1, 0x89, 0xd6, 0x8f, 0x78, 0x23, 0xdb, 0xdf, + 0x10, 0xd6, 0x2f, 0xe8, 0x73, 0xcf, 0x3d, 0xac, 0x5f, 0x1c, 0x39, 0x25, + 0x8b, 0xfb, 0x8c, 0x4f, 0xdf, 0x16, 0x2f, 0x9c, 0x78, 0x75, 0x8b, 0xe6, + 0x62, 0x02, 0xc5, 0xf6, 0xdf, 0x78, 0xf5, 0x8b, 0xbd, 0xe5, 0x8b, 0x05, + 0x28, 0x82, 0x34, 0x89, 0x88, 0x44, 0x4f, 0x4b, 0x17, 0x08, 0xeb, 0x17, + 0xf8, 0x26, 0x8b, 0x21, 0x31, 0xeb, 0x17, 0xee, 0xa1, 0x44, 0xf1, 0x2c, + 0x54, 0xa6, 0xfa, 0xf0, 0xb0, 0x89, 0x0f, 0xe1, 0x9c, 0x18, 0x11, 0xc5, + 0xff, 0x0f, 0x53, 0xe7, 0xdd, 0xc6, 0xb1, 0x7f, 0x8a, 0x7d, 0xe9, 0x23, + 0x56, 0x2b, 0x0f, 0xb5, 0x8e, 0xaf, 0xf9, 0xcf, 0xfe, 0xda, 0x3f, 0xdc, + 0x58, 0xbf, 0xb7, 0x6f, 0xff, 0x06, 0xb1, 0x52, 0x7d, 0xa2, 0x3e, 0xbf, + 0xa1, 0x25, 0xb1, 0xf1, 0x62, 0xe0, 0xbc, 0xb1, 0x58, 0x78, 0xe2, 0x2e, + 0xbc, 0x13, 0x04, 0xb1, 0x60, 0x2c, 0x54, 0x9b, 0x10, 0xc7, 0xef, 0xbd, + 0xc1, 0x0d, 0x62, 0xfc, 0xfd, 0xc3, 0xdb, 0xac, 0x5f, 0xe9, 0x6d, 0x7c, + 0x26, 0x1a, 0x45, 0xc1, 0x04, 0x91, 0x43, 0x3c, 0xe0, 0x8d, 0x2e, 0x78, + 0xf4, 0x88, 0xc3, 0x47, 0x40, 0x46, 0x4f, 0xa1, 0x39, 0x7e, 0xdd, 0xf9, + 0xf7, 0x58, 0xbf, 0xe9, 0x07, 0xe7, 0x84, 0xd1, 0x2c, 0x5f, 0xd3, 0x25, + 0x20, 0x95, 0x8a, 0xed, 0x11, 0xa4, 0x53, 0xe3, 0x9b, 0xc7, 0x93, 0xac, + 0x5e, 0x80, 0xbc, 0xb1, 0x52, 0x6e, 0xc4, 0x3b, 0x52, 0xbf, 0x2d, 0xb2, + 0x58, 0xd7, 0xf1, 0xfb, 0x72, 0x3e, 0xc7, 0x9c, 0xbe, 0x28, 0xe8, 0x35, + 0x0c, 0x93, 0xc2, 0x37, 0xed, 0x00, 0x52, 0x22, 0x1e, 0x43, 0xb7, 0xd0, + 0xb5, 0x8e, 0x6b, 0xbf, 0xff, 0xfb, 0xae, 0xfa, 0x6d, 0xc8, 0xd7, 0xb4, + 0x69, 0xd6, 0x6a, 0x22, 0xf6, 0x0c, 0xc3, 0x3f, 0x1c, 0xb1, 0x7c, 0x43, + 0xfb, 0x2c, 0x5d, 0x07, 0x58, 0xbd, 0x8d, 0x1e, 0xb1, 0x7b, 0x58, 0x35, + 0x8b, 0xcd, 0x3e, 0x58, 0xa8, 0xd1, 0x32, 0x8c, 0x84, 0xbb, 0x91, 0x68, + 0x5f, 0xa0, 0xff, 0x50, 0xed, 0xef, 0xce, 0x96, 0x2e, 0xf7, 0x16, 0x2f, + 0xc7, 0xd6, 0xa7, 0x65, 0x8b, 0x80, 0x52, 0x78, 0x58, 0x31, 0x7f, 0x8b, + 0x3c, 0x53, 0xdc, 0x16, 0x2f, 0xa4, 0x85, 0xc5, 0x8a, 0xc4, 0x40, 0x31, + 0x5f, 0x0c, 0xef, 0xdd, 0xf2, 0x74, 0x6a, 0xc5, 0xc1, 0x71, 0x75, 0x88, + 0x16, 0xc5, 0x8b, 0xe8, 0xb3, 0x37, 0x58, 0xac, 0x3d, 0xbf, 0x13, 0x04, + 0x23, 0x5b, 0x22, 0xd7, 0xb8, 0x43, 0x5f, 0x77, 0x0e, 0xb7, 0xb5, 0x8b, + 0xdc, 0x32, 0x0b, 0x17, 0xff, 0xe1, 0x89, 0xb7, 0xfb, 0x72, 0x63, 0xf3, + 0x08, 0xd5, 0x8a, 0xec, 0xfe, 0x34, 0x3f, 0x6f, 0xac, 0x5f, 0xfb, 0x83, + 0x29, 0x1f, 0xe7, 0xdc, 0x58, 0xa9, 0x3d, 0x1e, 0x09, 0x54, 0xa6, 0xc5, + 0x85, 0x4d, 0x0a, 0x31, 0x3a, 0x5e, 0xff, 0x50, 0xd6, 0x2f, 0xff, 0xfb, + 0x02, 0xc8, 0x7f, 0x1e, 0x1c, 0xef, 0x8f, 0xe7, 0x2d, 0x96, 0x2e, 0xfc, + 0x4b, 0x17, 0xfb, 0xee, 0xd0, 0xf3, 0xec, 0xb1, 0x7c, 0xe5, 0xe9, 0x58, + 0xbf, 0xe7, 0xd3, 0x03, 0xab, 0xd9, 0xf5, 0x8a, 0xf9, 0xee, 0xf8, 0x86, + 0xff, 0x9c, 0x22, 0xcf, 0x38, 0x80, 0xb1, 0x7c, 0xe4, 0x1f, 0x16, 0x2f, + 0x8a, 0x0e, 0x75, 0x8b, 0x7a, 0x4f, 0x15, 0x88, 0xef, 0xc7, 0x78, 0x9c, + 0x25, 0x8a, 0x93, 0xd0, 0x72, 0x6b, 0xed, 0x0e, 0x76, 0x58, 0xb8, 0xf1, + 0xcb, 0x14, 0xe6, 0xfd, 0x89, 0x2f, 0xe2, 0xcf, 0x72, 0x40, 0xb1, 0x7e, + 0xfb, 0x1d, 0xf8, 0xb1, 0x7e, 0xf7, 0x09, 0xcd, 0x58, 0xba, 0x76, 0x58, + 0xa8, 0x1f, 0x4e, 0x8a, 0x3c, 0x53, 0x5f, 0x46, 0x2b, 0x42, 0x5a, 0xe7, + 0x09, 0x62, 0xe0, 0xf6, 0x58, 0xbd, 0xdf, 0x30, 0x8d, 0x97, 0x86, 0x2f, + 0xc1, 0x6b, 0x4c, 0x12, 0xc5, 0xfb, 0xef, 0x25, 0xb2, 0xc5, 0xf6, 0x67, + 0x61, 0x2c, 0x5d, 0x27, 0x58, 0xbf, 0xff, 0xfd, 0xc0, 0xf5, 0x3f, 0x9c, + 0x3b, 0x94, 0x25, 0xfe, 0xfb, 0x93, 0xf4, 0x58, 0xbf, 0xff, 0xdf, 0xc2, + 0x90, 0x70, 0x4d, 0x9b, 0xc9, 0x09, 0xa0, 0xb1, 0x4e, 0x8d, 0x7f, 0x3c, + 0x5d, 0x9f, 0x1a, 0x62, 0x1c, 0x87, 0x75, 0x69, 0x36, 0x8f, 0x46, 0x69, + 0x46, 0xa7, 0x74, 0x14, 0x72, 0x17, 0xba, 0xbd, 0xf5, 0x8a, 0x95, 0x4c, + 0x98, 0x64, 0xd1, 0xf2, 0x84, 0x59, 0x7e, 0x37, 0x35, 0x9e, 0x58, 0xbf, + 0xcd, 0xe2, 0xcd, 0x83, 0x82, 0xc5, 0xff, 0xd8, 0x6e, 0x0b, 0x4c, 0x39, + 0xfc, 0xac, 0x53, 0xa2, 0x88, 0x8a, 0x78, 0x6b, 0x70, 0x38, 0xb1, 0x7f, + 0xe2, 0x60, 0xb7, 0xfb, 0xf4, 0x7d, 0x2c, 0x5e, 0x1f, 0xe5, 0x62, 0x86, + 0x7b, 0xe1, 0xa1, 0x57, 0x5a, 0xcb, 0x34, 0x98, 0x6f, 0xc2, 0x52, 0x28, + 0xd0, 0x30, 0x87, 0x76, 0x8e, 0xc6, 0x5e, 0x12, 0x31, 0xe4, 0x5a, 0x86, + 0x77, 0xd7, 0xda, 0x1c, 0x85, 0x2a, 0xf7, 0x90, 0xe5, 0xf1, 0x70, 0x9d, + 0xee, 0xe9, 0x1a, 0x2c, 0x5e, 0x89, 0xb4, 0xb1, 0x7f, 0xde, 0xfe, 0x00, + 0x53, 0xd8, 0x6b, 0x17, 0xff, 0xfe, 0x67, 0xf4, 0xfc, 0xb3, 0xdf, 0x70, + 0xe1, 0x3d, 0x1c, 0x80, 0xb1, 0x7e, 0xdf, 0x0f, 0x3c, 0x58, 0xbc, 0x22, + 0x1a, 0xc5, 0xff, 0xd8, 0xfb, 0x1e, 0x59, 0xe0, 0xdc, 0x58, 0xbf, 0xcc, + 0x00, 0xe3, 0x98, 0x80, 0xb1, 0x5f, 0x3f, 0xa2, 0x43, 0xbf, 0x9f, 0xdc, + 0x1e, 0x12, 0xc5, 0xe9, 0xee, 0x0b, 0x17, 0xf3, 0xfb, 0x98, 0x6c, 0x50, + 0x3c, 0xbd, 0x16, 0xdf, 0xfe, 0xcf, 0xe1, 0x7b, 0x99, 0xd0, 0xa7, 0xb5, + 0x8a, 0x95, 0x50, 0x7d, 0x8f, 0x7c, 0xf1, 0x9b, 0x00, 0x53, 0xe8, 0x4b, + 0xf4, 0x6c, 0x09, 0x1a, 0xe7, 0xed, 0x62, 0xf4, 0x97, 0x96, 0x2e, 0x7d, + 0x2c, 0x56, 0xc6, 0xcf, 0x07, 0x2f, 0xdf, 0xef, 0x05, 0x12, 0xc5, 0xfe, + 0x83, 0x9f, 0xfd, 0xb4, 0x7a, 0xc5, 0xfd, 0x23, 0x8e, 0xcd, 0x4a, 0xc5, + 0xfc, 0x58, 0x3f, 0xcf, 0x45, 0x8a, 0xf9, 0xef, 0xf5, 0x18, 0x5f, 0x36, + 0xa6, 0x0b, 0x17, 0xdd, 0xe0, 0xa2, 0x58, 0xbf, 0xf0, 0xa7, 0x46, 0xb0, + 0x7e, 0x78, 0x2c, 0x5f, 0xf3, 0x76, 0x67, 0x7c, 0xc2, 0x35, 0x62, 0xf6, + 0xed, 0xba, 0xc5, 0x6c, 0x9f, 0x60, 0xc8, 0x7b, 0x2b, 0x78, 0x4b, 0x9c, + 0x97, 0xe4, 0x44, 0x4b, 0xe4, 0x11, 0x1e, 0xdf, 0x7e, 0x3d, 0xce, 0xb1, + 0x78, 0xa4, 0x0b, 0x14, 0x61, 0xe1, 0x70, 0x9a, 0xfe, 0xf3, 0x1c, 0xf2, + 0x75, 0x8b, 0x1f, 0x0f, 0x47, 0xb2, 0x3b, 0xfd, 0xdf, 0xf2, 0x2f, 0xbe, + 0x96, 0x2f, 0xff, 0xe2, 0x6f, 0x31, 0xe0, 0xfe, 0xce, 0xfd, 0xf0, 0xf8, + 0xb1, 0x52, 0x8b, 0xbc, 0x28, 0x63, 0x6b, 0xf3, 0x16, 0x77, 0x2b, 0x17, + 0xfb, 0xf2, 0x7d, 0xfe, 0xf1, 0x2c, 0x5a, 0x63, 0x63, 0xdd, 0xec, 0x9e, + 0xf9, 0xb9, 0xdb, 0x2c, 0x5f, 0xf4, 0x39, 0xf6, 0xde, 0x48, 0x6b, 0x16, + 0xf2, 0xc5, 0xe0, 0x7b, 0xeb, 0x17, 0xe3, 0x3c, 0x6b, 0xf1, 0x62, 0xa0, + 0x8b, 0x8e, 0xc8, 0xd8, 0xe8, 0x02, 0x5e, 0x1e, 0xbf, 0xff, 0xf6, 0xb0, + 0x7c, 0x68, 0xf7, 0xef, 0xec, 0xf0, 0x91, 0xfc, 0x46, 0xac, 0x58, 0x0b, + 0x14, 0xc8, 0xcd, 0xe2, 0x50, 0x6e, 0x37, 0x01, 0x96, 0x2f, 0xb7, 0xc6, + 0x3a, 0xc5, 0x49, 0xba, 0x71, 0x7b, 0x04, 0xb1, 0x7b, 0x00, 0xcb, 0x16, + 0xe3, 0x9a, 0xff, 0x89, 0xd4, 0x6c, 0xca, 0x3f, 0x99, 0x54, 0x50, 0x7a, + 0xc9, 0x46, 0xef, 0x1e, 0x96, 0xa1, 0x14, 0xd1, 0xd9, 0x13, 0x57, 0x13, + 0xaf, 0x71, 0xf7, 0x58, 0xbe, 0xc9, 0x17, 0x5e, 0xb1, 0x7b, 0x47, 0x8e, + 0x58, 0xbf, 0x0f, 0x9c, 0x73, 0xac, 0x56, 0xc7, 0x94, 0x44, 0x37, 0xef, + 0x36, 0xcc, 0x4b, 0x17, 0xed, 0xdb, 0x6c, 0x09, 0x62, 0xfd, 0x3a, 0x1e, + 0x12, 0xc5, 0x0d, 0x30, 0xdc, 0x71, 0xec, 0x88, 0x8a, 0x3c, 0x57, 0x7e, + 0x98, 0xe7, 0xf8, 0x96, 0x2e, 0xcd, 0xd6, 0x2e, 0x1e, 0xeb, 0x17, 0xc4, + 0x58, 0x6a, 0xc5, 0x61, 0xbb, 0x10, 0xcd, 0x80, 0xb1, 0x7b, 0x4f, 0xf5, + 0x8a, 0x82, 0x28, 0xb7, 0x53, 0x72, 0x02, 0x12, 0xbe, 0xfe, 0x01, 0x96, + 0x2f, 0xba, 0xbc, 0xe6, 0xac, 0x5d, 0x21, 0xac, 0x54, 0x47, 0xc3, 0xc2, + 0x28, 0xe2, 0x7b, 0xff, 0xa4, 0x13, 0xf3, 0x93, 0x1b, 0xf7, 0x58, 0xb4, + 0x6c, 0xb1, 0x7f, 0xec, 0xd6, 0x78, 0x3c, 0xfb, 0x01, 0x62, 0xff, 0xfb, + 0x08, 0xdc, 0xd6, 0xd2, 0x16, 0x7f, 0x09, 0x62, 0xfd, 0x24, 0x13, 0x76, + 0xb1, 0x58, 0x7f, 0x3f, 0x50, 0xb0, 0x4b, 0x17, 0xfe, 0x28, 0xa7, 0x0b, + 0x6c, 0xef, 0xcb, 0x17, 0xfe, 0x26, 0xf8, 0x7e, 0xf3, 0x43, 0x8b, 0x17, + 0x6a, 0x56, 0x2d, 0xc1, 0x9e, 0xb9, 0xd0, 0x2f, 0xf8, 0xb3, 0xa3, 0x43, + 0x8e, 0x35, 0x8a, 0xf1, 0xf1, 0x06, 0x51, 0x50, 0x54, 0x10, 0x38, 0x5c, + 0x6e, 0x42, 0xc2, 0x65, 0x0f, 0x9b, 0xfd, 0xaf, 0x36, 0x9a, 0x3a, 0x56, + 0x2f, 0x31, 0x01, 0x62, 0x8d, 0x3d, 0x2d, 0xcd, 0xaf, 0xde, 0xe7, 0x9f, + 0x65, 0x8a, 0x93, 0xce, 0x62, 0x4b, 0xfe, 0xfc, 0xef, 0x20, 0x62, 0x02, + 0xc5, 0xff, 0xd2, 0xe5, 0x3e, 0x7d, 0x3f, 0x84, 0xb1, 0x7f, 0x00, 0xcc, + 0xe3, 0x12, 0xc5, 0xff, 0xc2, 0x92, 0x63, 0x62, 0x29, 0x07, 0x16, 0x28, + 0x68, 0xee, 0xf9, 0xc9, 0x21, 0x78, 0xba, 0xfd, 0xd6, 0x8d, 0xcb, 0x75, + 0x8a, 0x73, 0xea, 0x63, 0xcb, 0xe0, 0x9a, 0x4e, 0xb1, 0x7f, 0x70, 0x47, + 0x9c, 0x1a, 0xc5, 0xf9, 0xb9, 0xb3, 0xe9, 0x62, 0xfb, 0x4e, 0x2d, 0x97, + 0x27, 0xa9, 0x7b, 0x71, 0x6c, 0xb9, 0x3d, 0x4b, 0xff, 0x63, 0xf4, 0xc2, + 0xc1, 0xb4, 0x17, 0x27, 0xa9, 0x7e, 0x62, 0xee, 0x11, 0x83, 0x45, 0x4f, + 0x0c, 0x42, 0x2d, 0xb9, 0xba, 0x96, 0x28, 0x69, 0x9e, 0x9e, 0x1a, 0x44, + 0xa3, 0x79, 0xcf, 0x2b, 0x17, 0xfb, 0x68, 0xce, 0x69, 0xe7, 0xcb, 0x17, + 0x71, 0xd6, 0x2f, 0x33, 0x12, 0xc5, 0xe7, 0xf8, 0x96, 0x2c, 0x6f, 0x0f, + 0x3f, 0xc2, 0xf1, 0xc3, 0x77, 0x88, 0x5b, 0x2c, 0x53, 0x1e, 0xbf, 0x8e, + 0x6b, 0x15, 0x5d, 0xbc, 0x6d, 0x7a, 0x35, 0x61, 0xc2, 0x86, 0xf5, 0x46, + 0x8c, 0xb3, 0x39, 0x8c, 0xac, 0x69, 0x59, 0x0c, 0xd7, 0x84, 0xee, 0x8c, + 0xce, 0x88, 0xd2, 0x87, 0xca, 0x1e, 0xbc, 0x8d, 0xe3, 0xc4, 0x02, 0x95, + 0xbd, 0x60, 0x96, 0x2f, 0xdc, 0xfe, 0x85, 0xd1, 0x62, 0xff, 0xe2, 0xfb, + 0x70, 0xb0, 0xd3, 0x72, 0x3d, 0x62, 0xfe, 0x63, 0xfe, 0x70, 0x6b, 0x15, + 0x87, 0xea, 0x49, 0x17, 0x75, 0x91, 0xa2, 0xc5, 0xfa, 0x70, 0xbd, 0xc5, + 0x8b, 0xcf, 0x3a, 0x58, 0xb7, 0x96, 0x2a, 0x36, 0x3f, 0x73, 0x91, 0x7c, + 0x9f, 0xc3, 0x97, 0xff, 0x69, 0xcf, 0x31, 0xe5, 0x87, 0xee, 0x56, 0x2a, + 0x08, 0x88, 0x89, 0x06, 0xf9, 0xa1, 0x31, 0xeb, 0x17, 0x89, 0x86, 0xb1, + 0x7b, 0x9b, 0x32, 0xc5, 0x39, 0xba, 0x0c, 0x72, 0xff, 0x79, 0xf5, 0x3b, + 0xe7, 0x45, 0x8b, 0x8e, 0xeb, 0x17, 0xf4, 0x8d, 0xfa, 0x48, 0xd6, 0x2f, + 0xde, 0x92, 0x98, 0x96, 0x2a, 0x51, 0x49, 0xb1, 0xb0, 0xc5, 0xd8, 0xbe, + 0xfd, 0x87, 0xd3, 0x76, 0xb1, 0x5b, 0x27, 0x12, 0x35, 0xf2, 0x86, 0x2f, + 0x0f, 0x2f, 0xd0, 0xce, 0x93, 0x05, 0x8b, 0xed, 0x77, 0x21, 0x2c, 0x5e, + 0xcd, 0x4a, 0xc5, 0xfd, 0xa1, 0xe1, 0xa1, 0x9d, 0x62, 0xe6, 0x8f, 0x58, + 0xbd, 0xd3, 0x06, 0xb1, 0x7f, 0x3c, 0xfa, 0x06, 0x8d, 0x62, 0xfe, 0xf9, + 0x8d, 0x16, 0x7d, 0x62, 0xf1, 0x3e, 0xcb, 0x15, 0x05, 0xd0, 0x1d, 0xe1, + 0x43, 0xdc, 0x63, 0xef, 0x1d, 0x6e, 0x90, 0xce, 0x55, 0xf2, 0x56, 0x1c, + 0x23, 0x11, 0x0d, 0x04, 0x3e, 0x19, 0x7f, 0x51, 0x85, 0x82, 0x58, 0xbf, + 0xce, 0x14, 0xb8, 0xf0, 0xeb, 0x16, 0x7c, 0x3c, 0x68, 0x84, 0xed, 0xd1, + 0x62, 0xf3, 0xf7, 0x05, 0x8a, 0x73, 0x65, 0xf1, 0x4b, 0xc4, 0xd0, 0x58, + 0xb4, 0x24, 0xde, 0x61, 0x05, 0xff, 0x8a, 0x77, 0xfc, 0xf4, 0xd0, 0x7c, + 0x58, 0xbc, 0xda, 0xd9, 0x62, 0x96, 0x2c, 0x5b, 0x9a, 0xa8, 0x87, 0xaf, + 0xf4, 0x39, 0xdc, 0x30, 0x46, 0xac, 0x5f, 0xc2, 0x6f, 0xe3, 0xec, 0xb1, + 0x7d, 0x16, 0xa7, 0x65, 0x8a, 0x58, 0x63, 0x4b, 0x5b, 0x1f, 0x77, 0xd4, + 0xef, 0xe7, 0xef, 0x9f, 0xcd, 0xd6, 0x2f, 0xbf, 0x8f, 0x12, 0xc5, 0xec, + 0x91, 0xac, 0x5f, 0xd3, 0xd3, 0x3f, 0xf9, 0x58, 0xbf, 0x67, 0xb9, 0x91, + 0x2c, 0x7c, 0xd7, 0xdf, 0xff, 0xff, 0x67, 0x7c, 0x7c, 0x08, 0xcc, 0xee, + 0x1c, 0x7f, 0x71, 0xfb, 0x18, 0xc5, 0xb2, 0xc5, 0xff, 0xa7, 0x72, 0xc8, + 0xbe, 0x2d, 0x44, 0xb1, 0x7f, 0xfe, 0x7d, 0x73, 0xc6, 0xcf, 0x70, 0xe7, + 0x70, 0x93, 0x56, 0x29, 0x62, 0x9d, 0x32, 0xd2, 0x84, 0x27, 0x10, 0xba, + 0x96, 0xef, 0xf4, 0x91, 0xbd, 0x5e, 0xcf, 0xac, 0x5f, 0xfb, 0x3b, 0x35, + 0xb9, 0x84, 0xe6, 0xac, 0x5f, 0xff, 0x10, 0xcc, 0x0f, 0xcf, 0xc6, 0x72, + 0x14, 0x16, 0x2a, 0x51, 0x22, 0xe8, 0x17, 0xcd, 0xb7, 0xdd, 0x62, 0x86, + 0xb9, 0x63, 0x8d, 0xbd, 0x94, 0x3c, 0x29, 0x62, 0x23, 0xd1, 0x81, 0xc8, + 0xc9, 0x2f, 0xd1, 0xb3, 0x09, 0x13, 0xa4, 0x32, 0x23, 0x88, 0x6f, 0x0b, + 0x50, 0x58, 0xbf, 0xf1, 0xd8, 0x7a, 0x9f, 0x7f, 0x06, 0xb1, 0x7f, 0x37, + 0x80, 0x19, 0x41, 0x62, 0xfc, 0xde, 0x0e, 0x39, 0x96, 0x2f, 0xdb, 0x6f, + 0xf9, 0xd2, 0xc5, 0xfe, 0x66, 0x08, 0x0d, 0xee, 0x2c, 0x5c, 0x1f, 0x16, + 0x28, 0x67, 0x9b, 0xf3, 0x4b, 0xe1, 0x45, 0x3d, 0xac, 0x5e, 0xc7, 0x89, + 0x62, 0xff, 0xc3, 0x9f, 0x34, 0x33, 0xa3, 0x0d, 0x62, 0xe7, 0xd2, 0xc5, + 0xcf, 0xb2, 0xc6, 0xc5, 0xbd, 0xfa, 0x48, 0x84, 0x75, 0x8b, 0x43, 0xc7, + 0x9e, 0x19, 0x45, 0x18, 0xa9, 0x8e, 0x47, 0xb6, 0x3f, 0x81, 0x7e, 0x16, + 0x1a, 0xf1, 0xb9, 0x14, 0x44, 0xa7, 0x1d, 0x68, 0x53, 0x5d, 0xcc, 0x58, + 0xbf, 0xda, 0xd9, 0xf9, 0xfc, 0xe2, 0xc5, 0xdd, 0x7b, 0xac, 0x56, 0x1e, + 0x8f, 0x0d, 0x6f, 0xcf, 0x18, 0x10, 0x41, 0x24, 0x5f, 0xf8, 0xd6, 0xec, + 0xcf, 0xb1, 0xdf, 0x8b, 0x16, 0x98, 0x1f, 0x89, 0xcb, 0xee, 0xcf, 0xac, + 0x5d, 0x9d, 0x7a, 0xc5, 0xd8, 0x35, 0x8b, 0xf7, 0x80, 0x19, 0x41, 0x62, + 0x86, 0x7b, 0xa6, 0x8e, 0x30, 0xbd, 0xf9, 0xb5, 0xbc, 0xf9, 0x62, 0xe7, + 0xd2, 0xc5, 0x7c, 0xf0, 0x04, 0x53, 0x6d, 0xd6, 0x2e, 0x61, 0xac, 0x5f, + 0xda, 0x6e, 0x7d, 0xa0, 0xb1, 0x6e, 0xd6, 0x2e, 0x70, 0x96, 0x2e, 0x0c, + 0x0b, 0x15, 0x11, 0xb1, 0x00, 0xc5, 0xe8, 0x30, 0xd6, 0x2e, 0x08, 0x25, + 0x8a, 0x82, 0x38, 0xb0, 0x5f, 0x72, 0xe7, 0x44, 0xe1, 0x10, 0x43, 0xb7, + 0x06, 0x04, 0x88, 0xc3, 0xd7, 0xa6, 0x4d, 0xe7, 0xd1, 0xa6, 0x5f, 0xc2, + 0xee, 0x1e, 0x7e, 0xd6, 0x2f, 0xf6, 0x1d, 0xc7, 0xb0, 0xb8, 0xb1, 0x7f, + 0xff, 0x02, 0x3b, 0x35, 0x3e, 0x7d, 0xdc, 0x7b, 0x49, 0x4a, 0xc5, 0xec, + 0xef, 0xcb, 0x16, 0xc2, 0x3f, 0xce, 0x2f, 0x57, 0xd1, 0xaf, 0xc8, 0x58, + 0xdf, 0xf3, 0x8f, 0x0e, 0xf1, 0x38, 0x4b, 0x17, 0xff, 0xd2, 0xfd, 0x83, + 0x58, 0x39, 0xd3, 0xf6, 0x05, 0x8b, 0xe3, 0x7e, 0xd0, 0x58, 0xbd, 0x0f, + 0xc8, 0xcf, 0xd5, 0xd4, 0x6f, 0xff, 0xf7, 0xd9, 0xfd, 0x30, 0x10, 0xf0, + 0x3c, 0xd7, 0x85, 0xf5, 0x8b, 0x32, 0xc5, 0x49, 0xf9, 0xf1, 0x8a, 0xff, + 0xf3, 0x0f, 0x30, 0x8d, 0xe7, 0x30, 0x80, 0xb1, 0x7d, 0xf1, 0x31, 0xb2, + 0x9d, 0xf6, 0x42, 0xbf, 0x50, 0xa5, 0x39, 0x0d, 0xe2, 0x9f, 0xac, 0x5f, + 0xff, 0xd0, 0x6e, 0x72, 0x73, 0x61, 0x40, 0x7a, 0x26, 0x09, 0x62, 0xff, + 0xfc, 0xf0, 0x7f, 0x14, 0x80, 0x64, 0xdc, 0x84, 0x4b, 0x17, 0xfd, 0xed, + 0x0a, 0x1d, 0xc3, 0x3c, 0xb1, 0x7f, 0xef, 0xfd, 0xc7, 0xfc, 0x37, 0x06, + 0xb1, 0x7f, 0xd9, 0xcf, 0xb4, 0x07, 0xae, 0xbd, 0x62, 0x9d, 0x17, 0x6c, + 0x78, 0x48, 0x14, 0x35, 0x42, 0x86, 0xaf, 0x38, 0xe0, 0x17, 0x7a, 0x46, + 0x21, 0x7f, 0xbe, 0x7c, 0xe8, 0x59, 0xc5, 0x8b, 0xfb, 0x4d, 0x09, 0xd0, + 0x16, 0x2f, 0xff, 0xf7, 0xda, 0x1f, 0x96, 0xd7, 0x39, 0x9f, 0x7e, 0x0b, + 0x65, 0x8a, 0xd2, 0x24, 0x3e, 0x5d, 0x52, 0x8e, 0x8c, 0x86, 0x2d, 0xff, + 0xf6, 0xa5, 0xa1, 0xa9, 0xfb, 0x3e, 0xf8, 0x4b, 0x15, 0x29, 0xd8, 0x42, + 0x33, 0xc7, 0x26, 0xaf, 0xaf, 0x73, 0xf2, 0x30, 0x8f, 0x4e, 0xd5, 0x5f, + 0xc7, 0x68, 0x6d, 0x14, 0x72, 0xc5, 0xf1, 0xf7, 0x84, 0xac, 0x58, 0x6b, + 0x17, 0x47, 0xc1, 0x62, 0xb6, 0x35, 0xb0, 0x12, 0xbd, 0xf7, 0xe2, 0xc5, + 0xd9, 0x2b, 0x17, 0x49, 0x2c, 0x54, 0x71, 0xac, 0x0c, 0x5a, 0xa5, 0x12, + 0x10, 0x22, 0xf2, 0x4d, 0xfe, 0xce, 0x45, 0xf7, 0x0b, 0xcb, 0x17, 0xed, + 0xb3, 0x08, 0xd5, 0x8a, 0x93, 0xdf, 0x63, 0x6b, 0xf9, 0xcf, 0xbe, 0x16, + 0xeb, 0x17, 0xcd, 0xb7, 0x3e, 0xb1, 0x5a, 0x3d, 0x3e, 0x17, 0xd1, 0x8c, + 0xc0, 0x78, 0x3a, 0x0d, 0xbf, 0xb8, 0xe6, 0xde, 0x7c, 0x40, 0xe8, 0x2c, + 0x68, 0x50, 0xe1, 0xe4, 0x23, 0xbc, 0xe7, 0x6e, 0xb1, 0x62, 0xf3, 0x31, + 0xd6, 0x2f, 0x7d, 0xfc, 0xb1, 0x6e, 0x9d, 0x69, 0xe8, 0x7c, 0x5c, 0x31, + 0xcb, 0xfc, 0xc7, 0x79, 0x3e, 0x12, 0xc5, 0xfd, 0xf9, 0xd7, 0xb3, 0x75, + 0x8a, 0x19, 0xf0, 0x78, 0xc6, 0xfd, 0x08, 0xe7, 0xf8, 0x96, 0x2b, 0x0f, + 0x39, 0x88, 0xac, 0xcb, 0x17, 0x4f, 0x16, 0x28, 0xd3, 0x50, 0xc2, 0x37, + 0xd8, 0x42, 0x89, 0x62, 0xf9, 0xfa, 0x48, 0xd6, 0x2f, 0xff, 0xdc, 0x6f, + 0x70, 0xb3, 0x93, 0xd8, 0x3d, 0x9c, 0x58, 0xae, 0xd1, 0x3a, 0x72, 0x3f, + 0x12, 0x5f, 0xf6, 0xff, 0x76, 0xdf, 0x9e, 0x75, 0x8b, 0xdc, 0x0c, 0xeb, + 0x16, 0x61, 0x9e, 0xd7, 0x8e, 0xee, 0xd4, 0x4b, 0x16, 0x3a, 0xc5, 0xda, + 0x95, 0x8a, 0x93, 0xc2, 0x18, 0xce, 0x09, 0x54, 0x68, 0xe8, 0x1c, 0xa6, + 0x74, 0x52, 0x11, 0x88, 0x0e, 0x12, 0xb9, 0x39, 0xac, 0xf2, 0xc7, 0xf5, + 0x09, 0x43, 0xb4, 0x7e, 0x12, 0x4d, 0x4c, 0x2e, 0x04, 0x3d, 0x8a, 0x1d, + 0x7e, 0x48, 0x14, 0x2f, 0x82, 0x84, 0x5c, 0x73, 0x4d, 0xe8, 0xf6, 0x95, + 0x8b, 0xe6, 0x86, 0xa5, 0x62, 0xcc, 0xb1, 0x4e, 0x7a, 0x44, 0x3f, 0xc2, + 0x2b, 0xff, 0xff, 0xff, 0xfd, 0x1d, 0x87, 0x68, 0x3f, 0x01, 0x80, 0xfb, + 0x3c, 0x24, 0x7f, 0x11, 0xb2, 0xe4, 0xde, 0x98, 0x37, 0x4f, 0xb4, 0x16, + 0x2f, 0xdf, 0x7e, 0x99, 0xb2, 0xc5, 0x3a, 0x3a, 0x79, 0x0b, 0xeb, 0xff, + 0xe8, 0x9e, 0x4c, 0x10, 0x64, 0xc3, 0xfe, 0x79, 0x62, 0xff, 0x0b, 0xdf, + 0xcd, 0x3f, 0x16, 0x29, 0xd1, 0x0d, 0xf5, 0x2b, 0xfb, 0xee, 0x61, 0x00, + 0x4b, 0x17, 0xd9, 0x87, 0x95, 0x8b, 0x71, 0x62, 0xe6, 0x89, 0x62, 0xfd, + 0x87, 0x72, 0x02, 0xc5, 0x0c, 0xf4, 0x78, 0x24, 0x10, 0xc5, 0xc2, 0x95, + 0x8b, 0xfe, 0x92, 0x88, 0x5f, 0x6f, 0xca, 0xc5, 0xf9, 0x9e, 0x0e, 0x35, + 0x8b, 0xff, 0xe7, 0xe1, 0x67, 0x47, 0xf8, 0x8d, 0xc3, 0xba, 0xc5, 0xa7, + 0xe7, 0xf1, 0xe2, 0x7a, 0xd9, 0x1d, 0xe3, 0x17, 0x28, 0x58, 0xdf, 0x1e, + 0x7b, 0x82, 0xc5, 0xff, 0xb3, 0xa4, 0x8c, 0xb3, 0xd8, 0x05, 0x8b, 0xb0, + 0x96, 0x2d, 0x9d, 0x9e, 0xaf, 0x43, 0xfb, 0xf7, 0xfd, 0x30, 0x3a, 0xc5, + 0xc1, 0x81, 0x62, 0x9d, 0x1c, 0xba, 0x79, 0xf9, 0x50, 0x0a, 0x6e, 0xda, + 0x0b, 0x16, 0x89, 0x62, 0xa4, 0xd6, 0x06, 0x33, 0x79, 0xc8, 0x6b, 0x17, + 0xd3, 0xad, 0x84, 0xb1, 0x76, 0x0d, 0x62, 0xb6, 0x37, 0x64, 0x49, 0x7f, + 0xc7, 0xcf, 0x48, 0x04, 0xc0, 0x58, 0xbf, 0xf9, 0xc6, 0xde, 0x7e, 0x64, + 0x33, 0xeb, 0x17, 0x37, 0x52, 0xc5, 0xdd, 0xf9, 0x62, 0xfd, 0x9b, 0x1c, + 0x5f, 0x58, 0xac, 0x3c, 0x32, 0x19, 0xaf, 0xa3, 0x03, 0xc8, 0x7d, 0x4b, + 0xb7, 0xf6, 0x6a, 0x7d, 0xcc, 0x58, 0xbf, 0xfe, 0x6e, 0xe1, 0x30, 0xc1, + 0xf2, 0x61, 0x24, 0xb1, 0x7f, 0xf7, 0x26, 0x18, 0x3e, 0xac, 0x2c, 0x02, + 0xc5, 0x62, 0x3d, 0x5c, 0xcc, 0x8b, 0x7c, 0x9f, 0x7f, 0x71, 0xbe, 0xf2, + 0x05, 0x8b, 0xf1, 0x7b, 0x98, 0x4b, 0x17, 0xff, 0x76, 0x0d, 0x33, 0x77, + 0x0e, 0x06, 0x75, 0x8b, 0xf6, 0x7b, 0xd9, 0xb2, 0xc5, 0x80, 0xb1, 0x78, + 0x32, 0x81, 0x1b, 0xb0, 0xca, 0x6f, 0xff, 0xff, 0x61, 0xaf, 0xf9, 0x3e, + 0xd8, 0x16, 0x6b, 0x67, 0xe7, 0xf3, 0xd1, 0xd8, 0xb1, 0x7e, 0x62, 0xdc, + 0x33, 0xac, 0x53, 0xa7, 0x0a, 0xc4, 0xe0, 0x84, 0x27, 0x0c, 0xfc, 0xfb, + 0x7e, 0xd3, 0x74, 0xea, 0x65, 0x8a, 0x96, 0x50, 0xac, 0x23, 0x16, 0x1c, + 0x2b, 0x4d, 0x22, 0xdc, 0xbf, 0xb7, 0x27, 0x8c, 0x7f, 0x51, 0x8d, 0x1d, + 0xa3, 0xe4, 0x2c, 0xae, 0x02, 0x12, 0x8f, 0xbb, 0x87, 0x5e, 0x8e, 0xcb, + 0xa2, 0x75, 0xfb, 0xac, 0x8d, 0xa3, 0x78, 0xef, 0x2c, 0x5f, 0xed, 0xbc, 0x7f, 0xe0, 0x19, 0x62, 0xfb, 0x09, 0xcd, 0x58, 0xa8, 0x22, 0x4c, 0xe7, - 0x9d, 0x8d, 0x6d, 0xdc, 0xb1, 0x7f, 0xc6, 0x48, 0xdc, 0x9b, 0x46, 0xac, + 0x9d, 0x0d, 0x6d, 0xd4, 0xb1, 0x7f, 0xc6, 0x48, 0xdc, 0x9b, 0x46, 0xac, 0x56, 0xe7, 0x9e, 0x01, 0x5b, 0xdc, 0x87, 0xd6, 0x28, 0x8f, 0x07, 0xc4, 0x77, 0xfe, 0x6f, 0xc6, 0x61, 0xd9, 0x8a, 0x0b, 0x17, 0xff, 0xee, 0x13, 0x73, 0xf9, 0x0c, 0xfb, 0xeb, 0xec, 0xb1, 0x7f, 0x8d, 0x2c, 0xff, 0xe7, 0xcb, 0x17, 0x31, 0xab, 0x14, 0xe7, 0x98, 0xc6, 0x97, 0xd9, 0xe7, 0xe2, - 0xc5, 0x18, 0x99, 0x17, 0x48, 0x1a, 0x85, 0x01, 0x10, 0x5f, 0x67, 0x5b, - 0x76, 0x58, 0xbf, 0x82, 0xe4, 0xfa, 0x46, 0xb1, 0x7b, 0xd1, 0x1d, 0x62, + 0xc5, 0x18, 0x99, 0x17, 0x68, 0x1a, 0x85, 0x01, 0x10, 0x5f, 0x67, 0x7b, + 0x74, 0x58, 0xbf, 0x82, 0xe4, 0xfa, 0x46, 0xb1, 0x7b, 0xd1, 0x1d, 0x62, 0xa4, 0xf3, 0xb0, 0xbe, 0xff, 0x70, 0x6c, 0x79, 0xf6, 0xeb, 0x17, 0xf8, - 0x78, 0x42, 0x86, 0x71, 0x62, 0xba, 0x3e, 0x82, 0x35, 0xbd, 0xc1, 0x01, - 0x62, 0xd8, 0xb1, 0x5d, 0x1a, 0xfe, 0xc3, 0xd7, 0x16, 0xeb, 0x15, 0x26, + 0x78, 0x42, 0x86, 0x71, 0x62, 0xbb, 0x3e, 0x82, 0x35, 0xbd, 0xc1, 0x01, + 0x62, 0xd8, 0xb1, 0x5d, 0x9a, 0xfe, 0x83, 0xd7, 0x16, 0xeb, 0x15, 0x26, 0xf1, 0x89, 0x2f, 0xf0, 0x7e, 0x2c, 0xd9, 0xf4, 0xb1, 0x7a, 0x5c, 0x6b, - 0x17, 0xff, 0xdb, 0x8d, 0xcb, 0x6e, 0x7b, 0xad, 0xdf, 0xf1, 0x2c, 0x5c, - 0x3e, 0x96, 0x2e, 0x2d, 0xf0, 0xfb, 0xcd, 0x56, 0xbe, 0x6e, 0xec, 0x25, - 0x8b, 0xcf, 0xc7, 0x58, 0xa6, 0x3e, 0xee, 0x17, 0x78, 0x92, 0xfe, 0xcd, - 0xe7, 0xf2, 0x75, 0x8a, 0x95, 0xd7, 0xcc, 0x86, 0x13, 0xc6, 0x87, 0xa4, - 0x43, 0xba, 0xb4, 0x22, 0x01, 0x08, 0xd2, 0x1f, 0xe1, 0xa8, 0xa1, 0xf2, - 0x11, 0x75, 0xff, 0xa4, 0x30, 0x0a, 0x10, 0x6f, 0x89, 0x62, 0xf6, 0x61, - 0xab, 0x17, 0xd0, 0x90, 0x71, 0x62, 0x86, 0x78, 0x18, 0x3b, 0x5b, 0x22, - 0x8b, 0xa8, 0x40, 0xdf, 0x78, 0x4c, 0x4b, 0x17, 0xff, 0xe3, 0xc5, 0xa9, - 0xfe, 0x7a, 0x60, 0xdd, 0x87, 0x2b, 0x17, 0x66, 0x96, 0x2f, 0xdc, 0x76, - 0x63, 0x56, 0x28, 0xc3, 0x7f, 0xd0, 0xbd, 0xfe, 0x92, 0x31, 0xfd, 0xf9, - 0x58, 0xbf, 0x0f, 0xf2, 0x01, 0x2c, 0x5d, 0x30, 0x58, 0xb6, 0xa0, 0x78, - 0x1a, 0x29, 0xbd, 0xf6, 0x89, 0x62, 0xff, 0xfc, 0xdc, 0xe6, 0x36, 0xfe, - 0xfb, 0x1f, 0x59, 0xb2, 0xc5, 0xfe, 0x71, 0xbf, 0x7f, 0x24, 0xeb, 0x15, - 0x2a, 0x80, 0x36, 0x84, 0xb8, 0xc8, 0xf1, 0xcf, 0x72, 0x8d, 0x0f, 0x7d, - 0x5e, 0xff, 0xf9, 0xcd, 0xc7, 0x3e, 0xa4, 0x5d, 0xfb, 0x7f, 0x8b, 0x17, - 0xf9, 0xa1, 0x83, 0xd7, 0x38, 0xb1, 0x7b, 0x03, 0x1a, 0xc5, 0xff, 0x66, - 0xdf, 0xc8, 0xbe, 0xe6, 0xac, 0x5f, 0xd9, 0xd0, 0x33, 0xdc, 0x58, 0xbf, - 0x49, 0x75, 0x0e, 0x2c, 0x7c, 0xd7, 0xd4, 0xa3, 0x08, 0x87, 0x84, 0xd7, - 0x7f, 0xfd, 0x39, 0xcc, 0x2f, 0x7f, 0x06, 0x2f, 0x71, 0x62, 0xe9, 0xfa, - 0xc5, 0x11, 0xf3, 0x71, 0x3e, 0xff, 0xfd, 0x9b, 0xb7, 0x8c, 0xcd, 0x6c, - 0x7c, 0xe7, 0x25, 0x62, 0xa0, 0x7f, 0x3e, 0x21, 0xbc, 0x79, 0x82, 0xc5, - 0xfb, 0x9f, 0xfc, 0x92, 0xc5, 0xfc, 0xfe, 0x6f, 0x85, 0x1e, 0xb1, 0x7f, - 0xff, 0xff, 0xf6, 0xb0, 0x1e, 0xfb, 0x1c, 0xce, 0x09, 0xe0, 0x23, 0x7e, - 0xd0, 0x33, 0xc2, 0xf3, 0xfb, 0x9f, 0x75, 0x8b, 0xe7, 0x37, 0x06, 0xb1, - 0x78, 0xdc, 0x1a, 0xc5, 0xd8, 0x73, 0x0f, 0x05, 0xc8, 0xeb, 0x64, 0xe2, - 0xb0, 0x74, 0xd2, 0x8d, 0x19, 0x7a, 0x1c, 0xd7, 0xf4, 0xed, 0x1d, 0x9a, - 0x95, 0x8b, 0xfa, 0x2f, 0xe7, 0x18, 0x96, 0x2f, 0xee, 0xa0, 0x1f, 0x27, - 0x16, 0x2b, 0x0f, 0x79, 0xcb, 0xaf, 0x01, 0xfe, 0xb1, 0x7f, 0xe1, 0xe7, - 0x50, 0xe7, 0xb8, 0xc0, 0x58, 0xad, 0x1f, 0xf0, 0x08, 0x04, 0x3b, 0x79, - 0xe3, 0xa5, 0x62, 0xfe, 0xe7, 0xda, 0x10, 0xfa, 0xc5, 0x31, 0xe7, 0x08, - 0x7e, 0xfb, 0x9c, 0xc0, 0x96, 0x2f, 0xfc, 0x1f, 0x46, 0x7d, 0xba, 0xf0, - 0x60, 0x58, 0xbf, 0xc1, 0x0f, 0xf9, 0xdb, 0x34, 0xb1, 0x7f, 0xf3, 0x9c, - 0xcd, 0xfe, 0xff, 0xdd, 0xf8, 0xb1, 0x7f, 0xb2, 0x18, 0x2e, 0xfd, 0x89, - 0x62, 0xff, 0xe9, 0x87, 0xe7, 0xaf, 0x4f, 0xda, 0x3d, 0x62, 0xff, 0xcf, - 0xbe, 0x11, 0x9c, 0xe3, 0xc4, 0xb1, 0x7f, 0x98, 0x1c, 0xf1, 0x64, 0x16, - 0x2a, 0x53, 0x72, 0xd1, 0xbf, 0xd2, 0x08, 0xdf, 0x89, 0x1e, 0x41, 0xbf, - 0xff, 0xce, 0x59, 0xd7, 0x8d, 0x6f, 0x7e, 0x7f, 0x9d, 0x9a, 0x0b, 0x17, - 0xcc, 0x0f, 0x77, 0xeb, 0x17, 0xfb, 0x0f, 0x14, 0x18, 0xb6, 0x58, 0xbd, - 0x98, 0x4b, 0x15, 0xb3, 0x24, 0x34, 0x6a, 0xbb, 0xc3, 0xdb, 0xa8, 0xc3, - 0x5e, 0x3a, 0xc8, 0x94, 0x75, 0x18, 0x69, 0xdf, 0x7e, 0x42, 0x02, 0x4f, - 0x47, 0x71, 0xd9, 0x58, 0x26, 0x30, 0xca, 0x3b, 0x8d, 0x6f, 0xe2, 0xcd, - 0xb6, 0x98, 0xf5, 0x8b, 0xf1, 0xfc, 0x59, 0x05, 0x8b, 0xfe, 0x9d, 0x70, - 0xb0, 0xf3, 0xba, 0xc5, 0xdb, 0xfd, 0x62, 0xe2, 0x95, 0x8b, 0xf7, 0x3f, - 0x21, 0x71, 0x62, 0xfe, 0x37, 0xaf, 0x7d, 0xfe, 0xb1, 0x43, 0x3d, 0xbd, - 0x15, 0x5f, 0xe7, 0xd4, 0xf6, 0x07, 0x20, 0xb1, 0x7f, 0xff, 0x84, 0x77, - 0xe1, 0x66, 0xb5, 0x91, 0x7f, 0x35, 0x9d, 0x2c, 0x50, 0xd1, 0x31, 0xa3, - 0x6b, 0xa4, 0xeb, 0x15, 0x26, 0xeb, 0xe4, 0x75, 0xf4, 0xe1, 0x59, 0xc7, - 0xd0, 0xf4, 0xbf, 0xee, 0x37, 0xdc, 0x7b, 0xbe, 0xcb, 0x17, 0xf9, 0xa1, - 0x83, 0xe7, 0x25, 0x62, 0xfe, 0xf7, 0xe4, 0xf1, 0x12, 0xc5, 0x4a, 0x27, - 0x70, 0xec, 0x06, 0x75, 0x1b, 0xb3, 0xf0, 0xa6, 0x51, 0x16, 0x52, 0x5e, - 0x0d, 0x87, 0xbe, 0xe6, 0x4e, 0x51, 0xa3, 0x96, 0x8e, 0x78, 0x50, 0xd2, - 0xb8, 0xbc, 0xb1, 0x78, 0x5a, 0xd9, 0x62, 0xff, 0x86, 0xfa, 0x91, 0x71, - 0xfb, 0x2c, 0x5e, 0xdc, 0x52, 0xb1, 0x78, 0x26, 0xfa, 0xc5, 0xec, 0x03, - 0x2c, 0x54, 0xa3, 0x26, 0x02, 0xf8, 0x3e, 0xe7, 0x7a, 0x1e, 0xf8, 0xf5, - 0xf6, 0x0b, 0x5b, 0x2c, 0x5f, 0xfb, 0xb3, 0xf8, 0x02, 0x2e, 0x38, 0xd6, - 0x2f, 0xd3, 0xd7, 0xa7, 0x4b, 0x17, 0xec, 0xe7, 0xc5, 0xb2, 0xc5, 0xb4, - 0x62, 0x2e, 0x30, 0x90, 0xe8, 0x3f, 0x29, 0xbf, 0xff, 0xcd, 0x00, 0xe1, - 0xfc, 0x17, 0x7f, 0x84, 0x69, 0x16, 0x44, 0xb1, 0x52, 0x8a, 0xa3, 0xa1, - 0xdf, 0xf1, 0x83, 0x26, 0x34, 0xd6, 0x09, 0x62, 0xff, 0xb0, 0x79, 0xd4, - 0x03, 0xe0, 0x16, 0x2f, 0xcf, 0xa8, 0x45, 0x2b, 0x17, 0xff, 0x7f, 0x09, - 0x8d, 0xfb, 0xfa, 0x0e, 0xb1, 0x5a, 0x45, 0x4f, 0xcf, 0x38, 0x53, 0x58, - 0x98, 0xb3, 0xc3, 0x9a, 0xfd, 0x85, 0xb3, 0xe9, 0x62, 0xce, 0xb1, 0x5f, - 0x37, 0x31, 0xc5, 0x17, 0xff, 0xc2, 0xdc, 0x3e, 0x80, 0xdc, 0x6d, 0x3f, - 0x40, 0x58, 0xbf, 0x4f, 0xcb, 0x0d, 0x58, 0xa7, 0x3f, 0xdf, 0xaa, 0xdf, - 0xa6, 0x2f, 0xbe, 0x96, 0x2f, 0xf6, 0xb7, 0xfb, 0x94, 0xc1, 0x62, 0xfd, - 0xee, 0x48, 0x36, 0x58, 0xa9, 0x3d, 0xe1, 0x1a, 0x5f, 0xfe, 0xc1, 0xcc, - 0x27, 0x9c, 0xc8, 0x42, 0x56, 0x2f, 0x9b, 0x53, 0x05, 0x8b, 0xff, 0xf9, - 0xc9, 0x9c, 0x81, 0xa9, 0xfb, 0x3f, 0xa7, 0xeb, 0x17, 0xff, 0x98, 0x80, - 0x67, 0x39, 0x31, 0x41, 0xe2, 0x58, 0xa1, 0xa6, 0x60, 0x72, 0x12, 0x49, - 0xf1, 0x14, 0x72, 0xbd, 0xff, 0xfd, 0x3e, 0x7d, 0xdc, 0x7c, 0x6e, 0xa1, - 0x85, 0x83, 0x58, 0xbf, 0x3f, 0xb8, 0x2d, 0x96, 0x2f, 0xfc, 0xe7, 0x9f, - 0x67, 0x40, 0x3c, 0xac, 0x5f, 0xfa, 0x01, 0x8d, 0xb6, 0xc3, 0xb7, 0x16, - 0x2f, 0xfa, 0x13, 0xf9, 0xf7, 0xd8, 0xeb, 0x15, 0x27, 0xf4, 0x24, 0x1b, - 0xff, 0xc4, 0xe0, 0xf7, 0x5b, 0xbe, 0x83, 0x91, 0xac, 0x5f, 0xe2, 0x7c, - 0xde, 0x7d, 0xc5, 0x8b, 0xfe, 0xf8, 0x63, 0x17, 0xb8, 0x09, 0x58, 0xa9, - 0x45, 0xe3, 0xa6, 0xb1, 0x9d, 0xff, 0xf9, 0xfa, 0x81, 0x4f, 0xf3, 0xb4, - 0xf5, 0xfc, 0xd9, 0x62, 0xf7, 0x9f, 0x65, 0x8a, 0x1a, 0xe7, 0x26, 0xe4, - 0x2f, 0x1d, 0xbe, 0x93, 0x4e, 0xb7, 0xf2, 0xa2, 0x85, 0xcf, 0xa1, 0xbb, - 0xd8, 0xb4, 0x35, 0x9b, 0xfc, 0xc3, 0xdf, 0xe2, 0x60, 0xd6, 0x2f, 0x7d, - 0xfe, 0xb1, 0x7e, 0x14, 0x97, 0xb8, 0xb1, 0x78, 0xf8, 0x35, 0x8b, 0xff, - 0xe0, 0x1f, 0x0f, 0x84, 0xc7, 0x98, 0x07, 0xc5, 0x8b, 0x87, 0x2b, 0x17, - 0xe0, 0x33, 0x8d, 0xd6, 0x2a, 0x4d, 0xf3, 0x0b, 0xdf, 0xdd, 0x41, 0xb3, - 0xaf, 0x2c, 0x5e, 0x37, 0x3b, 0x96, 0x2a, 0x4f, 0x45, 0xcc, 0x2f, 0x98, - 0xfc, 0x65, 0x8b, 0xd2, 0x79, 0x58, 0xbf, 0xcc, 0xfb, 0x93, 0x66, 0xeb, - 0x17, 0xe9, 0xf7, 0xda, 0x25, 0x8e, 0x1b, 0x3a, 0xd9, 0x50, 0x68, 0xca, - 0x3a, 0x1d, 0xd4, 0x23, 0x89, 0xc3, 0x84, 0x1d, 0x88, 0xa3, 0x93, 0xef, - 0xda, 0x16, 0xff, 0x95, 0x8b, 0xfb, 0x51, 0x41, 0xfd, 0xc5, 0x8a, 0x93, - 0xda, 0xc2, 0xab, 0x98, 0x25, 0x8a, 0x23, 0x70, 0x11, 0x05, 0xb8, 0xb1, - 0x7a, 0x27, 0x09, 0x62, 0xec, 0xd4, 0x9b, 0x17, 0x12, 0xbf, 0xd1, 0x34, - 0x4d, 0xd4, 0x38, 0xb1, 0x7f, 0x36, 0xcf, 0x13, 0x84, 0xb1, 0x7f, 0xe7, - 0x93, 0x4c, 0x7f, 0x30, 0x71, 0xeb, 0x17, 0xff, 0xd9, 0xf3, 0x07, 0x91, - 0x41, 0xb5, 0xb7, 0xc4, 0xb1, 0x73, 0x04, 0x48, 0x98, 0xf2, 0x25, 0x4a, - 0x6a, 0xf8, 0x54, 0xc6, 0xe5, 0x0c, 0x8b, 0xf6, 0x16, 0xd8, 0x12, 0xc5, - 0xf9, 0x8f, 0xf7, 0x09, 0x62, 0xb6, 0x3d, 0x21, 0x94, 0xdf, 0xfd, 0x3e, - 0xc2, 0x73, 0x40, 0x79, 0x82, 0xc5, 0xff, 0x4e, 0xc1, 0xc3, 0xe2, 0x6d, - 0x96, 0x2f, 0xf3, 0x7b, 0x9b, 0xee, 0xfd, 0x2c, 0x5f, 0xf3, 0xef, 0x91, - 0x31, 0x6d, 0xde, 0xac, 0x56, 0x26, 0x36, 0xe4, 0x7a, 0x44, 0x63, 0xd2, - 0x37, 0xb4, 0x6c, 0xb1, 0x7e, 0x9d, 0x6b, 0x3e, 0xb1, 0x7f, 0xf4, 0xe1, - 0x7e, 0x5c, 0x0d, 0xe1, 0x2c, 0x5e, 0x68, 0x79, 0x62, 0xff, 0xfa, 0x4d, - 0x0b, 0x1f, 0xb0, 0x4c, 0x39, 0xc3, 0xac, 0x5f, 0xc4, 0xc6, 0xc9, 0xe5, - 0x62, 0xbb, 0xd4, 0xc7, 0xa0, 0x2f, 0xa2, 0x83, 0xa1, 0x10, 0xe8, 0x94, - 0xee, 0x34, 0xd5, 0x8b, 0xf8, 0x9b, 0x7c, 0x2d, 0xd6, 0x2f, 0xff, 0xfb, - 0x3d, 0x9d, 0xbf, 0x87, 0x60, 0x8f, 0x3f, 0xf6, 0x3f, 0x65, 0x8a, 0xd9, - 0x16, 0x4e, 0x34, 0x45, 0xd7, 0xa3, 0x54, 0x78, 0x16, 0x2f, 0xff, 0xe1, - 0x36, 0xa0, 0x67, 0xf2, 0x29, 0xf6, 0x1e, 0x7e, 0xb1, 0x7d, 0x17, 0x69, - 0x25, 0x8b, 0xfa, 0x4e, 0xe4, 0x02, 0x58, 0xbf, 0xb8, 0xcc, 0x1b, 0x06, - 0xb1, 0x7d, 0x01, 0x0e, 0x32, 0x34, 0x4c, 0x10, 0x64, 0xe4, 0xbb, 0xc2, - 0x5f, 0x16, 0x5f, 0x9e, 0x62, 0x29, 0x58, 0xbf, 0x8e, 0xdd, 0x77, 0x99, - 0xf5, 0x8b, 0xc1, 0x37, 0x16, 0x2f, 0xe3, 0xce, 0x17, 0xb8, 0xb1, 0x7e, - 0x9d, 0xb2, 0x0e, 0xb1, 0x7f, 0xa4, 0xb1, 0xf6, 0x6e, 0x2c, 0x5e, 0x0c, - 0x71, 0x90, 0x4c, 0x03, 0x09, 0xfe, 0x69, 0xc1, 0xef, 0x16, 0x86, 0x51, - 0x7d, 0x39, 0xd4, 0x16, 0x2a, 0x24, 0xfe, 0xff, 0x1b, 0x50, 0x1b, 0xaf, - 0xfb, 0x6d, 0x9f, 0x7e, 0xa1, 0x3d, 0xcb, 0x17, 0xdf, 0xfe, 0x74, 0xb1, - 0x7f, 0x30, 0xe4, 0xa4, 0x0b, 0x17, 0xcf, 0xcc, 0x1c, 0x9e, 0x84, 0x71, - 0x25, 0xf9, 0xb9, 0xec, 0xfa, 0xc5, 0xbe, 0xb1, 0x7f, 0xe1, 0x0d, 0x88, - 0x1e, 0x7e, 0xb8, 0xb1, 0x7f, 0xfb, 0x05, 0xdf, 0x99, 0x90, 0xfe, 0x3c, - 0x38, 0xb1, 0x7f, 0xff, 0xb4, 0xdc, 0x0f, 0xc5, 0x9d, 0x98, 0x03, 0xd1, - 0x30, 0x4b, 0x16, 0xf4, 0x11, 0xe9, 0xc4, 0x01, 0x28, 0x5e, 0xfb, 0x0d, - 0x62, 0xff, 0x9e, 0x4e, 0x66, 0x0d, 0xfb, 0x2c, 0x56, 0x27, 0x28, 0xf1, - 0x83, 0x7c, 0xdb, 0x83, 0xb7, 0xc6, 0x79, 0xce, 0xb1, 0x52, 0xbc, 0xa6, - 0x39, 0x65, 0xd8, 0x71, 0xbc, 0x24, 0x5c, 0xe9, 0xa3, 0xbc, 0x12, 0x15, - 0xf0, 0xa1, 0xf7, 0x58, 0xbf, 0xff, 0x3e, 0xf2, 0x7e, 0x36, 0xb0, 0xe2, - 0xdd, 0xa0, 0xb1, 0x7f, 0xcd, 0xa6, 0xf3, 0xe9, 0x80, 0xb1, 0x73, 0xf6, - 0x58, 0xbf, 0xd2, 0x4d, 0xf1, 0x16, 0xcb, 0x17, 0xfe, 0x73, 0x64, 0x6e, - 0x4d, 0xa3, 0x56, 0x2f, 0xff, 0x67, 0x5e, 0xeb, 0xce, 0x16, 0x0d, 0xa0, - 0xb1, 0x58, 0x88, 0xc0, 0x1f, 0xdb, 0xeb, 0x17, 0xf3, 0xe8, 0x07, 0x7e, - 0x2c, 0x56, 0xc9, 0xf6, 0x40, 0x8f, 0x75, 0x78, 0xf3, 0x83, 0x8c, 0x94, - 0x2f, 0xc4, 0x45, 0x1c, 0x25, 0x78, 0xfc, 0x25, 0x8b, 0xff, 0xff, 0xba, - 0xe6, 0x41, 0xfd, 0xfc, 0x20, 0x02, 0x7e, 0x58, 0x36, 0x3a, 0xc5, 0xf7, - 0xba, 0x6f, 0xac, 0x54, 0xa2, 0xc9, 0xc7, 0x7c, 0xe3, 0x74, 0x9d, 0x62, - 0xff, 0xee, 0x67, 0x5e, 0x6f, 0x44, 0xcd, 0xa5, 0x8a, 0x19, 0xee, 0xf8, - 0x5e, 0xff, 0xff, 0xe2, 0x6d, 0xbc, 0x26, 0xeb, 0xce, 0x10, 0x7e, 0x72, - 0x14, 0x33, 0x8b, 0x17, 0xf0, 0x32, 0x29, 0xeb, 0x8b, 0x17, 0xfd, 0x85, - 0xb9, 0x98, 0x37, 0xec, 0xb1, 0x7f, 0xb0, 0xe6, 0x39, 0xb8, 0x35, 0x8a, - 0xf9, 0xf8, 0xf8, 0xf2, 0xff, 0xff, 0x13, 0x05, 0xfc, 0x3b, 0x05, 0xee, - 0x60, 0x43, 0x73, 0xac, 0x5e, 0xfe, 0x44, 0xb1, 0x7f, 0xc2, 0xd3, 0x34, - 0x3d, 0x9f, 0x58, 0xbf, 0x03, 0xa8, 0x4f, 0x72, 0xc5, 0xfd, 0x9a, 0xc8, - 0xa4, 0xd5, 0x8a, 0xc3, 0xdc, 0xf1, 0x6d, 0xff, 0xff, 0xdc, 0xfc, 0xfe, - 0x5f, 0xa0, 0x6b, 0x07, 0x3e, 0xe3, 0x97, 0x50, 0x58, 0xa1, 0xaa, 0xe2, - 0xc7, 0x57, 0x85, 0x0c, 0x44, 0x5f, 0x63, 0xe0, 0xf7, 0xa1, 0x2a, 0x11, - 0x0d, 0xe1, 0xb9, 0xd6, 0x2f, 0xf7, 0x5b, 0xbe, 0x7f, 0x5c, 0x58, 0xbf, - 0xe2, 0x73, 0x98, 0xe0, 0x0c, 0x0b, 0x15, 0xb1, 0xf8, 0x91, 0xb5, 0xfe, - 0x34, 0xb3, 0x6d, 0x84, 0x4b, 0x15, 0x2b, 0x8c, 0xf9, 0x2c, 0x11, 0xdf, - 0x5a, 0x11, 0xc2, 0x22, 0xbc, 0x0f, 0x77, 0xeb, 0x17, 0xa0, 0xfa, 0x58, - 0xbf, 0xf8, 0x72, 0x7e, 0x13, 0x7f, 0x35, 0x8b, 0x17, 0xf7, 0xda, 0x13, - 0xc8, 0x2c, 0x5f, 0xf6, 0x7d, 0xfa, 0xe7, 0xc5, 0xc5, 0x8a, 0xdc, 0xfa, - 0x40, 0x5d, 0x5d, 0x23, 0xb3, 0xe3, 0xa5, 0x0a, 0xca, 0x94, 0xd1, 0x32, - 0x30, 0xfb, 0xff, 0x80, 0xff, 0xe3, 0x6f, 0xf9, 0x8f, 0x1a, 0xc5, 0xff, - 0xf9, 0xa3, 0xcc, 0x8e, 0x14, 0x99, 0x9c, 0x21, 0x36, 0xcb, 0x14, 0x04, - 0x53, 0x89, 0x26, 0xff, 0xfe, 0xdc, 0x4d, 0xd7, 0x8c, 0x0f, 0xce, 0x42, - 0x86, 0x71, 0x62, 0xfb, 0x8c, 0xfb, 0x2c, 0x5e, 0xe6, 0xd2, 0xb1, 0x5b, - 0x1e, 0x0e, 0x11, 0xdd, 0xde, 0xc4, 0xb1, 0x7f, 0xff, 0x7b, 0x3b, 0x19, - 0x1c, 0x29, 0x33, 0x38, 0x42, 0x6d, 0x96, 0x2f, 0xfa, 0x13, 0xef, 0x4b, - 0x1f, 0x65, 0x8a, 0xc4, 0x4e, 0xf4, 0xc7, 0x7f, 0xfb, 0x3e, 0xcc, 0x72, - 0x6d, 0x3c, 0xf1, 0x62, 0xd8, 0x73, 0xea, 0xec, 0x47, 0x7e, 0xdb, 0xba, - 0x7a, 0xe2, 0xc5, 0xff, 0xc0, 0xf7, 0x18, 0xe5, 0x9f, 0xfb, 0xac, 0x5f, - 0x00, 0x78, 0x4b, 0x15, 0x27, 0xcc, 0xc8, 0x95, 0x8a, 0xba, 0x3a, 0x23, - 0x78, 0x50, 0x9c, 0x8b, 0xf1, 0x92, 0xb1, 0x49, 0x42, 0x52, 0xd1, 0x2c, - 0x5e, 0xc2, 0x35, 0x62, 0xa4, 0xd8, 0x60, 0x9d, 0xfe, 0xde, 0x61, 0xef, - 0xb0, 0xd6, 0x2f, 0xcf, 0x1d, 0x9a, 0x35, 0x62, 0xfb, 0xb1, 0x67, 0x16, - 0x2f, 0xe2, 0x63, 0x4b, 0x00, 0xb1, 0x4e, 0x7a, 0x27, 0x24, 0xbf, 0xfb, - 0x21, 0xec, 0xf9, 0x67, 0xbe, 0xeb, 0x16, 0x95, 0x8a, 0xf9, 0xea, 0x32, - 0x1d, 0xe0, 0x06, 0x05, 0x8b, 0x41, 0x62, 0xfa, 0x7d, 0xc3, 0x1c, 0xd8, - 0xf8, 0x7e, 0xe3, 0x60, 0xb1, 0x7e, 0xfb, 0xf6, 0x7d, 0xd6, 0x2e, 0xcf, - 0xc0, 0xf1, 0x37, 0x19, 0xad, 0x95, 0x21, 0x60, 0xf9, 0xcd, 0x59, 0xf7, - 0x8e, 0xbe, 0x52, 0x8e, 0x7c, 0xbc, 0x10, 0x41, 0x24, 0x5f, 0xfb, 0x44, - 0x26, 0x0f, 0x22, 0x93, 0xac, 0x46, 0x1a, 0x1b, 0xd1, 0x38, 0x4b, 0x17, - 0xbe, 0x20, 0x2c, 0x5b, 0xee, 0x6f, 0x62, 0x1f, 0xb6, 0xeb, 0x15, 0x28, - 0xca, 0xc8, 0x48, 0x68, 0x9e, 0xff, 0x48, 0xf2, 0x12, 0x5b, 0xac, 0x54, - 0xba, 0xb7, 0x0d, 0xa3, 0xb6, 0x84, 0x67, 0x03, 0x60, 0xc9, 0xd8, 0x5d, - 0xe1, 0x41, 0xd1, 0xb3, 0xca, 0x2a, 0x8f, 0x8c, 0x42, 0x28, 0xea, 0x75, - 0x1d, 0x61, 0xe3, 0x65, 0xfc, 0xfb, 0x0b, 0x4a, 0x62, 0x04, 0x66, 0x05, - 0x39, 0xe5, 0xc8, 0xe6, 0x7d, 0x2e, 0xdc, 0x52, 0xb9, 0x42, 0x8d, 0x4c, - 0x33, 0x3b, 0xe7, 0xd3, 0x01, 0x62, 0xff, 0x0f, 0xf3, 0xb1, 0x67, 0x4b, - 0x17, 0x87, 0xf9, 0x58, 0xa3, 0x9f, 0xa0, 0x08, 0xb8, 0x6b, 0x7d, 0xad, - 0x67, 0xd6, 0x2f, 0xef, 0xbf, 0x77, 0x70, 0x8d, 0x58, 0xbf, 0x9b, 0x4f, - 0xc0, 0x3a, 0xc5, 0x4a, 0x21, 0xb7, 0x23, 0xf9, 0xb5, 0xbb, 0xf5, 0x8b, - 0x8b, 0x8b, 0x16, 0x75, 0x8b, 0xfb, 0x5c, 0xfc, 0x97, 0x96, 0x2e, 0x90, - 0x2c, 0x5b, 0xd2, 0x78, 0xbc, 0x2e, 0xbf, 0xfd, 0xad, 0x83, 0xf3, 0xfc, - 0x47, 0x3b, 0x41, 0x62, 0xdd, 0xfa, 0xc5, 0xff, 0x7a, 0x75, 0xcf, 0xc9, - 0x79, 0x62, 0xee, 0x4a, 0xc5, 0xe3, 0x8e, 0x56, 0x2f, 0xf1, 0x79, 0xa2, - 0xe4, 0xf9, 0x62, 0x9c, 0xf4, 0x58, 0x76, 0xf9, 0xdb, 0x37, 0x58, 0xbf, - 0xf6, 0x76, 0x2c, 0xe4, 0x45, 0x23, 0x58, 0xbe, 0xdc, 0x73, 0xb2, 0xc5, - 0xc0, 0x95, 0x8b, 0xdc, 0x7d, 0x2c, 0x56, 0x1e, 0xc8, 0x09, 0x7c, 0x2f, - 0x7f, 0xa1, 0x84, 0xe3, 0xc2, 0x58, 0xbb, 0x91, 0x92, 0x9f, 0x96, 0x0b, - 0xc4, 0x73, 0xf6, 0x80, 0x10, 0x11, 0x17, 0x21, 0x33, 0xe2, 0xea, 0x65, - 0x58, 0x9e, 0x94, 0x81, 0x7d, 0xd0, 0xdb, 0x65, 0x8b, 0xb9, 0x2b, 0x17, - 0x8e, 0x39, 0x58, 0xbf, 0xc5, 0xe6, 0x8b, 0x93, 0xe5, 0x8a, 0x73, 0xd1, - 0x61, 0xdb, 0xe7, 0x6c, 0xdd, 0x62, 0xff, 0xd9, 0xd8, 0xb3, 0x91, 0x14, - 0x8d, 0x62, 0xfb, 0x71, 0xce, 0xcb, 0x17, 0xf4, 0x40, 0x78, 0xf6, 0x89, - 0x62, 0xf3, 0x83, 0x8b, 0x17, 0x02, 0x56, 0x2f, 0x71, 0xf4, 0xb1, 0x76, - 0x44, 0xb1, 0x58, 0x8c, 0x1d, 0xc9, 0x7e, 0x66, 0x01, 0xdf, 0x0b, 0x86, - 0x3b, 0x7f, 0x61, 0x38, 0xf0, 0x96, 0x2f, 0xd8, 0x44, 0xde, 0x58, 0xbf, - 0x6d, 0xec, 0xc3, 0xac, 0x54, 0x0f, 0xeb, 0xe5, 0x6c, 0x4d, 0x7f, 0x13, - 0x0f, 0x0d, 0x8c, 0x95, 0xe6, 0xa8, 0x0b, 0x8c, 0x5f, 0x15, 0xb7, 0x95, - 0xd6, 0xe5, 0x71, 0x12, 0xfd, 0xa0, 0x04, 0x04, 0x45, 0xc8, 0xc0, 0x7d, - 0x0d, 0x2b, 0xff, 0xb5, 0x3d, 0x70, 0xa4, 0xf9, 0xd7, 0x96, 0x2f, 0xff, - 0xcc, 0x3c, 0xc2, 0x34, 0x32, 0x92, 0xd9, 0xf4, 0xb1, 0x79, 0xb5, 0xb2, - 0xee, 0x12, 0x2f, 0xa1, 0x9d, 0x41, 0x77, 0x09, 0x17, 0xb8, 0xe3, 0x5d, - 0xc2, 0x45, 0xc1, 0x04, 0xbb, 0x84, 0x8a, 0xdd, 0x15, 0xb1, 0x15, 0xf8, - 0xc4, 0x22, 0xab, 0x9b, 0xc9, 0xb8, 0x48, 0x46, 0x1e, 0x05, 0xff, 0xff, - 0xc3, 0x29, 0x1f, 0xe7, 0xdc, 0x9f, 0x48, 0xe7, 0xd8, 0x70, 0x04, 0xb1, - 0x7f, 0x67, 0xf3, 0x08, 0xd5, 0x8b, 0xcc, 0x40, 0x31, 0x93, 0xaf, 0x33, - 0xd3, 0x5a, 0x86, 0xe9, 0xd1, 0x8a, 0x34, 0x2e, 0x1c, 0xf9, 0xca, 0xfd, - 0xf6, 0x84, 0xc1, 0x62, 0xfa, 0x3b, 0x1b, 0xeb, 0x17, 0xfc, 0xc4, 0x0c, - 0xec, 0x42, 0x82, 0xc5, 0x47, 0xa6, 0x23, 0xf8, 0x45, 0x00, 0xa3, 0xc4, - 0xb7, 0xfa, 0x20, 0xa7, 0xa1, 0xcf, 0x16, 0x2b, 0x0f, 0xf5, 0xd1, 0xad, - 0x05, 0x8b, 0x88, 0xd5, 0x8b, 0xfa, 0x02, 0xdb, 0xcf, 0xb2, 0x45, 0xfc, - 0x59, 0xee, 0x49, 0xd6, 0x2e, 0x7f, 0x2c, 0x5b, 0xcb, 0x17, 0x68, 0x06, - 0x1a, 0x97, 0x17, 0xbd, 0xda, 0x78, 0xb1, 0x7c, 0xc3, 0xfe, 0x2c, 0x5e, - 0x1b, 0x9d, 0x62, 0xff, 0xdf, 0x9f, 0x39, 0x49, 0xe7, 0x8b, 0x17, 0x7f, - 0x75, 0x8b, 0x47, 0xac, 0x51, 0x89, 0xa6, 0x4a, 0xb6, 0x16, 0x9a, 0x3e, - 0xc4, 0x5c, 0x1d, 0x11, 0xef, 0x70, 0xcd, 0x3a, 0xa0, 0x98, 0x86, 0x3f, - 0x1b, 0xed, 0xff, 0x49, 0x40, 0xa4, 0x0c, 0x75, 0x8b, 0xfe, 0x89, 0xdc, - 0xa7, 0x4d, 0xc5, 0x8b, 0xde, 0xcf, 0xac, 0x52, 0xc5, 0xdb, 0xbf, 0xcf, - 0x87, 0x87, 0x11, 0xc3, 0xb7, 0xde, 0xd0, 0x8e, 0xb1, 0x73, 0xec, 0xb1, - 0x4e, 0x6f, 0x3c, 0x49, 0x7d, 0x3f, 0x16, 0x96, 0x2f, 0xff, 0xf8, 0xe2, - 0xe6, 0xd8, 0x16, 0x6b, 0x67, 0xe7, 0xf3, 0xd1, 0xd8, 0xb1, 0x7b, 0xed, - 0xe5, 0x8a, 0xd9, 0x19, 0xb1, 0x10, 0x1c, 0x8f, 0x8d, 0xb7, 0x4f, 0xd6, - 0x2d, 0x2b, 0x1e, 0x2d, 0xef, 0xf3, 0xc0, 0x4d, 0xcf, 0xba, 0xc5, 0xff, - 0x3f, 0x6c, 0x30, 0xdd, 0x67, 0x16, 0x2e, 0xce, 0xcb, 0x17, 0xee, 0xcc, - 0x7c, 0xfa, 0xc5, 0xff, 0x67, 0xba, 0xdd, 0xf5, 0xfc, 0x58, 0xac, 0x3e, - 0x5f, 0x95, 0x5a, 0x09, 0x17, 0x9b, 0x5b, 0x24, 0x52, 0x45, 0x49, 0xbc, - 0xdc, 0x48, 0xe3, 0xd7, 0xa4, 0x1b, 0xa4, 0x46, 0x1a, 0xeb, 0xff, 0xbe, - 0xd0, 0x2c, 0xe0, 0x8d, 0x38, 0x4b, 0x14, 0x34, 0xef, 0xba, 0x3d, 0x3b, - 0xf1, 0x42, 0x2f, 0xc6, 0x37, 0x8a, 0x1f, 0x58, 0xbd, 0xd4, 0x38, 0xb1, - 0x52, 0xa9, 0xf7, 0x23, 0xf1, 0x3a, 0x83, 0x0e, 0xdf, 0xb0, 0xb6, 0x7d, - 0x2c, 0x5a, 0x39, 0x62, 0xcd, 0xb1, 0xbd, 0x22, 0x8b, 0xf6, 0x80, 0x77, - 0xe2, 0xc5, 0xfc, 0x19, 0x43, 0x9f, 0x1a, 0xc6, 0x1a, 0x9b, 0xfb, 0xdc, - 0x03, 0x36, 0x96, 0x2f, 0xa7, 0x77, 0xe2, 0xc5, 0xf0, 0x9b, 0x50, 0x58, - 0xb1, 0xd6, 0x2d, 0x01, 0x9b, 0x58, 0x88, 0xef, 0xff, 0xfe, 0xf7, 0xa1, - 0x9f, 0xfb, 0x42, 0x3b, 0x39, 0xc1, 0x73, 0xdc, 0xc0, 0x96, 0x2e, 0xc8, - 0x96, 0x2f, 0x80, 0x01, 0x71, 0x91, 0x20, 0x1b, 0xc5, 0x4a, 0x6f, 0x3b, - 0x17, 0x62, 0xc3, 0x42, 0xe2, 0xff, 0xec, 0xeb, 0xdc, 0x72, 0x90, 0x31, - 0xd6, 0x2f, 0xec, 0xd4, 0x5f, 0x70, 0x2c, 0x5f, 0xff, 0xd9, 0xef, 0xb8, - 0x53, 0xa6, 0x84, 0xf3, 0xf8, 0x05, 0x8a, 0x82, 0x22, 0x88, 0xbe, 0xe8, - 0x0d, 0x62, 0xf4, 0x27, 0xa5, 0x8b, 0xb0, 0x6b, 0x17, 0xd9, 0x13, 0x9d, - 0x62, 0xb6, 0x4d, 0x80, 0xd8, 0x67, 0x74, 0x45, 0x10, 0xc7, 0x87, 0x82, - 0x17, 0xbf, 0x4c, 0x50, 0x90, 0x24, 0x5c, 0x40, 0x58, 0xbf, 0x7d, 0xe4, - 0xbc, 0xb1, 0x68, 0xf5, 0x8b, 0x7d, 0xcd, 0xe0, 0x89, 0xef, 0xef, 0x3e, - 0x9f, 0x69, 0x58, 0xac, 0x45, 0x3e, 0xea, 0x61, 0x93, 0x5f, 0xff, 0xbf, - 0x8f, 0x0e, 0x19, 0xef, 0xe0, 0xc5, 0xee, 0x2c, 0x56, 0xe9, 0xac, 0xea, - 0x1a, 0x1e, 0x31, 0xbc, 0x79, 0x8f, 0x58, 0xb9, 0xe2, 0x58, 0xbf, 0x8b, - 0xd1, 0x66, 0xb1, 0x62, 0x8e, 0x78, 0xcc, 0x31, 0x5d, 0x22, 0x1c, 0x0c, - 0xd6, 0x8d, 0x6b, 0x17, 0xfe, 0xf7, 0xf0, 0x62, 0xf7, 0x22, 0x95, 0x8b, - 0x3a, 0xc5, 0xff, 0x6c, 0x28, 0x0f, 0xe2, 0x62, 0x58, 0xbf, 0x9e, 0x4f, - 0xb6, 0x04, 0xb1, 0x7e, 0xcd, 0x8f, 0x87, 0x58, 0xbd, 0xc7, 0xd2, 0xc5, - 0x11, 0xe3, 0x78, 0xa6, 0xfe, 0x26, 0x00, 0x05, 0xc5, 0x8b, 0xd2, 0x78, - 0xc1, 0xa6, 0x21, 0x82, 0x3a, 0x3b, 0xe3, 0xaf, 0x88, 0x6c, 0x6f, 0x13, - 0xaf, 0x0e, 0x35, 0x1a, 0x8d, 0x69, 0xfc, 0xbc, 0x78, 0xf5, 0x8b, 0x98, - 0xaf, 0x1d, 0xdb, 0x42, 0xf8, 0xa5, 0x0e, 0xdf, 0xf0, 0x1c, 0xbd, 0xd7, - 0x1a, 0x3d, 0x62, 0xfd, 0xfc, 0xdb, 0xdc, 0x58, 0xad, 0x1f, 0x3f, 0xcf, - 0x6f, 0xff, 0xb9, 0xcc, 0x3c, 0xc7, 0xeb, 0x1f, 0xf2, 0x35, 0x8b, 0xd3, - 0xd7, 0x16, 0x2a, 0x07, 0xe1, 0xa5, 0x2b, 0xd9, 0xb0, 0x96, 0x2b, 0x11, - 0xa4, 0xd0, 0x92, 0x22, 0x2b, 0x98, 0xeb, 0x17, 0xff, 0x44, 0x4c, 0x16, - 0xa5, 0xe0, 0xdc, 0x58, 0xa3, 0x9e, 0xe3, 0x0b, 0xdf, 0x8b, 0x00, 0x1f, - 0x4b, 0x17, 0xff, 0x3c, 0xe8, 0x1f, 0xce, 0x37, 0x50, 0x58, 0xb7, 0x8c, - 0x3e, 0xff, 0x95, 0x5f, 0xee, 0x16, 0x45, 0x09, 0xe9, 0x62, 0xb0, 0xf7, - 0xbc, 0x53, 0x52, 0xdf, 0xb7, 0xc2, 0x98, 0x34, 0x32, 0x0c, 0x94, 0x36, - 0x69, 0xc7, 0x50, 0x98, 0x78, 0xd1, 0xf4, 0xad, 0xf9, 0x53, 0xac, 0xfe, - 0x04, 0xf2, 0x8e, 0xe3, 0x93, 0xcc, 0xde, 0x8e, 0x1c, 0x50, 0x8e, 0x8e, - 0x87, 0x75, 0xff, 0xfb, 0x6d, 0x6b, 0x06, 0xc7, 0xfb, 0x78, 0xa6, 0x25, - 0x8b, 0xff, 0xff, 0xc2, 0xd0, 0xa2, 0x26, 0x07, 0x39, 0x86, 0xe0, 0xb4, - 0xc3, 0x9f, 0xca, 0xc5, 0xff, 0xef, 0x4f, 0xb9, 0xa9, 0x2f, 0x7f, 0x20, - 0xb1, 0x7f, 0xdc, 0x2c, 0xff, 0x8a, 0x40, 0xb1, 0x6e, 0x2c, 0x56, 0x22, - 0x50, 0xd4, 0xaf, 0x1c, 0x5f, 0xce, 0x1c, 0xf5, 0x3d, 0x2c, 0x5f, 0xff, - 0xf4, 0x6a, 0x32, 0x10, 0x9f, 0x78, 0xce, 0x16, 0x3f, 0x9d, 0x80, 0xb1, - 0x7f, 0xfd, 0x3a, 0x33, 0x0e, 0xdf, 0x6f, 0xbf, 0x5c, 0x58, 0xbf, 0x85, - 0x3a, 0xd3, 0xec, 0xb1, 0x7f, 0xf0, 0x8d, 0xc2, 0xfe, 0x0c, 0x6f, 0xd2, - 0xc5, 0xfd, 0x18, 0xfe, 0xd6, 0x41, 0x62, 0xb7, 0x3f, 0x77, 0x46, 0xbf, - 0xbe, 0xfd, 0x84, 0x08, 0x2c, 0x5f, 0xee, 0x4b, 0xeb, 0x59, 0xb2, 0xc5, - 0xfd, 0x09, 0x07, 0xdc, 0x25, 0x8b, 0xee, 0x70, 0x5d, 0x2c, 0x5f, 0x87, - 0xf9, 0x21, 0x2c, 0x5d, 0xfc, 0x58, 0xa9, 0x3e, 0x46, 0x25, 0x11, 0x45, - 0xfe, 0x39, 0x60, 0xdf, 0xfc, 0x58, 0xb7, 0xd6, 0x2f, 0x7a, 0x76, 0x58, - 0xa7, 0x36, 0x1e, 0x12, 0xbf, 0x9a, 0x1f, 0x76, 0x82, 0xc5, 0x4a, 0x2c, - 0x31, 0x8d, 0xc8, 0x2f, 0x63, 0x81, 0x62, 0xff, 0xa3, 0x3e, 0xc3, 0x21, - 0x36, 0xcb, 0x17, 0x8d, 0xd0, 0x16, 0x28, 0xd3, 0xdc, 0xdc, 0xf6, 0xfc, - 0x2e, 0xc4, 0xd0, 0x58, 0xbf, 0xfd, 0xf8, 0xc9, 0xf6, 0xb0, 0x66, 0x67, - 0x5e, 0x58, 0xb9, 0x89, 0x62, 0xb0, 0xf9, 0x99, 0x42, 0xfe, 0x84, 0xc5, - 0x8e, 0x05, 0x8b, 0x46, 0x77, 0xc5, 0xd0, 0x3d, 0x9b, 0x86, 0xa3, 0x90, - 0xa6, 0x34, 0x8b, 0xa3, 0x18, 0x8d, 0x0f, 0x09, 0x3f, 0xc3, 0x77, 0xbf, - 0x2d, 0x27, 0x8e, 0x12, 0x7a, 0x12, 0x1d, 0xc4, 0x17, 0x08, 0x25, 0x8b, - 0xe9, 0x8f, 0x1c, 0xac, 0x5f, 0x7b, 0x8f, 0xa5, 0x8b, 0xdf, 0x10, 0x6b, - 0x15, 0x27, 0x85, 0xdc, 0x47, 0x7f, 0x08, 0x3e, 0x3e, 0x12, 0xc5, 0xd9, - 0x12, 0xc5, 0xc1, 0xc4, 0xb1, 0x4e, 0x6c, 0x98, 0x62, 0xd3, 0x11, 0xff, - 0xf1, 0x82, 0xf0, 0x41, 0x04, 0x91, 0x69, 0x48, 0x8c, 0x34, 0x37, 0x43, - 0x65, 0x8a, 0x81, 0xbd, 0x39, 0x25, 0xef, 0xc8, 0x16, 0x2f, 0xe8, 0xdb, - 0xf2, 0x09, 0x8f, 0x58, 0xaf, 0x1e, 0x98, 0x63, 0xb7, 0xcd, 0x3d, 0x9d, - 0x62, 0xe8, 0x8e, 0xb1, 0x76, 0x0d, 0x62, 0xa4, 0xd8, 0x08, 0x66, 0xef, - 0xe9, 0x62, 0xe0, 0x01, 0x62, 0xf7, 0xe3, 0x60, 0x96, 0x2f, 0xa2, 0xcc, - 0xdd, 0x62, 0xa5, 0x95, 0xc3, 0xb2, 0xbc, 0x23, 0x0d, 0x19, 0x86, 0x4e, - 0x99, 0x9b, 0x0e, 0xfd, 0xc6, 0x7a, 0x67, 0x8a, 0x14, 0x7a, 0x84, 0x33, - 0x3a, 0x11, 0x1f, 0x14, 0xfc, 0x40, 0x21, 0x8e, 0xc3, 0x01, 0x12, 0x5e, - 0xdd, 0xe5, 0x62, 0xe1, 0x71, 0x62, 0xec, 0xd2, 0xc5, 0x6c, 0x6b, 0xf0, - 0x62, 0xa0, 0x7d, 0xa3, 0x4c, 0xbf, 0xfd, 0xe8, 0xb3, 0x5a, 0x68, 0xb3, - 0x59, 0xe5, 0x8b, 0xfb, 0x58, 0x42, 0x9d, 0x2c, 0x56, 0x22, 0x6d, 0xc8, - 0xbc, 0x99, 0x7f, 0xd0, 0x7f, 0x42, 0x75, 0x3b, 0xac, 0x5a, 0x3d, 0x62, - 0xe2, 0x81, 0x87, 0x9f, 0x03, 0xab, 0xf4, 0xeb, 0x59, 0xf5, 0x8a, 0xc3, - 0xd6, 0x34, 0xba, 0xfe, 0xda, 0x28, 0x46, 0xda, 0xd9, 0x62, 0xf7, 0xe7, - 0xeb, 0x17, 0xff, 0x80, 0x76, 0x81, 0x92, 0x3d, 0x8f, 0x3a, 0x58, 0xbe, - 0x79, 0x2f, 0x2c, 0x5e, 0xd9, 0x89, 0x62, 0xed, 0x6c, 0xb1, 0x6c, 0x58, - 0xa1, 0xa3, 0x4b, 0x43, 0xbf, 0x4d, 0xf1, 0x08, 0x87, 0x42, 0x19, 0xbf, - 0xf1, 0xa2, 0xe4, 0x1f, 0x5b, 0x08, 0x0b, 0x17, 0x16, 0x2c, 0x5e, 0x0f, - 0xa2, 0x58, 0xbf, 0x38, 0x0e, 0xd0, 0x58, 0xbe, 0xce, 0x81, 0xc5, 0x8a, - 0xd1, 0xe6, 0x11, 0x45, 0xdd, 0x04, 0xb1, 0x7d, 0x91, 0xf2, 0x75, 0x8a, - 0xc3, 0xe0, 0x62, 0x1e, 0x0d, 0x5f, 0xfb, 0xd2, 0x73, 0x0b, 0x00, 0x1f, - 0x4b, 0x17, 0xfb, 0x8d, 0xfd, 0xe5, 0xc6, 0xb1, 0x46, 0xa7, 0x8e, 0xe8, - 0x67, 0x16, 0xfc, 0x32, 0xc8, 0xb7, 0xc8, 0x57, 0x9c, 0xf2, 0xb1, 0x7a, - 0x77, 0x82, 0xc5, 0xd3, 0xc5, 0x8b, 0xcf, 0x27, 0x58, 0xb9, 0x86, 0xb1, - 0x43, 0x3c, 0xad, 0x0b, 0xf8, 0x72, 0xf3, 0x66, 0xeb, 0x17, 0xed, 0xbf, - 0x80, 0x65, 0x8a, 0xd8, 0xfd, 0x4d, 0x2f, 0xd0, 0xed, 0xff, 0x30, 0x43, - 0x72, 0xd8, 0x3e, 0x96, 0x2f, 0xbe, 0x3c, 0x25, 0x8b, 0xff, 0xc1, 0xf8, - 0xa4, 0x0d, 0xe0, 0x06, 0x50, 0x58, 0xbb, 0xb0, 0xd6, 0x2a, 0x4f, 0x99, - 0x93, 0x2f, 0xfd, 0xda, 0x4b, 0xdc, 0x7e, 0xd8, 0x35, 0x8b, 0xfe, 0xe7, - 0x30, 0xb7, 0x62, 0x02, 0xc5, 0xf7, 0x1c, 0x2e, 0x2c, 0x5c, 0xfa, 0x30, - 0xf7, 0x78, 0x73, 0x52, 0x8c, 0xdf, 0xc2, 0x7e, 0x96, 0x2e, 0x7d, 0x2c, - 0x54, 0x6b, 0x34, 0x7f, 0x0c, 0xa8, 0xdd, 0x7b, 0x4b, 0x23, 0x0a, 0x79, - 0x43, 0xfa, 0x5c, 0xf8, 0xe3, 0x43, 0x74, 0x8c, 0x78, 0x7b, 0xe8, 0x44, - 0x0a, 0x1d, 0xbd, 0x92, 0xaf, 0xff, 0xde, 0x92, 0x70, 0x67, 0x5e, 0xd3, - 0x85, 0x13, 0xac, 0x5f, 0x9b, 0x0f, 0x3b, 0xac, 0x5e, 0x26, 0x02, 0xc5, - 0xfc, 0xdb, 0x7d, 0xe4, 0x96, 0x2f, 0x0f, 0xee, 0xb1, 0x58, 0x8e, 0x53, - 0x55, 0xfe, 0x50, 0x10, 0xe0, 0x65, 0xb7, 0xfe, 0x6f, 0x70, 0x2c, 0xf8, - 0x1b, 0xcb, 0x17, 0xe0, 0x60, 0xda, 0x0b, 0x17, 0x37, 0x65, 0x8b, 0x76, - 0x58, 0xb0, 0xdc, 0xd6, 0xb0, 0xcd, 0xf7, 0x61, 0x31, 0x2c, 0x5f, 0x68, - 0xf3, 0xc5, 0x8b, 0xff, 0xec, 0xc2, 0x98, 0x7b, 0xec, 0x72, 0xce, 0xcb, - 0x17, 0xd9, 0xe9, 0xdc, 0xc3, 0xf2, 0x22, 0x3a, 0xd9, 0x3d, 0x51, 0xa6, - 0x69, 0x00, 0x0a, 0xa4, 0x4a, 0x14, 0x25, 0xac, 0x35, 0x8b, 0x87, 0x12, - 0xc5, 0x6e, 0x6a, 0xc3, 0x12, 0xbf, 0xf7, 0x67, 0x20, 0x63, 0xc4, 0xdd, - 0x2c, 0x5c, 0xe4, 0xb1, 0x7f, 0xfd, 0x9b, 0xc9, 0x9f, 0x9c, 0x03, 0x10, - 0xb1, 0x62, 0xa5, 0x14, 0xd0, 0x41, 0xf8, 0xb5, 0xf0, 0xc5, 0x20, 0x58, - 0xbd, 0x9d, 0x41, 0x62, 0xb4, 0x78, 0x21, 0x11, 0xdf, 0xfc, 0xe7, 0x26, - 0x37, 0x9f, 0x92, 0xf2, 0xc5, 0xfe, 0x6d, 0x36, 0x44, 0xe7, 0x58, 0xbf, - 0x71, 0xbe, 0xfc, 0x58, 0xba, 0x60, 0xb1, 0x68, 0x2c, 0x57, 0xcd, 0x48, - 0x62, 0xf7, 0xf0, 0x45, 0x80, 0x17, 0x16, 0x2f, 0xfd, 0x84, 0xdf, 0xc7, - 0x3c, 0x8d, 0x62, 0xa4, 0xfa, 0xdc, 0xbe, 0xe9, 0xd2, 0xc5, 0x1a, 0x8c, - 0x4d, 0x42, 0x34, 0x22, 0x0b, 0xff, 0xff, 0xd0, 0xe7, 0xd9, 0xfc, 0x2d, - 0x37, 0x30, 0xa6, 0x03, 0xd3, 0xf5, 0x05, 0x8b, 0xc1, 0xf7, 0x04, 0xb1, - 0x7f, 0xfc, 0x0c, 0x1f, 0xb8, 0xfe, 0xfe, 0x76, 0x1c, 0xac, 0x5c, 0xfd, - 0x2c, 0x56, 0xc8, 0x8d, 0xd1, 0x1f, 0x94, 0xad, 0xb2, 0xc5, 0xf9, 0xfd, - 0x13, 0x84, 0xb1, 0x58, 0x6f, 0x58, 0x4e, 0xfe, 0x1f, 0xe4, 0x26, 0xf2, - 0xc5, 0xff, 0xb0, 0x8d, 0xcd, 0x7b, 0xcf, 0xa5, 0x8b, 0xdf, 0x63, 0x56, - 0x2f, 0x6c, 0xfa, 0x94, 0x46, 0x61, 0x7f, 0x8f, 0xeb, 0xe8, 0xeb, 0x28, - 0x55, 0xdf, 0xc1, 0x9c, 0xcc, 0xeb, 0xcb, 0x17, 0xff, 0xf3, 0x6b, 0x0e, - 0xdd, 0x6a, 0x7c, 0xe0, 0xe3, 0x74, 0xb1, 0x6f, 0x71, 0x11, 0xde, 0x32, - 0xbf, 0xfd, 0xe8, 0x61, 0x38, 0xf2, 0x12, 0x0e, 0x2c, 0x5f, 0xe1, 0x1a, - 0x64, 0x99, 0xc7, 0x58, 0xa9, 0x4d, 0x7b, 0x21, 0x6a, 0xc5, 0x24, 0x93, - 0x7f, 0xe0, 0x66, 0x9c, 0x18, 0x0d, 0x1d, 0x62, 0xff, 0xf1, 0xb3, 0xcd, - 0x4f, 0xcb, 0x3d, 0x27, 0x58, 0xbc, 0x61, 0x77, 0xeb, 0x17, 0xff, 0x48, - 0xbb, 0xf8, 0x39, 0xa6, 0xc9, 0x79, 0x62, 0xfe, 0x3b, 0x43, 0x82, 0x75, - 0x8a, 0x58, 0xb0, 0x8e, 0x6e, 0x83, 0x2e, 0xbf, 0xfb, 0x3d, 0xf7, 0x83, - 0xeb, 0x61, 0x01, 0x62, 0xff, 0x43, 0x38, 0x1e, 0xc2, 0x25, 0x8a, 0xdc, - 0xff, 0x04, 0x8d, 0x7f, 0x8b, 0x3b, 0x3c, 0x4e, 0x12, 0xc5, 0x41, 0x3a, - 0x5d, 0x11, 0xfe, 0x10, 0xa5, 0x0a, 0x4e, 0x11, 0xdf, 0xff, 0xc2, 0x6d, - 0xb7, 0x16, 0xde, 0xcf, 0x96, 0x7b, 0xee, 0xb1, 0x7e, 0x98, 0x88, 0x5c, - 0x58, 0xac, 0x55, 0x94, 0xf1, 0xf7, 0xfd, 0x53, 0xcb, 0xd7, 0x39, 0x2c, - 0x5d, 0xe3, 0x56, 0x2f, 0xb4, 0xf1, 0x71, 0x62, 0xf3, 0x10, 0x30, 0xde, - 0xe8, 0x66, 0xa5, 0x96, 0xe5, 0xb4, 0x22, 0x61, 0x0c, 0x9c, 0x70, 0x34, - 0x8f, 0x74, 0x48, 0x8c, 0xf5, 0x18, 0xaf, 0xcd, 0xda, 0x30, 0x52, 0x95, - 0x6f, 0xc3, 0xff, 0x4b, 0x09, 0xec, 0x87, 0x1c, 0xa7, 0x7c, 0x5e, 0x98, - 0xe5, 0x8b, 0xd3, 0xda, 0x56, 0x2f, 0x49, 0x79, 0x62, 0xfa, 0x74, 0xdf, - 0x58, 0xa1, 0x9b, 0xee, 0xc3, 0x97, 0x64, 0x4b, 0x17, 0xfb, 0x37, 0x2c, - 0xec, 0xe3, 0x58, 0xbe, 0xf8, 0x8f, 0x2b, 0x14, 0xb1, 0x4b, 0x16, 0x63, - 0x97, 0x1c, 0x0c, 0xb8, 0x5d, 0xfa, 0xc5, 0xf7, 0xf0, 0x0c, 0xb1, 0x7d, - 0xe7, 0xf8, 0x96, 0x2f, 0xec, 0xd7, 0x50, 0xf4, 0xac, 0x5d, 0x31, 0xfd, - 0xf5, 0x3d, 0x20, 0xc8, 0xea, 0x37, 0x54, 0x37, 0x24, 0xae, 0xb9, 0x11, - 0x1f, 0xc6, 0x18, 0xd4, 0x8e, 0xc4, 0x4b, 0xd8, 0x77, 0xb9, 0xd2, 0xd1, - 0x91, 0xbc, 0x6a, 0xc6, 0x7d, 0xec, 0xa6, 0xb8, 0xd2, 0x37, 0x98, 0xda, - 0x19, 0x9d, 0xf6, 0x59, 0xdf, 0x21, 0x09, 0xdf, 0x59, 0x51, 0x51, 0xaa, - 0x17, 0xd1, 0xac, 0xee, 0x6b, 0x08, 0xcd, 0xa9, 0x05, 0x30, 0x9e, 0x98, - 0x1d, 0x62, 0xd3, 0x96, 0x92, 0x70, 0xd9, 0x7a, 0xfb, 0xd2, 0xaa, 0x7a, - 0x9f, 0x3c, 0x79, 0xf6, 0x08, 0xf9, 0x40, 0x11, 0x52, 0xa6, 0xb5, 0x4a, - 0xd0, 0x3d, 0x2a, 0xa7, 0xf5, 0xfa, 0x13, 0x52, 0xa1, 0x01, 0x3e, 0x1f, - 0xdf, 0xc6, 0xa6, 0x54, 0xfe, 0xce, 0x5a, 0xcd, 0xef, 0x5a, 0x17, 0x61, - 0x52, 0xff, 0xfb, 0x4a, 0x13, 0x0a, 0x1a, 0x71, 0xd3, 0xde, 0x81, 0xd3, - 0xb9, 0xbb, 0xa5, 0x8a, 0x5f, 0xa3, 0x57, 0x89, 0x80, 0xb1, 0x7f, 0x46, - 0xd1, 0xb7, 0x89, 0x80, 0xb1, 0x7c, 0xfd, 0x9a, 0x3d, 0x62, 0xe6, 0x35, - 0x62, 0xfb, 0x93, 0xa0, 0x2c, 0x5f, 0xb6, 0x3c, 0xf5, 0x19, 0x1b, 0xa3, - 0x22, 0x34, 0x2e, 0x81, 0xc3, 0x13, 0xf0, 0x62, 0x99, 0x71, 0xa0, 0x52, - 0xfc, 0xef, 0x9c, 0x80, 0xeb, 0x17, 0x98, 0xfc, 0x58, 0xa8, 0x1b, 0xee, - 0xc4, 0x37, 0xe3, 0xe3, 0xb0, 0x16, 0x2f, 0xb7, 0x66, 0xdd, 0x52, 0x45, - 0x17, 0xff, 0xe6, 0x04, 0xef, 0xf7, 0xe7, 0xdf, 0xdf, 0xc2, 0x58, 0xad, - 0x22, 0x18, 0x8c, 0x6f, 0xfd, 0x3e, 0x70, 0x4c, 0x3d, 0xce, 0xf1, 0x62, - 0xfd, 0xbc, 0x94, 0x81, 0x62, 0xfb, 0xc6, 0xbe, 0xeb, 0x14, 0xc7, 0x9b, - 0xc2, 0x8b, 0xfb, 0x00, 0x1e, 0x98, 0x0b, 0x17, 0x9a, 0x11, 0x92, 0x9d, - 0x86, 0x42, 0xb7, 0x44, 0x5f, 0x84, 0x8f, 0x88, 0x6f, 0xfe, 0x96, 0xd1, - 0x09, 0xba, 0xcf, 0xb2, 0xc5, 0xfc, 0xe0, 0x63, 0x7e, 0xeb, 0x17, 0xff, - 0xde, 0x63, 0x8f, 0xf9, 0x0e, 0x7e, 0x4b, 0xcb, 0x15, 0x87, 0xfc, 0xc5, - 0xd7, 0xff, 0xcf, 0x11, 0x4f, 0xb9, 0xee, 0xb7, 0x72, 0xd9, 0x62, 0xff, - 0xfb, 0x3f, 0xe7, 0x09, 0xf2, 0x0f, 0xa6, 0x02, 0xc5, 0x0d, 0x14, 0x5c, - 0x53, 0xb4, 0x66, 0x2b, 0xe0, 0x3c, 0x7a, 0x7f, 0x67, 0x28, 0x60, 0xf2, - 0x18, 0x57, 0xfa, 0x33, 0x35, 0xbb, 0x36, 0xea, 0x93, 0xa0, 0xbf, 0xfa, - 0x31, 0xa1, 0x19, 0x9a, 0xdd, 0x9b, 0x75, 0x48, 0x96, 0x5f, 0xd2, 0x0c, - 0x3c, 0xee, 0xb1, 0x7e, 0xd6, 0xec, 0xdb, 0xaa, 0x4f, 0x22, 0xfd, 0x9e, - 0xf3, 0x92, 0x10, 0x8e, 0xe6, 0xec, 0xb1, 0x68, 0xc1, 0xa2, 0xbb, 0x0b, - 0x88, 0xde, 0x38, 0xc2, 0xa6, 0x38, 0x47, 0xdd, 0xa5, 0xcd, 0x42, 0x14, - 0x39, 0x0a, 0x5d, 0xe3, 0xaa, 0x8a, 0x31, 0x63, 0xbf, 0xfe, 0xb8, 0x84, - 0x69, 0x4a, 0x45, 0x9a, 0xda, 0x47, 0x27, 0x12, 0xbc, 0xc6, 0x24, 0x5e, - 0xd1, 0x83, 0xdf, 0xfe, 0x8c, 0x3b, 0x42, 0x33, 0x35, 0xbb, 0x36, 0xea, - 0x91, 0x64, 0xbe, 0x8d, 0xcd, 0x8e, 0x8d, 0xd6, 0x2d, 0x1b, 0x2c, 0x5b, - 0xb9, 0x62, 0xdf, 0x58, 0xa8, 0xdc, 0xdf, 0x46, 0x82, 0xe2, 0x15, 0xbf, - 0xdf, 0xce, 0xa1, 0xa7, 0xe9, 0x62, 0xff, 0x38, 0xff, 0x8e, 0x46, 0xac, - 0x5e, 0xfb, 0x1a, 0xb1, 0x7d, 0xf6, 0xf0, 0x96, 0x2f, 0xbf, 0x31, 0xe7, - 0x58, 0xbc, 0x07, 0x3a, 0xc5, 0xff, 0xb3, 0xef, 0x02, 0xcc, 0x17, 0x7e, - 0xb1, 0x7d, 0xd3, 0x6b, 0x16, 0x2f, 0xfd, 0x8f, 0xd9, 0xc8, 0x50, 0xce, - 0x2c, 0x5f, 0xe1, 0x99, 0x3e, 0xd6, 0x0d, 0x62, 0xe0, 0xe3, 0x96, 0x2a, - 0x4f, 0x47, 0xe6, 0xb7, 0x85, 0xbb, 0x2c, 0x56, 0xca, 0x88, 0x60, 0x6d, - 0xb9, 0x9b, 0x8f, 0x47, 0x91, 0xe8, 0x98, 0xe3, 0xbf, 0x42, 0x22, 0x3f, - 0x42, 0x40, 0x32, 0x1b, 0xf7, 0x84, 0xd0, 0xe2, 0xc5, 0xf6, 0x04, 0xc0, - 0x58, 0xa1, 0x9e, 0x61, 0x14, 0xdf, 0xf0, 0x0c, 0x7f, 0x72, 0x74, 0x05, - 0x8b, 0xfb, 0x99, 0xa6, 0x86, 0x2c, 0x5f, 0x31, 0xbf, 0x75, 0x8a, 0x23, - 0xd0, 0xe1, 0x6d, 0xd3, 0xb2, 0xc5, 0xff, 0x98, 0xbd, 0x84, 0x28, 0x67, - 0x16, 0x2f, 0xfd, 0x87, 0xe3, 0x40, 0x3e, 0x4e, 0x2c, 0x54, 0x7a, 0x25, - 0x3e, 0x31, 0xe3, 0xdb, 0xcf, 0xb7, 0x96, 0x2f, 0xff, 0xff, 0xff, 0xf0, - 0x8c, 0x2c, 0x89, 0xf8, 0x23, 0x98, 0x46, 0x99, 0xbf, 0xdf, 0xef, 0x25, - 0xed, 0x4f, 0xbf, 0x87, 0x30, 0xcf, 0xc7, 0x2c, 0x54, 0xaa, 0x58, 0xc8, - 0x45, 0xbc, 0x2d, 0x7c, 0x66, 0x10, 0xf5, 0xef, 0x84, 0xcb, 0x17, 0xf1, - 0xe4, 0x8d, 0xcd, 0x96, 0x2e, 0x63, 0xac, 0x5f, 0xf9, 0xb5, 0x09, 0xf7, - 0xe4, 0x5d, 0xfa, 0xc5, 0x46, 0x88, 0xa8, 0xc1, 0xef, 0x17, 0x88, 0x5e, - 0xfc, 0x2f, 0x3f, 0xe5, 0x62, 0xff, 0xdf, 0x9f, 0xb9, 0xbe, 0xe3, 0x01, - 0x62, 0xff, 0x9a, 0x1c, 0x17, 0xa7, 0xdc, 0x58, 0xbf, 0x7b, 0x52, 0xdb, - 0xac, 0x5f, 0xf1, 0x61, 0x67, 0xb5, 0x31, 0x2c, 0x51, 0x1f, 0x0f, 0x0a, - 0x6d, 0xd9, 0x62, 0xfd, 0x87, 0xf3, 0xec, 0xb1, 0x74, 0xf1, 0xcd, 0xef, - 0x05, 0x2e, 0x6e, 0x2c, 0x5f, 0xff, 0x99, 0xa0, 0xdf, 0x33, 0x36, 0x17, - 0x9f, 0xf2, 0xb1, 0x5b, 0x1f, 0x6c, 0x42, 0xf7, 0x0b, 0x4b, 0x17, 0xe8, - 0x71, 0xa3, 0xb1, 0x62, 0xfd, 0x26, 0x48, 0xe0, 0xb1, 0x73, 0x6e, 0xa9, - 0x0c, 0xca, 0x73, 0xce, 0x62, 0x9b, 0xfd, 0x3d, 0x42, 0x74, 0x78, 0x2c, - 0x5f, 0xff, 0xf7, 0x3d, 0xe7, 0xff, 0x50, 0xe1, 0x0b, 0x0d, 0x35, 0xda, - 0x0b, 0x16, 0xc0, 0x22, 0x7f, 0xc6, 0xb7, 0xff, 0xfd, 0x0c, 0x31, 0xbc, - 0x29, 0x30, 0x65, 0x3a, 0xd3, 0xe1, 0xd6, 0x2a, 0x53, 0xc7, 0xdd, 0xe7, - 0x50, 0xbf, 0x62, 0x8b, 0xf9, 0xe4, 0xfb, 0x60, 0x4b, 0x17, 0x14, 0x16, - 0x2c, 0x75, 0x8b, 0xed, 0x7d, 0xa3, 0x34, 0x7b, 0x07, 0x2f, 0x0c, 0x5e, - 0xff, 0xdd, 0x19, 0xe9, 0x33, 0x83, 0x78, 0x96, 0x29, 0xd1, 0x1c, 0xc9, - 0x56, 0xfa, 0xc5, 0xd3, 0xa5, 0x8b, 0x3e, 0xe6, 0xa7, 0xb0, 0x95, 0xff, - 0xfc, 0x3c, 0xde, 0x7f, 0x27, 0x30, 0x84, 0xde, 0x9d, 0x2c, 0x5d, 0xc1, - 0x2c, 0x54, 0x0f, 0xd3, 0xa5, 0xcb, 0xfd, 0xd0, 0x38, 0xfe, 0x29, 0x58, - 0xbe, 0x7d, 0x36, 0x96, 0x2e, 0xe4, 0x7a, 0xc5, 0x40, 0xde, 0xf8, 0x8a, - 0xff, 0xfe, 0x86, 0x73, 0xc2, 0xdb, 0x7f, 0xbc, 0x5f, 0x9d, 0xb1, 0x62, - 0xa5, 0x31, 0x5c, 0x23, 0x67, 0x11, 0x10, 0xdf, 0xfd, 0xc7, 0x17, 0x30, - 0x85, 0x0c, 0xe2, 0xc5, 0xff, 0xff, 0xf1, 0x0a, 0x19, 0xcc, 0xf0, 0x9b, - 0xdf, 0xcd, 0xfe, 0xf1, 0x7e, 0x76, 0xc5, 0x8b, 0xa7, 0xa5, 0x8b, 0xce, - 0x5b, 0xac, 0x53, 0xa2, 0xd3, 0x8f, 0xfe, 0x18, 0xbf, 0xfb, 0xdc, 0x7f, - 0x14, 0x89, 0xb4, 0x6a, 0xc5, 0xce, 0x75, 0x8b, 0x77, 0xee, 0x7b, 0x9d, - 0xc8, 0xb7, 0xf4, 0xf4, 0x13, 0x7f, 0x8b, 0x15, 0xb3, 0x24, 0xf6, 0x05, - 0x03, 0x40, 0xc8, 0x4d, 0xee, 0xbc, 0xf0, 0x98, 0x88, 0x93, 0x51, 0xef, - 0x9e, 0x32, 0x8f, 0xa5, 0x14, 0x76, 0x5c, 0x3b, 0xf4, 0x3e, 0x05, 0x08, - 0xbe, 0xe2, 0xfb, 0xfc, 0xc1, 0x7d, 0xe7, 0x52, 0xb1, 0x7f, 0xff, 0xfe, - 0x61, 0xf3, 0xf8, 0x72, 0x7d, 0x8c, 0x38, 0x89, 0x8d, 0xf9, 0x67, 0xb5, - 0x8b, 0x15, 0xa4, 0x5b, 0x91, 0x9d, 0xff, 0xfc, 0xfe, 0xf3, 0xf0, 0x3d, - 0xa7, 0x62, 0xc0, 0x0b, 0x8b, 0x17, 0xff, 0xf6, 0x6d, 0xdd, 0xe7, 0xe1, - 0x9f, 0xcf, 0x96, 0x7b, 0x8b, 0x15, 0xf4, 0x5f, 0x12, 0xf5, 0xfb, 0xce, - 0x79, 0x89, 0x62, 0xff, 0xff, 0xff, 0x10, 0xbb, 0x8c, 0xdf, 0xe2, 0xf4, - 0x96, 0x6d, 0xcd, 0xfe, 0x22, 0xeb, 0x27, 0xe5, 0x8b, 0x17, 0xf6, 0x49, - 0x93, 0xc3, 0xac, 0x56, 0x23, 0xb1, 0xca, 0x79, 0x09, 0x5b, 0x12, 0xc5, - 0xfc, 0xc1, 0x78, 0x98, 0xd5, 0x8a, 0xc3, 0xc0, 0x21, 0x1a, 0x82, 0x24, - 0xfc, 0xe7, 0x7d, 0xad, 0x37, 0x16, 0x2f, 0xdf, 0xc2, 0x63, 0xac, 0x5f, - 0x75, 0xf9, 0xe2, 0xc5, 0xe8, 0x98, 0x96, 0x2f, 0xfe, 0x1e, 0x39, 0x1b, - 0x9f, 0x97, 0x1a, 0xc5, 0xf6, 0xf2, 0x5e, 0x58, 0xbe, 0xdb, 0xf2, 0x6a, - 0xc5, 0xe9, 0xf7, 0x16, 0x2f, 0xfd, 0x86, 0xf2, 0x70, 0x87, 0xf9, 0x58, - 0xae, 0x1e, 0xd8, 0x87, 0x6f, 0xa4, 0x0d, 0xe5, 0x8a, 0x31, 0x3b, 0x58, - 0x11, 0xe1, 0x3c, 0x44, 0x9a, 0x1d, 0x3a, 0x1b, 0x11, 0xf2, 0x10, 0x11, - 0xc4, 0x57, 0xee, 0xe2, 0x60, 0x86, 0xb1, 0x7f, 0x6b, 0x6d, 0x60, 0xf1, - 0x62, 0xfe, 0x62, 0xdb, 0x58, 0x35, 0x8a, 0x93, 0xdd, 0x11, 0x7d, 0xff, - 0xde, 0x7d, 0x30, 0x0c, 0xea, 0x12, 0x75, 0x8b, 0xff, 0xa4, 0xe6, 0xb6, - 0xb0, 0x1c, 0x6d, 0xd6, 0x2f, 0xc5, 0x30, 0xe3, 0x2c, 0x54, 0xa6, 0xbd, - 0x08, 0x44, 0xb9, 0x09, 0x23, 0xf6, 0x46, 0xbf, 0x7d, 0xca, 0x7e, 0xb1, - 0x7f, 0xbf, 0x27, 0xee, 0xc6, 0x89, 0x62, 0x86, 0x7b, 0xdb, 0x93, 0xdc, - 0x46, 0xac, 0x5b, 0xeb, 0x17, 0xff, 0x7e, 0x46, 0x61, 0x67, 0x39, 0x3b, - 0xac, 0x5f, 0xff, 0xfd, 0xe7, 0x3e, 0x9f, 0x3a, 0x21, 0x7a, 0x7e, 0x67, - 0x67, 0xf4, 0x52, 0xb1, 0x58, 0x8c, 0xe7, 0x12, 0xf2, 0x35, 0xfe, 0x3f, - 0xdb, 0xcc, 0x40, 0x58, 0xbf, 0xed, 0xcc, 0xdd, 0xf8, 0x22, 0xdd, 0x62, - 0xff, 0xff, 0xff, 0xf7, 0x0b, 0x00, 0x09, 0x23, 0x37, 0xf8, 0xbd, 0x25, - 0x9b, 0x73, 0x7f, 0x88, 0xba, 0xc9, 0xf9, 0x62, 0xc5, 0x4a, 0x63, 0x18, - 0x66, 0x11, 0xf5, 0xe0, 0xe4, 0x0b, 0x17, 0xf1, 0x60, 0xff, 0x21, 0x2c, - 0x59, 0x88, 0xf3, 0x3b, 0x0f, 0x5d, 0x90, 0x58, 0xbf, 0x00, 0x65, 0x9f, - 0x58, 0xa9, 0x56, 0x64, 0x32, 0x3c, 0x87, 0x33, 0xc6, 0x8d, 0xa7, 0xc3, - 0x94, 0x30, 0xbd, 0xfd, 0xe6, 0xf9, 0x83, 0x95, 0x8b, 0xde, 0x72, 0x58, - 0xbf, 0x71, 0xfd, 0xa7, 0x58, 0xbb, 0x38, 0xb1, 0x7d, 0xc6, 0x28, 0x2c, - 0x5a, 0x10, 0x37, 0x3c, 0x17, 0xbd, 0xb7, 0x38, 0xb1, 0x70, 0x43, 0x58, - 0xbe, 0xfb, 0x08, 0xeb, 0x17, 0xff, 0x67, 0x77, 0xbb, 0x8a, 0x7c, 0x29, - 0xe9, 0x62, 0xe1, 0x69, 0x62, 0xde, 0xf9, 0xf1, 0xf1, 0x2e, 0x9d, 0x15, - 0xc5, 0x08, 0x6a, 0x94, 0xf7, 0xfa, 0x2f, 0x71, 0xc6, 0x61, 0x22, 0x7f, - 0x0f, 0x8a, 0x18, 0xf7, 0x30, 0xd6, 0x2f, 0xd0, 0x62, 0x16, 0xeb, 0x15, - 0xb9, 0xe0, 0x74, 0x2f, 0x73, 0x6e, 0xb1, 0x74, 0xc7, 0xac, 0x5f, 0xc5, - 0x3b, 0xed, 0x81, 0x2c, 0x56, 0xc7, 0xc5, 0xdf, 0x8c, 0x78, 0x6a, 0xff, - 0xde, 0x62, 0x01, 0x81, 0xe7, 0x41, 0x2c, 0x5f, 0x7b, 0xd2, 0x75, 0x8b, - 0xe8, 0x79, 0xf6, 0x58, 0xbf, 0xff, 0x49, 0x4f, 0x0c, 0x7f, 0xef, 0x24, - 0x59, 0xe5, 0x8a, 0xc4, 0x6f, 0x1a, 0x86, 0xc4, 0x7c, 0x24, 0xbf, 0xfe, - 0x93, 0x8a, 0x76, 0x33, 0x58, 0xff, 0x91, 0xac, 0x5f, 0x31, 0x07, 0xc5, - 0x8b, 0xc5, 0x9b, 0xac, 0x5f, 0xf3, 0xf9, 0xcf, 0x17, 0x1c, 0x96, 0x2f, - 0xff, 0xed, 0x67, 0xb9, 0xf6, 0x80, 0xa7, 0x3d, 0x3d, 0x41, 0x62, 0xb7, - 0x44, 0xae, 0x8e, 0x6f, 0xfd, 0x2f, 0xaf, 0x7b, 0x27, 0x40, 0x58, 0xb7, - 0xa4, 0xf8, 0xa2, 0x24, 0xbf, 0x6e, 0xfa, 0x3c, 0x16, 0x2f, 0xf1, 0xf3, - 0x40, 0x21, 0x01, 0x62, 0xd0, 0x58, 0xa8, 0x27, 0x9f, 0x84, 0x6f, 0x18, - 0xa7, 0xca, 0x18, 0xa8, 0x33, 0x4b, 0xf0, 0x27, 0xd2, 0x35, 0x8a, 0x95, - 0xc7, 0x9c, 0x84, 0x33, 0xc6, 0x27, 0xf3, 0xc6, 0x94, 0x40, 0x25, 0xcb, - 0xe1, 0xb8, 0xb7, 0x58, 0xbf, 0xde, 0x26, 0x33, 0x7d, 0xf1, 0x62, 0xf9, - 0xf7, 0x6d, 0x2c, 0x5f, 0xff, 0x0b, 0xdc, 0xea, 0x12, 0x40, 0xe1, 0x82, - 0x25, 0x8b, 0xd3, 0xe9, 0x58, 0xa8, 0x22, 0x48, 0x64, 0x7d, 0x94, 0xef, - 0xe9, 0xf8, 0xba, 0x87, 0x16, 0x2f, 0x38, 0xbb, 0xf5, 0x8b, 0xfd, 0x3a, - 0x62, 0x2c, 0x35, 0x62, 0x88, 0xf5, 0x3c, 0x45, 0x78, 0x5e, 0x12, 0xc5, - 0x39, 0xbf, 0x39, 0x0d, 0xff, 0xfc, 0x28, 0x3f, 0x24, 0xfb, 0xfd, 0xe2, - 0xfc, 0xed, 0x8b, 0x17, 0xbf, 0x84, 0xb1, 0x58, 0xa9, 0xef, 0xa2, 0x47, - 0x86, 0x44, 0x46, 0x5f, 0x86, 0x19, 0x10, 0x09, 0x7a, 0xef, 0xc4, 0xb1, - 0x7d, 0x91, 0x64, 0x4b, 0x17, 0xed, 0x0b, 0xd9, 0xb2, 0xc5, 0xf6, 0x68, - 0x72, 0xb1, 0x6e, 0x18, 0x7e, 0x12, 0x48, 0x45, 0x56, 0xfa, 0xc5, 0x74, - 0x78, 0xcc, 0x69, 0x7c, 0x42, 0x60, 0xd6, 0x2e, 0xc2, 0x58, 0xb4, 0xec, - 0x6e, 0x60, 0x47, 0x7e, 0xe9, 0xf7, 0x71, 0xac, 0x53, 0xa6, 0xf6, 0xd0, - 0xcf, 0x02, 0xd8, 0x64, 0xf7, 0xb3, 0x37, 0x58, 0xbf, 0xee, 0x06, 0x59, - 0xee, 0x06, 0x75, 0x8b, 0xfd, 0xcc, 0xd0, 0x08, 0x40, 0x58, 0xac, 0x3f, - 0x0f, 0x1e, 0x5f, 0xfd, 0x3e, 0xe7, 0xe5, 0xfd, 0xc9, 0xd9, 0x62, 0xfd, - 0x9a, 0x98, 0xb8, 0xb1, 0x5a, 0x3e, 0xef, 0xa2, 0xdf, 0xff, 0xcf, 0xc2, - 0xcd, 0xa7, 0x7f, 0xbc, 0x5f, 0x9d, 0xb1, 0x62, 0xf3, 0x7e, 0x56, 0x2a, - 0x07, 0xf3, 0xe5, 0xdb, 0xef, 0x7c, 0x51, 0xcb, 0x17, 0xfb, 0x27, 0x4d, - 0x07, 0xfa, 0xc5, 0xfe, 0x70, 0xb9, 0x3f, 0x68, 0xf5, 0x8a, 0xd1, 0xf4, - 0xf8, 0xca, 0xfd, 0xef, 0xf5, 0x9d, 0xcb, 0x17, 0xb1, 0xf6, 0x58, 0xa1, - 0xa7, 0x73, 0xd4, 0x26, 0xdc, 0x88, 0xf0, 0x90, 0xf9, 0x17, 0x0b, 0x6f, - 0x4f, 0xb8, 0xb1, 0x7e, 0xe3, 0x1b, 0xf7, 0x58, 0xbf, 0xe8, 0xf1, 0xfc, - 0x5c, 0xea, 0x0c, 0xb1, 0x73, 0xff, 0x0f, 0xa0, 0x45, 0x35, 0x2a, 0xd6, - 0xf2, 0x52, 0x43, 0xb1, 0x34, 0x21, 0x6d, 0x8b, 0x17, 0xf4, 0x26, 0x12, - 0x78, 0x2c, 0x56, 0xc6, 0xfd, 0xc4, 0x6f, 0xff, 0x84, 0xda, 0x86, 0xff, - 0x71, 0xe9, 0xc5, 0xb2, 0xc5, 0xfc, 0xe6, 0x87, 0xc9, 0xc5, 0x8b, 0xb2, - 0x36, 0x58, 0xad, 0x1e, 0x58, 0x65, 0xf7, 0xff, 0x6a, 0x41, 0xf7, 0x9d, - 0x00, 0xf0, 0x58, 0xbe, 0x8b, 0xee, 0x05, 0x8b, 0xe9, 0xfc, 0x81, 0x62, - 0xa5, 0x11, 0x66, 0xa2, 0xc7, 0x12, 0x5f, 0xff, 0x89, 0x82, 0xf6, 0x7c, - 0xce, 0xf3, 0xbc, 0x8d, 0xfb, 0xeb, 0xde, 0xf7, 0x8b, 0x17, 0x67, 0xd6, - 0x2f, 0xfe, 0x01, 0xdc, 0xb0, 0x05, 0x8d, 0x12, 0xc5, 0x61, 0xed, 0x08, - 0x5e, 0xff, 0x3f, 0xde, 0x4a, 0x21, 0x2c, 0x5e, 0x9f, 0xf7, 0xab, 0x17, - 0xec, 0xc2, 0xeb, 0xcb, 0x17, 0xfc, 0x2d, 0x37, 0x0c, 0xf6, 0xc1, 0x2c, - 0x59, 0xf4, 0x7c, 0xde, 0x28, 0xa9, 0x47, 0x13, 0x99, 0xb4, 0x22, 0x2f, - 0xb6, 0xfe, 0x79, 0x62, 0xff, 0xa0, 0xc4, 0x03, 0x02, 0xcf, 0xac, 0x5f, - 0xa2, 0xe7, 0x1e, 0x25, 0x8b, 0xfe, 0x1e, 0xb0, 0x5f, 0x93, 0xe2, 0xc5, - 0x62, 0x27, 0xdc, 0xec, 0x45, 0x77, 0xff, 0xbb, 0x61, 0x81, 0xf9, 0xf4, - 0xfb, 0x31, 0xd6, 0x2f, 0xf1, 0x00, 0x3f, 0xfd, 0xb6, 0x58, 0xac, 0x44, - 0x2b, 0xa7, 0xdf, 0x47, 0x66, 0xa5, 0x62, 0xff, 0xfe, 0x8e, 0xc3, 0x0b, - 0x36, 0x0e, 0x06, 0x73, 0x8e, 0x17, 0x16, 0x2d, 0x9b, 0x22, 0x24, 0x04, - 0xb5, 0xf4, 0x69, 0x94, 0x2a, 0xaa, 0x57, 0x86, 0x46, 0x43, 0x90, 0x9e, - 0x78, 0x57, 0x44, 0x67, 0xa8, 0x6a, 0x7e, 0x30, 0x36, 0x32, 0xe4, 0x30, - 0xfd, 0x1c, 0x35, 0xbc, 0xb1, 0x7f, 0xfb, 0x53, 0xf6, 0x7f, 0x4f, 0xcb, - 0xa7, 0x58, 0xa8, 0x8f, 0x6c, 0x84, 0xaf, 0xfd, 0xf9, 0xd0, 0x35, 0xa9, - 0x3f, 0x16, 0x2f, 0xcd, 0xc2, 0x79, 0x58, 0xbf, 0xf9, 0xf4, 0x3f, 0x8b, - 0x59, 0xbf, 0xf1, 0x62, 0xfc, 0xfa, 0x6e, 0xe7, 0x58, 0xa8, 0x1f, 0x86, - 0xe8, 0xd7, 0xf6, 0xcd, 0xb1, 0x0b, 0xcb, 0x17, 0xfd, 0x81, 0x7f, 0x00, - 0x79, 0xd2, 0xc5, 0xff, 0x38, 0x3f, 0xbb, 0xf3, 0x06, 0xb1, 0x60, 0x2c, - 0x56, 0x8f, 0x30, 0x8e, 0xaf, 0xbc, 0x26, 0xf2, 0xc5, 0xfa, 0x7d, 0xac, - 0x1a, 0xc5, 0xf7, 0xb5, 0x83, 0x58, 0xb7, 0x0c, 0x3c, 0xb9, 0x28, 0xbc, - 0x26, 0xf2, 0xc5, 0x18, 0x8b, 0x33, 0xb7, 0x78, 0xa2, 0xf7, 0x6c, 0xd2, - 0xc5, 0x49, 0xe8, 0x61, 0x8d, 0xf8, 0x13, 0xdb, 0x09, 0x62, 0xf3, 0x10, - 0x16, 0x29, 0x8f, 0x14, 0x45, 0x35, 0x2a, 0xde, 0xf0, 0x88, 0xd4, 0x0e, - 0xa1, 0x2c, 0xe4, 0x7a, 0x30, 0x68, 0x43, 0x14, 0x64, 0x9c, 0x65, 0xbe, - 0xe3, 0xf9, 0xd6, 0x2e, 0x10, 0xd6, 0x2a, 0x36, 0x37, 0x42, 0x22, 0xbf, - 0xa2, 0x7f, 0xeb, 0x0e, 0xb1, 0x7c, 0x1f, 0x27, 0x16, 0x2e, 0x70, 0x96, - 0x2e, 0xee, 0xc5, 0x8a, 0x64, 0x42, 0x00, 0xbf, 0x84, 0x7e, 0x18, 0xbf, - 0xb9, 0x3e, 0xe7, 0xdd, 0x62, 0xfc, 0x58, 0x7d, 0x62, 0xc5, 0xf6, 0xd0, - 0x61, 0xac, 0x5e, 0xed, 0x83, 0x58, 0xb9, 0xfe, 0xb1, 0x5a, 0x36, 0xdf, - 0x1f, 0xac, 0x46, 0x81, 0xcb, 0x98, 0x9c, 0x4b, 0x57, 0xfb, 0x7f, 0xe7, - 0x5e, 0x0c, 0xeb, 0x17, 0xef, 0xce, 0x8f, 0x05, 0x8b, 0xc3, 0xcf, 0x2c, - 0x5f, 0xff, 0xf1, 0x6e, 0xde, 0x6e, 0x81, 0xf0, 0x98, 0xb6, 0xff, 0x4d, - 0x1e, 0xb1, 0x7f, 0xf8, 0x47, 0x0c, 0x63, 0x90, 0x1e, 0x73, 0xcb, 0x16, - 0x04, 0xa2, 0xe8, 0x9b, 0xaf, 0xd9, 0xd7, 0xb3, 0xa5, 0x8b, 0xfd, 0x84, - 0x67, 0xe7, 0x23, 0xd6, 0x2f, 0xfc, 0xfe, 0xe6, 0x0e, 0x22, 0x91, 0xac, - 0x5f, 0x01, 0xfa, 0x82, 0xc5, 0xfe, 0x92, 0xf3, 0xec, 0x52, 0xb1, 0x7f, - 0xf9, 0xf4, 0xfb, 0x49, 0x67, 0xf4, 0x2e, 0xcb, 0x15, 0x2a, 0xa8, 0x20, - 0x70, 0x32, 0x9e, 0xa1, 0xaf, 0xa2, 0x73, 0x95, 0x7c, 0xd8, 0x07, 0xe4, - 0x49, 0xe3, 0x2b, 0xff, 0xd2, 0x5b, 0xb7, 0x98, 0xd0, 0xf6, 0x9d, 0x96, - 0x2f, 0xfc, 0xe3, 0x17, 0xb8, 0xde, 0x63, 0x56, 0x2f, 0xec, 0x0b, 0xa8, - 0x70, 0xc3, 0x51, 0x1c, 0xc9, 0xd7, 0xff, 0xf6, 0x16, 0x1b, 0xf6, 0x8b, - 0xec, 0x6e, 0x6b, 0x3c, 0xb1, 0x7f, 0xf0, 0x73, 0xd0, 0x64, 0x58, 0xfd, - 0x79, 0x62, 0x9d, 0x1d, 0x9f, 0x49, 0x65, 0xca, 0x8d, 0xdd, 0xfc, 0x64, - 0x68, 0xe1, 0x32, 0x96, 0x76, 0x87, 0x7c, 0x25, 0x3c, 0x8e, 0x1f, 0x99, - 0x49, 0x7e, 0x36, 0x3b, 0x0d, 0xe1, 0xc1, 0xd4, 0x74, 0x2f, 0x1e, 0xc4, - 0x51, 0xf2, 0xea, 0x5e, 0xf9, 0xe5, 0x26, 0x7e, 0x74, 0x81, 0xa5, 0x71, - 0x82, 0x3e, 0xae, 0xfd, 0x08, 0xa5, 0xf4, 0x72, 0x7a, 0x7f, 0xd3, 0x90, - 0x22, 0x86, 0x3f, 0x68, 0x55, 0x47, 0x46, 0x18, 0x1c, 0xad, 0xbe, 0xe9, - 0x41, 0x77, 0xee, 0xf3, 0x6d, 0x9f, 0xeb, 0x17, 0xfd, 0xe9, 0x1e, 0xb5, - 0x27, 0xe2, 0xc5, 0xfd, 0x2d, 0xa0, 0xe4, 0x0b, 0x17, 0xfa, 0x18, 0x40, - 0xcc, 0x1a, 0xc5, 0xfe, 0x92, 0xf1, 0x49, 0xf8, 0xb1, 0x7f, 0x86, 0xe5, - 0xe2, 0x90, 0x2c, 0x5c, 0x5b, 0x2c, 0x54, 0x11, 0x5c, 0x33, 0x2d, 0xcc, - 0x9c, 0xca, 0xfe, 0xfc, 0xc4, 0x27, 0xd2, 0xc5, 0xc6, 0xee, 0xb1, 0x7f, - 0x1e, 0x13, 0x3c, 0x75, 0x8b, 0xdb, 0x0b, 0x65, 0x8b, 0xf1, 0xb2, 0x59, - 0xc5, 0x8b, 0x98, 0x0b, 0x15, 0x28, 0x8c, 0xc2, 0xd7, 0x20, 0x62, 0x8b, - 0xe1, 0xb3, 0x74, 0xb1, 0x7f, 0x3f, 0x4f, 0xbc, 0x86, 0xb1, 0x70, 0xb7, - 0x58, 0xa6, 0x3e, 0xc2, 0x23, 0xe1, 0x85, 0xe7, 0x0c, 0xeb, 0x17, 0xc5, - 0xc0, 0xf8, 0xb1, 0x7e, 0xcc, 0xff, 0x9d, 0x62, 0xff, 0x11, 0x4f, 0x47, - 0x6f, 0x2c, 0x5f, 0xfa, 0x0e, 0x30, 0xfd, 0xd6, 0xee, 0x75, 0x8b, 0xff, - 0x99, 0xfc, 0x2d, 0x37, 0x0c, 0x08, 0x96, 0x2f, 0xff, 0x7f, 0x08, 0x9b, - 0xd2, 0x5e, 0x8e, 0xc5, 0x8a, 0x1a, 0x65, 0xae, 0x4f, 0x11, 0x9f, 0xd0, - 0xfc, 0x8d, 0x73, 0x76, 0x58, 0xbf, 0xdb, 0x67, 0xa4, 0x9c, 0x0b, 0x15, - 0xb9, 0xe6, 0x38, 0xcd, 0xfe, 0x6d, 0x87, 0xf9, 0xe7, 0x4b, 0x17, 0xff, - 0x6d, 0x9e, 0x92, 0x70, 0x67, 0x5e, 0x58, 0xbf, 0xd1, 0x41, 0xb5, 0xb7, - 0xc4, 0xb1, 0x68, 0x96, 0x29, 0x62, 0xf9, 0x88, 0x1e, 0x92, 0xff, 0x04, - 0xea, 0x51, 0x9e, 0x74, 0x58, 0xe5, 0x6b, 0xbd, 0x19, 0x1a, 0x2f, 0x44, - 0xc9, 0x80, 0xce, 0xb2, 0x1b, 0x9b, 0x9e, 0x9c, 0xbf, 0xf0, 0xa6, 0x68, - 0x52, 0x80, 0xb7, 0xbf, 0x1e, 0xe4, 0x6a, 0x3e, 0x84, 0xbc, 0x71, 0x10, - 0x71, 0x82, 0xdf, 0xff, 0xfc, 0x2e, 0xa1, 0x18, 0xc5, 0xec, 0x3f, 0x07, - 0xf9, 0xd0, 0xd9, 0x82, 0x58, 0xbd, 0xd8, 0x0e, 0xb1, 0x7f, 0xa4, 0xde, - 0xa1, 0xe9, 0x09, 0x62, 0xfd, 0x21, 0x6a, 0x4e, 0xb1, 0x50, 0x3e, 0x02, - 0x37, 0xbd, 0x21, 0x46, 0x77, 0xc4, 0x50, 0x63, 0xfd, 0x46, 0x32, 0xba, - 0x72, 0x91, 0x30, 0x50, 0xfd, 0xf4, 0x62, 0xf7, 0xff, 0xa3, 0x0e, 0xd0, - 0x8c, 0xcd, 0x6e, 0xcd, 0xba, 0xa4, 0x69, 0x2f, 0xff, 0x46, 0x1d, 0xa1, - 0x19, 0x9a, 0xdd, 0x9b, 0x75, 0x48, 0xe2, 0x5e, 0x01, 0x4a, 0xc5, 0xfa, - 0x0e, 0x40, 0x75, 0x8b, 0xf4, 0x33, 0xd0, 0x82, 0xc5, 0xfe, 0xed, 0x3f, - 0x30, 0xa6, 0x0b, 0x17, 0xff, 0xb7, 0xdb, 0x3e, 0xd8, 0x52, 0x2e, 0xff, - 0x8b, 0x17, 0xed, 0x6e, 0xcd, 0xba, 0xa4, 0x81, 0x2f, 0xf0, 0x98, 0xb7, - 0x80, 0xe3, 0xd6, 0x2f, 0xff, 0xd9, 0xa9, 0xe7, 0xa1, 0x84, 0xe3, 0x80, - 0xe3, 0xd6, 0x2f, 0x34, 0x23, 0x20, 0x98, 0xbe, 0x28, 0x00, 0xdf, 0x87, - 0x17, 0xff, 0x9e, 0x4e, 0xc3, 0xd4, 0xfb, 0xf8, 0x35, 0x8b, 0xee, 0x17, - 0x50, 0x58, 0xb4, 0x64, 0xaa, 0x77, 0xc1, 0xce, 0x89, 0xdc, 0xa4, 0xf1, - 0xa6, 0xfd, 0x47, 0xc9, 0x37, 0x46, 0xf1, 0xb2, 0xc5, 0xef, 0xb9, 0xd6, - 0x2f, 0xb7, 0x66, 0xdd, 0x52, 0x70, 0x17, 0xf8, 0x7f, 0x98, 0xec, 0xd4, - 0xac, 0x56, 0x8f, 0x9c, 0x8c, 0x6e, 0xeb, 0x8b, 0x17, 0xc6, 0xee, 0xc3, - 0x58, 0xba, 0x43, 0x58, 0xbf, 0x8b, 0x3d, 0xbb, 0xf1, 0x62, 0xe9, 0x75, - 0x8b, 0x86, 0x25, 0x8b, 0xf6, 0x7f, 0x76, 0xd9, 0x62, 0xff, 0xbc, 0x52, - 0x06, 0xf0, 0xa5, 0x62, 0xf0, 0x9a, 0x0b, 0x16, 0x82, 0xd0, 0x57, 0xcd, - 0x99, 0x0e, 0xdf, 0xe2, 0x84, 0xb8, 0xf0, 0xeb, 0x15, 0x1b, 0x2a, 0x60, - 0x19, 0x16, 0x42, 0x13, 0xa2, 0x17, 0x19, 0xd1, 0x29, 0xc6, 0x3e, 0x5c, - 0x01, 0x62, 0x18, 0xe1, 0x57, 0x9a, 0xc4, 0x41, 0x7e, 0x84, 0x61, 0xbd, - 0xe9, 0xab, 0x17, 0xe7, 0x1f, 0xdc, 0xd5, 0x8b, 0xb3, 0xb2, 0xc5, 0xe3, - 0x63, 0x1b, 0x73, 0xc2, 0xf1, 0x4d, 0x46, 0x26, 0xd5, 0x30, 0xbc, 0x77, - 0x6b, 0xfd, 0xde, 0x46, 0xfd, 0xec, 0x01, 0x07, 0x58, 0xbf, 0x8f, 0x3e, - 0x14, 0x4c, 0xb1, 0x7d, 0xe6, 0x6d, 0x96, 0x2f, 0x75, 0x0e, 0x2c, 0x52, - 0xc5, 0x99, 0x8d, 0x58, 0x07, 0xef, 0xd1, 0x42, 0x4a, 0x0b, 0x14, 0xb1, - 0x58, 0x6d, 0x48, 0xa6, 0xfd, 0x86, 0x96, 0x01, 0x62, 0xc0, 0x58, 0xa8, - 0x1b, 0xa2, 0x28, 0xbc, 0x0c, 0x09, 0x62, 0xf8, 0xa7, 0x3e, 0xb1, 0x52, - 0x6f, 0xf6, 0x1e, 0xb9, 0xe3, 0x3b, 0xe2, 0x7e, 0x92, 0x89, 0xd1, 0x7e, - 0x93, 0x89, 0x6b, 0xcb, 0x21, 0xaf, 0xde, 0xfb, 0xee, 0xb1, 0x7f, 0xbd, - 0xd6, 0xef, 0xcf, 0xba, 0xc5, 0xe3, 0x7e, 0xeb, 0x15, 0x87, 0xa8, 0x23, - 0x6a, 0x8f, 0x44, 0x99, 0x39, 0x5f, 0xb5, 0xbb, 0x36, 0xea, 0x91, 0x24, - 0xba, 0x11, 0x92, 0x7b, 0x98, 0x4b, 0x5f, 0x4e, 0x5d, 0xa3, 0x68, 0xbf, - 0xa0, 0xda, 0xdb, 0xe2, 0x58, 0xbf, 0x72, 0x40, 0x1e, 0xcb, 0x17, 0xe9, - 0x36, 0x30, 0x79, 0x11, 0xed, 0xf0, 0xc2, 0xff, 0x4e, 0x46, 0x1d, 0x9b, - 0xb9, 0x62, 0xa3, 0x11, 0xfe, 0xf0, 0x84, 0x24, 0x3b, 0xf6, 0x04, 0x01, - 0x71, 0x62, 0xe0, 0x80, 0xb1, 0x7f, 0xdf, 0x9d, 0x67, 0x8a, 0x4e, 0xb1, - 0x7c, 0x6e, 0x98, 0x25, 0x8a, 0xdc, 0xf7, 0x5c, 0xe2, 0xff, 0x37, 0x8b, - 0x36, 0x62, 0x58, 0xbf, 0x4c, 0x45, 0x23, 0x58, 0xb8, 0xd0, 0x96, 0x2f, - 0x17, 0x52, 0xb1, 0x7f, 0x3e, 0xc2, 0x8b, 0xa9, 0x58, 0xbf, 0x36, 0xb6, - 0x1c, 0xac, 0x54, 0x9e, 0xd4, 0x0c, 0x69, 0x62, 0xf9, 0xba, 0x87, 0x16, - 0x2d, 0x9a, 0x36, 0x04, 0x19, 0x7f, 0xfe, 0x11, 0x31, 0xbe, 0x36, 0x4a, - 0x19, 0xf7, 0x3a, 0xc5, 0xcd, 0xd2, 0xc5, 0xdd, 0x62, 0xc5, 0xf8, 0xed, - 0xf7, 0x89, 0x62, 0x9c, 0xf0, 0x58, 0x62, 0xb4, 0x7f, 0x3e, 0x59, 0xbc, - 0xfa, 0x82, 0xc5, 0xff, 0xfb, 0x37, 0x9f, 0xc9, 0xf7, 0xfb, 0xfb, 0x30, - 0xeb, 0x17, 0xe3, 0xeb, 0x07, 0xe5, 0x8b, 0xfc, 0xc3, 0x9e, 0xce, 0x5b, - 0x2c, 0x5f, 0x02, 0x5e, 0x25, 0x8b, 0xfb, 0xa0, 0xfc, 0x52, 0x05, 0x8b, - 0xfb, 0xaf, 0x49, 0x67, 0x16, 0x2a, 0x4f, 0x79, 0xcc, 0x2a, 0x51, 0xfe, - 0xe5, 0x20, 0x35, 0x14, 0x20, 0x6f, 0xed, 0xbe, 0xe0, 0x17, 0x16, 0x2f, - 0xbf, 0x24, 0x6a, 0xc5, 0x31, 0xe9, 0xf7, 0x18, 0x5f, 0x98, 0x88, 0x5b, - 0x2c, 0x58, 0x6b, 0x14, 0xb1, 0x7d, 0x9d, 0x85, 0x2b, 0x16, 0xd9, 0xcd, - 0x81, 0x06, 0x56, 0xc7, 0xd0, 0xc8, 0x57, 0x34, 0x66, 0xcb, 0xbd, 0xe3, - 0x2a, 0xc7, 0x63, 0x48, 0xb7, 0x32, 0xe8, 0xa1, 0xc6, 0xa2, 0x77, 0xd2, - 0x89, 0xc9, 0x5a, 0x19, 0xe0, 0x22, 0x21, 0xde, 0x46, 0xab, 0xe8, 0x49, - 0x84, 0x49, 0x1d, 0x09, 0x0b, 0xff, 0xb6, 0x8c, 0xeb, 0xbb, 0x0b, 0x3e, - 0xdc, 0x58, 0xad, 0x9f, 0x7b, 0x7e, 0x17, 0x95, 0xa9, 0xba, 0xb4, 0x4b, - 0xe0, 0x95, 0xad, 0xc9, 0xc3, 0xdf, 0x4e, 0x60, 0xf6, 0x9e, 0x25, 0xee, - 0x8c, 0x46, 0xfa, 0x3f, 0xef, 0x1e, 0xb1, 0x7e, 0xd7, 0x88, 0x5e, 0x58, - 0xbf, 0xf1, 0xad, 0x19, 0x9a, 0xdd, 0x9b, 0x75, 0x49, 0xa8, 0x5f, 0x72, - 0x7d, 0xc5, 0x8b, 0xff, 0x34, 0x23, 0x33, 0x5b, 0xb3, 0x6e, 0xa9, 0x15, - 0x4b, 0x04, 0xb1, 0x79, 0xfa, 0x82, 0xc5, 0x39, 0xb1, 0xf8, 0x9d, 0x2c, - 0x54, 0xa6, 0xe7, 0x85, 0x26, 0x94, 0xf4, 0xa2, 0x72, 0x3f, 0x42, 0x07, - 0xb8, 0x82, 0xff, 0xfd, 0x86, 0xf3, 0x78, 0x34, 0xc6, 0xf1, 0xa8, 0xc3, - 0x3f, 0x1c, 0xb1, 0x7f, 0xff, 0xff, 0x77, 0xc1, 0x6d, 0xb3, 0x47, 0xc7, - 0xe4, 0xc3, 0xfd, 0xff, 0x4f, 0x33, 0x1b, 0xc6, 0xa3, 0x0c, 0xfc, 0x72, - 0xc5, 0xfc, 0x03, 0x0c, 0xfc, 0x74, 0x63, 0xa6, 0x2f, 0xd9, 0xa6, 0xa3, - 0x13, 0xd5, 0xef, 0x23, 0x84, 0xbf, 0xb3, 0x5b, 0xb3, 0x6e, 0xa9, 0x0a, - 0x4b, 0xff, 0x33, 0x1f, 0x34, 0x02, 0x10, 0x16, 0x2f, 0xfb, 0xdc, 0xcd, - 0x00, 0x84, 0x05, 0x8b, 0x89, 0x96, 0x2a, 0x4f, 0x40, 0x67, 0x57, 0xf9, - 0xfa, 0xf3, 0x31, 0xf8, 0xb1, 0x77, 0x19, 0x62, 0xf7, 0x25, 0x96, 0x2a, - 0x07, 0xcf, 0x86, 0x8e, 0x2f, 0x7c, 0x5b, 0x4e, 0x96, 0x2f, 0xe6, 0x07, - 0x3d, 0x9b, 0xac, 0x54, 0x9e, 0x91, 0x11, 0xdf, 0xb0, 0x7b, 0x60, 0x4b, - 0x17, 0x1e, 0x33, 0xe9, 0xef, 0x94, 0x23, 0xb9, 0x08, 0x8f, 0x3f, 0xf6, - 0x20, 0xa8, 0xc5, 0x50, 0x0d, 0x28, 0x6e, 0xfd, 0xad, 0xd9, 0xb7, 0x54, - 0x86, 0x85, 0xfc, 0x4e, 0x3d, 0x3e, 0xcb, 0x16, 0x8c, 0xc3, 0xe5, 0x73, - 0x7b, 0xff, 0x01, 0xe7, 0xd1, 0x9f, 0xc7, 0xfa, 0xc5, 0xe8, 0xd7, 0x1d, - 0x1b, 0xac, 0x5f, 0x77, 0x9d, 0xf7, 0x1a, 0xe3, 0x5a, 0xc5, 0xf3, 0xfd, - 0xce, 0xb1, 0x70, 0xbe, 0xb1, 0x7d, 0x1a, 0xfb, 0xee, 0x35, 0xc6, 0xb5, - 0x8b, 0xda, 0x98, 0x96, 0x2f, 0xdf, 0x68, 0x9c, 0xeb, 0x14, 0xe7, 0x8e, - 0x71, 0xeb, 0xfe, 0xc3, 0xbe, 0xb3, 0x91, 0x4a, 0xc5, 0xef, 0x67, 0xd6, - 0x28, 0x67, 0xad, 0xe3, 0x9b, 0xfd, 0xef, 0x3b, 0x76, 0x9f, 0x2c, 0x5f, - 0xff, 0xe1, 0x73, 0xf8, 0x30, 0xc3, 0xe3, 0x87, 0xe7, 0xe4, 0x41, 0xac, - 0x54, 0xa2, 0x75, 0x8d, 0x6f, 0xff, 0x44, 0xef, 0xf8, 0xb3, 0xd3, 0xe9, - 0x1a, 0xc5, 0x9d, 0x62, 0xf3, 0xb0, 0x49, 0x17, 0xfd, 0x3f, 0x9d, 0xb5, - 0x38, 0x35, 0x8b, 0xff, 0x4c, 0xf6, 0x92, 0x98, 0xa6, 0x25, 0x8b, 0xf4, - 0x5c, 0x6c, 0xf2, 0xc5, 0xfe, 0xd6, 0xa7, 0xae, 0x7c, 0x6b, 0x16, 0xfc, - 0x9e, 0xfb, 0x94, 0xdf, 0xff, 0x4f, 0xe6, 0x2e, 0x0b, 0xc2, 0x14, 0x53, - 0xd9, 0x62, 0xa5, 0x59, 0x1b, 0xbb, 0xc7, 0xc2, 0xfe, 0x22, 0x1d, 0x25, - 0x9c, 0x47, 0xe3, 0xa4, 0x73, 0xe8, 0x4f, 0xf6, 0x26, 0xbf, 0x9f, 0x91, - 0x66, 0xa5, 0x62, 0xe1, 0xec, 0xb1, 0x7d, 0xbb, 0x36, 0xea, 0x92, 0x7c, - 0xbf, 0xf7, 0xdb, 0xdc, 0x6e, 0x98, 0x80, 0xb1, 0x7f, 0x70, 0x39, 0x0b, - 0x52, 0xb1, 0x67, 0xd1, 0xf7, 0x9c, 0xfe, 0xef, 0x4a, 0xc5, 0xfc, 0xfe, - 0x16, 0x9b, 0x8b, 0x15, 0xa4, 0xc3, 0x3f, 0x0a, 0x0f, 0x13, 0xf6, 0x17, - 0xbe, 0x0b, 0x78, 0xbb, 0xd5, 0x8b, 0xff, 0xc2, 0xe7, 0xda, 0x13, 0xe2, - 0x90, 0x71, 0x62, 0xff, 0xb3, 0xb7, 0xde, 0x3b, 0x34, 0x6a, 0xc5, 0xef, - 0xbf, 0xb4, 0x88, 0x9e, 0x25, 0x5f, 0xfa, 0x33, 0xf9, 0xf6, 0xec, 0xfc, - 0xe9, 0x62, 0xff, 0x7d, 0xf4, 0xfe, 0x68, 0x96, 0x29, 0xcf, 0xe6, 0x24, - 0x5b, 0xfc, 0xfe, 0x7f, 0x7c, 0x5e, 0x58, 0xbf, 0xff, 0x0b, 0x6d, 0x49, - 0x93, 0xd8, 0x51, 0x36, 0xa7, 0xb2, 0xc5, 0xf0, 0x04, 0x2d, 0x2c, 0x5f, - 0x49, 0xf4, 0xcb, 0x17, 0xfa, 0x7d, 0xf6, 0x88, 0xcc, 0x58, 0xbf, 0xb3, - 0xcf, 0xe6, 0x89, 0x62, 0xff, 0xe9, 0x9d, 0x4f, 0x1f, 0x5a, 0x7e, 0x2c, - 0x54, 0x48, 0xa6, 0xe1, 0xaf, 0x8b, 0xaa, 0x24, 0xf4, 0x34, 0x44, 0x73, - 0x40, 0x2e, 0x91, 0x27, 0xa1, 0x91, 0x7f, 0x66, 0x6f, 0xec, 0xdd, 0x62, - 0xed, 0x7d, 0x62, 0xff, 0x9a, 0x0e, 0x3f, 0xcc, 0x38, 0xb1, 0x7e, 0x17, - 0xbd, 0x3d, 0x96, 0x2f, 0xfe, 0x98, 0xa2, 0x70, 0x4c, 0x51, 0x60, 0x16, - 0x2d, 0x3a, 0x3f, 0x32, 0x2b, 0xbe, 0xec, 0xfc, 0xe9, 0x62, 0xdf, 0x73, - 0xcc, 0x62, 0x6b, 0xbe, 0x25, 0x8a, 0xc3, 0x7c, 0x22, 0x6b, 0x77, 0x2c, - 0x5f, 0xb3, 0xee, 0x5e, 0x58, 0xb9, 0xa2, 0x58, 0xb9, 0xbc, 0xb1, 0x7f, - 0xe2, 0x17, 0xdf, 0x59, 0xc8, 0xa5, 0x62, 0xa2, 0x3d, 0x63, 0x8b, 0xdf, - 0xdc, 0x26, 0xdb, 0x69, 0x58, 0xbf, 0xff, 0xff, 0x4f, 0x9c, 0x9b, 0x9c, - 0xcf, 0x7d, 0x8f, 0xfc, 0x29, 0x9e, 0x30, 0xbb, 0x2c, 0x5f, 0x34, 0x4f, - 0xf5, 0x8b, 0xff, 0xda, 0xc7, 0x8b, 0x82, 0x9e, 0x8a, 0x7c, 0xb1, 0x7e, - 0xec, 0x28, 0xf9, 0x02, 0xc5, 0x4a, 0xa1, 0x98, 0x0a, 0xf4, 0x4e, 0xed, - 0xd1, 0xe4, 0x7a, 0x2f, 0x3c, 0x20, 0x7c, 0x46, 0x24, 0xbb, 0xde, 0x16, - 0x96, 0x2f, 0xe1, 0x16, 0x00, 0x5c, 0x58, 0xae, 0x8f, 0x33, 0x83, 0xd7, - 0xfe, 0xf6, 0x85, 0x17, 0x37, 0x68, 0xb8, 0xb1, 0x58, 0x7c, 0xe2, 0x23, - 0xb8, 0x01, 0xac, 0x5f, 0xf4, 0x53, 0x00, 0xc0, 0x01, 0x41, 0x62, 0xfe, - 0x29, 0xf1, 0x4f, 0x96, 0x2a, 0x08, 0x82, 0xc1, 0x96, 0x3d, 0xbd, 0x13, - 0xf1, 0x62, 0xf9, 0xe7, 0x58, 0xb1, 0x7e, 0x9f, 0x75, 0x9e, 0x93, 0x7f, - 0xf1, 0xeb, 0xff, 0x44, 0x22, 0xdb, 0x9b, 0xb4, 0x5c, 0x58, 0xa9, 0x44, - 0x0e, 0x1e, 0xdc, 0xdc, 0x58, 0xbf, 0x0a, 0x28, 0x98, 0xd5, 0x8b, 0xfe, - 0xf4, 0xf4, 0xd1, 0x6a, 0x7b, 0x2c, 0x54, 0x7a, 0x20, 0x38, 0x2f, 0xe2, - 0xca, 0x58, 0xbf, 0xb4, 0x28, 0x16, 0x74, 0xb1, 0x7b, 0xef, 0xa5, 0x8a, - 0x8d, 0x8f, 0x63, 0x03, 0x04, 0x5f, 0x6c, 0x58, 0xb4, 0x64, 0x6e, 0xd8, - 0xfd, 0xf7, 0x85, 0x9d, 0xe9, 0xe4, 0x68, 0x45, 0x1a, 0xc6, 0x26, 0x5d, - 0x3e, 0xd0, 0x9a, 0x19, 0x76, 0x46, 0x4a, 0x6a, 0x2e, 0xf0, 0xb5, 0x79, - 0x4f, 0xb1, 0x2e, 0xe8, 0xbc, 0xe3, 0x1f, 0x8c, 0xd9, 0xa5, 0x1c, 0x94, - 0x67, 0x5c, 0x85, 0x1f, 0xa1, 0xdc, 0x28, 0x50, 0xc7, 0x42, 0x2f, 0xb8, - 0xce, 0xff, 0xf4, 0x61, 0xda, 0x11, 0x99, 0xad, 0xd9, 0xb7, 0x54, 0x8d, - 0x45, 0xff, 0xd0, 0x29, 0x8c, 0x98, 0xb0, 0x85, 0x8b, 0x17, 0xed, 0x6e, - 0xcd, 0xba, 0xa4, 0xbb, 0x2e, 0xc2, 0x58, 0xac, 0x3c, 0xd7, 0x37, 0xba, - 0x3f, 0xcb, 0x17, 0xff, 0xb3, 0xb9, 0xfc, 0xf0, 0x30, 0xa7, 0xdc, 0x58, - 0xbf, 0xfa, 0x4e, 0x1f, 0x9c, 0x85, 0x0c, 0xe2, 0xc5, 0xe2, 0x21, 0xac, - 0x5e, 0x3c, 0xfd, 0x62, 0x96, 0x2e, 0x0a, 0x32, 0x08, 0xf2, 0xf8, 0xd8, - 0x13, 0x49, 0x14, 0x43, 0x81, 0x0e, 0xdf, 0xf4, 0x66, 0x7d, 0xf5, 0xe1, - 0x32, 0xc5, 0x46, 0x27, 0x6a, 0xf1, 0x89, 0x71, 0x9e, 0xee, 0xbb, 0x96, - 0x2e, 0x03, 0xac, 0x58, 0x6b, 0x17, 0x49, 0xd6, 0x2b, 0xe6, 0xa7, 0x82, - 0x56, 0x8e, 0x58, 0xb1, 0x2c, 0x56, 0xc6, 0x98, 0xe2, 0xb7, 0x6d, 0x2b, - 0x17, 0xdb, 0xb3, 0x6e, 0xa9, 0x2f, 0x8b, 0xc1, 0x04, 0x12, 0x45, 0x89, - 0x22, 0x30, 0xd0, 0xdf, 0x98, 0x5d, 0xff, 0xc4, 0xb1, 0x5a, 0x45, 0x21, - 0xd4, 0xbc, 0x49, 0x7f, 0xbf, 0x86, 0xb4, 0xf5, 0xdc, 0xb1, 0x7a, 0x13, - 0xd2, 0xc5, 0xf7, 0x40, 0x92, 0x58, 0xbb, 0xee, 0xb1, 0x6c, 0x93, 0x75, - 0xe2, 0x3b, 0x81, 0xf5, 0x8b, 0x85, 0xc5, 0x8b, 0xb3, 0xeb, 0x14, 0x33, - 0x5f, 0x10, 0xc5, 0xcd, 0xd9, 0x62, 0xfa, 0x02, 0x2d, 0x96, 0x2f, 0xe6, - 0xf7, 0x27, 0x36, 0x58, 0xa8, 0x8f, 0x48, 0x22, 0x4b, 0xdc, 0x90, 0x2c, - 0x57, 0xcf, 0x07, 0xc4, 0x96, 0x95, 0x8b, 0xe2, 0x6e, 0xb8, 0xb1, 0x58, - 0x7a, 0xdc, 0x22, 0xf0, 0x8d, 0xe0, 0xb3, 0x4b, 0x16, 0xf2, 0xc5, 0xec, - 0x9e, 0x96, 0x2f, 0xf9, 0xf5, 0x9b, 0x3c, 0x30, 0x6b, 0x17, 0xfb, 0x40, - 0xf7, 0x18, 0x18, 0xb1, 0x4e, 0x8b, 0xad, 0x0f, 0x7c, 0x49, 0x87, 0x44, - 0x73, 0x7b, 0xe4, 0x05, 0x8b, 0xee, 0xef, 0x88, 0x35, 0x8b, 0xd1, 0x64, - 0x4b, 0x16, 0x75, 0x8a, 0xe8, 0xf6, 0x22, 0x28, 0x38, 0xfd, 0xb4, 0xb1, - 0x4b, 0x14, 0xe5, 0xf6, 0x84, 0xa9, 0x62, 0xce, 0xb1, 0x6d, 0x8d, 0x2f, - 0x7e, 0x19, 0x6e, 0xcb, 0x15, 0xf3, 0xf8, 0x63, 0xc1, 0x14, 0x5f, 0x61, - 0x4c, 0x16, 0x2d, 0x19, 0xde, 0x2f, 0x46, 0x77, 0xc1, 0xc9, 0x40, 0xd9, - 0x1e, 0x04, 0x59, 0x0b, 0xcd, 0xcc, 0x22, 0x38, 0xd2, 0xc1, 0xc9, 0x59, - 0x1c, 0x04, 0x45, 0x18, 0x17, 0x21, 0xd1, 0xe4, 0x81, 0x3a, 0xc7, 0x43, - 0x1c, 0x32, 0xeb, 0xff, 0xd1, 0x87, 0x68, 0x46, 0x66, 0xb7, 0x66, 0xdd, - 0x52, 0x3d, 0x96, 0xef, 0xd6, 0x2f, 0xf8, 0x6d, 0xbc, 0xee, 0x22, 0x1a, - 0xc5, 0xff, 0xf3, 0xc3, 0x91, 0xff, 0x16, 0xf9, 0xb1, 0x83, 0xd2, 0xc5, - 0xff, 0xfd, 0x9e, 0x21, 0x6e, 0xd1, 0xf3, 0xd9, 0xb4, 0x37, 0xd2, 0xc5, - 0xff, 0x0d, 0xa3, 0xe7, 0x43, 0x68, 0xf5, 0x8b, 0xe9, 0xee, 0x6e, 0x96, - 0x2f, 0x39, 0x01, 0x62, 0xb6, 0x4d, 0xd2, 0x07, 0x71, 0x2c, 0x69, 0x83, - 0xe7, 0xfd, 0x89, 0xaf, 0xfe, 0x16, 0xa2, 0xd3, 0xec, 0xc7, 0x7e, 0x2c, - 0x5f, 0x9c, 0x73, 0xae, 0x2c, 0x5f, 0xfd, 0x9f, 0xcf, 0x75, 0xbb, 0xeb, - 0xf8, 0xb1, 0x7e, 0xd6, 0xec, 0xdb, 0xaa, 0x4e, 0x12, 0xf8, 0xe2, 0xf7, - 0x16, 0x2f, 0x68, 0x43, 0x58, 0xbf, 0x9e, 0x02, 0x04, 0xc4, 0xb1, 0x58, - 0x79, 0xbf, 0x1e, 0xbf, 0xf3, 0xf6, 0x68, 0xb8, 0xfa, 0x93, 0xac, 0x5f, - 0xd2, 0xfa, 0xd3, 0x84, 0xb1, 0x7f, 0xec, 0x70, 0x48, 0x18, 0x85, 0x8b, - 0x17, 0xbf, 0x91, 0x2c, 0x5b, 0xeb, 0x14, 0x33, 0x60, 0xc3, 0xd6, 0x8c, - 0xef, 0x57, 0x18, 0x26, 0x38, 0xbd, 0x97, 0x20, 0x8e, 0x32, 0x8c, 0x46, - 0x34, 0xdd, 0xdc, 0x62, 0x21, 0x3a, 0x09, 0x17, 0x09, 0xb2, 0xff, 0xe8, - 0xc6, 0x84, 0x66, 0x6b, 0x76, 0x6d, 0xd5, 0x22, 0x79, 0x7f, 0xe7, 0x8a, - 0x32, 0x45, 0x3e, 0x90, 0x2c, 0x5f, 0x7e, 0x48, 0xd5, 0x8b, 0xf6, 0xa2, - 0xcc, 0x09, 0x62, 0xe3, 0x63, 0x22, 0x3c, 0xd0, 0xc8, 0xea, 0x5d, 0x43, - 0xa6, 0xd2, 0xac, 0xa1, 0x09, 0x3c, 0x29, 0x36, 0xb2, 0x3c, 0xde, 0x3a, - 0x6e, 0x97, 0xe2, 0x94, 0x91, 0xa9, 0xec, 0x5f, 0xc6, 0x45, 0xc9, 0xcb, - 0xfe, 0xd0, 0xbb, 0x09, 0x64, 0x38, 0x47, 0xdf, 0xe8, 0xcc, 0xd6, 0xec, - 0xdb, 0xaa, 0x42, 0xa2, 0xfd, 0xad, 0xd9, 0xb7, 0x54, 0x93, 0x25, 0xfc, - 0xff, 0xc6, 0xe8, 0x0b, 0x16, 0x8c, 0xc3, 0xe5, 0x8e, 0x37, 0xbf, 0xfd, - 0x18, 0x76, 0x84, 0x66, 0x6b, 0x76, 0x6d, 0xd5, 0x23, 0x39, 0x7f, 0xfa, - 0x30, 0xed, 0x08, 0xcc, 0xd6, 0xec, 0xdb, 0xaa, 0x48, 0xd2, 0xb6, 0x4e, - 0x54, 0x70, 0xaa, 0x34, 0xb7, 0xcb, 0xf7, 0xfe, 0x68, 0x46, 0x66, 0xb7, - 0x66, 0xdd, 0x52, 0x1d, 0x17, 0x03, 0xb2, 0xc5, 0xfc, 0x59, 0xee, 0x49, - 0xd6, 0x2f, 0x6b, 0x36, 0x58, 0xbd, 0x3e, 0xe2, 0xc5, 0xed, 0x6d, 0x19, - 0xf4, 0x41, 0x70, 0x6b, 0xc5, 0xa1, 0x8f, 0x5f, 0xfe, 0x21, 0x78, 0x46, - 0xfb, 0xad, 0xdf, 0x5c, 0x58, 0xbf, 0xfc, 0x26, 0x78, 0x38, 0x38, 0x2e, - 0x7c, 0x4b, 0x17, 0xd9, 0xa2, 0x95, 0x8b, 0xda, 0x84, 0x66, 0x22, 0xef, - 0x89, 0xfe, 0x4b, 0xa8, 0xc5, 0x44, 0xb3, 0x0d, 0x27, 0x8c, 0x3e, 0xe1, - 0x7d, 0x62, 0xfd, 0x1b, 0x77, 0xba, 0xe7, 0x16, 0x2f, 0x6e, 0x2d, 0xd6, - 0x2e, 0x11, 0x2c, 0x5f, 0xf6, 0x1f, 0x8f, 0x1d, 0x9a, 0x95, 0x8a, 0xdc, - 0xfc, 0xa3, 0xc8, 0x3b, 0x85, 0xef, 0xde, 0x3f, 0xdc, 0x6b, 0x17, 0xdc, - 0x11, 0xdd, 0x62, 0xf4, 0x9c, 0x6b, 0x17, 0x05, 0xf5, 0x8a, 0x73, 0xd9, - 0x22, 0x30, 0x87, 0x6f, 0xd8, 0x43, 0xcd, 0x96, 0x2f, 0xf9, 0xf5, 0xc2, - 0xc1, 0xfe, 0x56, 0x2f, 0x67, 0x43, 0x58, 0xbb, 0x58, 0xb1, 0x7d, 0x33, - 0xbe, 0x0c, 0xda, 0xe8, 0x7a, 0x9d, 0x19, 0x9f, 0x28, 0x26, 0xdb, 0xf6, - 0x6b, 0x71, 0x1a, 0xb1, 0x7f, 0xdb, 0xc9, 0xf1, 0xcf, 0x31, 0xeb, 0x17, - 0xcf, 0xa6, 0x75, 0x8b, 0xff, 0x16, 0x1a, 0xd1, 0x73, 0xf2, 0x35, 0x8b, - 0xd1, 0x37, 0x96, 0x2f, 0xb7, 0x66, 0xdd, 0x52, 0x4d, 0x17, 0x82, 0x6f, - 0xac, 0x5f, 0xd3, 0xbe, 0x6f, 0xf1, 0x2c, 0x5b, 0x3a, 0x3c, 0xe3, 0x8f, - 0x5f, 0xfb, 0x08, 0x72, 0x67, 0x7c, 0xec, 0x07, 0x58, 0xba, 0x49, 0x62, - 0xb8, 0x7b, 0xbd, 0x91, 0xef, 0xcf, 0xcf, 0x67, 0xd6, 0x2f, 0xf3, 0xeb, - 0x22, 0x91, 0x77, 0xeb, 0x14, 0x35, 0x4d, 0xf8, 0x56, 0x69, 0xe3, 0x90, - 0xc4, 0x81, 0xa1, 0xe2, 0x7f, 0xe4, 0x21, 0x7c, 0x49, 0xd8, 0xa2, 0xfb, - 0x4c, 0x37, 0x58, 0xbf, 0xfd, 0xbb, 0x6b, 0x9f, 0x67, 0xe7, 0x33, 0x8b, - 0x17, 0xff, 0xfd, 0x85, 0xee, 0x3e, 0xf8, 0x5c, 0xdf, 0xef, 0xfd, 0xc3, - 0xd9, 0x62, 0xff, 0xb8, 0xdd, 0x64, 0x53, 0xfe, 0x2c, 0x59, 0xfe, 0x8f, - 0x12, 0x4b, 0xf3, 0x5d, 0xfe, 0xd6, 0xdc, 0xd6, 0xa4, 0x25, 0x8b, 0xfb, - 0x36, 0xcd, 0xf0, 0x6b, 0x17, 0xff, 0x19, 0xbf, 0xdf, 0xfb, 0xb7, 0x3f, - 0x2b, 0x15, 0xf4, 0x71, 0x31, 0xa1, 0x1b, 0xf0, 0xbe, 0xff, 0xdf, 0x72, - 0xdb, 0x82, 0x9d, 0x44, 0xb1, 0x7f, 0xfe, 0xcd, 0xa7, 0x8f, 0xac, 0x33, - 0x1c, 0xa4, 0xeb, 0x15, 0x04, 0x4a, 0xf9, 0x06, 0xf7, 0xa7, 0x8b, 0x17, - 0x1e, 0x0b, 0x15, 0x26, 0xd6, 0x03, 0xb7, 0xec, 0xdf, 0xd9, 0xba, 0xc5, - 0x84, 0xb1, 0x58, 0x6f, 0x22, 0x2a, 0xbe, 0xf7, 0x18, 0x0b, 0x17, 0xee, - 0xef, 0xe1, 0x1a, 0xb1, 0x73, 0x74, 0xb1, 0x7f, 0xa7, 0xdc, 0xd3, 0x9f, - 0x16, 0x2f, 0x03, 0xce, 0xb1, 0x7f, 0xb9, 0xbb, 0xeb, 0x4f, 0xb2, 0xc5, - 0x4a, 0x3b, 0x70, 0x8f, 0x72, 0xce, 0x86, 0x18, 0xcf, 0x83, 0xb7, 0xff, - 0xf6, 0xc2, 0xd4, 0x5c, 0xda, 0x62, 0xe7, 0xf0, 0x6f, 0xd9, 0x62, 0xff, - 0xff, 0x7d, 0x8d, 0x2c, 0x87, 0xe6, 0x19, 0xf2, 0xc6, 0xd9, 0x62, 0xf8, - 0xd9, 0x2d, 0xd6, 0x2f, 0xfb, 0x34, 0xd2, 0xe5, 0x27, 0x58, 0xbf, 0xfb, - 0xf3, 0xbb, 0xef, 0x80, 0x3c, 0xe9, 0x62, 0xff, 0xff, 0xfa, 0x7a, 0xdf, - 0xf8, 0x67, 0xf3, 0x7f, 0xbf, 0xf0, 0x98, 0xdc, 0xed, 0x3d, 0x2c, 0x5f, - 0xb6, 0x33, 0xe0, 0xec, 0xb1, 0x5b, 0x2a, 0x14, 0x1b, 0x19, 0xac, 0x1c, - 0x24, 0xf1, 0xb7, 0x64, 0x60, 0xe1, 0x07, 0x7f, 0xb9, 0x31, 0xf9, 0xd9, - 0xf4, 0xb1, 0x7f, 0xb7, 0xfb, 0x83, 0xee, 0x75, 0x8a, 0x39, 0xf6, 0xf6, - 0x38, 0xbf, 0x8c, 0x92, 0x37, 0xee, 0xb1, 0x7d, 0x85, 0x21, 0x2c, 0x5f, - 0x3f, 0x01, 0x8b, 0x17, 0xcf, 0xb6, 0x0d, 0x62, 0xa0, 0x89, 0x68, 0x8b, - 0xf4, 0x45, 0xe2, 0x2a, 0xc4, 0xf5, 0x5e, 0x1b, 0xad, 0x0b, 0xab, 0xb4, - 0x25, 0x8b, 0xec, 0xf8, 0x7a, 0x58, 0xa3, 0x9b, 0xc2, 0x18, 0xbb, 0x68, - 0xf5, 0x8b, 0x85, 0xd2, 0xc5, 0xc7, 0x8e, 0x58, 0xbf, 0x98, 0xb7, 0x33, - 0x6e, 0x2c, 0x51, 0xa8, 0x81, 0x38, 0xe0, 0x06, 0x44, 0x37, 0x7f, 0xb7, - 0xdc, 0x5a, 0x07, 0xc4, 0xb1, 0x7f, 0x49, 0x7a, 0x3b, 0x3c, 0xb1, 0x7f, - 0xcc, 0x0d, 0xdf, 0x5a, 0x7d, 0x96, 0x2f, 0xf3, 0x01, 0xbd, 0xec, 0xfa, - 0xc5, 0x41, 0x13, 0xd1, 0x18, 0x04, 0x77, 0x7d, 0xf7, 0xcd, 0x2c, 0x5d, - 0xf1, 0x2c, 0x5a, 0x0b, 0x17, 0xfb, 0x6c, 0xdf, 0xc4, 0xd1, 0x2c, 0x54, - 0x68, 0x9c, 0x56, 0x43, 0x59, 0xcc, 0x80, 0x45, 0xd8, 0x60, 0x31, 0x2b, - 0xdf, 0x08, 0x0b, 0x16, 0xf2, 0xc5, 0x39, 0xb1, 0xf8, 0xfd, 0xc3, 0x95, - 0x8b, 0xff, 0xf7, 0xb8, 0x1f, 0x35, 0x23, 0xcf, 0xef, 0x85, 0xb2, 0xc5, - 0x49, 0xf8, 0x60, 0xbd, 0xfd, 0x2e, 0x06, 0xf0, 0x96, 0x2f, 0xfd, 0x80, - 0xcc, 0x8a, 0x22, 0x91, 0xac, 0x5f, 0xfb, 0x40, 0x19, 0x4c, 0x3f, 0xc0, - 0x2c, 0x56, 0x26, 0xb8, 0x78, 0x48, 0x7c, 0x80, 0x8b, 0x44, 0x7f, 0x7b, - 0xd3, 0x05, 0x8b, 0xfe, 0x17, 0xbf, 0x91, 0x42, 0x7a, 0x58, 0xbf, 0xfc, - 0x4d, 0xec, 0xf7, 0x33, 0xf9, 0x1f, 0xe5, 0x8a, 0xfa, 0x29, 0x48, 0x77, - 0xb1, 0xe5, 0xff, 0x9f, 0x5a, 0x7d, 0xb8, 0xe0, 0xe2, 0xc5, 0xa2, 0x58, - 0xb9, 0xbe, 0xb1, 0x7d, 0xf6, 0x21, 0xac, 0x5d, 0x31, 0x2c, 0x56, 0x1b, - 0xa0, 0x11, 0x56, 0xc8, 0x84, 0x80, 0x98, 0x14, 0x6f, 0xff, 0xec, 0x8f, - 0x62, 0x07, 0x37, 0xfb, 0xff, 0x24, 0xbc, 0xb1, 0x74, 0x9a, 0xb1, 0x7b, - 0xb3, 0xe9, 0x62, 0xc4, 0xb1, 0x58, 0x6c, 0x18, 0x7e, 0xf8, 0x5c, 0x73, - 0xac, 0x5e, 0x8d, 0x51, 0xaa, 0x35, 0x2c, 0x50, 0x0f, 0x4f, 0x84, 0x76, - 0x68, 0x91, 0x28, 0x07, 0x2b, 0xf9, 0xe4, 0xfb, 0x60, 0x4b, 0x17, 0xff, - 0xd9, 0xef, 0xe4, 0x34, 0xc5, 0xef, 0xb4, 0x16, 0x2e, 0x90, 0x2c, 0x5f, - 0xe6, 0xea, 0x77, 0x7d, 0xe3, 0x34, 0x89, 0x52, 0x2f, 0x0d, 0x3e, 0xb1, - 0x5b, 0xd6, 0xe6, 0x2f, 0x0c, 0x48, 0x8c, 0x7e, 0xba, 0x50, 0xdc, 0xe4, - 0x2f, 0xaf, 0x34, 0x5c, 0x58, 0xbf, 0x17, 0x3f, 0x91, 0xeb, 0x16, 0xd2, - 0xc5, 0x61, 0xbd, 0x0c, 0xae, 0xfc, 0x0f, 0xcc, 0x38, 0xb1, 0x7f, 0x87, - 0x23, 0x21, 0x30, 0x6b, 0x17, 0x88, 0x46, 0xac, 0x5e, 0x09, 0xb6, 0x58, - 0xbf, 0xe9, 0x03, 0x78, 0x01, 0x94, 0x16, 0x2b, 0xe7, 0xb2, 0x43, 0xf5, - 0x28, 0xf5, 0x19, 0x49, 0x1a, 0x79, 0xde, 0xd1, 0x91, 0xa3, 0x73, 0x81, - 0xdf, 0x51, 0x89, 0x85, 0x36, 0xc6, 0xd0, 0x84, 0x10, 0xe1, 0xf5, 0x92, - 0xa7, 0x4d, 0x84, 0x9e, 0xf1, 0xfa, 0xf5, 0x0d, 0x07, 0x58, 0x89, 0x73, - 0x51, 0x87, 0x7e, 0x70, 0xfd, 0x9d, 0x01, 0x0a, 0x12, 0x8f, 0x23, 0x91, - 0xf8, 0x7a, 0x71, 0xb4, 0x4e, 0x91, 0xcb, 0x61, 0xc6, 0x2d, 0x68, 0x2c, - 0x5d, 0xb4, 0x72, 0xc5, 0xff, 0xf6, 0x79, 0xfe, 0x2f, 0xb3, 0xf5, 0xc9, - 0x35, 0x62, 0xf9, 0xc8, 0x0e, 0xb1, 0x7d, 0xbb, 0x36, 0xea, 0x92, 0xa8, - 0xa8, 0x1e, 0x96, 0x88, 0x6f, 0xfc, 0xd0, 0x8c, 0xcd, 0x6e, 0xcd, 0xba, - 0xa4, 0x6d, 0x2f, 0xfc, 0xcf, 0xe8, 0x4e, 0xb4, 0xd0, 0x58, 0xb4, 0x64, - 0x6c, 0x9c, 0x0e, 0xc2, 0x43, 0x1c, 0xc8, 0x51, 0x9c, 0x8b, 0xea, 0x17, - 0xfa, 0x33, 0x35, 0xbb, 0x36, 0xea, 0x92, 0xfc, 0xbf, 0x6b, 0x76, 0x6d, - 0xd5, 0x26, 0x31, 0x77, 0x74, 0x16, 0x2d, 0x19, 0x87, 0xa5, 0x11, 0xbd, - 0xff, 0xef, 0xce, 0xd9, 0x0f, 0xcb, 0xeb, 0x09, 0x62, 0xfc, 0xf9, 0x09, - 0x82, 0xc5, 0xdb, 0x46, 0x44, 0x7e, 0x1c, 0x49, 0xbf, 0xec, 0x8a, 0x0d, - 0xad, 0xbe, 0x25, 0x8b, 0xc2, 0x2f, 0x2c, 0x5f, 0x83, 0xd0, 0x73, 0x12, - 0xc5, 0xc0, 0x75, 0x8b, 0xdf, 0x93, 0x56, 0x28, 0xd3, 0x6b, 0xb8, 0xbd, - 0xde, 0xe2, 0xc5, 0xce, 0x75, 0x8a, 0x93, 0x5f, 0xc1, 0x8b, 0xf7, 0x8a, - 0x73, 0xa5, 0x8a, 0x1a, 0x6a, 0x98, 0x79, 0xf1, 0xde, 0x30, 0xf9, 0x48, - 0x32, 0x0b, 0xe3, 0x3c, 0xdf, 0x58, 0xb8, 0xa2, 0x58, 0xbf, 0xd0, 0xc2, - 0x06, 0x60, 0xd6, 0x2f, 0xfb, 0x69, 0xe3, 0x03, 0x8e, 0x35, 0x8b, 0xf3, - 0xe8, 0x38, 0xb8, 0xb1, 0x6f, 0x2c, 0x5f, 0x0a, 0x19, 0xc5, 0x86, 0x2c, - 0xaf, 0xf0, 0xb3, 0x5b, 0xfd, 0xf8, 0xb1, 0x50, 0x4c, 0x3f, 0x46, 0x5f, - 0x3a, 0x23, 0xde, 0x18, 0xdf, 0xf8, 0xd1, 0x7b, 0x9e, 0xeb, 0x77, 0x25, - 0x8b, 0xf4, 0xff, 0xf3, 0xd2, 0xc5, 0xfc, 0xef, 0x21, 0x4c, 0x4b, 0x17, - 0xf4, 0x85, 0x1c, 0x1f, 0xd9, 0x62, 0xdd, 0xfa, 0xc5, 0x68, 0xf2, 0x84, - 0x67, 0x7e, 0x1c, 0x69, 0x1a, 0x11, 0xab, 0x17, 0xde, 0xe3, 0x74, 0xb1, - 0x51, 0xb9, 0xec, 0x49, 0xa5, 0xfd, 0x17, 0x5c, 0x7e, 0xb8, 0xb1, 0x7f, - 0x85, 0xb4, 0x50, 0x9d, 0x6c, 0xb1, 0x4e, 0x7d, 0x44, 0x65, 0x76, 0xbc, - 0xb1, 0x79, 0x9c, 0x4b, 0x17, 0xba, 0x6e, 0xe5, 0x8b, 0xe6, 0x86, 0x0d, - 0x62, 0xfe, 0xf6, 0x68, 0x78, 0x4b, 0x14, 0x33, 0xcf, 0xf1, 0x15, 0x4a, - 0x24, 0xb1, 0xc2, 0xe8, 0x62, 0xc5, 0xfc, 0xcd, 0xef, 0x67, 0xd6, 0x2f, - 0xff, 0x61, 0xc9, 0x8d, 0x2c, 0x01, 0x81, 0x46, 0xcb, 0x14, 0x6a, 0x25, - 0x74, 0x2e, 0x45, 0xb7, 0xff, 0x13, 0x75, 0xc3, 0xb7, 0xb8, 0x28, 0x2c, - 0x5f, 0xfb, 0x1f, 0xb6, 0x17, 0x50, 0xcf, 0x2c, 0x5f, 0xe0, 0xa4, 0x26, - 0x2e, 0xbc, 0xb1, 0x7e, 0xd7, 0xbf, 0x9b, 0x2c, 0x5b, 0xcb, 0x15, 0x27, - 0xe5, 0x86, 0xdf, 0x2a, 0xbf, 0xbc, 0xe7, 0xea, 0x1c, 0x58, 0xb4, 0x64, - 0xaf, 0x52, 0x40, 0x93, 0x23, 0x27, 0x35, 0x2b, 0xa4, 0x37, 0x29, 0xd3, - 0xc1, 0xde, 0xbf, 0x09, 0x06, 0x20, 0x00, 0xc1, 0x42, 0xbb, 0x90, 0xb6, - 0xf1, 0x80, 0x48, 0xc1, 0xc2, 0xcb, 0xb8, 0xb6, 0xf6, 0x9f, 0x4b, 0x17, - 0xf9, 0xcc, 0xf7, 0xde, 0x40, 0xb1, 0x68, 0xc9, 0x3d, 0x1f, 0x0e, 0xd4, - 0x63, 0x22, 0x17, 0x53, 0xdf, 0x80, 0x8d, 0x7e, 0xa5, 0x94, 0xa2, 0xf4, - 0xa0, 0xcb, 0xf6, 0xb7, 0x66, 0xdd, 0x52, 0x6a, 0x97, 0xed, 0x6e, 0xcd, - 0xba, 0xa4, 0x82, 0x2e, 0xdb, 0xeb, 0x17, 0xfc, 0x53, 0xee, 0x45, 0x07, - 0x89, 0x62, 0xf3, 0x42, 0x33, 0x11, 0x16, 0x03, 0x7f, 0x0c, 0xdf, 0xa4, - 0x28, 0xec, 0xd2, 0xc5, 0xa3, 0x31, 0x33, 0x13, 0xc3, 0x08, 0x34, 0x3b, - 0xef, 0x69, 0xbe, 0xb1, 0x7f, 0x7d, 0xf6, 0xd8, 0x5c, 0x58, 0xbe, 0x86, - 0x7b, 0x75, 0x8b, 0xdb, 0xe9, 0xd6, 0x2f, 0xb2, 0x27, 0x3a, 0xc5, 0xe7, - 0x0f, 0xcb, 0x17, 0xfe, 0x11, 0x7b, 0xf9, 0xdc, 0xe0, 0xc5, 0x8b, 0xfd, - 0xbb, 0xf3, 0x07, 0xb7, 0x4b, 0x17, 0xda, 0x9f, 0x71, 0x62, 0xf1, 0x66, - 0xcb, 0x17, 0xf7, 0xf2, 0x0e, 0x0c, 0x58, 0xb6, 0x0c, 0xfb, 0x77, 0x23, - 0xf0, 0xed, 0xfd, 0x27, 0x6e, 0xbd, 0x05, 0x8b, 0xfd, 0x9f, 0xe6, 0x89, - 0xf7, 0x58, 0xac, 0x54, 0xa9, 0xb9, 0x1f, 0x46, 0x2e, 0x49, 0x10, 0xf6, - 0x88, 0xce, 0x3d, 0xf4, 0x12, 0x85, 0x27, 0x0d, 0x7c, 0x5f, 0x7a, 0x29, - 0xd9, 0x62, 0xf9, 0xfe, 0xdc, 0x58, 0xbf, 0xf6, 0x19, 0xe8, 0x67, 0xfe, - 0xd0, 0x58, 0xbd, 0xf7, 0xf2, 0xc5, 0xda, 0xf2, 0xc5, 0xfd, 0x91, 0x71, - 0xfa, 0x09, 0x62, 0xff, 0x3c, 0x74, 0xfb, 0xed, 0x12, 0xc5, 0xec, 0xfc, - 0x64, 0xa6, 0x3d, 0x01, 0xf1, 0x91, 0x44, 0x80, 0xc3, 0xa4, 0x31, 0xc3, - 0x1b, 0x98, 0x28, 0xc5, 0x46, 0x9e, 0x8e, 0xf6, 0xfe, 0xef, 0xaf, 0x79, - 0xe8, 0xec, 0xfa, 0xc5, 0xfc, 0x40, 0x98, 0xf6, 0x3a, 0xc5, 0xfe, 0x36, - 0x18, 0xff, 0x68, 0x96, 0x2a, 0x4f, 0x95, 0xcc, 0x2f, 0xdf, 0xcd, 0xe4, - 0xeb, 0x17, 0xa4, 0xa2, 0x58, 0xbf, 0xfd, 0x14, 0xf6, 0x6d, 0x73, 0x8f, - 0xac, 0x35, 0x62, 0xf3, 0x66, 0x96, 0x2f, 0xf3, 0xc5, 0x3d, 0x9b, 0x5c, - 0x58, 0xb7, 0x16, 0x2a, 0x4f, 0x20, 0x8d, 0xaf, 0xfe, 0x90, 0x0b, 0xdc, - 0x29, 0xee, 0x9d, 0x96, 0x2e, 0xd4, 0xac, 0x54, 0x13, 0x97, 0x19, 0x06, - 0xe5, 0x2e, 0x3b, 0xa4, 0xef, 0xb2, 0x76, 0x20, 0xee, 0x48, 0xbd, 0xf6, - 0xe2, 0xc5, 0xcf, 0xc5, 0x8b, 0xf3, 0x90, 0xa7, 0x4b, 0x14, 0xe7, 0xb7, - 0xe1, 0xd1, 0x0b, 0xdf, 0xec, 0xed, 0xee, 0x16, 0x41, 0x62, 0xfe, 0xed, - 0xee, 0x16, 0x41, 0x62, 0xfd, 0xfc, 0x26, 0x88, 0xc3, 0xe5, 0xc3, 0x5b, - 0xcc, 0xdb, 0xaa, 0x4e, 0x22, 0xff, 0x9f, 0xb7, 0xf7, 0x7e, 0x60, 0xd6, - 0x2b, 0x73, 0xe6, 0xd1, 0x55, 0xff, 0x31, 0xf8, 0xf9, 0xd9, 0xb4, 0xb1, - 0x7f, 0x09, 0xba, 0x1e, 0x69, 0x62, 0x9d, 0x33, 0x0d, 0x42, 0x90, 0x88, - 0xf8, 0x75, 0x7f, 0xff, 0xbe, 0xe3, 0x29, 0x6d, 0x82, 0x6f, 0xf0, 0xce, - 0x4f, 0x16, 0x2f, 0xff, 0xd0, 0x0f, 0xf0, 0x6f, 0x30, 0x04, 0x4d, 0xd8, - 0x6b, 0x17, 0x07, 0x12, 0xc5, 0xff, 0x73, 0x1c, 0x01, 0xf9, 0xbe, 0xb1, - 0x7c, 0xd1, 0x39, 0xd6, 0x2f, 0xee, 0xb7, 0x7e, 0x7d, 0xd6, 0x2b, 0x64, - 0x53, 0xfc, 0x68, 0x8e, 0xbc, 0x47, 0x7f, 0xfd, 0x09, 0xf0, 0x0c, 0xcf, + 0x17, 0xdf, 0x90, 0x04, 0xb1, 0x7f, 0xfd, 0xb8, 0xdc, 0xb6, 0xe7, 0xbb, + 0xdd, 0xff, 0x12, 0xc5, 0xc3, 0xed, 0x62, 0xe2, 0xdf, 0x0f, 0xbc, 0xd5, + 0x6b, 0xe6, 0xea, 0xc2, 0x58, 0xbc, 0xfc, 0x75, 0x8a, 0x1a, 0x60, 0x2d, + 0x09, 0x3e, 0x17, 0x78, 0x92, 0xfe, 0xcd, 0xe7, 0xf2, 0x75, 0x8a, 0x95, + 0xdb, 0x4c, 0x86, 0x13, 0xc6, 0x87, 0xa4, 0x43, 0xba, 0xb4, 0x22, 0x01, + 0x08, 0xd2, 0x1f, 0xe1, 0xa8, 0xa3, 0x1d, 0x09, 0x0a, 0xff, 0xd2, 0x18, + 0x05, 0x08, 0x37, 0xc4, 0xb1, 0x7b, 0x30, 0xd5, 0x8b, 0xe8, 0x48, 0x38, + 0xb1, 0x43, 0x3c, 0x0c, 0x1d, 0xad, 0x91, 0x45, 0xdc, 0x20, 0x6f, 0xbc, + 0x26, 0x25, 0x8b, 0xff, 0xf1, 0xe2, 0xd4, 0xff, 0x3d, 0x30, 0x6e, 0x83, + 0x95, 0x8b, 0xb3, 0x4b, 0x17, 0xee, 0x3b, 0x31, 0xab, 0x14, 0x61, 0xbf, + 0xec, 0x5e, 0xff, 0xff, 0xd8, 0x37, 0xe6, 0x77, 0xe3, 0xb1, 0x1b, 0xfc, + 0xce, 0x72, 0x56, 0x2f, 0xf4, 0x91, 0x8f, 0xef, 0xca, 0xc5, 0xf8, 0x7f, + 0x90, 0x09, 0x62, 0xe9, 0x82, 0xc5, 0xb5, 0x03, 0xc0, 0xd1, 0x4d, 0xef, + 0xb4, 0x4b, 0x17, 0xff, 0xe6, 0xe7, 0x31, 0xb7, 0xf7, 0xd8, 0xfa, 0xcd, + 0x96, 0x2f, 0xf3, 0x8d, 0xfa, 0xf9, 0x27, 0x58, 0xbf, 0xee, 0x7b, 0x99, + 0x11, 0x48, 0xd6, 0x2a, 0x55, 0x53, 0x6d, 0x09, 0x78, 0x11, 0x8d, 0xb3, + 0x1c, 0xf7, 0x28, 0xd0, 0xf7, 0xd5, 0xfc, 0x6d, 0x7f, 0xfc, 0xe6, 0xe3, + 0x9f, 0x52, 0x2e, 0xbd, 0xbf, 0xc5, 0x8b, 0xfc, 0xd0, 0xc1, 0xeb, 0x9c, + 0x58, 0xbd, 0x81, 0x8d, 0x62, 0xff, 0xd3, 0xb0, 0x70, 0x9e, 0x8e, 0x40, + 0x58, 0xbf, 0xec, 0xdb, 0xf9, 0x17, 0xdc, 0xd5, 0x8b, 0xfb, 0x3b, 0x06, + 0x7b, 0x8b, 0x17, 0xe9, 0x2e, 0xe1, 0xc5, 0x8f, 0x9a, 0xfa, 0x94, 0xc1, + 0x06, 0x3c, 0x48, 0x42, 0x6b, 0xbf, 0xfe, 0x9c, 0xe6, 0x17, 0xbf, 0x83, + 0x17, 0xb8, 0xb1, 0x74, 0xfd, 0x62, 0x88, 0xf9, 0xb8, 0x9f, 0x7f, 0xfe, + 0xcd, 0xdb, 0xc6, 0x66, 0xb6, 0x3e, 0x73, 0x92, 0xb1, 0x50, 0x3f, 0x9f, + 0x10, 0xde, 0x3c, 0xc1, 0x62, 0xf6, 0xbb, 0x65, 0x8b, 0xef, 0xfe, 0x49, + 0x62, 0x8e, 0x78, 0x1c, 0x1e, 0xbf, 0x9f, 0xcd, 0xf0, 0xa3, 0xd6, 0x2f, + 0xff, 0xff, 0xfe, 0xd6, 0x03, 0xdf, 0x63, 0x99, 0xc1, 0x3c, 0x04, 0x6f, + 0xda, 0x06, 0x78, 0x5e, 0x7f, 0x73, 0xee, 0xb1, 0x7c, 0xe6, 0xe0, 0xd6, + 0x2f, 0x1b, 0x83, 0x58, 0xbb, 0x0e, 0x61, 0xe0, 0xb9, 0x1d, 0x6c, 0x9e, + 0x26, 0x2e, 0x9a, 0x45, 0xa3, 0x2f, 0x43, 0x9a, 0xfd, 0xb4, 0x76, 0x6a, + 0x56, 0x2f, 0xfe, 0x6d, 0x6d, 0xf7, 0xd6, 0x17, 0x7b, 0xac, 0x54, 0x9f, + 0x9c, 0x0b, 0x2f, 0xe8, 0xbf, 0x9c, 0x62, 0x58, 0xbf, 0xbb, 0x80, 0x7c, + 0x9c, 0x58, 0xac, 0x3d, 0xe7, 0x2e, 0xbc, 0x07, 0xfa, 0xc5, 0xff, 0x87, + 0x9d, 0xc3, 0x9e, 0xe3, 0x01, 0x62, 0xb4, 0x7f, 0xc0, 0x20, 0x10, 0xed, + 0xe7, 0x8e, 0x95, 0x8b, 0xfb, 0x9f, 0x68, 0x43, 0xeb, 0x14, 0xc7, 0x9c, + 0x21, 0xfb, 0xee, 0x73, 0x02, 0x58, 0xbf, 0xf0, 0x7d, 0x99, 0xf6, 0xef, + 0xc1, 0x81, 0x62, 0xff, 0x04, 0x3f, 0xe7, 0x4c, 0xd2, 0xc5, 0xfe, 0xc2, + 0xfe, 0x7a, 0x46, 0xb1, 0x7f, 0xf3, 0x9c, 0xcd, 0xfe, 0xff, 0xdd, 0xf8, + 0xb1, 0x7f, 0xb2, 0x18, 0x2e, 0xbd, 0x89, 0x62, 0xff, 0xe9, 0x87, 0xe7, + 0xbf, 0x4f, 0xda, 0x3d, 0x62, 0xff, 0xb7, 0xc2, 0x33, 0x9c, 0x78, 0x96, + 0x2f, 0xdd, 0xe7, 0x9f, 0x8b, 0x14, 0xe7, 0xca, 0xc7, 0x97, 0xff, 0xfd, + 0xb6, 0x74, 0x2c, 0xe6, 0x0f, 0xf8, 0x43, 0xd3, 0xf7, 0x05, 0x8b, 0xf8, + 0x1c, 0xf1, 0x64, 0x16, 0x2b, 0x11, 0x2e, 0xcd, 0x35, 0x2a, 0x9b, 0x5c, + 0xdf, 0x46, 0x5f, 0x48, 0x23, 0x7e, 0x42, 0xb7, 0xd0, 0xb7, 0xbf, 0xff, + 0xce, 0x59, 0xdf, 0x8d, 0x6f, 0x7e, 0x7f, 0x9d, 0x1a, 0x0b, 0x17, 0xcc, + 0x0f, 0x75, 0xeb, 0x17, 0xfb, 0x0f, 0x14, 0x18, 0xb6, 0x58, 0xbd, 0x98, + 0x4b, 0x15, 0xb3, 0x2c, 0x30, 0x6a, 0xbb, 0xc6, 0x71, 0xdc, 0x63, 0x6f, + 0x1f, 0x34, 0x50, 0xc4, 0xd4, 0x3f, 0x4e, 0xfb, 0xf2, 0x10, 0x12, 0x7a, + 0x55, 0x9f, 0x46, 0xd0, 0x98, 0xc3, 0x28, 0xea, 0x35, 0xbf, 0x8b, 0x36, + 0xda, 0x63, 0xd6, 0x2f, 0xc7, 0xf1, 0x64, 0x16, 0x2f, 0xfa, 0x47, 0xfc, + 0xde, 0x5b, 0xeb, 0x17, 0xfd, 0x3a, 0xe1, 0x61, 0xe7, 0x75, 0x8b, 0xb7, + 0xfa, 0xc5, 0xec, 0x1c, 0x6c, 0xb1, 0x71, 0x4a, 0xc5, 0xfb, 0x9f, 0x90, + 0xb8, 0xb1, 0x7f, 0x1b, 0xdf, 0xbe, 0xff, 0x58, 0xa1, 0x9e, 0xde, 0x8a, + 0xaf, 0xf3, 0xea, 0x7a, 0x03, 0x90, 0x58, 0xbf, 0xff, 0xc2, 0x3b, 0xf0, + 0xb3, 0x5a, 0xc8, 0xbf, 0x9a, 0xce, 0xd6, 0x28, 0x68, 0x98, 0xd1, 0xb5, + 0xd2, 0x75, 0x8a, 0x93, 0x75, 0xf2, 0x3a, 0x82, 0x74, 0xff, 0x22, 0x67, + 0x1f, 0x43, 0xd2, 0xff, 0xb8, 0xdf, 0x71, 0xee, 0xfb, 0x2c, 0x5f, 0xe6, + 0x86, 0x0f, 0x9c, 0x95, 0x8b, 0xfb, 0xdf, 0x93, 0xc4, 0x4b, 0x15, 0x28, + 0x9d, 0xc3, 0xb0, 0x19, 0xd4, 0x6e, 0xd9, 0x77, 0xcc, 0xac, 0x8c, 0xa5, + 0xc8, 0x9b, 0x0f, 0xdd, 0xcc, 0xbb, 0x28, 0x73, 0x9d, 0x1c, 0xb4, 0x78, + 0x02, 0x86, 0xfd, 0xc5, 0xe5, 0x8b, 0xc2, 0xd6, 0xcb, 0x17, 0xff, 0xfa, + 0x79, 0x80, 0xe4, 0xb9, 0x4f, 0xdc, 0x5d, 0x7c, 0x9d, 0x62, 0xfd, 0x22, + 0xe3, 0xf4, 0x58, 0xb8, 0x46, 0xac, 0x5c, 0x37, 0xd1, 0xe1, 0xfc, 0xaa, + 0xf6, 0xe2, 0x95, 0x8b, 0xc1, 0x37, 0xd6, 0x2f, 0x60, 0x19, 0x62, 0xa5, + 0x36, 0x18, 0x0b, 0x8c, 0x7f, 0x21, 0x4c, 0xe5, 0xba, 0x1e, 0xf8, 0xf5, + 0xf6, 0x0b, 0x5b, 0x2c, 0x5f, 0xfb, 0xa3, 0xf8, 0x02, 0x2e, 0x38, 0xd6, + 0x2f, 0xd2, 0xe3, 0x68, 0x96, 0x2f, 0xd3, 0xdf, 0xa7, 0x4b, 0x17, 0xec, + 0xe7, 0xc5, 0xb2, 0xc5, 0xb4, 0x62, 0x38, 0x30, 0x92, 0x24, 0x13, 0x94, + 0x7c, 0xa6, 0xff, 0xff, 0x34, 0x03, 0x87, 0xf0, 0x5d, 0x7e, 0x11, 0xa4, + 0x59, 0x12, 0xc5, 0x4a, 0x2e, 0x0e, 0xa3, 0x71, 0xdd, 0x62, 0xff, 0x8c, + 0x19, 0x31, 0xa6, 0xb0, 0x4b, 0x17, 0xfd, 0x83, 0xce, 0xe0, 0x1f, 0x00, + 0xb1, 0x7e, 0x7d, 0x42, 0x29, 0x58, 0xbf, 0xfb, 0xf8, 0x4c, 0x6f, 0xdf, + 0xd0, 0x75, 0x8a, 0xd2, 0x2a, 0x7e, 0x79, 0xc2, 0x9a, 0x94, 0xcb, 0x70, + 0x5d, 0xe1, 0xcd, 0x7f, 0xc4, 0x68, 0x7a, 0xce, 0x8d, 0xa5, 0x8b, 0xdb, + 0x3e, 0x96, 0x29, 0xcf, 0x6c, 0x8f, 0x6f, 0xf9, 0xb9, 0xe2, 0xce, 0x60, + 0xd6, 0x2b, 0x0f, 0x60, 0x44, 0x16, 0x75, 0x8a, 0xf9, 0xb2, 0x8e, 0x21, + 0xbf, 0xfe, 0x16, 0xe1, 0xf6, 0x06, 0xe3, 0x69, 0xfb, 0x02, 0xc5, 0xfa, + 0x7e, 0x58, 0x6a, 0xc5, 0x39, 0xfe, 0xfd, 0x56, 0xfd, 0x31, 0x7d, 0xf4, + 0xb1, 0x7f, 0xb5, 0xbf, 0xdc, 0xa6, 0x0b, 0x17, 0xef, 0x72, 0x41, 0xb2, + 0xc5, 0x49, 0xef, 0x08, 0xd2, 0xff, 0xf6, 0x0e, 0x61, 0x3c, 0xe6, 0x42, + 0x12, 0xb1, 0x7c, 0xda, 0x98, 0x2c, 0x5e, 0x6c, 0xfa, 0xc5, 0xff, 0xf3, + 0x39, 0x03, 0x53, 0xf6, 0x7f, 0x4f, 0xd6, 0x2c, 0xf0, 0x3e, 0x92, 0x1c, + 0xbf, 0xfc, 0xc4, 0x03, 0x39, 0xc9, 0x8a, 0x0f, 0x12, 0xc5, 0x0d, 0x36, + 0x83, 0x90, 0x92, 0x4f, 0xa1, 0x17, 0x1c, 0x4d, 0x7f, 0xff, 0xe9, 0xef, + 0x83, 0xfc, 0xf6, 0x32, 0x90, 0xa2, 0x90, 0x37, 0xb8, 0xb1, 0x7f, 0xff, + 0x4f, 0x9f, 0x77, 0x1f, 0x1b, 0xb8, 0x61, 0x60, 0xd6, 0x2f, 0xcf, 0xee, + 0x0b, 0x65, 0x8b, 0xff, 0x39, 0xe7, 0xd9, 0xd8, 0x0f, 0x2b, 0x17, 0xfe, + 0x80, 0x63, 0x6d, 0xb0, 0xed, 0xc5, 0x8b, 0xfe, 0x84, 0xfe, 0x7d, 0xf6, + 0x3a, 0xc5, 0x49, 0xfd, 0x09, 0x06, 0xff, 0xf1, 0x38, 0x3d, 0xde, 0xef, + 0xa0, 0xe4, 0x6b, 0x17, 0xf8, 0x9f, 0x37, 0x9f, 0x71, 0x62, 0xff, 0xbe, + 0x18, 0xc5, 0xee, 0x02, 0x56, 0x2a, 0x51, 0x78, 0xe9, 0xac, 0x67, 0x7f, + 0xfe, 0x7e, 0xe0, 0x53, 0xfc, 0xe9, 0x3d, 0xff, 0x36, 0x58, 0xbd, 0xe7, + 0xd9, 0x62, 0x86, 0xbb, 0x23, 0xb9, 0x0b, 0xc7, 0xdf, 0x12, 0x96, 0x9c, + 0x0e, 0xb7, 0xf2, 0xa2, 0x85, 0xcf, 0xa1, 0xbb, 0xd0, 0xb4, 0x35, 0x9b, + 0xfc, 0xc3, 0xdf, 0xe2, 0x60, 0xd6, 0x2f, 0x7d, 0xfe, 0xb1, 0x7a, 0x0d, + 0xa5, 0x8b, 0xf0, 0xa4, 0xbd, 0xc5, 0x8b, 0xc7, 0xc1, 0xac, 0x5f, 0xff, + 0x00, 0xf8, 0x7c, 0x26, 0x3c, 0xc0, 0x3e, 0x2c, 0x5c, 0x39, 0x58, 0xbf, + 0x01, 0x9c, 0x6e, 0xb1, 0x52, 0x6f, 0x98, 0x5e, 0xfe, 0xee, 0x0d, 0x9d, + 0xf9, 0x62, 0xf1, 0xb9, 0xd4, 0xb1, 0x7e, 0x9e, 0xf0, 0x2e, 0x2c, 0x54, + 0x9f, 0xdb, 0x98, 0x11, 0x0d, 0xf3, 0x1f, 0x8c, 0xb1, 0x7f, 0xe9, 0x2d, + 0xcc, 0xf7, 0xa7, 0xb8, 0x2c, 0x5e, 0x93, 0xca, 0xc5, 0xfe, 0x67, 0xdc, + 0x9b, 0x37, 0x58, 0xbf, 0x4f, 0xbe, 0xd1, 0x2c, 0x70, 0xd9, 0xd4, 0xaa, + 0xa2, 0xd8, 0x74, 0x65, 0x1d, 0x8e, 0xea, 0x11, 0xc5, 0x09, 0xae, 0x16, + 0x78, 0x8b, 0xa2, 0x14, 0x72, 0x7d, 0xfb, 0x42, 0xdf, 0xf2, 0xb1, 0x7f, + 0x6a, 0x28, 0x3f, 0xb8, 0xb1, 0x52, 0x7b, 0x58, 0x55, 0x73, 0x04, 0xb1, + 0x44, 0x6e, 0x02, 0x20, 0xb7, 0x16, 0x2f, 0x44, 0xe1, 0x2c, 0x5d, 0x9a, + 0x93, 0x62, 0xe2, 0x57, 0xfa, 0x26, 0x89, 0xbb, 0x87, 0x16, 0x2f, 0xe6, + 0xd9, 0xe2, 0x70, 0x96, 0x2f, 0xfc, 0xf2, 0x69, 0x8f, 0xe6, 0x0e, 0x3d, + 0x62, 0xff, 0xfb, 0x3e, 0x60, 0xf2, 0x28, 0x36, 0xb6, 0xf8, 0x96, 0x2e, + 0x60, 0x89, 0x13, 0x1e, 0x44, 0xa9, 0x4d, 0x5f, 0x0a, 0x98, 0xdc, 0xa1, + 0x91, 0x7e, 0xc2, 0xdb, 0x02, 0x58, 0xbf, 0x31, 0xfe, 0xe1, 0x2c, 0x56, + 0xc7, 0xa4, 0x32, 0x9b, 0xff, 0xa7, 0xd8, 0x4e, 0x68, 0x0f, 0x30, 0x58, + 0xbf, 0xe9, 0xd8, 0x38, 0x7c, 0x4d, 0xb2, 0xc5, 0xfe, 0x6f, 0x73, 0x7d, + 0xdf, 0xb5, 0x8b, 0xfe, 0x7d, 0xf2, 0x26, 0x2d, 0xba, 0xd5, 0x8a, 0xc4, + 0xc6, 0xdc, 0x8f, 0x48, 0x8c, 0x7a, 0x46, 0xf6, 0x8d, 0x96, 0x2f, 0xd3, + 0xad, 0x67, 0xd6, 0x2f, 0xfe, 0x9c, 0x2f, 0xcb, 0x81, 0xbc, 0x25, 0x8b, + 0xcd, 0x0f, 0x2c, 0x5f, 0xff, 0x49, 0xa1, 0x63, 0xf4, 0x09, 0x87, 0x38, + 0x75, 0x8b, 0xf8, 0x98, 0xd9, 0x3c, 0xac, 0x57, 0x5a, 0x98, 0xf4, 0x05, + 0xf4, 0x50, 0x74, 0x22, 0x1d, 0x12, 0x9d, 0xc6, 0x9a, 0xb1, 0x7f, 0xd0, + 0x6c, 0x21, 0x78, 0x46, 0xac, 0x5f, 0xc4, 0xdb, 0xe1, 0x6e, 0xb1, 0x7f, + 0xff, 0xd9, 0xec, 0xe9, 0xfc, 0x3b, 0x04, 0x79, 0xff, 0xb1, 0xfa, 0x2c, + 0x56, 0xc8, 0xec, 0xc1, 0xa7, 0x3a, 0x22, 0xeb, 0xd1, 0xaa, 0x3c, 0x0b, + 0x17, 0xff, 0xf0, 0x9b, 0x50, 0x33, 0xf9, 0x14, 0xfb, 0x0f, 0x3f, 0x58, + 0xbf, 0xee, 0x9d, 0xe3, 0xfb, 0xb8, 0x71, 0x62, 0xfa, 0x2e, 0x92, 0x4b, + 0x17, 0xf4, 0x9d, 0xc8, 0x04, 0xb1, 0x7f, 0x71, 0x98, 0x36, 0x0d, 0x62, + 0xf7, 0xe4, 0x96, 0x2f, 0xa0, 0x21, 0xc6, 0x46, 0x89, 0xaf, 0x0c, 0x9f, + 0x17, 0x48, 0xfb, 0x84, 0xbe, 0x2c, 0x0c, 0xbe, 0xfc, 0xf3, 0x11, 0x4a, + 0xc5, 0xd9, 0xf5, 0x8b, 0xc6, 0xb1, 0xd6, 0x2f, 0x1d, 0xbb, 0xeb, 0x0d, + 0xab, 0x0b, 0xde, 0x09, 0xb8, 0xb1, 0x7f, 0x1e, 0x70, 0xbd, 0xc5, 0x8b, + 0xf4, 0xed, 0x90, 0x75, 0x8b, 0xfd, 0x25, 0x8f, 0xb3, 0x71, 0x62, 0xf0, + 0x63, 0x8c, 0x82, 0x67, 0x18, 0xb9, 0xf3, 0x7e, 0x0f, 0x78, 0xb4, 0x32, + 0x8b, 0xe9, 0xce, 0xe0, 0xb1, 0x51, 0x2a, 0x4d, 0xfc, 0x77, 0x80, 0x6e, + 0xbf, 0xdb, 0x3e, 0xfd, 0xc2, 0x7a, 0x96, 0x2f, 0xbc, 0x16, 0xdb, 0x2c, + 0x56, 0xc7, 0xc3, 0x87, 0x57, 0xdf, 0xfe, 0x76, 0xb1, 0x7f, 0x30, 0xe4, + 0xa4, 0x0b, 0x17, 0xcf, 0xcc, 0x1c, 0x9e, 0x84, 0x71, 0x25, 0xf9, 0xb9, + 0xec, 0xfa, 0xc5, 0xbe, 0xb1, 0x7f, 0xe1, 0x0d, 0x88, 0x1e, 0x7e, 0xf8, + 0xb1, 0x7f, 0xfb, 0x05, 0xd7, 0x99, 0x90, 0xfe, 0x3c, 0x38, 0xb1, 0x7f, + 0xff, 0xb4, 0xdc, 0x0f, 0xc5, 0x9d, 0x18, 0x03, 0xd1, 0x30, 0x4b, 0x16, + 0xf4, 0x11, 0xe9, 0xc4, 0x01, 0x28, 0x5e, 0xfb, 0x0d, 0x62, 0xff, 0x9e, + 0x4e, 0x66, 0x0d, 0xfa, 0x2c, 0x56, 0x27, 0x28, 0xf1, 0x83, 0x7c, 0xdb, + 0x83, 0xb7, 0xc6, 0x79, 0xce, 0xb1, 0x52, 0xbe, 0x9c, 0x39, 0x7c, 0xd9, + 0x09, 0xad, 0xdc, 0x9c, 0xe9, 0xa3, 0xbc, 0x12, 0x15, 0xf0, 0xa1, 0xf7, + 0x58, 0xbf, 0xff, 0x3e, 0xf2, 0x7e, 0x36, 0xb0, 0xe2, 0xdd, 0xa0, 0xb1, + 0x7f, 0xcd, 0xa6, 0xf3, 0xe9, 0x80, 0xb1, 0x73, 0xf4, 0x58, 0xbf, 0xd2, + 0x4d, 0xf1, 0x16, 0xcb, 0x17, 0xfe, 0x73, 0x64, 0x6e, 0x4d, 0xa3, 0x56, + 0x2f, 0xff, 0x67, 0x7e, 0xef, 0xce, 0x16, 0x0d, 0xa0, 0xb1, 0x58, 0x88, + 0xc0, 0x1f, 0xdb, 0xeb, 0x17, 0xf3, 0xe8, 0x07, 0x7e, 0x2c, 0x56, 0xc9, + 0xf6, 0x40, 0x8f, 0x75, 0x78, 0xf3, 0x83, 0x8c, 0x94, 0x2f, 0xc4, 0x45, + 0x1c, 0x25, 0x78, 0xfc, 0x25, 0x8b, 0xff, 0xff, 0xbb, 0xe6, 0x41, 0xfd, + 0xfc, 0x20, 0x02, 0x7e, 0x58, 0x36, 0x3a, 0xc5, 0xff, 0xfe, 0xfb, 0x8e, + 0x70, 0xa7, 0xcd, 0xcc, 0xff, 0xdc, 0xeb, 0x17, 0xff, 0xde, 0x93, 0xcf, + 0x9b, 0x99, 0xff, 0xb9, 0xd6, 0x2f, 0xfe, 0xf3, 0xfc, 0x5e, 0x26, 0x00, + 0x19, 0x62, 0xe6, 0x86, 0xe8, 0xf1, 0xed, 0x78, 0x34, 0xfb, 0xef, 0x76, + 0xdf, 0x58, 0xa9, 0x4f, 0x85, 0xc7, 0x4a, 0x36, 0x2f, 0x1f, 0x5d, 0x27, + 0x58, 0xbf, 0xfb, 0x99, 0xdf, 0x9b, 0xd1, 0x33, 0x69, 0x62, 0x86, 0x7b, + 0xbe, 0x17, 0xbf, 0xff, 0xf8, 0x9b, 0x6f, 0x09, 0xbb, 0xf3, 0x84, 0x1f, + 0x9c, 0x85, 0x0c, 0xe2, 0xc5, 0xfc, 0x0c, 0x8a, 0x7b, 0xe2, 0xc5, 0xff, + 0xed, 0xdb, 0x5b, 0x7b, 0x98, 0x10, 0xdc, 0xeb, 0x17, 0xfd, 0x85, 0xb9, + 0x98, 0x37, 0xe8, 0xb1, 0x7f, 0xb0, 0xe6, 0x39, 0xb8, 0x35, 0x8a, 0xf9, + 0xf8, 0xf8, 0xf2, 0xec, 0x09, 0x62, 0xff, 0xfe, 0x60, 0xbf, 0x87, 0x60, + 0xbd, 0xcc, 0x08, 0x6e, 0x75, 0x8a, 0xd1, 0xfb, 0x10, 0xc5, 0xef, 0xe4, + 0x4b, 0x17, 0xfc, 0x2d, 0x33, 0x43, 0xd9, 0xf5, 0x8b, 0xf0, 0x3b, 0x84, + 0xf5, 0x2c, 0x5f, 0xd9, 0xac, 0x8a, 0x4d, 0x58, 0xac, 0x3d, 0xcf, 0x16, + 0xdf, 0xff, 0xfd, 0xcf, 0xcf, 0xe5, 0xfb, 0x06, 0xb0, 0x73, 0xee, 0x39, + 0x77, 0x05, 0x8a, 0x1a, 0xb6, 0x4c, 0x75, 0xdc, 0xc1, 0xe1, 0x7f, 0x14, + 0x26, 0x3e, 0x43, 0xc1, 0xef, 0x42, 0x54, 0x22, 0x1b, 0xc3, 0x73, 0xac, + 0x5f, 0xee, 0xf7, 0x7c, 0xfe, 0xb8, 0xb1, 0x7f, 0xc4, 0xe7, 0x31, 0xc0, + 0x18, 0x16, 0x2b, 0x63, 0xf1, 0x23, 0x6b, 0xfc, 0x69, 0x66, 0xdb, 0x08, + 0x96, 0x2a, 0x57, 0x3f, 0x32, 0x5c, 0x33, 0xc2, 0x41, 0xa1, 0x1c, 0x22, + 0x2b, 0xc0, 0xf7, 0x5e, 0xb1, 0x7a, 0x0f, 0xa5, 0x8b, 0xfe, 0xc2, 0x70, + 0xbf, 0x80, 0x65, 0x8b, 0xff, 0x87, 0x27, 0xe1, 0x37, 0xf3, 0x58, 0xb1, + 0x7f, 0x7d, 0xa1, 0x3c, 0x82, 0xc5, 0xfe, 0xfb, 0xf7, 0xcf, 0x8b, 0x8b, + 0x17, 0xec, 0xef, 0x77, 0xed, 0x62, 0xb0, 0xf8, 0x48, 0xda, 0xb7, 0x45, + 0x78, 0x21, 0x1f, 0x5d, 0xa6, 0xe1, 0xa1, 0xdf, 0x9c, 0x14, 0x3c, 0xaa, + 0x53, 0xd6, 0xc8, 0xe4, 0xef, 0xfe, 0x03, 0xff, 0x8d, 0xbf, 0xe6, 0x3c, + 0x6b, 0x17, 0xff, 0xe6, 0x8f, 0x32, 0x38, 0x52, 0x66, 0x70, 0x84, 0xdb, + 0x2c, 0x50, 0x11, 0x4e, 0x24, 0x9b, 0xff, 0xfb, 0x71, 0x37, 0x7e, 0x30, + 0x3f, 0x39, 0x0a, 0x19, 0xc5, 0x8b, 0xee, 0x33, 0xec, 0xb1, 0x7b, 0x9b, + 0x4a, 0xc5, 0x6c, 0x78, 0x38, 0x47, 0x77, 0x5b, 0x12, 0xc5, 0xff, 0xfd, + 0xec, 0xe8, 0x64, 0x70, 0xa4, 0xcc, 0xe1, 0x09, 0xb6, 0x58, 0xbf, 0xe8, + 0x4f, 0xbd, 0x2c, 0x7d, 0x96, 0x2f, 0xfc, 0xe2, 0xeb, 0xf0, 0x3e, 0x93, + 0x9d, 0xac, 0x56, 0x23, 0x93, 0xb6, 0x30, 0x1d, 0x5f, 0xfe, 0xcf, 0xb3, + 0x1c, 0x9b, 0x4f, 0x3c, 0x58, 0xb6, 0x1c, 0xfd, 0xfa, 0x18, 0x5f, 0xb6, + 0xea, 0x9e, 0xf8, 0xb1, 0x7f, 0xf0, 0x3d, 0xc6, 0x39, 0x67, 0xfe, 0xeb, + 0x17, 0xc0, 0x1e, 0x12, 0xc5, 0x49, 0xf3, 0x32, 0x25, 0x62, 0xb3, 0xce, + 0xc8, 0xde, 0x14, 0x27, 0x22, 0xfc, 0x6f, 0x2c, 0x52, 0x50, 0x94, 0xb4, + 0x4b, 0x17, 0xb0, 0x8d, 0x58, 0xa9, 0x36, 0x18, 0x27, 0x7f, 0xb7, 0x98, + 0x7b, 0xec, 0x35, 0x8b, 0xf6, 0xe5, 0x38, 0x6a, 0xc5, 0xff, 0xfc, 0x0f, + 0xb3, 0xfa, 0x4b, 0x3f, 0x9b, 0x85, 0x9f, 0x58, 0xbf, 0x3c, 0x76, 0x68, + 0xd5, 0x8b, 0xee, 0x85, 0x9c, 0x58, 0xbf, 0x89, 0x8d, 0x2c, 0x02, 0xc5, + 0x39, 0xe8, 0x9c, 0x92, 0xff, 0xec, 0x87, 0xb3, 0xe5, 0x9e, 0xfb, 0xac, + 0x5a, 0x56, 0x2b, 0xe7, 0xa8, 0xc8, 0x77, 0x80, 0x18, 0x16, 0x2d, 0x05, + 0x8b, 0xe9, 0xf7, 0x0c, 0x73, 0x63, 0xe1, 0xfb, 0x8d, 0x82, 0xc5, 0xfb, + 0xef, 0xd1, 0xf7, 0x58, 0xbb, 0x3f, 0x03, 0xc4, 0xdc, 0x66, 0xb6, 0x55, + 0x8d, 0x83, 0xfd, 0x9a, 0xe8, 0xa4, 0xeb, 0x6c, 0xfb, 0xc7, 0x5f, 0x29, + 0x47, 0x3e, 0x5e, 0x08, 0x20, 0x92, 0x2f, 0xfd, 0xa2, 0x13, 0x07, 0x91, + 0x49, 0xd6, 0x23, 0x0d, 0x0d, 0xe8, 0x9c, 0x25, 0x8b, 0xdf, 0x10, 0x16, + 0x2d, 0xf7, 0x37, 0xb1, 0x0f, 0xdb, 0x75, 0x8a, 0x94, 0x65, 0x64, 0x24, + 0x34, 0x4f, 0x7e, 0xc8, 0x49, 0x6e, 0xb1, 0x7f, 0xfb, 0xbf, 0x48, 0x34, + 0xde, 0x70, 0x4c, 0x16, 0x2d, 0x23, 0x3f, 0x30, 0x8a, 0x2a, 0x5d, 0x97, + 0xa6, 0xd1, 0xff, 0xc2, 0x34, 0xf1, 0xc6, 0x31, 0x93, 0xc6, 0x5b, 0xc2, + 0xbb, 0xb3, 0x67, 0x95, 0x7f, 0x1f, 0x19, 0x74, 0x51, 0xd4, 0xea, 0x3a, + 0xc3, 0xc6, 0xcb, 0xfa, 0x44, 0xb3, 0x4a, 0x62, 0x04, 0xa5, 0xf2, 0x9d, + 0x9a, 0xe4, 0xa3, 0x0f, 0x4e, 0x05, 0x8a, 0x5b, 0x48, 0x51, 0xb7, 0x07, + 0x0a, 0x6b, 0xe7, 0xd3, 0x01, 0x62, 0xff, 0x0f, 0xf3, 0xb1, 0x67, 0x6b, + 0x17, 0x87, 0xf9, 0x58, 0xa3, 0x9f, 0xa0, 0x08, 0xb8, 0x6b, 0x7f, 0x60, + 0xc2, 0x6f, 0xc4, 0xb1, 0x7d, 0xad, 0x67, 0xd6, 0x2f, 0xef, 0xbf, 0x57, + 0x50, 0x8d, 0x58, 0xbf, 0x9b, 0x4f, 0xc0, 0x3a, 0xc5, 0x4a, 0x21, 0xb7, + 0x23, 0xf9, 0xb5, 0xba, 0xf5, 0x8b, 0x8b, 0x8b, 0x16, 0x75, 0x8b, 0xfb, + 0x5c, 0xfc, 0x97, 0x96, 0x2e, 0x90, 0x2c, 0x5b, 0xd2, 0x78, 0xbc, 0x2e, + 0xbf, 0xfd, 0xad, 0x83, 0xf3, 0xfc, 0x47, 0x3b, 0x41, 0x62, 0xdd, 0x7a, + 0xc5, 0xff, 0x7a, 0x75, 0xcf, 0xc9, 0x79, 0x62, 0xee, 0x4a, 0xc5, 0xe3, + 0x8e, 0x56, 0x2f, 0xf1, 0x79, 0xa2, 0xe4, 0xf9, 0x62, 0x9c, 0xf4, 0x58, + 0x76, 0xf9, 0xdb, 0x37, 0x58, 0xbf, 0xf6, 0x74, 0x2c, 0xe4, 0x45, 0x23, + 0x58, 0xbe, 0xdc, 0x73, 0xb2, 0xc5, 0xc0, 0x95, 0x8b, 0xdc, 0x7d, 0x2c, + 0x56, 0x1e, 0xc8, 0x09, 0x7c, 0x2f, 0x7f, 0xa1, 0x84, 0xe3, 0xc2, 0x58, + 0xbb, 0x91, 0x92, 0x9f, 0x96, 0x0b, 0xc4, 0x73, 0xf6, 0x80, 0x10, 0x11, + 0x17, 0x21, 0x33, 0xe2, 0xea, 0x65, 0x58, 0x9e, 0x94, 0x81, 0x7d, 0xd8, + 0xdb, 0x65, 0x8b, 0xb9, 0x2b, 0x17, 0x8e, 0x39, 0x58, 0xbf, 0xc5, 0xe6, + 0x8b, 0x93, 0xe5, 0x8a, 0x73, 0xd1, 0x61, 0xdb, 0xe7, 0x6c, 0xdd, 0x62, + 0xff, 0xd9, 0xd0, 0xb3, 0x91, 0x14, 0x8d, 0x62, 0xfb, 0x71, 0xce, 0xcb, + 0x17, 0xf4, 0x40, 0x78, 0xf6, 0x89, 0x62, 0xf3, 0x83, 0x8b, 0x17, 0x02, + 0x56, 0x2f, 0x71, 0xf4, 0xb1, 0x76, 0x44, 0xb1, 0x58, 0x8c, 0x1d, 0xc9, + 0x7e, 0x66, 0x01, 0xdf, 0x0b, 0x86, 0x3b, 0x7f, 0x61, 0x38, 0xf0, 0x96, + 0x2f, 0xd8, 0x44, 0xde, 0x58, 0xbf, 0x6d, 0xec, 0xc3, 0xac, 0x54, 0x0f, + 0xeb, 0xe5, 0x6c, 0x4d, 0x7f, 0x13, 0x0f, 0x0d, 0x8c, 0x95, 0xe6, 0xa8, + 0x0b, 0x8c, 0x5f, 0x15, 0xb7, 0x95, 0xd6, 0xe5, 0x71, 0x12, 0xfd, 0xa0, + 0x04, 0x04, 0x45, 0xc8, 0xc0, 0x7d, 0x0d, 0x2b, 0xff, 0xb5, 0x3d, 0xf0, + 0xa4, 0xf9, 0xdf, 0x96, 0x2f, 0xff, 0xcc, 0x3c, 0xc2, 0x34, 0x32, 0x92, + 0xd9, 0xf4, 0xb1, 0x79, 0xb5, 0xb2, 0xee, 0x12, 0x2f, 0xa1, 0x9d, 0xc1, + 0x77, 0x09, 0x17, 0xb8, 0xe3, 0x5d, 0xc2, 0x45, 0xc1, 0x04, 0xbb, 0x84, + 0x8a, 0xdd, 0x15, 0xb1, 0x15, 0xf8, 0xc4, 0x22, 0xab, 0x9b, 0xc9, 0xb8, + 0x48, 0x46, 0x1e, 0x05, 0xff, 0xff, 0xc3, 0x29, 0x1f, 0xe7, 0xdc, 0x9f, + 0x48, 0xe7, 0xd8, 0x70, 0x04, 0xb1, 0x7f, 0x67, 0xf3, 0x08, 0xd5, 0x8b, + 0xcc, 0x40, 0x31, 0x93, 0xaf, 0x33, 0xd3, 0x5a, 0x86, 0xe9, 0xd1, 0x8a, + 0x34, 0x2e, 0x1c, 0xf9, 0xca, 0xfd, 0xf6, 0x84, 0xc1, 0x62, 0xfa, 0x3b, + 0x1b, 0xeb, 0x17, 0xfc, 0xc4, 0x0c, 0xe8, 0x42, 0x82, 0xc5, 0x47, 0xa6, + 0x23, 0xf8, 0x45, 0x00, 0xa3, 0xc4, 0xb7, 0xfa, 0x20, 0xa7, 0xb1, 0xcf, + 0x16, 0x2b, 0x0f, 0xf5, 0xd1, 0xad, 0x05, 0x8b, 0x88, 0xd5, 0x8b, 0xde, + 0x0f, 0x65, 0x8b, 0x9f, 0x64, 0x8b, 0xd0, 0x16, 0xd8, 0x6e, 0x3c, 0x41, + 0x7f, 0x16, 0x7b, 0x92, 0x75, 0x8b, 0x9f, 0xcb, 0x16, 0xf2, 0xc5, 0xda, + 0x01, 0x86, 0xa5, 0xc5, 0xef, 0x74, 0x9e, 0x2c, 0x5f, 0x30, 0xff, 0x8b, + 0x17, 0x86, 0xe7, 0x58, 0xbf, 0xf7, 0xe7, 0xce, 0x52, 0x79, 0xe2, 0xc5, + 0xdf, 0xdd, 0x62, 0xd1, 0xeb, 0x14, 0x62, 0x69, 0x92, 0xad, 0x85, 0xa6, + 0x8f, 0xb1, 0x17, 0x07, 0x44, 0x7b, 0xd4, 0x33, 0x4e, 0xa9, 0x0e, 0x25, + 0x0f, 0xc6, 0xff, 0x78, 0x0c, 0x75, 0x8b, 0xb0, 0x0b, 0x17, 0xd2, 0x50, + 0x29, 0x36, 0x98, 0x3b, 0x7f, 0xd1, 0x3b, 0x94, 0xe9, 0xb8, 0xb1, 0x7f, + 0xfc, 0x18, 0x1a, 0x1b, 0xfd, 0xfb, 0x84, 0xe7, 0x96, 0x2f, 0x7b, 0x3e, + 0xb1, 0x4b, 0x17, 0x6e, 0xff, 0x45, 0xa1, 0x1c, 0x71, 0x4e, 0x38, 0x76, + 0xfb, 0xda, 0x11, 0xd6, 0x2e, 0x7d, 0x96, 0x29, 0xcd, 0xe7, 0x89, 0x2f, + 0x6e, 0xe3, 0x58, 0xbe, 0x9f, 0x8b, 0x4b, 0x17, 0xff, 0xfc, 0x71, 0x73, + 0x6c, 0x0b, 0x35, 0xb3, 0xf3, 0xf9, 0xe8, 0xec, 0x58, 0xbe, 0xee, 0x05, + 0x2b, 0x17, 0xbe, 0xde, 0x58, 0xad, 0x93, 0x0e, 0x81, 0x04, 0x43, 0xc7, + 0x23, 0x66, 0xde, 0x11, 0xdd, 0x3f, 0x58, 0xb4, 0xac, 0x78, 0xb7, 0xbf, + 0xa0, 0x26, 0xe7, 0xdd, 0x62, 0xff, 0xa7, 0x63, 0xb4, 0x3e, 0xdf, 0x58, + 0xa7, 0x3e, 0x8f, 0x17, 0x5f, 0xf3, 0xf4, 0xc3, 0x0d, 0xd6, 0x71, 0x62, + 0xec, 0xe8, 0xb1, 0x7e, 0xe8, 0xc7, 0xcf, 0xac, 0x5f, 0xf6, 0x7b, 0xbd, + 0xdf, 0x5f, 0xc5, 0x8a, 0xc3, 0xe5, 0xf9, 0x55, 0xa0, 0x91, 0x79, 0xb5, + 0xb2, 0x45, 0x24, 0x54, 0x9b, 0xcd, 0xc4, 0x8e, 0x3d, 0x7a, 0x41, 0xba, + 0x44, 0x61, 0xae, 0xbf, 0xfb, 0xed, 0x02, 0xce, 0x08, 0xd3, 0x84, 0xb1, + 0x43, 0x4e, 0xfb, 0xb3, 0xd3, 0xbf, 0x14, 0x22, 0xfc, 0x63, 0x78, 0xa1, + 0xf5, 0x8b, 0xdd, 0xc3, 0x8b, 0x15, 0x2a, 0x9a, 0xf2, 0x3d, 0xf3, 0xa8, + 0x30, 0xed, 0xfb, 0x0b, 0x67, 0xd2, 0xc5, 0xa3, 0x96, 0x2c, 0xdb, 0x1b, + 0xd2, 0x28, 0xbf, 0x68, 0x07, 0x7e, 0x2c, 0x5f, 0xc1, 0x94, 0x39, 0xf1, + 0xac, 0x61, 0xa9, 0xbf, 0xbd, 0xc0, 0x33, 0x69, 0x62, 0xfa, 0x77, 0x7e, + 0x2c, 0x5f, 0x09, 0xb5, 0x05, 0x8b, 0x1d, 0x62, 0xce, 0xb1, 0x68, 0x0c, + 0xf1, 0xa2, 0x23, 0xe0, 0x95, 0xff, 0xff, 0xde, 0xf4, 0x33, 0xff, 0x68, + 0x47, 0x67, 0x38, 0x2e, 0x7b, 0x98, 0x12, 0xc5, 0xd9, 0x12, 0xc5, 0xf0, + 0x00, 0x2e, 0x32, 0x24, 0x03, 0x78, 0xa9, 0x4e, 0x63, 0x62, 0xec, 0x69, + 0x68, 0x63, 0x5f, 0xfd, 0x9d, 0xfb, 0x8e, 0x52, 0x06, 0x3a, 0xc5, 0xfd, + 0x9a, 0x8b, 0xee, 0x05, 0x8b, 0xff, 0xfb, 0x3d, 0xf7, 0x0a, 0x74, 0xd0, + 0x9e, 0x7f, 0x00, 0xb1, 0x50, 0x44, 0x51, 0x17, 0xdd, 0x01, 0xac, 0x5e, + 0x84, 0xf6, 0xb1, 0x76, 0x0d, 0x62, 0xfb, 0x22, 0x73, 0xac, 0x56, 0xc9, + 0xb0, 0x1b, 0x0c, 0xee, 0xc8, 0xa2, 0x18, 0xf0, 0xf0, 0x42, 0xf7, 0xe9, + 0x8a, 0x12, 0x04, 0x8b, 0x88, 0x0b, 0x17, 0xef, 0xbc, 0x97, 0x96, 0x2d, + 0x1e, 0xb1, 0x6f, 0xb9, 0xbc, 0x11, 0x3d, 0xfd, 0xe7, 0xd3, 0xed, 0x2b, + 0x15, 0x88, 0xa7, 0xdd, 0x4c, 0x32, 0x6b, 0xff, 0xf7, 0xf1, 0xe1, 0xc3, + 0x3d, 0xfc, 0x18, 0xbd, 0xc5, 0x8a, 0xdd, 0x35, 0x9d, 0x43, 0x43, 0xc6, + 0x37, 0x8f, 0x31, 0xeb, 0x17, 0x3c, 0x4b, 0x17, 0xf1, 0x7a, 0x2c, 0xd6, + 0x2c, 0x51, 0xcf, 0x19, 0x86, 0x2b, 0xb4, 0x43, 0x81, 0x9a, 0xd1, 0xad, + 0x62, 0xff, 0xde, 0xfe, 0x0c, 0x5e, 0xe4, 0x52, 0xb1, 0x67, 0x58, 0xbf, + 0xed, 0x85, 0x01, 0xfc, 0x4c, 0x4b, 0x17, 0xf3, 0xc9, 0xf6, 0xc0, 0x96, + 0x2f, 0xd9, 0xb1, 0xf0, 0xeb, 0x17, 0xb8, 0xfa, 0x58, 0xa2, 0x3c, 0x6f, + 0x14, 0xdf, 0xc4, 0xc0, 0x00, 0xb8, 0xb1, 0x7a, 0x4f, 0x18, 0x34, 0xc4, + 0x30, 0x47, 0x47, 0x7c, 0x75, 0xf1, 0x0d, 0x8d, 0xe2, 0x75, 0xe1, 0xc6, + 0xa3, 0x51, 0xad, 0x3f, 0x97, 0x8f, 0x1e, 0xdd, 0x16, 0x2b, 0x17, 0x36, + 0x5e, 0x3b, 0xb6, 0x85, 0xf1, 0x4a, 0x1d, 0x8e, 0x2f, 0xbf, 0xe0, 0x39, + 0x7b, 0xbe, 0x34, 0x7a, 0xc5, 0xfb, 0xf9, 0xb7, 0xb8, 0xb1, 0x5a, 0x3e, + 0x7f, 0x9e, 0xdf, 0xff, 0x73, 0x98, 0x79, 0x8f, 0xd6, 0x3f, 0xe4, 0x6b, + 0x17, 0xa7, 0xbe, 0x2c, 0x54, 0x0f, 0xc3, 0x4a, 0x57, 0xb3, 0x61, 0x2c, + 0x56, 0x23, 0x49, 0xa1, 0x24, 0x44, 0x57, 0x31, 0xd6, 0x2f, 0xfe, 0x88, + 0x98, 0x2d, 0x4b, 0xc1, 0xb8, 0xb1, 0x47, 0x3d, 0xc6, 0x17, 0xbf, 0x16, + 0x00, 0x3e, 0xd6, 0x2f, 0xfe, 0x79, 0xd0, 0x3f, 0x9c, 0x6e, 0xe0, 0xb1, + 0x6f, 0x18, 0x7d, 0xff, 0x2a, 0xbf, 0xdc, 0x2c, 0x8a, 0x13, 0xda, 0xc5, + 0x61, 0xef, 0x78, 0xa6, 0xa5, 0xd0, 0xaf, 0x6c, 0x5f, 0x0a, 0x60, 0xd8, + 0xc8, 0x32, 0x52, 0xa9, 0xad, 0x9d, 0xc3, 0xa1, 0xe3, 0x95, 0xd3, 0x87, + 0xe5, 0x79, 0xb3, 0xf8, 0x13, 0xca, 0x3d, 0x7e, 0x4f, 0x3d, 0x7a, 0x39, + 0x71, 0x42, 0x3a, 0x3a, 0x1d, 0xd7, 0xff, 0xda, 0xd6, 0x0d, 0x8f, 0xf6, + 0xf1, 0x4c, 0x4b, 0x17, 0xc4, 0xc7, 0x02, 0xc5, 0x6c, 0x7e, 0x58, 0xa1, + 0x7f, 0xff, 0xf8, 0x5a, 0x14, 0x44, 0xc0, 0xe7, 0x30, 0xdc, 0x16, 0x98, + 0x73, 0xf9, 0x58, 0xbf, 0xfd, 0xe9, 0xf7, 0x35, 0x25, 0xef, 0xe4, 0x16, + 0x2f, 0xfb, 0x85, 0x9f, 0xf1, 0x48, 0x16, 0x2d, 0xc5, 0x8a, 0xc4, 0x4a, + 0x1a, 0x95, 0xe3, 0x8b, 0xf9, 0xc3, 0x9e, 0xe7, 0xb5, 0x8b, 0xff, 0xfe, + 0x8d, 0x46, 0x42, 0x13, 0xef, 0x19, 0xc2, 0xc7, 0xf3, 0xb0, 0x16, 0x2f, + 0xff, 0xa7, 0x46, 0x61, 0xdb, 0xed, 0xf7, 0xef, 0x8b, 0x17, 0xfa, 0x7e, + 0xfd, 0x43, 0x62, 0x58, 0xbf, 0x63, 0x80, 0x51, 0x2c, 0x18, 0x6d, 0x6f, + 0xe1, 0x4e, 0xb4, 0xfb, 0x2c, 0x5f, 0xfc, 0x23, 0x70, 0xbf, 0x83, 0x1b, + 0xf6, 0xb1, 0x7f, 0x46, 0x3f, 0xb5, 0x90, 0x58, 0xba, 0x63, 0xd6, 0x2b, + 0x74, 0x48, 0xba, 0x34, 0x46, 0x37, 0x60, 0xd6, 0x2f, 0xcf, 0xd0, 0x40, + 0x82, 0xc5, 0x49, 0xe1, 0x7c, 0x5e, 0xff, 0x72, 0x5f, 0x5a, 0xcd, 0x96, + 0x2f, 0xd1, 0x33, 0x6d, 0x8b, 0x17, 0xf4, 0x24, 0x1f, 0x70, 0x96, 0x2f, + 0xb9, 0xc1, 0x76, 0xb1, 0x7e, 0x1f, 0xe4, 0x84, 0xb1, 0x77, 0xf1, 0x62, + 0xa4, 0xf9, 0x18, 0x94, 0x45, 0x17, 0xf8, 0xe5, 0x83, 0x7f, 0xf1, 0x62, + 0xdf, 0x58, 0xbd, 0xe9, 0xd9, 0x62, 0x9c, 0xd8, 0x78, 0x4a, 0xfe, 0x68, + 0x7d, 0xda, 0x0b, 0x15, 0x28, 0xb0, 0xc6, 0x37, 0x20, 0xbd, 0x8e, 0x05, + 0x8b, 0xfc, 0x6b, 0x76, 0x41, 0xc9, 0xd6, 0x2f, 0xfa, 0x33, 0xec, 0x32, + 0x13, 0x6c, 0xb1, 0x78, 0xdd, 0x01, 0x62, 0xb1, 0x12, 0x46, 0x9b, 0x6e, + 0x7b, 0x7e, 0x17, 0x42, 0x68, 0x2c, 0x5f, 0xfe, 0xfc, 0x64, 0xfb, 0x58, + 0x33, 0x33, 0xbf, 0x2c, 0x5c, 0xc4, 0xb1, 0x58, 0x7c, 0xcc, 0xa1, 0x7f, + 0xa7, 0x60, 0xe3, 0x98, 0x80, 0xb1, 0x7f, 0x42, 0x62, 0xc7, 0x02, 0xc5, + 0xa3, 0x3a, 0xe2, 0xf3, 0x8e, 0xcd, 0xd0, 0x84, 0x30, 0xce, 0xb2, 0x18, + 0x06, 0xb9, 0xf6, 0x42, 0xe6, 0x91, 0x14, 0x9e, 0x12, 0x7f, 0x86, 0xef, + 0x5e, 0x5a, 0x50, 0xae, 0xe1, 0x8f, 0xa1, 0x20, 0x19, 0x07, 0x51, 0xc5, + 0xc2, 0x09, 0x62, 0xfa, 0x63, 0xc7, 0x2b, 0x17, 0xde, 0xe3, 0xe9, 0x62, + 0xf7, 0xc4, 0x1a, 0xc5, 0x49, 0xe1, 0x75, 0x11, 0xdf, 0xc2, 0x0f, 0x8f, + 0x84, 0xb1, 0x76, 0x44, 0xb1, 0x70, 0x71, 0x2c, 0x53, 0x9b, 0x26, 0x18, + 0xb4, 0xc4, 0x7f, 0xfc, 0x60, 0xbc, 0x10, 0x41, 0x24, 0x5a, 0x52, 0x23, + 0x0d, 0x0d, 0xd0, 0xd9, 0x62, 0xa0, 0x6f, 0x4e, 0x49, 0x7b, 0xf2, 0x05, + 0x8b, 0xfa, 0x36, 0xfc, 0x82, 0x63, 0xd6, 0x2b, 0xc7, 0xa6, 0x18, 0xed, + 0xf3, 0x4f, 0x47, 0x58, 0xba, 0x23, 0xac, 0x5d, 0x83, 0x58, 0xa9, 0x36, + 0x02, 0x19, 0xbb, 0xfa, 0x58, 0xb8, 0x00, 0x58, 0xbd, 0xf8, 0xd8, 0x25, + 0x8b, 0xe8, 0xb3, 0x37, 0x58, 0xa9, 0x66, 0x25, 0xec, 0x45, 0x08, 0xc3, + 0x46, 0x61, 0x93, 0xd4, 0x26, 0xc6, 0x41, 0xb8, 0xcf, 0x6c, 0xf1, 0x42, + 0x8f, 0x50, 0x86, 0x67, 0x42, 0x23, 0xe2, 0x9f, 0x88, 0x04, 0x31, 0xd0, + 0x60, 0x22, 0x4b, 0xdb, 0xbc, 0xac, 0x5c, 0x2e, 0x2c, 0x5d, 0x9a, 0x58, + 0xad, 0x8d, 0x7e, 0x0c, 0x54, 0x0f, 0xb4, 0x69, 0x97, 0xe6, 0x7d, 0xf3, + 0x4b, 0x17, 0xff, 0x45, 0x9a, 0xd3, 0x45, 0x9a, 0xcf, 0x2c, 0x57, 0xcf, + 0xbb, 0xc5, 0x17, 0xf6, 0xb0, 0x85, 0x3a, 0x58, 0xac, 0x46, 0xfb, 0xc2, + 0x43, 0xc4, 0x57, 0xf8, 0x8e, 0x27, 0x1e, 0x1d, 0x62, 0xff, 0xa0, 0xfe, + 0x84, 0xea, 0x77, 0x58, 0xb4, 0x7a, 0xc5, 0xc5, 0x03, 0x0f, 0x3e, 0x07, + 0x57, 0xe9, 0xd6, 0xb3, 0xeb, 0x17, 0xf7, 0xf8, 0x0f, 0x7b, 0xb5, 0x8a, + 0x94, 0xc2, 0x72, 0x10, 0x46, 0x97, 0x31, 0x45, 0xfd, 0xb4, 0x50, 0x8d, + 0xb5, 0xb2, 0xc5, 0xbc, 0xb1, 0x7f, 0xe8, 0xd7, 0xd6, 0x14, 0xe0, 0x79, + 0xdf, 0x96, 0x2f, 0x7e, 0x7e, 0xb1, 0x7f, 0xf8, 0x07, 0x68, 0x19, 0x23, + 0xd8, 0xf3, 0xa5, 0x8b, 0xe7, 0x92, 0xf2, 0xc5, 0xed, 0x98, 0x96, 0x2e, + 0xd6, 0xcb, 0x16, 0xc5, 0x8a, 0x1a, 0x34, 0xb4, 0x3b, 0xf4, 0xdf, 0x10, + 0x88, 0x74, 0x21, 0x9b, 0xff, 0x1a, 0x2e, 0x41, 0xf5, 0xb0, 0x80, 0xb1, + 0x71, 0x62, 0xc5, 0xe0, 0xfb, 0x25, 0x8b, 0xf3, 0x80, 0xed, 0x05, 0x8b, + 0xec, 0xec, 0x1c, 0x58, 0xad, 0x1e, 0x61, 0x14, 0x5d, 0xd8, 0x4b, 0x17, + 0xd9, 0x1f, 0x27, 0x58, 0xac, 0x3e, 0x06, 0x21, 0xe0, 0xd5, 0xff, 0xbd, + 0x27, 0x30, 0xb0, 0x01, 0xf6, 0xb1, 0x7f, 0xb8, 0xdf, 0xde, 0x5c, 0x6b, + 0x14, 0x6a, 0x78, 0xee, 0x86, 0x71, 0x6f, 0xc3, 0x2c, 0x8b, 0x7c, 0x85, + 0x79, 0xcf, 0x2b, 0x17, 0xa7, 0x78, 0x2c, 0x5d, 0x3c, 0x58, 0xbc, 0xf2, + 0x75, 0x8b, 0x98, 0x6b, 0x14, 0x33, 0xca, 0xd0, 0xbf, 0x87, 0x2f, 0xf6, + 0x9c, 0x23, 0xc8, 0xe5, 0x62, 0xf3, 0x66, 0xeb, 0x17, 0xed, 0xbf, 0x80, + 0x65, 0x8a, 0xd9, 0x15, 0x30, 0x2f, 0x34, 0xd3, 0x43, 0xb7, 0xfc, 0xc1, + 0x0d, 0xcb, 0x60, 0xfb, 0x58, 0xa5, 0x8b, 0xc3, 0xc2, 0x58, 0xa3, 0x9a, + 0x8f, 0x86, 0x5f, 0xfe, 0x0f, 0xc5, 0x20, 0x6f, 0x00, 0x32, 0x82, 0xc5, + 0xdd, 0x06, 0xb1, 0x52, 0x7c, 0xcc, 0x99, 0x7f, 0xee, 0x92, 0x5e, 0xe3, + 0xf4, 0xc1, 0xac, 0x5f, 0xf7, 0x39, 0x85, 0xbb, 0x10, 0x16, 0x2f, 0x40, + 0xa5, 0x62, 0xfb, 0x8e, 0x17, 0x16, 0x2e, 0x7d, 0x18, 0x7f, 0x3d, 0x9c, + 0xf0, 0x72, 0xa5, 0x1e, 0xff, 0x85, 0xdd, 0x2c, 0x5c, 0xfa, 0x58, 0xa8, + 0xd6, 0x68, 0xfe, 0x19, 0x7b, 0x66, 0xf2, 0xc5, 0x46, 0xeb, 0xfc, 0x11, + 0xb1, 0xc4, 0x6b, 0x12, 0xc8, 0xc7, 0x5e, 0x50, 0xfe, 0x97, 0x3e, 0x38, + 0xd1, 0x88, 0x91, 0xff, 0x19, 0x7d, 0x08, 0x71, 0x46, 0x2f, 0xd1, 0x28, + 0x32, 0x7b, 0xff, 0xf7, 0xa4, 0x9c, 0x19, 0xdf, 0xb4, 0xe1, 0x44, 0xeb, + 0x17, 0xe6, 0xc3, 0xce, 0xeb, 0x17, 0x89, 0x80, 0xb1, 0x7f, 0x36, 0xdf, + 0x79, 0x25, 0x8b, 0xc3, 0xfb, 0xac, 0x56, 0x23, 0x94, 0xd5, 0x7f, 0x94, + 0x04, 0x38, 0x19, 0x6d, 0xff, 0x9b, 0xdc, 0x0b, 0x3e, 0x06, 0xf2, 0xc5, + 0xf8, 0x18, 0x36, 0x82, 0xc5, 0xcd, 0xd1, 0x62, 0xdd, 0x16, 0x2c, 0x37, + 0x35, 0xac, 0x33, 0x7d, 0xd0, 0x4c, 0x4b, 0x17, 0xda, 0x3c, 0xf1, 0x62, + 0xff, 0xfb, 0x30, 0xa6, 0x1e, 0xfb, 0x1c, 0xb3, 0xa2, 0xc5, 0xf6, 0x7a, + 0x77, 0x30, 0xfc, 0x88, 0x8e, 0xb6, 0x4f, 0x54, 0x69, 0x9a, 0x40, 0x02, + 0xa9, 0x12, 0x85, 0x09, 0x6b, 0x0d, 0x62, 0xe1, 0xc4, 0xb1, 0x5b, 0x9a, + 0xb0, 0xc4, 0xaf, 0xfd, 0xd1, 0xc8, 0x18, 0xf1, 0x37, 0x6b, 0x17, 0x39, + 0x2c, 0x5f, 0xff, 0x69, 0x80, 0x4c, 0x69, 0x67, 0xbf, 0x90, 0x58, 0xbf, + 0xfe, 0xcd, 0xe4, 0xcf, 0xce, 0x01, 0x88, 0x58, 0xb1, 0x52, 0x8f, 0x58, + 0x20, 0xb8, 0xb7, 0xd3, 0xef, 0x86, 0x29, 0x02, 0xc5, 0xec, 0xee, 0x0b, + 0x15, 0xa3, 0xc1, 0x08, 0x8e, 0xff, 0xe7, 0x39, 0x31, 0xbc, 0xfc, 0x97, + 0x96, 0x2f, 0xf3, 0x69, 0xb2, 0x27, 0x3a, 0xc5, 0xfb, 0x8d, 0xf7, 0xe2, + 0xc5, 0xfd, 0xe7, 0xf4, 0xf7, 0x05, 0x8b, 0xa6, 0x0b, 0x16, 0x82, 0xc5, + 0x7c, 0xd4, 0x86, 0x2f, 0x7f, 0x04, 0x58, 0x01, 0x71, 0x62, 0xff, 0xd8, + 0x4d, 0xfc, 0x73, 0xc8, 0xd6, 0x2a, 0x4f, 0xad, 0xcb, 0xee, 0x9d, 0x2c, + 0x54, 0xa6, 0x38, 0x6a, 0xc6, 0xa1, 0x1a, 0x11, 0x05, 0xff, 0xe9, 0xeb, + 0xe4, 0xbf, 0x9e, 0x90, 0x84, 0x75, 0x8b, 0xff, 0xff, 0xb9, 0xf6, 0x7f, + 0x0b, 0x4d, 0xcc, 0x29, 0x80, 0xf4, 0xfd, 0xc1, 0x62, 0xff, 0xff, 0x1c, + 0xa7, 0xb3, 0x00, 0xdd, 0xf0, 0xb3, 0x62, 0x9d, 0x96, 0x2a, 0x08, 0xd6, + 0x67, 0x2b, 0xc1, 0xf5, 0x04, 0xb1, 0x7f, 0xfc, 0x0c, 0x1f, 0xb8, 0xfe, + 0xfe, 0x74, 0x1c, 0xac, 0x5c, 0xfd, 0xac, 0x56, 0xc8, 0x8d, 0xd1, 0x1f, + 0x94, 0xad, 0xb2, 0xc5, 0xf9, 0xfd, 0x13, 0x84, 0xb1, 0x58, 0x6f, 0x58, + 0x4e, 0xfe, 0x1f, 0xe4, 0x26, 0xf2, 0xc5, 0xff, 0xb0, 0x8d, 0xcd, 0x7b, + 0xcf, 0xa5, 0x8b, 0xdf, 0x63, 0x56, 0x2f, 0x6c, 0xfa, 0x94, 0x46, 0x61, + 0x7f, 0x8f, 0xeb, 0xe8, 0xeb, 0x28, 0x55, 0xdf, 0xc1, 0x9c, 0xcc, 0xef, + 0xcb, 0x17, 0xff, 0xf3, 0x6b, 0x0e, 0xdd, 0xea, 0x7c, 0xe0, 0xe3, 0x76, + 0xb1, 0x6f, 0x71, 0x11, 0xde, 0x32, 0xbf, 0xfd, 0xe8, 0x61, 0x38, 0xf2, + 0x12, 0x0e, 0x2c, 0x5f, 0xe1, 0x1a, 0x64, 0x99, 0xc7, 0x58, 0xa9, 0x4d, + 0x7b, 0x21, 0x6a, 0xc5, 0x24, 0x93, 0x7f, 0xe0, 0x66, 0x9c, 0x18, 0x0d, + 0x1d, 0x62, 0xff, 0xe9, 0xe6, 0xa7, 0xe5, 0x9e, 0x93, 0xac, 0x5f, 0xf7, + 0xa4, 0x9c, 0x19, 0xdf, 0x96, 0x2f, 0x8b, 0x69, 0x35, 0x62, 0xf4, 0x1b, + 0x98, 0x7b, 0xa1, 0x9c, 0xd1, 0xa8, 0xd3, 0x78, 0x50, 0x5e, 0x30, 0xba, + 0xf5, 0x8b, 0xff, 0xa4, 0x5d, 0x7c, 0x1c, 0xd3, 0x64, 0xbc, 0xb1, 0x7f, + 0x1d, 0xa1, 0xc1, 0x3a, 0xc5, 0x2c, 0x58, 0x47, 0x37, 0x41, 0x97, 0x5f, + 0xfd, 0x9e, 0xfb, 0xc1, 0xf5, 0xb0, 0x80, 0xb1, 0x7f, 0xa1, 0x9c, 0x0f, + 0x61, 0x12, 0xc5, 0x6e, 0x7f, 0x82, 0x46, 0xb9, 0xc2, 0x58, 0xbe, 0x13, + 0x67, 0x16, 0x2f, 0x8b, 0x3a, 0x3c, 0x46, 0xeb, 0xe3, 0x17, 0xff, 0xfe, + 0xfe, 0x0d, 0xfd, 0x85, 0x0c, 0xe7, 0xa1, 0x91, 0xec, 0x40, 0x58, 0xa8, + 0x2a, 0x4f, 0xd1, 0x1f, 0xe1, 0x0a, 0x50, 0xa4, 0xe2, 0xef, 0x8e, 0x6f, + 0xff, 0xe1, 0x36, 0xdb, 0x8b, 0x6f, 0x67, 0xcb, 0x3d, 0xf7, 0x58, 0xbf, + 0x4c, 0x44, 0x2e, 0x2c, 0x56, 0x2b, 0x60, 0x79, 0x4e, 0xff, 0x62, 0xf2, + 0xf5, 0xce, 0x4b, 0x17, 0x78, 0xd5, 0x8b, 0xed, 0x3c, 0x5c, 0x58, 0xbc, + 0xc4, 0x0c, 0x37, 0xba, 0x19, 0xa9, 0x67, 0x21, 0x6d, 0x08, 0x98, 0x46, + 0x31, 0x8f, 0x86, 0x91, 0xee, 0x89, 0x11, 0x9e, 0xa3, 0x44, 0x3a, 0x27, + 0xe3, 0x25, 0x68, 0x57, 0x94, 0xab, 0x7e, 0x1f, 0xfa, 0x71, 0xcb, 0xa2, + 0x24, 0x72, 0x9d, 0xf1, 0x7a, 0x63, 0x96, 0x2f, 0x4f, 0x49, 0x58, 0xbd, + 0x25, 0xe5, 0x8b, 0xff, 0xfd, 0xe6, 0x3b, 0x78, 0x52, 0xd0, 0x7f, 0xcc, + 0x30, 0xeb, 0x17, 0xd3, 0xa6, 0xfa, 0xc5, 0x0d, 0x13, 0xa4, 0x39, 0xd1, + 0x7e, 0xec, 0x89, 0x62, 0xff, 0x66, 0xe5, 0x9d, 0x1c, 0x6b, 0x17, 0xdf, + 0x11, 0xe5, 0x62, 0x96, 0x29, 0x62, 0xcc, 0x72, 0xe3, 0x81, 0x97, 0xf4, + 0xc4, 0x18, 0x1a, 0x25, 0x8b, 0x85, 0xd7, 0xac, 0x5f, 0x7f, 0x00, 0xcb, + 0x17, 0xde, 0x7f, 0x89, 0x62, 0xfe, 0xcd, 0x77, 0x0f, 0x4a, 0xc5, 0xd3, + 0x1f, 0xd7, 0x53, 0xd2, 0x0c, 0x8e, 0xa3, 0x75, 0x57, 0x32, 0x4a, 0xf0, + 0xbb, 0x88, 0xc7, 0xe3, 0x0c, 0x6a, 0x47, 0x7e, 0x25, 0x11, 0x8f, 0x41, + 0xde, 0xa7, 0x4b, 0x46, 0x46, 0xf1, 0xc4, 0x13, 0xf5, 0x84, 0xfd, 0x6c, + 0xa7, 0x58, 0xd2, 0x37, 0x98, 0xda, 0x19, 0x9d, 0x77, 0x08, 0x2e, 0xb9, + 0x08, 0x6e, 0xba, 0xce, 0xf5, 0x46, 0xa8, 0x7d, 0x46, 0xb4, 0xe9, 0xac, + 0xd3, 0x36, 0xa4, 0x7d, 0xc2, 0x7f, 0xfc, 0x75, 0x9e, 0x56, 0x5a, 0xa4, + 0xf3, 0x67, 0x0a, 0xb7, 0xa6, 0x26, 0x77, 0x49, 0xef, 0x7a, 0x43, 0x9c, + 0x7c, 0xa2, 0x18, 0xa9, 0x73, 0x3a, 0xa5, 0xa4, 0x1e, 0x97, 0xa9, 0xfb, + 0x42, 0x88, 0xd4, 0xb9, 0x30, 0x4f, 0xa4, 0x75, 0xf1, 0xaa, 0x15, 0x66, + 0x33, 0xcb, 0x6a, 0x13, 0xeb, 0x46, 0xe8, 0x2a, 0x6f, 0x57, 0x49, 0x4b, + 0x01, 0x46, 0x79, 0x1d, 0x48, 0x21, 0x0e, 0xb1, 0xeb, 0xea, 0x97, 0x8d, + 0x7e, 0x8d, 0x5e, 0x26, 0x02, 0xc5, 0xfd, 0x1b, 0x46, 0xde, 0x26, 0x02, + 0xc5, 0xf3, 0xf4, 0x68, 0xf5, 0x8b, 0x98, 0xd5, 0x8b, 0xec, 0x1f, 0xe5, + 0x62, 0xf4, 0xe8, 0x0b, 0x14, 0x46, 0xff, 0x84, 0x57, 0xed, 0x8f, 0x3d, + 0xc6, 0x46, 0xe9, 0x82, 0x46, 0x85, 0xd0, 0x38, 0x62, 0x7e, 0x2b, 0xd3, + 0x2e, 0x62, 0x8a, 0x71, 0x3e, 0xf9, 0xc8, 0x0e, 0xb1, 0x79, 0x8f, 0xc5, + 0x8a, 0x81, 0xbe, 0xe8, 0x43, 0x7e, 0x3e, 0x3b, 0x01, 0x62, 0xfb, 0x76, + 0x6d, 0xd5, 0x24, 0x51, 0x7f, 0xfe, 0x60, 0x4e, 0xff, 0x7e, 0x7d, 0xfd, + 0xfc, 0x25, 0x8a, 0xd2, 0x21, 0x88, 0xc6, 0xff, 0xd3, 0xe7, 0x04, 0xc3, + 0xdc, 0xeb, 0x16, 0x2f, 0xdb, 0xc9, 0x48, 0x16, 0x2f, 0xbc, 0x6b, 0xee, + 0xb1, 0x4c, 0x79, 0xbc, 0x28, 0xbf, 0xb0, 0x01, 0xe9, 0x80, 0xb1, 0x79, + 0xa1, 0x19, 0x29, 0xd8, 0x64, 0x2b, 0x74, 0x45, 0xf8, 0x48, 0xf8, 0x86, + 0xff, 0xe9, 0x6d, 0x10, 0x9b, 0xbc, 0xfb, 0x2c, 0x5f, 0xce, 0x06, 0x37, + 0xee, 0xb1, 0x7f, 0xfd, 0xe6, 0x38, 0xff, 0x90, 0xe7, 0xe4, 0xbc, 0xb1, + 0x58, 0x7f, 0xcc, 0x5d, 0x7f, 0xfc, 0xf1, 0x14, 0xfb, 0x9e, 0xef, 0x77, + 0x2d, 0x96, 0x2f, 0xff, 0xb3, 0xfe, 0x70, 0x9f, 0x20, 0xfa, 0x60, 0x2c, + 0x50, 0xd1, 0x45, 0xc5, 0x3b, 0x46, 0x62, 0xbe, 0x03, 0xc7, 0xa7, 0xf6, + 0x72, 0x86, 0x0f, 0x21, 0x85, 0x7f, 0xa3, 0x33, 0x5b, 0xb3, 0x6e, 0xa9, + 0x3a, 0x0b, 0xff, 0xa3, 0x1a, 0x11, 0x99, 0xad, 0xd9, 0xb7, 0x54, 0x89, + 0x65, 0xfd, 0x20, 0xc3, 0xce, 0xeb, 0x17, 0xed, 0x6e, 0xcd, 0xba, 0xa4, + 0xf2, 0x2f, 0xd9, 0xef, 0x39, 0x21, 0x08, 0xee, 0x6e, 0x8b, 0x16, 0x8c, + 0x1a, 0x2b, 0xb0, 0xb8, 0x8d, 0xe3, 0x8c, 0x2a, 0x63, 0xba, 0xa5, 0xda, + 0x70, 0x52, 0x10, 0xa1, 0xc8, 0x52, 0xef, 0x1f, 0xa4, 0x51, 0x91, 0x1d, + 0xff, 0xf5, 0xd7, 0x1b, 0x4a, 0xf8, 0x2c, 0xe3, 0x66, 0xb9, 0x38, 0x97, + 0xe6, 0x31, 0x22, 0xf4, 0x8c, 0x1e, 0xff, 0xf4, 0x61, 0xda, 0x11, 0x99, + 0xad, 0xd9, 0xb7, 0x54, 0x8b, 0x25, 0xf4, 0x6e, 0x6c, 0x74, 0x6e, 0xb1, + 0x7d, 0xd6, 0xfd, 0x8e, 0xb1, 0x68, 0xd9, 0x62, 0xdd, 0x4b, 0x16, 0xfa, + 0xc5, 0x46, 0xe6, 0xfa, 0x34, 0x17, 0x10, 0xad, 0xee, 0xba, 0xc6, 0x91, + 0xcb, 0x17, 0xff, 0xf7, 0x5c, 0x33, 0x09, 0xf5, 0x9c, 0x62, 0x30, 0xcf, + 0xc7, 0x2c, 0x5f, 0xef, 0xe7, 0x70, 0xd3, 0xf6, 0xb1, 0x7f, 0x9c, 0x7f, + 0xc7, 0x23, 0x56, 0x2f, 0x7d, 0x8d, 0x58, 0xbe, 0xfb, 0xe1, 0xd6, 0x2c, + 0x75, 0x8b, 0xfa, 0x1f, 0x9d, 0x00, 0xcc, 0x36, 0x81, 0x91, 0x5f, 0x7d, + 0xbc, 0x25, 0x8b, 0xef, 0xcc, 0x79, 0xd6, 0x2f, 0x01, 0xce, 0xb1, 0x7f, + 0xec, 0xfb, 0xc0, 0xb3, 0x05, 0xd7, 0xac, 0x5c, 0x50, 0x58, 0xbc, 0xda, + 0xc5, 0x8b, 0xd9, 0xd4, 0x35, 0x8a, 0xc3, 0xd3, 0xec, 0x5d, 0xc7, 0x2f, + 0xf9, 0xfa, 0x39, 0x0a, 0x19, 0xc5, 0x8b, 0x80, 0xeb, 0x15, 0x87, 0xa2, + 0x23, 0xab, 0xfc, 0x33, 0x27, 0xda, 0xc1, 0xac, 0x5c, 0x1c, 0x72, 0xc5, + 0x49, 0xe8, 0xfc, 0xd6, 0xf0, 0xb7, 0x65, 0x8b, 0xff, 0xfa, 0x37, 0x30, + 0xbb, 0x11, 0x67, 0xcb, 0x63, 0x0c, 0xfc, 0x72, 0xc5, 0x46, 0xea, 0xfe, + 0xb6, 0x66, 0x81, 0xb6, 0xe6, 0x7d, 0xa9, 0x3a, 0x2c, 0x79, 0x1e, 0x89, + 0x8e, 0x3b, 0xf8, 0x4a, 0x93, 0xff, 0x9c, 0x83, 0x21, 0xea, 0x1e, 0xbe, + 0xd7, 0xa7, 0x65, 0x8b, 0xf7, 0x84, 0xd0, 0xe2, 0xc5, 0xf6, 0x04, 0xc0, + 0x58, 0xa9, 0x3f, 0x01, 0x92, 0x11, 0x4d, 0xff, 0x00, 0xc7, 0xf7, 0x27, + 0x40, 0x58, 0xbf, 0xb9, 0x9a, 0x68, 0x62, 0xc5, 0xf3, 0x1b, 0xf7, 0x58, + 0xa2, 0x3d, 0x0e, 0x16, 0xdd, 0x3b, 0x2c, 0x5f, 0xf9, 0x8b, 0xd8, 0x42, + 0x86, 0x71, 0x62, 0xff, 0xd8, 0x7e, 0x34, 0x03, 0xe4, 0xe2, 0xc5, 0x47, + 0xa2, 0x53, 0xe3, 0x1e, 0x3d, 0xbf, 0x87, 0x3d, 0x5d, 0x4e, 0x05, 0x8b, + 0xcf, 0xb7, 0x96, 0x2f, 0xff, 0xff, 0xff, 0xf0, 0x8c, 0x2c, 0x89, 0xf8, + 0x23, 0x98, 0x46, 0x99, 0xbf, 0xdf, 0xef, 0x25, 0xed, 0x4f, 0xbf, 0x87, + 0x30, 0xcf, 0xc7, 0x2c, 0x54, 0xaa, 0x8c, 0xc8, 0x45, 0xbc, 0x2d, 0x58, + 0xcf, 0xc6, 0x81, 0x0f, 0x5e, 0xf8, 0x4c, 0xb1, 0x7f, 0x1e, 0x48, 0xdc, + 0xd9, 0x62, 0xff, 0xf1, 0xbf, 0xce, 0xe0, 0x4f, 0x11, 0xc3, 0xdd, 0x62, + 0xff, 0xe6, 0x08, 0xcc, 0xef, 0xc6, 0x7a, 0x71, 0x62, 0xb1, 0x13, 0x04, + 0xa1, 0x73, 0x1d, 0x62, 0xff, 0xcd, 0xa8, 0x4f, 0xbf, 0x22, 0xeb, 0xd6, + 0x2a, 0x34, 0x4d, 0x87, 0x07, 0xb5, 0x0c, 0x7f, 0x10, 0x88, 0x5e, 0xf1, + 0xf7, 0x75, 0x8b, 0xef, 0x3f, 0xe5, 0x62, 0x8c, 0x3c, 0x01, 0x0f, 0x5f, + 0xf1, 0xa6, 0xb6, 0x14, 0xf7, 0xc5, 0x8b, 0xfe, 0x9f, 0xb9, 0xbe, 0xe3, + 0x01, 0x62, 0x9c, 0xfd, 0x7e, 0x77, 0x7f, 0xcd, 0x0e, 0x0b, 0xd3, 0xee, + 0x2c, 0x5f, 0xbd, 0xa9, 0x6d, 0xd6, 0x2f, 0xf8, 0xb0, 0xb3, 0xda, 0x98, + 0x96, 0x28, 0x8f, 0x87, 0x85, 0x37, 0xf3, 0xea, 0x28, 0x08, 0xd5, 0x8b, + 0xe0, 0xbc, 0xd0, 0x58, 0xbb, 0xf2, 0xb1, 0x58, 0x6e, 0xf8, 0x49, 0x6e, + 0x8b, 0x17, 0xec, 0x3f, 0x9f, 0x65, 0x8b, 0x71, 0xcd, 0xef, 0x05, 0x28, + 0xc4, 0x41, 0xca, 0xed, 0xcd, 0xc5, 0x8b, 0xff, 0xf3, 0x34, 0x1b, 0xe6, + 0x66, 0xc2, 0xf3, 0xfe, 0x56, 0x2f, 0xff, 0xb0, 0x78, 0x58, 0xe7, 0x27, + 0x37, 0xee, 0xb1, 0x5b, 0x22, 0xea, 0x21, 0x7e, 0x8a, 0xd7, 0x0b, 0x4b, + 0x17, 0xe8, 0x71, 0xa3, 0xb1, 0x62, 0xfd, 0x26, 0x48, 0xe0, 0xb1, 0x73, + 0x6e, 0xa9, 0x0c, 0xca, 0x73, 0xce, 0x62, 0x9b, 0xfe, 0x84, 0xfe, 0x5f, + 0x69, 0x35, 0x62, 0xff, 0x4f, 0x70, 0x9d, 0x1e, 0x0b, 0x17, 0xff, 0xfd, + 0xcf, 0x79, 0xff, 0xdc, 0x38, 0x42, 0xc3, 0x4d, 0x76, 0x82, 0xc5, 0xb0, + 0x08, 0x9f, 0xf1, 0xad, 0xff, 0xff, 0x43, 0x0c, 0x6f, 0x0a, 0x4c, 0x19, + 0x4e, 0xb4, 0xf8, 0x75, 0x8b, 0xe9, 0x3e, 0x0d, 0x62, 0xa5, 0x51, 0x1e, + 0xef, 0x31, 0x10, 0x6a, 0x1b, 0x2c, 0x50, 0x4c, 0xf7, 0xf3, 0xc9, 0xf6, + 0xc0, 0x96, 0x2e, 0x28, 0x2c, 0x58, 0xeb, 0x17, 0xda, 0xfb, 0x46, 0x68, + 0xf6, 0x0e, 0x5e, 0x18, 0xbd, 0xff, 0xbb, 0x33, 0xd2, 0x67, 0x06, 0xf1, + 0x2c, 0x53, 0xa2, 0x39, 0x92, 0xaf, 0xb8, 0x4f, 0xe5, 0x8b, 0x7d, 0x62, + 0xe9, 0xd2, 0xc5, 0x6e, 0x6a, 0x7a, 0x09, 0x5f, 0xf7, 0x60, 0x0c, 0xfd, + 0xf2, 0x60, 0xb1, 0x51, 0xb2, 0x2b, 0x5d, 0x2d, 0x89, 0x2f, 0xff, 0xe1, + 0xe6, 0xf3, 0xf9, 0x39, 0x84, 0x26, 0xf4, 0xe9, 0x62, 0xee, 0x09, 0x62, + 0xa0, 0x7e, 0x9d, 0xae, 0x5f, 0xc0, 0xe3, 0xf8, 0xa5, 0x62, 0xfd, 0xac, + 0xe3, 0x12, 0xc5, 0xe6, 0x83, 0x2c, 0x57, 0x67, 0xe0, 0xe5, 0xba, 0x27, + 0xbf, 0xff, 0xff, 0x4f, 0xdc, 0x64, 0xd8, 0xfd, 0x27, 0x58, 0x3e, 0x67, + 0x47, 0xee, 0x05, 0x2b, 0x17, 0xcf, 0xa6, 0xd2, 0xc5, 0xdc, 0x8f, 0x58, + 0xa8, 0x1b, 0xdf, 0x11, 0x5f, 0xff, 0xd0, 0xce, 0x78, 0x5b, 0x6f, 0xf7, + 0x8b, 0xf3, 0xb6, 0x2c, 0x5f, 0xfd, 0x9d, 0xc3, 0xef, 0xef, 0xe0, 0xba, + 0xf5, 0x8a, 0x95, 0x49, 0xd9, 0x09, 0x37, 0x2f, 0x68, 0x60, 0x08, 0x87, + 0xa3, 0x05, 0xff, 0xe3, 0x33, 0xdf, 0xc2, 0x90, 0x02, 0x74, 0xb1, 0x71, + 0x3a, 0xc5, 0xff, 0xfe, 0x2f, 0x7f, 0x0c, 0xc8, 0x48, 0x39, 0x86, 0x43, + 0x3b, 0x58, 0xbf, 0xfd, 0x9e, 0xfe, 0x18, 0x1c, 0x90, 0x9b, 0xcb, 0x16, + 0x06, 0x22, 0xb8, 0x98, 0xea, 0x53, 0x35, 0x64, 0xa2, 0x86, 0x25, 0xff, + 0x9c, 0x5c, 0xc2, 0x14, 0x33, 0x8b, 0x14, 0xe7, 0xe3, 0xc3, 0x3b, 0xff, + 0xff, 0xe2, 0x14, 0x33, 0x99, 0xe1, 0x37, 0xbf, 0x9b, 0xfd, 0xe2, 0xfc, + 0xed, 0x8b, 0x17, 0x4f, 0x6b, 0x17, 0xec, 0x8f, 0x62, 0x02, 0xc5, 0xc5, + 0xba, 0xc5, 0x40, 0xf0, 0x9c, 0xaa, 0x9d, 0x1f, 0x5c, 0x7f, 0xf2, 0xd5, + 0xf6, 0xa1, 0x3a, 0x58, 0xbf, 0xfb, 0xdc, 0x7f, 0x14, 0x89, 0xb4, 0x6a, + 0xc5, 0xce, 0x75, 0x8b, 0x75, 0xf2, 0x7f, 0xee, 0x47, 0xd4, 0x8b, 0x7f, + 0xfd, 0xfc, 0xdc, 0xcc, 0xdc, 0x4c, 0x5d, 0x59, 0xf5, 0x8b, 0xf6, 0x9f, + 0xd0, 0x95, 0x8a, 0xc3, 0xfd, 0x65, 0x5b, 0xfa, 0x7b, 0x09, 0xbf, 0xc5, + 0x8a, 0xd9, 0x9f, 0x1d, 0x08, 0x4c, 0x0c, 0x87, 0x21, 0x36, 0x69, 0x0e, + 0xf0, 0xef, 0x78, 0x6e, 0xc4, 0x69, 0xa9, 0x47, 0x67, 0x8d, 0x0f, 0xf0, + 0xce, 0x29, 0x5e, 0xbc, 0x94, 0x0f, 0xe8, 0xc6, 0xc5, 0x0a, 0xee, 0x90, + 0xb8, 0xea, 0x20, 0xb8, 0x12, 0xb1, 0x7f, 0x98, 0x2f, 0xbc, 0xea, 0x56, + 0x2e, 0xf9, 0xab, 0x17, 0xff, 0xff, 0xe6, 0x1f, 0x3f, 0x87, 0x27, 0xd8, + 0xc3, 0x88, 0x98, 0xdf, 0x96, 0x7b, 0x58, 0xb1, 0x58, 0x8e, 0x7d, 0x0b, + 0xb1, 0x99, 0x0c, 0xdf, 0xc6, 0x71, 0xbc, 0xda, 0x58, 0xbf, 0xfc, 0xfc, + 0x0f, 0x69, 0xd8, 0xb0, 0x02, 0xe2, 0xc5, 0xff, 0xe0, 0x1d, 0xa1, 0xfc, + 0x03, 0x07, 0xd8, 0x4b, 0x16, 0xf7, 0x91, 0x36, 0x24, 0xdb, 0xff, 0xff, + 0x85, 0x85, 0xec, 0xd8, 0xcc, 0x72, 0xf4, 0xbf, 0x70, 0x0f, 0x80, 0x58, + 0xa7, 0x44, 0xe8, 0x8a, 0x6f, 0xda, 0xd8, 0xc1, 0xba, 0xc5, 0xf7, 0x30, + 0x3c, 0x58, 0xbf, 0xfd, 0xe7, 0xe1, 0x9f, 0xcf, 0x96, 0x7b, 0x8b, 0x17, + 0x66, 0xc6, 0x1f, 0x77, 0x51, 0x1d, 0x4a, 0xa5, 0x4f, 0xc6, 0xce, 0xc4, + 0x45, 0x09, 0x9b, 0xc7, 0x98, 0x96, 0x2f, 0xa4, 0x36, 0xd2, 0xc5, 0xbc, + 0xe7, 0x83, 0xa1, 0xeb, 0xff, 0xff, 0xfc, 0x42, 0xea, 0x33, 0x7f, 0x8b, + 0xd2, 0x59, 0xb7, 0x37, 0xf8, 0x8b, 0xbc, 0x9f, 0x96, 0x2c, 0x5f, 0xd9, + 0x26, 0x4f, 0x0e, 0xb1, 0x58, 0x8e, 0xa7, 0x27, 0xe4, 0x25, 0x6c, 0x4b, + 0x17, 0xf3, 0x05, 0xe2, 0x63, 0x56, 0x2b, 0x0f, 0x00, 0x84, 0x6a, 0x08, + 0x93, 0xf3, 0x9d, 0xf6, 0xb4, 0xdc, 0x58, 0xbf, 0x7f, 0x09, 0x8e, 0xb1, + 0x7d, 0xdf, 0xe7, 0x8b, 0x17, 0xa2, 0x62, 0x58, 0xbe, 0xd6, 0x34, 0x4b, + 0x17, 0xf8, 0x8d, 0xcf, 0xcb, 0x8d, 0x62, 0xfe, 0xea, 0xf6, 0x0b, 0xdc, + 0x58, 0xb6, 0x39, 0xf2, 0x91, 0x9d, 0xfb, 0xde, 0x72, 0x35, 0x62, 0xff, + 0xfb, 0x77, 0x0b, 0xec, 0xfe, 0x91, 0xfd, 0x8d, 0x58, 0xad, 0x93, 0x28, + 0x1c, 0x22, 0x30, 0x97, 0x72, 0x9b, 0xed, 0xe4, 0xbc, 0xb1, 0x7f, 0x31, + 0xf0, 0x9f, 0xcb, 0x17, 0xdb, 0x7e, 0x4d, 0x58, 0xbd, 0x3e, 0xe2, 0xc5, + 0xff, 0xb0, 0xde, 0x4e, 0x10, 0xff, 0x2b, 0x15, 0xc3, 0xdb, 0x10, 0xed, + 0xff, 0xf8, 0x4d, 0xe3, 0x33, 0xde, 0x6d, 0x14, 0xf7, 0x05, 0x8b, 0xe3, + 0x35, 0x08, 0x2c, 0x5f, 0xff, 0x66, 0xc7, 0x9e, 0xae, 0x4e, 0x9a, 0x0f, + 0xf5, 0x8a, 0x94, 0x67, 0xf1, 0x5f, 0xc4, 0xb7, 0xd2, 0x06, 0xf2, 0xc5, + 0x18, 0xb8, 0x11, 0x02, 0x3c, 0x27, 0x88, 0x93, 0x51, 0xa2, 0x9d, 0x13, + 0xe4, 0x6c, 0x59, 0xc8, 0x40, 0x7a, 0x1e, 0x31, 0xc5, 0xf7, 0xee, 0xa2, + 0x60, 0x86, 0xb1, 0x7f, 0x6b, 0x6d, 0x60, 0xf1, 0x62, 0xfe, 0x62, 0xdb, + 0x58, 0x35, 0x8a, 0x93, 0xdd, 0x11, 0x7d, 0xff, 0xde, 0x7d, 0x30, 0x0c, + 0xee, 0x12, 0x75, 0x8b, 0xff, 0xa4, 0xe6, 0xb6, 0xb0, 0x1c, 0x6d, 0xd6, + 0x2f, 0xc5, 0x30, 0xe3, 0x2c, 0x54, 0xa6, 0xbd, 0x08, 0x44, 0xb9, 0x09, + 0x23, 0xf4, 0x46, 0xbf, 0xa2, 0xe1, 0x9b, 0x45, 0xb2, 0xc5, 0xe2, 0x9f, + 0xac, 0x5b, 0xf2, 0x7a, 0x2e, 0x6b, 0x7d, 0x21, 0xb1, 0x2c, 0x5f, 0xfb, + 0xf2, 0x42, 0x9f, 0x73, 0x09, 0x62, 0xf6, 0x34, 0x4b, 0x15, 0xa3, 0xfc, + 0xf1, 0x17, 0x51, 0xed, 0xff, 0xbf, 0x24, 0x29, 0xf7, 0x30, 0x96, 0x2f, + 0x63, 0x44, 0xb1, 0x7b, 0xf2, 0x73, 0x11, 0x19, 0xe3, 0x2e, 0xa3, 0xdb, + 0xec, 0x3b, 0xf1, 0x62, 0x86, 0x9c, 0xae, 0xf1, 0x97, 0x79, 0x16, 0xe2, + 0x35, 0x62, 0xdf, 0x58, 0xbf, 0xfb, 0xf2, 0x33, 0x0b, 0x39, 0xc9, 0xdd, + 0x62, 0xff, 0xff, 0xef, 0x39, 0xf4, 0xf9, 0xd9, 0x0b, 0xd3, 0xf3, 0x3a, + 0x3f, 0xa2, 0x95, 0x8a, 0xc4, 0x67, 0x38, 0x97, 0x91, 0xaf, 0xff, 0xf0, + 0xb6, 0xfe, 0x6f, 0xb8, 0xb7, 0xd4, 0xfb, 0xf3, 0xdc, 0x16, 0x2f, 0xf1, + 0xfe, 0xde, 0x62, 0x02, 0xc5, 0xff, 0x6e, 0x66, 0xef, 0xc1, 0x16, 0xeb, + 0x17, 0xff, 0xff, 0xff, 0xb8, 0x58, 0x00, 0x49, 0x19, 0xbf, 0xc5, 0xe9, + 0x2c, 0xdb, 0x9b, 0xfc, 0x45, 0xde, 0x4f, 0xcb, 0x16, 0x2a, 0x53, 0x18, + 0xc3, 0x30, 0x8f, 0xaf, 0x07, 0x20, 0x58, 0xbf, 0x8b, 0x07, 0xf9, 0x09, + 0x62, 0xcc, 0x47, 0x99, 0xd0, 0x7a, 0xec, 0x82, 0xc5, 0xf8, 0x03, 0x2c, + 0xfa, 0xc5, 0x4a, 0xba, 0xf1, 0x9c, 0x64, 0x39, 0xbb, 0x2e, 0x78, 0xe0, + 0x34, 0xf8, 0x72, 0x86, 0x17, 0xbf, 0xbc, 0xdf, 0x30, 0x72, 0xb1, 0x7e, + 0xcf, 0x3f, 0x61, 0x2c, 0x5e, 0xf3, 0x92, 0xc5, 0xf3, 0xfb, 0x4e, 0xb1, + 0x7f, 0x73, 0x37, 0xdc, 0x5c, 0x58, 0xae, 0x1e, 0x9f, 0x88, 0xae, 0xce, + 0x2c, 0x5f, 0x71, 0x8a, 0x0b, 0x16, 0x84, 0x0d, 0xcf, 0x05, 0xef, 0x6d, + 0xce, 0x2c, 0x5c, 0x10, 0xd6, 0x2f, 0xbe, 0xc2, 0x3a, 0xc5, 0xff, 0xd9, + 0xd5, 0xee, 0xa2, 0x9f, 0x0a, 0x7b, 0x58, 0xb8, 0x5a, 0x58, 0xb7, 0xbe, + 0x7c, 0x7c, 0x4b, 0xa7, 0x45, 0x71, 0x42, 0x1a, 0xa5, 0x52, 0xb1, 0xa5, + 0xfd, 0x95, 0x3b, 0x7b, 0x2d, 0x91, 0x3f, 0x87, 0xc5, 0x0c, 0x7b, 0x98, + 0x6b, 0x17, 0xe8, 0x31, 0x0b, 0x75, 0x8b, 0xff, 0xe6, 0x73, 0xe0, 0xf3, + 0xef, 0x27, 0x61, 0xac, 0x56, 0xe8, 0x8d, 0xec, 0x5f, 0x45, 0x37, 0x36, + 0xeb, 0x17, 0x4c, 0x7a, 0xc5, 0xfc, 0x53, 0xbe, 0xd8, 0x12, 0xc5, 0xff, + 0xfa, 0x73, 0xb2, 0xcf, 0xbc, 0xfb, 0xef, 0x27, 0x58, 0xad, 0x91, 0x6b, + 0xd7, 0x8c, 0x78, 0x6b, 0xa1, 0x85, 0xfc, 0xfc, 0xc1, 0x8f, 0x16, 0x2f, + 0xfd, 0xe6, 0x20, 0x18, 0x1e, 0x76, 0x12, 0xc5, 0xf7, 0xbd, 0x27, 0x58, + 0xbe, 0x87, 0x9f, 0x65, 0x8b, 0xff, 0xf4, 0x94, 0xf0, 0xc7, 0xfe, 0xf2, + 0x45, 0x9e, 0x58, 0xac, 0x46, 0xf1, 0xa8, 0x6c, 0x47, 0xc2, 0x4b, 0xff, + 0xe9, 0x38, 0xa7, 0x63, 0x35, 0x8f, 0xf9, 0x1a, 0xc5, 0xf3, 0x10, 0x7c, + 0x58, 0xbc, 0x59, 0xba, 0xc5, 0xff, 0x3f, 0x9c, 0xf1, 0x71, 0xc9, 0x62, + 0xff, 0xfe, 0xd6, 0x7b, 0x9f, 0x68, 0x0a, 0x73, 0xd3, 0xdc, 0x16, 0x2b, + 0x74, 0x4a, 0xe8, 0xe6, 0xff, 0xd2, 0xfa, 0xf7, 0xb2, 0x74, 0x05, 0x8b, + 0x7a, 0x4f, 0x8a, 0x22, 0x4b, 0xf6, 0xef, 0xa3, 0xc1, 0x62, 0xff, 0x1f, + 0x34, 0x02, 0x10, 0x16, 0x2f, 0xb3, 0xa1, 0x4a, 0xc5, 0xff, 0x16, 0x6c, + 0xc6, 0x40, 0x5a, 0x58, 0xbf, 0xfa, 0x78, 0x42, 0xc7, 0xe7, 0xd8, 0xeb, + 0x16, 0x82, 0xc5, 0x41, 0x53, 0x86, 0x11, 0xbc, 0x62, 0x9f, 0x28, 0x62, + 0xa2, 0x34, 0xe1, 0x1f, 0x43, 0xb0, 0xd0, 0xef, 0xf7, 0x50, 0xb4, 0x66, + 0xb7, 0xdd, 0x62, 0xdb, 0xac, 0x56, 0x1e, 0x7b, 0x1e, 0x5f, 0x81, 0x3e, + 0x91, 0xac, 0x54, 0xaf, 0x28, 0x64, 0x39, 0xf7, 0x45, 0x78, 0xc2, 0xfe, + 0x78, 0xd2, 0xb0, 0x4a, 0x1a, 0x82, 0x20, 0xbf, 0xe1, 0xfe, 0x78, 0x59, + 0x9b, 0x2c, 0x58, 0xeb, 0x17, 0x9c, 0x5b, 0xac, 0x56, 0xc6, 0xc0, 0x62, + 0x57, 0xec, 0xd6, 0x9c, 0x25, 0x8b, 0xfb, 0xcf, 0x00, 0xb3, 0xeb, 0x17, + 0x7d, 0xce, 0x7b, 0x01, 0x94, 0xdf, 0xef, 0x13, 0x19, 0xbe, 0xf8, 0xb1, + 0x7c, 0xfb, 0xb6, 0x96, 0x2f, 0xfa, 0x12, 0x40, 0xe1, 0x82, 0x25, 0x8b, + 0xfb, 0xcf, 0x00, 0xb3, 0xeb, 0x17, 0x85, 0xee, 0x76, 0x7d, 0x21, 0x9d, + 0x5f, 0xa7, 0xdf, 0x98, 0x2c, 0x5e, 0x9f, 0x4a, 0xc5, 0x41, 0x30, 0x61, + 0xc2, 0x33, 0xc6, 0xdd, 0x0a, 0x2f, 0xe9, 0xf8, 0xbb, 0x87, 0x16, 0x2f, + 0xfc, 0x77, 0x2c, 0xd7, 0x39, 0x9c, 0x58, 0xbc, 0xe2, 0xeb, 0xd6, 0x2f, + 0xf4, 0xe9, 0x88, 0xb0, 0xd5, 0x8a, 0x23, 0xd4, 0xf1, 0x15, 0xe1, 0x78, + 0x4b, 0x14, 0xe6, 0xfc, 0xe4, 0x37, 0xff, 0xf0, 0xa0, 0xfc, 0x93, 0xef, + 0xf7, 0x8b, 0xf3, 0xb6, 0x2c, 0x5f, 0xd2, 0x72, 0x9e, 0xc0, 0xb1, 0x7f, + 0x81, 0x27, 0x29, 0xec, 0x0b, 0x16, 0x63, 0x4f, 0x8b, 0xb2, 0xeb, 0xdf, + 0xc2, 0x58, 0xa8, 0x2e, 0x5c, 0x63, 0x49, 0xaf, 0x5d, 0x97, 0x3c, 0x67, + 0x91, 0x22, 0x9c, 0xc3, 0xf0, 0xd1, 0x22, 0x0f, 0x43, 0x00, 0x45, 0x37, + 0x7e, 0x25, 0x8b, 0xec, 0x8b, 0x22, 0x58, 0xbf, 0x68, 0x5e, 0xcd, 0x96, + 0x2f, 0xb3, 0x43, 0x95, 0x8b, 0x70, 0xc3, 0xf0, 0x92, 0x42, 0x2a, 0xbe, + 0x86, 0x67, 0x16, 0x29, 0x62, 0xe7, 0xe2, 0xc5, 0x7c, 0xd1, 0x90, 0x65, + 0x76, 0x89, 0x9d, 0x1a, 0x32, 0x2d, 0xf1, 0x09, 0x83, 0x58, 0xbb, 0x09, + 0x62, 0xd3, 0xb1, 0xb9, 0x81, 0x1d, 0xa0, 0xb1, 0x7e, 0xed, 0xf7, 0x71, + 0xac, 0x53, 0xa7, 0xdc, 0xd1, 0x91, 0x01, 0xa7, 0x84, 0xe1, 0x89, 0x5e, + 0xcc, 0xdd, 0x62, 0xff, 0xb8, 0x19, 0x67, 0xb8, 0x19, 0xd6, 0x2f, 0xf7, + 0x33, 0x40, 0x21, 0x01, 0x62, 0xb0, 0xfc, 0x3c, 0x79, 0x7e, 0x17, 0x06, + 0xff, 0x58, 0xbf, 0xfa, 0x7d, 0xcf, 0xcb, 0xfb, 0x93, 0xb2, 0xc5, 0xfb, + 0x35, 0x31, 0x71, 0x62, 0xb4, 0x7d, 0xdf, 0x45, 0xbf, 0xff, 0x9f, 0x85, + 0x9b, 0x4e, 0xff, 0x78, 0xbf, 0x3b, 0x62, 0xc5, 0xe6, 0xfc, 0xac, 0x54, + 0x0f, 0xe7, 0xcb, 0xb7, 0xde, 0xf8, 0xa3, 0x96, 0x2f, 0xf6, 0x84, 0x7e, + 0x70, 0x30, 0x96, 0x2f, 0xf6, 0x4e, 0x9a, 0x0f, 0xf5, 0x8b, 0xfc, 0xe1, + 0x72, 0x7e, 0xd1, 0xeb, 0x15, 0xa3, 0xe9, 0xf1, 0x95, 0xfb, 0xdf, 0xef, + 0x3a, 0x96, 0x2f, 0x63, 0xec, 0xb1, 0x7f, 0xbf, 0x90, 0xf1, 0x64, 0x16, + 0x2b, 0x65, 0x57, 0x63, 0x84, 0xbf, 0x70, 0x9b, 0x72, 0x2d, 0x13, 0x9e, + 0x14, 0x3f, 0x22, 0xe1, 0x6f, 0x87, 0x6f, 0x4f, 0xb8, 0xb1, 0x7e, 0xe3, + 0x1b, 0xf7, 0x58, 0xbf, 0xe8, 0xf1, 0xfc, 0x5c, 0xee, 0x0c, 0xb1, 0x73, + 0xff, 0x0f, 0xa0, 0x45, 0x37, 0xbc, 0xfb, 0xac, 0x54, 0xae, 0x1d, 0xe4, + 0xad, 0xc7, 0x84, 0x83, 0x42, 0x17, 0xc5, 0x96, 0xc5, 0x8b, 0xfa, 0x13, + 0x09, 0x3c, 0x16, 0x2b, 0x63, 0x7e, 0xe2, 0x37, 0x7e, 0x0b, 0x16, 0x25, + 0x8b, 0xff, 0xcd, 0xa8, 0x6f, 0xf7, 0x1e, 0x9c, 0x5b, 0x2c, 0x56, 0x8f, + 0x78, 0x42, 0x37, 0xf3, 0x9a, 0x1f, 0x27, 0x16, 0x2f, 0xff, 0xfd, 0x1d, + 0x9d, 0xc0, 0xcf, 0x66, 0x9b, 0xdc, 0x70, 0x18, 0x4f, 0xe5, 0x8b, 0xfe, + 0xf4, 0x1c, 0x1f, 0xc0, 0x32, 0xc5, 0x6c, 0x8a, 0xb1, 0x39, 0x5f, 0xf3, + 0x17, 0x3d, 0x90, 0x9d, 0x2c, 0x5d, 0x91, 0xb2, 0xc5, 0x69, 0x35, 0x22, + 0x86, 0xd7, 0x09, 0x03, 0x38, 0xbf, 0xfb, 0x52, 0x0f, 0xbc, 0xe8, 0x07, + 0x82, 0xc5, 0xf4, 0x5f, 0x70, 0x2c, 0x5f, 0x4f, 0xe4, 0x0b, 0x15, 0x28, + 0x8b, 0x35, 0x16, 0x38, 0x92, 0xff, 0xfc, 0x4c, 0x17, 0xb3, 0xe6, 0x75, + 0x9d, 0x64, 0x6f, 0xd7, 0x5e, 0xb7, 0xac, 0x58, 0xbb, 0x3e, 0xb1, 0x7f, + 0xd9, 0xcf, 0xb4, 0x00, 0xdd, 0xac, 0x5f, 0xfc, 0x03, 0xb9, 0x60, 0x0b, + 0x1a, 0x25, 0x8a, 0xc4, 0x4a, 0x38, 0xb8, 0x8e, 0xaf, 0xf3, 0xfd, 0xe4, + 0xa2, 0x12, 0xc5, 0xff, 0xed, 0x4f, 0xbd, 0x26, 0x66, 0x9a, 0x18, 0xb1, + 0x7a, 0x7f, 0xd6, 0xac, 0x5f, 0xb3, 0x0b, 0xbf, 0x2c, 0x5f, 0xf0, 0xb4, + 0xdc, 0x33, 0xdb, 0x04, 0xb1, 0x67, 0xd1, 0xf3, 0x78, 0xa2, 0xa5, 0x32, + 0xcc, 0x33, 0x74, 0xa6, 0x84, 0x45, 0xf6, 0xdf, 0xcf, 0x2c, 0x5f, 0x8f, + 0x9e, 0xcd, 0x2c, 0x5f, 0xe6, 0x20, 0x18, 0x16, 0x7d, 0x62, 0xfc, 0x64, + 0xf4, 0x6f, 0xac, 0x54, 0x0f, 0x80, 0x66, 0xb7, 0xe8, 0xb9, 0xc7, 0x89, + 0x62, 0xff, 0x87, 0xac, 0x17, 0xe4, 0xf8, 0xb1, 0x58, 0x88, 0x67, 0x22, + 0x11, 0x5d, 0xff, 0xf7, 0xd9, 0xf8, 0xfd, 0x35, 0x3b, 0x36, 0xb7, 0x58, + 0xbf, 0xde, 0x7d, 0x3e, 0xcc, 0x75, 0x8b, 0xdd, 0x30, 0xce, 0x22, 0x1c, + 0x35, 0x3b, 0xfc, 0x40, 0x0f, 0xff, 0x6d, 0x96, 0x2b, 0x0f, 0xb9, 0xce, + 0x2f, 0xa3, 0xb3, 0x52, 0xb1, 0x7f, 0xff, 0x47, 0x61, 0x85, 0x9b, 0x07, + 0x03, 0x39, 0xc7, 0x0b, 0x8b, 0x16, 0xcd, 0x91, 0x12, 0x02, 0x5a, 0xfa, + 0x34, 0x8a, 0x15, 0x35, 0x2c, 0x90, 0x1d, 0x88, 0x46, 0xed, 0x91, 0xba, + 0x3c, 0x33, 0xa2, 0x33, 0xd4, 0x61, 0xdf, 0x8d, 0x69, 0x8f, 0xc0, 0x49, + 0xc8, 0xc3, 0xbd, 0x1f, 0xad, 0xbc, 0xb1, 0x7f, 0xff, 0xe2, 0xcf, 0x93, + 0x6e, 0x61, 0xc4, 0xe5, 0x3a, 0xd6, 0x7b, 0x8b, 0x17, 0xff, 0x4f, 0xd9, + 0xfd, 0x3f, 0x2e, 0xdd, 0x62, 0xb7, 0x45, 0x7e, 0x9b, 0x2a, 0x24, 0x72, + 0x94, 0x30, 0x6f, 0xf4, 0x80, 0xef, 0xe2, 0x95, 0x8b, 0xfc, 0x42, 0x6e, + 0xc6, 0xe6, 0xac, 0x5f, 0xf4, 0xe8, 0x1a, 0xd4, 0x9f, 0x8b, 0x14, 0xe7, + 0xdf, 0xf3, 0x5b, 0xf8, 0xa0, 0x59, 0x80, 0x58, 0xbf, 0xe9, 0xee, 0x1c, + 0xff, 0xe4, 0xeb, 0x17, 0xdc, 0x27, 0x95, 0x8a, 0x94, 0x44, 0x1a, 0x58, + 0xc7, 0x77, 0x16, 0xcb, 0x17, 0xfe, 0xd0, 0xfe, 0x2d, 0x66, 0xff, 0xc5, + 0x8a, 0xc3, 0xd9, 0x71, 0x8b, 0xf3, 0xe9, 0xba, 0x9d, 0x62, 0xa0, 0x79, + 0x5b, 0x90, 0x5f, 0xdb, 0x36, 0xc4, 0x2f, 0x2c, 0x5f, 0xf6, 0x05, 0xfc, + 0x01, 0xe7, 0x4b, 0x17, 0xfc, 0xe0, 0xfe, 0xef, 0xcc, 0x1a, 0xc5, 0x80, + 0xb1, 0x5a, 0x3c, 0xc2, 0x3a, 0xbe, 0xf0, 0x9b, 0xcb, 0x17, 0xe9, 0xf6, + 0xb0, 0x6b, 0x17, 0xde, 0xd6, 0x0d, 0x62, 0xdc, 0x30, 0xf2, 0xe4, 0xa2, + 0xf0, 0x9b, 0xcb, 0x14, 0x62, 0x2c, 0xce, 0xdd, 0xe2, 0x8b, 0xdd, 0x33, + 0x4b, 0x17, 0xc3, 0xf8, 0x8d, 0x58, 0xa9, 0x3f, 0x5c, 0x31, 0x61, 0xfb, + 0xf6, 0x6f, 0xcc, 0x1a, 0xc5, 0xf8, 0x13, 0xd3, 0x09, 0x62, 0xf3, 0x10, + 0x16, 0x2b, 0xe7, 0xdc, 0xc5, 0x22, 0x29, 0xa9, 0x5d, 0x2e, 0x81, 0x46, + 0x42, 0x84, 0xd8, 0x54, 0xf7, 0x0d, 0x27, 0x23, 0xd1, 0x83, 0x42, 0x18, + 0xa3, 0x49, 0xe4, 0x26, 0xaf, 0xb8, 0xfe, 0x75, 0x8b, 0x9c, 0x6b, 0x17, + 0x08, 0x6b, 0x15, 0x1b, 0x1e, 0x8c, 0x79, 0x10, 0x85, 0xef, 0xe8, 0x9f, + 0xfa, 0xc3, 0xac, 0x5f, 0x07, 0xc9, 0xc5, 0x8b, 0x9c, 0x25, 0x8b, 0xba, + 0xb1, 0x62, 0x99, 0x10, 0x80, 0x2f, 0xe1, 0x1f, 0x86, 0x2f, 0xf3, 0x77, + 0xcc, 0xf1, 0x4a, 0xc5, 0xfe, 0x3e, 0x13, 0x6a, 0x7a, 0x2c, 0x5f, 0xd8, + 0x4d, 0xa9, 0xe8, 0xb1, 0x6f, 0x18, 0x7c, 0x47, 0x34, 0xbe, 0x9d, 0x88, + 0x4b, 0x17, 0xe9, 0xf7, 0x3e, 0xeb, 0x15, 0xa3, 0xcb, 0xe1, 0x1d, 0xf8, + 0xb0, 0xfa, 0xc5, 0x8b, 0xe1, 0xfd, 0xce, 0xb1, 0x73, 0x0d, 0x62, 0xdb, + 0x18, 0x6e, 0xa0, 0x47, 0x7b, 0xa6, 0x0d, 0x62, 0xe7, 0xfa, 0xc5, 0x68, + 0xdb, 0x7c, 0x7e, 0xa5, 0x37, 0x7c, 0x74, 0x39, 0x13, 0x30, 0x89, 0x7e, + 0xff, 0x6f, 0xfc, 0xef, 0xc1, 0x9d, 0x62, 0xfd, 0xf9, 0xd1, 0xe0, 0xb1, + 0x6f, 0x2c, 0x5f, 0xb6, 0x1b, 0x31, 0xab, 0x16, 0x1e, 0x1b, 0xc1, 0x09, + 0x5f, 0xff, 0xfb, 0xd2, 0x5e, 0xe6, 0xa5, 0xe1, 0xf9, 0xfb, 0x9b, 0xde, + 0xfa, 0x58, 0xbe, 0xcf, 0xbf, 0x16, 0x2b, 0x11, 0x22, 0x4d, 0xf7, 0xfc, + 0x13, 0x16, 0xdf, 0xed, 0xa3, 0xd6, 0x2f, 0xff, 0xb3, 0x5d, 0xc3, 0x27, + 0x6f, 0xbc, 0xea, 0x56, 0x2f, 0xf1, 0x6e, 0xde, 0x6e, 0xc1, 0xf4, 0x47, + 0x91, 0xfd, 0xff, 0xe1, 0x1c, 0x31, 0x8e, 0x40, 0x79, 0xcf, 0x2c, 0x58, + 0x12, 0x89, 0x72, 0x4b, 0xbe, 0xef, 0xd9, 0xda, 0xc5, 0xff, 0xc7, 0x93, + 0x4c, 0x2c, 0xe3, 0xe6, 0xeb, 0x15, 0x87, 0xd6, 0xe4, 0xb7, 0xc7, 0xe6, + 0x69, 0x62, 0xfe, 0x23, 0x3f, 0x39, 0x1e, 0xb1, 0x52, 0x7a, 0x98, 0x47, + 0x7f, 0x00, 0xed, 0x0d, 0xba, 0xd5, 0x8b, 0xfe, 0xf7, 0x30, 0x71, 0x14, + 0x8d, 0x62, 0xa4, 0xfb, 0xdc, 0xd6, 0xf8, 0x0f, 0xdc, 0x16, 0x2f, 0xf4, + 0x97, 0x9f, 0x62, 0x95, 0x8b, 0xff, 0xcf, 0xa7, 0xda, 0x4b, 0x3f, 0xa1, + 0x74, 0x58, 0xa9, 0x5c, 0xf2, 0x81, 0xc0, 0xd9, 0x77, 0x85, 0xbf, 0x71, + 0xa3, 0xea, 0x12, 0x47, 0x74, 0xfc, 0x23, 0xc0, 0x40, 0x44, 0x9e, 0x32, + 0xbf, 0xfd, 0xfc, 0xe6, 0x74, 0x67, 0xe0, 0x7d, 0x81, 0x62, 0xff, 0xf4, + 0x96, 0xed, 0xe6, 0x34, 0x3d, 0xa7, 0x65, 0x8b, 0xff, 0x38, 0xc5, 0xee, + 0x37, 0x98, 0xd5, 0x8b, 0xfb, 0x02, 0xee, 0x1c, 0x30, 0xd4, 0x47, 0x32, + 0x75, 0xff, 0xfd, 0x85, 0x86, 0xfd, 0xa2, 0xfb, 0x1b, 0x9a, 0xcf, 0x2c, + 0x5f, 0xfc, 0x1c, 0xf6, 0x19, 0x16, 0x3f, 0x7e, 0x58, 0xa9, 0x4f, 0x21, + 0xe1, 0xb9, 0xf4, 0x96, 0x5c, 0xa8, 0xdd, 0xf8, 0x46, 0xfa, 0xd3, 0x28, + 0xd1, 0x9a, 0x35, 0x1c, 0x4c, 0xe1, 0x46, 0xd1, 0xa1, 0xc2, 0x55, 0xc8, + 0xe3, 0xc1, 0xca, 0xc0, 0x88, 0xd9, 0x43, 0x7b, 0xca, 0x8e, 0xee, 0x50, + 0x2b, 0xce, 0x15, 0xc5, 0x28, 0x33, 0x53, 0xbc, 0x87, 0x95, 0xa3, 0xf9, + 0xf5, 0x36, 0x9d, 0x3f, 0x04, 0xa9, 0x9e, 0xbd, 0x40, 0xa7, 0x32, 0x39, + 0x49, 0x9a, 0xf4, 0xf6, 0xe8, 0xa1, 0xf7, 0xd2, 0x17, 0x61, 0x1e, 0x47, + 0x4a, 0x0c, 0x0e, 0x74, 0xeb, 0xaa, 0x53, 0xc5, 0xfb, 0xac, 0xdb, 0x67, + 0xfa, 0xc5, 0xff, 0x7a, 0x47, 0xad, 0x49, 0xf8, 0xb1, 0x7f, 0x4b, 0x68, + 0x39, 0x02, 0xc5, 0xfe, 0x86, 0x10, 0x33, 0x06, 0xb1, 0x7f, 0xa4, 0xbc, + 0x52, 0x7e, 0x2c, 0x5f, 0xe1, 0xb9, 0x78, 0xa4, 0x0b, 0x17, 0x16, 0xcb, + 0x17, 0xff, 0x08, 0x8c, 0xf4, 0x32, 0x3d, 0x88, 0x0b, 0x15, 0x04, 0x7b, + 0x0c, 0xcb, 0x73, 0x27, 0x32, 0xf8, 0xc5, 0xfd, 0xf9, 0x88, 0x4f, 0xa5, + 0x8b, 0x8d, 0xdd, 0x62, 0xfd, 0x09, 0x9e, 0x3a, 0xc5, 0xa5, 0x62, 0x8e, + 0x6e, 0x02, 0x27, 0xbd, 0xb0, 0xb6, 0x58, 0xbf, 0x1b, 0x25, 0x9c, 0x58, + 0xb8, 0x70, 0x58, 0xb0, 0x16, 0x28, 0xe6, 0xa9, 0x86, 0x2a, 0x51, 0x69, + 0x84, 0x4e, 0x40, 0xca, 0x57, 0xc3, 0x66, 0xed, 0x62, 0xfe, 0x7e, 0xdf, + 0x79, 0x0d, 0x62, 0xe1, 0x6e, 0xb1, 0x4c, 0x7d, 0x84, 0x47, 0xc3, 0x0b, + 0xce, 0x19, 0xd6, 0x2f, 0x8b, 0x81, 0xf1, 0x62, 0xfd, 0x99, 0xff, 0x3a, + 0xc5, 0xfe, 0x22, 0x9e, 0xce, 0xde, 0x58, 0xbf, 0xf4, 0x1c, 0x61, 0xfb, + 0xbd, 0xdc, 0xeb, 0x17, 0xff, 0x33, 0xf8, 0x5a, 0x6e, 0x18, 0x11, 0x2c, + 0x5f, 0xfe, 0xfe, 0x11, 0x37, 0xa4, 0xbd, 0x1d, 0x8b, 0x14, 0x34, 0xcb, + 0x5c, 0x9e, 0x23, 0x3f, 0xa1, 0xf9, 0x1a, 0xe6, 0xe8, 0xb1, 0x7f, 0xb6, + 0xcf, 0x49, 0x38, 0x16, 0x2b, 0x73, 0xcc, 0x71, 0x9b, 0xfc, 0xdb, 0x0f, + 0xf3, 0xce, 0xd6, 0x2f, 0xfe, 0xdb, 0x3d, 0x24, 0xe0, 0xce, 0xfc, 0xb1, + 0x7f, 0xa2, 0x83, 0x6b, 0x6f, 0x89, 0x62, 0xd1, 0x2c, 0x52, 0xc5, 0xf3, + 0x10, 0x3d, 0x25, 0xfe, 0x09, 0xd4, 0xa3, 0x3c, 0xe8, 0xb1, 0xca, 0xd7, + 0x7a, 0x32, 0x34, 0x5f, 0x3e, 0x93, 0x01, 0x9d, 0x64, 0x64, 0x9b, 0xa5, + 0x1c, 0xbf, 0xf1, 0x83, 0x34, 0x29, 0x40, 0x5b, 0xd7, 0x8f, 0x72, 0x35, + 0x1f, 0x42, 0x5e, 0x38, 0x88, 0x38, 0xc1, 0x6f, 0xff, 0xfe, 0x17, 0x70, + 0x8c, 0x62, 0xf6, 0x1f, 0x83, 0xfc, 0xe8, 0x6c, 0xc1, 0x2c, 0x5e, 0xe8, + 0x07, 0x58, 0xbf, 0xd2, 0x6f, 0x70, 0xf4, 0x84, 0xb1, 0x7e, 0x90, 0xb5, + 0x27, 0x58, 0xa8, 0x1f, 0x01, 0x1b, 0xde, 0x90, 0xa3, 0x3a, 0xe2, 0x28, + 0x31, 0xfe, 0xa3, 0x19, 0x7c, 0xd9, 0x49, 0x93, 0x28, 0x7f, 0xfa, 0x31, + 0x7b, 0xff, 0xd1, 0x87, 0x68, 0x46, 0x66, 0xb7, 0x66, 0xdd, 0x52, 0x34, + 0x97, 0xff, 0xa3, 0x0e, 0xd0, 0x8c, 0xcd, 0x6e, 0xcd, 0xba, 0xa4, 0x71, + 0x2f, 0x00, 0xa5, 0x62, 0xfd, 0x07, 0x20, 0x3a, 0xc5, 0xfa, 0x19, 0xe8, + 0x41, 0x62, 0xff, 0x74, 0x9f, 0x98, 0x53, 0x05, 0x8b, 0xff, 0xdb, 0xed, + 0x9f, 0x6c, 0x29, 0x17, 0x5f, 0xc5, 0x8b, 0xf6, 0xb7, 0x66, 0xdd, 0x52, + 0x40, 0x97, 0xf8, 0x4c, 0x5b, 0xc0, 0x71, 0xeb, 0x17, 0xff, 0xec, 0xd4, + 0xf3, 0xd0, 0xc2, 0x71, 0xc0, 0x71, 0xeb, 0x17, 0x9a, 0x11, 0x90, 0x4c, + 0x5f, 0x14, 0x00, 0x6f, 0xc3, 0x8b, 0xff, 0xcf, 0x27, 0x61, 0xea, 0x7d, + 0xfc, 0x1a, 0xc5, 0xfe, 0xc3, 0xb7, 0x7a, 0x73, 0x56, 0x2f, 0xb8, 0x5d, + 0xc1, 0x62, 0xd1, 0x92, 0xaa, 0xb3, 0x07, 0x3b, 0x27, 0x72, 0x93, 0xc6, + 0x9b, 0xf5, 0x1e, 0x24, 0xf8, 0xd6, 0xe8, 0xde, 0x36, 0x58, 0xbd, 0xf7, + 0x3a, 0xc5, 0xf6, 0xec, 0xdb, 0xaa, 0x4e, 0x02, 0xff, 0x0f, 0xf3, 0x1d, + 0x9a, 0x95, 0x8a, 0xd1, 0xf3, 0x91, 0x8d, 0xdd, 0xf1, 0x62, 0xf8, 0xdd, + 0xd8, 0x6b, 0x17, 0x48, 0x6b, 0x17, 0xf1, 0x67, 0xb7, 0x7e, 0x2c, 0x5d, + 0x2e, 0xb1, 0x70, 0xc4, 0xb1, 0x7e, 0xcf, 0xee, 0xdb, 0x2c, 0x58, 0x96, + 0x2f, 0xf1, 0x48, 0x1b, 0xc2, 0x95, 0x8a, 0xe1, 0xe1, 0xf8, 0x46, 0xf0, + 0x9a, 0x0b, 0x16, 0x82, 0xd0, 0x57, 0xcd, 0x99, 0x0e, 0xdf, 0xe2, 0x84, + 0xb8, 0xf0, 0xeb, 0x17, 0x00, 0x0b, 0x17, 0x4f, 0x16, 0x2a, 0x36, 0x55, + 0x78, 0x32, 0x2c, 0x84, 0x27, 0x64, 0x2e, 0x33, 0xa2, 0x53, 0x8c, 0x7c, + 0xb8, 0x02, 0xc4, 0x31, 0xc6, 0xdf, 0x2a, 0x88, 0x80, 0x33, 0x2e, 0xa1, + 0x8b, 0xf4, 0x23, 0x0d, 0xeb, 0x4d, 0x58, 0xbf, 0x30, 0xfe, 0xc0, 0x58, + 0xbf, 0x38, 0xfe, 0xe6, 0xac, 0x5d, 0x9d, 0x16, 0x2b, 0x73, 0xc2, 0xf1, + 0x4d, 0xc6, 0xc6, 0x1a, 0x88, 0xd6, 0x6a, 0xa8, 0xc4, 0xf3, 0xa6, 0x1b, + 0x4f, 0x0c, 0x1b, 0xfd, 0xd6, 0x46, 0xfd, 0x6c, 0x01, 0x07, 0x58, 0xbf, + 0x8f, 0x3e, 0x14, 0x4c, 0xb1, 0x7d, 0xe6, 0x6d, 0x96, 0x2f, 0x77, 0x0e, + 0x2c, 0x52, 0xc5, 0x99, 0x8d, 0x58, 0x07, 0xef, 0xd1, 0x42, 0x4a, 0x0b, + 0x14, 0xb1, 0x58, 0x6d, 0x48, 0xa6, 0xfd, 0x86, 0x96, 0x01, 0x62, 0xc0, + 0x58, 0xa8, 0x1b, 0xa2, 0x28, 0xbc, 0x0c, 0x09, 0x62, 0xf8, 0xa7, 0x3e, + 0xb1, 0x52, 0x6f, 0xf6, 0x1e, 0xb9, 0xe3, 0x3a, 0xe2, 0x7e, 0x92, 0x89, + 0xd9, 0x7e, 0x93, 0x89, 0x6b, 0xcb, 0x21, 0xaf, 0xde, 0xfb, 0xee, 0xb1, + 0x7f, 0xbd, 0xde, 0xef, 0xcf, 0xba, 0xc5, 0xe3, 0x7e, 0xeb, 0x15, 0x87, + 0xa8, 0x23, 0x6a, 0x8f, 0x44, 0x99, 0x39, 0x5f, 0xb5, 0xbb, 0x36, 0xea, + 0x91, 0x24, 0xba, 0x11, 0x92, 0x7b, 0x98, 0x4b, 0x5f, 0x4e, 0x5d, 0xa3, + 0x68, 0xbf, 0xa0, 0xda, 0xdb, 0xe2, 0x58, 0xbf, 0x72, 0x40, 0x1e, 0xcb, + 0x17, 0xe9, 0x36, 0x30, 0x79, 0x11, 0xed, 0xf0, 0xc2, 0xff, 0x4e, 0x46, + 0x1d, 0x9b, 0xa9, 0x62, 0xa3, 0x11, 0xfe, 0xf0, 0x84, 0x24, 0x3b, 0xf6, + 0x04, 0x01, 0x71, 0x62, 0xe0, 0x80, 0xb1, 0x7f, 0xdf, 0x9d, 0x67, 0x8a, + 0x4e, 0xb1, 0x7c, 0x6e, 0x98, 0x25, 0x8b, 0xf9, 0xf9, 0xf8, 0xf7, 0x3a, + 0xc5, 0x6e, 0x88, 0xe7, 0x38, 0xf1, 0x2d, 0xfe, 0x6f, 0x16, 0x6c, 0xc4, + 0xb1, 0x7e, 0x98, 0x8a, 0x46, 0xb1, 0x7b, 0xac, 0x3f, 0x6b, 0x16, 0x09, + 0x62, 0xa0, 0x6d, 0xcd, 0x24, 0xbe, 0x72, 0xd3, 0xac, 0x5d, 0xdc, 0xac, + 0x57, 0xcd, 0xc9, 0x10, 0xdf, 0xcf, 0xb0, 0xa2, 0xee, 0x56, 0x2f, 0xcd, + 0xad, 0x87, 0x2b, 0x15, 0x27, 0xb5, 0x03, 0x1a, 0x58, 0xbe, 0x6e, 0xe1, + 0xc5, 0x8b, 0x66, 0x8d, 0x81, 0x06, 0x5f, 0xff, 0x84, 0x4c, 0x6f, 0x8d, + 0x92, 0x86, 0x7d, 0xce, 0xb1, 0x73, 0x76, 0xb1, 0x77, 0x78, 0xb1, 0x7e, + 0x3b, 0x7d, 0xe2, 0x58, 0xa7, 0x3c, 0x16, 0x18, 0xad, 0x1f, 0xcf, 0x96, + 0x6e, 0xd4, 0x16, 0x2f, 0xa2, 0x62, 0x02, 0xc5, 0x39, 0xbb, 0x61, 0x8b, + 0xff, 0xc5, 0x8c, 0x3e, 0x1f, 0x0b, 0xdc, 0xfa, 0xc5, 0xff, 0xe9, 0xfc, + 0x9f, 0x7f, 0xbf, 0xb3, 0x0e, 0xb1, 0x6c, 0x35, 0x12, 0x7b, 0xa4, 0xdf, + 0x8f, 0xac, 0x1f, 0x96, 0x2f, 0xf3, 0x0e, 0x7a, 0x39, 0x6c, 0xb1, 0x7c, + 0x09, 0x78, 0x96, 0x2f, 0xee, 0xc3, 0xf1, 0x48, 0x16, 0x2f, 0xee, 0xfd, + 0x25, 0x9c, 0x58, 0xa9, 0x3d, 0xe7, 0x30, 0xa9, 0x47, 0xfb, 0x94, 0x80, + 0xd4, 0x50, 0x81, 0xbf, 0xb5, 0xa7, 0xf4, 0x9d, 0x62, 0xfe, 0xdb, 0xee, + 0x01, 0x71, 0x62, 0xf6, 0x04, 0x6a, 0xc5, 0xf7, 0xe4, 0x8d, 0x58, 0xa9, + 0x45, 0x03, 0x17, 0x70, 0xc3, 0xa8, 0x7e, 0xfc, 0xc4, 0x42, 0xd9, 0x62, + 0xc3, 0x58, 0xa5, 0x8b, 0xec, 0xe8, 0x29, 0x58, 0xb6, 0xce, 0x6c, 0x08, + 0x32, 0xb6, 0x3e, 0x86, 0x42, 0xbf, 0xed, 0x73, 0x3a, 0x05, 0x24, 0x35, + 0x8b, 0x9a, 0x33, 0x65, 0xff, 0x01, 0x95, 0x64, 0x29, 0xcd, 0x30, 0xdc, + 0xcb, 0xb5, 0xf7, 0x5b, 0x89, 0xeb, 0x4a, 0x27, 0x25, 0x68, 0x67, 0x81, + 0x74, 0xa1, 0x65, 0xc8, 0xca, 0x7d, 0x0e, 0x00, 0x8f, 0xa3, 0xa1, 0x20, + 0x19, 0x15, 0xff, 0xdb, 0x46, 0x77, 0xd5, 0x85, 0x9f, 0x6e, 0x2c, 0x56, + 0xd0, 0x84, 0x8b, 0x85, 0xf6, 0xb0, 0x6e, 0xad, 0x12, 0xf8, 0x25, 0x85, + 0xf2, 0x74, 0x2b, 0xd3, 0x98, 0xdd, 0x29, 0x04, 0xdd, 0x51, 0x94, 0xdf, + 0x47, 0xfd, 0xe3, 0xd6, 0x2f, 0xda, 0xf1, 0x0b, 0xcb, 0x17, 0xfe, 0x35, + 0xa3, 0x33, 0x5b, 0xb3, 0x6e, 0xa9, 0x35, 0x0b, 0xee, 0x4f, 0xb8, 0xb1, + 0x7f, 0xe6, 0x84, 0x66, 0x6b, 0x76, 0x6d, 0xd5, 0x22, 0xa9, 0x60, 0x96, + 0x2f, 0x3f, 0x70, 0x58, 0xa7, 0x36, 0x3f, 0x13, 0xa5, 0x8a, 0x94, 0xdc, + 0xf0, 0xa4, 0xd2, 0x9e, 0xd4, 0x4e, 0x47, 0xe8, 0x40, 0xf5, 0x10, 0x5f, + 0xfd, 0xac, 0xea, 0x98, 0xde, 0x35, 0x18, 0x67, 0xe3, 0x96, 0x2f, 0xff, + 0xd8, 0x6f, 0x37, 0x83, 0x4c, 0x6f, 0x1a, 0x8c, 0x33, 0xf1, 0xcb, 0x17, + 0xff, 0xff, 0xf7, 0x5c, 0x16, 0xdb, 0x34, 0x7c, 0x7e, 0x4c, 0x3f, 0xd7, + 0xf6, 0xf3, 0x31, 0xbc, 0x6a, 0x30, 0xcf, 0xc7, 0x2c, 0x5f, 0xc0, 0x30, + 0xcf, 0xc7, 0x46, 0x6c, 0x9b, 0x83, 0xac, 0xf4, 0x69, 0xa8, 0xc5, 0x47, + 0x9d, 0x64, 0x7b, 0xb7, 0xf6, 0x6b, 0x76, 0x6d, 0xd5, 0x21, 0x49, 0x7f, + 0xe6, 0x63, 0xe6, 0x80, 0x42, 0x02, 0xc5, 0xff, 0x7b, 0x99, 0xa0, 0x10, + 0x80, 0xb1, 0x71, 0x32, 0xc5, 0x49, 0xe8, 0x0c, 0xea, 0xff, 0x3f, 0x7e, + 0x66, 0x3f, 0x16, 0x2e, 0xe3, 0x2c, 0x5e, 0xe4, 0xb2, 0xc5, 0x40, 0xf9, + 0xf0, 0xd1, 0xc5, 0xef, 0x8b, 0x69, 0xd2, 0xc5, 0xf8, 0xa2, 0xfb, 0x41, + 0x62, 0xfe, 0x60, 0x73, 0xd9, 0xba, 0xc5, 0x49, 0xfd, 0xe1, 0x19, 0x14, + 0xdf, 0xb0, 0x7b, 0x60, 0x4b, 0x17, 0x1e, 0x33, 0xea, 0x85, 0x0a, 0x11, + 0xdc, 0x84, 0x47, 0xa1, 0x51, 0xd0, 0xb2, 0xa3, 0x15, 0x5d, 0xb4, 0xa5, + 0x0b, 0xf6, 0xb7, 0x66, 0xdd, 0x52, 0x1a, 0x17, 0xf1, 0x38, 0xf4, 0xfb, + 0x2c, 0x5a, 0x33, 0x0f, 0x95, 0xcd, 0xef, 0xfc, 0x07, 0x9f, 0x46, 0x7f, + 0x1f, 0xeb, 0x17, 0xa3, 0x5c, 0x74, 0x6e, 0xb1, 0x7d, 0xd6, 0x75, 0xdc, + 0x6b, 0x8d, 0x6b, 0x17, 0xcf, 0xf7, 0x3a, 0xc5, 0xc2, 0xfa, 0xc5, 0xf4, + 0x6b, 0xeb, 0xb8, 0xd7, 0x1a, 0xd6, 0x2f, 0x6a, 0x62, 0x58, 0xbf, 0x7d, + 0xa2, 0x73, 0xac, 0x53, 0x9e, 0x39, 0xc7, 0xaf, 0xfb, 0x0e, 0xfa, 0xce, + 0x45, 0x2b, 0x17, 0xbd, 0x9f, 0x58, 0xa1, 0x9e, 0xb7, 0x8e, 0x6f, 0xf7, + 0xbc, 0xed, 0xd2, 0x7c, 0xb1, 0x7f, 0xff, 0x85, 0xcf, 0xe0, 0xc3, 0x0f, + 0x8e, 0x1f, 0x9f, 0x91, 0x06, 0xb1, 0x52, 0x89, 0xd6, 0x35, 0xbd, 0xe9, + 0x1a, 0xc5, 0xfe, 0xf7, 0xbe, 0xc7, 0xc2, 0x58, 0xbf, 0xd1, 0x3b, 0xfe, + 0x2c, 0xf4, 0x9e, 0x83, 0x8e, 0xd9, 0xd6, 0x2e, 0x60, 0x92, 0x2f, 0x64, + 0xf4, 0x58, 0xa7, 0x36, 0xda, 0x18, 0xbf, 0xe9, 0xfc, 0xed, 0xa9, 0xc1, + 0xac, 0x5f, 0xfa, 0x67, 0xa4, 0x94, 0xc5, 0x31, 0x2c, 0x5f, 0xa2, 0xe3, + 0x67, 0x96, 0x2f, 0xf6, 0xb5, 0x3d, 0xf3, 0xe3, 0x58, 0xb7, 0xe4, 0xf7, + 0xdc, 0xa6, 0xff, 0xfa, 0x7f, 0x31, 0x70, 0x5e, 0x10, 0xa2, 0x9e, 0x8b, + 0x15, 0x2a, 0xea, 0x9d, 0xde, 0x3e, 0x17, 0xf1, 0x38, 0xe9, 0x24, 0xe8, + 0xff, 0x20, 0x23, 0x9f, 0x42, 0x7f, 0xa1, 0x35, 0xfc, 0xfc, 0x8b, 0x35, + 0x2b, 0x16, 0xd9, 0x62, 0xff, 0xf7, 0x9f, 0xe2, 0xfb, 0x3f, 0x7c, 0x93, + 0x56, 0x28, 0x67, 0xbf, 0x82, 0x77, 0xdb, 0xb3, 0x6e, 0xa9, 0x27, 0xcb, + 0xff, 0x7d, 0xbd, 0xc6, 0xed, 0x88, 0x0b, 0x17, 0xf7, 0x03, 0x90, 0xb5, + 0x2b, 0x16, 0x7d, 0x1f, 0x79, 0xcf, 0xee, 0xf4, 0xac, 0x5f, 0xcf, 0xe1, + 0x69, 0xb8, 0xb1, 0x5a, 0x4c, 0x33, 0xf0, 0xa0, 0xf1, 0x3f, 0x41, 0x7b, + 0xe0, 0xb7, 0x8b, 0xad, 0x58, 0xbf, 0xfc, 0x2e, 0x7d, 0xa1, 0x3e, 0x29, + 0x07, 0x16, 0x2f, 0xfb, 0x3a, 0x7d, 0xe3, 0xb3, 0x46, 0xac, 0x5e, 0xfb, + 0xfb, 0x48, 0x89, 0xe2, 0x55, 0xff, 0xa3, 0x3f, 0x9f, 0x6e, 0x8f, 0xce, + 0xd6, 0x2f, 0xf7, 0xdf, 0x4f, 0xe6, 0x89, 0x62, 0x9c, 0xfe, 0x62, 0x45, + 0xbf, 0xcf, 0xe7, 0xf7, 0xc5, 0xe5, 0x8b, 0xff, 0xf0, 0xb6, 0xd4, 0x99, + 0x3d, 0x05, 0x13, 0x6a, 0x7a, 0x2c, 0x5f, 0x00, 0x42, 0xd2, 0xc5, 0xf4, + 0x9f, 0x4c, 0xb1, 0x7f, 0xa7, 0xdf, 0x68, 0x8c, 0xc5, 0x8b, 0xfb, 0x3c, + 0xfe, 0x68, 0x96, 0x2f, 0xfe, 0x99, 0xd4, 0xf1, 0xf5, 0xa7, 0xe2, 0xc5, + 0x44, 0x8a, 0x6e, 0x1a, 0xf8, 0xba, 0xa2, 0x4f, 0x43, 0x44, 0x47, 0x34, + 0x02, 0xe9, 0x12, 0x7a, 0x19, 0x17, 0xf6, 0x66, 0xfe, 0xcd, 0xd6, 0x2e, + 0xd7, 0xd6, 0x2f, 0xf9, 0xa0, 0xe3, 0xfc, 0xc3, 0x8b, 0x17, 0xe1, 0x7b, + 0xd3, 0xd1, 0x62, 0xff, 0xe9, 0x8a, 0x27, 0x04, 0xc5, 0x16, 0x01, 0x62, + 0xd3, 0xa3, 0xf3, 0x22, 0xbb, 0xee, 0x8f, 0xce, 0xd6, 0x2d, 0xf7, 0x3c, + 0xc6, 0x26, 0xbb, 0xe2, 0x58, 0xac, 0x37, 0xc2, 0x26, 0xb7, 0x52, 0xc5, + 0xfb, 0x3e, 0xe5, 0xe5, 0x8b, 0x9a, 0x25, 0x8b, 0x9b, 0xcb, 0x17, 0xfe, + 0x21, 0x7d, 0xf5, 0x9c, 0x8a, 0x56, 0x2a, 0x23, 0xd6, 0x38, 0xbd, 0xfd, + 0xc2, 0x6d, 0xb6, 0x95, 0x8b, 0xff, 0xff, 0xf4, 0xf9, 0xc9, 0xb9, 0xcc, + 0xf7, 0xd8, 0xff, 0xc2, 0x99, 0xe3, 0x0b, 0xa2, 0xc5, 0xf3, 0x44, 0xff, + 0x58, 0xbf, 0xfd, 0xac, 0x78, 0xb8, 0x29, 0xec, 0xa7, 0xcb, 0x17, 0xee, + 0x82, 0x8f, 0x90, 0x2c, 0x54, 0xaa, 0x19, 0x80, 0xaf, 0x64, 0xee, 0xdd, + 0x1e, 0x47, 0xa2, 0xf3, 0xc2, 0x07, 0xc4, 0x62, 0x4b, 0xbd, 0xe1, 0x69, + 0x62, 0xfe, 0x11, 0x60, 0x05, 0xc5, 0x8a, 0xec, 0xf3, 0x38, 0x3d, 0x7f, + 0xef, 0x68, 0x51, 0x73, 0x76, 0x8b, 0x8b, 0x15, 0x87, 0xce, 0x22, 0x3b, + 0x80, 0x1a, 0xc5, 0xff, 0x45, 0x30, 0x0c, 0x00, 0x14, 0x16, 0x2f, 0xe2, + 0x9f, 0x14, 0xf9, 0x62, 0xa0, 0x88, 0x2c, 0x19, 0x63, 0xdb, 0xd1, 0x3f, + 0x16, 0x2f, 0x9e, 0x75, 0x8b, 0x17, 0xe9, 0xf7, 0x79, 0xe9, 0x37, 0xff, + 0x1e, 0xbf, 0xf4, 0x42, 0x2d, 0xb9, 0xbb, 0x45, 0xc5, 0x8a, 0x94, 0x40, + 0xe1, 0xed, 0xcd, 0xc5, 0x8b, 0xf0, 0xa2, 0x89, 0x8d, 0x58, 0xbf, 0xef, + 0x4f, 0x6d, 0x16, 0xa7, 0xa2, 0xc5, 0x47, 0xa2, 0x03, 0x82, 0xfe, 0x2c, + 0xa5, 0x8b, 0xfb, 0x42, 0x81, 0x67, 0x6b, 0x17, 0xbe, 0xfa, 0x58, 0xa8, + 0xd8, 0xf6, 0x30, 0x30, 0x45, 0xf6, 0xc5, 0x8b, 0x46, 0x46, 0xed, 0x97, + 0x4f, 0x58, 0x59, 0xd6, 0x9e, 0x46, 0x84, 0x51, 0xac, 0x62, 0x67, 0x0b, + 0xb6, 0x84, 0xd0, 0xe1, 0x1b, 0x91, 0x96, 0x9a, 0x8b, 0xbc, 0x2d, 0x5e, + 0x53, 0xec, 0x4b, 0xba, 0x2f, 0x38, 0xc7, 0xe3, 0x36, 0x69, 0x47, 0x25, + 0x19, 0xd7, 0x21, 0x47, 0xe8, 0x77, 0x0a, 0x14, 0x31, 0xd0, 0x8b, 0xea, + 0x33, 0xbf, 0xfd, 0x18, 0x76, 0x84, 0x66, 0x6b, 0x76, 0x6d, 0xd5, 0x23, + 0x51, 0x7f, 0xf4, 0x0a, 0x63, 0x26, 0x2c, 0x21, 0x62, 0xc5, 0xfb, 0x5b, + 0xb3, 0x6e, 0xa9, 0x2e, 0xcb, 0xb0, 0x96, 0x2b, 0x0f, 0x35, 0xcd, 0xee, + 0x8f, 0xf2, 0xc5, 0xff, 0x3f, 0xdc, 0xd9, 0x1b, 0x1d, 0x62, 0xff, 0xf6, + 0x75, 0x3f, 0x9e, 0x06, 0x14, 0xfb, 0x8b, 0x17, 0xff, 0x49, 0xc3, 0xf3, + 0x90, 0xa1, 0x9c, 0x58, 0xbc, 0x44, 0x35, 0x8b, 0xc7, 0x9f, 0xac, 0x52, + 0xc5, 0xc1, 0x46, 0x41, 0x32, 0xbd, 0x0d, 0xfc, 0xe4, 0x09, 0xa4, 0x8a, + 0x21, 0xc0, 0x87, 0x6f, 0xfa, 0x33, 0x3e, 0xfa, 0xf0, 0x99, 0x62, 0xa3, + 0x13, 0xfc, 0x78, 0xd2, 0xf8, 0xeb, 0x77, 0x7d, 0x4b, 0x17, 0x01, 0xd6, + 0x2c, 0x35, 0x8b, 0xa4, 0xeb, 0x15, 0xf3, 0x53, 0xc1, 0x2b, 0x47, 0x2c, + 0x58, 0x96, 0x2b, 0x63, 0x4c, 0x71, 0x5b, 0xb6, 0x95, 0x8b, 0xed, 0xd9, + 0xb7, 0x54, 0x97, 0xc5, 0xe0, 0x82, 0x09, 0x22, 0xc4, 0x91, 0x18, 0x68, + 0x6f, 0xcc, 0x2e, 0xbf, 0xe2, 0x58, 0xad, 0x22, 0x90, 0xea, 0x5e, 0x24, + 0xbf, 0xdf, 0xc3, 0x5a, 0x7b, 0xea, 0x58, 0xbd, 0x09, 0xed, 0x62, 0xfb, + 0xb0, 0x49, 0x2c, 0x5d, 0xf7, 0x58, 0xb6, 0x49, 0xba, 0xf1, 0x1d, 0xc0, + 0xfa, 0xc5, 0xc2, 0xe2, 0xc5, 0xd9, 0xf5, 0x8a, 0x19, 0xaf, 0x88, 0x62, + 0xe6, 0xe8, 0xb1, 0x7d, 0x01, 0x16, 0xcb, 0x17, 0xf3, 0x7b, 0x93, 0x9b, + 0x2c, 0x54, 0x47, 0xa4, 0x11, 0x25, 0xee, 0x48, 0x16, 0x2b, 0xe7, 0x83, + 0xe2, 0x4b, 0x4a, 0xc5, 0xf1, 0x37, 0x7c, 0x58, 0xac, 0x3d, 0x6e, 0x11, + 0x78, 0x46, 0xf0, 0x59, 0xa5, 0x8b, 0x79, 0x62, 0xf6, 0x4f, 0x6b, 0x17, + 0xfc, 0xfa, 0xcd, 0x9e, 0x18, 0x35, 0x8b, 0xfd, 0xa0, 0x7b, 0x8c, 0x0c, + 0x58, 0xa7, 0x45, 0xd6, 0x87, 0xbe, 0x24, 0xc3, 0xa2, 0x39, 0xbf, 0xf4, + 0x18, 0x0d, 0xa7, 0xdd, 0xfb, 0x58, 0xb8, 0x80, 0xb1, 0x5d, 0x9e, 0xbf, + 0xd0, 0x2f, 0xba, 0xbe, 0x20, 0xd6, 0x2f, 0x45, 0x91, 0x2c, 0x59, 0xd6, + 0x2b, 0xb3, 0xd8, 0x88, 0xa0, 0xe3, 0xf6, 0xd2, 0xc5, 0x2c, 0x53, 0x97, + 0xda, 0x12, 0xa5, 0x8b, 0x3a, 0xc5, 0xb6, 0x34, 0xbd, 0xf8, 0x65, 0xba, + 0x2c, 0x57, 0xcf, 0xe1, 0x8f, 0x04, 0x51, 0x7d, 0x85, 0x30, 0x58, 0xb4, + 0x67, 0x58, 0xbd, 0xd3, 0xd7, 0x07, 0x25, 0x03, 0x64, 0x78, 0x11, 0x64, + 0x2f, 0x37, 0x30, 0x88, 0xe3, 0x4b, 0x07, 0x25, 0x64, 0x70, 0x11, 0x14, + 0x60, 0x5c, 0x87, 0x47, 0xa1, 0x3e, 0x27, 0xb8, 0xe8, 0x63, 0x86, 0x5d, + 0x7f, 0xfa, 0x30, 0xed, 0x08, 0xcc, 0xd6, 0xec, 0xdb, 0xaa, 0x47, 0xb2, + 0xdd, 0x7a, 0xc5, 0xff, 0x0d, 0xb7, 0x9d, 0xc4, 0x43, 0x58, 0xbf, 0xfe, + 0x78, 0x72, 0x3f, 0xe2, 0xdf, 0x36, 0x30, 0x7a, 0x58, 0xbf, 0xff, 0xb3, + 0xc4, 0x2d, 0xda, 0x3e, 0x7a, 0x36, 0x86, 0xfa, 0x58, 0xbf, 0xe1, 0xb4, + 0x7c, 0xe8, 0x6d, 0x1e, 0xb1, 0x7b, 0xa9, 0xbb, 0x58, 0xbf, 0xff, 0xe2, + 0x01, 0x8d, 0xd3, 0xdc, 0x1b, 0x74, 0x6f, 0x8a, 0x12, 0x4b, 0x15, 0x28, + 0x8c, 0x72, 0x1b, 0xce, 0x40, 0x58, 0xad, 0x93, 0xfb, 0x81, 0xdc, 0x4b, + 0x1a, 0x60, 0xfc, 0x32, 0xfa, 0x10, 0xdf, 0xfc, 0x2d, 0x45, 0xa7, 0xd9, + 0x8e, 0xfc, 0x58, 0xbf, 0x38, 0xe7, 0x5c, 0x58, 0xbf, 0xfb, 0x3f, 0x9e, + 0xef, 0x77, 0xd7, 0xf1, 0x62, 0xfd, 0xad, 0xd9, 0xb7, 0x54, 0x9c, 0x25, + 0xf1, 0xc5, 0xee, 0x2c, 0x5e, 0xd0, 0x86, 0xb1, 0x7f, 0x3c, 0x04, 0x09, + 0x89, 0x62, 0xb0, 0xf3, 0x7e, 0x3d, 0x7f, 0xe7, 0xe8, 0xd1, 0x71, 0xf5, + 0x27, 0x58, 0xbf, 0xa5, 0xf5, 0xa7, 0x09, 0x62, 0xff, 0xd8, 0xe0, 0x90, + 0x31, 0x0b, 0x16, 0x2f, 0x7f, 0x22, 0x58, 0xb7, 0xd6, 0x28, 0x66, 0xc1, + 0x87, 0xad, 0x19, 0xd6, 0xae, 0x76, 0x4c, 0xa1, 0x2d, 0x98, 0x60, 0x8e, + 0x32, 0x8c, 0x46, 0x34, 0xdd, 0xdc, 0x62, 0x21, 0x3a, 0x09, 0x17, 0x09, + 0xb2, 0xff, 0xe8, 0xc6, 0x84, 0x66, 0x6b, 0x76, 0x6d, 0xd5, 0x22, 0x79, + 0x7f, 0xe7, 0x8a, 0x32, 0x45, 0x3e, 0x90, 0x2c, 0x5f, 0x7e, 0x48, 0xd5, + 0x8b, 0xf6, 0xa2, 0xcc, 0x09, 0x62, 0xe3, 0x63, 0x22, 0x3c, 0xd0, 0xc8, + 0xea, 0x5d, 0x56, 0xd6, 0xd2, 0xbb, 0xa1, 0x09, 0x3c, 0x29, 0x36, 0xb3, + 0x2a, 0xde, 0x3a, 0xce, 0xd7, 0xe2, 0x95, 0x1f, 0xa9, 0xf2, 0x2f, 0xc6, + 0x4f, 0xc9, 0xd4, 0xbe, 0x90, 0xbc, 0x09, 0x64, 0x38, 0x47, 0xdf, 0xe8, + 0xcc, 0xd6, 0xec, 0xdb, 0xaa, 0x42, 0xa2, 0xfd, 0xad, 0xd9, 0xb7, 0x54, + 0x93, 0x25, 0xfc, 0xff, 0xc6, 0xec, 0x0b, 0x16, 0x8c, 0xc3, 0xe5, 0x8e, + 0x37, 0xbf, 0xfd, 0x18, 0x76, 0x84, 0x66, 0x6b, 0x76, 0x6d, 0xd5, 0x23, + 0x39, 0x7f, 0xe6, 0x84, 0x66, 0x6b, 0x76, 0x6d, 0xd5, 0x24, 0x69, 0x7e, + 0x63, 0x87, 0x20, 0x58, 0xb4, 0x61, 0xcf, 0xe7, 0xea, 0x15, 0xb2, 0x7b, + 0x43, 0x85, 0x51, 0xa5, 0xbe, 0x86, 0xc5, 0xff, 0x9a, 0x11, 0x99, 0xad, + 0xd9, 0xb7, 0x54, 0x87, 0x45, 0xc0, 0xe8, 0xb1, 0x7e, 0xd6, 0xd3, 0xbe, + 0x2c, 0x5f, 0xc5, 0x9e, 0xe4, 0x9d, 0x62, 0xf6, 0xb3, 0x65, 0x8b, 0xd3, + 0xee, 0x2c, 0x5e, 0xd6, 0xd1, 0x9f, 0x45, 0x63, 0x0d, 0x70, 0xab, 0xc5, + 0xa1, 0x8f, 0x5f, 0xfe, 0x21, 0x78, 0x46, 0xfb, 0xbd, 0xdf, 0x5c, 0x58, + 0xbf, 0xfc, 0x26, 0x78, 0x38, 0x38, 0x2e, 0x7c, 0x4b, 0x17, 0xd9, 0xa2, + 0x95, 0x8b, 0xda, 0x84, 0x66, 0x22, 0xef, 0x89, 0xfe, 0x4b, 0xa8, 0xc5, + 0x4b, 0x73, 0x0f, 0xc7, 0x8c, 0x6e, 0xf6, 0xf9, 0xa5, 0x8b, 0x7d, 0x62, + 0xa4, 0xd8, 0x08, 0x7a, 0xfd, 0x1b, 0x75, 0xba, 0xe7, 0x16, 0x2f, 0xff, + 0xee, 0xbb, 0x30, 0x7f, 0x70, 0x7f, 0x0b, 0x86, 0x19, 0xf8, 0xe5, 0x8b, + 0xdb, 0x8b, 0x75, 0x8b, 0x84, 0x4b, 0x17, 0xfd, 0x87, 0xe3, 0xc7, 0x66, + 0xa5, 0x62, 0xa3, 0x64, 0x6e, 0x6e, 0xd5, 0x1e, 0x41, 0xd4, 0x2f, 0x7e, + 0xf1, 0xfe, 0xe3, 0x58, 0xbe, 0xe0, 0x8e, 0xeb, 0x17, 0xa4, 0xe3, 0x58, + 0xb8, 0x2f, 0xac, 0x53, 0x9e, 0xc9, 0x11, 0x84, 0x3b, 0x7e, 0xc2, 0x1e, + 0x6c, 0xb1, 0x7f, 0xcf, 0xae, 0x16, 0x0f, 0xf2, 0xb1, 0x7b, 0x3b, 0x1a, + 0xc5, 0xda, 0xc5, 0x8b, 0xe9, 0x9d, 0xf0, 0x66, 0xd7, 0x43, 0xd4, 0xe8, + 0xcc, 0xf9, 0x41, 0x36, 0xdf, 0xb3, 0x5b, 0x88, 0xd5, 0x8b, 0xfe, 0xde, + 0x4f, 0x8e, 0x79, 0x8f, 0x58, 0xbe, 0x7d, 0x33, 0xac, 0x5f, 0xf8, 0xb0, + 0xd6, 0x8b, 0x9f, 0x91, 0xac, 0x5e, 0x89, 0xbc, 0xb1, 0x7d, 0xbb, 0x36, + 0xea, 0x92, 0x68, 0xbc, 0x13, 0x7d, 0x62, 0xfe, 0x9d, 0xf3, 0x7f, 0x89, + 0x62, 0xd9, 0xd9, 0xe7, 0x1c, 0x7a, 0xff, 0xd8, 0x43, 0x93, 0x3a, 0xe7, + 0x40, 0x3a, 0xc5, 0xd2, 0x4b, 0x15, 0xc3, 0xdd, 0xe8, 0x8f, 0x7e, 0x7e, + 0x7b, 0x3e, 0xb1, 0x7f, 0x9f, 0x59, 0x14, 0x8b, 0xaf, 0x58, 0xa1, 0xaa, + 0x6f, 0xc2, 0xb3, 0x4f, 0x1c, 0x86, 0x24, 0x0d, 0x0f, 0x13, 0xff, 0x21, + 0x0b, 0xe2, 0x4e, 0x85, 0x17, 0xda, 0x61, 0xba, 0xc5, 0xff, 0xed, 0xdb, + 0x5c, 0xfb, 0x3f, 0x39, 0x9c, 0x58, 0xbf, 0xff, 0xec, 0x2f, 0x71, 0xf7, + 0xc2, 0xe6, 0xff, 0x7f, 0xee, 0x1e, 0xcb, 0x17, 0xfd, 0xc6, 0xef, 0x22, + 0x9f, 0xf1, 0x62, 0xcf, 0xf4, 0x78, 0x92, 0x5f, 0x9a, 0xef, 0xf6, 0xb6, + 0xe6, 0xb5, 0x21, 0x2c, 0x5f, 0xd9, 0xb6, 0x6f, 0x83, 0x58, 0xbf, 0xf8, + 0xcd, 0xfe, 0xff, 0xdd, 0xb9, 0xf9, 0x58, 0xaf, 0xa3, 0x89, 0x8d, 0x08, + 0xdf, 0x85, 0xf7, 0xfe, 0xfb, 0x96, 0xdc, 0x14, 0xea, 0x25, 0x8b, 0xff, + 0xf6, 0x6d, 0x3c, 0x7d, 0x61, 0x98, 0xe5, 0x27, 0x58, 0xa8, 0x22, 0x57, + 0xc8, 0x37, 0xbd, 0x3c, 0x58, 0xb8, 0xf0, 0x58, 0xa9, 0x36, 0xb0, 0x1d, + 0xbf, 0xec, 0xe9, 0xac, 0x8a, 0x27, 0x3a, 0xc5, 0xfd, 0x84, 0x68, 0xf9, + 0xb2, 0xc5, 0xfb, 0x37, 0xf6, 0x6e, 0xb1, 0x61, 0x2c, 0x5f, 0xff, 0xe9, + 0xdb, 0xd9, 0xf3, 0x0b, 0x07, 0xf9, 0xd7, 0x85, 0x1e, 0xb1, 0x52, 0x8d, + 0x2c, 0x30, 0x88, 0xab, 0xe2, 0x57, 0xde, 0xe3, 0x01, 0x62, 0xfd, 0xd5, + 0xfc, 0x23, 0x56, 0x2e, 0x6e, 0xd6, 0x2f, 0xf4, 0xfb, 0x9a, 0x73, 0xe2, + 0xc5, 0xe0, 0x79, 0xd6, 0x2f, 0xf7, 0x37, 0x7d, 0x69, 0xf6, 0x58, 0xa9, + 0x47, 0x6e, 0x11, 0xee, 0x59, 0xd8, 0xc3, 0x19, 0xf0, 0x76, 0xfe, 0xc2, + 0x1f, 0x01, 0xd1, 0x62, 0xff, 0x86, 0xc7, 0x67, 0x1c, 0x92, 0xc5, 0x49, + 0xf3, 0xe1, 0x85, 0xff, 0xfd, 0xb0, 0xb5, 0x17, 0x36, 0x98, 0xb9, 0xfc, + 0x1b, 0xf4, 0x58, 0xbf, 0xff, 0xdf, 0x63, 0x4b, 0x21, 0xf9, 0x86, 0x7c, + 0xb1, 0xb6, 0x58, 0xbe, 0x36, 0x4b, 0x75, 0x8b, 0xfe, 0xcd, 0x34, 0xb9, + 0x49, 0xd6, 0x2f, 0xfb, 0x77, 0xdf, 0x00, 0x79, 0xd2, 0xc5, 0xff, 0xed, + 0x0b, 0x9f, 0x68, 0xb1, 0xf4, 0xc6, 0xac, 0x5b, 0xf2, 0x88, 0x7c, 0x3b, + 0xbf, 0xff, 0xfe, 0x9e, 0xf7, 0xfe, 0x19, 0xfc, 0xdf, 0xef, 0xfc, 0x26, + 0x37, 0x3a, 0x4f, 0x6b, 0x17, 0xed, 0x8c, 0xf8, 0x3a, 0x2c, 0x56, 0xca, + 0x9f, 0x06, 0xc6, 0x6b, 0x07, 0x09, 0x3d, 0x0b, 0xde, 0x84, 0xe1, 0xc2, + 0x0e, 0xff, 0x72, 0x63, 0xf3, 0xa3, 0xe9, 0x62, 0xff, 0x6f, 0xf7, 0x07, + 0xdc, 0xeb, 0x14, 0x73, 0xed, 0xe8, 0x71, 0x7f, 0x19, 0x24, 0x6f, 0xdd, + 0x62, 0xfb, 0x0a, 0x42, 0x58, 0xbe, 0x7e, 0x03, 0x16, 0x2f, 0xa3, 0xf4, + 0xc6, 0xac, 0x5e, 0xdb, 0x06, 0xb1, 0x58, 0x78, 0xae, 0x4f, 0x50, 0x46, + 0xc4, 0x45, 0xfa, 0x22, 0xf3, 0x3d, 0x62, 0xa1, 0xc7, 0x87, 0x13, 0x43, + 0xf2, 0xed, 0x09, 0x62, 0xfb, 0x3e, 0x1e, 0x96, 0x28, 0xe6, 0xf0, 0x86, + 0x2e, 0xda, 0x3d, 0x62, 0xfe, 0xe1, 0x60, 0xff, 0x2b, 0x17, 0x0b, 0xb5, + 0x8b, 0x8f, 0x1c, 0xb1, 0x7f, 0x31, 0x6e, 0x66, 0xdc, 0x58, 0xa3, 0x51, + 0x5d, 0x10, 0xe1, 0xcb, 0x40, 0x32, 0x21, 0xbb, 0xfd, 0xbe, 0xe2, 0xd0, + 0x3e, 0x25, 0x8b, 0xfa, 0x4b, 0xd1, 0xd9, 0xe5, 0x8b, 0xfb, 0xf3, 0xaf, + 0x0a, 0x3d, 0x62, 0xff, 0x98, 0x1b, 0xbe, 0xb4, 0xfb, 0x2c, 0x5f, 0xe6, + 0x03, 0x7b, 0xd9, 0xf5, 0x8a, 0x82, 0x34, 0x06, 0x61, 0x11, 0x90, 0x47, + 0x77, 0xdf, 0x7c, 0xd2, 0xc5, 0xdf, 0x12, 0xc5, 0xa0, 0xb1, 0x7f, 0xb6, + 0xcd, 0xfc, 0x4d, 0x12, 0xc5, 0x46, 0x89, 0xe4, 0xe4, 0x61, 0x0e, 0x7e, + 0x02, 0x2e, 0x83, 0x01, 0x89, 0x5e, 0xf8, 0x40, 0x58, 0xb7, 0x96, 0x29, + 0xcd, 0x8f, 0xc7, 0xee, 0x1c, 0xac, 0x5f, 0xff, 0xbd, 0xc0, 0xf9, 0xa9, + 0x1e, 0x7f, 0x7c, 0x2d, 0x96, 0x2a, 0x4f, 0xc3, 0x05, 0xef, 0xe9, 0x70, + 0x37, 0x84, 0xb1, 0x7f, 0xec, 0x06, 0x64, 0x51, 0x14, 0x8d, 0x62, 0xff, + 0xda, 0x00, 0xca, 0x61, 0xfe, 0x01, 0x62, 0xb1, 0x35, 0xc3, 0xc2, 0x43, + 0xe4, 0x04, 0x5a, 0x23, 0xfb, 0xde, 0x98, 0x2c, 0x5f, 0xf0, 0xbd, 0xfc, + 0x8a, 0x13, 0xda, 0xc5, 0xff, 0xe2, 0x6f, 0x67, 0xb9, 0x9f, 0xc8, 0xff, + 0x2c, 0x57, 0xd1, 0x4a, 0x43, 0xbd, 0x0f, 0x2f, 0xf4, 0x94, 0x0b, 0x30, + 0x0b, 0x17, 0xfe, 0x7d, 0x69, 0xf6, 0xe3, 0x83, 0x8b, 0x16, 0x89, 0x62, + 0xe6, 0xfa, 0xc5, 0xf7, 0xd8, 0x86, 0xb1, 0x74, 0xc4, 0xb1, 0x58, 0x6e, + 0x80, 0x45, 0x5b, 0x22, 0x12, 0x02, 0x60, 0x51, 0xbf, 0xff, 0xb2, 0x3d, + 0x88, 0x1c, 0xdf, 0xef, 0xfc, 0x92, 0xf2, 0xc5, 0xd2, 0x6a, 0xc5, 0xee, + 0x8f, 0xa5, 0x8b, 0x12, 0xc5, 0x61, 0xb0, 0x61, 0xfb, 0xe1, 0x71, 0xce, + 0xb1, 0x7a, 0x35, 0x46, 0xa8, 0xd4, 0xb1, 0x40, 0x3d, 0x3e, 0x11, 0xd9, + 0xa2, 0x44, 0xa0, 0x1c, 0xaf, 0xe7, 0x93, 0xed, 0x81, 0x2c, 0x5f, 0xff, + 0x67, 0xbf, 0x90, 0xd3, 0x17, 0xbe, 0xd0, 0x58, 0xba, 0x40, 0xb1, 0x7f, + 0x9b, 0xb9, 0xdd, 0xf7, 0x8c, 0xd2, 0x25, 0x48, 0xbc, 0x34, 0xfa, 0xc5, + 0x75, 0x66, 0x98, 0xee, 0x62, 0xf0, 0xc4, 0x88, 0xc7, 0xeb, 0xa5, 0x0d, + 0xce, 0x42, 0xfa, 0xf3, 0x45, 0xc5, 0x8b, 0xf1, 0x73, 0xf9, 0x1e, 0xb1, + 0x6d, 0x2c, 0x56, 0x1b, 0xd0, 0xca, 0xef, 0xc0, 0xfc, 0xc3, 0x8b, 0x17, + 0xdf, 0x71, 0xba, 0xc5, 0xfe, 0x1c, 0x8c, 0x84, 0xc1, 0xac, 0x5f, 0xa2, + 0x27, 0x93, 0x56, 0x2f, 0x10, 0x8d, 0x58, 0xbc, 0x13, 0x6c, 0xb1, 0x7f, + 0xd2, 0x06, 0xf0, 0x03, 0x28, 0x2c, 0x57, 0xcf, 0x64, 0x87, 0xea, 0x53, + 0x40, 0xd8, 0xa4, 0x64, 0x58, 0x68, 0x45, 0x3e, 0x77, 0xb4, 0x64, 0x68, + 0xde, 0xc5, 0x75, 0xd4, 0x82, 0x63, 0x10, 0xd9, 0x26, 0x10, 0x82, 0x1c, + 0x3e, 0xb2, 0x54, 0xe9, 0xb0, 0x93, 0xde, 0x3f, 0x5e, 0xe1, 0xa0, 0xeb, + 0x11, 0xe4, 0x11, 0x46, 0x1f, 0xa8, 0xca, 0x4f, 0x0b, 0xdf, 0xce, 0x5c, + 0x33, 0xa8, 0x21, 0x9c, 0x52, 0x85, 0x79, 0x1f, 0x8f, 0xa7, 0x27, 0x85, + 0x08, 0x28, 0xe5, 0xb0, 0xe3, 0x61, 0xb4, 0x16, 0x2e, 0xda, 0x39, 0x62, + 0xff, 0xfb, 0x3c, 0xff, 0x17, 0xd9, 0xfb, 0xe4, 0x9a, 0xb1, 0x7c, 0xe4, + 0x07, 0x58, 0xbe, 0xdd, 0x9b, 0x75, 0x49, 0x54, 0x54, 0x0f, 0x4b, 0x44, + 0x37, 0xed, 0x6e, 0xcd, 0xba, 0xa4, 0x6d, 0x2f, 0xfe, 0x8a, 0x0d, 0xc0, + 0x98, 0x73, 0xdf, 0x16, 0x2f, 0x34, 0x23, 0x30, 0xff, 0xf8, 0x6f, 0x7d, + 0xad, 0x34, 0x16, 0x2f, 0xd3, 0x87, 0x7f, 0x2c, 0x5f, 0x33, 0xfa, 0x12, + 0x79, 0x42, 0x23, 0xb4, 0x64, 0x6c, 0xa8, 0xa3, 0x61, 0x21, 0x8e, 0x64, + 0x28, 0xcf, 0x0a, 0x1f, 0xbf, 0xdf, 0xe8, 0xcc, 0xd6, 0xec, 0xdb, 0xaa, + 0x4b, 0xf2, 0xfd, 0xad, 0xd9, 0xb7, 0x54, 0x98, 0xc5, 0xdd, 0x50, 0x58, + 0xb4, 0x66, 0x1e, 0x94, 0x46, 0xf7, 0xff, 0xbf, 0x3b, 0x64, 0x3f, 0x2f, + 0xac, 0x25, 0x8b, 0xf3, 0xe4, 0x26, 0x0b, 0x17, 0x6d, 0x19, 0x11, 0xf8, + 0x71, 0x26, 0xff, 0xb2, 0x28, 0x36, 0xb6, 0xf8, 0x96, 0x2f, 0x08, 0xbc, + 0xb1, 0x7e, 0x0f, 0x41, 0xcc, 0x4b, 0x17, 0x01, 0xd6, 0x2f, 0x7e, 0x4d, + 0x58, 0xa3, 0x4d, 0xae, 0xe2, 0xf7, 0x7b, 0x8b, 0x17, 0x39, 0xd6, 0x2a, + 0x4d, 0x7f, 0x06, 0x2f, 0xde, 0x29, 0xce, 0xd6, 0x28, 0x69, 0xaa, 0x61, + 0xe7, 0xc7, 0x78, 0xc3, 0xe5, 0x20, 0xc8, 0x2f, 0x8c, 0xf3, 0x7d, 0x62, + 0xe2, 0x89, 0x62, 0xff, 0x43, 0x08, 0x19, 0x83, 0x58, 0xbf, 0xed, 0xa7, + 0x8c, 0x0e, 0x38, 0xd6, 0x2f, 0xcf, 0xa0, 0xe2, 0xe2, 0xc5, 0xbc, 0xb1, + 0x7c, 0x28, 0x67, 0x16, 0x18, 0xb2, 0xbf, 0xc2, 0xcd, 0x6f, 0xf7, 0xe2, + 0xc5, 0x41, 0x30, 0xfd, 0x19, 0x7c, 0xe8, 0x8f, 0x78, 0x63, 0x7f, 0xe3, + 0x45, 0xee, 0x7b, 0xbd, 0xdc, 0x96, 0x2f, 0xf7, 0xde, 0x2f, 0xbe, 0xb6, + 0x58, 0xbf, 0x4f, 0xff, 0x3d, 0xac, 0x5f, 0xce, 0xf2, 0x14, 0xc4, 0xb1, + 0x7f, 0x9c, 0xb3, 0xcd, 0xcc, 0x58, 0xbf, 0xa4, 0x28, 0xe0, 0xfe, 0xcb, + 0x16, 0xeb, 0xd6, 0x2b, 0x47, 0x94, 0x23, 0x3b, 0xf0, 0xe3, 0x48, 0xd0, + 0x8d, 0x58, 0xbe, 0xf7, 0x1b, 0xb5, 0x8a, 0x8d, 0xcf, 0x62, 0x4d, 0x2f, + 0xe8, 0xbb, 0xe3, 0xf7, 0xc5, 0x8b, 0xfc, 0x2d, 0xa2, 0x84, 0xeb, 0x65, + 0x8a, 0x73, 0xea, 0x23, 0x2b, 0xb5, 0xe5, 0x8b, 0xcc, 0xe2, 0x58, 0xbd, + 0xdb, 0x75, 0x2c, 0x5f, 0x34, 0x30, 0x6b, 0x17, 0xf7, 0xb3, 0x43, 0xc2, + 0x58, 0xa1, 0x9e, 0x7f, 0x88, 0xaa, 0x51, 0x25, 0x8e, 0x17, 0x43, 0x16, + 0x2f, 0xe6, 0x6f, 0x7b, 0x3e, 0xb1, 0x7f, 0xfb, 0x0e, 0x4c, 0x69, 0x60, + 0x0c, 0x0a, 0x36, 0x58, 0xa3, 0x51, 0x2b, 0xa1, 0x72, 0x2d, 0xbf, 0xfb, + 0x09, 0xc7, 0x85, 0x86, 0xcf, 0x16, 0x2f, 0xfc, 0xdd, 0xf0, 0xed, 0xee, + 0x0a, 0x0b, 0x15, 0x04, 0x41, 0x92, 0x15, 0xff, 0xb1, 0xfa, 0x61, 0x77, + 0x0c, 0xf2, 0xc5, 0xfe, 0x0a, 0x42, 0x62, 0xef, 0xcb, 0x17, 0xed, 0x7b, + 0xf9, 0xb2, 0xc5, 0xbc, 0xb1, 0x52, 0x7e, 0x58, 0x6d, 0xf2, 0xab, 0xfb, + 0xce, 0x7e, 0xe1, 0xc5, 0x8b, 0x46, 0x4a, 0xfb, 0x54, 0x09, 0x32, 0x32, + 0x73, 0x52, 0xb7, 0x43, 0xec, 0xd9, 0xca, 0x62, 0x2e, 0xd3, 0xd9, 0xde, + 0xbf, 0x09, 0x06, 0x20, 0x00, 0xc1, 0x42, 0xbb, 0x90, 0xb6, 0xf4, 0x2c, + 0xc2, 0x22, 0x0e, 0x16, 0x5d, 0x45, 0xb7, 0xb4, 0xfa, 0x58, 0xbf, 0xce, + 0x67, 0xbe, 0xf2, 0x05, 0x8b, 0x46, 0x49, 0xe8, 0xf8, 0x76, 0xa3, 0x19, + 0x2d, 0x9a, 0x9f, 0xc2, 0x04, 0x70, 0x15, 0x2c, 0xb3, 0x87, 0xa5, 0x79, + 0xdf, 0xb5, 0xbb, 0x36, 0xea, 0x93, 0x54, 0xbf, 0x6b, 0x76, 0x6d, 0xd5, + 0x24, 0x11, 0x76, 0xdf, 0x58, 0xbf, 0xe2, 0x9f, 0x72, 0x28, 0x3c, 0x4b, + 0x17, 0x9a, 0x11, 0x98, 0x88, 0xb0, 0x1b, 0xf8, 0x66, 0xfd, 0x21, 0x47, + 0x66, 0x96, 0x2d, 0x19, 0x89, 0x98, 0x9e, 0x18, 0x41, 0xa1, 0xde, 0xd3, + 0x7d, 0x62, 0xff, 0xcf, 0xce, 0x61, 0x6e, 0xc4, 0x05, 0x8a, 0xf1, 0xed, + 0xf4, 0x1d, 0xbf, 0xbe, 0xfb, 0x6c, 0x2e, 0x2c, 0x5f, 0x43, 0x3d, 0xba, + 0xc5, 0xed, 0xf4, 0xeb, 0x17, 0xd9, 0x13, 0x9d, 0x62, 0xf3, 0x87, 0xe5, + 0x8b, 0xff, 0x08, 0xbd, 0xfc, 0xea, 0x70, 0x62, 0xc5, 0xfe, 0xdd, 0xf9, + 0x83, 0xdb, 0xb5, 0x8b, 0xed, 0x4f, 0xb8, 0xb1, 0x78, 0xb3, 0x65, 0x8b, + 0xfb, 0xf9, 0x07, 0x06, 0x2c, 0x5b, 0x06, 0x7d, 0xbb, 0x91, 0xf8, 0x76, + 0xfe, 0x93, 0xb7, 0x7e, 0x82, 0xc5, 0xf1, 0x80, 0x04, 0xac, 0x5f, 0xdf, + 0xe6, 0x89, 0xf7, 0x58, 0xa9, 0x3d, 0x3c, 0x24, 0xac, 0x55, 0x29, 0xb9, + 0x27, 0x66, 0x2e, 0x49, 0x10, 0xf6, 0x88, 0xce, 0x3d, 0xf4, 0x12, 0x85, + 0x27, 0x0d, 0x7d, 0x08, 0x2b, 0xd1, 0x4e, 0xcb, 0x17, 0xcf, 0xf6, 0xe2, + 0xc5, 0xff, 0xb0, 0xcf, 0x43, 0x3f, 0xf6, 0x82, 0xc5, 0xef, 0xbf, 0x96, + 0x2e, 0xd7, 0x96, 0x2f, 0xec, 0x8b, 0x8f, 0xd8, 0x4b, 0x17, 0xbd, 0x27, + 0x58, 0xbf, 0xa3, 0xa7, 0xdf, 0x68, 0x96, 0x2b, 0xb3, 0xcf, 0x71, 0xdb, + 0xf7, 0xb5, 0x8d, 0xda, 0xc5, 0xec, 0xfc, 0x64, 0xa7, 0x03, 0x01, 0xf1, + 0x91, 0x44, 0x80, 0xc3, 0xa4, 0x31, 0xc8, 0x40, 0x06, 0x45, 0x73, 0x05, + 0x18, 0xaa, 0xbf, 0xd2, 0x89, 0x6f, 0xee, 0xba, 0xf5, 0x9e, 0x8e, 0xcf, + 0xac, 0x5f, 0xc4, 0x09, 0x8f, 0x63, 0xac, 0x5f, 0xe3, 0x61, 0x8f, 0xf6, + 0x89, 0x62, 0xa4, 0xf9, 0x5c, 0xc2, 0xfd, 0xfc, 0xde, 0x4e, 0xb1, 0x7a, + 0x4a, 0x25, 0x8b, 0xff, 0xd1, 0x4f, 0x46, 0xd7, 0x38, 0xfa, 0xc3, 0x56, + 0x2f, 0x36, 0x69, 0x62, 0xff, 0x3c, 0x53, 0xd1, 0xb5, 0xc5, 0x8b, 0x71, + 0x62, 0xa4, 0xf2, 0x08, 0xda, 0xff, 0xe9, 0x00, 0xbd, 0xc2, 0x9e, 0xa9, + 0xd9, 0x62, 0xed, 0x4a, 0xc5, 0x41, 0x39, 0x71, 0x90, 0x6e, 0x52, 0xe3, + 0xba, 0x4e, 0xfb, 0x27, 0x42, 0x0e, 0xa4, 0x8b, 0xdf, 0x6e, 0x2c, 0x5c, + 0xfc, 0x58, 0xbf, 0x39, 0x0a, 0x74, 0xb1, 0x4e, 0x7b, 0x7e, 0x1d, 0x10, + 0xbd, 0xfe, 0xce, 0x9e, 0xe1, 0x64, 0x16, 0x2f, 0xee, 0x9e, 0xe1, 0x64, + 0x16, 0x2f, 0xdf, 0xc2, 0x68, 0x8c, 0x3e, 0x5c, 0x35, 0xbc, 0xcd, 0xba, + 0xa4, 0xe2, 0x2f, 0xf9, 0xfa, 0x7f, 0x77, 0xe6, 0x0d, 0x62, 0xb7, 0x3e, + 0x6d, 0x15, 0x5f, 0xf3, 0x1f, 0x8f, 0x9d, 0x1b, 0x4b, 0x17, 0xf0, 0x9b, + 0xb1, 0xe6, 0x96, 0x29, 0xd3, 0x30, 0xd4, 0x29, 0x08, 0x8f, 0x87, 0x57, + 0xff, 0xfb, 0xee, 0x32, 0x96, 0xd8, 0x26, 0xff, 0x0c, 0xe4, 0xf1, 0x62, + 0xff, 0xfd, 0x00, 0xff, 0x06, 0xf3, 0x00, 0x44, 0xdd, 0x06, 0xb1, 0x70, + 0x71, 0x2c, 0x5f, 0xf7, 0x31, 0xc0, 0x1f, 0x9b, 0xeb, 0x17, 0xcd, 0x13, + 0x9d, 0x62, 0xfd, 0xbb, 0xf3, 0xee, 0xb1, 0x7f, 0xfd, 0x80, 0x8e, 0xc7, + 0xfc, 0x3f, 0x3f, 0x73, 0x56, 0x2b, 0xb3, 0xfc, 0x22, 0x9a, 0xd9, 0x31, + 0x5f, 0x8d, 0x11, 0xd7, 0xa1, 0x3f, 0x7f, 0xfd, 0x09, 0xf0, 0x0c, 0xcf, 0xeb, 0x00, 0x28, 0x96, 0x2c, 0x6a, 0xc5, 0xd1, 0x3a, 0xc5, 0x61, 0xab, - 0x61, 0x3b, 0xfd, 0xdb, 0x3d, 0xce, 0xd3, 0xf5, 0x8a, 0x81, 0xeb, 0xfc, + 0x61, 0x3b, 0xfd, 0xd3, 0x3d, 0xce, 0x93, 0xf5, 0x8a, 0x81, 0xeb, 0xfc, 0x7e, 0xff, 0x7e, 0x41, 0xcc, 0x20, 0x2c, 0x56, 0x26, 0x54, 0xf0, 0xd5, 0x62, 0x2b, 0xfc, 0x5e, 0x86, 0x13, 0x8d, 0x62, 0xff, 0x89, 0x81, 0xcf, - 0xc9, 0x79, 0x62, 0xb0, 0xfa, 0xbc, 0x65, 0x7e, 0xc3, 0xbf, 0x70, 0xd6, + 0xc9, 0x79, 0x62, 0xb0, 0xfa, 0xbc, 0x65, 0x7e, 0xc3, 0xbf, 0x50, 0xd6, 0x2e, 0x93, 0xac, 0x54, 0x9f, 0x1c, 0x79, 0x0e, 0x8a, 0xef, 0xe1, 0x13, - 0x1b, 0x00, 0x2c, 0x5b, 0xa5, 0x8b, 0xd1, 0xd9, 0xf5, 0x8b, 0x6f, 0x86, - 0xcf, 0xc2, 0x77, 0xbb, 0x9f, 0x65, 0x8a, 0xc3, 0xc8, 0x62, 0x7b, 0xf7, + 0x1b, 0x00, 0x2c, 0x5b, 0xb5, 0x8b, 0xd1, 0xd9, 0xf5, 0x8b, 0x6f, 0x86, + 0xcf, 0xc2, 0x77, 0xba, 0x9f, 0x65, 0x8a, 0xc3, 0xc8, 0x62, 0x7b, 0xf7, 0xc4, 0x6e, 0x12, 0xc5, 0xf9, 0xb5, 0xe2, 0x95, 0x8b, 0xbc, 0xeb, 0x17, 0x07, 0xb2, 0xc5, 0x40, 0xd8, 0x90, 0xbd, 0xf8, 0x79, 0x1f, 0x3f, 0x58, - 0xbf, 0x6f, 0x3f, 0x7e, 0xcb, 0x17, 0xbb, 0x9f, 0x75, 0x8a, 0x1a, 0x63, - 0x1b, 0x94, 0xc4, 0xb1, 0xa2, 0x02, 0x2b, 0xee, 0x2b, 0xbf, 0xc7, 0x68, + 0xbf, 0x6f, 0x3f, 0x7e, 0x8b, 0x17, 0xba, 0x9f, 0x75, 0x8a, 0x1a, 0x63, + 0x1b, 0x94, 0xc4, 0xb1, 0xa2, 0x02, 0x2b, 0xea, 0x2b, 0xbf, 0xc7, 0x68, 0x71, 0xc7, 0x8b, 0x17, 0x8d, 0x9e, 0x2c, 0x5f, 0xd3, 0x13, 0x7e, 0x63, - 0xd6, 0x2f, 0xff, 0x40, 0x4d, 0xd8, 0x3f, 0xf0, 0x51, 0xc2, 0xd2, 0xc5, - 0xfe, 0x04, 0x81, 0x88, 0x58, 0xb1, 0x50, 0x45, 0xb7, 0x46, 0x2e, 0xa7, - 0x7f, 0x07, 0xda, 0x7e, 0xdd, 0x96, 0x2f, 0xdd, 0xa7, 0xed, 0xd9, 0x62, + 0xd6, 0x2f, 0xff, 0x40, 0x4d, 0xd0, 0x3f, 0xf0, 0x51, 0xc2, 0xd2, 0xc5, + 0xfe, 0x04, 0x81, 0x88, 0x58, 0xb1, 0x50, 0x45, 0xb7, 0x66, 0x2e, 0xa7, + 0x7f, 0x07, 0xd2, 0x7e, 0xdd, 0x16, 0x2f, 0xdd, 0x27, 0xed, 0xd1, 0x62, 0xf4, 0x42, 0x81, 0x87, 0xbe, 0x19, 0x9d, 0x4a, 0x73, 0x59, 0x0d, 0x46, - 0x84, 0x7d, 0xfc, 0x28, 0xf6, 0xf0, 0xa5, 0x62, 0x96, 0x2e, 0x9d, 0x96, - 0x2b, 0xa3, 0xd5, 0xe1, 0x8f, 0x70, 0x65, 0xff, 0x67, 0xfc, 0x52, 0x03, - 0x1d, 0x62, 0xfc, 0x5e, 0x26, 0x35, 0x62, 0x96, 0x2b, 0x0d, 0xa4, 0x71, - 0x45, 0x32, 0x30, 0xc8, 0xcf, 0x8d, 0xb7, 0xf1, 0xdb, 0xb4, 0xeb, 0xb9, - 0x62, 0xff, 0xce, 0x3c, 0xec, 0x7c, 0x87, 0x50, 0x58, 0xbf, 0x37, 0x18, - 0x80, 0xb1, 0x7f, 0x3f, 0x68, 0x1e, 0x62, 0x58, 0xbf, 0xf4, 0xe1, 0x1e, - 0x7f, 0xdc, 0xdd, 0xcb, 0x15, 0x03, 0xf4, 0xd1, 0x8d, 0xff, 0x61, 0xf3, - 0x59, 0xb6, 0x04, 0xb1, 0x7f, 0xfb, 0xf3, 0xdb, 0xdc, 0x7f, 0x7f, 0x3b, - 0xb8, 0xb1, 0x52, 0x9d, 0xe6, 0x19, 0x9a, 0x84, 0xf0, 0x9b, 0xf9, 0x10, - 0x0e, 0xa9, 0x62, 0xfe, 0xd9, 0xb3, 0xd8, 0x75, 0x8a, 0x8d, 0xcd, 0xd3, - 0x06, 0x5f, 0x86, 0xc5, 0x9d, 0xcb, 0x17, 0xff, 0xb0, 0xbc, 0xc0, 0x33, - 0xc4, 0xc0, 0xe2, 0xc5, 0xfd, 0x9a, 0x6f, 0x0a, 0x56, 0x2f, 0xff, 0x98, - 0xa5, 0xfb, 0xb8, 0xfc, 0xcf, 0xe4, 0x72, 0xc5, 0x0d, 0x10, 0x1d, 0x8b, - 0x6f, 0xff, 0xe7, 0x1b, 0x74, 0x66, 0x3c, 0x24, 0xa7, 0xb7, 0x99, 0x62, - 0xff, 0xe7, 0x21, 0x43, 0x39, 0xc7, 0x1e, 0x2c, 0x54, 0xa7, 0x71, 0xb1, - 0x54, 0x50, 0xca, 0xf9, 0x2f, 0x97, 0x2d, 0x19, 0xdf, 0x1b, 0x31, 0x49, - 0x94, 0x77, 0x08, 0x69, 0x64, 0x78, 0x7b, 0xa0, 0xf4, 0xc6, 0xf1, 0x80, - 0x45, 0x1b, 0x3e, 0xa3, 0x00, 0x39, 0x8f, 0xe1, 0x54, 0xd1, 0x9c, 0x01, - 0x70, 0xa3, 0xcd, 0xe4, 0x6a, 0x1e, 0x8f, 0xaa, 0x3a, 0x12, 0xa1, 0xc7, - 0xbb, 0x7f, 0x77, 0x9d, 0xe6, 0x99, 0xa0, 0xb1, 0x7f, 0xa3, 0x72, 0x8d, - 0x3d, 0x1d, 0x1a, 0x0d, 0x62, 0xfa, 0x19, 0x1c, 0xeb, 0x17, 0xfb, 0xbc, - 0xc1, 0x07, 0xf9, 0x35, 0x62, 0xe6, 0xef, 0x56, 0x2f, 0xe2, 0xfe, 0x74, - 0x2d, 0xd6, 0x2b, 0xbd, 0x44, 0x39, 0x1d, 0x86, 0x39, 0x7e, 0xef, 0xbe, - 0xf4, 0x72, 0x35, 0x8b, 0xff, 0xfe, 0x8d, 0xfb, 0xef, 0xf2, 0xe3, 0x29, - 0x16, 0xe1, 0x30, 0xe7, 0xae, 0x2c, 0x5f, 0x77, 0xd8, 0x0d, 0x95, 0x8b, - 0x8b, 0xa5, 0x8b, 0xec, 0x0e, 0x74, 0xb1, 0x51, 0xb1, 0xf3, 0x46, 0xb2, - 0xb2, 0x18, 0xbf, 0xf3, 0xf5, 0x1a, 0xb9, 0xa3, 0x0c, 0xfc, 0x72, 0xc5, - 0xf1, 0x86, 0x7e, 0x39, 0x62, 0xf8, 0xc3, 0x3f, 0x1c, 0xb1, 0x7a, 0x7d, - 0xba, 0xc5, 0x47, 0x9f, 0x84, 0x45, 0x3f, 0x29, 0xae, 0xfa, 0xa3, 0xc0, - 0x70, 0xbd, 0xbe, 0xd1, 0xfd, 0xd2, 0xc5, 0xfb, 0xc0, 0x0c, 0xa0, 0xb1, - 0x74, 0xe8, 0xc3, 0xcf, 0x62, 0x5b, 0xff, 0x8d, 0x0a, 0x3f, 0x61, 0xc6, - 0xc6, 0x19, 0xf8, 0xe5, 0x8b, 0xe1, 0x6d, 0xa9, 0x58, 0xbe, 0x9c, 0xd4, - 0x16, 0x2a, 0x35, 0x22, 0x79, 0xd6, 0x08, 0x92, 0xe1, 0xba, 0xc5, 0xef, - 0x41, 0x96, 0x2f, 0x73, 0xa7, 0x58, 0xbc, 0xdd, 0xb1, 0x62, 0xb6, 0x37, - 0x9c, 0x1e, 0xa7, 0x44, 0x93, 0x0b, 0xf1, 0x66, 0xf9, 0xcb, 0xdc, 0x58, - 0xbe, 0xdd, 0x9b, 0x75, 0x49, 0xd2, 0x5f, 0x88, 0x5e, 0x9e, 0x2c, 0x5f, - 0xff, 0xd2, 0x17, 0x8d, 0x6e, 0x19, 0x2e, 0x59, 0xd7, 0xb1, 0x62, 0xfd, - 0xc9, 0x04, 0x6f, 0xf5, 0x8a, 0x35, 0x30, 0x6d, 0x11, 0x7c, 0xc4, 0x8a, - 0x3c, 0xbb, 0x7f, 0xc6, 0x8b, 0xdc, 0x33, 0xcf, 0xba, 0xc5, 0xf0, 0x7f, - 0x9d, 0x2c, 0x5e, 0x14, 0x0e, 0xb1, 0x52, 0x78, 0x4c, 0x49, 0x7e, 0x0e, - 0x0e, 0x0e, 0x2c, 0x5f, 0xbd, 0xc9, 0xcd, 0x96, 0x28, 0x67, 0xa7, 0xa2, - 0xab, 0xec, 0xd8, 0xfe, 0x58, 0xaf, 0xa2, 0xe5, 0x9c, 0xc8, 0x8a, 0xf8, - 0x98, 0x72, 0xb1, 0x70, 0x46, 0xac, 0x5f, 0xe9, 0xec, 0xc5, 0x3d, 0xb8, - 0xb1, 0x7f, 0x7e, 0x43, 0xf8, 0xb8, 0xb1, 0x52, 0x8a, 0x1c, 0x21, 0xf8, - 0xd7, 0x71, 0xb5, 0xff, 0xb9, 0xc8, 0xa1, 0xdf, 0x98, 0x67, 0xe3, 0x96, - 0x2f, 0x42, 0x4e, 0xb1, 0x51, 0xb9, 0xf5, 0x0d, 0x36, 0xfe, 0x84, 0xf4, - 0xdc, 0x82, 0xc5, 0xff, 0xff, 0xbc, 0x4c, 0x0e, 0x6f, 0xf7, 0x88, 0xb0, - 0x2f, 0xe1, 0xe7, 0x8b, 0x17, 0xfa, 0x2d, 0x4f, 0x50, 0x73, 0xac, 0x54, - 0xa2, 0x90, 0x9b, 0xaf, 0xfd, 0xda, 0x4b, 0xdc, 0x17, 0xb3, 0x4b, 0x17, - 0xfe, 0x68, 0xbd, 0xc7, 0xd7, 0x4d, 0x12, 0xc5, 0xff, 0xff, 0xe7, 0x33, - 0xbe, 0xb1, 0xbf, 0x7d, 0xfe, 0x5c, 0x65, 0x22, 0xdc, 0x26, 0x1c, 0xf5, - 0xc5, 0x8a, 0x94, 0xcc, 0xf0, 0x85, 0x90, 0x49, 0x0a, 0xfa, 0x1d, 0xd9, - 0xe5, 0x8b, 0xfc, 0xff, 0x62, 0x18, 0x7d, 0x2c, 0x5f, 0x72, 0x7b, 0xb8, - 0xb1, 0x52, 0x88, 0x11, 0x13, 0x77, 0x1a, 0xdd, 0xee, 0xe5, 0x8b, 0x7d, - 0x62, 0xff, 0xde, 0x98, 0xb8, 0x58, 0x3f, 0x89, 0x62, 0x9c, 0xf4, 0xbc, - 0x25, 0x7e, 0x34, 0xd0, 0xcb, 0x75, 0x8b, 0xff, 0xfc, 0xfe, 0x7f, 0x60, - 0x0c, 0x9e, 0xb9, 0x21, 0x8b, 0xee, 0xb1, 0x52, 0x98, 0xf6, 0x36, 0xb9, - 0x0b, 0x16, 0xdf, 0x6e, 0x77, 0x8f, 0x58, 0xb9, 0x86, 0xb1, 0x7e, 0x83, - 0xcc, 0x23, 0xd6, 0x28, 0xc3, 0xc2, 0xc1, 0x7b, 0xc3, 0xc1, 0xac, 0x5d, - 0xad, 0x96, 0x2a, 0x51, 0x82, 0x36, 0x9c, 0x22, 0x71, 0xdb, 0xc2, 0x90, - 0xd6, 0x2f, 0xff, 0xfe, 0xfe, 0x76, 0xd6, 0x73, 0x35, 0xbc, 0xe7, 0x8b, - 0x39, 0xcc, 0x1a, 0xc5, 0xfe, 0xda, 0x4b, 0x71, 0x87, 0xc5, 0x8b, 0xe7, - 0x37, 0x06, 0xb1, 0x7f, 0xf0, 0x1c, 0x83, 0x35, 0xfc, 0xc0, 0xe2, 0xc5, - 0xff, 0x3e, 0x17, 0xf3, 0xd2, 0x35, 0x8b, 0xff, 0x39, 0x6a, 0x7c, 0xfb, - 0xb8, 0xd6, 0x2b, 0x64, 0xc5, 0x74, 0x6e, 0x02, 0x3f, 0x23, 0x76, 0x37, - 0xbc, 0x23, 0x40, 0xb1, 0x7f, 0x4f, 0xb8, 0x2d, 0xfb, 0xf5, 0x8a, 0x19, - 0xea, 0x76, 0x1f, 0xbe, 0xdf, 0xf2, 0x12, 0xc5, 0x4a, 0xa7, 0x3c, 0x8e, - 0x21, 0xa1, 0x45, 0xdf, 0x92, 0x5f, 0xf7, 0xdc, 0x2f, 0x75, 0xbb, 0xfd, - 0x62, 0xf4, 0x4e, 0x75, 0x8b, 0xbb, 0xfe, 0xe5, 0x8b, 0xf0, 0x81, 0x11, - 0x79, 0x62, 0xfb, 0x59, 0xd4, 0xac, 0x5f, 0xdf, 0x7f, 0x41, 0xbe, 0xb1, - 0x43, 0x47, 0xb6, 0x1e, 0xc7, 0x8f, 0x68, 0x81, 0x8a, 0x84, 0x47, 0x7f, - 0xa2, 0x83, 0x6b, 0x6f, 0x89, 0x62, 0xf4, 0x05, 0xb2, 0xc5, 0xf3, 0x90, - 0xe5, 0x62, 0xa2, 0x3c, 0x0f, 0x8f, 0xdc, 0xc1, 0xac, 0x5f, 0xfb, 0xc6, - 0x71, 0x8b, 0x7f, 0xbe, 0x96, 0x2b, 0x63, 0xd9, 0xc1, 0x8a, 0x94, 0xc5, - 0x71, 0xdf, 0x8f, 0x97, 0xb4, 0xfd, 0x2c, 0x5f, 0xe9, 0xf3, 0x6c, 0x27, - 0x82, 0xc5, 0xfd, 0xf7, 0x69, 0xf6, 0x2c, 0x5c, 0x1f, 0xd6, 0x2e, 0x10, - 0x6b, 0x15, 0xf4, 0x58, 0x10, 0xf0, 0x46, 0x81, 0x96, 0x77, 0x0c, 0xdf, - 0xff, 0x9a, 0x05, 0x3c, 0xce, 0xb7, 0x26, 0xce, 0xb7, 0x58, 0xbf, 0xfe, - 0x62, 0x6d, 0x8a, 0x7a, 0x71, 0x94, 0xec, 0xb1, 0x7f, 0xcf, 0xfc, 0xe8, - 0x10, 0x1e, 0x2c, 0x5f, 0xde, 0xcf, 0x87, 0x17, 0x16, 0x2d, 0x19, 0x1b, - 0xb6, 0xd8, 0x7d, 0xe1, 0xc7, 0x7a, 0x8f, 0x1a, 0x42, 0xb3, 0xbe, 0x1a, - 0xf7, 0xd4, 0xd6, 0x35, 0x43, 0x6e, 0x63, 0x29, 0xd9, 0xfe, 0x10, 0xcb, - 0x1c, 0x31, 0xb2, 0x33, 0x43, 0x52, 0xf7, 0x8c, 0xe5, 0xe1, 0x9f, 0x1f, - 0x0a, 0x88, 0x89, 0xf5, 0x28, 0x18, 0xf0, 0xbb, 0xfc, 0x6a, 0x0d, 0x0f, - 0xb0, 0x1d, 0x14, 0xa9, 0x1e, 0x46, 0x85, 0xe8, 0xdb, 0x45, 0x0d, 0xfe, - 0xc9, 0xc1, 0x2b, 0xc7, 0x27, 0xf7, 0x1d, 0x5f, 0xa3, 0x7e, 0xf3, 0xae, - 0x1d, 0x62, 0xe9, 0x8e, 0x58, 0xbf, 0xd0, 0x7f, 0x72, 0x75, 0x8b, 0x17, - 0xff, 0x8b, 0xce, 0x7f, 0xcb, 0x93, 0x68, 0xd5, 0x8b, 0xf9, 0xbd, 0x27, - 0x92, 0x58, 0xbd, 0xd8, 0x50, 0x58, 0xac, 0x44, 0xae, 0x92, 0x7b, 0x16, - 0x5f, 0xfc, 0x69, 0xb2, 0x5e, 0xf1, 0x4f, 0xb8, 0xb1, 0x7f, 0xdc, 0x17, - 0xa0, 0xfd, 0xbe, 0xeb, 0x14, 0xe8, 0x82, 0x3a, 0x35, 0xfb, 0x39, 0xbf, - 0xa5, 0x62, 0xfe, 0x8b, 0x98, 0x79, 0x8f, 0x58, 0xac, 0x3d, 0xbf, 0x94, - 0xdf, 0xbd, 0x9e, 0x9e, 0x96, 0x2f, 0xed, 0xa7, 0xcc, 0x68, 0x96, 0x29, - 0x73, 0x8b, 0x97, 0xf8, 0xb3, 0x3a, 0xde, 0x76, 0x58, 0xbf, 0xfa, 0x74, - 0x03, 0x39, 0xf9, 0x3b, 0x12, 0xc5, 0xff, 0x0b, 0xcf, 0xf7, 0x37, 0xee, - 0xb1, 0x7f, 0x48, 0x33, 0xb4, 0x8d, 0x62, 0xff, 0xed, 0x73, 0xef, 0x3e, - 0xf3, 0x43, 0x8b, 0x17, 0xfa, 0x74, 0x1f, 0xff, 0x80, 0x58, 0xa8, 0x26, - 0x50, 0x34, 0x5d, 0xce, 0x9c, 0xbf, 0xe8, 0xb7, 0xf7, 0x1f, 0xc4, 0x28, - 0x2c, 0x5e, 0x3c, 0xc7, 0xac, 0x5f, 0x78, 0x85, 0x05, 0x8a, 0xc3, 0xc3, - 0x72, 0x0b, 0xef, 0x39, 0xf8, 0x62, 0x24, 0x78, 0xe3, 0x7f, 0x41, 0xa0, - 0xc5, 0xba, 0xc5, 0x2c, 0x5a, 0x56, 0x28, 0x65, 0xe9, 0x06, 0x5b, 0x8b, - 0x15, 0x26, 0xc7, 0xc3, 0xf7, 0xff, 0xb3, 0xd2, 0x10, 0x7b, 0x73, 0x0f, - 0x31, 0xeb, 0x17, 0xf0, 0xca, 0x42, 0x1e, 0x2c, 0x52, 0xc5, 0xf9, 0xb7, - 0xdd, 0xc0, 0xb1, 0x47, 0x36, 0xde, 0x0c, 0xbf, 0x9a, 0x1a, 0x70, 0x9d, - 0x62, 0xf8, 0xa4, 0x7a, 0x58, 0xbd, 0xbc, 0xec, 0xb1, 0x7f, 0xe7, 0x83, - 0xeb, 0xa9, 0x29, 0xe2, 0xc5, 0x6c, 0x7f, 0xfb, 0x91, 0x78, 0x7e, 0xd1, - 0x91, 0xba, 0xe6, 0xe4, 0x8c, 0xe4, 0x6b, 0xbd, 0x43, 0x72, 0x23, 0xbf, - 0xbe, 0x11, 0x07, 0x14, 0x3c, 0xc9, 0x1c, 0x42, 0x1c, 0x2b, 0x6b, 0xa5, - 0xdf, 0x1d, 0x14, 0x9e, 0x74, 0x32, 0xfb, 0x02, 0x8d, 0xce, 0xb1, 0x7f, - 0xd8, 0x5b, 0x8d, 0xfb, 0x48, 0xd6, 0x2f, 0xe2, 0x9e, 0x8e, 0xde, 0x58, - 0xbf, 0xfc, 0x13, 0x0f, 0xf3, 0xd7, 0xa7, 0xed, 0x1e, 0xb1, 0x67, 0xd1, - 0xfe, 0xfc, 0xba, 0xff, 0xff, 0x85, 0xa8, 0x73, 0xec, 0xfa, 0xd6, 0x85, - 0xd3, 0xe9, 0xb8, 0xb1, 0x7e, 0xc0, 0xb9, 0x9f, 0x58, 0xbf, 0xf6, 0xf3, - 0x9f, 0x9f, 0x14, 0xf9, 0x62, 0xfe, 0x62, 0xfc, 0xea, 0x0b, 0x15, 0xa3, - 0xeb, 0xe1, 0xf5, 0xe9, 0x28, 0x96, 0x2f, 0xda, 0xe7, 0x18, 0x96, 0x2b, - 0xe7, 0x8a, 0x21, 0xdb, 0xff, 0xe2, 0x17, 0x50, 0x88, 0x9e, 0x2f, 0x3f, - 0x41, 0x2c, 0x5e, 0x17, 0xf8, 0xb1, 0x7f, 0xe6, 0x37, 0x7f, 0xbc, 0x5a, - 0x90, 0x96, 0x2f, 0x4e, 0x75, 0xb9, 0xf0, 0x90, 0xf5, 0xff, 0xcc, 0x7e, - 0x78, 0x98, 0x1d, 0x7a, 0x35, 0x2c, 0x56, 0x8f, 0xfc, 0x46, 0x75, 0x04, - 0xd5, 0xfd, 0x19, 0xad, 0xff, 0x89, 0x82, 0xf6, 0x7d, 0xa2, 0x65, 0x8b, - 0xff, 0xf0, 0x01, 0x26, 0x7e, 0x7c, 0x2d, 0xff, 0x24, 0xcb, 0x17, 0xff, - 0xe2, 0x13, 0x47, 0xe4, 0x3f, 0x86, 0xe0, 0xe2, 0x12, 0xc5, 0x62, 0x2c, - 0x7e, 0xaf, 0x76, 0xf8, 0xb1, 0x7f, 0x4c, 0x1f, 0xaf, 0x62, 0xc5, 0xff, - 0xf3, 0x75, 0x0e, 0x75, 0xe2, 0x6f, 0xe7, 0x5e, 0x58, 0xa9, 0x45, 0xd9, - 0xa4, 0x5a, 0x18, 0x62, 0xeb, 0xfe, 0x11, 0x31, 0xa6, 0x1f, 0xae, 0x2c, - 0x5f, 0x6b, 0x8f, 0xa5, 0x8b, 0xfd, 0x82, 0xef, 0xf7, 0xfb, 0xc4, 0xb1, - 0x7f, 0x84, 0x6e, 0x7d, 0xbd, 0xc5, 0x8b, 0xff, 0xff, 0x9e, 0x0d, 0xce, - 0x4f, 0x33, 0xee, 0x52, 0x7d, 0x48, 0x6c, 0x4b, 0x17, 0xff, 0xff, 0x67, - 0x03, 0xf3, 0xf6, 0x7f, 0x42, 0x7e, 0xf3, 0xef, 0x89, 0x8e, 0xb1, 0x52, - 0x8e, 0x38, 0x37, 0xd7, 0x13, 0x3a, 0xf4, 0x63, 0x17, 0xee, 0x4f, 0xc3, - 0x89, 0x62, 0x9c, 0xf5, 0x7c, 0x55, 0x52, 0xa8, 0x3b, 0x08, 0xda, 0x3c, - 0xab, 0xd0, 0x93, 0xac, 0x5f, 0x40, 0xb3, 0xeb, 0x14, 0xb1, 0x7f, 0x60, - 0xf5, 0x8f, 0x12, 0xc5, 0xfe, 0xd8, 0xb3, 0xaf, 0x60, 0x4b, 0x17, 0xee, - 0xbd, 0x38, 0x11, 0x1f, 0x20, 0x65, 0xd5, 0x1a, 0x22, 0xc3, 0x1c, 0x2f, - 0xe3, 0xbf, 0xb8, 0x2d, 0x96, 0x2e, 0xe4, 0x16, 0x2f, 0xff, 0xb0, 0x62, - 0xf7, 0x37, 0xfb, 0xf0, 0x4d, 0xd2, 0xc5, 0xff, 0xff, 0xf8, 0x98, 0xdc, - 0xd0, 0x27, 0xdc, 0x1f, 0xe7, 0x83, 0x26, 0x37, 0x59, 0xd7, 0x16, 0x2f, - 0xf8, 0x85, 0xb7, 0xb9, 0x84, 0x05, 0x8b, 0xcd, 0x0e, 0x0d, 0x17, 0xe1, - 0xc2, 0x16, 0xbe, 0x9a, 0x60, 0xa3, 0x12, 0xac, 0x4e, 0xf8, 0xd3, 0x0f, - 0x46, 0xc9, 0x7f, 0x31, 0x00, 0x9b, 0xcb, 0x17, 0xf6, 0x9a, 0x1b, 0x60, - 0x4b, 0x15, 0x1e, 0x7b, 0x9a, 0x2c, 0xa5, 0x8b, 0xa2, 0x12, 0xc5, 0x61, - 0xe5, 0x7c, 0x94, 0x20, 0xcb, 0xfe, 0xf8, 0x7e, 0x7d, 0x3e, 0xd2, 0xb1, - 0x7f, 0xff, 0x0a, 0x04, 0xf0, 0x2c, 0xf7, 0x26, 0x03, 0x9f, 0x2c, 0x5f, - 0xfa, 0x7a, 0xdf, 0xef, 0xad, 0x34, 0x16, 0x2f, 0xf6, 0xc5, 0x9d, 0x7b, - 0x02, 0x58, 0xbf, 0x86, 0xdd, 0x7b, 0x0e, 0x73, 0xf7, 0x0d, 0x06, 0xfb, - 0x52, 0x17, 0x16, 0x2f, 0x7f, 0x22, 0x58, 0xbf, 0xfc, 0x5e, 0xe6, 0x39, - 0xf0, 0x73, 0x09, 0xc3, 0xc2, 0xf1, 0x25, 0x3a, 0x39, 0x45, 0x08, 0x8a, - 0x82, 0xa4, 0x7c, 0x2f, 0x73, 0xbe, 0x47, 0x6d, 0x7f, 0xf6, 0x0e, 0x61, - 0x3a, 0x90, 0xd8, 0x96, 0x2f, 0xfd, 0xdb, 0x20, 0x71, 0xbf, 0x69, 0x1a, - 0xc5, 0xff, 0xf3, 0xfc, 0x47, 0x3b, 0x43, 0xec, 0x77, 0xe2, 0xc5, 0x1d, - 0x1a, 0xcc, 0x87, 0xe4, 0x3b, 0x9a, 0x33, 0x66, 0x75, 0x74, 0x1a, 0x72, - 0x12, 0x9b, 0xb3, 0xf5, 0x1b, 0xcc, 0x45, 0x5a, 0x8e, 0xac, 0xe7, 0x9f, - 0x94, 0x96, 0xc6, 0xa0, 0x1d, 0x28, 0x69, 0x72, 0x3e, 0x5f, 0x4b, 0x24, - 0x0e, 0x31, 0x9a, 0x76, 0xc2, 0x77, 0xf0, 0xb8, 0x2a, 0x76, 0xad, 0xfd, - 0xc7, 0xf1, 0x0a, 0x0b, 0x17, 0xe7, 0xf1, 0x0a, 0x0b, 0x17, 0x1f, 0x86, - 0x1e, 0xb7, 0x0b, 0xaf, 0xe9, 0xc0, 0x66, 0x0d, 0x62, 0xde, 0x73, 0xdb, - 0x22, 0xfb, 0xf7, 0x0f, 0x25, 0x12, 0xc5, 0xfc, 0x5e, 0x3c, 0xe7, 0x96, - 0x2f, 0xde, 0xfc, 0x86, 0x4b, 0x16, 0x84, 0x9e, 0xb6, 0x16, 0xdf, 0xfb, - 0xcf, 0xbb, 0x8d, 0x88, 0xd9, 0x58, 0xbc, 0x37, 0x35, 0x62, 0xff, 0xa7, - 0xaf, 0xb7, 0x3d, 0x21, 0x2c, 0x54, 0xa2, 0x63, 0x0f, 0xf4, 0x3d, 0x7f, - 0xff, 0x3c, 0x1f, 0xd2, 0x7c, 0xeb, 0xd2, 0x7c, 0xeb, 0xcb, 0x9c, 0x60, - 0xbf, 0xec, 0x17, 0x7e, 0xf1, 0x3e, 0x12, 0xc5, 0xff, 0xb7, 0x21, 0x7b, - 0x9a, 0x7e, 0x80, 0xb1, 0x7e, 0x21, 0x6d, 0xd4, 0x7a, 0xc5, 0x61, 0xf8, - 0x79, 0x0a, 0xa5, 0x33, 0x7c, 0x69, 0x68, 0x56, 0xdb, 0xbd, 0x58, 0xb8, - 0x5f, 0x58, 0xbf, 0x16, 0x7d, 0xbc, 0xb1, 0x7f, 0x41, 0xb3, 0xb4, 0x8d, - 0x62, 0xbb, 0xd3, 0xd6, 0xef, 0x84, 0xf7, 0xe8, 0xdb, 0xbd, 0xd7, 0x38, - 0xb1, 0x7c, 0xe2, 0x84, 0xac, 0x5f, 0x67, 0x52, 0x75, 0x8b, 0xe7, 0x29, - 0x02, 0xc5, 0xff, 0xf0, 0xf0, 0xfc, 0x13, 0x3c, 0x1f, 0x58, 0x35, 0x8b, - 0xff, 0xff, 0x69, 0xfb, 0x48, 0xdc, 0x9b, 0x46, 0x99, 0xf6, 0xe0, 0x52, - 0x35, 0x8b, 0xfd, 0xf9, 0xdb, 0x53, 0x83, 0x58, 0xbf, 0x4f, 0x66, 0xcd, - 0x2c, 0x5d, 0x9b, 0x2c, 0x5c, 0x39, 0x58, 0xa0, 0xcd, 0x7f, 0x70, 0xc5, - 0x4a, 0x2c, 0x7e, 0x68, 0x25, 0x8b, 0xf3, 0x45, 0x07, 0xf2, 0xc5, 0xe1, - 0xb4, 0x16, 0x2f, 0xee, 0xe7, 0xed, 0xec, 0xfa, 0xc5, 0x61, 0xe8, 0x08, - 0x76, 0xfe, 0xcf, 0x39, 0xdf, 0x4b, 0x17, 0xf4, 0xc1, 0xfa, 0xf6, 0x2c, - 0x58, 0x63, 0x3d, 0xbd, 0x16, 0xdf, 0xff, 0xb6, 0xc8, 0x10, 0x9b, 0x9e, - 0xc8, 0xa0, 0xfe, 0x58, 0xbe, 0xc2, 0x98, 0x2c, 0x54, 0xa2, 0x83, 0x0a, - 0x3c, 0xaf, 0x7f, 0xfb, 0xf3, 0x01, 0xfe, 0x7a, 0xf3, 0x9f, 0x8b, 0x17, - 0x0a, 0x0b, 0x14, 0xc7, 0xc9, 0xd9, 0x32, 0xe3, 0xca, 0xc5, 0xa5, 0x62, - 0xb0, 0xd4, 0x68, 0x5e, 0xa0, 0xb9, 0x2e, 0x69, 0x16, 0xe4, 0x6e, 0x43, - 0xa4, 0xff, 0xc6, 0x42, 0x02, 0xf2, 0x79, 0xf4, 0x63, 0x9d, 0xa1, 0x25, - 0xdc, 0x97, 0x7f, 0xda, 0xe7, 0xdf, 0x7d, 0xc5, 0xb2, 0xc5, 0xfc, 0x16, - 0x76, 0x21, 0x41, 0x62, 0xfe, 0x11, 0xb8, 0x5d, 0xd8, 0xb1, 0x7b, 0xbf, - 0x7e, 0x96, 0x2f, 0xff, 0xf7, 0xdc, 0xe7, 0x70, 0xb9, 0xd6, 0xef, 0x9a, - 0x1c, 0xf4, 0xb1, 0x7f, 0xfd, 0x30, 0xce, 0x39, 0x00, 0xb3, 0xdf, 0xc5, - 0x8b, 0x43, 0x74, 0x59, 0x13, 0x2d, 0x74, 0x8f, 0xed, 0x43, 0x56, 0xa5, - 0x3c, 0x7c, 0x3e, 0x23, 0x11, 0x46, 0x5f, 0x7e, 0x7f, 0x14, 0x9d, 0x62, - 0xf8, 0xb3, 0xf8, 0xb1, 0x5f, 0x3c, 0x8e, 0x13, 0xdf, 0xff, 0xf4, 0x8f, - 0xf9, 0xd7, 0x89, 0xbe, 0x06, 0xe7, 0x1b, 0x5b, 0xac, 0x5e, 0x38, 0xbe, - 0xb1, 0x7e, 0x98, 0x99, 0xb4, 0xb1, 0x7f, 0xd3, 0xcf, 0xe7, 0x69, 0xce, - 0x96, 0x2d, 0xe9, 0x44, 0x0f, 0x07, 0xbc, 0x51, 0x7d, 0xb4, 0x73, 0x1a, - 0xb1, 0x7f, 0xb3, 0x30, 0xd3, 0x5a, 0x0b, 0x15, 0x89, 0xce, 0x1a, 0x44, - 0xf0, 0xe9, 0xf9, 0xaf, 0x8a, 0x2f, 0xb9, 0xbf, 0xa5, 0x62, 0xff, 0x9e, - 0x74, 0x08, 0xec, 0xed, 0xb2, 0xc5, 0xfe, 0x73, 0xbe, 0xb9, 0x09, 0x58, - 0xac, 0x44, 0xb7, 0xc9, 0x3c, 0x7f, 0x7e, 0x6d, 0xb0, 0xb7, 0x58, 0xbf, - 0xf8, 0x2e, 0x6f, 0xf7, 0xeb, 0xda, 0xd4, 0xac, 0x5f, 0x30, 0x46, 0x41, - 0x62, 0x9c, 0xfb, 0x89, 0x26, 0xff, 0xda, 0xf3, 0x43, 0x9d, 0x85, 0xa7, - 0x58, 0xbf, 0xf9, 0xb8, 0x4c, 0x68, 0xfe, 0x26, 0xe2, 0xc5, 0x4a, 0x21, - 0xc4, 0x85, 0x7f, 0xff, 0xcc, 0x10, 0x79, 0xa2, 0x6e, 0xa1, 0xbc, 0xfb, - 0x99, 0xd7, 0x96, 0x2f, 0xc5, 0x80, 0x90, 0x2c, 0x5f, 0xdb, 0x07, 0x9f, - 0x6e, 0x96, 0x2f, 0xf4, 0x1c, 0xa2, 0x83, 0xfd, 0x62, 0xf7, 0x04, 0x75, - 0x8b, 0xff, 0xed, 0x6b, 0x39, 0xc1, 0x17, 0x30, 0xf3, 0x1e, 0xb1, 0x69, - 0x82, 0x3f, 0x70, 0x9e, 0x23, 0x1f, 0x1a, 0x04, 0x3d, 0x58, 0xad, 0x1d, - 0xcb, 0xf5, 0x09, 0x7f, 0xc2, 0x9d, 0x88, 0x8a, 0x36, 0x8b, 0xf7, 0x67, - 0xd6, 0x0d, 0x62, 0xff, 0xfb, 0x9f, 0x7e, 0x7b, 0xf8, 0x37, 0xe6, 0x12, - 0xc5, 0x8b, 0x0f, 0xe4, 0x45, 0x57, 0xf8, 0x9b, 0x46, 0xfb, 0x37, 0x58, - 0xa9, 0x3d, 0xbc, 0x26, 0xbf, 0xe1, 0x37, 0x0c, 0xd0, 0x9b, 0x8b, 0x15, - 0xf3, 0xdb, 0x22, 0x0b, 0xf3, 0x7e, 0x05, 0xba, 0xc5, 0xfe, 0x93, 0xe3, - 0x9e, 0x63, 0xd6, 0x2f, 0xf4, 0x0f, 0xc7, 0x2e, 0xa0, 0xb1, 0x5b, 0x9f, - 0x54, 0x46, 0xb7, 0xf9, 0xf4, 0xc4, 0x0c, 0x25, 0x8b, 0xfd, 0xe7, 0x2c, - 0xea, 0x12, 0xb1, 0x7f, 0xf6, 0xb4, 0xd0, 0xe1, 0x61, 0xc3, 0xe9, 0x62, - 0xa4, 0xfe, 0xb0, 0xce, 0xff, 0xfe, 0x1b, 0x31, 0xb9, 0xe9, 0xfb, 0x3f, - 0x39, 0x20, 0x58, 0xbf, 0xe7, 0x81, 0x67, 0xc9, 0xa0, 0xb1, 0x7f, 0xfe, - 0x86, 0x10, 0xff, 0x38, 0x52, 0x03, 0xb4, 0x16, 0x28, 0x91, 0x14, 0x19, - 0xbd, 0xe6, 0x6d, 0xd5, 0x22, 0x61, 0x7e, 0xd9, 0x8e, 0x37, 0x58, 0xbd, - 0xdc, 0xfc, 0x58, 0xa8, 0x22, 0x5b, 0x72, 0x37, 0x2a, 0xee, 0x29, 0xbd, - 0x1b, 0x46, 0xfd, 0xea, 0xc5, 0xff, 0x99, 0xfd, 0x3f, 0x73, 0xb0, 0xd6, - 0x2a, 0x35, 0x1f, 0x57, 0xcb, 0x6f, 0xff, 0x70, 0x7f, 0x9f, 0xc9, 0xf5, - 0xa7, 0xdd, 0x62, 0xb7, 0x3f, 0x46, 0x28, 0xbf, 0xff, 0xfd, 0x9b, 0xc8, - 0xb7, 0xfc, 0xe8, 0xcc, 0x27, 0xeb, 0x81, 0xec, 0x58, 0x35, 0x8b, 0xfd, - 0xd9, 0x8f, 0x86, 0xcf, 0x16, 0x2f, 0x75, 0x0e, 0x18, 0x8b, 0x2c, 0x7c, - 0xbf, 0xd9, 0xd7, 0xbc, 0xd0, 0xe2, 0xc5, 0x4a, 0x67, 0xf9, 0x0d, 0x4d, - 0x1b, 0x5f, 0xe2, 0x6f, 0x73, 0x71, 0x12, 0xc5, 0xff, 0xf0, 0x1c, 0x01, - 0x63, 0xf6, 0x2c, 0xf7, 0xdd, 0x62, 0xf6, 0xde, 0x75, 0x8b, 0xff, 0x89, - 0x82, 0xe0, 0x4c, 0x39, 0xeb, 0x8b, 0x16, 0xc5, 0x8a, 0xd1, 0xec, 0x79, - 0x1e, 0xfd, 0xc6, 0x68, 0x71, 0x62, 0xfb, 0xe2, 0x2d, 0x96, 0x2e, 0x7e, - 0x96, 0x2f, 0xe6, 0x87, 0x30, 0x80, 0xb1, 0x66, 0x31, 0x32, 0x91, 0xbb, - 0x74, 0x44, 0xc5, 0x1d, 0xf9, 0x27, 0x86, 0x2d, 0xac, 0x4f, 0x77, 0xf1, - 0xbd, 0x5f, 0xff, 0xcd, 0xb1, 0x4f, 0x5d, 0x6e, 0x26, 0xd0, 0x33, 0xaf, - 0x2c, 0x56, 0x2a, 0xa0, 0x79, 0x42, 0x24, 0x5f, 0x7f, 0xcd, 0x0e, 0x61, - 0x4f, 0x5c, 0x58, 0xbf, 0xfc, 0x76, 0xe8, 0x7a, 0xc7, 0x34, 0x72, 0x4b, - 0x17, 0xa0, 0xe0, 0x58, 0xac, 0x3e, 0x8e, 0x25, 0xdf, 0xfe, 0x35, 0xb9, - 0xad, 0x66, 0xc0, 0x3c, 0xc1, 0x62, 0xfb, 0xde, 0x9d, 0x2c, 0x57, 0x8f, - 0xc0, 0x34, 0xda, 0x82, 0x2d, 0x02, 0x84, 0x8d, 0xff, 0xff, 0xbf, 0x90, - 0xfe, 0x0c, 0xa7, 0x70, 0xe4, 0x2c, 0xe7, 0x18, 0xd5, 0x8b, 0xff, 0xde, - 0x06, 0x85, 0x0e, 0x6a, 0x7d, 0x87, 0x58, 0xa9, 0x47, 0x27, 0x8a, 0x44, - 0xdf, 0x7f, 0xd0, 0xfc, 0x91, 0xbd, 0xfb, 0xf4, 0xb1, 0x7f, 0xd8, 0x36, - 0x87, 0xb8, 0xc0, 0x58, 0xae, 0x8f, 0xe4, 0x24, 0x0b, 0xff, 0xc5, 0x21, - 0x07, 0xe2, 0x90, 0x67, 0x5e, 0x58, 0xbf, 0xd9, 0xaf, 0x94, 0xf5, 0x05, - 0x8b, 0x9b, 0xac, 0x44, 0x00, 0x69, 0x97, 0xf6, 0xa7, 0xf2, 0xdb, 0xac, - 0x53, 0xa6, 0x02, 0x28, 0x52, 0x06, 0x5f, 0x7f, 0xff, 0xe6, 0x22, 0x9e, - 0xa2, 0x29, 0xda, 0x0f, 0xce, 0x49, 0x0a, 0x3d, 0x62, 0xff, 0xc3, 0xc3, - 0x96, 0x7b, 0xef, 0xde, 0xac, 0x56, 0xe8, 0xb2, 0x76, 0xfb, 0xff, 0x74, - 0x17, 0xbe, 0xf2, 0x59, 0xba, 0xc5, 0x49, 0xf2, 0x39, 0x1d, 0xff, 0x89, - 0x8e, 0x07, 0xd3, 0xf4, 0x05, 0x8b, 0xec, 0x7d, 0x6c, 0xb1, 0x43, 0x3e, - 0x2e, 0xfc, 0xfe, 0xfe, 0x91, 0xec, 0x79, 0xd2, 0xc5, 0xc0, 0x95, 0x8b, - 0x39, 0xa7, 0x8d, 0xe2, 0xfa, 0x83, 0x3b, 0x24, 0x64, 0x39, 0x09, 0x33, - 0x49, 0x37, 0x85, 0x5b, 0x90, 0x6a, 0x37, 0xa3, 0xca, 0x5d, 0xfc, 0xad, - 0x40, 0x1b, 0x14, 0xa3, 0x9e, 0x47, 0x53, 0xe8, 0xd3, 0x05, 0x08, 0x2e, - 0xcd, 0xb7, 0xf0, 0xc1, 0xde, 0xf0, 0x11, 0xcb, 0x17, 0xbb, 0xbb, 0xa5, - 0x62, 0xff, 0xec, 0x0b, 0xed, 0xee, 0x4f, 0xc3, 0x89, 0x62, 0xff, 0xff, - 0x98, 0xd3, 0x66, 0x1c, 0x30, 0xe2, 0x7f, 0xb9, 0xc5, 0xa9, 0x58, 0xbf, - 0xfb, 0x5f, 0x67, 0xf0, 0xb4, 0xdd, 0xb1, 0x62, 0xff, 0xf1, 0xb1, 0x7d, - 0xf5, 0xe8, 0x61, 0x38, 0xd6, 0x2b, 0x11, 0x24, 0x24, 0x6a, 0x1a, 0x6c, - 0xda, 0x48, 0xfc, 0x3f, 0x2f, 0xfa, 0x62, 0x84, 0x83, 0x40, 0x95, 0x8b, - 0xf4, 0x83, 0xdd, 0xa0, 0xb1, 0x73, 0x8d, 0x62, 0x88, 0xf0, 0xb8, 0x57, - 0x7f, 0x14, 0xf4, 0x76, 0xf2, 0xc5, 0xfe, 0xdf, 0xc2, 0xfe, 0xa4, 0x25, - 0x8b, 0xff, 0xb3, 0xaf, 0xe0, 0xff, 0x91, 0x41, 0x96, 0x2a, 0x4f, 0xf4, - 0xe6, 0xf7, 0xff, 0xff, 0x9e, 0x4b, 0xdb, 0xfd, 0xfd, 0x91, 0x14, 0x9f, - 0x3e, 0xfa, 0xfb, 0x2c, 0x5f, 0xf3, 0xe0, 0x5b, 0xfe, 0x5e, 0x39, 0x62, - 0xff, 0xff, 0xff, 0x3f, 0x50, 0xfc, 0x91, 0xb8, 0x53, 0x0c, 0x3b, 0x74, - 0x3d, 0x63, 0x9a, 0x39, 0x25, 0x8b, 0xff, 0xd2, 0x50, 0xc1, 0x6b, 0x60, - 0x66, 0x0d, 0x62, 0xff, 0x6e, 0xfa, 0xe4, 0x52, 0xcb, 0x17, 0xf9, 0xfc, - 0x09, 0xf8, 0x7c, 0x58, 0xbe, 0x68, 0x49, 0x2c, 0x5f, 0x85, 0xcf, 0xb4, - 0x20, 0x7a, 0xdf, 0x35, 0xbf, 0x98, 0x18, 0x43, 0x82, 0xc5, 0xff, 0x38, - 0x5c, 0xfe, 0x76, 0x9e, 0x96, 0x2f, 0xe9, 0x86, 0x6c, 0x28, 0x2c, 0x5b, - 0xc6, 0x9f, 0x61, 0x1e, 0xdf, 0xef, 0xe3, 0x8e, 0x4b, 0x75, 0x8b, 0x9b, - 0xa3, 0x0f, 0x6f, 0xc5, 0x14, 0x6a, 0xa3, 0x7e, 0x92, 0xb5, 0x08, 0xb2, - 0x3f, 0xe4, 0x3d, 0x2c, 0xe3, 0x5d, 0x6e, 0xdc, 0xda, 0x27, 0xcd, 0x10, - 0x9e, 0x15, 0x7f, 0x21, 0xef, 0xdd, 0xb8, 0x7b, 0xe9, 0x58, 0xb7, 0xe1, - 0xcf, 0x3c, 0xeb, 0x17, 0xec, 0xd8, 0xef, 0x12, 0xc5, 0x4a, 0xff, 0x17, - 0xe7, 0xbd, 0xda, 0x13, 0x24, 0x51, 0x7f, 0xf9, 0x88, 0x00, 0x9c, 0xec, - 0xe5, 0xd7, 0x96, 0x2f, 0xbc, 0xe7, 0x65, 0x8b, 0xe0, 0xbe, 0x2d, 0xd6, - 0x2c, 0x6a, 0xc5, 0xfd, 0xfe, 0x4f, 0xa4, 0x6b, 0x15, 0x27, 0xcf, 0x84, - 0xce, 0x27, 0x52, 0x98, 0x06, 0x25, 0xfa, 0x11, 0x37, 0xff, 0xc2, 0xdb, - 0xee, 0x3c, 0xe6, 0x02, 0x7a, 0xe2, 0xc5, 0xff, 0xcd, 0xf6, 0x1c, 0x0f, - 0xf9, 0x0c, 0x96, 0x28, 0x91, 0x2e, 0x25, 0x2b, 0xc5, 0x27, 0x58, 0xbf, - 0x3f, 0x3f, 0x3a, 0x58, 0xa8, 0x8f, 0x13, 0xe3, 0x97, 0x3f, 0x96, 0x2f, - 0xcf, 0xb1, 0xe7, 0x75, 0x8b, 0x7c, 0xe7, 0x83, 0xe1, 0x7b, 0xff, 0xfe, - 0xd6, 0xc2, 0x01, 0x9e, 0xe6, 0x78, 0xcc, 0xf4, 0xe1, 0x41, 0x62, 0xa5, - 0x12, 0x4e, 0x51, 0x7f, 0xfd, 0xbe, 0xa7, 0xe5, 0x9e, 0xc8, 0xc0, 0x82, - 0x09, 0x22, 0xff, 0xfa, 0x77, 0x6e, 0xb3, 0x5a, 0xcd, 0xa7, 0x8e, 0xb1, - 0x4c, 0x8a, 0x82, 0x57, 0xa8, 0x2b, 0x11, 0xde, 0x19, 0x6c, 0xcd, 0xc8, - 0x7b, 0x7a, 0x19, 0x37, 0xb0, 0xee, 0xb1, 0x7e, 0xdc, 0x5b, 0x94, 0xac, - 0x5f, 0xc1, 0x07, 0xad, 0x30, 0xd6, 0x2f, 0xa2, 0xfc, 0xf9, 0x62, 0x9c, - 0xf5, 0x78, 0x63, 0x43, 0x45, 0xe6, 0xe3, 0x91, 0x3f, 0xdf, 0xd1, 0xaa, - 0x35, 0xfb, 0xbe, 0xfb, 0xc8, 0xf5, 0x8b, 0xef, 0x6e, 0x2d, 0x96, 0x2f, - 0xee, 0x1c, 0x45, 0x0e, 0x2c, 0x51, 0x1e, 0xaf, 0x89, 0xaf, 0xfe, 0xea, - 0x05, 0x30, 0xd4, 0xf9, 0xbc, 0xb1, 0x7c, 0x2e, 0xfe, 0x39, 0xd6, 0x2f, - 0xf8, 0x61, 0xcf, 0x51, 0xd9, 0xa9, 0x58, 0xba, 0x60, 0xb1, 0x52, 0x8e, - 0x6c, 0x21, 0x74, 0x56, 0x2b, 0x23, 0xeb, 0xe3, 0xe9, 0xb8, 0xb1, 0x7f, - 0xdb, 0x66, 0xf2, 0x77, 0xe6, 0xeb, 0x17, 0xfe, 0xd7, 0xd9, 0xfc, 0x06, - 0x1c, 0xac, 0x54, 0x9f, 0xd3, 0x9e, 0x5f, 0x0a, 0x3e, 0x60, 0xb1, 0x7f, - 0xe6, 0xf4, 0xeb, 0x9f, 0x92, 0xf2, 0xc5, 0xfb, 0x20, 0xed, 0xd9, 0x62, - 0xbe, 0x88, 0xd2, 0x26, 0xe1, 0xf5, 0x41, 0x3b, 0xec, 0x45, 0xfc, 0x27, - 0x45, 0x0a, 0xdb, 0xc7, 0x6f, 0xac, 0x5f, 0xe7, 0xdd, 0xc7, 0xde, 0x7f, - 0x65, 0x8b, 0xff, 0xc5, 0x30, 0xd6, 0x85, 0xd3, 0xe9, 0xb8, 0xb1, 0x7f, - 0xfd, 0xcc, 0x34, 0xb3, 0xdc, 0xc8, 0x13, 0x04, 0xb1, 0x67, 0xfa, 0x26, - 0xfc, 0x97, 0x4e, 0x98, 0xdf, 0x87, 0x7b, 0x43, 0x5a, 0xff, 0x49, 0x7b, - 0x0a, 0x4d, 0x58, 0xbd, 0x3f, 0xe2, 0xc5, 0x76, 0x3c, 0xfe, 0xe3, 0x2b, - 0xfe, 0x93, 0xfb, 0xf8, 0x52, 0x05, 0x8b, 0xf1, 0xe6, 0x11, 0xfb, 0xac, - 0x5f, 0x8a, 0x45, 0xee, 0x2c, 0x50, 0x0f, 0x57, 0xc5, 0xb7, 0xfd, 0xc8, - 0x3f, 0x80, 0x19, 0x41, 0x62, 0xb6, 0x3d, 0xde, 0x88, 0xaf, 0xe2, 0xcf, - 0x7c, 0x30, 0x96, 0x2f, 0xe0, 0xf3, 0xb1, 0x0b, 0x8b, 0x15, 0xd1, 0xf0, - 0x9c, 0xc2, 0xb1, 0x15, 0x0f, 0x08, 0x5a, 0x95, 0x4c, 0xb9, 0x08, 0x67, - 0x27, 0xd4, 0x72, 0x57, 0xff, 0xfb, 0x7f, 0xb9, 0xc9, 0xf6, 0x9f, 0x70, - 0x3f, 0x7f, 0x06, 0xb1, 0x7e, 0x6f, 0x98, 0x39, 0x58, 0xae, 0x91, 0x1b, - 0xe6, 0x4b, 0xfe, 0xf7, 0x0b, 0x07, 0xfc, 0xf2, 0xc5, 0xff, 0x1a, 0x60, - 0x79, 0xa8, 0xe6, 0x35, 0x62, 0xdd, 0xfa, 0xc5, 0x49, 0xec, 0x32, 0x0d, - 0xff, 0xf9, 0x8d, 0xfc, 0xbc, 0x1c, 0xbd, 0x0c, 0xd6, 0x2c, 0x5f, 0xff, - 0xf7, 0xf0, 0xf8, 0x50, 0xfb, 0x9c, 0x4f, 0xa7, 0x8e, 0x14, 0xac, 0x51, - 0x22, 0xf3, 0xca, 0x95, 0x29, 0xd9, 0xe1, 0x21, 0x42, 0x44, 0x50, 0xdc, - 0xbf, 0xfd, 0x85, 0xf6, 0xe1, 0x61, 0xa6, 0xe4, 0x7a, 0xc5, 0xff, 0xf6, - 0x7d, 0x87, 0x9a, 0xd6, 0x75, 0x07, 0x3a, 0xc5, 0xff, 0x4f, 0x50, 0x16, - 0xc3, 0x7e, 0xcb, 0x15, 0xba, 0x36, 0xf4, 0x9b, 0xf5, 0x0b, 0xb3, 0x75, - 0x8b, 0xff, 0x75, 0xec, 0x21, 0x78, 0x13, 0x05, 0x8b, 0xa3, 0x8d, 0x58, - 0xb0, 0x30, 0xf7, 0x19, 0x02, 0xff, 0xe7, 0xe6, 0x0f, 0x79, 0xda, 0x73, - 0xcb, 0x17, 0xfb, 0x61, 0x61, 0x1e, 0x5d, 0x62, 0xfc, 0x2f, 0xfa, 0x62, - 0x58, 0xbf, 0xff, 0xbe, 0xda, 0xfb, 0x96, 0x0f, 0x4e, 0x2d, 0x83, 0x3a, - 0xc5, 0xff, 0xe7, 0x86, 0x10, 0x0e, 0xc3, 0xfc, 0x92, 0xc5, 0xff, 0xdb, - 0xbf, 0x9c, 0xe6, 0x71, 0x86, 0x35, 0x8b, 0xfe, 0xcd, 0x67, 0x0c, 0xe0, - 0x23, 0xd6, 0x2a, 0x51, 0x0b, 0x04, 0x7a, 0xe2, 0x3b, 0xfd, 0x0c, 0xdb, - 0xfd, 0x9c, 0x8b, 0xee, 0x17, 0x96, 0x2f, 0xf7, 0xd8, 0xe3, 0xc3, 0x0e, - 0xb1, 0x7f, 0xda, 0xd4, 0xe3, 0x6b, 0xa8, 0x2c, 0x5f, 0xcf, 0x16, 0x9c, - 0x2d, 0x96, 0x2e, 0x04, 0xac, 0x54, 0xa3, 0xb4, 0x66, 0xce, 0x6b, 0xf3, - 0xa0, 0x18, 0xdf, 0xfb, 0xef, 0xdb, 0x23, 0xc6, 0x4d, 0xa5, 0x8b, 0xe1, - 0x6d, 0xd4, 0x7a, 0xc5, 0x6e, 0x7d, 0x84, 0x87, 0x7f, 0x38, 0xcf, 0x23, - 0x95, 0x8b, 0xfd, 0x27, 0x98, 0xc0, 0x82, 0x09, 0x62, 0x86, 0xae, 0x79, - 0xe3, 0x4c, 0xe4, 0x62, 0xbe, 0x85, 0xa4, 0x71, 0x17, 0x71, 0x6d, 0xff, - 0xe9, 0xd8, 0xb3, 0x36, 0xf1, 0xb2, 0x50, 0x58, 0xbf, 0xdb, 0x7d, 0x8e, - 0xfc, 0x75, 0x8b, 0xfc, 0x36, 0x60, 0x83, 0xce, 0x96, 0x2c, 0xc4, 0x7d, - 0x5e, 0x34, 0xa9, 0x5e, 0x55, 0xd8, 0xc7, 0x1d, 0x37, 0x26, 0x74, 0x5f, - 0x99, 0xb4, 0xbc, 0x82, 0x6f, 0x0a, 0x16, 0xb7, 0xfc, 0x3f, 0xce, 0x0c, - 0xb3, 0xb2, 0xc5, 0xf9, 0x8f, 0xec, 0xdd, 0x62, 0xff, 0xd1, 0xff, 0xcc, - 0x19, 0x66, 0xd2, 0xb1, 0x5f, 0x3e, 0xa1, 0x14, 0xdf, 0xff, 0xbe, 0xe5, - 0x9b, 0x1c, 0x5f, 0xcf, 0xb7, 0x40, 0x58, 0xbf, 0xf0, 0xbd, 0xc0, 0xf6, - 0xe0, 0x01, 0x2b, 0x17, 0xf9, 0xf8, 0xe2, 0xef, 0xc7, 0x2b, 0x14, 0x33, - 0xfb, 0xf2, 0x1d, 0xc2, 0x89, 0x62, 0xf0, 0x41, 0x04, 0x91, 0x7d, 0xb1, - 0xdf, 0x89, 0x11, 0x86, 0x86, 0xe9, 0x1a, 0xc5, 0x4a, 0x22, 0x18, 0xe8, - 0x8d, 0xef, 0xfe, 0x19, 0x9e, 0x29, 0x86, 0x6c, 0x28, 0x2c, 0x5f, 0x7d, - 0xbf, 0x2b, 0x15, 0x87, 0xd2, 0x1a, 0x3d, 0xff, 0x3f, 0x26, 0x11, 0x7d, - 0xc0, 0xb1, 0x7f, 0xb3, 0xad, 0x64, 0x73, 0x81, 0x62, 0xa0, 0xad, 0xac, - 0x70, 0xa4, 0x34, 0x89, 0xe1, 0xa5, 0xa8, 0x55, 0x1e, 0x12, 0xdf, 0x22, - 0x23, 0xab, 0xff, 0xf7, 0x0b, 0x3f, 0xe2, 0x90, 0x42, 0x67, 0x8e, 0xb1, - 0x6f, 0xac, 0x57, 0x47, 0xca, 0x1a, 0x9d, 0xa0, 0xb1, 0x7f, 0x8a, 0x1f, - 0xcd, 0x67, 0x4b, 0x15, 0x27, 0x8c, 0x21, 0x2b, 0xf7, 0xb9, 0xee, 0x77, - 0x8b, 0x17, 0xe9, 0xc2, 0x63, 0xac, 0x5f, 0xf9, 0xa1, 0xf7, 0xe8, 0x1a, - 0x61, 0xac, 0x5c, 0x38, 0xf5, 0x8b, 0xde, 0xd6, 0x2c, 0x5c, 0x30, 0x96, - 0x2f, 0xff, 0xd9, 0xda, 0x4b, 0xc7, 0x9c, 0x21, 0xe7, 0x5e, 0x58, 0xbc, - 0xc5, 0xb9, 0x88, 0xa7, 0x91, 0xbd, 0x87, 0x74, 0x33, 0x4e, 0xa8, 0x58, - 0xed, 0x4c, 0x42, 0x02, 0xf2, 0x26, 0x14, 0x39, 0xef, 0xb6, 0x9d, 0x6c, - 0xb1, 0x73, 0xf4, 0xb1, 0x5a, 0x37, 0xa1, 0x92, 0xdf, 0x9c, 0xbc, 0x19, - 0xd6, 0x2a, 0x4f, 0x2c, 0x04, 0x57, 0xbc, 0xf1, 0x2c, 0x5f, 0x66, 0x6b, - 0x8b, 0x16, 0xe6, 0x1e, 0x00, 0x07, 0xaa, 0x08, 0x88, 0xf3, 0x0d, 0xff, - 0xc7, 0x17, 0xcd, 0x6c, 0xe7, 0xf3, 0x8b, 0x17, 0xa4, 0x27, 0x58, 0xbf, - 0xff, 0x7d, 0xf7, 0xfe, 0x7b, 0xee, 0xc0, 0xfb, 0x81, 0x62, 0xff, 0xf1, - 0xac, 0x42, 0x60, 0xf9, 0xe9, 0xe8, 0x25, 0x8b, 0xff, 0xdf, 0xce, 0x73, - 0x0e, 0x37, 0xed, 0x23, 0x58, 0xbf, 0xa4, 0xf1, 0x7d, 0xf4, 0xb1, 0x7e, - 0xe6, 0x1d, 0xba, 0x58, 0xbf, 0x1a, 0x66, 0x66, 0x96, 0x2b, 0x0f, 0x4c, - 0x45, 0x37, 0xee, 0x3e, 0x10, 0x16, 0x2b, 0x47, 0x91, 0xc2, 0x1b, 0xda, - 0xc8, 0xf5, 0x8b, 0xff, 0xc2, 0xe7, 0xdf, 0x22, 0x7d, 0xb3, 0xaf, 0x2c, - 0x5f, 0xf0, 0x41, 0xed, 0xcc, 0x3c, 0xc7, 0xac, 0x5f, 0xfe, 0x17, 0x59, - 0xa0, 0xfd, 0xcc, 0x35, 0xf4, 0xb1, 0x7f, 0xf6, 0xf8, 0x43, 0xd3, 0x6f, - 0x9d, 0x79, 0x62, 0xff, 0xcc, 0x7c, 0x87, 0xf1, 0xe1, 0xc5, 0x8a, 0x74, - 0x42, 0xfd, 0x1e, 0xa5, 0x33, 0x5f, 0xa0, 0x72, 0x1a, 0x77, 0xcc, 0x0f, - 0x77, 0xeb, 0x15, 0xb2, 0xe1, 0xf0, 0xd1, 0xb0, 0x74, 0xd5, 0x6d, 0xd3, - 0xa2, 0x4c, 0xd4, 0x32, 0x8e, 0x44, 0x44, 0x1e, 0x8e, 0x08, 0x23, 0x5b, - 0xf6, 0x75, 0xef, 0xca, 0xc5, 0xff, 0x87, 0x90, 0x7f, 0xcf, 0x3c, 0xeb, - 0x17, 0xe7, 0xed, 0xe9, 0xc5, 0x8b, 0xfc, 0xfd, 0xba, 0x92, 0x9e, 0x2c, - 0x5f, 0xd2, 0x5f, 0x66, 0x3a, 0xc5, 0x40, 0xf8, 0x40, 0x6b, 0x5f, 0x4c, - 0x4d, 0x8a, 0x78, 0x7d, 0xe8, 0x45, 0x54, 0xaf, 0x2f, 0xe4, 0xe3, 0x0b, - 0x47, 0x79, 0x7f, 0x4f, 0xb8, 0x19, 0x41, 0x62, 0xfa, 0x77, 0xc2, 0x58, - 0xbf, 0x73, 0x93, 0xa8, 0x68, 0xf4, 0x7e, 0x5f, 0x76, 0xdb, 0x2c, 0x53, - 0x9e, 0xc8, 0x47, 0xf7, 0xf0, 0x79, 0xa8, 0xe6, 0x35, 0x62, 0xfd, 0x9a, - 0x8e, 0x63, 0x56, 0x2e, 0xce, 0x18, 0x7b, 0xe1, 0x99, 0xdf, 0xfe, 0x88, - 0xa7, 0xdc, 0xf7, 0x5b, 0xb9, 0x6c, 0xb1, 0x7f, 0xc5, 0xed, 0x33, 0x75, - 0x0e, 0x2c, 0x5f, 0xf1, 0xb8, 0x41, 0xce, 0xb0, 0x6b, 0x15, 0x87, 0xe8, - 0x23, 0xab, 0xfe, 0x63, 0x4c, 0xfc, 0x82, 0x63, 0xd6, 0x2f, 0xd0, 0xce, - 0xcf, 0xa5, 0x8b, 0xfc, 0x10, 0x79, 0x17, 0x0f, 0xc5, 0x8a, 0x93, 0xe2, - 0x62, 0xaa, 0xc4, 0xf4, 0x9c, 0xbf, 0xf0, 0xc2, 0x62, 0x12, 0x85, 0x05, - 0xff, 0xff, 0x80, 0x19, 0x66, 0xb5, 0x81, 0x64, 0x7e, 0x14, 0x80, 0xed, - 0x05, 0x8b, 0xff, 0xff, 0xed, 0xf0, 0x9f, 0xae, 0x16, 0x7b, 0x99, 0x02, - 0x60, 0xba, 0xf0, 0x9b, 0x8b, 0x17, 0xde, 0xf4, 0x9d, 0x62, 0xf1, 0x67, - 0x00, 0x8a, 0x20, 0x9f, 0xec, 0xe4, 0x9a, 0x2f, 0x68, 0xc4, 0x6f, 0xff, - 0xef, 0x70, 0x43, 0xfb, 0xe4, 0x4c, 0xf1, 0xef, 0xd4, 0x16, 0x2f, 0xff, - 0xe2, 0xc0, 0x31, 0x03, 0x5a, 0xc0, 0xb0, 0x0d, 0xd2, 0xc5, 0x12, 0x2e, - 0xfc, 0xc1, 0x7d, 0xed, 0xb0, 0x25, 0x8b, 0xff, 0x81, 0x21, 0x8e, 0x75, - 0x17, 0xdc, 0x0b, 0x14, 0xe7, 0xd8, 0x02, 0x5b, 0xff, 0x9c, 0xb6, 0x38, - 0xba, 0xf1, 0x37, 0xd6, 0x2f, 0xc4, 0x2f, 0x4f, 0x16, 0x2e, 0x9d, 0xe4, - 0xfb, 0xbe, 0x8d, 0x7e, 0x8a, 0x0f, 0xae, 0x2c, 0x5f, 0xf4, 0xef, 0x27, - 0xc1, 0xb1, 0xd6, 0x2b, 0x47, 0xc7, 0xdc, 0x55, 0x7f, 0xf6, 0xb5, 0x27, - 0xe0, 0x64, 0x53, 0xd2, 0xc5, 0xf4, 0x02, 0x17, 0x4b, 0x17, 0x8a, 0x77, - 0x58, 0xad, 0x8f, 0x0c, 0x32, 0x6a, 0xd9, 0x15, 0xb1, 0xf0, 0x89, 0xa7, - 0x47, 0xf3, 0x43, 0x4a, 0xff, 0xe8, 0x73, 0x24, 0x6e, 0x4d, 0xa3, 0x56, - 0x2f, 0xda, 0x9c, 0x1b, 0xac, 0x5f, 0xdf, 0x71, 0x8f, 0x02, 0x58, 0xbf, - 0x6b, 0x3b, 0x7f, 0x0c, 0x3d, 0x6d, 0xc9, 0xea, 0x51, 0xb8, 0xd0, 0x9a, - 0xbf, 0xff, 0xfe, 0x07, 0x32, 0x1f, 0x97, 0xd0, 0x01, 0x3a, 0xc1, 0x1a, - 0x37, 0xd3, 0x71, 0x62, 0xff, 0xfb, 0xf9, 0x03, 0x37, 0xfb, 0xfb, 0xad, - 0xdf, 0x4b, 0x15, 0x28, 0xd3, 0xf3, 0xf5, 0xfe, 0x9d, 0xb7, 0x79, 0x28, - 0x2c, 0x5f, 0xff, 0xdd, 0xfb, 0xfb, 0xf3, 0xad, 0x3f, 0x5f, 0xcc, 0x2d, - 0xd6, 0x2a, 0x0b, 0xc9, 0x0f, 0x0e, 0xbd, 0x42, 0x38, 0xf0, 0x8f, 0xfc, - 0x71, 0xc0, 0x8c, 0x08, 0xa1, 0xf3, 0xe2, 0x21, 0x1a, 0x5f, 0xe9, 0xce, - 0x6b, 0x3a, 0x82, 0xc5, 0xff, 0xef, 0x49, 0xf7, 0x61, 0xe0, 0x41, 0xea, - 0x0b, 0x17, 0xfe, 0xfc, 0x91, 0xbb, 0xbc, 0x94, 0x16, 0x2f, 0x6d, 0xd8, - 0x6b, 0x15, 0x03, 0xe0, 0x23, 0xfb, 0xc1, 0x30, 0x4b, 0x17, 0xfe, 0x6d, - 0x18, 0x4d, 0xe8, 0x30, 0xd6, 0x2f, 0xff, 0xe7, 0x21, 0xeb, 0x37, 0xfc, - 0xff, 0x35, 0xa9, 0x35, 0x62, 0xff, 0x98, 0x2f, 0x67, 0xf5, 0x1e, 0x35, - 0x8a, 0x82, 0x36, 0x7e, 0x7e, 0x4b, 0x97, 0xf3, 0x37, 0xa3, 0x9f, 0x75, - 0x8b, 0xff, 0xb3, 0xed, 0xee, 0x75, 0x01, 0x37, 0x96, 0x2f, 0xff, 0xe6, - 0x29, 0xcf, 0x45, 0xf9, 0xd8, 0xb3, 0xb3, 0x92, 0xc5, 0x1a, 0x8a, 0x16, - 0x46, 0xbc, 0x4d, 0x1e, 0xb1, 0x7d, 0xa7, 0xcf, 0xac, 0x5f, 0xd8, 0x1e, - 0x69, 0xc9, 0x62, 0x86, 0x7d, 0xda, 0x1f, 0xec, 0x45, 0x7f, 0xff, 0xff, - 0x73, 0x93, 0xad, 0xf7, 0xfb, 0xc4, 0xcd, 0xac, 0xeb, 0xdd, 0x6e, 0x26, - 0x2e, 0xbc, 0xb1, 0x7f, 0x79, 0xe2, 0xf6, 0x47, 0xac, 0x56, 0x91, 0x85, - 0xe8, 0x48, 0x5f, 0xf1, 0xd8, 0x61, 0xf7, 0x49, 0x41, 0x62, 0xff, 0xb7, - 0x14, 0x7f, 0x1c, 0x2c, 0xd2, 0xc5, 0x49, 0xfe, 0x6e, 0x7b, 0x7f, 0xff, - 0xb9, 0x26, 0xe7, 0x18, 0xbd, 0x85, 0x3b, 0x94, 0x9d, 0x62, 0xff, 0xef, - 0xbc, 0x44, 0xc1, 0x7b, 0x3e, 0x75, 0x8b, 0xdf, 0x93, 0xac, 0x5f, 0x9f, - 0x38, 0xc4, 0xb1, 0x7c, 0x2d, 0x37, 0x37, 0x44, 0x4f, 0xd1, 0xbc, 0x3b, - 0x5d, 0x26, 0x61, 0xe8, 0x74, 0x5f, 0xfe, 0xe6, 0x68, 0xcd, 0xfe, 0xfd, - 0x9c, 0x86, 0xb1, 0x7f, 0xdd, 0x6e, 0xe5, 0xb6, 0x75, 0xe5, 0x8a, 0x74, - 0x5a, 0xf0, 0xab, 0xc9, 0xd7, 0xff, 0xe6, 0x2d, 0x87, 0xf9, 0xd6, 0xb3, - 0x9c, 0x11, 0x2c, 0x54, 0xae, 0x11, 0xe4, 0x3c, 0xde, 0x14, 0x8d, 0x28, - 0x1c, 0x22, 0xfb, 0xff, 0x38, 0xc5, 0xee, 0x49, 0x3e, 0x2c, 0x5f, 0xf1, - 0xe7, 0x5d, 0xb3, 0x53, 0x12, 0xc5, 0xff, 0xfb, 0x4e, 0x2d, 0xbd, 0xf9, - 0x7d, 0x69, 0xcb, 0x65, 0x8b, 0xf1, 0x4c, 0x3b, 0xd6, 0x58, 0xbf, 0x9f, - 0x45, 0x3d, 0x41, 0x62, 0xfe, 0xcd, 0x14, 0xf5, 0x05, 0x8b, 0x98, 0xb0, - 0xf7, 0x38, 0x5d, 0x7f, 0xf4, 0xe6, 0xa0, 0xde, 0xfb, 0x10, 0x16, 0x2f, - 0xff, 0xdf, 0x17, 0x5e, 0xe3, 0x75, 0xbc, 0x76, 0x73, 0x98, 0xb1, 0x7f, - 0xcc, 0x76, 0xf7, 0xd8, 0x80, 0xb1, 0x7f, 0xf9, 0xb4, 0x68, 0x72, 0x16, - 0x73, 0x8c, 0x6a, 0xc5, 0x0d, 0x51, 0x86, 0x2b, 0xef, 0x08, 0x8f, 0x95, - 0xf9, 0x0f, 0xb2, 0xe8, 0x47, 0x17, 0xff, 0x9c, 0x8a, 0x42, 0xf6, 0x6d, - 0x1a, 0xa3, 0x57, 0x78, 0xb1, 0x58, 0x8c, 0xa6, 0x6e, 0xbf, 0xf6, 0xb7, - 0x3c, 0xf5, 0xcc, 0xed, 0x8b, 0x17, 0x34, 0x7a, 0xc5, 0xe6, 0xd1, 0xab, - 0x17, 0xff, 0xf4, 0x45, 0x23, 0xce, 0xbd, 0x90, 0x92, 0xd8, 0xf8, 0xb1, - 0x76, 0x1d, 0x62, 0xff, 0xc5, 0x83, 0x76, 0x2d, 0x8f, 0x8b, 0x17, 0x81, - 0x1d, 0x83, 0x3d, 0x40, 0xc5, 0xeb, 0x49, 0x82, 0xfc, 0x78, 0xa1, 0x61, - 0x7d, 0xe6, 0xd7, 0x16, 0x2f, 0xc6, 0x47, 0x66, 0xa5, 0x62, 0xb6, 0x3c, - 0xf2, 0x23, 0xa9, 0x54, 0x11, 0xb2, 0x1e, 0x46, 0x3e, 0xd0, 0x84, 0xbf, - 0x0f, 0x22, 0x9f, 0xac, 0x5f, 0xff, 0xff, 0xbd, 0xf6, 0x86, 0x6a, 0x0f, - 0xd6, 0x76, 0xc1, 0xb8, 0x5f, 0x67, 0xf4, 0xfd, 0x62, 0x8d, 0x45, 0x71, - 0x14, 0xdf, 0xff, 0xf0, 0xd8, 0x80, 0x59, 0xb1, 0xdf, 0xdf, 0xcd, 0x14, - 0xf4, 0xb1, 0x52, 0x88, 0x91, 0x11, 0xdf, 0xf4, 0x1f, 0xdc, 0xde, 0x7d, - 0xc5, 0x8b, 0xf8, 0x06, 0x60, 0xda, 0x0b, 0x15, 0x11, 0xf5, 0x31, 0xdd, - 0xed, 0xdf, 0x4b, 0x16, 0x35, 0x62, 0xff, 0xec, 0xdf, 0xf3, 0xfc, 0xd6, - 0xa4, 0xd5, 0x8b, 0xf6, 0x6b, 0x52, 0x6a, 0xc5, 0xf1, 0x38, 0x39, 0x28, - 0x82, 0xd0, 0x9f, 0xd1, 0xaf, 0xfb, 0xec, 0x03, 0xb4, 0x1b, 0x8b, 0x17, - 0xf9, 0xa1, 0x09, 0x86, 0xfc, 0x58, 0xac, 0x3e, 0xe1, 0x1c, 0xdf, 0xf6, - 0x43, 0xed, 0x0f, 0x3e, 0xcb, 0x17, 0x82, 0x84, 0xac, 0x5f, 0xe8, 0xec, - 0xfc, 0xe6, 0xa0, 0xb1, 0x6c, 0x81, 0xea, 0x00, 0x7a, 0xff, 0xff, 0xe7, - 0xf7, 0xf0, 0x70, 0x7f, 0x61, 0xf8, 0xd0, 0x8e, 0xce, 0x73, 0x16, 0x2a, - 0x0a, 0xd2, 0xf2, 0x11, 0x9d, 0x11, 0x3c, 0x28, 0x3f, 0x0b, 0x30, 0x10, - 0x94, 0x23, 0xb8, 0x4f, 0x7f, 0xf9, 0xb6, 0xfb, 0xc9, 0x64, 0x4f, 0xa7, - 0x58, 0xbf, 0xff, 0x67, 0x62, 0x17, 0x35, 0x30, 0x7f, 0x39, 0x41, 0x62, - 0xa0, 0xdf, 0x32, 0x8e, 0x52, 0x9e, 0x4f, 0xef, 0x1b, 0x09, 0xfe, 0x8d, - 0x1e, 0x15, 0xd1, 0xe4, 0x31, 0x43, 0xe3, 0x45, 0xe7, 0x86, 0x97, 0xe7, - 0x2d, 0x19, 0x6c, 0x07, 0xa5, 0x2c, 0xdb, 0x92, 0x8a, 0x7d, 0x39, 0x94, - 0x14, 0x21, 0x43, 0x49, 0xbf, 0xef, 0xb7, 0x1c, 0x8a, 0x7a, 0x58, 0xbf, - 0xcf, 0xf9, 0xea, 0x18, 0x75, 0x8b, 0xec, 0x27, 0x1f, 0x0f, 0xb2, 0x38, - 0xe2, 0xf8, 0xde, 0xfd, 0xfa, 0x58, 0xbf, 0xf7, 0xb8, 0x1f, 0x9c, 0xa7, - 0xa8, 0x2c, 0x56, 0x8f, 0xac, 0x8a, 0xaf, 0xc5, 0x9f, 0x6f, 0x2c, 0x5f, - 0xfa, 0x12, 0x5b, 0x07, 0xa2, 0x14, 0x16, 0x2f, 0x73, 0x34, 0xb1, 0x7f, - 0x13, 0x0c, 0x1d, 0x01, 0x62, 0xb1, 0x1a, 0xb1, 0xe4, 0x31, 0x13, 0xfd, - 0x07, 0x83, 0xb7, 0xff, 0x31, 0x43, 0x4d, 0xd7, 0xe7, 0x38, 0xb1, 0x7f, - 0xf6, 0xef, 0xaf, 0xe4, 0x5f, 0x7d, 0x6c, 0xb1, 0x7d, 0x91, 0xc2, 0xd2, - 0xc5, 0xff, 0xe2, 0xc0, 0x98, 0x06, 0x7b, 0xf2, 0xfb, 0xac, 0x5f, 0x7b, - 0x6c, 0x1a, 0xc5, 0xff, 0x39, 0xa1, 0xe8, 0x07, 0x7e, 0x2c, 0x51, 0x88, - 0xd2, 0x34, 0x9a, 0x24, 0xc8, 0xe2, 0x4b, 0xff, 0x8b, 0x01, 0x9d, 0x9c, - 0xd0, 0x37, 0x96, 0x2f, 0xfc, 0xfd, 0x70, 0x0c, 0x43, 0x88, 0x4b, 0x17, - 0x82, 0x08, 0x25, 0x8b, 0xff, 0x8a, 0x41, 0x83, 0xe6, 0x1e, 0x77, 0x48, - 0x8c, 0x34, 0x34, 0x04, 0x5c, 0xf9, 0x8a, 0xff, 0x7d, 0xf0, 0x72, 0x5e, - 0x58, 0xa8, 0x26, 0xa8, 0x78, 0x7f, 0xf6, 0x23, 0xbf, 0xf3, 0x03, 0x7f, - 0xbc, 0x45, 0x20, 0x58, 0xac, 0x3f, 0x87, 0x38, 0xbf, 0xb5, 0x9d, 0xdf, - 0x61, 0xac, 0x5f, 0xff, 0xd9, 0x0f, 0xb4, 0x30, 0x85, 0xe7, 0xf9, 0x08, - 0xd5, 0x8b, 0xfe, 0xe8, 0xc2, 0xce, 0xda, 0x7e, 0x2c, 0x5f, 0xdc, 0x2c, - 0xd8, 0x38, 0x2c, 0x56, 0x1f, 0x69, 0xcf, 0x6f, 0xed, 0xfe, 0xf2, 0x5b, - 0xac, 0x54, 0x9e, 0x86, 0x10, 0xdf, 0xed, 0x4f, 0x9f, 0x77, 0x1a, 0xc5, - 0xfa, 0x11, 0x66, 0x6e, 0xb1, 0x7f, 0x85, 0xb4, 0xb8, 0xf0, 0xeb, 0x16, - 0xd2, 0xc5, 0x77, 0x88, 0xa4, 0x93, 0x42, 0x2a, 0x0c, 0xd2, 0xfc, 0x16, - 0x1d, 0xba, 0x58, 0xbe, 0x06, 0x34, 0x7a, 0xc5, 0x49, 0xe7, 0xb9, 0x55, - 0x41, 0x90, 0x23, 0x91, 0xbd, 0x1a, 0x9b, 0xd2, 0x23, 0xc6, 0x35, 0xf9, - 0x41, 0xec, 0x40, 0x03, 0x12, 0x8c, 0x63, 0x90, 0xc4, 0xf4, 0x24, 0x2f, - 0x70, 0xc3, 0x56, 0x2f, 0x6d, 0x3f, 0x58, 0xa3, 0x0d, 0xf1, 0x10, 0x5f, - 0xbf, 0xee, 0x0a, 0x3d, 0x62, 0xe0, 0xbb, 0xc5, 0x8a, 0x93, 0xcb, 0xe8, - 0xb6, 0xff, 0x89, 0x8d, 0xf7, 0x09, 0xcd, 0x58, 0xbd, 0x13, 0x12, 0xc5, - 0xe7, 0x3f, 0x16, 0x2d, 0xec, 0x37, 0x5e, 0x1d, 0xb9, 0x9d, 0x62, 0xfd, - 0xd7, 0xbb, 0x61, 0x2c, 0x5f, 0x9b, 0xd0, 0x61, 0xac, 0x58, 0xdc, 0x3d, - 0x32, 0x2b, 0xb7, 0xd6, 0x2e, 0xcf, 0xac, 0x54, 0x0d, 0x4f, 0x84, 0xab, - 0x13, 0x74, 0x77, 0x4f, 0x93, 0x33, 0x4f, 0x94, 0x2c, 0xeb, 0x17, 0xfc, - 0x06, 0xcd, 0x8f, 0x39, 0xe5, 0x8b, 0xff, 0xfa, 0x4a, 0x4d, 0x29, 0x34, - 0x38, 0xe9, 0xd4, 0xef, 0x2b, 0x15, 0xa4, 0x4c, 0x04, 0x73, 0x7f, 0xd3, - 0xb3, 0x9f, 0xd9, 0x87, 0x58, 0xbf, 0xfe, 0x93, 0x94, 0xf4, 0x01, 0xe1, - 0xf6, 0xc0, 0x96, 0x2f, 0xef, 0xc9, 0x9b, 0xbe, 0xcb, 0x17, 0xfe, 0x63, - 0xe6, 0x8d, 0x34, 0x45, 0xe5, 0x8b, 0xfd, 0x3e, 0xe7, 0x1c, 0xa2, 0x58, - 0xaf, 0x9f, 0xa9, 0x20, 0xdf, 0x13, 0x75, 0x05, 0x8b, 0xfe, 0x62, 0x87, - 0xc5, 0x3d, 0x71, 0x62, 0xa2, 0x3d, 0xd0, 0x88, 0xef, 0xff, 0xe6, 0x3e, - 0xb3, 0xb4, 0x97, 0xb3, 0xef, 0xaf, 0xb2, 0xc5, 0xff, 0x37, 0xb9, 0xef, - 0x34, 0x38, 0xb1, 0x51, 0x26, 0x6f, 0xa7, 0xef, 0x92, 0x12, 0xdd, 0xff, - 0xcd, 0xa6, 0x86, 0x71, 0xbd, 0x91, 0x2c, 0x5f, 0xf7, 0xb5, 0x39, 0xd1, - 0x8d, 0xc5, 0x8b, 0xfb, 0xed, 0xbc, 0x90, 0xd6, 0x2f, 0xcd, 0xa2, 0x98, - 0x2c, 0x5f, 0xb0, 0x7f, 0x78, 0x96, 0x28, 0xd3, 0xfe, 0xd1, 0x71, 0x13, - 0xdf, 0xec, 0x1c, 0xc2, 0x61, 0xe5, 0x8b, 0xff, 0xfe, 0x01, 0xda, 0x19, - 0xb8, 0xc4, 0x6f, 0x5c, 0x60, 0x67, 0x5e, 0x58, 0xbf, 0xf6, 0x44, 0x16, - 0x75, 0xef, 0x49, 0xd6, 0x2a, 0x51, 0x5d, 0xf6, 0xcb, 0xf8, 0xb6, 0x7d, - 0x76, 0x82, 0xc5, 0xff, 0xf7, 0xc5, 0x3a, 0xce, 0xcf, 0xcc, 0xe8, 0x72, - 0xb1, 0x7f, 0xff, 0xbd, 0xe9, 0x81, 0x37, 0xe4, 0xff, 0xc1, 0xb7, 0x44, - 0xb1, 0x7e, 0xce, 0xb1, 0xa3, 0xd6, 0x2f, 0xff, 0x7b, 0xf9, 0xdb, 0xee, - 0x67, 0x38, 0xe7, 0x58, 0xa9, 0x4d, 0x70, 0x66, 0x38, 0xa5, 0xf6, 0x06, - 0x2b, 0xbf, 0xe8, 0x3e, 0xba, 0x92, 0x9e, 0x2c, 0x5e, 0x09, 0xb6, 0x58, - 0xbf, 0xe9, 0xcd, 0xb5, 0x3e, 0x6f, 0x2c, 0x53, 0xa2, 0x47, 0xe7, 0x22, - 0x1f, 0xae, 0xfb, 0x64, 0x03, 0x4c, 0x2a, 0x76, 0x24, 0x81, 0xc8, 0xd4, - 0xb2, 0x3d, 0xdd, 0xcf, 0xba, 0x44, 0xd4, 0x2e, 0x4e, 0x5f, 0xf8, 0x70, - 0x94, 0x6f, 0xde, 0x86, 0xcd, 0xfd, 0x09, 0x8b, 0x1c, 0x0b, 0x16, 0x8c, - 0xef, 0x21, 0x05, 0x25, 0x1a, 0x0b, 0xc6, 0xcd, 0xdd, 0xf5, 0x2d, 0x99, - 0xcc, 0xbd, 0xa5, 0x3c, 0x42, 0x51, 0x28, 0xe7, 0x0b, 0x32, 0xb0, 0x5d, - 0x36, 0x30, 0x7d, 0xe9, 0x03, 0x5d, 0x4e, 0x2d, 0xbc, 0x62, 0xf1, 0xe6, - 0x51, 0x4b, 0x44, 0xd4, 0xbc, 0x73, 0xca, 0x87, 0xfc, 0xfb, 0xab, 0x4b, - 0xf6, 0x04, 0xb0, 0x12, 0x9f, 0xca, 0xe5, 0x7e, 0x9b, 0xea, 0x4d, 0xf8, - 0xa1, 0xf6, 0x13, 0x64, 0x74, 0x72, 0xc1, 0xd2, 0x13, 0xbb, 0xa1, 0xbb, - 0x7f, 0xdf, 0x73, 0x0b, 0x3c, 0xdd, 0x96, 0x2f, 0xc1, 0xfd, 0xbf, 0x2b, - 0x17, 0xe8, 0x75, 0x24, 0x35, 0x8a, 0x82, 0xad, 0x93, 0x65, 0x26, 0x1c, - 0xec, 0x8a, 0x6f, 0xff, 0x6b, 0x02, 0x1f, 0xf2, 0x22, 0xcd, 0x41, 0x62, - 0xf6, 0xb2, 0x3d, 0x62, 0xfe, 0xf0, 0xa1, 0x14, 0xf7, 0x2c, 0x5f, 0xfa, - 0x42, 0x0f, 0x6e, 0x61, 0xe6, 0x3d, 0x62, 0xb4, 0x8e, 0x43, 0xa6, 0x7c, - 0x83, 0xc6, 0x77, 0xff, 0xcc, 0x79, 0xd6, 0xfa, 0x11, 0xba, 0x13, 0x71, - 0x62, 0xb1, 0x12, 0x02, 0x3d, 0xbf, 0xda, 0xdc, 0x4c, 0x33, 0xca, 0xc5, - 0xff, 0xd3, 0xa0, 0xfc, 0xfe, 0xfe, 0x0d, 0xd6, 0x2f, 0xf1, 0x74, 0x0c, - 0xe3, 0x47, 0xac, 0x5f, 0xf1, 0x4e, 0xc1, 0xff, 0xed, 0x1e, 0xb1, 0x7d, - 0x38, 0x3e, 0x96, 0x2b, 0x11, 0x31, 0xf3, 0x7e, 0xc7, 0xd7, 0xff, 0xdf, - 0x8c, 0x9f, 0x48, 0xcb, 0x21, 0xf9, 0x82, 0xc5, 0xe0, 0x98, 0x25, 0x8b, - 0xf9, 0x9b, 0xd1, 0xcf, 0xba, 0xc5, 0xdd, 0xbb, 0x96, 0x2f, 0xfe, 0x92, - 0xd8, 0xb3, 0xdc, 0xce, 0xa0, 0xb1, 0x7f, 0xff, 0x89, 0xc1, 0xcd, 0x66, - 0xff, 0x9f, 0xe6, 0xb5, 0x26, 0xac, 0x5f, 0xfb, 0x36, 0xd9, 0xfd, 0xa1, - 0x48, 0x16, 0x29, 0xd1, 0x47, 0xe6, 0x2b, 0xfb, 0xf2, 0x37, 0x2c, 0x58, - 0xa9, 0x56, 0x71, 0xb1, 0xae, 0x43, 0x77, 0xa3, 0x18, 0xf5, 0x2d, 0x0f, - 0x80, 0xc7, 0x83, 0xbe, 0x87, 0x40, 0x88, 0xaf, 0x77, 0xce, 0xf2, 0x0b, - 0x17, 0x89, 0xb8, 0xb1, 0x7f, 0xe9, 0xf6, 0x6a, 0x0f, 0xd6, 0x76, 0x58, - 0xbf, 0xff, 0x13, 0x8b, 0xbf, 0xfe, 0x66, 0xa0, 0xfd, 0x67, 0x65, 0x8a, - 0xfa, 0x2e, 0x63, 0x87, 0x03, 0x41, 0xbf, 0x3f, 0x62, 0xce, 0x2c, 0x46, - 0x1b, 0x4b, 0xd2, 0x5e, 0x58, 0xa8, 0x1e, 0xc0, 0xcf, 0x2f, 0x36, 0xb6, - 0x58, 0xbf, 0xdb, 0xbc, 0x80, 0xf3, 0x05, 0x8b, 0xfd, 0x9e, 0xe3, 0xef, - 0x84, 0xb1, 0x70, 0x41, 0x2c, 0x5f, 0xf8, 0x5b, 0x37, 0xbd, 0xd6, 0xee, - 0x4b, 0x17, 0x9b, 0x78, 0xcc, 0x4c, 0x0f, 0x72, 0x2f, 0x8f, 0x11, 0xa0, - 0x46, 0x61, 0x8d, 0x5f, 0xb4, 0xd0, 0x7f, 0xac, 0x5f, 0xfd, 0xae, 0x7d, - 0xc2, 0xfb, 0xec, 0xc4, 0xb1, 0x52, 0x7d, 0xcc, 0x51, 0x7e, 0xf7, 0x5b, - 0xbf, 0xd7, 0x38, 0x91, 0x7e, 0x88, 0x9b, 0xa8, 0x2c, 0x5f, 0xfe, 0xe8, - 0x07, 0x17, 0x5f, 0xce, 0xd9, 0xee, 0x2c, 0x56, 0x8f, 0xe8, 0x8a, 0xaf, - 0xd1, 0x42, 0x75, 0xb2, 0xc5, 0xff, 0x8e, 0x20, 0xf3, 0x5b, 0x09, 0x86, - 0xb1, 0x7e, 0xee, 0xcd, 0x67, 0x72, 0xc5, 0x62, 0x2f, 0x34, 0x42, 0x72, - 0xbf, 0xa1, 0x5f, 0x1f, 0xec, 0x35, 0x8b, 0xd8, 0xe0, 0x58, 0xac, 0x37, - 0xfe, 0x23, 0xb4, 0x64, 0x6f, 0x0a, 0xdd, 0x7e, 0xf0, 0xd7, 0xbe, 0xa3, - 0x53, 0x0c, 0x88, 0x42, 0xcc, 0x6f, 0xb9, 0x3c, 0x24, 0x69, 0xe6, 0xf5, - 0x86, 0x37, 0x50, 0xf2, 0x8f, 0x26, 0x89, 0xff, 0x50, 0xbe, 0xfc, 0x6c, - 0xad, 0x88, 0x59, 0xe2, 0x8e, 0xeb, 0x92, 0xd6, 0xbd, 0x09, 0xae, 0xd2, - 0x9c, 0x42, 0x86, 0xe4, 0x71, 0x00, 0x71, 0xb7, 0x77, 0x3d, 0xd4, 0x23, - 0x0c, 0x59, 0x1d, 0x73, 0xfd, 0xd4, 0xb1, 0xad, 0x35, 0x9e, 0x12, 0xff, - 0xa5, 0x76, 0x02, 0x35, 0xf2, 0x9c, 0xc7, 0xe5, 0x66, 0x9d, 0xea, 0xe0, - 0x60, 0x58, 0xb0, 0x06, 0xb8, 0x50, 0x58, 0xa5, 0x8b, 0xe1, 0xfe, 0x42, - 0x58, 0xa9, 0x36, 0x18, 0x19, 0x7f, 0x72, 0x62, 0x83, 0xc4, 0xb1, 0x68, - 0x96, 0x2f, 0xcc, 0x06, 0xcd, 0xd6, 0x2f, 0x4b, 0x79, 0x62, 0xa4, 0xf5, - 0xc8, 0x4f, 0x85, 0x17, 0xfd, 0xe9, 0x27, 0x06, 0x75, 0xe5, 0x8b, 0xe8, - 0xe6, 0x20, 0x2c, 0x5b, 0x6c, 0x3d, 0xe0, 0xce, 0x6f, 0xe6, 0x20, 0x7a, - 0x62, 0x58, 0xa9, 0x3d, 0x78, 0xe2, 0x9a, 0x02, 0x7e, 0x84, 0x91, 0xc1, - 0xff, 0x42, 0x1c, 0x38, 0x71, 0x5d, 0x9d, 0x2c, 0x5f, 0xee, 0xd3, 0xa8, - 0x7d, 0xa0, 0xb1, 0x78, 0xee, 0x05, 0x8b, 0xdf, 0x70, 0x96, 0x2f, 0x9b, - 0x5b, 0xc6, 0x41, 0x11, 0x38, 0x31, 0xc3, 0x6f, 0x0e, 0xdf, 0xfe, 0x83, - 0x72, 0x30, 0xa7, 0x3d, 0x3d, 0x41, 0x62, 0xf1, 0xaf, 0xa5, 0x8b, 0xa4, - 0x0b, 0x17, 0xfc, 0x00, 0x48, 0xc4, 0xda, 0x82, 0xc5, 0xf7, 0xbd, 0x27, - 0x58, 0xbc, 0xe3, 0x8c, 0x74, 0x49, 0x7c, 0x7b, 0x82, 0xe1, 0x9d, 0x5f, - 0xfa, 0x61, 0x18, 0x1c, 0x84, 0x1c, 0x5c, 0x58, 0xb3, 0xee, 0x89, 0x80, - 0x28, 0xd4, 0x62, 0xad, 0x5d, 0xa1, 0xbc, 0xea, 0xfe, 0x8d, 0xde, 0xff, - 0xcd, 0xbc, 0x60, 0x80, 0xf0, 0xc8, 0x2c, 0x5f, 0xff, 0x67, 0x9f, 0xe2, - 0xfb, 0x3f, 0x5c, 0x93, 0x56, 0x2f, 0xda, 0xdd, 0x9b, 0x75, 0x48, 0x6a, - 0x5f, 0xff, 0x7d, 0xc2, 0x62, 0xdf, 0x52, 0xf0, 0x6e, 0x2c, 0x5f, 0x85, - 0xe1, 0x45, 0x2b, 0x17, 0xe1, 0x1b, 0xf6, 0x82, 0xc5, 0xe6, 0xcf, 0x2c, - 0x59, 0xe0, 0x78, 0xc3, 0x2a, 0xbe, 0xfb, 0xf6, 0x75, 0x8b, 0xba, 0xe2, - 0xc5, 0x61, 0xbd, 0x34, 0x92, 0xd1, 0x9b, 0x2a, 0x10, 0x1a, 0x1e, 0x28, - 0xee, 0x6f, 0xf5, 0x06, 0x70, 0xf3, 0x25, 0xff, 0xfe, 0xed, 0x25, 0xe8, - 0xc6, 0xec, 0xc3, 0xc1, 0xb1, 0xd8, 0x6b, 0x17, 0xed, 0x6e, 0xcd, 0xba, - 0xa4, 0xa5, 0x2f, 0x60, 0x19, 0x62, 0xdb, 0xae, 0x41, 0xa2, 0x96, 0x29, - 0x8d, 0x60, 0x08, 0x2e, 0x63, 0xac, 0x5a, 0x33, 0x11, 0x6d, 0xf3, 0x76, - 0x48, 0x22, 0x0b, 0xef, 0x37, 0x40, 0x58, 0xbf, 0xfd, 0x9f, 0x70, 0xfc, - 0xe4, 0x28, 0x67, 0x16, 0x2f, 0xf6, 0x7c, 0x9b, 0xde, 0x95, 0x8b, 0xc4, - 0xd1, 0x8c, 0x8a, 0x0f, 0x12, 0x06, 0x95, 0x7a, 0x37, 0xef, 0xb8, 0xd9, - 0x62, 0xfc, 0xc7, 0xd9, 0xa3, 0xd6, 0x2f, 0xb7, 0x66, 0xdd, 0x52, 0x1f, - 0x17, 0xed, 0xc8, 0x4c, 0x1a, 0xc5, 0xa5, 0x62, 0xa4, 0xdd, 0x8c, 0xaa, - 0xfe, 0x73, 0x40, 0x79, 0x82, 0xc5, 0x69, 0x17, 0x67, 0x6c, 0x22, 0x0b, - 0x88, 0xd5, 0x8b, 0xf7, 0xc2, 0x6d, 0x41, 0x62, 0xdc, 0xc3, 0xc2, 0x71, - 0x8b, 0xfc, 0xfa, 0x31, 0xc7, 0x87, 0x58, 0xb9, 0xb4, 0xb1, 0x5f, 0x3c, - 0xb6, 0x34, 0xbe, 0xcf, 0x3f, 0x78, 0xb1, 0x77, 0xc4, 0xb1, 0x7f, 0xc3, - 0x17, 0xb9, 0x90, 0x7f, 0xac, 0x50, 0xcf, 0x49, 0xc6, 0x2e, 0xeb, 0x8b, - 0x16, 0x35, 0x62, 0xb0, 0xd6, 0x47, 0x0c, 0xdf, 0xf6, 0x76, 0x2c, 0xe0, - 0x7a, 0x35, 0x62, 0xfe, 0x66, 0xdb, 0xd9, 0xba, 0xc5, 0xff, 0xb4, 0x0d, - 0xfe, 0xf1, 0x14, 0x81, 0x62, 0xa2, 0x3f, 0x01, 0x17, 0xdf, 0xe8, 0x64, - 0x7b, 0x10, 0x23, 0x65, 0x8b, 0xfc, 0x42, 0xdc, 0xf3, 0xad, 0xd6, 0x2f, - 0x7a, 0x71, 0x62, 0xff, 0xef, 0x42, 0x4d, 0x32, 0x7d, 0xc9, 0x02, 0xc5, - 0x8b, 0x0f, 0x8d, 0x87, 0x2e, 0x84, 0x64, 0x6e, 0xb9, 0x97, 0xb1, 0x7e, - 0x43, 0x9f, 0xa7, 0x18, 0x9c, 0x4e, 0x42, 0xcf, 0x20, 0x4d, 0x22, 0x3e, - 0x42, 0xb7, 0xc4, 0x62, 0x3b, 0x0e, 0x13, 0x35, 0xba, 0xef, 0x3b, 0x4e, - 0x87, 0x5f, 0xd1, 0x9c, 0x69, 0xea, 0x0b, 0x17, 0xf6, 0xd3, 0xad, 0x34, - 0x16, 0x2f, 0xbf, 0x24, 0x6a, 0xc5, 0x11, 0xe9, 0x78, 0xbe, 0xfe, 0xd3, - 0x01, 0xb3, 0x4b, 0x17, 0x9b, 0xd1, 0xcb, 0x17, 0xda, 0x16, 0x6c, 0xb1, - 0x7f, 0x1f, 0x39, 0x8c, 0x4b, 0x17, 0x16, 0xcb, 0x15, 0x27, 0x88, 0x22, - 0xcb, 0xcc, 0x51, 0x2c, 0x56, 0x22, 0x9b, 0xed, 0x0c, 0x43, 0x7f, 0x66, - 0xbc, 0x53, 0xd2, 0xc5, 0xfd, 0xf9, 0x7e, 0xd8, 0x35, 0x8b, 0xff, 0x36, - 0xd3, 0xf7, 0xd3, 0xc9, 0xd6, 0x2f, 0xf4, 0xeb, 0x0b, 0xd9, 0xf5, 0x8b, - 0xb2, 0x32, 0x55, 0x07, 0x8c, 0x84, 0xe5, 0xbf, 0x86, 0x30, 0x0b, 0xbc, - 0x5d, 0x1c, 0x5e, 0x19, 0xf5, 0x1a, 0xac, 0x70, 0xf2, 0xa4, 0xef, 0xa3, - 0x38, 0x31, 0xac, 0x54, 0x62, 0xb9, 0xe9, 0x96, 0x94, 0x72, 0xdb, 0xff, - 0xfc, 0x2d, 0x1a, 0xdc, 0xc1, 0xcf, 0x5c, 0x0f, 0xc6, 0xb9, 0xab, 0x17, - 0xb8, 0xdc, 0x58, 0xbe, 0xcd, 0x13, 0x2c, 0x54, 0x9b, 0xe7, 0x1d, 0xa8, - 0x23, 0x12, 0x28, 0x52, 0xdd, 0xed, 0x96, 0x2f, 0x04, 0x6e, 0xeb, 0x17, - 0xee, 0xba, 0x86, 0x79, 0x62, 0x88, 0xf9, 0x78, 0x32, 0x22, 0x1b, 0xff, - 0xd1, 0xa8, 0xd0, 0xa3, 0xf6, 0x1c, 0x6c, 0x61, 0x9f, 0x8e, 0x58, 0xbf, - 0xf0, 0x9b, 0x50, 0x2c, 0xe4, 0xe9, 0x62, 0xec, 0x1a, 0xc5, 0xf6, 0xec, - 0xdb, 0xaa, 0x4c, 0x72, 0xfd, 0x3f, 0x26, 0x0d, 0x62, 0xe1, 0x69, 0x62, - 0x86, 0x88, 0x8d, 0x0b, 0x9c, 0xc5, 0x8a, 0x2f, 0xf6, 0x39, 0x6d, 0xec, - 0xfa, 0xc5, 0xcf, 0x1c, 0xb1, 0x7d, 0x9b, 0x1f, 0xcb, 0x15, 0xf3, 0x7c, - 0x43, 0x57, 0x37, 0x16, 0x2f, 0xed, 0x83, 0xd6, 0xb3, 0x4b, 0x17, 0x8f, - 0xc9, 0x58, 0xa8, 0x1f, 0x2b, 0x0b, 0x88, 0xc6, 0xff, 0x89, 0x8d, 0xfb, - 0xc9, 0x6c, 0xb1, 0x7f, 0xff, 0xb0, 0xbd, 0xc3, 0x38, 0x1c, 0xe8, 0x11, - 0xcf, 0xfc, 0xec, 0xb1, 0x7f, 0x17, 0xb4, 0x29, 0x3a, 0xc5, 0xfd, 0xf6, - 0x21, 0x87, 0xd2, 0xc5, 0xff, 0xf3, 0x1a, 0x67, 0x8d, 0x92, 0x86, 0x7d, - 0xce, 0xb1, 0x4e, 0x88, 0x22, 0x30, 0xa9, 0x4c, 0xe5, 0x9a, 0x05, 0x0b, - 0x0b, 0xf8, 0x0d, 0xee, 0x49, 0xab, 0x17, 0xc6, 0x86, 0x5b, 0xac, 0x5b, - 0x16, 0x28, 0xd3, 0x6f, 0xd8, 0x9a, 0xff, 0x3f, 0xa7, 0x46, 0xfd, 0xd6, - 0x2f, 0xff, 0xa1, 0xb4, 0x6a, 0x98, 0xd3, 0x6d, 0xf4, 0x61, 0x9f, 0x8e, - 0x58, 0xbf, 0xec, 0xed, 0x30, 0xea, 0x19, 0xe5, 0x8a, 0xc4, 0xd8, 0x1d, - 0x99, 0x89, 0x00, 0x68, 0x4c, 0xd7, 0xdd, 0x83, 0x8b, 0x8b, 0x17, 0x0b, - 0x75, 0x8a, 0xc3, 0xc1, 0xe1, 0x45, 0xcf, 0x05, 0x8b, 0xfd, 0x85, 0xfc, - 0xf4, 0x8d, 0x62, 0xfd, 0x9d, 0xbe, 0xd0, 0x58, 0xb7, 0x9c, 0xf7, 0x08, - 0xca, 0xfe, 0x1f, 0xdf, 0x70, 0xc4, 0xb1, 0x43, 0x46, 0x56, 0x39, 0xb9, - 0x35, 0xff, 0x41, 0xfc, 0x1e, 0xa7, 0xf2, 0xb1, 0x7f, 0xfe, 0x7e, 0x07, - 0xd0, 0x33, 0xb3, 0xfa, 0x70, 0xa0, 0xb1, 0x7e, 0x7f, 0x79, 0xfc, 0xb1, - 0x7f, 0xfe, 0x11, 0x31, 0xbe, 0x36, 0x4a, 0x19, 0xf7, 0x3a, 0xc5, 0xf6, - 0xb5, 0x91, 0xcb, 0x17, 0x6f, 0xba, 0xc5, 0xfb, 0x40, 0x7f, 0xca, 0xc5, - 0x18, 0x9b, 0xc4, 0x0e, 0xb1, 0x60, 0xe5, 0x0c, 0xad, 0xc2, 0x61, 0x0d, - 0x5f, 0x8e, 0xf3, 0xa8, 0x2c, 0x5f, 0xb3, 0xd0, 0xce, 0x2c, 0x53, 0x9e, - 0x87, 0x0a, 0x2f, 0xe1, 0xe1, 0xdf, 0xf2, 0xb1, 0x7d, 0xac, 0xc8, 0x96, - 0x2a, 0x4f, 0x43, 0x0b, 0x6d, 0x19, 0x2c, 0xaa, 0xad, 0xa1, 0x1d, 0x02, - 0xe1, 0xb2, 0x64, 0x31, 0x8d, 0x3c, 0xdd, 0xc5, 0xe1, 0x0b, 0x11, 0x71, - 0xe3, 0x72, 0xfc, 0x72, 0x8d, 0x08, 0x82, 0x87, 0x5f, 0x23, 0xa6, 0xf4, - 0x2d, 0x03, 0x71, 0xbf, 0xf4, 0x69, 0xf9, 0x71, 0x94, 0x8b, 0x75, 0x8b, - 0xbd, 0x8b, 0x16, 0x8d, 0xd6, 0x2b, 0xbe, 0x1f, 0x97, 0x48, 0x8e, 0x2f, - 0x79, 0xf5, 0x12, 0xc5, 0xf4, 0x3c, 0x21, 0xac, 0x51, 0xa7, 0x85, 0xd0, - 0xf5, 0xfe, 0xce, 0xcf, 0xd6, 0x66, 0xcb, 0x17, 0xff, 0xfb, 0x02, 0x13, - 0x17, 0x6e, 0x06, 0xdb, 0x45, 0x07, 0x17, 0x7e, 0xb1, 0x51, 0xb2, 0x28, - 0xbe, 0x6d, 0x7f, 0xff, 0xfe, 0xfe, 0x33, 0xf3, 0xf8, 0x03, 0x39, 0x83, - 0xc3, 0xbf, 0x50, 0x29, 0x34, 0x0b, 0x17, 0xf1, 0x30, 0x5e, 0xcf, 0xac, - 0x57, 0x78, 0x8b, 0x28, 0xa1, 0x09, 0x71, 0xcd, 0x58, 0xae, 0xf4, 0xf1, - 0xe3, 0x51, 0x75, 0xf8, 0xb3, 0xed, 0xe5, 0x8b, 0xd1, 0xaf, 0xbc, 0x02, - 0xc5, 0x77, 0xa7, 0xa1, 0x1a, 0x89, 0xef, 0xfa, 0x37, 0xef, 0x45, 0x9a, - 0x29, 0x02, 0xc5, 0x86, 0xb1, 0x5d, 0xe1, 0xea, 0xf7, 0xc4, 0x3b, 0xfd, - 0xde, 0x7f, 0x01, 0x3a, 0xe2, 0xc5, 0xff, 0xbb, 0xde, 0xfb, 0x00, 0x24, - 0x7f, 0x17, 0x72, 0xc5, 0xfd, 0x9b, 0xcf, 0x9f, 0xb2, 0xc5, 0xff, 0xb0, - 0x2e, 0x63, 0xf3, 0xd9, 0x1e, 0xb1, 0x5f, 0x3f, 0x22, 0x30, 0xbd, 0xf1, - 0x0d, 0x62, 0xe7, 0xdd, 0x62, 0xff, 0xcd, 0xd0, 0x1b, 0xc0, 0x0c, 0xa0, - 0xb1, 0x7f, 0xdc, 0x29, 0x98, 0xfd, 0x49, 0xd6, 0x2e, 0xef, 0xb8, 0xdd, - 0x62, 0xff, 0xc7, 0xe1, 0x4c, 0xf4, 0x77, 0x02, 0xc5, 0xff, 0x14, 0xfd, - 0x9f, 0x8f, 0xd9, 0x62, 0xc7, 0x31, 0x1a, 0xf1, 0xb9, 0xdc, 0x92, 0x06, - 0x7f, 0x7c, 0xfc, 0xe4, 0xac, 0x56, 0x1f, 0x5f, 0xd2, 0x6f, 0xec, 0x84, - 0x34, 0x2e, 0xf5, 0x62, 0xb6, 0x4f, 0x60, 0x71, 0xc1, 0x91, 0x0d, 0xff, - 0x4c, 0x4f, 0xee, 0x39, 0x44, 0xb1, 0x7f, 0x8a, 0x67, 0xa3, 0xb8, 0x16, - 0x2f, 0xcc, 0x33, 0xc9, 0xab, 0x15, 0xc3, 0xdc, 0x11, 0x9d, 0xff, 0xd2, - 0x0f, 0xc7, 0xb9, 0xfd, 0xc6, 0xe9, 0x62, 0xff, 0xa7, 0x4c, 0x72, 0xce, - 0xbc, 0xb1, 0x5b, 0xa2, 0x08, 0xe9, 0x37, 0x66, 0xcb, 0x17, 0x0e, 0x56, - 0x28, 0x33, 0x5f, 0xdc, 0x31, 0x4e, 0x7f, 0x02, 0x53, 0xbf, 0xf9, 0x88, - 0x59, 0xf7, 0x6d, 0x8a, 0x56, 0x2f, 0xfd, 0xf7, 0x30, 0x3d, 0xcb, 0x3f, - 0x8b, 0x17, 0xf0, 0x38, 0xde, 0xf3, 0x2c, 0x51, 0xa7, 0xde, 0xc8, 0x37, - 0xfb, 0x93, 0x11, 0xe7, 0xdc, 0x58, 0xb8, 0xfb, 0xac, 0x5f, 0xf3, 0x0d, - 0xfa, 0x87, 0x9f, 0x4b, 0x17, 0xfd, 0xa0, 0x16, 0x45, 0x07, 0x89, 0x62, - 0xff, 0x1f, 0x8f, 0x1d, 0x9a, 0x95, 0x8b, 0xff, 0x6c, 0xfb, 0xfd, 0xc6, - 0x3c, 0x09, 0x62, 0xa5, 0x16, 0x78, 0x76, 0xe6, 0xd4, 0x35, 0xe7, 0x4c, - 0x21, 0xdc, 0x79, 0xe3, 0xf0, 0xd1, 0xb9, 0xe1, 0x2d, 0xf8, 0xc7, 0x00, - 0x42, 0x50, 0xb1, 0xe1, 0x17, 0x8d, 0x7b, 0x0c, 0xf7, 0x43, 0xb6, 0xfd, - 0xf7, 0x92, 0xf2, 0xc5, 0xfd, 0x84, 0xdd, 0x43, 0x8b, 0x17, 0xb6, 0xd4, - 0xac, 0x5f, 0x47, 0xf1, 0xbb, 0x2c, 0x5f, 0xfb, 0x08, 0x11, 0xd9, 0x1c, - 0xe5, 0xe5, 0x8a, 0xc3, 0xeb, 0xe1, 0x45, 0x82, 0xd2, 0x36, 0x18, 0xbb, - 0x90, 0x89, 0xb8, 0x8d, 0x58, 0xbf, 0x7d, 0xe4, 0xb6, 0x58, 0xbf, 0xa1, - 0x27, 0x62, 0x95, 0x8a, 0xe8, 0xf5, 0x34, 0x51, 0x60, 0x96, 0x2c, 0x35, - 0x8a, 0xd8, 0xd2, 0xe0, 0x9d, 0x0d, 0x50, 0x7e, 0x43, 0xfd, 0x8e, 0xc4, - 0xd9, 0xd9, 0x22, 0xfd, 0xf6, 0x3c, 0x92, 0xc5, 0xf7, 0x3e, 0xe1, 0x2c, + 0x84, 0x7d, 0xfe, 0x27, 0xdb, 0xdc, 0xcf, 0x2c, 0x5f, 0xc2, 0x8f, 0x6f, + 0x0a, 0x56, 0x29, 0x62, 0xe9, 0xd9, 0x62, 0xbb, 0x3d, 0x5e, 0x18, 0xf5, + 0x06, 0x5f, 0xf6, 0x7f, 0xc5, 0x20, 0x31, 0xd6, 0x2f, 0xc5, 0xe2, 0x63, + 0x56, 0x29, 0x62, 0xb0, 0xda, 0x47, 0x14, 0x5f, 0xf8, 0x5f, 0xfb, 0xe7, + 0x98, 0x80, 0xb1, 0x43, 0x4e, 0x29, 0xa1, 0x12, 0x46, 0x7c, 0x6d, 0xf1, + 0x1d, 0xfc, 0x76, 0xe9, 0x3a, 0xea, 0x58, 0xbf, 0xf3, 0x8f, 0x3a, 0x1f, + 0x21, 0xdc, 0x16, 0x2f, 0xcd, 0xc6, 0x20, 0x2c, 0x5f, 0xcf, 0xd2, 0x07, + 0x98, 0x96, 0x2f, 0xfd, 0x38, 0x47, 0x9f, 0xf5, 0x37, 0x52, 0xc5, 0x40, + 0xfd, 0x34, 0x63, 0x7f, 0xd8, 0x7c, 0xd6, 0x6d, 0x81, 0x2c, 0x5f, 0xfe, + 0xfc, 0xf4, 0xf7, 0x1f, 0xdf, 0xce, 0xae, 0x2c, 0x54, 0xa7, 0x79, 0x86, + 0x66, 0xa1, 0x3c, 0x26, 0xfe, 0x44, 0x03, 0xaa, 0x58, 0xbf, 0xb6, 0x6c, + 0xf6, 0x1d, 0x62, 0xa3, 0x73, 0x74, 0xc1, 0x97, 0xe1, 0xb1, 0x67, 0x52, + 0xc5, 0xff, 0xec, 0x2f, 0x30, 0x0c, 0xf1, 0x30, 0x38, 0xb1, 0x7f, 0x66, + 0x9b, 0xc2, 0x95, 0x8b, 0xff, 0xe6, 0x29, 0x7e, 0xae, 0x3f, 0x33, 0xf9, + 0x1c, 0xb1, 0x43, 0x44, 0x07, 0x42, 0xdb, 0xff, 0xf9, 0xc6, 0xdd, 0x99, + 0x8f, 0x09, 0x29, 0xe9, 0xe6, 0x58, 0xbf, 0xf9, 0xc8, 0x50, 0xce, 0x71, + 0xc7, 0x8b, 0x15, 0x29, 0xdc, 0x6c, 0x55, 0x14, 0x32, 0xbe, 0x4b, 0xe5, + 0xcb, 0xda, 0xee, 0x56, 0x2d, 0x19, 0xd7, 0x1b, 0x43, 0x89, 0x94, 0x77, + 0x08, 0x69, 0x64, 0x78, 0x7b, 0xa0, 0xf6, 0xc6, 0xf1, 0xb7, 0x45, 0x1b, + 0x6e, 0xa3, 0x00, 0x39, 0x8f, 0xe1, 0x54, 0xd1, 0x9c, 0x01, 0x70, 0xa3, + 0xcd, 0xe4, 0x78, 0x5e, 0x94, 0x15, 0x1d, 0x09, 0x50, 0xe3, 0xdd, 0xea, + 0x51, 0xbf, 0xba, 0xce, 0xb3, 0x4c, 0xd0, 0x58, 0xbf, 0xd1, 0xb9, 0x46, + 0x9e, 0x8e, 0x8d, 0x06, 0xb1, 0x7d, 0x0c, 0x8e, 0x75, 0x8b, 0xfd, 0xd6, + 0x60, 0x83, 0xfc, 0x9a, 0xb1, 0x73, 0x75, 0xab, 0x17, 0xf1, 0x7f, 0x3b, + 0x16, 0xeb, 0x15, 0xd6, 0xa2, 0x1c, 0x8e, 0xc3, 0x1c, 0xbf, 0x75, 0xdf, + 0x5a, 0x39, 0x1a, 0xc5, 0xff, 0xff, 0x46, 0xfd, 0x77, 0xf9, 0x71, 0x94, + 0x8b, 0x70, 0x98, 0x73, 0xdf, 0x16, 0x2f, 0xba, 0xec, 0x06, 0xca, 0xc5, + 0xc5, 0xda, 0xc5, 0xf6, 0x07, 0x3a, 0x58, 0xa8, 0xd8, 0xf9, 0xa3, 0x59, + 0x59, 0x0c, 0x5f, 0xf9, 0xfb, 0x8d, 0x5c, 0xd1, 0x86, 0x7e, 0x39, 0x62, + 0xf8, 0xc3, 0x3f, 0x1c, 0xb1, 0x7c, 0x61, 0x9f, 0x8e, 0x58, 0xbd, 0x3e, + 0xdd, 0x62, 0xa3, 0xcf, 0xc2, 0x22, 0x9f, 0x94, 0xdf, 0xff, 0x3e, 0x47, + 0x3e, 0x7b, 0x8d, 0x02, 0x93, 0xac, 0x57, 0x5d, 0x53, 0x40, 0x1c, 0x2f, + 0x48, 0xce, 0xfb, 0x47, 0xf7, 0x6b, 0x17, 0xef, 0x00, 0x32, 0x82, 0xc5, + 0xd3, 0xa3, 0x0f, 0x3d, 0x89, 0x6f, 0xfe, 0x34, 0x28, 0xfd, 0x87, 0x1b, + 0x18, 0x67, 0xe3, 0x96, 0x2f, 0x85, 0xb6, 0xa5, 0x62, 0xfa, 0x73, 0x50, + 0x58, 0xa8, 0xd4, 0x89, 0xe7, 0x58, 0x22, 0x4b, 0x86, 0xeb, 0x17, 0xbd, + 0x06, 0x58, 0xbd, 0xce, 0xdd, 0x62, 0xf3, 0x74, 0xc5, 0x8a, 0xd8, 0xde, + 0x70, 0x7a, 0x9d, 0x12, 0x4c, 0x2f, 0xc5, 0x9b, 0xe7, 0x2f, 0x71, 0x62, + 0xf6, 0x79, 0xd6, 0x2f, 0xb7, 0x66, 0xdd, 0x52, 0x74, 0x97, 0xe2, 0x17, + 0xa7, 0x8b, 0x17, 0xff, 0xf4, 0x85, 0xe3, 0x5b, 0x86, 0x4b, 0x96, 0x77, + 0xec, 0x58, 0xbf, 0x72, 0x41, 0x1b, 0xfd, 0x62, 0x8d, 0x4c, 0x8a, 0x22, + 0x2d, 0x0e, 0x7c, 0xc4, 0x8a, 0x3c, 0xbb, 0x7f, 0xc6, 0x8b, 0xdc, 0x33, + 0xcf, 0xba, 0xc5, 0xf0, 0x7f, 0x9d, 0x2c, 0x5e, 0x14, 0x0e, 0xb1, 0x52, + 0x78, 0x4c, 0x49, 0x7e, 0x0e, 0x0e, 0x0e, 0x2c, 0x5f, 0x19, 0xee, 0x91, + 0xcb, 0x17, 0xdc, 0x9c, 0xd9, 0x62, 0xb6, 0x3c, 0xdf, 0x15, 0x50, 0xd1, + 0x35, 0xa7, 0x7b, 0xec, 0xd8, 0xfe, 0x58, 0xaf, 0xa6, 0x02, 0xd0, 0xba, + 0x22, 0x3b, 0xe2, 0x61, 0xca, 0xc5, 0xff, 0xe2, 0x68, 0xf3, 0x1c, 0xd1, + 0x70, 0xef, 0x12, 0xc5, 0xc1, 0x1a, 0xb1, 0x7f, 0xf4, 0x4f, 0xfe, 0xfc, + 0xf3, 0xd0, 0x72, 0xb1, 0x7f, 0x07, 0x1d, 0xf7, 0xdf, 0xeb, 0x17, 0xfa, + 0x7a, 0x31, 0x4f, 0x4e, 0x2c, 0x5f, 0xdf, 0x90, 0xfe, 0x2e, 0x2c, 0x54, + 0xa6, 0xda, 0x32, 0x1c, 0x50, 0xec, 0x69, 0xd2, 0x3e, 0x69, 0xd4, 0x6d, + 0x7f, 0xee, 0x72, 0x28, 0x75, 0xe6, 0x19, 0xf8, 0xe5, 0x8b, 0xd0, 0x93, + 0xac, 0x54, 0x6e, 0x7d, 0x43, 0x4d, 0xbf, 0x4f, 0x6d, 0xc8, 0x2c, 0x5f, + 0xc7, 0xd4, 0x84, 0xd1, 0x2c, 0x54, 0x0f, 0x65, 0xca, 0x6f, 0xff, 0xfd, + 0xe2, 0x60, 0x73, 0x7f, 0xbc, 0x45, 0x81, 0x7f, 0x0f, 0x3c, 0x58, 0xbf, + 0xd1, 0x6a, 0x7b, 0x83, 0x9d, 0x62, 0xa5, 0x14, 0x84, 0xdd, 0x7f, 0xee, + 0x92, 0x5e, 0xe0, 0xbd, 0x9a, 0x58, 0xbf, 0xf3, 0x45, 0xee, 0x3e, 0xbb, + 0x68, 0x96, 0x2f, 0xff, 0xff, 0x39, 0x9d, 0x75, 0x8d, 0xfa, 0xef, 0xf2, + 0xe3, 0x29, 0x16, 0xe1, 0x30, 0xe7, 0xbe, 0x2c, 0x54, 0xa6, 0x67, 0x84, + 0x2c, 0x82, 0x48, 0x57, 0xd0, 0xea, 0xcf, 0x2c, 0x5f, 0xe7, 0xfb, 0x10, + 0xc3, 0xed, 0x62, 0xfb, 0x93, 0xd5, 0xc5, 0x8a, 0x94, 0x40, 0x88, 0x9b, + 0xa8, 0xd6, 0xef, 0x75, 0x2c, 0x5b, 0xeb, 0x17, 0xfe, 0xf4, 0xc5, 0xc2, + 0xc1, 0xfc, 0x4b, 0x14, 0xe7, 0xa5, 0xe1, 0x2b, 0xf1, 0xa6, 0x86, 0x5b, + 0xac, 0x5f, 0xff, 0xe7, 0xf3, 0xfb, 0x00, 0x64, 0xf7, 0xc9, 0x0c, 0x5f, + 0x75, 0x8a, 0x94, 0xc7, 0xb1, 0xb5, 0xc8, 0x58, 0xb6, 0xfb, 0x73, 0xbc, + 0x7a, 0xc5, 0xcc, 0x35, 0x8b, 0xf4, 0x1e, 0x61, 0x1e, 0xb1, 0x46, 0x1e, + 0x16, 0x0b, 0xde, 0x1e, 0x0d, 0x62, 0xed, 0x6c, 0xb1, 0x52, 0x8c, 0x11, + 0xb4, 0xe1, 0x13, 0x8e, 0xde, 0x14, 0x86, 0xb1, 0x7f, 0xff, 0xf7, 0xf3, + 0xa6, 0xb3, 0x99, 0xad, 0xe7, 0x3c, 0x59, 0xce, 0x60, 0xd6, 0x2f, 0xf6, + 0xd2, 0x5b, 0x8c, 0x3e, 0x2c, 0x5f, 0x39, 0xb8, 0x35, 0x8b, 0xff, 0x80, + 0xe4, 0x19, 0xaf, 0xe6, 0x07, 0x16, 0x2f, 0xf9, 0xf0, 0xbf, 0x9e, 0x91, + 0xac, 0x5f, 0xf9, 0xcb, 0x53, 0xe7, 0xdd, 0xc6, 0xb1, 0x5b, 0x26, 0x2b, + 0xa3, 0x70, 0x11, 0xf9, 0x1b, 0xa1, 0xbd, 0xe1, 0x1a, 0x05, 0x8b, 0xfa, + 0x7d, 0xc1, 0x6f, 0xd7, 0xac, 0x50, 0xcf, 0x53, 0xa0, 0xfd, 0xf6, 0xff, + 0x90, 0x96, 0x2a, 0x55, 0x39, 0xe4, 0x71, 0x0d, 0x0a, 0x2e, 0xbc, 0x92, + 0xfd, 0x83, 0x78, 0x1d, 0x62, 0xff, 0xbe, 0xe1, 0x7b, 0xbd, 0xdf, 0xeb, + 0x17, 0xa2, 0x73, 0xac, 0x5d, 0xd7, 0xf5, 0x2c, 0x5f, 0x84, 0x08, 0x8b, + 0xcb, 0x17, 0xe7, 0x88, 0x0c, 0x05, 0x8b, 0xbb, 0x95, 0x8b, 0xff, 0xe6, + 0x03, 0x7b, 0xf3, 0xee, 0x7d, 0xa2, 0xf2, 0xc5, 0xb5, 0x87, 0xd2, 0x21, + 0x8b, 0xfb, 0xef, 0xe8, 0x37, 0xd6, 0x2f, 0xee, 0x18, 0xc6, 0xfd, 0xd6, + 0x2a, 0x53, 0xe4, 0x19, 0x46, 0x1e, 0xc7, 0x8f, 0x68, 0x83, 0xe5, 0x4d, + 0x09, 0x21, 0x13, 0x86, 0x5d, 0x7f, 0xa2, 0x83, 0x6b, 0x6f, 0x89, 0x62, + 0xf4, 0x05, 0xb2, 0xc5, 0xf3, 0x90, 0xe5, 0x62, 0xa2, 0x3c, 0x0f, 0x8f, + 0xdf, 0xc5, 0xb7, 0xbd, 0x86, 0xac, 0x5c, 0xc1, 0xac, 0x5f, 0xfb, 0xc6, + 0x71, 0x8b, 0x7f, 0xbe, 0x96, 0x2b, 0x63, 0xd9, 0xc1, 0x8a, 0x94, 0xd1, + 0x71, 0xdd, 0x88, 0xf9, 0x08, 0x9b, 0xda, 0x7e, 0xd6, 0x2f, 0xf4, 0xf9, + 0xb6, 0x13, 0xc1, 0x62, 0xfe, 0xfb, 0xb4, 0xfb, 0x16, 0x2e, 0x0f, 0xeb, + 0x17, 0x08, 0x35, 0x8a, 0xfa, 0x2c, 0x08, 0x78, 0x23, 0x40, 0xcb, 0x3a, + 0x86, 0x6f, 0xff, 0xcd, 0x02, 0x9e, 0x67, 0x7b, 0x93, 0x67, 0x7b, 0xac, + 0x5f, 0xff, 0x31, 0x36, 0xc5, 0x3d, 0xb8, 0xca, 0x76, 0x58, 0xbf, 0xe7, + 0xfe, 0x76, 0x08, 0x0f, 0x16, 0x2f, 0xef, 0x67, 0xc3, 0x8b, 0x8b, 0x16, + 0x8c, 0x8d, 0xdb, 0xa3, 0x3e, 0xb0, 0xe3, 0xad, 0x47, 0x8d, 0x21, 0x59, + 0xd7, 0x0d, 0x7a, 0xea, 0x6b, 0x1a, 0xa1, 0xb7, 0x31, 0xbc, 0xed, 0x08, + 0xc8, 0x43, 0x2c, 0x70, 0xc6, 0xc8, 0xd4, 0x0d, 0x59, 0xde, 0x38, 0x17, + 0x8e, 0x86, 0x3e, 0x1a, 0x11, 0x42, 0x03, 0x51, 0xfc, 0x1e, 0x17, 0x7f, + 0x8d, 0x41, 0xa1, 0xf6, 0x03, 0xa2, 0x95, 0x23, 0xc9, 0x46, 0x1e, 0x8f, + 0x28, 0x50, 0xf0, 0xe8, 0x9c, 0x12, 0xbc, 0x72, 0x7f, 0x51, 0xd5, 0xfa, + 0x37, 0xeb, 0x3b, 0xe1, 0xd6, 0x2e, 0x98, 0xe5, 0x8b, 0xdd, 0x6c, 0x71, + 0xab, 0x17, 0xfa, 0x0f, 0xee, 0x4e, 0xb1, 0x62, 0xfe, 0x8d, 0x47, 0xfc, + 0x85, 0x8b, 0x17, 0xff, 0x8b, 0xce, 0x7f, 0xcb, 0x93, 0x68, 0xd5, 0x8b, + 0xfa, 0x0e, 0x31, 0x16, 0x2c, 0x5f, 0xcd, 0xe9, 0x3c, 0x92, 0xc5, 0xee, + 0x82, 0x82, 0xc5, 0x62, 0x30, 0x9d, 0x27, 0x45, 0xbd, 0x0b, 0x2f, 0xfe, + 0x34, 0xd9, 0x2f, 0x78, 0xa7, 0xdc, 0x58, 0xbf, 0xee, 0x0b, 0xd0, 0x7e, + 0x9f, 0x75, 0x8a, 0x74, 0x41, 0x1d, 0x1a, 0xfd, 0x9c, 0xdf, 0xd2, 0xb1, + 0x7f, 0x45, 0xcc, 0x3c, 0xc7, 0xac, 0x56, 0x1e, 0xdf, 0xca, 0x6f, 0xde, + 0xcf, 0x4f, 0x6b, 0x17, 0xf6, 0xd3, 0xe6, 0x34, 0x4b, 0x14, 0xb9, 0xc5, + 0xcb, 0xfc, 0x59, 0x9d, 0xef, 0x3b, 0x2c, 0x5f, 0xfd, 0x3a, 0x01, 0x9c, + 0xfc, 0x9d, 0x89, 0x62, 0xff, 0x85, 0xe7, 0xfb, 0x9b, 0xf7, 0x58, 0xbf, + 0xa4, 0x19, 0xd2, 0x46, 0xb1, 0x7f, 0xf6, 0xb9, 0xf7, 0x9f, 0x79, 0xa1, + 0xc5, 0x8b, 0xfd, 0x3a, 0x0f, 0xff, 0xc0, 0x2c, 0x54, 0x13, 0x28, 0x1a, + 0x2e, 0xe7, 0x4e, 0x5f, 0xf4, 0x5b, 0xfb, 0x8f, 0xe2, 0x14, 0x16, 0x2f, + 0x1e, 0x63, 0xd6, 0x2f, 0xbc, 0x42, 0x82, 0xc5, 0x61, 0xe1, 0xb9, 0x05, + 0xf7, 0x9c, 0xfc, 0x31, 0x12, 0x3c, 0x71, 0xbf, 0xa0, 0xd0, 0x62, 0xdd, + 0x62, 0x96, 0x2d, 0x2b, 0x14, 0x32, 0xf4, 0x83, 0x2d, 0xc5, 0x8a, 0x93, + 0x63, 0xe1, 0xfb, 0xff, 0xd9, 0xe9, 0x08, 0x3d, 0xb9, 0x87, 0x98, 0xf5, + 0x8b, 0xf8, 0x65, 0x21, 0x0f, 0x16, 0x29, 0x62, 0xfc, 0xdb, 0xee, 0xe0, + 0x58, 0xa3, 0x9b, 0x6f, 0x06, 0x5f, 0xcd, 0x0d, 0x38, 0x4e, 0xb1, 0x7c, + 0x52, 0x3d, 0x2c, 0x5e, 0xde, 0x76, 0x58, 0xbf, 0xf3, 0xc1, 0xf5, 0xdc, + 0x94, 0xf1, 0x62, 0xb6, 0x3f, 0xfd, 0xc8, 0xbc, 0x3f, 0x68, 0xc8, 0xdd, + 0x73, 0x72, 0x46, 0x72, 0x35, 0xde, 0xe1, 0xb9, 0x11, 0xdf, 0xdf, 0x08, + 0x83, 0x8a, 0x1e, 0x64, 0x8e, 0x21, 0x0e, 0x15, 0xb5, 0xda, 0xef, 0x8e, + 0x8a, 0x4f, 0x3a, 0x19, 0x7d, 0x81, 0x46, 0xe7, 0x58, 0xbf, 0xec, 0x2d, + 0xc6, 0xfd, 0x24, 0x6b, 0x17, 0xf1, 0x4f, 0x67, 0x6f, 0x2c, 0x5f, 0xfe, + 0x09, 0x87, 0xf9, 0xef, 0xd3, 0xf6, 0x8f, 0x58, 0xb3, 0xe8, 0xff, 0x7e, + 0x5d, 0x7f, 0xff, 0xc2, 0xd4, 0x39, 0xf6, 0x7d, 0x6b, 0x42, 0xed, 0xf4, + 0xdc, 0x58, 0xbf, 0x60, 0x5c, 0xcf, 0xac, 0x5f, 0xfb, 0x79, 0xcf, 0xcf, + 0x8a, 0x7c, 0xb1, 0x7f, 0x31, 0x7e, 0x75, 0x05, 0x8a, 0xd1, 0xf5, 0xf0, + 0xfa, 0xfa, 0x03, 0xcf, 0xac, 0x52, 0xc5, 0xe9, 0x28, 0x96, 0x2f, 0xda, + 0xe7, 0x18, 0x96, 0x2a, 0x37, 0x3d, 0x1f, 0x86, 0x08, 0x76, 0xff, 0xf8, + 0x85, 0xdc, 0x22, 0x27, 0x8b, 0xcf, 0xd8, 0x4b, 0x17, 0x85, 0xfe, 0x2c, + 0x5f, 0xf9, 0x8d, 0xdf, 0xef, 0x16, 0xa4, 0x25, 0x8b, 0xd3, 0x9d, 0xee, + 0x7c, 0x24, 0x3d, 0x7f, 0xf3, 0x1f, 0x9e, 0x26, 0x07, 0x7e, 0x8d, 0x4b, + 0x15, 0xa3, 0xff, 0x11, 0x9d, 0x41, 0x35, 0x7f, 0x46, 0x6b, 0x7f, 0xe2, + 0x60, 0xbd, 0x9f, 0x68, 0x99, 0x62, 0xff, 0xfc, 0x00, 0x49, 0x9f, 0x9f, + 0x0b, 0x7f, 0xc9, 0x32, 0xc5, 0xff, 0xf8, 0x84, 0xd1, 0xf9, 0x0f, 0xe1, + 0xb8, 0x38, 0x84, 0xb1, 0x58, 0x8b, 0x1f, 0xab, 0xdd, 0xbe, 0x2c, 0x5f, + 0xff, 0xff, 0x43, 0xe2, 0x68, 0x77, 0xc7, 0x29, 0x06, 0x7c, 0xb3, 0xa6, + 0x45, 0xee, 0x2c, 0x5f, 0xd3, 0x07, 0xef, 0xd8, 0xb1, 0x7f, 0xfc, 0xdd, + 0xc3, 0x9d, 0xf8, 0x9b, 0xf9, 0xdf, 0x96, 0x2a, 0x53, 0x3b, 0x34, 0x89, + 0xc6, 0x35, 0x08, 0x06, 0x2e, 0xbf, 0xe1, 0x13, 0x1a, 0x61, 0xfb, 0xe2, + 0xc5, 0xf6, 0xb8, 0xfa, 0x58, 0xbf, 0xd8, 0x2e, 0xbf, 0x7f, 0xbc, 0x4b, + 0x17, 0xf8, 0x46, 0xe7, 0xdb, 0xdc, 0x58, 0xbf, 0xff, 0xf9, 0xe0, 0xdc, + 0xe4, 0xf3, 0x3e, 0xe5, 0x27, 0xd4, 0x86, 0xc4, 0xb1, 0x7f, 0xff, 0xf6, + 0x70, 0x3f, 0x3f, 0x47, 0xf4, 0x27, 0xef, 0x3e, 0xf8, 0x98, 0xeb, 0x15, + 0x28, 0xe3, 0x83, 0x7d, 0x71, 0x33, 0xaf, 0x46, 0x31, 0x7e, 0xe4, 0xfc, + 0x38, 0x96, 0x29, 0xcf, 0x57, 0xc5, 0x55, 0x2a, 0x83, 0xb0, 0x8d, 0xa3, + 0xca, 0xbd, 0x09, 0x3a, 0xc5, 0xf4, 0x0b, 0x3e, 0xb1, 0x4b, 0x17, 0xf6, + 0x0f, 0x58, 0xf1, 0x2c, 0x5f, 0xed, 0x8b, 0x3b, 0xf6, 0x04, 0xb1, 0x7e, + 0xef, 0xd3, 0x81, 0x11, 0xf2, 0x06, 0x5d, 0x51, 0xa2, 0x2c, 0x31, 0xc2, + 0xfe, 0x3b, 0xfb, 0x82, 0xd9, 0x62, 0xee, 0x41, 0x62, 0xfa, 0x77, 0xc3, + 0x56, 0x2f, 0xff, 0xb0, 0x62, 0xf7, 0x37, 0xfb, 0xf0, 0x4d, 0xda, 0xc5, + 0xff, 0xff, 0xf8, 0x98, 0xdc, 0xd0, 0x27, 0xdc, 0x1f, 0xe7, 0x83, 0x26, + 0x37, 0x59, 0xdf, 0x16, 0x2f, 0xf8, 0x85, 0xb7, 0xb9, 0x84, 0x05, 0x8b, + 0xcd, 0x0e, 0x0d, 0x17, 0xe1, 0xc2, 0x16, 0xbe, 0x9a, 0x60, 0xa3, 0x12, + 0xac, 0x4f, 0x88, 0xd3, 0x0f, 0x8c, 0x7a, 0x37, 0x0b, 0xf9, 0x88, 0x04, + 0xde, 0x58, 0xbf, 0xb4, 0xd0, 0xdb, 0x02, 0x58, 0xa8, 0xf3, 0xdc, 0xd1, + 0x65, 0x2c, 0x5d, 0x10, 0x96, 0x2b, 0x0f, 0x2b, 0xe4, 0xa1, 0x06, 0x5f, + 0xf7, 0xc3, 0xf3, 0xe9, 0xf6, 0x95, 0x8b, 0xff, 0xf8, 0x50, 0x27, 0x81, + 0x67, 0xb9, 0x30, 0x1c, 0xf9, 0x62, 0xff, 0xd3, 0xde, 0xff, 0x7d, 0x69, + 0xa0, 0xb1, 0x7f, 0xb6, 0x2c, 0xef, 0xd8, 0x12, 0xc5, 0xfc, 0x36, 0xef, + 0xd8, 0x73, 0x9f, 0xb8, 0x68, 0x37, 0xda, 0x90, 0xb8, 0xb1, 0x7b, 0xf9, + 0x12, 0xc5, 0xff, 0xe2, 0xf7, 0x31, 0xcf, 0x83, 0x98, 0x4e, 0x1e, 0x17, + 0x89, 0x29, 0xd1, 0xca, 0x28, 0x44, 0x54, 0x15, 0x23, 0xe1, 0x7b, 0x9d, + 0xf2, 0x3b, 0x6b, 0xff, 0xb0, 0x73, 0x09, 0xd4, 0x86, 0xc4, 0xb1, 0x7f, + 0xee, 0x99, 0x03, 0x8d, 0xfa, 0x48, 0xd6, 0x2f, 0xff, 0x9f, 0xe2, 0x39, + 0xda, 0x1f, 0x63, 0xbf, 0x16, 0x28, 0xe8, 0xd6, 0x64, 0x3f, 0x21, 0xdc, + 0xd1, 0x9b, 0x33, 0xec, 0xa0, 0xd3, 0x90, 0x94, 0x34, 0x8b, 0x77, 0x4e, + 0xe3, 0x8b, 0x88, 0xab, 0x52, 0x8a, 0xce, 0x9d, 0xf9, 0x49, 0x6c, 0x6a, + 0x01, 0xd2, 0x86, 0x97, 0x25, 0x04, 0xfa, 0x59, 0x88, 0x71, 0x8c, 0xd3, + 0xb6, 0x36, 0x3f, 0x85, 0xc1, 0x53, 0xf6, 0x6f, 0xee, 0x3f, 0x88, 0x50, + 0x58, 0xbf, 0x3f, 0x88, 0x50, 0x58, 0xb8, 0xfc, 0x30, 0xf5, 0xb8, 0x5d, + 0x7f, 0x4e, 0x03, 0x30, 0x6b, 0x16, 0xf3, 0x9e, 0xd9, 0x17, 0xdf, 0x85, + 0xbf, 0xf0, 0x0b, 0x17, 0xee, 0x1e, 0x4a, 0x25, 0x8b, 0xf8, 0xbc, 0x79, + 0xcf, 0x2c, 0x5f, 0xbd, 0xf9, 0x0c, 0x96, 0x2d, 0x09, 0x3d, 0x6c, 0x2d, + 0xbf, 0xf7, 0x9f, 0x77, 0x1b, 0x11, 0xb2, 0xb1, 0x73, 0x9a, 0xb1, 0x7f, + 0xd2, 0x5e, 0x6f, 0x37, 0x60, 0x58, 0xa1, 0x9e, 0x8f, 0x41, 0x8b, 0xfe, + 0x9e, 0xfe, 0xdc, 0xf4, 0x84, 0xb1, 0x52, 0x8e, 0xfc, 0x84, 0x86, 0x89, + 0x2f, 0xff, 0xe7, 0x83, 0xfa, 0x4f, 0x9d, 0xfa, 0x4f, 0x9d, 0xf9, 0x73, + 0x8c, 0x17, 0xb4, 0x00, 0x96, 0x2f, 0xfb, 0x05, 0xd7, 0xbc, 0x4f, 0x84, + 0xb1, 0x7f, 0xed, 0xc8, 0x5e, 0xe6, 0x9f, 0xb0, 0x2c, 0x5f, 0x88, 0x5b, + 0x77, 0x1e, 0xb1, 0x58, 0x7e, 0x1e, 0x42, 0xa9, 0x4d, 0x58, 0x6d, 0x38, + 0x3e, 0xd0, 0xad, 0xb7, 0x5a, 0xb1, 0x70, 0xbe, 0xb1, 0x7e, 0x2c, 0xfb, + 0x79, 0x62, 0xfe, 0x83, 0x67, 0x49, 0x1a, 0xc5, 0x75, 0xa7, 0xad, 0xd7, + 0x09, 0xef, 0xd1, 0xb7, 0x5b, 0xae, 0x71, 0x62, 0xfe, 0x8d, 0x47, 0xfc, + 0x85, 0x8b, 0x17, 0xce, 0x28, 0x4a, 0xc5, 0xf6, 0x77, 0x27, 0x58, 0xbe, + 0x72, 0x90, 0x2c, 0x5f, 0xff, 0x0f, 0x0f, 0xc1, 0x33, 0xc1, 0xf5, 0x83, + 0x58, 0xbc, 0x2e, 0xbe, 0x56, 0x2f, 0xff, 0xf9, 0xfa, 0x48, 0xdc, 0x9b, + 0x46, 0x99, 0xf6, 0xe0, 0x52, 0x35, 0x8a, 0x74, 0x46, 0x68, 0x8a, 0xff, + 0x7e, 0x76, 0xd4, 0xe0, 0xd6, 0x2f, 0xd3, 0xd1, 0xb3, 0x4b, 0x17, 0x66, + 0xcb, 0x17, 0x0e, 0x56, 0x28, 0x33, 0x5f, 0xd4, 0x31, 0x52, 0x8b, 0x1f, + 0x9a, 0x09, 0x62, 0xfc, 0xd1, 0x41, 0xfc, 0xb1, 0x78, 0x6d, 0x05, 0x8b, + 0xfb, 0xa9, 0xfa, 0x7b, 0x3e, 0xb1, 0x58, 0x7a, 0x02, 0x1d, 0xbf, 0xb3, + 0xce, 0x77, 0xd2, 0xc5, 0xfd, 0x30, 0x7e, 0xfd, 0x8b, 0x16, 0x18, 0xcf, + 0x6f, 0x45, 0xb7, 0xff, 0xed, 0xb2, 0x04, 0x26, 0xe7, 0xb2, 0x28, 0x3f, + 0x96, 0x2f, 0xb0, 0xa6, 0x0b, 0x15, 0x28, 0xa0, 0xc2, 0x8f, 0x2b, 0xdf, + 0xfe, 0xfc, 0xc0, 0x7f, 0x9e, 0xfc, 0xe7, 0xe2, 0xc5, 0xc2, 0x82, 0xc5, + 0x31, 0xf2, 0x74, 0x4c, 0xb8, 0xf2, 0xb1, 0x69, 0x58, 0xac, 0x35, 0x1a, + 0x17, 0xa8, 0x2e, 0x6a, 0x9a, 0x45, 0xb9, 0x1b, 0x90, 0xea, 0x1b, 0x7f, + 0x86, 0x98, 0x0b, 0xc9, 0xe7, 0xd1, 0x8e, 0x74, 0x84, 0x97, 0x52, 0x5d, + 0xff, 0x6b, 0x9f, 0x7d, 0xf7, 0x16, 0xcb, 0x17, 0xdd, 0x08, 0x50, 0x58, + 0xb8, 0xa5, 0x62, 0xc1, 0x61, 0xbb, 0x8f, 0x25, 0xbf, 0x84, 0x6e, 0x17, + 0x56, 0x2c, 0x5e, 0xeb, 0xdf, 0xb5, 0x8b, 0xff, 0xfd, 0xf7, 0x39, 0xdc, + 0x2e, 0x77, 0xbb, 0xe6, 0x87, 0x3d, 0xac, 0x5f, 0xff, 0x4c, 0x33, 0x8e, + 0x40, 0x2c, 0xf7, 0xf1, 0x62, 0xd0, 0xdd, 0x16, 0x44, 0xcb, 0x5d, 0xa3, + 0xfb, 0x50, 0xd5, 0xa9, 0x4f, 0xef, 0x1e, 0x48, 0xa8, 0x51, 0x97, 0xdf, + 0x9f, 0xc5, 0x27, 0x58, 0xbe, 0x2c, 0xfe, 0x2c, 0x57, 0xcf, 0x23, 0x84, + 0xf7, 0xff, 0xfd, 0x23, 0xfe, 0x77, 0xe2, 0x6f, 0x81, 0xb9, 0xc6, 0xd6, + 0xeb, 0x17, 0xfc, 0xde, 0x6f, 0xf7, 0x0c, 0xf2, 0xc5, 0xe3, 0x8b, 0xeb, + 0x17, 0xe9, 0x89, 0x9b, 0x4b, 0x17, 0xfd, 0x3c, 0xfe, 0x74, 0x9c, 0xed, + 0x62, 0xa5, 0x10, 0x3c, 0x1e, 0xf1, 0x45, 0x7d, 0x1d, 0x5e, 0x85, 0xdd, + 0xf6, 0xd1, 0xcc, 0x6a, 0xc5, 0xfe, 0xcc, 0xc3, 0x4d, 0x68, 0x2c, 0x56, + 0x27, 0xf0, 0x69, 0x13, 0xc6, 0xa5, 0xf2, 0x8f, 0x14, 0x5f, 0x73, 0x7f, + 0x4a, 0xc5, 0xff, 0x3c, 0xe8, 0x11, 0xd9, 0xd3, 0x65, 0x8b, 0xfc, 0xe7, + 0x7d, 0x72, 0x12, 0xb1, 0x58, 0x89, 0x6f, 0x92, 0x78, 0xfe, 0xfc, 0xdb, + 0x61, 0x6e, 0xb1, 0x7f, 0xf0, 0x5c, 0xdf, 0xef, 0xdf, 0xb5, 0xa9, 0x58, + 0xb4, 0x16, 0x2f, 0xe2, 0xcf, 0xb3, 0x6e, 0xb1, 0x73, 0x04, 0x61, 0xbf, + 0xe0, 0x95, 0x3a, 0x2d, 0x8a, 0x11, 0x17, 0xff, 0x7b, 0x30, 0xbd, 0xce, + 0xf9, 0x3b, 0x2c, 0x5f, 0xf7, 0x9a, 0x1c, 0xe8, 0x2d, 0x3a, 0xc5, 0x6c, + 0x88, 0x2d, 0x23, 0x5f, 0xfc, 0xdc, 0x26, 0x34, 0x7f, 0x13, 0x71, 0x62, + 0xa4, 0xfa, 0x44, 0x49, 0x7e, 0x31, 0xe2, 0x7f, 0x2c, 0x5f, 0xff, 0xe0, + 0x83, 0xcd, 0x13, 0x77, 0x0d, 0xe7, 0xdc, 0xce, 0xfc, 0xb1, 0x5b, 0xa2, + 0x41, 0x8a, 0xaf, 0xc5, 0x80, 0x90, 0x2c, 0x5f, 0xdb, 0x07, 0x9f, 0x6e, + 0xd6, 0x2f, 0xff, 0xfa, 0x1e, 0x72, 0x01, 0x67, 0x60, 0x6f, 0x71, 0xcb, + 0xb8, 0x2c, 0x5f, 0xe8, 0x39, 0x45, 0x07, 0xfa, 0xc5, 0xee, 0x08, 0xeb, + 0x17, 0xff, 0xda, 0xd6, 0x73, 0x82, 0x2e, 0x61, 0xe6, 0x3d, 0x62, 0xd3, + 0x04, 0xd9, 0x30, 0x9f, 0xb3, 0x18, 0x99, 0xfc, 0x68, 0x10, 0xf5, 0x62, + 0xe5, 0xb3, 0x97, 0xea, 0x1b, 0xff, 0x8c, 0x45, 0xa1, 0x62, 0x51, 0xc3, + 0xdf, 0xba, 0x3e, 0xb0, 0x6b, 0x17, 0xff, 0xdc, 0xfb, 0xf3, 0xdf, 0xc1, + 0xbf, 0x30, 0x96, 0x2c, 0x58, 0x7f, 0x22, 0x2a, 0xbf, 0xc4, 0xda, 0x37, + 0xd9, 0xba, 0xc5, 0x49, 0xed, 0xe1, 0x35, 0xff, 0x09, 0xb8, 0x66, 0x84, + 0xdc, 0x58, 0xaf, 0x9e, 0xd9, 0x10, 0x5f, 0x9b, 0xf0, 0x2d, 0xd6, 0x2f, + 0xf4, 0x9f, 0x1c, 0xf3, 0x1e, 0xb1, 0x7f, 0xa0, 0x7e, 0x39, 0x77, 0x05, + 0x8a, 0xdc, 0xfa, 0xa2, 0x35, 0xbf, 0xcf, 0xa6, 0x20, 0x61, 0x2c, 0x5f, + 0xef, 0x39, 0x67, 0x70, 0x95, 0x8b, 0xff, 0xb5, 0xa6, 0x87, 0x0b, 0x0e, + 0x1f, 0x6b, 0x15, 0x27, 0xf5, 0x86, 0x77, 0xff, 0xf0, 0xd9, 0x8d, 0xcf, + 0x4f, 0xd9, 0xf9, 0xc9, 0x02, 0xc5, 0xff, 0x3c, 0x0b, 0x3e, 0x4d, 0x05, + 0x8b, 0xff, 0xf4, 0x30, 0x87, 0xf9, 0xc2, 0x90, 0x1d, 0xa0, 0xb1, 0x44, + 0x88, 0xa0, 0xcd, 0xef, 0x33, 0x6e, 0xa9, 0x13, 0x0b, 0xf6, 0xcc, 0x71, + 0xba, 0xc5, 0xff, 0xcd, 0x80, 0x00, 0xbc, 0x53, 0xee, 0x2c, 0x5e, 0xea, + 0x7e, 0x2c, 0x54, 0x11, 0xb5, 0xb9, 0x1b, 0x95, 0x00, 0xa7, 0xa9, 0x12, + 0xf4, 0x6d, 0x1b, 0xf5, 0xab, 0x17, 0xfe, 0x67, 0xf4, 0xfd, 0xce, 0xc3, + 0x58, 0xa8, 0xd4, 0x7d, 0x5f, 0x2d, 0xbf, 0xfd, 0xc1, 0xfe, 0x7f, 0x27, + 0xd6, 0x9f, 0x75, 0x8a, 0xdc, 0xfd, 0x18, 0xa2, 0xff, 0xff, 0xf6, 0x6f, + 0x22, 0xdf, 0xf3, 0xa3, 0x30, 0x9f, 0xbe, 0x07, 0xb1, 0x60, 0xd6, 0x2f, + 0xf7, 0x46, 0x3e, 0x1b, 0x3c, 0x58, 0xbd, 0xdc, 0x38, 0x62, 0x2c, 0xb1, + 0xf2, 0xff, 0x67, 0x7e, 0xf3, 0x43, 0x8b, 0x34, 0xbf, 0xbb, 0xe7, 0xbc, + 0xc0, 0x58, 0xa9, 0x4d, 0xd3, 0x21, 0xa9, 0xa3, 0x66, 0x3a, 0xbf, 0xc4, + 0xde, 0xe6, 0xe2, 0x25, 0x8b, 0xff, 0xe0, 0x38, 0x02, 0xc7, 0xe8, 0x59, + 0xef, 0xba, 0xc5, 0xed, 0xbc, 0xeb, 0x17, 0xff, 0x13, 0x05, 0xc0, 0x98, + 0x73, 0xdf, 0x16, 0x2d, 0x8b, 0x15, 0xa3, 0xd8, 0xf2, 0x3d, 0xfb, 0x8c, + 0xd0, 0xe2, 0xc5, 0xf7, 0xc4, 0x5b, 0x2c, 0x5c, 0xfd, 0xac, 0x5f, 0xcd, + 0x0e, 0x61, 0x01, 0x62, 0xcc, 0x62, 0x65, 0x23, 0x76, 0xec, 0x89, 0x8a, + 0x3a, 0xf2, 0x4f, 0x0c, 0x5b, 0x58, 0x9e, 0xef, 0xe3, 0x7a, 0xbf, 0xff, + 0x9b, 0x62, 0x9e, 0xfb, 0xdc, 0x4d, 0xa0, 0x67, 0x7e, 0x58, 0xac, 0x55, + 0x40, 0xf2, 0x84, 0x48, 0xbe, 0xff, 0x9a, 0x1c, 0xc2, 0x9e, 0xf8, 0xb1, + 0x7f, 0xf8, 0xed, 0xd8, 0xf5, 0x8e, 0x68, 0xe4, 0x96, 0x2f, 0x41, 0xc0, + 0xb1, 0x58, 0x7d, 0x1c, 0x4b, 0xbf, 0xfc, 0x6b, 0x73, 0x5a, 0xcd, 0x80, + 0x79, 0x82, 0xc5, 0xf7, 0xbd, 0x3a, 0x58, 0xaf, 0x1f, 0x80, 0x69, 0xb5, + 0x04, 0x5a, 0x05, 0x09, 0x1b, 0xff, 0xff, 0x7f, 0x21, 0xfc, 0x19, 0x4e, + 0xe1, 0xc8, 0x59, 0xce, 0x31, 0xab, 0x17, 0xff, 0xbc, 0x0d, 0x0a, 0x1c, + 0xd4, 0xfb, 0x0e, 0xb1, 0x52, 0x8e, 0x4f, 0x14, 0x89, 0xbe, 0xff, 0xa1, + 0xf9, 0x23, 0x7a, 0xf7, 0xed, 0x62, 0xff, 0xb0, 0x6d, 0x0f, 0x71, 0x80, + 0xb1, 0x5d, 0x9f, 0xc8, 0x48, 0x17, 0xff, 0x8a, 0x42, 0x0f, 0xc5, 0x20, + 0xce, 0xfc, 0xb1, 0x7f, 0xb3, 0x5f, 0x29, 0xee, 0x0b, 0x17, 0x37, 0x78, + 0x88, 0x00, 0xd3, 0x2f, 0xed, 0x4f, 0xe5, 0xb7, 0x58, 0xa7, 0x4c, 0x04, + 0x50, 0xa4, 0x0c, 0xbe, 0xff, 0xff, 0xcc, 0x45, 0x3d, 0xc4, 0x53, 0xb4, + 0x1f, 0x9c, 0x92, 0x14, 0x7a, 0xc5, 0xff, 0x87, 0x87, 0x2c, 0xf7, 0xdf, + 0xad, 0x58, 0xad, 0xd1, 0x64, 0xed, 0xf7, 0xfe, 0xec, 0x2f, 0x7d, 0xe4, + 0xb3, 0x75, 0x8a, 0x93, 0xe4, 0x72, 0x3b, 0xff, 0x13, 0x1c, 0x0f, 0xa7, + 0xec, 0x0b, 0x17, 0xd8, 0xfa, 0xd9, 0x62, 0x86, 0x7c, 0x5d, 0x79, 0xfd, + 0xfd, 0x23, 0xd8, 0xf3, 0xa5, 0x8b, 0x81, 0x2b, 0x16, 0x73, 0x4f, 0x1b, + 0xc5, 0xf5, 0x06, 0x7a, 0xd8, 0xc8, 0x72, 0x12, 0x66, 0x92, 0x6f, 0x0a, + 0xb7, 0x20, 0xd4, 0x77, 0xc7, 0x95, 0x3f, 0xf9, 0x5c, 0x00, 0x36, 0x29, + 0x47, 0x3c, 0x8e, 0xa7, 0xd1, 0xa6, 0x0a, 0x10, 0x5d, 0x1b, 0x6f, 0xe1, + 0x83, 0xad, 0xe0, 0x23, 0x96, 0x2f, 0x75, 0x75, 0x4a, 0xc5, 0xff, 0xd8, + 0x17, 0xdb, 0xdc, 0x9f, 0x87, 0x12, 0xc5, 0xff, 0xff, 0x31, 0xa6, 0xcc, + 0x38, 0x61, 0xc4, 0xff, 0x73, 0x8b, 0x52, 0xb1, 0x7f, 0xf6, 0xbe, 0xcf, + 0xe1, 0x69, 0xba, 0x62, 0xc5, 0xff, 0xe3, 0x62, 0xfb, 0xeb, 0xd0, 0xc2, + 0x71, 0xac, 0x56, 0x22, 0x48, 0x48, 0xd4, 0x34, 0xd9, 0xb4, 0x91, 0xf8, + 0x7e, 0x5f, 0xf4, 0xc5, 0x09, 0x06, 0x81, 0x2b, 0x17, 0xe9, 0x07, 0xba, + 0x41, 0x62, 0xe7, 0x1a, 0xc5, 0x11, 0xe1, 0x70, 0xae, 0xfe, 0x29, 0xec, + 0xed, 0xe5, 0x8b, 0xfd, 0xbf, 0x85, 0xfd, 0x48, 0x4b, 0x17, 0xff, 0x67, + 0x7f, 0xc1, 0xff, 0x22, 0x83, 0x2c, 0x54, 0x9f, 0xe9, 0xcd, 0xef, 0xff, + 0xff, 0x3c, 0x97, 0xb7, 0xfb, 0xfb, 0x22, 0x29, 0x3e, 0x7d, 0xf5, 0xf6, + 0x58, 0xbf, 0xe7, 0xc0, 0xb7, 0xfc, 0xbc, 0x72, 0xc5, 0xff, 0xff, 0xfe, + 0x7e, 0xe1, 0xf9, 0x23, 0x70, 0xa6, 0x18, 0x76, 0xec, 0x7a, 0xc7, 0x34, + 0x72, 0x4b, 0x17, 0xff, 0xa4, 0xa1, 0x82, 0xd6, 0xc0, 0xcc, 0x1a, 0xc5, + 0xfe, 0xdd, 0xf5, 0xc8, 0xa5, 0x96, 0x2f, 0xf3, 0xf8, 0x13, 0xf0, 0xf8, + 0xb1, 0x7c, 0xd0, 0x92, 0x58, 0xbf, 0x0b, 0x9f, 0x68, 0x40, 0xf5, 0xbe, + 0x6b, 0x7f, 0x30, 0x30, 0x87, 0x05, 0x8b, 0xfe, 0x70, 0xb9, 0xfc, 0xe9, + 0x3d, 0xac, 0x5f, 0xd3, 0x0c, 0xd8, 0x50, 0x58, 0xb7, 0x8d, 0x3e, 0xc2, + 0x3d, 0xbf, 0xdf, 0xc7, 0x1c, 0x96, 0xeb, 0x17, 0x37, 0x66, 0x1e, 0xdf, + 0x8a, 0x28, 0xd5, 0x46, 0xfd, 0xa5, 0x6a, 0x11, 0x64, 0x7f, 0xc8, 0x7a, + 0x59, 0xc6, 0xba, 0xdd, 0xb9, 0xb4, 0x4f, 0x9a, 0x21, 0x3c, 0x2a, 0xfe, + 0x43, 0xd7, 0xbb, 0x70, 0xf7, 0xd2, 0xb1, 0x6f, 0xc3, 0x9e, 0x79, 0xd6, + 0x2f, 0xd9, 0xb1, 0xde, 0x25, 0x8a, 0x95, 0xfe, 0x2f, 0xcf, 0x7b, 0xb4, + 0x26, 0x48, 0xa2, 0xff, 0xf3, 0x10, 0x01, 0x39, 0xd1, 0xcb, 0xbf, 0x2c, + 0x5f, 0x79, 0xce, 0xcb, 0x17, 0xc1, 0x7c, 0x5b, 0xac, 0x58, 0xd5, 0x8b, + 0xfb, 0xfc, 0x9f, 0x48, 0xd6, 0x2a, 0x4f, 0x9f, 0x09, 0x9c, 0x4e, 0xa5, + 0x30, 0x0c, 0x4b, 0xf4, 0x22, 0x6f, 0xff, 0x85, 0xb7, 0xdc, 0x79, 0xcc, + 0x04, 0xf7, 0xc5, 0x8b, 0xff, 0x9b, 0xec, 0x38, 0x1f, 0xf2, 0x19, 0x2c, + 0x51, 0x22, 0x5c, 0x4a, 0x57, 0x8a, 0x4e, 0xb1, 0x7e, 0x7e, 0x7e, 0x74, + 0xb1, 0x51, 0x1e, 0x27, 0xc7, 0x2e, 0x7f, 0x2c, 0x5f, 0x9f, 0x63, 0xce, + 0xeb, 0x16, 0xf9, 0xcf, 0x07, 0xc2, 0xf7, 0xff, 0xfd, 0xad, 0x84, 0x03, + 0x3d, 0xcc, 0xf1, 0x99, 0xe9, 0xc2, 0x82, 0xc5, 0x4a, 0x24, 0x9c, 0xa2, + 0xff, 0xc7, 0xe7, 0xdb, 0x81, 0xc9, 0x6e, 0xb1, 0x7f, 0xfd, 0xbe, 0xa7, + 0xe5, 0x9e, 0xc8, 0xc0, 0x82, 0x09, 0x22, 0xff, 0xfa, 0x77, 0x6e, 0xf3, + 0x5a, 0xcd, 0xa7, 0x8e, 0xb1, 0x4e, 0x8e, 0x96, 0x41, 0x25, 0x7a, 0x82, + 0xb5, 0xed, 0xe1, 0x96, 0xcc, 0xdc, 0x87, 0xb7, 0xa3, 0x0a, 0xbd, 0x87, + 0x75, 0x8b, 0xf6, 0xe2, 0xdc, 0xa5, 0x62, 0xe9, 0xfa, 0xc5, 0xf8, 0x3d, + 0x69, 0x86, 0xb1, 0x5f, 0x3c, 0x10, 0x85, 0xef, 0xa2, 0xfc, 0xf9, 0x62, + 0x9c, 0xf1, 0xf8, 0x47, 0x43, 0x47, 0x7e, 0xe3, 0x91, 0x42, 0xca, 0xfe, + 0x8d, 0x51, 0xaf, 0xdd, 0x77, 0xd6, 0x47, 0xac, 0x5f, 0x7b, 0x71, 0x6c, + 0xb1, 0x7f, 0x70, 0xe2, 0x28, 0x71, 0x62, 0x88, 0xf5, 0x7c, 0x4d, 0x7f, + 0xf7, 0x70, 0x29, 0x86, 0xa7, 0xcd, 0xe5, 0x8b, 0xe1, 0x75, 0xf1, 0xce, + 0xb1, 0x7f, 0xb4, 0xfc, 0x0b, 0x08, 0x6b, 0x17, 0xf8, 0x39, 0xee, 0x3b, + 0x35, 0x2b, 0x15, 0x03, 0xec, 0x19, 0xa5, 0xd3, 0x05, 0x8a, 0x94, 0xcd, + 0xb0, 0x85, 0xd1, 0x5a, 0x12, 0xe4, 0x45, 0x7c, 0x7d, 0x37, 0x16, 0x2f, + 0xfb, 0x6c, 0xde, 0x4e, 0xfc, 0xdd, 0x62, 0xff, 0xda, 0xfb, 0x3f, 0x80, + 0xc3, 0x95, 0x8a, 0x93, 0xfa, 0x73, 0xcb, 0xe1, 0x47, 0xcc, 0x16, 0x2f, + 0xfc, 0xde, 0x9d, 0x73, 0xf2, 0x5e, 0x58, 0xbc, 0xed, 0xd1, 0x62, 0xff, + 0xff, 0x98, 0x5d, 0x7e, 0xa7, 0xec, 0xfe, 0x92, 0x70, 0x73, 0xee, 0xb1, + 0x6c, 0x82, 0x21, 0xfc, 0x3d, 0x5f, 0x4c, 0x4c, 0x89, 0xb9, 0x0c, 0x5a, + 0x82, 0xa5, 0x0c, 0x4b, 0xfc, 0x27, 0x45, 0x19, 0x9d, 0xcf, 0x2b, 0x17, + 0x37, 0xd6, 0x2a, 0x06, 0xb4, 0xe2, 0xd7, 0xf9, 0xf7, 0x71, 0xf5, 0x9f, + 0xd9, 0x62, 0xff, 0xf1, 0x4c, 0x35, 0xa1, 0x76, 0xfa, 0x6e, 0x2c, 0x5f, + 0xff, 0x73, 0x0d, 0x2c, 0xf7, 0x32, 0x04, 0xc1, 0x2c, 0x59, 0xfe, 0x89, + 0xbf, 0x25, 0xd3, 0xa6, 0x3f, 0xe2, 0x1e, 0x90, 0xd6, 0xbf, 0xd2, 0x5e, + 0xc2, 0x93, 0x56, 0x2f, 0x4f, 0xf8, 0xb1, 0x5d, 0x0f, 0x3f, 0xa8, 0xca, + 0xff, 0xa4, 0xfe, 0xfe, 0x14, 0x81, 0x62, 0xfc, 0x79, 0x84, 0x7e, 0xeb, + 0x17, 0xe2, 0x91, 0x7b, 0x8b, 0x14, 0x03, 0xd5, 0xf1, 0x6d, 0xff, 0x72, + 0x0f, 0xe0, 0x06, 0x50, 0x58, 0xad, 0x8f, 0x77, 0xb2, 0x2b, 0xf8, 0xb3, + 0xdf, 0x0c, 0x25, 0x8b, 0xf8, 0x3c, 0xe8, 0x42, 0xe2, 0xc5, 0x76, 0x7c, + 0x27, 0x30, 0xac, 0x45, 0x43, 0xc2, 0x16, 0xff, 0xa0, 0xff, 0xf7, 0x9a, + 0x1c, 0x58, 0xa9, 0x55, 0x3f, 0x90, 0x86, 0x72, 0x7d, 0x47, 0x24, 0xc4, + 0xd7, 0xff, 0xfb, 0x7f, 0xb9, 0xc9, 0xf6, 0x9f, 0x70, 0x3f, 0x7f, 0x06, + 0xb1, 0x7e, 0x6f, 0x98, 0x39, 0x58, 0xae, 0xd1, 0x1b, 0xe6, 0x4b, 0xfe, + 0xf7, 0x0b, 0x07, 0xfc, 0xf2, 0xc5, 0xff, 0x1a, 0x60, 0x79, 0xa8, 0xe6, + 0x35, 0x62, 0xdd, 0x7a, 0xc5, 0x49, 0xec, 0x32, 0x0d, 0xff, 0xf9, 0x8d, + 0xfc, 0xbc, 0x1c, 0xbd, 0x0c, 0xd6, 0x2c, 0x5f, 0xff, 0xf7, 0xf0, 0xf8, + 0x50, 0xfb, 0x9c, 0x4f, 0xa7, 0x8e, 0x14, 0xac, 0x51, 0x22, 0xf3, 0xca, + 0x95, 0x29, 0xd9, 0xe1, 0x21, 0x42, 0x44, 0x50, 0xdc, 0xbf, 0xfd, 0x85, + 0xf6, 0xe1, 0x61, 0xa6, 0xe4, 0x7a, 0xc5, 0xff, 0xf6, 0x7d, 0x87, 0x9a, + 0xd6, 0x77, 0x07, 0x3a, 0xc5, 0xff, 0x4f, 0x70, 0x16, 0xc3, 0x7e, 0x8b, + 0x15, 0xba, 0x36, 0xf4, 0x9b, 0xf5, 0x0b, 0xb3, 0x75, 0x8b, 0xff, 0x77, + 0xec, 0x21, 0x78, 0x13, 0x05, 0x8b, 0xa3, 0x8d, 0x58, 0xac, 0x3d, 0xc6, + 0x40, 0xbf, 0xe9, 0x2f, 0x66, 0x99, 0xfa, 0x2c, 0x50, 0x0f, 0x67, 0xa1, + 0x05, 0xff, 0xcf, 0xcc, 0x1e, 0xf3, 0xb4, 0xe7, 0x96, 0x2f, 0xf6, 0xc2, + 0xc2, 0x3c, 0xba, 0xc5, 0xf8, 0x5f, 0xf4, 0xc4, 0xb1, 0x7f, 0xff, 0x7d, + 0xb5, 0xf7, 0x2c, 0x1e, 0x9c, 0x5b, 0x06, 0x75, 0x8b, 0xff, 0xcf, 0x0c, + 0x20, 0x1d, 0x87, 0xf9, 0x25, 0x8b, 0xff, 0xb7, 0x7f, 0x39, 0xcc, 0xe3, + 0x0c, 0x6b, 0x17, 0xfd, 0x9a, 0xce, 0x19, 0xc0, 0x47, 0xac, 0x54, 0xa2, + 0x16, 0x08, 0xf5, 0xc4, 0x77, 0xfa, 0x19, 0xb7, 0xfb, 0x39, 0x17, 0xdc, + 0x2f, 0x2c, 0x5f, 0xef, 0xb1, 0xc7, 0x86, 0x1d, 0x62, 0xff, 0xb5, 0xa9, + 0xc6, 0xd7, 0x70, 0x58, 0xbf, 0x9e, 0x2d, 0x38, 0x5b, 0x2c, 0x5c, 0x09, + 0x58, 0xa9, 0x47, 0x68, 0xcd, 0x9c, 0xd7, 0xe7, 0x40, 0x31, 0xbf, 0xf7, + 0xdf, 0xa6, 0x47, 0x8c, 0x9b, 0x4b, 0x17, 0xc2, 0xdb, 0xb8, 0xf5, 0x8a, + 0xdc, 0xfb, 0x09, 0x0e, 0xfe, 0x71, 0x9e, 0x47, 0x2b, 0x17, 0xfa, 0x4f, + 0x31, 0x81, 0x04, 0x12, 0xc5, 0x0d, 0x5c, 0xf3, 0xc6, 0x99, 0xc8, 0xc5, + 0x7d, 0x0b, 0x48, 0xe2, 0x2e, 0xa2, 0xdb, 0xff, 0xd3, 0xb1, 0x66, 0x6d, + 0xe3, 0x64, 0xa0, 0xb1, 0x7f, 0xb6, 0xfb, 0x1d, 0xf8, 0xeb, 0x17, 0xf8, + 0x6c, 0xc1, 0x07, 0x9d, 0xac, 0x59, 0x88, 0xfa, 0xbc, 0x69, 0x52, 0xbd, + 0x59, 0xb1, 0x8e, 0x43, 0x37, 0x72, 0x47, 0x45, 0xf9, 0x9b, 0x4b, 0xc8, + 0x26, 0xf0, 0xa1, 0x6b, 0x7f, 0xc3, 0xfc, 0xe0, 0xcb, 0x3a, 0x2c, 0x5f, + 0x98, 0xfe, 0xcd, 0xd6, 0x2f, 0xfd, 0x1f, 0xfc, 0xc1, 0x96, 0x6d, 0x2b, + 0x15, 0xf3, 0xea, 0x11, 0x4d, 0xff, 0xfb, 0xee, 0x59, 0xb1, 0xc5, 0xfc, + 0xfb, 0x76, 0x05, 0x8b, 0xff, 0x0b, 0xdc, 0x0f, 0x6e, 0x00, 0x12, 0xb1, + 0x7f, 0x9f, 0x8e, 0x2e, 0xbc, 0x72, 0xb1, 0x43, 0x3f, 0xbf, 0x21, 0xdc, + 0x28, 0x96, 0x2f, 0x04, 0x10, 0x49, 0x17, 0xdb, 0x1d, 0xf8, 0x91, 0x18, + 0x68, 0x6e, 0x91, 0xac, 0x54, 0xa2, 0x21, 0x8e, 0x88, 0xde, 0xff, 0xe1, + 0x99, 0xe2, 0x98, 0x66, 0xc2, 0x82, 0xc5, 0xf7, 0xdb, 0xf2, 0xb1, 0x58, + 0x7d, 0x21, 0xa3, 0xdf, 0xf3, 0xf2, 0x61, 0x17, 0xdc, 0x0b, 0x17, 0xfb, + 0x3b, 0xd6, 0x47, 0x38, 0x16, 0x2a, 0x0a, 0xda, 0xc7, 0x0a, 0x43, 0x48, + 0x9e, 0x1a, 0x5a, 0x85, 0x51, 0xe1, 0x2d, 0xf2, 0x22, 0x3a, 0xbf, 0xff, + 0x70, 0xb3, 0xfe, 0x29, 0x04, 0x26, 0x78, 0xeb, 0x16, 0xfa, 0xc5, 0x76, + 0x7c, 0xa1, 0xa9, 0xda, 0x0b, 0x17, 0xf8, 0xa1, 0xfc, 0xd6, 0x76, 0xb1, + 0x52, 0x78, 0xc2, 0x12, 0xbf, 0xdc, 0xe4, 0xef, 0x9d, 0xf9, 0x62, 0xfb, + 0x9e, 0xe7, 0x58, 0xb1, 0x5d, 0x9e, 0xff, 0x8d, 0xaf, 0xd3, 0x84, 0xc7, + 0x58, 0xbf, 0xf3, 0x43, 0xef, 0xd8, 0x34, 0xc3, 0x58, 0xb8, 0x71, 0xeb, + 0x17, 0xbd, 0xac, 0x58, 0xb8, 0x61, 0x2c, 0x5f, 0xff, 0xb3, 0xa4, 0x97, + 0x8f, 0x38, 0x43, 0xce, 0xfc, 0xb1, 0x79, 0x8b, 0x73, 0x11, 0x4f, 0x23, + 0x7b, 0x0e, 0xe8, 0x66, 0x9d, 0x53, 0x49, 0xda, 0x9a, 0x10, 0x00, 0x23, + 0x22, 0x61, 0x43, 0x9e, 0xfb, 0x69, 0xd6, 0xcb, 0x17, 0x3f, 0x6b, 0x15, + 0xa3, 0x7a, 0x19, 0x2d, 0xf9, 0xcb, 0xc1, 0x9d, 0x62, 0xa4, 0xf2, 0xc0, + 0x45, 0x7b, 0xcf, 0x12, 0xc5, 0xf6, 0x66, 0xb8, 0xb1, 0x6e, 0x61, 0xe0, + 0x00, 0x7a, 0xa0, 0x88, 0x8f, 0x30, 0xdf, 0xfc, 0x71, 0x7c, 0xd6, 0xce, + 0x7f, 0x38, 0xb1, 0x7a, 0x42, 0x75, 0x8b, 0xff, 0xf7, 0xdf, 0x7f, 0xe7, + 0xbe, 0xec, 0x0f, 0xb8, 0x16, 0x2f, 0xff, 0x1a, 0xc4, 0x26, 0x0f, 0x9e, + 0x9e, 0xc2, 0x58, 0xbf, 0xfd, 0xfc, 0xe7, 0x30, 0xe3, 0x7e, 0x92, 0x35, + 0x8b, 0xfa, 0x4f, 0x17, 0xdf, 0x4b, 0x17, 0xee, 0x61, 0xdb, 0xb5, 0x8b, + 0xf1, 0xa6, 0x66, 0x69, 0x62, 0xb0, 0xf4, 0xc4, 0x53, 0x7e, 0xe3, 0xe1, + 0x01, 0x62, 0xb4, 0x79, 0x1c, 0x21, 0xbd, 0xac, 0x8f, 0x58, 0xbf, 0xfc, + 0x2e, 0x7d, 0xf2, 0x27, 0xdb, 0x3b, 0xf2, 0xc5, 0xff, 0x04, 0x1e, 0xdc, + 0xc3, 0xcc, 0x7a, 0xc5, 0xfa, 0x1e, 0x2c, 0x82, 0xc5, 0xfe, 0x0f, 0xdc, + 0xc3, 0x5f, 0x4b, 0x17, 0x89, 0xbb, 0x58, 0xbb, 0xbc, 0xd1, 0xe9, 0xf0, + 0xda, 0xb1, 0x15, 0x22, 0x7b, 0xbf, 0xfb, 0x7c, 0x21, 0xe9, 0xb7, 0xce, + 0xfc, 0xb1, 0x7f, 0xe6, 0x3e, 0x43, 0xf8, 0xf0, 0xe2, 0xc5, 0x3a, 0x21, + 0x7e, 0x8f, 0x52, 0x9d, 0x97, 0xe1, 0xd3, 0xc8, 0x53, 0xdf, 0x30, 0x3d, + 0xd7, 0xac, 0x56, 0xcb, 0x98, 0x03, 0x46, 0xc1, 0xd3, 0x55, 0xb7, 0x4e, + 0x89, 0x33, 0x50, 0xca, 0x39, 0x11, 0x10, 0x7a, 0x3f, 0xf0, 0x8e, 0xaf, + 0xd9, 0xdf, 0xbf, 0x2b, 0x17, 0xfe, 0x1e, 0x41, 0xff, 0x3c, 0xf3, 0xac, + 0x5f, 0x9f, 0xa7, 0xa7, 0x16, 0x2f, 0xf3, 0xf4, 0xee, 0x4a, 0x78, 0xb1, + 0x7f, 0x49, 0x7d, 0x98, 0xeb, 0x17, 0xff, 0x98, 0x07, 0x7d, 0x4f, 0x9f, + 0x77, 0x1a, 0xc5, 0x41, 0x15, 0x60, 0x35, 0xe1, 0x65, 0x7d, 0x36, 0xb6, + 0x29, 0xe1, 0xf7, 0xa1, 0xa9, 0x52, 0xbe, 0x73, 0x93, 0x9c, 0x6d, 0x28, + 0x52, 0xfe, 0x9f, 0x70, 0x32, 0x82, 0xc5, 0xf4, 0xef, 0x84, 0xb1, 0x7e, + 0xe7, 0x27, 0x50, 0xd1, 0xe8, 0xfc, 0xbe, 0xed, 0xb6, 0x58, 0xa7, 0x3d, + 0x90, 0x8f, 0xef, 0xe0, 0xf3, 0x51, 0xcc, 0x6a, 0xc5, 0xfb, 0x35, 0x1c, + 0xc6, 0xac, 0x5d, 0x9c, 0x30, 0xf7, 0xc3, 0x33, 0xbf, 0xfd, 0x11, 0x4f, + 0xb9, 0xee, 0xf7, 0x72, 0xd9, 0x62, 0xff, 0x8b, 0xda, 0x66, 0xee, 0x1c, + 0x58, 0xbf, 0xe3, 0x70, 0x83, 0x9d, 0x60, 0xd6, 0x2b, 0x0f, 0xd0, 0x47, + 0x57, 0xfc, 0xc6, 0x99, 0xf9, 0x04, 0xc7, 0xac, 0x5f, 0xa1, 0x9d, 0x1f, + 0x4b, 0x17, 0xf8, 0x20, 0xf2, 0x2e, 0x1f, 0x8b, 0x15, 0x27, 0xc4, 0xc5, + 0x55, 0x89, 0xe9, 0x39, 0x7f, 0xe1, 0x84, 0xc4, 0x25, 0x0a, 0x0b, 0xff, + 0xff, 0x00, 0x32, 0xcd, 0x6b, 0x02, 0xc8, 0xfc, 0x29, 0x01, 0xda, 0x0b, + 0x17, 0xff, 0xfa, 0x4e, 0x18, 0xff, 0x3d, 0xeb, 0x59, 0xdc, 0x3c, 0xe7, + 0x58, 0xbf, 0xff, 0xfe, 0xdf, 0x09, 0xfb, 0xe1, 0x67, 0xb9, 0x90, 0x26, + 0x0b, 0xbf, 0x09, 0xb8, 0xb1, 0x7d, 0xef, 0x49, 0xd6, 0x2f, 0x16, 0x73, + 0xe9, 0x83, 0x81, 0x94, 0x27, 0xfb, 0x39, 0x27, 0x71, 0xd2, 0x37, 0x6b, + 0xf6, 0xc0, 0x87, 0x7e, 0x58, 0xbf, 0xff, 0xbd, 0xc1, 0x0f, 0xef, 0x91, + 0x33, 0xc7, 0xbf, 0x70, 0x58, 0xbf, 0xff, 0x8b, 0x00, 0xc4, 0x0d, 0x6b, + 0x02, 0xc0, 0x37, 0x6b, 0x14, 0x48, 0xbb, 0xf3, 0x05, 0xf7, 0xb6, 0xc0, + 0x96, 0x2f, 0xfe, 0x04, 0x86, 0x39, 0xd4, 0x5f, 0x70, 0x2c, 0x53, 0x9f, + 0x60, 0x09, 0x6f, 0xfe, 0x72, 0xd8, 0xe2, 0xef, 0xc4, 0xdf, 0x58, 0xbf, + 0x10, 0xbd, 0x3c, 0x58, 0xba, 0x77, 0x93, 0xee, 0xfa, 0x35, 0xfa, 0x28, + 0x3e, 0xb8, 0xb1, 0x7f, 0xd3, 0xbc, 0x9f, 0x06, 0xc7, 0x58, 0xad, 0x1f, + 0x1f, 0x51, 0x55, 0xff, 0xda, 0xd4, 0x9f, 0x81, 0x91, 0x4f, 0x6b, 0x17, + 0xd0, 0x08, 0x5d, 0xac, 0x5e, 0x29, 0xdd, 0x62, 0xb6, 0x3c, 0x30, 0xc9, + 0xab, 0x64, 0x56, 0xc7, 0xc2, 0x26, 0x9d, 0x1f, 0xcd, 0x0d, 0x2b, 0xff, + 0xa1, 0xcc, 0x91, 0xb9, 0x36, 0x8d, 0x58, 0xbf, 0xff, 0xa1, 0x84, 0x66, + 0x40, 0x53, 0xc3, 0x3f, 0x80, 0x65, 0x8b, 0xf6, 0xa7, 0x06, 0xeb, 0x17, + 0xf7, 0xdc, 0x63, 0xc0, 0x96, 0x2f, 0xda, 0xce, 0x9f, 0xc3, 0x0f, 0x5b, + 0x72, 0x7a, 0x94, 0xce, 0x1d, 0x11, 0xa1, 0x65, 0x7f, 0xff, 0xfc, 0x0e, + 0x64, 0x3f, 0x2f, 0xa0, 0x02, 0x75, 0x82, 0x34, 0x6f, 0xa6, 0xe2, 0xc5, + 0xff, 0xf7, 0xf2, 0x06, 0x6f, 0xf7, 0xf7, 0x7b, 0xbe, 0x96, 0x2a, 0x51, + 0xa7, 0xe7, 0xeb, 0xfb, 0x6d, 0xde, 0x4a, 0x0b, 0x17, 0xa2, 0xcf, 0x2c, + 0x5f, 0xe7, 0xf7, 0xe4, 0xec, 0x4b, 0x17, 0xfe, 0x7e, 0xf8, 0x3f, 0xe3, + 0x91, 0xab, 0x17, 0x75, 0xe6, 0x40, 0xfc, 0x80, 0x65, 0x5f, 0x46, 0x20, + 0xa1, 0x21, 0x52, 0x98, 0xdb, 0x43, 0xce, 0xff, 0xfe, 0xeb, 0xdf, 0xdf, + 0x9d, 0x69, 0xfb, 0xfe, 0x61, 0x6e, 0xb1, 0x50, 0x5f, 0xeb, 0xc3, 0x07, + 0x87, 0x3e, 0xa1, 0x1c, 0x78, 0x47, 0xfe, 0x38, 0xe0, 0x46, 0xbc, 0x51, + 0x83, 0x7a, 0x33, 0xd1, 0x13, 0xdf, 0xe9, 0xce, 0x6b, 0x3b, 0x82, 0xc5, + 0xff, 0xef, 0x49, 0xf7, 0x61, 0xe0, 0x41, 0xea, 0x0b, 0x17, 0xfe, 0xfc, + 0x91, 0xbb, 0xbc, 0x94, 0x16, 0x2f, 0x6d, 0xd0, 0x6b, 0x15, 0x03, 0xe0, + 0x23, 0xfb, 0xc1, 0x30, 0x4b, 0x17, 0xfe, 0x6d, 0x18, 0x4d, 0xe8, 0x30, + 0xd6, 0x2f, 0xff, 0xe7, 0x21, 0xeb, 0x37, 0xfc, 0xff, 0x35, 0xa9, 0x35, + 0x62, 0xff, 0x98, 0x2f, 0x67, 0xf5, 0x1e, 0x35, 0x8a, 0x82, 0x36, 0x7e, + 0x7e, 0x4b, 0x97, 0xfd, 0x83, 0xf7, 0x33, 0xd3, 0xa5, 0x8b, 0xff, 0x6f, + 0xf9, 0x2c, 0xe8, 0x59, 0xc5, 0x8b, 0xf3, 0x7a, 0x39, 0xf7, 0x58, 0xa9, + 0x45, 0x2e, 0x1c, 0xb2, 0x05, 0xff, 0xd9, 0xf6, 0xf7, 0x3b, 0x80, 0x9b, + 0xcb, 0x17, 0xff, 0xf3, 0x14, 0xe7, 0xa2, 0xfc, 0xec, 0x59, 0xd1, 0xc9, + 0x62, 0x8d, 0x45, 0x0b, 0x23, 0x5e, 0x26, 0x8f, 0x58, 0xbe, 0xd3, 0xe7, + 0xd6, 0x2f, 0xec, 0x0f, 0x34, 0xe4, 0xb1, 0x43, 0x3e, 0xed, 0x0f, 0xf4, + 0x22, 0xbf, 0xff, 0xff, 0xb9, 0xc9, 0xd6, 0xfb, 0xfd, 0xe2, 0x66, 0xd6, + 0x77, 0xee, 0xf7, 0x13, 0x17, 0x7e, 0x58, 0xbf, 0xbc, 0xf1, 0x7b, 0x23, + 0xd6, 0x2b, 0x48, 0xc2, 0xf4, 0x24, 0x2f, 0xf8, 0xec, 0x30, 0xfa, 0xa4, + 0xa0, 0xb1, 0x7f, 0xdb, 0x8a, 0x3f, 0x8e, 0x16, 0x69, 0x62, 0xa4, 0xff, + 0x37, 0x3d, 0xbf, 0xff, 0xdc, 0x93, 0x73, 0x8c, 0x5e, 0xc2, 0x9d, 0xca, + 0x4e, 0xb1, 0x7f, 0xfe, 0x14, 0x87, 0xe2, 0xc0, 0x31, 0x03, 0x77, 0xc5, + 0x8b, 0xff, 0xbe, 0xf1, 0x13, 0x05, 0xec, 0xf9, 0xd6, 0x2f, 0x7e, 0x4e, + 0xb1, 0x7e, 0x7c, 0xe3, 0x12, 0xc5, 0xed, 0x37, 0x37, 0x44, 0x4f, 0xd1, + 0xbc, 0x3b, 0x50, 0x4c, 0x80, 0x50, 0xde, 0xae, 0xd3, 0xa8, 0xf4, 0x6f, + 0xf7, 0xff, 0xb9, 0x9a, 0x33, 0x7f, 0xbf, 0x47, 0x21, 0xac, 0x5f, 0xf7, + 0x7b, 0xb9, 0x6d, 0x9d, 0xf9, 0x62, 0x9d, 0x16, 0xdc, 0x2b, 0xf2, 0x75, + 0xff, 0xf9, 0x8b, 0x61, 0xfe, 0x75, 0xac, 0xe7, 0x04, 0x4b, 0x15, 0x2b, + 0x93, 0x99, 0x0f, 0x37, 0x85, 0x23, 0x4a, 0x80, 0x08, 0xbe, 0xff, 0xce, + 0x31, 0x7b, 0x92, 0x4f, 0x8b, 0x17, 0xfc, 0x79, 0xd7, 0x4c, 0xd4, 0xc4, + 0xb1, 0x7f, 0xfe, 0xd3, 0x8b, 0x6f, 0x7e, 0x5f, 0x5a, 0x72, 0xd9, 0x62, + 0xfc, 0x53, 0x0e, 0xb5, 0x96, 0x2f, 0xfc, 0x6b, 0x7b, 0x36, 0xcc, 0x23, + 0x56, 0x2f, 0xe7, 0xd1, 0x4f, 0x70, 0x58, 0xbf, 0xb3, 0x45, 0x3d, 0xc1, + 0x62, 0xe6, 0x2c, 0x3d, 0xce, 0x17, 0x5f, 0xff, 0xa4, 0xf1, 0x33, 0x6d, + 0xdf, 0x1f, 0xce, 0x5b, 0x2c, 0x5f, 0xfd, 0x39, 0xa8, 0x37, 0xbe, 0xc4, + 0x05, 0x8b, 0xff, 0xf7, 0xc5, 0xdf, 0xb8, 0xdd, 0xef, 0x1d, 0x9c, 0xe6, + 0x2c, 0x5f, 0xf3, 0x1d, 0xbd, 0xf6, 0x20, 0x2c, 0x5f, 0xfe, 0x6d, 0x1a, + 0x1c, 0x85, 0x9c, 0xe3, 0x1a, 0xb1, 0x43, 0x55, 0x91, 0x8a, 0xe6, 0x96, + 0x6f, 0x09, 0xc8, 0x8a, 0xfe, 0xb1, 0xe4, 0x3e, 0x8b, 0xa1, 0x1c, 0x5f, + 0xfc, 0x45, 0x21, 0x7b, 0x36, 0x8d, 0x51, 0xab, 0xac, 0x58, 0xbf, 0xff, + 0xfa, 0x0e, 0x3c, 0x20, 0x18, 0x07, 0xef, 0x85, 0x8e, 0x7c, 0x20, 0x2c, + 0x53, 0xa3, 0x23, 0xca, 0xf5, 0x89, 0xba, 0x34, 0x6a, 0x57, 0xfe, 0xd6, + 0xe7, 0x9e, 0xf9, 0x9d, 0x31, 0x62, 0xe6, 0x8f, 0x58, 0xbc, 0xda, 0x35, + 0x62, 0xff, 0xfe, 0x88, 0xa4, 0x79, 0xdf, 0xb2, 0x12, 0x5b, 0x1f, 0x16, + 0x2e, 0xc3, 0xac, 0x5f, 0xf8, 0xb0, 0x6e, 0xc5, 0xb1, 0xf1, 0x62, 0xf0, + 0x23, 0xb0, 0x67, 0xa8, 0x18, 0xbd, 0x69, 0x30, 0x5f, 0x8f, 0x14, 0x2c, + 0x2f, 0xbc, 0xda, 0xe2, 0xc5, 0xf8, 0xc8, 0xec, 0xd4, 0xac, 0x56, 0xc7, + 0x9e, 0x44, 0x75, 0x2a, 0x82, 0x36, 0x43, 0xc8, 0xc7, 0xda, 0x10, 0x97, + 0xe1, 0xe4, 0x53, 0xf5, 0x8b, 0xff, 0xff, 0xf7, 0xbe, 0xd0, 0xcd, 0x41, + 0xfb, 0xce, 0x98, 0x37, 0x0b, 0xec, 0xfe, 0x9f, 0xac, 0x51, 0xa8, 0xae, + 0x22, 0x9b, 0xff, 0xfe, 0x1b, 0x10, 0x0b, 0x36, 0x3b, 0xfb, 0xf9, 0xa2, + 0x9e, 0xd6, 0x2a, 0x51, 0x12, 0x22, 0x3b, 0xfe, 0x83, 0xfb, 0x9b, 0xcf, + 0xb8, 0xb1, 0x7f, 0x00, 0xcc, 0x1b, 0x41, 0x62, 0xa2, 0x3e, 0xa6, 0x3b, + 0xbf, 0xff, 0x3e, 0xfe, 0x26, 0x06, 0x6f, 0x3e, 0xfb, 0xf4, 0x58, 0xbd, + 0xbb, 0xe9, 0x62, 0xc6, 0xac, 0x5f, 0xfd, 0x9b, 0xfe, 0x7f, 0x9a, 0xd4, + 0x9a, 0xb1, 0x7e, 0xcd, 0x6a, 0x4d, 0x58, 0xbe, 0x27, 0x07, 0x25, 0x10, + 0x5a, 0x13, 0xfa, 0x35, 0xff, 0x7d, 0x80, 0x76, 0x83, 0x71, 0x62, 0xff, + 0x34, 0x21, 0x30, 0xdf, 0x8b, 0x15, 0x87, 0xdc, 0x23, 0x9b, 0xfe, 0xc8, + 0x7d, 0xa1, 0xe7, 0xd9, 0x62, 0xf0, 0x50, 0x95, 0x8b, 0xfd, 0x1d, 0x9f, + 0x9c, 0xd4, 0x16, 0x2d, 0x90, 0x3d, 0x40, 0x0f, 0x5f, 0xff, 0xfc, 0xfe, + 0xfe, 0x0e, 0x0f, 0xec, 0x3f, 0x1a, 0x11, 0xd9, 0xce, 0x62, 0xc5, 0x41, + 0x5d, 0x1e, 0x42, 0x30, 0xd2, 0x2e, 0xd6, 0x1e, 0x14, 0x1f, 0x85, 0x98, + 0x08, 0x4a, 0x11, 0xdc, 0x27, 0xbf, 0xfc, 0xdb, 0x7d, 0xe4, 0xb2, 0x27, + 0xd3, 0xac, 0x5f, 0xff, 0xb3, 0xa1, 0x0b, 0x9a, 0x98, 0x3f, 0x9c, 0xa0, + 0xb1, 0x50, 0x74, 0x6a, 0xe3, 0x94, 0xa7, 0x94, 0x9f, 0x43, 0x61, 0x65, + 0xd9, 0xa3, 0xc2, 0xba, 0x3c, 0x86, 0x28, 0x7c, 0x6a, 0x1a, 0x87, 0x86, + 0x77, 0xe7, 0x4b, 0x59, 0x6c, 0x07, 0xa5, 0x38, 0xf1, 0xc9, 0x46, 0x1e, + 0x9d, 0x22, 0x0a, 0x12, 0x61, 0xa4, 0xdf, 0xf7, 0xdb, 0x8e, 0x45, 0x3d, + 0xac, 0x5f, 0xe7, 0xfc, 0xf7, 0x0c, 0x3a, 0xc5, 0xf6, 0x13, 0x8f, 0x87, + 0xd9, 0x1c, 0x71, 0x7c, 0x6f, 0x5e, 0xfd, 0xac, 0x5f, 0xfb, 0xdc, 0x0f, + 0xce, 0x53, 0xdc, 0x16, 0x2b, 0x47, 0xd6, 0x45, 0x57, 0xe2, 0xcf, 0xb7, + 0x96, 0x2f, 0xfd, 0x09, 0x2d, 0x83, 0xd1, 0x0a, 0x0b, 0x17, 0xb9, 0x9a, + 0x58, 0xbf, 0x89, 0x86, 0x0e, 0xc0, 0xb1, 0x58, 0x8d, 0x58, 0xf2, 0x18, + 0x89, 0xfe, 0x83, 0xc1, 0xdb, 0xf8, 0xa0, 0x59, 0x80, 0x58, 0xbf, 0xfb, + 0x40, 0x16, 0x6a, 0x0f, 0xde, 0x74, 0x58, 0xbf, 0xf1, 0x43, 0x4d, 0xdf, + 0xe7, 0x38, 0xb1, 0x52, 0x8b, 0x37, 0x2c, 0x64, 0x8b, 0xff, 0xb7, 0x7d, + 0x7f, 0x22, 0xfb, 0xeb, 0x65, 0x8b, 0xec, 0x8e, 0x16, 0x96, 0x2f, 0xff, + 0x16, 0x04, 0xc0, 0x33, 0xdf, 0x97, 0xdd, 0x62, 0xfb, 0xdb, 0x60, 0xd6, + 0x2f, 0xf9, 0xcd, 0x0f, 0x40, 0x3b, 0xf1, 0x62, 0x8c, 0x46, 0x91, 0xa4, + 0xd1, 0x26, 0x47, 0x12, 0x5e, 0xe9, 0xfc, 0x58, 0xbf, 0xf8, 0xb0, 0x19, + 0xd1, 0xcd, 0x03, 0x79, 0x62, 0xff, 0xcf, 0xdf, 0x00, 0xc4, 0x38, 0x84, + 0xb1, 0x78, 0x20, 0x82, 0x58, 0xbf, 0xf8, 0xa4, 0x18, 0x3e, 0x61, 0xe7, + 0x74, 0x88, 0xc3, 0x43, 0x40, 0x45, 0xcf, 0x98, 0xaf, 0xf7, 0xdf, 0x07, + 0x25, 0xe5, 0x8a, 0x82, 0x6a, 0x87, 0x87, 0xff, 0x42, 0x3b, 0xff, 0x30, + 0x37, 0xfb, 0xc4, 0x52, 0x05, 0x8a, 0x94, 0xfa, 0xf2, 0x37, 0x37, 0x38, + 0xbf, 0xb5, 0x9d, 0x5f, 0x61, 0xac, 0x5f, 0xff, 0xd9, 0x0f, 0xb4, 0x30, + 0x85, 0xe7, 0xf9, 0x08, 0xd5, 0x8b, 0xfe, 0xec, 0xc2, 0xce, 0x9a, 0x7e, + 0x2c, 0x5f, 0xdc, 0x2c, 0xd8, 0x38, 0x2c, 0x56, 0x1f, 0x69, 0xcf, 0x6f, + 0xed, 0xfe, 0xf2, 0x5b, 0xac, 0x54, 0x9e, 0x86, 0x10, 0xdf, 0xed, 0x4f, + 0x9f, 0x77, 0x1a, 0xc5, 0xfa, 0x11, 0x66, 0x6e, 0xb1, 0x7f, 0x85, 0xb4, + 0xb8, 0xf0, 0xeb, 0x16, 0xd2, 0xc5, 0x75, 0x88, 0xa4, 0x93, 0x42, 0x2a, + 0x0c, 0xd2, 0xfc, 0x16, 0x1d, 0xbb, 0x58, 0xbe, 0x06, 0x34, 0x7a, 0xc5, + 0x49, 0xe7, 0xb9, 0x55, 0x41, 0x91, 0xc1, 0x91, 0xbd, 0x1b, 0x18, 0x07, + 0x65, 0xaf, 0x18, 0xd7, 0xe5, 0x17, 0x31, 0xa0, 0x0c, 0x4a, 0x31, 0x8e, + 0x43, 0x13, 0xd0, 0x90, 0xbd, 0xc3, 0x0d, 0x58, 0xbd, 0xb4, 0xfd, 0x62, + 0x8c, 0x37, 0xc4, 0x41, 0x7e, 0xff, 0xb8, 0x28, 0xf5, 0x8b, 0x82, 0xeb, + 0x16, 0x2a, 0x4f, 0x2f, 0xb2, 0xdb, 0xfe, 0x26, 0x37, 0xdc, 0x27, 0x35, + 0x62, 0xf4, 0x4c, 0x4b, 0x17, 0x9c, 0xfc, 0x58, 0xb7, 0xb0, 0xdd, 0x78, + 0x76, 0xe6, 0x75, 0x8b, 0xf7, 0x7e, 0xe9, 0x84, 0xb1, 0x7e, 0x6f, 0x41, + 0x86, 0xb1, 0x63, 0x70, 0xf4, 0xc8, 0xae, 0xdf, 0x58, 0xbb, 0x3e, 0xb1, + 0x50, 0x35, 0x3e, 0x12, 0xac, 0x4d, 0xd1, 0xdd, 0x3e, 0x4c, 0xcd, 0x3e, + 0x50, 0xb3, 0xac, 0x5f, 0xf0, 0x1b, 0x36, 0x3c, 0xe7, 0x96, 0x2f, 0x47, + 0x31, 0xab, 0x17, 0xff, 0xf4, 0x94, 0x9a, 0x52, 0x68, 0x71, 0xd3, 0xa9, + 0xde, 0x56, 0x2b, 0x48, 0xb9, 0x39, 0xc8, 0x44, 0x37, 0xfd, 0x3b, 0x39, + 0xfd, 0x98, 0x75, 0x8b, 0xff, 0xe9, 0x39, 0x4f, 0x60, 0x1e, 0x1f, 0x6c, + 0x09, 0x62, 0xfe, 0xfc, 0x99, 0xbb, 0xec, 0xb1, 0x7f, 0xe6, 0x3e, 0x68, + 0xd3, 0x44, 0x5e, 0x58, 0xbf, 0xd3, 0xee, 0x71, 0xca, 0x25, 0x8a, 0xf9, + 0xfa, 0x92, 0x0d, 0x8d, 0x58, 0xbe, 0x26, 0xee, 0x0b, 0x17, 0xfc, 0xc5, + 0x0f, 0x8a, 0x7b, 0xe2, 0xc5, 0x39, 0xf8, 0x44, 0x26, 0x11, 0x1d, 0xff, + 0xfc, 0xc7, 0xd6, 0x74, 0x92, 0xf6, 0x7d, 0xf5, 0xf6, 0x58, 0xbf, 0xe6, + 0xf7, 0x3d, 0xe6, 0x87, 0x16, 0x2a, 0x24, 0xd5, 0xb5, 0x09, 0x1f, 0x98, + 0x12, 0xdd, 0xff, 0xcd, 0xa6, 0x86, 0x71, 0xbd, 0x91, 0x2c, 0x5f, 0xf7, + 0xb5, 0x39, 0xd9, 0x8d, 0xc5, 0x8b, 0xfb, 0xed, 0xbc, 0x90, 0xd6, 0x2f, + 0xcd, 0xa2, 0x98, 0x2c, 0x5f, 0xb0, 0x7f, 0x78, 0x96, 0x28, 0xd3, 0xfe, + 0xd1, 0x71, 0x13, 0xdf, 0xec, 0x1c, 0xc2, 0x61, 0xe5, 0x8b, 0xff, 0xfe, + 0x01, 0xda, 0x19, 0xb8, 0xc4, 0x6f, 0x7c, 0x60, 0x67, 0x7e, 0x58, 0xbf, + 0xf6, 0x44, 0x16, 0x77, 0xef, 0x49, 0xd6, 0x2a, 0x51, 0x5d, 0xf6, 0xcb, + 0xf8, 0xb6, 0x7d, 0x74, 0x82, 0xc5, 0xff, 0xf7, 0xc5, 0x3a, 0xce, 0x8f, + 0xcc, 0xec, 0x72, 0xb1, 0x7f, 0xff, 0xbd, 0xe9, 0x81, 0x37, 0xe4, 0xff, + 0xc1, 0xb7, 0x64, 0xb1, 0x7e, 0xce, 0xf1, 0xa3, 0xd6, 0x2f, 0xff, 0x7b, + 0xf9, 0xd3, 0xee, 0x67, 0x38, 0xe7, 0x58, 0xa9, 0x4d, 0x70, 0x66, 0x38, + 0xa5, 0xf6, 0x06, 0x2b, 0xbf, 0xe8, 0x3e, 0xbb, 0x92, 0x9e, 0x2c, 0x5e, + 0x09, 0xb6, 0x58, 0xbf, 0x9e, 0x28, 0x38, 0x31, 0x62, 0xff, 0xa7, 0x36, + 0xd4, 0xf9, 0xbc, 0xb1, 0x4e, 0x8b, 0xff, 0x9c, 0xf8, 0x7c, 0x45, 0xd5, + 0xd7, 0x6c, 0x89, 0x39, 0x86, 0x56, 0xc6, 0x30, 0x39, 0x1a, 0x96, 0x47, + 0xf9, 0xba, 0x1f, 0x68, 0x9a, 0x85, 0xc9, 0xcb, 0xff, 0x0e, 0x12, 0x8d, + 0xfb, 0xd1, 0x83, 0xdf, 0xd0, 0x98, 0xb1, 0xc0, 0xb1, 0x68, 0xce, 0xb2, + 0x11, 0xed, 0xf1, 0xa0, 0xbc, 0x6c, 0xdd, 0xd7, 0x52, 0xd8, 0xd6, 0x69, + 0x33, 0xa1, 0x5b, 0x4a, 0xb0, 0x84, 0xa8, 0x11, 0xce, 0xce, 0x65, 0x61, + 0xec, 0x6c, 0x60, 0xfb, 0xd2, 0x06, 0xbb, 0x9c, 0xa8, 0x78, 0xd2, 0xe3, + 0xcd, 0xe2, 0x9c, 0x26, 0xd4, 0xe1, 0xa1, 0xe5, 0x49, 0xfe, 0x7f, 0x31, + 0xa5, 0xfd, 0x82, 0x5a, 0xa1, 0x52, 0x2a, 0x79, 0x69, 0x10, 0x3d, 0x4a, + 0x96, 0x14, 0x60, 0x21, 0x36, 0x47, 0x47, 0x2c, 0x1d, 0x23, 0x6f, 0xaa, + 0x1b, 0xd7, 0xfd, 0xf7, 0x30, 0xb3, 0xcd, 0xd1, 0x62, 0xfc, 0x1f, 0xdb, + 0xf2, 0xb1, 0x7e, 0x87, 0x72, 0x43, 0x58, 0xa8, 0x2a, 0xf1, 0x36, 0x53, + 0x21, 0xce, 0xc8, 0xa6, 0xff, 0xf6, 0xb0, 0x21, 0xff, 0x22, 0x2c, 0xd4, + 0x16, 0x2f, 0x6b, 0x23, 0xd6, 0x2f, 0xef, 0x0a, 0x11, 0x4f, 0x52, 0xc5, + 0xff, 0xa4, 0x20, 0xf6, 0xe6, 0x1e, 0x63, 0xd6, 0x2b, 0x48, 0xe4, 0x3a, + 0x67, 0xc8, 0x3c, 0x67, 0x7f, 0xfc, 0xc7, 0x9d, 0x6f, 0xa1, 0x1b, 0xa1, + 0x37, 0x16, 0x2b, 0x11, 0x20, 0x23, 0xdb, 0x0d, 0x62, 0xff, 0x6b, 0x71, + 0x30, 0xcf, 0x2b, 0x17, 0xff, 0x4e, 0x83, 0xf3, 0xfb, 0xf8, 0x37, 0x58, + 0xbf, 0xc5, 0xd8, 0x33, 0x8d, 0x1e, 0xb1, 0x7f, 0xc5, 0x3b, 0x07, 0xff, + 0xb4, 0x7a, 0xc5, 0xf4, 0xe0, 0xfb, 0x58, 0xac, 0x44, 0xc7, 0xcd, 0xfa, + 0x1f, 0x5f, 0xff, 0x7e, 0x32, 0x7d, 0x23, 0x2c, 0x87, 0xe6, 0x0b, 0x17, + 0x82, 0x60, 0x96, 0x2f, 0xe6, 0x6f, 0x47, 0x3e, 0xeb, 0x17, 0x74, 0xea, + 0x58, 0xbf, 0xfa, 0x4b, 0x62, 0xcf, 0x73, 0x3b, 0x82, 0xc5, 0xff, 0xfe, + 0x27, 0x07, 0x35, 0x9b, 0xfe, 0x7f, 0x9a, 0xd4, 0x9a, 0xb1, 0x7f, 0xec, + 0xdb, 0x67, 0xf6, 0x85, 0x20, 0x58, 0xa7, 0x45, 0x1f, 0x98, 0xaf, 0xef, + 0xc8, 0xdc, 0xb1, 0x62, 0xba, 0xd5, 0x69, 0x52, 0x25, 0xb1, 0xae, 0x43, + 0x77, 0xb3, 0x18, 0xf5, 0x2d, 0x0f, 0x80, 0xc7, 0x83, 0xbe, 0x87, 0x40, + 0x88, 0xaf, 0x75, 0xce, 0xb2, 0x0b, 0x17, 0x89, 0xb8, 0xb1, 0x7f, 0xe9, + 0xf6, 0x6a, 0x0f, 0xde, 0x74, 0x58, 0xbf, 0xff, 0x13, 0x8b, 0xaf, 0xfe, + 0x66, 0xa0, 0xfd, 0xe7, 0x45, 0x8a, 0xfa, 0x2e, 0x63, 0x87, 0x03, 0x41, + 0xbf, 0x3f, 0x42, 0xce, 0x2c, 0x46, 0x1b, 0x4b, 0xd2, 0x5e, 0x58, 0xa8, + 0x1e, 0xc0, 0xcf, 0x2f, 0x36, 0xb6, 0x58, 0xbf, 0xdb, 0xbc, 0x80, 0xf3, + 0x05, 0x8b, 0xfd, 0x9e, 0xe3, 0xef, 0x84, 0xb1, 0x70, 0x41, 0x2c, 0x5f, + 0xf8, 0x5b, 0x37, 0xbd, 0xde, 0xee, 0x4b, 0x17, 0x9b, 0x78, 0xcc, 0x4c, + 0x0f, 0x72, 0x2f, 0x8f, 0x11, 0xa0, 0x46, 0x61, 0x8d, 0x5f, 0xb4, 0xd0, + 0x7f, 0xac, 0x5f, 0xfd, 0xae, 0x7d, 0xc2, 0xfb, 0xec, 0xc4, 0xb1, 0x52, + 0x7d, 0xcc, 0x51, 0x7e, 0xf7, 0x7b, 0xbf, 0xd7, 0x38, 0x91, 0x7e, 0x88, + 0x9b, 0xb8, 0x2c, 0x5f, 0xfe, 0xec, 0x07, 0x17, 0x7f, 0xce, 0x99, 0xee, + 0x2c, 0x56, 0x8f, 0xe8, 0x8a, 0xaf, 0xd9, 0x9b, 0x66, 0xcb, 0x17, 0xe8, + 0xa1, 0x3a, 0xd9, 0x62, 0xff, 0xc7, 0x10, 0x79, 0xad, 0x84, 0xc3, 0x58, + 0xbf, 0x75, 0x66, 0xb3, 0xa9, 0x62, 0xb1, 0x1c, 0xa6, 0x90, 0xe8, 0xa4, + 0xe5, 0x7f, 0x42, 0xbe, 0x3f, 0xd8, 0x6b, 0x17, 0xb1, 0xc0, 0xb1, 0x58, + 0x6f, 0xfc, 0x47, 0x68, 0xc8, 0xde, 0x17, 0xb0, 0x5d, 0x61, 0xac, 0x6c, + 0x35, 0xd7, 0x52, 0x78, 0xd6, 0x67, 0x30, 0xf7, 0x84, 0x2f, 0xc6, 0xfb, + 0x93, 0xc2, 0x46, 0x9e, 0x6f, 0x58, 0xed, 0x77, 0x0f, 0x27, 0x26, 0x8f, + 0x2a, 0x89, 0xff, 0x51, 0x8a, 0xfe, 0x38, 0x96, 0xc4, 0x95, 0x01, 0x47, + 0x75, 0xc9, 0x6d, 0x9e, 0x85, 0x67, 0x49, 0x4e, 0x21, 0x43, 0x72, 0x38, + 0x80, 0x38, 0xe5, 0xfa, 0xa1, 0x13, 0x50, 0x8c, 0x9e, 0xfc, 0x75, 0xef, + 0xc7, 0x72, 0xfc, 0x34, 0xe2, 0x78, 0x4b, 0xfe, 0x97, 0xa6, 0x08, 0xd7, + 0xca, 0x77, 0x77, 0x95, 0xa3, 0x9f, 0xab, 0xb9, 0x91, 0x62, 0xfe, 0xf2, + 0xe1, 0x41, 0x62, 0x96, 0x2f, 0x87, 0xf9, 0x09, 0x62, 0xa4, 0xd8, 0x60, + 0x65, 0xfd, 0xc9, 0x8a, 0x0f, 0x12, 0xc5, 0xa2, 0x58, 0xbf, 0x30, 0x1b, + 0x37, 0x58, 0xbd, 0x2d, 0xe5, 0x8a, 0x93, 0xd7, 0x21, 0x3e, 0x14, 0x5f, + 0xf7, 0xa4, 0x9c, 0x19, 0xdf, 0x96, 0x2f, 0xa3, 0x98, 0x80, 0xb1, 0x6d, + 0xb0, 0xf7, 0x83, 0x39, 0xbf, 0x98, 0x81, 0xe9, 0x89, 0x62, 0xa4, 0xf5, + 0xe3, 0x8a, 0x68, 0x09, 0xfa, 0x12, 0x47, 0x07, 0xfd, 0x08, 0x70, 0xe1, + 0xc5, 0x76, 0x76, 0xb1, 0x7f, 0xba, 0x4e, 0xa1, 0xf6, 0x82, 0xc5, 0xe3, + 0xb8, 0x16, 0x2f, 0x7d, 0xc2, 0x58, 0xbe, 0x6d, 0x6f, 0x19, 0x04, 0x44, + 0xe0, 0xc7, 0x0d, 0xbc, 0x3b, 0x7f, 0xfa, 0x0d, 0xc8, 0xc2, 0x9c, 0xf4, + 0xf7, 0x05, 0x8b, 0xc6, 0xbe, 0x96, 0x2e, 0x90, 0x2c, 0x5f, 0xf0, 0x01, + 0x23, 0x13, 0x6a, 0x0b, 0x16, 0x02, 0xc5, 0xfb, 0x1c, 0x85, 0x05, 0x8a, + 0xc3, 0x72, 0x21, 0x2b, 0xef, 0x7a, 0x4e, 0xb1, 0x79, 0xc7, 0x18, 0xe8, + 0xeb, 0xf8, 0xf7, 0x05, 0xe3, 0x9c, 0xc3, 0x20, 0xbf, 0xf4, 0xc2, 0x30, + 0x39, 0x08, 0x38, 0xb8, 0xb1, 0x67, 0xdd, 0x15, 0x00, 0x61, 0xa8, 0xc5, + 0x67, 0xdb, 0x43, 0x79, 0xd5, 0xfd, 0x1f, 0x05, 0xba, 0x2c, 0x5f, 0xf9, + 0xb7, 0x8c, 0x10, 0x1e, 0x19, 0x05, 0x8b, 0xff, 0xec, 0xf3, 0xfc, 0x5f, + 0x67, 0xef, 0x92, 0x6a, 0xc5, 0xfb, 0x5b, 0xb3, 0x6e, 0xa9, 0x0d, 0x4b, + 0xff, 0xef, 0xb8, 0x4c, 0x5b, 0xea, 0x5e, 0x0d, 0xc5, 0x8b, 0xf0, 0xbc, + 0x28, 0xa5, 0x62, 0xfc, 0x23, 0x7e, 0xd0, 0x58, 0xbc, 0xd9, 0xe5, 0x8b, + 0x3c, 0x0f, 0x18, 0x65, 0x57, 0xdf, 0x7e, 0x8e, 0xb1, 0x77, 0x7c, 0x58, + 0xac, 0x37, 0xa6, 0x92, 0x5a, 0x33, 0xae, 0xaa, 0x89, 0x36, 0x14, 0x1a, + 0x1e, 0x28, 0xee, 0x6f, 0xf5, 0x06, 0x70, 0xf3, 0x25, 0xff, 0xfe, 0xe9, + 0x25, 0xe8, 0xc6, 0xe8, 0xc3, 0xc1, 0xb1, 0xd8, 0x6b, 0x17, 0xed, 0x6e, + 0xcd, 0xba, 0xa4, 0xa5, 0x2f, 0x60, 0x19, 0x62, 0xdb, 0xae, 0x41, 0xa2, + 0x96, 0x29, 0x8d, 0x60, 0x08, 0x2e, 0x63, 0xac, 0x5a, 0x33, 0x11, 0x6d, + 0xf3, 0x76, 0x48, 0x22, 0x0b, 0xef, 0x37, 0x60, 0x58, 0xbf, 0xfd, 0x9f, + 0x70, 0xfc, 0xe4, 0x28, 0x67, 0x16, 0x2f, 0xf6, 0x7c, 0x9b, 0xde, 0x95, + 0x8b, 0xc4, 0xd1, 0x8c, 0x8a, 0x0f, 0x12, 0x06, 0x95, 0x7a, 0x37, 0xeb, + 0xb8, 0xd9, 0x62, 0xfc, 0xc7, 0xd9, 0xa3, 0xd6, 0x2f, 0xb7, 0x66, 0xdd, + 0x52, 0x1f, 0x17, 0xed, 0xc8, 0x4c, 0x1a, 0xc5, 0xa5, 0x62, 0xa4, 0xdd, + 0x8c, 0xaa, 0xfe, 0x73, 0x40, 0x79, 0x82, 0xc5, 0x69, 0x17, 0x67, 0x6c, + 0x22, 0x0b, 0x88, 0xd5, 0x8b, 0xf7, 0xc2, 0x6d, 0x41, 0x62, 0xdc, 0xc3, + 0xc2, 0x71, 0x8b, 0xfc, 0xfa, 0x31, 0xc7, 0x87, 0x58, 0xb9, 0xb4, 0xb1, + 0x5f, 0x3c, 0xb6, 0x34, 0xbe, 0xcf, 0x3f, 0x58, 0xb1, 0x77, 0xc4, 0xb1, + 0x7f, 0xc3, 0x17, 0xb9, 0x90, 0x7f, 0xac, 0x50, 0xcf, 0x49, 0xc6, 0x2e, + 0xef, 0x8b, 0x16, 0x35, 0x62, 0xb0, 0xd6, 0x47, 0x0c, 0xdf, 0xf6, 0x74, + 0x2c, 0xe0, 0x7a, 0x35, 0x62, 0xfe, 0x66, 0xdb, 0xd9, 0xba, 0xc5, 0xff, + 0xb4, 0x0d, 0xfe, 0xf1, 0x14, 0x81, 0x62, 0xa2, 0x3f, 0x01, 0x17, 0xdf, + 0xe8, 0x64, 0x7b, 0x10, 0x23, 0x65, 0x8b, 0xfc, 0x42, 0xdc, 0xf3, 0xad, + 0xd6, 0x2f, 0x7a, 0x71, 0x62, 0xff, 0xef, 0x42, 0x4d, 0x32, 0x7d, 0xc9, + 0x02, 0xc5, 0x8b, 0x0f, 0x8d, 0x87, 0x2e, 0x84, 0x64, 0x6e, 0xb9, 0x97, + 0xb1, 0x7e, 0x43, 0x9f, 0xb7, 0x18, 0x9c, 0x4e, 0x42, 0xcf, 0x20, 0x4d, + 0x22, 0x3e, 0x42, 0xb7, 0xc4, 0x62, 0x3b, 0x0e, 0x13, 0x35, 0xba, 0xef, + 0x3b, 0x4e, 0x87, 0x5f, 0xff, 0xf7, 0x47, 0xe7, 0xf0, 0xd3, 0x5b, 0xd9, + 0xf2, 0xcf, 0x7d, 0xd6, 0x2f, 0x9a, 0x7b, 0x82, 0xc5, 0xa3, 0x31, 0x11, + 0x9c, 0x69, 0xbf, 0xb6, 0x9d, 0x69, 0xa0, 0xb1, 0x7d, 0xf9, 0x23, 0x56, + 0x28, 0x8f, 0x4b, 0xc5, 0xf7, 0xf6, 0x98, 0x0d, 0x9a, 0x58, 0xbc, 0xde, + 0x8e, 0x58, 0xbe, 0xd0, 0xb3, 0x65, 0x8b, 0xf8, 0xf9, 0xcc, 0x62, 0x58, + 0xb8, 0xb6, 0x58, 0xa9, 0x3c, 0x41, 0x16, 0x5e, 0x62, 0x89, 0x62, 0xb1, + 0x14, 0xdf, 0x68, 0x62, 0x1b, 0xfd, 0x30, 0x63, 0xb1, 0x01, 0x62, 0xfe, + 0xcd, 0x78, 0xa7, 0xb5, 0x8b, 0xfb, 0xf2, 0xfd, 0x30, 0x6b, 0x17, 0xfe, + 0x6d, 0xa7, 0xef, 0xa7, 0x93, 0xac, 0x5f, 0xe9, 0xd6, 0x17, 0xb3, 0xeb, + 0x17, 0x64, 0x64, 0xaa, 0x41, 0x19, 0x09, 0xcb, 0x7f, 0x0c, 0x66, 0x2e, + 0x01, 0x97, 0x8b, 0xa3, 0x8b, 0xc3, 0x3e, 0xa3, 0x55, 0xa9, 0x9e, 0x55, + 0xf5, 0xf4, 0x67, 0x06, 0x35, 0x8a, 0x8c, 0x5c, 0x61, 0x99, 0xc0, 0xd3, + 0x96, 0xdf, 0xff, 0xe1, 0x68, 0xd6, 0xe6, 0x0e, 0x7b, 0xe0, 0x7e, 0x35, + 0xcd, 0x58, 0xbd, 0xc6, 0xe2, 0xc5, 0xf6, 0x68, 0x99, 0x62, 0xa4, 0xdf, + 0x38, 0xed, 0x41, 0x18, 0x91, 0x42, 0x96, 0xfe, 0xd4, 0x5e, 0x7f, 0xca, + 0xc5, 0xde, 0xd9, 0x62, 0xf0, 0x46, 0xee, 0xb1, 0x7e, 0xef, 0xb8, 0x67, + 0x96, 0x29, 0xd1, 0x28, 0x45, 0xfc, 0x19, 0x11, 0x0d, 0xff, 0xe8, 0xd4, + 0x68, 0x51, 0xfb, 0x0e, 0x36, 0x30, 0xcf, 0xc7, 0x2c, 0x5f, 0xf8, 0x4d, + 0xa8, 0x16, 0x72, 0x74, 0xb1, 0x76, 0x0d, 0x62, 0xd1, 0xeb, 0x17, 0x79, + 0xd6, 0x2a, 0x4d, 0x66, 0x0a, 0xdf, 0x6e, 0xcd, 0xba, 0xa4, 0xc7, 0x2f, + 0xd3, 0xf2, 0x60, 0xd6, 0x2e, 0x16, 0x96, 0x28, 0x68, 0xd3, 0x89, 0x0f, + 0x43, 0xe7, 0x31, 0x62, 0x8b, 0xfd, 0x8e, 0x5b, 0x7b, 0x3e, 0xb1, 0x73, + 0xc7, 0x2c, 0x5f, 0x66, 0xc7, 0xf2, 0xc5, 0x7c, 0xdf, 0x10, 0xd5, 0xcd, + 0xc5, 0x8b, 0xff, 0xa2, 0x7f, 0xf7, 0xe7, 0x9e, 0x83, 0x95, 0x8b, 0xfb, + 0x60, 0xf5, 0xac, 0xd2, 0xc5, 0xde, 0x35, 0x62, 0xf1, 0xf9, 0x2b, 0x15, + 0x04, 0x63, 0x76, 0x2e, 0xc9, 0x00, 0x31, 0x10, 0xcd, 0xff, 0x13, 0x1b, + 0xf7, 0x92, 0xd9, 0x62, 0xff, 0xff, 0x61, 0x7b, 0x86, 0x70, 0x39, 0xd0, + 0x23, 0x9f, 0xf9, 0xd1, 0x62, 0xfe, 0x2f, 0x68, 0x52, 0x75, 0x8b, 0xfb, + 0xec, 0x43, 0x0f, 0xb5, 0x8b, 0xff, 0xe6, 0x34, 0xcf, 0x1b, 0x25, 0x0c, + 0xfb, 0x9d, 0x62, 0x9d, 0x10, 0x44, 0x61, 0x52, 0x99, 0xcb, 0x34, 0x0a, + 0x16, 0x17, 0xf0, 0x1b, 0xdc, 0x93, 0x56, 0x2f, 0x8d, 0x0c, 0xb7, 0x58, + 0xb6, 0x2c, 0x51, 0xa6, 0xdf, 0xa1, 0x35, 0xfe, 0x7f, 0x4e, 0x8d, 0xfb, + 0xac, 0x5f, 0xff, 0x43, 0x68, 0xd5, 0x31, 0xa6, 0xdb, 0xe8, 0xc3, 0x3f, + 0x1c, 0xb1, 0x7f, 0xd9, 0xd2, 0x61, 0xdc, 0x33, 0xcb, 0x15, 0x89, 0xb0, + 0x3b, 0x33, 0x12, 0x00, 0xd0, 0x99, 0xaf, 0xba, 0x07, 0x17, 0x16, 0x2e, + 0x16, 0xeb, 0x15, 0x87, 0x83, 0xc2, 0x8b, 0x9e, 0x0b, 0x17, 0xfc, 0xda, + 0x04, 0x76, 0x0d, 0xa2, 0x58, 0xbf, 0xd8, 0x5f, 0xcf, 0x48, 0xd6, 0x2f, + 0xd9, 0xd3, 0xed, 0x05, 0x8a, 0x73, 0xdc, 0x23, 0x2a, 0x24, 0x5c, 0xfa, + 0x13, 0x37, 0xf0, 0xfe, 0xfb, 0x86, 0x25, 0x8a, 0x1a, 0x65, 0x19, 0x0d, + 0x07, 0x27, 0xbf, 0xe8, 0x3f, 0x83, 0xd4, 0xfe, 0x56, 0x2f, 0xff, 0xcf, + 0xc0, 0xfb, 0x06, 0x74, 0x7f, 0x4e, 0x14, 0x16, 0x2f, 0xcf, 0xef, 0x3f, + 0x96, 0x2f, 0xff, 0xc2, 0x26, 0x37, 0xc6, 0xc9, 0x43, 0x3e, 0xe7, 0x58, + 0xbf, 0x3c, 0x40, 0x60, 0x2c, 0x5f, 0x6b, 0x59, 0x1c, 0xb1, 0x76, 0xfb, + 0xac, 0x5f, 0xb4, 0x07, 0xfc, 0xac, 0x51, 0x89, 0xd0, 0xc0, 0xeb, 0x16, + 0x0e, 0x51, 0xf5, 0x66, 0x29, 0xe1, 0x30, 0x86, 0xaf, 0xc7, 0x79, 0xd4, + 0x16, 0x2f, 0xd9, 0xe8, 0x67, 0x16, 0x29, 0xcf, 0x43, 0x85, 0x17, 0xf0, + 0xf0, 0xef, 0xf9, 0x58, 0xbe, 0xd6, 0x64, 0x4b, 0x15, 0x27, 0xa1, 0x85, + 0xb6, 0x8c, 0x96, 0x62, 0xb6, 0xd0, 0xbd, 0x81, 0xd8, 0xd9, 0x32, 0x31, + 0x13, 0x52, 0xb7, 0x71, 0x78, 0x73, 0x44, 0x94, 0x78, 0xdc, 0xbf, 0x1c, + 0xa3, 0x42, 0x20, 0xa3, 0x49, 0xe4, 0x7a, 0xbe, 0x86, 0x08, 0x6e, 0x37, + 0xfe, 0x8d, 0x3f, 0x2e, 0x32, 0x91, 0x6e, 0xb1, 0x77, 0xb1, 0x62, 0xd1, + 0xba, 0xc5, 0x75, 0xc3, 0xf2, 0xed, 0x11, 0xc5, 0xef, 0x3e, 0xa2, 0x58, + 0xbe, 0x87, 0x84, 0x35, 0x8a, 0x34, 0xf0, 0xbb, 0x1e, 0xbf, 0xd9, 0xd1, + 0xfb, 0xcc, 0xd9, 0x62, 0xff, 0xff, 0x60, 0x42, 0x62, 0xe9, 0xc0, 0xdb, + 0x68, 0xa0, 0xe2, 0xeb, 0xd6, 0x2a, 0x36, 0x45, 0x17, 0xcd, 0xaf, 0xff, + 0xff, 0xdf, 0xc6, 0x7e, 0x7f, 0x00, 0x67, 0x30, 0x78, 0x77, 0xee, 0x05, + 0x26, 0x81, 0x62, 0xfe, 0x26, 0x0b, 0xd9, 0xf5, 0x8a, 0xeb, 0x11, 0x65, + 0x14, 0x21, 0x2e, 0x39, 0xab, 0x15, 0xd6, 0x9e, 0x3c, 0x6a, 0x2e, 0xbd, + 0xac, 0xdd, 0x62, 0xfb, 0x3e, 0xde, 0x58, 0xa1, 0x9e, 0x01, 0x0f, 0x5e, + 0x8d, 0x7d, 0x60, 0x16, 0x2b, 0xad, 0x3c, 0xa8, 0xd4, 0x43, 0x7f, 0xd1, + 0xbf, 0x5a, 0x2c, 0xd1, 0x48, 0x16, 0x2c, 0x35, 0x8a, 0xeb, 0x0f, 0x57, + 0xae, 0x21, 0xdf, 0xee, 0xb3, 0xf8, 0x09, 0xd7, 0x16, 0x2f, 0xfb, 0xae, + 0xc0, 0x09, 0x1f, 0xc5, 0xd4, 0xb1, 0x6e, 0xb1, 0x62, 0xba, 0xd3, 0xdc, + 0xc4, 0x5b, 0xed, 0x6c, 0x20, 0x2c, 0x5f, 0xb7, 0x9f, 0x3f, 0x45, 0x8a, + 0x93, 0xd0, 0xc2, 0x5b, 0xff, 0x60, 0x5c, 0xc7, 0xe7, 0xb2, 0x3d, 0x62, + 0xbe, 0x7c, 0x44, 0x41, 0x7b, 0xe2, 0x1a, 0xc5, 0xcf, 0xba, 0xc5, 0xff, + 0x9b, 0xb0, 0x37, 0x80, 0x19, 0x41, 0x62, 0xfc, 0xe3, 0x11, 0x62, 0xc5, + 0xff, 0x70, 0xa6, 0x63, 0xf5, 0x27, 0x58, 0xbb, 0xae, 0xe3, 0x75, 0x8b, + 0xff, 0x1f, 0x85, 0x33, 0xd9, 0xdc, 0x0b, 0x17, 0xec, 0x8b, 0xed, 0x1e, + 0xb1, 0x7f, 0xc5, 0x3f, 0x67, 0xe3, 0xf4, 0x58, 0xb1, 0xcc, 0x4c, 0x0e, + 0x37, 0x3b, 0x92, 0x42, 0x3f, 0x0c, 0xb2, 0xf9, 0xf9, 0xc9, 0x58, 0xac, + 0x3f, 0x8f, 0xab, 0x5f, 0xe9, 0x3b, 0x7a, 0x74, 0x05, 0x8b, 0xfb, 0x21, + 0x0d, 0x0b, 0xad, 0x58, 0xad, 0x95, 0x35, 0xc1, 0x04, 0x71, 0xd1, 0x7c, + 0x84, 0x8c, 0xef, 0xf4, 0x4f, 0xee, 0x39, 0x44, 0xb1, 0x74, 0x8d, 0x62, + 0xa4, 0xf3, 0x3e, 0x6b, 0x7f, 0x8a, 0x67, 0xb3, 0xb8, 0x16, 0x2f, 0xcc, + 0x33, 0xc9, 0xab, 0x15, 0xc3, 0xdc, 0x11, 0x9d, 0xff, 0xd2, 0x0f, 0xc7, + 0xb9, 0xfd, 0xc6, 0xed, 0x62, 0xff, 0xa7, 0x4c, 0x72, 0xce, 0xfc, 0xb1, + 0x5b, 0xa2, 0x08, 0xe9, 0x37, 0x66, 0xcb, 0x17, 0x0e, 0x56, 0x28, 0x33, + 0x5f, 0xd4, 0x31, 0x4e, 0x7f, 0x02, 0x53, 0xbf, 0xf9, 0x88, 0x59, 0xf7, + 0x6d, 0x8a, 0x56, 0x2f, 0xfd, 0xf7, 0x30, 0x3d, 0xcb, 0x3f, 0x8b, 0x17, + 0xf0, 0x38, 0xde, 0xf3, 0x2c, 0x51, 0xa7, 0xde, 0xc8, 0x37, 0xfb, 0x93, + 0x11, 0xe7, 0xdc, 0x58, 0xb6, 0xeb, 0x17, 0xb3, 0xee, 0xb1, 0x47, 0x35, + 0xfc, 0x13, 0xbf, 0xe6, 0x1b, 0xf7, 0x0f, 0x3e, 0x96, 0x2f, 0xfb, 0x40, + 0x2c, 0x8a, 0x0f, 0x12, 0xc5, 0xfe, 0x3f, 0x1e, 0x3b, 0x35, 0x2b, 0x17, + 0xfe, 0xd9, 0xf7, 0xfb, 0x8c, 0x78, 0x12, 0xc5, 0x4a, 0x2c, 0xf0, 0xed, + 0xcd, 0xa8, 0x6b, 0xf1, 0x98, 0x43, 0xb8, 0xf3, 0xca, 0x83, 0xd4, 0x27, + 0x8e, 0xfb, 0xf8, 0xc7, 0x00, 0x42, 0x50, 0xb1, 0xe1, 0x17, 0x99, 0x3a, + 0x10, 0xf5, 0x43, 0xb6, 0xfd, 0xf7, 0x92, 0xf2, 0xc5, 0xa3, 0xd6, 0x2f, + 0xec, 0x26, 0xee, 0x1c, 0x58, 0xbd, 0xb6, 0xa5, 0x62, 0xfa, 0x3f, 0x8d, + 0xd1, 0x62, 0xff, 0xd8, 0x40, 0x8e, 0xc8, 0xe7, 0x2f, 0x2c, 0x56, 0x1f, + 0x5f, 0x0a, 0x2b, 0x48, 0xd8, 0x62, 0xee, 0x42, 0x26, 0x89, 0x32, 0x10, + 0xa1, 0xdb, 0x71, 0x1a, 0xb1, 0x7e, 0xfb, 0xc9, 0x6c, 0xb1, 0x7f, 0x42, + 0x4e, 0xc5, 0x2b, 0x15, 0xd9, 0xea, 0x68, 0xa2, 0xc1, 0x2c, 0x58, 0x6b, + 0x15, 0xb1, 0xa5, 0xc1, 0x3a, 0x1a, 0xa4, 0x6c, 0x8d, 0x21, 0x8a, 0x44, + 0xd9, 0xd1, 0x22, 0xfd, 0xf6, 0x3c, 0x92, 0xc5, 0xf7, 0x3e, 0xe1, 0x2c, 0x5f, 0xfd, 0x14, 0x7b, 0xed, 0xfc, 0x88, 0xb0, 0x25, 0x8b, 0xf3, 0x6a, - 0x39, 0xbe, 0xb1, 0x7e, 0xe4, 0xf9, 0xfb, 0x2c, 0x56, 0xe7, 0xab, 0xe2, - 0xbb, 0xbf, 0xf5, 0x8b, 0xf4, 0x85, 0xec, 0xfa, 0xc5, 0xc1, 0xe2, 0xc5, - 0xf0, 0xf3, 0xaf, 0x2c, 0x54, 0x9b, 0xc7, 0x18, 0xa3, 0x13, 0xaa, 0xc2, - 0x73, 0x49, 0x1e, 0x14, 0x1d, 0xf9, 0x19, 0x0c, 0x71, 0x96, 0xff, 0xa3, - 0x4d, 0x6d, 0xe2, 0x98, 0xd3, 0xa5, 0x8b, 0xf8, 0xa4, 0x10, 0xdf, 0x65, - 0x8b, 0xff, 0xa6, 0x7b, 0xbf, 0x8c, 0x3c, 0xc3, 0xac, 0x5d, 0xee, 0x44, - 0x7e, 0xbf, 0x30, 0xb6, 0xeb, 0x17, 0x81, 0x1b, 0xfd, 0x62, 0xbb, 0xec, - 0xdb, 0x70, 0x4e, 0xfe, 0xd6, 0xdb, 0xfd, 0xa3, 0xd6, 0x2f, 0x85, 0xcf, - 0xe2, 0xc5, 0xff, 0xe7, 0xf8, 0x87, 0xf9, 0xdf, 0xe2, 0x60, 0xd6, 0x2b, - 0x48, 0xcc, 0x62, 0x82, 0x34, 0xf1, 0x1d, 0xff, 0xec, 0xee, 0xcd, 0xfd, - 0xd4, 0x30, 0x80, 0xcb, 0x17, 0xff, 0xff, 0x39, 0x76, 0xc1, 0x93, 0x37, - 0x6c, 0x8f, 0xf4, 0x7b, 0xf8, 0xa4, 0x0b, 0x17, 0x9c, 0x40, 0x58, 0xbf, - 0xfd, 0x9d, 0x9b, 0x35, 0x3e, 0x7d, 0xdc, 0x6b, 0x16, 0xea, 0x3d, 0x1c, - 0x11, 0x3c, 0x10, 0xed, 0xe3, 0xbe, 0x96, 0x2b, 0x0f, 0x5c, 0x07, 0x57, - 0xb1, 0x89, 0x62, 0xf7, 0xe6, 0x25, 0x8b, 0x9f, 0xce, 0x6e, 0x58, 0x6e, - 0xe8, 0x0d, 0x62, 0xff, 0x6c, 0x21, 0xff, 0x3b, 0x71, 0x62, 0xff, 0xec, - 0x0b, 0x85, 0x91, 0x40, 0x45, 0xe5, 0x8b, 0xe8, 0x47, 0xb9, 0xd6, 0x2f, - 0xb8, 0xcd, 0x1e, 0xb1, 0x7d, 0xff, 0xcc, 0x7a, 0xc5, 0xfb, 0x3f, 0x1e, - 0xe4, 0xc7, 0xe3, 0xe2, 0x60, 0xc9, 0x6b, 0x64, 0xcf, 0x08, 0xe3, 0xb4, - 0x2d, 0xef, 0xff, 0xdb, 0xe7, 0x67, 0xd4, 0x73, 0x6d, 0x1d, 0xac, 0xff, - 0x16, 0x2b, 0x11, 0x30, 0xc7, 0x17, 0xe8, 0x8e, 0xfa, 0xe2, 0xc5, 0xff, - 0x7d, 0xfd, 0xd4, 0x1f, 0xdc, 0x58, 0xbf, 0xff, 0xfb, 0xb8, 0xb1, 0xbb, - 0x16, 0x76, 0xfe, 0x16, 0x3e, 0x9b, 0xa8, 0x71, 0x63, 0x73, 0x77, 0x7f, - 0xb3, 0x66, 0x7d, 0xf0, 0x96, 0x2b, 0x11, 0x75, 0xda, 0x10, 0xf7, 0xe6, - 0x7d, 0xf0, 0x96, 0x2f, 0x9f, 0x7c, 0x25, 0x8b, 0x70, 0xc3, 0xc9, 0x62, - 0x7b, 0xff, 0xfe, 0xeb, 0xf3, 0xda, 0x2c, 0x6e, 0xb9, 0x8e, 0x5b, 0x66, - 0x77, 0x2c, 0x54, 0xa2, 0x55, 0x8a, 0x2f, 0xff, 0x7e, 0x7a, 0xcd, 0x88, - 0x42, 0xf4, 0xfd, 0x62, 0xff, 0x9f, 0x7f, 0xbf, 0xb8, 0xdd, 0x2c, 0x5f, - 0x60, 0xf3, 0xfb, 0xa2, 0x1f, 0xe9, 0x95, 0x89, 0xf4, 0xea, 0x30, 0x72, - 0x85, 0x45, 0xfe, 0xdd, 0xc2, 0xc8, 0x9a, 0x3d, 0x62, 0xb4, 0x7e, 0x7f, - 0x3a, 0xbf, 0xff, 0xf1, 0x61, 0xc8, 0x40, 0x36, 0x3d, 0xc8, 0x79, 0xb0, - 0x42, 0x6d, 0x96, 0x2b, 0xbc, 0x5c, 0x0f, 0x99, 0x6f, 0x78, 0x45, 0x7f, - 0xff, 0xa4, 0x2f, 0xe6, 0x98, 0xf9, 0xef, 0xe6, 0x1f, 0x37, 0x58, 0xbf, - 0xfd, 0xcd, 0xd9, 0xbb, 0x6b, 0x1f, 0xf2, 0x35, 0x8b, 0xff, 0xd9, 0xdc, - 0x59, 0xd8, 0xb0, 0x07, 0x98, 0x2c, 0x56, 0xe8, 0x99, 0x89, 0x32, 0xa5, - 0x31, 0xfc, 0x87, 0xd5, 0xfc, 0x59, 0xee, 0x60, 0x4b, 0x17, 0xe0, 0x98, - 0x8a, 0x56, 0x2c, 0x25, 0x8b, 0x40, 0xc3, 0x73, 0xc2, 0x7b, 0x37, 0x48, - 0x8f, 0xd3, 0x3d, 0x46, 0x8c, 0xc8, 0x79, 0x85, 0xde, 0x46, 0x63, 0xb9, - 0xdb, 0xc7, 0x0b, 0x1e, 0xb5, 0x11, 0x56, 0xa3, 0xec, 0xfc, 0xe1, 0x81, - 0x46, 0xb8, 0x28, 0x5b, 0x5d, 0xd7, 0x16, 0x2f, 0x68, 0x50, 0x58, 0xb7, - 0xe4, 0xdb, 0xb8, 0xcd, 0xff, 0x6c, 0xff, 0x89, 0xa0, 0xff, 0x58, 0xbf, - 0x80, 0x59, 0xb0, 0x70, 0x58, 0xbe, 0x04, 0x70, 0xbc, 0xb1, 0x58, 0x7a, - 0xfa, 0x30, 0xbf, 0xdd, 0xbe, 0xe3, 0xfe, 0x71, 0x62, 0xff, 0xff, 0x84, - 0x2e, 0x8b, 0x3b, 0x18, 0x3c, 0xf4, 0x33, 0xff, 0x68, 0x2c, 0x5f, 0xf1, - 0xf9, 0xfc, 0xf1, 0x49, 0xd6, 0x2f, 0x16, 0x70, 0x91, 0x49, 0x1c, 0xd7, - 0x4c, 0x98, 0x7f, 0x68, 0x6d, 0x5f, 0xfe, 0xd6, 0xa7, 0x6c, 0x0b, 0xa8, - 0x78, 0x43, 0x58, 0xbe, 0xcc, 0x23, 0x56, 0x2f, 0xfc, 0xe6, 0xe4, 0x1d, - 0xbb, 0x7d, 0xd6, 0x2d, 0x2e, 0x8b, 0x1d, 0x27, 0xfc, 0x8a, 0xfc, 0xc6, - 0xc7, 0x39, 0xab, 0x15, 0x2a, 0x9b, 0x1e, 0x33, 0x0f, 0xc3, 0x6c, 0x8d, - 0x2f, 0xf1, 0x7a, 0x36, 0x6f, 0x0a, 0x56, 0x2f, 0xe8, 0x16, 0x75, 0xe6, - 0x58, 0xbf, 0x87, 0xe3, 0x5c, 0x86, 0xb1, 0x52, 0x89, 0x56, 0x38, 0x11, - 0x75, 0xf1, 0xdc, 0x2e, 0x2c, 0x5f, 0xe6, 0xdb, 0xdc, 0x66, 0x8f, 0x58, - 0xad, 0x8f, 0x6f, 0xb1, 0x25, 0xfd, 0xf7, 0x89, 0x9a, 0x0b, 0x17, 0x1e, - 0x0b, 0x17, 0x3e, 0xb7, 0x3c, 0x60, 0xcb, 0xaf, 0xfd, 0x27, 0xdf, 0xef, - 0xec, 0xc3, 0xac, 0x5f, 0x70, 0xee, 0x05, 0x8a, 0xf9, 0xf1, 0x00, 0xfe, - 0xff, 0xe7, 0x2d, 0xb3, 0x79, 0xec, 0x29, 0xe2, 0xc5, 0xf6, 0xb6, 0x93, - 0x56, 0x2c, 0xeb, 0x17, 0x31, 0xb8, 0x6d, 0xbc, 0x4b, 0x52, 0x8c, 0xb1, - 0x91, 0x13, 0xed, 0xfe, 0xcd, 0xe6, 0x3f, 0x66, 0x25, 0x8b, 0xfc, 0x53, - 0x31, 0xfa, 0x93, 0xac, 0x5f, 0xe2, 0xdd, 0xbc, 0xc6, 0x98, 0x47, 0xd9, - 0xc3, 0x7b, 0xff, 0xd9, 0xc0, 0x49, 0x78, 0x7f, 0x92, 0xd9, 0x62, 0xa5, - 0x12, 0xba, 0x4b, 0xbf, 0xfc, 0x59, 0xf0, 0xf9, 0xc1, 0x1f, 0x8d, 0xd2, - 0xc5, 0xf0, 0x31, 0xd9, 0x62, 0xf0, 0x1c, 0x35, 0x8b, 0xfb, 0x0b, 0x3b, - 0x3e, 0x96, 0x2f, 0xff, 0xce, 0x71, 0xcf, 0xf3, 0xb4, 0x7b, 0x90, 0xf3, - 0x65, 0x8b, 0xf4, 0x97, 0xb8, 0xfb, 0xa2, 0x23, 0xe5, 0xd7, 0xdd, 0xd3, - 0xfe, 0x2c, 0x51, 0xa9, 0xcd, 0xee, 0x44, 0xc9, 0xa0, 0x21, 0xf4, 0x29, - 0xbb, 0x8f, 0xef, 0xf9, 0xb5, 0xb7, 0xdf, 0x35, 0x12, 0xc5, 0xff, 0xcc, - 0xc4, 0x0e, 0x64, 0x7c, 0x4c, 0xcb, 0x17, 0xff, 0xff, 0xf3, 0xfe, 0x3d, - 0xcb, 0x3d, 0xe9, 0xd8, 0x65, 0x32, 0x0f, 0x43, 0x08, 0x9a, 0x0b, 0x17, - 0xfd, 0x9e, 0xc3, 0xb6, 0x9e, 0x25, 0x8a, 0xc4, 0x60, 0x94, 0x22, 0x2b, - 0x74, 0xda, 0x22, 0x3b, 0xf4, 0x60, 0xf7, 0xfa, 0x45, 0xdf, 0x94, 0xfb, - 0x8b, 0x17, 0xe8, 0x73, 0x6c, 0x09, 0x62, 0xc4, 0xb1, 0x7f, 0xf1, 0xc9, - 0x8d, 0xe3, 0x8b, 0x99, 0x1e, 0xb1, 0x58, 0x7b, 0x2e, 0x23, 0x7e, 0xea, - 0x02, 0x6f, 0x2c, 0x5a, 0x46, 0x79, 0x5e, 0x20, 0xbd, 0x9a, 0xd9, 0x62, - 0xf3, 0x14, 0x4b, 0x15, 0xf3, 0x76, 0xc3, 0xd7, 0x99, 0xb7, 0x54, 0x9a, - 0x05, 0xff, 0xfe, 0xc1, 0xce, 0xee, 0x5b, 0x73, 0x7f, 0xb8, 0xc7, 0x84, - 0xb1, 0x7e, 0x6d, 0x6d, 0x81, 0x2c, 0x5e, 0x60, 0xbb, 0x8c, 0x44, 0x66, - 0xec, 0x57, 0xf0, 0x24, 0xa7, 0xdc, 0x58, 0xbd, 0xa9, 0xf2, 0xc5, 0xfd, - 0x22, 0xf1, 0x3f, 0x65, 0x8b, 0xfb, 0xdc, 0xc3, 0x5f, 0x51, 0x1e, 0x66, - 0x87, 0x6a, 0x55, 0x7f, 0xed, 0x0c, 0xe1, 0xb1, 0x6e, 0x41, 0xa8, 0x5b, - 0x00, 0xe8, 0x37, 0x9b, 0xf6, 0xfc, 0xf6, 0x69, 0x62, 0xfe, 0xf1, 0x98, - 0x6b, 0xe9, 0x62, 0xf4, 0x1c, 0x0b, 0x17, 0xf4, 0xf5, 0x01, 0xe9, 0x96, - 0x2f, 0xe9, 0x36, 0x3d, 0xc4, 0x35, 0x8b, 0x74, 0x03, 0xe1, 0xf1, 0x7d, - 0xfc, 0xfe, 0xfb, 0x11, 0xab, 0x15, 0x29, 0x97, 0xb9, 0x54, 0x46, 0x0c, - 0xfd, 0xc2, 0x9b, 0xef, 0x93, 0x47, 0xac, 0x5e, 0x10, 0xb4, 0xb1, 0x78, - 0xa7, 0x4b, 0x17, 0x6a, 0x28, 0x8d, 0xd7, 0x07, 0xaf, 0xff, 0xf7, 0x18, - 0xbf, 0x3d, 0xbf, 0x9e, 0xc6, 0x2d, 0xf0, 0x6b, 0x17, 0xec, 0xcf, 0x61, - 0xd6, 0x2f, 0xff, 0xf3, 0xcf, 0x9f, 0xf3, 0xcf, 0xe7, 0x35, 0x9b, 0xe7, - 0x96, 0x2f, 0xfe, 0x90, 0x70, 0xb2, 0x3c, 0x73, 0xee, 0x2c, 0x59, 0xbe, - 0x8c, 0xe2, 0x27, 0xe3, 0x05, 0x4a, 0x6c, 0x7f, 0x8c, 0xbe, 0xff, 0xe9, - 0xde, 0x4f, 0x9a, 0xd3, 0x05, 0xdc, 0xb1, 0x5a, 0x3f, 0x2e, 0xe2, 0x9b, - 0xfb, 0x63, 0x22, 0x84, 0xec, 0xb1, 0x7f, 0x67, 0x69, 0x84, 0xe9, 0x62, - 0xa5, 0x57, 0x56, 0x2f, 0xbc, 0xa0, 0x46, 0x25, 0x23, 0x3b, 0xf0, 0xe6, - 0x27, 0x3a, 0xc5, 0xfe, 0x81, 0x9f, 0xcc, 0x2d, 0xd6, 0x2f, 0xe0, 0x8b, - 0x36, 0x0e, 0x0b, 0x17, 0xc1, 0xc7, 0x67, 0x16, 0x2f, 0xe1, 0x0b, 0xdc, - 0x68, 0x96, 0x2f, 0xfe, 0xe6, 0x1a, 0x59, 0xb3, 0x7a, 0x26, 0x58, 0xbb, - 0xdc, 0x31, 0x13, 0xa7, 0x27, 0xf1, 0x85, 0xfb, 0x39, 0xec, 0xdd, 0x62, - 0xfc, 0x3c, 0x03, 0x4a, 0xc5, 0xff, 0xff, 0x9b, 0x50, 0xe3, 0x8f, 0x35, - 0xb3, 0xf3, 0xec, 0x0e, 0x61, 0x2c, 0x54, 0x11, 0x79, 0x85, 0x3c, 0x27, - 0xa9, 0x54, 0x56, 0xe6, 0xad, 0x0c, 0xe1, 0x43, 0xe6, 0xfd, 0xb1, 0xd9, - 0x89, 0x62, 0xff, 0xba, 0xfc, 0xf6, 0xff, 0x4d, 0x1e, 0xb1, 0x7f, 0xff, - 0xfc, 0x69, 0x31, 0xe7, 0xd8, 0x7c, 0x1e, 0x47, 0xf8, 0xb0, 0x00, 0x98, - 0xbc, 0xb1, 0x7f, 0xbb, 0x7f, 0x0b, 0x67, 0xe2, 0xc5, 0xfe, 0x06, 0x3f, - 0x39, 0x20, 0x58, 0xa9, 0x3e, 0x96, 0x36, 0xa9, 0x4d, 0xcb, 0x0a, 0x19, - 0x07, 0x90, 0xe9, 0xbf, 0xf0, 0xe3, 0xb3, 0x83, 0xfb, 0xeb, 0x65, 0x8b, - 0xff, 0xec, 0x0b, 0xc7, 0x9c, 0xf7, 0xf3, 0x0b, 0x75, 0x8a, 0x94, 0x4a, - 0x7d, 0x12, 0xfe, 0xed, 0xac, 0xf3, 0x74, 0xb1, 0x7f, 0xba, 0xfe, 0x6e, - 0x59, 0xb2, 0xc5, 0xee, 0xf3, 0xbd, 0x8d, 0x16, 0x2f, 0xb0, 0xa0, 0xeb, - 0x17, 0xff, 0x66, 0xb4, 0xd0, 0x0c, 0x9b, 0xdc, 0x58, 0xa9, 0x3e, 0x68, - 0x10, 0xd6, 0x91, 0x69, 0xe8, 0x49, 0xdf, 0xed, 0x00, 0x59, 0x14, 0x9d, - 0x62, 0xa5, 0x34, 0x77, 0x87, 0x53, 0x14, 0x5f, 0xfd, 0xbf, 0xde, 0x22, - 0x60, 0xb3, 0xaf, 0x2c, 0x5f, 0xdf, 0x9f, 0x7e, 0x62, 0x58, 0xac, 0x3f, - 0x78, 0x92, 0x2a, 0x5b, 0xab, 0xad, 0x89, 0x61, 0x2b, 0xf8, 0x70, 0xdc, - 0xc8, 0x44, 0x9a, 0xd7, 0xbc, 0x6b, 0x8f, 0x2b, 0x2a, 0x3e, 0x3c, 0x98, - 0x8e, 0x75, 0x2c, 0xdc, 0xf1, 0xd0, 0xfe, 0x59, 0x9b, 0x27, 0x14, 0xa5, - 0x4e, 0x47, 0x71, 0xe8, 0x6a, 0x08, 0x8b, 0xb4, 0x6f, 0x01, 0xc2, 0xaa, - 0xff, 0xf4, 0x96, 0xe3, 0xfc, 0xf5, 0xf9, 0xed, 0x8b, 0x17, 0xff, 0xff, - 0x9f, 0xe2, 0x26, 0x6e, 0xdb, 0xfd, 0xfd, 0x87, 0xe3, 0xe1, 0x01, 0x96, - 0x2f, 0xf8, 0x87, 0xc6, 0x1b, 0x74, 0x4b, 0x17, 0xff, 0xdd, 0x40, 0xa5, - 0x86, 0xfb, 0xe7, 0xdb, 0xcb, 0x15, 0x04, 0xc0, 0x31, 0xdd, 0xce, 0x6f, - 0xfe, 0x6d, 0x60, 0xfe, 0xc7, 0x0e, 0x49, 0x62, 0xc0, 0x58, 0xbc, 0x3f, - 0xca, 0xc5, 0xf6, 0x75, 0xe6, 0x58, 0xb7, 0x0c, 0x3c, 0x02, 0x1d, 0xad, - 0x1f, 0xd7, 0x94, 0xa9, 0x91, 0xc0, 0x28, 0x5f, 0x5b, 0x16, 0x2f, 0xff, - 0x0f, 0xf3, 0x2f, 0xee, 0x39, 0x75, 0x05, 0x8b, 0x08, 0x67, 0xb6, 0x42, - 0x37, 0x61, 0xd6, 0x2f, 0xff, 0x8d, 0x7d, 0x67, 0x5e, 0xfb, 0x87, 0x23, - 0x95, 0x8b, 0x98, 0x96, 0x2f, 0x39, 0x62, 0xc5, 0xff, 0xb9, 0xf9, 0x3f, - 0xb8, 0x4d, 0xd6, 0xc6, 0xc6, 0x02, 0xd7, 0xfe, 0xeb, 0xb7, 0xe3, 0xdf, - 0xc5, 0x27, 0x58, 0xac, 0x4c, 0x7b, 0xa8, 0x41, 0xb2, 0xb5, 0xe9, 0xd9, - 0xd6, 0x2a, 0x57, 0x23, 0x32, 0x34, 0xd3, 0x63, 0x0f, 0x78, 0x41, 0x68, - 0x9d, 0xa3, 0x35, 0x23, 0x5b, 0xfa, 0x2f, 0xc8, 0x4c, 0x4b, 0x17, 0xe8, - 0xa1, 0x3a, 0xd9, 0x62, 0xfe, 0xcd, 0x69, 0x82, 0xee, 0x58, 0xa9, 0x44, - 0x66, 0xc5, 0xe7, 0x2b, 0xbf, 0xff, 0x05, 0xf2, 0x66, 0xeb, 0xc2, 0x6f, - 0xbe, 0x12, 0xc5, 0xff, 0xff, 0x6b, 0x06, 0x4c, 0xdd, 0xb9, 0x91, 0xfe, - 0x2c, 0xcd, 0x44, 0xb1, 0x7e, 0x2f, 0x18, 0x7d, 0x96, 0x2f, 0x84, 0x76, - 0xf2, 0xc5, 0xff, 0xf9, 0xf6, 0x2c, 0xed, 0xf7, 0xf7, 0x50, 0x92, 0x89, - 0x62, 0xa5, 0x14, 0xe3, 0x2b, 0xf9, 0x1d, 0xff, 0xff, 0x9f, 0x4f, 0x9d, - 0xb3, 0x6c, 0x7f, 0x49, 0xc9, 0x8d, 0xfb, 0xac, 0x5f, 0xfd, 0x09, 0x68, - 0x18, 0xf1, 0x3e, 0x12, 0xc5, 0xf7, 0x8d, 0x7d, 0xd6, 0x2f, 0xff, 0xf3, - 0xc9, 0x7b, 0x53, 0xf6, 0xe1, 0x60, 0x39, 0xe7, 0x58, 0xbf, 0xe7, 0xf4, - 0x9d, 0xfc, 0x29, 0x58, 0xbf, 0xd3, 0x03, 0x22, 0x8f, 0x72, 0x58, 0xb6, - 0x70, 0xfc, 0x3c, 0x71, 0x7f, 0xe1, 0x37, 0x5c, 0x2c, 0xec, 0xd0, 0x58, - 0xbf, 0xe8, 0x8a, 0x4f, 0xf9, 0xec, 0x75, 0x8b, 0xff, 0xd0, 0x7d, 0x01, - 0xbd, 0x91, 0x41, 0xfc, 0xb1, 0x7e, 0xf3, 0xc7, 0x66, 0xcb, 0x17, 0xbb, - 0xc8, 0xdf, 0xbc, 0x58, 0xbf, 0xfb, 0x02, 0x31, 0xbc, 0x59, 0xb3, 0x12, - 0xc5, 0xa5, 0x62, 0xff, 0x73, 0x3e, 0xfc, 0x16, 0xcb, 0x17, 0xcf, 0x1d, - 0x9b, 0x2c, 0x5c, 0xdd, 0x18, 0x98, 0x54, 0x6a, 0x2c, 0xd8, 0xb4, 0x68, - 0xbc, 0x11, 0xf1, 0xad, 0xcd, 0xd2, 0xc5, 0x62, 0xa1, 0x5e, 0x8f, 0x39, - 0x1a, 0xaf, 0x9b, 0x2c, 0xe3, 0x5c, 0x94, 0xdc, 0xbf, 0xa6, 0xc8, 0x91, - 0x3e, 0x4a, 0x50, 0xce, 0xe1, 0x3f, 0xa5, 0x2b, 0x5f, 0xf7, 0xdf, 0xdc, - 0x6e, 0x80, 0x12, 0xc5, 0xe1, 0xb6, 0xcb, 0x15, 0xb9, 0xed, 0x06, 0x79, - 0x76, 0x01, 0x62, 0xda, 0xd8, 0xdd, 0x80, 0x92, 0xff, 0xfb, 0xb8, 0xf3, - 0x25, 0x11, 0x85, 0x27, 0xd6, 0x2c, 0x5f, 0xfe, 0xdb, 0x4f, 0xed, 0x85, - 0xa8, 0x72, 0x3d, 0xd6, 0x29, 0x91, 0x48, 0x25, 0x3a, 0x96, 0x41, 0xa6, - 0x18, 0x3a, 0xaf, 0xe7, 0x69, 0x5a, 0x31, 0xc2, 0x86, 0x65, 0xff, 0x60, - 0x6c, 0xdd, 0x33, 0x04, 0xb1, 0x7f, 0x67, 0xb0, 0x9a, 0x25, 0x8b, 0xfb, - 0x4f, 0xb9, 0x4f, 0xd6, 0x2f, 0xf8, 0x4d, 0xe6, 0x83, 0x75, 0x05, 0x8b, - 0xff, 0x8c, 0xe6, 0xff, 0x70, 0xb0, 0xd9, 0xe2, 0xc5, 0xfd, 0x08, 0xbe, - 0xfd, 0x79, 0x62, 0xf8, 0x3c, 0xeb, 0xcb, 0x15, 0x27, 0xac, 0xc6, 0x37, - 0x6b, 0x8b, 0x15, 0x29, 0xd3, 0x40, 0xeb, 0x0b, 0x77, 0x2e, 0xf9, 0xd7, - 0x21, 0x3f, 0x1c, 0x41, 0x7f, 0x9c, 0x78, 0x73, 0x30, 0x6b, 0x17, 0x37, - 0x16, 0x2f, 0xf0, 0x5c, 0xf1, 0x66, 0x6e, 0xb1, 0x7e, 0x70, 0xa3, 0x7e, - 0xf6, 0x37, 0x58, 0xbf, 0xfe, 0x16, 0xb5, 0x25, 0x86, 0xbf, 0xff, 0x81, - 0xac, 0x5b, 0xbf, 0x58, 0xad, 0x1f, 0x40, 0x94, 0x6f, 0xa7, 0x53, 0x12, - 0xc5, 0xfe, 0x93, 0x02, 0x62, 0x29, 0x58, 0xbc, 0x52, 0x75, 0x8b, 0x4a, - 0xc5, 0x44, 0x6b, 0x4e, 0x39, 0x7f, 0x8e, 0x22, 0xf7, 0x05, 0xa5, 0x8a, - 0x82, 0xa1, 0xd1, 0x9a, 0x60, 0xb9, 0xa6, 0xba, 0x85, 0x09, 0xc8, 0x80, - 0x46, 0x4c, 0x11, 0xc4, 0x57, 0xef, 0xb1, 0xe4, 0x96, 0x2f, 0xbb, 0xbf, - 0x24, 0xb1, 0x6d, 0x2c, 0x5e, 0xd6, 0x62, 0xc5, 0x6c, 0x7a, 0x60, 0x25, - 0xee, 0x12, 0xbf, 0xff, 0xba, 0xe4, 0xc3, 0x59, 0xb4, 0xeb, 0x3c, 0xfd, - 0x04, 0xb1, 0x63, 0x56, 0x2b, 0x63, 0xf2, 0x25, 0xfb, 0xb9, 0xc5, 0x8b, - 0xff, 0xd8, 0x32, 0x66, 0x0b, 0xdd, 0x42, 0x42, 0x58, 0xbb, 0xa8, 0x68, - 0xf9, 0x3e, 0x31, 0x7d, 0x14, 0x1b, 0x4b, 0x17, 0xbb, 0xf8, 0xe7, 0x58, - 0xa0, 0x1e, 0x48, 0x89, 0x2f, 0x87, 0xb6, 0x04, 0xb1, 0x52, 0x9a, 0x2e, - 0x42, 0x19, 0xde, 0x04, 0x45, 0x7d, 0xbb, 0x67, 0x16, 0x2f, 0xfd, 0xb4, - 0x9b, 0xfc, 0x21, 0x60, 0xd6, 0x2f, 0xfc, 0x23, 0xfe, 0x4f, 0x14, 0x7b, - 0x8d, 0x62, 0x89, 0x10, 0x9d, 0xc8, 0x17, 0xfd, 0x87, 0xcd, 0xe7, 0xf2, - 0x75, 0x8b, 0xff, 0x98, 0xb7, 0xe1, 0x67, 0x38, 0xfd, 0x96, 0x2d, 0xef, - 0x9f, 0xfb, 0x1c, 0xdf, 0xb2, 0x28, 0x9b, 0x8b, 0x17, 0xff, 0xd9, 0xee, - 0xa1, 0x20, 0x04, 0x8f, 0xe2, 0xee, 0x58, 0xaf, 0x9f, 0xf9, 0x15, 0x56, - 0xc8, 0xc7, 0xea, 0x14, 0xd5, 0x8a, 0x8f, 0x1e, 0x14, 0xed, 0x1b, 0x5d, - 0xfd, 0x91, 0xfb, 0xfd, 0xfb, 0x96, 0x2f, 0xf8, 0xa2, 0xc1, 0xc5, 0x07, - 0xfa, 0xc5, 0x9c, 0x8f, 0xc0, 0x46, 0xb7, 0xf9, 0x86, 0x53, 0x07, 0x25, - 0x8b, 0xf3, 0x6d, 0xb4, 0xf4, 0xb1, 0x5b, 0x1e, 0xe7, 0x8c, 0x6f, 0x82, - 0xf3, 0xec, 0xb1, 0x52, 0x79, 0x0c, 0x47, 0x7f, 0x17, 0x50, 0xf0, 0x86, - 0xb1, 0x7e, 0x08, 0x4d, 0xa1, 0xac, 0x5f, 0xee, 0x3f, 0xa2, 0x29, 0x3a, - 0xc5, 0x11, 0xef, 0x70, 0xaa, 0xfd, 0x1f, 0x84, 0x77, 0x58, 0xa9, 0x46, - 0xcb, 0xc2, 0x39, 0x88, 0x6f, 0x8a, 0x70, 0x25, 0x8b, 0xc5, 0x80, 0x58, - 0xbf, 0xfe, 0x73, 0x23, 0xdf, 0x63, 0x3f, 0x91, 0x16, 0x04, 0xb1, 0x7d, - 0x16, 0x66, 0xcb, 0x17, 0xee, 0x3f, 0x8a, 0x56, 0x2e, 0xcf, 0xf0, 0xf2, - 0xfc, 0x49, 0x60, 0xbb, 0xd4, 0xc3, 0x74, 0x45, 0xf1, 0xcf, 0x42, 0x8a, - 0xfe, 0x0b, 0xc5, 0x27, 0xe2, 0xc5, 0x31, 0xff, 0x09, 0x3e, 0xfd, 0x17, - 0xf0, 0x0c, 0xb1, 0x52, 0xc8, 0xda, 0x84, 0x7d, 0x59, 0x29, 0xf2, 0x3e, - 0x15, 0x5a, 0x86, 0x57, 0xe1, 0xf2, 0x51, 0xde, 0xf6, 0x21, 0xbf, 0xff, - 0xef, 0xe7, 0xbc, 0xdb, 0x67, 0x8e, 0xe2, 0x28, 0x8b, 0x02, 0x58, 0xbf, - 0xe2, 0xc0, 0xbf, 0x87, 0x9e, 0x2c, 0x5f, 0xf6, 0x3c, 0x3f, 0x3f, 0x73, - 0x56, 0x2f, 0xf1, 0x30, 0x39, 0xbf, 0xde, 0x23, 0xf2, 0x23, 0x9a, 0x1a, - 0x64, 0x9e, 0x86, 0xd5, 0xfe, 0xf7, 0x50, 0xce, 0xc2, 0xfa, 0xc5, 0xe1, - 0xff, 0x16, 0x2f, 0xef, 0x7f, 0x21, 0x00, 0x2c, 0x5f, 0xe6, 0x6d, 0x8f, - 0x3e, 0xe2, 0xc5, 0xfb, 0x18, 0xb2, 0x3d, 0x62, 0xfe, 0x2c, 0x1f, 0xe7, - 0xb1, 0xcf, 0x77, 0xe6, 0x95, 0x29, 0xa7, 0x8c, 0xa7, 0x0e, 0x08, 0x74, - 0x28, 0x46, 0x5f, 0xe2, 0x66, 0xed, 0x0e, 0xc0, 0x58, 0xbf, 0xfe, 0xe4, - 0xc5, 0xf9, 0xec, 0x58, 0x3f, 0xcf, 0x16, 0x28, 0x68, 0x89, 0xf1, 0xbd, - 0xf6, 0xf2, 0x0e, 0x2c, 0x5f, 0xf6, 0x6f, 0x9e, 0xfb, 0x30, 0x4b, 0x17, - 0x48, 0x16, 0x2f, 0x7d, 0xc2, 0xd1, 0xe8, 0xc7, 0x1d, 0x5f, 0xfe, 0x3b, - 0xf5, 0x0e, 0x16, 0x6f, 0xe1, 0x12, 0xc5, 0xfe, 0xe6, 0x47, 0x81, 0x9a, - 0x25, 0x8b, 0xff, 0xf7, 0x23, 0xdc, 0xb3, 0xb3, 0x70, 0x21, 0x63, 0xfd, - 0x62, 0xff, 0xf6, 0x7b, 0x8f, 0x9a, 0x90, 0x71, 0xfb, 0x2c, 0x56, 0x27, - 0xef, 0xb9, 0x1c, 0x4e, 0xa7, 0x37, 0xfa, 0x67, 0x0d, 0xe3, 0x96, 0xaf, - 0x8e, 0x39, 0x82, 0xc5, 0xff, 0xbf, 0x9d, 0xa3, 0xdc, 0x43, 0xc1, 0xac, - 0x5b, 0xcb, 0x15, 0x27, 0xf3, 0xe2, 0x30, 0xd1, 0x2f, 0xff, 0xfa, 0x1c, - 0x03, 0x79, 0xb5, 0xc2, 0xcf, 0x08, 0x07, 0x68, 0x2c, 0x5b, 0xcb, 0x17, - 0xbf, 0x9e, 0x58, 0xbf, 0xee, 0x0b, 0x50, 0xdc, 0x9b, 0xb9, 0x62, 0xe2, - 0xc1, 0x9e, 0xdf, 0x87, 0x6c, 0xdd, 0x26, 0x00, 0xcc, 0xfe, 0x6d, 0xbe, - 0x87, 0x1c, 0x6b, 0x17, 0x3f, 0x16, 0x2c, 0x07, 0x37, 0x47, 0x23, 0xa9, - 0x5d, 0x75, 0xc9, 0x59, 0xcf, 0x0e, 0x26, 0x8c, 0xbc, 0x4e, 0x17, 0x3c, - 0x4b, 0x16, 0x75, 0x8b, 0xc5, 0xbb, 0x68, 0xd4, 0xf0, 0x62, 0xff, 0xfe, - 0xd1, 0x4c, 0xf4, 0x67, 0x3c, 0x52, 0x3f, 0xcf, 0x96, 0x2e, 0x7f, 0xac, - 0x5f, 0xff, 0x9c, 0xdc, 0x19, 0xd9, 0xb6, 0xd6, 0x00, 0x12, 0xb1, 0x77, - 0xc2, 0x58, 0xbe, 0x81, 0x30, 0x6b, 0x17, 0xf3, 0x7b, 0x9e, 0x7d, 0x96, - 0x2f, 0xf0, 0xd8, 0x1a, 0xd3, 0x01, 0x62, 0xfb, 0x5b, 0xc7, 0x84, 0xb1, - 0x7c, 0x6f, 0x7a, 0xc1, 0x2c, 0x5f, 0xdf, 0xc8, 0x76, 0x69, 0x58, 0xac, - 0x44, 0x13, 0x14, 0xf8, 0xaa, 0x9d, 0x1c, 0x85, 0x0b, 0x6a, 0x95, 0x4e, - 0x18, 0x65, 0x1e, 0xb9, 0xa1, 0x73, 0xab, 0x30, 0xc9, 0x11, 0x8a, 0x31, - 0x3b, 0xf6, 0x3f, 0xe4, 0x6b, 0x17, 0x4c, 0x7a, 0xc5, 0xf6, 0x8b, 0x3b, - 0x68, 0xf0, 0x7e, 0x4f, 0x7c, 0xc1, 0x42, 0x3d, 0x62, 0xf3, 0x47, 0xba, - 0xc5, 0xff, 0x83, 0xf1, 0xae, 0x6c, 0xe1, 0x4a, 0xc5, 0xba, 0x58, 0xbf, - 0xf3, 0x85, 0xfc, 0xe7, 0x3f, 0x31, 0xeb, 0x17, 0xff, 0x9d, 0x9a, 0x2f, - 0x7f, 0x21, 0xf7, 0xec, 0xb1, 0x7f, 0xfd, 0x9e, 0xe6, 0x05, 0x9f, 0x7d, - 0x0a, 0x40, 0xb1, 0x7f, 0xfc, 0x59, 0xee, 0x31, 0xf5, 0x8f, 0xf9, 0x1a, - 0xc5, 0x4a, 0x68, 0x1b, 0x89, 0xc7, 0xa1, 0x92, 0x67, 0x94, 0x2f, 0xc1, - 0xf8, 0xa4, 0x0b, 0x15, 0x2a, 0x9d, 0x86, 0x75, 0xd1, 0x3e, 0x87, 0xcf, - 0x1c, 0x07, 0x64, 0xdb, 0xf4, 0xfb, 0x3f, 0x2b, 0x17, 0xf9, 0xb4, 0x01, - 0x6e, 0x77, 0x58, 0xbf, 0xff, 0xdd, 0x0f, 0x77, 0x1b, 0x7f, 0x36, 0x2c, - 0xed, 0x1e, 0xfd, 0x96, 0x2f, 0xda, 0x33, 0x7c, 0xec, 0xb1, 0x7f, 0xc5, - 0x17, 0xf0, 0xb1, 0xc6, 0xb1, 0x58, 0x7c, 0xa2, 0x2d, 0xbf, 0xfc, 0xe4, - 0x4d, 0xe6, 0x39, 0x66, 0x69, 0x62, 0xf6, 0xd1, 0x62, 0xc5, 0xff, 0xf7, - 0x6c, 0xdf, 0x4c, 0xdd, 0x43, 0x91, 0xee, 0x4b, 0x15, 0x27, 0xea, 0xc3, - 0xf7, 0xff, 0x47, 0xbe, 0x7e, 0x7b, 0x73, 0xf3, 0xd2, 0xc5, 0x4a, 0xa4, - 0xac, 0x35, 0x78, 0x67, 0xc7, 0x90, 0xfe, 0x17, 0x7c, 0x20, 0xbe, 0x9f, - 0x61, 0xd6, 0x2f, 0xfd, 0xcf, 0xe0, 0x5f, 0x70, 0x8b, 0x16, 0x28, 0x07, - 0xc5, 0xd8, 0x8a, 0xfd, 0xd4, 0x0a, 0x4e, 0xb1, 0x7f, 0xff, 0xff, 0x8f, - 0x1e, 0xff, 0x06, 0x31, 0x6f, 0x9d, 0x43, 0x8f, 0xee, 0x3f, 0x50, 0x29, - 0xfc, 0xac, 0x5f, 0xd9, 0xf7, 0xcd, 0x44, 0xb1, 0x7f, 0xec, 0xea, 0x1c, - 0x7f, 0x31, 0x62, 0xc5, 0xfe, 0xc3, 0xff, 0x22, 0x68, 0x96, 0x2f, 0xcf, - 0xb7, 0xe6, 0x4c, 0x3f, 0x3f, 0x1f, 0x51, 0x88, 0xe0, 0xc8, 0x50, 0xdf, - 0x4f, 0x3b, 0x12, 0xc5, 0xf4, 0xf3, 0xb1, 0x2c, 0x5d, 0xd8, 0x96, 0x2f, - 0xf3, 0xfb, 0x99, 0xdb, 0x36, 0xef, 0x4f, 0x86, 0x36, 0x24, 0xe1, 0x25, - 0xff, 0xef, 0xcf, 0x59, 0xa9, 0xf3, 0xee, 0xe3, 0x58, 0xbc, 0x2d, 0x44, - 0xb1, 0x7a, 0x2c, 0xf0, 0xcf, 0xab, 0x89, 0x77, 0xff, 0xfe, 0x2d, 0xcc, - 0xd4, 0xed, 0xec, 0x6e, 0xc6, 0x4e, 0x17, 0xb9, 0x2b, 0x15, 0x88, 0xa4, - 0x63, 0x4a, 0x1a, 0xa1, 0xbd, 0xe1, 0x13, 0xf8, 0xdc, 0x6f, 0xc5, 0x14, - 0x1c, 0x96, 0x29, 0xcf, 0x99, 0x8f, 0xaa, 0x57, 0x0f, 0x30, 0xa7, 0xf2, - 0xfc, 0xef, 0xe7, 0xda, 0x4a, 0x62, 0x58, 0xbf, 0xbd, 0x91, 0x70, 0x47, - 0x58, 0xbb, 0xaf, 0xc7, 0x9e, 0xf3, 0x17, 0x5f, 0x36, 0xbe, 0x25, 0x8b, - 0xff, 0xe7, 0xf7, 0x1f, 0xd3, 0xee, 0x16, 0x60, 0x4b, 0x17, 0xfe, 0xc2, - 0xdf, 0xee, 0x3c, 0xd4, 0x4b, 0x15, 0x28, 0xe3, 0x81, 0x8e, 0x11, 0xc4, - 0x9f, 0x7f, 0xff, 0xe7, 0x2c, 0xf4, 0x9c, 0x21, 0x36, 0xc6, 0x67, 0xdf, - 0x5f, 0x65, 0x8b, 0xf1, 0xa6, 0xb7, 0xb8, 0xb1, 0x7f, 0xfd, 0x9b, 0x30, - 0xdc, 0x5b, 0xe9, 0xc2, 0x89, 0xd6, 0x2a, 0x51, 0xd7, 0x8d, 0xba, 0x2b, - 0xbf, 0x8e, 0xc3, 0xfb, 0x12, 0xc5, 0xcd, 0xdc, 0xb1, 0x7b, 0xee, 0x12, - 0xc5, 0xfb, 0xa8, 0x70, 0xb0, 0xe6, 0xe3, 0xc3, 0x57, 0xfd, 0xd4, 0x39, - 0x16, 0x9b, 0xdc, 0x58, 0xbf, 0xff, 0xff, 0xff, 0xfb, 0x59, 0x16, 0x00, - 0xcf, 0xb9, 0x9b, 0xfd, 0xfe, 0xc1, 0x18, 0x09, 0x88, 0xcf, 0xe6, 0x18, - 0x58, 0x3f, 0xb1, 0x99, 0x81, 0x79, 0x62, 0xff, 0xfe, 0xfb, 0xfd, 0x82, - 0xe7, 0xdf, 0xbb, 0x37, 0xfe, 0x62, 0xc5, 0xff, 0xbf, 0x33, 0xee, 0x47, - 0xb9, 0x76, 0x58, 0xbe, 0x66, 0x21, 0xac, 0x5e, 0x71, 0x74, 0x33, 0xe4, - 0x3a, 0x1d, 0xfd, 0x9d, 0xc6, 0x7d, 0xcc, 0xdd, 0x1e, 0xfc, 0x86, 0x1d, - 0xff, 0xfd, 0xf7, 0xfb, 0x05, 0xcf, 0xbf, 0x76, 0x6f, 0xfc, 0xc5, 0x8b, - 0xff, 0x7e, 0x67, 0xdc, 0x8f, 0x72, 0xec, 0xb1, 0x7c, 0xcc, 0x43, 0x58, - 0xbc, 0xe2, 0xe8, 0x67, 0xc8, 0x74, 0x3b, 0xff, 0xcd, 0xd1, 0x83, 0x71, - 0x77, 0x19, 0xf7, 0x33, 0x74, 0x7b, 0xf2, 0x18, 0x77, 0xff, 0xff, 0x02, - 0x62, 0x33, 0xf9, 0x86, 0x16, 0x0f, 0xec, 0x66, 0x60, 0x5e, 0x58, 0xbf, - 0xef, 0xbf, 0x76, 0x6f, 0xfc, 0xc5, 0x8b, 0xf7, 0xdf, 0xec, 0x11, 0x88, - 0xb1, 0xe3, 0xad, 0xff, 0xf9, 0xc5, 0xd0, 0xff, 0x33, 0xee, 0x47, 0xb9, - 0x76, 0x58, 0xbf, 0xff, 0xb3, 0xd2, 0x16, 0x78, 0xa4, 0x2e, 0xe3, 0x3e, - 0xe6, 0x6e, 0x89, 0xce, 0x20, 0xdf, 0xff, 0xdf, 0x7f, 0xb0, 0x5c, 0xfb, - 0xf7, 0x66, 0xff, 0xcc, 0x58, 0xbf, 0xe7, 0x17, 0x47, 0x66, 0x21, 0xac, - 0x5f, 0xf6, 0x39, 0x1a, 0x67, 0xdc, 0xcd, 0xd1, 0x31, 0xc5, 0xfb, 0xdf, - 0x9d, 0x62, 0xe3, 0x3e, 0xa3, 0x47, 0x28, 0xef, 0x39, 0x18, 0x8d, 0xff, - 0xff, 0xff, 0x7d, 0xfe, 0xc1, 0x18, 0x09, 0x88, 0xcf, 0xe6, 0x18, 0x58, - 0x3f, 0xb1, 0x99, 0x81, 0x79, 0x62, 0xff, 0xdf, 0x99, 0xf7, 0x23, 0xdc, - 0xbb, 0x2c, 0x5f, 0x33, 0x10, 0xd6, 0x2f, 0x38, 0xba, 0x19, 0xf2, 0x1d, - 0x0e, 0xff, 0xed, 0x6b, 0x1c, 0xb6, 0x33, 0xee, 0x66, 0xe9, 0x98, 0xf2, - 0x1f, 0xb7, 0xff, 0xff, 0xfd, 0xf7, 0xfb, 0x04, 0x60, 0x26, 0x23, 0x3f, - 0x98, 0x61, 0x60, 0xfe, 0xc6, 0x66, 0x05, 0xe5, 0x8b, 0xff, 0x7e, 0x67, - 0xdc, 0x8f, 0x72, 0xec, 0xb1, 0x7c, 0xcc, 0x43, 0x58, 0xbc, 0xe2, 0xe8, - 0x67, 0xc8, 0x74, 0x3b, 0xff, 0xd1, 0xef, 0xdc, 0x6e, 0xb0, 0x66, 0x7d, - 0xcc, 0xdd, 0x33, 0x1e, 0x43, 0xf6, 0xff, 0xff, 0xff, 0xbe, 0xff, 0x60, - 0x8c, 0x04, 0xc4, 0x67, 0xf3, 0x0c, 0x2c, 0x1f, 0xd8, 0xcc, 0xc0, 0xbc, - 0xb1, 0x7f, 0xef, 0xcc, 0xfb, 0x91, 0xee, 0x5d, 0x96, 0x2f, 0x99, 0x88, - 0x6b, 0x17, 0x9c, 0x5d, 0x0c, 0xf9, 0x0e, 0x87, 0x7f, 0xf4, 0x8f, 0xf9, - 0x9d, 0x8c, 0xfb, 0x99, 0xba, 0x66, 0x3c, 0x87, 0xed, 0xff, 0xff, 0xc0, - 0x98, 0x8c, 0xfe, 0x61, 0x85, 0x83, 0xfb, 0x19, 0x98, 0x17, 0x96, 0x2f, - 0xfb, 0xef, 0xdd, 0x9b, 0xff, 0x31, 0x62, 0xff, 0xff, 0xff, 0x6b, 0x81, - 0x91, 0xa6, 0x7b, 0x98, 0x10, 0xc5, 0xc3, 0x3e, 0xe6, 0x6f, 0xf7, 0xfb, - 0x04, 0x62, 0x2c, 0x78, 0xeb, 0x7f, 0xff, 0xf0, 0x26, 0x23, 0x3f, 0x98, - 0x61, 0x60, 0xfe, 0xc6, 0x66, 0x05, 0xe5, 0x8b, 0xfe, 0xfb, 0xf7, 0x66, + 0x39, 0xbe, 0xb1, 0x7b, 0xe2, 0x35, 0x62, 0xfa, 0x7c, 0xfd, 0x16, 0x2a, + 0x4f, 0x0f, 0x83, 0xf5, 0xba, 0x23, 0xfc, 0xdd, 0x77, 0xfe, 0xb1, 0x7e, + 0x90, 0xbd, 0x9f, 0x58, 0xb8, 0x3c, 0x58, 0xba, 0x3c, 0xeb, 0x17, 0xc3, + 0xce, 0xfc, 0xb1, 0x52, 0x7a, 0xfd, 0x8c, 0x38, 0xdd, 0x18, 0xa8, 0x3f, + 0x09, 0xcd, 0x24, 0x78, 0x6d, 0x75, 0xe4, 0x84, 0x31, 0xc8, 0x40, 0x5f, + 0xf4, 0x69, 0xad, 0xbc, 0x53, 0x1a, 0x76, 0xb1, 0x7f, 0x14, 0x82, 0x1b, + 0xec, 0xb1, 0x7f, 0xf4, 0xcf, 0x57, 0xf1, 0x87, 0x98, 0x75, 0x8b, 0xbd, + 0xc8, 0x8f, 0xd7, 0xe6, 0x16, 0xdd, 0x62, 0xf0, 0x23, 0x7f, 0xac, 0x57, + 0x5d, 0x9b, 0x6e, 0x09, 0xdf, 0xda, 0xdb, 0x7f, 0xb4, 0x7a, 0xc5, 0xf0, + 0xb9, 0xfc, 0x58, 0xbf, 0xdf, 0x9d, 0xfe, 0x26, 0x0d, 0x62, 0xfe, 0x67, + 0xef, 0x92, 0x6a, 0xc5, 0xe7, 0xf8, 0x86, 0x7c, 0xbf, 0x36, 0xad, 0x26, + 0x2e, 0xc5, 0x04, 0x69, 0xe8, 0x44, 0x5f, 0xfe, 0xce, 0xac, 0xdf, 0xdd, + 0xc3, 0x08, 0x0c, 0xb1, 0x7f, 0xff, 0xf3, 0x97, 0x4c, 0x19, 0x33, 0x74, + 0xc8, 0xff, 0x47, 0xbf, 0x8a, 0x40, 0xb1, 0x79, 0xc4, 0x05, 0x8b, 0xff, + 0xd9, 0xd1, 0xb3, 0x53, 0xe7, 0xdd, 0xc6, 0xb1, 0x6e, 0xe3, 0xd1, 0xc1, + 0x13, 0xc1, 0x0e, 0xde, 0x3b, 0xe9, 0x62, 0xb0, 0xf5, 0xc0, 0x75, 0x7b, + 0x18, 0x96, 0x2f, 0x7e, 0x62, 0x58, 0xb9, 0xfc, 0xe6, 0xe5, 0x86, 0xee, + 0x80, 0xd6, 0x2f, 0xf6, 0xc2, 0x1f, 0xf3, 0xa7, 0x16, 0x2f, 0xfe, 0xc0, + 0xb8, 0x59, 0x14, 0x04, 0x5e, 0x58, 0xbe, 0x84, 0x7b, 0x9d, 0x62, 0xfb, + 0x8c, 0xd1, 0xeb, 0x17, 0xdf, 0xfc, 0xc7, 0xac, 0x5f, 0xb3, 0xf1, 0xee, + 0x4c, 0x7e, 0x3e, 0x26, 0x0c, 0x96, 0xb6, 0x4c, 0xf0, 0x8e, 0x3a, 0x42, + 0xde, 0xff, 0xfd, 0xbe, 0x74, 0x7d, 0x47, 0x36, 0xd1, 0xda, 0xcf, 0xf1, + 0x62, 0xb1, 0x13, 0x0c, 0x71, 0x7e, 0x88, 0xef, 0xae, 0x2c, 0x5f, 0xf7, + 0xdf, 0xdd, 0xc1, 0xfd, 0xc5, 0x8b, 0xff, 0xff, 0xba, 0x8b, 0x1b, 0xa1, + 0x67, 0x4f, 0xe1, 0x63, 0xe9, 0xbb, 0x87, 0x16, 0x37, 0x37, 0x77, 0xfb, + 0x36, 0x67, 0xdf, 0x09, 0x62, 0xb1, 0x17, 0x5d, 0x21, 0x0f, 0x7f, 0xd3, + 0xdf, 0xb6, 0x9e, 0xf0, 0x96, 0x2f, 0xcc, 0xfb, 0xe1, 0x2c, 0x5f, 0x3e, + 0xf8, 0x4b, 0x16, 0xe1, 0x87, 0x92, 0xc4, 0xf7, 0xff, 0xfd, 0xdf, 0xe7, + 0xa4, 0x58, 0xdd, 0xf3, 0x1c, 0xb6, 0xcc, 0xea, 0x58, 0xa9, 0x44, 0xab, + 0x14, 0x5f, 0xfe, 0xfc, 0xf7, 0x9b, 0x10, 0x85, 0xe9, 0xfa, 0xc5, 0xff, + 0x3e, 0xff, 0x7f, 0x71, 0xbb, 0x58, 0xbe, 0xc1, 0xe7, 0xf7, 0x44, 0x3f, + 0xd3, 0x2b, 0x15, 0x12, 0x39, 0x4e, 0xa3, 0x19, 0x28, 0x54, 0x5f, 0xed, + 0xdc, 0x2c, 0x89, 0xa3, 0xd6, 0x2b, 0x48, 0x80, 0xfa, 0x3d, 0xff, 0xff, + 0x8b, 0x0e, 0x42, 0x01, 0xb1, 0xee, 0x43, 0xcd, 0x82, 0x13, 0x6c, 0xb1, + 0x5d, 0x62, 0xe2, 0xc4, 0xcb, 0xc3, 0xc2, 0x3b, 0xff, 0xfd, 0x21, 0x7f, + 0x34, 0xc7, 0xcf, 0x7f, 0x30, 0xf9, 0xba, 0xc5, 0xff, 0xee, 0x6e, 0xcd, + 0xd3, 0x58, 0xff, 0x91, 0xac, 0x5f, 0xfe, 0xce, 0xa2, 0xce, 0x85, 0x80, + 0x3c, 0xc1, 0x62, 0xb7, 0x44, 0xcc, 0x49, 0x95, 0x29, 0x8f, 0xe4, 0x3e, + 0xaf, 0xe2, 0xcf, 0x73, 0x02, 0x58, 0xbf, 0x04, 0xc4, 0x52, 0xb1, 0x61, + 0x2c, 0x5a, 0x06, 0x1b, 0x9e, 0x13, 0xd9, 0xbb, 0x44, 0x7e, 0x99, 0xea, + 0x34, 0x66, 0x90, 0xcc, 0x2e, 0xf2, 0x37, 0xcd, 0xd0, 0x5e, 0x38, 0x58, + 0xf5, 0xa8, 0x8a, 0xb5, 0x1f, 0x67, 0xe7, 0x1e, 0x4a, 0x35, 0xc1, 0x42, + 0xda, 0xee, 0xf8, 0xb1, 0x7b, 0x42, 0x82, 0xc5, 0xbf, 0x26, 0xdd, 0xc6, + 0x6f, 0xfb, 0x67, 0xfc, 0x4d, 0x07, 0xfa, 0xc5, 0xfc, 0x02, 0xcd, 0x83, + 0x82, 0xc5, 0xf0, 0x23, 0x85, 0xe5, 0x8a, 0xc3, 0xd7, 0xd1, 0x85, 0xc1, + 0x9d, 0x62, 0xfc, 0xe3, 0xfe, 0x71, 0x62, 0xdd, 0x0c, 0x3c, 0x1f, 0x8c, + 0xdf, 0xff, 0xf0, 0x85, 0xd9, 0x67, 0x43, 0x07, 0x9e, 0x86, 0x7f, 0xed, + 0x05, 0x8b, 0xfe, 0x3f, 0x3f, 0x9e, 0x29, 0x3a, 0xc5, 0xe2, 0xce, 0x12, + 0x29, 0x23, 0x9a, 0xe9, 0x93, 0x04, 0xe9, 0x0c, 0xfb, 0xff, 0xda, 0xd4, + 0xed, 0x81, 0x77, 0x0f, 0x08, 0x6b, 0x17, 0xd9, 0x84, 0x6a, 0xc5, 0xff, + 0x9c, 0xdc, 0x83, 0xb7, 0x4f, 0xba, 0xc5, 0x3a, 0x2c, 0x74, 0x9f, 0xf2, + 0x2b, 0xff, 0x6e, 0xfa, 0xd6, 0x7a, 0x19, 0xc5, 0x8a, 0x93, 0xef, 0xc2, + 0xfb, 0xf3, 0x1b, 0x1c, 0xe6, 0xac, 0x54, 0xaa, 0xfd, 0x78, 0xd9, 0xbf, + 0x1a, 0x51, 0x10, 0x5f, 0xe2, 0xf4, 0x6c, 0xde, 0x14, 0xac, 0x5f, 0xff, + 0xd9, 0xd0, 0xb0, 0x7f, 0x9e, 0x93, 0xa7, 0xf7, 0xa5, 0x62, 0xfb, 0x98, + 0x46, 0xac, 0x5f, 0x67, 0x7e, 0x65, 0x8b, 0x43, 0xb3, 0xc6, 0x22, 0x3b, + 0xf8, 0x7e, 0x35, 0xc8, 0x6b, 0x15, 0x29, 0x99, 0x68, 0xe1, 0xa1, 0x46, + 0x22, 0x8b, 0xe3, 0xb8, 0x5c, 0x58, 0xbf, 0xcd, 0xb7, 0xb8, 0xcd, 0x1e, + 0xb1, 0x5b, 0x1e, 0xdf, 0x42, 0x4b, 0xfb, 0xef, 0x13, 0x34, 0x16, 0x2e, + 0x3c, 0x16, 0x2e, 0x7d, 0x6e, 0x78, 0xc1, 0x97, 0x5f, 0xfa, 0x4f, 0xbf, + 0xdf, 0xd9, 0x87, 0x58, 0xbe, 0xe1, 0xdc, 0x0b, 0x15, 0xf3, 0xe2, 0x01, + 0xfd, 0xff, 0xce, 0x5b, 0x66, 0xf3, 0xd0, 0x53, 0xc5, 0x8b, 0xed, 0x6d, + 0x26, 0xac, 0x59, 0xd6, 0x2e, 0x63, 0x70, 0xdb, 0x78, 0x96, 0xa5, 0x19, + 0x63, 0x22, 0x27, 0xdb, 0xfd, 0x9b, 0xcc, 0x7e, 0xcc, 0x4b, 0x17, 0xf8, + 0xa6, 0x63, 0xf5, 0x27, 0x58, 0xbf, 0xc5, 0xbb, 0x79, 0x8d, 0x30, 0x8f, + 0xb3, 0x86, 0xf7, 0xff, 0xb3, 0x80, 0x92, 0xf0, 0xff, 0x25, 0xb2, 0xc5, + 0x4a, 0x25, 0x74, 0x97, 0x7f, 0xf8, 0xb3, 0xe1, 0xf3, 0x82, 0x3f, 0x1b, + 0xb5, 0x8b, 0xe0, 0x63, 0xb2, 0xc5, 0xe0, 0x38, 0x6b, 0x17, 0xf6, 0x16, + 0x74, 0x7d, 0x2c, 0x5f, 0xff, 0x9c, 0xe3, 0x9f, 0xe7, 0x48, 0xf7, 0x21, + 0xe6, 0xcb, 0x17, 0xe9, 0x2f, 0x71, 0xf7, 0x44, 0x47, 0xcb, 0xaf, 0xba, + 0xa7, 0xfc, 0x58, 0xa3, 0x53, 0x9b, 0xdc, 0x89, 0x93, 0x40, 0x43, 0xe8, + 0x53, 0x75, 0x1f, 0xdf, 0xf3, 0x6b, 0x6f, 0xbe, 0x6a, 0x25, 0x8b, 0xff, + 0x99, 0x88, 0x1c, 0xc8, 0xf8, 0x99, 0x96, 0x2f, 0xa6, 0x19, 0xc5, 0x8b, + 0xff, 0xff, 0xf9, 0xff, 0x1e, 0xe5, 0x9e, 0xf4, 0xec, 0x32, 0x99, 0x07, + 0xa1, 0x84, 0x4d, 0x05, 0x8b, 0xfe, 0xcf, 0x61, 0xdb, 0x4f, 0x12, 0xc5, + 0x62, 0x30, 0x4a, 0x11, 0x15, 0xba, 0x71, 0x51, 0x1d, 0xfd, 0x1b, 0xd0, + 0xe3, 0xbf, 0x85, 0xd7, 0x94, 0xfb, 0x8b, 0x17, 0xe1, 0xeb, 0x4e, 0x75, + 0x8a, 0x93, 0xdc, 0x0c, 0xce, 0xfd, 0x0e, 0x6d, 0x81, 0x2c, 0x58, 0x96, + 0x2f, 0xfe, 0x39, 0x31, 0xbc, 0x71, 0x73, 0x23, 0xd6, 0x2b, 0x0f, 0x65, + 0xc4, 0x6f, 0xdd, 0xc0, 0x4d, 0xe5, 0x8b, 0x48, 0xcf, 0x2b, 0xc4, 0x17, + 0xb3, 0x5b, 0x2c, 0x5e, 0x62, 0x89, 0x62, 0xbe, 0x6e, 0xd8, 0x7a, 0xf3, + 0x36, 0xea, 0x93, 0x40, 0xbf, 0xff, 0xd8, 0x39, 0xdd, 0xcb, 0x6e, 0x6f, + 0xf7, 0x18, 0xf0, 0x96, 0x2f, 0xcd, 0xad, 0xb0, 0x25, 0x8b, 0xcc, 0x17, + 0x51, 0x88, 0x8c, 0xdd, 0x8a, 0xfe, 0x04, 0x94, 0xfb, 0x8b, 0x17, 0xb5, + 0x3e, 0x58, 0xbf, 0xa4, 0x5e, 0x27, 0xe8, 0xb1, 0x7f, 0x7b, 0x98, 0x6b, + 0xea, 0x23, 0xcc, 0xd0, 0xed, 0x4a, 0xaf, 0xfd, 0xa1, 0x9c, 0x36, 0x2d, + 0xc8, 0x35, 0x0b, 0x60, 0x1d, 0x06, 0xf3, 0x7e, 0xdf, 0x9e, 0xcd, 0x2c, + 0x5f, 0xde, 0x33, 0x0d, 0x7d, 0x2c, 0x5e, 0x83, 0x81, 0x62, 0xfe, 0x9e, + 0xe0, 0x3d, 0x32, 0xc5, 0xfd, 0x26, 0xc7, 0xb8, 0x86, 0xb1, 0x6e, 0xc0, + 0x7c, 0x3e, 0x2f, 0xbf, 0x9f, 0xdf, 0x62, 0x35, 0x62, 0xa5, 0x32, 0xf7, + 0x2a, 0x88, 0xc1, 0x9f, 0xb8, 0x53, 0x7d, 0xf2, 0x68, 0xf5, 0x8b, 0xc2, + 0x16, 0x96, 0x2f, 0x14, 0xe9, 0x62, 0xed, 0x45, 0x11, 0xba, 0xe0, 0xf5, + 0xff, 0xfe, 0xe3, 0x17, 0xe7, 0xa7, 0xf3, 0xd8, 0xc5, 0xbe, 0x0d, 0x62, + 0xfd, 0x99, 0xec, 0x3a, 0xc5, 0xff, 0xfe, 0x79, 0xf3, 0xfe, 0x79, 0xfc, + 0xe6, 0xb3, 0x7c, 0xf2, 0xc5, 0xff, 0xd2, 0x0e, 0x16, 0x47, 0x8e, 0x7d, + 0xc5, 0x8b, 0x37, 0xd1, 0x9c, 0x44, 0xfc, 0x60, 0xa9, 0x4d, 0x8f, 0xf1, + 0x97, 0xdf, 0xfd, 0x3b, 0xc9, 0xf3, 0x5a, 0x60, 0xba, 0x96, 0x2b, 0x47, + 0xe5, 0xd4, 0x53, 0x7f, 0x6c, 0x64, 0x50, 0x9d, 0x96, 0x2f, 0xec, 0xe9, + 0x30, 0x9d, 0x2c, 0x5f, 0xbc, 0xc6, 0xfd, 0xd6, 0x2a, 0x55, 0x89, 0xe2, + 0xfb, 0xca, 0x04, 0x62, 0x52, 0x33, 0x11, 0x7d, 0xf8, 0x73, 0x13, 0x9d, + 0x62, 0xff, 0x40, 0xcf, 0xe6, 0x16, 0xeb, 0x17, 0xf0, 0x45, 0x9b, 0x07, + 0x05, 0x8b, 0xe0, 0xe3, 0xb3, 0x8b, 0x17, 0xf0, 0x85, 0xee, 0x34, 0x4b, + 0x17, 0xff, 0x73, 0x0d, 0x2c, 0xd9, 0xbd, 0x13, 0x2c, 0x5d, 0xee, 0x18, + 0x89, 0xd3, 0x93, 0xf8, 0xc2, 0xfd, 0x9c, 0xf6, 0x6e, 0xb1, 0x7e, 0x1e, + 0x01, 0xa5, 0x62, 0xff, 0xff, 0xcd, 0xa8, 0x71, 0xc7, 0x9a, 0xd9, 0xf9, + 0xf6, 0x07, 0x30, 0x96, 0x2a, 0x08, 0xbc, 0xc2, 0x9e, 0x13, 0xd4, 0xaa, + 0x2b, 0x73, 0x56, 0x86, 0x70, 0xa1, 0xf3, 0x7e, 0xd8, 0xec, 0xc4, 0xb1, + 0x7f, 0xdd, 0xfe, 0x7a, 0x7f, 0xb6, 0x8f, 0x58, 0xbf, 0xff, 0xfe, 0x34, + 0x98, 0xf3, 0xec, 0x3e, 0x0f, 0x23, 0xfc, 0x58, 0x00, 0x4c, 0x5e, 0x58, + 0xbf, 0xdd, 0x3f, 0x85, 0xb3, 0xf1, 0x62, 0xff, 0x03, 0x1f, 0x9c, 0x90, + 0x2c, 0x54, 0x9f, 0x4b, 0x1b, 0x54, 0xa6, 0xe5, 0x85, 0x0c, 0x83, 0xc8, + 0x74, 0xdf, 0xf8, 0x71, 0xd9, 0xc1, 0xfd, 0xf5, 0xb2, 0xc5, 0xff, 0xf6, + 0x05, 0xe3, 0xce, 0x7b, 0xf9, 0x85, 0xba, 0xc5, 0xff, 0x74, 0x3b, 0x0f, + 0x30, 0x8d, 0x58, 0xa9, 0x46, 0x7f, 0xd1, 0x19, 0x42, 0xfe, 0xe9, 0xac, + 0xf3, 0x76, 0xb1, 0x7f, 0xbb, 0xfe, 0x6e, 0x59, 0xb2, 0xc5, 0xee, 0xb3, + 0xad, 0x8d, 0x16, 0x2f, 0xb0, 0xa0, 0xeb, 0x17, 0xff, 0x66, 0xb4, 0xd0, + 0x0c, 0x9b, 0xdc, 0x58, 0xa9, 0x3e, 0x68, 0x10, 0xd6, 0x91, 0x69, 0xe8, + 0x49, 0xdf, 0xed, 0x00, 0x59, 0x14, 0x9d, 0x62, 0xa5, 0x34, 0x77, 0x87, + 0x53, 0x14, 0x5f, 0xfe, 0x16, 0xb3, 0xa1, 0x8f, 0x9a, 0xd4, 0xf4, 0x58, + 0xbf, 0xfb, 0x7f, 0xbc, 0x44, 0xc1, 0x67, 0x7e, 0x58, 0xbf, 0xbf, 0x3e, + 0xfc, 0xc4, 0xb1, 0x58, 0x7e, 0xf1, 0x24, 0x54, 0xb7, 0xa7, 0x9b, 0x12, + 0xc2, 0x5c, 0x78, 0xe3, 0x7a, 0xc8, 0x4e, 0x1a, 0xd7, 0xbc, 0x6b, 0x8f, + 0x2b, 0x2a, 0x3e, 0x3e, 0xb8, 0xa1, 0x43, 0xa9, 0x64, 0x27, 0x8e, 0x87, + 0xf2, 0xd7, 0x19, 0x6c, 0xa5, 0x2a, 0x72, 0x3b, 0x8f, 0x46, 0x1e, 0x22, + 0xee, 0x91, 0xbc, 0x04, 0x66, 0x1c, 0x31, 0xaf, 0xff, 0x49, 0x6e, 0x3f, + 0xcf, 0x7f, 0x9e, 0x98, 0xb1, 0x7f, 0xff, 0xf9, 0xfe, 0x22, 0x66, 0xe9, + 0xbf, 0xdf, 0xd8, 0x7e, 0x3e, 0x10, 0x19, 0x62, 0xff, 0x88, 0x7c, 0x61, + 0xb7, 0x64, 0xb1, 0x7f, 0xfd, 0xdc, 0x0a, 0x58, 0x6f, 0xbe, 0x7d, 0xbc, + 0xb1, 0x50, 0x4c, 0x03, 0x1d, 0xdc, 0xe6, 0xff, 0xe6, 0xd6, 0x0f, 0xec, + 0x70, 0xe4, 0x96, 0x2c, 0x05, 0x8b, 0xc3, 0xfc, 0xac, 0x5f, 0x67, 0x7e, + 0x65, 0x8b, 0x70, 0xc3, 0xc0, 0x21, 0xda, 0xd1, 0xfd, 0x79, 0x4a, 0x99, + 0x1c, 0x02, 0x85, 0xf5, 0xb1, 0x62, 0xff, 0xf0, 0xff, 0x32, 0xfe, 0xe3, + 0x97, 0x70, 0x58, 0xb0, 0x86, 0x7b, 0x64, 0x23, 0x76, 0x1d, 0x62, 0xff, + 0xf8, 0xd7, 0xd6, 0x77, 0xef, 0xb8, 0x72, 0x39, 0x58, 0xb9, 0x89, 0x62, + 0xf3, 0x96, 0x2c, 0x5f, 0xfb, 0x9f, 0x93, 0xfb, 0x84, 0xdd, 0xec, 0x6c, + 0x60, 0x2d, 0x7f, 0xee, 0xfa, 0x7e, 0x3d, 0xfc, 0x52, 0x75, 0x8a, 0xc4, + 0xc7, 0xbb, 0x84, 0x1b, 0x2b, 0x5d, 0xb3, 0xac, 0x5f, 0xc1, 0x6d, 0x81, + 0x60, 0xd6, 0x2a, 0x4f, 0x27, 0x06, 0x2a, 0x57, 0x36, 0x32, 0x34, 0xd3, + 0x63, 0x0f, 0x78, 0x41, 0x68, 0x9d, 0xa3, 0x35, 0x27, 0xeb, 0xfa, 0x2f, + 0xc8, 0x4c, 0x4b, 0x17, 0xe8, 0xa1, 0x3a, 0xd9, 0x62, 0xfe, 0xcd, 0x69, + 0x82, 0xea, 0x58, 0xa9, 0x44, 0x66, 0xc5, 0xe7, 0x2b, 0xbf, 0xff, 0x05, + 0xf2, 0x66, 0xef, 0xc2, 0x6f, 0xbe, 0x12, 0xc5, 0xff, 0xff, 0x6b, 0x06, + 0x4c, 0xdd, 0x39, 0x91, 0xfe, 0x2c, 0xcd, 0x44, 0xb1, 0x7e, 0x2f, 0x18, + 0x7d, 0x96, 0x2f, 0x84, 0x76, 0xf2, 0xc5, 0xff, 0xf9, 0xf6, 0x2c, 0xe9, + 0xf7, 0xf7, 0x70, 0x92, 0x89, 0x62, 0xa5, 0x14, 0xe3, 0x2b, 0xf9, 0x1d, + 0xff, 0xff, 0x9f, 0x4f, 0x9d, 0x33, 0x6c, 0x7f, 0x49, 0xc9, 0x8d, 0xfb, + 0xac, 0x5f, 0xfd, 0x09, 0x68, 0x18, 0xf1, 0x3e, 0x12, 0xc5, 0xf7, 0x8d, + 0x7d, 0xd6, 0x2f, 0xff, 0xf6, 0xa7, 0xdc, 0x8a, 0x3d, 0xc7, 0xfc, 0xf1, + 0x48, 0x5d, 0x4b, 0x17, 0xff, 0xf9, 0xe4, 0xbd, 0xa9, 0xfb, 0x70, 0xb0, + 0x1c, 0xf3, 0xac, 0x5f, 0xf3, 0xfa, 0x4e, 0xfe, 0x14, 0xac, 0x5f, 0xe9, + 0x81, 0x91, 0x47, 0xb9, 0x2c, 0x5b, 0x38, 0x7e, 0x1e, 0x38, 0xbf, 0xf0, + 0x9b, 0xbe, 0x16, 0x74, 0x68, 0x2c, 0x5f, 0xf4, 0x45, 0x27, 0xfc, 0xf4, + 0x3a, 0xc5, 0xff, 0xe8, 0x3e, 0x80, 0xde, 0xc8, 0xa0, 0xfe, 0x58, 0xbf, + 0x79, 0xe3, 0xb3, 0x65, 0x8b, 0xdd, 0x64, 0x6f, 0xd6, 0x2c, 0x5f, 0xfd, + 0x81, 0x18, 0xde, 0x2c, 0xd9, 0x89, 0x62, 0xd2, 0xb1, 0x7f, 0xb9, 0x9f, + 0x7e, 0x0b, 0x65, 0x8b, 0xe7, 0x8e, 0xcd, 0x96, 0x2e, 0x6e, 0xcc, 0x4c, + 0x2a, 0x35, 0x16, 0x6c, 0x5a, 0x34, 0x5e, 0x08, 0xf8, 0xd6, 0xe6, 0xed, + 0x62, 0xb1, 0x50, 0xaf, 0x67, 0x9c, 0x8d, 0x57, 0xcd, 0x96, 0x71, 0xae, + 0x7e, 0xee, 0x5f, 0xdb, 0x64, 0x48, 0x9a, 0x25, 0xfb, 0x49, 0x43, 0x3b, + 0x84, 0xfe, 0x94, 0xad, 0x7f, 0xdf, 0x7f, 0x71, 0xbb, 0x00, 0x4b, 0x17, + 0x86, 0xdb, 0x2c, 0x56, 0xe7, 0xb4, 0x19, 0xe5, 0xd8, 0x05, 0x8b, 0x6b, + 0x63, 0x76, 0x02, 0x4b, 0xff, 0xee, 0xa3, 0xcc, 0x94, 0x46, 0x14, 0x9f, + 0x58, 0xb1, 0x7f, 0xfb, 0x6d, 0x3f, 0xb6, 0x16, 0xa1, 0xc8, 0xf7, 0x58, + 0xa6, 0x45, 0x20, 0x94, 0xea, 0x59, 0x15, 0x58, 0x60, 0xea, 0xbf, 0x9e, + 0x0e, 0x68, 0xca, 0x4a, 0x19, 0x97, 0xfd, 0x81, 0xb3, 0x76, 0xcc, 0x12, + 0xc5, 0xfb, 0xd8, 0x4d, 0x12, 0xc5, 0xff, 0xe6, 0xdb, 0xf8, 0x3f, 0xbb, + 0xc7, 0x4f, 0x96, 0x2b, 0x0f, 0xd7, 0x85, 0x17, 0xf6, 0x9f, 0x72, 0x9f, + 0xac, 0x5f, 0xf0, 0x9b, 0xcd, 0x06, 0xee, 0x0b, 0x17, 0xff, 0x19, 0xcd, + 0xfe, 0xe1, 0x61, 0xb3, 0xc5, 0x8b, 0xfa, 0x11, 0x7d, 0xfb, 0xf2, 0xc5, + 0xf0, 0x79, 0xdf, 0x96, 0x2a, 0x4f, 0x59, 0x8c, 0x6e, 0xd7, 0x16, 0x2a, + 0x55, 0x07, 0xc2, 0x15, 0xf8, 0x43, 0xb9, 0x77, 0xce, 0xb9, 0x09, 0xf8, + 0xe2, 0x0b, 0xfc, 0xe3, 0xc3, 0x99, 0x83, 0x58, 0xbf, 0x14, 0x3f, 0x3e, + 0x58, 0xb7, 0x16, 0x2b, 0x0d, 0xd3, 0x14, 0x5f, 0xe0, 0xb9, 0xe2, 0xcc, + 0xdd, 0x62, 0xfc, 0xe1, 0x46, 0xfd, 0x6c, 0x6e, 0xb1, 0x7f, 0xfc, 0x2d, + 0x6a, 0x4b, 0x0d, 0x7f, 0xff, 0x03, 0x58, 0xb7, 0x5e, 0xb1, 0x5a, 0x3e, + 0x81, 0x28, 0xdf, 0x4e, 0xa6, 0x25, 0x8b, 0xfd, 0x26, 0x04, 0xc4, 0x52, + 0xb1, 0x78, 0xa4, 0xeb, 0x16, 0x95, 0x8a, 0x88, 0xd6, 0x9c, 0x72, 0xff, + 0x1c, 0x45, 0xee, 0x0b, 0x4b, 0x15, 0x05, 0x4b, 0xe3, 0x6e, 0xc1, 0xf3, + 0x4d, 0x75, 0x0a, 0x13, 0x91, 0x00, 0x8c, 0x98, 0x23, 0x88, 0xaf, 0xdf, + 0x63, 0xc9, 0x2c, 0x5f, 0x75, 0x7e, 0x49, 0x62, 0xda, 0x58, 0xbd, 0xac, + 0xc5, 0x8a, 0xd8, 0xf4, 0xc0, 0x4b, 0xd4, 0x25, 0x7f, 0xff, 0x77, 0xc9, + 0x86, 0xb3, 0x69, 0xd6, 0x79, 0xfb, 0x09, 0x62, 0xc6, 0xac, 0x56, 0xc7, + 0xe4, 0x4b, 0xf7, 0x73, 0x8b, 0x17, 0xff, 0xb0, 0x64, 0xcc, 0x17, 0xbb, + 0x84, 0x84, 0xb1, 0x77, 0x70, 0xd1, 0xf2, 0x7c, 0x62, 0xfa, 0x28, 0x36, + 0x96, 0x2f, 0x75, 0xf1, 0xce, 0xb1, 0x40, 0x3c, 0x91, 0x12, 0x5f, 0x0f, + 0x6c, 0x09, 0x62, 0xa5, 0x34, 0x5c, 0x84, 0x33, 0xbc, 0x08, 0x8a, 0xfb, + 0x76, 0xce, 0x2c, 0x5f, 0xfb, 0x69, 0x37, 0xf8, 0x42, 0xc1, 0xac, 0x5f, + 0xf8, 0x47, 0xfc, 0x9e, 0x28, 0xf7, 0x1a, 0xc5, 0x12, 0x21, 0x3a, 0x90, + 0x2f, 0xfb, 0x0f, 0x9b, 0xcf, 0xe4, 0xeb, 0x17, 0xff, 0x31, 0x6f, 0xc2, + 0xce, 0x71, 0xfa, 0x2c, 0x5b, 0xdf, 0x3f, 0xf6, 0x39, 0xbf, 0x64, 0x51, + 0x37, 0x16, 0x2f, 0xff, 0xb3, 0xdd, 0xc2, 0x40, 0x09, 0x1f, 0xc5, 0xd4, + 0xb1, 0x5f, 0x3f, 0xf2, 0x2a, 0xad, 0x91, 0x8f, 0xdc, 0x29, 0xab, 0x15, + 0x1e, 0x3c, 0x29, 0xda, 0x36, 0xbb, 0xfb, 0x23, 0xf7, 0xfb, 0xf5, 0x2c, + 0x5f, 0xf1, 0x45, 0x83, 0x8a, 0x0f, 0xf5, 0x8b, 0x39, 0x1f, 0x80, 0x8d, + 0x6f, 0xf3, 0x0c, 0xa6, 0x0e, 0x4b, 0x17, 0xe6, 0xdb, 0x69, 0xed, 0x62, + 0xb6, 0x3d, 0xcf, 0x18, 0xdf, 0x05, 0xe7, 0xd9, 0x62, 0xa4, 0xf2, 0x18, + 0x8e, 0xfe, 0x2e, 0xe1, 0xe1, 0x0d, 0x62, 0xfc, 0x10, 0x9b, 0x43, 0x58, + 0xbf, 0xdc, 0x7f, 0x44, 0x52, 0x75, 0x8a, 0x23, 0xde, 0xe1, 0x55, 0xfa, + 0x3f, 0x08, 0xee, 0xb1, 0x52, 0x8d, 0x97, 0x84, 0x73, 0x10, 0xdf, 0x14, + 0xe0, 0x4b, 0x17, 0x8b, 0x00, 0xb1, 0x7f, 0xfc, 0xe6, 0x47, 0xbe, 0xc6, + 0x7f, 0x22, 0x2c, 0x09, 0x62, 0xfa, 0x2c, 0xcd, 0x96, 0x2f, 0xdc, 0x7f, + 0x14, 0xac, 0x5d, 0x9f, 0xe1, 0xe5, 0xf8, 0x92, 0xc1, 0x75, 0xa9, 0x86, + 0xe8, 0x8b, 0xe3, 0x9e, 0x85, 0x15, 0xfc, 0x17, 0x8a, 0x4f, 0xc5, 0x8a, + 0x63, 0xfe, 0x12, 0x7d, 0xfa, 0x2f, 0xe0, 0x19, 0x62, 0xa5, 0x91, 0xb5, + 0x08, 0xfa, 0xb2, 0x53, 0xe4, 0x7c, 0x2a, 0xb5, 0x0c, 0xaf, 0xc3, 0xe4, + 0xa3, 0xbd, 0xe8, 0x43, 0x7f, 0xff, 0xdf, 0xcf, 0x79, 0xb6, 0xcf, 0x1d, + 0xc4, 0x51, 0x16, 0x04, 0xb1, 0x78, 0x6c, 0x75, 0x8b, 0xfe, 0x2c, 0x0b, + 0xf8, 0x79, 0xe2, 0xc5, 0xff, 0x63, 0xc3, 0xf3, 0xf7, 0x35, 0x62, 0xf6, + 0xff, 0x78, 0x8f, 0xc8, 0x8e, 0x6f, 0x13, 0x03, 0x11, 0x87, 0xc8, 0x47, + 0xd0, 0xd3, 0x62, 0xf4, 0x65, 0x77, 0xfb, 0xdd, 0xc3, 0x3a, 0x0b, 0xeb, + 0x17, 0x87, 0xfc, 0x58, 0xbf, 0xbd, 0xfc, 0x84, 0x00, 0xb1, 0x7f, 0x99, + 0xb6, 0x3c, 0xfb, 0x8b, 0x17, 0xec, 0x62, 0xc8, 0xf5, 0x8b, 0xf8, 0xb0, + 0x7f, 0x9e, 0x87, 0x3d, 0xdf, 0x9a, 0x54, 0xa6, 0xa0, 0x32, 0xac, 0x38, + 0x21, 0xd0, 0xa1, 0x19, 0x7f, 0x89, 0x9b, 0xa4, 0x3a, 0x01, 0x62, 0xff, + 0xfb, 0x93, 0x17, 0xe7, 0xa1, 0x60, 0xff, 0x3c, 0x58, 0xa1, 0xa2, 0x27, + 0xc6, 0xf7, 0xdb, 0xc8, 0x38, 0xb1, 0x7f, 0xd9, 0xbe, 0x7b, 0xec, 0xc1, + 0x2c, 0x5d, 0x20, 0x58, 0xbd, 0xf7, 0x0b, 0x47, 0xa3, 0x1c, 0x75, 0x7f, + 0xf8, 0xef, 0xdc, 0x38, 0x59, 0xbf, 0x84, 0x4b, 0x17, 0xfb, 0x99, 0x1e, + 0x06, 0x68, 0x96, 0x2f, 0xff, 0xdc, 0x8f, 0x72, 0xce, 0x8d, 0xc0, 0x85, + 0x8f, 0xf5, 0x8b, 0xff, 0xd9, 0xee, 0x3e, 0x6a, 0x41, 0xc7, 0xe8, 0xb1, + 0x58, 0x9f, 0xbe, 0xe4, 0x71, 0x3a, 0x9c, 0xdf, 0xe9, 0x9c, 0x37, 0x8e, + 0x5a, 0xbe, 0x38, 0xe6, 0x0b, 0x17, 0xfe, 0xfe, 0x74, 0x8f, 0x71, 0x0f, + 0x06, 0xb1, 0x6f, 0x2c, 0x54, 0x9f, 0xcf, 0x88, 0xc3, 0x44, 0xbe, 0x98, + 0xdb, 0x80, 0x58, 0xbf, 0xff, 0xe8, 0x70, 0x0d, 0xe6, 0xd7, 0x0b, 0x3c, + 0x20, 0x1d, 0xa0, 0xb1, 0x6f, 0x2c, 0x5e, 0xfe, 0x79, 0x62, 0xff, 0xb8, + 0x2d, 0x43, 0x72, 0x6e, 0xa5, 0x8b, 0x8b, 0x06, 0x7b, 0x7e, 0x1d, 0xb3, + 0x76, 0x98, 0x03, 0x33, 0xf9, 0xb6, 0xfa, 0x1c, 0x71, 0xac, 0x5c, 0xfc, + 0x58, 0xb0, 0x1c, 0xdd, 0x1c, 0x8e, 0xa5, 0x76, 0x77, 0x25, 0x67, 0x3c, + 0x38, 0xb4, 0x5e, 0xd1, 0x94, 0x09, 0xc2, 0xe7, 0x89, 0x62, 0xce, 0xb1, + 0x78, 0xb7, 0x6d, 0x1a, 0x9e, 0x0c, 0x5f, 0xff, 0xda, 0x29, 0x9e, 0xcc, + 0xe7, 0x8a, 0x47, 0xf9, 0xf2, 0xc5, 0xcf, 0xf5, 0x8b, 0xff, 0xf3, 0x9b, + 0x83, 0x3b, 0x36, 0xda, 0xc0, 0x02, 0x56, 0x2e, 0xf8, 0x4b, 0x17, 0xd0, + 0x26, 0x0d, 0x62, 0xfe, 0x6f, 0x73, 0xcf, 0xb2, 0xc5, 0xfe, 0x1b, 0x03, + 0x5a, 0x60, 0x2c, 0x5f, 0x6b, 0x78, 0xf0, 0x96, 0x2e, 0x60, 0x96, 0x2e, + 0xf6, 0xeb, 0x16, 0x37, 0xad, 0x36, 0x32, 0x31, 0x7f, 0x7f, 0x21, 0xd1, + 0xa5, 0x62, 0xb1, 0x16, 0xac, 0xb5, 0xe2, 0xcb, 0xff, 0xfe, 0xe3, 0x16, + 0x38, 0x24, 0xb3, 0xbf, 0x33, 0xf0, 0x33, 0x56, 0x29, 0xd3, 0x7d, 0x28, + 0x74, 0xf0, 0xba, 0xa5, 0x58, 0xbe, 0x19, 0x47, 0xae, 0x68, 0x5c, 0xea, + 0xcc, 0x32, 0x44, 0x62, 0x8e, 0xb2, 0xff, 0xbf, 0x3d, 0x3d, 0xc6, 0x68, + 0xf5, 0x8b, 0xf6, 0x3f, 0xe4, 0x6b, 0x17, 0x4c, 0x7a, 0xc5, 0x68, 0xf0, + 0x7e, 0x4f, 0x7b, 0x45, 0x83, 0x45, 0x0f, 0x47, 0xfb, 0xe6, 0x0a, 0x11, + 0xeb, 0x17, 0x9a, 0x3d, 0xd6, 0x2f, 0xfc, 0x1f, 0x8d, 0x73, 0x67, 0x0a, + 0x56, 0x2d, 0xda, 0xc5, 0xff, 0x9c, 0x2f, 0xe7, 0x39, 0xf9, 0x8f, 0x58, + 0xbf, 0xfc, 0xec, 0xd1, 0x7b, 0xf9, 0x0f, 0xbf, 0x45, 0x8b, 0xff, 0xec, + 0xf7, 0x30, 0x2c, 0xfb, 0xe8, 0x52, 0x05, 0x8b, 0xff, 0xe2, 0xcf, 0x71, + 0x8f, 0xac, 0x7f, 0xc8, 0xd6, 0x2a, 0x53, 0x40, 0xdc, 0x4e, 0x3d, 0x0c, + 0x93, 0x3c, 0xa1, 0x7f, 0xd9, 0xff, 0xcb, 0x94, 0x9d, 0x62, 0xfc, 0x1f, + 0x8a, 0x40, 0xb1, 0x52, 0xaa, 0xa0, 0x66, 0xbd, 0x93, 0xe8, 0x7c, 0xf1, + 0xc0, 0x7d, 0x37, 0xa1, 0xbd, 0xfa, 0x7d, 0x9f, 0x95, 0x8b, 0xfc, 0xda, + 0x00, 0xb7, 0x3b, 0xac, 0x5f, 0xff, 0xee, 0xc7, 0xbb, 0x8d, 0xbf, 0x9b, + 0x16, 0x74, 0x8f, 0x7e, 0x8b, 0x17, 0xed, 0x19, 0xbe, 0x74, 0x58, 0xbf, + 0xe2, 0x8b, 0xf8, 0x58, 0xe3, 0x58, 0xac, 0x3e, 0x51, 0x16, 0xdf, 0xfe, + 0x72, 0x26, 0xf3, 0x1c, 0xb3, 0x34, 0xb1, 0x7b, 0x68, 0xb1, 0x62, 0xff, + 0xfb, 0xa6, 0x6f, 0xa6, 0x6e, 0xe1, 0xc8, 0xf7, 0x25, 0x8a, 0x93, 0xf5, + 0x61, 0xfb, 0xff, 0xa3, 0xdf, 0x3f, 0x3d, 0x39, 0xf9, 0xed, 0x62, 0xa5, + 0x52, 0x56, 0x1a, 0xbc, 0x33, 0xe3, 0xc8, 0x7f, 0x0b, 0xbe, 0x10, 0x5f, + 0x4f, 0xb0, 0xeb, 0x17, 0xfe, 0xe7, 0xf0, 0x2f, 0xb8, 0x45, 0x8b, 0x14, + 0x03, 0xe2, 0xe8, 0x45, 0x7e, 0xee, 0x05, 0x27, 0x58, 0xbf, 0xff, 0xff, + 0xc7, 0x8f, 0x7f, 0x83, 0x18, 0xb7, 0xce, 0xe1, 0xc7, 0xf7, 0x1f, 0xb8, + 0x14, 0xfe, 0x56, 0x2f, 0xf4, 0xeb, 0xa6, 0x0d, 0x89, 0x62, 0xfe, 0xcf, + 0xbe, 0x6a, 0x25, 0x8b, 0xff, 0x67, 0x70, 0xe3, 0xf9, 0x8b, 0x16, 0x2f, + 0xf6, 0x1f, 0xf9, 0x13, 0x44, 0xb1, 0x7e, 0x7d, 0xbf, 0x32, 0x61, 0xf9, + 0xf8, 0xfa, 0x8c, 0x47, 0x06, 0x42, 0x86, 0xfa, 0x79, 0xd0, 0x96, 0x2f, + 0xa7, 0x9d, 0x09, 0x62, 0xee, 0x84, 0xb1, 0x7f, 0x9f, 0xdc, 0xce, 0x99, + 0xb7, 0x5a, 0x7c, 0x31, 0xb1, 0x27, 0x09, 0x2f, 0xff, 0x7e, 0x7b, 0xcd, + 0x4f, 0x9f, 0x77, 0x1a, 0xc5, 0xe1, 0x6a, 0x25, 0x8b, 0xd1, 0x67, 0x86, + 0x7d, 0x5c, 0x4b, 0xbf, 0xff, 0xf1, 0x6e, 0x66, 0xa7, 0x6f, 0x63, 0x74, + 0x32, 0x70, 0xbd, 0xc9, 0x58, 0xac, 0x45, 0x23, 0x1a, 0x50, 0xd5, 0x0d, + 0xef, 0x08, 0x9f, 0xc6, 0xe3, 0x7e, 0x28, 0xa0, 0xe4, 0xb1, 0x4e, 0x7c, + 0xcc, 0x7d, 0x52, 0xb8, 0xe1, 0x85, 0x3b, 0xc2, 0x4b, 0xf2, 0xe5, 0x6f, + 0xe7, 0xda, 0x4a, 0x62, 0x58, 0xbf, 0xbd, 0x91, 0x70, 0x47, 0x58, 0xbb, + 0xbf, 0xc7, 0x9e, 0xf3, 0x17, 0x5f, 0x36, 0xbe, 0x25, 0x8b, 0xff, 0xe7, + 0xf7, 0x1f, 0xd3, 0xee, 0x16, 0x60, 0x4b, 0x17, 0xfe, 0xc2, 0xdf, 0xee, + 0x3c, 0xd4, 0x4b, 0x15, 0x28, 0xe3, 0x81, 0x8e, 0x11, 0xc4, 0x9f, 0x7f, + 0xff, 0xe7, 0x2c, 0xf4, 0x9c, 0x21, 0x36, 0xc6, 0x67, 0xdf, 0x5f, 0x65, + 0x8b, 0xf1, 0xa6, 0xb7, 0xb8, 0xb1, 0x7f, 0xfd, 0x9b, 0x30, 0xdc, 0x5b, + 0xe9, 0xc2, 0x89, 0xd6, 0x2a, 0x51, 0xd7, 0x8d, 0xba, 0x2b, 0xbf, 0x8e, + 0xc3, 0xfb, 0x12, 0xc5, 0xcd, 0xd4, 0xb1, 0x7b, 0xee, 0x12, 0xc5, 0xfb, + 0xb8, 0x70, 0xb0, 0xe6, 0xe3, 0xc3, 0x57, 0xfd, 0xdc, 0x39, 0x16, 0x9b, + 0xdc, 0x58, 0xbf, 0xff, 0xf8, 0x13, 0x11, 0x9f, 0xcc, 0x30, 0xb0, 0x7f, + 0x63, 0x33, 0x02, 0xf2, 0xc5, 0xff, 0x7d, 0xfa, 0xb3, 0x7f, 0xe6, 0x2c, + 0x5f, 0xbe, 0xff, 0x60, 0x8c, 0x45, 0x8f, 0x1d, 0x6f, 0xf9, 0xc5, 0xd9, + 0xd9, 0x88, 0x6b, 0x17, 0xfe, 0xd6, 0x45, 0x80, 0x33, 0xee, 0x66, 0xe7, + 0xf5, 0xc4, 0x1b, 0xff, 0xfb, 0xef, 0xf6, 0x0b, 0x9f, 0x7e, 0xac, 0xdf, + 0xf9, 0x8b, 0x17, 0xfe, 0xfc, 0xcf, 0xb9, 0x1e, 0xe5, 0xd1, 0x62, 0xf9, + 0x98, 0x86, 0xb1, 0x79, 0xc5, 0xd8, 0xcf, 0x90, 0xe8, 0x77, 0xf6, 0x75, + 0x19, 0xf7, 0x33, 0x74, 0x7b, 0xf2, 0x18, 0x77, 0xff, 0xf7, 0xdf, 0xec, + 0x17, 0x3e, 0xfd, 0x59, 0xbf, 0xf3, 0x16, 0x2f, 0xfd, 0xf9, 0x9f, 0x72, + 0x3d, 0xcb, 0xa2, 0xc5, 0xf3, 0x31, 0x0d, 0x62, 0xf3, 0x8b, 0xb1, 0x9f, + 0x21, 0xd0, 0xef, 0xff, 0x37, 0x66, 0x0d, 0xc5, 0xd4, 0x67, 0xdc, 0xcd, + 0xd1, 0xef, 0xc8, 0x61, 0xdf, 0xff, 0xfc, 0x09, 0x88, 0xcf, 0xe6, 0x18, + 0x58, 0x3f, 0xb1, 0x99, 0x81, 0x79, 0x62, 0xff, 0xbe, 0xfd, 0x59, 0xbf, + 0xf3, 0x16, 0x2f, 0xdf, 0x7f, 0xb0, 0x46, 0x22, 0xc7, 0x8e, 0xb7, 0xff, + 0xe7, 0x17, 0x63, 0xfc, 0xcf, 0xb9, 0x1e, 0xe5, 0xd1, 0x62, 0xff, 0xfe, + 0xcf, 0x48, 0x59, 0xe2, 0x90, 0xba, 0x8c, 0xfb, 0x99, 0xba, 0x27, 0x38, + 0x83, 0x7f, 0xff, 0x7d, 0xfe, 0xc1, 0x73, 0xef, 0xd5, 0x9b, 0xff, 0x31, + 0x62, 0xff, 0xdf, 0x99, 0xf7, 0x23, 0xdc, 0xba, 0x2c, 0x5f, 0x33, 0x10, + 0xd6, 0x2f, 0x38, 0xbb, 0x19, 0xf2, 0x1d, 0x0e, 0xff, 0xb1, 0xc8, 0xd3, + 0x3e, 0xe6, 0x6e, 0x8f, 0x7e, 0x43, 0x0e, 0xf7, 0xe7, 0x58, 0xb9, 0x97, + 0xa8, 0xd1, 0xca, 0x3b, 0xce, 0x46, 0xe1, 0x7f, 0xff, 0xff, 0xdf, 0x7f, + 0xb0, 0x46, 0x02, 0x62, 0x33, 0xf9, 0x86, 0x16, 0x0f, 0xec, 0x66, 0x60, + 0x5e, 0x58, 0xbf, 0xf7, 0xe6, 0x7d, 0xc8, 0xf7, 0x2e, 0x8b, 0x17, 0xcc, + 0xc4, 0x35, 0x8b, 0xce, 0x2e, 0xc6, 0x7c, 0x87, 0x43, 0xbf, 0xfb, 0x5a, + 0xc7, 0x2d, 0x8c, 0xfb, 0x99, 0xba, 0x66, 0x3c, 0x87, 0xed, 0xff, 0xff, + 0xff, 0x7d, 0xfe, 0xc1, 0x18, 0x09, 0x88, 0xcf, 0xe6, 0x18, 0x58, 0x3f, + 0xb1, 0x99, 0x81, 0x79, 0x62, 0xff, 0xdf, 0x99, 0xf7, 0x23, 0xdc, 0xba, + 0x2c, 0x5f, 0x33, 0x10, 0xd6, 0x2f, 0x38, 0xbb, 0x19, 0xf2, 0x1d, 0x0e, + 0xff, 0xf4, 0x7b, 0xf5, 0x1b, 0xac, 0x19, 0x9f, 0x73, 0x37, 0x4c, 0xc7, + 0x90, 0xfd, 0xbf, 0xff, 0xff, 0xef, 0xbf, 0xd8, 0x23, 0x01, 0x31, 0x19, + 0xfc, 0xc3, 0x0b, 0x07, 0xf6, 0x33, 0x30, 0x2f, 0x2c, 0x5f, 0xfb, 0xf3, + 0x3e, 0xe4, 0x7b, 0x97, 0x45, 0x8b, 0xe6, 0x62, 0x1a, 0xc5, 0xe7, 0x17, + 0x63, 0x3e, 0x43, 0xa1, 0xdf, 0xfd, 0x23, 0xfe, 0x67, 0x43, 0x3e, 0xe6, + 0x6e, 0x99, 0x8f, 0x21, 0xfb, 0x7f, 0xff, 0xf0, 0x26, 0x23, 0x3f, 0x98, + 0x61, 0x60, 0xfe, 0xc6, 0x66, 0x05, 0xe5, 0x8b, 0xfe, 0xfb, 0xf5, 0x66, 0xff, 0xcc, 0x58, 0xbf, 0x7d, 0xfe, 0xc1, 0x18, 0x8b, 0x1e, 0x3a, 0xdf, - 0xf3, 0x8b, 0xa3, 0xb3, 0x10, 0xd6, 0x2f, 0xfc, 0x17, 0xe3, 0xdc, 0x8c, - 0xfb, 0x99, 0xb9, 0xfd, 0x71, 0x06, 0xff, 0xff, 0xe0, 0x4c, 0x46, 0x7f, - 0x30, 0xc2, 0xc1, 0xfd, 0x8c, 0xcc, 0x0b, 0xcb, 0x17, 0xfd, 0xf7, 0xee, - 0xcd, 0xff, 0x98, 0xb1, 0x7e, 0xfb, 0xfd, 0x82, 0x31, 0x16, 0x3c, 0x75, - 0xbf, 0xff, 0x38, 0xba, 0x1f, 0xe6, 0x7d, 0xc8, 0xf7, 0x2e, 0xcb, 0x17, - 0xfc, 0x2c, 0xcd, 0x19, 0xf7, 0x33, 0x74, 0x4e, 0x71, 0x06, 0xe2, 0x99, - 0x4f, 0xf0, 0x28, 0xea, 0x6f, 0xfd, 0xf9, 0x9f, 0x72, 0x3d, 0xcb, 0xb2, - 0xc5, 0xf3, 0x31, 0x0d, 0x62, 0xff, 0xda, 0x33, 0xee, 0x67, 0x1c, 0x5d, - 0x0c, 0xf9, 0x0e, 0x87, 0x7f, 0xff, 0xf0, 0x26, 0x23, 0x3f, 0x98, 0x61, - 0x60, 0xfe, 0xc6, 0x66, 0x05, 0xe5, 0x8b, 0xfe, 0xfb, 0xf7, 0x66, 0xff, - 0xcc, 0x58, 0xbf, 0x7d, 0xfe, 0xc1, 0x18, 0x8b, 0x1e, 0x3a, 0xdf, 0xf3, - 0x8b, 0xa3, 0xb3, 0x10, 0xd6, 0x2f, 0xff, 0xf1, 0xcc, 0xce, 0x63, 0x91, - 0xa6, 0x60, 0xcc, 0xfb, 0x99, 0xb9, 0xfd, 0x71, 0x06, 0xa5, 0x50, 0x06, - 0x47, 0x09, 0x43, 0x55, 0x82, 0x52, 0xa6, 0x2f, 0xff, 0xfe, 0x04, 0xc4, - 0x67, 0xf3, 0x0c, 0x2c, 0x1f, 0xd8, 0xcc, 0xc0, 0xbc, 0xb1, 0x7f, 0xdf, - 0x7e, 0xec, 0xdf, 0xf9, 0x8b, 0x17, 0xff, 0xff, 0xff, 0x9c, 0x8c, 0xfe, - 0x0c, 0xcf, 0xcc, 0x99, 0xfc, 0xe8, 0x1a, 0x93, 0x3e, 0xe6, 0x6f, 0xf7, - 0xfb, 0x04, 0x62, 0x2c, 0x78, 0xeb, 0x52, 0xc8, 0x39, 0xc9, 0xe9, 0x98, - 0xf8, 0x6e, 0x5f, 0xff, 0xfc, 0x09, 0x88, 0xcf, 0xe6, 0x18, 0x58, 0x3f, - 0xb1, 0x99, 0x81, 0x79, 0x62, 0xff, 0xbe, 0xfd, 0xd9, 0xbf, 0xf3, 0x16, + 0xf3, 0x8b, 0xb3, 0xb3, 0x10, 0xd6, 0x2f, 0xff, 0xfd, 0xae, 0x06, 0x46, + 0x99, 0xee, 0x60, 0x43, 0x17, 0x0c, 0xfb, 0x99, 0xb9, 0xfd, 0x71, 0x06, + 0xff, 0xff, 0xe0, 0x4c, 0x46, 0x7f, 0x30, 0xc2, 0xc1, 0xfd, 0x8c, 0xcc, + 0x0b, 0xcb, 0x17, 0xfd, 0xf7, 0xea, 0xcd, 0xff, 0x98, 0xb1, 0x7e, 0xfb, + 0xfd, 0x82, 0x31, 0x16, 0x3c, 0x75, 0xbf, 0xe7, 0x17, 0x67, 0x66, 0x21, + 0xac, 0x5f, 0xf8, 0x2f, 0xc7, 0xb9, 0x19, 0xf7, 0x33, 0x73, 0xfa, 0xe2, + 0x0d, 0xff, 0xff, 0xc0, 0x98, 0x8c, 0xfe, 0x61, 0x85, 0x83, 0xfb, 0x19, + 0x98, 0x17, 0x96, 0x2f, 0xfb, 0xef, 0xd5, 0x9b, 0xff, 0x31, 0x62, 0xfd, + 0xf7, 0xfb, 0x04, 0x62, 0x2c, 0x78, 0xeb, 0x7f, 0xfe, 0x71, 0x76, 0x3f, + 0xcc, 0xfb, 0x91, 0xee, 0x5d, 0x16, 0x2f, 0xf8, 0x59, 0x9a, 0x33, 0xee, + 0x66, 0xe8, 0x9c, 0xe2, 0x0d, 0xc5, 0x32, 0x9f, 0xe0, 0x51, 0xd4, 0xdf, + 0xfb, 0xf3, 0x3e, 0xe4, 0x7b, 0x97, 0x45, 0x8b, 0xe6, 0x62, 0x1a, 0xc5, + 0xff, 0xb4, 0x67, 0xdc, 0xce, 0x38, 0xbb, 0x19, 0xf2, 0x1d, 0x0e, 0xff, + 0xff, 0xe0, 0x4c, 0x46, 0x7f, 0x30, 0xc2, 0xc1, 0xfd, 0x8c, 0xcc, 0x0b, + 0xcb, 0x17, 0xfd, 0xf7, 0xea, 0xcd, 0xff, 0x98, 0xb1, 0x7e, 0xfb, 0xfd, + 0x82, 0x31, 0x16, 0x3c, 0x75, 0xbf, 0xe7, 0x17, 0x67, 0x66, 0x21, 0xac, + 0x5f, 0xff, 0xe3, 0x99, 0x9c, 0xc7, 0x23, 0x4c, 0xc1, 0x99, 0xf7, 0x33, + 0x73, 0xfa, 0xe2, 0x0d, 0x4a, 0xa0, 0x0c, 0x8e, 0x12, 0x86, 0xab, 0x04, + 0xa5, 0x4c, 0x5f, 0xff, 0xfc, 0x09, 0x88, 0xcf, 0xe6, 0x18, 0x58, 0x3f, + 0xb1, 0x99, 0x81, 0x79, 0x62, 0xff, 0xbe, 0xfd, 0x59, 0xbf, 0xf3, 0x16, 0x2f, 0xdf, 0x7f, 0xb0, 0x46, 0x22, 0xc7, 0x8e, 0xb7, 0xff, 0xe7, 0x17, - 0x43, 0xfc, 0xcf, 0xb9, 0x1e, 0xe5, 0xd9, 0x62, 0xff, 0xf4, 0xe8, 0x03, - 0x71, 0x77, 0x19, 0xf7, 0x33, 0x74, 0x4e, 0x71, 0x06, 0xa5, 0xb6, 0x46, - 0x1c, 0xf1, 0xa6, 0x47, 0x25, 0xa8, 0xe5, 0x8f, 0x1d, 0x1f, 0xe9, 0x2a, - 0x1c, 0x8e, 0x3e, 0xff, 0xff, 0x7b, 0x98, 0x3f, 0xbf, 0x1c, 0x5d, 0x1d, - 0x98, 0x86, 0xb1, 0x7f, 0x36, 0xe3, 0xfc, 0xe9, 0x62, 0xff, 0xff, 0xfe, - 0x9d, 0x67, 0xbd, 0x3a, 0x07, 0xb3, 0xa0, 0x37, 0x1c, 0x5d, 0x1d, 0x98, - 0x86, 0xb1, 0x52, 0x98, 0xce, 0x30, 0xfc, 0xbe, 0xf6, 0x37, 0x4b, 0x17, - 0xff, 0xd9, 0xbe, 0x6b, 0x37, 0xfe, 0x73, 0x82, 0xf2, 0xc5, 0xff, 0xfd, - 0x31, 0x7f, 0x30, 0xb0, 0x7f, 0x6c, 0xc0, 0xbc, 0xb1, 0x7f, 0xdf, 0x7e, - 0xec, 0xdf, 0xf9, 0x8b, 0x17, 0xef, 0xbf, 0xd8, 0x28, 0x93, 0x05, 0xf8, - 0xe8, 0x14, 0xb8, 0xb5, 0x7f, 0xff, 0x4c, 0x5f, 0xcc, 0x2c, 0x1f, 0xdb, - 0x30, 0x2f, 0x2c, 0x5f, 0xde, 0xe4, 0x7b, 0x97, 0x65, 0x8a, 0x58, 0xbf, - 0x9c, 0x5d, 0x0f, 0xf3, 0x26, 0xff, 0x46, 0x77, 0x67, 0x61, 0xaa, 0x6c, - 0xde, 0x33, 0x40, 0x2e, 0x72, 0x13, 0x36, 0x88, 0xc5, 0xc6, 0xd2, 0x9c, - 0x15, 0xbf, 0xd3, 0xbe, 0x7f, 0xef, 0xba, 0xc5, 0x63, 0x76, 0xb4, 0xd5, - 0xd7, 0x80, 0x0d, 0x6f, 0xc5, 0x3b, 0xc0, 0xeb, 0x17, 0xff, 0xb2, 0x3f, - 0xe2, 0x8b, 0xf9, 0x14, 0x27, 0xa5, 0x8b, 0xf9, 0xb9, 0xd8, 0xf2, 0x6a, - 0xc5, 0xff, 0xdc, 0xc8, 0xbf, 0x3d, 0xb3, 0xff, 0x95, 0x8a, 0x1a, 0x3c, - 0xb4, 0x52, 0x75, 0x1f, 0x18, 0xdf, 0xe6, 0x07, 0x0e, 0xdd, 0x79, 0x62, - 0x96, 0x2f, 0xfb, 0x84, 0x21, 0x7a, 0x12, 0x6a, 0xc5, 0x74, 0x78, 0xfe, - 0x0c, 0xac, 0x46, 0xe3, 0x1e, 0x89, 0xf2, 0xff, 0xd9, 0xb6, 0xa6, 0x7c, - 0xff, 0x95, 0x8b, 0xff, 0x3c, 0x5c, 0x26, 0x61, 0xfd, 0xd6, 0x2f, 0xe2, - 0xce, 0x7e, 0x46, 0xb1, 0x7e, 0x98, 0xf0, 0x47, 0xfd, 0x62, 0xa5, 0x13, - 0x58, 0x7d, 0xf2, 0xdb, 0xff, 0xff, 0xe2, 0x9f, 0xe1, 0x63, 0x8c, 0x13, - 0xd4, 0x38, 0x6c, 0xc9, 0x6f, 0x83, 0x58, 0xa2, 0x4e, 0x0b, 0x90, 0xd8, - 0xf1, 0x75, 0xff, 0x8d, 0x7f, 0x16, 0x43, 0x5c, 0xe2, 0xc5, 0xff, 0x76, - 0x1c, 0xf0, 0x5b, 0x0a, 0x25, 0x8b, 0x41, 0xcf, 0xfd, 0x90, 0x2f, 0xfe, - 0xc3, 0x8a, 0x0c, 0x33, 0x3c, 0x70, 0x2c, 0x5f, 0xd3, 0x16, 0x76, 0x7d, - 0x2c, 0x5f, 0xfe, 0x87, 0xda, 0x1b, 0x93, 0x77, 0x77, 0x77, 0x3a, 0xc5, - 0x4a, 0x21, 0x30, 0xc2, 0xf6, 0xb0, 0x96, 0x2f, 0xf6, 0x78, 0xdc, 0x62, - 0x02, 0xc5, 0x39, 0xe7, 0xc4, 0x39, 0x52, 0x9c, 0x1f, 0xc9, 0x8a, 0x19, - 0x7c, 0x70, 0xbf, 0x74, 0x3f, 0xb8, 0x4b, 0x17, 0xff, 0x08, 0x78, 0x42, - 0x83, 0x8f, 0x00, 0xb1, 0x52, 0x7d, 0xee, 0x57, 0x7f, 0xf0, 0x98, 0xfe, - 0x2c, 0xd8, 0xb3, 0xa5, 0x8b, 0xfe, 0xcd, 0xe7, 0xef, 0x24, 0x35, 0x8b, - 0xff, 0xbf, 0x81, 0x0b, 0x1f, 0xfc, 0x9d, 0x96, 0x2e, 0x71, 0x6c, 0x7f, - 0xdd, 0x1c, 0x56, 0xce, 0xb8, 0x54, 0x72, 0x9c, 0x72, 0x18, 0xbb, 0xce, - 0x30, 0x45, 0x1b, 0xce, 0xa3, 0x27, 0x39, 0x73, 0x32, 0x82, 0xbb, 0x98, - 0x29, 0x41, 0x7c, 0x8e, 0xc3, 0xd2, 0x8d, 0xfb, 0x42, 0xc0, 0x22, 0x0e, - 0xe8, 0x61, 0xdf, 0x45, 0x07, 0x89, 0x62, 0xe2, 0xd9, 0x62, 0xf8, 0x1a, - 0x68, 0xe5, 0x8a, 0x30, 0xf8, 0xe3, 0x42, 0x5e, 0x86, 0x2f, 0xf1, 0x6d, - 0x83, 0x3b, 0xf9, 0x62, 0xff, 0x47, 0xbe, 0xdc, 0x99, 0x89, 0x62, 0xce, - 0x23, 0xec, 0x08, 0xd2, 0xf3, 0x99, 0xdf, 0xac, 0x5b, 0xb9, 0x62, 0xef, - 0xf7, 0x2c, 0x5f, 0xfe, 0xce, 0xdf, 0x68, 0x01, 0xba, 0x03, 0xf4, 0xb1, - 0x52, 0x7d, 0x3f, 0x1b, 0xb6, 0x2c, 0x57, 0x8d, 0x97, 0x62, 0x1b, 0xff, - 0xf4, 0xf0, 0xee, 0x5e, 0xe6, 0x3f, 0x8a, 0x4e, 0xb1, 0x7f, 0xd0, 0xe7, - 0xf0, 0xf1, 0xef, 0xc5, 0x8b, 0xff, 0xdb, 0x4c, 0x7f, 0x0b, 0x3d, 0xe7, - 0xd6, 0xeb, 0x15, 0xd2, 0x23, 0x34, 0x7b, 0x7d, 0xb1, 0xda, 0x0b, 0x17, - 0xf6, 0x6d, 0xc2, 0xce, 0xcb, 0x17, 0xfa, 0x4f, 0x31, 0x81, 0x04, 0x12, - 0xc5, 0x41, 0x53, 0x23, 0xc2, 0xc3, 0x44, 0x6d, 0x0d, 0xf2, 0x24, 0xf1, - 0x27, 0x71, 0x85, 0xff, 0xf9, 0x98, 0x7f, 0x9e, 0xdf, 0x93, 0xc5, 0x1e, - 0xe3, 0x58, 0xbb, 0xe1, 0xac, 0x5f, 0xf1, 0xb1, 0xb7, 0xdf, 0x4c, 0xfd, - 0x96, 0x2c, 0x6a, 0xc5, 0x4b, 0xb4, 0x82, 0xcb, 0x5c, 0xec, 0xf1, 0xc1, - 0xc7, 0xc2, 0x8b, 0xe5, 0x0d, 0x2a, 0x1c, 0x9c, 0x38, 0xb6, 0x21, 0x90, - 0xd0, 0x6f, 0xff, 0xd0, 0xce, 0x31, 0x03, 0xf9, 0x3e, 0xe4, 0x81, 0x62, - 0xf9, 0x8e, 0xd0, 0x58, 0xbf, 0xd8, 0x58, 0xfa, 0x6e, 0xcb, 0x17, 0xff, - 0xec, 0x39, 0xc5, 0xff, 0xb3, 0x1b, 0x9a, 0xcf, 0x2c, 0x5d, 0xf7, 0x31, - 0x11, 0x24, 0x67, 0x7b, 0x0f, 0x2b, 0x17, 0xfe, 0x26, 0x19, 0x60, 0xff, - 0x3c, 0x58, 0xac, 0x3d, 0x97, 0x1c, 0xbf, 0xdb, 0xe1, 0x67, 0x76, 0x0d, - 0x62, 0xf0, 0x73, 0xa5, 0x8b, 0xfd, 0x87, 0x6f, 0xe7, 0x40, 0x58, 0xbf, - 0xc7, 0x9d, 0x78, 0xa7, 0x65, 0x8b, 0xfb, 0x8e, 0x4d, 0xa3, 0x56, 0x2b, - 0x63, 0xe2, 0x39, 0xa5, 0xfc, 0xfc, 0x6f, 0x0a, 0x56, 0x2f, 0xb7, 0xe8, - 0xdd, 0xd6, 0x2f, 0x07, 0x20, 0x58, 0xbd, 0xa9, 0xe2, 0xc5, 0x62, 0x24, - 0x1c, 0xb4, 0x05, 0x1e, 0x1e, 0xbe, 0xed, 0x25, 0xba, 0xc5, 0xff, 0xfd, - 0x25, 0x80, 0xe6, 0x0f, 0xf3, 0xb1, 0xc4, 0x43, 0x58, 0xbf, 0x74, 0x0e, - 0xe0, 0xc2, 0x58, 0xbf, 0xfc, 0xc0, 0x6f, 0xe1, 0xdb, 0xf9, 0xd0, 0x16, - 0x2f, 0xff, 0xfe, 0x9c, 0x03, 0x44, 0x3c, 0x6d, 0xff, 0x99, 0x16, 0x37, - 0x74, 0x4e, 0xb1, 0x4e, 0x9b, 0x7f, 0xc9, 0x59, 0x6c, 0x8c, 0x04, 0x95, - 0x7e, 0x7f, 0x7a, 0x60, 0xb1, 0x74, 0xf4, 0xb1, 0x7c, 0xd0, 0xce, 0xcb, - 0x15, 0x05, 0xd9, 0x91, 0xaa, 0x1b, 0x0a, 0xbd, 0xe1, 0x0e, 0xe4, 0x1a, - 0x36, 0xf8, 0xf3, 0x42, 0x58, 0xa1, 0x67, 0xe8, 0xea, 0xbb, 0x24, 0x47, - 0x14, 0x77, 0x0c, 0x5f, 0xc5, 0xe9, 0xe7, 0x9d, 0x62, 0xff, 0xfc, 0xc5, - 0xbf, 0xb9, 0x9b, 0x72, 0x4c, 0x9e, 0xc4, 0xb1, 0x7d, 0xce, 0x39, 0xd6, - 0x2f, 0xff, 0xc2, 0xe8, 0x7b, 0x8b, 0x23, 0xe2, 0xc6, 0xee, 0x89, 0xd6, - 0x2e, 0x7f, 0x2c, 0x5f, 0xd9, 0xe2, 0x99, 0x3a, 0xc5, 0xf0, 0xff, 0x3d, - 0x8e, 0x78, 0x7f, 0x17, 0xbf, 0xfd, 0x83, 0xfc, 0xf6, 0xfb, 0x84, 0x59, - 0xba, 0xc5, 0xd3, 0x16, 0x22, 0x20, 0x8e, 0xef, 0xf1, 0x4c, 0x30, 0xf3, - 0xba, 0xc5, 0xe1, 0xbe, 0x96, 0x28, 0x67, 0xa1, 0xa3, 0x3b, 0xfb, 0xa1, - 0x8f, 0x1b, 0x65, 0x8b, 0xfb, 0x02, 0xd6, 0x7f, 0x8b, 0x17, 0xff, 0xb4, - 0xdb, 0xe7, 0x67, 0xd4, 0x73, 0x6d, 0x1c, 0xb1, 0x7f, 0xfe, 0xfb, 0xf6, - 0x2c, 0x0b, 0x1f, 0xcf, 0xa6, 0x02, 0xc5, 0xe1, 0x10, 0x16, 0x2e, 0x91, - 0xac, 0x53, 0x9b, 0x42, 0x1d, 0xbe, 0x86, 0x7f, 0x16, 0x2f, 0x6c, 0x22, - 0x58, 0xb7, 0x0c, 0x4e, 0xfa, 0x48, 0xb6, 0x30, 0x19, 0x7e, 0xea, 0x91, - 0x42, 0x29, 0x87, 0xc3, 0x22, 0xbf, 0xfe, 0x19, 0x33, 0x7f, 0xf8, 0xc3, - 0xcc, 0x3a, 0xc5, 0xff, 0xf8, 0x7a, 0xcd, 0xff, 0x9f, 0x60, 0x88, 0x42, - 0x02, 0xc5, 0x74, 0x99, 0x2c, 0x50, 0x80, 0x24, 0xdb, 0xbb, 0xce, 0xf1, - 0x62, 0xf9, 0xd8, 0x86, 0xb1, 0x7f, 0x7d, 0xe2, 0x66, 0xd9, 0x62, 0xf4, - 0xe0, 0x16, 0x2d, 0x3d, 0xea, 0x23, 0x86, 0x45, 0xb9, 0x0c, 0x45, 0xf5, - 0x2b, 0xc8, 0x58, 0x5a, 0xeb, 0x3a, 0x23, 0x3c, 0x65, 0x6d, 0x2d, 0x80, - 0x10, 0xc5, 0xbc, 0x6f, 0x9d, 0x62, 0xf6, 0xc7, 0x95, 0x8a, 0x93, 0x78, - 0xe3, 0xd7, 0xf4, 0xeb, 0x69, 0xd6, 0xcb, 0x17, 0xf4, 0x91, 0x9e, 0x83, - 0xac, 0x5f, 0xfe, 0x26, 0x0b, 0xf3, 0x07, 0x2c, 0x3c, 0xac, 0x5f, 0xfd, - 0x9d, 0x7a, 0x73, 0x5a, 0x99, 0xee, 0x58, 0xb0, 0x51, 0x22, 0x3c, 0x92, - 0x2d, 0x12, 0xc5, 0xfe, 0xdb, 0x02, 0x9f, 0x88, 0x96, 0x2a, 0x4f, 0x21, - 0xc4, 0xea, 0x09, 0xbf, 0x8c, 0xc3, 0x21, 0x7b, 0xf7, 0x2b, 0xf7, 0xf3, - 0x7c, 0x09, 0x62, 0xff, 0xbb, 0x31, 0x03, 0xf8, 0x06, 0x58, 0xbf, 0x39, - 0xbe, 0x7d, 0x96, 0x2f, 0xff, 0x66, 0x00, 0xf3, 0x17, 0x07, 0xf6, 0xd9, - 0x62, 0x9d, 0x16, 0x1f, 0x3a, 0x22, 0xab, 0xff, 0xbf, 0x27, 0x88, 0xb0, - 0x2f, 0x67, 0xd6, 0x2e, 0x16, 0xcb, 0x15, 0x27, 0xbe, 0x34, 0x6b, 0xe8, - 0xb3, 0x36, 0x58, 0xbf, 0xff, 0xff, 0xee, 0x30, 0xfa, 0x87, 0x1c, 0x78, - 0x7f, 0x67, 0x5f, 0x9e, 0xc6, 0xcf, 0xf0, 0x7f, 0x9e, 0x96, 0x2b, 0x64, - 0x5f, 0x70, 0x92, 0xfe, 0x3f, 0xdf, 0xb6, 0x44, 0xb1, 0x7f, 0x37, 0x5f, - 0x6c, 0xd2, 0xc5, 0x9f, 0x0f, 0x7d, 0x8c, 0x6f, 0xff, 0x68, 0x47, 0x3b, - 0x36, 0xc7, 0x9f, 0x71, 0x62, 0xff, 0xc5, 0x9d, 0x43, 0x9a, 0x9f, 0x71, - 0x62, 0xff, 0xef, 0xce, 0x80, 0x3d, 0x61, 0x60, 0x4b, 0x17, 0xf1, 0x7f, - 0x01, 0x24, 0xb1, 0x4b, 0x17, 0xe8, 0x6a, 0x70, 0x6b, 0x17, 0x38, 0xba, - 0x36, 0x84, 0x19, 0x7f, 0xc2, 0xd7, 0x18, 0x87, 0x80, 0x58, 0xbf, 0xff, - 0xd9, 0x0d, 0xfe, 0xff, 0x9c, 0xd4, 0x3c, 0x52, 0x7e, 0x2c, 0x5f, 0xf6, - 0x1f, 0x92, 0x76, 0xeb, 0xcb, 0x17, 0xfc, 0xdb, 0x0a, 0x70, 0x85, 0xb2, - 0xc5, 0xfe, 0x8b, 0x58, 0xff, 0x91, 0xac, 0x56, 0x22, 0xa3, 0x47, 0x4c, - 0x75, 0x4e, 0x9b, 0x87, 0xce, 0x79, 0x18, 0x4d, 0xff, 0xd3, 0xc2, 0xc3, - 0x5f, 0xff, 0xc8, 0xf5, 0x8b, 0xfe, 0x17, 0xa3, 0xf9, 0x8e, 0x43, 0x58, - 0xbe, 0x14, 0xf4, 0x35, 0x8b, 0xfd, 0x87, 0xc8, 0xa0, 0xf8, 0xb1, 0x52, - 0xbd, 0x96, 0x38, 0x6d, 0x6f, 0x08, 0xd7, 0x86, 0xfc, 0x7c, 0x20, 0xf4, - 0x4a, 0x74, 0xcf, 0xa0, 0x32, 0x2f, 0x18, 0x3d, 0x1c, 0xe0, 0x8d, 0xbb, - 0x23, 0x84, 0x78, 0x19, 0x25, 0xc3, 0x3a, 0xc5, 0xe8, 0xec, 0x3a, 0xc5, - 0xf3, 0x1c, 0x33, 0xac, 0x5e, 0x9d, 0x6c, 0xb1, 0x4e, 0x7c, 0x5e, 0x20, - 0xee, 0x24, 0xbf, 0x49, 0xcb, 0x06, 0xb1, 0x6e, 0x2c, 0x58, 0x40, 0x37, - 0x3e, 0x27, 0xbd, 0xdc, 0xe1, 0x2c, 0x54, 0xb2, 0x49, 0xf2, 0x7c, 0x36, - 0x28, 0x77, 0x33, 0xd0, 0x9a, 0xbb, 0x89, 0xed, 0xde, 0xac, 0x5f, 0x63, - 0xfc, 0x4b, 0x17, 0xe9, 0x2c, 0xec, 0xcb, 0x16, 0xde, 0x23, 0xca, 0xd1, - 0x15, 0xb7, 0x58, 0xad, 0x91, 0x3d, 0xa6, 0x10, 0xca, 0xaf, 0xfe, 0x7d, - 0xdb, 0x5b, 0xfd, 0xfb, 0x31, 0xd6, 0x2f, 0xfe, 0xd4, 0xfe, 0x4c, 0x09, - 0x88, 0xa5, 0x62, 0xe7, 0xf7, 0x11, 0x18, 0x1a, 0x45, 0xfc, 0x53, 0x9f, - 0xc2, 0x58, 0xbf, 0xff, 0xc6, 0xf0, 0x6f, 0x9d, 0x6e, 0xe4, 0xdd, 0x1e, - 0x67, 0x8b, 0x15, 0x88, 0x8e, 0x62, 0xbb, 0xff, 0xc7, 0x9d, 0xfd, 0xcc, - 0x04, 0xe7, 0x50, 0x58, 0xbe, 0x35, 0xf7, 0x75, 0x8b, 0xa6, 0x18, 0x7e, - 0x1e, 0x4c, 0xaf, 0xa2, 0xf4, 0xa1, 0x23, 0x78, 0x79, 0x05, 0x8b, 0xd1, - 0xee, 0x12, 0xc5, 0xe3, 0x5f, 0x75, 0x8b, 0xf3, 0xf6, 0x2c, 0xe1, 0x87, - 0xbb, 0xf1, 0xdf, 0x10, 0xdd, 0xd1, 0x2c, 0x5f, 0xf7, 0x6c, 0x1c, 0x59, - 0x84, 0x6a, 0xc5, 0xff, 0xe8, 0x4f, 0x3f, 0x25, 0xef, 0xc7, 0xb9, 0xd6, - 0x28, 0x91, 0x13, 0xe3, 0xcb, 0xfe, 0x99, 0xf7, 0x0b, 0x18, 0x96, 0x2f, - 0xfd, 0x27, 0xe3, 0xea, 0x7c, 0xfd, 0x96, 0x2f, 0xd1, 0xef, 0xf6, 0x89, - 0x62, 0xa4, 0xfb, 0x3e, 0x81, 0x46, 0xa3, 0x0f, 0xd0, 0xa2, 0xbf, 0xa7, - 0x72, 0x6e, 0xbc, 0xb1, 0x7c, 0x42, 0x68, 0x2c, 0x5f, 0xee, 0x6a, 0x76, - 0x6d, 0x6e, 0xb1, 0x7d, 0xb4, 0x74, 0x9d, 0x62, 0x9c, 0xf7, 0x43, 0x36, - 0xbf, 0xf4, 0xf5, 0xee, 0x08, 0xf9, 0xd7, 0x96, 0x2f, 0xec, 0x35, 0xbc, - 0x52, 0xb1, 0x50, 0x56, 0x77, 0x89, 0xaf, 0x0a, 0x18, 0xf8, 0x72, 0x9c, - 0xa7, 0x85, 0xfe, 0x7f, 0xec, 0x44, 0x1a, 0x15, 0xfa, 0x7d, 0xb6, 0x04, - 0xb1, 0x6e, 0xcb, 0x17, 0xf8, 0x9b, 0x66, 0x83, 0xfd, 0x62, 0xff, 0xfd, - 0xbb, 0xe9, 0xf3, 0xb7, 0xf3, 0x09, 0x9b, 0xb2, 0xc5, 0xba, 0xdd, 0x11, - 0x5e, 0x33, 0xad, 0x23, 0xcc, 0xe5, 0x42, 0x84, 0xf5, 0xfc, 0xe2, 0xdb, - 0x93, 0x05, 0x8b, 0xf8, 0x98, 0x23, 0x36, 0x1a, 0xc5, 0xe7, 0x07, 0x16, - 0x2f, 0xb3, 0x6e, 0xde, 0x58, 0xac, 0x3c, 0x31, 0x0e, 0xdf, 0xfd, 0xc6, - 0xeb, 0xde, 0xcd, 0xc6, 0x2d, 0x96, 0x2d, 0x9b, 0x9f, 0x57, 0x88, 0x6f, - 0xff, 0x19, 0x90, 0x21, 0x37, 0x3f, 0x80, 0x65, 0x8b, 0xff, 0x7b, 0x81, - 0xf2, 0x4b, 0x66, 0x82, 0xc5, 0x41, 0x11, 0x78, 0x95, 0x7e, 0x1e, 0xe2, - 0xc8, 0xf5, 0x8b, 0xfd, 0xd7, 0xe5, 0xc9, 0x86, 0xb1, 0x77, 0x47, 0x58, - 0xb1, 0x49, 0xe6, 0x61, 0x9d, 0x44, 0x89, 0xe3, 0xbc, 0xdf, 0x73, 0x08, - 0xd5, 0x8b, 0xe9, 0xc8, 0x32, 0xc5, 0x74, 0x78, 0x9f, 0x23, 0xbf, 0xff, - 0xb7, 0xfb, 0x47, 0x99, 0x83, 0x37, 0x1f, 0x45, 0x9d, 0x96, 0x2f, 0xff, - 0xf7, 0xf3, 0xd1, 0xd8, 0x4f, 0x3d, 0x16, 0x76, 0x9c, 0x09, 0x62, 0xff, - 0xfc, 0x2d, 0x37, 0x24, 0x5d, 0xfc, 0xff, 0x18, 0xb7, 0x58, 0xae, 0x22, - 0xfb, 0xcc, 0x97, 0xc0, 0x8d, 0x3b, 0xde, 0xf1, 0x62, 0x9c, 0xf5, 0xb4, - 0x47, 0x52, 0xa8, 0x88, 0x6d, 0x18, 0x46, 0xd1, 0xbb, 0x5f, 0xe1, 0xf6, - 0x92, 0xf6, 0x01, 0x62, 0xfd, 0x3e, 0xfc, 0xf9, 0x62, 0xe2, 0x02, 0xc5, - 0x6c, 0x7e, 0x9a, 0x35, 0x62, 0x8b, 0xfc, 0xdd, 0x73, 0x59, 0xfe, 0x2c, - 0x52, 0xc5, 0xfc, 0x2e, 0xa2, 0x72, 0xc5, 0x8b, 0xff, 0xff, 0xc2, 0xd7, - 0xf2, 0x28, 0x9b, 0x51, 0x7b, 0xe2, 0x07, 0x31, 0xfb, 0x0e, 0x56, 0x2f, - 0xf9, 0xff, 0xcd, 0x39, 0x49, 0xd6, 0x2f, 0xdc, 0x88, 0xb2, 0x25, 0x8b, - 0xfe, 0x68, 0x8b, 0x07, 0xf9, 0xe2, 0xc5, 0x49, 0xf1, 0xe1, 0x55, 0x3a, - 0x67, 0x31, 0xef, 0xdf, 0x84, 0xdd, 0xfb, 0xdf, 0x62, 0x35, 0x62, 0xff, - 0x77, 0x10, 0x85, 0xbb, 0x9a, 0xb1, 0x6f, 0x2c, 0x52, 0xc5, 0xf3, 0x84, - 0x76, 0xe8, 0xbe, 0xf0, 0x95, 0xfe, 0x16, 0xc3, 0xfe, 0x14, 0xac, 0x54, - 0xa3, 0x0f, 0x75, 0x72, 0x38, 0xbf, 0xcf, 0x81, 0x45, 0x07, 0x25, 0x8b, - 0xff, 0xe9, 0x3c, 0x7b, 0xcc, 0x96, 0xb1, 0xcf, 0x8b, 0x17, 0xff, 0x60, - 0xff, 0x21, 0x75, 0x0f, 0x08, 0x6b, 0x17, 0xf0, 0x31, 0xcf, 0x31, 0xeb, - 0x17, 0xe0, 0xb0, 0xef, 0xe5, 0x8b, 0xff, 0x81, 0xf7, 0x17, 0xb9, 0xf1, - 0x67, 0x96, 0x2e, 0xce, 0x2c, 0x5c, 0xde, 0x58, 0xb4, 0x34, 0x6b, 0xbe, - 0x2f, 0x52, 0x8c, 0x46, 0x29, 0x13, 0xa5, 0x62, 0x64, 0x5c, 0x87, 0xa5, - 0x6c, 0xb9, 0xa0, 0x38, 0xda, 0x30, 0xe3, 0x78, 0x76, 0x47, 0x97, 0xc4, - 0x68, 0x49, 0xfe, 0x8d, 0xaa, 0xbb, 0xc5, 0xd6, 0x5c, 0x9c, 0xdc, 0xbf, - 0xfd, 0x9a, 0x8d, 0xb9, 0xe2, 0x7e, 0xb8, 0x67, 0x96, 0x2f, 0xff, 0xd9, - 0x1e, 0xc4, 0x0d, 0xb0, 0x20, 0x98, 0x8a, 0x56, 0x2f, 0xff, 0x64, 0x96, - 0x6e, 0x59, 0xe1, 0x30, 0x4b, 0x17, 0xff, 0x17, 0xf2, 0x7a, 0x67, 0xe0, - 0x66, 0xac, 0x5f, 0xf8, 0x7f, 0x9d, 0x16, 0x76, 0x6f, 0x2c, 0x5f, 0x7e, - 0x3d, 0xce, 0xb1, 0x7a, 0x0f, 0xe3, 0x0f, 0x9b, 0x10, 0x2a, 0x51, 0xbf, - 0x14, 0x2b, 0x2f, 0xff, 0xb6, 0x62, 0xf7, 0x04, 0x5e, 0xf7, 0xd8, 0x6b, - 0x17, 0xfd, 0x80, 0x8e, 0xc6, 0x1e, 0x71, 0x62, 0xff, 0xe7, 0xf7, 0xf1, - 0xe1, 0xcc, 0xeb, 0xcb, 0x15, 0x05, 0x4f, 0x23, 0x58, 0xc8, 0xca, 0x18, - 0xa0, 0x94, 0x78, 0x77, 0x7f, 0x14, 0xc3, 0xfc, 0x02, 0xc5, 0xff, 0x00, - 0xb3, 0xdc, 0x66, 0x25, 0x8b, 0xff, 0x85, 0x91, 0x63, 0xee, 0x59, 0xfc, - 0x58, 0xb0, 0x06, 0x8a, 0x9d, 0xcb, 0x88, 0xde, 0xf1, 0xdb, 0xa5, 0x8b, - 0xff, 0xfa, 0x0e, 0x3c, 0xfe, 0x6d, 0x30, 0x7e, 0x73, 0x23, 0xd6, 0x2b, - 0x48, 0xb2, 0x01, 0xb7, 0x87, 0xaf, 0xf8, 0x58, 0xff, 0xe1, 0xdf, 0x8b, - 0x17, 0x08, 0xd5, 0x8b, 0xfd, 0x9f, 0x1f, 0xe4, 0xb6, 0x58, 0xb0, 0xfe, - 0x79, 0xa1, 0x0c, 0xdf, 0x7f, 0x06, 0xeb, 0x15, 0x27, 0x97, 0xc2, 0x9a, - 0x96, 0xe2, 0x92, 0x10, 0xbe, 0x1c, 0x6f, 0x59, 0x2e, 0xfd, 0xe3, 0x81, - 0x8f, 0x35, 0x88, 0xbf, 0x50, 0xde, 0x3c, 0x2c, 0xff, 0x2b, 0x89, 0xa1, - 0x6c, 0x02, 0xf2, 0x9d, 0x9a, 0xe1, 0x97, 0xa5, 0x65, 0x8a, 0x3b, 0x70, - 0x8c, 0x03, 0x86, 0x8d, 0xfe, 0xc1, 0xed, 0xa1, 0x48, 0x16, 0x2f, 0xff, - 0x80, 0xdf, 0xc0, 0x01, 0xb5, 0x9d, 0xbf, 0x8b, 0x17, 0xff, 0xef, 0x70, - 0x84, 0x2e, 0xa1, 0xc1, 0xff, 0x1f, 0xcb, 0x15, 0xa4, 0x6f, 0x1c, 0xd4, - 0x94, 0x6f, 0xe8, 0x6b, 0x52, 0x7e, 0x2c, 0x54, 0x9e, 0xf7, 0x45, 0xf7, - 0xfa, 0x7d, 0xc1, 0xfe, 0x49, 0x62, 0xff, 0xa1, 0x9e, 0x7e, 0xa0, 0x52, - 0xb1, 0x78, 0x9c, 0x63, 0x3e, 0xcf, 0x19, 0xd8, 0xeb, 0x17, 0xe0, 0x39, - 0x43, 0x8b, 0x15, 0xd1, 0xba, 0xf0, 0x95, 0x62, 0x23, 0x9d, 0xb2, 0xfd, - 0x13, 0xfd, 0xce, 0xb1, 0x7f, 0x7b, 0x9f, 0x96, 0xd2, 0xc5, 0x7c, 0xf5, - 0xc8, 0xa6, 0xe0, 0x71, 0x62, 0xfb, 0x72, 0x17, 0x16, 0x2f, 0xf8, 0x78, - 0x72, 0xcf, 0x7d, 0xd6, 0x2f, 0x6a, 0x46, 0xb1, 0x7e, 0x29, 0xdd, 0x99, - 0x62, 0xec, 0xe1, 0xa7, 0x89, 0xe1, 0xdb, 0xe0, 0xb3, 0xdc, 0x58, 0xbc, - 0x6b, 0xfd, 0x62, 0xfc, 0x2d, 0x02, 0x37, 0xef, 0xb5, 0x8a, 0xc4, 0xd1, - 0x9c, 0x93, 0xef, 0x8c, 0x5c, 0x02, 0x4e, 0x0f, 0x56, 0x27, 0xa8, 0xe4, - 0x3f, 0x8d, 0x7a, 0xff, 0x6b, 0x06, 0x67, 0x3f, 0x2b, 0x17, 0xdc, 0x29, - 0xd9, 0x62, 0xff, 0xbc, 0x23, 0x33, 0x37, 0xc9, 0x58, 0xad, 0x1e, 0xe9, - 0x11, 0xdf, 0xff, 0xbb, 0x8b, 0x3b, 0x37, 0x1f, 0x0b, 0xf1, 0xee, 0x75, - 0x8b, 0x43, 0x0f, 0xf1, 0xc8, 0x6f, 0x4e, 0x12, 0xc5, 0xd2, 0x4b, 0x15, - 0xa3, 0x62, 0x71, 0xbb, 0xe3, 0x75, 0x27, 0x58, 0xbf, 0x4c, 0x59, 0x9b, - 0xac, 0x5e, 0x8d, 0xe3, 0x68, 0xdd, 0x62, 0xec, 0x09, 0x62, 0xff, 0x0d, - 0x9c, 0x62, 0xf7, 0x16, 0x2b, 0x63, 0xcc, 0xc1, 0x8b, 0xb3, 0x65, 0x8a, - 0x31, 0x32, 0x19, 0x21, 0xd8, 0x90, 0xd2, 0x90, 0x9e, 0x63, 0x88, 0xaf, - 0xf9, 0xc8, 0xb0, 0x7f, 0x9e, 0xcb, 0x17, 0xf8, 0x5c, 0xfb, 0x40, 0x6e, - 0xb1, 0x7f, 0xff, 0xfe, 0x92, 0xdb, 0xdc, 0xc0, 0xbf, 0x3d, 0xbc, 0x53, - 0xd7, 0xf1, 0x87, 0x98, 0x75, 0x8b, 0xfc, 0xe5, 0xe8, 0x66, 0xb1, 0x62, - 0xff, 0x0d, 0xa1, 0xee, 0x30, 0x16, 0x2f, 0x3c, 0x9d, 0x62, 0xff, 0xb1, - 0xb5, 0xdb, 0xd8, 0xfb, 0xac, 0x5d, 0x3b, 0xe2, 0x22, 0xf4, 0x68, 0x43, - 0x95, 0xb2, 0x6f, 0x90, 0x84, 0x29, 0x42, 0xf6, 0xff, 0xf1, 0xf0, 0x7e, - 0xf8, 0x80, 0x6e, 0x17, 0x96, 0x2f, 0xf3, 0x31, 0xb9, 0xac, 0xf2, 0xc5, - 0xfd, 0xaf, 0xb1, 0xdf, 0x8b, 0x17, 0xef, 0xfd, 0xb6, 0x9f, 0x9f, 0x08, - 0x66, 0x77, 0xfe, 0x6d, 0x67, 0x6c, 0x71, 0xfd, 0xd6, 0x2b, 0x0f, 0xfc, - 0x08, 0x17, 0xff, 0xf7, 0x1f, 0x9c, 0x93, 0x30, 0x6d, 0x01, 0xeb, 0x0e, - 0xb1, 0x58, 0x9d, 0x49, 0xe3, 0x2c, 0xf1, 0x0d, 0xff, 0x98, 0x1a, 0x92, - 0xf7, 0xf2, 0x0b, 0x17, 0xff, 0x81, 0x8e, 0x5e, 0xc3, 0xb7, 0x80, 0xcb, - 0x15, 0x2a, 0xa8, 0x32, 0x3e, 0x47, 0x36, 0x11, 0xf5, 0xfd, 0xf6, 0x2d, - 0xb0, 0x6b, 0x17, 0xb3, 0xec, 0xb1, 0x7f, 0xee, 0x0f, 0xf3, 0x14, 0x1f, - 0x50, 0x58, 0xbc, 0x21, 0x12, 0xc5, 0xf9, 0xff, 0xfc, 0x1a, 0xc5, 0x2c, - 0x0c, 0xf1, 0x78, 0x3b, 0x5d, 0x22, 0xc2, 0x28, 0x43, 0x5f, 0xfc, 0x53, - 0x20, 0xe6, 0x47, 0xe8, 0x5d, 0x96, 0x28, 0xc4, 0xdb, 0x46, 0x5c, 0xd0, - 0xcc, 0x01, 0x55, 0xff, 0xb2, 0x1f, 0x68, 0x19, 0xe8, 0x3a, 0xc5, 0xf8, - 0xb0, 0x02, 0xe2, 0xc5, 0xfe, 0x9f, 0x7f, 0x1c, 0x99, 0x62, 0xb6, 0x3d, - 0x9d, 0x14, 0x5f, 0x30, 0xf3, 0x8b, 0x17, 0xd9, 0xb0, 0x70, 0x58, 0xb8, - 0x11, 0xd8, 0x78, 0xe4, 0x45, 0x7a, 0x3d, 0xce, 0xb1, 0x7f, 0xc0, 0xf6, - 0x38, 0xf0, 0xa2, 0x58, 0xf9, 0xa0, 0xbe, 0x26, 0xd1, 0xab, 0x17, 0x98, - 0x1c, 0x93, 0xec, 0x74, 0x9a, 0x94, 0xd5, 0xb1, 0xa9, 0xa1, 0x77, 0x7f, - 0xa1, 0xef, 0xe6, 0xa7, 0xcb, 0x17, 0xf0, 0x59, 0xbe, 0xf8, 0x12, 0xc5, - 0xdd, 0xef, 0x78, 0xb1, 0x76, 0xfd, 0x96, 0x2c, 0x05, 0x8b, 0xff, 0xd0, - 0xe6, 0x6a, 0x78, 0x58, 0x01, 0x71, 0x62, 0xb0, 0xf7, 0x18, 0x4a, 0xa3, - 0x44, 0x5c, 0xc9, 0x17, 0xdd, 0xeb, 0x13, 0x1f, 0xf4, 0x3a, 0xef, 0xff, - 0xd9, 0x3f, 0x9e, 0xdf, 0x98, 0xf3, 0x1b, 0xcc, 0x6a, 0xc5, 0xff, 0xec, - 0xee, 0x01, 0xe6, 0x2f, 0x38, 0xb5, 0xc5, 0x8b, 0xfb, 0x30, 0xbd, 0x1d, - 0x8b, 0x17, 0xbe, 0xfa, 0x58, 0xa3, 0x9e, 0x67, 0x7e, 0x5f, 0x7f, 0xf7, - 0x3d, 0x33, 0xa0, 0x44, 0x58, 0x12, 0xc5, 0xf0, 0x00, 0xc3, 0x58, 0xbb, - 0x3a, 0x58, 0xb7, 0xf0, 0xdd, 0xb9, 0x1d, 0x74, 0x8c, 0xd6, 0x27, 0x04, - 0x20, 0x6f, 0x1b, 0x01, 0x2c, 0x58, 0xeb, 0x17, 0x37, 0x96, 0x2f, 0x7e, - 0x75, 0xb1, 0xa9, 0x38, 0x95, 0xfe, 0x13, 0x17, 0xf1, 0xa2, 0x58, 0xb7, - 0x51, 0x1f, 0x30, 0x46, 0x74, 0xe8, 0xd9, 0x68, 0x57, 0x54, 0xae, 0x39, - 0x64, 0x6a, 0x66, 0x94, 0x3a, 0xdb, 0x46, 0xd0, 0x51, 0x87, 0x5f, 0xf3, - 0x77, 0x6b, 0x08, 0x9a, 0x25, 0x8b, 0xbe, 0x75, 0x8a, 0x96, 0xd1, 0x2e, - 0x11, 0x8e, 0x64, 0xa4, 0xc3, 0x4d, 0x7a, 0x8c, 0x39, 0xe3, 0x78, 0x8f, - 0x5e, 0xd1, 0xcf, 0xe7, 0x14, 0x1a, 0x3a, 0xf0, 0x21, 0x94, 0x7d, 0xfc, - 0x9c, 0xa5, 0x13, 0x40, 0x47, 0x77, 0xda, 0xcf, 0xf1, 0x62, 0xff, 0xfb, - 0x08, 0x5b, 0x1f, 0x3d, 0xcf, 0xc7, 0xb9, 0xd6, 0x2f, 0xdf, 0x93, 0xc8, - 0x16, 0x2c, 0x4b, 0x14, 0xe6, 0xe4, 0x45, 0x17, 0xdd, 0x72, 0x7a, 0x58, - 0xa8, 0xd9, 0x1e, 0xb2, 0x47, 0xdf, 0xc2, 0x34, 0x88, 0x2f, 0xff, 0x7d, - 0xc4, 0x5b, 0x60, 0xe2, 0x10, 0xb4, 0xb1, 0x7a, 0x37, 0xef, 0x23, 0x75, - 0x8b, 0xbb, 0x47, 0xac, 0x58, 0x71, 0xb9, 0xe5, 0x04, 0x5b, 0x7e, 0x89, - 0xf6, 0xce, 0x96, 0x2f, 0x68, 0x50, 0x58, 0xae, 0x8f, 0x27, 0xc5, 0x77, - 0xf1, 0x9e, 0x29, 0x3f, 0x16, 0x2f, 0xb3, 0x98, 0x12, 0xc5, 0x41, 0x38, - 0x3c, 0x84, 0xbb, 0xbb, 0xb1, 0x19, 0x17, 0xd2, 0xc5, 0xf6, 0x0d, 0xa0, - 0xb1, 0x7c, 0xda, 0xd6, 0x47, 0x9a, 0xe0, 0xc3, 0x2f, 0x16, 0x01, 0x62, - 0xd2, 0xb1, 0x40, 0x35, 0xbe, 0x1c, 0xb9, 0xbc, 0xb1, 0x5a, 0x37, 0x1f, - 0x21, 0xbd, 0x3a, 0xe2, 0xc5, 0xe0, 0x4f, 0x4b, 0x14, 0x73, 0x76, 0x01, - 0xdb, 0x83, 0xd2, 0xc5, 0xf3, 0xf1, 0xfb, 0x2c, 0x5f, 0xe2, 0xc1, 0xfc, - 0x5d, 0x79, 0x62, 0xb6, 0x3d, 0x93, 0x49, 0x2f, 0xf4, 0x9c, 0xb0, 0x02, - 0xe2, 0xc5, 0xff, 0x6b, 0x3f, 0x9b, 0x18, 0xfc, 0x58, 0xac, 0x4e, 0x05, - 0xd7, 0x3e, 0x42, 0xce, 0x44, 0x48, 0x23, 0x3b, 0xfd, 0x07, 0xe7, 0x27, - 0x50, 0x58, 0xbe, 0x63, 0xcb, 0xac, 0x5f, 0xc3, 0xfb, 0x43, 0x38, 0xb1, - 0x7b, 0xce, 0x12, 0xc5, 0x0d, 0x14, 0x31, 0x1a, 0x00, 0x84, 0x22, 0xeb, - 0xff, 0xa2, 0xfb, 0x1c, 0xb3, 0xb1, 0x67, 0x16, 0x2f, 0xe7, 0x21, 0x43, - 0x38, 0xb1, 0x7a, 0x1e, 0x75, 0x8b, 0xff, 0xf4, 0x1f, 0xdc, 0xdf, 0xef, - 0xee, 0xa0, 0xfe, 0xe2, 0xc5, 0xfe, 0xc1, 0xcf, 0x50, 0xcf, 0x2c, 0x5e, - 0xe4, 0x3a, 0x58, 0xbb, 0x36, 0x58, 0xbf, 0x48, 0x0e, 0xd0, 0x30, 0xdb, - 0xe8, 0x7e, 0xf6, 0xd9, 0xdc, 0xb1, 0x7f, 0x4e, 0x7b, 0x8d, 0xd2, 0xc5, - 0xff, 0x7a, 0x7a, 0x03, 0x7f, 0xee, 0xb1, 0x7c, 0xf1, 0xd9, 0xb2, 0xc5, - 0x61, 0xf0, 0x78, 0xea, 0xc7, 0x58, 0xbf, 0x10, 0xa1, 0x9c, 0x30, 0xd9, - 0xf6, 0x21, 0xbc, 0x13, 0x6c, 0xb1, 0x4e, 0x7b, 0xff, 0x40, 0xa9, 0x56, - 0x67, 0x87, 0xe6, 0xa3, 0x74, 0x5b, 0x10, 0xe9, 0xd6, 0x7e, 0xd6, 0x47, - 0xdc, 0x21, 0xf4, 0x64, 0x17, 0xdf, 0x16, 0x79, 0x62, 0xff, 0xc2, 0xea, - 0x1c, 0xfe, 0x6c, 0x22, 0x58, 0xbf, 0xc6, 0x6a, 0x3d, 0xc1, 0x83, 0x58, - 0xbd, 0x98, 0x35, 0x8b, 0x9b, 0x75, 0x8b, 0xf1, 0xb8, 0x2d, 0x6c, 0xb1, - 0x4c, 0x78, 0x62, 0x18, 0xa7, 0x4c, 0x77, 0x44, 0x67, 0x42, 0xf1, 0xc7, - 0x72, 0xfd, 0xa3, 0x23, 0x78, 0x77, 0x91, 0xf7, 0x8e, 0xfd, 0xec, 0x31, - 0xa3, 0x48, 0xc8, 0x63, 0x67, 0xde, 0xf9, 0x08, 0x2e, 0xfa, 0x96, 0xc6, - 0xb3, 0x99, 0x9f, 0x36, 0xda, 0x57, 0x14, 0x23, 0xfb, 0x1d, 0x33, 0xd7, - 0x2b, 0xbb, 0xd3, 0x67, 0x7e, 0x37, 0xa4, 0x9d, 0x75, 0x28, 0x3d, 0xe5, - 0x44, 0xc7, 0xc2, 0x1e, 0x2a, 0x4a, 0xa6, 0xa9, 0x10, 0x27, 0x95, 0xe9, - 0xfb, 0x6f, 0x62, 0xd3, 0xc8, 0xc0, 0x9f, 0x18, 0xef, 0xe1, 0x62, 0x54, - 0xac, 0x5e, 0x57, 0x35, 0x7e, 0xad, 0xb2, 0x05, 0x1f, 0xe7, 0x68, 0xf3, - 0x42, 0x7a, 0x8e, 0x94, 0x42, 0x1c, 0xe1, 0x47, 0x74, 0x76, 0x17, 0x73, - 0xeb, 0x17, 0xbb, 0x3c, 0xac, 0x5a, 0x32, 0x4d, 0xb0, 0xc6, 0x2f, 0xfa, - 0x33, 0x9a, 0x91, 0x78, 0x47, 0x58, 0xbf, 0xfd, 0x0e, 0x46, 0x07, 0x9a, - 0xfb, 0xc5, 0x03, 0xac, 0x54, 0x11, 0x1f, 0xd1, 0xf5, 0x69, 0x1b, 0x8d, - 0x0b, 0x8b, 0xfb, 0xb9, 0xc6, 0x53, 0x12, 0xc5, 0xe9, 0x62, 0x58, 0xbe, - 0xcf, 0xb7, 0x96, 0x2d, 0xde, 0xe1, 0xf7, 0x7c, 0xc4, 0x86, 0xef, 0xee, - 0xf9, 0x1a, 0x37, 0xb3, 0xb9, 0x62, 0xee, 0xff, 0xeb, 0x17, 0xff, 0x49, - 0xca, 0x4c, 0x8a, 0x13, 0xad, 0x96, 0x2f, 0xff, 0x4e, 0x85, 0x14, 0x4f, - 0xf7, 0x3b, 0x0d, 0x62, 0xfe, 0xc3, 0x99, 0x11, 0x44, 0xb1, 0x7f, 0x48, - 0x39, 0x3a, 0x1a, 0xc5, 0xf9, 0xbd, 0xc9, 0x8f, 0x58, 0xa1, 0xa2, 0x2b, - 0xe6, 0x24, 0x5d, 0x7f, 0xb8, 0xe7, 0x9d, 0xf0, 0xeb, 0x17, 0xe0, 0xfb, - 0xa4, 0x80, 0xb1, 0x7f, 0x69, 0x81, 0xcd, 0x4a, 0xc5, 0x7c, 0xf6, 0xb8, - 0x59, 0x7d, 0x00, 0xc2, 0xc5, 0x8b, 0xff, 0xff, 0x17, 0xb9, 0x2f, 0x0c, - 0xee, 0x2f, 0x4f, 0xe4, 0xd1, 0x4f, 0x72, 0xc5, 0xee, 0xe1, 0xca, 0xc5, - 0x62, 0x2d, 0x98, 0x94, 0x4e, 0x37, 0xe1, 0x7a, 0x29, 0x35, 0x62, 0xff, - 0xa7, 0x6e, 0x44, 0xe7, 0x68, 0x96, 0x28, 0x6a, 0xd1, 0xf7, 0x47, 0x78, - 0x6b, 0x47, 0x97, 0xc5, 0x08, 0xef, 0xc3, 0x60, 0x8b, 0xbb, 0x8a, 0xef, - 0xff, 0xfe, 0xce, 0xe2, 0x6d, 0xfb, 0xa3, 0x38, 0xe1, 0x16, 0x70, 0xc6, - 0xf0, 0xa5, 0x62, 0xdf, 0x58, 0xb3, 0xac, 0x51, 0xa6, 0x8c, 0x02, 0x55, - 0xa4, 0x60, 0xf2, 0x13, 0xf7, 0xff, 0xff, 0x83, 0x32, 0x5f, 0xf3, 0xdd, - 0x27, 0x8f, 0x7f, 0xe0, 0x38, 0x61, 0x9f, 0x8e, 0x58, 0xbf, 0xb7, 0x6d, - 0x6d, 0x81, 0x2c, 0x56, 0x23, 0x7b, 0xa2, 0x87, 0x84, 0x2d, 0xf4, 0x5e, - 0x61, 0xac, 0x5f, 0xd2, 0xdb, 0x6c, 0x19, 0xd6, 0x29, 0x8f, 0x54, 0x89, - 0x2f, 0xff, 0xdf, 0xc2, 0xc3, 0x7e, 0xd0, 0xf8, 0x4c, 0x19, 0xd6, 0x2d, - 0xd2, 0xc5, 0xff, 0x4b, 0xf3, 0x1f, 0xf3, 0xe5, 0x8a, 0x81, 0xe5, 0x7c, - 0x4e, 0xfe, 0x87, 0xf3, 0xdf, 0x75, 0x8b, 0xed, 0xd9, 0xb7, 0x54, 0x9a, - 0xc5, 0xfe, 0x7d, 0xf3, 0x50, 0x6f, 0xac, 0x5f, 0xfa, 0x3f, 0x8e, 0x7e, - 0x7e, 0x4b, 0xcb, 0x17, 0xe6, 0xf1, 0x30, 0x16, 0x2f, 0x9f, 0x5f, 0x63, - 0x11, 0x3b, 0x86, 0x9c, 0x42, 0xbf, 0xe6, 0x3f, 0x1f, 0x3b, 0x36, 0x96, - 0x2f, 0x9f, 0x51, 0xe3, 0x58, 0xa8, 0x2a, 0x66, 0x78, 0x51, 0x47, 0x91, - 0x68, 0xbb, 0xf0, 0xce, 0x24, 0x6e, 0xc7, 0x57, 0xec, 0x83, 0xfc, 0x4b, - 0x17, 0xf3, 0x46, 0x3e, 0xde, 0x02, 0xc5, 0xc7, 0xec, 0xb1, 0x44, 0x79, - 0x82, 0x32, 0xbe, 0x18, 0x9b, 0x65, 0x8b, 0xfc, 0x27, 0xfe, 0xcc, 0x43, - 0x58, 0xa9, 0x3d, 0x88, 0x12, 0x5d, 0xe9, 0x58, 0xbf, 0xf1, 0x36, 0xa6, - 0x23, 0x33, 0x4e, 0xb1, 0x7f, 0xfe, 0xe1, 0x4c, 0x5a, 0x70, 0x4b, 0xf7, - 0x0f, 0x38, 0xb1, 0x7f, 0x39, 0xda, 0x2c, 0xfa, 0xc5, 0xf9, 0xb9, 0xc9, - 0x3a, 0xc5, 0x74, 0x98, 0x23, 0x8b, 0xc4, 0x7e, 0x75, 0x8f, 0x97, 0x5f, - 0x67, 0x71, 0x79, 0x62, 0xe9, 0x09, 0x62, 0x80, 0x6f, 0x42, 0x25, 0xbf, - 0xc2, 0x2c, 0xee, 0x70, 0x9d, 0x62, 0xfb, 0x8c, 0x5b, 0xac, 0x57, 0xcf, - 0x67, 0xb8, 0xda, 0xff, 0x17, 0x9c, 0xd2, 0x63, 0xac, 0x5f, 0xd2, 0x40, - 0xee, 0xcd, 0x96, 0x29, 0x8f, 0x90, 0x23, 0x3b, 0xe6, 0xee, 0x9d, 0x2c, - 0x57, 0xcf, 0x1c, 0x22, 0x2b, 0xa7, 0xcb, 0x15, 0x29, 0xc2, 0xe3, 0xdb, - 0xc3, 0x42, 0x22, 0x3b, 0xfe, 0xed, 0x25, 0xe8, 0xc0, 0xb3, 0xeb, 0x17, - 0x49, 0xd6, 0x2b, 0x0f, 0x5b, 0x47, 0xf7, 0xf7, 0xf3, 0x93, 0xb7, 0x72, - 0xc5, 0xff, 0xe1, 0xc9, 0xca, 0x4c, 0x8a, 0x13, 0xad, 0x96, 0x2e, 0x00, - 0xd6, 0x2f, 0xb7, 0x66, 0xdd, 0x52, 0x41, 0x97, 0xff, 0xbf, 0x3f, 0x73, - 0x73, 0x7f, 0xc9, 0x32, 0xc5, 0x68, 0xfe, 0xf8, 0x63, 0x7d, 0x9b, 0xe7, - 0x4b, 0x17, 0x42, 0x32, 0x53, 0x26, 0x1a, 0x6e, 0x42, 0x4f, 0xe4, 0x57, - 0xfd, 0xef, 0xe4, 0x3e, 0xc4, 0x35, 0x8b, 0xfd, 0x14, 0x9b, 0x1e, 0xc1, - 0x79, 0x62, 0x88, 0xfc, 0xfc, 0x73, 0x58, 0xa8, 0xf1, 0xa3, 0x58, 0x14, - 0x30, 0xef, 0x9f, 0x6c, 0xd2, 0xc5, 0xff, 0xc0, 0x0f, 0xe1, 0x07, 0xe0, - 0xfb, 0x98, 0x0b, 0x17, 0xfb, 0xb9, 0x81, 0x19, 0x3c, 0x09, 0x62, 0xba, - 0x45, 0x66, 0x88, 0xfe, 0x9d, 0x7a, 0x29, 0xf2, 0xc5, 0xf3, 0xfa, 0x78, - 0xb1, 0x7c, 0x2f, 0x4f, 0x16, 0x2e, 0xee, 0x95, 0x8a, 0x94, 0x57, 0x61, - 0x8f, 0xc7, 0x88, 0x88, 0x44, 0x76, 0xdd, 0x62, 0xfe, 0xf3, 0x8f, 0x0a, - 0x0b, 0x17, 0xfc, 0x39, 0xd6, 0xc2, 0x33, 0x90, 0x58, 0xbe, 0x1f, 0xf0, - 0x25, 0x8a, 0xc3, 0xe1, 0x73, 0xdb, 0xda, 0xcf, 0x2c, 0x5f, 0xec, 0xfe, - 0x7b, 0xec, 0x75, 0x8b, 0xfb, 0x0b, 0x76, 0x20, 0x2c, 0x51, 0x89, 0x9f, - 0x60, 0x9e, 0xf0, 0x8e, 0x62, 0x02, 0x1d, 0xe1, 0x9d, 0xc0, 0x75, 0x8b, - 0xc6, 0xcf, 0x16, 0x2f, 0xf7, 0x8b, 0x00, 0xc4, 0x05, 0x8b, 0xcc, 0x5b, - 0xe1, 0xe8, 0x06, 0x3d, 0x46, 0xa2, 0x68, 0x4c, 0xf7, 0xfa, 0x13, 0xad, - 0xa7, 0x5b, 0x2c, 0x5f, 0xee, 0xa1, 0x39, 0xe3, 0x31, 0x62, 0xf6, 0xf3, - 0xba, 0xc5, 0x4a, 0x22, 0xb0, 0xd9, 0x8d, 0x6f, 0xc7, 0xce, 0xe2, 0x02, - 0xc5, 0xec, 0x3b, 0xac, 0x5f, 0xfe, 0x7e, 0x6c, 0x1f, 0x9c, 0x85, 0x0c, - 0xe2, 0xc5, 0xe7, 0x34, 0xeb, 0x17, 0xfa, 0x77, 0xf1, 0x4e, 0x74, 0xb1, - 0x43, 0x44, 0xf6, 0x93, 0x0e, 0x3d, 0x7b, 0xd9, 0xf5, 0x8b, 0xf8, 0xbd, - 0x3a, 0x73, 0xac, 0x5f, 0xf9, 0xfc, 0x2d, 0x37, 0x0f, 0xee, 0x2c, 0x54, - 0x9f, 0x6b, 0x16, 0xdd, 0xe7, 0x58, 0xbf, 0xfe, 0xc0, 0x36, 0xb3, 0xb6, - 0x0f, 0x0f, 0x3b, 0xac, 0x5d, 0xb7, 0x7e, 0xb1, 0x52, 0xa9, 0x14, 0x65, - 0x79, 0x0b, 0xa3, 0x4c, 0x3f, 0x08, 0xa6, 0x20, 0x21, 0x71, 0x28, 0xdc, - 0x78, 0x96, 0x2f, 0x80, 0x22, 0x89, 0x62, 0xe7, 0xdd, 0x62, 0xa4, 0xde, - 0x47, 0x12, 0x5b, 0xe6, 0x1f, 0xc4, 0x62, 0xad, 0xfd, 0xae, 0x66, 0xa7, - 0x8b, 0x16, 0x02, 0xc5, 0xb6, 0x58, 0xa9, 0x34, 0xb8, 0x25, 0x6f, 0x2c, - 0x5b, 0x87, 0x36, 0x3e, 0x1f, 0xa7, 0x45, 0x5b, 0x42, 0x12, 0xfd, 0x10, - 0x18, 0xa2, 0x58, 0xb8, 0x9d, 0x62, 0xa4, 0xf0, 0x37, 0x2a, 0xbf, 0xe2, - 0x93, 0xcb, 0x8f, 0x0e, 0xb1, 0x7c, 0xc0, 0xcd, 0x2c, 0x5f, 0xe0, 0x73, - 0x53, 0x06, 0xd2, 0xc5, 0xf4, 0xc6, 0x0c, 0x6b, 0x17, 0xfb, 0x05, 0xbf, - 0xe7, 0x58, 0xb1, 0x7f, 0xda, 0x90, 0x8b, 0x06, 0xfa, 0x58, 0xbf, 0xfe, - 0xcf, 0xfd, 0x9f, 0xd2, 0x59, 0xfc, 0xdd, 0x62, 0xb1, 0x56, 0x69, 0xb0, - 0xd7, 0x76, 0x68, 0x88, 0xbe, 0x6e, 0xc4, 0x44, 0x69, 0xc2, 0x61, 0x1a, - 0x47, 0x1c, 0xdf, 0xff, 0xb2, 0x30, 0xb1, 0xca, 0x62, 0x62, 0x13, 0xec, - 0xb1, 0x7f, 0x3f, 0x85, 0x13, 0xf9, 0x62, 0x86, 0x88, 0x58, 0x95, 0xaf, - 0xfe, 0x6e, 0xee, 0x67, 0x71, 0x37, 0xb3, 0xb9, 0x62, 0xff, 0x36, 0xcd, - 0x9e, 0xc3, 0xac, 0x5f, 0xff, 0xfd, 0xa0, 0x30, 0xe7, 0x5d, 0xdc, 0xce, - 0xe2, 0x04, 0xc4, 0x1f, 0x70, 0x8e, 0xb1, 0x7f, 0xff, 0x37, 0xb0, 0xf8, - 0xf1, 0x43, 0xf8, 0x31, 0x7b, 0x8b, 0x17, 0xff, 0xde, 0x60, 0x8b, 0x1c, - 0x11, 0x67, 0xc3, 0x25, 0x8b, 0xff, 0xee, 0x3e, 0xcd, 0xc6, 0x26, 0xf7, - 0xe6, 0x25, 0x8b, 0xff, 0x31, 0x03, 0x3d, 0x24, 0xe0, 0x58, 0xa9, 0x4e, - 0xdc, 0x6f, 0xdf, 0x5c, 0xf2, 0x8c, 0x72, 0x85, 0xff, 0xff, 0x41, 0xc2, - 0x6f, 0xc8, 0xf7, 0x6d, 0xbc, 0x59, 0xb6, 0xa5, 0x62, 0xd1, 0x91, 0xb3, - 0x7f, 0x59, 0xdf, 0x67, 0x1d, 0xf5, 0x3c, 0x99, 0x6c, 0x90, 0x94, 0x4e, - 0x38, 0x44, 0xe4, 0xa8, 0x63, 0x5c, 0xf7, 0x74, 0xe9, 0xe5, 0xe3, 0x25, - 0x8a, 0x50, 0x76, 0xa1, 0x2e, 0x79, 0x4b, 0xbf, 0x8e, 0x55, 0xa3, 0x85, - 0x04, 0x3d, 0x8a, 0x15, 0xdc, 0x94, 0xe5, 0xe9, 0x77, 0xe2, 0x8c, 0x60, - 0x22, 0x48, 0xe4, 0xc0, 0xe3, 0xea, 0xee, 0x4d, 0xbe, 0xff, 0xf3, 0x65, - 0x8b, 0xff, 0xd9, 0x1e, 0xf8, 0x7c, 0xfe, 0x31, 0x6e, 0xb1, 0x71, 0xb1, - 0x8c, 0x7d, 0xe4, 0x49, 0x7f, 0xe6, 0x84, 0x66, 0x6b, 0x76, 0x6d, 0xd5, - 0x24, 0x59, 0x7f, 0x84, 0xf0, 0x7f, 0xbf, 0x65, 0x8b, 0x46, 0x1d, 0x10, - 0xbc, 0x50, 0xbf, 0xd1, 0x99, 0xad, 0xd9, 0xb7, 0x54, 0x9d, 0x45, 0xff, - 0xff, 0xff, 0xa3, 0x4d, 0xbb, 0xe4, 0x6a, 0x8d, 0x7d, 0xff, 0x7f, 0xdf, - 0x0c, 0x33, 0xf1, 0xd1, 0x9b, 0x77, 0xd6, 0x34, 0xef, 0x93, 0xde, 0x77, - 0xe0, 0x30, 0xcf, 0xc7, 0x2c, 0x54, 0xc6, 0x66, 0x81, 0x09, 0x4b, 0xb8, - 0xdf, 0xbc, 0x63, 0x8f, 0x4a, 0x68, 0x3d, 0x2e, 0xa7, 0xf8, 0xf0, 0xab, - 0x69, 0x7f, 0x00, 0xb4, 0x08, 0x25, 0x29, 0x27, 0x90, 0xb5, 0xf1, 0x64, - 0x72, 0x2d, 0xf6, 0xec, 0xdb, 0xaa, 0x42, 0x12, 0xe9, 0xd2, 0xc5, 0x68, - 0xf2, 0x3c, 0x63, 0x6d, 0x96, 0x2f, 0xf4, 0x9e, 0x5c, 0x78, 0x75, 0x8b, - 0xdf, 0x72, 0x58, 0xbb, 0x06, 0xb1, 0x6d, 0xd6, 0x2b, 0x73, 0xc6, 0xf8, - 0xe1, 0x0b, 0xdf, 0x67, 0x67, 0xd2, 0xc5, 0xf3, 0x7c, 0x72, 0xb1, 0x7c, - 0xfa, 0xce, 0x96, 0x2b, 0x13, 0x45, 0x34, 0x8b, 0x71, 0x3e, 0x9e, 0x23, - 0xcb, 0xfc, 0x49, 0x1c, 0x45, 0x7f, 0xf6, 0xd8, 0x14, 0x67, 0x06, 0x26, - 0xd4, 0x16, 0x2f, 0x8a, 0x41, 0xc5, 0x8b, 0xfb, 0x42, 0xff, 0x6c, 0x1a, - 0xc5, 0xec, 0xc1, 0xac, 0x5f, 0xff, 0xfe, 0xf3, 0x90, 0xa1, 0x9c, 0x2c, - 0xd8, 0x38, 0x19, 0xc1, 0x00, 0xf3, 0x05, 0x8b, 0xbd, 0x19, 0x12, 0x3a, - 0xb4, 0x44, 0x46, 0x21, 0x8e, 0x54, 0x62, 0x7d, 0xf0, 0x6d, 0xc8, 0xcd, - 0x6f, 0xfe, 0x8c, 0xef, 0xe4, 0xbc, 0x19, 0xcb, 0x36, 0x58, 0xb4, 0x72, - 0xc5, 0xf4, 0xfe, 0x4e, 0xb1, 0x7d, 0xbb, 0x36, 0xea, 0x90, 0xd8, 0xad, - 0xcf, 0x4f, 0x44, 0x57, 0xb4, 0xdb, 0x2c, 0x5a, 0x30, 0x68, 0xa9, 0xc6, - 0x8f, 0x11, 0xdf, 0xe8, 0xcc, 0xd6, 0xec, 0xdb, 0xaa, 0x49, 0xb2, 0xe6, - 0x82, 0xc5, 0xf4, 0xf6, 0x92, 0x58, 0xbe, 0xdd, 0x9b, 0x75, 0x49, 0x40, - 0x50, 0xcf, 0xaf, 0x71, 0x7d, 0x11, 0xd8, 0x25, 0x8a, 0x58, 0xb6, 0x74, - 0x5f, 0xc4, 0x27, 0x7d, 0xff, 0xc8, 0xd6, 0x2d, 0x19, 0x88, 0x99, 0xfa, - 0x78, 0x64, 0xf7, 0xfa, 0x33, 0x35, 0xbb, 0x36, 0xea, 0x92, 0x98, 0xb8, - 0x0e, 0xb1, 0x7e, 0x17, 0x4c, 0x2d, 0x2c, 0x5b, 0x8b, 0x17, 0x84, 0xfa, - 0x58, 0xbf, 0xbf, 0x9d, 0xcf, 0x81, 0x2c, 0x5f, 0x6e, 0xcd, 0xba, 0xa4, - 0xb0, 0x2f, 0xbd, 0x3d, 0x41, 0x62, 0xa2, 0x44, 0x36, 0x8c, 0x4e, 0x63, - 0x7e, 0x70, 0x86, 0x2d, 0x2c, 0x5b, 0x65, 0x8b, 0x83, 0x82, 0xc5, 0xe6, - 0x2d, 0xd6, 0x2a, 0x4f, 0x24, 0x02, 0x7e, 0x19, 0xbb, 0x84, 0xb1, 0x70, - 0xcd, 0x58, 0xbd, 0x20, 0x75, 0x8b, 0x8f, 0xc5, 0x8b, 0xf3, 0x43, 0xcf, - 0xb2, 0xc5, 0xfb, 0x9c, 0x2c, 0x02, 0xc5, 0x86, 0xb1, 0x4e, 0x7c, 0x6c, - 0x52, 0x19, 0x45, 0xcf, 0x1c, 0xb1, 0x6d, 0x2c, 0x5e, 0x78, 0xe6, 0x93, - 0x58, 0x21, 0xab, 0xfd, 0x19, 0x9a, 0xdd, 0x9b, 0x75, 0x48, 0x7e, 0x5c, - 0x2e, 0x2c, 0x5e, 0x29, 0x1a, 0xc5, 0xf4, 0xc1, 0xbc, 0xb1, 0x52, 0x8c, - 0xe8, 0x19, 0x8d, 0x15, 0xc6, 0x08, 0x72, 0xf6, 0x14, 0x16, 0x2f, 0x39, - 0x41, 0x62, 0xb0, 0xdc, 0x70, 0x72, 0xd2, 0xb1, 0x6d, 0x96, 0x2f, 0xcf, - 0xcf, 0x09, 0x96, 0x2f, 0x7c, 0x5d, 0x2c, 0x5e, 0xd4, 0x81, 0x62, 0xa4, - 0xfd, 0xc6, 0x27, 0xb9, 0x41, 0xc7, 0xea, 0x08, 0xc4, 0xc8, 0x44, 0x5e, - 0x88, 0x5a, 0x58, 0xb1, 0x2c, 0x5f, 0x78, 0xa4, 0xeb, 0x14, 0x33, 0x66, - 0xe2, 0x37, 0xf8, 0xa4, 0x0d, 0xe1, 0x4a, 0xc5, 0x4a, 0x29, 0x3e, 0xa5, - 0xe2, 0x0b, 0xfb, 0xa8, 0x34, 0x1c, 0x96, 0x2f, 0x49, 0x44, 0xb1, 0x7d, - 0x14, 0x27, 0xa5, 0x8b, 0xe9, 0xe3, 0xc4, 0xb1, 0x7e, 0xce, 0xdf, 0x68, - 0x2c, 0x56, 0x22, 0xf4, 0xd2, 0xe7, 0x1d, 0xd1, 0x29, 0x11, 0xde, 0x35, - 0xbc, 0xb1, 0x76, 0x69, 0x62, 0xf0, 0xb5, 0xb2, 0xc5, 0xbc, 0xb1, 0x58, - 0x6c, 0x58, 0x7e, 0xdd, 0xcb, 0x16, 0xe2, 0xc5, 0x1c, 0xd3, 0x86, 0x2b, - 0x77, 0xbc, 0xb1, 0x68, 0xce, 0xf8, 0xbf, 0xff, 0x22, 0xfb, 0x15, 0x0c, - 0x4b, 0x21, 0x47, 0xb9, 0x8f, 0x4e, 0x6e, 0x5d, 0x1e, 0x2f, 0xa1, 0x93, - 0x8e, 0x7d, 0xed, 0xa3, 0x28, 0x03, 0xf9, 0x43, 0x93, 0x90, 0xcb, 0xf4, - 0x3b, 0x04, 0x90, 0x10, 0xf4, 0x72, 0x40, 0x68, 0xdd, 0xc4, 0x57, 0xff, - 0xa3, 0x0e, 0xd0, 0x8c, 0xcd, 0x6e, 0xcd, 0xba, 0xa4, 0x6f, 0x2f, 0xfe, - 0x3b, 0x42, 0x33, 0x35, 0xbb, 0x36, 0xea, 0x91, 0xf8, 0xbd, 0xde, 0x46, - 0xfd, 0xe2, 0xc5, 0xff, 0xff, 0x7c, 0x5e, 0x26, 0x37, 0xaf, 0x6a, 0x73, - 0xa6, 0x7e, 0x99, 0x62, 0xdd, 0xe7, 0x78, 0x89, 0x6c, 0x2d, 0xbb, 0xbe, - 0xfb, 0xc5, 0x8b, 0xfb, 0xf9, 0x14, 0xf5, 0xc5, 0x8b, 0xf1, 0xe4, 0xf2, - 0x1a, 0xc5, 0xf6, 0x66, 0xb8, 0xb1, 0x46, 0x22, 0x7f, 0xbc, 0x24, 0x63, - 0x00, 0x14, 0xdf, 0xf7, 0x7a, 0xd0, 0xfb, 0xf6, 0xcd, 0x96, 0x2f, 0xe0, - 0xc3, 0xeb, 0xbb, 0x9d, 0x2c, 0x54, 0x6e, 0x7f, 0x1d, 0xe2, 0x0d, 0xe8, - 0x4f, 0x4b, 0x17, 0x34, 0x16, 0x2f, 0xe8, 0xd2, 0x5f, 0x79, 0x3a, 0xc5, - 0xee, 0xf3, 0xd8, 0xb1, 0x73, 0x9d, 0x62, 0xa3, 0x75, 0x4b, 0x1d, 0xe4, - 0x34, 0x7b, 0xd8, 0x5d, 0x46, 0x85, 0x9d, 0xf6, 0x3d, 0xdf, 0x05, 0xe3, - 0x51, 0x9e, 0x88, 0xaf, 0xa4, 0xd1, 0xca, 0xc5, 0xfe, 0x1e, 0x76, 0x21, - 0x07, 0x2b, 0x17, 0xcd, 0xd4, 0x25, 0x62, 0xdd, 0xe4, 0x9e, 0xc8, 0x46, - 0xd7, 0xdd, 0xe6, 0xdc, 0x02, 0xc5, 0xf9, 0xb6, 0xf0, 0x8d, 0x58, 0xbf, - 0x6f, 0xa2, 0x98, 0x2c, 0x54, 0x6b, 0x3f, 0xed, 0x15, 0x31, 0x5d, 0xff, - 0xb2, 0x1f, 0x92, 0x17, 0x3e, 0xeb, 0x17, 0x06, 0x75, 0x8b, 0xff, 0x99, - 0xfd, 0x09, 0x2f, 0x73, 0x69, 0x58, 0xbf, 0xb0, 0xd7, 0xf1, 0x4a, 0xc5, - 0x46, 0x88, 0xc8, 0xdc, 0xfb, 0xe3, 0x31, 0xc8, 0x97, 0x40, 0xeb, 0x17, - 0xa3, 0x5c, 0x69, 0x1b, 0x2c, 0x5f, 0x98, 0xfa, 0x9e, 0x2c, 0x57, 0x78, - 0x7a, 0xdc, 0x2e, 0xbf, 0xee, 0xcf, 0xbf, 0x79, 0x91, 0x4f, 0x96, 0x2f, - 0xda, 0x9f, 0x8a, 0x56, 0x2e, 0x0b, 0xeb, 0x17, 0xdd, 0xe4, 0x3b, 0xcd, - 0x96, 0x2f, 0xdf, 0xcf, 0x48, 0xd6, 0x2f, 0xd9, 0x14, 0x27, 0xa5, 0x8b, - 0xfd, 0x9a, 0xfb, 0xc5, 0x03, 0xac, 0x51, 0x8b, 0x86, 0xf1, 0xbb, 0xe7, - 0x79, 0x0a, 0xbe, 0xf6, 0x1f, 0x91, 0xa9, 0x1a, 0x35, 0xb7, 0x61, 0x3b, - 0xa1, 0x44, 0x51, 0xa1, 0x96, 0x2f, 0x22, 0x80, 0xca, 0xae, 0x0b, 0x4b, - 0x17, 0xef, 0x7f, 0x3b, 0x62, 0xc5, 0x68, 0xf0, 0xf8, 0x33, 0x7d, 0x87, - 0x7f, 0x2c, 0x5f, 0xdd, 0x9f, 0xac, 0xcd, 0x96, 0x2e, 0xc2, 0x58, 0xac, - 0x3c, 0x7e, 0x18, 0xdf, 0xd1, 0xb4, 0x68, 0x79, 0xcf, 0x2c, 0x5f, 0xdd, - 0xe3, 0xc7, 0x7d, 0xfb, 0xf5, 0x8b, 0xfb, 0x34, 0xfe, 0xe1, 0xd6, 0x2a, - 0x35, 0x9f, 0x4f, 0x0e, 0xee, 0x2d, 0xd6, 0x2f, 0x1e, 0x43, 0x58, 0xbe, - 0xe4, 0x47, 0xe2, 0xc5, 0xf8, 0xbd, 0xf7, 0x3a, 0xc5, 0xf4, 0x42, 0x60, - 0xd6, 0x2a, 0x4f, 0x35, 0x8a, 0x2f, 0x1e, 0x78, 0xb1, 0x78, 0x9b, 0xb2, - 0xc5, 0xe7, 0x90, 0x2c, 0x5d, 0xbe, 0xeb, 0x17, 0xfe, 0xc1, 0xfd, 0xcf, - 0x9c, 0x11, 0xd6, 0x2f, 0xf6, 0xff, 0x7f, 0x66, 0x1d, 0x62, 0xee, 0xdb, - 0xae, 0x50, 0x22, 0xbb, 0xc5, 0x69, 0x3d, 0xe9, 0x14, 0x6c, 0xd3, 0x1a, - 0x88, 0x63, 0x5c, 0x28, 0x64, 0xa3, 0x06, 0x1c, 0x7a, 0x27, 0x2d, 0x10, - 0x1c, 0x75, 0x87, 0x80, 0x38, 0x43, 0x5c, 0x3f, 0xf1, 0xa5, 0xf7, 0x7b, - 0x1d, 0x9d, 0x2c, 0x5f, 0xdf, 0x97, 0xd3, 0xe9, 0x62, 0xa3, 0x73, 0xd9, - 0xdc, 0xb2, 0xfe, 0xef, 0x1b, 0x6f, 0xbc, 0x7a, 0xc5, 0xfa, 0x37, 0xef, - 0x76, 0xc0, 0x96, 0x2f, 0xf8, 0xcf, 0x7f, 0x0f, 0x9a, 0xc5, 0x8b, 0xfb, - 0xbe, 0xb1, 0xbc, 0x6f, 0xde, 0xf2, 0x56, 0x2f, 0xd1, 0xa1, 0xa6, 0xe4, - 0x7a, 0xc5, 0xfd, 0xe7, 0x20, 0xb0, 0x96, 0x2e, 0xe0, 0x96, 0x2f, 0x00, - 0x3f, 0x2c, 0x61, 0x71, 0x68, 0x2c, 0x5f, 0x77, 0xb9, 0xce, 0xf1, 0x62, - 0xb4, 0x6f, 0xd8, 0x4a, 0xee, 0xdb, 0xae, 0x50, 0x12, 0xdf, 0x58, 0xb8, - 0x00, 0x58, 0xae, 0xf1, 0x53, 0x57, 0x7a, 0x51, 0x1a, 0x1b, 0xc6, 0xc6, - 0xbd, 0xf6, 0x75, 0x1a, 0xd1, 0xb0, 0xcd, 0x91, 0x49, 0xb3, 0xc4, 0x02, - 0x28, 0x0c, 0x4a, 0xf4, 0x6c, 0x73, 0xac, 0x5f, 0x46, 0xdd, 0xef, 0x8e, - 0xb1, 0x79, 0x86, 0xeb, 0x17, 0xff, 0x13, 0x7b, 0x85, 0x3a, 0xd3, 0x0d, - 0x62, 0xa0, 0x7b, 0xf8, 0x39, 0x7f, 0x7d, 0xfc, 0x53, 0x12, 0xc5, 0xcd, - 0x8b, 0x15, 0xb9, 0xe2, 0x68, 0xba, 0xf9, 0x87, 0x87, 0x58, 0xbf, 0x46, - 0xbe, 0xf2, 0x1a, 0xee, 0x58, 0xba, 0x49, 0x62, 0xfa, 0x26, 0x68, 0x2c, - 0x56, 0xe6, 0xe5, 0xc5, 0xaf, 0xfd, 0xda, 0x7e, 0xf3, 0x14, 0x53, 0xba, - 0xc5, 0xfc, 0xe3, 0x14, 0xea, 0x0b, 0x17, 0x8a, 0x34, 0xdd, 0x62, 0xa3, - 0x75, 0x50, 0x1d, 0xe1, 0x1f, 0x7b, 0x08, 0xd8, 0xd1, 0x97, 0xbe, 0x11, - 0xc6, 0xb2, 0x2c, 0x71, 0x72, 0x16, 0x43, 0xec, 0x5d, 0x7d, 0xc1, 0x68, - 0x0b, 0x17, 0xd1, 0xb6, 0xc7, 0xe2, 0xc5, 0xfe, 0xd7, 0xdb, 0x8e, 0x3c, - 0x58, 0xbe, 0x92, 0x7e, 0x96, 0x2d, 0x98, 0x7a, 0xb1, 0x19, 0xdd, 0x3e, - 0x58, 0xbf, 0x89, 0xcd, 0xfb, 0x41, 0x62, 0xff, 0xf9, 0xbd, 0x25, 0xbb, - 0x9c, 0x62, 0x6d, 0x41, 0x62, 0x8e, 0x7f, 0xc4, 0x5d, 0x6f, 0x2c, 0x5f, - 0x82, 0xf7, 0xa4, 0xeb, 0x14, 0x62, 0x3c, 0xa3, 0x48, 0x4a, 0xc9, 0x0e, - 0xc2, 0x57, 0xfc, 0xdf, 0x7e, 0xd1, 0x81, 0x04, 0x12, 0x45, 0xfe, 0xfb, - 0x7b, 0xcc, 0xc1, 0x2c, 0x5d, 0x23, 0x58, 0xbf, 0x66, 0xed, 0xc7, 0x58, - 0xbe, 0x7d, 0x98, 0xeb, 0x14, 0x62, 0xad, 0xc8, 0xd8, 0x93, 0xbe, 0xdf, - 0xfb, 0xe4, 0x63, 0x3d, 0xf5, 0x48, 0x8d, 0x68, 0x5d, 0x1a, 0x7c, 0x5e, - 0x38, 0xa2, 0xe8, 0x32, 0xc5, 0xff, 0x41, 0xdb, 0xa8, 0x10, 0x99, 0x62, - 0xff, 0xff, 0x7d, 0xf9, 0x30, 0xcf, 0xbe, 0xbe, 0xd8, 0x2c, 0xfa, 0xc5, - 0xff, 0xf6, 0xa5, 0xfd, 0xfc, 0x1b, 0xf3, 0x08, 0x0b, 0x16, 0xef, 0x46, - 0x8f, 0xdc, 0x17, 0x63, 0x9e, 0x2f, 0xdd, 0xc9, 0x58, 0xbf, 0xee, 0x39, - 0x75, 0xe2, 0x9c, 0x58, 0xa8, 0xdd, 0x12, 0xb0, 0x46, 0xc1, 0x7b, 0xfa, - 0x3e, 0x74, 0xcd, 0x05, 0x8b, 0xf7, 0xdd, 0x81, 0x1a, 0xd6, 0x2f, 0x4f, - 0x50, 0x58, 0xae, 0xf1, 0x16, 0x11, 0xa8, 0xd3, 0xc6, 0x1d, 0xc5, 0xd7, - 0xfa, 0x37, 0x29, 0x18, 0x60, 0xe2, 0xc5, 0xff, 0xa3, 0x4e, 0xf2, 0x22, - 0x91, 0xe7, 0x5e, 0x58, 0xbf, 0x4c, 0x77, 0x74, 0x51, 0x2c, 0x5e, 0x8e, - 0xcf, 0xac, 0x54, 0x47, 0xa3, 0xe3, 0x1b, 0xec, 0x1b, 0x41, 0x62, 0xfe, - 0x0c, 0xf8, 0x59, 0x1e, 0xb1, 0x7f, 0x45, 0x09, 0x8f, 0x81, 0xd6, 0x2b, - 0x0f, 0x92, 0x23, 0x1b, 0xd1, 0xbf, 0x5d, 0xf6, 0xb1, 0x7b, 0xb6, 0xa0, - 0xb1, 0x7b, 0x42, 0xee, 0x58, 0xbc, 0x10, 0x46, 0xac, 0x54, 0x6e, 0xa8, - 0xba, 0x34, 0x3a, 0x8d, 0xa1, 0x39, 0xdf, 0x08, 0xfb, 0xeb, 0x08, 0x62, - 0x22, 0xe1, 0x58, 0x88, 0x02, 0x21, 0xbf, 0xff, 0x77, 0x84, 0xde, 0x9c, - 0x28, 0x1e, 0x70, 0x86, 0xb1, 0x7f, 0x77, 0x90, 0x7f, 0x7a, 0x56, 0x2f, - 0xa7, 0x66, 0x0d, 0x62, 0xf6, 0x38, 0x16, 0x29, 0xcf, 0x00, 0x89, 0x2f, - 0xfb, 0xbc, 0x83, 0xfb, 0xf2, 0x46, 0xac, 0x5e, 0x01, 0xb2, 0xb1, 0x51, - 0xb9, 0xee, 0xf7, 0xd9, 0xfd, 0xed, 0xb3, 0x16, 0x2f, 0x37, 0xdd, 0x62, - 0xfc, 0xfa, 0x00, 0x25, 0x62, 0xff, 0x7a, 0x02, 0x1b, 0x10, 0x16, 0x2e, - 0x7d, 0x96, 0x2f, 0x77, 0xed, 0xa5, 0x8a, 0x8d, 0xd5, 0x22, 0x77, 0x8a, - 0xfd, 0xeb, 0x9c, 0x6c, 0xfb, 0x1a, 0xcb, 0xa4, 0x76, 0x03, 0x8c, 0x51, - 0xe3, 0x41, 0x0c, 0x5e, 0x6c, 0xfa, 0xc5, 0xfe, 0xef, 0x79, 0xf9, 0x29, - 0xd9, 0x62, 0xe8, 0xda, 0x0b, 0x15, 0xde, 0x9e, 0xb7, 0x7d, 0x9c, 0xdf, - 0x8b, 0x00, 0x1f, 0x4b, 0x17, 0xfc, 0xde, 0xea, 0x1e, 0xcd, 0x1a, 0xb1, - 0x7e, 0x8b, 0x79, 0xeb, 0xcb, 0x17, 0xfe, 0x7e, 0xb8, 0x58, 0x39, 0xcd, - 0x2c, 0x5c, 0xe0, 0x58, 0xae, 0xf1, 0x38, 0x78, 0xd1, 0xcb, 0xbe, 0x17, - 0x46, 0xb2, 0xa7, 0x3c, 0x01, 0x61, 0x1f, 0x5f, 0xdf, 0xdf, 0xbc, 0xe7, - 0xdd, 0x62, 0xf4, 0x69, 0xdf, 0xf7, 0x8b, 0x17, 0xff, 0xa3, 0x78, 0xbb, - 0xde, 0xfb, 0x20, 0x46, 0xb3, 0x0c, 0xfc, 0x72, 0xc5, 0x77, 0xc4, 0x4b, - 0x80, 0xb6, 0xff, 0xff, 0x08, 0xc2, 0xcd, 0x68, 0xff, 0x91, 0x11, 0x86, - 0x7e, 0x39, 0x62, 0xff, 0xd3, 0x33, 0x33, 0x33, 0xd7, 0x16, 0x2f, 0x45, - 0x3e, 0x58, 0xba, 0x66, 0x4f, 0x6a, 0x23, 0xcb, 0x8e, 0xeb, 0x17, 0xff, - 0xbf, 0x31, 0x75, 0xcc, 0xea, 0x3e, 0x64, 0x96, 0x2f, 0x3f, 0x58, 0xb1, - 0x7e, 0xd3, 0xec, 0xc7, 0x48, 0xb8, 0x20, 0x92, 0x2b, 0x0f, 0x0c, 0x22, - 0x9b, 0x09, 0x22, 0x30, 0xd1, 0x5e, 0xfe, 0x6e, 0xb1, 0x52, 0x9a, 0xbe, - 0xe5, 0x9f, 0x17, 0x02, 0x7f, 0x21, 0x04, 0x19, 0x2d, 0xf8, 0x51, 0xd2, - 0x2e, 0x96, 0x2e, 0x14, 0x16, 0x2f, 0xfd, 0x3f, 0xc0, 0x60, 0xfe, 0xd0, - 0x58, 0xbe, 0x62, 0x9e, 0xe5, 0x8b, 0xfa, 0x12, 0x79, 0xd6, 0x96, 0x2b, - 0x11, 0xab, 0x1e, 0x5b, 0xa1, 0x86, 0x3e, 0x11, 0x25, 0xff, 0xfd, 0xe7, - 0x3e, 0x17, 0xb9, 0x26, 0xf0, 0x43, 0xfb, 0xac, 0x5f, 0x86, 0xe1, 0x49, - 0xd6, 0x2f, 0xe8, 0x19, 0xc7, 0x16, 0x96, 0x2f, 0xfa, 0x78, 0xda, 0x7f, - 0x73, 0x16, 0x2b, 0xa3, 0xe8, 0x01, 0x85, 0xff, 0xe6, 0x72, 0xc0, 0x19, - 0x3a, 0xda, 0x7c, 0xb1, 0x7f, 0xee, 0xe7, 0x8f, 0xfc, 0x53, 0x1e, 0xc7, - 0x58, 0xbf, 0xde, 0xfc, 0x96, 0xcf, 0xd9, 0x62, 0xfd, 0xcc, 0x84, 0x76, - 0x2c, 0x5e, 0xc3, 0xc9, 0x87, 0xc3, 0xc3, 0x6b, 0xff, 0xf9, 0xe1, 0xc0, - 0xcf, 0x84, 0x28, 0x37, 0x82, 0x6e, 0x96, 0x2f, 0xf6, 0x98, 0x12, 0x36, - 0xf2, 0xc5, 0x4a, 0x24, 0x5d, 0x7a, 0x86, 0x9e, 0xcf, 0xd2, 0x8a, 0x15, - 0x5e, 0x86, 0x25, 0xf8, 0xec, 0x7c, 0x1a, 0xc5, 0xf8, 0xb0, 0xd7, 0x1a, - 0xc5, 0xff, 0x7b, 0x7f, 0xb9, 0x14, 0xf4, 0xb1, 0x52, 0x88, 0xac, 0x28, - 0x62, 0x8b, 0xff, 0xfa, 0x06, 0x1c, 0x5a, 0x0e, 0x39, 0x8b, 0xaf, 0x06, - 0x58, 0xb1, 0x7f, 0xdb, 0x4f, 0x1e, 0x3b, 0x35, 0x2b, 0x17, 0xff, 0xda, - 0xd4, 0x9f, 0x82, 0x9e, 0x8d, 0xd3, 0x6e, 0xb1, 0x52, 0x89, 0x06, 0x3c, - 0xbf, 0x87, 0x85, 0xb3, 0xe9, 0x62, 0xe9, 0xee, 0x58, 0xa3, 0x17, 0x50, - 0xe5, 0x73, 0x21, 0x22, 0xf1, 0xfe, 0x7e, 0x1a, 0x2c, 0x5a, 0x50, 0xf3, - 0x11, 0x0f, 0x62, 0xeb, 0xfe, 0x29, 0x32, 0x28, 0x4e, 0xb6, 0x58, 0xbf, - 0xd8, 0x37, 0xed, 0xc0, 0x6e, 0xb1, 0x7f, 0xff, 0xec, 0xec, 0xfe, 0x86, - 0x03, 0x85, 0x80, 0xd4, 0xec, 0xda, 0xdd, 0x62, 0xe9, 0x83, 0x22, 0x9b, - 0x86, 0xf7, 0xb3, 0x69, 0x58, 0xbf, 0xfe, 0xc0, 0x67, 0xb8, 0xfd, 0x8b, - 0x3d, 0xf7, 0x58, 0xbb, 0xdc, 0xc3, 0xed, 0x21, 0xdb, 0xff, 0xf9, 0xce, - 0xfa, 0x1c, 0x8f, 0x1e, 0x0d, 0xcc, 0x12, 0xc5, 0x1d, 0x50, 0x0f, 0xe1, - 0xc4, 0x50, 0x9a, 0xf1, 0x65, 0xf7, 0x07, 0xe1, 0x2c, 0x5f, 0xf9, 0xb4, - 0x69, 0x91, 0xc2, 0xfb, 0xe9, 0x62, 0xff, 0xff, 0xd3, 0xac, 0x19, 0x36, - 0x8d, 0x6f, 0x0b, 0xcf, 0xee, 0x7d, 0xd6, 0x28, 0x91, 0x63, 0xd9, 0x16, - 0xff, 0xc2, 0xe7, 0x33, 0xa8, 0x78, 0x43, 0x58, 0xbf, 0xda, 0x11, 0x0b, - 0xc2, 0xf2, 0xc5, 0xef, 0xc9, 0x2c, 0x56, 0xe8, 0x93, 0x74, 0x2f, 0x1a, - 0xde, 0x0f, 0xdc, 0x58, 0xbe, 0x17, 0x84, 0x6a, 0xc5, 0x68, 0xf1, 0x08, - 0x7e, 0xa5, 0x12, 0xb8, 0xe9, 0x67, 0x58, 0xbf, 0xd3, 0x11, 0x49, 0xc5, - 0xb2, 0xc5, 0xf9, 0xb8, 0xe7, 0x12, 0xc5, 0x47, 0x9f, 0x71, 0xc4, 0x7e, - 0x6b, 0x71, 0xa1, 0x2c, 0x5f, 0xff, 0x49, 0x14, 0xec, 0x13, 0x6d, 0xf7, - 0x92, 0x58, 0xbc, 0x58, 0x05, 0x8a, 0x81, 0xf5, 0xe2, 0x7d, 0x4a, 0xbd, - 0x0d, 0xd2, 0x1e, 0x1a, 0xbf, 0x8d, 0x31, 0xa1, 0x1f, 0xe3, 0x21, 0x42, - 0x16, 0xf9, 0xf6, 0x63, 0xac, 0x5f, 0xe9, 0x08, 0x7f, 0x92, 0xdd, 0x62, - 0xe7, 0x95, 0x8a, 0x73, 0xcb, 0x23, 0x5b, 0xee, 0x7e, 0x78, 0xb1, 0x71, - 0xf8, 0xb1, 0x58, 0x6e, 0xdc, 0x8e, 0xff, 0xf3, 0xeb, 0xf9, 0x84, 0x2f, - 0x42, 0x4d, 0x58, 0xbf, 0x48, 0x67, 0xfb, 0xac, 0x5f, 0xf7, 0x5e, 0x0f, - 0x6f, 0x6a, 0x78, 0xb1, 0x7b, 0x1f, 0xb2, 0xc5, 0x61, 0xee, 0x04, 0x7d, - 0x43, 0x4f, 0x67, 0x4d, 0xc7, 0x5b, 0xf8, 0xf9, 0x25, 0x72, 0x10, 0xb7, - 0xfe, 0xfc, 0xf5, 0x0c, 0x3b, 0xcc, 0x7a, 0xc5, 0xff, 0x03, 0x19, 0xf5, - 0xbc, 0xf9, 0x62, 0xf4, 0x0f, 0x2b, 0x14, 0xe7, 0xad, 0xd8, 0xe6, 0xff, - 0x6b, 0x0e, 0x7c, 0x17, 0x7e, 0xb1, 0x7e, 0x6d, 0xa5, 0xb7, 0x58, 0xbe, - 0x9e, 0x49, 0xd6, 0x2f, 0xff, 0x76, 0x92, 0x79, 0xeb, 0x69, 0x29, 0x02, - 0xc5, 0xfe, 0x9d, 0x88, 0x59, 0xd7, 0x96, 0x2c, 0x19, 0x88, 0xa2, 0x92, - 0x2f, 0xa5, 0xdf, 0xd3, 0xdb, 0x4e, 0x7c, 0x58, 0xa9, 0x54, 0x4b, 0x90, - 0x98, 0x72, 0x3f, 0x9c, 0xb4, 0x32, 0xc8, 0xde, 0xfd, 0xcf, 0x61, 0x1a, - 0xb1, 0x79, 0x8a, 0x56, 0x2f, 0xed, 0x48, 0xf3, 0x38, 0xb1, 0x7f, 0x9b, - 0xae, 0x33, 0x75, 0xc5, 0x8a, 0x82, 0x29, 0xa2, 0x29, 0x00, 0xdf, 0x0b, - 0x6f, 0xb8, 0xd0, 0x8f, 0x58, 0xbf, 0xf4, 0x39, 0x30, 0x90, 0x73, 0x3b, - 0x2c, 0x5d, 0x87, 0x58, 0xbd, 0x23, 0x75, 0x8b, 0xa4, 0xeb, 0x17, 0xf0, - 0x7e, 0xe6, 0xd8, 0x12, 0xc5, 0xfc, 0xfa, 0xeb, 0x8e, 0x6a, 0xc5, 0x47, - 0x9f, 0xce, 0x85, 0xfe, 0x65, 0x76, 0xf2, 0xb1, 0x68, 0xf5, 0x8b, 0xf9, - 0xf4, 0xdb, 0xe1, 0x2c, 0x56, 0x8f, 0x0b, 0xc2, 0xb7, 0xf9, 0xb5, 0xbe, - 0x0b, 0x5b, 0x2c, 0x5f, 0xf6, 0x6b, 0x3e, 0xfa, 0xfb, 0x2c, 0x5a, 0x76, - 0x3e, 0xed, 0xcd, 0xaf, 0xfe, 0xf7, 0x85, 0xd1, 0x60, 0x39, 0x31, 0xeb, - 0x17, 0xff, 0x9f, 0x98, 0x3d, 0x48, 0xbc, 0x4f, 0xd9, 0x62, 0xfe, 0x80, - 0x79, 0xf6, 0x3a, 0xc5, 0x2c, 0x59, 0x88, 0xdd, 0x84, 0x5f, 0x58, 0x8f, - 0x5d, 0xd2, 0x42, 0x84, 0x35, 0xff, 0xd3, 0xa8, 0x6f, 0xf7, 0x88, 0x98, - 0x25, 0x8b, 0xff, 0xb4, 0xdb, 0x0f, 0xf3, 0xcf, 0x0b, 0xeb, 0x15, 0xc4, - 0x47, 0x79, 0x1e, 0xf7, 0x9e, 0x25, 0x8b, 0xfa, 0x2e, 0x07, 0x85, 0xba, - 0xc5, 0x41, 0x70, 0x17, 0x21, 0x2a, 0x69, 0x97, 0x4b, 0x5a, 0x84, 0x87, - 0xe3, 0x1e, 0xe4, 0x31, 0x3c, 0x46, 0x18, 0xf5, 0x69, 0x72, 0xd0, 0xf3, - 0x83, 0x97, 0xc5, 0x80, 0x8e, 0x58, 0xbe, 0x93, 0xcf, 0xd6, 0x2e, 0x9e, - 0x2c, 0x59, 0xe0, 0x6e, 0x48, 0x8a, 0xa5, 0x76, 0x9b, 0x27, 0x3d, 0x5c, - 0xbb, 0xeb, 0xd7, 0xf3, 0x01, 0xb7, 0x6d, 0x2c, 0x5f, 0x03, 0x32, 0x3d, - 0x62, 0xfd, 0xbb, 0x3e, 0xd8, 0xb1, 0x69, 0x39, 0xe7, 0x11, 0x2d, 0xff, - 0xed, 0x37, 0xe1, 0x9e, 0xe3, 0x6c, 0x28, 0x2c, 0x5f, 0xff, 0xcd, 0x9b, - 0xf3, 0xec, 0xfe, 0x80, 0xa4, 0xa6, 0x0b, 0x17, 0xff, 0x88, 0xa4, 0xd3, - 0xfe, 0x7a, 0xf4, 0xfd, 0x62, 0x99, 0x1e, 0x24, 0x98, 0x25, 0xab, 0xf9, - 0xe6, 0x1f, 0xc2, 0x58, 0xb9, 0xa0, 0xb1, 0x7f, 0xfe, 0xf7, 0x05, 0x3f, - 0x93, 0x96, 0x00, 0xf3, 0x05, 0x8a, 0x39, 0xf6, 0x10, 0xbd, 0xfb, 0xa8, - 0x07, 0xc0, 0x2c, 0x5b, 0xeb, 0x16, 0x1e, 0x1b, 0xe6, 0x2c, 0xbf, 0xe9, - 0xfc, 0xf5, 0x08, 0x4e, 0xcb, 0x16, 0x95, 0x8b, 0x9f, 0x4b, 0x16, 0xdf, - 0x46, 0xa3, 0xe2, 0x37, 0xf4, 0x79, 0x66, 0xd8, 0x12, 0xc5, 0x4a, 0x68, - 0x38, 0xbf, 0xa2, 0x56, 0x63, 0x11, 0x45, 0xff, 0x8e, 0xc0, 0x91, 0x8b, - 0x42, 0xd2, 0xc5, 0xee, 0xcd, 0xf5, 0x8b, 0x16, 0x1e, 0xf8, 0x90, 0x2f, - 0xff, 0xfb, 0x72, 0x7e, 0xdc, 0xfb, 0x3f, 0xa0, 0x29, 0x6f, 0x0a, 0x56, - 0x2f, 0xff, 0xff, 0x6a, 0x4d, 0xc8, 0xb7, 0xfb, 0xc5, 0x16, 0x17, 0x83, - 0xc8, 0xbe, 0xc3, 0x58, 0xbf, 0xfd, 0xf7, 0x38, 0xe4, 0xc8, 0xe1, 0x7d, - 0xf4, 0xb1, 0x7f, 0x7a, 0x7e, 0x53, 0x05, 0x8b, 0xff, 0xfe, 0xfb, 0x3f, - 0xa0, 0x29, 0x29, 0x84, 0x1f, 0x5b, 0x08, 0x0b, 0x14, 0x62, 0x38, 0xdd, - 0x3f, 0x85, 0xb4, 0xb1, 0x7e, 0x63, 0x5f, 0x53, 0x03, 0x79, 0xf3, 0x0a, - 0x95, 0x4d, 0x0e, 0x4c, 0xcd, 0x05, 0x1c, 0xed, 0xf7, 0xb6, 0xc0, 0x96, - 0x2e, 0xd4, 0xac, 0x59, 0x88, 0xde, 0x78, 0x96, 0xfd, 0x3a, 0xd3, 0x44, - 0xb1, 0x73, 0xf4, 0xb1, 0x7f, 0x80, 0x2c, 0x01, 0xda, 0x0b, 0x17, 0x64, - 0xac, 0x54, 0x0f, 0x8b, 0xa1, 0x83, 0x9a, 0x56, 0xc8, 0xbb, 0x68, 0x45, - 0xdf, 0xfd, 0xd4, 0x1c, 0xbd, 0x8e, 0x3c, 0x1a, 0xc5, 0xff, 0xfc, 0xfd, - 0x49, 0x4f, 0x07, 0xf9, 0xe3, 0x97, 0x50, 0x58, 0xa3, 0x11, 0x3f, 0xf4, - 0x4b, 0xff, 0xfb, 0xdc, 0xc9, 0xfc, 0x99, 0xa9, 0x2c, 0xfe, 0x6e, 0xb1, - 0x7f, 0xff, 0x98, 0x7f, 0x72, 0x6f, 0x4c, 0x4e, 0x6b, 0x96, 0x76, 0x58, - 0xae, 0x91, 0x79, 0xf5, 0xbb, 0xfe, 0x7f, 0x66, 0xb4, 0x2d, 0xbb, 0x2c, - 0x5f, 0xf7, 0x33, 0xc3, 0xcc, 0x07, 0x16, 0x2b, 0xe7, 0xed, 0xe3, 0xdb, - 0xfe, 0x7f, 0x66, 0xb4, 0x2d, 0xbb, 0x2c, 0x5c, 0x22, 0x30, 0xf7, 0xfe, - 0x45, 0x52, 0xa8, 0x1f, 0x21, 0xc1, 0xc8, 0x7c, 0xdf, 0xed, 0xf3, 0x9f, - 0xe9, 0xa3, 0xd6, 0x2f, 0x0b, 0x06, 0xb1, 0x4c, 0x7a, 0xd1, 0xc7, 0x35, - 0x06, 0xc6, 0x64, 0x73, 0xb9, 0x98, 0x8a, 0x6b, 0xe6, 0xf1, 0x8b, 0xc7, - 0x97, 0x6a, 0x3d, 0x9f, 0xcb, 0x0f, 0x03, 0xe9, 0x43, 0x83, 0x92, 0xb3, - 0xbb, 0x42, 0x42, 0xff, 0x4b, 0x6b, 0xe1, 0x30, 0xd6, 0x2e, 0xc8, 0x2c, - 0x5e, 0x71, 0xca, 0xc5, 0x0c, 0xf9, 0xe2, 0x34, 0x38, 0xbd, 0xff, 0xd0, - 0x93, 0xea, 0x46, 0xde, 0x14, 0xac, 0x5f, 0xcf, 0xfd, 0x69, 0xf6, 0x58, - 0xa9, 0x45, 0x1b, 0x98, 0x7d, 0x12, 0xe0, 0xbc, 0xb1, 0x7c, 0xfc, 0xc3, - 0xac, 0x5f, 0xfc, 0x42, 0xce, 0x3f, 0x33, 0xf9, 0xba, 0xc5, 0xfb, 0x47, - 0x66, 0x1a, 0xc5, 0xff, 0xf9, 0x8e, 0x67, 0x05, 0x3d, 0x67, 0xb9, 0x93, - 0xba, 0xc5, 0x62, 0x20, 0x3e, 0x51, 0x7f, 0xf3, 0xbf, 0xe2, 0xcf, 0x4f, - 0xa4, 0x6b, 0x17, 0x8d, 0x6e, 0x2c, 0x5e, 0x9d, 0x01, 0x62, 0xd3, 0xe3, - 0x76, 0x18, 0xf5, 0xf7, 0xbd, 0x20, 0x58, 0xbe, 0x0c, 0xd0, 0xcd, 0x58, - 0xb4, 0xac, 0x5f, 0xff, 0x4f, 0x50, 0x62, 0x01, 0x80, 0x7d, 0x39, 0xab, - 0x15, 0x2a, 0x9d, 0x60, 0x33, 0x84, 0x4f, 0x0c, 0x48, 0x88, 0xbe, 0xfe, - 0x22, 0x70, 0x88, 0xe3, 0x8a, 0x3b, 0x84, 0x6f, 0xe8, 0x67, 0x9c, 0xa5, - 0x62, 0xfe, 0xea, 0x2f, 0xc9, 0x1a, 0xb1, 0x7f, 0xfa, 0x75, 0xac, 0xeb, - 0xd2, 0x79, 0xea, 0x0b, 0x15, 0x27, 0xfa, 0x11, 0x8d, 0xc5, 0x12, 0xc5, - 0xee, 0x7d, 0xd6, 0x28, 0xe6, 0xd7, 0xc3, 0x17, 0x74, 0xcb, 0x17, 0xff, - 0x60, 0xe7, 0xef, 0x06, 0x84, 0xe9, 0x62, 0xb0, 0xf6, 0xf4, 0x31, 0x7d, - 0xb1, 0xde, 0x0b, 0x17, 0xfe, 0x29, 0x3b, 0x38, 0xc5, 0xee, 0x2c, 0x5f, - 0x48, 0x03, 0x3a, 0xc5, 0xff, 0xa7, 0xdf, 0x9e, 0x4c, 0x05, 0xa5, 0x8b, - 0xe2, 0x13, 0x41, 0x62, 0xe6, 0x35, 0x62, 0xa0, 0x8d, 0xbd, 0xcf, 0x88, - 0x93, 0x87, 0xfe, 0x22, 0xbf, 0xa4, 0x5b, 0xfd, 0xf4, 0xb1, 0x7f, 0x49, - 0xe3, 0x00, 0x09, 0x58, 0xbd, 0xdf, 0xcf, 0x96, 0x2f, 0xe6, 0xdc, 0xc9, - 0xce, 0x2c, 0x5f, 0xa7, 0x0b, 0xdc, 0x58, 0xa1, 0x9e, 0xb1, 0xcb, 0xe8, - 0xe8, 0xfa, 0xf9, 0x78, 0x8c, 0x7b, 0x9e, 0x2f, 0x02, 0x74, 0xb1, 0x52, - 0xaa, 0x83, 0x21, 0xfe, 0xf1, 0xa2, 0x32, 0x05, 0xf7, 0x9c, 0xa0, 0xb1, - 0x7e, 0x7f, 0xfb, 0x37, 0x58, 0xbd, 0x84, 0x05, 0x8a, 0x81, 0xf3, 0xc4, - 0x45, 0xdc, 0x53, 0x7b, 0x82, 0x3a, 0xc5, 0xff, 0xef, 0xc9, 0xe4, 0x5d, - 0x4b, 0x96, 0x1a, 0xb1, 0x7e, 0x98, 0xb9, 0xe7, 0x58, 0xa3, 0x17, 0x6b, - 0xa6, 0x15, 0x38, 0xae, 0xef, 0x9a, 0x95, 0x82, 0xd0, 0xad, 0x01, 0x9f, - 0x87, 0x83, 0x4a, 0xbf, 0xff, 0xa7, 0x53, 0xcf, 0xb3, 0xfa, 0x02, 0x92, - 0x98, 0x2c, 0x5f, 0xe1, 0x87, 0x31, 0xff, 0x17, 0x16, 0x2f, 0xa7, 0xaf, - 0x3a, 0xc5, 0xfb, 0xb9, 0xcf, 0x9e, 0x58, 0xbf, 0x7b, 0x3c, 0x52, 0xb1, - 0x7f, 0x3c, 0xf0, 0xc2, 0x75, 0x8a, 0xd9, 0x33, 0x4e, 0x96, 0x62, 0x39, - 0x39, 0x19, 0x15, 0xf8, 0x9e, 0xf0, 0x9b, 0x8b, 0x17, 0x48, 0x4b, 0x15, - 0xa3, 0x6b, 0xc1, 0xdb, 0xff, 0x9f, 0x8c, 0x17, 0x8c, 0xe4, 0x1c, 0xd5, - 0x8b, 0xfd, 0x25, 0xb6, 0x0d, 0xa0, 0xb1, 0x7f, 0xbf, 0x99, 0xef, 0xb0, - 0x16, 0x2d, 0xf5, 0x8a, 0x81, 0xe2, 0xb1, 0x9d, 0xe7, 0xda, 0x56, 0x2e, - 0x8a, 0x56, 0x2e, 0x9f, 0x2c, 0x5f, 0xa4, 0xc0, 0xe2, 0xe2, 0xc5, 0xe6, - 0xed, 0x2b, 0x15, 0x27, 0xf2, 0x68, 0xc1, 0x0b, 0xf8, 0xb2, 0xf8, 0x78, - 0x50, 0x58, 0xbf, 0x63, 0xc3, 0xf2, 0xb1, 0x74, 0x5e, 0x73, 0xc9, 0xf9, - 0x15, 0xff, 0xf8, 0x7f, 0x9d, 0x38, 0x24, 0x39, 0x88, 0xa4, 0xeb, 0x17, - 0xf8, 0xd9, 0x2f, 0x71, 0xbe, 0xb1, 0x52, 0x8b, 0x87, 0x2e, 0x65, 0x6b, - 0xf1, 0x63, 0x16, 0xcb, 0x17, 0xff, 0x9b, 0xcf, 0xd1, 0x80, 0x13, 0x16, - 0xfc, 0x58, 0xbf, 0x71, 0xa5, 0xf4, 0xb1, 0x77, 0x47, 0x58, 0xa1, 0xa2, - 0x37, 0xa4, 0xd8, 0xf2, 0x7a, 0x95, 0xc7, 0x8c, 0x84, 0x7e, 0xe4, 0x3d, - 0x24, 0x3b, 0xc6, 0x88, 0x5a, 0x12, 0xc5, 0x19, 0xe7, 0x0b, 0x45, 0x0b, - 0x4a, 0x58, 0xbb, 0x34, 0xb1, 0x46, 0x9a, 0x36, 0x0c, 0xbf, 0xec, 0xe4, - 0x8f, 0x92, 0xe3, 0x58, 0xbf, 0xa7, 0x6d, 0x4e, 0x0d, 0x62, 0xff, 0xd8, - 0x7e, 0x7e, 0x7a, 0xf4, 0xfd, 0x62, 0xff, 0xfe, 0x8f, 0x72, 0x93, 0x99, - 0xc7, 0xda, 0x7f, 0xf9, 0x82, 0xc5, 0xe6, 0x8a, 0x56, 0x2f, 0xef, 0xcf, - 0xbd, 0x27, 0x58, 0xbf, 0xff, 0xb5, 0x83, 0xe1, 0x0b, 0x20, 0x26, 0x1f, - 0x33, 0x4b, 0x14, 0x34, 0x44, 0xb9, 0x75, 0x69, 0x3e, 0xe3, 0x90, 0xfc, - 0xe3, 0xc5, 0xc2, 0x40, 0xec, 0xbe, 0x1c, 0x29, 0xaf, 0x8a, 0x4f, 0xc5, - 0x8b, 0xc7, 0x6e, 0x96, 0x3c, 0x68, 0xae, 0xf6, 0xeb, 0x17, 0xcf, 0xa0, - 0x71, 0x62, 0xb0, 0xfa, 0xb4, 0x5d, 0xe1, 0x9b, 0xf8, 0xa4, 0xc0, 0x02, - 0x56, 0x2f, 0x98, 0x13, 0x05, 0x8b, 0xe0, 0x76, 0xef, 0x7b, 0xc5, 0x8b, - 0xfe, 0x3e, 0x42, 0x74, 0x0c, 0x25, 0x8b, 0x43, 0xe7, 0xd0, 0x19, 0x85, - 0xfc, 0xc5, 0x3f, 0xfc, 0xac, 0x5f, 0xda, 0x69, 0x84, 0xc1, 0x62, 0xff, - 0xfd, 0x30, 0xe7, 0xd9, 0xfd, 0x01, 0x49, 0x4c, 0x16, 0x2f, 0xe9, 0xdf, - 0x8f, 0x27, 0x58, 0xa2, 0x44, 0x17, 0x15, 0x2a, 0x51, 0xa2, 0xd0, 0xaf, - 0xb8, 0x44, 0xb1, 0x76, 0x6e, 0xb1, 0x74, 0xc3, 0xe6, 0xbf, 0xc2, 0xf5, - 0xd2, 0x74, 0xf1, 0x14, 0xea, 0x1f, 0xa4, 0xab, 0x7d, 0x25, 0x31, 0x2c, - 0x5f, 0xff, 0xfb, 0x1f, 0xb4, 0xe7, 0xe5, 0xf5, 0x3e, 0x7c, 0x39, 0xe4, - 0xeb, 0x17, 0xff, 0xff, 0xec, 0x81, 0x4e, 0xd9, 0xcf, 0xe1, 0x31, 0xad, - 0xbb, 0x69, 0xa0, 0xfc, 0x02, 0xc5, 0xff, 0xec, 0xed, 0xbb, 0x6b, 0x66, - 0xf3, 0x74, 0x05, 0x8a, 0xd2, 0x34, 0x4a, 0x10, 0x57, 0xff, 0xb0, 0x6c, - 0x4f, 0x83, 0x97, 0x6d, 0x96, 0x29, 0x62, 0xd9, 0xb1, 0xe9, 0xba, 0x3d, - 0xfe, 0xc1, 0xbf, 0x02, 0x6d, 0x2c, 0x54, 0xae, 0xfe, 0x0e, 0x1f, 0x38, - 0x5d, 0xb9, 0x73, 0xca, 0x31, 0x3a, 0x27, 0xc8, 0x9a, 0x33, 0xb2, 0x7a, - 0xf1, 0x3d, 0xfe, 0x26, 0xdb, 0xa8, 0x4f, 0x72, 0xc5, 0xf8, 0x13, 0x9d, - 0x41, 0x62, 0xff, 0x73, 0xec, 0x1f, 0xe6, 0x0b, 0x15, 0xb2, 0x25, 0xb7, - 0x38, 0xe8, 0xa6, 0xff, 0x7e, 0x4f, 0xe2, 0x9e, 0x96, 0x2e, 0xc8, 0x96, - 0x2f, 0xc4, 0xd0, 0xc2, 0x58, 0xbf, 0x89, 0xbe, 0x59, 0xa5, 0x8b, 0xc4, - 0x2c, 0x19, 0xe9, 0x78, 0x9a, 0xff, 0xb0, 0xf9, 0xd8, 0x51, 0xf8, 0x4b, - 0x17, 0xd3, 0xd4, 0x76, 0x2c, 0x5f, 0xf9, 0xba, 0xfc, 0xb8, 0x1b, 0xc2, - 0x58, 0xbf, 0xff, 0xd2, 0xf0, 0x6e, 0x72, 0x70, 0xa6, 0x18, 0x76, 0xe9, - 0x62, 0xb4, 0x8c, 0x33, 0x93, 0x78, 0xfe, 0xff, 0xd8, 0x0e, 0x66, 0xb6, - 0xd8, 0x5b, 0x2c, 0x50, 0xd3, 0x73, 0xc8, 0xc0, 0x3c, 0x61, 0x50, 0x54, - 0xf3, 0x86, 0x8c, 0xd5, 0xc8, 0xe9, 0x6f, 0xff, 0x8e, 0xda, 0x68, 0x4b, - 0xe9, 0xe1, 0x90, 0x58, 0xbf, 0x7e, 0x62, 0x7f, 0xac, 0x5c, 0xf0, 0x58, - 0xa1, 0x9e, 0x01, 0x14, 0xde, 0xe4, 0xc4, 0xb1, 0x7d, 0xb6, 0x75, 0x05, - 0x8b, 0x44, 0xb1, 0x52, 0x7a, 0xd8, 0x3c, 0x19, 0x2d, 0xfe, 0x3b, 0x16, - 0x68, 0x3f, 0x2c, 0x5f, 0xcd, 0x9b, 0x0b, 0x50, 0x58, 0xbf, 0xfe, 0xfc, - 0x9d, 0xf4, 0xfd, 0xd2, 0x1e, 0xd8, 0x12, 0xc5, 0xfa, 0x60, 0x77, 0xf2, - 0xc5, 0xff, 0x0e, 0x43, 0x39, 0x4f, 0x50, 0x58, 0xa5, 0x8a, 0xc3, 0xc7, - 0x73, 0xbb, 0xfb, 0x05, 0xb8, 0x79, 0xd2, 0xc5, 0x6c, 0xaa, 0xae, 0x10, - 0x8e, 0x1b, 0xbe, 0x17, 0x74, 0x69, 0x11, 0x79, 0xd5, 0x78, 0xdf, 0xd8, - 0x82, 0xff, 0xb5, 0x3c, 0x0c, 0x8a, 0x74, 0xb1, 0x73, 0x47, 0x2c, 0x53, - 0x9e, 0x99, 0xce, 0x6f, 0xef, 0xcf, 0xbf, 0x80, 0x58, 0xbf, 0xff, 0xe2, - 0x9d, 0xb0, 0x73, 0x0f, 0xe7, 0xda, 0x3d, 0xe3, 0xe7, 0x4b, 0x17, 0xfa, - 0x62, 0x17, 0x45, 0x31, 0x2c, 0x5f, 0xf4, 0xc0, 0x9b, 0xd0, 0x7e, 0xcb, - 0x17, 0x83, 0x90, 0x2c, 0x5e, 0xee, 0x7d, 0x96, 0x2b, 0x64, 0xc6, 0x8e, - 0xd7, 0xf3, 0x6e, 0x1d, 0x78, 0x7a, 0xfb, 0xdf, 0x9e, 0xe5, 0x8a, 0x58, - 0xb9, 0xe2, 0x58, 0xa8, 0xf3, 0x48, 0x00, 0xcb, 0xfe, 0x36, 0x49, 0x87, - 0xf9, 0x02, 0xc5, 0xff, 0x64, 0x45, 0x3b, 0x72, 0x77, 0x58, 0xba, 0x18, - 0xb1, 0x5a, 0x44, 0x5f, 0xce, 0x7c, 0x77, 0x77, 0x31, 0x62, 0xfd, 0x31, - 0x3c, 0xf1, 0x62, 0xfe, 0x90, 0xf0, 0xed, 0xd2, 0xc5, 0xff, 0xa7, 0x5b, - 0xf8, 0xb3, 0x66, 0x25, 0x8b, 0xe0, 0x3c, 0xf1, 0x62, 0xff, 0xfb, 0x3d, - 0xc9, 0x80, 0xd8, 0x18, 0x37, 0xe2, 0xc5, 0x7d, 0x1b, 0xfc, 0x2f, 0x11, - 0xfc, 0x71, 0x15, 0xff, 0x4f, 0x1b, 0x77, 0x1f, 0xdd, 0x62, 0xff, 0x0f, - 0x58, 0x2d, 0xdc, 0xeb, 0x17, 0xec, 0x16, 0xee, 0x75, 0x8b, 0xdf, 0x17, - 0xd6, 0x2c, 0x7c, 0x3f, 0xcd, 0x1a, 0xb1, 0x4d, 0xfe, 0x14, 0x0b, 0x00, - 0xfd, 0x2c, 0x5f, 0xec, 0xec, 0xc4, 0x3c, 0x02, 0xc5, 0x68, 0xfa, 0x3e, - 0x69, 0x51, 0x26, 0xe4, 0xd0, 0xb5, 0xf4, 0x26, 0xed, 0xf5, 0x8a, 0x95, - 0xed, 0x7d, 0xa1, 0xb8, 0x32, 0x1c, 0x8d, 0x23, 0xa4, 0xc7, 0x4a, 0x68, - 0x57, 0x80, 0xc0, 0x85, 0xfd, 0x18, 0x38, 0xa3, 0xb2, 0x08, 0xee, 0xd8, - 0xb1, 0x7f, 0xd1, 0x72, 0x70, 0x87, 0xf9, 0x58, 0xb1, 0xd6, 0x28, 0x8f, - 0x2f, 0xc7, 0x37, 0xf3, 0x99, 0xc7, 0x27, 0x58, 0xbf, 0x9b, 0x34, 0x00, - 0x4a, 0xc5, 0xf7, 0xdd, 0xa0, 0xb1, 0x7f, 0xff, 0xfc, 0x59, 0x01, 0x6a, - 0x75, 0xac, 0x1c, 0xb9, 0xb2, 0x5b, 0xb7, 0x98, 0xd5, 0x8a, 0xc4, 0x4f, - 0xb1, 0x15, 0xf7, 0x3a, 0x2d, 0x2c, 0x5f, 0xed, 0x67, 0xdc, 0xa4, 0xeb, - 0x17, 0xff, 0x4c, 0x7f, 0xcb, 0x3a, 0xf0, 0x9b, 0x8b, 0x17, 0xf4, 0xb6, - 0xbd, 0x9f, 0x58, 0xbf, 0xf8, 0xb2, 0x29, 0xd9, 0xb6, 0x3b, 0xec, 0xb1, - 0x7e, 0xc3, 0x74, 0xc1, 0x2c, 0x5b, 0x1c, 0xfc, 0x43, 0x47, 0xbf, 0xfc, - 0x7c, 0x1c, 0xc2, 0x78, 0x06, 0x6e, 0x96, 0x2a, 0x53, 0x89, 0x39, 0x97, - 0xd2, 0x39, 0x09, 0xe0, 0xc9, 0xe8, 0xc5, 0x72, 0x92, 0xb9, 0xf2, 0x16, - 0x2d, 0xe4, 0x33, 0x3c, 0x42, 0x28, 0xeb, 0x6f, 0xfb, 0xcd, 0xcc, 0xff, - 0xdc, 0xeb, 0x17, 0x7f, 0x8b, 0x17, 0xd9, 0xdb, 0x09, 0x62, 0xff, 0x73, - 0x1c, 0x6c, 0xfb, 0x2c, 0x54, 0x9e, 0xb6, 0x11, 0xdf, 0xf8, 0x98, 0x18, - 0x5e, 0xe3, 0x41, 0x62, 0xa5, 0x30, 0x43, 0x4e, 0x74, 0xdd, 0xe2, 0x0b, - 0xf1, 0x4e, 0xd3, 0xb2, 0xc5, 0xff, 0xde, 0xe0, 0x7e, 0x72, 0x14, 0x33, - 0x8b, 0x14, 0x34, 0x56, 0xc4, 0x7c, 0x45, 0x37, 0xf0, 0xe5, 0xb4, 0x01, - 0x2c, 0x5f, 0xd2, 0x40, 0x3b, 0x41, 0x62, 0xdf, 0x58, 0xbc, 0x5d, 0x79, - 0x62, 0xb0, 0xd8, 0x38, 0x95, 0x6c, 0x8a, 0xaf, 0x97, 0x76, 0x5d, 0xbe, - 0x67, 0xd6, 0x2c, 0x5f, 0xe6, 0x7e, 0x3f, 0x6f, 0xba, 0xc5, 0x68, 0xf5, - 0x7e, 0x43, 0x7f, 0x60, 0xc0, 0xe5, 0xe5, 0x8b, 0xf7, 0xe7, 0x35, 0x05, - 0x8b, 0xff, 0x8e, 0xe0, 0x6f, 0x16, 0x6d, 0xa9, 0x58, 0xa5, 0x8b, 0x63, - 0x9e, 0x87, 0x91, 0x2f, 0x7f, 0xce, 0xb1, 0x7f, 0xfd, 0x9b, 0x6a, 0x43, - 0x1b, 0x6d, 0x87, 0x6e, 0x96, 0x2f, 0xb9, 0xec, 0x3a, 0xc5, 0xfb, 0x3b, - 0x16, 0x41, 0x62, 0xe1, 0x7d, 0x62, 0xa3, 0xcf, 0x04, 0xe5, 0x37, 0xe8, - 0x07, 0xfc, 0xee, 0x58, 0xb9, 0xe2, 0x58, 0xa9, 0x46, 0x73, 0xb2, 0x31, - 0x2f, 0x8b, 0x6f, 0x7f, 0xf2, 0xb1, 0x7f, 0x1a, 0xd0, 0xe3, 0x8d, 0x62, - 0xb0, 0xf3, 0x1c, 0x76, 0xa5, 0x70, 0xcf, 0x21, 0xb4, 0xf0, 0x88, 0xd1, - 0x11, 0xcb, 0x7e, 0xf0, 0xc4, 0xc4, 0x3b, 0xc8, 0xc8, 0x7d, 0x08, 0x6b, - 0x85, 0x05, 0x8b, 0xfb, 0xef, 0xad, 0x67, 0x96, 0x2f, 0xff, 0xdc, 0x68, - 0xf1, 0xfe, 0x71, 0xf5, 0x3e, 0x9f, 0xac, 0x56, 0xc8, 0x9d, 0xdc, 0x63, - 0xa2, 0xeb, 0xe6, 0x3c, 0xc7, 0xac, 0x5e, 0x1c, 0xc1, 0x62, 0xe7, 0xe7, - 0xcf, 0x08, 0x44, 0xb7, 0x4c, 0x16, 0x2f, 0xfe, 0x83, 0xf6, 0x9d, 0x63, - 0xc0, 0x5a, 0x58, 0xbe, 0x90, 0x73, 0x16, 0x2f, 0xcf, 0xdd, 0x1e, 0xc7, - 0x58, 0xa8, 0x91, 0x2d, 0xf4, 0x6e, 0x11, 0x5c, 0x28, 0x2c, 0x56, 0x93, - 0x23, 0xf9, 0x6b, 0x42, 0xb7, 0xb1, 0x8d, 0xe3, 0xcc, 0xac, 0x5f, 0x8e, - 0xc5, 0xd4, 0x16, 0x2e, 0x68, 0x2c, 0x5f, 0x8b, 0xd1, 0xd2, 0x75, 0x8a, - 0x93, 0xeb, 0x62, 0x91, 0x0b, 0xde, 0x70, 0xb7, 0x58, 0xbd, 0xdf, 0x7d, - 0xf2, 0x34, 0x58, 0xbd, 0x83, 0xc5, 0x8b, 0xde, 0x70, 0x2c, 0x54, 0x7a, - 0x22, 0x0e, 0x3f, 0xf3, 0x0f, 0x0e, 0x5f, 0xb4, 0x3c, 0x23, 0x56, 0x2d, - 0x05, 0x8b, 0xff, 0x4f, 0xc4, 0xc1, 0xe7, 0x66, 0xd2, 0xc5, 0x39, 0xe9, - 0xf0, 0x4a, 0xf3, 0x90, 0xd6, 0x2a, 0x51, 0xf2, 0xc8, 0x1e, 0x7c, 0xec, - 0x43, 0x7f, 0xf8, 0x1f, 0x09, 0xbc, 0xfc, 0xfc, 0x97, 0x96, 0x2d, 0x12, - 0xc5, 0xe9, 0x29, 0x58, 0xad, 0x1f, 0xc8, 0x92, 0xc2, 0x13, 0xbf, 0xc7, - 0xe3, 0xc7, 0x66, 0xa5, 0x62, 0xe3, 0xe9, 0x62, 0xf1, 0xa7, 0x75, 0x8a, - 0xc3, 0x6c, 0xc3, 0x17, 0x9c, 0xee, 0xb1, 0x52, 0x8d, 0x7c, 0x30, 0x26, - 0xcf, 0x0f, 0xd7, 0x78, 0xfc, 0x1f, 0x1d, 0xf7, 0x0c, 0xc8, 0xd6, 0x53, - 0x32, 0x86, 0x76, 0x8c, 0xce, 0x13, 0xb1, 0xc3, 0x9e, 0x65, 0xc9, 0x4a, - 0x5b, 0xca, 0x81, 0xea, 0x30, 0x47, 0xac, 0x75, 0xe3, 0xe3, 0xe5, 0x8a, - 0x55, 0x1e, 0xa7, 0x91, 0x4f, 0x3c, 0x79, 0xfa, 0x45, 0x6b, 0x46, 0x64, - 0x09, 0x55, 0x85, 0x49, 0xc5, 0xe4, 0xe2, 0xb7, 0xa7, 0x95, 0x05, 0x19, - 0xdf, 0x68, 0xe6, 0x02, 0x44, 0x8e, 0x84, 0x38, 0x71, 0xd7, 0x77, 0x47, - 0x1b, 0x67, 0x58, 0xb8, 0xc0, 0x2c, 0x51, 0x86, 0xab, 0x82, 0x37, 0x1b, - 0xe5, 0x8b, 0xff, 0xfd, 0x1b, 0x4e, 0x77, 0xd7, 0x51, 0xb4, 0x6a, 0xed, - 0x1f, 0x1a, 0xc4, 0x61, 0x9f, 0x8e, 0x58, 0xb7, 0x78, 0xb1, 0x5d, 0xf1, - 0x14, 0x71, 0x42, 0x32, 0xe7, 0x35, 0x62, 0xfe, 0x07, 0x22, 0x29, 0x1a, - 0xc5, 0xff, 0x76, 0xc1, 0xf5, 0xe2, 0xc0, 0x2c, 0x54, 0x9f, 0x5b, 0x97, - 0xdf, 0xf9, 0xf4, 0x79, 0xc2, 0x18, 0x67, 0x58, 0xa8, 0x1e, 0xf9, 0xa4, - 0x17, 0xbc, 0xc1, 0xac, 0x5c, 0x19, 0xd6, 0x2f, 0x7f, 0x3c, 0xb1, 0x51, - 0x1b, 0x60, 0x0c, 0xdf, 0xf6, 0x7b, 0x99, 0xef, 0xe0, 0x16, 0x2f, 0xf1, - 0x92, 0x61, 0xdc, 0xbc, 0xb1, 0x7f, 0x9c, 0xd6, 0x2f, 0x61, 0x2c, 0x5f, - 0xe6, 0x35, 0xf9, 0xc6, 0x75, 0x8a, 0x82, 0xa4, 0xec, 0x87, 0x13, 0x91, - 0xb2, 0xa1, 0x11, 0x70, 0xe7, 0xc6, 0xbd, 0x8c, 0xae, 0x62, 0x58, 0xbf, - 0xf6, 0x6f, 0x20, 0x92, 0xf4, 0x76, 0x2c, 0x56, 0x91, 0x9a, 0x77, 0x6f, - 0x0b, 0x5d, 0x81, 0x2c, 0x58, 0xeb, 0x14, 0x61, 0xaa, 0x0c, 0x62, 0xfb, - 0x3e, 0xdd, 0xcb, 0x17, 0xbd, 0x87, 0x58, 0xbd, 0x38, 0x4b, 0x17, 0xe6, - 0xd0, 0x23, 0xb1, 0x62, 0xa0, 0x78, 0xce, 0x37, 0x52, 0x88, 0x4f, 0x31, - 0xdf, 0xbd, 0x24, 0xe0, 0x58, 0xbb, 0xae, 0x96, 0x2e, 0x33, 0x8b, 0x17, - 0xed, 0x0b, 0xb0, 0x02, 0x58, 0xb8, 0xb8, 0xb1, 0x7e, 0x09, 0x80, 0x7c, - 0x58, 0xb7, 0x16, 0x2b, 0x0d, 0xd9, 0x14, 0xdd, 0x90, 0x58, 0xbf, 0x8b, - 0x3c, 0x26, 0x09, 0x62, 0x8c, 0x4d, 0x7f, 0x08, 0xba, 0x27, 0x38, 0xd7, - 0xc6, 0x40, 0x5a, 0x4a, 0x5c, 0x1f, 0xec, 0x2f, 0x7e, 0xf7, 0x1f, 0xa0, - 0x96, 0x2f, 0xfd, 0x27, 0x7e, 0xb8, 0x28, 0x84, 0x6a, 0xc5, 0xf8, 0xbd, - 0xfc, 0x82, 0xc5, 0xdc, 0xc5, 0x8a, 0x73, 0x7e, 0xc5, 0x16, 0xe9, 0x62, - 0xfe, 0x90, 0xa3, 0xb3, 0x52, 0xb1, 0x58, 0x78, 0x84, 0x27, 0x7f, 0xfd, - 0xd9, 0xf5, 0x80, 0x68, 0x71, 0xcb, 0x00, 0xb1, 0x7e, 0x6c, 0x00, 0x7e, - 0x58, 0xbf, 0xbe, 0xc3, 0x61, 0x74, 0xb1, 0x7f, 0xe1, 0x3f, 0xff, 0x9a, - 0xd3, 0x9d, 0x62, 0xf0, 0xe7, 0xb9, 0x62, 0xfb, 0xee, 0xd1, 0xeb, 0x14, - 0x47, 0x8b, 0xe2, 0x0a, 0x31, 0x52, 0x94, 0x21, 0x04, 0x36, 0x3c, 0x20, - 0x35, 0x43, 0x72, 0x93, 0x97, 0xb4, 0x21, 0x2b, 0x4a, 0xbe, 0xc2, 0x94, - 0xfb, 0x7e, 0xdd, 0xc1, 0x1c, 0x6a, 0xc5, 0xf6, 0xd3, 0xee, 0x2c, 0x5e, - 0x90, 0x71, 0x62, 0xb4, 0x78, 0x24, 0x49, 0x7c, 0xda, 0x68, 0x2c, 0x56, - 0x1e, 0x19, 0x10, 0xdb, 0xcb, 0x17, 0xb9, 0x20, 0x58, 0xb6, 0x74, 0x6b, - 0xfc, 0x25, 0x46, 0x26, 0x51, 0xa8, 0x59, 0x7d, 0x3e, 0xff, 0xd2, 0x17, - 0x50, 0xe3, 0x7f, 0x22, 0x58, 0xbe, 0x1f, 0x6d, 0x6c, 0xb1, 0x78, 0x20, - 0x82, 0x58, 0xbc, 0x4f, 0x29, 0x11, 0x86, 0x86, 0xf1, 0xdc, 0x6b, 0x17, - 0xff, 0xff, 0x8c, 0xfc, 0x36, 0xe4, 0x8b, 0x8e, 0x76, 0x3c, 0xb0, 0x66, - 0x19, 0xf8, 0xe5, 0x8a, 0xd9, 0x19, 0x8c, 0x5c, 0x18, 0xed, 0xfd, 0xf9, - 0xf9, 0x61, 0xab, 0x17, 0x84, 0x5e, 0x58, 0xbf, 0x98, 0xa0, 0x39, 0xd9, - 0x62, 0xb0, 0xf2, 0xfe, 0x3b, 0x7f, 0xcc, 0xdf, 0x66, 0x66, 0x1a, 0xc5, - 0x0d, 0x1a, 0x11, 0xef, 0x2c, 0x43, 0x7b, 0x21, 0x2b, 0x17, 0xff, 0xd0, - 0x7f, 0x42, 0x48, 0x0c, 0x4f, 0xd4, 0x16, 0x2b, 0x47, 0xd6, 0x10, 0xe5, - 0xf3, 0x7a, 0x46, 0xb1, 0x7b, 0x0b, 0x75, 0x8b, 0xd1, 0x3f, 0xd6, 0x2e, - 0xea, 0x0b, 0x17, 0xfb, 0x5b, 0x4e, 0x44, 0xfa, 0x58, 0xbf, 0xc6, 0xcf, - 0xb9, 0xf6, 0x12, 0xc5, 0xc7, 0x95, 0x8b, 0xf7, 0xdc, 0xba, 0xe2, 0xc5, - 0xfa, 0x5e, 0x0d, 0xc5, 0x8b, 0xed, 0xb3, 0xaf, 0x2c, 0x5f, 0x39, 0xad, - 0xe5, 0x8a, 0x73, 0xc8, 0xd1, 0x2d, 0xa2, 0x58, 0xbd, 0x80, 0xe2, 0xc5, - 0x49, 0xb0, 0x21, 0x3b, 0xfc, 0xdf, 0x2c, 0xec, 0xdb, 0xac, 0x5c, 0xde, - 0x58, 0xbd, 0xa9, 0x09, 0x62, 0x96, 0x2b, 0x46, 0xa8, 0x03, 0xd6, 0xdd, - 0x62, 0xfc, 0x1e, 0xb0, 0x43, 0x58, 0xac, 0x3d, 0xe7, 0x21, 0xe0, 0x9d, - 0x4a, 0xaa, 0x3c, 0x19, 0x34, 0xd5, 0xcd, 0x62, 0x17, 0xd1, 0x49, 0xdb, - 0xd9, 0x44, 0x87, 0xf8, 0x6b, 0xe8, 0x4f, 0xdf, 0x3f, 0xc5, 0x05, 0x8b, - 0xbf, 0x2b, 0x17, 0xcf, 0xf1, 0x40, 0xc3, 0x75, 0x84, 0x77, 0xf7, 0x1f, - 0x5b, 0xff, 0x16, 0x2f, 0xb0, 0x6f, 0x05, 0x8b, 0xfc, 0xff, 0xfe, 0x79, - 0xf8, 0xb1, 0x68, 0x18, 0x8b, 0xce, 0x8e, 0x08, 0xbf, 0x84, 0x57, 0xec, - 0xef, 0x49, 0xc6, 0xb1, 0x7c, 0xdc, 0xed, 0x05, 0x8b, 0xb0, 0x6b, 0x14, - 0x69, 0xbc, 0xec, 0x4b, 0x50, 0x5d, 0x23, 0xea, 0x56, 0x0e, 0xa3, 0x92, - 0x02, 0x27, 0x9a, 0x2f, 0xcc, 0x50, 0x73, 0xac, 0x5e, 0xc1, 0x47, 0x2c, - 0x51, 0x8d, 0xa6, 0x87, 0x7a, 0x45, 0x1a, 0xa1, 0x79, 0x32, 0xd2, 0xb6, - 0x5a, 0x81, 0x18, 0xe5, 0x04, 0x64, 0xb7, 0xc7, 0x8d, 0x57, 0x46, 0xe7, - 0x42, 0xfc, 0x62, 0x8d, 0x18, 0x08, 0x21, 0x3a, 0x44, 0x7c, 0x22, 0x14, - 0xea, 0x07, 0x65, 0xb8, 0xe2, 0x7b, 0xdd, 0xe7, 0x7d, 0xc6, 0xeb, 0x17, - 0xfd, 0xf6, 0x88, 0xa7, 0x35, 0x05, 0x8b, 0xfc, 0x19, 0xf0, 0x72, 0x5b, - 0xac, 0x5f, 0xf9, 0x88, 0x38, 0xb8, 0xe5, 0xd4, 0x16, 0x2f, 0xfc, 0x16, - 0x70, 0x9e, 0x75, 0x9b, 0x2c, 0x54, 0x7a, 0x3b, 0x8e, 0x72, 0x23, 0x5e, - 0xc8, 0x37, 0xc2, 0xda, 0x62, 0x58, 0xbf, 0xff, 0xff, 0xe3, 0x3f, 0x9d, - 0x43, 0xe7, 0x33, 0x7f, 0x8b, 0xde, 0xc2, 0xfe, 0x7a, 0x46, 0x61, 0x9f, - 0x8e, 0x58, 0xa9, 0x46, 0x2c, 0x79, 0x2d, 0xee, 0xfb, 0x8d, 0x5d, 0xea, - 0xc5, 0xfd, 0xbf, 0xd8, 0x2e, 0xb8, 0xb1, 0x7e, 0x1b, 0xfb, 0x37, 0x58, - 0xa8, 0xd6, 0x88, 0xb9, 0x30, 0x39, 0x95, 0xec, 0x8b, 0x16, 0x2f, 0xc5, - 0x3a, 0x6e, 0x2c, 0x5f, 0xf0, 0xf0, 0x5d, 0xfb, 0xfd, 0x8e, 0xb1, 0x7c, - 0x72, 0xc8, 0x96, 0x30, 0xdf, 0x5f, 0xa1, 0x84, 0xd0, 0x58, 0xa9, 0x3d, - 0x96, 0x32, 0xbf, 0xe1, 0xfe, 0x73, 0x0e, 0xf2, 0xb1, 0x78, 0x19, 0xc5, - 0x8b, 0xe6, 0xe8, 0xfd, 0x2c, 0x50, 0x0f, 0x0b, 0xc3, 0xb5, 0x28, 0x9b, - 0xc7, 0x9b, 0xc3, 0x98, 0x96, 0x2f, 0x7d, 0xfe, 0xb1, 0x70, 0x4c, 0xb1, - 0x6e, 0x61, 0xb5, 0xf8, 0xed, 0xf3, 0x3c, 0x81, 0x62, 0xef, 0xca, 0xc5, - 0xef, 0x8a, 0x0b, 0x18, 0x5b, 0xdf, 0x84, 0xc5, 0xbf, 0x16, 0x2f, 0xf7, - 0x9c, 0x50, 0xe3, 0xec, 0xb1, 0x63, 0x3b, 0xd4, 0x61, 0x39, 0xc0, 0x0b, - 0x38, 0x53, 0x7b, 0x53, 0xd9, 0x62, 0xff, 0x13, 0x05, 0xec, 0x23, 0x56, - 0x2f, 0x76, 0xc1, 0xac, 0x5f, 0xdf, 0x79, 0x21, 0x4a, 0xc5, 0xfe, 0x98, - 0xf3, 0x73, 0x8d, 0x1e, 0xb1, 0x7c, 0x07, 0x28, 0x96, 0x28, 0xd4, 0x44, - 0xfc, 0xb3, 0xc7, 0x57, 0xec, 0x18, 0x60, 0xe2, 0xc5, 0xf7, 0x18, 0xa0, - 0xb1, 0x7f, 0xff, 0xff, 0xda, 0x16, 0xb3, 0x7c, 0xd6, 0x9a, 0x19, 0xe9, - 0xf7, 0x38, 0x26, 0x38, 0x7f, 0x6f, 0xca, 0xc5, 0x18, 0xa8, 0x3a, 0x21, - 0xff, 0x9a, 0x34, 0x2a, 0x08, 0xc7, 0x85, 0x5d, 0xc4, 0x57, 0xdd, 0x9b, - 0xee, 0xb1, 0x7f, 0xb3, 0x8c, 0xdd, 0x41, 0xd6, 0x2f, 0xd0, 0x21, 0x37, - 0x16, 0x2e, 0x0f, 0xeb, 0x17, 0xa2, 0x10, 0x6b, 0x15, 0x26, 0xe5, 0x86, - 0x6e, 0x2f, 0x2c, 0x5d, 0x31, 0x2c, 0x5c, 0x5b, 0x2c, 0x54, 0xa6, 0x3d, - 0xb1, 0x23, 0x99, 0xfd, 0x85, 0x87, 0xc8, 0x5f, 0xb8, 0x62, 0xfc, 0xd1, - 0x72, 0x7a, 0x58, 0xa3, 0x17, 0xd1, 0x87, 0x0b, 0xed, 0x42, 0xec, 0xe4, - 0x20, 0x53, 0x28, 0x74, 0x72, 0x52, 0xb7, 0xa3, 0x8c, 0xec, 0xcb, 0x7f, - 0x4c, 0x3f, 0x3d, 0x9d, 0x62, 0xf8, 0xfb, 0x34, 0x7a, 0xc5, 0xe9, 0x3c, - 0xac, 0x56, 0x1e, 0x1e, 0xe4, 0xf7, 0xbe, 0x1f, 0x16, 0x2f, 0xf1, 0x7b, - 0xc5, 0x3e, 0xe2, 0xc5, 0xe2, 0x11, 0xab, 0x15, 0x27, 0xa2, 0xe6, 0x77, - 0xf4, 0x24, 0x1f, 0x84, 0xac, 0x51, 0xa7, 0x9c, 0xe4, 0x17, 0xc2, 0x29, - 0x3a, 0xc5, 0xe6, 0x63, 0xac, 0x51, 0xcd, 0xf7, 0xc8, 0xaf, 0x78, 0x33, - 0xac, 0x58, 0x6b, 0x17, 0x67, 0x72, 0xc5, 0xcd, 0xc5, 0x8b, 0x6b, 0xa3, - 0xe2, 0x38, 0xff, 0xc4, 0x84, 0x35, 0x52, 0x8c, 0x66, 0x84, 0x1d, 0xd0, - 0xf2, 0xc5, 0xf4, 0x53, 0xe6, 0x58, 0xad, 0xcd, 0xd8, 0x86, 0x2f, 0x16, - 0x71, 0x62, 0xf0, 0x81, 0x84, 0x6f, 0xbb, 0x11, 0x5a, 0x0b, 0x15, 0xb1, - 0xe2, 0xfc, 0xce, 0xff, 0xdf, 0x0c, 0x7e, 0x7c, 0x8a, 0x4e, 0xb1, 0x74, - 0xc4, 0xb1, 0x7c, 0x3f, 0xc8, 0x16, 0x2a, 0x4f, 0xf0, 0x90, 0x43, 0x18, - 0xbf, 0xf1, 0x37, 0xa7, 0x02, 0x62, 0x65, 0x8b, 0xfc, 0x63, 0x38, 0xc5, - 0xee, 0x2c, 0x56, 0xe7, 0xe2, 0x03, 0xcb, 0xd2, 0x46, 0xac, 0x5f, 0xfb, - 0xce, 0x16, 0xff, 0x7e, 0xce, 0x35, 0x8b, 0xfd, 0xa8, 0x7f, 0x3b, 0x49, - 0xd6, 0x29, 0x62, 0xee, 0x62, 0xc5, 0x40, 0xd1, 0xf7, 0xe1, 0x97, 0x66, - 0xcb, 0x14, 0x23, 0x7c, 0x19, 0x35, 0xe7, 0xe8, 0x25, 0x8b, 0xc2, 0x1e, - 0xeb, 0x15, 0x29, 0xbd, 0x6e, 0x47, 0xd0, 0xeb, 0xa1, 0xb4, 0x25, 0xc0, - 0x45, 0xe1, 0xfb, 0xdd, 0x43, 0x75, 0x8b, 0xa0, 0xcb, 0x17, 0x10, 0x96, - 0x2f, 0x71, 0xfb, 0x2c, 0x5f, 0x79, 0x9b, 0xeb, 0x15, 0x03, 0xc1, 0x21, - 0xfa, 0x94, 0x48, 0x6c, 0x2e, 0xcb, 0x17, 0xd9, 0xa9, 0x1a, 0xc5, 0xf4, - 0x5f, 0xc8, 0x96, 0x2f, 0xf0, 0xb6, 0xf1, 0x49, 0xf8, 0xb1, 0x7b, 0x35, - 0x86, 0x1f, 0xe3, 0x11, 0x06, 0x4b, 0x78, 0xe2, 0xec, 0xb1, 0x7f, 0x64, - 0x3a, 0x86, 0x79, 0x62, 0xde, 0x82, 0x23, 0xf1, 0x03, 0xe4, 0x17, 0x3e, - 0xeb, 0x17, 0xa1, 0x8c, 0xb1, 0x7b, 0xba, 0x3c, 0x6b, 0x16, 0x39, 0x87, - 0x81, 0x1b, 0x0e, 0x50, 0x11, 0x0c, 0x25, 0x8a, 0x58, 0xbe, 0x1c, 0x74, - 0x84, 0xb1, 0x70, 0x8e, 0xb1, 0x44, 0x6f, 0xfc, 0x4f, 0x7d, 0xd4, 0x3e, - 0xeb, 0x15, 0x27, 0x88, 0xc4, 0x17, 0xf4, 0x9b, 0xee, 0x08, 0x96, 0x2f, - 0xef, 0x4f, 0x67, 0x20, 0x2c, 0x52, 0xa4, 0x0e, 0x2f, 0xfb, 0xd0, 0x73, - 0xcf, 0xc3, 0x1a, 0xc5, 0x80, 0xb1, 0x7f, 0x36, 0xc0, 0x62, 0x1a, 0x21, - 0x06, 0x96, 0xe6, 0x23, 0x47, 0x72, 0xf6, 0x19, 0x23, 0xb8, 0xe1, 0x2a, - 0xef, 0x15, 0x00, 0x1e, 0x11, 0xff, 0x20, 0xf4, 0x60, 0x16, 0x8f, 0x58, - 0xbf, 0xe7, 0xcf, 0x73, 0x58, 0x3c, 0x58, 0xbf, 0xbe, 0xc7, 0x29, 0xe9, - 0x62, 0xf8, 0xfc, 0x68, 0x7c, 0xf9, 0x83, 0x38, 0xbc, 0xcd, 0xa5, 0x8b, - 0xf8, 0x1f, 0x2c, 0xf7, 0x16, 0x2f, 0xe2, 0xce, 0xc5, 0x9c, 0x58, 0xb4, - 0xc4, 0x7f, 0x1a, 0x1c, 0xf1, 0x75, 0xfa, 0x63, 0x9f, 0xe2, 0x58, 0xa9, - 0x4f, 0x70, 0x69, 0xf8, 0xf7, 0xc8, 0x59, 0x78, 0xd6, 0xdc, 0x58, 0xbf, - 0x7e, 0x63, 0xc5, 0x05, 0x8a, 0x93, 0x7c, 0xc2, 0x57, 0xcd, 0xec, 0x09, - 0x62, 0xff, 0x87, 0x3d, 0x7d, 0xc7, 0xac, 0x58, 0xa8, 0x33, 0x8a, 0x46, - 0xe5, 0x84, 0x46, 0xc2, 0xfb, 0x78, 0xc9, 0xb5, 0x0e, 0x43, 0xc2, 0x7f, - 0xf2, 0x86, 0x59, 0xa4, 0x10, 0xb0, 0x28, 0xce, 0xb9, 0x0b, 0xbf, 0x4b, - 0xff, 0xed, 0x08, 0xc8, 0xe1, 0xfe, 0xe2, 0x3b, 0xff, 0xe3, 0x5a, 0x2f, - 0xce, 0xde, 0x73, 0x9c, 0x5c, 0x58, 0xbc, 0xe5, 0xba, 0xc5, 0xf6, 0x75, - 0xec, 0x58, 0xb4, 0x0e, 0x78, 0x04, 0x3b, 0x7a, 0x1e, 0xd9, 0x62, 0xff, - 0xf1, 0x67, 0xf1, 0xb7, 0xfc, 0x90, 0x86, 0xb1, 0x7f, 0xf8, 0x13, 0xd6, - 0x6c, 0x36, 0x6d, 0xd8, 0x6b, 0x16, 0x0f, 0x74, 0x4a, 0x81, 0x26, 0xa5, - 0x30, 0x61, 0x93, 0xea, 0x16, 0x97, 0xf1, 0x7a, 0x19, 0xac, 0x58, 0xbf, - 0x33, 0x6d, 0x84, 0xb1, 0x74, 0x73, 0x2c, 0x53, 0x1f, 0x77, 0x8b, 0x43, - 0x27, 0xbf, 0xda, 0xdb, 0x8d, 0xbe, 0xb1, 0x62, 0xff, 0x7e, 0x7e, 0xe6, - 0xe0, 0x4b, 0x17, 0xf6, 0x6e, 0xdf, 0x9f, 0xac, 0x54, 0x0f, 0x8f, 0xe6, - 0xb7, 0xf1, 0x6f, 0x9e, 0xfb, 0xac, 0x5f, 0xfe, 0xd3, 0x1f, 0x06, 0x59, - 0xee, 0x49, 0xd6, 0x2f, 0x33, 0xfa, 0x4f, 0xdd, 0xcb, 0xad, 0xc5, 0x8b, - 0xf3, 0x83, 0x9f, 0x75, 0x8a, 0xc3, 0x74, 0x42, 0x57, 0x68, 0x6b, 0x17, - 0x04, 0x12, 0xc5, 0x40, 0xd9, 0x04, 0x31, 0x7a, 0x5f, 0xb2, 0x44, 0x61, - 0xa2, 0xbf, 0xe7, 0x27, 0x07, 0x33, 0xec, 0xb1, 0x7f, 0x16, 0x05, 0x84, - 0x35, 0x8a, 0xc5, 0x41, 0x7f, 0x84, 0xcb, 0x35, 0x71, 0xcf, 0xc6, 0x21, - 0x9b, 0xde, 0xe7, 0x79, 0xde, 0xac, 0x5f, 0xd2, 0x5e, 0xfe, 0x41, 0x62, - 0xed, 0x4a, 0xc5, 0xc0, 0xe2, 0xc5, 0xfc, 0xff, 0x73, 0x4d, 0x95, 0x8a, - 0x19, 0xe3, 0xf8, 0x62, 0x9d, 0x10, 0x01, 0xaf, 0x56, 0x91, 0xa1, 0xc8, - 0x56, 0xdf, 0x10, 0x98, 0x35, 0x8a, 0x95, 0xc4, 0x47, 0x95, 0x49, 0xe5, - 0xd0, 0xe1, 0xf1, 0xdc, 0x51, 0x79, 0xcb, 0x16, 0x2f, 0x9c, 0xed, 0x12, - 0xc5, 0xdc, 0xf2, 0xc5, 0xe7, 0x26, 0x58, 0xb6, 0xcb, 0x16, 0xc8, 0x1a, - 0xe2, 0x1b, 0xbf, 0xe9, 0x39, 0x99, 0xad, 0x9f, 0x65, 0x8a, 0x82, 0x39, - 0x46, 0x37, 0xb9, 0x1c, 0x7a, 0x31, 0x12, 0xdf, 0xf8, 0x84, 0xc1, 0x99, - 0x98, 0x46, 0xac, 0x5e, 0x1f, 0x7a, 0x4b, 0x17, 0xe0, 0x16, 0x76, 0xc5, - 0x8b, 0xdf, 0x99, 0x58, 0xbf, 0xde, 0xe7, 0xc5, 0x25, 0xb2, 0xc5, 0xe7, - 0x26, 0x58, 0xb3, 0xe1, 0xe8, 0x6e, 0x6b, 0x7f, 0x1f, 0x07, 0x25, 0xba, - 0xc5, 0x18, 0x9a, 0x67, 0x7a, 0x81, 0x02, 0x23, 0x94, 0xfd, 0xb0, 0x32, - 0x7b, 0xc1, 0x04, 0x12, 0x45, 0x24, 0x46, 0x1a, 0x1b, 0xe7, 0x09, 0xe2, - 0x48, 0xad, 0xcf, 0x0d, 0xc7, 0xed, 0xd9, 0x62, 0xf4, 0xf6, 0xc5, 0x8a, - 0x19, 0xb2, 0xd0, 0xa5, 0xe8, 0xb3, 0xeb, 0x15, 0x86, 0xfd, 0x88, 0x6f, - 0x78, 0x4c, 0xb1, 0x6d, 0x96, 0x2f, 0xbd, 0xa6, 0xec, 0xb1, 0x58, 0x7a, - 0xba, 0x1d, 0x61, 0x3b, 0xf1, 0xdf, 0xee, 0x75, 0x8b, 0xb3, 0xbf, 0x58, - 0xbf, 0xbe, 0x66, 0x9e, 0x78, 0xb1, 0x51, 0xa3, 0xa6, 0x43, 0x98, 0xc7, - 0x76, 0x8c, 0x1e, 0x10, 0xb0, 0x19, 0xae, 0x4f, 0xb1, 0xbd, 0x3b, 0x22, - 0x28, 0xc7, 0x35, 0x1c, 0xd1, 0xe1, 0x47, 0xf9, 0xc7, 0x36, 0x8d, 0x00, - 0x11, 0xcc, 0x94, 0x30, 0xf9, 0x09, 0x3f, 0x3a, 0x76, 0x2d, 0x08, 0xa0, - 0x31, 0xcb, 0xf1, 0x34, 0x30, 0x6b, 0x17, 0xa0, 0x2c, 0x58, 0xbd, 0x13, - 0x4a, 0xc5, 0xfb, 0x3a, 0xe4, 0xc1, 0x62, 0xb4, 0x7c, 0x62, 0x1d, 0x08, - 0x76, 0xff, 0xbf, 0xbb, 0xc8, 0x0f, 0x30, 0x58, 0xbf, 0xfb, 0xc0, 0x72, - 0x87, 0x36, 0xed, 0xc7, 0x58, 0xbd, 0xfc, 0xd9, 0x62, 0xfd, 0x80, 0x06, - 0x01, 0x62, 0x98, 0xf1, 0x88, 0x7a, 0xfc, 0x39, 0xfc, 0xc1, 0x62, 0xfe, - 0xcd, 0x49, 0x4f, 0x16, 0x2f, 0xf8, 0xed, 0xcc, 0xd3, 0x74, 0x12, 0xc5, - 0xfd, 0x84, 0x2f, 0x4f, 0xd6, 0x2f, 0xee, 0x67, 0x62, 0x9e, 0xb0, 0xfa, - 0x38, 0x77, 0x52, 0x98, 0x0e, 0x14, 0x7a, 0x12, 0x97, 0xed, 0x3e, 0xcc, - 0x75, 0x8b, 0xf7, 0x83, 0xfb, 0x01, 0x62, 0xb6, 0x44, 0x3e, 0x1a, 0x74, - 0x53, 0x43, 0x54, 0xcf, 0xd4, 0x23, 0x8a, 0x3a, 0x8b, 0xc4, 0xfc, 0x58, - 0xbc, 0xd9, 0xba, 0xc5, 0xe7, 0xcd, 0x96, 0x2f, 0xe2, 0x07, 0x3d, 0xce, - 0x96, 0x2f, 0xfc, 0x13, 0x0c, 0xc0, 0xc0, 0x07, 0xee, 0x58, 0xbf, 0x0b, - 0xcc, 0x0e, 0x2c, 0x56, 0x22, 0x7f, 0xe6, 0x00, 0x46, 0xbf, 0xed, 0xa5, - 0xb7, 0x06, 0xb3, 0xa5, 0x8a, 0xd1, 0xf5, 0x91, 0x7d, 0xe6, 0x20, 0x2c, - 0x5f, 0xde, 0x6f, 0x81, 0xbc, 0xb1, 0x43, 0x3c, 0xac, 0x1c, 0xbf, 0xe6, - 0x3b, 0xff, 0xae, 0x48, 0xd6, 0x2f, 0xfc, 0x40, 0x29, 0xea, 0x29, 0x20, - 0x2c, 0x5f, 0xa2, 0xe7, 0xb0, 0x6b, 0x15, 0x27, 0xd2, 0x19, 0xfd, 0x18, - 0xbb, 0x1f, 0x92, 0xa8, 0x5c, 0xf7, 0x43, 0x9f, 0x1d, 0x68, 0xc9, 0xc0, - 0xd6, 0x44, 0x3c, 0x85, 0x1d, 0xf8, 0xc3, 0xce, 0x79, 0x62, 0xf0, 0x20, - 0x4b, 0x15, 0xb1, 0xe3, 0x40, 0xa6, 0xfd, 0x14, 0x70, 0x23, 0xb1, 0x62, - 0xf7, 0x9b, 0xeb, 0x17, 0xef, 0x14, 0x9f, 0x8b, 0x17, 0xee, 0x37, 0x58, - 0x75, 0x8a, 0x93, 0xee, 0xe8, 0x77, 0xc5, 0x17, 0xf8, 0x50, 0xd6, 0x47, - 0x38, 0x16, 0x2f, 0x9b, 0xb7, 0xdd, 0x62, 0xff, 0xfa, 0x7a, 0xfe, 0x70, - 0x4d, 0xa1, 0x6d, 0x9f, 0x58, 0xa7, 0x3f, 0x6f, 0x92, 0x5f, 0x8b, 0xdc, - 0x73, 0xac, 0x5f, 0xf6, 0xb9, 0xf7, 0xdc, 0x5a, 0x02, 0xc5, 0x61, 0xf2, - 0x31, 0x45, 0xff, 0x66, 0xc7, 0xce, 0xbd, 0x27, 0x58, 0xa9, 0x3d, 0xb1, - 0x90, 0x5f, 0xb5, 0x9d, 0x9b, 0xeb, 0x16, 0x75, 0x8b, 0xfe, 0x63, 0x77, - 0xfb, 0x8d, 0xa0, 0xb1, 0x7d, 0xb6, 0xcd, 0xd2, 0xc5, 0xb8, 0xe7, 0xe4, - 0x42, 0x21, 0x9d, 0xdf, 0xf0, 0xff, 0x3a, 0x90, 0x67, 0x16, 0x2f, 0xff, - 0xf7, 0xe4, 0xa4, 0x5b, 0xf9, 0xbf, 0x87, 0x7f, 0x00, 0x4b, 0x14, 0x6a, - 0x6d, 0x40, 0x84, 0xe7, 0x0d, 0x3c, 0x73, 0x7e, 0x14, 0xee, 0x01, 0x2c, - 0x5f, 0xee, 0x49, 0xf9, 0xb8, 0xb6, 0x58, 0xbf, 0xfc, 0x6b, 0xf8, 0xb2, - 0x06, 0x6e, 0x70, 0x4a, 0xc5, 0xf6, 0x6b, 0xee, 0xb1, 0x7e, 0x78, 0xbe, - 0xe0, 0x58, 0xbf, 0xfc, 0xd0, 0x2c, 0xec, 0xd1, 0x4e, 0x7b, 0x8b, 0x15, - 0x28, 0x96, 0xf9, 0x13, 0x14, 0xda, 0x39, 0x62, 0xe9, 0x35, 0x62, 0xf8, - 0x6c, 0xe3, 0x58, 0xa8, 0xd0, 0xf3, 0xf6, 0x15, 0xc1, 0x8b, 0xdd, 0xb0, - 0x96, 0x2e, 0xfb, 0xac, 0x5e, 0xf0, 0x04, 0xb1, 0x7f, 0xce, 0x14, 0x46, - 0x4e, 0xb5, 0x8b, 0x17, 0xfe, 0x0f, 0xa0, 0x67, 0x67, 0x2f, 0x71, 0x62, - 0xa5, 0x1a, 0x46, 0x8f, 0x38, 0xbc, 0x43, 0xdc, 0x3c, 0xbf, 0xd9, 0xb0, - 0x7f, 0xfe, 0x47, 0xac, 0x5f, 0xe7, 0xe1, 0x86, 0xeb, 0x38, 0xb1, 0x7c, - 0x0e, 0x79, 0xd6, 0x2f, 0xfd, 0xfc, 0xcd, 0x9f, 0x3b, 0x4f, 0x4b, 0x15, - 0x27, 0xc8, 0x02, 0x3a, 0x94, 0x7a, 0x6e, 0x72, 0x14, 0x26, 0xaf, 0xfe, - 0x93, 0xeb, 0x53, 0xb7, 0x99, 0x8d, 0x58, 0xba, 0x42, 0x58, 0xa0, 0x1e, - 0xf1, 0x23, 0x5f, 0xff, 0x0b, 0xbf, 0xe7, 0x37, 0xfb, 0xf5, 0xed, 0x6a, - 0x56, 0x2f, 0xee, 0xcf, 0xac, 0x1c, 0x68, 0xb1, 0x7c, 0xfe, 0x9d, 0x2c, - 0x5f, 0xf6, 0x73, 0x1f, 0x63, 0xb7, 0x72, 0xc5, 0xdf, 0xc5, 0x8a, 0x81, - 0xe9, 0xf0, 0xf2, 0xa5, 0x32, 0x5c, 0x59, 0xf9, 0xa8, 0x9d, 0x6f, 0x1e, - 0x77, 0x58, 0xbf, 0xe6, 0x87, 0x00, 0xdd, 0xb0, 0x6b, 0x17, 0x67, 0xf0, - 0xf6, 0x7e, 0x3d, 0x7f, 0xcc, 0xfe, 0x98, 0x08, 0x78, 0xb1, 0x7d, 0x9e, - 0x0f, 0x65, 0x8b, 0xe7, 0xd7, 0xc5, 0xf3, 0xdd, 0xe1, 0xc5, 0xfb, 0x4f, - 0xb3, 0x1d, 0x62, 0xe0, 0x82, 0x58, 0xac, 0x3c, 0x30, 0x8a, 0x6f, 0xe6, - 0x7e, 0xb9, 0x26, 0xac, 0x58, 0x49, 0x11, 0x87, 0xa3, 0xf2, 0x2a, 0x3a, - 0x60, 0x1f, 0x86, 0x6d, 0xff, 0xee, 0xdf, 0x7c, 0x2d, 0xfe, 0xe7, 0x9d, - 0xd6, 0x2f, 0xe6, 0x07, 0x50, 0xcf, 0x2c, 0x56, 0x1f, 0xe3, 0xa6, 0xde, - 0x80, 0x67, 0x58, 0xbf, 0x6b, 0xf9, 0xbe, 0xcb, 0x17, 0xba, 0x18, 0xd6, - 0x29, 0xcf, 0x29, 0x8a, 0xef, 0x48, 0x38, 0xb1, 0x50, 0x55, 0xe8, 0xf1, - 0xc4, 0xfe, 0x14, 0xac, 0x41, 0xc6, 0x91, 0x10, 0x5e, 0xc3, 0xc7, 0xac, - 0x5f, 0xf9, 0xbb, 0x60, 0x65, 0x3f, 0x7d, 0x96, 0x2f, 0xf6, 0x70, 0xb3, - 0xdf, 0x75, 0x8a, 0x1a, 0x24, 0xf4, 0x40, 0x48, 0x37, 0xfe, 0x2d, 0xc7, - 0xf9, 0xf9, 0x36, 0xcb, 0x17, 0xef, 0xb1, 0x39, 0xd6, 0x2a, 0x4f, 0x9d, - 0xd0, 0x2b, 0x66, 0x73, 0x7c, 0x21, 0x5a, 0x38, 0x70, 0x64, 0x71, 0x7b, - 0xa2, 0x74, 0x54, 0xe6, 0xf1, 0x43, 0x8f, 0x4f, 0xa7, 0x8c, 0x1b, 0xf1, - 0x9f, 0x02, 0x12, 0x85, 0x1a, 0x37, 0xa5, 0xc4, 0xf6, 0x87, 0xaf, 0x74, - 0x25, 0xaf, 0xf8, 0x78, 0x00, 0x39, 0x19, 0x1c, 0xb1, 0x4b, 0x17, 0xf6, - 0x00, 0x0e, 0x51, 0xcb, 0x17, 0xf4, 0xf1, 0xfc, 0x52, 0xb1, 0x46, 0x22, - 0x96, 0x4f, 0x46, 0x19, 0xf3, 0x0b, 0xf8, 0x3f, 0x75, 0xbb, 0xe2, 0xc5, - 0xf9, 0xcb, 0xd8, 0x75, 0x8a, 0x30, 0xf6, 0x20, 0x63, 0x7d, 0x9f, 0x70, - 0x96, 0x2f, 0xf7, 0xb3, 0x40, 0x3b, 0x41, 0x62, 0xfa, 0x00, 0xc0, 0x2c, - 0x5f, 0x36, 0x07, 0x8b, 0x17, 0xb0, 0xb7, 0x58, 0xbf, 0xbd, 0x91, 0x14, - 0x9d, 0x72, 0x01, 0x17, 0x77, 0x09, 0x62, 0xf0, 0xff, 0x2a, 0x90, 0x08, - 0x8c, 0x3d, 0x63, 0x9d, 0xde, 0x16, 0x8d, 0x58, 0xad, 0x91, 0xba, 0x4e, - 0x71, 0xc9, 0x77, 0xf4, 0x91, 0x9e, 0x7d, 0x96, 0x2f, 0xff, 0x77, 0xef, - 0xac, 0xec, 0xfe, 0x9c, 0x28, 0x2c, 0x5c, 0x52, 0xb1, 0x52, 0xa9, 0x8f, - 0x62, 0x3c, 0x23, 0xe8, 0xd3, 0xe4, 0x6d, 0x0f, 0xf0, 0x19, 0x88, 0xbf, - 0xb9, 0x3e, 0xff, 0x05, 0x86, 0x70, 0xa7, 0x4b, 0x17, 0xfd, 0x14, 0x85, - 0xac, 0xdd, 0xfe, 0xb1, 0x7f, 0x3e, 0xde, 0x68, 0x71, 0x62, 0xff, 0x9f, - 0x5f, 0x6e, 0x3e, 0xa5, 0x62, 0xd0, 0x23, 0xe7, 0xf1, 0x7d, 0xff, 0x7b, - 0x36, 0x9e, 0xe7, 0xd6, 0x2c, 0x5f, 0x61, 0xe6, 0x3d, 0x62, 0xfb, 0x30, - 0xb7, 0xe8, 0xf8, 0x78, 0x79, 0x58, 0x9b, 0x27, 0x50, 0xa3, 0xfc, 0x22, - 0x2f, 0xc5, 0x24, 0x29, 0x58, 0xbd, 0xa6, 0xe2, 0xc5, 0xfa, 0x4a, 0x7d, - 0xc5, 0x8b, 0xb8, 0x3c, 0x3e, 0xa7, 0x26, 0xf8, 0xed, 0x9c, 0xd4, 0x6f, - 0x75, 0x0a, 0x5b, 0xff, 0xfb, 0xf3, 0xfd, 0xdf, 0x98, 0x32, 0xc8, 0xa2, - 0x9d, 0x96, 0x2f, 0xc7, 0x06, 0xb3, 0xa5, 0x8a, 0x1a, 0x22, 0x31, 0x7a, - 0xfd, 0xa7, 0x17, 0x7f, 0x2b, 0x17, 0xfb, 0x59, 0xd7, 0x00, 0xde, 0x58, - 0xbf, 0xce, 0x5e, 0x90, 0x7b, 0x8b, 0x17, 0x4f, 0x4b, 0x15, 0x03, 0xcb, - 0x08, 0xce, 0xff, 0xe2, 0x98, 0x89, 0xe2, 0xf3, 0xf4, 0x12, 0xc5, 0x44, - 0x7d, 0x5e, 0x23, 0xa9, 0x4c, 0xe8, 0xd2, 0xde, 0x43, 0xaa, 0xc2, 0xd9, - 0x39, 0x2d, 0xe3, 0x5c, 0xbe, 0x83, 0x74, 0x12, 0xc5, 0x2c, 0x54, 0x9b, - 0x11, 0x92, 0xdf, 0xf1, 0x9a, 0xd6, 0x7f, 0xa8, 0x71, 0x62, 0xff, 0xff, - 0x67, 0x04, 0xdd, 0x66, 0x11, 0xbc, 0xe6, 0x17, 0xb8, 0xb1, 0x7f, 0xd0, - 0x72, 0xf7, 0xf2, 0x11, 0xcb, 0x15, 0xba, 0x36, 0xba, 0x3d, 0x3b, 0x0d, - 0xfa, 0x0e, 0x3c, 0x3a, 0xc5, 0xc6, 0xf6, 0x58, 0xbf, 0xfb, 0xef, 0xf2, - 0x16, 0xdb, 0xce, 0x8d, 0x58, 0xbf, 0xef, 0x6a, 0x73, 0xae, 0xfb, 0xef, - 0x91, 0xa2, 0xc5, 0xf1, 0xd9, 0x86, 0xb1, 0x7f, 0xde, 0x14, 0xe6, 0xdd, - 0xf7, 0xdf, 0x23, 0x45, 0x8b, 0x98, 0x23, 0x13, 0x47, 0x19, 0x46, 0xe3, - 0x7d, 0x24, 0x71, 0x34, 0x32, 0x2b, 0xa1, 0x05, 0x8a, 0x96, 0x40, 0xb6, - 0x4a, 0x77, 0x79, 0x49, 0x3a, 0x63, 0x68, 0x7d, 0x14, 0x6f, 0x3e, 0x68, - 0xbf, 0xfb, 0xed, 0xad, 0x49, 0xff, 0xd3, 0x47, 0xac, 0x5f, 0xbb, 0xbb, - 0xa7, 0xae, 0x2c, 0x56, 0x1f, 0xce, 0x92, 0x6f, 0xbd, 0xc1, 0x41, 0x62, - 0xff, 0xd3, 0xd0, 0x31, 0xdb, 0xb4, 0xe9, 0x62, 0xfc, 0x28, 0xec, 0xd0, - 0x16, 0x2f, 0xda, 0x01, 0xda, 0x0b, 0x15, 0x88, 0xda, 0x62, 0x12, 0x24, - 0xe2, 0x00, 0x65, 0x96, 0xd9, 0x62, 0xfc, 0x66, 0x44, 0xe7, 0x58, 0xbf, - 0x80, 0xd0, 0xd9, 0xb6, 0x58, 0xbe, 0x9e, 0xb0, 0x96, 0x2f, 0xd0, 0x72, - 0x03, 0xac, 0x5d, 0xd7, 0xb6, 0x3c, 0x9c, 0x22, 0xbf, 0x85, 0xb3, 0x90, - 0x8e, 0xb1, 0x52, 0x7b, 0xc4, 0x5f, 0x7c, 0x7f, 0xcf, 0x65, 0x8b, 0xff, - 0x74, 0x6b, 0x73, 0xc4, 0xfd, 0x71, 0x62, 0xa4, 0xf9, 0xd8, 0x96, 0xff, - 0xfe, 0x67, 0xf4, 0xfd, 0xfd, 0xc9, 0x28, 0x31, 0x01, 0x62, 0xff, 0x31, - 0x67, 0x8a, 0x60, 0xb1, 0x7f, 0xf8, 0x52, 0x67, 0x77, 0x9f, 0x9f, 0xe9, - 0x82, 0x58, 0xbf, 0xdd, 0x7d, 0xbd, 0xa7, 0xe9, 0x62, 0xb6, 0x55, 0x71, - 0x85, 0x4f, 0x0d, 0x7d, 0x42, 0x1f, 0xe4, 0x04, 0xb1, 0xc3, 0x10, 0xd4, - 0x6f, 0xfd, 0x83, 0xfb, 0x46, 0x4f, 0xe7, 0xa5, 0x8b, 0xfe, 0xfb, 0x71, - 0xc8, 0xa7, 0xa5, 0x8b, 0xdf, 0x63, 0xac, 0x52, 0xc7, 0x7a, 0xaf, 0x7b, - 0x52, 0xb2, 0xce, 0xf9, 0xc4, 0x2f, 0x1c, 0x5f, 0xf1, 0x1b, 0xa2, 0x7d, - 0xc4, 0x4b, 0x17, 0x84, 0xc1, 0xac, 0x5f, 0xbd, 0x38, 0x52, 0xb1, 0x4e, - 0x7f, 0xda, 0x3a, 0x21, 0xeb, 0xc1, 0x97, 0x96, 0x2e, 0x3b, 0x2c, 0x5c, - 0xfb, 0x2c, 0x53, 0x9a, 0xff, 0x8b, 0xdf, 0xfe, 0xfb, 0xc7, 0xbe, 0xd3, - 0xe9, 0x8a, 0x7a, 0x58, 0xbf, 0xd8, 0xe6, 0xb8, 0xd8, 0xeb, 0x17, 0xf6, - 0xba, 0xe6, 0x11, 0xab, 0x14, 0x62, 0x2c, 0x86, 0x9e, 0x19, 0x9d, 0xe9, - 0x03, 0xac, 0x56, 0xc9, 0xb6, 0x9a, 0x9a, 0x78, 0x69, 0x04, 0x65, 0x7f, - 0xe9, 0x7e, 0x4f, 0xb9, 0x3f, 0x95, 0x8b, 0xfe, 0x33, 0x93, 0xa6, 0x83, - 0xfd, 0x62, 0xff, 0xb7, 0x16, 0x3f, 0x5e, 0x93, 0xac, 0x59, 0xf8, 0x7e, - 0xa2, 0x3a, 0xbf, 0xec, 0xd8, 0xa4, 0xdc, 0xeb, 0xcb, 0x14, 0x6a, 0x62, - 0x87, 0x85, 0x90, 0x64, 0xf7, 0xed, 0xf1, 0xf8, 0x75, 0x8b, 0xff, 0xb9, - 0x25, 0xe0, 0xe2, 0xfb, 0xfb, 0x8b, 0x17, 0xd9, 0xa9, 0xec, 0xb1, 0x5d, - 0x1f, 0x5f, 0x91, 0xef, 0xe8, 0x4e, 0xd3, 0xc1, 0x2c, 0x5f, 0xff, 0x8f, - 0x30, 0xcd, 0xc6, 0xe5, 0x9a, 0xde, 0x71, 0x62, 0xdb, 0xc4, 0x88, 0x40, - 0x17, 0xd7, 0x48, 0xd2, 0x28, 0x53, 0xd1, 0xd3, 0x8e, 0x68, 0xd9, 0xaa, - 0x57, 0x70, 0x72, 0x1b, 0xcf, 0x1c, 0xd3, 0x46, 0xb4, 0x28, 0xf1, 0xaf, - 0x77, 0x4f, 0x4b, 0x17, 0xf8, 0xb0, 0x1c, 0x0d, 0xbc, 0xb1, 0x7b, 0xcc, - 0x35, 0x8b, 0xb0, 0xeb, 0x17, 0xda, 0xda, 0x60, 0xb1, 0x52, 0x6e, 0xf0, - 0x5e, 0xfe, 0xf1, 0x49, 0xf9, 0xde, 0xac, 0x5c, 0xf8, 0xb1, 0x7e, 0x91, - 0xbc, 0xf7, 0x2c, 0x5f, 0xb3, 0x5a, 0x68, 0x2c, 0x5f, 0xb5, 0xa7, 0x8b, - 0x8b, 0x15, 0x03, 0xd2, 0xc2, 0x8a, 0x8d, 0x91, 0xcd, 0x03, 0x3f, 0x8b, - 0x79, 0xf2, 0xed, 0xa5, 0x62, 0xff, 0x9f, 0x0d, 0x7d, 0x78, 0xa5, 0x62, - 0x8e, 0x7a, 0x1c, 0x18, 0xbf, 0xd8, 0x53, 0xd7, 0x1b, 0x75, 0x8a, 0x35, - 0x1d, 0x1b, 0xc2, 0x48, 0x22, 0x2b, 0xdc, 0x86, 0xeb, 0x17, 0xd3, 0x1f, - 0xa9, 0x58, 0xac, 0x3c, 0x4e, 0x0f, 0xde, 0x01, 0xfc, 0xb1, 0x50, 0x56, - 0xaa, 0xe4, 0x31, 0x1a, 0x1d, 0x61, 0xa3, 0xed, 0x03, 0xe1, 0x10, 0xde, - 0xde, 0x0c, 0xb1, 0x7f, 0xc7, 0x9d, 0xdf, 0xda, 0x11, 0xd6, 0x2f, 0xda, - 0x70, 0x06, 0x75, 0x8a, 0x31, 0x10, 0x78, 0x3d, 0xa3, 0xbb, 0xf7, 0xdb, - 0x61, 0xf6, 0x58, 0xbf, 0xb0, 0x7f, 0x6c, 0xd2, 0xc5, 0xfd, 0xa9, 0x78, - 0x37, 0x16, 0x2d, 0xdc, 0xb1, 0x76, 0x9f, 0x63, 0xc2, 0x88, 0xb6, 0xff, - 0xcd, 0x98, 0x46, 0x87, 0xe1, 0x0d, 0x62, 0xff, 0x33, 0x8d, 0xf3, 0xaf, - 0x2c, 0x5e, 0x89, 0x86, 0xb1, 0x7b, 0xb9, 0xfb, 0x2c, 0x5b, 0x6d, 0x23, - 0x8b, 0xe5, 0xfe, 0x40, 0x11, 0x9f, 0x70, 0xf5, 0xe7, 0xeb, 0x8b, 0x17, - 0xff, 0x72, 0x76, 0xcd, 0x44, 0x52, 0x0e, 0x2c, 0x5f, 0xfd, 0xdf, 0x94, - 0x9f, 0x58, 0xff, 0x91, 0xac, 0x5f, 0xe7, 0xfe, 0x6b, 0x59, 0xd2, 0xc5, - 0xfa, 0x22, 0x9d, 0x41, 0x62, 0xd3, 0x03, 0xdd, 0xc3, 0x4b, 0xff, 0x88, - 0x5b, 0xb9, 0xbc, 0xfc, 0x97, 0x96, 0x2f, 0x61, 0x6e, 0xb1, 0x73, 0x85, - 0x87, 0xc6, 0x1a, 0x35, 0x41, 0x5e, 0x0e, 0xe6, 0x1f, 0x2c, 0x68, 0xd4, - 0x40, 0xa9, 0xe1, 0xe1, 0x23, 0x05, 0x0a, 0x5e, 0xe8, 0x44, 0xdf, 0x69, - 0xa1, 0x12, 0xc5, 0xff, 0xba, 0xf6, 0x14, 0x83, 0x08, 0x0b, 0x17, 0xdc, - 0x90, 0x77, 0x8b, 0x15, 0x87, 0xcd, 0xc3, 0xea, 0x35, 0x15, 0x61, 0x42, - 0x2a, 0xfb, 0xf8, 0x06, 0x58, 0xa9, 0x4e, 0x2d, 0xa3, 0x3f, 0xe1, 0x55, - 0xfb, 0x82, 0x79, 0x89, 0x62, 0xfd, 0xc7, 0x2f, 0x3a, 0xc5, 0xfb, 0xcf, - 0xbb, 0x41, 0x62, 0xe3, 0x78, 0xb1, 0x6d, 0x4a, 0x24, 0xa2, 0x29, 0x62, - 0x7e, 0x14, 0xdf, 0xfa, 0x0e, 0x70, 0xb0, 0x87, 0xf9, 0x58, 0xbf, 0xf8, - 0xa7, 0xd9, 0x9a, 0xd6, 0x4e, 0xeb, 0x17, 0xf8, 0xdc, 0xd0, 0x0e, 0xfc, - 0x58, 0xae, 0x91, 0x6f, 0xf3, 0xf2, 0x43, 0xbd, 0xb0, 0xa0, 0xb1, 0x7f, - 0x3f, 0x40, 0xd3, 0x0d, 0x62, 0xb0, 0xf3, 0xbe, 0x3f, 0x68, 0x96, 0x2f, - 0xba, 0x06, 0xa5, 0x22, 0xe0, 0x82, 0x48, 0xa9, 0x37, 0xc1, 0x12, 0x59, - 0xd2, 0x23, 0x0d, 0x0d, 0x7d, 0x12, 0xc4, 0xe5, 0x7f, 0xe1, 0x8b, 0xcf, - 0xf7, 0x37, 0xee, 0xb1, 0x7f, 0xff, 0xcf, 0x1f, 0x23, 0x31, 0xa7, 0xad, - 0xff, 0x3d, 0x71, 0xa7, 0xb9, 0x62, 0xff, 0xff, 0x67, 0x74, 0xc4, 0xe7, - 0x98, 0x8c, 0x2e, 0xa1, 0xf1, 0x01, 0x62, 0xe2, 0x8c, 0x94, 0x6b, 0xe3, - 0x7d, 0xe2, 0x68, 0x2c, 0x5c, 0xd1, 0x2c, 0x56, 0xe6, 0xd0, 0xe3, 0x97, - 0x3e, 0xeb, 0x17, 0xf8, 0x02, 0xf1, 0x4f, 0xb8, 0xb1, 0x6e, 0xe5, 0x8b, - 0xe6, 0x30, 0x33, 0xac, 0x53, 0x1f, 0x77, 0x63, 0x40, 0x85, 0x6f, 0xe1, - 0xbf, 0x6f, 0xe7, 0x72, 0xc5, 0xa2, 0x58, 0xb9, 0xfb, 0x2c, 0x56, 0x1e, - 0xfb, 0x99, 0xf6, 0x13, 0xa5, 0x8b, 0xb6, 0x25, 0x8b, 0xdc, 0xcd, 0x2c, - 0x5e, 0xdd, 0xf4, 0xb1, 0x76, 0x7d, 0x62, 0xba, 0x36, 0xb1, 0xc3, 0xd7, - 0x6a, 0x06, 0x2e, 0x2a, 0xc2, 0x16, 0xf8, 0x45, 0xd4, 0x62, 0xee, 0xc7, - 0xa2, 0x2f, 0xc2, 0x19, 0xa1, 0x20, 0x02, 0xfe, 0xfc, 0x33, 0x83, 0x1e, - 0x52, 0xbd, 0xcf, 0xb2, 0xc5, 0x4a, 0xed, 0xeb, 0x4e, 0x69, 0xfa, 0x19, - 0xb7, 0xde, 0xf3, 0x1d, 0x62, 0xfc, 0x50, 0xdc, 0x5b, 0x2c, 0x5e, 0x9d, - 0x44, 0xb1, 0x4c, 0x79, 0x22, 0x2b, 0xbf, 0xfd, 0xaf, 0x16, 0x6c, 0xc5, - 0xa1, 0x48, 0x16, 0x2f, 0xff, 0xef, 0x4e, 0xe4, 0x23, 0xe4, 0x3f, 0x84, - 0x14, 0xe9, 0x62, 0xb4, 0x8a, 0x62, 0x4a, 0xbf, 0x1c, 0x9b, 0xdc, 0x58, - 0xa6, 0x3c, 0xa0, 0xc8, 0xa8, 0xc7, 0xc2, 0xd6, 0x8d, 0x21, 0x15, 0x33, - 0xb7, 0xfb, 0x43, 0x5a, 0x04, 0x63, 0x84, 0xf6, 0x53, 0xa7, 0xba, 0x8f, - 0x15, 0xe5, 0x7c, 0x6a, 0x91, 0x3a, 0x78, 0xf3, 0xff, 0x49, 0xe7, 0x69, - 0x76, 0xa5, 0x3c, 0x73, 0xe8, 0x63, 0x8a, 0x7a, 0xdb, 0xb1, 0xf0, 0x4d, - 0x81, 0xc6, 0x23, 0x77, 0xb6, 0x58, 0xbf, 0x9b, 0x79, 0x8e, 0xce, 0x96, - 0x2a, 0x07, 0x97, 0xf1, 0x9b, 0xf9, 0xff, 0x3b, 0x93, 0x2c, 0x5c, 0xe1, - 0x2c, 0x54, 0x0f, 0x17, 0xc5, 0xb6, 0x35, 0x62, 0xfd, 0x1c, 0x2f, 0xbe, - 0x96, 0x2f, 0xe9, 0x0b, 0x42, 0x90, 0x2c, 0x56, 0xc7, 0xb7, 0xe2, 0xcb, - 0xfc, 0x50, 0xe0, 0xfe, 0xe1, 0x2c, 0x5e, 0xd9, 0x8e, 0xb1, 0x7d, 0x83, - 0x63, 0xac, 0x5d, 0xd1, 0x2c, 0x5f, 0xba, 0x87, 0xc3, 0xe2, 0xc5, 0x61, - 0xe2, 0x10, 0xc5, 0xfb, 0x06, 0x42, 0x3a, 0xc5, 0x69, 0x15, 0xcc, 0xcc, - 0x44, 0x17, 0x38, 0xd6, 0x2f, 0xc5, 0x3f, 0x6e, 0x2c, 0x5a, 0x25, 0x8b, - 0x8f, 0x2b, 0x17, 0xbc, 0xe1, 0x2e, 0x50, 0x82, 0xe6, 0x0d, 0x52, 0x03, - 0x9d, 0x1a, 0xba, 0x31, 0x11, 0x6e, 0x26, 0x24, 0x2a, 0x82, 0x64, 0xff, - 0x2e, 0xef, 0xc5, 0xfd, 0x0b, 0x2a, 0x31, 0x58, 0x0c, 0xb7, 0x39, 0x1b, - 0x1a, 0x8a, 0x3f, 0x3b, 0xd3, 0xb4, 0xac, 0x5f, 0xfd, 0x30, 0xcf, 0xb7, - 0x40, 0xce, 0xbc, 0xb1, 0x70, 0x30, 0x8f, 0x8f, 0x83, 0xb7, 0xf0, 0x9b, - 0xbb, 0xf9, 0xb2, 0xc5, 0xfe, 0x17, 0xdf, 0x59, 0xd7, 0x96, 0x2f, 0xef, - 0x63, 0xc7, 0x7e, 0x56, 0x2d, 0xc3, 0x11, 0x2f, 0x1c, 0x64, 0x19, 0xad, - 0xda, 0xef, 0xd6, 0x2b, 0x49, 0x8d, 0x82, 0x18, 0x64, 0x77, 0x7f, 0x61, - 0x03, 0x30, 0x6b, 0x17, 0xf3, 0x83, 0x0f, 0x3b, 0xac, 0x5c, 0xc1, 0x2c, - 0x5e, 0x36, 0x11, 0xeb, 0x17, 0xdd, 0x71, 0xd9, 0x62, 0xcc, 0x61, 0xe2, - 0xb9, 0x15, 0xff, 0xef, 0x14, 0xe7, 0x67, 0xf4, 0xe1, 0x41, 0x62, 0x8d, - 0x3f, 0x07, 0x27, 0xbf, 0xfb, 0x3b, 0x6a, 0x5a, 0x05, 0x3d, 0x41, 0x62, - 0xff, 0xff, 0xd0, 0xdf, 0xef, 0xad, 0x8f, 0x3b, 0xfe, 0x5c, 0x73, 0xf9, - 0x82, 0xc5, 0xef, 0xc9, 0xab, 0x15, 0xd2, 0x23, 0x7b, 0x37, 0xdf, 0xc0, - 0xd6, 0x9f, 0xa0, 0x2c, 0x5f, 0xfd, 0x09, 0x20, 0x66, 0x80, 0x77, 0xe2, - 0xc5, 0xfe, 0xcd, 0xe7, 0x62, 0x9d, 0xd6, 0x2f, 0xdb, 0x94, 0xf5, 0x05, - 0x8b, 0x01, 0x62, 0xd1, 0xe6, 0x1f, 0x8e, 0x1a, 0xb9, 0x55, 0xe9, 0x3c, - 0xac, 0x5f, 0xb3, 0xdc, 0x6e, 0x96, 0x2f, 0xff, 0x73, 0x3e, 0xfc, 0x16, - 0xc6, 0x45, 0x24, 0xb1, 0x74, 0x89, 0x62, 0xfc, 0x22, 0x00, 0x70, 0x58, - 0xbf, 0xdf, 0x90, 0x1d, 0xa0, 0x66, 0x1e, 0x0f, 0x05, 0xe8, 0x69, 0x80, - 0xf0, 0xa4, 0x38, 0x47, 0x5f, 0xff, 0x8a, 0x61, 0x9f, 0x6d, 0x4f, 0x9c, - 0x13, 0x05, 0x8b, 0xfd, 0x20, 0x8a, 0x0e, 0x2e, 0xfd, 0x62, 0xec, 0xe1, - 0x88, 0xc4, 0x19, 0xb8, 0x6a, 0x74, 0x35, 0x43, 0xc5, 0x1f, 0x0d, 0x0d, - 0x75, 0x30, 0xd8, 0x66, 0xfc, 0x89, 0xa1, 0xa6, 0x44, 0xde, 0x30, 0x14, - 0x2d, 0x7b, 0x4a, 0x55, 0xbf, 0xfb, 0x4f, 0xd0, 0x7e, 0xc7, 0x83, 0x71, - 0x62, 0xff, 0x85, 0xb4, 0x99, 0x3e, 0x91, 0xac, 0x56, 0x91, 0x03, 0xf4, - 0x6b, 0xee, 0xee, 0xe9, 0x8f, 0x58, 0xbf, 0xff, 0x4f, 0xbf, 0x83, 0xf6, - 0x7c, 0xb3, 0xdf, 0x75, 0x8b, 0x49, 0x88, 0x80, 0xd1, 0x65, 0xf3, 0x40, - 0x07, 0x58, 0xbf, 0xff, 0xa4, 0x3d, 0x39, 0xe4, 0xde, 0x7d, 0xfc, 0x52, - 0x75, 0x8a, 0x39, 0xff, 0x80, 0x8e, 0xda, 0xd2, 0x32, 0x81, 0x0a, 0x8b, - 0xfe, 0x0f, 0xce, 0x42, 0x86, 0x71, 0x62, 0xf3, 0x6b, 0x65, 0x8b, 0x82, - 0x09, 0x62, 0xfe, 0x7c, 0xec, 0x1c, 0x23, 0x37, 0x37, 0x01, 0x0f, 0x56, - 0xe8, 0xbd, 0xd3, 0x95, 0xf1, 0x37, 0x40, 0x58, 0xbf, 0xb8, 0x20, 0x1e, - 0x60, 0xb1, 0x7f, 0x41, 0xdb, 0xb7, 0xdd, 0x62, 0xf4, 0xff, 0x8b, 0x17, - 0x39, 0xa6, 0x1f, 0xde, 0x17, 0x80, 0xbe, 0xf1, 0xa1, 0x01, 0x62, 0xff, - 0x73, 0x3c, 0xc7, 0xc2, 0x58, 0xa1, 0xab, 0xa7, 0x78, 0xdb, 0x75, 0x0e, - 0xb3, 0x92, 0x7e, 0x13, 0xc4, 0x77, 0xe2, 0x0b, 0xff, 0x73, 0x0b, 0x3f, - 0x9b, 0xe1, 0x2c, 0x5f, 0xfe, 0x7e, 0x61, 0x18, 0x1e, 0xa2, 0xcc, 0x09, - 0x62, 0xfb, 0x4f, 0x27, 0x58, 0xbf, 0xdc, 0xf7, 0xf0, 0xf9, 0x05, 0x8b, - 0xff, 0xc2, 0x91, 0xe7, 0x80, 0x19, 0x43, 0xf8, 0xb1, 0x74, 0xf1, 0x62, - 0xd2, 0xb1, 0x7f, 0xe8, 0xd2, 0x79, 0xcc, 0xf7, 0xda, 0x0b, 0x17, 0xff, - 0xde, 0xe4, 0xfb, 0xa9, 0xff, 0xe7, 0xb4, 0xf1, 0x62, 0xbb, 0xd4, 0x4b, - 0xe2, 0x25, 0xec, 0x04, 0x70, 0xd1, 0x9f, 0x90, 0xa8, 0xa8, 0x27, 0x40, - 0x33, 0x40, 0x25, 0x94, 0x39, 0xaf, 0xff, 0xed, 0x64, 0x23, 0xb3, 0x7f, - 0xb8, 0xca, 0x42, 0xc2, 0x58, 0xbe, 0x09, 0x83, 0x3a, 0xc5, 0xe6, 0xea, - 0x56, 0x2f, 0xd8, 0x6f, 0xda, 0x1f, 0x3c, 0x20, 0xc9, 0x6a, 0x0a, 0xdb, - 0x86, 0x7a, 0x6a, 0x6b, 0xc7, 0x85, 0xa4, 0x22, 0x85, 0x05, 0x4a, 0xe2, - 0x2e, 0x4b, 0xe2, 0xbf, 0xdd, 0x82, 0xc2, 0x1f, 0xe5, 0x62, 0xfc, 0x37, - 0xed, 0x23, 0x58, 0xbe, 0x7e, 0xd2, 0x35, 0x8b, 0xb0, 0x06, 0x1e, 0x70, - 0xca, 0xaf, 0xe7, 0x1e, 0xb0, 0xf8, 0xb1, 0x7f, 0xde, 0xe0, 0x7a, 0x9f, - 0x4c, 0x16, 0x2f, 0xb7, 0x66, 0xdd, 0x52, 0x0c, 0x17, 0xf9, 0xe7, 0x50, - 0x14, 0xe2, 0xc5, 0x18, 0x89, 0xed, 0x1d, 0x91, 0x8d, 0xf1, 0xb2, 0x50, - 0x58, 0xbe, 0x39, 0xda, 0x06, 0x26, 0x3d, 0x90, 0xcb, 0xf1, 0x85, 0xff, - 0x8b, 0x36, 0xd3, 0x84, 0x79, 0xe2, 0xc5, 0xff, 0xfc, 0xe3, 0xee, 0x9c, - 0xd6, 0xd2, 0x32, 0x63, 0x4d, 0x95, 0x8a, 0x35, 0x13, 0xfd, 0x90, 0x2f, - 0xf9, 0xc0, 0xc5, 0xe6, 0x6f, 0xac, 0x5f, 0x6e, 0xcd, 0xba, 0xe5, 0x11, - 0x2f, 0xff, 0xf6, 0x6f, 0xf9, 0xea, 0x11, 0xd9, 0xfd, 0xdf, 0x09, 0x8d, - 0x58, 0xad, 0x22, 0x5c, 0x8c, 0x6e, 0xdc, 0x0b, 0x17, 0x0f, 0xa5, 0x8b, - 0x9b, 0x90, 0x4c, 0x8b, 0x21, 0x9c, 0x72, 0x22, 0x19, 0xa9, 0x57, 0x99, - 0x91, 0xa6, 0x34, 0x3b, 0x05, 0x1a, 0x45, 0x2c, 0x52, 0xc5, 0xb6, 0x11, - 0x71, 0x1c, 0x19, 0x7f, 0xb9, 0xe6, 0xea, 0x39, 0xcd, 0x58, 0xbf, 0x64, - 0x52, 0x43, 0x58, 0xa9, 0x3e, 0x1d, 0x1c, 0xd4, 0xb6, 0x8b, 0xf0, 0x35, - 0xc2, 0xc7, 0x9d, 0x7a, 0xfd, 0x23, 0xe1, 0x8a, 0xca, 0x71, 0x43, 0xcc, - 0xa2, 0x84, 0x5d, 0xf8, 0xa4, 0x1d, 0x01, 0x62, 0xfd, 0x90, 0x9d, 0x01, - 0x62, 0xff, 0xed, 0xbf, 0x2f, 0xee, 0x4e, 0xd9, 0xc5, 0x8b, 0xa4, 0x35, - 0x8b, 0xf3, 0x6c, 0x53, 0x04, 0x8a, 0x88, 0xf0, 0x3e, 0x31, 0x7f, 0xe9, - 0xd0, 0x39, 0x91, 0xbc, 0x6f, 0xdf, 0x3b, 0xc5, 0x8b, 0xfa, 0x7c, 0x52, - 0x0e, 0x2c, 0x5f, 0xe6, 0x7f, 0x4e, 0xa4, 0x0b, 0x17, 0xef, 0x61, 0xdf, - 0xcb, 0x17, 0xfe, 0xf1, 0x48, 0x06, 0x4f, 0xd7, 0x96, 0x2d, 0xe3, 0x11, - 0x8d, 0xf2, 0xd6, 0x32, 0x0c, 0xa2, 0xf9, 0x88, 0x3d, 0x96, 0x2f, 0xe6, - 0x37, 0x06, 0xe4, 0xb1, 0x5f, 0x3d, 0x12, 0x24, 0xa8, 0x2a, 0xcb, 0x34, - 0xa7, 0x45, 0x07, 0x84, 0x37, 0xc8, 0xca, 0x31, 0xb0, 0xa1, 0x2b, 0x7f, - 0xe7, 0xde, 0x78, 0xda, 0xd3, 0x84, 0xb1, 0x7c, 0x43, 0xfc, 0xac, 0x5f, - 0xf6, 0xd0, 0x3c, 0xfd, 0x9c, 0xd5, 0x8b, 0xff, 0x67, 0x27, 0xed, 0xe0, - 0xe4, 0x6b, 0x17, 0xfc, 0xcc, 0x17, 0xd8, 0xef, 0xc5, 0x8b, 0xff, 0x79, - 0xcb, 0x6c, 0xeb, 0xdf, 0x65, 0x8b, 0xff, 0x9f, 0x46, 0xef, 0xf7, 0xf9, - 0x0b, 0x65, 0x8a, 0x94, 0xc0, 0x06, 0x7f, 0x87, 0x20, 0x40, 0xbf, 0xff, - 0xa4, 0x27, 0x98, 0x9f, 0x0c, 0xcf, 0xbe, 0xbe, 0xcb, 0x17, 0xfd, 0xac, - 0xe7, 0x38, 0xc5, 0x05, 0x8b, 0xa1, 0xb2, 0xc5, 0xb7, 0x31, 0x15, 0xba, - 0x5b, 0x39, 0xcd, 0xff, 0xfc, 0x3d, 0x13, 0x04, 0x63, 0xea, 0x4b, 0x3f, - 0x9b, 0xac, 0x53, 0x2a, 0xda, 0x22, 0x2e, 0x46, 0x76, 0x28, 0x74, 0x84, - 0x71, 0x7c, 0x2c, 0xe3, 0xac, 0x5d, 0xc1, 0x2c, 0x5f, 0xd0, 0xfb, 0x31, - 0x4a, 0xc5, 0xa7, 0x73, 0xc4, 0xe8, 0x62, 0xfc, 0x2f, 0x68, 0x50, 0x58, - 0xbf, 0xe9, 0xfb, 0xe1, 0xa6, 0xcc, 0x16, 0x2d, 0x84, 0x7c, 0x9e, 0x2a, - 0xbe, 0xdd, 0x9b, 0x75, 0x48, 0x14, 0x5b, 0x4b, 0x15, 0xa3, 0xc3, 0xf1, - 0x8d, 0xef, 0xc9, 0xd6, 0x2f, 0x99, 0xa1, 0xc5, 0x8b, 0xff, 0x4e, 0xcd, - 0xed, 0x64, 0x23, 0xb1, 0x62, 0xe7, 0xd2, 0xc5, 0xfe, 0xf4, 0x9f, 0xdc, - 0x60, 0x2c, 0x56, 0xc7, 0x97, 0x82, 0xf4, 0x34, 0xde, 0x71, 0xa5, 0xc8, - 0xb4, 0x3a, 0x44, 0x5c, 0x84, 0x6d, 0xfb, 0xf2, 0x71, 0x74, 0xb1, 0x7b, - 0x93, 0xd2, 0xc5, 0xf7, 0xb9, 0x20, 0x48, 0xbc, 0xda, 0xd9, 0x22, 0xf8, - 0x44, 0xc6, 0xa4, 0x5f, 0xe7, 0xdb, 0x3d, 0xc9, 0x02, 0x45, 0x24, 0x5f, - 0xd9, 0xbc, 0xfe, 0x4e, 0x91, 0x70, 0x41, 0x24, 0x5f, 0xc5, 0x25, 0xb3, - 0xe9, 0x22, 0xb1, 0x31, 0x9d, 0xc8, 0xce, 0x3d, 0xf2, 0x30, 0x1a, 0x10, - 0x60, 0x45, 0xc1, 0x8d, 0x52, 0xc5, 0xb4, 0x91, 0x18, 0x7f, 0xf2, 0xe7, - 0x7a, 0x0f, 0xf5, 0x8a, 0x58, 0xae, 0x95, 0x08, 0xbc, 0x76, 0xcc, 0x64, - 0x18, 0xed, 0x41, 0x56, 0xd4, 0x4b, 0x5f, 0x94, 0x77, 0x7f, 0xfc, 0x17, - 0x0b, 0x3a, 0xf3, 0x16, 0xd9, 0xd7, 0x96, 0x2f, 0xee, 0xc6, 0x34, 0x21, - 0x8b, 0x15, 0x28, 0x84, 0xc5, 0x3b, 0xff, 0xf1, 0x67, 0x84, 0x03, 0xb4, - 0x03, 0x3c, 0x73, 0x9a, 0xb1, 0x73, 0x69, 0x62, 0xfd, 0xb6, 0x0e, 0x4e, - 0xb1, 0x7b, 0x79, 0x38, 0x47, 0x80, 0x18, 0xbd, 0xa5, 0x62, 0xcf, 0xf3, - 0xc7, 0xf1, 0xb5, 0x0d, 0x30, 0x9f, 0x43, 0x8a, 0xa5, 0x96, 0x7d, 0x8e, - 0xef, 0x2c, 0x6b, 0x4a, 0xdf, 0x66, 0x69, 0xce, 0x02, 0x85, 0xf0, 0xa3, - 0x2a, 0xbf, 0x66, 0x9e, 0x76, 0x58, 0xbd, 0x84, 0x05, 0x8a, 0xc3, 0xc4, - 0xe1, 0x45, 0xff, 0xfc, 0xd0, 0xf1, 0x4e, 0x75, 0x9b, 0xcf, 0xbe, 0xfd, - 0x96, 0x2e, 0x61, 0xac, 0x51, 0xa7, 0xe8, 0x75, 0xdb, 0x1d, 0x62, 0xe1, - 0x1a, 0xb1, 0x44, 0x6a, 0xf8, 0x25, 0x7f, 0xff, 0xc5, 0x9e, 0xf4, 0xf5, - 0x03, 0x3f, 0x27, 0x17, 0x5c, 0xfc, 0xac, 0x5f, 0xdf, 0x73, 0x4d, 0x9d, - 0x96, 0x2f, 0xec, 0x2e, 0x39, 0x62, 0xc5, 0xfc, 0x7c, 0x1f, 0xf3, 0x65, - 0x8b, 0xff, 0xc4, 0xc6, 0xf0, 0x1e, 0xf7, 0x5e, 0xcd, 0xd6, 0x2f, 0xde, - 0x33, 0xda, 0x95, 0x8a, 0x94, 0x53, 0x9a, 0x5f, 0xd2, 0x75, 0xef, 0x88, - 0xeb, 0x15, 0xb2, 0xab, 0xf3, 0x61, 0x2b, 0xd2, 0x74, 0x79, 0x06, 0x9a, - 0xbe, 0x62, 0x50, 0xd2, 0xee, 0x31, 0xbf, 0xfa, 0x28, 0x38, 0x3f, 0x9d, - 0xb1, 0x8e, 0xb1, 0x7f, 0x16, 0x73, 0x53, 0xc5, 0x8b, 0xc2, 0x86, 0x2c, - 0x51, 0x88, 0x91, 0x64, 0x70, 0x16, 0xdf, 0xb0, 0x9b, 0xdc, 0x58, 0xbe, - 0xfc, 0x94, 0x16, 0x2f, 0xd9, 0xf2, 0x68, 0x96, 0x28, 0x67, 0xe3, 0x84, - 0xe4, 0x45, 0x50, 0x46, 0x77, 0x21, 0x43, 0x7b, 0x42, 0xfa, 0xc5, 0xd9, - 0xf5, 0x8b, 0xe8, 0xbe, 0x2d, 0x96, 0x2a, 0x23, 0x7a, 0x18, 0xbd, 0xe2, - 0x93, 0xac, 0x56, 0x91, 0x34, 0xcb, 0x62, 0x23, 0xbd, 0xf9, 0x89, 0x62, - 0xfa, 0x13, 0x13, 0xac, 0x50, 0xcf, 0x07, 0xa1, 0xeb, 0xfb, 0xb3, 0xe9, - 0x82, 0xf2, 0xc5, 0xfb, 0xef, 0xe6, 0xfa, 0xc5, 0xfc, 0xf3, 0xac, 0xeb, - 0xcb, 0x17, 0xf6, 0x9c, 0xf9, 0xd7, 0x96, 0x2e, 0x61, 0xac, 0x54, 0x9e, - 0x36, 0xe5, 0xf7, 0xf3, 0x1b, 0x9b, 0x31, 0xd6, 0x2f, 0xf3, 0x93, 0x7a, - 0x27, 0x09, 0x62, 0xfc, 0xf1, 0x41, 0xc6, 0xb1, 0x52, 0x7b, 0xb8, 0x69, - 0x7f, 0xec, 0xc0, 0xb9, 0xd4, 0x94, 0xf1, 0x62, 0xda, 0x31, 0x53, 0x6c, - 0xb8, 0x61, 0x1e, 0xe6, 0x27, 0x28, 0xfb, 0xa1, 0x11, 0x72, 0x11, 0x9e, - 0x20, 0xa9, 0x57, 0x72, 0xf2, 0xcb, 0xef, 0x71, 0xa3, 0xd6, 0x2f, 0xcc, - 0x3f, 0xc9, 0x2c, 0x56, 0x1e, 0x39, 0xc8, 0x2f, 0xef, 0x13, 0x1e, 0x2e, - 0xfd, 0x62, 0xec, 0xfa, 0xc5, 0xff, 0xf6, 0xa7, 0x3a, 0x2c, 0xec, 0xd0, - 0xe3, 0x8d, 0x62, 0xb4, 0x7d, 0x1e, 0x17, 0xbe, 0xf0, 0xbd, 0xc5, 0x8b, - 0xd0, 0xcf, 0x2c, 0x5f, 0x76, 0x78, 0x71, 0x62, 0xba, 0x3c, 0x27, 0x1d, - 0xac, 0x44, 0x46, 0x99, 0xaf, 0xf3, 0xb7, 0xb3, 0x79, 0x02, 0xc5, 0xe8, - 0x3f, 0x65, 0x8b, 0xff, 0xce, 0x0e, 0x61, 0xac, 0x7d, 0x4e, 0x12, 0xc5, - 0x61, 0xf4, 0x30, 0xfd, 0xff, 0xc7, 0x6e, 0x8c, 0x14, 0x53, 0xc7, 0x8f, - 0x58, 0xbf, 0xee, 0xbc, 0x13, 0x6b, 0x4c, 0x6a, 0xc5, 0xe9, 0xf7, 0x16, - 0x2a, 0x4f, 0x68, 0x8f, 0x6b, 0x11, 0x8b, 0xe8, 0x52, 0xde, 0xdc, 0x30, - 0x2c, 0x5f, 0x8e, 0x2c, 0x71, 0xac, 0x5f, 0xed, 0x6d, 0x3d, 0x99, 0x8e, - 0xb1, 0x7f, 0xfb, 0x3b, 0x98, 0x8d, 0x1e, 0x3e, 0xb5, 0x2b, 0x17, 0x7b, - 0x98, 0x88, 0x2f, 0x9b, 0x54, 0xa3, 0xe0, 0xd2, 0x06, 0x85, 0x55, 0xf7, - 0xe7, 0xae, 0x2c, 0x5f, 0x3e, 0x75, 0xe5, 0x8a, 0xc3, 0xc7, 0xf1, 0x25, - 0xff, 0xff, 0x7d, 0xf5, 0x83, 0x63, 0xe1, 0x78, 0xa4, 0x2c, 0xf7, 0x16, - 0x2d, 0x2b, 0x17, 0xd3, 0xd8, 0x73, 0xb9, 0xfb, 0x01, 0x96, 0xfe, 0x6f, - 0x73, 0x0a, 0x0b, 0x17, 0xfd, 0xf7, 0x60, 0x6a, 0x5a, 0x0b, 0x17, 0x34, - 0x3e, 0x7c, 0xbe, 0x2d, 0xaf, 0xa3, 0x37, 0xd0, 0xa0, 0xbf, 0xff, 0xdd, - 0xfc, 0x96, 0xdc, 0xfb, 0x3f, 0x9c, 0x79, 0xcc, 0xd2, 0xc5, 0x2c, 0x5a, - 0x0b, 0x15, 0x02, 0xfb, 0xe1, 0x95, 0x05, 0xed, 0x2d, 0xc8, 0x7a, 0x84, - 0xe6, 0xa1, 0x54, 0x72, 0x2f, 0xc2, 0x6c, 0x10, 0xe5, 0x28, 0xc7, 0xf8, - 0xf7, 0xe8, 0xd9, 0x04, 0x50, 0x14, 0x20, 0xef, 0xe1, 0xfd, 0x83, 0xcd, - 0x96, 0x2f, 0xfb, 0xda, 0xcd, 0xbd, 0x39, 0xc5, 0x8b, 0xf9, 0xbf, 0x17, - 0x3e, 0x35, 0x8a, 0x01, 0xf5, 0x04, 0x75, 0x46, 0x22, 0xf7, 0x50, 0x9a, - 0xbf, 0x07, 0x0f, 0xc9, 0xab, 0x17, 0xdc, 0xfe, 0x71, 0x62, 0xfc, 0x44, - 0x2d, 0x1a, 0xb1, 0x71, 0x6c, 0x61, 0xfb, 0xe1, 0x58, 0x64, 0x75, 0x88, - 0xdc, 0x78, 0x50, 0x52, 0xc5, 0xda, 0xec, 0xb1, 0x58, 0x69, 0x98, 0x32, - 0xff, 0xfa, 0x40, 0x1e, 0x7f, 0xcf, 0xd0, 0x59, 0xd7, 0x96, 0x2f, 0xff, - 0xcc, 0x68, 0x7d, 0x02, 0x4b, 0x76, 0xf3, 0x74, 0x05, 0x8b, 0xdb, 0xe1, - 0xd6, 0x2f, 0xd3, 0xd1, 0x49, 0xab, 0x17, 0xff, 0xed, 0xe4, 0x5b, 0xfe, - 0x75, 0xf6, 0x1f, 0xdb, 0x4b, 0x14, 0x34, 0x40, 0xe1, 0x4d, 0xfc, 0x36, - 0xf7, 0x05, 0x05, 0x8a, 0x94, 0x78, 0x64, 0x27, 0xc3, 0x22, 0xb4, 0x09, - 0x37, 0xe8, 0xe8, 0xd2, 0xad, 0x1c, 0xb1, 0x7f, 0x36, 0xa7, 0xcf, 0xd9, - 0x62, 0xff, 0xee, 0x4c, 0x6d, 0x90, 0x7f, 0x70, 0x51, 0xeb, 0x15, 0xd2, - 0x30, 0xf4, 0x64, 0x42, 0xbc, 0x2f, 0xbf, 0xff, 0xf6, 0xb5, 0x3d, 0x43, - 0xae, 0x3e, 0xb7, 0xfe, 0x07, 0xa7, 0x91, 0xac, 0x5f, 0x88, 0xd0, 0xf3, - 0xa5, 0x8b, 0xfe, 0x6d, 0x67, 0x50, 0x90, 0x4a, 0xc5, 0x4a, 0x62, 0x58, - 0x7a, 0xee, 0x22, 0x2b, 0xbf, 0xee, 0xa1, 0xec, 0xe7, 0xb2, 0x3d, 0x62, - 0xff, 0xfd, 0xb9, 0xad, 0xcc, 0xd4, 0x1f, 0xec, 0x5d, 0x41, 0x62, 0xff, - 0xa7, 0xdc, 0xcf, 0x3f, 0x41, 0x2c, 0x5e, 0x16, 0x8d, 0x58, 0xad, 0xcf, - 0x6a, 0x38, 0xee, 0xb1, 0x1b, 0x06, 0xc2, 0xca, 0xa5, 0x33, 0xe6, 0x8c, - 0x5a, 0xa5, 0x90, 0x36, 0x39, 0x4d, 0x1b, 0xa6, 0x38, 0xff, 0xe5, 0xd3, - 0x94, 0x6f, 0x37, 0xef, 0x61, 0xda, 0x0b, 0x17, 0xc4, 0x2e, 0xd0, 0x58, - 0xa8, 0x1e, 0x6f, 0x0a, 0x2f, 0xbe, 0x4d, 0x05, 0x8b, 0x9b, 0x8b, 0x17, - 0xec, 0x2f, 0xe1, 0x2c, 0x5e, 0xd8, 0x3d, 0xd6, 0x2f, 0x3c, 0x51, 0xeb, - 0x17, 0xde, 0xc7, 0xfa, 0xc5, 0x11, 0xe1, 0xf7, 0x10, 0xd4, 0xa6, 0x12, - 0xe4, 0x51, 0x11, 0x7c, 0x5d, 0x89, 0xb8, 0xc9, 0x7f, 0xa4, 0xb7, 0x68, - 0xe6, 0xec, 0xb1, 0x73, 0x01, 0x62, 0xa0, 0x8a, 0x50, 0x2b, 0x78, 0xe2, + 0x63, 0xfc, 0xcf, 0xb9, 0x1e, 0xe5, 0xd1, 0x62, 0xff, 0xff, 0xfc, 0xe4, + 0x67, 0xf0, 0x66, 0x7e, 0x64, 0xcf, 0xe7, 0x60, 0xd4, 0x99, 0xf7, 0x33, + 0x74, 0x4e, 0x71, 0x06, 0xa5, 0x91, 0x19, 0x93, 0xce, 0x91, 0xf1, 0xbc, + 0x5f, 0xff, 0xfc, 0x09, 0x88, 0xcf, 0xe6, 0x18, 0x58, 0x3f, 0xb1, 0x99, + 0x81, 0x79, 0x62, 0xff, 0xbe, 0xfd, 0x59, 0xbf, 0xf3, 0x16, 0x2f, 0xdf, + 0x7f, 0xb0, 0x46, 0x22, 0xc7, 0x8e, 0xb7, 0xff, 0xe7, 0x17, 0x63, 0xfc, + 0xcf, 0xb9, 0x1e, 0xe5, 0xd1, 0x62, 0xff, 0xf4, 0xe8, 0x03, 0x71, 0x75, + 0x19, 0xf7, 0x33, 0x74, 0x4e, 0x71, 0x06, 0xa5, 0xb6, 0xfb, 0x1c, 0xf0, + 0xde, 0x47, 0x25, 0xa8, 0xe5, 0x8f, 0x1d, 0x1f, 0xe9, 0x43, 0xbc, 0x8e, + 0x42, 0xff, 0xff, 0x7b, 0x98, 0x3f, 0xbf, 0x1c, 0x5d, 0x9d, 0x98, 0x86, + 0xb1, 0x7f, 0x36, 0xe3, 0xfc, 0xe9, 0x62, 0xff, 0xff, 0xfb, 0x3d, 0xe9, + 0xd0, 0x3d, 0x9d, 0x81, 0xb8, 0xe2, 0xec, 0xec, 0xc4, 0x35, 0x8b, 0xfe, + 0xfe, 0x7b, 0xb8, 0x49, 0x6e, 0xb1, 0x69, 0xd2, 0x2e, 0x40, 0xfd, 0x52, + 0x9b, 0x8e, 0x30, 0xfe, 0x1d, 0x17, 0xb1, 0xbb, 0x58, 0xbf, 0xfe, 0xcd, + 0xf3, 0x59, 0xbf, 0xf3, 0x9c, 0x17, 0x96, 0x2f, 0xff, 0xe9, 0x8b, 0xf9, + 0x85, 0x83, 0xfb, 0x66, 0x05, 0xe5, 0x8b, 0xfe, 0xfb, 0xf5, 0x66, 0xff, + 0xcc, 0x58, 0xbf, 0x7d, 0xfe, 0xc1, 0x44, 0x98, 0x2f, 0xc7, 0x40, 0xa5, + 0xc5, 0xab, 0xff, 0xfa, 0x62, 0xfe, 0x61, 0x60, 0xfe, 0xd9, 0x81, 0x79, + 0x62, 0xfe, 0xf7, 0x23, 0xdc, 0xba, 0x2c, 0x52, 0xc5, 0xfc, 0xe2, 0xec, + 0x7f, 0x99, 0x37, 0xfa, 0x33, 0xbb, 0x3a, 0x0d, 0x53, 0x8e, 0xf1, 0x9c, + 0x81, 0x73, 0x90, 0x99, 0xb4, 0x46, 0x2e, 0x65, 0x14, 0xe3, 0x95, 0xfb, + 0x3f, 0xf7, 0xdd, 0x62, 0xfd, 0xc2, 0xce, 0x8c, 0xb1, 0x69, 0xdc, 0xf4, + 0xbc, 0x53, 0x58, 0xde, 0xee, 0x35, 0x7a, 0x5a, 0x08, 0x43, 0xdf, 0x8a, + 0x77, 0x81, 0xd6, 0x2f, 0xff, 0x64, 0x7f, 0xc5, 0x17, 0xf2, 0x28, 0x4f, + 0x6b, 0x17, 0xf3, 0x73, 0xa1, 0xe4, 0xd5, 0x8b, 0xff, 0xb9, 0x91, 0x7e, + 0x7a, 0x67, 0xff, 0x2b, 0x14, 0x34, 0x79, 0x68, 0xa4, 0xea, 0x3e, 0x31, + 0xbf, 0xcc, 0x0e, 0x1d, 0xbb, 0xf2, 0xc5, 0x2c, 0x5f, 0xf7, 0x08, 0x42, + 0xf4, 0x24, 0xd5, 0x8a, 0xec, 0xf1, 0xfc, 0x19, 0x58, 0x8d, 0xc6, 0x3d, + 0x13, 0xe5, 0xff, 0xb3, 0x6d, 0x4c, 0xf9, 0xff, 0x2b, 0x17, 0xfe, 0x78, + 0xb8, 0x4c, 0xc3, 0xfb, 0xac, 0x5f, 0xc5, 0x9c, 0xfc, 0x8d, 0x62, 0xff, + 0x9f, 0xbf, 0x19, 0xc1, 0x0b, 0x75, 0x8b, 0xf4, 0xc7, 0x82, 0x3f, 0xeb, + 0x15, 0x28, 0xd8, 0xc3, 0xe8, 0xf2, 0xdf, 0x9f, 0x5f, 0xff, 0xff, 0x14, + 0xff, 0x0b, 0x1c, 0x60, 0x9e, 0xe1, 0xc3, 0x66, 0x4b, 0x7c, 0x1a, 0xc5, + 0x12, 0x7a, 0x1c, 0x8c, 0x5b, 0xc7, 0xd7, 0xfe, 0x35, 0xfc, 0x59, 0x0d, + 0x73, 0x8b, 0x17, 0xfd, 0xd0, 0x73, 0xc1, 0x6c, 0x28, 0x96, 0x2d, 0x07, + 0x3f, 0xf6, 0x40, 0xbd, 0xb0, 0xbc, 0xb1, 0x7f, 0xe3, 0x8a, 0x0c, 0x33, + 0x3c, 0x70, 0x2c, 0x54, 0x9f, 0x0e, 0x0f, 0xdf, 0xd3, 0x16, 0x74, 0x7d, + 0x2c, 0x5f, 0xfe, 0x87, 0xda, 0x1b, 0x93, 0x75, 0x75, 0x75, 0x3a, 0xc5, + 0x4a, 0x21, 0x30, 0xc2, 0xf6, 0xb0, 0x96, 0x2f, 0xe7, 0xd7, 0x99, 0xb7, + 0x58, 0xbf, 0xd9, 0xe3, 0x71, 0x88, 0x0b, 0x14, 0xe7, 0xfb, 0x1e, 0x39, + 0x11, 0x75, 0x4a, 0x7f, 0x7f, 0x84, 0x39, 0x42, 0x93, 0x90, 0x9e, 0xbf, + 0x76, 0x3f, 0xb8, 0x4b, 0x17, 0xff, 0x08, 0x78, 0x42, 0x83, 0x8f, 0x00, + 0xb1, 0x52, 0x7d, 0xee, 0x57, 0x7f, 0xf0, 0x98, 0xfe, 0x2c, 0xd8, 0xb3, + 0xb5, 0x8b, 0xfe, 0xcd, 0xe7, 0xef, 0x24, 0x35, 0x8b, 0xff, 0xbf, 0x81, + 0x0b, 0x1f, 0xfc, 0x9d, 0x96, 0x2e, 0x71, 0x6c, 0x7f, 0xdd, 0x9c, 0x56, + 0xce, 0xc6, 0xd0, 0x72, 0x9c, 0x72, 0x18, 0xbb, 0xce, 0x4a, 0x45, 0x1c, + 0x66, 0xa3, 0x27, 0x39, 0x73, 0x32, 0x82, 0xbe, 0x1a, 0x29, 0x42, 0x1c, + 0x8f, 0xfb, 0xd2, 0xac, 0x3a, 0x42, 0xe8, 0x22, 0x0e, 0xa8, 0x61, 0xdf, + 0x45, 0x07, 0x89, 0x62, 0xe2, 0xd9, 0x62, 0xf8, 0x1a, 0x68, 0xe5, 0x8a, + 0x30, 0xf8, 0xe3, 0x42, 0x5e, 0xc6, 0x2f, 0xf1, 0x6d, 0x83, 0x3b, 0xf9, + 0x62, 0xff, 0x47, 0xbe, 0xdc, 0x99, 0x89, 0x62, 0xce, 0x23, 0xec, 0x08, + 0xd2, 0xf3, 0x99, 0xd7, 0xac, 0x5b, 0xa9, 0x62, 0xef, 0xf5, 0x2c, 0x5f, + 0xfe, 0xce, 0x9f, 0x68, 0x01, 0xbb, 0x03, 0xf6, 0xb1, 0x52, 0x7d, 0x3f, + 0x1b, 0xb6, 0x2c, 0x57, 0x8d, 0x97, 0x42, 0x1b, 0xff, 0xf4, 0xf0, 0xee, + 0x5e, 0xe6, 0x3f, 0x8a, 0x4e, 0xb1, 0x7f, 0xd0, 0xe7, 0xf0, 0xf1, 0xef, + 0xc5, 0x8b, 0xff, 0xdb, 0x4c, 0x7f, 0x0b, 0x3d, 0xe7, 0xd6, 0xeb, 0x15, + 0xda, 0x23, 0x34, 0x7b, 0x7d, 0xb1, 0xda, 0x0b, 0x17, 0x3f, 0x16, 0x2f, + 0x16, 0x74, 0x58, 0xbb, 0x36, 0x39, 0xb5, 0xe0, 0xbd, 0xfe, 0x93, 0xcc, + 0x60, 0x41, 0x04, 0xb1, 0x50, 0x55, 0x2c, 0xf0, 0xb0, 0xd1, 0x1b, 0x43, + 0x7c, 0x89, 0x3c, 0xb3, 0xd4, 0x5b, 0x7f, 0xfe, 0x66, 0x1f, 0xe7, 0xa7, + 0xe4, 0xf1, 0x47, 0xb8, 0xd6, 0x2e, 0xf8, 0x6b, 0x17, 0xfc, 0x6c, 0x6d, + 0xf7, 0xd3, 0x3f, 0x45, 0x8b, 0x1a, 0xb1, 0x52, 0xee, 0x18, 0x32, 0xd9, + 0x11, 0x3c, 0x70, 0x71, 0xf0, 0xa2, 0xf9, 0x43, 0x4a, 0xb9, 0x27, 0x0e, + 0x2d, 0x88, 0x64, 0x34, 0x1b, 0xc7, 0x70, 0x96, 0x2f, 0xff, 0xd0, 0xce, + 0x31, 0x03, 0xf9, 0x3e, 0xe4, 0x81, 0x62, 0xf9, 0x8e, 0xd0, 0x58, 0xbf, + 0xd8, 0x58, 0xfa, 0x6e, 0x8b, 0x17, 0xff, 0xec, 0x39, 0xc5, 0xff, 0xb3, + 0x1b, 0x9a, 0xcf, 0x2c, 0x5d, 0xf7, 0x31, 0x11, 0x24, 0x67, 0x7b, 0x0f, + 0x2b, 0x17, 0xfe, 0x26, 0x19, 0x60, 0xff, 0x3c, 0x58, 0xac, 0x3d, 0x97, + 0x1c, 0xbf, 0xdb, 0xe1, 0x67, 0x56, 0x0d, 0x62, 0xf0, 0x73, 0xa5, 0x8b, + 0xfd, 0x87, 0x6f, 0xe7, 0x60, 0x58, 0xbf, 0xc7, 0x9d, 0x78, 0xa7, 0x65, + 0x8b, 0xfb, 0x8e, 0x4d, 0xa3, 0x56, 0x2b, 0x63, 0xe2, 0x39, 0xa5, 0xfc, + 0xfc, 0x6f, 0x0a, 0x56, 0x2f, 0xb7, 0xec, 0xdd, 0xd6, 0x2f, 0x07, 0x20, + 0x58, 0xbd, 0xa9, 0xe2, 0xc5, 0x62, 0x24, 0x1c, 0xb4, 0x05, 0x1e, 0x1e, + 0xbe, 0xe9, 0x25, 0xba, 0xc5, 0xff, 0xfd, 0x25, 0x80, 0xe6, 0x0f, 0xf3, + 0xb1, 0xc4, 0x43, 0x58, 0xbf, 0x76, 0x0e, 0xa0, 0xc2, 0x58, 0xbf, 0xfc, + 0xc0, 0x6f, 0xe1, 0xdb, 0xf9, 0xd8, 0x16, 0x2f, 0xff, 0xfe, 0x9c, 0x03, + 0x44, 0x3c, 0x6d, 0xff, 0x99, 0x16, 0x37, 0x54, 0x4e, 0xb1, 0x4e, 0x9b, + 0x7f, 0xc9, 0x59, 0x6c, 0x8c, 0x04, 0x95, 0x7e, 0x7f, 0x7a, 0x60, 0xb1, + 0x74, 0xf6, 0xb1, 0x7c, 0xd0, 0xce, 0x8b, 0x15, 0xb2, 0xed, 0xbc, 0x07, + 0x86, 0xa8, 0x6c, 0x2a, 0xf7, 0x84, 0x3b, 0x90, 0x68, 0xdb, 0xe3, 0xcd, + 0x09, 0x62, 0x85, 0x9f, 0xa3, 0xaa, 0xe8, 0x91, 0x1c, 0x51, 0xd4, 0x31, + 0x7f, 0x17, 0xa7, 0x9e, 0x75, 0x8b, 0xff, 0xf3, 0x16, 0xfe, 0xe6, 0x6d, + 0xc9, 0x32, 0x7a, 0x12, 0xc5, 0xff, 0xba, 0x18, 0x37, 0x90, 0x61, 0x01, + 0x62, 0xf7, 0x1c, 0xeb, 0x14, 0xc7, 0xbd, 0xc4, 0x1b, 0xff, 0xf0, 0xbb, + 0x1e, 0xe2, 0xc8, 0xf8, 0xb1, 0xba, 0xa2, 0x75, 0x8b, 0x9f, 0xcb, 0x17, + 0xf6, 0x78, 0xa6, 0x4e, 0xb1, 0x7c, 0x3f, 0xcf, 0x43, 0x9e, 0x1f, 0xc5, + 0xef, 0xff, 0x60, 0xff, 0x3d, 0x3e, 0xe1, 0x16, 0x6e, 0xb1, 0x74, 0xc5, + 0x88, 0x88, 0x23, 0xbb, 0xfc, 0x53, 0x0c, 0x3c, 0xee, 0xb1, 0x78, 0x6f, + 0xa5, 0x8a, 0x19, 0xe8, 0x68, 0xce, 0xfe, 0xec, 0x63, 0xc6, 0xd9, 0x62, + 0xfe, 0xc0, 0xb5, 0x9f, 0xe2, 0xc5, 0xff, 0xed, 0x36, 0xf9, 0xd1, 0xf5, + 0x1c, 0xdb, 0x47, 0x2c, 0x5f, 0xff, 0xbe, 0xfd, 0x0b, 0x02, 0xc7, 0xf3, + 0xe9, 0x80, 0xb1, 0x78, 0x44, 0x05, 0x8b, 0xa4, 0x6b, 0x14, 0xe6, 0xd0, + 0x87, 0x6f, 0xa1, 0x9f, 0xc5, 0x8b, 0xdb, 0x08, 0x96, 0x2d, 0xc3, 0x13, + 0xbe, 0x92, 0x2d, 0x8c, 0x06, 0x5f, 0xba, 0xa4, 0x50, 0x8a, 0x61, 0xf0, + 0xc8, 0xaf, 0xff, 0x86, 0x4c, 0xdf, 0xfe, 0x30, 0xf3, 0x0e, 0xb1, 0x7f, + 0xfe, 0x1e, 0xb3, 0x7f, 0xe7, 0xd8, 0x22, 0x10, 0x80, 0xb1, 0x5d, 0xa6, + 0x4b, 0x14, 0x20, 0x09, 0x36, 0xee, 0xb3, 0xac, 0x58, 0xbe, 0x76, 0x21, + 0xac, 0x5e, 0xea, 0x62, 0x58, 0xbf, 0xbe, 0xf1, 0x33, 0x6c, 0xb1, 0x7a, + 0x70, 0x0b, 0x16, 0x9e, 0xb5, 0x15, 0xa3, 0x22, 0xc2, 0x1d, 0xc7, 0xe2, + 0x2f, 0xa9, 0x5e, 0xc9, 0xc2, 0xd7, 0x85, 0xbe, 0x88, 0x4f, 0x19, 0x5b, + 0x4b, 0x60, 0x04, 0x39, 0x2f, 0x1b, 0xe7, 0x58, 0xbd, 0xb1, 0xe5, 0x62, + 0xa4, 0xde, 0x38, 0xf5, 0xfd, 0x3a, 0xda, 0x75, 0xb2, 0xc5, 0xfd, 0x24, + 0x67, 0xa0, 0xeb, 0x17, 0xff, 0x89, 0x82, 0xfc, 0xc1, 0xcb, 0x0f, 0x2b, + 0x17, 0xff, 0x67, 0x7e, 0x9c, 0xd6, 0xa6, 0x7a, 0x96, 0x2c, 0x14, 0x48, + 0x8f, 0x24, 0x8b, 0x44, 0xb1, 0x7f, 0xb6, 0xc0, 0xa7, 0xe2, 0x25, 0x8a, + 0x93, 0xc8, 0x71, 0x3a, 0x82, 0x6f, 0xe3, 0x30, 0xc8, 0x5e, 0xfd, 0xca, + 0xfd, 0xfc, 0xdf, 0x02, 0x58, 0xbf, 0xee, 0x8c, 0x40, 0xfe, 0x01, 0x96, + 0x2f, 0xce, 0x6f, 0x9f, 0x65, 0x8b, 0xff, 0xd9, 0x80, 0x3c, 0xc5, 0xc1, + 0xfd, 0xb6, 0x58, 0xa7, 0x45, 0x87, 0xce, 0x88, 0xaa, 0xff, 0xef, 0xc9, + 0xe2, 0x2c, 0x0b, 0xd9, 0xf5, 0x8b, 0x85, 0xb2, 0xc5, 0x49, 0xef, 0x8d, + 0x1a, 0xfa, 0x2c, 0xcd, 0x96, 0x2f, 0xff, 0xff, 0xfb, 0x8c, 0x3e, 0xe1, + 0xc7, 0x1e, 0x1f, 0xd9, 0xdf, 0xe7, 0xa1, 0xb3, 0xfc, 0x1f, 0xe7, 0xb5, + 0x8a, 0xd9, 0x17, 0xdc, 0x24, 0xbf, 0x8f, 0xf7, 0xe9, 0x91, 0x2c, 0x5f, + 0xcd, 0xdf, 0xdb, 0x34, 0xb1, 0x67, 0xc3, 0xdf, 0x63, 0x1b, 0xff, 0xd1, + 0xef, 0xac, 0xdc, 0xb3, 0xa4, 0x73, 0x6c, 0xb1, 0x7f, 0xfb, 0x42, 0x39, + 0xd9, 0xb6, 0x3c, 0xfb, 0x8b, 0x17, 0xfe, 0x2c, 0xee, 0x1c, 0xd4, 0xfb, + 0x8b, 0x17, 0xfd, 0xc7, 0xc2, 0x1f, 0xd8, 0x96, 0x2f, 0xda, 0xc2, 0xc0, + 0x96, 0x2e, 0xd0, 0x0c, 0x3d, 0xf1, 0x9b, 0xde, 0xdf, 0x36, 0x58, 0xb7, + 0xe4, 0xf3, 0x9c, 0xbe, 0xfe, 0x2f, 0xe0, 0x24, 0x96, 0x29, 0x62, 0xfd, + 0x0d, 0x4e, 0x0d, 0x62, 0xc2, 0xec, 0xda, 0x10, 0x65, 0xfe, 0xcf, 0x66, + 0x71, 0xa3, 0xd6, 0x29, 0xcf, 0x73, 0x84, 0xf7, 0xfc, 0x2d, 0x71, 0x88, + 0x78, 0x05, 0x8b, 0xff, 0xfd, 0x90, 0xdf, 0xef, 0xf9, 0xcd, 0x43, 0xc5, + 0x27, 0xe2, 0xc5, 0xff, 0x61, 0xf9, 0x27, 0x6e, 0xfc, 0xb1, 0x7f, 0xcd, + 0xb0, 0xa7, 0x08, 0x5b, 0x2c, 0x5f, 0xe8, 0xb5, 0x8f, 0xf9, 0x1a, 0xc5, + 0x62, 0x2a, 0x34, 0x74, 0xc7, 0x54, 0xe9, 0xb8, 0x7c, 0xe7, 0x91, 0x84, + 0xdf, 0xfd, 0x3c, 0x2c, 0x35, 0xff, 0xfc, 0x8f, 0x58, 0xbf, 0xe1, 0x7a, + 0x3f, 0x98, 0xe4, 0x35, 0x8b, 0xe1, 0x4f, 0x63, 0x58, 0xbf, 0xd8, 0x7c, + 0x8a, 0x0f, 0x8b, 0x15, 0x2b, 0xff, 0xa3, 0x86, 0xd6, 0xf0, 0x8d, 0x78, + 0x6f, 0xc7, 0xc2, 0x0e, 0x22, 0x5d, 0x29, 0x9d, 0x33, 0xf0, 0xed, 0x62, + 0x6e, 0x42, 0xf3, 0xd1, 0xc8, 0x88, 0xdb, 0xa2, 0x38, 0x47, 0x81, 0x92, + 0x5c, 0x33, 0xac, 0x5e, 0x8e, 0xc3, 0xac, 0x5f, 0x31, 0xc3, 0x3a, 0xc5, + 0xe9, 0xd6, 0xcb, 0x14, 0xe7, 0xc5, 0xe2, 0x0e, 0xa2, 0x4b, 0xf4, 0x9c, + 0xb0, 0x6b, 0x16, 0xe2, 0xc5, 0x84, 0x03, 0x73, 0xe2, 0x7b, 0xdd, 0x4e, + 0x12, 0xc5, 0x4b, 0x29, 0xc7, 0x29, 0x07, 0xf1, 0x46, 0x0c, 0xcf, 0x42, + 0x6a, 0xea, 0x27, 0xb7, 0x5a, 0xb1, 0x7d, 0x8f, 0xf1, 0x2c, 0x5f, 0xa4, + 0xb3, 0xa3, 0x2c, 0x5b, 0x78, 0x8f, 0x2b, 0x44, 0x56, 0xdd, 0x62, 0xb6, + 0x44, 0xf6, 0x98, 0x43, 0x2a, 0xbf, 0xf9, 0xf7, 0x6d, 0x6f, 0xf7, 0xe8, + 0xc7, 0x58, 0xbf, 0xfb, 0x53, 0xf9, 0x30, 0x26, 0x22, 0x95, 0x8b, 0x9f, + 0xdc, 0x44, 0x60, 0x69, 0x17, 0xf1, 0x4e, 0x7f, 0x09, 0x62, 0xff, 0xff, + 0x1b, 0xc1, 0xbe, 0x77, 0xbb, 0x93, 0x76, 0x79, 0x9e, 0x2c, 0x56, 0x22, + 0x39, 0x8a, 0xef, 0xff, 0x1e, 0x77, 0xf7, 0x30, 0x13, 0x9d, 0xc1, 0x62, + 0xf8, 0xd7, 0xdd, 0xd6, 0x2e, 0x98, 0x61, 0xf8, 0x79, 0x32, 0xbe, 0x8b, + 0xd2, 0x84, 0x8d, 0xe1, 0xe4, 0x16, 0x2f, 0x47, 0xb8, 0x4b, 0x17, 0x8d, + 0x7d, 0xd6, 0x2f, 0xcf, 0xd0, 0xb3, 0x86, 0x1e, 0xef, 0xc7, 0x7c, 0x43, + 0x77, 0x64, 0xb1, 0x7f, 0xdd, 0x30, 0x71, 0x66, 0x11, 0xab, 0x17, 0xff, + 0xa1, 0x3c, 0xfc, 0x97, 0xbf, 0x1e, 0xe7, 0x58, 0xa2, 0x44, 0x4f, 0x8f, + 0x2f, 0xfa, 0x67, 0xdc, 0x2c, 0x62, 0x58, 0xbf, 0xf4, 0x9f, 0x8f, 0xa9, + 0xf3, 0xf4, 0x58, 0xbf, 0xff, 0xec, 0xdf, 0xf9, 0xbf, 0xe7, 0xa0, 0x18, + 0xb0, 0x7f, 0x78, 0x96, 0x2f, 0xd1, 0xef, 0xf6, 0x89, 0x62, 0xa5, 0x1a, + 0xda, 0x40, 0xfb, 0x55, 0x1a, 0x99, 0xdf, 0xa3, 0x0c, 0xbf, 0xfe, 0xc1, + 0xfd, 0xc1, 0x30, 0x71, 0xfe, 0x7b, 0x58, 0xbf, 0xa7, 0x72, 0x6e, 0xfc, + 0xb1, 0x7c, 0x42, 0x68, 0x2c, 0x5f, 0xfc, 0x58, 0x67, 0x05, 0x9e, 0x62, + 0x02, 0xc5, 0xfe, 0xe6, 0xa7, 0x66, 0xd6, 0xeb, 0x17, 0xdb, 0x47, 0x49, + 0xd6, 0x2b, 0x11, 0x42, 0xe8, 0x81, 0x9b, 0x5f, 0xfa, 0x7b, 0xf7, 0x04, + 0x7c, 0xef, 0xcb, 0x17, 0xf6, 0x1a, 0xde, 0x29, 0x58, 0xa8, 0x2e, 0x2b, + 0x62, 0x6b, 0xc2, 0x86, 0x3e, 0x35, 0xdd, 0x15, 0x9d, 0x43, 0x85, 0xfe, + 0x86, 0x1f, 0x42, 0xf0, 0xd0, 0xaf, 0xd3, 0xed, 0xb0, 0x25, 0x8b, 0x74, + 0x58, 0xbf, 0xcd, 0x1e, 0x67, 0xbe, 0xfc, 0x58, 0xbf, 0xbf, 0x3a, 0xf1, + 0x4a, 0xc5, 0xfe, 0x26, 0xd9, 0xa0, 0xff, 0x58, 0xbf, 0xff, 0x6e, 0xfa, + 0x7c, 0xe9, 0xfc, 0xc2, 0x66, 0xe8, 0xb1, 0x6e, 0xf7, 0x44, 0x57, 0x8c, + 0xeb, 0x49, 0xac, 0x1c, 0xa8, 0x85, 0x3c, 0x70, 0x28, 0x5b, 0xdf, 0xce, + 0x2d, 0xb9, 0x30, 0x58, 0xbf, 0x89, 0x82, 0x33, 0x61, 0xac, 0x5e, 0x70, + 0x71, 0x62, 0xfb, 0x36, 0xe9, 0xe5, 0x8a, 0xc3, 0xc3, 0x10, 0xed, 0xff, + 0xdc, 0x6e, 0xfd, 0xec, 0xdc, 0x62, 0xd9, 0x62, 0xd9, 0xb9, 0xf5, 0x78, + 0x86, 0xff, 0xf1, 0x99, 0x02, 0x13, 0x73, 0xf8, 0x06, 0x58, 0xbf, 0xf7, + 0xb8, 0x1f, 0x24, 0xb6, 0x68, 0x2c, 0x54, 0x11, 0x17, 0x89, 0x57, 0xe1, + 0xee, 0x2c, 0x8f, 0x58, 0xbf, 0xdd, 0xfe, 0x5c, 0x98, 0x6b, 0x17, 0x76, + 0x75, 0x8b, 0x14, 0x9e, 0x66, 0x19, 0xd4, 0x48, 0x9e, 0x3b, 0xcd, 0xf7, + 0x30, 0x8d, 0x58, 0xbe, 0x9c, 0x83, 0x2c, 0x57, 0x67, 0x89, 0xf2, 0x3b, + 0xff, 0xfb, 0x7f, 0xb4, 0x79, 0x98, 0x33, 0x71, 0xf4, 0x59, 0xd1, 0x62, + 0xf8, 0x1f, 0x68, 0x2c, 0x5f, 0xff, 0xef, 0xe7, 0xa3, 0xb0, 0x9e, 0x7b, + 0x2c, 0xe9, 0x38, 0x12, 0xc5, 0xff, 0xf8, 0x5a, 0x6e, 0x48, 0xba, 0xf9, + 0xfe, 0x31, 0x6e, 0xb1, 0x5c, 0x45, 0xf7, 0x99, 0x2f, 0x81, 0x1a, 0x75, + 0xbd, 0x62, 0xc5, 0x39, 0xeb, 0x68, 0x8e, 0xa5, 0x52, 0x28, 0xda, 0x30, + 0x8d, 0xd8, 0x9a, 0x33, 0x7b, 0xfc, 0x3e, 0x92, 0x5e, 0xc0, 0x2c, 0x5f, + 0xa7, 0xdf, 0x9f, 0x2c, 0x5c, 0x40, 0x58, 0xad, 0x8f, 0xd3, 0x46, 0xac, + 0x51, 0x7f, 0x9b, 0xbe, 0x6b, 0x3f, 0xc5, 0x8a, 0x58, 0xbf, 0x85, 0xdc, + 0x4e, 0x58, 0xb1, 0x7f, 0xff, 0xf6, 0xbf, 0x91, 0x44, 0xda, 0x8b, 0xdf, + 0x10, 0x39, 0x8f, 0xd0, 0x72, 0xb1, 0x7f, 0xff, 0x31, 0x03, 0x35, 0x8f, + 0xb3, 0x1f, 0x35, 0xa9, 0x58, 0xa1, 0x23, 0x47, 0xa3, 0xc5, 0xff, 0x3f, + 0xf9, 0xa7, 0x29, 0x3a, 0xc5, 0xfb, 0x91, 0x16, 0x44, 0xb1, 0x7f, 0xcd, + 0x11, 0x60, 0xff, 0x3c, 0x58, 0xa9, 0x3e, 0x3c, 0x2a, 0xa7, 0x47, 0x04, + 0x79, 0x2f, 0xe1, 0x37, 0x7e, 0xf7, 0xd8, 0x8d, 0x58, 0xbf, 0xdd, 0x44, + 0x21, 0x6e, 0xe6, 0xac, 0x5b, 0xcb, 0x14, 0xb1, 0x7c, 0xe1, 0x1d, 0xbb, + 0x2f, 0xbc, 0x25, 0x7f, 0x85, 0xb0, 0xff, 0x85, 0x2b, 0x15, 0x28, 0xc3, + 0xdd, 0x5c, 0x8e, 0x2f, 0xf3, 0xe0, 0x51, 0x41, 0xc9, 0x62, 0xff, 0xfa, + 0x4f, 0x1e, 0xf3, 0x25, 0xac, 0x73, 0xe2, 0xc5, 0xff, 0xd8, 0x3f, 0xc8, + 0x5d, 0xc3, 0xc2, 0x1a, 0xc5, 0xfc, 0x0c, 0x73, 0xcc, 0x7a, 0xc5, 0xf8, + 0x2c, 0x3b, 0xf9, 0x62, 0xff, 0xe0, 0x7d, 0xc5, 0xee, 0x7c, 0x59, 0xe5, + 0x8b, 0xb3, 0x8b, 0x17, 0x37, 0x96, 0x2d, 0x0d, 0x1a, 0xef, 0x8b, 0xd4, + 0xa3, 0x11, 0x8a, 0x44, 0xe9, 0x58, 0x99, 0x17, 0x21, 0xe9, 0x5b, 0x2e, + 0xa3, 0x8e, 0x3e, 0x0c, 0x37, 0xde, 0x1d, 0x91, 0xe5, 0xf1, 0x1a, 0x12, + 0x7f, 0xa3, 0x6a, 0xbf, 0xe6, 0xf0, 0x79, 0xf6, 0x62, 0x58, 0xae, 0xb1, + 0x78, 0x53, 0x27, 0x54, 0xc5, 0x08, 0x9b, 0xff, 0xd9, 0xa8, 0xdb, 0x9e, + 0x27, 0xef, 0x86, 0x79, 0x62, 0xff, 0xfd, 0x91, 0xec, 0x40, 0xdb, 0x02, + 0x09, 0x88, 0xa5, 0x62, 0xff, 0xf6, 0x49, 0x66, 0xe5, 0x9e, 0x13, 0x04, + 0xb1, 0x7f, 0xf1, 0x7f, 0x27, 0xb6, 0x7e, 0x06, 0x6a, 0xc5, 0xff, 0x87, + 0xf9, 0xd1, 0x67, 0x46, 0xf2, 0xc5, 0xf7, 0xe3, 0xdc, 0xeb, 0x17, 0xa0, + 0xfe, 0x30, 0xf9, 0xb1, 0x02, 0xa5, 0x1b, 0xf1, 0x42, 0xb2, 0xff, 0xfb, + 0x66, 0x2f, 0x70, 0x45, 0xef, 0x7d, 0x86, 0xb1, 0x7f, 0xd8, 0x08, 0xec, + 0x61, 0xe7, 0x16, 0x2f, 0xfe, 0x7f, 0x7f, 0x1e, 0x1c, 0xce, 0xfc, 0xb1, + 0x50, 0x54, 0xf2, 0x35, 0x8c, 0x8c, 0xa1, 0x8a, 0x09, 0x47, 0x87, 0x77, + 0xf1, 0x4c, 0x3f, 0xc0, 0x2c, 0x5f, 0xf0, 0x0b, 0x3d, 0xc6, 0x62, 0x58, + 0xbf, 0xf8, 0x59, 0x16, 0x3e, 0xe5, 0x9f, 0xc5, 0x8b, 0x00, 0x68, 0xa9, + 0xdc, 0xb8, 0x8d, 0xef, 0x1d, 0xbb, 0x58, 0xbf, 0xff, 0xa0, 0xe3, 0xcf, + 0xe6, 0xd3, 0x07, 0xe7, 0x32, 0x3d, 0x62, 0xb4, 0x8b, 0x20, 0x1b, 0x78, + 0x7a, 0xff, 0x85, 0x8f, 0xfe, 0x1d, 0xf8, 0xb1, 0x70, 0x8d, 0x58, 0xbf, + 0xd9, 0xf1, 0xfe, 0x4b, 0x65, 0x8b, 0x0f, 0xe7, 0x9a, 0x10, 0xcd, 0xf7, + 0xf0, 0x6e, 0xb1, 0x52, 0x79, 0x7c, 0x29, 0xa9, 0x6e, 0xd0, 0xa1, 0x0b, + 0xe1, 0xc6, 0xf5, 0x93, 0x9b, 0x4f, 0x1f, 0xd4, 0x7a, 0x7c, 0x45, 0xfa, + 0x86, 0xf1, 0xe1, 0x67, 0xf9, 0x60, 0xad, 0x0c, 0x20, 0x17, 0x94, 0xf2, + 0x4f, 0x11, 0x3d, 0x2b, 0x2c, 0x51, 0xdb, 0x84, 0x60, 0x1c, 0x34, 0x6f, + 0xf6, 0x0f, 0x6d, 0x0a, 0x40, 0xb1, 0x7f, 0xfc, 0x06, 0xfe, 0x00, 0x0d, + 0xac, 0xe9, 0xfc, 0x58, 0xbf, 0xff, 0x7b, 0x84, 0x21, 0x77, 0x0e, 0x0f, + 0xf8, 0xfe, 0x58, 0xbf, 0xff, 0x73, 0x07, 0x3d, 0xc3, 0x99, 0xf7, 0xd7, + 0xd9, 0x62, 0xb4, 0x99, 0xa1, 0xcd, 0x49, 0x47, 0xcb, 0x17, 0xf4, 0x35, + 0xa9, 0x3f, 0x16, 0x2a, 0x4f, 0xb3, 0xb3, 0xdb, 0xfd, 0x3e, 0xe0, 0xff, + 0x24, 0xb1, 0x7f, 0xd0, 0xcf, 0x3f, 0x70, 0x29, 0x58, 0xbc, 0x4e, 0x31, + 0x9f, 0x67, 0x8c, 0xec, 0x75, 0x8b, 0xf0, 0x1c, 0xa1, 0xc5, 0x8a, 0xec, + 0xdd, 0x78, 0x4a, 0xb1, 0x11, 0xce, 0xd9, 0x7e, 0x89, 0xfe, 0xe7, 0x58, + 0xbf, 0xbd, 0xcf, 0xcb, 0x69, 0x62, 0xbe, 0x7a, 0xe4, 0x53, 0x70, 0x38, + 0xb1, 0x78, 0x85, 0xc5, 0x8b, 0xfb, 0xdf, 0x98, 0xa7, 0xa2, 0xc5, 0x6e, + 0x79, 0xce, 0x3b, 0x7f, 0xc3, 0xc3, 0x96, 0x7b, 0xee, 0xb1, 0x7b, 0x52, + 0x35, 0x8b, 0xf1, 0x4e, 0xec, 0xcb, 0x17, 0x67, 0x0d, 0x3c, 0x4f, 0x0e, + 0xdf, 0x05, 0x9e, 0xe2, 0xc5, 0xe3, 0x5f, 0xeb, 0x17, 0xe1, 0x68, 0x11, + 0xbf, 0x5d, 0xac, 0x56, 0x26, 0x88, 0xe4, 0x5f, 0x7c, 0x62, 0xe0, 0x12, + 0x70, 0x7a, 0xb1, 0x51, 0x03, 0x90, 0xfe, 0x3a, 0xab, 0xf8, 0xa0, 0x59, + 0x80, 0x58, 0xbf, 0xb0, 0x66, 0x73, 0xf2, 0xb1, 0x52, 0x7b, 0x7a, 0x2c, + 0xbe, 0xe1, 0x4e, 0xcb, 0x17, 0xfd, 0xe1, 0x19, 0x99, 0xbe, 0x4a, 0xc5, + 0x68, 0xf7, 0x48, 0x8e, 0xff, 0xfd, 0xd4, 0x59, 0xd1, 0xb8, 0xf8, 0x5f, + 0x8f, 0x73, 0xac, 0x5a, 0x18, 0x7f, 0x8e, 0x43, 0x7a, 0x70, 0x96, 0x2e, + 0x92, 0x58, 0xad, 0x1b, 0x13, 0x8d, 0xdf, 0x1b, 0xa9, 0x3a, 0xc5, 0xfa, + 0x62, 0xcc, 0xdd, 0x62, 0xf4, 0x6f, 0x1b, 0x46, 0xeb, 0x17, 0x60, 0x4b, + 0x17, 0xf8, 0x6c, 0xe3, 0x17, 0xb8, 0xb1, 0x5b, 0x1e, 0x66, 0x0c, 0x5d, + 0x9b, 0x2c, 0x51, 0x89, 0x90, 0xc9, 0x0e, 0xc4, 0x86, 0x94, 0x84, 0xf3, + 0x1c, 0x45, 0x7f, 0xce, 0x45, 0x83, 0xfc, 0xf4, 0x58, 0xbf, 0xc2, 0xe7, + 0xda, 0x03, 0x75, 0x8b, 0xff, 0xff, 0xf4, 0x96, 0xde, 0xe6, 0x05, 0xf9, + 0xe9, 0xe2, 0x9e, 0xff, 0x8c, 0x3c, 0xc3, 0xac, 0x5f, 0xe7, 0x2f, 0x43, + 0x35, 0x8b, 0x17, 0xf8, 0x6d, 0x0f, 0x71, 0x80, 0xb1, 0x79, 0xe4, 0xeb, + 0x17, 0xfd, 0x8d, 0xae, 0x9e, 0xc7, 0xdd, 0x62, 0xe9, 0xdf, 0x11, 0x17, + 0xa3, 0x42, 0x1c, 0xad, 0x93, 0x7c, 0x84, 0x21, 0x4a, 0x17, 0xb7, 0xff, + 0x8f, 0x83, 0xf7, 0xc4, 0x03, 0x70, 0xbc, 0xb1, 0x7f, 0x99, 0x8d, 0xcd, + 0x67, 0x96, 0x2f, 0xed, 0x7d, 0x8e, 0xfc, 0x58, 0xbf, 0x7f, 0xed, 0xb4, + 0xfc, 0xf8, 0x43, 0x33, 0xbf, 0xf3, 0x6b, 0x3a, 0x63, 0x8f, 0xee, 0xb1, + 0x58, 0x7f, 0xe0, 0x40, 0xbf, 0xff, 0xb8, 0xfc, 0xe4, 0x99, 0x83, 0x68, + 0x0f, 0x58, 0x75, 0x8a, 0xc4, 0xea, 0x4f, 0x19, 0x67, 0x88, 0x6f, 0xfc, + 0xc0, 0xd4, 0x97, 0xbf, 0x90, 0x58, 0xbf, 0xfc, 0x0c, 0x72, 0xf6, 0x1d, + 0xbc, 0x06, 0x58, 0xa9, 0x55, 0x41, 0x91, 0xf2, 0x39, 0xb0, 0x8f, 0xaf, + 0xef, 0xb1, 0x6d, 0x83, 0x58, 0xbd, 0x9f, 0x65, 0x8b, 0xff, 0x70, 0x7f, + 0x98, 0xa0, 0xfa, 0x82, 0xc5, 0xe1, 0x08, 0x96, 0x2f, 0xcf, 0xff, 0xe0, + 0xd6, 0x29, 0x60, 0x67, 0x8b, 0xc1, 0xda, 0xed, 0x16, 0x11, 0x42, 0x1a, + 0xff, 0xe2, 0x99, 0x07, 0x32, 0x3f, 0x42, 0xe8, 0xb1, 0x46, 0x26, 0xda, + 0x32, 0xe6, 0x86, 0x60, 0x0a, 0xaf, 0xfd, 0x90, 0xfb, 0x40, 0xcf, 0x41, + 0xd6, 0x2f, 0xff, 0x45, 0xf7, 0xfe, 0x6e, 0xc7, 0x2c, 0xe8, 0xb1, 0x7e, + 0x2c, 0x00, 0xb8, 0xb1, 0x7f, 0xa7, 0xdf, 0xc7, 0x26, 0x58, 0xa9, 0x45, + 0x36, 0xc9, 0xba, 0x28, 0xbe, 0x61, 0xe7, 0x16, 0x2f, 0xb3, 0x60, 0xe0, + 0xb1, 0x70, 0x23, 0xb0, 0xf1, 0xc8, 0x8a, 0xf4, 0x7b, 0x9d, 0x62, 0xff, + 0x81, 0xec, 0x71, 0xe1, 0x44, 0xb1, 0xf3, 0x41, 0x7c, 0x4d, 0xa3, 0x56, + 0x2f, 0x30, 0x39, 0x27, 0xd8, 0xe9, 0x35, 0x29, 0xb1, 0xe3, 0xbb, 0x42, + 0xee, 0xff, 0x43, 0xdf, 0xcd, 0x4f, 0x96, 0x2f, 0xe0, 0xb3, 0x7d, 0xf0, + 0x25, 0x8b, 0xba, 0xde, 0xb1, 0x62, 0xed, 0xfa, 0x2c, 0x58, 0x0b, 0x17, + 0xff, 0xa1, 0xcc, 0xd4, 0xf0, 0xb0, 0x02, 0xe2, 0xc5, 0x61, 0xee, 0x30, + 0x95, 0x46, 0x88, 0xb9, 0x92, 0x2f, 0xbb, 0xd6, 0x26, 0x3f, 0xe8, 0x75, + 0xdf, 0xff, 0xb2, 0x7f, 0x3d, 0x3f, 0x31, 0xe6, 0x37, 0x98, 0xd5, 0x8b, + 0xff, 0xd9, 0xd4, 0x03, 0xcc, 0x5e, 0x71, 0x6b, 0x8b, 0x17, 0xff, 0x3e, + 0x8b, 0x06, 0xfd, 0x18, 0x80, 0xb1, 0x7f, 0x66, 0x17, 0xa3, 0xb1, 0x62, + 0xf7, 0xdf, 0x4b, 0x14, 0x73, 0xcc, 0xeb, 0xcb, 0xef, 0xfe, 0xe7, 0xa6, + 0x74, 0x08, 0x8b, 0x02, 0x58, 0xbe, 0x00, 0x18, 0x6b, 0x17, 0x67, 0x6b, + 0x16, 0xfe, 0x1b, 0xb7, 0x23, 0xae, 0xd1, 0x9a, 0xc4, 0xe0, 0x84, 0x0d, + 0xe3, 0x60, 0x25, 0x8b, 0x1d, 0x62, 0xe6, 0xf2, 0xc5, 0xef, 0xce, 0xb6, + 0x35, 0x27, 0x12, 0xbf, 0xc2, 0x62, 0xfe, 0x34, 0x4b, 0x16, 0xee, 0x23, + 0xe6, 0x08, 0xce, 0x9d, 0x1b, 0x2d, 0x0a, 0xea, 0x95, 0xcb, 0x6c, 0x8d, + 0x4c, 0xd2, 0x87, 0x5b, 0x8f, 0x4f, 0x68, 0xd7, 0x4a, 0x30, 0xeb, 0xfe, + 0x6e, 0xad, 0x61, 0x13, 0x44, 0xb1, 0x77, 0xce, 0xb1, 0x52, 0xda, 0xc6, + 0xc2, 0x31, 0xcc, 0x95, 0x30, 0x6c, 0x24, 0x7b, 0x87, 0xd3, 0xc6, 0xf1, + 0x1e, 0xbd, 0xa3, 0x9f, 0xce, 0x28, 0x34, 0x75, 0xe0, 0x43, 0x29, 0x49, + 0x3c, 0x9c, 0xe9, 0x13, 0xc0, 0x47, 0x77, 0xda, 0xcf, 0xf1, 0x62, 0xff, + 0xfb, 0x08, 0x5b, 0x1f, 0x3d, 0xcf, 0xc7, 0xb9, 0xd6, 0x2f, 0xdf, 0x93, + 0xc8, 0x16, 0x2c, 0x4b, 0x14, 0xe6, 0xe4, 0x45, 0x17, 0xdd, 0xf2, 0x7b, + 0x58, 0xa8, 0xd9, 0x1e, 0xb2, 0x47, 0xd7, 0xc2, 0x34, 0x88, 0x2f, 0x73, + 0x5e, 0x58, 0xbf, 0xfd, 0xf7, 0x11, 0x6d, 0x83, 0x88, 0x42, 0xd2, 0xc5, + 0xe8, 0xdf, 0xac, 0x8d, 0xd6, 0x2e, 0xe9, 0x1e, 0xb1, 0x61, 0xc6, 0xe7, + 0x94, 0x11, 0x6d, 0xfa, 0x27, 0xdb, 0x3b, 0x58, 0xbd, 0xa1, 0x41, 0x62, + 0xbb, 0x3c, 0x9f, 0x15, 0xdf, 0xc6, 0x78, 0xa4, 0xfc, 0x58, 0xbe, 0xce, + 0x60, 0x4b, 0x17, 0xf6, 0x39, 0x10, 0xa2, 0x58, 0xad, 0x93, 0xce, 0x80, + 0xf6, 0x42, 0x5d, 0xdd, 0xd8, 0x8c, 0x8b, 0xfc, 0x47, 0x4b, 0x17, 0xd8, + 0x36, 0x82, 0xc5, 0xf3, 0x6b, 0x59, 0x1e, 0x6b, 0x83, 0x0c, 0xbc, 0x58, + 0x05, 0x8b, 0x4a, 0xc5, 0x00, 0xd6, 0xf8, 0x72, 0xe6, 0xf2, 0xc5, 0x68, + 0xdc, 0x7c, 0x86, 0xf4, 0xeb, 0x8b, 0x17, 0x81, 0x3d, 0xac, 0x51, 0xcd, + 0xd8, 0x07, 0x6e, 0x0f, 0x4b, 0x17, 0xcf, 0xc7, 0xe8, 0xb1, 0x7f, 0x8b, + 0x07, 0xf1, 0x77, 0xe5, 0x8a, 0xd8, 0xf6, 0x4d, 0x24, 0xbf, 0xd2, 0x72, + 0xc0, 0x0b, 0x8b, 0x17, 0xfd, 0xac, 0xfe, 0x6c, 0x63, 0xf1, 0x62, 0xb1, + 0x38, 0x17, 0x5c, 0xf9, 0x0b, 0x39, 0x11, 0x20, 0x8c, 0xef, 0xf4, 0x1f, + 0x9c, 0x9d, 0x41, 0x62, 0xf9, 0x8f, 0x2e, 0xb1, 0x7f, 0x0f, 0xed, 0x0c, + 0xe2, 0xc5, 0xef, 0x38, 0x4b, 0x14, 0x34, 0x50, 0xc4, 0x68, 0x02, 0x10, + 0x8b, 0xaf, 0xff, 0xe9, 0xe8, 0xe4, 0x00, 0xcf, 0xe8, 0x60, 0x39, 0x84, + 0xb1, 0x7f, 0x86, 0x2d, 0x8c, 0xdb, 0xfb, 0x2c, 0x5f, 0xfb, 0xec, 0x72, + 0xce, 0x85, 0x9c, 0x58, 0xbf, 0x7a, 0x73, 0xb0, 0x96, 0x2a, 0x23, 0xe9, + 0xd1, 0xfd, 0xfc, 0xe4, 0x28, 0x67, 0x16, 0x2f, 0x43, 0xce, 0xb1, 0x7f, + 0xfe, 0x83, 0xfb, 0x9b, 0xfd, 0xfd, 0xdc, 0x1f, 0xdc, 0x58, 0xbf, 0xd8, + 0x39, 0xee, 0x19, 0xe5, 0x8b, 0xdc, 0x87, 0x6b, 0x17, 0x66, 0xcb, 0x17, + 0xe9, 0x01, 0xda, 0x06, 0x1b, 0x7d, 0x0f, 0xde, 0xdb, 0x3a, 0x96, 0x2f, + 0xe9, 0xcf, 0x71, 0xbb, 0x58, 0xbf, 0x7c, 0x50, 0xce, 0x2c, 0x5f, 0xf7, + 0xa7, 0xb0, 0x37, 0xfe, 0xeb, 0x17, 0xcf, 0x1d, 0x9b, 0x2c, 0x56, 0x1f, + 0x07, 0x8e, 0xac, 0x75, 0x8b, 0xe1, 0x43, 0x38, 0x61, 0xb3, 0xe8, 0x43, + 0x43, 0x47, 0xb9, 0x42, 0xf2, 0xf0, 0x4d, 0xb2, 0xc5, 0xd2, 0x75, 0x8a, + 0x73, 0xdd, 0xf9, 0x3f, 0x07, 0xea, 0x57, 0x1f, 0xe0, 0x7e, 0x35, 0xdc, + 0x85, 0x19, 0xa4, 0x7d, 0x96, 0xc4, 0x3a, 0x75, 0x9f, 0xb5, 0x91, 0xf7, + 0x08, 0x7d, 0x1c, 0x15, 0xf7, 0xc5, 0x9e, 0x58, 0xbf, 0xf0, 0xbb, 0x87, + 0x3f, 0x9b, 0x08, 0x96, 0x2f, 0xf1, 0x9a, 0x8f, 0x70, 0x60, 0xd6, 0x2e, + 0xc1, 0xac, 0x5f, 0xef, 0xf7, 0x0e, 0x14, 0xf6, 0xb1, 0x58, 0x79, 0xae, + 0x2f, 0x73, 0x6e, 0xb1, 0x7e, 0x37, 0x05, 0xad, 0x96, 0x29, 0x8f, 0x0c, + 0x43, 0x14, 0xe9, 0xb7, 0x68, 0x8c, 0xe8, 0x5e, 0x84, 0x2f, 0x53, 0x1d, + 0xa3, 0x23, 0x78, 0xc1, 0x0c, 0x3a, 0xc7, 0x7e, 0xb6, 0x18, 0xd1, 0xa4, + 0x64, 0x31, 0xb4, 0x2d, 0xfa, 0xe4, 0x20, 0xba, 0xea, 0x5b, 0x1a, 0xe1, + 0x2b, 0x34, 0x86, 0x4d, 0xa5, 0x8d, 0x42, 0x53, 0x08, 0xe9, 0xb2, 0xb9, + 0x5f, 0x1f, 0x9b, 0x3c, 0xb3, 0xbd, 0x26, 0xc3, 0xb9, 0x4f, 0x0f, 0x2b, + 0x46, 0x3e, 0x10, 0xf1, 0x52, 0x55, 0x35, 0x48, 0xe8, 0x3c, 0xba, 0x8f, + 0xdb, 0xc2, 0x16, 0x9e, 0x64, 0x04, 0xfd, 0x6f, 0x5f, 0x0b, 0x62, 0xa6, + 0x07, 0xf2, 0xbc, 0x4b, 0xf5, 0x70, 0xde, 0x29, 0x40, 0x3d, 0x25, 0x0c, + 0x05, 0x09, 0x58, 0xe9, 0x44, 0x21, 0xce, 0xba, 0x75, 0x4a, 0x21, 0xbb, + 0x9f, 0x58, 0xbd, 0xd1, 0xe5, 0x62, 0xd1, 0x92, 0x6d, 0x86, 0x31, 0x7f, + 0xd1, 0x9c, 0xd4, 0x8b, 0xc2, 0x3a, 0xc5, 0xff, 0xe8, 0x72, 0x30, 0x3c, + 0xd7, 0xde, 0x28, 0x1d, 0x62, 0xa0, 0x88, 0xfe, 0xcf, 0xab, 0x48, 0xdc, + 0x68, 0x5c, 0x5f, 0xdd, 0x4e, 0x32, 0x98, 0x96, 0x2f, 0x4b, 0x12, 0xc5, + 0xf6, 0x7d, 0xbc, 0xb1, 0x6e, 0xb7, 0x0f, 0xbb, 0xe6, 0x24, 0x37, 0x7f, + 0x75, 0xc8, 0xd1, 0xbd, 0x9d, 0x4b, 0x17, 0x75, 0xff, 0x58, 0xbf, 0xfa, + 0x4e, 0x52, 0x64, 0x50, 0x9d, 0x6c, 0xb1, 0x7f, 0xfa, 0x74, 0x28, 0xa2, + 0x7f, 0xb9, 0xd8, 0x6b, 0x17, 0xf6, 0x1c, 0xc8, 0x8a, 0x25, 0x8b, 0xfa, + 0x41, 0xc9, 0xd0, 0xd6, 0x2f, 0xcd, 0xee, 0x4c, 0x7a, 0xc5, 0x0d, 0x11, + 0x5f, 0x31, 0x22, 0xeb, 0xfd, 0xc7, 0x3c, 0xef, 0x87, 0x58, 0xbf, 0x07, + 0xd5, 0x24, 0x05, 0x8b, 0xfb, 0x4c, 0x0e, 0x6a, 0x56, 0x2b, 0xe7, 0xb5, + 0xc2, 0xcb, 0xe8, 0x06, 0x16, 0x2c, 0x5f, 0xff, 0xf8, 0xbd, 0xc9, 0x78, + 0x67, 0x51, 0x7a, 0x7f, 0x26, 0x8a, 0x7a, 0x96, 0x2f, 0x75, 0x0e, 0x56, + 0x2b, 0x11, 0x6c, 0xc4, 0xa2, 0x71, 0xbf, 0x0b, 0xd1, 0x49, 0xab, 0x17, + 0xfd, 0x3b, 0x72, 0x27, 0x3b, 0x44, 0xb1, 0x43, 0x56, 0x8f, 0xba, 0x3b, + 0xc3, 0x5a, 0x3c, 0xbe, 0x28, 0x47, 0x7e, 0x1b, 0x04, 0x5d, 0xd4, 0x57, + 0x7f, 0xff, 0xf6, 0x75, 0x13, 0x6f, 0xd5, 0x19, 0xc7, 0x08, 0xb3, 0x86, + 0x37, 0x85, 0x2b, 0x16, 0xfa, 0xc5, 0x9d, 0x62, 0x8d, 0x34, 0x60, 0x12, + 0xad, 0x23, 0x07, 0x90, 0x9f, 0xbf, 0xff, 0xfc, 0x19, 0x92, 0xff, 0x9e, + 0xa9, 0x3c, 0x7b, 0xff, 0x01, 0xc3, 0x0c, 0xfc, 0x72, 0xc5, 0xfd, 0xbb, + 0x6b, 0x6c, 0x09, 0x62, 0xb1, 0x1b, 0xdd, 0x94, 0x3c, 0x21, 0x6f, 0xa2, + 0xf3, 0x0d, 0x62, 0xfe, 0x96, 0xdb, 0x60, 0xce, 0xb1, 0x4c, 0x7a, 0xa4, + 0x49, 0x7f, 0xfe, 0xfe, 0x16, 0x1b, 0xf6, 0x87, 0xc2, 0x60, 0xce, 0xb1, + 0x6e, 0xd6, 0x2f, 0xfa, 0x5f, 0x98, 0xff, 0x9f, 0x2c, 0x54, 0x0f, 0x2b, + 0xe2, 0x77, 0xf4, 0x3f, 0x9e, 0xfb, 0xac, 0x5f, 0x6e, 0xcd, 0xba, 0xa4, + 0xd6, 0x2f, 0xf3, 0xef, 0x9a, 0x83, 0x7d, 0x62, 0xff, 0xd1, 0xfc, 0x73, + 0xf3, 0xf2, 0x5e, 0x58, 0xbf, 0x37, 0x89, 0x80, 0xb1, 0x7c, 0xfa, 0xfb, + 0x18, 0x89, 0xdc, 0x34, 0xe2, 0x15, 0xff, 0x31, 0xf8, 0xf9, 0xd1, 0xb4, + 0xb1, 0x7c, 0xfa, 0x8f, 0x1a, 0xc5, 0x41, 0x53, 0x33, 0xc2, 0x8a, 0x3c, + 0x8b, 0x45, 0xdf, 0x86, 0x71, 0x23, 0x74, 0x3a, 0xbf, 0x64, 0x1f, 0xe2, + 0x58, 0xbf, 0x9a, 0x31, 0xf6, 0xf0, 0x16, 0x2e, 0x3f, 0x45, 0x8a, 0x23, + 0xcc, 0x11, 0x95, 0xf0, 0xc4, 0xdb, 0x2c, 0x5f, 0xe1, 0x3f, 0xf6, 0x62, + 0x1a, 0xc5, 0x49, 0xec, 0x40, 0x92, 0xef, 0x4a, 0xc5, 0xff, 0x89, 0xb5, + 0x31, 0x19, 0x9a, 0x75, 0x8b, 0xe7, 0xd9, 0xb8, 0xb1, 0x7f, 0xfa, 0x62, + 0xd3, 0x82, 0x5f, 0xa8, 0x79, 0xc5, 0x8b, 0x73, 0xe7, 0xe0, 0x44, 0x77, + 0xf3, 0x9d, 0xa2, 0xcf, 0xac, 0x5f, 0xf8, 0x26, 0x26, 0xe7, 0xd8, 0x1c, + 0x58, 0xbe, 0xe7, 0x24, 0xeb, 0x15, 0x27, 0xc4, 0xc7, 0xf5, 0xda, 0x73, + 0xae, 0x2f, 0x14, 0x2b, 0xce, 0x4f, 0xf8, 0x48, 0x5f, 0x67, 0x51, 0x79, + 0x62, 0xe9, 0x09, 0x62, 0x80, 0x6f, 0x42, 0x25, 0xbf, 0xc2, 0x2c, 0xea, + 0x70, 0x9d, 0x62, 0xfb, 0x8c, 0x5b, 0xac, 0x57, 0xcf, 0x67, 0xa8, 0xda, + 0xff, 0x17, 0x9c, 0xd2, 0x63, 0xac, 0x5f, 0xd2, 0x40, 0xea, 0xcd, 0x96, + 0x29, 0x8f, 0x90, 0x23, 0x3b, 0xe6, 0xea, 0x9d, 0x2c, 0x57, 0xcf, 0x1c, + 0x22, 0x2b, 0xa7, 0xcb, 0x17, 0xff, 0x4f, 0x83, 0xf3, 0x90, 0xa1, 0x9c, + 0x58, 0xa9, 0x4f, 0x2b, 0x1e, 0xde, 0x1a, 0x11, 0x11, 0xe8, 0x5e, 0xff, + 0xba, 0x49, 0x7a, 0x30, 0x2c, 0xfa, 0xc5, 0xd2, 0x75, 0x8a, 0xc3, 0xd6, + 0xd1, 0xfd, 0xfd, 0xfc, 0xe4, 0xed, 0xd4, 0xb1, 0x7f, 0xf8, 0x72, 0x72, + 0x93, 0x22, 0x84, 0xeb, 0x65, 0x8b, 0x80, 0x35, 0x8b, 0xed, 0xd9, 0xb7, + 0x54, 0x90, 0x65, 0xff, 0xef, 0xcf, 0xdc, 0xdc, 0xdf, 0xf2, 0x4c, 0xb1, + 0x5a, 0x3f, 0xbe, 0x18, 0xdf, 0x66, 0xf9, 0xda, 0xc5, 0xa3, 0x25, 0x32, + 0x61, 0xa6, 0xe4, 0x24, 0xfe, 0x45, 0x7e, 0xd8, 0x3d, 0xa7, 0x65, 0x8a, + 0x81, 0xfb, 0xb2, 0x55, 0xff, 0x7b, 0xf9, 0x0f, 0xb1, 0x0d, 0x62, 0xff, + 0x45, 0x26, 0xc7, 0xb0, 0x5e, 0x58, 0xa2, 0x3f, 0x3f, 0x1c, 0xd6, 0x2a, + 0x84, 0x68, 0xf3, 0xc5, 0x09, 0x4b, 0xe7, 0xdb, 0x34, 0xb1, 0x7f, 0xf0, + 0x03, 0xf8, 0x41, 0xf8, 0x3e, 0xa6, 0x02, 0xc5, 0xfe, 0xea, 0x60, 0x46, + 0x4f, 0x02, 0x58, 0xae, 0xd1, 0x59, 0xa2, 0x3f, 0xa7, 0x5e, 0x8a, 0x7c, + 0xb1, 0x7c, 0xfe, 0x9e, 0x2c, 0x5f, 0x0b, 0xd3, 0xc5, 0x8b, 0xba, 0xa5, + 0x62, 0xa5, 0x15, 0xd8, 0x63, 0xf1, 0xe2, 0x22, 0x11, 0x1d, 0xb7, 0x58, + 0xbf, 0xbc, 0xe3, 0xc2, 0x82, 0xc5, 0xff, 0x0e, 0x75, 0xb0, 0x8c, 0xe4, + 0x16, 0x2f, 0x87, 0xfc, 0x09, 0x62, 0xb0, 0xf8, 0x5c, 0xf6, 0xf6, 0xb3, + 0xcb, 0x17, 0xfb, 0x3f, 0x9e, 0xfb, 0x1d, 0x62, 0xfe, 0xc2, 0xdd, 0x88, + 0x0b, 0x14, 0x62, 0x67, 0xd8, 0x27, 0xbc, 0x23, 0x98, 0x80, 0x87, 0x78, + 0x67, 0x70, 0x1d, 0x62, 0xf1, 0xb3, 0xc5, 0x8b, 0xfd, 0xe2, 0xc0, 0x31, + 0x01, 0x62, 0xf3, 0x16, 0xf8, 0x7a, 0x01, 0x8f, 0x51, 0xa8, 0x9a, 0x13, + 0x3d, 0xfe, 0x84, 0xeb, 0x69, 0xd6, 0xcb, 0x17, 0xfb, 0xb8, 0x4e, 0x78, + 0xcc, 0x58, 0xbd, 0xbc, 0xee, 0xb1, 0x52, 0x88, 0xac, 0x36, 0x63, 0x5b, + 0xdc, 0x9d, 0x2c, 0x5f, 0x67, 0x51, 0x01, 0x62, 0xa2, 0x3c, 0x23, 0x8e, + 0xde, 0xc3, 0xba, 0xc5, 0xff, 0xe7, 0xe6, 0xc1, 0xf9, 0xc8, 0x50, 0xce, + 0x2c, 0x5e, 0x73, 0x4e, 0xb1, 0x7f, 0xa7, 0x7f, 0x14, 0xe7, 0x6b, 0x14, + 0x34, 0x4f, 0x69, 0x30, 0xe3, 0xd7, 0xbd, 0x9f, 0x58, 0xbf, 0x8b, 0xd3, + 0xa7, 0x3a, 0xc5, 0xff, 0x9f, 0xc2, 0xd3, 0x70, 0xfe, 0xe2, 0xc5, 0x49, + 0xf6, 0xb1, 0x6d, 0xde, 0x75, 0x8b, 0xff, 0xec, 0x03, 0x6b, 0x3a, 0x60, + 0xf0, 0xf3, 0xba, 0xc5, 0xdb, 0x75, 0xeb, 0x15, 0x2a, 0x8f, 0x46, 0x47, + 0x90, 0xba, 0x34, 0xc3, 0xf0, 0x8a, 0x62, 0x02, 0x17, 0x12, 0x8d, 0xc7, + 0x89, 0x62, 0xf8, 0x02, 0x28, 0x96, 0x2e, 0x7d, 0xd6, 0x2a, 0x4d, 0xe4, + 0x71, 0x25, 0xbe, 0x61, 0xfc, 0x46, 0x2a, 0xdf, 0xc5, 0x02, 0xcc, 0x02, + 0xc5, 0xfd, 0xae, 0x66, 0xa7, 0x8b, 0x16, 0x02, 0xc5, 0xb6, 0x58, 0xa9, + 0x34, 0xb8, 0x25, 0x6f, 0x2c, 0x5b, 0x87, 0x36, 0x3e, 0x1f, 0xa9, 0x46, + 0xbb, 0x96, 0x34, 0x21, 0x2f, 0xd1, 0x01, 0x8a, 0x25, 0x8b, 0x89, 0xd6, + 0x2a, 0x4f, 0x03, 0x72, 0xab, 0xfe, 0x29, 0x3c, 0xb8, 0xf0, 0xeb, 0x17, + 0xcc, 0x0c, 0xd2, 0xc5, 0xfe, 0x07, 0x35, 0x30, 0x6d, 0x2c, 0x5f, 0x4c, + 0x60, 0xc6, 0xb1, 0x7f, 0xb0, 0x5b, 0xfe, 0x75, 0x8b, 0x17, 0xfd, 0xa9, + 0x08, 0xb0, 0x6f, 0xa5, 0x8b, 0xff, 0xec, 0xff, 0xd9, 0xfd, 0x25, 0x9f, + 0xcd, 0xd6, 0x2b, 0x15, 0x82, 0x9b, 0x18, 0x1b, 0xb9, 0x44, 0x45, 0xf3, + 0x76, 0x22, 0x23, 0x4e, 0x13, 0x08, 0xd2, 0x38, 0xe6, 0xff, 0xfd, 0x91, + 0x85, 0x8e, 0x53, 0x13, 0x10, 0x9f, 0x65, 0x8b, 0xf9, 0xfc, 0x28, 0x9f, + 0xcb, 0x14, 0x34, 0x42, 0xc4, 0xad, 0x7f, 0xf3, 0x75, 0x73, 0x3a, 0x89, + 0xbd, 0x9d, 0x4b, 0x17, 0xf9, 0xb6, 0x6c, 0xf6, 0x1d, 0x62, 0xff, 0xff, + 0xed, 0x01, 0x87, 0x3a, 0xea, 0xe6, 0x75, 0x10, 0x26, 0x20, 0xfa, 0x84, + 0x75, 0x8b, 0xff, 0xf9, 0xbd, 0x87, 0xc7, 0x8a, 0x1f, 0xc1, 0x8b, 0xdc, + 0x58, 0xbf, 0xfe, 0xf3, 0x04, 0x58, 0xe0, 0x8b, 0x3e, 0x19, 0x2c, 0x5f, + 0xff, 0x71, 0xf6, 0x6e, 0x31, 0x37, 0xbf, 0x31, 0x2c, 0x5f, 0xf9, 0x88, + 0x19, 0xe9, 0x27, 0x02, 0xc5, 0x4a, 0x76, 0xe3, 0x7e, 0xfa, 0xe7, 0x94, + 0x63, 0x94, 0x2f, 0xff, 0xfa, 0x0e, 0x13, 0x7e, 0x47, 0xbb, 0x6d, 0xe2, + 0xcd, 0xb5, 0x2b, 0x16, 0x8c, 0x8d, 0x9d, 0x0a, 0xe7, 0x5d, 0x9c, 0x75, + 0xd4, 0xf2, 0x65, 0xb2, 0x42, 0x51, 0x38, 0xe1, 0x13, 0x92, 0xa1, 0x8d, + 0x73, 0xdd, 0xd3, 0xb7, 0x97, 0x8e, 0xfa, 0x29, 0x4b, 0xba, 0x85, 0x21, + 0xe5, 0x52, 0xfe, 0x39, 0x56, 0x8e, 0x14, 0x10, 0xf6, 0x28, 0x57, 0x72, + 0x55, 0x67, 0xa5, 0xfb, 0x8a, 0x31, 0x90, 0x89, 0x23, 0x93, 0x03, 0x8f, + 0xab, 0xa9, 0x36, 0xfb, 0xff, 0xcd, 0x96, 0x2f, 0xff, 0x64, 0x7b, 0xe1, + 0xf3, 0xf8, 0xc5, 0xba, 0xc5, 0xc6, 0xc6, 0x31, 0xf7, 0x91, 0x25, 0xff, + 0x9a, 0x11, 0x99, 0xad, 0xd9, 0xb7, 0x54, 0x91, 0x65, 0xfe, 0x13, 0xc1, + 0xfe, 0xfd, 0x16, 0x2d, 0x18, 0x74, 0x42, 0xf1, 0x42, 0xff, 0x46, 0x66, + 0xb7, 0x66, 0xdd, 0x52, 0x75, 0x17, 0xff, 0xff, 0xfe, 0x8d, 0x36, 0xeb, + 0x91, 0xaa, 0x35, 0xf5, 0xfd, 0x7f, 0x5c, 0x30, 0xcf, 0xc7, 0x46, 0x6d, + 0xd7, 0x58, 0xd3, 0xae, 0x4f, 0x59, 0xd7, 0x80, 0xc3, 0x3f, 0x1c, 0xb1, + 0x53, 0x1a, 0x65, 0x7c, 0x25, 0x38, 0xe4, 0x21, 0x37, 0x8c, 0x71, 0xe9, + 0x65, 0x67, 0xa6, 0xab, 0xff, 0x30, 0x5b, 0xa6, 0x9c, 0x0d, 0x05, 0xa1, + 0xf1, 0x29, 0x49, 0x5c, 0x85, 0xaf, 0x8b, 0x23, 0x91, 0x6f, 0xb7, 0x66, + 0xdd, 0x52, 0x10, 0x97, 0x4e, 0x96, 0x2b, 0x47, 0x91, 0xe3, 0x1b, 0x6c, + 0xb1, 0x7f, 0xa4, 0xf2, 0xe3, 0xc3, 0xac, 0x5e, 0xfb, 0x92, 0xc5, 0xd8, + 0x35, 0x8b, 0x6e, 0xb1, 0x5b, 0x9e, 0x37, 0xc7, 0x08, 0x5e, 0xfb, 0x3a, + 0x3e, 0x96, 0x2f, 0xb3, 0x61, 0x12, 0xc5, 0xf3, 0x7c, 0x72, 0xb1, 0x7c, + 0xfa, 0xce, 0xd6, 0x2b, 0x13, 0x68, 0x34, 0x8b, 0x71, 0x3e, 0xde, 0x23, + 0xcb, 0xfe, 0x49, 0xe2, 0x38, 0xe2, 0x2b, 0xff, 0xb6, 0xc0, 0xa3, 0x38, + 0x31, 0x36, 0xa0, 0xb1, 0x7f, 0xff, 0x8b, 0x3d, 0xc3, 0xcc, 0x63, 0x78, + 0xb2, 0x1f, 0x68, 0x2c, 0x5f, 0x14, 0x83, 0x8b, 0x17, 0xf6, 0x85, 0xfe, + 0x98, 0x35, 0x8b, 0xd9, 0x83, 0x58, 0xbf, 0xff, 0xfd, 0xe7, 0x21, 0x43, + 0x38, 0x59, 0xb0, 0x70, 0x33, 0x82, 0x01, 0xe6, 0x0b, 0x17, 0x7a, 0x32, + 0x24, 0x75, 0x68, 0x88, 0x8c, 0x43, 0x1c, 0xa8, 0xc5, 0x4b, 0xd0, 0x7a, + 0x1a, 0x5e, 0x46, 0x99, 0x7f, 0xf4, 0x67, 0x5f, 0x25, 0xe0, 0xce, 0x59, + 0xb2, 0xc5, 0xa3, 0x96, 0x2f, 0xa7, 0xf2, 0x75, 0x8b, 0xed, 0xd9, 0xb7, + 0x54, 0x86, 0xc5, 0x6e, 0x7a, 0x7a, 0x22, 0xbf, 0xf7, 0x33, 0xef, 0xc1, + 0x6c, 0x19, 0xd6, 0x2f, 0x69, 0xb6, 0x58, 0xb4, 0x60, 0xd1, 0xd7, 0x8d, + 0x1c, 0x23, 0xf2, 0x15, 0xfe, 0x8c, 0xcd, 0x6e, 0xcd, 0xba, 0xa4, 0x9b, + 0x2e, 0x68, 0x2c, 0x5f, 0x4f, 0x49, 0x25, 0x8b, 0xed, 0xd9, 0xb7, 0x54, + 0x94, 0x05, 0x0c, 0xfa, 0xf7, 0x17, 0xd1, 0x1d, 0xfa, 0x40, 0xf3, 0x05, + 0x8b, 0x04, 0xb1, 0x4b, 0x16, 0xce, 0xcb, 0xf8, 0x84, 0xef, 0xbf, 0xf9, + 0x1a, 0xc5, 0xa3, 0x31, 0x18, 0x0e, 0x61, 0xf4, 0x60, 0xc9, 0xef, 0xf4, + 0x66, 0x6b, 0x76, 0x6d, 0xd5, 0x25, 0x31, 0x70, 0x1d, 0x62, 0xfc, 0x2e, + 0xd8, 0x5a, 0x58, 0xb7, 0x16, 0x2f, 0x09, 0xf4, 0xb1, 0x7f, 0x7f, 0x3a, + 0x9f, 0x02, 0x58, 0xbe, 0xdd, 0x9b, 0x75, 0x49, 0x60, 0x5f, 0x7a, 0x7b, + 0x82, 0xc5, 0x44, 0x88, 0x6d, 0x18, 0x9c, 0xc6, 0xf8, 0x21, 0x8b, 0x4b, + 0x16, 0x1a, 0xc5, 0x39, 0xb7, 0xd1, 0x2d, 0xb6, 0x58, 0xb8, 0x38, 0x2c, + 0x5e, 0x62, 0xdd, 0x62, 0xa4, 0xf2, 0x40, 0x27, 0xe1, 0x9b, 0xb8, 0x4b, + 0x17, 0x0c, 0xd5, 0x8b, 0xd2, 0x07, 0x58, 0xb8, 0xfc, 0x58, 0xbf, 0x34, + 0x3c, 0xfb, 0x2c, 0x5f, 0xb9, 0xc2, 0xc0, 0x2c, 0x58, 0x6b, 0x14, 0xe7, + 0xc6, 0xc5, 0x21, 0x94, 0x5c, 0xf1, 0xcb, 0x16, 0xd2, 0xc5, 0xe7, 0x8e, + 0x69, 0x35, 0x82, 0x1a, 0xbf, 0xd1, 0x99, 0xad, 0xd9, 0xb7, 0x54, 0x87, + 0xe5, 0xc2, 0xe2, 0xc5, 0xe2, 0x91, 0xac, 0x5f, 0x4c, 0x1b, 0xcb, 0x15, + 0x28, 0xce, 0x81, 0x98, 0xd1, 0x5c, 0x60, 0x87, 0x2f, 0x61, 0x41, 0x62, + 0xf3, 0x94, 0x16, 0x2b, 0x0d, 0xc7, 0x07, 0x2d, 0x2b, 0x16, 0xd9, 0x62, + 0xfc, 0xfc, 0xf0, 0x99, 0x62, 0xf7, 0xc5, 0xda, 0xc5, 0xed, 0x48, 0x16, + 0x2e, 0x36, 0x56, 0x2f, 0x37, 0x7c, 0x58, 0xa9, 0x45, 0x68, 0xc4, 0xf7, + 0x28, 0x38, 0xff, 0x87, 0x42, 0x18, 0xb4, 0x7a, 0xc5, 0x41, 0x32, 0xbc, + 0x85, 0xf1, 0xab, 0x17, 0xa2, 0x16, 0x96, 0x2c, 0x4b, 0x17, 0xde, 0x29, + 0x3a, 0xc5, 0x0c, 0xd9, 0xb8, 0x8d, 0xfe, 0x29, 0x03, 0x78, 0x52, 0xb1, + 0x52, 0x8a, 0x4f, 0xa9, 0x78, 0x82, 0xfb, 0xe5, 0x9b, 0x2c, 0x5f, 0xdd, + 0xc1, 0xa0, 0xe4, 0xb1, 0x7a, 0x4a, 0x25, 0x8b, 0xd0, 0x9e, 0xd6, 0x2e, + 0x60, 0x2c, 0x54, 0x46, 0xd7, 0x43, 0xd7, 0xd3, 0xc7, 0x89, 0x62, 0xfd, + 0x9d, 0x3e, 0xd0, 0x58, 0xa9, 0x4c, 0x4b, 0x08, 0xcd, 0x2e, 0x75, 0x2d, + 0x11, 0x11, 0x1d, 0xe3, 0x5b, 0xcb, 0x17, 0x66, 0x96, 0x2f, 0x0b, 0x5b, + 0x2c, 0x5b, 0xcb, 0x16, 0xea, 0x58, 0xac, 0x3c, 0x66, 0x1f, 0x0c, 0x4a, + 0xe7, 0xf2, 0xc5, 0x2c, 0x51, 0xcd, 0x1f, 0x50, 0xbd, 0xb8, 0xb1, 0x47, + 0x36, 0xc1, 0x92, 0x5d, 0xef, 0x2c, 0x5a, 0x33, 0xae, 0x32, 0x56, 0xa4, + 0x5f, 0x62, 0xa1, 0x89, 0x64, 0x28, 0xf7, 0x68, 0xed, 0xa5, 0xcb, 0xa3, + 0xc5, 0xf4, 0x32, 0x71, 0xcf, 0xbd, 0xb4, 0x65, 0x00, 0x7f, 0x28, 0xd2, + 0xf9, 0x0d, 0xaf, 0x46, 0x82, 0x25, 0x50, 0x87, 0xa3, 0x97, 0x43, 0x84, + 0x3f, 0x51, 0x15, 0xff, 0xe8, 0xc3, 0xb4, 0x23, 0x33, 0x5b, 0xb3, 0x6e, + 0xa9, 0x1b, 0xcb, 0xff, 0x8e, 0xd0, 0x8c, 0xcd, 0x6e, 0xcd, 0xba, 0xa4, + 0x7e, 0x2f, 0xba, 0xd8, 0xbd, 0x8b, 0x17, 0xff, 0x70, 0x5a, 0x01, 0x8c, + 0x42, 0xcf, 0xac, 0x5e, 0xeb, 0x23, 0x7e, 0xb1, 0x62, 0xff, 0xff, 0xbe, + 0x2f, 0x13, 0x1b, 0xdf, 0xb5, 0x39, 0xdb, 0x3f, 0x6c, 0xb1, 0x46, 0x23, + 0x73, 0xac, 0x46, 0xc2, 0xda, 0x8d, 0xd3, 0x3a, 0xeb, 0x23, 0x05, 0xbb, + 0xae, 0xfa, 0xc5, 0x8b, 0xfb, 0xf9, 0x14, 0xf7, 0xc5, 0x8b, 0xf1, 0xe4, + 0xf2, 0x1a, 0xc5, 0xf6, 0x66, 0xb8, 0xb1, 0x46, 0x22, 0x7f, 0xac, 0x24, + 0x63, 0x00, 0x14, 0xdf, 0xf7, 0x5a, 0xd0, 0xfb, 0xf4, 0xcd, 0x96, 0x2f, + 0xe0, 0xc3, 0xef, 0xab, 0x9d, 0xac, 0x54, 0x6e, 0x7f, 0x1d, 0x62, 0x0d, + 0xe8, 0x4f, 0x6b, 0x17, 0xff, 0xfd, 0xbf, 0xde, 0x2f, 0xc9, 0x19, 0x9f, + 0x6f, 0xbe, 0xb5, 0x2b, 0x16, 0x82, 0xc5, 0x75, 0x87, 0xf4, 0xcd, 0x17, + 0xf4, 0x69, 0x2f, 0xbc, 0x9d, 0x62, 0xff, 0xf7, 0x05, 0xa0, 0x18, 0x19, + 0x31, 0xf0, 0xeb, 0x16, 0xc5, 0x8a, 0x30, 0xf7, 0xbc, 0x9b, 0x63, 0xac, + 0x57, 0x58, 0x6d, 0x5c, 0x8e, 0xe7, 0x3a, 0xc5, 0x46, 0xea, 0xde, 0x7a, + 0xc8, 0x69, 0xf5, 0xb0, 0xba, 0x8d, 0x0b, 0x3a, 0xee, 0x13, 0x1d, 0x70, + 0x9a, 0x35, 0x43, 0x1b, 0x44, 0xb7, 0xd2, 0x68, 0xe5, 0x62, 0xff, 0x0f, + 0x3a, 0x10, 0x83, 0x95, 0x8b, 0xec, 0xdd, 0x89, 0x62, 0xf9, 0xbb, 0x84, + 0xac, 0x5b, 0xac, 0x93, 0xfb, 0x23, 0x60, 0x88, 0xaf, 0xf8, 0xb0, 0x36, + 0xd0, 0x0f, 0x8b, 0x17, 0xdd, 0x66, 0xdc, 0x02, 0xc5, 0xf9, 0xb6, 0xf0, + 0x8d, 0x58, 0xbf, 0x6f, 0xa2, 0x98, 0x2c, 0x54, 0x6c, 0x8b, 0x78, 0xd6, + 0x73, 0xa2, 0xa6, 0x2b, 0xbf, 0xf6, 0x43, 0xf2, 0x42, 0xe7, 0xdd, 0x62, + 0xe0, 0xce, 0xb1, 0x7f, 0xf3, 0x3f, 0xa1, 0x25, 0xee, 0x6d, 0x2b, 0x17, + 0xf6, 0x1a, 0xfe, 0x29, 0x58, 0xa8, 0xd1, 0x19, 0x1b, 0x9f, 0x7c, 0x66, + 0x39, 0x12, 0xfa, 0x61, 0xa9, 0x58, 0xbc, 0x3c, 0x35, 0x62, 0xe8, 0x1d, + 0x62, 0xf4, 0x6b, 0x8d, 0x23, 0x65, 0x8b, 0xf3, 0x1f, 0x53, 0xc5, 0x8a, + 0xeb, 0x0f, 0x5b, 0x85, 0xd7, 0xc2, 0xef, 0xec, 0xb1, 0x7f, 0xdd, 0x1f, + 0x7e, 0xb3, 0x22, 0x9f, 0x2c, 0x5f, 0xb5, 0x3f, 0x14, 0xac, 0x5c, 0x17, + 0xd6, 0x2f, 0xba, 0xc8, 0x75, 0x9b, 0x2c, 0x5f, 0xbf, 0x9e, 0x91, 0xac, + 0x5f, 0xb2, 0x28, 0x4f, 0x6b, 0x17, 0xfb, 0x35, 0xf7, 0x8a, 0x07, 0x58, + 0xa3, 0x17, 0x45, 0x63, 0x78, 0x4f, 0x75, 0x90, 0xf0, 0xeb, 0x63, 0x0f, + 0x8d, 0x11, 0xba, 0xec, 0x8a, 0x35, 0x0f, 0x46, 0xb6, 0xed, 0x89, 0xf0, + 0x91, 0xd0, 0xa2, 0x28, 0xd0, 0xcb, 0x17, 0x91, 0x40, 0x65, 0x57, 0x05, + 0xa5, 0x8b, 0xf7, 0xbf, 0x9d, 0x31, 0x62, 0xb4, 0x78, 0x7c, 0x19, 0xbe, + 0xc3, 0xbf, 0x96, 0x2f, 0xee, 0x8f, 0xde, 0x66, 0xcb, 0x17, 0x61, 0x2c, + 0x56, 0x1e, 0x3f, 0x0c, 0x6f, 0xe8, 0xda, 0x34, 0x3c, 0xe7, 0x96, 0x2f, + 0xee, 0xb1, 0xe3, 0xbe, 0xfd, 0x7a, 0xc5, 0xfd, 0x9a, 0x7f, 0x70, 0xeb, + 0x15, 0x1a, 0xcf, 0xa7, 0x87, 0x77, 0x16, 0xeb, 0x17, 0x8f, 0x21, 0xac, + 0x5d, 0x21, 0xac, 0x5e, 0x88, 0xfc, 0x58, 0xad, 0xcd, 0xbf, 0x06, 0x2f, + 0xc5, 0xef, 0xb9, 0xd6, 0x2f, 0xa2, 0x13, 0x06, 0xb1, 0x52, 0x79, 0xac, + 0x51, 0x78, 0xf3, 0xc5, 0x8b, 0xc4, 0xdd, 0x16, 0x2f, 0x3c, 0x81, 0x62, + 0xed, 0xf7, 0x58, 0xbf, 0xf6, 0x0f, 0xee, 0x7c, 0xe0, 0x8e, 0xb1, 0x7f, + 0xb7, 0xfb, 0xfb, 0x30, 0xeb, 0x17, 0x66, 0x96, 0x2d, 0xba, 0xe5, 0x02, + 0x2b, 0x0d, 0xbf, 0x41, 0x7a, 0xeb, 0x15, 0xd7, 0x75, 0xa4, 0x51, 0xb3, + 0x4c, 0x6a, 0x21, 0x8d, 0x70, 0xa1, 0x92, 0x8c, 0x18, 0x75, 0x58, 0x9b, + 0xf4, 0x40, 0x71, 0xd6, 0x1e, 0x00, 0xe1, 0x0d, 0x70, 0xff, 0xcd, 0x77, + 0xfb, 0x99, 0xde, 0xe2, 0xee, 0x56, 0x2f, 0xba, 0xd8, 0xec, 0xed, 0x62, + 0xfe, 0xfc, 0xbe, 0x9f, 0x4b, 0x15, 0x1b, 0x9e, 0xce, 0xe5, 0x97, 0xfc, + 0x7f, 0x13, 0x00, 0x02, 0xe2, 0xc5, 0xfc, 0x42, 0x89, 0x8e, 0xeb, 0x17, + 0xdb, 0x7d, 0xe3, 0xd6, 0x2d, 0xd6, 0x62, 0x23, 0xdc, 0xe9, 0x8b, 0xaf, + 0xd1, 0xbf, 0x5b, 0xb6, 0x04, 0xb1, 0x7f, 0xc6, 0x7b, 0xf8, 0x7c, 0xd6, + 0x2c, 0x5f, 0xdd, 0x75, 0x8d, 0xe3, 0x7e, 0xb7, 0x92, 0xb1, 0x7e, 0x8d, + 0x0d, 0x37, 0x23, 0xd6, 0x2f, 0xef, 0x39, 0x05, 0x84, 0xb1, 0x77, 0x04, + 0xb1, 0x78, 0x01, 0xf9, 0x63, 0x0b, 0x8b, 0xfc, 0x73, 0x23, 0xb0, 0x7f, + 0x75, 0x8b, 0x41, 0x62, 0xfb, 0xad, 0xce, 0x75, 0x8b, 0x15, 0xa3, 0x7e, + 0xc2, 0x57, 0x74, 0xdd, 0x72, 0x80, 0x96, 0xfa, 0xc5, 0xc0, 0x02, 0xc5, + 0x46, 0xea, 0xf0, 0xba, 0xc8, 0x48, 0x75, 0xb0, 0xb7, 0x8d, 0x0e, 0x23, + 0x63, 0x5e, 0xbb, 0x3a, 0x8d, 0x68, 0xd8, 0x66, 0xc8, 0xa0, 0x2d, 0x27, + 0x7f, 0x10, 0x08, 0xa0, 0x31, 0x2b, 0xd1, 0xb1, 0xce, 0xb1, 0x7d, 0x1b, + 0x75, 0xbe, 0x3a, 0xc5, 0xfe, 0xfc, 0x9e, 0x70, 0x6e, 0xb1, 0x79, 0x86, + 0xeb, 0x17, 0xff, 0x13, 0x7b, 0x85, 0x3a, 0xd3, 0x0d, 0x62, 0xff, 0xd8, + 0xe5, 0x9c, 0x7d, 0x60, 0x16, 0x2a, 0x35, 0xa3, 0x36, 0x06, 0x58, 0x39, + 0xc4, 0x3b, 0xfb, 0xef, 0xe2, 0x98, 0x96, 0x2e, 0x6c, 0x58, 0xad, 0xcf, + 0x13, 0x45, 0xd7, 0xcc, 0x3c, 0x3a, 0xc5, 0xfa, 0x35, 0xf5, 0x90, 0xd7, + 0x52, 0xc5, 0xd2, 0x4b, 0x17, 0xd1, 0x33, 0x41, 0x62, 0xb7, 0x37, 0x2e, + 0x2d, 0x7f, 0xee, 0x93, 0xf7, 0x98, 0xa2, 0x9d, 0xd6, 0x2f, 0x16, 0x01, + 0x62, 0xfe, 0x71, 0x8a, 0x75, 0x05, 0x8b, 0xc5, 0x1a, 0x6e, 0xb1, 0x51, + 0xba, 0xb2, 0xbe, 0xb0, 0x8f, 0xad, 0x87, 0xdc, 0x69, 0x08, 0x6e, 0xb8, + 0x47, 0x1a, 0xc8, 0xb1, 0xc5, 0xc8, 0x4e, 0x86, 0xc3, 0x9d, 0x0b, 0xaf, + 0xb8, 0x2d, 0x01, 0x62, 0xfe, 0xeb, 0x7d, 0xde, 0xee, 0x6a, 0xc5, 0xf8, + 0xcc, 0x1b, 0x41, 0x62, 0xfa, 0x36, 0xd8, 0xfc, 0x58, 0xbf, 0xda, 0xfb, + 0x71, 0xc7, 0x8b, 0x17, 0xd2, 0x4f, 0xda, 0xc5, 0xb3, 0x0f, 0x56, 0x23, + 0x3b, 0xa7, 0xcb, 0x17, 0x68, 0xd5, 0x8b, 0xba, 0xe4, 0x68, 0xb0, 0x11, + 0x73, 0x7f, 0x13, 0x9b, 0xf6, 0x82, 0xc5, 0xff, 0xf3, 0x7a, 0x4b, 0x77, + 0x38, 0xc4, 0xda, 0x82, 0xc5, 0x75, 0xda, 0x2c, 0x4e, 0x66, 0x45, 0xd6, + 0xf2, 0xc5, 0xf8, 0x2f, 0x7a, 0x4e, 0xb1, 0x46, 0x26, 0xa7, 0x1a, 0x43, + 0x86, 0x4d, 0xb6, 0x12, 0xbf, 0xe6, 0xfb, 0xf4, 0x8c, 0x08, 0x20, 0x92, + 0x2f, 0xf7, 0xdb, 0xde, 0x66, 0x09, 0x62, 0xfb, 0x40, 0x93, 0xac, 0x5d, + 0x23, 0x58, 0xbf, 0x66, 0xed, 0xc7, 0x58, 0xbf, 0xdf, 0xc0, 0x01, 0xbb, + 0xe2, 0xc5, 0xff, 0xd9, 0xa7, 0xd9, 0x8e, 0xde, 0x14, 0xac, 0x5f, 0x3e, + 0xcc, 0x75, 0x8a, 0x31, 0x70, 0xeb, 0xac, 0x24, 0x8d, 0x0d, 0xe3, 0x62, + 0x9e, 0xbb, 0x7f, 0xeb, 0x91, 0xbd, 0x75, 0xd5, 0x26, 0x35, 0xa1, 0x61, + 0xa7, 0x64, 0x7f, 0x17, 0x62, 0x8e, 0x1a, 0xc7, 0x22, 0x5d, 0x06, 0x58, + 0xbf, 0xe8, 0x3b, 0x77, 0x02, 0x13, 0x2c, 0x5f, 0xff, 0xef, 0xbf, 0x26, + 0x19, 0xf7, 0xd7, 0xdb, 0x05, 0x9f, 0x58, 0xbf, 0xfe, 0xd4, 0xbf, 0xbf, + 0x83, 0x7e, 0x61, 0x01, 0x62, 0xdd, 0x68, 0xd1, 0xfb, 0x82, 0xec, 0x73, + 0xc5, 0xfb, 0xb9, 0x2b, 0x17, 0xfd, 0xc7, 0x2e, 0xfc, 0x53, 0x8b, 0x15, + 0x1b, 0xa2, 0x56, 0x08, 0xd8, 0x2f, 0x60, 0xd6, 0x2f, 0xba, 0xce, 0xb9, + 0xd7, 0x3a, 0xc5, 0x82, 0x2c, 0xef, 0xe8, 0xf9, 0xd3, 0x34, 0x16, 0x2f, + 0xdf, 0x76, 0x04, 0x6b, 0x58, 0xbd, 0x3d, 0xc1, 0x62, 0xba, 0xc4, 0xc2, + 0xfa, 0xe2, 0x3c, 0x6a, 0x48, 0xf1, 0x87, 0x51, 0x75, 0xfe, 0x8d, 0xca, + 0x46, 0x18, 0x38, 0xb1, 0x7f, 0xe8, 0xd3, 0xac, 0x88, 0xa4, 0x79, 0xdf, + 0x96, 0x2f, 0xd3, 0x1d, 0xd5, 0x14, 0x4b, 0x17, 0xa3, 0xb3, 0xeb, 0x15, + 0x11, 0xe8, 0xf8, 0xc6, 0xfb, 0x06, 0xd0, 0x58, 0xbf, 0x83, 0x3e, 0x16, + 0x47, 0xac, 0x5f, 0xd1, 0x42, 0x63, 0xe0, 0x75, 0x8a, 0xc3, 0xe4, 0x88, + 0xc6, 0xf4, 0x6f, 0xdf, 0x5d, 0xac, 0x5e, 0xe9, 0xa8, 0x2c, 0x5e, 0xd0, + 0xba, 0x96, 0x2f, 0x04, 0x11, 0xab, 0x15, 0x1b, 0xaa, 0x2e, 0x8d, 0x0e, + 0xa3, 0x68, 0x4e, 0x75, 0xc2, 0x3e, 0xba, 0xc2, 0x18, 0x88, 0xb8, 0x56, + 0x22, 0x00, 0x88, 0x6f, 0xff, 0xdd, 0x61, 0x37, 0xa7, 0x0a, 0x07, 0x9c, + 0x21, 0xac, 0x5f, 0xdd, 0x64, 0x1f, 0xde, 0x95, 0x8b, 0xe9, 0xd9, 0x83, + 0x58, 0xbd, 0x8e, 0x05, 0x8a, 0x73, 0xc0, 0x22, 0x4b, 0xfe, 0xeb, 0x20, + 0xfe, 0xfc, 0x91, 0xab, 0x17, 0x80, 0x6c, 0xac, 0x54, 0x6e, 0x7b, 0xbd, + 0x76, 0x7f, 0x7d, 0xd6, 0x05, 0xbf, 0x6b, 0x17, 0xb6, 0xcc, 0x58, 0xbc, + 0xdf, 0x75, 0x8b, 0xf3, 0xe8, 0x00, 0x95, 0x8b, 0xfd, 0xe8, 0x08, 0x6c, + 0x40, 0x58, 0xb9, 0xf6, 0x58, 0xbd, 0xd7, 0xb6, 0x96, 0x2a, 0x37, 0x54, + 0xe1, 0xd6, 0x2b, 0xf5, 0xae, 0x71, 0xb3, 0xef, 0x5c, 0x2e, 0x8d, 0x65, + 0x92, 0x3b, 0x01, 0xc6, 0x28, 0xf1, 0xa0, 0x86, 0x2f, 0x36, 0x7d, 0x62, + 0xff, 0x75, 0xbc, 0xfc, 0x94, 0xec, 0xb1, 0x74, 0x6d, 0x05, 0x8a, 0xeb, + 0x4f, 0x5b, 0xae, 0xce, 0x6f, 0xc5, 0x80, 0x0f, 0xb5, 0x8b, 0xf1, 0xff, + 0x21, 0x62, 0xc5, 0xff, 0x37, 0xbb, 0x87, 0xb3, 0x46, 0xac, 0x5f, 0xef, + 0x37, 0xf0, 0x5a, 0xd9, 0x62, 0xfd, 0x16, 0xf3, 0xdf, 0x96, 0x2f, 0xfc, + 0xfd, 0xf0, 0xb0, 0x73, 0x9a, 0x58, 0xb9, 0xc0, 0xb1, 0x5d, 0x62, 0x7c, + 0xb1, 0xa3, 0x97, 0x5c, 0x2e, 0x8d, 0x45, 0x51, 0xac, 0xa7, 0x0f, 0x1c, + 0xd4, 0x05, 0x84, 0x7d, 0x7f, 0xff, 0x75, 0xc3, 0x30, 0x9f, 0x59, 0xc6, + 0x23, 0x0c, 0xfc, 0x72, 0xc5, 0xfd, 0xfd, 0xfa, 0xce, 0x7d, 0xd6, 0x2f, + 0x46, 0x9d, 0x7f, 0x58, 0xb1, 0x7f, 0xfa, 0x37, 0x8b, 0xad, 0xeb, 0xb2, + 0x04, 0x6b, 0x30, 0xcf, 0xc7, 0x2c, 0x57, 0x5c, 0x44, 0xb8, 0x0b, 0x6f, + 0xff, 0xf0, 0x8c, 0x2c, 0xd6, 0x8f, 0xf9, 0x11, 0x18, 0x67, 0xe3, 0x96, + 0x2f, 0xfd, 0x33, 0x33, 0x33, 0x3d, 0xf1, 0x62, 0xf4, 0x53, 0xe5, 0x8b, + 0xa6, 0x64, 0xf6, 0xa2, 0x3c, 0xb8, 0xee, 0xb1, 0x7f, 0xfb, 0xf3, 0x17, + 0x7c, 0xce, 0xe3, 0xe6, 0x49, 0x62, 0xf3, 0xf7, 0x8b, 0x17, 0xed, 0x3e, + 0xcc, 0x74, 0x8b, 0x82, 0x09, 0x22, 0xb0, 0xf0, 0xc2, 0x29, 0xb0, 0x92, + 0x23, 0x0d, 0x15, 0xef, 0xe6, 0xeb, 0x15, 0x29, 0xab, 0xee, 0x59, 0xf1, + 0x70, 0x27, 0xf2, 0x10, 0x41, 0x92, 0xdf, 0x85, 0x1d, 0x22, 0xed, 0x62, + 0xe1, 0x41, 0x62, 0xff, 0xd3, 0xfc, 0x06, 0x0f, 0xed, 0x05, 0x8b, 0xc5, + 0x3d, 0x4b, 0x17, 0x8a, 0x63, 0xd6, 0x29, 0x8d, 0xf1, 0x0f, 0xdf, 0xe6, + 0xdb, 0x3a, 0x67, 0xb8, 0xb1, 0x7f, 0x42, 0x4f, 0x3a, 0xd2, 0xc5, 0x62, + 0x68, 0x91, 0xe5, 0xba, 0x18, 0x67, 0xc2, 0x1f, 0x11, 0xb5, 0xff, 0xfd, + 0xe7, 0x3e, 0x17, 0xb9, 0x26, 0xf0, 0x43, 0xfb, 0xac, 0x5f, 0x86, 0xe1, + 0x49, 0xd6, 0x2f, 0xf9, 0xe2, 0x67, 0x18, 0xbd, 0xc5, 0x8b, 0xfa, 0x06, + 0x71, 0xc5, 0xa5, 0x8b, 0xfe, 0x9e, 0x36, 0x9f, 0xdc, 0xc5, 0x8b, 0xff, + 0xfe, 0xfb, 0x1b, 0x23, 0x30, 0x07, 0x92, 0xf1, 0x60, 0x05, 0xc5, 0x8a, + 0xed, 0x1a, 0x00, 0x30, 0xe1, 0xc5, 0xff, 0xe6, 0x72, 0xc0, 0x19, 0x3a, + 0xda, 0x7c, 0xb1, 0x7f, 0xee, 0xa7, 0x8f, 0xfc, 0x53, 0x1e, 0xc7, 0x58, + 0xbf, 0xde, 0xfc, 0x96, 0xcf, 0xd1, 0x62, 0xfd, 0xcc, 0x84, 0x76, 0x2c, + 0x5c, 0x79, 0x30, 0xf8, 0x78, 0x6d, 0x7e, 0x9e, 0x48, 0x09, 0x62, 0xb0, + 0xf5, 0x4d, 0x2e, 0xbf, 0xff, 0x9e, 0x1c, 0x0c, 0xf8, 0x42, 0x83, 0x78, + 0x26, 0xed, 0x62, 0xff, 0x69, 0x81, 0x23, 0x6f, 0x2c, 0x5f, 0xe7, 0x29, + 0xdf, 0xf2, 0x75, 0x8b, 0xfe, 0x69, 0xf6, 0x7e, 0x5c, 0x0b, 0x15, 0x28, + 0xfb, 0x75, 0xee, 0x19, 0xf8, 0xce, 0x86, 0xaa, 0x87, 0xe9, 0x45, 0x0f, + 0xff, 0x46, 0x3b, 0x7e, 0x3b, 0x1f, 0x06, 0xb1, 0x7e, 0x2c, 0x35, 0xc6, + 0xb1, 0x7f, 0xde, 0xdf, 0xee, 0x45, 0x3d, 0xac, 0x54, 0xa2, 0x2b, 0x0a, + 0x18, 0xa2, 0xff, 0xfe, 0x81, 0x87, 0x16, 0x83, 0x8e, 0x62, 0xef, 0xc1, + 0x96, 0x2c, 0x5f, 0xf6, 0xd3, 0xc7, 0x8e, 0xcd, 0x4a, 0xc5, 0xff, 0xf6, + 0xb5, 0x27, 0xe0, 0xa7, 0xb3, 0x74, 0xdb, 0xac, 0x54, 0xa2, 0x41, 0x8f, + 0x2f, 0xe1, 0xe1, 0x6c, 0xfa, 0x58, 0xba, 0x7a, 0x96, 0x28, 0xc5, 0xeb, + 0xd9, 0x5c, 0x81, 0x4e, 0x46, 0x14, 0xf2, 0xb4, 0xbf, 0x0d, 0x36, 0x2d, + 0x28, 0x79, 0x88, 0x87, 0xa1, 0x75, 0xff, 0x14, 0x99, 0x14, 0x27, 0x5b, + 0x2c, 0x5f, 0xec, 0x1b, 0xf4, 0xe0, 0x37, 0x58, 0xbf, 0xff, 0xf6, 0x74, + 0x7f, 0x43, 0x01, 0xc2, 0xc0, 0x6a, 0x76, 0x6d, 0x6e, 0xb1, 0x74, 0xc1, + 0x91, 0x4d, 0xc3, 0x7b, 0xd9, 0xb4, 0xac, 0x5f, 0xff, 0x60, 0x33, 0xdc, + 0x7e, 0x85, 0x9e, 0xfb, 0xac, 0x5d, 0xee, 0x61, 0xf6, 0x90, 0xed, 0xff, + 0xfc, 0xe7, 0x7d, 0x0e, 0x47, 0x8f, 0x06, 0xe6, 0x09, 0x62, 0x8e, 0xa8, + 0x07, 0xf0, 0xe2, 0x28, 0x4d, 0x78, 0xb2, 0xfb, 0x83, 0xf0, 0x96, 0x2f, + 0xfc, 0xda, 0x34, 0xc8, 0xe1, 0x7d, 0xf4, 0xb1, 0x7f, 0xff, 0xe9, 0xd6, + 0x0c, 0x9b, 0x46, 0xb7, 0x85, 0xe7, 0xf7, 0x3e, 0xeb, 0x14, 0x48, 0xb1, + 0xe8, 0x8b, 0x7f, 0xe1, 0x73, 0x99, 0xdc, 0x3c, 0x21, 0xac, 0x5d, 0x20, + 0x58, 0xbf, 0x84, 0x42, 0xf0, 0xbc, 0xb1, 0x43, 0x3c, 0x6d, 0x0b, 0xdf, + 0xb5, 0x9d, 0x24, 0x0b, 0x17, 0x73, 0x8b, 0x17, 0xbf, 0x24, 0xb1, 0x5b, + 0xa6, 0x10, 0xf0, 0x88, 0x8f, 0x22, 0x01, 0x57, 0x86, 0x2f, 0x07, 0xee, + 0x2c, 0x5f, 0x0b, 0xc2, 0x35, 0x62, 0xb4, 0x78, 0x84, 0x3f, 0x52, 0x8b, + 0x8c, 0x84, 0xbd, 0x9d, 0x62, 0xff, 0x4c, 0x45, 0x27, 0x16, 0xcb, 0x17, + 0xe6, 0xe3, 0x9c, 0x4b, 0x15, 0x1e, 0x7d, 0xc7, 0x11, 0xf9, 0xad, 0xff, + 0xa6, 0x2c, 0xff, 0x1c, 0xbb, 0x82, 0xc5, 0xc6, 0x84, 0xb1, 0x7f, 0xfd, + 0x24, 0x53, 0xb0, 0x4d, 0xb7, 0xde, 0x49, 0x62, 0xf1, 0x60, 0x16, 0x2a, + 0x07, 0xd7, 0x89, 0xf5, 0x2b, 0x95, 0xbb, 0xa4, 0x3c, 0x35, 0x7f, 0x1f, + 0x23, 0x42, 0x50, 0x8c, 0xbc, 0x80, 0x28, 0x42, 0xdf, 0x3e, 0xcc, 0x75, + 0x8b, 0xfd, 0x21, 0x0f, 0xf2, 0x5b, 0xac, 0x5c, 0xf2, 0xb1, 0x4e, 0x79, + 0x64, 0x6b, 0x7d, 0xcf, 0xcf, 0x16, 0x2e, 0x3f, 0x16, 0x2b, 0x0d, 0xdb, + 0x91, 0xdf, 0xfe, 0x7d, 0x7f, 0x30, 0x85, 0xe8, 0x49, 0xab, 0x17, 0xc1, + 0x9f, 0xee, 0xb1, 0x7f, 0x44, 0xde, 0x16, 0x80, 0xb1, 0x52, 0x7a, 0x8c, + 0x49, 0x7f, 0xdd, 0xf8, 0x3d, 0xbd, 0xa9, 0xe2, 0xc5, 0xec, 0x7e, 0x8b, + 0x15, 0x87, 0xb8, 0x11, 0xf5, 0x0d, 0x51, 0x26, 0x9b, 0x8e, 0xb7, 0xf1, + 0xf2, 0x84, 0xf7, 0x1f, 0x2f, 0xfd, 0xf9, 0xee, 0x18, 0x77, 0x98, 0xf5, + 0x8b, 0xfe, 0x06, 0x33, 0xeb, 0x79, 0xf2, 0xc5, 0xe8, 0x1e, 0x56, 0x29, + 0xcf, 0x5b, 0xa1, 0xcd, 0xfe, 0xd6, 0x1c, 0xf8, 0x2e, 0xbd, 0x62, 0xf4, + 0xb6, 0xeb, 0x17, 0xfd, 0x31, 0x7d, 0xfa, 0x14, 0xe2, 0xc5, 0x9b, 0x63, + 0xd7, 0x0c, 0x76, 0xfa, 0x79, 0x27, 0x58, 0xbf, 0xfd, 0xd2, 0x49, 0xe7, + 0xbd, 0xa4, 0xa4, 0x0b, 0x17, 0xfa, 0x76, 0x21, 0x67, 0x7e, 0x58, 0xb0, + 0x66, 0x22, 0x8a, 0x48, 0xbe, 0x97, 0x7f, 0x4f, 0x4d, 0x39, 0xf1, 0x62, + 0xa5, 0x53, 0xe6, 0x42, 0x61, 0xc8, 0xff, 0x09, 0x06, 0x86, 0x59, 0x1b, + 0xdf, 0xee, 0x74, 0x92, 0x13, 0x71, 0x62, 0xfd, 0xcf, 0x61, 0x1a, 0xb1, + 0x79, 0x8a, 0x56, 0x2f, 0xed, 0x48, 0xf3, 0x38, 0xb1, 0x7f, 0x9b, 0xbe, + 0x33, 0x77, 0xc5, 0x8a, 0x94, 0x6d, 0xc0, 0xd6, 0x22, 0x90, 0x0d, 0xf0, + 0xb6, 0xf8, 0x62, 0x2c, 0x58, 0xbf, 0xd9, 0xcc, 0xd0, 0x01, 0x2b, 0x17, + 0x9a, 0x11, 0xeb, 0x14, 0xe7, 0xeb, 0xf2, 0x2e, 0x19, 0xdf, 0xfa, 0x1c, + 0x98, 0x48, 0x39, 0x9d, 0x16, 0x2e, 0xc3, 0xac, 0x5e, 0x91, 0xba, 0xc5, + 0xfe, 0x66, 0x08, 0x7f, 0x70, 0x96, 0x2e, 0x93, 0xac, 0x5f, 0xc1, 0xfb, + 0x9b, 0x60, 0x4b, 0x17, 0xf3, 0xeb, 0xbe, 0x39, 0xab, 0x15, 0x1e, 0x7f, + 0x3a, 0x17, 0xf9, 0x95, 0xdb, 0xca, 0xc5, 0xa3, 0xd6, 0x2f, 0xe7, 0xd3, + 0x6f, 0x84, 0xb1, 0x5a, 0x3c, 0x2f, 0x0a, 0xdf, 0xe6, 0xd6, 0xf8, 0x2d, + 0x6c, 0xb1, 0x7f, 0xd9, 0xac, 0xfb, 0xeb, 0xec, 0xb1, 0x69, 0xd8, 0xfb, + 0xb7, 0x36, 0xbf, 0xfb, 0xde, 0x17, 0x65, 0x80, 0xe4, 0xc7, 0xac, 0x5f, + 0xfe, 0x7e, 0x60, 0xf5, 0x22, 0xf1, 0x3f, 0x45, 0x8b, 0xfa, 0x01, 0xe7, + 0xd8, 0xeb, 0x14, 0xb1, 0x66, 0x23, 0x76, 0x11, 0x7d, 0x62, 0x3d, 0x77, + 0x49, 0x0a, 0x10, 0xd7, 0xd3, 0xa7, 0xd2, 0xc5, 0xff, 0xd3, 0xa8, 0x6f, + 0xf7, 0x88, 0x98, 0x25, 0x8b, 0xff, 0xb4, 0xdb, 0x0f, 0xf3, 0xcf, 0x0b, + 0xeb, 0x15, 0xc4, 0x47, 0x79, 0x1e, 0xf7, 0x9e, 0x25, 0x8b, 0xfa, 0x2e, + 0x07, 0x85, 0xba, 0xc5, 0x41, 0x71, 0x70, 0x63, 0x99, 0x0a, 0xe3, 0x4c, + 0xbb, 0x5a, 0xd4, 0x24, 0x3f, 0x18, 0xf0, 0x0d, 0xb9, 0x0b, 0x0f, 0x11, + 0x86, 0x3d, 0x5a, 0x5d, 0x25, 0x3c, 0xe3, 0x9d, 0xf1, 0x60, 0x23, 0x96, + 0x2f, 0xa4, 0xf3, 0xf5, 0x8b, 0xa7, 0x8b, 0x16, 0x78, 0x1b, 0x92, 0x22, + 0xa9, 0x5e, 0x17, 0xc9, 0xd6, 0x67, 0x2e, 0xfa, 0xf5, 0xfc, 0xc0, 0x6d, + 0xdb, 0x4b, 0x17, 0xc0, 0xcc, 0x8f, 0x58, 0xbf, 0x6e, 0xcf, 0xb6, 0x2c, + 0x5a, 0x4e, 0x79, 0xc4, 0x4b, 0x7f, 0xfe, 0x3c, 0xc0, 0xc3, 0x25, 0xfe, + 0xf0, 0x29, 0xdd, 0x62, 0xff, 0xe6, 0xfc, 0x33, 0xdc, 0x6d, 0x85, 0x05, + 0x8a, 0xd9, 0x13, 0xba, 0x57, 0xbf, 0xff, 0x9b, 0x37, 0xe7, 0xd9, 0xfd, + 0x01, 0x49, 0x4c, 0x16, 0x2f, 0xff, 0x11, 0x49, 0xa7, 0xfc, 0xf7, 0xe9, + 0xfa, 0xc5, 0x32, 0x32, 0x48, 0x90, 0x4b, 0x57, 0xf3, 0xcc, 0x3f, 0x84, + 0xb1, 0x73, 0x41, 0x62, 0xff, 0xfd, 0xee, 0x0a, 0x7f, 0x27, 0x2c, 0x01, + 0xe6, 0x0b, 0x17, 0xfe, 0x70, 0x37, 0x7c, 0xc8, 0x9f, 0x65, 0x8a, 0x3a, + 0x2b, 0x48, 0x5f, 0xca, 0xb7, 0xee, 0xe0, 0x1f, 0x00, 0xb1, 0x6f, 0xac, + 0x58, 0x78, 0x6f, 0x98, 0xb2, 0xff, 0xa7, 0xf3, 0xdc, 0x21, 0x3b, 0x2c, + 0x5a, 0x56, 0x2e, 0x7d, 0x2c, 0x5b, 0x7d, 0x1a, 0x8f, 0x88, 0xdf, 0xd1, + 0xe5, 0x9b, 0x60, 0x4b, 0x15, 0x29, 0xa7, 0xe3, 0x6e, 0x89, 0x59, 0x8c, + 0x45, 0x17, 0xfe, 0x3b, 0x02, 0x46, 0x2d, 0x0b, 0x4b, 0x17, 0xba, 0x37, + 0xd6, 0x2c, 0x58, 0x7b, 0xe2, 0x40, 0xbf, 0xff, 0xed, 0xc9, 0xfa, 0x73, + 0xec, 0xfe, 0x80, 0xa5, 0xbc, 0x29, 0x58, 0xbf, 0xff, 0xfd, 0xa9, 0x37, + 0x22, 0xdf, 0xef, 0x14, 0x58, 0x5e, 0x0f, 0x22, 0xfb, 0x0d, 0x62, 0xff, + 0xf7, 0xdc, 0xe3, 0x93, 0x23, 0x85, 0xf7, 0xd2, 0xc5, 0xfd, 0xe9, 0xf9, + 0x4c, 0x16, 0x2f, 0xff, 0xfb, 0xec, 0xfe, 0x80, 0xa4, 0xa6, 0x10, 0x7d, + 0x6c, 0x20, 0x2c, 0x51, 0x88, 0xe3, 0x74, 0xfe, 0x16, 0xd2, 0xc5, 0xf9, + 0x8d, 0x7d, 0x4c, 0x0d, 0xe7, 0xcc, 0x2a, 0x55, 0x34, 0x39, 0x33, 0x34, + 0x14, 0x73, 0xb7, 0xde, 0xdb, 0x02, 0x58, 0xbb, 0x52, 0xb1, 0x66, 0x23, + 0x79, 0xe2, 0x5b, 0xff, 0xf6, 0xc7, 0x16, 0x9a, 0x06, 0xb7, 0x71, 0x41, + 0xf1, 0x62, 0xfd, 0x3a, 0xd3, 0x44, 0xb1, 0x7f, 0xfb, 0x67, 0xe0, 0x7a, + 0x1f, 0xf1, 0xc8, 0xd5, 0x8b, 0x9f, 0xb5, 0x8b, 0xfc, 0x01, 0x60, 0x0e, + 0xd0, 0x58, 0xbb, 0x25, 0x62, 0xa0, 0x7c, 0x5d, 0x8c, 0x1c, 0xd2, 0xa5, + 0x36, 0x2d, 0x96, 0xb0, 0xa5, 0xa1, 0x5f, 0x7f, 0xf7, 0x70, 0x72, 0xf6, + 0x38, 0xf0, 0x6b, 0x17, 0xff, 0xf3, 0xf7, 0x25, 0x3c, 0x1f, 0xe7, 0x8e, + 0x5d, 0xc1, 0x62, 0x8c, 0x44, 0xff, 0xd1, 0x2f, 0xff, 0xef, 0x73, 0x27, + 0xf2, 0x66, 0xa4, 0xb3, 0xf9, 0xba, 0xc5, 0xff, 0xfe, 0x61, 0xfd, 0xc9, + 0xbd, 0x31, 0x39, 0xae, 0x59, 0xd1, 0x62, 0xbb, 0x45, 0xe7, 0xd6, 0xef, + 0xf9, 0xfd, 0x9a, 0xd0, 0xb6, 0xe8, 0xb1, 0x7f, 0xdc, 0xcf, 0x0f, 0x30, + 0x1c, 0x58, 0xaf, 0x9f, 0xb7, 0x8f, 0x6f, 0xf9, 0xfd, 0x9a, 0xd0, 0xb6, + 0xe8, 0xb1, 0x70, 0x88, 0xc3, 0xdf, 0xf9, 0x15, 0x4a, 0xa0, 0x7c, 0x87, + 0x07, 0x21, 0xf3, 0x7f, 0xb7, 0xce, 0x7f, 0xb6, 0x8f, 0x58, 0xbc, 0x2c, + 0x1a, 0xc5, 0x31, 0xeb, 0x47, 0x1c, 0xd4, 0x1b, 0x39, 0x61, 0xcf, 0x22, + 0xe2, 0x29, 0xaf, 0x9b, 0xc7, 0x19, 0x1e, 0x5d, 0xa9, 0x45, 0x1f, 0x96, + 0x1e, 0x07, 0xd2, 0x8e, 0x1f, 0x92, 0xb9, 0xfa, 0x42, 0x42, 0xff, 0x4b, + 0x6b, 0xe1, 0x30, 0xd6, 0x2e, 0xc8, 0x2c, 0x5e, 0x71, 0xca, 0xc5, 0x0c, + 0xf9, 0xe2, 0x34, 0x38, 0xbd, 0xff, 0xd0, 0x93, 0xea, 0x46, 0xde, 0x14, + 0xac, 0x5f, 0xcf, 0xfd, 0x69, 0xf6, 0x58, 0xa9, 0x45, 0x1b, 0x98, 0x7d, + 0x12, 0xfc, 0x20, 0xcc, 0x68, 0x2c, 0x5b, 0xcb, 0x15, 0xe3, 0x7a, 0x11, + 0x5d, 0xf3, 0xf3, 0x0e, 0xb1, 0x7f, 0xf1, 0x0b, 0x38, 0xfc, 0xcf, 0xe6, + 0xeb, 0x17, 0xed, 0x1d, 0x98, 0x6b, 0x17, 0xff, 0xe6, 0x39, 0x9c, 0x14, + 0xf7, 0x9e, 0xe6, 0x4e, 0xeb, 0x17, 0xa7, 0x51, 0x2c, 0x56, 0x22, 0x7b, + 0xe5, 0x04, 0xb1, 0x7f, 0xf3, 0xbf, 0xe2, 0xcf, 0x4f, 0xa4, 0x6b, 0x17, + 0x8d, 0x6e, 0x2c, 0x5e, 0x9d, 0x01, 0x62, 0xd3, 0xe3, 0x76, 0x18, 0xf5, + 0xf7, 0xbd, 0x20, 0x58, 0xbe, 0x0c, 0xd0, 0xcd, 0x58, 0xb4, 0xac, 0x5f, + 0xff, 0x4f, 0x70, 0x62, 0x01, 0x80, 0x7d, 0x39, 0xab, 0x15, 0x2a, 0xaa, + 0x20, 0x45, 0x84, 0x4f, 0x0e, 0x28, 0x8b, 0xbe, 0xfe, 0x22, 0x70, 0x88, + 0xe3, 0x8a, 0x3a, 0x84, 0x6f, 0xd9, 0xe7, 0x29, 0x58, 0xbc, 0x14, 0xf6, + 0xb1, 0x50, 0x3c, 0x58, 0x89, 0xaf, 0xee, 0xe2, 0xfc, 0x91, 0xab, 0x17, + 0xff, 0xa7, 0x5a, 0xce, 0xfd, 0x27, 0x9e, 0xe0, 0xb1, 0x52, 0x7f, 0xa1, + 0x18, 0xdc, 0x51, 0x2c, 0x5e, 0xe7, 0xdd, 0x62, 0x8e, 0x6d, 0x7c, 0x31, + 0x77, 0x6c, 0xb1, 0x7f, 0xf6, 0x0e, 0x7e, 0xf0, 0x68, 0x4e, 0x96, 0x2b, + 0x0f, 0x6f, 0x43, 0x17, 0xff, 0x30, 0xff, 0x3a, 0xce, 0x99, 0xa8, 0x2c, + 0x5f, 0x6c, 0x77, 0x82, 0xc5, 0xff, 0x8a, 0x4e, 0xce, 0x31, 0x7b, 0x8b, + 0x17, 0xd2, 0x00, 0xce, 0xb1, 0x7f, 0xe9, 0xf7, 0xe7, 0x93, 0x01, 0x69, + 0x62, 0xf8, 0x84, 0xd0, 0x58, 0xb9, 0x8d, 0x58, 0xa8, 0x23, 0x6f, 0x73, + 0xe2, 0x24, 0xe1, 0xff, 0x88, 0xaf, 0xe9, 0x16, 0xff, 0x7d, 0x2c, 0x5f, + 0xd2, 0x78, 0xc0, 0x02, 0x56, 0x2f, 0x75, 0xf3, 0xe5, 0x8b, 0xf9, 0xb7, + 0x32, 0x73, 0x8b, 0x17, 0xe9, 0xc2, 0xf7, 0x16, 0x28, 0x67, 0xac, 0x72, + 0xfa, 0x3a, 0x3e, 0xbe, 0x5e, 0x23, 0x1e, 0xa7, 0x8b, 0xc0, 0x9d, 0x2c, + 0x54, 0xaa, 0xa0, 0xc8, 0x7f, 0xbc, 0x68, 0x8c, 0x81, 0x7d, 0xe7, 0x28, + 0x2c, 0x5f, 0x9f, 0xfe, 0xcd, 0xd6, 0x2f, 0xf3, 0xc9, 0x4b, 0xf7, 0x05, + 0x8b, 0xd8, 0x40, 0x58, 0xa8, 0x22, 0x66, 0x22, 0x21, 0x14, 0xf5, 0x19, + 0x5e, 0xe0, 0x8e, 0xb1, 0x7f, 0xfb, 0xf2, 0x79, 0x17, 0x72, 0xe5, 0x86, + 0xac, 0x5f, 0xa6, 0x2e, 0x79, 0xd6, 0x28, 0xc5, 0xe2, 0xb9, 0x85, 0x06, + 0x2b, 0xbb, 0xe4, 0x44, 0x3a, 0x95, 0xcc, 0xd0, 0xdf, 0x02, 0x0f, 0x87, + 0x83, 0x4a, 0xbf, 0xff, 0xa7, 0x53, 0xcf, 0xb3, 0xfa, 0x02, 0x92, 0x98, + 0x2c, 0x5f, 0xe1, 0x87, 0x31, 0xff, 0x17, 0x16, 0x2f, 0xa7, 0xbf, 0x3a, + 0xc5, 0xfb, 0xa9, 0xcf, 0x9e, 0x58, 0xbf, 0x7b, 0x3c, 0x52, 0xb1, 0x7f, + 0x3c, 0xf0, 0xc2, 0x75, 0x8a, 0xd9, 0x33, 0x4e, 0xd6, 0x62, 0x39, 0x39, + 0x19, 0x15, 0xf8, 0x9e, 0xf0, 0x9b, 0x8b, 0x17, 0xff, 0xf3, 0xc3, 0xed, + 0xcf, 0x3c, 0x9b, 0x1c, 0xdb, 0x4e, 0x96, 0x2e, 0x90, 0x96, 0x2b, 0x48, + 0x94, 0xf8, 0xef, 0x17, 0xef, 0xfe, 0x7e, 0x30, 0x5e, 0x33, 0x90, 0x73, + 0x56, 0x2f, 0xf4, 0x96, 0xd8, 0x36, 0x82, 0xc5, 0xfe, 0xfe, 0x67, 0xbe, + 0xc0, 0x58, 0xbf, 0xf7, 0x3b, 0x6f, 0x13, 0x73, 0x09, 0x62, 0xdf, 0x58, + 0xbf, 0xd3, 0xec, 0xfb, 0xf2, 0x56, 0x2a, 0x08, 0xb5, 0xec, 0xcd, 0x8f, + 0xb8, 0x25, 0x79, 0xf6, 0x95, 0x8b, 0xa2, 0x95, 0x8b, 0xa7, 0xcb, 0x17, + 0xef, 0xb8, 0xdc, 0x96, 0x2f, 0xf9, 0x98, 0x1e, 0x66, 0xef, 0x8b, 0x17, + 0xd3, 0xa8, 0x9b, 0x73, 0xe0, 0xd1, 0x3d, 0xfe, 0x7d, 0x6b, 0x36, 0x3e, + 0x2c, 0x5d, 0x17, 0x16, 0x2e, 0x93, 0x08, 0xf3, 0x43, 0x34, 0xbc, 0xdd, + 0x25, 0x62, 0xa5, 0x36, 0x23, 0x46, 0x3b, 0x77, 0x28, 0x43, 0xf8, 0xba, + 0xf8, 0x78, 0x50, 0x58, 0xbf, 0x63, 0xc3, 0xf2, 0xb1, 0x74, 0x5e, 0x73, + 0xc9, 0xf9, 0x15, 0xff, 0xf8, 0x7f, 0x9d, 0x38, 0x24, 0x39, 0x88, 0xa4, + 0xeb, 0x17, 0xf8, 0xd9, 0x2f, 0x71, 0xbe, 0xb1, 0x52, 0x8b, 0x87, 0x2e, + 0x65, 0x6b, 0xf1, 0x63, 0x16, 0xcb, 0x17, 0xff, 0x9b, 0xcf, 0xd9, 0x80, + 0x13, 0x16, 0xfc, 0x58, 0xbf, 0x71, 0xa5, 0xf4, 0xb1, 0x77, 0x67, 0x58, + 0xa1, 0xa2, 0x37, 0xb4, 0xd8, 0xf2, 0x7a, 0x95, 0xe7, 0x0c, 0x87, 0x76, + 0xe6, 0x1d, 0xa4, 0x3c, 0x3a, 0x34, 0x7a, 0xd1, 0xbf, 0x94, 0x6a, 0x3c, + 0x2d, 0x14, 0x2d, 0x29, 0x62, 0xec, 0xd2, 0xc5, 0x1a, 0x68, 0xd8, 0x32, + 0xff, 0xb3, 0x92, 0x3e, 0x4b, 0x8d, 0x62, 0xfe, 0x9d, 0xb5, 0x38, 0x35, + 0x8b, 0x6e, 0xb1, 0x7f, 0xec, 0x3f, 0x3f, 0x3d, 0xfa, 0x7e, 0xb1, 0x7f, + 0xff, 0x47, 0xb9, 0x49, 0xcc, 0xe3, 0xed, 0x3f, 0xfc, 0xc1, 0x62, 0xf3, + 0x45, 0x2b, 0x17, 0xf7, 0xe7, 0xde, 0x93, 0xac, 0x5f, 0xff, 0xda, 0xc1, + 0xf0, 0x85, 0x90, 0x13, 0x0f, 0x99, 0xa5, 0x8a, 0x1a, 0x22, 0x5c, 0xba, + 0xb4, 0xa8, 0x04, 0xe4, 0x3f, 0x38, 0x22, 0xef, 0x09, 0x89, 0x03, 0xa2, + 0xf8, 0x70, 0xa6, 0xbe, 0x29, 0x3f, 0x16, 0x2f, 0x1d, 0xbb, 0x58, 0xf1, + 0xa2, 0xbb, 0xdb, 0xac, 0x5f, 0x3e, 0x81, 0xc5, 0x8a, 0xc3, 0xea, 0xd1, + 0x77, 0x86, 0x6f, 0xe2, 0x93, 0x00, 0x09, 0x58, 0xbe, 0x60, 0x4c, 0x16, + 0x2f, 0x81, 0xd3, 0xad, 0xeb, 0x16, 0x2f, 0xf8, 0xf9, 0x09, 0xd0, 0x30, + 0x96, 0x2d, 0x0f, 0x9f, 0x40, 0x66, 0x17, 0xf3, 0x14, 0xff, 0xf2, 0xb1, + 0x7f, 0x69, 0xa6, 0x13, 0x05, 0x8b, 0xff, 0xf4, 0xc3, 0x9f, 0x67, 0xf4, + 0x05, 0x25, 0x30, 0x58, 0xbf, 0xa7, 0x7e, 0x3c, 0x9d, 0x62, 0x89, 0x10, + 0x5c, 0x54, 0xa9, 0x46, 0x8b, 0x42, 0xbe, 0xe1, 0x12, 0xc5, 0xd9, 0xba, + 0xc5, 0xd3, 0x0f, 0x9a, 0xff, 0x0b, 0xd7, 0x69, 0xd3, 0xc4, 0x53, 0xa8, + 0x7e, 0x92, 0xad, 0xf4, 0x94, 0xc4, 0xb1, 0x7f, 0xff, 0xec, 0x7e, 0x93, + 0x9f, 0x97, 0xd4, 0xf9, 0xf0, 0xe7, 0x93, 0xac, 0x5f, 0xff, 0xff, 0xb2, + 0x05, 0x3b, 0x67, 0x3f, 0x84, 0xc6, 0xb6, 0xed, 0xa6, 0x83, 0xf0, 0x0b, + 0x17, 0xff, 0xb3, 0xa6, 0xed, 0xad, 0x9b, 0xcd, 0xd8, 0x16, 0x2f, 0x8b, + 0x00, 0x6a, 0xc5, 0x69, 0x1e, 0x85, 0x08, 0x2e, 0x27, 0xdf, 0xfe, 0xc1, + 0xb1, 0x3e, 0x0e, 0x5d, 0xb6, 0x58, 0xa5, 0x8b, 0x66, 0xc7, 0xa6, 0xe8, + 0xf7, 0xfb, 0x06, 0xfc, 0x09, 0xb4, 0xb1, 0x52, 0xbc, 0x72, 0x38, 0xc1, + 0xb0, 0xbb, 0x72, 0xe7, 0x94, 0x62, 0x74, 0x4f, 0x91, 0x34, 0x6b, 0xc5, + 0x08, 0x7f, 0x13, 0xdf, 0xe2, 0x6d, 0xbb, 0x84, 0xf5, 0x2c, 0x5f, 0x81, + 0x39, 0xdc, 0x16, 0x2f, 0xf7, 0x3e, 0xc1, 0xfe, 0x60, 0xb1, 0x5b, 0x22, + 0x5b, 0x73, 0x8e, 0xca, 0x6f, 0xf7, 0xe4, 0xfe, 0x29, 0xed, 0x62, 0xec, + 0x89, 0x62, 0xfc, 0x4d, 0x0c, 0x25, 0x8b, 0xf8, 0x9b, 0xe5, 0x9a, 0x58, + 0xbc, 0x42, 0xc1, 0x9e, 0x97, 0x89, 0xaf, 0xfb, 0x0f, 0x9d, 0x05, 0x1f, + 0x84, 0xb1, 0x7d, 0x3d, 0xc7, 0x62, 0xc5, 0xff, 0x9b, 0xbf, 0xcb, 0x81, + 0xbc, 0x25, 0x8b, 0xff, 0xfd, 0x2f, 0x06, 0xe7, 0x27, 0x0a, 0x61, 0x87, + 0x6e, 0xd6, 0x2b, 0x48, 0xc3, 0x39, 0x37, 0x8f, 0xef, 0xfd, 0x80, 0xe6, + 0x6b, 0x6d, 0x85, 0xb2, 0xc5, 0x0d, 0x37, 0x3c, 0x8c, 0x03, 0xc6, 0x15, + 0x05, 0x4f, 0x38, 0x68, 0xcd, 0x5c, 0x8e, 0x96, 0xff, 0xf8, 0xed, 0xa6, + 0x84, 0xbe, 0x9e, 0x19, 0x05, 0x8b, 0xf7, 0xe6, 0x27, 0xfa, 0xc5, 0xcf, + 0x05, 0x8a, 0x19, 0xe0, 0x11, 0x4d, 0xee, 0x4c, 0x4b, 0x17, 0xdb, 0x67, + 0x70, 0x58, 0xb4, 0x4b, 0x15, 0x27, 0xad, 0x83, 0xc1, 0x92, 0xdf, 0xe3, + 0xb1, 0x66, 0x83, 0xf2, 0xc5, 0xfc, 0xd9, 0xb0, 0xb5, 0x05, 0x8b, 0xff, + 0xef, 0xc9, 0xdf, 0x4f, 0xd5, 0x21, 0xed, 0x81, 0x2c, 0x5f, 0xa6, 0x07, + 0x7f, 0x2c, 0x5f, 0xf0, 0xe4, 0x33, 0x94, 0xf7, 0x05, 0x8a, 0x58, 0xac, + 0x3c, 0x77, 0x3b, 0xbf, 0xb0, 0x5b, 0x87, 0x9d, 0xac, 0x56, 0xca, 0xaa, + 0xe1, 0x08, 0xe1, 0xbb, 0xe1, 0x77, 0x66, 0x91, 0x17, 0x9d, 0x57, 0x8d, + 0xfd, 0x08, 0x2f, 0xfb, 0x53, 0xc0, 0xc8, 0xa7, 0x4b, 0x17, 0x34, 0x72, + 0xc5, 0x39, 0xe9, 0x9c, 0xe6, 0xfe, 0xfc, 0xfb, 0xf8, 0x05, 0x8b, 0xff, + 0xfe, 0x29, 0xdb, 0x07, 0x30, 0xfe, 0x7d, 0xa3, 0xde, 0x3e, 0x74, 0xb1, + 0x7f, 0xed, 0xfe, 0xe3, 0x6d, 0x02, 0x3b, 0x16, 0x2f, 0xc2, 0xec, 0xa6, + 0x25, 0x8a, 0x81, 0xf6, 0xc4, 0x87, 0x7e, 0xcd, 0x69, 0x80, 0xb1, 0x52, + 0x79, 0x7e, 0x23, 0xbf, 0xe9, 0x81, 0x37, 0xa0, 0xfd, 0x16, 0x2f, 0x07, + 0x20, 0x58, 0xbd, 0xd4, 0xfb, 0x2c, 0x56, 0xc9, 0xde, 0x9e, 0x32, 0x3f, + 0x90, 0xf0, 0xeb, 0xc3, 0xd7, 0xde, 0xfc, 0xf5, 0x2c, 0x52, 0xc5, 0xcf, + 0x12, 0xc5, 0x47, 0x9a, 0x40, 0x06, 0x5e, 0x9e, 0xa9, 0x58, 0xbf, 0xe3, + 0x64, 0x98, 0x7f, 0x90, 0x2c, 0x5f, 0xf6, 0x44, 0x53, 0xb7, 0x27, 0x75, + 0x8b, 0xa1, 0x8b, 0x15, 0xa4, 0x45, 0xfc, 0xe7, 0xc7, 0x77, 0x73, 0x16, + 0x2f, 0xa2, 0x79, 0xe2, 0xc5, 0xff, 0xff, 0xe7, 0xf4, 0xf4, 0xd4, 0xf0, + 0xc9, 0x22, 0xc7, 0xf3, 0x1f, 0x53, 0xc5, 0x8b, 0x87, 0x2b, 0x15, 0x28, + 0xb1, 0xc2, 0x31, 0x3b, 0xdf, 0xd2, 0x1e, 0x1d, 0xbb, 0x58, 0xbf, 0xf4, + 0xeb, 0x7f, 0x16, 0x6c, 0xc4, 0xb1, 0x7c, 0x07, 0x9e, 0x2c, 0x5d, 0xcc, + 0x58, 0xbf, 0xfd, 0xee, 0x4c, 0x06, 0xc0, 0xc1, 0xbf, 0x16, 0x2a, 0x07, + 0xc3, 0x82, 0xf5, 0xf4, 0xc4, 0xb8, 0x5e, 0x23, 0xf8, 0xe8, 0x41, 0xdf, + 0xf4, 0xf1, 0xb7, 0x71, 0xfd, 0xd6, 0x2f, 0xf0, 0xf5, 0x82, 0xdd, 0xce, + 0xb1, 0x7e, 0xc1, 0x6e, 0xe7, 0x58, 0xbd, 0xf1, 0x7d, 0x62, 0xc7, 0xc3, + 0xfc, 0xd1, 0xab, 0x14, 0xdf, 0xe1, 0x40, 0xb0, 0x0f, 0xda, 0xc5, 0xfe, + 0xce, 0x8c, 0x43, 0xc0, 0x2c, 0x56, 0x8f, 0xa3, 0xe6, 0x95, 0x12, 0x6e, + 0x4d, 0x0b, 0x5f, 0x42, 0x6e, 0xdf, 0x58, 0xa9, 0x64, 0x47, 0xed, 0x0d, + 0xc1, 0x90, 0xe4, 0x7d, 0x7d, 0xa9, 0x3a, 0x51, 0xc9, 0x1a, 0x15, 0x40, + 0x30, 0x28, 0x64, 0x7a, 0x34, 0x01, 0x47, 0x70, 0x11, 0xdd, 0xf9, 0xf4, + 0xfd, 0x81, 0x62, 0x96, 0x2a, 0x4d, 0xae, 0x14, 0xdf, 0xf4, 0x5c, 0x9c, + 0x21, 0xfe, 0x56, 0x2c, 0x75, 0x8a, 0x23, 0xcb, 0xf1, 0xcd, 0xfc, 0x2f, + 0x7b, 0x98, 0x12, 0xc5, 0xfc, 0xe6, 0x71, 0xc9, 0xd6, 0x2f, 0xe6, 0xcd, + 0x00, 0x12, 0xb1, 0x7d, 0xf7, 0x68, 0x2c, 0x5f, 0xff, 0xff, 0x16, 0x40, + 0x5a, 0x9d, 0x6b, 0x07, 0x2e, 0x6c, 0x96, 0xed, 0xe6, 0x35, 0x62, 0xb1, + 0x13, 0xec, 0x45, 0x77, 0x5f, 0xc5, 0x8b, 0xdd, 0x96, 0x96, 0x2b, 0x0d, + 0xdf, 0x07, 0x6f, 0xf6, 0xb3, 0xee, 0x52, 0x75, 0x8b, 0xff, 0xa6, 0x3f, + 0xe5, 0x9d, 0xf8, 0x4d, 0xc5, 0x8b, 0xfa, 0x5b, 0x5e, 0xcf, 0xac, 0x5f, + 0xfc, 0x59, 0x14, 0xec, 0xdb, 0x1d, 0xf6, 0x58, 0xbf, 0x61, 0xba, 0x60, + 0x96, 0x2d, 0x8e, 0x7e, 0x21, 0xa3, 0xdf, 0xfe, 0x3e, 0x0e, 0x61, 0x3c, + 0x03, 0x37, 0x6b, 0x15, 0x29, 0xc4, 0x9c, 0xcb, 0xe9, 0x1c, 0x84, 0xf0, + 0x64, 0xf4, 0x62, 0xe0, 0x4c, 0xb5, 0x68, 0x87, 0xe6, 0x0c, 0x5b, 0xc8, + 0x66, 0x79, 0x70, 0x51, 0xd4, 0xdf, 0xf7, 0x9b, 0x99, 0xff, 0xb9, 0xd6, + 0x2e, 0xff, 0x16, 0x2f, 0xb3, 0xa6, 0x12, 0xc5, 0xfe, 0xe6, 0x38, 0xd9, + 0xf6, 0x58, 0xa9, 0x3d, 0x6c, 0x23, 0xbf, 0xf1, 0x30, 0x30, 0xbd, 0xc6, + 0x82, 0xc5, 0x4a, 0x60, 0x86, 0x9c, 0xe9, 0xbb, 0xc4, 0x17, 0xe2, 0x9d, + 0xa7, 0x65, 0x8b, 0xff, 0xbd, 0xc0, 0xfc, 0xe4, 0x28, 0x67, 0x16, 0x28, + 0x68, 0xad, 0x88, 0xf8, 0x8a, 0x6f, 0xc7, 0xf4, 0x76, 0x7d, 0x62, 0xfe, + 0x1c, 0xb6, 0x80, 0x25, 0x8b, 0xfa, 0x48, 0x07, 0x68, 0x2c, 0x5b, 0xeb, + 0x17, 0x8b, 0xbf, 0x2c, 0x56, 0x1b, 0x07, 0x12, 0xad, 0x91, 0x55, 0xf2, + 0xee, 0x8b, 0xb7, 0xcc, 0xfa, 0xc5, 0x8b, 0xfc, 0xcf, 0xc7, 0xe9, 0xf7, + 0x58, 0xad, 0x1e, 0xaf, 0xc8, 0x6f, 0xc3, 0x03, 0x97, 0x96, 0x2e, 0xe3, + 0xac, 0x56, 0x1b, 0xf6, 0x28, 0xbf, 0x7e, 0x73, 0x50, 0x58, 0xbf, 0xf8, + 0xee, 0x06, 0xf1, 0x66, 0xda, 0x95, 0x8a, 0x58, 0xb6, 0x39, 0xe8, 0x79, + 0x12, 0xf7, 0xfc, 0xeb, 0x17, 0xff, 0xd9, 0xb6, 0xa4, 0x31, 0xb6, 0xd8, + 0x76, 0xed, 0x62, 0xfb, 0x9e, 0xc3, 0xac, 0x5f, 0xb3, 0xa1, 0x64, 0x16, + 0x2e, 0x17, 0xd6, 0x2a, 0x3c, 0xf0, 0x4e, 0x53, 0x7e, 0x80, 0x7f, 0xce, + 0xa5, 0x8b, 0x9e, 0x25, 0x8a, 0x94, 0x67, 0x3b, 0x23, 0x12, 0xf8, 0xb6, + 0xf7, 0xff, 0x2b, 0x17, 0xf1, 0xad, 0x0e, 0x38, 0xd6, 0x2b, 0x0f, 0x31, + 0xc7, 0x6a, 0x57, 0x24, 0x36, 0x30, 0xc8, 0x6b, 0x3c, 0x22, 0x34, 0xc2, + 0x71, 0xff, 0xbc, 0x31, 0x31, 0x0e, 0xf2, 0x32, 0x1f, 0x42, 0x1a, 0xe1, + 0x41, 0x62, 0xfe, 0xfb, 0xeb, 0x59, 0xe5, 0x8b, 0xff, 0xf7, 0x1a, 0x3c, + 0x7f, 0x9c, 0x7d, 0x4f, 0xa7, 0xeb, 0x15, 0xb2, 0x27, 0x77, 0x18, 0xec, + 0xba, 0xf9, 0x8f, 0x31, 0xeb, 0x17, 0x87, 0x30, 0x58, 0xb9, 0xf9, 0xf3, + 0xc2, 0x11, 0x2d, 0xd3, 0x05, 0x8b, 0xff, 0xa0, 0xfd, 0x27, 0x58, 0xf0, + 0x16, 0x96, 0x2f, 0xa4, 0x1c, 0xc5, 0x8b, 0xf3, 0xf5, 0x47, 0xb1, 0xd6, + 0x2a, 0x24, 0x4b, 0x7d, 0x1b, 0x84, 0x57, 0x0a, 0x0b, 0x15, 0xa4, 0xc8, + 0xfe, 0x5a, 0xd0, 0xad, 0xe8, 0x63, 0x78, 0xf3, 0x2b, 0x17, 0xe3, 0xb1, + 0x77, 0x05, 0x8b, 0x9a, 0x0b, 0x17, 0xe2, 0xf4, 0x74, 0x9d, 0x62, 0xa4, + 0xfa, 0xd8, 0xa4, 0x42, 0xf7, 0x9c, 0x2d, 0xd6, 0x2f, 0x75, 0xdf, 0x5c, + 0x8d, 0x16, 0x2f, 0x60, 0xf1, 0x62, 0xf7, 0x9c, 0x0b, 0x15, 0x1e, 0x88, + 0x83, 0x8f, 0xfc, 0xc3, 0xc3, 0x97, 0xed, 0x0f, 0x08, 0xd5, 0x8b, 0x41, + 0x62, 0xff, 0xd3, 0xf1, 0x30, 0x79, 0xd1, 0xb4, 0xb1, 0x4e, 0x7a, 0x7c, + 0x12, 0xbc, 0xe4, 0x35, 0x8a, 0x94, 0x7c, 0xb2, 0x07, 0x9f, 0x3a, 0x10, + 0xdf, 0xfe, 0x07, 0xc2, 0x6f, 0x3f, 0x3f, 0x25, 0xe5, 0x8b, 0x44, 0xb1, + 0x7a, 0x4a, 0x56, 0x2b, 0x47, 0xf2, 0x24, 0xb0, 0x84, 0xef, 0xf1, 0xf8, + 0xf1, 0xd9, 0xa9, 0x58, 0xb8, 0xfa, 0x58, 0xbc, 0x69, 0xdd, 0x62, 0xb0, + 0xdb, 0x30, 0xc5, 0xe7, 0x3b, 0xac, 0x54, 0xa3, 0x5f, 0x0c, 0x09, 0xb3, + 0xc3, 0xf5, 0x1b, 0xbf, 0x71, 0x67, 0x58, 0xcd, 0xd7, 0x70, 0xcc, 0x8d, + 0x65, 0x33, 0x28, 0x67, 0x68, 0xe8, 0xa1, 0x3e, 0x2a, 0x39, 0xf5, 0x1c, + 0x95, 0x55, 0xbc, 0xad, 0x9e, 0xe3, 0x3e, 0x7a, 0xd1, 0x56, 0x3e, 0x3e, + 0x78, 0xa5, 0x89, 0xea, 0x7c, 0x1c, 0xf4, 0x84, 0x2f, 0xd2, 0x40, 0xda, + 0x33, 0x80, 0x4a, 0xac, 0x2a, 0x5b, 0xef, 0x27, 0x44, 0xfd, 0x3d, 0x7e, + 0x28, 0xd2, 0x7a, 0x47, 0x30, 0x12, 0x24, 0x74, 0x21, 0xc3, 0x8e, 0xbb, + 0xaa, 0x38, 0xdb, 0x3a, 0xc5, 0xc6, 0x01, 0x62, 0x8c, 0x35, 0x5c, 0x11, + 0xb8, 0xdf, 0x2c, 0x5f, 0xff, 0xe8, 0xda, 0x73, 0xae, 0xba, 0x8d, 0xa3, + 0x57, 0x48, 0xf8, 0xd6, 0x23, 0x0c, 0xfc, 0x72, 0xc5, 0xba, 0xc5, 0x8a, + 0xeb, 0x88, 0xa3, 0x8a, 0x11, 0x97, 0xed, 0x38, 0xba, 0xf9, 0x58, 0xb9, + 0xcd, 0x58, 0xbf, 0x81, 0xc8, 0x8a, 0x46, 0xb1, 0x7f, 0xdd, 0x30, 0x7d, + 0xf8, 0xb0, 0x0b, 0x15, 0x27, 0xd6, 0xe5, 0xf7, 0xfe, 0x7d, 0x1e, 0x70, + 0x86, 0x19, 0xd6, 0x2a, 0x07, 0xbe, 0x69, 0x05, 0xef, 0x30, 0x6b, 0x17, + 0x06, 0x75, 0x8b, 0xdf, 0xcf, 0x2c, 0x54, 0x46, 0xd8, 0x03, 0x37, 0xfd, + 0x9e, 0xe6, 0x7b, 0xf8, 0x05, 0x8b, 0xfc, 0x64, 0x98, 0x77, 0x2f, 0x2c, + 0x5f, 0xe7, 0x35, 0x8b, 0xd8, 0x4b, 0x17, 0xf9, 0x8d, 0x7e, 0x71, 0x9d, + 0x62, 0xa5, 0x53, 0xdc, 0x0b, 0x72, 0x1c, 0x4e, 0x46, 0xca, 0x84, 0x45, + 0xc3, 0x9f, 0x1a, 0xf4, 0x32, 0xb9, 0x89, 0x62, 0xf6, 0x7d, 0x96, 0x2f, + 0xfb, 0x79, 0x04, 0x97, 0xa3, 0xb1, 0x62, 0xec, 0xdd, 0x62, 0x8c, 0x3f, + 0x0c, 0x1c, 0x63, 0xca, 0xd2, 0x66, 0xc7, 0x84, 0x17, 0xa1, 0x0d, 0x76, + 0x04, 0xb1, 0x7e, 0xc2, 0x9e, 0xf8, 0xb1, 0x63, 0xac, 0x51, 0x87, 0xa4, + 0x10, 0xc0, 0x65, 0x17, 0xd9, 0xf6, 0xea, 0x58, 0xbd, 0xec, 0x3a, 0xc5, + 0xe9, 0xc2, 0x58, 0xbf, 0x36, 0x81, 0x1d, 0x8b, 0x15, 0x03, 0xc6, 0x71, + 0xba, 0x94, 0x42, 0x79, 0x8e, 0xfd, 0xe9, 0x27, 0x02, 0xc5, 0xdd, 0xf6, + 0xb1, 0x71, 0x9c, 0x58, 0xbf, 0x68, 0x5d, 0x00, 0x12, 0xc5, 0xc5, 0xc5, + 0x8b, 0xf0, 0x4c, 0x03, 0xe2, 0xc5, 0xb8, 0xb1, 0x58, 0x6e, 0xc8, 0xa6, + 0xd0, 0x58, 0xba, 0x06, 0xac, 0x5d, 0x3d, 0x16, 0x2d, 0xba, 0xc5, 0xe2, + 0x90, 0x49, 0xe2, 0xee, 0x32, 0x71, 0x9a, 0xc4, 0x4b, 0x79, 0x5e, 0xfe, + 0x2c, 0xf0, 0x98, 0x25, 0x8a, 0x31, 0x50, 0x06, 0x11, 0x76, 0x4e, 0x71, + 0xaf, 0x8c, 0x80, 0xb4, 0x94, 0xb9, 0x0b, 0x5e, 0x84, 0x57, 0xef, 0x71, + 0xfb, 0x09, 0x62, 0xff, 0xd2, 0x77, 0xef, 0x82, 0x88, 0x46, 0xac, 0x5f, + 0x8b, 0xdf, 0xc8, 0x2c, 0x5d, 0xcc, 0x58, 0xa7, 0x37, 0xec, 0x51, 0x6e, + 0xd6, 0x2f, 0xe6, 0x08, 0x7f, 0x70, 0x96, 0x2f, 0xe9, 0x0a, 0x3b, 0x35, + 0x2b, 0x15, 0x87, 0xe8, 0xc2, 0x64, 0x61, 0x7f, 0xfd, 0xd1, 0xf5, 0x80, + 0x68, 0x71, 0xcb, 0x00, 0xb1, 0x7e, 0x6c, 0x00, 0x7e, 0x58, 0xbf, 0xbe, + 0xc3, 0x61, 0x76, 0xb1, 0x76, 0xa5, 0x62, 0xff, 0xc2, 0x7f, 0xff, 0x35, + 0xa7, 0x3a, 0xc5, 0xe1, 0xcf, 0x52, 0xc5, 0xf7, 0xdd, 0xa3, 0xd6, 0x28, + 0x8f, 0x17, 0xc4, 0x14, 0x62, 0xaa, 0x58, 0x42, 0x08, 0x70, 0x93, 0xc2, + 0xc3, 0x54, 0x37, 0x29, 0x8f, 0x2f, 0x38, 0xbb, 0x42, 0x12, 0xb4, 0xad, + 0x8c, 0x29, 0x5a, 0x17, 0xed, 0xdc, 0x11, 0xc6, 0xac, 0x5f, 0x6d, 0x3e, + 0xe2, 0xc5, 0xe9, 0x07, 0x16, 0x2b, 0x47, 0x82, 0x44, 0x97, 0xcd, 0xa6, + 0x82, 0xc5, 0x61, 0xe1, 0x91, 0x0d, 0xbc, 0xb1, 0x7b, 0x92, 0x05, 0x8b, + 0x67, 0x66, 0xbf, 0xc2, 0x54, 0x62, 0x65, 0x1a, 0x85, 0x97, 0xd3, 0xef, + 0xfd, 0x21, 0x77, 0x0e, 0x37, 0xf2, 0x25, 0x8b, 0xdd, 0x35, 0xb2, 0xc5, + 0xff, 0xfc, 0x3c, 0xea, 0x73, 0xbf, 0x80, 0xc3, 0x13, 0x6a, 0x0b, 0x14, + 0x33, 0xff, 0xe1, 0x0d, 0xe0, 0x82, 0x09, 0x62, 0xf1, 0x3c, 0xa4, 0x46, + 0x1a, 0x1b, 0xc7, 0x71, 0xac, 0x5f, 0xff, 0xfe, 0x33, 0xf0, 0xdb, 0x92, + 0x2e, 0x39, 0xd8, 0xf2, 0xc1, 0x98, 0x67, 0xe3, 0x96, 0x2b, 0x64, 0x66, + 0x31, 0x70, 0x63, 0xb7, 0xf7, 0xe7, 0xe5, 0x86, 0xac, 0x5f, 0xbf, 0x3d, + 0x82, 0x3d, 0x62, 0xf0, 0x8b, 0xcb, 0x17, 0xf3, 0x14, 0x07, 0x3b, 0x2c, + 0x50, 0xcf, 0xe3, 0x0b, 0x7e, 0x3b, 0x7f, 0xcc, 0xdf, 0x66, 0x66, 0x1a, + 0xc5, 0x0d, 0x30, 0xa8, 0xf8, 0x53, 0x31, 0x75, 0xec, 0x84, 0xac, 0x5f, + 0xff, 0x41, 0xfd, 0x09, 0x20, 0x31, 0x3f, 0x70, 0x58, 0xad, 0x1f, 0x58, + 0x43, 0x97, 0xcd, 0xe9, 0x1a, 0xc5, 0xec, 0x2d, 0xd6, 0x2f, 0x44, 0xff, + 0x58, 0xbb, 0xb8, 0x2c, 0x5f, 0xed, 0x6d, 0x39, 0x13, 0xe9, 0x62, 0xff, + 0x1b, 0x3e, 0xe7, 0xd8, 0x4b, 0x17, 0x1e, 0x56, 0x2f, 0xdf, 0x72, 0xef, + 0x8b, 0x17, 0xe9, 0x78, 0x37, 0x16, 0x2f, 0xb6, 0xce, 0xfc, 0xb1, 0x7c, + 0xe6, 0xb7, 0x96, 0x29, 0xcf, 0x23, 0x44, 0xb6, 0x89, 0x62, 0xf6, 0x03, + 0x8b, 0x15, 0x26, 0xc0, 0x84, 0xef, 0xf3, 0x7c, 0xb3, 0xa3, 0x6e, 0xb1, + 0x73, 0x79, 0x62, 0xf6, 0xa4, 0x25, 0x8a, 0x58, 0xad, 0x1a, 0xa0, 0x0f, + 0x5b, 0x75, 0x8b, 0xf0, 0x7a, 0xc1, 0x0d, 0x62, 0xb0, 0xf7, 0x9c, 0x87, + 0x82, 0x75, 0x2a, 0xa8, 0xf0, 0x64, 0xd3, 0x57, 0x35, 0x88, 0x5f, 0x45, + 0x27, 0x6f, 0x65, 0x12, 0x1f, 0xe1, 0xaf, 0xa1, 0x3f, 0x7c, 0xff, 0x14, + 0x16, 0x2e, 0xfc, 0xac, 0x5f, 0x3f, 0xc5, 0x03, 0x0d, 0xd6, 0x11, 0xdf, + 0xdc, 0x7d, 0x6f, 0xfc, 0x58, 0xbe, 0xc1, 0xbc, 0x16, 0x2f, 0xef, 0xff, + 0x3c, 0xfc, 0x58, 0xbf, 0xfa, 0x4f, 0x39, 0xc7, 0x8b, 0xf3, 0xf5, 0x8a, + 0x73, 0xf2, 0xf9, 0x75, 0xf1, 0xf9, 0x80, 0x58, 0xb4, 0x0c, 0x4c, 0xff, + 0xb3, 0x82, 0x2f, 0xe4, 0x25, 0x03, 0x21, 0xbf, 0x67, 0x5a, 0x4e, 0x35, + 0x8b, 0xe6, 0xe7, 0x48, 0x2c, 0x5d, 0x83, 0x58, 0xa3, 0x4d, 0xe7, 0x42, + 0x5a, 0x82, 0xed, 0xd7, 0x72, 0xb0, 0x75, 0x28, 0x54, 0x0b, 0x1e, 0x68, + 0xbf, 0x31, 0x41, 0xce, 0xb1, 0x7b, 0x05, 0x1c, 0xb1, 0x46, 0x37, 0x01, + 0x3d, 0x69, 0x14, 0x6a, 0x85, 0xe4, 0xcb, 0xe0, 0xda, 0x11, 0xb0, 0x32, + 0x1c, 0xaa, 0x9c, 0x97, 0xd4, 0xf1, 0xaa, 0xe8, 0xdc, 0xf0, 0xc1, 0xfc, + 0x61, 0xed, 0x19, 0xd8, 0x21, 0x46, 0x44, 0x7c, 0x22, 0x14, 0xee, 0xbf, + 0x45, 0xc8, 0xe2, 0x7b, 0xdd, 0x67, 0x5d, 0xc6, 0xeb, 0x17, 0xfd, 0xf6, + 0x88, 0xa7, 0x35, 0x05, 0x8b, 0xfc, 0x19, 0xf0, 0x72, 0x5b, 0xac, 0x5f, + 0xf9, 0x88, 0x38, 0xb8, 0xe5, 0xdc, 0x16, 0x2f, 0xfc, 0x16, 0x70, 0x9e, + 0x75, 0x9b, 0x2c, 0x54, 0x7a, 0x3b, 0x8e, 0x72, 0x23, 0x5e, 0x88, 0x37, + 0xc2, 0xda, 0x62, 0x58, 0xbf, 0xff, 0xff, 0xe3, 0x3f, 0x9d, 0xc3, 0xe7, + 0x33, 0x7f, 0x8b, 0xde, 0xc2, 0xfe, 0x7a, 0x46, 0x61, 0x9f, 0x8e, 0x58, + 0xa9, 0x46, 0x2c, 0x79, 0x2d, 0xff, 0xa7, 0x69, 0x8a, 0x49, 0xfb, 0xe2, + 0xc5, 0xee, 0xbb, 0x8d, 0x5d, 0x6a, 0xc5, 0xfd, 0xbf, 0xd8, 0x2e, 0xf8, + 0xb1, 0x7c, 0x53, 0x83, 0x58, 0xbd, 0xf7, 0x1a, 0xc5, 0xf8, 0x6f, 0xec, + 0xdd, 0x62, 0x8c, 0x4c, 0x26, 0x35, 0xa0, 0x49, 0x81, 0xa6, 0x5b, 0x90, + 0x9c, 0x76, 0xe8, 0xb1, 0x62, 0xff, 0x19, 0xec, 0x88, 0x5d, 0x81, 0x62, + 0xb0, 0xf4, 0x1c, 0x62, 0xfc, 0x53, 0xa6, 0xe2, 0xc5, 0xff, 0x0f, 0x05, + 0xd7, 0xbf, 0xd8, 0xeb, 0x17, 0xc7, 0x2c, 0x89, 0x63, 0x0d, 0xf5, 0xfa, + 0x18, 0x4d, 0x05, 0x8a, 0x93, 0xd9, 0x63, 0x2b, 0xfe, 0x1f, 0xe7, 0x30, + 0xef, 0x2b, 0x17, 0x9f, 0x69, 0x58, 0xbc, 0x0c, 0xe2, 0xc5, 0xf3, 0x76, + 0x7e, 0xd6, 0x28, 0xe7, 0xbe, 0x01, 0xdf, 0x0e, 0xd4, 0xa3, 0x17, 0x21, + 0x2d, 0x78, 0x73, 0x12, 0xc5, 0xfc, 0xfc, 0x14, 0x4e, 0x75, 0x8b, 0xdf, + 0x7f, 0xac, 0x5c, 0x13, 0x2c, 0x5b, 0x98, 0x6d, 0x7e, 0x3b, 0x7c, 0xcf, + 0x20, 0x58, 0xbb, 0xf2, 0xb1, 0x7b, 0xe2, 0x82, 0xc6, 0x16, 0xf7, 0xe1, + 0x31, 0x6f, 0xc5, 0x8b, 0xfd, 0xe7, 0x14, 0x38, 0xfb, 0x2c, 0x58, 0xce, + 0xb5, 0x18, 0x4e, 0x70, 0x02, 0xce, 0x14, 0xde, 0xd4, 0xf4, 0x58, 0xbe, + 0xe4, 0x94, 0x16, 0x2f, 0xf1, 0x30, 0x5e, 0xc2, 0x35, 0x62, 0xf7, 0x4c, + 0x1a, 0xc5, 0xfd, 0xf7, 0x92, 0x14, 0xac, 0x5f, 0xe9, 0x8f, 0x37, 0x38, + 0xd1, 0xeb, 0x17, 0xc0, 0x72, 0x89, 0x62, 0x8d, 0x44, 0x4f, 0xcb, 0x3c, + 0x75, 0x7e, 0xc1, 0x86, 0x0e, 0x2c, 0x5f, 0x71, 0x8a, 0x0b, 0x17, 0xff, + 0xff, 0xfd, 0xa1, 0x6b, 0x37, 0xcd, 0x69, 0xa1, 0x9e, 0x9f, 0x73, 0x82, + 0x63, 0x87, 0xf6, 0xfc, 0xac, 0x51, 0x8a, 0x8c, 0x3b, 0x1f, 0x88, 0x8b, + 0xe6, 0x8d, 0x0a, 0x82, 0x31, 0xe1, 0x57, 0x51, 0x15, 0xf7, 0x46, 0xfb, + 0xac, 0x5f, 0xec, 0xe3, 0x37, 0x70, 0x75, 0x8b, 0xf4, 0x08, 0x4d, 0xc5, + 0x8b, 0x83, 0xfa, 0xc5, 0xe8, 0x84, 0x1a, 0xc5, 0x49, 0xb9, 0x61, 0x9b, + 0x8b, 0xcb, 0x17, 0x4c, 0x4b, 0x17, 0x16, 0xcb, 0x15, 0x29, 0x8f, 0x6c, + 0x48, 0xe6, 0x7f, 0x61, 0x61, 0xf2, 0x17, 0xea, 0x18, 0xbf, 0x34, 0x5c, + 0x9e, 0xd6, 0x28, 0xc5, 0xfd, 0x41, 0xc2, 0xfb, 0x50, 0xe5, 0x39, 0x37, + 0xc7, 0x80, 0xc8, 0x50, 0xe8, 0xe4, 0xa7, 0x8f, 0x47, 0x35, 0xd1, 0x96, + 0xfe, 0x98, 0x7e, 0x7a, 0x3a, 0xc5, 0xcd, 0x1e, 0xb1, 0x7f, 0xf7, 0xdc, + 0x13, 0x0e, 0x0f, 0xf3, 0xa5, 0x8b, 0x1f, 0x63, 0xdf, 0xdc, 0x6a, 0xf4, + 0x9e, 0x56, 0x2b, 0x0f, 0x1b, 0x72, 0xab, 0xdf, 0x0f, 0x8b, 0x17, 0xf8, + 0xbd, 0xe2, 0x9f, 0x71, 0x62, 0xf1, 0x08, 0xd5, 0x8a, 0x93, 0xd1, 0x73, + 0x3b, 0xfa, 0x12, 0x0f, 0xc2, 0x56, 0x28, 0xd3, 0xce, 0x72, 0x0b, 0xfe, + 0xfc, 0xe8, 0xf3, 0x84, 0x35, 0x8b, 0xc5, 0x27, 0x58, 0xa1, 0x9e, 0xa0, + 0x8e, 0x2f, 0x33, 0x1d, 0x62, 0x8e, 0x6f, 0xbe, 0x45, 0x7b, 0xc1, 0x9d, + 0x62, 0xc3, 0x58, 0xbb, 0x3a, 0x96, 0x2e, 0x6e, 0x2c, 0x5b, 0x5d, 0x9f, + 0x11, 0xc7, 0xfe, 0x24, 0x21, 0xaa, 0x94, 0x63, 0x34, 0x20, 0xee, 0x87, + 0x96, 0x2f, 0xa2, 0x9f, 0x32, 0xc5, 0x6e, 0x6e, 0xc4, 0x31, 0x78, 0xb3, + 0x8b, 0x17, 0x84, 0x0c, 0x23, 0x7d, 0xd0, 0x8a, 0xd0, 0x58, 0xad, 0x8f, + 0x17, 0xe6, 0x77, 0xfe, 0xf8, 0x63, 0xf3, 0xe4, 0x52, 0x75, 0x8b, 0xa6, + 0x25, 0x8b, 0xe1, 0xfe, 0x40, 0xb1, 0x52, 0x7f, 0x84, 0x82, 0x18, 0xc5, + 0xff, 0x89, 0xbd, 0x38, 0x13, 0x13, 0x2c, 0x5f, 0xe3, 0x19, 0xc6, 0x2f, + 0x71, 0x62, 0xb7, 0x3f, 0x10, 0x1e, 0x5e, 0x92, 0x35, 0x62, 0xff, 0xde, + 0x70, 0xb7, 0xfb, 0xf4, 0x71, 0xac, 0x5f, 0xed, 0x43, 0xf9, 0xd2, 0x4e, + 0xb1, 0x4b, 0x17, 0x73, 0x16, 0x2a, 0x06, 0x8f, 0xaf, 0x0c, 0xbb, 0x36, + 0x58, 0xa1, 0x1b, 0xe0, 0xc9, 0xaf, 0x3f, 0x61, 0x2c, 0x5e, 0x10, 0xf7, + 0x58, 0xa9, 0x4d, 0xeb, 0x72, 0x3e, 0xc7, 0x5d, 0x0d, 0xa1, 0x2e, 0x02, + 0x2f, 0x0f, 0xde, 0xee, 0x1b, 0xac, 0x5d, 0x06, 0x58, 0xb8, 0x84, 0xb1, + 0x7b, 0x8f, 0xd1, 0x62, 0xfb, 0xcc, 0xdf, 0x58, 0xa8, 0x1e, 0x09, 0x0f, + 0xd4, 0xa2, 0x43, 0x61, 0x76, 0x58, 0xbe, 0xcd, 0x48, 0xd6, 0x2f, 0xa2, + 0xfe, 0x44, 0xb1, 0x7f, 0x85, 0xb7, 0x8a, 0x4f, 0xc5, 0x8b, 0xd9, 0xac, + 0x30, 0xff, 0x18, 0x88, 0x32, 0x5b, 0xc7, 0x17, 0x45, 0x8b, 0xfb, 0x21, + 0xdc, 0x33, 0xcb, 0x16, 0xf4, 0x11, 0x1f, 0x88, 0x1f, 0x20, 0xb9, 0xf7, + 0x58, 0xb3, 0x2c, 0x5d, 0xa8, 0x2c, 0x5a, 0x18, 0x6a, 0x5c, 0x46, 0xf7, + 0x54, 0x78, 0xd6, 0x2f, 0xcf, 0xb1, 0xda, 0x39, 0x62, 0xc7, 0x30, 0xfd, + 0x63, 0x62, 0x5f, 0x12, 0x50, 0x11, 0xe2, 0x28, 0x5b, 0x52, 0xc5, 0xf0, + 0xe3, 0xa4, 0x25, 0x8b, 0x84, 0x75, 0x8a, 0x23, 0x7f, 0xe2, 0x7b, 0xee, + 0xe1, 0xf7, 0x58, 0xa9, 0x3c, 0x46, 0x20, 0xbf, 0xa4, 0xdf, 0x70, 0x44, + 0xb1, 0x7f, 0x7a, 0x7a, 0x39, 0x01, 0x62, 0x95, 0x20, 0x71, 0x7f, 0xde, + 0x83, 0x9e, 0x7e, 0x18, 0xd6, 0x2c, 0x05, 0x8b, 0xf9, 0xb6, 0x03, 0x10, + 0xd1, 0x08, 0x36, 0x2b, 0x73, 0x11, 0xab, 0xb9, 0x7b, 0x0c, 0x91, 0xdc, + 0x70, 0x95, 0x75, 0x8a, 0x81, 0x0f, 0x08, 0xff, 0x90, 0x7a, 0x30, 0x4b, + 0x47, 0xac, 0x5f, 0xf3, 0xe7, 0xb9, 0xac, 0x1e, 0x2c, 0x5f, 0xdf, 0x63, + 0x94, 0xf6, 0xb1, 0x7c, 0x7e, 0x34, 0x3e, 0x7c, 0xc1, 0x9c, 0x5e, 0x66, + 0xd2, 0xc5, 0xfc, 0x0f, 0x96, 0x7b, 0x8b, 0x17, 0xf1, 0x67, 0x42, 0xce, + 0x2c, 0x5a, 0x62, 0x3f, 0x8d, 0x0e, 0x78, 0xba, 0xfd, 0x31, 0xcf, 0xf1, + 0x2c, 0x54, 0xa7, 0xb8, 0x34, 0xfc, 0x7b, 0xe4, 0x2c, 0xbc, 0x6b, 0x6e, + 0x2c, 0x5f, 0xbf, 0x31, 0xe2, 0x82, 0xc5, 0x49, 0xbe, 0x61, 0x2b, 0xe6, + 0xf6, 0x04, 0xb1, 0x7f, 0xc3, 0x9e, 0xfe, 0xe3, 0xd6, 0x2c, 0x54, 0x19, + 0xea, 0x63, 0x86, 0xa6, 0x11, 0x1b, 0x0b, 0xed, 0xe3, 0x7a, 0xd4, 0x39, + 0x0f, 0x09, 0xff, 0xca, 0x19, 0x66, 0x90, 0x42, 0xc0, 0xa3, 0x3a, 0xe4, + 0x64, 0xde, 0x9c, 0x08, 0xe9, 0x08, 0xc8, 0xe1, 0xfe, 0xa2, 0x3b, 0xff, + 0xe3, 0x5a, 0x2f, 0xce, 0xde, 0x73, 0x9c, 0x5c, 0x58, 0xbc, 0xe5, 0xba, + 0xc5, 0xf6, 0x77, 0xec, 0x58, 0xb4, 0x0e, 0x78, 0x04, 0x3b, 0x7a, 0x1e, + 0xd9, 0x62, 0xff, 0xf1, 0x67, 0xf1, 0xb7, 0xfc, 0x90, 0x86, 0xb1, 0x7f, + 0xf8, 0x13, 0xde, 0x6c, 0x36, 0x6d, 0xd8, 0x6b, 0x16, 0x0f, 0x74, 0x4a, + 0x81, 0x26, 0xa5, 0x30, 0x61, 0x93, 0xea, 0x16, 0x97, 0xf1, 0x7a, 0x19, + 0xac, 0x58, 0xbf, 0x33, 0x6d, 0x84, 0xb1, 0x74, 0x73, 0x2c, 0x53, 0x1f, + 0x77, 0x8b, 0x43, 0x27, 0xbf, 0xda, 0xdb, 0x8d, 0xbe, 0xb1, 0x62, 0xff, + 0xfa, 0x26, 0x3f, 0x03, 0xd7, 0xf3, 0xa4, 0xe7, 0x6b, 0x17, 0xfb, 0xf3, + 0xf7, 0x37, 0x02, 0x58, 0xbf, 0xb3, 0x76, 0xfc, 0xfd, 0x62, 0xa0, 0x7c, + 0x7f, 0x35, 0xbf, 0x8b, 0x7c, 0xf7, 0xdd, 0x62, 0xff, 0xf6, 0x98, 0xf8, + 0x32, 0xcf, 0x72, 0x4e, 0xb1, 0x79, 0x9f, 0xd2, 0x7e, 0xee, 0x5d, 0x6e, + 0x2c, 0x5f, 0x9c, 0x1c, 0xfb, 0xac, 0x56, 0x1b, 0xa2, 0x12, 0xbf, 0x9b, + 0xdc, 0xf1, 0x4a, 0xc5, 0xda, 0x1a, 0xc5, 0xc1, 0x04, 0xb1, 0x50, 0x36, + 0x41, 0x0c, 0x5e, 0x97, 0xe8, 0x91, 0x18, 0x68, 0xaf, 0xf9, 0xc9, 0xc1, + 0xcc, 0xfb, 0x2c, 0x5f, 0xc5, 0x81, 0x61, 0x0d, 0x62, 0xb1, 0x51, 0xc7, + 0xe1, 0x32, 0xcd, 0x40, 0x1f, 0xe4, 0x20, 0x7c, 0x62, 0x19, 0xbd, 0xee, + 0x75, 0x9d, 0x6a, 0xc5, 0xfd, 0x25, 0xef, 0xe4, 0x16, 0x2e, 0xd4, 0xac, + 0x5c, 0x0e, 0x2c, 0x5f, 0xcf, 0xf7, 0x34, 0xd9, 0x58, 0xa1, 0x9e, 0x3f, + 0x86, 0x29, 0xd1, 0x00, 0x1a, 0xf5, 0x69, 0x1a, 0x1c, 0x85, 0x6d, 0xf1, + 0x09, 0x83, 0x58, 0xa9, 0x5c, 0xd8, 0xc3, 0x67, 0x95, 0xe1, 0xe6, 0xf0, + 0xe1, 0xf1, 0xd4, 0x51, 0x79, 0xcb, 0x16, 0x2f, 0x9c, 0xed, 0x12, 0xc5, + 0xdc, 0xf2, 0xc5, 0xe7, 0x26, 0x58, 0xb6, 0xcb, 0x16, 0xc8, 0x1a, 0xe2, + 0x1b, 0xbe, 0xd6, 0xcf, 0xb2, 0xc5, 0xdc, 0xfa, 0xc5, 0xe9, 0x39, 0x98, + 0x6f, 0x7c, 0x4b, 0x50, 0x4c, 0x60, 0x63, 0x7b, 0x91, 0xc7, 0xa3, 0x13, + 0x15, 0xff, 0x88, 0x4c, 0x19, 0x99, 0x84, 0x6a, 0xc5, 0xe1, 0xf5, 0xa4, + 0xb1, 0x7e, 0x01, 0x67, 0x4c, 0x58, 0xbd, 0xf9, 0x95, 0x8b, 0xfd, 0xee, + 0x7c, 0x52, 0x5b, 0x2c, 0x5e, 0x72, 0x65, 0x8b, 0x3e, 0x1e, 0x86, 0xe6, + 0xb7, 0xf1, 0xf0, 0x72, 0x5b, 0xac, 0x51, 0x89, 0xa6, 0x75, 0xa8, 0x10, + 0x22, 0x39, 0x4f, 0xdb, 0x03, 0x27, 0xbc, 0x10, 0x41, 0x24, 0x52, 0x44, + 0x61, 0xa1, 0xbe, 0x70, 0x9e, 0x24, 0x8a, 0xdc, 0xf0, 0xdc, 0x7e, 0xdd, + 0x16, 0x2f, 0x4f, 0x4c, 0x58, 0xa1, 0x9b, 0x2d, 0x0a, 0x5e, 0x8b, 0x3e, + 0xb1, 0x58, 0x6f, 0xd8, 0x86, 0xf7, 0x84, 0xcb, 0x16, 0xd9, 0x62, 0xfb, + 0xda, 0x6e, 0x8b, 0x15, 0x87, 0xab, 0xa1, 0xd6, 0x13, 0xbf, 0x1d, 0xfe, + 0xe7, 0x58, 0xbb, 0x3a, 0xf5, 0x8b, 0xfb, 0xe6, 0x69, 0xe7, 0x8b, 0x15, + 0x1a, 0x3a, 0x9d, 0xf9, 0x8c, 0x77, 0x68, 0xc1, 0xe1, 0x19, 0x70, 0xe1, + 0x61, 0x93, 0xfe, 0x8f, 0x4f, 0xff, 0x8a, 0x32, 0x3d, 0x47, 0x34, 0x78, + 0x51, 0xfe, 0x74, 0x1d, 0xa3, 0x7f, 0x04, 0x73, 0x45, 0x0c, 0x3e, 0x42, + 0x4f, 0xce, 0x9d, 0x0b, 0x42, 0x28, 0x0c, 0x72, 0xfc, 0x4d, 0x0c, 0x1a, + 0xc5, 0xe8, 0x0b, 0x16, 0x2f, 0xfd, 0x9e, 0xe0, 0x7b, 0x03, 0x3d, 0xc5, + 0x8b, 0xd1, 0x34, 0xac, 0x5f, 0xb3, 0xbe, 0x4c, 0x16, 0x2b, 0x48, 0xa5, + 0x00, 0xe8, 0x90, 0x82, 0x1d, 0xbf, 0xef, 0xee, 0xf2, 0x03, 0xcc, 0x16, + 0x2f, 0xff, 0xfb, 0x99, 0xf9, 0xd0, 0x06, 0xcd, 0xbf, 0x3e, 0xf2, 0x5e, + 0x58, 0xbf, 0xfb, 0xc0, 0x72, 0x87, 0x36, 0xe9, 0xc7, 0x58, 0xbd, 0xfc, + 0xd9, 0x62, 0xfd, 0x80, 0x06, 0x01, 0x62, 0x98, 0xf1, 0x88, 0x7a, 0xfc, + 0x39, 0xfc, 0xc1, 0x62, 0xfe, 0xcd, 0x49, 0x4f, 0x16, 0x2f, 0xf8, 0xed, + 0xcc, 0xd3, 0x76, 0x12, 0xc5, 0xfd, 0x84, 0x2f, 0x4f, 0xd6, 0x2f, 0xee, + 0x67, 0x42, 0x9e, 0xf0, 0xfa, 0x38, 0x77, 0x52, 0x98, 0x0e, 0x14, 0x7a, + 0x12, 0x97, 0xed, 0x3e, 0xcc, 0x75, 0x8b, 0xf7, 0x83, 0xfb, 0x01, 0x62, + 0xb6, 0x44, 0x3e, 0x1a, 0x76, 0x53, 0x43, 0x54, 0xcf, 0xdc, 0x23, 0x8a, + 0x3a, 0x8b, 0xc4, 0xfc, 0x58, 0xbc, 0xd9, 0xba, 0xc5, 0xe7, 0xcd, 0x96, + 0x2f, 0xe2, 0x07, 0x3d, 0xce, 0xd6, 0x2f, 0xfc, 0x13, 0x0c, 0xc0, 0xc0, + 0x07, 0xea, 0x58, 0xbf, 0x0b, 0xcc, 0x0e, 0x2c, 0x56, 0x22, 0x7f, 0xe6, + 0x00, 0x46, 0xbf, 0xed, 0xa5, 0xb7, 0x06, 0xb3, 0xb5, 0x8a, 0xd1, 0xf5, + 0x91, 0x7d, 0xe6, 0x20, 0x2c, 0x5f, 0xde, 0x6f, 0x81, 0xbc, 0xb1, 0x7b, + 0x33, 0x75, 0x8a, 0x19, 0xf3, 0xe0, 0xe4, 0x45, 0xd7, 0xfc, 0xc7, 0x7f, + 0xf7, 0xc9, 0x1a, 0xc5, 0xff, 0x88, 0x05, 0x3d, 0xc5, 0x24, 0x05, 0x8b, + 0xf4, 0x5c, 0xf6, 0x0d, 0x62, 0xa4, 0xfa, 0x43, 0x3f, 0xbf, 0xe9, 0xe1, + 0xe4, 0xe7, 0x9e, 0xd6, 0x28, 0xc5, 0xe5, 0xad, 0x8e, 0xb2, 0x56, 0x6b, + 0x9e, 0xe8, 0x73, 0xe3, 0xad, 0x19, 0x38, 0x21, 0x10, 0x45, 0xfc, 0x85, + 0x18, 0x64, 0x57, 0xe3, 0x0f, 0x39, 0xe5, 0x8b, 0xfe, 0xd4, 0xf3, 0x34, + 0xdd, 0x84, 0xb1, 0x74, 0x09, 0x62, 0xb0, 0xf4, 0x80, 0x77, 0x5b, 0x22, + 0x72, 0x0f, 0x77, 0xe8, 0xa3, 0x81, 0x1d, 0x8b, 0x17, 0xbc, 0xdf, 0x58, + 0xbf, 0x78, 0xa4, 0xfc, 0x58, 0xbf, 0x71, 0xbb, 0xc3, 0xac, 0x54, 0x9f, + 0x77, 0x63, 0xbe, 0x28, 0xbc, 0xf8, 0x6a, 0xc5, 0xfd, 0x0d, 0x64, 0x73, + 0x81, 0x62, 0xb8, 0x79, 0xc2, 0x1d, 0xbe, 0x6e, 0x9f, 0x75, 0x8b, 0xff, + 0xe9, 0xef, 0xf9, 0xc1, 0x36, 0x85, 0xb6, 0x7d, 0x62, 0x9c, 0xfd, 0xbe, + 0x49, 0x7e, 0x2f, 0x71, 0xce, 0xb1, 0x7f, 0xda, 0xe7, 0xdf, 0x71, 0x68, + 0x0b, 0x15, 0x87, 0xc8, 0xc5, 0x17, 0xfd, 0x9b, 0x1f, 0x3b, 0xf4, 0x9d, + 0x62, 0xa4, 0xf6, 0xc6, 0x41, 0x7e, 0xd6, 0x74, 0x6f, 0xac, 0x59, 0xd6, + 0x2f, 0xf9, 0x8d, 0xdf, 0xee, 0x36, 0x82, 0xc5, 0xf6, 0xdb, 0x37, 0x6b, + 0x16, 0xe3, 0x9f, 0x91, 0x08, 0x86, 0x77, 0x7f, 0xc3, 0xfc, 0xea, 0x41, + 0x9c, 0x58, 0xbf, 0xff, 0xdf, 0x92, 0x91, 0x6f, 0xe6, 0xfe, 0x1d, 0xfc, + 0x01, 0x2c, 0x51, 0xa9, 0xb5, 0x02, 0x13, 0x9c, 0x34, 0xf1, 0xcd, 0xf8, + 0x53, 0xb8, 0x04, 0xb1, 0x7f, 0xb9, 0x27, 0xe6, 0xe2, 0xd9, 0x62, 0xff, + 0xf1, 0xaf, 0xe2, 0xc8, 0x19, 0xb9, 0xc1, 0x2b, 0x17, 0xd9, 0xaf, 0xba, + 0xc5, 0xff, 0xff, 0xf3, 0x6b, 0x6f, 0x8b, 0x9a, 0xcc, 0xec, 0x20, 0xc0, + 0x09, 0xec, 0x39, 0xd0, 0x16, 0x2f, 0xcf, 0x17, 0xdc, 0x0b, 0x17, 0xff, + 0x9a, 0x05, 0x9d, 0x1a, 0x29, 0xcf, 0x71, 0x62, 0xa5, 0x31, 0xb8, 0x11, + 0x7e, 0x10, 0xac, 0x53, 0x68, 0xe5, 0x8b, 0xa4, 0xd5, 0x8b, 0xe1, 0xb3, + 0x8d, 0x62, 0xa3, 0x43, 0xcf, 0xd8, 0x57, 0x06, 0x2f, 0x74, 0xc2, 0x58, + 0xbb, 0xee, 0xb1, 0x7b, 0xc0, 0x12, 0xc5, 0xff, 0x38, 0x51, 0x19, 0x3a, + 0xd6, 0x2c, 0x5f, 0xf8, 0x3e, 0xc1, 0x9d, 0x1c, 0xbd, 0xc5, 0x8a, 0x94, + 0x69, 0x1a, 0x3c, 0xe2, 0xf1, 0x0f, 0x70, 0xf2, 0xff, 0x66, 0xc1, 0xff, + 0xf9, 0x1e, 0xb1, 0x7f, 0x9f, 0x86, 0x1b, 0xac, 0xe2, 0xc5, 0xf0, 0x39, + 0xe7, 0x58, 0xbf, 0xf7, 0xf3, 0x36, 0x7c, 0xe9, 0x3d, 0xac, 0x54, 0x9f, + 0x20, 0x08, 0xea, 0x51, 0xe9, 0xb9, 0xc8, 0x50, 0x9a, 0xbf, 0xfa, 0x4f, + 0xad, 0x4e, 0xde, 0x66, 0x35, 0x62, 0xe9, 0x09, 0x62, 0x80, 0x7b, 0xc4, + 0x8d, 0x7f, 0xfc, 0x2e, 0xbf, 0x9c, 0xdf, 0xef, 0xdf, 0xb5, 0xa9, 0x58, + 0xbf, 0xba, 0x3e, 0xb0, 0x71, 0xa2, 0xc5, 0xf3, 0xfa, 0x74, 0xb1, 0x7f, + 0xd9, 0xcc, 0x7d, 0x8e, 0xdd, 0x4b, 0x17, 0x7f, 0x16, 0x2a, 0x07, 0xa7, + 0xc3, 0xca, 0x94, 0xc9, 0x71, 0x67, 0xe6, 0xa2, 0x75, 0xbc, 0x79, 0xdd, + 0x62, 0xff, 0x9a, 0x1c, 0x03, 0x74, 0xc1, 0xac, 0x5d, 0x9f, 0xc3, 0xd9, + 0xf8, 0xf5, 0xff, 0x33, 0xfa, 0x60, 0x21, 0xe2, 0xc5, 0xf6, 0x78, 0x3d, + 0x96, 0x2f, 0x9f, 0x5f, 0x17, 0xcf, 0x77, 0x87, 0x17, 0xed, 0x3e, 0xcc, + 0x75, 0x8b, 0x82, 0x09, 0x62, 0xb0, 0xf0, 0xc2, 0x29, 0xbf, 0x99, 0xfb, + 0xe4, 0x9a, 0xb1, 0x61, 0x24, 0x46, 0x1e, 0x8f, 0xc8, 0xa8, 0xe9, 0x80, + 0x7e, 0x19, 0xb7, 0xff, 0xba, 0x7d, 0xf0, 0xb7, 0xfb, 0x9e, 0x77, 0x58, + 0xbf, 0x98, 0x1d, 0xc3, 0x3c, 0xb1, 0x58, 0x7f, 0x8e, 0x9b, 0x7a, 0x01, + 0x9d, 0x62, 0xfd, 0xaf, 0xe6, 0xfb, 0x2c, 0x5e, 0xec, 0x63, 0x58, 0xa7, + 0x3c, 0xa6, 0x2b, 0xbd, 0x20, 0xe2, 0xc5, 0x41, 0x57, 0xa3, 0xc7, 0x13, + 0xf8, 0x52, 0xb1, 0x07, 0x1a, 0x44, 0x41, 0x7b, 0x0f, 0x1e, 0xb1, 0x7f, + 0xe6, 0xe9, 0x81, 0x94, 0xfd, 0xf6, 0x58, 0xbf, 0xd9, 0xc2, 0xcf, 0x7d, + 0xd6, 0x28, 0x68, 0x93, 0xd1, 0x01, 0x20, 0xdf, 0xf8, 0xb7, 0x1f, 0xe7, + 0xe4, 0xdb, 0x2c, 0x5f, 0xbe, 0xc4, 0xe7, 0x58, 0xa9, 0x3e, 0x77, 0x40, + 0xad, 0x99, 0xde, 0x50, 0x84, 0xc0, 0xe1, 0xc1, 0x91, 0xc5, 0xee, 0x89, + 0xd9, 0x53, 0x9b, 0xc5, 0x1b, 0x46, 0xa1, 0x20, 0x78, 0xc1, 0xbf, 0x19, + 0xf0, 0x21, 0x28, 0x51, 0xa3, 0x7a, 0x5c, 0x4f, 0x48, 0x7a, 0xf5, 0x42, + 0x5a, 0xff, 0xcc, 0xdb, 0xfc, 0x43, 0x13, 0x06, 0xb1, 0x7f, 0xc3, 0xc0, + 0x01, 0xc8, 0xc8, 0xe5, 0x8a, 0x58, 0xbf, 0xb0, 0x00, 0x72, 0x8e, 0x58, + 0xbf, 0xa7, 0x8f, 0xe2, 0x95, 0x8a, 0x31, 0x14, 0xb2, 0x7a, 0x30, 0xcf, + 0x98, 0x5f, 0xc1, 0xfb, 0xbd, 0xdf, 0x16, 0x2f, 0xce, 0x5e, 0xc3, 0xac, + 0x5f, 0x34, 0x30, 0x6b, 0x14, 0x61, 0xfd, 0x40, 0xc4, 0x89, 0xef, 0xb3, + 0xee, 0x12, 0xc5, 0xfe, 0xf6, 0x68, 0x07, 0x68, 0x2c, 0x5f, 0x40, 0x18, + 0x05, 0x8b, 0xe6, 0xc0, 0xf1, 0x62, 0xf6, 0x16, 0xeb, 0x17, 0xf7, 0xb2, + 0x22, 0x93, 0xae, 0x40, 0x22, 0xee, 0xa1, 0x2c, 0x5e, 0x1f, 0xe5, 0x52, + 0x01, 0x11, 0x87, 0xac, 0x73, 0xbb, 0xc2, 0xd1, 0xab, 0x15, 0xb2, 0x37, + 0x49, 0xce, 0x39, 0x2e, 0xfe, 0x92, 0x33, 0xcf, 0xb2, 0xc5, 0xff, 0xff, + 0xe1, 0xc9, 0xf3, 0x9f, 0xc2, 0x63, 0x5b, 0x76, 0xd3, 0x41, 0xf8, 0x05, + 0x8b, 0xff, 0xdd, 0x7b, 0xeb, 0x3a, 0x3f, 0xa7, 0x0a, 0x0b, 0x17, 0x14, + 0xac, 0x54, 0xaa, 0xe6, 0xd8, 0xbf, 0x08, 0xfb, 0x34, 0xf9, 0x1b, 0x43, + 0xfc, 0x06, 0x64, 0x5e, 0x27, 0x7e, 0xa4, 0xfb, 0xfb, 0xbe, 0x61, 0xe6, + 0x3d, 0x62, 0xfe, 0xc3, 0x38, 0x53, 0xa5, 0x8a, 0xc3, 0xe0, 0x08, 0xca, + 0xff, 0xa2, 0x90, 0xb5, 0x9b, 0xbf, 0xd6, 0x2f, 0xe7, 0xdb, 0xcd, 0x0e, + 0x2c, 0x5f, 0xf3, 0xeb, 0xed, 0xc7, 0xd4, 0xac, 0x5a, 0x04, 0x7c, 0xfe, + 0x2f, 0xbf, 0xef, 0x66, 0xd3, 0xd4, 0xfa, 0xc5, 0x8b, 0xec, 0x3c, 0xc7, + 0xac, 0x5e, 0xc2, 0xdf, 0xb3, 0xe1, 0xe1, 0xe5, 0xb8, 0xb1, 0x58, 0x78, + 0xce, 0x69, 0x7f, 0xde, 0x9f, 0x16, 0x6c, 0xc4, 0xb1, 0x58, 0x9e, 0x4f, + 0x70, 0xa3, 0xfc, 0x33, 0xbc, 0x41, 0x7e, 0x29, 0x21, 0x4a, 0xc5, 0xed, + 0x37, 0x16, 0x2f, 0xd2, 0x53, 0xee, 0x2c, 0x56, 0x1f, 0x53, 0x93, 0x7c, + 0x76, 0xee, 0x81, 0xac, 0x5b, 0x83, 0x3c, 0x8c, 0x2d, 0xb3, 0x9a, 0x99, + 0x0f, 0x70, 0xfa, 0xbf, 0xff, 0xbf, 0x3f, 0xdd, 0xf9, 0x83, 0x2c, 0x8a, + 0x29, 0xd9, 0x62, 0xfc, 0x70, 0x6b, 0x3b, 0x58, 0xa1, 0xa2, 0x23, 0x17, + 0xaf, 0xda, 0x71, 0x75, 0xf2, 0xb1, 0x7f, 0xb5, 0x9d, 0xf0, 0x0d, 0xe5, + 0x8b, 0xfc, 0xe5, 0xe9, 0x07, 0xb8, 0xb1, 0x74, 0xf6, 0xb1, 0x50, 0x3c, + 0xb0, 0x8c, 0xef, 0xfe, 0x29, 0x88, 0x9e, 0x2f, 0x3f, 0x61, 0x2c, 0x54, + 0x47, 0xd5, 0xe2, 0x3a, 0x94, 0xce, 0x8d, 0x2d, 0xe4, 0x3a, 0xac, 0x2d, + 0x93, 0x92, 0xde, 0x35, 0xcb, 0xe8, 0x37, 0x61, 0x2c, 0x52, 0xc5, 0x49, + 0xb1, 0x19, 0x2d, 0xfe, 0xd6, 0xb3, 0xfd, 0xc3, 0x8b, 0x17, 0xe6, 0xdb, + 0x8f, 0xa5, 0x8a, 0x30, 0xf7, 0xfe, 0x6d, 0x7f, 0xff, 0xb3, 0x82, 0x6e, + 0xf3, 0x08, 0xde, 0x73, 0x0b, 0xdc, 0x58, 0xbf, 0xe8, 0x39, 0x7b, 0xf9, + 0x08, 0xe5, 0x8a, 0xdd, 0x18, 0x1d, 0x91, 0x9d, 0x86, 0xfd, 0x07, 0x1e, + 0x1d, 0x62, 0xe3, 0x7a, 0x2c, 0x5f, 0xfd, 0xf7, 0xf9, 0x0b, 0x6d, 0xe7, + 0x46, 0xac, 0x5f, 0xf7, 0xb5, 0x39, 0xdf, 0x5d, 0xf5, 0xc8, 0xd1, 0x62, + 0xf8, 0xec, 0xc3, 0x58, 0xbf, 0xef, 0x0a, 0x73, 0x6e, 0xbb, 0xeb, 0x91, + 0xa2, 0xc5, 0xcc, 0x11, 0x89, 0xa3, 0x8c, 0xa3, 0x71, 0xbe, 0xd2, 0x38, + 0x9a, 0x19, 0x15, 0xd0, 0x82, 0xc5, 0x4b, 0x23, 0xc7, 0x25, 0x86, 0x3c, + 0xa4, 0xad, 0x31, 0xb4, 0x67, 0xe5, 0x1b, 0xcf, 0x9a, 0x2f, 0xfe, 0xfb, + 0x6b, 0x52, 0x7f, 0xf6, 0xd1, 0xeb, 0x17, 0xee, 0xae, 0xa9, 0xef, 0x8b, + 0x15, 0x87, 0xf3, 0xa4, 0x9b, 0xef, 0x70, 0x50, 0x58, 0xbf, 0xf4, 0xf6, + 0x0c, 0x76, 0xe9, 0x3a, 0x58, 0xbf, 0x0a, 0x3b, 0x34, 0x05, 0x8b, 0xf6, + 0x80, 0x76, 0x82, 0xc5, 0x62, 0x36, 0x98, 0x84, 0x89, 0x38, 0x80, 0x19, + 0x65, 0xb6, 0x58, 0xbf, 0xb7, 0xe4, 0xc0, 0x5a, 0x58, 0xbf, 0x19, 0x91, + 0x39, 0xd6, 0x2f, 0xe0, 0x34, 0x36, 0x6d, 0x96, 0x2f, 0xa7, 0xbc, 0x25, + 0x8b, 0xf4, 0x1c, 0x80, 0xeb, 0x17, 0x77, 0xed, 0x8f, 0x27, 0x08, 0xaf, + 0xe1, 0x6c, 0xe4, 0x23, 0xac, 0x54, 0x9e, 0xf1, 0x17, 0xdf, 0x1f, 0xf3, + 0xd1, 0x62, 0xff, 0x37, 0x3c, 0x4f, 0xdf, 0x16, 0x2f, 0xf3, 0x7a, 0x2f, + 0xce, 0x80, 0xb1, 0x6e, 0xcd, 0x3e, 0x9f, 0x9a, 0x54, 0xa2, 0xe1, 0xa1, + 0x1d, 0x7f, 0xff, 0x33, 0xfa, 0x7e, 0xfe, 0xe4, 0x94, 0x18, 0x80, 0xb1, + 0x7f, 0x98, 0xb3, 0xc5, 0x30, 0x58, 0xbf, 0xfc, 0x29, 0x33, 0xab, 0xcf, + 0xcf, 0xf6, 0xc1, 0x2c, 0x5f, 0xee, 0xfe, 0xde, 0xd3, 0xf6, 0xb1, 0x52, + 0xac, 0xff, 0x63, 0x0c, 0x2a, 0x78, 0x6b, 0xea, 0x1b, 0x1f, 0x26, 0x25, + 0x8e, 0x18, 0x86, 0xa3, 0x7f, 0xec, 0x1f, 0xda, 0x32, 0x7f, 0x3d, 0xac, + 0x5f, 0xf7, 0xdb, 0x8e, 0x45, 0x3d, 0xac, 0x5e, 0xfb, 0x1d, 0x62, 0x96, + 0x3a, 0xd5, 0xc7, 0x1d, 0x4b, 0x52, 0x3c, 0x22, 0x38, 0x85, 0xe3, 0x8b, + 0xfe, 0x23, 0x74, 0x4f, 0xb8, 0x89, 0x62, 0xf0, 0x98, 0x35, 0x8b, 0xf7, + 0xa7, 0x0a, 0x56, 0x29, 0xcf, 0xfb, 0x47, 0x44, 0x3d, 0x78, 0x32, 0xf2, + 0xc5, 0xc7, 0x65, 0x8b, 0x9f, 0x65, 0x8a, 0x73, 0x5f, 0xf1, 0x7b, 0xff, + 0xdf, 0x78, 0xf7, 0xda, 0x7d, 0x31, 0x4f, 0x6b, 0x17, 0xfb, 0x1c, 0xd7, + 0x1b, 0x1d, 0x62, 0xfe, 0xd7, 0x7c, 0xc2, 0x35, 0x62, 0x8c, 0x45, 0x90, + 0xd3, 0xc3, 0x33, 0xbd, 0x20, 0x75, 0x8a, 0xd9, 0x36, 0xd3, 0x53, 0x4f, + 0x0d, 0x20, 0x8c, 0xaf, 0xfd, 0x2f, 0xc9, 0xf7, 0x27, 0xf2, 0xb1, 0x7f, + 0xc6, 0x72, 0x74, 0xd0, 0x7f, 0xac, 0x5f, 0xf6, 0xe2, 0xc7, 0xef, 0xd2, + 0x75, 0x8b, 0x3f, 0x0f, 0xd4, 0x47, 0x57, 0xfd, 0x9b, 0x14, 0x9b, 0x9d, + 0xf9, 0x62, 0x8d, 0x4c, 0x50, 0xf0, 0xb2, 0x0c, 0x9e, 0xfd, 0xbe, 0x3f, + 0x0e, 0xb1, 0x7f, 0xf7, 0x24, 0xbc, 0x1c, 0x5f, 0x7f, 0x71, 0x62, 0xfb, + 0x35, 0x3d, 0x16, 0x2b, 0xb3, 0xeb, 0xf2, 0x3d, 0xfd, 0x09, 0xda, 0x78, + 0x25, 0x8b, 0xff, 0xf1, 0xe6, 0x19, 0xb8, 0xdc, 0xb3, 0x5b, 0xce, 0x2c, + 0x5f, 0xf4, 0xe8, 0x01, 0x96, 0x0b, 0xaf, 0x58, 0xb6, 0xf1, 0x23, 0x0c, + 0x05, 0xe1, 0xaa, 0xdf, 0x46, 0xcd, 0xe9, 0x58, 0xae, 0xd3, 0x46, 0x28, + 0x73, 0x70, 0xe6, 0x8e, 0xa8, 0x41, 0xa3, 0xda, 0xa9, 0x5e, 0x4a, 0xc8, + 0x72, 0x3c, 0x73, 0x4d, 0x1a, 0xd0, 0xa5, 0x24, 0x5e, 0xea, 0x9e, 0xd6, + 0x2f, 0xf1, 0x60, 0x38, 0x1b, 0x79, 0x62, 0xf7, 0x98, 0x6b, 0x17, 0x61, + 0xd6, 0x2f, 0xb5, 0xb4, 0xc1, 0x62, 0xa4, 0xdd, 0xe0, 0xbd, 0xfd, 0xe2, + 0x93, 0xf3, 0xad, 0x58, 0xb9, 0xf1, 0x62, 0xfd, 0x23, 0x79, 0xea, 0x58, + 0xbf, 0x66, 0xb4, 0xd0, 0x58, 0xbf, 0x6b, 0x4f, 0x17, 0x16, 0x2a, 0x07, + 0xa5, 0x85, 0x15, 0x1b, 0x23, 0x9a, 0x06, 0x7f, 0x16, 0xf3, 0xe5, 0xdb, + 0x4a, 0xc5, 0xff, 0x3e, 0x1a, 0xfa, 0xf1, 0x4a, 0xc5, 0x1c, 0xf4, 0x38, + 0x31, 0x7f, 0xb0, 0xa7, 0xbe, 0x36, 0xeb, 0x14, 0x6a, 0x3a, 0x37, 0x84, + 0x90, 0x44, 0x57, 0xb9, 0x0d, 0xd6, 0x2f, 0xa6, 0x3f, 0x52, 0xb1, 0x58, + 0x78, 0x9c, 0x1f, 0xbc, 0x03, 0xf9, 0x62, 0xfb, 0xe3, 0x16, 0xcb, 0x15, + 0x05, 0x6f, 0x4e, 0x43, 0x11, 0xa1, 0xd6, 0x1a, 0x3e, 0xd0, 0x3e, 0x11, + 0x0f, 0x87, 0xaf, 0x6f, 0x06, 0x58, 0xbf, 0xe3, 0xce, 0xef, 0xed, 0x08, + 0xeb, 0x17, 0xed, 0x38, 0x03, 0x3a, 0xc5, 0xe6, 0x07, 0x16, 0x28, 0xc4, + 0x50, 0x60, 0xf6, 0x8e, 0xc8, 0xaa, 0xfd, 0xf6, 0xd8, 0x7d, 0x16, 0x2f, + 0x07, 0x3b, 0x2c, 0x5f, 0xd8, 0x3f, 0xb6, 0x69, 0x62, 0xfe, 0xd4, 0xbc, + 0x1b, 0x8b, 0x16, 0xea, 0x58, 0xbb, 0x4f, 0xb1, 0xe1, 0x44, 0x5b, 0x7f, + 0xe6, 0xcc, 0x23, 0x43, 0xf0, 0x86, 0xb1, 0x7f, 0x99, 0xc6, 0xf9, 0xdf, + 0x96, 0x2f, 0x44, 0xc3, 0x58, 0xbd, 0xd4, 0xfd, 0x16, 0x2d, 0xb6, 0x91, + 0xc5, 0xf2, 0xff, 0x20, 0x08, 0xcf, 0xa8, 0x7a, 0xf3, 0xf7, 0xc5, 0x8b, + 0xff, 0xb9, 0x3b, 0x66, 0xa2, 0x29, 0x07, 0x16, 0x2f, 0xfe, 0xeb, 0xca, + 0x4f, 0xac, 0x7f, 0xc8, 0xd6, 0x2f, 0xf3, 0xff, 0x35, 0xac, 0xed, 0x62, + 0xfd, 0x11, 0x4e, 0xa0, 0xb1, 0x50, 0x3d, 0xdc, 0x34, 0xbf, 0xcc, 0x6f, + 0x33, 0xcf, 0xc5, 0x8a, 0x93, 0xd5, 0x22, 0x1b, 0xff, 0x88, 0x5b, 0xb9, + 0xbc, 0xfc, 0x97, 0x96, 0x2f, 0x61, 0x6e, 0xb1, 0x73, 0x85, 0x87, 0xc6, + 0x1a, 0x35, 0x41, 0x70, 0xef, 0x73, 0xc3, 0x96, 0x7c, 0x7d, 0xa3, 0x51, + 0x02, 0xa7, 0x87, 0x84, 0x8c, 0x14, 0x3e, 0xba, 0xa1, 0x07, 0x79, 0xa1, + 0x12, 0xc5, 0xef, 0xc9, 0xd6, 0x2b, 0x46, 0xef, 0xe3, 0xd7, 0xfe, 0xef, + 0xd8, 0x52, 0x0c, 0x20, 0x2c, 0x5f, 0xfd, 0xdf, 0xdf, 0x53, 0xd1, 0xfa, + 0x61, 0x2c, 0x5e, 0x90, 0x75, 0x8b, 0x14, 0xe7, 0xd5, 0xc4, 0x8a, 0xc4, + 0x64, 0xf2, 0x15, 0x14, 0x6a, 0x62, 0x21, 0x43, 0xaa, 0xfb, 0xf8, 0x06, + 0x58, 0xa9, 0x54, 0x76, 0xd1, 0xf7, 0x70, 0xae, 0xff, 0xee, 0x10, 0xb3, + 0x72, 0xcd, 0xb3, 0xb5, 0x8b, 0xf7, 0x04, 0xf3, 0x12, 0xc5, 0xfb, 0x8e, + 0x5e, 0x75, 0x8b, 0xfd, 0xdb, 0x47, 0xc1, 0xcb, 0x16, 0x2f, 0xde, 0x7d, + 0xda, 0x0b, 0x17, 0x1b, 0xc5, 0x8a, 0x94, 0x64, 0x44, 0x53, 0xf2, 0x76, + 0x36, 0xe1, 0x4d, 0xd3, 0xc5, 0x8a, 0xd1, 0xf0, 0x71, 0x26, 0xff, 0xd0, + 0x73, 0x85, 0x84, 0x3f, 0xca, 0xc5, 0xff, 0xc5, 0x3e, 0xcc, 0xd6, 0xb2, + 0x77, 0x58, 0xbf, 0xc6, 0xe6, 0x80, 0x77, 0xe2, 0xc5, 0x76, 0x8b, 0x7f, + 0x9f, 0x92, 0x1d, 0xcd, 0xe5, 0x8b, 0xdb, 0x0a, 0x0b, 0x17, 0xf3, 0xf6, + 0x0d, 0x30, 0xd6, 0x2b, 0x0f, 0x3b, 0xe3, 0xf6, 0x89, 0x62, 0xfb, 0xb0, + 0x6a, 0x52, 0x2e, 0x08, 0x24, 0x8a, 0x93, 0x7c, 0x11, 0x25, 0x9d, 0x22, + 0x30, 0xd0, 0xd7, 0xd1, 0x2c, 0x4e, 0x57, 0xfe, 0x18, 0xbc, 0xff, 0x73, + 0x7e, 0xeb, 0x17, 0xff, 0xfc, 0xf1, 0xf2, 0x33, 0x1a, 0x7b, 0xdf, 0xf3, + 0xdf, 0x1a, 0x7a, 0x96, 0x2f, 0xff, 0xf6, 0x75, 0x4c, 0x4e, 0x79, 0x88, + 0xc2, 0xee, 0x1f, 0x10, 0x16, 0x2e, 0x28, 0xc9, 0x46, 0xbe, 0x37, 0xde, + 0x26, 0x82, 0xc5, 0xcd, 0x12, 0xc5, 0x6e, 0x6d, 0x0e, 0x39, 0x6d, 0xd6, + 0x2d, 0x2b, 0x14, 0xe6, 0x93, 0x42, 0x77, 0xf8, 0x02, 0xf1, 0x4f, 0xb8, + 0xb1, 0x6e, 0xa5, 0x8b, 0xe6, 0x30, 0x33, 0xac, 0x53, 0x1f, 0x77, 0x43, + 0x40, 0x85, 0x6f, 0xe1, 0xbf, 0x4f, 0xe7, 0x52, 0xc5, 0xa2, 0x58, 0xb9, + 0xfa, 0x2c, 0x56, 0x1e, 0xfb, 0x99, 0xf4, 0x13, 0xa5, 0x8b, 0xb6, 0x25, + 0x8b, 0xdc, 0xcd, 0x2c, 0x5e, 0xdd, 0xf4, 0xb1, 0x76, 0x7d, 0x62, 0xbb, + 0x36, 0xb1, 0xc3, 0xd7, 0x6a, 0x06, 0x2e, 0x40, 0xc2, 0x16, 0xf8, 0x45, + 0xdc, 0x62, 0xee, 0xc7, 0xa4, 0x6f, 0xc2, 0x39, 0xa1, 0x20, 0x02, 0xfe, + 0xbc, 0x33, 0x83, 0x1e, 0x52, 0xbd, 0xcf, 0xb2, 0xc5, 0x4a, 0xf0, 0x06, + 0x8c, 0x1a, 0x73, 0x9b, 0xd0, 0xcd, 0xbe, 0xf7, 0x98, 0xeb, 0x17, 0xe2, + 0x86, 0xe2, 0xd9, 0x62, 0xf4, 0x69, 0xd7, 0x3a, 0xc5, 0x8b, 0xd3, 0xa8, + 0x96, 0x29, 0x8f, 0xdc, 0x05, 0x62, 0x2e, 0xbf, 0xfd, 0xaf, 0x16, 0x6c, + 0xc5, 0xa1, 0x48, 0x16, 0x2f, 0xff, 0xef, 0x4e, 0xe4, 0x23, 0xe4, 0x3f, + 0x84, 0x14, 0xe9, 0x62, 0xb4, 0x8a, 0x62, 0x4a, 0xbf, 0x1c, 0x9b, 0xdc, + 0x58, 0xa6, 0x3c, 0xa0, 0xc8, 0xa8, 0xc7, 0xcb, 0x4c, 0x8d, 0x21, 0x99, + 0x33, 0xd3, 0x1b, 0x46, 0x9b, 0x02, 0x41, 0xc2, 0x7b, 0x29, 0xed, 0xe6, + 0xc6, 0x4d, 0xdc, 0x39, 0x9e, 0x5c, 0xee, 0xa9, 0x3c, 0x87, 0x8f, 0x43, + 0xf4, 0xb0, 0x36, 0x97, 0xb6, 0x53, 0xf1, 0xbc, 0x36, 0xf4, 0x6d, 0xc2, + 0x9e, 0xd9, 0xe8, 0x96, 0x14, 0x26, 0x83, 0x8c, 0x7a, 0xef, 0x6c, 0xb1, + 0x7f, 0x36, 0xf3, 0x1d, 0x9d, 0xac, 0x54, 0x0f, 0x2f, 0xe3, 0x37, 0xf3, + 0xfe, 0x77, 0x26, 0x58, 0xb9, 0xc2, 0x58, 0xa8, 0x1e, 0x2f, 0x8b, 0x6c, + 0x6a, 0xc5, 0xfa, 0x38, 0x5f, 0x7d, 0x2c, 0x5f, 0xd2, 0x16, 0x85, 0x20, + 0x58, 0xad, 0x8f, 0x6f, 0xc5, 0x97, 0xf8, 0xa1, 0xc1, 0xfd, 0xc2, 0x58, + 0xbd, 0xb3, 0x1d, 0x62, 0xfb, 0x06, 0xc7, 0x58, 0xbb, 0xb2, 0x58, 0xbf, + 0x77, 0x0f, 0x87, 0xc5, 0x8a, 0xc3, 0xc4, 0x21, 0x8b, 0x4a, 0xc5, 0xfb, + 0x06, 0x42, 0x3a, 0xc5, 0x69, 0x17, 0xec, 0xcc, 0x02, 0x02, 0x11, 0xb9, + 0xc6, 0xb1, 0x7e, 0x29, 0xfb, 0x71, 0x62, 0xd1, 0x2c, 0x5c, 0x79, 0x58, + 0xbd, 0xe7, 0x09, 0x72, 0x84, 0x17, 0x30, 0x6a, 0x90, 0x1c, 0xec, 0xd5, + 0xd1, 0x88, 0x8b, 0x71, 0x31, 0x21, 0x54, 0x13, 0x34, 0xf9, 0xdf, 0x5e, + 0x2f, 0xe8, 0x59, 0x51, 0x8a, 0xc7, 0xe5, 0xb9, 0xc8, 0xd8, 0xd4, 0x52, + 0x84, 0x6f, 0x4e, 0xd2, 0xb1, 0x7f, 0xf4, 0xc3, 0x3e, 0xdd, 0x83, 0x3b, + 0xf2, 0xc5, 0xc0, 0xc2, 0x3e, 0x3e, 0x0e, 0xdf, 0xc2, 0x6e, 0xaf, 0xe6, + 0xcb, 0x17, 0xf8, 0x5f, 0x7d, 0x67, 0x7e, 0x58, 0xbf, 0xbd, 0x8f, 0x1d, + 0xf9, 0x58, 0xb7, 0x0c, 0x44, 0xbc, 0x71, 0x90, 0x66, 0xb7, 0x6b, 0xaf, + 0x58, 0xad, 0x26, 0x36, 0x08, 0x61, 0x91, 0xdd, 0xfd, 0x84, 0x0c, 0xc1, + 0xac, 0x5f, 0xce, 0x0c, 0x3c, 0xee, 0xb1, 0x73, 0x04, 0xb1, 0x78, 0xd8, + 0x47, 0xac, 0x5f, 0x77, 0xc7, 0x65, 0x8b, 0x31, 0x87, 0x8a, 0xe4, 0x57, + 0xff, 0xbc, 0x53, 0x9d, 0x1f, 0xd3, 0x85, 0x05, 0x8a, 0x34, 0xfc, 0x1c, + 0x9e, 0xff, 0xec, 0xe9, 0xa9, 0x68, 0x14, 0xf7, 0x05, 0x8b, 0xff, 0xff, + 0x43, 0x7f, 0xbe, 0xb6, 0x3c, 0xef, 0xf9, 0x71, 0xcf, 0xe6, 0x0b, 0x17, + 0xbf, 0x26, 0xac, 0x57, 0x68, 0x8d, 0xe8, 0xdf, 0x7f, 0x03, 0x5a, 0x7e, + 0xc0, 0xb1, 0x7f, 0xf4, 0x24, 0x81, 0x9a, 0x01, 0xdf, 0x8b, 0x17, 0xfb, + 0x37, 0x9d, 0x8a, 0x77, 0x58, 0xbf, 0x6e, 0x53, 0xdc, 0x16, 0x2c, 0x05, + 0x8b, 0x47, 0x98, 0x7e, 0x38, 0x6a, 0xe5, 0x56, 0x95, 0x8b, 0xdc, 0x6e, + 0xd6, 0x2d, 0x27, 0x35, 0xfe, 0x11, 0xbf, 0x67, 0xb8, 0xdd, 0xac, 0x5f, + 0xfe, 0xe6, 0x7d, 0xf8, 0x2d, 0x8c, 0x8a, 0x49, 0x62, 0xe9, 0x12, 0xc5, + 0xf8, 0x44, 0x00, 0xe0, 0xb1, 0x7f, 0xbf, 0x20, 0x3b, 0x40, 0xcc, 0x3c, + 0x1e, 0x0b, 0xd0, 0xd3, 0x01, 0xe1, 0x48, 0x70, 0x8e, 0xbf, 0xff, 0x14, + 0xc3, 0x3e, 0xda, 0x9f, 0x38, 0x26, 0x0b, 0x17, 0xf6, 0x08, 0xd9, 0xe0, + 0x96, 0x2f, 0xc5, 0x80, 0x32, 0x39, 0x62, 0xff, 0x48, 0x22, 0x83, 0x8b, + 0xaf, 0x58, 0xbb, 0x38, 0x62, 0x63, 0xe3, 0x37, 0xd2, 0x9f, 0x8b, 0xc3, + 0x2c, 0xa1, 0xaa, 0x9e, 0x29, 0x48, 0xd4, 0x35, 0xdf, 0xc3, 0x61, 0x9b, + 0xf2, 0x26, 0x86, 0x99, 0x13, 0x78, 0xc0, 0x50, 0xb5, 0xe9, 0x2c, 0x12, + 0xff, 0xed, 0x3f, 0x61, 0xfb, 0x1e, 0x0d, 0xc5, 0x8b, 0xfe, 0x16, 0xd2, + 0x64, 0xfa, 0x46, 0xb1, 0x5a, 0x44, 0x0f, 0xd1, 0xaf, 0xba, 0xba, 0xa6, + 0x3d, 0x62, 0xff, 0xec, 0xd7, 0xe5, 0xca, 0x7f, 0x30, 0x58, 0xbf, 0xfd, + 0xfc, 0x1f, 0xb3, 0xe5, 0x9e, 0xfb, 0xac, 0x5a, 0x77, 0x44, 0x5f, 0x90, + 0xad, 0x26, 0x23, 0x83, 0x50, 0xb7, 0xbe, 0x68, 0x00, 0xeb, 0x17, 0xff, + 0xf4, 0x87, 0xa7, 0x3c, 0x9b, 0xcf, 0xbf, 0x8a, 0x4e, 0xb1, 0x47, 0x3f, + 0xf0, 0x11, 0xdb, 0x5a, 0x46, 0x78, 0x21, 0x5b, 0x7f, 0xc1, 0xf9, 0xc8, + 0x50, 0xce, 0x2c, 0x5f, 0xf0, 0xb9, 0xee, 0xf7, 0x73, 0x5d, 0x62, 0xf3, + 0x6b, 0x65, 0x8b, 0x82, 0x09, 0x62, 0xe8, 0x46, 0x6e, 0x6e, 0x02, 0x1e, + 0xbc, 0xf9, 0xd0, 0x91, 0x4e, 0x1b, 0xad, 0x6e, 0x98, 0xb6, 0xa1, 0xc3, + 0x7f, 0xff, 0xc5, 0x80, 0xf1, 0x30, 0x39, 0x9e, 0xcd, 0x00, 0xed, 0x05, + 0x8b, 0x01, 0x62, 0xe2, 0x63, 0x4f, 0xdf, 0xb6, 0x5b, 0xfd, 0xe2, 0x98, + 0x73, 0x06, 0xb1, 0x7c, 0x03, 0xcc, 0x16, 0x2d, 0xcc, 0x3d, 0x61, 0x19, + 0xdf, 0xd0, 0x76, 0xe9, 0xf7, 0x58, 0xbd, 0x3f, 0xe2, 0xc5, 0xce, 0x69, + 0x87, 0xe7, 0x84, 0xe0, 0x2f, 0xbf, 0xe1, 0x99, 0xf6, 0x38, 0xa7, 0x8b, + 0x17, 0xe6, 0x38, 0xa7, 0x8b, 0x15, 0x87, 0xc7, 0xf3, 0xbb, 0x01, 0x62, + 0xc6, 0x98, 0x6c, 0xc2, 0x21, 0xbf, 0x79, 0x8f, 0x84, 0xb1, 0x7c, 0x3c, + 0xef, 0xcb, 0x16, 0xe6, 0x1e, 0x58, 0x64, 0xf4, 0x35, 0xe1, 0xc7, 0x8f, + 0x4b, 0x51, 0xa2, 0x1e, 0x14, 0x3f, 0x87, 0xb9, 0x43, 0x47, 0xce, 0xb7, + 0xfe, 0xe6, 0x16, 0x7f, 0x37, 0xc2, 0x58, 0xbf, 0xfc, 0xfc, 0xc2, 0x30, + 0x3d, 0x45, 0x98, 0x12, 0xc5, 0xf6, 0x9e, 0x4e, 0xb1, 0x7f, 0xb9, 0xef, + 0xe1, 0xf2, 0x0b, 0x17, 0xff, 0x85, 0x23, 0xcf, 0x00, 0x32, 0x87, 0xf1, + 0x62, 0xe9, 0xe2, 0xc5, 0xa5, 0x62, 0xff, 0xd1, 0xa4, 0xf3, 0x99, 0xef, + 0xb4, 0x16, 0x2f, 0xff, 0xbd, 0xc9, 0xf7, 0x73, 0xff, 0xcf, 0x49, 0xe2, + 0xc5, 0x75, 0xa8, 0x97, 0xc4, 0x4b, 0xd8, 0x08, 0xe1, 0xa3, 0x3f, 0x21, + 0x51, 0x50, 0x4e, 0x80, 0x66, 0x80, 0x4b, 0x28, 0x73, 0x5f, 0xff, 0xda, + 0xc8, 0x47, 0x66, 0xff, 0x71, 0x94, 0x85, 0x84, 0xb1, 0x7c, 0x13, 0x06, + 0x75, 0x8b, 0xcd, 0xdc, 0xac, 0x5f, 0xb0, 0xdf, 0xb4, 0x3e, 0x78, 0x41, + 0x92, 0xdf, 0xff, 0x31, 0x00, 0xcf, 0xe1, 0x98, 0xe5, 0x27, 0x58, 0xa8, + 0x2b, 0xbd, 0x19, 0xe9, 0xa9, 0xaf, 0x1e, 0x16, 0x90, 0x8a, 0x14, 0x1d, + 0x10, 0x2a, 0x57, 0x2b, 0xf2, 0x70, 0xf6, 0xff, 0x74, 0x0b, 0x08, 0x7f, + 0x95, 0x8b, 0xf0, 0xdf, 0xa4, 0x8d, 0x62, 0xf9, 0xfa, 0x48, 0xd6, 0x2e, + 0xc0, 0x18, 0x79, 0xc3, 0x2a, 0xbf, 0x9c, 0x7a, 0xc3, 0xe2, 0xc5, 0xff, + 0x7b, 0x81, 0xea, 0x7d, 0x30, 0x58, 0xbe, 0xdd, 0x9b, 0x75, 0x48, 0x30, + 0x5f, 0xe7, 0x9d, 0x40, 0x53, 0x8b, 0x14, 0x62, 0x27, 0xb4, 0x76, 0x46, + 0x37, 0xc6, 0xc9, 0x41, 0x62, 0xf8, 0xe7, 0x68, 0x18, 0x98, 0xf6, 0x43, + 0x2f, 0xc6, 0x17, 0xfd, 0xa7, 0xd9, 0x8f, 0x90, 0x95, 0x8b, 0xfe, 0xcd, + 0xb4, 0xe1, 0x1e, 0x78, 0xb1, 0x58, 0x7e, 0x84, 0x73, 0x7f, 0xff, 0x38, + 0xfa, 0xa7, 0x35, 0xb4, 0x8c, 0x98, 0xd3, 0x65, 0x62, 0x8d, 0x3f, 0xfe, + 0x84, 0x17, 0xfc, 0xe0, 0x62, 0xf3, 0x37, 0xd6, 0x2f, 0xb7, 0x66, 0xdd, + 0x72, 0x88, 0x97, 0xff, 0xfb, 0x37, 0xfc, 0xf7, 0x08, 0xec, 0xfe, 0xef, + 0x84, 0xc6, 0xac, 0x56, 0x91, 0x2e, 0x46, 0x37, 0x6e, 0x05, 0x8b, 0x87, + 0xda, 0xc5, 0xcd, 0xc8, 0x26, 0x45, 0x90, 0xce, 0x39, 0x11, 0x0c, 0xd4, + 0xae, 0x0f, 0xe4, 0x69, 0x8d, 0x1a, 0x00, 0xa3, 0x47, 0xa5, 0x8a, 0x58, + 0xb6, 0xc2, 0x2e, 0x23, 0x83, 0x2f, 0xf7, 0x3c, 0xdd, 0xc7, 0x39, 0xab, + 0x17, 0xec, 0x8a, 0x48, 0x6b, 0x15, 0x27, 0xc3, 0xa3, 0x9a, 0x96, 0xe1, + 0x12, 0x06, 0xb8, 0x58, 0xf3, 0xc5, 0x5f, 0xa5, 0xeb, 0xb1, 0x61, 0x4e, + 0x51, 0xf9, 0x9c, 0x50, 0x8b, 0xbf, 0x14, 0x83, 0xb0, 0x2c, 0x5f, 0xb2, + 0x13, 0xa0, 0x2c, 0x5f, 0xf4, 0xbf, 0xb9, 0x3b, 0x67, 0x16, 0x2e, 0xc8, + 0xe5, 0x8b, 0x6d, 0xf3, 0xd3, 0x23, 0x9b, 0xa4, 0x35, 0x8b, 0xf3, 0x6c, + 0x53, 0x04, 0x8a, 0x88, 0xf0, 0x3e, 0x31, 0x7f, 0xe9, 0xd0, 0x39, 0x91, + 0xbc, 0x6f, 0xd7, 0x3a, 0xc5, 0x8b, 0xfa, 0x7c, 0x52, 0x0e, 0x2c, 0x5f, + 0xe6, 0x7f, 0x4e, 0xa4, 0x0b, 0x17, 0xef, 0x61, 0xdf, 0xcb, 0x17, 0xfe, + 0xf1, 0x48, 0x06, 0x4f, 0xdf, 0x96, 0x2d, 0xe3, 0x11, 0x8d, 0xf2, 0xd6, + 0x32, 0x0c, 0xa2, 0xf9, 0x88, 0x3d, 0x96, 0x2f, 0xe6, 0x37, 0x06, 0xe4, + 0xb1, 0x5f, 0x3d, 0x12, 0x24, 0xa8, 0x2b, 0x00, 0x34, 0xa7, 0x4f, 0x67, + 0x68, 0xf9, 0x19, 0x46, 0x36, 0x14, 0x25, 0x6f, 0xfc, 0xfb, 0xcf, 0x1b, + 0x5a, 0x70, 0x96, 0x2f, 0xfe, 0xec, 0x0c, 0x3d, 0x60, 0xbf, 0x27, 0x58, + 0xbe, 0x21, 0xfe, 0x56, 0x2f, 0xfb, 0x68, 0x1e, 0x7e, 0xce, 0x6a, 0xc5, + 0xff, 0xb3, 0x93, 0xf6, 0xf0, 0x72, 0x35, 0x8b, 0xfe, 0x66, 0x0b, 0xec, + 0x77, 0xe2, 0xc5, 0xff, 0xbc, 0xe5, 0xb6, 0x77, 0xef, 0xb2, 0xc5, 0xff, + 0xcf, 0xa3, 0x77, 0xfb, 0xfc, 0x85, 0xb2, 0xc5, 0x4a, 0x60, 0x03, 0x3f, + 0xc3, 0x90, 0x20, 0x5f, 0xff, 0xd2, 0x13, 0xcc, 0x4f, 0x86, 0x67, 0xdf, + 0x5f, 0x65, 0x8b, 0xfe, 0xd6, 0x73, 0x9c, 0x62, 0x82, 0xc5, 0xd0, 0xd9, + 0x62, 0xff, 0x4e, 0x6e, 0x18, 0xdb, 0x65, 0x8b, 0x6e, 0x62, 0x38, 0xf4, + 0xb6, 0x73, 0x92, 0x19, 0xbf, 0xff, 0x87, 0xa2, 0x60, 0x8c, 0x7d, 0x49, + 0x67, 0xf3, 0x75, 0x8a, 0xc5, 0x6c, 0x4c, 0x8c, 0x44, 0x5c, 0x8c, 0xec, + 0x51, 0x8f, 0x84, 0x89, 0x7c, 0x2c, 0xe3, 0xac, 0x5d, 0xc1, 0x2c, 0x5f, + 0xd0, 0xfb, 0x31, 0x4a, 0xc5, 0x6e, 0x78, 0x9d, 0x8c, 0x5f, 0xf6, 0x8b, + 0x3a, 0x45, 0xfc, 0xed, 0x62, 0xa4, 0xf8, 0x5c, 0x92, 0xf7, 0xb2, 0x3d, + 0x62, 0xfc, 0x2f, 0x68, 0x50, 0x58, 0xbf, 0xe9, 0xfb, 0xe1, 0xa6, 0xcc, + 0x16, 0x2d, 0x84, 0x7c, 0x9e, 0x2a, 0xbe, 0xdd, 0x9b, 0x75, 0x48, 0x14, + 0x5b, 0x4b, 0x15, 0xa3, 0xc3, 0xf1, 0x8d, 0xef, 0xc9, 0xd6, 0x2f, 0x99, + 0xa1, 0xc5, 0x8b, 0xff, 0x4e, 0xcd, 0xed, 0x64, 0x23, 0xb1, 0x62, 0xe7, + 0xd2, 0xc5, 0xfe, 0xf4, 0x9f, 0xdc, 0x60, 0x2c, 0x56, 0xc7, 0x97, 0x82, + 0xf4, 0x62, 0x7f, 0xa3, 0x84, 0x26, 0x34, 0xb9, 0x16, 0x87, 0x48, 0x8b, + 0x90, 0x8d, 0xbf, 0x7e, 0x4e, 0x2e, 0xd6, 0x2f, 0x72, 0x7b, 0x58, 0xbe, + 0xf7, 0x24, 0x09, 0x17, 0x9b, 0x5b, 0x24, 0x5f, 0x08, 0x98, 0xd4, 0x8b, + 0xfc, 0xfb, 0x67, 0xb9, 0x20, 0x48, 0xa4, 0x8b, 0xfb, 0x37, 0x9f, 0xc9, + 0xd2, 0x2e, 0x08, 0x24, 0x8b, 0xf8, 0xa4, 0xb6, 0x7d, 0x24, 0x56, 0x26, + 0x33, 0xb9, 0x19, 0xc7, 0xbe, 0x46, 0x03, 0x42, 0x0c, 0x08, 0xb8, 0x31, + 0xaa, 0x58, 0xb6, 0x92, 0x23, 0x0f, 0xfe, 0x5c, 0xef, 0x41, 0xfe, 0xb1, + 0x4b, 0x15, 0xda, 0xa1, 0x17, 0x8e, 0xd9, 0x8c, 0x83, 0x1d, 0xa8, 0x2a, + 0xed, 0x89, 0xb7, 0xf2, 0x8e, 0xef, 0xff, 0x82, 0xe1, 0x67, 0x7e, 0x62, + 0xdb, 0x3b, 0xf2, 0xc5, 0xfd, 0xd0, 0xc6, 0x84, 0x31, 0x62, 0xa5, 0x10, + 0x98, 0xa7, 0x7f, 0xfe, 0x2c, 0xf0, 0x80, 0x76, 0x80, 0x67, 0x8e, 0x73, + 0x56, 0x2e, 0x6d, 0x2c, 0x5f, 0xb6, 0xc1, 0xc9, 0xd6, 0x2f, 0x6f, 0x27, + 0x08, 0xf0, 0x03, 0x17, 0xb4, 0xac, 0x59, 0xfe, 0x78, 0xfe, 0x36, 0xa1, + 0xa6, 0x13, 0xe8, 0x71, 0x54, 0xb3, 0x16, 0x71, 0xc9, 0xe5, 0xd1, 0x69, + 0x8f, 0xf0, 0xc7, 0x69, 0xd0, 0xa2, 0x85, 0xf0, 0xa3, 0x2a, 0xbf, 0x66, + 0x9e, 0x76, 0x58, 0xbd, 0x84, 0x05, 0x8a, 0xc3, 0xc4, 0xe1, 0x45, 0xff, + 0xc7, 0x7d, 0x70, 0xc2, 0xc0, 0x0b, 0x8b, 0x17, 0xff, 0x8a, 0x73, 0xbc, + 0xde, 0x7d, 0xf7, 0xe8, 0xb1, 0x73, 0x40, 0xc4, 0x49, 0x79, 0x1a, 0xe6, + 0x1a, 0xc5, 0x1a, 0x78, 0xc7, 0x2f, 0xb1, 0xd6, 0x2e, 0x11, 0xab, 0x14, + 0x46, 0xaf, 0x82, 0x57, 0xff, 0xfc, 0x59, 0xef, 0x4f, 0x70, 0x33, 0xf2, + 0x71, 0x77, 0xcf, 0xca, 0xc5, 0xfd, 0xf7, 0x34, 0xd9, 0xd9, 0x62, 0xfe, + 0xc2, 0xe3, 0x96, 0x2c, 0x5f, 0xc7, 0xc1, 0xff, 0x36, 0x58, 0xbf, 0xfc, + 0x4c, 0x6f, 0x01, 0xef, 0x77, 0xec, 0xdd, 0x62, 0xfd, 0xe3, 0x3d, 0xa9, + 0x58, 0xa9, 0x45, 0x39, 0xa5, 0xfd, 0xa7, 0x5e, 0xf8, 0x8e, 0xb1, 0x5b, + 0x2b, 0x23, 0x36, 0x1f, 0x3d, 0xa7, 0x47, 0x90, 0x69, 0xab, 0xe6, 0x25, + 0x0d, 0x2e, 0xa3, 0x1b, 0xff, 0xa2, 0x83, 0x83, 0xf9, 0xd3, 0x18, 0xeb, + 0x17, 0xf1, 0x67, 0x35, 0x3c, 0x58, 0xbc, 0x28, 0x62, 0xc5, 0x18, 0x89, + 0x16, 0x47, 0x01, 0x6d, 0xfb, 0x09, 0xbd, 0xc5, 0x8b, 0xef, 0xc9, 0x41, + 0x62, 0xfd, 0x9f, 0x26, 0x89, 0x62, 0x86, 0x7e, 0x38, 0x4e, 0x44, 0x55, + 0x04, 0x67, 0x72, 0x14, 0x37, 0xe8, 0x73, 0xed, 0x1e, 0xb1, 0x7b, 0x42, + 0xfa, 0xc5, 0xd9, 0xf5, 0x8b, 0xe8, 0xbe, 0x2d, 0x96, 0x2a, 0x23, 0x7a, + 0x18, 0xbd, 0xe2, 0x93, 0xac, 0x56, 0x91, 0x34, 0xcb, 0x62, 0x23, 0xbd, + 0xf9, 0x89, 0x62, 0xfa, 0x13, 0x13, 0xac, 0x5f, 0xb0, 0xe1, 0x67, 0xd6, + 0x28, 0x67, 0xd5, 0xd8, 0xf6, 0x88, 0xef, 0xee, 0x8f, 0xa6, 0x0b, 0xcb, + 0x17, 0xef, 0xbf, 0x9b, 0xeb, 0x17, 0xf3, 0xce, 0xb3, 0xbf, 0x2c, 0x5f, + 0xda, 0x73, 0xe7, 0x7e, 0x58, 0xb9, 0x86, 0xb1, 0x52, 0x78, 0xdb, 0x97, + 0xdf, 0xcc, 0x6e, 0x6c, 0xc7, 0x58, 0xbf, 0xce, 0x4d, 0xe8, 0x9c, 0x25, + 0x8b, 0xf3, 0xc5, 0x07, 0x1a, 0xc5, 0x49, 0xee, 0xe1, 0xa5, 0xff, 0xb3, + 0x02, 0xe7, 0x72, 0x53, 0xc5, 0x8b, 0xfa, 0x26, 0xdf, 0xf9, 0xc5, 0x8a, + 0x31, 0x56, 0x9c, 0xc2, 0x67, 0x0c, 0x37, 0x31, 0x39, 0x47, 0xdd, 0x08, + 0x8b, 0x90, 0x8c, 0xf1, 0x00, 0x8f, 0xea, 0x57, 0x0b, 0xf5, 0x2e, 0x66, + 0xa5, 0x72, 0x0d, 0xe7, 0x15, 0xef, 0x71, 0xa3, 0xd6, 0x2f, 0xcc, 0x3f, + 0xc9, 0x2c, 0x56, 0x1e, 0x39, 0xc8, 0x2f, 0xef, 0x13, 0x1e, 0x2e, 0xbd, + 0x62, 0xec, 0xfa, 0xc5, 0xff, 0xf8, 0x22, 0xcf, 0x7b, 0x36, 0xee, 0x02, + 0x3b, 0x71, 0x62, 0xff, 0xf4, 0xe7, 0x65, 0x9d, 0x1a, 0x1c, 0x71, 0xac, + 0x53, 0xa2, 0x93, 0x4b, 0x35, 0xa4, 0x6e, 0xfa, 0x17, 0x77, 0xde, 0x17, + 0xb8, 0xb1, 0x7a, 0x19, 0xe5, 0x8b, 0xee, 0x8f, 0x0e, 0x2c, 0x57, 0x67, + 0x84, 0xe3, 0xb5, 0x88, 0x88, 0xd3, 0x35, 0xfe, 0x76, 0xf6, 0x6f, 0x20, + 0x58, 0xbd, 0x07, 0xe8, 0xb1, 0x7f, 0xf9, 0xc1, 0xcc, 0x35, 0x8f, 0xa9, + 0xc2, 0x58, 0xac, 0x3e, 0x86, 0x1f, 0xbf, 0xf8, 0xed, 0xd9, 0x82, 0x8a, + 0x78, 0xf1, 0xeb, 0x17, 0xfd, 0xdf, 0x82, 0x6d, 0x69, 0x8d, 0x58, 0xbd, + 0x3e, 0xe2, 0xc5, 0x49, 0xed, 0x11, 0xed, 0x62, 0x31, 0x7d, 0x0a, 0x5b, + 0xdb, 0x86, 0x05, 0x8b, 0xf1, 0xc5, 0x8e, 0x35, 0x8b, 0xfd, 0xad, 0xa7, + 0xa3, 0x31, 0xd6, 0x2f, 0xff, 0x67, 0x53, 0x11, 0xa3, 0xc7, 0xd6, 0xa5, + 0x62, 0xef, 0x73, 0x11, 0x05, 0xf3, 0x6a, 0x94, 0x7c, 0x1a, 0x40, 0xd0, + 0xaa, 0xbe, 0xfc, 0xf7, 0xc5, 0x8b, 0xe7, 0xce, 0xfc, 0xb1, 0x58, 0x78, + 0xfe, 0x24, 0xbf, 0xff, 0xef, 0xbe, 0xb0, 0x6c, 0x7c, 0x2f, 0x14, 0x85, + 0x9e, 0xe2, 0xc5, 0xa5, 0x62, 0xfa, 0x7a, 0x0e, 0x77, 0x3f, 0x60, 0x32, + 0xdf, 0xcd, 0xee, 0x61, 0x41, 0x62, 0xff, 0xbe, 0xec, 0x0d, 0x4b, 0x41, + 0x62, 0xe6, 0x87, 0xcf, 0x97, 0xc5, 0xb5, 0xf4, 0x66, 0xfa, 0x14, 0x17, + 0xff, 0xfb, 0xaf, 0x92, 0xdb, 0x9f, 0x67, 0xf3, 0x8f, 0x39, 0x9a, 0x58, + 0xa5, 0x8b, 0x41, 0x62, 0xa0, 0x5f, 0x7c, 0x32, 0xa0, 0xbe, 0x9b, 0xb9, + 0x0f, 0x71, 0x88, 0xea, 0x16, 0x07, 0x22, 0xfc, 0x26, 0xc1, 0x0e, 0x52, + 0x8c, 0x7f, 0x8f, 0x7e, 0x8d, 0x90, 0x45, 0x01, 0x42, 0x0e, 0xfe, 0x1f, + 0xd8, 0x3c, 0xd9, 0x62, 0xff, 0xbd, 0xac, 0xdb, 0xd3, 0x9c, 0x58, 0xbf, + 0x9b, 0xf1, 0x73, 0xe3, 0x58, 0xa0, 0x1f, 0x50, 0x47, 0x54, 0x62, 0x2f, + 0x75, 0x09, 0xab, 0xf0, 0x70, 0xfc, 0x9a, 0xb1, 0x7d, 0xcf, 0xe7, 0x16, + 0x2f, 0xc4, 0x42, 0xd1, 0xab, 0x17, 0x16, 0xc6, 0x1f, 0xbe, 0x15, 0x86, + 0x47, 0x58, 0x8d, 0xc7, 0x85, 0x05, 0x2c, 0x5d, 0xae, 0x8b, 0x15, 0x86, + 0x99, 0x83, 0x2f, 0xff, 0xa4, 0x01, 0xe7, 0xfc, 0xfd, 0x85, 0x9d, 0xf9, + 0x62, 0xff, 0xfc, 0xc6, 0x87, 0xd8, 0x24, 0xb7, 0x6f, 0x37, 0x60, 0x58, + 0xbd, 0xbe, 0x1d, 0x62, 0xfd, 0x3d, 0x94, 0x9a, 0xb1, 0x7f, 0xfe, 0xde, + 0x45, 0xbf, 0xe7, 0x5f, 0x61, 0xfd, 0xb4, 0xb1, 0x7f, 0xb3, 0x0b, 0x7d, + 0xdf, 0x65, 0x8a, 0x1a, 0x2d, 0xb0, 0xa7, 0xeb, 0x17, 0xf0, 0xdb, 0xdc, + 0x14, 0x16, 0x2a, 0x53, 0x32, 0xc8, 0x6a, 0x06, 0x5f, 0x68, 0x12, 0x78, + 0x31, 0xd1, 0xc6, 0x5a, 0x39, 0x62, 0xfe, 0x6d, 0x4f, 0x9f, 0xa2, 0xc5, + 0xff, 0xdc, 0x98, 0xdb, 0x20, 0xfe, 0xe0, 0xa3, 0xd6, 0x2b, 0xb4, 0x61, + 0xe8, 0xc8, 0x85, 0x78, 0x5f, 0x7f, 0xff, 0xed, 0x6a, 0x7b, 0x87, 0x7c, + 0x7d, 0x6f, 0xfc, 0x0f, 0x4f, 0x23, 0x58, 0xbf, 0x11, 0xa1, 0xe7, 0x6b, + 0x17, 0xfc, 0xda, 0xce, 0xe1, 0x20, 0x95, 0x8a, 0x94, 0xc4, 0xb0, 0xf5, + 0xdc, 0x44, 0x57, 0x7f, 0xdd, 0xc3, 0xd9, 0xcf, 0x64, 0x7a, 0xc5, 0xf0, + 0x7d, 0x1f, 0x8b, 0x17, 0xff, 0xed, 0xcd, 0x6e, 0x66, 0xa0, 0xff, 0x62, + 0xee, 0x0b, 0x17, 0xfd, 0x3e, 0xe6, 0x79, 0xfb, 0x09, 0x62, 0xf0, 0xb4, + 0x6a, 0xc5, 0x6e, 0x7b, 0x51, 0xc7, 0x75, 0x88, 0xd8, 0x36, 0x16, 0x55, + 0x29, 0xb2, 0x61, 0xf3, 0x43, 0xfa, 0xa5, 0x91, 0x20, 0x39, 0x4d, 0x3b, + 0xa6, 0x38, 0xff, 0xe5, 0xf5, 0x14, 0x73, 0xf7, 0xef, 0x61, 0xda, 0x0b, + 0x17, 0xc4, 0x2e, 0x90, 0x58, 0xa8, 0x1e, 0x6f, 0x0a, 0x2f, 0xbe, 0x4d, + 0x05, 0x8b, 0x9b, 0x8b, 0x17, 0xec, 0x2f, 0xe1, 0x2c, 0x5e, 0xd8, 0x3d, + 0xd6, 0x2f, 0x3c, 0x51, 0xeb, 0x17, 0xde, 0xc7, 0xfa, 0xc5, 0x11, 0xe1, + 0xf5, 0x10, 0xd4, 0xa6, 0x12, 0xe4, 0x51, 0x11, 0x7c, 0x5d, 0x89, 0xb8, + 0xc9, 0x7f, 0xa4, 0xb7, 0x68, 0xe6, 0xe8, 0xb1, 0x7e, 0xc7, 0x8e, 0xce, + 0xd6, 0x2e, 0x60, 0x2c, 0x54, 0x11, 0xa0, 0x05, 0x6e, 0x1c, 0x78, 0xae, 0xff, 0xff, 0xe1, 0x7b, 0x9c, 0xf3, 0xe4, 0x47, 0x9e, 0x44, 0x58, 0x73, - 0x45, 0x2b, 0x17, 0xff, 0xc5, 0x9f, 0xc3, 0x3e, 0xcf, 0xc9, 0xed, 0x8b, - 0x17, 0xfd, 0x0c, 0xf1, 0xe7, 0x08, 0x6b, 0x17, 0xed, 0xff, 0x9d, 0x77, + 0x45, 0x2b, 0x17, 0xff, 0xc5, 0x9f, 0xc3, 0x3e, 0xcf, 0xc9, 0xe9, 0x8b, + 0x17, 0xfd, 0x0c, 0xf1, 0xe7, 0x08, 0x6b, 0x17, 0xed, 0xff, 0x9d, 0xf5, 0x2c, 0x5f, 0xff, 0x99, 0xa0, 0xdf, 0x33, 0x36, 0x17, 0x84, 0xc1, 0xaa, - 0x4f, 0xb2, 0xf7, 0x61, 0x79, 0x62, 0xe9, 0x1a, 0xc5, 0x49, 0xb7, 0x01, - 0x05, 0xfc, 0xde, 0xe3, 0xf1, 0xd6, 0x2f, 0xdb, 0xed, 0xa1, 0x6c, 0xb1, - 0x7e, 0xde, 0x4a, 0x40, 0xb1, 0x58, 0x7a, 0xac, 0x5b, 0x7f, 0xa4, 0x6f, - 0xbb, 0x96, 0xcb, 0x17, 0xf6, 0xff, 0x92, 0x6e, 0xcb, 0x15, 0x27, 0xc9, - 0x86, 0x97, 0x3f, 0x72, 0xc5, 0xff, 0x39, 0x75, 0x0d, 0x0a, 0x78, 0xb1, - 0x76, 0x77, 0x2c, 0x50, 0x0f, 0xbb, 0x83, 0x41, 0x1d, 0x5f, 0xb3, 0x58, - 0x39, 0x58, 0xbd, 0xb8, 0xb6, 0x58, 0xb8, 0x5e, 0x58, 0xbf, 0x77, 0x66, - 0x10, 0x16, 0x28, 0x6b, 0x86, 0x9b, 0xba, 0xf4, 0xa1, 0x1e, 0x71, 0x11, - 0x76, 0xa1, 0x38, 0x72, 0x0f, 0xc2, 0x08, 0xa1, 0x09, 0xe8, 0x47, 0x76, - 0x30, 0x08, 0x9e, 0x38, 0x83, 0xb8, 0x62, 0xff, 0xfe, 0xf6, 0xb1, 0xbd, - 0xcc, 0xf1, 0x33, 0x6d, 0x9b, 0xac, 0x5f, 0xbf, 0x91, 0x4c, 0x7a, 0xc5, - 0xef, 0x66, 0xeb, 0x17, 0xe1, 0xeb, 0x58, 0x12, 0xc5, 0xff, 0xbd, 0x9f, - 0x9d, 0x00, 0x98, 0xd5, 0x8b, 0xee, 0xfd, 0xb3, 0x8b, 0x15, 0xb2, 0x36, - 0x80, 0x58, 0x43, 0xdc, 0x2a, 0x11, 0xfd, 0xfc, 0xe5, 0x9e, 0x98, 0x96, - 0x2f, 0xf7, 0xe4, 0x5d, 0x41, 0xe3, 0x96, 0x2f, 0xfe, 0x87, 0x24, 0xf9, - 0xb9, 0x36, 0x6e, 0xb1, 0x7d, 0x24, 0x68, 0xd6, 0x2f, 0xff, 0x98, 0xb6, - 0x2c, 0xeb, 0x8d, 0x9e, 0xc3, 0xac, 0x5e, 0x60, 0x4a, 0xc5, 0xff, 0xe1, - 0xb9, 0xfa, 0x87, 0x0b, 0x34, 0x1f, 0x96, 0x2f, 0x69, 0xa2, 0x58, 0xbf, - 0x0f, 0x5a, 0x73, 0xac, 0x54, 0xaa, 0x16, 0x82, 0x56, 0xe5, 0xbd, 0x1c, - 0x7d, 0x15, 0x88, 0xf8, 0x9f, 0xe1, 0xc1, 0x26, 0x86, 0x3d, 0x74, 0x38, - 0xb1, 0x7f, 0x05, 0x3f, 0x7e, 0xa0, 0xb1, 0x78, 0x9c, 0xd5, 0x8b, 0xe7, - 0xdd, 0xb4, 0xb1, 0x7f, 0xff, 0xf9, 0x8d, 0x1f, 0xe7, 0x53, 0xf9, 0xf7, - 0xd8, 0xe1, 0xc5, 0xcd, 0xdf, 0x65, 0x8a, 0x82, 0x28, 0x08, 0x8e, 0xff, - 0xe7, 0xdd, 0xc6, 0x59, 0xee, 0x49, 0xd6, 0x2f, 0xff, 0x31, 0x67, 0xa5, - 0xf4, 0xe6, 0x9b, 0x2b, 0x15, 0xd2, 0x73, 0x87, 0x30, 0xe4, 0x2f, 0x7c, - 0x44, 0x1a, 0x25, 0xc7, 0xc5, 0x8b, 0x6e, 0xb1, 0x7f, 0xff, 0x3e, 0x8d, - 0xfc, 0x9e, 0x28, 0x39, 0x7e, 0x75, 0x2b, 0x16, 0x25, 0x8a, 0x01, 0xf6, - 0x89, 0x72, 0xb1, 0x14, 0x5c, 0x84, 0x05, 0x1d, 0x1c, 0x1e, 0x85, 0xcd, - 0xff, 0xd8, 0x02, 0x63, 0x79, 0x9e, 0x6f, 0xac, 0x5e, 0x7d, 0x62, 0xc5, - 0xe2, 0xc8, 0x2c, 0x56, 0xe6, 0xe3, 0xc3, 0x97, 0x49, 0xd6, 0x2f, 0x14, - 0x9d, 0x62, 0xfc, 0xc3, 0x9c, 0x25, 0x8a, 0x94, 0xc7, 0xf6, 0x28, 0x77, - 0xc2, 0x22, 0xe0, 0xb8, 0x87, 0x2f, 0xff, 0x16, 0x6d, 0x3e, 0xea, 0x74, - 0x2c, 0xd9, 0x62, 0xfc, 0xdf, 0xdd, 0xf8, 0xb1, 0x5f, 0x3f, 0x52, 0x4c, - 0xbf, 0xe7, 0x87, 0xbf, 0x9a, 0x7e, 0x2c, 0x5f, 0xff, 0xa1, 0x84, 0x3f, - 0xce, 0x14, 0x80, 0xed, 0x05, 0x8a, 0x94, 0x56, 0x91, 0x08, 0x67, 0x37, - 0xf7, 0x50, 0xf3, 0xfb, 0x8b, 0x17, 0xe0, 0xfe, 0xdb, 0x62, 0xc5, 0x9c, - 0xd3, 0xda, 0x23, 0x0b, 0xfd, 0x9f, 0xea, 0x1e, 0x93, 0xac, 0x5f, 0xa0, - 0x59, 0x9b, 0x2c, 0x5d, 0xad, 0x96, 0x2f, 0xfa, 0x2e, 0xf7, 0xce, 0x31, - 0xe1, 0x2c, 0x5f, 0xb6, 0xd6, 0x84, 0x6a, 0xc5, 0x4a, 0x2b, 0x30, 0xa1, - 0xc6, 0x44, 0x7f, 0x7f, 0x98, 0x72, 0x09, 0x0b, 0x8b, 0x14, 0x34, 0xdd, - 0xb0, 0x9f, 0xf0, 0xe1, 0x63, 0xab, 0xef, 0x43, 0xc6, 0xac, 0x5f, 0xff, - 0xf8, 0xd9, 0x2e, 0x7d, 0x9f, 0x5a, 0x73, 0x87, 0xee, 0xb7, 0x73, 0xac, - 0x5f, 0xff, 0xbd, 0xdd, 0x87, 0x6d, 0xe5, 0xe0, 0xfe, 0xcd, 0x2c, 0x5f, - 0xd1, 0xdd, 0xf5, 0x30, 0xcf, 0xc7, 0x2e, 0x40, 0x12, 0xff, 0x78, 0x01, - 0x94, 0x3f, 0x8b, 0x90, 0x04, 0xbc, 0xda, 0x82, 0xe4, 0x01, 0x2b, 0x0f, - 0xb0, 0x48, 0x57, 0x34, 0x17, 0x20, 0x09, 0x7c, 0xc5, 0xd4, 0x17, 0x20, - 0x09, 0x7f, 0x9f, 0x7f, 0xe0, 0x01, 0x2b, 0x90, 0x04, 0xbc, 0xe4, 0x35, - 0xc8, 0x02, 0x50, 0xd1, 0x7c, 0x72, 0x4f, 0x98, 0x76, 0x41, 0xb1, 0xab, - 0x90, 0x04, 0xbd, 0xa9, 0xf2, 0xe4, 0x01, 0x29, 0x72, 0x00, 0x97, 0xa3, - 0x9c, 0x0b, 0x90, 0x04, 0xba, 0x4e, 0xb9, 0x00, 0x60, 0xa1, 0x9f, 0x76, - 0x0c, 0xb9, 0x6d, 0xf3, 0x9c, 0x72, 0xb9, 0x00, 0x4b, 0xde, 0x6d, 0xd7, - 0x20, 0x09, 0x7f, 0xe2, 0x68, 0x46, 0x7d, 0xf7, 0x6d, 0x2e, 0x40, 0x12, - 0xff, 0xe6, 0xf0, 0xb6, 0x72, 0xf7, 0xda, 0x0b, 0x90, 0x04, 0xb9, 0x86, - 0xb9, 0x00, 0x4b, 0xfc, 0x4c, 0x17, 0x39, 0x20, 0x5c, 0x80, 0x25, 0xf9, - 0xcd, 0x62, 0x02, 0xe4, 0x01, 0x2e, 0x7e, 0x2e, 0x40, 0x12, 0xb4, 0x7b, - 0x3e, 0x35, 0xbf, 0xfd, 0xf7, 0xf7, 0xb3, 0x86, 0x69, 0xe4, 0xeb, 0x90, - 0x04, 0xbf, 0x78, 0xa7, 0xa8, 0x2a, 0x40, 0x12, 0xe0, 0x4a, 0xe4, 0x01, - 0x23, 0x0d, 0xb5, 0x2e, 0x40, 0x12, 0xfa, 0x4e, 0xc3, 0x5c, 0x80, 0x25, - 0x0c, 0xf2, 0x1c, 0x66, 0xf8, 0x4c, 0x5b, 0xae, 0x40, 0x12, 0xf4, 0xeb, - 0x75, 0xc8, 0x02, 0x5f, 0xfb, 0x3a, 0xe0, 0xe7, 0x08, 0x1c, 0x5c, 0x80, - 0x25, 0xf1, 0xc3, 0x90, 0x2e, 0x40, 0x12, 0xf9, 0xa1, 0x09, 0x5c, 0x80, - 0x25, 0x61, 0xf0, 0x08, 0xc6, 0xfc, 0xdb, 0xfe, 0x7a, 0x5c, 0x80, 0x25, - 0x62, 0x60, 0x9f, 0x85, 0x60, 0x88, 0x6e, 0xd0, 0x17, 0x20, 0x09, 0x50, - 0x57, 0x8e, 0x32, 0x4c, 0x84, 0xd6, 0xe4, 0x4f, 0x08, 0xef, 0xbf, 0x80, - 0x87, 0x86, 0x1e, 0x8c, 0xbc, 0x46, 0xb6, 0x3a, 0xe4, 0x01, 0x2f, 0xd9, - 0xee, 0x37, 0x4b, 0x90, 0x04, 0xbf, 0xc3, 0x9d, 0xe2, 0xd4, 0xf9, 0x72, - 0x00, 0x83, 0x36, 0xd7, 0xb5, 0x21, 0x2e, 0x40, 0x12, 0xb1, 0x1a, 0x7b, - 0xaa, 0xe9, 0x4e, 0xff, 0x09, 0xa1, 0x09, 0x0c, 0xeb, 0x90, 0x04, 0xbe, - 0x72, 0x87, 0x17, 0x20, 0x09, 0x7f, 0x34, 0x50, 0xce, 0xa0, 0xb9, 0x00, - 0x4a, 0xc4, 0x6f, 0x7c, 0xc0, 0x08, 0x42, 0x2f, 0xbf, 0xef, 0xcf, 0x23, - 0x38, 0x2d, 0x01, 0x72, 0x00, 0xc1, 0x67, 0x5c, 0x80, 0x25, 0xcd, 0xb0, - 0xcf, 0xb7, 0xe9, 0xf7, 0x68, 0x0b, 0x90, 0x04, 0xbf, 0x37, 0xb8, 0xfd, - 0x2e, 0x40, 0x12, 0xf8, 0x50, 0xce, 0x2e, 0x40, 0x12, 0xfe, 0x7f, 0x42, - 0x43, 0x3a, 0xe4, 0x01, 0x2c, 0xe4, 0x7d, 0x9d, 0x8c, 0x2a, 0x51, 0xde, - 0x44, 0xbe, 0x85, 0x15, 0x4b, 0x2f, 0x10, 0x70, 0xb9, 0xc8, 0x6f, 0xb9, - 0xfc, 0x44, 0x1a, 0x84, 0xc7, 0xcb, 0x58, 0xbc, 0x05, 0x64, 0x9f, 0xc9, - 0xc1, 0x9f, 0x4a, 0x4d, 0x8e, 0x85, 0x48, 0x71, 0x8e, 0xde, 0xf3, 0x84, - 0xb9, 0x42, 0x4b, 0x9b, 0x75, 0x48, 0x02, 0x46, 0x26, 0x2f, 0xd4, 0x3b, - 0x2a, 0x59, 0xb0, 0x2d, 0x4d, 0x33, 0xbf, 0xfc, 0xc7, 0x6f, 0x0a, 0x4c, - 0xe0, 0xbb, 0x4a, 0xc5, 0xe9, 0x0b, 0x8b, 0x16, 0xf2, 0xc5, 0xe2, 0xcd, - 0xf7, 0x36, 0x0e, 0x3d, 0x70, 0xce, 0xb1, 0x7a, 0x0f, 0xc5, 0x8b, 0xff, - 0x7f, 0x37, 0x93, 0xf3, 0x68, 0x6c, 0xb1, 0x7f, 0x8f, 0xac, 0x87, 0xe6, - 0x0b, 0x17, 0x10, 0x3c, 0x7e, 0xe1, 0xa1, 0xdf, 0xe1, 0x7b, 0x39, 0xec, - 0xdd, 0x62, 0xff, 0x3f, 0x5e, 0x1f, 0xf3, 0x8b, 0x15, 0xdf, 0x69, 0xa2, - 0x44, 0x30, 0xd0, 0x94, 0x01, 0x77, 0x0d, 0x6e, 0xed, 0x12, 0xc5, 0xfd, - 0xe2, 0xc0, 0x47, 0x62, 0xc5, 0xe9, 0xdb, 0xb2, 0xc5, 0x6c, 0xaa, 0xd4, - 0x6f, 0xa6, 0xc6, 0xed, 0xd2, 0xb9, 0xc6, 0xfb, 0x8c, 0x2f, 0xf4, 0x1f, - 0xc6, 0x9b, 0x91, 0xeb, 0x17, 0xd3, 0xe9, 0x1a, 0xc5, 0xb6, 0x58, 0xa8, - 0x1b, 0x5e, 0xc4, 0x57, 0xe9, 0xd7, 0xda, 0x3d, 0x62, 0xff, 0x14, 0xb7, - 0x9b, 0xa0, 0x2c, 0x56, 0xc7, 0xbd, 0xe2, 0xbb, 0xfe, 0xe1, 0x49, 0xf9, - 0xbc, 0xf1, 0x62, 0xdc, 0x58, 0xbf, 0xd9, 0xc2, 0x6e, 0x64, 0x7a, 0xc5, - 0xe9, 0x1f, 0xd6, 0x2b, 0xe7, 0xa4, 0x46, 0xb5, 0x88, 0xbf, 0xf9, 0xd7, - 0x66, 0x4b, 0xec, 0xed, 0x3f, 0x58, 0xa9, 0x4e, 0xe3, 0x21, 0x02, 0xf0, - 0xe2, 0xf9, 0x8d, 0xd0, 0x95, 0x8b, 0xff, 0x16, 0x6f, 0xf7, 0x00, 0x05, - 0x12, 0xc5, 0xf7, 0x99, 0xb4, 0xb1, 0x7f, 0xc3, 0xc3, 0x4b, 0x3d, 0x21, - 0x2c, 0x5f, 0xd9, 0xac, 0x84, 0x25, 0x62, 0xff, 0xf1, 0x67, 0x40, 0x6f, - 0x71, 0xcb, 0xa8, 0x2c, 0x54, 0x13, 0x15, 0xe9, 0x04, 0x04, 0x44, 0x75, - 0xc2, 0xdb, 0xc3, 0x6f, 0xac, 0x5f, 0xb2, 0x2e, 0x4e, 0xcb, 0x16, 0xf6, - 0x1e, 0x3f, 0x87, 0x6e, 0x04, 0xa4, 0x58, 0xd4, 0x8b, 0xdf, 0x9d, 0x96, - 0x2e, 0x08, 0x24, 0x8a, 0x73, 0xe2, 0x8f, 0x17, 0x88, 0x4c, 0x21, 0xeb, - 0xfe, 0x83, 0xfb, 0x0f, 0xc6, 0x82, 0xc5, 0xb8, 0x91, 0x18, 0x7f, 0x32, - 0x81, 0x58, 0x99, 0xa3, 0xc6, 0x05, 0x7f, 0xf6, 0x02, 0x0f, 0xe9, 0x3c, - 0x90, 0xd6, 0x2e, 0x72, 0x58, 0xa3, 0xa2, 0x05, 0x8a, 0x00, 0x87, 0x7f, - 0x60, 0xff, 0x24, 0x35, 0x8b, 0xff, 0xd9, 0xb6, 0x67, 0xc8, 0x4d, 0xef, - 0xe2, 0xc5, 0xfd, 0xee, 0x60, 0x5f, 0x75, 0x8b, 0x79, 0x62, 0xbc, 0x78, - 0x22, 0x2f, 0xbf, 0xd9, 0xb9, 0x98, 0x79, 0xdd, 0x62, 0xfd, 0x3b, 0x70, - 0xf0, 0x58, 0xac, 0x4c, 0x31, 0xe1, 0x15, 0xf2, 0x2f, 0x1b, 0x5f, 0xff, - 0x43, 0x85, 0xd4, 0x9b, 0xc9, 0xea, 0x0e, 0x75, 0x8b, 0xff, 0xb9, 0xee, - 0xb7, 0x7d, 0x79, 0x81, 0xc5, 0x8a, 0xe9, 0x13, 0x64, 0xa7, 0x7f, 0xc6, - 0xbe, 0x83, 0x00, 0x27, 0xa5, 0x8b, 0xe8, 0x7a, 0x42, 0x58, 0xbb, 0xdc, - 0xc3, 0xe1, 0xe8, 0xf6, 0xa3, 0x67, 0x43, 0xdf, 0x31, 0xda, 0x6d, 0x29, - 0x46, 0x11, 0xbc, 0x0e, 0x3f, 0xfc, 0x41, 0x34, 0x97, 0x7a, 0x6f, 0x8b, - 0xca, 0xe3, 0x89, 0x97, 0x52, 0x89, 0x8e, 0x8a, 0xd1, 0x96, 0x02, 0x52, - 0x39, 0x17, 0xfa, 0x33, 0x91, 0x43, 0x70, 0x38, 0x42, 0x5f, 0x06, 0x3c, - 0x3a, 0xc5, 0xf8, 0x6d, 0xbf, 0x20, 0xb1, 0x7f, 0x39, 0x03, 0x3a, 0xf2, - 0xc5, 0xa0, 0xe7, 0xb1, 0xf2, 0xab, 0xe9, 0xdc, 0x33, 0xac, 0x5f, 0xf9, - 0x9f, 0xd2, 0x5e, 0xfe, 0x41, 0x62, 0xf8, 0x67, 0x68, 0x2c, 0x59, 0xd6, - 0x29, 0x8d, 0xa7, 0x08, 0xeb, 0x11, 0xbb, 0xa2, 0x7f, 0x92, 0xf9, 0xc6, - 0xff, 0x39, 0x6e, 0xfa, 0x70, 0x2c, 0x5e, 0xcc, 0x02, 0xc5, 0xff, 0x1f, - 0x7f, 0xb8, 0xfe, 0xe6, 0xac, 0x51, 0xd1, 0x16, 0x46, 0x61, 0x8e, 0x5f, - 0xe3, 0x7e, 0xf2, 0x7e, 0x41, 0x62, 0xb7, 0x4c, 0xb3, 0xf0, 0xc7, 0x23, - 0x0b, 0x4a, 0xc5, 0xf7, 0xc4, 0xc4, 0xb1, 0x6f, 0x18, 0x6c, 0xc6, 0x23, - 0x77, 0xc9, 0x62, 0xfe, 0xce, 0xa0, 0x76, 0x82, 0xc5, 0x6e, 0x78, 0xdd, - 0xc2, 0xf7, 0xff, 0x7a, 0x3b, 0x22, 0x83, 0x6b, 0x61, 0xca, 0xc5, 0x74, - 0x8d, 0xe3, 0xb7, 0x11, 0x35, 0xff, 0xde, 0x70, 0x8f, 0xc7, 0x21, 0x37, - 0x96, 0x2f, 0x86, 0xc0, 0xe2, 0xc5, 0xfe, 0x31, 0xf3, 0x9f, 0xcf, 0x2c, - 0x56, 0x1e, 0xbf, 0x08, 0xef, 0xfe, 0x68, 0x18, 0x4f, 0x26, 0x39, 0xf1, - 0x62, 0xee, 0x80, 0xb1, 0x60, 0x1c, 0xf7, 0x40, 0x89, 0x7d, 0x9e, 0x0f, - 0x65, 0x8b, 0xd1, 0x48, 0x4b, 0x17, 0xfc, 0x69, 0xad, 0x0f, 0x3f, 0x1d, - 0x62, 0xf0, 0x24, 0xeb, 0x15, 0x87, 0xb1, 0xa3, 0xbb, 0xff, 0xdf, 0x7e, - 0xcf, 0xbe, 0xa7, 0x66, 0xd6, 0xeb, 0x17, 0xf4, 0xf5, 0x24, 0xde, 0x58, - 0xb8, 0x80, 0xb1, 0x74, 0xf1, 0x62, 0x9c, 0xd7, 0x76, 0x17, 0xaf, 0x9f, - 0xef, 0x65, 0xba, 0x31, 0x3a, 0xd9, 0x25, 0xc7, 0x7d, 0xc8, 0x43, 0x86, - 0x65, 0x69, 0x55, 0x21, 0x3f, 0x7a, 0x3d, 0x5b, 0xff, 0xfd, 0xf7, 0x21, - 0xe1, 0xfd, 0x39, 0x87, 0x1c, 0xe1, 0x2c, 0x5f, 0xec, 0xeb, 0xde, 0x68, - 0x71, 0x62, 0xff, 0x9b, 0xa3, 0x04, 0xc1, 0xbe, 0xcb, 0x17, 0xf8, 0x39, - 0x0b, 0x53, 0x84, 0xb1, 0x77, 0x7f, 0x05, 0x8b, 0xf3, 0x1a, 0x59, 0x12, - 0xc5, 0xfe, 0x9d, 0x03, 0x34, 0xc4, 0xb1, 0x50, 0x3f, 0x82, 0x1d, 0x0c, - 0xa6, 0xee, 0xa0, 0xb9, 0x40, 0x0b, 0xff, 0xd8, 0x14, 0xfb, 0x22, 0x83, - 0xfb, 0x8c, 0xb1, 0x50, 0x4d, 0x33, 0xa8, 0x56, 0x11, 0x7f, 0x09, 0xaf, - 0x84, 0xc5, 0xba, 0xc5, 0xc0, 0x82, 0xc5, 0xff, 0x89, 0xbc, 0x2f, 0x0f, - 0xee, 0x6a, 0xc5, 0xe9, 0xcf, 0x91, 0xec, 0x70, 0x62, 0xfc, 0xf3, 0xe9, - 0x1a, 0xc5, 0xff, 0x3f, 0x5c, 0xf1, 0x49, 0xf8, 0xb1, 0x7f, 0xff, 0xff, - 0xff, 0x0a, 0x3c, 0x9b, 0x3e, 0xc1, 0x96, 0x76, 0xc2, 0x63, 0x62, 0x80, - 0xb9, 0xc0, 0x98, 0x7f, 0x70, 0xb9, 0x8c, 0x35, 0x8a, 0x35, 0x1e, 0xfc, - 0x3a, 0xbd, 0xfc, 0xee, 0x58, 0xbf, 0x13, 0x76, 0x6f, 0xac, 0x5f, 0xfd, - 0xc3, 0x03, 0x1c, 0xeb, 0x4f, 0x27, 0x58, 0xac, 0x3f, 0x01, 0x14, 0xd1, - 0x88, 0xb1, 0xe4, 0x24, 0x2f, 0xe6, 0xfc, 0x4c, 0xfb, 0x2c, 0x5f, 0xff, - 0xfb, 0x6c, 0x1c, 0x9f, 0x08, 0x5e, 0x11, 0xbe, 0xeb, 0x77, 0x2d, 0x96, - 0x28, 0xc6, 0x69, 0xcc, 0xca, 0x85, 0xc8, 0xd1, 0xfa, 0x30, 0x79, 0x68, - 0x11, 0x1b, 0xe9, 0x74, 0xe6, 0xad, 0x1c, 0x48, 0x10, 0xc9, 0xef, 0x86, - 0x3e, 0x8c, 0x78, 0x50, 0xd5, 0x08, 0xa4, 0x32, 0xfb, 0xfc, 0x1f, 0x9f, - 0x53, 0x84, 0xb1, 0x7f, 0xfe, 0x22, 0x17, 0x59, 0xd7, 0x87, 0xa6, 0xeb, - 0x36, 0x58, 0xbf, 0x67, 0xb5, 0x3c, 0x58, 0xa7, 0x44, 0x09, 0x2c, 0xdf, - 0x39, 0x49, 0xd6, 0x2e, 0x98, 0x2c, 0x56, 0x1b, 0x80, 0x10, 0xdf, 0xc4, - 0xdd, 0x4b, 0xc4, 0xb1, 0x6d, 0x96, 0x29, 0x62, 0xe8, 0x4e, 0x8b, 0xf0, - 0x09, 0xde, 0x68, 0x62, 0xc5, 0x44, 0x78, 0xe7, 0x2b, 0xbe, 0x93, 0x64, - 0xeb, 0x17, 0xa0, 0x37, 0x58, 0xa8, 0x26, 0xe1, 0xd2, 0xcb, 0x90, 0x6a, - 0x12, 0x87, 0x23, 0x22, 0x3b, 0xf8, 0xb0, 0xf3, 0xa3, 0x56, 0x2f, 0xde, - 0x7e, 0xdf, 0x75, 0x8b, 0x70, 0xc3, 0xd8, 0xc2, 0xeb, 0xff, 0xff, 0xe2, - 0xdf, 0xfd, 0x34, 0x78, 0x79, 0xf2, 0x6f, 0x7a, 0x7e, 0xfe, 0xe6, 0x0d, - 0x62, 0xa0, 0x8a, 0xac, 0x28, 0xbf, 0xb9, 0x8c, 0x36, 0xf2, 0xc5, 0xff, - 0xef, 0x31, 0x00, 0xcc, 0xfc, 0xef, 0x9d, 0x96, 0x2f, 0xff, 0xdf, 0xce, - 0xa0, 0x53, 0x9c, 0xe8, 0x12, 0x5b, 0xac, 0x5f, 0xff, 0xc7, 0x0f, 0x3e, - 0xc7, 0xc3, 0xbf, 0xb0, 0xd7, 0xd2, 0xc5, 0xfe, 0x93, 0xe7, 0x77, 0x9c, - 0x25, 0x8a, 0x94, 0x49, 0xf1, 0x72, 0xff, 0xfb, 0x35, 0x11, 0x48, 0x39, - 0xbf, 0xdf, 0x5b, 0x2c, 0x54, 0x0f, 0xd7, 0x84, 0x57, 0xe3, 0x0c, 0xcf, - 0xb2, 0xc5, 0xee, 0x61, 0xd6, 0x2f, 0xf3, 0x91, 0x9b, 0xb6, 0xb6, 0x58, - 0xa8, 0x1e, 0x9f, 0x87, 0x6f, 0xf6, 0x75, 0xe3, 0x23, 0x9c, 0xd5, 0x8b, - 0xf7, 0x5e, 0x8e, 0x73, 0x56, 0x2f, 0x1d, 0xfc, 0x61, 0xf4, 0x61, 0xd5, - 0xee, 0x49, 0x2c, 0x5e, 0xd6, 0x71, 0x62, 0xdb, 0xc9, 0xb9, 0xc1, 0xcb, - 0xfe, 0xeb, 0x8f, 0xd4, 0x3e, 0xff, 0x58, 0xbf, 0xef, 0xb3, 0xfa, 0x1f, - 0x11, 0xab, 0x17, 0x9b, 0xfc, 0x58, 0xa6, 0x44, 0xa7, 0x0f, 0x02, 0x3b, - 0xbf, 0xa1, 0x3a, 0x00, 0x67, 0x58, 0xbf, 0xd3, 0xc6, 0x03, 0x10, 0x16, - 0x2f, 0xa2, 0xfb, 0xc4, 0xb1, 0x7f, 0xe3, 0x4d, 0x72, 0xdc, 0xcd, 0xbe, - 0x6a, 0xc5, 0x61, 0xf5, 0xb9, 0x2d, 0xff, 0xff, 0xef, 0xbf, 0xa7, 0x4c, - 0xe3, 0x14, 0xf2, 0x74, 0x28, 0x3e, 0xb0, 0x0b, 0x17, 0xff, 0x76, 0x2c, - 0xe7, 0xb0, 0xa1, 0x9c, 0x58, 0xbe, 0x3c, 0x8b, 0xcb, 0x15, 0x87, 0xd0, - 0xc8, 0xb7, 0xd0, 0xd3, 0x9d, 0x62, 0xf7, 0x84, 0x6a, 0xc5, 0x89, 0x8f, - 0x08, 0x44, 0x77, 0xf8, 0x8a, 0x7a, 0x0c, 0xf2, 0xb1, 0x7f, 0x3f, 0xdb, - 0xef, 0xc5, 0x8b, 0xde, 0x6d, 0x2c, 0x51, 0xcf, 0x2b, 0xc5, 0xb7, 0xec, - 0x8b, 0xf3, 0xb2, 0xc5, 0x62, 0x3c, 0x1c, 0x99, 0x9f, 0x88, 0x8a, 0xff, - 0xfe, 0xc8, 0xb9, 0x3b, 0x16, 0x04, 0xda, 0x37, 0x3a, 0xf2, 0xc5, 0xef, - 0x7d, 0xd6, 0x2f, 0xfc, 0x4d, 0xee, 0x3f, 0x45, 0x21, 0x2c, 0x5e, 0xf3, - 0x12, 0xc5, 0x98, 0xc5, 0xc5, 0xdc, 0x30, 0xd1, 0x87, 0xe1, 0x3a, 0xc4, - 0x05, 0x0d, 0xee, 0x46, 0xa5, 0xe3, 0x9e, 0xcb, 0xe1, 0x8e, 0xf7, 0x1f, - 0xdf, 0x84, 0xd9, 0xd7, 0x96, 0x28, 0xc5, 0xf6, 0x79, 0x7d, 0xc8, 0x45, - 0x3b, 0x67, 0xe7, 0x45, 0xfd, 0x0b, 0x4b, 0xfe, 0x98, 0xf1, 0xfe, 0x76, - 0x62, 0x58, 0xbf, 0x61, 0x4f, 0x5c, 0x58, 0xbf, 0xfe, 0x93, 0x86, 0x5e, - 0xf8, 0x9a, 0x1f, 0x17, 0x16, 0x2e, 0x7f, 0x2c, 0x5c, 0x79, 0x58, 0xbc, - 0x0c, 0xfc, 0x9a, 0xe7, 0x17, 0xbf, 0xb9, 0xee, 0xa1, 0x21, 0xac, 0x5f, - 0xed, 0xcb, 0x3b, 0x7d, 0xa0, 0xb1, 0x78, 0xe0, 0x75, 0x8b, 0xe9, 0xde, - 0x4e, 0x62, 0x21, 0x30, 0xc5, 0xcd, 0xaa, 0x0c, 0xba, 0xac, 0x2d, 0xdd, - 0x37, 0xa8, 0xd7, 0xf5, 0x3f, 0x13, 0xf6, 0xa6, 0x3c, 0x22, 0x8f, 0x42, - 0x03, 0xba, 0x16, 0x97, 0xf0, 0x61, 0x69, 0xf3, 0xe9, 0x17, 0xf9, 0xbd, - 0x30, 0x10, 0xf1, 0x62, 0xfb, 0xf3, 0x9b, 0x2c, 0x51, 0x1e, 0xb7, 0x0c, - 0xef, 0xb8, 0xf2, 0x05, 0x8b, 0xfe, 0xf4, 0xf5, 0xec, 0x3c, 0xfd, 0x62, - 0xfa, 0x2c, 0xc0, 0x96, 0x2f, 0xa0, 0xfa, 0xe2, 0xc5, 0xff, 0xc1, 0x9f, - 0x3d, 0x3d, 0x9f, 0xd0, 0x95, 0x8b, 0xe7, 0xf4, 0xe9, 0x62, 0xff, 0x9f, - 0x3a, 0xf4, 0x50, 0x6d, 0x2c, 0x58, 0x0e, 0x8a, 0x4f, 0xa3, 0x91, 0x15, - 0xff, 0xa0, 0x52, 0x7f, 0xce, 0xed, 0xa5, 0x8b, 0x9f, 0x16, 0x2b, 0xa3, - 0xd5, 0x01, 0xfd, 0xf4, 0x5f, 0x68, 0x96, 0x2f, 0xb7, 0x6d, 0x6c, 0xb1, - 0x7a, 0x26, 0xf2, 0xc5, 0xfb, 0x22, 0x84, 0xf4, 0xb1, 0x7f, 0xdf, 0x9e, - 0x7d, 0xb9, 0x31, 0xeb, 0x17, 0x3c, 0x4b, 0x17, 0x9e, 0x49, 0x62, 0xfd, - 0xf7, 0x8a, 0x76, 0x58, 0xbf, 0x66, 0x87, 0xfc, 0x58, 0xa1, 0x9f, 0x6e, - 0xe3, 0x7c, 0x2a, 0xaf, 0xa2, 0xd7, 0x90, 0x85, 0xbc, 0xc4, 0x05, 0x8b, - 0xfb, 0xf9, 0xee, 0x60, 0x4b, 0x17, 0x8a, 0x60, 0x91, 0x7f, 0xe2, 0x03, - 0xf7, 0x77, 0x0a, 0x13, 0x1e, 0xb1, 0x63, 0xac, 0x51, 0x88, 0xc1, 0x18, - 0xe6, 0x17, 0xb0, 0xe0, 0x69, 0x14, 0x62, 0xe6, 0x54, 0x90, 0xec, 0x44, - 0x33, 0xac, 0x24, 0xea, 0x18, 0xef, 0x08, 0x9d, 0x11, 0xfc, 0x95, 0x89, - 0x48, 0x7b, 0x85, 0x5e, 0x87, 0x8f, 0x74, 0x3a, 0x6f, 0xf4, 0xc7, 0xe6, - 0xb5, 0x3b, 0x2c, 0x54, 0x6e, 0xdb, 0x2a, 0xcc, 0xa2, 0x4c, 0x8d, 0x79, - 0xe9, 0x79, 0x9f, 0x85, 0x4b, 0x4e, 0xa8, 0x0a, 0x1a, 0xf7, 0xb4, 0xde, - 0x58, 0xbf, 0x73, 0x5a, 0x9f, 0x2c, 0x5f, 0xdf, 0x6c, 0x00, 0x7e, 0x58, - 0xbe, 0xe3, 0xeb, 0x65, 0x8a, 0xc3, 0xd3, 0xe1, 0x7d, 0xef, 0x3e, 0xcb, - 0x15, 0xb2, 0x36, 0x3a, 0x1d, 0x8f, 0x7c, 0x39, 0x0d, 0xec, 0xfb, 0x2c, - 0x5e, 0xd3, 0x6e, 0xb1, 0x7e, 0x9d, 0x67, 0x5e, 0x58, 0xb7, 0x0d, 0x3c, - 0x7f, 0x8f, 0x5f, 0xe8, 0x8b, 0x07, 0xf9, 0xe2, 0xc5, 0xfe, 0xcd, 0x7e, - 0x42, 0x2c, 0x58, 0xbf, 0xfb, 0x00, 0x06, 0xeb, 0x9c, 0x92, 0xdd, 0x62, - 0xd0, 0x58, 0xa2, 0x3d, 0x8e, 0x23, 0x54, 0x13, 0x09, 0xf9, 0x48, 0x0d, - 0x3b, 0x42, 0x2e, 0xff, 0xb0, 0xb7, 0xfb, 0xf6, 0x9e, 0x2c, 0x5d, 0xee, - 0x2c, 0x54, 0x0f, 0x4c, 0x8e, 0xef, 0xfe, 0xcf, 0x77, 0x91, 0xbf, 0x78, - 0xfd, 0x70, 0x5c, 0x58, 0xbf, 0xdb, 0xfd, 0xc7, 0x25, 0xe5, 0x8b, 0x9e, - 0x0b, 0x15, 0xd1, 0xe5, 0x91, 0xa5, 0xc4, 0x05, 0x8b, 0xf6, 0xbe, 0xcc, - 0x75, 0x8b, 0xe1, 0x10, 0xb7, 0x58, 0xa6, 0x3c, 0xce, 0x14, 0x5f, 0xde, - 0x8a, 0x19, 0xd4, 0x16, 0x28, 0xc5, 0x73, 0xb3, 0x1b, 0x63, 0xc2, 0x60, - 0xe4, 0x2d, 0x0a, 0x1f, 0x11, 0x09, 0x8c, 0x32, 0x1b, 0xff, 0x8b, 0xc3, - 0xce, 0xcc, 0x40, 0x04, 0xac, 0x5f, 0xec, 0xc1, 0x7f, 0x3b, 0x4a, 0xc5, - 0x61, 0xfc, 0x86, 0x8b, 0x7f, 0xe0, 0xa7, 0x5c, 0xc0, 0x9b, 0x46, 0xac, - 0x5d, 0xbb, 0x2c, 0x5e, 0xce, 0x09, 0x62, 0xff, 0xfd, 0xfc, 0xdc, 0x84, - 0x32, 0x90, 0xf4, 0xf2, 0x4b, 0x15, 0x88, 0xee, 0xf9, 0x13, 0x21, 0x10, - 0xc7, 0x87, 0x6f, 0x9f, 0x6c, 0x1a, 0xc5, 0xfe, 0x0b, 0x3a, 0xf7, 0xa4, - 0xeb, 0x17, 0xe2, 0xc0, 0x0b, 0x8b, 0x17, 0xfd, 0xbb, 0xe1, 0x67, 0x66, - 0xe2, 0xc5, 0x6c, 0x7c, 0x5f, 0x28, 0xa6, 0x45, 0xdf, 0x21, 0x31, 0x7c, - 0x31, 0xe1, 0xd6, 0x2e, 0x04, 0xa4, 0x5c, 0x10, 0x49, 0x14, 0xe6, 0xc4, - 0x21, 0x7b, 0xe1, 0x36, 0xa0, 0x91, 0x18, 0x68, 0x6f, 0xb3, 0x53, 0xc5, - 0x8a, 0x19, 0xec, 0x70, 0xda, 0xb1, 0x1d, 0xe6, 0xc3, 0x36, 0xff, 0xf7, - 0xba, 0xdd, 0xff, 0x1d, 0x3e, 0xf8, 0x7c, 0x58, 0xbe, 0xd4, 0xe1, 0x2c, - 0x5e, 0xd0, 0xb6, 0x58, 0xbc, 0x76, 0x81, 0x87, 0x81, 0xb1, 0x0d, 0xbb, - 0xe2, 0xc5, 0xfe, 0x98, 0x3f, 0xa1, 0x3e, 0x58, 0xbe, 0x71, 0x8a, 0x56, - 0x2e, 0xef, 0xf8, 0xb1, 0x1a, 0xcf, 0xb7, 0x43, 0x1e, 0x33, 0xbe, 0x8a, - 0x12, 0x05, 0x8b, 0xfe, 0xfb, 0x7b, 0x9b, 0x96, 0x6c, 0xb1, 0x78, 0xe2, - 0x35, 0x62, 0xf7, 0x7d, 0xc6, 0xd1, 0xb2, 0xc5, 0xff, 0xb4, 0x4c, 0x13, - 0xfb, 0x42, 0x3a, 0xc5, 0xdb, 0xba, 0xc5, 0xff, 0xa6, 0x3c, 0x5a, 0xcd, - 0x6a, 0x7a, 0x58, 0xbe, 0x27, 0xea, 0x0b, 0x17, 0xfc, 0xfd, 0x7f, 0x07, - 0xa6, 0xdd, 0x62, 0xa4, 0xf7, 0xb4, 0x47, 0x7d, 0x9d, 0xb0, 0x96, 0x2e, - 0xc1, 0xac, 0x5f, 0x98, 0xf8, 0x5e, 0x58, 0xb9, 0xe5, 0x62, 0xa0, 0x7a, - 0x9a, 0x17, 0xf1, 0x3d, 0xfe, 0xe6, 0x3f, 0x8d, 0x7f, 0xac, 0x5f, 0xf7, - 0xe7, 0x53, 0xbb, 0x96, 0xeb, 0x17, 0x8d, 0x6e, 0x77, 0xda, 0xa5, 0xd1, - 0x97, 0xee, 0x81, 0xd0, 0xc6, 0xa1, 0x43, 0xf2, 0x16, 0x77, 0xf1, 0x7f, - 0x71, 0xa5, 0xf7, 0xbd, 0x3a, 0x58, 0xa9, 0x57, 0x41, 0x84, 0x8e, 0x77, - 0xe9, 0x4f, 0x81, 0xc2, 0x8a, 0xa0, 0xbf, 0xb7, 0xba, 0x3f, 0x50, 0xde, - 0xd4, 0x62, 0xc7, 0x28, 0x04, 0x24, 0x85, 0x0a, 0x20, 0xa5, 0xf7, 0x5f, - 0xbe, 0xfc, 0x16, 0xcb, 0x17, 0xff, 0x38, 0xdf, 0xd3, 0xd0, 0x59, 0x9c, - 0x58, 0xb4, 0x6c, 0xb1, 0x4b, 0x16, 0xef, 0x0c, 0x34, 0x71, 0xb0, 0xbd, - 0xa3, 0x65, 0x8b, 0xe6, 0xf1, 0x4a, 0xc5, 0xff, 0xf8, 0xb3, 0xb6, 0x6f, - 0xf7, 0x3c, 0xe1, 0x7b, 0x8b, 0x14, 0x62, 0x30, 0x3b, 0xc3, 0x23, 0x45, - 0xc3, 0x21, 0xa1, 0xa6, 0xda, 0x14, 0x65, 0x17, 0xff, 0xfb, 0xf3, 0xf7, - 0x37, 0x05, 0xdf, 0xbf, 0xdf, 0x50, 0x9d, 0x2c, 0x5c, 0x2d, 0x2c, 0x54, - 0x0f, 0xf8, 0xec, 0xd7, 0xb7, 0x7e, 0x2c, 0x5f, 0x08, 0xf8, 0x35, 0x8a, - 0xe9, 0x30, 0xc7, 0x85, 0x4f, 0xc8, 0xbb, 0x87, 0xaf, 0xff, 0xed, 0x40, - 0x53, 0x9f, 0xdd, 0xf9, 0x83, 0xdb, 0x02, 0x58, 0xbf, 0xec, 0xee, 0x62, - 0x37, 0x3a, 0xf2, 0xc5, 0xfb, 0x43, 0xfb, 0xc4, 0xb1, 0x5f, 0x3e, 0x70, - 0xcf, 0x6f, 0x85, 0x24, 0x6a, 0xc5, 0xfd, 0xf7, 0x1f, 0xc4, 0x6a, 0xc5, - 0xf8, 0xa6, 0x27, 0xe9, 0x62, 0xd8, 0x33, 0xfc, 0xdc, 0x8d, 0xcc, 0x2f, - 0x7b, 0x37, 0x58, 0xa3, 0x9e, 0x97, 0x0d, 0x2e, 0x38, 0x16, 0x2f, 0xfa, - 0x43, 0x2f, 0x7c, 0x4d, 0x05, 0x8a, 0x81, 0xe9, 0x78, 0x62, 0xfd, 0xe2, - 0xcd, 0x4a, 0xc5, 0x4a, 0xa7, 0x33, 0x61, 0x8a, 0x08, 0x78, 0xf9, 0xd0, - 0x22, 0x2b, 0xc3, 0x6e, 0x2c, 0x5e, 0x27, 0x35, 0x62, 0xff, 0xc1, 0xf2, - 0x73, 0x9a, 0xd3, 0xf9, 0x62, 0xa4, 0xfe, 0xb0, 0x77, 0x83, 0xb7, 0xe9, - 0x39, 0x39, 0xab, 0x17, 0x0f, 0xeb, 0x17, 0x1a, 0xc6, 0x1e, 0x06, 0x14, - 0x5f, 0xf9, 0xb8, 0x79, 0x7d, 0x69, 0xc2, 0x58, 0xbf, 0x6d, 0x83, 0x93, - 0xac, 0x5b, 0x86, 0xa2, 0x5b, 0xe5, 0xc1, 0x9f, 0xdc, 0xfd, 0xcb, 0x17, - 0xff, 0xff, 0x7e, 0x79, 0x80, 0x9f, 0x73, 0x59, 0xb4, 0xeb, 0x9f, 0xdd, - 0xf8, 0xb1, 0x7d, 0xad, 0x30, 0xd6, 0x2f, 0x41, 0xb4, 0xb1, 0x43, 0x45, - 0xa6, 0x3a, 0x31, 0x1d, 0xfc, 0x7d, 0x69, 0xfa, 0x02, 0xc5, 0xe0, 0xdc, - 0xeb, 0x17, 0xe7, 0xd4, 0xf9, 0xd6, 0x2f, 0x37, 0xe2, 0x58, 0xa9, 0x3c, - 0x5f, 0x13, 0xdf, 0xc5, 0x3b, 0xfd, 0xfb, 0x96, 0x2f, 0x1b, 0x3c, 0x58, - 0xbf, 0xec, 0xf7, 0x9c, 0xdf, 0x66, 0xeb, 0x17, 0xf4, 0xf5, 0xcc, 0xeb, - 0xcb, 0x17, 0x6a, 0x56, 0x28, 0x67, 0x8f, 0xe3, 0x0b, 0xf0, 0x88, 0x71, - 0xa4, 0x68, 0xb1, 0x7f, 0xfd, 0xed, 0x4e, 0x75, 0x1c, 0x47, 0x17, 0x80, - 0xcb, 0x17, 0xfb, 0xcf, 0xbb, 0x8e, 0x7c, 0xb1, 0x7e, 0xe4, 0xef, 0x87, - 0x58, 0xa9, 0x3d, 0xde, 0x1a, 0x5f, 0x3f, 0x50, 0xc5, 0x8b, 0xfe, 0x36, - 0x4a, 0x19, 0xb0, 0xa0, 0xb1, 0x7f, 0xc3, 0xfc, 0xc2, 0x2d, 0x0b, 0x65, - 0x8a, 0x31, 0x55, 0xa4, 0x90, 0xc0, 0xc4, 0x63, 0xd9, 0x08, 0x2d, 0xc8, - 0xba, 0x33, 0xd4, 0x2c, 0x40, 0x43, 0xe2, 0x30, 0xce, 0xea, 0x55, 0xde, - 0xf2, 0x58, 0xbd, 0x41, 0x79, 0x3f, 0xa8, 0xc0, 0xf4, 0x70, 0x78, 0x67, - 0x31, 0x77, 0xa5, 0xf6, 0xdf, 0x37, 0x58, 0x35, 0x8b, 0xfd, 0xfc, 0x87, - 0x9d, 0xfa, 0x58, 0xbf, 0xef, 0x3e, 0xd3, 0xd0, 0x35, 0x2b, 0x17, 0x7f, - 0x65, 0x8b, 0xbc, 0x6a, 0xc5, 0xee, 0x7b, 0x16, 0x2d, 0xc3, 0x11, 0x15, - 0xb9, 0xd9, 0x0c, 0x86, 0x33, 0x7f, 0xdb, 0x36, 0x10, 0xa1, 0x9c, 0x58, - 0xac, 0x3f, 0xee, 0x22, 0xdf, 0x98, 0x11, 0xce, 0x75, 0x8b, 0xfb, 0x77, - 0xe0, 0xa0, 0xeb, 0x17, 0x88, 0x5c, 0x58, 0xaf, 0x9e, 0x67, 0x62, 0xfb, - 0xbb, 0xe4, 0x72, 0xc5, 0xfa, 0x2c, 0x21, 0x62, 0xc5, 0xfd, 0xe7, 0xea, - 0x05, 0x31, 0xb1, 0xe4, 0xc9, 0x0d, 0xf7, 0x5e, 0xfb, 0xac, 0x5f, 0x3e, - 0xdd, 0xe1, 0xab, 0x16, 0x06, 0x1e, 0x76, 0xe4, 0x95, 0x88, 0xbe, 0x78, - 0x4b, 0x5f, 0xf3, 0x3f, 0x9c, 0xbc, 0x2f, 0xac, 0x5e, 0xfb, 0xf6, 0x58, - 0xb8, 0x50, 0xf9, 0xeb, 0x86, 0x71, 0x7f, 0xf3, 0x0f, 0xef, 0xac, 0xed, - 0x25, 0x12, 0xc5, 0xff, 0xdc, 0x16, 0x8b, 0x07, 0xf9, 0x0a, 0x56, 0x2d, - 0x26, 0x22, 0x2f, 0xc8, 0xd7, 0x0f, 0x75, 0x8b, 0xb3, 0xb0, 0xcf, 0x08, - 0x05, 0x37, 0xf8, 0xdf, 0x75, 0xbb, 0xeb, 0x8b, 0x17, 0xec, 0xf0, 0x1b, - 0xcb, 0x15, 0x2a, 0xcc, 0xe1, 0x19, 0x5e, 0x9f, 0x7f, 0x0f, 0xc1, 0x17, - 0xc7, 0x1c, 0x5f, 0xff, 0xa7, 0xed, 0x85, 0x3a, 0x34, 0x62, 0x6d, 0x41, - 0x62, 0xa0, 0xb9, 0x0d, 0xc2, 0x1f, 0x4b, 0xaa, 0xee, 0x66, 0xa9, 0x6c, - 0xea, 0x87, 0x09, 0x3c, 0x95, 0x46, 0xf2, 0xae, 0x5a, 0x7c, 0x80, 0x0d, - 0x9e, 0x23, 0x14, 0xee, 0x15, 0xf8, 0x3d, 0x6a, 0x49, 0x62, 0xff, 0xfd, - 0xe9, 0x18, 0x1b, 0xa0, 0x3f, 0x41, 0xe9, 0xba, 0x58, 0xb9, 0xce, 0xb1, - 0x4b, 0x17, 0x34, 0x16, 0x2e, 0xd6, 0x2c, 0x53, 0x9a, 0xe6, 0x17, 0xb4, - 0x72, 0xc5, 0x18, 0x98, 0x44, 0x94, 0xc1, 0x69, 0xc5, 0xfe, 0x75, 0x1c, - 0x3f, 0x7f, 0x14, 0x33, 0x81, 0x9d, 0x62, 0xf0, 0x8b, 0xcb, 0x15, 0x87, - 0x99, 0xc2, 0xfb, 0xf1, 0xf8, 0x06, 0x65, 0x8a, 0xf1, 0xe4, 0x86, 0x43, - 0x7f, 0x11, 0x9f, 0xce, 0x82, 0x58, 0xbf, 0xd8, 0x7e, 0xa1, 0x39, 0xe5, - 0x8a, 0xc3, 0xe5, 0x01, 0x8d, 0xfd, 0x3f, 0x7e, 0xd9, 0x12, 0xc5, 0x68, - 0xf4, 0x40, 0x43, 0x7e, 0x89, 0x98, 0xb6, 0x58, 0xbf, 0x84, 0x03, 0x37, - 0x38, 0x16, 0x2d, 0x0c, 0x3d, 0xb2, 0x29, 0xbf, 0x16, 0x00, 0x5c, 0x58, - 0xad, 0x95, 0x49, 0xc2, 0x1d, 0xf9, 0x0d, 0x9e, 0x9f, 0x40, 0x4d, 0x7f, - 0xba, 0x87, 0xfb, 0xbb, 0xa6, 0x3d, 0x62, 0xff, 0x9f, 0xa8, 0x6d, 0xb0, - 0x3a, 0x02, 0xc5, 0x61, 0xff, 0x7c, 0xfe, 0xf8, 0x3d, 0x30, 0x16, 0x2f, - 0xfb, 0x8f, 0x07, 0xf4, 0xfb, 0x8b, 0x15, 0x03, 0xdd, 0xf9, 0x25, 0xff, - 0xe0, 0x10, 0xb9, 0xee, 0x4e, 0xb3, 0xaf, 0x2c, 0x5f, 0xfe, 0x0c, 0xa7, - 0x85, 0x9d, 0x9f, 0xff, 0x95, 0x8b, 0xff, 0xf1, 0x0b, 0xd3, 0xfd, 0xdf, - 0x9a, 0x90, 0xd8, 0x96, 0x2e, 0x28, 0x18, 0x8a, 0x1c, 0x4b, 0xbf, 0xdc, - 0xcd, 0x14, 0xf5, 0x05, 0x8b, 0x88, 0x0b, 0x15, 0xb1, 0xe5, 0xb1, 0xa5, - 0x32, 0x75, 0x44, 0x44, 0x28, 0x76, 0x84, 0xf3, 0x7f, 0xb3, 0xb6, 0x68, - 0x00, 0x12, 0xc5, 0xff, 0xcf, 0xa3, 0x1a, 0x61, 0x24, 0x28, 0x2c, 0x5e, - 0x18, 0xa5, 0x62, 0xf6, 0xb3, 0xb2, 0xc5, 0xed, 0x39, 0xab, 0x15, 0x26, - 0xf7, 0x07, 0xef, 0xdf, 0x78, 0xe6, 0xd9, 0x62, 0xa0, 0x8e, 0x97, 0x44, - 0xe2, 0xd7, 0x87, 0xef, 0xf0, 0x39, 0x85, 0x9c, 0x12, 0xc5, 0x61, 0xf7, - 0xb1, 0xe5, 0xfe, 0x98, 0x85, 0xcf, 0x39, 0xd6, 0x2d, 0x05, 0x8b, 0xfd, - 0x39, 0xd7, 0xb3, 0x52, 0xb1, 0x5b, 0x1f, 0xd6, 0x8d, 0x48, 0x4a, 0xff, - 0xd3, 0xf0, 0xf8, 0x59, 0xef, 0xe2, 0xc5, 0xff, 0xdf, 0x17, 0x39, 0x3a, - 0xdf, 0x03, 0xc5, 0x8b, 0xd8, 0x06, 0x58, 0xbf, 0x3f, 0x5e, 0x0f, 0x65, - 0x8b, 0x76, 0x74, 0x47, 0xfd, 0x1f, 0x83, 0x97, 0xa4, 0x18, 0xb1, 0x7f, - 0xf4, 0x0d, 0x60, 0xfc, 0xfa, 0x91, 0x77, 0xeb, 0x15, 0xf3, 0xe8, 0x61, - 0xca, 0xc4, 0x60, 0x0a, 0x13, 0xf7, 0xfd, 0x9d, 0x7d, 0xf6, 0x26, 0x82, - 0xc5, 0xef, 0xcf, 0x4b, 0x17, 0xff, 0xfb, 0xde, 0x72, 0x34, 0xcf, 0x1a, - 0x2d, 0x73, 0x8f, 0x9d, 0x2c, 0x5f, 0xec, 0xeb, 0xdf, 0xc1, 0x6e, 0xb1, - 0x7e, 0xd6, 0x76, 0x6f, 0xac, 0x5f, 0xb6, 0x92, 0x9e, 0x96, 0x28, 0x91, - 0x13, 0xc3, 0x61, 0x15, 0x5f, 0xb7, 0x79, 0x28, 0x2c, 0x57, 0x47, 0xae, - 0x45, 0xf5, 0x89, 0xb4, 0x34, 0x68, 0xd5, 0x2c, 0x93, 0x3c, 0x86, 0xab, - 0xca, 0x28, 0xd2, 0x17, 0xe3, 0x8e, 0x68, 0x4d, 0x00, 0xbc, 0xa3, 0x8e, - 0xe1, 0x3f, 0x8e, 0x85, 0x1c, 0x35, 0xff, 0xf8, 0xd7, 0xf1, 0x64, 0x3a, - 0xf1, 0x3e, 0xdc, 0x12, 0xc5, 0xfb, 0x92, 0x59, 0xb2, 0xc5, 0xc3, 0x95, - 0x8b, 0x76, 0x93, 0x7e, 0x32, 0x8b, 0xff, 0xb3, 0x46, 0x67, 0xd8, 0xd2, - 0x17, 0x16, 0x29, 0xd3, 0x05, 0x68, 0x4b, 0x88, 0xa2, 0xff, 0xc6, 0xb6, - 0xff, 0x78, 0xb3, 0xaf, 0x2c, 0x5f, 0x9a, 0x61, 0x30, 0x58, 0xb4, 0x7a, - 0xc5, 0xdd, 0x40, 0xc3, 0x79, 0x11, 0x3d, 0xd8, 0x05, 0x8b, 0x9a, 0x0c, - 0x78, 0xe4, 0x61, 0x73, 0xfd, 0x62, 0xff, 0xfe, 0xd4, 0x0c, 0x1f, 0xe4, - 0xc2, 0xce, 0xbd, 0x38, 0x12, 0xc5, 0xdc, 0xe2, 0xc5, 0xfa, 0x73, 0xdc, - 0x65, 0x8b, 0xf3, 0x3f, 0x04, 0x6a, 0xc5, 0xe0, 0x82, 0x09, 0x62, 0xe0, - 0x32, 0x44, 0x61, 0xa1, 0xbf, 0xda, 0x9e, 0xd9, 0x87, 0x1a, 0xc5, 0x18, - 0x9a, 0xf3, 0x8b, 0xe9, 0x7c, 0xe3, 0x1f, 0x27, 0xe2, 0x50, 0x8a, 0xaf, - 0xa0, 0xe4, 0x6a, 0xc5, 0xfe, 0x26, 0x36, 0x22, 0x78, 0x96, 0x2a, 0x23, - 0xd8, 0xe1, 0x1d, 0xf0, 0xbc, 0x26, 0x58, 0xac, 0x3c, 0x62, 0x23, 0xbf, - 0x81, 0x30, 0xf8, 0x7c, 0x58, 0xbd, 0xdf, 0xf7, 0xf2, 0xb1, 0x7f, 0xee, - 0xe3, 0x33, 0x77, 0xf7, 0x05, 0xa5, 0x8b, 0xd1, 0x48, 0xd6, 0x2f, 0xdc, - 0x11, 0x4c, 0x16, 0x2f, 0xf3, 0xfd, 0xb8, 0xfa, 0x95, 0x8b, 0xed, 0x4e, - 0x16, 0x1f, 0xc3, 0x0f, 0x70, 0xa2, 0xf0, 0x30, 0x96, 0x2b, 0x0f, 0x78, - 0x48, 0x54, 0xe9, 0x9e, 0x72, 0x31, 0xbb, 0xf9, 0xc8, 0x1b, 0xee, 0xeb, - 0x17, 0x98, 0x18, 0x91, 0x50, 0x5d, 0xad, 0xe8, 0xd3, 0x50, 0xc6, 0x3c, - 0x71, 0x3f, 0x8c, 0x0c, 0x04, 0x04, 0x61, 0xe8, 0xd8, 0xfb, 0x14, 0xc7, - 0x17, 0xdf, 0x48, 0xdc, 0x6b, 0x17, 0xee, 0xd9, 0x9d, 0x8d, 0x58, 0xbf, - 0xfe, 0xeb, 0xd2, 0x3c, 0x22, 0xc3, 0x70, 0x80, 0xb1, 0x52, 0x7f, 0x9a, - 0x2d, 0xbf, 0xb9, 0xf7, 0xdd, 0xb4, 0xb1, 0x7e, 0x1e, 0x9c, 0x5b, 0x2c, - 0x5f, 0x7b, 0x8d, 0xd2, 0xc5, 0xbc, 0xb1, 0x58, 0x6d, 0x8d, 0x24, 0xbf, - 0xfc, 0xe6, 0xfd, 0xc3, 0xd7, 0xa1, 0x31, 0xd8, 0xb1, 0x7f, 0x82, 0xc2, - 0xce, 0xcf, 0xa5, 0x8b, 0xff, 0x67, 0x27, 0x61, 0x89, 0xb5, 0x05, 0x8b, - 0xcf, 0x09, 0x58, 0xbd, 0xb8, 0x67, 0x58, 0xbc, 0x00, 0xce, 0xb1, 0x43, - 0x44, 0xdc, 0x48, 0x00, 0x1c, 0xf1, 0x05, 0xfc, 0x59, 0xd0, 0x03, 0x82, - 0xc5, 0xd9, 0xc5, 0x8b, 0xec, 0x3b, 0xf9, 0x62, 0xff, 0xec, 0xf8, 0x67, - 0xcd, 0xe7, 0xf2, 0x75, 0x8b, 0x73, 0x0f, 0xfc, 0x85, 0xfc, 0x45, 0x6e, - 0x2c, 0x56, 0x2b, 0x01, 0x88, 0xbf, 0x4c, 0x1f, 0x21, 0x24, 0xfe, 0x43, - 0x43, 0xc7, 0xc2, 0x85, 0x78, 0x46, 0x77, 0xef, 0xfd, 0x87, 0x2b, 0x17, - 0xbd, 0xfc, 0x58, 0xbf, 0xff, 0x4f, 0x60, 0xf4, 0xc0, 0xcd, 0x69, 0xcd, - 0x9d, 0x2c, 0x56, 0x1f, 0xb6, 0x87, 0x6f, 0xa4, 0xe6, 0x71, 0x62, 0xa5, - 0x1c, 0x79, 0x09, 0xe7, 0x21, 0xb9, 0x8e, 0xb1, 0x7f, 0xff, 0x61, 0x14, - 0xc3, 0x53, 0xc2, 0xce, 0xcf, 0xf1, 0x2c, 0x5f, 0xcc, 0xfc, 0xfc, 0x9d, - 0x62, 0xff, 0x73, 0xd3, 0x10, 0xba, 0xe2, 0xc5, 0x7c, 0xf9, 0x04, 0x5b, - 0x7c, 0xfa, 0xd4, 0xac, 0x5f, 0xec, 0xed, 0x91, 0x81, 0x04, 0x12, 0x45, - 0xe0, 0xb3, 0xeb, 0x17, 0xe8, 0xa7, 0x3f, 0xc5, 0x8a, 0x31, 0x18, 0xff, - 0x22, 0x22, 0x2f, 0x1e, 0x06, 0x3d, 0x7f, 0xbb, 0xf9, 0x16, 0xff, 0x7d, - 0x2c, 0x5e, 0x3b, 0x79, 0x62, 0xc0, 0x58, 0xbf, 0x4c, 0x42, 0x60, 0xd6, - 0x2b, 0x0d, 0xe1, 0x09, 0x54, 0x4a, 0xa6, 0x4e, 0x2f, 0xf8, 0xe1, 0x44, - 0x97, 0xd8, 0xe8, 0x35, 0x9b, 0xc7, 0x7e, 0x2c, 0x5f, 0xff, 0x60, 0xd9, - 0xc9, 0xbc, 0xe5, 0x0e, 0x62, 0xc5, 0xfd, 0xf6, 0xd3, 0xe6, 0x96, 0x2a, - 0x4f, 0xe5, 0x93, 0x29, 0x62, 0xfb, 0xad, 0xdf, 0x4b, 0x16, 0x04, 0x6e, - 0x6c, 0x7c, 0x19, 0x7f, 0xbb, 0x7d, 0xf2, 0x0d, 0xd9, 0x62, 0xfd, 0xd9, - 0x8e, 0xe7, 0x58, 0xa9, 0x44, 0x6e, 0x16, 0x11, 0xbd, 0xed, 0x7f, 0x16, - 0x2f, 0xa2, 0x84, 0xc1, 0x62, 0xa4, 0xf0, 0x70, 0x76, 0xfa, 0x43, 0x70, - 0x2c, 0x5c, 0x2f, 0xac, 0x5f, 0x39, 0xfb, 0xc3, 0x56, 0x2f, 0xc5, 0xad, - 0x0b, 0xeb, 0x17, 0xf1, 0xfc, 0x53, 0x9d, 0x2c, 0x5f, 0xff, 0xdc, 0xcf, - 0xbf, 0x05, 0xb7, 0xe4, 0xfe, 0xe4, 0xe2, 0xc5, 0xff, 0xfe, 0xf6, 0x39, - 0x6c, 0xdc, 0xce, 0xcf, 0xe7, 0xe3, 0x01, 0x62, 0xfc, 0xfe, 0xe7, 0xdc, - 0x68, 0xeb, 0xe1, 0x70, 0x6b, 0x95, 0xb2, 0x78, 0xb1, 0x11, 0xfc, 0x61, - 0x8a, 0x7d, 0x18, 0xa5, 0xf4, 0xe1, 0x0d, 0x62, 0xde, 0x58, 0xb6, 0xc3, - 0x36, 0x7b, 0x90, 0xd4, 0xb3, 0x5e, 0xa1, 0x0a, 0xac, 0x84, 0xf3, 0xcb, - 0x22, 0xfc, 0x6d, 0xad, 0x2b, 0x2c, 0x0c, 0x65, 0x09, 0x6e, 0x43, 0x7b, - 0xcd, 0xc2, 0x8f, 0x94, 0x38, 0x42, 0xdf, 0x8c, 0x9e, 0x4c, 0x16, 0x2f, - 0xfe, 0xdb, 0x3d, 0x9f, 0x9d, 0x02, 0x74, 0xb1, 0x7f, 0x77, 0xfe, 0x35, - 0xc2, 0xe2, 0xc5, 0x68, 0xfe, 0xc4, 0x8b, 0x7f, 0xdf, 0x6f, 0x06, 0x39, - 0xc2, 0x58, 0xbe, 0x72, 0x14, 0xac, 0x5f, 0xe9, 0x2d, 0xf3, 0xdf, 0x75, - 0x8a, 0x81, 0xea, 0x68, 0x86, 0xfb, 0x20, 0xe4, 0xb1, 0x5b, 0x1e, 0x1e, - 0xe4, 0x57, 0x98, 0x0e, 0xb1, 0x7f, 0xec, 0xed, 0x33, 0xf9, 0xda, 0x7a, - 0x58, 0xbf, 0xe1, 0x90, 0xb9, 0x9b, 0x66, 0xcb, 0x17, 0xa7, 0x44, 0xb1, - 0x7f, 0xf8, 0x12, 0x59, 0xd7, 0x9b, 0x9c, 0x93, 0xac, 0x5f, 0xfe, 0x26, - 0x1c, 0x8f, 0xf3, 0x9d, 0x9b, 0x4b, 0x17, 0xa1, 0x83, 0x58, 0xbf, 0xd8, - 0x32, 0x6e, 0x38, 0xd6, 0x2d, 0xf5, 0x8b, 0x6d, 0x88, 0xab, 0x64, 0xa2, - 0x1d, 0xe1, 0x95, 0x85, 0x89, 0x9b, 0x34, 0x3d, 0x6b, 0x49, 0xbf, 0xfa, - 0x35, 0x2b, 0xe3, 0xf3, 0x0e, 0xb1, 0x4e, 0x79, 0xac, 0x55, 0x7f, 0x4e, - 0xbd, 0xec, 0x8f, 0x58, 0xbf, 0xb8, 0xff, 0x9e, 0xa0, 0xb1, 0x76, 0xba, - 0x58, 0xba, 0x7b, 0x2c, 0x50, 0xd7, 0x34, 0x32, 0x14, 0x9b, 0x91, 0x6a, - 0x1a, 0x07, 0x24, 0xf8, 0xe3, 0x20, 0xf7, 0xf2, 0x81, 0xc8, 0x83, 0x86, - 0x21, 0x97, 0xf7, 0x0c, 0xdf, 0xc1, 0x8c, 0xa7, 0x36, 0x58, 0xbf, 0xdc, - 0x2c, 0x03, 0x10, 0x16, 0x2f, 0xfd, 0x06, 0xf0, 0xa7, 0x52, 0x28, 0xf5, - 0x8b, 0x12, 0xc5, 0xed, 0xa6, 0x0b, 0x14, 0xb1, 0x52, 0x6a, 0xb6, 0x1e, - 0xbf, 0xb3, 0xdc, 0x70, 0xbc, 0xb1, 0x7d, 0x02, 0x63, 0x56, 0x28, 0x67, - 0xa5, 0x85, 0xf4, 0x34, 0xdc, 0xba, 0x2f, 0xd1, 0x93, 0x21, 0x11, 0xd8, - 0x4e, 0x77, 0xf7, 0xdf, 0xc5, 0x27, 0x58, 0xbf, 0xf8, 0x3f, 0x47, 0x3f, - 0x3d, 0xf7, 0x60, 0x2c, 0x5f, 0xff, 0xd0, 0x29, 0x7d, 0x60, 0xf5, 0x3e, - 0x7d, 0xdc, 0x6b, 0x17, 0xff, 0xb0, 0x6c, 0x7c, 0xea, 0x18, 0x0c, 0x1a, - 0xc5, 0xdf, 0x65, 0x8b, 0xa2, 0xe2, 0xc5, 0xfb, 0x3b, 0x39, 0x0f, 0x0d, - 0x80, 0x62, 0xf7, 0xf1, 0x9e, 0xce, 0x72, 0x56, 0x2f, 0xb3, 0xaf, 0x4a, - 0xc5, 0xff, 0xcd, 0xac, 0x35, 0xf5, 0x9d, 0x9b, 0x4b, 0x15, 0xf3, 0xe9, - 0xec, 0x47, 0x7f, 0xfb, 0x3a, 0xf4, 0xe0, 0x59, 0x09, 0x07, 0x16, 0x2f, - 0xfc, 0x59, 0xad, 0x39, 0xf3, 0xaf, 0x2c, 0x5f, 0xfd, 0xcc, 0x17, 0x7f, - 0x87, 0x6f, 0xe6, 0xeb, 0x17, 0xee, 0xe6, 0xd8, 0x38, 0x2c, 0x51, 0x8a, - 0x9d, 0xa3, 0x1e, 0xa4, 0xfb, 0x21, 0x30, 0x44, 0x9c, 0x4b, 0xf1, 0xf8, - 0x92, 0xaf, 0xb3, 0xf9, 0xba, 0xc5, 0xdf, 0x65, 0x8b, 0xff, 0x7d, 0xd8, - 0x18, 0x53, 0xd7, 0x16, 0x2c, 0x33, 0x0f, 0xe3, 0x08, 0xfc, 0x2f, 0x7f, - 0xdf, 0xcf, 0x7d, 0xe4, 0xb6, 0x58, 0xbe, 0x22, 0x90, 0x96, 0x2f, 0x47, - 0x4f, 0x16, 0x2f, 0x14, 0x3f, 0x87, 0x84, 0xc4, 0x57, 0xff, 0xf0, 0x0e, - 0xe6, 0x41, 0xfd, 0xc7, 0xfb, 0x0f, 0x3a, 0x58, 0xbf, 0xfb, 0x69, 0xd6, - 0x9a, 0x06, 0x00, 0x78, 0xb1, 0x58, 0x8a, 0x46, 0x5d, 0xac, 0x47, 0xb1, - 0x43, 0x56, 0x96, 0x2e, 0xe0, 0x16, 0x2e, 0xea, 0x18, 0x69, 0x03, 0x0c, - 0xbd, 0x1e, 0x7c, 0x58, 0xbf, 0xde, 0x7d, 0x37, 0xd8, 0xeb, 0x17, 0xfd, - 0x07, 0x8b, 0xa8, 0x7c, 0x40, 0x58, 0xbe, 0xcf, 0x7d, 0xe5, 0x12, 0x1d, - 0x10, 0x44, 0x67, 0x4c, 0x98, 0x29, 0x42, 0xfa, 0xff, 0xb5, 0xa6, 0x81, - 0x9d, 0xa6, 0x3d, 0x62, 0xa4, 0xf9, 0xf0, 0x9e, 0xf1, 0xde, 0x56, 0x2a, - 0x53, 0xf2, 0x84, 0x76, 0xcc, 0x41, 0x46, 0xaf, 0xeb, 0xf4, 0x93, 0xa9, - 0x5a, 0x05, 0x0f, 0x1e, 0x1a, 0xfa, 0x5b, 0x1d, 0xfe, 0xc0, 0xbc, 0x52, - 0x7e, 0x2c, 0x5f, 0xb0, 0x9b, 0xdc, 0x58, 0xba, 0x1d, 0x96, 0x2f, 0xee, - 0x7f, 0x09, 0xf8, 0xb1, 0x7f, 0x8b, 0x70, 0xfd, 0xc1, 0x0d, 0x62, 0xfe, - 0xdc, 0x26, 0x22, 0x95, 0x8a, 0x82, 0x34, 0xc6, 0x4f, 0xa1, 0xa6, 0x2d, - 0x23, 0x7b, 0xbb, 0xfc, 0x58, 0xbe, 0x8b, 0xef, 0xa5, 0x8b, 0xe6, 0x18, - 0x67, 0x58, 0xbb, 0x38, 0x61, 0xf2, 0x77, 0xa3, 0x90, 0x24, 0xa9, 0x65, - 0x5e, 0xe2, 0xc3, 0xd2, 0x01, 0x34, 0xdc, 0xd1, 0x83, 0x94, 0x2b, 0x2e, - 0xee, 0xf2, 0xc5, 0xff, 0xf0, 0xb5, 0x83, 0xfc, 0xbf, 0xb8, 0xe5, 0x05, - 0x8b, 0xfe, 0xc1, 0xe1, 0x49, 0x0a, 0x56, 0x2f, 0x82, 0x6f, 0xf1, 0x62, - 0x96, 0x2b, 0xa3, 0x60, 0x11, 0x25, 0xfb, 0x06, 0x53, 0xd2, 0xc5, 0xff, - 0xba, 0xf4, 0xf5, 0x0f, 0x02, 0x60, 0xb1, 0x7e, 0x97, 0x83, 0x71, 0x62, - 0xc0, 0xc3, 0xe9, 0xd2, 0x15, 0xfe, 0xf1, 0x3f, 0x5c, 0x0c, 0xeb, 0x17, - 0xec, 0x8a, 0x0d, 0xc5, 0x8a, 0xfa, 0x62, 0xe5, 0x09, 0x1e, 0x13, 0xf8, - 0xda, 0xfc, 0xcd, 0xd4, 0x38, 0xb1, 0x7f, 0xf9, 0xc2, 0xcf, 0x75, 0x0c, - 0xd7, 0x50, 0xe2, 0xc5, 0x4a, 0x7e, 0x6f, 0x19, 0xd6, 0x90, 0xbc, 0x53, - 0x46, 0x43, 0xbc, 0xf6, 0x59, 0xf6, 0x96, 0x47, 0x0a, 0xd8, 0xb4, 0x74, - 0xea, 0x5c, 0x97, 0x1a, 0x6c, 0xec, 0xee, 0xf4, 0xf5, 0xee, 0xa5, 0x34, - 0x3c, 0xe3, 0x24, 0x7c, 0x39, 0x22, 0x96, 0x97, 0xab, 0x44, 0xfa, 0x7a, - 0x74, 0x27, 0xeb, 0x75, 0x76, 0x8d, 0xa8, 0x12, 0xf7, 0xca, 0xbd, 0x6e, - 0xe5, 0x35, 0x8f, 0xd5, 0xa7, 0x30, 0xa7, 0x6a, 0x3b, 0x53, 0x3b, 0xc2, - 0x6a, 0x8e, 0x1b, 0x0d, 0x3f, 0xba, 0x52, 0xcd, 0xf4, 0xf9, 0xfc, 0xb1, - 0x7e, 0x9f, 0x43, 0x3e, 0xb1, 0x6d, 0x7c, 0xf2, 0x88, 0x8a, 0xf7, 0x24, - 0x0b, 0x15, 0x87, 0x89, 0xe2, 0x7b, 0xa3, 0x6e, 0xfb, 0x58, 0xbf, 0xa7, - 0xb3, 0x1b, 0xf7, 0x58, 0xbd, 0x84, 0xcb, 0x17, 0x39, 0x98, 0x79, 0x66, - 0x98, 0x5f, 0xfb, 0xf8, 0x3f, 0xe3, 0x16, 0x47, 0xac, 0x5c, 0xfe, 0x58, - 0xbe, 0xf3, 0x7e, 0x56, 0x2f, 0x40, 0xb3, 0x73, 0x73, 0xd0, 0xbd, 0xff, - 0xc5, 0xb9, 0xad, 0xcc, 0x84, 0x96, 0xeb, 0x17, 0xd8, 0x36, 0x82, 0xc5, - 0xcf, 0xb2, 0xc5, 0x00, 0xdd, 0x78, 0x8a, 0xb1, 0x34, 0xde, 0x9e, 0x5c, - 0xcc, 0xa1, 0x01, 0x7e, 0x79, 0x3b, 0x0d, 0x62, 0xff, 0x67, 0xcb, 0x3d, - 0xf7, 0x58, 0xbb, 0xdc, 0xf9, 0xec, 0xf8, 0x9e, 0xdd, 0x96, 0x2f, 0xf7, - 0xbf, 0x9e, 0xd6, 0x04, 0xb1, 0x51, 0xe7, 0x92, 0x42, 0x97, 0xc3, 0xd3, - 0x41, 0x62, 0xdd, 0xcb, 0x17, 0xfe, 0x79, 0x34, 0xb3, 0xb3, 0xe9, 0x96, - 0x2f, 0xf4, 0x97, 0xdf, 0xb6, 0x44, 0xb1, 0x44, 0x7e, 0x9e, 0x3f, 0xa8, - 0xd1, 0x15, 0x50, 0x84, 0x4d, 0xed, 0xb3, 0xa5, 0x8a, 0xd1, 0xe6, 0x11, - 0x6d, 0xfe, 0x60, 0xbe, 0xfa, 0x68, 0x2c, 0x5d, 0x3d, 0x2c, 0x5f, 0xbf, - 0x31, 0xf8, 0x35, 0x8a, 0x58, 0xb4, 0x8c, 0xdb, 0x80, 0xae, 0xa3, 0x8f, - 0xd4, 0x34, 0xfb, 0xfa, 0x48, 0x51, 0x4f, 0x16, 0x2f, 0xbe, 0x29, 0xe2, - 0xc5, 0xe6, 0x60, 0x2c, 0x5d, 0x3c, 0x93, 0x7f, 0xa2, 0x3b, 0xf6, 0xfe, - 0x9e, 0xbc, 0xb1, 0x5f, 0x3d, 0x61, 0x15, 0xdf, 0xfb, 0xee, 0x53, 0xd7, - 0x1c, 0xf2, 0xb1, 0x7b, 0x93, 0xa5, 0x8b, 0xff, 0xfb, 0x3a, 0xf3, 0x0f, - 0xf3, 0xcc, 0x7d, 0xb6, 0x6e, 0x96, 0x2d, 0xc1, 0xa3, 0x6f, 0x72, 0x2e, - 0x8f, 0x88, 0x76, 0xb6, 0x4f, 0x8b, 0xd1, 0xcf, 0x54, 0xae, 0x58, 0xe3, - 0xb9, 0xa4, 0x8f, 0x18, 0xce, 0x88, 0x5a, 0x15, 0x22, 0x94, 0x11, 0x7a, - 0x1e, 0x3a, 0xc5, 0xfc, 0x59, 0x08, 0x37, 0x16, 0x2f, 0xe9, 0x0f, 0x83, - 0xe8, 0xeb, 0x15, 0xb9, 0xef, 0x11, 0x6d, 0xfb, 0x83, 0x90, 0xce, 0xb1, - 0x7b, 0x73, 0x59, 0x62, 0xf0, 0x03, 0xf2, 0xc5, 0xf6, 0x7d, 0xb4, 0xb1, - 0x58, 0x78, 0x24, 0x3f, 0x5b, 0xa2, 0x00, 0x26, 0x0b, 0xbf, 0xba, 0xc5, - 0x62, 0x3a, 0x1a, 0x15, 0x41, 0x92, 0xdc, 0x37, 0x58, 0xbe, 0xeb, 0x93, - 0xd2, 0xc5, 0xcd, 0x03, 0x0d, 0xe3, 0x8b, 0xde, 0x37, 0xee, 0xb1, 0x7f, - 0xed, 0x4f, 0x6f, 0xcb, 0xe9, 0xe2, 0x58, 0xbf, 0x66, 0x85, 0x20, 0x58, - 0xa8, 0x8f, 0xa4, 0x90, 0x6d, 0xb2, 0xc5, 0xe0, 0x69, 0xd6, 0x2a, 0x08, - 0xd9, 0xea, 0x10, 0xec, 0x44, 0x42, 0x77, 0xd1, 0xcd, 0x9f, 0x58, 0xbf, - 0xff, 0xd2, 0x17, 0xdb, 0xdc, 0xcd, 0x14, 0xf5, 0x0c, 0xeb, 0xcb, 0x17, - 0xd9, 0xee, 0x32, 0xc5, 0x87, 0xa4, 0x42, 0xfd, 0x8e, 0xff, 0x70, 0xb0, - 0xec, 0xdb, 0x2c, 0x54, 0x13, 0x06, 0x68, 0x55, 0x08, 0xa6, 0xfe, 0xe6, - 0x0d, 0xf9, 0xb2, 0xc5, 0xe8, 0x48, 0x16, 0x2f, 0xc1, 0xc5, 0x09, 0x8f, - 0x48, 0xa9, 0x66, 0x5e, 0xec, 0x42, 0x36, 0xfc, 0x8d, 0xec, 0xd9, 0xd4, - 0xbd, 0xdd, 0x9d, 0xf3, 0x51, 0x85, 0x7d, 0xc1, 0xa3, 0x05, 0x28, 0xd1, - 0xf8, 0x6b, 0xe2, 0xf0, 0xc7, 0x6f, 0xe1, 0xe9, 0xb7, 0x6d, 0xd6, 0x2f, - 0xff, 0xfb, 0xbe, 0xbb, 0x4c, 0x68, 0x79, 0xef, 0xac, 0x6d, 0x1a, 0xfd, - 0xb0, 0x0c, 0x33, 0xf1, 0xcb, 0x16, 0xdd, 0x62, 0xff, 0xc4, 0x26, 0x0f, - 0x38, 0xf2, 0x4b, 0x17, 0xe8, 0x73, 0xdd, 0x80, 0xb1, 0x46, 0x9f, 0x4f, - 0x47, 0xb7, 0xa3, 0x9c, 0x6b, 0x17, 0xf8, 0xdf, 0xb4, 0x35, 0x26, 0xac, - 0x56, 0x8f, 0xe8, 0xe4, 0x84, 0x41, 0x7e, 0x2c, 0xec, 0xda, 0x58, 0xbf, - 0xe8, 0x3f, 0xd9, 0xc7, 0x24, 0xb1, 0x46, 0x1f, 0x04, 0x94, 0xde, 0x96, - 0xd2, 0xc5, 0xf1, 0xb9, 0xc7, 0x58, 0xb8, 0xb7, 0x58, 0xbf, 0xf7, 0x73, - 0xed, 0xac, 0x92, 0xe3, 0xac, 0x5f, 0x83, 0xf7, 0x85, 0xf5, 0x8a, 0x31, - 0x14, 0xee, 0x46, 0x43, 0x1d, 0x90, 0x6f, 0xe3, 0xfb, 0xf3, 0xda, 0x56, - 0x2f, 0xfd, 0x1e, 0x66, 0xff, 0x7d, 0x3c, 0x9d, 0x62, 0xf1, 0x6e, 0x05, - 0x8a, 0xd8, 0xf8, 0xb1, 0x12, 0xfb, 0x3a, 0x01, 0x2c, 0x5f, 0xd0, 0x9f, - 0x7d, 0xa0, 0xb1, 0x44, 0x7a, 0x3e, 0x23, 0xbf, 0xf7, 0x84, 0x7f, 0xcb, - 0x93, 0x0d, 0x62, 0xff, 0xfb, 0x02, 0x30, 0x6f, 0x9d, 0x43, 0x84, 0xdb, - 0x2c, 0x5f, 0x42, 0x0d, 0xe5, 0x8a, 0xd9, 0x1a, 0xbd, 0x10, 0xfc, 0xf9, - 0x94, 0xef, 0x03, 0xe2, 0x58, 0xbe, 0x37, 0x4c, 0x12, 0xc5, 0xdb, 0x7d, - 0x62, 0xed, 0xfb, 0x2c, 0x58, 0x35, 0x48, 0x0a, 0x5b, 0xca, 0xc0, 0x50, - 0xa9, 0x3f, 0x3d, 0x0c, 0xf8, 0x6c, 0x22, 0x0a, 0xc4, 0x6a, 0x3c, 0x26, - 0x2f, 0xed, 0xdf, 0x6f, 0x30, 0xd6, 0x2f, 0xef, 0xcf, 0xf3, 0xaf, 0x2c, - 0x5e, 0x69, 0xe9, 0x62, 0xff, 0x0b, 0x81, 0x96, 0x75, 0x05, 0x8b, 0x77, - 0x18, 0x7a, 0x7f, 0x1d, 0xbf, 0x9f, 0xbf, 0xdf, 0xf2, 0x12, 0xc5, 0xfe, - 0xfb, 0x87, 0x18, 0x00, 0x4a, 0x45, 0x68, 0xfb, 0x63, 0x8d, 0x6f, 0xff, - 0xdc, 0x35, 0xbd, 0x07, 0x1f, 0x3f, 0x98, 0x5b, 0xac, 0x5f, 0xd9, 0xc7, - 0xf4, 0xf4, 0xb1, 0x7e, 0xc3, 0xb3, 0x6c, 0xb1, 0x7e, 0x9d, 0xff, 0x3a, - 0x58, 0xbf, 0x7d, 0xb9, 0x38, 0xb1, 0x7b, 0xe2, 0x35, 0x62, 0xf7, 0x77, - 0x7f, 0xc5, 0x8b, 0xcc, 0x77, 0x58, 0xa3, 0x11, 0x11, 0xf2, 0x72, 0x1f, - 0x11, 0x35, 0xe0, 0xe4, 0x0b, 0x15, 0xb2, 0xb2, 0x93, 0x4c, 0x3a, 0x84, - 0x13, 0xc2, 0x67, 0x44, 0xbf, 0x57, 0x22, 0xef, 0x14, 0x07, 0x0b, 0x1e, - 0xe3, 0xdb, 0xb0, 0x4b, 0x17, 0xfe, 0x87, 0xc3, 0xd4, 0x8f, 0xf8, 0x12, - 0xc5, 0xfb, 0xf2, 0x2e, 0x9d, 0x62, 0x8d, 0x44, 0x17, 0x42, 0xe7, 0x42, - 0xbf, 0x78, 0xfc, 0x8d, 0xe3, 0x5a, 0xc5, 0xff, 0x10, 0x07, 0xf6, 0x0f, - 0x36, 0x58, 0xbf, 0x60, 0xbb, 0xfc, 0xe2, 0xc5, 0x39, 0xf4, 0x7c, 0xee, - 0xfb, 0x09, 0xc2, 0x58, 0xbf, 0xf8, 0xd6, 0x62, 0x01, 0x09, 0xba, 0xef, - 0x16, 0x2b, 0xa3, 0xec, 0x22, 0x2b, 0xfe, 0xf7, 0x33, 0xc5, 0x27, 0xe2, - 0xc5, 0xfa, 0x40, 0xc4, 0x05, 0x8b, 0xf0, 0xba, 0xf3, 0x84, 0xb1, 0x6f, - 0x18, 0x88, 0xb8, 0x1c, 0xf0, 0x9e, 0xb1, 0x1c, 0x85, 0x0a, 0xdb, 0xfe, - 0x2c, 0xd0, 0xff, 0x3d, 0x41, 0x62, 0xff, 0xf4, 0x9c, 0x4c, 0x3f, 0x75, - 0xbb, 0x90, 0x4b, 0x16, 0xc2, 0x44, 0x38, 0x47, 0x57, 0xff, 0xfd, 0x9a, - 0x1f, 0xe7, 0xae, 0x16, 0x44, 0xe2, 0x2d, 0xb3, 0x75, 0x8b, 0xff, 0xe1, - 0x6c, 0x19, 0xf8, 0xfb, 0xbe, 0xc1, 0x37, 0x4b, 0x17, 0xf7, 0x5f, 0x7c, - 0xd4, 0x4b, 0x14, 0xe8, 0x87, 0x65, 0x7b, 0xff, 0x75, 0xed, 0xfe, 0xe3, - 0xfe, 0x6c, 0xb1, 0x7f, 0x3f, 0x5c, 0xfb, 0x84, 0xb1, 0x6e, 0xfd, 0x62, - 0x80, 0x78, 0xe4, 0x61, 0x58, 0x8a, 0xbd, 0x42, 0x2a, 0xfe, 0x6e, 0x66, - 0x11, 0xab, 0x15, 0x87, 0xa8, 0x22, 0x7b, 0xcc, 0xc1, 0x2c, 0x54, 0xab, - 0x23, 0x1c, 0x2b, 0x5c, 0xa3, 0x50, 0xf0, 0xfc, 0x64, 0x04, 0x43, 0x7f, - 0xfe, 0x66, 0x20, 0x1e, 0x7a, 0x80, 0xff, 0x25, 0xba, 0xc5, 0xf6, 0x1d, - 0xc6, 0xb1, 0x7f, 0x9a, 0x3c, 0xd3, 0x67, 0xdc, 0x58, 0xbb, 0xdc, 0x30, - 0xf6, 0xc3, 0x22, 0xbf, 0xe6, 0xd4, 0x45, 0x20, 0xe0, 0x96, 0x2a, 0x4f, - 0xa8, 0x66, 0x17, 0xef, 0x60, 0x8b, 0xcb, 0x17, 0xe8, 0x70, 0x39, 0x8f, - 0x58, 0xb4, 0xe1, 0xea, 0xb1, 0x45, 0xff, 0x8c, 0x26, 0x34, 0xce, 0x00, - 0x12, 0xb1, 0x7f, 0xfc, 0x09, 0x2d, 0xf7, 0xfb, 0xf5, 0xb8, 0xa7, 0x4b, - 0x17, 0xf8, 0x4c, 0x5b, 0xc2, 0x76, 0x58, 0xbf, 0xd0, 0x7e, 0x72, 0x75, - 0x05, 0x8b, 0xdb, 0x08, 0x18, 0x8b, 0xd0, 0x2a, 0x70, 0xd6, 0xce, 0x6a, - 0x68, 0x3a, 0x87, 0xfd, 0xc2, 0xe2, 0xc5, 0xa3, 0x65, 0x8b, 0xff, 0xe1, - 0xbf, 0x0b, 0x3a, 0xdd, 0xfa, 0xce, 0xbc, 0xb1, 0x68, 0x40, 0xfa, 0xb0, - 0x5e, 0xfd, 0xd7, 0x24, 0xbc, 0xb1, 0x5a, 0x3d, 0x0f, 0x93, 0xd1, 0xd1, - 0xe8, 0xd0, 0xd2, 0xa8, 0x2a, 0xb0, 0xe4, 0x6c, 0xde, 0x8c, 0x8e, 0xff, - 0xff, 0x0f, 0xf3, 0xbf, 0xde, 0x26, 0x68, 0x1a, 0xc1, 0xb4, 0x7a, 0xc5, - 0xff, 0xff, 0xbe, 0xcf, 0xc7, 0x86, 0x0f, 0xdf, 0x97, 0xd6, 0x9c, 0xb6, - 0x58, 0xbe, 0x2c, 0xed, 0x8b, 0x15, 0xb2, 0x3d, 0x4e, 0xce, 0x13, 0x5d, - 0xdb, 0x46, 0x8b, 0x17, 0xf3, 0xc5, 0x09, 0x28, 0x2c, 0x53, 0x9e, 0x67, - 0xc7, 0xaf, 0xff, 0xe9, 0xf7, 0x03, 0x2f, 0x7c, 0x4d, 0x0f, 0x73, 0x02, - 0x58, 0xbf, 0xf4, 0xed, 0x9e, 0x86, 0x13, 0x8d, 0x62, 0xff, 0xfb, 0x4c, - 0xdd, 0x43, 0x9e, 0xeb, 0x77, 0xd1, 0xab, 0x17, 0xf4, 0x19, 0xca, 0x60, - 0xb1, 0x7f, 0x8e, 0xdd, 0x3c, 0xf5, 0xe5, 0x8a, 0x93, 0xe1, 0xc2, 0xcb, - 0x36, 0xc8, 0xd6, 0x84, 0x2d, 0xaf, 0xfc, 0xc1, 0x7b, 0x3f, 0xe7, 0x98, - 0xf5, 0x8b, 0xff, 0x48, 0x5c, 0xef, 0x5b, 0x7c, 0xeb, 0xcb, 0x15, 0x2a, - 0xb2, 0x37, 0x7e, 0xd1, 0x0f, 0xd7, 0x9a, 0x31, 0x42, 0x2e, 0xf2, 0x15, - 0xff, 0xb9, 0xf1, 0x34, 0x3f, 0x99, 0xe5, 0x8b, 0xe8, 0x7f, 0x36, 0x58, - 0xbf, 0xe7, 0x2c, 0x3c, 0x76, 0x3f, 0x4b, 0x17, 0xff, 0xf9, 0x8e, 0x59, - 0xd4, 0xeb, 0x4f, 0xdb, 0x59, 0xe6, 0xe9, 0x62, 0x86, 0x89, 0xee, 0x1d, - 0xdf, 0xff, 0xc3, 0x87, 0x35, 0x9e, 0x6e, 0xa2, 0x60, 0xe7, 0xdc, 0x58, - 0xbf, 0xff, 0xb3, 0xcd, 0xd7, 0xfe, 0xf3, 0xef, 0xe7, 0x69, 0xd2, 0xc5, - 0xff, 0xff, 0xb3, 0x59, 0xbf, 0xe7, 0x8d, 0xac, 0x1f, 0xd9, 0xf8, 0xe7, - 0x58, 0xbf, 0xff, 0xd2, 0xd2, 0xe4, 0xde, 0x83, 0xf6, 0xd6, 0x79, 0xba, - 0x58, 0xa9, 0x4e, 0xaa, 0x04, 0x7a, 0x5f, 0xe2, 0xec, 0x73, 0x5d, 0xe6, - 0x6e, 0xe5, 0x8b, 0xa4, 0xe6, 0x1f, 0x61, 0xd3, 0x6f, 0x9f, 0x6d, 0xe0, - 0xb1, 0x7f, 0xf0, 0x0c, 0x8a, 0x02, 0x2f, 0x34, 0x31, 0x62, 0xec, 0xee, - 0x58, 0xa6, 0x3e, 0x12, 0x47, 0xbf, 0xe9, 0xe8, 0xed, 0xec, 0xeb, 0xcb, - 0x17, 0x36, 0xcb, 0x15, 0x8b, 0x87, 0xdd, 0x1f, 0xbc, 0xad, 0x8d, 0x17, - 0x34, 0x21, 0x88, 0x80, 0x23, 0xbb, 0xdf, 0x6e, 0x2c, 0x5b, 0xa5, 0x8b, - 0xfb, 0xe5, 0x9e, 0x90, 0x2c, 0x54, 0x9e, 0xe8, 0xc7, 0x58, 0x4e, 0xff, - 0x1d, 0xb8, 0x53, 0x86, 0xac, 0x58, 0x4b, 0x17, 0xfc, 0x21, 0x7d, 0xfd, - 0xf6, 0x82, 0xc5, 0xe8, 0x67, 0x96, 0x2f, 0x9b, 0xf9, 0xa5, 0x8a, 0xf9, - 0xbf, 0xec, 0x3b, 0x7e, 0x17, 0xf5, 0x21, 0x2c, 0x5d, 0x1c, 0xcb, 0x14, - 0x62, 0x6a, 0x58, 0x5a, 0x69, 0x99, 0xc4, 0x99, 0xe7, 0xc4, 0x61, 0x95, - 0x5f, 0xf8, 0xd1, 0xfd, 0x8e, 0x71, 0x10, 0xd6, 0x2b, 0x74, 0x53, 0x93, - 0x35, 0xef, 0x14, 0xac, 0x54, 0x9b, 0xf7, 0x23, 0xbb, 0xbf, 0xe2, 0xc5, - 0xfb, 0x98, 0x3f, 0xba, 0xc5, 0xfc, 0xec, 0x0f, 0x37, 0x4b, 0x14, 0xe7, - 0xad, 0xf2, 0x8a, 0x24, 0x4a, 0x79, 0xce, 0xfa, 0x1f, 0x7e, 0xcb, 0x17, - 0xff, 0xb3, 0x82, 0xdf, 0xef, 0xd7, 0x1f, 0xa0, 0x2c, 0x5f, 0xfe, 0x1e, - 0xb1, 0xcd, 0x2c, 0xf7, 0x85, 0xb2, 0xc5, 0xe9, 0x2f, 0x18, 0x8e, 0x17, - 0x22, 0x22, 0x5e, 0x27, 0x5d, 0xa6, 0x58, 0xbf, 0xfb, 0xb3, 0xf3, 0x98, - 0x5b, 0xb1, 0x01, 0x62, 0xff, 0x7d, 0xc6, 0x3c, 0x0a, 0x25, 0x8b, 0xcf, - 0xd7, 0x16, 0x2f, 0xd9, 0xdb, 0x21, 0xdf, 0xac, 0x51, 0xa7, 0x9b, 0xf1, - 0xeb, 0x03, 0x11, 0xd9, 0xba, 0x37, 0xa1, 0x07, 0x7c, 0x1f, 0xdb, 0xcb, - 0x15, 0xa3, 0xdf, 0x39, 0xdd, 0xff, 0xf0, 0x39, 0xef, 0xe7, 0xbe, 0xd0, - 0xdb, 0x02, 0x58, 0xa9, 0x3f, 0x57, 0x22, 0xbf, 0xd2, 0x17, 0xb8, 0xc4, - 0x6a, 0xc5, 0xfe, 0x6c, 0xfb, 0xef, 0xfc, 0x58, 0xa7, 0x55, 0x57, 0xa4, - 0xcf, 0xc7, 0xae, 0x44, 0x01, 0x1a, 0xdf, 0xff, 0x07, 0xaf, 0xb1, 0x9c, - 0x2c, 0xd8, 0xf8, 0x75, 0x8b, 0xf7, 0x9c, 0xed, 0x05, 0x8b, 0xcd, 0xd7, - 0x0c, 0x3f, 0xbc, 0x53, 0xb7, 0x96, 0x28, 0x07, 0x8c, 0x19, 0xa5, 0xff, - 0xf1, 0x36, 0x7d, 0xf5, 0xf6, 0x17, 0xf0, 0xeb, 0x17, 0xfd, 0x9c, 0x71, - 0xc9, 0x48, 0x16, 0x2f, 0xfd, 0xbf, 0xd8, 0xbd, 0xc3, 0x94, 0xac, 0x5c, - 0x6c, 0x16, 0x2f, 0xf4, 0xe8, 0x03, 0x66, 0x35, 0x62, 0xb0, 0xf3, 0x7e, - 0x33, 0x7e, 0xfb, 0xef, 0xfc, 0x31, 0x1c, 0x9c, 0x37, 0xf4, 0x23, 0x2f, - 0xef, 0x4e, 0xf0, 0xe4, 0xac, 0x50, 0xd3, 0xb4, 0xc8, 0xcc, 0xba, 0x53, - 0xbf, 0xcc, 0x5e, 0x8b, 0x35, 0x8b, 0x17, 0xff, 0xfd, 0xa3, 0x47, 0xf9, - 0xe7, 0xf3, 0xa8, 0x79, 0xe2, 0x9e, 0x09, 0x62, 0xff, 0xe7, 0xfb, 0x1c, - 0x39, 0x1e, 0xb5, 0x2b, 0x14, 0xc8, 0xb0, 0xf3, 0x5d, 0x62, 0x67, 0x9f, - 0x37, 0x68, 0x71, 0xdf, 0x17, 0xb3, 0xeb, 0x17, 0xff, 0xc5, 0x9d, 0x87, - 0x3a, 0x98, 0x3e, 0xed, 0xa5, 0x8a, 0x93, 0xf3, 0xf1, 0x15, 0xe9, 0xeb, - 0x8b, 0x14, 0xe6, 0xff, 0xe4, 0x37, 0xf8, 0xd6, 0x1e, 0x13, 0xf9, 0x62, - 0xf1, 0x9b, 0xc4, 0xb1, 0x58, 0x7a, 0x84, 0x67, 0x7f, 0xf4, 0xef, 0x9a, - 0xcf, 0xbe, 0xbe, 0xcb, 0x17, 0xf0, 0xdf, 0x35, 0x31, 0x2c, 0x5f, 0x79, - 0xc5, 0xba, 0xc5, 0xff, 0xcc, 0x19, 0x66, 0x7d, 0xf7, 0xfe, 0x2c, 0x54, - 0x9f, 0x40, 0x89, 0x2f, 0xa2, 0x29, 0x3e, 0x91, 0xf6, 0xc8, 0x85, 0x09, - 0x6b, 0xff, 0xda, 0x04, 0x76, 0x6a, 0x60, 0xfd, 0x7b, 0x16, 0x2f, 0xfc, - 0x11, 0x60, 0xfe, 0x2d, 0x88, 0x25, 0x8a, 0x64, 0x48, 0x12, 0x75, 0xfe, - 0xff, 0xdb, 0x6d, 0x4f, 0x65, 0x8b, 0xc3, 0xf3, 0xac, 0x56, 0x1e, 0xa7, - 0x0d, 0xef, 0xf1, 0x7b, 0xed, 0x09, 0xd9, 0x62, 0xff, 0xde, 0x0e, 0x1c, - 0x8a, 0x13, 0xad, 0x96, 0x2b, 0x0f, 0xe3, 0xa3, 0x4b, 0xfe, 0xd4, 0xfb, - 0x5a, 0x93, 0xf1, 0x62, 0xff, 0xfa, 0x0f, 0xe0, 0xf5, 0x3f, 0x9f, 0x71, - 0xba, 0x58, 0xbf, 0xfa, 0x42, 0x9d, 0x4f, 0xe5, 0xcb, 0x65, 0x8b, 0xf0, - 0xb9, 0xf6, 0x81, 0x89, 0xc5, 0xe4, 0x26, 0x62, 0x22, 0xe1, 0xd0, 0x6a, - 0x57, 0xf4, 0x24, 0xc9, 0x39, 0xd6, 0x2f, 0xd9, 0xdc, 0xf3, 0x12, 0xc5, - 0xa3, 0x45, 0x8b, 0xe6, 0x06, 0x14, 0x9f, 0x8f, 0xcb, 0xf8, 0x57, 0x7f, - 0xfb, 0xb7, 0xdc, 0x78, 0xe6, 0xb9, 0x67, 0x65, 0x8b, 0xf4, 0xe1, 0x7a, - 0x39, 0x62, 0xfe, 0x7e, 0x81, 0xa6, 0x1a, 0xc5, 0xff, 0xee, 0xc5, 0x9c, - 0x33, 0x08, 0x50, 0xce, 0x2c, 0x52, 0xc5, 0x61, 0xec, 0x1d, 0x32, 0x8e, - 0x8d, 0x2f, 0x95, 0x14, 0x21, 0xef, 0xdf, 0x9d, 0x71, 0xd6, 0x2d, 0x1e, - 0xb1, 0x76, 0x12, 0xc5, 0x68, 0xd5, 0xfc, 0x56, 0xf3, 0xcc, 0x16, 0x2f, - 0x40, 0x43, 0x58, 0xb7, 0x46, 0x23, 0x88, 0x66, 0x91, 0x29, 0xfc, 0x85, - 0x87, 0x2b, 0x15, 0x29, 0xb4, 0xa0, 0x1b, 0xfc, 0xc4, 0x1b, 0x43, 0x06, - 0xb1, 0x52, 0xbf, 0x91, 0x91, 0x8d, 0xbc, 0x36, 0xb5, 0x28, 0x00, 0xa1, - 0xc1, 0xc9, 0x52, 0xc2, 0x2a, 0xbf, 0x9f, 0x51, 0xb7, 0x3c, 0xeb, 0x17, - 0x42, 0x56, 0x2f, 0xee, 0xde, 0x29, 0x3f, 0x16, 0x2f, 0xc5, 0x3f, 0xc1, - 0xac, 0x5f, 0xfd, 0xc9, 0x06, 0x7d, 0xf4, 0xc1, 0x79, 0x62, 0xdb, 0x0c, - 0xfb, 0x38, 0x4f, 0x4e, 0x8c, 0x52, 0x84, 0xe5, 0x41, 0x30, 0x2c, 0x86, - 0xe5, 0xfc, 0x3c, 0x23, 0x75, 0x2b, 0x17, 0xff, 0xf6, 0x81, 0x9a, 0x62, - 0xfb, 0x31, 0xf0, 0x5a, 0xd9, 0x62, 0xdd, 0x2c, 0x54, 0x9f, 0x74, 0x72, - 0xdd, 0xfe, 0x7d, 0x9f, 0x7f, 0xcf, 0x96, 0x2f, 0xf9, 0xf7, 0x71, 0xfb, - 0x92, 0x6a, 0xc5, 0x9f, 0x47, 0xe1, 0xe3, 0x5a, 0x83, 0xa9, 0x9f, 0x1c, - 0xe4, 0xa1, 0xac, 0xdb, 0xc6, 0x37, 0xd4, 0xb2, 0x68, 0xa5, 0xfd, 0xea, - 0x72, 0xa0, 0xf2, 0xc1, 0xbf, 0x38, 0x7e, 0x08, 0xc4, 0x8a, 0x58, 0x9f, - 0x21, 0xcd, 0xea, 0x41, 0xe7, 0x68, 0x40, 0x85, 0x19, 0xac, 0x71, 0x40, - 0x70, 0x9c, 0xee, 0x84, 0xa5, 0xed, 0xff, 0x12, 0xc5, 0xfb, 0xef, 0x1c, - 0xfa, 0x58, 0xbd, 0xb0, 0x82, 0x58, 0xad, 0xcf, 0x2d, 0x8a, 0xef, 0xfd, - 0xbf, 0xe7, 0xa8, 0x6f, 0xfc, 0x1a, 0xc5, 0xfd, 0xbf, 0xe7, 0xa8, 0x7d, - 0x62, 0xee, 0xff, 0xb9, 0x62, 0xce, 0xb1, 0x79, 0xcf, 0x8b, 0x17, 0x49, - 0xab, 0x15, 0x04, 0x7d, 0x8c, 0x88, 0xd4, 0x3e, 0x8c, 0x5c, 0x83, 0x42, - 0x21, 0x0e, 0x5f, 0xf1, 0x60, 0x5a, 0xcd, 0xff, 0x8b, 0x17, 0xff, 0xfe, - 0x7d, 0xb8, 0x29, 0x30, 0xb3, 0xef, 0x25, 0xe3, 0x45, 0x3a, 0x58, 0xbf, - 0xff, 0x4e, 0xde, 0x11, 0xf3, 0x9b, 0xfe, 0x4a, 0x78, 0xb1, 0x5a, 0x46, - 0x27, 0xdb, 0x6f, 0xee, 0xa1, 0xbf, 0xdf, 0x65, 0x8b, 0x6e, 0xb1, 0x7f, - 0xfd, 0x07, 0x0b, 0xdf, 0xcf, 0xe7, 0x50, 0x60, 0x96, 0x2f, 0xec, 0xf7, - 0x36, 0xc0, 0x96, 0x2a, 0x24, 0x41, 0xe9, 0x4e, 0xf0, 0x7a, 0x95, 0x8b, - 0xff, 0xfb, 0x07, 0xf9, 0x08, 0xb1, 0xf6, 0x8e, 0x17, 0xdf, 0x4b, 0x15, - 0xb2, 0xa8, 0xa1, 0xc3, 0xfb, 0x08, 0xe3, 0xcc, 0xb5, 0x09, 0x66, 0x24, - 0x21, 0xea, 0x97, 0x63, 0x83, 0x91, 0x91, 0xf4, 0x64, 0xf6, 0xa8, 0xf2, - 0x28, 0xda, 0x5a, 0x36, 0x61, 0x4a, 0xf0, 0xb7, 0x4b, 0x17, 0xd3, 0xbb, - 0xee, 0xb1, 0x7b, 0x4e, 0x12, 0xc5, 0xfe, 0xd0, 0xb6, 0x78, 0x1c, 0x6b, - 0x17, 0xfb, 0x99, 0xa1, 0x93, 0x41, 0x62, 0x86, 0x88, 0x7d, 0x0f, 0x70, - 0xda, 0xe1, 0x44, 0xb1, 0x7e, 0x97, 0x3e, 0x71, 0x62, 0xfd, 0x30, 0x8e, - 0xd8, 0x96, 0x28, 0xe7, 0xd9, 0xf1, 0x9f, 0x13, 0xdf, 0xc4, 0x2e, 0x3e, - 0x69, 0x62, 0xfe, 0x30, 0xb0, 0x02, 0xe2, 0xc5, 0x61, 0xee, 0x31, 0x6d, - 0xef, 0xe0, 0x16, 0x2d, 0x2b, 0x17, 0xff, 0xd1, 0x33, 0x43, 0x92, 0x71, - 0xfe, 0x4b, 0x75, 0x8b, 0xfa, 0x0f, 0xe2, 0x9c, 0x58, 0xbf, 0xff, 0xe9, - 0xf7, 0x33, 0x53, 0x85, 0xf0, 0xf5, 0x13, 0x31, 0x6c, 0xb1, 0x52, 0x8f, - 0x57, 0x11, 0xd2, 0x8f, 0x8b, 0x2f, 0xf8, 0x5b, 0xe6, 0xb6, 0xd8, 0x5b, - 0x2c, 0x5f, 0xf6, 0x45, 0x09, 0xeb, 0x3a, 0xf2, 0xc5, 0xbe, 0xb1, 0x7b, - 0xe1, 0x9d, 0x62, 0x86, 0x6c, 0x70, 0x4a, 0x8c, 0x54, 0x73, 0x24, 0x19, - 0x18, 0x91, 0xce, 0xc8, 0xff, 0xcd, 0xb7, 0xb6, 0x7e, 0x96, 0x2f, 0xa7, - 0xe2, 0xd2, 0xc5, 0xdf, 0x1a, 0xc5, 0xcc, 0x4b, 0x15, 0x2a, 0xe4, 0x76, - 0x95, 0x88, 0xeb, 0xa4, 0x3f, 0xc2, 0x30, 0x86, 0x28, 0xc5, 0xd4, 0xa8, - 0x09, 0x8e, 0x15, 0x7a, 0x9c, 0x2d, 0xbe, 0x1f, 0xc5, 0xb2, 0xc5, 0xfc, - 0xd0, 0xcd, 0x84, 0x4b, 0x17, 0x60, 0xd6, 0x28, 0x67, 0x8b, 0xb9, 0x75, - 0xff, 0xb5, 0x91, 0xf1, 0x7d, 0x8e, 0xfc, 0x58, 0xbf, 0xb4, 0xe1, 0x7e, - 0x46, 0xb1, 0x7f, 0x79, 0xc2, 0x3b, 0xf9, 0x62, 0xff, 0x98, 0xb5, 0x8f, - 0xf9, 0x1a, 0xc5, 0xb3, 0x48, 0x95, 0xf1, 0x7f, 0x71, 0x7d, 0xb6, 0x94, - 0xe7, 0x71, 0xab, 0x44, 0x7f, 0x86, 0xc5, 0x9d, 0x62, 0xee, 0xff, 0x16, - 0x2b, 0x0f, 0xd7, 0x49, 0x0c, 0x23, 0x7f, 0xee, 0xcf, 0xe8, 0x49, 0x9e, - 0x91, 0x2c, 0x5a, 0x25, 0x8b, 0xdd, 0xb0, 0x6b, 0x17, 0xff, 0x84, 0xc5, - 0xbf, 0x5c, 0x7f, 0x39, 0x6c, 0xb1, 0x7e, 0x8e, 0x17, 0xf3, 0x75, 0x8b, - 0x8f, 0xc5, 0x8a, 0xc4, 0xc1, 0x62, 0x42, 0x38, 0x98, 0x07, 0xfc, 0x98, - 0x22, 0xdb, 0xfa, 0x7c, 0xe0, 0x98, 0x2c, 0x5d, 0x06, 0x58, 0xb9, 0xb4, - 0xb1, 0x5a, 0x3d, 0xb6, 0x2d, 0xe0, 0xbd, 0xfd, 0xd6, 0xcd, 0x09, 0x8f, - 0x58, 0xb4, 0x17, 0x28, 0xa1, 0x79, 0x8a, 0x0b, 0x94, 0x54, 0xa2, 0x3c, - 0x8e, 0x0f, 0xdf, 0x0c, 0xef, 0xe5, 0x8a, 0x94, 0x5f, 0xec, 0xf6, 0xc4, - 0x37, 0x05, 0x2b, 0x14, 0x63, 0xe3, 0x68, 0xf7, 0x86, 0x1d, 0xec, 0x24, - 0x66, 0x1e, 0xdb, 0x42, 0x3a, 0x04, 0x59, 0x0c, 0x33, 0x4f, 0xb7, 0x84, - 0x93, 0xc6, 0x91, 0x11, 0xf1, 0xe1, 0xe5, 0xfb, 0x6a, 0x20, 0xd3, 0xba, - 0xc5, 0x29, 0x83, 0x91, 0x99, 0x7a, 0x16, 0x62, 0x87, 0x6c, 0x71, 0x7d, - 0xfe, 0xfb, 0x80, 0x0f, 0xd7, 0x16, 0x2f, 0xf4, 0x9f, 0x7f, 0xb7, 0x40, - 0x58, 0xb7, 0x7b, 0xb9, 0xf5, 0x86, 0x6b, 0x7f, 0x45, 0x84, 0xdf, 0xc5, - 0x8b, 0xd9, 0x80, 0x58, 0xa8, 0x1e, 0x4f, 0x8b, 0x6f, 0x1e, 0x71, 0x62, - 0xd1, 0x2c, 0x5c, 0x7d, 0xcc, 0x35, 0xee, 0x39, 0x7f, 0x98, 0xb1, 0xe3, - 0xdf, 0xeb, 0x17, 0x1f, 0xa5, 0x8b, 0xd0, 0x93, 0xac, 0x5f, 0xd9, 0x9c, - 0xe6, 0x47, 0xac, 0x57, 0x47, 0x9a, 0x43, 0xb7, 0xfd, 0x25, 0xb7, 0x30, - 0xf3, 0x1e, 0xb1, 0x7f, 0xfd, 0xb7, 0xb3, 0x9f, 0x17, 0x27, 0x61, 0x14, - 0xac, 0x5f, 0xfe, 0x97, 0x18, 0x7a, 0xfb, 0xeb, 0x07, 0x2b, 0x17, 0xff, - 0xf6, 0x9f, 0xdc, 0xfe, 0x39, 0x16, 0x75, 0xee, 0x3a, 0xc5, 0xa0, 0x62, - 0x29, 0x34, 0x95, 0x74, 0xfd, 0x62, 0xfe, 0xef, 0xf7, 0xfb, 0x0a, 0x0b, - 0x17, 0xf3, 0x44, 0x39, 0x2d, 0x96, 0x2b, 0x64, 0xfe, 0x46, 0x45, 0x87, - 0x8d, 0x0f, 0x62, 0x2a, 0x10, 0xbf, 0x63, 0x5b, 0xf9, 0xbc, 0x00, 0xca, - 0x25, 0x8b, 0xfd, 0xf6, 0xf7, 0x02, 0xcf, 0xac, 0x5e, 0x89, 0xfe, 0xb1, - 0x68, 0x2c, 0x52, 0xc5, 0x31, 0x7d, 0xc1, 0x2a, 0x93, 0xdb, 0xd1, 0xe5, - 0xfd, 0xe2, 0xcd, 0x9f, 0x4b, 0x17, 0xec, 0xf3, 0x10, 0x16, 0x2a, 0x4f, - 0x54, 0x45, 0xd7, 0xbb, 0xa4, 0xeb, 0x15, 0x89, 0xa3, 0xb4, 0x24, 0x38, - 0xed, 0xdc, 0x43, 0x7b, 0xee, 0x1a, 0xc5, 0xf0, 0xff, 0x30, 0x58, 0xad, - 0xcf, 0x04, 0x87, 0xaf, 0x14, 0xee, 0xb1, 0x7e, 0xc7, 0x35, 0xcd, 0x58, - 0xbe, 0x98, 0x67, 0x16, 0x2f, 0xf9, 0x82, 0x0c, 0x8b, 0x3a, 0x82, 0xc5, - 0x62, 0x28, 0xf4, 0x3b, 0xf2, 0x96, 0x22, 0xbd, 0x13, 0x71, 0x62, 0xfc, - 0xde, 0x0f, 0xf2, 0xb1, 0x7a, 0x4b, 0x75, 0x8a, 0x73, 0xe4, 0xf8, 0xf7, - 0x71, 0x4d, 0xf9, 0xb3, 0xcf, 0xb2, 0xc5, 0xfb, 0x0d, 0x69, 0xd9, 0x62, - 0xf7, 0xbd, 0x2b, 0x15, 0xf3, 0xc6, 0x62, 0x9b, 0xe9, 0x8b, 0x52, 0xb1, - 0x69, 0x58, 0xb6, 0x2c, 0x56, 0x8d, 0x11, 0xc4, 0x6d, 0xba, 0xc5, 0x1c, - 0xfe, 0x7e, 0x8b, 0xdc, 0x43, 0x7d, 0x22, 0xef, 0xdd, 0x62, 0xfb, 0x85, - 0x21, 0x2c, 0x5f, 0x87, 0xfc, 0x28, 0x2c, 0x56, 0x1e, 0x5b, 0x11, 0xdc, - 0xe0, 0x58, 0xbe, 0x68, 0x9b, 0xcb, 0x15, 0x03, 0x75, 0xe1, 0x7b, 0xed, - 0x8e, 0x21, 0xac, 0x5e, 0xee, 0x7d, 0x96, 0x2d, 0x38, 0x78, 0xdd, 0xc4, - 0xb7, 0xff, 0xf6, 0x7b, 0x81, 0xf3, 0xdf, 0x62, 0x37, 0x3b, 0x48, 0x4b, - 0x17, 0xdc, 0xf3, 0xc4, 0xb1, 0x47, 0x44, 0x23, 0x30, 0x5f, 0xe7, 0xd4, - 0xec, 0xda, 0xdd, 0x62, 0xed, 0xe2, 0x58, 0xa3, 0x17, 0x69, 0x66, 0x10, - 0xa3, 0x86, 0x2e, 0x42, 0x7c, 0xd3, 0x1d, 0xdb, 0x9e, 0x13, 0x5a, 0x32, - 0xfb, 0x93, 0x2d, 0x13, 0x3f, 0x21, 0x5b, 0xe2, 0x28, 0xe3, 0x5a, 0x3a, - 0xff, 0xc7, 0xa7, 0xc7, 0x2f, 0xff, 0x6b, 0x72, 0xce, 0xc5, 0x93, 0xa9, - 0xe2, 0xc5, 0xff, 0x8e, 0xf9, 0xd6, 0x38, 0xe7, 0xb9, 0x62, 0xfb, 0x0f, - 0x9c, 0x58, 0xbf, 0xb2, 0x3f, 0xf3, 0x83, 0x58, 0xb9, 0xa2, 0xf9, 0xe9, - 0x11, 0x15, 0xff, 0xc3, 0xfc, 0xf3, 0x34, 0x36, 0x6f, 0xac, 0x56, 0x26, - 0x9f, 0xa4, 0xbe, 0xd0, 0x93, 0x08, 0xb6, 0x96, 0x2f, 0xf8, 0x6c, 0xc1, - 0x67, 0x18, 0x96, 0x2b, 0xe7, 0x88, 0x41, 0x97, 0xbb, 0x37, 0xd6, 0x2e, - 0x9f, 0x2c, 0x54, 0x9b, 0x68, 0xe1, 0xfb, 0xe9, 0xec, 0xfd, 0x96, 0x2e, - 0xc3, 0xac, 0x58, 0xd3, 0x0d, 0xeb, 0x93, 0x56, 0xc8, 0x88, 0x26, 0x0b, - 0xf1, 0xbe, 0xcc, 0x3a, 0xc5, 0xff, 0xa1, 0x07, 0xde, 0x4f, 0x17, 0x25, - 0x62, 0xff, 0xf6, 0xc1, 0xfd, 0xe4, 0xb6, 0x01, 0xe6, 0x0b, 0x15, 0x29, - 0xdc, 0xe4, 0x37, 0xdc, 0x8d, 0x8a, 0x44, 0x83, 0x7f, 0xf1, 0x61, 0xa6, - 0xb7, 0xb8, 0xe5, 0x12, 0xc5, 0xec, 0x83, 0xac, 0x5b, 0x16, 0x2a, 0x23, - 0xf3, 0xd2, 0x30, 0x07, 0x2f, 0x66, 0xc4, 0xb1, 0x7b, 0x05, 0xd2, 0xc5, - 0xfe, 0x92, 0x1f, 0xd8, 0x28, 0x96, 0x2b, 0xe7, 0xe0, 0x43, 0xbe, 0x1e, - 0xbf, 0x60, 0xdf, 0x5c, 0x58, 0xa5, 0x8b, 0xe8, 0x38, 0x38, 0xb1, 0x5c, - 0x35, 0xe1, 0x86, 0x5e, 0x13, 0x69, 0x62, 0xfb, 0x79, 0xcd, 0x96, 0x29, - 0xcf, 0x07, 0x43, 0xb7, 0xec, 0xff, 0xc5, 0xe5, 0x8b, 0xde, 0xf7, 0x4b, - 0x17, 0xff, 0x75, 0xbb, 0xfc, 0xce, 0xec, 0xfb, 0x9d, 0x62, 0x80, 0x7d, - 0x5e, 0x1f, 0xb8, 0x5a, 0x58, 0xbe, 0x9d, 0xe3, 0xb1, 0x62, 0xb1, 0x31, - 0x4d, 0x10, 0xf2, 0x12, 0x71, 0xc4, 0x41, 0x8c, 0x56, 0xca, 0x88, 0x4e, - 0xae, 0x14, 0x6e, 0xf7, 0xc1, 0xff, 0x37, 0x58, 0xbc, 0xcc, 0x4b, 0x14, - 0xb1, 0x6e, 0x78, 0xd3, 0x88, 0x6e, 0xba, 0x3f, 0x30, 0x93, 0x2a, 0x51, - 0xa2, 0xf0, 0xad, 0xbf, 0xff, 0x37, 0xa2, 0x29, 0x07, 0x32, 0x1f, 0x72, - 0x02, 0xc5, 0x18, 0xd9, 0xd7, 0x77, 0x86, 0x93, 0x29, 0x7f, 0x29, 0x0c, - 0x4f, 0x1b, 0xef, 0xe5, 0x21, 0x34, 0x2f, 0xf9, 0x0a, 0x0f, 0x4b, 0x20, - 0x11, 0x35, 0xfe, 0x9f, 0x96, 0x7b, 0xee, 0xb1, 0x7f, 0xbd, 0xfc, 0x18, - 0xbd, 0xc5, 0x8a, 0xd1, 0xf3, 0x91, 0x95, 0xf4, 0x73, 0x74, 0x05, 0x8b, - 0xfb, 0x58, 0xff, 0x91, 0xac, 0x5f, 0xdd, 0x67, 0x6e, 0xa4, 0x35, 0x8b, - 0x3c, 0x79, 0xf0, 0x06, 0x5b, 0x47, 0x45, 0x91, 0x42, 0x1e, 0xd0, 0x58, - 0xbf, 0xf6, 0x87, 0x21, 0x67, 0xe7, 0xae, 0x2c, 0x5f, 0xff, 0x70, 0xb3, - 0xce, 0x41, 0x7b, 0x8d, 0xd6, 0xeb, 0x15, 0x88, 0x93, 0xe9, 0x06, 0xf4, - 0x8b, 0xa5, 0x8a, 0x73, 0xc1, 0xf9, 0x1d, 0xfd, 0xe9, 0xd1, 0x66, 0xcb, - 0x17, 0xc1, 0xce, 0x80, 0xb1, 0x7f, 0xbf, 0xf9, 0xda, 0x44, 0x75, 0x8b, - 0xf4, 0x8b, 0xdd, 0xba, 0x58, 0xb4, 0xf4, 0x7c, 0x3f, 0x35, 0xbf, 0xd1, - 0x70, 0x50, 0x29, 0x3a, 0xc5, 0xa3, 0x45, 0x8b, 0x62, 0xc5, 0xf9, 0xbd, - 0xc9, 0x35, 0x62, 0xc5, 0xb1, 0xba, 0xdc, 0x46, 0xfe, 0xce, 0xa1, 0x39, - 0xe5, 0x8b, 0xff, 0xb5, 0xa6, 0x06, 0x7d, 0xf5, 0xf6, 0x58, 0xb4, 0x16, - 0x2b, 0xbd, 0x47, 0xec, 0xa8, 0x91, 0x47, 0x0b, 0x83, 0x44, 0xbe, 0xd8, - 0xf3, 0xc5, 0x8b, 0xff, 0x13, 0x1b, 0xc6, 0x1f, 0xda, 0x0b, 0x17, 0xfd, - 0x0e, 0x7c, 0x52, 0x5b, 0x01, 0x62, 0xf3, 0x85, 0xdf, 0xac, 0x5f, 0xe1, - 0x7b, 0xf8, 0x76, 0x3a, 0xc5, 0xd9, 0xc5, 0x8b, 0x69, 0x62, 0xba, 0x45, - 0xdc, 0x47, 0x67, 0x23, 0xf9, 0xa3, 0x0b, 0xdf, 0xff, 0x8d, 0xcf, 0x3f, - 0x3e, 0x2c, 0xf0, 0x18, 0x72, 0xb1, 0x7b, 0xee, 0x75, 0x8b, 0xf3, 0xec, - 0x79, 0xdd, 0x62, 0xb0, 0xf1, 0xfc, 0x3b, 0x52, 0xa8, 0x9e, 0x04, 0x83, - 0x87, 0xd6, 0x92, 0xff, 0x09, 0xdb, 0xbb, 0xff, 0xac, 0x5f, 0x9a, 0x1e, - 0xdf, 0x8b, 0x17, 0xbd, 0x9d, 0x96, 0x2f, 0xfc, 0x36, 0x60, 0xba, 0xf1, - 0x37, 0xd6, 0x28, 0x68, 0x89, 0x62, 0xae, 0x0f, 0xdf, 0x41, 0xf5, 0x05, - 0x8b, 0xf8, 0x11, 0x41, 0xf5, 0x05, 0x88, 0x8d, 0x1d, 0xf6, 0x6e, 0xdb, - 0xac, 0x5f, 0x49, 0x66, 0x96, 0x2e, 0xfe, 0x7c, 0xf1, 0x78, 0x49, 0x73, - 0xec, 0xb1, 0x5b, 0x9e, 0x2f, 0x8b, 0x68, 0xd4, 0xd0, 0x3a, 0x52, 0xd4, - 0x32, 0xef, 0x6d, 0x81, 0x2c, 0x5f, 0xed, 0xe2, 0x73, 0x89, 0xb8, 0xb1, - 0x7d, 0x82, 0xd6, 0xcb, 0x17, 0x4c, 0x7a, 0xc5, 0x0d, 0x12, 0x7d, 0x0f, - 0x9c, 0xdb, 0xe4, 0x97, 0xa4, 0x51, 0xeb, 0x17, 0xbe, 0xfe, 0x58, 0xad, - 0x1b, 0xd0, 0xc8, 0x2f, 0x48, 0xc6, 0xb1, 0x76, 0x77, 0x2c, 0x5f, 0x00, - 0x32, 0x82, 0xc5, 0x98, 0x8d, 0xf7, 0x86, 0xaf, 0xdc, 0xe6, 0x10, 0x16, - 0x28, 0x07, 0x9a, 0x44, 0xb5, 0x2b, 0x8d, 0x98, 0xaa, 0xf1, 0xf3, 0x34, - 0x32, 0xf8, 0xf7, 0xe2, 0x21, 0x42, 0xa2, 0xd1, 0x2c, 0x5f, 0xf0, 0x98, - 0x38, 0xa1, 0x9d, 0x41, 0x62, 0xba, 0x3d, 0x02, 0x13, 0xbe, 0x26, 0xeb, - 0x8b, 0x17, 0xde, 0x01, 0xf1, 0x62, 0xbc, 0x78, 0xc1, 0x91, 0xdb, 0x16, - 0x28, 0xe8, 0x9c, 0x03, 0x47, 0x88, 0xee, 0x9e, 0x2c, 0x5f, 0xdc, 0xf3, - 0xfc, 0x40, 0x58, 0xbe, 0x9f, 0xc8, 0xd6, 0x2f, 0x4f, 0x50, 0x58, 0xad, - 0xd1, 0x0d, 0xd0, 0xbc, 0x45, 0xe7, 0x22, 0xbf, 0xff, 0xbf, 0x85, 0xee, - 0x18, 0x1c, 0x3f, 0x84, 0x42, 0x82, 0xc5, 0xfd, 0xf9, 0xd1, 0x4c, 0x16, - 0x2f, 0xf8, 0xba, 0xf6, 0x42, 0x4b, 0x75, 0x8b, 0x1a, 0x33, 0xe7, 0x11, - 0x6d, 0xfb, 0xee, 0x4d, 0xb2, 0xc5, 0xff, 0x41, 0xb5, 0xe2, 0x93, 0xf1, - 0x62, 0xff, 0x48, 0xe7, 0x42, 0x90, 0x2c, 0x5f, 0x76, 0x9c, 0xd2, 0xc5, - 0xd9, 0xd2, 0xc5, 0x61, 0xbc, 0x22, 0x4b, 0x73, 0x74, 0x77, 0xc4, 0x50, - 0x73, 0x92, 0x6f, 0xbf, 0xfd, 0x31, 0xe1, 0xed, 0xcf, 0xee, 0xfc, 0xc1, - 0xac, 0x5f, 0xbd, 0xa7, 0x16, 0xcb, 0x15, 0x29, 0xeb, 0x9e, 0x31, 0x8f, - 0xa2, 0x04, 0xa3, 0x73, 0x77, 0xeb, 0x17, 0xfd, 0xfc, 0x78, 0x39, 0xa6, - 0xe2, 0xc5, 0xff, 0x30, 0x78, 0x42, 0xf0, 0x8d, 0x58, 0xa8, 0x22, 0x47, - 0xc3, 0x82, 0x3a, 0xbc, 0xcc, 0x6a, 0xc5, 0xff, 0x33, 0xf0, 0xb0, 0xe7, - 0x75, 0x8a, 0xd1, 0xea, 0x7c, 0x76, 0xe9, 0xce, 0x91, 0x4c, 0x14, 0x21, - 0x2f, 0x77, 0x14, 0xac, 0x5c, 0x1f, 0xd6, 0x2c, 0x52, 0x6e, 0x20, 0x3f, - 0x7f, 0x45, 0xcd, 0x4f, 0x5e, 0x58, 0xbf, 0xfc, 0xcd, 0xad, 0xbe, 0xde, - 0xfb, 0xea, 0x0b, 0x17, 0xed, 0x0f, 0xef, 0x12, 0xc5, 0xfc, 0x53, 0xd4, - 0x1c, 0x96, 0x2f, 0x7e, 0x74, 0xb0, 0x33, 0x5b, 0x7f, 0x63, 0x91, 0x48, - 0xd6, 0x2c, 0x10, 0xd1, 0xf5, 0x89, 0x7b, 0xab, 0xfc, 0xb6, 0xa5, 0x36, - 0xf6, 0x8c, 0xae, 0xff, 0x98, 0xb3, 0xde, 0x70, 0xbc, 0xb1, 0x7f, 0xc5, - 0x9f, 0xf1, 0x63, 0x44, 0xb1, 0x7f, 0xfd, 0x87, 0x10, 0xcc, 0xe4, 0xe9, - 0xa0, 0xff, 0x58, 0xa3, 0x11, 0x12, 0x47, 0x17, 0xff, 0xff, 0x45, 0x07, - 0x2f, 0x48, 0x3b, 0xbc, 0xe6, 0xeb, 0x27, 0xa8, 0x39, 0xd6, 0x2a, 0x53, - 0x5c, 0x3c, 0x30, 0x88, 0x8e, 0xa5, 0x91, 0x89, 0x90, 0xb6, 0xdd, 0x01, - 0xe5, 0x4d, 0xea, 0x37, 0xb6, 0x6c, 0x28, 0xe5, 0x05, 0x1c, 0x25, 0x46, - 0xce, 0xad, 0xb6, 0x5e, 0x36, 0x51, 0x85, 0x67, 0xb8, 0x38, 0xc9, 0xf2, - 0x1a, 0x66, 0x93, 0xef, 0x0e, 0x67, 0x21, 0x88, 0xbb, 0xf0, 0x85, 0x62, - 0x80, 0x46, 0x65, 0xc9, 0xee, 0x1f, 0x52, 0x88, 0xef, 0xdd, 0xf7, 0xd4, - 0x33, 0xcb, 0x17, 0xf7, 0x58, 0x73, 0xbc, 0x7a, 0xc5, 0xfc, 0x59, 0x14, - 0x27, 0xa5, 0x8b, 0xff, 0x75, 0x0c, 0xf3, 0xf6, 0x92, 0xdd, 0x62, 0xa0, - 0x7e, 0x3e, 0x2f, 0xbf, 0xa4, 0x5d, 0x3f, 0x5d, 0xcb, 0x17, 0xec, 0x0b, - 0x3a, 0xf2, 0xc5, 0x18, 0x7b, 0xae, 0x67, 0x7f, 0xfa, 0x48, 0x46, 0x67, - 0xb2, 0x7f, 0x31, 0x2c, 0x5f, 0xf9, 0xa5, 0xce, 0xdb, 0x3e, 0x04, 0xb1, - 0x7f, 0xba, 0x86, 0x0f, 0xf9, 0xb2, 0xc5, 0xff, 0x18, 0xe7, 0xc2, 0x90, - 0xa5, 0x62, 0xff, 0x49, 0x0e, 0x63, 0xdb, 0xb9, 0x62, 0xa0, 0xa9, 0xcf, - 0xa8, 0x51, 0xe9, 0xff, 0xe4, 0x40, 0x4a, 0x23, 0xef, 0x1b, 0x76, 0x39, - 0xbd, 0x1b, 0xc6, 0xdd, 0x2c, 0x5f, 0xba, 0x30, 0x39, 0xe2, 0xc5, 0xe9, - 0x87, 0x16, 0x2d, 0xc5, 0x8b, 0x7e, 0x4f, 0x6f, 0xe5, 0x81, 0x8e, 0xdf, - 0xa7, 0x5d, 0x43, 0x8b, 0x17, 0xfd, 0x3b, 0x18, 0xdd, 0xdd, 0xcc, 0x05, - 0x8b, 0xf9, 0xa0, 0x07, 0x2f, 0x2c, 0x5f, 0xff, 0xf6, 0xa2, 0x6f, 0xbf, - 0x26, 0x27, 0xf7, 0xb3, 0xe0, 0x7e, 0xcb, 0x15, 0x1b, 0x27, 0x77, 0x30, - 0x84, 0xd8, 0xd7, 0x45, 0x47, 0x41, 0x11, 0x6d, 0xff, 0xc2, 0xd6, 0x6d, - 0x3c, 0x98, 0x4e, 0x96, 0x2f, 0x6b, 0x38, 0xb1, 0x7e, 0x72, 0xed, 0x90, - 0x58, 0xbd, 0x8f, 0xb2, 0xc5, 0xff, 0x64, 0x5f, 0x9e, 0xa2, 0x6d, 0xd6, - 0x28, 0xd4, 0x50, 0x1c, 0x77, 0xe5, 0x3c, 0x1d, 0xbf, 0xa7, 0x6c, 0xf6, - 0x1d, 0x62, 0xfc, 0x19, 0x9f, 0xe6, 0x2c, 0x5f, 0xf8, 0x85, 0xbf, 0xf0, - 0xf1, 0x36, 0xeb, 0x17, 0x0b, 0x4b, 0x15, 0x87, 0xb5, 0x1c, 0x85, 0x50, - 0x4f, 0xe9, 0xe1, 0xcb, 0xa3, 0xe0, 0x17, 0x72, 0x10, 0xb7, 0x9e, 0x46, - 0xb1, 0x7f, 0xef, 0xb4, 0x39, 0x2f, 0xb3, 0x79, 0x62, 0x8e, 0x7b, 0x64, - 0x39, 0x70, 0x23, 0xd6, 0x2f, 0xf1, 0x1b, 0xf9, 0x39, 0xc9, 0x62, 0xfe, - 0x8f, 0x79, 0xee, 0x17, 0x96, 0x2f, 0xd3, 0x16, 0x66, 0xeb, 0x17, 0x8b, - 0x3b, 0x96, 0x2a, 0x51, 0xd9, 0x02, 0x1c, 0x1b, 0x73, 0x4f, 0x9a, 0x08, - 0xa6, 0xff, 0x9f, 0xae, 0x3c, 0xf4, 0xdb, 0x2c, 0x5f, 0xf9, 0xb7, 0x32, - 0x43, 0x9d, 0x9b, 0x8b, 0x17, 0xfe, 0x2c, 0xd6, 0xa5, 0xbc, 0xc6, 0xac, - 0x5e, 0x3b, 0x79, 0x62, 0xfd, 0x9a, 0x73, 0xf1, 0x62, 0xf3, 0x4f, 0x4b, - 0x15, 0x27, 0x8a, 0x72, 0x8a, 0xd9, 0x33, 0xee, 0x8e, 0xf4, 0x84, 0x47, - 0xc1, 0x31, 0x5f, 0xef, 0x71, 0xfb, 0x69, 0xf8, 0xb1, 0x63, 0xac, 0x52, - 0xc5, 0x61, 0x7c, 0xc2, 0x57, 0xde, 0xfb, 0xc4, 0xb1, 0x7f, 0x3e, 0x83, - 0x28, 0x4a, 0xc5, 0x49, 0xe9, 0x40, 0x92, 0x86, 0x89, 0x10, 0x9c, 0x2e, - 0x78, 0x2c, 0x56, 0x26, 0x40, 0xf0, 0xe5, 0x22, 0x4b, 0xff, 0xdc, 0x6c, - 0xec, 0xfe, 0x86, 0x1a, 0x6e, 0x2c, 0x5d, 0x3b, 0xac, 0x5f, 0xf7, 0x24, - 0xe5, 0x3d, 0x4f, 0x16, 0x28, 0xd3, 0xd1, 0xe0, 0xc5, 0xff, 0x64, 0x4f, - 0x10, 0xbb, 0x85, 0xc5, 0x8b, 0x32, 0xc5, 0x7c, 0xf4, 0x3c, 0x7f, 0x7f, - 0x4c, 0x58, 0x42, 0xc5, 0x8b, 0xb4, 0x6a, 0xc5, 0x49, 0xe3, 0x39, 0x6d, - 0xf7, 0x9e, 0x7a, 0x58, 0xbe, 0xcd, 0xa6, 0x25, 0x8a, 0x94, 0xd0, 0x9d, - 0xcc, 0x9a, 0x38, 0x40, 0x22, 0x3b, 0xfe, 0x98, 0xa7, 0xdf, 0xcd, 0x6e, - 0xb1, 0x7f, 0xfa, 0x7a, 0x30, 0x51, 0x37, 0x5c, 0xfe, 0x79, 0x62, 0xf7, - 0xe6, 0x25, 0x8a, 0xe9, 0x15, 0x1f, 0x3b, 0xee, 0x4f, 0xbf, 0xef, 0xb4, - 0x8f, 0xf2, 0x79, 0x58, 0xbf, 0xd8, 0x37, 0x92, 0x73, 0xac, 0x54, 0xa2, - 0x75, 0xcd, 0x3e, 0x71, 0x50, 0x4e, 0xef, 0x91, 0xc6, 0xde, 0x14, 0x4e, - 0xb1, 0x7f, 0x6c, 0x20, 0x7b, 0x37, 0x58, 0xb9, 0xdd, 0x62, 0xa3, 0xcf, - 0x97, 0x43, 0xc4, 0x63, 0x7f, 0xfe, 0x3b, 0x8f, 0x07, 0x3d, 0xc2, 0x63, - 0x7a, 0x93, 0xac, 0x5f, 0xbe, 0xde, 0xf8, 0x6b, 0x17, 0x36, 0xcb, 0x17, - 0xf3, 0x1f, 0x3b, 0x36, 0x96, 0x2b, 0x63, 0xc7, 0x38, 0xc5, 0xe2, 0x17, - 0x4b, 0x17, 0xfe, 0x89, 0xff, 0x3d, 0x42, 0x62, 0x95, 0x8a, 0xc4, 0xd3, - 0x77, 0x5a, 0x77, 0x16, 0x23, 0x10, 0xf5, 0xe9, 0xf1, 0xd6, 0x2f, 0xfd, - 0xe6, 0x34, 0xa7, 0xdf, 0x63, 0xac, 0x5f, 0xff, 0x06, 0xe7, 0x30, 0xd2, - 0x17, 0x3a, 0xdd, 0xfa, 0x58, 0xb1, 0xd6, 0x2a, 0x4f, 0xa7, 0x8a, 0xf4, - 0x74, 0x73, 0x30, 0xef, 0x74, 0x2a, 0x2f, 0xfb, 0x82, 0xda, 0x62, 0x30, - 0x1e, 0x58, 0xbf, 0x0d, 0x8a, 0x7e, 0xb1, 0x7f, 0xbd, 0x23, 0x9f, 0x61, - 0xd6, 0x2f, 0xf7, 0x67, 0xd6, 0x76, 0x6d, 0x2c, 0x5f, 0xd0, 0x9e, 0xbd, - 0x9f, 0x58, 0xbf, 0xfd, 0xee, 0x38, 0x26, 0x1c, 0xcc, 0xeb, 0xcb, 0x15, - 0x28, 0xe4, 0xc3, 0x38, 0x8d, 0xf8, 0x5f, 0x5d, 0x27, 0x0b, 0xf3, 0xe0, - 0xa3, 0x0b, 0xbf, 0xd9, 0xbe, 0x14, 0xe0, 0x4b, 0x17, 0xfc, 0x39, 0xf8, - 0xdf, 0xb4, 0x8d, 0x62, 0xfe, 0x98, 0x8f, 0x23, 0x95, 0x8b, 0xff, 0x9b, - 0xed, 0x17, 0xe7, 0xaf, 0x4f, 0xd6, 0x28, 0xe7, 0xe8, 0x02, 0xeb, 0xf4, - 0x58, 0xfd, 0xc3, 0x58, 0xa7, 0x3c, 0xe6, 0x22, 0xbf, 0xff, 0x34, 0x5c, - 0x11, 0x7b, 0x59, 0x3d, 0x41, 0xce, 0xb1, 0x52, 0x9b, 0xa7, 0xe1, 0xfa, - 0x11, 0x05, 0xff, 0xfc, 0x1b, 0x13, 0xf4, 0xf1, 0x4f, 0x70, 0x83, 0x17, - 0x3c, 0xb1, 0x7f, 0xe9, 0xf7, 0x19, 0xc6, 0x2f, 0x71, 0x62, 0xa5, 0x71, - 0xcd, 0xe3, 0xbc, 0xf9, 0xcf, 0x23, 0xa7, 0x11, 0xb0, 0x4c, 0x57, 0xec, - 0xea, 0x1f, 0x75, 0x8b, 0xff, 0x9c, 0xb3, 0xd2, 0x73, 0x3b, 0xbb, 0x79, - 0x62, 0xfb, 0xb8, 0x85, 0xb2, 0xc5, 0x18, 0x89, 0xa8, 0xf2, 0x93, 0xa5, - 0x5f, 0xbe, 0xf1, 0x3e, 0xcb, 0x17, 0x6a, 0x0b, 0x14, 0xe7, 0x84, 0xc5, - 0x56, 0x95, 0x8a, 0xe1, 0xb1, 0xf1, 0x05, 0xff, 0x3e, 0x9f, 0x68, 0xa0, - 0x23, 0x56, 0x2c, 0x05, 0x8a, 0xd8, 0xf3, 0xe3, 0xcf, 0x6f, 0xde, 0x72, - 0x84, 0xac, 0x5f, 0xdd, 0x43, 0x05, 0xad, 0x96, 0x2f, 0xff, 0x6b, 0x52, - 0x58, 0x6b, 0xff, 0xf8, 0x1a, 0xc5, 0x62, 0x28, 0xdc, 0x9c, 0x46, 0x37, - 0x8a, 0x60, 0xb1, 0x52, 0xa8, 0xab, 0x21, 0x4e, 0xee, 0x1a, 0x86, 0x4b, - 0x17, 0x5f, 0xe6, 0xf3, 0x1d, 0xcf, 0x2b, 0x17, 0xf3, 0x9a, 0xfe, 0x6f, - 0xac, 0x5e, 0xdf, 0xf2, 0xb1, 0x76, 0xa5, 0x62, 0x8c, 0x44, 0xac, 0x0c, - 0xba, 0x2e, 0x88, 0x7a, 0xfd, 0x2f, 0xee, 0xf2, 0x35, 0xac, 0x5f, 0x99, - 0xc7, 0x24, 0xb1, 0x74, 0x89, 0x62, 0xa5, 0x16, 0x1f, 0x40, 0x23, 0x3e, - 0x13, 0x5f, 0x84, 0x20, 0xde, 0x3d, 0x62, 0xee, 0xe9, 0x58, 0xb8, 0xb7, - 0x58, 0xa9, 0x36, 0x4e, 0x35, 0x7f, 0x84, 0xe5, 0x9c, 0xe6, 0x2c, 0x56, - 0xc7, 0xa2, 0x71, 0xfb, 0xb3, 0x75, 0x8b, 0xfe, 0x6f, 0x7e, 0x78, 0x21, - 0xe2, 0xc5, 0xfb, 0x21, 0x25, 0xba, 0xc5, 0xf7, 0xc0, 0xde, 0x58, 0xb7, - 0xd6, 0x29, 0x8d, 0xa8, 0x88, 0xef, 0xf1, 0x67, 0xa6, 0x02, 0xd2, 0xc5, - 0x1d, 0x30, 0x12, 0x18, 0xf1, 0xcf, 0x65, 0xde, 0xe2, 0x0b, 0xf0, 0x18, - 0xed, 0xd2, 0xc5, 0xff, 0x8e, 0xfc, 0xfc, 0xbe, 0x85, 0x1e, 0xb1, 0x5d, - 0x1f, 0x5b, 0x94, 0xd1, 0x8a, 0xac, 0x26, 0x16, 0x0f, 0x19, 0x23, 0x42, - 0xea, 0xf8, 0x45, 0x27, 0x58, 0xbf, 0xff, 0xd3, 0xd1, 0x09, 0xbd, 0x91, - 0x3e, 0xc4, 0xde, 0x63, 0xac, 0x5f, 0xb8, 0xfd, 0xa4, 0x6b, 0x15, 0xd2, - 0x2b, 0x7e, 0x44, 0x4c, 0x37, 0xfc, 0x07, 0x2f, 0x4f, 0x05, 0xf5, 0x8b, - 0xf4, 0x87, 0xc9, 0xe2, 0xc5, 0xfe, 0xd6, 0xcf, 0xbb, 0xeb, 0x16, 0x2f, - 0x13, 0x9a, 0xb1, 0x7e, 0x6d, 0x6a, 0x76, 0x58, 0xbf, 0xbc, 0xfa, 0x7f, - 0x09, 0x62, 0xd2, 0x62, 0x61, 0x7b, 0x1c, 0xe1, 0x49, 0xcd, 0x7c, 0x3a, - 0x19, 0x4d, 0xfb, 0xef, 0xac, 0xe9, 0x62, 0xfc, 0x1f, 0xf3, 0xae, 0x2c, - 0x5c, 0xd1, 0xeb, 0x15, 0xb9, 0xf7, 0x08, 0xa4, 0x32, 0xbb, 0xff, 0xfa, - 0x79, 0xbf, 0xdf, 0xf9, 0xdb, 0x1e, 0x76, 0x10, 0xd6, 0x2f, 0xff, 0xff, - 0xa7, 0xc4, 0xdb, 0xbf, 0x22, 0x7d, 0x6f, 0x3c, 0xf4, 0xf5, 0x21, 0xe7, - 0x16, 0x2f, 0xf7, 0x33, 0x53, 0xda, 0x63, 0xd6, 0x2f, 0xd8, 0x53, 0xd7, - 0x16, 0x2e, 0x0c, 0xeb, 0x14, 0x6a, 0x6a, 0xfa, 0x5e, 0xf4, 0x20, 0x3b, - 0x1c, 0x04, 0x51, 0x7f, 0xbf, 0x9d, 0x4e, 0x9c, 0xeb, 0x17, 0xfd, 0x3b, - 0xeb, 0x39, 0x8e, 0x35, 0x8b, 0xff, 0xcf, 0xac, 0x89, 0xf5, 0xdc, 0xe1, - 0xe4, 0x16, 0x2b, 0x48, 0x87, 0xe1, 0xcd, 0xe9, 0x3c, 0xac, 0x56, 0x8d, - 0xff, 0x88, 0xef, 0xf1, 0xc9, 0x8d, 0x7f, 0x89, 0x62, 0xfb, 0xee, 0xc0, - 0x58, 0xb4, 0x98, 0x7a, 0xde, 0x34, 0xbf, 0xf4, 0x9b, 0xa1, 0x77, 0x0e, - 0x79, 0x2b, 0x17, 0xff, 0xff, 0xfd, 0xcc, 0xf7, 0xd8, 0xfc, 0xd6, 0x9f, - 0xaf, 0x33, 0x1b, 0x99, 0x10, 0xbd, 0x21, 0x75, 0x2b, 0x17, 0xe1, 0x45, - 0x91, 0xd8, 0xb1, 0x77, 0xd9, 0x62, 0xb8, 0x8d, 0xbf, 0x42, 0x63, 0xb1, - 0x65, 0xff, 0x75, 0xc2, 0x73, 0xfb, 0x23, 0xd6, 0x2e, 0xcd, 0x2c, 0x54, - 0x9e, 0xa7, 0xcf, 0x6f, 0xef, 0x13, 0x03, 0x09, 0x62, 0xe9, 0x35, 0x62, - 0xf9, 0x81, 0x84, 0xb1, 0x51, 0x1b, 0x92, 0x18, 0xa3, 0x11, 0x0d, 0xe6, - 0x5b, 0xd2, 0x70, 0x96, 0x2a, 0x57, 0x1f, 0xc6, 0xa9, 0x90, 0xfa, 0xdd, - 0xdf, 0xa2, 0x86, 0x8c, 0x7b, 0xd0, 0x8b, 0x14, 0x29, 0xc2, 0x24, 0xbf, - 0xc2, 0xe7, 0xe7, 0xad, 0x3a, 0xc5, 0xfc, 0xdd, 0x3f, 0x73, 0x8d, 0x62, - 0xb6, 0x3e, 0x68, 0x1a, 0xdf, 0xc2, 0x0f, 0x7f, 0xbc, 0x7a, 0xc5, 0xf0, - 0x1b, 0xae, 0x2c, 0x5c, 0x10, 0x4b, 0x15, 0xc3, 0x7c, 0x11, 0x25, 0xf7, - 0xdb, 0x3e, 0x91, 0x18, 0x68, 0xaf, 0xff, 0xc1, 0xb9, 0xc5, 0xc9, 0x0d, - 0xcf, 0x31, 0x48, 0x4b, 0x17, 0x3e, 0xcb, 0x17, 0xfe, 0xdd, 0xb4, 0xdf, - 0xea, 0x19, 0xe5, 0x8a, 0x94, 0xe7, 0xb0, 0x8d, 0xe1, 0x28, 0xc6, 0xbd, - 0x96, 0x43, 0x18, 0xbd, 0x22, 0xe9, 0x62, 0xfe, 0x11, 0x3f, 0x9b, 0x75, - 0x8a, 0xdc, 0xf3, 0x00, 0x3d, 0x7e, 0x0f, 0x0e, 0xfa, 0x58, 0xbf, 0x3e, - 0xbd, 0x9b, 0xac, 0x5f, 0xb7, 0x7e, 0x7d, 0xd6, 0x2f, 0xee, 0x9f, 0x63, - 0xbf, 0x16, 0x2e, 0x3b, 0x2c, 0x5f, 0xef, 0x49, 0x6f, 0x1a, 0x00, 0xeb, - 0x15, 0x28, 0x81, 0xf9, 0x80, 0x85, 0xef, 0x7e, 0x40, 0xb1, 0x7b, 0xbb, - 0xba, 0x56, 0x2f, 0xf8, 0x7f, 0x7d, 0x3f, 0x51, 0x4a, 0xc5, 0x31, 0xef, - 0x08, 0x8e, 0xff, 0xfe, 0x71, 0x77, 0xf0, 0x93, 0x0b, 0x3c, 0x20, 0x1d, - 0xa0, 0xb1, 0x6e, 0xcb, 0x17, 0xff, 0xda, 0xd6, 0x00, 0x13, 0x0d, 0x31, - 0x4c, 0x16, 0x2a, 0x37, 0x3e, 0x3c, 0x14, 0xa9, 0x55, 0xa9, 0x84, 0x66, - 0x94, 0xf4, 0x52, 0xf0, 0xaa, 0x62, 0xf2, 0x7b, 0xe1, 0x0f, 0xa1, 0x89, - 0x7f, 0xff, 0x7f, 0x0d, 0x69, 0x78, 0xe9, 0xeb, 0xbb, 0x7f, 0xb7, 0x4b, - 0x17, 0xda, 0x7d, 0xe5, 0x62, 0xff, 0xff, 0xff, 0xe2, 0xef, 0xc7, 0x81, - 0xf7, 0xd7, 0x23, 0x51, 0x4c, 0x68, 0x13, 0xed, 0xdc, 0x68, 0x23, 0x48, - 0xef, 0x0e, 0x38, 0xc3, 0x3f, 0x1c, 0xb1, 0x7f, 0xff, 0xa7, 0x86, 0x73, - 0x0e, 0xdd, 0x7d, 0xbb, 0x9c, 0x9b, 0xa5, 0x8b, 0xfd, 0x22, 0x86, 0x79, - 0xf8, 0xb1, 0x43, 0x4f, 0xc3, 0x19, 0x3a, 0x23, 0x3c, 0x34, 0x7c, 0xcb, - 0x7b, 0xe6, 0x47, 0xac, 0x5e, 0x2d, 0xdd, 0x62, 0xf1, 0x66, 0xcb, 0x17, - 0xdc, 0xd3, 0x84, 0xb1, 0x6f, 0xc9, 0xe0, 0xb0, 0xed, 0x4a, 0x29, 0x9c, - 0x89, 0x97, 0xaf, 0xff, 0xfe, 0xf1, 0x30, 0x09, 0xe4, 0xc9, 0xed, 0x3a, - 0xe3, 0xfa, 0x4b, 0x65, 0x8b, 0xed, 0xfe, 0xfa, 0x58, 0xba, 0x7c, 0x62, - 0x25, 0x99, 0xca, 0xfc, 0xfb, 0x30, 0x89, 0x62, 0xfd, 0xa1, 0x6c, 0x2d, - 0x96, 0x2f, 0xe9, 0xf0, 0x8e, 0x2f, 0x2c, 0x5f, 0x1e, 0x5e, 0x39, 0x62, - 0xff, 0x49, 0x7d, 0x80, 0x28, 0x96, 0x2a, 0x51, 0x69, 0xf2, 0xc1, 0x17, - 0xf7, 0x12, 0xd7, 0x7d, 0xbb, 0x38, 0xf9, 0x95, 0x49, 0xb4, 0xa3, 0x58, - 0x4a, 0x5c, 0x1c, 0x73, 0x79, 0x1c, 0x91, 0xb1, 0xb6, 0xee, 0x67, 0xd4, - 0xb9, 0xb7, 0x84, 0x7c, 0x7c, 0x6f, 0xd1, 0x4e, 0xd1, 0x6a, 0x59, 0x49, - 0xe3, 0x97, 0xfc, 0xae, 0xb6, 0x87, 0xd0, 0x23, 0x3b, 0xef, 0xe1, 0x9a, - 0x53, 0xc0, 0xfc, 0x95, 0x35, 0xe9, 0x6f, 0x82, 0x94, 0xef, 0xda, 0x1e, - 0xd1, 0xd0, 0xc3, 0x0c, 0xbb, 0xba, 0x1b, 0x97, 0xff, 0xfe, 0xed, 0xb7, - 0x23, 0x5e, 0xd1, 0xa7, 0x79, 0xa8, 0x8b, 0xd8, 0x33, 0x0c, 0xfc, 0x72, - 0xc5, 0xe2, 0x8d, 0xe0, 0xb1, 0x5d, 0xf6, 0x8a, 0xcf, 0xc2, 0x2a, 0xfb, - 0x59, 0xec, 0x58, 0xbf, 0xdb, 0xfd, 0xfd, 0xc6, 0xe9, 0x62, 0xf6, 0x6b, - 0xb2, 0xc5, 0xd1, 0xb4, 0x6c, 0xb1, 0x7d, 0xc2, 0x17, 0xd6, 0x2b, 0xbc, - 0x3c, 0x5c, 0x22, 0xbf, 0x48, 0xff, 0x3c, 0x58, 0xbd, 0xa0, 0xe2, 0x58, - 0xb8, 0xff, 0x58, 0xa7, 0x37, 0x1c, 0x20, 0xbf, 0xf1, 0x00, 0xed, 0x02, - 0x9f, 0x71, 0x62, 0xec, 0xc5, 0x8b, 0xed, 0xfe, 0xe1, 0xac, 0x54, 0x68, - 0xa8, 0x2b, 0x0b, 0xcd, 0x22, 0x73, 0x68, 0xf6, 0x4d, 0x13, 0x7d, 0x81, - 0x88, 0x3b, 0xf3, 0xe0, 0xc5, 0xaf, 0xd1, 0x4c, 0x5f, 0x95, 0x8b, 0xff, - 0xc5, 0xee, 0x07, 0xe7, 0x21, 0x43, 0x38, 0xb1, 0x7f, 0xec, 0x70, 0x48, - 0x21, 0x9a, 0x95, 0x8b, 0xf3, 0x17, 0xb8, 0x05, 0x8b, 0x7c, 0x8f, 0x97, - 0xb8, 0xf6, 0xff, 0xbb, 0xb8, 0x4d, 0x11, 0x49, 0xd6, 0x2d, 0x2b, 0x14, - 0x23, 0xcd, 0x0c, 0xf2, 0xfb, 0x34, 0xd0, 0x58, 0xbf, 0xbf, 0x91, 0x31, - 0x6c, 0xb1, 0x78, 0x20, 0x82, 0x48, 0xbe, 0x87, 0xb3, 0x74, 0x88, 0xc3, - 0x43, 0x7e, 0xc1, 0xb8, 0x38, 0xba, 0x3f, 0x8a, 0x31, 0x17, 0x9a, 0x50, - 0x23, 0x7b, 0xb9, 0x05, 0x8b, 0xdc, 0x60, 0x2c, 0x54, 0x9b, 0x5e, 0x86, - 0x2d, 0xd9, 0x62, 0xd1, 0xcb, 0x15, 0xb9, 0xa9, 0x38, 0xa5, 0xfc, 0xfa, - 0x78, 0x49, 0xab, 0x15, 0x87, 0xa1, 0xe2, 0x2a, 0x95, 0x6e, 0x58, 0x54, - 0xf0, 0xb0, 0xd3, 0xb9, 0xc8, 0xda, 0x1b, 0xc0, 0x65, 0x28, 0x4d, 0x5f, - 0x1c, 0x78, 0x4b, 0x17, 0x7b, 0x8b, 0x17, 0xff, 0x87, 0x98, 0x69, 0x99, - 0xe7, 0xe7, 0xdd, 0x62, 0xff, 0x7b, 0xf3, 0xee, 0x7d, 0xd6, 0x2e, 0x86, - 0xcb, 0x17, 0xc1, 0x73, 0x03, 0x58, 0xbc, 0x68, 0xb6, 0x58, 0xb9, 0xa0, - 0xb1, 0x7e, 0x33, 0x22, 0x7d, 0x96, 0x28, 0xc4, 0x6a, 0x40, 0xd3, 0x06, - 0x4d, 0x25, 0x39, 0x07, 0x05, 0xef, 0xff, 0xdf, 0x2c, 0xea, 0x05, 0x86, - 0xbf, 0xff, 0x91, 0xeb, 0x17, 0xf6, 0xb0, 0x85, 0x3a, 0x58, 0xa5, 0x8a, - 0xd8, 0xdc, 0xf0, 0xb6, 0xe6, 0x35, 0x62, 0xfd, 0x0f, 0xc9, 0x6c, 0x91, - 0x74, 0xc1, 0x62, 0xf0, 0x1a, 0x0b, 0x15, 0xd1, 0xee, 0xfc, 0xa4, 0x31, - 0x7a, 0x64, 0x53, 0x79, 0xd6, 0xff, 0xd9, 0xd4, 0x1f, 0x08, 0xb0, 0x6b, - 0x17, 0xc7, 0x17, 0x5e, 0x58, 0xbd, 0xf9, 0xec, 0xb1, 0x74, 0x81, 0x62, - 0xb0, 0xdb, 0x06, 0x3f, 0x5b, 0x1f, 0xe7, 0x16, 0xef, 0x77, 0xf3, 0xa5, - 0x8a, 0x95, 0xc0, 0x9d, 0x86, 0x3a, 0x8c, 0x7d, 0xd6, 0x35, 0x09, 0x22, - 0x86, 0x47, 0x08, 0xbd, 0x0b, 0x91, 0x11, 0xdf, 0xdf, 0x71, 0xcb, 0x69, - 0x62, 0xf7, 0x70, 0xb6, 0x58, 0xad, 0xcf, 0x3f, 0xb8, 0xb6, 0xff, 0xe8, - 0x39, 0x03, 0x59, 0xda, 0x4b, 0xcb, 0x17, 0x9f, 0x8e, 0xb1, 0x67, 0x58, - 0xbe, 0x60, 0xd8, 0x6b, 0x17, 0xa7, 0x46, 0xac, 0x5a, 0x18, 0x8b, 0x3f, - 0xa2, 0xb0, 0xe0, 0x84, 0x42, 0x23, 0xbf, 0xff, 0xc3, 0xfe, 0x7b, 0xcc, - 0x5b, 0xf2, 0x74, 0xd1, 0x3f, 0xd6, 0x2f, 0xc1, 0xff, 0xf9, 0x12, 0xc5, - 0xf0, 0x7f, 0x7f, 0x2c, 0x51, 0x87, 0x9f, 0xc2, 0xba, 0x1a, 0x7f, 0x9d, - 0x43, 0x65, 0xd3, 0xc1, 0x0b, 0x1b, 0xe0, 0xe7, 0x40, 0x58, 0xbf, 0x4e, - 0x76, 0x91, 0xac, 0x51, 0xa7, 0x9b, 0xb9, 0x25, 0xff, 0xf7, 0x5e, 0x70, - 0x83, 0xf3, 0x90, 0xa1, 0x9c, 0x58, 0xbf, 0xe2, 0x90, 0xb8, 0xe5, 0xd4, - 0x16, 0x2f, 0xff, 0xfd, 0xc0, 0x3e, 0x87, 0x85, 0xf7, 0xdf, 0xef, 0xe3, - 0x64, 0xa0, 0xb1, 0x7b, 0xbf, 0x8e, 0x75, 0x8b, 0xa7, 0x75, 0x8a, 0xd2, - 0x6b, 0x7f, 0x24, 0x25, 0x3f, 0x1d, 0x09, 0xb7, 0xb1, 0x2d, 0xff, 0x11, - 0xbc, 0x7e, 0xd2, 0x5e, 0x58, 0xbf, 0xfb, 0xed, 0x16, 0x0f, 0xef, 0xdb, - 0x22, 0x58, 0xa9, 0x44, 0x1b, 0x9d, 0xde, 0x0e, 0x63, 0xd6, 0x2e, 0xfb, - 0xac, 0x58, 0x0b, 0x14, 0x69, 0xa9, 0x21, 0x7a, 0xd8, 0xfa, 0xdd, 0x2a, - 0xf1, 0x0b, 0xcb, 0x17, 0xfb, 0xef, 0x20, 0xdb, 0x86, 0xac, 0x54, 0x47, - 0xa7, 0xe1, 0xdb, 0xf1, 0x48, 0x58, 0x4b, 0x17, 0xfd, 0xfe, 0xa4, 0xd8, - 0xa1, 0x31, 0xeb, 0x16, 0xe0, 0xcf, 0x9f, 0x09, 0xeb, 0x49, 0x93, 0x13, - 0xaf, 0xa1, 0x15, 0x4b, 0x17, 0xf0, 0x7e, 0xe3, 0xe1, 0xab, 0x17, 0xe8, - 0x69, 0xe4, 0xeb, 0x17, 0xfb, 0x7f, 0x33, 0xeb, 0x58, 0xb1, 0x78, 0x3e, - 0x82, 0x58, 0xad, 0x91, 0x72, 0x30, 0xce, 0x8c, 0x34, 0x51, 0xc3, 0x4a, - 0x96, 0x44, 0xc6, 0x4a, 0xe0, 0x78, 0xfc, 0x3f, 0x0d, 0xc6, 0x8e, 0xc8, - 0x50, 0xee, 0xbd, 0xfe, 0xe1, 0xac, 0x5e, 0x70, 0x4a, 0xc5, 0xf4, 0x33, - 0xce, 0xb1, 0x7d, 0x9a, 0x73, 0xac, 0x5e, 0x04, 0x81, 0x62, 0x8c, 0x3f, - 0xde, 0x87, 0x38, 0x44, 0x19, 0x15, 0xff, 0xe8, 0x78, 0x5f, 0xd4, 0x85, - 0x07, 0x06, 0x2c, 0x5c, 0xc7, 0x58, 0xad, 0xd1, 0x44, 0x47, 0xfd, 0x93, - 0x2f, 0xff, 0xde, 0x6d, 0x63, 0x83, 0x99, 0xf7, 0xd7, 0xd9, 0x62, 0xff, - 0xbe, 0xfa, 0x88, 0xa6, 0x7a, 0x58, 0xbf, 0xcf, 0xc6, 0x6f, 0x0a, 0x56, - 0x2e, 0xdf, 0x16, 0x2f, 0x69, 0xb8, 0xb1, 0x7a, 0x48, 0x6b, 0x17, 0xee, - 0xb9, 0x16, 0x79, 0x62, 0xb1, 0x36, 0xee, 0x8c, 0x9d, 0x52, 0x3c, 0xeb, - 0x46, 0x47, 0x18, 0xf8, 0xe9, 0x0e, 0x5f, 0xbe, 0xfa, 0x91, 0xac, 0x5f, - 0x19, 0xc0, 0xfe, 0xb1, 0x7f, 0x3f, 0x89, 0x81, 0xc5, 0x8b, 0xf4, 0x9f, - 0xd9, 0xf5, 0x8b, 0xfd, 0x3d, 0xd8, 0x43, 0xfc, 0xac, 0x5d, 0x9b, 0xac, - 0x5f, 0x00, 0x52, 0x75, 0x8a, 0xc3, 0x76, 0xe3, 0x17, 0xa4, 0xb6, 0x58, - 0xbf, 0x08, 0x2f, 0xcf, 0x65, 0x8b, 0xff, 0xe2, 0xf4, 0x59, 0xac, 0x33, - 0xc0, 0x91, 0xca, 0xc5, 0xe9, 0x28, 0x96, 0x28, 0x69, 0xa3, 0x44, 0xe1, - 0xa1, 0xff, 0x8e, 0xb1, 0x60, 0x6a, 0x37, 0xdc, 0x79, 0xdd, 0x62, 0xfb, - 0x3a, 0xf3, 0xac, 0x5f, 0xfd, 0x16, 0x6b, 0x18, 0xf3, 0xf7, 0x1a, 0xc5, - 0x62, 0x22, 0xbe, 0x47, 0xe2, 0x3b, 0x62, 0xc5, 0xf3, 0x16, 0x01, 0x62, - 0xfc, 0x7c, 0xff, 0x4c, 0xb1, 0x51, 0x1e, 0xd9, 0xc4, 0x44, 0x43, 0x7e, - 0xf0, 0xa2, 0x0e, 0x56, 0x2e, 0x61, 0xac, 0x5b, 0x20, 0x78, 0x5a, 0x2b, - 0xa3, 0x55, 0xd0, 0xee, 0x5b, 0xf8, 0xdb, 0x8a, 0x1c, 0x7c, 0x84, 0x57, - 0x67, 0x2b, 0xff, 0xce, 0x32, 0x6e, 0x8b, 0x3d, 0x8e, 0x05, 0x8b, 0xed, - 0xb6, 0x68, 0xf5, 0x8b, 0xed, 0xc6, 0x2d, 0x96, 0x2f, 0xfa, 0x02, 0x2f, - 0x3f, 0xdc, 0xeb, 0x17, 0xa1, 0xc1, 0x2c, 0x5c, 0xd0, 0x58, 0xbf, 0x79, - 0xff, 0x02, 0x58, 0xa3, 0x9b, 0xf2, 0x17, 0xbf, 0xff, 0xff, 0x7e, 0x73, - 0x68, 0x3f, 0xb9, 0x3a, 0xc8, 0xc7, 0x04, 0xcf, 0x69, 0x92, 0xdd, 0x62, - 0xde, 0xc4, 0xd8, 0xa2, 0x26, 0xf9, 0xcb, 0x2e, 0xf0, 0x82, 0xf7, 0x69, - 0x8f, 0x58, 0xbc, 0x10, 0x41, 0x2c, 0x5f, 0xfd, 0xd7, 0x8b, 0x36, 0x3e, - 0x1f, 0x09, 0x22, 0x30, 0xd0, 0xd8, 0xf2, 0x89, 0xbc, 0x43, 0xb8, 0x20, - 0x2c, 0x5f, 0x75, 0xc9, 0x82, 0xc5, 0x4a, 0x69, 0xef, 0x0e, 0xb6, 0x27, - 0x00, 0xcd, 0xf6, 0xd9, 0xf6, 0x58, 0xbd, 0xb4, 0x0e, 0xb1, 0x68, 0x2c, - 0x5f, 0xf9, 0xf8, 0x03, 0x8b, 0x9c, 0x90, 0x2c, 0x5f, 0xed, 0x13, 0x05, - 0x9f, 0x65, 0x8b, 0xe6, 0xd7, 0xf1, 0x62, 0xff, 0x89, 0xb6, 0xe6, 0x7d, - 0xa3, 0xd6, 0x2f, 0xbd, 0x3e, 0xe6, 0x1e, 0xf3, 0x11, 0x5f, 0xbe, 0xda, - 0xcd, 0x2c, 0x5f, 0xe7, 0xee, 0x11, 0xf6, 0xef, 0x76, 0x58, 0xbf, 0xef, - 0x38, 0x26, 0x19, 0xd7, 0x96, 0x2f, 0xf9, 0xfa, 0x2c, 0xf7, 0xdc, 0x25, - 0x8a, 0x93, 0xf4, 0xd1, 0xd5, 0xff, 0xdb, 0x10, 0xb6, 0x17, 0x3d, 0xcc, - 0x09, 0x62, 0xfd, 0xd6, 0xee, 0x5b, 0x2c, 0x5f, 0xef, 0xcc, 0x22, 0x83, - 0x12, 0xc5, 0x78, 0xf7, 0xc3, 0x2b, 0xa9, 0x46, 0x5b, 0x42, 0xa2, 0xe1, - 0x32, 0xc5, 0x18, 0xac, 0xf7, 0x61, 0xf8, 0x09, 0x0d, 0x03, 0x21, 0x23, - 0xb9, 0xbc, 0x45, 0x1a, 0x85, 0x9f, 0xe1, 0xd8, 0x44, 0xd7, 0xfc, 0x02, - 0xcd, 0xdf, 0x3d, 0xc5, 0x8b, 0xde, 0x91, 0xac, 0x5f, 0x43, 0xc2, 0x1a, - 0xc5, 0xfa, 0x5e, 0x0d, 0xc5, 0x8b, 0xf9, 0x83, 0xc8, 0xa4, 0xeb, 0x15, - 0x28, 0x97, 0xe8, 0x77, 0x44, 0x82, 0x27, 0xbf, 0xb3, 0xdf, 0x14, 0xf4, - 0xb1, 0x7d, 0xe7, 0xd6, 0x2c, 0x5f, 0x75, 0xc7, 0x34, 0x67, 0xa3, 0x85, - 0xf5, 0xb2, 0xa3, 0x6d, 0x42, 0x78, 0xa1, 0xa1, 0xe8, 0x47, 0x5f, 0xdc, - 0x2c, 0xed, 0xf7, 0x58, 0xbf, 0xfd, 0x0c, 0x27, 0x1e, 0x16, 0x1b, 0x3c, - 0x58, 0xbd, 0xbe, 0x71, 0x62, 0xb1, 0x12, 0xbe, 0x2f, 0x12, 0x45, 0xff, - 0x8f, 0x3d, 0x16, 0x03, 0x93, 0x1e, 0xb1, 0x7f, 0xbf, 0x9b, 0x67, 0xdf, - 0xeb, 0x15, 0xa4, 0x52, 0x9c, 0xbf, 0xe8, 0x57, 0xf6, 0x81, 0x3b, 0xe1, - 0xd6, 0x2f, 0xf0, 0xcb, 0x3b, 0x3e, 0x99, 0x62, 0xa3, 0x65, 0xfb, 0x19, - 0x9d, 0x96, 0x78, 0xe2, 0x18, 0xc0, 0x45, 0xf7, 0xd1, 0xef, 0x9d, 0x2c, - 0x5c, 0xdb, 0xac, 0x56, 0xc6, 0xf9, 0x89, 0xaf, 0xcf, 0xc9, 0xd8, 0xeb, - 0x8b, 0xf4, 0xbf, 0x4b, 0x68, 0x02, 0x5c, 0x5f, 0xa5, 0xcd, 0x05, 0xc5, - 0xfa, 0x5f, 0x0a, 0x19, 0xc5, 0xc5, 0xfa, 0x50, 0xcf, 0x50, 0x89, 0x2f, - 0xd3, 0x9c, 0xc2, 0x5c, 0x5f, 0xa5, 0x2e, 0x2f, 0xd2, 0xe6, 0xf2, 0xe2, - 0xfd, 0x0e, 0x5c, 0xda, 0x04, 0x7f, 0xe2, 0x4c, 0xbe, 0xc8, 0xe7, 0x02, - 0xe2, 0xfd, 0x29, 0x71, 0x7e, 0x97, 0x02, 0x57, 0x17, 0xe9, 0x7f, 0xd8, - 0x06, 0xd6, 0x76, 0xc1, 0xae, 0x2f, 0xd2, 0xfe, 0xcf, 0xbf, 0x05, 0xb2, - 0xe2, 0xfd, 0x28, 0x08, 0xa7, 0x22, 0x4e, 0x23, 0xdf, 0x6b, 0x69, 0xf2, - 0xe2, 0xfd, 0x29, 0x71, 0x7e, 0x98, 0x6c, 0x6e, 0x08, 0x25, 0xc5, 0xfa, - 0x54, 0x15, 0x93, 0x8c, 0xdb, 0x21, 0x13, 0xd4, 0x28, 0x34, 0x4e, 0x73, - 0x2e, 0x43, 0x03, 0xcc, 0x01, 0x14, 0x5d, 0x26, 0xa6, 0x2f, 0xd1, 0x18, - 0x89, 0x0b, 0xfe, 0xda, 0x7b, 0x63, 0xeb, 0x36, 0x58, 0xbf, 0xf9, 0xbf, - 0xbf, 0xdc, 0x9b, 0x4d, 0x05, 0x8a, 0x82, 0x2e, 0xf4, 0x77, 0xe3, 0xcb, - 0xfa, 0x70, 0x39, 0x84, 0x16, 0x2f, 0xf7, 0x32, 0x10, 0x9f, 0x74, 0xb1, - 0x7f, 0xd3, 0xa0, 0x79, 0xd8, 0xd8, 0x2c, 0x56, 0x23, 0x34, 0x8c, 0x38, - 0x5c, 0x19, 0xad, 0xff, 0xb3, 0x71, 0xe6, 0x82, 0x6f, 0xc4, 0xb1, 0x74, - 0x86, 0xb1, 0x4b, 0x17, 0xfe, 0x2c, 0x8a, 0x76, 0x03, 0x75, 0xc5, 0x8a, - 0x93, 0xcd, 0xe0, 0x65, 0x24, 0x5f, 0x9e, 0x26, 0x68, 0x2c, 0x5a, 0x1b, - 0x1b, 0x4c, 0x0c, 0xbe, 0x89, 0x9b, 0x4b, 0x15, 0xb2, 0x70, 0x5d, 0x1e, - 0x69, 0x0b, 0xec, 0xa4, 0xab, 0xdc, 0x4f, 0x73, 0xec, 0xb1, 0x7f, 0x4f, - 0xc9, 0x9f, 0x4b, 0x15, 0xa5, 0xf8, 0x26, 0x9e, 0xe2, 0xf2, 0xe7, 0x61, - 0x8b, 0xe3, 0xf7, 0xdc, 0x22, 0x58, 0xbf, 0xb1, 0xf5, 0x9e, 0x95, 0x8b, - 0x1a, 0xb1, 0x44, 0x6f, 0xe3, 0x8b, 0x2f, 0x86, 0x36, 0x3a, 0xc5, 0xfe, - 0xcf, 0x1b, 0x3d, 0xb0, 0x6b, 0x15, 0x87, 0xb2, 0x44, 0x77, 0xe2, 0x9f, - 0x8b, 0x4b, 0x17, 0xf3, 0x85, 0x11, 0x48, 0x16, 0x2b, 0x87, 0xaf, 0xe2, - 0x8b, 0xfb, 0x85, 0x9e, 0xc0, 0x2c, 0x50, 0xd1, 0x8d, 0xd3, 0xb9, 0xc8, - 0xaf, 0xf1, 0x67, 0x6f, 0xf4, 0xd1, 0xeb, 0x17, 0xf7, 0x77, 0x85, 0xd4, - 0x38, 0xb1, 0x51, 0x1f, 0x68, 0x47, 0x37, 0xf7, 0xb3, 0xf3, 0xa0, 0x2c, - 0x5f, 0x69, 0xf3, 0xb2, 0xc5, 0xfb, 0x39, 0x9d, 0x79, 0x62, 0xf8, 0xf2, - 0x46, 0x98, 0x79, 0xac, 0x49, 0x7f, 0xda, 0x73, 0xf0, 0x39, 0xc8, 0x96, - 0x2f, 0xfb, 0x79, 0x00, 0xc4, 0xda, 0x82, 0xc5, 0xff, 0x99, 0xb6, 0xc3, - 0xb1, 0x75, 0x05, 0x8b, 0xcc, 0x6f, 0x30, 0xfe, 0xa2, 0x3b, 0xbb, 0x9b, - 0xac, 0x5f, 0xdf, 0xc3, 0x87, 0x20, 0x58, 0xa7, 0x3c, 0x8f, 0x0c, 0xdf, - 0xbb, 0xc3, 0x74, 0xdb, 0xac, 0x5f, 0x72, 0x73, 0xcb, 0x17, 0xfe, 0x67, - 0xf4, 0x05, 0x25, 0x30, 0x58, 0xbc, 0xdd, 0x4a, 0xc5, 0xbe, 0x62, 0x33, - 0x63, 0x51, 0x0e, 0x18, 0x7c, 0x88, 0x33, 0xdb, 0xff, 0xd3, 0xcc, 0x3c, - 0xee, 0xd8, 0x37, 0xec, 0xb1, 0x58, 0x8a, 0x22, 0x57, 0xbf, 0x67, 0xf3, - 0xaf, 0x2c, 0x58, 0x23, 0x15, 0xcf, 0x63, 0xde, 0x8e, 0x4a, 0x16, 0xbe, - 0x8f, 0xae, 0x38, 0x86, 0x8c, 0x5e, 0x0f, 0x98, 0xd0, 0xb2, 0x13, 0xcd, - 0x2f, 0x0a, 0xf9, 0xcd, 0x70, 0x96, 0x2f, 0xbd, 0xfc, 0xd9, 0x62, 0x8e, - 0x79, 0x04, 0x49, 0x7f, 0xda, 0xce, 0x8b, 0xa7, 0xdb, 0x4b, 0x14, 0xb1, - 0x61, 0x80, 0xf2, 0x02, 0x3c, 0xa5, 0x8b, 0xe6, 0x62, 0xdd, 0x62, 0xe1, - 0x87, 0xb1, 0xae, 0xec, 0x19, 0x52, 0x8f, 0x1c, 0x69, 0x75, 0x7b, 0xc7, - 0x06, 0x96, 0x2e, 0xf1, 0x2c, 0x5f, 0x86, 0xd0, 0xfe, 0x2c, 0x5e, 0x20, - 0x6e, 0xb1, 0x43, 0x3d, 0xdc, 0x17, 0xe1, 0x45, 0xff, 0xee, 0xbd, 0xf7, - 0x0c, 0x79, 0x85, 0xc7, 0x58, 0xbf, 0xff, 0x43, 0x53, 0xd9, 0xa2, 0x91, - 0xfe, 0x4e, 0xd1, 0x2c, 0x5f, 0xee, 0xe6, 0xe3, 0xf2, 0x2c, 0x58, 0xbf, - 0x89, 0x81, 0xc3, 0xca, 0xc5, 0xff, 0xe9, 0xd0, 0x33, 0xb3, 0xfa, 0x70, - 0xa0, 0xb1, 0x46, 0x27, 0xf7, 0x18, 0xf7, 0x85, 0xdd, 0x25, 0xe9, 0x67, - 0xc6, 0xe1, 0x96, 0xdb, 0xcb, 0x17, 0xec, 0xe7, 0x0f, 0xd2, 0xc5, 0xba, - 0x30, 0xde, 0x48, 0x95, 0xe9, 0x1c, 0xac, 0x54, 0x9e, 0x21, 0xca, 0x2f, - 0x39, 0x41, 0x62, 0xa5, 0xd9, 0xfd, 0x6c, 0xfb, 0x0a, 0x66, 0x18, 0xdd, - 0x32, 0x55, 0x76, 0xee, 0x7d, 0x14, 0x3c, 0xbc, 0x78, 0xf6, 0xc8, 0x92, - 0x35, 0x2b, 0x67, 0xf3, 0xfe, 0x2d, 0x48, 0x1d, 0x02, 0x49, 0x4f, 0x3d, - 0x72, 0x38, 0x91, 0x4a, 0x28, 0x0a, 0x1d, 0x5d, 0xc4, 0x37, 0xef, 0x9e, - 0x63, 0x4c, 0x58, 0xbd, 0xbe, 0xcc, 0xb1, 0x74, 0x9d, 0x62, 0xfe, 0x9f, - 0x7e, 0x7b, 0x62, 0xc5, 0x0c, 0xf1, 0xb7, 0x17, 0xbb, 0x6c, 0x58, 0xbf, - 0xb3, 0xdf, 0x13, 0x41, 0x62, 0xdb, 0x98, 0x8c, 0xec, 0x65, 0x01, 0x19, - 0x0c, 0x52, 0xc5, 0x9b, 0x47, 0x9e, 0x74, 0x3b, 0xfb, 0x0f, 0x13, 0x34, - 0x16, 0x2f, 0xe9, 0x3b, 0xee, 0xe3, 0x58, 0xbf, 0xff, 0x9b, 0xf3, 0x08, - 0xcc, 0x04, 0xc3, 0x83, 0xfc, 0xe9, 0x62, 0xce, 0x34, 0x5d, 0x6e, 0x5d, - 0xf2, 0xeb, 0xdb, 0xee, 0x25, 0x8b, 0xfe, 0x9e, 0x8a, 0x7f, 0xf1, 0x6e, - 0xb1, 0x58, 0x7b, 0x66, 0x90, 0x5f, 0xfa, 0x70, 0xb2, 0x0f, 0xfc, 0xec, - 0xb1, 0x7f, 0xf1, 0x30, 0x39, 0xac, 0xdf, 0xf9, 0xd2, 0xc5, 0x69, 0x10, - 0x9e, 0x3e, 0xbe, 0xcd, 0x39, 0xab, 0x17, 0xef, 0xbf, 0x26, 0x0b, 0x17, - 0xff, 0x98, 0xde, 0x67, 0x69, 0xeb, 0xdc, 0x11, 0xd6, 0x29, 0x8f, 0xdc, - 0x8a, 0x28, 0x68, 0xdd, 0x39, 0x19, 0x42, 0x6a, 0xf1, 0xe3, 0xe5, 0x62, - 0xff, 0x72, 0x4b, 0xdf, 0x90, 0xd6, 0x2a, 0x4f, 0x53, 0xc4, 0x17, 0xfc, - 0x6b, 0xe8, 0x3d, 0x3c, 0x8d, 0x62, 0xe2, 0xef, 0xd6, 0x2f, 0xa7, 0xee, - 0x6e, 0x1e, 0xbe, 0x8e, 0xef, 0xfd, 0x87, 0x68, 0x47, 0x08, 0x6f, 0xf5, - 0x8a, 0xf9, 0xfd, 0x11, 0xc5, 0xfb, 0xde, 0x68, 0x71, 0x62, 0xff, 0x14, - 0xfb, 0xa8, 0x98, 0xeb, 0x17, 0xef, 0x0b, 0xd8, 0x35, 0x8b, 0x62, 0xc5, - 0x31, 0xba, 0xec, 0x53, 0x7f, 0x9f, 0x98, 0x5b, 0x05, 0x12, 0xc5, 0xfe, - 0xe6, 0x19, 0xd4, 0x33, 0xcb, 0x17, 0x7f, 0x06, 0x7d, 0x9c, 0x36, 0xa8, - 0x26, 0xe8, 0x32, 0x13, 0x94, 0x93, 0x7f, 0xa1, 0x1d, 0x7e, 0xd0, 0x1b, - 0x00, 0xb1, 0x7f, 0x67, 0x73, 0xf9, 0xe0, 0xb1, 0x7d, 0xf9, 0xdb, 0x98, - 0x7b, 0x1f, 0x28, 0xbf, 0xf7, 0xe5, 0x9f, 0xee, 0x76, 0x1a, 0xc5, 0xef, - 0xb4, 0x16, 0x2f, 0xf8, 0x3d, 0x7a, 0x0e, 0x5e, 0xe2, 0xc5, 0x98, 0xd3, - 0xd8, 0xf8, 0xed, 0x3a, 0x2f, 0x4a, 0x12, 0xb7, 0xcf, 0xc0, 0xce, 0xb1, - 0x7f, 0x48, 0xb7, 0xfc, 0xe9, 0x62, 0xff, 0xef, 0x6f, 0xf7, 0x2c, 0xf7, - 0x24, 0xeb, 0x15, 0xb9, 0xfa, 0x74, 0x5f, 0x7d, 0x3b, 0xbc, 0x16, 0x2f, - 0x8e, 0x59, 0xec, 0x3c, 0x72, 0x24, 0xbf, 0xff, 0x4f, 0xcb, 0x3d, 0xf7, - 0x30, 0xf9, 0xe6, 0xf2, 0xc5, 0xcf, 0xd9, 0x62, 0xbc, 0x7d, 0xdd, 0xca, - 0xb4, 0xb1, 0x7f, 0xc5, 0x80, 0xfc, 0xb6, 0xb1, 0x62, 0x9c, 0xfa, 0x34, - 0x4b, 0xc0, 0xcb, 0xf7, 0xbe, 0xfa, 0x0d, 0x62, 0xff, 0x9a, 0x3f, 0x9e, - 0x29, 0x0c, 0xeb, 0x15, 0x87, 0xce, 0x22, 0xaa, 0xdd, 0x55, 0x0b, 0xc3, - 0x7d, 0xa3, 0x0c, 0x28, 0x4a, 0xdf, 0xb7, 0xc3, 0xcf, 0x16, 0x2f, 0x04, - 0x10, 0x49, 0x17, 0x83, 0x90, 0x24, 0x46, 0x1a, 0x1b, 0xfd, 0xd9, 0xb0, - 0xa1, 0x84, 0xb1, 0x7f, 0xcd, 0x00, 0xf5, 0x9d, 0x9b, 0x4b, 0x16, 0xd2, - 0xc5, 0xfe, 0x29, 0x81, 0xba, 0xce, 0x2c, 0x5f, 0xf9, 0xe7, 0x50, 0x35, - 0xf8, 0x1f, 0xd6, 0x2f, 0xfc, 0x45, 0x9b, 0x45, 0x09, 0xd6, 0xcb, 0x17, - 0xbf, 0x90, 0x94, 0x64, 0x60, 0x91, 0xcd, 0x03, 0x41, 0xa7, 0x4e, 0x10, - 0x8c, 0xfd, 0x18, 0x25, 0xff, 0xfc, 0xf2, 0x40, 0x04, 0xc1, 0xfd, 0x87, - 0xe3, 0x41, 0x62, 0xff, 0xf8, 0xe5, 0x31, 0x43, 0x3f, 0xf7, 0xce, 0x89, - 0x62, 0xff, 0xde, 0x92, 0xcd, 0x9f, 0x58, 0x35, 0x8b, 0xdf, 0x6d, 0x2c, - 0x5f, 0xf9, 0xce, 0xfa, 0x2c, 0xf0, 0x99, 0x62, 0xa4, 0xf6, 0xbc, 0x3b, - 0x73, 0x8f, 0x11, 0x73, 0xc8, 0x4c, 0x5d, 0xc0, 0x96, 0x2f, 0xfb, 0xee, - 0x0e, 0xa1, 0xe7, 0x02, 0xc5, 0xfe, 0x28, 0x39, 0xf3, 0xaf, 0x2c, 0x5f, - 0xb3, 0x41, 0xcc, 0x16, 0x2f, 0xba, 0xdd, 0xc9, 0x62, 0x86, 0x8d, 0x5c, - 0x19, 0x63, 0xb2, 0x34, 0xf1, 0x4d, 0x2c, 0x5a, 0x60, 0x7a, 0x7d, 0xfa, - 0x3d, 0x6e, 0x9c, 0x30, 0x23, 0x5a, 0xbf, 0x19, 0x3b, 0xe6, 0x96, 0x2f, - 0xf6, 0x6b, 0x1b, 0x7e, 0x41, 0x62, 0xff, 0xff, 0x9f, 0xdf, 0x68, 0x46, - 0x67, 0xdb, 0xa0, 0x78, 0xa4, 0xfc, 0x58, 0xbf, 0xf1, 0x92, 0x42, 0x3c, - 0x85, 0x3c, 0x58, 0xb6, 0x0d, 0x30, 0x83, 0x95, 0x7c, 0xd0, 0x9a, 0xaf, - 0xfb, 0xcc, 0x59, 0xcd, 0x4f, 0x16, 0x2f, 0xa1, 0x20, 0xe9, 0x62, 0xff, - 0xf6, 0x05, 0x9d, 0x9f, 0x85, 0x87, 0x3b, 0xac, 0x5f, 0xff, 0xfd, 0xf9, - 0x21, 0x73, 0xef, 0xef, 0xe1, 0x7b, 0xe5, 0x9d, 0xb3, 0x8b, 0x17, 0x0c, - 0x6b, 0x17, 0xe9, 0x83, 0xf8, 0xeb, 0x15, 0x04, 0x59, 0x1d, 0xc8, 0x86, - 0x2f, 0xff, 0xf3, 0x3f, 0xa6, 0x0f, 0xad, 0x84, 0x08, 0xe8, 0xec, 0x1b, - 0xac, 0x5f, 0xff, 0xf3, 0x76, 0x7e, 0xc4, 0x2e, 0x06, 0x52, 0x3f, 0xb4, - 0x33, 0x8b, 0x17, 0xf0, 0x24, 0xb3, 0xaf, 0x2c, 0x5c, 0xc0, 0x31, 0x52, - 0x7e, 0xc4, 0x99, 0x0f, 0xdf, 0x97, 0x93, 0x38, 0x6d, 0x57, 0xff, 0x83, - 0x28, 0x8d, 0x61, 0xff, 0x37, 0xcd, 0x2c, 0x56, 0x2f, 0xa1, 0xbc, 0xa8, - 0xff, 0xc6, 0x66, 0xc8, 0x45, 0x2a, 0x1f, 0x8d, 0x57, 0xbd, 0x07, 0x58, - 0xbf, 0xef, 0x94, 0xc3, 0xec, 0x4e, 0xb1, 0x74, 0xe9, 0x62, 0x9c, 0xf3, - 0xbb, 0x1b, 0xdf, 0xfb, 0xf9, 0xb7, 0x5c, 0xcd, 0xd8, 0x35, 0x8b, 0xb3, - 0xeb, 0x14, 0xe7, 0xb4, 0x24, 0x3a, 0xd9, 0xb5, 0xd7, 0x84, 0x38, 0x47, - 0x09, 0x1c, 0x8e, 0x0f, 0xa8, 0x44, 0x3c, 0xa6, 0x68, 0xa1, 0x4e, 0x78, - 0x7b, 0x7e, 0x56, 0x3b, 0x26, 0x81, 0x28, 0xa3, 0xb5, 0xe1, 0xaf, 0xa7, - 0xe7, 0x04, 0xd5, 0xd9, 0xac, 0x27, 0xdb, 0x9f, 0x65, 0x8b, 0xfc, 0x5b, - 0x8d, 0xfb, 0x48, 0xd6, 0x28, 0x67, 0x9c, 0x21, 0x8b, 0xfd, 0xc7, 0x3b, - 0x69, 0xb8, 0xb1, 0x7e, 0xf7, 0xb0, 0xb6, 0x58, 0xbf, 0xfc, 0xfa, 0xfc, - 0xbf, 0xb8, 0xe5, 0xd4, 0x16, 0x2f, 0xfc, 0xe1, 0x6b, 0x0e, 0x76, 0x2f, - 0x2c, 0x54, 0xa2, 0xcb, 0x0a, 0x49, 0x2a, 0xfe, 0xcd, 0xfd, 0x1d, 0x9f, - 0x58, 0xa5, 0x8a, 0xf9, 0xbe, 0x01, 0x95, 0xff, 0xd1, 0x7e, 0x76, 0x0f, - 0xdf, 0x13, 0x41, 0x62, 0xf1, 0xe7, 0xeb, 0x17, 0xd3, 0xbe, 0x1d, 0x62, - 0xb0, 0xf0, 0x3e, 0x3b, 0x4b, 0x14, 0x46, 0xb7, 0xb8, 0x86, 0xfa, 0x18, - 0xc7, 0x58, 0xbf, 0x1a, 0x28, 0x30, 0xd6, 0x2f, 0xf4, 0xc7, 0x99, 0xf6, - 0xcd, 0x2c, 0x5f, 0xfd, 0xe2, 0x9f, 0x3e, 0x11, 0x93, 0xd9, 0x62, 0xe7, - 0xdd, 0x62, 0xf6, 0x6a, 0x56, 0x2f, 0xbf, 0xfc, 0xe9, 0x62, 0xec, 0x3c, - 0x71, 0xe0, 0x06, 0x39, 0x58, 0x98, 0x2b, 0x9b, 0xfd, 0x14, 0x96, 0x2d, - 0x1e, 0xb1, 0x68, 0x96, 0x2c, 0x75, 0x8a, 0x73, 0x4a, 0xc2, 0x74, 0x69, - 0xec, 0x9c, 0xea, 0xff, 0xff, 0x8c, 0x26, 0x34, 0xcf, 0x00, 0x32, 0x87, - 0xf3, 0x9e, 0xcd, 0x2c, 0x5f, 0xb0, 0x1c, 0x98, 0x2c, 0x5f, 0x9c, 0xe3, - 0x1e, 0x2c, 0x58, 0x10, 0x45, 0xd9, 0x35, 0xc7, 0x14, 0x5f, 0xf7, 0xbf, - 0x9c, 0x33, 0xcf, 0xb2, 0xc5, 0xfd, 0x91, 0x66, 0x86, 0xeb, 0x15, 0x28, - 0xa2, 0x73, 0x82, 0x3c, 0xbf, 0xf4, 0x97, 0x50, 0xe0, 0x7b, 0x37, 0x96, - 0x2f, 0xf8, 0x9c, 0x5d, 0xff, 0x23, 0xa7, 0xcb, 0x17, 0xfb, 0x02, 0xea, - 0x1e, 0x90, 0x96, 0x2f, 0xec, 0x68, 0xbf, 0x31, 0xeb, 0x15, 0x27, 0xd0, - 0x03, 0x7b, 0xfc, 0x0d, 0x3e, 0x7c, 0x5c, 0x58, 0xbd, 0x9d, 0x1d, 0x62, - 0xfe, 0xc0, 0x77, 0x79, 0xce, 0xb1, 0x52, 0x88, 0x32, 0x34, 0xf0, 0xf5, - 0xf4, 0x76, 0x6a, 0x56, 0x2f, 0xff, 0xf7, 0xe4, 0x84, 0xde, 0x98, 0x3f, - 0xd8, 0xf3, 0xee, 0x2c, 0x5e, 0x35, 0xb4, 0xb1, 0x6f, 0x0c, 0xff, 0x7c, - 0xbf, 0x4b, 0x16, 0x90, 0x23, 0x58, 0xa1, 0x45, 0xd8, 0xa2, 0xff, 0xe6, - 0xf6, 0x84, 0x6e, 0x79, 0xc1, 0xc5, 0x8b, 0xf8, 0x19, 0xcf, 0xe7, 0x16, - 0x2e, 0xd0, 0x16, 0x29, 0xcf, 0x19, 0x8b, 0xaf, 0x63, 0x8d, 0x62, 0xa5, - 0x92, 0xe5, 0xb4, 0x39, 0x60, 0xd6, 0x32, 0x1c, 0x85, 0xb7, 0x44, 0x6e, - 0x45, 0x14, 0x65, 0xe7, 0x84, 0xa7, 0xe3, 0x80, 0x01, 0x69, 0x21, 0x72, - 0x15, 0x3e, 0x85, 0x27, 0x68, 0xc1, 0x02, 0x3b, 0x8e, 0x84, 0x67, 0x71, - 0x05, 0xf7, 0xf3, 0xa8, 0x2c, 0x5f, 0x67, 0x83, 0xd9, 0x62, 0xfc, 0x52, - 0xfd, 0x41, 0x62, 0xf0, 0x41, 0x04, 0x99, 0x04, 0x05, 0xf6, 0xec, 0xdb, - 0xa6, 0x41, 0x01, 0x18, 0x6b, 0xef, 0xf4, 0xed, 0xd4, 0x04, 0xde, 0x58, - 0xbe, 0x6d, 0x60, 0x4b, 0x15, 0xa4, 0x4f, 0x71, 0x17, 0xb1, 0xb5, 0xe0, - 0x82, 0x09, 0x32, 0x07, 0x8a, 0x4c, 0x81, 0xe2, 0x30, 0xd7, 0xdf, 0xde, - 0x63, 0x9e, 0x4e, 0xb1, 0x7e, 0x6f, 0x31, 0x01, 0x62, 0xfe, 0xcf, 0x7c, - 0x4d, 0x05, 0x8b, 0xc1, 0x04, 0x12, 0xc5, 0xee, 0x49, 0xa9, 0x11, 0x86, - 0x86, 0xfd, 0x21, 0x67, 0xd9, 0x62, 0xa5, 0x54, 0x06, 0x43, 0xd7, 0x76, - 0x1e, 0x8b, 0x7e, 0x5c, 0x44, 0xfe, 0x4f, 0x0c, 0xc6, 0xa3, 0xd5, 0x8e, - 0x9e, 0x55, 0x2d, 0xfe, 0xfc, 0xf6, 0x92, 0x9f, 0x2c, 0x5f, 0xd9, 0xd4, - 0x21, 0x27, 0x58, 0xbf, 0xfd, 0xcf, 0xb4, 0x33, 0xee, 0x7e, 0x4c, 0x7a, - 0xc5, 0xfc, 0xe6, 0xc8, 0xd8, 0xeb, 0x17, 0x82, 0x92, 0x58, 0xbf, 0xb7, - 0xfc, 0xeb, 0x0e, 0xb1, 0x7f, 0xff, 0x7d, 0x8e, 0x76, 0x80, 0x65, 0xdb, - 0x07, 0x9d, 0x79, 0x62, 0xf4, 0x96, 0xd8, 0x88, 0xee, 0x17, 0xdf, 0xfd, - 0xf9, 0x83, 0xfb, 0x3f, 0xbc, 0x9d, 0x62, 0xa5, 0x51, 0x84, 0x0b, 0xc6, - 0x69, 0x85, 0xff, 0x4d, 0x62, 0xee, 0x42, 0xaf, 0xb1, 0x9d, 0xfb, 0x79, - 0xfc, 0x9d, 0x62, 0xff, 0xdf, 0x78, 0x89, 0x82, 0xf6, 0x7d, 0x62, 0xe9, - 0xe2, 0xc5, 0x62, 0x20, 0x37, 0x29, 0xf2, 0x05, 0xf0, 0x65, 0x0e, 0x2c, - 0x5f, 0xfb, 0xee, 0x39, 0x2f, 0x67, 0x5e, 0x58, 0xbd, 0xc1, 0x12, 0xc5, - 0xf4, 0x0a, 0x46, 0xb1, 0x78, 0xa4, 0xfc, 0x37, 0xe1, 0x8e, 0xdf, 0xe1, - 0x37, 0x22, 0x29, 0x3a, 0xc5, 0x6e, 0x8e, 0x4e, 0x3f, 0x78, 0xca, 0xff, - 0xef, 0xbe, 0xbe, 0xd9, 0xc7, 0x6d, 0x96, 0x2f, 0xf0, 0x4d, 0xec, 0x3b, - 0x74, 0xb1, 0x7f, 0xde, 0xcd, 0x67, 0x33, 0xaf, 0x2c, 0x5f, 0xf4, 0xed, - 0x23, 0xc3, 0xf5, 0x2b, 0x17, 0xbe, 0x20, 0x2c, 0x5f, 0x04, 0xda, 0x34, - 0x67, 0xb1, 0x87, 0x55, 0x28, 0xcc, 0xc8, 0x49, 0x56, 0x26, 0xd7, 0xf4, - 0x42, 0x8c, 0x06, 0xff, 0x8f, 0x87, 0xc2, 0xf6, 0x6e, 0xb1, 0x7f, 0x8d, - 0xcd, 0xe7, 0xf2, 0x75, 0x8a, 0xd8, 0xfb, 0x98, 0xe6, 0xfa, 0x7d, 0x27, - 0x58, 0xbf, 0x89, 0xcd, 0x33, 0x7f, 0xac, 0x5f, 0xf1, 0x34, 0x3d, 0xec, - 0x2d, 0x96, 0x2f, 0xfd, 0x80, 0x03, 0x71, 0xcb, 0xa8, 0x2c, 0x5e, 0x0f, - 0xec, 0xb1, 0x58, 0x8c, 0x7f, 0x98, 0x91, 0xcc, 0x71, 0xfd, 0x46, 0xcb, - 0x98, 0x06, 0x98, 0x75, 0x18, 0x41, 0xe3, 0x9c, 0x28, 0x51, 0xf8, 0x88, - 0x28, 0x74, 0xdd, 0xac, 0x58, 0xbd, 0xf9, 0xee, 0x58, 0xbf, 0xd2, 0x5b, - 0xf5, 0xc6, 0x8f, 0x58, 0xa3, 0x0f, 0xbc, 0x62, 0xff, 0x20, 0xbf, 0xf9, - 0xbb, 0x67, 0xf3, 0x45, 0x3d, 0x41, 0x62, 0xe9, 0xd9, 0x62, 0xbe, 0x7b, - 0xdd, 0xc8, 0xd7, 0xc4, 0x2d, 0x89, 0x62, 0xfc, 0xdc, 0x1b, 0x6e, 0xb1, - 0x79, 0xfa, 0x82, 0xc5, 0x40, 0xfa, 0x8d, 0x23, 0x01, 0x4d, 0xf3, 0xf8, - 0x5f, 0x58, 0xbf, 0x87, 0xcc, 0x3c, 0xc7, 0xac, 0x5f, 0xfd, 0xc1, 0x16, - 0xb2, 0x7a, 0x84, 0x92, 0xc5, 0xf6, 0x0d, 0xa0, 0xb1, 0x78, 0x4c, 0x1a, - 0xc5, 0xfe, 0xcf, 0xb7, 0x3f, 0x3c, 0x58, 0xbb, 0x6e, 0x96, 0x28, 0x67, - 0xd7, 0xd0, 0xf0, 0x0c, 0xe8, 0xc4, 0x5e, 0xb4, 0x23, 0x6a, 0x0a, 0xb2, - 0x87, 0x08, 0xee, 0xa1, 0x1f, 0x11, 0x83, 0x11, 0xf0, 0xc4, 0x28, 0xc0, - 0x6f, 0xf7, 0x3f, 0x9c, 0xf6, 0x6e, 0xb1, 0x7e, 0x2f, 0x7f, 0x20, 0xb1, - 0x79, 0xe4, 0xd5, 0x8a, 0x73, 0xfa, 0x63, 0x52, 0x28, 0xbf, 0xec, 0x29, - 0xff, 0xe4, 0x27, 0x58, 0xbe, 0xdf, 0xee, 0x12, 0xc5, 0xdd, 0xda, 0x58, - 0xbc, 0x1c, 0x81, 0x62, 0xff, 0xb7, 0x0b, 0x3a, 0xf7, 0xa4, 0xeb, 0x17, - 0xd1, 0x14, 0x9d, 0x62, 0xff, 0xff, 0xff, 0x8c, 0x2c, 0x35, 0xff, 0xfc, - 0x8f, 0x32, 0x77, 0x60, 0xcc, 0xc2, 0xd9, 0xf4, 0xe2, 0xef, 0xf1, 0x62, - 0xb6, 0x4f, 0x08, 0xd2, 0xce, 0x8e, 0x22, 0x25, 0x38, 0xd9, 0x0f, 0x70, - 0xf4, 0x22, 0x3b, 0xdf, 0x9d, 0x2c, 0x5f, 0xff, 0xe9, 0x33, 0xd1, 0xd8, - 0x66, 0x7d, 0x8b, 0x22, 0x84, 0xf4, 0xb1, 0x7f, 0x10, 0xbd, 0xa1, 0x41, - 0x62, 0xfd, 0xbc, 0xfe, 0x4e, 0x91, 0x7e, 0x26, 0x22, 0xc4, 0x8b, 0xb3, - 0x74, 0x8b, 0x82, 0x09, 0x22, 0xb1, 0x10, 0x1c, 0x29, 0xf1, 0x28, 0x43, - 0x17, 0xe9, 0x07, 0xf3, 0xb9, 0x22, 0x30, 0xde, 0xd0, 0xd3, 0x90, 0xc6, - 0x60, 0xe1, 0xd9, 0x5b, 0x27, 0xc6, 0x51, 0xd6, 0xdf, 0xfc, 0x3d, 0x36, - 0xe5, 0x9d, 0xb4, 0xfc, 0x58, 0xbf, 0xc5, 0x9e, 0x29, 0x17, 0x7e, 0xb1, - 0x7b, 0x67, 0xd2, 0xc5, 0x6c, 0x89, 0xc3, 0x51, 0xfe, 0x6f, 0x52, 0xc9, - 0xc2, 0xc9, 0x77, 0xaf, 0x2a, 0xd1, 0xa5, 0x2c, 0x8a, 0x18, 0xd7, 0x07, - 0xa5, 0x8b, 0x9b, 0xeb, 0x14, 0xc6, 0xc3, 0xc3, 0x37, 0xff, 0x7e, 0x41, - 0xef, 0xe4, 0x3e, 0xfd, 0x96, 0x2f, 0xa7, 0xd9, 0x05, 0x8b, 0xff, 0xa4, - 0x1c, 0xcc, 0x1b, 0x13, 0x1a, 0xb1, 0x7f, 0xde, 0xe3, 0x74, 0xf3, 0xd7, - 0x96, 0x2f, 0xf8, 0x81, 0xf6, 0xf7, 0x9c, 0x0b, 0x17, 0xff, 0xef, 0xbf, - 0x67, 0x21, 0xf2, 0x74, 0xf9, 0xd7, 0x16, 0x2f, 0xf6, 0x76, 0x92, 0xf4, - 0x3b, 0xf5, 0x8b, 0xfd, 0xbb, 0xf3, 0x07, 0x0e, 0xfd, 0x62, 0xf0, 0xc5, - 0xc5, 0x8b, 0xfd, 0x98, 0x53, 0x08, 0x77, 0xeb, 0x17, 0xf1, 0x4e, 0x69, - 0x80, 0xb1, 0x7f, 0xe9, 0xd7, 0xe5, 0xff, 0x24, 0xeb, 0x17, 0x43, 0x98, - 0x9e, 0x0e, 0xe7, 0x3a, 0x57, 0xf9, 0xd3, 0x1d, 0x10, 0xf7, 0x8d, 0xc2, - 0x2c, 0xbe, 0xfb, 0x37, 0x96, 0x2f, 0xe2, 0xc3, 0xbf, 0x50, 0x58, 0xbf, - 0xfc, 0xcf, 0xe9, 0x2d, 0xdc, 0xfc, 0x1f, 0x4b, 0x15, 0x27, 0xf3, 0xf2, - 0xeb, 0xfd, 0xf9, 0xc8, 0x4e, 0x01, 0x62, 0xff, 0xf1, 0x67, 0x40, 0x6e, - 0x36, 0x9f, 0xa0, 0x2c, 0x50, 0xcf, 0xf7, 0x86, 0x55, 0x05, 0x7a, 0x9d, - 0x47, 0xf8, 0x07, 0xdf, 0x42, 0x6c, 0x28, 0x4f, 0x5f, 0x4e, 0xf8, 0x75, - 0x8b, 0xe3, 0x88, 0xa0, 0xb1, 0x7c, 0xd1, 0x4f, 0x72, 0xc5, 0xd2, 0x75, - 0x8b, 0xdf, 0x68, 0x6c, 0x7c, 0x1f, 0x23, 0x22, 0x6a, 0x1a, 0x30, 0xfd, - 0x08, 0x3b, 0x9c, 0x25, 0x8b, 0xf7, 0xcf, 0x39, 0xe5, 0x8b, 0x85, 0xc5, - 0x8a, 0xc3, 0xc0, 0xe1, 0x45, 0xe1, 0x60, 0xd6, 0x28, 0x91, 0x2d, 0xe5, - 0x88, 0xe2, 0x1a, 0x82, 0xf4, 0x89, 0xd1, 0xfe, 0x44, 0xd3, 0x82, 0xe5, - 0x19, 0x0f, 0x21, 0x7d, 0x7b, 0xb0, 0x67, 0x58, 0xbe, 0xfe, 0xd8, 0x12, - 0xc5, 0xf0, 0xc4, 0x50, 0x58, 0xb7, 0x18, 0xf2, 0x03, 0x25, 0xbd, 0x8c, - 0x05, 0x8b, 0xcc, 0x7e, 0x96, 0x2d, 0xb8, 0xcd, 0xd6, 0x0e, 0x5a, 0x35, - 0xac, 0x5e, 0x29, 0x82, 0xc5, 0xff, 0xb3, 0x9e, 0x86, 0x1a, 0x58, 0x05, - 0x8b, 0xc3, 0xc2, 0x58, 0xae, 0xf5, 0x11, 0xe3, 0x18, 0x61, 0xce, 0xe3, - 0xfa, 0x74, 0x7d, 0x0a, 0x16, 0xd7, 0xcf, 0xf3, 0xb2, 0xc5, 0xff, 0x82, - 0x1e, 0xa7, 0xec, 0x38, 0x1d, 0x62, 0xff, 0xff, 0xfe, 0xd0, 0x27, 0xdc, - 0x33, 0xd0, 0xc0, 0x47, 0x61, 0x83, 0xc1, 0xcb, 0x6b, 0x08, 0x08, 0x20, - 0xbf, 0xff, 0xff, 0xff, 0xff, 0xe7, 0x93, 0xb0, 0xf6, 0x17, 0x0c, 0xc1, - 0x8b, 0x50, 0xfb, 0x99, 0x9a, 0x04, 0xfb, 0x86, 0x7a, 0x18, 0x08, 0xec, - 0x30, 0x78, 0x39, 0x6d, 0x61, 0x01, 0x06, 0x17, 0xff, 0xdc, 0xe8, 0xc1, - 0xe0, 0xe5, 0xb5, 0x84, 0x05, 0x8a, 0xfa, 0x69, 0x9e, 0x87, 0xdd, 0xff, - 0xff, 0x8c, 0xf4, 0x30, 0x11, 0xd8, 0x60, 0xf0, 0x72, 0xda, 0xc2, 0x02, - 0x10, 0x5f, 0xfd, 0x9e, 0x33, 0x7f, 0xbf, 0xfe, 0xe0, 0x55, 0xa1, 0x65, - 0x41, 0x19, 0x1c, 0x74, 0xbd, 0x3b, 0x46, 0x62, 0xaf, 0x2e, 0x47, 0xbd, - 0xe8, 0x78, 0xde, 0x04, 0xf4, 0xb1, 0x73, 0x79, 0x62, 0xf1, 0x67, 0x72, - 0xc5, 0xf6, 0x6e, 0xdb, 0xac, 0x5f, 0x8f, 0xc0, 0x9b, 0xa5, 0x8a, 0x1a, - 0x3d, 0x1d, 0x44, 0xe3, 0xcc, 0x2f, 0xe1, 0xf0, 0xc9, 0x2a, 0x57, 0x27, - 0xfa, 0x22, 0xe4, 0xe1, 0x3d, 0xfa, 0x28, 0x3e, 0xb8, 0xb1, 0x70, 0x89, - 0x62, 0xb0, 0xf0, 0x7e, 0x55, 0x7e, 0xda, 0x7c, 0xf1, 0x2c, 0x5f, 0x07, - 0xc9, 0xc5, 0x8b, 0xf0, 0x7d, 0xd2, 0x50, 0x58, 0xad, 0xcf, 0xe7, 0xa2, - 0xa0, 0x11, 0xdf, 0xff, 0xef, 0xcf, 0xb8, 0xff, 0x7d, 0x16, 0x6c, 0x66, - 0x49, 0xd6, 0x2f, 0xb8, 0x66, 0xb1, 0x62, 0xfb, 0xfb, 0xbf, 0x16, 0x2a, - 0x51, 0xb5, 0xb1, 0x8b, 0x30, 0xf8, 0x92, 0xff, 0xff, 0x83, 0x1f, 0xe6, - 0x1e, 0xcc, 0x0b, 0x85, 0x9e, 0xf3, 0xec, 0xb1, 0x7f, 0xc3, 0x76, 0xed, - 0x3d, 0x9b, 0xeb, 0x17, 0x37, 0x4b, 0x16, 0xc5, 0x8b, 0x36, 0xc8, 0xce, - 0xe9, 0xa5, 0x8f, 0x3b, 0x0c, 0x5e, 0x72, 0xc5, 0x8b, 0xf6, 0xb4, 0xc0, - 0x95, 0x8a, 0x81, 0xe1, 0xb0, 0xdd, 0x77, 0xaf, 0x94, 0x45, 0x35, 0xb9, - 0x08, 0xe3, 0x76, 0xca, 0x4c, 0xa6, 0xf1, 0x97, 0xbc, 0xeb, 0x8e, 0xa9, - 0xef, 0x3f, 0x84, 0xa3, 0x4f, 0x58, 0x81, 0xaf, 0xbf, 0x69, 0x28, 0xd7, - 0x39, 0x39, 0x8d, 0xe7, 0xc1, 0x46, 0xe8, 0x14, 0x61, 0x41, 0xc2, 0x22, - 0xe8, 0xde, 0x34, 0x58, 0xbe, 0xc0, 0x6a, 0x56, 0x2f, 0x04, 0x10, 0x49, - 0x17, 0x98, 0x86, 0x91, 0x18, 0x68, 0x6f, 0xb3, 0x59, 0xe5, 0x8a, 0xfa, - 0x25, 0x00, 0x87, 0xc2, 0xfb, 0xff, 0x8d, 0x60, 0xca, 0x5c, 0x79, 0xd7, - 0x96, 0x2f, 0x0b, 0xbf, 0xc5, 0x8b, 0xce, 0xd0, 0x58, 0xbf, 0xfd, 0x9e, - 0xf3, 0x11, 0xad, 0xe2, 0x60, 0x2c, 0x54, 0xa3, 0x35, 0xd1, 0xbe, 0x44, - 0x43, 0x97, 0xf8, 0xb3, 0xfe, 0x29, 0x02, 0xc5, 0xff, 0xe8, 0x39, 0x67, - 0xa4, 0x21, 0xe9, 0xa0, 0xb1, 0x7f, 0xff, 0x3c, 0x5c, 0xe0, 0x9b, 0x42, - 0xda, 0x4d, 0x0c, 0xbc, 0xb1, 0x7f, 0xe2, 0xcd, 0xa7, 0xa8, 0x42, 0x4e, - 0xb1, 0x7f, 0xfe, 0x14, 0xe6, 0xda, 0x97, 0x84, 0x9a, 0x16, 0x7d, 0x62, - 0x89, 0x12, 0xfe, 0x40, 0xac, 0x4d, 0x8f, 0xe9, 0x41, 0xc3, 0xde, 0xf1, - 0x4c, 0x16, 0x2f, 0xb5, 0xa7, 0x3a, 0xc5, 0xb8, 0x33, 0x7e, 0xe3, 0x95, - 0x04, 0x4d, 0xf9, 0xd6, 0xfb, 0x86, 0xff, 0xb2, 0xc5, 0xdb, 0x0d, 0x62, - 0xff, 0xfd, 0xe9, 0xcd, 0x9b, 0xdb, 0xfd, 0xb4, 0x13, 0x74, 0xb1, 0x46, - 0x22, 0x64, 0xe4, 0xfc, 0x19, 0xad, 0x95, 0x8e, 0x94, 0xa3, 0x0f, 0x42, - 0xf2, 0xfd, 0xac, 0xde, 0x7e, 0xb1, 0x7f, 0xe2, 0xdf, 0xde, 0xc2, 0x29, - 0x8f, 0x58, 0xbf, 0xfd, 0xf7, 0xd6, 0x9f, 0x6e, 0x61, 0xe6, 0x3d, 0x62, - 0xa5, 0x11, 0xfb, 0xa0, 0xde, 0x30, 0xd8, 0xe5, 0x8b, 0xde, 0x61, 0xac, - 0x5c, 0xd1, 0xeb, 0x15, 0xa3, 0xda, 0xe1, 0x1f, 0x61, 0xdb, 0xf7, 0xe4, - 0xb2, 0x25, 0x8b, 0xfb, 0xd8, 0x44, 0xde, 0x58, 0xad, 0xcf, 0x53, 0xb8, - 0xa2, 0xf4, 0x1f, 0xb9, 0x62, 0xa4, 0xf1, 0xa2, 0x26, 0xbf, 0xc6, 0xf5, - 0xed, 0x4e, 0x74, 0xb1, 0x7c, 0x07, 0xd1, 0xa9, 0x17, 0xfa, 0x5b, 0x5f, - 0x09, 0x86, 0xb1, 0x7d, 0xad, 0x3e, 0xcb, 0x16, 0xde, 0x4f, 0xf0, 0x64, - 0x8c, 0x69, 0x7e, 0xd7, 0xf0, 0xe2, 0x58, 0xbf, 0x66, 0xb3, 0x22, 0x58, - 0xa7, 0x3d, 0x10, 0xca, 0x6f, 0xcd, 0xf3, 0x07, 0x2b, 0x15, 0x06, 0x41, - 0xb8, 0xe1, 0xfb, 0x92, 0xd5, 0xcd, 0x3e, 0xea, 0x17, 0x0e, 0xfb, 0xa8, - 0x65, 0xb1, 0x11, 0x42, 0xcf, 0x90, 0x85, 0xf1, 0x15, 0xf9, 0xb5, 0xac, - 0xe9, 0x62, 0xff, 0xf7, 0xbe, 0xec, 0x0c, 0xd0, 0xe4, 0xa0, 0xb1, 0x7f, - 0xfb, 0xa3, 0x3a, 0x04, 0x96, 0xed, 0xb1, 0x32, 0xc5, 0x4a, 0x30, 0x30, - 0xa4, 0x92, 0x6f, 0xd3, 0xc0, 0xca, 0x0b, 0x17, 0xb7, 0x78, 0x2c, 0x5f, - 0xe9, 0xf3, 0x6b, 0x59, 0xd2, 0xc5, 0x18, 0x7a, 0x5f, 0x1e, 0xbf, 0xf6, - 0xf9, 0xac, 0x7e, 0x7e, 0x7b, 0x2c, 0x5f, 0xf9, 0xba, 0x61, 0xb7, 0x5a, - 0x73, 0x56, 0x2f, 0xd3, 0xdd, 0xb6, 0x04, 0xb1, 0x7f, 0xf3, 0x67, 0x5e, - 0xc2, 0x14, 0x33, 0x8b, 0x17, 0xff, 0xff, 0x33, 0xf9, 0xff, 0xbb, 0x99, - 0x07, 0xfb, 0x17, 0xa1, 0x9a, 0xc5, 0x8b, 0xb3, 0xeb, 0x17, 0x67, 0x72, - 0xc5, 0x44, 0x6c, 0x7e, 0x2f, 0x5f, 0x46, 0x23, 0x42, 0x8a, 0xfc, 0xe0, - 0x62, 0x02, 0xc5, 0xfe, 0x9e, 0xb9, 0x3e, 0x91, 0xac, 0x50, 0x0f, 0x6c, - 0x89, 0xef, 0xd9, 0xcc, 0xeb, 0xcb, 0x17, 0xff, 0xdf, 0xc7, 0xd4, 0x3e, - 0xe2, 0xdf, 0xf8, 0x05, 0x8b, 0xdc, 0x0f, 0x86, 0x26, 0x3b, 0x90, 0x82, - 0x62, 0x1f, 0x14, 0xd0, 0xd5, 0xa6, 0x74, 0x46, 0x74, 0x1f, 0xa0, 0x91, - 0x6f, 0xa5, 0x12, 0xdd, 0xc8, 0x2c, 0x5e, 0xd8, 0x5c, 0x58, 0xba, 0x62, - 0x58, 0xbf, 0xce, 0x4d, 0xef, 0xe1, 0xd6, 0x29, 0x8f, 0xa4, 0x87, 0xfc, - 0x31, 0x7f, 0x41, 0xfc, 0xe5, 0x05, 0x8b, 0xfb, 0x8e, 0xfb, 0x3f, 0xd6, - 0x2d, 0xa9, 0x3d, 0xb8, 0x16, 0xdf, 0xa2, 0x29, 0xf7, 0x16, 0x2f, 0xff, - 0xff, 0xfa, 0x79, 0x3e, 0xdb, 0x02, 0xd6, 0x7d, 0x83, 0xe6, 0x1a, 0xc4, - 0x09, 0x29, 0x8b, 0xf2, 0xb1, 0x7c, 0x26, 0xcd, 0x96, 0x2f, 0x1f, 0x36, - 0x58, 0xbd, 0x07, 0xec, 0x47, 0x82, 0x19, 0x1d, 0xfb, 0x9f, 0x6d, 0xe5, - 0x62, 0xfc, 0xdb, 0x04, 0xd0, 0x58, 0xa9, 0x4e, 0xbb, 0x62, 0x72, 0x29, - 0xf4, 0x35, 0x82, 0x35, 0x0c, 0xa6, 0xfe, 0xeb, 0x98, 0x77, 0xfa, 0xc5, - 0xff, 0x73, 0xf2, 0xda, 0xd6, 0x74, 0xb1, 0x7d, 0x27, 0x6f, 0xac, 0x5f, - 0xff, 0xe8, 0x7b, 0x0b, 0xdc, 0x33, 0x9c, 0xcd, 0x61, 0x34, 0x16, 0x2c, - 0x69, 0x88, 0x83, 0xe8, 0x8a, 0xb1, 0x1d, 0x2f, 0x0b, 0xdb, 0xe0, 0x7b, - 0x36, 0x58, 0xb1, 0xd6, 0x2a, 0x4d, 0xb1, 0xc9, 0x2f, 0xff, 0xf0, 0x04, - 0xc5, 0xb8, 0x53, 0xa2, 0xce, 0xa1, 0xe9, 0xe9, 0x62, 0xff, 0xe8, 0xc1, - 0x94, 0x8b, 0x7c, 0x35, 0xf4, 0xb1, 0x7b, 0x4d, 0xc5, 0x8b, 0xb0, 0x25, - 0x8a, 0x93, 0xfe, 0x1a, 0x4f, 0x07, 0x6f, 0xa5, 0xb5, 0xc5, 0x8b, 0xde, - 0xfc, 0xac, 0x5f, 0x67, 0xbe, 0xeb, 0x15, 0x88, 0x8f, 0xf9, 0x73, 0x11, - 0x10, 0xed, 0xff, 0xf6, 0x11, 0xa6, 0x07, 0xe7, 0xfb, 0x9b, 0xf7, 0x58, - 0xb7, 0xd6, 0x29, 0x62, 0xe9, 0x26, 0x2f, 0xb8, 0x25, 0x58, 0x89, 0xaf, - 0xb8, 0xdf, 0xc5, 0x31, 0x66, 0x6e, 0xb1, 0x7f, 0x6d, 0xf6, 0xf6, 0xa5, - 0x62, 0xfb, 0x3d, 0x3f, 0x58, 0xbd, 0x0c, 0xe2, 0xc5, 0xe9, 0xeb, 0x8b, - 0x17, 0xf8, 0x7f, 0x98, 0x99, 0xba, 0x58, 0xbc, 0xfe, 0xe2, 0xc5, 0xf7, - 0x04, 0x50, 0x58, 0xbf, 0x13, 0x7a, 0x12, 0xb1, 0x7f, 0x8f, 0xd4, 0x3d, - 0x91, 0x71, 0x62, 0xb7, 0x44, 0xf7, 0x43, 0xbc, 0x23, 0x0c, 0x9e, 0xf7, - 0xc1, 0xd9, 0x62, 0xb6, 0x4d, 0xb8, 0x63, 0xba, 0x1e, 0x28, 0x69, 0xf7, - 0x20, 0x5e, 0xe9, 0xa3, 0xd6, 0x2f, 0xf7, 0xbe, 0xc7, 0xd6, 0x6c, 0xb1, - 0x5f, 0x3d, 0x60, 0x10, 0xde, 0x8e, 0x73, 0x56, 0x2f, 0xef, 0x4f, 0x62, - 0x6e, 0x96, 0x29, 0x62, 0xa4, 0xf7, 0x7a, 0x21, 0x8e, 0x30, 0xa8, 0x2e, - 0x1e, 0x8e, 0x1a, 0x8e, 0x45, 0xa2, 0xef, 0x97, 0xb4, 0x72, 0x05, 0x0a, - 0x9f, 0x3f, 0xde, 0x89, 0x80, 0xb1, 0x7e, 0x11, 0x0d, 0xb6, 0x58, 0xbf, - 0xfe, 0xfb, 0xb0, 0x30, 0xa7, 0xae, 0x67, 0x5e, 0x58, 0xb1, 0xb8, 0x89, - 0x73, 0x8f, 0x78, 0xa6, 0xff, 0xda, 0x01, 0xdf, 0x81, 0xf2, 0x71, 0x62, - 0xfb, 0xbb, 0xf9, 0xd9, 0x62, 0xb0, 0xfa, 0x19, 0x02, 0xf4, 0xf5, 0x1e, - 0xb1, 0x7d, 0xc2, 0x73, 0x56, 0x2b, 0x47, 0x89, 0xe2, 0x1b, 0xec, 0x1b, - 0x41, 0x62, 0x86, 0x78, 0x86, 0x91, 0x5f, 0xcd, 0x0f, 0x72, 0x4d, 0x58, - 0xbf, 0x4b, 0xb7, 0xb8, 0xb1, 0x7d, 0x07, 0xea, 0x0b, 0x17, 0x4e, 0xbe, - 0x79, 0x6c, 0x4f, 0x63, 0x7e, 0x8a, 0x60, 0x9e, 0xaf, 0xff, 0x11, 0x8f, - 0x23, 0xfe, 0x1f, 0xf9, 0xc5, 0x8b, 0xe3, 0x94, 0xc4, 0xb1, 0x7f, 0xfd, - 0xf7, 0x83, 0xe9, 0x81, 0xe2, 0x93, 0xf1, 0x62, 0xf4, 0xe8, 0x12, 0x7e, - 0x5b, 0x91, 0xd6, 0x23, 0xbf, 0xd0, 0xbc, 0xba, 0x3f, 0x8b, 0x17, 0xfd, - 0xcd, 0xfe, 0xc3, 0x8d, 0xfb, 0xd8, 0xd9, 0x62, 0x8d, 0x44, 0x6b, 0x13, - 0xf8, 0x6e, 0xa5, 0x5f, 0x34, 0x21, 0x3d, 0x90, 0xa8, 0x78, 0x64, 0xb4, - 0x74, 0xf7, 0x10, 0x16, 0x2f, 0xee, 0xa1, 0x87, 0x9d, 0xd6, 0x2f, 0xd1, - 0x48, 0xda, 0x25, 0x8b, 0xf9, 0xfc, 0x0c, 0x87, 0x16, 0x2f, 0xf4, 0x03, - 0xe0, 0x3f, 0x20, 0x58, 0xbf, 0x3f, 0x03, 0xe8, 0x0b, 0x17, 0xe2, 0xcf, - 0x49, 0xd6, 0x2f, 0xcc, 0xfe, 0x92, 0x58, 0xbe, 0xe7, 0xf3, 0x8b, 0x16, - 0x98, 0x22, 0x6d, 0xca, 0xfe, 0x4e, 0x22, 0x6b, 0xb3, 0xb2, 0xc5, 0xff, - 0x14, 0xf9, 0xf4, 0xfe, 0x12, 0xc5, 0x6e, 0x7a, 0x2e, 0x33, 0x7f, 0x9f, - 0xcf, 0xa6, 0xda, 0x56, 0x2a, 0x4f, 0x55, 0x88, 0xaf, 0x33, 0x74, 0xb1, - 0x46, 0x2a, 0x4d, 0x81, 0x57, 0x45, 0xda, 0x86, 0x8f, 0xe1, 0xcf, 0xd8, - 0x82, 0xbb, 0xc5, 0x5f, 0x72, 0x2e, 0xf2, 0x9f, 0x6f, 0x1c, 0x5c, 0x58, - 0xbe, 0x73, 0xe1, 0x2c, 0x5a, 0x58, 0xdf, 0xf8, 0x7a, 0xff, 0x3f, 0x83, - 0xd4, 0xfe, 0x56, 0x2f, 0xd2, 0x19, 0x34, 0x16, 0x2f, 0xff, 0x69, 0x8b, - 0xd8, 0x08, 0xe9, 0x18, 0xe5, 0x62, 0xff, 0xe2, 0x90, 0x0c, 0x53, 0xb4, - 0xf5, 0x05, 0x8b, 0xfa, 0x1a, 0x98, 0x36, 0x96, 0x2f, 0xde, 0xe7, 0x7a, - 0x6f, 0x96, 0x2c, 0x75, 0x8a, 0x93, 0xc2, 0xc3, 0x0b, 0xde, 0x90, 0x96, - 0x2f, 0x7c, 0x3d, 0x2c, 0x54, 0x0d, 0xef, 0x87, 0xaf, 0x7b, 0x06, 0xb1, - 0x7f, 0xc2, 0xd1, 0xac, 0xfc, 0x7e, 0xcb, 0x17, 0xed, 0x00, 0xef, 0xc5, - 0x8b, 0x80, 0x64, 0x71, 0xf2, 0x86, 0x79, 0x6c, 0xe9, 0x16, 0xa5, 0x08, - 0x2b, 0xe6, 0xdc, 0xb1, 0x62, 0xe9, 0xe9, 0x62, 0xf1, 0xe7, 0x75, 0x8b, - 0xf7, 0xdf, 0x3a, 0xf2, 0xc5, 0xff, 0xff, 0xfe, 0x6e, 0x7d, 0xa1, 0xbf, - 0xdf, 0xc2, 0x01, 0xda, 0x19, 0xd9, 0xfc, 0xff, 0xdd, 0xa0, 0xb1, 0x5b, - 0x23, 0xc7, 0x06, 0x1c, 0x78, 0x8a, 0x68, 0x6a, 0xab, 0xba, 0x5d, 0x3c, - 0x35, 0x88, 0xb7, 0xd1, 0x89, 0xd2, 0xc5, 0xee, 0xd9, 0xa5, 0x8b, 0xde, - 0xc0, 0x2c, 0x5f, 0xdc, 0x98, 0xa0, 0x21, 0xac, 0x56, 0x1f, 0x60, 0x07, - 0xc3, 0x1d, 0xbe, 0xe7, 0x1f, 0xb2, 0xc5, 0xff, 0xfb, 0x08, 0xd6, 0xe7, - 0xd9, 0xc0, 0x79, 0xea, 0x0b, 0x15, 0x27, 0xf7, 0xb9, 0x2d, 0xf8, 0x5d, - 0xfe, 0x9f, 0x8b, 0x17, 0xff, 0xfe, 0x11, 0xbd, 0x78, 0x4c, 0x18, 0x7a, - 0xe0, 0x9b, 0x42, 0xda, 0x4d, 0x58, 0xbc, 0xf1, 0x73, 0x11, 0x47, 0xa2, - 0xeb, 0xff, 0xec, 0xd4, 0x5f, 0x72, 0x09, 0xbe, 0x19, 0x79, 0x62, 0xe0, - 0xf3, 0xe8, 0x86, 0xe1, 0xa5, 0xff, 0xbe, 0xfd, 0x73, 0x08, 0xdc, 0x25, - 0x8b, 0xff, 0xf9, 0xe2, 0xe7, 0x04, 0xda, 0x16, 0xd2, 0x68, 0x65, 0xe5, - 0x8b, 0x73, 0x11, 0x9d, 0xb9, 0x7f, 0xcf, 0xef, 0x8e, 0x45, 0x2b, 0x17, - 0xfc, 0xe3, 0xfc, 0xc3, 0x3a, 0xf2, 0xc5, 0xfa, 0x78, 0xe0, 0xe9, 0x62, - 0xe6, 0xec, 0xb1, 0x76, 0xf3, 0xd8, 0xf0, 0x83, 0x29, 0xb1, 0xb2, 0x8c, - 0xe1, 0x90, 0xe3, 0xe5, 0x62, 0x67, 0x2d, 0x18, 0x25, 0xfb, 0xcd, 0xe1, - 0x4a, 0xc5, 0xfd, 0xf9, 0x17, 0x7e, 0x60, 0xd6, 0x2f, 0xff, 0xef, 0xbf, - 0xbe, 0xd0, 0x0c, 0x6d, 0xb0, 0xfe, 0xe7, 0x58, 0xbf, 0xf3, 0xfa, 0x18, - 0x0e, 0x16, 0x01, 0x62, 0xa0, 0xc9, 0xf8, 0x19, 0xa6, 0x14, 0x1a, 0x99, - 0xd2, 0x33, 0xcb, 0x1e, 0x89, 0x5f, 0x4f, 0x1f, 0x85, 0x51, 0x4b, 0x52, - 0xe1, 0x47, 0x8a, 0x04, 0x6b, 0xd9, 0x7a, 0xf0, 0x27, 0xa5, 0x8b, 0xa7, - 0xa5, 0x8a, 0x73, 0x6c, 0x01, 0xeb, 0xd1, 0xdd, 0x4a, 0xc5, 0xfe, 0xf9, - 0x4f, 0x4f, 0x3f, 0x58, 0xbf, 0x9b, 0xc0, 0x0c, 0xa0, 0xb1, 0x5b, 0x9f, - 0x17, 0xcc, 0xef, 0xdb, 0xfe, 0x5e, 0x3d, 0x62, 0xa3, 0x77, 0x5c, 0x01, - 0x34, 0x8e, 0xd8, 0x46, 0xf4, 0x32, 0xdc, 0x97, 0x8e, 0x6b, 0x07, 0x50, - 0x81, 0x79, 0x46, 0xd1, 0xeb, 0xda, 0x8c, 0x60, 0xeb, 0x9f, 0x20, 0x69, - 0xda, 0xe2, 0x9c, 0xfe, 0xe4, 0xb5, 0x8f, 0x3d, 0x8a, 0x94, 0x3b, 0xda, - 0x30, 0xe8, 0xe2, 0x00, 0xe1, 0x07, 0xdc, 0x47, 0x7f, 0xe6, 0x71, 0x8b, - 0xdc, 0xdb, 0x02, 0x58, 0xbb, 0xbc, 0x25, 0x8b, 0xf7, 0x30, 0xd9, 0xe2, - 0xc5, 0xfa, 0x3b, 0x09, 0x8d, 0x58, 0xbf, 0x74, 0x76, 0x20, 0x2c, 0x5b, - 0x4b, 0x16, 0x82, 0xc5, 0x9b, 0xe6, 0x91, 0x84, 0xaf, 0xfb, 0x86, 0x0a, - 0x26, 0xee, 0x11, 0xab, 0x17, 0xff, 0x9a, 0x3f, 0x7f, 0xb9, 0x0b, 0xd0, - 0x70, 0x2c, 0x5f, 0xfe, 0xe7, 0x85, 0xb1, 0x82, 0x61, 0xfd, 0xa2, 0x58, - 0xa3, 0x13, 0x7b, 0x92, 0xbd, 0x26, 0xb1, 0x29, 0x20, 0x89, 0x3a, 0xfd, - 0xc7, 0x2e, 0xa0, 0xb1, 0x7e, 0x97, 0xfc, 0xe9, 0x62, 0xa3, 0xcf, 0x42, - 0x22, 0x9b, 0xfb, 0x22, 0x66, 0x2d, 0x96, 0x2f, 0x9b, 0x8f, 0xa5, 0x8a, - 0x30, 0xf4, 0x3e, 0x5d, 0x7e, 0x01, 0x98, 0xd1, 0xeb, 0x17, 0xff, 0x17, - 0xdb, 0x85, 0x86, 0x9b, 0x91, 0xeb, 0x17, 0xfd, 0xa8, 0xe7, 0xfe, 0x37, - 0x40, 0x58, 0xa9, 0x45, 0x8e, 0x16, 0x32, 0x45, 0xfe, 0x9d, 0x6a, 0x60, - 0xdf, 0x58, 0xbf, 0x06, 0x5f, 0xce, 0x96, 0x2b, 0x73, 0xdd, 0x01, 0x9d, - 0xff, 0xf9, 0xfd, 0x27, 0xce, 0xbd, 0x27, 0x0f, 0x4c, 0x05, 0x8b, 0xc4, - 0xc3, 0x58, 0xbf, 0xfa, 0x45, 0xbe, 0x75, 0xe8, 0xc0, 0x82, 0x09, 0x62, - 0x9c, 0xfa, 0x88, 0x72, 0xff, 0x7e, 0x7a, 0xee, 0x97, 0x8e, 0x58, 0xbf, - 0xdf, 0xcd, 0xbf, 0x22, 0x0d, 0x62, 0xff, 0xa4, 0x65, 0x9e, 0xe1, 0xe5, - 0x62, 0xff, 0xec, 0xf7, 0xf2, 0x05, 0x80, 0x17, 0x16, 0x2f, 0xcf, 0xa7, - 0xf0, 0x96, 0x2b, 0xe7, 0xd9, 0xe4, 0x4b, 0xff, 0xf7, 0x30, 0x5d, 0xfe, - 0x05, 0x8f, 0xdb, 0x21, 0x24, 0xb1, 0x52, 0x7f, 0xbe, 0x22, 0xbf, 0xee, - 0x4e, 0xbd, 0x31, 0x83, 0x75, 0x8b, 0xa5, 0xd6, 0x2f, 0xd3, 0xad, 0xa7, - 0x75, 0x8a, 0x82, 0xb0, 0xf1, 0xc3, 0x06, 0x3c, 0x83, 0x47, 0x47, 0x36, - 0x28, 0xc8, 0x78, 0x43, 0xd8, 0xf2, 0x38, 0x5a, 0xf7, 0xff, 0x2b, 0x17, - 0x7e, 0x56, 0x2b, 0x0d, 0xa3, 0x0e, 0xdf, 0xff, 0xd9, 0xf3, 0x30, 0xef, - 0xf9, 0x33, 0x9c, 0xc2, 0x02, 0xc5, 0xff, 0xcf, 0xa9, 0x87, 0xe6, 0x22, - 0x11, 0xab, 0x15, 0xf4, 0x51, 0x71, 0x72, 0xff, 0xdb, 0x4c, 0x45, 0x3c, - 0xc9, 0x82, 0xc5, 0xd3, 0x12, 0xc5, 0xa3, 0x96, 0x28, 0xc3, 0x5b, 0xb8, - 0xc5, 0xfc, 0x6f, 0xa7, 0xf3, 0xc5, 0x8b, 0xfe, 0xe1, 0x67, 0xb9, 0x3a, - 0xd9, 0x62, 0xff, 0x4e, 0x7c, 0x39, 0xd6, 0xcb, 0x17, 0xf8, 0x7d, 0xdc, - 0x98, 0x85, 0xa5, 0x8b, 0x1d, 0x62, 0xfb, 0xaf, 0x67, 0x16, 0x2f, 0xdf, - 0x90, 0xcb, 0x65, 0x8a, 0x81, 0xe7, 0x44, 0x49, 0x7e, 0xfc, 0xee, 0x4c, - 0xb1, 0x7e, 0x7e, 0xb8, 0xdd, 0x2c, 0x5f, 0xff, 0xb3, 0xdc, 0x93, 0xf5, - 0xc7, 0x1f, 0xf1, 0xcd, 0x58, 0xbe, 0xe3, 0xeb, 0x65, 0x8a, 0x31, 0x35, - 0x09, 0x60, 0x72, 0x3f, 0x94, 0x11, 0x57, 0x15, 0xef, 0xf6, 0x0f, 0x35, - 0x09, 0xd2, 0xc5, 0xef, 0xbf, 0x96, 0x2a, 0x55, 0xae, 0x41, 0xb1, 0xc8, - 0xe2, 0x2f, 0xd1, 0xd3, 0x1a, 0x82, 0x38, 0x9e, 0x2b, 0x06, 0x67, 0x7e, - 0x6f, 0xe7, 0x5e, 0x58, 0xbf, 0xf6, 0x61, 0x1a, 0x59, 0xa0, 0xfc, 0xb1, - 0x7f, 0xe6, 0xf7, 0x27, 0x08, 0x7f, 0x95, 0x8b, 0xed, 0xff, 0x22, 0x58, - 0xaf, 0x9f, 0x0f, 0x8f, 0x6f, 0xfc, 0xc5, 0xb0, 0x58, 0x43, 0xfc, 0xac, - 0x5c, 0xfb, 0x2c, 0x56, 0x1e, 0xb9, 0x1f, 0xdf, 0xe9, 0xf7, 0x03, 0x29, - 0xdd, 0x62, 0xfe, 0xea, 0x1c, 0x0e, 0x63, 0xd6, 0x2b, 0x47, 0xd2, 0x23, - 0x5b, 0xfe, 0x09, 0x8b, 0x6e, 0x3f, 0x5e, 0x58, 0xbd, 0xbc, 0xc7, 0xac, - 0x5f, 0xe8, 0xbe, 0xda, 0xd3, 0x8d, 0x62, 0xb0, 0xf5, 0x98, 0x86, 0xff, - 0x37, 0x41, 0xe9, 0xcf, 0x8b, 0x17, 0xf3, 0x16, 0xc7, 0x6f, 0x2c, 0x51, - 0x1f, 0x1f, 0x0d, 0x6f, 0xec, 0x27, 0x1e, 0x12, 0xc5, 0xef, 0xb1, 0xd6, - 0x2f, 0xff, 0x67, 0xb8, 0xc7, 0xd6, 0x3f, 0xe4, 0x6b, 0x15, 0x04, 0x48, - 0xb9, 0x59, 0x0e, 0xdf, 0x83, 0xd6, 0x76, 0xc5, 0x8b, 0x1d, 0x62, 0xc3, - 0xf9, 0xbd, 0x22, 0xbb, 0xfc, 0x59, 0xb7, 0xbd, 0x27, 0x58, 0xa9, 0x3d, - 0xa2, 0x26, 0xa8, 0x2e, 0x4c, 0x8c, 0xa7, 0x21, 0x41, 0x13, 0xce, 0xa1, - 0x13, 0xf2, 0x22, 0x84, 0x97, 0x21, 0x07, 0xe8, 0x59, 0x07, 0x0c, 0x5b, - 0xfa, 0x28, 0x3e, 0xa1, 0x1a, 0x2c, 0x5d, 0x1b, 0x77, 0xab, 0x17, 0xb8, - 0xe1, 0x2c, 0x5f, 0xe3, 0x58, 0x39, 0x00, 0x67, 0x58, 0xbf, 0xd0, 0x7d, - 0x43, 0x3e, 0xcb, 0x17, 0xd9, 0x13, 0x79, 0x62, 0xfe, 0xf7, 0x22, 0x83, - 0x12, 0xc5, 0xf9, 0xba, 0xcf, 0xb2, 0xc5, 0x49, 0xeb, 0x88, 0xbe, 0xda, - 0x31, 0x37, 0xae, 0xfa, 0x9a, 0xe1, 0x11, 0xa3, 0xd1, 0x1b, 0xfc, 0xcc, - 0x9e, 0xaf, 0xf6, 0xff, 0x7f, 0x1b, 0x24, 0xb1, 0x76, 0x74, 0xb1, 0x7a, - 0x75, 0xc5, 0x8a, 0x93, 0x6a, 0x71, 0x8b, 0xfd, 0x07, 0x26, 0x37, 0xee, - 0xb1, 0x7f, 0xfa, 0x47, 0xf1, 0x1a, 0x1c, 0x8f, 0xe2, 0xe2, 0xc5, 0xa3, - 0xcc, 0x4c, 0x2c, 0x6d, 0x5d, 0x10, 0x06, 0x67, 0x76, 0x6c, 0xb1, 0x52, - 0x7c, 0x58, 0x95, 0x7f, 0x6d, 0xc9, 0x88, 0x5a, 0x58, 0xbf, 0xa7, 0xbb, - 0x7f, 0xce, 0xcb, 0x17, 0xbc, 0xdc, 0x58, 0xbf, 0xe1, 0x40, 0x1f, 0x97, - 0x2d, 0x96, 0x2b, 0x11, 0x76, 0x69, 0x8b, 0x99, 0x90, 0xed, 0xdd, 0xf1, - 0x96, 0x2f, 0xff, 0xfe, 0x2d, 0xf0, 0xa4, 0x2f, 0x1a, 0xdc, 0x1c, 0xb6, - 0xbe, 0x13, 0x0d, 0x62, 0xe6, 0xe9, 0x62, 0xde, 0x94, 0x46, 0x71, 0xd2, - 0xfb, 0x0f, 0x31, 0xeb, 0x17, 0xec, 0xe4, 0x94, 0xac, 0x5f, 0xf0, 0x62, - 0x60, 0xe2, 0x30, 0x1e, 0x58, 0xbe, 0x61, 0x88, 0xd7, 0x3e, 0x51, 0x13, - 0x54, 0xa7, 0x28, 0xf0, 0xa9, 0xe1, 0x40, 0xa1, 0x15, 0x73, 0xe9, 0x62, - 0xfa, 0x02, 0x0b, 0x16, 0x2f, 0x30, 0xa2, 0x58, 0xbf, 0x48, 0xb7, 0x11, - 0xd6, 0x28, 0x68, 0x83, 0xe8, 0x5c, 0x89, 0x03, 0x1e, 0xbb, 0x04, 0xb1, - 0x73, 0x92, 0xc5, 0xf4, 0x24, 0xb7, 0x58, 0xa1, 0x9b, 0x9c, 0x16, 0xbf, - 0xf3, 0xfc, 0x85, 0x17, 0xe7, 0xb6, 0x2c, 0x5a, 0x25, 0x8b, 0xee, 0xf5, - 0xa7, 0xa5, 0x8b, 0x49, 0x1b, 0xbf, 0x09, 0xd1, 0x88, 0xc1, 0x92, 0x07, - 0x7c, 0xbe, 0x90, 0x61, 0x2c, 0x5f, 0x17, 0x3c, 0xeb, 0x15, 0x06, 0xea, - 0xbc, 0x71, 0xd2, 0x64, 0x29, 0x8d, 0x76, 0xde, 0x1a, 0x9d, 0x42, 0x29, - 0xe5, 0x99, 0x47, 0xc3, 0x1a, 0x28, 0x60, 0xea, 0x5b, 0xf9, 0xe7, 0x47, - 0x9a, 0x51, 0x30, 0x23, 0xe1, 0x28, 0x6d, 0xf2, 0x3c, 0xf1, 0x43, 0x27, - 0xb1, 0xf0, 0x51, 0x88, 0xc7, 0x17, 0x86, 0x43, 0x7c, 0x78, 0xd5, 0xdf, - 0x23, 0x45, 0x8b, 0xbd, 0xc5, 0x8a, 0x73, 0xcd, 0x88, 0xd6, 0xf8, 0x39, - 0x0b, 0x8b, 0x17, 0x03, 0xcb, 0x17, 0xf6, 0x87, 0xfc, 0xd6, 0xcb, 0x16, - 0x12, 0xc5, 0xc0, 0xfa, 0xc5, 0xf6, 0xb5, 0x9c, 0x58, 0xbb, 0x22, 0x58, - 0xb4, 0x0c, 0x46, 0x96, 0xc4, 0xb8, 0x31, 0xb9, 0x81, 0xc4, 0x98, 0x60, - 0x32, 0x3b, 0xfe, 0xe0, 0xb4, 0x07, 0x1f, 0xe5, 0x62, 0xfb, 0xcc, 0x58, - 0xb1, 0x7d, 0xdd, 0x25, 0x05, 0x8a, 0x73, 0xc6, 0x0c, 0x86, 0xf8, 0x9b, - 0xdc, 0x58, 0xbd, 0xa6, 0xec, 0xb1, 0x7f, 0xd9, 0xdc, 0xce, 0x31, 0x7b, - 0x8b, 0x17, 0xed, 0x0f, 0x30, 0x96, 0x2f, 0x8d, 0xd3, 0x04, 0xb1, 0x7f, - 0xe7, 0xcf, 0xcf, 0x6e, 0x7e, 0x7a, 0x58, 0xac, 0x3e, 0x68, 0xf2, 0x5b, - 0xfb, 0xad, 0x0b, 0xaf, 0x41, 0x62, 0xfe, 0x0b, 0x08, 0x7f, 0x95, 0x8b, - 0xfd, 0xc1, 0x94, 0x84, 0x3c, 0x58, 0xb3, 0x74, 0x7c, 0x5f, 0x2e, 0xba, - 0x76, 0x58, 0xac, 0x54, 0x05, 0x11, 0x16, 0x87, 0xd8, 0xf3, 0x90, 0x8d, - 0x11, 0x20, 0x50, 0x94, 0x0c, 0xa2, 0xff, 0xb7, 0xeb, 0x8f, 0x11, 0x48, - 0xd6, 0x2f, 0xbd, 0xec, 0xd9, 0x62, 0x88, 0xf8, 0x02, 0x3c, 0xbf, 0x9a, - 0x41, 0x9d, 0x41, 0x62, 0x96, 0x2f, 0xf1, 0x6b, 0x39, 0x8f, 0xf5, 0x8b, - 0xf0, 0xa2, 0x3f, 0x37, 0x58, 0xbf, 0xef, 0xbc, 0x05, 0xad, 0x4f, 0x4b, - 0x17, 0xd1, 0xcd, 0xaf, 0x2c, 0x57, 0x7a, 0x8c, 0xbc, 0x0c, 0xf9, 0x93, - 0x16, 0x06, 0x77, 0x6e, 0xe5, 0x8b, 0xff, 0xb0, 0x8b, 0x3f, 0x83, 0xf8, - 0xa2, 0x58, 0xbe, 0x6f, 0x7e, 0x56, 0x2f, 0xfe, 0x89, 0xbe, 0xfa, 0x6f, - 0x7b, 0x36, 0x58, 0xbf, 0xf6, 0x37, 0x8b, 0x3d, 0xec, 0x09, 0x62, 0x9d, - 0x10, 0x84, 0x8d, 0x68, 0x6c, 0x99, 0x03, 0x8a, 0xfd, 0x13, 0xd0, 0xa6, - 0xbf, 0xff, 0xc5, 0xee, 0x0a, 0x4c, 0xfb, 0x98, 0xe6, 0x9b, 0x9e, 0xe2, - 0xc5, 0xf9, 0xfd, 0xfc, 0x82, 0xc5, 0x4a, 0x23, 0x74, 0xcb, 0x7b, 0x3a, - 0x82, 0xc5, 0x2c, 0x7c, 0xbe, 0xbf, 0xb3, 0x91, 0xbc, 0x6f, 0x1b, 0xf7, - 0x8b, 0x17, 0x4f, 0x65, 0x8b, 0xfd, 0x3b, 0x16, 0x6e, 0xc4, 0xb1, 0x5f, - 0x3c, 0xce, 0x0c, 0xd6, 0x93, 0x0c, 0xfa, 0x01, 0x0d, 0xfa, 0x11, 0xf6, - 0xee, 0x58, 0xb7, 0x4b, 0x14, 0xc6, 0xa0, 0x31, 0x5b, 0xff, 0xa4, 0x79, - 0xb9, 0x67, 0xbe, 0xfd, 0x2c, 0x5f, 0xef, 0x66, 0xb6, 0x9f, 0x71, 0x62, - 0xa0, 0x89, 0xbf, 0x90, 0xb2, 0x2d, 0xff, 0xf6, 0x0d, 0xfd, 0x87, 0xfc, - 0xce, 0xe7, 0x65, 0x8b, 0xb3, 0xb2, 0xc5, 0xff, 0x6f, 0xfc, 0x19, 0xdf, - 0x58, 0xb1, 0x7e, 0xe7, 0xe4, 0x8d, 0x58, 0xbe, 0xf6, 0x9f, 0x65, 0x8a, - 0x93, 0xcd, 0x11, 0x4d, 0x4a, 0x62, 0x1b, 0x27, 0xe0, 0xce, 0xa1, 0x0f, - 0x7f, 0xff, 0xe8, 0xec, 0xd6, 0x7f, 0x24, 0xbd, 0xfc, 0x6f, 0xb7, 0xb9, - 0x8b, 0x17, 0x61, 0xab, 0x15, 0x28, 0x84, 0x8e, 0x6c, 0xbf, 0x4e, 0xbf, - 0x3d, 0x96, 0x2f, 0xbb, 0x3f, 0x3a, 0x58, 0xa9, 0x3d, 0x06, 0x2a, 0xbf, - 0x7f, 0x62, 0x79, 0x58, 0xbf, 0x07, 0x91, 0x0e, 0x0b, 0x16, 0x35, 0x62, - 0xb6, 0x3e, 0x68, 0x8a, 0x23, 0x8a, 0xef, 0x9c, 0xa2, 0x8f, 0x58, 0xbe, - 0x29, 0xea, 0x0b, 0x14, 0xc7, 0xfa, 0x03, 0x4f, 0x13, 0x5f, 0x7b, 0x99, - 0xe5, 0x8b, 0xff, 0xfc, 0xfd, 0x43, 0xaf, 0x38, 0x5b, 0xfd, 0xf7, 0xdd, - 0xb5, 0xb2, 0xc5, 0x4a, 0x23, 0x34, 0x47, 0x7f, 0x4f, 0x6c, 0xff, 0xe5, - 0x62, 0xfb, 0xdc, 0xc8, 0x96, 0x3e, 0x6b, 0xef, 0xef, 0x8d, 0xfb, 0x48, - 0xd6, 0x28, 0x68, 0xb5, 0xc5, 0x16, 0x34, 0xbe, 0xd3, 0xb6, 0xcb, 0x17, - 0xff, 0x36, 0x98, 0x06, 0x34, 0x0a, 0x4e, 0xb1, 0x7f, 0xff, 0xc2, 0x9d, - 0x19, 0x85, 0x3f, 0x73, 0xe7, 0x0d, 0x14, 0xe9, 0x62, 0xec, 0x23, 0x11, - 0x56, 0x6a, 0x25, 0xfa, 0x75, 0x11, 0xc0, 0xb1, 0x60, 0x2c, 0x5f, 0xf8, - 0x59, 0x1f, 0xc6, 0xd1, 0x4c, 0x16, 0x2b, 0x0f, 0x4c, 0x84, 0xaa, 0x51, - 0x3a, 0xef, 0xb5, 0x89, 0xdd, 0xbc, 0x33, 0xb9, 0x0c, 0xcb, 0xff, 0x41, - 0xbb, 0x72, 0x4e, 0xdd, 0x79, 0x62, 0xff, 0x38, 0xb5, 0xfc, 0xed, 0xc5, - 0x8b, 0xff, 0xfb, 0xcf, 0xd4, 0x0a, 0x4c, 0xf3, 0xe7, 0x70, 0xff, 0x8b, - 0x17, 0xff, 0xa4, 0xe5, 0x9d, 0x8b, 0x3b, 0x66, 0xa0, 0xb1, 0x58, 0x8a, - 0xb2, 0x5f, 0xbf, 0xde, 0xe0, 0x7f, 0xfb, 0x47, 0xac, 0x5f, 0x67, 0x9f, - 0x8b, 0x17, 0xe8, 0x8a, 0x34, 0xd8, 0x4b, 0x17, 0xff, 0xe8, 0xa2, 0x90, - 0x7b, 0x85, 0x91, 0x77, 0x91, 0xbc, 0x6f, 0xde, 0x2c, 0x5d, 0xef, 0xac, - 0x57, 0x78, 0x8b, 0x6c, 0x30, 0x66, 0xeb, 0xfe, 0xf7, 0xf0, 0x2f, 0x47, - 0x3f, 0x16, 0x2b, 0xa5, 0x58, 0xd1, 0xe8, 0x51, 0x43, 0x85, 0x88, 0x78, - 0x73, 0xe8, 0x6c, 0x06, 0x67, 0x7f, 0xe1, 0x31, 0xf8, 0xe4, 0xda, 0x35, - 0x62, 0xf9, 0xbc, 0xc4, 0xb1, 0x5b, 0x36, 0x73, 0x70, 0x84, 0x00, 0xe5, - 0x12, 0x64, 0x37, 0x8d, 0x22, 0xde, 0x1f, 0x3d, 0x46, 0xdc, 0xf1, 0xf1, - 0x45, 0x18, 0x2e, 0xa3, 0x3f, 0x3c, 0x31, 0xbe, 0xea, 0x08, 0xc0, 0xca, - 0x36, 0xfe, 0x47, 0xd3, 0xe9, 0x5f, 0xe1, 0x3a, 0xf7, 0x1f, 0xdf, 0xbd, - 0xf7, 0x20, 0x2c, 0x5e, 0x67, 0xdd, 0x62, 0xf7, 0x9e, 0x0b, 0x15, 0xb9, - 0xba, 0xf0, 0xed, 0xd9, 0xb2, 0xc5, 0xd1, 0x4a, 0xc5, 0xee, 0xda, 0x82, - 0xc5, 0xd8, 0x11, 0x87, 0xa0, 0x01, 0x82, 0x18, 0xbf, 0xe7, 0xec, 0x59, - 0xc1, 0x01, 0xd6, 0x2f, 0xfd, 0xf9, 0xea, 0x05, 0x9e, 0xfb, 0xac, 0x5f, - 0xa7, 0x4c, 0x17, 0x96, 0x2f, 0xff, 0x9f, 0x9b, 0x60, 0x5c, 0x7d, 0x89, - 0xba, 0xf2, 0xc5, 0x41, 0x1e, 0xbb, 0x9d, 0x7c, 0xff, 0xc5, 0x37, 0xfd, - 0x0c, 0xf6, 0x0d, 0xc8, 0x0b, 0x17, 0xd0, 0xc9, 0xe9, 0x62, 0xfd, 0x3a, - 0xc2, 0x75, 0x8b, 0xe1, 0x02, 0x60, 0xb1, 0x76, 0x7d, 0x62, 0xbc, 0x6e, - 0x82, 0x23, 0xbf, 0xb3, 0x5a, 0x11, 0xba, 0x58, 0xbf, 0x8a, 0x01, 0x37, - 0xf8, 0xb1, 0x7e, 0x37, 0xec, 0x4e, 0xb1, 0x6e, 0x61, 0xeb, 0xb9, 0x7d, - 0xc6, 0xc1, 0x62, 0xfb, 0x41, 0xc8, 0x4b, 0x17, 0xc3, 0x26, 0x35, 0x62, - 0xff, 0xe7, 0x83, 0x6b, 0x3b, 0x75, 0xbb, 0xf4, 0xb1, 0x52, 0x89, 0x1d, - 0x89, 0x7c, 0x47, 0x61, 0xca, 0xe2, 0x26, 0xce, 0x59, 0x19, 0x87, 0x47, - 0xd1, 0x1c, 0x7c, 0x8d, 0x98, 0x08, 0x8b, 0xd0, 0x87, 0x8e, 0x26, 0x0e, - 0x15, 0x57, 0x39, 0xd6, 0x2b, 0x11, 0x97, 0xe8, 0x5a, 0x5f, 0x60, 0xf8, - 0x12, 0xc5, 0x9f, 0x87, 0x97, 0xdc, 0x4f, 0x7f, 0x80, 0x2e, 0x39, 0x75, - 0x05, 0x8b, 0xf8, 0x0f, 0xa7, 0xe8, 0x0b, 0x16, 0x68, 0xf3, 0xe4, 0x88, - 0xd6, 0xc0, 0x58, 0xbf, 0xa7, 0x0f, 0x99, 0xc5, 0x8b, 0xff, 0xff, 0x98, - 0x61, 0xc3, 0xf2, 0x6e, 0x10, 0xa1, 0x9c, 0x2c, 0x00, 0xb8, 0xb1, 0x7f, - 0x87, 0x84, 0xe1, 0x7c, 0x4b, 0x17, 0xee, 0xb7, 0x13, 0x12, 0xc5, 0xff, - 0xf7, 0xde, 0x7c, 0xe0, 0x98, 0x46, 0x04, 0x10, 0x49, 0x17, 0xff, 0x3c, - 0xf8, 0x13, 0x08, 0xc0, 0x82, 0x09, 0x22, 0xb1, 0x14, 0x3f, 0x56, 0xad, - 0x93, 0x21, 0xdc, 0xd3, 0xd0, 0xcb, 0xbf, 0xdf, 0x13, 0x1c, 0x6c, 0x75, - 0x8a, 0xdd, 0x51, 0x61, 0xcb, 0x0a, 0x39, 0x4f, 0x1c, 0x5e, 0xcc, 0x35, - 0x22, 0xf3, 0x37, 0x4b, 0x16, 0x02, 0xc5, 0xf3, 0xfe, 0x4e, 0xb1, 0x77, - 0x32, 0x4d, 0xa1, 0xa2, 0x54, 0x34, 0x4d, 0x44, 0x3b, 0xe5, 0x1b, 0xf3, - 0x91, 0x4c, 0x16, 0x2f, 0x01, 0xbc, 0xb1, 0x7d, 0xee, 0x0a, 0x3d, 0x62, - 0xfa, 0x74, 0xfd, 0x96, 0x2b, 0x11, 0x1c, 0xc4, 0xc2, 0x1d, 0x0c, 0x9e, - 0xfe, 0xcf, 0x71, 0xcb, 0x65, 0x8b, 0xfe, 0xd3, 0x6e, 0x67, 0xe4, 0x32, - 0x58, 0xbc, 0x29, 0xd2, 0xc5, 0xb8, 0x33, 0xd9, 0x88, 0xf2, 0xb6, 0x45, - 0x87, 0xa1, 0x0f, 0x7c, 0x68, 0x81, 0xc5, 0x8b, 0x88, 0x4a, 0x90, 0x64, - 0xbf, 0xa4, 0xf3, 0xcd, 0x62, 0xc5, 0x40, 0xf4, 0x62, 0x24, 0xbf, 0xfe, - 0x10, 0x71, 0x18, 0x4f, 0xad, 0x66, 0xc7, 0xc5, 0x8b, 0xa7, 0x65, 0x8b, - 0xff, 0xff, 0xb4, 0x23, 0x7a, 0xf0, 0x98, 0x30, 0xf5, 0xc1, 0x36, 0x85, - 0xb4, 0x9a, 0xb1, 0x5f, 0x44, 0x9f, 0x06, 0x2f, 0xde, 0x98, 0x1a, 0x75, - 0x8b, 0xe1, 0x0c, 0x01, 0x2c, 0x5f, 0xe1, 0x16, 0xff, 0x9e, 0xbb, 0x96, - 0x2f, 0xe7, 0xec, 0xe5, 0x27, 0x58, 0xbc, 0x10, 0x41, 0x24, 0x5e, 0xc2, - 0xdd, 0x22, 0x30, 0xd0, 0xdf, 0xfb, 0x36, 0xc1, 0xb4, 0x0a, 0x76, 0x58, - 0xa9, 0x4d, 0x1b, 0x62, 0xa7, 0x25, 0x63, 0x90, 0x27, 0x91, 0x85, 0xff, - 0xec, 0xd7, 0xbd, 0x9c, 0x29, 0xcd, 0x41, 0x62, 0xfc, 0xff, 0xfe, 0x79, - 0x62, 0xd2, 0x61, 0xf8, 0xf1, 0x26, 0xfd, 0xfc, 0xe8, 0x41, 0x2c, 0x5f, - 0x7d, 0x88, 0xd5, 0x8a, 0x19, 0xfb, 0x6e, 0x51, 0xe2, 0xbb, 0xfb, 0xa8, - 0x70, 0x9b, 0x75, 0x8b, 0xe6, 0x8f, 0xf7, 0x16, 0x2f, 0xb4, 0x3c, 0xfa, - 0xc5, 0xe2, 0xef, 0xac, 0x6c, 0xb1, 0x58, 0x8a, 0x3e, 0x8c, 0x1c, 0x99, - 0x88, 0xee, 0xef, 0xaf, 0x7d, 0x56, 0x2f, 0xd0, 0xdf, 0x3a, 0xf2, 0xc5, - 0xfb, 0x3d, 0xe1, 0x6c, 0xb1, 0x7f, 0x3b, 0x43, 0xcf, 0xb2, 0xc5, 0xcf, - 0xb2, 0xc7, 0xcd, 0x75, 0xa1, 0xdf, 0x54, 0x69, 0xc0, 0xa0, 0x8a, 0xfc, - 0xb1, 0x7b, 0xb3, 0x1d, 0x62, 0xfb, 0x06, 0xdf, 0x58, 0xac, 0x3c, 0x1e, - 0x0f, 0xdf, 0xf1, 0xfb, 0x98, 0xa7, 0xf2, 0x35, 0x8b, 0xdf, 0xcd, 0xd6, - 0x2f, 0xbd, 0x3d, 0x71, 0x62, 0xa4, 0xff, 0x46, 0x76, 0xc3, 0xd7, 0x9a, - 0x3e, 0x56, 0x2f, 0xd8, 0x3f, 0xb4, 0x7a, 0xc5, 0xe1, 0xc9, 0xd6, 0x2f, - 0xd3, 0x07, 0x2c, 0x58, 0xb1, 0x61, 0xe1, 0xb8, 0xed, 0xfe, 0xce, 0xed, - 0xff, 0x9d, 0x77, 0x2c, 0x54, 0x68, 0xcd, 0x3b, 0x99, 0x47, 0xdb, 0x43, - 0x7c, 0x70, 0xbf, 0xc8, 0x76, 0x1a, 0x53, 0xd3, 0xb4, 0x79, 0x1c, 0x50, - 0xe7, 0xd4, 0x6d, 0x27, 0x8c, 0xf3, 0xf0, 0xd3, 0x68, 0xc3, 0x81, 0x08, - 0xb2, 0x84, 0xf0, 0x8b, 0x7b, 0x0f, 0x84, 0xdd, 0x1c, 0x4b, 0x7c, 0xfa, - 0x8a, 0x0b, 0x17, 0xfe, 0xc0, 0x01, 0xb9, 0x31, 0x0b, 0x4b, 0x16, 0x3e, - 0x1f, 0x21, 0x12, 0x5f, 0xf1, 0x0b, 0xdf, 0xce, 0xc3, 0x95, 0x8a, 0x58, - 0xbd, 0xa7, 0xd2, 0xc5, 0x61, 0xf2, 0x77, 0xe7, 0x61, 0x86, 0x5f, 0xdf, - 0x26, 0xdb, 0x8c, 0xb1, 0x7f, 0xf8, 0x36, 0x2f, 0xb4, 0x39, 0x87, 0x98, - 0xf5, 0x8a, 0x31, 0x15, 0xf8, 0x68, 0x69, 0x75, 0xff, 0xb4, 0x6e, 0xb5, - 0x81, 0x47, 0x49, 0xd6, 0x2a, 0x53, 0xaf, 0x78, 0xce, 0x43, 0x31, 0xbf, - 0x3e, 0xb6, 0x7d, 0x96, 0x2f, 0xa7, 0xc2, 0x0d, 0x62, 0xfd, 0x9c, 0xd7, - 0xa5, 0x62, 0xf7, 0x9e, 0x56, 0x2f, 0xcf, 0x3b, 0x31, 0xd6, 0x2f, 0xf7, - 0xe4, 0xbc, 0x43, 0xe9, 0x62, 0xc4, 0xb1, 0x73, 0x9d, 0x62, 0xb0, 0xd4, - 0x10, 0x8d, 0x41, 0x1c, 0xee, 0x50, 0x43, 0x9c, 0x28, 0x12, 0xe5, 0xff, - 0xb5, 0x08, 0x1f, 0x8e, 0x5d, 0x41, 0x62, 0xfc, 0x53, 0xd4, 0xf1, 0x62, - 0xff, 0xd8, 0xe4, 0xde, 0xe0, 0x52, 0x4b, 0x16, 0xd4, 0x9f, 0x2f, 0x0a, - 0x2d, 0xfc, 0x46, 0x6b, 0x42, 0x9a, 0xf9, 0xf5, 0x3e, 0x58, 0xbf, 0xff, - 0x14, 0xeb, 0x4f, 0x3b, 0x60, 0x04, 0xc5, 0xba, 0xc5, 0xf7, 0x32, 0x60, - 0xb1, 0x43, 0x44, 0xce, 0xe4, 0x44, 0xab, 0x7b, 0xf9, 0xd2, 0xc5, 0xfe, - 0xfc, 0xe4, 0x52, 0x43, 0x58, 0xbc, 0xf2, 0x75, 0x8b, 0x0c, 0x67, 0x9f, - 0xa3, 0x3b, 0x4c, 0x11, 0x2a, 0x4d, 0xb7, 0xd0, 0x79, 0xdd, 0x62, 0xee, - 0x80, 0xb1, 0x7f, 0x1e, 0x78, 0x07, 0xdd, 0x62, 0xf7, 0x24, 0xd0, 0x1e, - 0x47, 0x06, 0x6f, 0xa1, 0x3a, 0xd9, 0x62, 0xfd, 0x9d, 0xcf, 0x31, 0x2c, - 0x54, 0x47, 0x9e, 0x44, 0x97, 0xf6, 0x68, 0x00, 0x72, 0x58, 0xa6, 0x3c, - 0xf1, 0x11, 0x5f, 0xc5, 0xe7, 0xd8, 0xa5, 0x62, 0xdc, 0x58, 0xba, 0x34, - 0xd9, 0x62, 0xa4, 0xf7, 0x60, 0x5a, 0xc2, 0x57, 0xbb, 0x7d, 0xd6, 0x2f, - 0x6a, 0x60, 0xb1, 0x7e, 0x91, 0xfe, 0x7b, 0xf5, 0x8a, 0xd1, 0xe5, 0x76, - 0x1d, 0xbf, 0xce, 0x3d, 0x60, 0xd8, 0xeb, 0x17, 0xd1, 0x72, 0x78, 0xb1, - 0x7f, 0xe8, 0xec, 0x0c, 0xa4, 0xb6, 0x7d, 0x2c, 0x5b, 0x0e, 0x89, 0x90, - 0x19, 0xf8, 0x92, 0xff, 0xff, 0xfb, 0x40, 0x8e, 0xc3, 0x32, 0x1f, 0xcd, - 0xdf, 0x5a, 0xcf, 0x7d, 0xd9, 0xf6, 0x58, 0xbe, 0xc3, 0x86, 0x35, 0x8b, - 0xf9, 0xcd, 0xf7, 0x1b, 0xa5, 0x8b, 0xe8, 0xa4, 0xbc, 0xb1, 0x7f, 0xff, - 0x43, 0xed, 0x03, 0x3d, 0xf9, 0xfe, 0xe2, 0x06, 0x12, 0xc5, 0x1a, 0x88, - 0x1d, 0x11, 0xd4, 0xaa, 0xd6, 0x76, 0x9f, 0xc2, 0xf5, 0x8d, 0x4a, 0x10, - 0x5c, 0x24, 0x14, 0x2c, 0x6f, 0x77, 0x9f, 0x75, 0x8b, 0xff, 0xfe, 0xed, - 0x23, 0x72, 0x6d, 0x1a, 0x4c, 0xe5, 0x80, 0x17, 0x16, 0x2f, 0xfd, 0xf0, - 0xf9, 0x9a, 0xdd, 0x9b, 0x75, 0x48, 0x18, 0x5f, 0xfd, 0xb4, 0x9b, 0x9a, - 0xf7, 0xa7, 0x38, 0xb1, 0x43, 0x44, 0xa9, 0x27, 0xd4, 0xa6, 0x3a, 0xf0, - 0xfb, 0xbf, 0xe1, 0x31, 0xb9, 0xef, 0x67, 0xd6, 0x2e, 0xed, 0x8b, 0x15, - 0xf3, 0xd3, 0x63, 0xab, 0xfd, 0xda, 0x4b, 0x03, 0xc3, 0xac, 0x5f, 0xef, - 0xc9, 0x78, 0x0d, 0xe5, 0x8b, 0xff, 0xd0, 0xd4, 0xc3, 0x7f, 0xbf, 0xc9, - 0x8e, 0xb1, 0x5c, 0x3f, 0xe1, 0x19, 0xdf, 0xff, 0xa4, 0xb7, 0x62, 0x06, - 0x0f, 0x84, 0x26, 0x82, 0xc5, 0xff, 0xde, 0x14, 0xb6, 0xa4, 0xd3, 0x45, - 0xb2, 0xc5, 0x1d, 0x13, 0x8c, 0xa9, 0x7f, 0xf1, 0xd8, 0x7f, 0x7c, 0x1b, - 0x90, 0x16, 0x2e, 0x11, 0xab, 0x14, 0xe7, 0xb8, 0x48, 0x77, 0xfd, 0xbb, - 0x9c, 0xee, 0x67, 0x04, 0xb1, 0x7f, 0x9b, 0xae, 0x07, 0xaf, 0xb2, 0xc5, - 0xff, 0xd8, 0x13, 0x00, 0xc6, 0x0e, 0x26, 0xf2, 0xc5, 0xb8, 0x03, 0xfe, - 0x23, 0x6b, 0xf9, 0xbf, 0x84, 0x7c, 0x58, 0xbe, 0x17, 0xf3, 0x75, 0x8b, - 0xf9, 0xca, 0x7e, 0xfb, 0x2c, 0x54, 0x17, 0x02, 0x06, 0xf4, 0xe4, 0x3a, - 0x85, 0x99, 0xe1, 0x7d, 0xf7, 0xe2, 0x20, 0xf4, 0x2e, 0xbb, 0x13, 0xc7, - 0x16, 0x77, 0x12, 0x5f, 0xfd, 0xee, 0x6d, 0x21, 0x94, 0xfd, 0xf6, 0x58, - 0xbf, 0xdc, 0x9d, 0x43, 0x77, 0xd9, 0x62, 0xfb, 0xee, 0xc0, 0x58, 0xa2, - 0x44, 0xff, 0x11, 0xfc, 0x6d, 0x7e, 0xe1, 0x9c, 0x04, 0x7a, 0xc5, 0xfe, - 0xc2, 0xf3, 0xe8, 0x1c, 0x58, 0xb9, 0xfc, 0xb1, 0x7f, 0xf7, 0xf3, 0x7c, - 0xd7, 0x3a, 0xf0, 0x67, 0x58, 0xbf, 0x67, 0x67, 0x21, 0xac, 0x50, 0xcf, - 0xc8, 0x92, 0x6e, 0x68, 0x4a, 0x2a, 0xb9, 0x08, 0x9b, 0x6b, 0x13, 0x3d, - 0x34, 0xbb, 0x50, 0xdd, 0xbd, 0x9b, 0x09, 0x62, 0xf9, 0x88, 0xa5, 0x62, - 0xe1, 0x1a, 0x46, 0xf8, 0x21, 0xea, 0x95, 0x42, 0x99, 0x1b, 0x67, 0xde, - 0xae, 0xfe, 0xeb, 0x17, 0xda, 0x03, 0xc1, 0x62, 0xfc, 0xde, 0xd4, 0xc1, - 0x62, 0xff, 0xbc, 0xe4, 0xdd, 0x78, 0x52, 0xb1, 0x7c, 0x5e, 0x17, 0xe5, - 0x10, 0x9f, 0x23, 0x0c, 0xa2, 0xff, 0xf8, 0xff, 0x7e, 0x41, 0xfc, 0x1e, - 0xa7, 0xf2, 0xb1, 0x7b, 0xe2, 0x8f, 0x58, 0xbf, 0xfa, 0x76, 0xe7, 0xd8, - 0x38, 0x6a, 0x7a, 0x58, 0xbf, 0xf3, 0x97, 0xb8, 0xe3, 0x07, 0x40, 0x58, - 0xbf, 0xfe, 0xfb, 0xe7, 0x6c, 0xe3, 0x41, 0xca, 0x7b, 0x2c, 0x5f, 0xf6, - 0xef, 0x81, 0x06, 0x36, 0xd9, 0x62, 0xdc, 0x58, 0xae, 0x8f, 0x3e, 0x23, - 0xda, 0xe2, 0x31, 0x3d, 0x0a, 0x0b, 0xff, 0xec, 0xec, 0xfe, 0x80, 0x86, - 0xc4, 0x0c, 0x25, 0x8b, 0xf7, 0xdc, 0x01, 0xf9, 0x62, 0xec, 0x23, 0x0f, - 0xeb, 0x75, 0x0b, 0x37, 0x11, 0xa1, 0xda, 0x14, 0x55, 0xb2, 0xa0, 0x3d, - 0x47, 0xa9, 0x51, 0xbb, 0x32, 0xb6, 0x67, 0x51, 0xe1, 0x2d, 0x8f, 0x0d, - 0x9e, 0x13, 0xac, 0x8f, 0xdf, 0xa8, 0xf0, 0x84, 0x52, 0x92, 0xef, 0x61, - 0x1a, 0xb1, 0x7f, 0x98, 0x7f, 0xcc, 0xeb, 0xcb, 0x15, 0x87, 0xa2, 0x68, - 0xed, 0x74, 0xd9, 0x43, 0xfe, 0x1a, 0x44, 0xfd, 0xc9, 0x60, 0x7e, 0xa6, - 0x8f, 0x77, 0x43, 0xd2, 0xe8, 0x1d, 0x62, 0xf0, 0x59, 0xf5, 0x8b, 0xa4, - 0xa0, 0x6d, 0xbc, 0x31, 0x78, 0xa4, 0x25, 0x8b, 0xe7, 0xdd, 0xc6, 0xb1, - 0x78, 0x38, 0x1d, 0x62, 0xa0, 0x88, 0xac, 0x2b, 0xf0, 0xe8, 0x88, 0xef, - 0xff, 0xf7, 0x37, 0xfb, 0xf5, 0xed, 0xff, 0x3b, 0x67, 0x5e, 0x61, 0xac, - 0x5f, 0xfd, 0xe9, 0x72, 0xf6, 0xa7, 0xcd, 0xe5, 0x8a, 0x94, 0x55, 0x74, - 0xcf, 0x7b, 0xcf, 0x12, 0xc5, 0xfc, 0x0f, 0x7a, 0x48, 0x0b, 0x15, 0x27, - 0x98, 0xc3, 0xd7, 0x02, 0x56, 0x2f, 0xcc, 0x18, 0x98, 0x35, 0x8a, 0x01, - 0xe0, 0x88, 0x5e, 0xa2, 0x44, 0x1e, 0x98, 0x6f, 0x36, 0x41, 0x62, 0xe6, - 0x25, 0x8b, 0x62, 0xc5, 0x7c, 0xd3, 0xf6, 0x16, 0xac, 0x44, 0x53, 0x92, - 0x32, 0x1d, 0xff, 0xcd, 0x03, 0x33, 0xd9, 0xf9, 0xd0, 0x16, 0x2e, 0x00, - 0x16, 0x2f, 0xfb, 0x7f, 0xbe, 0x89, 0xfd, 0xc5, 0x8b, 0xec, 0xd8, 0x5e, - 0x58, 0xa8, 0x22, 0xec, 0xe8, 0xa0, 0x18, 0xf1, 0xd5, 0xff, 0xc1, 0x10, - 0x9b, 0x8f, 0x9d, 0x9b, 0x4b, 0x17, 0xfd, 0xa9, 0xec, 0xfe, 0xe6, 0x1a, - 0xb1, 0x58, 0x88, 0x28, 0xf4, 0x6b, 0xf9, 0xff, 0xfc, 0x03, 0x2c, 0x5e, - 0x6f, 0xf1, 0x62, 0xa4, 0xfb, 0xc0, 0x4a, 0x22, 0xdb, 0xff, 0xbb, 0x6b, - 0x07, 0x2e, 0x2d, 0xe7, 0x4b, 0x17, 0xe9, 0xf7, 0x33, 0xcb, 0x17, 0xff, - 0xf8, 0x6e, 0x5b, 0xe7, 0x5e, 0x35, 0xb3, 0x5e, 0xf4, 0xec, 0xb1, 0x52, - 0x8d, 0x31, 0xa3, 0xb9, 0x45, 0xfd, 0xc8, 0xbe, 0xe1, 0x79, 0x62, 0xff, - 0x71, 0xf0, 0xb3, 0xa0, 0x96, 0x2f, 0xff, 0xf6, 0x7b, 0xcd, 0xa2, 0x9e, - 0xa0, 0x1e, 0x80, 0x77, 0xe2, 0xc5, 0x62, 0x32, 0x23, 0xcc, 0x4e, 0x69, - 0x7e, 0x17, 0x5b, 0xe1, 0xd6, 0x2f, 0xf3, 0x85, 0x84, 0x3f, 0xca, 0xc5, - 0xf3, 0x74, 0x43, 0x58, 0xa3, 0x9e, 0xb0, 0x0c, 0xef, 0xff, 0x4f, 0xb8, - 0x2d, 0xcc, 0xfb, 0x14, 0xca, 0xc5, 0x84, 0xb1, 0x7e, 0x00, 0x60, 0x68, - 0x2c, 0x57, 0xcd, 0xe3, 0x09, 0x5f, 0x47, 0x99, 0x1f, 0x05, 0x8b, 0xff, - 0xc4, 0x3f, 0xe7, 0x41, 0xb1, 0x78, 0x86, 0xb1, 0x68, 0x49, 0xfb, 0x39, - 0x5d, 0xff, 0xfc, 0xe1, 0x7d, 0xb7, 0x92, 0x1e, 0x75, 0xef, 0xb0, 0xd6, - 0x2f, 0xfb, 0x6f, 0x43, 0x23, 0xd8, 0x80, 0xb1, 0x7d, 0x17, 0xdb, 0xcb, - 0x15, 0x87, 0xc2, 0xe7, 0xb7, 0xe9, 0x6f, 0xb4, 0x7a, 0xc5, 0xf6, 0x75, - 0x9c, 0x58, 0xbb, 0x07, 0xa3, 0xcd, 0xf9, 0x55, 0xe7, 0x0a, 0x3d, 0x62, - 0xff, 0x67, 0x6e, 0x7b, 0xd2, 0x75, 0x8a, 0xd1, 0xeb, 0xfc, 0x86, 0xff, - 0x78, 0x65, 0x21, 0x37, 0x4b, 0x15, 0x2b, 0x83, 0xc3, 0x32, 0xc8, 0x40, - 0x9a, 0x44, 0xf0, 0x87, 0x8a, 0x12, 0xda, 0x26, 0xfc, 0x2f, 0x89, 0xb7, - 0x90, 0x84, 0x0c, 0x8a, 0xff, 0xd0, 0x72, 0x80, 0x7f, 0xfc, 0x8d, 0x62, - 0xe0, 0x9d, 0x62, 0xf6, 0x16, 0xeb, 0x17, 0x49, 0xd6, 0x2c, 0x7d, 0xcd, - 0xa4, 0x70, 0xed, 0x49, 0xfb, 0xba, 0x65, 0xff, 0x60, 0xcd, 0x68, 0xbf, - 0x3b, 0x2c, 0x5f, 0x85, 0xed, 0xb8, 0x6a, 0xc5, 0xff, 0xcd, 0xb7, 0x18, - 0x73, 0xb4, 0xc2, 0x56, 0x2f, 0xf3, 0x96, 0xdf, 0x90, 0xc9, 0x62, 0xfe, - 0xce, 0x47, 0x66, 0xa5, 0x62, 0xba, 0x4f, 0xa3, 0x50, 0xb7, 0xf9, 0x01, - 0x1e, 0x70, 0xb3, 0xc8, 0xb1, 0xc6, 0x97, 0xfd, 0x21, 0xfd, 0xba, 0xf7, - 0xe5, 0x62, 0xf9, 0xe4, 0xa2, 0x58, 0xbc, 0x1c, 0xc7, 0xac, 0x5f, 0x3f, - 0x04, 0x75, 0x8b, 0x82, 0x09, 0x62, 0xfa, 0x4f, 0x31, 0x90, 0x37, 0xa1, - 0x11, 0xd4, 0xba, 0x6b, 0x1d, 0x8a, 0xa1, 0x18, 0x58, 0xe3, 0x15, 0xc8, - 0x62, 0xef, 0x0c, 0x5e, 0x89, 0xde, 0xb2, 0xf2, 0x8a, 0x33, 0x9d, 0x43, - 0x98, 0xf1, 0xbe, 0x34, 0x3a, 0x01, 0x19, 0x71, 0x46, 0x03, 0xc9, 0xd1, - 0x4f, 0x4a, 0x9b, 0xec, 0xda, 0x11, 0xdc, 0x71, 0x17, 0x72, 0xf5, 0xfe, - 0xe7, 0x30, 0x81, 0x1d, 0x8b, 0x17, 0xc4, 0xfd, 0xd2, 0xb1, 0x68, 0xe5, - 0x8b, 0x81, 0x2b, 0x17, 0x8b, 0x38, 0xb1, 0x44, 0x6c, 0xc3, 0x17, 0xb4, - 0x4b, 0x17, 0xf7, 0x30, 0x81, 0x1d, 0x8b, 0x16, 0x35, 0x62, 0xf4, 0x6d, - 0x24, 0xb1, 0x46, 0x26, 0x75, 0x86, 0xce, 0x48, 0xc9, 0x00, 0x21, 0xe0, - 0x98, 0x8c, 0x02, 0x13, 0xbe, 0xf3, 0x31, 0x2c, 0x57, 0x64, 0x49, 0x04, - 0xe3, 0x78, 0x2f, 0xc1, 0x62, 0xff, 0xdf, 0x68, 0x16, 0x7b, 0xd2, 0x75, - 0x8b, 0xff, 0xc3, 0xfc, 0x9d, 0x98, 0xba, 0xe0, 0x8e, 0xb1, 0x7f, 0xed, - 0xf3, 0x5a, 0x98, 0x72, 0x40, 0xb1, 0x7f, 0xcd, 0xbc, 0x0f, 0xfe, 0x9a, - 0x3d, 0x62, 0xa0, 0x98, 0x41, 0xa7, 0xc2, 0x4b, 0xec, 0x81, 0x7f, 0x4c, - 0x3d, 0x1d, 0x9f, 0x58, 0xbf, 0xc0, 0x60, 0x4c, 0x7c, 0xc1, 0x62, 0xfe, - 0xc9, 0xea, 0x0e, 0x75, 0x8b, 0xf9, 0xbf, 0xf9, 0xeb, 0x8b, 0x17, 0xa0, - 0xf9, 0xa3, 0xdd, 0xf9, 0x75, 0xfe, 0xfe, 0x0c, 0xa7, 0x09, 0x62, 0xa0, - 0x8f, 0x6e, 0xa1, 0x26, 0x03, 0x2b, 0xb0, 0x96, 0x2f, 0x69, 0xb7, 0x58, - 0xb3, 0x2c, 0x50, 0xcf, 0x14, 0xd1, 0x6e, 0x0f, 0x5f, 0xfd, 0xb4, 0x50, - 0x9d, 0x6d, 0xfe, 0x9a, 0x3d, 0x62, 0xfc, 0x23, 0xce, 0x79, 0x62, 0xfb, - 0x01, 0x20, 0x58, 0xa0, 0x1e, 0x51, 0x14, 0x56, 0xc8, 0xe8, 0x63, 0x0f, - 0x42, 0x5e, 0xa5, 0x70, 0x9f, 0x23, 0x27, 0x74, 0x16, 0x8c, 0x9c, 0x51, - 0xb1, 0xdc, 0x46, 0xac, 0x5f, 0xfe, 0x2d, 0x8c, 0x89, 0xcb, 0x07, 0x84, - 0x6a, 0xc5, 0xff, 0x08, 0x41, 0x93, 0x98, 0x0f, 0x2c, 0x5f, 0x7b, 0x8d, - 0xc5, 0x8b, 0x47, 0x2c, 0x5e, 0xfc, 0xc2, 0x4d, 0xc7, 0x08, 0xee, 0x04, - 0xac, 0x5f, 0xf0, 0x72, 0x38, 0xa1, 0x25, 0xe5, 0x8a, 0x88, 0xf4, 0xb8, - 0x2f, 0x7f, 0xdd, 0xa7, 0xa8, 0xe9, 0xd6, 0x12, 0xc5, 0xec, 0x7f, 0xac, - 0x54, 0x6c, 0x7f, 0xb8, 0x47, 0xf3, 0xeb, 0xf9, 0xfa, 0xee, 0xfc, 0xf9, - 0x62, 0xfc, 0x2e, 0x3b, 0xf4, 0xb1, 0x7f, 0x85, 0xd7, 0x76, 0xff, 0x6e, - 0x2c, 0x5f, 0x67, 0xbe, 0xeb, 0x14, 0xc7, 0xb8, 0x47, 0x57, 0x83, 0xc9, - 0x58, 0xb8, 0x46, 0xac, 0x5f, 0xa4, 0x88, 0x47, 0x58, 0xaf, 0x9e, 0x00, - 0x63, 0x37, 0xbd, 0x21, 0xac, 0x5f, 0xec, 0x1e, 0x9b, 0x7f, 0x01, 0x62, - 0xfd, 0x84, 0x3f, 0xca, 0xc5, 0x61, 0xfd, 0x7c, 0x78, 0x23, 0x5b, 0xb3, - 0x8b, 0x14, 0xb1, 0x4b, 0x16, 0x84, 0x45, 0xc7, 0x83, 0x2a, 0x07, 0xac, - 0x02, 0xfb, 0xfb, 0x7f, 0xcf, 0x84, 0x1a, 0xc5, 0x4a, 0xe4, 0xe6, 0xc9, - 0x90, 0x74, 0x36, 0x30, 0x08, 0xf3, 0x38, 0x8c, 0xb5, 0x08, 0x56, 0x20, - 0x25, 0xde, 0x42, 0x77, 0xd0, 0x85, 0x0c, 0x8a, 0xf8, 0x7a, 0x68, 0x2c, - 0x5f, 0xff, 0xc4, 0xde, 0xe6, 0x68, 0x00, 0x9c, 0xeb, 0xdc, 0x75, 0x8b, - 0xff, 0xff, 0xfb, 0x3d, 0xc0, 0xf9, 0xa6, 0x2f, 0x7d, 0xa0, 0x3d, 0x63, - 0x9b, 0x9d, 0x7b, 0x8e, 0xb1, 0x58, 0x8e, 0x63, 0xad, 0xdd, 0x09, 0x58, - 0xb4, 0x72, 0xc5, 0x18, 0x6b, 0x30, 0x5e, 0x86, 0x7d, 0xfe, 0x4e, 0xa9, - 0x4e, 0x69, 0xa3, 0x78, 0xbc, 0x39, 0x25, 0x8a, 0x32, 0x10, 0x07, 0xb1, - 0xba, 0x0c, 0xd7, 0x59, 0x7b, 0x47, 0x82, 0x38, 0x7a, 0x65, 0x68, 0x0e, - 0x6c, 0x69, 0x5b, 0xce, 0xde, 0x75, 0x08, 0xe7, 0xa6, 0xb3, 0x7e, 0x5b, - 0x0b, 0x5a, 0x6e, 0x70, 0x4b, 0x38, 0x29, 0xc4, 0xdf, 0x2d, 0x8a, 0x72, - 0xd0, 0x29, 0x4b, 0x61, 0x94, 0x5f, 0x0c, 0x62, 0x25, 0x8b, 0xb6, 0xec, - 0xb1, 0x76, 0x7d, 0x62, 0xba, 0x36, 0x5e, 0x1b, 0xbf, 0x08, 0xd7, 0x9d, - 0x96, 0x2f, 0xff, 0x4c, 0x04, 0x3c, 0x6e, 0x73, 0x21, 0x2b, 0x17, 0xfb, - 0x7f, 0xb1, 0x48, 0xba, 0x58, 0xbf, 0x08, 0x36, 0x9e, 0x96, 0x2f, 0xdb, - 0xfe, 0x7a, 0xee, 0x58, 0xbd, 0x2f, 0x1e, 0xb1, 0x70, 0xbb, 0xf5, 0x8b, - 0xf7, 0xdb, 0x47, 0x75, 0x8b, 0xc1, 0xcc, 0x7a, 0xc5, 0xfc, 0x1e, 0xff, - 0x9e, 0xbb, 0x96, 0x28, 0xc4, 0x74, 0x77, 0x85, 0xd0, 0x1f, 0xdc, 0x77, - 0x85, 0x02, 0x21, 0xbc, 0xe5, 0x8b, 0x17, 0xf7, 0xdf, 0xbf, 0xfc, 0xec, - 0xb1, 0x61, 0xc0, 0xf3, 0xf7, 0x1b, 0xbe, 0x93, 0xb7, 0x16, 0x2e, 0x00, - 0x4b, 0x17, 0xf7, 0xe5, 0xe3, 0xce, 0xeb, 0x17, 0xfa, 0x3c, 0x5a, 0xfc, - 0xb8, 0xd6, 0x28, 0xc4, 0x40, 0x6e, 0x32, 0xe6, 0x15, 0xb2, 0xb6, 0x38, - 0x15, 0x0d, 0x27, 0x73, 0x5e, 0xa3, 0x12, 0x78, 0x56, 0xfc, 0xa7, 0xd0, - 0xa2, 0xbf, 0xee, 0xee, 0x0f, 0xf3, 0xa6, 0x25, 0x8b, 0x83, 0xee, 0x58, - 0xbf, 0xb0, 0x2c, 0xc2, 0x35, 0x62, 0xff, 0x33, 0xc3, 0xf9, 0xe9, 0x58, - 0xb9, 0xf6, 0x58, 0xf9, 0xb2, 0xba, 0x43, 0x58, 0xbc, 0xd9, 0xc5, 0x8b, - 0xf3, 0x6c, 0xe2, 0x82, 0xc5, 0xe0, 0x02, 0x56, 0x2a, 0x07, 0xf4, 0x71, - 0x8f, 0x8e, 0x11, 0x4d, 0xec, 0x23, 0x56, 0x2a, 0x53, 0xb2, 0xd8, 0xf1, - 0xc7, 0x0e, 0xc0, 0xd0, 0xa2, 0xee, 0x3b, 0xbf, 0xf7, 0x35, 0x3e, 0x26, - 0x39, 0xdd, 0x62, 0xff, 0xf4, 0xf3, 0x92, 0x7c, 0xf3, 0xf3, 0xec, 0xb1, - 0x79, 0xcb, 0xcb, 0x15, 0xb9, 0xf2, 0xfd, 0x26, 0xff, 0xdf, 0x7f, 0xce, - 0x6a, 0x1a, 0x82, 0xc5, 0xff, 0xc7, 0x9f, 0x71, 0xb3, 0x40, 0x3e, 0x2c, - 0x5f, 0xc5, 0x30, 0x3c, 0xba, 0xc5, 0x00, 0xfc, 0x09, 0x12, 0xfd, 0xf9, - 0xda, 0x7e, 0xb1, 0x7d, 0x3b, 0x3e, 0x96, 0x2f, 0xda, 0x63, 0xce, 0xeb, - 0x17, 0xff, 0xdb, 0x6b, 0x25, 0xcb, 0x05, 0xbb, 0x10, 0xd6, 0x2f, 0xbb, - 0x16, 0x71, 0x62, 0xa4, 0xfc, 0xf1, 0x3e, 0xf7, 0x6c, 0x1a, 0xc5, 0xfe, - 0xf3, 0xf6, 0x7f, 0x42, 0x52, 0x2c, 0x75, 0x8b, 0xe3, 0x75, 0x31, 0x8e, - 0x78, 0xe1, 0x9a, 0xdb, 0x06, 0x8a, 0x32, 0x66, 0xbb, 0x0d, 0x58, 0xa3, - 0x15, 0xc0, 0x64, 0x28, 0xf7, 0x23, 0x78, 0x57, 0xc4, 0x43, 0xf2, 0x96, - 0x23, 0x28, 0x4e, 0x72, 0x18, 0x71, 0xc4, 0xf7, 0xff, 0x9b, 0xb4, 0xe0, - 0xda, 0x19, 0xf7, 0x09, 0x62, 0xfb, 0x66, 0xd6, 0xeb, 0x17, 0x75, 0x05, - 0x8a, 0x93, 0x7c, 0x22, 0x5b, 0xd2, 0x52, 0xb1, 0x7c, 0xc3, 0x98, 0xf5, - 0x8b, 0xda, 0x6e, 0xcb, 0x17, 0xe1, 0xeb, 0x59, 0xc5, 0x8b, 0xb3, 0x4b, - 0x15, 0x03, 0xdf, 0x61, 0xf0, 0x14, 0xd4, 0x13, 0x76, 0xd4, 0x22, 0x4e, - 0x40, 0x01, 0xb2, 0x84, 0x25, 0xfe, 0x28, 0x16, 0x1e, 0x77, 0x58, 0xbd, - 0x13, 0x79, 0x62, 0xf1, 0x49, 0xd6, 0x2a, 0x4d, 0xd4, 0x43, 0xd7, 0xe7, - 0xf9, 0x4c, 0x16, 0x2d, 0xde, 0x2c, 0x5f, 0x81, 0xf9, 0xcd, 0x2c, 0x54, - 0x46, 0xff, 0x42, 0xf7, 0xda, 0x67, 0xd9, 0x62, 0xee, 0x3a, 0xc5, 0x49, - 0xee, 0x39, 0x13, 0x11, 0xdb, 0x16, 0x2f, 0x66, 0x1a, 0xb1, 0x43, 0x35, - 0xdd, 0xc2, 0x37, 0x89, 0xa0, 0xb1, 0x47, 0x3c, 0x0f, 0x92, 0x5f, 0xf0, - 0x7a, 0xf4, 0x1c, 0xbd, 0xc5, 0x8b, 0xff, 0x44, 0x63, 0x75, 0x09, 0x3c, - 0xf4, 0xb1, 0x5c, 0x3f, 0xe0, 0xce, 0xea, 0x55, 0x80, 0xe2, 0xa3, 0xb6, - 0xe8, 0x87, 0xf0, 0xc2, 0x68, 0x4d, 0x0a, 0x14, 0x17, 0xed, 0x6e, 0xcd, - 0xba, 0xa5, 0x0d, 0x2f, 0xee, 0x66, 0x87, 0xfc, 0x58, 0xb7, 0x6c, 0x3e, - 0x5e, 0x1b, 0xde, 0x13, 0x71, 0x62, 0x9c, 0xf1, 0xbe, 0x53, 0x7a, 0x38, - 0x5e, 0x58, 0xb9, 0xfb, 0x2c, 0x5f, 0xfb, 0x7f, 0xc9, 0x37, 0xb9, 0x9b, - 0x2c, 0x5f, 0x69, 0xe2, 0xe2, 0xc5, 0xed, 0x30, 0x6b, 0x15, 0x88, 0x82, - 0xd2, 0x03, 0x12, 0x5d, 0x86, 0xac, 0x5f, 0xfd, 0x27, 0x71, 0xe1, 0x1b, - 0xf9, 0x3a, 0xc5, 0x7c, 0xf7, 0x3c, 0x31, 0x7d, 0x87, 0x90, 0xd6, 0x28, - 0x69, 0xd6, 0x6e, 0x42, 0x72, 0x1e, 0x42, 0x6f, 0xd0, 0x8a, 0xec, 0x45, - 0x70, 0x7f, 0x58, 0xbf, 0x13, 0x04, 0x19, 0xd6, 0x2f, 0xff, 0xf0, 0xb3, - 0xf8, 0x40, 0xc2, 0xf7, 0xf1, 0xbc, 0x29, 0x58, 0xbe, 0x6e, 0xbd, 0x8b, - 0x16, 0xe9, 0x62, 0xcf, 0x12, 0x2f, 0x88, 0xab, 0x8b, 0xc1, 0x11, 0xd1, - 0xa9, 0x8d, 0x7e, 0x1a, 0xf7, 0xff, 0xbd, 0xf9, 0xe4, 0xfe, 0x5f, 0x69, - 0x35, 0x62, 0xe1, 0x77, 0x2c, 0x5f, 0xf0, 0xd8, 0xed, 0x09, 0x7d, 0xd6, - 0x29, 0xd1, 0x3e, 0x04, 0xb2, 0x1b, 0xbf, 0xa6, 0x28, 0x3e, 0xa0, 0xb1, - 0x6d, 0xd6, 0x2b, 0xe7, 0x85, 0xe2, 0xfb, 0x8f, 0x2b, 0x17, 0xbc, 0x52, - 0xb1, 0x7d, 0x11, 0x49, 0xd6, 0x2b, 0x0f, 0x5b, 0x42, 0xe4, 0x39, 0x7f, - 0xbc, 0xe1, 0x44, 0x4c, 0x12, 0xc5, 0xdf, 0x75, 0x8b, 0xfe, 0x96, 0x87, - 0xe7, 0x66, 0xd9, 0x62, 0xf6, 0x68, 0x0b, 0x17, 0xfd, 0x9d, 0xa4, 0x7f, - 0xc7, 0xf2, 0xc5, 0xee, 0x30, 0x16, 0x28, 0x8f, 0x5f, 0xc7, 0x55, 0x1e, - 0x8e, 0x63, 0x8b, 0xfc, 0xeb, 0xce, 0x97, 0xf0, 0x83, 0x00, 0x27, 0xa5, - 0x8b, 0x9f, 0x65, 0x8b, 0xe3, 0xfb, 0x37, 0x58, 0xbd, 0xa6, 0x82, 0xc5, - 0xdd, 0x4a, 0xc5, 0xff, 0x33, 0x75, 0xf7, 0xd9, 0x89, 0x62, 0xdb, 0x49, - 0xe8, 0x8c, 0x62, 0xa5, 0x17, 0x58, 0x48, 0xed, 0xd7, 0x05, 0xe5, 0x8b, - 0xe8, 0x00, 0xb1, 0x62, 0xff, 0xf0, 0x09, 0x8f, 0xac, 0x9e, 0xa0, 0xe7, - 0x58, 0xa9, 0x3e, 0xc1, 0x11, 0x5f, 0xde, 0x26, 0x07, 0x04, 0xb1, 0x73, - 0xec, 0xb1, 0x7f, 0xba, 0xe3, 0xf1, 0xfa, 0xf2, 0xc5, 0x4a, 0xe6, 0x18, - 0xdc, 0x31, 0xe3, 0xa2, 0xd7, 0x8c, 0x72, 0x24, 0x0d, 0x18, 0xfe, 0x1a, - 0x4c, 0x5a, 0x50, 0x85, 0xe1, 0x0f, 0x8b, 0x84, 0x31, 0x7f, 0xff, 0xff, - 0x3f, 0xbf, 0x87, 0xf9, 0x67, 0x66, 0xdf, 0xee, 0x1f, 0x9c, 0xb7, 0xcf, - 0x7d, 0xd6, 0x2e, 0x9f, 0xac, 0x5f, 0x7b, 0x53, 0xd9, 0x62, 0x86, 0x8c, - 0x73, 0xc2, 0x2d, 0x85, 0xef, 0xbd, 0xc1, 0x47, 0xac, 0x5f, 0xba, 0x81, - 0xe7, 0xcb, 0x14, 0xe7, 0xa2, 0x22, 0x7b, 0xe9, 0xe8, 0x51, 0xeb, 0x17, - 0xff, 0xed, 0xc5, 0xf3, 0x5c, 0xa7, 0xf2, 0x14, 0x96, 0x2c, 0x54, 0x47, - 0xfa, 0x44, 0xf7, 0xce, 0x3e, 0xe7, 0x58, 0xa9, 0x4d, 0xab, 0xf0, 0x85, - 0x68, 0x4f, 0x04, 0x45, 0x7f, 0x41, 0xcb, 0x0f, 0x2b, 0x17, 0x9f, 0x50, - 0x58, 0xb7, 0xe4, 0xf2, 0x60, 0x59, 0x7e, 0xfc, 0x82, 0x3b, 0x16, 0x2f, - 0x98, 0x70, 0xd9, 0x62, 0xf7, 0x8d, 0xd9, 0x62, 0xff, 0xb3, 0xdf, 0xc3, - 0x93, 0x79, 0x62, 0xfe, 0xec, 0xfa, 0xea, 0x63, 0xd6, 0x2b, 0x64, 0x46, - 0x0c, 0x83, 0x0e, 0x2b, 0xe8, 0xe0, 0x28, 0x58, 0x5f, 0xe7, 0xf4, 0xfd, - 0x8b, 0xcb, 0x17, 0xf7, 0x69, 0x33, 0xaf, 0x46, 0xcb, 0x15, 0x03, 0xea, - 0xc3, 0x2b, 0x88, 0x0b, 0x17, 0xff, 0x3f, 0x04, 0x7e, 0x4f, 0xdf, 0x52, - 0xb1, 0x7e, 0x3c, 0xef, 0xb0, 0xd6, 0x2f, 0xa1, 0x27, 0x65, 0x8b, 0xf8, - 0x6e, 0x2d, 0x66, 0xeb, 0x17, 0xed, 0x00, 0xef, 0xc5, 0x8b, 0xbd, 0xc3, - 0x13, 0x21, 0xef, 0x48, 0x60, 0x2f, 0x88, 0x8c, 0x57, 0xc2, 0x20, 0xcb, - 0xea, 0x55, 0x14, 0x0a, 0x3b, 0x2b, 0x71, 0x62, 0xfe, 0x9d, 0xb0, 0x9c, - 0xd5, 0xca, 0x26, 0x56, 0x8f, 0x37, 0x82, 0x57, 0xff, 0xe6, 0xe7, 0xd9, - 0xfd, 0x01, 0x4b, 0x78, 0x52, 0xb1, 0x7c, 0xfb, 0xc9, 0xd6, 0x2f, 0xfc, - 0x4d, 0xf9, 0x04, 0x66, 0xb9, 0xc4, 0x8b, 0xdf, 0xc1, 0xac, 0x54, 0x9e, - 0xfb, 0xa1, 0x5e, 0xf4, 0x19, 0x62, 0xd8, 0xb1, 0x52, 0x6b, 0x83, 0x1d, - 0xb8, 0x5b, 0x2c, 0x5f, 0xd2, 0x7c, 0xe6, 0xb1, 0x62, 0xb4, 0x78, 0xdf, - 0x19, 0xbc, 0x00, 0x4a, 0xc5, 0xff, 0xf7, 0xa7, 0x35, 0x26, 0x31, 0x61, - 0xc5, 0xf5, 0x8a, 0x94, 0x47, 0x61, 0x13, 0x0e, 0xdf, 0x70, 0x45, 0xe5, - 0x8b, 0xf0, 0x65, 0x0f, 0xe2, 0xc5, 0x39, 0xe6, 0x00, 0x8e, 0xed, 0xb6, - 0x58, 0xb0, 0x16, 0x2d, 0x2b, 0x16, 0xc1, 0x9a, 0x3d, 0xc4, 0xaf, 0xbb, - 0x9c, 0x8e, 0xb1, 0x5b, 0x2f, 0x97, 0xc0, 0x9c, 0x72, 0xcc, 0xf1, 0xdf, - 0xa2, 0x2d, 0x2a, 0x1e, 0x10, 0x5f, 0x4e, 0x28, 0x7a, 0xf9, 0xe4, 0x44, - 0x3d, 0x8f, 0x7b, 0x89, 0xef, 0x1e, 0x77, 0x58, 0xbf, 0xf0, 0x39, 0x85, - 0x80, 0xe4, 0xc7, 0xac, 0x5f, 0x9a, 0x27, 0xce, 0x2c, 0x5f, 0x72, 0x75, - 0x05, 0x8a, 0x30, 0xf2, 0xf8, 0x51, 0x73, 0xf1, 0x62, 0xf7, 0x26, 0x0b, - 0x17, 0x03, 0xb2, 0xc5, 0x49, 0xe7, 0x74, 0x2f, 0xc1, 0xda, 0x1a, 0x28, - 0x0e, 0xe3, 0x52, 0x9b, 0x6e, 0x0f, 0x34, 0x65, 0x97, 0x9b, 0xf2, 0xb1, - 0x7f, 0x87, 0xf9, 0xf7, 0xa4, 0xeb, 0x15, 0xf3, 0xd0, 0x21, 0xcb, 0xcf, - 0xa8, 0x2c, 0x5f, 0xff, 0xa2, 0x61, 0xb7, 0xd8, 0xed, 0xe1, 0x72, 0x43, - 0x58, 0xb6, 0xcb, 0x15, 0xf4, 0x43, 0xb0, 0xe8, 0x95, 0xef, 0xa4, 0x3e, - 0xe1, 0xac, 0x5f, 0x71, 0xfd, 0x2b, 0x17, 0x75, 0x0d, 0x8f, 0x27, 0xa2, - 0x7b, 0xcf, 0xd7, 0x16, 0x2b, 0x0f, 0x3d, 0xcc, 0x6b, 0x13, 0x8f, 0x78, - 0x54, 0x7e, 0x18, 0xf7, 0xbb, 0x85, 0x1e, 0xb1, 0x68, 0x96, 0x2d, 0x12, - 0xc5, 0x6e, 0x79, 0x4e, 0x48, 0x21, 0x3b, 0xd2, 0x7e, 0x2c, 0x5f, 0x6b, - 0xd9, 0xf5, 0x8b, 0xce, 0x06, 0x58, 0xbb, 0x37, 0x58, 0xa5, 0x8f, 0x17, - 0x15, 0xf3, 0xcf, 0xe1, 0xa5, 0xf4, 0x9d, 0x86, 0xb1, 0x7e, 0x1b, 0xf6, - 0x91, 0xac, 0x50, 0xcf, 0x33, 0x44, 0x55, 0x88, 0x90, 0x76, 0xeb, 0xd0, - 0x93, 0xac, 0x5e, 0xd9, 0xb6, 0x58, 0xad, 0x8d, 0xe3, 0x0e, 0xde, 0xf6, - 0x7d, 0x62, 0xe7, 0x25, 0x8b, 0xed, 0xbc, 0xe6, 0xac, 0x54, 0xaa, 0x24, - 0xd8, 0xbd, 0xc7, 0x75, 0x18, 0x13, 0x2e, 0x88, 0x87, 0xb0, 0xe8, 0x62, - 0xd7, 0xe8, 0x9b, 0xf3, 0xf5, 0x8b, 0xff, 0x99, 0xf3, 0x93, 0xb6, 0x13, - 0x9a, 0xb1, 0x7f, 0x66, 0xb6, 0xdb, 0x00, 0xb1, 0x46, 0x1f, 0x9f, 0x10, - 0xee, 0xed, 0x2b, 0x17, 0xf4, 0x80, 0xed, 0x0c, 0x58, 0xa1, 0x9f, 0x49, - 0xc8, 0xc8, 0x66, 0xfe, 0x3c, 0xf5, 0xe6, 0xdd, 0x62, 0xe7, 0xd9, 0x62, - 0xfc, 0xf0, 0x7e, 0xa0, 0xb1, 0x5a, 0x3f, 0x1f, 0x98, 0x70, 0x62, 0xff, - 0xfe, 0x2c, 0xf7, 0xf2, 0x19, 0xbc, 0xef, 0xe2, 0x63, 0xac, 0x54, 0xaa, - 0x2e, 0xc8, 0xc1, 0x5e, 0x13, 0xfc, 0x2f, 0xbf, 0xfd, 0xc6, 0xf7, 0xdb, - 0x85, 0x9e, 0xc0, 0x2c, 0x5f, 0xd2, 0x07, 0xe6, 0x41, 0x62, 0xff, 0x9e, - 0x0f, 0xce, 0xa0, 0xe4, 0xb1, 0x7f, 0x80, 0xf0, 0xd6, 0x9c, 0x25, 0x8a, - 0xd1, 0xf7, 0x11, 0xcd, 0xf3, 0x9e, 0x62, 0x58, 0xbf, 0xfb, 0x8f, 0xd1, - 0x64, 0x5a, 0x9f, 0x71, 0x62, 0xfd, 0xee, 0x64, 0x9d, 0x62, 0xff, 0xed, - 0xff, 0x2f, 0xee, 0x39, 0x75, 0x05, 0x8b, 0xfe, 0x7f, 0x1d, 0xfd, 0xc9, - 0x3a, 0xc5, 0xb2, 0x4f, 0xff, 0x64, 0x6b, 0xec, 0xd8, 0x50, 0x58, 0xbe, - 0x7d, 0x4e, 0xcb, 0x15, 0x05, 0x50, 0x7b, 0xa4, 0xbc, 0x26, 0xe2, 0x21, - 0x01, 0x19, 0x23, 0x7a, 0x14, 0xe1, 0x13, 0x86, 0x49, 0x7d, 0xdd, 0x98, - 0x35, 0x8b, 0xf3, 0xf0, 0x58, 0x75, 0x8b, 0xff, 0xb8, 0xdd, 0x39, 0xc5, - 0xcf, 0x4f, 0xd6, 0x2f, 0xff, 0x4c, 0x5f, 0x79, 0x2f, 0xb4, 0x6f, 0x1b, - 0xf7, 0x8b, 0x17, 0xfe, 0x98, 0x4c, 0x5c, 0xfe, 0x76, 0xe2, 0xc5, 0xfe, - 0x9d, 0x31, 0x16, 0x1a, 0xb1, 0x7d, 0x31, 0xaa, 0x35, 0x46, 0xa5, 0x8a, - 0xe9, 0x34, 0x88, 0xf4, 0x6e, 0x2c, 0xf9, 0x0b, 0xb8, 0xca, 0xf9, 0xb4, - 0xdd, 0x2c, 0x5f, 0xc0, 0xd9, 0xa1, 0x31, 0xeb, 0x17, 0xde, 0x29, 0x02, - 0xc5, 0xf8, 0xc9, 0x8a, 0x42, 0x58, 0xb8, 0x01, 0x2c, 0x5e, 0x18, 0xe5, - 0x62, 0xe7, 0x25, 0x8a, 0x35, 0x1d, 0xdd, 0x11, 0xb9, 0x91, 0xc8, 0xb8, - 0x56, 0x21, 0x90, 0xc7, 0x6f, 0x67, 0x74, 0x16, 0x2a, 0x55, 0xf3, 0xe4, - 0x23, 0x37, 0x25, 0x78, 0xdc, 0x1a, 0x34, 0x02, 0x66, 0xba, 0x76, 0x58, - 0xbe, 0xd4, 0xe1, 0xd6, 0x2e, 0xc0, 0x96, 0x29, 0x3a, 0x86, 0x0b, 0xfb, - 0x81, 0xce, 0xa4, 0xe9, 0xd4, 0x30, 0x52, 0x75, 0x0c, 0x14, 0x9d, 0x43, - 0x05, 0x27, 0x50, 0xc1, 0x49, 0xd4, 0x30, 0x54, 0x11, 0x7e, 0xe3, 0x40, - 0x3d, 0x10, 0xd4, 0x70, 0xd7, 0x70, 0xd5, 0xdf, 0xc4, 0xea, 0x18, 0x2f, - 0xe6, 0x6f, 0x45, 0x27, 0x4e, 0xa1, 0x80, 0xc3, 0x4b, 0x6e, 0xfd, 0x3a, - 0x86, 0x0a, 0x4e, 0xa1, 0x82, 0x93, 0xa8, 0x60, 0xa8, 0x1b, 0x47, 0x1a, - 0xa4, 0xea, 0x18, 0x29, 0x3a, 0x86, 0x0a, 0x4e, 0xa1, 0x82, 0x93, 0xa8, - 0x60, 0xa4, 0xea, 0x18, 0x29, 0x3a, 0x86, 0x0a, 0xd9, 0x13, 0x83, 0x1a, - 0x71, 0xa0, 0x0d, 0x70, 0x6b, 0xb0, 0xd5, 0x27, 0x50, 0xc1, 0x49, 0xd4, - 0x30, 0x54, 0x0d, 0xa7, 0x06, 0xa9, 0x3a, 0x86, 0x0a, 0x4e, 0xa1, 0x82, - 0x93, 0xa8, 0x60, 0xa4, 0xea, 0x18, 0x2a, 0x07, 0xd0, 0x01, 0xaf, 0x0d, - 0x77, 0x0d, 0x52, 0x75, 0x0c, 0x14, 0x9d, 0x43, 0x05, 0x27, 0x50, 0xc1, - 0x49, 0xd4, 0x30, 0x56, 0xc7, 0xd0, 0x68, 0xd6, 0x86, 0xbe, 0x35, 0x63, - 0x53, 0xa8, 0x60, 0xa4, 0xea, 0x18, 0x29, 0x3a, 0x86, 0x0a, 0x4e, 0xa1, - 0x82, 0x93, 0xa8, 0x60, 0xa1, 0x9f, 0x47, 0x43, 0x40, 0x1a, 0x10, 0xd5, - 0x27, 0x50, 0xc1, 0x49, 0xd4, 0x30, 0x52, 0x75, 0x0c, 0x17, 0xef, 0xc8, - 0x39, 0x89, 0xd4, 0x30, 0x52, 0x75, 0x0c, 0x15, 0x04, 0x4f, 0x6e, 0x35, - 0xf1, 0xa6, 0x1a, 0x01, 0xb5, 0xb7, 0x4e, 0xa1, 0x82, 0x93, 0xa8, 0x60, - 0xa4, 0xea, 0x18, 0x29, 0x3a, 0x86, 0x0a, 0x4e, 0xa1, 0x82, 0xa0, 0x7d, - 0x1d, 0x0d, 0x38, 0xd7, 0x61, 0xaa, 0x4e, 0xa1, 0x82, 0x93, 0xa8, 0x60, - 0xa4, 0xea, 0x18, 0x29, 0x3a, 0x86, 0x0a, 0x81, 0xf4, 0x0c, 0x6b, 0xe3, - 0x44, 0x35, 0x6f, 0xa7, 0x50, 0xc1, 0x49, 0xd4, 0x30, 0x52, 0x75, 0x0c, - 0x16, 0x82, 0x75, 0x0c, 0x14, 0x9d, 0x43, 0x07, 0x46, 0x82, 0x93, 0xa8, - 0x60, 0xa4, 0xea, 0x18, 0x29, 0x3a, 0x86, 0x0a, 0x4e, 0xa1, 0x82, 0xb6, - 0x47, 0x3c, 0x06, 0x8d, 0x3a, 0xdc, 0xae, 0x21, 0xa0, 0x0d, 0x78, 0x6a, - 0xd8, 0x9d, 0x43, 0x05, 0x27, 0x50, 0xc1, 0x49, 0xd4, 0x30, 0x5a, 0x09, - 0xd4, 0x30, 0x52, 0x75, 0x0c, 0x1d, 0x1a, 0x0a, 0x4e, 0xa1, 0x82, 0x93, - 0xa8, 0x60, 0xa9, 0x45, 0x9c, 0x06, 0x9c, 0xeb, 0x45, 0x67, 0x1a, 0xa4, - 0xea, 0x18, 0x29, 0x3a, 0x86, 0x0a, 0x4e, 0xa1, 0x82, 0x93, 0xa8, 0x60, - 0xa4, 0xea, 0x18, 0x2a, 0x51, 0x05, 0xd0, 0xd6, 0x86, 0x8e, 0x34, 0x43, - 0x54, 0x9d, 0x43, 0x05, 0x27, 0x50, 0xc1, 0x49, 0xd4, 0x30, 0x56, 0x8f, - 0x3b, 0x83, 0x5e, 0x1a, 0xa4, 0xea, 0x18, 0x29, 0x3a, 0x86, 0x0a, 0x4e, - 0xa1, 0x82, 0x8e, 0x79, 0xc4, 0x35, 0xe1, 0xab, 0x1d, 0x3a, 0x86, 0x0a, - 0x4e, 0xa1, 0x82, 0x93, 0xa8, 0x60, 0xa0, 0x1b, 0x41, 0x0d, 0x52, 0x75, - 0x0c, 0x14, 0x9d, 0x43, 0x05, 0x27, 0x50, 0xc1, 0x49, 0xd4, 0x30, 0x54, - 0x9f, 0x44, 0x43, 0x5f, 0x1a, 0x10, 0xd5, 0x4b, 0x31, 0x73, 0x68, 0x40, - 0xc1, 0x34, 0x6b, 0x39, 0x0b, 0xcd, 0xe1, 0x1b, 0xd4, 0x22, 0x5e, 0x14, - 0xf1, 0xe7, 0xd1, 0x42, 0x27, 0x50, 0xdb, 0x3a, 0x57, 0xe1, 0x12, 0xd0, - 0xa6, 0x01, 0xd9, 0x46, 0x0f, 0xc6, 0x8f, 0x43, 0x48, 0x50, 0xca, 0xed, - 0x09, 0x70, 0x9f, 0x63, 0x8b, 0x83, 0x54, 0xee, 0x84, 0x4d, 0xfa, 0x05, - 0x39, 0xc4, 0xea, 0x18, 0x23, 0x13, 0x98, 0xbc, 0xf2, 0x74, 0xea, 0x18, - 0x2f, 0x9f, 0x76, 0xd2, 0xf5, 0x0c, 0x2f, 0x38, 0xf1, 0x7a, 0x86, 0x16, - 0x8c, 0xe9, 0x19, 0xda, 0x4b, 0xf9, 0x57, 0x8c, 0x2b, 0xb3, 0x3f, 0x80, - 0x3a, 0x7c, 0xcd, 0xe0, 0xe4, 0x25, 0x8a, 0x93, 0xd2, 0x63, 0x3b, 0xce, - 0x5b, 0x2c, 0x5f, 0xce, 0x10, 0xf5, 0x3b, 0x2c, 0x54, 0x0f, 0x37, 0xe3, - 0xb4, 0xb1, 0x4b, 0x16, 0xed, 0x25, 0xc6, 0x83, 0x2e, 0x6e, 0x96, 0x2f, - 0xa0, 0xff, 0x12, 0xc5, 0xf4, 0xc7, 0x4f, 0x96, 0x2f, 0x3f, 0x6e, 0xfd, - 0x62, 0xf4, 0xe1, 0x2c, 0x5f, 0xa4, 0xed, 0xd7, 0x96, 0x2b, 0x47, 0x89, - 0xc1, 0xbb, 0xed, 0xc3, 0xd3, 0x2c, 0x5b, 0xb9, 0x62, 0xa4, 0xdd, 0x39, - 0x2d, 0x0d, 0xb2, 0x7d, 0xdc, 0x63, 0xaa, 0xc1, 0x52, 0x26, 0xd3, 0x9d, - 0x7c, 0x9d, 0x86, 0x08, 0x8f, 0xc4, 0xa1, 0x34, 0x77, 0x2e, 0x5c, 0x38, - 0x2c, 0x5f, 0xfb, 0x37, 0x6f, 0x39, 0xe7, 0xbb, 0x8b, 0x15, 0xf3, 0xda, - 0x00, 0xc5, 0xe8, 0x98, 0x35, 0x8b, 0xec, 0x84, 0x9a, 0xb1, 0x43, 0x3e, - 0x4c, 0x22, 0x21, 0xfb, 0xfe, 0xc1, 0x41, 0xcb, 0xc2, 0xfa, 0xc5, 0xf9, - 0xc8, 0x4d, 0xe5, 0x8b, 0xff, 0xff, 0x66, 0x10, 0xbc, 0xff, 0x21, 0x1a, - 0x59, 0xd7, 0xa7, 0x34, 0xb1, 0x58, 0x8f, 0x82, 0x2d, 0xe1, 0xcc, 0x71, - 0x3d, 0xef, 0x8b, 0x75, 0x8b, 0xef, 0xe7, 0x6c, 0x58, 0xaf, 0x9e, 0x1f, - 0x87, 0xef, 0x00, 0x5c, 0x58, 0xbf, 0xcc, 0x41, 0xc5, 0x07, 0x25, 0x8b, - 0xff, 0xb8, 0xc4, 0x0f, 0xe4, 0x52, 0x43, 0x58, 0xb8, 0x12, 0xb1, 0x7f, - 0x69, 0x88, 0x39, 0x02, 0xc5, 0xcd, 0xa5, 0x8b, 0x3a, 0xc6, 0xe5, 0xbd, - 0xb7, 0x58, 0xb1, 0xd6, 0x2d, 0x18, 0xe8, 0xa2, 0xd0, 0xbf, 0xd1, 0x58, - 0x84, 0x31, 0x3b, 0xfb, 0xa8, 0x7e, 0x4b, 0x65, 0x8a, 0x3a, 0x73, 0x80, - 0x34, 0x8e, 0x87, 0x37, 0x72, 0x95, 0xfa, 0x78, 0xdd, 0x01, 0x62, 0xff, - 0x7b, 0xf2, 0xf3, 0xd7, 0x96, 0x2f, 0xff, 0xfa, 0x1f, 0x9f, 0xb9, 0xac, - 0xe5, 0x3f, 0x67, 0x83, 0x8d, 0x62, 0xfe, 0xfe, 0x3f, 0xce, 0xcb, 0x15, - 0x88, 0x91, 0xec, 0xc9, 0x74, 0x31, 0x62, 0xfc, 0x53, 0xfd, 0xa5, 0x62, - 0xf1, 0xad, 0xa5, 0x8b, 0x1d, 0x62, 0xfe, 0x7d, 0x6e, 0xda, 0xd9, 0x62, - 0xfb, 0xf2, 0x2e, 0xfd, 0x62, 0xfb, 0xba, 0x7a, 0xe2, 0xc5, 0x6e, 0x79, - 0xfd, 0xc5, 0x17, 0xe1, 0x7b, 0xf9, 0xd9, 0x62, 0xbb, 0xd4, 0x71, 0x44, - 0x25, 0xa7, 0xf2, 0x26, 0xb6, 0xcb, 0x16, 0xfa, 0xc5, 0xb4, 0xe6, 0x94, - 0x42, 0x77, 0xff, 0x39, 0x9f, 0x67, 0xe4, 0xc2, 0x0c, 0xb1, 0x7f, 0x1f, - 0x22, 0x92, 0xd9, 0x62, 0xff, 0xe9, 0xcd, 0x16, 0x7b, 0x8c, 0xdb, 0x2c, - 0x54, 0x9f, 0x91, 0x17, 0xd2, 0xc5, 0xc3, 0xec, 0xb1, 0x7f, 0xa2, 0x84, - 0xf5, 0xb6, 0x04, 0xb1, 0x7e, 0xc3, 0xe9, 0xa0, 0xb1, 0x7d, 0x1d, 0x33, - 0x1e, 0xb1, 0x58, 0xa8, 0x47, 0x4c, 0xe7, 0x26, 0xfc, 0x2d, 0x80, 0x40, - 0x41, 0x9c, 0x1a, 0x8e, 0x38, 0x0c, 0xa2, 0xf8, 0xff, 0x90, 0x2c, 0x5f, - 0xfe, 0xc1, 0xc7, 0x6a, 0x7b, 0x3f, 0xb9, 0x86, 0xac, 0x5f, 0xdb, 0x86, - 0x00, 0x4f, 0x4b, 0x17, 0xfe, 0xdb, 0xcd, 0xb9, 0x4c, 0x39, 0x8b, 0x15, - 0x27, 0xe4, 0xe6, 0x55, 0x89, 0x82, 0xfc, 0x8f, 0x90, 0xc2, 0xbf, 0xf8, - 0xc6, 0xdc, 0x7f, 0x90, 0x61, 0x01, 0x62, 0xff, 0xd9, 0xcc, 0x17, 0x7e, - 0xc6, 0xff, 0x16, 0x2e, 0x04, 0xac, 0x56, 0x22, 0x87, 0x74, 0x60, 0x22, - 0x54, 0xb2, 0x46, 0x60, 0x45, 0x91, 0xdd, 0x6e, 0x93, 0xd1, 0x4b, 0xc3, - 0x16, 0x22, 0x4f, 0x8b, 0xb1, 0x40, 0x25, 0x88, 0xfa, 0x38, 0xc1, 0x43, - 0x5a, 0xfd, 0x0c, 0x1b, 0x1d, 0x62, 0xfd, 0x02, 0x13, 0x06, 0xb1, 0x7d, - 0x30, 0xe4, 0xac, 0x5f, 0xfc, 0x45, 0x3b, 0x16, 0x3f, 0x69, 0x8e, 0x58, - 0xbd, 0x3d, 0x71, 0x62, 0xa5, 0x1b, 0x0e, 0x50, 0x72, 0x96, 0x22, 0xe2, - 0x3d, 0xe6, 0xd4, 0xac, 0x5f, 0x36, 0x98, 0x96, 0x2f, 0xa3, 0x98, 0x80, - 0xb1, 0x7d, 0xee, 0x67, 0x96, 0x29, 0xcf, 0x21, 0x89, 0x6f, 0xcf, 0xd7, - 0x1b, 0xa5, 0x8a, 0x82, 0x33, 0xc6, 0x38, 0x76, 0x9e, 0x10, 0x52, 0xc5, - 0xe3, 0xcb, 0xac, 0x51, 0x1a, 0x8e, 0xc1, 0x97, 0xe8, 0x9c, 0xed, 0x12, - 0xc5, 0xff, 0xbd, 0xf6, 0x81, 0x37, 0xf3, 0x8b, 0x17, 0x1d, 0x96, 0x2f, - 0xff, 0xc4, 0xde, 0x2c, 0xf7, 0xc5, 0xd6, 0x1d, 0xba, 0x58, 0xac, 0x45, - 0x5b, 0x9f, 0x30, 0xbd, 0xf8, 0x84, 0xdd, 0x41, 0x62, 0xf9, 0x83, 0x7c, - 0x58, 0xb7, 0x1c, 0xf2, 0xc4, 0x53, 0x7f, 0x3e, 0xd3, 0xd6, 0x12, 0xc5, - 0xf9, 0xfa, 0xe1, 0x8f, 0xd1, 0xea, 0xe8, 0x9e, 0xff, 0xbf, 0x2f, 0xf6, - 0xe4, 0xc7, 0xac, 0x5f, 0xf0, 0x6c, 0x3e, 0x61, 0xe6, 0x3d, 0x62, 0xf6, - 0x74, 0x12, 0xc5, 0x68, 0xf7, 0x08, 0xf6, 0xff, 0x66, 0x14, 0x03, 0x21, - 0xac, 0x5d, 0xc3, 0x56, 0x2c, 0x35, 0x8b, 0xf3, 0x03, 0x91, 0x76, 0x58, - 0xa6, 0x37, 0xc4, 0x25, 0x60, 0x18, 0x9b, 0x0e, 0x42, 0x5e, 0x22, 0x10, - 0x19, 0xf9, 0x5e, 0xff, 0xe8, 0xf1, 0x1a, 0xfd, 0x73, 0x22, 0x9f, 0x2c, - 0x5e, 0x89, 0xa2, 0x58, 0xa7, 0x3e, 0xa1, 0x25, 0xda, 0x3d, 0x62, 0xf8, - 0x04, 0xf2, 0xb1, 0x5b, 0xaa, 0xba, 0xea, 0x3a, 0x23, 0xc3, 0x05, 0x88, - 0x48, 0x56, 0x96, 0x2e, 0xfb, 0x2c, 0x5f, 0xf9, 0xbf, 0x87, 0x6f, 0xe7, - 0x40, 0x58, 0xbf, 0xef, 0xe1, 0xdb, 0xf9, 0xd0, 0x16, 0x2c, 0x03, 0x0f, - 0xe5, 0x8f, 0xea, 0x51, 0x70, 0xd0, 0x90, 0xb8, 0x52, 0xb1, 0x7b, 0x35, - 0x05, 0x8a, 0x19, 0xb4, 0xec, 0x2f, 0x78, 0x6c, 0x4b, 0x14, 0xe6, 0xfd, - 0x88, 0xef, 0xb7, 0x62, 0x35, 0x62, 0xfd, 0x84, 0x3f, 0xca, 0xc5, 0xff, - 0xff, 0x7b, 0x0a, 0x77, 0x29, 0x3f, 0x39, 0x90, 0xfb, 0x90, 0x16, 0x28, - 0xc4, 0x46, 0x68, 0x9e, 0xa5, 0x1a, 0x8d, 0x0b, 0x0b, 0xff, 0x9b, 0x5a, - 0x60, 0x4c, 0x60, 0x41, 0x04, 0xb1, 0x7a, 0x0e, 0x05, 0x8b, 0xff, 0x1b, - 0x9d, 0x79, 0xfd, 0xa1, 0x1d, 0x62, 0x8c, 0x45, 0x53, 0x25, 0xf8, 0x76, - 0xe9, 0x82, 0xc5, 0xfd, 0x31, 0x1c, 0xa4, 0xd5, 0x8a, 0x93, 0xf6, 0x01, - 0x87, 0x70, 0xbd, 0x4b, 0x24, 0x07, 0x19, 0x5c, 0x8b, 0xf0, 0xd5, 0x69, - 0x70, 0xfd, 0xfa, 0xb9, 0x43, 0x13, 0x90, 0x99, 0xf4, 0x3c, 0xc5, 0x1a, - 0x35, 0xff, 0xfa, 0x4b, 0x00, 0xd0, 0x72, 0xf4, 0x33, 0x58, 0xb1, 0x7e, - 0x61, 0x6e, 0x77, 0x58, 0xa1, 0x9f, 0xde, 0xea, 0x57, 0xd9, 0xef, 0xba, - 0xc5, 0xe9, 0xc3, 0xac, 0x56, 0x8d, 0xf7, 0xc8, 0xaf, 0xec, 0x9e, 0xa0, - 0xe7, 0x58, 0xbf, 0x64, 0x50, 0x62, 0x58, 0xbc, 0x50, 0xe6, 0x8f, 0x58, - 0x32, 0xeb, 0xe2, 0x9c, 0xd2, 0xc5, 0x2c, 0x5c, 0x3c, 0xf9, 0xad, 0xf1, - 0x0d, 0xe3, 0xfd, 0x96, 0x2b, 0x13, 0x21, 0x77, 0x76, 0x61, 0x11, 0x65, - 0xff, 0xc5, 0x8f, 0xf9, 0xe8, 0x19, 0xee, 0x2c, 0x5f, 0xfc, 0x20, 0xe2, - 0x32, 0x43, 0x6d, 0xe7, 0xeb, 0x17, 0x11, 0xab, 0x17, 0xff, 0x01, 0xa1, - 0xcc, 0x87, 0xe4, 0x8d, 0x58, 0xbf, 0x8f, 0xcc, 0x3c, 0xc7, 0xac, 0x54, - 0x9f, 0xb3, 0xa2, 0xdf, 0xe7, 0x37, 0x8e, 0x5d, 0x41, 0x62, 0xd3, 0xa3, - 0xd5, 0xf9, 0x05, 0x3a, 0x61, 0x5d, 0xd0, 0xe3, 0xa3, 0x1f, 0x8c, 0x5f, - 0xbd, 0x55, 0x99, 0x70, 0xbb, 0x4a, 0x37, 0x84, 0xbd, 0xe1, 0xce, 0x8d, - 0x64, 0xac, 0x83, 0x63, 0x7f, 0xde, 0x76, 0x33, 0xa9, 0x5e, 0x6f, 0x3f, - 0x7f, 0x1f, 0x28, 0xe2, 0x29, 0x42, 0x7a, 0x95, 0x4e, 0x79, 0x55, 0x1f, - 0x9e, 0xb1, 0x6a, 0xcb, 0x8c, 0x12, 0x98, 0x8a, 0x93, 0x35, 0xc8, 0xe7, - 0x7d, 0x4a, 0x17, 0x14, 0x65, 0x7d, 0xa3, 0x82, 0x8e, 0x3b, 0x0d, 0x13, - 0xba, 0x35, 0x4b, 0xfe, 0xe7, 0xbe, 0x26, 0x84, 0x25, 0x62, 0xf7, 0xb3, - 0x75, 0x8b, 0xb6, 0xc5, 0x8a, 0x73, 0x6c, 0x01, 0xeb, 0xfd, 0xa9, 0xf3, - 0x82, 0x60, 0xb1, 0x7f, 0xba, 0xcf, 0x3f, 0xdc, 0xd5, 0x8b, 0xfd, 0xe8, - 0x08, 0x6c, 0x40, 0x58, 0xbc, 0x7e, 0x6e, 0xb1, 0x7a, 0x0e, 0x05, 0x8b, - 0x4a, 0xc5, 0xdc, 0xf2, 0xc5, 0x8b, 0x73, 0x52, 0x21, 0x1b, 0xec, 0xf3, - 0x74, 0xb1, 0x46, 0x22, 0xbf, 0xbd, 0x1f, 0x74, 0x6d, 0x13, 0xdf, 0xfd, - 0xcc, 0xdc, 0x79, 0xa0, 0x9b, 0xf1, 0x2c, 0x5f, 0xf7, 0x0d, 0x62, 0x9c, - 0xda, 0x56, 0x2f, 0xa1, 0x9a, 0x95, 0x8b, 0xf8, 0x26, 0xd6, 0x9b, 0xa5, - 0x8b, 0xe1, 0x0f, 0xee, 0xb1, 0x7f, 0x02, 0x7c, 0x4f, 0xc5, 0x8b, 0xff, - 0xf7, 0x35, 0xa7, 0x8b, 0x9a, 0x9f, 0x3e, 0xee, 0x35, 0x8a, 0x82, 0xb0, - 0x8c, 0x33, 0xdc, 0xd4, 0xf0, 0xe3, 0xfa, 0x13, 0x24, 0x00, 0xe4, 0x88, - 0xb8, 0x61, 0xe2, 0x30, 0x8b, 0x6f, 0xe9, 0x1b, 0x85, 0x27, 0x58, 0xbc, - 0x4f, 0x12, 0xc5, 0xd0, 0xd9, 0x62, 0xfd, 0x31, 0xdc, 0x11, 0x2c, 0x5e, - 0xf4, 0xf1, 0x62, 0xfb, 0x0f, 0x3f, 0x58, 0xb1, 0x2c, 0x5f, 0x87, 0x98, - 0x0e, 0x2c, 0x54, 0x71, 0xb9, 0x0c, 0x46, 0xb7, 0x44, 0x00, 0x16, 0xef, - 0xfd, 0xc3, 0x1b, 0x79, 0x88, 0x4d, 0xd2, 0xc5, 0x74, 0x9a, 0x44, 0x43, - 0x27, 0x2b, 0x28, 0x4e, 0xf8, 0x92, 0xf6, 0xce, 0x35, 0x8b, 0xf9, 0x9b, - 0x5a, 0x9d, 0x96, 0x2c, 0x25, 0x8b, 0x01, 0xcf, 0x7b, 0xe3, 0xc4, 0x5d, - 0x78, 0x1e, 0xe2, 0xc5, 0xbb, 0xd5, 0x8b, 0xfb, 0x9f, 0x8a, 0x40, 0x25, - 0x8b, 0xe0, 0x3e, 0xa0, 0xb1, 0x79, 0xc8, 0xd5, 0x8b, 0xe6, 0x88, 0x41, - 0xac, 0x54, 0x0f, 0x97, 0x44, 0x7f, 0x1d, 0xbb, 0xdc, 0x58, 0xbf, 0x61, - 0x67, 0x41, 0x2c, 0x5f, 0x85, 0xbf, 0xdf, 0x4b, 0x17, 0x3c, 0x4b, 0x17, - 0x61, 0xab, 0x16, 0xf7, 0x7a, 0x88, 0x39, 0x29, 0xf9, 0x57, 0x06, 0x2f, - 0xdb, 0xfe, 0x7a, 0x82, 0xc5, 0xe1, 0xfd, 0xd6, 0x2b, 0x0f, 0x21, 0xca, - 0xef, 0xe3, 0xf1, 0xcd, 0xf0, 0x4b, 0x17, 0xdd, 0x7e, 0x60, 0xb1, 0x71, - 0x6e, 0xb1, 0x52, 0x6f, 0x18, 0x92, 0x8c, 0x55, 0x9f, 0x1b, 0x0f, 0x74, - 0x2f, 0xa8, 0x4a, 0x80, 0xbc, 0xa1, 0x37, 0xe8, 0x47, 0x86, 0x41, 0xdc, - 0xdb, 0x7f, 0xfe, 0x72, 0xdf, 0x7f, 0xb6, 0xff, 0x97, 0xd0, 0xa3, 0xd6, - 0x2f, 0xbd, 0xec, 0xd9, 0x62, 0xd2, 0xb1, 0x58, 0x6d, 0x5c, 0x92, 0xff, - 0xa7, 0x9c, 0xcf, 0x73, 0x36, 0x58, 0xb7, 0x44, 0x7b, 0x21, 0x8f, 0xdf, - 0xfe, 0xe7, 0xc2, 0x62, 0x86, 0x61, 0x75, 0xe5, 0x8b, 0xfa, 0x7a, 0x86, - 0x77, 0x41, 0x62, 0xb1, 0x14, 0xda, 0x29, 0x3a, 0x5d, 0xff, 0xe6, 0x3e, - 0x0f, 0xaf, 0x6a, 0x73, 0xa3, 0xac, 0x5d, 0xd7, 0x96, 0x2f, 0xd8, 0x5b, - 0x3e, 0x96, 0x2f, 0xde, 0x62, 0x16, 0x2c, 0x5f, 0xee, 0x61, 0xdf, 0xdf, - 0x65, 0x8a, 0x82, 0x39, 0xf1, 0x33, 0x43, 0x24, 0x51, 0xe2, 0x7b, 0xfb, - 0xa8, 0x45, 0x99, 0xba, 0xc5, 0xfd, 0x22, 0xf7, 0xd8, 0x0b, 0x17, 0xbf, - 0x23, 0x58, 0xad, 0x1e, 0x5f, 0x0b, 0xaf, 0xa1, 0xa2, 0x12, 0xc5, 0x40, - 0xf1, 0x7a, 0x22, 0xbf, 0xc5, 0x91, 0x40, 0x45, 0xe5, 0x8a, 0x94, 0xd8, - 0x1d, 0x21, 0xa1, 0x83, 0xc2, 0x3b, 0xc6, 0x1d, 0xd6, 0x2f, 0xb5, 0x3e, - 0xe2, 0xc5, 0xe1, 0x61, 0x2c, 0x5b, 0x22, 0x37, 0xfe, 0x23, 0xbf, 0x7d, - 0xca, 0x4e, 0xb1, 0x63, 0xac, 0x5f, 0xce, 0x28, 0x71, 0xf6, 0x58, 0xac, - 0x3e, 0x82, 0x27, 0xf0, 0x95, 0x41, 0x31, 0x92, 0x5d, 0xe4, 0x23, 0xef, - 0x77, 0x6a, 0x56, 0x2f, 0xfc, 0x52, 0xdb, 0x73, 0x3b, 0x48, 0x4b, 0x17, - 0xfd, 0xf7, 0xd7, 0xdb, 0xbd, 0x08, 0x25, 0x8b, 0xfe, 0xf6, 0xa7, 0x3a, - 0xef, 0xac, 0x6d, 0xde, 0xac, 0x5f, 0xfe, 0x26, 0x0b, 0x85, 0x9d, 0x43, - 0xc2, 0xd9, 0x62, 0xfe, 0x78, 0x8b, 0x3b, 0x32, 0xc5, 0xdc, 0x75, 0x8a, - 0xd1, 0xe3, 0x70, 0xbe, 0xfb, 0x76, 0xdd, 0x96, 0x2f, 0xf6, 0x14, 0x33, - 0x8d, 0xf5, 0x8b, 0xff, 0xda, 0x34, 0x26, 0xd8, 0xb3, 0xb6, 0x9f, 0x8b, - 0x16, 0xe1, 0x8a, 0x9f, 0xa4, 0xd4, 0x64, 0x18, 0x83, 0xd2, 0x0c, 0x49, - 0xba, 0x84, 0x9b, 0x11, 0x78, 0x90, 0x33, 0x2b, 0x9b, 0x65, 0x8b, 0x4a, - 0xc5, 0xef, 0xfd, 0xd6, 0x2f, 0xd8, 0x3f, 0xe1, 0x2c, 0x5b, 0x5b, 0x1e, - 0xab, 0x08, 0x90, 0xed, 0xf1, 0xf4, 0xe6, 0xac, 0x5e, 0x21, 0x62, 0xc5, - 0x39, 0xe0, 0x31, 0x25, 0xf0, 0xe3, 0x4e, 0xf7, 0xbc, 0x58, 0xbd, 0xc9, - 0x3a, 0xc5, 0x47, 0x9e, 0x87, 0x0c, 0xef, 0xa6, 0x29, 0xd2, 0xc5, 0x0c, - 0xf2, 0x3c, 0x4b, 0x7f, 0xff, 0xd1, 0x73, 0x07, 0x9d, 0x7b, 0xed, 0x13, - 0x36, 0xbc, 0x26, 0x58, 0xae, 0x95, 0x5e, 0xfe, 0x13, 0x2c, 0xda, 0x07, - 0x42, 0x85, 0xc7, 0x88, 0xaf, 0x87, 0xf1, 0x77, 0x2c, 0x5f, 0xf0, 0x8d, - 0xc2, 0x17, 0x84, 0x6a, 0xc5, 0xfc, 0xdb, 0x7e, 0x74, 0x05, 0x8b, 0xe8, - 0x71, 0xc6, 0xb1, 0x52, 0x7a, 0x4c, 0x5f, 0x5f, 0x45, 0x71, 0x42, 0x3a, - 0xff, 0x3e, 0x8b, 0xde, 0xcd, 0x96, 0x2f, 0xbd, 0xb6, 0x04, 0xb1, 0x7a, - 0x3b, 0x00, 0xb1, 0x73, 0x76, 0x58, 0xbf, 0xa0, 0x4f, 0x0f, 0xe2, 0xc5, - 0xfb, 0x67, 0xd4, 0xc1, 0x62, 0xff, 0x4e, 0xd9, 0x09, 0x07, 0x16, 0x28, - 0xd4, 0xc7, 0x3a, 0x34, 0x72, 0x58, 0x88, 0x34, 0x32, 0x45, 0xbc, 0x29, - 0xbf, 0xe2, 0x9c, 0xe6, 0x10, 0x67, 0x58, 0xbc, 0x4c, 0x12, 0xc5, 0x40, - 0xf5, 0x78, 0x71, 0x7b, 0xce, 0x6a, 0xc5, 0xff, 0x36, 0xa0, 0x3d, 0x63, - 0x9a, 0xb1, 0x7f, 0x36, 0xda, 0x96, 0xdd, 0x62, 0xa0, 0x7d, 0x2c, 0x75, - 0x7e, 0x17, 0xa3, 0xb3, 0xcb, 0x17, 0x86, 0xe6, 0xac, 0x54, 0x9e, 0x56, - 0x16, 0x5f, 0xcd, 0xf0, 0xf4, 0xc0, 0x58, 0xbd, 0xa0, 0x06, 0xb1, 0x7f, - 0xf3, 0xfa, 0x7d, 0xcf, 0xb3, 0xfc, 0x4b, 0x15, 0x27, 0xc6, 0xc3, 0xf7, - 0xc4, 0x42, 0x82, 0xc5, 0xee, 0x38, 0x4b, 0x17, 0xf8, 0x85, 0xcc, 0x3c, - 0xee, 0xb1, 0x7f, 0xef, 0xce, 0x80, 0x58, 0x13, 0x01, 0x62, 0xf6, 0x64, - 0x4b, 0x17, 0xfe, 0xf3, 0x03, 0x83, 0x13, 0x6a, 0x0b, 0x14, 0x6a, 0x34, - 0x3e, 0x68, 0x03, 0xff, 0x0e, 0xdf, 0x78, 0x13, 0x05, 0x8a, 0xc3, 0xe1, - 0x11, 0xf5, 0xff, 0xbe, 0x2f, 0x07, 0xef, 0x61, 0x01, 0x62, 0xf4, 0xf4, - 0x12, 0xc5, 0xfb, 0x42, 0x3b, 0x12, 0xc5, 0x62, 0x22, 0x3c, 0x82, 0x21, - 0xfb, 0xee, 0x14, 0x9d, 0x62, 0xf8, 0xf3, 0x9b, 0x2c, 0x5f, 0x76, 0x29, - 0xe9, 0x62, 0xe0, 0xbc, 0xb1, 0x58, 0x6f, 0x9c, 0x96, 0xa5, 0x14, 0x4e, - 0x45, 0xc6, 0x1b, 0xe9, 0x2f, 0x6e, 0xb1, 0x7c, 0x6e, 0xcd, 0x1e, 0xb1, - 0x7d, 0x14, 0x18, 0xeb, 0x15, 0xa3, 0xcc, 0x39, 0x45, 0x18, 0xc8, 0x63, - 0x1c, 0x35, 0x72, 0x34, 0x3e, 0xa1, 0x76, 0xe4, 0x51, 0x42, 0x1f, 0x4d, - 0x67, 0x20, 0xfc, 0x24, 0x98, 0x80, 0x04, 0x45, 0x1a, 0x7f, 0x21, 0x53, - 0xe8, 0x68, 0xc7, 0x17, 0x06, 0xdf, 0x7f, 0xf3, 0xf4, 0x02, 0xcf, 0x75, - 0x07, 0x25, 0x8a, 0x58, 0xad, 0x1e, 0x8f, 0x7e, 0x8b, 0x7e, 0x8e, 0xfe, - 0x01, 0x96, 0x2f, 0xf0, 0x03, 0xc2, 0x1f, 0xe5, 0x62, 0xa5, 0x3e, 0x17, - 0x8d, 0x6c, 0xe4, 0xec, 0x57, 0x74, 0x09, 0x62, 0xf8, 0xef, 0xf9, 0x58, - 0xbd, 0x3a, 0x02, 0xc5, 0xb9, 0x86, 0xfc, 0x32, 0x2b, 0xdd, 0x43, 0x8b, - 0x17, 0xe6, 0xf0, 0x59, 0xf5, 0x8b, 0xec, 0x3c, 0xc7, 0xac, 0x57, 0xcf, - 0x3b, 0x85, 0x35, 0xd2, 0x2d, 0xb4, 0x4e, 0x13, 0x6d, 0xee, 0x00, 0x25, - 0x8b, 0xe2, 0x11, 0xf8, 0xb1, 0x7f, 0x16, 0x1c, 0xf3, 0xd2, 0xc5, 0xe3, - 0xbf, 0x16, 0x2f, 0xba, 0xe4, 0xf4, 0xb1, 0x7e, 0x87, 0xb9, 0x26, 0xac, - 0x5f, 0xfd, 0x3a, 0x98, 0x89, 0x82, 0xf6, 0x7d, 0x62, 0x98, 0xfb, 0xc8, - 0xaa, 0xff, 0xef, 0xe1, 0x48, 0x39, 0xf9, 0x2f, 0x2c, 0x5a, 0x06, 0x26, - 0x85, 0x02, 0xe7, 0x1d, 0x3c, 0x25, 0x3c, 0x41, 0x46, 0x2b, 0x18, 0x98, - 0xc3, 0x30, 0xc8, 0xd1, 0xf6, 0x8d, 0x96, 0xff, 0x82, 0x2c, 0xd7, 0x3f, - 0x9b, 0xac, 0x5f, 0xfc, 0x59, 0xcc, 0x1c, 0x50, 0x9d, 0x6c, 0xb1, 0x4e, - 0x88, 0x1f, 0x1d, 0xdf, 0x41, 0xcb, 0x65, 0x8b, 0xe2, 0x93, 0xf1, 0x62, - 0xa2, 0x3c, 0x5f, 0x11, 0xdf, 0x75, 0xbb, 0xe9, 0x62, 0x8d, 0x3c, 0x8f, - 0x11, 0xdf, 0x60, 0xdc, 0x96, 0x2f, 0x1e, 0x78, 0xb1, 0x7e, 0xcf, 0x13, - 0x01, 0x62, 0x80, 0x78, 0x84, 0x3b, 0x7c, 0x23, 0x73, 0x65, 0x8b, 0xcd, - 0xa8, 0x2c, 0x57, 0xcf, 0x08, 0x44, 0xb7, 0xd2, 0x2e, 0xff, 0x89, 0x17, - 0xe8, 0x46, 0x04, 0x10, 0x4b, 0x14, 0x47, 0xb0, 0x22, 0x8b, 0xe8, 0x79, - 0xc0, 0xb1, 0x76, 0x74, 0xb1, 0x7f, 0x33, 0xf3, 0xf9, 0xe5, 0x8b, 0xf4, - 0x73, 0x6d, 0xf7, 0x58, 0xbf, 0x13, 0x6d, 0x3e, 0x58, 0xbf, 0xda, 0x2c, - 0x19, 0x36, 0xcb, 0x17, 0xde, 0xe1, 0x9e, 0x58, 0xb7, 0xdc, 0xf6, 0x18, - 0xce, 0xff, 0xfb, 0xee, 0x69, 0xb3, 0xee, 0x49, 0x16, 0x79, 0x62, 0xf8, - 0xb0, 0xf2, 0xb1, 0x7f, 0xa7, 0xcc, 0x06, 0xcd, 0x2c, 0x5b, 0xcb, 0x17, - 0xfe, 0x7e, 0x3f, 0x6d, 0x48, 0x6c, 0x4b, 0x15, 0x87, 0xa4, 0xc2, 0x57, - 0xfb, 0xec, 0x7f, 0x72, 0x71, 0x62, 0xff, 0xff, 0xa7, 0x5f, 0x67, 0xf4, - 0x24, 0xb0, 0xe2, 0xe7, 0xda, 0x0b, 0x17, 0x9f, 0xa0, 0x2c, 0x5f, 0xc4, - 0xc0, 0x0b, 0x3e, 0xb1, 0x7f, 0xbc, 0x58, 0x06, 0x20, 0x68, 0xf3, 0x3c, - 0x3d, 0x71, 0x6e, 0x62, 0xb1, 0x39, 0x2c, 0xc8, 0x40, 0x6e, 0x4c, 0xea, - 0x07, 0x21, 0xfc, 0x21, 0x3c, 0x40, 0x11, 0x98, 0x70, 0xb1, 0xbd, 0xe3, - 0xf9, 0x62, 0xfc, 0x27, 0x27, 0xe2, 0xc5, 0x31, 0xe2, 0xf0, 0x7a, 0xf7, - 0x27, 0xcb, 0x17, 0xee, 0x6a, 0x5b, 0x75, 0x8b, 0xf4, 0x96, 0xf3, 0xd9, - 0x62, 0xb0, 0xf4, 0xfe, 0x53, 0x46, 0x2f, 0x3f, 0x41, 0x94, 0x6c, 0x78, - 0xf5, 0xd1, 0x0e, 0x88, 0xfe, 0x30, 0xd2, 0xd0, 0x01, 0x0e, 0xee, 0x10, - 0xf9, 0xc2, 0xff, 0x00, 0xb3, 0xb6, 0x9f, 0x8b, 0x17, 0x38, 0xd6, 0x2f, - 0xe2, 0x26, 0x09, 0xbe, 0xb1, 0x5b, 0x9e, 0x20, 0x62, 0xf7, 0xde, 0x9e, - 0xa0, 0xb1, 0x46, 0x3a, 0xc3, 0xbe, 0xf5, 0xc2, 0x65, 0x94, 0x6d, 0x09, - 0xe8, 0x17, 0x64, 0x6c, 0xbd, 0x42, 0xbd, 0xe5, 0x81, 0x47, 0xc2, 0x67, - 0x51, 0xc7, 0x9e, 0x53, 0xb3, 0x4f, 0x4a, 0x02, 0x95, 0x4c, 0x52, 0xd6, - 0x79, 0x0d, 0x8f, 0x42, 0xbc, 0x53, 0xd4, 0x3d, 0xa1, 0x4e, 0x13, 0xcc, - 0x71, 0x25, 0xc6, 0xfd, 0x62, 0xf8, 0x01, 0xc8, 0x16, 0x2f, 0xfc, 0x36, - 0x87, 0xd8, 0x02, 0x68, 0x2c, 0x5e, 0x8d, 0xfb, 0xe7, 0x7a, 0xb1, 0x7a, - 0x04, 0xcb, 0x17, 0xfb, 0xd2, 0x7e, 0xa1, 0x9e, 0x58, 0xbd, 0xf7, 0x02, - 0xc5, 0xfd, 0xf7, 0xde, 0x7d, 0xc5, 0x8b, 0xdb, 0x34, 0x7a, 0xc6, 0xe6, - 0xbe, 0xa3, 0x74, 0x7e, 0xc9, 0x76, 0x0e, 0x44, 0x6b, 0xc4, 0xcb, 0xf3, - 0x43, 0xd9, 0xba, 0xc5, 0x46, 0xb4, 0xfc, 0x24, 0x67, 0x09, 0x3a, 0x8c, - 0xf3, 0x49, 0xd7, 0x3f, 0x72, 0xc5, 0xfb, 0xba, 0x61, 0xa9, 0x58, 0xbf, - 0xf7, 0x51, 0x7b, 0xf3, 0xee, 0x7d, 0xd6, 0x2f, 0x7d, 0xce, 0xb1, 0x73, - 0x01, 0x62, 0xa4, 0xfd, 0x99, 0x0b, 0xc3, 0xb7, 0xed, 0x6d, 0x3a, 0xd9, - 0x62, 0xfe, 0xcf, 0x70, 0x45, 0xe5, 0x8b, 0xcd, 0xae, 0x2c, 0x54, 0x9f, - 0xb6, 0x15, 0xf8, 0xba, 0xf7, 0xa0, 0xeb, 0x16, 0x75, 0x8b, 0xf0, 0x9a, - 0x10, 0x95, 0x8a, 0x81, 0xb9, 0xf8, 0x8d, 0xd2, 0x46, 0x1f, 0xbf, 0x95, - 0xaf, 0x68, 0x51, 0xeb, 0x17, 0x3c, 0x4b, 0x17, 0x88, 0x1c, 0x58, 0xa7, - 0x3d, 0x62, 0x21, 0x0c, 0x62, 0xdb, 0x2c, 0x5f, 0xe7, 0xe0, 0x8e, 0xdd, - 0x62, 0xc5, 0xff, 0xfc, 0x31, 0xc8, 0x0b, 0x07, 0xf9, 0x3c, 0xea, 0x78, - 0xb1, 0x79, 0xfd, 0x1a, 0x2c, 0x56, 0x8f, 0xf0, 0xeb, 0x57, 0xd3, 0xf7, - 0x35, 0x62, 0xa0, 0x8f, 0x5c, 0x85, 0x86, 0x88, 0xaf, 0xf0, 0x7e, 0x72, - 0x9e, 0xa0, 0xb1, 0x6c, 0x58, 0xa8, 0x1e, 0x37, 0x63, 0x5b, 0xff, 0x67, - 0x5e, 0x35, 0xb8, 0x1c, 0x8d, 0x62, 0xb6, 0x54, 0x2c, 0x69, 0x76, 0xf1, - 0x84, 0x69, 0xe8, 0x32, 0x4b, 0xff, 0x0c, 0x9f, 0x7f, 0xcf, 0x5c, 0x75, - 0x8b, 0xe1, 0x14, 0xf6, 0x58, 0xbe, 0x67, 0x20, 0x2c, 0x7c, 0xd2, 0x5c, - 0xdb, 0xac, 0x5c, 0x18, 0xd6, 0x2b, 0x47, 0xc5, 0xf3, 0x12, 0x18, 0xbf, - 0xfe, 0x3b, 0xf3, 0x7f, 0xbf, 0x5e, 0xc3, 0xb7, 0x16, 0x2f, 0xdc, 0x2e, - 0x4f, 0xd6, 0x2f, 0xf6, 0xb2, 0x1e, 0xe6, 0x6c, 0xb1, 0x71, 0x6e, 0xb1, - 0x68, 0x96, 0x2b, 0x0d, 0x5b, 0x0c, 0x56, 0x8f, 0xfc, 0x0c, 0x14, 0xe9, - 0x8d, 0xb2, 0x90, 0xa1, 0x4f, 0x74, 0xc4, 0xb1, 0x7e, 0xc3, 0xce, 0xb6, - 0x58, 0xad, 0x1e, 0x0b, 0x0c, 0x5f, 0xec, 0x0b, 0xe1, 0x30, 0x67, 0x58, - 0xb9, 0xa2, 0x58, 0xad, 0x8f, 0x3c, 0x8d, 0xef, 0xdc, 0x09, 0xba, 0xe2, - 0xc5, 0x39, 0xe6, 0xb1, 0x15, 0xfe, 0x3e, 0x9f, 0x92, 0x5b, 0x2c, 0x5f, - 0xf4, 0x9b, 0xf6, 0xf0, 0x78, 0x05, 0x8a, 0x63, 0xef, 0x23, 0x4b, 0xfe, - 0xe4, 0xfc, 0x9c, 0xf3, 0xc5, 0x8b, 0xdc, 0xd6, 0x2c, 0x5e, 0x2c, 0x82, - 0xc5, 0xfb, 0x40, 0x21, 0x01, 0x62, 0xa4, 0xf1, 0x70, 0x72, 0x9d, 0x10, - 0x5c, 0x62, 0xb4, 0x7a, 0xc5, 0xfd, 0x81, 0xcc, 0x4f, 0xc5, 0x8a, 0x23, - 0xc4, 0xf0, 0xad, 0x4b, 0x28, 0x23, 0x68, 0x50, 0xc2, 0x14, 0x63, 0x85, - 0x26, 0x4a, 0x99, 0xe9, 0x5a, 0x28, 0x63, 0x6a, 0x34, 0x93, 0xba, 0xfe, - 0x17, 0xa5, 0x08, 0xfe, 0x10, 0x7a, 0x17, 0x5d, 0x99, 0xaf, 0xfa, 0x5f, - 0xf2, 0x7d, 0xb0, 0x25, 0x8b, 0xff, 0x72, 0x5c, 0x65, 0x30, 0x70, 0x2c, - 0x5f, 0xbe, 0xfb, 0x31, 0x2c, 0x5c, 0x37, 0x58, 0xbd, 0xf7, 0x89, 0x62, - 0xed, 0x6c, 0xb1, 0x7c, 0x6b, 0x10, 0x16, 0x2b, 0x0d, 0xe0, 0x86, 0x6e, - 0xfb, 0xac, 0x54, 0xa3, 0x43, 0x0a, 0x22, 0x17, 0xfa, 0xd7, 0x71, 0x05, - 0xff, 0x6c, 0x59, 0x0f, 0xe0, 0x38, 0xb1, 0x7e, 0xe3, 0x97, 0x50, 0x58, - 0xbe, 0xf6, 0x66, 0x96, 0x28, 0xd3, 0xcb, 0xe1, 0x4d, 0xf0, 0xc9, 0x82, - 0x58, 0xbf, 0xff, 0x9c, 0x44, 0x6e, 0xff, 0x7d, 0xff, 0x3d, 0x04, 0xda, - 0x58, 0xbd, 0x25, 0xb9, 0x88, 0x83, 0xf1, 0x1d, 0xff, 0x3f, 0xe7, 0xa0, - 0x67, 0xb8, 0xb1, 0x78, 0x52, 0x05, 0x8b, 0xf6, 0x17, 0x50, 0xe6, 0x1e, - 0xbe, 0x8e, 0xaf, 0x73, 0x0d, 0x58, 0xb9, 0x8e, 0xb1, 0x5e, 0x36, 0xbd, - 0x87, 0xaf, 0xfd, 0xe1, 0x7a, 0x21, 0x6c, 0x77, 0xf2, 0xc5, 0x61, 0xf3, - 0x39, 0x1d, 0xfb, 0xad, 0x6a, 0x7a, 0x58, 0xbe, 0xdc, 0xe0, 0x95, 0x8b, - 0xfa, 0x19, 0xce, 0x38, 0xd6, 0x2d, 0x03, 0x0f, 0x4b, 0xc4, 0x95, 0x2a, - 0xb4, 0x76, 0x85, 0x33, 0xc2, 0x30, 0xf0, 0xd9, 0x11, 0x00, 0x6f, 0xb7, - 0xff, 0xfb, 0xe2, 0x2f, 0x16, 0x74, 0x06, 0xf7, 0x1c, 0xba, 0x82, 0xc5, - 0xfd, 0xb0, 0xbc, 0x26, 0x0d, 0x62, 0xec, 0xdd, 0x62, 0x96, 0x3c, 0x5c, - 0x5f, 0xb5, 0xf0, 0x98, 0x78, 0x7c, 0x9d, 0x92, 0x6f, 0xb0, 0xf3, 0xba, - 0xc5, 0xf4, 0xfb, 0x0e, 0xb1, 0x79, 0x9b, 0xa5, 0x8b, 0xe8, 0x37, 0xb8, - 0xb1, 0x43, 0x3c, 0x08, 0x87, 0x6b, 0x74, 0x42, 0xf9, 0x8a, 0x99, 0x30, - 0xd0, 0x20, 0x94, 0x2a, 0x2f, 0x0e, 0x7b, 0x2c, 0x5f, 0xff, 0xda, 0x7c, - 0x28, 0xba, 0x03, 0x7b, 0x8e, 0x5d, 0x41, 0x62, 0xff, 0xfb, 0xc6, 0xc9, - 0x43, 0x85, 0x9e, 0xf3, 0x01, 0x62, 0xff, 0xfe, 0xd3, 0x43, 0xec, 0x43, - 0x9e, 0xb5, 0xa9, 0x3f, 0x16, 0x2f, 0xfe, 0xfb, 0xf3, 0x98, 0x5e, 0xf4, - 0x9d, 0x62, 0xa0, 0x8f, 0x0d, 0x28, 0x71, 0x72, 0xf8, 0xdc, 0x28, 0x2c, - 0x5f, 0xe1, 0x6c, 0x72, 0x63, 0x5d, 0x62, 0xb0, 0xf6, 0x1c, 0x8e, 0xfb, - 0x5e, 0xcd, 0x96, 0x2f, 0xff, 0xc6, 0xb1, 0x98, 0x77, 0xf1, 0x9e, 0xe1, - 0x39, 0xab, 0x17, 0x4c, 0x4b, 0x17, 0xff, 0x14, 0x84, 0x32, 0x9e, 0xa0, - 0xe4, 0xb1, 0x46, 0xa2, 0xd7, 0x4b, 0x24, 0x31, 0x7e, 0x3e, 0x7d, 0xbb, - 0x96, 0x2a, 0x53, 0x34, 0xc8, 0x6c, 0xb9, 0x85, 0xfb, 0xad, 0xdf, 0xdc, - 0x58, 0xbf, 0xf4, 0x50, 0x9d, 0x6c, 0x60, 0x59, 0xf5, 0x8b, 0xfd, 0xf7, - 0xf9, 0x4e, 0x69, 0x62, 0xfd, 0x3d, 0xb4, 0x1f, 0x16, 0x28, 0xc4, 0x51, - 0x6e, 0x89, 0xf3, 0x2a, 0x94, 0x7f, 0xb4, 0x33, 0x6a, 0x57, 0x35, 0x06, - 0x69, 0x83, 0xef, 0x1a, 0x6e, 0xa1, 0x11, 0xf8, 0xd5, 0x0a, 0x33, 0x2b, - 0xfb, 0xb4, 0x5f, 0x72, 0x1a, 0xc5, 0xfc, 0x4c, 0x00, 0x4f, 0x16, 0x2a, - 0x4f, 0x79, 0x8c, 0x6f, 0xf7, 0xf3, 0xd8, 0x2d, 0x6c, 0xb1, 0x7f, 0xf8, - 0xcf, 0xc9, 0x9c, 0x78, 0xc9, 0xdd, 0x83, 0x58, 0xb4, 0x16, 0x2f, 0x3e, - 0xff, 0xc3, 0xe3, 0x65, 0x1b, 0xe2, 0x13, 0x79, 0x62, 0xfb, 0xad, 0xdf, - 0xa5, 0x8a, 0xd9, 0x33, 0x23, 0x90, 0x7e, 0x13, 0x00, 0x32, 0xe1, 0x15, - 0xe9, 0x8a, 0x25, 0x8b, 0xfc, 0x53, 0x08, 0xbf, 0x3b, 0x2c, 0x5d, 0xbb, - 0xac, 0x5f, 0xf3, 0x94, 0x53, 0xbe, 0xb3, 0xa5, 0x8a, 0x63, 0xd3, 0xe0, - 0xc5, 0x0d, 0x15, 0x3e, 0x84, 0x45, 0xf8, 0x66, 0x9a, 0x2e, 0x96, 0x29, - 0x8f, 0x54, 0x45, 0x17, 0xfe, 0xe8, 0x83, 0x93, 0xe7, 0xf0, 0x96, 0x2b, - 0x13, 0x7d, 0x36, 0x31, 0xd6, 0x21, 0xbf, 0xe9, 0xf6, 0x6b, 0x76, 0x6d, - 0xd5, 0x27, 0xc1, 0x7f, 0x33, 0x8e, 0x7d, 0xc5, 0x8b, 0xff, 0xfd, 0xe7, - 0xce, 0x87, 0xf1, 0x73, 0x37, 0x33, 0xef, 0x87, 0x58, 0xbe, 0xd4, 0xf5, - 0x05, 0x8b, 0xff, 0xb0, 0xe2, 0x83, 0x0f, 0x37, 0x9e, 0x2c, 0x56, 0x1f, - 0x4f, 0xc9, 0x2e, 0x93, 0xee, 0x9b, 0x17, 0xd1, 0xf8, 0x5b, 0xe8, 0x66, - 0xdf, 0xf3, 0x1b, 0xc7, 0xe3, 0xf5, 0xe5, 0x8a, 0xfa, 0x22, 0x89, 0x3e, - 0xff, 0xfb, 0x73, 0x3f, 0x2f, 0xa7, 0x3b, 0xc7, 0x49, 0xd6, 0x2f, 0xee, - 0x75, 0x25, 0x3c, 0x58, 0xa2, 0x44, 0x10, 0x4a, 0x97, 0x9b, 0x5b, 0x2a, - 0x4f, 0xf2, 0xfe, 0x2d, 0xf9, 0xcc, 0x8f, 0x58, 0xbf, 0xf1, 0x00, 0x2c, - 0xeb, 0xde, 0x93, 0xac, 0x5e, 0xf4, 0xec, 0xb1, 0x52, 0x89, 0x1c, 0x32, - 0x64, 0x1b, 0xff, 0x17, 0xb5, 0x93, 0xd4, 0x1c, 0xeb, 0x17, 0xb3, 0x6e, - 0xe5, 0x8b, 0xfb, 0x3a, 0x06, 0x7b, 0x8b, 0x17, 0xe9, 0x2e, 0xa1, 0xc5, - 0x8f, 0x9a, 0xfa, 0x95, 0x4f, 0x19, 0x0a, 0x4d, 0xc8, 0xff, 0x0b, 0xc6, - 0x2d, 0x23, 0xf1, 0x28, 0x5f, 0xfa, 0x41, 0xc2, 0xcd, 0xb0, 0x33, 0xac, - 0x5f, 0xff, 0xff, 0xff, 0x7b, 0x0f, 0xa6, 0x19, 0x9d, 0x43, 0x8f, 0xcc, - 0x3c, 0xff, 0xd8, 0xfd, 0x8c, 0xea, 0x1c, 0xf0, 0xb0, 0x6b, 0x17, 0xbc, - 0xe1, 0x2c, 0x5f, 0xcd, 0xb0, 0x63, 0x68, 0xf5, 0x8a, 0xc4, 0xd0, 0xf8, - 0x81, 0xe8, 0x59, 0x08, 0x7a, 0xff, 0x6b, 0x59, 0x11, 0xe7, 0x8b, 0x17, - 0xfc, 0x5b, 0x96, 0x7f, 0xe2, 0x25, 0x8b, 0xfd, 0xee, 0x39, 0x75, 0x03, - 0xac, 0x54, 0x9f, 0x73, 0x1c, 0xdf, 0xf3, 0xeb, 0x61, 0x00, 0x13, 0xe5, - 0x8b, 0xfd, 0x9a, 0x32, 0x0f, 0xd4, 0x16, 0x2f, 0xfe, 0x90, 0x64, 0x1f, - 0xd0, 0x92, 0x02, 0xc5, 0x49, 0xfc, 0xfc, 0xda, 0xa0, 0x9e, 0xd6, 0x21, - 0x02, 0x14, 0x7c, 0x20, 0xf4, 0x2d, 0x2f, 0x8f, 0xae, 0x99, 0x62, 0xff, - 0xd3, 0xa8, 0x39, 0x61, 0xc3, 0x95, 0x8b, 0xd9, 0x80, 0x58, 0xbd, 0x20, - 0x8f, 0x58, 0xbf, 0xfc, 0xd0, 0x9f, 0x3f, 0xe4, 0x51, 0xe4, 0x35, 0x8a, - 0xdc, 0xfb, 0x34, 0x41, 0x7f, 0xff, 0xbe, 0xdc, 0x79, 0xe1, 0x9e, 0xfe, + 0x4f, 0xb2, 0xf7, 0x41, 0x79, 0x62, 0xe9, 0x1a, 0xc5, 0xff, 0xd3, 0xdc, + 0x3e, 0xcf, 0xe9, 0xf7, 0x16, 0x2a, 0x4f, 0xf0, 0x04, 0x04, 0x2f, 0x7f, + 0x37, 0xb8, 0xfc, 0x75, 0x8b, 0xf6, 0xfb, 0x68, 0x5b, 0x2c, 0x5f, 0xf4, + 0x93, 0xfb, 0x99, 0xce, 0x8b, 0x17, 0xed, 0xe4, 0xa4, 0x0b, 0x15, 0x88, + 0x8f, 0xd1, 0x6b, 0x1d, 0x5f, 0xe9, 0x1b, 0xee, 0xe5, 0xb2, 0xc5, 0xfb, + 0xf2, 0x4d, 0xd1, 0x62, 0xfe, 0x90, 0x73, 0xcc, 0x35, 0x8a, 0xdc, 0xf5, + 0xc0, 0x53, 0x52, 0x8a, 0xec, 0x84, 0x5d, 0xcf, 0xd4, 0xb1, 0x7f, 0xce, + 0x5d, 0xc3, 0x42, 0x9e, 0x2c, 0x5f, 0xa4, 0x2f, 0xe6, 0xcb, 0x17, 0x67, + 0x52, 0xc5, 0x01, 0x13, 0x1c, 0x1a, 0xf1, 0xd0, 0x45, 0x57, 0xda, 0xc1, + 0xca, 0xc5, 0xfc, 0x73, 0x27, 0x77, 0xc5, 0x8a, 0xc3, 0xd1, 0x62, 0x2b, + 0xdb, 0x8b, 0x65, 0x8b, 0x85, 0xe5, 0x8b, 0xf7, 0x56, 0x61, 0x01, 0x62, + 0x86, 0xbb, 0x41, 0xbb, 0xaf, 0x6a, 0x11, 0xe7, 0x11, 0x17, 0x6a, 0x1c, + 0x27, 0x2d, 0xfc, 0x2f, 0x0a, 0x1b, 0x9e, 0x85, 0xf7, 0x48, 0x47, 0x84, + 0x41, 0x1c, 0x41, 0xd4, 0x31, 0x7c, 0x2d, 0x82, 0xe8, 0xb1, 0x7f, 0xfe, + 0xd6, 0x37, 0xb9, 0x9e, 0x26, 0x6d, 0xb3, 0x75, 0x8a, 0xe1, 0xfe, 0xf8, + 0xa2, 0xfd, 0xfc, 0x8a, 0x63, 0xd6, 0x2f, 0x7b, 0x37, 0x58, 0xbf, 0x0f, + 0x5a, 0xc0, 0x96, 0x2f, 0xfd, 0xec, 0xfc, 0xe8, 0x04, 0xc6, 0xac, 0x5f, + 0x75, 0xed, 0x9c, 0x58, 0xad, 0x91, 0xb4, 0x02, 0xc2, 0x1e, 0xe1, 0x50, + 0x8f, 0xef, 0xe7, 0x2c, 0xf4, 0xc4, 0xb1, 0x7f, 0xbf, 0x22, 0xee, 0x0f, + 0x1c, 0xb1, 0x7f, 0xf4, 0x39, 0x27, 0xcd, 0xc9, 0xb3, 0x75, 0x8b, 0xf6, + 0xd1, 0x7d, 0xc0, 0xb1, 0x7d, 0x24, 0x68, 0xd6, 0x2f, 0xff, 0x98, 0xb6, + 0x2c, 0xef, 0x8d, 0x9e, 0xc3, 0xac, 0x5f, 0xf1, 0xf3, 0x52, 0xe5, 0x27, + 0x58, 0xbf, 0xb0, 0x63, 0xc3, 0x4e, 0xb1, 0x79, 0x81, 0x2b, 0x17, 0xff, + 0x86, 0xe7, 0xee, 0x1c, 0x2c, 0xd0, 0x7e, 0x58, 0xbd, 0xa6, 0x89, 0x62, + 0xfc, 0x3d, 0x69, 0xce, 0xb1, 0x52, 0xaa, 0x9e, 0x09, 0x5b, 0x96, 0xf6, + 0x70, 0xe8, 0xbf, 0x2b, 0x62, 0x30, 0x27, 0x91, 0xbf, 0x0b, 0xfc, 0x38, + 0x24, 0xd0, 0xc7, 0xae, 0x87, 0x16, 0x2f, 0xe0, 0xa7, 0xef, 0xdc, 0x16, + 0x2f, 0x13, 0x9a, 0xb1, 0x7c, 0xfb, 0xb6, 0x96, 0x2f, 0xff, 0xff, 0x31, + 0xa3, 0xfc, 0xea, 0x7f, 0x3e, 0xfb, 0x1c, 0x38, 0xb9, 0xbb, 0xec, 0xb1, + 0x50, 0x45, 0x01, 0x11, 0xdf, 0xfc, 0xfb, 0xb8, 0xcb, 0x3d, 0xc9, 0x3a, + 0xc5, 0xff, 0xe6, 0x2c, 0xf4, 0xbe, 0x9c, 0xd3, 0x65, 0x62, 0xbb, 0x4e, + 0x70, 0xe6, 0x1c, 0x85, 0xef, 0x88, 0x83, 0x44, 0xbf, 0xff, 0x89, 0x8d, + 0x36, 0x78, 0x3f, 0xb6, 0xda, 0x79, 0xd9, 0x62, 0xe3, 0xe2, 0xc5, 0xf3, + 0xef, 0x27, 0x58, 0xb6, 0xeb, 0x17, 0xff, 0xf3, 0xe8, 0xdf, 0xc9, 0xe2, + 0x83, 0x97, 0xe7, 0x52, 0xb1, 0x62, 0x58, 0xa0, 0x1f, 0x68, 0x97, 0x2a, + 0x08, 0xc5, 0xc2, 0x3e, 0x42, 0x02, 0x86, 0x9b, 0x71, 0xd7, 0xbd, 0x0d, + 0xcb, 0xff, 0xb0, 0x04, 0xc6, 0xf3, 0x3c, 0xdf, 0x58, 0xbc, 0xfa, 0xc5, + 0x8b, 0xc5, 0x90, 0x58, 0xad, 0xcd, 0xc7, 0x87, 0x2e, 0x93, 0xac, 0x5e, + 0x29, 0x3a, 0xc5, 0xf9, 0x87, 0x38, 0x4b, 0x15, 0x29, 0x96, 0xec, 0x6c, + 0xef, 0x84, 0x45, 0xc1, 0x71, 0x0e, 0x5f, 0xfe, 0x2c, 0xda, 0x7d, 0xdc, + 0xe8, 0x59, 0xb2, 0xc5, 0xf9, 0xbf, 0xbb, 0xf1, 0x62, 0xbe, 0x7e, 0xa4, + 0x99, 0x7f, 0xcf, 0x0f, 0x7f, 0x34, 0xfc, 0x58, 0xbf, 0xff, 0x43, 0x08, + 0x7f, 0x9c, 0x29, 0x01, 0xda, 0x0b, 0x15, 0x28, 0xad, 0x22, 0x10, 0xce, + 0x6f, 0xee, 0xe1, 0xe7, 0xf7, 0x16, 0x2f, 0xc1, 0xfd, 0xb6, 0xc5, 0x8b, + 0x39, 0xa7, 0xb4, 0x46, 0x17, 0xfb, 0x3f, 0xdc, 0x3d, 0x27, 0x58, 0xbf, + 0x40, 0xb3, 0x36, 0x58, 0xbb, 0x5b, 0x2c, 0x5f, 0xf4, 0x5d, 0x6f, 0x9c, + 0x63, 0xc2, 0x58, 0xbf, 0x6d, 0xad, 0x08, 0xd5, 0x8a, 0x94, 0x56, 0x61, + 0x43, 0x8c, 0x88, 0xfe, 0xff, 0x30, 0xe4, 0x12, 0x17, 0x16, 0x28, 0x69, + 0xbb, 0x61, 0x3f, 0xe1, 0xc2, 0xc7, 0x57, 0xde, 0x87, 0x8d, 0x58, 0xbf, + 0xff, 0xf1, 0xb2, 0x5c, 0xfb, 0x3e, 0xb4, 0xe7, 0x0f, 0xdd, 0xee, 0xe7, + 0x58, 0xbf, 0xff, 0x7b, 0xab, 0x0e, 0xdb, 0xcb, 0xc1, 0xfd, 0x9a, 0x58, + 0xbf, 0xa3, 0xba, 0xea, 0x61, 0x9f, 0x8e, 0x5c, 0x80, 0x25, 0xfe, 0xf0, + 0x03, 0x28, 0x7f, 0x17, 0x20, 0x09, 0x79, 0xb5, 0x05, 0xc8, 0x02, 0x56, + 0x1f, 0x60, 0x90, 0xae, 0x68, 0x2e, 0x40, 0x12, 0xf9, 0x8b, 0xb8, 0x2e, + 0x40, 0x12, 0xff, 0x3e, 0xff, 0xc0, 0x02, 0x57, 0x20, 0x09, 0x79, 0xc8, + 0x6b, 0x90, 0x04, 0xa1, 0xa2, 0xf8, 0xe4, 0x9f, 0x30, 0xe8, 0x83, 0x63, + 0x57, 0x20, 0x09, 0x7b, 0x53, 0xe5, 0xc8, 0x02, 0x52, 0xe4, 0x01, 0x2f, + 0x47, 0x38, 0x17, 0x20, 0x09, 0x74, 0x9d, 0x72, 0x00, 0xc1, 0x43, 0x3e, + 0xec, 0x19, 0x72, 0xdb, 0xe7, 0x38, 0xe5, 0x72, 0x00, 0x97, 0xbc, 0xdb, + 0xae, 0x40, 0x12, 0xff, 0xc4, 0xd0, 0x8c, 0xfb, 0xee, 0xda, 0x5c, 0x80, + 0x25, 0xff, 0xcd, 0xe1, 0x6c, 0xe5, 0xef, 0xb4, 0x17, 0x20, 0x09, 0x73, + 0x0d, 0x72, 0x00, 0x97, 0xf8, 0x98, 0x2e, 0x72, 0x40, 0xb9, 0x00, 0x4b, + 0xf3, 0x9a, 0xc4, 0x05, 0xc8, 0x02, 0x5c, 0xfc, 0x5c, 0x80, 0x25, 0x68, + 0xf6, 0x7c, 0x6b, 0x7f, 0xfb, 0xef, 0xef, 0x67, 0x0c, 0xd3, 0xc9, 0xd7, + 0x20, 0x09, 0x7e, 0xf1, 0x4f, 0x70, 0x54, 0x80, 0x25, 0xc0, 0x95, 0xc8, + 0x02, 0x46, 0x1b, 0x6a, 0x5c, 0x80, 0x25, 0xf4, 0x9d, 0x86, 0xb9, 0x00, + 0x4a, 0x19, 0xe4, 0x38, 0xcd, 0xf0, 0x98, 0xb7, 0x5c, 0x80, 0x25, 0xe9, + 0xd6, 0xeb, 0x90, 0x04, 0xbf, 0xf6, 0x77, 0xc1, 0xce, 0x10, 0x38, 0xb9, + 0x00, 0x4b, 0xe3, 0x87, 0x20, 0x5c, 0x80, 0x25, 0xf3, 0x42, 0x12, 0xb9, + 0x00, 0x4a, 0xc3, 0xe0, 0x11, 0x8d, 0xf9, 0xb7, 0xfc, 0xf6, 0xb9, 0x00, + 0x4a, 0xc4, 0xc1, 0x3f, 0x0a, 0xc1, 0x10, 0xdd, 0xa0, 0x2e, 0x40, 0x12, + 0xa0, 0xaf, 0x1c, 0x64, 0x99, 0x09, 0xad, 0xc8, 0x9e, 0x11, 0xdf, 0x7f, + 0x01, 0x0f, 0x0c, 0x3d, 0x19, 0x78, 0x8d, 0x6c, 0x75, 0xc8, 0x02, 0x5f, + 0xb3, 0xdc, 0x6e, 0xd7, 0x20, 0x09, 0x7f, 0x87, 0x3b, 0xc5, 0xa9, 0xf2, + 0xe4, 0x01, 0x06, 0x6d, 0xaf, 0x6a, 0x42, 0x5c, 0x80, 0x25, 0x62, 0x34, + 0xf7, 0x55, 0xd2, 0x9d, 0xfe, 0x13, 0x42, 0x12, 0x19, 0xd7, 0x20, 0x09, + 0x7c, 0xe5, 0x0e, 0x2e, 0x40, 0x12, 0xfe, 0x68, 0xa1, 0x9d, 0xc1, 0x72, + 0x00, 0x95, 0x88, 0xde, 0xf9, 0x80, 0x10, 0x84, 0x5f, 0x7f, 0xdf, 0x9e, + 0x46, 0x70, 0x5a, 0x02, 0xe4, 0x01, 0x82, 0xce, 0xb9, 0x00, 0x4b, 0x9b, + 0x61, 0x9f, 0x6f, 0xd3, 0xee, 0xd0, 0x17, 0x20, 0x09, 0x7e, 0x6f, 0x71, + 0xfb, 0x5c, 0x80, 0x25, 0xf0, 0xa1, 0x9c, 0x5c, 0x80, 0x25, 0xfc, 0xfe, + 0x84, 0x86, 0x75, 0xc8, 0x02, 0x59, 0xc8, 0xfb, 0x3a, 0x18, 0x54, 0xa3, + 0xbc, 0x89, 0x7d, 0x0a, 0x2a, 0x96, 0x5e, 0x20, 0xe1, 0x73, 0x90, 0xdf, + 0x73, 0xf8, 0x88, 0x35, 0x09, 0x8f, 0x96, 0xb1, 0x78, 0x0a, 0xc9, 0x3f, + 0x93, 0x83, 0x3e, 0x94, 0x9b, 0x1d, 0x0a, 0x90, 0xe3, 0x1d, 0xbd, 0xe7, + 0x09, 0x72, 0x84, 0x97, 0x36, 0xea, 0x90, 0x04, 0x8c, 0x4c, 0x5f, 0xb8, + 0x76, 0x54, 0xb3, 0x60, 0x5a, 0x9a, 0x67, 0x7f, 0xf9, 0x8e, 0xde, 0x14, + 0x99, 0xc1, 0x74, 0x95, 0x8b, 0xd2, 0x17, 0x16, 0x2d, 0xe5, 0x8b, 0xc5, + 0x9b, 0xee, 0x6c, 0x1c, 0x7a, 0xe1, 0x9d, 0x62, 0xf4, 0x1f, 0x8b, 0x17, + 0xfe, 0xfe, 0x6f, 0x27, 0xe6, 0xd0, 0xd9, 0x62, 0xff, 0x1f, 0x59, 0x0f, + 0xcc, 0x16, 0x2e, 0x20, 0x78, 0xfd, 0xc3, 0x43, 0xbf, 0xc2, 0xf6, 0x73, + 0xd9, 0xba, 0xc5, 0xfe, 0x7e, 0xfc, 0x3f, 0xe7, 0x16, 0x2b, 0xae, 0xd3, + 0x44, 0x88, 0x61, 0xa1, 0x28, 0x02, 0xee, 0x1a, 0xdd, 0xd2, 0x25, 0x8b, + 0xcf, 0xdf, 0x16, 0x2f, 0xc5, 0x80, 0x8e, 0xc5, 0x8a, 0x01, 0xe4, 0x78, + 0x7a, 0xf4, 0xed, 0xd1, 0x62, 0xb6, 0x55, 0xde, 0x37, 0xd3, 0x63, 0x76, + 0xed, 0x5c, 0xec, 0x7d, 0x44, 0x57, 0xfa, 0x0f, 0xe3, 0x4d, 0xc8, 0xf5, + 0x8b, 0xe9, 0xf4, 0x8d, 0x62, 0xdb, 0x2c, 0x54, 0x0d, 0xaf, 0x42, 0x2b, + 0xf4, 0xeb, 0xed, 0x1e, 0xb1, 0x7f, 0x8a, 0x5b, 0xcd, 0xd8, 0x16, 0x2b, + 0x63, 0xde, 0xf1, 0x5d, 0xf8, 0xf8, 0x36, 0x3a, 0xc5, 0xff, 0x70, 0xa4, + 0xfc, 0xde, 0x78, 0xb1, 0x6e, 0x2c, 0x5f, 0xec, 0xe1, 0x37, 0x32, 0x3d, + 0x62, 0xf4, 0x8f, 0xeb, 0x15, 0xf3, 0xd2, 0x23, 0x5a, 0x94, 0x73, 0xe1, + 0x47, 0xce, 0xba, 0x32, 0x5f, 0x67, 0x49, 0xfa, 0xc5, 0x4a, 0x7d, 0x99, + 0x08, 0x17, 0x8c, 0x2b, 0xe7, 0xb7, 0x42, 0x56, 0x2f, 0xfc, 0x59, 0xbf, + 0xdc, 0x00, 0x14, 0x4b, 0x17, 0xde, 0x66, 0xd2, 0xc5, 0xff, 0x0f, 0x0d, + 0x2c, 0xf4, 0x84, 0xb1, 0x7f, 0x66, 0xb2, 0x10, 0x95, 0x8b, 0xff, 0xc5, + 0x9d, 0x81, 0xbd, 0xc7, 0x2e, 0xe0, 0xb1, 0x50, 0x4c, 0x57, 0xb4, 0x10, + 0x11, 0x11, 0xd7, 0x0b, 0x6f, 0x0d, 0xbe, 0xb1, 0x7e, 0xc8, 0xb9, 0x3b, + 0x2c, 0x5b, 0xd8, 0x78, 0xfe, 0x1d, 0xb8, 0x12, 0x91, 0x63, 0x52, 0x2f, + 0x7e, 0x76, 0x58, 0xb8, 0x20, 0x92, 0x29, 0xcf, 0x8a, 0x3c, 0x5e, 0x21, + 0x30, 0x87, 0xaf, 0xfa, 0x0f, 0xec, 0x3f, 0x1a, 0x0b, 0x16, 0xe2, 0x44, + 0x61, 0xfc, 0xca, 0x05, 0x62, 0x66, 0x8f, 0x18, 0x15, 0xfe, 0x7f, 0x49, + 0xe4, 0x86, 0xb1, 0x7c, 0xfe, 0xcd, 0xd6, 0x2e, 0xc0, 0x40, 0xf5, 0x7c, + 0x65, 0x7f, 0xd9, 0xf7, 0x03, 0x9a, 0xe1, 0x2c, 0x58, 0x96, 0x2a, 0x4f, + 0x2d, 0xce, 0xa8, 0xe9, 0x8a, 0xb3, 0xe8, 0x1e, 0x2f, 0xec, 0x1f, 0xe4, + 0x86, 0xb1, 0x7f, 0xfb, 0x36, 0xcc, 0xf9, 0x09, 0xbd, 0xfc, 0x58, 0xbf, + 0xbd, 0xcc, 0x0b, 0xee, 0xb1, 0x6f, 0x2c, 0x57, 0x8f, 0x04, 0x45, 0xf7, + 0xfb, 0x37, 0x33, 0x0f, 0x3b, 0xac, 0x5f, 0x6d, 0xc3, 0xc1, 0x62, 0xfc, + 0xc5, 0xdc, 0x38, 0xb1, 0x52, 0x79, 0xd8, 0x4b, 0x58, 0x9a, 0x83, 0xc2, + 0x2b, 0xe4, 0x5e, 0x84, 0x25, 0xf9, 0xff, 0x25, 0x05, 0x8b, 0xff, 0x77, + 0x26, 0xf2, 0x7b, 0x83, 0x9d, 0x62, 0xff, 0x79, 0xca, 0x74, 0xc0, 0x58, + 0xba, 0x1c, 0x64, 0x4d, 0x91, 0x38, 0x68, 0x57, 0xff, 0x73, 0xdd, 0xee, + 0xfa, 0xf3, 0x03, 0x8b, 0x15, 0xda, 0x20, 0xc8, 0xee, 0xff, 0x8d, 0x7d, + 0x06, 0x00, 0x4f, 0x6b, 0x17, 0xd0, 0xf4, 0x84, 0xb1, 0x77, 0xb9, 0x87, + 0xc3, 0xd9, 0xed, 0x46, 0xce, 0x91, 0x6e, 0x63, 0xb4, 0xda, 0x57, 0x6c, + 0x23, 0x78, 0x1c, 0x7f, 0xf8, 0x82, 0x69, 0x2e, 0xf4, 0xdf, 0x17, 0x96, + 0x3b, 0x13, 0x2e, 0xa5, 0x2d, 0x1d, 0x19, 0xa3, 0x2c, 0x04, 0xad, 0xb2, + 0x30, 0xf4, 0x6f, 0xa2, 0x8d, 0x90, 0x38, 0x42, 0x5f, 0x06, 0x3c, 0x3a, + 0xc5, 0xfd, 0x9a, 0xf7, 0xa7, 0x65, 0x8b, 0xf0, 0xdb, 0x7e, 0x41, 0x62, + 0xfe, 0x72, 0x06, 0x77, 0xe5, 0x8b, 0x41, 0xcf, 0x63, 0xe5, 0x57, 0xd3, + 0xb8, 0x67, 0x58, 0xbf, 0xf3, 0x3f, 0xa4, 0xbd, 0xfc, 0x82, 0xc5, 0xf0, + 0xce, 0xd0, 0x58, 0xb3, 0xac, 0x53, 0x1b, 0x4e, 0x11, 0xd1, 0x89, 0xb2, + 0x64, 0x21, 0xf4, 0x4f, 0xf2, 0x5f, 0x38, 0xdf, 0xe7, 0x2d, 0xdf, 0x4e, + 0x05, 0x8b, 0xd9, 0x80, 0x58, 0xbf, 0xe3, 0xef, 0xf7, 0x1f, 0xdc, 0xd5, + 0x8a, 0x3a, 0x22, 0xc8, 0xcc, 0x31, 0xcb, 0xfc, 0x6f, 0xde, 0x4f, 0xc8, + 0x2c, 0x56, 0xe9, 0xa0, 0x7e, 0x1b, 0x64, 0x61, 0x69, 0x58, 0xbe, 0xf8, + 0x98, 0x96, 0x2d, 0xe3, 0x0d, 0x98, 0xc4, 0x6e, 0x73, 0xac, 0x5e, 0xf4, + 0x8d, 0x62, 0xef, 0x92, 0xc5, 0xfd, 0x9d, 0xc0, 0xed, 0x05, 0x8a, 0xc3, + 0xe3, 0xdc, 0x77, 0xa8, 0x5e, 0xff, 0xef, 0x47, 0x64, 0x50, 0x6d, 0x6c, + 0x39, 0x58, 0xae, 0xd3, 0x1e, 0xd1, 0x41, 0xde, 0x88, 0xca, 0xff, 0xef, + 0x38, 0x47, 0xe3, 0x90, 0x9b, 0xcb, 0x17, 0xc3, 0x60, 0x71, 0x62, 0xff, + 0x18, 0xf9, 0xcf, 0xe7, 0x96, 0x2b, 0x0f, 0x5f, 0x84, 0x77, 0xff, 0x34, + 0x0c, 0x27, 0x93, 0x1c, 0xf8, 0xb1, 0x77, 0x60, 0x58, 0xb0, 0x0e, 0x7b, + 0xa0, 0x44, 0xbe, 0xcf, 0x07, 0xb2, 0xc5, 0xff, 0xef, 0xc9, 0xc9, 0x8d, + 0xe7, 0xe4, 0xbc, 0xb1, 0x74, 0x84, 0xb1, 0x4e, 0x7c, 0x51, 0x25, 0x5f, + 0xf1, 0xa6, 0xb4, 0x3c, 0xfc, 0x75, 0x8b, 0xc0, 0x93, 0xac, 0x56, 0x1e, + 0xc6, 0x8e, 0xef, 0xe6, 0xe6, 0x74, 0x90, 0x96, 0x2f, 0xff, 0x7d, 0xfa, + 0x3e, 0xfa, 0x9d, 0x9b, 0x5b, 0xac, 0x5f, 0xd3, 0xdc, 0x93, 0x79, 0x62, + 0xe2, 0x02, 0xc5, 0xd3, 0xc5, 0x8a, 0x73, 0x5d, 0xd0, 0x5e, 0xbe, 0x7f, + 0xbd, 0x16, 0xe8, 0xc5, 0x48, 0x53, 0x08, 0x7c, 0x7a, 0x34, 0x87, 0x73, + 0x00, 0xe1, 0x99, 0x5a, 0x56, 0x9a, 0x4f, 0xde, 0x94, 0xd5, 0x7f, 0xff, + 0xbe, 0xe4, 0x3c, 0x3f, 0xa7, 0x30, 0xe3, 0x9c, 0x25, 0x8b, 0xfd, 0x9d, + 0xfb, 0xcd, 0x0e, 0x2c, 0x5f, 0xf3, 0x76, 0x60, 0x98, 0x37, 0xd9, 0x62, + 0xff, 0x07, 0x21, 0x6a, 0x70, 0x96, 0x2e, 0xeb, 0xe0, 0xb1, 0x7e, 0x63, + 0x4b, 0x22, 0x58, 0xbf, 0xd3, 0xa0, 0x66, 0x98, 0x96, 0x2a, 0x07, 0xf0, + 0x43, 0xa1, 0x94, 0xdd, 0xdc, 0x17, 0x28, 0x01, 0x7f, 0xfb, 0x02, 0x9f, + 0x64, 0x50, 0x7f, 0x71, 0x96, 0x2a, 0x09, 0xa6, 0x77, 0x0a, 0xc2, 0x2f, + 0xe1, 0x35, 0xf0, 0x98, 0xb7, 0x58, 0xb8, 0x10, 0x58, 0xbf, 0xf1, 0x37, + 0x85, 0xe1, 0xfd, 0xcd, 0x58, 0xbd, 0x39, 0xf2, 0x3d, 0x8e, 0x0c, 0x5f, + 0x9e, 0x7d, 0x23, 0x58, 0xbf, 0xe7, 0xef, 0x9e, 0x29, 0x3f, 0x16, 0x2f, + 0xff, 0xff, 0xff, 0xe1, 0x47, 0x93, 0x67, 0xd8, 0x32, 0xce, 0x98, 0x4c, + 0x6c, 0x50, 0x17, 0x38, 0x13, 0x0f, 0xee, 0x17, 0x31, 0x86, 0xb1, 0x46, + 0xa3, 0xdf, 0x87, 0x57, 0xbf, 0x9d, 0x4b, 0x17, 0xe2, 0x6e, 0x8d, 0xf5, + 0x8b, 0xff, 0xb8, 0x60, 0x63, 0x9d, 0x69, 0xe4, 0xeb, 0x15, 0x87, 0xe0, + 0x22, 0x9a, 0x31, 0x16, 0x3c, 0x84, 0x85, 0xfc, 0xdf, 0x89, 0x9f, 0x65, + 0x8b, 0xff, 0xff, 0x6d, 0x83, 0x93, 0xe1, 0x0b, 0xc2, 0x37, 0xdd, 0xee, + 0xe5, 0xb2, 0xc5, 0x18, 0xce, 0x74, 0x99, 0x59, 0x19, 0x1c, 0x3f, 0x67, + 0xcf, 0x2f, 0xa6, 0x23, 0x8d, 0x2e, 0x9c, 0xd5, 0xa3, 0x89, 0x02, 0x19, + 0x3d, 0xf0, 0xc7, 0xd1, 0x8f, 0x0a, 0x1a, 0xa1, 0x14, 0x86, 0x5f, 0x7f, + 0x83, 0xf3, 0xea, 0x70, 0x96, 0x2f, 0xff, 0xc4, 0x42, 0xef, 0x3b, 0xf0, + 0xf4, 0xdd, 0xe6, 0xcb, 0x17, 0xec, 0xf6, 0xa7, 0x8b, 0x14, 0xe8, 0x81, + 0x25, 0x9b, 0xe7, 0x29, 0x3a, 0xc5, 0xd3, 0x05, 0x8a, 0xc3, 0x70, 0x02, + 0x1b, 0xf8, 0x9b, 0xb9, 0x78, 0x96, 0x2d, 0xb2, 0xc5, 0x2c, 0x5d, 0x09, + 0xd1, 0x7e, 0x01, 0x3b, 0xcd, 0x0c, 0x58, 0xa8, 0x8f, 0x1c, 0xe5, 0x77, + 0xd2, 0x6c, 0x9d, 0x62, 0xf4, 0x06, 0xeb, 0x15, 0x04, 0xdc, 0x3b, 0x59, + 0x72, 0x0d, 0x42, 0x50, 0xe4, 0x64, 0x47, 0x7f, 0x16, 0x1e, 0x74, 0x6a, + 0xc5, 0xfb, 0xcf, 0xd3, 0xee, 0xb1, 0x6e, 0x18, 0x7b, 0x18, 0x5d, 0x7f, + 0xff, 0xfc, 0x5b, 0xff, 0xb6, 0x8f, 0x0f, 0x3e, 0x4d, 0xef, 0x4f, 0xdf, + 0xdc, 0xc1, 0xac, 0x54, 0x11, 0x55, 0x85, 0x17, 0xec, 0x61, 0xb7, 0x96, + 0x2d, 0xda, 0xc5, 0x70, 0xdd, 0x04, 0x4f, 0x7f, 0xfb, 0xcc, 0x40, 0x33, + 0x3f, 0x3b, 0xe7, 0x45, 0x8b, 0xff, 0xf7, 0xf3, 0xb8, 0x14, 0xe7, 0x3b, + 0x04, 0x96, 0xeb, 0x17, 0xff, 0xf1, 0xc3, 0xcf, 0xb1, 0xf0, 0xef, 0xec, + 0x35, 0xf4, 0xb1, 0x7f, 0xa4, 0xf9, 0xd5, 0xe7, 0x09, 0x62, 0xa5, 0x12, + 0x7c, 0x5c, 0xbf, 0xfe, 0xcd, 0x44, 0x52, 0x0e, 0x6f, 0xf7, 0xd6, 0xcb, + 0x15, 0x03, 0xf5, 0xe1, 0x15, 0xf8, 0xc3, 0x33, 0xec, 0xb1, 0x7b, 0x98, + 0x75, 0x8b, 0xec, 0x21, 0xc6, 0x8b, 0x17, 0xf9, 0xc8, 0xcd, 0xdb, 0x5b, + 0x2c, 0x54, 0x0f, 0xeb, 0xe3, 0xbe, 0x27, 0xbf, 0xd9, 0xdf, 0x8c, 0x8e, + 0x73, 0x56, 0x2f, 0xdd, 0xfa, 0x39, 0xcd, 0x58, 0xbc, 0x77, 0xf1, 0x87, + 0xd1, 0x87, 0x57, 0xb9, 0x24, 0xb1, 0x7b, 0x59, 0xc5, 0x8b, 0x6f, 0x26, + 0xe7, 0x07, 0x2f, 0xf6, 0x73, 0xf8, 0x4d, 0xc5, 0x8b, 0xfe, 0xef, 0x8f, + 0xdc, 0x3e, 0xff, 0x58, 0xbf, 0xef, 0xb3, 0xfa, 0x1f, 0x11, 0xab, 0x17, + 0x9b, 0xfc, 0x58, 0xaf, 0xa3, 0x19, 0x8c, 0xb8, 0x78, 0x11, 0xdd, 0xf9, + 0xf9, 0x23, 0x82, 0xc5, 0xfd, 0x09, 0xd0, 0x03, 0x3a, 0xc5, 0xfe, 0x9e, + 0x30, 0x18, 0x80, 0xb1, 0x7d, 0x17, 0xde, 0x25, 0x8b, 0xff, 0x1a, 0x6b, + 0x96, 0xe6, 0x6d, 0xf3, 0x56, 0x2b, 0x0f, 0xad, 0xc9, 0x6f, 0xff, 0xff, + 0x7d, 0xfd, 0x3a, 0x67, 0x18, 0xa7, 0x93, 0xa1, 0x41, 0xf5, 0x80, 0x58, + 0xbf, 0xfb, 0xa1, 0x67, 0x3d, 0x85, 0x0c, 0xe2, 0xc5, 0xf1, 0xe4, 0x5e, + 0x58, 0xac, 0x3e, 0x86, 0x45, 0xbe, 0x86, 0x9c, 0xeb, 0x17, 0xbc, 0x23, + 0x56, 0x2c, 0x4c, 0x78, 0x42, 0x23, 0xbf, 0xc4, 0x53, 0xd8, 0x67, 0x95, + 0x8b, 0xf9, 0xfe, 0xdf, 0x7e, 0x2c, 0x5e, 0xf3, 0x69, 0x62, 0x8e, 0x79, + 0x5e, 0x2d, 0xbf, 0x64, 0x5f, 0x9d, 0x96, 0x2f, 0xfe, 0xcf, 0xc8, 0x52, + 0x53, 0xc9, 0xfa, 0xc5, 0x62, 0x66, 0x6e, 0x4c, 0xcf, 0xc4, 0x44, 0x11, + 0x55, 0xff, 0xfd, 0x91, 0x72, 0x76, 0x2c, 0x09, 0xb4, 0x6e, 0x77, 0xe5, + 0x8b, 0xde, 0xfb, 0xac, 0x5f, 0xf8, 0x9b, 0xdc, 0x7e, 0xca, 0x42, 0x58, + 0xbd, 0xe6, 0x25, 0x8b, 0x31, 0x8b, 0x9c, 0x92, 0x7b, 0x85, 0x1a, 0x30, + 0xfc, 0x27, 0x58, 0x80, 0xa1, 0xbd, 0xc8, 0xe5, 0x7c, 0x91, 0xd1, 0x7c, + 0x31, 0xde, 0xa3, 0xfb, 0xe1, 0x7a, 0x7e, 0xb1, 0x7e, 0x13, 0x67, 0x7e, + 0x58, 0xa3, 0x19, 0x10, 0x73, 0x0a, 0x4c, 0x84, 0xbb, 0xb6, 0x7e, 0x77, + 0x40, 0xa1, 0x81, 0xe2, 0x3b, 0xfe, 0x98, 0xf1, 0xfe, 0x76, 0x62, 0x58, + 0xbf, 0x61, 0x4f, 0x7c, 0x58, 0xbe, 0xc1, 0xb1, 0xd6, 0x2f, 0xfc, 0x5e, + 0xf8, 0x9a, 0x1f, 0x17, 0x16, 0x2e, 0x93, 0x98, 0x7c, 0x41, 0x91, 0x5c, + 0xfe, 0x58, 0xb8, 0xf2, 0xb1, 0x78, 0x19, 0xf9, 0x35, 0xce, 0x2f, 0x7f, + 0x73, 0xdd, 0xc2, 0x43, 0x58, 0xbf, 0xdb, 0x96, 0x74, 0xfb, 0x41, 0x62, + 0xf1, 0xc0, 0xeb, 0x17, 0xd3, 0xbc, 0x9c, 0xc4, 0x42, 0x61, 0x8b, 0x9b, + 0x54, 0x19, 0xa1, 0x98, 0x45, 0xba, 0x6f, 0x71, 0xaf, 0xea, 0x91, 0x4b, + 0xf7, 0xc6, 0x3c, 0x28, 0x45, 0x79, 0x77, 0xaa, 0x16, 0x97, 0xf0, 0x61, + 0x69, 0xf3, 0xe9, 0x17, 0xf9, 0xbd, 0x30, 0x10, 0xf1, 0x62, 0xfb, 0xf3, + 0x9b, 0x2c, 0x51, 0x1e, 0xb7, 0x0c, 0xef, 0xb8, 0xf2, 0x05, 0x8b, 0xfe, + 0xf4, 0xf7, 0xec, 0x3c, 0xfd, 0x62, 0xfa, 0x2c, 0xc0, 0x96, 0x2f, 0xa0, + 0xfa, 0xe2, 0xc5, 0xff, 0xc1, 0x9f, 0x3d, 0x3d, 0x1f, 0xd0, 0x95, 0x8b, + 0xe7, 0xf4, 0xe9, 0x62, 0xff, 0x9f, 0x3b, 0xf4, 0x50, 0x6d, 0x2c, 0x58, + 0x0e, 0x8a, 0x4f, 0xa3, 0x91, 0x15, 0xff, 0xa0, 0x52, 0x7f, 0xce, 0xed, + 0xa5, 0x8b, 0x9f, 0x16, 0x2b, 0xb3, 0xd5, 0x01, 0xfd, 0xf4, 0x5f, 0x68, + 0x96, 0x2f, 0xb7, 0x6d, 0x6c, 0xb1, 0x7a, 0x26, 0xf2, 0xc5, 0xfb, 0x22, + 0x84, 0xf6, 0xb1, 0x7f, 0xdf, 0x9e, 0x7d, 0xb9, 0x31, 0xeb, 0x17, 0x3c, + 0x4b, 0x17, 0x9e, 0x49, 0x62, 0xfd, 0xf7, 0x8a, 0x76, 0x58, 0xbf, 0x66, + 0x87, 0xfc, 0x58, 0xa1, 0x9f, 0x6e, 0xe3, 0x7c, 0x2a, 0xaf, 0xa2, 0xd7, + 0x90, 0x85, 0xbc, 0xc4, 0x05, 0x8b, 0xfb, 0xf9, 0xee, 0x60, 0x4b, 0x17, + 0x8a, 0x60, 0x91, 0x7f, 0xe2, 0x03, 0xf5, 0x75, 0x0a, 0x13, 0x1e, 0xb1, + 0x63, 0xac, 0x51, 0x88, 0xc1, 0x18, 0xe6, 0x17, 0xb0, 0xe0, 0x69, 0x14, + 0x62, 0xe6, 0x54, 0x90, 0xec, 0x44, 0x33, 0xac, 0x24, 0xee, 0x18, 0xef, + 0x08, 0x9d, 0x11, 0xfc, 0x95, 0x89, 0x48, 0x7b, 0x85, 0x5e, 0x87, 0x8f, + 0x54, 0x3a, 0x6f, 0xfe, 0xcf, 0x48, 0x3f, 0x8f, 0xa1, 0x47, 0xac, 0x5f, + 0xd1, 0xf9, 0xad, 0x4e, 0xcb, 0x17, 0xe0, 0x67, 0xfa, 0xde, 0xbb, 0x58, + 0xa9, 0x3e, 0x7f, 0x19, 0x54, 0x6e, 0xdc, 0x45, 0x4c, 0xa2, 0x4c, 0x8d, + 0x79, 0xe9, 0xad, 0x1f, 0x85, 0x53, 0x4e, 0xa8, 0x14, 0x35, 0xc5, 0x0a, + 0xeb, 0xda, 0x6f, 0x2c, 0x5f, 0xb9, 0xad, 0x4f, 0x96, 0x2f, 0xef, 0xb6, + 0x00, 0x3f, 0x2c, 0x5f, 0x71, 0xf5, 0xb2, 0xc5, 0x61, 0xe9, 0xf0, 0xbe, + 0xf7, 0x9f, 0x65, 0x8a, 0xd9, 0x1b, 0x1d, 0x8e, 0xc7, 0xbe, 0x1c, 0x86, + 0xf6, 0x7d, 0x96, 0x2f, 0x69, 0xb7, 0x58, 0xbf, 0x4e, 0xb3, 0xbf, 0x2c, + 0x5b, 0x86, 0x9e, 0x3f, 0xc7, 0xaf, 0xf4, 0x45, 0x83, 0xfc, 0xf1, 0x62, + 0xff, 0x66, 0xbf, 0x21, 0x16, 0x2c, 0x5f, 0xfd, 0x80, 0x03, 0x77, 0xce, + 0x49, 0x6e, 0xb1, 0x68, 0x2c, 0x51, 0x1e, 0xc7, 0x11, 0xaa, 0x09, 0x84, + 0xfc, 0xa4, 0x06, 0x9d, 0x21, 0x17, 0x7f, 0xd8, 0x5b, 0xfd, 0xfa, 0x4f, + 0x16, 0x2e, 0xf7, 0x16, 0x2a, 0x07, 0xa6, 0x47, 0x77, 0xff, 0x67, 0xba, + 0xc8, 0xdf, 0xac, 0x7e, 0xf8, 0x2e, 0x2c, 0x5f, 0xed, 0xfe, 0xe3, 0x92, + 0xf2, 0xc5, 0xcf, 0x05, 0x8a, 0xec, 0xf2, 0xc8, 0xd2, 0xfe, 0x11, 0x6f, + 0x1b, 0xc6, 0x98, 0xb1, 0x71, 0x01, 0x62, 0xfd, 0xaf, 0xb3, 0x1d, 0x62, + 0xf8, 0x44, 0x2d, 0xd6, 0x29, 0x8f, 0x33, 0x85, 0x17, 0xf7, 0xa2, 0x86, + 0x77, 0x05, 0x8a, 0x31, 0x5e, 0xb4, 0xc6, 0xd8, 0xf0, 0x98, 0x39, 0x0b, + 0x42, 0x84, 0x04, 0x5e, 0x39, 0x13, 0x18, 0x64, 0x37, 0xff, 0x17, 0x87, + 0x9d, 0x18, 0x80, 0x09, 0x58, 0xbf, 0xd9, 0x82, 0xfe, 0x74, 0x95, 0x8a, + 0xc3, 0xf9, 0x0d, 0x16, 0xff, 0xff, 0x45, 0xce, 0xf9, 0x84, 0x69, 0xca, + 0x4d, 0x0f, 0x4f, 0xa5, 0x8b, 0xfe, 0x9d, 0x73, 0x02, 0x6d, 0x1a, 0xb1, + 0x4e, 0x8a, 0x10, 0x99, 0xae, 0xdd, 0x96, 0x2e, 0xe0, 0x96, 0x2e, 0xd8, + 0x4b, 0x15, 0x86, 0xc5, 0x86, 0x2f, 0xff, 0xdf, 0xcd, 0xc8, 0x43, 0x29, + 0x0f, 0x4f, 0x24, 0xb1, 0x58, 0x9d, 0x1f, 0xe1, 0x86, 0xc4, 0x64, 0x93, + 0xe1, 0xfb, 0xe7, 0xdb, 0x06, 0xb1, 0x7f, 0x82, 0xce, 0xfd, 0xe9, 0x3a, + 0xc5, 0xf8, 0xb0, 0x02, 0xe2, 0xc5, 0xff, 0x6e, 0xf8, 0x59, 0xd1, 0xb8, + 0xb1, 0x5b, 0x1f, 0x17, 0xca, 0x29, 0x91, 0x77, 0xc8, 0x4c, 0x5f, 0x0c, + 0x78, 0x75, 0x8b, 0x81, 0x29, 0x17, 0x04, 0x12, 0x45, 0x39, 0xb1, 0x08, + 0x5e, 0xf8, 0x4d, 0xa8, 0x24, 0x46, 0x1a, 0x1b, 0xec, 0xd4, 0xf1, 0x62, + 0x86, 0x7b, 0x1c, 0x36, 0xac, 0x47, 0x79, 0xb0, 0xcd, 0xbf, 0xfd, 0xee, + 0xf7, 0x7f, 0xc7, 0x4f, 0xbe, 0x1f, 0x16, 0x2f, 0xb5, 0x38, 0x4b, 0x17, + 0xb4, 0x2d, 0x96, 0x2f, 0x1d, 0xa0, 0x61, 0xe0, 0x6c, 0x43, 0x6e, 0xb8, + 0xb1, 0x7f, 0xa6, 0x0f, 0xe8, 0x4f, 0x96, 0x2f, 0x9c, 0x62, 0x95, 0x8b, + 0xba, 0xfe, 0x2c, 0x46, 0xb3, 0xed, 0xd0, 0xc7, 0x8c, 0xee, 0x6f, 0x2c, + 0x5f, 0x45, 0x09, 0x02, 0xc5, 0xff, 0x7d, 0xbd, 0xcd, 0xcb, 0x36, 0x58, + 0xbc, 0x71, 0x1a, 0xb1, 0x7b, 0xae, 0xe3, 0x68, 0xd9, 0x62, 0xff, 0xda, + 0x26, 0x09, 0xfd, 0xa1, 0x1d, 0x62, 0xed, 0xdd, 0x62, 0xff, 0xd3, 0x1e, + 0x2d, 0x66, 0xb5, 0x3d, 0xac, 0x5f, 0x13, 0xf7, 0x05, 0x8b, 0xfe, 0x7e, + 0xff, 0x83, 0xd3, 0x6e, 0xb1, 0x52, 0x7b, 0xda, 0x23, 0xbe, 0xce, 0x98, + 0x4b, 0x17, 0x60, 0xd6, 0x2f, 0xcc, 0x7c, 0x2f, 0x2c, 0x5c, 0xf2, 0xb1, + 0x50, 0x3d, 0x4d, 0x0b, 0xf8, 0x9e, 0xff, 0x73, 0x1f, 0xc6, 0xbf, 0xd6, + 0x2f, 0xfb, 0xf3, 0xa9, 0xdd, 0xcb, 0x75, 0x8b, 0xc6, 0xb7, 0x3a, 0xed, + 0x52, 0xe8, 0xcb, 0xf7, 0x40, 0xec, 0x63, 0x50, 0xa1, 0xf9, 0x0b, 0x3b, + 0xf8, 0xbf, 0xa8, 0xd2, 0xfb, 0xde, 0x9d, 0x2c, 0x54, 0xab, 0xa0, 0xc2, + 0x47, 0x3b, 0xf4, 0xa7, 0xc0, 0xe1, 0x45, 0x50, 0x5f, 0xf8, 0xdd, 0x37, + 0xb8, 0x6f, 0x6a, 0x31, 0x63, 0x94, 0x02, 0x12, 0x42, 0x85, 0x17, 0x44, + 0xe0, 0xa5, 0xdb, 0xdf, 0xf3, 0xea, 0x7c, 0xe0, 0x98, 0x2c, 0x5f, 0xbe, + 0xfc, 0x16, 0xcb, 0x17, 0xff, 0x38, 0xdf, 0xd3, 0xd8, 0x59, 0x9c, 0x58, + 0xbf, 0xb9, 0x3d, 0x1c, 0x80, 0xb1, 0x68, 0xd9, 0x62, 0x96, 0x2d, 0xd6, + 0x18, 0x68, 0xe3, 0x61, 0x7b, 0x46, 0xcb, 0x17, 0xcd, 0xe2, 0x95, 0x8b, + 0xff, 0xf1, 0x67, 0x4c, 0xdf, 0xee, 0x79, 0xc2, 0xf7, 0x16, 0x28, 0xc4, + 0x60, 0x75, 0x86, 0x46, 0x8b, 0x86, 0x43, 0x43, 0x4e, 0x70, 0x08, 0xa1, + 0x46, 0x25, 0x7f, 0xff, 0xbf, 0x3f, 0x73, 0x70, 0x5d, 0x7b, 0xfd, 0xf5, + 0x09, 0xd2, 0xc5, 0xf6, 0x71, 0x89, 0x62, 0xe1, 0x69, 0x62, 0xa0, 0x89, + 0xfd, 0x33, 0x1c, 0x86, 0xf6, 0xef, 0xc5, 0x8b, 0xe1, 0x1f, 0x06, 0xb1, + 0x5d, 0xa6, 0x90, 0xf0, 0xd7, 0xf9, 0x87, 0x50, 0xf5, 0xff, 0xfd, 0xa8, + 0x0a, 0x73, 0xfb, 0xbf, 0x30, 0x7b, 0x60, 0x4b, 0x17, 0xfd, 0x9d, 0x4c, + 0x46, 0xe7, 0x7e, 0x58, 0xbf, 0x68, 0x7f, 0x78, 0x96, 0x2b, 0xe7, 0xce, + 0x19, 0xed, 0xf0, 0xa4, 0x8d, 0x58, 0xbf, 0xbe, 0xe3, 0xf8, 0x8d, 0x58, + 0xbf, 0x14, 0xc4, 0xfd, 0xac, 0x5b, 0x06, 0x7f, 0x9b, 0x91, 0xb9, 0x85, + 0xef, 0x66, 0xeb, 0x14, 0x73, 0xd2, 0xe1, 0xa5, 0xc7, 0x02, 0xc5, 0xff, + 0x48, 0x65, 0xef, 0x89, 0xa0, 0xb1, 0x50, 0x3d, 0x2f, 0x0c, 0x5f, 0xbc, + 0x59, 0xa9, 0x58, 0xa9, 0x54, 0xe6, 0x6c, 0x31, 0x41, 0x0f, 0x1f, 0x3a, + 0x04, 0x45, 0x78, 0x6d, 0xc5, 0x8b, 0xc4, 0xe6, 0xac, 0x5f, 0xf8, 0x3e, + 0x4e, 0x73, 0x5a, 0x7f, 0x2c, 0x54, 0x9f, 0xd6, 0x0e, 0xf0, 0x76, 0xec, + 0x35, 0x62, 0xfd, 0x27, 0x27, 0x35, 0x62, 0xe1, 0xfd, 0x62, 0xe3, 0x58, + 0xc3, 0xc0, 0xc2, 0x8b, 0xff, 0x37, 0x0f, 0x2f, 0xad, 0x38, 0x4b, 0x17, + 0xed, 0xb0, 0x72, 0x75, 0x8b, 0x70, 0xd4, 0x4b, 0x7c, 0xb8, 0x33, 0xfb, + 0x9f, 0xa9, 0x62, 0xff, 0xff, 0xef, 0xcf, 0x30, 0x13, 0xee, 0x6b, 0x36, + 0x9d, 0x73, 0xfb, 0xbf, 0x16, 0x2f, 0xb5, 0xa6, 0x1a, 0xc5, 0xff, 0x78, + 0x98, 0xf3, 0xc7, 0xd2, 0xc5, 0xe8, 0x36, 0x96, 0x28, 0x68, 0xec, 0xc7, + 0x47, 0x23, 0x63, 0x8b, 0xf8, 0xfa, 0xd3, 0xf6, 0x05, 0x8b, 0xc1, 0xb9, + 0xd6, 0x2f, 0xcf, 0xa9, 0xf3, 0xac, 0x5e, 0x6f, 0xc4, 0xb1, 0x52, 0x78, + 0xbe, 0x27, 0xbf, 0x8a, 0x77, 0xfb, 0xf5, 0x2c, 0x5e, 0x36, 0x78, 0xb1, + 0x7f, 0xd9, 0xef, 0x39, 0xbe, 0xcd, 0xd6, 0x2f, 0xe9, 0xef, 0x99, 0xdf, + 0x96, 0x2e, 0xd4, 0xac, 0x50, 0xcf, 0x1f, 0xc6, 0x17, 0xe1, 0x10, 0xe3, + 0x48, 0xd1, 0x62, 0xf1, 0x31, 0xd6, 0x2f, 0xff, 0x6a, 0x73, 0xb8, 0xe2, + 0x38, 0xbc, 0x06, 0x58, 0xa8, 0x1f, 0x57, 0x87, 0x2f, 0xf7, 0x9f, 0x77, + 0x1c, 0xf9, 0x62, 0xfd, 0xc9, 0xdf, 0x0e, 0xb1, 0x52, 0x7b, 0xbc, 0x34, + 0xbe, 0x7e, 0xe1, 0x8b, 0x17, 0xfa, 0x4a, 0x19, 0xb0, 0xa0, 0xb1, 0x7d, + 0xbb, 0xe9, 0x96, 0x28, 0xd3, 0xd7, 0xec, 0xd2, 0xff, 0x87, 0xf9, 0x84, + 0x5a, 0x16, 0xcb, 0x14, 0x62, 0xb2, 0xc9, 0x21, 0x81, 0x88, 0xc7, 0xb2, + 0x10, 0x5b, 0x91, 0x77, 0x09, 0xdd, 0x3f, 0x80, 0x87, 0xcf, 0x41, 0x92, + 0x54, 0xae, 0x1a, 0xf2, 0x5c, 0x7d, 0x41, 0x7c, 0x90, 0xd2, 0xde, 0xe1, + 0xdd, 0xa3, 0x83, 0xc6, 0x0c, 0xc7, 0x5e, 0x9c, 0x65, 0xbc, 0x76, 0x0d, + 0x62, 0xf7, 0x78, 0x35, 0x8a, 0xc3, 0x78, 0xc3, 0xd7, 0xfb, 0xf9, 0x0f, + 0x3b, 0xf6, 0xb1, 0x7e, 0x3c, 0x39, 0x84, 0xb1, 0x7f, 0x9f, 0x69, 0xec, + 0x1a, 0x95, 0x8a, 0xe1, 0xee, 0xf8, 0xa2, 0xef, 0xec, 0xb1, 0x77, 0x8d, + 0x58, 0xbd, 0xcf, 0x62, 0xc5, 0xb8, 0x61, 0xf8, 0xee, 0x44, 0x43, 0x21, + 0x8c, 0xdf, 0xf6, 0xcd, 0x84, 0x28, 0x67, 0x16, 0x2b, 0x0f, 0xf7, 0x88, + 0x97, 0xe6, 0x04, 0x73, 0x9d, 0x62, 0xfe, 0xdd, 0xf8, 0x28, 0x3a, 0xc5, + 0xe2, 0x17, 0x16, 0x2b, 0xe7, 0x99, 0xd0, 0xbe, 0xee, 0xb9, 0x1c, 0xb1, + 0x7e, 0x8b, 0x08, 0x58, 0xb1, 0x7f, 0x4f, 0x9f, 0x77, 0x1a, 0xc5, 0xfd, + 0xe7, 0xee, 0x05, 0x31, 0xb1, 0xfb, 0xc9, 0x0e, 0x8a, 0x2f, 0xbb, 0xf7, + 0xdd, 0x62, 0xf9, 0xf6, 0xeb, 0x0d, 0x58, 0xb0, 0x30, 0xf3, 0xb7, 0x24, + 0xac, 0x46, 0x5b, 0xc2, 0x8e, 0xf8, 0xb3, 0xb8, 0x2c, 0x5f, 0xf3, 0x9c, + 0xb0, 0x1f, 0x63, 0xac, 0x5c, 0xdd, 0x30, 0xf6, 0xf8, 0x47, 0x7b, 0x98, + 0x35, 0x8b, 0xfe, 0x67, 0xf3, 0x97, 0x85, 0xf5, 0x8b, 0xdf, 0x7e, 0x8b, + 0x17, 0x0a, 0x1f, 0x3d, 0x70, 0xce, 0x2f, 0xfe, 0x61, 0xfd, 0xf5, 0x9d, + 0x24, 0xa2, 0x58, 0xbf, 0xfb, 0x82, 0xd1, 0x60, 0xff, 0x21, 0x4a, 0xc5, + 0xa4, 0xc4, 0x45, 0xf9, 0x1a, 0xe1, 0xee, 0xb1, 0x76, 0x74, 0x19, 0xe1, + 0x00, 0xa6, 0xff, 0x1b, 0xee, 0xf7, 0x7d, 0x71, 0x62, 0xfd, 0x9e, 0x03, + 0x79, 0x62, 0xa5, 0x70, 0x52, 0x11, 0xb3, 0x3c, 0x20, 0x62, 0x2e, 0xd3, + 0xa7, 0xe1, 0xf8, 0x22, 0xf8, 0xe3, 0x8b, 0xff, 0xf4, 0xfd, 0xb0, 0xa7, + 0x46, 0x8c, 0x4d, 0xa8, 0x2c, 0x54, 0x17, 0x61, 0xf8, 0x43, 0xe9, 0xc8, + 0xbe, 0xa8, 0x43, 0x54, 0xb6, 0xd8, 0x5b, 0x42, 0x88, 0x67, 0x19, 0x2c, + 0x39, 0xe5, 0x5c, 0xb4, 0xff, 0xa8, 0x21, 0x6f, 0xe1, 0xf1, 0x4f, 0x83, + 0x5f, 0x83, 0xd6, 0xa4, 0x96, 0x2f, 0xff, 0xde, 0x91, 0x81, 0xbb, 0x03, + 0xf6, 0x1e, 0x9b, 0xb5, 0x8b, 0x9c, 0xeb, 0x14, 0xb1, 0x7a, 0x02, 0x1a, + 0xc5, 0xcd, 0x05, 0x8b, 0xb5, 0x8b, 0x14, 0xe6, 0xb9, 0x85, 0xed, 0x1c, + 0xb1, 0x46, 0x26, 0x4d, 0x25, 0x30, 0x5a, 0x71, 0x78, 0x83, 0x3e, 0x99, + 0x1c, 0x3f, 0x7f, 0x14, 0x33, 0x81, 0x9d, 0x62, 0xf0, 0x8b, 0xcb, 0x15, + 0x87, 0x99, 0xc2, 0xfb, 0xf1, 0xf8, 0x06, 0x65, 0x8a, 0xf1, 0xe4, 0x86, + 0x43, 0x7f, 0x11, 0x9f, 0xce, 0xc2, 0x58, 0xbf, 0xd8, 0x7e, 0xe1, 0x39, + 0xe5, 0x8a, 0xc3, 0xe5, 0x01, 0x8d, 0xfd, 0x3f, 0x7e, 0x99, 0x12, 0xc5, + 0x68, 0xf4, 0x40, 0x43, 0x7e, 0x89, 0x98, 0xb6, 0x58, 0xbf, 0x84, 0x03, + 0x37, 0x38, 0x16, 0x2d, 0x0c, 0x3d, 0xb2, 0x29, 0xbf, 0x16, 0x00, 0x5c, + 0x58, 0xbf, 0xf9, 0xfb, 0xe4, 0xc5, 0x24, 0x29, 0xd2, 0xc5, 0x6c, 0xab, + 0x9a, 0x10, 0xfd, 0xc8, 0x6c, 0xf6, 0xfa, 0x02, 0x60, 0x8a, 0x2f, 0xf7, + 0x70, 0xff, 0x57, 0x54, 0xc7, 0xac, 0x5f, 0xf3, 0xf7, 0x0d, 0xb6, 0x07, + 0x60, 0x58, 0xac, 0x3f, 0xef, 0x9f, 0xdf, 0x07, 0xa6, 0x02, 0xc5, 0xff, + 0x71, 0xe0, 0xfe, 0x9f, 0x71, 0x62, 0xa0, 0x7b, 0xbf, 0x24, 0xbf, 0xfc, + 0x02, 0x17, 0x3d, 0xc9, 0xd6, 0x77, 0xe5, 0x8b, 0xff, 0xc1, 0x94, 0xf0, + 0xb3, 0xa3, 0xff, 0xf2, 0xb1, 0x7f, 0xfe, 0x21, 0x7a, 0x7f, 0xbb, 0xf3, + 0x52, 0x1b, 0x12, 0xc5, 0xc5, 0x03, 0x11, 0x43, 0x89, 0x77, 0xfb, 0x99, + 0xa2, 0x9e, 0xe0, 0xb1, 0x71, 0x01, 0x62, 0xb6, 0x3c, 0xb6, 0x34, 0xa6, + 0x4e, 0xa8, 0x88, 0x85, 0x0e, 0xd0, 0x9e, 0x6c, 0x75, 0x8b, 0xfd, 0x9d, + 0x33, 0x40, 0x00, 0x96, 0x2f, 0xfe, 0x7d, 0x18, 0xd3, 0x09, 0x21, 0x41, + 0x62, 0xf0, 0xc5, 0x2b, 0x17, 0xb5, 0x9d, 0x16, 0x2f, 0x69, 0xcd, 0x58, + 0xa9, 0x37, 0xb8, 0x3f, 0x7e, 0xfb, 0xc7, 0x36, 0xcb, 0x15, 0x04, 0x74, + 0xba, 0x27, 0x16, 0xbc, 0x3f, 0x7f, 0x81, 0xcc, 0x2c, 0xe0, 0x96, 0x2b, + 0x0f, 0xbd, 0x8f, 0x2f, 0xf4, 0xc4, 0x2e, 0x79, 0xce, 0xb1, 0x7f, 0xff, + 0xc1, 0xfb, 0xf2, 0x0d, 0x48, 0xa3, 0xb3, 0x9c, 0xfc, 0x97, 0x96, 0x2f, + 0xb6, 0x38, 0x7c, 0x58, 0xb4, 0x16, 0x2f, 0xf4, 0xe7, 0x7e, 0xcd, 0x4a, + 0xc5, 0x6c, 0x98, 0x5f, 0x66, 0xae, 0xd7, 0xa2, 0x62, 0x12, 0xbf, 0xf4, + 0xfc, 0x3e, 0x16, 0x7b, 0xf8, 0xb1, 0x7e, 0xfb, 0x39, 0x32, 0xc5, 0xfe, + 0xe4, 0xeb, 0x7c, 0x0f, 0x16, 0x2c, 0x23, 0x0f, 0x6f, 0x84, 0xd7, 0xcf, + 0xd3, 0xee, 0xb1, 0x5f, 0x3c, 0xde, 0x14, 0xde, 0xc0, 0x32, 0xc5, 0xf9, + 0xfb, 0xf0, 0x7b, 0x2c, 0x5b, 0xa3, 0x9f, 0x57, 0xc8, 0xb8, 0x39, 0x7a, + 0x41, 0x8b, 0x17, 0xfc, 0xc1, 0xf9, 0xf5, 0x22, 0xeb, 0xd6, 0x2f, 0xfe, + 0xfb, 0x9d, 0x98, 0xb7, 0xdd, 0x86, 0xb1, 0x68, 0x1a, 0x88, 0x4d, 0xcf, + 0xeb, 0xe8, 0xcb, 0x68, 0x50, 0x56, 0x26, 0x50, 0x28, 0xc0, 0x6f, 0xfb, + 0x3b, 0xfb, 0xec, 0x4d, 0x05, 0x8b, 0xdf, 0x9e, 0xd6, 0x2f, 0xfd, 0xa8, + 0x07, 0x9f, 0xf3, 0x96, 0xcb, 0x17, 0xff, 0xfb, 0xde, 0x72, 0x34, 0xcf, + 0x1a, 0x2d, 0x73, 0x8f, 0x9d, 0xac, 0x5f, 0xec, 0xef, 0xdf, 0xc1, 0x6e, + 0xb1, 0x7e, 0xd6, 0x74, 0x6f, 0xac, 0x5f, 0xb6, 0x92, 0x9e, 0xd6, 0x28, + 0x91, 0x13, 0xc3, 0x61, 0x15, 0x5f, 0xb7, 0x79, 0x28, 0x2c, 0x57, 0x67, + 0xae, 0x45, 0xf5, 0x29, 0xd4, 0xe2, 0x0b, 0x46, 0x8d, 0x7d, 0xa3, 0xfb, + 0xb5, 0x8a, 0x96, 0x5a, 0xfe, 0x43, 0x8d, 0xe5, 0x14, 0x44, 0x85, 0xa1, + 0x2f, 0xc7, 0x1c, 0xd1, 0x95, 0x81, 0x2c, 0xa5, 0x3c, 0xf0, 0xa7, 0xc7, + 0x42, 0x8f, 0x1c, 0x33, 0x4b, 0xff, 0xf1, 0xaf, 0xe2, 0xc8, 0x77, 0xe2, + 0x7d, 0xb8, 0x25, 0x8b, 0xf7, 0x24, 0xb3, 0x65, 0x8b, 0x87, 0x2b, 0x16, + 0xe9, 0x26, 0xfc, 0x65, 0x17, 0xff, 0x66, 0x8c, 0xcf, 0xb1, 0xa4, 0x2e, + 0x2c, 0x53, 0xa6, 0x0a, 0xd0, 0x97, 0x11, 0x45, 0xff, 0x8d, 0x6d, 0xfe, + 0xf1, 0x67, 0x7e, 0x58, 0xbf, 0x34, 0xc2, 0x60, 0xb1, 0x68, 0xf5, 0x8b, + 0xbb, 0x81, 0x86, 0xf2, 0x22, 0x7b, 0xb0, 0x0b, 0x17, 0x34, 0x18, 0xf1, + 0xc8, 0xc2, 0xe7, 0xfa, 0xc5, 0xff, 0xfd, 0xa8, 0x18, 0x3f, 0xc9, 0x85, + 0x9d, 0xfa, 0x70, 0x25, 0x8b, 0xb9, 0xc5, 0x8b, 0xf4, 0xe7, 0xb8, 0xcb, + 0x17, 0xe6, 0x7e, 0x08, 0xd5, 0x8b, 0xc1, 0x04, 0x12, 0xc5, 0xc0, 0x64, + 0x88, 0xc3, 0x43, 0x7f, 0xb5, 0x3d, 0x33, 0x0e, 0x35, 0x8a, 0x31, 0x35, + 0xe7, 0x17, 0xd2, 0xf9, 0xc6, 0x3e, 0x4f, 0xc4, 0xa1, 0x15, 0x5f, 0x41, + 0xc8, 0xd5, 0x8b, 0xfc, 0x4c, 0x6c, 0x44, 0xf1, 0x2c, 0x54, 0x47, 0xb1, + 0xc2, 0x3b, 0xe1, 0x78, 0x4c, 0xb1, 0x58, 0x78, 0xc4, 0x47, 0x7f, 0x02, + 0x61, 0xf0, 0xf8, 0xb1, 0x7b, 0xaf, 0xeb, 0xe5, 0x62, 0xff, 0xdd, 0x46, + 0x66, 0xef, 0xee, 0x0b, 0x4b, 0x17, 0xa2, 0x91, 0xac, 0x5f, 0xb8, 0x22, + 0x98, 0x2c, 0x5f, 0xe7, 0xfb, 0x71, 0xf5, 0x2b, 0x17, 0xda, 0x9c, 0x2c, + 0x3f, 0x86, 0x1e, 0xe1, 0x45, 0xe0, 0x61, 0x2c, 0x56, 0x1e, 0xf0, 0x90, + 0xa9, 0xd3, 0x3c, 0xe4, 0x63, 0x77, 0xf3, 0x90, 0x37, 0xdd, 0xd6, 0x2f, + 0x30, 0x31, 0x22, 0xa0, 0xbb, 0x5b, 0xd9, 0xa6, 0xa1, 0x8c, 0x78, 0xe2, + 0x7f, 0x18, 0x18, 0x08, 0x08, 0xc3, 0xd1, 0xb1, 0xf4, 0x29, 0x8e, 0x2f, + 0xbe, 0x91, 0xb8, 0xd6, 0x2f, 0xdd, 0x33, 0x3a, 0x1a, 0xb1, 0x7f, 0xfd, + 0xdf, 0xa4, 0x78, 0x45, 0x86, 0xe1, 0x01, 0x62, 0xa4, 0xff, 0x34, 0x5b, + 0x7f, 0x73, 0xef, 0xbb, 0x69, 0x62, 0xfc, 0x3d, 0x38, 0xb6, 0x58, 0xbe, + 0xf7, 0x1b, 0xb5, 0x8b, 0x79, 0x62, 0xb0, 0xdb, 0x1a, 0x49, 0x7f, 0xf9, + 0xcd, 0xfb, 0x87, 0xaf, 0x42, 0x63, 0xb1, 0x62, 0xff, 0x05, 0x85, 0x9d, + 0x1f, 0x4b, 0x17, 0xfe, 0xce, 0x4e, 0xc3, 0x13, 0x6a, 0x0b, 0x17, 0x9e, + 0x12, 0xb1, 0x7b, 0x70, 0xce, 0xb1, 0x78, 0x01, 0x9d, 0x62, 0xf0, 0x73, + 0xba, 0xc5, 0x0d, 0x17, 0x51, 0x20, 0x00, 0x73, 0xc4, 0x11, 0xc3, 0xf7, + 0xf1, 0x67, 0x60, 0x0e, 0x0b, 0x17, 0x67, 0x16, 0x2f, 0xb0, 0xef, 0xe5, + 0x8b, 0xff, 0xb3, 0xe1, 0x9f, 0x37, 0x9f, 0xc9, 0xd6, 0x2d, 0xcc, 0x3f, + 0xf2, 0x17, 0xf1, 0x15, 0xb8, 0xb1, 0x58, 0xac, 0xc2, 0x22, 0xfd, 0x30, + 0x7c, 0x84, 0x93, 0xf9, 0x0e, 0xff, 0x27, 0x0a, 0x15, 0xe1, 0x19, 0xdf, + 0xbf, 0xf6, 0x1c, 0xac, 0x5e, 0xf7, 0xf1, 0x62, 0xff, 0xfd, 0x3d, 0x03, + 0xd3, 0x03, 0x35, 0xa7, 0x36, 0x74, 0xb1, 0x58, 0x7e, 0xda, 0x1d, 0xbe, + 0x93, 0x99, 0xc5, 0x8a, 0x94, 0x71, 0xe4, 0x27, 0x9c, 0x86, 0xe6, 0x3a, + 0xc5, 0xff, 0xf8, 0x8a, 0x61, 0xa9, 0xe1, 0x67, 0x47, 0xf8, 0x96, 0x2f, + 0x39, 0x3a, 0xc5, 0x61, 0xf8, 0x32, 0xad, 0xfc, 0xcf, 0xcf, 0xc9, 0xd6, + 0x2f, 0xf7, 0x3d, 0x31, 0x0b, 0xbe, 0x2c, 0x57, 0xcf, 0x90, 0x45, 0xb7, + 0xcf, 0xad, 0x4a, 0xc5, 0xfe, 0xce, 0x99, 0x18, 0x10, 0x41, 0x24, 0x5e, + 0x0b, 0x3e, 0xb1, 0x7e, 0x8a, 0x73, 0xfc, 0x58, 0xa3, 0x11, 0x8f, 0xf2, + 0x22, 0x22, 0xf1, 0xe0, 0x63, 0xd7, 0xfb, 0xaf, 0x91, 0x6f, 0xf7, 0xd2, + 0xc5, 0xcd, 0xe5, 0x8b, 0xff, 0x08, 0x3d, 0x3c, 0x8f, 0x3b, 0xf2, 0xc5, + 0x1c, 0xf6, 0x00, 0x2f, 0x60, 0x2c, 0x5f, 0xa6, 0x21, 0x30, 0x6b, 0x15, + 0x86, 0xf0, 0x84, 0xaa, 0x25, 0x65, 0x87, 0x84, 0x3f, 0xe3, 0x4b, 0x12, + 0x5f, 0x48, 0x49, 0x06, 0xbd, 0x78, 0xef, 0xc5, 0x8b, 0xfe, 0x97, 0x26, + 0xf7, 0x1f, 0xb5, 0x8b, 0xff, 0xc3, 0x67, 0x26, 0xf3, 0x94, 0x39, 0x8b, + 0x17, 0xf1, 0x9c, 0x98, 0x0b, 0x4b, 0x14, 0x62, 0x2b, 0xf0, 0xe3, 0x74, + 0x7b, 0xfb, 0xed, 0xa7, 0xcd, 0x2c, 0x5f, 0xf4, 0xc1, 0xcb, 0x38, 0xd1, + 0xeb, 0x15, 0x28, 0x98, 0x63, 0x11, 0x16, 0xd2, 0xc5, 0xf7, 0x7b, 0xbe, + 0x96, 0x2a, 0x37, 0x36, 0x3e, 0x0c, 0xbc, 0x71, 0x12, 0xc5, 0x00, 0xf0, + 0xfc, 0x4d, 0x7f, 0xba, 0x7d, 0xf2, 0x0d, 0xd1, 0x62, 0xfd, 0xd1, 0x8e, + 0xe7, 0x58, 0xa9, 0x44, 0x1e, 0x11, 0x11, 0xbd, 0xed, 0x7f, 0x16, 0x2f, + 0x42, 0x60, 0xb1, 0x7f, 0xa7, 0x73, 0x25, 0xf9, 0x2b, 0x15, 0x11, 0xe8, + 0xf5, 0x0e, 0xd4, 0xa2, 0x53, 0x1b, 0xaf, 0xa4, 0x37, 0x02, 0xc5, 0xc2, + 0xfa, 0xc5, 0xf3, 0x9f, 0xac, 0x35, 0x62, 0xfc, 0x5a, 0xd0, 0xbe, 0xb1, + 0x7f, 0x1f, 0xc5, 0x39, 0xda, 0xc5, 0xff, 0xfd, 0xcc, 0xfb, 0xf0, 0x5b, + 0x7e, 0x4f, 0xee, 0x4e, 0x2c, 0x5f, 0xff, 0xef, 0x63, 0x96, 0xcd, 0xcc, + 0xe8, 0xfe, 0x7e, 0x30, 0x16, 0x2f, 0xcf, 0xee, 0x7d, 0xc6, 0x8e, 0xbe, + 0x17, 0x06, 0xb9, 0x5b, 0x27, 0x8b, 0x11, 0x1f, 0xc6, 0x18, 0xa7, 0xd1, + 0x8a, 0x5e, 0xc2, 0x1a, 0xc5, 0xfa, 0x28, 0x4e, 0xb6, 0x58, 0xa9, 0x3c, + 0x7c, 0x1c, 0xb7, 0x96, 0x2d, 0xb0, 0xcd, 0x96, 0xe4, 0x15, 0x2c, 0xff, + 0x58, 0x42, 0xab, 0x21, 0x3c, 0xf2, 0xd4, 0x7f, 0x1b, 0x6b, 0x4b, 0x5e, + 0x03, 0x69, 0x46, 0xc9, 0xc8, 0xc9, 0x7d, 0x0c, 0x11, 0x47, 0xcc, 0x1c, + 0x32, 0xef, 0xc6, 0x4f, 0x26, 0x0b, 0x17, 0xff, 0x6d, 0x9e, 0xcf, 0xce, + 0x81, 0x3a, 0x58, 0xbf, 0xba, 0xff, 0x1a, 0xe1, 0x71, 0x62, 0xb4, 0x7f, + 0x62, 0x45, 0xbf, 0xef, 0xb7, 0x83, 0x1c, 0xe1, 0x2c, 0x5f, 0x39, 0x0a, + 0x56, 0x2f, 0xf4, 0x96, 0xf9, 0xef, 0xba, 0xc5, 0x40, 0xf5, 0x34, 0x43, + 0x7d, 0x90, 0x72, 0x58, 0xad, 0x8f, 0x0f, 0x72, 0x2b, 0xcc, 0x07, 0x58, + 0xbf, 0xf6, 0x74, 0x99, 0xfc, 0xed, 0x3d, 0xac, 0x5f, 0xf0, 0xc8, 0x5c, + 0xcd, 0xb3, 0x65, 0x8b, 0xd3, 0xa2, 0x58, 0xbf, 0xfb, 0x3b, 0xf0, 0xa4, + 0xce, 0x16, 0x6e, 0xb1, 0x7f, 0xf8, 0x12, 0x59, 0xdf, 0x9b, 0x9c, 0x93, + 0xac, 0x5f, 0xfe, 0x26, 0x1c, 0x8f, 0xf3, 0x9d, 0x1b, 0x4b, 0x17, 0xa1, + 0x83, 0x58, 0xbf, 0xd8, 0x32, 0x6e, 0x38, 0xd6, 0x2d, 0xf5, 0x8b, 0x6d, + 0x88, 0xab, 0x64, 0xa2, 0x1d, 0xe1, 0x95, 0x62, 0x66, 0xcd, 0x0f, 0x5a, + 0xfa, 0x74, 0x82, 0x8d, 0xf6, 0xb4, 0x9f, 0x57, 0xa3, 0xc0, 0xbe, 0x3f, + 0x30, 0xeb, 0x14, 0xe7, 0x9a, 0xc5, 0x57, 0xf4, 0xeb, 0xde, 0xc8, 0xf5, + 0x8b, 0xfb, 0x8f, 0xf9, 0xee, 0x0b, 0x17, 0x6b, 0xb5, 0x8b, 0xa7, 0xa2, + 0xc5, 0x0d, 0x74, 0xef, 0x21, 0x49, 0xb9, 0x16, 0xa1, 0xa0, 0x72, 0x4f, + 0x8e, 0x32, 0x0f, 0x5f, 0x29, 0xc8, 0x88, 0x38, 0x62, 0x19, 0x7f, 0x50, + 0xcd, 0xfc, 0x18, 0xca, 0x73, 0x65, 0x8b, 0xfd, 0xc2, 0xc0, 0x31, 0x01, + 0x62, 0xff, 0xd0, 0x6f, 0x0a, 0x75, 0x22, 0x8f, 0x58, 0xb1, 0x2c, 0x5e, + 0xda, 0x60, 0xb1, 0x4b, 0x15, 0x26, 0xab, 0x61, 0xeb, 0xfb, 0x3d, 0xc7, + 0x0b, 0xcb, 0x17, 0xd0, 0x26, 0x35, 0x62, 0x86, 0x7a, 0x58, 0x5f, 0x43, + 0x4d, 0xcb, 0xb2, 0xfd, 0x19, 0x32, 0x11, 0x1d, 0x84, 0xe7, 0x7f, 0x7d, + 0xfc, 0x52, 0x75, 0x8b, 0xff, 0x83, 0xf4, 0x73, 0xf3, 0xdf, 0x76, 0x02, + 0xc5, 0xff, 0xfd, 0x02, 0x97, 0xd6, 0x0f, 0x53, 0xe7, 0xdd, 0xc6, 0xb1, + 0x7f, 0xfb, 0x06, 0xc7, 0xce, 0xe1, 0x80, 0xc1, 0xac, 0x5d, 0xf6, 0x58, + 0xba, 0x2e, 0x2c, 0x5f, 0xb3, 0xa3, 0x90, 0xf0, 0xd8, 0x06, 0x2f, 0x7f, + 0x19, 0xec, 0xe7, 0x25, 0x62, 0xfb, 0x3b, 0xf4, 0xac, 0x5f, 0xfc, 0xda, + 0xc3, 0x5f, 0x59, 0xd1, 0xb4, 0xb1, 0x5f, 0x3e, 0x9e, 0x84, 0x77, 0xff, + 0xb3, 0xbf, 0x4e, 0x05, 0x90, 0x90, 0x71, 0x62, 0xff, 0xc5, 0x9a, 0xd3, + 0x9f, 0x3b, 0xf2, 0xc5, 0xff, 0xdc, 0xc1, 0x75, 0xf8, 0x76, 0xfe, 0x6e, + 0xb1, 0x7e, 0xea, 0x6d, 0x83, 0x82, 0xc5, 0x18, 0xa9, 0xda, 0x31, 0xea, + 0x4f, 0xb2, 0x13, 0x04, 0x49, 0xc4, 0xbf, 0x1f, 0x89, 0x2a, 0xfb, 0x3f, + 0x9b, 0xac, 0x5d, 0xf6, 0x58, 0xbf, 0xf7, 0xdd, 0x81, 0x85, 0x3d, 0xf1, + 0x62, 0xc3, 0x30, 0xfe, 0x30, 0x8f, 0xc2, 0xf7, 0xfd, 0xfc, 0xf7, 0xde, + 0x4b, 0x65, 0x8b, 0xe2, 0x29, 0x09, 0x62, 0xf4, 0x74, 0xf1, 0x62, 0xb0, + 0xf0, 0x98, 0x8a, 0xff, 0x16, 0x75, 0x67, 0x47, 0x35, 0x62, 0xe2, 0x87, + 0xcf, 0x61, 0x88, 0x2f, 0xff, 0xe0, 0x1d, 0xcc, 0x83, 0xfb, 0x8f, 0xf6, + 0x1e, 0x76, 0xb1, 0x7f, 0xf6, 0xd3, 0xad, 0x34, 0x0c, 0x00, 0xf1, 0x62, + 0xb1, 0x14, 0x8c, 0xbb, 0x58, 0x8f, 0x12, 0x86, 0x85, 0x2c, 0x5d, 0xc0, + 0x2c, 0x5d, 0xdc, 0x30, 0xd2, 0x06, 0x19, 0x7a, 0x3c, 0xf8, 0xb1, 0x7f, + 0xbc, 0xfa, 0x6f, 0xb1, 0xd6, 0x2f, 0xfa, 0x0f, 0x17, 0x70, 0xf8, 0x80, + 0xb1, 0x7d, 0x9e, 0xfb, 0xca, 0x24, 0x3b, 0x20, 0x88, 0xce, 0x99, 0x30, + 0x52, 0x85, 0xf5, 0xff, 0x6b, 0x4d, 0x03, 0x3a, 0x4c, 0x7a, 0xc5, 0x49, + 0xf3, 0xe1, 0x3d, 0xe3, 0xbc, 0xac, 0x54, 0xa7, 0xe5, 0x08, 0xed, 0x98, + 0x82, 0x8d, 0x64, 0x15, 0x76, 0x93, 0xa9, 0x5a, 0x05, 0x0f, 0x1e, 0x1a, + 0xfa, 0x5d, 0xb5, 0xfe, 0xc0, 0xbc, 0x52, 0x7e, 0x2c, 0x5f, 0xb0, 0x9b, + 0xdc, 0x58, 0xba, 0x1d, 0x16, 0x2f, 0xee, 0x7f, 0x09, 0xf8, 0xb1, 0x7f, + 0x8b, 0x70, 0xfd, 0xc1, 0x0d, 0x62, 0xfe, 0xdc, 0x26, 0x22, 0x95, 0x8a, + 0x82, 0x34, 0xc6, 0x4f, 0xa1, 0xa6, 0x2d, 0x23, 0x7b, 0xba, 0xfc, 0x58, + 0xbe, 0x8b, 0xef, 0xa5, 0x8b, 0xe6, 0x18, 0x67, 0x58, 0xbb, 0x38, 0x61, + 0xf2, 0x75, 0xa3, 0x90, 0x24, 0xa9, 0x65, 0x88, 0xe2, 0xc3, 0xd2, 0x15, + 0xf4, 0xde, 0xd1, 0x83, 0x94, 0x2b, 0x2f, 0x89, 0x87, 0x2b, 0x16, 0xf2, + 0xc5, 0x61, 0xb3, 0xea, 0x21, 0xbf, 0xfe, 0x16, 0xb0, 0x7f, 0x97, 0xf7, + 0x1c, 0xa0, 0xb1, 0x7f, 0x61, 0x49, 0x0a, 0x56, 0x2f, 0xdf, 0x68, 0xb0, + 0xeb, 0x16, 0xc1, 0x9e, 0xa6, 0xe5, 0x77, 0xc1, 0x37, 0xf8, 0xb1, 0x77, + 0xc6, 0xb1, 0x4b, 0x15, 0xd9, 0xe4, 0x1c, 0x90, 0x21, 0x8b, 0xf6, 0x0c, + 0xa7, 0xb5, 0x8b, 0xff, 0x77, 0xe9, 0xee, 0x1e, 0x04, 0xc1, 0x62, 0xfd, + 0x2f, 0x06, 0xe2, 0xc5, 0x81, 0x87, 0xd3, 0xa4, 0x2b, 0xfd, 0xe2, 0x7e, + 0xf8, 0x19, 0xd6, 0x2f, 0xd9, 0x14, 0x1b, 0x8b, 0x15, 0xf4, 0xc5, 0xca, + 0x12, 0x3c, 0x27, 0xf1, 0xb5, 0xf9, 0x9b, 0xb8, 0x71, 0x62, 0xff, 0xf3, + 0x85, 0x9e, 0xee, 0x19, 0xae, 0xe1, 0xc5, 0x8a, 0x95, 0x40, 0x2f, 0x1a, + 0x46, 0x90, 0xbc, 0x53, 0x46, 0x46, 0x14, 0x5d, 0x2c, 0xfb, 0x4b, 0x41, + 0x85, 0x74, 0x26, 0x3a, 0x7f, 0xae, 0x4b, 0xf6, 0x36, 0x79, 0x9f, 0x7a, + 0xc1, 0x43, 0xb9, 0x52, 0x6f, 0x3b, 0xbb, 0x1f, 0x1b, 0x34, 0x52, 0xe8, + 0xf5, 0x69, 0x43, 0x8f, 0x4f, 0xc0, 0xfd, 0x73, 0x18, 0xd1, 0xbd, 0x82, + 0x70, 0x60, 0xad, 0x0b, 0x2f, 0x2b, 0x01, 0x3f, 0x56, 0xef, 0xe2, 0x9e, + 0x1a, 0xe9, 0x4d, 0x43, 0x0a, 0x13, 0xb1, 0xc4, 0x61, 0xc2, 0x8f, 0xaa, + 0x53, 0x8d, 0xf4, 0xf9, 0xfc, 0xb1, 0x7e, 0x9f, 0x43, 0x3e, 0xb1, 0x6d, + 0x7c, 0xf2, 0x88, 0x8a, 0xf7, 0x24, 0x0b, 0x15, 0x87, 0x89, 0xe2, 0x7b, + 0xa3, 0x6e, 0xbb, 0x58, 0xbf, 0xa7, 0xa3, 0x1b, 0xf7, 0x58, 0xbd, 0x84, + 0xcb, 0x16, 0x33, 0x0f, 0x2c, 0xd3, 0x0b, 0xfc, 0x1f, 0x9f, 0xa4, 0x96, + 0xeb, 0x14, 0xe7, 0xc0, 0x02, 0x9b, 0xff, 0x7f, 0x07, 0xfc, 0x62, 0xc8, + 0xf5, 0x8b, 0x9f, 0xcb, 0x17, 0xde, 0x6f, 0xca, 0xc5, 0xe8, 0x16, 0x6e, + 0x6e, 0x7b, 0x17, 0xbf, 0xf8, 0xb7, 0x35, 0xb9, 0x90, 0x92, 0xdd, 0x62, + 0xfb, 0x06, 0xd0, 0x58, 0xb9, 0xf6, 0x58, 0xa0, 0x1b, 0xaf, 0x11, 0x56, + 0x26, 0x9b, 0xdb, 0xcb, 0x99, 0x94, 0x20, 0x2f, 0xcf, 0x27, 0x61, 0xac, + 0x5f, 0xec, 0xf9, 0x67, 0xbe, 0xeb, 0x17, 0x7b, 0x9f, 0x3d, 0x9f, 0x13, + 0xdb, 0xa2, 0xc5, 0xfe, 0xf7, 0xf3, 0xda, 0xc0, 0x96, 0x2a, 0x3c, 0xf2, + 0x48, 0x52, 0xf8, 0x7a, 0x68, 0x2c, 0x5b, 0xa9, 0x62, 0xff, 0xcf, 0x26, + 0x96, 0x74, 0x7d, 0x32, 0xc5, 0xfe, 0x92, 0xfb, 0xf4, 0xc8, 0x96, 0x28, + 0x8f, 0xd3, 0xc7, 0xf5, 0x1a, 0x22, 0xaa, 0x10, 0x89, 0xbd, 0xb6, 0x76, + 0xb1, 0x5a, 0x3c, 0xc2, 0x2d, 0xbf, 0xcc, 0x17, 0xdf, 0x4d, 0x05, 0x8b, + 0xf7, 0x32, 0x26, 0x8f, 0x58, 0xba, 0x7b, 0x58, 0xbf, 0x7e, 0x63, 0xf0, + 0x6b, 0x14, 0xb1, 0x69, 0x19, 0xb7, 0x01, 0x5d, 0x41, 0x14, 0x31, 0xc5, + 0x81, 0xa7, 0xdf, 0xd2, 0x42, 0x8a, 0x78, 0xb1, 0x7d, 0xf1, 0x4f, 0x16, + 0x2f, 0x33, 0x01, 0x62, 0xe9, 0xe4, 0x9b, 0xfd, 0x11, 0xdf, 0xb7, 0xf4, + 0xf7, 0xe5, 0x8a, 0xf9, 0xeb, 0x08, 0xae, 0xff, 0xdf, 0x72, 0x9e, 0xf8, + 0xe7, 0x95, 0x8b, 0xdc, 0x9d, 0x2c, 0x5f, 0xff, 0xd9, 0xdf, 0x98, 0x7f, + 0x9e, 0x63, 0xed, 0xb3, 0x76, 0xb1, 0x6e, 0x0d, 0x1b, 0x7b, 0x91, 0x76, + 0x7c, 0x43, 0xb5, 0xb2, 0x7c, 0x5e, 0x8e, 0x7a, 0xa5, 0x73, 0xaf, 0x1d, + 0xcd, 0x24, 0x78, 0xc6, 0x74, 0x42, 0xd0, 0xd5, 0x14, 0xa1, 0x6b, 0xd0, + 0xf1, 0xd6, 0x2f, 0xe2, 0xc8, 0x41, 0xb8, 0xb1, 0x7f, 0x48, 0x7c, 0x1f, + 0x67, 0x58, 0xad, 0xcf, 0x78, 0x8b, 0x6f, 0xdc, 0x3b, 0x36, 0xcb, 0x17, + 0xc3, 0x90, 0xce, 0xb1, 0x5d, 0x9e, 0x6f, 0x0a, 0x6f, 0x6e, 0x6b, 0x2c, + 0x5e, 0x00, 0x7e, 0x58, 0xbb, 0x19, 0x62, 0xfb, 0x3e, 0xda, 0x58, 0xac, + 0x3d, 0x73, 0x8f, 0x90, 0xb5, 0x6e, 0x8a, 0x30, 0x9d, 0xae, 0xfe, 0xeb, + 0x15, 0x89, 0x82, 0x34, 0x31, 0x83, 0x25, 0xb8, 0x6e, 0xb1, 0x7d, 0xdf, + 0x27, 0xb5, 0x8b, 0x9a, 0x06, 0x1b, 0xc7, 0x17, 0xbc, 0x6f, 0xdd, 0x62, + 0xff, 0xda, 0x9e, 0x9f, 0x97, 0xd3, 0xc4, 0xb1, 0x7e, 0xcd, 0x0a, 0x40, + 0xb1, 0x51, 0x1f, 0x49, 0x20, 0xdb, 0x65, 0x8b, 0xc0, 0xd3, 0xac, 0x54, + 0x11, 0xb3, 0xdc, 0x21, 0xd8, 0x88, 0x84, 0xef, 0xa3, 0x9b, 0x3e, 0xb1, + 0x7f, 0xff, 0xa4, 0x2f, 0xb7, 0xb9, 0x9a, 0x29, 0xee, 0x19, 0xdf, 0x96, + 0x2f, 0xb3, 0xdc, 0x65, 0x8b, 0x0f, 0x48, 0x85, 0xfb, 0x1d, 0xfe, 0xe1, + 0x61, 0xd9, 0xb6, 0x58, 0xa8, 0x26, 0x0c, 0xd0, 0xaa, 0x11, 0x4d, 0xfd, + 0xcc, 0x1b, 0xf3, 0x65, 0x8b, 0xd0, 0x90, 0x2c, 0x5e, 0xfb, 0x81, 0x62, + 0xfa, 0x28, 0x4c, 0x7a, 0x45, 0x44, 0x78, 0x81, 0x8e, 0xd4, 0xb3, 0x7b, + 0xb6, 0x21, 0x1c, 0x33, 0xf2, 0x36, 0xe3, 0x67, 0x61, 0x77, 0x76, 0x77, + 0xcd, 0x46, 0xe7, 0xf7, 0x16, 0x8c, 0x14, 0xa3, 0x47, 0xe1, 0xaf, 0x8b, + 0xc3, 0x61, 0xbf, 0x87, 0xa6, 0xdd, 0xb7, 0x58, 0xbf, 0xff, 0xee, 0xba, + 0xed, 0x31, 0xa1, 0xe7, 0xae, 0xb1, 0xb4, 0x6b, 0xf6, 0xc0, 0x30, 0xcf, + 0xc7, 0x2c, 0x5b, 0x75, 0x8b, 0xff, 0x10, 0x98, 0x3c, 0xe3, 0xc9, 0x2c, + 0x5f, 0xa1, 0xcf, 0x74, 0x02, 0xc5, 0x1a, 0x7d, 0x3d, 0x9e, 0xdf, 0x00, + 0xed, 0x05, 0x8b, 0x9c, 0x6b, 0x15, 0xc3, 0x75, 0x1c, 0x47, 0x7f, 0x8d, + 0xfb, 0x43, 0x52, 0x6a, 0xc5, 0x69, 0x17, 0x07, 0x5e, 0x22, 0x4b, 0xf1, + 0x67, 0x46, 0xd2, 0xc5, 0xff, 0x41, 0xfe, 0xce, 0x39, 0x25, 0x8a, 0x30, + 0xf8, 0x24, 0xa6, 0xf4, 0xb6, 0x96, 0x2f, 0x8d, 0xce, 0x3a, 0xc5, 0xc5, + 0xba, 0xc5, 0xff, 0xba, 0x9f, 0x6d, 0x64, 0x97, 0x1d, 0x62, 0xfc, 0x1f, + 0xbc, 0x2f, 0xac, 0x51, 0x88, 0xa7, 0x72, 0x32, 0x18, 0xe8, 0x83, 0x7f, + 0x1f, 0xdf, 0x9e, 0x92, 0xb1, 0x7f, 0xe8, 0xf3, 0x37, 0xfb, 0xe9, 0xe4, + 0xeb, 0x17, 0x8b, 0x70, 0x2c, 0x5f, 0x0c, 0x12, 0x4b, 0x17, 0xb3, 0xbf, + 0x2c, 0x56, 0xc8, 0xa2, 0xc4, 0x46, 0x1e, 0xe8, 0x45, 0x7d, 0x9d, 0x80, + 0x96, 0x2f, 0xe8, 0x4f, 0xbe, 0xd0, 0x58, 0xa2, 0x3d, 0x1f, 0x11, 0xdf, + 0xfb, 0xc2, 0x3f, 0xe5, 0xc9, 0x86, 0xb1, 0x7f, 0xfd, 0x81, 0x18, 0x37, + 0xce, 0xe1, 0xc2, 0x6d, 0x96, 0x2f, 0xa1, 0x06, 0xf2, 0xc5, 0x6c, 0x8d, + 0x5e, 0xc8, 0x7e, 0x7c, 0xca, 0x77, 0x81, 0xf1, 0x2c, 0x5f, 0x1b, 0xa6, + 0x09, 0x62, 0xed, 0xbe, 0xb1, 0x76, 0xfd, 0x16, 0x2c, 0x1a, 0xa4, 0x05, + 0x2d, 0xe5, 0x60, 0x28, 0x54, 0x9f, 0x9e, 0x86, 0x7c, 0x36, 0x11, 0x05, + 0x62, 0x35, 0x1e, 0x13, 0x17, 0xdb, 0x79, 0x86, 0xb1, 0x7d, 0x3b, 0x82, + 0x3d, 0x62, 0xdb, 0xb9, 0xe5, 0xfc, 0x92, 0xfe, 0xfc, 0xff, 0x3b, 0xf2, + 0xc5, 0xe6, 0x9e, 0xd6, 0x2f, 0xf0, 0xb8, 0x19, 0x67, 0x70, 0x58, 0xb7, + 0x51, 0x87, 0xa7, 0xf1, 0xdb, 0xf9, 0xfa, 0xfd, 0xff, 0x21, 0x2c, 0x5f, + 0xef, 0xb8, 0x71, 0x80, 0x04, 0xa4, 0x56, 0x8f, 0xb6, 0x38, 0xd6, 0xf7, + 0x27, 0x65, 0x8b, 0xff, 0xe3, 0x5b, 0xd0, 0x71, 0xf3, 0xf9, 0x85, 0xba, + 0xc5, 0x61, 0xf7, 0xf0, 0x7a, 0xfe, 0xce, 0x3f, 0xa7, 0xb5, 0x8b, 0x9b, + 0x65, 0x8b, 0xa4, 0x0b, 0x17, 0x61, 0xd8, 0xd7, 0x86, 0x31, 0x7e, 0x9d, + 0xff, 0x3a, 0x58, 0xbf, 0x34, 0xea, 0x4d, 0x58, 0xbf, 0x7d, 0xb9, 0x38, + 0xb1, 0x7b, 0xe2, 0x35, 0x62, 0xf7, 0x57, 0x5f, 0xc5, 0x8b, 0xcc, 0x77, + 0x58, 0xa3, 0x11, 0x11, 0xf2, 0x72, 0x1f, 0x11, 0x35, 0xe0, 0xe4, 0x0b, + 0x15, 0xb2, 0xbb, 0x53, 0x4a, 0x3b, 0x84, 0x13, 0xc2, 0x67, 0x50, 0x94, + 0xf9, 0x09, 0x2e, 0xf8, 0xb0, 0x22, 0x90, 0xe1, 0x61, 0xd4, 0x7b, 0x76, + 0x09, 0x62, 0xff, 0xd0, 0xf8, 0x7a, 0x91, 0xff, 0x02, 0x58, 0xbf, 0x7e, + 0x45, 0xdb, 0xac, 0x51, 0xa8, 0x82, 0xec, 0x5c, 0xe8, 0x57, 0xef, 0x1f, + 0x91, 0xbc, 0x6b, 0x58, 0xbf, 0xfc, 0x77, 0xd4, 0x38, 0x26, 0x72, 0xce, + 0x2c, 0x5f, 0xf1, 0x00, 0x7f, 0x60, 0xf3, 0x65, 0x8b, 0xf6, 0x0b, 0xaf, + 0xce, 0x2c, 0x53, 0x9f, 0x47, 0xce, 0xef, 0xb0, 0x9c, 0x25, 0x8b, 0xff, + 0x8d, 0x66, 0x20, 0x10, 0x9b, 0xbe, 0xb1, 0x62, 0xbb, 0x3e, 0xc2, 0x22, + 0xbf, 0xef, 0x73, 0x3c, 0x52, 0x7e, 0x2c, 0x5f, 0xa4, 0x0c, 0x40, 0x58, + 0xbf, 0x0b, 0xbf, 0x38, 0x4b, 0x16, 0xf1, 0x88, 0x8b, 0x81, 0xcf, 0x09, + 0xeb, 0x11, 0xc8, 0x50, 0xad, 0xbf, 0xe2, 0xcd, 0x0f, 0xf3, 0xdc, 0x16, + 0x2f, 0xff, 0x49, 0xc4, 0xc3, 0xf7, 0x7b, 0xb9, 0x04, 0xb1, 0x6c, 0x24, + 0x43, 0x84, 0x75, 0x7f, 0xff, 0xd9, 0xa1, 0xfe, 0x7b, 0xe1, 0x64, 0x4e, + 0x22, 0xdb, 0x37, 0x58, 0xbf, 0xfe, 0x16, 0xc1, 0x9f, 0x8f, 0xbb, 0xec, + 0x13, 0x76, 0xb1, 0x7f, 0x7d, 0xf8, 0xda, 0x82, 0xc5, 0xf3, 0xe6, 0xa2, + 0x58, 0xb7, 0x7b, 0x9e, 0x8f, 0xcb, 0xa9, 0xd1, 0xa4, 0xd0, 0xa8, 0xbf, + 0xf7, 0x7e, 0xdf, 0xee, 0x3f, 0xe6, 0xcb, 0x17, 0xf3, 0xf7, 0xcf, 0xb8, + 0x4b, 0x16, 0xeb, 0xd6, 0x28, 0x07, 0x8e, 0x46, 0x15, 0x88, 0xab, 0xd4, + 0x22, 0xaf, 0xe6, 0xe6, 0x61, 0x1a, 0xb1, 0x58, 0x7a, 0x82, 0x27, 0xbc, + 0xcc, 0x12, 0xc5, 0x4a, 0xb7, 0x31, 0xc2, 0xb5, 0xca, 0x35, 0x19, 0xdf, + 0xe3, 0x25, 0x22, 0x1b, 0xff, 0xf3, 0x31, 0x00, 0xf3, 0xdc, 0x07, 0xf9, + 0x2d, 0xd6, 0x2f, 0xff, 0xe7, 0x62, 0xc9, 0xfb, 0x3f, 0x1e, 0x18, 0x40, + 0x58, 0xbe, 0xc3, 0xb8, 0xd6, 0x2f, 0xfd, 0xa0, 0xfd, 0xcf, 0xce, 0xc4, + 0x25, 0x8b, 0xfc, 0xd1, 0xe6, 0x9b, 0x3e, 0xe2, 0xc5, 0xb8, 0x62, 0x27, + 0x70, 0x88, 0x34, 0x2a, 0x3a, 0x65, 0x5e, 0x87, 0x9d, 0xff, 0x36, 0xa2, + 0x29, 0x07, 0x04, 0xb1, 0x52, 0x7c, 0x63, 0x29, 0xbf, 0x7b, 0x04, 0x5e, + 0x58, 0xbf, 0x43, 0x81, 0xcc, 0x7a, 0xc5, 0xa7, 0x0f, 0x55, 0x8a, 0x2f, + 0xfc, 0x61, 0x31, 0xa6, 0x70, 0x00, 0x95, 0x8b, 0xff, 0xe0, 0x49, 0x6f, + 0xbf, 0xdf, 0xbd, 0xc5, 0x3a, 0x58, 0xbf, 0xc2, 0x62, 0xde, 0x13, 0xb2, + 0xc5, 0xfe, 0x83, 0xf3, 0x93, 0xa8, 0x2c, 0x5e, 0xd8, 0x40, 0xc4, 0x5e, + 0x81, 0x53, 0x86, 0xb6, 0x73, 0x53, 0x41, 0xd4, 0x3f, 0xee, 0x17, 0x16, + 0x2f, 0xf3, 0x6a, 0x79, 0x9d, 0xf9, 0x62, 0xd1, 0xb2, 0xc5, 0xff, 0xf0, + 0xdf, 0x85, 0x9d, 0xee, 0xfd, 0xe7, 0x7e, 0x58, 0xb4, 0x20, 0x7d, 0x58, + 0x2f, 0x7e, 0xef, 0x92, 0x5e, 0x58, 0xad, 0x1e, 0x87, 0xc9, 0xe8, 0xe9, + 0x94, 0x7c, 0x61, 0xa1, 0xdd, 0x50, 0x55, 0xe5, 0xc8, 0xd9, 0xbd, 0x1a, + 0xbd, 0xff, 0xb7, 0xfb, 0xc7, 0xef, 0xf9, 0x17, 0x6b, 0x17, 0xff, 0xf8, + 0x7f, 0x9d, 0xfe, 0xf1, 0x33, 0x40, 0xd6, 0x0d, 0xa3, 0xd6, 0x2f, 0xff, + 0xfd, 0xf6, 0x7e, 0x3c, 0x30, 0x7e, 0xfc, 0xbe, 0xb4, 0xe5, 0xb2, 0xc5, + 0xf1, 0x67, 0x4c, 0x58, 0xad, 0x91, 0xea, 0x76, 0x70, 0x9a, 0xee, 0xda, + 0x34, 0x58, 0xbf, 0x9e, 0x28, 0x49, 0x41, 0x62, 0x9c, 0xf3, 0x3e, 0x3d, + 0x7f, 0xdb, 0x7c, 0x46, 0xe7, 0x49, 0xed, 0x62, 0xff, 0xfe, 0x9f, 0x70, + 0x32, 0xf7, 0xc4, 0xd0, 0xf7, 0x30, 0x25, 0x8b, 0xff, 0x4e, 0xd9, 0xe8, + 0x61, 0x38, 0xd6, 0x2f, 0xff, 0xb4, 0xcd, 0xdc, 0x39, 0xee, 0xf7, 0x7d, + 0x1a, 0xb1, 0x7f, 0x41, 0x9c, 0xa6, 0x0b, 0x17, 0xf8, 0xed, 0xdb, 0xcf, + 0x7e, 0x58, 0xa9, 0x3e, 0x1c, 0x2c, 0xb3, 0x6c, 0x8d, 0x68, 0x42, 0xda, + 0xfc, 0x06, 0xf7, 0xdd, 0x62, 0xfe, 0x66, 0x0a, 0x37, 0xeb, 0x91, 0xa2, + 0xc5, 0xfd, 0x9f, 0xf3, 0xcc, 0x7a, 0xc5, 0x82, 0x19, 0xf7, 0xf8, 0xfe, + 0xa5, 0x18, 0x0d, 0x09, 0x7b, 0xff, 0x48, 0x5c, 0xeb, 0x5b, 0x7c, 0xef, + 0xcb, 0x15, 0x2a, 0xea, 0xf7, 0x7e, 0x72, 0x1d, 0x1f, 0xfd, 0x79, 0xa3, + 0x14, 0x28, 0x77, 0x78, 0x9a, 0xff, 0x6a, 0x7d, 0xcf, 0x66, 0x96, 0x2f, + 0x66, 0x79, 0x62, 0xfd, 0xcf, 0x89, 0xa1, 0x11, 0xe8, 0x7c, 0xd2, 0xfa, + 0x1f, 0xcd, 0x96, 0x2f, 0xf9, 0xcb, 0x0f, 0x1d, 0x8f, 0xda, 0xc5, 0xff, + 0xfe, 0x63, 0x96, 0x77, 0x3a, 0xd3, 0xf4, 0xd6, 0x79, 0xbb, 0x58, 0xa1, + 0xa2, 0x7b, 0x87, 0x77, 0xff, 0xf0, 0xe1, 0xcd, 0x67, 0x9b, 0xb8, 0x98, + 0x39, 0xf7, 0x16, 0x2f, 0xff, 0xec, 0xf3, 0x77, 0xff, 0xbc, 0xfb, 0xf9, + 0xd2, 0x74, 0xb1, 0x7f, 0xff, 0xec, 0xd6, 0x6f, 0xf9, 0xe3, 0x6b, 0x07, + 0xf6, 0x7e, 0x39, 0xd6, 0x2f, 0xff, 0xf4, 0xb4, 0xb9, 0x37, 0xa0, 0xfd, + 0x35, 0x9e, 0x6e, 0xd6, 0x2a, 0x53, 0xaa, 0x81, 0x1e, 0x97, 0xf8, 0xbb, + 0x1c, 0xd7, 0x79, 0x9b, 0xa9, 0x62, 0xe9, 0x39, 0x87, 0xd8, 0x74, 0xdb, + 0xe7, 0xdb, 0x78, 0x2c, 0x5f, 0xfc, 0x03, 0x22, 0x80, 0x8b, 0xcd, 0x0c, + 0x58, 0xbb, 0x3a, 0x96, 0x29, 0x8f, 0x84, 0x91, 0xef, 0xfa, 0x7b, 0x3b, + 0x7b, 0x3b, 0xf2, 0xc5, 0xff, 0x73, 0x08, 0x23, 0x02, 0xdb, 0x65, 0x8b, + 0x9b, 0x65, 0x8a, 0xc5, 0xc7, 0xee, 0xd0, 0x1e, 0x56, 0xc6, 0x8b, 0x9a, + 0x10, 0xc4, 0x41, 0xe3, 0xb0, 0x8f, 0xef, 0x7d, 0xb8, 0xb1, 0x6e, 0xd6, + 0x2f, 0xef, 0x96, 0x7a, 0x40, 0xb1, 0x52, 0x7b, 0xa3, 0x1d, 0x61, 0x3b, + 0xfc, 0x76, 0xe1, 0x4e, 0x1a, 0xb1, 0x61, 0x2c, 0x5f, 0xf0, 0x85, 0xf7, + 0xf7, 0xda, 0x0b, 0x17, 0xa1, 0x9e, 0x58, 0xbe, 0x6f, 0xe6, 0x96, 0x2b, + 0xe6, 0xff, 0xa0, 0xed, 0xf8, 0x5f, 0xd4, 0x84, 0xb1, 0x74, 0x73, 0x2c, + 0x51, 0x89, 0xa9, 0x61, 0x69, 0xa6, 0x67, 0x12, 0x67, 0x9f, 0x11, 0x86, + 0x55, 0x7f, 0xe3, 0x47, 0xf6, 0x39, 0xc4, 0x43, 0x58, 0xad, 0xd1, 0x4e, + 0x4c, 0xd7, 0xbc, 0x52, 0xb1, 0x7f, 0xff, 0x49, 0x6e, 0xc4, 0x03, 0x33, + 0xef, 0xbc, 0x9d, 0xd6, 0x2a, 0x51, 0x34, 0xe4, 0x67, 0x1c, 0xbf, 0xfd, + 0x9a, 0x87, 0x18, 0xb0, 0x64, 0xd0, 0x58, 0xbb, 0xaf, 0xe2, 0xc5, 0xfb, + 0x98, 0x3f, 0xba, 0xc5, 0xfc, 0xec, 0x0f, 0x37, 0x6b, 0x14, 0xe7, 0xad, + 0xf2, 0x8a, 0x24, 0x4a, 0x79, 0xce, 0xfa, 0x1f, 0x7e, 0x8b, 0x17, 0xff, + 0xb3, 0x82, 0xdf, 0xef, 0xdf, 0x1f, 0xb0, 0x2c, 0x5f, 0xfe, 0x1e, 0xb1, + 0xcd, 0x2c, 0xf7, 0x85, 0xb2, 0xc5, 0xe9, 0x2f, 0x18, 0x8e, 0x17, 0x22, + 0x22, 0x5e, 0x27, 0x5d, 0xa6, 0x58, 0xbf, 0xfb, 0xa3, 0xf3, 0x98, 0x5b, + 0xb1, 0x01, 0x62, 0xff, 0x7d, 0xc6, 0x3c, 0x0a, 0x25, 0x8b, 0xcf, 0xdf, + 0x16, 0x2f, 0xd9, 0xd3, 0x21, 0xd7, 0xac, 0x51, 0xa7, 0x9b, 0xf1, 0xeb, + 0x03, 0x11, 0xd9, 0xba, 0x37, 0xa1, 0x07, 0x7c, 0x1f, 0xdb, 0xcb, 0x15, + 0xa3, 0xdf, 0x39, 0xdd, 0xff, 0xf0, 0x39, 0xef, 0xe7, 0xbe, 0xd0, 0xdb, + 0x02, 0x58, 0xa9, 0x3f, 0x57, 0x22, 0xbf, 0xda, 0xc3, 0x27, 0xa3, 0x7d, + 0x62, 0xfd, 0xee, 0x31, 0x1a, 0xb1, 0x58, 0x7b, 0xe1, 0x1b, 0x52, 0xc5, + 0x49, 0xae, 0x39, 0x15, 0xfe, 0x6c, 0xfb, 0xef, 0xfc, 0x58, 0xa9, 0x5c, + 0xe0, 0x78, 0xef, 0x74, 0x99, 0xf8, 0xf5, 0xca, 0x15, 0xa1, 0x10, 0x5f, + 0xff, 0x07, 0xaf, 0xb1, 0x9c, 0x2c, 0xd8, 0xf8, 0x75, 0x8b, 0xf7, 0x9c, + 0xed, 0x05, 0x8b, 0xcd, 0xdf, 0x0c, 0x3f, 0xbc, 0x53, 0xbb, 0xee, 0xb1, + 0x6f, 0x2c, 0x50, 0x0f, 0x77, 0x86, 0x81, 0x8b, 0xdf, 0xff, 0x13, 0x67, + 0xdf, 0x5f, 0x61, 0x7f, 0x0e, 0xb1, 0x7f, 0xd9, 0xc7, 0x1c, 0x94, 0x81, + 0x62, 0xff, 0xdb, 0xfd, 0x8b, 0xdc, 0x39, 0x4a, 0xc5, 0xc6, 0xc1, 0x62, + 0xff, 0x4e, 0x80, 0x36, 0x63, 0x56, 0x2b, 0x0f, 0x37, 0xe3, 0x37, 0xef, + 0xbe, 0xff, 0xc3, 0x11, 0xc9, 0xc3, 0x7f, 0x42, 0x32, 0xfe, 0xf4, 0xef, + 0x0e, 0x4a, 0xc5, 0x0d, 0x3b, 0x4c, 0x8c, 0xcb, 0xb5, 0x3b, 0xfc, 0xc5, + 0xe8, 0xb3, 0x58, 0xb1, 0x7f, 0xff, 0xda, 0x34, 0x7f, 0x9e, 0x7f, 0x3b, + 0x87, 0x9e, 0x29, 0xe0, 0x96, 0x2f, 0xfe, 0x7f, 0xb1, 0xc3, 0x91, 0xeb, + 0x52, 0xb1, 0x4c, 0x8b, 0x0f, 0x35, 0xd6, 0x26, 0x79, 0xf3, 0x76, 0x87, + 0x1d, 0xf1, 0x7b, 0x3e, 0xb1, 0x7f, 0xf1, 0x64, 0x76, 0x6a, 0x5e, 0x12, + 0x6a, 0xc5, 0xff, 0xfb, 0xf3, 0xdc, 0x0b, 0x0f, 0x9f, 0x7d, 0x3f, 0x6b, + 0x17, 0xff, 0xc5, 0x9d, 0x07, 0x3a, 0x98, 0x3e, 0xed, 0xa5, 0x8a, 0x94, + 0xc3, 0xe0, 0x44, 0x34, 0x6f, 0x2b, 0x5e, 0x9e, 0xf8, 0xb1, 0x7e, 0x61, + 0xcf, 0x7c, 0x58, 0xa7, 0x44, 0x27, 0xcf, 0x42, 0x1e, 0xbf, 0x98, 0x78, + 0x4f, 0xe5, 0x8b, 0xee, 0x63, 0x92, 0xc5, 0x1a, 0x79, 0xbd, 0x96, 0x5e, + 0x33, 0x78, 0x96, 0x2b, 0x0f, 0x14, 0x89, 0x2f, 0xfe, 0x9d, 0xf3, 0x59, + 0xf7, 0xd7, 0xd9, 0x62, 0xfe, 0x1b, 0xe6, 0xa6, 0x25, 0x8b, 0xef, 0x38, + 0xb7, 0x58, 0xbf, 0xf9, 0x83, 0x2c, 0xcf, 0xbe, 0xff, 0xc5, 0x8a, 0x93, + 0xe8, 0x11, 0x25, 0xd2, 0x7d, 0x23, 0xed, 0x91, 0x0a, 0x12, 0xd7, 0x6b, + 0x65, 0x8b, 0x44, 0x47, 0xae, 0x23, 0xeb, 0xff, 0xda, 0x04, 0x76, 0x6a, + 0x60, 0xfd, 0xfb, 0x16, 0x2f, 0xfc, 0x11, 0x60, 0xfe, 0x2d, 0x88, 0x25, + 0x8a, 0x64, 0x48, 0x12, 0x75, 0xfe, 0xff, 0xdb, 0x6d, 0x4f, 0x45, 0x8b, + 0xc3, 0xf3, 0xac, 0x56, 0x1e, 0xa7, 0x0d, 0xef, 0xec, 0xe8, 0xe4, 0x52, + 0xb1, 0x7f, 0x8b, 0xdf, 0x68, 0x4e, 0xcb, 0x17, 0xfe, 0xf0, 0x70, 0xe4, + 0x50, 0x9d, 0x6c, 0xb1, 0x58, 0x7f, 0x1d, 0x9a, 0x5f, 0xf6, 0xa7, 0xda, + 0xd4, 0x9f, 0x8b, 0x17, 0xff, 0xd0, 0x7f, 0x07, 0xa9, 0xfc, 0xfb, 0x8d, + 0xda, 0xc5, 0xff, 0xd2, 0x14, 0xea, 0x7f, 0x2e, 0x5b, 0x2c, 0x5f, 0x85, + 0xcf, 0xb4, 0x0c, 0x4e, 0xe0, 0x64, 0x39, 0x0a, 0x58, 0x88, 0xb8, 0x74, + 0x1a, 0x95, 0xfd, 0x09, 0x32, 0x4e, 0x75, 0x8b, 0xf6, 0x75, 0x3c, 0xc4, + 0xb1, 0x68, 0xd1, 0x62, 0xf9, 0x81, 0x85, 0x27, 0xe3, 0xf2, 0xfe, 0x15, + 0xdf, 0xe3, 0x71, 0xf7, 0xdf, 0x3a, 0x2c, 0x5f, 0xfe, 0xe9, 0xf7, 0x1e, + 0x39, 0xae, 0x59, 0xd1, 0x62, 0xfb, 0x81, 0xce, 0xeb, 0x17, 0xff, 0xfc, + 0x1f, 0x8b, 0x00, 0xc4, 0x01, 0xfe, 0x74, 0xf3, 0xdf, 0x96, 0x28, 0xd4, + 0x46, 0x68, 0x96, 0xfd, 0x38, 0x5e, 0x8e, 0x58, 0xbf, 0x9f, 0xb0, 0x69, + 0x86, 0xb1, 0x7f, 0xfb, 0xa1, 0x67, 0x0c, 0xc2, 0x14, 0x33, 0x8b, 0x14, + 0xb1, 0x58, 0x7b, 0x07, 0x4c, 0xa3, 0xa3, 0x4b, 0xe5, 0x45, 0x08, 0x7b, + 0xf7, 0xe7, 0x5c, 0x75, 0x8b, 0x47, 0xac, 0x5d, 0x84, 0xb1, 0x5a, 0x35, + 0x7f, 0x15, 0xbc, 0xf3, 0x05, 0x8b, 0xd0, 0x10, 0xd6, 0x2d, 0xd9, 0x88, + 0xe2, 0x19, 0xa4, 0x4a, 0x7f, 0x21, 0x61, 0xca, 0x95, 0x67, 0x78, 0x70, + 0xf0, 0xd9, 0x68, 0xf6, 0x2f, 0xe2, 0x0d, 0xa1, 0x83, 0x58, 0xbf, 0xf8, + 0xed, 0x0f, 0xe0, 0x18, 0x3e, 0xc2, 0x58, 0xa6, 0x3f, 0x60, 0x17, 0x54, + 0xb2, 0x67, 0xf2, 0x37, 0x27, 0x85, 0xc6, 0xa5, 0x16, 0x94, 0x3b, 0x79, + 0x2d, 0xf8, 0x50, 0xbc, 0xbf, 0x9f, 0x51, 0xb7, 0x3c, 0xeb, 0x17, 0x42, + 0x56, 0x2f, 0xee, 0x9e, 0x29, 0x3f, 0x16, 0x2f, 0xc5, 0x3f, 0xc1, 0xac, + 0x5f, 0xfd, 0xc9, 0x06, 0x7d, 0xf4, 0xc1, 0x79, 0x62, 0xdb, 0x0c, 0xfb, + 0x38, 0x4f, 0x4e, 0x8c, 0x52, 0x84, 0xe5, 0x41, 0x30, 0x2c, 0x86, 0xe5, + 0xfc, 0x3c, 0x23, 0x75, 0x2b, 0x17, 0xf9, 0x98, 0xf8, 0x2d, 0x6c, 0xb1, + 0x7f, 0xff, 0x61, 0x0b, 0x93, 0x9a, 0x00, 0x7e, 0xd3, 0x8b, 0x75, 0x8b, + 0xfb, 0x40, 0xcd, 0x31, 0x7d, 0x12, 0x3c, 0x34, 0xb7, 0x6b, 0x15, 0x27, + 0xaf, 0x1c, 0x89, 0x7f, 0x9f, 0x67, 0xdf, 0xf3, 0xe5, 0x8b, 0xfe, 0x7d, + 0xdc, 0x7e, 0xe4, 0x9a, 0xb1, 0x67, 0xd1, 0xf8, 0x78, 0xd6, 0xb6, 0x76, + 0x4d, 0xd0, 0x85, 0x88, 0xe7, 0x39, 0x0d, 0x67, 0xde, 0x3e, 0x3e, 0xe5, + 0xb4, 0x47, 0x9f, 0x45, 0x39, 0xcd, 0xa9, 0xd4, 0x93, 0xcb, 0x6e, 0xfc, + 0xe8, 0x70, 0x23, 0x41, 0x29, 0x64, 0x1c, 0x8f, 0x1f, 0xd4, 0xa6, 0x1e, + 0x90, 0x87, 0x0a, 0x33, 0x58, 0xe2, 0x80, 0xe3, 0x16, 0xea, 0x84, 0xa5, + 0xed, 0xff, 0x12, 0xc5, 0xfb, 0xef, 0x1c, 0xfa, 0x58, 0xbd, 0xb0, 0x82, + 0x58, 0xad, 0xcf, 0x2d, 0x8a, 0xef, 0xfd, 0xbf, 0xe7, 0xb8, 0x6f, 0xfc, + 0x1a, 0xc5, 0xfd, 0xbf, 0xe7, 0xb8, 0x7d, 0x62, 0xee, 0xbf, 0xa9, 0x62, + 0xce, 0xb1, 0x79, 0xcf, 0x8b, 0x17, 0x49, 0xab, 0x15, 0x04, 0x7d, 0x8c, + 0x88, 0xd4, 0x3e, 0xcc, 0x5c, 0x83, 0x42, 0x21, 0x0e, 0x5f, 0xf1, 0x60, + 0x5a, 0xcd, 0xff, 0x8b, 0x17, 0xff, 0xfe, 0x7d, 0xb8, 0x29, 0x30, 0xb3, + 0xef, 0x25, 0xe3, 0x45, 0x3a, 0x58, 0xbf, 0xff, 0x4e, 0xde, 0x11, 0xf3, + 0x9b, 0xfe, 0x4a, 0x78, 0xb1, 0x5a, 0x46, 0x27, 0xdb, 0x6f, 0xee, 0xe1, + 0xbf, 0xdf, 0x65, 0x8b, 0x6e, 0xb1, 0x7f, 0xfd, 0x07, 0x0b, 0xdf, 0xcf, + 0xe7, 0x70, 0x60, 0x96, 0x2f, 0xec, 0xf7, 0x36, 0xc0, 0x96, 0x2a, 0x24, + 0x41, 0xe9, 0x4e, 0xf0, 0x7a, 0x95, 0x8b, 0xff, 0xfb, 0x07, 0xf9, 0x08, + 0xb1, 0xf6, 0x8e, 0x17, 0xdf, 0x4b, 0x15, 0xb2, 0xa8, 0xa1, 0xc3, 0xfb, + 0x08, 0xe3, 0xcc, 0xb5, 0x09, 0x66, 0x24, 0x21, 0xea, 0x97, 0x74, 0xc3, + 0x91, 0x9b, 0x76, 0x64, 0xf6, 0xca, 0x8e, 0x28, 0xe3, 0xda, 0x36, 0x61, + 0x4a, 0xf0, 0xb7, 0x6b, 0x17, 0xd3, 0xbb, 0xee, 0xb1, 0x7b, 0x4e, 0x12, + 0xc5, 0xfe, 0xd0, 0xb6, 0x78, 0x1c, 0x6b, 0x17, 0xfb, 0x99, 0xa1, 0x93, + 0x41, 0x62, 0x86, 0x88, 0x7d, 0x0f, 0x70, 0xda, 0xe1, 0x44, 0xb1, 0x7e, + 0x97, 0x3e, 0x71, 0x62, 0xfd, 0x30, 0x8e, 0xd8, 0x96, 0x28, 0xe7, 0xd9, + 0xf1, 0x9f, 0x13, 0xdf, 0xc4, 0x2e, 0x3e, 0x69, 0x62, 0xfc, 0x58, 0x01, + 0x71, 0x62, 0xfa, 0x2f, 0xe1, 0xd6, 0x28, 0xc3, 0xcc, 0x0c, 0xa2, 0xb1, + 0x13, 0xac, 0xf3, 0x7b, 0xf8, 0x05, 0x8b, 0x4a, 0xc5, 0xff, 0xf4, 0x4c, + 0xd0, 0xe4, 0x9c, 0x7f, 0x92, 0xdd, 0x62, 0xfe, 0x83, 0xf8, 0xa7, 0x16, + 0x2f, 0xff, 0xfa, 0x7d, 0xcc, 0xd4, 0xe1, 0x7c, 0x3d, 0x44, 0xcc, 0x5b, + 0x2c, 0x54, 0xa3, 0xd5, 0xc4, 0x74, 0xa3, 0xe2, 0xcb, 0xfe, 0x16, 0xf9, + 0xad, 0xb6, 0x16, 0xcb, 0x17, 0xfd, 0x91, 0x42, 0x7b, 0xce, 0xfc, 0xb1, + 0x7f, 0xef, 0xc9, 0xf9, 0xe2, 0x60, 0x71, 0x62, 0xdf, 0x58, 0xbd, 0xf0, + 0xce, 0xb1, 0x43, 0x36, 0x38, 0x25, 0x46, 0x2a, 0x79, 0x92, 0x1c, 0x8c, + 0x48, 0xe7, 0x64, 0x7f, 0xc3, 0xcf, 0x38, 0x5f, 0xff, 0x6f, 0xf9, 0xee, + 0x1c, 0x7e, 0x67, 0xf3, 0x75, 0x8b, 0xdb, 0x3f, 0x6b, 0x17, 0xa1, 0x3e, + 0x58, 0xbe, 0x9f, 0x8b, 0x4b, 0x17, 0x7c, 0x6b, 0x17, 0x31, 0x2c, 0x54, + 0xae, 0x47, 0xed, 0x2d, 0x17, 0x1a, 0x9d, 0x4e, 0x21, 0xf2, 0x1d, 0xe1, + 0x18, 0x43, 0x14, 0x62, 0xf3, 0x1c, 0x04, 0xc7, 0x0a, 0xbd, 0x4e, 0x95, + 0xdf, 0x0f, 0xe2, 0xd9, 0x62, 0xfe, 0x68, 0x66, 0xc2, 0x25, 0x8b, 0xb0, + 0x6b, 0x14, 0x33, 0xc5, 0xdc, 0xba, 0xff, 0xda, 0xc8, 0xf8, 0xbe, 0xc7, + 0x7e, 0x2c, 0x5f, 0xda, 0x70, 0xbf, 0x23, 0x58, 0xbf, 0xbc, 0xe1, 0x1d, + 0xfc, 0xb1, 0x7f, 0xcc, 0x5a, 0xc7, 0xfc, 0x8d, 0x62, 0xd9, 0xa4, 0x4a, + 0xf8, 0xbf, 0xa8, 0xbe, 0xdb, 0x4a, 0x73, 0xb8, 0xd5, 0xa2, 0x3f, 0xc3, + 0x62, 0xce, 0xb1, 0x77, 0x5f, 0x8b, 0x17, 0xff, 0x67, 0x60, 0x6f, 0x71, + 0xcb, 0xb8, 0x2c, 0x5f, 0xbe, 0xcf, 0xf6, 0x58, 0xa2, 0x3e, 0xde, 0x23, + 0x5f, 0xfd, 0xb1, 0xf2, 0x38, 0x5a, 0x30, 0xb5, 0x1e, 0xb1, 0x5b, 0x1f, + 0x7b, 0x10, 0xd6, 0x26, 0xe7, 0xa4, 0x86, 0x11, 0x14, 0x3e, 0x2f, 0xfd, + 0xd1, 0xfd, 0x09, 0x33, 0xd2, 0x25, 0x8b, 0x44, 0xb1, 0x7b, 0xa6, 0x0d, + 0x62, 0xff, 0xf0, 0x98, 0xb7, 0xef, 0x8f, 0xe7, 0x2d, 0x96, 0x2f, 0xd1, + 0xc2, 0xfe, 0x6e, 0xb1, 0x71, 0xf8, 0xb1, 0x58, 0x98, 0x2c, 0x48, 0x47, + 0x13, 0x00, 0xff, 0x93, 0x04, 0x5b, 0x7f, 0x4f, 0x9c, 0x13, 0x05, 0x8b, + 0xa0, 0xcb, 0x17, 0x36, 0x96, 0x2b, 0x47, 0xb6, 0xc5, 0xbc, 0x17, 0xbf, + 0xbb, 0xd9, 0xa1, 0x31, 0xeb, 0x16, 0x82, 0xe5, 0x14, 0x2f, 0x31, 0x41, + 0x72, 0x8a, 0x94, 0x47, 0x91, 0xc1, 0xfb, 0xe1, 0x9d, 0xfc, 0xb1, 0x52, + 0x8b, 0xfd, 0x9e, 0xd8, 0x86, 0xe0, 0xa5, 0x62, 0x8c, 0x7d, 0x30, 0xee, + 0xb0, 0xc3, 0xad, 0x84, 0x8c, 0xc6, 0x69, 0xb4, 0x23, 0xe0, 0x45, 0x90, + 0xc3, 0x34, 0xfb, 0x78, 0x69, 0x3c, 0x6c, 0x91, 0x1f, 0x1e, 0x1e, 0x5f, + 0xb7, 0xd0, 0xed, 0x3d, 0xde, 0x52, 0xd7, 0xb9, 0x1a, 0x37, 0xa1, 0x66, + 0x28, 0x76, 0xc7, 0x17, 0xdf, 0xef, 0xb8, 0x00, 0xfd, 0xf1, 0x62, 0xff, + 0x49, 0xf7, 0xfb, 0x76, 0x05, 0x8b, 0x75, 0xbb, 0x9f, 0x58, 0x66, 0xb7, + 0xf4, 0x58, 0x4d, 0xfc, 0x58, 0xbc, 0xc7, 0x3a, 0xc5, 0xff, 0x8c, 0x73, + 0xcc, 0x52, 0x42, 0x3a, 0xc5, 0xec, 0xc0, 0x2c, 0x54, 0x11, 0x4d, 0xb9, + 0x6f, 0x07, 0x7c, 0x81, 0x78, 0xf3, 0x8b, 0x16, 0x89, 0x62, 0xe3, 0xee, + 0x61, 0xaf, 0x71, 0xcb, 0xfc, 0xc5, 0x8f, 0x1e, 0xff, 0x58, 0xb8, 0xfd, + 0xac, 0x5e, 0x84, 0x9d, 0x62, 0xfe, 0xcc, 0xe7, 0x32, 0x3d, 0x62, 0xbb, + 0x3c, 0xd2, 0x1d, 0xbf, 0xe9, 0x2d, 0xb9, 0x87, 0x98, 0xf5, 0x8b, 0xff, + 0xed, 0xbd, 0x9c, 0xf8, 0xb9, 0x3b, 0x08, 0xa5, 0x62, 0xff, 0xf4, 0xb8, + 0xc3, 0xd7, 0xdf, 0x58, 0x39, 0x58, 0xbf, 0xff, 0xb4, 0xfe, 0xe7, 0xf1, + 0xc8, 0xb3, 0xbf, 0x71, 0xd6, 0x2d, 0x03, 0x11, 0x49, 0xa4, 0xab, 0xa7, + 0xeb, 0x17, 0xf7, 0x5f, 0xbf, 0xd8, 0x50, 0x58, 0xbf, 0x9a, 0x21, 0xc9, + 0x6c, 0xb1, 0x5b, 0x27, 0xf2, 0x32, 0x2c, 0x3c, 0x68, 0x7b, 0x11, 0x50, + 0x85, 0xfa, 0x1a, 0xdf, 0xcd, 0xe0, 0x06, 0x51, 0x2c, 0x5f, 0xef, 0xb7, + 0xb8, 0x16, 0x7d, 0x62, 0xf4, 0x4f, 0xf5, 0x8b, 0x41, 0x62, 0x96, 0x29, + 0x8b, 0xee, 0x09, 0x54, 0x9e, 0xde, 0x8f, 0x2f, 0xef, 0x16, 0x6c, 0xfa, + 0x58, 0xbf, 0x67, 0x98, 0x80, 0xb1, 0x52, 0x7a, 0xa2, 0x2e, 0xbe, 0x60, + 0xc5, 0xba, 0xc5, 0xee, 0xa9, 0x3a, 0xc5, 0x62, 0x6d, 0x8d, 0x09, 0x0e, + 0x3b, 0x78, 0x87, 0xa8, 0x96, 0xf7, 0xdc, 0x35, 0x8b, 0xe1, 0xfe, 0x60, + 0xb1, 0x5b, 0x9e, 0x09, 0x0f, 0x5e, 0x29, 0xdd, 0x62, 0xfd, 0x8e, 0x6b, + 0x9a, 0xb1, 0x7d, 0x30, 0xce, 0x2c, 0x5f, 0xf3, 0x04, 0x19, 0x16, 0x77, + 0x05, 0x8a, 0xc4, 0x51, 0xe8, 0x77, 0xe5, 0x2c, 0x45, 0x7a, 0x26, 0xe2, + 0xc5, 0xf9, 0xbc, 0x1f, 0xe5, 0x62, 0xf4, 0x96, 0xeb, 0x14, 0xe7, 0xc9, + 0xf1, 0xee, 0xa2, 0x9b, 0xf3, 0x67, 0x9f, 0x65, 0x8b, 0xf6, 0x1a, 0xd3, + 0xb2, 0xc5, 0xef, 0x7a, 0x56, 0x2b, 0xe7, 0x8c, 0xc5, 0x37, 0xd3, 0x16, + 0xa5, 0x62, 0xd2, 0xb1, 0x6c, 0x58, 0xad, 0x1a, 0x23, 0x88, 0xdb, 0x75, + 0x8a, 0x39, 0xfc, 0xfd, 0x17, 0xa8, 0x86, 0xfa, 0x45, 0xd7, 0xba, 0xc5, + 0xf7, 0x0a, 0x42, 0x58, 0xbe, 0xfe, 0x14, 0x16, 0x2e, 0xda, 0x56, 0x28, + 0x66, 0xeb, 0x08, 0xab, 0x0f, 0xf5, 0x97, 0x6e, 0x70, 0x2c, 0x5f, 0x34, + 0x4d, 0xe5, 0x8a, 0x81, 0xba, 0xf0, 0xbd, 0xf6, 0xc7, 0x10, 0xd6, 0x2f, + 0x75, 0x3e, 0xcb, 0x15, 0x87, 0x8d, 0xd4, 0x4b, 0x7f, 0x7d, 0xf4, 0x1c, + 0x5c, 0x58, 0xa9, 0x3d, 0x5c, 0x24, 0xbf, 0xff, 0xb3, 0xdc, 0x0f, 0x9e, + 0xfb, 0x11, 0xb9, 0xd2, 0x42, 0x58, 0xbe, 0xe7, 0x9e, 0x25, 0x8a, 0x3a, + 0x21, 0x19, 0x82, 0xff, 0x3e, 0xa7, 0x66, 0xd6, 0xeb, 0x17, 0x6f, 0x12, + 0xc5, 0x18, 0xbc, 0x61, 0x30, 0x92, 0x1c, 0x31, 0x72, 0x13, 0xe6, 0x98, + 0xee, 0xdc, 0xf0, 0x9a, 0xd1, 0x97, 0xe1, 0x48, 0xcb, 0x45, 0x0b, 0xce, + 0x42, 0x93, 0xc4, 0x51, 0xc6, 0xb4, 0x76, 0x45, 0x97, 0xa7, 0xf3, 0x2f, + 0xff, 0x6b, 0x72, 0xce, 0x85, 0x93, 0xa9, 0xe2, 0xc5, 0xff, 0x8e, 0xf9, + 0xde, 0x38, 0xe7, 0xa9, 0x62, 0xff, 0xf6, 0x38, 0xfe, 0xe7, 0x98, 0xff, + 0xe6, 0xcb, 0x17, 0xff, 0xfe, 0xea, 0xc8, 0x3f, 0x42, 0xce, 0x67, 0xdf, + 0x82, 0x63, 0xbe, 0x96, 0x2b, 0xc8, 0xbc, 0x12, 0x6d, 0xf6, 0x1f, 0x38, + 0xb1, 0x7f, 0x64, 0x7f, 0xe7, 0x06, 0xb1, 0x73, 0x45, 0xf3, 0xd2, 0x22, + 0x2b, 0xff, 0x87, 0xf9, 0xe6, 0x68, 0x6c, 0xdf, 0x58, 0xac, 0x54, 0x5d, + 0xa4, 0xb2, 0x87, 0xef, 0x47, 0x50, 0x8b, 0x69, 0x62, 0xff, 0x33, 0x05, + 0x9c, 0x62, 0x58, 0xbf, 0xff, 0xcf, 0x3e, 0xf8, 0x98, 0xf9, 0xc2, 0x6e, + 0xc7, 0x84, 0xb1, 0x43, 0x44, 0x8f, 0xcc, 0xab, 0xe8, 0xc0, 0x28, 0x4e, + 0xde, 0xe8, 0xdf, 0x58, 0xba, 0x7c, 0xb1, 0x52, 0x6d, 0xa3, 0x87, 0xef, + 0xa7, 0xa3, 0xf4, 0x58, 0xbb, 0x0e, 0xb1, 0x63, 0x4c, 0x37, 0xae, 0x4d, + 0x5b, 0x22, 0x20, 0x98, 0x2f, 0xc6, 0xfb, 0x30, 0xeb, 0x17, 0xfe, 0x84, + 0x1f, 0x79, 0x3c, 0x5c, 0x95, 0x8b, 0xff, 0xdb, 0x07, 0xf7, 0x92, 0xd8, + 0x07, 0x98, 0x2c, 0x54, 0xa7, 0x7f, 0x90, 0xe5, 0x72, 0x36, 0x29, 0x12, + 0x0d, 0xff, 0xc5, 0x86, 0x9a, 0xde, 0xe3, 0x94, 0x4b, 0x17, 0xb2, 0x0e, + 0xb1, 0x7f, 0x6b, 0x1f, 0xf2, 0x35, 0x8b, 0x62, 0xc5, 0x44, 0x8a, 0x0d, + 0x23, 0x1c, 0x70, 0x05, 0xb7, 0xb3, 0x62, 0x58, 0xbd, 0x82, 0xed, 0x62, + 0xff, 0x49, 0x0f, 0xec, 0x14, 0x4b, 0x15, 0xf3, 0xf0, 0x21, 0xdf, 0x0f, + 0x5f, 0xb0, 0x6f, 0xae, 0x2c, 0x5f, 0xfb, 0x9f, 0x6e, 0x16, 0x0f, 0xf2, + 0xb1, 0x4b, 0x17, 0xd0, 0x70, 0x71, 0x62, 0xb8, 0x6b, 0xc3, 0x0c, 0xbc, + 0x26, 0xd2, 0xc5, 0xf6, 0xf3, 0x9b, 0x2c, 0x53, 0x9e, 0x0e, 0x87, 0x6f, + 0xd9, 0xff, 0x8b, 0xcb, 0x17, 0xbd, 0xee, 0xd6, 0x2f, 0xfe, 0xef, 0x77, + 0xf9, 0x9d, 0x59, 0xf7, 0x3a, 0xc5, 0x00, 0xfa, 0xbc, 0x3f, 0x70, 0xb4, + 0xb1, 0x7d, 0x3b, 0xc7, 0x62, 0xc5, 0x62, 0x62, 0x9a, 0x21, 0xe4, 0x24, + 0xe3, 0x88, 0x83, 0x18, 0xad, 0x95, 0x2f, 0xf6, 0x50, 0x76, 0xd0, 0xa3, + 0x77, 0xbe, 0x0f, 0xf9, 0xba, 0xc5, 0xe6, 0x62, 0x58, 0xa5, 0x8b, 0x73, + 0xc6, 0x9c, 0x43, 0x75, 0xd9, 0xf9, 0x84, 0x99, 0x52, 0x8d, 0xf7, 0x85, + 0xdd, 0xcf, 0xb2, 0xc5, 0xff, 0xc5, 0x20, 0xe6, 0x43, 0xee, 0x40, 0x58, + 0xbf, 0x39, 0xa7, 0x68, 0x2c, 0x5b, 0xd1, 0x1f, 0x67, 0xd0, 0xeb, 0x64, + 0x56, 0xb4, 0x21, 0x28, 0xc6, 0xdb, 0x7b, 0xac, 0x34, 0x99, 0x4b, 0xf9, + 0x49, 0x1c, 0x79, 0x4b, 0xbf, 0x95, 0xa2, 0xd0, 0xec, 0xe4, 0x2b, 0xbd, + 0x2d, 0xb0, 0x50, 0xd3, 0xbf, 0xd3, 0xf2, 0xcf, 0x7d, 0xd6, 0x2f, 0xf7, + 0xbf, 0x83, 0x17, 0xb8, 0xb1, 0x5a, 0x3e, 0x72, 0x32, 0xbe, 0x8e, 0x6e, + 0xc0, 0xb1, 0x7f, 0x6b, 0x1f, 0xf2, 0x35, 0x8b, 0xfb, 0xbc, 0xe9, 0xdc, + 0x86, 0xb1, 0x67, 0x8f, 0x3e, 0x00, 0xcb, 0x68, 0xe8, 0xb2, 0x28, 0x43, + 0xda, 0x0b, 0x17, 0xfe, 0xd0, 0xe4, 0x2c, 0xfc, 0xf7, 0xc5, 0x8b, 0xff, + 0xee, 0x16, 0x79, 0xc8, 0x2f, 0x71, 0xbb, 0xdd, 0x62, 0xb1, 0x12, 0x7d, + 0xa0, 0xde, 0x91, 0x76, 0xb1, 0x4e, 0x78, 0x3f, 0x23, 0xbf, 0xf3, 0xef, + 0x31, 0x38, 0xca, 0x77, 0x58, 0xbf, 0x4e, 0x8b, 0x36, 0x58, 0xad, 0xcf, + 0xa3, 0xc8, 0x17, 0xc1, 0xce, 0x80, 0xb1, 0x7b, 0x92, 0x12, 0xc5, 0xe7, + 0x9d, 0xd6, 0x2f, 0xef, 0xce, 0xd2, 0x23, 0xac, 0x54, 0x0f, 0x33, 0xe3, + 0xb7, 0xe9, 0x17, 0xba, 0x76, 0xb1, 0x69, 0xec, 0xf3, 0xbe, 0x45, 0x7f, + 0xa2, 0xe0, 0xa0, 0x52, 0x75, 0x8b, 0x46, 0x8b, 0x16, 0xc5, 0x8b, 0xf3, + 0x7b, 0x92, 0x6a, 0xc5, 0x8b, 0x63, 0x75, 0xb8, 0x8d, 0xf4, 0x94, 0xe9, + 0x62, 0xfe, 0xce, 0xe1, 0x39, 0xe5, 0x8b, 0xff, 0xb5, 0xa6, 0x06, 0x7d, + 0xf5, 0xf6, 0x58, 0xb4, 0x16, 0x2b, 0xad, 0x4c, 0x7a, 0x54, 0x70, 0xa0, + 0x88, 0x78, 0x5c, 0x1a, 0x25, 0xf6, 0xc7, 0x9e, 0x2c, 0x5f, 0xf8, 0x98, + 0xde, 0x30, 0xfe, 0xd0, 0x58, 0xbf, 0xe8, 0x73, 0xe2, 0x92, 0xd8, 0x0b, + 0x17, 0x9c, 0x2e, 0xbd, 0x62, 0xff, 0x0b, 0xdf, 0xc3, 0xb1, 0xd6, 0x2e, + 0xce, 0x2c, 0x5b, 0x4b, 0x15, 0xda, 0x2e, 0xe2, 0x3b, 0x39, 0x1f, 0xcd, + 0x18, 0x5e, 0xff, 0xfc, 0x6e, 0x79, 0xf9, 0xf1, 0x67, 0x80, 0xc3, 0x95, + 0x8b, 0xdf, 0x73, 0xac, 0x5f, 0x9f, 0x63, 0xce, 0xeb, 0x15, 0x87, 0x8f, + 0xe1, 0xda, 0x95, 0x44, 0xf0, 0x24, 0x1c, 0x3e, 0xb4, 0x97, 0xf8, 0x4e, + 0xdd, 0xd7, 0xfd, 0x62, 0xfc, 0xd0, 0xf6, 0xfc, 0x58, 0xbd, 0xec, 0xe8, + 0xb1, 0x7f, 0xe1, 0xb3, 0x05, 0xdf, 0x89, 0xbe, 0xb1, 0x43, 0x44, 0x4b, + 0x15, 0x70, 0x7e, 0xfa, 0x0f, 0xa8, 0x2c, 0x5f, 0xc0, 0x8a, 0x0f, 0xa8, + 0x2c, 0x44, 0x68, 0xef, 0xb3, 0x76, 0xdd, 0x62, 0xfa, 0x4b, 0x34, 0xb1, + 0x77, 0xf3, 0xe7, 0x8b, 0xc2, 0x4b, 0x9f, 0x65, 0x8a, 0xdc, 0xf1, 0x7c, + 0x5b, 0x46, 0xa6, 0x81, 0xda, 0x96, 0xa1, 0x97, 0x7b, 0x6c, 0x09, 0x62, + 0xff, 0x6f, 0x13, 0x9c, 0x4d, 0xc5, 0x8b, 0xec, 0x16, 0xb6, 0x58, 0xba, + 0x63, 0xd6, 0x28, 0x68, 0x93, 0xec, 0x7c, 0xe6, 0xdf, 0x24, 0xbd, 0x22, + 0x8f, 0x58, 0xbd, 0xf7, 0xf2, 0xc5, 0x68, 0xde, 0x86, 0x41, 0x7a, 0x46, + 0x35, 0x8b, 0xb3, 0xa9, 0x62, 0xf8, 0x01, 0x94, 0x16, 0x2c, 0xc4, 0x6f, + 0xbc, 0x35, 0x7e, 0xe7, 0x30, 0x80, 0xb1, 0x40, 0x3c, 0xd2, 0x25, 0xa9, + 0x5c, 0x6c, 0xc5, 0x57, 0x8f, 0x99, 0xa1, 0x97, 0xc7, 0xbf, 0x11, 0x0a, + 0x15, 0x16, 0x89, 0x62, 0xff, 0x84, 0xc1, 0xc5, 0x0c, 0xee, 0x0b, 0x15, + 0xd9, 0xe8, 0x10, 0x9d, 0xf1, 0x37, 0x7c, 0x58, 0xbe, 0xf0, 0x0f, 0x8b, + 0x15, 0xe3, 0xc6, 0x0c, 0x8e, 0xd8, 0xb1, 0x7f, 0xdf, 0x73, 0xcc, 0x7f, + 0xf3, 0x65, 0x8b, 0xf4, 0xbe, 0xcd, 0xe5, 0x8b, 0xc4, 0xdd, 0x98, 0x7c, + 0xbc, 0x3d, 0xa3, 0xa6, 0x6a, 0x06, 0x8f, 0x11, 0xf4, 0x76, 0xba, 0x78, + 0xb1, 0x7f, 0x73, 0xcf, 0xf1, 0x01, 0x62, 0xfa, 0x7f, 0x23, 0x58, 0xbd, + 0x3d, 0xc1, 0x62, 0xb7, 0x44, 0x37, 0x62, 0xf1, 0x17, 0x9c, 0x8a, 0xff, + 0xfe, 0xfe, 0x17, 0xb8, 0x60, 0x70, 0xfe, 0x11, 0x0a, 0x0b, 0x17, 0xf7, + 0xe7, 0x45, 0x30, 0x58, 0xbf, 0xe2, 0xef, 0xd9, 0x09, 0x2d, 0xd6, 0x2c, + 0x68, 0xcf, 0x9c, 0x45, 0xb7, 0xef, 0xb9, 0x36, 0xcb, 0x17, 0xfd, 0x06, + 0xd7, 0x8a, 0x4f, 0xc5, 0x8b, 0xfd, 0x23, 0x9d, 0x0a, 0x40, 0xb1, 0x7d, + 0xd2, 0x73, 0x4b, 0x17, 0x67, 0x6b, 0x15, 0x86, 0xf0, 0x89, 0x2f, 0x63, + 0x47, 0xac, 0x5b, 0x9b, 0xa6, 0x1d, 0x11, 0x41, 0xce, 0x49, 0xbc, 0x31, + 0xfb, 0xff, 0xd3, 0x1e, 0x1e, 0xdc, 0xfe, 0xef, 0xcc, 0x1a, 0xc5, 0xfb, + 0xda, 0x71, 0x6c, 0xb1, 0x52, 0xa8, 0x14, 0xf1, 0x9b, 0xfd, 0x4c, 0x25, + 0x1b, 0x9b, 0xaf, 0x58, 0xbf, 0xfe, 0xfc, 0xf3, 0x3d, 0x3a, 0x68, 0x37, + 0x70, 0x58, 0xbf, 0xef, 0xe3, 0xc1, 0xcd, 0x37, 0x16, 0x2f, 0xf9, 0x83, + 0xc2, 0x17, 0x84, 0x6a, 0xc5, 0x41, 0x1c, 0x23, 0x1c, 0xf2, 0x80, 0x8e, + 0xaf, 0x33, 0x1a, 0xb1, 0x7f, 0xcc, 0xfc, 0x2c, 0x39, 0xdd, 0x62, 0xb4, + 0x7a, 0x9f, 0x1d, 0xba, 0x73, 0xb4, 0x59, 0x85, 0x09, 0x1b, 0xdd, 0x45, + 0x2b, 0x17, 0x07, 0xf5, 0x8b, 0x14, 0x9b, 0x88, 0x0f, 0xdf, 0xd1, 0x73, + 0x53, 0xdf, 0x96, 0x2f, 0xf6, 0xd8, 0x46, 0x42, 0x36, 0xf2, 0xc5, 0xff, + 0xe6, 0x6d, 0x6d, 0xf6, 0xf7, 0xdf, 0x50, 0x58, 0xbf, 0x68, 0x7f, 0x78, + 0x96, 0x2f, 0xe2, 0x9e, 0xe0, 0xe4, 0xb1, 0x7b, 0xf3, 0xa5, 0x81, 0x9a, + 0xdb, 0xfb, 0x1c, 0x8a, 0x46, 0xb1, 0x60, 0x86, 0x8f, 0xac, 0x4b, 0xdd, + 0x5f, 0xe5, 0xb5, 0x29, 0xd5, 0x39, 0x8b, 0x46, 0x6b, 0x7f, 0xcc, 0x59, + 0xef, 0x38, 0x5e, 0x58, 0xbf, 0xe2, 0xcf, 0xf8, 0xb1, 0xa2, 0x58, 0xbf, + 0xfe, 0xc3, 0x88, 0x66, 0x72, 0x74, 0xd0, 0x7f, 0xac, 0x51, 0x88, 0x89, + 0x23, 0x8b, 0xff, 0xff, 0xa2, 0x83, 0x97, 0xa4, 0x1d, 0x5e, 0x73, 0x75, + 0x93, 0xdc, 0x1c, 0xeb, 0x15, 0x29, 0xae, 0x1e, 0x18, 0x44, 0x47, 0x52, + 0xc9, 0xa7, 0xc8, 0x63, 0x6e, 0x80, 0xf2, 0xb2, 0x75, 0x1e, 0xcb, 0x36, + 0x14, 0x79, 0xe2, 0x8e, 0x42, 0xff, 0xe1, 0xe7, 0xbb, 0x98, 0xb7, 0xfc, + 0xe9, 0x62, 0xa3, 0x67, 0x63, 0x85, 0x30, 0xd5, 0xd9, 0xb6, 0x15, 0xb8, + 0x60, 0xe3, 0x2d, 0xc8, 0x69, 0x9a, 0x4f, 0xbc, 0x39, 0x9e, 0x11, 0x31, + 0x11, 0xe8, 0x93, 0xf0, 0xb8, 0x62, 0x80, 0x46, 0xa7, 0xc9, 0xee, 0xef, + 0x52, 0xe7, 0xc5, 0x08, 0xfb, 0xff, 0xff, 0xf1, 0xa1, 0x46, 0x92, 0x3e, + 0xb3, 0x41, 0x6c, 0x6c, 0xc6, 0x93, 0x90, 0x8d, 0x18, 0xc3, 0x3f, 0x1c, + 0xb1, 0x7e, 0xeb, 0xbe, 0xe1, 0x9e, 0x58, 0xbf, 0xbb, 0xc3, 0x9d, 0xe3, + 0xd6, 0x2f, 0xe2, 0xc8, 0xa1, 0x3d, 0xac, 0x5f, 0xfb, 0xb8, 0x67, 0x9f, + 0xa4, 0x96, 0xeb, 0x15, 0x03, 0xf1, 0xf1, 0x7d, 0xfd, 0x22, 0xed, 0xfb, + 0xea, 0x58, 0xbf, 0x60, 0x59, 0xdf, 0x96, 0x28, 0xc3, 0xdd, 0x73, 0x3b, + 0xff, 0xd2, 0x42, 0x33, 0x3d, 0x93, 0xf9, 0x89, 0x62, 0xff, 0xcd, 0x2e, + 0x76, 0xd9, 0xf0, 0x25, 0x8b, 0xfd, 0xdc, 0x30, 0x7f, 0xcd, 0x96, 0x2f, + 0xf3, 0x9f, 0x0a, 0x42, 0x95, 0x8b, 0xfd, 0x9d, 0xb7, 0x70, 0x11, 0xd6, + 0x2f, 0xed, 0xff, 0x9b, 0x64, 0x7a, 0xc5, 0x18, 0x89, 0xbf, 0x99, 0x31, + 0xb5, 0xfe, 0x92, 0x1c, 0xc7, 0xb7, 0x52, 0xc5, 0x41, 0x58, 0x2f, 0x70, + 0xa3, 0xd3, 0xff, 0xc8, 0x80, 0x94, 0x47, 0xde, 0x86, 0x8f, 0x43, 0x0b, + 0xd1, 0xbc, 0x6d, 0xda, 0xc5, 0xfb, 0xb3, 0x03, 0x9e, 0x2c, 0x5e, 0x98, + 0x71, 0x62, 0xdc, 0x58, 0xb7, 0xe4, 0xf6, 0xfe, 0x58, 0x18, 0xed, 0xfa, + 0x75, 0xdc, 0x38, 0xb1, 0x7f, 0xd3, 0xb1, 0x8d, 0xd5, 0xd4, 0xc0, 0x58, + 0xbf, 0x9a, 0x00, 0x72, 0xf2, 0xc5, 0xfd, 0xf7, 0x89, 0xfb, 0xe2, 0xc5, + 0xff, 0xff, 0x6a, 0x26, 0xfb, 0xf2, 0x62, 0x7f, 0x7b, 0x3e, 0x07, 0xe8, + 0xb1, 0x51, 0xb2, 0x7d, 0x73, 0x08, 0x4d, 0x8d, 0x74, 0x54, 0x74, 0x16, + 0x2d, 0x11, 0x85, 0xff, 0xc2, 0xd6, 0x6d, 0x3c, 0x98, 0x4e, 0x96, 0x2f, + 0xfb, 0x5c, 0xcd, 0x60, 0xdc, 0xd5, 0x8b, 0xda, 0xce, 0x2c, 0x5f, 0x9c, + 0xba, 0x64, 0x16, 0x2f, 0x63, 0xec, 0xb1, 0x7f, 0xd9, 0x17, 0xe7, 0xb8, + 0x9b, 0x75, 0x8a, 0x94, 0x6d, 0x1a, 0x74, 0x71, 0xdf, 0x94, 0xf0, 0x76, + 0xfe, 0x9d, 0xb3, 0xd8, 0x75, 0x8b, 0xff, 0x8f, 0x2e, 0x5e, 0xfb, 0x45, + 0xf7, 0x58, 0xbf, 0x06, 0x67, 0xf9, 0x8b, 0x17, 0xfe, 0x21, 0x6f, 0xfc, + 0x3c, 0x4d, 0xba, 0xc5, 0xc2, 0xd2, 0xc5, 0x61, 0xed, 0x47, 0x21, 0x54, + 0x15, 0x42, 0x3c, 0x63, 0xfa, 0x4a, 0x62, 0xe0, 0x22, 0x72, 0x10, 0xb7, + 0x9e, 0x46, 0xb1, 0x7f, 0xef, 0xb4, 0x39, 0x2f, 0xb3, 0x79, 0x62, 0x8e, + 0x7b, 0x64, 0x39, 0x70, 0x23, 0xd6, 0x2f, 0x39, 0x79, 0x62, 0xff, 0x11, + 0xbf, 0x93, 0x9c, 0x96, 0x2f, 0xe8, 0xf7, 0x9e, 0xa1, 0x79, 0x62, 0xfa, + 0x2c, 0xcd, 0xd6, 0x2f, 0xdd, 0xf0, 0x0f, 0xe5, 0x8a, 0x93, 0xce, 0x72, + 0x4b, 0xc5, 0x9d, 0x4b, 0x15, 0x29, 0xa6, 0xc0, 0x84, 0x63, 0x78, 0x38, + 0xe6, 0x9f, 0x84, 0x10, 0x88, 0x2f, 0xf9, 0xfb, 0xe3, 0xcf, 0x6d, 0xb2, + 0xc5, 0xff, 0x9b, 0x73, 0x24, 0x39, 0xd9, 0xb8, 0xb1, 0x7f, 0x7a, 0x40, + 0xdd, 0xf1, 0x62, 0xff, 0xc5, 0x9a, 0xd4, 0xb7, 0x98, 0xd5, 0x8b, 0xc7, + 0x6f, 0x2c, 0x5f, 0xb3, 0x4e, 0x7e, 0x2c, 0x5e, 0x69, 0xed, 0x62, 0xa4, + 0xf1, 0x4e, 0x51, 0x5b, 0x26, 0xdb, 0xd9, 0xdc, 0x48, 0x5a, 0x2f, 0x23, + 0xe0, 0x98, 0xaf, 0xf7, 0xb8, 0xfd, 0x34, 0xfc, 0x58, 0xb1, 0xd6, 0x29, + 0x62, 0xb0, 0xbe, 0x61, 0x2b, 0xef, 0x7d, 0xe2, 0x58, 0xbf, 0x9f, 0x41, + 0x94, 0x25, 0x62, 0xa4, 0xf4, 0xa0, 0x49, 0x43, 0x44, 0x88, 0x4e, 0x17, + 0x3c, 0x16, 0x2b, 0x13, 0x20, 0x78, 0x72, 0x91, 0x25, 0xff, 0xee, 0x36, + 0x74, 0x7f, 0x43, 0x0d, 0x37, 0x16, 0x2e, 0x9d, 0xd6, 0x2f, 0xfb, 0x92, + 0x72, 0x9e, 0xe7, 0x8b, 0x14, 0x69, 0xe8, 0xf0, 0x62, 0xff, 0xb2, 0x27, + 0x88, 0x5d, 0x42, 0xe2, 0xc5, 0x99, 0x62, 0xbe, 0x7a, 0x1e, 0x3f, 0xbf, + 0xa6, 0x2c, 0x21, 0x62, 0xc5, 0xda, 0x35, 0x62, 0xa4, 0xf1, 0x9c, 0xb6, + 0xfb, 0xcf, 0x3d, 0xac, 0x5f, 0x66, 0xd3, 0x12, 0xc5, 0x4a, 0x68, 0x4e, + 0xe6, 0x4d, 0x1c, 0x20, 0x11, 0x1d, 0xff, 0x4c, 0x53, 0xef, 0xe6, 0xb7, + 0x58, 0xbf, 0xfd, 0x3d, 0x98, 0x28, 0x9b, 0xbe, 0x7f, 0x3c, 0xb1, 0x7b, + 0xf3, 0x12, 0xc5, 0x76, 0x8a, 0x8f, 0x9d, 0xf5, 0x27, 0xdf, 0xf7, 0xda, + 0x47, 0xf9, 0x3c, 0xac, 0x5f, 0xec, 0x1b, 0xc9, 0x39, 0xd6, 0x2a, 0x51, + 0x3a, 0xe6, 0x9f, 0x38, 0xa8, 0x27, 0x77, 0xc8, 0xe3, 0x6f, 0x0a, 0x27, + 0x58, 0xbf, 0xb6, 0x10, 0x3d, 0x9b, 0xac, 0x5c, 0xee, 0xb1, 0x51, 0xe7, + 0xcb, 0xa1, 0xe2, 0x31, 0xbf, 0xff, 0x1d, 0xc7, 0x83, 0x9e, 0xa1, 0x31, + 0xbd, 0xc9, 0xd6, 0x2f, 0xdf, 0x6f, 0x7c, 0x35, 0x8b, 0x9b, 0x65, 0x8b, + 0xf9, 0x8f, 0x9d, 0x1b, 0x4b, 0x15, 0xb1, 0xe3, 0x9c, 0x62, 0xff, 0xb3, + 0x72, 0x63, 0x43, 0x9d, 0xd6, 0x2f, 0x10, 0xbb, 0x58, 0xbf, 0xf4, 0x4f, + 0xf9, 0xee, 0x13, 0x14, 0xac, 0x56, 0x27, 0x13, 0xba, 0xd3, 0xb8, 0xfc, + 0x8d, 0x8f, 0x04, 0x3d, 0x7a, 0x7c, 0x75, 0x8b, 0xff, 0x79, 0x8d, 0x29, + 0xf7, 0xd8, 0xeb, 0x17, 0xfd, 0x3f, 0x2c, 0xe8, 0xfa, 0x65, 0x8b, 0xfb, + 0xf8, 0x7c, 0x2d, 0x96, 0x2f, 0xff, 0x83, 0x73, 0x98, 0x69, 0x0b, 0x9d, + 0xee, 0xfd, 0xac, 0x58, 0xeb, 0x15, 0x27, 0xd3, 0xc5, 0x7a, 0x3a, 0x69, + 0xac, 0x3a, 0x47, 0xfc, 0x39, 0xea, 0x84, 0xbd, 0xf9, 0x9c, 0x85, 0x05, + 0x8b, 0xfb, 0x69, 0x88, 0xc0, 0x79, 0x62, 0xdc, 0x30, 0xf6, 0x44, 0x4f, + 0x7e, 0x1b, 0x14, 0xfd, 0x62, 0xff, 0x7a, 0x47, 0x3e, 0xc3, 0xac, 0x5f, + 0xee, 0x8f, 0xac, 0xe8, 0xda, 0x58, 0xbf, 0xa1, 0x3d, 0xfb, 0x3e, 0xb1, + 0x7f, 0xfb, 0xdc, 0x70, 0x4c, 0x39, 0x99, 0xdf, 0x96, 0x2a, 0x51, 0xc9, + 0x86, 0x71, 0x1b, 0xf0, 0xbe, 0xbb, 0x4d, 0xc3, 0xe5, 0x21, 0x46, 0x17, + 0x7f, 0xb3, 0x7c, 0x29, 0xc0, 0x96, 0x2f, 0xf8, 0x73, 0xf1, 0xbf, 0x49, + 0x1a, 0xc5, 0xf7, 0x4c, 0xf7, 0x16, 0x2f, 0xe9, 0x88, 0xf2, 0x39, 0x58, + 0xbf, 0xf9, 0xbe, 0xd1, 0x7e, 0x7b, 0xf4, 0xfd, 0x62, 0x8e, 0x7e, 0x80, + 0x2e, 0xbf, 0x45, 0x8f, 0xd4, 0x35, 0x8a, 0xc4, 0x73, 0xbc, 0x26, 0x58, + 0x8a, 0xff, 0xfc, 0xd1, 0x70, 0x45, 0xed, 0x64, 0xf7, 0x07, 0x3a, 0xc5, + 0x4a, 0x75, 0x7f, 0x8c, 0x88, 0x23, 0x2b, 0xff, 0xf8, 0x36, 0x27, 0xed, + 0xe2, 0x9e, 0xa1, 0x06, 0x2e, 0x79, 0x62, 0xff, 0xd3, 0xee, 0x33, 0x8c, + 0x5e, 0xe2, 0xc5, 0x4a, 0xe8, 0x4b, 0xca, 0x1a, 0xf9, 0xcf, 0x23, 0xde, + 0x11, 0xb8, 0x4c, 0x57, 0xec, 0xee, 0x1f, 0x75, 0x8b, 0xff, 0xf8, 0xcc, + 0xd4, 0xf0, 0x98, 0xde, 0x4e, 0xb4, 0xfd, 0x16, 0x2f, 0xfe, 0x72, 0xcf, + 0x49, 0xcc, 0xea, 0xe9, 0xe5, 0x8b, 0xee, 0xa2, 0x16, 0xcb, 0x14, 0x62, + 0x3e, 0x36, 0x29, 0x8f, 0x5e, 0x3a, 0x55, 0xfb, 0xef, 0x13, 0xec, 0xb1, + 0x76, 0xa0, 0xb1, 0x4e, 0x78, 0x4c, 0x55, 0x69, 0x58, 0xae, 0x1b, 0x1f, + 0x10, 0x5f, 0xf3, 0xe9, 0xf6, 0x8a, 0x02, 0x35, 0x62, 0xc0, 0x58, 0xad, + 0x8f, 0x3e, 0x3c, 0xf6, 0xfd, 0xe7, 0x28, 0x4a, 0xc5, 0xfd, 0xdc, 0x30, + 0x5a, 0xd9, 0x62, 0xff, 0xf6, 0xb5, 0x25, 0x86, 0xbf, 0xff, 0x81, 0xac, + 0x56, 0x22, 0x8d, 0xc9, 0xc4, 0x63, 0x7f, 0xfd, 0x84, 0x07, 0x1b, 0xeb, + 0x58, 0x09, 0x82, 0xc5, 0xd3, 0x05, 0x8a, 0x39, 0xf2, 0x92, 0x75, 0x4a, + 0xaa, 0x2c, 0x85, 0xab, 0xb8, 0x6a, 0x19, 0x2d, 0x09, 0x3b, 0xfc, 0xde, + 0x63, 0xb9, 0xe5, 0x62, 0xfe, 0x73, 0x5f, 0xcd, 0xf5, 0x8b, 0xdb, 0xfe, + 0x56, 0x2e, 0xd4, 0xac, 0x5f, 0xff, 0xce, 0x77, 0x8f, 0xc3, 0xbf, 0x66, + 0x34, 0x35, 0x9c, 0x58, 0xa3, 0x11, 0xe9, 0x03, 0x2e, 0xcb, 0xa2, 0x1e, + 0xf8, 0xbd, 0xfa, 0x5f, 0xdd, 0x64, 0x6b, 0x58, 0xbf, 0x33, 0x8e, 0x49, + 0x62, 0xe9, 0x12, 0xc5, 0xfd, 0xc0, 0xfa, 0xba, 0xa6, 0x3d, 0x62, 0xa5, + 0x1e, 0xdf, 0x4d, 0x23, 0x3e, 0x13, 0x08, 0x5e, 0xfc, 0x21, 0x06, 0xf1, + 0xeb, 0x17, 0x75, 0x4a, 0xc5, 0xc5, 0xba, 0xc5, 0x49, 0xb2, 0x71, 0xab, + 0xe8, 0x85, 0xcf, 0x2c, 0x5f, 0xe1, 0x39, 0x67, 0x39, 0x8b, 0x15, 0xb1, + 0xfb, 0x76, 0x3e, 0x72, 0x5b, 0xb3, 0x75, 0x8b, 0xfe, 0x6f, 0x7e, 0x78, + 0x21, 0xe2, 0xc5, 0xfb, 0x21, 0x25, 0xba, 0xc5, 0xf7, 0xc0, 0xde, 0x58, + 0xb7, 0xd6, 0x29, 0x8d, 0xa8, 0x88, 0xef, 0xf1, 0x67, 0xa6, 0x02, 0xd2, + 0xc5, 0x1d, 0x30, 0x12, 0x18, 0xf1, 0xcf, 0x45, 0xde, 0xa2, 0x0b, 0xf0, + 0x18, 0xed, 0xda, 0xc5, 0xff, 0x8e, 0xfc, 0xfc, 0xbe, 0x85, 0x1e, 0xb1, + 0x5d, 0x9f, 0x5b, 0x94, 0xd1, 0x8a, 0xb8, 0xe6, 0x1a, 0xaf, 0x19, 0x93, + 0x42, 0xea, 0xf8, 0x45, 0x27, 0x58, 0xbf, 0xff, 0xd3, 0xd9, 0x09, 0xbd, + 0x91, 0x3e, 0xc4, 0xde, 0x63, 0xac, 0x5f, 0xb8, 0xfd, 0x24, 0x6b, 0x15, + 0xda, 0x2b, 0x7e, 0x44, 0x4c, 0x37, 0xfc, 0x07, 0x2f, 0x4f, 0x05, 0xf5, + 0x8b, 0xf4, 0x87, 0xc9, 0xe2, 0xc5, 0xfe, 0xd6, 0xcf, 0xbb, 0xeb, 0x16, + 0x2f, 0x13, 0x9a, 0xb1, 0x7e, 0x6d, 0x6a, 0x76, 0x58, 0xbb, 0x60, 0x2c, + 0x5f, 0xde, 0x7d, 0x3f, 0x84, 0xb1, 0x69, 0x31, 0x32, 0x4d, 0x8e, 0x70, + 0xa4, 0xe6, 0xbe, 0x1d, 0x8e, 0x29, 0x0c, 0x66, 0xfd, 0xf7, 0xd6, 0x76, + 0xb1, 0x7e, 0x0f, 0xf9, 0xdf, 0x16, 0x2e, 0x68, 0xf5, 0x8a, 0xdc, 0xfb, + 0x84, 0x52, 0x19, 0x5d, 0xbe, 0xb1, 0x7f, 0xff, 0x4f, 0x37, 0xfb, 0xff, + 0x3a, 0x63, 0xce, 0xc2, 0x1a, 0xc5, 0xff, 0xff, 0xf4, 0xf8, 0x9b, 0x77, + 0xe4, 0x4f, 0xad, 0xe7, 0x9e, 0x9e, 0xe4, 0x3c, 0xe2, 0xc5, 0xfe, 0xe6, + 0x6a, 0x7a, 0x4c, 0x7a, 0xc5, 0xfb, 0x0a, 0x7b, 0xe2, 0xc5, 0xc1, 0x9d, + 0x62, 0xb6, 0x4d, 0xa4, 0xd1, 0x2d, 0x2f, 0x7a, 0x10, 0x1d, 0x0e, 0x02, + 0x28, 0xbf, 0xdf, 0xce, 0xe7, 0x4e, 0x75, 0x8b, 0xe2, 0x9e, 0xf8, 0xb1, + 0x7f, 0xd3, 0xbe, 0xb3, 0x98, 0xe3, 0x58, 0xbf, 0xfc, 0xfa, 0xc8, 0x9f, + 0x5d, 0x4e, 0x1e, 0x41, 0x62, 0xb4, 0x88, 0x7e, 0x1c, 0xde, 0x93, 0xca, + 0xc5, 0x62, 0x3a, 0x75, 0x0a, 0xaf, 0x11, 0xde, 0x3b, 0xf1, 0x62, 0xff, + 0x1c, 0x98, 0xd7, 0xf8, 0x96, 0x2f, 0xbe, 0xec, 0x05, 0x8b, 0x49, 0x87, + 0xad, 0xe3, 0x4b, 0xff, 0x49, 0xba, 0x17, 0x50, 0xe7, 0x92, 0xb1, 0x7f, + 0xff, 0xff, 0xdc, 0xcf, 0x7d, 0x8f, 0xcd, 0x69, 0xfb, 0xf3, 0x31, 0xb9, + 0x91, 0x0b, 0xd2, 0x17, 0x72, 0xb1, 0x7f, 0x4f, 0xf7, 0x6e, 0x3a, 0xc5, + 0xf4, 0x59, 0x1d, 0x8b, 0x15, 0xe3, 0xd4, 0x11, 0x75, 0xdf, 0x65, 0x8a, + 0xe2, 0x64, 0xbe, 0x87, 0x67, 0x42, 0x2b, 0xfe, 0xef, 0x84, 0xe7, 0xf6, + 0x47, 0xac, 0x5d, 0x9a, 0x58, 0xa9, 0x3d, 0x4f, 0x9e, 0xdf, 0xde, 0x26, + 0x06, 0x12, 0xc5, 0xd2, 0x6a, 0xc5, 0xf3, 0x03, 0x09, 0x62, 0xa2, 0x37, + 0x24, 0x31, 0x46, 0x22, 0x1b, 0xcc, 0xb7, 0xa4, 0xe1, 0x2c, 0x54, 0xae, + 0x95, 0x8d, 0x8b, 0x23, 0x1d, 0x34, 0xd3, 0x77, 0x3e, 0xca, 0x1a, 0x36, + 0x8f, 0x42, 0x30, 0x50, 0xa7, 0x08, 0x92, 0xff, 0x0b, 0x9f, 0x9e, 0xf4, + 0xeb, 0x17, 0xf3, 0x76, 0xfd, 0x4e, 0x35, 0x8a, 0xd8, 0xf9, 0xa0, 0x6b, + 0x7f, 0x08, 0x3d, 0xfe, 0xf1, 0xeb, 0x17, 0xfe, 0xfb, 0xf8, 0x31, 0x77, + 0xe6, 0xd2, 0xc5, 0xf0, 0x1b, 0xbe, 0x2c, 0x5c, 0x10, 0x4b, 0x15, 0xc3, + 0x7c, 0x11, 0x25, 0xf7, 0xdb, 0x3e, 0x91, 0x18, 0x68, 0xaf, 0xff, 0xc1, + 0xb9, 0xc5, 0xc9, 0x0d, 0xcf, 0x31, 0x48, 0x4b, 0x17, 0x3e, 0xcb, 0x17, + 0xfe, 0xdd, 0xb4, 0xdf, 0xee, 0x19, 0xe5, 0x8a, 0x94, 0xf8, 0x30, 0x8f, + 0xb3, 0x47, 0x85, 0x13, 0x1a, 0xf4, 0x59, 0x0c, 0x62, 0xf4, 0x8b, 0xb5, + 0x8b, 0xf8, 0x44, 0xfe, 0x6d, 0xd6, 0x2b, 0x73, 0xcc, 0x00, 0xf5, 0xf8, + 0x3c, 0x3b, 0xe9, 0x62, 0xfc, 0xfa, 0xf6, 0x6e, 0xb1, 0x7e, 0xdd, 0xf9, + 0xf7, 0x58, 0xbf, 0xbb, 0x7d, 0x8e, 0xfc, 0x58, 0xb8, 0xec, 0xb1, 0x7f, + 0xbd, 0x25, 0xbc, 0x68, 0x03, 0xac, 0x54, 0xa2, 0x07, 0xe6, 0x02, 0x17, + 0xbd, 0xf9, 0x02, 0xc5, 0xee, 0xae, 0xa9, 0x58, 0xbf, 0xe1, 0xfd, 0xf4, + 0xfd, 0xc5, 0x2b, 0x14, 0xc7, 0xbc, 0x22, 0x3b, 0xff, 0xf9, 0xc5, 0xd7, + 0xc2, 0x4c, 0x2c, 0xf0, 0x80, 0x76, 0x82, 0xc5, 0xba, 0x2c, 0x5f, 0xff, + 0x6b, 0x58, 0x00, 0x4c, 0x34, 0xc5, 0x30, 0x58, 0xbf, 0x6c, 0xc5, 0xee, + 0x2c, 0x5f, 0xde, 0x8e, 0xf4, 0xf7, 0x05, 0x8a, 0x8d, 0xd1, 0x7f, 0x82, + 0x8c, 0x9e, 0x22, 0x9a, 0x95, 0x69, 0x58, 0x46, 0x69, 0x4f, 0x65, 0x2f, + 0x0a, 0xa6, 0x2f, 0x27, 0xbe, 0x10, 0xfa, 0x32, 0x0b, 0xff, 0xfb, 0xf8, + 0x6b, 0x4b, 0xc7, 0x4f, 0x7d, 0x5b, 0xfd, 0xbb, 0x58, 0xbe, 0xd3, 0xef, + 0x2b, 0x17, 0xff, 0xff, 0xff, 0x17, 0x5e, 0x3c, 0x0f, 0xae, 0xb9, 0x1a, + 0x8a, 0x63, 0x40, 0x9f, 0x6e, 0xa3, 0x41, 0x1a, 0x47, 0x78, 0x71, 0xc6, + 0x19, 0xf8, 0xe5, 0x8b, 0xff, 0xfd, 0x3c, 0x33, 0x98, 0x76, 0xef, 0xed, + 0xd4, 0xe4, 0xdd, 0xac, 0x5f, 0xe9, 0x14, 0x33, 0xcf, 0xc5, 0x8a, 0x1a, + 0x7e, 0x18, 0xc9, 0xd9, 0x19, 0xe1, 0xa3, 0xe6, 0x5b, 0xdf, 0x32, 0x3d, + 0x62, 0xf1, 0x6e, 0xeb, 0x17, 0x8b, 0x36, 0x58, 0xbe, 0xe6, 0x9c, 0x25, + 0x8b, 0x7e, 0x4f, 0x05, 0x87, 0x6a, 0x51, 0x4c, 0xe4, 0x4c, 0xbd, 0x7f, + 0xff, 0xf7, 0x89, 0x80, 0x4f, 0x26, 0x4f, 0x49, 0xd7, 0x1f, 0xd2, 0x5b, + 0x2c, 0x5e, 0xdf, 0x34, 0xb1, 0x7d, 0xbf, 0xdf, 0x4b, 0x17, 0x4f, 0x8c, + 0x45, 0xa3, 0xb9, 0x30, 0xf5, 0xfe, 0xfe, 0x1b, 0xfc, 0xee, 0x0b, 0x17, + 0xdb, 0x30, 0x89, 0x62, 0xfd, 0x3d, 0xfd, 0xf4, 0xb1, 0x5b, 0xa2, 0x09, + 0xcd, 0x98, 0x8e, 0xfd, 0xa1, 0x6c, 0x2d, 0x96, 0x2f, 0xde, 0x11, 0xc5, + 0xe5, 0x8b, 0xdb, 0x3c, 0xac, 0x54, 0x9e, 0x3e, 0x15, 0x5f, 0x1e, 0x5e, + 0x39, 0x62, 0xff, 0x49, 0x7d, 0x80, 0x28, 0x96, 0x2a, 0x51, 0xd9, 0xf7, + 0x31, 0x10, 0x75, 0x12, 0xd4, 0x6e, 0xee, 0xff, 0x7a, 0xee, 0x14, 0x73, + 0x2c, 0xdb, 0x69, 0x4d, 0x50, 0x95, 0xe4, 0x39, 0x41, 0x59, 0x1e, 0xa1, + 0xb1, 0xbd, 0xee, 0x67, 0xdc, 0xb9, 0xb7, 0x84, 0x7c, 0x7c, 0x77, 0x51, + 0x4f, 0x56, 0x6a, 0x70, 0x00, 0xf2, 0x90, 0x7f, 0x2c, 0xad, 0xa1, 0xf4, + 0x08, 0xd5, 0x3a, 0xf8, 0x6e, 0x94, 0xf6, 0x2f, 0x25, 0x75, 0xfa, 0x70, + 0x00, 0x52, 0x9e, 0x3a, 0x43, 0xda, 0x3a, 0x1c, 0x21, 0xc2, 0xf3, 0xaa, + 0x31, 0xbb, 0xff, 0xff, 0x74, 0xdb, 0x91, 0xaf, 0x68, 0xd3, 0xac, 0xd4, + 0x45, 0xec, 0x19, 0x86, 0x7e, 0x39, 0x62, 0xf1, 0x46, 0xf0, 0x58, 0xae, + 0xbb, 0x45, 0x67, 0xe1, 0x15, 0x7d, 0xac, 0xf6, 0x2c, 0x5f, 0xed, 0xfe, + 0xfe, 0xe3, 0x76, 0xb1, 0x7b, 0x35, 0xd1, 0x62, 0xe8, 0xda, 0x36, 0x58, + 0xbe, 0xe1, 0x0b, 0xeb, 0x15, 0xd6, 0x1e, 0x2e, 0x11, 0x5f, 0xa4, 0x7f, + 0x9e, 0x2c, 0x5e, 0x07, 0x82, 0x58, 0xbd, 0xa0, 0xe2, 0x58, 0xb8, 0xff, + 0x58, 0xa7, 0x37, 0x1c, 0x20, 0xbf, 0xf1, 0x00, 0xed, 0x02, 0x9f, 0x71, + 0x62, 0xec, 0xc5, 0x8b, 0xed, 0xfe, 0xe1, 0xac, 0x54, 0x68, 0xa8, 0xa7, + 0x0b, 0xcd, 0x22, 0x73, 0x68, 0xf6, 0x4d, 0x13, 0x1c, 0xa3, 0xea, 0xec, + 0x41, 0xd7, 0x9f, 0x06, 0x2d, 0x7e, 0x8a, 0x62, 0xfc, 0xac, 0x5f, 0xfe, + 0x2f, 0x70, 0x3f, 0x39, 0x0a, 0x19, 0xc5, 0x8b, 0xff, 0x63, 0x82, 0x41, + 0x0c, 0xd4, 0xac, 0x5f, 0x98, 0xbd, 0xc0, 0x2c, 0x5b, 0xe4, 0x7c, 0xbd, + 0x47, 0xb7, 0xfd, 0xd5, 0xc2, 0x68, 0x8a, 0x4e, 0xb1, 0x69, 0x58, 0xa1, + 0x1e, 0x68, 0x67, 0x97, 0xd9, 0xa6, 0x82, 0xc5, 0xfe, 0xc0, 0xf4, 0x03, + 0xbf, 0x16, 0x2f, 0xef, 0xe4, 0x4c, 0x5b, 0x2c, 0x5e, 0x08, 0x20, 0x92, + 0x2f, 0xa1, 0xec, 0xdd, 0x22, 0x30, 0xd0, 0xdf, 0xb0, 0x6e, 0x0e, 0x2e, + 0x8f, 0xe2, 0x8c, 0x45, 0xe6, 0x94, 0x08, 0xde, 0xee, 0x41, 0x62, 0xf7, + 0x18, 0x0b, 0x15, 0x26, 0xd7, 0xb1, 0x8b, 0x74, 0x58, 0xb4, 0x72, 0xc5, + 0x6e, 0x6a, 0x4e, 0x29, 0x7f, 0x3e, 0x9e, 0x12, 0x6a, 0xc5, 0x61, 0xe8, + 0x78, 0x8a, 0xa5, 0x5d, 0x3e, 0x15, 0x3c, 0x2c, 0x34, 0xee, 0x72, 0x3f, + 0x91, 0x34, 0x3c, 0x40, 0xca, 0x50, 0x9a, 0xbe, 0x38, 0xf0, 0x96, 0x2e, + 0xf7, 0x16, 0x2f, 0xff, 0x0f, 0x30, 0xd3, 0x33, 0xcf, 0xcf, 0xba, 0xc5, + 0xfe, 0xf7, 0xe7, 0xdc, 0xfb, 0xac, 0x5d, 0x0d, 0x96, 0x2f, 0x82, 0xe6, + 0x06, 0xb1, 0x78, 0xd1, 0x6c, 0xb1, 0x73, 0x41, 0x62, 0xfc, 0x66, 0x44, + 0xfb, 0x2c, 0x51, 0x88, 0xd4, 0x81, 0xa6, 0x0c, 0x9a, 0x4a, 0x72, 0x0e, + 0x0b, 0xdf, 0xff, 0xbe, 0x59, 0xdc, 0x0b, 0x0d, 0x7f, 0xff, 0x23, 0xd6, + 0x2f, 0xed, 0x61, 0x0a, 0x74, 0xb1, 0x4b, 0x15, 0xb1, 0xb9, 0xe1, 0x6d, + 0xcc, 0x6a, 0xc5, 0xfa, 0x1f, 0x92, 0xd9, 0x22, 0xe9, 0x82, 0xc5, 0xe0, + 0x34, 0x16, 0x2b, 0xb3, 0xdd, 0xf9, 0x48, 0x62, 0xf4, 0xc8, 0xa6, 0xf3, + 0xad, 0xff, 0xb3, 0xb8, 0x3e, 0x11, 0x60, 0xd6, 0x2f, 0x8e, 0x2e, 0xfc, + 0xb1, 0x7b, 0xf3, 0xd1, 0x62, 0xe9, 0x02, 0xc5, 0x61, 0xb6, 0x0c, 0x7e, + 0xb6, 0x3f, 0xce, 0x2d, 0xde, 0xeb, 0xe7, 0x4b, 0x15, 0x2b, 0x81, 0x3b, + 0x0c, 0x77, 0x18, 0xfb, 0xac, 0x6a, 0x12, 0x45, 0x0c, 0x8e, 0x11, 0x7a, + 0x17, 0x22, 0x23, 0xbf, 0xbe, 0xe3, 0x96, 0xd2, 0xc5, 0xee, 0xa1, 0x6c, + 0xb1, 0x5b, 0x9e, 0x7f, 0x51, 0x6d, 0xff, 0xd0, 0x72, 0x06, 0xb3, 0xa4, + 0x97, 0x96, 0x2f, 0x3f, 0x1d, 0x62, 0xce, 0xb1, 0x7c, 0xc1, 0xb0, 0xd6, + 0x2f, 0x4e, 0x8d, 0x58, 0xb4, 0x31, 0x16, 0x7f, 0x45, 0x61, 0xc1, 0x08, + 0x84, 0x47, 0x7f, 0xff, 0x87, 0xfc, 0xf7, 0x98, 0xb7, 0xe4, 0xe9, 0xa2, + 0x7f, 0xac, 0x5f, 0x83, 0xff, 0xf2, 0x25, 0x8b, 0xe0, 0xfe, 0xfe, 0x58, + 0xa3, 0x0f, 0x3f, 0x85, 0x74, 0x34, 0xff, 0x3b, 0x86, 0xcb, 0xa7, 0x82, + 0x16, 0x37, 0xc1, 0xce, 0x80, 0xb1, 0x7e, 0x9c, 0xe9, 0x23, 0x58, 0xa3, + 0x4f, 0x37, 0x72, 0x4b, 0xff, 0xee, 0xfc, 0xe1, 0x07, 0xe7, 0x21, 0x43, + 0x38, 0xb1, 0x7f, 0xc5, 0x21, 0x71, 0xcb, 0xb8, 0x2c, 0x5f, 0xfc, 0x1f, + 0x60, 0x8a, 0x0f, 0xee, 0x06, 0x75, 0x8b, 0xff, 0xff, 0x70, 0x0f, 0xa1, + 0xe1, 0x7d, 0xf7, 0xfb, 0xf8, 0xd9, 0x28, 0x2c, 0x5e, 0xeb, 0xe3, 0x9d, + 0x62, 0xe9, 0xdd, 0x62, 0xb4, 0x9d, 0x37, 0xc9, 0x09, 0x4f, 0x87, 0x5e, + 0x4b, 0x13, 0x6f, 0x42, 0x5b, 0xfe, 0x23, 0x78, 0xfd, 0x24, 0xbc, 0xb1, + 0x7f, 0xf7, 0xda, 0x2c, 0x1f, 0xdf, 0xa6, 0x44, 0xb1, 0x52, 0x88, 0x37, + 0x3b, 0xbc, 0x1c, 0xc7, 0xac, 0x5d, 0xf7, 0x58, 0xb0, 0x16, 0x28, 0xd3, + 0x52, 0x42, 0xf5, 0xb1, 0xf5, 0xba, 0x55, 0xe2, 0x17, 0x96, 0x2f, 0xf7, + 0xde, 0x41, 0xb7, 0x0d, 0x58, 0xa8, 0x8f, 0x4f, 0xc3, 0xb7, 0xe2, 0x90, + 0xb0, 0x96, 0x2f, 0xfb, 0xfd, 0xc9, 0xb1, 0x42, 0x63, 0xd6, 0x2d, 0xc1, + 0x9f, 0x3e, 0x13, 0xd6, 0x93, 0x26, 0x27, 0x5f, 0x42, 0x2a, 0x96, 0x2f, + 0xf6, 0xff, 0x70, 0x1c, 0x51, 0xeb, 0x17, 0xef, 0x71, 0xf0, 0xd5, 0x8a, + 0x30, 0xf8, 0x83, 0x39, 0xbf, 0x43, 0x4f, 0x27, 0x58, 0xbf, 0xdb, 0xf9, + 0x9f, 0x5a, 0xc5, 0x8b, 0xde, 0xcd, 0xd6, 0x2f, 0x07, 0xd8, 0x4b, 0x15, + 0xb2, 0x65, 0xa3, 0x6e, 0xec, 0x93, 0x45, 0x00, 0x34, 0xe0, 0xf5, 0x4b, + 0x25, 0xcb, 0x25, 0x70, 0x3c, 0xa3, 0xbf, 0xc3, 0xa5, 0xa3, 0xb2, 0x14, + 0x6c, 0x57, 0xbf, 0xd4, 0x35, 0x8b, 0xff, 0x48, 0x39, 0xa9, 0xee, 0x0e, + 0x75, 0x8b, 0xce, 0x09, 0x58, 0xbe, 0x86, 0x79, 0xd6, 0x2f, 0xbc, 0x13, + 0x76, 0xb1, 0x7d, 0x9a, 0x73, 0xac, 0x5e, 0x04, 0x81, 0x62, 0x8c, 0x45, + 0x17, 0x63, 0x8c, 0x45, 0xc2, 0x50, 0xc8, 0xaf, 0xff, 0x43, 0xc2, 0xfe, + 0xa4, 0x28, 0x38, 0x31, 0x62, 0xe6, 0x3a, 0xc5, 0x6e, 0x8a, 0xf2, 0x4c, + 0xe8, 0x99, 0x7f, 0xfe, 0xf3, 0x6b, 0x1c, 0x1c, 0xcf, 0xbe, 0xbe, 0xcb, + 0x17, 0xfd, 0xf7, 0xd4, 0x45, 0x33, 0xda, 0xc5, 0xfe, 0x7e, 0x33, 0x78, + 0x52, 0xb1, 0x76, 0xf8, 0xb1, 0x7b, 0x4d, 0xc5, 0x8b, 0xd2, 0x43, 0x58, + 0xbf, 0x77, 0xc8, 0xb3, 0xcb, 0x15, 0x05, 0x5f, 0xf9, 0x1c, 0x8f, 0x66, + 0x4e, 0xa9, 0x1e, 0x75, 0xa3, 0x23, 0x8c, 0x7c, 0x74, 0x87, 0x2f, 0xdf, + 0x7d, 0x48, 0xd6, 0x2f, 0x8c, 0xe0, 0x7f, 0x58, 0xbf, 0x9f, 0xc4, 0xc0, + 0xe2, 0xc5, 0xfa, 0x4f, 0xec, 0xfa, 0xc5, 0xff, 0xe0, 0x49, 0x6e, 0x58, + 0xfd, 0x5d, 0x53, 0xb2, 0xc5, 0xfe, 0x9e, 0xac, 0x21, 0xfe, 0x56, 0x2e, + 0xcd, 0xd6, 0x2f, 0x80, 0x29, 0x3a, 0xc5, 0x61, 0xbb, 0x71, 0x8b, 0xd2, + 0x5b, 0x2c, 0x5f, 0x84, 0x17, 0xe7, 0xa2, 0xc5, 0xff, 0xf1, 0x7a, 0x2c, + 0xd6, 0x19, 0xe0, 0x48, 0xe5, 0x62, 0xf4, 0x94, 0x4b, 0x14, 0x34, 0xd1, + 0xa2, 0x70, 0xd0, 0xff, 0xc7, 0x58, 0xb0, 0x35, 0x1b, 0xee, 0x3c, 0xee, + 0xb1, 0x7d, 0x9d, 0xf9, 0xd6, 0x2f, 0xfe, 0x8b, 0x35, 0x8c, 0x79, 0xfb, + 0x8d, 0x62, 0xb1, 0x11, 0x5f, 0x23, 0xf1, 0x1d, 0xb1, 0x62, 0xf9, 0x8b, + 0x00, 0xb1, 0x7e, 0x3e, 0x7f, 0xb6, 0x58, 0xa8, 0x8f, 0x6c, 0xe2, 0x22, + 0x21, 0xbf, 0x78, 0x51, 0x07, 0x2b, 0x17, 0x30, 0xd6, 0x2d, 0x90, 0x3c, + 0x2d, 0x15, 0xd1, 0xaa, 0xfc, 0x77, 0x2d, 0xec, 0xa3, 0xf1, 0xcb, 0x14, + 0x38, 0xf9, 0x08, 0xae, 0x8e, 0x57, 0xff, 0x9c, 0x64, 0xdd, 0x96, 0x7b, + 0x1c, 0x0b, 0x17, 0xdb, 0x6c, 0xd1, 0xeb, 0x17, 0x86, 0x2d, 0x96, 0x2e, + 0x98, 0x96, 0x2b, 0x73, 0x6f, 0x10, 0xfd, 0xff, 0x40, 0x45, 0xe7, 0xfb, + 0x9d, 0x62, 0xf4, 0x38, 0x25, 0x8b, 0x9a, 0x0b, 0x17, 0xef, 0x3f, 0xe0, + 0x4b, 0x14, 0x73, 0x7e, 0x42, 0xf7, 0xff, 0xff, 0xef, 0xce, 0x6d, 0x07, + 0xf7, 0x27, 0x59, 0x18, 0xe0, 0x99, 0xe9, 0x32, 0x5b, 0xac, 0x5b, 0xd8, + 0x9a, 0xfc, 0x44, 0x7f, 0x39, 0x65, 0xde, 0x10, 0x5e, 0xe9, 0x31, 0xeb, + 0x17, 0x82, 0x08, 0x25, 0x8b, 0xff, 0xbb, 0xf1, 0x66, 0xc7, 0xc3, 0xe1, + 0x24, 0x46, 0x1a, 0x1b, 0x1e, 0x51, 0x37, 0x88, 0x77, 0x04, 0x05, 0x8b, + 0xee, 0xf9, 0x30, 0x58, 0xa9, 0x4d, 0x3d, 0xe1, 0xd6, 0xc4, 0xe0, 0x19, + 0xbe, 0xdb, 0x3e, 0xcb, 0x17, 0xb6, 0x81, 0xd6, 0x2d, 0x05, 0x8b, 0xff, + 0x3f, 0x00, 0x71, 0x73, 0x92, 0x05, 0x8b, 0xfd, 0xa2, 0x60, 0xb3, 0xec, + 0xb1, 0x7c, 0xda, 0xfe, 0x2c, 0x5f, 0xf1, 0x36, 0xdc, 0xcf, 0xb4, 0x7a, + 0xc5, 0xf7, 0xa7, 0xdc, 0xc3, 0xde, 0x62, 0x2b, 0xf7, 0xdb, 0x59, 0xa5, + 0x8b, 0xfc, 0xfd, 0x42, 0x3e, 0xdd, 0x6e, 0xcb, 0x17, 0xfd, 0xe7, 0x04, + 0xc3, 0x3b, 0xf2, 0xc5, 0xff, 0x3f, 0x65, 0x9e, 0xfb, 0x84, 0xb1, 0x52, + 0x7e, 0x9a, 0x3a, 0xbf, 0xfb, 0x62, 0x16, 0xc2, 0xe7, 0xb9, 0x81, 0x2c, + 0x5f, 0xbb, 0xdd, 0xcb, 0x65, 0x8b, 0xfd, 0xf9, 0x84, 0x50, 0x62, 0x58, + 0xaf, 0x1e, 0xf8, 0x65, 0x75, 0x28, 0xcb, 0x68, 0x54, 0x5c, 0x26, 0x58, + 0xbf, 0x67, 0xf6, 0xf4, 0x4b, 0x14, 0x62, 0xb6, 0x8d, 0x87, 0xe0, 0x24, + 0x34, 0x0c, 0x84, 0x8e, 0xe6, 0xf1, 0x14, 0x6a, 0x16, 0x7f, 0x87, 0x61, + 0x13, 0x78, 0x5e, 0xff, 0x80, 0x59, 0xbb, 0xe7, 0xb8, 0xb1, 0x7b, 0xd2, + 0x35, 0x8b, 0xe8, 0x78, 0x43, 0x58, 0xbf, 0x4b, 0xc1, 0xb8, 0xb1, 0x7f, + 0x30, 0x79, 0x14, 0x9d, 0x62, 0xa5, 0x12, 0xfd, 0x8e, 0xe8, 0x90, 0x44, + 0xf7, 0xf6, 0x7b, 0xe2, 0x9e, 0xd6, 0x2f, 0xbc, 0xfa, 0xc5, 0x8b, 0xee, + 0xf8, 0xe6, 0x8c, 0xf4, 0x70, 0xbe, 0xb6, 0x54, 0x87, 0xa8, 0x55, 0x94, + 0x34, 0x3d, 0x08, 0xeb, 0xef, 0x3f, 0x61, 0x2c, 0x5f, 0x37, 0xdf, 0xeb, + 0x17, 0xf7, 0x83, 0xff, 0xf3, 0x65, 0x8b, 0xfb, 0x85, 0x9d, 0x3e, 0xeb, + 0x17, 0xff, 0xa1, 0x84, 0xe3, 0xc2, 0xc3, 0x67, 0x8b, 0x17, 0xb7, 0xce, + 0x2c, 0x56, 0x22, 0x57, 0xc5, 0xe2, 0x48, 0xbf, 0xf1, 0xe7, 0xb2, 0xc0, + 0x72, 0x63, 0xd6, 0x2f, 0xf7, 0xf3, 0x6c, 0xfb, 0xfd, 0x62, 0xb1, 0x3b, + 0x23, 0x49, 0x7b, 0x22, 0xd4, 0x31, 0x8e, 0x5f, 0xf4, 0x2b, 0xfb, 0x40, + 0x9d, 0xf0, 0xeb, 0x17, 0xf1, 0x67, 0x47, 0xd3, 0x2c, 0x5f, 0xc5, 0x9d, + 0x80, 0x38, 0x2c, 0x50, 0xcf, 0x78, 0x05, 0xd5, 0x1b, 0x32, 0x36, 0xe6, + 0x77, 0x39, 0xe5, 0x00, 0x32, 0xf0, 0xa1, 0x1b, 0x7d, 0x1e, 0xf9, 0xda, + 0xc5, 0xcd, 0xba, 0xc5, 0x6c, 0x6f, 0x98, 0x9a, 0xfc, 0xfc, 0x9d, 0x8e, + 0xb8, 0xbf, 0x4b, 0xf4, 0xb6, 0x80, 0x25, 0xc5, 0xfa, 0x5c, 0xd0, 0x5c, + 0x5f, 0xa5, 0xf0, 0xa1, 0x9c, 0x5c, 0x5f, 0xa5, 0x0c, 0xf5, 0x08, 0x92, + 0xfd, 0x39, 0xcc, 0x25, 0xc5, 0xfa, 0x52, 0xe2, 0xfd, 0x2e, 0x6f, 0x2e, + 0x2f, 0xd0, 0xe5, 0xcd, 0xa0, 0x47, 0xfe, 0x24, 0xcb, 0xec, 0x8e, 0x70, + 0x2e, 0x2f, 0xd2, 0x97, 0x17, 0xe9, 0x70, 0x25, 0x71, 0x7e, 0x97, 0xfd, + 0x80, 0x6d, 0x67, 0x4c, 0x1a, 0xe2, 0xfd, 0x2f, 0xec, 0xfb, 0xf0, 0x5b, + 0x2e, 0x2f, 0xd2, 0x80, 0x8a, 0x72, 0x24, 0xe2, 0x3d, 0xf6, 0xb6, 0x9f, + 0x2e, 0x2f, 0xd2, 0x97, 0x17, 0xe9, 0x86, 0xc6, 0xe0, 0x82, 0x5c, 0x5f, + 0xa5, 0x41, 0x59, 0x38, 0xcd, 0xb2, 0x11, 0x3d, 0xc2, 0x83, 0x44, 0xe7, + 0x32, 0xe4, 0x30, 0x3c, 0xc0, 0x11, 0x45, 0xd2, 0x6a, 0x62, 0xfd, 0x11, + 0x88, 0x90, 0xbf, 0xed, 0xa7, 0xa6, 0x3e, 0xb3, 0x65, 0x8b, 0xff, 0x9b, + 0xfb, 0xfd, 0xc9, 0xb4, 0xd0, 0x58, 0xa8, 0x22, 0xef, 0x47, 0x7e, 0x3c, + 0xbe, 0xf4, 0xf7, 0x05, 0x8b, 0xfa, 0x70, 0x39, 0x84, 0x16, 0x2f, 0xf7, + 0x32, 0x10, 0x9f, 0x76, 0xb1, 0x7f, 0xd3, 0xa0, 0x79, 0xd8, 0xd8, 0x2c, + 0x56, 0x23, 0xc7, 0xe6, 0x04, 0x49, 0xc2, 0xe0, 0xcd, 0x6f, 0xfd, 0x9b, + 0x8f, 0x34, 0x13, 0x7e, 0x25, 0x8b, 0xa4, 0x35, 0x8a, 0x58, 0xbf, 0xf1, + 0x64, 0x53, 0xb0, 0x1b, 0xbe, 0x2c, 0x54, 0x9e, 0x6f, 0x03, 0x29, 0x22, + 0xfc, 0xf1, 0x33, 0x41, 0x62, 0xd0, 0xd8, 0xda, 0x60, 0x65, 0xf4, 0x4c, + 0xda, 0x58, 0xad, 0x93, 0x8f, 0xed, 0x27, 0x48, 0x5f, 0x65, 0x25, 0x5e, + 0xa2, 0x7b, 0x9f, 0x65, 0x8b, 0xfa, 0x7e, 0x4c, 0xfa, 0x58, 0xad, 0x2f, + 0xd9, 0xb4, 0xf8, 0x9f, 0x97, 0x3a, 0x0c, 0x5e, 0xeb, 0xb8, 0x44, 0xb1, + 0x7e, 0xe3, 0x77, 0xc0, 0x2c, 0x51, 0xcf, 0x43, 0xc4, 0xd7, 0xf6, 0x3e, + 0xb3, 0xd2, 0xb1, 0x63, 0x56, 0x28, 0x8d, 0xfc, 0x71, 0x65, 0xf0, 0xc6, + 0xc7, 0x58, 0xbf, 0xd9, 0xe3, 0x67, 0xa6, 0x0d, 0x62, 0xb0, 0xf6, 0x48, + 0x8e, 0xfc, 0x53, 0xf1, 0x69, 0x62, 0xfe, 0x70, 0xa2, 0x29, 0x02, 0xc5, + 0x70, 0xf5, 0xfc, 0x51, 0x7f, 0x70, 0xb3, 0xd8, 0x05, 0x8b, 0xf1, 0x48, + 0x26, 0x3d, 0x62, 0xff, 0x66, 0xb5, 0x84, 0xc6, 0xac, 0x53, 0x9e, 0xef, + 0xca, 0xa8, 0x69, 0xa2, 0x76, 0xee, 0x72, 0x20, 0x42, 0x2a, 0xff, 0x16, + 0x74, 0xff, 0x6d, 0x1e, 0xb1, 0x7f, 0x75, 0x78, 0x5d, 0xc3, 0x8b, 0x15, + 0x11, 0xf6, 0x84, 0x73, 0x7f, 0x7b, 0x3f, 0x3a, 0x02, 0xc5, 0xf6, 0x9f, + 0x3a, 0x2c, 0x5f, 0xb3, 0x99, 0xdf, 0x96, 0x2f, 0x8f, 0x24, 0x69, 0x87, + 0x9a, 0xc4, 0x97, 0xfd, 0xa7, 0x3f, 0x03, 0x9c, 0x89, 0x62, 0xff, 0xb7, + 0x90, 0x0c, 0x4d, 0xa8, 0x2c, 0x5f, 0xf9, 0x9b, 0x6c, 0x3b, 0x17, 0x70, + 0x58, 0xbc, 0xc6, 0xf3, 0x0f, 0xea, 0x23, 0xbb, 0xb9, 0xba, 0xc5, 0xfd, + 0xfc, 0x38, 0x72, 0x05, 0x8a, 0x73, 0xc8, 0xf0, 0xcd, 0xfb, 0xac, 0x37, + 0x4d, 0xba, 0xc5, 0xf7, 0x27, 0x3c, 0xb1, 0x7f, 0xe6, 0x7f, 0x40, 0x52, + 0x53, 0x05, 0x8b, 0xcd, 0xdc, 0xac, 0x5b, 0xe6, 0x23, 0x36, 0x35, 0x10, + 0xe1, 0x87, 0xc8, 0x83, 0x3d, 0xbf, 0xfd, 0x3c, 0xc3, 0xce, 0xed, 0x83, + 0x7e, 0x8b, 0x15, 0x88, 0xa2, 0x25, 0x7b, 0xf6, 0x7f, 0x3b, 0xf2, 0xc5, + 0x82, 0x31, 0x5c, 0xf6, 0x3d, 0xe8, 0xe4, 0xa1, 0x6b, 0xe8, 0xfa, 0xe3, + 0x88, 0x68, 0xc5, 0xea, 0x09, 0x8f, 0x03, 0x21, 0x62, 0xd2, 0xf0, 0xaf, + 0x9c, 0xd7, 0x09, 0x62, 0xfb, 0xdf, 0xcd, 0x96, 0x28, 0xe7, 0x90, 0x44, + 0x97, 0xfd, 0xac, 0xec, 0xbb, 0x7d, 0xb4, 0xb1, 0x4b, 0x16, 0x18, 0x0f, + 0x20, 0x23, 0xca, 0x58, 0xbe, 0x66, 0x2d, 0xd6, 0x2e, 0x18, 0x7b, 0x1a, + 0xee, 0x81, 0x95, 0x28, 0xf1, 0xc6, 0x97, 0x57, 0xbc, 0x70, 0x69, 0x62, + 0xe6, 0x25, 0x8b, 0xbc, 0x4b, 0x17, 0xe1, 0xb4, 0x3f, 0x8b, 0x17, 0x88, + 0x1b, 0xac, 0x56, 0xc7, 0xe6, 0x31, 0x6c, 0x17, 0xe1, 0x45, 0xff, 0x9c, + 0x78, 0x7c, 0xfb, 0x10, 0xd6, 0x2f, 0xff, 0x77, 0xef, 0xb8, 0x63, 0xcc, + 0x2e, 0x3a, 0xc5, 0xff, 0xfa, 0x1a, 0x9e, 0x8d, 0x14, 0x8f, 0xf2, 0x76, + 0x89, 0x62, 0xff, 0x75, 0x37, 0x1f, 0x91, 0x62, 0xc5, 0xfc, 0x4c, 0x0e, + 0x1e, 0x56, 0x2f, 0xff, 0x4e, 0x81, 0x9d, 0x1f, 0xd3, 0x85, 0x05, 0x8a, + 0x31, 0x52, 0xe4, 0x64, 0x24, 0x64, 0xf3, 0x0f, 0x7b, 0x4b, 0xd2, 0xcf, + 0x8d, 0xc3, 0x2d, 0xb7, 0x96, 0x2f, 0xd9, 0xce, 0x1f, 0xb5, 0x8b, 0x76, + 0x61, 0xbc, 0x91, 0x2b, 0xd2, 0x39, 0x58, 0xa9, 0x3c, 0x43, 0x94, 0x5e, + 0x72, 0x82, 0xc5, 0x4b, 0xb8, 0xa7, 0xda, 0x11, 0x50, 0xa6, 0xce, 0x8d, + 0xdb, 0x25, 0x90, 0x6f, 0x08, 0x7e, 0xca, 0x1e, 0x70, 0x5e, 0x3d, 0xea, + 0x24, 0x8d, 0x4b, 0x0d, 0xfd, 0x24, 0x6d, 0xa9, 0x0a, 0xa0, 0x84, 0xc9, + 0x4f, 0x80, 0xf2, 0x38, 0x91, 0x4a, 0x89, 0x0a, 0x1f, 0x9d, 0x44, 0x37, + 0xef, 0x9e, 0x63, 0x4c, 0x58, 0xbd, 0xbe, 0xcc, 0xb1, 0x74, 0x9d, 0x62, + 0xfe, 0x9f, 0x7e, 0x7a, 0x62, 0xc5, 0x0c, 0xf1, 0xb7, 0x17, 0xbb, 0x6c, + 0x58, 0xbf, 0xb3, 0xdf, 0x13, 0x41, 0x62, 0xdb, 0x98, 0x8c, 0xec, 0x65, + 0x01, 0x19, 0x0c, 0x52, 0xc5, 0x9b, 0x47, 0x9e, 0x74, 0x3b, 0xe6, 0xe1, + 0xe0, 0xb1, 0x7f, 0x61, 0xe2, 0x66, 0x82, 0xc5, 0xfd, 0x27, 0x7d, 0xdc, + 0x6b, 0x17, 0xff, 0xf3, 0x7e, 0x61, 0x19, 0x80, 0x98, 0x70, 0x7f, 0x9d, + 0x2c, 0x50, 0xd1, 0x75, 0xb9, 0x77, 0xcb, 0xaf, 0xf1, 0xaf, 0xfe, 0xe1, + 0x9e, 0x58, 0xa3, 0x13, 0x44, 0x78, 0x6e, 0xb1, 0x8d, 0xed, 0xf7, 0x12, + 0xc5, 0xff, 0x4f, 0x65, 0x3f, 0xf8, 0xb7, 0x58, 0xac, 0x3d, 0xb3, 0x48, + 0x2f, 0xfd, 0x38, 0x59, 0x07, 0xfe, 0x74, 0x58, 0xbf, 0xf8, 0x98, 0x1c, + 0xd6, 0x6f, 0xfc, 0xed, 0x62, 0xb4, 0x88, 0x4f, 0x1f, 0x5f, 0x66, 0x9c, + 0xd5, 0x8b, 0xf7, 0xdf, 0x93, 0x05, 0x8b, 0xff, 0xcc, 0x6f, 0x33, 0xa4, + 0xf7, 0xee, 0x08, 0xeb, 0x14, 0xc7, 0xee, 0x45, 0x14, 0x34, 0x6e, 0x9c, + 0x8c, 0xa1, 0x35, 0x78, 0xf1, 0xf2, 0xb1, 0x7f, 0xb9, 0x25, 0xef, 0xc8, + 0x6b, 0x15, 0x27, 0xa9, 0xe2, 0x0a, 0x58, 0xbf, 0xc6, 0xb1, 0x9c, 0x1e, + 0x75, 0x2c, 0x54, 0x9e, 0x29, 0xa1, 0x97, 0xfc, 0x6b, 0xe8, 0x3d, 0x3c, + 0x8d, 0x62, 0xe2, 0xeb, 0xd6, 0x2f, 0xa7, 0xee, 0x6e, 0x1e, 0xbe, 0x8e, + 0xef, 0xfd, 0x87, 0x68, 0x47, 0x08, 0x6f, 0xf5, 0x8a, 0x74, 0x79, 0xfd, + 0xe4, 0x8e, 0x2f, 0xde, 0xf3, 0x43, 0x8b, 0x17, 0xf8, 0xa7, 0xdd, 0xc4, + 0xc7, 0x58, 0xbc, 0x28, 0xb1, 0x62, 0xf7, 0xb0, 0x6b, 0x16, 0xf4, 0x9b, + 0xb1, 0x0f, 0x5b, 0x16, 0x29, 0x8d, 0xbf, 0x42, 0x6b, 0xfc, 0xfc, 0xc2, + 0xd8, 0x28, 0x96, 0x2f, 0xf7, 0x30, 0xce, 0xe1, 0x9e, 0x58, 0xbb, 0xf8, + 0x33, 0xec, 0xe1, 0xb5, 0x41, 0x3b, 0x91, 0x97, 0x1c, 0xa4, 0xa1, 0x4f, + 0xe8, 0x47, 0x5f, 0xb4, 0x06, 0xc0, 0x2c, 0x5f, 0xd9, 0xd4, 0xfe, 0x78, + 0x2c, 0x5f, 0x7e, 0x76, 0xe6, 0x1e, 0xc7, 0xca, 0x2f, 0xfd, 0xf9, 0x67, + 0xfb, 0x9d, 0x86, 0xb1, 0x7b, 0xed, 0x05, 0x8b, 0xfe, 0x0f, 0x5e, 0x83, + 0x97, 0xb8, 0xb1, 0x66, 0x34, 0xf6, 0x3e, 0x3b, 0x4e, 0x8b, 0xd2, 0x84, + 0xad, 0xf3, 0xf0, 0x33, 0xac, 0x5f, 0xd2, 0x2d, 0xff, 0x3a, 0x58, 0xbf, + 0xfb, 0xdb, 0xfd, 0xcb, 0x3d, 0xc9, 0x3a, 0xc5, 0x6e, 0x7e, 0x9d, 0x97, + 0xdf, 0x4e, 0xef, 0x05, 0x8b, 0xe3, 0x96, 0x7b, 0x0f, 0x1c, 0x89, 0x2f, + 0xff, 0xd3, 0xf2, 0xcf, 0x7d, 0xcc, 0x3e, 0x79, 0xbc, 0xb1, 0x73, 0xf4, + 0x58, 0xaf, 0x1f, 0x77, 0x52, 0xad, 0x2c, 0x5f, 0xf1, 0x60, 0x3f, 0x2d, + 0xac, 0x58, 0xa7, 0x3e, 0x8d, 0x12, 0xf0, 0x32, 0xfd, 0xef, 0xbe, 0x83, + 0x58, 0xbf, 0xe6, 0x8f, 0xe7, 0x8a, 0x43, 0x3a, 0xc5, 0x61, 0xf3, 0x88, + 0xaa, 0xb7, 0x55, 0x42, 0xf0, 0xdf, 0x68, 0xc3, 0x0a, 0x12, 0xb7, 0xed, + 0xf0, 0xf3, 0xc5, 0x8b, 0xc1, 0x04, 0x12, 0x45, 0xe0, 0xe4, 0x09, 0x11, + 0x86, 0x86, 0xff, 0x74, 0x6c, 0x28, 0x61, 0x2c, 0x5f, 0xf3, 0x40, 0x3d, + 0x67, 0x46, 0xd2, 0xc5, 0xff, 0xf0, 0xf0, 0xfa, 0x97, 0x83, 0x73, 0x3b, + 0xf2, 0xc5, 0x2c, 0x53, 0x9e, 0xe6, 0x94, 0x2f, 0xf1, 0x4c, 0x0d, 0xd6, + 0x71, 0x62, 0xff, 0xcf, 0x3a, 0x81, 0xaf, 0xc0, 0xfe, 0xb1, 0x7f, 0xe2, + 0x2c, 0xda, 0x28, 0x4e, 0xb6, 0x58, 0xbd, 0xfc, 0x84, 0xa3, 0x5f, 0x08, + 0x4e, 0x68, 0x1a, 0x0d, 0xff, 0xbd, 0xa1, 0x43, 0x93, 0xaf, 0x4a, 0xc5, + 0x3a, 0xa2, 0xf2, 0x33, 0xf4, 0x6d, 0xe2, 0x4d, 0xbf, 0xff, 0x9e, 0x48, + 0x00, 0x98, 0x3f, 0xb0, 0xfc, 0x68, 0x2c, 0x5f, 0xff, 0x1c, 0xa6, 0x28, + 0x67, 0xfe, 0xf9, 0xd9, 0x2c, 0x5e, 0x0c, 0x1c, 0x58, 0xbf, 0xe9, 0x2c, + 0xd9, 0xf5, 0x83, 0x58, 0xa8, 0x8f, 0x5f, 0xc3, 0xf7, 0xbe, 0xda, 0x58, + 0xbf, 0xf3, 0x9d, 0xf4, 0x59, 0xe1, 0x32, 0xc5, 0x49, 0xed, 0x78, 0x76, + 0xe7, 0x1e, 0x22, 0x7b, 0x8f, 0xb7, 0x70, 0x25, 0x8b, 0xfe, 0xfb, 0x83, + 0xb8, 0x79, 0xc0, 0xb1, 0x7f, 0x8a, 0x0e, 0x7c, 0xef, 0xcb, 0x17, 0xec, + 0xd0, 0x73, 0x05, 0x8b, 0xee, 0xf7, 0x72, 0x58, 0xa1, 0xa3, 0x57, 0x06, + 0x58, 0xec, 0x8d, 0x3c, 0x53, 0x4b, 0x16, 0x98, 0x1e, 0x9f, 0x5e, 0x8f, + 0x5b, 0xa7, 0x02, 0x08, 0xd5, 0x6f, 0xa7, 0x7c, 0xd2, 0xc5, 0xed, 0xf3, + 0x4b, 0x17, 0xef, 0x31, 0xde, 0x25, 0x8a, 0x30, 0xfa, 0xa4, 0x8d, 0x87, + 0xaf, 0xf6, 0x6b, 0x1b, 0x7e, 0x41, 0x62, 0xff, 0xff, 0x9f, 0xdf, 0x68, + 0x46, 0x67, 0xdb, 0xb0, 0x78, 0xa4, 0xfc, 0x58, 0xbf, 0xf1, 0x92, 0x42, + 0x3c, 0x85, 0x3c, 0x58, 0xb6, 0x0d, 0x30, 0xc3, 0x97, 0x7c, 0xd0, 0x9a, + 0xaf, 0xfb, 0xcc, 0x59, 0xcd, 0x4f, 0x16, 0x2f, 0xa1, 0x20, 0xed, 0x62, + 0xff, 0xf6, 0x05, 0x9d, 0x1f, 0x85, 0x87, 0x3b, 0xac, 0x5f, 0xff, 0xfd, + 0xf9, 0x21, 0x73, 0xef, 0xef, 0xe1, 0x7b, 0xe5, 0x9d, 0x33, 0x8b, 0x17, + 0x0c, 0x6b, 0x17, 0xe9, 0x83, 0xf8, 0xeb, 0x15, 0x04, 0x59, 0x1d, 0xc8, + 0x86, 0x2f, 0xff, 0xf3, 0x3f, 0xa6, 0x0f, 0xad, 0x84, 0x08, 0xe8, 0xec, + 0x1b, 0xac, 0x5f, 0xff, 0xf3, 0x74, 0x7e, 0x84, 0x2e, 0x06, 0x52, 0x3f, + 0xb4, 0x33, 0x8b, 0x17, 0xf0, 0x24, 0xb3, 0xbf, 0x2c, 0x5c, 0xc0, 0x31, + 0x52, 0x7e, 0xc4, 0x99, 0x0f, 0xdf, 0x97, 0x93, 0x38, 0x6d, 0x57, 0xff, + 0x83, 0x28, 0x8d, 0x61, 0xff, 0x37, 0xcd, 0x2c, 0x56, 0x2f, 0xf4, 0x3c, + 0xac, 0x6f, 0xc7, 0x42, 0xc8, 0x45, 0x2a, 0x1f, 0x8d, 0x57, 0xbd, 0x07, + 0x58, 0xbf, 0xef, 0x94, 0xc3, 0xec, 0x4e, 0xb1, 0x74, 0xe9, 0x62, 0x9c, + 0xf3, 0xba, 0x1b, 0xdf, 0xfb, 0xf9, 0xb7, 0x7c, 0xcd, 0xd8, 0x35, 0x8b, + 0xb3, 0xeb, 0x14, 0xe7, 0xb4, 0x24, 0x3a, 0xd9, 0xb8, 0x6f, 0x84, 0x6d, + 0x63, 0x84, 0x86, 0x47, 0x07, 0xdc, 0x22, 0x1e, 0x58, 0x94, 0x50, 0xac, + 0x3c, 0x3d, 0xbf, 0x2b, 0x1d, 0x93, 0x40, 0x94, 0x52, 0x98, 0x38, 0x87, + 0xea, 0x42, 0x08, 0x9a, 0xba, 0x35, 0x84, 0xfb, 0x73, 0xec, 0xb1, 0x7f, + 0x8b, 0x71, 0xbf, 0x49, 0x1a, 0xc5, 0x0c, 0xf3, 0x84, 0x31, 0x7f, 0xb8, + 0xe7, 0x6d, 0x37, 0x16, 0x2f, 0xde, 0xf6, 0x16, 0xcb, 0x17, 0xff, 0x9f, + 0x5f, 0x97, 0xf7, 0x1c, 0xbb, 0x82, 0xc5, 0xff, 0x9c, 0x2d, 0x61, 0xce, + 0xc5, 0xe5, 0x8a, 0x94, 0x59, 0x61, 0x49, 0x25, 0x5f, 0xd9, 0xbf, 0xa3, + 0xb3, 0xeb, 0x14, 0xb1, 0x5f, 0x37, 0xc0, 0x32, 0xbe, 0xdd, 0xff, 0x12, + 0xc5, 0xff, 0xbf, 0x3b, 0x07, 0xef, 0x89, 0xa0, 0xb1, 0x52, 0x7c, 0xf1, + 0x12, 0xde, 0x3c, 0xfd, 0x62, 0xfa, 0x77, 0xc3, 0xac, 0x5f, 0x70, 0x01, + 0xee, 0xb1, 0x58, 0x7c, 0xdf, 0x1d, 0x0c, 0x8e, 0x96, 0x28, 0x8d, 0xdf, + 0x51, 0x7d, 0xf4, 0x31, 0x8e, 0xb1, 0x7e, 0x34, 0x50, 0x61, 0xac, 0x5f, + 0xe9, 0x8f, 0x33, 0xed, 0x9a, 0x58, 0xbf, 0xfb, 0xc5, 0x3e, 0x7c, 0x23, + 0x27, 0xa2, 0xc5, 0xcf, 0xba, 0xc5, 0xec, 0xd4, 0xac, 0x5f, 0x7f, 0xf9, + 0xda, 0xc5, 0xd8, 0x78, 0xe3, 0xc0, 0x0c, 0x72, 0xb1, 0x30, 0x57, 0x37, + 0xfa, 0x29, 0x2c, 0x5a, 0x3d, 0x62, 0xd1, 0x2c, 0x58, 0xeb, 0x14, 0xe6, + 0x95, 0x84, 0xe8, 0xd3, 0xd9, 0x39, 0xd5, 0xff, 0xff, 0x18, 0x4c, 0x69, + 0x9e, 0x00, 0x65, 0x0f, 0xe7, 0x3d, 0x9a, 0x58, 0xbf, 0x60, 0x39, 0x30, + 0x58, 0xbf, 0x39, 0xc6, 0x3c, 0x58, 0xb0, 0x20, 0x8b, 0xb2, 0x6b, 0x8e, + 0x28, 0xbf, 0xef, 0x7f, 0x38, 0x67, 0x9f, 0x65, 0x8b, 0xfb, 0x22, 0xcd, + 0x0d, 0xd6, 0x2a, 0x51, 0x44, 0xe7, 0x04, 0x79, 0x7f, 0xe9, 0x2e, 0xe1, + 0xc0, 0xf6, 0x6f, 0x2c, 0x5f, 0xf1, 0x38, 0xba, 0xfe, 0x47, 0x4f, 0x96, + 0x2f, 0xf6, 0x05, 0xdc, 0x3d, 0x21, 0x2c, 0x5f, 0xd8, 0xd1, 0x7e, 0x63, + 0xd6, 0x2a, 0x4f, 0xa0, 0x06, 0xf7, 0xf8, 0x1a, 0x7c, 0xf8, 0xb8, 0xb1, + 0x7b, 0x3b, 0x3a, 0xc5, 0xfd, 0x80, 0xea, 0xf3, 0x9d, 0x62, 0xa5, 0x10, + 0x64, 0x69, 0xe1, 0xeb, 0xe8, 0xec, 0xd4, 0xac, 0x5e, 0xf7, 0x67, 0x58, + 0xbe, 0x1c, 0xf4, 0x95, 0x8b, 0xff, 0xfd, 0xf9, 0x21, 0x37, 0xa6, 0x0f, + 0xf6, 0x3c, 0xfb, 0x8b, 0x17, 0x8d, 0x6d, 0x2c, 0x5b, 0xc6, 0x23, 0x02, + 0x47, 0xc6, 0x49, 0xe5, 0xfa, 0x58, 0xb4, 0x81, 0x33, 0x42, 0x87, 0x2f, + 0x44, 0x3b, 0xff, 0x9b, 0xda, 0x11, 0xb9, 0xe7, 0x07, 0x16, 0x2f, 0xe0, + 0x67, 0x3f, 0x9c, 0x58, 0xbb, 0x40, 0x58, 0xa7, 0x3c, 0x66, 0x2e, 0xbd, + 0x8e, 0x35, 0x8a, 0x96, 0x52, 0x2e, 0xd0, 0xe5, 0x83, 0x58, 0xe1, 0x11, + 0x90, 0xc3, 0xec, 0x8d, 0xc8, 0xa2, 0x8c, 0xbc, 0xf0, 0x94, 0xfc, 0x70, + 0x00, 0x2d, 0x24, 0x2e, 0x42, 0xa7, 0xd0, 0xa4, 0xe9, 0x1b, 0x10, 0x47, + 0x91, 0xd0, 0x8c, 0xea, 0x20, 0xbf, 0xff, 0xc3, 0x7f, 0x7e, 0x78, 0xe6, + 0x36, 0xf3, 0xc7, 0xee, 0x0b, 0x17, 0xdf, 0xce, 0xe0, 0xb1, 0x7d, 0x9e, + 0x0f, 0x65, 0x8b, 0xf1, 0x4b, 0xf7, 0x05, 0x8b, 0xc1, 0x04, 0x12, 0x64, + 0x10, 0x17, 0xdb, 0xb3, 0x6e, 0x99, 0x04, 0x04, 0x61, 0xaf, 0xbf, 0xd3, + 0xb7, 0x70, 0x13, 0x79, 0x62, 0xfd, 0x9c, 0x6d, 0x41, 0x62, 0xf9, 0xb5, + 0x81, 0x2c, 0x56, 0x91, 0x8d, 0xc4, 0x5f, 0x1b, 0x74, 0x28, 0xbc, 0x10, + 0x41, 0x26, 0x40, 0xf1, 0x49, 0x90, 0x3c, 0x46, 0x1a, 0xfb, 0xfb, 0xcc, + 0x73, 0xc9, 0xd6, 0x2f, 0xcd, 0xe6, 0x20, 0x2c, 0x5f, 0xd9, 0xef, 0x89, + 0xa0, 0xb1, 0x78, 0x20, 0x82, 0x58, 0xbd, 0xc9, 0x35, 0x22, 0x30, 0xd0, + 0xdf, 0xa4, 0x2c, 0xfb, 0x2c, 0x54, 0xaa, 0xb5, 0xc8, 0xc7, 0x77, 0x6e, + 0xec, 0xb7, 0xe5, 0xc4, 0x4f, 0xe4, 0xf0, 0xcc, 0x6a, 0x3d, 0x5a, 0x99, + 0xe5, 0x6d, 0x5f, 0xef, 0xcf, 0x49, 0x29, 0xf2, 0xc5, 0xfd, 0x9d, 0xc2, + 0x12, 0x75, 0x8b, 0xff, 0xdc, 0xfb, 0x43, 0x3e, 0xe7, 0xe4, 0xc7, 0xac, + 0x5f, 0xce, 0x6c, 0x8d, 0x8e, 0xb1, 0x78, 0x29, 0x25, 0x8b, 0xfb, 0x7f, + 0xce, 0xb0, 0xeb, 0x17, 0xff, 0xf7, 0xd8, 0xe7, 0x68, 0x06, 0x5d, 0x30, + 0x79, 0xdf, 0x96, 0x2f, 0x49, 0x6d, 0x88, 0x8e, 0xe1, 0x7d, 0xff, 0xdf, + 0x98, 0x3f, 0xb3, 0xfb, 0xc9, 0xd6, 0x2a, 0x55, 0x18, 0x40, 0xbc, 0x66, + 0x98, 0x5f, 0xf4, 0xd6, 0x2e, 0xe4, 0x2a, 0xfa, 0x19, 0xdf, 0xb7, 0x9f, + 0xc9, 0xd6, 0x2f, 0xfd, 0xf7, 0x88, 0x98, 0x2f, 0x67, 0xd6, 0x2f, 0x88, + 0x7f, 0x95, 0x8b, 0xa7, 0x8b, 0x15, 0x88, 0xa2, 0xdc, 0xa5, 0x90, 0x3c, + 0x45, 0x7b, 0x93, 0x05, 0x8b, 0xc5, 0x0e, 0x2c, 0x56, 0x1b, 0xa0, 0xc7, + 0x6f, 0xfd, 0xf7, 0x1c, 0x97, 0xb3, 0xbf, 0x2c, 0x5e, 0xe0, 0x89, 0x62, + 0xfa, 0x05, 0x23, 0x58, 0xbc, 0x52, 0x7e, 0x1b, 0xf0, 0xc7, 0x6f, 0xf0, + 0x9b, 0x91, 0x14, 0x9d, 0x62, 0xb7, 0x47, 0x27, 0x1f, 0xbc, 0x65, 0x7f, + 0xe6, 0xfb, 0xf7, 0xc9, 0x21, 0x44, 0xb1, 0x7f, 0xf7, 0xdf, 0x5f, 0x6c, + 0xe3, 0xb6, 0xcb, 0x17, 0xf8, 0x26, 0xf6, 0x1d, 0xbb, 0x58, 0xbf, 0xef, + 0x66, 0xb3, 0x99, 0xdf, 0x96, 0x2f, 0xfa, 0x76, 0x91, 0xe1, 0xfb, 0x95, + 0x8b, 0xdf, 0x10, 0x16, 0x2f, 0x82, 0x6d, 0x1a, 0x33, 0xd8, 0xc3, 0xaa, + 0x94, 0x66, 0x64, 0x24, 0xa8, 0xc4, 0xea, 0xf1, 0x03, 0xe8, 0x85, 0x18, + 0x0d, 0xff, 0x1f, 0x0f, 0x85, 0xec, 0xdd, 0x62, 0xff, 0x1b, 0x9b, 0xcf, + 0xe4, 0xeb, 0x15, 0xb1, 0xf7, 0x31, 0xcd, 0xf4, 0xfa, 0x4e, 0xb1, 0x7f, + 0x13, 0x9a, 0x66, 0xff, 0x58, 0xbf, 0xe2, 0x68, 0x7b, 0xd8, 0x5b, 0x2c, + 0x5f, 0xfb, 0x00, 0x06, 0xe3, 0x97, 0x70, 0x58, 0xbc, 0x1f, 0xd9, 0x62, + 0xb1, 0x18, 0xff, 0x31, 0x23, 0x98, 0xe3, 0xfa, 0x8d, 0x97, 0x54, 0x4d, + 0x76, 0xee, 0x30, 0x53, 0xc7, 0xb8, 0x50, 0xb1, 0xf1, 0x10, 0x50, 0xe9, + 0xbb, 0x58, 0xb1, 0x7b, 0xf3, 0xd4, 0xb1, 0x7f, 0xa4, 0xb7, 0xef, 0x8d, + 0x1e, 0xb1, 0x46, 0x1f, 0x78, 0xc5, 0xfe, 0x41, 0x7f, 0xf3, 0x74, 0xcf, + 0xe6, 0x8a, 0x7b, 0x82, 0xc5, 0xfd, 0x30, 0xff, 0x6d, 0x1e, 0xb1, 0x74, + 0xec, 0xb1, 0x5f, 0x44, 0x81, 0x23, 0x75, 0x19, 0x5f, 0x10, 0xb6, 0x25, + 0x8b, 0xf3, 0x70, 0x6d, 0xba, 0xc5, 0xe7, 0xee, 0x0b, 0x15, 0x03, 0xea, + 0x34, 0x8c, 0x05, 0x37, 0xcf, 0xe1, 0x7d, 0x62, 0xfe, 0x1f, 0x30, 0xf3, + 0x1e, 0xb1, 0x7f, 0xf7, 0x04, 0x5a, 0xc9, 0xee, 0x12, 0x4b, 0x17, 0xd8, + 0x36, 0x82, 0xc5, 0xe1, 0x30, 0x6b, 0x17, 0xfb, 0x3e, 0xdc, 0xfc, 0xf1, + 0x62, 0xed, 0xbb, 0x58, 0xa1, 0x9f, 0x5f, 0x63, 0xc0, 0x33, 0xbf, 0xa4, + 0xe6, 0x1d, 0xbc, 0xb1, 0x46, 0x23, 0xb1, 0xa1, 0x1b, 0x1c, 0x61, 0x50, + 0x56, 0x90, 0x38, 0x60, 0x77, 0x09, 0xc8, 0x8c, 0x18, 0x8f, 0x86, 0x21, + 0x46, 0x61, 0x7f, 0xb9, 0xfc, 0xe7, 0xb3, 0x75, 0x8b, 0xf1, 0x7b, 0xf9, + 0x05, 0x8b, 0xe1, 0xfd, 0x82, 0x58, 0xba, 0x4d, 0x58, 0xac, 0x37, 0x8e, + 0x49, 0x4e, 0x8b, 0x86, 0x35, 0x26, 0x4b, 0xfe, 0xc2, 0x9f, 0xfe, 0x42, + 0x75, 0x8b, 0xed, 0xfe, 0xe1, 0x2c, 0x5d, 0xd5, 0xa5, 0x8b, 0xc1, 0xc8, + 0x16, 0x2f, 0xfb, 0x70, 0xb3, 0xbf, 0x7a, 0x4e, 0xb1, 0x7d, 0x11, 0x49, + 0xd6, 0x2f, 0xff, 0xff, 0xf8, 0xc2, 0xc3, 0x5f, 0xff, 0xc8, 0xf3, 0x27, + 0x76, 0x0c, 0xcc, 0x2d, 0x9f, 0x4e, 0x2e, 0xbf, 0x16, 0x2b, 0x64, 0xf0, + 0xcd, 0x2d, 0xec, 0xe2, 0x22, 0x53, 0x8d, 0x90, 0xf7, 0x0f, 0x42, 0x23, + 0xbd, 0xf9, 0xd2, 0xc5, 0xff, 0xfc, 0x67, 0xa3, 0xb0, 0xcc, 0xfb, 0x16, + 0x45, 0x09, 0xed, 0x62, 0xe6, 0x8f, 0x58, 0xa9, 0x3f, 0xbc, 0x61, 0xbf, + 0x88, 0x5e, 0xd0, 0xa0, 0xb1, 0x7e, 0xde, 0x7f, 0x27, 0x48, 0xbf, 0x13, + 0x11, 0x62, 0x45, 0xd9, 0xba, 0x45, 0xc1, 0x04, 0x91, 0x58, 0x88, 0x0e, + 0x14, 0xf8, 0x94, 0x21, 0x8b, 0xf4, 0x83, 0xf9, 0xd4, 0x91, 0x18, 0x6f, + 0x68, 0x69, 0xa5, 0x61, 0x00, 0x70, 0xec, 0xad, 0x95, 0x0c, 0x14, 0x7c, + 0x57, 0xff, 0x0f, 0x4d, 0xb9, 0x67, 0x4d, 0x3f, 0x16, 0x2f, 0xf1, 0x67, + 0x8a, 0x45, 0xd7, 0xac, 0x5e, 0xd9, 0xf4, 0xb1, 0x5b, 0x22, 0x70, 0xd4, + 0x7f, 0x9b, 0xd4, 0xb2, 0xad, 0x72, 0x70, 0xed, 0xe5, 0x79, 0xb4, 0xa8, + 0xe1, 0x43, 0x1e, 0xf4, 0x73, 0x74, 0x58, 0xb8, 0x3d, 0x2c, 0x5c, 0xdf, + 0x58, 0xa6, 0x36, 0x1e, 0x19, 0xbf, 0xfb, 0xf2, 0x0f, 0x7f, 0x21, 0xf7, + 0xe8, 0xb1, 0x7d, 0x3e, 0xc8, 0x2c, 0x5f, 0xfd, 0x20, 0xe6, 0x60, 0xd8, + 0x98, 0xd5, 0x8b, 0xfe, 0xf7, 0x1b, 0xb7, 0x9e, 0xfc, 0xb1, 0x7f, 0xc4, + 0x0f, 0xb7, 0xbc, 0xe0, 0x58, 0xbf, 0xff, 0x7d, 0xfa, 0x39, 0x0f, 0x93, + 0xa7, 0xce, 0xf8, 0xb1, 0x7f, 0xb3, 0xa4, 0x97, 0xa1, 0xd7, 0xac, 0x5f, + 0xed, 0xdf, 0x98, 0x38, 0x75, 0xeb, 0x17, 0x86, 0x2e, 0x2c, 0x5f, 0xec, + 0xc2, 0x98, 0x43, 0xaf, 0x58, 0xbf, 0x8a, 0x73, 0x4c, 0x05, 0x8b, 0xff, + 0x4e, 0xbf, 0x2f, 0xf9, 0x27, 0x58, 0xba, 0x1c, 0xc4, 0xf0, 0x77, 0x39, + 0xd2, 0xbf, 0xce, 0x98, 0xe8, 0x87, 0xbc, 0x6e, 0x11, 0x65, 0xf7, 0xd9, + 0xbc, 0xb1, 0x7f, 0x16, 0x1d, 0xfb, 0x82, 0xc5, 0xff, 0xe6, 0x7f, 0x49, + 0x6e, 0xe7, 0xe0, 0xfb, 0x58, 0xa9, 0x3f, 0x9f, 0x97, 0x5f, 0xef, 0xce, + 0x42, 0x70, 0x0b, 0x17, 0xff, 0x8b, 0x3b, 0x03, 0x71, 0xb4, 0xfd, 0x81, + 0x62, 0x86, 0x7f, 0xbc, 0x32, 0xa8, 0x2b, 0xd4, 0xee, 0x3f, 0xc0, 0x3e, + 0xfa, 0x13, 0x61, 0x42, 0x7a, 0xfa, 0x77, 0xc3, 0xac, 0x5f, 0x1c, 0x45, + 0x05, 0x8b, 0xe6, 0x8a, 0x7a, 0x96, 0x2e, 0x93, 0xac, 0x5e, 0xfb, 0x43, + 0x63, 0xe0, 0xf9, 0x19, 0x13, 0x50, 0xd1, 0x87, 0xe8, 0x41, 0xdc, 0xe1, + 0x2c, 0x5f, 0xbe, 0x79, 0xcf, 0x2c, 0x5c, 0x2e, 0x2c, 0x56, 0x1e, 0x07, + 0x0a, 0x2f, 0x0b, 0x06, 0xb1, 0x44, 0x89, 0x6f, 0x2c, 0x47, 0x10, 0xd4, + 0x17, 0xa4, 0x4e, 0x8f, 0xf2, 0x26, 0x9c, 0x17, 0x28, 0xc8, 0x79, 0x0b, + 0xeb, 0xdd, 0x03, 0x3a, 0xc5, 0xf7, 0xf6, 0xc0, 0x96, 0x2f, 0x86, 0x22, + 0x82, 0xc5, 0xb8, 0xc7, 0x90, 0x19, 0x2d, 0xff, 0xbb, 0x03, 0x7b, 0x8e, + 0x5d, 0xc1, 0x62, 0xe6, 0x02, 0xc5, 0xfa, 0x41, 0x84, 0x05, 0x8a, 0xc3, + 0x7c, 0xe2, 0xf7, 0x98, 0xfd, 0xac, 0x5b, 0x71, 0x9b, 0xdc, 0x1f, 0xbf, + 0xbc, 0x4c, 0x0c, 0x25, 0x8b, 0x46, 0xb5, 0x8b, 0xc5, 0x30, 0x58, 0xbf, + 0xf6, 0x73, 0xd0, 0xc3, 0x4b, 0x00, 0xb1, 0x7e, 0x26, 0x06, 0x12, 0xc5, + 0xe1, 0xe1, 0x2c, 0x51, 0x88, 0xe1, 0xeb, 0x4b, 0x06, 0x30, 0xc3, 0x9e, + 0x3f, 0xea, 0x26, 0xac, 0x54, 0x46, 0xf0, 0xbc, 0x14, 0x61, 0x17, 0xcf, + 0xf3, 0xb2, 0xc5, 0xff, 0x82, 0x1e, 0xa7, 0xec, 0x38, 0x1d, 0x62, 0xff, + 0xff, 0xfe, 0xd0, 0x27, 0xdc, 0x33, 0xd0, 0xc0, 0x47, 0x61, 0x83, 0xc1, + 0xcb, 0x6b, 0x08, 0x08, 0x20, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xe7, 0x93, + 0xb0, 0xf6, 0x17, 0x0c, 0xc1, 0x8b, 0x50, 0xfb, 0x99, 0x9a, 0x04, 0xfb, + 0x86, 0x7a, 0x18, 0x08, 0xec, 0x30, 0x78, 0x39, 0x6d, 0x61, 0x01, 0x06, + 0x17, 0xff, 0xdc, 0xec, 0xc1, 0xe0, 0xe5, 0xb5, 0x84, 0x05, 0x8a, 0xfa, + 0x69, 0x9e, 0x87, 0xdd, 0xff, 0xff, 0x8c, 0xf4, 0x30, 0x11, 0xd8, 0x60, + 0xf0, 0x72, 0xda, 0xc2, 0x02, 0x10, 0x5f, 0xfd, 0x9e, 0x33, 0x7f, 0xbf, + 0xfe, 0xe0, 0x55, 0xa1, 0x65, 0x41, 0x19, 0x1c, 0x74, 0xbd, 0x3b, 0x46, + 0x62, 0xaf, 0x2e, 0x47, 0xbd, 0xe8, 0x78, 0xde, 0x04, 0xf6, 0xb1, 0x73, + 0x79, 0x62, 0xf1, 0x67, 0x52, 0xc5, 0xda, 0x35, 0x62, 0xe6, 0xdd, 0x62, + 0xd9, 0x86, 0xc7, 0x71, 0x9b, 0xf1, 0xf8, 0x13, 0x76, 0xb1, 0x43, 0x4c, + 0x9d, 0xd4, 0x4e, 0x3c, 0xc2, 0xfe, 0x50, 0x0c, 0x9a, 0xa5, 0x73, 0x4f, + 0xb2, 0x2e, 0x4e, 0x2d, 0x5f, 0xa2, 0x83, 0xeb, 0x8b, 0x17, 0x08, 0x96, + 0x2b, 0x0f, 0x07, 0xe5, 0x57, 0xed, 0xa7, 0xcf, 0x12, 0xc5, 0xf0, 0x7c, + 0x9c, 0x58, 0xbf, 0x07, 0xd5, 0x25, 0x05, 0x8a, 0xdc, 0xfe, 0x7b, 0x2a, + 0x01, 0x1d, 0xff, 0xfe, 0xfc, 0xfb, 0x8f, 0xf7, 0xd1, 0x66, 0xc6, 0x64, + 0x9d, 0x62, 0xfb, 0x86, 0x6b, 0x16, 0x2f, 0xbf, 0xbb, 0xf1, 0x62, 0xf6, + 0xa7, 0xb5, 0x8a, 0x94, 0x7c, 0x6c, 0x62, 0xcc, 0x3e, 0x24, 0x0c, 0x92, + 0xff, 0xff, 0x83, 0x1f, 0xe6, 0x1e, 0xcc, 0x0b, 0x85, 0x9e, 0xf3, 0xec, + 0xb1, 0x7f, 0xc3, 0x76, 0xe9, 0x3d, 0x1b, 0xeb, 0x17, 0x37, 0x6b, 0x16, + 0xc5, 0x8b, 0x36, 0xc8, 0xce, 0xed, 0xa5, 0x8f, 0x3a, 0x0c, 0x5e, 0x72, + 0xc5, 0x8b, 0xf6, 0xb4, 0xc0, 0x95, 0x8a, 0x81, 0xe1, 0xb0, 0xdd, 0x75, + 0xaf, 0xa2, 0xb5, 0x35, 0xcd, 0xc8, 0xe3, 0x79, 0xca, 0x53, 0x39, 0xb1, + 0x9a, 0x6e, 0xc6, 0xf3, 0xb4, 0xfa, 0xac, 0x47, 0xce, 0xcb, 0xf5, 0x26, + 0x9e, 0xb1, 0x03, 0x5f, 0x5e, 0xd2, 0x52, 0x92, 0xf9, 0x3a, 0x1d, 0xe7, + 0xc1, 0x47, 0x24, 0x14, 0x63, 0x01, 0xc2, 0x22, 0xe8, 0xde, 0x34, 0x58, + 0xbe, 0xc0, 0x6a, 0x56, 0x2f, 0x04, 0x10, 0x49, 0x17, 0x98, 0x86, 0x91, + 0x18, 0x68, 0x6f, 0xb3, 0x59, 0xe5, 0x8a, 0xfa, 0x25, 0x00, 0x87, 0xc2, + 0xfb, 0xff, 0x8d, 0x60, 0xca, 0x5c, 0x79, 0xdf, 0x96, 0x2f, 0x0b, 0xaf, + 0xc5, 0x8b, 0xce, 0xd0, 0x58, 0xbf, 0xfd, 0x9e, 0xf3, 0x11, 0xad, 0xe2, + 0x60, 0x2c, 0x54, 0xa3, 0x35, 0xd1, 0xbe, 0x44, 0x43, 0x97, 0xf8, 0xb3, + 0xfe, 0x29, 0x02, 0xc5, 0xff, 0xe8, 0x39, 0x67, 0xa4, 0x21, 0xe9, 0xa0, + 0xb1, 0x7f, 0x7a, 0x18, 0x4e, 0x35, 0x8b, 0xff, 0x84, 0xda, 0x16, 0xd2, + 0x68, 0x65, 0xe5, 0x8b, 0xcf, 0x17, 0x3b, 0x3f, 0x5e, 0x16, 0xdf, 0xf8, + 0xb3, 0x69, 0xee, 0x10, 0x93, 0xac, 0x5f, 0xff, 0x85, 0x39, 0xb6, 0xa5, + 0xe1, 0x26, 0x85, 0x9f, 0x58, 0xa2, 0x44, 0xbf, 0x90, 0x2b, 0x13, 0xad, + 0xfc, 0x2f, 0xc3, 0x86, 0x65, 0xe2, 0x98, 0x2c, 0x5f, 0x6b, 0x4e, 0x75, + 0x8b, 0x70, 0x66, 0xfd, 0xc7, 0x2a, 0x08, 0xa0, 0xf3, 0xd5, 0xf7, 0x0d, + 0xff, 0x45, 0x8b, 0xb6, 0x1a, 0xc5, 0xff, 0xfb, 0xd3, 0x9b, 0x37, 0xb7, + 0xfb, 0x68, 0x26, 0xed, 0x62, 0x8c, 0x44, 0xc9, 0xc9, 0xf8, 0x33, 0x5b, + 0x2b, 0x6c, 0x29, 0x4f, 0xfe, 0x85, 0xe5, 0xfb, 0x59, 0xbc, 0xfd, 0x62, + 0xff, 0xc5, 0xbf, 0xbd, 0x84, 0x53, 0x1e, 0xb1, 0x7e, 0xf3, 0x1f, 0x09, + 0x62, 0xff, 0xf7, 0xdf, 0x5a, 0x7d, 0xb9, 0x87, 0x98, 0xf5, 0x8a, 0x94, + 0x5b, 0x62, 0x0e, 0xe4, 0xf7, 0x8c, 0x36, 0x39, 0x62, 0xf7, 0x98, 0x6b, + 0x17, 0x34, 0x7a, 0xc5, 0x68, 0xf6, 0xb8, 0x47, 0xd0, 0x76, 0xfd, 0xf9, + 0x2c, 0x89, 0x62, 0xfe, 0xf6, 0x11, 0x37, 0x96, 0x2b, 0x73, 0xd4, 0xea, + 0x28, 0xbd, 0x07, 0xea, 0x58, 0xa9, 0x3c, 0x68, 0x89, 0xaf, 0xf1, 0xbd, + 0xfb, 0x53, 0x9d, 0xac, 0x5f, 0x01, 0xf4, 0x6a, 0x45, 0xfe, 0x96, 0xd7, + 0xc2, 0x61, 0xac, 0x5f, 0x6b, 0x4f, 0xb2, 0xc5, 0x49, 0xfe, 0x0c, 0x91, + 0x8d, 0x2e, 0x16, 0x2c, 0x56, 0xe7, 0x89, 0xe2, 0xdb, 0xf6, 0xbf, 0x87, + 0x12, 0xc5, 0xfb, 0x35, 0x99, 0x12, 0xc5, 0x39, 0xe8, 0x86, 0x53, 0x7b, + 0x69, 0x09, 0x62, 0xfb, 0xe6, 0x0e, 0x56, 0x2a, 0x4f, 0x0d, 0x87, 0xea, + 0x0c, 0x92, 0x61, 0xc3, 0xf7, 0x25, 0xd3, 0x1a, 0x7d, 0xdc, 0x37, 0xde, + 0x11, 0x3a, 0x86, 0x5b, 0x11, 0x14, 0x3d, 0xf8, 0xe9, 0xe6, 0x5b, 0xf3, + 0x6b, 0x59, 0xda, 0xc5, 0xff, 0xef, 0x7d, 0xd8, 0x19, 0xa1, 0xc9, 0x41, + 0x62, 0xff, 0xf7, 0x66, 0x76, 0x09, 0x2d, 0xdb, 0x62, 0x65, 0x8a, 0x94, + 0x60, 0x61, 0x49, 0x24, 0xdf, 0xa7, 0x81, 0x94, 0x16, 0x2f, 0x6e, 0xf0, + 0x58, 0xbf, 0xd3, 0xe6, 0xd6, 0xb3, 0xb5, 0x8a, 0x30, 0xf4, 0xbe, 0x3d, + 0x7f, 0xed, 0xf3, 0x58, 0xfc, 0xfc, 0xf4, 0x58, 0xbf, 0xf3, 0x76, 0xc3, + 0x6e, 0xf4, 0xe6, 0xac, 0x5f, 0xa7, 0xab, 0x6c, 0x09, 0x62, 0xff, 0xe6, + 0xce, 0xfd, 0x84, 0x28, 0x67, 0x16, 0x2f, 0xa6, 0x02, 0xd2, 0xc5, 0xff, + 0xff, 0xcc, 0xfe, 0x7f, 0xee, 0xe6, 0x41, 0xfe, 0xc5, 0xe8, 0x66, 0xb1, + 0x62, 0xec, 0xfa, 0xc5, 0xd9, 0xd4, 0xb1, 0x51, 0x1b, 0x1f, 0x8b, 0xd7, + 0xd1, 0x88, 0xd0, 0xa2, 0xbf, 0x38, 0x18, 0x80, 0xb1, 0x7f, 0xa7, 0xbe, + 0x4f, 0xa4, 0x6b, 0x14, 0x03, 0xdb, 0x22, 0x7b, 0xf6, 0x73, 0x3b, 0xf2, + 0xc5, 0xff, 0xf7, 0xf1, 0xf5, 0x0f, 0xb8, 0xb7, 0xfe, 0x01, 0x62, 0xf7, + 0x03, 0xe1, 0x89, 0x8e, 0xe4, 0x20, 0x98, 0x87, 0xc5, 0x34, 0x35, 0x6d, + 0xfd, 0x91, 0x9d, 0x07, 0xe8, 0x24, 0x5b, 0xc4, 0x4f, 0x4a, 0x04, 0xbb, + 0x90, 0x58, 0xbd, 0xb0, 0xb8, 0xb1, 0x74, 0xc4, 0xb1, 0x7f, 0x9c, 0x9b, + 0xdf, 0xc3, 0xac, 0x53, 0x1f, 0x49, 0x0f, 0xf8, 0x62, 0xfe, 0x83, 0xf9, + 0xca, 0x0b, 0x17, 0xf7, 0x1d, 0xf6, 0x7f, 0xac, 0x5b, 0x52, 0x7b, 0x70, + 0x2d, 0xbf, 0x44, 0x53, 0xee, 0x2c, 0x5f, 0xff, 0xee, 0x4b, 0xfd, 0xe0, + 0x53, 0xb9, 0x85, 0x80, 0x17, 0x16, 0x2f, 0xff, 0xff, 0xfa, 0x79, 0x3e, + 0xdb, 0x02, 0xd6, 0x7d, 0x83, 0xe6, 0x1a, 0xc4, 0x09, 0x29, 0x8b, 0xf2, + 0xb1, 0x7c, 0x26, 0xcd, 0x96, 0x2f, 0x1f, 0x36, 0x58, 0xbd, 0x07, 0xe8, + 0x47, 0x82, 0x19, 0x1d, 0xfb, 0x9f, 0x6d, 0xe5, 0x62, 0xfc, 0xdb, 0x04, + 0xd0, 0x58, 0xa9, 0x54, 0x1f, 0xb1, 0x3e, 0x8a, 0x49, 0x87, 0xd0, 0xd6, + 0x08, 0xd4, 0x32, 0x9b, 0xfb, 0xbe, 0x61, 0xdf, 0xeb, 0x17, 0xfd, 0xcf, + 0xcb, 0x6b, 0x59, 0xda, 0xc5, 0xf4, 0x9d, 0xbe, 0xb1, 0x7f, 0xff, 0xa1, + 0xec, 0x2f, 0x70, 0xce, 0x73, 0x35, 0x84, 0xd0, 0x58, 0xb1, 0xa6, 0x22, + 0x0f, 0xb2, 0x2a, 0xc4, 0x74, 0xbc, 0x2f, 0x6f, 0x81, 0xec, 0xd9, 0x62, + 0x96, 0x2d, 0xd4, 0xb1, 0x47, 0x34, 0x21, 0x86, 0x54, 0x9f, 0x39, 0xd1, + 0x6f, 0xff, 0xf0, 0x04, 0xc5, 0xb8, 0x53, 0xa2, 0xce, 0xe1, 0xe9, 0xed, + 0x62, 0xff, 0xe8, 0xc1, 0x94, 0x8b, 0x7c, 0x35, 0xf4, 0xb1, 0x7b, 0x4d, + 0xc5, 0x8b, 0xb0, 0x25, 0x8a, 0x93, 0xfe, 0x1a, 0x4f, 0x07, 0x6f, 0xa5, + 0xb5, 0xc5, 0x8b, 0xde, 0xfc, 0xac, 0x5f, 0x67, 0xbe, 0xeb, 0x15, 0x88, + 0x8f, 0xf9, 0x73, 0x11, 0x10, 0xed, 0xff, 0xf6, 0x11, 0xa6, 0x07, 0xe7, + 0xfb, 0x9b, 0xf7, 0x58, 0xbf, 0x7d, 0x8b, 0xdc, 0x58, 0xb7, 0xd6, 0x29, + 0x62, 0xe9, 0x2d, 0xcf, 0x19, 0x8a, 0x38, 0x25, 0x58, 0x8d, 0x2f, 0xc2, + 0x66, 0xfe, 0x29, 0x8b, 0x33, 0x75, 0x8b, 0xfb, 0x6f, 0xb7, 0xb5, 0x2b, + 0x17, 0xbd, 0x3f, 0x58, 0xbf, 0xa1, 0x91, 0xec, 0x40, 0x58, 0xac, 0x3c, + 0xdf, 0x0e, 0xde, 0x86, 0x71, 0x62, 0xf4, 0xf7, 0xc5, 0x8b, 0xfc, 0x3f, + 0xcc, 0x4c, 0xdd, 0xac, 0x5d, 0xee, 0x2c, 0x5f, 0xfc, 0xfe, 0xcc, 0x3c, + 0xf3, 0x42, 0xf2, 0xc5, 0x39, 0xee, 0x7c, 0x62, 0xfb, 0x82, 0x28, 0x2c, + 0x5f, 0x89, 0xbd, 0x09, 0x58, 0xbf, 0xc7, 0xee, 0x1e, 0xc8, 0xb8, 0xb1, + 0x5b, 0xa2, 0x8b, 0xb2, 0x1e, 0x11, 0x86, 0x4f, 0x7b, 0xe0, 0xe8, 0xb1, + 0x5b, 0x27, 0x9c, 0x31, 0xdd, 0x0f, 0x14, 0x66, 0x7d, 0x48, 0x17, 0xbb, + 0x68, 0xf5, 0x8b, 0xfd, 0xef, 0xb1, 0xf5, 0x9b, 0x2c, 0x57, 0xcf, 0x58, + 0x04, 0x37, 0xa3, 0x9c, 0xd5, 0x8b, 0xfb, 0xd3, 0xd0, 0x9b, 0xb5, 0x8a, + 0x58, 0xa9, 0x3d, 0xde, 0xc8, 0x63, 0x8c, 0x2a, 0x0b, 0xa4, 0xe3, 0x8c, + 0x31, 0xc9, 0xf4, 0x5d, 0xf7, 0xc6, 0x8f, 0xbc, 0xa1, 0x55, 0xe7, 0xfb, + 0xd1, 0x30, 0x16, 0x2f, 0xc2, 0x21, 0xb6, 0xcb, 0x17, 0xff, 0xdf, 0x76, + 0x06, 0x14, 0xf7, 0xcc, 0xef, 0xcb, 0x16, 0x37, 0x11, 0x2e, 0x71, 0xef, + 0x14, 0xdf, 0xfb, 0x40, 0x3b, 0xf0, 0x3e, 0x4e, 0x2c, 0x5f, 0x75, 0x7f, + 0x3a, 0x2c, 0x56, 0x1f, 0x43, 0x20, 0x5e, 0x9e, 0xe3, 0xd6, 0x2f, 0xb8, + 0x4e, 0x6a, 0xc5, 0x68, 0xf1, 0x3c, 0x43, 0x7d, 0x83, 0x68, 0x2c, 0x50, + 0xcf, 0x10, 0xd2, 0x2b, 0xf9, 0xa1, 0xee, 0x49, 0xab, 0x17, 0xe9, 0x76, + 0xf7, 0x16, 0x2f, 0xa0, 0xfd, 0xc1, 0x62, 0xe9, 0xd7, 0xcf, 0x2d, 0x89, + 0xec, 0x6f, 0xd1, 0x4c, 0x13, 0xd5, 0xff, 0xe2, 0x31, 0xe4, 0x7f, 0xc3, + 0xff, 0x38, 0xb1, 0x7c, 0x72, 0x98, 0x96, 0x2e, 0x9e, 0x8b, 0x17, 0xff, + 0xdf, 0x78, 0x3e, 0x98, 0x1e, 0x29, 0x3f, 0x16, 0x2f, 0x4e, 0x81, 0x28, + 0x8b, 0xc2, 0x3d, 0xc6, 0x6b, 0x13, 0x15, 0xf4, 0x35, 0x6e, 0x8f, 0xe2, + 0xc5, 0xff, 0x73, 0x7f, 0xb0, 0xe3, 0x7e, 0xb6, 0x36, 0x58, 0xa3, 0x51, + 0x1c, 0xc5, 0x1e, 0x1b, 0xa9, 0x5c, 0x0d, 0x84, 0x27, 0xb2, 0x15, 0x0f, + 0x0c, 0x96, 0x8f, 0x3a, 0xe2, 0x02, 0xc5, 0xfd, 0xdc, 0x30, 0xf3, 0xba, + 0xc5, 0xf4, 0x69, 0x1d, 0x1d, 0x1c, 0xb1, 0x7d, 0x9a, 0x93, 0xac, 0x5b, + 0x61, 0x9e, 0xa7, 0x0c, 0xaf, 0xd1, 0x48, 0xda, 0x25, 0x8b, 0xf9, 0xfc, + 0x0c, 0x87, 0x16, 0x2f, 0xf4, 0x03, 0xe0, 0x3f, 0x20, 0x58, 0xbf, 0x3f, + 0x03, 0xec, 0x0b, 0x17, 0xe2, 0xcf, 0x49, 0xd6, 0x2f, 0xcc, 0xfe, 0x92, + 0x58, 0xbe, 0xe7, 0xf3, 0x8b, 0x16, 0x98, 0x22, 0x6d, 0xca, 0xfe, 0x4e, + 0x22, 0x6b, 0xb3, 0xa2, 0xc5, 0xff, 0x14, 0xf9, 0xf4, 0xfe, 0x12, 0xc5, + 0x6e, 0x7a, 0x2e, 0x33, 0x7f, 0x9f, 0xcf, 0xa6, 0xda, 0x56, 0x2a, 0x4f, + 0x55, 0x88, 0xaf, 0x33, 0x76, 0xb1, 0x46, 0x2a, 0x4d, 0x81, 0x57, 0x65, + 0xda, 0x86, 0x8f, 0xe1, 0xcf, 0xd0, 0x82, 0xfc, 0xc3, 0xea, 0xcd, 0x2c, + 0x5f, 0xed, 0x66, 0xff, 0x9e, 0x98, 0xb1, 0x5d, 0x62, 0xbd, 0x99, 0x17, + 0x1c, 0x21, 0x1e, 0x53, 0xb1, 0xd9, 0xd8, 0xae, 0xf1, 0xc5, 0xc5, 0x8b, + 0xe7, 0x3e, 0x12, 0xc5, 0xa5, 0x8d, 0xff, 0x87, 0xaf, 0xf3, 0xf8, 0x3d, + 0x4f, 0xe5, 0x62, 0xfd, 0x21, 0x93, 0x41, 0x62, 0xff, 0xf6, 0x98, 0xbd, + 0x80, 0x8e, 0x91, 0x8e, 0x56, 0x2f, 0xfe, 0x29, 0x00, 0xc5, 0x3b, 0x4f, + 0x70, 0x58, 0xbf, 0xa1, 0xa9, 0x83, 0x69, 0x62, 0xfd, 0xee, 0x75, 0xa6, + 0xf9, 0x62, 0xc7, 0x58, 0xa9, 0x3c, 0x2c, 0x30, 0xbd, 0xe9, 0x09, 0x62, + 0xf7, 0xc3, 0xd2, 0xc5, 0x40, 0xde, 0xf8, 0x7a, 0xf7, 0xb0, 0x6b, 0x17, + 0xfc, 0x2d, 0x1a, 0xcf, 0xc7, 0xe8, 0xb1, 0x7e, 0xd0, 0x0e, 0xfc, 0x58, + 0xb8, 0x06, 0x47, 0x1f, 0x28, 0x67, 0x96, 0xce, 0xd1, 0x6a, 0x50, 0x82, + 0xbe, 0x6d, 0xcb, 0x16, 0x2e, 0x9e, 0xd6, 0x2f, 0x1e, 0x77, 0x58, 0xbf, + 0x7d, 0xf3, 0xbf, 0x2c, 0x5f, 0xff, 0xff, 0xe6, 0xe7, 0xda, 0x1b, 0xfd, + 0xfc, 0x20, 0x1d, 0xa1, 0x9d, 0x1f, 0xcf, 0xfd, 0xda, 0x0b, 0x15, 0xb2, + 0x3c, 0x70, 0x61, 0xc7, 0x88, 0xa6, 0x86, 0xaa, 0xbb, 0xb5, 0xd3, 0xc3, + 0x58, 0x8b, 0x7d, 0x18, 0x9d, 0x2c, 0x5e, 0xe9, 0x9a, 0x58, 0xbd, 0xec, + 0x02, 0xc5, 0xfd, 0xc9, 0x8a, 0x02, 0x1a, 0xc5, 0x61, 0xf6, 0x00, 0x7c, + 0x31, 0xdb, 0xee, 0x71, 0xfa, 0x2c, 0x5f, 0xff, 0xb0, 0x8d, 0x6e, 0x7d, + 0x9c, 0x07, 0x9e, 0xe0, 0xb1, 0x7f, 0xf1, 0xc5, 0xa9, 0x33, 0x35, 0xbc, + 0xe2, 0xc5, 0x4a, 0x30, 0x77, 0x25, 0x75, 0x6b, 0xf0, 0xba, 0xfd, 0x3f, + 0x16, 0x2f, 0xff, 0xfc, 0x23, 0x7b, 0xf0, 0x98, 0x30, 0xf5, 0xc1, 0x36, + 0x85, 0xb4, 0x9a, 0xb1, 0x79, 0xe2, 0xe6, 0x22, 0x8f, 0x45, 0xd7, 0xff, + 0xb5, 0x17, 0xdc, 0x82, 0x6f, 0x86, 0x5e, 0x58, 0xbe, 0x83, 0x7b, 0x8b, + 0x15, 0x87, 0xe1, 0x12, 0x6d, 0xff, 0xbb, 0xdd, 0xf4, 0x79, 0xc2, 0x1a, + 0xc5, 0xc1, 0xe7, 0xd3, 0x06, 0xe4, 0x29, 0x3c, 0x45, 0x7f, 0xef, 0xbf, + 0x7c, 0xc2, 0x37, 0x09, 0x62, 0xff, 0xfe, 0x78, 0xb9, 0xc1, 0x36, 0x85, + 0xb4, 0x9a, 0x19, 0x79, 0x62, 0xdc, 0xc4, 0x70, 0xee, 0x85, 0xf3, 0xfb, + 0xe3, 0x91, 0x4a, 0xc5, 0xff, 0x38, 0xff, 0x30, 0xce, 0xfc, 0xb1, 0x7e, + 0x9e, 0x38, 0x3b, 0x58, 0xb9, 0xba, 0x2c, 0x5d, 0xbc, 0xf4, 0x3c, 0x20, + 0xca, 0x6f, 0xff, 0x49, 0xbc, 0xec, 0x04, 0xc7, 0x7f, 0xca, 0xc5, 0x8d, + 0x94, 0xc6, 0x46, 0x43, 0x8f, 0x9f, 0x31, 0xac, 0x4e, 0x49, 0xa3, 0x4f, + 0xbf, 0x79, 0xbc, 0x29, 0x58, 0xbf, 0xbf, 0x22, 0xeb, 0xcc, 0x1a, 0xc5, + 0xff, 0xfd, 0xf7, 0xf7, 0xda, 0x01, 0x8d, 0xb6, 0x1f, 0xdc, 0xeb, 0x17, + 0xfe, 0x7f, 0x43, 0x01, 0xc2, 0xc0, 0x2c, 0x54, 0x19, 0x66, 0xe3, 0x34, + 0xc2, 0x83, 0x53, 0x3b, 0x46, 0x79, 0x63, 0xd1, 0x2b, 0xe9, 0xe3, 0xf0, + 0xf0, 0x29, 0xc4, 0xbe, 0x14, 0x78, 0xa0, 0x46, 0xbd, 0x17, 0xaf, 0x02, + 0x7b, 0x58, 0xba, 0x7b, 0x58, 0xa7, 0x36, 0xc0, 0x1e, 0xbf, 0xc1, 0x82, + 0x4b, 0x3b, 0xf2, 0xc5, 0xdd, 0xca, 0xc5, 0x70, 0xf3, 0x63, 0x8d, 0x6f, + 0xf7, 0xca, 0x7b, 0x79, 0xfa, 0xc5, 0xfc, 0xde, 0x00, 0x65, 0x05, 0x8b, + 0x09, 0x62, 0xb7, 0x3f, 0x4f, 0x99, 0x86, 0x5f, 0x7e, 0xdf, 0xf2, 0xf1, + 0xeb, 0x15, 0x1b, 0xbb, 0x38, 0xd9, 0xa4, 0xee, 0x42, 0x37, 0xa1, 0x96, + 0xe4, 0xbe, 0xa3, 0x5b, 0x7b, 0x84, 0x0b, 0xca, 0x97, 0x8f, 0x6c, 0xd4, + 0x63, 0x07, 0x84, 0x6f, 0xc8, 0x5a, 0x7a, 0x60, 0xa7, 0x49, 0xb9, 0x38, + 0x6f, 0xe8, 0x53, 0x0a, 0x96, 0xb9, 0xd2, 0x30, 0xf8, 0xe6, 0xd0, 0xe1, + 0x33, 0xd4, 0x63, 0x7f, 0xe6, 0x71, 0x8b, 0xdc, 0xdb, 0x02, 0x58, 0xbb, + 0xac, 0x25, 0x8b, 0xf7, 0x30, 0xd9, 0xe2, 0xc5, 0xfa, 0x3b, 0x09, 0x8d, + 0x58, 0xbf, 0x76, 0x76, 0x20, 0x2c, 0x5f, 0xef, 0x38, 0x5e, 0xe3, 0x69, + 0x62, 0xda, 0x58, 0xb4, 0x16, 0x2c, 0xdf, 0x34, 0x8c, 0x25, 0x7f, 0xdc, + 0x30, 0x51, 0x37, 0x50, 0x8d, 0x58, 0xbf, 0xfc, 0xd1, 0xfb, 0xfd, 0xc8, + 0x5e, 0x83, 0x81, 0x62, 0xff, 0xf7, 0x3c, 0x2d, 0x8c, 0x13, 0x0f, 0xed, + 0x12, 0xc5, 0x18, 0x9d, 0x84, 0x95, 0xf6, 0x53, 0xa5, 0x96, 0x25, 0x24, + 0x11, 0x27, 0x5f, 0xb8, 0xe5, 0xdc, 0x16, 0x2f, 0xd2, 0xff, 0x9d, 0x2c, + 0x54, 0x79, 0xe8, 0x44, 0x53, 0x7f, 0x64, 0x4c, 0xc5, 0xb2, 0xc5, 0xfd, + 0xd5, 0xbf, 0xe7, 0xbe, 0xa5, 0x8b, 0xe6, 0xe3, 0xe9, 0x62, 0x8c, 0x44, + 0x3b, 0x97, 0x7c, 0xde, 0xff, 0x16, 0xb3, 0xb8, 0x49, 0x2c, 0x5f, 0x19, + 0x8d, 0x1e, 0xb1, 0x58, 0x7b, 0x20, 0x33, 0xbf, 0xf8, 0xbe, 0xdc, 0x2c, + 0x34, 0xdc, 0x8f, 0x58, 0xbf, 0xed, 0x47, 0x3f, 0xf1, 0xbb, 0x02, 0xc5, + 0x4a, 0x29, 0xb0, 0x85, 0x92, 0x2f, 0xf4, 0xeb, 0x53, 0x06, 0xfa, 0xc5, + 0xcf, 0x8b, 0x17, 0xe0, 0xcb, 0xf9, 0xda, 0xc5, 0x6e, 0x7e, 0x7a, 0x33, + 0x00, 0xb5, 0xfb, 0x99, 0xa0, 0x47, 0xac, 0x5f, 0xff, 0x9f, 0xd2, 0x7c, + 0xef, 0xd2, 0x70, 0xf4, 0xc0, 0x58, 0xbc, 0x4c, 0x35, 0x8b, 0xff, 0xa4, + 0x5b, 0xe7, 0x7e, 0x8c, 0x08, 0x20, 0x96, 0x29, 0xcf, 0xa8, 0x87, 0x2f, + 0xf7, 0xe7, 0xbe, 0xa9, 0x78, 0xe5, 0x8b, 0xfe, 0x7f, 0x71, 0xfd, 0x3e, + 0xe2, 0xc5, 0xfe, 0xfe, 0x6d, 0xf9, 0x10, 0x6b, 0x17, 0xfd, 0x23, 0x2c, + 0xf7, 0x0f, 0x2b, 0x17, 0xff, 0x67, 0xbf, 0x90, 0x2c, 0x00, 0xb8, 0xb1, + 0x7d, 0xa7, 0xf0, 0x96, 0x2f, 0x69, 0x80, 0xb1, 0x4e, 0x78, 0x01, 0x91, + 0xd7, 0xd1, 0x4d, 0xe8, 0x42, 0x5f, 0x44, 0x58, 0x05, 0x8b, 0xff, 0xf7, + 0x30, 0x5d, 0x7e, 0x05, 0x8f, 0xd3, 0x21, 0x24, 0xb1, 0x52, 0x8a, 0x6d, + 0x8a, 0x3c, 0x47, 0x7f, 0xdc, 0x9d, 0x7a, 0x63, 0x06, 0xeb, 0x17, 0x4b, + 0xac, 0x5f, 0xa7, 0x5b, 0x4e, 0xeb, 0x15, 0xb2, 0xbe, 0x68, 0x16, 0x0e, + 0x18, 0x31, 0xe4, 0x11, 0x1d, 0x68, 0xe4, 0xe6, 0xc5, 0x1c, 0x27, 0x0c, + 0x3a, 0x1e, 0x47, 0x0b, 0x5e, 0xff, 0xe5, 0x62, 0xef, 0xca, 0xc5, 0x61, + 0xb4, 0x61, 0xdb, 0xff, 0xfb, 0x3e, 0x66, 0x1d, 0xff, 0x26, 0x73, 0x98, + 0x40, 0x58, 0xbf, 0xf9, 0xf5, 0x30, 0xfc, 0xc4, 0x42, 0x35, 0x62, 0xbe, + 0x8a, 0x2e, 0x2e, 0x5f, 0xf4, 0xc4, 0x53, 0xcc, 0x98, 0x2c, 0x5f, 0xfb, + 0x98, 0x2e, 0xbe, 0x13, 0x1e, 0x43, 0x58, 0xad, 0x8f, 0xfc, 0xe7, 0x17, + 0x4c, 0x4b, 0x16, 0x8e, 0x58, 0xa3, 0x0d, 0x6e, 0xe3, 0x17, 0xf1, 0xbe, + 0x9f, 0xcf, 0x16, 0x2f, 0xfb, 0x85, 0x9e, 0xe4, 0xeb, 0x65, 0x8b, 0xfd, + 0x39, 0xf0, 0xe7, 0x5b, 0x2c, 0x5f, 0xe1, 0xf5, 0x72, 0x62, 0x16, 0x96, + 0x2c, 0x75, 0x8b, 0xee, 0xfd, 0x9c, 0x58, 0xbf, 0x7e, 0x43, 0x2d, 0x96, + 0x2a, 0x07, 0x9d, 0x11, 0x25, 0xfb, 0xf3, 0xb9, 0x32, 0xc5, 0xf9, 0xfb, + 0xe3, 0x76, 0xb1, 0x7f, 0xfe, 0xcf, 0x72, 0x4f, 0xdf, 0x1c, 0x7f, 0xc7, + 0x35, 0x62, 0xfb, 0x8f, 0xad, 0x96, 0x28, 0xc4, 0xd4, 0x25, 0x81, 0xc8, + 0xfe, 0x50, 0x45, 0x5c, 0x57, 0xbf, 0xd8, 0x3c, 0xd4, 0x27, 0x4b, 0x17, + 0xbe, 0xfe, 0x58, 0xa9, 0x56, 0x81, 0x05, 0x07, 0x23, 0x88, 0xbf, 0x47, + 0x4c, 0x6a, 0x08, 0xe2, 0x78, 0xac, 0x19, 0x9d, 0xf9, 0xbf, 0x9d, 0xf9, + 0x62, 0xff, 0xd9, 0x84, 0x69, 0x66, 0x83, 0xf2, 0xc5, 0xff, 0x9b, 0xdc, + 0x9c, 0x21, 0xfe, 0x56, 0x2f, 0xb7, 0xfc, 0x89, 0x62, 0xbe, 0x7c, 0x3e, + 0x3d, 0xbf, 0xe1, 0x4c, 0x59, 0xce, 0x64, 0x7a, 0xc5, 0xff, 0x98, 0xb6, + 0x0b, 0x08, 0x7f, 0x95, 0x8b, 0x9f, 0x65, 0x8a, 0xc3, 0xd7, 0x23, 0xfb, + 0xfb, 0xdc, 0x0c, 0xa7, 0x75, 0x8b, 0xf1, 0x64, 0x53, 0x1e, 0xb1, 0x52, + 0x7b, 0x62, 0x30, 0xbf, 0xbb, 0x87, 0x03, 0x98, 0xf5, 0x8a, 0xd1, 0xea, + 0x88, 0x86, 0xff, 0x82, 0x62, 0xdb, 0x8f, 0xdf, 0x96, 0x2f, 0x6f, 0x31, + 0xeb, 0x17, 0xfa, 0x2f, 0xb6, 0xb4, 0xe3, 0x58, 0xac, 0x3d, 0x66, 0x21, + 0xbf, 0xcd, 0xd8, 0x7a, 0x73, 0xe2, 0xc5, 0xfc, 0xc5, 0xb1, 0xdb, 0xcb, + 0x14, 0x47, 0xc7, 0xc3, 0x5b, 0xfb, 0x09, 0xc7, 0x84, 0xb1, 0x7b, 0xec, + 0x75, 0x8b, 0xff, 0xd9, 0xee, 0x31, 0xf5, 0x8f, 0xf9, 0x1a, 0xc5, 0x41, + 0x12, 0x2e, 0x56, 0x43, 0xb7, 0xe0, 0xf5, 0x9d, 0x31, 0x62, 0xc7, 0x58, + 0xb0, 0xfe, 0x6f, 0x48, 0xae, 0xff, 0x16, 0x6d, 0xef, 0x49, 0xd6, 0x2a, + 0x4f, 0x68, 0x89, 0xaa, 0x0b, 0xa3, 0xa3, 0x29, 0xc8, 0x50, 0x1a, 0x45, + 0x14, 0x25, 0x35, 0x0d, 0x0f, 0x91, 0x14, 0x24, 0xb9, 0x08, 0x3f, 0x42, + 0xc8, 0x38, 0x62, 0xdf, 0x45, 0x09, 0x8f, 0x58, 0xbf, 0xa2, 0x83, 0xea, + 0x11, 0xa2, 0xc5, 0xd1, 0xb7, 0x5a, 0xb1, 0x7b, 0x8e, 0x12, 0xc5, 0xfe, + 0x35, 0x83, 0x90, 0x06, 0x75, 0x8b, 0xfd, 0x07, 0xd4, 0x33, 0xec, 0xb1, + 0x7d, 0x91, 0x37, 0x96, 0x2f, 0xef, 0x72, 0x28, 0x31, 0x2c, 0x5f, 0x9b, + 0xbc, 0xfb, 0x2c, 0x54, 0x9e, 0xb8, 0x8b, 0xe8, 0xc4, 0xde, 0xba, 0xea, + 0x6b, 0x84, 0x46, 0x8f, 0x44, 0x6f, 0xf3, 0x32, 0x7a, 0xa1, 0xaa, 0x0f, + 0xd4, 0x74, 0x36, 0x89, 0x62, 0xff, 0x6f, 0xf7, 0xf1, 0xb2, 0x4b, 0x17, + 0x67, 0x6b, 0x17, 0xa7, 0x5c, 0x58, 0xa9, 0x36, 0xa7, 0x18, 0xbf, 0xd0, + 0x72, 0x63, 0x7e, 0xeb, 0x17, 0xff, 0xa4, 0x7f, 0x11, 0xa1, 0xc8, 0xfe, + 0x2e, 0x2c, 0x5a, 0x3c, 0xc4, 0xc2, 0xc6, 0xd5, 0xd9, 0x00, 0x66, 0x77, + 0x66, 0xcb, 0x14, 0x62, 0x70, 0x13, 0x18, 0xf6, 0x25, 0x5f, 0xdb, 0x72, + 0x62, 0x16, 0x96, 0x2f, 0xe9, 0xea, 0xdf, 0xf3, 0xb2, 0xc5, 0xef, 0x37, + 0x16, 0x2f, 0xf8, 0x50, 0x07, 0xe5, 0xcb, 0x65, 0x8a, 0xc4, 0x5d, 0x9a, + 0x62, 0xe6, 0x64, 0x3b, 0x77, 0x5c, 0x65, 0x8b, 0xff, 0xff, 0x8b, 0x7c, + 0x29, 0x0b, 0xc6, 0xb7, 0x07, 0x2d, 0xaf, 0x84, 0xc3, 0x58, 0xb9, 0xbb, + 0x58, 0xb7, 0xa5, 0x11, 0x9c, 0x74, 0xbe, 0xc3, 0xcc, 0x7a, 0xc5, 0xfb, + 0x39, 0x25, 0x2b, 0x17, 0xfc, 0x18, 0x98, 0x38, 0x8c, 0x07, 0x96, 0x2f, + 0x98, 0x62, 0x35, 0xcf, 0x94, 0x44, 0xd5, 0x29, 0xca, 0x3c, 0x2a, 0x78, + 0x50, 0x28, 0x45, 0x5c, 0xfa, 0x58, 0xbe, 0x80, 0x82, 0xc5, 0x8b, 0xcc, + 0x28, 0x96, 0x2f, 0xd2, 0x2d, 0xc4, 0x75, 0x8a, 0x1a, 0x20, 0xfb, 0x17, + 0x22, 0x40, 0xc7, 0xae, 0xc1, 0x2c, 0x5c, 0xe4, 0xb1, 0x7d, 0x09, 0x2d, + 0xd6, 0x28, 0x66, 0xe7, 0x05, 0xaf, 0xfc, 0xff, 0x21, 0x45, 0xf9, 0xe9, + 0x8b, 0x16, 0x89, 0x62, 0xfb, 0xad, 0x69, 0xed, 0x62, 0xd2, 0x46, 0xef, + 0xc2, 0x74, 0x62, 0x30, 0x64, 0x81, 0xdf, 0x2f, 0xa4, 0x18, 0x4b, 0x17, + 0xc5, 0xcf, 0x3a, 0xc5, 0x41, 0xbe, 0x09, 0x1c, 0x7b, 0x39, 0x0b, 0x43, + 0x61, 0x5b, 0xbc, 0x65, 0xfd, 0xc2, 0x81, 0xe7, 0x05, 0xa3, 0xe1, 0xc5, + 0x14, 0x30, 0x75, 0x2f, 0x88, 0xf3, 0xb4, 0x4d, 0x2b, 0x38, 0x11, 0xd5, + 0x94, 0x3c, 0x79, 0x1e, 0x78, 0xa1, 0x93, 0xd0, 0xf8, 0x28, 0xc4, 0x63, + 0x8b, 0xc3, 0x21, 0xbe, 0x3c, 0x6a, 0xeb, 0x91, 0xa2, 0xc5, 0xde, 0xe2, + 0xc5, 0x39, 0xe6, 0xc4, 0x6b, 0x7c, 0x1c, 0x85, 0xc5, 0x8b, 0x81, 0xe5, + 0x8b, 0xfb, 0x43, 0xfe, 0x6b, 0x65, 0x8b, 0x09, 0x62, 0xe0, 0x7d, 0x62, + 0xfb, 0x5a, 0xce, 0x2c, 0x5d, 0x91, 0x2c, 0x5a, 0x06, 0x23, 0x4b, 0x62, + 0x5c, 0x18, 0xdc, 0xc0, 0xe2, 0x4c, 0x30, 0x19, 0x1d, 0xff, 0x70, 0x5a, + 0x03, 0x8f, 0xf2, 0xb1, 0x7d, 0xe6, 0x2c, 0x58, 0xbe, 0xea, 0x92, 0x82, + 0xc5, 0x39, 0xe3, 0x06, 0x43, 0x7c, 0x4d, 0xee, 0x2c, 0x5e, 0xd3, 0x74, + 0x58, 0xbf, 0xec, 0xea, 0x67, 0x18, 0xbd, 0xc5, 0x8b, 0xf6, 0x87, 0x98, + 0x4b, 0x17, 0xff, 0xa7, 0x73, 0x39, 0xcc, 0xfb, 0xf0, 0x5b, 0x2c, 0x5f, + 0x1b, 0xa6, 0x09, 0x62, 0xff, 0xcf, 0x9f, 0x9e, 0x9c, 0xfc, 0xf6, 0xb1, + 0x58, 0x7c, 0xd1, 0xe4, 0xb7, 0xf7, 0x7a, 0x17, 0x7e, 0x82, 0xc5, 0xfc, + 0x16, 0x10, 0xff, 0x2b, 0x17, 0xfb, 0x83, 0x29, 0x08, 0x78, 0xb1, 0x66, + 0xec, 0xf8, 0xbe, 0x5d, 0x74, 0xec, 0xb1, 0x58, 0xa9, 0x42, 0x22, 0x2d, + 0x0f, 0xb1, 0xe1, 0x13, 0xf2, 0x16, 0x82, 0x24, 0x0a, 0x12, 0x81, 0x94, + 0x5f, 0xf6, 0xfd, 0xf1, 0xe2, 0x29, 0x1a, 0xc5, 0xff, 0xdc, 0xd6, 0x6f, + 0xf9, 0xd4, 0xfe, 0x56, 0x2f, 0xbd, 0xec, 0xd9, 0x62, 0x89, 0x14, 0xbe, + 0x3c, 0x09, 0x16, 0xfe, 0x69, 0x06, 0x77, 0x05, 0x8a, 0x58, 0xbf, 0xc5, + 0xac, 0xe6, 0x3f, 0xd6, 0x2f, 0xc2, 0x88, 0xfc, 0xdd, 0x62, 0xff, 0xbe, + 0xf0, 0x16, 0xb5, 0x3d, 0xac, 0x5f, 0x47, 0x36, 0xbc, 0xb1, 0x5d, 0x6a, + 0x32, 0xf0, 0x33, 0xe6, 0x4c, 0x58, 0x19, 0xdd, 0xf7, 0xf3, 0xbe, 0xa5, + 0x8b, 0x75, 0x2c, 0x5f, 0xfd, 0x84, 0x59, 0xfc, 0x1f, 0xc5, 0x12, 0xc5, + 0xf3, 0x7b, 0xf2, 0xb1, 0x7f, 0xf4, 0x4d, 0xf7, 0xd3, 0x7b, 0xd9, 0xb2, + 0xc5, 0xff, 0xb1, 0xbc, 0x59, 0xef, 0x60, 0x4b, 0x14, 0xe8, 0x84, 0x24, + 0x6b, 0x40, 0xc4, 0xd1, 0xf6, 0x27, 0x71, 0x5f, 0xa2, 0x7a, 0x14, 0xd7, + 0xff, 0xf8, 0xbd, 0xc1, 0x49, 0x9f, 0x73, 0x1c, 0xd3, 0x73, 0xdc, 0x58, + 0xbf, 0x3f, 0xbf, 0x90, 0x58, 0xa9, 0x44, 0x6e, 0x99, 0x6f, 0x67, 0x70, + 0x58, 0xa5, 0x8f, 0x97, 0xd7, 0xf6, 0x72, 0x37, 0x8d, 0xe3, 0x7e, 0xb1, + 0x62, 0xe9, 0xe8, 0xb1, 0x7f, 0xa7, 0x62, 0xcd, 0xd8, 0x96, 0x2b, 0xe7, + 0x99, 0xc1, 0x9a, 0xd2, 0x61, 0x9f, 0x40, 0x21, 0xbf, 0x42, 0x3e, 0xdd, + 0x4b, 0x16, 0xed, 0x62, 0x98, 0xd4, 0x06, 0x2b, 0x7f, 0xbf, 0x99, 0xa9, + 0x29, 0x58, 0xbf, 0xfa, 0x47, 0x9b, 0x96, 0x7b, 0xef, 0xda, 0xc5, 0xfe, + 0xf6, 0x6b, 0x69, 0xf7, 0x16, 0x2a, 0x08, 0xcc, 0x72, 0x1f, 0x98, 0xb2, + 0x2d, 0xff, 0xf6, 0x0d, 0xfd, 0x87, 0xfc, 0xce, 0xe7, 0x65, 0x8b, 0xb3, + 0xa2, 0xc5, 0xff, 0x6f, 0xfc, 0x19, 0xdf, 0x58, 0xb1, 0x7e, 0xe7, 0xe4, + 0x8d, 0x58, 0xbe, 0xf6, 0x9f, 0x65, 0x8a, 0x93, 0xcd, 0x11, 0x4d, 0x4a, + 0x62, 0x1b, 0x27, 0xe0, 0xce, 0xa1, 0x0f, 0x7f, 0xff, 0xe8, 0xec, 0xd6, + 0x7f, 0x24, 0xbd, 0xfc, 0x6f, 0xb7, 0xb9, 0x8b, 0x17, 0x61, 0xab, 0x15, + 0x28, 0x84, 0x8e, 0x6c, 0xbf, 0x4e, 0xbf, 0x3d, 0x16, 0x2f, 0xba, 0x3f, + 0x3b, 0x58, 0xa9, 0x3d, 0x06, 0x2a, 0xbf, 0x7f, 0x62, 0x79, 0x58, 0xbf, + 0x07, 0x91, 0x0e, 0x0b, 0x16, 0x35, 0x62, 0xb6, 0x3e, 0x68, 0x8a, 0x23, + 0x8a, 0xef, 0x9c, 0xa2, 0x8f, 0x58, 0xbe, 0x29, 0xee, 0x0b, 0x14, 0xc7, + 0xfa, 0x03, 0x4f, 0x13, 0x5f, 0x7b, 0x99, 0xe5, 0x8b, 0xff, 0xfc, 0xfd, + 0xc3, 0xbf, 0x38, 0x5b, 0xfd, 0xf7, 0xdd, 0xb5, 0xb2, 0xc5, 0x4a, 0x23, + 0x34, 0x47, 0x7f, 0x4f, 0x4c, 0xff, 0xe5, 0x62, 0xfb, 0xdc, 0xc8, 0x96, + 0x3e, 0x6b, 0xef, 0xef, 0x8d, 0xfa, 0x48, 0xd6, 0x28, 0x68, 0xb5, 0xc5, + 0x16, 0x34, 0xbe, 0xd3, 0xb6, 0xcb, 0x17, 0xff, 0x36, 0x98, 0x06, 0x34, + 0x0a, 0x4e, 0xb1, 0x7f, 0xff, 0xc2, 0x9d, 0x19, 0x85, 0x3f, 0x73, 0xe7, + 0x0d, 0x14, 0xe9, 0x62, 0xec, 0x23, 0x11, 0x56, 0x6a, 0x25, 0xfa, 0x75, + 0x11, 0xc0, 0xb1, 0x60, 0x2c, 0x5f, 0xf8, 0x59, 0x1f, 0xc6, 0xd1, 0x4c, + 0x16, 0x2b, 0x0f, 0x4c, 0x84, 0xaf, 0x44, 0x03, 0xac, 0x54, 0xa2, 0xf1, + 0xdf, 0x58, 0x82, 0xb1, 0x3e, 0x67, 0x86, 0x77, 0x21, 0xd7, 0x7f, 0x49, + 0x6c, 0x77, 0x8f, 0x58, 0xbf, 0xf4, 0x1b, 0xa7, 0x24, 0xed, 0xdf, 0x96, + 0x2f, 0xff, 0xff, 0x85, 0xae, 0x1b, 0x3b, 0xfd, 0xcb, 0x22, 0xce, 0xa2, + 0xce, 0x8d, 0xe1, 0x4a, 0xc5, 0xfe, 0x71, 0x6b, 0xf9, 0xd3, 0x8b, 0x17, + 0xff, 0xf7, 0x9f, 0xb8, 0x14, 0x99, 0xe7, 0xce, 0xa1, 0xff, 0x16, 0x2f, + 0xff, 0x49, 0xcb, 0x3a, 0x16, 0x74, 0xcd, 0x41, 0x62, 0xb1, 0x15, 0x64, + 0xbf, 0x7f, 0xbd, 0xc0, 0xff, 0xf6, 0x8f, 0x58, 0xbf, 0xd9, 0xdb, 0x40, + 0xa4, 0xeb, 0x17, 0xd9, 0xe7, 0xe2, 0xc5, 0xfa, 0x22, 0x8d, 0x36, 0x12, + 0xc5, 0xff, 0xfa, 0x28, 0xa4, 0x1e, 0xe1, 0x64, 0x5d, 0x64, 0x6f, 0x1b, + 0xf5, 0x8b, 0x17, 0x7b, 0xeb, 0x15, 0xd6, 0x22, 0xdb, 0x0c, 0x19, 0xba, + 0xff, 0xbd, 0xfc, 0x0b, 0xd1, 0xcf, 0xc5, 0x8a, 0x95, 0x75, 0xbd, 0x98, + 0xba, 0x14, 0x7c, 0x20, 0xe2, 0x87, 0x0b, 0x10, 0x91, 0xcf, 0x0c, 0xfd, + 0x0d, 0x80, 0xcc, 0xef, 0xfc, 0x26, 0x3f, 0x1c, 0x9b, 0x46, 0xac, 0x5f, + 0x37, 0x98, 0x96, 0x2b, 0x66, 0xd7, 0xd6, 0x10, 0x80, 0x1c, 0xa7, 0x2c, + 0x8c, 0xbc, 0xd3, 0x0d, 0xe1, 0xf3, 0xdc, 0x72, 0xaf, 0x1f, 0x84, 0x51, + 0x9b, 0x6a, 0x34, 0xb3, 0xc3, 0x1b, 0xee, 0xa0, 0x8c, 0x0c, 0xa3, 0x6f, + 0xe4, 0xa1, 0x4f, 0x4b, 0xe6, 0x0a, 0x13, 0xdd, 0x47, 0xf7, 0xef, 0x7d, + 0xc8, 0x0b, 0x17, 0x99, 0xf7, 0x58, 0xbd, 0xe7, 0x82, 0xc5, 0x6e, 0x6e, + 0xbc, 0x3b, 0x76, 0x6c, 0xb1, 0x74, 0x52, 0xb1, 0x7b, 0xa6, 0xa0, 0xb1, + 0x76, 0x04, 0x61, 0xe8, 0x00, 0x60, 0x86, 0x2f, 0xf7, 0x42, 0xce, 0x08, + 0x0e, 0xb1, 0x7f, 0xc2, 0x6e, 0x61, 0x7b, 0x3e, 0xb1, 0x4e, 0x7d, 0xa4, + 0x6b, 0x7c, 0xd0, 0xfb, 0x2c, 0x5f, 0xfb, 0xf3, 0xdc, 0x0b, 0x3d, 0xf7, + 0x58, 0xbf, 0x4e, 0x98, 0x2f, 0x2c, 0x5f, 0xff, 0x3f, 0x36, 0xc0, 0xb8, + 0xfb, 0x13, 0x77, 0xe5, 0x8a, 0x82, 0x3f, 0x46, 0x41, 0xb9, 0x17, 0xcf, + 0xfc, 0x53, 0x7f, 0xd0, 0xcf, 0x60, 0xdc, 0x80, 0xb1, 0x7d, 0x0c, 0x9e, + 0xd6, 0x2f, 0xd3, 0xac, 0x27, 0x58, 0xbe, 0x10, 0x26, 0x0b, 0x17, 0x67, + 0xd6, 0x2b, 0xc6, 0xe8, 0x22, 0x3b, 0xfb, 0x35, 0xa1, 0x1b, 0xa5, 0x8b, + 0xf8, 0xa0, 0x13, 0x7f, 0x8b, 0x17, 0xe3, 0x7e, 0xc4, 0xeb, 0x16, 0xe6, + 0x1e, 0xbb, 0x97, 0xdc, 0x6c, 0x16, 0x2f, 0xb4, 0x1c, 0x84, 0xb1, 0x7c, + 0x32, 0x63, 0x56, 0x2f, 0xfe, 0x78, 0x36, 0xb3, 0xa7, 0x7b, 0xbf, 0x6b, + 0x15, 0x28, 0x91, 0xd8, 0x97, 0xc4, 0x76, 0x1c, 0xae, 0x63, 0x6c, 0xe5, + 0x91, 0xd2, 0xf6, 0x97, 0x11, 0xc7, 0xc8, 0xd9, 0x80, 0x88, 0xbd, 0x08, + 0x78, 0xe2, 0x60, 0xe1, 0x55, 0x73, 0x9d, 0x62, 0xb1, 0x19, 0x7e, 0x85, + 0xa5, 0xf6, 0x0f, 0x81, 0x2c, 0x59, 0xf8, 0x79, 0x7d, 0x44, 0xf7, 0xf8, + 0x02, 0xe3, 0x97, 0x70, 0x58, 0xbf, 0x80, 0xfa, 0x7e, 0xc0, 0xb1, 0x66, + 0x8f, 0x3e, 0x48, 0x8d, 0x6c, 0x05, 0x8b, 0xfa, 0x70, 0xf9, 0x9c, 0x58, + 0xbf, 0xff, 0xf9, 0x86, 0x1c, 0x3f, 0x26, 0xe1, 0x0a, 0x19, 0xc2, 0xc0, + 0x0b, 0x8b, 0x17, 0xf8, 0x78, 0x4e, 0x17, 0xc4, 0xb1, 0x7e, 0xef, 0x71, + 0x31, 0x2c, 0x5f, 0xff, 0x7d, 0xe7, 0xce, 0x09, 0x84, 0x60, 0x41, 0x04, + 0x91, 0x7f, 0xf3, 0xcf, 0x81, 0x30, 0x8c, 0x08, 0x20, 0x92, 0x2b, 0x11, + 0x43, 0xf5, 0x6a, 0xd9, 0x32, 0x1d, 0xcd, 0x3d, 0x0c, 0xbb, 0xfd, 0xf1, + 0x31, 0xc6, 0xc7, 0x58, 0xad, 0xd5, 0x16, 0x1c, 0xb0, 0xa3, 0x94, 0xf1, + 0xc5, 0xe9, 0x21, 0xac, 0x5e, 0xcc, 0x35, 0x22, 0xf3, 0x37, 0x6b, 0x16, + 0x02, 0xc5, 0xf3, 0xfe, 0x4e, 0xb1, 0x77, 0x32, 0x4d, 0xa1, 0xa2, 0x55, + 0xb2, 0x2d, 0x86, 0x39, 0x10, 0xef, 0x94, 0x6f, 0xce, 0x45, 0x30, 0x58, + 0xbc, 0x06, 0xf2, 0xc5, 0xff, 0xa6, 0x3f, 0x07, 0x84, 0x53, 0x05, 0x8b, + 0xef, 0x70, 0x51, 0xeb, 0x17, 0xd3, 0xa7, 0xe8, 0xb1, 0x58, 0x8c, 0xd6, + 0x26, 0x21, 0xd1, 0x1f, 0x86, 0x4f, 0x7f, 0x67, 0xb8, 0xe5, 0xb2, 0xc5, + 0xff, 0x69, 0xb7, 0x33, 0xf2, 0x19, 0x2c, 0x5e, 0x14, 0xe9, 0x62, 0xff, + 0x36, 0xf2, 0xe3, 0x0f, 0x4b, 0x16, 0xe0, 0xd1, 0x1d, 0x11, 0xe1, 0x0e, + 0xd6, 0xc8, 0xf2, 0xf4, 0x2f, 0x2f, 0x8d, 0x10, 0x38, 0xb1, 0x71, 0x09, + 0x52, 0x0c, 0x97, 0xf4, 0x9e, 0x79, 0xac, 0x58, 0xa8, 0x1e, 0x8c, 0x44, + 0x97, 0xff, 0x48, 0xcc, 0xfb, 0xb4, 0x3c, 0xfb, 0x2c, 0x5f, 0xfe, 0x0e, + 0x23, 0x09, 0xf5, 0xac, 0xd8, 0xf8, 0xb1, 0x4e, 0x89, 0x41, 0x23, 0x5d, + 0x3b, 0x2c, 0x5f, 0xff, 0x7e, 0x5c, 0x72, 0x46, 0x16, 0x00, 0x5c, 0x58, + 0xbf, 0xfe, 0x6d, 0x6e, 0x66, 0x7a, 0x4e, 0xfe, 0xd0, 0x96, 0x2b, 0xc8, + 0xa1, 0x09, 0x3e, 0xff, 0xff, 0xc2, 0x37, 0xbf, 0x09, 0x83, 0x0f, 0x5c, + 0x13, 0x68, 0x5b, 0x49, 0xab, 0x14, 0x62, 0x26, 0x74, 0x49, 0x5f, 0x4d, + 0xdb, 0x91, 0xa9, 0x5f, 0xbd, 0x30, 0x34, 0xeb, 0x17, 0xc2, 0x18, 0x02, + 0x58, 0xbf, 0xf9, 0xb7, 0xc1, 0xc9, 0xc7, 0xf9, 0xed, 0x62, 0xfc, 0xdb, + 0xe3, 0x8d, 0x62, 0xb6, 0x3e, 0xed, 0xd1, 0xaf, 0xf0, 0x8b, 0x7f, 0xcf, + 0x7d, 0x4b, 0x17, 0xf3, 0xf4, 0x72, 0x93, 0xac, 0x5e, 0x08, 0x20, 0x92, + 0x2f, 0x61, 0x6e, 0x91, 0x18, 0x68, 0x6f, 0xfd, 0x9b, 0x60, 0xda, 0x05, + 0x3b, 0x2c, 0x54, 0xa7, 0xb1, 0xb1, 0x56, 0x42, 0x4d, 0xc9, 0x18, 0xe4, + 0x09, 0xe4, 0x61, 0x7f, 0xfb, 0x35, 0xef, 0x67, 0x0a, 0x73, 0x50, 0x58, + 0xbe, 0xff, 0xf3, 0xcb, 0x17, 0xfd, 0xc0, 0xfb, 0x80, 0x98, 0xb7, 0x58, + 0xa7, 0x3e, 0x00, 0xc8, 0xed, 0x26, 0x23, 0x2f, 0x90, 0xa9, 0xbf, 0x7f, + 0x3b, 0x10, 0x4b, 0x17, 0xdf, 0x62, 0x35, 0x62, 0x86, 0x7f, 0x9b, 0x97, + 0x78, 0xae, 0xfe, 0xee, 0x1c, 0x26, 0xdd, 0x62, 0xf9, 0xa3, 0xfd, 0xc5, + 0x8b, 0xed, 0x0f, 0x3e, 0xb1, 0x78, 0xba, 0xeb, 0x1b, 0x2c, 0x56, 0x22, + 0x8f, 0xb3, 0x07, 0x26, 0x62, 0x3b, 0xba, 0xeb, 0xd7, 0x55, 0x8b, 0xf4, + 0x37, 0xce, 0xfc, 0xb1, 0x7e, 0xcf, 0x78, 0x5b, 0x2c, 0x5f, 0xce, 0xd0, + 0xf3, 0xec, 0xb1, 0x7f, 0xb9, 0x9b, 0x7b, 0x99, 0xb2, 0xc5, 0xcf, 0xb2, + 0xc7, 0xcf, 0x93, 0xc5, 0xd6, 0x87, 0x5d, 0x53, 0x17, 0x81, 0x41, 0x15, + 0xfa, 0x11, 0xd7, 0xba, 0x31, 0xd6, 0x2f, 0xb0, 0x6d, 0xf5, 0x8a, 0xc3, + 0xc1, 0xe0, 0xfd, 0xfe, 0xea, 0x62, 0x9f, 0xc8, 0xd6, 0x2f, 0xfc, 0x53, + 0xef, 0xe3, 0xe8, 0x51, 0xeb, 0x14, 0x73, 0xf6, 0xf1, 0xad, 0xef, 0xe6, + 0xeb, 0x17, 0xde, 0x9e, 0xf8, 0xb1, 0x52, 0x7c, 0x83, 0x22, 0x61, 0xeb, + 0xff, 0xf7, 0xf0, 0x03, 0xcd, 0x0c, 0x62, 0x37, 0xed, 0x05, 0x8b, 0xa3, + 0xe5, 0x62, 0xb7, 0x3f, 0x26, 0x58, 0xbf, 0x60, 0xfe, 0xd1, 0xeb, 0x17, + 0x87, 0x27, 0x58, 0xbf, 0x4c, 0x1c, 0xb1, 0x62, 0xc5, 0x87, 0x86, 0xe3, + 0xb7, 0xf7, 0x56, 0xff, 0xce, 0xfa, 0x96, 0x2f, 0xdf, 0x78, 0xe1, 0x06, + 0xb1, 0x58, 0x7c, 0x9b, 0x9b, 0xd4, 0x68, 0xd8, 0xd3, 0xcc, 0xa3, 0xed, + 0xa1, 0xf6, 0x38, 0xc3, 0x32, 0x33, 0xa3, 0x4a, 0x7b, 0x76, 0x8f, 0x85, + 0xbc, 0x51, 0xcc, 0x6a, 0x50, 0x11, 0xe3, 0xad, 0xfc, 0x34, 0xda, 0x35, + 0x20, 0x42, 0x44, 0xa1, 0xf6, 0x28, 0x4f, 0xf4, 0x22, 0x09, 0xba, 0x3a, + 0x11, 0x37, 0xa7, 0x06, 0xb1, 0x7c, 0xfa, 0x8a, 0x0b, 0x17, 0xfe, 0xc0, + 0x01, 0xb9, 0x31, 0x0b, 0x4b, 0x16, 0x38, 0xd1, 0x01, 0x83, 0x84, 0x49, + 0x7f, 0xc4, 0x2f, 0x7f, 0x3a, 0x0e, 0x56, 0x29, 0x62, 0xf6, 0x9f, 0x4b, + 0x15, 0x87, 0xc9, 0xd7, 0x9d, 0x86, 0x19, 0x7f, 0x7c, 0x9b, 0x6e, 0x32, + 0xc5, 0xff, 0xe0, 0xd8, 0xbe, 0xd0, 0xe6, 0x1e, 0x63, 0xd6, 0x28, 0xc4, + 0x57, 0xe1, 0xa1, 0xa5, 0xd7, 0xfe, 0xd1, 0xba, 0xd6, 0x05, 0x1d, 0x27, + 0x58, 0xa9, 0x4e, 0xf5, 0xe3, 0x47, 0x0c, 0xc6, 0xfc, 0xfa, 0xd9, 0xf6, + 0x58, 0xbd, 0xf7, 0x82, 0xc5, 0xc2, 0x0d, 0x62, 0xd3, 0xf3, 0x6d, 0xe1, + 0xdb, 0xf6, 0x73, 0x5e, 0x95, 0x8b, 0xde, 0x79, 0x58, 0xbf, 0x3c, 0xec, + 0xc7, 0x58, 0xbf, 0xdf, 0x92, 0xf1, 0x0f, 0xb5, 0x8b, 0x12, 0xc5, 0xce, + 0x75, 0x8a, 0xc3, 0x50, 0x42, 0x35, 0x04, 0x73, 0xb9, 0x41, 0x0e, 0x70, + 0xa0, 0x4b, 0x97, 0xfe, 0x2c, 0x1e, 0x00, 0xf3, 0xee, 0x2c, 0x5f, 0xfb, + 0x50, 0x81, 0xf8, 0xe5, 0xdc, 0x16, 0x2f, 0xc5, 0x3d, 0xcf, 0x16, 0x2f, + 0xfd, 0x8e, 0x4d, 0xee, 0x05, 0x24, 0xb1, 0x6d, 0x49, 0xf2, 0xf0, 0xa2, + 0xb1, 0x19, 0xad, 0x0a, 0x6b, 0xf7, 0x1b, 0x82, 0xe2, 0xc5, 0x4a, 0x6b, + 0x5f, 0x8c, 0x2c, 0x44, 0xd7, 0xcf, 0xa9, 0xf2, 0xc5, 0xff, 0xf8, 0xa7, + 0x5a, 0x79, 0xdb, 0x00, 0x26, 0x2d, 0xd6, 0x2f, 0x64, 0xc1, 0x62, 0xfd, + 0x1c, 0x22, 0xf7, 0x16, 0x2b, 0x87, 0x90, 0x21, 0xca, 0x1a, 0x38, 0x77, + 0x22, 0x28, 0x4e, 0xde, 0xfe, 0x76, 0xb1, 0x7f, 0xbf, 0x39, 0x14, 0x90, + 0xd6, 0x2f, 0x3c, 0x9d, 0x62, 0xc3, 0x19, 0xe7, 0xe8, 0xce, 0xd3, 0x04, + 0x4a, 0x93, 0x6d, 0xe7, 0x9d, 0xd6, 0x2f, 0x61, 0x62, 0xc5, 0x40, 0xdc, + 0x78, 0x76, 0xee, 0xc0, 0xb1, 0x7f, 0x1e, 0x78, 0x07, 0xdd, 0x62, 0xf7, + 0x24, 0xd0, 0x1e, 0x47, 0x06, 0x6f, 0xfe, 0xd6, 0x6d, 0x85, 0xf6, 0x72, + 0x65, 0x8b, 0xe8, 0x4e, 0xb6, 0x58, 0xbf, 0x67, 0x53, 0xcc, 0x4b, 0x15, + 0x11, 0xe7, 0x91, 0x25, 0xee, 0x72, 0x0b, 0x17, 0xed, 0x00, 0x0e, 0x4b, + 0x15, 0x27, 0x8d, 0x83, 0xd4, 0xc8, 0x88, 0x13, 0x45, 0xfc, 0x5e, 0x7d, + 0x8a, 0x56, 0x2d, 0xc5, 0x8b, 0xa3, 0x4d, 0x96, 0x2a, 0x4f, 0x76, 0x05, + 0xac, 0x25, 0x7b, 0xa7, 0xdd, 0x62, 0xf6, 0xa6, 0x0b, 0x17, 0xe9, 0x1f, + 0xe7, 0xaf, 0x58, 0xad, 0x1e, 0x57, 0x41, 0xdb, 0xfc, 0xe3, 0xd6, 0x0d, + 0x8e, 0xb1, 0x7d, 0x17, 0x27, 0x8b, 0x17, 0xfe, 0x8e, 0xc0, 0xca, 0x4b, + 0x67, 0xd2, 0xc5, 0xb0, 0xe8, 0x99, 0x01, 0x9f, 0x89, 0x2f, 0xff, 0xff, + 0x02, 0x3b, 0x0c, 0xc8, 0x7f, 0x37, 0x7d, 0x6b, 0x3d, 0xf7, 0x67, 0xd9, + 0x62, 0xf1, 0xae, 0x35, 0x8a, 0xd2, 0x26, 0x99, 0xf2, 0xfb, 0x0e, 0x18, + 0xd6, 0x2f, 0xe7, 0x37, 0xdc, 0x6e, 0xd6, 0x2f, 0xa2, 0x92, 0xf2, 0xc5, + 0xff, 0xfd, 0x0f, 0xb4, 0x0c, 0xf7, 0xe7, 0xfb, 0x88, 0x18, 0x4b, 0x14, + 0x6a, 0x20, 0x74, 0x47, 0x52, 0xac, 0x41, 0xda, 0x7f, 0x0b, 0xd6, 0x86, + 0x79, 0x11, 0x70, 0x90, 0x50, 0xb1, 0xbd, 0xd6, 0x7d, 0xd6, 0x2e, 0x17, + 0xd6, 0x2f, 0xff, 0xfb, 0xa4, 0x8d, 0xc9, 0xb4, 0x69, 0x33, 0x96, 0x00, + 0x5c, 0x58, 0xbf, 0xf7, 0xc3, 0xe6, 0x6b, 0x76, 0x6d, 0xd5, 0x20, 0x61, + 0x7f, 0xf0, 0x8e, 0x76, 0x86, 0x6e, 0x52, 0x75, 0x8b, 0xff, 0xb6, 0x93, + 0x73, 0x5e, 0xf4, 0xe7, 0x16, 0x28, 0x68, 0xda, 0xfa, 0x79, 0x22, 0xd4, + 0xa6, 0xde, 0xf1, 0xa0, 0x5f, 0xf0, 0x98, 0xdc, 0xf7, 0xb3, 0xeb, 0x17, + 0x74, 0xc5, 0x8a, 0xf9, 0xe9, 0xb1, 0xd5, 0xff, 0xf9, 0xb9, 0xc9, 0xda, + 0x7b, 0xc2, 0x79, 0xef, 0xcb, 0x17, 0xf4, 0x96, 0x07, 0x87, 0x58, 0xa8, + 0x22, 0x0f, 0xa2, 0xb5, 0xfe, 0xfc, 0x97, 0x80, 0xde, 0x58, 0xbf, 0xfd, + 0x0d, 0x4c, 0x37, 0xfb, 0xfc, 0x98, 0xeb, 0x15, 0xc3, 0xfe, 0x11, 0x9d, + 0xff, 0xfa, 0x4b, 0x76, 0x20, 0x60, 0xf8, 0x42, 0x68, 0x2c, 0x5f, 0xfd, + 0xe1, 0x4b, 0x6a, 0x4d, 0x34, 0x5b, 0x2c, 0x51, 0xd1, 0x38, 0xca, 0x97, + 0xff, 0x1d, 0x87, 0xf7, 0xc1, 0xb9, 0x01, 0x62, 0xe1, 0x1a, 0xb1, 0x4e, + 0x7b, 0x84, 0x87, 0x7f, 0xdb, 0xb9, 0xce, 0xe6, 0x70, 0x4b, 0x17, 0xf9, + 0xbb, 0xe0, 0x7a, 0xfb, 0x2c, 0x5f, 0xfd, 0x81, 0x30, 0x0c, 0x60, 0xe2, + 0x6f, 0x2c, 0x5b, 0x80, 0x3f, 0xe2, 0x36, 0xbf, 0x9b, 0xf8, 0x47, 0xc5, + 0x8b, 0xe1, 0x7f, 0x37, 0x58, 0xbf, 0x9c, 0xa7, 0xef, 0xb2, 0xc5, 0x41, + 0x71, 0xf0, 0x6f, 0x6f, 0x0a, 0x4d, 0x42, 0x8c, 0xf0, 0xbe, 0xfb, 0xf1, + 0x10, 0x7a, 0x17, 0x5d, 0x09, 0xe3, 0x8b, 0x3a, 0x89, 0x2f, 0xfe, 0xf7, + 0x36, 0x90, 0xca, 0x7e, 0xfb, 0x2c, 0x5f, 0xee, 0x4e, 0xa1, 0xbb, 0xec, + 0xb1, 0x7d, 0xf7, 0x60, 0x2c, 0x51, 0x22, 0x7f, 0x88, 0xfe, 0x36, 0xbf, + 0x70, 0xce, 0x02, 0x3d, 0x62, 0xff, 0x61, 0x79, 0xf4, 0x0e, 0x2c, 0x5c, + 0xfe, 0x58, 0xbf, 0xfb, 0xf9, 0xbe, 0x6b, 0x9d, 0xf8, 0x33, 0xac, 0x5f, + 0xb3, 0xa3, 0x90, 0xd6, 0x28, 0x67, 0xe4, 0x49, 0x37, 0x34, 0x25, 0x15, + 0x5c, 0x84, 0x4d, 0xb5, 0x89, 0x9e, 0x9a, 0x5d, 0xa8, 0x6e, 0xde, 0xcd, + 0x84, 0xb1, 0x7c, 0xc4, 0x52, 0xb1, 0x70, 0x8d, 0x23, 0x7c, 0x10, 0xf5, + 0xfe, 0x9d, 0x9a, 0x3f, 0x3b, 0xf2, 0xc5, 0x4a, 0xa4, 0xcc, 0x8d, 0xb3, + 0xef, 0x42, 0x2e, 0xbb, 0xfb, 0xac, 0x5f, 0x68, 0x0f, 0x05, 0x8b, 0xf3, + 0x7b, 0x53, 0x05, 0x8b, 0xfe, 0xf3, 0x93, 0x77, 0xe1, 0x4a, 0xc5, 0xf1, + 0x78, 0x5f, 0x94, 0x42, 0x7c, 0x8c, 0x32, 0x8b, 0xff, 0xe3, 0xfd, 0xf9, + 0x07, 0xf0, 0x7a, 0x9f, 0xca, 0xc5, 0xff, 0xfc, 0x19, 0x43, 0xf9, 0x9e, + 0x92, 0x60, 0x13, 0x41, 0x62, 0xf7, 0xc5, 0x1e, 0xb1, 0x7f, 0xf4, 0xed, + 0xcf, 0xb0, 0x70, 0xd4, 0xf6, 0xb1, 0x7f, 0xe7, 0x2f, 0x71, 0xc6, 0x0e, + 0xc0, 0xb1, 0x7f, 0xfd, 0xf7, 0xce, 0x99, 0xc6, 0x83, 0x94, 0xf4, 0x58, + 0xbf, 0xed, 0xdf, 0x02, 0x0c, 0x6d, 0xb2, 0xc5, 0xb8, 0xb1, 0x5d, 0x9e, + 0x7c, 0x47, 0xb5, 0xc4, 0x62, 0x7a, 0x14, 0x17, 0xff, 0xd9, 0xd1, 0xfd, + 0x01, 0x0d, 0x88, 0x18, 0x4b, 0x17, 0xef, 0xb8, 0x03, 0xf2, 0xc5, 0xd8, + 0x46, 0x1f, 0xd6, 0xea, 0x16, 0x6e, 0x23, 0x43, 0xa4, 0x28, 0xab, 0x65, + 0x40, 0x7a, 0x8f, 0x52, 0xa3, 0x76, 0x71, 0x74, 0x68, 0x45, 0x33, 0xc0, + 0x70, 0x97, 0x41, 0x88, 0x6f, 0x09, 0xd6, 0x47, 0x02, 0x8f, 0x5e, 0xb3, + 0xc2, 0x11, 0x4a, 0x4b, 0xbd, 0x84, 0x6a, 0xc5, 0xfe, 0x61, 0xff, 0x33, + 0xbf, 0x2c, 0x56, 0x1e, 0x89, 0xa3, 0xb5, 0xdb, 0x69, 0xbb, 0xa3, 0x4f, + 0xc6, 0x32, 0x4f, 0xfc, 0x96, 0x7b, 0xea, 0x74, 0xff, 0x54, 0x62, 0x77, + 0x40, 0xeb, 0x17, 0x82, 0xcf, 0xac, 0x5d, 0x25, 0x03, 0x6d, 0xe1, 0x8b, + 0xc5, 0x21, 0x2c, 0x5f, 0x3e, 0xee, 0x35, 0x8b, 0xc1, 0xc0, 0xeb, 0x15, + 0x04, 0x45, 0x61, 0x5f, 0x87, 0x44, 0x47, 0x7f, 0xff, 0xb9, 0xbf, 0xdf, + 0xbf, 0x6f, 0xf9, 0xdb, 0x3b, 0xf3, 0x0d, 0x62, 0xff, 0xef, 0x4b, 0x97, + 0xb5, 0x3e, 0x6f, 0x2c, 0x5f, 0xff, 0xfd, 0x07, 0x3e, 0x70, 0x1c, 0xdb, + 0xe3, 0xfc, 0xf0, 0xb0, 0x07, 0x95, 0x8a, 0x94, 0xc7, 0x7b, 0x67, 0x64, + 0x3b, 0xde, 0x78, 0x96, 0x2f, 0xe0, 0x7b, 0xd2, 0x40, 0x58, 0xa9, 0x3c, + 0xc6, 0x1e, 0xb8, 0x12, 0xb1, 0x7e, 0x60, 0xc4, 0xc1, 0xac, 0x50, 0x0f, + 0x04, 0x42, 0xf5, 0x12, 0x20, 0xf4, 0xc3, 0x79, 0xb2, 0x0b, 0x17, 0x31, + 0x2c, 0x5b, 0x16, 0x2b, 0xe6, 0x9f, 0xa0, 0xb5, 0x62, 0x22, 0x9c, 0x91, + 0x90, 0xef, 0xfe, 0x68, 0x19, 0x9e, 0xcf, 0xce, 0x80, 0xb1, 0x70, 0x7e, + 0x58, 0xb8, 0x00, 0x58, 0xbf, 0xed, 0xfe, 0xfa, 0x27, 0xf7, 0x16, 0x2f, + 0xb3, 0x61, 0x79, 0x62, 0xa0, 0x8d, 0x48, 0x91, 0x4e, 0x32, 0x01, 0x8f, + 0x1d, 0x5f, 0xfc, 0x11, 0x09, 0xb8, 0xf9, 0xd1, 0xb4, 0xb1, 0x7f, 0xda, + 0x9e, 0x8f, 0xee, 0x61, 0xab, 0x15, 0x88, 0x82, 0x8f, 0x46, 0xbf, 0x9f, + 0xff, 0xc0, 0x32, 0xc5, 0xfd, 0xac, 0x19, 0x49, 0xd6, 0x2e, 0xff, 0x16, + 0x2a, 0x07, 0x8a, 0xc5, 0xb5, 0x28, 0xb8, 0x01, 0x28, 0x9c, 0xae, 0xeb, + 0xe5, 0x62, 0xff, 0xda, 0xc1, 0xcb, 0x8b, 0x79, 0xd2, 0xc5, 0x08, 0xf6, + 0xfa, 0x0e, 0x5f, 0xa7, 0xdc, 0xcf, 0x2c, 0x5f, 0xff, 0xe1, 0xb9, 0x6f, + 0x9d, 0xf8, 0xd6, 0xcd, 0x7b, 0xd3, 0xb2, 0xc5, 0xe8, 0xec, 0x95, 0x8a, + 0x94, 0x67, 0x8c, 0x91, 0xca, 0x3c, 0xc9, 0x7f, 0x72, 0x2f, 0xb8, 0x5e, + 0x58, 0xbf, 0xdc, 0x7c, 0x2c, 0xec, 0x25, 0x8b, 0xff, 0xfd, 0x9e, 0xf3, + 0x68, 0xa7, 0xb8, 0x07, 0xa0, 0x1d, 0xf8, 0xb1, 0x58, 0x8c, 0x88, 0xf3, + 0x13, 0x9a, 0x5f, 0x85, 0xde, 0xf8, 0x75, 0x8b, 0xfc, 0xe1, 0x61, 0x0f, + 0xf2, 0xb1, 0x7c, 0xdd, 0x90, 0xd6, 0x28, 0xe7, 0xac, 0x03, 0x3b, 0xff, + 0xd3, 0xee, 0x0b, 0x73, 0x3e, 0xc5, 0x32, 0xb1, 0x61, 0x2c, 0x5f, 0x80, + 0x18, 0x1a, 0x0b, 0x15, 0xf3, 0x78, 0xc2, 0x57, 0xd1, 0xe6, 0x47, 0xc1, + 0x62, 0xff, 0xf1, 0x0f, 0xf9, 0xd8, 0x6c, 0x5e, 0x21, 0xac, 0x5a, 0x12, + 0x7e, 0xce, 0x57, 0x7f, 0xff, 0x38, 0x5f, 0x6d, 0xe4, 0x87, 0x9d, 0xfb, + 0xec, 0x35, 0x8b, 0xfe, 0xdb, 0xd0, 0xc8, 0xf6, 0x20, 0x2c, 0x5f, 0xec, + 0x8a, 0x63, 0xff, 0x9b, 0x2c, 0x5f, 0x1c, 0xf3, 0xc5, 0x8b, 0x9a, 0x3f, + 0x87, 0xb6, 0x19, 0xc5, 0xf4, 0x5f, 0x6f, 0x2c, 0x56, 0x23, 0xb7, 0xb8, + 0x4c, 0x39, 0x8d, 0xfa, 0x5b, 0xed, 0x1e, 0xb1, 0x7d, 0x9d, 0xe7, 0x16, + 0x2e, 0xc1, 0xe8, 0xf3, 0x7e, 0x55, 0x79, 0xc2, 0x8f, 0x58, 0xbf, 0xd9, + 0xd3, 0x9e, 0xf4, 0x9d, 0x62, 0xb4, 0x7a, 0xff, 0x21, 0xbf, 0xde, 0x19, + 0x48, 0x4d, 0xda, 0xc5, 0x4a, 0xe5, 0xf0, 0xcc, 0xb2, 0x10, 0x26, 0x91, + 0x3c, 0x21, 0xe2, 0x84, 0xb6, 0x89, 0xbf, 0x1a, 0x51, 0x42, 0x07, 0x90, + 0x84, 0x0c, 0x8a, 0xf4, 0x90, 0xd6, 0x2f, 0xfd, 0x07, 0x28, 0x07, 0xff, + 0xc8, 0xd6, 0x2e, 0x09, 0xd6, 0x2f, 0x61, 0x6e, 0xb1, 0x74, 0x9d, 0x62, + 0xc7, 0xdc, 0xda, 0x47, 0x0e, 0xd4, 0x9f, 0xbb, 0xa6, 0x5e, 0xcf, 0x3a, + 0xc5, 0xff, 0x60, 0xcd, 0x68, 0xbf, 0x3b, 0x2c, 0x5f, 0x85, 0xed, 0xb8, + 0x6a, 0xc5, 0xff, 0xcd, 0xb7, 0x18, 0x73, 0xb4, 0xc2, 0x56, 0x2f, 0xf3, + 0x96, 0xdf, 0x90, 0xc9, 0x62, 0xfe, 0xce, 0x47, 0x66, 0xa5, 0x62, 0x8d, + 0x54, 0x41, 0xd8, 0xe6, 0xa1, 0x6e, 0x72, 0x0f, 0x8e, 0x11, 0xe7, 0x0b, + 0x3c, 0x8b, 0x1c, 0x69, 0x7f, 0xd2, 0x1f, 0xdb, 0xbf, 0x7e, 0x56, 0x2f, + 0x9e, 0x4a, 0x25, 0x8b, 0xf7, 0xbf, 0x80, 0x65, 0x8b, 0xa6, 0x3d, 0x62, + 0xb0, 0xf0, 0x83, 0x28, 0xbe, 0x7e, 0x08, 0xeb, 0x17, 0x04, 0x12, 0xc5, + 0xe3, 0xcc, 0x64, 0x0d, 0xe8, 0x44, 0x77, 0xfe, 0x9d, 0x18, 0x59, 0xef, + 0x3f, 0x6b, 0x15, 0x27, 0xec, 0x23, 0x6a, 0x97, 0x5a, 0xad, 0xb3, 0x04, + 0x23, 0x0d, 0x1c, 0x74, 0x59, 0x18, 0xbe, 0xf0, 0xca, 0xed, 0x7d, 0xeb, + 0x54, 0x68, 0xa3, 0x48, 0xd4, 0x6b, 0x27, 0x8e, 0x25, 0xa3, 0x01, 0x04, + 0x70, 0xa5, 0x1a, 0xcf, 0x27, 0x70, 0x7d, 0x2b, 0x67, 0xa4, 0x22, 0x42, + 0x3b, 0x8e, 0x64, 0xea, 0x86, 0xad, 0xfe, 0xfb, 0xb4, 0x3c, 0xfb, 0x2c, + 0x5f, 0xee, 0x73, 0x08, 0x11, 0xd8, 0xb1, 0x7c, 0x4f, 0xd5, 0x2b, 0x16, + 0x8e, 0x58, 0xb8, 0x12, 0xb1, 0x78, 0xb3, 0x8b, 0x14, 0x46, 0xcc, 0x31, + 0x7b, 0x44, 0xb1, 0x7f, 0x73, 0x08, 0x11, 0xd8, 0xb1, 0x63, 0x56, 0x2f, + 0x46, 0xd2, 0x4b, 0x14, 0x62, 0x67, 0x58, 0x6c, 0xe4, 0x8c, 0x90, 0x02, + 0x1e, 0x09, 0x88, 0xc0, 0x21, 0x3b, 0xef, 0x33, 0x12, 0xc5, 0x47, 0xaa, + 0x00, 0xe9, 0x1b, 0x70, 0x4e, 0x37, 0x7e, 0x0b, 0x17, 0xff, 0x0f, 0x58, + 0xe6, 0xf7, 0xe2, 0x6f, 0xac, 0x50, 0x47, 0xbc, 0x18, 0xc5, 0xff, 0xbe, + 0xd0, 0x2c, 0xf7, 0xa4, 0xeb, 0x17, 0xff, 0x87, 0xf9, 0x3b, 0x31, 0x77, + 0xc1, 0x1d, 0x62, 0xff, 0xdb, 0xe6, 0xb5, 0x30, 0xe4, 0x81, 0x62, 0xff, + 0xf7, 0x9b, 0x52, 0x69, 0xa2, 0xdb, 0x3b, 0xf2, 0xc5, 0xfe, 0xde, 0x07, + 0xff, 0x6d, 0x1e, 0xb1, 0x52, 0x88, 0x96, 0x4f, 0xa8, 0x26, 0xe6, 0x69, + 0xf0, 0x92, 0xfa, 0x43, 0x26, 0xfe, 0x98, 0x7a, 0x3b, 0x3e, 0xb1, 0x7f, + 0x80, 0xc0, 0x98, 0xf9, 0x82, 0xc5, 0xfd, 0x93, 0xdc, 0x1c, 0xeb, 0x17, + 0xf3, 0x7f, 0xf3, 0xdf, 0x16, 0x2f, 0x41, 0xf3, 0x47, 0xbb, 0xf2, 0xeb, + 0xfb, 0x06, 0x53, 0x84, 0xb1, 0x7f, 0xf0, 0x6d, 0xb0, 0x63, 0x9d, 0x47, + 0x47, 0x47, 0x2c, 0x5f, 0xf6, 0x61, 0xbf, 0x6d, 0x07, 0xf5, 0x8a, 0xfa, + 0x2e, 0x38, 0x57, 0xe5, 0x2a, 0x82, 0x75, 0xbd, 0xc2, 0x4c, 0x10, 0xea, + 0xbb, 0x09, 0x62, 0xf6, 0x9b, 0x75, 0x8b, 0xf9, 0xe4, 0xd8, 0x6c, 0x6a, + 0xc5, 0x99, 0x62, 0x86, 0x7e, 0xc6, 0x8b, 0x10, 0xf7, 0x0c, 0x6f, 0xfe, + 0xda, 0x28, 0x4e, 0xb6, 0xff, 0x6d, 0x1e, 0xb1, 0x7e, 0x11, 0xe7, 0x3c, + 0xb1, 0x7d, 0x80, 0x90, 0x2c, 0x50, 0x0f, 0x28, 0x8a, 0x2b, 0x64, 0x7a, + 0x31, 0xe7, 0xa1, 0x2f, 0x52, 0xbb, 0x2d, 0x91, 0xcb, 0xba, 0x33, 0x47, + 0xbc, 0x28, 0xe9, 0xae, 0x23, 0x56, 0x2f, 0xff, 0x16, 0xc6, 0x44, 0xe5, + 0x83, 0xc2, 0x35, 0x62, 0xff, 0x84, 0x20, 0xc9, 0xcc, 0x07, 0x96, 0x2f, + 0xbd, 0xc6, 0xe2, 0xc5, 0xa3, 0x96, 0x2f, 0x7e, 0x61, 0x26, 0xe3, 0x84, + 0x77, 0x02, 0x56, 0x2f, 0xf8, 0x39, 0x1c, 0x50, 0x92, 0xf2, 0xc5, 0x44, + 0x7a, 0x5c, 0x17, 0xbf, 0xee, 0x93, 0xdc, 0x74, 0xeb, 0x09, 0x62, 0xf6, + 0x3f, 0xd6, 0x2a, 0x36, 0x3f, 0xdc, 0x23, 0xf9, 0xf5, 0xfc, 0xfd, 0xf5, + 0x7e, 0x7c, 0xb1, 0x7e, 0x9e, 0xf9, 0x3c, 0x58, 0xbe, 0xe3, 0xbf, 0x6b, + 0x14, 0xc7, 0x98, 0x22, 0x9b, 0xfc, 0x2e, 0xfa, 0xb7, 0xfb, 0x71, 0x62, + 0xfb, 0x3d, 0xf7, 0x58, 0xa6, 0x3d, 0xc2, 0x3a, 0xbc, 0x1e, 0x4a, 0xc5, + 0xc2, 0x35, 0x62, 0xfd, 0x24, 0x42, 0x3a, 0xc5, 0x7c, 0xf0, 0x03, 0x19, + 0xbd, 0xe9, 0x0d, 0x62, 0xff, 0x60, 0xf4, 0xdb, 0xf8, 0x0b, 0x17, 0x9d, + 0xba, 0x2c, 0x5f, 0xb0, 0x87, 0xf9, 0x58, 0xac, 0x44, 0xc7, 0xc7, 0x80, + 0x6a, 0x10, 0xf5, 0xd9, 0xc5, 0x8a, 0x58, 0xa5, 0x8b, 0x42, 0x22, 0xe3, + 0xc1, 0x95, 0x03, 0xd6, 0x01, 0x7d, 0xfd, 0xbf, 0xe7, 0xc2, 0x0d, 0x62, + 0xa5, 0x74, 0x33, 0x64, 0xc8, 0x3a, 0x1b, 0x18, 0x04, 0x79, 0x9c, 0x4f, + 0xda, 0x7d, 0x62, 0x02, 0x5d, 0xe4, 0x2e, 0xfd, 0x09, 0x30, 0xc8, 0xaf, + 0xdb, 0x60, 0x50, 0xf2, 0xc5, 0xf0, 0xf4, 0xd0, 0x58, 0xbf, 0xff, 0x89, + 0xbd, 0xcc, 0xd0, 0x01, 0x39, 0xdf, 0xb8, 0xeb, 0x17, 0xff, 0xff, 0xf6, + 0x7b, 0x81, 0xf3, 0x4c, 0x5e, 0xfb, 0x40, 0x7a, 0xc7, 0x37, 0x3b, 0xf7, + 0x1d, 0x62, 0xb1, 0x1c, 0xc7, 0x5b, 0xba, 0x12, 0xb1, 0x68, 0xe5, 0x8a, + 0x30, 0xd6, 0x60, 0xbd, 0x0c, 0xfb, 0xfc, 0x9d, 0x52, 0x9c, 0xd3, 0x46, + 0xf1, 0x74, 0x92, 0xc5, 0xfb, 0x24, 0x61, 0xf6, 0xb1, 0x43, 0x3c, 0x0d, + 0x0b, 0x51, 0x90, 0x94, 0xd2, 0x8d, 0xd0, 0x66, 0xbe, 0x25, 0xda, 0x3c, + 0x81, 0xc3, 0xd3, 0x2b, 0x66, 0x13, 0x63, 0x51, 0xde, 0x78, 0xfb, 0xb8, + 0x47, 0x3d, 0x63, 0xa5, 0xf9, 0x73, 0xed, 0x6b, 0x63, 0x01, 0x2d, 0xe4, + 0xa7, 0x8c, 0xbc, 0xb6, 0x29, 0xd2, 0x4e, 0x90, 0xbc, 0x0a, 0x3c, 0x50, + 0xda, 0x2f, 0x86, 0x31, 0x12, 0xc5, 0xdb, 0x74, 0x58, 0xbb, 0x3e, 0xb1, + 0x5d, 0x9b, 0x2f, 0x0d, 0xdf, 0x84, 0x6b, 0xce, 0xcb, 0x17, 0xff, 0xa6, + 0x02, 0x1e, 0x37, 0x39, 0x90, 0x95, 0x8b, 0xfd, 0xbf, 0xd8, 0xa4, 0x5d, + 0xac, 0x5f, 0x84, 0x1b, 0x4f, 0x6b, 0x17, 0xed, 0xff, 0x3d, 0xf5, 0x2c, + 0x5e, 0x97, 0x8f, 0x58, 0xb8, 0x5d, 0x7a, 0xc5, 0xfb, 0xed, 0xa3, 0xba, + 0xc5, 0xe0, 0xe6, 0x3d, 0x62, 0xfe, 0x0f, 0x7f, 0xcf, 0x7d, 0x4b, 0x14, + 0x62, 0x3a, 0x3a, 0xc2, 0xe8, 0x0f, 0xee, 0x3b, 0xc2, 0x81, 0x10, 0xde, + 0x72, 0xc5, 0x8b, 0xfb, 0xef, 0xd7, 0xfe, 0x76, 0x58, 0xb0, 0xe0, 0x79, + 0xfb, 0x8d, 0xdf, 0x49, 0xdb, 0x8b, 0x17, 0x00, 0x25, 0x8b, 0xfb, 0xf2, + 0xf1, 0xe7, 0x75, 0x8b, 0xfd, 0x1e, 0x2d, 0x7e, 0x5c, 0x6b, 0x14, 0x62, + 0x20, 0x37, 0x19, 0x73, 0x0a, 0xd9, 0x5b, 0x1c, 0x0a, 0x86, 0x93, 0xb9, + 0xaf, 0x71, 0x89, 0x3c, 0x2b, 0x7e, 0x53, 0xe8, 0x51, 0x5f, 0xf7, 0x57, + 0x07, 0xf9, 0xd3, 0x12, 0xc5, 0xc1, 0xf5, 0x2c, 0x5f, 0xd8, 0x16, 0x61, + 0x1a, 0xb1, 0x7f, 0x99, 0xe1, 0xfc, 0xf4, 0xac, 0x5c, 0xfb, 0x2c, 0x7c, + 0xd9, 0x5d, 0x21, 0xac, 0x5e, 0x6c, 0xe2, 0xc5, 0xf9, 0xb6, 0x71, 0x41, + 0x62, 0xf0, 0x01, 0x2b, 0x15, 0x03, 0xfa, 0x38, 0xc7, 0xc7, 0x08, 0xa6, + 0xfc, 0x6f, 0x5a, 0x13, 0x76, 0xb1, 0x7b, 0x08, 0xd5, 0x8a, 0x94, 0xf8, + 0xf6, 0x3c, 0x71, 0xc3, 0xb0, 0x34, 0x28, 0xb8, 0x77, 0xd4, 0x63, 0x7f, + 0xee, 0x6a, 0x7c, 0x4c, 0x73, 0xba, 0xc5, 0xff, 0xbf, 0x21, 0xe7, 0x38, + 0x18, 0xd9, 0x62, 0xff, 0xf4, 0xf3, 0x92, 0x7c, 0xf3, 0xf3, 0xec, 0xb1, + 0x79, 0xcb, 0xcb, 0x15, 0xb9, 0xf2, 0xfd, 0x26, 0xff, 0xd3, 0xbe, 0xa4, + 0x98, 0xe7, 0x75, 0x8b, 0xfa, 0x73, 0x50, 0xd4, 0x16, 0x2e, 0xfb, 0x9c, + 0xfb, 0x3e, 0x7d, 0x7f, 0xf1, 0xe7, 0xdc, 0x6c, 0xd0, 0x0f, 0x8b, 0x17, + 0xf1, 0x4c, 0x0f, 0x2e, 0xb1, 0x7f, 0xb0, 0xf2, 0xd0, 0x68, 0x2c, 0x50, + 0x11, 0x44, 0x48, 0x91, 0xc5, 0x97, 0xef, 0xce, 0xd3, 0xf5, 0x8b, 0xe9, + 0xd9, 0xf4, 0xb1, 0x7e, 0xd3, 0x1e, 0x77, 0x58, 0xbf, 0xfe, 0xdb, 0x59, + 0x2e, 0x58, 0x2d, 0xd8, 0x86, 0xb1, 0x7d, 0xd0, 0xb3, 0x8b, 0x15, 0x27, + 0xe7, 0x89, 0xf7, 0xba, 0x60, 0xd6, 0x2f, 0xf7, 0x9f, 0xa3, 0xfa, 0x12, + 0x91, 0x63, 0xac, 0x5f, 0x1b, 0xa9, 0x8c, 0x73, 0xc7, 0x0c, 0xd6, 0xd8, + 0x34, 0x51, 0x93, 0x35, 0xd8, 0x6a, 0xc5, 0x18, 0xb8, 0xbc, 0x33, 0xec, + 0x85, 0x36, 0xf0, 0x8f, 0x78, 0x67, 0xc4, 0x65, 0xf2, 0x96, 0x23, 0x28, + 0x4e, 0x72, 0x18, 0x71, 0xc4, 0xf7, 0xff, 0x9b, 0xa4, 0xe0, 0xda, 0x19, + 0xf7, 0x09, 0x62, 0xfb, 0x66, 0xd6, 0xeb, 0x17, 0x77, 0x05, 0x8a, 0x93, + 0x7c, 0x22, 0x5b, 0xd2, 0x52, 0xb1, 0x7c, 0xc3, 0x98, 0xf5, 0x8b, 0xda, + 0x6e, 0x8b, 0x17, 0xe1, 0xeb, 0x59, 0xc5, 0x8b, 0xb3, 0x4b, 0x15, 0x03, + 0xdf, 0x61, 0xf0, 0x14, 0xd4, 0x13, 0x76, 0xd4, 0x22, 0x4e, 0x40, 0x01, + 0xb2, 0x84, 0x25, 0xf3, 0xcc, 0x23, 0xd6, 0x2f, 0xe8, 0x16, 0x1e, 0x77, + 0x58, 0xa8, 0x1e, 0x99, 0x12, 0xde, 0x89, 0xbc, 0xb1, 0x78, 0xa4, 0xeb, + 0x15, 0x26, 0xea, 0x21, 0xeb, 0xf3, 0xfc, 0xa6, 0x0b, 0x16, 0xeb, 0x16, + 0x2f, 0xc0, 0xfc, 0xe6, 0x96, 0x2a, 0x23, 0x7f, 0xa1, 0x7b, 0xed, 0x33, + 0xec, 0xb1, 0x77, 0x1d, 0x62, 0xa4, 0xf7, 0x1c, 0x89, 0x88, 0xed, 0x8b, + 0x17, 0xb3, 0x0d, 0x58, 0xa1, 0x9a, 0xee, 0xa1, 0x1b, 0xc4, 0xd0, 0x58, + 0xa3, 0x9e, 0x07, 0xc9, 0x2f, 0xf8, 0x3d, 0x7a, 0x0e, 0x5e, 0xe2, 0xc5, + 0xff, 0xa2, 0x31, 0xbb, 0x84, 0x9e, 0x7b, 0x58, 0xae, 0x1f, 0xf0, 0x67, + 0x75, 0x2a, 0xd0, 0xb2, 0x14, 0xee, 0xb7, 0xa2, 0x1f, 0xc3, 0x09, 0xa1, + 0x34, 0x28, 0x50, 0x5f, 0xb5, 0xbb, 0x36, 0xea, 0x94, 0x34, 0xbf, 0xb9, + 0x9a, 0x1f, 0xf1, 0x62, 0xdd, 0x30, 0xf9, 0x78, 0x6f, 0x78, 0x4d, 0xc5, + 0x8a, 0x73, 0xc6, 0xf9, 0x4d, 0xe8, 0xe1, 0x79, 0x62, 0xf3, 0x01, 0x96, + 0x2e, 0x7e, 0x8b, 0x17, 0xff, 0xbd, 0x98, 0x5e, 0xe1, 0x9f, 0x79, 0x3a, + 0xc5, 0xff, 0xb7, 0xfc, 0x93, 0x7b, 0x99, 0xb2, 0xc5, 0xf6, 0x9e, 0x2e, + 0x2c, 0x5e, 0xd3, 0x06, 0xb1, 0x46, 0x23, 0x33, 0x12, 0xb4, 0x80, 0xc4, + 0x97, 0x61, 0xab, 0x16, 0x75, 0x8b, 0xff, 0xa4, 0xee, 0x3c, 0x23, 0x7f, + 0x27, 0x58, 0xaf, 0x9f, 0x6b, 0x0c, 0x78, 0x46, 0xfb, 0x0f, 0x21, 0xac, + 0x50, 0xd5, 0x1e, 0xee, 0x43, 0xa2, 0x13, 0x8e, 0x72, 0x1c, 0xbe, 0x85, + 0x4f, 0x42, 0xeb, 0x83, 0xfa, 0xc5, 0xff, 0xec, 0xf3, 0xc9, 0x7b, 0x08, + 0xc9, 0xd2, 0xc5, 0xf8, 0x98, 0x20, 0xce, 0xb1, 0x7f, 0xff, 0x85, 0x9f, + 0xc2, 0x06, 0x17, 0xbf, 0x8d, 0xe1, 0x4a, 0xc5, 0xf3, 0x77, 0xec, 0x58, + 0xb7, 0x6b, 0x16, 0x73, 0x13, 0x06, 0x89, 0x20, 0x8a, 0xb8, 0xbc, 0x11, + 0x1d, 0x1a, 0x9b, 0x8f, 0xe3, 0x1f, 0xbb, 0xad, 0xeb, 0xaa, 0xc5, 0xff, + 0xef, 0x7e, 0x79, 0x3f, 0x97, 0xda, 0x4d, 0x58, 0xb8, 0x5d, 0x4b, 0x17, + 0xf9, 0x8e, 0xd0, 0x97, 0xdd, 0x62, 0xff, 0xf9, 0xc5, 0xb7, 0x7e, 0xcd, + 0xa7, 0xa9, 0xf5, 0x8b, 0x14, 0x34, 0x44, 0x78, 0xce, 0x9d, 0x31, 0x10, + 0x25, 0x94, 0x28, 0xef, 0xe9, 0x8a, 0x0f, 0xa8, 0x2c, 0x5b, 0x75, 0x8a, + 0xf9, 0xe1, 0x78, 0xbe, 0xe3, 0xca, 0xc5, 0xef, 0x14, 0xac, 0x5f, 0x44, + 0x52, 0x75, 0x8a, 0xc3, 0xd6, 0xd0, 0xb9, 0x0e, 0x5f, 0xef, 0x38, 0x51, + 0x13, 0x04, 0xb1, 0x77, 0xdd, 0x62, 0xff, 0xa5, 0xa1, 0xf9, 0xd9, 0xb6, + 0x58, 0xbd, 0x9a, 0x02, 0xc5, 0xff, 0x67, 0x49, 0x1f, 0xf1, 0xfc, 0xb1, + 0x7b, 0x8c, 0x05, 0x8a, 0x23, 0xd7, 0xf1, 0xd5, 0x47, 0xa3, 0x98, 0xe2, + 0xff, 0x3a, 0xf3, 0xa5, 0xfc, 0x20, 0xc0, 0x09, 0xed, 0x62, 0xe7, 0xd9, + 0x62, 0xf8, 0xfe, 0xcd, 0xd6, 0x2f, 0x69, 0xa0, 0xb1, 0x77, 0x72, 0xb1, + 0x7f, 0xcc, 0xdd, 0xfd, 0xf6, 0x62, 0x58, 0xb6, 0xd2, 0x7a, 0x23, 0x18, + 0xa9, 0x45, 0xd6, 0x12, 0x3b, 0x75, 0xc1, 0x79, 0x62, 0xfa, 0x00, 0x2c, + 0x58, 0xbf, 0xfc, 0x02, 0x63, 0xeb, 0x27, 0xb8, 0x39, 0xd6, 0x2a, 0x4f, + 0xb0, 0x44, 0x57, 0xf7, 0x89, 0x81, 0xc1, 0x2c, 0x5c, 0xfb, 0x2c, 0x5f, + 0xee, 0xf8, 0xfc, 0x7e, 0xfc, 0xb1, 0x51, 0xb2, 0xef, 0xfc, 0xc6, 0x6c, + 0x37, 0x6c, 0x78, 0xec, 0xb5, 0xe3, 0x1c, 0x89, 0x03, 0x46, 0x3f, 0x86, + 0x93, 0x16, 0x94, 0x21, 0x78, 0x43, 0xe2, 0xe1, 0x0c, 0x5f, 0xff, 0xff, + 0xcf, 0xef, 0xe1, 0xfe, 0x59, 0xd1, 0xb7, 0xfb, 0x87, 0xe7, 0x2d, 0xf3, + 0xdf, 0x75, 0x8b, 0xa7, 0xeb, 0x17, 0xde, 0xd4, 0xf4, 0x58, 0xa1, 0xa3, + 0x1c, 0xf0, 0x8b, 0x61, 0x7b, 0xef, 0x70, 0x51, 0xeb, 0x17, 0xee, 0xe0, + 0x79, 0xf2, 0xc5, 0x39, 0xe8, 0x88, 0x9e, 0xfa, 0x7b, 0x14, 0x7a, 0xc5, + 0xff, 0xfb, 0x71, 0x7c, 0xd7, 0x29, 0xfc, 0x85, 0x25, 0x8b, 0x15, 0x11, + 0xfe, 0x91, 0x3d, 0xf3, 0x8f, 0xa9, 0xd6, 0x2a, 0x53, 0x6a, 0xfc, 0x21, + 0x5a, 0x13, 0xc1, 0x11, 0x5f, 0xd0, 0x72, 0xc3, 0xca, 0xc5, 0xe7, 0xd4, + 0x16, 0x2d, 0xf9, 0x3c, 0x98, 0x16, 0x5f, 0xbf, 0x20, 0x8e, 0xc5, 0x8b, + 0xe6, 0x1c, 0x36, 0x58, 0xbd, 0xe3, 0x76, 0x58, 0xbf, 0xec, 0xf7, 0xf0, + 0xe4, 0xde, 0x58, 0xbf, 0xba, 0x3e, 0xbb, 0x98, 0xf5, 0x8a, 0xd9, 0x11, + 0x83, 0x20, 0xc3, 0x8a, 0xfa, 0x38, 0x0a, 0x16, 0x17, 0xb7, 0x84, 0xac, + 0x5f, 0xe7, 0xf4, 0xfd, 0x8b, 0xcb, 0x17, 0xf7, 0x49, 0x33, 0xbf, 0x46, + 0xcb, 0x15, 0x03, 0xea, 0xc3, 0x2b, 0x88, 0x0b, 0x17, 0xff, 0x3f, 0x04, + 0x7e, 0x4f, 0xdf, 0x52, 0xb1, 0x7e, 0x3c, 0xef, 0xb0, 0xd6, 0x2f, 0xee, + 0x3e, 0xb7, 0xfe, 0x2c, 0x5f, 0x42, 0x4e, 0xcb, 0x17, 0xf0, 0xdc, 0x5a, + 0xcd, 0xd6, 0x2f, 0xda, 0x01, 0xdf, 0x8b, 0x16, 0xe1, 0x89, 0xa8, 0x75, + 0xa4, 0x30, 0x17, 0xc4, 0x4e, 0xca, 0xd8, 0xbf, 0x84, 0x41, 0x97, 0xd4, + 0xaa, 0x56, 0xf4, 0x7b, 0x15, 0x2a, 0xa9, 0xc5, 0x29, 0xf6, 0xdc, 0x58, + 0xbf, 0xa7, 0x6c, 0x27, 0x35, 0x72, 0x89, 0x95, 0xa3, 0xcd, 0xe0, 0x95, + 0xff, 0xf9, 0xb9, 0xf6, 0x7f, 0x40, 0x52, 0xde, 0x14, 0xac, 0x5e, 0xde, + 0x4e, 0xb1, 0x7b, 0x3c, 0xcb, 0x14, 0xe6, 0xeb, 0x43, 0xd7, 0xfe, 0x26, + 0xfc, 0x82, 0x33, 0x5c, 0xe2, 0x45, 0xef, 0xe0, 0xd6, 0x2a, 0x4f, 0x7d, + 0xd0, 0xaf, 0x7a, 0x0c, 0xb1, 0x6c, 0x58, 0xa9, 0x35, 0xc1, 0x8e, 0xdc, + 0x2d, 0x96, 0x2f, 0xf7, 0x33, 0xf3, 0xdb, 0x06, 0xb1, 0x7d, 0x85, 0x3a, + 0x58, 0xb6, 0x2c, 0x5f, 0x49, 0xf3, 0x83, 0x36, 0x5a, 0x21, 0xad, 0x22, + 0xdc, 0xe3, 0x3f, 0x67, 0xbc, 0x00, 0x4a, 0xc5, 0xff, 0xf7, 0xa7, 0x35, + 0x26, 0x31, 0x61, 0xc5, 0xf5, 0x8a, 0x94, 0x4e, 0x61, 0x83, 0x0e, 0xdf, + 0x70, 0x45, 0xe5, 0x8b, 0xf0, 0x65, 0x0f, 0xe2, 0xc5, 0x39, 0xe6, 0x00, + 0x8e, 0xed, 0xb6, 0x58, 0xb0, 0x16, 0x2d, 0x2b, 0x16, 0xc1, 0x9a, 0x3d, + 0xc4, 0xaf, 0xba, 0x9c, 0x8e, 0xb1, 0x5b, 0x32, 0x19, 0x60, 0x4e, 0x39, + 0x76, 0x58, 0xf1, 0xd9, 0x16, 0xa1, 0x1c, 0x77, 0xff, 0xa7, 0x14, 0x6e, + 0x9e, 0x79, 0x11, 0x0f, 0x43, 0xde, 0xa2, 0x7b, 0xc7, 0x9d, 0xd6, 0x2f, + 0xfc, 0x0e, 0x61, 0x60, 0x39, 0x31, 0xeb, 0x17, 0xe6, 0x89, 0xf3, 0x8b, + 0x17, 0xdc, 0x9d, 0x41, 0x62, 0x8c, 0x3c, 0xbe, 0x14, 0x5c, 0xfc, 0x58, + 0xbd, 0xc9, 0x82, 0xc5, 0xc0, 0xe8, 0xb1, 0x52, 0x79, 0xdd, 0x8b, 0xf0, + 0x76, 0x86, 0x8a, 0x03, 0xb8, 0xd4, 0xa6, 0xdb, 0x83, 0xcd, 0x19, 0x65, + 0xe6, 0xfc, 0xac, 0x5f, 0xe1, 0xfe, 0x7d, 0xe9, 0x3a, 0xc5, 0x7c, 0xf4, + 0x08, 0x72, 0xf3, 0xea, 0x0b, 0x17, 0xff, 0xe8, 0x98, 0x6d, 0xf6, 0x3b, + 0x78, 0x5c, 0x90, 0xd6, 0x2d, 0xb2, 0xc5, 0x7d, 0x10, 0xec, 0x3a, 0x25, + 0x7b, 0xe9, 0x0f, 0xa8, 0x6b, 0x17, 0xdc, 0x7f, 0x4a, 0xc5, 0xdd, 0xc3, + 0x63, 0xc9, 0xec, 0x9e, 0xf3, 0xf7, 0xc5, 0x8a, 0xc3, 0xcf, 0x73, 0x1b, + 0xfe, 0x86, 0xa7, 0xcf, 0xbb, 0x8d, 0x62, 0xb1, 0x3c, 0x97, 0x85, 0x47, + 0xe1, 0x8e, 0x22, 0x0b, 0xdd, 0x42, 0x8f, 0x58, 0xb4, 0x4b, 0x16, 0x89, + 0x62, 0xb7, 0x3c, 0xa7, 0x24, 0x10, 0x9d, 0xe9, 0x3f, 0x16, 0x2f, 0x33, + 0x1d, 0x62, 0xfc, 0x2e, 0xfc, 0x52, 0xb1, 0x63, 0xfc, 0xf1, 0x48, 0x72, + 0xfb, 0x5e, 0xcf, 0xac, 0x5e, 0x70, 0x32, 0xc5, 0xd9, 0xba, 0xc5, 0x2c, + 0x78, 0xb8, 0xaf, 0x9e, 0x7f, 0x0d, 0x2f, 0xa4, 0xec, 0x35, 0x8b, 0xf0, + 0xdf, 0xa4, 0x8d, 0x62, 0x86, 0x79, 0x9a, 0x22, 0xac, 0x44, 0x83, 0xb7, + 0x5e, 0x84, 0x9d, 0x62, 0xf6, 0xcd, 0xb2, 0xc5, 0x6c, 0x6f, 0x18, 0x76, + 0xf7, 0xb3, 0xeb, 0x17, 0x39, 0x2c, 0x5f, 0x6d, 0xe7, 0x35, 0x62, 0xa5, + 0x54, 0x86, 0xc5, 0xf8, 0xc4, 0xe4, 0xfa, 0x8c, 0x09, 0x97, 0x44, 0x43, + 0xd0, 0x74, 0x31, 0x6b, 0xf4, 0x4d, 0xf9, 0xfa, 0xc5, 0xff, 0xcc, 0xf9, + 0xc9, 0xdb, 0x09, 0xcd, 0x58, 0xbf, 0xff, 0xf8, 0x85, 0xd5, 0x3e, 0xe6, + 0x7a, 0x70, 0xb7, 0xe0, 0xf4, 0x4c, 0x12, 0xc5, 0xfd, 0x9a, 0xdb, 0x6c, + 0x02, 0xc5, 0x18, 0x8e, 0x8c, 0x43, 0xe3, 0xad, 0xdd, 0x25, 0x62, 0xfe, + 0x90, 0x1d, 0xa1, 0x8b, 0x14, 0x33, 0xf6, 0x39, 0x81, 0x0c, 0xdf, 0xc7, + 0x9e, 0xfc, 0xdb, 0xac, 0x5c, 0xfb, 0x2c, 0x5f, 0x9e, 0x0f, 0xdc, 0x16, + 0x2f, 0xa4, 0xe5, 0xc5, 0x8a, 0xd2, 0x24, 0xfe, 0x61, 0xc1, 0x88, 0xe2, + 0x9b, 0xe7, 0x8e, 0x16, 0x96, 0x2f, 0xdd, 0xc8, 0xba, 0xf9, 0x58, 0xbf, + 0xff, 0x8b, 0x3d, 0xfc, 0x86, 0x6f, 0x3b, 0xf8, 0x98, 0xeb, 0x15, 0x2a, + 0xcd, 0xf2, 0x38, 0x77, 0x86, 0x0f, 0xd0, 0x18, 0x9b, 0x85, 0xd7, 0xff, + 0xb8, 0xde, 0xfb, 0x70, 0xb3, 0xd8, 0x05, 0x8b, 0xfa, 0x40, 0xfc, 0xc8, + 0x2c, 0x5f, 0xf3, 0xc1, 0xf9, 0xdc, 0x1c, 0x96, 0x2f, 0xf0, 0x1e, 0x1a, + 0xd3, 0x84, 0xb1, 0x5a, 0x3e, 0xe2, 0x39, 0xbe, 0x73, 0xcc, 0x4b, 0x17, + 0xff, 0x71, 0xfb, 0x2c, 0x8b, 0x53, 0xee, 0x2c, 0x5f, 0xbd, 0xcc, 0x93, + 0xac, 0x5f, 0xfd, 0xbf, 0xe5, 0xfd, 0xc7, 0x2e, 0xe0, 0xb1, 0x7f, 0xcf, + 0xe3, 0xbf, 0xb9, 0x27, 0x58, 0xb6, 0x49, 0xff, 0xec, 0x8d, 0x7d, 0x9b, + 0x0a, 0x0b, 0x17, 0xcf, 0xa9, 0xd9, 0x62, 0xa0, 0xaa, 0x0f, 0x74, 0x97, + 0x84, 0xdc, 0x44, 0x20, 0x23, 0x24, 0x6f, 0x42, 0x9c, 0x22, 0x70, 0xc9, + 0x2f, 0xba, 0xb3, 0x06, 0xb1, 0x7e, 0x7e, 0x0b, 0x0e, 0xb1, 0x7f, 0xf7, + 0x1b, 0xb7, 0x38, 0xb9, 0xe9, 0xfa, 0xc5, 0xff, 0xe9, 0x8b, 0xef, 0x25, + 0xf6, 0x8d, 0xe3, 0x7e, 0xb1, 0x62, 0xff, 0xd3, 0x09, 0x8b, 0x9f, 0xce, + 0x9c, 0x58, 0xbf, 0xd3, 0xa6, 0x22, 0xc3, 0x56, 0x2f, 0xa6, 0x35, 0x46, + 0xa8, 0xd4, 0xb1, 0x5d, 0xa6, 0x91, 0x1e, 0x8d, 0xc5, 0x9f, 0x21, 0x75, + 0x19, 0x5f, 0xc2, 0x1b, 0xe9, 0xb4, 0xb1, 0x7c, 0xda, 0x6e, 0xd6, 0x2f, + 0xe0, 0x6c, 0xd0, 0x98, 0xf5, 0x8b, 0xef, 0x14, 0x81, 0x62, 0xfc, 0x64, + 0xc5, 0x21, 0x2c, 0x5c, 0x00, 0x96, 0x2f, 0x0c, 0x72, 0xb1, 0x73, 0x92, + 0xc5, 0x1a, 0x8e, 0xee, 0xc8, 0xdc, 0xc8, 0xe4, 0x5c, 0x2b, 0x10, 0xc8, + 0x63, 0xb7, 0xb3, 0xaa, 0x0b, 0x15, 0x2b, 0x82, 0xb9, 0x08, 0xcd, 0xc9, + 0x5e, 0x37, 0x0f, 0xa9, 0x34, 0x63, 0x84, 0xcd, 0x74, 0xec, 0xb1, 0x7d, + 0xa9, 0xc3, 0xac, 0x5d, 0x81, 0x2c, 0x52, 0x75, 0x0c, 0x17, 0xf7, 0x03, + 0x9d, 0x49, 0xd3, 0xa8, 0x60, 0xa4, 0xea, 0x18, 0x29, 0x3a, 0x86, 0x0a, + 0x4e, 0xa1, 0x82, 0x93, 0xa8, 0x60, 0xa8, 0x22, 0xfd, 0xc6, 0x80, 0x7a, + 0x21, 0xa8, 0xe1, 0xae, 0xa1, 0xab, 0xbf, 0x89, 0xd4, 0x30, 0x5f, 0xcc, + 0xde, 0x8a, 0x4e, 0x9d, 0x43, 0x01, 0x86, 0x96, 0xdd, 0x7a, 0x75, 0x0c, + 0x14, 0x9d, 0x43, 0x05, 0x27, 0x50, 0xc1, 0x50, 0x36, 0x8e, 0x35, 0x49, + 0xd4, 0x30, 0x52, 0x75, 0x0c, 0x14, 0x9d, 0x43, 0x05, 0x27, 0x50, 0xc1, + 0x49, 0xd4, 0x30, 0x52, 0x75, 0x0c, 0x15, 0xb2, 0x27, 0x06, 0x34, 0xe3, + 0x40, 0x1a, 0xe0, 0xd7, 0x41, 0xaa, 0x4e, 0xa1, 0x82, 0x93, 0xa8, 0x60, + 0xa8, 0x1b, 0x4e, 0x0d, 0x52, 0x75, 0x0c, 0x14, 0x9d, 0x43, 0x05, 0x27, + 0x50, 0xc1, 0x49, 0xd4, 0x30, 0x54, 0x0f, 0xa0, 0x03, 0x5e, 0x1a, 0xea, + 0x1a, 0xa4, 0xea, 0x18, 0x29, 0x3a, 0x86, 0x0a, 0x4e, 0xa1, 0x82, 0x93, + 0xa8, 0x60, 0xad, 0x8f, 0xa0, 0xd1, 0xad, 0x0d, 0x7c, 0x6a, 0xc6, 0xa7, + 0x50, 0xc1, 0x49, 0xd4, 0x30, 0x52, 0x75, 0x0c, 0x14, 0x9d, 0x43, 0x05, + 0x27, 0x50, 0xc1, 0x43, 0x3e, 0x8e, 0xc6, 0x80, 0x34, 0x21, 0xaa, 0x4e, + 0xa1, 0x82, 0x93, 0xa8, 0x60, 0xa4, 0xea, 0x18, 0x2f, 0xdf, 0x90, 0x73, + 0x13, 0xa8, 0x60, 0xa4, 0xea, 0x18, 0x2a, 0x08, 0x9e, 0xdc, 0x6b, 0xe3, + 0x4c, 0x34, 0x03, 0x6b, 0x6e, 0x9d, 0x43, 0x05, 0x27, 0x50, 0xc1, 0x49, + 0xd4, 0x30, 0x52, 0x75, 0x0c, 0x14, 0x9d, 0x43, 0x05, 0x40, 0xfa, 0x3b, + 0x1a, 0x71, 0xae, 0x83, 0x54, 0x9d, 0x43, 0x05, 0x27, 0x50, 0xc1, 0x49, + 0xd4, 0x30, 0x52, 0x75, 0x0c, 0x15, 0x03, 0xe8, 0x18, 0xd7, 0xc6, 0x88, + 0x6a, 0xdf, 0x4e, 0xa1, 0x82, 0x93, 0xa8, 0x60, 0xa4, 0xea, 0x18, 0x2d, + 0x04, 0xea, 0x18, 0x29, 0x3a, 0x86, 0x0e, 0xcd, 0x05, 0x27, 0x50, 0xc1, + 0x49, 0xd4, 0x30, 0x52, 0x75, 0x0c, 0x14, 0x9d, 0x43, 0x05, 0x6c, 0x8e, + 0x78, 0x0d, 0x1a, 0x75, 0xb9, 0x5c, 0x43, 0x40, 0x1a, 0xf0, 0xd5, 0xb1, + 0x3a, 0x86, 0x0a, 0x4e, 0xa1, 0x82, 0x93, 0xa8, 0x60, 0xb4, 0x13, 0xa8, + 0x60, 0xa4, 0xea, 0x18, 0x3b, 0x34, 0x14, 0x9d, 0x43, 0x05, 0x27, 0x50, + 0xc1, 0x52, 0x8b, 0x38, 0x0d, 0x39, 0xd6, 0x8a, 0xce, 0x35, 0x49, 0xd4, + 0x30, 0x52, 0x75, 0x0c, 0x14, 0x9d, 0x43, 0x05, 0x27, 0x50, 0xc1, 0x49, + 0xd4, 0x30, 0x54, 0xa2, 0x0b, 0xb1, 0xad, 0x0d, 0x1c, 0x68, 0x86, 0xa9, + 0x3a, 0x86, 0x0a, 0x4e, 0xa1, 0x82, 0x93, 0xa8, 0x60, 0xad, 0x1e, 0x77, + 0x06, 0xbc, 0x35, 0x49, 0xd4, 0x30, 0x52, 0x75, 0x0c, 0x14, 0x9d, 0x43, + 0x05, 0x1c, 0xf3, 0x88, 0x6b, 0xc3, 0x56, 0x3a, 0x75, 0x0c, 0x14, 0x9d, + 0x43, 0x05, 0x27, 0x50, 0xc1, 0x40, 0x36, 0x82, 0x1a, 0xa4, 0xea, 0x18, + 0x29, 0x3a, 0x86, 0x0a, 0x4e, 0xa1, 0x82, 0x93, 0xa8, 0x60, 0xa9, 0x3e, + 0x88, 0x86, 0xbe, 0x34, 0x21, 0xaa, 0x96, 0x62, 0xe6, 0xd0, 0x81, 0x82, + 0x68, 0xd6, 0x72, 0x17, 0x9b, 0xc2, 0x37, 0xb8, 0x44, 0xbc, 0x29, 0xe3, + 0xcf, 0xa2, 0x84, 0x4e, 0xa1, 0xb6, 0x74, 0xaf, 0xc2, 0x25, 0xa1, 0x4c, + 0x03, 0xb2, 0x8c, 0x1f, 0x8d, 0x1e, 0x86, 0x90, 0xa1, 0x95, 0xd2, 0x12, + 0xe1, 0x3e, 0xc7, 0x17, 0x06, 0xa9, 0xd5, 0x08, 0x9b, 0xf4, 0x0a, 0x73, + 0x89, 0xd4, 0x30, 0x46, 0x27, 0x31, 0x79, 0xe4, 0xe9, 0xd4, 0x30, 0x5f, + 0x3e, 0xed, 0xa5, 0xea, 0x18, 0x5e, 0x71, 0xe2, 0xf5, 0x0c, 0x2d, 0x19, + 0xda, 0x33, 0xb4, 0x97, 0xf2, 0xaf, 0x18, 0x57, 0x46, 0x7f, 0x00, 0x74, + 0xf9, 0x9b, 0xc1, 0xc8, 0x4b, 0x15, 0x27, 0xa4, 0xc6, 0x77, 0x9c, 0xb6, + 0x58, 0xbf, 0x9c, 0x21, 0xea, 0x76, 0x58, 0xa8, 0x1e, 0x6f, 0xc7, 0x69, + 0x62, 0x96, 0x2d, 0xd2, 0x4b, 0x8d, 0x06, 0x5c, 0xdd, 0xac, 0x5e, 0x7f, + 0x89, 0x62, 0xee, 0xd9, 0x62, 0xa0, 0x6d, 0x43, 0x1d, 0xbe, 0x98, 0xe9, + 0xf2, 0xc5, 0xe7, 0xe9, 0xd7, 0xac, 0x5e, 0x9c, 0x25, 0x8b, 0xf4, 0x9d, + 0xbb, 0xf2, 0xc5, 0x68, 0xf1, 0x38, 0x37, 0x7d, 0xb8, 0x7a, 0x65, 0x8b, + 0x75, 0x2c, 0x54, 0x9b, 0xa7, 0x25, 0xa1, 0xb6, 0x56, 0x3b, 0x8c, 0x77, + 0x58, 0x2a, 0x44, 0xda, 0x73, 0xaf, 0x93, 0xb2, 0x69, 0x11, 0x78, 0x94, + 0x26, 0x8e, 0xa5, 0xcb, 0x87, 0x05, 0x8b, 0xff, 0x66, 0xed, 0xe7, 0x3c, + 0xf5, 0x71, 0x62, 0xbe, 0x7b, 0x40, 0x18, 0xbd, 0x13, 0x06, 0xb1, 0x7d, + 0x90, 0x93, 0x56, 0x28, 0x67, 0xc9, 0x84, 0x44, 0x3f, 0x7f, 0xd8, 0x28, + 0x39, 0x78, 0x5f, 0x58, 0xbf, 0x39, 0x09, 0xbc, 0xb1, 0x7f, 0xff, 0xec, + 0xc2, 0x17, 0x9f, 0xe4, 0x23, 0x4b, 0x3b, 0xf4, 0xe6, 0x96, 0x2b, 0x11, + 0xf0, 0x45, 0xbc, 0x39, 0x8e, 0x27, 0xbd, 0xf1, 0x6e, 0xb1, 0x7d, 0xfc, + 0xe9, 0x8b, 0x15, 0xf3, 0xc3, 0xf0, 0xfd, 0xe0, 0x0b, 0x8b, 0x17, 0xf7, + 0x9b, 0x5a, 0x9d, 0x96, 0x2f, 0xf6, 0x69, 0x8e, 0x52, 0x75, 0x8b, 0xe8, + 0xa0, 0xe4, 0xb1, 0x73, 0x17, 0x0f, 0x54, 0x33, 0x2b, 0xff, 0xb8, 0xc4, + 0x0f, 0xe4, 0x52, 0x43, 0x58, 0xb8, 0x12, 0xb1, 0x7f, 0x69, 0x88, 0x39, + 0x02, 0xc5, 0xcd, 0xa5, 0x8b, 0x3a, 0xc6, 0xe5, 0xbd, 0xb7, 0x58, 0xb1, + 0xd6, 0x2d, 0x18, 0xe8, 0xa2, 0xd0, 0xbf, 0xd1, 0x58, 0x84, 0x31, 0x3b, + 0xfb, 0xb8, 0x7e, 0x4b, 0x65, 0x8a, 0xed, 0x50, 0xc9, 0xe1, 0x08, 0x02, + 0xd8, 0xe8, 0x73, 0x75, 0x29, 0x5f, 0xa7, 0x8d, 0xd8, 0x16, 0x2f, 0xf7, + 0xbf, 0x2f, 0x3d, 0xf9, 0x62, 0xff, 0xff, 0xa1, 0xf9, 0xfb, 0x9a, 0xce, + 0x53, 0xf6, 0x78, 0x38, 0xd6, 0x2f, 0xef, 0xe3, 0xfc, 0xec, 0xb1, 0x58, + 0x89, 0x1e, 0x8c, 0x97, 0x43, 0x16, 0x2f, 0xc5, 0x3f, 0xda, 0x56, 0x2f, + 0x1a, 0xda, 0x58, 0xb1, 0xd6, 0x2f, 0xe7, 0xd6, 0xed, 0xad, 0x96, 0x2f, + 0xbf, 0x22, 0xeb, 0xd6, 0x2f, 0xba, 0xa7, 0xbe, 0x2c, 0x56, 0xe7, 0x9f, + 0xd4, 0x51, 0x7e, 0x17, 0xbf, 0x9d, 0x16, 0x2b, 0xad, 0x47, 0x14, 0x42, + 0x5a, 0x7f, 0x22, 0x6b, 0xff, 0xfd, 0xf7, 0xf6, 0x44, 0x52, 0x78, 0x89, + 0x82, 0xf6, 0x7d, 0x62, 0xdb, 0x2c, 0x5b, 0xeb, 0x16, 0xd3, 0x9a, 0x51, + 0x09, 0xdf, 0xfc, 0xe6, 0x7d, 0x9f, 0x93, 0x08, 0x32, 0xc5, 0xfc, 0x7c, + 0x8a, 0x4b, 0x65, 0x8b, 0xff, 0xa7, 0x34, 0x59, 0xee, 0x33, 0x6c, 0xb1, + 0x52, 0x7e, 0x44, 0x5f, 0x4b, 0x17, 0x0f, 0xa2, 0xc5, 0xfe, 0x8a, 0x13, + 0xde, 0xd8, 0x12, 0xc5, 0xda, 0x95, 0x8b, 0xe3, 0xe9, 0xa0, 0xb1, 0x51, + 0xa1, 0xba, 0xc1, 0x7b, 0xe8, 0xe9, 0x98, 0xf5, 0x8a, 0xc5, 0x55, 0x5b, + 0xa1, 0x6a, 0x10, 0xe7, 0x26, 0xfc, 0x2d, 0x80, 0x40, 0x41, 0x9c, 0x1a, + 0x8e, 0x72, 0x0c, 0x96, 0xff, 0x7d, 0xbb, 0x07, 0xdc, 0x25, 0x8b, 0xa4, + 0x0b, 0x16, 0x3e, 0x1e, 0x6f, 0xcd, 0xaf, 0xf7, 0xf5, 0x2f, 0x06, 0xe2, + 0xc5, 0xff, 0xec, 0x1c, 0x76, 0xa7, 0xa3, 0xfb, 0x98, 0x6a, 0xc5, 0xfd, + 0xb8, 0x60, 0x04, 0xf6, 0xb1, 0x7f, 0xed, 0xbc, 0xdb, 0x94, 0xc3, 0x98, + 0xb1, 0x52, 0x7e, 0x4e, 0x65, 0x58, 0x99, 0xe3, 0x93, 0xfc, 0xcf, 0x90, + 0xc2, 0xbf, 0xf3, 0x6e, 0x3f, 0xc8, 0x30, 0x80, 0xb1, 0x70, 0xb8, 0xb1, + 0x46, 0x1e, 0xb8, 0x0f, 0xef, 0xfd, 0x9c, 0xc1, 0x75, 0xec, 0x6f, 0xf1, + 0x62, 0xe0, 0x4a, 0xc5, 0x61, 0xff, 0x6e, 0x46, 0x04, 0x4a, 0x96, 0x58, + 0xcc, 0x08, 0xb2, 0x51, 0xbe, 0xeb, 0xbd, 0x94, 0xbc, 0x31, 0x62, 0x24, + 0xf8, 0xbb, 0x14, 0x02, 0x5d, 0x57, 0xa5, 0x11, 0x8a, 0x31, 0x6b, 0xf4, + 0x30, 0x6c, 0x75, 0x8b, 0xf4, 0x08, 0x4c, 0x1a, 0xc5, 0xf4, 0xc3, 0x92, + 0xb1, 0x7f, 0xf1, 0x14, 0xec, 0x58, 0xfd, 0x26, 0x39, 0x62, 0xf4, 0xf7, + 0xc5, 0x8a, 0x94, 0x6c, 0x39, 0x41, 0xca, 0x58, 0x8b, 0x88, 0xf7, 0xf7, + 0x89, 0x81, 0x84, 0xb1, 0x79, 0xb5, 0x2b, 0x17, 0xcd, 0xa6, 0x25, 0x8b, + 0xff, 0x03, 0x52, 0x59, 0x09, 0xd0, 0x16, 0x2f, 0xa3, 0x98, 0x80, 0xb1, + 0x7d, 0xee, 0x67, 0x96, 0x29, 0xcf, 0x21, 0x89, 0x6f, 0xcf, 0xdf, 0x1b, + 0xb5, 0x8a, 0x82, 0x61, 0xa3, 0x1c, 0xd1, 0x09, 0xe1, 0x0d, 0xc2, 0x0a, + 0x58, 0xbc, 0x79, 0x75, 0x8a, 0x23, 0x51, 0xd0, 0x32, 0xfd, 0x13, 0x9d, + 0xa2, 0x58, 0xbf, 0xf7, 0xbe, 0xd0, 0x26, 0xfe, 0x71, 0x62, 0xe3, 0xb2, + 0xc5, 0xff, 0xf8, 0x9b, 0xc5, 0x9e, 0xf8, 0xbb, 0xc3, 0xb7, 0x6b, 0x15, + 0x88, 0xab, 0x73, 0xe6, 0x17, 0xbf, 0x10, 0x9b, 0xb8, 0x2c, 0x5f, 0x30, + 0x6f, 0x8b, 0x16, 0xe3, 0x9e, 0x58, 0x8a, 0x6f, 0xe7, 0xda, 0x7b, 0xc2, + 0x58, 0xbf, 0x3f, 0x7c, 0x31, 0xfb, 0x3d, 0x5d, 0x13, 0xdf, 0xf7, 0xe5, + 0xfe, 0xdc, 0x98, 0xf5, 0x8b, 0xfe, 0x0d, 0x87, 0xcc, 0x3c, 0xc7, 0xac, + 0x5e, 0xce, 0xc2, 0x58, 0xad, 0x1e, 0xe1, 0x1e, 0xdf, 0xec, 0xc2, 0x80, + 0x64, 0x35, 0x8b, 0xb8, 0x6a, 0xc5, 0x86, 0xb1, 0x7e, 0x60, 0x72, 0x2e, + 0x8b, 0x14, 0xc6, 0xf8, 0x84, 0xac, 0x03, 0x13, 0x61, 0xc8, 0x4b, 0xc4, + 0x42, 0x03, 0x3f, 0x2b, 0xdf, 0xfd, 0x1e, 0x23, 0x5f, 0xbe, 0x64, 0x53, + 0xe5, 0x8b, 0xfe, 0x73, 0x96, 0x03, 0xec, 0x75, 0x8b, 0xd1, 0x34, 0x4b, + 0x14, 0xe8, 0xa2, 0xe2, 0x58, 0x8e, 0x2d, 0x1e, 0xb1, 0x7c, 0x02, 0x79, + 0x58, 0xad, 0xd5, 0x80, 0x77, 0x1d, 0x11, 0xe1, 0xf2, 0xc5, 0xe4, 0x2b, + 0x4b, 0x17, 0x7d, 0x96, 0x2f, 0xfc, 0xdf, 0xc3, 0xb7, 0xf3, 0xb0, 0x2c, + 0x5f, 0xf7, 0xf0, 0xed, 0xfc, 0xec, 0x0b, 0x16, 0x01, 0x87, 0xf2, 0xc7, + 0xf5, 0x28, 0xb8, 0x68, 0x48, 0x5f, 0xfc, 0x36, 0x3f, 0x4f, 0xcb, 0xe8, + 0x51, 0xeb, 0x17, 0x0a, 0x56, 0x2f, 0x77, 0x0f, 0xac, 0x5e, 0xcd, 0x41, + 0x62, 0x86, 0x7a, 0x64, 0x2f, 0xd0, 0x7e, 0xf0, 0xd8, 0x96, 0x2e, 0xde, + 0x39, 0x62, 0xb1, 0x30, 0x57, 0x84, 0xeb, 0x18, 0x08, 0x72, 0xfb, 0x76, + 0x23, 0x56, 0x2f, 0xc3, 0xef, 0xd9, 0xb2, 0xc5, 0xfb, 0x08, 0x7f, 0x95, + 0x8b, 0xff, 0xfe, 0xf6, 0x14, 0xee, 0x52, 0x7e, 0x73, 0x21, 0xf7, 0x20, + 0x2c, 0x51, 0x88, 0x8c, 0xd1, 0x3d, 0x4a, 0x3f, 0xdc, 0x91, 0xa1, 0x6f, + 0x7f, 0xf3, 0x6b, 0x4c, 0x09, 0x8c, 0x08, 0x20, 0x96, 0x2f, 0x41, 0xc0, + 0xb1, 0x7f, 0xe3, 0x73, 0xbf, 0x3f, 0xb4, 0x23, 0xac, 0x51, 0x88, 0xaa, + 0x64, 0xbf, 0x0e, 0xdd, 0x30, 0x58, 0xbf, 0xa6, 0x23, 0x94, 0x9a, 0xb1, + 0x52, 0x7e, 0xc0, 0x30, 0xea, 0x17, 0xbf, 0xe6, 0xec, 0xb0, 0x7f, 0x60, + 0x96, 0x2f, 0xec, 0xfe, 0x1a, 0xfa, 0x58, 0xa3, 0x19, 0x7c, 0xb3, 0x19, + 0xce, 0x3c, 0x39, 0x17, 0xe1, 0xaa, 0xd2, 0xf3, 0x7a, 0xf5, 0x72, 0x86, + 0x27, 0x23, 0x2b, 0xf4, 0x67, 0xe2, 0x8d, 0x48, 0x23, 0x18, 0xe3, 0xab, + 0xff, 0xf4, 0x96, 0x01, 0xa0, 0xe5, 0xe8, 0x66, 0xb1, 0x62, 0xfc, 0xc2, + 0xdc, 0xee, 0xb1, 0x78, 0xdf, 0xba, 0xc5, 0x0d, 0x13, 0x3b, 0xa9, 0x68, + 0xa6, 0xfb, 0x3d, 0xf7, 0x58, 0xbd, 0x38, 0x75, 0x8a, 0xd1, 0xbe, 0xf9, + 0x15, 0xfd, 0x93, 0xdc, 0x1c, 0xeb, 0x17, 0xec, 0x8a, 0x0c, 0x4b, 0x17, + 0x8a, 0x1c, 0xd1, 0xeb, 0x06, 0x5d, 0x7c, 0x53, 0x9a, 0x58, 0xa5, 0x8b, + 0x87, 0x9f, 0x35, 0xbe, 0x21, 0xbc, 0x7f, 0xb2, 0xc5, 0x62, 0x64, 0x2e, + 0xee, 0xcc, 0x22, 0x2c, 0xbd, 0xd3, 0x3e, 0xb1, 0x7f, 0xec, 0x7f, 0xcf, + 0x60, 0xcf, 0x71, 0x62, 0x98, 0xf7, 0x88, 0x7e, 0xfd, 0xf7, 0x83, 0x41, + 0x62, 0xff, 0xc1, 0xc4, 0x64, 0x86, 0xdb, 0xcf, 0xd6, 0x29, 0x8f, 0xb0, + 0x45, 0x16, 0x35, 0x62, 0xf7, 0xf3, 0xa2, 0xc5, 0x11, 0xb2, 0xf0, 0x9d, + 0xff, 0xd3, 0xd9, 0x31, 0xa1, 0xfc, 0x9b, 0xb5, 0x8b, 0xff, 0x80, 0xd0, + 0xe6, 0x43, 0xf2, 0x46, 0xac, 0x5f, 0xc7, 0xe6, 0x1e, 0x63, 0xd6, 0x2a, + 0x4f, 0xd9, 0xd1, 0x6f, 0xf3, 0x9b, 0xc7, 0x2e, 0xe0, 0xb1, 0x69, 0xd1, + 0xea, 0xfc, 0x82, 0x9d, 0x35, 0x9f, 0x90, 0x75, 0x46, 0x25, 0x46, 0x3f, + 0x7a, 0x2f, 0x5a, 0xab, 0x32, 0xe1, 0x76, 0x94, 0xd1, 0x09, 0xcc, 0x91, + 0xce, 0xb7, 0x64, 0xb5, 0xe3, 0x63, 0xe4, 0xde, 0x78, 0xab, 0xb9, 0x61, + 0x6f, 0x48, 0xf5, 0x8f, 0x94, 0x75, 0x14, 0xa4, 0xdd, 0x4b, 0x20, 0x3c, + 0xbb, 0xdf, 0xcf, 0x7c, 0x35, 0x66, 0x4a, 0x09, 0x4c, 0x45, 0x4b, 0x9a, + 0xe4, 0x74, 0x1e, 0xa6, 0x16, 0x0a, 0x37, 0xde, 0x91, 0xc8, 0x47, 0x42, + 0x64, 0x38, 0x46, 0x75, 0x47, 0x59, 0x7f, 0xdc, 0xf7, 0xc4, 0xd0, 0x84, + 0xac, 0x5e, 0xf6, 0x6e, 0xb1, 0x76, 0xd8, 0xb1, 0x4e, 0x6d, 0x80, 0x3d, + 0x7f, 0xb5, 0x3e, 0x70, 0x4c, 0x16, 0x2f, 0xf7, 0x79, 0xe7, 0xfb, 0x9a, + 0xb1, 0x7f, 0xbd, 0x01, 0x0d, 0x88, 0x0b, 0x17, 0x8f, 0xcd, 0xd6, 0x2f, + 0x41, 0xc0, 0xb1, 0x69, 0x58, 0xbb, 0x9e, 0x58, 0xb1, 0x6e, 0x6a, 0x44, + 0x23, 0x7d, 0x9e, 0x6e, 0xd6, 0x28, 0xc4, 0x57, 0xf5, 0xa3, 0xee, 0x8d, + 0xa2, 0x7b, 0xff, 0xb9, 0x9b, 0x8f, 0x34, 0x13, 0x7e, 0x25, 0x8b, 0xfe, + 0xe1, 0xac, 0x53, 0x9b, 0x4a, 0xc5, 0xf4, 0x33, 0x52, 0xb1, 0x7f, 0x04, + 0xda, 0xd3, 0x76, 0xb1, 0x7c, 0x21, 0xfd, 0xd6, 0x2f, 0xe0, 0x4f, 0x89, + 0xf8, 0xb1, 0x7f, 0xfe, 0xe6, 0xb4, 0xf1, 0x73, 0x53, 0xe7, 0xdd, 0xc6, + 0xb1, 0x50, 0x56, 0x11, 0x86, 0x7b, 0x9a, 0x9e, 0x1c, 0x7f, 0x42, 0x64, + 0x80, 0x1c, 0x91, 0x17, 0x0c, 0x3c, 0x46, 0x11, 0x6d, 0xfd, 0x23, 0x70, + 0xa4, 0xeb, 0x17, 0x89, 0xe2, 0x58, 0xba, 0x1b, 0x2c, 0x5f, 0xa6, 0x3b, + 0x82, 0x25, 0x8b, 0xde, 0x9e, 0x2c, 0x5f, 0x61, 0xe7, 0xeb, 0x16, 0x25, + 0x8b, 0xf0, 0xf3, 0x01, 0xc5, 0x8a, 0x8e, 0x37, 0x21, 0x88, 0xd6, 0xe8, + 0x80, 0x02, 0xdd, 0xff, 0xb8, 0x63, 0x6f, 0x31, 0x09, 0xbb, 0x58, 0xae, + 0xd3, 0x48, 0x88, 0x64, 0xe5, 0x65, 0x09, 0xdf, 0x12, 0x5e, 0xd9, 0xc6, + 0xb1, 0x7f, 0x33, 0x6b, 0x53, 0xb2, 0xc5, 0x84, 0xb1, 0x60, 0x39, 0xef, + 0x7c, 0x78, 0x8b, 0xaf, 0x03, 0xdc, 0x58, 0xb7, 0x5a, 0xb1, 0x7f, 0x73, + 0xf1, 0x48, 0x04, 0xb1, 0x77, 0x48, 0x2c, 0x5f, 0x01, 0xf5, 0x05, 0x8b, + 0xce, 0x46, 0xac, 0x5f, 0x34, 0x42, 0x0d, 0x62, 0xa0, 0x7c, 0xba, 0x23, + 0xf8, 0xed, 0xde, 0xe2, 0xc5, 0xfb, 0x0b, 0x3b, 0x09, 0x62, 0xfc, 0x2d, + 0xfe, 0xfa, 0x58, 0xb9, 0xe2, 0x58, 0xbb, 0x0d, 0x58, 0xb7, 0xba, 0xd4, + 0x41, 0xc9, 0x4f, 0xca, 0xb8, 0x31, 0x7e, 0xdf, 0xf3, 0xdc, 0x16, 0x2f, + 0x0f, 0xee, 0xb1, 0x58, 0x79, 0x0e, 0x57, 0x7f, 0x1f, 0x8e, 0x6f, 0x82, + 0x58, 0xbe, 0xef, 0xf3, 0x05, 0x8b, 0x8b, 0x75, 0x8a, 0x93, 0x78, 0xc4, + 0x94, 0x62, 0xae, 0x98, 0xd8, 0x7b, 0xb1, 0x77, 0x30, 0xd3, 0xf8, 0x0b, + 0xca, 0x13, 0x7e, 0x84, 0x78, 0x64, 0x1d, 0x4d, 0xb7, 0xff, 0xe7, 0x2d, + 0xf7, 0xfb, 0x6f, 0xf9, 0x7d, 0x0a, 0x3d, 0x62, 0xfb, 0xde, 0xcd, 0x96, + 0x2d, 0x2b, 0x15, 0x86, 0xd5, 0xc9, 0x2f, 0xfa, 0x79, 0xcc, 0xf7, 0x33, + 0x65, 0x8b, 0x76, 0x47, 0xb2, 0x18, 0xfd, 0xff, 0xee, 0x7c, 0x26, 0x28, + 0x66, 0x17, 0x7e, 0x58, 0xbf, 0xa7, 0xb8, 0x67, 0x54, 0x16, 0x2b, 0x11, + 0x4d, 0xa2, 0x93, 0xa5, 0xdf, 0xfc, 0x7c, 0x1f, 0x7e, 0xd4, 0xe7, 0x67, + 0x58, 0xbf, 0xe2, 0xc3, 0xce, 0xf9, 0xdf, 0x96, 0x29, 0x91, 0x03, 0xc4, + 0x7b, 0xbb, 0xf2, 0xc5, 0xfb, 0x0b, 0x67, 0xd2, 0xc5, 0xfb, 0xcc, 0x42, + 0xc5, 0x8b, 0xfd, 0xcc, 0x3b, 0xfb, 0xec, 0xb1, 0x50, 0x45, 0xee, 0x11, + 0x68, 0x64, 0x8a, 0x3c, 0x4f, 0x7f, 0x77, 0x08, 0xb3, 0x37, 0x58, 0xbf, + 0xa4, 0x5e, 0xfb, 0x01, 0x62, 0xf7, 0xe4, 0x6b, 0x15, 0xa3, 0xcb, 0xe1, + 0x75, 0xf4, 0x34, 0x42, 0x58, 0xa8, 0x1e, 0x2f, 0x64, 0x57, 0xf8, 0xb2, + 0x28, 0x08, 0xbc, 0xb1, 0x52, 0x9b, 0x03, 0xa4, 0x34, 0x30, 0x78, 0x47, + 0x7b, 0x8f, 0xd1, 0x62, 0xf1, 0x87, 0x75, 0x8b, 0xed, 0x4f, 0xb8, 0xb1, + 0x78, 0x58, 0x4b, 0x16, 0xc8, 0x8d, 0xff, 0x88, 0xef, 0xdf, 0x72, 0x93, + 0xac, 0x58, 0xeb, 0x17, 0xf3, 0x8a, 0x1c, 0x7d, 0x96, 0x2b, 0x0f, 0xa0, + 0x89, 0xfc, 0x25, 0x50, 0x4c, 0x64, 0x97, 0x79, 0x08, 0xfb, 0xdd, 0x5a, + 0x95, 0x8b, 0xff, 0x14, 0xb6, 0xdc, 0xce, 0x92, 0x12, 0xc5, 0xff, 0x7d, + 0xf5, 0xf6, 0xeb, 0x42, 0x09, 0x62, 0xff, 0xcf, 0xee, 0x16, 0x1a, 0x01, + 0x44, 0xb1, 0x7f, 0xb5, 0x39, 0xdf, 0x5d, 0x63, 0x6e, 0xb5, 0x62, 0xa0, + 0x88, 0x8f, 0x20, 0xdf, 0xfe, 0x26, 0x0b, 0x85, 0x9d, 0xc3, 0xc2, 0xd9, + 0x62, 0xfe, 0x78, 0x8b, 0x3a, 0x32, 0xc5, 0xdc, 0x75, 0x8a, 0xd1, 0xe3, + 0x70, 0xbe, 0xfb, 0x76, 0xdd, 0x96, 0x2f, 0xf6, 0x14, 0x33, 0x8d, 0xf5, + 0x8b, 0xff, 0xda, 0x34, 0x26, 0xd8, 0xb3, 0xa6, 0x9f, 0x8b, 0x16, 0xe1, + 0x8a, 0xb7, 0x24, 0xd4, 0x64, 0x18, 0x83, 0xdc, 0x32, 0x62, 0x23, 0xd4, + 0x24, 0xd8, 0x8b, 0xc4, 0x81, 0x99, 0x5c, 0xdb, 0x2c, 0x5a, 0x56, 0x2f, + 0x7f, 0xee, 0xb1, 0x7e, 0xc1, 0xff, 0x09, 0x62, 0xda, 0xd8, 0xf5, 0x58, + 0x44, 0x87, 0x6f, 0x8f, 0xa7, 0x35, 0x62, 0xf1, 0x0b, 0x16, 0x29, 0xcf, + 0x01, 0x89, 0x2f, 0x87, 0x1a, 0x75, 0xbd, 0x62, 0xc5, 0xee, 0x49, 0xd6, + 0x2a, 0x3c, 0xf4, 0x38, 0x67, 0x7d, 0x31, 0x4e, 0x96, 0x28, 0x67, 0x91, + 0xe2, 0x5b, 0xff, 0xfe, 0x8b, 0x98, 0x3c, 0xef, 0xdf, 0x68, 0x99, 0xb5, + 0xe1, 0x32, 0xc5, 0x4a, 0xf6, 0xb7, 0x73, 0x82, 0x9f, 0x84, 0xf3, 0x36, + 0x81, 0xd0, 0xa1, 0x71, 0xe2, 0x2b, 0xe1, 0xfc, 0x5d, 0x4b, 0x17, 0xfc, + 0x23, 0x70, 0x85, 0xe1, 0x1a, 0xb1, 0x7f, 0x36, 0xdf, 0x9d, 0x01, 0x62, + 0xfa, 0x1c, 0x71, 0xac, 0x54, 0x9e, 0x93, 0x17, 0xd7, 0xd1, 0x5c, 0x50, + 0x8e, 0xbf, 0xcf, 0xa2, 0xf7, 0xb3, 0x65, 0x8b, 0xef, 0x6d, 0x81, 0x2c, + 0x5e, 0x8e, 0xc0, 0x2c, 0x5c, 0xdd, 0x16, 0x2f, 0xe8, 0x13, 0xc3, 0xf8, + 0xb1, 0x7e, 0xd9, 0xf5, 0x30, 0x58, 0xbf, 0xd3, 0xb6, 0x42, 0x41, 0xc5, + 0x8a, 0x35, 0x31, 0xce, 0xcd, 0x1c, 0x96, 0x22, 0x0d, 0x0c, 0x91, 0x6f, + 0x0a, 0x6f, 0xf8, 0xa7, 0x39, 0x84, 0x19, 0xd6, 0x2f, 0x13, 0x04, 0xb1, + 0x50, 0x3d, 0x5e, 0x1c, 0x5e, 0xf3, 0x9a, 0xb1, 0x7f, 0xcd, 0xa8, 0x0f, + 0x58, 0xe6, 0xac, 0x5f, 0xbf, 0x3d, 0xf0, 0x4b, 0x17, 0xa5, 0xb7, 0x58, + 0xb9, 0xb6, 0x19, 0xe3, 0xe8, 0xaa, 0xa0, 0x8a, 0xf6, 0x84, 0x0d, 0xf8, + 0x5e, 0x8e, 0xcf, 0x2c, 0x5e, 0x1b, 0x9a, 0xb1, 0x52, 0x79, 0x58, 0x59, + 0x7f, 0x37, 0xc3, 0xd3, 0x01, 0x62, 0xf6, 0x80, 0x1a, 0xc5, 0xd3, 0x12, + 0xc5, 0xe6, 0xd1, 0xab, 0x15, 0xb1, 0xb6, 0x21, 0x8b, 0xff, 0x9f, 0xd3, + 0xee, 0x7d, 0x9f, 0xe2, 0x58, 0xa9, 0x45, 0xd3, 0xaa, 0xb1, 0x0d, 0xf1, + 0x10, 0xa0, 0xb1, 0x7b, 0x8e, 0x12, 0xc5, 0xfe, 0x21, 0x73, 0x0f, 0x3b, + 0xac, 0x5f, 0xfb, 0xf3, 0xa0, 0x16, 0x04, 0xc0, 0x58, 0xbd, 0x99, 0x12, + 0xc5, 0xff, 0xbc, 0xc0, 0xe0, 0xc4, 0xda, 0x82, 0xc5, 0x1a, 0x8d, 0x0f, + 0x9a, 0x00, 0xff, 0xc3, 0xb7, 0xde, 0x04, 0xc1, 0x62, 0xb0, 0xf8, 0x44, + 0x7d, 0x7f, 0xef, 0x8b, 0xc1, 0xfb, 0xd8, 0x40, 0x58, 0xbd, 0x3d, 0x84, + 0xb1, 0x7e, 0xd0, 0x8e, 0xc4, 0xb1, 0x58, 0x88, 0x8f, 0x20, 0x88, 0x7e, + 0xfb, 0x85, 0x27, 0x58, 0xbf, 0xed, 0xdf, 0x46, 0xe7, 0x47, 0xd2, 0xc5, + 0xf1, 0xe7, 0x36, 0x58, 0xbe, 0xe8, 0x53, 0xda, 0xc5, 0xc1, 0x79, 0x62, + 0xb0, 0xdf, 0x39, 0x2d, 0x4a, 0x37, 0xfb, 0x22, 0x73, 0xde, 0x30, 0xdf, + 0x49, 0x7b, 0x75, 0x8b, 0xe3, 0x76, 0x68, 0xf5, 0x8b, 0xe8, 0xa0, 0xc7, + 0x58, 0xad, 0x1e, 0x61, 0xca, 0x28, 0xc6, 0x4a, 0xf0, 0xe1, 0xab, 0x91, + 0xa1, 0xf7, 0x0b, 0xb7, 0x22, 0x8a, 0x19, 0xba, 0x71, 0x39, 0x07, 0xe1, + 0xd2, 0xc5, 0xa0, 0x22, 0x28, 0xd3, 0xf9, 0x0a, 0x9f, 0x46, 0x1d, 0x1c, + 0x78, 0x1b, 0x7d, 0xff, 0xcf, 0xd8, 0x0b, 0x3d, 0xdc, 0x1c, 0x96, 0x29, + 0x62, 0xb4, 0x7a, 0x3d, 0x7a, 0x2d, 0xfa, 0x3b, 0xf8, 0x06, 0x58, 0xbf, + 0xc0, 0x0f, 0x08, 0x7f, 0x95, 0x8a, 0x94, 0xf8, 0x9e, 0x35, 0xc3, 0x93, + 0xb1, 0x5d, 0xd0, 0x25, 0x8b, 0xe3, 0xbf, 0xe5, 0x62, 0xf4, 0xe8, 0x0b, + 0x16, 0xe6, 0x1b, 0xf0, 0xc8, 0xaf, 0x77, 0x0e, 0x2c, 0x5f, 0x9b, 0xc1, + 0x67, 0xd6, 0x2f, 0xb0, 0xf3, 0x1e, 0xb1, 0x5f, 0x3c, 0xee, 0x14, 0xd7, + 0x68, 0xb6, 0xd1, 0x38, 0x4d, 0xb7, 0xb8, 0x00, 0x96, 0x2f, 0x88, 0x47, + 0xe2, 0xc5, 0xfc, 0x58, 0x73, 0xcf, 0x6b, 0x17, 0x8e, 0xfc, 0x58, 0xbe, + 0xef, 0x93, 0xda, 0xc5, 0xfa, 0x1e, 0xe4, 0x9a, 0xb1, 0x7f, 0xf4, 0xea, + 0x62, 0x26, 0x0b, 0xd9, 0xf5, 0x8a, 0x63, 0xef, 0x22, 0xab, 0xff, 0xbf, + 0x85, 0x20, 0xe7, 0xe4, 0xbc, 0xb1, 0x68, 0x18, 0x9a, 0x14, 0x0b, 0x9c, + 0x74, 0xf0, 0x94, 0xf1, 0x05, 0x18, 0xac, 0x62, 0x63, 0x0c, 0xc3, 0x23, + 0x47, 0xda, 0x36, 0x5b, 0xfe, 0x08, 0xb3, 0x5c, 0xfe, 0x6e, 0xb1, 0x7f, + 0xf1, 0x67, 0x30, 0x71, 0x42, 0x75, 0xb2, 0xc5, 0x3a, 0x20, 0x7c, 0x77, + 0x7d, 0x07, 0x2d, 0x96, 0x2f, 0x8a, 0x4f, 0xc5, 0x8a, 0x88, 0xf1, 0x7c, + 0x47, 0x7d, 0xde, 0xef, 0xa5, 0x8a, 0x34, 0xf2, 0x3c, 0x47, 0x7d, 0x83, + 0x72, 0x58, 0xbc, 0x79, 0xe2, 0xc5, 0xfb, 0x3c, 0x4c, 0x05, 0x8a, 0x01, + 0xe2, 0x10, 0xed, 0xf0, 0x8d, 0xcd, 0x96, 0x2f, 0x36, 0xa0, 0xb1, 0x5f, + 0x3c, 0x21, 0x12, 0xdf, 0x48, 0xba, 0xfe, 0x24, 0x5f, 0xa1, 0x18, 0x10, + 0x41, 0x2c, 0x51, 0x1e, 0xc0, 0x8a, 0x2f, 0xa1, 0xe7, 0x02, 0xc5, 0xd9, + 0xda, 0xc5, 0xfc, 0xcf, 0xcf, 0xe7, 0x96, 0x2f, 0xd1, 0xcd, 0xb7, 0xdd, + 0x62, 0xff, 0x0f, 0x0e, 0x3d, 0x36, 0xcb, 0x17, 0xcd, 0xb4, 0xf9, 0x62, + 0x9c, 0xf6, 0x08, 0xd6, 0xff, 0x68, 0xb0, 0x64, 0xdb, 0x2c, 0x5f, 0x7b, + 0x86, 0x79, 0x62, 0xdf, 0x73, 0xd8, 0x63, 0x3b, 0xff, 0xef, 0xb9, 0xa6, + 0xcf, 0xb9, 0x24, 0x59, 0xe5, 0x8b, 0xe2, 0xc3, 0xca, 0xc5, 0xfe, 0x9f, + 0x30, 0x1b, 0x34, 0xb1, 0x6f, 0x2c, 0x5f, 0xf9, 0xf8, 0xfd, 0x35, 0x21, + 0xb1, 0x2c, 0x56, 0x1e, 0x93, 0x09, 0x5f, 0xb7, 0xcf, 0x7d, 0xd6, 0x2c, + 0x4b, 0x17, 0xff, 0xa7, 0x3e, 0xfa, 0x3c, 0xe1, 0x7b, 0x8b, 0x15, 0x87, + 0xb2, 0x21, 0x1a, 0x24, 0x51, 0xfa, 0x10, 0x57, 0xff, 0x1f, 0x37, 0x9f, + 0xc9, 0xfb, 0x1f, 0x16, 0x2f, 0xc7, 0xf7, 0x27, 0x16, 0x2d, 0xfc, 0x3e, + 0xf6, 0x47, 0xbf, 0xff, 0xe9, 0xd7, 0xd9, 0xfd, 0x09, 0x2c, 0x38, 0xb9, + 0xf6, 0x82, 0xc5, 0xe7, 0xec, 0x0b, 0x17, 0xf1, 0x30, 0x02, 0xcf, 0xac, + 0x5f, 0xef, 0x16, 0x01, 0x88, 0x1a, 0x3c, 0xcf, 0x0f, 0x5c, 0x5b, 0x98, + 0xb9, 0x1f, 0x30, 0x84, 0xc7, 0x8d, 0xc9, 0x9d, 0x40, 0xe4, 0x3f, 0x84, + 0x23, 0x43, 0x0f, 0xd0, 0x96, 0x08, 0x98, 0x38, 0x58, 0xde, 0xf1, 0xfc, + 0xb1, 0x7e, 0x13, 0x93, 0xf1, 0x62, 0x98, 0xf1, 0x78, 0x3d, 0x7b, 0x93, + 0xe5, 0x8b, 0xe7, 0xf0, 0x19, 0x62, 0xdb, 0xac, 0x5e, 0xe6, 0xa4, 0xe6, + 0xd5, 0x88, 0xaf, 0xd2, 0x5b, 0xcf, 0x45, 0x8b, 0xe9, 0xf3, 0x76, 0xb1, + 0x58, 0x7f, 0xdf, 0x31, 0x22, 0xaa, 0x31, 0x90, 0xfb, 0x06, 0x51, 0xb1, + 0xe3, 0xd7, 0x64, 0x3a, 0x23, 0xf8, 0xc3, 0x4e, 0x5e, 0x02, 0x30, 0x5e, + 0x10, 0xfa, 0x1a, 0x17, 0xf8, 0x05, 0x9d, 0x34, 0xfc, 0x58, 0xb9, 0xc6, + 0xb1, 0x7f, 0xed, 0x69, 0x88, 0xa7, 0x98, 0x35, 0x8b, 0xf8, 0x89, 0x82, + 0x6f, 0xac, 0x56, 0xe8, 0x81, 0x61, 0x70, 0xcf, 0x6f, 0xbd, 0x3d, 0xc1, + 0x62, 0x8c, 0x76, 0x12, 0xfd, 0x6b, 0x84, 0xcb, 0x28, 0xda, 0x13, 0xd0, + 0x2e, 0xc8, 0xd9, 0x7b, 0x85, 0x7b, 0xcb, 0x1c, 0x8f, 0x85, 0x06, 0xa3, + 0x8f, 0x3c, 0xac, 0xd6, 0x9f, 0x16, 0x05, 0x2e, 0xdc, 0xa5, 0xac, 0xf2, + 0x1b, 0x1e, 0x85, 0x78, 0xa9, 0x14, 0x1d, 0x21, 0x5e, 0x14, 0x2d, 0xa3, + 0x8c, 0x6e, 0x37, 0xeb, 0x17, 0xc0, 0x0e, 0x40, 0xb1, 0x7f, 0xe1, 0xb4, + 0x3e, 0xc0, 0x13, 0x41, 0x62, 0xff, 0xff, 0xed, 0xba, 0xc3, 0xc5, 0xf9, + 0xeb, 0x7e, 0x38, 0x77, 0x1a, 0x8c, 0x30, 0xc3, 0x3f, 0x1c, 0xb1, 0x7a, + 0x37, 0xeb, 0x9d, 0x6a, 0xc5, 0xe8, 0x13, 0x2c, 0x5f, 0xef, 0x49, 0xfb, + 0x86, 0x79, 0x62, 0xf7, 0xdc, 0x0b, 0x17, 0xf7, 0xdf, 0x79, 0xf7, 0x16, + 0x2f, 0x6c, 0xd1, 0xeb, 0x1b, 0x9a, 0xfa, 0x8d, 0xd1, 0xfb, 0x25, 0xd8, + 0x39, 0x11, 0xaf, 0x13, 0x2f, 0xcd, 0x0f, 0x66, 0xeb, 0x15, 0x1a, 0xd5, + 0x40, 0xc8, 0xce, 0x12, 0x1a, 0x7f, 0xdc, 0x71, 0xda, 0x4e, 0xbf, 0x07, + 0xe0, 0x1f, 0x16, 0x2e, 0x7e, 0xa5, 0x8b, 0xff, 0xd1, 0xae, 0x3a, 0x63, + 0x68, 0xa1, 0x03, 0x0c, 0xfc, 0x72, 0xc5, 0xf7, 0xbf, 0x1a, 0x12, 0xc5, + 0xfb, 0xaa, 0x61, 0xa9, 0x58, 0xbf, 0xf7, 0x71, 0x7b, 0xf3, 0xee, 0x7d, + 0xd6, 0x2f, 0x7d, 0xce, 0xb1, 0x73, 0x01, 0x62, 0xa4, 0xfd, 0x99, 0x0b, + 0xc3, 0xb7, 0xed, 0x6d, 0x3a, 0xd9, 0x62, 0xfe, 0xcf, 0x70, 0x45, 0xe5, + 0x8b, 0xf3, 0x97, 0x83, 0x3a, 0xc5, 0xe6, 0xd7, 0x16, 0x2a, 0x51, 0x3f, + 0x85, 0x60, 0x2e, 0xf1, 0x4d, 0xef, 0x41, 0xd6, 0x2c, 0xeb, 0x17, 0xe1, + 0x34, 0x21, 0x2b, 0x15, 0x03, 0x73, 0xf1, 0x1b, 0xa4, 0x8c, 0x3f, 0x7f, + 0x2b, 0x5e, 0xd0, 0xa3, 0xd6, 0x2e, 0x78, 0x96, 0x2f, 0x10, 0x38, 0xb1, + 0x4e, 0x7a, 0xc4, 0x42, 0x18, 0xc5, 0xb6, 0x58, 0xbf, 0xcf, 0xc1, 0x1d, + 0xbb, 0xc5, 0x8b, 0xff, 0xf8, 0x63, 0x90, 0x16, 0x0f, 0xf2, 0x79, 0xd4, + 0xf1, 0x62, 0xf3, 0xfa, 0x34, 0x58, 0xad, 0x1f, 0xe1, 0xd6, 0xaf, 0xa7, + 0xee, 0x6a, 0xc5, 0x41, 0x1e, 0xb9, 0x0b, 0x0d, 0x11, 0x5f, 0xe0, 0xfc, + 0xe5, 0x3d, 0xc1, 0x62, 0xd8, 0xb1, 0x50, 0x3c, 0x6e, 0x86, 0xb7, 0x99, + 0x89, 0x62, 0xff, 0xd9, 0xdf, 0x8d, 0x6e, 0x07, 0x23, 0x58, 0xad, 0x95, + 0x18, 0x9a, 0x5d, 0xbc, 0x61, 0x1a, 0x7a, 0xf1, 0x20, 0x63, 0x77, 0xfe, + 0x19, 0x3e, 0xff, 0x9e, 0xf8, 0xeb, 0x17, 0xc2, 0x29, 0xe8, 0xb1, 0x7c, + 0xce, 0x40, 0x58, 0xf9, 0xa4, 0xb9, 0xb7, 0x58, 0xb8, 0x31, 0xac, 0x56, + 0x8f, 0x8b, 0xe6, 0x24, 0x31, 0x7f, 0xfc, 0x77, 0xe6, 0xff, 0x7e, 0xfd, + 0x87, 0x6e, 0x2c, 0x5f, 0xf6, 0xa7, 0x99, 0xa6, 0xec, 0x25, 0x8b, 0xdc, + 0x9f, 0xac, 0x5b, 0x98, 0x7b, 0x04, 0x77, 0x7f, 0xb5, 0x90, 0xf7, 0x33, + 0x65, 0x8b, 0x8b, 0x75, 0x8b, 0x44, 0xb1, 0x58, 0x6a, 0xd8, 0x62, 0xb4, + 0x7f, 0xe0, 0x60, 0xa7, 0x4d, 0xc5, 0xa1, 0x54, 0x28, 0x52, 0xdd, 0x31, + 0x2c, 0x5f, 0xb0, 0xf3, 0xad, 0x96, 0x2b, 0x47, 0x82, 0xc3, 0x17, 0xfb, + 0x02, 0xf8, 0x4c, 0x19, 0xd6, 0x2e, 0x68, 0x96, 0x2b, 0x63, 0xcf, 0x23, + 0x7b, 0xf7, 0x02, 0x6e, 0xf8, 0xb1, 0x4e, 0x79, 0xac, 0x45, 0x7f, 0x8f, + 0xa7, 0xe4, 0x96, 0xcb, 0x17, 0xfd, 0x26, 0xfd, 0xbc, 0x1e, 0x01, 0x62, + 0x98, 0xfb, 0xc8, 0xd2, 0xff, 0xb9, 0x3f, 0x27, 0x3c, 0xf1, 0x62, 0xf7, + 0x35, 0x8b, 0x17, 0x8b, 0x20, 0xb1, 0x7e, 0xd0, 0x08, 0x40, 0x58, 0xa9, + 0x3c, 0x5c, 0x1c, 0xa7, 0x44, 0x17, 0x18, 0xad, 0x1e, 0xb1, 0x7f, 0x60, + 0x73, 0x13, 0xf1, 0x62, 0x88, 0xf1, 0x3c, 0x2b, 0x52, 0xca, 0xc2, 0xda, + 0x14, 0x30, 0x86, 0x60, 0xe1, 0x65, 0x92, 0xad, 0x3b, 0x63, 0x8a, 0x18, + 0xda, 0x8e, 0x7c, 0xef, 0x5f, 0x85, 0xe9, 0x42, 0x3f, 0x84, 0x1e, 0x85, + 0xd7, 0x46, 0x6b, 0xfe, 0x97, 0xfc, 0x9f, 0x6c, 0x09, 0x62, 0xff, 0xdc, + 0x97, 0x19, 0x4c, 0x1c, 0x0b, 0x17, 0xef, 0xbe, 0xcc, 0x4b, 0x17, 0x0d, + 0xd6, 0x2f, 0x7d, 0xe2, 0x58, 0xbb, 0x5b, 0x2c, 0x5f, 0x1a, 0xc4, 0x05, + 0x8a, 0xc3, 0x78, 0x21, 0x9b, 0xbe, 0xeb, 0x15, 0x28, 0xd0, 0xc2, 0x88, + 0x85, 0xfe, 0xb5, 0xd4, 0x41, 0x7f, 0xdb, 0x16, 0x43, 0xf8, 0x0e, 0x2c, + 0x5f, 0xb8, 0xe5, 0xdc, 0x16, 0x2f, 0xbd, 0x99, 0xa5, 0x8a, 0x34, 0xf2, + 0xf8, 0x53, 0x7c, 0x32, 0x60, 0x96, 0x2f, 0xff, 0xe7, 0x11, 0x1b, 0xbf, + 0xdf, 0x7f, 0xcf, 0x61, 0x36, 0x96, 0x2f, 0x49, 0x6e, 0x62, 0x20, 0xfc, + 0x47, 0x7f, 0xcf, 0xf9, 0xec, 0x19, 0xee, 0x2c, 0x5e, 0x14, 0x81, 0x62, + 0xfd, 0x85, 0xdc, 0x39, 0x87, 0xaf, 0xa3, 0xab, 0xdc, 0xc3, 0x56, 0x2e, + 0x63, 0xac, 0x57, 0x8d, 0xaf, 0x41, 0xeb, 0xff, 0x78, 0x5e, 0x88, 0x5b, + 0x1d, 0xfc, 0xb1, 0x58, 0x7c, 0xce, 0x47, 0x7e, 0xef, 0x5a, 0x9e, 0xd6, + 0x2f, 0xb7, 0x38, 0x25, 0x62, 0xfe, 0x86, 0x73, 0x8e, 0x35, 0x8b, 0x40, + 0xc3, 0xd2, 0xf1, 0x25, 0x4a, 0xad, 0x1d, 0xa1, 0x4c, 0xf0, 0x8c, 0x3c, + 0x36, 0x44, 0x40, 0x1b, 0xed, 0xff, 0xfe, 0xf8, 0x8b, 0xc5, 0x9d, 0x81, + 0xbd, 0xc7, 0x2e, 0xe0, 0xb1, 0x7e, 0x20, 0x9b, 0x46, 0xac, 0x5f, 0xdb, + 0x0b, 0xc2, 0x60, 0xd6, 0x2e, 0xcd, 0xd6, 0x29, 0x63, 0xc5, 0xc5, 0xfb, + 0x5f, 0x09, 0x87, 0x87, 0xc9, 0xd1, 0x26, 0xfb, 0x0f, 0x3b, 0xac, 0x5f, + 0x4f, 0xb0, 0xeb, 0x17, 0x99, 0xbb, 0x58, 0xbe, 0x83, 0x7b, 0x8b, 0x14, + 0x33, 0xc0, 0x88, 0x76, 0xb7, 0x44, 0x2f, 0x98, 0xab, 0x13, 0x9b, 0x68, + 0x47, 0x01, 0x04, 0xa1, 0x51, 0x78, 0x73, 0xd1, 0x62, 0xff, 0xfe, 0xd3, + 0xe1, 0x45, 0xd8, 0x1b, 0xdc, 0x72, 0xee, 0x0b, 0x17, 0xff, 0xde, 0x36, + 0x4a, 0x1c, 0x2c, 0xf7, 0x98, 0x0b, 0x17, 0xff, 0xf6, 0x9a, 0x1f, 0x62, + 0x1c, 0xf7, 0xad, 0x49, 0xf8, 0xb1, 0x7f, 0xf7, 0xdf, 0x9c, 0xc2, 0xf7, + 0xa4, 0xeb, 0x15, 0x04, 0x78, 0x69, 0x43, 0x8b, 0x97, 0xc6, 0xe1, 0x41, + 0x62, 0xff, 0x0b, 0x63, 0x93, 0x1a, 0xeb, 0x15, 0x87, 0xb0, 0xe4, 0x77, + 0xda, 0xf6, 0x6c, 0xb1, 0x7f, 0xfe, 0x35, 0x8c, 0xc3, 0xbf, 0x8c, 0xf7, + 0x09, 0xcd, 0x58, 0xba, 0x62, 0x58, 0xbf, 0xf8, 0xa4, 0x21, 0x94, 0xf7, + 0x07, 0x25, 0x8b, 0xdb, 0x31, 0xd6, 0x28, 0xd4, 0x69, 0xe9, 0x64, 0x86, + 0x38, 0x89, 0x7e, 0x3e, 0x7d, 0xba, 0x96, 0x2a, 0x53, 0x5f, 0xc8, 0x7b, + 0xb9, 0xed, 0xf3, 0x6e, 0x19, 0xd6, 0x2f, 0xdd, 0xee, 0xfe, 0xe2, 0xc5, + 0xff, 0xa2, 0x84, 0xeb, 0x63, 0x02, 0xcf, 0xac, 0x5f, 0xef, 0xbf, 0xca, + 0x73, 0x4b, 0x17, 0xe9, 0xe9, 0xa0, 0xf8, 0xb1, 0x46, 0x22, 0x8b, 0x74, + 0x4f, 0x99, 0x54, 0xa3, 0xfd, 0xa1, 0x9b, 0x52, 0xba, 0x6a, 0x34, 0x5c, + 0x1f, 0x78, 0xd3, 0x75, 0x08, 0x8f, 0xc6, 0xfe, 0xc6, 0x65, 0x19, 0x25, + 0xfd, 0xd2, 0x2f, 0xb9, 0x0d, 0x62, 0xfe, 0x26, 0x00, 0x27, 0x8b, 0x15, + 0x27, 0xbc, 0xc6, 0x37, 0xfb, 0xf9, 0xec, 0x16, 0xb6, 0x58, 0xbf, 0xfc, + 0x67, 0xe4, 0xce, 0x3c, 0x64, 0xee, 0xc1, 0xac, 0x5a, 0x0b, 0x17, 0x9f, + 0x7f, 0xe1, 0xf1, 0xb2, 0x8d, 0xf1, 0x09, 0xbc, 0xb1, 0x7d, 0xde, 0xef, + 0xda, 0xc5, 0xff, 0xbd, 0x9d, 0x53, 0xb9, 0x66, 0x6c, 0xb1, 0x5b, 0x26, + 0xe8, 0x72, 0x0f, 0xc2, 0x60, 0x06, 0x5c, 0x22, 0xf1, 0x35, 0xe9, 0x8a, + 0x25, 0x8b, 0xfc, 0x53, 0x08, 0xbf, 0x3b, 0x2c, 0x5d, 0xbb, 0xac, 0x5f, + 0xf3, 0x94, 0x53, 0xbe, 0xb3, 0xb5, 0x8a, 0x63, 0xd3, 0xe0, 0xc5, 0x0d, + 0x15, 0x3e, 0x84, 0x45, 0xf8, 0x66, 0x9a, 0x2e, 0xd6, 0x29, 0x8f, 0x54, + 0x45, 0x17, 0xfe, 0xec, 0x83, 0x93, 0xe7, 0xf0, 0x96, 0x2b, 0x13, 0x7d, + 0x36, 0x31, 0xd6, 0x21, 0xbf, 0xe9, 0xf6, 0x6b, 0x76, 0x6d, 0xd5, 0x27, + 0xc1, 0x7f, 0x33, 0x8e, 0x7d, 0xc5, 0x8b, 0xff, 0xfd, 0xe7, 0xce, 0xc7, + 0xf1, 0x73, 0x37, 0x33, 0xef, 0x87, 0x58, 0xbe, 0xd4, 0xf7, 0x05, 0x8b, + 0xff, 0xb0, 0xe2, 0x83, 0x0f, 0x37, 0x9e, 0x2c, 0x56, 0x1f, 0x4f, 0xc9, + 0x2e, 0x93, 0xee, 0x9b, 0x17, 0xd1, 0xf8, 0x5b, 0xe8, 0x66, 0xdf, 0xf3, + 0x1b, 0xc7, 0xe3, 0xf7, 0xe5, 0x8a, 0xfa, 0x22, 0x89, 0x3e, 0xff, 0xfb, + 0x73, 0x3f, 0x2f, 0xa7, 0x3b, 0xc7, 0x49, 0xd6, 0x2f, 0xee, 0x77, 0x25, + 0x3c, 0x58, 0xa2, 0x44, 0x10, 0x4a, 0x97, 0x9b, 0x5b, 0x2a, 0x4f, 0xf2, + 0xfe, 0x2d, 0xf9, 0xcc, 0x8f, 0x58, 0xbf, 0xf1, 0x00, 0x2c, 0xef, 0xde, + 0x93, 0xac, 0x5e, 0xf4, 0xec, 0xb1, 0x52, 0x89, 0x1c, 0x32, 0x64, 0x1b, + 0xff, 0x17, 0xb5, 0x93, 0xdc, 0x1c, 0xeb, 0x17, 0x89, 0xf4, 0xb1, 0x4b, + 0x17, 0x66, 0xdf, 0x35, 0x1d, 0x43, 0x97, 0xf6, 0x76, 0x0c, 0xf7, 0x16, + 0x2f, 0xd2, 0x5d, 0xc3, 0x8b, 0x1f, 0x35, 0xf5, 0x2a, 0xab, 0xf2, 0x14, + 0x9b, 0x91, 0xfe, 0x17, 0x8c, 0x5a, 0x4c, 0xe2, 0x5f, 0xbf, 0xf4, 0x83, + 0x85, 0x9b, 0x60, 0x67, 0x58, 0xbf, 0xff, 0xff, 0xfe, 0xf6, 0x1f, 0x4c, + 0x33, 0x3b, 0x87, 0x1f, 0x98, 0x79, 0xff, 0xb1, 0xfa, 0x19, 0xdc, 0x39, + 0xe1, 0x60, 0xd6, 0x2f, 0x79, 0xc2, 0x58, 0xbf, 0x9b, 0x60, 0xc6, 0xd1, + 0xeb, 0x15, 0x89, 0xa1, 0xf1, 0x03, 0xd0, 0xb2, 0x10, 0xf5, 0xfe, 0xd6, + 0xb2, 0x23, 0xcf, 0x16, 0x2f, 0xf8, 0xb7, 0x2c, 0xff, 0xc4, 0x4b, 0x17, + 0xfb, 0xdc, 0x72, 0xee, 0x07, 0x58, 0xa9, 0x3e, 0xe6, 0x39, 0xbf, 0xe7, + 0xd6, 0xc2, 0x00, 0x27, 0xcb, 0x17, 0xfb, 0x34, 0x64, 0x1f, 0xb8, 0x2c, + 0x5f, 0xfd, 0x20, 0xc8, 0x3f, 0xa1, 0x24, 0x05, 0x8a, 0x93, 0xf9, 0xf9, + 0xb5, 0x41, 0x3d, 0xac, 0x42, 0x04, 0x28, 0xf8, 0x41, 0xe8, 0x5a, 0x5f, + 0x1f, 0x5d, 0xb2, 0xc5, 0xff, 0xa7, 0x50, 0x72, 0xc3, 0x87, 0x2b, 0x17, + 0x60, 0x16, 0x2d, 0x1e, 0xb1, 0x58, 0x6b, 0x38, 0x2f, 0x7a, 0x41, 0x1e, + 0xb1, 0x7f, 0xf9, 0xa1, 0x3e, 0x7f, 0xc8, 0xa3, 0xc8, 0x6b, 0x17, 0xff, + 0xe3, 0x93, 0x1a, 0x6c, 0x7b, 0x97, 0x70, 0xe7, 0xdd, 0x62, 0xb7, 0x46, + 0x3e, 0x88, 0x04, 0x99, 0x7f, 0xff, 0xbe, 0xdc, 0x79, 0xe1, 0x9e, 0xfe, 0x1f, 0x37, 0x6d, 0x2c, 0x5f, 0x31, 0x0b, 0x16, 0x29, 0x62, 0xd2, 0x03, - 0x5b, 0xdc, 0x43, 0x7f, 0x1c, 0xc7, 0x37, 0x06, 0xb1, 0x7f, 0xd3, 0xd4, + 0x5b, 0xd4, 0x43, 0x7f, 0x1c, 0xc7, 0x37, 0x06, 0xb1, 0x7f, 0xd3, 0xdc, 0x3e, 0xfa, 0x68, 0x2c, 0x5e, 0xe3, 0x1d, 0x62, 0xb1, 0x10, 0xe4, 0x61, - 0xc3, 0xaa, 0xc5, 0x4f, 0x5b, 0x92, 0x44, 0x7d, 0xa8, 0x44, 0x7c, 0x8c, - 0x10, 0x8f, 0xf4, 0x2c, 0x2f, 0x8e, 0x53, 0x12, 0xc5, 0xfe, 0xeb, 0xc1, + 0xc3, 0xaa, 0xc5, 0x62, 0x7b, 0x92, 0x44, 0xd5, 0xa8, 0x73, 0xfc, 0xc4, + 0x10, 0x8f, 0xf4, 0x2c, 0x2f, 0x8e, 0x53, 0x12, 0xc5, 0xfe, 0xef, 0xc1, 0xff, 0xf9, 0x1e, 0xb1, 0x7a, 0x73, 0x8b, 0x17, 0xec, 0x7d, 0xa4, 0xd5, 0x8a, 0x94, 0x51, 0x61, 0x1e, 0x8e, 0xbe, 0x39, 0x7e, 0x07, 0x23, 0xa7, 0xcb, 0x17, 0xd9, 0xa0, 0xe2, 0x58, 0xad, 0x91, 0x19, 0x87, 0x7a, 0x2c, - 0xbc, 0x37, 0x89, 0x62, 0xff, 0x7a, 0x7a, 0xe1, 0x4f, 0x65, 0x8b, 0x01, - 0x62, 0xfa, 0x12, 0x5e, 0x58, 0xbf, 0x1c, 0xee, 0x19, 0xd6, 0x2d, 0xec, - 0x3c, 0xc7, 0x22, 0xad, 0x91, 0xb1, 0xd0, 0xf6, 0x8d, 0x89, 0x7a, 0xfb, - 0xa8, 0x79, 0x96, 0x2f, 0xff, 0x6f, 0xf7, 0x2c, 0xec, 0xd0, 0xe3, 0x8d, - 0x62, 0xff, 0x40, 0xb0, 0xe7, 0x68, 0x2c, 0x5f, 0x3e, 0xee, 0x35, 0x8b, - 0xb5, 0x2e, 0x7a, 0xde, 0x33, 0xa1, 0xa3, 0x3b, 0x50, 0xa2, 0xbf, 0xb9, - 0xe2, 0x9c, 0xe9, 0x62, 0xa5, 0x38, 0x6c, 0x3e, 0x68, 0x79, 0x08, 0xa2, - 0xff, 0xf6, 0x73, 0xec, 0xfe, 0x93, 0x93, 0x1a, 0xb1, 0x79, 0x8b, 0x75, - 0x8b, 0xf0, 0x39, 0xec, 0xfa, 0xc5, 0xf0, 0xff, 0x3d, 0x2c, 0x5f, 0x67, - 0xe1, 0x8b, 0x16, 0x09, 0xcf, 0x1b, 0xc4, 0x96, 0xc5, 0x8a, 0x94, 0x54, - 0x33, 0x7f, 0x8a, 0x2f, 0xa4, 0x38, 0xb8, 0xb1, 0x52, 0xb8, 0x5f, 0x09, - 0x51, 0xd8, 0x81, 0x12, 0x49, 0x43, 0x17, 0x85, 0xd7, 0xfe, 0x01, 0xdf, - 0x3a, 0xf0, 0xe4, 0x6b, 0x17, 0xfb, 0xf3, 0xd4, 0x0e, 0x6c, 0xac, 0x5f, - 0xff, 0xdd, 0xa4, 0xbd, 0x90, 0xfc, 0xf5, 0x0f, 0x72, 0x74, 0xb1, 0x7f, - 0xd2, 0x78, 0xf0, 0xf0, 0x9a, 0x0b, 0x14, 0xb1, 0x7f, 0x18, 0x3c, 0xc0, - 0x71, 0x62, 0xff, 0xfd, 0xec, 0xd6, 0xcf, 0xc7, 0xed, 0xf7, 0xce, 0xbc, - 0xb1, 0x5d, 0x22, 0x50, 0xe1, 0x84, 0x5f, 0x7f, 0x8b, 0xdc, 0x10, 0xfe, - 0xeb, 0x15, 0x27, 0xc9, 0x86, 0x17, 0x37, 0x4b, 0x17, 0xc6, 0x04, 0x5e, - 0x58, 0xbb, 0x98, 0x73, 0x7a, 0x43, 0x17, 0xf6, 0x7d, 0xf5, 0xf6, 0x58, - 0xbb, 0x5b, 0x2c, 0x56, 0xc7, 0x8c, 0x72, 0xda, 0xc4, 0x4a, 0x3b, 0x8d, - 0xff, 0x4f, 0x39, 0x2f, 0xb3, 0x79, 0x62, 0xfc, 0xc7, 0x91, 0xca, 0xc5, - 0x78, 0xf8, 0x04, 0x73, 0x7f, 0x17, 0xc2, 0x62, 0x82, 0xc5, 0xff, 0x3e, - 0x10, 0xcd, 0x7c, 0xd2, 0xc5, 0x4a, 0xe0, 0x10, 0xd0, 0x30, 0xdb, 0xa5, - 0xe7, 0x8c, 0xd3, 0x50, 0xf1, 0xf4, 0x20, 0x44, 0x45, 0xdc, 0x5d, 0x7f, - 0x6c, 0x63, 0x1b, 0xf7, 0x58, 0xbf, 0x7a, 0x47, 0x9d, 0x96, 0x2b, 0x0f, - 0x6e, 0x23, 0x1b, 0xfe, 0xe6, 0x6d, 0xc7, 0x26, 0xd9, 0x62, 0xff, 0xd9, - 0xd4, 0x1c, 0x8f, 0x23, 0x95, 0x8b, 0xcf, 0x1d, 0x2b, 0x17, 0x67, 0x4b, - 0x17, 0xff, 0xfe, 0x9d, 0xba, 0x87, 0x0b, 0x22, 0x33, 0x7f, 0xce, 0xe6, - 0xe9, 0x82, 0x58, 0xa9, 0x4d, 0x1b, 0x08, 0x9c, 0xe9, 0x8f, 0xbc, 0x3e, - 0x21, 0x8b, 0xf9, 0xb5, 0xd4, 0x33, 0xcb, 0x17, 0xf9, 0xb0, 0x3c, 0xce, - 0xbc, 0xb1, 0x7f, 0xdc, 0x7d, 0x78, 0x84, 0xd0, 0x58, 0xa0, 0x1f, 0x6f, - 0x8d, 0x2f, 0xff, 0xcf, 0xcc, 0x1f, 0xf3, 0xcf, 0x9c, 0xdb, 0x02, 0x58, - 0xbf, 0xfe, 0x2f, 0x6f, 0xf7, 0x0b, 0x85, 0x80, 0x17, 0x16, 0x2f, 0xd8, - 0xf1, 0xce, 0x35, 0x8b, 0xff, 0xa6, 0x3b, 0x04, 0x59, 0x9d, 0xa7, 0xa5, - 0x8a, 0x94, 0x62, 0x0d, 0x48, 0xe5, 0x57, 0xfd, 0x3a, 0x07, 0x9c, 0xdc, - 0x25, 0x8b, 0xdc, 0xc2, 0x58, 0xbf, 0xff, 0xe7, 0x20, 0x0f, 0x3a, 0xe3, - 0x8b, 0x7f, 0xbf, 0xb8, 0xe3, 0x58, 0xbe, 0xe0, 0xf0, 0x96, 0x28, 0x08, - 0xa6, 0xe0, 0xe7, 0x9a, 0x2f, 0xfd, 0x39, 0xac, 0xd0, 0x0e, 0xfc, 0x58, - 0xbe, 0xf7, 0x01, 0xba, 0xc5, 0xe6, 0xeb, 0xb9, 0x62, 0xfe, 0x6f, 0x72, - 0x73, 0x65, 0x8a, 0x95, 0x79, 0x19, 0x09, 0xcd, 0xc8, 0x9e, 0x31, 0xaf, - 0x97, 0xb4, 0x37, 0xc8, 0xc0, 0x47, 0xdd, 0x89, 0x42, 0x21, 0xbf, 0x8b, - 0xf8, 0x09, 0x25, 0x8b, 0xdd, 0x43, 0x16, 0x2f, 0xe1, 0xbf, 0x50, 0x26, - 0x58, 0xb0, 0x18, 0xf3, 0x38, 0x3d, 0x7f, 0xb0, 0xbd, 0x91, 0x4c, 0x7a, - 0xc5, 0xff, 0xda, 0xce, 0xd8, 0x3d, 0x4e, 0xed, 0xa5, 0x8b, 0xfd, 0x21, - 0x36, 0xb4, 0xe0, 0x58, 0xbf, 0x9b, 0x7f, 0x9e, 0x46, 0xb1, 0x7b, 0x00, - 0x3f, 0x9f, 0x1b, 0x1a, 0x5f, 0xe6, 0x87, 0xdb, 0x93, 0x1e, 0xb1, 0x52, - 0x9b, 0x79, 0xc9, 0xd8, 0xd8, 0x10, 0xaa, 0xe1, 0x95, 0xff, 0xf0, 0x8d, - 0xfb, 0xc4, 0x03, 0x88, 0x05, 0x83, 0x58, 0xbf, 0xd2, 0x7e, 0x61, 0xe6, - 0x3d, 0x62, 0xba, 0x44, 0x48, 0x94, 0xef, 0xfd, 0xad, 0xb0, 0x79, 0xff, - 0xe4, 0x7a, 0xc5, 0x8d, 0x58, 0xbc, 0xf1, 0x71, 0x62, 0xfb, 0xb4, 0xe7, - 0x4b, 0x17, 0x7b, 0x83, 0x3c, 0x30, 0xc7, 0xaa, 0x51, 0x0a, 0x4a, 0xd7, - 0xfe, 0xd7, 0x0e, 0x1e, 0x69, 0xe6, 0x25, 0x8a, 0xc3, 0xe2, 0x11, 0x0d, - 0xf4, 0x97, 0xb8, 0xb1, 0x61, 0xac, 0x5e, 0xfe, 0x12, 0xc5, 0xe6, 0x2d, - 0xb8, 0x6b, 0xbc, 0x25, 0x58, 0x9e, 0x6f, 0x23, 0x2a, 0x11, 0x08, 0x4a, - 0x17, 0xde, 0xfe, 0x12, 0xc5, 0xfe, 0x2c, 0xf7, 0xb3, 0x51, 0x2c, 0x5f, - 0xdc, 0x68, 0x14, 0x9d, 0x62, 0xf1, 0x4c, 0x7a, 0xc5, 0xff, 0xf4, 0x27, - 0x5b, 0x79, 0xcd, 0xe7, 0x18, 0xa0, 0xb1, 0x7f, 0x6d, 0xcc, 0x3c, 0xc7, - 0xac, 0x54, 0x48, 0x84, 0x0d, 0x4a, 0xb1, 0x34, 0xb8, 0x88, 0xb4, 0x69, - 0xc2, 0xd0, 0xa1, 0x47, 0x7f, 0x13, 0x75, 0x0c, 0xf2, 0xc5, 0xdf, 0x75, - 0x8b, 0xfb, 0x01, 0x20, 0x0c, 0xeb, 0x14, 0xb1, 0x7f, 0xfd, 0xd6, 0xef, - 0xcf, 0xbe, 0xb3, 0xb4, 0x97, 0x96, 0x2a, 0x23, 0xdf, 0xf0, 0x65, 0x82, - 0x24, 0x58, 0xf2, 0x11, 0xd5, 0xb2, 0x64, 0x8e, 0x5c, 0x50, 0xc8, 0xbf, - 0xd8, 0x76, 0x21, 0xfe, 0x56, 0x2f, 0x87, 0xec, 0xec, 0xb1, 0x43, 0x3d, - 0x7f, 0x99, 0x5f, 0xff, 0x09, 0xb5, 0x08, 0xec, 0x29, 0x01, 0xda, 0x0b, - 0x17, 0xff, 0x43, 0xf2, 0x3f, 0x66, 0x17, 0xb8, 0xb1, 0x70, 0xe0, 0xb1, - 0x7e, 0xcf, 0x7d, 0xfc, 0xb1, 0x7f, 0xb0, 0x62, 0xf7, 0x21, 0xdf, 0xac, - 0x5d, 0x90, 0x58, 0xaf, 0x9e, 0x89, 0x1d, 0x5f, 0xff, 0xfc, 0x59, 0xd9, - 0xa1, 0x85, 0xd4, 0x27, 0x36, 0x16, 0xcf, 0xa9, 0x3a, 0xc5, 0xa1, 0x29, - 0xef, 0x0c, 0x8b, 0x14, 0xb4, 0x89, 0xf1, 0x8f, 0x3c, 0x86, 0x43, 0x7c, - 0x7f, 0x3e, 0xcb, 0x15, 0x88, 0x8e, 0x76, 0xab, 0xff, 0xbb, 0x78, 0xd9, - 0x28, 0x67, 0xdc, 0xeb, 0x16, 0xf2, 0xc5, 0xff, 0xa0, 0x06, 0xf4, 0xf7, - 0x3e, 0xce, 0xb1, 0x5b, 0x1e, 0xa7, 0x42, 0x57, 0xfb, 0xb7, 0xda, 0x13, - 0x84, 0xb1, 0x7f, 0xf0, 0x30, 0xb7, 0xfb, 0xc4, 0xcd, 0x05, 0x8a, 0x94, - 0x4e, 0xe1, 0x23, 0x1a, 0x5f, 0x41, 0xb5, 0x05, 0x8b, 0xff, 0xd3, 0xa6, - 0xf0, 0xbc, 0xfe, 0xe7, 0xdd, 0x62, 0xd0, 0x88, 0xfb, 0x7e, 0x47, 0x4b, - 0x17, 0xc1, 0xfd, 0xbc, 0xb1, 0x6c, 0xe1, 0xb0, 0x08, 0x32, 0xfe, 0x81, - 0xfc, 0x42, 0x89, 0x62, 0xff, 0xf8, 0x38, 0x4f, 0x67, 0x20, 0x69, 0xe4, - 0xf8, 0x91, 0x5a, 0x44, 0x0f, 0x8c, 0x2f, 0xbe, 0x1f, 0x5e, 0x58, 0xbe, - 0x3e, 0x3f, 0x65, 0x8b, 0xf7, 0x9b, 0x7e, 0x41, 0x62, 0xb0, 0xf3, 0x82, - 0x24, 0xba, 0x28, 0xf5, 0x8b, 0xee, 0xbd, 0x9f, 0x58, 0xad, 0x8f, 0x00, - 0x87, 0x2c, 0x12, 0xc5, 0x4a, 0xa2, 0xfd, 0x96, 0x72, 0x15, 0x1b, 0x91, - 0xbb, 0xa0, 0x98, 0xa3, 0x88, 0xaf, 0x8e, 0x4c, 0x6a, 0xc5, 0xcd, 0xe5, - 0x8a, 0xd8, 0xdd, 0x6e, 0x47, 0x77, 0xb1, 0x62, 0xff, 0x03, 0x98, 0x53, - 0xd7, 0x16, 0x2f, 0xda, 0x7d, 0x98, 0xea, 0xc8, 0x4c, 0xbe, 0xf0, 0xa5, - 0x95, 0x90, 0x99, 0x70, 0x25, 0x58, 0x09, 0x97, 0xf8, 0x98, 0xdf, 0x4e, - 0x80, 0xac, 0x04, 0xcb, 0xfd, 0xcc, 0xfb, 0xf0, 0x5b, 0x2b, 0x21, 0x32, - 0xec, 0x1a, 0xb2, 0x13, 0x2e, 0x08, 0x25, 0xe4, 0x26, 0x56, 0x26, 0xaf, - 0xd1, 0xb3, 0x97, 0x9c, 0x93, 0x88, 0x3d, 0x90, 0x82, 0x24, 0xb7, 0x93, - 0x90, 0x98, 0x8c, 0x3e, 0x7a, 0xe9, 0x51, 0xee, 0x85, 0xc2, 0x8f, 0xca, - 0xf0, 0xc4, 0x4b, 0x16, 0xdd, 0x62, 0xfd, 0xcf, 0x16, 0x41, 0x62, 0xb0, - 0xf6, 0x34, 0x3a, 0x01, 0x3a, 0xc5, 0x64, 0x0f, 0x29, 0x81, 0xa1, 0x25, - 0x7f, 0xfe, 0x01, 0xda, 0x1c, 0xfc, 0xf6, 0xc0, 0xc6, 0xd0, 0x58, 0xa9, - 0x66, 0x75, 0x3c, 0x6e, 0xbf, 0x95, 0xf0, 0xc4, 0x25, 0x19, 0xc7, 0x25, - 0x64, 0xfa, 0x5e, 0x38, 0x8e, 0xef, 0xff, 0xb0, 0x2f, 0xb3, 0xfa, 0x7c, - 0x20, 0x61, 0x2c, 0x5f, 0xfa, 0x04, 0xc6, 0xc5, 0x07, 0xd4, 0x16, 0x2f, - 0xb3, 0xcd, 0xf5, 0x8b, 0xf6, 0x45, 0x09, 0xe9, 0x62, 0xe6, 0x37, 0xbe, - 0xa7, 0x98, 0x44, 0x55, 0xa4, 0x61, 0x14, 0x23, 0x6f, 0x9f, 0x4c, 0x05, - 0x8b, 0xff, 0xa4, 0x2f, 0x1a, 0xdc, 0xcc, 0x23, 0x56, 0x2a, 0x07, 0xd0, - 0x44, 0x57, 0xe3, 0xf5, 0x07, 0x25, 0x8b, 0x88, 0x78, 0x79, 0x5e, 0x21, - 0xbe, 0x6e, 0xd8, 0x12, 0xc5, 0xbb, 0xc5, 0x8b, 0xff, 0xe6, 0x87, 0xe6, - 0x5f, 0xdc, 0x72, 0xea, 0x0b, 0x15, 0x03, 0xe6, 0xf8, 0xbd, 0xec, 0x6e, - 0x2c, 0x5e, 0x8a, 0x78, 0xb1, 0x7f, 0x6d, 0xb3, 0x94, 0x38, 0xb1, 0x70, - 0x0e, 0xb1, 0x5a, 0x3c, 0x82, 0x30, 0xbf, 0xf4, 0x4e, 0x16, 0x69, 0xf6, - 0x63, 0xac, 0x5f, 0xf4, 0x8b, 0xc4, 0xfd, 0x83, 0x3a, 0xc5, 0xff, 0x67, - 0x9f, 0x39, 0xb6, 0x04, 0xb1, 0x7b, 0x8d, 0xa5, 0x8b, 0x1d, 0x62, 0xc0, - 0x58, 0xa9, 0x34, 0x90, 0x12, 0xbe, 0x18, 0xe6, 0x08, 0x22, 0xbb, 0x38, - 0x62, 0x7c, 0x72, 0x39, 0x8c, 0xce, 0x43, 0xa4, 0x1f, 0x9e, 0x78, 0xea, - 0x39, 0x04, 0x32, 0x0b, 0xff, 0xcd, 0x0f, 0xcf, 0x60, 0xce, 0xcd, 0xad, - 0xd6, 0x2a, 0x57, 0x60, 0x32, 0x31, 0x17, 0x86, 0xce, 0x8b, 0x1a, 0x11, - 0x65, 0x28, 0x14, 0x50, 0x8c, 0xbe, 0xfb, 0x72, 0x3d, 0x62, 0xfb, 0x72, - 0x9d, 0x2c, 0x5c, 0xfd, 0x8c, 0x3c, 0x9c, 0x26, 0xbf, 0xf6, 0x98, 0xdd, - 0x60, 0x38, 0xdb, 0xac, 0x5f, 0xde, 0x13, 0x73, 0x9e, 0x58, 0xbf, 0x72, - 0x70, 0x12, 0xb1, 0x71, 0x67, 0x47, 0xad, 0xe2, 0xfb, 0x9b, 0x4b, 0x15, - 0xf3, 0xc4, 0x62, 0xda, 0xd2, 0x3f, 0x01, 0x0d, 0xbb, 0xfe, 0xfc, 0x86, - 0x7c, 0xec, 0xfb, 0xac, 0x56, 0x27, 0x20, 0xd1, 0x95, 0xf0, 0xa2, 0xf3, - 0xe8, 0xd5, 0x8b, 0xb4, 0x05, 0x8a, 0xc3, 0x6c, 0xe3, 0xd7, 0x6d, 0xa5, - 0x8b, 0x81, 0x12, 0xc5, 0xff, 0xc7, 0x8a, 0x0c, 0x5b, 0x0e, 0x4b, 0x65, - 0x8b, 0xb6, 0xc5, 0x8a, 0x94, 0x48, 0x8c, 0x67, 0x06, 0x59, 0x1e, 0xfd, - 0x84, 0x68, 0xc0, 0xb1, 0x7d, 0x17, 0xdf, 0x4b, 0x17, 0xbe, 0xfa, 0x58, - 0xbe, 0x7f, 0xcf, 0x0c, 0x3c, 0x18, 0x89, 0x2b, 0x88, 0xa4, 0xf3, 0x55, - 0xdc, 0x82, 0xc5, 0xc2, 0x25, 0x8b, 0xfe, 0xe6, 0xb2, 0x7a, 0x83, 0x9d, - 0x62, 0xb0, 0xfa, 0x74, 0x30, 0x21, 0x7b, 0xe7, 0xfb, 0x1d, 0x62, 0xfb, - 0x53, 0xcd, 0x96, 0x29, 0xd3, 0x00, 0xd4, 0x23, 0x3c, 0x5c, 0x19, 0x15, - 0x4b, 0xe4, 0x90, 0x6d, 0x2d, 0x5a, 0x0d, 0x03, 0x9e, 0xa7, 0xc9, 0x41, - 0x46, 0xc7, 0x9d, 0xbc, 0xe4, 0xd7, 0x52, 0xe2, 0x9e, 0x56, 0x74, 0x53, - 0xba, 0x7a, 0x9c, 0x66, 0x3c, 0xa3, 0x3f, 0xce, 0x0e, 0x34, 0x27, 0x01, - 0x1f, 0x39, 0x43, 0x5f, 0x91, 0xf8, 0xfa, 0x9c, 0xf3, 0xda, 0x78, 0x48, - 0x29, 0x4a, 0xf1, 0xcd, 0x61, 0xc2, 0xc3, 0xba, 0x3d, 0xeb, 0xff, 0xf8, - 0xce, 0x66, 0x76, 0x72, 0x07, 0x33, 0xdf, 0xce, 0xcb, 0x17, 0xef, 0x3f, - 0x4c, 0x4b, 0x17, 0x8f, 0xee, 0x2c, 0x5f, 0x6b, 0xb6, 0x0d, 0x62, 0xe0, - 0xfb, 0x96, 0x2a, 0x51, 0x0f, 0xb1, 0x43, 0x0f, 0x00, 0x96, 0xec, 0x25, - 0x8b, 0xbd, 0xc5, 0x8a, 0x93, 0x5c, 0x42, 0xd7, 0xff, 0x67, 0xf3, 0xdd, - 0x6e, 0xfa, 0xfe, 0x2c, 0x5f, 0xcf, 0xa2, 0x9e, 0xa0, 0xb1, 0x76, 0x71, - 0x62, 0xff, 0xdc, 0xcd, 0x78, 0x98, 0xd3, 0x71, 0x62, 0xa0, 0x8e, 0xa1, - 0x8f, 0xe2, 0x30, 0x0b, 0xb8, 0x2f, 0x7f, 0xe2, 0xc0, 0x36, 0xb3, 0xb6, - 0x0d, 0x62, 0xfd, 0x14, 0x24, 0xbc, 0xb1, 0x7f, 0xed, 0x67, 0x38, 0x22, - 0x0c, 0xf2, 0xb1, 0x50, 0x3e, 0x9d, 0x14, 0xdf, 0xd9, 0x02, 0x13, 0x71, - 0x62, 0xfb, 0xae, 0x3c, 0xac, 0x5f, 0xec, 0x2e, 0xef, 0x39, 0x1a, 0xb1, - 0x46, 0xa6, 0xa1, 0xd4, 0x2a, 0x34, 0x45, 0xf2, 0xd0, 0x11, 0xdf, 0xbd, - 0xc6, 0xeb, 0x75, 0x8b, 0xec, 0xd3, 0x9a, 0xb1, 0x78, 0x2d, 0x8e, 0xb1, - 0x7e, 0xe6, 0x85, 0x20, 0x58, 0xbe, 0xc1, 0x8f, 0x65, 0x8b, 0xff, 0xee, - 0xda, 0xcd, 0x8c, 0x14, 0xe7, 0xa7, 0xa8, 0x2c, 0x5e, 0xd0, 0x86, 0xb1, - 0x7f, 0xa4, 0xe4, 0xd0, 0xcf, 0xac, 0x56, 0x8f, 0x43, 0xe3, 0xd5, 0x29, - 0xea, 0x41, 0x48, 0x65, 0x78, 0x47, 0xd1, 0x01, 0xca, 0x58, 0x93, 0x90, - 0xa5, 0xbf, 0x48, 0x65, 0xd0, 0x16, 0x2f, 0xf7, 0xe4, 0xd0, 0xfe, 0xde, - 0x58, 0xaf, 0x9f, 0x07, 0x8a, 0xae, 0xce, 0xe5, 0x8b, 0x83, 0xe2, 0xc5, - 0xfb, 0xc1, 0x61, 0x6c, 0xb1, 0x69, 0xf9, 0xe1, 0x90, 0xcd, 0x46, 0x88, - 0x83, 0x82, 0xed, 0x82, 0x58, 0xa5, 0x8b, 0x66, 0x17, 0xfd, 0x84, 0xee, - 0x73, 0x56, 0x2f, 0xe1, 0x6d, 0x3e, 0x91, 0xac, 0x56, 0xc7, 0xda, 0xe4, - 0xde, 0x18, 0xbf, 0x49, 0x7b, 0xf8, 0xb1, 0x7e, 0x9c, 0xd3, 0x41, 0x62, - 0x9c, 0xf3, 0x88, 0x9e, 0xfd, 0xec, 0x89, 0xce, 0xb1, 0x7e, 0x9e, 0x80, - 0x09, 0x58, 0xa9, 0x3d, 0x22, 0x29, 0xbf, 0xf7, 0x6c, 0xf7, 0xe4, 0xdc, - 0xd6, 0x2c, 0x5e, 0x92, 0xf2, 0xc5, 0x31, 0xee, 0xf6, 0x41, 0xbf, 0x7e, - 0x5f, 0x92, 0xb1, 0x52, 0x79, 0x4c, 0x47, 0x7b, 0xee, 0x1a, 0xc5, 0xf9, - 0xfb, 0x79, 0xf6, 0x58, 0xbf, 0x7b, 0xf3, 0xa8, 0x2c, 0x5f, 0xfb, 0x0f, - 0x25, 0x20, 0x3b, 0x41, 0x62, 0xff, 0x89, 0xcd, 0x9f, 0x71, 0xf4, 0xb1, - 0x7f, 0xfb, 0xe2, 0x68, 0x75, 0xed, 0x4e, 0x75, 0x8b, 0x14, 0x74, 0x42, - 0xf0, 0xe6, 0xff, 0x66, 0xdb, 0xfe, 0x75, 0xc5, 0x8b, 0xe8, 0x7b, 0x37, - 0x58, 0xac, 0x3f, 0xdd, 0x11, 0xb1, 0xb5, 0xa5, 0x62, 0xff, 0xf7, 0x58, - 0x3e, 0x4b, 0xc1, 0xfc, 0xdf, 0x58, 0xa2, 0x3d, 0xb1, 0x08, 0xdf, 0xf7, - 0xda, 0x13, 0x11, 0x49, 0xd6, 0x2f, 0xf9, 0x9c, 0x64, 0xd0, 0x84, 0xac, - 0x5f, 0x7b, 0xee, 0x12, 0xc5, 0x87, 0xf3, 0xdb, 0x63, 0x7b, 0xc1, 0xe4, - 0x4b, 0x17, 0xf1, 0xfb, 0xbc, 0xfa, 0xdd, 0x62, 0xff, 0xba, 0xdf, 0xef, - 0xd9, 0xc8, 0x6b, 0x16, 0x2c, 0x44, 0x7b, 0x8f, 0xb1, 0x9d, 0xff, 0x49, - 0xf9, 0xe2, 0x60, 0x71, 0x62, 0xff, 0xfb, 0x3e, 0xf2, 0x5e, 0xe7, 0x89, - 0x81, 0xc5, 0x8b, 0xdd, 0x87, 0x3f, 0x44, 0x39, 0x1c, 0xdf, 0xec, 0xe1, - 0x83, 0xcc, 0x25, 0x8a, 0x73, 0xe8, 0xf9, 0xad, 0xff, 0xf3, 0x6b, 0xa8, - 0x7e, 0x4b, 0x68, 0xbf, 0x3b, 0x2c, 0x5f, 0xd9, 0x08, 0x99, 0xb6, 0x58, - 0xbf, 0xff, 0x66, 0xe0, 0x93, 0xe7, 0x9f, 0x99, 0x84, 0x6a, 0xc5, 0xfc, - 0x77, 0x93, 0xb1, 0x2c, 0x56, 0x91, 0x61, 0xf2, 0xf0, 0x2a, 0xdf, 0xfc, - 0xe7, 0x18, 0x9b, 0x50, 0xce, 0xbc, 0xb1, 0x58, 0x7e, 0xdb, 0x98, 0x54, - 0x13, 0x9c, 0x28, 0xde, 0xaf, 0xf1, 0xbf, 0x62, 0x16, 0x7d, 0x62, 0xff, - 0xcc, 0x40, 0xeb, 0xda, 0x9c, 0x09, 0x62, 0xff, 0xbe, 0xd0, 0xfb, 0x44, - 0x20, 0xd6, 0x2f, 0xfd, 0xcf, 0xb9, 0x9d, 0x42, 0x73, 0x65, 0x8b, 0xf3, - 0x38, 0xc5, 0x2b, 0x17, 0xda, 0x78, 0xb8, 0xb1, 0x76, 0x0c, 0xc3, 0xcb, - 0xd1, 0x3d, 0xc6, 0x77, 0x2c, 0x54, 0x7a, 0x6a, 0x7f, 0x40, 0x01, 0xe7, - 0xa1, 0x1b, 0xd8, 0xba, 0xa5, 0x3d, 0xcc, 0x8e, 0x1e, 0xf6, 0x0e, 0x39, - 0x62, 0xff, 0xff, 0xde, 0x9c, 0x2e, 0xbc, 0x66, 0x71, 0xc8, 0x05, 0x9e, - 0xfe, 0x2c, 0x5f, 0x3c, 0xf5, 0x05, 0x8b, 0xdf, 0x63, 0x98, 0x88, 0xef, - 0xb5, 0xde, 0x2c, 0x09, 0x62, 0xff, 0x61, 0xc6, 0xe0, 0x14, 0x16, 0x2f, - 0xbe, 0xcc, 0x75, 0x8b, 0xe6, 0xff, 0xdd, 0x62, 0x88, 0xf1, 0x3b, 0x11, - 0x5f, 0x8a, 0x11, 0xcd, 0xb2, 0xc5, 0x49, 0xe7, 0x86, 0x47, 0x52, 0xb8, - 0x2d, 0x09, 0x40, 0xa6, 0x94, 0x3c, 0x2b, 0xa2, 0x35, 0xf8, 0xe8, 0x21, - 0x8f, 0x7f, 0xff, 0x9f, 0xb1, 0x0b, 0x86, 0x06, 0x52, 0x3f, 0xb4, 0x33, - 0x8b, 0x17, 0x1a, 0xeb, 0x17, 0xf6, 0x9c, 0x5d, 0xfe, 0x79, 0x62, 0x96, - 0x24, 0xd9, 0xd6, 0xcc, 0xcc, 0x11, 0xc3, 0x1c, 0xd2, 0x0d, 0xc7, 0xba, - 0x2b, 0x8f, 0x29, 0xd4, 0x67, 0xe7, 0x84, 0x47, 0xc8, 0x5a, 0x12, 0x85, - 0x0b, 0x6e, 0x46, 0x43, 0xe9, 0xdd, 0x3e, 0xcf, 0x11, 0xcc, 0x9d, 0xc9, - 0x77, 0xf7, 0x1b, 0x06, 0xfd, 0x96, 0x2f, 0xdf, 0xcd, 0x4c, 0x16, 0x2f, - 0xee, 0xa1, 0xcf, 0xe6, 0xcb, 0x14, 0x33, 0xd9, 0xf9, 0x45, 0xff, 0x37, - 0xe2, 0x72, 0xfe, 0x74, 0xb1, 0x52, 0x7b, 0x98, 0x45, 0x7f, 0xf9, 0xf9, - 0x9f, 0x16, 0xfe, 0x7f, 0x3f, 0x4b, 0x17, 0x75, 0xb2, 0xc5, 0x80, 0xb1, - 0x42, 0x35, 0x81, 0x0d, 0x5f, 0xf0, 0x39, 0xec, 0xc2, 0xf7, 0x16, 0x2f, - 0xd1, 0x42, 0x7d, 0xc5, 0x8b, 0xe9, 0xd1, 0xb2, 0xb1, 0x77, 0x00, 0xb1, - 0x46, 0x26, 0x71, 0xf7, 0x86, 0x22, 0x01, 0xcf, 0x8a, 0xa3, 0x88, 0xef, - 0xff, 0xff, 0xbf, 0x84, 0x0c, 0x2f, 0x7f, 0x3f, 0x39, 0x13, 0xea, 0x2f, - 0xbf, 0x5e, 0x58, 0xbf, 0xdb, 0x61, 0x67, 0x40, 0xe2, 0xc5, 0xe0, 0x4f, - 0x65, 0x8b, 0x41, 0x62, 0xb0, 0xd8, 0x86, 0x3f, 0x7f, 0x69, 0xf7, 0xfe, - 0x44, 0xb1, 0x7f, 0xfb, 0xec, 0x60, 0x7e, 0xf3, 0xc4, 0xff, 0x12, 0xc5, - 0xe8, 0x73, 0x16, 0x2f, 0xff, 0xf4, 0x82, 0x28, 0x4e, 0xc1, 0xce, 0xdb, - 0xfd, 0xb5, 0x3d, 0x2c, 0x5f, 0xf0, 0x33, 0xd3, 0xd9, 0xc8, 0x0b, 0x17, - 0x64, 0x50, 0x45, 0x0b, 0x33, 0xd1, 0x89, 0x9d, 0x32, 0x71, 0x42, 0xfa, - 0xff, 0x79, 0xf6, 0x7e, 0xa3, 0xb1, 0x62, 0xba, 0x4f, 0xe0, 0xe4, 0x3e, - 0x8d, 0xa8, 0x33, 0x5b, 0xfe, 0xc1, 0x0c, 0xc9, 0xe4, 0xc1, 0x62, 0xf8, - 0xbc, 0xff, 0x58, 0xa3, 0x0f, 0x71, 0x8e, 0xaf, 0xfd, 0xa1, 0x45, 0xf7, - 0x8b, 0x92, 0x75, 0x8a, 0xc5, 0x7c, 0x5a, 0x7e, 0x69, 0x4b, 0xc0, 0x85, - 0x17, 0x88, 0xaf, 0x4e, 0x04, 0xb1, 0x7f, 0x9f, 0x85, 0x3e, 0x98, 0x2c, - 0x5b, 0xbf, 0x58, 0xa2, 0x3e, 0x6e, 0x0e, 0xf8, 0xca, 0xfe, 0xc1, 0xfd, - 0xc7, 0x2b, 0x17, 0xd3, 0xd7, 0x19, 0x62, 0xa3, 0x77, 0xf5, 0xe3, 0x9a, - 0x51, 0x16, 0xd0, 0xf5, 0x81, 0xd0, 0xe3, 0x0d, 0xcb, 0xc9, 0x6c, 0x36, - 0x3c, 0xfd, 0xe1, 0xcd, 0xd4, 0x6a, 0x8f, 0x2d, 0xb6, 0x3e, 0x1a, 0xb1, - 0x42, 0x97, 0x50, 0xb4, 0xfb, 0xeb, 0x53, 0x4c, 0xfb, 0xf8, 0xc4, 0x8a, - 0x1c, 0x9e, 0x8d, 0x60, 0x53, 0x87, 0xbd, 0xa1, 0x79, 0x1c, 0x5c, 0x19, - 0x6d, 0xfe, 0x9f, 0x8b, 0xc4, 0xc6, 0xac, 0x5e, 0xce, 0xd8, 0xb1, 0x7b, - 0x9c, 0xe2, 0xc5, 0xdd, 0xeb, 0xac, 0x5f, 0xfc, 0x5b, 0xff, 0x39, 0xec, - 0xc3, 0xf1, 0x62, 0xf4, 0x22, 0x65, 0x8b, 0xff, 0xb0, 0xf2, 0x19, 0x0a, - 0x05, 0x87, 0x58, 0xb3, 0xf4, 0x7c, 0x44, 0x3d, 0x7f, 0xc5, 0xef, 0xe4, - 0xc2, 0x78, 0xb1, 0x7d, 0x86, 0xe0, 0xd6, 0x2a, 0x4f, 0x6f, 0xe7, 0x17, - 0xe2, 0x14, 0x33, 0x8b, 0x17, 0xfd, 0x83, 0xfc, 0xfb, 0xf3, 0xc5, 0x8b, - 0x86, 0xf8, 0x7c, 0x24, 0x51, 0x7f, 0xf9, 0xe7, 0xdf, 0x13, 0x1e, 0x28, - 0x4e, 0xcb, 0x17, 0xf1, 0x66, 0xb5, 0x9d, 0x2c, 0x57, 0xcf, 0xeb, 0x89, - 0x97, 0xfe, 0x6f, 0x13, 0x73, 0xec, 0x0e, 0x2c, 0x5f, 0xec, 0x39, 0x82, - 0xf4, 0x25, 0x62, 0xf9, 0xff, 0x87, 0x58, 0xbf, 0xa7, 0x7f, 0xf4, 0xd1, - 0xeb, 0x15, 0x87, 0xab, 0xa2, 0x2b, 0xff, 0xf9, 0xbf, 0x30, 0x83, 0x82, - 0x7e, 0xff, 0x97, 0xd9, 0x62, 0xb6, 0x4d, 0x0c, 0x67, 0xda, 0x84, 0x57, - 0x62, 0x1b, 0xc5, 0x3c, 0x58, 0xbe, 0xc2, 0xc3, 0xac, 0x5f, 0xf8, 0x53, - 0x17, 0x24, 0x8f, 0x3c, 0x58, 0xa5, 0x8a, 0x94, 0x44, 0x40, 0x73, 0x84, - 0x22, 0x3f, 0xbf, 0x09, 0x86, 0x79, 0x58, 0xbf, 0xc6, 0xed, 0x81, 0x67, - 0x5e, 0x58, 0xbf, 0xfc, 0x53, 0xb3, 0x0f, 0xf3, 0xf2, 0xc3, 0x56, 0x2b, - 0x11, 0x04, 0xe7, 0x17, 0xff, 0xf4, 0x1f, 0xc4, 0xdd, 0x71, 0xbc, 0x59, - 0x1f, 0xf7, 0x58, 0xbf, 0xd2, 0x1e, 0xe5, 0x9f, 0xc5, 0x8a, 0xdd, 0x35, - 0xcd, 0x42, 0xa9, 0x88, 0x7c, 0xbb, 0x7f, 0xdf, 0x78, 0x7d, 0xa0, 0xe7, - 0x58, 0xbf, 0xcc, 0xfa, 0xd3, 0x85, 0xe5, 0x8b, 0xfd, 0xed, 0xfd, 0xe6, - 0x87, 0x16, 0x2f, 0x4f, 0x7d, 0x7b, 0xed, 0x62, 0xba, 0x3e, 0x22, 0x36, - 0xbf, 0xf7, 0x1c, 0xba, 0x87, 0x9f, 0x8e, 0xb1, 0x58, 0x99, 0x87, 0xce, - 0x5a, 0x12, 0xde, 0x22, 0xbc, 0x4f, 0x12, 0xc5, 0xff, 0xec, 0xf7, 0xe4, - 0x39, 0x0a, 0x43, 0xd1, 0xab, 0x14, 0xe7, 0xd7, 0xf1, 0xdb, 0xf0, 0x0f, - 0x3a, 0x75, 0x8b, 0xf7, 0xbf, 0x22, 0xef, 0xd6, 0x2e, 0xfb, 0x2c, 0x5f, - 0x6c, 0x53, 0xb2, 0xc5, 0x4a, 0x24, 0x58, 0xa3, 0xc5, 0xc2, 0x17, 0xbf, - 0xff, 0x61, 0x1b, 0xf6, 0xcd, 0xc8, 0x5e, 0xe1, 0x0d, 0x62, 0xff, 0xce, - 0x7c, 0x1f, 0xdf, 0x85, 0x8b, 0x17, 0xf8, 0x01, 0x83, 0x30, 0xa0, 0xb1, - 0x7a, 0x47, 0x2b, 0x15, 0x27, 0xa0, 0x73, 0x4a, 0x74, 0xc1, 0x09, 0x5b, - 0x90, 0x8d, 0xbf, 0xff, 0xf6, 0x78, 0xd6, 0x0f, 0xda, 0x9c, 0x23, 0xb0, - 0xf3, 0x08, 0xd5, 0x8a, 0x96, 0x56, 0x5c, 0x21, 0x4e, 0x38, 0x41, 0x64, - 0x20, 0xb7, 0x85, 0x2b, 0xc6, 0xcb, 0x14, 0x33, 0xb5, 0x1c, 0xc1, 0xe3, - 0x73, 0xfc, 0x2b, 0x0a, 0x16, 0x5e, 0x8c, 0xfe, 0x38, 0xd2, 0xfb, 0xf8, - 0x06, 0x58, 0xba, 0x35, 0x1d, 0x62, 0xf8, 0xa7, 0x50, 0x58, 0xbf, 0xef, - 0xcc, 0x1c, 0x88, 0x5d, 0x2c, 0x5d, 0xbb, 0xac, 0x5f, 0xe1, 0xfe, 0x62, - 0x11, 0x3a, 0xc5, 0xcc, 0x1a, 0xc5, 0x47, 0x9e, 0x67, 0x8d, 0x2f, 0xfa, - 0x60, 0xfe, 0x84, 0x90, 0x16, 0x2f, 0xef, 0x06, 0x00, 0x4f, 0x4b, 0x17, - 0xbd, 0x3a, 0x58, 0xb4, 0xe1, 0xe7, 0x74, 0x63, 0x7d, 0xf7, 0x17, 0x7e, - 0xb1, 0x7b, 0x08, 0xd5, 0x8b, 0xff, 0xbe, 0xdc, 0x29, 0x00, 0x70, 0x16, - 0x96, 0x2f, 0xd9, 0xa6, 0x61, 0xac, 0x57, 0x7a, 0xa9, 0x86, 0x47, 0xb0, - 0x8b, 0x73, 0x97, 0x64, 0xd1, 0x29, 0xe1, 0x0d, 0xf2, 0x7e, 0xfc, 0xa3, - 0x83, 0xa1, 0xa3, 0x5f, 0xa4, 0xc9, 0xf6, 0xeb, 0x15, 0xa4, 0x69, 0x14, - 0x2a, 0x2f, 0x7b, 0x23, 0xd6, 0x2f, 0xf6, 0xb2, 0x0d, 0xa6, 0x0d, 0x62, - 0xff, 0xdf, 0x7f, 0x94, 0xe6, 0x8c, 0xc5, 0x8b, 0x12, 0xc5, 0xff, 0x4c, - 0x79, 0x37, 0xa0, 0xfd, 0x96, 0x2f, 0x7e, 0x46, 0xb1, 0x7f, 0x14, 0xef, - 0xa9, 0x82, 0xc5, 0xff, 0xe6, 0x7f, 0x40, 0x45, 0xee, 0x7d, 0xa0, 0xb0, - 0x19, 0xae, 0xbf, 0x0d, 0xc5, 0xa3, 0x56, 0x2e, 0x9f, 0xac, 0x5f, 0xed, - 0xcb, 0x3f, 0x8e, 0x12, 0xc5, 0x3a, 0x63, 0x7f, 0x4b, 0x65, 0xbe, 0xc5, - 0x41, 0x8b, 0xdf, 0xfb, 0x81, 0xf9, 0xc8, 0x50, 0xce, 0x2c, 0x5c, 0x3e, - 0x2c, 0x54, 0x13, 0xfc, 0x8f, 0x8d, 0x63, 0xe9, 0x84, 0x81, 0x7f, 0xff, - 0x67, 0x59, 0xc6, 0x2f, 0xbc, 0xfb, 0xe2, 0x63, 0xac, 0x5f, 0xa1, 0xce, - 0x8b, 0x4b, 0x17, 0xff, 0xfe, 0xeb, 0xd3, 0xb7, 0xde, 0x2d, 0x48, 0x59, - 0xaf, 0x7a, 0x73, 0x8b, 0x15, 0xa4, 0x4d, 0x78, 0xaa, 0x8c, 0x5f, 0x78, - 0x99, 0x6a, 0xbb, 0x13, 0xe1, 0x06, 0xe6, 0x8e, 0x7c, 0xd2, 0x83, 0x49, - 0x18, 0x50, 0xf4, 0xb9, 0xf1, 0x62, 0xff, 0x7b, 0x82, 0x8f, 0xf3, 0x7d, - 0x62, 0x8e, 0x79, 0xdd, 0x85, 0xaf, 0x71, 0xb7, 0x58, 0xb6, 0x2c, 0x5f, - 0x84, 0x77, 0xfc, 0xac, 0x5f, 0xb3, 0x5b, 0xce, 0x2c, 0x56, 0xc7, 0xc2, - 0x42, 0x21, 0x94, 0x5f, 0xf6, 0x1f, 0x34, 0xfb, 0x31, 0xd6, 0x2f, 0xfd, - 0xf9, 0x37, 0xce, 0x4e, 0x0e, 0x2c, 0x5e, 0xe6, 0xda, 0x58, 0xbc, 0x53, - 0xf5, 0x8b, 0x9b, 0x46, 0x1b, 0xb9, 0x1f, 0xbf, 0xe9, 0x2d, 0xcc, 0x7d, - 0x66, 0xeb, 0x17, 0xff, 0x7b, 0xf8, 0x7c, 0xde, 0x7f, 0x27, 0x58, 0xbe, - 0x21, 0x67, 0xd6, 0x28, 0xc3, 0xe7, 0x64, 0x5b, 0xcc, 0x7e, 0x2c, 0x56, - 0x1b, 0xf6, 0x22, 0xa0, 0x26, 0x01, 0xe8, 0x70, 0xdd, 0x9b, 0x2c, 0x5f, - 0xb5, 0x9e, 0xfb, 0xac, 0x5f, 0xf4, 0x33, 0x5a, 0xcf, 0x7d, 0xd6, 0x2f, - 0xa7, 0xe1, 0x8f, 0x47, 0xc3, 0xe2, 0x8b, 0xfe, 0xdc, 0x98, 0xcf, 0xce, - 0xb1, 0x62, 0xff, 0x8a, 0x7a, 0x8e, 0x37, 0xd9, 0xf5, 0x8b, 0xff, 0xb3, - 0x59, 0x3c, 0xc1, 0xfd, 0xa0, 0xb1, 0x4b, 0x16, 0xf4, 0x0f, 0x3e, 0x39, - 0x0e, 0x8e, 0x8b, 0x82, 0x84, 0x6d, 0x4a, 0x63, 0x2d, 0x0f, 0x2b, 0xb0, - 0xeb, 0x17, 0xa3, 0x9c, 0x0b, 0x17, 0xff, 0xc5, 0xe6, 0x6f, 0x94, 0xfb, - 0x81, 0x67, 0xd6, 0x2e, 0x68, 0xf5, 0x8a, 0x1a, 0x28, 0x1c, 0x5d, 0x88, - 0x3c, 0x9f, 0x7f, 0xec, 0x3e, 0x77, 0x66, 0x0b, 0xbf, 0xe2, 0xc5, 0xfc, - 0x18, 0xdb, 0x58, 0x75, 0x8b, 0xff, 0x60, 0xda, 0x04, 0xda, 0x68, 0x2c, - 0x5f, 0x76, 0x92, 0x82, 0xc5, 0xe6, 0x7d, 0x2c, 0x5b, 0x46, 0x22, 0xb0, - 0x65, 0xf8, 0x7b, 0xf2, 0x4a, 0xf2, 0x66, 0xa1, 0xc3, 0xca, 0xff, 0xdc, - 0x9d, 0x43, 0xf3, 0xbe, 0x12, 0xc5, 0xff, 0xfc, 0x72, 0x63, 0x7e, 0xfe, - 0x98, 0x45, 0x09, 0xd6, 0xcb, 0x17, 0xff, 0x1f, 0x8d, 0x0d, 0x4f, 0x24, - 0xb6, 0x58, 0xbf, 0xe9, 0xf7, 0xf0, 0xf9, 0xac, 0x58, 0xbf, 0x7b, 0xef, - 0x3c, 0x58, 0xb9, 0x8b, 0x47, 0xc1, 0xc3, 0x8b, 0xff, 0xec, 0x1f, 0xe7, - 0x90, 0x7e, 0x72, 0x75, 0x05, 0x8a, 0xd8, 0xff, 0x23, 0x8b, 0x2f, 0xff, - 0xde, 0x9f, 0x70, 0xb3, 0xef, 0x3e, 0xfb, 0x41, 0x62, 0xce, 0xb1, 0x4e, - 0x7c, 0xbf, 0x54, 0xbf, 0xe9, 0x07, 0x06, 0x26, 0xd4, 0x16, 0x2f, 0xb7, - 0x66, 0xdd, 0x72, 0x01, 0x96, 0xc8, 0x1f, 0x5e, 0x8e, 0xaf, 0xf8, 0xed, - 0xd3, 0x43, 0x8f, 0x05, 0x8b, 0xfe, 0x9f, 0xee, 0xfc, 0x67, 0xd9, 0x62, - 0xd2, 0x62, 0x26, 0xf0, 0x9f, 0x47, 0x56, 0x02, 0xc5, 0xcd, 0x05, 0x8a, - 0x93, 0x52, 0x71, 0x2a, 0xf9, 0xff, 0x01, 0x7a, 0xe2, 0xc5, 0x8b, 0x98, - 0x0b, 0x15, 0x27, 0x9e, 0x44, 0x5e, 0x16, 0xb6, 0xeb, 0x15, 0xa3, 0xc0, - 0x22, 0xda, 0x95, 0xc5, 0xfc, 0x5e, 0x68, 0xc8, 0x79, 0x08, 0xb0, 0xe5, - 0x1a, 0x50, 0xd9, 0x66, 0x06, 0x9c, 0xee, 0xf5, 0xd4, 0x65, 0x9a, 0x29, - 0x3b, 0xcf, 0xe3, 0x53, 0x04, 0x31, 0xca, 0x37, 0x0e, 0x15, 0x7a, 0x72, - 0x7a, 0xe9, 0x8e, 0x58, 0xbf, 0xa1, 0x9a, 0xd3, 0x41, 0x62, 0xc3, 0xf9, - 0xe4, 0x78, 0x6a, 0xc3, 0x58, 0xbf, 0xf9, 0xbd, 0xc1, 0x43, 0xec, 0xe4, - 0xcb, 0x15, 0xd1, 0xea, 0x9c, 0x4a, 0xff, 0xfe, 0x71, 0x96, 0x72, 0x74, - 0x67, 0x3e, 0xc3, 0x91, 0xac, 0x5e, 0x79, 0x82, 0xc5, 0xee, 0xd3, 0xf5, - 0x8a, 0x96, 0x71, 0xf4, 0x09, 0x31, 0xfd, 0xe9, 0x6c, 0x0d, 0x18, 0x28, - 0x1f, 0x78, 0x47, 0xe5, 0xb0, 0xc7, 0x2f, 0xcf, 0xe6, 0x8e, 0xc5, 0x8b, - 0xf6, 0x6a, 0x01, 0xc1, 0x62, 0xff, 0x6d, 0xc9, 0x3b, 0x75, 0xe5, 0x8b, - 0xff, 0x3f, 0xa1, 0xf7, 0xf7, 0x3e, 0xeb, 0x15, 0xb2, 0x27, 0xc8, 0xab, - 0xb1, 0xb5, 0xcd, 0xd2, 0xc5, 0xef, 0xb4, 0x7a, 0xc5, 0xf4, 0x82, 0x3b, - 0x16, 0x2f, 0x8e, 0x76, 0xf2, 0xc5, 0x41, 0x37, 0xbc, 0x86, 0x49, 0xcc, - 0x80, 0x31, 0xe2, 0x00, 0xc9, 0x6f, 0xec, 0xee, 0x66, 0xff, 0x16, 0x2f, - 0xfe, 0xce, 0x79, 0xba, 0x0f, 0xba, 0x4a, 0x0b, 0x16, 0xc5, 0x8b, 0xff, - 0xb0, 0x9a, 0x1f, 0x63, 0x9d, 0xa0, 0xb1, 0x68, 0xa3, 0x43, 0xd4, 0x8d, - 0x84, 0x6f, 0xff, 0xf3, 0x8b, 0x68, 0x99, 0xb6, 0xf6, 0x44, 0x52, 0x7f, - 0xb2, 0xc5, 0xf3, 0xea, 0x7b, 0x2c, 0x5f, 0xfc, 0x71, 0x1a, 0x58, 0x0f, - 0x73, 0x36, 0x58, 0xb6, 0xc3, 0x3e, 0xbc, 0x24, 0xbf, 0xff, 0x70, 0xcc, - 0x19, 0x9c, 0xcd, 0x00, 0xf9, 0x1d, 0x8b, 0x14, 0x48, 0x83, 0xf1, 0x45, - 0xff, 0xfe, 0xcd, 0x19, 0xbf, 0xdc, 0x7a, 0x71, 0x6c, 0x18, 0xdb, 0x65, - 0x8b, 0xd0, 0xd1, 0xd6, 0x2f, 0xb7, 0xfb, 0xec, 0xb1, 0x7f, 0xc7, 0xce, - 0xe0, 0xf5, 0x3f, 0x95, 0x8b, 0x88, 0xdf, 0xa2, 0x01, 0x87, 0x83, 0x25, - 0xbd, 0xe0, 0x09, 0x62, 0xb7, 0x4d, 0x05, 0xe1, 0xce, 0x47, 0x97, 0xe3, - 0xc6, 0xf1, 0xbc, 0x6f, 0xde, 0x2c, 0x5f, 0xff, 0xd0, 0xce, 0x3e, 0xb4, - 0xe7, 0x0f, 0xdf, 0xc0, 0xbc, 0xb1, 0x7f, 0xe6, 0x2d, 0xc9, 0xba, 0x87, - 0xe5, 0x62, 0xa5, 0x53, 0x9e, 0x46, 0xc6, 0xe6, 0xac, 0x7c, 0x25, 0xeb, - 0xff, 0xc7, 0x9d, 0xc7, 0x2d, 0xaf, 0x84, 0xc3, 0x58, 0xb9, 0x9d, 0x62, - 0xb0, 0xf8, 0xb8, 0x99, 0x7c, 0x36, 0x63, 0xac, 0x5f, 0xbf, 0x23, 0x79, - 0x58, 0xa3, 0x4f, 0x24, 0x22, 0x2a, 0x3a, 0x23, 0x99, 0xaa, 0xff, 0x6b, - 0x3f, 0xf9, 0xea, 0x0b, 0x17, 0xff, 0xdf, 0x67, 0xf4, 0xbc, 0x30, 0x80, - 0x09, 0x58, 0xbc, 0xdf, 0x95, 0x8b, 0xb0, 0x0b, 0x16, 0xdb, 0xe6, 0xcc, - 0x21, 0xcb, 0xf0, 0x73, 0xac, 0x25, 0x8b, 0xfe, 0xfc, 0xf3, 0xdc, 0xc1, - 0x77, 0xeb, 0x17, 0xfe, 0x97, 0xff, 0xf3, 0xdf, 0xc8, 0x2c, 0x5f, 0xec, - 0x28, 0x67, 0x03, 0x3a, 0xc5, 0x88, 0x68, 0xb1, 0xd1, 0xff, 0x8f, 0xaa, - 0x53, 0x0e, 0xc8, 0x6c, 0xdf, 0xfe, 0xcf, 0xbf, 0x69, 0xcd, 0x6c, 0x26, - 0x1a, 0xc5, 0x41, 0x52, 0xfc, 0x46, 0xad, 0x08, 0x00, 0xa3, 0x37, 0x0c, - 0x9e, 0xff, 0xf4, 0x33, 0xa8, 0x07, 0x20, 0x8c, 0x08, 0x20, 0x92, 0x2f, - 0xa6, 0x23, 0xe2, 0xc5, 0xf8, 0xe1, 0x63, 0xf6, 0x58, 0xbb, 0x0a, 0x24, - 0x51, 0x7d, 0x50, 0x32, 0x3b, 0xff, 0xee, 0x73, 0xe2, 0xde, 0x60, 0xfa, - 0x06, 0x12, 0xc5, 0x41, 0x11, 0xa1, 0x1e, 0x54, 0xa7, 0x58, 0xd1, 0xc4, - 0x5f, 0xff, 0x6a, 0x03, 0xfc, 0xf0, 0xb0, 0x26, 0xd1, 0xab, 0x17, 0x80, - 0x2e, 0x2c, 0x5f, 0xb3, 0x0a, 0x60, 0xb1, 0x6e, 0x49, 0xe2, 0x10, 0xf5, - 0x32, 0x2f, 0x3d, 0x09, 0x6a, 0x96, 0x5c, 0xb8, 0xd7, 0x70, 0xc1, 0xe1, - 0x3b, 0xa3, 0x3f, 0xcb, 0xc4, 0x68, 0xcf, 0x8a, 0x70, 0xb4, 0x50, 0xe4, - 0xbd, 0xf7, 0x09, 0x62, 0xff, 0x87, 0x90, 0xfc, 0xf6, 0x1c, 0xac, 0x5e, - 0xef, 0x23, 0x7e, 0xf1, 0x62, 0xf9, 0xca, 0x1c, 0x30, 0xfa, 0x3b, 0xea, - 0x77, 0x7f, 0xe7, 0x06, 0x0b, 0xbf, 0x72, 0xfe, 0x2c, 0x5d, 0xa3, 0x56, - 0x28, 0x8f, 0x6c, 0x34, 0x2b, 0xe8, 0xb9, 0x91, 0x2c, 0x5f, 0x81, 0x3e, - 0xc8, 0xf5, 0x8b, 0xa2, 0xc5, 0x8b, 0xe3, 0x5f, 0xae, 0x2c, 0x5f, 0xce, - 0x69, 0xb2, 0x5e, 0x58, 0xb0, 0xd8, 0xfb, 0x3c, 0x31, 0x1c, 0x4b, 0x7f, - 0x73, 0x5a, 0x78, 0xb8, 0xb1, 0x7f, 0x67, 0xb7, 0xfb, 0xc4, 0xb1, 0x7f, - 0x66, 0xb7, 0x66, 0xdd, 0x52, 0x04, 0x97, 0xfe, 0x98, 0x16, 0x7f, 0xc5, - 0x20, 0x58, 0xa9, 0x3f, 0x92, 0x3c, 0xbf, 0xde, 0xcd, 0x6e, 0xcd, 0xba, - 0xa4, 0xf9, 0x2f, 0xf6, 0x9c, 0xbd, 0xc7, 0x1a, 0xc5, 0x49, 0xfa, 0xb2, - 0x15, 0xf9, 0x87, 0xf9, 0x35, 0x62, 0xff, 0xfe, 0xd6, 0x0f, 0xf3, 0xd4, - 0x35, 0x3e, 0xe0, 0x65, 0x05, 0x8b, 0xff, 0xf0, 0x80, 0x76, 0x80, 0xd9, - 0x82, 0xc8, 0xa7, 0x4b, 0x16, 0xc7, 0x45, 0xaf, 0x97, 0xaf, 0xfc, 0x59, - 0xef, 0x3f, 0x3d, 0x80, 0x58, 0xbf, 0xfe, 0xdc, 0xb3, 0xf8, 0x4f, 0x23, - 0x14, 0xec, 0xb1, 0x76, 0x73, 0xbd, 0x56, 0x41, 0x03, 0x01, 0xc2, 0xa7, - 0x78, 0x4a, 0x9c, 0x80, 0xa1, 0xbd, 0xc2, 0x70, 0xcf, 0xab, 0x15, 0xf5, - 0x14, 0xb5, 0x7a, 0x25, 0xca, 0xbe, 0xd3, 0x90, 0x37, 0xff, 0x4f, 0xdc, - 0xdc, 0xd6, 0xc7, 0x17, 0x4b, 0x17, 0xfc, 0x3d, 0x61, 0xf2, 0x0c, 0x35, - 0x8b, 0xff, 0xf0, 0x9b, 0x98, 0x5b, 0xfd, 0xc7, 0xfc, 0xeb, 0xb9, 0x62, - 0xa5, 0x77, 0xf3, 0x08, 0x9e, 0x73, 0x43, 0xe5, 0xec, 0x90, 0x47, 0x37, - 0xff, 0x7f, 0x00, 0x39, 0x1e, 0x69, 0xb8, 0xb1, 0x7e, 0x9d, 0x60, 0xe5, - 0x62, 0xfd, 0x0c, 0x00, 0x7e, 0x58, 0xbf, 0xbf, 0x1d, 0xf7, 0xdf, 0xeb, - 0x15, 0x28, 0xc8, 0x74, 0x46, 0x27, 0x11, 0x55, 0xff, 0xe7, 0x92, 0xf6, - 0xff, 0x90, 0xb9, 0xa6, 0x58, 0xbe, 0x98, 0x73, 0x16, 0x2f, 0x73, 0x03, - 0x58, 0xaf, 0xa2, 0x2c, 0x09, 0x7e, 0x22, 0xbe, 0x83, 0x83, 0x16, 0x2f, - 0xff, 0x79, 0xa0, 0x66, 0x7e, 0x75, 0xd7, 0x25, 0x62, 0xff, 0xfb, 0x7f, - 0xce, 0xb3, 0x84, 0x26, 0x81, 0xac, 0xb1, 0x7f, 0xfe, 0x6e, 0xc6, 0x73, - 0xec, 0xfe, 0x9f, 0x7f, 0x3c, 0xb1, 0x40, 0x4c, 0x5f, 0xc4, 0x42, 0x4c, - 0x0d, 0x46, 0xff, 0xcd, 0xb7, 0xe7, 0x6c, 0xf7, 0x31, 0x62, 0xa4, 0xff, - 0xc8, 0xfe, 0xff, 0xbd, 0x27, 0xfe, 0x76, 0xce, 0x2c, 0x5e, 0x72, 0x1a, - 0xc5, 0xff, 0x49, 0xf9, 0x2f, 0xb3, 0x79, 0x62, 0xa0, 0x89, 0x0d, 0xce, - 0xfc, 0x39, 0x7f, 0xed, 0x9b, 0xa8, 0xec, 0xf1, 0x37, 0x65, 0x8b, 0xfe, - 0x17, 0xb8, 0x60, 0x37, 0xe3, 0xac, 0x5f, 0xfe, 0xf4, 0x97, 0xb9, 0x98, - 0x69, 0xad, 0x05, 0x8b, 0xff, 0xe8, 0x67, 0x8c, 0xe7, 0x30, 0xb7, 0x62, - 0x02, 0xc5, 0xfd, 0x9e, 0xfb, 0x90, 0x16, 0x2f, 0x69, 0xbf, 0xd1, 0xff, - 0x44, 0xa3, 0x58, 0x8f, 0xe6, 0x86, 0x4d, 0xff, 0xdf, 0xc2, 0x37, 0x9e, - 0x7f, 0x60, 0x16, 0x2f, 0xf3, 0x17, 0xb0, 0x45, 0xe5, 0x8a, 0x81, 0xfb, - 0x81, 0x16, 0xfd, 0x9e, 0xf6, 0x0d, 0x62, 0xff, 0x9f, 0xa0, 0x19, 0xa7, - 0xe8, 0x0b, 0x14, 0x69, 0xf2, 0xe8, 0xa2, 0xff, 0xd8, 0x39, 0x84, 0xff, - 0x00, 0xcb, 0x17, 0xff, 0xf9, 0xba, 0x01, 0xc3, 0xe1, 0x83, 0xc2, 0x17, - 0x81, 0x30, 0x58, 0xbf, 0x9a, 0x02, 0x83, 0x0d, 0x62, 0xff, 0xff, 0xbe, - 0x26, 0xdb, 0x53, 0xf6, 0x7e, 0x73, 0x0d, 0x62, 0x02, 0xc5, 0xf9, 0xf6, - 0xe7, 0x19, 0x62, 0x86, 0x89, 0x0f, 0xb3, 0xdf, 0xfa, 0x58, 0xb3, 0x5e, - 0xcc, 0xd9, 0x62, 0xff, 0xd3, 0x84, 0x3f, 0xcf, 0xe7, 0x8b, 0x17, 0x7b, - 0x83, 0x3f, 0xae, 0x1e, 0xde, 0x08, 0x20, 0x92, 0x2f, 0xb3, 0x76, 0xd2, - 0x44, 0x61, 0xa1, 0xbf, 0xf8, 0x43, 0xfb, 0x99, 0xaf, 0x4b, 0x41, 0x62, - 0xbe, 0x7f, 0x9c, 0x36, 0xbf, 0xff, 0xd1, 0x6a, 0x7b, 0x18, 0x6b, 0x18, - 0x1c, 0x5c, 0x33, 0x3a, 0xf2, 0xc5, 0x4a, 0x7e, 0xed, 0x09, 0xdf, 0x43, - 0x2c, 0x32, 0x2b, 0xfe, 0xfb, 0x85, 0xe8, 0xb5, 0x3e, 0x58, 0xbf, 0xf3, - 0xf8, 0x59, 0xe6, 0x3e, 0x12, 0xc5, 0xff, 0xff, 0xff, 0x08, 0xe7, 0x68, - 0x1b, 0xa6, 0xdf, 0x35, 0xa7, 0xed, 0xcc, 0xf7, 0x9b, 0x45, 0x3d, 0x41, - 0x62, 0xa0, 0x98, 0x96, 0x8f, 0x3e, 0x7b, 0x7f, 0xd2, 0x0f, 0x61, 0x43, - 0x38, 0xb1, 0x71, 0xb0, 0x58, 0xbd, 0x2f, 0xba, 0xc5, 0xfb, 0x00, 0xc4, - 0x08, 0x1b, 0x6f, 0x8c, 0xd3, 0xa3, 0x6f, 0xe6, 0x24, 0xdd, 0x5b, 0x32, - 0x20, 0x06, 0x8b, 0xbc, 0x67, 0x7d, 0x42, 0x77, 0x50, 0x87, 0x39, 0x1f, - 0xcf, 0x40, 0xca, 0x52, 0xad, 0x7d, 0x28, 0xd2, 0xe6, 0xf2, 0xc5, 0xee, - 0x66, 0xcb, 0x17, 0x16, 0xc0, 0x36, 0xbe, 0x17, 0xa5, 0x8a, 0x93, 0x72, - 0x72, 0xda, 0x58, 0xa5, 0x8b, 0x70, 0x22, 0xe3, 0xb8, 0x32, 0xff, 0xff, - 0x0b, 0xd3, 0xf3, 0x38, 0xd0, 0x7f, 0x61, 0xf8, 0xd0, 0x58, 0xb3, 0x2c, - 0x5a, 0x56, 0x2f, 0x33, 0xec, 0x46, 0x88, 0x42, 0x37, 0xff, 0xcf, 0xbb, - 0x8f, 0x93, 0xf6, 0x21, 0x67, 0xd6, 0x2a, 0x09, 0x97, 0x11, 0x57, 0x21, - 0x09, 0xe3, 0x1b, 0xfb, 0x85, 0x9b, 0x07, 0x05, 0x8b, 0xf0, 0x7e, 0xe0, - 0x89, 0x62, 0xd3, 0xd1, 0xed, 0x11, 0x85, 0xfe, 0x29, 0xe7, 0x1e, 0x49, - 0x62, 0x8e, 0x7b, 0x0c, 0x4f, 0x7f, 0xff, 0x7d, 0x8b, 0xa8, 0x07, 0x09, - 0x28, 0x31, 0xf0, 0x6b, 0x17, 0xfe, 0x80, 0x58, 0xfd, 0xb2, 0x12, 0x4b, - 0x14, 0xe8, 0x9c, 0x0d, 0x72, 0xff, 0xf6, 0x67, 0xc7, 0xf9, 0xe6, 0x7d, - 0xc0, 0xb1, 0x7f, 0xfe, 0xdf, 0xf3, 0xc6, 0xd3, 0x16, 0x77, 0x6c, 0x2e, - 0x2c, 0x5f, 0xfb, 0xee, 0x59, 0xef, 0xbb, 0x01, 0x62, 0xfd, 0x14, 0x27, - 0x5c, 0x58, 0xbf, 0x41, 0xe3, 0xb3, 0xeb, 0x17, 0xfb, 0x08, 0x50, 0xe6, - 0xcc, 0xb1, 0x7a, 0x48, 0x6b, 0x17, 0xfb, 0x0e, 0x2e, 0x7d, 0xa0, 0xb1, - 0x46, 0x23, 0x66, 0x4a, 0x86, 0x57, 0xb9, 0xa1, 0x0e, 0x5f, 0x18, 0x31, - 0xe2, 0xc5, 0x1a, 0x7d, 0xc7, 0x4a, 0xbf, 0xf0, 0x9a, 0x1f, 0x7e, 0x09, - 0xa0, 0xb1, 0x7f, 0xe7, 0xf6, 0xc2, 0xe1, 0x9a, 0xd4, 0xac, 0x54, 0xae, - 0x4f, 0xed, 0x0f, 0x48, 0x42, 0xf4, 0x64, 0x78, 0x93, 0xba, 0xd3, 0xc7, - 0x08, 0x02, 0x3f, 0x1f, 0xde, 0x7f, 0x89, 0x62, 0xfb, 0xb9, 0xc5, 0xdf, - 0xac, 0x5f, 0xc3, 0x91, 0xb0, 0x5e, 0x58, 0xa3, 0x0f, 0xdd, 0x87, 0x78, - 0x57, 0x7e, 0xc8, 0x7e, 0x74, 0xb1, 0x7c, 0x69, 0x9f, 0x75, 0x8a, 0xdc, - 0xff, 0x23, 0xcb, 0xf4, 0x51, 0x7e, 0x81, 0x0b, 0xa8, 0x2c, 0x5d, 0xf7, - 0x58, 0xbb, 0xaf, 0x74, 0x78, 0x31, 0x15, 0x5f, 0x9f, 0xe6, 0xcf, 0x4b, - 0x17, 0xec, 0x19, 0x4f, 0x4b, 0x16, 0xf4, 0x9e, 0x91, 0x15, 0x5f, 0xff, - 0xfb, 0x42, 0xde, 0x46, 0xe4, 0xda, 0x37, 0x7f, 0xbf, 0x74, 0x9e, 0x56, - 0x2f, 0xff, 0xff, 0x14, 0x9f, 0x83, 0xfc, 0xf3, 0x20, 0xe6, 0x9a, 0xde, - 0x29, 0x3f, 0x16, 0x2d, 0xd1, 0xa8, 0xe9, 0xf3, 0x8d, 0xfe, 0x04, 0x1f, - 0xdc, 0x0c, 0xeb, 0x17, 0xfe, 0xe3, 0x43, 0x99, 0xbc, 0x9d, 0xd6, 0x2b, - 0x47, 0xeb, 0xe3, 0x6b, 0xfe, 0xdf, 0xee, 0x00, 0x4e, 0xa0, 0xb1, 0x7d, - 0xad, 0x9f, 0x65, 0x8b, 0xba, 0x23, 0x0f, 0x83, 0x0e, 0xea, 0x55, 0xab, - 0x63, 0xa3, 0xc2, 0x0d, 0xa3, 0x0f, 0x14, 0x28, 0x03, 0x84, 0x15, 0xff, - 0x75, 0x2e, 0x7c, 0x2c, 0x8f, 0x58, 0xbd, 0xe6, 0xdd, 0x62, 0xff, 0xf4, - 0x39, 0x83, 0xcf, 0xbb, 0x7b, 0xf2, 0xb1, 0x5b, 0x22, 0x8b, 0x73, 0xbe, - 0x87, 0xaf, 0xdb, 0x7e, 0x45, 0x8b, 0x17, 0xff, 0xd0, 0x93, 0xea, 0x5e, - 0x0d, 0xc6, 0x20, 0x2c, 0x5f, 0xcf, 0xcc, 0x18, 0x78, 0xb1, 0x7e, 0xee, - 0x72, 0xce, 0xcb, 0x17, 0xf6, 0x0d, 0xc5, 0xbf, 0xf7, 0x3d, 0xa6, 0x2e, - 0xbf, 0xb9, 0x07, 0x3b, 0x41, 0x62, 0xff, 0xf8, 0x79, 0x01, 0x0d, 0x88, - 0x1a, 0xd6, 0x04, 0xb1, 0x52, 0x9c, 0xaf, 0x45, 0x3a, 0x85, 0x40, 0x11, - 0x42, 0x2e, 0xbf, 0xdc, 0x2c, 0xed, 0xf6, 0x82, 0xc5, 0xee, 0x43, 0xb2, - 0xc5, 0xf8, 0x7a, 0x9c, 0xf2, 0xc5, 0x39, 0xfe, 0xc7, 0x9a, 0x91, 0x05, - 0xff, 0xe9, 0xd8, 0x3f, 0xcf, 0x5e, 0xcd, 0x88, 0x6b, 0x17, 0x9b, 0x79, - 0x58, 0xac, 0x56, 0x62, 0xf1, 0xe4, 0x34, 0x33, 0x88, 0xc3, 0xc9, 0xd7, - 0xf8, 0x07, 0x60, 0x1d, 0x80, 0xb1, 0x7f, 0x9c, 0x03, 0x13, 0x6a, 0x0b, - 0x17, 0xb8, 0xd1, 0xeb, 0x17, 0xff, 0xef, 0x75, 0xbb, 0xff, 0x7f, 0xb9, - 0x33, 0x68, 0xd5, 0x8a, 0x81, 0xfc, 0x9c, 0x82, 0xff, 0xff, 0xe1, 0xe0, - 0xff, 0x84, 0x03, 0xe1, 0xa6, 0x6f, 0xf7, 0xd3, 0xc9, 0xd6, 0x2f, 0xfe, - 0x68, 0x60, 0xc9, 0xdb, 0xf2, 0x75, 0x8b, 0x9b, 0xeb, 0x15, 0xf3, 0xd9, - 0xf2, 0x15, 0xc1, 0x6e, 0xb1, 0x7f, 0xc3, 0x60, 0xf4, 0x4f, 0x26, 0xac, - 0x5f, 0x4e, 0x17, 0xbb, 0xd3, 0xd4, 0x18, 0xd5, 0xee, 0x43, 0x75, 0x8b, - 0xff, 0x7b, 0x53, 0x9d, 0x66, 0xb3, 0xcb, 0x17, 0xbf, 0x9d, 0x8c, 0x3d, - 0xee, 0x87, 0xeb, 0x88, 0xd1, 0xf4, 0x26, 0xaa, 0x55, 0x2f, 0x31, 0x17, - 0xa1, 0x9a, 0x28, 0xd1, 0xef, 0xff, 0x16, 0x79, 0xe0, 0xc5, 0x9e, 0xfb, - 0xac, 0x5f, 0x00, 0x3e, 0xbb, 0xd5, 0x8b, 0xf8, 0x9b, 0xa8, 0x3e, 0x2c, - 0x5f, 0xe2, 0x01, 0x67, 0xbf, 0x86, 0x22, 0x7f, 0x11, 0xfe, 0x57, 0x7f, - 0x11, 0x81, 0xeb, 0xec, 0xb1, 0x7e, 0xd0, 0x0e, 0xfc, 0x58, 0xbf, 0xe6, - 0x81, 0x92, 0xe3, 0xc3, 0xac, 0x56, 0x1f, 0x10, 0x8a, 0x69, 0xd3, 0x09, - 0x65, 0x62, 0x84, 0x95, 0xff, 0xd0, 0x6e, 0x72, 0x5f, 0x82, 0x89, 0x96, - 0x2f, 0xf9, 0xc1, 0xb7, 0xe7, 0x82, 0xe2, 0xc5, 0xe7, 0x20, 0x2c, 0x53, - 0xa2, 0x73, 0x48, 0xa7, 0x3b, 0xbf, 0x66, 0x9b, 0xa0, 0x96, 0x2f, 0xe7, - 0xcd, 0xe7, 0xdc, 0x58, 0xb4, 0x16, 0x2f, 0xff, 0x60, 0xf4, 0xe2, 0xd8, - 0x7f, 0x92, 0xd9, 0x62, 0xff, 0xbe, 0xdc, 0x72, 0x29, 0xe9, 0x62, 0xc1, - 0x12, 0x21, 0x38, 0x99, 0x52, 0x8b, 0xfc, 0x84, 0xb5, 0xff, 0xf4, 0xff, - 0x99, 0xb8, 0xf3, 0x41, 0x37, 0xe2, 0x58, 0xad, 0x8f, 0xe4, 0x04, 0xd5, - 0xb2, 0x76, 0x64, 0x55, 0xc8, 0xd9, 0xaf, 0xf4, 0x44, 0xc1, 0x7b, 0x3e, - 0xb1, 0x7b, 0xf9, 0xba, 0xc5, 0xe0, 0x82, 0x09, 0x22, 0xfe, 0x04, 0x96, - 0x75, 0xe4, 0x88, 0xc3, 0x43, 0x46, 0x22, 0xd6, 0x38, 0xd4, 0x33, 0xfb, - 0xe6, 0xd9, 0x89, 0x62, 0xff, 0xfe, 0xef, 0xcc, 0xdf, 0xee, 0x31, 0xe0, - 0x46, 0x7b, 0x99, 0xb2, 0xc5, 0x7d, 0x17, 0xde, 0x35, 0x11, 0x15, 0xfd, - 0xf9, 0xdc, 0x98, 0xeb, 0x17, 0xf8, 0xbb, 0x6d, 0x86, 0xe6, 0x96, 0x2b, - 0x0f, 0x95, 0xcb, 0xaf, 0x6d, 0xed, 0x2c, 0x54, 0xae, 0x30, 0x3c, 0x7c, - 0x4d, 0x1d, 0x57, 0x21, 0x2a, 0x19, 0x05, 0xff, 0xf9, 0xb5, 0x2e, 0x39, - 0x26, 0x07, 0x25, 0xc6, 0xb1, 0x7f, 0x43, 0x91, 0x42, 0x76, 0x58, 0xbe, - 0x1b, 0x31, 0xab, 0x14, 0xb1, 0x7b, 0x3b, 0x63, 0x9a, 0xf0, 0x88, 0xef, - 0xff, 0xbd, 0xf9, 0xe6, 0x3f, 0xb8, 0xe5, 0xd4, 0x16, 0x2f, 0xf4, 0x9d, - 0xfd, 0xa1, 0x1d, 0x62, 0x9d, 0x10, 0x84, 0xa1, 0x5b, 0xa7, 0x15, 0xd2, - 0x97, 0xd8, 0x3b, 0xf8, 0x5b, 0xdf, 0x7f, 0x93, 0xa5, 0x8b, 0xfe, 0x81, - 0x49, 0x91, 0xcd, 0xb7, 0x16, 0x2f, 0xfd, 0xbf, 0xdc, 0x6d, 0x02, 0x13, - 0x2c, 0x5f, 0xc3, 0x33, 0x3f, 0x9b, 0xac, 0x57, 0x48, 0xad, 0xd1, 0xf1, - 0x1f, 0xdf, 0xfb, 0x3f, 0xbb, 0xc8, 0x0f, 0x30, 0x58, 0xa9, 0x4c, 0xfd, - 0xe1, 0xa1, 0xa3, 0x0b, 0xff, 0xe3, 0x03, 0x39, 0x9f, 0x73, 0x07, 0xa2, - 0x60, 0x96, 0x2f, 0xf4, 0xf3, 0x02, 0x0c, 0xbc, 0xb1, 0x58, 0x88, 0xb0, - 0xd5, 0xaa, 0x5d, 0x9b, 0x56, 0xd0, 0x86, 0x84, 0xf4, 0xc0, 0xe3, 0x25, - 0xc8, 0x62, 0xef, 0x1e, 0x37, 0x50, 0xb0, 0x7a, 0x45, 0x8c, 0x51, 0x8e, - 0xea, 0x78, 0x14, 0xf3, 0x9b, 0x3f, 0x9c, 0x3e, 0x65, 0x30, 0x1a, 0x14, - 0xb0, 0xbe, 0x47, 0xe1, 0xe9, 0xd2, 0xf1, 0x47, 0xcd, 0xda, 0x38, 0x90, - 0xe1, 0x7f, 0x7f, 0xce, 0x5b, 0x31, 0x7b, 0x0e, 0xb1, 0x7b, 0x71, 0x74, - 0xb1, 0x74, 0x81, 0x62, 0xb0, 0xfb, 0xd8, 0xe3, 0xc4, 0x17, 0xff, 0x1a, - 0x1f, 0x9f, 0x85, 0x9d, 0x9c, 0x6b, 0x17, 0xf1, 0x60, 0xfe, 0xc1, 0x2c, - 0x56, 0x8f, 0xd8, 0xe9, 0x17, 0xff, 0xfe, 0x2c, 0x70, 0x19, 0xf6, 0xf7, - 0x85, 0xb1, 0x81, 0xeb, 0x59, 0xb2, 0xc5, 0xf3, 0x90, 0x38, 0xb1, 0x78, - 0x98, 0xeb, 0x17, 0xe2, 0x7f, 0xb4, 0x7a, 0xc5, 0xfb, 0xef, 0xc9, 0x82, - 0xc5, 0xff, 0xfe, 0xe6, 0x7d, 0xf8, 0x2d, 0x83, 0x9d, 0xa4, 0x07, 0x9f, - 0x2c, 0x5f, 0xff, 0xef, 0x16, 0x01, 0x88, 0x03, 0xfc, 0xe9, 0xe7, 0xaf, - 0x2c, 0x5e, 0xe3, 0xe9, 0x91, 0xd9, 0xc2, 0x80, 0xd9, 0x2f, 0xe1, 0xff, - 0x3d, 0x1d, 0x8b, 0x16, 0x78, 0x2a, 0x38, 0xdd, 0xcb, 0xe4, 0x44, 0x39, - 0xe8, 0xc5, 0x82, 0x41, 0xbf, 0xb4, 0x37, 0x80, 0xb4, 0xb1, 0x7f, 0xff, - 0x10, 0xfe, 0xcf, 0xe0, 0x39, 0x43, 0x98, 0x40, 0x58, 0xa9, 0x56, 0x8f, - 0xf9, 0x4b, 0x4c, 0xca, 0x22, 0xfb, 0xfb, 0xf3, 0xb7, 0xe7, 0x65, 0x8b, - 0xff, 0xff, 0x33, 0x6d, 0xef, 0xbc, 0x83, 0xc6, 0xc9, 0x0c, 0x50, 0x84, - 0xac, 0x54, 0x11, 0x3b, 0xe3, 0x0b, 0xfc, 0x46, 0xf1, 0xf4, 0xd0, 0x58, - 0xbe, 0x26, 0xeb, 0xcb, 0x17, 0xfd, 0xe6, 0xeb, 0x21, 0xf9, 0xd2, 0xc5, - 0xec, 0x20, 0x2c, 0x5f, 0xdb, 0xcf, 0x45, 0x21, 0x2c, 0x5f, 0xef, 0x19, - 0x14, 0x1b, 0x5b, 0x2c, 0x5f, 0xe8, 0x0f, 0xe2, 0x38, 0xf1, 0x62, 0xff, - 0xee, 0x81, 0xb9, 0x66, 0xc2, 0xea, 0x1c, 0x58, 0xbf, 0xec, 0xeb, 0x8d, - 0x1e, 0x79, 0x75, 0x8b, 0xc1, 0xc7, 0x62, 0xc5, 0x62, 0x37, 0x1c, 0xd7, - 0x49, 0x40, 0x3c, 0xbe, 0xcf, 0x45, 0x05, 0x8b, 0xff, 0xbb, 0x8a, 0x7b, - 0xb8, 0xc4, 0x18, 0x38, 0xb1, 0x69, 0x58, 0xaf, 0xa2, 0x01, 0x89, 0x3c, - 0x97, 0x73, 0xca, 0xc5, 0xff, 0xb3, 0xd3, 0xae, 0x7e, 0x4b, 0xcb, 0x90, - 0x20, 0xbf, 0xb3, 0x5b, 0xb3, 0x6e, 0xa9, 0x02, 0x08, 0xc3, 0xcb, 0xbd, - 0x23, 0x75, 0x8a, 0x93, 0xec, 0xe2, 0x85, 0xff, 0x88, 0xb0, 0xd6, 0xc3, - 0xb1, 0x2c, 0x5d, 0xd8, 0x6b, 0x17, 0xbb, 0x49, 0xd6, 0x2f, 0x07, 0x24, - 0xb1, 0x7d, 0xd7, 0x33, 0x4b, 0x17, 0xed, 0xb3, 0x53, 0x05, 0x8b, 0xed, - 0x69, 0xc2, 0x58, 0xa3, 0x9e, 0x6f, 0xca, 0x6a, 0x51, 0x26, 0xce, 0x37, - 0xf4, 0x78, 0xc2, 0x62, 0x82, 0xc5, 0x4a, 0x6f, 0x1b, 0x1e, 0x60, 0xd3, - 0x8f, 0x94, 0x2c, 0x04, 0x43, 0x7f, 0xf7, 0xf7, 0x1e, 0x69, 0xf3, 0xb7, - 0xc4, 0xb1, 0x7f, 0x6a, 0x7f, 0x2f, 0xdf, 0xac, 0x53, 0x1f, 0xd0, 0x69, - 0x17, 0xff, 0xff, 0xa4, 0xb7, 0xe4, 0x97, 0xb9, 0x82, 0x38, 0x7c, 0x6d, - 0x4e, 0xf8, 0x4b, 0x17, 0xff, 0xa2, 0x83, 0x97, 0xa4, 0x11, 0x13, 0xc4, - 0xb1, 0x71, 0x44, 0xb1, 0x43, 0x3e, 0x4c, 0x4c, 0xbd, 0xde, 0xc7, 0x77, - 0xd5, 0x62, 0xfe, 0xcf, 0x33, 0x43, 0x8b, 0x17, 0x67, 0x23, 0x63, 0xdb, - 0x22, 0xea, 0x94, 0x56, 0x93, 0xe5, 0xff, 0xfa, 0x7d, 0xf6, 0x8b, 0x8c, - 0xfb, 0x93, 0x66, 0xeb, 0x17, 0x31, 0xd6, 0x2f, 0xe3, 0xcb, 0xef, 0x20, - 0x58, 0xa8, 0xf3, 0xc5, 0xf0, 0xbd, 0x4b, 0x22, 0x87, 0x63, 0x4c, 0x23, - 0x34, 0xeb, 0x71, 0xce, 0x8c, 0x35, 0x18, 0xa7, 0xe1, 0x76, 0xc5, 0xe0, - 0x86, 0x69, 0x47, 0x33, 0xc8, 0x6a, 0x78, 0x8b, 0xb4, 0x71, 0x31, 0xc4, - 0x3d, 0xd0, 0x9b, 0xbf, 0xc4, 0x26, 0x89, 0x9b, 0x65, 0x8b, 0x41, 0x62, - 0xf4, 0xe8, 0x0b, 0x14, 0x33, 0x5e, 0xe2, 0x57, 0x9b, 0x5b, 0x2c, 0x50, - 0xd1, 0x43, 0xf6, 0x30, 0x88, 0x2f, 0x44, 0xe1, 0x2c, 0x5f, 0x9f, 0x45, - 0x9b, 0x2c, 0x53, 0x9e, 0x3f, 0xc7, 0xee, 0xe7, 0xd6, 0x2f, 0xfb, 0x68, - 0x9f, 0xfe, 0x9c, 0xd9, 0x62, 0xb4, 0x7e, 0xa0, 0x21, 0x21, 0x8b, 0xf6, - 0xa7, 0x7c, 0x25, 0x8a, 0xc3, 0xd6, 0x62, 0xeb, 0xfb, 0xf9, 0xef, 0x39, - 0xd6, 0x2f, 0xfe, 0xe0, 0xc9, 0xf6, 0x0f, 0x45, 0x38, 0xb1, 0x7f, 0x78, - 0x3c, 0xfb, 0x74, 0xb1, 0x7b, 0x80, 0x65, 0x8a, 0xe9, 0x18, 0x1f, 0x2e, - 0x24, 0x5f, 0x18, 0x5f, 0xf1, 0x6d, 0x9a, 0x01, 0x08, 0x0b, 0x17, 0xf6, - 0x76, 0xd6, 0x05, 0xe5, 0x8b, 0xf8, 0x26, 0x1c, 0xf5, 0xc5, 0x8a, 0x23, - 0xe1, 0xe1, 0x8d, 0xfd, 0x9d, 0x7b, 0x5a, 0x95, 0x8b, 0xff, 0xb8, 0x4d, - 0xe6, 0x38, 0x73, 0xb6, 0x2c, 0x50, 0xcf, 0xd3, 0x85, 0xf5, 0x29, 0xc7, - 0xb9, 0xeb, 0x42, 0x6c, 0x50, 0x95, 0xbf, 0xe6, 0x7f, 0x31, 0xd8, 0x80, - 0xb1, 0x7b, 0xb7, 0xf1, 0x62, 0xdb, 0xfc, 0xf5, 0x83, 0x37, 0xbe, 0x17, - 0xa4, 0x96, 0x2b, 0x0f, 0x33, 0x85, 0x57, 0xee, 0xc3, 0xfc, 0xf1, 0x62, - 0xc7, 0x58, 0xbf, 0xbc, 0x3f, 0x89, 0xb8, 0xb0, 0x19, 0x65, 0x6d, 0xd6, - 0x2a, 0x4f, 0x4b, 0x73, 0xfb, 0xbb, 0xdd, 0xd6, 0x2f, 0xfe, 0xcd, 0xff, - 0x3f, 0xcd, 0x6a, 0x4d, 0x58, 0xb8, 0x12, 0xb1, 0x61, 0xe8, 0xf7, 0x40, - 0x8d, 0x5a, 0x45, 0x19, 0x3d, 0xdf, 0x14, 0xf4, 0x05, 0x8a, 0x73, 0xc5, - 0x0c, 0x8a, 0xff, 0x09, 0x87, 0xf9, 0xf7, 0x16, 0x2f, 0x8b, 0x3b, 0x62, - 0xc5, 0xcd, 0xb7, 0x8f, 0x5c, 0x33, 0x4b, 0xf1, 0xcd, 0x35, 0xe2, 0x58, - 0xb1, 0xab, 0x17, 0x74, 0x05, 0x8b, 0xe6, 0xf4, 0xe2, 0xc5, 0x49, 0xe6, - 0xb8, 0x9f, 0xc6, 0x6f, 0xf6, 0x69, 0xc0, 0x76, 0x82, 0xc5, 0xce, 0x4b, - 0x17, 0xfd, 0x24, 0x68, 0xde, 0x02, 0xd2, 0xc5, 0x82, 0x58, 0xa1, 0x9f, - 0x19, 0xc5, 0x83, 0x3a, 0xbf, 0x4c, 0x50, 0x98, 0xf5, 0x8b, 0xff, 0x69, - 0xcd, 0x3b, 0x7b, 0x82, 0x82, 0xc5, 0xe2, 0x16, 0xcb, 0x17, 0xb6, 0x29, - 0x58, 0xb7, 0xd6, 0x2f, 0xa4, 0x8d, 0x8e, 0x58, 0xbe, 0x68, 0x61, 0x2c, - 0x56, 0xe7, 0x8f, 0xf2, 0x6b, 0xf9, 0xfc, 0x59, 0xf7, 0x58, 0xb9, 0xe2, - 0x58, 0xbe, 0xee, 0x9d, 0x1a, 0xb1, 0x6f, 0x98, 0x88, 0xe9, 0x23, 0x62, - 0xce, 0xe1, 0x8b, 0xfe, 0x9e, 0x7d, 0xf5, 0xa6, 0x82, 0xc5, 0x61, 0xff, - 0x12, 0x2d, 0x82, 0x31, 0x59, 0x00, 0xcb, 0x72, 0x12, 0xda, 0x30, 0x39, - 0x67, 0xd0, 0x58, 0x7b, 0x83, 0xbe, 0x8d, 0x96, 0xa5, 0x70, 0xa9, 0xa5, - 0xcc, 0xdf, 0xd3, 0xb7, 0xb9, 0x9e, 0x58, 0xa9, 0x65, 0x1e, 0x42, 0x53, - 0x7e, 0x43, 0x9d, 0xc8, 0x75, 0x08, 0xff, 0xc6, 0x14, 0xcf, 0x25, 0x38, - 0xb2, 0x11, 0x5d, 0xf3, 0x3f, 0x69, 0x58, 0xbf, 0xf0, 0x7a, 0xd4, 0xe1, - 0x67, 0x5c, 0x58, 0xbf, 0x38, 0xc7, 0x84, 0xb1, 0x43, 0x44, 0x57, 0x44, - 0x7c, 0x40, 0xbf, 0xff, 0xfb, 0x3d, 0x27, 0x1e, 0x7a, 0x70, 0xa0, 0x59, - 0xd4, 0x27, 0x3c, 0xb1, 0x7f, 0x16, 0x76, 0x2c, 0xe2, 0xc5, 0xfe, 0x16, - 0xb6, 0xc1, 0x17, 0x96, 0x2f, 0xdf, 0xce, 0x73, 0x0c, 0x3e, 0x3c, 0x2e, - 0xa2, 0x4c, 0x43, 0xd0, 0xd2, 0xbf, 0xe7, 0x39, 0x67, 0x8c, 0xcc, 0x58, - 0xbf, 0xef, 0xce, 0xbc, 0x53, 0x9d, 0x2c, 0x5f, 0xff, 0xf3, 0xed, 0x30, - 0xe6, 0xb4, 0xfd, 0x45, 0x06, 0xd1, 0xf3, 0xa5, 0x8b, 0xfd, 0x2d, 0xb3, - 0x69, 0x83, 0x58, 0xbd, 0xfc, 0x21, 0xa3, 0x63, 0xe7, 0x3e, 0x6b, 0xac, - 0x55, 0x72, 0xf1, 0xa0, 0xfc, 0xa3, 0xd1, 0x88, 0x5f, 0xa7, 0x51, 0x73, - 0x65, 0x8b, 0xfe, 0xfc, 0xe6, 0xa1, 0xc1, 0x1d, 0x62, 0xff, 0xdf, 0x91, - 0x99, 0x31, 0xff, 0x6e, 0x2c, 0x5f, 0xfa, 0x61, 0xd7, 0x1f, 0xe4, 0xd0, - 0x58, 0xbf, 0x0f, 0x20, 0xe3, 0x58, 0xbf, 0xf3, 0x83, 0x3d, 0x3f, 0x93, - 0xe2, 0xc5, 0x6c, 0x9a, 0x66, 0xe5, 0x6e, 0x74, 0x74, 0x31, 0x1f, 0xc7, - 0x14, 0x5c, 0xfc, 0x58, 0xbc, 0x10, 0xb8, 0xb1, 0x7f, 0xb6, 0x6f, 0x00, - 0x32, 0x82, 0xc5, 0xfa, 0x2e, 0x77, 0xdf, 0x7c, 0x8d, 0x16, 0x2a, 0x51, - 0x25, 0x83, 0xe2, 0x36, 0xbf, 0xdf, 0x7d, 0x69, 0xcb, 0x75, 0x8b, 0xff, - 0x43, 0x91, 0xb7, 0x30, 0x9a, 0x1c, 0x58, 0xbd, 0x30, 0x35, 0x62, 0xfd, - 0x9c, 0xdb, 0x02, 0x58, 0xbf, 0xb7, 0x14, 0xef, 0xfc, 0x58, 0xb9, 0xf7, - 0x58, 0xa3, 0x11, 0x21, 0x01, 0xec, 0x2a, 0x8e, 0x30, 0xa3, 0x53, 0x48, - 0xe8, 0xd3, 0xd0, 0xd4, 0xbf, 0xf7, 0xbe, 0xd0, 0x71, 0xfe, 0x60, 0xb1, - 0x4c, 0x7e, 0xe4, 0x71, 0x7f, 0x06, 0x7e, 0x04, 0xdd, 0x2c, 0x54, 0xae, - 0x6c, 0xe4, 0x72, 0xa6, 0xae, 0x6a, 0x15, 0x2d, 0x1f, 0x6f, 0x88, 0x2f, - 0x05, 0x9f, 0x58, 0xbf, 0xfe, 0xf6, 0x84, 0x39, 0x33, 0x53, 0xb3, 0x6b, - 0x75, 0x8b, 0xff, 0x16, 0x6c, 0x59, 0xef, 0xb8, 0x4b, 0x17, 0x60, 0x46, - 0x22, 0x4f, 0x75, 0x4b, 0xec, 0x06, 0xa5, 0x62, 0xb6, 0x3d, 0x3f, 0x98, - 0xdf, 0xfe, 0xfb, 0xef, 0x2f, 0xef, 0xc8, 0x59, 0xf5, 0x8b, 0xfd, 0xe7, - 0xfe, 0x16, 0x71, 0x62, 0xb7, 0x3f, 0xd0, 0xd2, 0xef, 0x42, 0x18, 0xb1, - 0x74, 0x86, 0xb1, 0x5d, 0x1b, 0x56, 0x1d, 0xbf, 0xd3, 0x00, 0xf8, 0x00, - 0xf7, 0x58, 0xa7, 0x3d, 0x9f, 0x10, 0xd8, 0xa0, 0x8d, 0x31, 0xc2, 0xca, - 0xff, 0xec, 0xfc, 0xe6, 0xdb, 0x39, 0x4c, 0x16, 0x2a, 0x09, 0xf2, 0x64, - 0x6e, 0x71, 0xc5, 0xb7, 0xb5, 0x9f, 0x58, 0xbd, 0xc7, 0x3a, 0xc5, 0x68, - 0xdd, 0x78, 0x76, 0xfe, 0xfb, 0x7b, 0xec, 0x75, 0x8b, 0xe3, 0x64, 0xa0, - 0xb1, 0x76, 0x74, 0xb1, 0x73, 0xec, 0xb1, 0x52, 0x8a, 0x27, 0x21, 0xf1, - 0x70, 0x64, 0x7d, 0xc3, 0x17, 0xfb, 0x85, 0x87, 0x3b, 0xf9, 0x62, 0xfb, - 0xd8, 0x28, 0x2c, 0x5f, 0xfd, 0xf7, 0x92, 0x31, 0x8a, 0x0e, 0x75, 0x8b, - 0xd1, 0x38, 0x4b, 0x17, 0xd3, 0xdc, 0xfa, 0x58, 0xa7, 0x3c, 0x42, 0x1f, - 0xbf, 0xf3, 0x74, 0x1f, 0x9f, 0x52, 0x2e, 0xfd, 0x62, 0xe0, 0xf6, 0x58, - 0xa3, 0x9f, 0x07, 0x91, 0xaf, 0xcd, 0xc2, 0x98, 0x96, 0x2f, 0xdf, 0x11, - 0x4e, 0xcb, 0x17, 0x76, 0xd2, 0xc5, 0xc5, 0xa5, 0x8b, 0xff, 0xf0, 0xb6, - 0x29, 0xcf, 0xc6, 0x4f, 0xb3, 0xe2, 0xd2, 0xc5, 0xee, 0x07, 0xc3, 0x15, - 0x02, 0x0e, 0x10, 0xf9, 0x08, 0x03, 0x48, 0x9c, 0xa0, 0x8a, 0x78, 0x34, - 0x18, 0xbd, 0x6e, 0xab, 0xa9, 0x8c, 0xfd, 0x28, 0x9e, 0xe2, 0x09, 0x62, - 0xfd, 0xc3, 0xe7, 0xb8, 0xb1, 0x7f, 0x03, 0x53, 0xbe, 0x12, 0xc5, 0xff, - 0x8d, 0xcf, 0x3f, 0xf3, 0xd3, 0xa5, 0x8a, 0x93, 0xed, 0x72, 0xeb, 0xf3, - 0x40, 0x9e, 0x56, 0x2f, 0x9b, 0xce, 0x05, 0x8b, 0xe2, 0xf6, 0x12, 0xc5, - 0x7c, 0xf0, 0xd8, 0x8a, 0xfe, 0xc3, 0xe6, 0x11, 0xab, 0x14, 0xb1, 0x7f, - 0x7b, 0x99, 0xdb, 0xee, 0xb1, 0x46, 0x9b, 0xc6, 0x0c, 0xb1, 0xa3, 0x44, - 0x51, 0x34, 0xd4, 0xa3, 0x51, 0xa1, 0x57, 0x7f, 0xc4, 0xc1, 0x45, 0x06, - 0xd4, 0x16, 0x2f, 0xe7, 0xd6, 0x76, 0x98, 0xf5, 0x8a, 0x88, 0xfb, 0x7e, - 0x77, 0x7f, 0x3e, 0xb5, 0x38, 0x4b, 0x17, 0xfd, 0x30, 0xe6, 0x6e, 0x53, - 0xa5, 0x8a, 0x34, 0xf9, 0x74, 0x59, 0x67, 0x58, 0xbf, 0xb8, 0xfa, 0xdf, - 0xf8, 0xb1, 0x7f, 0xc4, 0xdd, 0x7d, 0xe4, 0xbc, 0xb1, 0x7f, 0x60, 0x00, - 0xdd, 0x41, 0x62, 0xf1, 0x31, 0xb8, 0x8c, 0xad, 0xc8, 0xfa, 0x11, 0xf9, - 0x79, 0x1c, 0x51, 0x8c, 0xbb, 0x79, 0x95, 0xd1, 0x08, 0xc5, 0x72, 0x59, - 0xb6, 0xe7, 0x2e, 0x31, 0xa8, 0x4b, 0x1c, 0x80, 0xa3, 0x3d, 0xe4, 0x24, - 0xc5, 0x1a, 0x95, 0xff, 0xf6, 0xd9, 0xad, 0x9f, 0xd0, 0xcd, 0x69, 0xa0, - 0xb1, 0x71, 0xbe, 0x58, 0xbf, 0xfc, 0xff, 0x9f, 0xe7, 0x5c, 0x7f, 0xc8, - 0xd6, 0x2f, 0x6e, 0xe3, 0x58, 0xbe, 0xd8, 0xa7, 0x65, 0x8b, 0xb3, 0x65, - 0x8b, 0x14, 0x9b, 0xcc, 0x24, 0xbe, 0xd3, 0xe7, 0xd6, 0x2f, 0xf8, 0xed, - 0xd7, 0x74, 0xee, 0x73, 0xac, 0x5f, 0x4e, 0x07, 0x1a, 0x2c, 0x5f, 0xa4, - 0x71, 0xbc, 0x6f, 0xde, 0x2c, 0x5b, 0x58, 0x89, 0xf2, 0x3f, 0x0c, 0xa2, - 0xff, 0xff, 0x71, 0xf9, 0xc9, 0xe6, 0xe4, 0xdb, 0x49, 0x4c, 0x5c, 0x58, - 0xac, 0x55, 0x16, 0x6a, 0x96, 0xe3, 0x3d, 0x25, 0x3a, 0xd6, 0x89, 0x1a, - 0x18, 0x3e, 0x35, 0xbf, 0x7d, 0xe3, 0x9c, 0xd5, 0x8b, 0xec, 0x03, 0xf6, - 0x58, 0xbe, 0x00, 0x04, 0x05, 0x8a, 0xdc, 0xfd, 0x08, 0xb0, 0x32, 0x4b, - 0xe1, 0x6b, 0xce, 0xb1, 0x7e, 0x28, 0x73, 0x60, 0x2c, 0x5f, 0xff, 0x73, - 0xf8, 0x7e, 0x48, 0xd8, 0x7f, 0x11, 0xd6, 0x2f, 0xba, 0xf7, 0xf1, 0x62, - 0xfd, 0x09, 0xf7, 0xf1, 0x62, 0xb0, 0xf3, 0x3c, 0x49, 0x52, 0x8b, 0xe6, - 0x84, 0xed, 0xff, 0xc0, 0x9e, 0x1e, 0x5f, 0x5a, 0x70, 0x96, 0x2f, 0x33, - 0x41, 0x62, 0xff, 0x3f, 0x9e, 0x19, 0xd7, 0x96, 0x28, 0x69, 0xe3, 0x61, - 0x1e, 0xf0, 0xe8, 0x72, 0x60, 0x22, 0xf7, 0x0e, 0x5f, 0xf6, 0xa0, 0x4f, - 0x0e, 0xbd, 0xdf, 0x55, 0x8b, 0xfb, 0x7c, 0x0f, 0xb9, 0xa0, 0xb1, 0x7e, - 0x3b, 0xfb, 0xd2, 0xb1, 0x79, 0xf0, 0x25, 0x8b, 0xe7, 0xe6, 0x0f, 0x11, - 0x77, 0xba, 0x1b, 0x99, 0x91, 0x45, 0xff, 0x81, 0xe9, 0xc2, 0xdf, 0x3a, - 0xf2, 0xc5, 0xfb, 0x98, 0x79, 0x8f, 0x58, 0xad, 0x1f, 0x59, 0x20, 0x5f, - 0xfa, 0x60, 0x03, 0xc8, 0x5c, 0x86, 0xcb, 0x17, 0xff, 0x67, 0x50, 0xcf, - 0xbe, 0x89, 0xe5, 0x62, 0xff, 0xa6, 0x79, 0xc7, 0xd6, 0x1d, 0x62, 0xa0, - 0x7f, 0x63, 0x43, 0xbe, 0x8f, 0xfe, 0x6c, 0xb1, 0x7f, 0xa4, 0x79, 0xe7, - 0xf8, 0x96, 0x2a, 0x4f, 0x68, 0x64, 0xf7, 0xfe, 0x87, 0x9f, 0x6d, 0x4c, - 0x1b, 0x4b, 0x17, 0xe2, 0xcd, 0x83, 0x82, 0xc5, 0xe7, 0xeb, 0x8b, 0x17, - 0x67, 0x96, 0x28, 0xd3, 0x6b, 0xf1, 0xea, 0x95, 0x47, 0x9b, 0x10, 0xc5, - 0x0b, 0xd3, 0xbe, 0x31, 0x0f, 0x10, 0x3c, 0xbf, 0x7f, 0x19, 0xce, 0x61, - 0x0d, 0x62, 0xff, 0xde, 0x0c, 0x12, 0x1c, 0x82, 0x40, 0xb1, 0x7f, 0xcf, - 0xad, 0x84, 0x03, 0x26, 0x3d, 0x62, 0xff, 0xf8, 0x9c, 0xd3, 0x64, 0x3f, - 0x3f, 0xdc, 0xbc, 0xb1, 0x7f, 0xf9, 0xbf, 0xf7, 0x2c, 0x00, 0x1e, 0x2e, - 0x2c, 0x54, 0x11, 0xb4, 0x73, 0xfe, 0xca, 0x37, 0xfe, 0xfb, 0x43, 0xc2, - 0x62, 0x07, 0x16, 0x2f, 0xff, 0xb9, 0xf7, 0xc3, 0xb7, 0x5c, 0xf7, 0xc5, - 0xd2, 0xc5, 0x7d, 0x12, 0x40, 0x3f, 0xbf, 0xef, 0xbe, 0xbd, 0xd6, 0xef, - 0xe5, 0x8b, 0xe6, 0xf7, 0xa5, 0x62, 0xfe, 0x6e, 0x39, 0x4f, 0x16, 0x2e, - 0xfb, 0x2c, 0x5f, 0x0d, 0x88, 0x18, 0x8a, 0x1d, 0xcf, 0x3e, 0x45, 0xdf, - 0x96, 0x56, 0x26, 0x38, 0x28, 0x62, 0x5f, 0xff, 0xc3, 0xc0, 0x47, 0x67, - 0xd9, 0xfc, 0x2d, 0x37, 0x6c, 0x58, 0xbf, 0xff, 0xf1, 0xd8, 0x81, 0x07, - 0xe0, 0x8f, 0xf7, 0x9f, 0x7c, 0x4c, 0x75, 0x8b, 0xff, 0xfc, 0x4c, 0x17, - 0xb3, 0xe6, 0x16, 0x7f, 0x9c, 0xc6, 0x25, 0x8b, 0xd0, 0xdb, 0x16, 0x2a, - 0x23, 0xfe, 0xe3, 0x05, 0xff, 0xd8, 0x16, 0xa5, 0xcb, 0x00, 0x77, 0x58, - 0xbf, 0xff, 0x3f, 0xa1, 0x24, 0x01, 0x89, 0xb5, 0x01, 0x9d, 0x62, 0xfc, - 0x42, 0x86, 0x71, 0x62, 0xe2, 0x95, 0x8b, 0xff, 0xc2, 0xf4, 0x1c, 0x1f, - 0x67, 0xf3, 0x1d, 0x62, 0xa0, 0x8d, 0xec, 0x56, 0xf9, 0x41, 0x0b, 0x5c, - 0x64, 0x7a, 0xc5, 0xff, 0xf9, 0x9f, 0xce, 0x3c, 0x1e, 0x79, 0xce, 0xfa, - 0x58, 0xbd, 0xc9, 0x3a, 0xc5, 0xee, 0xdf, 0x75, 0x8a, 0x81, 0xbc, 0x71, - 0xdb, 0xff, 0xd3, 0xb8, 0xf0, 0x3f, 0x3e, 0xa4, 0x5d, 0xfa, 0xc5, 0xe1, - 0x60, 0xd6, 0x2f, 0x69, 0xb8, 0x62, 0xab, 0x8d, 0x88, 0xf2, 0x32, 0x1d, - 0x1d, 0xfc, 0x71, 0xa1, 0x1e, 0x44, 0x11, 0xca, 0x36, 0xf4, 0xaf, 0x4d, - 0x42, 0x3e, 0x07, 0x28, 0x65, 0xf1, 0x4b, 0xa2, 0xbf, 0xf4, 0xf3, 0x7f, - 0xb8, 0xe7, 0x34, 0xb1, 0x50, 0x64, 0x40, 0x74, 0x5e, 0xf3, 0xf6, 0xba, - 0x5d, 0xba, 0x12, 0xb1, 0x7f, 0xef, 0xcf, 0xf3, 0xa0, 0x67, 0xb8, 0xb1, - 0x7a, 0x27, 0x3a, 0xc5, 0x0c, 0xf7, 0xb1, 0x02, 0xf9, 0xcd, 0x93, 0xac, - 0x5f, 0xfd, 0x83, 0x26, 0xdb, 0x9c, 0x62, 0x82, 0xc5, 0xd8, 0x52, 0x7c, - 0xe4, 0x47, 0x5b, 0x22, 0xcb, 0xd0, 0x88, 0xa6, 0x4d, 0x40, 0x51, 0x93, - 0xdf, 0xff, 0xfc, 0x64, 0x5f, 0x9d, 0x6c, 0x67, 0x00, 0xc4, 0x03, 0x33, - 0x79, 0xf7, 0x16, 0x2f, 0xcd, 0xee, 0x61, 0x2c, 0x56, 0xe8, 0xa0, 0x27, - 0x9a, 0x96, 0xc9, 0x90, 0x70, 0xec, 0xc8, 0xfd, 0xb7, 0x8c, 0x69, 0xe5, - 0x7c, 0x35, 0x23, 0xac, 0xa3, 0x99, 0x14, 0x32, 0x6c, 0x75, 0x8b, 0xda, - 0xd4, 0xac, 0x5e, 0xf8, 0xa3, 0xd6, 0x2f, 0xfb, 0x67, 0xdb, 0x98, 0x76, - 0xfa, 0xc5, 0xff, 0x42, 0x46, 0xe3, 0xc6, 0xfa, 0xc5, 0x9f, 0x47, 0xe7, - 0xe3, 0xbb, 0xf4, 0xec, 0xe5, 0xe5, 0x8b, 0xfe, 0x68, 0x4f, 0xf3, 0xd3, - 0x05, 0x8a, 0xd1, 0xf0, 0x7c, 0xa2, 0xff, 0xf7, 0x63, 0x33, 0xcf, 0xa9, - 0x17, 0xa1, 0x2b, 0x16, 0x3a, 0xc5, 0x39, 0xef, 0x86, 0x9b, 0x78, 0x0d, - 0xc5, 0x8b, 0xa3, 0x7e, 0xf1, 0x62, 0x86, 0x7c, 0x3d, 0x11, 0x70, 0x76, - 0xff, 0x43, 0xd8, 0x69, 0x49, 0xab, 0x17, 0xbb, 0xef, 0xbe, 0xbd, 0xe2, - 0xc5, 0xf8, 0xa4, 0x79, 0x12, 0xc5, 0xfd, 0x07, 0x03, 0x78, 0x4b, 0x17, - 0xdc, 0x16, 0x8d, 0x58, 0xbf, 0xf4, 0x04, 0x3c, 0xd7, 0x88, 0x5e, 0x58, - 0xbe, 0xc2, 0x6e, 0x2c, 0x5f, 0xa7, 0xfe, 0x98, 0x2c, 0x5f, 0x43, 0x01, - 0x1a, 0x96, 0x2f, 0x0b, 0xdc, 0x8d, 0xd3, 0x5f, 0x93, 0x2c, 0x28, 0xe8, - 0xba, 0x22, 0x5f, 0xa0, 0x00, 0x86, 0x38, 0xa2, 0xff, 0xf9, 0xce, 0xc3, - 0xe6, 0x13, 0x75, 0xac, 0x3a, 0xc5, 0x0d, 0x1b, 0x7f, 0x84, 0x65, 0xef, - 0x87, 0xa5, 0x8b, 0xfd, 0x24, 0xdf, 0x11, 0x6c, 0xb1, 0x7f, 0xfe, 0xfb, - 0xeb, 0xed, 0x24, 0x6b, 0x44, 0xcd, 0xb2, 0xc5, 0xf6, 0x38, 0x38, 0xb1, - 0x7c, 0xfc, 0x98, 0x61, 0xfc, 0x69, 0x5a, 0xf6, 0xc3, 0x95, 0x8b, 0xf1, - 0x9d, 0x72, 0x60, 0xb1, 0x7b, 0x4d, 0xba, 0xc5, 0xe3, 0xcf, 0xd6, 0x2f, - 0x4c, 0x3b, 0xd5, 0x8b, 0x00, 0x67, 0xbb, 0x83, 0xc4, 0x3b, 0x78, 0x62, - 0x95, 0x8b, 0xfe, 0x9e, 0x4f, 0xb9, 0x85, 0x05, 0x8b, 0xff, 0x69, 0xc1, - 0xfc, 0x3c, 0xc7, 0x62, 0xc5, 0xe6, 0x21, 0xac, 0x5f, 0xf9, 0x8d, 0x92, - 0xdd, 0xbc, 0xc6, 0xac, 0x5f, 0x60, 0x23, 0xb3, 0xe7, 0xb9, 0xc1, 0xcb, - 0xff, 0xff, 0xd9, 0xb7, 0x24, 0xd6, 0xe7, 0xa1, 0x86, 0x9b, 0x9d, 0x7b, - 0x53, 0x9d, 0x2c, 0x5e, 0xd1, 0x41, 0x62, 0xff, 0xf0, 0xff, 0x83, 0x8f, - 0x72, 0x37, 0x59, 0xdc, 0xb1, 0x7f, 0xc4, 0x0f, 0x38, 0xf0, 0xa0, 0xb1, - 0x69, 0x31, 0x14, 0xd8, 0x3a, 0xca, 0x34, 0xea, 0xa1, 0x3e, 0x3a, 0xc7, - 0x05, 0x09, 0xde, 0x1d, 0x8a, 0x32, 0x3b, 0xdd, 0xff, 0xf1, 0x62, 0xfc, - 0x6b, 0x96, 0x76, 0x58, 0xae, 0xf5, 0x93, 0xfd, 0x1b, 0x09, 0x48, 0xec, - 0x21, 0x28, 0x38, 0x43, 0xe4, 0x38, 0xba, 0x30, 0x79, 0x4d, 0xf1, 0x14, - 0x1c, 0x7f, 0xf0, 0xab, 0x63, 0x70, 0x0f, 0x14, 0x22, 0x3d, 0x2a, 0xdc, - 0x4c, 0x21, 0x91, 0x5f, 0x1b, 0x25, 0xba, 0xc5, 0xc1, 0xf1, 0x62, 0xff, - 0xde, 0xe6, 0x44, 0xc0, 0xe6, 0x6c, 0xb1, 0x50, 0x3f, 0xed, 0x12, 0x10, - 0xcd, 0xfc, 0x26, 0xd4, 0x06, 0x75, 0x8b, 0xf6, 0x05, 0xe0, 0xce, 0xb1, - 0x7e, 0x33, 0xa8, 0x67, 0x96, 0x2f, 0xff, 0xf0, 0x72, 0x01, 0xfe, 0x75, - 0x84, 0xed, 0x0e, 0x67, 0x96, 0x2a, 0x08, 0x8b, 0xe1, 0x5d, 0xdc, 0xd9, - 0x62, 0xfe, 0x29, 0x0b, 0x52, 0x75, 0x8b, 0xff, 0xec, 0xf0, 0x80, 0x76, - 0x87, 0x33, 0xb4, 0x8d, 0x62, 0x86, 0x89, 0x9c, 0x19, 0x22, 0xea, 0xd2, - 0x3a, 0xbd, 0x0b, 0xcb, 0xff, 0xa7, 0x01, 0xc8, 0x3e, 0xb6, 0x10, 0x16, - 0x2f, 0xe0, 0x73, 0x5a, 0xc0, 0x96, 0x2e, 0xfb, 0xc4, 0x7e, 0xc4, 0x8d, - 0x7f, 0xd8, 0x73, 0x8b, 0x90, 0xdb, 0x75, 0x8b, 0xf8, 0x5a, 0x06, 0x7d, - 0x96, 0x2b, 0x74, 0x4c, 0x11, 0x6f, 0x0f, 0x6f, 0xb8, 0x76, 0x75, 0x8a, - 0x81, 0xe9, 0x78, 0xc2, 0xff, 0xf4, 0x0c, 0xd4, 0xf1, 0xe4, 0x80, 0x09, - 0x58, 0xa9, 0x3e, 0xc6, 0x22, 0xbf, 0xee, 0x66, 0x1a, 0x6b, 0x42, 0x56, - 0x2f, 0xef, 0xb3, 0xfa, 0x49, 0x62, 0xff, 0xf8, 0x0f, 0xa3, 0x4a, 0x70, - 0x2c, 0xe0, 0x8e, 0xb1, 0x52, 0x7f, 0xa6, 0x96, 0x5f, 0x87, 0x9c, 0x11, - 0xab, 0x17, 0xcc, 0x7c, 0x1a, 0xc5, 0xf8, 0x6c, 0x4d, 0xd9, 0x62, 0xe6, - 0xe2, 0xc5, 0x61, 0xe0, 0x68, 0xa6, 0xba, 0x4e, 0x1b, 0x50, 0xb7, 0x22, - 0x2f, 0x15, 0x76, 0x62, 0xbf, 0xef, 0xcf, 0x5e, 0x9f, 0xb4, 0x7a, 0xc5, - 0x2c, 0x5f, 0xf6, 0x9c, 0x5b, 0x00, 0x13, 0xdc, 0xb1, 0x7f, 0xda, 0xf7, - 0x9f, 0x5e, 0xcd, 0xd6, 0x2f, 0xff, 0x36, 0xb4, 0x23, 0x7d, 0x91, 0x41, - 0x80, 0xb1, 0x7f, 0xbc, 0xfa, 0x6f, 0xb1, 0xd6, 0x2e, 0x0e, 0x25, 0x8b, - 0x85, 0xa5, 0x8b, 0xfb, 0x35, 0xcf, 0xe6, 0xeb, 0x16, 0xec, 0xb1, 0x46, - 0x27, 0x6f, 0xdf, 0x67, 0xa3, 0x0c, 0xc3, 0xe3, 0x4e, 0xfa, 0x4d, 0xd1, - 0x9f, 0xc6, 0x88, 0x62, 0x38, 0xbe, 0xfa, 0x22, 0x93, 0xac, 0x5b, 0xa5, - 0x8b, 0xb0, 0x25, 0x8b, 0xbd, 0xe7, 0x35, 0x7e, 0x13, 0xa9, 0x4c, 0x47, - 0x21, 0x2e, 0xe9, 0xd7, 0xb6, 0x21, 0x2c, 0x5f, 0xf8, 0xfa, 0x9f, 0xbe, - 0xee, 0x4c, 0xb1, 0x68, 0x49, 0xee, 0x30, 0xf5, 0xe0, 0x82, 0x09, 0x52, - 0x08, 0xc1, 0x7f, 0xc5, 0xbe, 0x6b, 0x76, 0x6d, 0xd5, 0x20, 0x8c, 0x11, - 0x86, 0xca, 0xa2, 0x45, 0xbb, 0x2c, 0x5b, 0x65, 0x8b, 0xe3, 0x58, 0x80, - 0xb1, 0x79, 0x9f, 0xb9, 0x62, 0xa0, 0x7a, 0xae, 0x27, 0xf2, 0x3a, 0x96, - 0x54, 0xe8, 0xcb, 0xb0, 0xbd, 0xe3, 0xa0, 0x3c, 0x7e, 0x8d, 0x1d, 0x30, - 0x25, 0x8d, 0x0a, 0x34, 0x6e, 0xcf, 0x17, 0xff, 0xfd, 0xfc, 0xd4, 0xc3, - 0x9e, 0xfe, 0x76, 0xc1, 0xe8, 0x98, 0x25, 0x8b, 0xdc, 0x03, 0x2c, 0x5f, - 0xdf, 0xdd, 0xf9, 0x83, 0x58, 0xad, 0x8f, 0x33, 0x71, 0xdb, 0xfc, 0xc3, - 0xc7, 0xec, 0xc7, 0x58, 0xbf, 0xff, 0x6f, 0x84, 0x4f, 0x9a, 0x91, 0xfd, - 0x89, 0xd6, 0x2b, 0x48, 0x86, 0x11, 0xa5, 0xff, 0xff, 0xf9, 0xcf, 0x9c, - 0xc2, 0x17, 0xbf, 0x9d, 0x87, 0x3f, 0x79, 0xf7, 0xc4, 0xc7, 0x58, 0xbf, - 0xf0, 0xb7, 0xcd, 0x6d, 0x3f, 0x10, 0xd6, 0x2f, 0x03, 0xb1, 0xd6, 0x2f, - 0xb7, 0xfb, 0xec, 0xb1, 0x46, 0x1e, 0x2b, 0x10, 0x53, 0xa2, 0xa7, 0x90, - 0x87, 0xbf, 0x0e, 0x5c, 0xbc, 0xb1, 0x43, 0x55, 0xf9, 0x90, 0xb5, 0xd4, - 0x2a, 0xbe, 0x47, 0xe8, 0xcb, 0x02, 0x27, 0xbf, 0x3e, 0xa1, 0x1d, 0xe5, - 0x8b, 0xff, 0x9b, 0x9b, 0x4f, 0xf3, 0x70, 0xe3, 0x99, 0x62, 0x8e, 0x7e, - 0xc4, 0x59, 0x7f, 0xff, 0xfb, 0xf8, 0x2d, 0x1b, 0xf7, 0xea, 0x7c, 0x2f, - 0x96, 0x75, 0xe1, 0x37, 0x16, 0x2f, 0xfe, 0xce, 0x83, 0xf3, 0x90, 0xa1, - 0x9c, 0x58, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0x61, 0x6c, 0x4c, 0x39, - 0x2d, 0xa7, 0x43, 0xc2, 0xcf, 0x71, 0xf7, 0xc2, 0x0f, 0x6c, 0xd4, 0xf0, - 0x98, 0xde, 0x63, 0x80, 0x02, 0x01, 0x30, 0xe4, 0xb6, 0x9d, 0x2c, 0x5f, - 0xb8, 0x69, 0xb9, 0x1e, 0xb1, 0x7d, 0xdd, 0x9d, 0x79, 0x62, 0xa4, 0xf5, - 0x58, 0xba, 0xfe, 0x81, 0x66, 0x0b, 0xbf, 0x58, 0xbf, 0xcd, 0xe8, 0x66, - 0xb3, 0x8b, 0x15, 0x2a, 0x8a, 0x71, 0x1b, 0xf1, 0xaf, 0x31, 0x01, 0x19, - 0x5f, 0xf9, 0xf7, 0xfe, 0x47, 0x07, 0xa9, 0x82, 0xc5, 0xf9, 0x80, 0x07, - 0xfa, 0xc5, 0xff, 0xd9, 0xdb, 0xde, 0x67, 0x22, 0x93, 0xac, 0x5d, 0x30, - 0xf9, 0xf6, 0x78, 0xa2, 0xbe, 0x8d, 0xd2, 0x85, 0x85, 0xfb, 0x7f, 0x1a, - 0xfb, 0xac, 0x5f, 0xfe, 0xfc, 0x97, 0x8c, 0xfb, 0x0f, 0xed, 0xa5, 0x8a, - 0x63, 0xf7, 0xe1, 0x65, 0xff, 0x67, 0x3f, 0x8c, 0x59, 0x1e, 0xb1, 0x76, - 0x6c, 0xb1, 0x7f, 0x83, 0x35, 0xfb, 0xa4, 0xa0, 0xb1, 0x7f, 0xc5, 0x8f, - 0xa2, 0x9e, 0xa0, 0xb1, 0x58, 0x8c, 0x2d, 0x1d, 0x7c, 0x61, 0x8e, 0x2f, - 0xff, 0xfb, 0xc2, 0xdb, 0x3e, 0xfe, 0xfe, 0x1f, 0x35, 0x0c, 0xeb, 0xcb, - 0x17, 0xf7, 0xdf, 0xff, 0x93, 0xac, 0x5f, 0xa0, 0x53, 0x9c, 0x58, 0xbc, - 0xc5, 0xb6, 0xe7, 0xab, 0xd1, 0x75, 0x41, 0x1e, 0x7e, 0x85, 0xf5, 0xfc, - 0x58, 0x6f, 0x1b, 0xeb, 0x17, 0xce, 0x6e, 0x0d, 0x62, 0xf1, 0xb8, 0x35, - 0x8b, 0xb0, 0xe6, 0x1e, 0x0b, 0x91, 0xd1, 0xd1, 0x39, 0xe6, 0xfb, 0xff, - 0xc7, 0xc3, 0x5f, 0x45, 0x9e, 0xf6, 0x6c, 0xb1, 0x7f, 0xfa, 0x28, 0x4e, - 0xc4, 0xc6, 0xf0, 0xa6, 0x0b, 0x14, 0xb1, 0x69, 0x01, 0xec, 0x71, 0x32, - 0xff, 0xc1, 0xe7, 0xd8, 0xf1, 0x81, 0x04, 0x12, 0xc5, 0xff, 0xfb, 0x37, - 0xfc, 0x90, 0xc9, 0xf6, 0xc2, 0x73, 0x56, 0x2b, 0x64, 0x4e, 0x41, 0x1e, - 0xff, 0xed, 0x80, 0xfd, 0x73, 0x7c, 0x72, 0xdd, 0x62, 0x98, 0xfb, 0x08, - 0x92, 0xa5, 0x3f, 0x28, 0x42, 0x8d, 0xa3, 0x2f, 0xbf, 0xff, 0x14, 0x83, - 0x9b, 0xfd, 0xf5, 0x11, 0x48, 0x38, 0xb1, 0x7f, 0xe7, 0x8b, 0x0a, 0x42, - 0xd4, 0x9d, 0x62, 0xf1, 0xf3, 0x8b, 0x15, 0x12, 0x2c, 0xf4, 0xae, 0x73, - 0xfb, 0xfa, 0x77, 0x6d, 0xf9, 0x05, 0x8b, 0xff, 0xfb, 0xdc, 0x93, 0x60, - 0xff, 0x62, 0xf4, 0x33, 0x58, 0xb1, 0x7f, 0xe7, 0xe6, 0x0c, 0xc6, 0x04, - 0x76, 0x2c, 0x5c, 0x2e, 0xcb, 0x17, 0xfa, 0x4f, 0xd7, 0xa7, 0x3a, 0x58, - 0xbf, 0xe7, 0xed, 0xf6, 0x86, 0xa4, 0xd5, 0x8b, 0xff, 0xa4, 0x19, 0xe9, - 0xdc, 0xa7, 0xdc, 0x58, 0xaf, 0xa2, 0x00, 0x8f, 0x2b, 0x13, 0x8e, 0xdd, - 0x6f, 0x48, 0x5f, 0x1a, 0xf4, 0x2d, 0x6f, 0xa6, 0x1c, 0x8e, 0x58, 0xbf, - 0xbc, 0x61, 0xe7, 0x3c, 0xb1, 0x7f, 0xfd, 0xd7, 0x9c, 0x2e, 0x7d, 0xfa, - 0x06, 0x98, 0x6b, 0x15, 0x88, 0x83, 0xd1, 0x7d, 0xe1, 0x11, 0xab, 0x17, - 0x31, 0x2c, 0x5b, 0xce, 0x6d, 0x18, 0x7a, 0xa4, 0xfe, 0xc4, 0xad, 0x7f, - 0xfd, 0x11, 0x49, 0xfa, 0x87, 0x84, 0x3c, 0xeb, 0xcb, 0x17, 0xff, 0xfe, - 0xc8, 0x75, 0xed, 0x4e, 0x74, 0x3f, 0xe1, 0xcb, 0x3b, 0x39, 0x2c, 0x5f, - 0xb6, 0xf9, 0x37, 0x4b, 0x17, 0xf6, 0x05, 0x84, 0x20, 0x2c, 0x5f, 0xa1, - 0x9e, 0x90, 0x2c, 0x5f, 0x60, 0x24, 0x0b, 0x15, 0xb1, 0xfc, 0x74, 0x5c, - 0x45, 0x15, 0xa4, 0x69, 0x1e, 0x14, 0x57, 0xee, 0x8d, 0xd6, 0x71, 0x62, - 0xa4, 0xf4, 0xd8, 0xa2, 0xff, 0xe7, 0xe1, 0x4f, 0xb9, 0x9d, 0x9c, 0xd5, - 0x8b, 0xff, 0xff, 0x80, 0x76, 0x87, 0xd9, 0xfc, 0xe3, 0xc1, 0xe7, 0x9c, - 0xef, 0xa5, 0x8a, 0xc5, 0x57, 0xbf, 0x54, 0xe4, 0x72, 0x7e, 0x20, 0x12, - 0x35, 0xfb, 0x58, 0x3e, 0xd2, 0xb1, 0x7f, 0xef, 0xb7, 0x76, 0xff, 0x73, - 0xce, 0xeb, 0x14, 0xb1, 0x4b, 0x15, 0xb9, 0x70, 0x41, 0x97, 0xff, 0x4f, - 0xd9, 0xfc, 0x0c, 0x84, 0x76, 0x2c, 0x5e, 0x29, 0x09, 0x62, 0xec, 0xe6, - 0x23, 0x7f, 0x75, 0xcd, 0x10, 0x1d, 0x1a, 0x9d, 0x35, 0x12, 0x8c, 0x26, - 0xff, 0xf3, 0x68, 0xd0, 0xe4, 0x2c, 0xe7, 0x18, 0xd5, 0x8b, 0xe3, 0xc8, - 0xe5, 0x62, 0xff, 0x0f, 0xed, 0x0c, 0xeb, 0xcb, 0x17, 0xff, 0xec, 0xd3, - 0xc9, 0x7b, 0x37, 0x9f, 0x7d, 0xfb, 0x2c, 0x5b, 0x66, 0x44, 0x59, 0x1a, - 0xd6, 0xc8, 0xd5, 0x14, 0x2b, 0x6b, 0x66, 0xce, 0xf2, 0x04, 0x23, 0x95, - 0x49, 0x91, 0x95, 0x9b, 0x09, 0xed, 0xe1, 0xc7, 0xd4, 0x65, 0xcf, 0x0c, - 0x48, 0xa5, 0x0a, 0xea, 0x1d, 0xa7, 0x31, 0xfc, 0x77, 0xc0, 0x50, 0xe4, - 0x64, 0x9e, 0x95, 0xbd, 0xda, 0x3a, 0x20, 0x8a, 0x03, 0x8c, 0x8e, 0xff, - 0x1b, 0x25, 0x9e, 0xfb, 0xac, 0x5f, 0xfe, 0xe0, 0xe5, 0x8b, 0x6f, 0x3f, - 0x1f, 0xb2, 0xc5, 0xa4, 0xd3, 0xff, 0xf1, 0x9d, 0xff, 0xf6, 0xd3, 0xa3, - 0x07, 0x85, 0xb6, 0x08, 0xbc, 0xb1, 0x7e, 0xe4, 0xed, 0x81, 0x2c, 0x5a, - 0x48, 0xff, 0x38, 0xa5, 0x7f, 0xfc, 0x3f, 0x09, 0xba, 0xf0, 0x30, 0x66, - 0x7d, 0xd6, 0x2f, 0xff, 0x9f, 0xb0, 0xe4, 0xa7, 0xdc, 0xc1, 0x17, 0x96, - 0x2f, 0xff, 0xfe, 0x7f, 0x73, 0x0c, 0xf7, 0x1a, 0x06, 0x6f, 0xf7, 0x1e, - 0x9c, 0x5b, 0x2c, 0x5f, 0xff, 0xec, 0x03, 0x19, 0xef, 0xe0, 0xff, 0x80, - 0xc1, 0xfd, 0xd6, 0x2f, 0xff, 0x37, 0xfe, 0xe3, 0xcf, 0x70, 0x45, 0xe5, - 0x8a, 0x3a, 0x64, 0x44, 0xef, 0xd9, 0x86, 0xff, 0x3f, 0x6c, 0xe7, 0x32, - 0x3d, 0x62, 0xfb, 0xc4, 0x2f, 0x2c, 0x5c, 0x22, 0x58, 0xbd, 0x87, 0xcd, - 0x1b, 0xaf, 0x91, 0xdf, 0xf1, 0xcc, 0xd6, 0x77, 0x7f, 0x0e, 0xb1, 0x52, - 0x98, 0x9c, 0x0c, 0xbe, 0xe4, 0xc6, 0x34, 0x35, 0x67, 0x4c, 0x4d, 0xc5, - 0x3f, 0x4a, 0x85, 0xb8, 0xd7, 0x58, 0xbf, 0x9e, 0x4b, 0xc1, 0x9d, 0x62, - 0xb4, 0x78, 0xde, 0x18, 0xbf, 0xbf, 0x3c, 0x83, 0x81, 0x62, 0xff, 0xb7, - 0xcd, 0x69, 0xa0, 0x2c, 0x58, 0xbf, 0xff, 0xf7, 0x40, 0x92, 0xdd, 0xbc, - 0xdd, 0x00, 0xf3, 0xff, 0x63, 0xf6, 0x58, 0xa1, 0xa3, 0x63, 0x0b, 0x83, - 0x3a, 0xbf, 0x83, 0xd1, 0xca, 0x42, 0x58, 0xaf, 0x1f, 0x00, 0x66, 0x17, - 0xe7, 0x17, 0x7f, 0x9c, 0x58, 0xac, 0x4e, 0xa9, 0xa3, 0x5a, 0xf1, 0x1d, - 0x4b, 0x79, 0x5d, 0x95, 0xa4, 0xdb, 0xc7, 0x96, 0xd2, 0xf7, 0x85, 0x28, - 0xd6, 0xf0, 0x41, 0x04, 0x91, 0x7f, 0xd8, 0x06, 0xd6, 0x76, 0xc1, 0xa4, - 0x46, 0x1a, 0x1b, 0x82, 0x09, 0x22, 0xf0, 0x41, 0x04, 0x91, 0x7f, 0x36, - 0xc3, 0xfc, 0xf1, 0x22, 0x30, 0xd0, 0xd1, 0x23, 0x28, 0x24, 0xd8, 0xe3, - 0xbb, 0xf6, 0xee, 0x30, 0xce, 0x91, 0x18, 0x6c, 0xef, 0x04, 0x10, 0x49, - 0x17, 0xb9, 0x3a, 0x48, 0x8c, 0x34, 0x37, 0xcc, 0x5d, 0x79, 0x62, 0xc0, - 0x74, 0x59, 0x79, 0x7c, 0x23, 0x0b, 0xf8, 0x80, 0x60, 0x59, 0xf5, 0x8b, - 0x77, 0x8b, 0x14, 0xc7, 0x8f, 0x1c, 0x61, 0x7f, 0xce, 0x5b, 0x96, 0x04, - 0xc0, 0x58, 0xbf, 0x84, 0xdb, 0x10, 0xfa, 0x58, 0xbe, 0x98, 0x36, 0xeb, - 0x15, 0xf3, 0xd3, 0x23, 0x0b, 0xff, 0xff, 0x98, 0xde, 0x78, 0xb3, 0x9f, - 0x7f, 0x7f, 0x0f, 0x9e, 0x9f, 0x71, 0x62, 0xfe, 0x16, 0xfc, 0x7d, 0xc4, - 0xb1, 0x7b, 0x22, 0x75, 0x8a, 0x1a, 0x38, 0x48, 0x87, 0xce, 0x41, 0x98, - 0xdf, 0xf0, 0x27, 0xa2, 0xc0, 0x0b, 0x8b, 0x17, 0xc2, 0xda, 0x38, 0x96, - 0x28, 0x07, 0xc3, 0xc3, 0xab, 0xfd, 0xbc, 0x90, 0xc3, 0x8b, 0x8b, 0x17, - 0xe1, 0xbf, 0x69, 0x1a, 0xc5, 0xf6, 0x16, 0x47, 0xac, 0x56, 0x8f, 0x38, - 0xe5, 0x54, 0xe8, 0xc9, 0x62, 0x20, 0xe1, 0x0b, 0x7e, 0x32, 0x7e, 0xc7, - 0x58, 0xbf, 0xf3, 0x40, 0x98, 0xd8, 0x89, 0xe2, 0x58, 0xb8, 0x4c, 0xb1, - 0x5f, 0x3d, 0x7f, 0x20, 0x5f, 0xd1, 0xac, 0xb0, 0x26, 0x02, 0xc5, 0xe0, - 0x82, 0x09, 0x22, 0xf1, 0x30, 0x49, 0x11, 0x86, 0x86, 0xf8, 0x78, 0x43, - 0x58, 0xbf, 0xed, 0xa7, 0xae, 0x39, 0x60, 0x16, 0x2f, 0x9a, 0x0e, 0x05, - 0x8b, 0xf3, 0x9b, 0xec, 0xdd, 0x62, 0xb7, 0x45, 0x46, 0x88, 0xbe, 0x74, - 0x44, 0x57, 0xec, 0xd8, 0xf8, 0x75, 0x8b, 0xfa, 0x76, 0x1f, 0xe7, 0x8b, - 0x17, 0xfa, 0x73, 0x7c, 0xec, 0xe3, 0x58, 0xbf, 0x85, 0xb0, 0x7e, 0x78, - 0x2c, 0x5b, 0x37, 0x44, 0xa9, 0x17, 0xf0, 0xd6, 0xa3, 0x5a, 0xa5, 0xd1, - 0xaa, 0xe4, 0x36, 0x08, 0xf6, 0x3a, 0x17, 0xd7, 0xf7, 0xf3, 0xb6, 0x7b, - 0x8b, 0x14, 0x35, 0x71, 0x9b, 0xc2, 0x00, 0x12, 0x9f, 0xfc, 0xbb, 0x50, - 0x5f, 0x04, 0x19, 0x26, 0xa3, 0x6d, 0xfc, 0x6c, 0xe5, 0x2f, 0x02, 0xff, - 0x7a, 0x19, 0xff, 0xb4, 0x16, 0x2d, 0xa5, 0x8b, 0x9c, 0x6b, 0x14, 0x69, - 0xa9, 0xf8, 0x95, 0xfa, 0x2d, 0x69, 0xf6, 0x58, 0xbe, 0x2f, 0xe1, 0x2c, - 0x5b, 0x4b, 0x15, 0x86, 0xcd, 0xc8, 0x6f, 0x9d, 0x88, 0x6b, 0x17, 0x08, - 0x0b, 0x17, 0xef, 0xe3, 0xea, 0x0b, 0x14, 0x33, 0xe1, 0x01, 0x0f, 0x86, - 0x2f, 0xd3, 0x91, 0x3e, 0x96, 0x2b, 0x63, 0xd7, 0x22, 0xfb, 0x79, 0x62, - 0xee, 0xf3, 0xbc, 0x58, 0xad, 0x8d, 0xa0, 0x84, 0xaa, 0x59, 0x41, 0x99, - 0x3f, 0x02, 0x6a, 0xfe, 0xeb, 0xae, 0x45, 0xf5, 0xe6, 0x86, 0xb9, 0x2b, - 0x5f, 0xff, 0x37, 0x69, 0xfb, 0x7f, 0x79, 0xf7, 0x26, 0x0b, 0x17, 0xd1, - 0xdf, 0xcd, 0xd6, 0x2f, 0x80, 0xe5, 0xe5, 0x8a, 0xd8, 0xf2, 0x78, 0x4f, - 0x77, 0x7d, 0x7b, 0xc5, 0x8b, 0xc2, 0x61, 0xac, 0x5f, 0x7a, 0x42, 0xe2, - 0xc5, 0xee, 0x4f, 0x96, 0x2e, 0x00, 0x4b, 0x17, 0xee, 0x08, 0x83, 0x3a, - 0xc5, 0xb9, 0x1b, 0x22, 0x12, 0x22, 0x46, 0x1d, 0xf0, 0xcd, 0x41, 0x3c, - 0xcc, 0x84, 0xdf, 0x44, 0x7f, 0x25, 0xf4, 0x28, 0x6f, 0xff, 0x4e, 0xa5, - 0xa2, 0x3b, 0x0f, 0xf2, 0x4b, 0x17, 0xfe, 0xfb, 0x43, 0x34, 0x03, 0xbf, - 0x16, 0x28, 0xd4, 0x44, 0x79, 0x26, 0xfd, 0x81, 0x66, 0xb6, 0x58, 0xbf, - 0x6f, 0x3f, 0x93, 0xac, 0x5c, 0xde, 0x58, 0xbe, 0x8f, 0x62, 0x06, 0xc7, - 0xd5, 0x85, 0x44, 0x53, 0x7f, 0xb0, 0xd3, 0x5a, 0x10, 0x1a, 0xc5, 0xfc, - 0xcc, 0x3f, 0x09, 0x96, 0x2f, 0x86, 0xc4, 0x0c, 0x3e, 0x32, 0x36, 0xa9, - 0x4d, 0xbb, 0x21, 0x1c, 0x28, 0x55, 0x5f, 0xf0, 0xce, 0xfa, 0xe3, 0x10, - 0x16, 0x2d, 0xde, 0x2c, 0x5f, 0xf7, 0xe6, 0x10, 0x7e, 0x60, 0xd6, 0x2c, - 0x0e, 0xf8, 0x7a, 0x1e, 0x17, 0xbf, 0xc7, 0x6e, 0xa7, 0x51, 0x32, 0xc5, - 0xfe, 0xd4, 0xf6, 0xf1, 0x30, 0x16, 0x2d, 0xe9, 0x3e, 0xac, 0x35, 0xa9, - 0x45, 0xf3, 0xc2, 0x62, 0xff, 0xe9, 0x3e, 0x3c, 0x4c, 0xd0, 0xde, 0x0b, - 0x15, 0x03, 0xeb, 0x22, 0x6b, 0xff, 0xb4, 0x2d, 0x8c, 0xcf, 0xcf, 0x3e, - 0xeb, 0x17, 0xdd, 0xc2, 0x88, 0xeb, 0x14, 0xea, 0x90, 0xa2, 0x8e, 0xcb, - 0x44, 0x3f, 0x47, 0xbf, 0xff, 0x7e, 0x79, 0xe2, 0x98, 0x8a, 0x47, 0x9d, - 0x79, 0x62, 0xf8, 0x7f, 0x9d, 0x96, 0x2f, 0xda, 0x18, 0xc5, 0xb2, 0xc5, - 0xe9, 0x28, 0x0d, 0x14, 0xa4, 0xac, 0x19, 0x25, 0xfb, 0x35, 0x1c, 0x71, - 0xac, 0x5f, 0xfb, 0xaf, 0x1a, 0x6b, 0x7c, 0x85, 0xe5, 0x8a, 0x19, 0xf7, - 0xe1, 0x65, 0xfe, 0x33, 0x52, 0x77, 0xfc, 0xac, 0x5e, 0xfb, 0xc4, 0x91, - 0x5a, 0x3f, 0x32, 0x21, 0xe1, 0xa5, 0xff, 0x37, 0x5e, 0xc8, 0x85, 0xa3, - 0x56, 0x2d, 0xbb, 0x9f, 0x58, 0x8b, 0xaf, 0xf1, 0x67, 0x50, 0xe3, 0x9a, - 0xb1, 0x79, 0xf7, 0x95, 0x8b, 0xf3, 0xeb, 0x61, 0x71, 0x62, 0xb4, 0x78, - 0xe7, 0x1d, 0xb8, 0x3d, 0x2c, 0x5e, 0xd0, 0xb6, 0x58, 0xbc, 0xda, 0x35, - 0x62, 0xc7, 0x58, 0xac, 0x44, 0x51, 0xa4, 0x5a, 0x19, 0x61, 0xfe, 0xc3, - 0xd7, 0xfe, 0x1f, 0xe7, 0x99, 0xad, 0xa6, 0x0b, 0x17, 0x8d, 0x16, 0xeb, - 0x16, 0x35, 0x62, 0xff, 0xec, 0xdf, 0xf3, 0xfc, 0xd6, 0xa4, 0xd5, 0x8b, - 0x81, 0xc9, 0x3d, 0x9d, 0x09, 0xd1, 0xa8, 0xa6, 0x77, 0x9a, 0x31, 0x52, - 0xd6, 0xd1, 0x83, 0x44, 0x96, 0x50, 0xe6, 0xbf, 0xd9, 0xb8, 0x27, 0x3a, - 0x82, 0xc5, 0xb4, 0xb1, 0x58, 0x78, 0xe7, 0x35, 0xbf, 0xf0, 0xb9, 0x85, - 0x3f, 0x18, 0x67, 0x58, 0xbf, 0xda, 0x90, 0xb0, 0x9c, 0xd5, 0x8b, 0x9c, - 0x6b, 0x17, 0xfb, 0xda, 0x17, 0x3e, 0xd0, 0xd1, 0xe5, 0x80, 0xd2, 0xff, - 0x70, 0x40, 0x6f, 0x41, 0x96, 0x2e, 0x3f, 0x64, 0x8b, 0x49, 0x87, 0x9c, - 0xc6, 0x97, 0xc3, 0x92, 0xdd, 0x62, 0xec, 0x8d, 0x96, 0x2f, 0xff, 0xec, - 0x7e, 0xa1, 0x27, 0x9c, 0xf7, 0x30, 0x45, 0xe5, 0x8a, 0xd1, 0xfb, 0x76, - 0x1c, 0xbf, 0xe7, 0x34, 0x32, 0x9f, 0xbe, 0xcb, 0x17, 0xff, 0x7d, 0xd8, - 0x00, 0x90, 0x4f, 0xf8, 0xb1, 0x7f, 0x7f, 0x0e, 0x76, 0x82, 0xc5, 0xe0, - 0x82, 0x09, 0x22, 0xff, 0x17, 0xbe, 0xf2, 0x5b, 0x24, 0x46, 0x1a, 0x1b, - 0xe9, 0xd3, 0x7d, 0x62, 0xa0, 0x8b, 0x7c, 0x4f, 0xf2, 0x35, 0xce, 0x05, - 0x8b, 0xfa, 0x46, 0x3c, 0xea, 0x0b, 0x17, 0xf3, 0xea, 0x01, 0xc8, 0x16, - 0x2e, 0x90, 0x62, 0x29, 0x3e, 0x5e, 0x42, 0xf1, 0xc5, 0xf5, 0x8a, 0x91, - 0xf7, 0x24, 0xf1, 0xd8, 0x71, 0xcf, 0xdf, 0xda, 0x80, 0x70, 0x7d, 0x96, - 0x2f, 0x30, 0x38, 0xb1, 0x76, 0x19, 0x87, 0x9d, 0xe3, 0x1a, 0xdd, 0x5e, - 0x43, 0x93, 0x9e, 0x57, 0x07, 0x68, 0x4a, 0x5f, 0xf3, 0x00, 0xb2, 0x28, - 0x4f, 0x4b, 0x17, 0xfe, 0x9e, 0xbf, 0x9d, 0x03, 0x3d, 0xc5, 0x8a, 0x95, - 0xd2, 0x9c, 0x9c, 0x61, 0x74, 0xd1, 0x1d, 0x5f, 0xbe, 0xe3, 0x68, 0x2c, - 0x5f, 0xb3, 0x5a, 0x78, 0x96, 0x2e, 0x62, 0xdc, 0xf4, 0x48, 0xa2, 0xff, - 0x9c, 0x11, 0xb7, 0x33, 0x4c, 0x05, 0x8b, 0xd8, 0x5b, 0xac, 0x5f, 0xee, - 0x37, 0xfa, 0x86, 0x79, 0x62, 0xfc, 0x1e, 0x88, 0x50, 0x58, 0xa8, 0x1e, - 0xf9, 0x1a, 0xdf, 0xb8, 0x77, 0xd7, 0x16, 0x2b, 0x64, 0xcc, 0x34, 0x58, - 0x73, 0xe6, 0x7c, 0x01, 0x0d, 0xff, 0xfd, 0x0f, 0xb4, 0x37, 0xfb, 0xfa, - 0x19, 0xff, 0xb4, 0x16, 0x2f, 0xd2, 0x09, 0xff, 0x16, 0x2b, 0x11, 0x0a, - 0x05, 0xdb, 0xff, 0x83, 0x29, 0x71, 0xff, 0x21, 0xf7, 0x58, 0xb8, 0x3c, - 0x58, 0xbf, 0xe9, 0xd0, 0x3d, 0xf6, 0x1b, 0xac, 0x56, 0x1e, 0x88, 0x63, - 0x17, 0xfd, 0x08, 0xa0, 0xde, 0xe3, 0xca, 0xc5, 0xff, 0xfb, 0xee, 0x52, - 0x7c, 0x26, 0xeb, 0x86, 0x9a, 0xcb, 0x17, 0xff, 0xbc, 0x29, 0x79, 0xeb, - 0x7f, 0xe7, 0x5c, 0x58, 0xac, 0x45, 0x1b, 0x2b, 0x5f, 0xb5, 0xa7, 0xf7, - 0x16, 0x28, 0xc4, 0xf7, 0x87, 0x09, 0x5e, 0x88, 0x81, 0x0d, 0xd0, 0xc8, - 0x6f, 0xff, 0x81, 0x1d, 0x93, 0xcf, 0xcf, 0x5e, 0x34, 0x5a, 0x58, 0xbf, - 0xfa, 0x28, 0x08, 0xbd, 0x0c, 0xd6, 0x71, 0x62, 0xff, 0xfc, 0x5b, 0xfd, - 0xe2, 0x84, 0x97, 0xb5, 0xa9, 0x82, 0xc7, 0x0f, 0x1a, 0xff, 0xfe, 0x7e, - 0x69, 0xdb, 0x52, 0xfe, 0xfe, 0x73, 0x98, 0xb1, 0x7f, 0xed, 0x4c, 0x1f, - 0xc0, 0xc8, 0xb8, 0xb1, 0x7f, 0xb2, 0x60, 0xfe, 0x29, 0x58, 0xb0, 0x31, - 0x33, 0x23, 0xb4, 0x71, 0x66, 0x39, 0x02, 0xfe, 0x68, 0x34, 0x1f, 0xeb, - 0x15, 0x2a, 0xa6, 0x71, 0x61, 0xa3, 0xce, 0x12, 0x35, 0xff, 0xfc, 0xc0, - 0x2c, 0x39, 0x37, 0xb8, 0x1e, 0x9e, 0x46, 0xb1, 0x74, 0x38, 0xb1, 0x68, - 0x0c, 0xfc, 0x9d, 0x6a, 0xff, 0xf1, 0x36, 0x8d, 0xee, 0xf6, 0x85, 0xd4, - 0x38, 0xb1, 0x52, 0x7f, 0x0e, 0x4f, 0x7f, 0xe6, 0x1f, 0xe7, 0xa6, 0xdf, - 0x90, 0x58, 0xa9, 0x6e, 0x38, 0xe1, 0x29, 0x2f, 0x25, 0x3d, 0x9b, 0x0e, - 0xae, 0xa3, 0x8d, 0x79, 0x50, 0x51, 0x42, 0x4f, 0x44, 0x3f, 0x9d, 0xb4, - 0x68, 0xf1, 0x81, 0x0d, 0x02, 0x9c, 0x99, 0xe4, 0x65, 0x82, 0x20, 0xbf, - 0xff, 0xbc, 0xe7, 0xc2, 0xf7, 0x24, 0xde, 0x08, 0x7f, 0x75, 0x8b, 0xb3, - 0xa5, 0x8b, 0xf3, 0x78, 0x2c, 0xfa, 0xc5, 0xe1, 0xff, 0x16, 0x2f, 0xb1, - 0xfe, 0x6a, 0xc5, 0x7c, 0xfa, 0x58, 0xa4, 0x03, 0xb7, 0xf4, 0xed, 0xa1, - 0x48, 0x16, 0x2f, 0xff, 0xb3, 0x79, 0x26, 0xf7, 0x06, 0x26, 0xd4, 0x16, - 0x2b, 0x64, 0xcb, 0xba, 0x84, 0x0c, 0x45, 0xc7, 0x2f, 0xbe, 0xe7, 0xf3, - 0x8b, 0x17, 0xcf, 0xe9, 0xf2, 0xc5, 0x39, 0xe2, 0xe8, 0x8e, 0xf9, 0xc1, - 0x83, 0x58, 0xbf, 0x16, 0xf1, 0xbf, 0x7c, 0x8d, 0x16, 0x2f, 0xfa, 0x3b, - 0x37, 0xfb, 0x9e, 0x77, 0x58, 0xa9, 0x3f, 0x86, 0x3a, 0xb4, 0xac, 0x5e, - 0xf3, 0xec, 0xb1, 0x5b, 0x1a, 0xfe, 0x84, 0x6f, 0xd2, 0x7d, 0x4f, 0x65, - 0x8b, 0xff, 0xde, 0x70, 0xb8, 0x53, 0xee, 0x6b, 0x52, 0xb1, 0x74, 0x92, - 0xc5, 0xec, 0x3c, 0x72, 0xc5, 0xf6, 0x10, 0x7e, 0x58, 0xa8, 0x1e, 0xc8, - 0xc5, 0xb4, 0x41, 0x78, 0x72, 0x6a, 0xc5, 0xff, 0xd3, 0xbf, 0x8a, 0x42, - 0xcf, 0x73, 0x8b, 0x17, 0xfc, 0xd2, 0x1b, 0xff, 0xef, 0x12, 0xc5, 0xff, - 0x73, 0x38, 0xe7, 0x62, 0x02, 0xc5, 0xfc, 0x53, 0x0f, 0xf0, 0x0b, 0x17, - 0xfe, 0x6f, 0xea, 0x7c, 0xfb, 0xb8, 0xd6, 0x2f, 0xff, 0x88, 0x5e, 0xe6, - 0x6f, 0xd7, 0x99, 0x8f, 0xc5, 0x8b, 0xfd, 0xfc, 0x7d, 0x40, 0x33, 0xac, - 0x56, 0x22, 0x1f, 0xca, 0x57, 0x60, 0x16, 0x2a, 0x53, 0x65, 0x19, 0xc7, - 0xcb, 0xb9, 0x0c, 0x6f, 0x11, 0x53, 0xaa, 0x52, 0xd0, 0xf7, 0xd1, 0x81, - 0x1c, 0xfd, 0xff, 0x9f, 0xc0, 0x61, 0x89, 0xb5, 0x05, 0x8b, 0xfc, 0x7c, - 0x8a, 0x4f, 0x81, 0x2c, 0x5f, 0x1e, 0x5f, 0x8b, 0x15, 0x87, 0xaf, 0xc3, - 0x5b, 0xff, 0xed, 0x42, 0x4b, 0x39, 0x38, 0x43, 0xfc, 0xac, 0x5f, 0xe7, - 0xd0, 0x7e, 0xf3, 0xec, 0xb1, 0x7d, 0xa9, 0xce, 0x96, 0x2a, 0x07, 0xb3, - 0xe3, 0x6b, 0xe9, 0xf3, 0xf9, 0x62, 0xff, 0xff, 0xcc, 0x79, 0xd6, 0xe3, - 0xfc, 0xf0, 0x4c, 0xf0, 0xe7, 0xda, 0x0b, 0x17, 0xe0, 0x09, 0x8b, 0x75, - 0x8b, 0xfa, 0x7f, 0x90, 0xc3, 0xac, 0x5f, 0x72, 0x60, 0x66, 0x1e, 0xb7, - 0x8a, 0x6b, 0x13, 0xe6, 0x78, 0x53, 0x7c, 0x88, 0x88, 0xb9, 0x0c, 0x3b, - 0xfb, 0x1e, 0x2f, 0x88, 0xeb, 0x17, 0xe0, 0x9b, 0xf2, 0x75, 0x8b, 0xdb, - 0xcf, 0x16, 0x2f, 0xfe, 0x0e, 0x19, 0xf6, 0xfb, 0xeb, 0x52, 0xb1, 0x7f, - 0xee, 0x37, 0xa1, 0x9a, 0xd3, 0x41, 0x62, 0xff, 0xbe, 0xcf, 0xe9, 0xf3, - 0xc1, 0x62, 0xa4, 0xfd, 0xf7, 0x3f, 0xa9, 0x4c, 0x97, 0x0a, 0x40, 0x3c, - 0x28, 0x5e, 0x5e, 0x86, 0x0d, 0x62, 0xfa, 0x0c, 0x40, 0x58, 0xbf, 0xfc, - 0xfe, 0x16, 0x9b, 0x90, 0x7e, 0x4e, 0xcb, 0x15, 0x87, 0xda, 0xc4, 0x55, - 0x88, 0xaa, 0xfc, 0x22, 0xaf, 0x73, 0xb6, 0x2c, 0x5d, 0x3a, 0x58, 0xaf, - 0x1b, 0x68, 0xe1, 0xfb, 0xfb, 0xb4, 0x96, 0xf1, 0xd8, 0xb1, 0x7f, 0x66, - 0xdc, 0x8f, 0x7d, 0xd6, 0x2a, 0x51, 0x14, 0xe4, 0x84, 0x67, 0x7e, 0x16, - 0x8d, 0xfb, 0xac, 0x5e, 0x01, 0xdd, 0x62, 0x8c, 0x66, 0xaf, 0x4c, 0x71, - 0x5b, 0x42, 0x2e, 0x04, 0x23, 0x84, 0xd6, 0x27, 0xee, 0x47, 0xd1, 0x53, - 0xc2, 0x93, 0x52, 0xa0, 0x4e, 0x89, 0xf8, 0x4b, 0x34, 0xa0, 0x70, 0x29, - 0x14, 0x6a, 0x9c, 0x87, 0x5f, 0xa1, 0xcf, 0x1c, 0x5a, 0x19, 0x55, 0x82, - 0x58, 0xbf, 0xe2, 0x13, 0x1a, 0x03, 0xcc, 0x16, 0x2b, 0x47, 0x9a, 0x01, - 0x3b, 0x84, 0x05, 0x8b, 0xfc, 0x4c, 0x16, 0x13, 0x1a, 0xb1, 0x7f, 0xf6, - 0x7b, 0x81, 0xf0, 0xe5, 0x3a, 0x95, 0x8b, 0xff, 0xdc, 0xcd, 0xbf, 0x27, - 0x0c, 0x64, 0xfb, 0x2c, 0x58, 0xb6, 0x46, 0xe8, 0xc6, 0x0e, 0x67, 0xe4, - 0x5b, 0xff, 0x37, 0xb7, 0xfb, 0xf5, 0xc9, 0x09, 0x62, 0xdd, 0xb1, 0x10, - 0xbf, 0x43, 0xbe, 0x1e, 0x9a, 0x25, 0x8b, 0xfe, 0x9f, 0x7d, 0xfb, 0x67, - 0x5e, 0x58, 0xbf, 0x3f, 0x70, 0xf0, 0xeb, 0x15, 0xb9, 0xf3, 0xfc, 0xf2, - 0xf8, 0x72, 0x5e, 0x58, 0xbf, 0x3b, 0x76, 0x0c, 0xeb, 0x17, 0xff, 0xb0, - 0xe7, 0x92, 0xde, 0x7d, 0xcf, 0xba, 0xc5, 0xff, 0xa7, 0x44, 0xdb, 0x4e, - 0xa6, 0x0b, 0x15, 0x29, 0xc1, 0xe4, 0x22, 0xdc, 0x8c, 0x04, 0x44, 0x56, - 0x12, 0x55, 0x3a, 0xa0, 0x7f, 0xc7, 0x5b, 0x7f, 0xff, 0xbe, 0xe1, 0x67, - 0x73, 0x9d, 0xbd, 0xc1, 0x43, 0x3a, 0xf2, 0xc5, 0xff, 0xf7, 0xe7, 0x9d, - 0x6e, 0xfd, 0x67, 0x33, 0xaf, 0x2c, 0x5f, 0xf9, 0xc0, 0x1f, 0xe4, 0xec, - 0xde, 0x58, 0xa1, 0xa2, 0x4f, 0x4a, 0x97, 0xff, 0xf6, 0xc3, 0xfc, 0xf3, - 0x3a, 0xe4, 0xeb, 0xdc, 0xcd, 0x96, 0x28, 0x69, 0xbd, 0xea, 0x1f, 0x24, - 0x47, 0x74, 0xba, 0xc5, 0x4a, 0xeb, 0xde, 0x4b, 0x8b, 0x68, 0xe9, 0x40, - 0x6b, 0x7f, 0xd1, 0x6f, 0xf7, 0x3c, 0xe8, 0xd5, 0x8b, 0xf3, 0xf4, 0x06, - 0xe2, 0xc5, 0xef, 0x4c, 0x4b, 0x17, 0x9f, 0x51, 0x49, 0xe3, 0xe1, 0x4d, - 0xfd, 0x3f, 0x9f, 0x4f, 0xd6, 0x2f, 0xbb, 0x9c, 0xb7, 0x58, 0xac, 0x3d, - 0x3e, 0xe2, 0xdb, 0xf6, 0xc6, 0x0a, 0x62, 0x58, 0xb9, 0xa2, 0x58, 0xb4, - 0x16, 0x2f, 0xd0, 0xf3, 0xeb, 0x75, 0x8b, 0xc1, 0x94, 0x4b, 0x14, 0x61, - 0xf9, 0xc0, 0x63, 0xa1, 0x20, 0x15, 0x56, 0x2a, 0x0a, 0xde, 0x10, 0x9a, - 0x84, 0x2b, 0x12, 0x72, 0x13, 0xf4, 0x64, 0x64, 0x4c, 0xd1, 0xb9, 0xa4, - 0x68, 0x3d, 0x1a, 0x87, 0xa6, 0x95, 0xcf, 0xb5, 0x21, 0xaa, 0x14, 0xf1, - 0xe1, 0xd3, 0x68, 0x32, 0xda, 0x03, 0x1b, 0x1f, 0xa6, 0xf2, 0xfa, 0xba, - 0x87, 0x0b, 0xd2, 0x31, 0x23, 0xe3, 0xac, 0x8a, 0x96, 0xff, 0xaa, 0x45, - 0xc9, 0xe9, 0x84, 0x1f, 0xad, 0x6c, 0xda, 0x95, 0x38, 0x0a, 0x61, 0xa1, - 0x5a, 0x04, 0x9e, 0x53, 0x11, 0x7d, 0x5d, 0x97, 0x0a, 0x9c, 0xcc, 0x14, - 0xf8, 0x38, 0x72, 0x95, 0x2e, 0x93, 0xac, 0x5f, 0xf1, 0xd8, 0x20, 0xe0, - 0xe0, 0xe2, 0xc5, 0xef, 0xe7, 0x16, 0x2e, 0x0f, 0x75, 0x8b, 0xa4, 0xeb, - 0x16, 0xf0, 0x0d, 0x8f, 0x86, 0xaf, 0xf3, 0x9b, 0xee, 0xb7, 0x7f, 0xac, - 0x57, 0x47, 0xbc, 0x44, 0xf4, 0x34, 0x67, 0x64, 0x2b, 0x2f, 0x77, 0x3f, - 0x65, 0x8b, 0xfd, 0xf7, 0xf7, 0xde, 0x40, 0xb1, 0x73, 0x69, 0x62, 0xe7, - 0xfa, 0xc5, 0xf6, 0x61, 0x79, 0x62, 0xe9, 0x25, 0x8a, 0x81, 0xf2, 0xfc, - 0x5f, 0x82, 0xfd, 0x88, 0x6f, 0xff, 0xb0, 0xa3, 0x3c, 0x6b, 0xf5, 0xcf, - 0xe0, 0x19, 0x62, 0xfe, 0x32, 0x28, 0x4e, 0xb6, 0x58, 0xbf, 0xfe, 0x1c, - 0xb6, 0xbe, 0x13, 0x0e, 0x39, 0xb6, 0x8e, 0x58, 0xa8, 0x26, 0x38, 0x33, - 0xe8, 0x95, 0x3c, 0x65, 0x79, 0x98, 0x25, 0x8b, 0xf6, 0xf9, 0xef, 0xba, - 0xc5, 0x0c, 0xf1, 0x88, 0x76, 0xff, 0xf6, 0xa2, 0x93, 0x98, 0x7c, 0xf7, - 0x1f, 0x8b, 0x14, 0xc7, 0xdc, 0x22, 0x1b, 0xfd, 0x0f, 0x3f, 0xbd, 0x80, - 0x58, 0xbd, 0xf7, 0xef, 0xd6, 0x2f, 0xe6, 0x86, 0x0d, 0xbe, 0xb1, 0x5b, - 0x9e, 0x79, 0xc8, 0xaf, 0xba, 0x86, 0x79, 0x62, 0xfd, 0x03, 0x30, 0x3c, - 0x58, 0xbf, 0xf4, 0x8b, 0xbf, 0x91, 0xc9, 0xca, 0x56, 0x28, 0xc4, 0x48, - 0x49, 0x20, 0xca, 0xaf, 0x6e, 0xdb, 0xac, 0x5e, 0x7d, 0x4a, 0xc5, 0xfa, - 0x01, 0xf2, 0x71, 0x62, 0xb0, 0xf1, 0x58, 0x72, 0xff, 0xfc, 0x72, 0xce, - 0xbc, 0x16, 0x3f, 0x6d, 0x33, 0x41, 0x62, 0xdc, 0xf9, 0xfc, 0x31, 0x05, - 0xff, 0xde, 0x6d, 0x98, 0xb5, 0x3b, 0xe6, 0x96, 0x2f, 0xbd, 0xc6, 0x3a, - 0xc5, 0x18, 0x7d, 0x01, 0x22, 0xdf, 0xff, 0xf6, 0x7d, 0x83, 0xe6, 0x1a, - 0xc4, 0x09, 0x29, 0x8b, 0xf2, 0xb1, 0x69, 0x58, 0xbf, 0xff, 0x4e, 0xbf, - 0x27, 0xee, 0x14, 0x94, 0xc5, 0xf9, 0x58, 0xbf, 0x3e, 0xa2, 0x9f, 0xe9, - 0x19, 0xe0, 0x66, 0x21, 0x1b, 0x85, 0xa5, 0x8a, 0xd9, 0x90, 0x87, 0x08, - 0xc2, 0xb0, 0x9f, 0x72, 0x2e, 0xa3, 0xb4, 0x3c, 0x3c, 0xd8, 0x84, 0x10, - 0x83, 0x28, 0x59, 0xf0, 0xc3, 0xd0, 0xdc, 0x14, 0x23, 0xc3, 0x87, 0x9f, - 0x72, 0x65, 0xfa, 0x2f, 0xce, 0xd8, 0xb1, 0x6f, 0xac, 0x5d, 0x87, 0x58, - 0xa8, 0x1e, 0x98, 0xca, 0xa3, 0x84, 0xad, 0xdf, 0x6b, 0x17, 0xf7, 0xbe, - 0xd0, 0xf6, 0xcb, 0x17, 0x47, 0x12, 0xc5, 0xf4, 0x45, 0x27, 0x58, 0xbd, - 0xf6, 0x81, 0x86, 0xf7, 0xc3, 0x54, 0x48, 0xa0, 0xf3, 0x6d, 0xe7, 0x1e, - 0x2c, 0x5f, 0xc6, 0xe0, 0x88, 0x5b, 0xac, 0x5f, 0x09, 0xb5, 0x05, 0x8b, - 0xff, 0xed, 0x00, 0xf3, 0x1d, 0x86, 0x73, 0xcc, 0xc4, 0xb1, 0x7c, 0x2d, - 0x37, 0x16, 0x28, 0x68, 0x99, 0xc2, 0x3e, 0x29, 0xdf, 0xb7, 0xfc, 0xc7, - 0x8d, 0x62, 0xfb, 0x38, 0xfd, 0x96, 0x2e, 0xd9, 0x96, 0x2f, 0x31, 0x00, - 0xc4, 0x4c, 0x31, 0x79, 0x16, 0xf0, 0x92, 0xf1, 0x6d, 0x2b, 0x17, 0x61, - 0x2c, 0x53, 0x9b, 0x3e, 0xc3, 0xb7, 0xfd, 0xf6, 0x86, 0x0d, 0xa0, 0xeb, - 0x17, 0xf8, 0xcf, 0xb6, 0xf2, 0x43, 0x58, 0xbe, 0xcd, 0x83, 0x82, 0xc5, - 0xb9, 0x27, 0xb4, 0x46, 0xb7, 0x67, 0x16, 0x2e, 0xd4, 0xac, 0x57, 0xcd, - 0x77, 0x85, 0xef, 0xf8, 0xa4, 0xee, 0x58, 0x79, 0x58, 0xba, 0x77, 0x58, - 0xbf, 0xcf, 0xe6, 0x21, 0xfe, 0x56, 0x2f, 0xfb, 0x4f, 0x17, 0x30, 0xd7, - 0xd2, 0xc5, 0x40, 0xfb, 0x74, 0x65, 0x7b, 0xef, 0x05, 0x8b, 0x9e, 0x56, - 0x2f, 0xf9, 0xf6, 0xcf, 0xbe, 0xbe, 0xcb, 0x16, 0x1e, 0x26, 0xd5, 0x11, - 0x08, 0x0d, 0xb9, 0x08, 0x5f, 0x11, 0x04, 0x3b, 0xdc, 0x2d, 0x7f, 0xff, - 0x9a, 0x01, 0xeb, 0x3d, 0x9a, 0x01, 0xda, 0x1e, 0x6f, 0xac, 0x53, 0xa3, - 0x58, 0x9d, 0x28, 0xd5, 0xd4, 0x98, 0xf8, 0xd8, 0x74, 0xff, 0xf2, 0x20, - 0x42, 0x48, 0xa5, 0x4a, 0x5f, 0x87, 0x31, 0x7b, 0x16, 0x2f, 0x7a, 0x4e, - 0xb1, 0x43, 0x3c, 0x62, 0x29, 0xbf, 0xf8, 0xbd, 0xcf, 0xb4, 0x0c, 0xce, - 0xbc, 0xb1, 0x5d, 0xf1, 0x7d, 0x76, 0x61, 0x73, 0x02, 0x2c, 0x9d, 0x65, - 0x78, 0x5a, 0x88, 0x86, 0xff, 0xb0, 0xd2, 0xcf, 0x71, 0xf6, 0x58, 0xbf, - 0xd1, 0xf1, 0x72, 0x7e, 0xd1, 0xeb, 0x17, 0xfb, 0x37, 0x63, 0xe3, 0x8d, - 0x62, 0xff, 0x67, 0xfa, 0xdd, 0xf3, 0x4b, 0x17, 0xf6, 0x6a, 0x0e, 0x58, - 0xb1, 0x4e, 0x7c, 0x22, 0x35, 0xba, 0x7a, 0xd9, 0x16, 0xbe, 0x84, 0xa5, - 0x69, 0x35, 0xf6, 0x3a, 0x28, 0x78, 0x5f, 0xc1, 0xff, 0xfd, 0x34, 0x7a, - 0xc5, 0xff, 0x07, 0x31, 0x07, 0x3a, 0x68, 0x96, 0x2f, 0xdc, 0xcc, 0xf6, - 0x2c, 0x5c, 0xfe, 0x58, 0xbe, 0x66, 0x87, 0x16, 0x2c, 0x6c, 0x0d, 0xcf, - 0x85, 0xef, 0x49, 0x6c, 0xb1, 0x7c, 0xff, 0x73, 0xac, 0x53, 0x9b, 0xf8, - 0x87, 0x6b, 0xa4, 0x74, 0x69, 0x83, 0xec, 0xf7, 0xb9, 0xe7, 0x58, 0xba, - 0x21, 0x2c, 0x5b, 0x79, 0x36, 0xc4, 0x3b, 0x7f, 0xf6, 0xd3, 0xd7, 0x9c, - 0x28, 0xb3, 0x37, 0x58, 0xa9, 0x3e, 0xf1, 0x13, 0x58, 0x0b, 0x17, 0xfd, - 0x3e, 0xfb, 0x01, 0xba, 0xe2, 0xc5, 0x0c, 0xfb, 0x7a, 0x21, 0x21, 0x2b, - 0xfd, 0x8e, 0x71, 0x1d, 0xf8, 0xb1, 0x7f, 0xfb, 0x82, 0x6d, 0x0b, 0x69, - 0x34, 0x32, 0xf2, 0xc5, 0xfc, 0x28, 0x6e, 0xda, 0xd9, 0x62, 0xe6, 0x09, - 0x62, 0xa4, 0xf2, 0x58, 0xc6, 0x86, 0x8b, 0x7e, 0xd0, 0x97, 0xbf, 0xff, - 0x86, 0x1b, 0x68, 0xdc, 0x72, 0x93, 0xe7, 0x18, 0x96, 0x2d, 0x12, 0xc5, - 0x99, 0x62, 0x8c, 0x34, 0x91, 0xa0, 0x9d, 0xa7, 0x64, 0x52, 0x84, 0xfd, - 0x7f, 0xfc, 0x26, 0x1b, 0xc9, 0xcb, 0x36, 0xd8, 0x44, 0xb1, 0x5a, 0x3f, - 0xaf, 0x15, 0x5f, 0xfd, 0x9b, 0x34, 0x46, 0x7e, 0x79, 0xc6, 0x58, 0xbf, - 0xf8, 0x4c, 0xf0, 0x92, 0xdf, 0x3a, 0xf2, 0xc5, 0xf1, 0x09, 0xb7, 0x31, - 0x11, 0x9c, 0x47, 0xb8, 0xee, 0xb1, 0x7f, 0x7d, 0xf7, 0x16, 0x80, 0xb1, - 0x7f, 0xf8, 0xb3, 0xb4, 0xf3, 0xf9, 0x85, 0x0e, 0x2c, 0x58, 0x06, 0x1f, - 0xd7, 0x0c, 0x2f, 0xef, 0x7d, 0xcc, 0x2e, 0x96, 0x2f, 0x77, 0x4c, 0x7a, - 0xc5, 0x68, 0xff, 0x08, 0xa7, 0xb8, 0xc2, 0xfb, 0x07, 0x26, 0xac, 0x5e, - 0xd0, 0xb7, 0x58, 0xb9, 0xba, 0x58, 0xbb, 0xb4, 0xac, 0x5d, 0xdd, 0x12, - 0xc5, 0xc2, 0xd2, 0xc5, 0xf7, 0xb8, 0xdd, 0x96, 0x2c, 0x05, 0x8a, 0x88, - 0xf3, 0xc8, 0x63, 0xc4, 0xb7, 0xf6, 0x7a, 0x5b, 0x46, 0xac, 0x5e, 0xc7, - 0xf2, 0xc5, 0xff, 0x3e, 0xb3, 0xa8, 0xc0, 0x82, 0x09, 0x62, 0xbe, 0x7b, - 0xac, 0x39, 0x5d, 0xea, 0xaf, 0x79, 0x8c, 0x34, 0x66, 0x38, 0x47, 0xd0, - 0xfb, 0x8c, 0x47, 0x8c, 0xb3, 0x59, 0x17, 0xf2, 0x11, 0x77, 0xff, 0xa6, - 0x06, 0x07, 0xe7, 0x21, 0x43, 0x38, 0xb1, 0x7a, 0x0c, 0x35, 0x8a, 0x23, - 0xe9, 0x12, 0x65, 0xfc, 0x28, 0x85, 0xe1, 0x44, 0xb1, 0x7e, 0xc2, 0x35, - 0xf8, 0xb1, 0x40, 0x3d, 0xa1, 0x19, 0x5f, 0xff, 0x0b, 0x87, 0x9e, 0xb7, - 0xfb, 0x9c, 0x9f, 0x65, 0x8b, 0xd3, 0x9b, 0xac, 0x57, 0xcf, 0xc0, 0x94, - 0xef, 0xff, 0xfc, 0xd1, 0xe5, 0x8e, 0x45, 0x80, 0xcf, 0x49, 0xdf, 0xdf, - 0x75, 0x8b, 0xb8, 0x12, 0xc5, 0xfa, 0x78, 0x52, 0x75, 0x8a, 0xdc, 0xf0, - 0x3e, 0x33, 0x7f, 0xff, 0xff, 0x9b, 0x8e, 0x40, 0xfb, 0xfd, 0xbd, 0xf7, - 0xd4, 0x03, 0x29, 0xd6, 0x9f, 0xae, 0x3a, 0xc5, 0xff, 0xec, 0xf7, 0x36, - 0x10, 0xf0, 0x2c, 0x29, 0x58, 0xaf, 0xa3, 0x64, 0x10, 0x8e, 0xad, 0x99, - 0x9b, 0xe3, 0x34, 0xc8, 0xc9, 0x77, 0x8d, 0x0f, 0xa2, 0xf7, 0x87, 0x56, - 0xa3, 0x49, 0x3c, 0x2b, 0xbf, 0x2c, 0xc8, 0x11, 0x82, 0x93, 0xdf, 0x21, - 0x24, 0x22, 0x1e, 0xd0, 0xaa, 0x0e, 0x1f, 0x97, 0x70, 0x4b, 0x17, 0xfb, - 0xde, 0x7d, 0x67, 0x5e, 0x58, 0xbf, 0x39, 0xf7, 0x71, 0xac, 0x56, 0x8f, - 0x7b, 0xe6, 0xb7, 0xb4, 0xfe, 0x58, 0xbc, 0x06, 0x3a, 0xc5, 0xd8, 0x05, - 0x8a, 0x93, 0x69, 0x83, 0xb7, 0x9b, 0x0e, 0xb1, 0x5b, 0x26, 0x49, 0x8e, - 0xda, 0x22, 0x25, 0x1e, 0xe1, 0xfb, 0xf0, 0xe4, 0x5d, 0xff, 0x16, 0x2f, - 0xfe, 0x60, 0xff, 0x30, 0xe6, 0xb5, 0x9d, 0x2c, 0x58, 0xa0, 0x8c, 0x21, - 0xa6, 0xfc, 0xba, 0xfa, 0x7e, 0x2d, 0x2c, 0x5f, 0xdc, 0x2c, 0x19, 0x32, - 0xc5, 0x11, 0xe7, 0x84, 0x47, 0x7f, 0x3e, 0xa7, 0xaf, 0x4a, 0xc5, 0xdb, - 0xba, 0xc5, 0xf8, 0xa7, 0x69, 0xe9, 0x62, 0xf3, 0x47, 0x4a, 0xc5, 0xfc, - 0xda, 0x38, 0xb4, 0x05, 0x8b, 0xb4, 0x05, 0x8a, 0x81, 0xe3, 0xb9, 0x7d, - 0xf3, 0xec, 0x4c, 0xb1, 0x7d, 0xc3, 0x3c, 0xeb, 0x16, 0xe4, 0xa6, 0x79, - 0xb9, 0x73, 0x8c, 0x68, 0xa5, 0x99, 0xbc, 0x42, 0x19, 0x15, 0xfd, 0xa1, - 0x30, 0x6c, 0x35, 0x8a, 0x95, 0x4f, 0x6f, 0x08, 0x46, 0x8d, 0x78, 0x36, - 0xab, 0xee, 0x14, 0xec, 0xb1, 0x7f, 0xdb, 0x37, 0xd8, 0x64, 0xdb, 0xac, - 0x56, 0x8f, 0x74, 0x88, 0xef, 0xff, 0x82, 0xcd, 0xf9, 0x9e, 0x8b, 0x0d, - 0x2c, 0x02, 0xc5, 0x61, 0xfa, 0x39, 0x0d, 0xff, 0x11, 0xbf, 0x67, 0xf3, - 0x1d, 0x62, 0xf1, 0xdf, 0x4b, 0x17, 0xfd, 0x81, 0x66, 0xb7, 0x66, 0xdd, - 0x52, 0x87, 0x17, 0xfe, 0x84, 0x83, 0x93, 0xf7, 0xea, 0x0b, 0x17, 0xcf, - 0xac, 0xe9, 0x62, 0xb0, 0xf8, 0xe3, 0x90, 0x2f, 0xfe, 0x17, 0x07, 0xf6, - 0x3f, 0x50, 0x72, 0x58, 0xbf, 0x7b, 0xec, 0x40, 0x58, 0xa3, 0x13, 0x5a, - 0xd8, 0x74, 0xd8, 0x55, 0xfc, 0x91, 0x91, 0xae, 0x73, 0xac, 0x5f, 0xf7, - 0xb2, 0x26, 0x92, 0x98, 0x96, 0x2a, 0x23, 0xd0, 0x61, 0x7b, 0xec, 0xfb, - 0xf6, 0x58, 0xbf, 0xd8, 0x1e, 0x44, 0x14, 0xf4, 0xb1, 0x7e, 0xc8, 0x8a, - 0x4e, 0xb1, 0x6f, 0xb9, 0xef, 0xf8, 0xde, 0xcf, 0x8a, 0xc0, 0x75, 0x1c, - 0x9f, 0xe1, 0x44, 0x44, 0x5c, 0x84, 0x1d, 0xdb, 0xee, 0xa9, 0x41, 0x0a, - 0x82, 0xba, 0x7d, 0xe5, 0x90, 0x81, 0x7e, 0xfb, 0xdc, 0x7e, 0xcb, 0x16, - 0x95, 0x8b, 0x14, 0x9b, 0x6d, 0x12, 0xdf, 0xdc, 0x19, 0x67, 0xfb, 0xd5, - 0x8b, 0x83, 0xee, 0x58, 0xae, 0xf0, 0xf3, 0xce, 0x67, 0x76, 0x12, 0xc5, - 0xdf, 0xe2, 0xc5, 0x2c, 0x5f, 0xfd, 0x25, 0xbe, 0x7b, 0xef, 0xa0, 0x6e, - 0xb1, 0x58, 0x7d, 0x44, 0x31, 0xe0, 0xcb, 0xe7, 0xe7, 0xdd, 0x62, 0xf6, - 0x75, 0xe5, 0x8a, 0x19, 0xe0, 0x1c, 0x8a, 0xfe, 0x72, 0xcf, 0x7d, 0xd6, - 0x2d, 0x38, 0x79, 0xdc, 0x22, 0xa1, 0xa6, 0xc3, 0x90, 0x80, 0x14, 0x2e, - 0xef, 0xcd, 0x0f, 0xb8, 0x16, 0x2f, 0x85, 0x0c, 0x8e, 0x58, 0xbf, 0xda, - 0x6e, 0x6b, 0x58, 0x12, 0xc5, 0x0d, 0x10, 0x64, 0x51, 0xd8, 0x9a, 0xff, - 0xf7, 0xde, 0x2f, 0xbf, 0x5e, 0x2c, 0xec, 0xcb, 0x17, 0x86, 0xd1, 0x2c, - 0x5f, 0xf3, 0xf6, 0xfe, 0x6b, 0x4f, 0xd9, 0x62, 0xee, 0x41, 0x62, 0xa4, - 0xfc, 0xfe, 0x3d, 0xe3, 0xdb, 0xbd, 0xc5, 0x8b, 0xa4, 0x0b, 0x17, 0xfd, - 0xc9, 0x37, 0x82, 0x1f, 0xdd, 0x62, 0xa2, 0x3d, 0x2f, 0x0b, 0xd6, 0x22, - 0x34, 0x9a, 0xaf, 0xfe, 0xce, 0xb3, 0xd8, 0x50, 0xfb, 0x41, 0x62, 0xb0, - 0xf9, 0x48, 0x86, 0xfe, 0x3f, 0x38, 0xc5, 0xb2, 0xc5, 0x8e, 0xb1, 0x7e, - 0x22, 0xce, 0xa0, 0xb1, 0x47, 0x37, 0x41, 0x89, 0x54, 0xa2, 0x2d, 0x9a, - 0x6f, 0xf7, 0xb1, 0xcb, 0xdc, 0xc5, 0x8b, 0xfb, 0x3e, 0xfb, 0xff, 0x16, - 0x2f, 0xcf, 0xf6, 0x7d, 0x96, 0x2e, 0x98, 0xf5, 0x8b, 0x81, 0xc8, 0x1e, - 0x13, 0x94, 0x5f, 0x73, 0x0b, 0xcb, 0x17, 0xbb, 0xa7, 0x4b, 0x14, 0xe7, - 0xde, 0xc5, 0xa2, 0x22, 0xb8, 0x5c, 0x58, 0xb9, 0xbc, 0xb1, 0x7f, 0x81, - 0x83, 0xcf, 0x48, 0xd6, 0x2a, 0x23, 0xe2, 0xf8, 0xc3, 0x0b, 0xde, 0xf3, - 0x47, 0xac, 0x5f, 0x40, 0x4c, 0x1a, 0xc5, 0xfb, 0x3b, 0x16, 0x71, 0x62, - 0xfb, 0xb7, 0x69, 0xe2, 0xc5, 0x11, 0xe8, 0x06, 0x53, 0x7f, 0x7d, 0xe3, - 0x00, 0xce, 0xb1, 0x44, 0x8c, 0x6e, 0x3a, 0x78, 0x8a, 0xff, 0x1b, 0xf9, - 0x80, 0x9b, 0x4b, 0x16, 0x25, 0x8a, 0x73, 0xc6, 0x11, 0xad, 0x4b, 0x23, - 0x87, 0x67, 0x41, 0xc7, 0x11, 0x90, 0xbd, 0xdc, 0xc6, 0x28, 0x60, 0x1e, - 0x32, 0x0f, 0xc2, 0xad, 0x88, 0x40, 0x64, 0x50, 0xdf, 0xe4, 0x23, 0xfc, - 0x5e, 0x28, 0x73, 0x47, 0x3a, 0xdf, 0x60, 0xc7, 0x2b, 0x17, 0x64, 0x7a, - 0xc5, 0x61, 0xbc, 0x88, 0x8a, 0xff, 0xfb, 0xae, 0x0a, 0x7a, 0x2c, 0xdc, - 0xb0, 0x5b, 0x2c, 0x5f, 0x8d, 0x03, 0xc5, 0xc5, 0x8b, 0xef, 0xbb, 0x41, - 0x62, 0xf0, 0xda, 0x0b, 0x15, 0x26, 0xff, 0x08, 0xaf, 0xf7, 0xda, 0x23, - 0x37, 0x91, 0xac, 0x54, 0xa3, 0x00, 0x0d, 0x5c, 0x1f, 0xa9, 0x4d, 0x08, - 0x51, 0x89, 0xdf, 0xdf, 0x98, 0x7c, 0x43, 0x58, 0xbc, 0x00, 0xfa, 0x58, - 0xbb, 0x3b, 0x2c, 0x5e, 0xf1, 0x41, 0x62, 0xc7, 0xc3, 0xd6, 0xf1, 0x07, - 0x61, 0x9b, 0xff, 0xc6, 0x13, 0x7a, 0x74, 0x28, 0x6a, 0x60, 0xb1, 0x7e, - 0x9f, 0x7e, 0x62, 0x58, 0xbb, 0xdc, 0x58, 0xbf, 0x31, 0xa1, 0x4e, 0x96, - 0x2a, 0x09, 0xb8, 0xef, 0x08, 0x57, 0x36, 0xfa, 0x5b, 0x14, 0x90, 0xc5, - 0xfe, 0x72, 0xf4, 0x33, 0x58, 0xb1, 0x7f, 0xf3, 0xee, 0x58, 0x79, 0x88, - 0x73, 0xb2, 0xc5, 0xff, 0xd0, 0x2c, 0x3b, 0x16, 0x7d, 0x8e, 0xb1, 0x7f, - 0xb3, 0xd3, 0xd9, 0xc8, 0x0b, 0x17, 0xff, 0xc0, 0x3b, 0x42, 0x18, 0x00, - 0xfd, 0xb7, 0x04, 0xb1, 0x5b, 0xa2, 0x23, 0x46, 0x97, 0xfe, 0xcf, 0x7b, - 0xf8, 0x31, 0x7b, 0x8b, 0x17, 0xfe, 0x0f, 0xa3, 0x24, 0xc8, 0x8a, 0x4e, - 0xb1, 0x7f, 0xb5, 0x2e, 0x32, 0x68, 0x2c, 0x5f, 0xfb, 0x4e, 0x5b, 0x96, - 0x6d, 0x81, 0x2c, 0x5f, 0xf6, 0x76, 0x9c, 0xeb, 0xaf, 0x77, 0xd5, 0x62, - 0xfd, 0x3e, 0xe6, 0x11, 0x88, 0xb7, 0xd1, 0x97, 0xd0, 0x28, 0x69, 0xa3, - 0x8a, 0x1f, 0x77, 0xed, 0xff, 0xd3, 0x47, 0xac, 0x5f, 0xee, 0x4c, 0x0d, - 0x37, 0x23, 0xd6, 0x2f, 0xfc, 0x32, 0x17, 0xb9, 0x25, 0x3c, 0x58, 0xa9, - 0x3f, 0x77, 0x39, 0xb7, 0x7e, 0xb1, 0x50, 0x57, 0xe5, 0xb9, 0x97, 0x48, - 0xcf, 0x0c, 0xaf, 0x92, 0x14, 0x70, 0xe2, 0x29, 0xed, 0x0a, 0x50, 0x88, - 0x2f, 0xf1, 0x60, 0x38, 0xc4, 0x05, 0x8b, 0xf4, 0x3f, 0x3a, 0xd9, 0x62, - 0x9c, 0xf7, 0x18, 0xca, 0xf7, 0xdc, 0xd5, 0x8b, 0xcd, 0xa8, 0x2c, 0x5f, - 0x48, 0x3e, 0xcb, 0x15, 0xc3, 0x7f, 0xe1, 0xdb, 0xf4, 0x58, 0x58, 0x35, - 0x8b, 0xff, 0xbc, 0x32, 0x98, 0x7f, 0x30, 0xb7, 0x58, 0xbf, 0xff, 0x8e, - 0xc5, 0x0e, 0xbc, 0xe1, 0x6f, 0xf7, 0x3c, 0xee, 0xb1, 0x52, 0x8a, 0x31, - 0x22, 0x5f, 0xff, 0xb4, 0x00, 0x0b, 0x9a, 0x6e, 0x3f, 0x89, 0xa0, 0xb1, - 0x7f, 0xf9, 0xe7, 0xc5, 0x9e, 0xfe, 0x3c, 0x3b, 0x2c, 0x5f, 0xf7, 0x5c, - 0x03, 0x10, 0xe2, 0x12, 0xc5, 0xc4, 0x12, 0xc5, 0xff, 0xd9, 0xb0, 0x70, - 0x1e, 0x79, 0xfe, 0x25, 0x8b, 0xf6, 0xb3, 0xb6, 0x0f, 0x47, 0xbe, 0x43, - 0x14, 0xe8, 0xda, 0x68, 0x4d, 0xdf, 0xff, 0x84, 0x50, 0xc2, 0xf3, 0xc7, - 0x67, 0x89, 0xa0, 0xb1, 0x7f, 0xa4, 0x13, 0xfc, 0xea, 0x0b, 0x14, 0xe8, - 0x8a, 0x25, 0x6b, 0xff, 0xef, 0xb1, 0xe2, 0x29, 0x3f, 0x50, 0xfe, 0x6c, - 0xb1, 0x58, 0xaa, 0x7b, 0xea, 0xc0, 0x8c, 0x93, 0xd0, 0xb0, 0x11, 0x0d, - 0xf4, 0x4d, 0x13, 0x2c, 0x5e, 0xdb, 0x02, 0x58, 0xb4, 0x16, 0x2d, 0xe3, - 0x0d, 0x88, 0x87, 0xed, 0x05, 0x8a, 0x63, 0x74, 0x22, 0x8b, 0xa7, 0x8b, - 0x14, 0x62, 0x31, 0x8a, 0x11, 0xfe, 0x20, 0xbf, 0xef, 0xb1, 0x64, 0x50, - 0x9e, 0x96, 0x2f, 0xfe, 0xfb, 0xeb, 0x38, 0x59, 0xdb, 0xee, 0xb1, 0x7e, - 0x2c, 0xe0, 0x8c, 0xc3, 0xff, 0x88, 0xea, 0xff, 0x48, 0x07, 0xf9, 0x2d, - 0xd6, 0x2f, 0xda, 0xdd, 0x9b, 0x75, 0x48, 0x0c, 0x5f, 0xcd, 0xb0, 0x18, - 0x86, 0x88, 0x41, 0xe5, 0xec, 0xe0, 0x86, 0x8a, 0x7c, 0x34, 0x8e, 0x37, - 0xbd, 0xf6, 0x81, 0x89, 0x94, 0x94, 0x39, 0xaf, 0xfb, 0xef, 0x85, 0x9b, - 0x8f, 0x16, 0x28, 0x6b, 0xf2, 0x9b, 0x90, 0x3a, 0xec, 0x44, 0x3a, 0x86, - 0x59, 0xe5, 0x60, 0x14, 0x63, 0x9e, 0x8f, 0x77, 0xb1, 0xd5, 0xfe, 0x01, - 0x09, 0xba, 0x8d, 0xbb, 0xd5, 0x8b, 0xde, 0x14, 0xac, 0x5f, 0xfe, 0xfb, - 0xfb, 0x30, 0xfc, 0x9c, 0x1b, 0xac, 0x5d, 0xce, 0x2c, 0x5f, 0x0f, 0xec, - 0x75, 0x8b, 0xfe, 0xcd, 0x83, 0x83, 0xcf, 0x5e, 0x58, 0xb0, 0x37, 0x45, - 0xfe, 0x92, 0x18, 0x60, 0x88, 0xef, 0xf0, 0x3c, 0xfb, 0x1e, 0x77, 0x58, - 0xbe, 0xd6, 0x84, 0x6a, 0xc5, 0x4a, 0x77, 0x1d, 0x1f, 0xb4, 0x37, 0x09, - 0x08, 0x33, 0x6b, 0xf0, 0xe3, 0x46, 0x1c, 0x68, 0xb1, 0x7f, 0x6f, 0xd7, - 0xfa, 0x68, 0xf5, 0x8b, 0xfd, 0xf9, 0xd6, 0x61, 0x1a, 0xb1, 0x7b, 0x41, - 0xc4, 0xb1, 0x6c, 0x81, 0xe9, 0xb9, 0x9d, 0xf9, 0xb5, 0xec, 0xdd, 0x62, - 0xf8, 0x6f, 0x3b, 0x2c, 0x5a, 0x74, 0x79, 0x82, 0x29, 0xbf, 0xd9, 0x9d, - 0x01, 0x8b, 0xcb, 0x17, 0xf0, 0xff, 0x27, 0x29, 0x58, 0xbf, 0x4e, 0x0d, - 0xc9, 0x62, 0xf1, 0x67, 0x16, 0x2e, 0x71, 0x98, 0x8a, 0x2e, 0x19, 0x88, - 0xb7, 0xb1, 0x35, 0xa1, 0x04, 0xc5, 0x39, 0x0c, 0x9a, 0x95, 0x47, 0xbd, - 0x42, 0x21, 0xa3, 0x86, 0xa9, 0x66, 0xe8, 0xe5, 0x22, 0x0d, 0xe5, 0x29, - 0xb2, 0x78, 0xa5, 0x38, 0x5c, 0xf0, 0x58, 0xbd, 0xa7, 0xf2, 0xc5, 0xfb, - 0xc3, 0xcc, 0x35, 0x62, 0x86, 0x78, 0xdd, 0x0e, 0xdf, 0xdf, 0x7f, 0x73, - 0x3c, 0xb1, 0x7f, 0x16, 0xa7, 0x7c, 0xd2, 0xc5, 0xf6, 0x44, 0xe7, 0x58, - 0xa1, 0xa3, 0xff, 0x17, 0x77, 0x23, 0x62, 0xe0, 0xcb, 0xaf, 0xff, 0xb5, - 0x3d, 0x40, 0xef, 0x9d, 0x7f, 0x35, 0xb2, 0xc5, 0xa5, 0x62, 0xfa, 0x49, - 0xc0, 0xb1, 0x6c, 0xf9, 0xb2, 0xf0, 0x8d, 0xfe, 0xd1, 0x30, 0x41, 0xf4, - 0x12, 0xc5, 0xc0, 0xec, 0xb1, 0x7e, 0xf7, 0xc5, 0xb0, 0x96, 0x28, 0x67, - 0xfb, 0xf3, 0x81, 0x0d, 0x5f, 0xf7, 0xdf, 0xe5, 0x39, 0xac, 0x58, 0xbf, - 0xd0, 0x2c, 0xec, 0xe4, 0x35, 0x8b, 0x9c, 0x1b, 0x9f, 0x5b, 0x1b, 0xdf, - 0x89, 0xbc, 0xdd, 0x2c, 0x5e, 0xf3, 0x76, 0x58, 0xbf, 0xc3, 0xea, 0x19, - 0x85, 0xb2, 0xc5, 0x86, 0xb1, 0x7f, 0xe8, 0x4c, 0x7e, 0x6b, 0xdc, 0x98, - 0x2c, 0x5f, 0xf7, 0x43, 0x9e, 0x38, 0xff, 0x2b, 0x17, 0xf7, 0x5e, 0x8b, - 0xf2, 0x4b, 0x17, 0xf9, 0xfd, 0xc6, 0xe8, 0x01, 0x2c, 0x5d, 0xad, 0x95, - 0x28, 0x29, 0x5f, 0x3d, 0xc6, 0x36, 0xbf, 0xf3, 0x6b, 0x08, 0x1c, 0xf7, - 0x3a, 0x58, 0xbf, 0xfe, 0xc3, 0x4f, 0x38, 0x5e, 0xe7, 0x05, 0xa0, 0x2c, - 0x5f, 0xff, 0xff, 0xd9, 0xef, 0xb1, 0x1a, 0x67, 0x34, 0xcd, 0xee, 0xd8, - 0x33, 0x30, 0xec, 0x5d, 0x41, 0x72, 0x05, 0x97, 0xfe, 0x66, 0x37, 0x76, - 0x19, 0x86, 0x84, 0xb9, 0x02, 0xcb, 0xff, 0xbe, 0xff, 0x79, 0x2f, 0x18, - 0x68, 0x4b, 0x90, 0x2c, 0xbf, 0xd2, 0xe5, 0xe3, 0x0d, 0x09, 0x72, 0x05, - 0x97, 0xf1, 0xf0, 0x66, 0x1a, 0x12, 0xe4, 0x0b, 0x2f, 0xff, 0xf9, 0x88, - 0x9c, 0xe6, 0x73, 0x7f, 0xbe, 0x9c, 0xdd, 0xb0, 0x25, 0xc8, 0x16, 0x5d, - 0xd1, 0x83, 0x4e, 0x7b, 0x75, 0x1d, 0x2a, 0x32, 0x19, 0x1f, 0xd4, 0xab, - 0x21, 0xc4, 0x0f, 0xa8, 0x94, 0xa3, 0x8b, 0xfc, 0xf2, 0x6f, 0x3d, 0xce, - 0x96, 0x2f, 0xf3, 0x36, 0xd9, 0x09, 0x35, 0x62, 0xff, 0xa4, 0xb7, 0x9f, - 0x73, 0xee, 0xb1, 0x7c, 0xde, 0x93, 0x22, 0x3e, 0xd3, 0x9a, 0x5f, 0xfe, - 0x3e, 0x0c, 0xc0, 0xca, 0x7f, 0x25, 0xba, 0xc5, 0xf3, 0x68, 0x0c, 0xb1, - 0x7f, 0xf7, 0xdf, 0xef, 0x25, 0xe3, 0x0d, 0x09, 0x72, 0x05, 0x97, 0xfd, - 0x17, 0x37, 0x7d, 0x8c, 0x34, 0x25, 0xc8, 0x16, 0x5f, 0xbd, 0xc9, 0x39, - 0x9b, 0xa2, 0x88, 0x35, 0x4b, 0xff, 0xc6, 0x6f, 0xf7, 0xde, 0x7d, 0xc3, - 0x0d, 0x09, 0x72, 0x05, 0x97, 0xff, 0xff, 0x11, 0x39, 0xcc, 0x16, 0x19, - 0xcd, 0xfe, 0xfa, 0x73, 0x76, 0xc0, 0x97, 0x20, 0x59, 0x58, 0x99, 0x37, - 0x48, 0x6c, 0xbf, 0x7f, 0x9f, 0x4e, 0x6e, 0xd8, 0x12, 0xe4, 0x0b, 0x2f, - 0xfd, 0xb1, 0xc4, 0xe7, 0x62, 0xea, 0x0b, 0x90, 0x2c, 0xaf, 0xa2, 0x44, - 0x48, 0x77, 0xff, 0xcc, 0xdd, 0x43, 0x9f, 0x71, 0x8e, 0x75, 0x29, 0x17, - 0xff, 0x9c, 0x0c, 0x43, 0x33, 0xaf, 0x0a, 0x59, 0x62, 0xff, 0xd9, 0x08, - 0x0b, 0x9a, 0x2d, 0xa3, 0x97, 0x20, 0x59, 0x5b, 0xa6, 0x1f, 0xa2, 0x3f, - 0xa8, 0x71, 0x2e, 0xff, 0xdb, 0xbe, 0xbc, 0xc0, 0xe1, 0x81, 0x2e, 0x40, - 0xb2, 0xfe, 0xfb, 0xff, 0xee, 0x05, 0x58, 0x16, 0x5f, 0xb0, 0x06, 0x1a, - 0x12, 0xe4, 0x0b, 0x2e, 0xcf, 0x6e, 0x7e, 0x9f, 0x3b, 0xae, 0x91, 0xe5, - 0xc8, 0x62, 0x5f, 0xc7, 0xc1, 0x98, 0x68, 0x4b, 0x90, 0x2c, 0xbf, 0xf6, - 0xff, 0x7d, 0x39, 0xbb, 0x60, 0x4b, 0x90, 0x2c, 0xbb, 0x0c, 0x64, 0x47, - 0xf0, 0xfe, 0xff, 0x09, 0xce, 0xc5, 0xd4, 0x17, 0x20, 0x59, 0x7f, 0xec, - 0x7e, 0xd8, 0x58, 0x36, 0x82, 0xe4, 0x0b, 0x0e, 0x78, 0x34, 0x35, 0xfd, - 0xad, 0x21, 0x9e, 0x14, 0x6c, 0x74, 0x04, 0xc2, 0x8f, 0xab, 0x91, 0xe8, - 0x7a, 0x33, 0x11, 0x42, 0xe0, 0x26, 0xfb, 0x81, 0x2a, 0x90, 0x2c, 0x8c, - 0x45, 0x4d, 0xcd, 0xba, 0xc5, 0x0d, 0x99, 0xb9, 0x87, 0x5b, 0xc2, 0x30, - 0x14, 0xbc, 0x5f, 0x1c, 0xd6, 0x33, 0x70, 0x77, 0x35, 0x88, 0x4b, 0x94, - 0xd1, 0xeb, 0xa1, 0xdc, 0xb1, 0x7a, 0x61, 0xdc, 0xb1, 0x52, 0x6e, 0xc8, - 0x6e, 0xb6, 0x6c, 0x39, 0xa0, 0x94, 0x38, 0x42, 0xf5, 0x0a, 0x3d, 0x42, - 0x6b, 0xe5, 0xac, 0x50, 0x0a, 0x6f, 0x01, 0x42, 0x1a, 0xf8, 0x32, 0xce, - 0xcb, 0x17, 0xf4, 0x9f, 0x77, 0xfe, 0x2c, 0x5f, 0xfa, 0x05, 0x9e, 0xfb, - 0xe7, 0x5e, 0x58, 0xbf, 0x8a, 0x1c, 0xf7, 0xe5, 0x62, 0xff, 0xff, 0xd9, - 0xef, 0xb4, 0x07, 0x9a, 0x7c, 0xec, 0x1e, 0xbe, 0xfd, 0x79, 0x62, 0xe7, - 0x35, 0x62, 0xfb, 0xb1, 0x67, 0x16, 0x2f, 0xee, 0xb8, 0xde, 0x9e, 0x2c, + 0xbc, 0x37, 0x89, 0x62, 0xfe, 0xcf, 0x94, 0xe6, 0x96, 0x2f, 0x7b, 0xdd, + 0xac, 0x5f, 0xd3, 0xdf, 0x0a, 0x7a, 0x2c, 0x50, 0xcf, 0xec, 0x05, 0x9e, + 0x1f, 0xb0, 0x16, 0x2f, 0xa1, 0x25, 0xe5, 0x8b, 0xf1, 0xce, 0xe1, 0x9d, + 0x62, 0xde, 0xc3, 0xcc, 0x72, 0x2a, 0xd9, 0x34, 0xce, 0xe1, 0x33, 0xa2, + 0xf2, 0x5e, 0xbf, 0xfb, 0x5d, 0xb4, 0x5f, 0xc7, 0x21, 0xca, 0xc5, 0xe8, + 0x79, 0x96, 0x2b, 0x63, 0xe2, 0xed, 0x16, 0xff, 0xf6, 0xff, 0x72, 0xce, + 0x8d, 0x0e, 0x38, 0xd6, 0x2f, 0xf4, 0x0b, 0x0e, 0x76, 0x82, 0xc5, 0xf3, + 0xee, 0xe3, 0x58, 0xbb, 0x52, 0xe7, 0xad, 0xe3, 0x3a, 0x1a, 0x33, 0xb5, + 0x0a, 0x2b, 0xfb, 0x9e, 0x29, 0xce, 0xd6, 0x2a, 0x53, 0xee, 0xc8, 0x53, + 0x34, 0x3c, 0x84, 0x51, 0x7f, 0xfb, 0x39, 0xf6, 0x7f, 0x49, 0xc9, 0x8d, + 0x58, 0xbc, 0xc5, 0xba, 0xc5, 0xfa, 0x42, 0xf6, 0x6c, 0xb1, 0x7f, 0x02, + 0x3a, 0x4e, 0xc3, 0x58, 0xbf, 0x03, 0x9e, 0xcf, 0xac, 0x5f, 0x0f, 0xf3, + 0xda, 0xc5, 0xf6, 0x7e, 0x18, 0xb1, 0x60, 0x9c, 0xf1, 0xbc, 0x49, 0x6c, + 0x58, 0xa9, 0x45, 0x43, 0x37, 0xf8, 0xa2, 0xfa, 0x43, 0x8b, 0x8b, 0x15, + 0x2b, 0xad, 0x70, 0x96, 0xd5, 0x88, 0xb1, 0x24, 0xe8, 0x75, 0x8a, 0x8a, + 0x1b, 0x3c, 0x2e, 0xbf, 0xf0, 0x0e, 0xf9, 0xdf, 0x87, 0x23, 0x58, 0xbf, + 0xdf, 0x9e, 0xe0, 0x73, 0x65, 0x62, 0xff, 0xfe, 0xe9, 0x25, 0xec, 0x87, + 0xe7, 0xb8, 0x7b, 0x93, 0xa5, 0x8b, 0xfc, 0x78, 0xf0, 0xf0, 0x9a, 0x0b, + 0x17, 0xe8, 0x98, 0x11, 0xd8, 0xb1, 0x52, 0x7c, 0x6c, 0x6f, 0x4b, 0x17, + 0xf1, 0x83, 0xcc, 0x07, 0x16, 0x2f, 0xe2, 0xce, 0x4e, 0x79, 0x62, 0xff, + 0xf6, 0xb6, 0x7e, 0x3f, 0x4f, 0xbe, 0x77, 0xe5, 0x8b, 0x78, 0xc3, 0xfa, + 0xc2, 0xca, 0xed, 0x1b, 0xa7, 0x0c, 0x28, 0x54, 0xdf, 0xe2, 0xf7, 0x04, + 0x3f, 0xba, 0xc5, 0x9d, 0x62, 0xe6, 0xf2, 0xc5, 0x4a, 0x24, 0x70, 0xd6, + 0x23, 0x43, 0x88, 0xdc, 0xdd, 0xac, 0x5f, 0x18, 0x11, 0x79, 0x62, 0xee, + 0x61, 0xcd, 0xe9, 0x0c, 0x5f, 0xd9, 0xf7, 0xd7, 0xd9, 0x62, 0xed, 0x6c, + 0xb1, 0x5b, 0x1e, 0x31, 0xcb, 0x6b, 0x11, 0x28, 0xee, 0x37, 0xf3, 0x9e, + 0x7c, 0xfd, 0x16, 0x2f, 0xfb, 0x0f, 0x9a, 0x00, 0x05, 0xc5, 0x8b, 0xfe, + 0x9e, 0x72, 0x5f, 0x66, 0xf2, 0xc5, 0xf9, 0x8f, 0x23, 0x95, 0x8a, 0xfa, + 0x26, 0xbc, 0x74, 0x23, 0x9b, 0xf8, 0xbe, 0x13, 0x14, 0x16, 0x2f, 0xf9, + 0xf0, 0x86, 0x6b, 0xe6, 0x96, 0x2a, 0x57, 0x54, 0x86, 0x81, 0x86, 0xdd, + 0xc3, 0x05, 0xe3, 0x8e, 0xd4, 0x61, 0xbf, 0x21, 0xf4, 0x32, 0x44, 0x61, + 0xd4, 0x5d, 0x7f, 0x6c, 0x63, 0x1b, 0xf7, 0x58, 0xbf, 0x7a, 0x47, 0x9d, + 0x16, 0x2f, 0xf0, 0xdd, 0x88, 0x7f, 0x95, 0x8a, 0xc4, 0x46, 0xc4, 0x63, + 0xe2, 0xab, 0xfe, 0xe6, 0x6d, 0xc7, 0x26, 0xd9, 0x62, 0xff, 0xd9, 0xdc, + 0x1c, 0x8f, 0x23, 0x95, 0x8b, 0xfe, 0xec, 0xcf, 0x49, 0x39, 0xbc, 0x58, + 0xba, 0x3a, 0x56, 0x2a, 0x4f, 0x59, 0xcf, 0x2e, 0xce, 0xd6, 0x2f, 0xff, + 0xfd, 0x3b, 0x77, 0x0e, 0x16, 0x44, 0x66, 0xff, 0x9d, 0xcd, 0xd3, 0x04, + 0xb1, 0x52, 0x9d, 0x5e, 0x18, 0x39, 0xd3, 0x42, 0x53, 0xc4, 0x02, 0x18, + 0xbf, 0x9b, 0x5d, 0xc3, 0x3c, 0xb1, 0x7f, 0x9b, 0x03, 0xcc, 0xef, 0xcb, + 0x17, 0xfd, 0xc7, 0xd7, 0x88, 0x4d, 0x05, 0x8a, 0x01, 0xf6, 0xf8, 0xd2, + 0xff, 0xfc, 0xfc, 0xc1, 0xff, 0x3c, 0xf9, 0xcd, 0xb0, 0x25, 0x8b, 0xff, + 0xe2, 0xf6, 0xff, 0x70, 0xb8, 0x58, 0x01, 0x71, 0x62, 0xfd, 0x8f, 0x1c, + 0xe3, 0x58, 0xbf, 0xfa, 0x63, 0xb0, 0x45, 0x99, 0xd2, 0x7b, 0x58, 0xa9, + 0x46, 0x20, 0xd4, 0x8e, 0x55, 0x7f, 0xb4, 0x0f, 0x39, 0xb8, 0x4b, 0x17, + 0x88, 0xee, 0xb1, 0x52, 0x7a, 0x02, 0x34, 0xbd, 0xcc, 0x25, 0x8b, 0xff, + 0xfe, 0x72, 0x00, 0xf3, 0xbe, 0x38, 0xb7, 0xfb, 0xfb, 0x8e, 0x35, 0x8b, + 0xee, 0x0f, 0x09, 0x62, 0x80, 0x8a, 0x6e, 0x0e, 0x79, 0xa2, 0xff, 0xd3, + 0x9a, 0xcd, 0x00, 0xef, 0xc5, 0x8b, 0xde, 0xc8, 0x96, 0x2f, 0xbd, 0xc0, + 0x6e, 0xb1, 0x79, 0xbb, 0xea, 0x58, 0xbf, 0x9b, 0xdc, 0x9c, 0xd9, 0x62, + 0xa5, 0x70, 0x7b, 0x21, 0x39, 0xb9, 0x13, 0xc6, 0x35, 0xf7, 0xf6, 0x86, + 0x39, 0x18, 0x78, 0xf8, 0x43, 0xdd, 0x09, 0x42, 0x21, 0xbf, 0x8b, 0xf8, + 0x09, 0x25, 0x8b, 0xdd, 0xc3, 0x16, 0x2f, 0xe1, 0xbf, 0x70, 0x26, 0x58, + 0xb0, 0x18, 0xf3, 0x38, 0x3d, 0x7f, 0xb0, 0xbd, 0x91, 0x4c, 0x7a, 0xc5, + 0xff, 0xda, 0xce, 0x98, 0x3d, 0x4e, 0xed, 0xa5, 0x8b, 0xfd, 0x21, 0x36, + 0xb4, 0xe0, 0x58, 0xbf, 0x9b, 0x7f, 0x9e, 0x46, 0xb1, 0x7b, 0x00, 0x3f, + 0x9f, 0x1b, 0x1a, 0x5f, 0xe6, 0x87, 0xdb, 0x93, 0x1e, 0xb1, 0x52, 0x9b, + 0x79, 0xc9, 0xd8, 0xd8, 0x10, 0xaa, 0xe1, 0x95, 0xff, 0xdd, 0xc3, 0x9f, + 0x91, 0xff, 0x0b, 0x65, 0x8b, 0xff, 0xe1, 0x1b, 0xf7, 0x88, 0x07, 0x10, + 0x0b, 0x06, 0xb1, 0x7f, 0xa4, 0xfc, 0xc3, 0xcc, 0x7a, 0xc5, 0x62, 0x34, + 0x3b, 0x47, 0x12, 0x9d, 0xff, 0xb5, 0xb6, 0x0f, 0x3f, 0xfc, 0x8f, 0x58, + 0xb1, 0xab, 0x17, 0x9e, 0x2e, 0x2c, 0x5f, 0x74, 0x9c, 0xed, 0x62, 0xef, + 0x70, 0x67, 0x86, 0x18, 0xf5, 0x4a, 0x21, 0x49, 0x5a, 0xff, 0xda, 0xe1, + 0xc3, 0xcd, 0x3c, 0xc4, 0xb1, 0x58, 0x7c, 0x42, 0x21, 0xbe, 0x92, 0xf7, + 0x16, 0x2f, 0xbd, 0xfc, 0xf2, 0xc5, 0x86, 0xb1, 0x7b, 0xf8, 0x4b, 0x17, + 0x98, 0xb6, 0x93, 0xd1, 0xe1, 0x1f, 0x84, 0xab, 0x13, 0xfd, 0xe4, 0x65, + 0x42, 0x21, 0x09, 0xce, 0xfb, 0xdf, 0xc2, 0x58, 0xbf, 0xc5, 0x9e, 0xf6, + 0x6a, 0x25, 0x8b, 0xfb, 0x8d, 0x02, 0x93, 0xac, 0x5e, 0x29, 0x8f, 0x58, + 0xbf, 0xfe, 0x84, 0xeb, 0x6f, 0x39, 0xbc, 0xe3, 0x14, 0x16, 0x2f, 0xed, + 0xb9, 0x87, 0x98, 0xf5, 0x8a, 0x89, 0x10, 0x81, 0xa9, 0x56, 0x26, 0x97, + 0x11, 0x16, 0x8d, 0x38, 0x5a, 0x14, 0x28, 0xef, 0xf3, 0xf7, 0xc6, 0xdf, + 0x90, 0x58, 0xbf, 0x89, 0xbb, 0x86, 0x79, 0x62, 0xef, 0xba, 0xc5, 0xfd, + 0x80, 0x90, 0x06, 0x75, 0x8a, 0x58, 0xbf, 0xfe, 0xef, 0x77, 0xe7, 0xdf, + 0x59, 0xd2, 0x4b, 0xcb, 0x15, 0x11, 0xef, 0xf8, 0x32, 0xc1, 0x12, 0x2c, + 0x79, 0x08, 0xea, 0xd9, 0x32, 0x47, 0x2e, 0x28, 0x64, 0x5f, 0x81, 0xdf, + 0x1a, 0x3d, 0x62, 0xff, 0x61, 0xd8, 0x87, 0xf9, 0x58, 0xbe, 0x1f, 0xb3, + 0xa2, 0xc5, 0x0c, 0xf5, 0xfe, 0x65, 0x7f, 0xfc, 0x26, 0xd4, 0x23, 0xb0, + 0xa4, 0x07, 0x68, 0x2c, 0x5f, 0xfd, 0x0f, 0xc8, 0xfd, 0x98, 0x5e, 0xe2, + 0xc5, 0xc3, 0x82, 0xc5, 0xfb, 0x3d, 0xf7, 0xf2, 0xc5, 0xfe, 0xc1, 0x8b, + 0xdc, 0x87, 0x5e, 0xb1, 0x76, 0x41, 0x62, 0xbe, 0x7a, 0x24, 0x75, 0x7f, + 0xff, 0xf1, 0x67, 0x46, 0x86, 0x17, 0x70, 0x9c, 0xd8, 0x5b, 0x3e, 0xa4, + 0xeb, 0x16, 0x84, 0xa7, 0xbc, 0x32, 0x2c, 0x52, 0xd2, 0x27, 0xc6, 0x3c, + 0xf2, 0x19, 0x0d, 0xf1, 0xfc, 0xfb, 0x2c, 0x5f, 0x77, 0xf1, 0x6e, 0xb1, + 0x52, 0xac, 0x5b, 0x25, 0x31, 0x3b, 0x50, 0x89, 0x2f, 0xfe, 0xe9, 0xe3, + 0x64, 0xa1, 0x9f, 0x73, 0xac, 0x5b, 0xcb, 0x17, 0xfe, 0x80, 0x1b, 0xd3, + 0xd4, 0xfb, 0x3a, 0xc5, 0xff, 0xee, 0x6a, 0x5c, 0xbd, 0xc1, 0x0f, 0xee, + 0xb1, 0x5b, 0x22, 0x7b, 0xb1, 0x2f, 0x21, 0x5f, 0xee, 0x9f, 0x68, 0x4e, + 0x12, 0xc5, 0xff, 0x16, 0xff, 0x78, 0x99, 0xa0, 0xb1, 0x4b, 0x16, 0x06, + 0x1e, 0x37, 0x0e, 0xaa, 0x51, 0xa7, 0x86, 0x4c, 0xf5, 0x7d, 0x06, 0xd4, + 0x16, 0x2f, 0xff, 0x4e, 0x9b, 0xc2, 0xf3, 0xfb, 0x9f, 0x75, 0x8b, 0x42, + 0x23, 0xed, 0xf9, 0x1d, 0x2c, 0x5f, 0x07, 0xf6, 0xf2, 0xc5, 0xb3, 0x86, + 0xc0, 0x20, 0xcb, 0xfa, 0x07, 0xf1, 0x0a, 0x25, 0x8b, 0xff, 0xe0, 0xe1, + 0x3d, 0x1c, 0x81, 0xa7, 0x93, 0xe2, 0x45, 0x69, 0x10, 0x3e, 0x30, 0xbe, + 0xf8, 0x7d, 0xf9, 0x62, 0xf8, 0xf8, 0xfd, 0x16, 0x2f, 0xde, 0x6d, 0xf9, + 0x05, 0x8a, 0xc3, 0xce, 0x08, 0x92, 0xe8, 0xa3, 0xd6, 0x2f, 0xbb, 0xf6, + 0x7d, 0x62, 0xb6, 0x3c, 0x02, 0x1c, 0xb0, 0x4b, 0x15, 0x2a, 0x8b, 0xf6, + 0x59, 0xc8, 0x54, 0x6e, 0x46, 0xee, 0x82, 0x62, 0x8e, 0x22, 0xbe, 0x39, + 0x31, 0xab, 0x17, 0x37, 0x96, 0x2b, 0x63, 0x75, 0xb9, 0x1d, 0xfd, 0xf6, + 0xea, 0x14, 0xe9, 0x62, 0xd8, 0xb1, 0x46, 0x1e, 0x17, 0x8c, 0x6f, 0xf0, + 0x39, 0x85, 0x3d, 0xf1, 0x62, 0xfd, 0xa7, 0xd9, 0x8e, 0xac, 0x84, 0xcb, + 0xef, 0x0a, 0x59, 0x59, 0x09, 0x97, 0x02, 0x55, 0x80, 0x99, 0x7f, 0x89, + 0x8d, 0xf4, 0xe8, 0x0a, 0xc0, 0x4c, 0xbf, 0xdc, 0xcf, 0xbf, 0x05, 0xb2, + 0xb2, 0x13, 0x2e, 0xc1, 0xab, 0x21, 0x32, 0xe0, 0x82, 0x5e, 0x42, 0x65, + 0x62, 0x6a, 0xfd, 0x9b, 0x39, 0x79, 0xc9, 0x38, 0x83, 0xd1, 0x08, 0x22, + 0x4b, 0x79, 0x39, 0x09, 0x88, 0xc3, 0xe7, 0xae, 0xd5, 0x24, 0xe8, 0x8c, + 0x28, 0xfc, 0xaf, 0x0c, 0x44, 0xb1, 0x6d, 0xd6, 0x2f, 0xdc, 0xf1, 0x64, + 0x16, 0x2b, 0x0f, 0x63, 0x43, 0xa0, 0x13, 0xac, 0x56, 0xdc, 0xf2, 0xab, + 0x9a, 0x12, 0x57, 0xff, 0xe0, 0x1d, 0xa1, 0xcf, 0xcf, 0x4c, 0x0c, 0x6d, + 0x05, 0x8a, 0x96, 0x73, 0x19, 0xaa, 0x2f, 0x1a, 0xd7, 0xe5, 0xa5, 0xb2, + 0x19, 0x47, 0x71, 0xc9, 0x59, 0x3e, 0x9c, 0x15, 0x11, 0xdd, 0xff, 0xf6, + 0x05, 0xf6, 0x7f, 0x4f, 0x84, 0x0c, 0x25, 0x8b, 0xff, 0x40, 0x98, 0xd8, + 0xa0, 0xfa, 0x82, 0xc5, 0xf6, 0x79, 0xbe, 0xb1, 0x7e, 0xc8, 0xa1, 0x3d, + 0xac, 0x5c, 0xc6, 0xf5, 0xd4, 0xf3, 0x08, 0x8a, 0xb4, 0x8c, 0x22, 0x84, + 0x6d, 0xf3, 0xe9, 0x80, 0xb1, 0x7f, 0xf4, 0x85, 0xe3, 0x5b, 0x99, 0x84, + 0x6a, 0xc5, 0x40, 0xfa, 0x08, 0x8a, 0xfc, 0x7e, 0xe0, 0xe4, 0xb1, 0x71, + 0x0f, 0x0f, 0x2b, 0xc4, 0x37, 0xcd, 0xd3, 0x02, 0x58, 0xb7, 0x58, 0xb1, + 0x7f, 0xfc, 0xd0, 0xfc, 0xcb, 0xfb, 0x8e, 0x5d, 0xc1, 0x62, 0xf6, 0x6b, + 0x16, 0x2a, 0x08, 0x82, 0xf8, 0xb8, 0x13, 0xef, 0x63, 0x71, 0x62, 0xf4, + 0x53, 0xc5, 0x8b, 0xfb, 0x6d, 0x9c, 0xa1, 0xc5, 0x8b, 0x80, 0x75, 0x8a, + 0xd1, 0xe4, 0x11, 0x85, 0xff, 0xa2, 0x70, 0xb3, 0x4f, 0xb3, 0x1d, 0x62, + 0xff, 0xa4, 0x5e, 0x27, 0xe8, 0x19, 0xd6, 0x2f, 0xfb, 0x3c, 0xf9, 0xcd, + 0xb0, 0x25, 0x8b, 0xdc, 0x6d, 0x2c, 0x58, 0xeb, 0x16, 0x02, 0xc5, 0x49, + 0xa4, 0x80, 0x95, 0xf0, 0xc7, 0x30, 0x41, 0x15, 0xd9, 0xc3, 0x13, 0xe3, + 0x91, 0xcc, 0x66, 0x72, 0x1d, 0x20, 0xfc, 0xf3, 0xc7, 0x51, 0xc8, 0x21, + 0x90, 0x5f, 0xfe, 0x68, 0x7e, 0x7a, 0x06, 0x76, 0x6d, 0x6e, 0xb1, 0x52, + 0xbb, 0x55, 0x91, 0x88, 0xbc, 0x36, 0x74, 0x58, 0xd0, 0xa7, 0x29, 0x42, + 0x62, 0x84, 0x65, 0xf7, 0xdb, 0x91, 0xeb, 0x17, 0xdb, 0x94, 0xe9, 0x62, + 0xe7, 0xe8, 0x61, 0xe4, 0xe1, 0x35, 0xff, 0xb4, 0xc6, 0xeb, 0x01, 0xc6, + 0xdd, 0x62, 0xff, 0xf8, 0x78, 0x00, 0x39, 0x18, 0x58, 0x01, 0x71, 0x62, + 0xfe, 0xf0, 0x9b, 0x9c, 0xf2, 0xc5, 0xfb, 0x93, 0x80, 0x95, 0x8b, 0x8b, + 0x3b, 0x3d, 0x6f, 0x17, 0xdc, 0xda, 0x58, 0xa3, 0x11, 0xd5, 0xf8, 0x53, + 0x31, 0x6d, 0x69, 0x36, 0x00, 0x46, 0x57, 0x7f, 0xdf, 0x90, 0xcf, 0x9d, + 0x1f, 0x75, 0x8a, 0xc4, 0xfd, 0x9a, 0x38, 0xfe, 0x15, 0x5e, 0x7d, 0x1a, + 0xb1, 0x76, 0x80, 0xb1, 0x58, 0x6d, 0x9c, 0x7a, 0xed, 0xb4, 0xb1, 0x70, + 0x22, 0x58, 0xbf, 0xf8, 0xf1, 0x41, 0x8b, 0x61, 0xc9, 0x6c, 0xb1, 0x76, + 0xd8, 0xb1, 0x52, 0x89, 0x11, 0x8c, 0xe0, 0xcb, 0x23, 0xdf, 0xb0, 0x8d, + 0x18, 0x16, 0x2f, 0xa2, 0xfb, 0xe9, 0x62, 0xf7, 0xdf, 0x4b, 0x17, 0xcf, + 0xf9, 0xe1, 0x87, 0x83, 0x11, 0x25, 0x71, 0x14, 0x9e, 0x6a, 0xbb, 0x90, + 0x58, 0xb8, 0x44, 0xb1, 0x7f, 0xdc, 0xd6, 0x4f, 0x70, 0x73, 0xac, 0x56, + 0x1f, 0x4e, 0x86, 0x04, 0x2f, 0x7c, 0xff, 0x63, 0xac, 0x5f, 0x6a, 0x79, + 0xb2, 0xc5, 0xf8, 0x5b, 0x7d, 0xc2, 0x58, 0xa7, 0x4c, 0xaf, 0x50, 0x8c, + 0xf1, 0x70, 0x64, 0x5d, 0x44, 0x95, 0x2f, 0xa2, 0xc9, 0xb4, 0xb5, 0x68, + 0x34, 0x0e, 0x7c, 0xcb, 0x25, 0x2c, 0x1b, 0x1e, 0xde, 0xf3, 0x9a, 0x3d, + 0xcb, 0x8a, 0x79, 0x6c, 0xf1, 0x4f, 0x87, 0xea, 0x77, 0x3c, 0xf2, 0xb7, + 0x7f, 0x38, 0xee, 0xd0, 0xaa, 0x04, 0x7c, 0xe5, 0x18, 0xf7, 0x25, 0x16, + 0xfa, 0x9f, 0xe5, 0xd2, 0x79, 0x2c, 0x29, 0x57, 0xb1, 0xcd, 0x61, 0xc2, + 0xc3, 0xaa, 0x50, 0x4d, 0xff, 0xfc, 0x67, 0x33, 0x3a, 0x39, 0x03, 0x99, + 0xef, 0xe7, 0x45, 0x8b, 0xf7, 0x9f, 0xb6, 0x25, 0x8b, 0xc7, 0xf7, 0x16, + 0x2f, 0xb5, 0xd3, 0x06, 0xb1, 0x70, 0x7d, 0x4b, 0x15, 0x28, 0x87, 0xd8, + 0xa1, 0x87, 0x80, 0x4b, 0x76, 0x12, 0xc5, 0xde, 0xe2, 0xc5, 0x49, 0xae, + 0x21, 0x6b, 0xff, 0xb3, 0xf9, 0xee, 0xf7, 0x7d, 0x7f, 0x16, 0x2f, 0xe7, + 0xd1, 0x4f, 0x70, 0x58, 0xbb, 0x38, 0xb1, 0x7f, 0xee, 0x66, 0xbc, 0x4c, + 0x69, 0xb8, 0xb1, 0x50, 0x47, 0x50, 0xc7, 0xf1, 0x18, 0x05, 0xdc, 0x17, + 0xbf, 0xf1, 0x60, 0x1b, 0x59, 0xd3, 0x06, 0xb1, 0x7e, 0x8a, 0x12, 0x5e, + 0x58, 0xbf, 0xf6, 0xb3, 0x9c, 0x11, 0x06, 0x79, 0x58, 0xbe, 0x6f, 0x87, + 0x05, 0x8a, 0x82, 0x23, 0x74, 0x53, 0xc4, 0x0b, 0xfb, 0x20, 0x42, 0x6e, + 0x2c, 0x5f, 0x77, 0xc7, 0x95, 0x8b, 0xff, 0xf6, 0x78, 0x40, 0x3b, 0x43, + 0x20, 0xff, 0xce, 0x8b, 0x17, 0xde, 0x72, 0x35, 0x62, 0xec, 0x22, 0x3f, + 0xae, 0xa5, 0x7a, 0x35, 0x3f, 0x4e, 0xe1, 0x99, 0xa3, 0x0f, 0x96, 0x82, + 0x13, 0xb7, 0xef, 0x71, 0xbb, 0xdd, 0x62, 0xfb, 0x34, 0xe6, 0xac, 0x5e, + 0x0b, 0x63, 0xac, 0x5f, 0xb9, 0xa1, 0x48, 0x16, 0x2f, 0xfd, 0x3d, 0x5c, + 0x7c, 0x2c, 0xec, 0x25, 0x8b, 0xec, 0x18, 0xf6, 0x58, 0xbf, 0xfe, 0xe9, + 0xac, 0xd8, 0xc1, 0x4e, 0x7a, 0x7b, 0x82, 0xc5, 0xed, 0x08, 0x6b, 0x17, + 0xfa, 0x4e, 0x4d, 0x0c, 0xfa, 0xc5, 0x68, 0xf4, 0x3e, 0x3d, 0x7f, 0xfa, + 0x18, 0x42, 0xf7, 0xdf, 0x21, 0x27, 0x58, 0xa9, 0x54, 0xc9, 0x05, 0x71, + 0x95, 0xe1, 0x1f, 0x64, 0x11, 0x14, 0x9d, 0x09, 0x89, 0x39, 0x0a, 0x51, + 0x11, 0x5f, 0xa4, 0x32, 0xec, 0x0b, 0x17, 0xff, 0xa2, 0x66, 0x2d, 0x83, + 0xcf, 0x8d, 0x89, 0x62, 0xff, 0x7e, 0x4d, 0x0f, 0xed, 0xe5, 0x8a, 0xfa, + 0x2a, 0xf8, 0x55, 0xe4, 0xbb, 0xb3, 0xa9, 0x62, 0xe0, 0xf8, 0xb1, 0x7e, + 0xf0, 0x58, 0x5b, 0x2c, 0x5a, 0x7e, 0x78, 0x64, 0x33, 0x51, 0xa2, 0x20, + 0xe0, 0xbb, 0x60, 0x96, 0x29, 0x62, 0xd9, 0x85, 0xff, 0x41, 0x3b, 0x9c, + 0xd5, 0x8b, 0xf8, 0x5b, 0x4f, 0xa4, 0x6b, 0x15, 0xb1, 0xf6, 0xb9, 0x37, + 0x86, 0x2f, 0xd2, 0x5e, 0xfe, 0x2c, 0x5f, 0xa7, 0x34, 0xd0, 0x58, 0xa7, + 0x3c, 0xe2, 0x27, 0xbf, 0x7b, 0x22, 0x73, 0xac, 0x5f, 0xa7, 0xb0, 0x02, + 0x56, 0x2a, 0x4f, 0x48, 0x8a, 0x6f, 0xfd, 0xd3, 0x3d, 0xf9, 0x37, 0x35, + 0x8b, 0x17, 0x73, 0x16, 0x2d, 0xe5, 0x8b, 0x4c, 0x0d, 0x49, 0x0b, 0xd3, + 0x22, 0x3f, 0xa3, 0x55, 0xfb, 0xf2, 0xfc, 0x95, 0x8a, 0x93, 0xcb, 0x62, + 0x4b, 0xdf, 0x70, 0xd6, 0x2f, 0xcf, 0xd3, 0xcf, 0xb2, 0xc5, 0xfb, 0xdf, + 0x9d, 0x41, 0x62, 0xff, 0xd8, 0x79, 0x29, 0x01, 0xda, 0x0b, 0x17, 0xfc, + 0x4e, 0x6c, 0xfb, 0x8f, 0xa5, 0x8b, 0xff, 0xdf, 0x13, 0x43, 0xbf, 0x6a, + 0x73, 0xbc, 0x58, 0xa3, 0xa2, 0x17, 0x87, 0x37, 0xfb, 0x36, 0xdf, 0xf3, + 0xae, 0x2c, 0x5f, 0x43, 0xd9, 0xba, 0xc5, 0x61, 0xfe, 0xe8, 0x8d, 0x8d, + 0xad, 0x2b, 0x17, 0xff, 0xbb, 0xc1, 0xf2, 0x5e, 0x0f, 0xe6, 0xfa, 0xc5, + 0x11, 0xed, 0x88, 0x46, 0xff, 0xbe, 0xd0, 0x98, 0x8a, 0x4e, 0xb1, 0x7f, + 0xcc, 0xe3, 0x26, 0x84, 0x25, 0x62, 0xfb, 0xdf, 0x70, 0x96, 0x2c, 0x3f, + 0x9e, 0xdb, 0x1b, 0xde, 0x0f, 0x22, 0x58, 0xbf, 0x8f, 0xd5, 0xe7, 0xd6, + 0xeb, 0x17, 0xfd, 0xde, 0xff, 0x7e, 0x8e, 0x43, 0x58, 0xb1, 0x62, 0x23, + 0xdc, 0x7d, 0x8c, 0xef, 0xfa, 0x1c, 0x91, 0x77, 0x21, 0xca, 0xc5, 0xff, + 0x49, 0xf9, 0xe2, 0x60, 0x71, 0x62, 0xff, 0xfb, 0x3e, 0xf2, 0x5e, 0xe7, + 0x89, 0x81, 0xc5, 0x8b, 0xdd, 0x07, 0x32, 0x8c, 0x2f, 0x9d, 0x91, 0xcd, + 0xfe, 0xce, 0x18, 0x3c, 0xc2, 0x58, 0xa7, 0x3f, 0x4f, 0xa0, 0xdf, 0xff, + 0x36, 0xbb, 0x87, 0xe4, 0xb6, 0x8b, 0xf3, 0xb2, 0xc5, 0xfd, 0x90, 0x89, + 0x9b, 0x65, 0x8b, 0x1d, 0x62, 0xff, 0xe9, 0x3e, 0x79, 0xf9, 0x98, 0x46, + 0xac, 0x5d, 0x9b, 0x98, 0x7a, 0xa0, 0x12, 0xbf, 0x8e, 0xf2, 0x76, 0x25, + 0x8a, 0xd2, 0x37, 0xff, 0x08, 0x40, 0x17, 0xdf, 0xfc, 0xe7, 0x18, 0x9b, + 0x50, 0xce, 0xfc, 0xb1, 0x58, 0x7f, 0x7b, 0x9a, 0xd4, 0x13, 0xd0, 0x28, + 0xeb, 0xaf, 0xf1, 0xbf, 0x62, 0x16, 0x7d, 0x62, 0xff, 0xcc, 0x40, 0xef, + 0xda, 0x9c, 0x09, 0x62, 0xff, 0xbe, 0xd0, 0xfb, 0x44, 0x20, 0xd6, 0x2f, + 0xfd, 0xcf, 0xb9, 0x9d, 0xc2, 0x73, 0x65, 0x8b, 0xf3, 0x38, 0xc5, 0x2b, + 0x17, 0xda, 0x78, 0xb8, 0xb1, 0x76, 0x0c, 0xc3, 0xcb, 0xd1, 0x3d, 0xc6, + 0x75, 0x2c, 0x54, 0x7a, 0x6a, 0x7f, 0x40, 0x01, 0xe7, 0xa1, 0x1b, 0xd0, + 0xba, 0xa5, 0x3d, 0xcc, 0x8e, 0x1e, 0xf6, 0x0e, 0x39, 0x62, 0xff, 0xd8, + 0xd8, 0x37, 0xe8, 0x1b, 0x8d, 0x62, 0xff, 0xff, 0xde, 0x9c, 0x2e, 0xfc, + 0x66, 0x71, 0xc8, 0x05, 0x9e, 0xfe, 0x2c, 0x5f, 0x3c, 0xf7, 0x05, 0x8b, + 0x98, 0xe6, 0x22, 0x3b, 0xed, 0x74, 0x34, 0x7e, 0xfe, 0x19, 0xd7, 0x8b, + 0x02, 0x58, 0xbf, 0xd8, 0x71, 0xb8, 0x05, 0x05, 0x8b, 0xef, 0xb3, 0x1d, + 0x62, 0xf9, 0xbf, 0xf7, 0x58, 0xa2, 0x3c, 0x4e, 0x84, 0x57, 0xe2, 0x84, + 0x73, 0x6c, 0xb1, 0x52, 0x79, 0xe1, 0x91, 0xdf, 0xfb, 0x3a, 0x7d, 0xf3, + 0x82, 0x6e, 0xd6, 0x2a, 0x57, 0x2e, 0x61, 0x28, 0x14, 0xd2, 0x87, 0x8c, + 0x76, 0x22, 0x8f, 0x8e, 0x82, 0x18, 0xfc, 0x22, 0xbf, 0xff, 0xdd, 0x7b, + 0xe8, 0x7f, 0x9c, 0xfb, 0x85, 0x1a, 0xfc, 0xf1, 0xd8, 0xb1, 0x7f, 0xff, + 0x9f, 0xa1, 0x0b, 0x86, 0x06, 0x52, 0x3f, 0xb4, 0x33, 0x8b, 0x17, 0x1a, + 0xeb, 0x17, 0xf6, 0x9c, 0x5d, 0x7e, 0x79, 0x62, 0x96, 0x24, 0xd9, 0xd6, + 0xcc, 0xe8, 0xf1, 0xc3, 0xe8, 0xd2, 0x0d, 0xc7, 0xbb, 0x2b, 0x8f, 0x29, + 0xd4, 0x67, 0xe7, 0x84, 0x47, 0xc8, 0x5a, 0x12, 0x85, 0x0b, 0x6e, 0x46, + 0xd1, 0xe9, 0xea, 0xa1, 0x42, 0x1b, 0xa3, 0x7c, 0x73, 0x27, 0x52, 0x5d, + 0xfd, 0xc6, 0xc1, 0xbf, 0x45, 0x8b, 0xf7, 0xf3, 0x53, 0x05, 0x8b, 0xfb, + 0xb8, 0x73, 0xf9, 0xb2, 0xc5, 0x0c, 0xf6, 0x7e, 0x51, 0x7f, 0xcd, 0xf8, + 0x9c, 0xbf, 0x9d, 0xac, 0x54, 0x9e, 0xe6, 0x11, 0x5f, 0xfe, 0x7e, 0x67, + 0xc5, 0xbf, 0x9f, 0xcf, 0xda, 0xc5, 0xdd, 0xec, 0xb1, 0x60, 0x2c, 0x50, + 0x8d, 0x60, 0x43, 0x57, 0xfc, 0x0e, 0x7b, 0x30, 0xbd, 0xc5, 0x8b, 0xf4, + 0x50, 0x9f, 0x71, 0x62, 0xfa, 0x74, 0x6c, 0xac, 0x5d, 0xc0, 0x2c, 0x51, + 0x89, 0x9c, 0x7d, 0xe1, 0x88, 0x80, 0x73, 0xe2, 0xa8, 0xe2, 0x3b, 0xff, + 0xff, 0xd8, 0x40, 0xc2, 0xf7, 0xf3, 0xf3, 0x91, 0x3e, 0xa2, 0xfb, 0xf7, + 0xe5, 0x8b, 0xfe, 0xf3, 0x17, 0xb3, 0x6c, 0xd9, 0x62, 0xff, 0xff, 0xff, + 0xe6, 0xe9, 0xf6, 0x80, 0x87, 0x9f, 0x79, 0x83, 0x14, 0x9f, 0x05, 0xd7, + 0xbf, 0x84, 0xdb, 0x4e, 0x96, 0x2b, 0xe9, 0xab, 0x79, 0xe0, 0x33, 0xab, + 0xfd, 0xb6, 0x16, 0x76, 0x0e, 0x2c, 0x5e, 0x04, 0xf4, 0x58, 0xb4, 0x16, + 0x2b, 0x0d, 0x88, 0x63, 0xf7, 0xf6, 0x9f, 0x7f, 0xe4, 0x4b, 0x17, 0xff, + 0xbe, 0xc6, 0x07, 0xef, 0x3c, 0x4f, 0xf1, 0x2c, 0x5e, 0x87, 0x31, 0x62, + 0xff, 0xff, 0x48, 0x22, 0x84, 0xec, 0x1c, 0xed, 0xbf, 0xdb, 0x53, 0xda, + 0xc5, 0xff, 0x03, 0x3d, 0x3d, 0x1c, 0x80, 0xb1, 0x76, 0x45, 0x04, 0x50, + 0xb3, 0x3d, 0x18, 0x99, 0xd3, 0x27, 0x14, 0x2f, 0xaf, 0xf7, 0x9f, 0x67, + 0xee, 0x3b, 0x16, 0x2b, 0xb4, 0xfe, 0x0e, 0x43, 0xe8, 0xda, 0x83, 0x35, + 0xbf, 0xec, 0x10, 0xcc, 0x9e, 0x4c, 0x16, 0x2f, 0x8b, 0xcf, 0xf5, 0x8a, + 0x30, 0xf7, 0x18, 0xea, 0xe6, 0x3a, 0xc5, 0xff, 0x0a, 0x2f, 0xbc, 0x5c, + 0x93, 0xac, 0x53, 0x9e, 0x9e, 0x85, 0xeb, 0x15, 0xe4, 0x68, 0xc9, 0xa5, + 0x2f, 0x02, 0x14, 0x5e, 0x75, 0xbd, 0x38, 0x12, 0xc5, 0xfe, 0x7e, 0x14, + 0xfa, 0x60, 0xb1, 0x6e, 0xbd, 0x62, 0x88, 0xf9, 0xb8, 0x3b, 0xe3, 0x2b, + 0xfb, 0x07, 0xf7, 0x1c, 0xac, 0x5f, 0x4f, 0x7c, 0x65, 0x8a, 0x32, 0x10, + 0x8b, 0x91, 0xb9, 0x57, 0x58, 0x35, 0x1a, 0x30, 0xcd, 0x2b, 0xab, 0x68, + 0x7a, 0xc0, 0xe8, 0x71, 0x86, 0xe5, 0xe8, 0xd8, 0x1b, 0x1e, 0x96, 0xf0, + 0xe6, 0xee, 0x35, 0x47, 0x9c, 0xa1, 0x8f, 0x8c, 0xf2, 0x28, 0x59, 0xea, + 0x16, 0x9f, 0x7d, 0x6a, 0x78, 0x0f, 0x5f, 0x19, 0x21, 0x43, 0x93, 0xd1, + 0xac, 0x0a, 0x75, 0xe7, 0xa4, 0x2f, 0x23, 0x8b, 0x83, 0x2d, 0xbf, 0xd3, + 0xf1, 0x78, 0x98, 0xd5, 0x8b, 0xd9, 0xd3, 0x16, 0x2f, 0x73, 0x9c, 0x58, + 0xbb, 0xad, 0x75, 0x8b, 0xff, 0x8b, 0x7f, 0xe7, 0x3d, 0x98, 0x7e, 0x2c, + 0x5f, 0xfc, 0x4e, 0x7c, 0x1f, 0xc5, 0xbc, 0x52, 0xb1, 0x7a, 0x11, 0x32, + 0xc5, 0xff, 0xd8, 0x79, 0x0c, 0x85, 0x02, 0xc3, 0xac, 0x57, 0x67, 0xc4, + 0x43, 0xd7, 0x7e, 0x56, 0x29, 0xcd, 0xcf, 0x88, 0xaf, 0xf8, 0xbd, 0xfc, + 0x98, 0x4f, 0x16, 0x2f, 0xb0, 0xdc, 0x1a, 0xc5, 0xff, 0xfc, 0x3c, 0x1b, + 0x39, 0x4f, 0xd9, 0xe1, 0x07, 0x1a, 0xc5, 0x4a, 0x2c, 0xfe, 0x70, 0x22, + 0x3b, 0xf1, 0x0a, 0x19, 0xc5, 0x8b, 0xfe, 0xc1, 0xfe, 0x7d, 0xf9, 0xe2, + 0xc5, 0xc3, 0x7c, 0x3e, 0x12, 0x28, 0xbf, 0xfc, 0xf3, 0xef, 0x89, 0x8f, + 0x14, 0x27, 0x65, 0x8b, 0xf8, 0xb3, 0x5a, 0xce, 0xd6, 0x2b, 0xe7, 0xf5, + 0xc4, 0xcb, 0xf7, 0x8b, 0x1a, 0x0b, 0x17, 0xfe, 0x6f, 0x13, 0x73, 0xec, + 0x0e, 0x2c, 0x5f, 0xec, 0x39, 0x82, 0xf4, 0x25, 0x62, 0xf9, 0xff, 0x87, + 0x58, 0xbf, 0xa7, 0x7f, 0xf6, 0xd1, 0xeb, 0x15, 0x87, 0xab, 0xa2, 0x2b, + 0xff, 0xf9, 0xbf, 0x30, 0x83, 0x82, 0x7e, 0xff, 0x97, 0xd9, 0x62, 0xb6, + 0x4d, 0x0c, 0x67, 0xda, 0x84, 0x57, 0x42, 0x1b, 0xc5, 0x3c, 0x58, 0xbe, + 0xc2, 0xc3, 0xac, 0x5f, 0xf8, 0x53, 0x17, 0x24, 0x8f, 0x3c, 0x58, 0xa5, + 0x8a, 0x94, 0x44, 0x40, 0x73, 0x84, 0x22, 0x3f, 0xbf, 0x09, 0x86, 0x79, + 0x58, 0xbf, 0xb6, 0xc0, 0xb3, 0xbf, 0x2c, 0x5f, 0xdf, 0x90, 0x14, 0xc4, + 0xb1, 0x46, 0x9e, 0xff, 0x66, 0x37, 0xff, 0x8a, 0x76, 0x61, 0xfe, 0x7e, + 0x58, 0x6a, 0xc5, 0x61, 0xf7, 0x39, 0x25, 0xff, 0xfd, 0x07, 0xf1, 0x37, + 0x7c, 0x6f, 0x16, 0x47, 0xfd, 0xd6, 0x2f, 0xf4, 0x87, 0xb9, 0x67, 0xf1, + 0x62, 0xb7, 0x4e, 0x9b, 0x50, 0xf5, 0x62, 0x0f, 0x2e, 0xdf, 0xf7, 0xde, + 0x1f, 0x68, 0x39, 0xd6, 0x2f, 0xf3, 0x3e, 0xb4, 0xe1, 0x79, 0x62, 0xff, + 0x7b, 0x7f, 0x79, 0xa1, 0xc5, 0x8b, 0xd3, 0xd7, 0x5e, 0xbb, 0x58, 0xae, + 0xcf, 0x88, 0x8d, 0xaf, 0xfd, 0xc7, 0x2e, 0xe1, 0xe7, 0xe3, 0xac, 0x56, + 0x26, 0x61, 0xf3, 0x96, 0x84, 0xb7, 0x88, 0xaf, 0x13, 0xc4, 0xb1, 0x7f, + 0xfb, 0x3d, 0xf9, 0x0e, 0x42, 0x90, 0xf4, 0x6a, 0xc5, 0x39, 0xf5, 0xfc, + 0x76, 0xfc, 0x03, 0xce, 0x9d, 0x62, 0xff, 0xf1, 0xf5, 0x3f, 0xcc, 0x19, + 0x66, 0xd2, 0xb1, 0x7e, 0xf7, 0xe4, 0x5d, 0x7a, 0xc5, 0xdf, 0x65, 0x8b, + 0xed, 0x8a, 0x76, 0x58, 0xa9, 0x46, 0xd6, 0x14, 0x32, 0x4f, 0x8b, 0x84, + 0x2f, 0x7f, 0xf3, 0xf4, 0x71, 0xc9, 0x49, 0xe6, 0x0b, 0x17, 0xff, 0xec, + 0x23, 0x7e, 0xd9, 0xb9, 0x0b, 0xdc, 0x21, 0xac, 0x5f, 0xf9, 0xcf, 0x83, + 0xfb, 0xf0, 0xb1, 0x62, 0xff, 0x00, 0x30, 0x66, 0x14, 0x16, 0x2f, 0x48, + 0xe5, 0x62, 0xa4, 0xf4, 0x0e, 0x69, 0x4e, 0x98, 0x21, 0x2b, 0x72, 0x11, + 0xb7, 0xff, 0xb8, 0xfb, 0x7e, 0x4e, 0x2e, 0xf9, 0xf9, 0x58, 0xbf, 0xff, + 0xf6, 0x78, 0xd6, 0x0f, 0xda, 0x9c, 0x23, 0xb0, 0xf3, 0x08, 0xd5, 0x8a, + 0x96, 0x68, 0x06, 0xc8, 0xb0, 0x87, 0x08, 0xe1, 0xa7, 0x90, 0x90, 0xde, + 0x14, 0xbd, 0x91, 0x3c, 0x6d, 0x51, 0x43, 0x3b, 0x51, 0xf1, 0x1e, 0x37, + 0x3f, 0xc2, 0xb0, 0xa1, 0xf7, 0xc4, 0x7f, 0x46, 0x90, 0x11, 0xa4, 0x72, + 0x6d, 0xf7, 0xf0, 0x0c, 0xb1, 0x74, 0x6a, 0x3a, 0xc5, 0xf1, 0x4e, 0xa0, + 0xb1, 0x7f, 0xdf, 0x98, 0x39, 0x10, 0xbb, 0x58, 0xbb, 0x77, 0x58, 0xbf, + 0xc3, 0xfc, 0xc4, 0x22, 0x75, 0x8b, 0x06, 0xb1, 0x79, 0xca, 0x56, 0x29, + 0x8d, 0x77, 0x04, 0xea, 0x3d, 0x10, 0x5e, 0x62, 0xbf, 0xe9, 0x83, 0xfa, + 0x12, 0x40, 0x58, 0xbf, 0xbc, 0x18, 0x01, 0x3d, 0xac, 0x5e, 0xf4, 0xe9, + 0x62, 0xd3, 0x87, 0x9d, 0xd9, 0x8d, 0xf7, 0xdc, 0x5d, 0x7a, 0xc5, 0xe3, + 0x88, 0xeb, 0x17, 0xb0, 0x8d, 0x58, 0xbf, 0xfb, 0xed, 0xc2, 0x90, 0x07, + 0x01, 0x69, 0x62, 0xfd, 0x9a, 0x66, 0x1a, 0xc5, 0x75, 0xaa, 0xad, 0xa4, + 0x7b, 0x08, 0xb7, 0x39, 0x78, 0x4d, 0x68, 0x98, 0xf0, 0x86, 0xf9, 0x3b, + 0x14, 0x75, 0xe3, 0xdc, 0x1d, 0x0d, 0x1a, 0xfd, 0x26, 0x4f, 0xb7, 0x58, + 0xad, 0x23, 0x8c, 0xa1, 0x73, 0x7b, 0xd9, 0x1e, 0xb1, 0x7f, 0xb5, 0x90, + 0x6d, 0x30, 0x6b, 0x17, 0xf4, 0x9e, 0x7f, 0x20, 0x58, 0xbf, 0xe7, 0xf9, + 0x4e, 0x68, 0xcc, 0x58, 0xa3, 0x0f, 0x97, 0xe5, 0xb6, 0x25, 0x8b, 0xfe, + 0x98, 0xf2, 0x6f, 0x41, 0xfa, 0x2c, 0x5e, 0xfc, 0x8d, 0x62, 0xfe, 0x29, + 0xdf, 0x53, 0x05, 0x8b, 0xff, 0xcc, 0xfe, 0x80, 0x8b, 0xdc, 0xfb, 0x41, + 0x60, 0x33, 0x5d, 0x7e, 0x1b, 0x8b, 0x46, 0xac, 0x5d, 0x3f, 0x58, 0xbf, + 0xdb, 0x96, 0x7f, 0x1c, 0x25, 0x8a, 0x74, 0xc6, 0xfe, 0x96, 0xcb, 0x7d, + 0x0a, 0x83, 0x17, 0xbf, 0xf7, 0x03, 0xf3, 0x90, 0xa1, 0x9c, 0x58, 0xb8, + 0x7c, 0x58, 0xa8, 0x27, 0xf9, 0x1f, 0x1a, 0xc7, 0xd3, 0x09, 0x02, 0xff, + 0xfe, 0xce, 0xf3, 0x8c, 0x5f, 0x79, 0xf7, 0xc4, 0xc7, 0x58, 0xbf, 0x43, + 0x9d, 0x96, 0x96, 0x2f, 0xff, 0xfd, 0xdf, 0xa7, 0x6f, 0xbc, 0x5a, 0x90, + 0xb3, 0x5e, 0xf4, 0xe7, 0x16, 0x2b, 0x48, 0x9a, 0xf1, 0x55, 0x18, 0xc8, + 0x28, 0x99, 0x77, 0x7b, 0x13, 0xe1, 0x06, 0xf0, 0x99, 0x72, 0x36, 0x94, + 0x1a, 0x48, 0xc2, 0x87, 0xa5, 0xcf, 0x8b, 0x17, 0xfb, 0xdc, 0x14, 0x7f, + 0x9b, 0xeb, 0x14, 0x73, 0xce, 0xe8, 0x2d, 0x7b, 0x8d, 0xba, 0xc5, 0xb1, + 0x62, 0xfc, 0x23, 0xbf, 0xe5, 0x62, 0xfd, 0x9a, 0xde, 0x71, 0x62, 0xb6, + 0x3e, 0x12, 0x11, 0x0c, 0xa2, 0xff, 0xb0, 0xf9, 0xa7, 0xd9, 0x8e, 0xb1, + 0x7f, 0xef, 0xc9, 0xbe, 0x72, 0x70, 0x71, 0x62, 0xf7, 0x36, 0xd2, 0xc5, + 0xe2, 0x9f, 0xac, 0x5c, 0xda, 0x30, 0xdd, 0xc8, 0xfd, 0xff, 0x49, 0x6e, + 0x63, 0xeb, 0x37, 0x58, 0xbf, 0xfb, 0xdf, 0xc3, 0xe6, 0xf3, 0xf9, 0x3a, + 0xc5, 0xf1, 0x0b, 0x3e, 0xb1, 0x46, 0x1f, 0x3b, 0x22, 0xde, 0x63, 0xf1, + 0x62, 0xb0, 0xdf, 0xb1, 0x15, 0x01, 0x30, 0x0f, 0x43, 0x86, 0xec, 0xd9, + 0x62, 0xfd, 0xac, 0xf7, 0xdd, 0x62, 0xff, 0xa1, 0x9a, 0xd6, 0x7b, 0xee, + 0xb1, 0x7d, 0x3f, 0x0c, 0x7a, 0x3e, 0x1f, 0x14, 0x5f, 0x7e, 0x75, 0x8b, + 0x17, 0xd9, 0x13, 0xca, 0xc5, 0xed, 0xc9, 0x8c, 0x3c, 0x4f, 0x91, 0x5f, + 0xf1, 0x4f, 0x71, 0xc6, 0xfb, 0x3e, 0xb1, 0x7f, 0xf6, 0x6b, 0x27, 0x98, + 0x3f, 0xb4, 0x16, 0x29, 0x62, 0xde, 0x81, 0xe7, 0xc7, 0x21, 0xd1, 0xd1, + 0x70, 0x50, 0x8d, 0xa9, 0x4c, 0x4d, 0xa1, 0xd9, 0x76, 0x1d, 0x62, 0xf4, + 0x73, 0x81, 0x62, 0xff, 0xf8, 0xbc, 0xcd, 0xf2, 0x9f, 0x70, 0x2c, 0xfa, + 0xc5, 0xcd, 0x1e, 0xb1, 0x7f, 0x47, 0x47, 0x1f, 0x83, 0xd9, 0x62, 0x86, + 0x8d, 0x77, 0x17, 0x62, 0x0f, 0x27, 0xc7, 0x0d, 0x5f, 0xfb, 0x0f, 0x9d, + 0x59, 0x82, 0xeb, 0xf8, 0xb1, 0x7f, 0x06, 0x36, 0xd6, 0x1d, 0x62, 0xff, + 0xd8, 0x36, 0x81, 0x36, 0x9a, 0x0b, 0x17, 0xdd, 0x24, 0xa0, 0xb1, 0x79, + 0x9f, 0x4b, 0x16, 0xd1, 0x88, 0xac, 0x19, 0x7e, 0x1e, 0xfc, 0x92, 0xbc, + 0x99, 0xa8, 0x70, 0xf2, 0xbf, 0xf7, 0x27, 0x50, 0xfc, 0xef, 0x84, 0xb1, + 0x7f, 0xff, 0x1c, 0x98, 0xdf, 0xbf, 0xa6, 0x11, 0x42, 0x75, 0xb2, 0xc5, + 0xff, 0xc7, 0xe3, 0x43, 0x53, 0xc9, 0x2d, 0x96, 0x2f, 0xfa, 0x7d, 0xfc, + 0x3e, 0x6b, 0x16, 0x2f, 0xde, 0xfb, 0xcf, 0x16, 0x2e, 0x62, 0xd1, 0xf0, + 0x70, 0xe2, 0xff, 0xfb, 0x07, 0xf9, 0xe4, 0x1f, 0x9c, 0x9d, 0x41, 0x62, + 0xb6, 0x3f, 0xc8, 0xe2, 0xcb, 0xff, 0xf7, 0xa7, 0xdc, 0x2c, 0xfb, 0xcf, + 0xbe, 0xd0, 0x58, 0xb3, 0xac, 0x53, 0x9f, 0x2f, 0xd5, 0x2f, 0xfa, 0x41, + 0xc1, 0x89, 0xb5, 0x05, 0x8b, 0xed, 0xd9, 0xb7, 0x5c, 0x80, 0x65, 0xb2, + 0x07, 0xd7, 0xa3, 0xab, 0xfe, 0x3b, 0x76, 0xd0, 0xe3, 0xc1, 0x62, 0xff, + 0xa7, 0xfb, 0xbf, 0x19, 0xf6, 0x58, 0xa3, 0x11, 0x37, 0x84, 0xfa, 0x3a, + 0xb7, 0x45, 0x8a, 0x93, 0xc4, 0xc3, 0x0b, 0x01, 0x62, 0xe6, 0x82, 0xc5, + 0x49, 0xa9, 0x38, 0x95, 0x7c, 0xfa, 0x40, 0x93, 0x71, 0x62, 0xc5, 0xcc, + 0x05, 0x8a, 0x93, 0xcf, 0x22, 0x2f, 0x0b, 0x5b, 0x75, 0x8a, 0xd1, 0xe0, + 0x11, 0x6d, 0x4a, 0xe4, 0x76, 0x2f, 0x34, 0x64, 0x3c, 0x84, 0x58, 0x72, + 0x98, 0xe8, 0x6c, 0xbe, 0x43, 0x4e, 0x77, 0x7a, 0xee, 0x32, 0xcd, 0x14, + 0x9d, 0xe7, 0xf1, 0xc8, 0x82, 0x1f, 0xc5, 0x1c, 0x07, 0x0a, 0xbd, 0x39, + 0x9b, 0x71, 0xb8, 0xb1, 0x74, 0xc7, 0x2c, 0x5f, 0xd0, 0xcd, 0x69, 0xa0, + 0xb1, 0x61, 0x9a, 0x7c, 0x1f, 0x18, 0xf0, 0xd5, 0x86, 0xb1, 0x7f, 0xf3, + 0x7b, 0x82, 0x87, 0xd9, 0xc9, 0x96, 0x2b, 0xb3, 0xd5, 0x38, 0x95, 0xff, + 0xf8, 0x65, 0x9c, 0x9d, 0x19, 0xcf, 0xb0, 0xe4, 0x6b, 0x17, 0x4c, 0x4b, + 0x14, 0xe7, 0xdc, 0x1a, 0xb5, 0xe7, 0x98, 0x2c, 0x5e, 0xe9, 0x3f, 0x58, + 0xa9, 0x67, 0xa6, 0xc0, 0x93, 0x1f, 0xde, 0x98, 0x28, 0xd1, 0x8e, 0x82, + 0x11, 0x7c, 0x84, 0x8f, 0x88, 0x83, 0x1c, 0xbf, 0x3f, 0x9a, 0x3b, 0x16, + 0x2f, 0xd9, 0xa8, 0x07, 0x05, 0x8b, 0xc7, 0x29, 0x58, 0xbf, 0xdb, 0x72, + 0x4e, 0xdd, 0xf9, 0x62, 0xff, 0xcf, 0xe8, 0x7d, 0xfd, 0xcf, 0xba, 0xc5, + 0x6c, 0x8b, 0xbd, 0x15, 0x10, 0xe7, 0x43, 0x6b, 0x9b, 0xb5, 0x8b, 0xdf, + 0x68, 0xf5, 0x8b, 0xe9, 0x04, 0x76, 0x2c, 0x5f, 0x1c, 0xed, 0xe5, 0x8a, + 0x82, 0x74, 0x99, 0x0e, 0x53, 0x9f, 0x80, 0x63, 0xc4, 0x01, 0x92, 0xdf, + 0xd9, 0xd4, 0xcd, 0xfe, 0x2c, 0x5f, 0xfd, 0x9c, 0xf3, 0x76, 0x1f, 0x54, + 0x94, 0x16, 0x2d, 0x8b, 0x17, 0xff, 0x61, 0x34, 0x3e, 0xc7, 0x3b, 0x41, + 0x62, 0xd1, 0x46, 0x87, 0xa9, 0x1b, 0x08, 0xdf, 0xff, 0xe7, 0x16, 0xd1, + 0x33, 0x6d, 0xec, 0x88, 0xa4, 0xff, 0x65, 0x8b, 0xff, 0xff, 0xb8, 0xe3, + 0xfc, 0xf0, 0x7f, 0x9d, 0x77, 0xbb, 0xf7, 0x16, 0xa4, 0x25, 0x8b, 0xe7, + 0xd4, 0xf4, 0x58, 0xbf, 0xf8, 0xe2, 0x34, 0xb0, 0x1e, 0xe6, 0x6c, 0xb1, + 0x6d, 0x86, 0x7d, 0x78, 0x49, 0x7f, 0xfe, 0xe1, 0x98, 0x33, 0x39, 0x9a, + 0x01, 0xf2, 0x3b, 0x16, 0x2b, 0x49, 0xb3, 0x14, 0x38, 0xfc, 0x51, 0x7f, + 0xff, 0xb3, 0x46, 0x6f, 0xf7, 0x1e, 0x9c, 0x5b, 0x06, 0x36, 0xd9, 0x62, + 0xf4, 0x34, 0x75, 0x8b, 0xed, 0xfe, 0xfb, 0x2c, 0x5f, 0xf1, 0xf3, 0xa8, + 0x3d, 0x4f, 0xe5, 0x62, 0xe2, 0x37, 0xe8, 0x80, 0x61, 0xe0, 0xc9, 0x6f, + 0x78, 0x02, 0x58, 0xad, 0xd3, 0x41, 0x78, 0x73, 0x91, 0xe5, 0xf8, 0xf1, + 0xbc, 0x6f, 0x1b, 0xf5, 0x8b, 0x17, 0xff, 0xf4, 0x33, 0x8f, 0xad, 0x39, + 0xc3, 0xf7, 0xf0, 0x2f, 0x2c, 0x5f, 0xf9, 0x8b, 0x72, 0x6e, 0xe1, 0xf9, + 0x58, 0xa9, 0x55, 0x0d, 0x91, 0xbb, 0x39, 0xab, 0x1f, 0x09, 0x7a, 0xff, + 0x6a, 0x49, 0x8e, 0x77, 0x58, 0xbf, 0xfc, 0x79, 0xdc, 0x72, 0xda, 0xf8, + 0x4c, 0x35, 0x8b, 0x99, 0xd6, 0x2b, 0x0f, 0x8b, 0x89, 0x97, 0x99, 0x8e, + 0xb1, 0x7f, 0xd8, 0x01, 0x70, 0x1c, 0x70, 0x96, 0x28, 0x67, 0xae, 0x43, + 0x97, 0xef, 0xc8, 0xde, 0x56, 0x28, 0xd3, 0xc8, 0x08, 0x86, 0xb7, 0x4d, + 0xe0, 0xf0, 0x94, 0x68, 0x60, 0x5f, 0xed, 0x67, 0xff, 0x3d, 0xc1, 0x62, + 0xff, 0xfb, 0xec, 0xfe, 0x97, 0x86, 0x10, 0x01, 0x2b, 0x17, 0x9b, 0xf2, + 0xb1, 0x76, 0x01, 0x62, 0xdb, 0x7c, 0xd9, 0x84, 0x39, 0x7e, 0x0e, 0x75, + 0x84, 0xb1, 0x7f, 0xdf, 0x9e, 0x7b, 0x98, 0x2e, 0xbd, 0x62, 0xff, 0xd2, + 0xff, 0xfe, 0x7b, 0xf9, 0x05, 0x8b, 0xfd, 0x85, 0x0c, 0xe0, 0x67, 0x58, + 0xb1, 0x0d, 0x16, 0x3a, 0x3f, 0xf1, 0xf5, 0x4a, 0x61, 0xd9, 0x0d, 0x9b, + 0xff, 0xd9, 0xf7, 0xe9, 0x39, 0xad, 0x84, 0xc3, 0x58, 0xa8, 0x2a, 0x5f, + 0x88, 0xd5, 0xa1, 0x00, 0x14, 0x66, 0xe1, 0x93, 0xdf, 0xa7, 0x6e, 0x11, + 0xd6, 0x2f, 0xff, 0x43, 0x3b, 0x80, 0x72, 0x08, 0xc0, 0x82, 0x09, 0x22, + 0xfa, 0x62, 0x3e, 0x2c, 0x5f, 0x8e, 0x16, 0x3f, 0x45, 0x8b, 0xb0, 0xa2, + 0x45, 0x17, 0xd5, 0x03, 0x23, 0xbf, 0xfe, 0xe7, 0x3e, 0x2d, 0xe6, 0x0f, + 0xa0, 0x61, 0x2c, 0x54, 0x11, 0x1a, 0x11, 0xe5, 0x4a, 0x7a, 0xae, 0xb2, + 0xd1, 0xac, 0x5f, 0xff, 0x6a, 0x03, 0xfc, 0xf0, 0xb0, 0x26, 0xd1, 0xab, + 0x17, 0x80, 0x2e, 0x2c, 0x5f, 0xb3, 0x0a, 0x60, 0xb1, 0x6e, 0x49, 0xe2, + 0x10, 0xf5, 0x32, 0x2f, 0x3d, 0x09, 0x6a, 0x96, 0x67, 0xc0, 0xd7, 0x70, + 0xc1, 0xe1, 0x3b, 0xa3, 0x3f, 0xce, 0x27, 0xb4, 0x78, 0xc5, 0x38, 0xde, + 0x28, 0x78, 0x5e, 0xfb, 0x84, 0xb1, 0x7f, 0xc3, 0xc8, 0x7e, 0x7a, 0x0e, + 0x56, 0x2f, 0x75, 0x91, 0xbf, 0x58, 0xb1, 0x7c, 0xe5, 0x0e, 0x18, 0x7d, + 0x1d, 0x75, 0x3b, 0xbf, 0xf3, 0x83, 0x05, 0xd7, 0xb9, 0x7f, 0x16, 0x2e, + 0xd1, 0xab, 0x14, 0x47, 0xb6, 0x1a, 0x15, 0xf4, 0x5c, 0xc8, 0x96, 0x2f, + 0xc0, 0x9f, 0x64, 0x7a, 0xc5, 0xd1, 0x62, 0xc5, 0xf1, 0xaf, 0xdf, 0x16, + 0x2f, 0xe7, 0x34, 0xd9, 0x2f, 0x2c, 0x58, 0x6c, 0x7d, 0x9e, 0x18, 0x8e, + 0x25, 0xbf, 0xb9, 0xad, 0x3c, 0x5c, 0x58, 0xbf, 0xb3, 0xdb, 0xfd, 0xe2, + 0x58, 0xbf, 0xb3, 0x5b, 0xb3, 0x6e, 0xa9, 0x02, 0x4b, 0xff, 0x4c, 0x0b, + 0x3f, 0xe2, 0x90, 0x2c, 0x54, 0x9f, 0xc9, 0x1e, 0x5f, 0xf1, 0x67, 0x60, + 0xe3, 0x66, 0xeb, 0x17, 0xfb, 0xd9, 0xad, 0xd9, 0xb7, 0x54, 0x9f, 0x25, + 0xfe, 0xd3, 0x97, 0xb8, 0xe3, 0x58, 0xa9, 0x3f, 0x56, 0x42, 0xbe, 0x1f, + 0xe4, 0xd5, 0x8b, 0xec, 0x32, 0x12, 0xb1, 0x4c, 0x78, 0xe0, 0x24, 0xbf, + 0xff, 0xb5, 0x83, 0xfc, 0xf7, 0x0d, 0x4f, 0xb8, 0x19, 0x41, 0x62, 0xff, + 0xfc, 0x20, 0x1d, 0xa0, 0x36, 0x60, 0xb2, 0x29, 0xd2, 0xc5, 0xb1, 0xd1, + 0x6b, 0xe5, 0xeb, 0xff, 0x16, 0x7b, 0xcf, 0xcf, 0x60, 0x16, 0x2f, 0xff, + 0xb7, 0x2c, 0xfe, 0x13, 0xc8, 0xc5, 0x3b, 0x2c, 0x5d, 0x9c, 0xeb, 0x55, + 0xcc, 0xc0, 0xc0, 0x70, 0xa9, 0xc2, 0x0d, 0xe1, 0x5e, 0x76, 0x72, 0x86, + 0xb7, 0x09, 0xc3, 0x3e, 0xac, 0x5c, 0x6f, 0x29, 0x7a, 0x14, 0x4b, 0xa6, + 0x3d, 0x27, 0x41, 0xaf, 0xfd, 0xf7, 0x37, 0x35, 0xb1, 0xc5, 0xda, 0xc5, + 0xff, 0xbf, 0xf9, 0x92, 0x9f, 0xe1, 0xd6, 0x2a, 0x51, 0x00, 0xc8, 0x77, + 0xfc, 0x3d, 0x61, 0xf2, 0x0c, 0x35, 0x8b, 0xff, 0xf0, 0x9b, 0x98, 0x5b, + 0xfd, 0xc7, 0xfc, 0xef, 0xa9, 0x62, 0xa5, 0x7b, 0x6f, 0x08, 0x9e, 0x75, + 0x5b, 0xf0, 0xaf, 0x62, 0x12, 0x39, 0xbf, 0xfb, 0xf8, 0x01, 0xc8, 0xf3, + 0x4d, 0xc5, 0x8b, 0xf4, 0xeb, 0x07, 0x2b, 0x17, 0xe7, 0x2c, 0x04, 0x72, + 0xc5, 0xe0, 0x07, 0xe5, 0x8b, 0xe9, 0x80, 0xb4, 0xb1, 0x68, 0x49, 0xf6, + 0x61, 0x57, 0x07, 0xef, 0xef, 0xc7, 0x7d, 0xf7, 0xfa, 0xc5, 0x4a, 0x67, + 0xae, 0x88, 0xd0, 0x93, 0x11, 0x9d, 0xff, 0x84, 0x6e, 0x17, 0xda, 0x21, + 0x06, 0xb1, 0x7f, 0xf9, 0xe4, 0xbd, 0xbf, 0xe4, 0x2e, 0x69, 0x96, 0x2f, + 0xa6, 0x1c, 0xc5, 0x8b, 0xdc, 0xc0, 0xd6, 0x2b, 0x74, 0x66, 0xfd, 0x08, + 0x09, 0x7e, 0x22, 0xbf, 0xdf, 0x70, 0x6f, 0xf7, 0x89, 0x62, 0xfa, 0x0e, + 0x0c, 0x58, 0xbf, 0xfd, 0xe6, 0x81, 0x99, 0xf9, 0xd7, 0x7c, 0x95, 0x8b, + 0xff, 0xed, 0xff, 0x3a, 0xce, 0x10, 0x9a, 0x06, 0xb2, 0xc5, 0xff, 0xf9, + 0xba, 0x19, 0xcf, 0xb3, 0xfa, 0x7d, 0xfc, 0xf2, 0xc5, 0x41, 0x34, 0xd0, + 0x1b, 0x78, 0x88, 0x49, 0x81, 0xa8, 0xdf, 0xf9, 0xb6, 0xfc, 0xed, 0x9e, + 0xe6, 0x2c, 0x54, 0xa2, 0x30, 0x93, 0x2f, 0xfb, 0xd2, 0x7f, 0xe7, 0x4c, + 0xe2, 0xc5, 0xe7, 0x21, 0xac, 0x5f, 0xf4, 0x9f, 0x92, 0xfb, 0x37, 0x96, + 0x2a, 0x08, 0x90, 0xdc, 0xef, 0xc3, 0x97, 0xfe, 0xd9, 0xbb, 0x8e, 0xcf, + 0x13, 0x74, 0x58, 0xbf, 0xe1, 0x7b, 0x86, 0x03, 0x7e, 0x3a, 0xc5, 0xff, + 0xef, 0x49, 0x7b, 0x99, 0x86, 0x9a, 0xd0, 0x58, 0xbf, 0xee, 0x73, 0x0b, + 0x76, 0x20, 0x2c, 0x5f, 0x08, 0xa7, 0x8b, 0x17, 0xa1, 0x9e, 0x30, 0xf6, + 0xce, 0x73, 0x7f, 0x67, 0xbe, 0xe4, 0x05, 0x8b, 0xda, 0x6f, 0xf6, 0x7c, + 0x31, 0x1a, 0x56, 0x26, 0x78, 0xd1, 0x83, 0xdf, 0xfd, 0xfc, 0x23, 0x79, + 0xe7, 0xf6, 0x01, 0x62, 0xff, 0x31, 0x7b, 0x04, 0x5e, 0x58, 0xa8, 0x1f, + 0xb8, 0x11, 0x6f, 0xf7, 0x07, 0x9e, 0xd4, 0xf1, 0x62, 0xfd, 0x9e, 0xf6, + 0x0d, 0x62, 0xff, 0x9f, 0xb0, 0x19, 0xa7, 0xec, 0x0b, 0x14, 0x69, 0xf2, + 0xe8, 0xa2, 0xff, 0xd8, 0x39, 0x84, 0xff, 0x00, 0xcb, 0x17, 0xff, 0xf9, + 0xbb, 0x01, 0xc3, 0xe1, 0x83, 0xc2, 0x17, 0x81, 0x30, 0x58, 0xbf, 0x9a, + 0x02, 0x83, 0x0d, 0x62, 0xff, 0xff, 0xbe, 0x26, 0xdb, 0x53, 0xf6, 0x7e, + 0x73, 0x0d, 0x62, 0x02, 0xc5, 0xf9, 0xf6, 0xe7, 0x19, 0x62, 0x86, 0x89, + 0x0f, 0xb3, 0xdf, 0x6b, 0x1a, 0x3d, 0x62, 0xff, 0xd2, 0xc5, 0x9a, 0xf6, + 0x66, 0xcb, 0x17, 0xfe, 0x9c, 0x21, 0xfe, 0x7f, 0x3c, 0x58, 0xbb, 0xdc, + 0x19, 0xfd, 0x70, 0xf6, 0xf0, 0x41, 0x04, 0x91, 0x7d, 0x9b, 0xb6, 0x92, + 0x23, 0x0d, 0x0d, 0xff, 0xc2, 0x1f, 0xdc, 0xcd, 0x7a, 0x5a, 0x0b, 0x15, + 0xf3, 0xfc, 0xe1, 0xb5, 0xff, 0xfe, 0x8b, 0x53, 0xd0, 0xc3, 0x58, 0xc0, + 0xe2, 0xe1, 0x99, 0xdf, 0x96, 0x2a, 0x55, 0x0e, 0x1a, 0x46, 0xd0, 0x9f, + 0xf4, 0x32, 0xc3, 0x22, 0xbf, 0xdc, 0x7e, 0x18, 0x1c, 0xee, 0xb1, 0x7f, + 0xdf, 0x70, 0xbd, 0x16, 0xa7, 0xcb, 0x17, 0xfe, 0x7f, 0x0b, 0x3c, 0xc7, + 0xc2, 0x58, 0xbf, 0xff, 0xff, 0xe1, 0x1c, 0xed, 0x03, 0x74, 0xdb, 0xe6, + 0xb4, 0xfd, 0x39, 0x9e, 0xf3, 0x68, 0xa7, 0xb8, 0x2c, 0x54, 0x13, 0x12, + 0xd1, 0xe7, 0xcf, 0x6f, 0xfa, 0x41, 0xec, 0x28, 0x67, 0x16, 0x2e, 0x36, + 0x0b, 0x17, 0xa5, 0xf7, 0x58, 0xbf, 0x60, 0x18, 0x81, 0x03, 0x6d, 0xf1, + 0x9b, 0xf4, 0x0c, 0xea, 0xcd, 0x2c, 0x53, 0xa6, 0x11, 0xf3, 0x12, 0x6e, + 0x11, 0xe5, 0x6c, 0xc9, 0x9a, 0x1a, 0x2e, 0xf1, 0xbc, 0xf7, 0x09, 0xf8, + 0x88, 0xb5, 0x09, 0x93, 0x91, 0xfc, 0xf4, 0x0c, 0xa5, 0x2b, 0x6b, 0x8a, + 0xde, 0x94, 0xa3, 0x73, 0x79, 0x62, 0xf7, 0x33, 0x65, 0x8b, 0x8b, 0x60, + 0x1b, 0x5f, 0x0b, 0xd2, 0xc5, 0xfd, 0x26, 0x86, 0xc5, 0xe5, 0x8a, 0x93, + 0xe8, 0x39, 0x68, 0x41, 0x94, 0xb1, 0x4b, 0x16, 0xe0, 0x45, 0xc7, 0x50, + 0x65, 0xff, 0xfe, 0x17, 0xa7, 0xe6, 0x71, 0xa0, 0xfe, 0xc3, 0xf1, 0xa0, + 0xb1, 0x66, 0x58, 0xb4, 0xac, 0x5e, 0x67, 0xd8, 0x8d, 0x10, 0x84, 0x6f, + 0xff, 0x9f, 0x77, 0x1f, 0x27, 0xec, 0x42, 0xcf, 0xac, 0x54, 0x13, 0x2e, + 0x22, 0xae, 0x42, 0x13, 0xc6, 0x37, 0xff, 0xde, 0xe7, 0xda, 0x1d, 0xc3, + 0xd3, 0xc9, 0x09, 0x62, 0xfe, 0xe1, 0x66, 0xc1, 0xc1, 0x62, 0xfc, 0x1f, + 0xb8, 0x22, 0x58, 0xb4, 0xf6, 0x7b, 0x44, 0x61, 0x7f, 0x8a, 0x79, 0xc7, + 0x92, 0x58, 0xa9, 0x4c, 0x14, 0xf0, 0xad, 0x62, 0x7b, 0xff, 0xfb, 0xec, + 0x5d, 0xc0, 0x38, 0x49, 0x41, 0x8f, 0x83, 0x58, 0xbf, 0xf4, 0x02, 0xc7, + 0xe9, 0x90, 0x92, 0x58, 0xa7, 0x44, 0xe0, 0x6b, 0x97, 0xff, 0xb3, 0x3e, + 0x3f, 0xcf, 0x33, 0xee, 0x05, 0x8b, 0xff, 0xf6, 0xff, 0x9e, 0x36, 0x98, + 0xb3, 0xab, 0x61, 0x71, 0x62, 0xff, 0x08, 0xa3, 0xc3, 0x29, 0x3a, 0xc5, + 0xff, 0x39, 0x67, 0xbe, 0xec, 0x05, 0x8a, 0xdc, 0xfb, 0xbe, 0x6f, 0x7e, + 0x8a, 0x13, 0xae, 0x2c, 0x5f, 0xa0, 0xf1, 0xd9, 0xf5, 0x8b, 0xfd, 0x84, + 0x28, 0x73, 0x66, 0x58, 0xbd, 0x24, 0x35, 0x8b, 0xfd, 0x87, 0x17, 0x3e, + 0xd0, 0x58, 0xa3, 0x11, 0xb3, 0x25, 0x43, 0x2b, 0xdc, 0xd0, 0x87, 0x2f, + 0x8c, 0x18, 0xf1, 0x62, 0x8d, 0x3e, 0xe3, 0xa5, 0x5f, 0xff, 0xff, 0x7d, + 0xc8, 0x23, 0x3d, 0xf9, 0x71, 0xc9, 0x19, 0xe8, 0x61, 0xa5, 0x80, 0x58, + 0xbf, 0xf0, 0x9a, 0x1f, 0x7e, 0x09, 0xa0, 0xb1, 0x7f, 0xe7, 0xf6, 0xc2, + 0xe1, 0x9a, 0xd4, 0xac, 0x54, 0xae, 0xec, 0x6d, 0x1a, 0x3c, 0x21, 0xa0, + 0x32, 0x3c, 0x49, 0xde, 0x19, 0x0f, 0x1b, 0x54, 0x44, 0x60, 0x7f, 0xf1, + 0xfd, 0xe7, 0xf8, 0x96, 0x2f, 0xba, 0x9c, 0x5d, 0x7a, 0xc5, 0xfa, 0x4d, + 0x09, 0xbb, 0x58, 0xbf, 0x87, 0x23, 0x60, 0xbc, 0xb1, 0x7e, 0x7d, 0x8e, + 0xd1, 0xcb, 0x14, 0x62, 0x33, 0x98, 0x74, 0x8a, 0xf8, 0x57, 0xe2, 0xfb, + 0xf6, 0x43, 0xf3, 0xa5, 0x8b, 0xe3, 0x4c, 0xfb, 0xac, 0x56, 0xe8, 0x96, + 0x8f, 0x49, 0xd1, 0x45, 0xff, 0xc5, 0x21, 0x13, 0x1b, 0xee, 0x49, 0xab, + 0x17, 0xe8, 0x10, 0xbb, 0x82, 0xc5, 0xdf, 0x75, 0x8b, 0x78, 0x68, 0x87, + 0xed, 0x1a, 0x22, 0xab, 0xfb, 0x3b, 0xf7, 0xa4, 0xeb, 0x15, 0xd9, 0xf3, + 0x84, 0x71, 0x7e, 0x7f, 0x9b, 0x3d, 0xac, 0x5f, 0xb0, 0x65, 0x3d, 0xac, + 0x5b, 0xd2, 0x7a, 0x44, 0x55, 0x7f, 0xff, 0xed, 0x0b, 0x79, 0x1b, 0x93, + 0x68, 0xdd, 0xfe, 0xfd, 0x52, 0x79, 0x58, 0xbf, 0x39, 0xfb, 0x87, 0x16, + 0x2f, 0xff, 0xfe, 0x93, 0xf0, 0x7f, 0x9e, 0x64, 0x1c, 0xd3, 0x5b, 0xc5, + 0x27, 0xe2, 0xc5, 0x0d, 0x13, 0xa4, 0x55, 0x6e, 0xcd, 0x4c, 0xc3, 0xd1, + 0x87, 0x5f, 0xe0, 0x41, 0xfd, 0xc0, 0xce, 0xb1, 0x7f, 0xee, 0x34, 0x39, + 0x9b, 0xc9, 0xdd, 0x62, 0xb4, 0x7e, 0xbe, 0x36, 0xbf, 0xed, 0xfe, 0xe0, + 0x04, 0xea, 0x0b, 0x17, 0xda, 0xd9, 0xf6, 0x58, 0xbb, 0xb2, 0x30, 0xf8, + 0x30, 0xee, 0xa5, 0x71, 0x17, 0x23, 0x22, 0x77, 0x66, 0x8d, 0x58, 0x50, + 0xa7, 0x0e, 0x10, 0x57, 0xfd, 0xdc, 0xb9, 0xf0, 0xb2, 0x3d, 0x62, 0xf7, + 0x9b, 0x75, 0x8b, 0xff, 0xd0, 0xe6, 0x0f, 0x3e, 0xed, 0xef, 0xca, 0xc5, + 0x6c, 0x8a, 0x2d, 0xce, 0xfb, 0x1e, 0xbf, 0x6d, 0xf9, 0x16, 0x2c, 0x5f, + 0xff, 0x42, 0x4f, 0xa9, 0x78, 0x37, 0x18, 0x80, 0xb1, 0x7f, 0x3f, 0x30, + 0x61, 0xe2, 0xc5, 0xfb, 0xa9, 0xcb, 0x3a, 0x2c, 0x5f, 0xd8, 0x37, 0x16, + 0xff, 0xdc, 0xf6, 0x98, 0xba, 0xfe, 0xe4, 0x1c, 0xed, 0x05, 0x8b, 0xff, + 0xe1, 0xe4, 0x04, 0x36, 0x20, 0x6b, 0x58, 0x12, 0xc5, 0x4a, 0x72, 0xbd, + 0x94, 0xea, 0x15, 0x00, 0x45, 0x08, 0xba, 0xff, 0xff, 0xfb, 0x3a, 0x64, + 0x0c, 0xd4, 0x89, 0xb7, 0x79, 0x33, 0x3e, 0xf2, 0x76, 0x1a, 0xc5, 0xfe, + 0xe1, 0x67, 0x4f, 0xb4, 0x16, 0x2f, 0x72, 0x1d, 0x16, 0x2f, 0xc3, 0xd4, + 0xe7, 0x96, 0x29, 0xcf, 0xf6, 0x3c, 0xd4, 0x88, 0x2f, 0xff, 0x4e, 0xc1, + 0xfe, 0x7b, 0xf6, 0x6c, 0x43, 0x58, 0xbc, 0xdb, 0xca, 0xc5, 0x62, 0xbb, + 0x07, 0x8f, 0x23, 0xea, 0x2d, 0x0f, 0xc2, 0x30, 0xf2, 0x75, 0xfe, 0x01, + 0xd8, 0x07, 0x60, 0x2c, 0x5f, 0xe7, 0x00, 0xc4, 0xda, 0x82, 0xc5, 0xc6, + 0x8d, 0x62, 0xe6, 0x8f, 0x58, 0xad, 0x1b, 0x3e, 0x0c, 0xdf, 0xff, 0xbd, + 0xde, 0xef, 0xfd, 0xfe, 0xe4, 0xcd, 0xa3, 0x56, 0x2a, 0x07, 0xf4, 0x72, + 0x1b, 0xff, 0xcf, 0xa3, 0x39, 0xf9, 0xe3, 0xf8, 0xa5, 0x62, 0xff, 0xff, + 0xe1, 0xe0, 0xff, 0x84, 0x03, 0xe1, 0xa6, 0x6f, 0xf7, 0xd3, 0xc9, 0xd6, + 0x2f, 0xfe, 0x68, 0x60, 0xc9, 0xdb, 0xf2, 0x75, 0x8b, 0x9b, 0xeb, 0x15, + 0xf3, 0xd9, 0xf2, 0x15, 0xc1, 0x6e, 0xb1, 0x7f, 0xc3, 0x60, 0xf4, 0x4f, + 0x26, 0xac, 0x5f, 0x4e, 0x17, 0xba, 0xd3, 0xd4, 0x18, 0xd5, 0xff, 0xff, + 0xf3, 0x83, 0xd3, 0x0e, 0x7d, 0x8e, 0x76, 0x86, 0x74, 0x7f, 0x4e, 0x14, + 0x16, 0x2f, 0x72, 0x1b, 0xac, 0x5f, 0xfb, 0xda, 0x9c, 0xef, 0x35, 0x9e, + 0x58, 0xbb, 0x3a, 0x18, 0x7b, 0xdd, 0x8f, 0xd4, 0x13, 0x0c, 0xfc, 0x36, + 0xeb, 0x89, 0xb8, 0xfa, 0x34, 0x8a, 0x95, 0x69, 0x5b, 0x11, 0x32, 0x57, + 0xa1, 0x9a, 0x28, 0xf9, 0xef, 0xff, 0x16, 0x79, 0xe0, 0xc5, 0x9e, 0xfb, + 0xac, 0x5f, 0x00, 0x3e, 0xfa, 0xd5, 0x8b, 0xf8, 0x9b, 0xb8, 0x3e, 0x2c, + 0x5f, 0xc0, 0x2c, 0xf7, 0xf0, 0xc4, 0x4f, 0xe2, 0x3f, 0xca, 0xef, 0xff, + 0xe2, 0x80, 0x73, 0xb6, 0xff, 0x6d, 0x0b, 0xcf, 0x3b, 0x2c, 0x51, 0x22, + 0xc0, 0x4a, 0x37, 0xf1, 0x18, 0x1e, 0xbe, 0xcb, 0x17, 0xed, 0x00, 0xef, + 0xc5, 0x8b, 0xfe, 0x68, 0x19, 0x2e, 0x3c, 0x3a, 0xc5, 0x61, 0xf1, 0x08, + 0xa6, 0xff, 0xfe, 0x6e, 0xe7, 0x9a, 0x17, 0x89, 0x8d, 0xef, 0x93, 0x05, + 0x8a, 0x74, 0xcc, 0xd8, 0x88, 0xa1, 0x24, 0x22, 0x1b, 0xff, 0xa0, 0xdc, + 0xe4, 0xbf, 0x05, 0x13, 0x2c, 0x5f, 0xf3, 0x83, 0x6f, 0xcf, 0x05, 0xc5, + 0x8b, 0xce, 0x40, 0x58, 0xa7, 0x44, 0xe6, 0x91, 0x4e, 0x77, 0x7e, 0xcd, + 0x37, 0x61, 0x2c, 0x5f, 0xcf, 0x9b, 0xcf, 0xb8, 0xb1, 0x68, 0x2c, 0x5f, + 0xfe, 0xc1, 0xe9, 0xc5, 0xb0, 0xff, 0x25, 0xb2, 0xc5, 0xff, 0x7d, 0xb8, + 0xe4, 0x53, 0xda, 0xc5, 0x82, 0x24, 0x42, 0x71, 0x32, 0xa5, 0x17, 0xf9, + 0x09, 0x6b, 0xff, 0xe9, 0xff, 0x33, 0x71, 0xe6, 0x82, 0x6f, 0xc4, 0xb1, + 0x5b, 0x1f, 0xc8, 0x09, 0xab, 0x64, 0xec, 0xc8, 0xab, 0x91, 0xb3, 0x5e, + 0xe6, 0x1d, 0x62, 0xff, 0x44, 0x4c, 0x17, 0xb3, 0xeb, 0x17, 0xbf, 0x9b, + 0xac, 0x5e, 0x08, 0x20, 0x92, 0x2f, 0xe0, 0x49, 0x67, 0x7e, 0x48, 0x8c, + 0x34, 0x34, 0x62, 0x2d, 0x63, 0x8d, 0x43, 0x3f, 0xbe, 0x6d, 0x98, 0x96, + 0x2f, 0xff, 0xee, 0xbc, 0xcd, 0xfe, 0xe3, 0x1e, 0x04, 0x67, 0xb9, 0x9b, + 0x2c, 0x57, 0x69, 0xc8, 0x7e, 0x1a, 0x5e, 0x35, 0x11, 0x15, 0xfd, 0xf9, + 0xdc, 0x98, 0xeb, 0x17, 0xf8, 0xba, 0x6d, 0x86, 0xe6, 0x96, 0x2b, 0x0f, + 0x95, 0xcb, 0xa9, 0x62, 0xda, 0x58, 0xb6, 0xc0, 0x2f, 0xbc, 0x19, 0x52, + 0xb9, 0x6e, 0xf1, 0xf1, 0x34, 0x78, 0xfc, 0x85, 0x48, 0x67, 0xd7, 0xff, + 0xe6, 0xd4, 0xb8, 0xe4, 0x98, 0x1c, 0x97, 0x1a, 0xc5, 0xfd, 0x0e, 0x45, + 0x09, 0xd9, 0x62, 0xf8, 0x6c, 0xc6, 0xac, 0x52, 0xc5, 0xec, 0xe9, 0x8e, + 0x6b, 0xc2, 0x23, 0xbf, 0xfe, 0xf7, 0xe7, 0x98, 0xfe, 0xe3, 0x97, 0x70, + 0x58, 0xbf, 0xd2, 0x77, 0xf6, 0x84, 0x75, 0x8a, 0x74, 0x42, 0x12, 0x85, + 0x6e, 0x9c, 0x57, 0x6a, 0x5f, 0x60, 0xeb, 0xe1, 0x6f, 0x7f, 0xfb, 0x43, + 0xfc, 0xe6, 0xbd, 0xc7, 0xef, 0xcb, 0x17, 0xfe, 0xe7, 0x3f, 0x2f, 0xb7, + 0x33, 0x4b, 0x17, 0xb9, 0x3a, 0x58, 0xac, 0x45, 0x4e, 0x93, 0x3e, 0x81, + 0x7f, 0xd0, 0x29, 0x32, 0x39, 0xb6, 0xe2, 0xc5, 0xff, 0xb7, 0xfb, 0x8d, + 0xa0, 0x42, 0x65, 0x8b, 0xf8, 0x66, 0x67, 0xf3, 0x75, 0x8a, 0xed, 0x15, + 0xba, 0x3e, 0x23, 0xfb, 0xff, 0x67, 0xf7, 0x79, 0x01, 0xe6, 0x0b, 0x17, + 0xe3, 0xe7, 0xa7, 0x75, 0x8a, 0x94, 0xdd, 0x1e, 0x1b, 0x9a, 0x30, 0x63, + 0xfb, 0xff, 0xe3, 0x03, 0x39, 0x9f, 0x73, 0x07, 0xa2, 0x60, 0x96, 0x2f, + 0xf4, 0xf3, 0x02, 0x0c, 0xbc, 0xb1, 0x58, 0x88, 0xb0, 0xd5, 0xaa, 0x5d, + 0xeb, 0x0e, 0xd0, 0x86, 0x84, 0xfb, 0xb8, 0xe3, 0x9f, 0xc8, 0xc3, 0x77, + 0x94, 0x2f, 0xdc, 0x2c, 0x5e, 0x93, 0x97, 0x14, 0x6c, 0xfa, 0x9f, 0x4d, + 0x3c, 0xf2, 0x6f, 0xe7, 0x2f, 0xd9, 0x80, 0x06, 0x85, 0x38, 0x57, 0xc9, + 0x5b, 0x1e, 0x9d, 0x93, 0x14, 0x7c, 0xdd, 0x25, 0x33, 0x87, 0x0c, 0xbb, + 0xfe, 0x72, 0xd9, 0x8b, 0xd8, 0x75, 0x8b, 0xdb, 0x8b, 0xb5, 0x8b, 0xa4, + 0x0b, 0x15, 0x87, 0xde, 0xc7, 0x1e, 0x20, 0xbf, 0xf8, 0xd0, 0xfc, 0xfc, + 0x2c, 0xe8, 0xe3, 0x58, 0xbf, 0x8b, 0x07, 0xf6, 0x09, 0x62, 0xb4, 0x7e, + 0xc7, 0x48, 0xbf, 0xff, 0xf1, 0x63, 0x80, 0xcf, 0xb7, 0xbc, 0x2d, 0x8c, + 0x0f, 0x5a, 0xcd, 0x96, 0x2f, 0x9c, 0x81, 0xc5, 0x8b, 0xc4, 0xc7, 0x58, + 0xbf, 0x13, 0xfd, 0xa3, 0xd6, 0x2f, 0xdf, 0x7e, 0x4c, 0x16, 0x2f, 0xff, + 0xf7, 0x33, 0xef, 0xc1, 0x6c, 0x1c, 0xed, 0x20, 0x3c, 0xf9, 0x62, 0xff, + 0xff, 0x78, 0xb0, 0x0c, 0x40, 0x1f, 0xe7, 0x4f, 0x3d, 0xf9, 0x62, 0xf7, + 0x1f, 0x4c, 0x8e, 0xce, 0x14, 0x06, 0xc9, 0x7b, 0x93, 0xb2, 0xc5, 0xe3, + 0x5b, 0x8b, 0x17, 0xb5, 0x3b, 0x61, 0xbc, 0xf0, 0xf5, 0xfb, 0x21, 0x06, + 0xe2, 0xc5, 0xd3, 0xcd, 0x1e, 0xd1, 0x19, 0x5f, 0xc3, 0xfe, 0x7a, 0x3b, + 0x16, 0x2c, 0xf0, 0x55, 0xf5, 0xbb, 0x97, 0xc8, 0x88, 0x73, 0xd1, 0x8b, + 0x74, 0x86, 0xb8, 0x45, 0x97, 0xf6, 0x86, 0xf0, 0x16, 0x96, 0x2f, 0xff, + 0xbe, 0xcf, 0xe0, 0x39, 0x43, 0x98, 0x40, 0x58, 0xb4, 0xac, 0x58, 0x86, + 0x7b, 0xe2, 0x4e, 0xa9, 0x5c, 0x4a, 0xfc, 0xb1, 0xc6, 0x79, 0x14, 0x23, + 0xaf, 0xef, 0xce, 0xdf, 0x9d, 0x96, 0x2f, 0xff, 0x8f, 0xc8, 0xa0, 0xda, + 0xdf, 0xee, 0x1e, 0x8d, 0x58, 0xbf, 0xff, 0xe6, 0xdb, 0xdf, 0x79, 0x07, + 0x8d, 0x92, 0x18, 0xa1, 0x09, 0x58, 0xa7, 0x45, 0xf3, 0x2b, 0x54, 0x13, + 0x0f, 0xf4, 0x3b, 0xaf, 0xf1, 0x1b, 0xc7, 0xd3, 0x41, 0x62, 0xf8, 0x9b, + 0xbf, 0x2c, 0x5f, 0xf7, 0x9b, 0xbc, 0x87, 0xe7, 0x4b, 0x17, 0xb0, 0x80, + 0xb1, 0x7f, 0x6f, 0x3d, 0x94, 0x84, 0xb1, 0x7f, 0xbc, 0x64, 0x50, 0x6d, + 0x6c, 0xb1, 0x7f, 0xa0, 0x3f, 0x88, 0xe3, 0xc5, 0x8b, 0xff, 0xbb, 0x06, + 0xe5, 0x9b, 0x0b, 0xb8, 0x71, 0x62, 0xff, 0xb3, 0xbe, 0x34, 0x79, 0xe5, + 0xd6, 0x2f, 0x07, 0x1d, 0x8b, 0x15, 0x88, 0xdc, 0x73, 0x5d, 0x25, 0x00, + 0xf2, 0xfd, 0x9a, 0x60, 0x79, 0x62, 0xfb, 0x3d, 0x14, 0x16, 0x2f, 0xfe, + 0xea, 0x29, 0xea, 0xe3, 0x10, 0x60, 0xe2, 0xc5, 0xa5, 0x62, 0xbe, 0x88, + 0x06, 0x24, 0xf2, 0x5d, 0xa5, 0x62, 0xe6, 0x89, 0x62, 0x9c, 0xd4, 0xf8, + 0x46, 0xff, 0xd9, 0xe9, 0xd7, 0x3f, 0x25, 0xe5, 0xc8, 0x10, 0x5f, 0xd9, + 0xad, 0xd9, 0xb7, 0x54, 0x81, 0x04, 0x61, 0xe5, 0xde, 0x91, 0xba, 0xc5, + 0x49, 0xf6, 0x71, 0x42, 0xff, 0xc4, 0x58, 0x6b, 0x61, 0xd8, 0x96, 0x2e, + 0xe8, 0x35, 0x8b, 0xdd, 0x24, 0xeb, 0x17, 0xe8, 0x4f, 0xb0, 0xeb, 0x17, + 0x83, 0x92, 0x58, 0xbe, 0xef, 0x99, 0xa5, 0x8b, 0xf7, 0xa2, 0x84, 0xec, + 0xb1, 0x7e, 0xdb, 0x35, 0x30, 0x58, 0xbe, 0xd6, 0x9c, 0x25, 0x8a, 0x39, + 0xe6, 0xfc, 0xa6, 0xa5, 0x17, 0xd8, 0x48, 0xcf, 0x17, 0xf4, 0x78, 0xc2, + 0x62, 0x82, 0xc5, 0x4a, 0x7a, 0xfb, 0x1e, 0x60, 0xd7, 0x63, 0xee, 0x50, + 0x50, 0xdb, 0x11, 0x6d, 0xff, 0xdf, 0xdc, 0x79, 0xa7, 0xce, 0x9f, 0x12, + 0xc5, 0xfd, 0xa9, 0xfc, 0xbf, 0x5e, 0xb1, 0x4c, 0x7f, 0x41, 0xa4, 0x5f, + 0xff, 0xfe, 0x92, 0xdf, 0x92, 0x5e, 0xe6, 0x08, 0xe1, 0xf1, 0xb5, 0x3b, + 0xe1, 0x2c, 0x5f, 0xdc, 0xcf, 0x87, 0x3d, 0xac, 0x5f, 0xfd, 0x07, 0x2f, + 0x48, 0x22, 0x27, 0x89, 0x62, 0x8c, 0x3f, 0x58, 0x8c, 0x2e, 0x28, 0x96, + 0x28, 0x66, 0xf3, 0x09, 0x2f, 0x75, 0xb1, 0xdd, 0x75, 0x58, 0xbf, 0xb3, + 0xcc, 0xd0, 0xe2, 0xc5, 0xd9, 0xc8, 0xd8, 0xf6, 0xc8, 0xba, 0xa5, 0x15, + 0x84, 0xf7, 0x7f, 0xfe, 0x9f, 0x7d, 0xa2, 0xe3, 0x3e, 0xe4, 0xd9, 0xba, + 0xc5, 0xcc, 0x75, 0x8b, 0xf8, 0xf2, 0xfb, 0xc8, 0x16, 0x2a, 0x3c, 0xf1, + 0x7c, 0x2f, 0x52, 0xc9, 0xb5, 0xd8, 0xd3, 0x08, 0xcd, 0x3a, 0xdc, 0x73, + 0xb3, 0x0d, 0x46, 0x28, 0x73, 0xbf, 0xc2, 0xa1, 0x96, 0x01, 0x0d, 0x72, + 0x8f, 0xe3, 0x90, 0xe2, 0xf1, 0x17, 0x48, 0xf5, 0x63, 0x88, 0x7a, 0xa1, + 0x37, 0x7f, 0x88, 0x4d, 0x13, 0x36, 0xcb, 0x16, 0x82, 0xc5, 0xe9, 0xd0, + 0x16, 0x28, 0x66, 0xbd, 0xc4, 0xaf, 0x36, 0xb6, 0x58, 0xa1, 0xa2, 0x87, + 0xec, 0x61, 0x10, 0x5e, 0x89, 0xc2, 0x58, 0xbf, 0x3e, 0x8b, 0x36, 0x58, + 0xa7, 0x3c, 0x7f, 0x8f, 0xdd, 0xcf, 0xac, 0x5f, 0xf6, 0xd1, 0x3f, 0xfd, + 0x39, 0xb2, 0xc5, 0x68, 0xfd, 0x40, 0x42, 0x43, 0x17, 0xed, 0x4e, 0xf8, + 0x4b, 0x15, 0x87, 0xac, 0xc5, 0xd7, 0xec, 0xf7, 0x9c, 0xeb, 0x17, 0xec, + 0xdc, 0x73, 0xba, 0xc5, 0x7c, 0xf4, 0xbc, 0x51, 0x7f, 0xf7, 0x06, 0x4f, + 0xb0, 0x7a, 0x29, 0xc5, 0x8b, 0xfb, 0xc1, 0xe7, 0xdb, 0xb5, 0x8b, 0xdc, + 0x03, 0x2c, 0x57, 0x68, 0xb4, 0xf9, 0x11, 0x22, 0xf8, 0xc2, 0xff, 0x6d, + 0x9a, 0x01, 0x08, 0x0b, 0x17, 0xf7, 0x0c, 0xf9, 0x0b, 0xcb, 0x14, 0x47, + 0xcb, 0xe3, 0x5b, 0xfb, 0x3a, 0x6b, 0x02, 0xf2, 0xc5, 0xfc, 0x13, 0x0e, + 0x7b, 0xe2, 0xc5, 0x11, 0xf0, 0xf0, 0xc6, 0xfe, 0xce, 0xfd, 0xad, 0x4a, + 0xc5, 0xff, 0xdc, 0x26, 0xf3, 0x1c, 0x39, 0xdb, 0x16, 0x28, 0x67, 0xe9, + 0xc2, 0xfa, 0x94, 0xf6, 0xde, 0x14, 0x4d, 0x08, 0x21, 0x42, 0x56, 0xf4, + 0x4f, 0xa5, 0x8b, 0xfe, 0x67, 0xf3, 0x1d, 0x88, 0x0b, 0x17, 0xba, 0x7f, + 0x16, 0x2d, 0xbe, 0x1f, 0xa7, 0xc7, 0x83, 0x37, 0xbe, 0x17, 0xa4, 0x96, + 0x2b, 0x0f, 0x63, 0x86, 0xd7, 0xee, 0x83, 0xfc, 0xf1, 0x62, 0xc7, 0x58, + 0xbf, 0xbc, 0x3f, 0x89, 0xb8, 0xb0, 0x19, 0x65, 0x6d, 0xd6, 0x2a, 0x4f, + 0x4b, 0x73, 0xfb, 0xba, 0xdd, 0xd6, 0x2f, 0xfe, 0xcd, 0xff, 0x3f, 0xcd, + 0x6a, 0x4d, 0x58, 0xb8, 0x12, 0xb1, 0x61, 0xe8, 0xf7, 0x40, 0x8d, 0x5a, + 0x45, 0x19, 0x3d, 0xdf, 0x14, 0xf6, 0x05, 0x8a, 0x73, 0xc5, 0x0c, 0x8a, + 0xff, 0x41, 0xc5, 0xd7, 0xf5, 0xd6, 0x36, 0xeb, 0x56, 0x2f, 0xf0, 0x98, + 0x7f, 0x9f, 0x71, 0x62, 0xf8, 0xb3, 0xa6, 0x2c, 0x5c, 0xdb, 0x44, 0x8a, + 0x3f, 0x26, 0x06, 0x69, 0x7e, 0x39, 0xa6, 0xbc, 0x4b, 0x17, 0xff, 0xe0, + 0x9b, 0xc2, 0x98, 0x60, 0x38, 0xc4, 0x2c, 0x58, 0xbf, 0x69, 0xe4, 0xbc, + 0xb1, 0x63, 0x56, 0x2e, 0xec, 0x0b, 0x17, 0xcd, 0xe9, 0xc5, 0x8a, 0x93, + 0xcd, 0x71, 0x3f, 0x8c, 0xdf, 0xec, 0xd3, 0x80, 0xed, 0x05, 0x8b, 0x9c, + 0x96, 0x2f, 0xfa, 0x48, 0xd1, 0xbc, 0x05, 0xa5, 0x8b, 0x04, 0xb1, 0x43, + 0x3e, 0x33, 0x8b, 0x06, 0x75, 0x7e, 0x98, 0xa1, 0x31, 0xeb, 0x17, 0xfe, + 0xd3, 0x9a, 0x76, 0xf7, 0x05, 0x05, 0x8b, 0xc4, 0x2d, 0x96, 0x2f, 0x6c, + 0x52, 0xb1, 0x4b, 0x17, 0xe9, 0xd4, 0x18, 0x6b, 0x15, 0xf3, 0x69, 0xc0, + 0xcb, 0xe9, 0x23, 0x63, 0x96, 0x2f, 0x9a, 0x18, 0x4b, 0x15, 0xb9, 0xe3, + 0xfc, 0x9a, 0xfe, 0x7f, 0x16, 0x7d, 0xd6, 0x2e, 0x78, 0x96, 0x2f, 0xba, + 0xa7, 0x46, 0xac, 0x5b, 0xe6, 0x22, 0x3a, 0x48, 0xd8, 0xb3, 0xa8, 0x62, + 0xff, 0xa7, 0x9f, 0x7d, 0x69, 0xa0, 0xb1, 0x58, 0x7f, 0xc4, 0x8b, 0x46, + 0x2b, 0x63, 0x19, 0x6e, 0x42, 0x5b, 0x46, 0x07, 0x2c, 0xfa, 0x0b, 0x0f, + 0x71, 0x47, 0xd1, 0xba, 0x51, 0xab, 0x8c, 0x21, 0x4b, 0xd7, 0xa9, 0x5d, + 0x11, 0xc2, 0xc6, 0x9c, 0xb6, 0xbf, 0xa7, 0x6f, 0x73, 0x3c, 0xb1, 0x52, + 0xcc, 0x4c, 0x84, 0xb0, 0x1c, 0x8c, 0x59, 0xc8, 0x75, 0x08, 0xff, 0xc6, + 0x14, 0xd0, 0xc5, 0x29, 0xd4, 0xf0, 0x8e, 0x2f, 0xd9, 0xac, 0x1c, 0xac, + 0x5f, 0x33, 0xf4, 0x95, 0x8b, 0xff, 0x07, 0xad, 0x4e, 0x16, 0x77, 0xc5, + 0x8b, 0xf3, 0x8c, 0x78, 0x4b, 0x15, 0xb2, 0x2c, 0x46, 0x4f, 0xd9, 0x1f, + 0x10, 0x2f, 0xff, 0xfe, 0xcf, 0x49, 0xc7, 0x9e, 0x9c, 0x28, 0x16, 0x77, + 0x09, 0xcf, 0x2c, 0x5f, 0xc5, 0x9d, 0x0b, 0x38, 0xb1, 0x7f, 0x85, 0xad, + 0xb0, 0x45, 0xe5, 0x8b, 0xf7, 0xf3, 0x9c, 0xc3, 0x0f, 0x8f, 0x0b, 0xa8, + 0x93, 0x10, 0xf4, 0x34, 0xaf, 0xf9, 0xce, 0x59, 0xe3, 0x33, 0x16, 0x2f, + 0xfb, 0xf3, 0xaf, 0x14, 0xe7, 0x6b, 0x17, 0xff, 0xfc, 0xfb, 0x4c, 0x39, + 0xad, 0x3f, 0x71, 0x41, 0xb4, 0x7c, 0xed, 0x62, 0xff, 0x4b, 0x6c, 0xda, + 0x60, 0xd6, 0x2f, 0x7f, 0x08, 0x68, 0xd8, 0xf9, 0xcf, 0x9a, 0xee, 0x04, + 0xac, 0x5f, 0xe7, 0xe9, 0xf9, 0xc8, 0x32, 0xc5, 0x00, 0xf2, 0xf8, 0x2f, + 0x58, 0xac, 0xd1, 0xe3, 0x4f, 0xf9, 0x47, 0xa3, 0x10, 0x14, 0x22, 0xef, + 0xd3, 0xa8, 0xb9, 0xb2, 0xc5, 0xff, 0x7e, 0x73, 0x50, 0xe0, 0x8e, 0xb1, + 0x7f, 0xef, 0xc8, 0xcc, 0x98, 0xff, 0xb7, 0x16, 0x2f, 0xfd, 0x30, 0xef, + 0x8f, 0xf2, 0x68, 0x2c, 0x5f, 0x87, 0x90, 0x71, 0xac, 0x5f, 0xf9, 0xc1, + 0x9e, 0x9f, 0xc9, 0xf1, 0x62, 0xb6, 0x4d, 0x33, 0x72, 0xb7, 0x3a, 0x3a, + 0x18, 0x8f, 0xe3, 0x8a, 0x2e, 0x7e, 0x2c, 0x5f, 0xe2, 0xfb, 0x77, 0x07, + 0x25, 0x8b, 0xfd, 0xcf, 0xb4, 0x00, 0xdd, 0xac, 0x54, 0x9f, 0x46, 0x19, + 0xde, 0x08, 0x5c, 0x58, 0xbf, 0xdb, 0x37, 0x80, 0x19, 0x41, 0x62, 0xff, + 0xfc, 0x45, 0x3d, 0xe1, 0x0b, 0xc2, 0x37, 0x3b, 0xf2, 0xc5, 0xfa, 0x2e, + 0x75, 0xdf, 0x5c, 0x8d, 0x16, 0x2a, 0x51, 0xd3, 0x83, 0xee, 0x6c, 0x25, + 0x7b, 0xfd, 0xf7, 0xd6, 0x9c, 0xb7, 0x58, 0xbf, 0xf4, 0x39, 0x1b, 0x73, + 0x09, 0xa1, 0xc5, 0x8b, 0xd3, 0x03, 0x56, 0x2f, 0xd9, 0xcd, 0xb0, 0x25, + 0x8b, 0xfb, 0x71, 0x4e, 0xff, 0xc5, 0x8b, 0x9f, 0x75, 0x8a, 0x31, 0x12, + 0x10, 0x1e, 0xc2, 0xa8, 0xe3, 0x0a, 0x35, 0x34, 0x8e, 0xcd, 0x3d, 0x0d, + 0x4b, 0xff, 0x7b, 0xed, 0x07, 0x1f, 0xe6, 0x0b, 0x14, 0xc7, 0xee, 0x47, + 0x17, 0xcf, 0xb9, 0xfa, 0x2c, 0x5f, 0xc1, 0x9f, 0x81, 0x37, 0x6b, 0x17, + 0xe6, 0xcf, 0x07, 0xb2, 0xc5, 0x4a, 0xf1, 0x36, 0x47, 0x4e, 0x6a, 0xe3, + 0xbf, 0xea, 0x30, 0x96, 0x8f, 0xe4, 0x88, 0x3c, 0x4c, 0x11, 0x95, 0xe0, + 0xb3, 0xeb, 0x17, 0xff, 0xde, 0xd0, 0x87, 0x26, 0x6a, 0x76, 0x6d, 0x6e, + 0xb1, 0x7f, 0xe2, 0xcd, 0x8b, 0x3d, 0xf7, 0x09, 0x62, 0xec, 0x08, 0xc4, + 0x49, 0xee, 0xa9, 0x7d, 0x80, 0xd4, 0xac, 0x56, 0xc7, 0xa7, 0xf3, 0x1b, + 0xff, 0xdf, 0x7d, 0xe5, 0xfd, 0xf9, 0x0b, 0x3e, 0xb1, 0x7f, 0xbc, 0xff, + 0xc2, 0xce, 0x2c, 0x56, 0xe7, 0xfa, 0x1a, 0x5d, 0xff, 0xf7, 0x33, 0x3b, + 0x80, 0xff, 0x3c, 0x84, 0x9d, 0x62, 0xf4, 0x21, 0x8b, 0x17, 0x48, 0x6b, + 0x15, 0xd9, 0xb5, 0x61, 0xdb, 0xfd, 0x30, 0x0f, 0x80, 0x0f, 0x75, 0x8a, + 0xc4, 0x6f, 0xbc, 0x21, 0xbc, 0x43, 0x62, 0x82, 0x66, 0xc3, 0x8c, 0x0e, + 0xff, 0xec, 0xfc, 0xe6, 0xdb, 0x39, 0x4c, 0x16, 0x2a, 0x0a, 0x92, 0x72, + 0x3d, 0x68, 0xe2, 0xfb, 0xda, 0xcf, 0xac, 0x5e, 0xe3, 0x9d, 0x62, 0xb4, + 0x6e, 0xbc, 0x3b, 0x7f, 0x7d, 0xbd, 0xf6, 0x3a, 0xc5, 0xf1, 0xb2, 0x50, + 0x58, 0xbb, 0x3b, 0x58, 0xb9, 0xf6, 0x58, 0xa9, 0x45, 0x13, 0x90, 0xf8, + 0xb8, 0x32, 0x3e, 0xa1, 0x8b, 0xfd, 0xc2, 0xc3, 0x9d, 0xfc, 0xb1, 0x7d, + 0xec, 0x14, 0x16, 0x2f, 0xfe, 0xfb, 0xc9, 0x18, 0xc5, 0x07, 0x3a, 0xc5, + 0xfd, 0x02, 0x9f, 0xb1, 0xd6, 0x2f, 0x44, 0xe1, 0x2c, 0x5f, 0x4f, 0x53, + 0xe9, 0x62, 0x9c, 0xf1, 0x08, 0x7e, 0xff, 0xcd, 0xd8, 0x7e, 0x7d, 0x48, + 0xba, 0xf5, 0x8b, 0x83, 0xd9, 0x62, 0x8e, 0x7c, 0x1e, 0x46, 0xbf, 0x37, + 0x0a, 0x62, 0x58, 0xbf, 0x7c, 0x45, 0x3b, 0x2c, 0x5d, 0xd3, 0x4b, 0x17, + 0x16, 0x96, 0x2f, 0xff, 0xc2, 0xd8, 0xa7, 0x3f, 0x19, 0x3e, 0xcf, 0x8b, + 0x4b, 0x17, 0xb8, 0x1f, 0x0c, 0x54, 0x63, 0x28, 0x63, 0x71, 0xc8, 0x40, + 0x1a, 0x44, 0xe5, 0x04, 0x53, 0xc1, 0xa0, 0xc5, 0xeb, 0x75, 0x63, 0xcc, + 0x67, 0xe9, 0x4a, 0x97, 0x10, 0x4b, 0x17, 0xee, 0x1f, 0x3d, 0xc5, 0x8b, + 0xf8, 0x1a, 0x9d, 0xf0, 0x96, 0x2f, 0xfc, 0x6e, 0x79, 0xff, 0x9e, 0x9d, + 0x2c, 0x54, 0x9f, 0x6b, 0x97, 0x5f, 0x9a, 0x04, 0xf2, 0xb1, 0x7f, 0x7d, + 0xc7, 0x25, 0xe5, 0x8b, 0xff, 0x85, 0xa0, 0x70, 0x47, 0xe4, 0x96, 0x2c, + 0x5c, 0xc5, 0xb9, 0xf9, 0x70, 0xb6, 0xf6, 0x72, 0x56, 0x2f, 0x9b, 0xce, + 0x05, 0x8b, 0xe2, 0xf6, 0x12, 0xc5, 0x7c, 0xf0, 0xd8, 0x8a, 0xfe, 0xc3, + 0xe6, 0x11, 0xab, 0x14, 0xb1, 0x7f, 0x7b, 0x99, 0xd3, 0xee, 0xb1, 0x46, + 0x9b, 0xc6, 0x0c, 0xb1, 0xa3, 0x44, 0x51, 0x34, 0xd4, 0xa3, 0x51, 0xa1, + 0x57, 0x7f, 0xc4, 0xc1, 0x45, 0x06, 0xd4, 0x16, 0x2f, 0xe7, 0xd6, 0x74, + 0x98, 0xf5, 0x8a, 0x88, 0xfb, 0x7e, 0x77, 0x7f, 0x3e, 0xb5, 0x38, 0x4b, + 0x17, 0xfd, 0x30, 0xe6, 0x6e, 0x53, 0xa5, 0x8a, 0x34, 0xf9, 0x74, 0x59, + 0x67, 0x58, 0xbf, 0xb8, 0xfa, 0xdf, 0xf8, 0xb1, 0x7f, 0xc4, 0xdd, 0xfd, + 0xe4, 0xbc, 0xb1, 0x7f, 0x60, 0x00, 0xdd, 0xc1, 0x62, 0xf1, 0x31, 0xb8, + 0x8c, 0xad, 0xc8, 0xfb, 0x11, 0xf9, 0x79, 0x1c, 0x51, 0x8c, 0xd0, 0xc9, + 0x96, 0x9b, 0x08, 0xc5, 0xb2, 0x5b, 0x56, 0xe7, 0x2e, 0x31, 0xa8, 0x4b, + 0x1c, 0x81, 0xa1, 0x30, 0x02, 0xd2, 0x8c, 0xcf, 0x90, 0x93, 0x14, 0x6a, + 0x57, 0xff, 0xdb, 0x66, 0xb6, 0x7f, 0x43, 0x35, 0xa6, 0x82, 0xc5, 0xc6, + 0xf9, 0x62, 0xff, 0xf3, 0xfe, 0x7f, 0x9d, 0xf1, 0xff, 0x23, 0x58, 0xbd, + 0xbb, 0x8d, 0x62, 0xff, 0xfb, 0x99, 0xad, 0xfe, 0x26, 0x0c, 0x32, 0xce, + 0x8b, 0x17, 0xdb, 0x14, 0xec, 0xb1, 0x76, 0x6c, 0xb1, 0x52, 0x6f, 0x30, + 0x92, 0xb6, 0x45, 0x81, 0x42, 0x46, 0xfb, 0x4f, 0x9f, 0x58, 0xbf, 0xe3, + 0xb7, 0x7d, 0x53, 0xb9, 0xce, 0xb1, 0x7d, 0x38, 0x1c, 0x68, 0xb1, 0x7e, + 0x91, 0xc6, 0xf1, 0xbf, 0x58, 0xb1, 0x6d, 0x62, 0x27, 0xc8, 0xfc, 0x32, + 0x8b, 0xff, 0xfd, 0xc7, 0xe7, 0x27, 0x9b, 0x93, 0x6d, 0x25, 0x31, 0x71, + 0x62, 0xb1, 0x58, 0x19, 0xaa, 0x5b, 0x8c, 0xf6, 0x94, 0xf0, 0xce, 0xd1, + 0x43, 0x43, 0x07, 0xc6, 0xb7, 0xef, 0xbc, 0x73, 0x9a, 0xb1, 0x7d, 0x80, + 0x7e, 0x8b, 0x17, 0xc0, 0x00, 0x80, 0xb1, 0x5b, 0x9f, 0xa1, 0x16, 0x06, + 0x49, 0x7c, 0x2d, 0x79, 0xd6, 0x2f, 0xc5, 0x0e, 0x6c, 0x05, 0x8b, 0xff, + 0xee, 0x7f, 0x0f, 0xc9, 0x1b, 0x0f, 0xe2, 0x3a, 0xc5, 0xf7, 0x7e, 0xfe, + 0x2c, 0x5f, 0xa1, 0x3e, 0xfe, 0x2c, 0x56, 0x1e, 0x67, 0x89, 0x2a, 0x51, + 0x7c, 0xd0, 0x9d, 0xbf, 0xf8, 0x13, 0xc3, 0xcb, 0xeb, 0x4e, 0x12, 0xc5, + 0xe6, 0x68, 0x2c, 0x5f, 0xe7, 0xf3, 0xc3, 0x3b, 0xf2, 0xc5, 0x0d, 0x3c, + 0x6c, 0x23, 0xde, 0x1d, 0x0e, 0x4c, 0x04, 0x5e, 0xa1, 0xcb, 0xfa, 0x5c, + 0x6d, 0xd4, 0xeb, 0x17, 0xfa, 0x04, 0xf0, 0xef, 0xdd, 0x75, 0x58, 0xbf, + 0xc2, 0x6e, 0xf9, 0xad, 0x4a, 0xc5, 0x68, 0xfc, 0xb8, 0x7b, 0x7f, 0x6f, + 0x81, 0xf5, 0x34, 0x16, 0x2f, 0xc7, 0x7f, 0x7a, 0x56, 0x2f, 0x3e, 0x04, + 0xb1, 0x61, 0xe2, 0x26, 0xb7, 0x22, 0x73, 0x32, 0x28, 0xb9, 0xf9, 0x04, + 0xdf, 0x32, 0x33, 0xbb, 0xff, 0x03, 0xd3, 0x85, 0xbe, 0x77, 0xe5, 0x8b, + 0xf7, 0x30, 0xf3, 0x1e, 0xb1, 0x5a, 0x3e, 0xb2, 0x40, 0xbf, 0xf4, 0xc0, + 0x07, 0x90, 0xb9, 0x0d, 0x96, 0x2f, 0xfe, 0xce, 0xe1, 0x9f, 0x7d, 0x13, + 0xca, 0xc5, 0xff, 0x4c, 0xf3, 0x8f, 0xac, 0x3a, 0xc5, 0x40, 0xfe, 0xc6, + 0x87, 0x7f, 0xf3, 0x3f, 0x41, 0xfe, 0x75, 0xa6, 0x35, 0x62, 0xfa, 0x3f, + 0xf9, 0xb2, 0xc5, 0xfe, 0x91, 0xe7, 0x9f, 0xe2, 0x58, 0xa9, 0x3d, 0xa1, + 0x93, 0xdf, 0xf3, 0x70, 0xb0, 0x01, 0xe4, 0x4b, 0x17, 0xfe, 0x87, 0x9f, + 0x6d, 0x4c, 0x1b, 0x4b, 0x17, 0xe2, 0xcd, 0x83, 0x82, 0xc5, 0xe7, 0xef, + 0x8b, 0x17, 0x67, 0x96, 0x28, 0xd3, 0x6b, 0xf1, 0xea, 0x95, 0x57, 0xbb, + 0x10, 0xc5, 0x0b, 0xdd, 0x11, 0x1e, 0x14, 0x3f, 0x21, 0x63, 0xae, 0x20, + 0x79, 0x7e, 0xfe, 0x33, 0x9c, 0xc2, 0x1a, 0xc5, 0xff, 0xbc, 0x18, 0x24, + 0x39, 0x04, 0x81, 0x62, 0xff, 0x9f, 0x5b, 0x08, 0x06, 0x4c, 0x7a, 0xc5, + 0xff, 0xf1, 0x39, 0xa6, 0xc8, 0x7e, 0x7f, 0xb9, 0x79, 0x62, 0xff, 0xf3, + 0x7f, 0xee, 0x58, 0x00, 0x3c, 0x5c, 0x58, 0xa8, 0x23, 0x68, 0xe7, 0xfd, + 0x14, 0x6f, 0xe1, 0xbf, 0x3c, 0x26, 0x58, 0xbf, 0x09, 0x88, 0x1c, 0x58, + 0xbd, 0xf6, 0x86, 0x1e, 0xb7, 0x8b, 0xaf, 0xff, 0xb9, 0xf7, 0xc3, 0xb7, + 0x7c, 0xf7, 0xc5, 0xda, 0xc5, 0x7d, 0x10, 0xa0, 0x32, 0xbf, 0xfc, 0x23, + 0x78, 0x18, 0xce, 0xc3, 0xfc, 0x92, 0xc5, 0xff, 0x7d, 0xf5, 0xee, 0xf7, + 0x7f, 0x2c, 0x5f, 0x37, 0xbd, 0x2b, 0x17, 0xf3, 0x71, 0xca, 0x78, 0xb1, + 0x77, 0xd9, 0x62, 0xf8, 0x6c, 0x40, 0xc4, 0x50, 0xee, 0x79, 0xf2, 0x2e, + 0xbc, 0xb2, 0xb1, 0x36, 0x9f, 0x91, 0x8a, 0x1d, 0xd7, 0xff, 0xf0, 0xf0, + 0x11, 0xd9, 0xf6, 0x7f, 0x0b, 0x4d, 0xd3, 0x16, 0x2f, 0xff, 0xfc, 0x76, + 0x20, 0x41, 0xf8, 0x23, 0xfd, 0xe7, 0xdf, 0x13, 0x1d, 0x62, 0xff, 0xff, + 0x13, 0x05, 0xec, 0xf9, 0x85, 0x9f, 0xe7, 0x31, 0x89, 0x62, 0xf4, 0x36, + 0xc5, 0x8a, 0x88, 0xff, 0xb8, 0xc1, 0x7f, 0x3f, 0x46, 0x84, 0x31, 0x62, + 0xff, 0xec, 0x0b, 0x52, 0xe5, 0x80, 0x3b, 0xac, 0x5f, 0xff, 0x9f, 0xd0, + 0x92, 0x00, 0xc4, 0xda, 0x80, 0xce, 0xb1, 0x7e, 0x21, 0x43, 0x38, 0xb1, + 0x71, 0x4a, 0xc5, 0xff, 0xe1, 0x7a, 0x0e, 0x0f, 0xb3, 0xf9, 0x8e, 0xb1, + 0x50, 0x46, 0xf6, 0x2b, 0x7c, 0xa0, 0x85, 0xae, 0x0a, 0x56, 0x2e, 0x32, + 0x3d, 0x62, 0xff, 0xfc, 0xcf, 0xe7, 0x1e, 0x0f, 0x3c, 0xe7, 0x7d, 0x2c, + 0x5e, 0xe4, 0x9d, 0x62, 0xf7, 0x4f, 0xba, 0xc5, 0x40, 0xde, 0x38, 0xed, + 0xff, 0xe9, 0xdc, 0x78, 0x1f, 0x9f, 0x52, 0x2e, 0xbd, 0x62, 0xf0, 0xb0, + 0x6b, 0x17, 0xb4, 0xdc, 0x31, 0x57, 0xfc, 0x91, 0xec, 0x5f, 0x91, 0x90, + 0xc4, 0x77, 0xa1, 0x8f, 0x8e, 0x34, 0x23, 0xc8, 0x82, 0x39, 0x46, 0xde, + 0x95, 0xf9, 0xe8, 0x4a, 0x76, 0x73, 0x56, 0x5f, 0x14, 0xbe, 0x9b, 0xff, + 0x4f, 0x37, 0xfb, 0x8e, 0x73, 0x4b, 0x17, 0xfc, 0x76, 0x87, 0x60, 0x92, + 0xdd, 0x62, 0xa0, 0xc9, 0xc0, 0xec, 0xbd, 0xe9, 0x17, 0x3a, 0x5e, 0x39, + 0xfd, 0xd0, 0x95, 0x8b, 0xff, 0x7e, 0x7f, 0x9d, 0x83, 0x3d, 0xc5, 0x8b, + 0xd1, 0x39, 0xd6, 0x28, 0x67, 0xbd, 0x88, 0x17, 0xce, 0x6c, 0x9d, 0x62, + 0xff, 0xec, 0x19, 0x36, 0xdc, 0xe3, 0x14, 0x16, 0x2e, 0xc2, 0x93, 0xe7, + 0x22, 0x3a, 0xd9, 0x16, 0x5e, 0x84, 0x45, 0x32, 0x6a, 0x02, 0x8c, 0x9e, + 0xff, 0xff, 0xe3, 0x22, 0xfc, 0xeb, 0x63, 0x38, 0x06, 0x20, 0x19, 0x9b, + 0xcf, 0xb8, 0xb1, 0x7e, 0x6f, 0x73, 0x09, 0x62, 0xb7, 0x45, 0x01, 0x3c, + 0xd4, 0xb6, 0x9f, 0x63, 0x87, 0x8e, 0x47, 0xed, 0xbc, 0x7b, 0x6f, 0x2d, + 0x71, 0xa9, 0x49, 0x45, 0x1d, 0x38, 0xa1, 0x93, 0x63, 0xac, 0x5e, 0xd6, + 0xa5, 0x62, 0xf7, 0xc5, 0x1e, 0xb1, 0x7f, 0xdb, 0x3e, 0xdc, 0xc3, 0xb7, + 0xd6, 0x2f, 0xfa, 0x12, 0x37, 0x1e, 0x37, 0xd6, 0x2c, 0xfa, 0x3f, 0x3f, + 0x1d, 0xdf, 0xff, 0x02, 0x48, 0xce, 0x37, 0x9c, 0x78, 0x50, 0x58, 0xbf, + 0x4e, 0xce, 0x5e, 0x58, 0xbf, 0xe6, 0x84, 0xff, 0x3d, 0x30, 0x58, 0xa7, + 0x45, 0x7e, 0x93, 0xfe, 0x51, 0x7f, 0xfb, 0xa1, 0x99, 0xe7, 0xd4, 0x8b, + 0xd0, 0x95, 0x8b, 0x1d, 0x62, 0x9c, 0xf7, 0xc3, 0x4d, 0xbc, 0x06, 0xe2, + 0xc5, 0xfe, 0x01, 0xf3, 0x61, 0x6a, 0x0b, 0x17, 0x46, 0xfd, 0x62, 0xc5, + 0x0d, 0x12, 0xfd, 0x91, 0x68, 0x77, 0x86, 0xd7, 0xfa, 0x1e, 0xc3, 0x4a, + 0x4d, 0x58, 0xbd, 0xd7, 0x7d, 0x75, 0xeb, 0x16, 0x2f, 0xc5, 0x23, 0xc8, + 0x96, 0x2f, 0xe8, 0x38, 0x1b, 0xc2, 0x58, 0xbe, 0xe0, 0xb4, 0x6a, 0xc5, + 0xff, 0xa0, 0x21, 0xe6, 0xbc, 0x42, 0xf2, 0xc5, 0xfc, 0x7c, 0xe3, 0x31, + 0xd6, 0x2f, 0x13, 0x71, 0x62, 0xa4, 0xf2, 0x70, 0xb6, 0xfd, 0x3f, 0xf4, + 0xc1, 0x62, 0xfa, 0x18, 0x08, 0xd4, 0xb1, 0x78, 0x5e, 0xe4, 0x6e, 0x9d, + 0x3c, 0x99, 0x61, 0x47, 0x65, 0xd1, 0x12, 0xfe, 0x11, 0x20, 0x20, 0x8e, + 0x28, 0xbf, 0xfe, 0x73, 0xb0, 0xf9, 0x84, 0xdd, 0xeb, 0x0e, 0xb1, 0x43, + 0x47, 0x07, 0xe1, 0x23, 0x7b, 0xe1, 0xe9, 0x62, 0xff, 0x49, 0x37, 0xc4, + 0x5b, 0x2c, 0x5f, 0xff, 0xbe, 0xfa, 0xfb, 0x49, 0x1a, 0xd1, 0x33, 0x6c, + 0xb1, 0x7d, 0x8e, 0x0e, 0x2c, 0x5e, 0xe4, 0xc3, 0x0f, 0xe3, 0x4a, 0xd7, + 0xfd, 0x10, 0x67, 0xd4, 0xe0, 0xdd, 0x62, 0x9c, 0xfb, 0x58, 0xca, 0xf6, + 0xc3, 0x95, 0x8b, 0xf1, 0x9d, 0xf2, 0x60, 0xb1, 0x7f, 0xfb, 0x93, 0x17, + 0x19, 0xc7, 0x87, 0xc2, 0x58, 0xbd, 0xa6, 0xdd, 0x62, 0xf1, 0xe7, 0xeb, + 0x17, 0xa6, 0x1d, 0x6a, 0xc5, 0x0c, 0xf7, 0x70, 0x78, 0x87, 0x6b, 0x11, + 0xa6, 0x08, 0x53, 0x5e, 0x21, 0x41, 0x62, 0xf0, 0xc5, 0x2b, 0x17, 0xef, + 0x73, 0x0a, 0x0b, 0x17, 0xe7, 0xe8, 0xda, 0x82, 0xc5, 0xd3, 0xc9, 0x3d, + 0x2e, 0x14, 0x5f, 0xf3, 0x83, 0xf8, 0x79, 0x8e, 0xc5, 0x8b, 0xf3, 0xfe, + 0x19, 0xe5, 0x8a, 0xd1, 0xf1, 0x9c, 0xee, 0xf3, 0x10, 0xd6, 0x2f, 0xfc, + 0xc6, 0xc9, 0x6e, 0xde, 0x63, 0x56, 0x2f, 0xb0, 0x11, 0xd9, 0xf3, 0xdc, + 0xe0, 0xe5, 0xff, 0xff, 0xec, 0xdb, 0x92, 0x6b, 0x73, 0xd0, 0xc3, 0x4d, + 0xce, 0xfd, 0xa9, 0xce, 0xd6, 0x2f, 0x68, 0xa0, 0xb1, 0x7f, 0xf8, 0x7f, + 0xc1, 0xc7, 0xb9, 0x1b, 0xac, 0xea, 0x58, 0xbf, 0xe2, 0x07, 0x9c, 0x78, + 0x50, 0x58, 0xb4, 0x98, 0x8a, 0x6c, 0x1d, 0x65, 0x1a, 0x75, 0x61, 0xdf, + 0x6f, 0x68, 0x47, 0x93, 0xf7, 0x0e, 0xc5, 0x19, 0x1d, 0xee, 0xbf, 0xf8, + 0xb1, 0x7e, 0x35, 0xcb, 0x3a, 0x2c, 0x57, 0x5a, 0xcc, 0x52, 0x8d, 0x84, + 0xa4, 0x76, 0x10, 0x94, 0x1c, 0x35, 0xb2, 0x32, 0x5e, 0xcf, 0x9e, 0x55, + 0xe4, 0x45, 0x07, 0x1f, 0xfc, 0x63, 0x0c, 0x40, 0x01, 0xe2, 0x87, 0xf7, + 0x09, 0xfd, 0x2c, 0xac, 0x4c, 0x21, 0x91, 0x5f, 0x1b, 0x25, 0xba, 0xc5, + 0xc1, 0xf1, 0x62, 0xff, 0xde, 0xe6, 0x44, 0xc0, 0xe6, 0x6c, 0xb1, 0x6e, + 0xd6, 0x2a, 0x08, 0x91, 0xd1, 0x21, 0x0c, 0xf9, 0x06, 0xfe, 0x13, 0x6a, + 0x03, 0x3a, 0xc5, 0xfb, 0x02, 0xf0, 0x67, 0x58, 0xbe, 0xee, 0x19, 0xe5, + 0x8b, 0xff, 0xb2, 0x10, 0x6e, 0x0f, 0x44, 0xc1, 0x2c, 0x51, 0x87, 0xd2, + 0x44, 0x97, 0xff, 0xf8, 0x39, 0x00, 0xff, 0x3a, 0xc2, 0x76, 0x87, 0x33, + 0xcb, 0x15, 0x04, 0x41, 0x70, 0x8a, 0xe7, 0x1a, 0xc5, 0xdc, 0xd9, 0x62, + 0xfe, 0x29, 0x0b, 0x52, 0x75, 0x8b, 0xff, 0xec, 0xf0, 0x80, 0x76, 0x87, + 0x33, 0xa4, 0x8d, 0x62, 0x86, 0x89, 0x9c, 0x19, 0x22, 0xea, 0xd2, 0x60, + 0x24, 0x47, 0xe8, 0x58, 0x5f, 0xfd, 0x38, 0x0e, 0x41, 0xf5, 0xb0, 0x80, + 0xb1, 0x7f, 0x03, 0x9a, 0xd6, 0x04, 0xb1, 0x77, 0xde, 0x23, 0xf6, 0x24, + 0x6b, 0xfe, 0xc3, 0x9c, 0x5c, 0x86, 0xdb, 0xac, 0x5f, 0xc2, 0xd0, 0x33, + 0xec, 0xb1, 0x5b, 0xa2, 0x60, 0x8b, 0x78, 0x7b, 0x7d, 0xc3, 0xb3, 0xac, + 0x54, 0x0f, 0x4b, 0xc6, 0x17, 0xff, 0xa0, 0x66, 0xa7, 0x8f, 0x24, 0x00, + 0x4a, 0xc5, 0x49, 0xf6, 0x31, 0x15, 0xff, 0x73, 0x30, 0xd3, 0x5a, 0x12, + 0xb1, 0x7f, 0x7d, 0x9f, 0xd2, 0x4b, 0x17, 0xff, 0xc0, 0x7d, 0x1a, 0x53, + 0x81, 0x67, 0x04, 0x75, 0x8a, 0x93, 0xfd, 0x34, 0xb2, 0xfc, 0x3c, 0xe0, + 0x8d, 0x58, 0xbe, 0x63, 0xe0, 0xd6, 0x2f, 0xc3, 0x62, 0x6e, 0x8b, 0x17, + 0x37, 0x16, 0x2b, 0x0f, 0x03, 0x45, 0x35, 0xda, 0x70, 0xda, 0x85, 0xb9, + 0x11, 0x78, 0xab, 0xa3, 0x15, 0xff, 0x7e, 0x7b, 0xf4, 0xfd, 0xa3, 0xd6, + 0x29, 0x62, 0xff, 0xb4, 0xe2, 0xd8, 0x00, 0x9e, 0xa5, 0x8b, 0xfe, 0xd7, + 0xbc, 0xfa, 0xf6, 0x6e, 0xb1, 0x7f, 0xf9, 0xb5, 0xa1, 0x1b, 0xec, 0x8a, + 0x0c, 0x05, 0x8b, 0xfd, 0xe7, 0xd3, 0x7d, 0x8e, 0xb1, 0x70, 0x71, 0x2c, + 0x5c, 0x2d, 0x2c, 0x5f, 0xd9, 0xae, 0x7f, 0x37, 0x58, 0xb7, 0x45, 0x8a, + 0x31, 0x3b, 0x7e, 0xbb, 0x3d, 0x18, 0x66, 0x1f, 0x1a, 0x77, 0xda, 0x6e, + 0x8c, 0xfe, 0x34, 0x43, 0x11, 0xc5, 0xf7, 0xd1, 0x14, 0x9d, 0x62, 0xdd, + 0xac, 0x5d, 0x81, 0x2c, 0x5d, 0xef, 0x39, 0xab, 0xf0, 0x9d, 0x4a, 0x62, + 0x39, 0x09, 0x77, 0x4e, 0xbd, 0xb1, 0x09, 0x62, 0xff, 0xc7, 0xd4, 0xfd, + 0xf7, 0x72, 0x65, 0x8b, 0x42, 0x4f, 0x71, 0x87, 0xaf, 0x04, 0x10, 0x4a, + 0x90, 0x46, 0x0b, 0xfe, 0x2d, 0xf3, 0x5b, 0xb3, 0x6e, 0xa9, 0x04, 0x60, + 0x8c, 0x36, 0x55, 0x12, 0x2d, 0xd9, 0x62, 0xdb, 0x2c, 0x5e, 0x62, 0x02, + 0xc5, 0xc2, 0x89, 0x62, 0x8d, 0x36, 0xba, 0x1c, 0xbc, 0xcf, 0xd4, 0xb1, + 0x50, 0x44, 0x4b, 0xa4, 0x7c, 0x8a, 0xa5, 0x96, 0xc8, 0x33, 0xcc, 0x2f, + 0x79, 0x42, 0xe7, 0x94, 0x02, 0xd1, 0xd3, 0x02, 0x58, 0xd0, 0xa3, 0x46, + 0xe9, 0x0a, 0xcb, 0xff, 0xbd, 0xfc, 0xe9, 0x83, 0xd1, 0x30, 0x4b, 0x16, + 0x1a, 0xc5, 0xfb, 0xf9, 0xa9, 0x87, 0x0f, 0x64, 0x48, 0xf7, 0xb8, 0x06, + 0x58, 0xbb, 0x02, 0x58, 0xbf, 0x6e, 0xfc, 0xc1, 0xac, 0x56, 0xc7, 0x83, + 0xf1, 0x8b, 0xdf, 0xce, 0xa5, 0x8a, 0xd9, 0x14, 0x3b, 0xaf, 0x04, 0x47, + 0x7f, 0x98, 0x78, 0xfd, 0x18, 0xeb, 0x17, 0xff, 0xed, 0xf0, 0x89, 0xf3, + 0x52, 0x3f, 0xb1, 0x3a, 0xc5, 0x69, 0x10, 0xc2, 0x34, 0xbf, 0xff, 0xff, + 0x39, 0xf3, 0x98, 0x42, 0xf7, 0xf3, 0xa0, 0xe7, 0xef, 0x3e, 0xf8, 0x98, + 0xeb, 0x17, 0xfe, 0x16, 0xf9, 0xad, 0xa7, 0xe2, 0x1a, 0xc5, 0xe0, 0x74, + 0x3a, 0xc5, 0xf6, 0xff, 0x7d, 0x96, 0x28, 0xc3, 0xc5, 0x62, 0x0a, 0x74, + 0x54, 0xf2, 0x10, 0xf7, 0xe1, 0xcb, 0x97, 0x96, 0x28, 0x6a, 0xcd, 0x72, + 0x1b, 0xfa, 0x85, 0xcf, 0xc8, 0xfd, 0x19, 0x60, 0x44, 0xf7, 0xe7, 0xd4, + 0x23, 0xbc, 0xb1, 0x7f, 0xf3, 0x73, 0x69, 0xfe, 0x6e, 0x1c, 0x73, 0x2c, + 0x51, 0xcf, 0xd8, 0x8b, 0x2f, 0xff, 0xff, 0x7f, 0x05, 0xa3, 0x7e, 0xfd, + 0xcf, 0x85, 0xf2, 0xce, 0xfc, 0x26, 0xe2, 0xc5, 0xff, 0xd9, 0xd8, 0x7e, + 0x72, 0x14, 0x33, 0x8b, 0x17, 0xff, 0xff, 0xff, 0xff, 0xff, 0xec, 0x2d, + 0x89, 0x87, 0x25, 0xb4, 0xe8, 0x78, 0x59, 0xee, 0x3e, 0xf8, 0x41, 0xed, + 0x9a, 0x9e, 0x13, 0x1b, 0xcc, 0x70, 0x00, 0x40, 0x26, 0x1c, 0x96, 0xd3, + 0xa5, 0x8b, 0xff, 0xff, 0xbe, 0xfe, 0xfe, 0x1f, 0xc5, 0x20, 0x9f, 0xb7, + 0xb8, 0x26, 0xed, 0x62, 0xff, 0xf9, 0x88, 0x1d, 0xc2, 0x5a, 0x18, 0x6b, + 0xe9, 0x62, 0xb8, 0x8c, 0x2e, 0x8e, 0x57, 0xee, 0x1a, 0x6e, 0x47, 0xac, + 0x5f, 0x75, 0x67, 0x7e, 0x58, 0xa9, 0x3d, 0x56, 0x2e, 0xbf, 0xa0, 0x59, + 0x82, 0xeb, 0xd6, 0x2f, 0xf3, 0x7a, 0x19, 0xac, 0xe2, 0xc5, 0x4a, 0xb1, + 0x0c, 0x46, 0x78, 0xf2, 0xfe, 0xf4, 0xc4, 0x04, 0x65, 0x7f, 0xe7, 0xdf, + 0xf9, 0x1c, 0x1e, 0xa6, 0x0b, 0x17, 0xe6, 0x00, 0x1f, 0xeb, 0x17, 0xff, + 0x67, 0x4f, 0x79, 0x9c, 0x8a, 0x4e, 0xb1, 0x74, 0xc3, 0xe7, 0xd9, 0xe2, + 0x8a, 0xfa, 0x37, 0x4a, 0x16, 0x17, 0xed, 0xfc, 0x6b, 0xee, 0xb1, 0x7f, + 0xfb, 0xf2, 0x5e, 0x33, 0xec, 0x3f, 0xb6, 0x96, 0x29, 0x8f, 0xdf, 0x85, + 0x97, 0xfd, 0x9c, 0xfe, 0x31, 0x64, 0x7a, 0xc5, 0xd9, 0xb2, 0xc5, 0xfe, + 0x0c, 0xd7, 0xea, 0x92, 0x82, 0xc5, 0xff, 0x16, 0x3e, 0x8a, 0x7b, 0x82, + 0xc5, 0x62, 0x30, 0xb4, 0x75, 0xf1, 0x86, 0x38, 0xbf, 0xff, 0xc2, 0xdb, + 0x3e, 0xfe, 0xfe, 0x1f, 0x35, 0x0c, 0xef, 0xcb, 0x17, 0xcd, 0xd2, 0x7a, + 0x2c, 0x57, 0x91, 0x12, 0x26, 0x3b, 0xfe, 0x7d, 0x6c, 0x20, 0x19, 0xcf, + 0x2c, 0x5f, 0xdf, 0x7f, 0xfe, 0x4e, 0xb1, 0x7e, 0x81, 0x4e, 0x71, 0x62, + 0xf3, 0x16, 0xdb, 0x9e, 0xaf, 0x65, 0xd5, 0x04, 0x75, 0x70, 0x8f, 0xd0, + 0x92, 0xbf, 0x8b, 0x0d, 0xe3, 0x7d, 0x62, 0xf9, 0xcd, 0xc1, 0xac, 0x5e, + 0x37, 0x06, 0xb1, 0x76, 0x1c, 0xc3, 0xc1, 0x72, 0x3a, 0x3a, 0x27, 0x3c, + 0xdf, 0x7f, 0xf8, 0xf8, 0x6b, 0xe8, 0xb3, 0xde, 0xcd, 0x96, 0x2f, 0xff, + 0x45, 0x09, 0xd8, 0x98, 0xde, 0x14, 0xc1, 0x62, 0x96, 0x2d, 0x20, 0x3d, + 0x8e, 0x26, 0x5f, 0xf8, 0x3c, 0xfb, 0x1e, 0x30, 0x20, 0x82, 0x58, 0xbf, + 0xff, 0x66, 0xff, 0x92, 0x19, 0x3e, 0xd8, 0x4e, 0x6a, 0xc5, 0x6c, 0x89, + 0xc8, 0x23, 0xdf, 0xfd, 0xb0, 0x1f, 0xbe, 0x6f, 0x8e, 0x5b, 0xac, 0x53, + 0x1f, 0x61, 0x12, 0x54, 0xa7, 0xe5, 0x08, 0x51, 0xb4, 0x65, 0xf7, 0xff, + 0xe2, 0x90, 0x73, 0x7f, 0xbe, 0xa2, 0x29, 0x07, 0x16, 0x2f, 0xfc, 0xf1, + 0x61, 0x48, 0x5a, 0x93, 0xac, 0x5e, 0x3e, 0x71, 0x62, 0xa2, 0x45, 0x9e, + 0x95, 0xce, 0x7f, 0x7f, 0x4e, 0xed, 0xbf, 0x20, 0xb1, 0x7f, 0xff, 0x7b, + 0x92, 0x6c, 0x1f, 0xec, 0x5e, 0x86, 0x6b, 0x16, 0x2f, 0xfc, 0xfc, 0xc1, + 0x98, 0xc0, 0x8e, 0xc5, 0x8b, 0x85, 0xd1, 0x62, 0xff, 0x49, 0xfb, 0xf4, + 0xe7, 0x6b, 0x17, 0xfc, 0xfd, 0x3e, 0xd0, 0xd4, 0x9a, 0xb1, 0x7f, 0xf4, + 0x83, 0x3d, 0x3b, 0x94, 0xfb, 0x8b, 0x15, 0xf4, 0x40, 0x11, 0xe5, 0x62, + 0x71, 0xdb, 0xad, 0xe9, 0x0b, 0xe3, 0x5e, 0x85, 0xad, 0xf4, 0xc3, 0x91, + 0xcb, 0x17, 0xf7, 0x8c, 0x3c, 0xe7, 0x96, 0x2f, 0xff, 0xbb, 0xf3, 0x85, + 0xcf, 0xbf, 0x60, 0xd3, 0x0d, 0x62, 0xb1, 0x10, 0x7a, 0x2f, 0xbc, 0x22, + 0x35, 0x62, 0xe6, 0x25, 0x8b, 0x79, 0xcd, 0xa3, 0x0f, 0x54, 0x9f, 0xd8, + 0x95, 0xaf, 0xff, 0xa2, 0x29, 0x3f, 0x70, 0xf0, 0x87, 0x9d, 0xf9, 0x62, + 0xff, 0xff, 0xa1, 0xdf, 0xb5, 0x39, 0xd8, 0xff, 0x87, 0x2c, 0xe8, 0xe4, + 0xb1, 0x7f, 0xfc, 0xc0, 0x2c, 0xe4, 0xea, 0x37, 0x8d, 0xe3, 0x7e, 0xb7, + 0xcb, 0x15, 0x88, 0xcd, 0x76, 0x9b, 0xf6, 0xdf, 0x26, 0xed, 0x62, 0xfe, + 0xc0, 0xb0, 0x84, 0x05, 0x8b, 0xf4, 0x33, 0xd2, 0x05, 0x8b, 0xec, 0x04, + 0x81, 0x62, 0xb6, 0x3f, 0x8e, 0xcb, 0x88, 0xa2, 0xb4, 0x8d, 0x23, 0xc2, + 0x8a, 0xfd, 0xd9, 0xba, 0xce, 0x2c, 0x54, 0x9e, 0x9b, 0x14, 0x5f, 0xfc, + 0xfc, 0x29, 0xf7, 0x33, 0xa3, 0x9a, 0xb1, 0x7f, 0xff, 0xf0, 0x0e, 0xd0, + 0xfb, 0x3f, 0x9c, 0x78, 0x3c, 0xf3, 0x9d, 0xf4, 0xb1, 0x58, 0xac, 0xf7, + 0xf1, 0x90, 0xf2, 0x34, 0x6f, 0x10, 0x09, 0x1a, 0xfd, 0xac, 0x1f, 0x49, + 0x58, 0xbf, 0xff, 0x64, 0x1d, 0xba, 0x47, 0xff, 0x3b, 0x06, 0x7b, 0x8b, + 0x17, 0xfe, 0xfb, 0x75, 0x6f, 0xf7, 0x3c, 0xee, 0xb1, 0x4b, 0x14, 0xb1, + 0x5b, 0x97, 0x04, 0x19, 0x7f, 0xf4, 0xfd, 0x9f, 0xc0, 0xc8, 0x47, 0x62, + 0xc5, 0xe2, 0x90, 0x96, 0x2e, 0xce, 0x62, 0x37, 0xf7, 0x5c, 0xd1, 0x01, + 0xd1, 0xa9, 0xd3, 0xac, 0x62, 0xa2, 0x8c, 0xea, 0xff, 0xf3, 0x68, 0xd0, + 0xe4, 0x2c, 0xe7, 0x18, 0xd5, 0x8b, 0xe3, 0xc8, 0xe5, 0x62, 0xff, 0x0f, + 0xed, 0x0c, 0xef, 0xcb, 0x17, 0xff, 0xec, 0xd3, 0xc9, 0x7b, 0x37, 0x9f, + 0x7d, 0xfa, 0x2c, 0x5b, 0x66, 0x44, 0x59, 0x1a, 0xd6, 0xc8, 0xd5, 0x14, + 0x2b, 0x6b, 0x66, 0xd8, 0xa6, 0x04, 0x23, 0x97, 0x17, 0x91, 0x9b, 0x9b, + 0x09, 0xed, 0xe1, 0xc7, 0xdc, 0x75, 0xcf, 0x0d, 0x18, 0xa5, 0x0a, 0xea, + 0x1d, 0xa7, 0x31, 0xfc, 0x77, 0xc0, 0x50, 0xe4, 0x64, 0x9e, 0x96, 0xbd, + 0xd2, 0x50, 0x18, 0x46, 0x81, 0xc6, 0x47, 0x7f, 0x8d, 0x92, 0xcf, 0x7d, + 0xd6, 0x2f, 0xff, 0x70, 0x72, 0xc5, 0xb7, 0x9f, 0x8f, 0xd1, 0x62, 0xd2, + 0x69, 0xff, 0xf8, 0xce, 0xff, 0xfb, 0x69, 0xd1, 0x83, 0xc2, 0xdb, 0x04, + 0x5e, 0x58, 0xbf, 0x72, 0x76, 0xc0, 0x96, 0x2d, 0x24, 0x7f, 0x9c, 0x52, + 0xbf, 0xfe, 0x1f, 0x84, 0xdd, 0xf8, 0x18, 0x33, 0x3e, 0xeb, 0x17, 0xff, + 0xe6, 0x7f, 0x43, 0x3c, 0xc4, 0x09, 0xf4, 0x8d, 0x62, 0xff, 0x4f, 0xb9, + 0x82, 0x2f, 0x2c, 0x5f, 0x3f, 0x41, 0xcf, 0xd1, 0x0c, 0x4a, 0x77, 0xff, + 0xff, 0x3f, 0xb9, 0x86, 0x7b, 0x8d, 0x03, 0x37, 0xfb, 0x8f, 0x4e, 0x2d, + 0x96, 0x2f, 0xff, 0xf6, 0x01, 0x8c, 0xf7, 0xf0, 0x7f, 0xc0, 0x60, 0xfe, + 0xeb, 0x17, 0xff, 0x9b, 0xff, 0x71, 0xe7, 0xb8, 0x22, 0xf2, 0xc5, 0x1d, + 0x32, 0x22, 0x77, 0xe8, 0xc3, 0x7f, 0x9f, 0xa6, 0x73, 0x99, 0x1e, 0xb1, + 0x7d, 0xe2, 0x17, 0x96, 0x2e, 0x11, 0x2c, 0x5e, 0xc3, 0xe6, 0x8d, 0xd7, + 0xc8, 0xef, 0xf8, 0xe6, 0x6b, 0x3a, 0xbf, 0x87, 0x58, 0xa9, 0x4c, 0x4e, + 0x06, 0x5f, 0x72, 0x63, 0x1b, 0xfe, 0xeb, 0xdf, 0x5b, 0x8f, 0xf3, 0xba, + 0xc5, 0x0d, 0x5f, 0x5b, 0x13, 0x72, 0x1b, 0x3e, 0x94, 0xde, 0x23, 0xcb, + 0x8d, 0x75, 0x8b, 0xf9, 0xe4, 0xbc, 0x19, 0xd6, 0x2b, 0x47, 0x8d, 0xe1, + 0x8b, 0xef, 0x90, 0x8d, 0x58, 0xbf, 0xbf, 0x3c, 0x83, 0x81, 0x62, 0xff, + 0xb7, 0xcd, 0x69, 0xa0, 0x2c, 0x58, 0xbf, 0xff, 0xf7, 0x60, 0x92, 0xdd, + 0xbc, 0xdd, 0x80, 0xf3, 0xff, 0x63, 0xf4, 0x58, 0xa1, 0xa3, 0x63, 0x0b, + 0x83, 0x3a, 0xbf, 0x83, 0xd1, 0xca, 0x42, 0x58, 0xaf, 0x1f, 0x00, 0x66, + 0x17, 0xe7, 0x17, 0x5f, 0x9c, 0x58, 0xac, 0x4f, 0x38, 0xd2, 0x26, 0x8d, + 0x73, 0xc4, 0x75, 0x2e, 0x80, 0x47, 0x2b, 0x70, 0x87, 0x8f, 0x31, 0xa7, + 0x23, 0xc5, 0x29, 0xae, 0xff, 0x8c, 0xfb, 0xb4, 0x3c, 0xfb, 0x2c, 0x5f, + 0xb3, 0x77, 0x90, 0x2c, 0x54, 0x0f, 0x8f, 0x73, 0xbb, 0xc1, 0x04, 0x12, + 0x45, 0xff, 0x60, 0x1b, 0x59, 0xd3, 0x06, 0x91, 0x18, 0x68, 0x6e, 0x08, + 0x24, 0x8b, 0xc1, 0x04, 0x12, 0x45, 0xfc, 0xdb, 0x0f, 0xf3, 0xc4, 0x88, + 0xc3, 0x43, 0x44, 0x8c, 0xa0, 0x93, 0x63, 0x8e, 0xef, 0xdb, 0xb8, 0xc3, + 0x3a, 0x44, 0x61, 0xb3, 0xbc, 0x10, 0x41, 0x24, 0x5e, 0xe4, 0xe9, 0x22, + 0x30, 0xd0, 0xdf, 0x31, 0x77, 0xe5, 0x8a, 0x74, 0x59, 0x79, 0x7c, 0x23, + 0x0a, 0xd2, 0xa2, 0x30, 0x47, 0xe7, 0x7f, 0xe9, 0xd6, 0xa5, 0x88, 0x0d, + 0xba, 0xc5, 0xfc, 0x40, 0x30, 0x2c, 0xfa, 0xc5, 0xba, 0xc5, 0x8a, 0x82, + 0x21, 0x58, 0xfa, 0x38, 0xc2, 0xff, 0x9c, 0xb7, 0x2c, 0x09, 0x80, 0xb1, + 0x7f, 0x09, 0xb6, 0x21, 0xf6, 0xb1, 0x7d, 0x30, 0x6d, 0xd6, 0x2b, 0xe7, + 0xa6, 0x46, 0x17, 0xff, 0xff, 0x31, 0xbc, 0xf1, 0x67, 0x3e, 0xfe, 0xfe, + 0x1f, 0x3d, 0x3e, 0xe2, 0xc5, 0xfc, 0x2d, 0xf8, 0xfb, 0x89, 0x62, 0xf6, + 0x44, 0xeb, 0x14, 0x34, 0x70, 0x91, 0x0f, 0x9c, 0x83, 0x31, 0xbf, 0xff, + 0xe9, 0x38, 0xdd, 0x88, 0x3e, 0xfd, 0x9d, 0xf8, 0x0d, 0xee, 0x2c, 0x5f, + 0xf0, 0x27, 0xb2, 0xc0, 0x0b, 0x8b, 0x17, 0xc2, 0xda, 0x38, 0x96, 0x28, + 0x07, 0xc3, 0xc3, 0xab, 0xfd, 0xbc, 0x90, 0xc3, 0x8b, 0x8b, 0x17, 0xe1, + 0xbf, 0x49, 0x1a, 0xc5, 0xf6, 0x16, 0x47, 0xac, 0x56, 0x8f, 0x38, 0xe5, + 0x54, 0x34, 0xe4, 0xde, 0x19, 0x4c, 0x44, 0x1c, 0x21, 0x6f, 0xc6, 0x4f, + 0xd8, 0xeb, 0x17, 0xfe, 0x68, 0x13, 0x1b, 0x11, 0x3c, 0x4b, 0x17, 0xfc, + 0x40, 0xce, 0xfd, 0x99, 0xc5, 0x8b, 0x84, 0xcb, 0x15, 0xf4, 0x48, 0x32, + 0x07, 0x8e, 0x6f, 0xe8, 0xd6, 0x58, 0x13, 0x01, 0x62, 0xf0, 0x41, 0x04, + 0x91, 0x78, 0x98, 0x24, 0x88, 0xc3, 0x43, 0x7c, 0x3c, 0x21, 0xac, 0x5f, + 0xf6, 0xd3, 0xdf, 0x1c, 0xb0, 0x0b, 0x17, 0xcd, 0x07, 0x02, 0xc5, 0xf9, + 0xcd, 0xf6, 0x6e, 0xb1, 0x5b, 0xa2, 0xa3, 0x44, 0x5f, 0x3a, 0x22, 0x2b, + 0xf6, 0x6c, 0x7c, 0x3a, 0xc5, 0xfd, 0x3b, 0x0f, 0xf3, 0xc5, 0x8b, 0xfd, + 0x39, 0xbe, 0x74, 0x71, 0xac, 0x5f, 0xc2, 0xd8, 0x3f, 0x3c, 0x16, 0x2d, + 0x9b, 0xa2, 0x54, 0x8b, 0xf8, 0x6b, 0x51, 0xad, 0x52, 0xe8, 0xd5, 0x72, + 0x1b, 0x04, 0x7b, 0x1d, 0x0b, 0xeb, 0xfb, 0xf9, 0xd3, 0x3d, 0xc5, 0x8a, + 0x1a, 0xbd, 0x2d, 0xe1, 0x72, 0x09, 0x51, 0x9e, 0x5d, 0xa8, 0x2f, 0xea, + 0x0c, 0xcb, 0x51, 0xb6, 0xfe, 0x3d, 0x02, 0x9c, 0x19, 0xbf, 0xde, 0x86, + 0x7f, 0xed, 0x05, 0x8b, 0x69, 0x62, 0xe7, 0x1a, 0xc5, 0x1a, 0x6a, 0x7e, + 0x25, 0x7e, 0x8b, 0x5a, 0x7d, 0x96, 0x2f, 0x7a, 0x4e, 0xb1, 0x7c, 0x5f, + 0xc2, 0x58, 0xb6, 0x96, 0x2b, 0x0d, 0x9b, 0x90, 0xdf, 0x3b, 0x10, 0xd6, + 0x2f, 0xcf, 0xb0, 0x59, 0xf5, 0x8b, 0x84, 0x05, 0x8b, 0xf7, 0xf1, 0xf5, + 0x05, 0x8a, 0x1a, 0x22, 0xf0, 0x84, 0x05, 0x5e, 0x18, 0xbf, 0xfb, 0xd3, + 0xa6, 0x83, 0x77, 0x00, 0xce, 0xb1, 0x7e, 0x91, 0xc6, 0xfd, 0x6f, 0x58, + 0xb1, 0x7f, 0x7b, 0xbd, 0xdf, 0x02, 0xc3, 0xff, 0x0d, 0x1e, 0xfb, 0x22, + 0x7d, 0x2c, 0x5f, 0x8b, 0x06, 0xd0, 0x58, 0xa9, 0x3c, 0xa8, 0x11, 0xd6, + 0xc9, 0xb6, 0xea, 0x17, 0x65, 0x09, 0x1b, 0x79, 0x62, 0xee, 0xb3, 0xac, + 0x58, 0xad, 0x8d, 0xa0, 0x84, 0xaa, 0x59, 0x90, 0xd9, 0x48, 0x84, 0x35, + 0x83, 0x75, 0xd7, 0x22, 0xd1, 0x5f, 0xd4, 0x1a, 0x50, 0xb9, 0x37, 0xdf, + 0xff, 0x37, 0x49, 0xfb, 0x7f, 0x79, 0xf7, 0x26, 0x0b, 0x17, 0xd1, 0xdf, + 0xcd, 0xd6, 0x2f, 0xfd, 0xee, 0x7c, 0x3d, 0x39, 0x49, 0xd6, 0x2f, 0x80, + 0xe5, 0xe5, 0x8a, 0xd9, 0x11, 0x24, 0x4f, 0xc4, 0x0b, 0xba, 0xeb, 0xd6, + 0x2c, 0x5e, 0x13, 0x0d, 0x62, 0xfb, 0xd2, 0x17, 0x16, 0x2f, 0x72, 0x7c, + 0xb1, 0x70, 0x02, 0x58, 0xbf, 0x70, 0x44, 0x19, 0xd6, 0x2d, 0xc8, 0xd9, + 0x10, 0x91, 0x12, 0x30, 0xef, 0x86, 0x6a, 0x0a, 0x86, 0x72, 0x1b, 0x7d, + 0x98, 0x7c, 0x97, 0xd0, 0xa1, 0xbf, 0xfd, 0x3a, 0x96, 0x88, 0xec, 0x3f, + 0xc9, 0x2c, 0x5f, 0xfb, 0xed, 0x0c, 0xd0, 0x0e, 0xfc, 0x58, 0xa3, 0x51, + 0x11, 0xe4, 0x9b, 0xf6, 0x05, 0x9a, 0xd9, 0x62, 0xfd, 0xbc, 0xfe, 0x4e, + 0xb1, 0x73, 0x0d, 0x62, 0xe6, 0xf2, 0xc5, 0xf4, 0x7b, 0x10, 0x36, 0x44, + 0x0e, 0x15, 0x1c, 0xa4, 0x85, 0xef, 0xf6, 0x1a, 0x6b, 0x42, 0x03, 0x58, + 0xbf, 0x99, 0x87, 0xe1, 0x32, 0xc5, 0xf0, 0xd8, 0x81, 0x87, 0xc6, 0x46, + 0xd5, 0x29, 0xc9, 0xe4, 0x29, 0x45, 0x0b, 0x8b, 0xfe, 0x19, 0xdf, 0x5c, + 0x62, 0x02, 0xc5, 0xba, 0xc5, 0x8b, 0xfe, 0xfc, 0xc2, 0x0f, 0xcc, 0x1a, + 0xc5, 0x81, 0xd7, 0x0f, 0x43, 0xc2, 0xf7, 0xf8, 0xed, 0xdc, 0xea, 0x26, + 0x58, 0xbf, 0xda, 0x9e, 0x9e, 0x26, 0x02, 0xc5, 0xbd, 0x27, 0xd5, 0x86, + 0xb5, 0x28, 0xbe, 0x78, 0x4c, 0x5f, 0xfd, 0x27, 0xc7, 0x89, 0x9a, 0x1b, + 0xc1, 0x62, 0xa0, 0x7d, 0x64, 0x4d, 0x7f, 0xf6, 0x85, 0xb1, 0x99, 0xf9, + 0xe7, 0xdd, 0x62, 0xfb, 0xa8, 0x51, 0x1d, 0x62, 0x9d, 0x52, 0x14, 0x51, + 0xd9, 0x68, 0x87, 0xe8, 0xf7, 0xff, 0xef, 0xcf, 0x3c, 0x53, 0x11, 0x48, + 0xf3, 0xbf, 0x2c, 0x5f, 0x0f, 0xf3, 0xb2, 0xc5, 0xfb, 0x43, 0x18, 0xb6, + 0x58, 0xb8, 0xa0, 0x34, 0x52, 0x92, 0xb0, 0x64, 0x97, 0xff, 0xb7, 0x1e, + 0x16, 0x0d, 0xf9, 0xf6, 0x82, 0xc5, 0x4a, 0x21, 0x5c, 0xee, 0xfd, 0x9a, + 0x8e, 0x38, 0xd6, 0x2f, 0xfd, 0xdf, 0x8d, 0x35, 0xbe, 0x42, 0xf2, 0xc5, + 0x0c, 0xfb, 0xf0, 0xb2, 0xff, 0x19, 0xa9, 0x3b, 0xfe, 0x56, 0x2f, 0x7d, + 0xe2, 0x48, 0xad, 0x1f, 0x99, 0x10, 0xf0, 0xd2, 0xff, 0x9b, 0xbf, 0x64, + 0x42, 0xd1, 0xab, 0x16, 0xdd, 0xcf, 0xac, 0x45, 0xd7, 0xf8, 0xb3, 0xb8, + 0x71, 0xcd, 0x58, 0xbc, 0xfb, 0xca, 0xc5, 0xf9, 0xf5, 0xb0, 0xb8, 0xb1, + 0x73, 0xe9, 0x62, 0xb4, 0x7b, 0xc7, 0x1d, 0xf1, 0x55, 0xc1, 0xe9, 0x62, + 0xf6, 0x85, 0xb2, 0xc5, 0xe6, 0xd1, 0xab, 0x16, 0x3a, 0xc5, 0x62, 0x25, + 0xcd, 0x2f, 0xd0, 0xcb, 0x0f, 0xf4, 0x1e, 0xbf, 0xf0, 0xff, 0x3c, 0xcd, + 0x6d, 0x30, 0x58, 0xbd, 0x33, 0x1e, 0xb1, 0x78, 0xd1, 0x6e, 0xb1, 0x63, + 0x56, 0x2f, 0xfe, 0xcd, 0xff, 0x3f, 0xcd, 0x6a, 0x4d, 0x58, 0xb8, 0x1c, + 0x93, 0xd9, 0xd0, 0x9d, 0x1a, 0x8a, 0x67, 0x79, 0xa3, 0x15, 0x4e, 0xed, + 0x19, 0x54, 0x49, 0x7a, 0x40, 0x28, 0x62, 0xdf, 0xec, 0xdc, 0x13, 0x9d, + 0xc1, 0x62, 0xda, 0x58, 0xac, 0x3c, 0x73, 0x9a, 0xdf, 0xf8, 0x5c, 0xc2, + 0x9f, 0x8c, 0x33, 0xac, 0x5f, 0xed, 0x48, 0x58, 0x4e, 0x6a, 0xc5, 0xce, + 0x35, 0x8b, 0xfd, 0xed, 0x0b, 0x9f, 0x68, 0x68, 0xf2, 0xc0, 0x69, 0x7f, + 0xb8, 0x20, 0x37, 0xa0, 0xcb, 0x17, 0x1f, 0xa2, 0x45, 0xa4, 0xc3, 0xce, + 0x63, 0x4b, 0xe1, 0xc9, 0x6e, 0xb1, 0x7d, 0xd7, 0xfd, 0xe0, 0xb1, 0x4b, + 0x16, 0xc3, 0x0d, 0xa4, 0x6c, 0x51, 0x7f, 0xff, 0x63, 0xf7, 0x09, 0x3c, + 0xe7, 0xb9, 0x82, 0x2f, 0x2c, 0x56, 0x91, 0x0d, 0xd0, 0xb2, 0xff, 0x9c, + 0xd0, 0xca, 0x7e, 0xfb, 0x2c, 0x5f, 0xff, 0x36, 0xb3, 0xa6, 0x0c, 0x29, + 0xe6, 0xef, 0x1e, 0xb1, 0x7f, 0xf7, 0xdd, 0x80, 0x09, 0x04, 0xff, 0x8b, + 0x17, 0xf7, 0xf0, 0xe7, 0x68, 0x2c, 0x5e, 0x08, 0x20, 0x92, 0x2f, 0xf1, + 0x7b, 0xef, 0x25, 0xb2, 0x44, 0x61, 0xa1, 0xbf, 0x4f, 0x04, 0x19, 0xd6, + 0x2f, 0xa7, 0x4d, 0xf5, 0x8a, 0x82, 0x38, 0x71, 0x3f, 0x74, 0x6f, 0x15, + 0x5c, 0xe0, 0x58, 0xbf, 0xa4, 0x63, 0xce, 0xe0, 0xb1, 0x7f, 0x3e, 0xa0, + 0x1c, 0x81, 0x62, 0xe9, 0x06, 0x22, 0xcb, 0xe7, 0xa4, 0x2f, 0x1c, 0x5f, + 0x58, 0xab, 0x5b, 0x72, 0x50, 0x1d, 0xf9, 0x58, 0x38, 0xf5, 0xef, 0xed, + 0x40, 0x38, 0x3e, 0xcb, 0x17, 0x98, 0x1c, 0x58, 0xbb, 0x0c, 0xc3, 0xce, + 0xf1, 0x8d, 0x6e, 0xb9, 0x50, 0xe4, 0xe7, 0x97, 0x67, 0xd2, 0x14, 0x37, + 0xfc, 0xc0, 0x2c, 0x8a, 0x13, 0xda, 0xc5, 0xff, 0xa7, 0xbf, 0xe7, 0x60, + 0xcf, 0x71, 0x62, 0xa5, 0x78, 0x2b, 0x27, 0x50, 0x5d, 0x38, 0x47, 0x57, + 0xef, 0xb8, 0xda, 0x0b, 0x17, 0xec, 0xd6, 0x9e, 0x25, 0x8b, 0x98, 0xb7, + 0x3d, 0x12, 0x28, 0xbf, 0xe7, 0x04, 0x6d, 0xcc, 0xd3, 0x01, 0x62, 0xf6, + 0x16, 0xeb, 0x17, 0xfb, 0x8d, 0xfe, 0xe1, 0x9e, 0x58, 0xbf, 0x07, 0xa2, + 0x14, 0x16, 0x2a, 0x07, 0xbe, 0x46, 0xb7, 0xee, 0x1d, 0xf5, 0xc5, 0x8a, + 0xd9, 0x33, 0x0d, 0x16, 0x1c, 0xf9, 0x9f, 0x00, 0x43, 0x7f, 0xff, 0x43, + 0xed, 0x0d, 0xfe, 0xfe, 0x86, 0x7f, 0xed, 0x05, 0x8b, 0xf4, 0x82, 0x7f, + 0xc5, 0x8a, 0xc4, 0x42, 0x81, 0x76, 0xff, 0xe0, 0xca, 0x5c, 0x7f, 0xc8, + 0x7d, 0xd6, 0x2e, 0x0f, 0x16, 0x2f, 0xfa, 0x74, 0x0f, 0x7d, 0x86, 0xeb, + 0x15, 0x87, 0xa2, 0x18, 0xc5, 0xff, 0x42, 0x28, 0x37, 0xb8, 0xf2, 0xb1, + 0x7f, 0xfe, 0xfb, 0x94, 0x9f, 0x09, 0xbb, 0xe1, 0xa6, 0xb2, 0xc5, 0xff, + 0xef, 0x0a, 0x5e, 0x7b, 0xdf, 0xf9, 0xdf, 0x16, 0x2b, 0x11, 0x46, 0xca, + 0xd7, 0xed, 0x69, 0xfd, 0xc5, 0x8a, 0x31, 0x3d, 0xe1, 0xc2, 0x57, 0xb2, + 0x20, 0x43, 0x74, 0x32, 0x1b, 0xff, 0xe0, 0x47, 0x64, 0xf3, 0xf3, 0xdf, + 0x8d, 0x16, 0x96, 0x2f, 0xfe, 0x8a, 0x02, 0x2f, 0x43, 0x35, 0x9c, 0x58, + 0xbf, 0xff, 0x16, 0xff, 0x78, 0xa1, 0x25, 0xed, 0x6a, 0x60, 0xb1, 0xc3, + 0xc6, 0xbf, 0xff, 0x9f, 0x9a, 0x76, 0xd4, 0xbf, 0xbf, 0x9c, 0xe6, 0x2c, + 0x5f, 0xfb, 0x53, 0x07, 0xf0, 0x32, 0x2e, 0x2c, 0x5f, 0xec, 0x98, 0x3f, + 0x8a, 0x56, 0x2c, 0x0c, 0x4c, 0xc8, 0xed, 0x1c, 0x59, 0x8e, 0x40, 0xbf, + 0x9a, 0x0d, 0x07, 0xfa, 0xc5, 0x4a, 0xa9, 0x9c, 0x58, 0x68, 0xf3, 0x84, + 0x8d, 0x7f, 0xff, 0x30, 0x0b, 0x0e, 0x4d, 0xee, 0x07, 0xa7, 0x91, 0xac, + 0x5d, 0x0e, 0x2c, 0x5a, 0x03, 0x3f, 0x27, 0x5a, 0xbf, 0xfc, 0x4d, 0xa3, + 0x7a, 0xbd, 0xa1, 0x77, 0x0e, 0x2c, 0x54, 0x9f, 0xc3, 0x93, 0xdf, 0xf8, + 0x3d, 0xf7, 0x63, 0x5f, 0x69, 0x09, 0x62, 0xff, 0x87, 0xf9, 0xed, 0xb7, + 0xe4, 0x16, 0x2b, 0xe8, 0x81, 0x64, 0x5a, 0x96, 0xec, 0x0a, 0x12, 0x9c, + 0x72, 0x53, 0xd9, 0xb1, 0xb7, 0xf7, 0x1b, 0x73, 0xca, 0xc5, 0x8a, 0x14, + 0x1a, 0x21, 0xfc, 0xf4, 0xab, 0x47, 0x8c, 0x08, 0x68, 0x14, 0xe4, 0xcf, + 0x23, 0x2c, 0x14, 0x28, 0x6f, 0xff, 0xef, 0x39, 0xf0, 0xbd, 0xc9, 0x37, + 0x82, 0x1f, 0xdd, 0x62, 0xec, 0xed, 0x62, 0xf9, 0x98, 0x1c, 0x58, 0xbf, + 0x37, 0x82, 0xcf, 0xac, 0x5e, 0x1f, 0xf1, 0x62, 0xfb, 0x1f, 0xe6, 0xac, + 0x51, 0xa8, 0x8b, 0xf9, 0x13, 0x14, 0x80, 0x76, 0xfe, 0x9d, 0xb4, 0x29, + 0x02, 0xc5, 0xff, 0xf6, 0x6f, 0x24, 0xde, 0xe0, 0xc4, 0xda, 0x82, 0xc5, + 0x6c, 0x9a, 0xff, 0x70, 0xa3, 0x88, 0xf4, 0xe5, 0xf7, 0xdc, 0xfe, 0x71, + 0x62, 0xf9, 0xfd, 0x3e, 0x58, 0xbf, 0xfe, 0x04, 0xc1, 0xb4, 0xde, 0x7e, + 0x9f, 0x9e, 0x2c, 0x53, 0xa2, 0x5b, 0x44, 0x6c, 0x45, 0x7c, 0xe0, 0xc1, + 0xac, 0x5f, 0x8b, 0x78, 0xdf, 0xae, 0x46, 0x8b, 0x17, 0xfd, 0x1d, 0x9b, + 0xfd, 0xcf, 0x3b, 0xac, 0x54, 0x9f, 0xc3, 0x1d, 0x5a, 0x56, 0x2f, 0x79, + 0xf6, 0x58, 0xad, 0x8d, 0x7f, 0x62, 0x37, 0xc7, 0xd4, 0xf4, 0x58, 0xbf, + 0xfc, 0xc7, 0x9e, 0x73, 0x3e, 0xfc, 0x16, 0xcb, 0x15, 0x27, 0xe1, 0xf2, + 0x5b, 0xff, 0xde, 0x70, 0xb8, 0x53, 0xee, 0x6b, 0x52, 0xb1, 0x74, 0x92, + 0xc5, 0xc7, 0x8e, 0x58, 0xbc, 0xc5, 0xba, 0xc5, 0x61, 0xb8, 0xf8, 0xdd, + 0xf6, 0x10, 0x7e, 0x58, 0xa8, 0x22, 0x44, 0x69, 0xda, 0x20, 0xbc, 0x39, + 0x35, 0x62, 0xff, 0xe9, 0xdf, 0xc5, 0x21, 0x67, 0xb9, 0xc5, 0x8b, 0xfe, + 0x69, 0x0d, 0xff, 0xf7, 0x89, 0x62, 0xff, 0xff, 0xd2, 0xff, 0x78, 0x14, + 0xee, 0x66, 0x7a, 0x4e, 0xfe, 0xd0, 0x96, 0x2f, 0xfb, 0x99, 0xc7, 0x3b, + 0x10, 0x16, 0x2f, 0xe2, 0x98, 0x7f, 0x80, 0x58, 0xbf, 0xf3, 0x7f, 0x53, + 0xe7, 0xdd, 0xc6, 0xb1, 0x7f, 0xfe, 0x21, 0x67, 0xcc, 0xcf, 0x49, 0xdf, + 0xda, 0x12, 0xc5, 0xff, 0xf1, 0x0b, 0xdc, 0xcd, 0xfb, 0xf3, 0x31, 0xf8, + 0xb1, 0x7f, 0xbf, 0x8f, 0xa8, 0x06, 0x75, 0x8a, 0xc4, 0x43, 0xf9, 0x4a, + 0xc0, 0x58, 0xbf, 0xfd, 0x26, 0x7d, 0xb5, 0x3c, 0xd3, 0xcf, 0xd6, 0x2b, + 0x0f, 0x73, 0xa8, 0x4a, 0xff, 0xfe, 0x26, 0x3e, 0x1c, 0xcc, 0xf4, 0x9d, + 0xfd, 0xa1, 0x2c, 0x51, 0x8a, 0xba, 0xe5, 0xb0, 0x67, 0x1f, 0x2e, 0x63, + 0xfe, 0x43, 0x77, 0xcf, 0xc1, 0x92, 0x53, 0xae, 0x00, 0xe8, 0x7b, 0xe8, + 0xc0, 0x96, 0x4b, 0x7f, 0xde, 0x03, 0x0c, 0x4d, 0xa8, 0x2c, 0x5f, 0xcf, + 0xac, 0x1b, 0x41, 0x62, 0x9c, 0xf9, 0xfc, 0x75, 0x7f, 0x8f, 0x91, 0x49, + 0xf0, 0x25, 0x8b, 0xc4, 0xfd, 0x7a, 0xc5, 0xf1, 0xe5, 0xf8, 0xb1, 0x58, + 0x7f, 0x0e, 0x6b, 0xc2, 0x1b, 0xff, 0xed, 0x42, 0x4b, 0x39, 0x38, 0x43, + 0xfc, 0xac, 0x5f, 0xe7, 0xd0, 0x7e, 0xf3, 0xec, 0xb1, 0x7d, 0xa9, 0xce, + 0xd6, 0x2a, 0x07, 0xb3, 0xe3, 0x6b, 0xe9, 0xf3, 0xf9, 0x62, 0xff, 0xff, + 0xcc, 0x79, 0xd6, 0xe3, 0xfc, 0xf0, 0x4c, 0xf0, 0xe7, 0xda, 0x0b, 0x17, + 0xe0, 0x09, 0x8b, 0x75, 0x8b, 0xfa, 0x7f, 0x90, 0xc3, 0xac, 0x5f, 0x72, + 0x60, 0x66, 0x1e, 0xb7, 0x8a, 0x6b, 0x13, 0xe6, 0x78, 0x53, 0x7c, 0x88, + 0x88, 0xb9, 0x0c, 0x3b, 0xfb, 0x1e, 0x2f, 0x88, 0xeb, 0x17, 0xe0, 0x9b, + 0xf2, 0x75, 0x8b, 0xdb, 0xcf, 0x16, 0x2f, 0xa0, 0x3c, 0x25, 0x8b, 0xff, + 0x83, 0x86, 0x7d, 0xbe, 0xfa, 0xd4, 0xac, 0x5f, 0xfb, 0x8d, 0xe8, 0x66, + 0xb4, 0xd0, 0x58, 0xbf, 0xef, 0xb3, 0xfa, 0x7c, 0xf0, 0x58, 0xa9, 0x3f, + 0x7d, 0xcf, 0xea, 0x53, 0x47, 0xc2, 0x96, 0x1e, 0x01, 0x10, 0xa1, 0x79, + 0x7a, 0x18, 0x35, 0x8b, 0xe8, 0x31, 0x01, 0x62, 0xff, 0xf3, 0xf8, 0x5a, + 0x6e, 0x41, 0xf9, 0x3b, 0x2c, 0x56, 0x1f, 0x6b, 0x11, 0x56, 0x22, 0xab, + 0xf0, 0x8a, 0xbd, 0xce, 0x98, 0xb1, 0x74, 0xe9, 0x62, 0xbc, 0x6d, 0xa3, + 0x87, 0xef, 0xee, 0x92, 0x5b, 0xc7, 0x62, 0xc5, 0xfd, 0x9b, 0x72, 0x3d, + 0xf7, 0x58, 0xa9, 0x44, 0x53, 0x92, 0x11, 0x9d, 0xf8, 0x5a, 0x37, 0xee, + 0xb1, 0x78, 0x07, 0x75, 0x8a, 0x31, 0xb0, 0xe2, 0x98, 0xee, 0xf6, 0x86, + 0xe4, 0x0b, 0x87, 0x09, 0xac, 0x4f, 0xde, 0x12, 0x7d, 0x90, 0xbc, 0x37, + 0x35, 0x38, 0x62, 0x78, 0x56, 0xfe, 0x13, 0x2d, 0x28, 0x4c, 0x0a, 0x45, + 0x1b, 0xb7, 0x21, 0xef, 0xe8, 0x73, 0xc7, 0x16, 0x86, 0x55, 0x60, 0x96, + 0x2f, 0xf8, 0x84, 0xc6, 0x80, 0xf3, 0x05, 0x8a, 0xd1, 0xe6, 0x80, 0x4e, + 0xe1, 0x01, 0x62, 0xff, 0x13, 0x05, 0x84, 0xc6, 0xac, 0x5f, 0xfe, 0xfb, + 0xeb, 0xed, 0x91, 0x49, 0xf0, 0x25, 0x8b, 0xfd, 0xed, 0x4e, 0x76, 0x19, + 0xd6, 0x2f, 0xfe, 0xcf, 0x70, 0x3e, 0x1c, 0xa7, 0x52, 0xb1, 0x7f, 0xfb, + 0x99, 0xb7, 0xe4, 0xe1, 0x8c, 0x9f, 0x65, 0x8b, 0x16, 0xc9, 0xaf, 0x0c, + 0x63, 0x0c, 0xfb, 0x4b, 0x39, 0xb7, 0x91, 0x6f, 0xfc, 0xde, 0xdf, 0xef, + 0xdf, 0x24, 0x25, 0x8b, 0x74, 0xc4, 0x50, 0x7d, 0x7a, 0xf8, 0x7a, 0x68, + 0x96, 0x2f, 0xfa, 0x7d, 0xf7, 0xe9, 0x9d, 0xf9, 0x62, 0xfc, 0xfd, 0x43, + 0xc3, 0xac, 0x56, 0xe7, 0xcf, 0xf3, 0xcb, 0xe1, 0xc9, 0x79, 0x62, 0xfc, + 0xed, 0xd0, 0x33, 0xac, 0x5f, 0xfe, 0xc3, 0x9e, 0x4b, 0x79, 0xf7, 0x3e, + 0xeb, 0x17, 0xfe, 0x9d, 0x13, 0x6d, 0x3a, 0x98, 0x2c, 0x5d, 0x03, 0xac, + 0x54, 0xa7, 0x37, 0x90, 0x8b, 0x72, 0x30, 0x11, 0x11, 0x58, 0x49, 0x41, + 0x9f, 0x5f, 0xe8, 0x06, 0x7c, 0x2c, 0x8f, 0x58, 0xa7, 0x54, 0xc9, 0xf8, + 0xf1, 0x49, 0xa2, 0xff, 0xff, 0x7d, 0xc2, 0xce, 0xa7, 0x3b, 0x7b, 0x82, + 0x86, 0x77, 0xe5, 0x8b, 0xff, 0xef, 0xcf, 0x3b, 0xdd, 0xfb, 0xce, 0x67, + 0x7e, 0x58, 0xbf, 0xf3, 0x80, 0x3f, 0xc9, 0xd9, 0xbc, 0xb1, 0x43, 0x44, + 0x9e, 0x95, 0x2f, 0xff, 0xed, 0x87, 0xf9, 0xe6, 0x77, 0xc9, 0xd7, 0xb9, + 0x9b, 0x2c, 0x50, 0xd3, 0x7b, 0xd4, 0x3e, 0x48, 0x8e, 0xe9, 0x75, 0x8a, + 0x95, 0xe8, 0x0c, 0x9c, 0x84, 0x68, 0xec, 0x40, 0x6b, 0x7e, 0x7e, 0xf9, + 0x3d, 0xac, 0x5f, 0xfc, 0x39, 0x2d, 0x83, 0x3f, 0x9f, 0xbe, 0x2c, 0x50, + 0xcf, 0xcb, 0x85, 0x57, 0xfd, 0x16, 0xff, 0x73, 0xce, 0x8d, 0x58, 0xbf, + 0x3f, 0x60, 0x6e, 0x2c, 0x5e, 0xf4, 0xc4, 0xb1, 0x79, 0xf5, 0x14, 0x9e, + 0x3e, 0x14, 0xdf, 0xd3, 0xf9, 0xf4, 0xfd, 0x62, 0xfb, 0xa9, 0xcb, 0x75, + 0x8a, 0xc3, 0xd3, 0xea, 0x2d, 0xbc, 0x29, 0x89, 0x62, 0xfe, 0x1c, 0xeb, + 0x5a, 0x95, 0x8b, 0x6c, 0x61, 0xe6, 0x06, 0x3d, 0x73, 0x44, 0xb1, 0x68, + 0x2c, 0x5f, 0xa1, 0xe7, 0xd6, 0xeb, 0x17, 0x83, 0x28, 0x96, 0x28, 0xc3, + 0xf3, 0x80, 0xc7, 0x62, 0x40, 0x2a, 0xa9, 0x54, 0xef, 0x84, 0x5b, 0xc2, + 0x13, 0x50, 0x85, 0x67, 0x0e, 0x42, 0x7a, 0x8c, 0x8d, 0x3f, 0x9a, 0x37, + 0x34, 0x8d, 0x07, 0xa3, 0x50, 0xf4, 0xd3, 0x47, 0x36, 0xa4, 0xa8, 0xc2, + 0xb0, 0x33, 0x1d, 0x3c, 0xd3, 0x2d, 0xef, 0xf1, 0xb1, 0xfc, 0xef, 0x39, + 0xdb, 0xdc, 0x6b, 0x2f, 0x49, 0xde, 0x8f, 0x8e, 0xe6, 0x2a, 0x6c, 0x7e, + 0xa9, 0x55, 0xc7, 0xa6, 0xce, 0x7e, 0xb8, 0xe0, 0x6a, 0x67, 0x80, 0x29, + 0xa3, 0xa5, 0x69, 0x11, 0x79, 0x4f, 0x77, 0xf5, 0x7b, 0x54, 0x2a, 0xc7, + 0xc0, 0x2a, 0x40, 0xc0, 0x72, 0xcd, 0x2e, 0x93, 0xac, 0x5f, 0xf1, 0xd8, + 0x20, 0xe0, 0xe0, 0xe2, 0xc5, 0xef, 0xe7, 0x16, 0x2e, 0x0f, 0x75, 0x8b, + 0xa4, 0xeb, 0x16, 0xf0, 0x0d, 0x8f, 0x86, 0xaf, 0xf3, 0x9b, 0xee, 0xf7, + 0x7f, 0xac, 0x57, 0x67, 0xbc, 0x44, 0xf7, 0xd1, 0x7d, 0xf4, 0xb1, 0x43, + 0x47, 0x96, 0x42, 0xb0, 0x32, 0x2b, 0xdd, 0x4f, 0xd1, 0x62, 0xff, 0x7d, + 0xfd, 0xf7, 0x90, 0x2c, 0x5c, 0xda, 0x58, 0xb9, 0xfe, 0xb1, 0x7d, 0x98, + 0x5e, 0x58, 0xba, 0x49, 0x62, 0xa0, 0x7c, 0xbf, 0x17, 0xe0, 0xbf, 0x42, + 0x1b, 0xff, 0xec, 0x28, 0xcf, 0x1a, 0xfd, 0xf3, 0xf8, 0x06, 0x58, 0xbf, + 0x8c, 0x8a, 0x13, 0xad, 0x96, 0x2f, 0xff, 0x87, 0x2d, 0xaf, 0x84, 0xc3, + 0x8e, 0x6d, 0xa3, 0x96, 0x2a, 0x09, 0x8e, 0x0c, 0xfa, 0x25, 0x4f, 0x19, + 0x5e, 0x66, 0x09, 0x62, 0xfd, 0xbe, 0x7b, 0xee, 0xb1, 0x43, 0x3c, 0x62, + 0x1d, 0xbf, 0xfd, 0xa8, 0xa4, 0xe6, 0x1f, 0x3d, 0xc7, 0xe2, 0xc5, 0x31, + 0xf7, 0x08, 0x86, 0xff, 0x43, 0xcf, 0xef, 0x60, 0x16, 0x2f, 0x7d, 0xfa, + 0xf5, 0x8b, 0xf9, 0xa1, 0x83, 0x6f, 0xac, 0x56, 0xe7, 0x9e, 0x72, 0x2b, + 0xee, 0xe1, 0x9e, 0x58, 0xbf, 0x40, 0xcc, 0x0f, 0x16, 0x2f, 0x9b, 0x81, + 0x9d, 0x62, 0xff, 0xd2, 0x2e, 0xbe, 0x47, 0x27, 0x29, 0x58, 0xa3, 0x11, + 0x69, 0x24, 0x90, 0x2a, 0x19, 0x25, 0xed, 0xdb, 0x75, 0x8b, 0xcf, 0xa9, + 0x58, 0xbf, 0x40, 0x3e, 0x4e, 0x2c, 0x56, 0x1e, 0x2b, 0x0e, 0x5f, 0xff, + 0x8e, 0x59, 0xdf, 0x82, 0xc7, 0xe9, 0xa6, 0x68, 0x2c, 0x5b, 0x9f, 0x3f, + 0x86, 0x20, 0xbf, 0xfb, 0xcd, 0xb3, 0x16, 0xa7, 0x7c, 0xd2, 0xc5, 0xf7, + 0xb8, 0xc7, 0x58, 0xa3, 0x0f, 0xa0, 0x24, 0x5b, 0xff, 0xfe, 0xcf, 0xb0, + 0x7c, 0xc3, 0x58, 0x81, 0x25, 0x31, 0x7e, 0x56, 0x2d, 0x2b, 0x17, 0xff, + 0xe9, 0xd7, 0xe4, 0xfd, 0x42, 0x92, 0x98, 0xbf, 0x2b, 0x17, 0xe7, 0xd4, + 0x53, 0xfd, 0x23, 0x3c, 0x0c, 0xc4, 0x23, 0x70, 0xb4, 0xb1, 0x5b, 0x32, + 0x29, 0xa1, 0x19, 0x76, 0x1a, 0xee, 0x45, 0xdc, 0x76, 0x87, 0x87, 0x9b, + 0x10, 0x82, 0x10, 0x65, 0x0d, 0x7e, 0x1e, 0xfa, 0x1b, 0x82, 0x84, 0x78, + 0x70, 0xf3, 0xea, 0x4c, 0xbf, 0xfd, 0xbf, 0xdf, 0xdc, 0x16, 0xda, 0xd4, + 0xec, 0xb1, 0x7d, 0xf9, 0xdb, 0x16, 0x28, 0xc3, 0xf2, 0x89, 0x3e, 0xdf, + 0x58, 0xbb, 0x0e, 0xb1, 0x50, 0x3c, 0xd1, 0x92, 0x47, 0x09, 0x5b, 0xae, + 0xd6, 0x2f, 0xef, 0x7d, 0xa1, 0xed, 0x96, 0x2e, 0x8e, 0x25, 0x8b, 0xe8, + 0x8a, 0x4e, 0xb1, 0x7b, 0xed, 0x03, 0x0d, 0xef, 0x86, 0xa8, 0x91, 0x41, + 0xe6, 0xdb, 0x87, 0x8b, 0x17, 0xa2, 0x73, 0xac, 0x53, 0x9b, 0x5d, 0x0b, + 0xdf, 0xc6, 0xe0, 0x88, 0x5b, 0xac, 0x5f, 0x09, 0xb5, 0x05, 0x8b, 0xff, + 0xed, 0x00, 0xf3, 0x1d, 0x86, 0x73, 0xcc, 0xc4, 0xb1, 0x7c, 0x2d, 0x37, + 0x16, 0x28, 0x68, 0x99, 0xc2, 0x3e, 0x29, 0xdf, 0xb7, 0xfc, 0xc7, 0x8d, + 0x62, 0xfb, 0x38, 0xfd, 0x16, 0x2e, 0xd9, 0x96, 0x2f, 0x31, 0x00, 0xc4, + 0x4c, 0x31, 0x79, 0x16, 0xf0, 0x92, 0xf1, 0x6d, 0x2b, 0x17, 0x61, 0x2c, + 0x53, 0x9b, 0x3e, 0x83, 0xb7, 0xfd, 0xf6, 0x86, 0x0d, 0xa0, 0xeb, 0x17, + 0xf8, 0xcf, 0xb6, 0xf2, 0x43, 0x58, 0xbe, 0xcd, 0x83, 0x82, 0xc5, 0xb9, + 0x27, 0xb4, 0x46, 0xb7, 0x67, 0x16, 0x2e, 0xd4, 0xac, 0x57, 0xcd, 0x77, + 0x85, 0xef, 0xf8, 0xa4, 0xee, 0x58, 0x79, 0x58, 0xba, 0x77, 0x58, 0xbf, + 0xcf, 0xe6, 0x21, 0xfe, 0x56, 0x2f, 0xfb, 0x4f, 0x17, 0x30, 0xd7, 0xd2, + 0xc5, 0x40, 0xfb, 0x74, 0x65, 0x7b, 0xef, 0x05, 0x8b, 0x9e, 0x56, 0x2f, + 0xf9, 0xf6, 0xcf, 0xbe, 0xbe, 0xcb, 0x16, 0x1e, 0x26, 0xd5, 0x11, 0x08, + 0x0d, 0xb9, 0x08, 0x5f, 0x11, 0x04, 0x3b, 0xd4, 0x2d, 0x7f, 0xff, 0x9a, + 0x01, 0xeb, 0x3d, 0x9a, 0x01, 0xda, 0x1e, 0x6f, 0xac, 0x53, 0xa3, 0x58, + 0x9d, 0x2f, 0xf3, 0x10, 0x22, 0x84, 0xc6, 0xa5, 0x8a, 0x35, 0x76, 0x0e, + 0x3e, 0x36, 0x1d, 0x3f, 0xfc, 0x88, 0x10, 0x92, 0x29, 0x52, 0x9e, 0x21, + 0xbf, 0x0e, 0x62, 0xf6, 0x2c, 0x5e, 0xf4, 0x9d, 0x62, 0x86, 0x78, 0xc4, + 0x53, 0x7f, 0xf1, 0x7b, 0x9f, 0x68, 0x19, 0x9d, 0xf9, 0x62, 0xba, 0xe2, + 0xfe, 0xec, 0xc2, 0xe6, 0x0a, 0xf9, 0x3b, 0x46, 0xf0, 0xc2, 0x11, 0x0d, + 0xff, 0x61, 0xa5, 0x9e, 0xe3, 0xec, 0xb1, 0x7f, 0xa3, 0xe2, 0xe4, 0xfd, + 0xa3, 0xd6, 0x2f, 0xf6, 0x6e, 0xc7, 0xc7, 0x1a, 0xc5, 0xfe, 0xcf, 0xf7, + 0xbb, 0xe6, 0x96, 0x2f, 0xec, 0xd4, 0x1c, 0xb1, 0x62, 0x9c, 0xf8, 0x44, + 0x6b, 0x74, 0xf7, 0xb2, 0x2d, 0x7d, 0x09, 0x4a, 0xd2, 0x6b, 0xec, 0x74, + 0x50, 0xf0, 0xb7, 0x6b, 0x17, 0xef, 0xff, 0xb6, 0x8f, 0x58, 0xad, 0xcf, + 0x00, 0x31, 0x3b, 0xfe, 0x0e, 0x62, 0x0e, 0x74, 0xd1, 0x2c, 0x5f, 0xb9, + 0x99, 0xec, 0x58, 0xb9, 0xfc, 0xb1, 0x7c, 0xcd, 0x0e, 0x2c, 0x58, 0xd8, + 0x1b, 0x9f, 0x0b, 0xde, 0x92, 0xd9, 0x62, 0xf9, 0xfe, 0xe7, 0x58, 0xa7, + 0x37, 0xf1, 0x0e, 0xd7, 0x68, 0xe8, 0xd3, 0x07, 0xd9, 0xef, 0x73, 0xce, + 0xb1, 0x74, 0x42, 0x58, 0xb6, 0xf2, 0x6d, 0x88, 0x76, 0xff, 0xed, 0xa7, + 0xbf, 0x38, 0x51, 0x66, 0x6e, 0xb1, 0x52, 0x7d, 0xe2, 0x26, 0xb0, 0x16, + 0x2f, 0xfa, 0x7d, 0xf6, 0x03, 0x77, 0xc5, 0x8a, 0x19, 0xf6, 0xf6, 0x42, + 0x42, 0x57, 0xfb, 0x1c, 0xe2, 0x3b, 0xf1, 0x62, 0xff, 0xf7, 0x04, 0xda, + 0x16, 0xd2, 0x68, 0x65, 0xe5, 0x8b, 0xf8, 0x50, 0xdd, 0xb5, 0xb2, 0xc5, + 0xcc, 0x12, 0xc5, 0x49, 0xe4, 0xb1, 0x8d, 0x0d, 0x16, 0xfd, 0x21, 0x2f, + 0x7f, 0x8a, 0x18, 0x4c, 0x39, 0x58, 0xbe, 0xdb, 0xcf, 0xb2, 0xc5, 0xa0, + 0xe7, 0xac, 0x23, 0x1b, 0xff, 0xf8, 0x61, 0xb6, 0x8d, 0xc7, 0x29, 0x3e, + 0x71, 0x89, 0x62, 0xd1, 0x2c, 0x59, 0x96, 0x2f, 0xc7, 0xfb, 0xb4, 0x16, + 0x28, 0xc3, 0xcc, 0x8d, 0x04, 0xf0, 0x46, 0xd3, 0xb2, 0x36, 0x82, 0x85, + 0x35, 0xff, 0xf0, 0x98, 0x6f, 0x27, 0x2c, 0xdb, 0x61, 0x12, 0xc5, 0x68, + 0xff, 0xfc, 0x5f, 0x7f, 0xf6, 0x6c, 0xd1, 0x19, 0xf9, 0xe7, 0x19, 0x62, + 0xff, 0xe1, 0x33, 0xc2, 0x4b, 0x7c, 0xef, 0xcb, 0x17, 0xc4, 0x26, 0xdc, + 0xc4, 0x46, 0x71, 0x1e, 0xe3, 0xba, 0xc5, 0xfd, 0xf7, 0xdc, 0x5a, 0x02, + 0xc5, 0xfb, 0xee, 0x0d, 0x4a, 0xc5, 0xff, 0xe2, 0xce, 0x93, 0xcf, 0xe6, + 0x14, 0x38, 0xb1, 0x60, 0x18, 0x8a, 0x2c, 0x30, 0xe1, 0x45, 0xfd, 0xef, + 0xb9, 0x85, 0xda, 0xc5, 0xee, 0xa9, 0x8f, 0x58, 0xad, 0x22, 0x24, 0x8d, + 0xba, 0x8c, 0x2f, 0xb0, 0x72, 0x6a, 0xc5, 0xff, 0xbd, 0xf7, 0x1f, 0xe7, + 0x5c, 0x75, 0x8b, 0x85, 0xba, 0xc5, 0x76, 0x7b, 0x1a, 0x3f, 0xb9, 0xbb, + 0x58, 0xbb, 0xa4, 0xac, 0x5d, 0xd5, 0x12, 0xc5, 0xc2, 0xd2, 0xc5, 0xf7, + 0xb8, 0xdd, 0x16, 0x2c, 0x05, 0x8a, 0x88, 0xf3, 0xc8, 0x63, 0xc4, 0xb7, + 0xf6, 0x7a, 0x5b, 0x46, 0xac, 0x5e, 0xc7, 0xf2, 0xc5, 0xe0, 0x82, 0x09, + 0x62, 0xf9, 0xf5, 0x9d, 0xac, 0x46, 0x1a, 0x1a, 0xf9, 0xf9, 0xb1, 0xed, + 0x9d, 0x62, 0xef, 0x81, 0x62, 0x8d, 0x35, 0x21, 0x88, 0xd7, 0x5a, 0xaf, + 0xae, 0x63, 0x42, 0x19, 0x96, 0x3d, 0xf6, 0x46, 0xe3, 0x11, 0xe3, 0x2c, + 0xd6, 0x45, 0xfc, 0x85, 0x0c, 0x72, 0x55, 0xff, 0xe9, 0x81, 0x81, 0xf9, + 0xc8, 0x50, 0xce, 0x2c, 0x5e, 0x83, 0x0d, 0x62, 0x88, 0xfa, 0x44, 0x99, + 0x7f, 0x0a, 0x21, 0x78, 0x51, 0x2c, 0x5f, 0xb0, 0x8d, 0x7e, 0x2c, 0x50, + 0x0f, 0x68, 0x46, 0x57, 0xff, 0xc2, 0xe1, 0xe7, 0xbd, 0xfe, 0xe7, 0x27, + 0xd9, 0x62, 0xf4, 0xe6, 0xeb, 0x15, 0xf3, 0xf0, 0x25, 0x3b, 0xff, 0xff, + 0x34, 0x79, 0x63, 0x91, 0x60, 0x33, 0xd2, 0x77, 0xf7, 0xdd, 0x62, 0xee, + 0x04, 0xb1, 0x7e, 0x9e, 0x14, 0x9d, 0x62, 0xb7, 0x3c, 0x0f, 0x8c, 0xdf, + 0xff, 0xff, 0xe6, 0xe3, 0x90, 0x3e, 0xff, 0x6f, 0x7d, 0xf5, 0x00, 0xca, + 0x75, 0xa7, 0xef, 0x8e, 0xb1, 0x7f, 0xfb, 0x3d, 0xcd, 0x84, 0x3c, 0x0b, + 0x0a, 0x56, 0x2b, 0xe8, 0xd9, 0x04, 0x23, 0xab, 0x66, 0x74, 0x50, 0xc9, + 0x32, 0x32, 0x5d, 0xe3, 0x43, 0xec, 0xbd, 0xe1, 0xd5, 0x14, 0x20, 0x35, + 0x1c, 0x01, 0xe1, 0x5d, 0xf9, 0xc2, 0x60, 0x46, 0x2a, 0x4f, 0x7c, 0x84, + 0x90, 0x88, 0x7a, 0x42, 0xa8, 0x38, 0x7e, 0x5d, 0xc1, 0x2c, 0x5f, 0xef, + 0x79, 0xf5, 0x9d, 0xf9, 0x62, 0xe8, 0x32, 0xc5, 0xce, 0x35, 0x8b, 0x9c, + 0xe6, 0x1a, 0xed, 0xc5, 0xee, 0xc0, 0x2c, 0x56, 0x91, 0x51, 0xf6, 0x32, + 0x2e, 0xb7, 0x96, 0x2d, 0xe5, 0x8b, 0x6a, 0x4d, 0x23, 0x89, 0x5e, 0x03, + 0x1d, 0x62, 0xc0, 0x58, 0xb0, 0x16, 0x29, 0x62, 0xb0, 0xd8, 0x38, 0x90, + 0x04, 0xaa, 0x4f, 0xe7, 0x13, 0x6f, 0x36, 0x1d, 0x62, 0xb6, 0x4f, 0xb7, + 0x21, 0x81, 0xa5, 0x32, 0x84, 0xf7, 0x51, 0x05, 0xf8, 0x72, 0x2e, 0xbf, + 0x8b, 0x17, 0xff, 0x30, 0x7f, 0x98, 0x73, 0x5a, 0xce, 0xd6, 0x2c, 0x50, + 0x46, 0x60, 0xd5, 0xfe, 0x5d, 0x7d, 0x3f, 0x16, 0x96, 0x2f, 0xee, 0x16, + 0x0c, 0x99, 0x62, 0x88, 0xf3, 0xc2, 0x23, 0xbf, 0x9f, 0x53, 0xdf, 0xa5, + 0x62, 0xf8, 0xa7, 0xbe, 0x2c, 0x5d, 0xbb, 0xac, 0x5e, 0x6e, 0xf6, 0x58, + 0xbe, 0x9d, 0xa7, 0xb5, 0x8a, 0x19, 0xe1, 0x90, 0xfd, 0xe6, 0x8e, 0x95, + 0x8b, 0xf9, 0xb4, 0x71, 0x68, 0x0b, 0x17, 0x68, 0x0b, 0x15, 0x03, 0xc7, + 0x72, 0xfb, 0xe7, 0xd8, 0x99, 0x62, 0xfb, 0x86, 0x79, 0xd6, 0x2d, 0xc9, + 0x4e, 0x68, 0x65, 0xdb, 0x91, 0xba, 0xde, 0x88, 0x59, 0x9b, 0xc4, 0x21, + 0x91, 0x5f, 0xda, 0x13, 0x06, 0xc3, 0x58, 0xa9, 0x55, 0xcc, 0xf0, 0x84, + 0x68, 0xef, 0x03, 0x77, 0xbe, 0xe1, 0x4e, 0xcb, 0x17, 0xfd, 0xb3, 0x7d, + 0x86, 0x4d, 0xba, 0xc5, 0x68, 0xf7, 0x48, 0x8e, 0xff, 0xf8, 0x2c, 0xdf, + 0x99, 0xe8, 0xb0, 0xd2, 0xc0, 0x2c, 0x56, 0x1f, 0xa3, 0x90, 0xdf, 0xf1, + 0x1b, 0xf6, 0x7f, 0x31, 0xd6, 0x2f, 0xcd, 0xb7, 0x33, 0x4b, 0x17, 0x8e, + 0xfa, 0x58, 0xbf, 0xec, 0x0b, 0x35, 0xbb, 0x36, 0xea, 0x94, 0x38, 0xbf, + 0xf4, 0x24, 0x1c, 0x9f, 0xbf, 0x70, 0x58, 0xbe, 0x7d, 0x67, 0x6b, 0x15, + 0x87, 0xc7, 0x1c, 0x81, 0x7f, 0xf0, 0xb8, 0x3f, 0xb1, 0xfb, 0x83, 0x92, + 0xc5, 0xfb, 0xdf, 0x62, 0x02, 0xc5, 0x18, 0x9a, 0xd6, 0xc3, 0xa6, 0xc2, + 0xaf, 0xe4, 0x8c, 0x8d, 0x7f, 0xfd, 0x11, 0x48, 0xcc, 0x89, 0xa2, 0xdf, + 0xf3, 0xb2, 0xc5, 0xce, 0x75, 0x8b, 0xfe, 0xf6, 0x44, 0xd2, 0x53, 0x12, + 0xc5, 0x18, 0x8a, 0x68, 0x95, 0x98, 0x5e, 0xf7, 0xdf, 0xa2, 0xc5, 0xff, + 0xe0, 0x34, 0x37, 0xfb, 0xf7, 0x09, 0xcf, 0x2c, 0x56, 0x1f, 0x58, 0x63, + 0xf7, 0xf0, 0x79, 0x10, 0x53, 0xda, 0xc5, 0xdf, 0xc5, 0x8a, 0xc3, 0xc9, + 0xdc, 0xca, 0xfd, 0x91, 0x14, 0x9d, 0x62, 0xdf, 0x73, 0xca, 0xf1, 0x15, + 0x9f, 0x17, 0x0b, 0x0d, 0x39, 0xd4, 0x70, 0x7f, 0x87, 0xc1, 0x42, 0x73, + 0x90, 0xb5, 0xbb, 0x7d, 0xd5, 0x28, 0x21, 0x50, 0x5c, 0xe6, 0xde, 0x71, + 0x30, 0x0e, 0x77, 0xde, 0xe3, 0xf4, 0x58, 0xb4, 0xac, 0x58, 0xa4, 0xdb, + 0x68, 0x96, 0xfe, 0xe0, 0xcb, 0x3f, 0xd6, 0xac, 0x5c, 0x1f, 0x52, 0xc5, + 0x75, 0x87, 0x9e, 0x73, 0x3b, 0xb0, 0x96, 0x2e, 0xff, 0x16, 0x29, 0x62, + 0xff, 0xe9, 0x2d, 0xf3, 0xdf, 0x7d, 0x03, 0x75, 0x8a, 0xc3, 0xea, 0x21, + 0x8f, 0x06, 0x5f, 0xff, 0xf8, 0x40, 0xd6, 0xa7, 0x6f, 0x33, 0x1a, 0x1f, + 0x27, 0xdf, 0x93, 0x56, 0x2f, 0x9f, 0x9f, 0x75, 0x8b, 0xd9, 0xdf, 0x96, + 0x28, 0x67, 0x80, 0x72, 0x2b, 0xf9, 0xcb, 0x3d, 0xf7, 0x58, 0xb4, 0xe1, + 0xe7, 0x70, 0x8a, 0x86, 0x9e, 0x96, 0x42, 0x03, 0xe5, 0xa2, 0x87, 0xfd, + 0xf9, 0xa1, 0xf7, 0x02, 0xc5, 0xff, 0xd1, 0x40, 0x5b, 0x07, 0x9c, 0xf6, + 0x6c, 0xb1, 0x7c, 0x28, 0x64, 0x72, 0xc5, 0xfe, 0xd3, 0x73, 0x5a, 0xc0, + 0x96, 0x28, 0x68, 0xcd, 0xec, 0xa0, 0x92, 0xba, 0x13, 0x5f, 0xfe, 0xfb, + 0xc5, 0xf7, 0xef, 0xc5, 0x9d, 0x19, 0x62, 0xf7, 0xe7, 0xcb, 0x17, 0x86, + 0xd1, 0x2c, 0x5f, 0xf3, 0xf4, 0xfe, 0x6b, 0x4f, 0xd1, 0x62, 0xee, 0x41, + 0x62, 0xa4, 0xfc, 0xfe, 0x3d, 0xe3, 0xdb, 0xff, 0xe1, 0x6b, 0x59, 0x03, + 0x3a, 0xa1, 0xa9, 0x0b, 0xa9, 0x62, 0xef, 0x71, 0x62, 0xe9, 0x02, 0xc5, + 0xff, 0x72, 0x4d, 0xe0, 0x87, 0xf7, 0x58, 0xa8, 0x8f, 0x4b, 0xc2, 0xf5, + 0x88, 0x8d, 0x26, 0xab, 0xff, 0xb3, 0xbc, 0xf6, 0x14, 0x3e, 0xd0, 0x58, + 0xac, 0x3e, 0x52, 0x21, 0xbf, 0x8f, 0xce, 0x31, 0x6c, 0xb1, 0x63, 0xac, + 0x5f, 0x88, 0xb3, 0xb8, 0x2c, 0x51, 0xcd, 0xd0, 0x62, 0x57, 0xff, 0xb7, + 0xfb, 0xec, 0x77, 0xd4, 0x33, 0xbf, 0x2c, 0x54, 0xa3, 0x65, 0x9a, 0x44, + 0x45, 0x7f, 0xbd, 0x8e, 0x5e, 0xe6, 0x2c, 0x5f, 0xd9, 0xf7, 0xdf, 0xf8, + 0xb1, 0x7e, 0x7f, 0xb3, 0xec, 0xb1, 0x74, 0xc7, 0xac, 0x5c, 0x0e, 0x40, + 0xf0, 0x9c, 0xa2, 0xfb, 0x98, 0x5e, 0x58, 0xbd, 0xd5, 0x3a, 0x58, 0xa7, + 0x3e, 0xf6, 0x2d, 0x11, 0x15, 0xc2, 0xe2, 0xc5, 0xcd, 0xe5, 0x8b, 0xfc, + 0x0c, 0x1e, 0x7a, 0x46, 0xb1, 0x51, 0x1f, 0x17, 0xc6, 0x18, 0x5e, 0xf7, + 0x9a, 0x3d, 0x62, 0xfa, 0x02, 0x60, 0xd6, 0x2f, 0xd9, 0xd0, 0xb3, 0x8b, + 0x17, 0xdd, 0x3a, 0x4f, 0x16, 0x28, 0x8f, 0x40, 0x32, 0x9b, 0xfb, 0xef, + 0x18, 0x06, 0x75, 0x8a, 0x24, 0x63, 0x71, 0xd3, 0xc4, 0x57, 0xf8, 0xdf, + 0xcc, 0x04, 0xda, 0x58, 0xb1, 0x2c, 0x53, 0x9e, 0x30, 0x8d, 0x6a, 0x59, + 0x51, 0x3b, 0x3a, 0x0e, 0x3f, 0x9c, 0x8c, 0x53, 0x73, 0xfe, 0xd3, 0x62, + 0x84, 0x86, 0x8b, 0x8f, 0x1a, 0x67, 0xe1, 0xf2, 0xc5, 0xc0, 0x32, 0x28, + 0x6f, 0xf2, 0x11, 0xfe, 0x2f, 0x14, 0x39, 0xa3, 0x9d, 0x6f, 0xb0, 0x63, + 0x95, 0x8b, 0xb2, 0x3d, 0x62, 0xb0, 0xde, 0x44, 0x45, 0x7f, 0xfd, 0xdf, + 0x05, 0x3d, 0x96, 0x6e, 0x58, 0x2d, 0x96, 0x2f, 0xc6, 0x81, 0xe2, 0xe2, + 0xc5, 0xf7, 0xdd, 0xa0, 0xb1, 0x78, 0x6d, 0x05, 0x8a, 0x93, 0x7f, 0x84, + 0x57, 0xfb, 0xed, 0x11, 0x9b, 0xc8, 0xd6, 0x2a, 0x51, 0x80, 0x06, 0xae, + 0x0f, 0xd4, 0xa6, 0x84, 0x28, 0xc4, 0xef, 0xef, 0xcc, 0x3e, 0x21, 0xac, + 0x5e, 0x00, 0x7d, 0xac, 0x5d, 0xbb, 0xac, 0x5d, 0x9d, 0x16, 0x2f, 0x78, + 0xa0, 0xb1, 0x63, 0xe1, 0xf7, 0x70, 0x83, 0xc3, 0x1d, 0x06, 0x6f, 0xff, + 0x18, 0x4d, 0xe9, 0xd0, 0xa1, 0xa9, 0x82, 0xc5, 0xfa, 0x7d, 0xf9, 0x89, + 0x62, 0xef, 0x71, 0x62, 0xfc, 0xc6, 0x85, 0x3a, 0x58, 0xa8, 0x27, 0x2d, + 0xbc, 0x27, 0x5d, 0x0f, 0xe9, 0x6c, 0x52, 0x43, 0x17, 0xf9, 0xcb, 0xd0, + 0xcd, 0x62, 0xc5, 0xff, 0xcf, 0xb9, 0x61, 0xe6, 0x21, 0xce, 0xcb, 0x17, + 0xff, 0x40, 0xb0, 0xec, 0x59, 0xf6, 0x3a, 0xc5, 0xfe, 0xcf, 0x4f, 0x47, + 0x20, 0x2c, 0x5f, 0xff, 0x00, 0xed, 0x08, 0x60, 0x03, 0xf6, 0xdc, 0x12, + 0xc5, 0x6e, 0x88, 0x8d, 0x1a, 0x5f, 0xf8, 0x01, 0xb6, 0xc1, 0x8c, 0xa7, + 0xb5, 0x8b, 0xff, 0x67, 0xbd, 0xfc, 0x18, 0xbd, 0xc5, 0x8b, 0xff, 0x07, + 0xd9, 0x92, 0x64, 0x45, 0x27, 0x58, 0xbf, 0xda, 0x97, 0x19, 0x34, 0x16, + 0x2f, 0xfd, 0xa7, 0x2d, 0xcb, 0x36, 0xc0, 0x96, 0x2f, 0xfb, 0x3a, 0x4e, + 0x77, 0xdf, 0xba, 0xea, 0xb1, 0x7e, 0x9f, 0x73, 0x08, 0xc4, 0x5b, 0xe8, + 0xcb, 0xe8, 0x14, 0x34, 0xd1, 0xc5, 0x0f, 0xbb, 0xf6, 0xff, 0xed, 0xa3, + 0xd6, 0x2f, 0xf7, 0x26, 0x06, 0x9b, 0x91, 0xeb, 0x17, 0xfe, 0x19, 0x0b, + 0xdc, 0x92, 0x9e, 0x2c, 0x54, 0x9f, 0xbb, 0x9c, 0xdb, 0xaf, 0x58, 0xa8, + 0x2e, 0x1a, 0xee, 0x65, 0xda, 0x33, 0xc3, 0x2b, 0x44, 0x9f, 0x43, 0x28, + 0xe1, 0xc4, 0x53, 0xd2, 0x14, 0xa1, 0x10, 0x5f, 0xe2, 0xc0, 0x71, 0x88, + 0x0b, 0x17, 0xe8, 0x7e, 0x75, 0xb2, 0xc5, 0x39, 0xee, 0x31, 0x95, 0xef, + 0xb9, 0xab, 0x17, 0x9b, 0x50, 0x58, 0xbe, 0x90, 0x7d, 0x96, 0x2b, 0x86, + 0xff, 0xc3, 0xb7, 0xe8, 0xb0, 0xb0, 0x6b, 0x17, 0xfc, 0x53, 0x0f, 0xe6, + 0x16, 0xeb, 0x17, 0xff, 0xfc, 0x3f, 0x7d, 0xb9, 0x9a, 0x6e, 0x99, 0xfc, + 0xdb, 0x8d, 0xf5, 0x8b, 0x78, 0x68, 0xa1, 0x11, 0xc5, 0xff, 0xfc, 0x76, + 0x28, 0x77, 0xe7, 0x0b, 0x7f, 0xb9, 0xe7, 0x75, 0x8a, 0x94, 0x44, 0x08, + 0xa6, 0xff, 0xff, 0xfd, 0x3f, 0x93, 0xf8, 0x98, 0x1c, 0xfc, 0x97, 0xbf, + 0x38, 0x06, 0x21, 0x62, 0xc5, 0xff, 0xf0, 0x00, 0x2e, 0x69, 0xb8, 0xfe, + 0x26, 0x82, 0xc5, 0xff, 0xcc, 0x79, 0xd6, 0xa7, 0xbd, 0x4f, 0x45, 0x8a, + 0xdd, 0x31, 0x6d, 0x3f, 0xf4, 0x50, 0xbf, 0xfc, 0xf3, 0xe2, 0xcf, 0x7f, + 0x1e, 0x1d, 0x16, 0x2f, 0xfb, 0xbe, 0x01, 0x88, 0x71, 0x09, 0x62, 0xe2, + 0x09, 0x62, 0xff, 0xec, 0xd8, 0x38, 0x0f, 0x3c, 0xff, 0x12, 0xc5, 0xfb, + 0x59, 0xd3, 0x07, 0xa3, 0xdf, 0x21, 0x8a, 0x74, 0x6d, 0x34, 0x26, 0xef, + 0xff, 0xc2, 0x28, 0x61, 0x79, 0xe3, 0xb3, 0xc4, 0xd0, 0x58, 0xbf, 0xd2, + 0x09, 0xfe, 0x77, 0x05, 0x8a, 0x74, 0x45, 0x12, 0xb5, 0xff, 0xf7, 0xd8, + 0xf1, 0x14, 0x9f, 0xb8, 0x7f, 0x36, 0x58, 0xac, 0x54, 0xf9, 0xf3, 0x40, + 0x46, 0x49, 0xe8, 0x58, 0x08, 0x86, 0xfa, 0x26, 0x89, 0x96, 0x2f, 0x6d, + 0x81, 0x2c, 0x5a, 0x0b, 0x16, 0xf1, 0x86, 0xc4, 0x43, 0xf6, 0x82, 0xc5, + 0x31, 0xba, 0x11, 0x45, 0xd3, 0xc5, 0x8a, 0x31, 0x18, 0xc5, 0x08, 0xff, + 0x10, 0x5f, 0xf7, 0xd8, 0xb2, 0x28, 0x4f, 0x6b, 0x17, 0xff, 0x7d, 0xf5, + 0x9c, 0x2c, 0xe9, 0xf7, 0x58, 0xbf, 0x16, 0x70, 0x46, 0x61, 0xff, 0xc4, + 0x75, 0x7f, 0xa4, 0x03, 0xfc, 0x96, 0xeb, 0x17, 0xed, 0x6e, 0xcd, 0xba, + 0xa4, 0x06, 0x2f, 0xe6, 0xd8, 0x0c, 0x43, 0x44, 0x20, 0xf2, 0xf6, 0x70, + 0x43, 0x45, 0x3e, 0x1a, 0x47, 0x1b, 0xde, 0xfb, 0x40, 0xc4, 0xca, 0x4a, + 0x1c, 0xd7, 0xfd, 0xf7, 0xc2, 0xcd, 0xc7, 0x8b, 0x14, 0x36, 0x48, 0x76, + 0xe4, 0x0e, 0xbb, 0x11, 0x0e, 0xa3, 0x51, 0x3c, 0xbb, 0x42, 0x8c, 0x73, + 0xd1, 0xee, 0xf4, 0x3a, 0xbf, 0xc0, 0x21, 0x37, 0x71, 0xb7, 0x5a, 0xb1, + 0x7b, 0xc2, 0x95, 0x8b, 0xff, 0xdf, 0x7f, 0x66, 0x1f, 0x93, 0x83, 0x75, + 0x8b, 0xb9, 0xc5, 0x8b, 0xe1, 0xfd, 0x8e, 0xb1, 0x7f, 0xd9, 0xb0, 0x70, + 0x79, 0xef, 0xcb, 0x16, 0x06, 0xe8, 0xbf, 0xd2, 0x43, 0x0c, 0x11, 0x1d, + 0xff, 0xfe, 0x16, 0xb6, 0x0f, 0x76, 0xd3, 0x41, 0xcd, 0x36, 0x4b, 0xcb, + 0x17, 0xe7, 0xd8, 0xf3, 0xba, 0xc5, 0x81, 0x88, 0x90, 0xf3, 0x35, 0xf6, + 0xb4, 0x23, 0x56, 0x2a, 0x55, 0x1d, 0x76, 0x7e, 0xd0, 0xdc, 0x28, 0x69, + 0x06, 0x51, 0x7e, 0x1c, 0x68, 0xc3, 0x8d, 0x16, 0x2f, 0xed, 0xfb, 0xff, + 0x6d, 0x1e, 0xb1, 0x7f, 0xbf, 0x3a, 0xcc, 0x23, 0x56, 0x2f, 0x68, 0x38, + 0x96, 0x2d, 0x90, 0x3d, 0x37, 0x33, 0xbf, 0x36, 0xbd, 0x9b, 0xac, 0x5f, + 0x0d, 0xe7, 0x65, 0x8b, 0x4e, 0x8f, 0x30, 0x45, 0x37, 0xfb, 0x33, 0xb0, + 0x31, 0x79, 0x62, 0xfe, 0x1f, 0xe4, 0xe5, 0x2b, 0x17, 0xe9, 0xc1, 0xb9, + 0x2c, 0x5e, 0x2c, 0xe2, 0xc5, 0xce, 0x33, 0x11, 0x45, 0xc3, 0x31, 0x16, + 0xf4, 0x26, 0xb4, 0x20, 0x98, 0xa7, 0x21, 0x93, 0x52, 0xa8, 0xf7, 0xb8, + 0x44, 0x34, 0x70, 0xd5, 0x2c, 0xfe, 0x3c, 0xa5, 0x05, 0xbc, 0xad, 0x76, + 0x55, 0x14, 0xa7, 0x0b, 0x9e, 0x0b, 0x17, 0xb4, 0xfe, 0x58, 0xbf, 0x78, + 0x79, 0x86, 0xac, 0x50, 0xcf, 0x1b, 0xb1, 0xdb, 0xfb, 0xef, 0xee, 0x67, + 0x96, 0x2f, 0xe2, 0xd4, 0xef, 0x9a, 0x58, 0xbe, 0xc8, 0x9c, 0xeb, 0x14, + 0x34, 0x7f, 0xe2, 0xee, 0xe4, 0x6c, 0x5c, 0x19, 0x75, 0xff, 0xf6, 0xa7, + 0xb8, 0x1d, 0xf3, 0xbf, 0xe6, 0xb6, 0x58, 0xb4, 0xac, 0x5f, 0x49, 0x38, + 0x16, 0x2b, 0xe6, 0xcb, 0xc2, 0x37, 0xa7, 0x63, 0xac, 0x56, 0x1b, 0xf2, + 0x21, 0xbf, 0xda, 0x26, 0x08, 0x3e, 0xc2, 0x58, 0xb8, 0x1d, 0x16, 0x2f, + 0xde, 0xf8, 0xb6, 0x12, 0xc5, 0x0c, 0xff, 0x7e, 0x70, 0x21, 0xab, 0xf1, + 0x60, 0x30, 0x0b, 0x17, 0xfd, 0xf7, 0xf9, 0x4e, 0x6b, 0x16, 0x2f, 0xf4, + 0x0b, 0x3a, 0x39, 0x0d, 0x62, 0xe7, 0x06, 0xe7, 0xd6, 0xc6, 0xf7, 0xe2, + 0x6f, 0x37, 0x6b, 0x17, 0xbc, 0xdd, 0x16, 0x2f, 0xf0, 0xfb, 0x86, 0x61, + 0x6c, 0xb1, 0x61, 0xac, 0x5f, 0xfa, 0x13, 0x1f, 0x9a, 0xf7, 0x26, 0x0b, + 0x17, 0xfd, 0xd8, 0xe7, 0x8e, 0x3f, 0xca, 0xc5, 0xfd, 0xdf, 0xa2, 0xfc, + 0x92, 0xc5, 0xfe, 0x7f, 0x71, 0xbb, 0x00, 0x4b, 0x17, 0x6b, 0x65, 0x4a, + 0x0a, 0x57, 0xcf, 0x71, 0x8d, 0xaf, 0xfc, 0xda, 0xc2, 0x07, 0x3d, 0xce, + 0xd6, 0x2f, 0xff, 0xb0, 0xd3, 0xce, 0x17, 0xb9, 0xc1, 0x68, 0x0b, 0x17, + 0xff, 0xff, 0xf6, 0x7b, 0xec, 0x46, 0x99, 0xcd, 0x33, 0x7b, 0xa6, 0x0c, + 0xcc, 0x3b, 0x17, 0x70, 0x5c, 0x81, 0x65, 0xff, 0x99, 0x8d, 0xdd, 0x86, + 0x61, 0xa1, 0x2e, 0x40, 0xb2, 0xff, 0xef, 0xbf, 0xde, 0x4b, 0xc6, 0x1a, + 0x12, 0xe4, 0x0b, 0x2f, 0xf4, 0xb9, 0x78, 0xc3, 0x42, 0x5c, 0x81, 0x65, + 0xfc, 0x7c, 0x19, 0x86, 0x84, 0xb9, 0x02, 0xcb, 0xff, 0xfe, 0x62, 0x27, + 0x39, 0x9c, 0xdf, 0xef, 0xa7, 0x37, 0x6c, 0x09, 0x72, 0x05, 0x97, 0x76, + 0x60, 0xd3, 0x9e, 0xdd, 0x47, 0x4a, 0x8c, 0x86, 0x47, 0xf5, 0x2a, 0xc8, + 0x71, 0x03, 0xea, 0x25, 0x28, 0xe2, 0xff, 0x3c, 0x9b, 0xcf, 0x73, 0xb5, + 0x8b, 0xfc, 0xcd, 0xb6, 0x42, 0x4d, 0x58, 0xbf, 0xe9, 0x2d, 0xe7, 0xdc, + 0xfb, 0xac, 0x5f, 0x37, 0xa4, 0xc8, 0x8f, 0xb4, 0xe6, 0x97, 0xff, 0x8f, + 0x83, 0x30, 0x32, 0x9f, 0xc9, 0x6e, 0xb1, 0x7c, 0xda, 0x03, 0x2c, 0x5f, + 0xfd, 0xf7, 0xfb, 0xc9, 0x78, 0xc3, 0x42, 0x5c, 0x81, 0x65, 0xff, 0x45, + 0xcd, 0xdf, 0x63, 0x0d, 0x09, 0x72, 0x05, 0x97, 0xef, 0x72, 0x4e, 0x66, + 0xe8, 0xa2, 0x0d, 0x52, 0xff, 0xf1, 0x9b, 0xfd, 0xf7, 0x9f, 0x70, 0xc3, + 0x42, 0x5c, 0x81, 0x65, 0xff, 0xff, 0xc4, 0x4e, 0x73, 0x05, 0x86, 0x73, + 0x7f, 0xbe, 0x9c, 0xdd, 0xb0, 0x25, 0xc8, 0x16, 0x56, 0x26, 0x4d, 0xda, + 0x1b, 0x2f, 0xdf, 0xe7, 0xd3, 0x9b, 0xb6, 0x04, 0xb9, 0x02, 0xcb, 0xff, + 0x6c, 0x71, 0x39, 0xd8, 0xbb, 0x82, 0xe4, 0x0b, 0x2b, 0xe8, 0x91, 0x12, + 0x1d, 0xff, 0xf3, 0x37, 0x70, 0xe7, 0xdc, 0x63, 0x9d, 0x4a, 0x45, 0xff, + 0xe7, 0x03, 0x10, 0xcc, 0xef, 0xc2, 0x96, 0x58, 0xbf, 0xf6, 0x42, 0x02, + 0xe6, 0x8b, 0x68, 0xe5, 0xc8, 0x16, 0x56, 0xe9, 0x87, 0xe8, 0x8f, 0xea, + 0x1c, 0x4b, 0xbf, 0xf6, 0xef, 0xaf, 0x30, 0x38, 0x60, 0x4b, 0x90, 0x2c, + 0xbf, 0xbe, 0xff, 0xfb, 0x81, 0x56, 0x05, 0x97, 0xec, 0x01, 0x86, 0x84, + 0xb9, 0x02, 0xcb, 0xb3, 0xdb, 0x9f, 0xa7, 0xce, 0xeb, 0xb4, 0x79, 0x72, + 0x18, 0x97, 0xf1, 0xf0, 0x66, 0x1a, 0x12, 0xe4, 0x0b, 0x2f, 0xfd, 0xbf, + 0xdf, 0x4e, 0x6e, 0xd8, 0x12, 0xe4, 0x0b, 0x2e, 0xc3, 0x19, 0x11, 0xfc, + 0x3f, 0xbf, 0xc2, 0x73, 0xb1, 0x77, 0x05, 0xc8, 0x16, 0x5f, 0xfb, 0x1f, + 0xa6, 0x16, 0x0d, 0xa0, 0xb9, 0x02, 0xc3, 0x9e, 0x0d, 0x0d, 0x7f, 0x6b, + 0x48, 0x67, 0x85, 0x1b, 0x1d, 0x01, 0x30, 0xa3, 0xea, 0xe4, 0x7a, 0x1e, + 0x8c, 0xc4, 0x50, 0xb8, 0x09, 0xbe, 0xe0, 0x4a, 0xa4, 0x0b, 0x23, 0x11, + 0x53, 0x73, 0x6e, 0xb1, 0x43, 0x66, 0x6e, 0x61, 0xd6, 0xf0, 0x8c, 0x05, + 0x2f, 0x17, 0xc7, 0x35, 0x8c, 0xdc, 0x1d, 0xcd, 0x62, 0x12, 0xe5, 0x34, + 0x7a, 0xe8, 0x75, 0x2c, 0x5e, 0x98, 0x75, 0x2c, 0x54, 0x9b, 0xb2, 0x1b, + 0xad, 0x9b, 0x14, 0x58, 0x25, 0x0e, 0x18, 0x9d, 0xc2, 0x71, 0xcb, 0xf5, + 0x09, 0x2f, 0x96, 0xb1, 0x40, 0x29, 0xbc, 0x05, 0x08, 0x6b, 0xe0, 0xcb, + 0x3a, 0x2c, 0x5f, 0xd2, 0x7d, 0xdf, 0xf8, 0xb1, 0x7f, 0xe6, 0x87, 0xe5, + 0xc0, 0xde, 0x12, 0xc5, 0xfe, 0xcf, 0x7d, 0xf3, 0xbf, 0x2c, 0x5a, 0x1f, + 0x3f, 0x22, 0x3e, 0xbf, 0x8a, 0x1c, 0xf7, 0xe5, 0x62, 0xff, 0xff, 0xd9, + 0xef, 0xb4, 0x07, 0x9a, 0x7c, 0xe8, 0x1e, 0xbe, 0xfd, 0xf9, 0x62, 0xe7, + 0x35, 0x62, 0xfb, 0xa1, 0x67, 0x16, 0x2f, 0xee, 0xf8, 0xde, 0x9e, 0x2c, 0x5f, 0x66, 0xe7, 0x75, 0x8b, 0x8a, 0x18, 0x7e, 0xce, 0x49, 0xf2, 0xfa, - 0x94, 0xfd, 0xa0, 0x4b, 0x85, 0xce, 0x7e, 0x72, 0xef, 0xb8, 0x07, 0x08, - 0xeb, 0xc0, 0x38, 0x16, 0x2f, 0xf4, 0xfd, 0xc2, 0xea, 0x1c, 0x58, 0xbf, - 0x4f, 0xb9, 0xf7, 0x58, 0xbf, 0xf6, 0xb0, 0xdf, 0xe1, 0xc5, 0xad, 0x96, - 0x2f, 0xfb, 0xa2, 0xc7, 0x3e, 0x10, 0x16, 0x2f, 0xff, 0xff, 0xcd, 0x11, - 0x30, 0x59, 0xd9, 0xf9, 0xfc, 0x04, 0x76, 0x7b, 0x8c, 0x7c, 0xeb, 0xcb, - 0x17, 0xfb, 0xec, 0x43, 0xce, 0xbc, 0xb1, 0x7f, 0xe6, 0x6d, 0xb0, 0xec, - 0x5d, 0x41, 0x62, 0xf7, 0x30, 0x96, 0x2d, 0x0c, 0x44, 0x7c, 0x46, 0x9e, - 0x3f, 0xbf, 0xb7, 0x9e, 0xed, 0xdf, 0xb9, 0x62, 0xff, 0xf3, 0x6f, 0x24, - 0x32, 0xce, 0xda, 0x7e, 0x2c, 0x5f, 0xfb, 0x91, 0x40, 0x43, 0x8a, 0x02, - 0x1a, 0xc5, 0x18, 0xac, 0x27, 0x61, 0xe8, 0x1b, 0x0c, 0xa3, 0x10, 0x8d, - 0x38, 0xea, 0x31, 0x83, 0x9b, 0x7c, 0xdb, 0xc9, 0x77, 0xfd, 0x9e, 0x0b, - 0x08, 0x7f, 0x95, 0x8b, 0xdc, 0x70, 0x96, 0x2f, 0xfe, 0x9e, 0xa0, 0x19, - 0xf9, 0xe9, 0xe8, 0x25, 0x8b, 0xf4, 0x3b, 0xbb, 0x85, 0xb2, 0xc5, 0x39, - 0xfd, 0xb2, 0x55, 0x74, 0x8b, 0x9f, 0xc2, 0x66, 0xff, 0xe7, 0xce, 0x19, - 0xac, 0x7f, 0xc8, 0xd6, 0x2f, 0xfd, 0x8f, 0xcd, 0x64, 0x0a, 0x4e, 0xb1, - 0x7d, 0xe2, 0x93, 0xac, 0x5f, 0xb5, 0x3d, 0x43, 0x8b, 0x17, 0xe8, 0xec, - 0xee, 0xc2, 0x58, 0xad, 0x95, 0x0a, 0xc2, 0x1e, 0x46, 0x94, 0xee, 0x88, - 0xe7, 0xba, 0x22, 0x01, 0x55, 0xff, 0x49, 0xbf, 0xc2, 0x2c, 0xe9, 0x62, - 0xff, 0xfe, 0xeb, 0x9e, 0x33, 0xdf, 0x76, 0x04, 0x50, 0xce, 0xa0, 0xb1, - 0x78, 0xed, 0xe5, 0x8b, 0xfe, 0x68, 0x66, 0x86, 0x31, 0x41, 0x62, 0xdc, - 0x58, 0xa3, 0x9e, 0x63, 0x1d, 0x5d, 0xcd, 0xd6, 0x2f, 0x41, 0xfc, 0xb1, - 0x7f, 0xfb, 0xce, 0x42, 0x86, 0x70, 0x1e, 0xf7, 0x4b, 0x16, 0x28, 0x8f, - 0xa4, 0x31, 0xdb, 0xec, 0x89, 0xa2, 0x58, 0xbf, 0xee, 0x37, 0x51, 0xc2, - 0xfb, 0xe9, 0x62, 0xfe, 0xcd, 0x00, 0xef, 0xc5, 0x8b, 0x85, 0xcf, 0xa2, - 0x43, 0xc4, 0x91, 0xc7, 0xd7, 0xfe, 0xce, 0xbd, 0x9e, 0x9d, 0x61, 0x2c, - 0x5e, 0x97, 0x3a, 0xc5, 0x8d, 0x58, 0xb6, 0x6e, 0x6b, 0xf4, 0x39, 0x7f, - 0xf7, 0x6e, 0xd3, 0xc6, 0xff, 0x50, 0xcf, 0x2c, 0x56, 0x27, 0xac, 0x08, - 0x5c, 0xf0, 0xfe, 0x39, 0xb4, 0x32, 0x7b, 0xf8, 0x51, 0x49, 0x71, 0xd6, - 0x2f, 0xf1, 0x07, 0x9a, 0x29, 0x3a, 0xc5, 0xfc, 0x2f, 0x14, 0xfb, 0x8b, - 0x15, 0x87, 0xc2, 0x03, 0x3b, 0x4a, 0xc5, 0x41, 0x5f, 0xb1, 0xad, 0x3f, - 0x21, 0x04, 0xa5, 0x82, 0x53, 0xe4, 0x23, 0xfb, 0x88, 0x6a, 0x59, 0x03, - 0xb9, 0x2a, 0xaf, 0xa6, 0xd7, 0x39, 0x69, 0xc5, 0x7b, 0xc7, 0x7e, 0x2c, - 0x5f, 0xe1, 0xb0, 0x30, 0x6f, 0xc5, 0x8b, 0xf1, 0xa3, 0x96, 0x25, 0x8b, - 0xff, 0x73, 0x3e, 0xf0, 0x71, 0xe1, 0xd6, 0x2f, 0xd0, 0x9e, 0xcd, 0xf5, - 0x8a, 0xd9, 0x1c, 0x10, 0x1d, 0xc3, 0x33, 0x4a, 0x18, 0xfa, 0xff, 0xec, - 0xeb, 0xdc, 0x72, 0x90, 0x31, 0xd6, 0x2f, 0xff, 0xe3, 0x4c, 0xfe, 0x6b, - 0x59, 0xdd, 0x9b, 0xc7, 0xb9, 0x76, 0x58, 0xbf, 0xe0, 0x83, 0x26, 0xdf, - 0x0b, 0x75, 0x8b, 0xee, 0xec, 0xcd, 0x96, 0x2f, 0xff, 0xbd, 0xf7, 0x30, - 0xd6, 0x30, 0xb0, 0x26, 0x02, 0xc5, 0xfc, 0x6e, 0xa6, 0x0c, 0x6a, 0xc5, - 0x62, 0x20, 0xd9, 0x4e, 0xf8, 0xe3, 0xc3, 0xac, 0x5d, 0xde, 0xf7, 0x8b, - 0x14, 0xb1, 0x7f, 0x9f, 0xe5, 0x9e, 0x90, 0x2c, 0x5e, 0xf8, 0xc3, 0x39, - 0xbe, 0xf0, 0x65, 0xff, 0x76, 0x72, 0x18, 0xbf, 0x87, 0x58, 0xbf, 0x9b, - 0xef, 0xc9, 0x82, 0xc5, 0x18, 0x98, 0xfc, 0x68, 0x47, 0x2c, 0x18, 0x69, - 0xc3, 0xbb, 0xff, 0x77, 0xf8, 0x45, 0x81, 0xc9, 0x01, 0x62, 0xf8, 0xee, - 0xd0, 0x58, 0xbf, 0x3e, 0xc5, 0x27, 0x58, 0xa3, 0x9e, 0x57, 0xc8, 0xaf, - 0xf6, 0x7d, 0xf8, 0xe2, 0x82, 0xc5, 0x6c, 0xaf, 0xff, 0x11, 0x1d, 0x9b, - 0xe7, 0x85, 0x0a, 0x9f, 0x46, 0x80, 0x24, 0xfe, 0xd0, 0x8c, 0xee, 0x22, - 0xbd, 0xc9, 0xe9, 0x62, 0xff, 0xff, 0xfe, 0xce, 0xc5, 0x9c, 0x33, 0xc6, - 0xc9, 0x43, 0x3e, 0xe7, 0x30, 0x78, 0x31, 0xb1, 0xd6, 0x2b, 0xa4, 0x55, - 0x10, 0xf5, 0xfd, 0x07, 0xe0, 0x7d, 0x01, 0x62, 0xff, 0xff, 0xdf, 0x7d, - 0x3c, 0x9f, 0x09, 0xe7, 0xec, 0xfa, 0xd3, 0xec, 0xb1, 0x7f, 0xe8, 0x67, - 0x50, 0xd4, 0xf9, 0xbc, 0xb1, 0x78, 0xf3, 0x05, 0x8b, 0xdf, 0x10, 0x4b, - 0x17, 0x8f, 0x30, 0x58, 0xb6, 0x0c, 0xde, 0x00, 0x7e, 0xff, 0xfc, 0x42, - 0x8f, 0xfb, 0xea, 0x7e, 0xdc, 0x2c, 0x02, 0xc5, 0x18, 0x9e, 0x9c, 0x91, - 0xee, 0x63, 0x13, 0x4b, 0x20, 0x12, 0xc8, 0x64, 0xd7, 0xfd, 0xbf, 0xdc, - 0x7f, 0x9f, 0x71, 0x62, 0xfb, 0x53, 0xd0, 0x16, 0x2f, 0xef, 0x3e, 0x9b, - 0x69, 0x58, 0xb3, 0x40, 0xf4, 0x9c, 0x92, 0xf0, 0xdb, 0xcb, 0x17, 0xff, - 0xc5, 0x9d, 0x7b, 0x53, 0x07, 0xe0, 0x7d, 0x01, 0x62, 0xe9, 0xe9, 0x62, - 0xff, 0xfd, 0xef, 0x64, 0x50, 0xcd, 0x8c, 0xea, 0x4a, 0x78, 0xb1, 0x7f, - 0x89, 0xba, 0xf0, 0x53, 0xd2, 0xc5, 0xff, 0xef, 0x64, 0x50, 0xcd, 0xba, - 0x92, 0x9e, 0x2c, 0x5d, 0x3d, 0x18, 0x8d, 0xbf, 0xac, 0xf8, 0xda, 0xa5, - 0x38, 0x30, 0x29, 0x94, 0x3c, 0xef, 0xd2, 0xc3, 0xd3, 0x2c, 0x5f, 0xd8, - 0x3f, 0xce, 0x99, 0x62, 0xff, 0xd2, 0x17, 0xf4, 0xd0, 0xfb, 0xe9, 0x62, - 0xf3, 0x68, 0xd8, 0x91, 0x28, 0x44, 0xe1, 0x96, 0xdf, 0xf1, 0x18, 0xf1, - 0xed, 0xc7, 0x3a, 0xc5, 0xff, 0x49, 0x4c, 0x3d, 0xfc, 0x25, 0x8a, 0xc3, - 0xf3, 0xe1, 0xe5, 0x69, 0x71, 0x60, 0xec, 0xdf, 0x84, 0x6b, 0x13, 0x02, - 0x3a, 0x02, 0x86, 0x47, 0x21, 0x6d, 0x79, 0xe3, 0xb1, 0x62, 0xf3, 0xf5, - 0xe5, 0x8b, 0xdf, 0xd9, 0xd6, 0x2e, 0xc0, 0xb8, 0x6f, 0x04, 0x3d, 0x7f, - 0xed, 0x13, 0x04, 0xda, 0xd6, 0x74, 0xb1, 0x7f, 0x9f, 0x47, 0x9c, 0x21, - 0xac, 0x5c, 0xe6, 0xac, 0x57, 0xcf, 0x28, 0x8c, 0xaf, 0xee, 0x38, 0xf0, - 0x2e, 0x2c, 0x5f, 0xcd, 0xa6, 0x1b, 0xe2, 0xc5, 0xdd, 0x3a, 0xc5, 0xa2, - 0x58, 0xbb, 0x40, 0x58, 0xbb, 0x02, 0x58, 0xaf, 0x9e, 0x1b, 0x09, 0xf8, - 0x62, 0xa5, 0x50, 0xbe, 0xcb, 0x63, 0x2d, 0xc8, 0x45, 0x74, 0x43, 0xf2, - 0xf2, 0x2c, 0xf2, 0xdd, 0xff, 0x67, 0x1c, 0x72, 0x52, 0x05, 0x8b, 0x9f, - 0x4b, 0x17, 0xe6, 0x2f, 0x72, 0x56, 0x2f, 0xed, 0x70, 0x47, 0xcd, 0x2c, - 0x59, 0xd6, 0x29, 0xcf, 0x01, 0x8b, 0xef, 0xb0, 0xd9, 0xe2, 0xc5, 0x69, - 0x15, 0x47, 0x67, 0x22, 0x0a, 0xe9, 0x39, 0xed, 0x3b, 0xfc, 0xdc, 0x10, - 0xc1, 0xbe, 0x0b, 0x3e, 0xcb, 0x17, 0xc6, 0xe9, 0xc2, 0x58, 0xbf, 0x6c, - 0xdf, 0x98, 0xf5, 0x8b, 0x8f, 0x2b, 0x17, 0xf1, 0x4c, 0x3d, 0x9b, 0xac, - 0x58, 0xd8, 0x1e, 0x2e, 0x0b, 0xde, 0xe4, 0x8d, 0x62, 0xf4, 0x76, 0x79, - 0x62, 0xdb, 0x74, 0x6f, 0x7c, 0x3b, 0x5d, 0xe2, 0x64, 0x98, 0x4a, 0xee, - 0x22, 0x65, 0xbf, 0x8d, 0xfc, 0xf5, 0xec, 0x58, 0xbf, 0xc5, 0x83, 0xfc, - 0x84, 0x4b, 0x17, 0xb3, 0x52, 0xb1, 0x7f, 0x0f, 0xec, 0x1e, 0x6c, 0xb1, - 0x50, 0x3c, 0xcf, 0x0e, 0x54, 0xa3, 0x47, 0x46, 0x04, 0xff, 0x7f, 0xff, - 0xb5, 0x3f, 0x9d, 0x6a, 0x76, 0xf3, 0x31, 0xb9, 0xd7, 0x96, 0x2a, 0x5b, - 0x30, 0xec, 0x9c, 0x49, 0x79, 0xf6, 0x86, 0x9c, 0x2f, 0x02, 0x21, 0x46, - 0x8e, 0x28, 0xc4, 0x83, 0x2e, 0xbe, 0xf9, 0xdb, 0xcb, 0x17, 0xc5, 0x17, - 0x31, 0x62, 0xfd, 0x0c, 0xdb, 0xd2, 0xb1, 0x7f, 0xff, 0x4f, 0x83, 0xd8, - 0x79, 0xe9, 0xec, 0xfe, 0x04, 0xc1, 0x62, 0xfe, 0xfb, 0xeb, 0x4d, 0x05, - 0x8b, 0x01, 0x62, 0xdb, 0x1c, 0xf0, 0x38, 0x5d, 0x7f, 0xc3, 0x19, 0x48, - 0x43, 0xc8, 0xf5, 0x8a, 0x93, 0xe6, 0x11, 0x4d, 0x6c, 0x99, 0x31, 0x46, - 0x0b, 0x4b, 0x14, 0xe9, 0xd4, 0x44, 0x46, 0x51, 0xa7, 0xc7, 0x15, 0x5f, - 0xed, 0xb6, 0x92, 0xeb, 0x3c, 0xb1, 0x7f, 0xfd, 0x0e, 0x72, 0x75, 0xb8, - 0x98, 0x7f, 0x97, 0x58, 0xbf, 0x0f, 0x30, 0xb7, 0x58, 0xbf, 0x75, 0xe2, - 0x6f, 0xac, 0x5d, 0x31, 0x2c, 0x56, 0xc7, 0xd3, 0x02, 0x80, 0x14, 0xd4, - 0xab, 0x31, 0xc8, 0xf2, 0xdd, 0x19, 0x8d, 0x85, 0x0b, 0xab, 0xff, 0xb4, - 0x42, 0xeb, 0xc5, 0x9b, 0x31, 0x2c, 0x5e, 0xdc, 0x33, 0xac, 0x5f, 0xff, - 0xc3, 0xf8, 0xb6, 0x7c, 0xd6, 0xb2, 0x7a, 0x83, 0x9d, 0x62, 0xff, 0x34, - 0x44, 0x2f, 0x14, 0xac, 0x5e, 0x92, 0xf2, 0xc5, 0xfc, 0x30, 0xfd, 0xe7, - 0x09, 0x62, 0xe2, 0x89, 0x62, 0x9c, 0xf9, 0x58, 0x70, 0x46, 0x37, 0x7c, - 0xd5, 0x8b, 0xf6, 0xe3, 0x72, 0xd9, 0x62, 0xff, 0xbf, 0x3d, 0x16, 0x0d, - 0xa0, 0xb1, 0x79, 0xb5, 0xb2, 0xc5, 0xc0, 0x95, 0x8b, 0xe7, 0x93, 0xe2, - 0xc5, 0x2c, 0x5f, 0xcc, 0x6f, 0xa7, 0x40, 0x58, 0xa1, 0x9b, 0xb2, 0x0c, - 0xbf, 0xff, 0xd2, 0xe3, 0x29, 0x16, 0xfe, 0xcd, 0xc7, 0x3b, 0x86, 0x75, - 0x8b, 0x81, 0x2b, 0x17, 0x49, 0xab, 0x17, 0xfd, 0x9e, 0xe4, 0x9c, 0x3c, - 0x89, 0x62, 0xff, 0x73, 0x3e, 0xfc, 0x16, 0xcb, 0x17, 0x04, 0x12, 0x45, - 0xff, 0x16, 0x76, 0x68, 0x71, 0xc6, 0xb1, 0x5b, 0xaa, 0x08, 0x71, 0xed, - 0x0b, 0x9d, 0x73, 0xe4, 0x00, 0x64, 0xef, 0xc5, 0xc8, 0x63, 0x87, 0x61, - 0x1a, 0x86, 0x35, 0x78, 0x20, 0x82, 0x48, 0xb1, 0xd2, 0x23, 0x0d, 0x0d, - 0xcd, 0xa4, 0x88, 0xc4, 0x73, 0x07, 0x0c, 0x1b, 0xfe, 0x60, 0xb5, 0x2f, - 0x06, 0xe2, 0xc5, 0x31, 0xfc, 0x11, 0xfd, 0xff, 0xfe, 0x03, 0x7d, 0x9f, - 0xe2, 0xfc, 0xee, 0xfd, 0x41, 0xce, 0xb1, 0x4b, 0x14, 0x35, 0xc7, 0x0c, - 0x19, 0xdc, 0xaa, 0x29, 0x73, 0xfe, 0x20, 0x0d, 0x8a, 0xb6, 0x5e, 0x5a, - 0x1a, 0x2e, 0xe4, 0x1d, 0x2e, 0xfe, 0x13, 0x0d, 0x39, 0x3b, 0x7f, 0xfe, - 0x84, 0xe8, 0x03, 0xd6, 0x39, 0xbc, 0xfc, 0x9d, 0x62, 0xfe, 0xf4, 0xe7, - 0xf3, 0x65, 0x8b, 0xb0, 0xeb, 0x15, 0x88, 0x9c, 0xe9, 0x5f, 0x85, 0xd7, - 0xff, 0x67, 0xfe, 0xcf, 0xe9, 0xc2, 0x89, 0x62, 0xbb, 0xd8, 0x45, 0x3e, - 0x4d, 0x21, 0x6b, 0x68, 0xd1, 0x21, 0x3f, 0x1e, 0x38, 0xf3, 0xb2, 0x9a, - 0x26, 0x6c, 0xeb, 0x67, 0x53, 0x98, 0x0f, 0x49, 0x51, 0x8a, 0x33, 0x8d, - 0x46, 0xc6, 0x78, 0xe6, 0xbf, 0x59, 0x0f, 0x35, 0x64, 0x8c, 0x09, 0x52, - 0xc5, 0x4b, 0x8e, 0xe5, 0x68, 0x91, 0xe9, 0x78, 0xe2, 0x9e, 0xad, 0xed, - 0x18, 0x2c, 0x71, 0x85, 0xc1, 0xf9, 0x62, 0xfe, 0xc0, 0x01, 0xf5, 0x05, - 0x8b, 0xdf, 0x11, 0xab, 0x17, 0x6f, 0x8b, 0x17, 0xec, 0x8a, 0x7a, 0xe2, - 0xc5, 0x0d, 0x11, 0xee, 0x5c, 0xc3, 0xfc, 0x18, 0xbf, 0xf4, 0x9e, 0x39, - 0xb6, 0xc1, 0xb8, 0x4b, 0x17, 0x60, 0x4b, 0x17, 0x4f, 0x96, 0x2f, 0xff, - 0x9c, 0xa4, 0x18, 0x2e, 0xfd, 0xfe, 0xfa, 0x82, 0xc5, 0x6c, 0x88, 0x2d, - 0xc6, 0x38, 0x2f, 0x7d, 0xce, 0x38, 0x16, 0x2f, 0x7d, 0x80, 0xb1, 0x5b, - 0x1e, 0x03, 0x11, 0xdf, 0xc5, 0x86, 0x99, 0xe7, 0x58, 0xb1, 0xd6, 0x2a, - 0x09, 0xcd, 0x64, 0x31, 0x74, 0xe5, 0xf2, 0x2f, 0x17, 0xdf, 0xce, 0x00, - 0xf6, 0x9d, 0x96, 0x2f, 0xf4, 0x1c, 0xb0, 0xe2, 0xfa, 0xc5, 0xfb, 0xec, - 0xe4, 0xcb, 0x17, 0xfd, 0x2f, 0xac, 0x7f, 0xc8, 0xd6, 0x2f, 0xfd, 0x9e, - 0xe7, 0xdc, 0xed, 0x9a, 0x58, 0xbf, 0xfd, 0xf1, 0x73, 0x52, 0x51, 0x7d, - 0x81, 0x2b, 0x17, 0x60, 0xd6, 0x2f, 0xa7, 0x3e, 0xcb, 0x15, 0x29, 0xa8, - 0x9a, 0x67, 0xf2, 0x62, 0x37, 0x11, 0xf7, 0x64, 0xbe, 0xe1, 0x7b, 0xd8, - 0x0f, 0x2c, 0x5e, 0xed, 0x1b, 0x76, 0x58, 0xa3, 0x0f, 0x13, 0x07, 0x6f, - 0x4b, 0xc7, 0xac, 0x5f, 0xdc, 0x8a, 0x0f, 0xa8, 0x96, 0x2b, 0x0f, 0xc9, - 0xc8, 0xbc, 0x3f, 0x7f, 0xff, 0xf3, 0x3f, 0xa4, 0xb7, 0x73, 0x9d, 0xf9, - 0xcc, 0xfb, 0xf0, 0x5b, 0x2c, 0x5d, 0x3d, 0x96, 0x2c, 0x67, 0xd1, 0x17, - 0xe7, 0x2b, 0xe1, 0x94, 0x86, 0xb1, 0x7d, 0xbc, 0x9d, 0xd6, 0x28, 0xc3, - 0xc6, 0xc2, 0x3b, 0xff, 0x89, 0xb5, 0x9e, 0x29, 0xfb, 0xc1, 0x62, 0xfb, - 0xf9, 0xb3, 0xac, 0x5f, 0xd2, 0x77, 0x8f, 0x3e, 0x2c, 0x5e, 0x3e, 0x79, - 0x62, 0xf8, 0x27, 0x91, 0xac, 0x5b, 0xbd, 0x58, 0xb4, 0x68, 0xb1, 0x68, - 0xd1, 0x62, 0xa3, 0x63, 0xc5, 0x8d, 0x42, 0xf1, 0xac, 0x5e, 0xb1, 0x15, - 0x1c, 0x68, 0xbf, 0xec, 0xc3, 0x87, 0xdd, 0x25, 0x05, 0x8b, 0x9c, 0x35, - 0x8a, 0x82, 0x71, 0xc3, 0x23, 0xc3, 0x07, 0x86, 0x2f, 0x08, 0xbb, 0x8f, - 0x2f, 0xf6, 0xff, 0x90, 0xde, 0x76, 0x58, 0xbc, 0x4c, 0x35, 0x8b, 0x98, - 0xd5, 0x8b, 0xf9, 0x85, 0xbf, 0xe7, 0x8b, 0x15, 0xa4, 0x4c, 0x9c, 0xdb, - 0xc3, 0x91, 0xc3, 0x17, 0xcc, 0x76, 0x89, 0x62, 0xff, 0xe7, 0x88, 0xc7, - 0xeb, 0x8c, 0x1b, 0x9d, 0x62, 0xff, 0xcf, 0x3e, 0x60, 0xc9, 0xfa, 0x82, - 0xc5, 0x44, 0x88, 0x7e, 0x24, 0x5f, 0x75, 0xfc, 0xee, 0x58, 0xbd, 0xdc, - 0x00, 0x96, 0x2f, 0xa4, 0x29, 0x89, 0x62, 0xa4, 0xfb, 0x7a, 0x27, 0x72, - 0x2b, 0xfc, 0x67, 0xd8, 0x00, 0x7f, 0xac, 0x5b, 0x4b, 0x17, 0xbd, 0xd7, - 0x16, 0x2b, 0x0d, 0x8b, 0x09, 0x54, 0xa6, 0x88, 0xf0, 0x91, 0x62, 0xe2, - 0x66, 0xbf, 0xff, 0xf3, 0x44, 0x28, 0x0b, 0x73, 0x3e, 0xfe, 0xf4, 0xf5, - 0x3b, 0x4f, 0x16, 0x2f, 0xfe, 0xe7, 0xf3, 0xa8, 0x67, 0x3f, 0x3a, 0x58, - 0xbf, 0x13, 0x47, 0xed, 0x12, 0xc5, 0xf4, 0xe9, 0xfa, 0x58, 0xbe, 0x8b, - 0x93, 0xe5, 0x8a, 0xdd, 0x32, 0xc7, 0x72, 0x89, 0x19, 0x8b, 0x44, 0x47, - 0x78, 0xf9, 0xf5, 0x8b, 0xf6, 0x9a, 0x5e, 0x39, 0x62, 0x84, 0x78, 0xfd, - 0x87, 0x6e, 0x7e, 0x96, 0x2f, 0xfe, 0x26, 0xf3, 0xeb, 0xf2, 0x7e, 0x32, - 0xc5, 0x2c, 0x56, 0x8f, 0x9c, 0x43, 0x01, 0x21, 0xdf, 0xcd, 0x10, 0x98, - 0x33, 0xac, 0x5e, 0x10, 0x83, 0x58, 0xbf, 0xf9, 0xba, 0x33, 0x0e, 0x2e, - 0x0b, 0x8c, 0xb1, 0x50, 0x44, 0xb7, 0x0c, 0x04, 0x3f, 0x7f, 0xf4, 0x3f, - 0x3a, 0xda, 0x7d, 0xc6, 0x82, 0xc5, 0xf1, 0x33, 0x76, 0x58, 0x93, 0xc6, - 0xbf, 0xa7, 0x7f, 0x71, 0xba, 0x58, 0xbe, 0xfe, 0x36, 0xcb, 0x17, 0xfe, - 0xe7, 0x8d, 0x7d, 0xfd, 0xcc, 0xd9, 0x62, 0xf1, 0xdb, 0xa5, 0x8b, 0xfc, - 0xc6, 0xc7, 0x0b, 0xef, 0xa5, 0x8a, 0x8d, 0x91, 0x33, 0x88, 0x64, 0x3d, - 0x5d, 0x27, 0x91, 0x1e, 0xec, 0x46, 0x7c, 0x30, 0x0e, 0x17, 0x97, 0x9f, - 0xa8, 0x96, 0x2f, 0x85, 0xdf, 0x9d, 0xd6, 0x2f, 0xdc, 0x13, 0x75, 0xdc, - 0xb1, 0x7f, 0xc4, 0x66, 0x41, 0xcd, 0x35, 0x96, 0x29, 0xcf, 0xa0, 0x45, - 0xb7, 0xd9, 0xb0, 0xb8, 0xb1, 0x7f, 0xd9, 0xb3, 0x44, 0x64, 0x42, 0x3a, - 0xc5, 0x61, 0xf1, 0x78, 0x92, 0xfb, 0x44, 0xe0, 0x58, 0xbe, 0x7d, 0xdb, - 0x4b, 0x17, 0x48, 0x16, 0x2d, 0x19, 0xf3, 0x74, 0x19, 0x1d, 0x2c, 0x5c, - 0x2d, 0x84, 0x6d, 0xc2, 0x2b, 0xa7, 0x46, 0x17, 0xe1, 0x27, 0x60, 0x2c, - 0x5d, 0x9b, 0xac, 0x5f, 0xb3, 0x5a, 0x7d, 0x2c, 0x54, 0x79, 0xe9, 0x7c, - 0x48, 0x03, 0x17, 0xed, 0xfe, 0xc2, 0xd2, 0xc5, 0xf4, 0xf5, 0x9b, 0xac, - 0x5f, 0x83, 0x79, 0xe3, 0x2c, 0x53, 0x1e, 0x60, 0x89, 0x2f, 0x07, 0x31, - 0xeb, 0x17, 0xf8, 0x6c, 0x2d, 0x30, 0x86, 0xb1, 0x7f, 0x9b, 0x9f, 0x7d, - 0x98, 0x96, 0x2b, 0x0f, 0x9f, 0xe6, 0x97, 0xcd, 0xb0, 0x70, 0x58, 0xae, - 0xf5, 0xb5, 0x3b, 0x8d, 0xa1, 0x51, 0x31, 0xea, 0xec, 0x9f, 0x08, 0xe0, - 0x87, 0x18, 0xfe, 0x42, 0xe0, 0xd7, 0x0d, 0xc8, 0xba, 0x8f, 0x41, 0xe1, - 0xef, 0x1e, 0x81, 0x14, 0x7d, 0xda, 0x8d, 0xac, 0xf0, 0x92, 0xfc, 0x22, - 0xda, 0x54, 0x70, 0x15, 0x3b, 0xf1, 0xf2, 0x84, 0x87, 0x21, 0x07, 0xe8, - 0x71, 0x89, 0xe7, 0xb1, 0x90, 0x4e, 0xd1, 0xc4, 0x21, 0xc2, 0x23, 0xb8, - 0x86, 0xf1, 0x0b, 0x8b, 0x17, 0xfb, 0x09, 0xc1, 0xcf, 0xba, 0xc5, 0xc4, - 0x05, 0x8b, 0x47, 0xac, 0x5f, 0x0c, 0xed, 0x05, 0x8a, 0x73, 0x70, 0x21, - 0x5b, 0xfe, 0xc2, 0x73, 0x7c, 0xe0, 0xe2, 0xc5, 0x18, 0x8d, 0xaf, 0x99, - 0x12, 0x78, 0x88, 0x2f, 0x3e, 0xc2, 0x58, 0xbe, 0xed, 0xf9, 0x82, 0xc5, - 0xff, 0xbb, 0x3e, 0x85, 0xdc, 0xdb, 0x07, 0x05, 0x8b, 0x4a, 0xc5, 0xf8, - 0x51, 0x14, 0x9d, 0x62, 0xa5, 0x14, 0xd8, 0x4a, 0xc8, 0xfc, 0x11, 0xbd, - 0x1b, 0xf7, 0x91, 0xba, 0xc5, 0xf0, 0x1f, 0xac, 0x58, 0xb9, 0x8e, 0xb1, - 0x52, 0x6e, 0xa2, 0x23, 0xb8, 0xe2, 0x58, 0xbf, 0x37, 0xbe, 0x22, 0x58, - 0xbf, 0x7a, 0x12, 0x40, 0x58, 0xb8, 0xfd, 0x96, 0x2e, 0x9e, 0x2c, 0x5f, - 0xe6, 0x72, 0x6f, 0x37, 0xd6, 0x2b, 0xe7, 0x90, 0x21, 0x7a, 0x31, 0x3a, - 0xe8, 0xdc, 0xea, 0x59, 0xdc, 0x87, 0xe3, 0x0c, 0x50, 0x45, 0x1c, 0x62, - 0xbf, 0xf6, 0xe4, 0xd9, 0xbc, 0xf6, 0x9e, 0x2c, 0x5f, 0xfb, 0x8e, 0x09, - 0xd3, 0xfe, 0x46, 0xb1, 0x7c, 0xc3, 0x8b, 0xa5, 0x8b, 0x41, 0x72, 0x8b, - 0x15, 0x28, 0x82, 0xd8, 0xf8, 0x89, 0x6f, 0x30, 0xbb, 0xf5, 0x8b, 0xff, - 0x66, 0xe5, 0x9c, 0x8e, 0xcd, 0x4a, 0xc5, 0x0d, 0x3c, 0x97, 0x74, 0x28, - 0x61, 0xf8, 0xbc, 0x32, 0x2b, 0xff, 0xd0, 0x29, 0x30, 0xe5, 0x26, 0xf9, - 0xf6, 0x58, 0xbe, 0xc1, 0x6b, 0x65, 0x8b, 0xe3, 0xe7, 0xce, 0xb1, 0x74, - 0xec, 0xb1, 0x4c, 0x6e, 0xf8, 0x47, 0x5d, 0x23, 0x2f, 0x49, 0x9e, 0x5f, - 0xb0, 0x4b, 0x17, 0xf4, 0xf5, 0x07, 0x2c, 0x58, 0xbd, 0xed, 0x4a, 0xc5, - 0xee, 0x37, 0x96, 0x2f, 0xb3, 0x60, 0xe0, 0xb1, 0x78, 0x32, 0x02, 0xc5, - 0x74, 0x7c, 0x04, 0x3b, 0xe2, 0x5b, 0x9f, 0x4b, 0x17, 0x85, 0xb4, 0xac, - 0x5a, 0x4d, 0x36, 0xba, 0x17, 0xbf, 0xed, 0xb0, 0xb5, 0x9d, 0xa4, 0x0b, - 0x17, 0xf7, 0xbb, 0x61, 0x60, 0xd6, 0x2a, 0x24, 0x7a, 0xfd, 0x90, 0x89, - 0xf8, 0x77, 0x7e, 0xe6, 0x41, 0xf4, 0xb1, 0x7e, 0x8a, 0x0d, 0xd7, 0x16, - 0x2b, 0x0f, 0x4f, 0x85, 0x17, 0x85, 0x1f, 0xdc, 0xb1, 0x6e, 0xcb, 0x17, - 0xfd, 0xaf, 0xb0, 0x6d, 0xf7, 0x02, 0xc5, 0x49, 0xe7, 0x38, 0xa5, 0xfc, - 0xe5, 0xb7, 0xc5, 0xc5, 0x8a, 0xf9, 0xe7, 0xf8, 0x82, 0xfb, 0xf8, 0x06, - 0x58, 0xba, 0x3f, 0xb9, 0x62, 0xf7, 0x21, 0xb2, 0xc5, 0x6c, 0x9a, 0x16, - 0x43, 0x04, 0x88, 0x84, 0x44, 0x18, 0xf5, 0x18, 0xca, 0xaf, 0x98, 0x7b, - 0xc0, 0xf7, 0x27, 0x0e, 0xde, 0x31, 0xa8, 0x8c, 0x74, 0x26, 0x72, 0xd6, - 0x8d, 0xc8, 0xa1, 0x21, 0xe8, 0xd8, 0xef, 0x4b, 0xe9, 0x62, 0xe3, 0x03, - 0x58, 0xa3, 0x9b, 0x66, 0x1c, 0xb9, 0xfb, 0x2c, 0x5e, 0x89, 0xfe, 0xb1, - 0x7f, 0x4e, 0x9a, 0x27, 0xfa, 0xc5, 0xfb, 0x83, 0x92, 0xd9, 0x8f, 0x33, - 0x83, 0xd7, 0xf8, 0xd6, 0x89, 0xc6, 0xf2, 0xb1, 0x7f, 0xfb, 0xde, 0x92, - 0x93, 0x4d, 0x98, 0x47, 0x9d, 0x62, 0xfe, 0xcd, 0xa7, 0xff, 0x95, 0x8b, - 0xf6, 0x45, 0xfc, 0x25, 0x8b, 0xf6, 0x06, 0x42, 0x02, 0xc5, 0xf8, 0x0c, - 0xd0, 0x3a, 0xc5, 0x49, 0xe8, 0xe1, 0x4d, 0xf3, 0x85, 0x9a, 0x58, 0xbf, - 0xfb, 0xf8, 0x7c, 0xec, 0xc7, 0xcd, 0x41, 0x62, 0x8d, 0x4e, 0xcd, 0xcd, - 0x34, 0x9f, 0xf2, 0xe2, 0x79, 0xe1, 0x07, 0x88, 0xef, 0x1e, 0x4e, 0xb1, - 0x7a, 0x76, 0xc5, 0x8a, 0xc5, 0x5e, 0x9d, 0x32, 0xea, 0x3f, 0x13, 0xb2, - 0x78, 0x76, 0xf8, 0xfa, 0xd4, 0xac, 0x5f, 0xff, 0x7b, 0xd2, 0x7c, 0xff, - 0xe5, 0xca, 0x4e, 0xb1, 0x7e, 0xe7, 0x18, 0xa0, 0xb1, 0x7f, 0xf8, 0xb0, - 0x6d, 0x0f, 0x39, 0x16, 0x6e, 0xb1, 0x7f, 0x3e, 0xb8, 0x1c, 0x81, 0x62, - 0xff, 0xec, 0xf7, 0xdf, 0xdf, 0xc2, 0x90, 0x2c, 0x5c, 0xdb, 0x2c, 0x5b, - 0xb1, 0x88, 0xfa, 0xc2, 0x80, 0x24, 0x11, 0x7c, 0x72, 0x1d, 0xff, 0xb0, - 0x6f, 0xce, 0xbc, 0x26, 0xe2, 0xc5, 0xf8, 0xc6, 0x37, 0xee, 0xb1, 0x68, - 0x18, 0x7d, 0x5c, 0x40, 0xbf, 0xee, 0x67, 0xa4, 0xef, 0xa8, 0x2c, 0x57, - 0x4a, 0x9a, 0x1e, 0x34, 0x82, 0x85, 0xf7, 0x8a, 0x6f, 0x6f, 0x90, 0x58, - 0xbf, 0x7c, 0x45, 0x3d, 0x96, 0x2f, 0xdc, 0x62, 0x84, 0xac, 0x5f, 0xc4, - 0xde, 0x84, 0x9a, 0xb1, 0x52, 0x7f, 0xfc, 0x2a, 0x0c, 0x9e, 0xfd, 0x1b, - 0x49, 0xb2, 0x12, 0xc5, 0xc7, 0xe2, 0xc5, 0xf6, 0xc6, 0x77, 0x6e, 0xb1, - 0x7e, 0x70, 0xb3, 0xaf, 0x2c, 0x5d, 0x21, 0x2c, 0x57, 0xcf, 0x08, 0x8a, - 0xaf, 0xff, 0x72, 0x75, 0xbf, 0xb8, 0xfe, 0xfe, 0x0d, 0x62, 0xff, 0xff, - 0xdc, 0xc3, 0xce, 0xf8, 0x4e, 0x68, 0x7a, 0x1f, 0xf1, 0xc8, 0xd5, 0x8b, - 0xdb, 0x46, 0xdd, 0xf6, 0xb1, 0x7b, 0x3a, 0x82, 0xc5, 0xcc, 0x35, 0x8a, - 0xc3, 0x6a, 0xc3, 0xd7, 0xb8, 0xf1, 0x2c, 0x51, 0x1b, 0xde, 0x0f, 0xdf, - 0x9f, 0xb6, 0xb0, 0xeb, 0x15, 0x88, 0xe7, 0x36, 0x13, 0xbf, 0x20, 0xb7, - 0x16, 0x2f, 0x1a, 0xe3, 0x58, 0xbf, 0x99, 0xb4, 0x16, 0x7d, 0x62, 0xff, - 0x3c, 0xfb, 0x3b, 0x30, 0xd6, 0x2f, 0xfe, 0xc0, 0xe7, 0x40, 0x7f, 0x68, - 0x47, 0x58, 0xbf, 0xdf, 0x9d, 0x3e, 0xef, 0xd9, 0x62, 0x8d, 0x47, 0xe4, - 0x43, 0xda, 0x2e, 0x23, 0x4f, 0x23, 0x5f, 0x49, 0x39, 0xd6, 0x2f, 0xfd, - 0xb1, 0x4f, 0x4e, 0x32, 0x9d, 0x96, 0x2f, 0xf0, 0x39, 0xe2, 0x93, 0xf1, - 0x62, 0xff, 0x1e, 0x7e, 0xdc, 0x98, 0xf5, 0x8a, 0x93, 0xea, 0x63, 0x4a, - 0xdd, 0x1d, 0x6c, 0x42, 0x50, 0xaa, 0xa1, 0xae, 0x37, 0xee, 0x43, 0xd2, - 0x66, 0xa3, 0x55, 0x39, 0xaf, 0xe3, 0x0e, 0x28, 0xcd, 0xaf, 0x79, 0xcd, - 0x58, 0xbe, 0x34, 0x21, 0x9d, 0x62, 0xf6, 0xce, 0x12, 0xc5, 0xf8, 0xcf, - 0xce, 0xa0, 0xb1, 0x46, 0x33, 0x4b, 0xe6, 0x58, 0xa6, 0xca, 0x59, 0x2a, - 0x2c, 0xd4, 0x9d, 0xe1, 0x3b, 0xd1, 0x7c, 0x45, 0xe7, 0x18, 0x69, 0xcd, - 0xbe, 0x3d, 0x78, 0x78, 0x44, 0xc1, 0x0f, 0xde, 0xfb, 0xf7, 0x2c, 0x5d, - 0xc9, 0x58, 0xbe, 0xe3, 0x14, 0x16, 0x2a, 0x07, 0xb2, 0x72, 0x0e, 0x0b, - 0xdf, 0xdb, 0x45, 0x08, 0xdb, 0x5b, 0x2c, 0x5d, 0x9b, 0xac, 0x5c, 0xfb, - 0x2c, 0x57, 0x8d, 0x87, 0x70, 0xc5, 0x2c, 0x5b, 0x8b, 0x15, 0xb9, 0x7d, - 0xc0, 0xcb, 0xbe, 0x25, 0x8b, 0xd8, 0xdf, 0x58, 0xbe, 0xf0, 0x30, 0x96, - 0x28, 0x67, 0xef, 0xa2, 0x13, 0x8c, 0x10, 0xe5, 0xf0, 0x09, 0xe5, 0x62, - 0xdb, 0x2c, 0x5f, 0xf0, 0xf0, 0xef, 0xd4, 0x0a, 0x56, 0x2f, 0xde, 0xfb, - 0x9f, 0x4b, 0x15, 0x03, 0xf5, 0x71, 0x3d, 0x1c, 0xde, 0xf8, 0xdd, 0x62, - 0xdd, 0x96, 0x2f, 0xdf, 0xc7, 0x87, 0x16, 0x2f, 0xff, 0xbf, 0x21, 0xc6, - 0x78, 0x98, 0x1c, 0xe4, 0x81, 0x22, 0xf1, 0xb3, 0xc5, 0x8b, 0xf6, 0x79, - 0x85, 0xdf, 0xac, 0x5a, 0x3d, 0x62, 0xfd, 0xad, 0xd9, 0xb7, 0x5c, 0x80, - 0x85, 0xee, 0x4f, 0x4b, 0x17, 0xb9, 0xa8, 0x2c, 0x5f, 0xff, 0xd0, 0x33, - 0x3e, 0xc5, 0x9e, 0xe3, 0x7b, 0x99, 0xe5, 0x8a, 0x73, 0xf9, 0x61, 0xeb, - 0x98, 0x6b, 0x16, 0x04, 0xa6, 0x35, 0x82, 0xbd, 0x1b, 0x9e, 0x12, 0xfe, - 0x20, 0xbe, 0x2c, 0x0b, 0xb9, 0x62, 0xef, 0x71, 0x62, 0xe7, 0x02, 0xc5, - 0x40, 0xd7, 0x8c, 0x62, 0xe7, 0xd9, 0x62, 0x9d, 0x11, 0xcc, 0xab, 0xe2, - 0x1b, 0xc2, 0x2d, 0xd6, 0x2f, 0x99, 0x98, 0x35, 0x8b, 0xee, 0x80, 0xf0, - 0x58, 0xbf, 0xfe, 0xcf, 0xbe, 0xbe, 0xdc, 0x7f, 0x49, 0x6e, 0xb1, 0x7d, - 0xb1, 0x31, 0xd6, 0x2e, 0x62, 0x58, 0xbf, 0x49, 0xbd, 0xc2, 0xd2, 0xc5, - 0x49, 0xf3, 0x6c, 0x47, 0xa1, 0x6a, 0xef, 0x57, 0x13, 0xa0, 0x28, 0x32, - 0x8c, 0x54, 0xe8, 0x7b, 0x51, 0xa3, 0x9e, 0x1c, 0x7f, 0x2e, 0x61, 0xe2, - 0x22, 0xe1, 0x27, 0xa1, 0x6b, 0x7d, 0x17, 0xf3, 0xcb, 0x17, 0xf3, 0x6b, - 0x3b, 0x60, 0xd6, 0x2f, 0xdb, 0xb1, 0xbf, 0x75, 0x8a, 0x63, 0xfd, 0x01, - 0x21, 0x17, 0xdf, 0x68, 0x6e, 0x75, 0x8b, 0xc3, 0x68, 0x2c, 0x5a, 0x0b, - 0x15, 0x26, 0xbf, 0xb8, 0x76, 0xf1, 0x37, 0x16, 0x2f, 0xbd, 0xb3, 0x12, - 0xc5, 0xe3, 0xce, 0xeb, 0x17, 0x31, 0xab, 0x15, 0x86, 0xd8, 0x87, 0xae, - 0x6d, 0x2c, 0x5a, 0x0b, 0x17, 0xed, 0x85, 0xee, 0xde, 0x58, 0xba, 0x40, - 0xb1, 0x58, 0x78, 0x9e, 0x2d, 0xa9, 0x3f, 0x73, 0x55, 0xae, 0x00, 0x4b, - 0x16, 0xd2, 0xc5, 0xfe, 0x86, 0xa7, 0x66, 0xd6, 0xeb, 0x17, 0xff, 0x60, - 0x05, 0xc6, 0xd9, 0xca, 0x7a, 0x58, 0xa3, 0x11, 0x4c, 0xe3, 0x2c, 0x24, - 0x46, 0xd6, 0x75, 0x8b, 0xff, 0xf3, 0x74, 0x0d, 0xfe, 0xf1, 0x13, 0x05, - 0xec, 0xfa, 0xc5, 0xe3, 0x5f, 0xcb, 0x17, 0xb8, 0xde, 0x58, 0xbf, 0x9f, - 0x69, 0xf4, 0x8d, 0x62, 0xa5, 0x1a, 0x78, 0x22, 0x6a, 0xcf, 0x43, 0xcc, - 0x3b, 0x71, 0x9f, 0x58, 0xbf, 0x79, 0xc6, 0x29, 0x58, 0xbe, 0x68, 0x60, - 0xd6, 0x28, 0xe7, 0x94, 0x45, 0x16, 0x25, 0x8b, 0x6e, 0xb1, 0x63, 0xc9, - 0xa4, 0xf0, 0x8d, 0xbd, 0x27, 0xd7, 0x88, 0xb7, 0xf7, 0xb2, 0x28, 0x30, - 0x16, 0x2f, 0xe9, 0x3e, 0x1b, 0x3c, 0x58, 0xad, 0x97, 0x2d, 0x60, 0x47, - 0x83, 0x9b, 0xac, 0xc7, 0x8f, 0xea, 0x11, 0xc7, 0x86, 0x47, 0xe3, 0x0e, - 0x02, 0x49, 0x43, 0x3b, 0x84, 0xde, 0x2f, 0xbf, 0xf1, 0x66, 0xa1, 0x90, - 0x0d, 0xa3, 0xd6, 0x2f, 0xdd, 0xde, 0xc2, 0x02, 0xc5, 0xc7, 0x95, 0x8a, - 0xc3, 0xc2, 0x72, 0xbb, 0xfe, 0x81, 0x99, 0x3b, 0xef, 0x84, 0xb1, 0x7b, - 0xef, 0xa5, 0x8a, 0x19, 0xec, 0x78, 0xee, 0xfd, 0xf2, 0xc7, 0xf2, 0xc5, - 0xd2, 0x75, 0x8b, 0xd9, 0xac, 0x58, 0xad, 0xcd, 0x99, 0xc5, 0xef, 0xfb, - 0xee, 0x2e, 0xfc, 0x3d, 0x84, 0x4b, 0x17, 0xfb, 0xf9, 0xd4, 0x3c, 0xf1, - 0x2c, 0x54, 0x0f, 0xdc, 0x08, 0x35, 0x29, 0x8a, 0xe2, 0xd0, 0xa1, 0x33, - 0x76, 0x6c, 0xb1, 0x61, 0x2c, 0x50, 0xcd, 0x56, 0x86, 0x2f, 0xf4, 0xe1, - 0x7b, 0x91, 0xdd, 0x96, 0x2f, 0xe9, 0x8f, 0xfb, 0xb4, 0x16, 0x2f, 0x4f, - 0x0c, 0x39, 0xf4, 0x11, 0xc5, 0xfc, 0xc1, 0x73, 0x92, 0x05, 0x8a, 0xf9, - 0xf1, 0x11, 0x9d, 0xcd, 0xa5, 0x8b, 0x98, 0x25, 0x8a, 0x93, 0x5e, 0x21, - 0x7b, 0xff, 0x7d, 0x8b, 0xdc, 0x21, 0x30, 0x6b, 0x17, 0xfd, 0xad, 0x3f, - 0x50, 0xf3, 0x74, 0xb1, 0x7a, 0x39, 0x8d, 0x58, 0xbf, 0xe9, 0x3c, 0x33, - 0x6c, 0x17, 0x7e, 0xb1, 0x7f, 0xd2, 0x07, 0x87, 0xdc, 0x80, 0xb1, 0x6d, - 0x96, 0x2e, 0x6f, 0x68, 0xf2, 0xfb, 0xf3, 0x8a, 0xc4, 0x6e, 0xb9, 0x0b, - 0x42, 0x2a, 0xe6, 0xd9, 0x62, 0xe9, 0x0d, 0x62, 0x98, 0xd8, 0x04, 0x31, - 0x7f, 0xf3, 0x70, 0x3f, 0x39, 0x0a, 0x19, 0xc5, 0x8b, 0xc1, 0x04, 0x12, - 0xe0, 0xfa, 0x8e, 0x37, 0x10, 0xd7, 0x07, 0xd1, 0x18, 0x6d, 0xea, 0x51, - 0x66, 0xcf, 0x97, 0x01, 0x96, 0x2f, 0xfe, 0x93, 0x73, 0xc1, 0xed, 0xe8, - 0x49, 0xab, 0x17, 0xd0, 0x14, 0x9a, 0xb1, 0x7f, 0xdb, 0x6a, 0x7c, 0xfb, - 0xb8, 0xd6, 0x2c, 0x05, 0x8a, 0x82, 0x2e, 0xb1, 0x25, 0xc9, 0x18, 0xee, - 0xf1, 0x30, 0x16, 0x2a, 0x57, 0x4c, 0x47, 0x0e, 0xb3, 0x54, 0x37, 0x20, - 0x73, 0xfd, 0x46, 0x33, 0xf6, 0x20, 0x43, 0x50, 0x88, 0x7d, 0x0d, 0x10, - 0xce, 0xaf, 0xf0, 0xfe, 0xc7, 0x0e, 0x49, 0x62, 0xfe, 0xfe, 0x43, 0xef, - 0xd9, 0x62, 0xa3, 0xcf, 0x93, 0xc6, 0x96, 0x25, 0x8b, 0xda, 0x16, 0xcb, - 0x15, 0x03, 0x60, 0x71, 0x1b, 0xff, 0xe2, 0x73, 0x63, 0x39, 0xef, 0x89, - 0xa1, 0x09, 0x58, 0xa9, 0x3f, 0x5c, 0x21, 0xbf, 0x7f, 0x3d, 0xc9, 0x58, - 0xb7, 0x65, 0x8b, 0xf1, 0x78, 0x59, 0xf5, 0x8b, 0x09, 0x62, 0x96, 0x28, - 0xc2, 0xf8, 0x42, 0x55, 0x27, 0xcf, 0xb2, 0x35, 0xdd, 0xce, 0xb1, 0x77, - 0x69, 0x58, 0xbe, 0xe7, 0xb3, 0x4b, 0x15, 0xb2, 0xb1, 0x98, 0x46, 0x28, - 0x6c, 0x32, 0xb7, 0x20, 0x88, 0xa3, 0x4f, 0x6c, 0x45, 0xc1, 0xaf, 0x0c, - 0xde, 0x1b, 0x41, 0x62, 0xe7, 0xd2, 0xc5, 0x61, 0xb4, 0xf8, 0xed, 0xfe, - 0x2c, 0xe1, 0xba, 0xce, 0x2c, 0x5f, 0xee, 0xa7, 0xd9, 0x9d, 0x41, 0x62, - 0xbb, 0x1f, 0x48, 0x46, 0x97, 0x89, 0xce, 0xb1, 0x7f, 0x0d, 0xcb, 0x60, - 0xfa, 0x58, 0xa2, 0x3c, 0xd0, 0x87, 0x2b, 0x11, 0x28, 0xce, 0x57, 0xb3, - 0xb0, 0x6b, 0x17, 0x3f, 0xd6, 0x2e, 0x7e, 0xcb, 0x16, 0x82, 0xc5, 0x49, - 0xab, 0x61, 0x9b, 0xff, 0x09, 0x8f, 0x3a, 0xe3, 0x94, 0x4b, 0x14, 0x33, - 0xde, 0x21, 0xfb, 0xdd, 0xb0, 0x6b, 0x17, 0xe9, 0x39, 0x4c, 0x4b, 0x15, - 0x87, 0x8e, 0x68, 0xfd, 0xf3, 0x1f, 0x0e, 0xb1, 0x7f, 0x39, 0x37, 0x85, - 0xe5, 0x8b, 0xe7, 0x3c, 0xc7, 0xac, 0x5c, 0xfa, 0x30, 0xfd, 0x24, 0x8b, - 0x0b, 0x68, 0x69, 0xeb, 0xe4, 0x28, 0x34, 0xd1, 0xf8, 0x4b, 0x5f, 0xde, - 0xce, 0x7c, 0x5c, 0x58, 0xbf, 0x3e, 0xe4, 0xdb, 0xac, 0x5f, 0x61, 0xdb, - 0xa5, 0x8b, 0xe3, 0xb1, 0x62, 0xc5, 0xfb, 0xc5, 0x9a, 0x95, 0x8b, 0x81, - 0x1e, 0xb1, 0x5b, 0x1e, 0x11, 0x13, 0xd4, 0xa3, 0x47, 0x0a, 0x5c, 0x8d, - 0x98, 0xee, 0x28, 0x96, 0x29, 0x62, 0x96, 0x2c, 0xde, 0x2e, 0x3b, 0x83, - 0x2a, 0x4f, 0x60, 0x06, 0x17, 0x9e, 0x60, 0xb1, 0x46, 0x37, 0xd9, 0xb1, - 0xb9, 0x7c, 0x6c, 0xd1, 0x30, 0xb9, 0xd8, 0xee, 0x10, 0x96, 0x19, 0x76, - 0x4e, 0x35, 0x9b, 0x19, 0xc6, 0xe5, 0xaf, 0x3a, 0x0f, 0x14, 0x30, 0x35, - 0x08, 0x43, 0xbc, 0x7e, 0x33, 0x76, 0xa4, 0x54, 0x02, 0x18, 0x45, 0x18, - 0xef, 0x08, 0x45, 0x1f, 0xb8, 0x48, 0xf1, 0xd1, 0x80, 0x07, 0x09, 0x1e, - 0xe2, 0x1b, 0xf0, 0x63, 0x17, 0xb8, 0xb1, 0x7f, 0xcf, 0xf6, 0xd4, 0x9b, - 0x91, 0x2c, 0x5f, 0xff, 0x7e, 0x5b, 0x5c, 0xe6, 0x7d, 0xf8, 0x2d, 0x96, - 0x2f, 0xb3, 0xec, 0x75, 0x8b, 0x7a, 0x51, 0x5b, 0xc3, 0xa0, 0xd4, 0x6f, - 0xfb, 0x05, 0xe1, 0xbe, 0x9b, 0x8b, 0x17, 0xe1, 0xcf, 0xe4, 0x35, 0x8b, - 0x04, 0xb1, 0x4c, 0x8a, 0xbe, 0x1b, 0x08, 0xe4, 0x32, 0x9b, 0xfe, 0x6e, - 0x16, 0x76, 0x7f, 0x89, 0x62, 0xfd, 0xfc, 0xdc, 0x58, 0xb1, 0x76, 0x71, - 0x62, 0xb0, 0xf0, 0x18, 0xa6, 0xff, 0x8b, 0x3d, 0x3d, 0x9c, 0x80, 0xb1, - 0x7f, 0xbd, 0x3d, 0x9f, 0xd0, 0x95, 0x8b, 0xff, 0xfb, 0x03, 0x9d, 0x01, - 0xfd, 0xa1, 0x1f, 0x9e, 0xcd, 0x2c, 0x5f, 0x8e, 0x1c, 0xe8, 0x0b, 0x15, - 0x88, 0xbc, 0x23, 0x50, 0xd7, 0x6f, 0x98, 0xb2, 0x3d, 0x62, 0xd1, 0xeb, - 0x14, 0x33, 0x73, 0xe2, 0x4a, 0xc4, 0xdf, 0x81, 0x0f, 0x5e, 0x34, 0x52, - 0xc5, 0xf9, 0xfd, 0xc1, 0x47, 0xac, 0x5b, 0x47, 0x37, 0x1f, 0x0c, 0xbe, - 0x7f, 0x4c, 0x16, 0x2f, 0xf0, 0x99, 0xe1, 0x25, 0xba, 0xc5, 0x61, 0xfe, - 0x7c, 0x9f, 0x84, 0x57, 0xde, 0xeb, 0x98, 0xb1, 0x73, 0x76, 0x58, 0xb7, - 0x65, 0x8a, 0x73, 0x5a, 0xc3, 0x37, 0xbf, 0x80, 0x58, 0xbf, 0xf3, 0xeb, - 0xed, 0xc3, 0x75, 0xed, 0xd6, 0x2f, 0x80, 0x1c, 0xf1, 0x62, 0xfc, 0xfe, - 0x9f, 0x71, 0x22, 0xfb, 0x79, 0xf7, 0x12, 0x2e, 0x08, 0x24, 0x8a, 0x81, - 0xf3, 0x61, 0x40, 0x44, 0x94, 0x91, 0x18, 0x6b, 0xea, 0x09, 0x9b, 0xfc, - 0x74, 0x90, 0x82, 0x85, 0xcd, 0xe6, 0x20, 0x2c, 0x5a, 0x35, 0x2c, 0x5e, - 0x6f, 0xb2, 0xc5, 0xf8, 0x2f, 0x07, 0x20, 0x58, 0xbf, 0x67, 0x3d, 0x91, - 0xeb, 0x15, 0x2a, 0xa4, 0x06, 0xa3, 0x91, 0xab, 0x1a, 0x86, 0x71, 0xcf, - 0x8c, 0x30, 0xe7, 0x8a, 0xef, 0x13, 0x04, 0xb1, 0x7f, 0x70, 0x7f, 0x92, - 0xd9, 0x62, 0xfd, 0xf7, 0x9d, 0x01, 0x62, 0xa2, 0x3f, 0x40, 0x0e, 0xf8, - 0xbe, 0xef, 0xba, 0xc5, 0xe7, 0xed, 0x8b, 0x15, 0x11, 0xb5, 0xd0, 0xbd, - 0xf8, 0xa7, 0xb7, 0xe5, 0x62, 0xff, 0x6a, 0x7f, 0x2e, 0x5b, 0x2c, 0x5f, - 0xc1, 0xe6, 0xba, 0xe4, 0xac, 0x5f, 0xfc, 0xff, 0x14, 0x6d, 0xcf, 0x7d, - 0xd8, 0x0b, 0x14, 0x73, 0xfa, 0xf1, 0x85, 0xd9, 0xc5, 0x8a, 0xc3, 0x73, - 0xf2, 0x2b, 0xfe, 0xc2, 0xf7, 0xde, 0x4b, 0x65, 0x8b, 0xff, 0xfd, 0xfc, - 0x38, 0x72, 0x0d, 0x4f, 0x0b, 0x3b, 0x3f, 0xc4, 0xb1, 0x7b, 0xd3, 0xbe, - 0x22, 0x6f, 0xc7, 0x17, 0xff, 0x82, 0x6e, 0x79, 0xfe, 0xf8, 0x6b, 0xe9, - 0x62, 0x96, 0x2a, 0x55, 0x16, 0x0e, 0x1c, 0xd9, 0x0b, 0xbf, 0x9a, 0x71, - 0x2e, 0xb6, 0x65, 0xcd, 0x0e, 0x38, 0x3d, 0xcf, 0x62, 0x7a, 0xd4, 0x73, - 0xc7, 0x87, 0x48, 0x25, 0x5f, 0x14, 0x3a, 0xf8, 0xcb, 0xe2, 0x20, 0xa5, - 0x2a, 0xdf, 0xcf, 0x9b, 0x1d, 0xfc, 0xb1, 0x7f, 0xa1, 0x31, 0xee, 0x59, - 0x12, 0xc5, 0xf0, 0xfe, 0xd1, 0xeb, 0x17, 0xd0, 0xfe, 0x6c, 0xb1, 0x52, - 0x79, 0x4c, 0x4d, 0x60, 0x96, 0x2f, 0xa2, 0x8f, 0x20, 0x2c, 0x58, 0x80, - 0x6e, 0xbc, 0x27, 0x76, 0x79, 0x62, 0xb4, 0x9a, 0x2b, 0x17, 0x14, 0x20, - 0x04, 0xb5, 0x1c, 0x4d, 0x7f, 0x14, 0xc3, 0x5a, 0x95, 0x8b, 0xfe, 0x1c, - 0xfe, 0x61, 0x00, 0xa5, 0x62, 0xc0, 0x58, 0xb4, 0xb9, 0xe6, 0x68, 0xea, - 0xf8, 0xa7, 0xa0, 0x62, 0x27, 0xfe, 0xf3, 0x7f, 0x41, 0xbc, 0xe2, 0xe2, - 0xc5, 0xff, 0xbd, 0xcc, 0xdf, 0xec, 0x5e, 0xe2, 0xc5, 0xe7, 0x20, 0x2c, - 0x18, 0x78, 0x14, 0x74, 0x6a, 0x91, 0xcf, 0x66, 0xeb, 0xb9, 0xe5, 0x8b, - 0xff, 0x1d, 0xf0, 0xfe, 0xe0, 0x8b, 0xcb, 0x17, 0xff, 0xf6, 0x85, 0xcf, - 0xb4, 0x37, 0xfb, 0xf5, 0x09, 0x68, 0x2c, 0x51, 0xa8, 0x9d, 0xf1, 0xfd, - 0xff, 0xbc, 0xfc, 0xdb, 0x02, 0xce, 0xbc, 0xb1, 0x7f, 0xff, 0xbe, 0xe4, - 0x2f, 0x42, 0x4d, 0x17, 0xe4, 0xf9, 0xd7, 0x96, 0x2f, 0xfe, 0x9d, 0xfe, - 0xfe, 0xc8, 0x8a, 0x4f, 0x88, 0xa5, 0xdd, 0x0a, 0xff, 0xf9, 0x8f, 0xef, - 0xb1, 0xf2, 0x12, 0x0e, 0x62, 0xc5, 0x6e, 0x8a, 0xb2, 0x5c, 0xa9, 0x4e, - 0x5f, 0x23, 0x74, 0xbf, 0xec, 0xd0, 0x1f, 0xda, 0x11, 0xd6, 0x2a, 0x55, - 0x6f, 0xe1, 0x8f, 0xe5, 0x26, 0x47, 0x14, 0x5b, 0x65, 0x8b, 0xfb, 0x92, - 0x17, 0xb3, 0x75, 0x8b, 0xfe, 0xce, 0xcd, 0xa6, 0x83, 0x41, 0x62, 0xc3, - 0xdc, 0xff, 0x7a, 0x13, 0xe1, 0x85, 0xff, 0xef, 0xbc, 0x44, 0xc1, 0x7b, - 0x3e, 0x19, 0xd6, 0x2f, 0xf4, 0x27, 0x0b, 0xc2, 0x65, 0x8b, 0x6d, 0xb9, - 0xff, 0xf4, 0x9b, 0x52, 0x8e, 0x11, 0x42, 0xda, 0xfe, 0x9f, 0xcf, 0xe7, - 0x65, 0x8b, 0xde, 0x91, 0xac, 0x5f, 0xf9, 0xdb, 0xa8, 0x7b, 0x84, 0xe6, - 0xac, 0x5f, 0xd9, 0x1c, 0x2f, 0xbe, 0x96, 0x2a, 0x07, 0xe2, 0x1a, 0x05, - 0x4a, 0x2c, 0x72, 0x11, 0xd5, 0xb2, 0x60, 0xb0, 0x86, 0xfd, 0xb8, 0xb1, - 0x4b, 0x14, 0xc5, 0xf0, 0x42, 0x55, 0x27, 0xd0, 0xc9, 0x17, 0xfb, 0x0e, - 0xc5, 0xee, 0x4a, 0xc5, 0xc0, 0x75, 0x8a, 0xd1, 0xe4, 0x91, 0x95, 0x0d, - 0x50, 0xf7, 0xe3, 0x94, 0x66, 0x9b, 0xe9, 0xec, 0xe3, 0x58, 0xbf, 0x43, - 0xe2, 0x9d, 0x2c, 0x5f, 0x7d, 0xc2, 0xe2, 0xc5, 0xfe, 0x9e, 0xcf, 0xd8, - 0x85, 0xc5, 0x8b, 0xf9, 0xf8, 0xdd, 0x43, 0x16, 0x2e, 0x63, 0xee, 0x88, - 0x9d, 0x12, 0x47, 0x1b, 0xde, 0x7d, 0x1a, 0xb1, 0x7f, 0x9e, 0x7c, 0x52, - 0x7e, 0x2c, 0x57, 0x49, 0xa0, 0xfe, 0x16, 0x40, 0x3f, 0x21, 0xeb, 0xfa, - 0x0e, 0x5e, 0x90, 0x2c, 0x52, 0xc5, 0xc2, 0x98, 0x8d, 0xc8, 0x0b, 0x6f, - 0xd8, 0x23, 0xcf, 0x16, 0x29, 0x62, 0xec, 0x8b, 0x46, 0xd3, 0x85, 0x17, - 0xfc, 0xe2, 0xef, 0xff, 0x21, 0x96, 0xcb, 0x17, 0xee, 0xbc, 0x59, 0xb2, - 0xc5, 0xfc, 0xfe, 0xe3, 0x94, 0x4b, 0x15, 0x27, 0xb1, 0xf2, 0xab, 0xfe, - 0x1f, 0xe4, 0x6f, 0xda, 0x46, 0xb1, 0x69, 0xd8, 0xf7, 0x22, 0x21, 0xbf, - 0xec, 0x89, 0xb3, 0xf3, 0x91, 0x2c, 0x5f, 0xf9, 0xfa, 0xe0, 0xff, 0x27, - 0x6f, 0x2c, 0x5e, 0xee, 0x70, 0x96, 0x28, 0x6a, 0x91, 0x71, 0x87, 0x72, - 0xd7, 0x87, 0xa6, 0x8a, 0x48, 0xe7, 0xb9, 0x02, 0xfb, 0xaf, 0xe6, 0xcb, - 0x17, 0xff, 0x07, 0xc7, 0xe4, 0x4e, 0x3c, 0x20, 0x2c, 0x5e, 0x81, 0x32, - 0xc5, 0xf3, 0x7b, 0x36, 0x58, 0xba, 0x7a, 0x58, 0xb8, 0xa5, 0x62, 0xc7, - 0x93, 0xed, 0xf8, 0xe1, 0x11, 0xf8, 0x62, 0xfc, 0xfa, 0xe6, 0x69, 0x62, - 0xf4, 0x86, 0x4b, 0x17, 0x64, 0x58, 0x78, 0xbf, 0x28, 0xbf, 0xfe, 0x68, - 0xf0, 0xca, 0x7e, 0xcf, 0xe9, 0xf7, 0x16, 0x2a, 0x4f, 0xfc, 0x45, 0xb7, - 0xf1, 0x09, 0x8f, 0x31, 0xeb, 0x15, 0x2a, 0x8b, 0x46, 0x4a, 0xd0, 0xb3, - 0x28, 0xc1, 0x3c, 0x43, 0x7f, 0x43, 0x8e, 0x5d, 0x41, 0x62, 0xff, 0xdf, - 0x70, 0xbf, 0x30, 0xf8, 0x86, 0xb1, 0x6c, 0x58, 0xa5, 0x8b, 0x3e, 0x8b, - 0xde, 0xc2, 0x37, 0xd8, 0x03, 0xf1, 0x62, 0xa5, 0x1a, 0xe6, 0x97, 0xee, - 0xbd, 0xe2, 0x7b, 0x9f, 0xb2, 0xc5, 0xff, 0xb2, 0x3f, 0x61, 0x6a, 0x19, - 0xd7, 0x96, 0x29, 0x8f, 0x78, 0x86, 0x6f, 0xcf, 0xcc, 0xcd, 0x2c, 0x5f, - 0xdc, 0x03, 0x76, 0xc1, 0xac, 0x5f, 0xff, 0xff, 0xf4, 0x3f, 0x85, 0x86, - 0xe1, 0x03, 0x30, 0x36, 0xd0, 0x0f, 0x8d, 0x07, 0xe0, 0x30, 0x0b, 0x17, - 0x0b, 0x86, 0x23, 0x0b, 0x0c, 0x2b, 0x49, 0x8c, 0x14, 0x3a, 0x6f, 0xff, - 0x3b, 0x74, 0x67, 0x27, 0x4d, 0x07, 0xfa, 0xc5, 0x18, 0xca, 0x31, 0x8a, - 0x36, 0x5d, 0x4a, 0xc1, 0xfc, 0xa9, 0x92, 0x8c, 0xaf, 0x90, 0x9c, 0xed, - 0x19, 0xc7, 0x71, 0x45, 0xc5, 0xb2, 0xc5, 0xef, 0xe6, 0xcb, 0x16, 0x8e, - 0x58, 0xbf, 0xf3, 0x07, 0xbc, 0xe9, 0xfd, 0xe9, 0x58, 0xac, 0x3f, 0x36, - 0x1e, 0x21, 0x5b, 0xd0, 0x6d, 0x2c, 0x5d, 0x3e, 0x58, 0xbf, 0x1d, 0xa1, - 0x83, 0x58, 0xa7, 0x37, 0xe0, 0x17, 0xbc, 0x2f, 0xe2, 0xc5, 0xf3, 0x75, - 0xc8, 0x2c, 0x58, 0x4b, 0x17, 0x9d, 0xa0, 0xb1, 0x7d, 0xf9, 0x2f, 0x2c, - 0x51, 0x86, 0xfb, 0x83, 0x96, 0xce, 0x1f, 0x97, 0x65, 0x0b, 0xec, 0xf6, - 0x0d, 0x22, 0xff, 0x98, 0x8d, 0xc2, 0x6f, 0x71, 0x62, 0xf9, 0x8d, 0x00, - 0x4b, 0x17, 0xec, 0x37, 0xd9, 0xba, 0xc5, 0x41, 0x15, 0x3f, 0x22, 0x23, - 0x8e, 0x12, 0xdf, 0x49, 0x14, 0xac, 0x54, 0x4a, 0x97, 0x74, 0xb8, 0x72, - 0x00, 0x0e, 0x94, 0x25, 0xbd, 0x0d, 0x20, 0xcf, 0x2f, 0xe6, 0x09, 0xbc, - 0xc6, 0xac, 0x5e, 0xe1, 0xf4, 0xb1, 0x73, 0xee, 0xb1, 0x40, 0x36, 0xdc, - 0x1e, 0xac, 0x5c, 0x0b, 0x36, 0x11, 0x6f, 0x2a, 0x27, 0x4e, 0x3e, 0x65, - 0xbc, 0xe1, 0x71, 0x62, 0xf7, 0x1f, 0xb2, 0xc5, 0xff, 0xe9, 0x39, 0x4f, - 0x40, 0x62, 0x16, 0x7d, 0x62, 0xff, 0xe8, 0x07, 0xc0, 0x60, 0xb7, 0x92, - 0x02, 0xc5, 0xfd, 0xb3, 0x10, 0xb3, 0xeb, 0x17, 0xfe, 0x8d, 0xb0, 0x62, - 0xf3, 0xfa, 0x74, 0xb1, 0x7c, 0xfa, 0x33, 0x16, 0x2f, 0xf3, 0x6a, 0x76, - 0x6d, 0x6e, 0xb1, 0x7f, 0x48, 0xbb, 0xfc, 0x1c, 0xac, 0x51, 0xa8, 0x8a, - 0xf9, 0x1f, 0x8d, 0x6f, 0xba, 0x86, 0x7b, 0xbd, 0x47, 0xfe, 0x43, 0x3a, - 0xfe, 0xf3, 0xea, 0x45, 0xdf, 0xac, 0x54, 0x15, 0x1a, 0x74, 0x92, 0xe8, - 0xff, 0x8c, 0xb4, 0x34, 0x4b, 0x6a, 0x55, 0x53, 0x34, 0xa5, 0x3b, 0xdf, - 0xcd, 0x96, 0x2f, 0x42, 0x12, 0xb1, 0x7b, 0x3f, 0x86, 0x1b, 0xb1, 0x0f, - 0x56, 0xea, 0xd8, 0x5a, 0x56, 0x21, 0x35, 0xdc, 0xe2, 0x58, 0xbf, 0xf3, - 0xed, 0xee, 0x0a, 0x3f, 0xcd, 0xf5, 0x8a, 0x81, 0xed, 0xf8, 0x5e, 0xff, - 0x6c, 0x67, 0x89, 0xba, 0xe2, 0xc5, 0xfc, 0xde, 0xf3, 0x96, 0xcb, 0x17, - 0xff, 0xb3, 0xcf, 0x85, 0xfc, 0xf7, 0xdf, 0x75, 0x8a, 0xf9, 0xfb, 0x91, - 0x75, 0xee, 0xda, 0x3a, 0xc5, 0xfa, 0x75, 0xec, 0x8f, 0x58, 0xbf, 0xef, - 0x39, 0xf9, 0xf9, 0x0c, 0x96, 0x2f, 0x16, 0x79, 0x62, 0xfe, 0x7e, 0x72, - 0x7f, 0x2b, 0x14, 0xe7, 0x92, 0x43, 0x97, 0xff, 0x13, 0xef, 0xcf, 0xcb, - 0xf9, 0xfc, 0xb1, 0x79, 0xba, 0x01, 0x89, 0xa9, 0xec, 0x43, 0xb9, 0x07, - 0x45, 0x6f, 0x08, 0x3d, 0x10, 0x5f, 0x49, 0x6e, 0xce, 0xa9, 0xcf, 0xd2, - 0x80, 0x6f, 0xff, 0x45, 0x83, 0x2c, 0x7d, 0x67, 0xa7, 0x4b, 0x17, 0xfd, - 0x39, 0xd6, 0x6c, 0x13, 0x74, 0xb1, 0x7f, 0xcc, 0x16, 0xb1, 0xff, 0x23, - 0x58, 0xa9, 0x45, 0xf6, 0x92, 0x48, 0xf2, 0xa0, 0xaf, 0x08, 0x12, 0xa5, - 0x7d, 0x0f, 0xfb, 0xf8, 0x5d, 0xfb, 0xeb, 0x58, 0xb1, 0x7f, 0xfe, 0xce, - 0xa1, 0xe7, 0xdb, 0x35, 0xef, 0x3e, 0xa5, 0x62, 0xf6, 0x75, 0x05, 0x8b, - 0xcd, 0xe7, 0x58, 0xbf, 0xee, 0xbc, 0xde, 0x29, 0xcf, 0xac, 0x5f, 0xef, - 0xe1, 0xad, 0x2f, 0x1c, 0xb1, 0x7f, 0xb3, 0x99, 0x1f, 0xf9, 0x1a, 0xc5, - 0xcc, 0x05, 0x8b, 0xa7, 0x65, 0x8b, 0xdf, 0x98, 0x96, 0x2f, 0xf4, 0xb9, - 0x66, 0xc1, 0xc1, 0x62, 0xdd, 0x0c, 0xfa, 0xb0, 0x63, 0xe3, 0xd7, 0xe6, - 0x88, 0x9e, 0x25, 0x8a, 0xc4, 0xe1, 0x37, 0x39, 0xf9, 0xb7, 0x8d, 0x85, - 0x08, 0x1e, 0xc6, 0xb5, 0x8a, 0x9d, 0x3e, 0xae, 0xc3, 0xdc, 0x8e, 0x82, - 0xfa, 0x4d, 0x1e, 0x2c, 0x5f, 0x78, 0xdc, 0xfa, 0xc5, 0xe2, 0x79, 0x58, - 0xbb, 0x50, 0x58, 0xbf, 0xf1, 0x67, 0xbc, 0x2d, 0xbd, 0x9b, 0xac, 0x5f, - 0xff, 0x0f, 0xdc, 0x98, 0x0d, 0x81, 0x83, 0x7e, 0x2c, 0x5f, 0x09, 0xb5, - 0x05, 0x8b, 0xfc, 0x59, 0x17, 0xe7, 0x5b, 0x2c, 0x5f, 0xf0, 0xca, 0x7a, - 0xf0, 0xb3, 0x4b, 0x17, 0x49, 0xbc, 0x3e, 0xff, 0x1a, 0xd4, 0xa6, 0x20, - 0x35, 0x03, 0xc2, 0x4a, 0xff, 0x88, 0x5e, 0xfe, 0x76, 0x1c, 0xac, 0x5f, - 0xcd, 0xd7, 0x33, 0xaf, 0x2c, 0x5d, 0x81, 0x2c, 0x56, 0x22, 0x0c, 0x07, - 0x64, 0x61, 0x7c, 0x7e, 0x06, 0x75, 0x8b, 0xfb, 0xd9, 0xf9, 0xeb, 0x8b, - 0x15, 0x28, 0x82, 0xc2, 0xe1, 0x12, 0xdb, 0x8b, 0x16, 0x09, 0x62, 0xc3, - 0x58, 0xb9, 0xc0, 0xb1, 0x7c, 0x13, 0x14, 0x16, 0x2e, 0x1b, 0xac, 0x5d, - 0xf7, 0x58, 0xbe, 0x87, 0x3f, 0x8b, 0x17, 0x85, 0xdf, 0xe2, 0xc5, 0xfd, - 0xd7, 0x30, 0x13, 0xd9, 0x62, 0x9c, 0xf4, 0xd8, 0x8a, 0xdc, 0x31, 0x1f, - 0xc3, 0x17, 0xdc, 0x8e, 0x21, 0x76, 0x17, 0x03, 0xb5, 0x3a, 0x70, 0x4c, - 0x26, 0x28, 0xc4, 0x29, 0x93, 0xc9, 0x04, 0x72, 0x97, 0xf7, 0x66, 0xd4, - 0x30, 0x6b, 0x17, 0x02, 0x56, 0x2e, 0x04, 0xac, 0x53, 0x9a, 0xe0, 0x0b, - 0xde, 0x86, 0x12, 0xc4, 0x61, 0xa0, 0xac, 0x45, 0x68, 0x9f, 0xaf, 0xff, - 0xfb, 0xf8, 0x2d, 0x1b, 0xd4, 0x3f, 0x84, 0x6f, 0xca, 0x73, 0x4b, 0x17, - 0x89, 0xb8, 0xb1, 0x51, 0xa2, 0xf3, 0xcc, 0x91, 0xec, 0x48, 0x31, 0xb3, - 0x46, 0x1e, 0x35, 0x1d, 0x46, 0x74, 0x08, 0xfd, 0xca, 0x1a, 0xde, 0x22, - 0x13, 0x4d, 0xfd, 0x3f, 0x62, 0x68, 0x2c, 0x5f, 0xda, 0x0f, 0xdc, 0x87, - 0x7e, 0xb1, 0x7f, 0xe6, 0xd6, 0xc1, 0xeb, 0x3b, 0x36, 0x96, 0x2f, 0xf0, - 0xb2, 0x29, 0x3c, 0x3b, 0xf5, 0x8b, 0xa1, 0x26, 0x23, 0x7f, 0x0b, 0x37, - 0x36, 0x02, 0x1d, 0xe8, 0x34, 0x16, 0x2e, 0xc1, 0xc9, 0xf3, 0x32, 0x4d, - 0xf7, 0x86, 0x39, 0x58, 0xbf, 0xfc, 0x4d, 0xd7, 0x0d, 0x35, 0x8c, 0xdc, - 0xe0, 0x58, 0xbe, 0x9d, 0x4f, 0xd6, 0x2e, 0x87, 0x4b, 0x15, 0x88, 0x8b, - 0x65, 0x0e, 0x11, 0x5f, 0xfb, 0xd2, 0x3d, 0xdf, 0x6c, 0xeb, 0xcb, 0x17, - 0xfd, 0x8f, 0xd7, 0xb5, 0x39, 0xd2, 0xc5, 0xff, 0xe2, 0x7e, 0xb9, 0x11, - 0x66, 0xd9, 0xd7, 0x96, 0x2f, 0xfd, 0xfc, 0x38, 0x72, 0x0c, 0xeb, 0xcb, - 0x15, 0x88, 0x8e, 0xf2, 0x6d, 0xfe, 0xeb, 0x77, 0xd0, 0x72, 0x35, 0x8b, - 0xc7, 0x68, 0x18, 0x9c, 0x8c, 0x97, 0x12, 0x17, 0x21, 0x91, 0xe2, 0x2a, - 0x65, 0x53, 0xe0, 0x94, 0x7f, 0x70, 0xbc, 0xb1, 0x74, 0x74, 0xac, 0x5f, - 0xd8, 0x0d, 0x3c, 0x9d, 0x62, 0xfe, 0x01, 0xc3, 0xe0, 0x7b, 0x2c, 0x5f, - 0xfa, 0x47, 0xf9, 0x0f, 0x5a, 0xc8, 0x96, 0x2f, 0xce, 0x45, 0x3d, 0x2c, - 0x57, 0xcf, 0xa3, 0x88, 0x37, 0x67, 0x4b, 0x15, 0xd2, 0x35, 0x7d, 0x09, - 0xb8, 0xe2, 0x2b, 0xff, 0x9a, 0x26, 0x01, 0x9f, 0x63, 0xbf, 0x16, 0x2f, - 0xff, 0x07, 0x21, 0x4c, 0x50, 0x62, 0xce, 0xbc, 0xb1, 0x7b, 0x4f, 0xa5, - 0x8b, 0xff, 0xff, 0x67, 0xa5, 0xe0, 0xdc, 0xe4, 0xea, 0x60, 0xfb, 0x90, - 0xb8, 0xb1, 0x40, 0x44, 0x47, 0x07, 0x6a, 0x55, 0x6b, 0x40, 0xaf, 0x06, - 0x3e, 0x34, 0xd1, 0x81, 0x11, 0xcf, 0x11, 0x82, 0x86, 0xad, 0xfc, 0x59, - 0xd0, 0x1e, 0x0b, 0x17, 0xc6, 0xcf, 0xb8, 0xb1, 0x7e, 0xf6, 0xa7, 0x3a, - 0x58, 0xa3, 0x4f, 0x37, 0xa2, 0x4b, 0xfb, 0x9c, 0x98, 0x4e, 0x96, 0x2f, - 0xfb, 0x52, 0x77, 0x8a, 0x5a, 0x3d, 0x62, 0xb0, 0xfa, 0xb7, 0x2e, 0xbc, - 0x2e, 0xbc, 0xb1, 0x7e, 0x98, 0x6d, 0x81, 0x2c, 0x52, 0xc5, 0x1c, 0xdb, - 0x31, 0x55, 0xd1, 0x71, 0x62, 0xb6, 0x4e, 0xe6, 0x3d, 0xec, 0xa1, 0x1d, - 0xc2, 0x2f, 0x2a, 0x86, 0x41, 0x7f, 0x7e, 0x5c, 0xa4, 0xeb, 0x17, 0xff, - 0xfd, 0x9e, 0x92, 0xdf, 0x3d, 0xf7, 0xeb, 0xd2, 0x00, 0xb3, 0xeb, 0x17, - 0xc5, 0x9d, 0x7a, 0x51, 0x28, 0x32, 0xcb, 0xb0, 0x25, 0x8b, 0xfe, 0x11, - 0x6f, 0xfc, 0xdb, 0x8e, 0xb1, 0x7f, 0xd3, 0xd6, 0x02, 0x7b, 0x66, 0xcb, - 0x17, 0xf1, 0x67, 0xb8, 0xc0, 0x58, 0xa9, 0x47, 0xae, 0x8e, 0x4e, 0x30, - 0x03, 0xbe, 0x1e, 0x5f, 0xff, 0xf3, 0x3f, 0xa0, 0xe3, 0xc8, 0x7e, 0x5f, - 0x40, 0x3b, 0x41, 0x62, 0xfe, 0xd9, 0xf5, 0xd7, 0xf6, 0x58, 0xbf, 0x43, - 0x35, 0x9c, 0x58, 0xaf, 0xa2, 0xfc, 0x99, 0x7c, 0x65, 0x7f, 0xbe, 0x26, - 0x37, 0xd3, 0xb2, 0xc5, 0xfd, 0xcd, 0x66, 0xf3, 0xb2, 0xc5, 0xff, 0xef, - 0x3e, 0xdb, 0x49, 0x67, 0x9f, 0xa0, 0x96, 0x2b, 0x63, 0xfd, 0x81, 0x85, - 0xf4, 0xf5, 0xe8, 0xf5, 0x8a, 0x93, 0xca, 0x81, 0x1d, 0xff, 0xfe, 0x73, - 0x70, 0xbd, 0xfc, 0x38, 0xa0, 0xc3, 0xce, 0xbc, 0xb1, 0x76, 0x77, 0xeb, - 0x17, 0x17, 0x4b, 0x17, 0xf6, 0x1f, 0x9f, 0x78, 0x96, 0x2f, 0x1d, 0xba, - 0xef, 0x4f, 0x8c, 0xd1, 0xcf, 0x8c, 0x5f, 0xe1, 0xc9, 0x36, 0x9a, 0x0b, - 0x15, 0x87, 0xf2, 0xc8, 0xf7, 0xff, 0xbf, 0x27, 0xfe, 0x61, 0x6f, 0x9d, - 0x79, 0x62, 0xef, 0x36, 0x8f, 0xac, 0x04, 0x17, 0xfd, 0xdf, 0xea, 0x7c, - 0xfb, 0xb8, 0xd6, 0x2f, 0xff, 0xe6, 0x86, 0x16, 0x69, 0xcd, 0x8e, 0xe3, - 0x42, 0x4e, 0xb1, 0x7f, 0xb0, 0xb6, 0xc1, 0xb7, 0xd6, 0x2a, 0x25, 0x58, - 0xdf, 0x21, 0xf4, 0x75, 0x22, 0x2d, 0xec, 0x7e, 0x12, 0xed, 0xc0, 0xc5, - 0x8b, 0xff, 0xb0, 0x2c, 0x8f, 0x31, 0xbd, 0x3c, 0x95, 0x8b, 0xfd, 0xbf, - 0xdf, 0xe4, 0xc7, 0x58, 0xbf, 0x1f, 0x06, 0xe1, 0x2c, 0x5d, 0xed, 0x96, - 0x2f, 0xba, 0xdd, 0xf4, 0xb1, 0x69, 0x81, 0xbe, 0xf0, 0xcd, 0x62, 0x23, - 0x49, 0x9e, 0xe3, 0xca, 0xc5, 0xff, 0xed, 0xdb, 0x5b, 0x70, 0xb3, 0xde, - 0xcd, 0x2c, 0x5c, 0xc7, 0x58, 0xbf, 0x7b, 0x53, 0x81, 0x2c, 0x5d, 0x26, - 0xe1, 0xe0, 0x74, 0x2f, 0x7f, 0xec, 0xed, 0xf7, 0xea, 0x1e, 0x90, 0x96, - 0x2f, 0xda, 0x62, 0x87, 0x16, 0x2f, 0xf3, 0x9c, 0x73, 0xc0, 0xf8, 0xb1, - 0x7c, 0x4f, 0xd4, 0x16, 0x2f, 0xfd, 0xcc, 0xdb, 0x83, 0xd1, 0x30, 0x4b, - 0x15, 0xa4, 0x60, 0xfc, 0xa0, 0x06, 0xbe, 0x23, 0xa9, 0x4f, 0xee, 0x10, - 0x8c, 0xf9, 0x77, 0x23, 0x04, 0xad, 0x2b, 0x3c, 0x3c, 0x30, 0x58, 0x87, - 0xd2, 0x84, 0xae, 0xf7, 0x16, 0x2f, 0xff, 0xb6, 0x98, 0xa1, 0x3e, 0x0f, - 0x34, 0xcc, 0x35, 0x8b, 0xfd, 0x03, 0x06, 0xfd, 0xa4, 0x6b, 0x15, 0x88, - 0x89, 0x65, 0x2b, 0xff, 0x3f, 0x50, 0x0f, 0x80, 0x67, 0xd9, 0x62, 0xff, - 0xe1, 0xce, 0xfd, 0x43, 0x3d, 0xb6, 0x04, 0xb1, 0x7e, 0x8a, 0x0d, 0xad, - 0x96, 0x2b, 0x73, 0xf4, 0x3a, 0x4d, 0xfb, 0x22, 0xfb, 0xf9, 0x62, 0xff, - 0x7e, 0x5b, 0xcd, 0xd0, 0x16, 0x2f, 0xff, 0x98, 0xd8, 0xa7, 0x3d, 0x27, - 0x9f, 0xc8, 0x16, 0x2a, 0x08, 0x84, 0x23, 0x4b, 0x98, 0xeb, 0x17, 0xff, - 0xc5, 0x3d, 0xcf, 0xac, 0xea, 0x1e, 0xc2, 0xdd, 0x62, 0x86, 0x7d, 0x5e, - 0x17, 0xbf, 0xff, 0x87, 0xf7, 0x8d, 0x83, 0xf3, 0xf0, 0xb3, 0xb3, 0xfc, - 0x4b, 0x15, 0x89, 0x88, 0xbc, 0x23, 0x04, 0x45, 0x52, 0xab, 0x2f, 0x21, - 0x6c, 0x44, 0x7c, 0x8e, 0xfa, 0xfb, 0x33, 0xfc, 0x58, 0xa9, 0x66, 0x18, - 0x0c, 0xbf, 0x25, 0xe1, 0xf4, 0xc7, 0xa1, 0x76, 0x97, 0x09, 0xdf, 0xa5, - 0x14, 0x28, 0x7d, 0x2b, 0xb3, 0xb9, 0x1e, 0xf0, 0x41, 0x04, 0x91, 0x7e, - 0xc3, 0x48, 0x5c, 0x48, 0x8c, 0x34, 0x37, 0x8e, 0xde, 0x58, 0xbe, 0x8c, - 0x08, 0x20, 0x96, 0x2e, 0xc0, 0x2c, 0x56, 0x1e, 0x0f, 0x8a, 0xaf, 0x48, - 0x38, 0xb1, 0x52, 0x8d, 0x83, 0x9e, 0x79, 0x78, 0x32, 0x1b, 0xed, 0x49, - 0xc0, 0xb1, 0x7f, 0xfd, 0xee, 0x3f, 0xd9, 0xfc, 0xfa, 0x6d, 0xa5, 0x62, - 0xff, 0x1d, 0xa0, 0xc6, 0xfd, 0xd6, 0x2f, 0xff, 0x71, 0xfe, 0xcf, 0xe7, - 0xd3, 0x6d, 0x2b, 0x17, 0xcf, 0x06, 0xe1, 0x88, 0xcc, 0x3a, 0x7f, 0x8d, - 0x2f, 0xc7, 0x6f, 0x0a, 0x56, 0x2f, 0xff, 0x67, 0x67, 0xf8, 0xbe, 0xfc, - 0x2c, 0x3a, 0xc5, 0x49, 0xf9, 0x91, 0x45, 0xfd, 0xb4, 0x9f, 0x60, 0xc2, - 0x58, 0xbe, 0x7d, 0x03, 0x8b, 0x17, 0xfe, 0x17, 0x7f, 0x91, 0xc5, 0x81, - 0x30, 0x16, 0x2f, 0xff, 0xcf, 0x3d, 0xa4, 0x33, 0xf3, 0xe1, 0x33, 0x74, - 0x12, 0xc5, 0xfe, 0x98, 0x4e, 0xb5, 0x81, 0x2c, 0x5a, 0x74, 0x88, 0xf0, - 0x2d, 0xdf, 0xff, 0x4f, 0x07, 0xf7, 0x0b, 0xe7, 0x17, 0x85, 0x2b, 0x17, - 0xf8, 0xb0, 0xd3, 0x1f, 0xb3, 0xac, 0x56, 0xc8, 0xb0, 0xdc, 0xa3, 0xca, - 0x55, 0x29, 0xdc, 0x3c, 0x70, 0xd7, 0xc5, 0x9d, 0x79, 0x62, 0xff, 0xfe, - 0xf7, 0x1c, 0xba, 0x87, 0xe5, 0xc7, 0x3f, 0x98, 0x2c, 0x5d, 0xb0, 0xd6, - 0x2f, 0xe9, 0x17, 0x89, 0xfb, 0x2c, 0x51, 0x87, 0x91, 0xa1, 0x9a, 0x74, - 0x63, 0x72, 0x14, 0x77, 0xfe, 0x2c, 0xe6, 0xff, 0x7d, 0xe4, 0x96, 0x2f, - 0xff, 0xf1, 0xa1, 0x36, 0x8d, 0x8c, 0xe6, 0x40, 0x84, 0xdc, 0xc2, 0x58, - 0xbf, 0xfd, 0xef, 0xbb, 0x03, 0x0b, 0xdf, 0xc8, 0x2c, 0x5f, 0xfd, 0xf7, - 0xd7, 0xdb, 0x59, 0xbb, 0x79, 0x62, 0xff, 0xfe, 0xfb, 0x9e, 0x70, 0xbd, - 0xc9, 0x3c, 0xc5, 0x3f, 0x58, 0xbf, 0xfd, 0xf7, 0xe4, 0xc2, 0x0e, 0x32, - 0x6f, 0xac, 0x5f, 0xec, 0xd4, 0xf0, 0xe5, 0xb2, 0xc5, 0xcd, 0x03, 0x13, - 0x65, 0xc4, 0x9d, 0xd1, 0x59, 0x6b, 0x89, 0x37, 0x3c, 0x4b, 0x16, 0x39, - 0xcf, 0xbb, 0xea, 0xd5, 0x2a, 0xb1, 0xf0, 0x9d, 0xcf, 0xc5, 0x28, 0xe6, - 0xfe, 0xd0, 0xb7, 0xfb, 0xf1, 0x62, 0xf8, 0x26, 0x28, 0x2c, 0x5f, 0xf7, - 0xa7, 0xa0, 0x37, 0xfe, 0xeb, 0x16, 0xfa, 0xc5, 0xef, 0xe7, 0x72, 0xc5, - 0x61, 0xf6, 0x6e, 0x75, 0x10, 0x95, 0xed, 0x36, 0xeb, 0x17, 0xe7, 0xdf, - 0xf3, 0xe5, 0x8b, 0xa7, 0x16, 0x2b, 0x63, 0x7f, 0xb9, 0x4d, 0xf4, 0xec, - 0x42, 0x58, 0xad, 0x1e, 0x37, 0xc8, 0xef, 0xb8, 0xe7, 0x95, 0x8b, 0xff, - 0x4e, 0x16, 0xd8, 0x4d, 0xd7, 0x16, 0x2f, 0xc5, 0x9e, 0x9d, 0x2c, 0x5e, - 0x08, 0x20, 0x92, 0x2f, 0xcc, 0x6f, 0xdf, 0xc9, 0x11, 0x86, 0x86, 0xa5, - 0x10, 0x8e, 0x91, 0x7c, 0x7e, 0x4f, 0x96, 0x2f, 0x76, 0x93, 0xac, 0x5e, - 0xf3, 0x84, 0xb1, 0x7b, 0x8d, 0xa5, 0x8a, 0xe8, 0xdd, 0xf8, 0x7a, 0xff, - 0xff, 0xef, 0x4c, 0x1f, 0xe2, 0x39, 0xda, 0x1a, 0x9f, 0xb7, 0x0b, 0x00, - 0xb1, 0x74, 0x8d, 0x62, 0xff, 0x6b, 0x53, 0xb0, 0xf0, 0x96, 0x29, 0xd1, - 0x79, 0xf7, 0x16, 0x17, 0xa9, 0x4e, 0x27, 0x08, 0xdd, 0x69, 0xa1, 0xbd, - 0x7f, 0xf8, 0x38, 0x18, 0x3c, 0xfe, 0xef, 0xcc, 0x1a, 0xc5, 0xec, 0xc8, - 0x96, 0x2b, 0x63, 0xeb, 0x02, 0x75, 0xf7, 0x30, 0xbc, 0xb1, 0x58, 0x78, - 0xac, 0x47, 0x7e, 0x0f, 0x8f, 0xf1, 0x2c, 0x5e, 0x1c, 0x9d, 0x62, 0xef, - 0x9a, 0xb1, 0x6e, 0x18, 0xb9, 0xe4, 0x33, 0x0c, 0x85, 0x1f, 0x44, 0x51, - 0x11, 0x6a, 0x18, 0x5f, 0x8e, 0xa8, 0xa1, 0xdf, 0xc2, 0x01, 0x15, 0x76, - 0x1d, 0xbd, 0x1d, 0x9d, 0x2c, 0x5a, 0x03, 0x5e, 0x5b, 0xc9, 0xd8, 0x17, - 0x85, 0xcd, 0x46, 0xcb, 0xd9, 0xe2, 0x9e, 0x8b, 0xbf, 0xa4, 0xf3, 0xf9, - 0x02, 0xc5, 0xe9, 0xd8, 0x4b, 0x16, 0xef, 0xf0, 0xf2, 0xfe, 0x5b, 0x7f, - 0xf3, 0xfa, 0x75, 0x85, 0xe6, 0x62, 0x58, 0xa8, 0x33, 0x80, 0xdc, 0x82, - 0x23, 0x3d, 0x47, 0xb6, 0x72, 0x8f, 0xcb, 0xb0, 0x29, 0xf1, 0x21, 0x3f, - 0x76, 0x2c, 0xbf, 0x86, 0xd0, 0x29, 0xd9, 0x62, 0xfb, 0xef, 0xd7, 0x96, - 0x2f, 0xff, 0xe7, 0x9f, 0x7c, 0x4c, 0x72, 0xcf, 0x7d, 0xf6, 0x82, 0xc5, - 0xe9, 0xc2, 0xc4, 0x56, 0xc4, 0x5d, 0xf2, 0x4b, 0xfc, 0x26, 0xdb, 0x09, - 0xcd, 0x58, 0xbe, 0xdf, 0x53, 0x05, 0x8b, 0xce, 0x7e, 0x2c, 0x5f, 0xbf, - 0x3b, 0xe1, 0x2c, 0x5a, 0x56, 0x28, 0x06, 0xe7, 0xb1, 0x45, 0xff, 0x9f, - 0x5b, 0xfd, 0xf7, 0xfb, 0x92, 0xc5, 0xff, 0xff, 0xe6, 0x20, 0x7b, 0xf8, - 0x7f, 0x73, 0x3b, 0x7d, 0xf7, 0xfb, 0x86, 0x2d, 0x96, 0x2b, 0x64, 0x5e, - 0x81, 0x02, 0xa5, 0x30, 0x4c, 0x87, 0x05, 0xff, 0x64, 0x7c, 0x9f, 0xa8, - 0x67, 0x96, 0x2a, 0x5b, 0x34, 0x6c, 0x87, 0x7b, 0xd3, 0xaf, 0x75, 0x1a, - 0x2f, 0xcf, 0xd8, 0xd0, 0x04, 0x85, 0x1a, 0xd7, 0x09, 0xef, 0xb3, 0x9e, - 0x75, 0x8b, 0xfb, 0x39, 0xcc, 0xd6, 0xcb, 0x16, 0xde, 0x07, 0xa2, 0x32, - 0x2b, 0xc5, 0x3d, 0x96, 0x2f, 0xfe, 0xd4, 0xef, 0xf2, 0x6f, 0x14, 0x84, - 0xb1, 0x77, 0x7e, 0xeb, 0x14, 0xb1, 0x6f, 0xac, 0x54, 0x0b, 0xe7, 0x0c, - 0xbf, 0xd1, 0x41, 0xc5, 0xdf, 0xc7, 0x3a, 0xc5, 0xf6, 0x9e, 0x2e, 0x2c, - 0x58, 0x06, 0x1f, 0x0e, 0x8f, 0x6b, 0x64, 0x71, 0xe8, 0xe8, 0xa1, 0x01, - 0x52, 0x9a, 0xeb, 0x46, 0x51, 0x7a, 0x26, 0xd9, 0x62, 0xf7, 0x05, 0x1e, - 0xb1, 0x58, 0x78, 0x1e, 0x1f, 0xbe, 0x16, 0xc2, 0xd9, 0x62, 0xfd, 0x02, - 0x79, 0xe9, 0x62, 0xd3, 0xa3, 0xce, 0x22, 0x6a, 0x97, 0xdc, 0xd6, 0xda, - 0x50, 0x44, 0x27, 0x29, 0x07, 0x2f, 0x0f, 0x29, 0x4d, 0x06, 0xce, 0x55, - 0xef, 0x2e, 0xe7, 0xa9, 0xc5, 0x57, 0x3e, 0x8a, 0x55, 0x3e, 0xa7, 0xaf, - 0x0f, 0x1f, 0xdf, 0xe7, 0x68, 0x1a, 0x51, 0xa0, 0x23, 0xea, 0x2a, 0x69, - 0xc7, 0x23, 0xa7, 0xf5, 0x67, 0x06, 0x28, 0x74, 0xf6, 0x29, 0x8e, 0x8d, - 0xec, 0x36, 0x8e, 0xe6, 0xfb, 0xf3, 0xc5, 0x07, 0x25, 0x8b, 0xbb, 0xc7, - 0x58, 0xbf, 0x8e, 0x23, 0x4b, 0x00, 0xb1, 0x7b, 0x4f, 0xba, 0xc5, 0xff, - 0xc6, 0xb1, 0x9c, 0x1f, 0xf1, 0xc8, 0xd5, 0x8b, 0xc3, 0x60, 0x96, 0x28, - 0xc3, 0xe5, 0x74, 0x7a, 0xc4, 0x6a, 0x6e, 0x5f, 0xf8, 0x41, 0xdf, 0xf4, - 0x5e, 0xee, 0xe4, 0xc4, 0x2d, 0x2c, 0x5f, 0xe1, 0xc9, 0x1e, 0x47, 0x2b, - 0x15, 0x27, 0xe4, 0xc8, 0x17, 0xfd, 0xf9, 0xdb, 0x53, 0x06, 0xd2, 0xc5, - 0xff, 0xef, 0xcf, 0xcb, 0x0d, 0x1e, 0x14, 0xc7, 0xac, 0x5f, 0x88, 0xd0, - 0xe4, 0x0b, 0x17, 0xfc, 0x0d, 0x48, 0xbc, 0x4f, 0xd9, 0x62, 0xff, 0x9b, - 0xaf, 0x7e, 0x77, 0xc8, 0x96, 0x2b, 0x0f, 0xdc, 0x8e, 0xef, 0xce, 0x3f, - 0xb9, 0xab, 0x17, 0x83, 0x62, 0x58, 0xa1, 0xa6, 0xa7, 0x89, 0x85, 0x0a, - 0x1f, 0x10, 0x77, 0x14, 0xdf, 0x8b, 0x61, 0xfe, 0x56, 0x2f, 0xd2, 0x4e, - 0x7c, 0x58, 0xbe, 0x0b, 0xd9, 0x1e, 0xb1, 0x7f, 0x31, 0xc3, 0x1b, 0x41, - 0x62, 0xa5, 0x14, 0xbb, 0x14, 0xf4, 0x4d, 0xf2, 0x7b, 0xff, 0xf1, 0x30, - 0x5a, 0x79, 0xf8, 0x7e, 0x7f, 0xcf, 0x65, 0x8b, 0xff, 0x3f, 0xe4, 0x7f, - 0x14, 0xf5, 0xc5, 0x8b, 0xff, 0xbe, 0x13, 0x16, 0xc5, 0x81, 0xc9, 0xd6, - 0x2f, 0x11, 0x62, 0xc5, 0x62, 0x28, 0x74, 0x80, 0xc8, 0xd7, 0x86, 0x68, - 0x16, 0x2f, 0xb5, 0xa6, 0xf2, 0xc5, 0xf3, 0x9a, 0x70, 0x96, 0x2f, 0xd1, - 0xcf, 0xac, 0x35, 0x62, 0x8e, 0x7e, 0x9f, 0x23, 0xe1, 0x2d, 0xe3, 0x3b, - 0xb7, 0x58, 0xbb, 0x3c, 0xb1, 0x5b, 0x1b, 0xaf, 0x91, 0xdf, 0xf8, 0xe3, - 0x92, 0xce, 0xc5, 0x9c, 0x58, 0xbd, 0xf2, 0x3a, 0xc5, 0xfe, 0x01, 0xad, - 0x87, 0x9d, 0xd6, 0x28, 0xc4, 0xeb, 0xe6, 0x12, 0x78, 0xd2, 0xe4, 0x4c, - 0x7e, 0x10, 0xed, 0xff, 0xd1, 0x36, 0xff, 0x98, 0x78, 0xb0, 0xeb, 0x17, - 0xf6, 0xb0, 0x89, 0xb6, 0x58, 0xbf, 0xf0, 0x72, 0x7c, 0xd1, 0xd8, 0x8d, - 0x58, 0xad, 0xd1, 0x66, 0xe8, 0xde, 0x2d, 0xbf, 0xf0, 0x5d, 0x43, 0x86, - 0x67, 0xf0, 0x96, 0x2f, 0xfa, 0x7a, 0xe6, 0x9f, 0xb6, 0x0d, 0x62, 0xff, - 0xf8, 0xb3, 0x9e, 0x36, 0x4a, 0x19, 0xf7, 0x3a, 0xc5, 0x44, 0x88, 0xbe, - 0xc7, 0x95, 0x28, 0xf3, 0xc8, 0x66, 0xdf, 0x9f, 0x52, 0x73, 0xac, 0x5b, - 0xcb, 0x17, 0xf6, 0x6c, 0x69, 0xa2, 0x25, 0x8b, 0xfc, 0x2e, 0x8b, 0x3d, - 0x80, 0x58, 0xbf, 0xfb, 0xa8, 0x70, 0xcc, 0x22, 0xc7, 0x02, 0xc5, 0xff, - 0xe2, 0x17, 0x5d, 0x78, 0x45, 0xec, 0xeb, 0xcb, 0x14, 0x74, 0x49, 0xf6, - 0x45, 0xbf, 0xf0, 0xba, 0xe4, 0x45, 0x9e, 0xc0, 0x2c, 0x5f, 0xcd, 0xa1, - 0x4f, 0x50, 0x58, 0xa3, 0x13, 0x9f, 0x91, 0x2c, 0x31, 0x78, 0x63, 0xe8, - 0x95, 0x90, 0x6f, 0xfe, 0x91, 0x9f, 0x37, 0x9e, 0x7f, 0x0e, 0xb1, 0x7e, - 0x6c, 0x1b, 0xf6, 0x58, 0xbd, 0xe9, 0x3a, 0xc5, 0xe2, 0x79, 0x58, 0xbc, - 0xf8, 0x12, 0xc5, 0x69, 0x18, 0x67, 0x45, 0xe1, 0x4f, 0x61, 0xd0, 0xc6, - 0xef, 0x3f, 0xc4, 0xb1, 0x7e, 0x26, 0xf3, 0x1d, 0x62, 0xfb, 0xcf, 0xf1, - 0x2c, 0x5f, 0xd9, 0xae, 0xa1, 0xe9, 0x58, 0xb4, 0x7f, 0x7d, 0x4f, 0x48, - 0x32, 0x3b, 0xf0, 0x59, 0xbc, 0x81, 0x62, 0xf6, 0x60, 0xd6, 0x2f, 0xb7, - 0xfe, 0x69, 0x62, 0xa5, 0x13, 0xce, 0x68, 0x02, 0xae, 0xe1, 0xca, 0x31, - 0x9c, 0xe1, 0x1b, 0x94, 0x4c, 0x3c, 0x21, 0x0a, 0x71, 0x90, 0x64, 0x71, - 0xaf, 0x0f, 0x68, 0x8f, 0xb5, 0x0f, 0x9f, 0xc7, 0xba, 0xd1, 0x87, 0x14, - 0x64, 0x7c, 0x26, 0xf4, 0x78, 0xe2, 0x8c, 0x77, 0xb2, 0x68, 0x63, 0xbd, - 0xd1, 0x8b, 0xda, 0x32, 0x37, 0x9f, 0x70, 0x7b, 0xef, 0x27, 0x36, 0xfb, - 0xd9, 0xc6, 0x58, 0xd2, 0x5d, 0xd4, 0x6d, 0x2d, 0x1b, 0xbe, 0xe5, 0xc6, - 0xf7, 0xc9, 0x5d, 0xbd, 0xf5, 0x94, 0xf3, 0x1a, 0xa5, 0x75, 0xc6, 0xb9, - 0x45, 0x93, 0x7c, 0x2e, 0x3b, 0x56, 0xe6, 0x10, 0xb4, 0xf1, 0xc3, 0xbc, - 0x43, 0x3c, 0xc7, 0x87, 0xe9, 0xb4, 0xf6, 0x9d, 0xef, 0x1e, 0xcf, 0xab, - 0x5a, 0x74, 0xf6, 0xd2, 0x72, 0x3e, 0x73, 0x02, 0x2b, 0x70, 0x0b, 0xab, - 0xcb, 0x77, 0x3d, 0xaf, 0x51, 0xfe, 0x20, 0x6f, 0x9a, 0xf9, 0x21, 0x01, - 0x6b, 0x93, 0xfb, 0xf9, 0x6d, 0xc5, 0x7e, 0xc7, 0x3c, 0xcc, 0x90, 0x57, - 0xd8, 0x8c, 0xb3, 0x15, 0x6d, 0xf5, 0xda, 0x99, 0x3a, 0x15, 0x38, 0x8a, - 0x3a, 0xd0, 0x04, 0x07, 0x7d, 0x43, 0xbd, 0xd5, 0x81, 0xc5, 0x46, 0x4f, - 0xbb, 0xad, 0xc3, 0x7d, 0xce, 0xfe, 0xf7, 0x5e, 0xc5, 0x8b, 0xf8, 0xe3, - 0x9e, 0x07, 0xc5, 0x8a, 0x93, 0xce, 0x71, 0xeb, 0xba, 0x09, 0x62, 0xf1, - 0xf3, 0xcb, 0x17, 0xf9, 0x8f, 0x3e, 0x7e, 0x3a, 0xc5, 0xfb, 0x34, 0x1f, - 0xb8, 0xb1, 0x77, 0xe5, 0x62, 0xd1, 0x9f, 0x46, 0x53, 0x10, 0x00, 0x68, - 0x87, 0x78, 0x64, 0x19, 0x55, 0xf6, 0xe5, 0x38, 0xb1, 0x7e, 0xd6, 0xec, - 0xdb, 0xaa, 0x4e, 0x32, 0xfe, 0x83, 0x14, 0x1c, 0xeb, 0x16, 0x8c, 0x94, - 0x43, 0x61, 0x13, 0x1b, 0xdf, 0xe8, 0xcc, 0xd6, 0xec, 0xdb, 0xaa, 0x4e, - 0xb2, 0xff, 0xe8, 0xc6, 0x84, 0x66, 0x6b, 0x76, 0x6d, 0xd5, 0x22, 0x89, - 0x53, 0x3f, 0x0e, 0xad, 0xb1, 0xcc, 0x21, 0xee, 0x33, 0x83, 0x63, 0x49, - 0xdc, 0xe5, 0xe9, 0x08, 0x91, 0xf1, 0xae, 0x36, 0xfb, 0xbd, 0xd0, 0x23, - 0x59, 0xe4, 0x39, 0x7c, 0x6d, 0xdc, 0x8b, 0x7f, 0xfa, 0x30, 0xed, 0x08, - 0xcc, 0xd6, 0xec, 0xdb, 0xaa, 0x45, 0xa2, 0xff, 0xdd, 0xef, 0x7b, 0xad, - 0x34, 0xc3, 0xdd, 0xcb, 0x17, 0xfd, 0x1a, 0xfe, 0xf1, 0xed, 0x3d, 0x77, - 0x2c, 0x5f, 0xff, 0x05, 0xbf, 0x79, 0xde, 0x83, 0xbf, 0xd4, 0x68, 0x61, - 0x9f, 0x8e, 0x58, 0xbf, 0xff, 0xf7, 0x77, 0xa3, 0x61, 0x9e, 0x36, 0x27, - 0xef, 0xaf, 0xbb, 0xfd, 0x46, 0x86, 0x19, 0xf8, 0xe5, 0x8a, 0xfa, 0x60, - 0x61, 0x37, 0xdf, 0xa3, 0xf4, 0xf2, 0x4b, 0x17, 0xd0, 0x8d, 0x83, 0xd9, - 0x62, 0xfc, 0x0f, 0x67, 0xdd, 0x62, 0x98, 0xff, 0x7b, 0xf2, 0xa1, 0x15, - 0xde, 0x8f, 0x3b, 0xac, 0x5f, 0xf6, 0x10, 0xff, 0x3a, 0x62, 0x58, 0xbc, - 0xf1, 0xd1, 0x2c, 0x54, 0x9f, 0xc6, 0x10, 0x7c, 0xde, 0xfd, 0xbf, 0xf0, - 0xd7, 0x58, 0xbf, 0x0c, 0x46, 0xfc, 0x4b, 0x17, 0x99, 0xb7, 0x54, 0x86, - 0xe5, 0xfb, 0xa8, 0x8a, 0x46, 0xb1, 0x43, 0x3f, 0xfd, 0xca, 0xd8, 0xaa, - 0xfc, 0x3f, 0xce, 0x69, 0x62, 0xff, 0x4e, 0xd1, 0x14, 0x83, 0x8b, 0x15, - 0xba, 0x66, 0xba, 0x85, 0x49, 0x17, 0xf0, 0xa2, 0xff, 0x69, 0xfb, 0xfd, - 0xff, 0x21, 0x2c, 0x5e, 0x14, 0x70, 0x4b, 0x17, 0xda, 0x14, 0x81, 0x62, - 0x9d, 0x10, 0x11, 0x1d, 0x86, 0x45, 0x7d, 0xf9, 0xeb, 0x8b, 0x17, 0xff, - 0xff, 0x8b, 0x39, 0xc1, 0xce, 0x6b, 0x76, 0x6d, 0xe3, 0x20, 0xfe, 0x9f, - 0x71, 0x52, 0x87, 0x95, 0xc4, 0x56, 0x76, 0x24, 0xa9, 0x4c, 0x09, 0xe1, - 0xbb, 0x7f, 0x34, 0x64, 0x7b, 0x10, 0x16, 0x2f, 0xdb, 0x07, 0xf9, 0x09, - 0x62, 0xbe, 0x88, 0x62, 0x27, 0x11, 0x9d, 0xfd, 0xc8, 0xc0, 0xb9, 0x1e, - 0x1a, 0xc5, 0xf9, 0xf6, 0xfb, 0xc7, 0x2c, 0x5f, 0xb3, 0x8d, 0xa8, 0x2c, - 0x54, 0x79, 0xea, 0x68, 0xb2, 0xfd, 0xdd, 0x19, 0xae, 0xfc, 0x25, 0x8b, - 0xf6, 0x6f, 0xc0, 0xf8, 0xb1, 0x7d, 0x3e, 0x8e, 0x35, 0x62, 0xb0, 0xf4, - 0xb4, 0x57, 0x7c, 0x32, 0xc0, 0x2c, 0x5f, 0x48, 0x47, 0x1a, 0xc5, 0xf6, - 0xff, 0x90, 0x96, 0x2f, 0x7e, 0x4d, 0x58, 0xac, 0x44, 0x4e, 0x88, 0xbb, - 0xf2, 0x40, 0xc9, 0x6f, 0x34, 0x78, 0x96, 0x2f, 0xda, 0xdd, 0x9b, 0x75, - 0x48, 0xbe, 0x5f, 0xc2, 0xdf, 0x4f, 0x24, 0xb1, 0x79, 0xa1, 0x19, 0xb2, - 0x21, 0x70, 0x83, 0xe6, 0xf6, 0xc5, 0x8b, 0xdf, 0x6f, 0x2c, 0x57, 0x0d, - 0x70, 0x62, 0x37, 0xf8, 0x3d, 0xfe, 0xe3, 0x17, 0x4b, 0x15, 0xe3, 0xda, - 0x11, 0x15, 0xf0, 0xbb, 0xfe, 0xd2, 0xb1, 0x7e, 0x79, 0x08, 0x51, 0xeb, - 0x15, 0x87, 0xac, 0x45, 0x57, 0xf1, 0x7b, 0x3d, 0x3a, 0x58, 0xbf, 0x3f, - 0x5d, 0xda, 0x09, 0x62, 0xa4, 0xf6, 0xc3, 0x2d, 0xbf, 0xda, 0xd3, 0xf8, - 0x19, 0xc5, 0x8b, 0xfd, 0x27, 0x98, 0xc0, 0x82, 0x09, 0x62, 0x9c, 0xfb, - 0xbb, 0x8d, 0x2a, 0x53, 0xa7, 0xc7, 0x87, 0x7b, 0x68, 0x48, 0x5f, 0xb9, - 0x21, 0xc5, 0xc5, 0x8b, 0xfa, 0x5e, 0x3f, 0x3a, 0x82, 0xc5, 0xfb, 0x46, - 0xfc, 0x5c, 0x58, 0xa8, 0x91, 0x0f, 0xf2, 0xb0, 0xcc, 0x6f, 0x4e, 0xa5, - 0x62, 0xb0, 0xf3, 0x9c, 0xca, 0xe6, 0xfa, 0xc5, 0xe0, 0xf9, 0x1c, 0xb1, - 0x74, 0x6f, 0xde, 0xac, 0x5f, 0x38, 0x27, 0xa5, 0x8b, 0xe0, 0x0f, 0x92, - 0xb1, 0x7c, 0xda, 0xdb, 0x65, 0x8b, 0x61, 0x1e, 0x47, 0x62, 0x3a, 0x82, - 0x3b, 0x86, 0x2f, 0xd1, 0x14, 0x79, 0x17, 0x1a, 0xef, 0xf7, 0xe3, 0x37, - 0xfb, 0xff, 0xb9, 0x62, 0xf0, 0x24, 0x25, 0x8b, 0xfd, 0x8f, 0xa8, 0x7d, - 0xc2, 0x58, 0xbd, 0xb4, 0x86, 0xb1, 0x58, 0x8a, 0xd8, 0xf3, 0xcf, 0x8f, - 0x11, 0xa5, 0xfc, 0x66, 0xff, 0x9e, 0xb8, 0xb1, 0x73, 0x86, 0xb1, 0x7b, - 0x60, 0xe0, 0xb1, 0x51, 0x1b, 0x86, 0x18, 0xa0, 0xd1, 0x17, 0xdc, 0xd5, - 0x77, 0x68, 0x2c, 0x5f, 0xc6, 0x87, 0xc7, 0x6f, 0xac, 0x5e, 0xfb, 0xe9, - 0x62, 0x98, 0xf3, 0x44, 0x61, 0x7d, 0xcf, 0xcf, 0xd6, 0x2f, 0xf4, 0xed, - 0x25, 0xb6, 0x77, 0x2c, 0x5c, 0xdf, 0x58, 0xa5, 0x8a, 0x58, 0xb7, 0x1c, - 0xd7, 0xe8, 0x5f, 0x81, 0x97, 0xc0, 0x73, 0xf1, 0x62, 0xa5, 0x1b, 0xfb, - 0x11, 0xc4, 0xcd, 0xe3, 0x3b, 0x46, 0x77, 0xad, 0x8c, 0x77, 0x7d, 0x53, - 0x66, 0x34, 0x9d, 0xa1, 0x44, 0x38, 0x55, 0xe4, 0x6c, 0x5b, 0xca, 0x4b, - 0xe8, 0xbd, 0xe1, 0x19, 0x1e, 0x4b, 0x14, 0x22, 0x35, 0x0a, 0xa3, 0xc3, - 0x1f, 0xf2, 0x9c, 0xca, 0x31, 0x4e, 0x46, 0x1d, 0xe8, 0x7d, 0x8a, 0x19, - 0x3d, 0x89, 0xe3, 0x99, 0xc3, 0x8c, 0x02, 0xfb, 0xbc, 0x8d, 0x3b, 0xc7, - 0x58, 0xbd, 0x14, 0x8d, 0x62, 0xed, 0xe3, 0x23, 0x63, 0xd0, 0x11, 0x95, - 0xff, 0xf8, 0xa7, 0x78, 0xcf, 0x75, 0xbb, 0xf0, 0xb3, 0xb3, 0x2c, 0x5f, - 0xfd, 0x0f, 0x3c, 0x51, 0x83, 0x7e, 0xd2, 0x35, 0x8b, 0x8d, 0xd9, 0x62, - 0xff, 0xd8, 0xfd, 0xbd, 0x98, 0x5e, 0xe2, 0xc5, 0xc1, 0x46, 0x39, 0xec, - 0x84, 0x35, 0x7f, 0xf4, 0x67, 0x32, 0x27, 0xd4, 0xc4, 0xe7, 0x58, 0xa1, - 0xa6, 0xf7, 0xd2, 0xe3, 0xc2, 0x90, 0xe6, 0x57, 0xb4, 0xd1, 0x2c, 0x5e, - 0xc9, 0x89, 0x62, 0xb6, 0x37, 0x7a, 0x1e, 0xbf, 0xe1, 0xea, 0x7e, 0xc3, - 0x81, 0xd6, 0x2f, 0xcf, 0xcc, 0x1c, 0x64, 0x9e, 0xe7, 0x08, 0xaf, 0xda, - 0xdd, 0x9b, 0x75, 0x49, 0x56, 0x5f, 0xb3, 0x9f, 0x9e, 0x96, 0x2d, 0x19, - 0x87, 0xc1, 0xf3, 0x7b, 0xf7, 0x7a, 0x3d, 0x36, 0xeb, 0x17, 0x30, 0xd6, - 0x2f, 0x85, 0xdc, 0x39, 0x58, 0xbf, 0x73, 0xcf, 0xd7, 0x16, 0x2d, 0x1b, - 0xac, 0x51, 0xcf, 0xfb, 0xe2, 0xfe, 0x26, 0x8e, 0x2a, 0xbf, 0xde, 0xe4, - 0x83, 0x3a, 0xf2, 0xc5, 0xcf, 0xdc, 0xb1, 0x76, 0x69, 0x62, 0xf6, 0x75, - 0xe5, 0x8b, 0xe7, 0x3b, 0x76, 0x58, 0xac, 0x45, 0x41, 0xa6, 0xac, 0x34, - 0x01, 0x7f, 0x0f, 0x5e, 0x80, 0xb8, 0xb1, 0x7f, 0xcf, 0x19, 0xd8, 0xcc, - 0x3b, 0x74, 0xb1, 0x77, 0x70, 0x4b, 0x15, 0xf3, 0xdc, 0x24, 0x0b, 0xfb, - 0xf3, 0xd8, 0x43, 0xc5, 0x8b, 0xf7, 0xe2, 0x29, 0x1a, 0xc5, 0xe6, 0xd4, - 0x16, 0x29, 0x8f, 0x18, 0x22, 0x9b, 0xf7, 0xa2, 0x29, 0x1a, 0xc5, 0xff, - 0xe0, 0x1c, 0x43, 0xcc, 0xf0, 0x0e, 0x2e, 0x96, 0x28, 0x8f, 0xdb, 0xc5, - 0x37, 0xfe, 0x7d, 0x1a, 0xdd, 0x40, 0x4d, 0xe5, 0x8b, 0xff, 0xbd, 0xf9, - 0xe1, 0x30, 0xbb, 0xf7, 0xd2, 0xc5, 0xe9, 0x86, 0x2c, 0x5f, 0xd3, 0xc8, - 0xdb, 0x18, 0xeb, 0x17, 0xf3, 0x8b, 0x72, 0x98, 0x96, 0x2f, 0xfe, 0x17, - 0x3e, 0xfe, 0x86, 0x13, 0x8d, 0x62, 0xf7, 0x03, 0x65, 0x8b, 0xef, 0xcb, - 0xe9, 0x62, 0xa0, 0xaa, 0xe8, 0x6e, 0xd9, 0x09, 0x83, 0x48, 0x7a, 0x41, - 0x89, 0x27, 0x43, 0x9f, 0x32, 0x22, 0xff, 0x22, 0x06, 0x3d, 0x7f, 0xb0, - 0xb3, 0xaf, 0x31, 0xd6, 0x2f, 0x4f, 0xf8, 0xb1, 0x46, 0x9e, 0x81, 0x19, - 0xdf, 0xff, 0xbf, 0x3d, 0x40, 0x4f, 0x1d, 0x81, 0xfe, 0x5f, 0x4b, 0x16, - 0xee, 0x58, 0xb0, 0x4b, 0x15, 0xd1, 0xa8, 0xf0, 0xad, 0xee, 0xe9, 0xf2, - 0xc5, 0xfc, 0x5e, 0x29, 0xf7, 0x16, 0x2f, 0xe9, 0x38, 0x72, 0x5b, 0xac, - 0x5d, 0x3a, 0x58, 0xac, 0x3f, 0x3d, 0x16, 0xf0, 0xbe, 0xf8, 0xe7, 0x78, - 0x96, 0x2f, 0xbf, 0x24, 0x6a, 0xc5, 0x61, 0xe3, 0xc4, 0x49, 0x73, 0x74, - 0xb1, 0x7b, 0xae, 0x44, 0xb1, 0x73, 0xf9, 0x62, 0xf0, 0x72, 0x05, 0x8b, - 0x47, 0xac, 0x57, 0x48, 0x82, 0xd0, 0xc7, 0x08, 0x3c, 0x2f, 0x1c, 0x3d, - 0x7d, 0x11, 0x0b, 0x75, 0x8b, 0xfb, 0x0f, 0x13, 0x36, 0xcb, 0x16, 0xe2, - 0xc5, 0xf3, 0xfd, 0xcd, 0x58, 0xa0, 0x1b, 0x5e, 0x09, 0x5c, 0xdd, 0x2c, - 0x51, 0x1b, 0x9f, 0x10, 0xdf, 0xff, 0x43, 0xed, 0x03, 0x5b, 0x98, 0x2e, - 0x71, 0xd6, 0x29, 0x62, 0xb0, 0xf7, 0x7b, 0x94, 0x6a, 0x53, 0x63, 0x72, - 0x56, 0x84, 0xe9, 0x3e, 0xdc, 0x37, 0x58, 0xbf, 0xe2, 0x98, 0x79, 0xce, - 0x39, 0x58, 0xbf, 0xc4, 0xf0, 0x8b, 0xf3, 0xb2, 0xc5, 0xe6, 0x6d, 0xd5, - 0x22, 0x01, 0x6d, 0x40, 0xf7, 0xf7, 0x35, 0xbe, 0xd6, 0x17, 0x96, 0x2f, - 0x87, 0x1b, 0xf7, 0xc8, 0xd1, 0x62, 0xff, 0xfd, 0xfc, 0x3f, 0x9c, 0x45, - 0x0c, 0x27, 0xdb, 0x8b, 0x14, 0x34, 0xda, 0xf2, 0x12, 0xfa, 0x29, 0xe1, - 0x17, 0x8d, 0x2f, 0x76, 0x6f, 0xac, 0x51, 0x89, 0xf8, 0x46, 0x47, 0x05, - 0x29, 0xf7, 0xbf, 0x23, 0x58, 0xbf, 0x71, 0x89, 0xba, 0x58, 0xbf, 0xef, - 0x3f, 0x1c, 0x5d, 0xf8, 0xe5, 0x62, 0xec, 0x25, 0x8b, 0x85, 0x12, 0xc5, - 0xa5, 0x62, 0xa4, 0xd5, 0x08, 0x66, 0xf6, 0x0d, 0xd6, 0x2a, 0x09, 0x9c, - 0xee, 0x75, 0xd0, 0xeb, 0x94, 0x47, 0x9f, 0x69, 0x00, 0xe4, 0x17, 0xf4, - 0xeb, 0x69, 0xd6, 0xcb, 0x17, 0xce, 0x79, 0xe2, 0xc5, 0x40, 0xf4, 0x8d, - 0x30, 0xbf, 0xda, 0xd8, 0xf2, 0x50, 0xe2, 0xc5, 0x49, 0xec, 0x61, 0x1d, - 0xf7, 0xa7, 0xb6, 0xeb, 0x17, 0xff, 0x13, 0xed, 0x98, 0x46, 0xe7, 0x5e, - 0x58, 0xbf, 0xfe, 0x3b, 0x90, 0x03, 0xf3, 0x90, 0xa1, 0x9c, 0x58, 0xbf, - 0xf9, 0xe4, 0xec, 0x30, 0xfb, 0xa4, 0xa0, 0xb1, 0x7f, 0xff, 0xcf, 0xe2, - 0xce, 0xc5, 0x9c, 0xdb, 0x02, 0x8e, 0x17, 0xdf, 0x4b, 0x15, 0x29, 0xb7, - 0x0c, 0x9b, 0x11, 0x7e, 0xa0, 0x04, 0x7b, 0xf0, 0x18, 0x04, 0x75, 0x8b, - 0x98, 0x6b, 0x17, 0xfd, 0x07, 0xf0, 0x27, 0x3a, 0x82, 0xc5, 0xff, 0x46, - 0x73, 0x35, 0xb6, 0xd8, 0x05, 0x8a, 0xd9, 0x12, 0x11, 0x0b, 0xfc, 0xea, - 0xff, 0xf7, 0x4c, 0x42, 0x06, 0xa7, 0xee, 0x47, 0x58, 0xbf, 0x9f, 0xb3, - 0xfa, 0x29, 0x58, 0xa9, 0x4d, 0x93, 0x21, 0x70, 0xe6, 0x5c, 0x4a, 0xbf, - 0x83, 0x8d, 0xb4, 0xf2, 0x75, 0x8b, 0xb9, 0x05, 0x8a, 0x63, 0xcc, 0xe1, - 0xa5, 0xff, 0xfd, 0x3b, 0xf9, 0xf5, 0xac, 0x07, 0x3c, 0xdf, 0x61, 0xac, - 0x5d, 0xde, 0xfd, 0x62, 0xfd, 0x91, 0x41, 0xa0, 0xb1, 0x7f, 0xef, 0xb1, - 0xfd, 0xf9, 0xf0, 0x8e, 0xb1, 0x6c, 0x19, 0xf4, 0xc4, 0x53, 0x7f, 0xf7, - 0xdc, 0xe3, 0xcf, 0x3f, 0xf7, 0x75, 0x8b, 0xa7, 0xcb, 0x14, 0x33, 0xdc, - 0xee, 0x45, 0xa8, 0xd9, 0xb4, 0x34, 0x98, 0x56, 0xed, 0x0e, 0x78, 0x24, - 0x8d, 0xeb, 0x25, 0x6d, 0x9b, 0x0f, 0x1d, 0xc8, 0xba, 0x84, 0x14, 0x79, - 0x14, 0x50, 0x93, 0xd3, 0xa9, 0xe1, 0x49, 0xf8, 0xec, 0x5a, 0x5b, 0x41, - 0x46, 0x27, 0xc8, 0xe3, 0xbd, 0x1d, 0x68, 0xa1, 0x19, 0xd8, 0x86, 0x39, - 0x70, 0x38, 0x43, 0x77, 0x42, 0x12, 0xff, 0xd0, 0x9c, 0x07, 0xf3, 0x0b, - 0x75, 0x8b, 0xf4, 0x91, 0x67, 0x96, 0x2f, 0xb5, 0xa7, 0xdd, 0x62, 0xf8, - 0xb3, 0x68, 0xcc, 0x44, 0x44, 0x71, 0xf0, 0x64, 0xd7, 0xfb, 0xbd, 0xef, - 0x23, 0x7e, 0x83, 0x14, 0x72, 0xc5, 0xf6, 0xff, 0x6d, 0xd6, 0x2f, 0xf0, - 0x7c, 0xcd, 0x6f, 0xf9, 0x58, 0xbf, 0xec, 0x8a, 0x0d, 0xad, 0xbe, 0x25, - 0x8b, 0xee, 0x85, 0xc9, 0x58, 0xbf, 0xc6, 0xb1, 0x60, 0x4c, 0x05, 0x8b, - 0xfc, 0xfd, 0x42, 0x7b, 0x4c, 0x7a, 0xc5, 0xf1, 0xb0, 0xfe, 0x2c, 0x5e, - 0xdb, 0xbd, 0xec, 0xb1, 0x78, 0x52, 0x1a, 0xc5, 0xff, 0x3c, 0x1f, 0xe2, - 0x39, 0xdd, 0x62, 0xa0, 0x7a, 0xfe, 0x1e, 0xb4, 0x64, 0x6e, 0xa8, 0xd6, - 0x35, 0x25, 0x49, 0x28, 0xcd, 0xb0, 0xf0, 0xd2, 0x40, 0x1a, 0x70, 0xe7, - 0xb1, 0x20, 0x6f, 0xb7, 0xfa, 0x33, 0xec, 0x7c, 0x91, 0xac, 0x54, 0x62, - 0xec, 0x0e, 0xa5, 0x13, 0x05, 0x2a, 0x0a, 0x3a, 0x14, 0x77, 0xed, 0x6e, - 0xcd, 0xba, 0xa4, 0xc8, 0x2e, 0x34, 0x6b, 0x16, 0x8c, 0xc3, 0xd0, 0xd1, - 0xbd, 0xfe, 0x21, 0x78, 0xb3, 0xb3, 0x2c, 0x5f, 0xfc, 0xde, 0x21, 0x6d, - 0xcc, 0x3c, 0xc7, 0xac, 0x5f, 0x7d, 0xb5, 0x19, 0x87, 0xf9, 0xf3, 0x4b, - 0xf9, 0xfb, 0x46, 0x72, 0x7a, 0x58, 0xbf, 0xff, 0xc2, 0x1e, 0x46, 0x07, - 0x9f, 0x21, 0x34, 0x7e, 0x1b, 0x3c, 0x58, 0xbf, 0xff, 0x6e, 0xfc, 0xc1, - 0xe1, 0x48, 0x5e, 0x35, 0xb8, 0xb1, 0x7f, 0xdf, 0x76, 0x06, 0x0b, 0x5b, - 0x2c, 0x5f, 0xbe, 0x26, 0x36, 0x33, 0xe8, 0x91, 0xf2, 0xbd, 0xa6, 0x09, - 0x9e, 0x8e, 0x1f, 0x35, 0xc4, 0xe7, 0xfd, 0x1b, 0x8d, 0x0d, 0x50, 0x23, - 0xc7, 0xb5, 0x7f, 0xa3, 0x33, 0x5b, 0xb3, 0x6e, 0xa9, 0x35, 0xcb, 0xf4, - 0x5e, 0x1c, 0x92, 0xc5, 0xfe, 0x2c, 0xdb, 0x5a, 0x70, 0x96, 0x2f, 0xbe, - 0xf3, 0x12, 0xc5, 0xfb, 0x03, 0x9d, 0xa3, 0x31, 0x10, 0x3b, 0x94, 0xf7, - 0x1a, 0xdf, 0xe8, 0xcc, 0xd6, 0xec, 0xdb, 0xaa, 0x4e, 0x42, 0xfd, 0xad, - 0xd9, 0xb7, 0x54, 0x9d, 0x85, 0xf4, 0x74, 0xfb, 0x16, 0x2f, 0xfc, 0xd0, - 0x8c, 0xcd, 0x6e, 0xcd, 0xba, 0xa4, 0x8e, 0x2d, 0x19, 0x88, 0xac, 0x73, - 0x73, 0x92, 0xdf, 0xf3, 0x3f, 0x3f, 0x90, 0xe4, 0xac, 0x5e, 0x3e, 0x7d, - 0x62, 0xff, 0xb3, 0x71, 0x49, 0x75, 0x0e, 0x2c, 0x5f, 0xda, 0xd4, 0xef, - 0xf7, 0x58, 0xb8, 0xa3, 0x3e, 0x8b, 0xf6, 0x38, 0x21, 0xde, 0x1d, 0xdf, - 0xbb, 0xe4, 0x68, 0x0c, 0xd9, 0x62, 0xff, 0xde, 0xe3, 0x9c, 0x46, 0x96, - 0x01, 0x62, 0xf8, 0xa6, 0x07, 0x58, 0xbe, 0x72, 0x03, 0xac, 0x5c, 0xe6, - 0xac, 0x54, 0x0d, 0xcf, 0x62, 0x1b, 0xff, 0x46, 0xdd, 0xe9, 0xe7, 0x50, - 0xc7, 0xec, 0xb1, 0x68, 0x2c, 0x5f, 0xb5, 0xbb, 0x36, 0xea, 0x92, 0x54, - 0xbf, 0xed, 0xfe, 0xf1, 0x7e, 0x76, 0xc5, 0x8b, 0xff, 0xdf, 0x9d, 0xa7, - 0xef, 0xd9, 0x87, 0xf7, 0x58, 0x8c, 0x37, 0x97, 0xfe, 0x73, 0x96, 0x02, - 0x22, 0x60, 0x96, 0x2e, 0x84, 0x66, 0x26, 0x23, 0x13, 0x9f, 0x97, 0xeb, - 0xa4, 0xd8, 0xda, 0x32, 0x3b, 0xff, 0x33, 0xfa, 0x02, 0x1b, 0x10, 0x16, - 0x2e, 0xf8, 0x96, 0x2f, 0xfe, 0xe3, 0x74, 0x79, 0xff, 0xb1, 0xfb, 0x2c, - 0x5f, 0xfe, 0x98, 0x7e, 0x5b, 0xc2, 0x2f, 0x38, 0xd6, 0x2d, 0x19, 0xde, - 0xab, 0xb1, 0x93, 0x51, 0xa0, 0x62, 0xdf, 0x44, 0x67, 0x8e, 0xbb, 0xe5, - 0x5c, 0x3e, 0xf0, 0xc0, 0x91, 0xef, 0xff, 0xfe, 0x6f, 0x60, 0x26, 0x11, - 0x81, 0x9f, 0x07, 0x30, 0x91, 0xb3, 0x1a, 0xb1, 0x5b, 0x3b, 0xc6, 0x88, - 0x56, 0x3d, 0xa3, 0x8f, 0x8b, 0x23, 0xb2, 0xde, 0x1b, 0x5d, 0x42, 0x81, - 0xeb, 0x9d, 0xf3, 0xc2, 0xa9, 0xa5, 0x55, 0x00, 0xa8, 0xa1, 0x8d, 0xc5, - 0x4f, 0x43, 0xc4, 0x50, 0xf6, 0xed, 0x2f, 0xe8, 0x28, 0x50, 0x5f, 0xf4, - 0x23, 0x33, 0x5b, 0xb3, 0x6e, 0xa9, 0x0e, 0x0b, 0xfe, 0x78, 0xcc, 0xd6, - 0xec, 0xdb, 0xaa, 0x4b, 0x52, 0xd1, 0x8c, 0x89, 0x5f, 0x25, 0xdf, 0xfe, - 0x8c, 0x3b, 0x42, 0x33, 0x35, 0xbb, 0x36, 0xea, 0x91, 0x6c, 0xba, 0x36, - 0xef, 0xb5, 0x8b, 0xdd, 0xee, 0xfa, 0x58, 0xbd, 0x1b, 0xc6, 0xfc, 0x58, - 0xb6, 0xeb, 0x17, 0x84, 0x4e, 0xb1, 0x78, 0x5a, 0x02, 0xc5, 0xd9, 0xd2, - 0xc5, 0xf8, 0xe7, 0x97, 0xe2, 0xc5, 0xfd, 0x3a, 0x03, 0x75, 0xc5, 0x8b, - 0x0f, 0x0f, 0x5f, 0xe5, 0x17, 0xef, 0x4f, 0xc3, 0xe2, 0xc5, 0xee, 0xc2, - 0x82, 0xc5, 0x77, 0xa9, 0x96, 0xc0, 0x4f, 0x71, 0xce, 0x87, 0x9d, 0xbc, - 0x89, 0xfb, 0x15, 0x5f, 0xf0, 0x51, 0x41, 0xb5, 0xb7, 0xc4, 0xb1, 0x70, - 0xe0, 0xb1, 0x7f, 0xfd, 0x81, 0x66, 0xde, 0xf6, 0x04, 0xde, 0x63, 0x56, - 0x2f, 0xfb, 0x50, 0x93, 0xe7, 0xde, 0x0b, 0x15, 0x88, 0xe2, 0xf9, 0xf1, - 0x0c, 0x09, 0x4e, 0xd2, 0xb1, 0x7d, 0xdc, 0x39, 0xe9, 0x62, 0xa3, 0x59, - 0xb8, 0x71, 0x1b, 0xfe, 0xce, 0x8b, 0x00, 0x06, 0x82, 0xc5, 0xc7, 0xdd, - 0x62, 0xfd, 0xb0, 0xa1, 0x9b, 0x2c, 0x5f, 0xcf, 0xd7, 0x07, 0x84, 0xb1, - 0x7f, 0x75, 0x90, 0x9d, 0x01, 0x62, 0xb0, 0xf7, 0x58, 0xba, 0xfb, 0x93, - 0xae, 0x2c, 0x5f, 0xfd, 0xb7, 0x04, 0xcf, 0x0e, 0x7d, 0xa0, 0xb1, 0x69, - 0xe8, 0xfa, 0x48, 0x8e, 0xa5, 0x38, 0xa8, 0x1c, 0xe0, 0xce, 0xa1, 0x11, - 0xf8, 0x44, 0xdf, 0xbe, 0xf2, 0x5b, 0x2c, 0x5f, 0xfe, 0x2c, 0x39, 0xda, - 0x01, 0x8f, 0xf3, 0xd2, 0xc5, 0xdf, 0x0d, 0x62, 0xff, 0xda, 0x38, 0xa1, - 0x3f, 0xde, 0x4e, 0xb1, 0x6f, 0x2c, 0x54, 0x9e, 0x98, 0xd0, 0x69, 0x91, - 0x1a, 0x26, 0xcb, 0xc0, 0x10, 0xd6, 0x2f, 0x9c, 0x5d, 0xfe, 0x2c, 0x51, - 0x1e, 0x2f, 0x87, 0xaf, 0x8a, 0x7a, 0x82, 0xc5, 0xc1, 0xec, 0xb1, 0x7f, + 0x95, 0x4a, 0x10, 0x25, 0xc8, 0x50, 0x39, 0x39, 0xcb, 0xbe, 0xe0, 0x1c, + 0x23, 0xaf, 0x00, 0xe0, 0x58, 0xbf, 0xd3, 0xf7, 0x0b, 0xb8, 0x71, 0x62, + 0xfd, 0x3e, 0xe7, 0xdd, 0x62, 0xff, 0xda, 0xc3, 0x7f, 0x87, 0x16, 0xb6, + 0x58, 0xbf, 0xee, 0xcb, 0x1c, 0xf8, 0x40, 0x58, 0xbf, 0xff, 0xff, 0x34, + 0x44, 0xc1, 0x67, 0x47, 0xe7, 0xf0, 0x11, 0xd9, 0xee, 0x31, 0xf3, 0xbf, + 0x2c, 0x5f, 0xef, 0xb1, 0x0f, 0x3b, 0xf2, 0xc5, 0xff, 0x99, 0xb6, 0xc3, + 0xb1, 0x77, 0x05, 0x8b, 0xdc, 0xc2, 0x58, 0xb4, 0x31, 0x11, 0xf1, 0x1a, + 0x78, 0xfe, 0xfe, 0xde, 0x7a, 0xb7, 0x7e, 0xa5, 0x8b, 0xff, 0xcd, 0xbc, + 0x90, 0xcb, 0x3a, 0x69, 0xf8, 0xb1, 0x7f, 0xee, 0x45, 0x01, 0x0e, 0x28, + 0x08, 0x6b, 0x14, 0x62, 0xb0, 0x9d, 0x87, 0xa0, 0x6c, 0x32, 0x8c, 0x42, + 0x34, 0xe3, 0xb8, 0xc6, 0x0e, 0x6d, 0xf3, 0x6f, 0x25, 0xdf, 0xf6, 0x78, + 0x2c, 0x21, 0xfe, 0x56, 0x2f, 0x71, 0xc2, 0x58, 0xbf, 0xfa, 0x7b, 0x80, + 0x67, 0xe7, 0xa7, 0xb0, 0x96, 0x2f, 0xd0, 0xea, 0xea, 0x16, 0xcb, 0x14, + 0xe7, 0xf6, 0xc9, 0x55, 0xda, 0x2e, 0x7f, 0x09, 0x9b, 0xff, 0x9f, 0x38, + 0x66, 0xb1, 0xff, 0x23, 0x58, 0xbf, 0xf6, 0x3f, 0x35, 0x90, 0x29, 0x3a, + 0xc5, 0xf7, 0x8a, 0x4e, 0xb1, 0x76, 0xc2, 0x58, 0xbe, 0x9e, 0xe1, 0xc5, + 0x8a, 0x93, 0x7b, 0xa1, 0x9b, 0xf4, 0x76, 0x75, 0x61, 0x2c, 0x56, 0xca, + 0x92, 0x21, 0x0f, 0x23, 0x4a, 0x77, 0x44, 0x73, 0xdd, 0x2f, 0x80, 0x82, + 0xff, 0xa4, 0xdf, 0xe1, 0x16, 0x76, 0xb1, 0x7f, 0xff, 0x77, 0xcf, 0x19, + 0xef, 0xbb, 0x02, 0x28, 0x67, 0x70, 0x58, 0xbc, 0x76, 0xf2, 0xc5, 0xff, + 0x34, 0x33, 0x43, 0x18, 0xa0, 0xb1, 0x6e, 0x2c, 0x51, 0xcf, 0x31, 0x8e, + 0xae, 0xe6, 0xeb, 0x17, 0xa0, 0xfe, 0x58, 0xbf, 0xfd, 0xe7, 0x21, 0x43, + 0x38, 0x0f, 0x7b, 0xb5, 0x8b, 0x14, 0x47, 0xd2, 0x18, 0xed, 0xf6, 0x44, + 0xd1, 0x2c, 0x5f, 0xf7, 0x1b, 0xb8, 0xe1, 0x7d, 0xf4, 0xb1, 0x7f, 0x66, + 0x80, 0x77, 0xe2, 0xc5, 0xc2, 0xe7, 0xd1, 0x21, 0xe2, 0x48, 0xe3, 0xeb, + 0xff, 0x67, 0x7e, 0xcf, 0x4e, 0xb0, 0x96, 0x2f, 0x4b, 0x9d, 0x62, 0xc6, + 0xac, 0x5b, 0x37, 0x35, 0xfa, 0x1c, 0xbf, 0xfb, 0xa7, 0x49, 0xe3, 0x7f, + 0xb8, 0x67, 0x96, 0x2b, 0x13, 0xd6, 0x04, 0x2e, 0x78, 0x7f, 0x1c, 0xda, + 0x19, 0x3d, 0xfc, 0x28, 0xa4, 0xb8, 0xeb, 0x17, 0xf8, 0x83, 0xcd, 0x14, + 0x9d, 0x62, 0xfe, 0x17, 0x8a, 0x7d, 0xc5, 0x8a, 0xc3, 0xe1, 0x01, 0x9d, + 0xa5, 0x62, 0xa0, 0xaf, 0xd8, 0xd6, 0x9f, 0x90, 0x82, 0x52, 0xc1, 0x29, + 0xf2, 0x11, 0xfd, 0x44, 0x35, 0x2c, 0x85, 0x0c, 0x95, 0xbd, 0xdb, 0x6b, + 0x9c, 0xb4, 0xe2, 0xbd, 0xe3, 0xbf, 0x16, 0x2f, 0xf0, 0xd8, 0x18, 0x37, + 0xe2, 0xc5, 0xf8, 0xd1, 0xcb, 0x12, 0xc5, 0xff, 0xb9, 0x9f, 0x78, 0x38, + 0xf0, 0xeb, 0x17, 0xe8, 0x4f, 0x46, 0xfa, 0xc5, 0x6c, 0x8e, 0x08, 0x0e, + 0xe1, 0x99, 0xa5, 0x0c, 0x7d, 0x7f, 0xf6, 0x77, 0xee, 0x39, 0x48, 0x18, + 0xeb, 0x17, 0xff, 0xf1, 0xa6, 0x7f, 0x35, 0xac, 0xea, 0xcd, 0xe3, 0xdc, + 0xba, 0x2c, 0x5f, 0xf0, 0x41, 0x93, 0x6f, 0x85, 0xba, 0xc5, 0xf7, 0x56, + 0x66, 0xcb, 0x17, 0xff, 0xde, 0xfb, 0x98, 0x6b, 0x18, 0x58, 0x13, 0x01, + 0x62, 0xfe, 0x37, 0x53, 0x06, 0x35, 0x62, 0xb1, 0x10, 0x6c, 0xa7, 0x7c, + 0x71, 0xe1, 0xd6, 0x2e, 0xeb, 0x7a, 0xc5, 0x8a, 0x58, 0xbf, 0xcf, 0xf2, + 0xcf, 0x48, 0x16, 0x2f, 0x7c, 0x61, 0x9c, 0xdf, 0x78, 0x32, 0xff, 0xba, + 0x39, 0x0c, 0x5f, 0xc3, 0xac, 0x5f, 0xcd, 0xf7, 0xe4, 0xc1, 0x62, 0x8c, + 0x4c, 0x7e, 0x34, 0x23, 0x96, 0x0c, 0x34, 0xe1, 0xdd, 0xfe, 0x0c, 0xa4, + 0xb6, 0x7d, 0x2c, 0x5f, 0xe2, 0x2c, 0x0e, 0x48, 0x0b, 0x16, 0xeb, 0xcc, + 0x3e, 0x6c, 0x34, 0xbe, 0x3b, 0xb4, 0x16, 0x2f, 0xcf, 0xb1, 0x49, 0xd6, + 0x28, 0xe7, 0x95, 0xf2, 0x2b, 0xfd, 0x9f, 0x7e, 0x38, 0xa0, 0xb1, 0x5b, + 0x2e, 0x28, 0x62, 0x23, 0xb3, 0x7c, 0xf0, 0xa1, 0x53, 0xe8, 0xd0, 0x05, + 0x0b, 0x5e, 0x8e, 0xfd, 0x44, 0x57, 0xb9, 0x3d, 0xac, 0x5f, 0xff, 0xff, + 0xd9, 0xd0, 0xb3, 0x86, 0x78, 0xd9, 0x28, 0x67, 0xdc, 0xe6, 0x0f, 0x06, + 0x36, 0x3a, 0xc5, 0x76, 0x8a, 0xa2, 0x1e, 0xbf, 0xa0, 0xfc, 0x0f, 0xb0, + 0x2c, 0x5e, 0xe1, 0xae, 0xb1, 0x7f, 0xff, 0xef, 0xbe, 0x9e, 0x4f, 0x84, + 0xf3, 0xf6, 0x7d, 0x69, 0xf6, 0x58, 0xbf, 0xf4, 0x33, 0xb8, 0x6a, 0x7c, + 0xde, 0x58, 0xbc, 0x79, 0x82, 0xc5, 0xef, 0x88, 0x25, 0x8b, 0xc7, 0x98, + 0x2c, 0x5b, 0x06, 0x6f, 0x00, 0x3f, 0x7f, 0xfe, 0x21, 0x47, 0xfd, 0xf5, + 0x3f, 0x6e, 0x16, 0x01, 0x62, 0x8c, 0x4f, 0xc6, 0x48, 0xe0, 0x63, 0xb8, + 0xf4, 0x4d, 0x2c, 0x80, 0x4b, 0x21, 0x93, 0x5f, 0xf6, 0xff, 0x71, 0xfe, + 0x7d, 0xc5, 0x8b, 0xed, 0x4f, 0x60, 0x58, 0xbf, 0xbc, 0xfa, 0x6d, 0xa5, + 0x62, 0xcd, 0x03, 0xd2, 0x72, 0x4b, 0xc3, 0x6f, 0x2c, 0x5f, 0xff, 0x16, + 0x77, 0xed, 0x4c, 0x1f, 0x81, 0xf6, 0x05, 0x8b, 0xa7, 0xb5, 0x8b, 0xff, + 0xf7, 0xbd, 0x91, 0x43, 0x36, 0x33, 0xb9, 0x29, 0xe2, 0xc5, 0xfe, 0x26, + 0xef, 0xc1, 0x4f, 0x6b, 0x17, 0xff, 0xbd, 0x91, 0x43, 0x36, 0xee, 0x4a, + 0x78, 0xb1, 0x74, 0xf6, 0x62, 0x36, 0xfe, 0xb3, 0xe3, 0x6a, 0x94, 0xe0, + 0xc0, 0xa6, 0x50, 0xf3, 0xbf, 0x4b, 0x0f, 0x4c, 0xb1, 0x7f, 0x60, 0xff, + 0x3a, 0x65, 0x8b, 0xff, 0x48, 0x5f, 0xd3, 0x43, 0xef, 0xa5, 0x8b, 0xcd, + 0xa3, 0x62, 0x44, 0xa1, 0x13, 0x86, 0x5b, 0x7f, 0xc4, 0x63, 0xc7, 0xb7, + 0x1c, 0xeb, 0x17, 0xfd, 0x25, 0x30, 0xf7, 0xf0, 0x96, 0x2b, 0x0f, 0xcf, + 0x87, 0x95, 0xa5, 0xc6, 0x53, 0xb9, 0xfe, 0x11, 0xac, 0x4c, 0x08, 0xe8, + 0x0a, 0x19, 0x1c, 0x85, 0xb5, 0xff, 0xcf, 0xa2, 0xc1, 0xbf, 0x46, 0x20, + 0x2c, 0x5e, 0x78, 0xec, 0x58, 0xbc, 0xfd, 0xf9, 0x62, 0xf7, 0xf6, 0x75, + 0x8b, 0xb0, 0x2e, 0x1b, 0xc1, 0x0f, 0x5f, 0xfb, 0x44, 0xc1, 0x36, 0xb5, + 0x9d, 0xac, 0x5f, 0xe7, 0xd1, 0xe7, 0x08, 0x6b, 0x17, 0x39, 0xab, 0x15, + 0xf3, 0xca, 0x23, 0x2b, 0xfb, 0x8e, 0x3c, 0x0b, 0x8b, 0x17, 0xf3, 0x69, + 0x86, 0xf8, 0xb1, 0x7c, 0x44, 0xf0, 0x58, 0xbb, 0xb7, 0x58, 0xb4, 0x4b, + 0x17, 0x68, 0x0b, 0x17, 0x60, 0x4b, 0x15, 0xf3, 0xc3, 0x61, 0x3f, 0x0c, + 0x54, 0xaa, 0x38, 0xd9, 0x6c, 0x65, 0xb9, 0x08, 0xae, 0xc8, 0x7e, 0x5e, + 0xc5, 0x84, 0x43, 0xe5, 0xbb, 0xfe, 0xce, 0x38, 0xe4, 0xa4, 0x0b, 0x17, + 0x3e, 0x96, 0x2f, 0xcc, 0x5e, 0xe4, 0xac, 0x5f, 0xda, 0xe0, 0x8f, 0x9a, + 0x58, 0xb3, 0xac, 0x53, 0x9e, 0x03, 0x17, 0xdf, 0x61, 0xb3, 0xc5, 0x8a, + 0xd2, 0x2a, 0x8e, 0xce, 0x44, 0x15, 0xda, 0x75, 0x5a, 0x84, 0x1f, 0xcd, + 0xc1, 0x0c, 0x1b, 0xe0, 0xb3, 0xec, 0xb1, 0x7c, 0x6e, 0x9c, 0x25, 0x8b, + 0xf6, 0xcd, 0xf9, 0x8f, 0x58, 0xb8, 0xf2, 0xb1, 0x7f, 0x14, 0xc3, 0xd9, + 0xba, 0xc5, 0x8d, 0x81, 0xe2, 0xe0, 0xbd, 0xee, 0x48, 0xd6, 0x2f, 0x47, + 0x67, 0x96, 0x2d, 0xb7, 0x66, 0xf7, 0xc3, 0xb5, 0xd6, 0x26, 0x49, 0x84, + 0xae, 0xe2, 0x26, 0x5b, 0xf8, 0xdf, 0xcf, 0x7e, 0xc5, 0x8b, 0xfc, 0x58, + 0x3f, 0xc8, 0x44, 0xb1, 0x7b, 0x35, 0x2b, 0x17, 0xef, 0xb0, 0x79, 0xb2, + 0xc5, 0xff, 0xff, 0xcc, 0xfe, 0x9e, 0x85, 0x9c, 0xfb, 0x40, 0x3c, 0xe7, + 0x03, 0x1b, 0x2c, 0x50, 0xd1, 0x3d, 0xf2, 0xaa, 0x82, 0x37, 0x7d, 0x0b, + 0xaa, 0x94, 0xda, 0x34, 0x60, 0x51, 0x88, 0x5f, 0xff, 0xed, 0x4f, 0xe7, + 0x5a, 0x9d, 0xbc, 0xcc, 0x6e, 0x77, 0xe5, 0x8a, 0x96, 0xd2, 0x7f, 0x27, + 0x26, 0x9e, 0x7e, 0x52, 0x3d, 0xe9, 0xa7, 0x09, 0x80, 0x92, 0x51, 0xa3, + 0x8a, 0x3a, 0x90, 0xcd, 0x6f, 0xbe, 0x76, 0xf2, 0xc5, 0xf1, 0x45, 0xcc, + 0x58, 0xbf, 0x43, 0x36, 0xf4, 0xac, 0x5f, 0xff, 0xd3, 0xe0, 0xf6, 0x1e, + 0x7a, 0x7a, 0x3f, 0x81, 0x30, 0x58, 0xbf, 0xbe, 0xfa, 0xd3, 0x41, 0x62, + 0xc0, 0x58, 0xb6, 0xc7, 0x3c, 0x0e, 0x17, 0x5f, 0xf0, 0xc6, 0x52, 0x10, + 0xf2, 0x3d, 0x62, 0xa4, 0xf9, 0x84, 0x53, 0x5b, 0x26, 0x4c, 0x51, 0x82, + 0xd2, 0xc5, 0x3a, 0x75, 0x11, 0x11, 0x94, 0x69, 0xf1, 0xc5, 0x57, 0xf6, + 0xd2, 0x5d, 0xe7, 0x96, 0x2f, 0xb7, 0x62, 0x35, 0x62, 0xb6, 0x3d, 0x3d, + 0xcb, 0xef, 0xff, 0xa1, 0xce, 0x4e, 0xb7, 0x13, 0x0f, 0xf2, 0xeb, 0x17, + 0xe1, 0xe6, 0x16, 0xeb, 0x17, 0xee, 0xfc, 0x4d, 0xf5, 0x8b, 0xa6, 0x25, + 0x8a, 0xd8, 0xfa, 0x60, 0x50, 0x02, 0x9a, 0x95, 0x6e, 0x59, 0x1e, 0x5b, + 0xc2, 0x65, 0x89, 0x05, 0x0b, 0xab, 0xff, 0xfb, 0xec, 0x7e, 0x34, 0x30, + 0xed, 0xcc, 0xfb, 0x69, 0x62, 0xff, 0xed, 0x10, 0xbb, 0xf1, 0x66, 0xcc, + 0x4b, 0x17, 0xb7, 0x0c, 0xeb, 0x17, 0xff, 0xf0, 0xfe, 0x2d, 0x9f, 0x35, + 0xac, 0x9e, 0xe0, 0xe7, 0x58, 0xbf, 0xcd, 0x11, 0x0b, 0xc5, 0x2b, 0x17, + 0xa4, 0xbc, 0xb1, 0x7f, 0x0c, 0x3f, 0x79, 0xc2, 0x58, 0xb8, 0xa2, 0x58, + 0xa7, 0x3e, 0x56, 0x1c, 0x11, 0x8d, 0xdf, 0x35, 0x62, 0xfd, 0xb8, 0xdc, + 0xb6, 0x58, 0xbf, 0xef, 0xcf, 0x65, 0x83, 0x68, 0x2c, 0x5e, 0x6d, 0x6c, + 0xb1, 0x70, 0x25, 0x62, 0xf9, 0xe4, 0xf8, 0xb1, 0x4b, 0x17, 0xf3, 0x1b, + 0xe9, 0xd0, 0x16, 0x28, 0x66, 0xec, 0x83, 0x2f, 0xff, 0xf4, 0xb8, 0xca, + 0x45, 0xbf, 0xb3, 0x71, 0xce, 0xe1, 0x9d, 0x62, 0xe0, 0x4a, 0xc5, 0xd2, + 0x6a, 0xc5, 0xff, 0x67, 0xb9, 0x27, 0x0f, 0x22, 0x58, 0xbf, 0xdc, 0xcf, + 0xbf, 0x05, 0xb2, 0xc5, 0xc1, 0x04, 0x91, 0x7f, 0xc5, 0x9d, 0x1a, 0x1c, + 0x71, 0xac, 0x56, 0xea, 0x82, 0x1c, 0x7b, 0x42, 0xe7, 0x5c, 0xf9, 0x00, + 0x19, 0x3a, 0xf1, 0x72, 0x18, 0xe1, 0xd8, 0x46, 0xa1, 0x8d, 0x5e, 0x08, + 0x20, 0x92, 0x2c, 0x74, 0x88, 0xc3, 0x43, 0x73, 0x69, 0x22, 0x31, 0x1c, + 0xc1, 0xc3, 0x06, 0xff, 0x98, 0x2d, 0x4b, 0xc1, 0xb8, 0xb1, 0x4c, 0x7f, + 0x04, 0x7f, 0x7f, 0xff, 0x80, 0xdf, 0x67, 0xf8, 0xbf, 0x3b, 0xbf, 0x70, + 0x73, 0xac, 0x5e, 0xfc, 0xc1, 0x62, 0x96, 0x06, 0x5e, 0xd0, 0xd7, 0x27, + 0x30, 0x67, 0x72, 0xa8, 0xa5, 0xcf, 0xf8, 0x80, 0x37, 0xfa, 0x95, 0xee, + 0x0d, 0x96, 0x86, 0x8b, 0xb9, 0x07, 0x6b, 0xbf, 0x84, 0xc3, 0x4e, 0x64, + 0xdf, 0xff, 0xa1, 0x3a, 0x00, 0xf5, 0x8e, 0x6f, 0x3f, 0x27, 0x58, 0xbf, + 0xbd, 0x39, 0xfc, 0xd9, 0x62, 0xec, 0x3a, 0xc5, 0x62, 0x27, 0x3b, 0x57, + 0xe1, 0x75, 0xff, 0xbf, 0xf6, 0x7f, 0x4e, 0x14, 0x4b, 0x17, 0x6b, 0x16, + 0x2b, 0x0f, 0x55, 0x8f, 0xaf, 0xf4, 0xed, 0xa9, 0xd4, 0xca, 0xc5, 0x75, + 0xb0, 0x98, 0x63, 0x9a, 0x45, 0xee, 0xd1, 0xd8, 0x42, 0x90, 0x1e, 0x38, + 0xf3, 0xb2, 0x9d, 0xfc, 0x6c, 0xf5, 0xf7, 0x73, 0xbf, 0xef, 0x4a, 0xfb, + 0x8a, 0x35, 0x4d, 0x46, 0xc6, 0x78, 0xef, 0xff, 0x5a, 0x39, 0xb5, 0x65, + 0x4a, 0x09, 0x5f, 0x85, 0x4b, 0xc7, 0xe5, 0x6b, 0xb3, 0xe9, 0xc1, 0x81, + 0x4f, 0x9c, 0x74, 0x8c, 0x46, 0x3a, 0x10, 0xa1, 0x90, 0x5f, 0x85, 0xe9, + 0xf7, 0x16, 0x2d, 0xe5, 0x8a, 0xe1, 0xbb, 0x0c, 0xa6, 0xfe, 0xc0, 0x01, + 0xf5, 0x05, 0x8b, 0xdf, 0x11, 0xab, 0x17, 0x6f, 0x8b, 0x17, 0xec, 0x8a, + 0x7b, 0xe2, 0xc5, 0x0d, 0x11, 0xee, 0x5c, 0xc3, 0xfc, 0x18, 0xbf, 0xf4, + 0x9e, 0x39, 0xb6, 0xc1, 0xb8, 0x4b, 0x17, 0x60, 0x4b, 0x17, 0x4f, 0x96, + 0x2f, 0xfe, 0x16, 0xc4, 0x2c, 0x7e, 0x7d, 0x8e, 0xb1, 0x7f, 0xfc, 0xe5, + 0x20, 0xc1, 0x75, 0xef, 0xf7, 0xd4, 0x16, 0x2b, 0x64, 0x63, 0xee, 0x30, + 0x42, 0xfc, 0x45, 0xbe, 0xe7, 0x1c, 0x0b, 0x17, 0xbe, 0xc0, 0x58, 0xad, + 0x8f, 0x01, 0x88, 0xef, 0xe2, 0xc3, 0x4c, 0xf3, 0xac, 0x58, 0xeb, 0x15, + 0x04, 0xfa, 0xf2, 0x30, 0xad, 0x3f, 0x7c, 0x8b, 0xc5, 0xf7, 0xf3, 0x80, + 0x3d, 0xa7, 0x65, 0x8b, 0xfd, 0x07, 0x2c, 0x38, 0xbe, 0xb1, 0x7e, 0xfb, + 0x39, 0x32, 0xc5, 0xff, 0x4b, 0xeb, 0x1f, 0xf2, 0x35, 0x8b, 0xff, 0x67, + 0xb9, 0xf7, 0x3b, 0x66, 0x96, 0x2f, 0xff, 0x7c, 0x5c, 0xd4, 0x94, 0x5f, + 0x60, 0x4a, 0xc5, 0xd8, 0x35, 0x8b, 0xe9, 0xcf, 0xb2, 0xc5, 0x4a, 0x6a, + 0x26, 0x99, 0xfc, 0x98, 0x8d, 0xc4, 0x7d, 0xd1, 0x2f, 0xa8, 0x5e, 0xf6, + 0x03, 0xcb, 0x17, 0xba, 0xd8, 0xdb, 0x65, 0x8b, 0xdd, 0x23, 0x6e, 0x8b, + 0x14, 0x61, 0xf6, 0xf5, 0xa3, 0xb8, 0x53, 0x7a, 0x5e, 0x3d, 0x62, 0xfe, + 0xe4, 0x50, 0x7d, 0x44, 0xb1, 0x58, 0x88, 0x47, 0x34, 0xf0, 0xfd, 0xff, + 0xff, 0xcc, 0xfe, 0x92, 0xdd, 0xce, 0x77, 0xe7, 0x33, 0xef, 0xc1, 0x6c, + 0xb1, 0x74, 0xf4, 0x58, 0xaf, 0xa2, 0x2f, 0xce, 0x57, 0xff, 0xd9, 0xf7, + 0xd7, 0xd8, 0xcc, 0x3e, 0x9c, 0xd5, 0x8a, 0x30, 0xfd, 0x23, 0x08, 0xef, + 0x86, 0x52, 0x1a, 0xc5, 0xf6, 0xf2, 0x77, 0x58, 0xbf, 0xff, 0xfb, 0xbe, + 0xfc, 0xe1, 0x67, 0xa7, 0xdc, 0x62, 0x07, 0xa7, 0x0b, 0xcb, 0x14, 0x62, + 0x2e, 0x70, 0x8d, 0xc8, 0xef, 0xfe, 0x26, 0xd6, 0x78, 0xa7, 0xef, 0x05, + 0x8b, 0xef, 0xe6, 0xce, 0xb1, 0x7f, 0x49, 0xde, 0x3c, 0xf8, 0xb1, 0x78, + 0xf9, 0xe5, 0x8b, 0xe0, 0x9e, 0x46, 0xb1, 0x6e, 0xb5, 0x62, 0xd1, 0xa2, + 0xc5, 0xa3, 0x45, 0x8a, 0x8d, 0x8f, 0x16, 0x35, 0x0b, 0xc6, 0xb1, 0x7a, + 0xc4, 0x54, 0x71, 0xa2, 0xff, 0xb3, 0x0e, 0x1f, 0x54, 0x94, 0x16, 0x2e, + 0x70, 0xd6, 0x2a, 0x09, 0xc7, 0x0c, 0x8f, 0x0c, 0x1e, 0x18, 0xbc, 0x22, + 0xea, 0x3c, 0xbf, 0xdb, 0xfe, 0x43, 0x79, 0xd9, 0x62, 0xf1, 0x30, 0xd6, + 0x2e, 0x63, 0x56, 0x2f, 0xe6, 0x16, 0xff, 0x9e, 0x2c, 0x56, 0x91, 0x32, + 0x73, 0x6f, 0x0e, 0x47, 0x0c, 0x5f, 0x31, 0xda, 0x25, 0x8b, 0xff, 0x9e, + 0x23, 0x1f, 0xbe, 0x30, 0x6e, 0x75, 0x8b, 0xff, 0x3c, 0xf9, 0x83, 0x27, + 0xee, 0x0b, 0x15, 0x12, 0x21, 0xf8, 0x91, 0x7d, 0xdf, 0xf3, 0xa9, 0x62, + 0xf7, 0x50, 0x02, 0x58, 0xbe, 0x90, 0xa6, 0x25, 0x8a, 0x93, 0xed, 0xec, + 0x9d, 0xc8, 0xaf, 0xef, 0xb0, 0x00, 0xff, 0x58, 0xba, 0x21, 0x2c, 0x51, + 0x87, 0x8e, 0xc5, 0xd6, 0xd2, 0xc5, 0xef, 0x77, 0xc5, 0x8a, 0xc3, 0x62, + 0xc2, 0x55, 0x29, 0xbc, 0x3c, 0x24, 0x59, 0xd4, 0x94, 0xef, 0xff, 0xfc, + 0xd1, 0x0a, 0x02, 0xdc, 0xcf, 0xbf, 0xbd, 0x3d, 0xce, 0xd3, 0xc5, 0x8b, + 0xff, 0xb9, 0xfc, 0xee, 0x19, 0xcf, 0xce, 0x96, 0x2f, 0xc4, 0xd1, 0xfb, + 0x44, 0xb1, 0x7d, 0x3a, 0x7e, 0xd6, 0x2f, 0xa2, 0xe4, 0xf9, 0x62, 0xb7, + 0x4c, 0xb1, 0xdc, 0xa2, 0x46, 0x62, 0xd1, 0x11, 0xde, 0x3e, 0x7d, 0x62, + 0xfd, 0xa6, 0x97, 0x8e, 0x58, 0xa1, 0x1e, 0x3f, 0x41, 0xdb, 0x9f, 0xb5, + 0x8b, 0xff, 0x89, 0xbc, 0xfa, 0xfc, 0x9f, 0x8c, 0xb1, 0x4b, 0x15, 0xa3, + 0xe7, 0x10, 0xc0, 0x48, 0x77, 0xfc, 0x5b, 0xb3, 0x8c, 0x5e, 0xe2, 0xc5, + 0xfc, 0xd1, 0x09, 0x83, 0x3a, 0xc5, 0xe1, 0x08, 0x35, 0x8b, 0xff, 0x9b, + 0xb3, 0x30, 0xe2, 0xe0, 0xb8, 0xcb, 0x17, 0xfe, 0xdf, 0xf2, 0x6e, 0xff, + 0x9e, 0xfa, 0x96, 0x2a, 0x08, 0xdd, 0xe1, 0x80, 0x87, 0xfa, 0x91, 0xef, + 0xfe, 0x87, 0xe7, 0x5b, 0x4f, 0xb8, 0xd0, 0x58, 0xbe, 0x26, 0x6e, 0x8b, + 0x12, 0x78, 0xd7, 0xf4, 0xef, 0xee, 0x37, 0x6b, 0x17, 0xdf, 0xc6, 0xd9, + 0x62, 0xff, 0xff, 0x89, 0x8d, 0x33, 0xce, 0x3c, 0x1f, 0xe7, 0x3c, 0xe4, + 0x12, 0xc5, 0xff, 0xb9, 0xe3, 0x5f, 0x7f, 0x73, 0x36, 0x58, 0xbc, 0x76, + 0xed, 0x62, 0xff, 0x31, 0xb1, 0xc2, 0xfb, 0xe9, 0x62, 0x8c, 0x4c, 0x02, + 0x36, 0x67, 0xc4, 0x32, 0x1e, 0xa9, 0x56, 0xcb, 0xdc, 0x62, 0xf1, 0xf0, + 0x86, 0x23, 0x3e, 0x18, 0x07, 0x19, 0x1d, 0xe7, 0xee, 0x25, 0x8b, 0xe1, + 0x75, 0xe7, 0x75, 0x8b, 0xf8, 0xf9, 0xc9, 0xdf, 0xeb, 0x17, 0xe7, 0x8b, + 0xf3, 0x12, 0xc5, 0x6c, 0x7b, 0x27, 0x2f, 0xbf, 0x70, 0x4d, 0xdf, 0x52, + 0xc5, 0xfc, 0xc4, 0x0d, 0xb0, 0x25, 0x8b, 0xfc, 0x66, 0x41, 0xcd, 0x35, + 0x96, 0x2b, 0x73, 0xe5, 0x22, 0xfa, 0x94, 0x6b, 0xb9, 0x18, 0xa1, 0x25, + 0x7d, 0x9b, 0x0b, 0x8b, 0x17, 0xfb, 0x66, 0x88, 0xc8, 0x84, 0x75, 0x8b, + 0xfe, 0x8f, 0x14, 0x7f, 0xc5, 0xa1, 0x32, 0xc5, 0x61, 0xfd, 0x08, 0xe6, + 0xb1, 0x17, 0xfe, 0x84, 0xf5, 0xf6, 0x89, 0xc0, 0xb1, 0x7f, 0xa0, 0x19, + 0xf0, 0xb2, 0x3d, 0x62, 0xf9, 0xf7, 0x6d, 0x2c, 0x5d, 0x20, 0x58, 0xb4, + 0x67, 0xcd, 0xd0, 0x64, 0x74, 0xb1, 0x6d, 0x84, 0x6d, 0xc2, 0x2b, 0xa9, + 0x46, 0x88, 0xa1, 0x51, 0x7f, 0x98, 0x39, 0x8a, 0x76, 0x8d, 0x16, 0x29, + 0xd3, 0x55, 0xfc, 0x3c, 0xfc, 0x4f, 0x60, 0x2c, 0x5d, 0x9b, 0xac, 0x5f, + 0xb3, 0x5a, 0x7d, 0x2c, 0x54, 0x79, 0xe9, 0x7c, 0x48, 0x03, 0x17, 0xed, + 0xfe, 0xc2, 0xd2, 0xc5, 0xf9, 0xf5, 0x2f, 0x1e, 0xb1, 0x7d, 0x3d, 0xe6, + 0xeb, 0x17, 0xe0, 0xde, 0x78, 0xcb, 0x15, 0xf3, 0xf6, 0x62, 0xa1, 0x12, + 0x5f, 0x6c, 0xf3, 0xda, 0xc5, 0xd3, 0x1e, 0xb1, 0x4c, 0x6f, 0x83, 0x24, + 0xbf, 0xc3, 0x61, 0x69, 0x84, 0x35, 0x8b, 0xfc, 0xdc, 0xfb, 0xec, 0xc4, + 0xb1, 0x58, 0x7c, 0xff, 0x34, 0xbe, 0x6d, 0x83, 0x82, 0xc5, 0x75, 0xad, + 0xd3, 0x4c, 0x6d, 0x0b, 0x19, 0x94, 0x4d, 0xb2, 0x84, 0x23, 0x82, 0x1c, + 0x6b, 0x59, 0x19, 0x69, 0xb0, 0xdf, 0xdc, 0xbf, 0xb8, 0xf4, 0x1e, 0x1e, + 0xf1, 0xe8, 0x11, 0x4a, 0x22, 0xd4, 0x6d, 0x67, 0x84, 0x97, 0xe1, 0x16, + 0xd2, 0xe5, 0x40, 0xdb, 0xd7, 0x8f, 0x94, 0x6b, 0x1c, 0x87, 0x97, 0xa3, + 0x7c, 0x14, 0x21, 0xfa, 0x19, 0x05, 0x0a, 0x08, 0xe6, 0xc0, 0xe1, 0x11, + 0xd4, 0x43, 0x78, 0x85, 0xc5, 0x8b, 0xfd, 0x84, 0xe0, 0xe7, 0xdd, 0x62, + 0xe2, 0x02, 0xc5, 0xa3, 0xd6, 0x2f, 0x86, 0x76, 0x82, 0xc5, 0x39, 0xb8, + 0x10, 0xad, 0xff, 0x61, 0x39, 0xbe, 0x70, 0x71, 0x62, 0xfd, 0xf6, 0x3e, + 0x0d, 0x62, 0x8c, 0x4c, 0x0b, 0xe6, 0x44, 0x9e, 0x22, 0x00, 0x8e, 0x6f, + 0x3e, 0xc2, 0x58, 0xbe, 0xe9, 0xf9, 0x82, 0xc5, 0xff, 0xba, 0x3e, 0x85, + 0xd4, 0xdb, 0x07, 0x05, 0x8b, 0x4a, 0xc5, 0xf8, 0x51, 0x14, 0x9d, 0x62, + 0xa5, 0x14, 0xd8, 0x4a, 0xc8, 0xfc, 0x11, 0xbd, 0x1b, 0xf5, 0x91, 0xba, + 0xc5, 0xf0, 0x1f, 0xbc, 0x58, 0xb9, 0x8e, 0xb1, 0x52, 0x6e, 0xa2, 0x23, + 0xbf, 0xed, 0x30, 0x5f, 0x63, 0xe0, 0xd6, 0x2e, 0x38, 0x96, 0x2f, 0xcd, + 0xef, 0x88, 0x96, 0x2f, 0xde, 0x84, 0x90, 0x16, 0x2c, 0x35, 0x8b, 0x74, + 0x58, 0xa8, 0x1a, 0x63, 0x89, 0x5d, 0x3c, 0x58, 0xbf, 0xcc, 0xe4, 0xde, + 0x6f, 0xac, 0x57, 0xcf, 0x20, 0x42, 0xf4, 0x62, 0xa1, 0x58, 0xdc, 0xea, + 0x59, 0xcd, 0x21, 0x73, 0xaf, 0x8c, 0x31, 0x41, 0x27, 0x71, 0xa6, 0xff, + 0xdb, 0x93, 0x66, 0xf3, 0xd2, 0x78, 0xb1, 0x7f, 0xee, 0x38, 0x27, 0x4f, + 0xf9, 0x1a, 0xc5, 0xf3, 0x0e, 0x2e, 0xd6, 0x2d, 0x05, 0xca, 0x2c, 0x54, + 0xa2, 0x0b, 0x63, 0xe2, 0x25, 0xbc, 0xc2, 0xeb, 0xd6, 0x2f, 0xfd, 0x9b, + 0x96, 0x72, 0x3b, 0x35, 0x2b, 0x14, 0x34, 0xf6, 0x1e, 0x10, 0x65, 0x0c, + 0x3f, 0x17, 0x86, 0x45, 0x7f, 0xfa, 0x05, 0x26, 0x1c, 0xa4, 0xdf, 0x3e, + 0xcb, 0x17, 0xd8, 0x2d, 0x6c, 0xb1, 0x7c, 0x7c, 0xf9, 0xd6, 0x2e, 0x9d, + 0x96, 0x29, 0x8d, 0xdf, 0x08, 0xeb, 0xb4, 0x65, 0xe9, 0x33, 0xcb, 0xf6, + 0x09, 0x62, 0xfe, 0x9e, 0xe0, 0xe5, 0x8b, 0x17, 0xbd, 0xa9, 0x58, 0xbd, + 0xc6, 0xf2, 0xc5, 0xff, 0xdf, 0xea, 0xc2, 0x0f, 0x37, 0x2c, 0xe2, 0xc5, + 0xf6, 0x6c, 0x1c, 0x16, 0x2f, 0x06, 0x40, 0x58, 0xae, 0xd1, 0x50, 0xe3, + 0xa4, 0x91, 0xe2, 0x5b, 0xc2, 0x90, 0x2c, 0x5c, 0xfa, 0x58, 0xbc, 0x2d, + 0xa5, 0x62, 0xff, 0xe6, 0x23, 0x3d, 0x31, 0x37, 0x41, 0xca, 0xc5, 0xf7, + 0xa4, 0xb6, 0x58, 0xb4, 0x9a, 0x89, 0xfd, 0x0b, 0x9c, 0x7b, 0xa2, 0x3d, + 0xff, 0x6d, 0x85, 0xac, 0xe9, 0x20, 0x58, 0xbf, 0xbd, 0xd3, 0x0b, 0x06, + 0xb1, 0x51, 0x27, 0x4f, 0xa3, 0xcf, 0xc2, 0xf0, 0x91, 0x78, 0x77, 0x7e, + 0xe6, 0x41, 0xf4, 0xb1, 0x7e, 0x8a, 0x0d, 0xdf, 0x16, 0x2b, 0x0f, 0x4f, + 0x85, 0x17, 0x85, 0x1f, 0xd4, 0xb1, 0x6e, 0x8b, 0x17, 0xfd, 0xaf, 0xb0, + 0x6d, 0xf7, 0x02, 0xc5, 0x49, 0xe7, 0x38, 0xa5, 0xfc, 0xe5, 0xb7, 0xc5, + 0xc5, 0x8a, 0xf9, 0xe7, 0xf8, 0x82, 0xfb, 0xf8, 0x06, 0x58, 0xba, 0x3f, + 0xa9, 0x62, 0xf7, 0x21, 0xb2, 0xc5, 0x6c, 0x9a, 0x16, 0x43, 0x04, 0x88, + 0x84, 0x44, 0x18, 0xf5, 0x18, 0xcc, 0x6e, 0x98, 0xc7, 0xe0, 0x99, 0x93, + 0x96, 0x2f, 0x18, 0xfc, 0x46, 0x3a, 0x13, 0x39, 0x6b, 0x4a, 0x6c, 0x28, + 0x51, 0xfa, 0x36, 0x3b, 0xd2, 0xfa, 0x58, 0xb8, 0xc0, 0xd6, 0x28, 0xe6, + 0xd9, 0x87, 0x2f, 0xdf, 0xe4, 0x6a, 0xed, 0xd6, 0x2e, 0x7e, 0x8b, 0x17, + 0xa2, 0x7f, 0xac, 0x5f, 0xd3, 0xa6, 0x89, 0xfe, 0xb1, 0x7e, 0xe0, 0xe4, + 0xb6, 0x63, 0xcc, 0xe0, 0xf5, 0xfd, 0xc0, 0xfd, 0xc9, 0xfa, 0xc5, 0xfe, + 0x35, 0xa2, 0x71, 0xbc, 0xac, 0x5f, 0xfe, 0xf7, 0xa4, 0xa4, 0xd3, 0x66, + 0x11, 0xe7, 0x58, 0xbf, 0xb3, 0x69, 0xff, 0xe5, 0x62, 0xfd, 0x91, 0x7f, + 0x09, 0x62, 0xfd, 0x81, 0x90, 0x80, 0xb1, 0x7e, 0x03, 0x34, 0x0e, 0xb1, + 0x52, 0x7a, 0x38, 0x53, 0x7c, 0xe1, 0x66, 0x96, 0x2f, 0xfe, 0xfe, 0x1f, + 0x3a, 0x31, 0xf3, 0x50, 0x58, 0xa8, 0x27, 0xc6, 0x69, 0x83, 0x9a, 0x69, + 0x3f, 0xe5, 0xc4, 0xf3, 0xc2, 0x0f, 0x11, 0xde, 0x3c, 0x9d, 0x62, 0xf4, + 0xed, 0x8b, 0x15, 0x8a, 0xcc, 0x7b, 0x65, 0xd4, 0xa2, 0x13, 0xb8, 0xf8, + 0x76, 0xfe, 0x3b, 0x0c, 0xf8, 0x6a, 0xc5, 0xed, 0x6a, 0x56, 0x2b, 0x63, + 0xcc, 0x39, 0x7d, 0xff, 0xf7, 0xbd, 0x27, 0xcf, 0xfe, 0x5c, 0xa4, 0xeb, + 0x17, 0xee, 0x71, 0x8a, 0x0b, 0x17, 0xff, 0x8b, 0x06, 0xd0, 0xf3, 0x91, + 0x66, 0xeb, 0x17, 0xf3, 0xeb, 0x81, 0xc8, 0x16, 0x2f, 0xfd, 0xef, 0xbf, + 0xbf, 0x85, 0x20, 0x58, 0xbf, 0x49, 0xaf, 0x17, 0x16, 0x2b, 0x0f, 0xa1, + 0xcf, 0xae, 0x6d, 0x96, 0x2d, 0xd0, 0xc4, 0xcf, 0xf0, 0xa0, 0x09, 0x05, + 0x09, 0x78, 0xe2, 0x0b, 0xf1, 0x85, 0x9c, 0x12, 0xc5, 0xff, 0xb0, 0x6f, + 0xce, 0xfc, 0x26, 0xe2, 0xc5, 0xf8, 0xc6, 0x37, 0xee, 0xb1, 0x68, 0x18, + 0x7d, 0x5c, 0x40, 0xbf, 0xee, 0x67, 0xa4, 0xef, 0xa8, 0x2c, 0x57, 0x6a, + 0xb7, 0x1e, 0x38, 0xdf, 0xad, 0x14, 0x24, 0xfc, 0x53, 0x7b, 0x7c, 0x82, + 0xc5, 0xfb, 0xe2, 0x29, 0xe8, 0xb1, 0x7e, 0xe3, 0x14, 0x25, 0x62, 0x96, + 0x2f, 0xe2, 0x6f, 0x42, 0x4d, 0x58, 0xa9, 0x44, 0x5f, 0x0a, 0xbc, 0x4e, + 0x18, 0x65, 0xfa, 0x36, 0x93, 0x64, 0x25, 0x8b, 0xe0, 0xa3, 0xc2, 0x8f, + 0x58, 0xb8, 0xfc, 0x58, 0xbe, 0xd8, 0xce, 0xad, 0xd6, 0x2f, 0xce, 0x16, + 0x77, 0xe5, 0x8b, 0xa4, 0x25, 0x8a, 0xf9, 0xe1, 0x11, 0x55, 0xfc, 0x70, + 0xe4, 0x6d, 0xe5, 0x8b, 0xff, 0xde, 0x29, 0x03, 0x78, 0x52, 0x67, 0x59, + 0x2b, 0x17, 0xf7, 0x1f, 0xdf, 0xc1, 0xac, 0x5f, 0x72, 0x75, 0xbf, 0x0f, + 0xf7, 0xc9, 0xf7, 0xff, 0xfe, 0xe6, 0x1e, 0x77, 0xc2, 0x73, 0x43, 0xd0, + 0xff, 0x8e, 0x46, 0xac, 0x5e, 0xda, 0x36, 0xeb, 0xb5, 0x8b, 0xd9, 0xdc, + 0x16, 0x2e, 0x61, 0xac, 0x56, 0x1b, 0x56, 0x1e, 0xbd, 0xc7, 0x89, 0x62, + 0x88, 0xde, 0xf0, 0x7e, 0xfc, 0xfd, 0x35, 0x87, 0x58, 0xac, 0x47, 0x39, + 0xb0, 0x9d, 0xf9, 0x05, 0xb8, 0xb1, 0x78, 0xd7, 0x1a, 0xc5, 0xfc, 0xcd, + 0xa0, 0xb3, 0xeb, 0x17, 0xf9, 0xe7, 0xd9, 0xd1, 0x86, 0xb1, 0x7f, 0xf6, + 0x07, 0x3a, 0x03, 0xfb, 0x42, 0x3a, 0xc5, 0xef, 0x7b, 0xb5, 0x8b, 0xfd, + 0x23, 0xfe, 0x6a, 0x60, 0xb1, 0x40, 0x3d, 0x22, 0x1f, 0xbf, 0xdf, 0x9d, + 0x3e, 0xef, 0xd1, 0x62, 0x8d, 0x4d, 0xbe, 0x21, 0xed, 0x17, 0x11, 0xa7, + 0x21, 0x31, 0xe2, 0x1b, 0xc4, 0xe7, 0x58, 0xb6, 0xeb, 0x15, 0x26, 0xbd, + 0x87, 0x2f, 0xa0, 0xde, 0xe2, 0xc5, 0xff, 0xb6, 0x29, 0xed, 0xc6, 0x53, + 0xb2, 0xc5, 0xfe, 0x07, 0x3c, 0x52, 0x7e, 0x2c, 0x5f, 0xe3, 0xcf, 0xdb, + 0x93, 0x1e, 0xb1, 0x52, 0x7d, 0x4c, 0x69, 0x5b, 0xa6, 0x19, 0x10, 0xfb, + 0x11, 0x94, 0x2a, 0xa8, 0x6b, 0xbd, 0xd8, 0x43, 0xbc, 0x2b, 0x3b, 0x3a, + 0xd4, 0x6a, 0xa7, 0x35, 0xfc, 0x70, 0x25, 0x1c, 0xcd, 0xef, 0x39, 0xab, + 0x17, 0xc6, 0x84, 0x33, 0xac, 0x5e, 0xd9, 0xc2, 0x58, 0xbf, 0x19, 0xf9, + 0xd4, 0x16, 0x28, 0xc6, 0xc1, 0x02, 0x37, 0x20, 0x99, 0x6c, 0x3b, 0x42, + 0x7f, 0x25, 0x7f, 0x9a, 0xad, 0xbc, 0x2a, 0x7b, 0x3d, 0x8f, 0x2f, 0x88, + 0xb0, 0xe3, 0x0d, 0x3c, 0xb5, 0xc8, 0x45, 0xf8, 0x78, 0x44, 0xc1, 0x0f, + 0xde, 0xfb, 0xf5, 0x2c, 0x5d, 0xc9, 0x58, 0xbe, 0xe3, 0x14, 0x16, 0x2a, + 0x07, 0xb2, 0x72, 0x0e, 0x0b, 0xdf, 0xdb, 0x45, 0x08, 0xdb, 0x5b, 0x2c, + 0x5d, 0x9b, 0xac, 0x5c, 0xfb, 0x2c, 0x57, 0x8d, 0x87, 0x50, 0xc5, 0xe2, + 0x68, 0x2c, 0x52, 0xc5, 0xb8, 0xb1, 0x5b, 0x97, 0xdc, 0x0c, 0xbb, 0xe2, + 0x58, 0xbd, 0x8d, 0xf5, 0x8b, 0xef, 0x03, 0x09, 0x62, 0xb6, 0x45, 0x88, + 0xce, 0xb4, 0x42, 0x71, 0x82, 0x1c, 0xbe, 0x01, 0x3c, 0xac, 0x5b, 0x65, + 0x8b, 0xfe, 0x1e, 0x1d, 0xfb, 0x81, 0x4a, 0xc5, 0xfb, 0xdf, 0x73, 0xe9, + 0x62, 0xfc, 0xf0, 0xc2, 0x02, 0xc5, 0x41, 0x13, 0x8e, 0x27, 0xa3, 0x9e, + 0x14, 0xde, 0xf8, 0xdd, 0x62, 0xdd, 0x16, 0x2f, 0xdf, 0xc7, 0x87, 0x16, + 0x2f, 0xff, 0xbf, 0x21, 0xc6, 0x78, 0x98, 0x1c, 0xe4, 0x81, 0x22, 0xf1, + 0xb3, 0xc5, 0x8b, 0xf6, 0x79, 0x85, 0xd7, 0xac, 0x5a, 0x3d, 0x62, 0xfd, + 0xad, 0xd9, 0xb7, 0x5c, 0x80, 0x85, 0xee, 0x4f, 0x6b, 0x17, 0xb9, 0xa8, + 0x2c, 0x5f, 0xff, 0xd0, 0x33, 0x3e, 0xc5, 0x9e, 0xe3, 0x7b, 0x99, 0xe5, + 0x8a, 0x73, 0xf9, 0x61, 0xeb, 0x98, 0x6b, 0x16, 0x04, 0xa6, 0x35, 0x82, + 0xbd, 0x9b, 0x9e, 0x12, 0xfe, 0x20, 0xbe, 0x2c, 0x0b, 0xa9, 0x62, 0xef, + 0x71, 0x62, 0xe7, 0x02, 0xc5, 0x40, 0xd7, 0x8c, 0x62, 0xe7, 0xd9, 0x62, + 0x9d, 0x11, 0xcc, 0xab, 0xe2, 0x1b, 0xc2, 0x2d, 0xd6, 0x2f, 0x99, 0x98, + 0x35, 0x8b, 0xee, 0xc0, 0xf0, 0x58, 0xbf, 0xfe, 0xcf, 0xbe, 0xbe, 0xdc, + 0x7f, 0x49, 0x6e, 0xb1, 0x7d, 0xb1, 0x31, 0xd6, 0x2e, 0x62, 0x58, 0xbf, + 0x49, 0xbd, 0x42, 0xd2, 0xc5, 0x49, 0xf3, 0x6c, 0x47, 0xa1, 0x6a, 0xeb, + 0x57, 0x13, 0xa0, 0x28, 0x32, 0x8c, 0x54, 0xec, 0x7b, 0x51, 0xa3, 0x9e, + 0x1c, 0x7f, 0x2e, 0x61, 0xe2, 0x22, 0xe1, 0x27, 0xa1, 0x6b, 0x7d, 0x17, + 0xf3, 0xcb, 0x17, 0xf3, 0x6b, 0x3a, 0x60, 0xd6, 0x2f, 0xdb, 0xb1, 0xbf, + 0x75, 0x8a, 0x63, 0xfd, 0x01, 0x21, 0x17, 0xdf, 0x68, 0x6e, 0x75, 0x8b, + 0xc3, 0x68, 0x2c, 0x5a, 0x0b, 0x15, 0x26, 0xbf, 0xa8, 0x76, 0xf1, 0x37, + 0x16, 0x2f, 0xbd, 0xb3, 0x12, 0xc5, 0xe3, 0xce, 0xeb, 0x17, 0x31, 0xab, + 0x15, 0x86, 0xd8, 0x87, 0xae, 0x6d, 0x2c, 0x5a, 0x0b, 0x17, 0xee, 0xf3, + 0x82, 0x3a, 0xc5, 0xfb, 0x61, 0x7b, 0xa7, 0x96, 0x2e, 0x90, 0x2c, 0x56, + 0x1e, 0x27, 0x8b, 0x6e, 0x3f, 0x16, 0x2a, 0x51, 0x73, 0x82, 0x46, 0xb7, + 0x00, 0x86, 0xe0, 0x04, 0xb1, 0x6d, 0x2c, 0x5f, 0xe8, 0x6a, 0x76, 0x6d, + 0x6e, 0xb1, 0x7f, 0xf6, 0x00, 0x5c, 0x6d, 0x9c, 0xa7, 0xb5, 0x8a, 0x31, + 0x14, 0xce, 0x32, 0xc2, 0x44, 0x6d, 0x67, 0x58, 0xbf, 0xff, 0x37, 0x60, + 0xdf, 0xef, 0x11, 0x30, 0x5e, 0xcf, 0xac, 0x5e, 0x35, 0xfc, 0xb1, 0x7b, + 0x8d, 0xe5, 0x8b, 0xf9, 0xf6, 0x9f, 0x48, 0xd6, 0x2a, 0x51, 0xa7, 0x82, + 0x26, 0xac, 0xf6, 0x3c, 0xc3, 0xb7, 0x19, 0xf5, 0x8b, 0xf7, 0x9c, 0x62, + 0x95, 0x8b, 0xe6, 0x86, 0x0d, 0x62, 0x8e, 0x79, 0x44, 0x51, 0x62, 0x58, + 0xb6, 0xeb, 0x16, 0x3c, 0x9a, 0x4f, 0x08, 0xdb, 0xd2, 0x7d, 0x78, 0x8b, + 0x7f, 0x7b, 0x22, 0x83, 0x01, 0x62, 0xfe, 0x93, 0xe1, 0xb3, 0xc5, 0x8a, + 0xd9, 0x74, 0x46, 0x04, 0x78, 0x39, 0xba, 0xcc, 0x78, 0xfe, 0xa1, 0xa0, + 0x78, 0x71, 0x7e, 0x30, 0xe0, 0x24, 0x94, 0x33, 0xb8, 0x4d, 0xe2, 0xfb, + 0xff, 0x16, 0x6a, 0x19, 0x00, 0xda, 0x3d, 0x62, 0xff, 0xd0, 0x7d, 0xe4, + 0xf3, 0x1e, 0xda, 0x58, 0xbf, 0x75, 0x7b, 0x08, 0x0b, 0x17, 0x1e, 0x56, + 0x2a, 0x51, 0x09, 0x88, 0x4e, 0x57, 0x7f, 0xd0, 0x33, 0x27, 0x7d, 0xf0, + 0x96, 0x2f, 0x7d, 0xf4, 0xb1, 0x43, 0x3d, 0x8f, 0x1d, 0xdf, 0xbe, 0x58, + 0xfe, 0x58, 0xba, 0x4e, 0xb1, 0x7b, 0x35, 0x8b, 0x15, 0xb9, 0xb3, 0x38, + 0xbd, 0xff, 0x7d, 0xc5, 0xd7, 0x87, 0xb0, 0x89, 0x62, 0xff, 0x7f, 0x3b, + 0x87, 0x9e, 0x25, 0x8a, 0x81, 0xfb, 0x81, 0x06, 0xa5, 0x31, 0x5c, 0x5a, + 0x14, 0x26, 0x6e, 0xcd, 0x96, 0x2c, 0x25, 0x8a, 0x19, 0xaa, 0xd0, 0xc5, + 0xfe, 0x9c, 0x2f, 0x72, 0x3b, 0xa2, 0xc5, 0xfd, 0x31, 0xff, 0x76, 0x82, + 0xc5, 0xe9, 0xe1, 0x87, 0x3e, 0x82, 0x38, 0xbf, 0x98, 0x2e, 0x72, 0x40, + 0xb1, 0x5f, 0x3e, 0x22, 0x33, 0xb9, 0xb4, 0xb1, 0x73, 0x04, 0xb1, 0x52, + 0x6b, 0xc4, 0x2f, 0x7f, 0xef, 0xb1, 0x7b, 0x84, 0x26, 0x0d, 0x62, 0xff, + 0xb5, 0xa7, 0xee, 0x1e, 0x6e, 0xd6, 0x2f, 0x47, 0x31, 0xab, 0x17, 0xfd, + 0x27, 0x86, 0x6d, 0x82, 0xeb, 0xd6, 0x2f, 0xfa, 0x40, 0xf0, 0xfb, 0x90, + 0x16, 0x2d, 0xb2, 0xc5, 0xcd, 0xed, 0x1e, 0x5f, 0x5e, 0x71, 0x58, 0x8d, + 0xd7, 0x21, 0x68, 0x45, 0x5c, 0xdb, 0x2c, 0x5d, 0x21, 0xac, 0x53, 0x1b, + 0x00, 0x86, 0x2f, 0xfe, 0x6e, 0x07, 0xe7, 0x21, 0x43, 0x38, 0xb1, 0x78, + 0x20, 0x82, 0x5c, 0x1f, 0x4c, 0x6e, 0x21, 0xae, 0x0f, 0xa8, 0xa3, 0x0d, + 0x9d, 0x4a, 0x2c, 0xd9, 0xe2, 0xe0, 0x32, 0xc5, 0xff, 0xd2, 0x6e, 0x78, + 0x3d, 0xbd, 0x09, 0x35, 0x62, 0xfa, 0x02, 0x93, 0x56, 0x2f, 0xfb, 0x6d, + 0x4f, 0x9f, 0x77, 0x1a, 0xc5, 0x80, 0xb1, 0x50, 0x45, 0xd6, 0x24, 0xb9, + 0x23, 0x1d, 0xde, 0x26, 0x02, 0xc5, 0x4a, 0xe9, 0x88, 0xe1, 0xd6, 0x6a, + 0x86, 0xe4, 0x0e, 0x7f, 0xa8, 0xc6, 0x7e, 0xc4, 0x08, 0x6a, 0x11, 0x0f, + 0xa1, 0xa2, 0x19, 0xd5, 0xfe, 0x1f, 0xd8, 0xe1, 0xc9, 0x2c, 0x5f, 0xdf, + 0xc8, 0x7d, 0xfa, 0x2c, 0x54, 0x79, 0xf2, 0x78, 0xd2, 0xc4, 0xb1, 0x7b, + 0x42, 0xd9, 0x62, 0xa0, 0x6c, 0x0e, 0x23, 0x7f, 0xfc, 0x4e, 0x6c, 0x67, + 0x3d, 0xf1, 0x34, 0x21, 0x2b, 0x17, 0xed, 0xde, 0x4a, 0x0b, 0x15, 0x28, + 0x9d, 0xc2, 0x10, 0x95, 0x2f, 0xdf, 0xcf, 0x72, 0x56, 0x2d, 0xd1, 0x62, + 0xfc, 0x5e, 0x16, 0x7d, 0x62, 0xc2, 0x58, 0xa5, 0x8a, 0x30, 0xbe, 0x10, + 0x95, 0x49, 0xf3, 0xec, 0x8d, 0x77, 0x53, 0xac, 0x5d, 0xd2, 0x56, 0x2f, + 0xfc, 0x33, 0x0b, 0x02, 0x60, 0x19, 0x1c, 0xb1, 0x7b, 0xd9, 0xa5, 0x8a, + 0xc3, 0xe2, 0xe2, 0x2d, 0x6c, 0xae, 0xc2, 0x11, 0x8a, 0x1b, 0x0f, 0x2d, + 0xcb, 0xe2, 0x28, 0xd3, 0xdb, 0x11, 0x70, 0x6b, 0xcf, 0x77, 0x86, 0xd0, + 0x58, 0xb9, 0xf4, 0xb1, 0x58, 0x6d, 0x3e, 0x3b, 0x7f, 0x8b, 0x38, 0x6e, + 0xb3, 0x8b, 0x17, 0xfb, 0xb9, 0xf6, 0x67, 0x70, 0x58, 0xae, 0x87, 0xd2, + 0x11, 0xa5, 0xe2, 0x73, 0xac, 0x5f, 0xc3, 0x72, 0xd8, 0x3e, 0xd6, 0x28, + 0x8f, 0x34, 0x21, 0xca, 0xc4, 0x4a, 0x33, 0x95, 0xec, 0xe8, 0x1a, 0xc5, + 0xff, 0xff, 0xdb, 0x94, 0x9f, 0x07, 0x9a, 0xd6, 0x71, 0xd8, 0xf8, 0x39, + 0x3a, 0xc5, 0xcf, 0xf5, 0x8b, 0x9f, 0xa2, 0xc5, 0xa0, 0xb1, 0x52, 0x6a, + 0xd8, 0x66, 0xff, 0xc2, 0x63, 0xce, 0xb8, 0xe5, 0x12, 0xc5, 0x0c, 0xf7, + 0x88, 0x7e, 0xf7, 0x4c, 0x1a, 0xc5, 0xfa, 0x4e, 0x53, 0x12, 0xc5, 0x61, + 0xe3, 0x9a, 0x3f, 0x7c, 0xc7, 0xc3, 0xac, 0x5f, 0xce, 0x4d, 0xe1, 0x79, + 0x62, 0xf9, 0xcf, 0x31, 0xeb, 0x17, 0x3e, 0x8c, 0x3f, 0x49, 0x22, 0xc2, + 0xda, 0x95, 0x48, 0xe3, 0x70, 0xc8, 0x50, 0x69, 0xa3, 0xf0, 0x96, 0xba, + 0x35, 0xc4, 0xb1, 0x7e, 0xce, 0x7c, 0x5c, 0x58, 0xae, 0x1e, 0x47, 0x87, + 0xef, 0xcf, 0xb9, 0x36, 0xeb, 0x17, 0xd8, 0x76, 0xed, 0x62, 0xf8, 0xec, + 0x58, 0xb1, 0x7e, 0xf1, 0x66, 0xa5, 0x62, 0xe0, 0x47, 0xac, 0x56, 0xc7, + 0x84, 0x44, 0xf5, 0x28, 0xd1, 0xc2, 0x97, 0x23, 0x66, 0x3b, 0x8a, 0x25, + 0x8b, 0x9b, 0xcb, 0x14, 0xb1, 0x4b, 0x16, 0x6f, 0x17, 0x1d, 0x41, 0x95, + 0x27, 0xdf, 0xb0, 0xc0, 0x0b, 0xef, 0x3c, 0xc1, 0x62, 0x8c, 0x74, 0x29, + 0x91, 0xb9, 0x7c, 0x6c, 0xd1, 0x30, 0xd5, 0xd9, 0x2a, 0x10, 0xbd, 0x19, + 0xe6, 0x4e, 0x35, 0x9b, 0x19, 0xc6, 0xe5, 0xaf, 0x3a, 0xc7, 0x14, 0x30, + 0x35, 0x0c, 0x63, 0xc2, 0x17, 0xf1, 0x9b, 0xb5, 0x24, 0xfc, 0x10, 0xc2, + 0x28, 0xc7, 0x78, 0x42, 0x29, 0x4c, 0xe1, 0x42, 0x72, 0x3a, 0x1e, 0x61, + 0xc2, 0xa3, 0xa8, 0xbe, 0xfc, 0x18, 0xc5, 0xee, 0x2c, 0x5e, 0x86, 0x79, + 0x62, 0xff, 0x9f, 0xed, 0xa9, 0x37, 0x22, 0x58, 0xbe, 0x7f, 0xe0, 0xd6, + 0x2f, 0xff, 0xbf, 0x2d, 0xae, 0x73, 0x3e, 0xfc, 0x16, 0xcb, 0x17, 0xd9, + 0xf6, 0x3a, 0xc5, 0xbd, 0x28, 0xcf, 0x39, 0xd7, 0x08, 0x83, 0x51, 0xbf, + 0xec, 0x17, 0x86, 0xfa, 0x6e, 0x2c, 0x5f, 0x87, 0x3f, 0x90, 0xd6, 0x2c, + 0x12, 0xc5, 0x76, 0x9d, 0x23, 0x43, 0xb3, 0x88, 0x62, 0x39, 0x0c, 0xa6, + 0xff, 0x9b, 0x85, 0x9d, 0x1f, 0xe2, 0x58, 0xbf, 0x7f, 0x37, 0x16, 0x2c, + 0x5d, 0x9c, 0x58, 0xac, 0x3c, 0x06, 0x29, 0xbf, 0xe2, 0xcf, 0x4f, 0x47, + 0x20, 0x2c, 0x5f, 0xef, 0x4f, 0x47, 0xf4, 0x25, 0x62, 0xff, 0xb7, 0x7e, + 0x60, 0xf6, 0xc0, 0x96, 0x2f, 0xff, 0xec, 0x0e, 0x74, 0x07, 0xf6, 0x84, + 0x7e, 0x7b, 0x34, 0xb1, 0x7e, 0x38, 0x73, 0xa0, 0x2c, 0x56, 0x23, 0xe3, + 0xe6, 0xa4, 0x78, 0x1a, 0xed, 0xf3, 0x16, 0x47, 0xac, 0x5a, 0x3d, 0x62, + 0x86, 0x6e, 0x7c, 0x49, 0x58, 0x9e, 0x38, 0x23, 0x31, 0xe3, 0xad, 0x2c, + 0x5f, 0x9f, 0xdc, 0x14, 0x7a, 0xc5, 0xb4, 0x73, 0x71, 0xf0, 0xcb, 0xe7, + 0xf4, 0xc1, 0x62, 0xff, 0x09, 0x9e, 0x12, 0x5b, 0xac, 0x56, 0x1f, 0xe7, + 0xc9, 0xf8, 0x45, 0x7d, 0xee, 0xf9, 0x8b, 0x17, 0x37, 0x45, 0x8b, 0x74, + 0x58, 0xa7, 0x35, 0xac, 0x33, 0x7b, 0xf8, 0x05, 0x8b, 0xff, 0x3e, 0xbe, + 0xdc, 0x37, 0x5e, 0xdd, 0x62, 0xf8, 0x01, 0xcf, 0x16, 0x2f, 0xcf, 0xe9, + 0xf7, 0x12, 0x2f, 0xb7, 0x9f, 0x71, 0x22, 0xe0, 0x82, 0x48, 0xa8, 0x1f, + 0x36, 0x14, 0x04, 0x49, 0x49, 0x11, 0x86, 0xbe, 0xa0, 0x99, 0xbf, 0xc7, + 0x49, 0x08, 0x28, 0x5c, 0xde, 0x62, 0x02, 0xc5, 0xa3, 0x52, 0xc5, 0xe6, + 0xfb, 0x2c, 0x5f, 0x45, 0xf9, 0x25, 0x8b, 0xef, 0x07, 0x20, 0x58, 0xaf, + 0x1e, 0x38, 0x44, 0x77, 0xec, 0xe7, 0xb2, 0x3d, 0x62, 0xa5, 0x56, 0x78, + 0xd4, 0x72, 0x35, 0x63, 0x50, 0xce, 0x39, 0xf1, 0x86, 0x63, 0xf1, 0x1d, + 0xe2, 0x60, 0x96, 0x2f, 0xee, 0x0f, 0xf2, 0x5b, 0x2c, 0x5f, 0xbe, 0xf3, + 0xa0, 0x2c, 0x54, 0x47, 0xe8, 0x01, 0xdf, 0x17, 0xdd, 0xf7, 0x58, 0xbc, + 0xfd, 0x31, 0x62, 0xa2, 0x36, 0xba, 0x17, 0xbe, 0x9e, 0x9f, 0x95, 0x8b, + 0xfb, 0xad, 0xf7, 0x7b, 0xbf, 0xd6, 0x28, 0x8f, 0x6b, 0x84, 0x97, 0xfb, + 0x53, 0xf9, 0x72, 0xd9, 0x62, 0xfe, 0x0f, 0x35, 0xdf, 0x25, 0x62, 0xff, + 0xe7, 0xf8, 0xa3, 0x6e, 0x7b, 0xee, 0xc0, 0x58, 0xa3, 0x9f, 0xd7, 0x8c, + 0x2e, 0xce, 0x2c, 0x56, 0x1b, 0x9f, 0x91, 0x5f, 0xf6, 0x17, 0xbe, 0xf2, + 0x5b, 0x2c, 0x5f, 0xff, 0xef, 0xe1, 0xc3, 0x90, 0x6a, 0x78, 0x59, 0xd1, + 0xfe, 0x25, 0x8b, 0xde, 0x9d, 0xf1, 0x13, 0x7e, 0x38, 0xbf, 0xfc, 0x13, + 0x73, 0xcf, 0xf7, 0xc3, 0x5f, 0x4b, 0x14, 0xb1, 0x52, 0xa8, 0xb0, 0x70, + 0xe6, 0xc8, 0x5d, 0xfc, 0xd3, 0x89, 0x75, 0xb3, 0x33, 0x54, 0x71, 0xe7, + 0xee, 0xa3, 0x13, 0xd6, 0xa3, 0xe7, 0x3c, 0x3a, 0x81, 0x2b, 0xf4, 0xa1, + 0xd7, 0xc6, 0x5f, 0x3e, 0x05, 0x29, 0x36, 0xfd, 0x3f, 0x98, 0xe6, 0x58, + 0xbd, 0xf9, 0x1a, 0xc5, 0x6c, 0x78, 0xe7, 0x2a, 0xbf, 0x9f, 0x36, 0x3b, + 0xf9, 0x62, 0xff, 0x42, 0x63, 0xdc, 0xb2, 0x25, 0x8b, 0xe1, 0xfd, 0xa3, + 0xd6, 0x2f, 0xa1, 0xfc, 0xd9, 0x62, 0xa4, 0xf2, 0x98, 0x9a, 0xc1, 0x2c, + 0x5f, 0x45, 0x1e, 0x40, 0x58, 0xb1, 0x00, 0xdd, 0x78, 0x4e, 0xec, 0xf2, + 0xc5, 0x4a, 0x6d, 0x1a, 0x23, 0x62, 0xe2, 0x84, 0x00, 0x96, 0xa3, 0x89, + 0xaf, 0xe2, 0x98, 0x6b, 0x52, 0xb1, 0x7f, 0xc3, 0x9f, 0xcc, 0x20, 0x14, + 0xac, 0x58, 0x0b, 0x16, 0x97, 0x3c, 0xcd, 0x1d, 0x5f, 0x14, 0xf6, 0x0c, + 0x44, 0xff, 0xde, 0x6f, 0xe8, 0x37, 0x9c, 0x5c, 0x58, 0xbf, 0xf7, 0xb9, + 0x9b, 0xfd, 0x8b, 0xdc, 0x58, 0xbc, 0xe4, 0x05, 0x83, 0x0f, 0x02, 0x8e, + 0x8d, 0x52, 0x39, 0xe8, 0xdd, 0x77, 0x3c, 0xb1, 0x7f, 0xe3, 0xbe, 0x1f, + 0xdc, 0x11, 0x79, 0x62, 0xff, 0xfe, 0xd0, 0xb9, 0xf6, 0x86, 0xff, 0x7e, + 0xe1, 0x2d, 0x05, 0x8a, 0x35, 0x13, 0xbe, 0x3f, 0xbf, 0xf7, 0x9f, 0x9b, + 0x60, 0x59, 0xdf, 0x96, 0x2f, 0xff, 0xf7, 0xdc, 0x85, 0xe8, 0x49, 0xa2, + 0xfc, 0x9f, 0x3b, 0xf2, 0xc5, 0xff, 0xd3, 0xbf, 0xdf, 0xd9, 0x11, 0x49, + 0xf1, 0x14, 0xbb, 0xa1, 0x5f, 0xff, 0x31, 0xfd, 0xf6, 0x3e, 0x42, 0x41, + 0xcc, 0x58, 0xad, 0xd1, 0x56, 0x4b, 0x95, 0x29, 0xcb, 0xe4, 0x6e, 0x97, + 0xfd, 0x9a, 0x03, 0xfb, 0x42, 0x3a, 0xc5, 0x4a, 0xad, 0xfc, 0x31, 0xfc, + 0xa4, 0xc8, 0xe2, 0x8b, 0x6c, 0xb1, 0x7f, 0x72, 0x42, 0xf6, 0x6e, 0xb1, + 0x7f, 0xd9, 0xd1, 0xb4, 0xd0, 0x68, 0x2c, 0x58, 0x7b, 0x9f, 0xef, 0x62, + 0x7c, 0x30, 0xbc, 0x45, 0xc5, 0x8b, 0xff, 0xdf, 0x78, 0x89, 0x82, 0xf6, + 0x7c, 0x33, 0xac, 0x5f, 0xe8, 0x4e, 0x17, 0x84, 0xcb, 0x16, 0xdb, 0x73, + 0xff, 0xed, 0x36, 0xa5, 0x1f, 0xac, 0x6e, 0x28, 0x4d, 0xdf, 0xd3, 0xf9, + 0xfc, 0xec, 0xb1, 0x7b, 0xd2, 0x35, 0x8b, 0xff, 0x3b, 0x77, 0x0f, 0x70, + 0x9c, 0xd5, 0x8b, 0xfb, 0x23, 0x85, 0xf7, 0xd2, 0xc5, 0x40, 0xfc, 0x43, + 0x40, 0xa9, 0x45, 0x8e, 0x42, 0x3a, 0xb6, 0x4c, 0x16, 0x10, 0xdf, 0xb7, + 0x16, 0x29, 0x62, 0x98, 0xbe, 0x08, 0x4a, 0xa4, 0xfa, 0x19, 0x22, 0xff, + 0x61, 0xd8, 0xbd, 0xc9, 0x58, 0xb8, 0x72, 0xb1, 0x70, 0x1d, 0x62, 0xb4, + 0x7c, 0x07, 0x32, 0x21, 0x7b, 0xff, 0xc2, 0x00, 0x7b, 0x0f, 0x0b, 0x02, + 0x60, 0x2c, 0x50, 0xd5, 0x4d, 0xfe, 0x3a, 0x06, 0x84, 0x01, 0x17, 0x5f, + 0x4f, 0x47, 0x1a, 0xc5, 0xfa, 0x1f, 0x14, 0xe9, 0x62, 0xfb, 0xee, 0x17, + 0x16, 0x2f, 0xf4, 0xf4, 0x7e, 0x84, 0x2e, 0x2c, 0x5f, 0xcf, 0xc6, 0xee, + 0x18, 0xb1, 0x73, 0x1f, 0x74, 0x44, 0xe8, 0x92, 0x38, 0xde, 0xf8, 0xbc, + 0xff, 0x58, 0xbc, 0xfa, 0x35, 0x62, 0xff, 0x3c, 0xf8, 0xa4, 0xfc, 0x58, + 0xae, 0xd3, 0x63, 0xfc, 0x2c, 0x98, 0xfc, 0x04, 0x44, 0x3d, 0x7f, 0x41, + 0xcb, 0xd2, 0x05, 0x8a, 0x58, 0xb8, 0x53, 0x11, 0xb9, 0x01, 0x6d, 0xfb, + 0x04, 0x79, 0xe2, 0xc5, 0x2c, 0x5d, 0x91, 0x68, 0xda, 0x70, 0xa2, 0xff, + 0x9c, 0x5d, 0x7f, 0xe4, 0x32, 0xd9, 0x62, 0xfd, 0xdf, 0x8b, 0x36, 0x58, + 0xbf, 0x9f, 0xdc, 0x72, 0x89, 0x62, 0xa4, 0xf6, 0x3e, 0x55, 0x7f, 0xc3, + 0xfc, 0x8d, 0xfa, 0x48, 0xd6, 0x2d, 0x3b, 0x1e, 0xe4, 0x44, 0x37, 0xfd, + 0x91, 0x36, 0x7e, 0x72, 0x25, 0x8b, 0xff, 0x3f, 0x7c, 0x1f, 0xe4, 0xed, + 0xe5, 0x8b, 0xff, 0xe6, 0x3f, 0xfe, 0x1e, 0x8b, 0x3d, 0xa9, 0x09, 0x62, + 0xf7, 0x53, 0x84, 0xb1, 0x43, 0x55, 0x2f, 0x8c, 0x3b, 0x96, 0xbc, 0x3d, + 0x34, 0x52, 0x47, 0x3c, 0x40, 0xea, 0x52, 0xbe, 0xef, 0xf9, 0xb2, 0xc5, + 0xff, 0xc1, 0xf1, 0xf9, 0x13, 0x8f, 0x08, 0x0b, 0x17, 0xa0, 0x4c, 0xb1, + 0x7c, 0xde, 0xcd, 0x96, 0x2e, 0x9e, 0xd6, 0x2e, 0x29, 0x58, 0xb1, 0xe4, + 0xfb, 0x7e, 0x38, 0x44, 0x7e, 0x18, 0xbf, 0x3e, 0xb9, 0x9a, 0x58, 0xbd, + 0x21, 0x92, 0xc5, 0xd9, 0x16, 0x1e, 0x2f, 0xca, 0x2f, 0xed, 0x4b, 0xc1, + 0xb8, 0xb1, 0x7e, 0xf0, 0x03, 0x28, 0x2c, 0x5f, 0xf8, 0xa7, 0xec, 0xfe, + 0x9f, 0x71, 0x62, 0xe6, 0x8f, 0x31, 0x12, 0x8c, 0x5a, 0x19, 0x55, 0x4a, + 0x60, 0x02, 0x86, 0x0d, 0xfc, 0x42, 0x63, 0xcc, 0x7a, 0xc5, 0x4a, 0xab, + 0x51, 0x92, 0xb4, 0x2c, 0xca, 0x38, 0x5f, 0x14, 0x5f, 0xd0, 0xe3, 0x97, + 0x70, 0x58, 0xbf, 0xf7, 0xdc, 0x2f, 0xcc, 0x3e, 0x21, 0xac, 0x5b, 0x16, + 0x29, 0x62, 0xcf, 0xa2, 0xf7, 0xa0, 0x8d, 0xf6, 0x00, 0xfc, 0x58, 0xa9, + 0x46, 0xb9, 0xa5, 0xfb, 0xaf, 0x78, 0x9e, 0xe7, 0xe8, 0xb1, 0x7f, 0xec, + 0x8f, 0xd8, 0x5a, 0x86, 0x77, 0xe5, 0x8a, 0x63, 0xde, 0x21, 0x9b, 0xf3, + 0xf3, 0x33, 0x4b, 0x17, 0xf7, 0x00, 0xdd, 0x30, 0x6b, 0x17, 0xff, 0xff, + 0xfd, 0x0f, 0xe1, 0x61, 0xb8, 0x40, 0xcc, 0x0d, 0xb4, 0x03, 0xe3, 0x41, + 0xf8, 0x0c, 0x02, 0xc5, 0xc2, 0xe1, 0x88, 0xc2, 0xc3, 0x0a, 0xd2, 0x63, + 0x05, 0x0e, 0x9b, 0xff, 0xce, 0xdd, 0x99, 0xc9, 0xd3, 0x41, 0xfe, 0xb1, + 0x46, 0x32, 0xd1, 0xa2, 0x8e, 0x1f, 0x52, 0xc7, 0xff, 0x2c, 0xb8, 0xa3, + 0x2b, 0xe4, 0x27, 0x3a, 0x46, 0x71, 0xd4, 0x51, 0x71, 0x6c, 0xb1, 0x7b, + 0xf9, 0xb2, 0xc5, 0xa3, 0x96, 0x2f, 0xfc, 0xc1, 0xef, 0x3a, 0x7f, 0x7a, + 0x56, 0x2b, 0x0f, 0xcd, 0x87, 0x88, 0x56, 0xf4, 0x1b, 0x4b, 0x17, 0x4f, + 0x96, 0x2f, 0xc7, 0x68, 0x60, 0xd6, 0x29, 0xcd, 0xf8, 0x05, 0xef, 0x0b, + 0xf8, 0xb1, 0x7c, 0xdd, 0xf2, 0x0b, 0x16, 0x12, 0xc5, 0xe7, 0x68, 0x2c, + 0x5f, 0x7e, 0x4b, 0xcb, 0x14, 0x61, 0xbe, 0xe0, 0xe5, 0xb3, 0x87, 0xe5, + 0xd1, 0x42, 0xfb, 0x3d, 0x83, 0x48, 0xbf, 0xe6, 0x23, 0x70, 0x9b, 0xdc, + 0x58, 0xbe, 0x63, 0x40, 0x12, 0xc5, 0xfb, 0x0d, 0xf6, 0x6e, 0xb1, 0x50, + 0x45, 0x4f, 0xc8, 0x88, 0xe3, 0x84, 0xb7, 0xd2, 0x45, 0x2b, 0x15, 0x12, + 0xa5, 0xdd, 0x2e, 0x1c, 0x80, 0x03, 0xa5, 0x09, 0x6f, 0x43, 0x48, 0x33, + 0xcb, 0xf9, 0x82, 0x6f, 0x31, 0xab, 0x17, 0xb8, 0x7d, 0x2c, 0x5c, 0xfb, + 0xac, 0x50, 0x0d, 0xb7, 0x07, 0xab, 0x17, 0x02, 0xcd, 0x84, 0x5b, 0xca, + 0x89, 0xd3, 0x8f, 0x99, 0x6f, 0x38, 0x5c, 0x58, 0xbd, 0xc7, 0xe8, 0xb1, + 0x7f, 0xfa, 0x4e, 0x53, 0xd8, 0x18, 0x85, 0x9f, 0x58, 0xbf, 0xfa, 0x01, + 0xf0, 0x18, 0x2d, 0xe4, 0x80, 0xb1, 0x7f, 0x6c, 0xc4, 0x2c, 0xfa, 0xc5, + 0xff, 0xa3, 0x6c, 0x18, 0xbc, 0xfe, 0x9d, 0x2c, 0x5f, 0x3e, 0x8c, 0xc5, + 0x8b, 0xfc, 0xda, 0x9d, 0x9b, 0x5b, 0xac, 0x5f, 0xd2, 0x2e, 0xbf, 0x07, + 0x2b, 0x14, 0x6a, 0x22, 0xbe, 0x47, 0xe3, 0x5b, 0xff, 0xec, 0xd9, 0xcd, + 0xff, 0xe4, 0xe3, 0x7c, 0x09, 0x62, 0xfb, 0xb8, 0x67, 0xba, 0xd4, 0xd4, + 0x72, 0x19, 0xc4, 0x63, 0x7f, 0x79, 0xf5, 0x22, 0xeb, 0xd6, 0x2a, 0x0a, + 0xa4, 0xfb, 0x49, 0x74, 0x7f, 0xc6, 0xfe, 0x1a, 0x8d, 0xb5, 0x2a, 0xc1, + 0x5a, 0x55, 0x95, 0xef, 0xe6, 0xcb, 0x17, 0xa1, 0x09, 0x58, 0xbd, 0x9f, + 0xc3, 0x0d, 0xd8, 0x87, 0xab, 0x75, 0x78, 0x0d, 0x2c, 0x8c, 0x9a, 0xee, + 0x71, 0x2c, 0x5f, 0xf9, 0xf6, 0xf7, 0x05, 0x1f, 0xe6, 0xfa, 0xc5, 0x40, + 0xf6, 0xfc, 0x2f, 0x7f, 0xb6, 0x33, 0xc4, 0xdd, 0xf1, 0x62, 0xfe, 0x6f, + 0x79, 0xcb, 0x65, 0x8b, 0xff, 0xd9, 0xe7, 0xc2, 0xfe, 0x7b, 0xef, 0xba, + 0xc5, 0x7c, 0xfd, 0xc8, 0xba, 0xf7, 0x4d, 0x1d, 0x62, 0xfd, 0x3a, 0xf6, + 0x47, 0xac, 0x5f, 0xf7, 0x9c, 0xfc, 0xfc, 0x86, 0x4b, 0x17, 0x8b, 0x3c, + 0xb1, 0x7f, 0x3f, 0x39, 0x3f, 0x95, 0x8a, 0x73, 0xc9, 0x21, 0xcb, 0xff, + 0x89, 0xf7, 0xe7, 0xe5, 0xfc, 0xfe, 0x58, 0xbc, 0xdd, 0x80, 0xc4, 0xd4, + 0xf6, 0x21, 0xdc, 0x83, 0xb2, 0xb7, 0x84, 0x1e, 0x88, 0x2f, 0xa4, 0xb7, + 0x67, 0x54, 0xe7, 0xe9, 0x40, 0x37, 0xf9, 0xc1, 0xc3, 0x3a, 0x87, 0xba, + 0xc5, 0xff, 0xe8, 0xb0, 0x65, 0x8f, 0xac, 0xf4, 0xe9, 0x62, 0xff, 0xa7, + 0x3b, 0xcd, 0x82, 0x6e, 0xd6, 0x2f, 0xf9, 0x82, 0xd6, 0x3f, 0xe4, 0x6b, + 0x15, 0x28, 0xbe, 0xd2, 0x49, 0x1e, 0x54, 0x15, 0xfe, 0x02, 0x54, 0xaf, + 0x10, 0x7d, 0x0f, 0x8b, 0xf8, 0x5d, 0x7b, 0xeb, 0x58, 0xb1, 0x7f, 0xfe, + 0xce, 0xe1, 0xe7, 0xdb, 0x35, 0xef, 0x3e, 0xa5, 0x62, 0xf6, 0x77, 0x05, + 0x8b, 0xcd, 0xe7, 0x58, 0xbf, 0xee, 0xfc, 0xde, 0x29, 0xcf, 0xac, 0x5f, + 0xef, 0xe1, 0xad, 0x2f, 0x1c, 0xb1, 0x7f, 0xb3, 0x99, 0x1f, 0xf9, 0x1a, + 0xc5, 0xcc, 0x05, 0x8b, 0xa7, 0x65, 0x8b, 0xdf, 0x98, 0x96, 0x2f, 0xf4, + 0xb9, 0x66, 0xc1, 0xc1, 0x62, 0xdd, 0x8c, 0xfa, 0xb0, 0x63, 0xe3, 0xd7, + 0xe6, 0x88, 0x9e, 0x25, 0x8a, 0xc4, 0xe1, 0x37, 0x39, 0xf9, 0xb7, 0x8d, + 0x85, 0x08, 0x1e, 0x86, 0xb5, 0x8a, 0x9d, 0x3e, 0xae, 0xc3, 0xdc, 0x8e, + 0x82, 0xf1, 0xa3, 0xc5, 0x8b, 0x9f, 0x4b, 0x15, 0x26, 0xd7, 0xa0, 0xf5, + 0xf7, 0x8d, 0xcf, 0xac, 0x5e, 0x27, 0x95, 0x8b, 0xc7, 0xee, 0x56, 0x2d, + 0x05, 0x8a, 0x93, 0x61, 0xa1, 0xeb, 0xff, 0x16, 0x7b, 0xc2, 0xdb, 0xd9, + 0xba, 0xc5, 0xff, 0xf0, 0xfd, 0xc9, 0x80, 0xd8, 0x18, 0x37, 0xe2, 0xc5, + 0xff, 0x3f, 0x27, 0xcf, 0xf9, 0x3a, 0xc5, 0xf0, 0x9b, 0x50, 0x58, 0xbf, + 0x8b, 0xd3, 0xf7, 0xe2, 0xc5, 0xfb, 0x3d, 0xe7, 0xed, 0x62, 0xff, 0x16, + 0x45, 0xf9, 0xd6, 0xcb, 0x17, 0xfc, 0x32, 0x9e, 0xfc, 0x2c, 0xd2, 0xc5, + 0xd2, 0x6c, 0xa3, 0x14, 0x8b, 0x78, 0x53, 0xe3, 0x5a, 0x94, 0xed, 0xe0, + 0xa0, 0x33, 0x83, 0xc3, 0xa2, 0xff, 0x88, 0x5e, 0xfe, 0x74, 0x1c, 0xac, + 0x5f, 0xcd, 0xdf, 0x33, 0xbf, 0x2c, 0x5d, 0x81, 0x2c, 0x56, 0x22, 0x0c, + 0x07, 0x64, 0x61, 0x7c, 0x7e, 0x06, 0x75, 0x8b, 0xfb, 0xd9, 0xf9, 0xef, + 0x8b, 0x15, 0x28, 0x82, 0xc2, 0xe1, 0x12, 0xdb, 0x8b, 0x16, 0x09, 0x62, + 0xc3, 0x58, 0xb9, 0xc0, 0xb1, 0x7c, 0x13, 0x14, 0x16, 0x2e, 0x1b, 0xac, + 0x5d, 0xf7, 0x58, 0xbe, 0x87, 0x3f, 0x8b, 0x17, 0x85, 0xd7, 0xe2, 0xc5, + 0xfd, 0xdf, 0x30, 0x13, 0xd1, 0x62, 0x9c, 0xf4, 0xd8, 0x8a, 0xdc, 0x31, + 0x1f, 0xc3, 0x17, 0xdc, 0x8e, 0x21, 0x76, 0x17, 0x03, 0xb5, 0x3a, 0x70, + 0x4c, 0x26, 0x28, 0xc4, 0x29, 0x93, 0xc9, 0x04, 0x72, 0x97, 0xf7, 0x46, + 0xd4, 0x30, 0x6b, 0x17, 0x02, 0x56, 0x2e, 0x04, 0xac, 0x53, 0x9a, 0xe0, + 0x0b, 0xde, 0x86, 0x12, 0xc4, 0x61, 0xa0, 0xac, 0x45, 0x68, 0x9f, 0xaf, + 0xff, 0xfb, 0xf8, 0x2d, 0x1b, 0xdc, 0x3f, 0x84, 0x6f, 0xca, 0x73, 0x4b, + 0x17, 0x89, 0xb8, 0xb1, 0x51, 0xa2, 0xfb, 0x24, 0x91, 0x6c, 0x48, 0x34, + 0xb3, 0x48, 0x1e, 0x3f, 0x8d, 0x46, 0x8e, 0x08, 0xfd, 0xca, 0x1a, 0xde, + 0x22, 0x13, 0x4d, 0xfd, 0x3f, 0x62, 0x68, 0x2c, 0x5f, 0xda, 0x0f, 0xdc, + 0x87, 0x5e, 0xb1, 0x7f, 0xe6, 0xd6, 0xc1, 0xeb, 0x3a, 0x36, 0x96, 0x2f, + 0xf0, 0xb2, 0x29, 0x3c, 0x3a, 0xf5, 0x8b, 0xf9, 0xcd, 0x62, 0x06, 0x2c, + 0x5d, 0x09, 0x31, 0x30, 0xcc, 0x2c, 0xdc, 0xd8, 0x08, 0x7e, 0x3a, 0xbd, + 0x06, 0x82, 0xc5, 0xd8, 0x39, 0x3f, 0x46, 0x57, 0xbe, 0xf0, 0xc7, 0x2b, + 0x17, 0xff, 0x89, 0xbb, 0xe1, 0xa6, 0xb1, 0x9b, 0x9c, 0x0b, 0x17, 0xd3, + 0xa9, 0xfa, 0xc5, 0xd0, 0xed, 0x62, 0xb1, 0x11, 0x6c, 0xa1, 0xc2, 0x2b, + 0xff, 0x7a, 0x47, 0xbb, 0xed, 0x9d, 0xf9, 0x62, 0xff, 0xb1, 0xfb, 0xf6, + 0xa7, 0x3b, 0x58, 0xbf, 0xfc, 0x4f, 0xdf, 0x22, 0x2c, 0xdb, 0x3b, 0xf2, + 0xc5, 0xff, 0xbf, 0x87, 0x0e, 0x41, 0x9d, 0xf9, 0x62, 0xb1, 0x11, 0xde, + 0x4d, 0xbf, 0xdd, 0xee, 0xfa, 0x0e, 0x46, 0xb1, 0x78, 0xed, 0x03, 0x13, + 0x91, 0x92, 0xe2, 0x42, 0xe4, 0x32, 0x3c, 0x45, 0x4c, 0xaa, 0x7c, 0x12, + 0x8f, 0xee, 0x17, 0x96, 0x2e, 0x8e, 0x95, 0x8b, 0xfb, 0x01, 0xa7, 0x93, + 0xac, 0x5f, 0xc0, 0x38, 0x7c, 0x0f, 0x65, 0x8b, 0xff, 0x48, 0xff, 0x21, + 0xeb, 0x59, 0x12, 0xc5, 0xf9, 0xc8, 0xa7, 0xb5, 0x8a, 0xf9, 0xf4, 0x71, + 0x06, 0xec, 0xed, 0x62, 0xbb, 0x46, 0xaf, 0xa1, 0x37, 0x1c, 0x45, 0x7f, + 0xf3, 0x44, 0xc0, 0x33, 0xec, 0x77, 0xe2, 0xc5, 0xff, 0xe0, 0xe4, 0x29, + 0x8a, 0x0c, 0x59, 0xdf, 0x96, 0x2f, 0x69, 0xf4, 0xb1, 0x7f, 0xff, 0xec, + 0xf4, 0xbc, 0x1b, 0x9c, 0x9d, 0x4c, 0x1f, 0x72, 0x17, 0x16, 0x28, 0x08, + 0x88, 0xe0, 0xed, 0x4a, 0xad, 0x68, 0x15, 0xe0, 0xc7, 0xc6, 0x9a, 0x30, + 0x22, 0x39, 0xe2, 0x30, 0x50, 0xd5, 0xbf, 0x8b, 0x3b, 0x03, 0xc1, 0x62, + 0xf8, 0xd9, 0xf7, 0x16, 0x2f, 0xde, 0xd4, 0xe7, 0x6b, 0x14, 0x69, 0xe6, + 0xf6, 0x49, 0x7f, 0x73, 0x93, 0x09, 0xd2, 0xc5, 0xff, 0x6a, 0x4e, 0xf1, + 0x4b, 0x47, 0xac, 0x56, 0x1f, 0x56, 0xe5, 0xd7, 0x85, 0xdf, 0x96, 0x2f, + 0xd3, 0x0d, 0xb0, 0x25, 0x8a, 0x58, 0xa3, 0x9b, 0x66, 0x2a, 0xba, 0x2e, + 0x2c, 0x56, 0xc9, 0xdc, 0xc7, 0xbd, 0x94, 0x23, 0xb8, 0x45, 0xe5, 0x50, + 0xc8, 0x2f, 0xef, 0xcb, 0x94, 0x9d, 0x62, 0xff, 0xff, 0xb3, 0xd2, 0x5b, + 0xe7, 0xbe, 0xfd, 0xfa, 0x40, 0x16, 0x7d, 0x62, 0xff, 0xff, 0xf3, 0xf0, + 0x3e, 0xc1, 0xf6, 0x7f, 0x31, 0xdb, 0xdf, 0x78, 0xa1, 0x3b, 0x2c, 0x5f, + 0x16, 0x77, 0xe9, 0x4c, 0x3c, 0x65, 0x8c, 0xd1, 0x76, 0x04, 0xb1, 0x7f, + 0xc2, 0x2d, 0xff, 0x9b, 0x71, 0xd6, 0x2f, 0xfa, 0x7b, 0xc0, 0x4f, 0x4c, + 0xd9, 0x62, 0xfe, 0x2c, 0xf7, 0x18, 0x0b, 0x15, 0x29, 0x81, 0x69, 0x18, + 0xe3, 0x00, 0x3b, 0xe1, 0xe5, 0xff, 0xb4, 0xc3, 0x26, 0x34, 0x39, 0xed, + 0x62, 0xff, 0xff, 0x99, 0xfd, 0x07, 0x1e, 0x43, 0xf2, 0xfa, 0x01, 0xda, + 0x0b, 0x17, 0xf6, 0xcf, 0xae, 0xff, 0xb2, 0xc5, 0xfa, 0x19, 0xac, 0xe2, + 0xc5, 0x62, 0x60, 0x1f, 0x41, 0x26, 0x5f, 0x19, 0x5f, 0xef, 0x89, 0x8d, + 0xf4, 0xec, 0xb1, 0x7f, 0x73, 0x59, 0xbc, 0xec, 0xb1, 0x7f, 0xfb, 0xcf, + 0xb6, 0xd2, 0x59, 0xe7, 0xec, 0x25, 0x8a, 0xd8, 0xff, 0x60, 0x61, 0x7d, + 0x3d, 0xfa, 0x3d, 0x62, 0xa4, 0xf2, 0xa0, 0x47, 0x7f, 0xff, 0x9c, 0xdc, + 0x2f, 0x7f, 0x0e, 0x28, 0x30, 0xf3, 0xbf, 0x2c, 0x5d, 0x9d, 0x7a, 0xc5, + 0xc5, 0xda, 0xc5, 0xfd, 0x87, 0xe7, 0xde, 0x25, 0x8b, 0xc7, 0x6e, 0xfa, + 0xd3, 0xe3, 0x34, 0x73, 0xe3, 0x17, 0xf8, 0x72, 0x4d, 0xa6, 0x82, 0xc5, + 0x61, 0xfc, 0xb2, 0x3d, 0xff, 0xef, 0xc9, 0xff, 0x98, 0x5b, 0xe7, 0x7e, + 0x58, 0xbb, 0xcd, 0xa3, 0xeb, 0x01, 0x05, 0xfd, 0x3e, 0x7d, 0xdc, 0x6b, + 0x16, 0xfa, 0xc5, 0xba, 0xfd, 0x1e, 0x00, 0x8b, 0xaf, 0xff, 0xe6, 0x86, + 0x16, 0x69, 0xcd, 0x8e, 0xe3, 0x42, 0x4e, 0xb1, 0x7f, 0xb0, 0xb6, 0xc1, + 0xb7, 0xd6, 0x2a, 0x25, 0x5e, 0x9f, 0x21, 0xf4, 0x75, 0x22, 0x6d, 0xe8, + 0x5a, 0x12, 0xed, 0xc0, 0xc5, 0x8b, 0xff, 0xb0, 0x2c, 0x8f, 0x31, 0xbd, + 0x3c, 0x95, 0x8b, 0xbb, 0x82, 0xc5, 0xfe, 0xfe, 0x76, 0x0c, 0xf7, 0x16, + 0x29, 0xcf, 0x3b, 0x83, 0x37, 0xfb, 0x7f, 0xbf, 0xc9, 0x8e, 0xb1, 0x7e, + 0x3e, 0x0d, 0xc2, 0x58, 0xbb, 0xdb, 0x2c, 0x5f, 0x77, 0xbb, 0xe9, 0x62, + 0xd3, 0x03, 0x7d, 0xe1, 0x9a, 0xc4, 0x46, 0x93, 0x3d, 0xc7, 0x95, 0x8b, + 0xff, 0xdb, 0xb6, 0xb6, 0xe1, 0x67, 0xbd, 0x9a, 0x58, 0xb9, 0x8e, 0xb1, + 0x7e, 0xf6, 0xa7, 0x02, 0x58, 0xba, 0x4d, 0xc3, 0xc0, 0xec, 0x5e, 0xff, + 0xd9, 0xd3, 0xef, 0xdc, 0x3d, 0x21, 0x2c, 0x5f, 0xb4, 0xc5, 0x0e, 0x2c, + 0x5f, 0xe7, 0x38, 0xe7, 0x81, 0xf1, 0x62, 0xf8, 0x9f, 0xb8, 0x2c, 0x5f, + 0xfb, 0x99, 0xb7, 0x07, 0xa2, 0x60, 0x96, 0x2b, 0x48, 0xc1, 0xf9, 0x40, + 0x0d, 0x7c, 0x47, 0x52, 0x9f, 0xdc, 0x21, 0x19, 0xf2, 0xee, 0x46, 0x09, + 0x51, 0x2b, 0x5d, 0xd1, 0x09, 0xe1, 0x82, 0xc4, 0x3e, 0x94, 0x25, 0x7d, + 0xc0, 0xc8, 0x0b, 0x17, 0x7b, 0x8b, 0x17, 0xfb, 0x60, 0xb8, 0xe5, 0xdc, + 0x16, 0x2f, 0xff, 0x4c, 0x50, 0x9f, 0x07, 0x9a, 0x66, 0x1a, 0xc5, 0xfb, + 0x0b, 0x3b, 0x82, 0xc5, 0x6c, 0x7e, 0x71, 0x25, 0xdf, 0xe8, 0x18, 0x37, + 0xe9, 0x23, 0x58, 0xa9, 0x4c, 0x17, 0x21, 0x54, 0xc4, 0x97, 0xfe, 0x7e, + 0xe0, 0x1f, 0x00, 0xcf, 0xb2, 0xc5, 0xff, 0xc3, 0x9d, 0xfb, 0x86, 0x7b, + 0x6c, 0x09, 0x62, 0xfd, 0x14, 0x1b, 0x5b, 0x2c, 0x56, 0xe7, 0xe8, 0x74, + 0x9b, 0xf6, 0x45, 0xf7, 0xf2, 0xc5, 0xfe, 0xfc, 0xb7, 0x9b, 0xb0, 0x2c, + 0x5f, 0xff, 0x31, 0xb1, 0x4e, 0x7a, 0x4f, 0x3f, 0x90, 0x2c, 0x54, 0x11, + 0x08, 0x46, 0x97, 0x31, 0xd6, 0x2f, 0xff, 0xff, 0xe7, 0x3e, 0x43, 0xf3, + 0xe7, 0x2c, 0xef, 0xee, 0x3c, 0x21, 0x72, 0x70, 0xbc, 0xb1, 0x7f, 0xff, + 0x60, 0xc3, 0xd3, 0x9e, 0x4d, 0xe6, 0x1e, 0x7b, 0xf2, 0xc5, 0xff, 0xe9, + 0xea, 0x7d, 0x67, 0x70, 0xf6, 0x16, 0xeb, 0x15, 0xf4, 0x56, 0x12, 0xf5, + 0x0d, 0x36, 0xaf, 0x8b, 0xfa, 0x33, 0x1b, 0xff, 0xf8, 0x7f, 0x78, 0xd8, + 0x3f, 0x3f, 0x0b, 0x3a, 0x3f, 0xc4, 0xb1, 0x58, 0xa8, 0x99, 0xe3, 0x8c, + 0x11, 0xbd, 0x4a, 0xbe, 0x2c, 0x85, 0xb1, 0x11, 0xf2, 0x56, 0x9d, 0xf6, + 0x67, 0xf8, 0xb1, 0x52, 0xce, 0xb2, 0x19, 0xe6, 0x4b, 0xf1, 0xed, 0x8f, + 0x42, 0xed, 0x2f, 0xcc, 0x0b, 0x1d, 0x79, 0x21, 0x46, 0x3b, 0xe9, 0xc1, + 0x5e, 0xa4, 0x8b, 0xc1, 0x04, 0x12, 0x45, 0xe2, 0x17, 0x12, 0x23, 0x0d, + 0x0d, 0xed, 0xd8, 0x35, 0x8b, 0x61, 0xa7, 0x9e, 0xc6, 0x17, 0xa0, 0x23, + 0x56, 0x2f, 0x1d, 0xbc, 0xb1, 0x7d, 0x18, 0x10, 0x41, 0x2c, 0x5d, 0x80, + 0x58, 0xac, 0x3c, 0x1f, 0x15, 0x5e, 0x90, 0x71, 0x62, 0xa5, 0x1c, 0x5d, + 0x93, 0x9c, 0x7f, 0xcb, 0xc1, 0x90, 0xdf, 0x6a, 0x4e, 0x05, 0x8b, 0xff, + 0xef, 0x71, 0xfe, 0xcf, 0xe7, 0xd3, 0x6d, 0x2b, 0x17, 0xf8, 0xed, 0x06, + 0x37, 0xee, 0xb1, 0x7f, 0xfb, 0x8f, 0xf6, 0x7f, 0x3e, 0x9b, 0x69, 0x58, + 0xbd, 0x06, 0xe1, 0x88, 0xcc, 0x3a, 0x7f, 0x8d, 0x2f, 0xef, 0x31, 0x9d, + 0x43, 0xdd, 0x62, 0x9c, 0xfd, 0xba, 0x21, 0x5f, 0x8e, 0xde, 0x14, 0xac, + 0x5f, 0xfe, 0xce, 0x8f, 0xf1, 0x7d, 0xf8, 0x58, 0x75, 0x8a, 0x93, 0xf3, + 0x22, 0x8b, 0xfb, 0x69, 0x3e, 0xc1, 0x84, 0xb1, 0x7c, 0xfa, 0x07, 0x16, + 0x2f, 0xf3, 0x3f, 0xa6, 0x13, 0xd1, 0x62, 0xff, 0xba, 0xfc, 0x8e, 0x2c, + 0x09, 0x80, 0xb1, 0x5f, 0x3f, 0x51, 0x1a, 0x5f, 0xff, 0x9e, 0x7a, 0x48, + 0x67, 0xe7, 0xc2, 0x66, 0xec, 0x25, 0x8b, 0xfd, 0x30, 0x9d, 0x6b, 0x02, + 0x58, 0xb4, 0xe9, 0x11, 0xe0, 0x5b, 0xbf, 0xfe, 0x9e, 0x0f, 0xee, 0x17, + 0xce, 0x2f, 0x0a, 0x56, 0x2f, 0xf1, 0x61, 0xa6, 0x3f, 0x47, 0x58, 0xad, + 0x91, 0x61, 0xb9, 0x47, 0x94, 0xaa, 0x53, 0x93, 0x78, 0xd8, 0x6f, 0x8b, + 0x3b, 0xf2, 0xc5, 0xff, 0xfd, 0xee, 0x39, 0x77, 0x0f, 0xcb, 0x8e, 0x7f, + 0x30, 0x58, 0xbb, 0x61, 0xac, 0x5f, 0xd2, 0x2f, 0x13, 0xf4, 0x58, 0xa3, + 0x0f, 0x23, 0x43, 0x34, 0xe8, 0xc6, 0xe4, 0x28, 0xef, 0xfc, 0x59, 0xcd, + 0xfe, 0xfb, 0xc9, 0x2c, 0x5f, 0xff, 0xe3, 0x42, 0x6d, 0x1b, 0x19, 0xcc, + 0x81, 0x09, 0xb9, 0x84, 0xb1, 0x7f, 0xfb, 0xdf, 0x76, 0x06, 0x17, 0xbf, + 0x90, 0x58, 0xbf, 0xfb, 0xef, 0xaf, 0xb6, 0xb3, 0x76, 0xf2, 0xc5, 0xff, + 0xfd, 0xf7, 0x3c, 0xe1, 0x7b, 0x92, 0x79, 0x8a, 0x7e, 0xb1, 0x7f, 0xfb, + 0xef, 0xc9, 0x84, 0x1c, 0x64, 0xdf, 0x58, 0xbf, 0xb5, 0x3c, 0x39, 0x6c, + 0xb1, 0x7f, 0xf6, 0x7b, 0xc2, 0x86, 0x7d, 0xbd, 0xc5, 0x8a, 0xc3, 0xf4, + 0x22, 0xfb, 0x9a, 0x06, 0x27, 0x8b, 0x89, 0x3b, 0xa2, 0xb2, 0xd7, 0x21, + 0x7b, 0x73, 0xc4, 0xb1, 0x63, 0x9c, 0xfc, 0xfe, 0xb7, 0x52, 0xac, 0xb3, + 0x09, 0xdc, 0xfc, 0x52, 0xa7, 0xaf, 0xed, 0x0b, 0x7f, 0xbf, 0x16, 0x2f, + 0x82, 0x62, 0x82, 0xc5, 0xff, 0x7a, 0x7b, 0x03, 0x7f, 0xee, 0xb1, 0x6f, + 0xac, 0x5e, 0xfe, 0x75, 0x2c, 0x56, 0x1f, 0x66, 0xe7, 0x51, 0x09, 0x5e, + 0xd3, 0x6e, 0xb1, 0x7e, 0x7d, 0xff, 0x3e, 0x58, 0xba, 0x71, 0x62, 0xb6, + 0x37, 0xfb, 0x94, 0xdf, 0x4e, 0xc4, 0x25, 0x8a, 0xd1, 0xe3, 0x7c, 0x8e, + 0xe3, 0xca, 0xc5, 0x80, 0xb1, 0x6e, 0x39, 0xa9, 0x61, 0x7b, 0xff, 0x4e, + 0x16, 0xd8, 0x4d, 0xdf, 0x16, 0x2f, 0xc5, 0x9e, 0x9d, 0x2c, 0x5e, 0x08, + 0x20, 0x92, 0x2f, 0xcc, 0x6f, 0xdf, 0xc9, 0x11, 0x86, 0x86, 0xa5, 0x10, + 0x8e, 0x91, 0x7f, 0xb5, 0x20, 0xc8, 0x49, 0xab, 0x17, 0xc7, 0xe4, 0xf9, + 0x62, 0xf7, 0x49, 0x3a, 0xc5, 0xef, 0x38, 0x4b, 0x17, 0xb8, 0xda, 0x58, + 0xae, 0xcd, 0xdf, 0x87, 0xaf, 0xff, 0xfe, 0xf4, 0xc1, 0xfe, 0x23, 0x9d, + 0xa1, 0xa9, 0xfb, 0x70, 0xb0, 0x0b, 0x17, 0x48, 0xd6, 0x2f, 0xf6, 0xb5, + 0x3b, 0x0f, 0x09, 0x62, 0x9d, 0x17, 0x9f, 0x71, 0x61, 0x7a, 0x94, 0xe2, + 0x70, 0x8d, 0xd6, 0x9a, 0x1b, 0xd7, 0xff, 0x83, 0x81, 0x83, 0xcf, 0xee, + 0xfc, 0xc1, 0xac, 0x5e, 0xcc, 0x89, 0x62, 0xb6, 0x3e, 0xb0, 0x27, 0x5f, + 0x73, 0x0b, 0xcb, 0x15, 0x87, 0x8a, 0xc4, 0x77, 0xe0, 0xf8, 0xff, 0x12, + 0xc5, 0xe1, 0xc9, 0xd6, 0x2e, 0xf9, 0xab, 0x16, 0xe1, 0x8b, 0xaa, 0x43, + 0x30, 0xc8, 0x51, 0xf6, 0x97, 0x11, 0x2e, 0xa1, 0x84, 0x72, 0x1f, 0xc7, + 0x7a, 0x50, 0xef, 0xe1, 0x00, 0x8a, 0xba, 0x0e, 0xde, 0x8e, 0xce, 0xd6, + 0x2d, 0x01, 0xaf, 0x64, 0x64, 0xef, 0x0b, 0xc3, 0x1a, 0xa3, 0x65, 0xf3, + 0xc1, 0x4f, 0x7c, 0x5f, 0xfe, 0x2c, 0xe8, 0xff, 0x17, 0xb9, 0x26, 0xba, + 0xc5, 0xff, 0xff, 0xbf, 0x83, 0x7f, 0x61, 0x43, 0x39, 0xe8, 0x64, 0x7b, + 0x10, 0x16, 0x2f, 0xfe, 0x7d, 0xff, 0x99, 0xbc, 0x94, 0xee, 0xb1, 0x7f, + 0x49, 0xe7, 0xf2, 0x05, 0x8b, 0xd3, 0xb0, 0x96, 0x2b, 0x0f, 0x2f, 0xe5, + 0xb5, 0xf4, 0x58, 0xf5, 0xf0, 0x90, 0xbf, 0xf9, 0xfd, 0x3a, 0xc2, 0xf3, + 0x31, 0x2c, 0x54, 0x1b, 0x04, 0x57, 0x20, 0x88, 0xcf, 0x52, 0x8a, 0xce, + 0x51, 0xf9, 0xc1, 0x52, 0x9f, 0x7f, 0xe1, 0x9f, 0x93, 0x05, 0x18, 0xf7, + 0x42, 0xdb, 0xf8, 0x6d, 0x02, 0x9d, 0x96, 0x2f, 0xbe, 0xfd, 0xf9, 0x62, + 0xff, 0xfe, 0x79, 0xf7, 0xc4, 0xc7, 0x2c, 0xf7, 0xdf, 0x68, 0x2c, 0x5e, + 0x9c, 0x2c, 0x45, 0x6c, 0x45, 0xdf, 0x24, 0xbf, 0xc2, 0x6d, 0xb0, 0x9c, + 0xd5, 0x8b, 0xed, 0xf5, 0x30, 0x58, 0xbc, 0xe7, 0xe2, 0xc5, 0xfb, 0xf3, + 0xbe, 0x12, 0xc5, 0xa5, 0x62, 0x80, 0x6e, 0x7a, 0x14, 0x5f, 0xf9, 0xf5, + 0xbf, 0xdf, 0x7f, 0xb9, 0x2c, 0x5f, 0xff, 0xfe, 0x62, 0x07, 0xbf, 0x87, + 0xf7, 0x33, 0xa7, 0xdf, 0x7f, 0xb8, 0x62, 0xd9, 0x62, 0xfe, 0x93, 0x0f, + 0x39, 0xe5, 0x8a, 0xd9, 0x1d, 0x60, 0x40, 0xea, 0x7d, 0xbf, 0xfc, 0x0e, + 0x67, 0xdb, 0x7e, 0x68, 0x9f, 0x75, 0x8a, 0x94, 0xe3, 0xb2, 0x30, 0xe6, + 0x34, 0xbf, 0xec, 0x8f, 0x93, 0xf7, 0x0c, 0xf2, 0xc5, 0x4b, 0x6d, 0x29, + 0x91, 0xb2, 0xbd, 0x61, 0xb7, 0xa8, 0xda, 0x3e, 0x7e, 0xc6, 0x80, 0x24, + 0x28, 0xf9, 0x38, 0x69, 0x7d, 0x9c, 0xf3, 0xac, 0x5f, 0xd9, 0xce, 0x66, + 0xb6, 0x58, 0xb6, 0xf0, 0x3d, 0x11, 0x91, 0x5e, 0x29, 0xe8, 0xb1, 0x7f, + 0xf6, 0xa7, 0x7f, 0x93, 0x78, 0xa4, 0x25, 0x8b, 0xba, 0xf7, 0x58, 0xa5, + 0x8b, 0x7d, 0x62, 0xa0, 0x5f, 0x38, 0x65, 0xfe, 0x8a, 0x0e, 0x2e, 0xbe, + 0x39, 0xd6, 0x2f, 0xb4, 0xf1, 0x71, 0x62, 0xc0, 0x30, 0xf8, 0x74, 0x7b, + 0x5b, 0x23, 0x8f, 0x47, 0x45, 0x08, 0x0a, 0x94, 0xd7, 0x5a, 0x32, 0x8b, + 0xd1, 0x36, 0xcb, 0x17, 0xb8, 0x28, 0xf5, 0x8a, 0xc3, 0xc0, 0xf0, 0xfd, + 0xf0, 0xb6, 0x16, 0xcb, 0x17, 0xe8, 0x13, 0xcf, 0x6b, 0x16, 0x9d, 0x1e, + 0x71, 0x13, 0x54, 0xbf, 0x40, 0xf6, 0xd2, 0x9c, 0xa1, 0x39, 0x60, 0x39, + 0xc5, 0xcc, 0xa5, 0xc7, 0x1b, 0x39, 0x57, 0xbc, 0xe0, 0xc7, 0x73, 0x91, + 0xee, 0x97, 0x14, 0xaa, 0x7d, 0x4f, 0xee, 0x1e, 0x51, 0xb7, 0xe7, 0x68, + 0x1a, 0x51, 0xa0, 0x25, 0x39, 0x15, 0x3f, 0xf3, 0x92, 0x83, 0xfd, 0x5b, + 0x6f, 0x8a, 0x1d, 0x7d, 0x0a, 0x63, 0xa3, 0x7b, 0x0d, 0xa3, 0xa9, 0xbe, + 0xfc, 0xf1, 0x41, 0xc9, 0x62, 0xee, 0xb1, 0xd6, 0x2f, 0xe3, 0x88, 0xd2, + 0xc0, 0x2c, 0x5e, 0xd3, 0xee, 0xb1, 0x7f, 0xf1, 0xac, 0x67, 0x07, 0xfc, + 0x72, 0x35, 0x62, 0xf0, 0xd8, 0x25, 0x8a, 0x30, 0xf9, 0x5d, 0x1e, 0xb1, + 0x1a, 0x9b, 0x97, 0xfe, 0x10, 0x77, 0xfd, 0x17, 0xba, 0xb9, 0x31, 0x0b, + 0x4b, 0x17, 0xf8, 0x72, 0x47, 0x91, 0xca, 0xc5, 0x49, 0xf9, 0x32, 0x05, + 0xff, 0x7e, 0x76, 0xd4, 0xc1, 0xb4, 0xb1, 0x7f, 0xfb, 0xf3, 0xf2, 0xc3, + 0x47, 0x85, 0x31, 0xeb, 0x17, 0xe2, 0x34, 0x39, 0x02, 0xc5, 0xff, 0x03, + 0x52, 0x2f, 0x13, 0xf4, 0x58, 0xbf, 0xe6, 0xef, 0xdf, 0x9d, 0xf2, 0x25, + 0x8a, 0xc3, 0xf7, 0x23, 0xbb, 0xf3, 0x8f, 0xee, 0x6a, 0xc5, 0xe0, 0xd8, + 0x96, 0x28, 0x69, 0xa9, 0xe2, 0x61, 0x42, 0x87, 0xc4, 0x1d, 0x45, 0x37, + 0xe2, 0xd8, 0x7f, 0x95, 0x8b, 0xe2, 0x73, 0xe2, 0xc5, 0xef, 0x7b, 0x16, + 0x2a, 0x4d, 0xf6, 0x10, 0xdf, 0x05, 0xec, 0x8f, 0x58, 0xbf, 0x98, 0xe1, + 0x8d, 0xa0, 0xb1, 0x7f, 0x98, 0x6f, 0xaf, 0xcc, 0x16, 0x2d, 0x1c, 0xb1, + 0x52, 0x99, 0x26, 0xcc, 0xfd, 0x8f, 0xfc, 0x9f, 0xa1, 0x7c, 0x71, 0x9d, + 0xff, 0xf8, 0x98, 0x2d, 0x3c, 0xfc, 0x3f, 0x3f, 0xe7, 0xa2, 0xc5, 0xff, + 0x9f, 0xf2, 0x3f, 0x8a, 0x7b, 0xe2, 0xc5, 0xff, 0xdf, 0x09, 0x8b, 0x62, + 0xc0, 0xe4, 0xeb, 0x17, 0xfe, 0x1f, 0xdc, 0x2f, 0xb7, 0x26, 0x3d, 0x62, + 0xe2, 0xc5, 0x8a, 0xec, 0xf6, 0x49, 0x0e, 0xb1, 0x30, 0x1d, 0x20, 0x34, + 0x27, 0xef, 0x0c, 0xd0, 0x2c, 0x5a, 0x0b, 0x17, 0xda, 0xd3, 0x79, 0x62, + 0xf9, 0xcd, 0x38, 0x4b, 0x17, 0xe8, 0xe7, 0xd6, 0x1a, 0xb1, 0x5d, 0xa2, + 0x18, 0xe2, 0x5f, 0x23, 0xe1, 0x2d, 0xe3, 0x3a, 0xb7, 0x58, 0xbb, 0x3c, + 0xb1, 0x5b, 0x1b, 0xaf, 0x91, 0xdf, 0xf8, 0xe3, 0x92, 0xce, 0x85, 0x9c, + 0x58, 0xbd, 0xf2, 0x3a, 0xc5, 0xfe, 0x01, 0xad, 0x87, 0x9d, 0xd6, 0x28, + 0xc4, 0xf4, 0x26, 0x14, 0xb8, 0xf0, 0xe4, 0x4c, 0x7e, 0x10, 0xed, 0xff, + 0xd1, 0x36, 0xff, 0x98, 0x78, 0xb0, 0xeb, 0x17, 0xf6, 0xb0, 0x89, 0xb6, + 0x58, 0xbc, 0x39, 0x82, 0xc5, 0xff, 0x83, 0x93, 0xe6, 0x8e, 0xc4, 0x6a, + 0xc5, 0x6e, 0x8d, 0x07, 0x46, 0x62, 0xdf, 0x0e, 0xdf, 0xf8, 0x2e, 0xe1, + 0xc3, 0x33, 0xf8, 0x4b, 0x17, 0xfd, 0x3d, 0xf3, 0x4f, 0xd3, 0x06, 0xb1, + 0x7f, 0xfc, 0x59, 0xcf, 0x1b, 0x25, 0x0c, 0xfb, 0x9d, 0x62, 0xa2, 0x44, + 0x5f, 0x43, 0xca, 0x94, 0x79, 0xe4, 0x33, 0x6f, 0xcf, 0xa9, 0x39, 0xd6, + 0x2d, 0xe5, 0x8b, 0xfb, 0x36, 0x34, 0xd1, 0x12, 0xc5, 0xfe, 0x17, 0x65, + 0x9e, 0xc0, 0x2c, 0x5f, 0xfd, 0xdc, 0x38, 0x66, 0x11, 0x63, 0x81, 0x62, + 0xff, 0xc5, 0x27, 0xd6, 0x40, 0xa4, 0xeb, 0x17, 0xff, 0x88, 0x5d, 0xf7, + 0xe1, 0x17, 0xb3, 0xbf, 0x2c, 0x5f, 0xe2, 0xcd, 0xf2, 0x27, 0x3a, 0xc5, + 0x1d, 0x30, 0x4f, 0xa2, 0xf4, 0x3d, 0x09, 0x3a, 0xff, 0xc2, 0xef, 0x91, + 0x16, 0x7b, 0x00, 0xb1, 0x7f, 0x36, 0x85, 0x3d, 0xc1, 0x62, 0x8c, 0x54, + 0x59, 0x22, 0x58, 0x62, 0xf1, 0x9c, 0x69, 0x05, 0x90, 0x6f, 0xfe, 0x91, + 0x9f, 0x37, 0x9e, 0x7f, 0x0e, 0xb1, 0x7e, 0x6c, 0x1b, 0xf4, 0x58, 0xbd, + 0xe9, 0x3a, 0xc5, 0xe2, 0x79, 0x58, 0xbc, 0xf8, 0x12, 0xc5, 0x69, 0x18, + 0x67, 0x45, 0xe1, 0x4f, 0x41, 0xd0, 0xc6, 0xef, 0x3f, 0xc4, 0xb1, 0x7c, + 0xc5, 0xb6, 0x2c, 0x5f, 0x89, 0xbc, 0xc7, 0x58, 0xbc, 0x1c, 0x81, 0x62, + 0xfb, 0xcf, 0xf1, 0x2c, 0x5f, 0xd9, 0xae, 0xe1, 0xe9, 0x58, 0xae, 0xba, + 0x9e, 0x90, 0x64, 0x74, 0x6a, 0x26, 0xe3, 0xdc, 0x2f, 0xc1, 0x66, 0xf2, + 0x05, 0x8b, 0xd9, 0x83, 0x58, 0xbe, 0xdf, 0xf9, 0xa5, 0x8a, 0x94, 0x48, + 0xb9, 0x38, 0x0a, 0xba, 0x87, 0x28, 0xc6, 0xc2, 0xb2, 0x37, 0x28, 0x98, + 0x78, 0x42, 0x14, 0xe3, 0x20, 0xc8, 0xe3, 0x5e, 0x37, 0x58, 0x97, 0xb5, + 0x1a, 0xcf, 0xe5, 0x02, 0x34, 0x65, 0x65, 0x19, 0x7f, 0x09, 0xbd, 0x29, + 0x50, 0x51, 0x8f, 0xf4, 0x4d, 0x08, 0x74, 0x32, 0x2e, 0xa8, 0xd4, 0xed, + 0x19, 0x1b, 0xd2, 0x1a, 0x3f, 0x7a, 0xc9, 0xdc, 0x3e, 0xb6, 0x74, 0x12, + 0x34, 0x9c, 0xb9, 0x8d, 0xa7, 0x06, 0xba, 0xee, 0x73, 0xf7, 0xae, 0x4b, + 0x92, 0xeb, 0xac, 0xa8, 0xd8, 0xd5, 0x2c, 0x5e, 0x35, 0xca, 0x9d, 0x9b, + 0xee, 0xc4, 0xda, 0xba, 0x7c, 0x85, 0xab, 0x34, 0x1d, 0xe6, 0x57, 0xe6, + 0x61, 0x82, 0xa6, 0xd6, 0x15, 0x5b, 0xde, 0x9f, 0xaf, 0x76, 0xce, 0x41, + 0xed, 0xe9, 0x9c, 0x7c, 0xe8, 0x04, 0x56, 0xf3, 0xd3, 0x57, 0xa5, 0x80, + 0x7b, 0x69, 0xed, 0xfc, 0x4b, 0x2f, 0x35, 0xf8, 0x63, 0x02, 0xd9, 0x5b, + 0xf5, 0xf3, 0x80, 0xa5, 0x88, 0x4c, 0x1e, 0x66, 0xa3, 0x95, 0xec, 0x4d, + 0x4f, 0x8a, 0xbc, 0x78, 0xe9, 0x4e, 0x70, 0x0a, 0xb1, 0x35, 0x8e, 0xb4, + 0x56, 0x81, 0xdf, 0xb5, 0x5f, 0x55, 0x64, 0xf3, 0x51, 0x94, 0x87, 0x1a, + 0xb8, 0x72, 0x1b, 0x81, 0xaf, 0x77, 0xec, 0x58, 0xbf, 0x8e, 0x39, 0xe0, + 0x7c, 0x58, 0xa9, 0x3c, 0xe7, 0x1e, 0xbb, 0xb0, 0x96, 0x2f, 0x1f, 0x3c, + 0xb1, 0x7f, 0x98, 0xf3, 0xe7, 0xe3, 0xac, 0x5f, 0xb3, 0x41, 0xfb, 0x8b, + 0x17, 0x7e, 0x56, 0x2d, 0x19, 0xf4, 0x65, 0x31, 0x00, 0x06, 0x88, 0x77, + 0x86, 0x41, 0x95, 0x5f, 0x6e, 0x53, 0x8b, 0x17, 0xed, 0x6e, 0xcd, 0xba, + 0xa4, 0xe3, 0x2f, 0xe8, 0x31, 0x41, 0xce, 0xb1, 0x68, 0xc9, 0x44, 0x36, + 0x11, 0x31, 0xbd, 0xfe, 0x8c, 0xcd, 0x6e, 0xcd, 0xba, 0xa4, 0xeb, 0x2f, + 0xfe, 0x8c, 0x68, 0x46, 0x66, 0xb7, 0x66, 0xdd, 0x52, 0x28, 0x95, 0x34, + 0x88, 0x39, 0xbd, 0x91, 0xe1, 0x19, 0xc8, 0xd1, 0x4d, 0x8d, 0xc3, 0x74, + 0x57, 0xa4, 0xcf, 0xc7, 0xc6, 0xc8, 0xdc, 0x87, 0x20, 0xa0, 0x46, 0xb7, + 0xc8, 0x72, 0xf8, 0xdb, 0xa9, 0x16, 0xff, 0xf4, 0x61, 0xda, 0x11, 0x99, + 0xad, 0xd9, 0xb7, 0x54, 0x8b, 0x45, 0xff, 0xba, 0xde, 0xb7, 0x5a, 0x69, + 0x87, 0xba, 0x96, 0x2f, 0xfa, 0x35, 0xfd, 0xe3, 0xda, 0x7b, 0xea, 0x58, + 0xbf, 0xfe, 0x0b, 0x7e, 0xb3, 0xad, 0x07, 0x5f, 0xa8, 0xd0, 0xc3, 0x3f, + 0x1c, 0xb1, 0x7f, 0xff, 0xee, 0xaf, 0x46, 0xc3, 0x3c, 0x6c, 0x4f, 0xd7, + 0x5f, 0x75, 0xfa, 0x8d, 0x0c, 0x33, 0xf1, 0xcb, 0x15, 0xf4, 0xc0, 0xc2, + 0x6f, 0xbf, 0xda, 0xd3, 0xc3, 0xf8, 0x05, 0x8b, 0xf4, 0x7e, 0x9e, 0x49, + 0x62, 0xfa, 0x11, 0xb0, 0x7b, 0x2c, 0x5f, 0x81, 0xec, 0xfb, 0xac, 0x54, + 0xa2, 0xc5, 0x8d, 0x3a, 0xf2, 0xa1, 0x15, 0xde, 0x8f, 0x3b, 0xac, 0x5f, + 0xf6, 0x10, 0xff, 0x3a, 0x62, 0x58, 0xbc, 0xf1, 0xd1, 0x2c, 0x54, 0x9f, + 0xc6, 0x10, 0x7c, 0xde, 0xf9, 0xf4, 0x07, 0x58, 0xbf, 0x6f, 0xfc, 0x35, + 0xd6, 0x2f, 0xc3, 0x11, 0xbf, 0x12, 0xc5, 0xe6, 0x6d, 0xd5, 0x21, 0xb9, + 0x7e, 0xee, 0x22, 0x91, 0xac, 0x50, 0xcf, 0xff, 0x72, 0xb6, 0x2a, 0xbf, + 0x0f, 0xf3, 0x9a, 0x58, 0xbf, 0xd3, 0xb4, 0x45, 0x20, 0xe2, 0xc5, 0x1a, + 0x9a, 0xbe, 0xe4, 0x5a, 0x85, 0x49, 0x17, 0xf0, 0xa2, 0xff, 0x69, 0xfa, + 0xfd, 0xff, 0x21, 0x2c, 0x5e, 0x14, 0x70, 0x4b, 0x17, 0xda, 0x14, 0x81, + 0x62, 0x9d, 0x10, 0x11, 0x1d, 0x86, 0x45, 0x7d, 0xf9, 0xef, 0x8b, 0x17, + 0xff, 0xff, 0x8b, 0x39, 0xc1, 0xce, 0x6b, 0x76, 0x6d, 0xe3, 0x20, 0xfe, + 0x9f, 0x71, 0x52, 0x87, 0x95, 0xc4, 0x56, 0x74, 0x24, 0xa9, 0x4c, 0x09, + 0xe1, 0xbb, 0x7f, 0x34, 0x64, 0x7b, 0x10, 0x16, 0x2f, 0xdb, 0x07, 0xf9, + 0x09, 0x62, 0xbe, 0x88, 0x62, 0x27, 0x11, 0x9d, 0xff, 0x67, 0xb1, 0xf6, + 0x0b, 0x3e, 0xb1, 0x7e, 0x8c, 0x0b, 0x91, 0xe1, 0xac, 0x54, 0x0f, 0xb3, + 0x87, 0x57, 0xe7, 0xdb, 0xef, 0x1c, 0xb1, 0x7e, 0xce, 0x36, 0xa0, 0xb1, + 0x7c, 0xf1, 0xef, 0xc5, 0x8a, 0x8f, 0x3f, 0x9d, 0x16, 0x1c, 0xa2, 0xfd, + 0xd5, 0x19, 0xae, 0xbc, 0x25, 0x8b, 0xf6, 0x6f, 0xc0, 0xf8, 0xb1, 0x7d, + 0x3e, 0x8e, 0x35, 0x62, 0xb0, 0xf4, 0xb4, 0x57, 0x7c, 0x32, 0xc0, 0x2c, + 0x5f, 0x48, 0x47, 0x1a, 0xc5, 0xf6, 0xff, 0x90, 0x96, 0x2f, 0x7e, 0x4d, + 0x58, 0xac, 0x44, 0x4e, 0x88, 0xba, 0xf2, 0x40, 0xc9, 0x6f, 0x34, 0x78, + 0x96, 0x2f, 0xda, 0xdd, 0x9b, 0x75, 0x48, 0xbe, 0x5f, 0xc2, 0xdf, 0x4f, + 0x24, 0xb1, 0x79, 0xa1, 0x19, 0xb2, 0x21, 0x70, 0x83, 0xe6, 0xf6, 0xc5, + 0x8b, 0xdf, 0x6f, 0x2c, 0x57, 0x0d, 0x70, 0x62, 0x37, 0xf8, 0x3d, 0xfe, + 0xe3, 0x17, 0x6b, 0x15, 0xe3, 0xda, 0x11, 0x15, 0xf0, 0xba, 0xfe, 0x92, + 0xb1, 0x7c, 0x13, 0x37, 0x6b, 0x17, 0xe7, 0x90, 0x85, 0x1e, 0xb1, 0x58, + 0x7f, 0x5d, 0x95, 0x11, 0x25, 0xfc, 0x5e, 0xcf, 0x4e, 0x96, 0x2f, 0xcf, + 0xdf, 0x56, 0x82, 0x58, 0xa9, 0x3d, 0xb0, 0xcb, 0x6f, 0xf6, 0xb4, 0xfe, + 0x06, 0x71, 0x62, 0xff, 0x49, 0xe6, 0x30, 0x20, 0x82, 0x58, 0xa7, 0x3e, + 0xee, 0xa3, 0x4a, 0x94, 0xf6, 0x72, 0x13, 0x8f, 0x08, 0x96, 0x84, 0x85, + 0xfb, 0xb7, 0x0f, 0x22, 0x58, 0xbc, 0x79, 0x35, 0x62, 0xa4, 0xf2, 0x5c, + 0xae, 0xfd, 0xc9, 0x0e, 0x2e, 0x2c, 0x5f, 0xd2, 0xf1, 0xf9, 0xdc, 0x16, + 0x2f, 0xda, 0x37, 0xe2, 0xe2, 0xc5, 0x44, 0x88, 0x7f, 0x95, 0x86, 0x63, + 0x7a, 0x75, 0x2b, 0x17, 0xdd, 0xf8, 0xa5, 0x62, 0xb0, 0xfc, 0x5c, 0xc8, + 0x43, 0x97, 0x37, 0xd6, 0x2f, 0x07, 0xc8, 0xe5, 0x8b, 0xa3, 0x7e, 0xb5, + 0x62, 0xf9, 0xc1, 0x3d, 0xac, 0x5f, 0x00, 0x7c, 0x95, 0x8b, 0xe6, 0xd6, + 0xdb, 0x2c, 0x5b, 0x08, 0xf2, 0x3a, 0x11, 0xd4, 0x11, 0xdc, 0x31, 0x7e, + 0xc8, 0xa3, 0xc8, 0xb8, 0xd7, 0x7d, 0x10, 0xde, 0x25, 0x8b, 0xfd, 0xf8, + 0xcd, 0xfe, 0xff, 0xea, 0x58, 0xbf, 0xd2, 0x50, 0x2c, 0xc0, 0x2c, 0x5e, + 0x04, 0x84, 0xb1, 0x7f, 0xb1, 0xf5, 0x0f, 0xb8, 0x4b, 0x17, 0xb6, 0x90, + 0xd6, 0x2a, 0x53, 0x03, 0xc2, 0x53, 0x4f, 0x23, 0xcc, 0x7e, 0x3c, 0x46, + 0x97, 0xf1, 0x9b, 0xfe, 0x7b, 0xe2, 0xc5, 0xce, 0x1a, 0xc5, 0xed, 0x83, + 0x82, 0xc5, 0x44, 0x6e, 0x18, 0x62, 0x83, 0x44, 0x5f, 0x53, 0x55, 0xdd, + 0x20, 0xb1, 0x7f, 0x1a, 0x1f, 0x1d, 0xbe, 0xb1, 0x7b, 0xef, 0xa5, 0x8a, + 0x63, 0xcd, 0x11, 0x85, 0xf7, 0x3f, 0x3f, 0x58, 0xbf, 0xd3, 0xb4, 0x96, + 0xd9, 0xd4, 0xb1, 0x73, 0x7d, 0x62, 0x96, 0x29, 0x62, 0xdc, 0x73, 0x5f, + 0xa1, 0x7e, 0x06, 0x5f, 0x01, 0xcf, 0xc5, 0x8a, 0x94, 0x6f, 0xec, 0x47, + 0x13, 0x37, 0x8c, 0xed, 0x19, 0xd6, 0xb6, 0x79, 0xbd, 0x75, 0x4d, 0x98, + 0xd2, 0x76, 0x86, 0xb0, 0xe1, 0x71, 0x91, 0xc2, 0x6f, 0x29, 0x67, 0xb8, + 0x4d, 0xbc, 0x26, 0xe3, 0xcc, 0xa2, 0x84, 0x46, 0xa1, 0x54, 0x78, 0x63, + 0xfe, 0x55, 0x2b, 0x42, 0x48, 0xa3, 0x18, 0xe4, 0x63, 0x7e, 0x8d, 0x44, + 0x50, 0xe4, 0xe8, 0x4f, 0x1c, 0xce, 0x1c, 0x60, 0x17, 0xdd, 0x64, 0x69, + 0xd6, 0x3a, 0xc5, 0xe8, 0xa4, 0x6b, 0x17, 0x6f, 0x19, 0x1b, 0x1e, 0x80, + 0x8c, 0xaf, 0xff, 0xc5, 0x3b, 0xc6, 0x7b, 0xbd, 0xdf, 0x85, 0x9d, 0x19, + 0x62, 0xff, 0xe8, 0x79, 0xe2, 0x8c, 0x1b, 0xf4, 0x91, 0xac, 0x5c, 0x6e, + 0xcb, 0x17, 0xfe, 0xc7, 0xe9, 0xec, 0xc2, 0xf7, 0x16, 0x2e, 0x0a, 0x31, + 0xcf, 0x64, 0x21, 0xab, 0xff, 0xa3, 0x39, 0x91, 0x3e, 0xa6, 0x27, 0x3a, + 0xc5, 0x0d, 0x37, 0xbe, 0xd7, 0x1e, 0x14, 0x87, 0x32, 0xbd, 0xa6, 0x89, + 0x62, 0xf6, 0x4c, 0x4b, 0x15, 0xb1, 0xbb, 0xd0, 0xf5, 0xff, 0x0f, 0x53, + 0xf6, 0x1c, 0x0e, 0xb1, 0x7e, 0x7e, 0x60, 0xe3, 0x24, 0xf7, 0x38, 0x45, + 0x7e, 0xd6, 0xec, 0xdb, 0xaa, 0x4a, 0xb2, 0xfd, 0x9c, 0xfc, 0xf6, 0xb1, + 0x68, 0xcc, 0x3e, 0x0f, 0x9b, 0xde, 0x8d, 0x71, 0xd1, 0xba, 0xc5, 0xfb, + 0xad, 0x1e, 0x9b, 0x75, 0x8b, 0x98, 0x6b, 0x17, 0xc2, 0xea, 0x1c, 0xac, + 0x5f, 0xb9, 0xe7, 0xef, 0x8b, 0x16, 0x8d, 0xd6, 0x28, 0xe7, 0xfd, 0xf1, + 0x7f, 0x13, 0x47, 0x15, 0x5f, 0xef, 0x72, 0x41, 0x9d, 0xf9, 0x62, 0xe7, + 0xea, 0x58, 0xbb, 0x34, 0xb1, 0x7b, 0x3b, 0xf2, 0xc5, 0xf3, 0x9d, 0xba, + 0x2c, 0x56, 0x22, 0xa0, 0xd3, 0x56, 0x1a, 0x00, 0xbf, 0x87, 0xaf, 0x40, + 0x5c, 0x58, 0xbf, 0xe7, 0x8c, 0xe8, 0x66, 0x1d, 0xbb, 0x58, 0xbb, 0xa8, + 0x25, 0x8a, 0xf9, 0xee, 0x12, 0x05, 0xfd, 0xf9, 0xe8, 0x21, 0xe2, 0xc5, + 0xfb, 0xf1, 0x14, 0x8d, 0x62, 0xf3, 0x6a, 0x0b, 0x14, 0xc7, 0x8c, 0x11, + 0x4d, 0xfb, 0xd1, 0x14, 0x8d, 0x62, 0xff, 0xf0, 0x0e, 0x21, 0xe6, 0x78, + 0x07, 0x17, 0x6b, 0x14, 0x47, 0xed, 0xe2, 0x9b, 0xff, 0x3e, 0x8d, 0x6e, + 0xe0, 0x26, 0xf2, 0xc5, 0xff, 0xde, 0xfc, 0xf0, 0x98, 0x5d, 0x7b, 0xe9, + 0x62, 0xf4, 0xc3, 0x16, 0x2f, 0xe9, 0xe4, 0x6d, 0x8c, 0x75, 0x8b, 0xf9, + 0xc5, 0xb9, 0x4c, 0x4b, 0x17, 0xff, 0x0b, 0x9f, 0x7f, 0x43, 0x09, 0xc6, + 0xb1, 0x7b, 0x81, 0xb2, 0xc5, 0xf7, 0xe5, 0xf4, 0xb1, 0x50, 0x55, 0x74, + 0x37, 0x6c, 0x84, 0xc1, 0xa4, 0x3d, 0xa0, 0xc4, 0x93, 0xa1, 0xcf, 0x99, + 0x11, 0x7f, 0x91, 0x03, 0x1e, 0xbf, 0xd8, 0x59, 0xdf, 0x98, 0xeb, 0x17, + 0xa7, 0xfc, 0x58, 0xa3, 0x4f, 0x40, 0x8c, 0xef, 0xff, 0xdf, 0x9e, 0xe0, + 0x27, 0x8e, 0xc0, 0xff, 0x2f, 0xa5, 0x8b, 0x75, 0x2c, 0x58, 0x25, 0x8a, + 0xec, 0xd4, 0x78, 0x56, 0xf7, 0x54, 0xf9, 0x62, 0xff, 0x67, 0x70, 0xf6, + 0x6d, 0xd4, 0xb1, 0x7f, 0x17, 0x8a, 0x7d, 0xc5, 0x8b, 0xfa, 0x4e, 0x1c, + 0x96, 0xeb, 0x17, 0x4e, 0x96, 0x2f, 0x98, 0x73, 0xda, 0xc5, 0x41, 0x19, + 0xf8, 0x73, 0xa2, 0xde, 0x17, 0x88, 0x5e, 0xf8, 0xe7, 0x78, 0x96, 0x2f, + 0xbf, 0x24, 0x6a, 0xc5, 0x61, 0xe3, 0xc4, 0x49, 0x73, 0x76, 0xb1, 0x7b, + 0xbe, 0x44, 0xb1, 0x73, 0xf9, 0x62, 0xf0, 0x72, 0x05, 0x8b, 0x47, 0xac, + 0x57, 0x68, 0x82, 0xd0, 0xc7, 0x08, 0x3c, 0x2f, 0x1c, 0x3d, 0x7d, 0x11, + 0x0b, 0x75, 0x8b, 0xfb, 0x0f, 0x13, 0x36, 0xcb, 0x16, 0xe2, 0xc5, 0xf3, + 0xfd, 0xcd, 0x58, 0xa0, 0x1b, 0x5e, 0x09, 0x5c, 0xdd, 0xac, 0x51, 0x1b, + 0x9f, 0x10, 0xdf, 0xff, 0x43, 0xed, 0x03, 0x5b, 0x98, 0x2e, 0x71, 0xd6, + 0x29, 0x62, 0xb0, 0xf7, 0x7a, 0x94, 0x6a, 0x53, 0x63, 0x72, 0x56, 0x84, + 0xe9, 0x3e, 0xdc, 0x37, 0x58, 0xbf, 0xe2, 0x98, 0x79, 0xce, 0x39, 0x58, + 0xbf, 0xc4, 0xf0, 0x8b, 0xf3, 0xb2, 0xc5, 0xe6, 0x6d, 0xd5, 0x22, 0x01, + 0x6d, 0x40, 0xf7, 0xf7, 0x35, 0xbe, 0xd6, 0x17, 0x96, 0x2f, 0x87, 0x1b, + 0xf5, 0xc8, 0xd1, 0x62, 0xff, 0xfd, 0xfc, 0x3f, 0x9c, 0x45, 0x0c, 0x27, + 0xdb, 0x8b, 0x14, 0x34, 0xda, 0xf2, 0x12, 0xfa, 0x29, 0xe1, 0x17, 0x8d, + 0x2f, 0x74, 0x6f, 0xac, 0x51, 0x89, 0xf8, 0x46, 0x47, 0x05, 0x29, 0xf7, + 0xbf, 0x23, 0x58, 0xbf, 0x71, 0x89, 0xbb, 0x58, 0xbf, 0xef, 0x3f, 0x1c, + 0x5d, 0x78, 0xe5, 0x62, 0xec, 0x25, 0x8b, 0x85, 0x12, 0xc5, 0xa5, 0x62, + 0xa4, 0xd5, 0x08, 0x66, 0xf6, 0x0d, 0xd6, 0x2a, 0x09, 0x9c, 0xee, 0x75, + 0xd8, 0xeb, 0x94, 0x47, 0x9f, 0x69, 0x00, 0xe4, 0x17, 0xf4, 0xeb, 0x69, + 0xd6, 0xcb, 0x17, 0xce, 0x79, 0xe2, 0xc5, 0x40, 0xf4, 0x8d, 0x30, 0xbf, + 0xda, 0xd8, 0xf2, 0x50, 0xe2, 0xc5, 0x49, 0xec, 0x61, 0x1d, 0xf7, 0xa7, + 0xa6, 0xeb, 0x17, 0xff, 0x13, 0xed, 0x98, 0x46, 0xe7, 0x7e, 0x58, 0xbf, + 0xfe, 0x3b, 0x90, 0x03, 0xf3, 0x90, 0xa1, 0x9c, 0x58, 0xbf, 0xf9, 0xe4, + 0xec, 0x30, 0xfa, 0xa4, 0xa0, 0xb1, 0x7f, 0xff, 0xcf, 0xe2, 0xce, 0x85, + 0x9c, 0xdb, 0x02, 0x8e, 0x17, 0xdf, 0x4b, 0x17, 0xfa, 0x3b, 0x34, 0x08, + 0x30, 0xd6, 0x2a, 0x53, 0xa5, 0x19, 0x36, 0x22, 0xfd, 0x40, 0x08, 0xe2, + 0x6c, 0xbf, 0x01, 0x80, 0x47, 0x58, 0xb9, 0x86, 0xb1, 0x7f, 0xd0, 0x7f, + 0x02, 0x73, 0xb8, 0x2c, 0x5f, 0xf4, 0x67, 0x33, 0x5b, 0x6d, 0x80, 0x58, + 0xad, 0x91, 0x21, 0x10, 0xbf, 0xce, 0xaf, 0xff, 0x76, 0xc4, 0x20, 0x6a, + 0x7e, 0xe4, 0x75, 0x8b, 0xf9, 0xfa, 0x3f, 0xa2, 0x95, 0x8a, 0x94, 0xd9, + 0x32, 0x17, 0x0e, 0x65, 0xc4, 0xab, 0xf8, 0x38, 0xdb, 0x4f, 0x27, 0x58, + 0xbb, 0x90, 0x58, 0xa6, 0x3c, 0xce, 0x1a, 0x5f, 0xff, 0xd3, 0xbf, 0x9f, + 0x5a, 0xc0, 0x73, 0xcd, 0xf6, 0x1a, 0xc5, 0xdd, 0x6f, 0xd6, 0x2f, 0xd9, + 0x14, 0x1a, 0x0b, 0x17, 0xfe, 0xfb, 0x1f, 0xdf, 0x9f, 0x08, 0xeb, 0x14, + 0x33, 0xe9, 0x88, 0xa6, 0xff, 0xf9, 0xb4, 0xdf, 0xee, 0x19, 0xec, 0xd6, + 0x79, 0x62, 0xb0, 0xfc, 0xf7, 0x23, 0xbf, 0xfb, 0xee, 0x71, 0xe7, 0x9f, + 0xfb, 0xba, 0xc5, 0xff, 0x66, 0xbd, 0xe6, 0x2e, 0xfc, 0xb1, 0x74, 0xf9, + 0x62, 0x86, 0x89, 0x62, 0x45, 0xea, 0x3a, 0xa8, 0xdd, 0xb5, 0xcf, 0x8d, + 0x8b, 0x26, 0x15, 0xbb, 0x43, 0x9e, 0x09, 0x23, 0x7a, 0xc9, 0x5b, 0x66, + 0xc3, 0xc7, 0x72, 0x2e, 0xe1, 0x05, 0x1e, 0x45, 0x14, 0x3b, 0xf5, 0x09, + 0x03, 0xc2, 0x93, 0xf1, 0xd8, 0xb4, 0xb6, 0x82, 0x8c, 0x4f, 0x91, 0xe2, + 0xfa, 0x3b, 0xa1, 0x42, 0x33, 0xa1, 0x0c, 0x72, 0xe0, 0x70, 0xf9, 0xea, + 0x85, 0xc5, 0xff, 0xa1, 0x38, 0x0f, 0xe6, 0x16, 0xeb, 0x17, 0xe9, 0x22, + 0xcf, 0x2c, 0x5f, 0x6b, 0x4f, 0xba, 0xc5, 0xf1, 0x66, 0xd1, 0x98, 0x88, + 0x88, 0xe3, 0xe0, 0xc9, 0xaf, 0xf7, 0x5b, 0xd6, 0x46, 0xfd, 0x86, 0x28, + 0xe5, 0x8b, 0xed, 0xfe, 0xdb, 0xac, 0x5f, 0xe0, 0xf9, 0x9a, 0xdf, 0xf2, + 0xb1, 0x7f, 0xd9, 0x14, 0x1b, 0x5b, 0x7c, 0x4b, 0x17, 0xf7, 0xd8, 0xa5, + 0xf4, 0xb1, 0x78, 0x5c, 0x95, 0x8b, 0xff, 0xcf, 0x3e, 0x7d, 0x37, 0x33, + 0x08, 0xd5, 0x8a, 0x82, 0x24, 0x7b, 0x2c, 0x21, 0xdb, 0xfc, 0x6b, 0x16, + 0x04, 0xc0, 0x58, 0xbf, 0xcf, 0xdc, 0x27, 0xa4, 0xc7, 0xac, 0x5f, 0x1b, + 0x0f, 0xe2, 0xc5, 0xed, 0xba, 0xde, 0x8b, 0x17, 0x85, 0x21, 0xac, 0x5f, + 0xf3, 0xc1, 0xfe, 0x23, 0x9d, 0xd6, 0x2a, 0x07, 0xaf, 0xe1, 0xeb, 0x46, + 0x46, 0xea, 0xb4, 0xa3, 0x52, 0x54, 0x92, 0x8c, 0xdb, 0x21, 0x9a, 0x69, + 0x80, 0x0d, 0x38, 0x73, 0xd0, 0x90, 0x37, 0xdb, 0xfd, 0x19, 0xf6, 0x3e, + 0x48, 0xd6, 0x2a, 0x31, 0x78, 0xeb, 0x52, 0x8f, 0x42, 0x96, 0x3f, 0x1d, + 0x0a, 0x8b, 0xff, 0x63, 0x45, 0x19, 0xf2, 0xcf, 0x71, 0x62, 0xfd, 0xad, + 0xd9, 0xb7, 0x54, 0x99, 0x05, 0xc6, 0x8d, 0x62, 0xfe, 0xf6, 0x61, 0x7b, + 0x8b, 0x17, 0xb8, 0x22, 0x58, 0xb4, 0x66, 0x22, 0x6b, 0x46, 0xfc, 0x19, + 0xf1, 0x6d, 0xfe, 0x21, 0x78, 0xb3, 0xa3, 0x2c, 0x5f, 0xfc, 0xde, 0x21, + 0x6d, 0xcc, 0x3c, 0xc7, 0xac, 0x5f, 0xb0, 0x87, 0xf9, 0x58, 0xbe, 0xfb, + 0x6a, 0x33, 0x11, 0x47, 0xf3, 0x40, 0x92, 0x2e, 0x08, 0x0b, 0x17, 0x30, + 0x4b, 0x17, 0x4f, 0x6b, 0x17, 0x9f, 0xa4, 0x66, 0x1e, 0x4b, 0x8c, 0xf0, + 0x62, 0xff, 0xff, 0x08, 0x79, 0x18, 0x1e, 0x7c, 0x84, 0xd1, 0xf8, 0x6c, + 0xf1, 0x62, 0xff, 0xfd, 0xbb, 0xf3, 0x07, 0x85, 0x21, 0x78, 0xd6, 0xe2, + 0xc5, 0xff, 0x7d, 0xd8, 0x18, 0x2d, 0x6c, 0xb1, 0x7e, 0xf8, 0x98, 0xd8, + 0xcf, 0xa2, 0x47, 0xca, 0xf6, 0x98, 0x26, 0x7a, 0x38, 0x7c, 0xd7, 0x13, + 0xae, 0xf4, 0x70, 0x14, 0x35, 0x4d, 0x6f, 0x29, 0x06, 0xff, 0x46, 0x66, + 0xb7, 0x66, 0xdd, 0x52, 0x6b, 0x97, 0xe8, 0xbc, 0x39, 0x25, 0x8b, 0xfc, + 0x59, 0xb6, 0xb4, 0xe1, 0x2c, 0x5f, 0x7d, 0xe6, 0x25, 0x8b, 0xf6, 0x07, + 0x3b, 0x46, 0x62, 0x20, 0x77, 0x29, 0xea, 0x35, 0xbf, 0xd1, 0x99, 0xad, + 0xd9, 0xb7, 0x54, 0x9c, 0x85, 0xfb, 0x5b, 0xb3, 0x6e, 0xa9, 0x3b, 0x0b, + 0xe8, 0xe9, 0xf6, 0x2c, 0x5f, 0xf9, 0xa1, 0x19, 0x9a, 0xdd, 0x9b, 0x75, + 0x49, 0x1c, 0x5a, 0x33, 0x11, 0x58, 0xe6, 0xe7, 0x25, 0xbf, 0xe6, 0x7e, + 0x7f, 0x21, 0xc9, 0x58, 0xbc, 0x7c, 0xfa, 0xc5, 0xff, 0x66, 0xe2, 0x92, + 0xee, 0x1c, 0x58, 0xbf, 0xb5, 0xa9, 0xdf, 0xee, 0xb1, 0x71, 0x46, 0x7d, + 0x17, 0xec, 0x70, 0x43, 0xbc, 0x3b, 0xbf, 0x75, 0xc8, 0xd0, 0x19, 0xb2, + 0xc5, 0xff, 0xbd, 0xc7, 0x38, 0x8d, 0x2c, 0x02, 0xc5, 0xf1, 0x4c, 0x0e, + 0xb1, 0x7c, 0xe4, 0x07, 0x58, 0xb9, 0xcd, 0x58, 0xa8, 0x1b, 0x9e, 0x84, + 0x37, 0xfe, 0x8d, 0xba, 0xd3, 0xce, 0xa1, 0x8f, 0xd1, 0x62, 0xd0, 0x58, + 0xbf, 0x6b, 0x76, 0x6d, 0xd5, 0x24, 0xa9, 0x7f, 0xdb, 0xfd, 0xe2, 0xfc, + 0xed, 0x8b, 0x17, 0xff, 0xbf, 0x3b, 0x4f, 0xdf, 0xa3, 0x0f, 0xee, 0xb1, + 0x18, 0x6f, 0x2f, 0xfc, 0xe7, 0x2c, 0x04, 0x44, 0xc1, 0x2c, 0x5d, 0x08, + 0xcc, 0x4c, 0x46, 0x27, 0x3f, 0x2f, 0xd7, 0x69, 0xb1, 0xb4, 0x64, 0x77, + 0xfc, 0xfe, 0x80, 0x86, 0xc4, 0x05, 0x8b, 0xf3, 0xb7, 0x79, 0x1c, 0xb1, + 0x4c, 0x7c, 0x9d, 0x0e, 0x6e, 0xf8, 0x96, 0x2f, 0xfe, 0xe3, 0x76, 0x79, + 0xff, 0xb1, 0xfa, 0x2c, 0x5f, 0xfe, 0x98, 0x7e, 0x5b, 0xc2, 0x2f, 0x38, + 0xd6, 0x2d, 0x19, 0xd6, 0xab, 0xfa, 0x93, 0x51, 0xa0, 0x62, 0xdf, 0x64, + 0x67, 0x8e, 0xbb, 0xf0, 0x8e, 0xe1, 0x1f, 0x86, 0x04, 0x8f, 0x7f, 0xff, + 0xf3, 0x7b, 0x01, 0x30, 0x8c, 0x0c, 0xf8, 0x39, 0x84, 0x8d, 0x98, 0xd5, + 0x8a, 0xd9, 0xf0, 0xa5, 0xa1, 0x5a, 0x16, 0x0e, 0x3f, 0x9c, 0x8e, 0xcb, + 0x78, 0x6d, 0x77, 0x0a, 0x07, 0xaf, 0x0c, 0xf4, 0xb4, 0x78, 0x6e, 0x34, + 0xb5, 0x30, 0x15, 0x94, 0x31, 0xb8, 0xa9, 0xe8, 0x78, 0x8a, 0x1e, 0xdd, + 0x27, 0x10, 0xc2, 0x85, 0x2d, 0xff, 0x42, 0x33, 0x35, 0xbb, 0x36, 0xea, + 0x90, 0xe0, 0xbf, 0xe7, 0x8c, 0xcd, 0x6e, 0xcd, 0xba, 0xa4, 0xb5, 0x2d, + 0x18, 0xc8, 0x95, 0xf2, 0x5d, 0xff, 0xe8, 0xc3, 0xb4, 0x23, 0x33, 0x5b, + 0xb3, 0x6e, 0xa9, 0x16, 0xcb, 0xa3, 0x6e, 0xbb, 0x58, 0xbd, 0xd6, 0xef, + 0xa5, 0x8b, 0xd1, 0xbc, 0x6f, 0xc5, 0x8b, 0x6e, 0xb1, 0x78, 0x44, 0xeb, + 0x17, 0x85, 0xa0, 0x2c, 0x5d, 0x9d, 0xac, 0x5f, 0x8e, 0x79, 0x7e, 0x2c, + 0x5f, 0xd3, 0xa0, 0x37, 0x7c, 0x58, 0xb0, 0xf0, 0xf5, 0xfe, 0x51, 0x7e, + 0xf4, 0xfc, 0x3e, 0x2c, 0x5f, 0xdc, 0x90, 0x66, 0x44, 0xb1, 0x7b, 0xa0, + 0xa0, 0xb1, 0x5d, 0x6a, 0x6b, 0x70, 0x13, 0xdc, 0x73, 0xb1, 0xe7, 0x6f, + 0x22, 0x7e, 0x15, 0x74, 0x2e, 0xbf, 0xe0, 0xa2, 0x83, 0x6b, 0x6f, 0x89, + 0x62, 0xe1, 0xc1, 0x62, 0xff, 0xfb, 0x02, 0xcd, 0xbd, 0xec, 0x09, 0xbc, + 0xc6, 0xac, 0x5f, 0xe8, 0x49, 0xf3, 0xef, 0x05, 0x8b, 0x0d, 0x62, 0xb4, + 0x78, 0xbe, 0x33, 0xac, 0x4c, 0x43, 0xe7, 0xc4, 0x30, 0x28, 0x4c, 0x5a, + 0x56, 0x2f, 0xba, 0x87, 0x3d, 0xac, 0x54, 0x6b, 0x37, 0x0e, 0x23, 0x7f, + 0xd9, 0xd9, 0x60, 0x00, 0xd0, 0x58, 0xb8, 0xfb, 0xac, 0x5f, 0xb6, 0x14, + 0x33, 0x65, 0x8b, 0xf9, 0xfb, 0xe0, 0xf0, 0x96, 0x2f, 0xee, 0xf2, 0x13, + 0xa0, 0x2c, 0x56, 0x1e, 0xeb, 0x17, 0x5f, 0x72, 0x75, 0xc5, 0x8b, 0xff, + 0xb6, 0xe0, 0x99, 0xe1, 0xcf, 0xb4, 0x16, 0x2d, 0x3d, 0x9f, 0x49, 0x11, + 0xd4, 0xa7, 0x15, 0x03, 0x9c, 0x19, 0xd4, 0x22, 0x3f, 0x08, 0x9b, 0xf7, + 0xde, 0x4b, 0x65, 0x8b, 0xff, 0xc5, 0x87, 0x3b, 0x40, 0x31, 0xfe, 0x7b, + 0x58, 0xbb, 0xe1, 0xac, 0x5f, 0xfb, 0x47, 0x14, 0x27, 0xfb, 0xc9, 0xd6, + 0x2d, 0xe5, 0x8a, 0x93, 0xd3, 0x1a, 0x0d, 0x32, 0x23, 0x44, 0xd9, 0x78, + 0x02, 0x1a, 0xc5, 0xf3, 0x8b, 0xaf, 0xc5, 0x8a, 0x23, 0xc5, 0xf0, 0xf5, + 0xe3, 0xb0, 0x16, 0x2f, 0x8a, 0x7b, 0x82, 0xc5, 0xc1, 0xec, 0xb1, 0x7f, 0xbd, 0xc1, 0x89, 0xb5, 0x05, 0x8a, 0x39, 0xe7, 0x90, 0xd5, 0xed, 0x34, 0x4b, 0x14, 0xe6, 0xfc, 0x44, 0x37, 0xdb, 0xb6, 0x80, 0xb1, 0x7e, 0x93, - 0xe7, 0x5e, 0x58, 0xb6, 0xd2, 0x79, 0xa4, 0x49, 0x60, 0x96, 0x2f, 0xfd, - 0xaf, 0xb6, 0x10, 0xa1, 0x9c, 0x58, 0xbf, 0xfe, 0xe8, 0x03, 0xfb, 0x43, - 0x38, 0x42, 0x60, 0xd6, 0x2a, 0x51, 0x46, 0xe2, 0x6c, 0x7d, 0x7c, 0x0c, - 0xd4, 0x4b, 0x17, 0xf9, 0xbd, 0xc0, 0xf9, 0x38, 0xb1, 0x7e, 0x7f, 0xc8, - 0x71, 0x2c, 0x5e, 0xf4, 0x9d, 0x62, 0x8c, 0x5c, 0x3d, 0x81, 0x40, 0xe1, - 0xb3, 0x8c, 0xfb, 0x90, 0xc5, 0x0b, 0x1d, 0x36, 0xfe, 0x19, 0x40, 0x2d, - 0x22, 0x4f, 0x1a, 0x77, 0x15, 0x5f, 0xfc, 0x6c, 0x97, 0xb3, 0x4f, 0xb3, - 0x1d, 0x62, 0xf9, 0xa0, 0x6b, 0xac, 0x52, 0xc7, 0xcd, 0x1d, 0xfe, 0x32, - 0x73, 0xee, 0x2d, 0xd6, 0x28, 0xd3, 0xd1, 0x00, 0xe5, 0xdd, 0xe7, 0x7a, - 0xb1, 0x7c, 0x4f, 0xee, 0x2c, 0x5e, 0x7c, 0xd2, 0xc5, 0xde, 0xe2, 0xc5, - 0xcd, 0xd2, 0xc5, 0x61, 0xb0, 0x21, 0x8b, 0x3e, 0x91, 0x1a, 0x72, 0x2f, - 0xa6, 0x5f, 0xb4, 0xc5, 0x92, 0xb1, 0x4a, 0x90, 0x6c, 0x74, 0xcb, 0x74, - 0x47, 0xf8, 0x57, 0xb1, 0xad, 0xd2, 0x4b, 0x17, 0xb1, 0xc6, 0xb1, 0x78, - 0x78, 0x75, 0x8b, 0x10, 0xcd, 0xcb, 0x8e, 0x5f, 0xa4, 0xbd, 0x9e, 0x58, - 0xbf, 0xff, 0x9b, 0xc3, 0xce, 0xe7, 0xd4, 0xfd, 0xb8, 0x58, 0x05, 0x8a, - 0x74, 0x54, 0x11, 0x28, 0x89, 0xef, 0xfc, 0x53, 0x9b, 0xfd, 0xfb, 0x36, - 0x96, 0x2a, 0x53, 0x65, 0x84, 0x3d, 0xfc, 0x5d, 0x70, 0x67, 0x58, 0xb8, - 0x50, 0x58, 0xbb, 0xdc, 0x58, 0xb6, 0xeb, 0x15, 0x26, 0xad, 0xc6, 0x2f, - 0x0a, 0x4e, 0xb1, 0x7f, 0x40, 0xa7, 0xdf, 0x95, 0x8b, 0x9f, 0x4b, 0x15, - 0x12, 0x37, 0x00, 0x32, 0x48, 0x7c, 0x1f, 0xf0, 0xef, 0x62, 0xdb, 0xf7, - 0xdf, 0x52, 0x35, 0x8b, 0xe3, 0xf7, 0x34, 0x4b, 0x17, 0xf8, 0x51, 0xf1, - 0x7c, 0x45, 0xe5, 0x8b, 0xff, 0x36, 0xc1, 0x96, 0x70, 0x85, 0xf5, 0x8b, - 0xe9, 0x38, 0x7b, 0x2c, 0x56, 0xe8, 0xed, 0x72, 0x8f, 0x93, 0xb1, 0xc9, - 0x20, 0x5f, 0xf3, 0xc1, 0xb8, 0x79, 0xcf, 0x2c, 0x5d, 0x0c, 0x58, 0xbf, - 0xcc, 0xfe, 0x8b, 0xe2, 0x35, 0x62, 0xa2, 0x3c, 0xdf, 0x8b, 0xdf, 0xfc, - 0x78, 0xce, 0x3f, 0x06, 0x2d, 0x4f, 0x16, 0x2f, 0xed, 0xa0, 0xfb, 0xc9, - 0xd6, 0x2f, 0xff, 0x1c, 0xb0, 0x12, 0x0c, 0x29, 0xc0, 0x96, 0x2a, 0x4f, - 0xe1, 0xcc, 0x2f, 0xdc, 0x8e, 0x16, 0x0d, 0x62, 0xa5, 0x3b, 0x5c, 0x84, - 0x2b, 0x91, 0xea, 0x18, 0x2c, 0x41, 0x73, 0x41, 0x62, 0xfc, 0xe6, 0xcf, - 0x25, 0x62, 0xff, 0xa1, 0x19, 0x9a, 0xdd, 0x9b, 0x75, 0x48, 0xc0, 0x54, - 0xa2, 0x2b, 0x42, 0xec, 0x51, 0x7b, 0xef, 0xf5, 0x8b, 0xe6, 0xf3, 0xf9, - 0x62, 0xf0, 0xdc, 0x96, 0x2a, 0x3c, 0xf6, 0xc4, 0x3a, 0x11, 0x15, 0xc0, - 0xe9, 0x62, 0xee, 0xfd, 0xd6, 0x2f, 0x43, 0x47, 0x58, 0xb9, 0xfe, 0xb1, - 0x74, 0x20, 0xb1, 0x7f, 0xb6, 0x6f, 0x00, 0x32, 0x82, 0xc5, 0xa5, 0x62, - 0xff, 0x7a, 0x13, 0xad, 0x4c, 0x16, 0x2e, 0xd9, 0xd6, 0x2f, 0xfa, 0x73, - 0x91, 0x7d, 0xc2, 0xf2, 0xc5, 0x62, 0x26, 0x1c, 0x44, 0x8d, 0x38, 0x31, - 0x77, 0x25, 0x62, 0xa5, 0x3d, 0x4d, 0x8c, 0xe0, 0x32, 0x31, 0xcc, 0x1e, - 0xdc, 0x5d, 0xc6, 0x1a, 0x19, 0xc2, 0x3a, 0xbc, 0x2f, 0x71, 0x62, 0xfe, - 0xf6, 0x44, 0x52, 0x75, 0x8b, 0xc1, 0x38, 0x16, 0x2f, 0xe3, 0xfd, 0xb5, - 0x3b, 0x2c, 0x5b, 0x16, 0x2a, 0x4f, 0x02, 0x38, 0xbe, 0xfb, 0x8c, 0x40, - 0x58, 0xbc, 0x53, 0xb2, 0xc5, 0xf6, 0x47, 0xbe, 0x96, 0x2f, 0xfd, 0x9d, - 0x43, 0xf3, 0xc3, 0x7f, 0x2b, 0x15, 0x04, 0xdc, 0xdc, 0x7a, 0x22, 0xef, - 0xaf, 0x00, 0x93, 0xbf, 0x22, 0x21, 0xde, 0xe2, 0x5b, 0xfb, 0xad, 0x48, - 0x6c, 0x4b, 0x17, 0xfa, 0x73, 0x5e, 0xf6, 0x71, 0x62, 0x98, 0xf8, 0x80, - 0x5f, 0x7e, 0x38, 0x7a, 0x6e, 0x2c, 0x5f, 0xe8, 0x36, 0xa2, 0xfb, 0xe9, - 0x62, 0xfc, 0xff, 0xe4, 0x0e, 0xb1, 0x7f, 0x85, 0xd6, 0x9e, 0x4f, 0x8b, - 0x17, 0xef, 0xbc, 0x96, 0xcb, 0x17, 0xfd, 0x3b, 0x78, 0xa4, 0x5e, 0xe2, - 0xc5, 0x7d, 0x12, 0xdc, 0x34, 0x8e, 0x28, 0xbe, 0x2c, 0xe4, 0xac, 0x54, - 0x49, 0xa4, 0x00, 0xd7, 0xd0, 0xbf, 0xec, 0x67, 0x7a, 0x0e, 0x05, 0x8b, - 0xe2, 0xcf, 0x3a, 0xc5, 0xfa, 0x4b, 0x77, 0x3a, 0xc5, 0x11, 0xe4, 0xf8, - 0x86, 0xe2, 0x95, 0x8b, 0xee, 0xb7, 0x73, 0x56, 0x2f, 0xcc, 0x6e, 0x7d, - 0x96, 0x2a, 0x55, 0x51, 0xe4, 0x6e, 0x51, 0x23, 0x33, 0x30, 0x08, 0x7c, - 0x2c, 0x22, 0x6b, 0xff, 0xb4, 0xdf, 0x0f, 0x0b, 0x22, 0x98, 0xf5, 0x8b, - 0xff, 0xd0, 0xfe, 0x10, 0x41, 0xeb, 0xef, 0x27, 0x58, 0xbf, 0x9f, 0xd8, - 0x79, 0xfa, 0xc5, 0xff, 0x38, 0x36, 0xfc, 0xf0, 0x5c, 0x58, 0xbf, 0xd0, - 0x6f, 0x71, 0xca, 0x56, 0x2d, 0x3a, 0x3e, 0xd2, 0x3b, 0xae, 0x93, 0x0c, - 0xd2, 0x67, 0xa1, 0x35, 0x7f, 0xf8, 0x98, 0x2c, 0xdf, 0xf3, 0xd4, 0x23, - 0xb1, 0x62, 0xe8, 0xf6, 0x58, 0xbf, 0xfc, 0x22, 0x63, 0x79, 0x9e, 0x92, - 0x70, 0x2c, 0x5f, 0xa2, 0xe7, 0x9f, 0x65, 0x8b, 0xfa, 0x0f, 0x13, 0x34, - 0x16, 0x29, 0xcf, 0x65, 0x8a, 0xef, 0xfd, 0x87, 0xcd, 0x67, 0x50, 0xcf, + 0xe7, 0x7e, 0x58, 0xb6, 0xd2, 0x79, 0xa4, 0x49, 0x7f, 0x4e, 0xa4, 0xf3, + 0x12, 0xc5, 0x82, 0x58, 0xbf, 0xf6, 0xbe, 0xd8, 0x42, 0x86, 0x71, 0x62, + 0xff, 0xfb, 0xb0, 0x0f, 0xed, 0x0c, 0xe1, 0x09, 0x83, 0x58, 0xa9, 0x45, + 0x1b, 0x89, 0xb1, 0xf5, 0xfa, 0x3f, 0xb8, 0x67, 0x96, 0x2f, 0x81, 0x9a, + 0x89, 0x62, 0xff, 0x37, 0xb8, 0x1f, 0x27, 0x16, 0x2f, 0xff, 0x7b, 0x99, + 0xa9, 0xc2, 0xfe, 0x01, 0x96, 0x2f, 0xbf, 0x21, 0xc4, 0xb1, 0x52, 0x7d, + 0xae, 0x91, 0x7b, 0xd2, 0x75, 0x8a, 0x31, 0x74, 0x62, 0x05, 0x03, 0x86, + 0xce, 0x33, 0x9a, 0x43, 0xb8, 0xec, 0x50, 0xb1, 0xd3, 0x69, 0xc9, 0xff, + 0x0d, 0x16, 0x2d, 0x01, 0x69, 0x12, 0x7a, 0x14, 0x3d, 0x44, 0x17, 0xff, + 0x1b, 0x25, 0xec, 0xd3, 0xec, 0xc7, 0x58, 0xbe, 0x68, 0x1a, 0xeb, 0x14, + 0xb1, 0xf3, 0x47, 0x7f, 0x8c, 0x9c, 0xfb, 0x8b, 0x75, 0x8a, 0x34, 0xf4, + 0x40, 0x39, 0x77, 0x59, 0xd6, 0xac, 0x5f, 0xf4, 0xc3, 0xec, 0x3f, 0xb6, + 0x96, 0x2f, 0x3f, 0xb8, 0xb1, 0x5a, 0x3d, 0x62, 0x39, 0xbc, 0xf9, 0xa5, + 0x8b, 0xbd, 0xc5, 0x8b, 0x9b, 0xb5, 0x8a, 0xc3, 0x60, 0x43, 0x16, 0x7d, + 0x22, 0x30, 0xe4, 0x3f, 0x4c, 0xbf, 0x69, 0x8b, 0x25, 0x62, 0xff, 0xb3, + 0x6f, 0xe7, 0x1f, 0x3b, 0x58, 0xa5, 0x48, 0x36, 0x3a, 0x77, 0x9a, 0x23, + 0xfc, 0x60, 0x8c, 0x6a, 0x44, 0xd7, 0x49, 0x2c, 0x5e, 0xc7, 0x1a, 0xc5, + 0xe1, 0xe1, 0xd6, 0x2c, 0x43, 0x37, 0x2e, 0x39, 0x7e, 0x92, 0xf6, 0x79, + 0x62, 0xff, 0xfe, 0x6f, 0x0f, 0x3a, 0x9f, 0x53, 0xf6, 0xe1, 0x60, 0x16, + 0x29, 0xd1, 0x50, 0x44, 0xa2, 0x27, 0xbf, 0xf1, 0x4e, 0x6f, 0xf7, 0xe8, + 0xda, 0x58, 0xa9, 0x4d, 0x96, 0x10, 0xf7, 0xf1, 0x75, 0xc2, 0x0d, 0x62, + 0xfe, 0xea, 0x9d, 0xff, 0x27, 0x58, 0xb1, 0xd6, 0x28, 0x47, 0x88, 0x19, + 0x95, 0xc2, 0x82, 0xc5, 0xde, 0xe2, 0xc5, 0xb7, 0x58, 0xa9, 0x35, 0x6e, + 0x31, 0x78, 0x52, 0x75, 0x8b, 0xfa, 0x05, 0x3e, 0xfc, 0xac, 0x5c, 0xfa, + 0x58, 0xad, 0x93, 0x43, 0x89, 0x74, 0x04, 0x64, 0x87, 0xc1, 0xff, 0x0e, + 0xf4, 0x2d, 0xbf, 0x7d, 0xf5, 0x23, 0x58, 0xbe, 0x3f, 0x53, 0x44, 0xb1, + 0x7f, 0x85, 0x1f, 0x17, 0xc4, 0x5e, 0x58, 0xbf, 0xf3, 0x6c, 0x19, 0x67, + 0x08, 0x5f, 0x58, 0xbe, 0x93, 0x87, 0xb2, 0xc5, 0x6e, 0x8e, 0xd7, 0x28, + 0xf9, 0x3b, 0x1c, 0x92, 0x05, 0xff, 0x3c, 0x1b, 0x87, 0x9c, 0xf2, 0xc5, + 0xd0, 0xc5, 0x8b, 0xfc, 0xcf, 0xe8, 0xbe, 0x23, 0x56, 0x2a, 0x23, 0xcd, + 0xf8, 0xbd, 0xff, 0xc7, 0x8c, 0xe3, 0xf0, 0x62, 0xd4, 0xf1, 0x62, 0xfe, + 0xda, 0x0f, 0xbc, 0x9d, 0x62, 0xff, 0xf1, 0xcb, 0x01, 0x20, 0xc2, 0x9c, + 0x09, 0x62, 0xa4, 0xfe, 0x1c, 0xc2, 0xfd, 0xc8, 0xe1, 0x60, 0xd6, 0x2a, + 0x53, 0xb5, 0xc8, 0x42, 0xb9, 0x1e, 0xa1, 0x82, 0xc4, 0x17, 0x34, 0x16, + 0x2f, 0xce, 0x6c, 0xf2, 0x56, 0x2f, 0xfa, 0x11, 0x99, 0xad, 0xd9, 0xb7, + 0x54, 0x8c, 0x05, 0x4a, 0x22, 0xb4, 0x2e, 0xc5, 0x17, 0xbe, 0xff, 0x58, + 0xbe, 0x6f, 0x3f, 0x96, 0x2f, 0x0d, 0xc9, 0x62, 0xa3, 0xcf, 0x6c, 0x43, + 0xa1, 0x11, 0x5c, 0x0e, 0xd6, 0x2e, 0xeb, 0xdd, 0x62, 0xf4, 0x34, 0x75, + 0x8b, 0x9f, 0xeb, 0x17, 0x42, 0x0b, 0x17, 0x9e, 0x12, 0xb1, 0x7e, 0xf0, + 0x03, 0x28, 0x2c, 0x5b, 0x61, 0x9e, 0x33, 0x0e, 0x5a, 0x56, 0x2f, 0xf7, + 0xa1, 0x3a, 0xd4, 0xc1, 0x62, 0xed, 0x9d, 0x62, 0xff, 0xa7, 0x39, 0x17, + 0xdc, 0x2f, 0x2c, 0x56, 0x22, 0x61, 0xc4, 0x48, 0xd3, 0x83, 0x16, 0x95, + 0x8b, 0x8b, 0x65, 0x8a, 0xe1, 0xa9, 0x10, 0x8d, 0x4a, 0xa3, 0xfd, 0x8c, + 0xe0, 0x32, 0x31, 0xcc, 0x1e, 0xdc, 0x5d, 0xd7, 0x9a, 0x18, 0x02, 0x63, + 0xbc, 0x2f, 0x71, 0x62, 0xfe, 0x17, 0xb9, 0xc7, 0x89, 0x62, 0xfd, 0x91, + 0x14, 0x9d, 0x62, 0x86, 0x7b, 0x1e, 0x30, 0xbc, 0x13, 0x81, 0x62, 0xfe, + 0x3f, 0xdb, 0x53, 0xb2, 0xc5, 0xb1, 0x62, 0xa4, 0xf0, 0x23, 0x8b, 0xee, + 0xcf, 0x2c, 0x5e, 0x62, 0x02, 0xc5, 0x1c, 0xd9, 0xf0, 0x5e, 0xf1, 0x4e, + 0xcb, 0x17, 0xd9, 0x1e, 0xfa, 0x58, 0xbf, 0xf6, 0x77, 0x0f, 0xcf, 0x0d, + 0xfc, 0xac, 0x54, 0x13, 0xf1, 0x77, 0x68, 0x88, 0xbe, 0xbc, 0x05, 0x7e, + 0xbc, 0x84, 0x87, 0x7a, 0x89, 0x6f, 0xee, 0xf5, 0x21, 0xb1, 0x2c, 0x5f, + 0xe9, 0xcd, 0x7b, 0xd9, 0xc5, 0x8a, 0x63, 0xe2, 0x01, 0x7d, 0xf8, 0xe1, + 0xe9, 0xb8, 0xb1, 0x7f, 0xa0, 0xda, 0x8b, 0xef, 0xa5, 0x8b, 0xf3, 0xff, + 0x90, 0x3a, 0xc5, 0xfe, 0x17, 0x7a, 0x79, 0x3e, 0x2c, 0x5f, 0xbe, 0xf2, + 0x5b, 0x2c, 0x5f, 0xf4, 0xed, 0xe2, 0x91, 0x7b, 0x8b, 0x15, 0xf4, 0x4b, + 0x70, 0xd2, 0x38, 0xa2, 0xf8, 0xb3, 0x92, 0xb1, 0x51, 0x26, 0x90, 0x03, + 0x5f, 0x42, 0xff, 0xa1, 0x9d, 0xe9, 0xd1, 0xab, 0x17, 0xa0, 0xe0, 0x58, + 0xbe, 0x2c, 0xf3, 0xac, 0x5f, 0xa4, 0xb7, 0x73, 0xac, 0x51, 0x1e, 0x4f, + 0x88, 0x6e, 0x29, 0x58, 0xbe, 0xef, 0x77, 0x35, 0x62, 0xfc, 0xc6, 0xe7, + 0xd9, 0x62, 0xa5, 0x56, 0x0e, 0x46, 0xe4, 0xe8, 0xd1, 0x0f, 0x33, 0x30, + 0x08, 0x7c, 0x2c, 0x22, 0x6b, 0xda, 0xf4, 0xac, 0x5f, 0xfb, 0x02, 0x38, + 0xbd, 0xf9, 0x17, 0x5e, 0xb1, 0x7f, 0xf6, 0x9b, 0xe1, 0xe1, 0x64, 0x53, + 0x1e, 0xb1, 0x7f, 0xfa, 0x1f, 0xc2, 0x08, 0x3d, 0x7d, 0xe4, 0xeb, 0x17, + 0xf3, 0xfb, 0x0f, 0x3f, 0x58, 0xbf, 0xa7, 0x7f, 0xbc, 0x5c, 0x58, 0xbf, + 0xa6, 0x1f, 0x78, 0xb8, 0xb1, 0x7f, 0xce, 0x0d, 0xbf, 0x3c, 0x17, 0x16, + 0x2f, 0xf4, 0x1b, 0xdc, 0x72, 0x95, 0x8b, 0x4e, 0x8f, 0xb4, 0x8e, 0xeb, + 0xb4, 0xda, 0xf4, 0x98, 0x72, 0xde, 0x18, 0x7a, 0x13, 0x97, 0xff, 0x89, + 0x82, 0xcd, 0xff, 0x3d, 0xc2, 0x3b, 0x16, 0x2e, 0x8f, 0x65, 0x8b, 0xff, + 0xc2, 0x26, 0x37, 0x99, 0xe9, 0x27, 0x02, 0xc5, 0xfa, 0x2e, 0x79, 0xf6, + 0x58, 0xbf, 0xa0, 0xf1, 0x33, 0x41, 0x62, 0x9c, 0xf6, 0x58, 0xae, 0xff, + 0x61, 0x0c, 0x73, 0x3d, 0x16, 0x2f, 0xfd, 0x87, 0xcd, 0x67, 0x70, 0xcf, 0x2c, 0x5f, 0xcf, 0xf7, 0x3e, 0x1a, 0xb1, 0x5f, 0x3e, 0xde, 0x1f, 0xdf, - 0xf3, 0x7f, 0x52, 0xf0, 0x6e, 0x2c, 0x5f, 0xfe, 0x6d, 0xbe, 0xf2, 0x59, - 0x13, 0xe9, 0xd6, 0x28, 0x6a, 0xf1, 0xb2, 0x35, 0x48, 0x8d, 0xf4, 0x9e, - 0x71, 0xaf, 0xc2, 0x8b, 0xd0, 0x8d, 0x11, 0x10, 0x47, 0x16, 0x25, 0x8b, - 0x47, 0x2c, 0x5f, 0xe9, 0x2f, 0x00, 0x32, 0x82, 0xc5, 0xf6, 0xef, 0x83, - 0x58, 0xa5, 0x8b, 0x6e, 0xb1, 0x84, 0xcb, 0x84, 0x04, 0x8b, 0xa0, 0x35, - 0x8b, 0xfe, 0x6e, 0x86, 0xe2, 0xef, 0xdf, 0x4b, 0x15, 0x1b, 0xa6, 0x31, - 0xb0, 0x8c, 0x05, 0x7a, 0x34, 0x72, 0xfd, 0x10, 0x1c, 0x63, 0x83, 0x17, - 0xe3, 0x66, 0x18, 0x35, 0x8b, 0xec, 0xf7, 0xf1, 0x62, 0xe6, 0x35, 0x62, - 0xec, 0x19, 0x1b, 0xa8, 0xe2, 0x2b, 0xa3, 0x6d, 0xd7, 0x28, 0x51, 0x77, - 0x80, 0xb1, 0x7c, 0x3f, 0xe6, 0xcb, 0x17, 0x77, 0x41, 0x62, 0xfc, 0xd9, - 0xec, 0x3a, 0xc5, 0xec, 0xeb, 0xcb, 0x15, 0xb1, 0xe2, 0x9a, 0x4f, 0x5b, - 0x23, 0x01, 0xc6, 0x34, 0x48, 0xcc, 0x17, 0xe0, 0xe3, 0x98, 0x80, 0xb1, - 0x7f, 0x67, 0xd8, 0x32, 0xf2, 0xc5, 0x6c, 0x7b, 0x43, 0x2c, 0xbf, 0xd1, - 0x66, 0x9f, 0x66, 0x3a, 0xc5, 0xfa, 0x34, 0x93, 0x47, 0x8b, 0x17, 0xf6, - 0x7b, 0xd3, 0xae, 0x2c, 0x5f, 0xfe, 0x72, 0x14, 0x33, 0x86, 0x37, 0x50, - 0xc5, 0x8b, 0xf9, 0x88, 0x1b, 0x03, 0xcb, 0x17, 0xe0, 0xfd, 0xc9, 0xf2, - 0xc5, 0x4a, 0x6b, 0x18, 0x47, 0xa3, 0x52, 0x2e, 0xf1, 0x74, 0x72, 0x58, - 0x65, 0xf6, 0x8c, 0x8d, 0xdd, 0x29, 0xdf, 0x78, 0x49, 0xdf, 0x52, 0x49, - 0x8d, 0x57, 0x68, 0xd3, 0xa0, 0xe6, 0x38, 0xec, 0x32, 0x72, 0x40, 0xd8, - 0x5d, 0xef, 0x1f, 0x37, 0x51, 0xdd, 0xbc, 0x62, 0x31, 0x46, 0x8d, 0xa8, - 0xff, 0x4f, 0x0d, 0xbf, 0xca, 0x5d, 0x68, 0xfd, 0x41, 0x0d, 0xb2, 0x95, - 0x89, 0xc9, 0xc3, 0x0f, 0x47, 0x52, 0x27, 0x8e, 0xcc, 0x61, 0x17, 0x47, - 0x43, 0xac, 0x38, 0xfb, 0xaf, 0x1c, 0x5a, 0x48, 0xbb, 0x9c, 0x58, 0xbf, - 0xf3, 0x42, 0x33, 0x35, 0xbb, 0x36, 0xea, 0x91, 0x8c, 0xba, 0x7b, 0x96, - 0x2e, 0xd6, 0x2c, 0x5a, 0x74, 0x6c, 0x7e, 0x35, 0x7f, 0xb0, 0xde, 0x7e, - 0x4b, 0xcb, 0x17, 0xde, 0x84, 0x9a, 0xb1, 0x44, 0x7b, 0x01, 0x9a, 0x5a, - 0x31, 0xd3, 0x57, 0xd0, 0xf1, 0xc6, 0x3f, 0x08, 0x1e, 0x3f, 0x5e, 0x00, - 0x70, 0x58, 0xbe, 0xdb, 0x71, 0x12, 0xc5, 0xf0, 0xdf, 0xb4, 0x67, 0x47, - 0x88, 0x18, 0xfd, 0xe6, 0x63, 0x56, 0x2f, 0xfa, 0x37, 0x8d, 0xfe, 0xf2, - 0x76, 0x1a, 0xc5, 0xbb, 0xd5, 0x8b, 0x82, 0x09, 0x62, 0xbb, 0xe1, 0xb1, - 0x08, 0x5e, 0xfd, 0x1b, 0xc6, 0xd1, 0xb4, 0x6f, 0x1b, 0x2c, 0x5f, 0xdd, - 0xec, 0x6f, 0xdf, 0x21, 0x0f, 0xac, 0x5e, 0xef, 0xb8, 0x0d, 0x62, 0xa3, - 0x73, 0xe5, 0x8d, 0x48, 0x17, 0xf6, 0xb4, 0x22, 0xcf, 0xac, 0x5d, 0x1a, - 0xe3, 0x45, 0x8b, 0xe9, 0x27, 0xfa, 0xc5, 0xf4, 0xed, 0x3a, 0x58, 0xbf, - 0xdc, 0x90, 0x37, 0x98, 0xd5, 0x8b, 0xde, 0x98, 0x96, 0x2f, 0xa6, 0x27, - 0x3a, 0xc5, 0xff, 0x8b, 0x05, 0xb9, 0x66, 0xc1, 0xc1, 0x62, 0xe1, 0xe2, - 0xc5, 0x9c, 0x8f, 0x63, 0xb9, 0x06, 0xb1, 0x14, 0x9a, 0x7b, 0xbb, 0xf2, - 0xb1, 0x7e, 0x93, 0xcf, 0x5c, 0x58, 0xbe, 0xe4, 0xea, 0x56, 0x2f, 0xb6, - 0x10, 0xe3, 0xd6, 0x2f, 0x82, 0x92, 0x95, 0x8b, 0xfc, 0xe0, 0x33, 0x22, - 0x93, 0xac, 0x54, 0x9e, 0xbf, 0x71, 0x15, 0x0d, 0x53, 0x0b, 0x90, 0xc7, - 0x91, 0xc4, 0x69, 0xa8, 0x61, 0x7c, 0x88, 0x85, 0xfc, 0x52, 0x19, 0x17, - 0x73, 0xfd, 0xa0, 0xb1, 0x7e, 0x3c, 0xe7, 0xb8, 0xb1, 0x7e, 0xe3, 0x97, - 0x50, 0x58, 0xbb, 0x22, 0x58, 0xb0, 0x46, 0x1e, 0x0e, 0x14, 0xd4, 0x68, + 0xf3, 0x7f, 0x52, 0xf0, 0x6e, 0x2c, 0x5f, 0xbf, 0x3d, 0xb0, 0xd6, 0x2f, + 0xfe, 0xdb, 0xef, 0x25, 0x91, 0x3e, 0x9d, 0x62, 0xb0, 0xfb, 0x58, 0xa6, + 0xa5, 0x74, 0x6b, 0x61, 0xd1, 0xa3, 0x64, 0x76, 0x71, 0x28, 0xe9, 0x3c, + 0xe3, 0x5f, 0x85, 0x17, 0x08, 0x3d, 0x0a, 0x11, 0x11, 0x05, 0x0a, 0x5b, + 0x12, 0xc5, 0xa3, 0x96, 0x2f, 0xf4, 0x97, 0x80, 0x19, 0x41, 0x62, 0xff, + 0xa2, 0x29, 0x3f, 0xde, 0x2e, 0x2c, 0x5f, 0x6e, 0xf8, 0x35, 0x8a, 0x58, + 0xb6, 0xeb, 0x18, 0x4c, 0xb8, 0x40, 0x48, 0xba, 0x03, 0x58, 0xbf, 0xfd, + 0x90, 0xfb, 0x40, 0x3f, 0x0a, 0x73, 0x65, 0x8b, 0xfe, 0x6e, 0xc6, 0xe2, + 0xeb, 0xdf, 0x4b, 0x15, 0x1b, 0xa7, 0x3f, 0xb0, 0x8c, 0x05, 0x70, 0xd3, + 0xb3, 0xb7, 0x2f, 0xd1, 0x01, 0xc6, 0x00, 0x31, 0xc4, 0xcb, 0xe9, 0x86, + 0x0d, 0x62, 0xe1, 0x12, 0xc5, 0x1a, 0x6e, 0x74, 0x45, 0x7d, 0x9e, 0xfe, + 0x2c, 0x5c, 0xc6, 0xac, 0x5d, 0x83, 0x23, 0x75, 0x1c, 0x45, 0x74, 0x6d, + 0xba, 0xe5, 0x0a, 0x2e, 0xf0, 0x16, 0x2f, 0x87, 0xec, 0xfa, 0xc5, 0xf0, + 0xff, 0x9b, 0x2c, 0x5d, 0xd5, 0x05, 0x8b, 0xda, 0x68, 0x2c, 0x5f, 0x67, + 0xb0, 0xeb, 0x15, 0xa3, 0x7e, 0xc3, 0xb7, 0xb3, 0xbf, 0x2c, 0x56, 0xc6, + 0xf8, 0xd2, 0x0a, 0xd9, 0x31, 0xac, 0x18, 0x72, 0x3d, 0x12, 0x34, 0x26, + 0x2f, 0xc1, 0xc7, 0x31, 0x01, 0x62, 0xfe, 0xcf, 0xb0, 0x65, 0xe5, 0x8a, + 0xd8, 0xf6, 0x86, 0x59, 0x7f, 0xa2, 0xcd, 0x3e, 0xcc, 0x75, 0x8b, 0xf4, + 0x69, 0x26, 0x8f, 0x16, 0x2f, 0xfb, 0x22, 0xd4, 0xe0, 0xda, 0x0b, 0x17, + 0xf6, 0x7b, 0xd3, 0xae, 0x2c, 0x5f, 0xfe, 0x72, 0x14, 0x33, 0x86, 0x37, + 0x70, 0xc5, 0x8b, 0xf1, 0x03, 0x60, 0x79, 0x62, 0xe7, 0x35, 0x62, 0x98, + 0xf0, 0x84, 0x55, 0x7e, 0x0f, 0xdc, 0x9f, 0x2c, 0x54, 0xa7, 0x8b, 0x84, + 0x7a, 0x35, 0x39, 0x71, 0x1c, 0xf8, 0xba, 0x3a, 0x11, 0xa1, 0x90, 0xda, + 0x32, 0x37, 0x75, 0x82, 0xbd, 0x61, 0x27, 0x5d, 0x49, 0x26, 0x38, 0x3d, + 0xa3, 0x89, 0x83, 0xc8, 0xe3, 0xb0, 0xc9, 0xd6, 0xb3, 0x61, 0xcf, 0xbc, + 0xa7, 0x5e, 0xe3, 0xc8, 0x78, 0xde, 0x22, 0x8d, 0x57, 0x51, 0xfe, 0x9e, + 0x1b, 0x7f, 0x95, 0x90, 0xd2, 0x9d, 0x01, 0x0d, 0xb2, 0x95, 0xc5, 0xc9, + 0xd9, 0x0f, 0x4a, 0x5d, 0x14, 0x32, 0xba, 0x2e, 0x04, 0x5d, 0x1d, 0x1a, + 0x28, 0x72, 0x9b, 0x6f, 0xe7, 0x83, 0xf9, 0xbe, 0xb1, 0x78, 0xe2, 0xd2, + 0x45, 0xdc, 0xe2, 0xc5, 0xff, 0x9a, 0x11, 0x99, 0xad, 0xd9, 0xb7, 0x54, + 0x8c, 0x65, 0xd3, 0xd4, 0xb1, 0x76, 0xb1, 0x62, 0xd3, 0xa3, 0x63, 0xf1, + 0xab, 0xfd, 0x86, 0xf3, 0xf2, 0x5e, 0x58, 0xbe, 0xf4, 0x24, 0xd5, 0x8a, + 0x23, 0xd8, 0x0c, 0xd2, 0xd1, 0x92, 0x9c, 0x23, 0x96, 0xe8, 0x78, 0xe3, + 0x1f, 0x84, 0x0f, 0x1f, 0xaf, 0x00, 0x38, 0x2c, 0x5f, 0x6d, 0xb8, 0x89, + 0x62, 0xf8, 0x6f, 0xd2, 0x33, 0xb3, 0xc4, 0x0c, 0x7e, 0xf3, 0x31, 0xab, + 0x17, 0xfd, 0x1b, 0xc6, 0xff, 0x79, 0x3b, 0x0d, 0x62, 0xff, 0xba, 0xce, + 0xa0, 0xe3, 0xb0, 0xf0, 0x95, 0x8b, 0x75, 0xab, 0x17, 0x04, 0x12, 0xc5, + 0x75, 0xa7, 0xef, 0xd7, 0x11, 0x82, 0x17, 0xbf, 0x46, 0xf1, 0xb4, 0x6d, + 0x1b, 0xc6, 0xcb, 0x17, 0xf7, 0x5b, 0x1b, 0xf5, 0xc8, 0x43, 0xeb, 0x16, + 0xeb, 0xb5, 0x8b, 0xdd, 0x77, 0x01, 0xac, 0x54, 0x6e, 0x7f, 0xdd, 0x6a, + 0x04, 0x6a, 0x19, 0xbf, 0xb5, 0xa1, 0x16, 0x7d, 0x62, 0xe8, 0xd7, 0x1a, + 0x2c, 0x5f, 0xfe, 0x7f, 0x79, 0xa7, 0xd9, 0xf9, 0x70, 0x2c, 0x5f, 0x49, + 0x3f, 0xd6, 0x2f, 0xa7, 0x69, 0xd2, 0xc5, 0xfe, 0xe4, 0x81, 0xbc, 0xc6, + 0xac, 0x5e, 0xf4, 0xc4, 0xb1, 0x7d, 0x31, 0x39, 0xd6, 0x2f, 0xfc, 0x58, + 0x2d, 0xcb, 0x36, 0x0e, 0x0b, 0x17, 0x0f, 0x16, 0x2c, 0xe4, 0x7b, 0x1d, + 0x48, 0x35, 0x88, 0xa4, 0xd3, 0xdd, 0xdf, 0x95, 0x8b, 0xf4, 0x9e, 0x7b, + 0xe2, 0xc5, 0xd3, 0xda, 0xc5, 0xe9, 0xd4, 0xac, 0x56, 0x8d, 0xa7, 0x06, + 0x2f, 0xf3, 0x45, 0x09, 0x26, 0xed, 0x62, 0xfb, 0x61, 0x0e, 0x3d, 0x62, + 0xf8, 0x29, 0x29, 0x58, 0xbf, 0xce, 0x03, 0x32, 0x29, 0x3a, 0xc5, 0x49, + 0xeb, 0xf5, 0x11, 0x54, 0x15, 0x88, 0x0d, 0x21, 0xc8, 0x63, 0xc8, 0xe2, + 0x34, 0xd4, 0x30, 0xbe, 0x44, 0x42, 0xfe, 0x5d, 0xe8, 0x42, 0x19, 0xa7, + 0x53, 0xfd, 0xa0, 0xb1, 0x7e, 0x3c, 0xe7, 0xb8, 0xb1, 0x7e, 0xe3, 0x97, + 0x70, 0x58, 0xbb, 0x22, 0x58, 0xb0, 0x46, 0x1e, 0x0e, 0x14, 0xd4, 0x68, 0x8a, 0x41, 0x89, 0x63, 0x4d, 0xfe, 0xfc, 0xeb, 0x60, 0xc4, 0x05, 0x8b, - 0xfa, 0x1f, 0x9e, 0xc3, 0x95, 0x8b, 0xdd, 0x8f, 0xc5, 0x8b, 0xe7, 0x0b, - 0x3e, 0xb1, 0x7b, 0x66, 0x25, 0x8a, 0xc4, 0x48, 0x1a, 0x61, 0xf2, 0x01, - 0x11, 0xdf, 0xee, 0xc3, 0x9c, 0x83, 0x92, 0xc5, 0xfd, 0x3c, 0xcf, 0xbf, - 0x65, 0x8a, 0x73, 0xe3, 0x11, 0xa5, 0xff, 0xff, 0x0b, 0x7d, 0x67, 0x69, + 0xf7, 0xe7, 0xa0, 0xe5, 0x62, 0xff, 0x6b, 0x61, 0x89, 0xb5, 0x05, 0x8b, + 0xfd, 0x3b, 0x0c, 0x4d, 0xa8, 0x2c, 0x54, 0x11, 0x2b, 0x85, 0x5c, 0x36, + 0xbd, 0xd0, 0xfc, 0x58, 0xbd, 0x1f, 0x27, 0x58, 0xbe, 0x70, 0xb3, 0xeb, + 0x17, 0xb6, 0x62, 0x58, 0xac, 0x45, 0x79, 0xa5, 0xee, 0x41, 0xf2, 0x01, + 0x11, 0xdf, 0xee, 0x83, 0x9c, 0x83, 0x92, 0xc5, 0xfd, 0x3c, 0xcf, 0xbf, + 0x45, 0x8a, 0x73, 0xe3, 0x11, 0xa5, 0xff, 0xff, 0x0b, 0x7d, 0x67, 0x49, 0x2f, 0x68, 0x5b, 0x7e, 0x7d, 0xc7, 0x58, 0xbf, 0xf6, 0xdf, 0xc8, 0xbf, 0x23, 0xcd, 0xd6, 0x29, 0xd1, 0x5a, 0x26, 0xbb, 0x9b, 0x8b, 0x17, 0xc6, - 0x7b, 0x3e, 0xb1, 0x5f, 0x37, 0x7c, 0x17, 0xbf, 0xff, 0x9f, 0xaf, 0x73, + 0x7b, 0x3e, 0xb1, 0x5f, 0x37, 0x7c, 0x17, 0xbf, 0xff, 0x9f, 0xbf, 0x73, 0x6d, 0x67, 0x0c, 0xcd, 0xfe, 0x28, 0xf5, 0x8a, 0x94, 0x42, 0xe8, 0x86, 0xfd, 0xe2, 0x9f, 0x71, 0x62, 0xdb, 0x2c, 0x5a, 0x40, 0x6e, 0xc8, 0xa2, 0xff, 0xff, 0xfa, 0x1c, 0xfe, 0x08, 0x2e, 0x7f, 0x37, 0xce, 0x19, 0x9d, - 0x43, 0x8e, 0x4e, 0xb1, 0x7d, 0xe3, 0x5f, 0x4b, 0x17, 0x99, 0xb7, 0x54, - 0x96, 0x25, 0xf3, 0x07, 0x26, 0xac, 0x5f, 0x1e, 0x79, 0x8b, 0x15, 0xb9, - 0xf8, 0x68, 0xa8, 0x04, 0x97, 0xef, 0xb9, 0xe7, 0x4b, 0x17, 0xff, 0x84, - 0xdb, 0x6b, 0x0f, 0xf9, 0xd8, 0x84, 0xb1, 0x4e, 0x7e, 0x84, 0x51, 0x7f, - 0x31, 0xc3, 0x1f, 0xe5, 0x62, 0xfe, 0x86, 0x70, 0x1d, 0x01, 0x62, 0x98, - 0xf7, 0xc4, 0x5f, 0x7e, 0xdb, 0xe4, 0xc0, 0x58, 0xbf, 0xa7, 0xf9, 0xf7, - 0xee, 0x58, 0xa9, 0x3d, 0x90, 0x14, 0xdf, 0xec, 0xf3, 0x10, 0x32, 0x3d, - 0x62, 0xff, 0xb3, 0xc5, 0x82, 0x92, 0xf2, 0xc5, 0x70, 0xfb, 0x23, 0x8d, - 0x6f, 0xed, 0x6d, 0xee, 0x30, 0x16, 0x2f, 0xf9, 0x8b, 0x76, 0x21, 0x67, - 0xd6, 0x2f, 0xec, 0xe0, 0x33, 0x06, 0xb1, 0x4c, 0x7c, 0xa4, 0x71, 0x50, - 0x5e, 0x4b, 0x1c, 0x33, 0x8d, 0x87, 0x16, 0xeb, 0xbd, 0x12, 0xbc, 0x20, - 0x75, 0x09, 0x4f, 0xc2, 0x90, 0x9f, 0xf8, 0xf5, 0xe8, 0x46, 0x88, 0x97, - 0xb4, 0x25, 0x6f, 0xed, 0x77, 0x7b, 0x08, 0x0b, 0x17, 0xfd, 0xee, 0x16, - 0x76, 0x2c, 0xe2, 0xc5, 0x49, 0xf5, 0x88, 0xc6, 0xfb, 0xc5, 0x9d, 0xcb, - 0x17, 0x9c, 0x43, 0x58, 0xbf, 0xfa, 0x7a, 0xfe, 0x6f, 0x3a, 0xea, 0x1c, - 0x58, 0xa3, 0x51, 0x56, 0xe4, 0x31, 0xe4, 0xa2, 0x1d, 0xbf, 0xf8, 0xbc, - 0x68, 0xa4, 0xb3, 0x79, 0xd2, 0xc5, 0xf9, 0xfb, 0xf6, 0x16, 0xeb, 0x17, - 0x6d, 0xdf, 0xac, 0x5f, 0xff, 0xfd, 0x9b, 0x8c, 0x5b, 0x06, 0x4d, 0xe9, - 0x03, 0xc1, 0xfc, 0x52, 0x05, 0x8a, 0xc4, 0x48, 0xf8, 0x7a, 0xa5, 0x1c, - 0x2f, 0x0b, 0xfb, 0xfd, 0xad, 0xbd, 0xc6, 0xeb, 0x75, 0x8b, 0xff, 0xe3, - 0xf6, 0xcd, 0x69, 0xfb, 0x71, 0xc4, 0xda, 0x58, 0xa9, 0x4f, 0x63, 0xf1, - 0x93, 0x31, 0x30, 0x8e, 0x2f, 0xef, 0x61, 0x48, 0x51, 0xcb, 0x17, 0xff, - 0xd3, 0x9c, 0xc2, 0x33, 0x8f, 0x1d, 0x24, 0x05, 0x8a, 0xc4, 0x41, 0x11, - 0x8d, 0xff, 0x89, 0x8e, 0x13, 0x0e, 0x7a, 0xe2, 0xc5, 0xf3, 0xc4, 0xe1, - 0x2c, 0x5f, 0xbc, 0x4c, 0x0e, 0x2c, 0x5d, 0x3a, 0x81, 0xe6, 0x1a, 0x49, - 0x7f, 0xf3, 0x9f, 0x86, 0x7d, 0xfc, 0x52, 0x75, 0x8a, 0x82, 0x64, 0x00, - 0x21, 0xe4, 0x23, 0x3c, 0x5d, 0x7f, 0x76, 0xce, 0xe7, 0x28, 0x96, 0x2f, - 0xf7, 0x3e, 0xf1, 0xe2, 0x61, 0xac, 0x5f, 0x37, 0x9b, 0x75, 0x8b, 0xfe, - 0x9e, 0xcd, 0xad, 0xfe, 0xdd, 0xcb, 0x16, 0x95, 0x8b, 0xe6, 0x3e, 0x12, - 0xc5, 0x49, 0xb2, 0xf8, 0x8d, 0xff, 0xff, 0xff, 0xdd, 0x0c, 0x84, 0xd1, - 0xe2, 0x91, 0xb1, 0x03, 0xf9, 0xec, 0x3f, 0xd8, 0x5d, 0xfe, 0x43, 0xdc, - 0xc5, 0x8b, 0xfc, 0xf3, 0xb9, 0x63, 0xec, 0xb1, 0x50, 0x4f, 0xe3, 0xa3, - 0x33, 0x9b, 0xfc, 0x8f, 0xce, 0x22, 0x20, 0xee, 0x85, 0x3d, 0xfc, 0x5e, - 0xfe, 0x01, 0x96, 0x2f, 0x85, 0xdf, 0xc7, 0x3a, 0xc5, 0x49, 0xec, 0x39, - 0x6d, 0xff, 0x77, 0x08, 0xfe, 0xea, 0x13, 0xf5, 0x8b, 0xf6, 0x6c, 0x76, - 0xf2, 0xc5, 0x39, 0xf4, 0x11, 0xfd, 0xf3, 0x7c, 0x33, 0xac, 0x5f, 0x49, - 0xdb, 0xcb, 0x17, 0xc7, 0x10, 0x22, 0x58, 0xa8, 0x26, 0x27, 0x90, 0x88, - 0x62, 0x0e, 0x12, 0x08, 0x8a, 0xfe, 0x22, 0xc0, 0x07, 0xd2, 0xc5, 0xf7, - 0xb3, 0xa8, 0x96, 0x2b, 0x0f, 0x53, 0xb8, 0xbe, 0xed, 0x4a, 0xc5, 0xe8, - 0x9c, 0xd5, 0x8a, 0x88, 0xdb, 0x70, 0x5e, 0xe8, 0xe1, 0xac, 0x5f, 0xa4, - 0xfb, 0x60, 0x4b, 0x17, 0xec, 0x1f, 0x3f, 0x2b, 0x17, 0x8f, 0x3a, 0x58, - 0xb8, 0x61, 0x2c, 0x5f, 0xff, 0xff, 0xe6, 0xf7, 0xb3, 0xfc, 0x68, 0x39, - 0x7a, 0x19, 0xac, 0xe6, 0x7d, 0xb6, 0x29, 0x82, 0xc5, 0xef, 0x4c, 0x4b, - 0x15, 0x29, 0xe4, 0xe2, 0xd6, 0xe4, 0x4e, 0x37, 0xa2, 0xa0, 0x14, 0x10, - 0xef, 0x06, 0x43, 0x84, 0x65, 0xff, 0xa2, 0xeb, 0xce, 0x3c, 0x2c, 0x3a, - 0xc5, 0xfc, 0x28, 0xed, 0xfe, 0xfd, 0xfa, 0xc5, 0xf7, 0x50, 0x9f, 0xac, - 0x5f, 0xee, 0x0f, 0xf9, 0xb8, 0xa3, 0xd6, 0x2d, 0x9c, 0x3d, 0xd1, 0x12, - 0x5d, 0x3d, 0x96, 0x2b, 0xe7, 0x80, 0x44, 0xf7, 0xe7, 0x19, 0x60, 0x96, - 0x2f, 0xff, 0xa4, 0xcc, 0x1f, 0xf3, 0x5d, 0x49, 0x7b, 0x8b, 0x15, 0xf3, - 0xf8, 0x11, 0x3d, 0xfe, 0x89, 0xb1, 0xe0, 0x19, 0xd6, 0x28, 0x68, 0xf0, - 0xde, 0x13, 0x2e, 0x45, 0x7f, 0xba, 0x84, 0x50, 0x6d, 0x6c, 0xb1, 0x73, - 0x12, 0xc5, 0xfd, 0xa7, 0x1b, 0xe7, 0x4b, 0x17, 0xd0, 0xf3, 0xec, 0xb1, - 0x52, 0x8a, 0x0d, 0x8e, 0x30, 0x59, 0x8b, 0xaf, 0xff, 0xf4, 0x9c, 0xd3, - 0x5b, 0xaf, 0xcb, 0xfb, 0x8e, 0x5d, 0x41, 0x62, 0xff, 0xfb, 0xd3, 0xbb, - 0xf9, 0xce, 0x67, 0x18, 0x63, 0x58, 0xbf, 0xfc, 0x03, 0xb7, 0x5e, 0xd6, - 0x3f, 0xe4, 0x6b, 0x14, 0xe8, 0x9d, 0xe2, 0x95, 0x4a, 0xbf, 0x8c, 0x8f, - 0x15, 0xe1, 0xab, 0xf3, 0xb6, 0x8c, 0x06, 0xe8, 0x79, 0x62, 0xf9, 0xce, - 0xd0, 0x58, 0xbf, 0xa4, 0x07, 0x9e, 0x12, 0xc5, 0xfd, 0x9b, 0x61, 0x64, - 0x16, 0x2e, 0x98, 0x96, 0x2f, 0xff, 0xe9, 0xee, 0xe4, 0xe9, 0xc3, 0xf9, - 0x91, 0x4e, 0xb6, 0x95, 0x8a, 0x94, 0xc3, 0xa0, 0x30, 0xe4, 0x5a, 0x2d, - 0x01, 0x69, 0x0c, 0x5f, 0xff, 0xcd, 0xf8, 0xcf, 0xbc, 0x9d, 0x87, 0xc6, - 0xd9, 0xb4, 0xb1, 0x7f, 0xf7, 0x3f, 0x9d, 0xcf, 0xe7, 0x87, 0x04, 0xb1, - 0x7f, 0x1f, 0xc2, 0x6d, 0xa5, 0x62, 0xce, 0x62, 0x35, 0x7a, 0x5e, 0x0d, - 0x22, 0xfe, 0x7f, 0x42, 0x7c, 0xeb, 0x16, 0x82, 0xc5, 0xe1, 0x75, 0x8b, - 0x17, 0xfb, 0x4e, 0x2d, 0x81, 0xc8, 0x2c, 0x5f, 0xd9, 0xd0, 0x33, 0xdc, - 0x58, 0xbf, 0x85, 0x25, 0xd4, 0x38, 0xb1, 0xf3, 0x5f, 0x7f, 0x1c, 0x5d, - 0x43, 0x91, 0xeb, 0x17, 0xd3, 0xf6, 0x8f, 0x58, 0xb4, 0x24, 0xf6, 0x48, - 0xd2, 0xfb, 0xff, 0xcd, 0x2c, 0x5f, 0xfc, 0xda, 0xdb, 0xef, 0xac, 0x2e, - 0xb7, 0x58, 0xba, 0x76, 0x58, 0xa8, 0x1e, 0xfb, 0xa3, 0xdf, 0xfa, 0x79, - 0x2f, 0xd7, 0xbd, 0x27, 0x58, 0xb9, 0xa2, 0x58, 0xa1, 0x9e, 0xb9, 0xa7, - 0xf7, 0xf4, 0x85, 0x11, 0x48, 0xd6, 0x2f, 0xfe, 0x2c, 0xe3, 0x80, 0xc9, - 0xda, 0x78, 0xb1, 0x5b, 0x2a, 0xd2, 0x18, 0xf6, 0xec, 0xbd, 0x42, 0x61, - 0xc9, 0xa2, 0x84, 0x16, 0x9e, 0x3c, 0x47, 0xd8, 0xbe, 0xfd, 0xbf, 0xe4, - 0x8d, 0x58, 0xbf, 0xe6, 0xf7, 0xe4, 0x27, 0x9f, 0x2c, 0x54, 0xab, 0xd6, - 0xc9, 0x5c, 0x8d, 0x08, 0xf1, 0x15, 0x5f, 0x1d, 0xba, 0xf2, 0xc5, 0xff, - 0xdb, 0x4f, 0x8c, 0x0f, 0x70, 0xfb, 0x83, 0xe2, 0xc5, 0xff, 0xcd, 0x1f, - 0x84, 0xc3, 0x6c, 0xeb, 0xcb, 0x17, 0xfd, 0xa9, 0xe3, 0x68, 0xa6, 0x0b, - 0x17, 0x4c, 0x16, 0x2b, 0x48, 0xe5, 0xfa, 0x87, 0x64, 0x6e, 0xe3, 0x8b, - 0xd0, 0x6d, 0x96, 0x2f, 0x19, 0xb1, 0xd6, 0x2f, 0xcc, 0xc5, 0xb1, 0xd6, - 0x2f, 0xf9, 0xba, 0x83, 0xff, 0xed, 0x1e, 0xb1, 0x7f, 0xdf, 0x0c, 0x71, - 0x93, 0xbe, 0x76, 0x58, 0xbf, 0x3e, 0x8a, 0x42, 0x58, 0xa1, 0x9f, 0x4b, - 0x20, 0xdf, 0x60, 0xd8, 0x0b, 0x17, 0xe9, 0xd8, 0xa7, 0x65, 0x8a, 0x39, - 0xe5, 0x91, 0x15, 0xbc, 0xb1, 0x7f, 0x9b, 0x62, 0xcf, 0x60, 0x16, 0x2f, - 0xfc, 0x6f, 0x39, 0x9f, 0x7e, 0x0b, 0x65, 0x8a, 0x1a, 0x21, 0xf0, 0x48, - 0x46, 0x77, 0xfb, 0xed, 0xb7, 0xbd, 0x81, 0x2c, 0x54, 0x6c, 0xaf, 0x43, - 0x23, 0x09, 0xe9, 0x09, 0xc7, 0xa2, 0x20, 0xd1, 0x47, 0xe1, 0x4c, 0xcd, - 0x85, 0x0a, 0x81, 0x17, 0xdf, 0x4c, 0x53, 0xb2, 0xc5, 0xf0, 0xd8, 0x80, - 0xb1, 0x7f, 0xe2, 0x61, 0xfe, 0x7b, 0x7d, 0x89, 0x62, 0xf9, 0xb8, 0x67, - 0xd6, 0x2f, 0xff, 0x43, 0x0b, 0xc2, 0xfb, 0xf7, 0x77, 0x4c, 0x7a, 0xc5, - 0xff, 0xff, 0xec, 0x3e, 0x68, 0x00, 0x17, 0x3e, 0xfe, 0x86, 0x7d, 0x80, - 0xe3, 0x95, 0x8b, 0x47, 0xac, 0x5f, 0x7d, 0xd8, 0x0b, 0x15, 0x26, 0xdf, - 0x82, 0xb7, 0x7c, 0x4b, 0x17, 0xff, 0xfb, 0x37, 0x30, 0x85, 0xdc, 0x66, - 0x75, 0x0c, 0x11, 0x03, 0x8b, 0x17, 0x43, 0x8b, 0x15, 0xb2, 0x20, 0x19, - 0xa2, 0xa5, 0x17, 0x62, 0x84, 0xc5, 0xff, 0xed, 0xb3, 0xaf, 0x71, 0xca, - 0x40, 0xc7, 0x58, 0xbf, 0xdd, 0x16, 0x0f, 0xec, 0x12, 0xc5, 0x62, 0x20, - 0x19, 0x2e, 0xb6, 0x56, 0x9b, 0x02, 0x41, 0x91, 0x1a, 0x7f, 0xd1, 0x27, - 0xd4, 0xda, 0x15, 0xc5, 0x0d, 0xbe, 0x42, 0x9e, 0xfb, 0xd0, 0x97, 0x58, - 0xbf, 0xc3, 0xdb, 0x02, 0xcf, 0xb2, 0xc5, 0xe1, 0x48, 0x16, 0x2f, 0xe2, - 0xce, 0xa1, 0x1f, 0x12, 0xc5, 0x68, 0xf4, 0x3e, 0x3b, 0x58, 0x8a, 0x76, - 0x84, 0x2d, 0xfd, 0xb4, 0x50, 0x8d, 0xb5, 0xb2, 0xc5, 0xf1, 0x16, 0x79, - 0x62, 0xf0, 0xb5, 0xb2, 0xc5, 0xf9, 0xe3, 0xf5, 0xa7, 0x58, 0xbd, 0xf7, - 0x3a, 0xc5, 0x46, 0xe8, 0xc0, 0x93, 0x8c, 0x21, 0xf8, 0xf8, 0x8a, 0xef, - 0xfb, 0x22, 0x83, 0x6b, 0x6f, 0x89, 0x62, 0xff, 0xb0, 0x63, 0x7e, 0xb3, - 0xaf, 0x2c, 0x5f, 0x47, 0x31, 0x01, 0x62, 0xdb, 0x0d, 0x13, 0x9f, 0x3c, - 0x0c, 0xee, 0xf3, 0x0b, 0x4b, 0x17, 0xd1, 0xf3, 0xc2, 0x58, 0xbf, 0xf7, - 0xd8, 0xfe, 0xfc, 0xf8, 0x47, 0x58, 0xac, 0x3e, 0x58, 0x89, 0x6f, 0xfe, - 0xcc, 0x34, 0xf2, 0xfa, 0xd3, 0x84, 0xb1, 0x79, 0x9b, 0x4b, 0x17, 0xfd, - 0xef, 0x89, 0xa1, 0xde, 0x81, 0xd6, 0x2f, 0x81, 0xdb, 0x06, 0xb1, 0x7f, - 0xcf, 0x07, 0xf8, 0x8e, 0x77, 0x58, 0xbb, 0x3c, 0xb1, 0x52, 0x9f, 0x88, - 0xce, 0x32, 0x10, 0x5a, 0x22, 0xfa, 0x29, 0x0e, 0x70, 0xff, 0xc4, 0xb1, - 0xc7, 0x37, 0x37, 0x72, 0xc5, 0xef, 0xe1, 0xd6, 0x2f, 0xff, 0x4c, 0x79, - 0xe4, 0x65, 0x9e, 0xf3, 0x12, 0xc5, 0x12, 0x20, 0xbc, 0x35, 0xdc, 0x3b, - 0x73, 0xc6, 0x77, 0x8e, 0xce, 0x36, 0x34, 0x74, 0x8d, 0x8a, 0x3b, 0xee, - 0x15, 0x1d, 0xf5, 0x2d, 0x8d, 0x45, 0xd3, 0x2a, 0x13, 0x68, 0xcf, 0x20, - 0x68, 0x38, 0x63, 0xe4, 0xf7, 0x59, 0xb1, 0xf8, 0xef, 0x28, 0x63, 0xa8, - 0xf9, 0x1e, 0x51, 0xdc, 0x51, 0xec, 0xea, 0x53, 0x59, 0xe1, 0x05, 0xf9, - 0xc3, 0x86, 0x8d, 0x9c, 0x11, 0x95, 0x77, 0xe7, 0x05, 0x38, 0x07, 0xc9, - 0xc1, 0x8f, 0x4b, 0xed, 0x14, 0x24, 0x3b, 0x43, 0x26, 0x3a, 0x1c, 0xc1, - 0xca, 0xda, 0xee, 0x8c, 0x1a, 0xa3, 0x1d, 0xb0, 0x8f, 0xed, 0x9d, 0x55, - 0xe8, 0xd7, 0x1d, 0x1b, 0xac, 0x5d, 0xde, 0x74, 0xb1, 0x7d, 0xe8, 0xec, - 0xfa, 0xc5, 0x89, 0x62, 0xbb, 0xd3, 0x6f, 0x02, 0x6b, 0x77, 0xc5, 0x8b, - 0xa3, 0x7e, 0xf1, 0x62, 0xa3, 0x63, 0x75, 0xdf, 0x06, 0x2e, 0xef, 0xb8, - 0xe5, 0x8b, 0xec, 0x1b, 0x1d, 0x62, 0xa3, 0x73, 0xc4, 0xd1, 0x15, 0xef, - 0x4f, 0xd6, 0x2f, 0xa4, 0x78, 0x75, 0x8b, 0x6a, 0x4d, 0xfe, 0x87, 0x6d, - 0x1e, 0xb1, 0x73, 0xf7, 0x2c, 0x5e, 0xd4, 0xee, 0xb1, 0x6d, 0x2c, 0x56, - 0x1b, 0x06, 0x1e, 0xbe, 0xdb, 0x53, 0xb2, 0xc5, 0xc1, 0x81, 0x62, 0xec, - 0xfa, 0xc5, 0xef, 0xe4, 0x4b, 0x17, 0xbe, 0xe7, 0x58, 0xb4, 0x4b, 0x15, - 0xb1, 0xf2, 0x8c, 0x5d, 0x87, 0x84, 0x3b, 0x68, 0x96, 0x2f, 0x8b, 0x61, - 0x71, 0x62, 0x9c, 0xdb, 0xb0, 0x9d, 0xfb, 0x07, 0xa6, 0xdd, 0x62, 0xf9, - 0xb6, 0x9d, 0x2c, 0x5e, 0xd3, 0x6c, 0xb1, 0x61, 0xfc, 0xfa, 0x88, 0xa7, - 0xc4, 0x77, 0xb0, 0xbc, 0xb1, 0x52, 0x7a, 0x1f, 0x34, 0xbc, 0x36, 0x82, - 0xc5, 0xfd, 0xf8, 0xa1, 0x3a, 0xd9, 0x62, 0xe1, 0x41, 0x62, 0x9c, 0xf9, - 0x98, 0x77, 0xb1, 0x8d, 0x86, 0xb1, 0x7b, 0x0f, 0x2b, 0x14, 0xea, 0xdd, - 0xe2, 0x26, 0x38, 0xaf, 0xd2, 0x98, 0x7c, 0x04, 0xa4, 0xfd, 0xc7, 0x3f, - 0x43, 0x67, 0xb4, 0x21, 0xe3, 0x8b, 0xfb, 0x84, 0xaf, 0x6b, 0x82, 0x58, - 0xb7, 0xd6, 0x2f, 0xe0, 0xa7, 0xae, 0x36, 0xeb, 0x17, 0x07, 0xc5, 0x8a, - 0x88, 0xf2, 0xb8, 0x63, 0x71, 0x44, 0xb1, 0x60, 0xd6, 0x2e, 0x93, 0x56, - 0x2f, 0x6a, 0x60, 0xb1, 0x7c, 0x58, 0x0e, 0x2c, 0x5b, 0xad, 0x8f, 0x5f, - 0x43, 0x0c, 0x3b, 0x52, 0x9a, 0xae, 0xc3, 0xc3, 0x5c, 0xc2, 0x3e, 0x86, - 0x04, 0xd5, 0x7d, 0xad, 0xb3, 0x4b, 0x17, 0xcf, 0xa1, 0x47, 0xac, 0x54, - 0x9e, 0x56, 0x12, 0x5f, 0xba, 0x87, 0x9b, 0xa5, 0x8b, 0xb9, 0xba, 0xc5, - 0xcd, 0x2b, 0x16, 0x95, 0x8a, 0xfa, 0x22, 0xd8, 0x80, 0x8a, 0xf8, 0x33, - 0xe1, 0x6b, 0x62, 0xc5, 0xf3, 0x1d, 0xce, 0xb1, 0x7f, 0xba, 0xd4, 0xbc, - 0x1b, 0x8b, 0x17, 0xd8, 0x53, 0x05, 0x8a, 0x81, 0xfb, 0xe1, 0x11, 0xcd, - 0x2d, 0x1c, 0xb1, 0x7e, 0xe6, 0x79, 0xf4, 0xb1, 0x7b, 0x3a, 0xf2, 0xc5, - 0x00, 0xf1, 0xb8, 0x51, 0x7b, 0xee, 0x12, 0xc5, 0xcc, 0x35, 0x8b, 0xff, - 0x85, 0xbb, 0x9b, 0xf6, 0x87, 0x1c, 0xeb, 0x15, 0x88, 0x9e, 0xdc, 0x8a, - 0x21, 0xe2, 0x17, 0xba, 0x1c, 0x58, 0xb9, 0x86, 0xb1, 0x7b, 0xd9, 0xc5, - 0x8b, 0x8a, 0x56, 0x2a, 0x07, 0x94, 0x21, 0x7e, 0xc3, 0xb7, 0xfc, 0xe2, - 0xda, 0x7a, 0x06, 0xa5, 0x62, 0xf4, 0x27, 0xa5, 0x8b, 0x47, 0xac, 0x54, - 0x46, 0xcc, 0x87, 0xae, 0xce, 0x96, 0x2c, 0x4b, 0x16, 0xd3, 0x9a, 0x96, - 0x18, 0xb4, 0x72, 0xc5, 0xfc, 0x59, 0xdb, 0x4f, 0xc5, 0x8a, 0xd8, 0xf1, - 0x02, 0x15, 0xb7, 0x4b, 0x15, 0x28, 0xa0, 0x76, 0x91, 0x12, 0x5f, 0x6a, - 0x12, 0x75, 0x8b, 0xf7, 0x47, 0x9c, 0xf2, 0xc5, 0x61, 0xe6, 0x31, 0x1d, - 0xf7, 0xdb, 0x34, 0xb1, 0x7e, 0xdb, 0x09, 0xcd, 0x58, 0xa9, 0x3c, 0xb7, - 0x22, 0xbf, 0xb5, 0x00, 0x3f, 0x5c, 0x58, 0xbf, 0xdc, 0x0c, 0xa7, 0xef, - 0xb2, 0xc5, 0x31, 0xf2, 0xf8, 0xc2, 0xfb, 0x9c, 0x90, 0x2c, 0x57, 0x7d, - 0x57, 0x61, 0x66, 0x11, 0x03, 0x2e, 0xc8, 0x7c, 0xf4, 0x7a, 0xec, 0x5a, - 0x31, 0x3b, 0x77, 0xe1, 0xd4, 0xcf, 0x44, 0xd6, 0x28, 0x42, 0x84, 0x43, - 0x7f, 0xc5, 0x86, 0x96, 0x7b, 0xee, 0xb1, 0x7c, 0x3f, 0xe7, 0x16, 0x2b, - 0x0f, 0x6d, 0x8e, 0x2f, 0xe6, 0x37, 0x06, 0xd0, 0x58, 0xaf, 0x9e, 0x71, - 0x10, 0x5f, 0x88, 0xb3, 0xb3, 0x2c, 0x5f, 0xbf, 0x83, 0x68, 0x2c, 0x53, - 0x9e, 0x83, 0x14, 0x5a, 0x0b, 0x17, 0x07, 0xe5, 0x8b, 0xfb, 0xef, 0x91, - 0x30, 0x16, 0x2a, 0x07, 0x8f, 0xe1, 0x9b, 0xda, 0xd3, 0x2c, 0x5f, 0x40, - 0x02, 0x82, 0xc5, 0xf6, 0x83, 0x90, 0x2c, 0x5e, 0x9f, 0xca, 0xc5, 0x49, - 0xf2, 0x39, 0x27, 0xc9, 0x2f, 0x43, 0x9d, 0x96, 0x2f, 0xc7, 0x92, 0x87, - 0x16, 0x2f, 0xa7, 0xd1, 0xbf, 0x78, 0xb1, 0x7e, 0x63, 0x80, 0x12, 0xb1, - 0x7e, 0x8a, 0x13, 0xee, 0x2c, 0x56, 0xc7, 0xa5, 0xe2, 0x8b, 0xe8, 0x49, - 0x41, 0x62, 0xa5, 0x30, 0xcd, 0x88, 0x20, 0x50, 0xef, 0xf1, 0x11, 0xde, - 0x23, 0x7e, 0xb1, 0x61, 0xac, 0x54, 0x9b, 0x07, 0x1e, 0xbf, 0xff, 0x41, - 0xc8, 0x85, 0xd6, 0xa7, 0xcf, 0xbb, 0x8d, 0x62, 0xe6, 0xe9, 0x62, 0xfe, - 0xfe, 0x44, 0x52, 0x35, 0x8b, 0xfe, 0x84, 0x9f, 0x99, 0xa9, 0xe2, 0xc5, - 0x6e, 0x7c, 0xfd, 0x17, 0x5f, 0x44, 0x4c, 0x12, 0xc5, 0xff, 0x49, 0x67, - 0x6c, 0x26, 0x35, 0x62, 0x8d, 0x3d, 0xdd, 0x12, 0x58, 0x6b, 0x15, 0x29, - 0xc5, 0x8d, 0x59, 0xdf, 0xda, 0x10, 0x22, 0x23, 0xbd, 0xe7, 0x02, 0xc5, - 0xf0, 0x24, 0xb7, 0x58, 0xb7, 0x7e, 0xb1, 0x46, 0x9e, 0xbf, 0x43, 0xa2, - 0x23, 0xbe, 0x87, 0xb0, 0x35, 0x8b, 0xf7, 0x9f, 0xec, 0x75, 0x8b, 0xa4, - 0x0b, 0x15, 0x26, 0xff, 0x72, 0x8b, 0xda, 0x93, 0xac, 0x53, 0xa3, 0x49, - 0x8c, 0x44, 0xc6, 0x11, 0x0d, 0xfb, 0x3a, 0xf3, 0x1d, 0x62, 0xec, 0x89, - 0x62, 0xdb, 0x11, 0xe0, 0x86, 0x53, 0x7a, 0x75, 0xb2, 0xc5, 0xdb, 0x4a, - 0xc5, 0x49, 0xef, 0xb9, 0x48, 0x87, 0xa9, 0x62, 0xf6, 0xf2, 0x05, 0x8b, - 0x14, 0x0d, 0x56, 0x06, 0x5f, 0xf3, 0x1b, 0xc7, 0xed, 0x25, 0xe5, 0x8b, - 0xfb, 0xee, 0x7c, 0xfb, 0x2c, 0x54, 0xa2, 0x34, 0x89, 0x44, 0x77, 0x7d, - 0xe2, 0x7e, 0xe5, 0x8b, 0x85, 0xc5, 0x8b, 0xec, 0xe9, 0xa0, 0xb1, 0x7f, - 0x9f, 0x8e, 0x2e, 0xff, 0xee, 0xb1, 0x5c, 0x3d, 0xbf, 0x11, 0xdf, 0x85, - 0x0e, 0x7c, 0x6b, 0x15, 0x28, 0xbf, 0x77, 0x32, 0x22, 0xbf, 0x64, 0x50, - 0x6e, 0x2c, 0x54, 0x19, 0x31, 0x23, 0x71, 0xc2, 0x0e, 0x96, 0x5c, 0x8a, - 0x28, 0x40, 0xea, 0x33, 0x93, 0xbd, 0xfe, 0x3a, 0xa2, 0x8d, 0xdb, 0x90, - 0xdc, 0xf4, 0x39, 0x04, 0x5d, 0xda, 0x1c, 0x81, 0x96, 0xd9, 0x96, 0x2c, - 0x4b, 0x17, 0xf3, 0x43, 0xbb, 0xb8, 0x5b, 0x2c, 0x5e, 0xc6, 0x25, 0x8b, - 0xf0, 0x72, 0x3e, 0xfb, 0xef, 0x56, 0x2b, 0x47, 0xa3, 0xc1, 0xbb, 0xb3, - 0x8b, 0x16, 0x25, 0x8b, 0xa1, 0x1e, 0xb1, 0x50, 0x4c, 0x38, 0xe2, 0x3f, - 0x11, 0x68, 0x43, 0x91, 0x17, 0x05, 0xfc, 0x23, 0x70, 0x23, 0xd6, 0x2e, - 0xf7, 0x16, 0x2d, 0xc5, 0x8b, 0xda, 0x0e, 0x25, 0x8b, 0xfb, 0x8d, 0xd7, - 0x9f, 0x65, 0x8a, 0x88, 0xf8, 0xb4, 0x25, 0xe2, 0x0a, 0x58, 0xa7, 0x37, - 0x91, 0xc6, 0x17, 0xf6, 0x6c, 0x3f, 0xbe, 0x96, 0x2d, 0x2b, 0x15, 0x89, - 0x9a, 0x38, 0xdf, 0xe1, 0x6c, 0x44, 0x71, 0xc5, 0xf7, 0xf3, 0x17, 0xfa, - 0x68, 0xf5, 0x8b, 0xfe, 0x11, 0x40, 0xb0, 0x12, 0x05, 0x8b, 0xff, 0x4e, - 0x70, 0xc9, 0x71, 0x87, 0x05, 0x8b, 0xe0, 0x83, 0x9d, 0x96, 0x2f, 0xc1, - 0x73, 0x6c, 0x09, 0x62, 0xa4, 0xf4, 0x9c, 0x9a, 0xa5, 0x31, 0xbf, 0x98, - 0x91, 0xc7, 0xa1, 0x25, 0x71, 0x4a, 0xc5, 0xe0, 0x02, 0x56, 0x2e, 0xcd, - 0xd6, 0x2e, 0x91, 0xf0, 0xda, 0xf8, 0x76, 0xf4, 0x96, 0xeb, 0x17, 0xff, - 0xf3, 0x04, 0x36, 0x6d, 0x6d, 0xf6, 0xf7, 0xdf, 0x50, 0x58, 0xbf, 0x6f, - 0xbf, 0xe7, 0x4b, 0x15, 0xf4, 0x52, 0x90, 0xe8, 0x97, 0x6a, 0x09, 0xc6, - 0x6e, 0x83, 0xc4, 0xbf, 0x43, 0x46, 0xf9, 0x89, 0xa2, 0x58, 0xbf, 0x66, - 0x83, 0xf7, 0x16, 0x2f, 0xcf, 0xe2, 0xc8, 0x2c, 0x5c, 0xf1, 0xeb, 0x17, - 0x3e, 0x96, 0x2a, 0x06, 0xc7, 0xb8, 0x6a, 0xfa, 0x42, 0x98, 0x96, 0x2f, - 0xfd, 0xce, 0xcd, 0xf9, 0x37, 0x3d, 0xc5, 0x8b, 0x83, 0x3a, 0xc5, 0xf6, - 0x68, 0x58, 0xb1, 0x60, 0x2c, 0x51, 0x1b, 0x40, 0xc8, 0xaf, 0xb6, 0xda, - 0x63, 0xd6, 0x2f, 0x37, 0x44, 0xb1, 0x7f, 0x78, 0x98, 0x18, 0x4b, 0x17, - 0xe2, 0x60, 0x61, 0x2c, 0x51, 0x87, 0xa5, 0xe2, 0xca, 0x94, 0x5d, 0x0c, - 0xa0, 0x4d, 0xf6, 0x8f, 0x58, 0xb4, 0x4b, 0x16, 0x8a, 0x4d, 0x46, 0x0a, - 0xdf, 0x49, 0xdf, 0x4b, 0x15, 0xb2, 0xaf, 0x58, 0x11, 0x1a, 0x55, 0xd2, - 0xc3, 0x92, 0x44, 0x49, 0xf4, 0x20, 0x26, 0x94, 0x36, 0xf8, 0xae, 0x11, - 0x35, 0x86, 0xb1, 0x7b, 0x0b, 0x75, 0x8a, 0x63, 0x5f, 0xc1, 0x2b, 0xf7, - 0x22, 0x84, 0xf4, 0xb1, 0x7d, 0xed, 0xc5, 0xb2, 0xc5, 0xa7, 0xe7, 0xa2, - 0x45, 0x77, 0xec, 0xdf, 0xd9, 0xba, 0xc5, 0xf6, 0xa4, 0xa2, 0x58, 0xb7, - 0x16, 0x2f, 0xe0, 0x86, 0x26, 0xd4, 0x16, 0x29, 0x62, 0xa4, 0xde, 0x06, - 0x61, 0x7b, 0x93, 0x05, 0x8b, 0xf7, 0xf3, 0x4f, 0xc5, 0x8b, 0x9f, 0x5d, - 0x1e, 0x2f, 0x87, 0x6f, 0xe7, 0xd3, 0xf2, 0x76, 0x58, 0xb7, 0x65, 0x8a, - 0x95, 0x41, 0x10, 0x71, 0xc2, 0x67, 0x2a, 0x88, 0x8f, 0x49, 0xdf, 0x66, - 0xe1, 0x77, 0x71, 0x75, 0xfd, 0xf9, 0x28, 0x3e, 0xcb, 0x17, 0x0e, 0x56, - 0x2f, 0xfd, 0xfc, 0x87, 0xa7, 0x0b, 0xaf, 0x2c, 0x56, 0x1e, 0xb7, 0x85, - 0xef, 0xf3, 0xec, 0x4d, 0xb0, 0xb8, 0xb1, 0x60, 0xd6, 0x29, 0xd1, 0xda, - 0x50, 0x84, 0xf1, 0x0f, 0x71, 0xad, 0xf1, 0xfd, 0x9b, 0xac, 0x5e, 0xc7, - 0x1a, 0xc5, 0xe2, 0x73, 0x56, 0x2f, 0xb0, 0x6f, 0xd9, 0x62, 0xe9, 0x3e, - 0x1e, 0x0b, 0x0e, 0xdf, 0xa1, 0xe7, 0x3f, 0x96, 0x2f, 0xe6, 0xeb, 0xf2, - 0x19, 0x2c, 0x5b, 0x3a, 0x3d, 0x80, 0x8a, 0x6f, 0x07, 0xd1, 0x2c, 0x5f, - 0xcd, 0x06, 0x2c, 0xee, 0x58, 0xb9, 0xc6, 0xb1, 0x78, 0x5d, 0x01, 0x62, - 0xfb, 0x9f, 0x68, 0x2c, 0x5b, 0xcb, 0x15, 0x2a, 0x8a, 0x46, 0x87, 0xd1, - 0x23, 0xae, 0xea, 0x10, 0x7f, 0x29, 0x61, 0xf0, 0x17, 0x90, 0xb8, 0x87, - 0xc3, 0x23, 0xb8, 0xa2, 0x58, 0xb1, 0xab, 0x16, 0x09, 0x62, 0xb0, 0xdf, - 0x68, 0x60, 0x31, 0x3b, 0x74, 0xb1, 0x61, 0x2c, 0x5c, 0x09, 0x48, 0xb8, - 0x20, 0x92, 0x29, 0xcd, 0x88, 0x42, 0xf7, 0xe2, 0xcf, 0x7d, 0xd2, 0x23, - 0x0d, 0x0d, 0xe2, 0xce, 0x2c, 0x5d, 0x83, 0x58, 0xa3, 0x4d, 0x9f, 0x61, - 0xca, 0x82, 0x24, 0x46, 0xdb, 0x76, 0xe0, 0x58, 0xbf, 0xcc, 0x6c, 0x91, - 0x67, 0x96, 0x2f, 0xce, 0x39, 0xc2, 0x58, 0xbe, 0x2f, 0x3e, 0xcb, 0x17, - 0x01, 0x96, 0x2f, 0x9f, 0x4f, 0xe5, 0x8a, 0x93, 0xdc, 0x72, 0x38, 0x85, - 0xea, 0x55, 0x2a, 0x0c, 0xbb, 0xa1, 0x36, 0x87, 0xa8, 0x08, 0xc8, 0x67, - 0x86, 0x42, 0x84, 0x15, 0xef, 0xc8, 0x4b, 0x17, 0x9b, 0xae, 0x2c, 0x52, - 0xc5, 0xd3, 0xf5, 0x8a, 0xe1, 0xa3, 0xf0, 0x65, 0xf1, 0x0e, 0x46, 0xb1, - 0x7c, 0x1f, 0xdb, 0xcb, 0x17, 0xe0, 0xfc, 0x52, 0x05, 0x8a, 0xd9, 0x1d, - 0xe3, 0x1e, 0xe9, 0x05, 0xc8, 0x7c, 0x45, 0xd8, 0x92, 0xfb, 0xf2, 0x20, - 0xd6, 0x2d, 0xa5, 0x8b, 0xd2, 0x51, 0x2c, 0x5b, 0xb2, 0xc5, 0x2c, 0x5a, - 0x56, 0x2b, 0x0d, 0x88, 0x05, 0x08, 0x32, 0x96, 0x29, 0x62, 0xa2, 0x2e, - 0x0e, 0x19, 0x77, 0xe2, 0x58, 0xb9, 0xc0, 0xb1, 0x52, 0x6c, 0x00, 0x33, - 0x5b, 0x26, 0x73, 0x84, 0x91, 0x09, 0x69, 0x39, 0x91, 0x00, 0xa3, 0x7d, - 0x0d, 0x37, 0x65, 0x8b, 0x77, 0xeb, 0x17, 0xff, 0x1a, 0xe5, 0xbf, 0x24, - 0xed, 0xd7, 0x96, 0x2f, 0x03, 0x3b, 0x96, 0x2f, 0xff, 0x8b, 0x01, 0x87, - 0x14, 0xeb, 0x4e, 0x2d, 0xd6, 0x2f, 0x8a, 0x4f, 0x12, 0xc5, 0xd8, 0x35, - 0x8a, 0x94, 0xcb, 0x76, 0x25, 0x34, 0x5f, 0x48, 0xe4, 0x41, 0xe5, 0x00, - 0x88, 0xef, 0x8f, 0xc1, 0x1d, 0x62, 0xc6, 0xac, 0x5a, 0x39, 0x62, 0xed, - 0x1a, 0xb1, 0x52, 0x7c, 0xae, 0x48, 0x21, 0x30, 0xc5, 0x6f, 0xa6, 0x3b, - 0x3a, 0x58, 0xbf, 0xfd, 0x90, 0xe4, 0xfa, 0x19, 0x1e, 0xc4, 0x05, 0x8b, - 0xe3, 0x58, 0x80, 0xb1, 0x5f, 0x3e, 0xf1, 0x26, 0x5f, 0xf3, 0xfb, 0xf9, - 0xd7, 0x85, 0x2b, 0x17, 0xc1, 0xce, 0x80, 0xb1, 0x50, 0x3d, 0xef, 0x9d, - 0x5d, 0x9c, 0x58, 0xbf, 0xfd, 0x90, 0x8e, 0xc3, 0x5b, 0x3d, 0x3e, 0xe2, - 0xc5, 0x4a, 0x21, 0xa0, 0x44, 0x01, 0x7a, 0xe2, 0x66, 0xbe, 0x8c, 0x1a, - 0xe9, 0xe2, 0xc5, 0x80, 0xb1, 0x7d, 0x27, 0x93, 0xac, 0x5f, 0x9c, 0x23, - 0xb7, 0x96, 0x29, 0xcf, 0x2f, 0x44, 0x57, 0xdb, 0xfe, 0x78, 0xb1, 0x6c, - 0x58, 0xa8, 0x2a, 0xbe, 0x78, 0xf2, 0xb4, 0x54, 0xc2, 0xfc, 0x5d, 0x08, - 0x86, 0x38, 0x92, 0xe6, 0xd9, 0x62, 0xde, 0x58, 0xae, 0x1a, 0xa0, 0x86, - 0x2f, 0xfe, 0xc7, 0xf7, 0x0b, 0x3d, 0xd4, 0x25, 0x62, 0xf6, 0xe2, 0x25, - 0x8b, 0xe1, 0xe0, 0xe3, 0x37, 0x3e, 0x28, 0x91, 0x2c, 0x6a, 0xc5, 0x4b, - 0x21, 0x27, 0x23, 0x93, 0x78, 0xe1, 0x7f, 0x0c, 0xb6, 0x95, 0xf2, 0x28, - 0x4c, 0x07, 0x08, 0x4e, 0xe3, 0xeb, 0x01, 0x62, 0xfa, 0x42, 0x14, 0x4b, - 0x17, 0xb9, 0x31, 0x2c, 0x5f, 0x67, 0x67, 0xd2, 0xc5, 0xce, 0x75, 0x8b, - 0x60, 0xcd, 0xd9, 0xc9, 0x2f, 0xa2, 0x89, 0xfe, 0xb1, 0x4b, 0x16, 0xd2, - 0xc5, 0x8e, 0xb1, 0x5c, 0x3d, 0x5f, 0x12, 0x88, 0x33, 0xb0, 0x95, 0xf0, - 0xd9, 0xba, 0x58, 0xbf, 0x01, 0xf4, 0xe6, 0xac, 0x5d, 0xcf, 0x2c, 0x5d, - 0x83, 0x58, 0xbd, 0xdb, 0x06, 0xb1, 0x46, 0x9b, 0x6e, 0xe1, 0x7b, 0x1a, - 0xb1, 0x52, 0x88, 0x6c, 0x4e, 0x62, 0x5b, 0xda, 0x6e, 0xcb, 0x17, 0x67, - 0x4b, 0x14, 0x6a, 0xa7, 0xfd, 0xc4, 0xa2, 0x25, 0x3a, 0xcf, 0xde, 0xd8, - 0xf8, 0x04, 0x65, 0x0a, 0xff, 0x16, 0xc7, 0x0f, 0xdb, 0xeb, 0x17, 0xc3, - 0xfc, 0xec, 0xb1, 0x58, 0x6d, 0xb7, 0x12, 0xbd, 0x9a, 0x35, 0x62, 0xfe, - 0x2f, 0x61, 0x38, 0x4b, 0x17, 0xf7, 0xb9, 0x87, 0x7f, 0x2c, 0x5b, 0x4b, - 0x15, 0x27, 0x81, 0x85, 0xd4, 0xb1, 0x4b, 0x16, 0x95, 0x8a, 0xef, 0xcd, - 0x49, 0x06, 0x78, 0x32, 0xf6, 0x76, 0x65, 0x8b, 0xe7, 0xd3, 0x1a, 0xb1, - 0x7d, 0xff, 0xe0, 0x16, 0x2d, 0x3f, 0x3e, 0x46, 0x1e, 0x0c, 0x8e, 0xdb, - 0x2c, 0x54, 0xa7, 0xa5, 0x84, 0x2e, 0x3c, 0x76, 0xd6, 0x49, 0x04, 0x25, - 0xbb, 0xf3, 0x4b, 0xfb, 0xd9, 0xd4, 0x26, 0x0b, 0x17, 0xef, 0x67, 0xd8, - 0xd5, 0x8a, 0xe8, 0xf6, 0x1c, 0xbe, 0xfd, 0xd0, 0x3b, 0xc1, 0x71, 0x62, - 0xf7, 0xd8, 0xeb, 0x17, 0x4f, 0x16, 0x2f, 0xe6, 0xf0, 0x03, 0x28, 0x2c, - 0x5f, 0x73, 0x1e, 0x0b, 0x17, 0xee, 0x66, 0x9c, 0xd5, 0x8a, 0x1a, 0x2b, - 0xba, 0x1d, 0x8f, 0x17, 0xd1, 0x7f, 0x88, 0xae, 0x8f, 0x89, 0x62, 0xfe, - 0xf0, 0xdc, 0x12, 0x4b, 0x17, 0xb6, 0xfb, 0xac, 0x5d, 0xf1, 0x74, 0x79, + 0xc3, 0x8e, 0x4e, 0xb1, 0x78, 0xd7, 0xd2, 0xc5, 0xff, 0xa7, 0x84, 0xfc, + 0xe0, 0xb0, 0x96, 0x2b, 0xc7, 0xb7, 0xd0, 0x7a, 0xff, 0xe2, 0x78, 0x18, + 0x1c, 0x5c, 0x7e, 0xc2, 0x58, 0xbc, 0xcd, 0xba, 0xa4, 0xb1, 0x2f, 0x98, + 0x39, 0x35, 0x62, 0xf8, 0xf3, 0xcc, 0x58, 0xa8, 0x22, 0xeb, 0x74, 0xad, + 0x15, 0x00, 0x92, 0xfd, 0xf7, 0x3c, 0xe9, 0x62, 0xff, 0xf0, 0x9b, 0x6d, + 0x61, 0xff, 0x3b, 0x10, 0x96, 0x29, 0xcf, 0xd0, 0x8a, 0x2f, 0xe6, 0x38, + 0x63, 0xfc, 0xac, 0x5f, 0xd0, 0xce, 0x03, 0xb0, 0x2c, 0x53, 0x1e, 0xf8, + 0x8b, 0xef, 0xdb, 0x7c, 0x98, 0x0b, 0x17, 0xf4, 0xff, 0x3e, 0xfd, 0x4b, + 0x17, 0xff, 0xcd, 0xd8, 0x58, 0x5b, 0x0f, 0x4d, 0x9d, 0xf9, 0x62, 0xa5, + 0x15, 0x80, 0x29, 0x11, 0x85, 0xff, 0xf4, 0xf0, 0xcc, 0x2f, 0x61, 0x9f, + 0xc7, 0xd9, 0x62, 0xff, 0x67, 0x98, 0x81, 0x91, 0xeb, 0x17, 0xfd, 0x9e, + 0x2c, 0x14, 0x97, 0x96, 0x2b, 0xe8, 0xbd, 0xe2, 0x8c, 0x71, 0xad, 0xfd, + 0xad, 0xbd, 0xc6, 0x02, 0xc5, 0xff, 0x31, 0x6e, 0xc4, 0x2c, 0xfa, 0xc5, + 0xfd, 0x9c, 0x06, 0x60, 0xd6, 0x29, 0x8f, 0x94, 0x8e, 0x2f, 0xd2, 0xfa, + 0x7f, 0x2c, 0x54, 0x17, 0xf9, 0x47, 0x0c, 0xe3, 0x61, 0xc5, 0xba, 0xef, + 0x64, 0xaf, 0x0d, 0xcd, 0x43, 0x7b, 0xf0, 0xb2, 0x27, 0xfe, 0x43, 0x37, + 0xd0, 0xec, 0x11, 0x9f, 0x48, 0x4a, 0xf5, 0x10, 0x5f, 0xda, 0xea, 0xf6, + 0x10, 0x16, 0x2f, 0xfb, 0xdc, 0x2c, 0xe8, 0x59, 0xc5, 0x8a, 0x93, 0xeb, + 0x11, 0x8d, 0xf7, 0x8b, 0x3a, 0x96, 0x2f, 0x38, 0x86, 0xb1, 0x7f, 0xf4, + 0xf7, 0xfc, 0xde, 0x75, 0xdc, 0x38, 0xb1, 0x46, 0xa2, 0xad, 0xc8, 0x63, + 0xc9, 0x44, 0x3b, 0x7f, 0xf1, 0x78, 0xd1, 0x49, 0x66, 0xf3, 0xa5, 0x8b, + 0xee, 0xbd, 0x85, 0xba, 0xc5, 0xf1, 0xb8, 0x5d, 0xac, 0x53, 0x9e, 0x6e, + 0x8a, 0x6e, 0xdb, 0xaf, 0x58, 0xbf, 0xff, 0xfb, 0x37, 0x18, 0xb6, 0x0c, + 0x9b, 0xd2, 0x07, 0x83, 0xf8, 0xa4, 0x0b, 0x15, 0x88, 0x91, 0xf0, 0xf5, + 0xff, 0xff, 0x16, 0x0c, 0xb1, 0x8d, 0xe6, 0xff, 0x16, 0xd3, 0xbe, 0x6c, + 0xb1, 0x52, 0x99, 0xf3, 0xc2, 0xc8, 0x44, 0x57, 0xef, 0x71, 0xbb, 0xdd, + 0x62, 0xce, 0xb1, 0x6d, 0x6c, 0x6f, 0x00, 0x57, 0x7f, 0xfc, 0x7e, 0x99, + 0xad, 0x3f, 0x4e, 0x38, 0x9b, 0x4b, 0x15, 0x2a, 0xaf, 0x3f, 0x1e, 0x83, + 0x38, 0x08, 0xa2, 0xfe, 0xf6, 0x14, 0x85, 0x1c, 0xb1, 0x7f, 0xfd, 0x39, + 0xcc, 0x23, 0x38, 0xf1, 0xd2, 0x40, 0x58, 0xac, 0x44, 0x11, 0x18, 0xdf, + 0xf8, 0x98, 0xe1, 0x30, 0xe7, 0xbe, 0x2c, 0x5f, 0x3c, 0x4e, 0x12, 0xc5, + 0xfb, 0xc4, 0xc0, 0xe2, 0xc5, 0xd3, 0xa8, 0x1e, 0x61, 0xa4, 0x97, 0xff, + 0x39, 0xf8, 0x67, 0xdf, 0xc5, 0x27, 0x58, 0xa8, 0x26, 0x40, 0x02, 0x1e, + 0x42, 0x33, 0xc5, 0xd7, 0xf7, 0x4c, 0xea, 0x72, 0x89, 0x62, 0xff, 0x73, + 0xef, 0x1e, 0x26, 0x1a, 0xc5, 0xf3, 0x14, 0xc1, 0x62, 0xf9, 0xbc, 0xdb, + 0xac, 0x5f, 0xf4, 0xf4, 0x6d, 0x6f, 0xf6, 0xea, 0x58, 0xbf, 0xdd, 0xf3, + 0xdf, 0x9f, 0xca, 0xc5, 0xa5, 0x62, 0xf9, 0x8f, 0x84, 0xb1, 0x52, 0x6c, + 0xbe, 0x23, 0x7f, 0xff, 0xff, 0xf7, 0x63, 0x21, 0x34, 0x78, 0xa4, 0x6c, + 0x40, 0xfe, 0x7b, 0x0f, 0xf6, 0x17, 0x5f, 0x90, 0xf7, 0x31, 0x62, 0xff, + 0x3c, 0xee, 0x58, 0xfb, 0x2c, 0x54, 0x15, 0x27, 0x76, 0x67, 0xa3, 0x73, + 0x90, 0xfc, 0x8c, 0x8f, 0xfc, 0xce, 0x22, 0x0e, 0xa8, 0x53, 0xdf, 0xc5, + 0xef, 0xe0, 0x19, 0x62, 0xf8, 0x5d, 0x7c, 0x73, 0xac, 0x54, 0x9e, 0xc3, + 0x96, 0xdf, 0xf7, 0x50, 0x8f, 0xee, 0xe1, 0x3f, 0x58, 0xbf, 0x66, 0xc7, + 0x6f, 0x2c, 0x53, 0x9f, 0x41, 0x1f, 0xdf, 0x37, 0xc3, 0x3a, 0xc5, 0xf4, + 0x9d, 0xbc, 0xb1, 0x7c, 0x71, 0x02, 0x25, 0x8a, 0x82, 0x62, 0x79, 0x08, + 0x86, 0x20, 0xe1, 0x20, 0x88, 0xaf, 0xe2, 0x2c, 0x00, 0x7d, 0xac, 0x5f, + 0xe7, 0xdd, 0xc7, 0xe8, 0x8e, 0xb1, 0x7d, 0xec, 0xee, 0x25, 0x8a, 0xc4, + 0x45, 0x78, 0xbf, 0xa8, 0xda, 0xed, 0x4a, 0xc5, 0xe8, 0x9c, 0xd5, 0x8a, + 0x88, 0xdb, 0x70, 0x5e, 0xe8, 0xe1, 0xac, 0x5f, 0xa4, 0xfb, 0x60, 0x4b, + 0x17, 0xec, 0x1f, 0x3f, 0x2b, 0x17, 0xff, 0x17, 0xbe, 0xd0, 0xd4, 0xef, + 0x9a, 0x58, 0xbc, 0x79, 0xd2, 0xc5, 0xc3, 0x09, 0x62, 0xff, 0xff, 0xff, + 0x37, 0xbd, 0x9f, 0xe3, 0x41, 0xcb, 0xd0, 0xcd, 0x67, 0x33, 0xed, 0xb1, + 0x4c, 0x16, 0x2f, 0x7a, 0x62, 0x58, 0xa9, 0x54, 0x39, 0x8d, 0x1b, 0x91, + 0x38, 0xde, 0x8a, 0x98, 0xa0, 0x08, 0xa4, 0x3b, 0xc1, 0x90, 0xe1, 0x19, + 0x7f, 0xe8, 0xbb, 0xf3, 0x8f, 0x0b, 0x0e, 0xb1, 0x7f, 0xc0, 0xf7, 0x1b, + 0xbd, 0xb0, 0x25, 0x8b, 0xf4, 0x76, 0xff, 0x7e, 0xbd, 0x62, 0xb4, 0x7d, + 0xe2, 0x3d, 0xbe, 0xee, 0x13, 0xf5, 0x8b, 0xfd, 0xc1, 0xff, 0x37, 0x14, + 0x7a, 0xc5, 0xb3, 0x87, 0xba, 0x22, 0x4b, 0xa7, 0xa2, 0xc5, 0x7c, 0xf0, + 0x08, 0x9e, 0xfc, 0xe3, 0x2c, 0x12, 0xc5, 0xff, 0xf4, 0x99, 0x83, 0xfe, + 0x6b, 0xb9, 0x2f, 0x71, 0x62, 0xbe, 0x7f, 0x02, 0x27, 0xbf, 0xd1, 0x36, + 0x3c, 0x03, 0x3a, 0xc5, 0x0d, 0x1e, 0x1b, 0xc2, 0x65, 0xc8, 0xaf, 0xf7, + 0x70, 0x8a, 0x0d, 0xad, 0x96, 0x2e, 0x62, 0x58, 0xbf, 0xb4, 0xe3, 0x7c, + 0xed, 0x62, 0xfa, 0x1e, 0x7d, 0x96, 0x2a, 0x51, 0x41, 0xb1, 0xc6, 0x0b, + 0x31, 0x75, 0xff, 0xfe, 0x93, 0x9a, 0x6b, 0x77, 0xf9, 0x7f, 0x71, 0xcb, + 0xb8, 0x2c, 0x5f, 0xff, 0x7a, 0x77, 0x7f, 0x39, 0xcc, 0xe3, 0x0c, 0x6b, + 0x17, 0xff, 0x1d, 0xbb, 0xf6, 0xb1, 0xff, 0x23, 0x58, 0xbf, 0xfa, 0x60, + 0x60, 0x59, 0xdf, 0xbd, 0x27, 0x58, 0xa0, 0x22, 0x34, 0x91, 0x69, 0xd3, + 0x01, 0xe4, 0x37, 0xea, 0x57, 0x13, 0x32, 0x3a, 0xf7, 0x86, 0xaf, 0xce, + 0xda, 0x36, 0x5b, 0xa1, 0xe5, 0x8b, 0xe7, 0x3b, 0x41, 0x62, 0xfd, 0x21, + 0xbb, 0x06, 0xb1, 0x7f, 0xef, 0xb8, 0x7e, 0x78, 0x05, 0x9f, 0x58, 0xbf, + 0xa4, 0x07, 0x9e, 0x12, 0xc5, 0xfd, 0x9b, 0x61, 0x64, 0x16, 0x2e, 0x98, + 0x96, 0x2f, 0xff, 0xe9, 0xea, 0xe4, 0xe9, 0xc3, 0xf9, 0x91, 0x4e, 0xb6, + 0x95, 0x8a, 0x94, 0xde, 0x20, 0x30, 0x32, 0x23, 0x4a, 0x5d, 0x07, 0x45, + 0xa0, 0x2d, 0x21, 0x8b, 0xff, 0xf9, 0xbf, 0x19, 0xf7, 0x93, 0xb0, 0xf8, + 0xdb, 0x36, 0x96, 0x2f, 0xfe, 0xe7, 0xf3, 0xa9, 0xfc, 0xf0, 0xe0, 0x96, + 0x2f, 0xe3, 0xf8, 0x4d, 0xb4, 0xac, 0x51, 0x88, 0xd5, 0xed, 0x78, 0x34, + 0x8b, 0xfe, 0xf6, 0x60, 0x5e, 0x8b, 0x9b, 0x2c, 0x53, 0x9f, 0x80, 0x8c, + 0xef, 0xe7, 0xf4, 0x27, 0xce, 0xb1, 0x68, 0x2c, 0x5e, 0x17, 0x78, 0xb1, + 0x7f, 0xb4, 0xe2, 0xd8, 0x1c, 0x82, 0xc5, 0xfe, 0xfc, 0x9c, 0xce, 0x7c, + 0x6b, 0x17, 0xf6, 0x76, 0x0c, 0xf7, 0x16, 0x2f, 0xd2, 0x5d, 0xc3, 0x8b, + 0x1f, 0x35, 0xf5, 0x28, 0x9e, 0x13, 0x2d, 0xfc, 0x71, 0x77, 0x0e, 0x47, + 0xac, 0x5f, 0x4f, 0xda, 0x3d, 0x62, 0xd0, 0x93, 0xd9, 0x23, 0x4b, 0xef, + 0xff, 0x34, 0xb1, 0x7f, 0xf3, 0x6b, 0x6f, 0xbe, 0xb0, 0xbb, 0xdd, 0x62, + 0xe9, 0xd9, 0x62, 0xa0, 0x7b, 0xee, 0x8f, 0x7f, 0xe9, 0xe4, 0xbf, 0x7e, + 0xf4, 0x9d, 0x62, 0xe6, 0x89, 0x62, 0x86, 0x7a, 0xe6, 0x9f, 0xdf, 0xd2, + 0x14, 0x45, 0x23, 0x58, 0xbf, 0xf8, 0xb3, 0x8e, 0x03, 0x27, 0x69, 0xe2, + 0xc5, 0x6c, 0xac, 0x90, 0x63, 0xdb, 0xc3, 0x53, 0xb7, 0xb7, 0x26, 0x8a, + 0x10, 0x5a, 0x78, 0xf1, 0x1f, 0x42, 0xfb, 0xf6, 0xff, 0x92, 0x35, 0x62, + 0xff, 0x9b, 0xdf, 0x90, 0x9e, 0x7c, 0xb1, 0x52, 0xb8, 0x51, 0x92, 0xcd, + 0x9a, 0x11, 0xe2, 0x2a, 0xbe, 0x3b, 0x77, 0xe5, 0x8b, 0xfb, 0x6f, 0x8b, + 0xda, 0x95, 0x8b, 0xff, 0xf8, 0xed, 0xf6, 0x86, 0x73, 0x07, 0x84, 0xf2, + 0x6a, 0xc5, 0xff, 0xfe, 0x7d, 0xbe, 0xf3, 0xef, 0x89, 0x8f, 0x1b, 0xf5, + 0x80, 0x6f, 0x2c, 0x5f, 0xfd, 0xb4, 0xf8, 0xc0, 0xf7, 0x0f, 0xa8, 0x3e, + 0x2c, 0x5f, 0xfc, 0xd1, 0xf8, 0x4c, 0x36, 0xce, 0xfc, 0xb1, 0x78, 0x3d, + 0xb8, 0xb1, 0x7f, 0xda, 0x9e, 0x36, 0x8a, 0x60, 0xb1, 0x74, 0xc1, 0x62, + 0x9d, 0x3c, 0xa8, 0x96, 0x74, 0xd9, 0xf5, 0x0f, 0x23, 0x74, 0x20, 0xea, + 0x38, 0xbd, 0x06, 0xd9, 0x62, 0xf1, 0x9b, 0x1d, 0x62, 0xfc, 0xcc, 0x5b, + 0x1d, 0x62, 0xff, 0x9b, 0xb8, 0x3f, 0xfe, 0xd1, 0xeb, 0x17, 0xfd, 0xf0, + 0xc7, 0x19, 0x3b, 0xe7, 0x45, 0x8b, 0xf3, 0xe8, 0xa4, 0x25, 0x8a, 0x19, + 0xf4, 0xb2, 0x0d, 0xf6, 0x0d, 0x80, 0xb1, 0x7e, 0x9d, 0x8a, 0x76, 0x58, + 0xa3, 0x9e, 0x59, 0x11, 0x5b, 0xcb, 0x17, 0xf9, 0xb6, 0x2c, 0xf6, 0x01, + 0x62, 0xff, 0xc6, 0xf3, 0x99, 0xf7, 0xe0, 0xb6, 0x58, 0xa1, 0xa2, 0x1f, + 0x04, 0x84, 0x67, 0x7f, 0xfd, 0xf9, 0x37, 0xf9, 0xcc, 0xd1, 0x09, 0x80, + 0xb1, 0x7f, 0xbe, 0xdb, 0x7b, 0xd8, 0x12, 0xc5, 0xff, 0xd2, 0x10, 0x7b, + 0x41, 0xff, 0x90, 0xe2, 0xc5, 0x46, 0xcb, 0xb4, 0xb2, 0x49, 0x91, 0xfd, + 0x76, 0xd4, 0xe3, 0xd1, 0x10, 0x68, 0xa3, 0xf0, 0xa6, 0x66, 0xc2, 0x85, + 0x47, 0x8b, 0xc4, 0xa0, 0x19, 0xb5, 0xf4, 0x37, 0x6d, 0x2c, 0x5f, 0x4c, + 0x53, 0xb2, 0xc5, 0xf0, 0xd8, 0x80, 0xb1, 0x7f, 0xe2, 0x61, 0xfe, 0x7a, + 0x7d, 0x89, 0x62, 0xfe, 0x28, 0x16, 0x60, 0x16, 0x2f, 0x70, 0xcf, 0xac, + 0x54, 0x9e, 0x5b, 0x16, 0x5f, 0xfe, 0x86, 0x17, 0x85, 0xf7, 0xea, 0xea, + 0x98, 0xf5, 0x8b, 0xe2, 0x26, 0x8f, 0x58, 0xbf, 0xff, 0xfd, 0x87, 0xcd, + 0x00, 0x02, 0xe7, 0xdf, 0xd0, 0xcf, 0xb0, 0x1c, 0x72, 0xb1, 0x68, 0xf5, + 0x8b, 0xef, 0xbb, 0x01, 0x62, 0xa4, 0xdb, 0xf0, 0x56, 0xef, 0x89, 0x62, + 0xff, 0xff, 0x66, 0xe6, 0x10, 0xba, 0x8c, 0xce, 0xe1, 0x82, 0x20, 0x71, + 0x62, 0xe8, 0x71, 0x62, 0xb6, 0x44, 0x03, 0x34, 0x54, 0xa2, 0xec, 0x50, + 0x98, 0xbd, 0x06, 0x95, 0x8b, 0xff, 0xdb, 0x67, 0x7e, 0xe3, 0x94, 0x81, + 0x8e, 0xb1, 0x7f, 0xbb, 0x2c, 0x1f, 0xd8, 0x25, 0x8a, 0x94, 0x4e, 0x60, + 0xe3, 0x25, 0xd4, 0xae, 0x02, 0x6c, 0x49, 0x02, 0x41, 0x91, 0x1b, 0x08, + 0xae, 0xc8, 0x1d, 0x4f, 0xe4, 0x8d, 0x0a, 0xe2, 0x86, 0xdf, 0x21, 0x87, + 0x7f, 0x09, 0xb5, 0x06, 0x1a, 0xc5, 0xe8, 0x4b, 0xac, 0x50, 0xcf, 0x2b, + 0xc5, 0xd7, 0xf8, 0x7b, 0x60, 0x59, 0xf6, 0x58, 0xbc, 0x29, 0x02, 0xc5, + 0xfc, 0x59, 0xdc, 0x23, 0xe2, 0x58, 0xad, 0x1e, 0x87, 0xc7, 0x6b, 0x11, + 0x4e, 0xd0, 0x85, 0xbf, 0xff, 0xfc, 0xfd, 0xc2, 0x4f, 0xa9, 0x83, 0xf8, + 0x0f, 0xad, 0x67, 0xb9, 0x9b, 0x2c, 0x5f, 0xd2, 0x50, 0xdd, 0x86, 0xb1, + 0x5f, 0x45, 0x3f, 0x9e, 0x6f, 0xff, 0xf4, 0x3d, 0x21, 0x73, 0x99, 0xff, + 0x39, 0xbe, 0xe6, 0x6c, 0xb1, 0x62, 0xc4, 0x44, 0x76, 0x47, 0x7b, 0xd0, + 0x82, 0xc5, 0xec, 0x7e, 0x98, 0x78, 0xdd, 0x0a, 0x2f, 0xed, 0xa2, 0x84, + 0x6d, 0xad, 0x96, 0x2f, 0x88, 0xb3, 0xcb, 0x17, 0x85, 0xad, 0x96, 0x2f, + 0xcf, 0x1f, 0xad, 0x3a, 0xc5, 0xef, 0xb9, 0xd6, 0x2a, 0x37, 0x46, 0x04, + 0x9c, 0x61, 0x0f, 0xc7, 0xc4, 0x57, 0x7f, 0xd9, 0x14, 0x1b, 0x5b, 0x7c, + 0x4b, 0x17, 0xfd, 0x83, 0x1b, 0xf7, 0x9d, 0xf9, 0x62, 0xfa, 0x39, 0x88, + 0x0b, 0x14, 0x34, 0x4e, 0x7c, 0xf0, 0x33, 0xbb, 0xba, 0xd8, 0xd9, 0x62, + 0xb6, 0x3d, 0x31, 0x98, 0xde, 0x61, 0x69, 0x62, 0xfa, 0x3e, 0x78, 0x4b, + 0x17, 0xfe, 0xfb, 0x1f, 0xdf, 0x9f, 0x08, 0xeb, 0x15, 0x87, 0xcb, 0x11, + 0x2d, 0xff, 0xd9, 0x86, 0x9e, 0x5f, 0x5a, 0x70, 0x96, 0x2f, 0x33, 0x69, + 0x62, 0xff, 0xbd, 0xf1, 0x34, 0x3a, 0xd0, 0x3a, 0xc5, 0xf0, 0x3a, 0x60, + 0xd6, 0x2f, 0xf9, 0xe0, 0xff, 0x11, 0xce, 0xeb, 0x17, 0x67, 0x96, 0x2e, + 0xe0, 0x4b, 0x15, 0x29, 0xfa, 0x8c, 0x8f, 0x21, 0x05, 0xa2, 0x2f, 0xa2, + 0x90, 0xe7, 0x0f, 0xfc, 0x4b, 0x1c, 0x72, 0x18, 0xbd, 0xcd, 0xd4, 0xb1, + 0x7b, 0xf8, 0x75, 0x8b, 0xff, 0xd3, 0x1e, 0x79, 0x19, 0x67, 0xbc, 0xc4, + 0xb1, 0x44, 0x88, 0x2f, 0x0d, 0x75, 0x0e, 0xdc, 0xf1, 0x9d, 0x63, 0xe0, + 0x2b, 0x46, 0x90, 0xba, 0x8d, 0x8e, 0xfa, 0xee, 0x18, 0x3d, 0x75, 0x3f, + 0x8d, 0x45, 0xd3, 0x2c, 0xcf, 0x68, 0xd6, 0x20, 0x68, 0x38, 0xde, 0xf2, + 0x91, 0x22, 0x6c, 0xa0, 0x6d, 0xe5, 0x7e, 0x77, 0x1f, 0x2b, 0xca, 0x91, + 0x8a, 0x3f, 0x3d, 0x4a, 0xf4, 0x3c, 0x23, 0xff, 0x39, 0xf6, 0xd1, 0xe9, + 0x02, 0x3b, 0x5e, 0xbc, 0x84, 0xa7, 0x15, 0x79, 0x3b, 0xdd, 0xe9, 0xcc, + 0xc1, 0x43, 0xe3, 0xa4, 0x32, 0x42, 0x8e, 0x6e, 0x3a, 0x1e, 0xa1, 0xcb, + 0x31, 0xea, 0x8c, 0x52, 0xa3, 0x1f, 0x0b, 0xe3, 0xf7, 0x80, 0xe7, 0x7a, + 0x35, 0xc7, 0x46, 0xeb, 0x17, 0x75, 0x9d, 0xac, 0x5f, 0x7a, 0x3b, 0x3e, + 0xb1, 0x62, 0x58, 0xae, 0xb4, 0xdb, 0xc0, 0x9a, 0xdd, 0x71, 0x62, 0xe8, + 0xdf, 0xac, 0x58, 0xa8, 0xd8, 0xdd, 0x75, 0xc1, 0x8b, 0x69, 0x62, 0x96, + 0x2b, 0xac, 0x2f, 0x86, 0x25, 0x77, 0x5d, 0xc7, 0x2c, 0x5f, 0x60, 0xd8, + 0xeb, 0x15, 0x1b, 0x9e, 0x26, 0x88, 0xaf, 0x7a, 0x7e, 0xb1, 0x7d, 0x23, + 0xc3, 0xac, 0x5b, 0x52, 0x6f, 0xf4, 0x3b, 0x68, 0xf5, 0x8b, 0x9f, 0xa9, + 0x62, 0xf6, 0xa7, 0x75, 0x8b, 0xfb, 0xb8, 0x30, 0xfe, 0xeb, 0x16, 0xd2, + 0xc5, 0x61, 0xef, 0xb8, 0xf3, 0x17, 0xdf, 0x6d, 0xa9, 0xd9, 0x62, 0xc4, + 0xb1, 0x60, 0x2c, 0x53, 0x9a, 0x30, 0xc4, 0x6e, 0xcf, 0xac, 0x5e, 0xfe, + 0x44, 0xb1, 0x7b, 0xee, 0x75, 0x8b, 0x44, 0xb1, 0x5b, 0x1f, 0x28, 0xc5, + 0xd8, 0x78, 0x43, 0xb6, 0x89, 0x62, 0xf8, 0xb6, 0x17, 0x16, 0x29, 0xcd, + 0xbb, 0x09, 0xdf, 0xb0, 0x7a, 0x6d, 0xd6, 0x2f, 0x9b, 0x69, 0xd2, 0xc5, + 0xed, 0x36, 0xcb, 0x16, 0x1f, 0xcf, 0xa8, 0x8a, 0x7c, 0x47, 0x7b, 0x0b, + 0xcb, 0x15, 0x27, 0xa1, 0xf3, 0x4b, 0xc3, 0x68, 0x2c, 0x5f, 0xdf, 0x8a, + 0x13, 0xad, 0x96, 0x2e, 0x14, 0x16, 0x29, 0xcf, 0x99, 0x87, 0x7a, 0x18, + 0xd8, 0x6b, 0x17, 0x39, 0xd6, 0x2f, 0x61, 0xe5, 0x62, 0x9d, 0x5f, 0xac, + 0x44, 0xc7, 0x15, 0xfb, 0xcb, 0x16, 0x01, 0x20, 0xa1, 0x0d, 0xc7, 0x3f, + 0x43, 0x67, 0xa4, 0x21, 0xe3, 0x8b, 0xc3, 0x12, 0xea, 0x17, 0xbd, 0xae, + 0x09, 0x62, 0xdf, 0x58, 0xbf, 0x82, 0x9e, 0xf8, 0xdb, 0xac, 0x5c, 0x1f, + 0x16, 0x2a, 0x23, 0xca, 0xe1, 0x8d, 0xc5, 0x12, 0xc5, 0x83, 0x58, 0xba, + 0x4d, 0x58, 0xbd, 0xa9, 0x82, 0xc5, 0xf1, 0x60, 0x38, 0xb1, 0x6e, 0xf6, + 0x3d, 0x7d, 0x0c, 0x30, 0xed, 0x4a, 0x6a, 0xbb, 0x0f, 0x0d, 0x73, 0x08, + 0xfb, 0x18, 0x13, 0x55, 0xf6, 0xb6, 0xcd, 0x2c, 0x5f, 0x3e, 0x85, 0x1e, + 0xb1, 0x52, 0x79, 0x58, 0x49, 0x7e, 0xee, 0x1e, 0x6e, 0xd6, 0x2e, 0xe6, + 0xeb, 0x17, 0x34, 0xac, 0x5a, 0x56, 0x2b, 0xe8, 0x8b, 0x62, 0x02, 0x2b, + 0xe0, 0xcf, 0x85, 0xad, 0x8b, 0x17, 0xcc, 0x77, 0x3a, 0xc5, 0xfe, 0xef, + 0x52, 0xf0, 0x6e, 0x2c, 0x5f, 0x61, 0x4c, 0x16, 0x2a, 0x07, 0xef, 0x84, + 0x47, 0x34, 0xb4, 0x72, 0xc5, 0xfb, 0x99, 0xe7, 0xd2, 0xc5, 0xec, 0xef, + 0xcb, 0x14, 0x03, 0xc6, 0xe1, 0x45, 0xef, 0xb8, 0x4b, 0x17, 0x30, 0xd6, + 0x2f, 0xfe, 0x16, 0xee, 0x6f, 0xda, 0x1c, 0x73, 0xac, 0x56, 0x22, 0x7b, + 0x72, 0x28, 0x87, 0x88, 0x5e, 0xe8, 0x71, 0x62, 0xe6, 0x1a, 0xc5, 0xef, + 0x67, 0x16, 0x2e, 0x29, 0x58, 0xa8, 0x1e, 0x50, 0x85, 0xfa, 0x0e, 0xdf, + 0xf3, 0x8b, 0x69, 0xec, 0x1a, 0x95, 0x8b, 0xd0, 0x9e, 0xd6, 0x2d, 0x1e, + 0xb1, 0x51, 0x1b, 0x32, 0x1e, 0xbb, 0x3b, 0x58, 0xb1, 0x2c, 0x5b, 0x4e, + 0x6a, 0x58, 0x62, 0xd1, 0xcb, 0x17, 0xf1, 0x67, 0x4d, 0x3f, 0x16, 0x2b, + 0x63, 0xc4, 0x08, 0x56, 0xdd, 0xac, 0x54, 0xa2, 0x81, 0xda, 0x44, 0x49, + 0x7d, 0xa8, 0x49, 0xd6, 0x2f, 0xdd, 0x9e, 0x73, 0xcb, 0x15, 0x87, 0x98, + 0xc4, 0x77, 0xdf, 0x6c, 0xd2, 0xc5, 0xfb, 0x6c, 0x27, 0x35, 0x62, 0xa4, + 0xf2, 0xdc, 0x8a, 0xfe, 0xd4, 0x00, 0xfd, 0xf1, 0x62, 0xff, 0x70, 0x32, + 0x9f, 0xbe, 0xcb, 0x14, 0xc7, 0xcb, 0xe3, 0x0b, 0xa0, 0x4b, 0x17, 0xdc, + 0xe4, 0x81, 0x62, 0x96, 0x2b, 0xae, 0xab, 0xb5, 0x13, 0x08, 0x81, 0x97, + 0x64, 0x3e, 0x7b, 0x3d, 0x76, 0x2d, 0x18, 0x9d, 0xbb, 0xf0, 0xea, 0x67, + 0xa2, 0x6b, 0x14, 0x21, 0x7a, 0x10, 0x84, 0x2e, 0x19, 0x1d, 0xe9, 0x8e, + 0x8d, 0xd6, 0x2f, 0xfd, 0xd0, 0xb3, 0x83, 0x13, 0x6a, 0x0b, 0x17, 0xfc, + 0x58, 0x69, 0x67, 0xbe, 0xeb, 0x17, 0xc3, 0xfe, 0x71, 0x62, 0xb0, 0xf6, + 0xd8, 0xe2, 0xfe, 0x63, 0x70, 0x6d, 0x05, 0x8a, 0x74, 0x75, 0x7e, 0x13, + 0x84, 0x41, 0x7e, 0x22, 0xce, 0x8c, 0xb1, 0x7e, 0x63, 0x9d, 0xa0, 0xb1, + 0x7f, 0xe1, 0x33, 0x96, 0x7b, 0x81, 0x9d, 0x62, 0xbe, 0x7c, 0xfc, 0x28, + 0xbe, 0xc1, 0xb4, 0x16, 0x2a, 0x07, 0x89, 0xf2, 0x2a, 0x74, 0x7a, 0xb4, + 0x34, 0xed, 0x05, 0x8b, 0x83, 0xf2, 0xc5, 0xfd, 0xf7, 0xc8, 0x98, 0x0b, + 0x15, 0x03, 0xc7, 0xf0, 0xcd, 0xda, 0x65, 0x8b, 0xe6, 0xda, 0x74, 0xb1, + 0x5a, 0x37, 0x44, 0x2f, 0x7d, 0x00, 0x0a, 0x0b, 0x17, 0xda, 0x0e, 0x40, + 0xb1, 0x7a, 0x7f, 0x2b, 0x15, 0x27, 0xc8, 0xe4, 0x9f, 0x24, 0xbd, 0x0e, + 0x74, 0x58, 0xbf, 0x1e, 0x4a, 0x1c, 0x58, 0xbe, 0x9f, 0x46, 0xfd, 0x62, + 0xc5, 0xe7, 0x2d, 0xd6, 0x2f, 0xcc, 0x70, 0x02, 0x56, 0x2f, 0xd1, 0x42, + 0x7d, 0xc5, 0x8a, 0xd8, 0xf4, 0xbc, 0x51, 0x7d, 0x09, 0x28, 0x2c, 0x54, + 0xa6, 0x53, 0xb1, 0x04, 0x0a, 0x06, 0x5a, 0xed, 0xf1, 0x11, 0xde, 0x23, + 0x7e, 0xb1, 0x61, 0xac, 0x54, 0x9b, 0x07, 0x1e, 0xbf, 0xff, 0x41, 0xc8, + 0x85, 0xde, 0xa7, 0xcf, 0xbb, 0x8d, 0x62, 0xe6, 0xed, 0x62, 0xfe, 0xfe, + 0x44, 0x52, 0x35, 0x8b, 0xfe, 0x84, 0x9f, 0x99, 0xa9, 0xe2, 0xc5, 0x6e, + 0x7c, 0xfd, 0x97, 0x5f, 0x44, 0x4c, 0x12, 0xc5, 0xff, 0x49, 0x67, 0x4c, + 0x26, 0x35, 0x62, 0x8d, 0x3d, 0xdd, 0x12, 0x58, 0x6b, 0x15, 0x29, 0xc5, + 0x8d, 0x59, 0xdf, 0xda, 0x10, 0x22, 0x23, 0xbd, 0xe7, 0x02, 0xc5, 0xf0, + 0x24, 0xb7, 0x58, 0xb7, 0x5e, 0xb1, 0x46, 0x9e, 0xbf, 0x63, 0xa2, 0x23, + 0xbe, 0x87, 0xb0, 0x35, 0x8b, 0xf7, 0x9f, 0xec, 0x75, 0x8b, 0xa4, 0x0b, + 0x17, 0xf3, 0x6a, 0x1c, 0x71, 0xac, 0x54, 0x9f, 0x6e, 0xe5, 0x1c, 0x17, + 0xbd, 0xa9, 0x3a, 0xc5, 0x3a, 0x61, 0xcc, 0x62, 0x28, 0x48, 0x84, 0x5f, + 0x7e, 0xce, 0xfc, 0xc7, 0x58, 0xbb, 0x22, 0x58, 0xb6, 0xc4, 0x78, 0x21, + 0x94, 0xde, 0x9d, 0x6c, 0xb1, 0x7c, 0x26, 0x84, 0xac, 0x5d, 0xb4, 0xac, + 0x54, 0xa2, 0x05, 0xca, 0x48, 0x78, 0x44, 0x54, 0xb1, 0x7b, 0x79, 0x02, + 0xc5, 0x8a, 0x06, 0xab, 0x03, 0x2f, 0xf9, 0x8d, 0xe3, 0xf4, 0x92, 0xf2, + 0xc5, 0xfd, 0xf7, 0x3e, 0x7d, 0x96, 0x2a, 0x51, 0x1a, 0x44, 0xa2, 0x3b, + 0xbe, 0x7f, 0xb1, 0xd6, 0x2f, 0x13, 0xf5, 0x2c, 0x57, 0x5e, 0x78, 0x3e, + 0x22, 0xb8, 0x5c, 0x58, 0xbe, 0xce, 0xda, 0x0b, 0x17, 0xf9, 0xf8, 0xe2, + 0xeb, 0xfe, 0xeb, 0x15, 0xc3, 0xdb, 0xf1, 0x1d, 0xf8, 0x50, 0xe7, 0xc6, + 0xb1, 0x52, 0x8b, 0xf7, 0x73, 0x22, 0x2b, 0xf6, 0x45, 0x06, 0xe2, 0xc5, + 0x6c, 0xcc, 0x70, 0x84, 0x61, 0xe3, 0x8c, 0xa3, 0x09, 0xbb, 0x59, 0x75, + 0xc8, 0xa1, 0x09, 0xa8, 0xd5, 0x8f, 0x08, 0x8f, 0xc7, 0x54, 0x51, 0xd9, + 0x72, 0x30, 0x4f, 0x43, 0xc4, 0x4d, 0xfd, 0x21, 0xcc, 0x19, 0x6d, 0x99, + 0x62, 0xc4, 0xb1, 0x7f, 0x34, 0x3a, 0xba, 0x85, 0xb2, 0xc5, 0xec, 0x62, + 0x58, 0xbf, 0x07, 0x23, 0xeb, 0xbe, 0xb5, 0x62, 0xb4, 0x7a, 0x3c, 0x1b, + 0xbb, 0x38, 0xb1, 0x62, 0x58, 0xba, 0x11, 0xeb, 0x15, 0x04, 0xc3, 0x8e, + 0x23, 0xf1, 0x16, 0x84, 0x39, 0x11, 0x70, 0x5f, 0xc2, 0x37, 0x02, 0x3d, + 0x62, 0xef, 0x71, 0x62, 0xdc, 0x58, 0xbd, 0xa0, 0xe2, 0x58, 0xbf, 0xb8, + 0xdd, 0xf9, 0xf6, 0x58, 0xa8, 0x8f, 0x8b, 0x42, 0x5e, 0x20, 0xa5, 0x8a, + 0x73, 0x79, 0x1c, 0x61, 0x7f, 0x66, 0xc3, 0xfb, 0xe9, 0x62, 0xd2, 0xb1, + 0x58, 0x99, 0xa3, 0x8d, 0xfe, 0x16, 0xc4, 0x47, 0x1c, 0x5f, 0x7f, 0x31, + 0x7f, 0xb6, 0x8f, 0x58, 0xbb, 0x46, 0xac, 0x5f, 0xe2, 0x81, 0x60, 0x24, + 0x0b, 0x14, 0xe7, 0x96, 0x21, 0x9b, 0xff, 0x4e, 0x70, 0xc9, 0x71, 0x87, + 0x05, 0x8b, 0xe0, 0x83, 0x9d, 0x96, 0x2f, 0xc1, 0x73, 0x6c, 0x09, 0x62, + 0xa4, 0xf4, 0x9c, 0x9a, 0xa5, 0x34, 0xff, 0xbe, 0x11, 0x0f, 0xa1, 0x25, + 0x71, 0x4a, 0xc5, 0xe0, 0x02, 0x56, 0x2e, 0xcd, 0xd6, 0x2e, 0x91, 0xf0, + 0xda, 0xf8, 0x76, 0xf4, 0x96, 0xeb, 0x17, 0xff, 0xf3, 0x04, 0x36, 0x6d, + 0x6d, 0xf6, 0xf7, 0xdf, 0x50, 0x58, 0xbf, 0x6f, 0xbf, 0xe7, 0x4b, 0x15, + 0xf4, 0x52, 0x90, 0xe8, 0x97, 0x6a, 0x09, 0xc6, 0x6e, 0x83, 0xc4, 0xbf, + 0x43, 0x46, 0xf9, 0x89, 0xa2, 0x58, 0xbf, 0x66, 0x83, 0xf7, 0x16, 0x2f, + 0xcf, 0xe2, 0xc8, 0x2c, 0x5c, 0xfd, 0x4b, 0x17, 0x3c, 0x7a, 0xc5, 0xcf, + 0xa5, 0x8a, 0x81, 0xb1, 0xea, 0x1a, 0xbe, 0x90, 0xa6, 0x25, 0x8b, 0xff, + 0x73, 0xa3, 0x7e, 0x4d, 0xcf, 0x71, 0x62, 0xd1, 0xeb, 0x16, 0x3a, 0xc5, + 0x08, 0xd3, 0x86, 0x2b, 0x7d, 0x9a, 0x16, 0x2c, 0x58, 0x0b, 0x14, 0x46, + 0xd0, 0x32, 0x2b, 0xed, 0xb6, 0x98, 0xf5, 0x8b, 0xcd, 0xd9, 0x2c, 0x5f, + 0xde, 0x26, 0x06, 0x12, 0xc5, 0xf8, 0x98, 0x18, 0x4b, 0x14, 0x61, 0xe9, + 0x78, 0xb2, 0xa5, 0x17, 0x43, 0x28, 0x13, 0x7d, 0xa3, 0xd6, 0x2d, 0x12, + 0xc5, 0xa2, 0x93, 0x51, 0x82, 0xb7, 0xbc, 0x43, 0x58, 0xbe, 0x93, 0xbe, + 0x96, 0x2b, 0x65, 0x6b, 0x90, 0x22, 0x34, 0xab, 0x72, 0x7e, 0xd2, 0xdc, + 0x92, 0x22, 0x4f, 0xb4, 0x81, 0x58, 0xa1, 0xb7, 0xc5, 0x7f, 0x13, 0x04, + 0x3b, 0x61, 0xac, 0x5e, 0xc2, 0xdd, 0x62, 0x98, 0xd7, 0xf0, 0x4a, 0xfd, + 0xc8, 0xa1, 0x3d, 0xac, 0x5f, 0x7b, 0x71, 0x6c, 0xb1, 0x5f, 0x3d, 0x12, + 0x2b, 0xbf, 0x6a, 0x0d, 0x9f, 0x58, 0xa9, 0x3c, 0x97, 0x21, 0xbf, 0x66, + 0xfe, 0xcd, 0xd6, 0x2f, 0x49, 0x44, 0xb1, 0x68, 0x96, 0x2e, 0x9f, 0x2c, + 0x56, 0x8f, 0x1d, 0x87, 0x48, 0x4e, 0xdc, 0x58, 0xbf, 0x82, 0x18, 0x9b, + 0x50, 0x58, 0xa5, 0x8a, 0x93, 0x78, 0x19, 0x85, 0xee, 0x4c, 0x16, 0x2f, + 0xdf, 0xcd, 0x3f, 0x16, 0x2e, 0x7d, 0x76, 0x78, 0xbe, 0x1d, 0xbf, 0x9f, + 0x4f, 0xc9, 0xd9, 0x62, 0xdd, 0x16, 0x2a, 0x55, 0x4e, 0x42, 0x17, 0x58, + 0x40, 0xee, 0x31, 0x16, 0xe9, 0x3b, 0xec, 0xdc, 0x2e, 0xea, 0x2e, 0xbf, + 0xbf, 0x25, 0x07, 0xd9, 0x62, 0xe1, 0xca, 0xc5, 0xff, 0xbf, 0x90, 0xf4, + 0xe1, 0x77, 0xe5, 0x8a, 0xc3, 0xd6, 0xf0, 0xbd, 0xfe, 0x7d, 0x89, 0xb6, + 0x17, 0x16, 0x2c, 0x1a, 0xc5, 0x3a, 0x3b, 0x4a, 0x10, 0x9e, 0x21, 0xea, + 0x35, 0xbe, 0x3f, 0xb3, 0x75, 0x8b, 0xf7, 0xbe, 0xe0, 0x75, 0x8b, 0xb3, + 0xcb, 0x17, 0xb1, 0xc6, 0xb1, 0x78, 0x9c, 0xd5, 0x8b, 0xec, 0x1b, 0xf4, + 0x58, 0xba, 0x4f, 0x87, 0x82, 0xc3, 0xb7, 0xe8, 0x79, 0xcf, 0xe5, 0x8b, + 0xf9, 0xbb, 0xfc, 0x86, 0x4b, 0x15, 0xd9, 0xec, 0x04, 0x53, 0x7b, 0xb8, + 0x71, 0x62, 0xb0, 0xf0, 0xd8, 0x92, 0xf0, 0x7d, 0x92, 0xc5, 0xfc, 0xd0, + 0x62, 0xce, 0xa5, 0x8b, 0x9c, 0x6b, 0x17, 0xf7, 0x89, 0x81, 0x84, 0xb1, + 0x60, 0x2c, 0x5f, 0x89, 0x81, 0x84, 0xb1, 0x61, 0x18, 0x7c, 0x9d, 0x96, + 0x78, 0x4a, 0xfb, 0x9f, 0x68, 0x2c, 0x5b, 0xcb, 0x15, 0x2a, 0xc7, 0x86, + 0x87, 0x84, 0x86, 0x94, 0x76, 0x2e, 0xeb, 0xba, 0x86, 0x37, 0xc8, 0x18, + 0x7c, 0x05, 0xe4, 0xf6, 0x23, 0x70, 0xc8, 0xee, 0x28, 0x96, 0x2c, 0x6a, + 0xc5, 0x82, 0x58, 0xac, 0x37, 0xda, 0x18, 0x0c, 0x4e, 0xdd, 0xac, 0x58, + 0x4b, 0x17, 0x02, 0x52, 0x2e, 0x08, 0x24, 0x8a, 0x73, 0x62, 0x10, 0xbd, + 0xf8, 0xb3, 0xdf, 0x74, 0x88, 0xc3, 0x43, 0x78, 0xb3, 0x8b, 0x17, 0x60, + 0xd6, 0x28, 0xd3, 0x67, 0xd0, 0x72, 0xa0, 0x89, 0x11, 0xb6, 0xdd, 0xb8, + 0x16, 0x2f, 0xf3, 0x1b, 0x24, 0x59, 0xe5, 0x8b, 0xf3, 0x8e, 0x70, 0x96, + 0x2f, 0x8b, 0xcf, 0xb2, 0xc5, 0xc0, 0x65, 0x8b, 0xe7, 0xd3, 0xf9, 0x62, + 0xa4, 0xf7, 0x1c, 0x8e, 0x21, 0x7a, 0x95, 0x4a, 0x83, 0x2e, 0xec, 0x4d, + 0xa1, 0xea, 0x02, 0x32, 0x19, 0xe1, 0x90, 0xa1, 0x05, 0x7b, 0xf2, 0x12, + 0xc5, 0xf7, 0x34, 0x42, 0x58, 0xbc, 0xdd, 0xf1, 0x62, 0x96, 0x2e, 0x9f, + 0xac, 0x57, 0x0d, 0x1f, 0x83, 0x2f, 0x98, 0x62, 0xe2, 0xc5, 0xe1, 0xc8, + 0xd6, 0x2a, 0x23, 0xc0, 0x22, 0x3b, 0xe0, 0xfe, 0xde, 0x58, 0xbf, 0x07, + 0xe2, 0x90, 0x2c, 0x56, 0xc9, 0xa9, 0x40, 0x78, 0x64, 0x7d, 0xa0, 0xbb, + 0x0f, 0x88, 0xba, 0x12, 0x5f, 0x7e, 0x44, 0x1a, 0xc5, 0xf1, 0x4e, 0x6c, + 0xb1, 0x6d, 0x2c, 0x5e, 0x92, 0x89, 0x62, 0xdd, 0x16, 0x29, 0x62, 0xd2, + 0xb1, 0x58, 0x6c, 0x40, 0x28, 0x41, 0x94, 0xb1, 0x4b, 0x15, 0x11, 0x70, + 0x70, 0xcb, 0xbf, 0x12, 0xc5, 0xce, 0x05, 0x8a, 0x93, 0x60, 0x01, 0x9a, + 0xd9, 0x35, 0xb1, 0x92, 0x61, 0x14, 0x42, 0x5a, 0x4e, 0x64, 0x40, 0x28, + 0xdc, 0xfc, 0x58, 0xbe, 0x86, 0x9b, 0xa2, 0xc5, 0xba, 0xf5, 0x8b, 0xff, + 0x8d, 0x72, 0xdf, 0x92, 0x76, 0xef, 0xcb, 0x17, 0x81, 0x9d, 0x4b, 0x17, + 0xff, 0xc5, 0x80, 0xc3, 0x8a, 0x75, 0xa7, 0x16, 0xeb, 0x17, 0xc5, 0x27, + 0x89, 0x62, 0xec, 0x1a, 0xc5, 0x4a, 0x65, 0xbb, 0x12, 0x9a, 0x2f, 0xa4, + 0x72, 0x20, 0xf2, 0x80, 0x44, 0x77, 0xc7, 0xe0, 0x8e, 0xb1, 0x4b, 0x16, + 0xc5, 0x8a, 0x34, 0xbd, 0x20, 0xcb, 0x47, 0x2c, 0x5d, 0xa3, 0x56, 0x2a, + 0x51, 0x1e, 0xe8, 0x22, 0x20, 0x0c, 0x56, 0xfa, 0x63, 0xb3, 0xb5, 0x8b, + 0xec, 0x00, 0x7d, 0xac, 0x5f, 0xfe, 0xc8, 0x72, 0x7d, 0x0c, 0x8f, 0x62, + 0x02, 0xc5, 0xf1, 0xac, 0x40, 0x58, 0xaf, 0x9f, 0x78, 0x93, 0x2f, 0xf9, + 0xfd, 0xfc, 0xef, 0xc2, 0x95, 0x8b, 0xe0, 0xe7, 0x40, 0x58, 0xa8, 0x1e, + 0xf7, 0xce, 0xae, 0xce, 0x2c, 0x5f, 0xfe, 0xc8, 0x47, 0x61, 0xad, 0x9e, + 0x9f, 0x71, 0x62, 0xa5, 0x10, 0xd0, 0x22, 0x00, 0xbd, 0x12, 0x79, 0x3c, + 0x84, 0xa7, 0xa3, 0x06, 0xba, 0x78, 0xb1, 0x67, 0x58, 0xbc, 0x76, 0x82, + 0xc7, 0xcb, 0x1b, 0x01, 0x62, 0xfa, 0x4f, 0x27, 0x58, 0xbf, 0x38, 0x47, + 0x6f, 0x2c, 0x5f, 0xee, 0xda, 0x3f, 0x34, 0x1c, 0x4b, 0x17, 0xf7, 0xf3, + 0xc5, 0x27, 0x58, 0xa7, 0x45, 0x96, 0x88, 0xbe, 0x53, 0xc3, 0xab, 0xed, + 0xff, 0x3c, 0x58, 0xb6, 0x2c, 0x54, 0x15, 0xd9, 0xbc, 0x7d, 0xfa, 0x3b, + 0x39, 0x43, 0x16, 0x72, 0x18, 0x81, 0x1e, 0x47, 0x12, 0x5c, 0xdb, 0x2c, + 0x5b, 0xcb, 0x15, 0xc3, 0x54, 0x10, 0xc5, 0xff, 0xd8, 0xfe, 0xe1, 0x67, + 0xbb, 0x84, 0xac, 0x5e, 0xdc, 0x44, 0xb1, 0x7c, 0x3c, 0x1c, 0x66, 0xe7, + 0xc5, 0x12, 0x25, 0x8d, 0x58, 0xa9, 0x64, 0xe7, 0xe4, 0x78, 0x7b, 0xb2, + 0xbc, 0x68, 0x9f, 0x87, 0xab, 0x4b, 0xef, 0x14, 0x2a, 0x83, 0x84, 0x27, + 0x51, 0xf5, 0xdb, 0xec, 0xb1, 0x60, 0x2c, 0x5f, 0x48, 0x42, 0x89, 0x62, + 0xf7, 0x26, 0x25, 0x8b, 0xec, 0xe8, 0xfa, 0x58, 0xb9, 0xce, 0xb1, 0x6c, + 0x19, 0xbb, 0x39, 0x25, 0xf4, 0x51, 0x3f, 0xd6, 0x29, 0x62, 0xda, 0x58, + 0xb1, 0xd6, 0x2b, 0x87, 0xab, 0xe2, 0x51, 0x06, 0x74, 0x12, 0xbe, 0x1b, + 0x37, 0x6b, 0x17, 0xe0, 0x3e, 0x9c, 0xd5, 0x8b, 0xb9, 0xe5, 0x8b, 0xb0, + 0x6b, 0x17, 0xba, 0x60, 0xd6, 0x28, 0xd3, 0x6d, 0xd4, 0x2f, 0x63, 0x56, + 0x2a, 0x51, 0x0d, 0x89, 0xcc, 0x4b, 0x7f, 0x78, 0x98, 0x18, 0x4b, 0x16, + 0x25, 0x8b, 0x9b, 0xa2, 0xc5, 0x18, 0x7a, 0xd8, 0x59, 0xa1, 0x1b, 0xb3, + 0xb5, 0x8a, 0xc5, 0x5f, 0xe6, 0x8d, 0x6e, 0x25, 0x11, 0x29, 0xd6, 0x7e, + 0xf6, 0xc7, 0xc0, 0x23, 0x28, 0x57, 0xfa, 0x10, 0x71, 0xc5, 0xf6, 0xfa, + 0xc5, 0xf0, 0xff, 0x3b, 0x2c, 0x56, 0x1b, 0x6d, 0xc4, 0xaf, 0x66, 0x8d, + 0x58, 0xbf, 0x8b, 0xd8, 0x4e, 0x12, 0xc5, 0xfd, 0xee, 0x61, 0xdf, 0xcb, + 0x16, 0xd2, 0xc5, 0x49, 0xe0, 0x61, 0x75, 0x2c, 0x52, 0xc5, 0xa5, 0x62, + 0xba, 0xf3, 0x52, 0x41, 0x9e, 0x0c, 0xbd, 0x9d, 0x19, 0x62, 0xf9, 0xf4, + 0xc6, 0xac, 0x5f, 0x7f, 0xf8, 0x05, 0x8b, 0x4f, 0xcf, 0x91, 0x87, 0x83, + 0x23, 0xb6, 0xcb, 0x15, 0x29, 0xe9, 0x61, 0x0b, 0x8f, 0x1d, 0xb5, 0x92, + 0x41, 0x09, 0x6e, 0xbc, 0xd2, 0xfe, 0xf6, 0x77, 0x09, 0x82, 0xc5, 0xfb, + 0xd9, 0xf6, 0x35, 0x62, 0xbb, 0x3d, 0x87, 0x2f, 0xbf, 0x76, 0x0e, 0xb0, + 0x5c, 0x58, 0xbd, 0xf6, 0x3a, 0xc5, 0xd3, 0xc5, 0x8b, 0xf9, 0xbc, 0x00, + 0xca, 0x0b, 0x17, 0xdc, 0xc7, 0x82, 0xc5, 0xcf, 0x8b, 0x17, 0xee, 0x66, + 0x9c, 0xd5, 0x8a, 0x1a, 0x31, 0x3b, 0x1d, 0x8f, 0x17, 0xd1, 0x7f, 0xc8, + 0xbc, 0x2d, 0x6e, 0xd6, 0x2e, 0x8f, 0x89, 0x62, 0xe9, 0x35, 0x62, 0xfe, + 0xf0, 0xdc, 0x12, 0x4b, 0x17, 0xb6, 0xfb, 0xac, 0x5d, 0xf1, 0x76, 0x79, 0x6c, 0x5b, 0x6f, 0xac, 0x5e, 0x08, 0x20, 0x92, 0x2f, 0xf4, 0xec, 0x1e, - 0x7d, 0xba, 0x48, 0x8c, 0x34, 0x37, 0xf9, 0xc6, 0xc5, 0xd4, 0x38, 0xb1, - 0x43, 0x3f, 0xdf, 0xa4, 0xdf, 0xd0, 0x9d, 0x85, 0x3a, 0x58, 0xbf, 0x7e, - 0x7e, 0xe6, 0xac, 0x5b, 0x65, 0x8a, 0x81, 0xbc, 0xc2, 0x9b, 0xf1, 0xc3, - 0x9d, 0x01, 0x62, 0x96, 0x29, 0x62, 0xd2, 0x72, 0xe0, 0x01, 0x95, 0x27, - 0xcf, 0x04, 0x2b, 0xcf, 0x9b, 0xac, 0x5f, 0xcf, 0xd7, 0x3d, 0x9b, 0xac, - 0x5c, 0x2e, 0x96, 0x2f, 0xf4, 0x3f, 0x98, 0x50, 0xe2, 0xc5, 0xcc, 0x6a, - 0xc5, 0xed, 0x42, 0x25, 0x8a, 0x93, 0xea, 0x63, 0x31, 0x0c, 0x51, 0xa8, - 0xe0, 0xf9, 0x87, 0x21, 0x07, 0x7f, 0x37, 0xb5, 0xac, 0xd9, 0x62, 0xa5, - 0x5e, 0xe0, 0xd9, 0xf0, 0xbb, 0x78, 0x58, 0x74, 0x44, 0xed, 0x71, 0x42, - 0x1f, 0x84, 0x3e, 0x87, 0xe8, 0x46, 0xd7, 0xa4, 0xee, 0xb1, 0x7a, 0x19, - 0xba, 0xc5, 0x2c, 0x5c, 0xe7, 0x58, 0xb4, 0xec, 0x68, 0xc6, 0x19, 0x69, - 0x58, 0xbf, 0xbf, 0x9c, 0xf3, 0xec, 0xb1, 0x7f, 0xa2, 0x11, 0x7b, 0x9f, - 0x75, 0x8a, 0xe1, 0xf2, 0x78, 0xbe, 0xee, 0x32, 0xc5, 0x46, 0x8b, 0xda, - 0xf3, 0x0d, 0xec, 0x9c, 0x2a, 0xde, 0x13, 0xbd, 0x0e, 0x3a, 0x0c, 0x44, - 0xec, 0xeb, 0xe2, 0x2b, 0xe8, 0x48, 0x38, 0xb1, 0x7f, 0x42, 0x7b, 0x39, - 0x01, 0x62, 0xda, 0xc3, 0xd2, 0x0c, 0x8e, 0xf6, 0xbb, 0x86, 0xb1, 0x6f, - 0xac, 0x54, 0x9e, 0xdb, 0x94, 0x77, 0x10, 0xdf, 0xf4, 0xf5, 0xfc, 0x89, - 0x8b, 0x65, 0x8b, 0xf9, 0x82, 0xea, 0x19, 0xe5, 0x8a, 0xf9, 0xf5, 0x91, - 0xdd, 0xff, 0xcf, 0xd8, 0xb3, 0x9d, 0x43, 0x3c, 0x4b, 0x17, 0xfe, 0xfc, - 0xf5, 0x02, 0xcf, 0x7d, 0xd6, 0x2f, 0xfe, 0x35, 0xb5, 0xa1, 0x1b, 0x9b, - 0xc8, 0x16, 0x2f, 0xf3, 0x1c, 0x7d, 0x05, 0x9f, 0x58, 0xad, 0x1f, 0xf7, - 0x64, 0x8b, 0xf9, 0xa1, 0xef, 0x49, 0xd6, 0x2f, 0xdf, 0x9e, 0x9a, 0x3d, - 0x62, 0xff, 0xfa, 0x7d, 0xc1, 0xe7, 0x9f, 0xe2, 0xce, 0xbc, 0xb1, 0x50, - 0x4f, 0x4b, 0x74, 0x67, 0x85, 0xee, 0x89, 0x3e, 0x5d, 0xe2, 0xcb, 0xc5, - 0x9f, 0x58, 0xb6, 0x96, 0x2f, 0xf9, 0xc6, 0x1f, 0xba, 0xdd, 0xce, 0xb1, - 0x7f, 0x66, 0xe1, 0xf6, 0xfe, 0x2c, 0x54, 0x0f, 0xbf, 0x0f, 0x6f, 0xfa, - 0x4b, 0xc5, 0x9e, 0x90, 0x96, 0x2c, 0x12, 0xc5, 0xfc, 0x17, 0x1c, 0xba, - 0x82, 0xc5, 0xf6, 0xde, 0xcf, 0xac, 0x54, 0x9f, 0x3e, 0x09, 0x88, 0xc2, - 0x96, 0x29, 0xd1, 0xb1, 0xa8, 0x4f, 0xb1, 0x6d, 0xf7, 0x3c, 0xce, 0xb1, - 0x7e, 0x88, 0x07, 0xc8, 0x96, 0x2f, 0xfd, 0x24, 0x3c, 0xdb, 0x0b, 0x3a, - 0x58, 0xbb, 0xf2, 0xb1, 0x5b, 0x9e, 0xaf, 0x8f, 0xab, 0x11, 0x46, 0xd0, - 0x80, 0xb8, 0x50, 0x58, 0xbe, 0xf7, 0x24, 0x0b, 0x17, 0x68, 0x4b, 0x15, - 0x86, 0xef, 0xc4, 0x76, 0xe2, 0xc5, 0x6c, 0x88, 0x52, 0x53, 0x11, 0x05, - 0xfe, 0x6e, 0xd8, 0x3d, 0xb0, 0x25, 0x8b, 0xff, 0xd3, 0x9d, 0x07, 0xe7, - 0x21, 0x43, 0x38, 0xb1, 0x78, 0x85, 0xb2, 0xc5, 0xfe, 0xe4, 0x9f, 0xa8, - 0x67, 0x96, 0x2f, 0x4e, 0x6c, 0xb1, 0x6c, 0x1a, 0x2e, 0xf7, 0x4b, 0xf0, - 0xf7, 0x63, 0x5b, 0xec, 0xf8, 0x7a, 0x58, 0xbb, 0xa0, 0x96, 0x2e, 0x90, - 0x96, 0x2e, 0x38, 0x16, 0x2e, 0x62, 0x58, 0xa9, 0x3e, 0x07, 0x1a, 0xf8, - 0xc3, 0x0c, 0x5c, 0xe6, 0xac, 0x5f, 0x0a, 0x0c, 0x35, 0x8b, 0xe7, 0xf0, - 0x19, 0x62, 0xfd, 0x3d, 0x43, 0x0e, 0xb1, 0x50, 0x44, 0x36, 0x86, 0x0e, - 0x47, 0xf2, 0x2b, 0xdf, 0x11, 0x2c, 0x5f, 0x72, 0x48, 0xd5, 0x8a, 0xd9, - 0x92, 0x96, 0x38, 0x4d, 0xe4, 0x7e, 0x6e, 0xbb, 0x1e, 0x39, 0x14, 0x20, - 0x75, 0x0f, 0x93, 0x99, 0xfe, 0x18, 0xad, 0x0a, 0xb0, 0x18, 0x14, 0x3c, - 0xb8, 0x8b, 0xe8, 0x42, 0x0a, 0x17, 0xfd, 0x8f, 0x43, 0x1d, 0xbb, 0x46, - 0xac, 0x5f, 0x49, 0xdb, 0xeb, 0x17, 0xbd, 0xe6, 0x58, 0xbe, 0xd0, 0xa7, - 0xb2, 0xc5, 0xe6, 0x20, 0x0c, 0xf9, 0x18, 0x8b, 0xc3, 0xb7, 0xf7, 0x0b, - 0x36, 0x0e, 0x0b, 0x16, 0xc8, 0xf3, 0xee, 0x01, 0xf5, 0xfc, 0x78, 0xa1, - 0x25, 0xe5, 0x8b, 0xa4, 0x0b, 0x17, 0x8b, 0x3b, 0x96, 0x2e, 0x7d, 0x96, - 0x29, 0x8d, 0xbf, 0x87, 0xef, 0x41, 0x86, 0xb1, 0x58, 0x8b, 0xa8, 0x8b, - 0xfe, 0x9d, 0xc2, 0x0b, 0xfd, 0xbb, 0xf0, 0xb3, 0xb3, 0x2c, 0x5f, 0x4e, - 0xcd, 0x05, 0x8b, 0x80, 0x75, 0x8b, 0xdc, 0xfb, 0xac, 0x56, 0x8d, 0xaf, - 0x86, 0x2f, 0xe2, 0x6f, 0x6d, 0x81, 0x2c, 0x52, 0xc5, 0x11, 0xbb, 0xf1, - 0x7d, 0x49, 0xfe, 0x62, 0xe5, 0xf6, 0xc5, 0x9d, 0x2c, 0x5f, 0xc0, 0xe6, - 0x0d, 0xa0, 0xb1, 0x58, 0x7a, 0x4c, 0x49, 0x7f, 0xd0, 0x1b, 0x03, 0xd3, - 0xd7, 0x96, 0x2f, 0xec, 0xf7, 0xdc, 0x80, 0xb1, 0x79, 0xcb, 0x8b, 0x17, - 0xbc, 0xfb, 0x2c, 0x51, 0x1f, 0x3f, 0x8b, 0x7b, 0x0e, 0x5f, 0x19, 0x9d, - 0x79, 0x62, 0xfe, 0xe4, 0xf5, 0x0c, 0xf2, 0xc5, 0x6e, 0x7a, 0x9c, 0x25, - 0xbe, 0xcf, 0x3f, 0x16, 0x29, 0x62, 0xba, 0x35, 0xcc, 0x45, 0x52, 0x9c, - 0xc6, 0x42, 0x89, 0xe1, 0x08, 0xca, 0x36, 0xf2, 0xc5, 0xfa, 0x28, 0x31, - 0x41, 0x62, 0xa4, 0xdd, 0xe0, 0x95, 0xdf, 0x02, 0xc5, 0xf6, 0x7c, 0x02, - 0x58, 0xa9, 0x5e, 0x18, 0x84, 0x3a, 0xf2, 0x1c, 0x9d, 0x1e, 0xe8, 0xd7, - 0xf0, 0xd4, 0x27, 0x2e, 0x47, 0x71, 0xe7, 0xf1, 0x0f, 0xc7, 0x0c, 0x58, - 0x35, 0x8a, 0x58, 0xbe, 0x62, 0x90, 0x2c, 0x5c, 0x20, 0xd6, 0x2b, 0x0f, - 0x66, 0x21, 0x3d, 0x06, 0x06, 0x43, 0x73, 0xc7, 0xac, 0x5b, 0x8b, 0x14, - 0x46, 0xb3, 0xc3, 0x57, 0xf7, 0xe7, 0xdc, 0xfb, 0xac, 0x5c, 0xc6, 0xac, - 0x58, 0x7e, 0x3c, 0x68, 0xe2, 0xeb, 0xdd, 0x70, 0x6b, 0x16, 0x95, 0x8a, - 0x94, 0x60, 0xe3, 0x33, 0x95, 0xb0, 0xfd, 0xa3, 0x96, 0x2e, 0x91, 0xac, - 0x57, 0x7a, 0x6b, 0x3e, 0x2b, 0x73, 0x1d, 0x62, 0xf1, 0x34, 0x16, 0x2c, - 0x6a, 0xc5, 0xb8, 0xb1, 0x63, 0xac, 0x5b, 0x4b, 0x14, 0xc6, 0x90, 0x42, - 0x54, 0xe7, 0xd3, 0xa1, 0x3f, 0x9b, 0x5e, 0x0f, 0xaf, 0x2c, 0x5f, 0x69, - 0xc5, 0xb2, 0xc5, 0xf4, 0xeb, 0x09, 0x62, 0x86, 0x78, 0xa1, 0x92, 0x58, - 0xd5, 0x8a, 0xd8, 0xdb, 0x68, 0x8e, 0xff, 0x30, 0x5e, 0xeb, 0x77, 0xd2, - 0xc5, 0x83, 0x58, 0xb0, 0x16, 0x29, 0x60, 0x69, 0xf1, 0xe0, 0xbb, 0xc2, - 0x17, 0xe5, 0xcd, 0x09, 0xb2, 0x22, 0x11, 0xbc, 0x70, 0x9d, 0xfc, 0x50, - 0x63, 0xe0, 0xd6, 0x2e, 0xc0, 0x2c, 0x54, 0x9e, 0x21, 0x16, 0xdf, 0x78, - 0xe7, 0xd2, 0xc5, 0xff, 0xc0, 0x92, 0xdd, 0xbc, 0x00, 0xca, 0x0b, 0x17, - 0x3f, 0xd6, 0x2e, 0x6e, 0xe5, 0x8a, 0x81, 0xb1, 0xf8, 0xbd, 0xe7, 0xc2, - 0x58, 0xbc, 0x59, 0x05, 0x8a, 0xd1, 0xb7, 0xf0, 0xdd, 0xfb, 0x6d, 0x09, - 0xb8, 0xb1, 0x7c, 0x2e, 0xff, 0x8c, 0xb1, 0x7f, 0xf7, 0xa1, 0x26, 0x87, + 0x7d, 0xbb, 0x48, 0x8c, 0x34, 0x37, 0xe6, 0x2e, 0xe1, 0xc5, 0x8b, 0xe8, + 0x66, 0xb6, 0x58, 0xb3, 0x8c, 0xf3, 0x7b, 0x29, 0xa1, 0xa2, 0xfb, 0xf0, + 0x96, 0xbf, 0x4e, 0xc2, 0x9d, 0x2c, 0x5c, 0xdc, 0x58, 0xa8, 0x1e, 0x00, + 0x0a, 0x6f, 0xdf, 0x9f, 0xb9, 0xab, 0x16, 0xd9, 0x62, 0xa0, 0x6f, 0x30, + 0xa6, 0xfc, 0x70, 0xe7, 0x40, 0x58, 0xa5, 0x8a, 0x58, 0xb4, 0x9c, 0xb8, + 0x00, 0x65, 0x49, 0xf3, 0xc1, 0x0a, 0xf3, 0xe6, 0xeb, 0x17, 0xf3, 0xf7, + 0xcf, 0x66, 0xeb, 0x17, 0x0b, 0xb5, 0x8b, 0xfd, 0x0f, 0xe6, 0x14, 0x38, + 0xb1, 0x73, 0x1a, 0xb1, 0x7b, 0x50, 0x89, 0x62, 0xa4, 0xfa, 0x98, 0xcc, + 0x43, 0x14, 0x6a, 0x38, 0x3e, 0x61, 0xc8, 0x41, 0xdf, 0xcd, 0xed, 0x6b, + 0x36, 0x58, 0xa9, 0x5c, 0x6e, 0xd8, 0x70, 0x6c, 0x78, 0x5d, 0xbc, 0x3c, + 0x7b, 0x68, 0x75, 0xe8, 0xa1, 0x0f, 0xc2, 0x1f, 0x43, 0xf4, 0x23, 0x6b, + 0xd2, 0x77, 0x58, 0xbd, 0x0c, 0xdd, 0x62, 0x96, 0x2e, 0x73, 0xac, 0x5a, + 0x76, 0x34, 0x63, 0x0c, 0xb4, 0xac, 0x5e, 0x26, 0x3a, 0xc5, 0xfd, 0xfc, + 0xe7, 0x9f, 0x65, 0x8b, 0xfd, 0x10, 0x8b, 0xdc, 0xfb, 0xac, 0x50, 0xd1, + 0x01, 0xc1, 0xcf, 0x17, 0xdd, 0xc6, 0x58, 0xa8, 0xd1, 0x7f, 0x62, 0x61, + 0xe9, 0x05, 0xbc, 0x9c, 0x81, 0xde, 0x15, 0x9d, 0x8e, 0x3a, 0x0c, 0x44, + 0xed, 0x09, 0x1f, 0x18, 0x5f, 0x42, 0x41, 0xc5, 0x8b, 0xfa, 0x13, 0xd1, + 0xc8, 0x0b, 0x16, 0xd6, 0x1e, 0x90, 0x64, 0x77, 0xb5, 0xd4, 0x35, 0x8b, + 0x7d, 0x62, 0xa4, 0xf6, 0xdc, 0xa3, 0xa8, 0x86, 0xff, 0xa7, 0xbf, 0xe4, + 0x4c, 0x5b, 0x2c, 0x5f, 0xcc, 0x17, 0x70, 0xcf, 0x2c, 0x57, 0xcf, 0xac, + 0x8e, 0xef, 0xfe, 0x7e, 0x85, 0x9c, 0xee, 0x19, 0xe2, 0x58, 0xbd, 0x3d, + 0x31, 0x62, 0xff, 0xdf, 0x9e, 0xe0, 0x59, 0xef, 0xba, 0xc5, 0xf4, 0x1f, + 0xdc, 0x58, 0xbf, 0xf8, 0xd6, 0xd6, 0x84, 0x6e, 0x6f, 0x20, 0x58, 0xbf, + 0xcc, 0x71, 0xf6, 0x16, 0x7d, 0x62, 0xa2, 0x45, 0x0e, 0x88, 0xfa, 0x24, + 0x5f, 0xcd, 0x0f, 0x7a, 0x4e, 0xb1, 0x7e, 0xfc, 0xf6, 0xd1, 0xeb, 0x17, + 0xff, 0xd3, 0xee, 0x0f, 0x3c, 0xff, 0x16, 0x77, 0xe5, 0x8a, 0x82, 0xa2, + 0x21, 0xa3, 0x6e, 0x3c, 0xf0, 0xe0, 0xd1, 0x9f, 0xcb, 0xbc, 0x59, 0x7f, + 0x8f, 0x25, 0xe7, 0xfb, 0xac, 0x5e, 0x2c, 0xfa, 0xc5, 0xb4, 0xb1, 0x7f, + 0xce, 0x30, 0xfd, 0xde, 0xee, 0x75, 0x8b, 0xfb, 0x37, 0x0f, 0xa7, 0xf1, + 0x62, 0xa0, 0x7d, 0xf8, 0x7b, 0x7f, 0xd2, 0x5e, 0x2c, 0xf4, 0x84, 0xb1, + 0x60, 0x96, 0x2f, 0xe0, 0xb8, 0xe5, 0xdc, 0x16, 0x2f, 0xb6, 0xf6, 0x7d, + 0x62, 0xa4, 0xf9, 0xf0, 0x4c, 0x46, 0x14, 0xb1, 0x4e, 0x8d, 0x8d, 0x42, + 0x7d, 0x8b, 0x6f, 0xb9, 0xe6, 0x75, 0x8b, 0xf4, 0x40, 0x3e, 0x44, 0xb1, + 0x7f, 0xe9, 0x21, 0xe6, 0xd8, 0x59, 0xda, 0xc5, 0xdf, 0x95, 0x8a, 0xdc, + 0xf5, 0x7c, 0x7d, 0x58, 0x8a, 0x36, 0x84, 0x05, 0xc2, 0x82, 0xc5, 0xf7, + 0xb9, 0x20, 0x58, 0xbb, 0x42, 0x58, 0xac, 0x37, 0x7e, 0x23, 0xb7, 0x16, + 0x2b, 0x64, 0x42, 0x92, 0x98, 0x88, 0x2f, 0xf3, 0x74, 0xc1, 0xed, 0x81, + 0x2c, 0x5f, 0xfe, 0x9c, 0xec, 0x3f, 0x39, 0x0a, 0x19, 0xc5, 0x8b, 0xc4, + 0x2d, 0x96, 0x2f, 0xf7, 0x24, 0xfd, 0xc3, 0x3c, 0xb1, 0x7a, 0x73, 0x65, + 0x8b, 0x60, 0xd1, 0x77, 0xba, 0x5f, 0x87, 0xba, 0x1a, 0xde, 0xf8, 0x7a, + 0x58, 0xba, 0x76, 0x58, 0xac, 0x36, 0xe4, 0x3f, 0x77, 0x61, 0x2c, 0x5d, + 0x21, 0x2c, 0x5c, 0x70, 0x2c, 0x5c, 0xc4, 0xb1, 0x52, 0x7c, 0x0e, 0x35, + 0xf1, 0x86, 0x18, 0xb9, 0xcd, 0x58, 0xbe, 0x14, 0x18, 0x6b, 0x17, 0xcf, + 0xe0, 0x32, 0xc5, 0xfa, 0x7b, 0x86, 0x1d, 0x62, 0xa0, 0x88, 0x6d, 0x0c, + 0x1c, 0x8f, 0xe4, 0x57, 0xbe, 0x22, 0x58, 0xbd, 0x3a, 0xe2, 0xc5, 0xc4, + 0x6a, 0xc5, 0xd9, 0x05, 0x8b, 0x72, 0x4d, 0x7f, 0xc6, 0x2b, 0x66, 0x52, + 0xe0, 0xe1, 0x37, 0x92, 0x90, 0xcd, 0x6b, 0x73, 0x28, 0xf1, 0xc8, 0xa1, + 0x03, 0xa8, 0x7c, 0x9c, 0xcf, 0xf0, 0xc5, 0x68, 0x55, 0x80, 0xc0, 0xa1, + 0xe5, 0xc7, 0xcf, 0x3f, 0x8a, 0x17, 0xfd, 0x0f, 0x42, 0x1d, 0x0d, 0x32, + 0xed, 0x1a, 0xb1, 0x7d, 0x27, 0x6f, 0xac, 0x5e, 0xf7, 0x99, 0x62, 0xfb, + 0x42, 0x9e, 0x8b, 0x17, 0x98, 0x80, 0x33, 0xe4, 0x62, 0x2f, 0x0e, 0xdf, + 0xdc, 0x2c, 0xd8, 0x38, 0x2c, 0x5b, 0x23, 0xcf, 0xb8, 0x07, 0xd7, 0xf1, + 0xe2, 0x84, 0x97, 0x96, 0x2c, 0x05, 0x8b, 0xf0, 0xb6, 0xf3, 0xec, 0xb1, + 0x52, 0x6f, 0x60, 0x25, 0x78, 0xb3, 0xa9, 0x62, 0xe7, 0xd9, 0x62, 0x98, + 0xdb, 0xf8, 0x7e, 0xf4, 0x18, 0x6b, 0x15, 0x89, 0x80, 0x44, 0xd9, 0xf5, + 0x7e, 0x10, 0x5f, 0xed, 0xdf, 0x85, 0x9d, 0x19, 0x62, 0xf4, 0x0a, 0x56, + 0x2f, 0xbe, 0xed, 0x05, 0x8a, 0xd8, 0xdf, 0x00, 0x72, 0xfa, 0x76, 0x68, + 0x2c, 0x5c, 0x03, 0xac, 0x5e, 0xe7, 0xdd, 0x62, 0xb4, 0x6d, 0x7c, 0x31, + 0x7f, 0x13, 0x7b, 0x6c, 0x09, 0x62, 0x96, 0x28, 0x8d, 0xdf, 0x8b, 0xef, + 0x71, 0xf6, 0x58, 0xbf, 0x6b, 0x23, 0x9c, 0x0b, 0x16, 0x68, 0x1e, 0x48, + 0x07, 0xaa, 0x51, 0xd9, 0x8b, 0x8e, 0xd3, 0x7d, 0xb1, 0x67, 0x6b, 0x17, + 0xf0, 0x39, 0x83, 0x68, 0x2c, 0x52, 0xc5, 0x61, 0xef, 0x31, 0x27, 0x51, + 0x75, 0xff, 0x40, 0x6c, 0x0f, 0x4f, 0x7e, 0x58, 0xbf, 0xb3, 0xdf, 0x72, + 0x02, 0xc5, 0xe7, 0x2e, 0x2c, 0x5e, 0xf3, 0xec, 0xb1, 0x44, 0x7c, 0xfe, + 0x2d, 0xe8, 0x39, 0x7c, 0x66, 0x77, 0xe5, 0x8b, 0xfb, 0x93, 0xdc, 0x33, + 0xcb, 0x15, 0xb9, 0xea, 0x70, 0x96, 0xfb, 0x3c, 0xfc, 0x58, 0xa5, 0x8a, + 0xec, 0xd7, 0x31, 0x15, 0x4a, 0x73, 0x19, 0x0a, 0x27, 0x84, 0x23, 0x28, + 0xdb, 0xcb, 0x17, 0x87, 0xf9, 0x58, 0xbf, 0x45, 0x06, 0x28, 0x2c, 0x06, + 0x5e, 0xd4, 0x9f, 0x46, 0x17, 0xd8, 0x0b, 0x17, 0x05, 0x8b, 0x15, 0xf3, + 0x54, 0xc2, 0x57, 0xd9, 0xf0, 0x09, 0x62, 0xa5, 0x7e, 0xe2, 0x10, 0xeb, + 0xc8, 0xca, 0xbb, 0x3e, 0x77, 0x3d, 0x11, 0x7e, 0x34, 0x42, 0x84, 0x5f, + 0x23, 0xc8, 0xf4, 0x2b, 0x04, 0x95, 0x1c, 0x41, 0x60, 0xd6, 0x29, 0x62, + 0xf9, 0x8a, 0x40, 0xb1, 0x70, 0x83, 0x58, 0xac, 0x3d, 0x98, 0x84, 0xf4, + 0x18, 0x19, 0x0d, 0xcf, 0x1e, 0xb1, 0x6e, 0x2c, 0x51, 0x1a, 0xcf, 0x0d, + 0x5f, 0xdf, 0x9f, 0x73, 0xee, 0xb1, 0x73, 0x1a, 0xb1, 0x61, 0xf8, 0xf1, + 0xa3, 0x8b, 0xaf, 0x77, 0xc1, 0xac, 0x5a, 0x56, 0x2a, 0x51, 0x83, 0x8c, + 0xce, 0x56, 0xc3, 0xf6, 0x8e, 0x58, 0xba, 0x46, 0xb1, 0x5d, 0x69, 0xac, + 0xf8, 0xad, 0xcc, 0x75, 0x8b, 0xc4, 0xd0, 0x58, 0xb1, 0xab, 0x16, 0xe2, + 0xc5, 0x8e, 0xb1, 0x6d, 0x2c, 0x53, 0x1a, 0x41, 0x09, 0x53, 0x9f, 0x4e, + 0x84, 0xfe, 0x6d, 0x78, 0x3e, 0xfc, 0xb1, 0x7d, 0xa7, 0x16, 0xcb, 0x17, + 0xd3, 0xac, 0x25, 0x8a, 0x19, 0xe2, 0x86, 0x49, 0x63, 0x56, 0x2c, 0x25, + 0x8a, 0xd8, 0xf2, 0x34, 0x47, 0xe1, 0x3b, 0xfc, 0xc1, 0x7b, 0xbd, 0xdf, + 0x4b, 0x16, 0x0d, 0x62, 0xc0, 0x58, 0xa5, 0x81, 0xaa, 0x03, 0xc1, 0x77, + 0x84, 0x2f, 0xcb, 0x9a, 0x15, 0xa4, 0x60, 0x23, 0x78, 0xe1, 0x3b, 0xf8, + 0xa0, 0xc7, 0xc1, 0xac, 0x5d, 0x80, 0x58, 0xa9, 0x3c, 0x42, 0x2d, 0xa5, + 0x8b, 0xe2, 0x9c, 0x89, 0x62, 0xb6, 0x35, 0xdf, 0x0c, 0xbe, 0xf1, 0xcf, + 0xa5, 0x8b, 0xff, 0x81, 0x25, 0xbb, 0x78, 0x01, 0x94, 0x16, 0x2e, 0x7f, + 0xac, 0x5c, 0xdd, 0x4b, 0x15, 0x03, 0x63, 0xf1, 0x7b, 0xfe, 0xc2, 0x0f, + 0x5a, 0x9c, 0x25, 0x8b, 0xb0, 0x96, 0x2a, 0x4f, 0x39, 0xce, 0x2f, 0x16, + 0x41, 0x62, 0xb4, 0x6f, 0x3c, 0x41, 0x74, 0x92, 0xc5, 0xfb, 0x6d, 0x09, + 0xb8, 0xb1, 0x7c, 0x2e, 0xbf, 0x8c, 0xb1, 0x7f, 0xf7, 0xa1, 0x26, 0x87, 0xef, 0x89, 0xb6, 0x58, 0xbd, 0xfc, 0xe2, 0xc5, 0xe6, 0x60, 0x96, 0x2f, 0xb4, 0xe0, 0xe2, 0xc5, 0xb6, 0x19, 0xe0, 0x70, 0x76, 0xb1, 0x1e, 0xec, - 0x51, 0xe4, 0x91, 0x2e, 0xdf, 0xfd, 0xcf, 0xe0, 0xcb, 0x3b, 0x16, 0x71, + 0x51, 0xe4, 0x91, 0x2e, 0xdf, 0xfd, 0xcf, 0xe0, 0xcb, 0x3a, 0x16, 0x71, 0x62, 0xfa, 0x61, 0x03, 0xac, 0x5e, 0x68, 0xb8, 0xb1, 0x4e, 0x88, 0x62, - 0x45, 0xf1, 0x1d, 0x41, 0x5a, 0x21, 0xa4, 0x1d, 0x12, 0x44, 0xef, 0xa5, - 0x86, 0x21, 0x28, 0xc8, 0x7d, 0x0c, 0x1b, 0xdf, 0x2e, 0x96, 0x2c, 0x12, - 0xc5, 0xb7, 0x58, 0xa1, 0x9e, 0x24, 0x43, 0xc1, 0x89, 0xd4, 0x6e, 0xfb, - 0xe5, 0x9d, 0xe1, 0x64, 0x6c, 0xab, 0xdf, 0x18, 0x23, 0x5b, 0x84, 0xcb, - 0xdd, 0xda, 0x50, 0x64, 0x23, 0x2d, 0x1c, 0xee, 0x6e, 0x52, 0xc0, 0x0d, - 0x94, 0x0d, 0xbc, 0x73, 0x9d, 0x4a, 0xf7, 0x79, 0x67, 0x31, 0x4a, 0xd9, - 0xd4, 0xb9, 0x73, 0xcb, 0x2f, 0xfd, 0x26, 0xcd, 0xa5, 0x8b, 0x02, 0x54, - 0xf7, 0x7f, 0x0c, 0x32, 0x9e, 0xf9, 0xe5, 0x2a, 0x3f, 0xd3, 0xe6, 0x82, - 0x8c, 0x2b, 0xb4, 0x65, 0x41, 0x32, 0xc7, 0x4a, 0x09, 0x0e, 0x70, 0x2f, - 0xba, 0x18, 0x77, 0xfb, 0xf2, 0x5e, 0x2c, 0xd9, 0x62, 0xfa, 0x0f, 0xa8, - 0x2c, 0x5f, 0xcf, 0x9d, 0xdc, 0x14, 0xac, 0x5f, 0x61, 0x4c, 0x16, 0x2d, - 0x18, 0x34, 0x53, 0xfc, 0xcf, 0xc4, 0x61, 0x98, 0x5e, 0x00, 0x70, 0x58, - 0xbf, 0xfe, 0xe3, 0xfd, 0x9f, 0xd9, 0xa0, 0x1d, 0xa0, 0xb1, 0x7f, 0x7b, - 0xad, 0xc5, 0x3f, 0x58, 0xb4, 0x67, 0x48, 0x9f, 0xf0, 0xf8, 0x69, 0xf7, - 0xdd, 0xa4, 0x5b, 0xac, 0x5f, 0xf4, 0x8b, 0xbf, 0xe6, 0xc7, 0x6d, 0x96, - 0x2f, 0xf3, 0x3f, 0x61, 0x6b, 0x52, 0xb1, 0x7f, 0xd2, 0x50, 0xc3, 0xe7, - 0x5e, 0x58, 0xbf, 0x83, 0x28, 0x4f, 0x19, 0x62, 0x8d, 0x3e, 0x70, 0x1c, - 0xdd, 0xc8, 0xc9, 0x4c, 0x98, 0x64, 0xdf, 0x41, 0xf4, 0x27, 0x2c, 0x29, - 0x4e, 0xcb, 0xd1, 0xb0, 0xd4, 0x62, 0xee, 0xc6, 0xd2, 0xc4, 0x47, 0x2a, - 0x62, 0xfd, 0xad, 0xd9, 0xb7, 0x54, 0x96, 0xe5, 0xff, 0x9a, 0x11, 0x99, - 0xad, 0xd9, 0xb7, 0x54, 0x8e, 0x05, 0xa3, 0x31, 0x10, 0xe7, 0x37, 0xa5, - 0x8b, 0x98, 0x6b, 0x16, 0x8d, 0x86, 0x68, 0xfc, 0x19, 0x6f, 0xac, 0x5b, - 0x8b, 0x14, 0x23, 0x49, 0x1c, 0x25, 0x7e, 0xc0, 0xb8, 0xe1, 0x2c, 0x5d, - 0xce, 0x2c, 0x5f, 0xbb, 0x0f, 0x0b, 0x65, 0x8a, 0x81, 0xe1, 0xb8, 0xc5, - 0xdd, 0xe7, 0x16, 0x2f, 0xf9, 0xcd, 0x35, 0xbe, 0xe3, 0x65, 0x8b, 0xed, - 0xd9, 0xb7, 0x54, 0x9a, 0x25, 0xf7, 0xc9, 0xa3, 0xd6, 0x2f, 0xfe, 0x1f, - 0xd8, 0xd8, 0xa2, 0x7e, 0x08, 0xeb, 0x15, 0x27, 0xdd, 0x84, 0xb7, 0xec, - 0xfe, 0xef, 0xc5, 0x8b, 0xfb, 0x6f, 0xe6, 0x85, 0xba, 0xc5, 0xff, 0xff, - 0x10, 0x0b, 0x3d, 0xfc, 0x30, 0x04, 0xde, 0xfb, 0x45, 0xc5, 0x8b, 0xfe, - 0xce, 0xb0, 0xb3, 0xf8, 0x4b, 0x15, 0x28, 0xcf, 0x73, 0x1d, 0x33, 0xdf, - 0xcd, 0xd4, 0xfa, 0x46, 0xb1, 0x5d, 0xf1, 0x53, 0x54, 0x07, 0x74, 0x75, - 0xf8, 0x4f, 0x91, 0x07, 0x21, 0xf1, 0xd8, 0xba, 0xff, 0xff, 0xe1, 0xf3, - 0xec, 0x59, 0xb9, 0x0b, 0x63, 0xcf, 0x5e, 0xc1, 0x96, 0x2c, 0x5e, 0x72, - 0xdd, 0x62, 0xf3, 0x10, 0x16, 0x2a, 0x51, 0x59, 0x8e, 0x7b, 0x8e, 0xde, - 0x92, 0xdd, 0x62, 0xdd, 0x2c, 0x50, 0x0d, 0x87, 0x61, 0xdb, 0xf6, 0x6f, - 0xec, 0xdd, 0x62, 0xf7, 0x69, 0x89, 0x62, 0xff, 0x64, 0x7f, 0x35, 0xa6, - 0xf2, 0xc5, 0xfd, 0x3b, 0x37, 0xd8, 0xeb, 0x17, 0xe9, 0x00, 0x98, 0x35, - 0x8a, 0xc4, 0x6c, 0x39, 0x54, 0x44, 0x1f, 0x37, 0x22, 0xeb, 0xfa, 0x7d, - 0x85, 0xbe, 0x2c, 0x5b, 0x8b, 0x14, 0xe6, 0xff, 0xe5, 0xb7, 0xe6, 0x21, - 0x0f, 0x16, 0x2f, 0xd9, 0xed, 0xdf, 0x8b, 0x15, 0x27, 0xa0, 0x44, 0xf7, - 0x85, 0xee, 0x2c, 0x5f, 0x87, 0xf6, 0x2f, 0x2c, 0x5f, 0x45, 0x86, 0x8d, - 0x62, 0x86, 0x7d, 0x78, 0x3d, 0xe2, 0x8b, 0xff, 0x4c, 0xf5, 0xec, 0xff, - 0xf2, 0x25, 0x8a, 0xd1, 0xf7, 0x70, 0xba, 0xff, 0xa7, 0x6f, 0xe7, 0x3f, - 0x91, 0xeb, 0x17, 0xed, 0xf1, 0xcb, 0x75, 0x8b, 0xfd, 0x9b, 0x94, 0x83, - 0x92, 0xb1, 0x74, 0xee, 0x61, 0xee, 0x70, 0xa6, 0xff, 0xbb, 0x73, 0x3f, - 0x84, 0x18, 0xd6, 0x2a, 0x4f, 0xaf, 0x0b, 0xeb, 0xe9, 0x92, 0x14, 0x60, - 0x97, 0xfb, 0x34, 0x0c, 0x88, 0x3e, 0x2c, 0x58, 0xd5, 0x8b, 0xfe, 0xc9, - 0xdb, 0x22, 0xd3, 0xf1, 0x62, 0x9c, 0xf3, 0x62, 0x13, 0xbf, 0xff, 0x6d, - 0x3e, 0x91, 0xea, 0x7e, 0xdc, 0x2c, 0x02, 0xc5, 0xff, 0xa7, 0xa6, 0x8f, - 0xf9, 0x34, 0x7e, 0xcb, 0x17, 0xfe, 0x9d, 0x03, 0x1f, 0x35, 0xe1, 0x2c, - 0x54, 0xa3, 0x67, 0xea, 0xbc, 0x46, 0xbf, 0xfb, 0xf3, 0xbb, 0xef, 0x80, - 0x3c, 0xe9, 0x62, 0x86, 0xa8, 0x71, 0xca, 0x62, 0x84, 0x1f, 0x21, 0xf7, - 0xe2, 0xfb, 0x88, 0x6b, 0x17, 0xf4, 0xf6, 0x26, 0xf7, 0x16, 0x2f, 0xff, - 0xbd, 0x23, 0xf8, 0x98, 0xdd, 0xf1, 0xcb, 0x75, 0x8b, 0xff, 0x73, 0xf8, - 0x08, 0xb8, 0x4d, 0xf5, 0x8b, 0xe3, 0xb9, 0x41, 0x62, 0x9d, 0x16, 0x91, - 0xea, 0x5c, 0x40, 0xa9, 0x5c, 0xe4, 0xc9, 0x6c, 0x5b, 0xab, 0x7c, 0x5d, - 0xa1, 0xc7, 0x6e, 0xcb, 0x17, 0x4f, 0xd6, 0x2e, 0xe1, 0xd6, 0x29, 0xcf, - 0x0e, 0x21, 0x4f, 0x8b, 0xd2, 0xc5, 0x8d, 0x58, 0xbd, 0xa9, 0x35, 0x62, - 0xfc, 0xfe, 0x29, 0x3a, 0xc5, 0x46, 0xe7, 0xc9, 0x21, 0x91, 0x09, 0xfc, - 0x7a, 0xff, 0x0e, 0x48, 0xb3, 0x36, 0x58, 0xbf, 0x8f, 0xad, 0x38, 0x38, - 0xb1, 0x7f, 0xd2, 0x5e, 0xc8, 0x49, 0x79, 0x62, 0xa4, 0xf9, 0xa0, 0x5f, - 0x7b, 0x7c, 0x09, 0x62, 0xa2, 0x3c, 0x0f, 0x90, 0xd4, 0xa3, 0xef, 0x21, - 0xb1, 0x7f, 0xfc, 0xfe, 0xe3, 0xee, 0xda, 0xdf, 0x1c, 0xb7, 0x58, 0xb0, - 0x4b, 0x17, 0xfb, 0x53, 0xee, 0xa1, 0x9e, 0x58, 0xbf, 0xff, 0xb2, 0x26, - 0x2d, 0x80, 0xfd, 0x73, 0x7c, 0x72, 0xdd, 0x62, 0xec, 0x1a, 0xc5, 0xed, - 0x98, 0xeb, 0x17, 0x03, 0x52, 0x6d, 0x5c, 0x5e, 0xfd, 0xa3, 0xce, 0x71, - 0x62, 0xa4, 0xf4, 0xf0, 0xae, 0xff, 0xee, 0xb9, 0xe2, 0xce, 0xde, 0xf3, - 0x8d, 0x62, 0xfb, 0x9b, 0x0b, 0x8b, 0x15, 0x05, 0x41, 0x8e, 0xa3, 0x10, - 0x99, 0x1a, 0xf2, 0x1c, 0xc2, 0x20, 0x0d, 0x22, 0xd0, 0x58, 0xbc, 0x41, - 0x9a, 0xb1, 0x4e, 0x6c, 0x62, 0x12, 0xbf, 0xb3, 0xb7, 0x85, 0x3b, 0xac, - 0x5f, 0xf8, 0x53, 0xa2, 0xce, 0xc5, 0x9c, 0x58, 0xbf, 0xbe, 0x23, 0x4f, - 0x3c, 0x58, 0xad, 0xcf, 0xbf, 0xe7, 0xf7, 0xd0, 0xf8, 0x7c, 0x58, 0xbe, - 0x9e, 0xd3, 0xa5, 0x8a, 0x30, 0xf2, 0x76, 0x25, 0xb8, 0xd1, 0xac, 0x5f, - 0xff, 0x70, 0xb3, 0xb3, 0x78, 0xb3, 0x9f, 0x68, 0x96, 0x2b, 0x0f, 0xa9, - 0xc6, 0x6e, 0xf9, 0xd6, 0x2f, 0xd3, 0xee, 0x07, 0xf5, 0x8a, 0x95, 0x43, - 0xa3, 0x21, 0xc8, 0x50, 0x3b, 0x64, 0x50, 0x8e, 0x39, 0x01, 0x0c, 0x5f, - 0xff, 0xde, 0xf9, 0x99, 0x09, 0x07, 0x0b, 0x22, 0x84, 0xf4, 0xb1, 0x79, - 0xfa, 0x82, 0xc5, 0x7c, 0xff, 0x09, 0x7a, 0xc7, 0x58, 0xbc, 0x06, 0xfa, - 0xc5, 0xfe, 0xdb, 0x1c, 0x6c, 0xc6, 0xac, 0x50, 0xcf, 0x8f, 0x04, 0x98, - 0x76, 0xfe, 0xd4, 0x8e, 0x4a, 0x25, 0x8b, 0x71, 0x62, 0xb6, 0x3c, 0x0f, - 0x97, 0x57, 0x7a, 0xdb, 0x07, 0x46, 0x8a, 0x1b, 0x12, 0x0d, 0xb7, 0x25, - 0x45, 0xef, 0x19, 0x1f, 0x4b, 0xf1, 0x43, 0xef, 0x50, 0x87, 0x3b, 0x87, - 0xe7, 0x77, 0x5a, 0x13, 0x40, 0x84, 0x99, 0x46, 0x79, 0xc9, 0x46, 0x5e, - 0x95, 0x72, 0x28, 0x74, 0xc7, 0x42, 0x10, 0x36, 0xdb, 0xfe, 0xc8, 0xa0, - 0xda, 0xdb, 0xe2, 0x58, 0xbd, 0xb4, 0xee, 0xb1, 0x68, 0xc1, 0x9e, 0xdb, - 0x9e, 0x54, 0x62, 0x7c, 0x02, 0x8e, 0xda, 0xfc, 0xd1, 0x91, 0xbb, 0x46, - 0xeb, 0x17, 0xb8, 0x7e, 0x2c, 0x5f, 0xee, 0xf6, 0x5f, 0xd0, 0xce, 0x2c, - 0x5f, 0xff, 0x3f, 0x9f, 0x4c, 0x09, 0xfb, 0xef, 0x20, 0x58, 0xbf, 0xfd, - 0x24, 0xd0, 0x68, 0x7d, 0xc9, 0xb8, 0xb1, 0x7f, 0xff, 0xa4, 0xec, 0x4e, - 0x52, 0x5b, 0x1f, 0x0f, 0xdd, 0x83, 0x58, 0xbf, 0xb3, 0x53, 0xda, 0x60, - 0xb1, 0x5f, 0x44, 0x81, 0x30, 0xdd, 0x08, 0x2c, 0x5f, 0xfd, 0x85, 0x38, - 0x6c, 0xc3, 0xd9, 0xb2, 0xc5, 0xfb, 0x82, 0x1e, 0x71, 0x62, 0xfe, 0xfe, - 0x1c, 0x5b, 0xe2, 0xc5, 0xd3, 0xe5, 0x8a, 0x73, 0xc6, 0xe1, 0x7d, 0xff, - 0x9b, 0xe6, 0x4e, 0x7b, 0xee, 0x75, 0x8b, 0xff, 0xfc, 0xfe, 0x9f, 0x96, - 0x7b, 0x53, 0xf2, 0xce, 0xc2, 0xdd, 0x62, 0xff, 0xfa, 0x73, 0xdf, 0x68, - 0x68, 0x43, 0x92, 0x95, 0x8a, 0x82, 0xb2, 0x31, 0xa7, 0xbc, 0x35, 0xe3, - 0xc8, 0xbe, 0x31, 0xc4, 0x4f, 0x37, 0x88, 0x87, 0xb1, 0xff, 0x73, 0x15, - 0xff, 0xf7, 0x3f, 0x26, 0x98, 0xfb, 0x37, 0xdf, 0xae, 0x2c, 0x5e, 0x6d, - 0x71, 0x62, 0x84, 0x7e, 0x21, 0x2a, 0x5f, 0xfd, 0xf6, 0x7d, 0xbc, 0xe4, - 0xe0, 0xe2, 0xc5, 0xfb, 0x1b, 0xc2, 0x95, 0x8a, 0x73, 0xeb, 0x02, 0x25, - 0xff, 0x14, 0xc3, 0x39, 0x8f, 0x2b, 0x16, 0xd9, 0x62, 0xa4, 0xf2, 0x48, - 0xda, 0xff, 0xff, 0xa4, 0x07, 0x68, 0x19, 0xef, 0xe1, 0xf3, 0x79, 0xfc, - 0x9d, 0x62, 0xff, 0xf9, 0xcb, 0xc2, 0xfb, 0xf2, 0x39, 0xbd, 0x83, 0x58, - 0xaf, 0xa2, 0xeb, 0xcd, 0x17, 0xf3, 0xec, 0x63, 0x10, 0x16, 0x2f, 0xff, - 0xfb, 0xec, 0xfc, 0xc3, 0x58, 0x80, 0x66, 0x47, 0xc9, 0x31, 0xab, 0x17, - 0x99, 0xb7, 0x54, 0x9b, 0x45, 0x4a, 0x24, 0xf7, 0x69, 0xbf, 0xe2, 0x73, - 0x75, 0x9b, 0x4f, 0x96, 0x2f, 0xff, 0xcf, 0xb6, 0x42, 0x4d, 0xd0, 0xb8, - 0xe5, 0x0e, 0x2c, 0x5f, 0xd2, 0x5b, 0xe7, 0x5e, 0x58, 0xbf, 0xff, 0xe6, - 0xf7, 0x23, 0x33, 0xda, 0xcf, 0x89, 0xfe, 0xfc, 0x93, 0xac, 0x5f, 0xff, - 0xd2, 0xde, 0x9f, 0xcf, 0x1d, 0xe0, 0xfa, 0xc1, 0xac, 0x5f, 0xdf, 0x93, - 0xcb, 0x8d, 0x62, 0x9d, 0x55, 0xb4, 0x44, 0x7a, 0x86, 0x11, 0xc8, 0xfe, - 0x74, 0x05, 0x72, 0x2f, 0xe3, 0x4f, 0x96, 0x2f, 0xfe, 0x8d, 0x24, 0xd0, - 0x8c, 0xec, 0x61, 0x9f, 0x8e, 0x58, 0xbf, 0x9a, 0x03, 0xfb, 0x9d, 0x62, - 0xff, 0x64, 0x45, 0x27, 0x33, 0x75, 0x8b, 0x38, 0xcf, 0x93, 0xc5, 0xd5, - 0xdf, 0x68, 0xe1, 0xfc, 0x2e, 0xaf, 0xff, 0x7f, 0x20, 0xc5, 0xe6, 0x83, - 0x9b, 0x2b, 0x17, 0xfd, 0x99, 0xbc, 0x70, 0xbe, 0xfa, 0x58, 0xbf, 0xfb, - 0xf9, 0xb7, 0x1f, 0x53, 0xdc, 0xc4, 0xb1, 0x7f, 0xff, 0x85, 0xed, 0x0a, - 0x1a, 0x17, 0x85, 0xe7, 0xf7, 0x3e, 0xeb, 0x17, 0x63, 0xac, 0x56, 0xe8, - 0xc1, 0x24, 0x7e, 0xcc, 0x97, 0xbc, 0x07, 0x58, 0xbf, 0xa6, 0x36, 0xe6, - 0xd8, 0x12, 0xc5, 0x4a, 0x21, 0x30, 0xcb, 0x43, 0xb6, 0xef, 0x16, 0x2e, - 0x2f, 0x2c, 0x5f, 0x78, 0x9b, 0xa5, 0x8b, 0x1b, 0x26, 0xe9, 0xc5, 0xef, - 0xfd, 0xe9, 0x39, 0x31, 0xa5, 0x80, 0x58, 0xa9, 0x3e, 0x4c, 0x26, 0xb0, - 0x16, 0x2a, 0x24, 0x73, 0x94, 0x2d, 0x7c, 0x41, 0x7f, 0xc4, 0x39, 0x93, - 0xf7, 0x34, 0x16, 0x2f, 0xce, 0x5b, 0x30, 0xd6, 0x29, 0xcf, 0x8f, 0x87, - 0x77, 0xfd, 0x20, 0xfc, 0xec, 0x59, 0xc5, 0x8a, 0x93, 0xda, 0x11, 0x0d, - 0xf6, 0x72, 0x49, 0x62, 0xff, 0xf3, 0xea, 0x73, 0xe2, 0x7e, 0x7f, 0x00, - 0xb1, 0x7f, 0xb9, 0xf9, 0x72, 0x1c, 0xac, 0x5f, 0xff, 0x0c, 0x5e, 0xe0, - 0xf2, 0x1f, 0x9e, 0xc3, 0x95, 0x8b, 0x89, 0x96, 0x2b, 0x64, 0xc1, 0x46, - 0x43, 0x89, 0x2e, 0x64, 0x4a, 0x76, 0xef, 0x16, 0x2f, 0xf4, 0x27, 0x5b, - 0x4e, 0xb6, 0x58, 0xbf, 0xcd, 0xe3, 0x34, 0x37, 0xd2, 0xc5, 0x49, 0xf5, - 0x88, 0xda, 0xff, 0xf4, 0xc3, 0xf2, 0x46, 0x96, 0x6c, 0x1c, 0x16, 0x2f, - 0xff, 0xf4, 0xb9, 0x37, 0x85, 0xec, 0x1c, 0x9c, 0x7f, 0x9e, 0x96, 0x2f, - 0xf3, 0x9c, 0x73, 0xc0, 0xf8, 0xb1, 0x7b, 0xd9, 0xba, 0xc5, 0xff, 0xf1, - 0x3f, 0x67, 0xf7, 0xe7, 0xdc, 0x9e, 0xd2, 0xb1, 0x4e, 0x9a, 0x8e, 0x93, - 0x3e, 0xc1, 0xe3, 0x51, 0x0f, 0x5f, 0xe1, 0xe1, 0x41, 0xfe, 0x25, 0x8b, - 0xff, 0x85, 0xcf, 0xb4, 0x27, 0xb8, 0x9f, 0xa5, 0x8b, 0xff, 0xf9, 0xf5, - 0x22, 0x83, 0xb9, 0x67, 0x85, 0x1e, 0xfb, 0x2c, 0x58, 0x6b, 0x17, 0xfd, - 0x31, 0xd9, 0xa0, 0x1d, 0xa0, 0xb1, 0x7f, 0x0b, 0x7f, 0xce, 0xb1, 0x62, - 0xf7, 0x5c, 0xfa, 0xc5, 0x61, 0xe7, 0x31, 0x7d, 0x3a, 0x72, 0x9a, 0x33, - 0xfa, 0x43, 0x2e, 0x90, 0x97, 0x21, 0x15, 0x7f, 0xfe, 0x92, 0xf3, 0x9c, - 0x43, 0x9f, 0xe1, 0x36, 0x96, 0x2f, 0xfc, 0xcf, 0x93, 0xa6, 0x83, 0xfd, - 0x62, 0xb8, 0x88, 0xff, 0x29, 0xdf, 0x98, 0x78, 0x40, 0x58, 0xb8, 0x5d, - 0xcb, 0x17, 0xfe, 0x1c, 0xc0, 0x4f, 0x01, 0x3c, 0x16, 0x2a, 0x08, 0xa4, - 0x72, 0x3d, 0x13, 0xb0, 0xdd, 0xff, 0x4e, 0x8c, 0xe4, 0xfd, 0x9d, 0x62, - 0xfe, 0x76, 0x87, 0x9f, 0x65, 0x8b, 0xed, 0xa7, 0xee, 0xb1, 0x5f, 0x3d, - 0x16, 0x2e, 0xbe, 0x9c, 0x27, 0x58, 0xbe, 0xf4, 0xe0, 0xd6, 0x28, 0x67, - 0x85, 0xd1, 0x05, 0xef, 0x66, 0xcb, 0x15, 0xde, 0x36, 0xd5, 0x1d, 0xe8, - 0xf4, 0xcb, 0x5b, 0xda, 0x30, 0xa8, 0x42, 0x38, 0x6d, 0x59, 0x2e, 0x43, - 0x78, 0xd9, 0x5c, 0xbe, 0x24, 0x9d, 0x47, 0x04, 0x78, 0xc5, 0x7f, 0x0f, - 0x26, 0x8c, 0x98, 0x09, 0x25, 0x08, 0x2e, 0x46, 0xe5, 0xe8, 0xf7, 0x85, - 0x1c, 0x68, 0x47, 0x71, 0xd0, 0x8a, 0x0d, 0x8f, 0xb8, 0x8e, 0xf6, 0x61, - 0xab, 0x17, 0xf4, 0xc3, 0x8d, 0x9b, 0xac, 0x5f, 0xff, 0xed, 0xf3, 0xd2, - 0x5e, 0xe7, 0xd9, 0xfd, 0x2f, 0xda, 0x56, 0x2e, 0x98, 0xcd, 0x22, 0xb3, - 0xe3, 0xa1, 0x97, 0x5f, 0x03, 0xde, 0xe9, 0x62, 0xf1, 0xba, 0x95, 0x8b, - 0xf7, 0x9f, 0xb7, 0xdd, 0x62, 0xdd, 0xec, 0x9e, 0x46, 0x0f, 0x5f, 0xed, - 0x37, 0x80, 0x19, 0x41, 0x62, 0xff, 0xfb, 0xae, 0x67, 0x67, 0xf4, 0xf6, - 0x72, 0xc1, 0xac, 0x54, 0xa2, 0x20, 0x46, 0xb7, 0xf0, 0x98, 0x8b, 0x00, - 0xb1, 0x7f, 0xff, 0x6a, 0x7c, 0xfb, 0xb8, 0xe5, 0xf4, 0xf0, 0x7e, 0x2c, - 0x5e, 0x1c, 0xf4, 0xb1, 0x7e, 0x6d, 0x0c, 0x44, 0xb1, 0x52, 0x78, 0xc6, - 0x8f, 0x5f, 0xfe, 0xe3, 0x7b, 0xef, 0x03, 0xff, 0xa6, 0x8f, 0x58, 0xbf, - 0x39, 0xdb, 0xd2, 0xb1, 0x7f, 0xbc, 0xfb, 0xb8, 0xfa, 0x25, 0x8b, 0xff, - 0xb6, 0xc2, 0xc8, 0x8c, 0xd0, 0xa4, 0x0b, 0x17, 0xf4, 0x9f, 0x05, 0x87, - 0x58, 0xb8, 0xbb, 0x2c, 0x54, 0xa3, 0x0b, 0x0d, 0x5d, 0x1f, 0xb8, 0xb6, - 0xff, 0xff, 0xff, 0xc3, 0x29, 0xdf, 0xad, 0xdf, 0xa3, 0xb1, 0x1b, 0x84, - 0xdd, 0x05, 0xbf, 0xde, 0x22, 0x73, 0xf1, 0x62, 0xfb, 0xc1, 0xe7, 0x72, - 0xc5, 0xff, 0x9f, 0xd3, 0xe7, 0xed, 0x25, 0xba, 0xc5, 0xdd, 0x41, 0x62, - 0xb1, 0x32, 0x07, 0x85, 0x03, 0x13, 0x89, 0x02, 0xf7, 0x42, 0xd9, 0x62, - 0xfa, 0x60, 0x00, 0x96, 0x2b, 0x47, 0x88, 0x44, 0x17, 0xe8, 0xe7, 0xd6, - 0x1a, 0xb1, 0x58, 0x79, 0xa4, 0x43, 0x77, 0xbe, 0xb1, 0x7f, 0xd9, 0xee, - 0x07, 0xcf, 0x67, 0xd6, 0x2b, 0x63, 0xd3, 0x38, 0xc5, 0xe3, 0xce, 0xeb, - 0x17, 0xc5, 0x27, 0xe2, 0xc5, 0x9f, 0x63, 0xc0, 0xf0, 0xf5, 0xff, 0x37, - 0x5c, 0x78, 0xff, 0x88, 0x35, 0x8b, 0xf3, 0x75, 0x00, 0xf8, 0xb1, 0x78, - 0x5d, 0x71, 0x62, 0xff, 0xa2, 0xe7, 0x66, 0x2d, 0x84, 0x35, 0x8b, 0xfd, - 0xce, 0xcc, 0x5e, 0xc0, 0x2c, 0x5e, 0x3c, 0xf9, 0x62, 0x9d, 0x12, 0x11, - 0x1f, 0x1c, 0xd6, 0xe9, 0x35, 0x62, 0xff, 0xc4, 0x3f, 0xcf, 0x39, 0x9a, - 0x95, 0x8a, 0xf9, 0xeb, 0x30, 0xc5, 0xa3, 0x3b, 0xd6, 0x42, 0xa4, 0x6c, - 0xdb, 0xb4, 0x2c, 0xc6, 0x45, 0x85, 0x86, 0xc2, 0x83, 0xa2, 0x28, 0x93, - 0xf5, 0x0e, 0x9f, 0xc6, 0xba, 0x50, 0xd1, 0xe3, 0x9f, 0x98, 0xc4, 0x51, - 0xd8, 0xfe, 0x38, 0xac, 0x38, 0x57, 0xf7, 0x42, 0x1a, 0xa3, 0x19, 0x82, - 0x79, 0x29, 0x1c, 0x14, 0x89, 0x3b, 0xf9, 0xe2, 0xe6, 0xcf, 0xa5, 0x8b, - 0x8f, 0xf5, 0x8b, 0xed, 0xd9, 0xb7, 0x54, 0x9c, 0xa5, 0xf3, 0x1f, 0x09, - 0x62, 0xb4, 0x7a, 0x5e, 0x31, 0xbd, 0xf7, 0xfa, 0xc5, 0xfc, 0xc3, 0xfc, - 0x96, 0xcb, 0x17, 0x1b, 0xf5, 0x8b, 0x98, 0xeb, 0x17, 0xe1, 0x4f, 0x50, - 0xe2, 0xc5, 0xb8, 0xb1, 0x52, 0x7a, 0x78, 0x2e, 0xc5, 0x56, 0x8c, 0x94, - 0xe7, 0xc6, 0x61, 0x8d, 0x5b, 0x91, 0x7c, 0x75, 0x8b, 0x89, 0xb2, 0xd1, - 0xa9, 0x62, 0xe7, 0x3a, 0xc5, 0xcc, 0x35, 0x8b, 0x9c, 0xd5, 0x8b, 0xf6, - 0xb7, 0x66, 0xdd, 0x52, 0x76, 0x97, 0xe9, 0xdd, 0xc9, 0x96, 0x29, 0x62, - 0x8e, 0x6c, 0xf8, 0x4f, 0x7b, 0x6c, 0x09, 0x62, 0xf0, 0x3b, 0x32, 0xc5, - 0xff, 0x3c, 0x20, 0xe4, 0x09, 0x82, 0xc5, 0xc7, 0x8e, 0x58, 0xbf, 0xef, - 0x49, 0x38, 0x23, 0x9b, 0x65, 0x8b, 0xda, 0x60, 0x2c, 0x56, 0x1e, 0xcb, - 0x9e, 0x5b, 0x4b, 0x17, 0x6d, 0x2b, 0x15, 0x86, 0xa9, 0x84, 0xaa, 0x35, - 0x2a, 0x3c, 0x91, 0x88, 0x0b, 0x8c, 0x5f, 0x06, 0x1d, 0xa8, 0xe4, 0x3f, - 0x1f, 0x61, 0xf2, 0x38, 0xe3, 0xa0, 0x92, 0xaf, 0x63, 0x8d, 0x62, 0xfe, - 0xcf, 0xf2, 0x75, 0xba, 0xc5, 0xff, 0xfd, 0xc9, 0xd6, 0xf9, 0xd7, 0xba, - 0xdc, 0x4c, 0x5d, 0x79, 0x62, 0xfe, 0xe0, 0xa2, 0x8a, 0x4e, 0xb1, 0x7b, - 0xa0, 0x46, 0x6c, 0x8d, 0xd2, 0x1c, 0xe1, 0x78, 0x98, 0x6a, 0x31, 0x3d, - 0x86, 0x8e, 0x16, 0xde, 0x58, 0xbc, 0x26, 0x0d, 0x62, 0xa2, 0x36, 0x0c, - 0x25, 0x7f, 0xd2, 0x73, 0x05, 0x13, 0xb7, 0x4b, 0x17, 0xd1, 0x37, 0xa3, - 0x3e, 0x7b, 0xa0, 0x21, 0xa9, 0x8c, 0x22, 0xeb, 0x62, 0xb8, 0x5a, 0x59, - 0xa1, 0xcb, 0x4e, 0xc8, 0x4e, 0x1b, 0x6d, 0x94, 0x5e, 0xf9, 0x4e, 0xe3, - 0xe1, 0x99, 0xfa, 0xe0, 0xf1, 0x8b, 0x4a, 0xd1, 0x78, 0x72, 0x3e, 0x5f, - 0x4e, 0x3f, 0x87, 0x0b, 0x9b, 0xfd, 0x19, 0x9a, 0xdd, 0x9b, 0x75, 0x49, - 0x4e, 0x5f, 0xd9, 0xc6, 0x37, 0xee, 0xb1, 0x7f, 0xb5, 0xe7, 0xf6, 0xc2, - 0xe2, 0xc5, 0xdc, 0xe2, 0xc5, 0xff, 0x8b, 0x35, 0x3e, 0x7d, 0xdc, 0x6b, - 0x17, 0xec, 0x04, 0xe1, 0x2c, 0x5a, 0x32, 0x08, 0xe0, 0xc2, 0xed, 0x1b, - 0x30, 0xc1, 0x1f, 0x5f, 0xff, 0xcf, 0xa1, 0x1b, 0xfc, 0x2d, 0xfe, 0xf1, - 0xcf, 0x21, 0x2c, 0x5f, 0xf6, 0x45, 0x06, 0xd6, 0xdf, 0x12, 0xc5, 0xff, - 0xb0, 0xb7, 0xfb, 0xc7, 0x3c, 0x84, 0xb1, 0x7e, 0x93, 0xb4, 0x9d, 0x62, - 0xf6, 0x84, 0x6f, 0xcf, 0xa5, 0x90, 0xaf, 0xc3, 0xcc, 0x07, 0x16, 0x2f, - 0xfe, 0x8e, 0x62, 0x06, 0x7a, 0x49, 0xc0, 0xb1, 0x68, 0xce, 0xfa, 0xa7, - 0x4c, 0x36, 0x07, 0x85, 0x2f, 0x0d, 0x03, 0x28, 0xa2, 0x54, 0xaf, 0xda, - 0x3f, 0x6b, 0xff, 0x9f, 0xb4, 0xfd, 0xe6, 0x28, 0xa7, 0x75, 0x8b, 0xf7, - 0x7c, 0x8d, 0x3c, 0xe6, 0xac, 0x5d, 0xb6, 0x2c, 0x5f, 0x70, 0xbf, 0xe5, - 0x8b, 0xfd, 0xf9, 0xe4, 0x9c, 0x51, 0x2c, 0x5f, 0xb7, 0x29, 0xfe, 0x2c, - 0x5f, 0xde, 0x30, 0x65, 0x30, 0x58, 0xb6, 0xcb, 0x14, 0xc7, 0x84, 0x22, - 0xfb, 0xff, 0x3f, 0xe7, 0xb7, 0xb3, 0x02, 0xe2, 0xc5, 0xe8, 0x4e, 0xcb, - 0x15, 0xa3, 0xdf, 0x12, 0x0d, 0xff, 0x75, 0x0e, 0x19, 0x9d, 0x9b, 0x4b, - 0x17, 0xfe, 0x14, 0x46, 0x3f, 0xce, 0x2d, 0x4a, 0xc5, 0xb7, 0x58, 0xa8, - 0x27, 0xee, 0x32, 0x37, 0x35, 0x89, 0xab, 0x50, 0x80, 0xf9, 0x17, 0x0f, - 0xbb, 0x90, 0xaf, 0xe1, 0x74, 0x76, 0x62, 0x58, 0xbf, 0xff, 0x61, 0x00, - 0x4c, 0x5b, 0x98, 0xf3, 0xb3, 0x06, 0xb1, 0x6f, 0x2c, 0x5f, 0xdd, 0x19, - 0x39, 0x03, 0xac, 0x5f, 0x75, 0xc9, 0x1a, 0xc5, 0x84, 0xb1, 0x7a, 0x5b, - 0x63, 0x0d, 0xb0, 0x09, 0x29, 0xd1, 0x57, 0xa1, 0x22, 0x66, 0xbe, 0x9f, - 0x7f, 0x16, 0x2f, 0xd3, 0xd4, 0x33, 0xcb, 0x17, 0xc7, 0xc7, 0x3a, 0xc5, - 0xf6, 0xec, 0xdb, 0xaa, 0x4b, 0x92, 0xfe, 0x9f, 0x61, 0x37, 0x96, 0x2e, - 0x3c, 0xac, 0x5f, 0xb5, 0xbb, 0x36, 0xea, 0x93, 0x38, 0xbf, 0xf1, 0xaf, - 0xd7, 0x0b, 0x02, 0x60, 0x2c, 0x5e, 0xe6, 0x0d, 0x62, 0xa5, 0x15, 0x98, - 0x2f, 0xe3, 0x71, 0x20, 0xdf, 0xfe, 0xeb, 0x86, 0x66, 0xf2, 0xe4, 0x52, - 0x75, 0x8b, 0xfe, 0x9d, 0xe4, 0xf2, 0x59, 0xd9, 0x62, 0x89, 0x10, 0xbd, - 0xc9, 0x75, 0x18, 0x8e, 0x57, 0x86, 0x05, 0xee, 0xe6, 0xfa, 0xc5, 0xcd, - 0x05, 0x8b, 0xfa, 0x1e, 0xeb, 0x77, 0xe2, 0xc5, 0x31, 0xe4, 0x08, 0x5e, - 0xfe, 0x7e, 0x61, 0x30, 0x4b, 0x17, 0xf9, 0xb5, 0x9d, 0xa4, 0xbc, 0xb1, - 0x7e, 0x86, 0x1e, 0x77, 0x58, 0xad, 0xcf, 0x77, 0x46, 0x97, 0x85, 0x09, - 0x58, 0xbf, 0xf4, 0xc4, 0xcf, 0xd7, 0x0c, 0xdb, 0x65, 0x8a, 0xd9, 0x70, - 0x72, 0x04, 0x4e, 0x53, 0xa2, 0x23, 0x98, 0xfe, 0x3b, 0xd6, 0x2a, 0x26, - 0x8f, 0x10, 0x8a, 0x11, 0x5d, 0x88, 0xfb, 0x87, 0x6e, 0x11, 0x2c, 0x5f, - 0xf9, 0xe2, 0xfc, 0x90, 0xca, 0x60, 0xb1, 0x4e, 0x7a, 0xbf, 0x17, 0xbd, - 0xbb, 0x79, 0x62, 0xff, 0xc2, 0xd6, 0x0e, 0x7b, 0xbe, 0xfb, 0xac, 0x56, - 0x1f, 0x0f, 0xc7, 0xaf, 0xf9, 0xf5, 0xbf, 0xf0, 0xc7, 0x95, 0x8a, 0x81, - 0xed, 0xf0, 0x86, 0xff, 0xb8, 0x26, 0x0e, 0x23, 0x30, 0x0b, 0x17, 0xff, - 0xbd, 0x3c, 0x30, 0x5c, 0xf4, 0xc5, 0x13, 0xac, 0x5f, 0x40, 0x5f, 0xc5, - 0x8b, 0xff, 0xf3, 0x7f, 0x0f, 0x27, 0x33, 0x30, 0xd3, 0x5a, 0x0b, 0x17, - 0xf3, 0x9f, 0x61, 0x6a, 0x0b, 0x17, 0xd9, 0x13, 0x01, 0x62, 0xef, 0xe2, - 0xc5, 0x1c, 0xdd, 0x7c, 0x8e, 0xfb, 0x6f, 0xb7, 0x96, 0x29, 0x8f, 0x14, - 0x44, 0x37, 0xc7, 0x8d, 0x3b, 0xdf, 0x2c, 0x5f, 0xa6, 0x28, 0xa7, 0x75, - 0x8b, 0xa7, 0xe6, 0x1e, 0xcb, 0x97, 0x54, 0xaa, 0x5b, 0xc3, 0xde, 0x93, - 0xa2, 0x23, 0xfa, 0xb9, 0x42, 0xbf, 0xb3, 0xd5, 0xff, 0x14, 0x9f, 0x82, - 0x83, 0x1a, 0xb1, 0x7f, 0xcc, 0xdd, 0x43, 0x99, 0xd7, 0x96, 0x2e, 0x3f, - 0x65, 0x8b, 0xfe, 0xf6, 0x7c, 0xb3, 0xdf, 0x75, 0x8b, 0xa4, 0x6b, 0x15, - 0x03, 0xcf, 0x23, 0x8b, 0xff, 0xbe, 0xfe, 0x9d, 0x00, 0xa7, 0xdc, 0x58, - 0xac, 0x46, 0x73, 0x34, 0x88, 0x86, 0xef, 0xe2, 0xc5, 0xfb, 0x22, 0x88, - 0x5b, 0x2c, 0x56, 0x1e, 0x1f, 0xc5, 0xef, 0xa0, 0xde, 0x75, 0x8b, 0xed, - 0x00, 0x12, 0xb1, 0x7f, 0xcf, 0xb9, 0x9c, 0x88, 0x98, 0x25, 0x8a, 0x35, - 0x14, 0x7d, 0x10, 0xb9, 0x17, 0xc8, 0xef, 0xd1, 0x49, 0xe4, 0x35, 0x8b, - 0xf1, 0x83, 0xce, 0x09, 0x62, 0xfc, 0x2e, 0xef, 0xcf, 0x4b, 0x17, 0xff, - 0xf9, 0xf8, 0x0c, 0x31, 0xfb, 0x4f, 0xde, 0x62, 0x8a, 0x77, 0x58, 0xbd, - 0xcc, 0x25, 0x8a, 0xd9, 0x15, 0xda, 0x2d, 0x03, 0x2d, 0xd0, 0x3a, 0xc5, - 0xff, 0xa2, 0x31, 0x86, 0xf3, 0x13, 0x79, 0x62, 0xa5, 0x3c, 0xac, 0x3e, - 0x72, 0xa6, 0x86, 0xc1, 0x18, 0x88, 0x62, 0xfb, 0x46, 0x77, 0xe4, 0xb1, - 0x7d, 0x27, 0xc2, 0x58, 0xa9, 0x3c, 0xa3, 0x94, 0xde, 0x13, 0x71, 0x62, - 0xff, 0x06, 0xf1, 0x4f, 0x1c, 0xeb, 0x17, 0xff, 0xbe, 0xe6, 0x7d, 0x9f, - 0xd3, 0x83, 0x75, 0x8b, 0xde, 0xfb, 0xac, 0x5f, 0xf6, 0x8c, 0x93, 0xbc, - 0x7b, 0x44, 0xb1, 0x52, 0x7b, 0x6e, 0x3b, 0x78, 0xc7, 0xd2, 0xc5, 0xf6, - 0xec, 0xdb, 0xaa, 0x44, 0x22, 0xfe, 0x86, 0xb0, 0x6c, 0x75, 0x8b, 0xf1, - 0x43, 0xe1, 0xf1, 0x62, 0xa4, 0xf6, 0x1c, 0xba, 0x8d, 0x47, 0x3c, 0x44, - 0x1a, 0x1e, 0xe4, 0x22, 0x6f, 0xf7, 0xb8, 0x28, 0x4e, 0xd2, 0xb1, 0x7f, - 0xe7, 0x0b, 0x99, 0xaf, 0x79, 0xf4, 0xb1, 0x58, 0x7e, 0xbe, 0x35, 0xb8, - 0x8d, 0x58, 0xbf, 0xff, 0x3e, 0xb7, 0xfe, 0x19, 0xad, 0x60, 0x51, 0xd2, - 0x75, 0x8a, 0x82, 0x25, 0x58, 0x87, 0x83, 0x17, 0xfa, 0x2f, 0xcf, 0x0c, - 0x73, 0x56, 0x2f, 0xef, 0xce, 0xc6, 0x60, 0x16, 0x2f, 0xe6, 0x6e, 0xa1, - 0xc7, 0x58, 0xbf, 0xe6, 0x62, 0x33, 0xae, 0x08, 0xeb, 0x17, 0xf8, 0x13, - 0x1f, 0x3e, 0x91, 0xac, 0x5f, 0xf1, 0xf1, 0xb5, 0xb1, 0x9d, 0x1d, 0x62, - 0xff, 0xbb, 0xa4, 0xf3, 0x18, 0x10, 0x41, 0x2c, 0x5e, 0xe3, 0xc4, 0xb1, - 0x52, 0x8d, 0x4c, 0x36, 0x63, 0xd1, 0x21, 0xde, 0x66, 0x3a, 0xc5, 0xff, - 0x67, 0x24, 0x29, 0x7e, 0xb8, 0xb1, 0x5b, 0x1e, 0xb0, 0xc7, 0x2f, 0xf7, - 0x5c, 0xf1, 0x49, 0xf8, 0xb1, 0x7f, 0xf9, 0x8b, 0x73, 0x06, 0x4d, 0x0f, - 0xb4, 0x16, 0x29, 0xd1, 0x00, 0x23, 0x5b, 0xff, 0xb0, 0x6f, 0xd9, 0x88, - 0x06, 0x70, 0x0b, 0x17, 0xf6, 0x13, 0x83, 0x92, 0xb1, 0x7f, 0xdd, 0x6e, - 0xfa, 0xc8, 0x42, 0x56, 0x2f, 0xff, 0xd1, 0x4c, 0x4f, 0x11, 0x8f, 0xd7, - 0x18, 0x37, 0x3a, 0xc5, 0x4a, 0xf9, 0xfc, 0x0d, 0x72, 0x38, 0xbe, 0xa3, - 0x4e, 0x72, 0xf8, 0x8d, 0xf4, 0x60, 0x72, 0xef, 0xc6, 0x1e, 0xd0, 0x90, - 0x04, 0x28, 0xc8, 0x8b, 0x88, 0xfe, 0x2c, 0x11, 0xdd, 0xc5, 0x8b, 0x14, - 0x63, 0x21, 0x6a, 0x32, 0x7d, 0x71, 0xe1, 0xd1, 0x7e, 0x8b, 0xef, 0xd7, - 0x96, 0x2e, 0x7f, 0xac, 0x5f, 0xf9, 0x83, 0x88, 0x9f, 0xc5, 0x20, 0x58, - 0xad, 0x99, 0x28, 0x10, 0xa4, 0x3d, 0x8d, 0x13, 0xa2, 0xbf, 0x0b, 0xdf, - 0x1f, 0x76, 0x1a, 0xc5, 0xfc, 0x67, 0x8a, 0x4f, 0xc5, 0x8a, 0x93, 0xd3, - 0x81, 0x25, 0xff, 0x9c, 0xf9, 0xc3, 0x3a, 0x86, 0x79, 0x62, 0xfb, 0x83, - 0x1c, 0xac, 0x57, 0xcf, 0x93, 0xc8, 0x37, 0xbe, 0x1f, 0x16, 0x2f, 0xf6, - 0x43, 0x9c, 0xc2, 0x02, 0xc5, 0xfc, 0xcd, 0xb1, 0x9f, 0xc5, 0x8a, 0xf9, - 0xf1, 0x70, 0xce, 0xa0, 0x8a, 0x3f, 0x42, 0x06, 0xff, 0xd1, 0x9e, 0xfe, - 0x43, 0x98, 0x50, 0x58, 0xbf, 0xa7, 0xae, 0x1e, 0x49, 0x62, 0xff, 0xfe, - 0x00, 0x23, 0x41, 0x45, 0xdf, 0x5e, 0xee, 0xc5, 0xdf, 0x53, 0x0c, 0xfc, - 0x72, 0xc5, 0xdd, 0xf2, 0x34, 0x58, 0xb8, 0xd0, 0x2c, 0x5f, 0xff, 0xbe, - 0xf1, 0x7d, 0xfa, 0xf7, 0xf7, 0x7e, 0x60, 0xd6, 0x2f, 0xa5, 0xc5, 0xc5, - 0x8b, 0x46, 0x77, 0xda, 0x2d, 0xe4, 0x8f, 0x71, 0x9f, 0xac, 0xd4, 0xaa, - 0xe0, 0xc8, 0x62, 0xee, 0x50, 0xe8, 0x5f, 0x2e, 0x68, 0xcd, 0xaf, 0x7e, - 0x4e, 0xb1, 0x7f, 0xbb, 0x3f, 0x50, 0x29, 0x0d, 0x62, 0xff, 0x66, 0xbd, - 0x98, 0x17, 0x16, 0x2f, 0xff, 0xd8, 0x09, 0x06, 0xb5, 0x21, 0x19, 0xa6, - 0x68, 0x2c, 0x5b, 0xbd, 0x58, 0xbf, 0x67, 0xf7, 0x93, 0xac, 0x5f, 0xfd, - 0x3b, 0x49, 0x93, 0x14, 0xf0, 0x51, 0x2c, 0x5e, 0x78, 0xec, 0x58, 0xa8, - 0x1f, 0x3f, 0x92, 0x2a, 0x34, 0x4e, 0xa3, 0x07, 0x77, 0x37, 0x23, 0x4e, - 0x2b, 0xf8, 0x5c, 0x50, 0x90, 0xbb, 0x9f, 0x58, 0xbe, 0xe6, 0x6b, 0x65, - 0x8a, 0x81, 0xbc, 0xe0, 0xc5, 0xee, 0x49, 0xab, 0x15, 0xf3, 0x7f, 0xc2, - 0x1b, 0xfd, 0xbb, 0xeb, 0x21, 0x09, 0x58, 0xba, 0x42, 0x58, 0xbe, 0x2f, - 0x14, 0xac, 0x5f, 0xec, 0x19, 0x30, 0x27, 0xb2, 0xc5, 0x31, 0xea, 0x80, - 0x86, 0xff, 0xb3, 0x6e, 0x3e, 0x1e, 0x77, 0x58, 0xac, 0x4c, 0x77, 0xa2, - 0x17, 0x34, 0x66, 0xde, 0x10, 0xdf, 0x88, 0xc1, 0x07, 0xba, 0xc5, 0xff, - 0x37, 0xbe, 0x2d, 0xff, 0x91, 0x2c, 0x54, 0x9f, 0x44, 0x45, 0x97, 0x76, - 0x82, 0xc5, 0x44, 0x6f, 0x0e, 0x45, 0x7e, 0x9d, 0x18, 0x0f, 0x2c, 0x5f, - 0xc0, 0x8d, 0x0c, 0x33, 0xf1, 0xcb, 0x16, 0x0d, 0x62, 0xf0, 0x33, 0xeb, - 0x17, 0xff, 0x48, 0x0e, 0xd0, 0xe7, 0xb3, 0x0e, 0xb1, 0x7f, 0xc5, 0x9b, - 0x7d, 0x8b, 0x0e, 0xb1, 0x43, 0x45, 0x67, 0x42, 0x7f, 0x1d, 0x24, 0x4b, - 0x8f, 0x12, 0xc5, 0xa3, 0x96, 0x2a, 0x23, 0x5d, 0xc1, 0x9b, 0x46, 0x46, - 0xce, 0x98, 0x83, 0xbe, 0xd2, 0x3b, 0xea, 0x6b, 0x32, 0x83, 0xf6, 0x7a, - 0x81, 0x70, 0xe3, 0x02, 0xc9, 0xc4, 0xad, 0xe3, 0x0b, 0xea, 0x1b, 0xaf, - 0x29, 0xf6, 0x26, 0xcd, 0x1d, 0x1e, 0x30, 0x9f, 0xca, 0xde, 0x6a, 0x4f, - 0x10, 0x21, 0x58, 0x52, 0xd9, 0x79, 0x28, 0x27, 0xd2, 0x81, 0x85, 0x0e, - 0xd0, 0x88, 0xa3, 0x8a, 0x83, 0x87, 0x37, 0x73, 0x5d, 0xfe, 0x13, 0x6a, - 0x1f, 0x09, 0x96, 0x2f, 0xdf, 0x1b, 0xfb, 0x16, 0x2f, 0xff, 0xff, 0xe9, - 0xf1, 0x30, 0x09, 0xbb, 0x3f, 0x62, 0x17, 0x03, 0x29, 0x1f, 0xda, 0x19, - 0xc5, 0x8b, 0xdb, 0xf2, 0x0b, 0x17, 0xfe, 0x0c, 0xa4, 0x7f, 0x68, 0x67, - 0x16, 0x2f, 0xf8, 0xa4, 0x7f, 0x68, 0x67, 0x16, 0x2f, 0xf3, 0x76, 0x7e, - 0xc4, 0x2e, 0x18, 0x7e, 0xe1, 0x9f, 0xde, 0xce, 0xa3, 0x06, 0x9e, 0x63, - 0x9a, 0xe8, 0xa1, 0xa1, 0x14, 0x50, 0x96, 0xbf, 0xfa, 0x33, 0xed, 0xc2, - 0xcf, 0x7a, 0x40, 0xb1, 0x7f, 0xfa, 0x30, 0xed, 0x08, 0xcc, 0xd6, 0xec, - 0xdb, 0xaa, 0x47, 0xc2, 0xff, 0xf4, 0x23, 0x33, 0xb3, 0x9b, 0xce, 0x49, - 0xc4, 0xb1, 0x7f, 0xd8, 0x16, 0x76, 0x7f, 0x42, 0x56, 0x2f, 0xf9, 0x88, - 0x7f, 0x93, 0xf7, 0x09, 0x62, 0xf6, 0xa7, 0x8b, 0x14, 0xe7, 0xb2, 0x23, - 0xcb, 0xff, 0x75, 0xe8, 0xa0, 0xda, 0xdb, 0xe2, 0x58, 0xbf, 0x84, 0x5e, - 0x21, 0x6c, 0xb1, 0x7c, 0x7c, 0xcd, 0xd6, 0x2f, 0xe8, 0x4f, 0xb9, 0x9d, - 0x96, 0x2f, 0x76, 0x1c, 0xac, 0x5f, 0xc4, 0x4e, 0x7f, 0x62, 0xc5, 0xe8, - 0x73, 0x16, 0x2f, 0x47, 0x46, 0xc1, 0x2c, 0x56, 0x22, 0x3d, 0x87, 0xc3, - 0x2c, 0xee, 0x1d, 0xbf, 0x1a, 0xde, 0xc0, 0x96, 0x2f, 0xed, 0x83, 0x8e, - 0x62, 0x02, 0xc5, 0xff, 0x3c, 0x1f, 0xe2, 0x39, 0xdd, 0x62, 0xff, 0xb2, - 0x28, 0x36, 0xb6, 0xf8, 0x96, 0x2e, 0x98, 0x96, 0x2f, 0x31, 0x00, 0x8f, - 0x53, 0xc7, 0x95, 0x28, 0xf1, 0xf1, 0x9c, 0x74, 0x23, 0x6d, 0x19, 0xb2, - 0xb9, 0xb1, 0xc2, 0x53, 0x08, 0x4e, 0x88, 0xc5, 0xe0, 0x23, 0x28, 0x5f, - 0x88, 0xfc, 0x38, 0xc6, 0xe9, 0x97, 0x21, 0x3d, 0x2f, 0xb2, 0xb7, 0x76, - 0x65, 0x4f, 0x2d, 0xf2, 0x3e, 0xd3, 0x26, 0x6a, 0x5d, 0x29, 0xd9, 0xfe, - 0x8e, 0xd3, 0x9c, 0x77, 0xff, 0xa3, 0x51, 0xa1, 0x47, 0xec, 0x38, 0xd8, - 0xc3, 0x3f, 0x1c, 0xb1, 0x7f, 0x37, 0xb8, 0x5c, 0xf2, 0xc5, 0xf9, 0x85, - 0xdf, 0x9d, 0x96, 0x28, 0x8f, 0x6f, 0xc5, 0xd7, 0xe2, 0xcd, 0x8f, 0xe5, - 0x8b, 0xff, 0xf8, 0x44, 0xc6, 0x99, 0xe3, 0x64, 0xa1, 0x9f, 0x73, 0xac, - 0x5c, 0xfd, 0x2c, 0x5f, 0xff, 0x43, 0x68, 0xd5, 0x31, 0xa6, 0xdb, 0xe8, - 0xc3, 0x3f, 0x1c, 0xb1, 0x50, 0x3f, 0xe0, 0x0c, 0x5c, 0x1f, 0x16, 0x2f, - 0xfe, 0xdb, 0xf2, 0xfe, 0xe3, 0x97, 0x50, 0x58, 0xb8, 0x5b, 0xac, 0x57, - 0xcf, 0xe0, 0x86, 0x78, 0x8d, 0x7f, 0xf6, 0x79, 0xf0, 0xbf, 0x9e, 0x91, - 0xac, 0x5f, 0xfb, 0xc6, 0xc9, 0x43, 0x3e, 0xe7, 0x58, 0xbf, 0xe3, 0x64, - 0xa1, 0x9f, 0x73, 0xac, 0x5f, 0x08, 0x98, 0xd3, 0x0f, 0xe3, 0xc7, 0xf7, - 0xed, 0x01, 0xff, 0x2b, 0x14, 0x73, 0xe2, 0x11, 0xd5, 0xfb, 0x35, 0x99, - 0x12, 0xc5, 0xa3, 0x20, 0xb8, 0x25, 0x90, 0xbf, 0xdc, 0x84, 0xe5, 0x3f, - 0x86, 0xdb, 0x42, 0x68, 0x8b, 0xb9, 0x18, 0xe0, 0x64, 0x57, 0xed, 0x6e, - 0xcd, 0xba, 0xa4, 0xb2, 0x2f, 0xfc, 0xd0, 0x8c, 0xcd, 0x6e, 0xcd, 0xba, - 0xa4, 0x6e, 0x2d, 0x19, 0x88, 0x87, 0x39, 0xbd, 0x6e, 0x9a, 0x83, 0xc6, - 0x4b, 0x7f, 0xfc, 0xdb, 0xc6, 0x6d, 0x81, 0x72, 0x7d, 0xfc, 0x25, 0x8b, - 0xfe, 0x26, 0x8c, 0xe4, 0x82, 0x65, 0x62, 0xf7, 0x79, 0xd6, 0xeb, 0x17, - 0xff, 0xb8, 0xd0, 0x73, 0x5e, 0x18, 0x0e, 0x62, 0xc5, 0xff, 0x98, 0xbd, - 0x0c, 0xd6, 0x77, 0x91, 0xba, 0xc5, 0xff, 0xfe, 0xcf, 0x73, 0x39, 0x84, - 0xf3, 0xc6, 0xfe, 0x0b, 0x65, 0x8b, 0x3f, 0xd1, 0x4f, 0xe4, 0x8a, 0xd9, - 0x31, 0x98, 0x43, 0xc6, 0xff, 0xc3, 0x72, 0x16, 0xf9, 0xce, 0xf2, 0x37, - 0x58, 0xbf, 0xfd, 0xe7, 0xf8, 0xbe, 0xcf, 0xd7, 0x24, 0xd5, 0x8a, 0x94, - 0x4b, 0x62, 0x55, 0xf6, 0xec, 0xdb, 0xaa, 0x45, 0x62, 0xff, 0xfb, 0x5b, - 0x14, 0xe9, 0x86, 0x4d, 0xa9, 0xec, 0xb1, 0x5a, 0x44, 0x10, 0x8c, 0x6f, - 0xf9, 0x9e, 0x0e, 0x42, 0x93, 0xac, 0x5f, 0x48, 0xdb, 0xeb, 0x16, 0x75, - 0x8a, 0x58, 0xbf, 0xcf, 0x07, 0x21, 0x49, 0xd6, 0x2f, 0xc4, 0xcf, 0xd6, - 0xe7, 0x37, 0xcc, 0x19, 0x44, 0x8a, 0xee, 0xc4, 0x5d, 0xc9, 0xf7, 0xec, - 0xd0, 0x73, 0x1e, 0xb1, 0x7f, 0x39, 0x4c, 0x27, 0xb9, 0x62, 0xf3, 0xcf, - 0x96, 0x2f, 0x11, 0xf6, 0x58, 0xa9, 0x3e, 0x9d, 0x17, 0xb0, 0xe5, 0xf0, - 0x87, 0x86, 0xac, 0x5e, 0x68, 0x46, 0x77, 0xc5, 0xcc, 0x39, 0x8c, 0xf8, - 0x70, 0xc0, 0xc8, 0x51, 0xee, 0x46, 0xf0, 0xe5, 0xf9, 0xa7, 0x21, 0x2b, - 0x1c, 0x5b, 0x5b, 0x2f, 0x04, 0x6e, 0xaa, 0x79, 0xcf, 0xdb, 0xf4, 0x63, - 0x45, 0xcc, 0x58, 0xbf, 0x46, 0x64, 0x24, 0x0b, 0x17, 0xf3, 0x72, 0x30, - 0xb9, 0x2b, 0x15, 0x18, 0x8c, 0x4d, 0x8f, 0x60, 0x59, 0xa2, 0xbb, 0x79, - 0x62, 0xff, 0xfd, 0xa9, 0xec, 0x53, 0x06, 0xdd, 0xc8, 0x6c, 0x4b, 0x17, - 0xcf, 0x85, 0xe5, 0x8a, 0xe8, 0xfd, 0xbe, 0xab, 0x7c, 0xda, 0xda, 0x31, - 0xd1, 0x56, 0xd0, 0x88, 0xbf, 0xf7, 0xb2, 0x33, 0x34, 0xfb, 0x31, 0xd6, - 0x2f, 0xf0, 0x7e, 0x7d, 0x48, 0xbb, 0xf5, 0x8b, 0xfb, 0xbd, 0x63, 0xea, - 0x78, 0xb1, 0x7f, 0xfb, 0xbc, 0x8d, 0xfb, 0xde, 0x63, 0x41, 0xf3, 0x58, - 0xb1, 0x7f, 0xdc, 0x11, 0xc9, 0xfb, 0x09, 0x96, 0x2f, 0xff, 0xd3, 0xa9, - 0x61, 0xe7, 0x84, 0x79, 0xd4, 0x9d, 0x62, 0x9d, 0x11, 0xfc, 0x3b, 0xbf, - 0xe6, 0x3c, 0xfe, 0x60, 0xc6, 0xac, 0x5f, 0xff, 0x7e, 0x60, 0xe0, 0xd6, - 0x7d, 0x89, 0xa0, 0xb1, 0x7f, 0xfc, 0xda, 0x6f, 0xc3, 0x3d, 0xc6, 0xd8, - 0x50, 0x58, 0xbf, 0x9e, 0x0e, 0x3c, 0x3a, 0xc5, 0xff, 0xf7, 0x5f, 0xcd, - 0xff, 0x93, 0xa6, 0x87, 0x31, 0x62, 0xff, 0x7a, 0x4f, 0x23, 0x6f, 0x2c, - 0x54, 0xa2, 0x13, 0x14, 0x6f, 0xfe, 0xc1, 0xb1, 0x48, 0xda, 0x73, 0x4b, - 0x15, 0xba, 0x6c, 0x9f, 0x51, 0x28, 0x58, 0xf0, 0x86, 0xf8, 0x1c, 0x11, - 0xd6, 0x2f, 0xe9, 0x26, 0xdd, 0xa3, 0xd6, 0x2f, 0x85, 0xdc, 0x39, 0x58, - 0xbf, 0xff, 0xcd, 0xd7, 0xf3, 0x93, 0xce, 0x37, 0xe7, 0xaf, 0xb9, 0xd6, - 0x2f, 0xf8, 0xb0, 0x0d, 0xbe, 0xa7, 0x75, 0x8b, 0xfd, 0xbc, 0xe9, 0xfd, - 0x3b, 0xac, 0x5f, 0xe1, 0x42, 0x4e, 0x4d, 0xf5, 0x8a, 0x93, 0xe8, 0xd1, - 0xad, 0x41, 0x5f, 0x78, 0xc8, 0xba, 0x39, 0x78, 0xec, 0xb4, 0x86, 0x72, - 0x4f, 0x98, 0x11, 0x37, 0x18, 0xbd, 0x0a, 0x2b, 0xfe, 0xc0, 0xa7, 0xef, - 0x85, 0xe5, 0x8b, 0x69, 0x62, 0xff, 0xc0, 0xf6, 0x7e, 0x4b, 0xd1, 0xd8, - 0xb1, 0x43, 0x3d, 0x31, 0x09, 0x5f, 0x81, 0x87, 0x9d, 0xd6, 0x2f, 0xf8, - 0x7c, 0x6d, 0xdc, 0x6d, 0x05, 0x8b, 0xf8, 0x4d, 0xd4, 0x73, 0x1a, 0xb1, - 0x52, 0x89, 0x61, 0x94, 0xfc, 0xea, 0xff, 0xfa, 0x4d, 0x92, 0x90, 0x73, - 0x39, 0x24, 0x6a, 0xc5, 0xff, 0xf7, 0xd8, 0x1c, 0xc2, 0x68, 0x38, 0xf0, - 0xeb, 0x17, 0xfc, 0xfe, 0xe4, 0x9f, 0x42, 0xd9, 0x62, 0xe3, 0x92, 0xc5, - 0xfc, 0x59, 0xbf, 0xdf, 0x4b, 0x03, 0x2d, 0xef, 0xb7, 0x66, 0xdd, 0x52, - 0x2e, 0x17, 0xf9, 0x87, 0x3f, 0x73, 0x65, 0x62, 0xfa, 0x18, 0x28, 0x2c, - 0x5f, 0xe3, 0xbf, 0xdb, 0xef, 0xc5, 0x8a, 0x93, 0xd6, 0x62, 0x3b, 0xe7, - 0xd7, 0xd8, 0x91, 0x53, 0xc8, 0x44, 0xdf, 0x9a, 0x1b, 0xbf, 0x72, 0xc5, - 0xed, 0x30, 0xd6, 0x2f, 0xbd, 0xc9, 0x02, 0xc5, 0xff, 0x7f, 0x07, 0x3f, - 0x98, 0x14, 0x9e, 0x03, 0x0e, 0xd4, 0x15, 0x7d, 0x8d, 0x3c, 0xd4, 0xe7, - 0x52, 0xd1, 0xef, 0xe1, 0xb4, 0x47, 0xbc, 0x6c, 0xbf, 0xff, 0xf3, 0x0c, - 0x19, 0x9d, 0x73, 0xae, 0x3e, 0xb7, 0xfe, 0x0f, 0x4c, 0xb1, 0x79, 0x9b, - 0x75, 0x8b, 0xc4, 0xc7, 0x58, 0xb6, 0xcb, 0x17, 0x67, 0x86, 0x79, 0x8c, - 0x3b, 0xdc, 0x39, 0x7b, 0x58, 0x12, 0xc5, 0x40, 0xf6, 0xb8, 0x79, 0x70, - 0x80, 0xb1, 0x7f, 0x9f, 0x4d, 0xdd, 0xdd, 0x24, 0xb1, 0x7d, 0xdc, 0x4d, - 0xb2, 0xc5, 0xfa, 0x4f, 0x25, 0xba, 0xc5, 0x69, 0x13, 0xdf, 0x18, 0x63, - 0x8f, 0x13, 0x5f, 0xff, 0xf4, 0xed, 0x9b, 0x8d, 0xcb, 0xf2, 0xfc, 0xc1, - 0xb7, 0x44, 0xb1, 0x7f, 0xff, 0x49, 0x66, 0xf2, 0x02, 0x9d, 0x0a, 0x1a, - 0x98, 0x2c, 0x54, 0x11, 0x81, 0xf6, 0x6b, 0xff, 0xc7, 0x7f, 0xcb, 0x3f, - 0xdc, 0xec, 0x35, 0x8b, 0xff, 0xff, 0xc3, 0xfe, 0x7f, 0x18, 0xb7, 0x9d, - 0xf5, 0x9b, 0x13, 0x7b, 0x92, 0x05, 0x8b, 0xff, 0xff, 0xfd, 0xf9, 0x07, - 0x39, 0x9a, 0x29, 0xea, 0x1b, 0xfd, 0xe2, 0x2c, 0x7d, 0x4f, 0x69, 0x82, - 0xc5, 0x4a, 0x61, 0x2e, 0xf1, 0x74, 0x1d, 0x62, 0xa5, 0x38, 0xac, 0x8d, - 0x44, 0xd2, 0x2b, 0xff, 0xfd, 0xf7, 0xd8, 0xed, 0x0c, 0x17, 0x7f, 0xc6, - 0xfe, 0xef, 0xc5, 0x8b, 0xff, 0xfe, 0xde, 0x45, 0xbf, 0xdf, 0x58, 0x3e, - 0x49, 0x0b, 0x77, 0x35, 0x62, 0xa5, 0x1a, 0x58, 0xd1, 0x7c, 0x06, 0x8e, - 0x35, 0x62, 0xfe, 0x03, 0x00, 0x45, 0xba, 0xc5, 0xff, 0x6c, 0xc3, 0x98, - 0x16, 0x1d, 0x62, 0xf4, 0x9f, 0x8b, 0x17, 0x9a, 0x1e, 0x73, 0xd6, 0x23, - 0x9b, 0xff, 0x70, 0x46, 0xf3, 0x0e, 0xff, 0x95, 0x8b, 0xda, 0x9f, 0xac, - 0x5f, 0xe9, 0x3c, 0xc6, 0x04, 0x10, 0x4b, 0x14, 0xe8, 0x97, 0xd2, 0x07, - 0x70, 0xed, 0x62, 0x74, 0xdb, 0x93, 0xbc, 0x21, 0x5a, 0x19, 0x17, 0xf6, - 0xe2, 0x8f, 0xfb, 0x41, 0x62, 0xff, 0xff, 0xf6, 0x43, 0xed, 0x09, 0x1c, - 0x93, 0x75, 0xfc, 0xe4, 0xf3, 0x8d, 0xf5, 0x8a, 0x94, 0x54, 0xb9, 0x9d, - 0xff, 0x61, 0xb2, 0xdb, 0xea, 0x77, 0x58, 0xa8, 0x1e, 0xe6, 0xe4, 0x37, - 0xf9, 0xc6, 0xdd, 0xdd, 0xa6, 0x0b, 0x17, 0xd1, 0xcf, 0xf6, 0x58, 0xa9, - 0x3d, 0xd8, 0x1c, 0x5f, 0xe6, 0x2d, 0x49, 0x34, 0x16, 0x2d, 0x2b, 0x15, - 0xc3, 0xc2, 0x8e, 0x31, 0xbf, 0xf8, 0xa0, 0xc3, 0x69, 0x84, 0x93, 0x2c, - 0x54, 0x9f, 0x36, 0x12, 0xdc, 0xda, 0x58, 0xbf, 0xff, 0x8b, 0x3b, 0x3f, - 0xe4, 0xf9, 0xbc, 0xf3, 0xf8, 0x75, 0x8b, 0x8a, 0x77, 0x3f, 0x3e, 0x0b, - 0xdf, 0xff, 0xd8, 0x2d, 0xff, 0x25, 0x30, 0x61, 0xcf, 0x5a, 0x75, 0x8b, - 0xff, 0x71, 0xc8, 0x5e, 0x8e, 0x7e, 0xc7, 0x58, 0xbf, 0xff, 0xf9, 0xcb, - 0x0f, 0x3a, 0xc7, 0xfc, 0x83, 0x85, 0x91, 0x41, 0xa0, 0xb1, 0x7f, 0xed, - 0x4f, 0x9d, 0xa1, 0x25, 0xb2, 0xc5, 0xa6, 0x08, 0xad, 0x76, 0xfb, 0xff, - 0xb3, 0xd9, 0xf2, 0x68, 0x09, 0xb8, 0xb1, 0x7f, 0xff, 0xfb, 0x3d, 0xcc, - 0x1b, 0x0e, 0x49, 0xba, 0xfe, 0x72, 0x79, 0xc6, 0xfa, 0xc5, 0x3a, 0x2e, - 0x49, 0x0e, 0xff, 0xfa, 0x02, 0x98, 0x30, 0xc9, 0xbd, 0xc9, 0x02, 0xc5, - 0xfd, 0x33, 0xc9, 0xeb, 0x4b, 0x15, 0x27, 0xfa, 0x04, 0xfb, 0xff, 0xc5, - 0x3b, 0x61, 0x7b, 0xed, 0x0f, 0xe2, 0xc5, 0xff, 0xfe, 0xcd, 0x8e, 0x2e, - 0x9b, 0xdf, 0x9e, 0x60, 0xda, 0x60, 0xb1, 0x7f, 0xf0, 0xd8, 0x80, 0x4d, - 0xd6, 0xb0, 0xeb, 0x15, 0x28, 0xef, 0x24, 0x91, 0x31, 0x5e, 0x72, 0x95, - 0x8b, 0xfe, 0x11, 0xac, 0x6e, 0x6d, 0x9b, 0x2c, 0x54, 0xaf, 0x34, 0xc2, - 0x10, 0x03, 0x86, 0x4b, 0xc2, 0x4e, 0x3c, 0xb4, 0xeb, 0x7f, 0x87, 0x89, - 0x43, 0x83, 0x90, 0x9e, 0xf4, 0x62, 0x1d, 0x8b, 0xa3, 0x86, 0xef, 0xff, - 0x16, 0x3c, 0x19, 0xf7, 0xcd, 0x34, 0x16, 0x2f, 0xfb, 0x0e, 0xe4, 0x07, - 0xf8, 0x96, 0x2f, 0xd0, 0xe7, 0xdc, 0x0b, 0x17, 0xf4, 0x8f, 0x09, 0xe5, - 0x62, 0xff, 0x3f, 0x5c, 0x88, 0x98, 0x35, 0x8b, 0xff, 0xfc, 0xfd, 0x04, - 0x3f, 0xce, 0xba, 0xdd, 0xfa, 0xf7, 0x30, 0x25, 0x8a, 0xd2, 0x32, 0x48, - 0xaf, 0xc6, 0xd7, 0xfe, 0xce, 0x70, 0x45, 0x14, 0x26, 0x3d, 0x62, 0xff, - 0xbd, 0xbf, 0xdf, 0x43, 0xcd, 0x96, 0x2f, 0x3c, 0xc1, 0x62, 0x98, 0xf6, - 0x08, 0xf2, 0xe6, 0x35, 0x62, 0xf8, 0x8b, 0x3d, 0x89, 0x81, 0x68, 0xbf, - 0xf0, 0x9b, 0x8e, 0x20, 0xbf, 0xb3, 0x3a, 0x1e, 0x12, 0xc5, 0xfe, 0x92, - 0x93, 0xbe, 0x04, 0xb1, 0x7e, 0xfb, 0xe9, 0xb8, 0xb1, 0x7f, 0x0e, 0x5f, - 0xf2, 0x75, 0x8b, 0xf0, 0xe6, 0x3d, 0xb4, 0xb1, 0x7a, 0x48, 0x18, 0x7b, - 0x0c, 0x5b, 0x5d, 0x2b, 0x5d, 0x78, 0xfd, 0x34, 0xb5, 0xf2, 0xdf, 0x19, - 0x77, 0x42, 0x02, 0xb6, 0x57, 0xf9, 0x92, 0xe5, 0x6f, 0xf4, 0x96, 0xec, - 0xfb, 0x62, 0xc5, 0xdb, 0xca, 0xc5, 0x1a, 0x79, 0x64, 0x67, 0x7f, 0x76, - 0x92, 0xdd, 0xb8, 0xb1, 0x7f, 0xf1, 0x4c, 0x30, 0x79, 0x0c, 0x20, 0x2c, - 0x5f, 0x98, 0x1c, 0xc2, 0x58, 0xa9, 0x44, 0xcb, 0x98, 0x71, 0x0a, 0xff, - 0xff, 0x3f, 0xa4, 0x98, 0xf8, 0x76, 0x87, 0x27, 0xd2, 0x35, 0x8a, 0x74, - 0xd1, 0xfd, 0x0b, 0xbe, 0xc5, 0xd7, 0xff, 0xbf, 0x3a, 0x27, 0x2c, 0xf7, - 0xb3, 0x8b, 0x17, 0xc0, 0x03, 0xf4, 0xb1, 0x7f, 0x85, 0xbb, 0x0f, 0x42, - 0xd9, 0x62, 0xfe, 0x35, 0xfd, 0xc9, 0x3a, 0xc5, 0xff, 0xf6, 0x3f, 0xe4, - 0x1c, 0x2c, 0x8a, 0x0d, 0x05, 0x8b, 0xed, 0xf5, 0x3b, 0xac, 0x5e, 0xdf, - 0xef, 0x88, 0xda, 0x34, 0xdf, 0x45, 0xec, 0x9f, 0x7e, 0x11, 0xa5, 0x80, - 0x58, 0xbf, 0xff, 0x9f, 0xa8, 0x4f, 0xb8, 0xe5, 0x0c, 0x1b, 0x4c, 0x16, - 0x2f, 0xf9, 0xb4, 0x69, 0x67, 0xbe, 0xeb, 0x17, 0xfe, 0xd4, 0x9f, 0xed, - 0xd4, 0x1f, 0x65, 0x8b, 0xff, 0xff, 0x84, 0x5b, 0x4b, 0x7e, 0x4f, 0x85, - 0x27, 0x26, 0xf7, 0x24, 0x0b, 0x14, 0x35, 0x60, 0x0e, 0x91, 0xa8, 0x7f, - 0x1d, 0x3b, 0xe5, 0x24, 0xb5, 0xe3, 0x9e, 0xe4, 0x1b, 0xfd, 0xf7, 0xeb, - 0xdb, 0x60, 0x4b, 0x17, 0xfe, 0xcf, 0x37, 0x59, 0x0f, 0xce, 0x96, 0x2f, - 0xf3, 0x9a, 0xff, 0xdd, 0xf8, 0xb1, 0x7f, 0x33, 0xc1, 0xcd, 0x95, 0x8b, - 0x4c, 0x0f, 0x8b, 0xe6, 0xb7, 0xff, 0xff, 0xf1, 0x01, 0x88, 0x1c, 0xc3, - 0xb7, 0xf0, 0x6c, 0xe5, 0x3f, 0x67, 0x83, 0x8d, 0x62, 0xff, 0xff, 0xcd, - 0xb1, 0xdf, 0x98, 0x36, 0x72, 0x9f, 0xb3, 0xc1, 0xc6, 0xb1, 0x7f, 0x3f, - 0xdb, 0xef, 0xc5, 0x8b, 0xdd, 0x42, 0x56, 0x2e, 0x80, 0x16, 0x2f, 0xe2, - 0x14, 0x3e, 0xd0, 0xc3, 0x6c, 0xe3, 0xd7, 0xff, 0x0a, 0x04, 0xf0, 0x9f, - 0x10, 0xa0, 0xb1, 0x7e, 0x9e, 0x00, 0xfe, 0x58, 0xa7, 0x3e, 0xdf, 0xa2, - 0x50, 0xd5, 0x22, 0xb9, 0x3e, 0xa1, 0x06, 0x76, 0x9e, 0x31, 0xfa, 0x15, - 0xd6, 0xdd, 0x62, 0xee, 0x74, 0xb1, 0x7f, 0x68, 0x03, 0xc0, 0x71, 0x62, - 0xa5, 0x7e, 0x2b, 0x25, 0x9b, 0xee, 0xf2, 0xe6, 0xed, 0x2b, 0x98, 0x0c, - 0x5e, 0x13, 0x10, 0xcd, 0xfb, 0xf8, 0x59, 0xba, 0xc5, 0xc5, 0xe5, 0x8a, - 0x81, 0xbf, 0x62, 0x8b, 0xd0, 0xff, 0x96, 0x29, 0xcd, 0xf7, 0xc8, 0x2f, - 0xba, 0xfc, 0xee, 0xb1, 0x6f, 0xc9, 0xe2, 0xb1, 0x05, 0xff, 0xc4, 0xe0, - 0xe6, 0xa5, 0xe0, 0xdc, 0x58, 0xbf, 0xfc, 0x13, 0x6a, 0x5c, 0xf8, 0x39, - 0x84, 0xac, 0x5f, 0x01, 0x9b, 0x4b, 0x16, 0x68, 0x1f, 0x5f, 0x49, 0x35, - 0x88, 0xfc, 0x72, 0x6e, 0x42, 0xba, 0xf8, 0xe4, 0xc3, 0x58, 0xbc, 0xfb, - 0x77, 0xeb, 0x17, 0xe7, 0x39, 0x34, 0x16, 0x2f, 0x3f, 0x5c, 0x58, 0xb9, - 0xbc, 0xb1, 0x73, 0xce, 0xc6, 0xd7, 0x83, 0xd7, 0xff, 0x7b, 0xf9, 0xdb, - 0xee, 0x7c, 0x17, 0x7e, 0xb1, 0x4e, 0x98, 0xcc, 0x79, 0x16, 0x88, 0xfe, - 0xb8, 0xc5, 0x97, 0xee, 0x7b, 0xf2, 0x12, 0xc5, 0xfc, 0x6e, 0xb3, 0xcd, - 0xd2, 0xc5, 0x9b, 0xa3, 0xda, 0xd1, 0x55, 0xff, 0xc2, 0x68, 0xf7, 0xdb, - 0x3e, 0xfd, 0x71, 0x62, 0xff, 0x4c, 0x4d, 0xef, 0xb0, 0x16, 0x2f, 0xfd, - 0xd4, 0x33, 0xd9, 0xad, 0xe7, 0x16, 0x2d, 0x19, 0xde, 0x3a, 0xd3, 0x08, - 0xd0, 0xeb, 0xbe, 0x19, 0xcc, 0xe6, 0xb6, 0xd0, 0x97, 0x84, 0x22, 0xc7, - 0x0b, 0x8c, 0x96, 0x55, 0xbb, 0xbf, 0x51, 0x8a, 0xbc, 0x30, 0x22, 0x87, - 0xe6, 0xa3, 0xad, 0x3c, 0x61, 0x1f, 0x8f, 0x1d, 0xa7, 0xed, 0x01, 0x0d, - 0x12, 0x9c, 0x44, 0xe5, 0x25, 0x23, 0xd2, 0x8f, 0x45, 0x1a, 0x60, 0x50, - 0xa6, 0x8e, 0x28, 0x0d, 0x27, 0xb8, 0xd2, 0xff, 0xfa, 0x33, 0x4e, 0x79, - 0x8f, 0x8c, 0x67, 0xd0, 0xa3, 0xd6, 0x2c, 0xd0, 0x54, 0x81, 0xf8, 0xf9, - 0x2f, 0xfc, 0x23, 0xc6, 0x72, 0x4b, 0xd9, 0xa5, 0x8b, 0xbb, 0x3a, 0xc5, - 0xff, 0xd3, 0xc7, 0xed, 0xc9, 0x83, 0xf9, 0x96, 0x2f, 0xfd, 0x3e, 0x9e, - 0xd2, 0x5b, 0xb7, 0x16, 0x2f, 0x67, 0xe3, 0x1d, 0x13, 0xcc, 0x33, 0xc4, - 0x5b, 0xfe, 0x1e, 0x46, 0x4e, 0x9f, 0xe2, 0x58, 0xbf, 0xf4, 0xc6, 0x77, - 0x67, 0x50, 0xfc, 0xf1, 0x62, 0xff, 0xfe, 0xe4, 0x61, 0xf3, 0x79, 0x7e, - 0xcc, 0x42, 0xdf, 0x38, 0xb1, 0x43, 0x45, 0x39, 0x23, 0x5a, 0x33, 0x77, - 0x64, 0x94, 0xe8, 0x27, 0xb5, 0xf6, 0x5c, 0x30, 0xf4, 0x38, 0x04, 0x85, - 0xda, 0x1c, 0x77, 0xa4, 0x8d, 0x58, 0xbf, 0xe8, 0x46, 0x66, 0xb7, 0x66, - 0xdd, 0x52, 0x1d, 0x96, 0x8c, 0xf9, 0xf4, 0x30, 0xed, 0xff, 0xf0, 0xa7, - 0xa8, 0x39, 0xc2, 0xc2, 0x1f, 0xe5, 0x62, 0xff, 0xff, 0xe3, 0xce, 0xfb, - 0xfd, 0xe2, 0xfb, 0x90, 0xdb, 0x52, 0x69, 0xa2, 0xd9, 0x62, 0xe1, 0x06, - 0xb1, 0x7c, 0x4c, 0xdd, 0x2c, 0x5f, 0x75, 0xe7, 0x09, 0x62, 0xa4, 0xf1, - 0xce, 0x45, 0x76, 0xd1, 0x83, 0x4d, 0x2b, 0x14, 0x4e, 0xf0, 0x1b, 0x05, - 0xff, 0xfe, 0x60, 0x46, 0x07, 0x3b, 0x67, 0xa4, 0x9c, 0x19, 0xd7, 0x96, - 0x2f, 0xdc, 0x7e, 0xdf, 0xec, 0xb1, 0x71, 0x71, 0x62, 0xfb, 0xf9, 0x08, - 0xc9, 0x3c, 0x46, 0x2d, 0xac, 0x4c, 0xc6, 0x24, 0xef, 0x42, 0xa6, 0xc6, - 0xac, 0x5c, 0x60, 0xd6, 0x2a, 0x37, 0x35, 0x9d, 0xe8, 0x9d, 0xff, 0x77, - 0xb1, 0xd8, 0x6b, 0xf8, 0xa5, 0x62, 0xfe, 0x8d, 0x8a, 0x77, 0xc2, 0x58, - 0xb0, 0x96, 0x2f, 0xf6, 0x42, 0x4d, 0x6e, 0x3a, 0xc5, 0xbe, 0xb1, 0x51, - 0xb9, 0xeb, 0xc6, 0x82, 0x42, 0x33, 0xbf, 0xbb, 0xd2, 0xcf, 0xb7, 0x96, - 0x2f, 0xfd, 0xdf, 0x3b, 0xe7, 0xf3, 0x6c, 0xc2, 0x35, 0x62, 0xc1, 0x2c, - 0x5f, 0x6f, 0xf1, 0x47, 0xac, 0x5f, 0x61, 0xf0, 0x96, 0x2e, 0xcf, 0xac, - 0x50, 0xcd, 0xc7, 0x88, 0x69, 0x62, 0x9c, 0xd6, 0x91, 0x0d, 0xfe, 0xe6, - 0x16, 0x69, 0xbc, 0xb1, 0x79, 0xc8, 0x0b, 0x15, 0xc3, 0xce, 0xec, 0x65, - 0x77, 0xf1, 0x62, 0xfd, 0x84, 0xe0, 0x0d, 0x62, 0xa4, 0xdf, 0xf0, 0x5e, - 0xf6, 0x6a, 0x56, 0x2f, 0xfa, 0x4a, 0x38, 0x53, 0x06, 0xd2, 0xc5, 0xfe, - 0xfc, 0xed, 0xa9, 0xc1, 0xac, 0x5d, 0x9b, 0x2c, 0x5e, 0xee, 0x1c, 0xac, - 0x54, 0x9f, 0x61, 0x1a, 0x08, 0x62, 0xff, 0xda, 0x33, 0x3d, 0x9f, 0x9d, - 0x01, 0x62, 0xff, 0xff, 0xcc, 0xfb, 0xe1, 0x19, 0x0c, 0xe7, 0xb3, 0xf2, - 0x5e, 0xfb, 0xac, 0x59, 0xd6, 0x29, 0xd1, 0x79, 0xf4, 0x06, 0x6b, 0xbe, - 0x98, 0x4e, 0x96, 0x2f, 0xff, 0xd0, 0x71, 0xfd, 0xfb, 0x19, 0x83, 0xd3, - 0x8b, 0x75, 0x8b, 0xe9, 0xd4, 0xe9, 0x62, 0xa3, 0x65, 0xc0, 0x89, 0x13, - 0x84, 0x23, 0x71, 0xb5, 0xd8, 0xf4, 0x40, 0x71, 0xcf, 0xc2, 0x9c, 0xa1, - 0xd3, 0xc2, 0xef, 0x11, 0x06, 0xb5, 0x7a, 0x29, 0xd9, 0x62, 0xfa, 0x4b, - 0xdc, 0x58, 0xbb, 0x02, 0x93, 0xc1, 0xe0, 0xfd, 0xc5, 0xc5, 0x8b, 0xff, - 0x73, 0xd9, 0xf9, 0x2f, 0x7d, 0xd6, 0x2f, 0xf7, 0xb9, 0x31, 0x33, 0x69, - 0x62, 0xff, 0xa7, 0x3c, 0xed, 0xb4, 0xe9, 0x62, 0xc7, 0x58, 0xb1, 0xd6, - 0x2b, 0xbd, 0x34, 0x81, 0x89, 0x5f, 0xff, 0x87, 0x9a, 0x33, 0x0e, 0x29, - 0xd6, 0x9c, 0x5b, 0xac, 0x54, 0x13, 0x64, 0xc1, 0x77, 0x3e, 0x01, 0xa7, - 0x97, 0x04, 0x4f, 0x77, 0x79, 0xc5, 0x8b, 0xf8, 0x05, 0x9d, 0x7b, 0x16, - 0x2e, 0xda, 0x3d, 0x62, 0xfd, 0x9c, 0x6d, 0x1a, 0xb1, 0x7f, 0xf7, 0x69, - 0x1f, 0xb2, 0x5f, 0xd3, 0x12, 0xc5, 0xf1, 0xbf, 0xc0, 0x2c, 0x5f, 0xcc, - 0x16, 0x7a, 0x77, 0x58, 0xa6, 0x3d, 0x32, 0x24, 0xbf, 0xff, 0xf9, 0x8d, - 0x9d, 0x00, 0x53, 0x99, 0xfd, 0xde, 0x4a, 0x73, 0xe2, 0x58, 0xbf, 0x88, - 0x0d, 0xa6, 0x0d, 0x62, 0xff, 0xfa, 0x7d, 0x3e, 0x33, 0xdf, 0xc2, 0x6d, - 0x1a, 0xb1, 0x51, 0xa2, 0xa3, 0x89, 0x1d, 0xd8, 0xbb, 0x07, 0x1c, 0xa7, - 0x50, 0x99, 0xf9, 0x03, 0x38, 0x11, 0x75, 0xff, 0x81, 0xcc, 0xf6, 0x44, - 0x52, 0x75, 0x8b, 0xff, 0xc6, 0x16, 0x3e, 0x9f, 0x66, 0x39, 0xdd, 0x62, - 0xff, 0xfc, 0x59, 0xcf, 0xb3, 0xfa, 0x7d, 0xcd, 0xb0, 0x25, 0x8a, 0xfa, - 0x28, 0x3b, 0x25, 0x5f, 0xff, 0xfd, 0xf6, 0x19, 0x31, 0x9c, 0xfc, 0xf0, - 0xc1, 0x31, 0x90, 0xce, 0xd2, 0xb1, 0x7f, 0xc6, 0x99, 0x8e, 0x6e, 0xb3, - 0x8b, 0x15, 0xf4, 0x59, 0x13, 0xb5, 0xff, 0xe2, 0xc3, 0x7e, 0xd0, 0xf8, - 0x4c, 0x19, 0xd6, 0x2a, 0x4f, 0xbf, 0x08, 0xaa, 0x55, 0x22, 0xbc, 0x37, - 0xff, 0x1a, 0x35, 0xff, 0xbf, 0x9b, 0xe6, 0xbc, 0xcc, 0x6a, 0xc5, 0xff, - 0x9f, 0x46, 0x70, 0xb0, 0xf3, 0xba, 0xc5, 0xfe, 0x17, 0x9d, 0xbb, 0x34, - 0x16, 0x2f, 0xf1, 0x48, 0x0c, 0xfb, 0x1d, 0x62, 0xfe, 0x6e, 0xc3, 0xc2, - 0x35, 0x62, 0xd2, 0x48, 0x99, 0xf1, 0xa8, 0x66, 0x97, 0xff, 0xff, 0xfd, - 0xf9, 0xd6, 0xd8, 0x37, 0xf7, 0x27, 0x69, 0xd6, 0x0f, 0x1e, 0x4b, 0x3b, - 0x3e, 0x99, 0x62, 0xff, 0xff, 0xd2, 0x5b, 0xb7, 0x9b, 0xa0, 0x19, 0x84, - 0xf2, 0x2f, 0xfe, 0x56, 0x2a, 0x08, 0xff, 0x04, 0x24, 0xef, 0xd8, 0x3f, - 0xb1, 0xd6, 0x2f, 0xff, 0xc0, 0x6e, 0x36, 0x75, 0xec, 0x84, 0x83, 0x98, - 0xb1, 0x7f, 0xc2, 0x81, 0x98, 0xe5, 0x27, 0x58, 0xbf, 0xfe, 0x2c, 0xd9, - 0xf7, 0x33, 0x92, 0x76, 0xeb, 0xcb, 0x14, 0x34, 0xc2, 0x7a, 0x28, 0x25, - 0x5f, 0x1c, 0xdf, 0xdc, 0x83, 0xee, 0xda, 0x58, 0xbc, 0xcd, 0xba, 0xa4, - 0xa1, 0x2f, 0xe3, 0x79, 0xf9, 0x2f, 0x2c, 0x5f, 0xfe, 0xf7, 0xf0, 0x6f, - 0xcc, 0x20, 0x49, 0xd6, 0x2f, 0xff, 0x3f, 0x6c, 0x72, 0xcd, 0x4e, 0xf3, - 0xa5, 0x8b, 0x1d, 0x62, 0xde, 0x23, 0xdc, 0x12, 0x55, 0xb1, 0xd1, 0x98, - 0x28, 0x52, 0xdf, 0xe6, 0x04, 0xc5, 0xf1, 0x01, 0x62, 0xa5, 0x3b, 0x5d, - 0xcb, 0xdc, 0xab, 0x50, 0xfb, 0x11, 0x65, 0xfa, 0x28, 0x0b, 0xa8, 0x2c, + 0x45, 0xf1, 0x1d, 0xcd, 0x05, 0x8a, 0x82, 0xe0, 0xa6, 0x27, 0x1a, 0x45, + 0xd9, 0x24, 0x4e, 0xfa, 0x85, 0x5f, 0xc8, 0x58, 0x58, 0xa3, 0x21, 0xf4, + 0x30, 0x7a, 0x8b, 0xaf, 0x7c, 0xbb, 0x58, 0xb9, 0x89, 0x62, 0x96, 0x2a, + 0x06, 0x88, 0x21, 0x6b, 0xb0, 0x25, 0x8b, 0x6e, 0xb1, 0x43, 0x44, 0x6c, + 0x48, 0x1f, 0x22, 0x0c, 0x62, 0xa3, 0x77, 0xec, 0xef, 0xeb, 0x0b, 0x23, + 0x65, 0x5e, 0xb8, 0xc1, 0x1a, 0x92, 0xa3, 0x5b, 0x4c, 0xce, 0x2d, 0xed, + 0x28, 0x7e, 0x11, 0x96, 0x8e, 0x77, 0xc3, 0x29, 0xab, 0x66, 0xca, 0x26, + 0xde, 0x39, 0xce, 0xe5, 0x95, 0xbc, 0xba, 0x08, 0xa5, 0xc4, 0x6a, 0x72, + 0x44, 0xf2, 0xd2, 0x7f, 0x4b, 0x9c, 0x69, 0x74, 0x80, 0x95, 0x5f, 0xd7, + 0xc3, 0x0c, 0xa7, 0xfe, 0xb9, 0x4b, 0xb2, 0xf5, 0x23, 0xb0, 0x51, 0x91, + 0x74, 0x8c, 0xa8, 0x26, 0x58, 0xe9, 0x45, 0x21, 0xce, 0x6e, 0x75, 0x46, + 0x77, 0x7f, 0xbf, 0x25, 0xe2, 0xcd, 0x96, 0x2f, 0xa0, 0xfa, 0x82, 0xc5, + 0xfc, 0xf9, 0xd5, 0xc1, 0x4a, 0xc5, 0xf6, 0x14, 0xc1, 0x62, 0xd1, 0x83, + 0x45, 0x3f, 0xcc, 0xfc, 0x46, 0x19, 0x85, 0xe0, 0x07, 0x05, 0x8b, 0xff, + 0xee, 0x3f, 0xd9, 0xfd, 0x9a, 0x01, 0xda, 0x0b, 0x17, 0xf7, 0xbb, 0xdc, + 0x53, 0xf5, 0x8b, 0x46, 0x76, 0x89, 0xff, 0x0f, 0x86, 0x9f, 0x7d, 0xd2, + 0x45, 0xba, 0xc5, 0xff, 0x48, 0xba, 0xfe, 0x6c, 0x76, 0xd9, 0x62, 0xff, + 0x33, 0xf4, 0x16, 0xb5, 0x2b, 0x17, 0xfd, 0x25, 0x0c, 0x3e, 0x77, 0xe5, + 0x8b, 0xf8, 0x32, 0x84, 0xf1, 0x96, 0x28, 0xd3, 0xe7, 0x01, 0xcd, 0xfd, + 0xa6, 0x9d, 0x3f, 0x6b, 0x17, 0x72, 0x32, 0x53, 0x54, 0x19, 0x37, 0xd0, + 0x7d, 0x09, 0xc1, 0x11, 0xd8, 0x52, 0x9f, 0x6f, 0xa3, 0x8f, 0xa8, 0xc5, + 0xe2, 0xad, 0xa5, 0x94, 0x0e, 0x56, 0x9d, 0xfb, 0x5b, 0xb3, 0x6e, 0xa9, + 0x2d, 0xcb, 0xff, 0x34, 0x23, 0x33, 0x5b, 0xb3, 0x6e, 0xa9, 0x1c, 0x0b, + 0x46, 0x62, 0x21, 0xce, 0x6f, 0x4b, 0x17, 0x30, 0xd6, 0x2d, 0x1b, 0x0c, + 0xd1, 0xf8, 0x32, 0xdf, 0x58, 0xb7, 0x16, 0x28, 0x46, 0x92, 0x38, 0x4a, + 0xfd, 0x81, 0x71, 0xc2, 0x58, 0xbb, 0x9c, 0x58, 0xbf, 0x74, 0x1e, 0x16, + 0xcb, 0x15, 0x03, 0xc3, 0x71, 0x8b, 0xba, 0xce, 0x2c, 0x5f, 0xf3, 0x9a, + 0x6b, 0x7d, 0xc6, 0xcb, 0x17, 0xdb, 0xb3, 0x6e, 0xa9, 0x34, 0x4b, 0xef, + 0x93, 0x47, 0xac, 0x5f, 0xfc, 0x3f, 0xb1, 0xb1, 0x44, 0xfc, 0x11, 0xd6, + 0x2a, 0x4f, 0xbb, 0x09, 0x6f, 0xd9, 0xfd, 0xdf, 0x8b, 0x17, 0xf6, 0xdf, + 0xcd, 0x0b, 0x75, 0x8b, 0xff, 0xfe, 0x20, 0x16, 0x7b, 0xf8, 0x60, 0x09, + 0xbd, 0xf6, 0x8b, 0x8b, 0x17, 0xfd, 0x9d, 0xe1, 0x67, 0xf0, 0x96, 0x2a, + 0x51, 0x9e, 0xe6, 0x3a, 0x67, 0xbf, 0x9b, 0xb9, 0xf4, 0x8d, 0x62, 0xba, + 0xe2, 0xa6, 0xa8, 0x0e, 0xe8, 0xeb, 0xf0, 0x9f, 0x22, 0x0e, 0x43, 0xe3, + 0xa1, 0x75, 0xff, 0xff, 0xc3, 0xe7, 0xd8, 0xb3, 0x72, 0x16, 0xc7, 0x9e, + 0xfd, 0x83, 0x2c, 0x58, 0xbc, 0xe5, 0xba, 0xc5, 0xe6, 0x20, 0x2c, 0x54, + 0xa2, 0xb3, 0x1c, 0xf7, 0x1d, 0xbd, 0x25, 0xba, 0xc5, 0xbb, 0x58, 0xa0, + 0x1b, 0x0e, 0x83, 0xb7, 0xec, 0xdf, 0xd9, 0xba, 0xc5, 0xee, 0x93, 0x12, + 0xc5, 0xfe, 0xc8, 0xfe, 0x6b, 0x4d, 0xe5, 0x8b, 0xfa, 0x76, 0x6f, 0xb1, + 0xd6, 0x2f, 0xd2, 0x01, 0x30, 0x6b, 0x15, 0x88, 0xd8, 0x72, 0xa8, 0x88, + 0x3e, 0x6e, 0x45, 0xd7, 0xfe, 0xf3, 0x82, 0x62, 0xfb, 0x8d, 0x96, 0x2f, + 0xe9, 0xf6, 0x16, 0xf8, 0xb1, 0x6e, 0x2c, 0x54, 0x9f, 0xf3, 0x9f, 0xfc, + 0xb6, 0xfc, 0xc4, 0x21, 0xe2, 0xc5, 0xfb, 0x3d, 0xbb, 0xf1, 0x62, 0xa4, + 0xf4, 0x08, 0x9e, 0xf0, 0xbd, 0xc5, 0x8b, 0xf0, 0xfe, 0xc5, 0xe5, 0x8b, + 0xe8, 0xb0, 0xd1, 0xac, 0x50, 0xcf, 0xaf, 0x07, 0xbc, 0x51, 0x7f, 0xe9, + 0x9e, 0xfd, 0x9f, 0xfe, 0x44, 0xb1, 0x5a, 0x3e, 0xee, 0x17, 0x5f, 0xf4, + 0xed, 0xfc, 0xe7, 0xf2, 0x3d, 0x62, 0xfd, 0xbe, 0x39, 0x6e, 0xb1, 0x7f, + 0xb3, 0x72, 0x90, 0x72, 0x56, 0x2e, 0x9d, 0xcc, 0x3d, 0xce, 0x14, 0xdf, + 0xf7, 0x4e, 0x67, 0xf0, 0x83, 0x1a, 0xc5, 0x49, 0xf5, 0xe1, 0x7d, 0x7d, + 0x32, 0x42, 0x8c, 0x12, 0xff, 0x66, 0x81, 0x91, 0x07, 0xc5, 0x8b, 0x1a, + 0xb1, 0x7f, 0xd9, 0x3b, 0x64, 0x5a, 0x7e, 0x2c, 0x5f, 0xfa, 0x76, 0x97, + 0x1f, 0xe6, 0x2e, 0x2c, 0x53, 0xa2, 0x36, 0x21, 0x3f, 0x9d, 0x5f, 0xff, + 0xb6, 0x9f, 0x48, 0xf5, 0x3f, 0x6e, 0x16, 0x01, 0x62, 0xff, 0xd3, 0xdb, + 0x47, 0xfc, 0x9a, 0x3f, 0x65, 0x8b, 0xff, 0x4e, 0x81, 0x8f, 0x9a, 0xf0, + 0x96, 0x2a, 0x51, 0xb3, 0xf5, 0x5e, 0x23, 0x5f, 0xfd, 0xf9, 0xdd, 0xf7, + 0xc0, 0x1e, 0x74, 0xb1, 0x43, 0x54, 0xd4, 0xe5, 0x31, 0x43, 0x0f, 0x91, + 0x84, 0xf8, 0xbe, 0xe2, 0x1a, 0xc5, 0xfd, 0x3d, 0x09, 0xbd, 0xc5, 0x8b, + 0xff, 0xef, 0x48, 0xfe, 0x26, 0x37, 0x7c, 0x72, 0xdd, 0x62, 0xff, 0xdc, + 0xfe, 0x02, 0x2e, 0x13, 0x7d, 0x62, 0xf8, 0xee, 0x50, 0x58, 0xa7, 0x45, + 0xa4, 0x7a, 0x97, 0x10, 0x2a, 0x57, 0x4c, 0xf2, 0x5d, 0x86, 0xea, 0xff, + 0x17, 0x68, 0x71, 0xdb, 0xa2, 0xc5, 0xd3, 0xf5, 0x8b, 0xb8, 0x75, 0x8a, + 0x73, 0xc3, 0x88, 0x53, 0xe2, 0xf4, 0xb1, 0x63, 0x56, 0x2f, 0x6a, 0x4d, + 0x58, 0xbf, 0x3f, 0x8a, 0x4e, 0xb1, 0x51, 0xb9, 0xf2, 0x48, 0x64, 0x42, + 0x7f, 0x1e, 0xbf, 0xc3, 0x92, 0x2c, 0xcd, 0x96, 0x2f, 0xdd, 0x37, 0xf8, + 0x7a, 0x58, 0xbf, 0x8f, 0xad, 0x38, 0x38, 0xb1, 0x7f, 0xd2, 0x5e, 0xc8, + 0x49, 0x79, 0x62, 0xa4, 0xf9, 0xa0, 0x5f, 0x7b, 0x7c, 0x09, 0x62, 0xa5, + 0x1a, 0x91, 0x42, 0x53, 0xe4, 0x35, 0x29, 0x9d, 0xe4, 0x60, 0xd7, 0xff, + 0xcf, 0xee, 0x3e, 0xed, 0xad, 0xf1, 0xcb, 0x75, 0x8b, 0x04, 0xb1, 0x7f, + 0xb5, 0x3e, 0xee, 0x19, 0xe5, 0x8b, 0xff, 0xfb, 0x22, 0x62, 0xd8, 0x0f, + 0xdf, 0x37, 0xc7, 0x2d, 0xd6, 0x2e, 0xc1, 0xac, 0x5e, 0xd9, 0x8e, 0xb1, + 0x70, 0x35, 0x26, 0xd5, 0xc5, 0xef, 0xda, 0x3c, 0xe7, 0x16, 0x2a, 0x4f, + 0x4f, 0x0a, 0xef, 0xfe, 0xef, 0x9e, 0x2c, 0xe9, 0xef, 0x38, 0xd6, 0x2f, + 0xb9, 0xb0, 0xb8, 0xb1, 0x50, 0x54, 0x18, 0xea, 0x31, 0x09, 0x91, 0xaf, + 0x21, 0xcc, 0x22, 0x00, 0xd2, 0x2d, 0x05, 0x8b, 0xc4, 0x19, 0xab, 0x14, + 0xe6, 0xc6, 0x21, 0x2b, 0xfb, 0x3a, 0x78, 0x53, 0xba, 0xc5, 0xff, 0x85, + 0x3a, 0x2c, 0xe8, 0x59, 0xc5, 0x8b, 0xfb, 0xe2, 0x34, 0xf3, 0xc5, 0x8a, + 0xdc, 0xfb, 0xfe, 0x7f, 0x7d, 0x0f, 0x87, 0xc5, 0x8b, 0xe9, 0xe9, 0x3a, + 0x58, 0xa3, 0x0f, 0x27, 0x62, 0x5b, 0x8d, 0x1a, 0xc5, 0xff, 0xf7, 0x0b, + 0x3a, 0x37, 0x8b, 0x39, 0xf6, 0x89, 0x62, 0xb0, 0xfa, 0x9c, 0x66, 0xef, + 0x9d, 0x62, 0xff, 0xd9, 0x0f, 0xb4, 0x3f, 0x80, 0x65, 0x8b, 0xf4, 0xfb, + 0x81, 0xfd, 0x62, 0xa5, 0x52, 0xd8, 0xc8, 0x72, 0x14, 0x0e, 0xd9, 0x14, + 0x23, 0x8e, 0x40, 0x01, 0x82, 0x3e, 0xbf, 0xff, 0xbd, 0xf3, 0x32, 0x12, + 0x0e, 0x16, 0x45, 0x09, 0xed, 0x62, 0xf3, 0xf7, 0x05, 0x8a, 0xf9, 0xfe, + 0x12, 0xf5, 0x8e, 0xb1, 0x78, 0x0d, 0xf5, 0x8b, 0xfd, 0xb6, 0x38, 0xd9, + 0x8d, 0x58, 0xa1, 0x9f, 0x1e, 0x09, 0x30, 0xed, 0xfd, 0xa9, 0x1c, 0x94, + 0x4b, 0x16, 0xe2, 0xc5, 0x6c, 0x78, 0x1f, 0x2e, 0xae, 0xb5, 0xb7, 0x36, + 0x8d, 0x14, 0x36, 0x24, 0x1b, 0x6e, 0x4a, 0x8b, 0xde, 0x32, 0x3e, 0xd7, + 0xe2, 0x87, 0xde, 0xa1, 0x8c, 0x77, 0xdf, 0xcf, 0x16, 0x34, 0x26, 0x81, + 0x09, 0x32, 0x8d, 0xf3, 0x92, 0x8d, 0x3d, 0x2b, 0xdc, 0x50, 0xf6, 0x8e, + 0x84, 0x20, 0x6d, 0xb7, 0xfd, 0x91, 0x41, 0xb5, 0xb7, 0xc4, 0xb1, 0x7b, + 0x69, 0xdd, 0x62, 0xd1, 0x83, 0x3d, 0xb7, 0x3c, 0xa8, 0xc4, 0xf8, 0x05, + 0x1d, 0xb5, 0xf9, 0xa3, 0x23, 0x76, 0x8d, 0xd6, 0x2f, 0x70, 0xfc, 0x58, + 0xbf, 0xdd, 0x6c, 0xbf, 0xa1, 0x9c, 0x58, 0xbf, 0xfe, 0x7f, 0x3e, 0x98, + 0x13, 0xf7, 0xde, 0x40, 0xb1, 0x7f, 0xfa, 0x49, 0xa0, 0xd0, 0xfb, 0x93, + 0x71, 0x62, 0xfd, 0x9f, 0x2c, 0x82, 0xc5, 0xff, 0xfe, 0x93, 0xb1, 0x39, + 0x49, 0x6c, 0x7c, 0x3f, 0x56, 0x0d, 0x62, 0xfe, 0xcd, 0x4f, 0x49, 0x82, + 0xc5, 0x7d, 0x12, 0x04, 0xc3, 0x74, 0x20, 0xb1, 0x7f, 0x1b, 0x30, 0xf6, + 0x6c, 0xb1, 0x70, 0x37, 0x58, 0xbd, 0x85, 0x38, 0x79, 0x3c, 0x30, 0xbf, + 0x70, 0x43, 0xce, 0x2c, 0x5f, 0xdf, 0xc3, 0x8b, 0x7c, 0x58, 0xba, 0x7c, + 0xb1, 0x4e, 0x78, 0xdc, 0x2f, 0xbf, 0xf3, 0x7c, 0xc9, 0xcf, 0x7d, 0xce, + 0xb1, 0x7f, 0xff, 0x9f, 0xd3, 0xf2, 0xcf, 0x6a, 0x7e, 0x59, 0xd0, 0x5b, + 0xac, 0x5f, 0xff, 0x4e, 0x7b, 0xed, 0x0d, 0x08, 0x72, 0x52, 0xb1, 0x50, + 0x56, 0xfe, 0x34, 0xfd, 0xd1, 0xde, 0x16, 0xf1, 0xe4, 0x5f, 0x61, 0xe1, + 0x87, 0x9b, 0xc4, 0x43, 0xd0, 0xff, 0xa9, 0x8a, 0xff, 0xfb, 0x9f, 0x93, + 0x4c, 0x7d, 0x9b, 0xef, 0xdf, 0x16, 0x2f, 0x36, 0xb8, 0xb1, 0x42, 0x3f, + 0x10, 0x95, 0x2f, 0xfe, 0xfb, 0x3e, 0xde, 0x72, 0x70, 0x71, 0x62, 0xfd, + 0x8d, 0xe1, 0x4a, 0xc5, 0x39, 0xf5, 0x81, 0x12, 0xff, 0x8a, 0x61, 0x9c, + 0xc7, 0x95, 0x8b, 0x6c, 0xb1, 0x52, 0x79, 0x24, 0x6d, 0x7f, 0xff, 0xd2, + 0x03, 0xb4, 0x0c, 0xf7, 0xf0, 0xf9, 0xbc, 0xfe, 0x4e, 0xb1, 0x7f, 0xfc, + 0xe5, 0xe1, 0x7d, 0xf9, 0x1c, 0xde, 0xc1, 0xac, 0x57, 0xd1, 0x75, 0xe6, + 0x8b, 0xf9, 0xf6, 0x31, 0x88, 0x0b, 0x17, 0xff, 0xfd, 0xf6, 0x7e, 0x61, + 0xac, 0x40, 0x33, 0x23, 0xe4, 0x98, 0xd5, 0x8b, 0xcc, 0xdb, 0xaa, 0x4d, + 0xa2, 0xa5, 0x12, 0x7b, 0xb4, 0xdf, 0xf1, 0x39, 0xba, 0xcd, 0xa7, 0xcb, + 0x17, 0xff, 0xe7, 0xdb, 0x21, 0x26, 0xe8, 0x5c, 0x72, 0x87, 0x16, 0x2f, + 0xe9, 0x2d, 0xf3, 0xbf, 0x2c, 0x5f, 0xff, 0x67, 0xb5, 0x9f, 0x13, 0xfd, + 0xf9, 0x27, 0x58, 0xbf, 0x77, 0xbb, 0xe9, 0x96, 0x2f, 0x37, 0xb9, 0x18, + 0x7f, 0x3e, 0x4f, 0xbf, 0xff, 0xa5, 0xbd, 0x3f, 0x9e, 0x3b, 0xc1, 0xf5, + 0x83, 0x58, 0xbf, 0xbf, 0x27, 0x97, 0x1a, 0xc5, 0x3a, 0xaf, 0xc8, 0x88, + 0xf5, 0x0c, 0x23, 0x91, 0xfc, 0xe8, 0x0a, 0xe5, 0x0a, 0x8e, 0x1b, 0x79, + 0x62, 0xff, 0xe8, 0xd2, 0x4d, 0x08, 0xce, 0x86, 0x19, 0xf8, 0xe5, 0x8b, + 0xf9, 0xa0, 0x3f, 0xb9, 0xd6, 0x2f, 0xf6, 0x44, 0x52, 0x73, 0x37, 0x58, + 0xb3, 0x8c, 0xf9, 0x3c, 0x5d, 0x5d, 0x76, 0x8e, 0x1f, 0xc2, 0xea, 0xff, + 0xf7, 0xf2, 0x0c, 0x5e, 0x68, 0x39, 0xb2, 0xb1, 0x7f, 0xd9, 0x9b, 0xc7, + 0x0b, 0xef, 0xa5, 0x8b, 0xff, 0xbf, 0x9b, 0x71, 0xf5, 0x3d, 0x4c, 0x4b, + 0x17, 0xff, 0xf8, 0x5e, 0xd0, 0xa1, 0xa1, 0x78, 0x5e, 0x7f, 0x73, 0xee, + 0xb1, 0x76, 0x3a, 0xc5, 0x6e, 0x8c, 0x12, 0x47, 0xe8, 0xc9, 0x7b, 0xc0, + 0x75, 0x8b, 0xfa, 0x63, 0x6e, 0x6d, 0x81, 0x2c, 0x54, 0xa2, 0x13, 0x0c, + 0xb4, 0x3b, 0x6e, 0xb1, 0x62, 0xe2, 0xf2, 0xc5, 0xf7, 0x89, 0xbb, 0x58, + 0xb1, 0xb2, 0x6e, 0x9c, 0x5e, 0xff, 0xde, 0x93, 0x93, 0x1a, 0x58, 0x05, + 0x8a, 0x93, 0xe4, 0xc2, 0x6b, 0x01, 0x62, 0xa2, 0x47, 0x39, 0x42, 0xd7, + 0xc4, 0x17, 0xfc, 0x43, 0x99, 0x3f, 0x53, 0x41, 0x62, 0xfc, 0xe5, 0xb3, + 0x0d, 0x62, 0x9c, 0xf8, 0xf8, 0x77, 0x7e, 0x89, 0xf5, 0x9d, 0xac, 0x5f, + 0xf4, 0x83, 0xf3, 0xb1, 0x67, 0x16, 0x2a, 0x51, 0x08, 0xc4, 0x22, 0x2a, + 0xbe, 0xce, 0x49, 0x2c, 0x5f, 0xfe, 0x7d, 0x4e, 0x7c, 0x4f, 0xcf, 0xe0, + 0x16, 0x2f, 0xf7, 0x3f, 0x2e, 0x43, 0x95, 0x8b, 0xff, 0xe1, 0x8b, 0xdc, + 0x1e, 0x43, 0xf3, 0xd0, 0x72, 0xb1, 0x71, 0x32, 0xc5, 0x6c, 0x98, 0x28, + 0xc8, 0x71, 0x25, 0xcc, 0x89, 0x4e, 0xdd, 0x62, 0xc5, 0xfe, 0x84, 0xeb, + 0x69, 0xd6, 0xcb, 0x17, 0xff, 0x9e, 0x1c, 0x11, 0x66, 0x9f, 0x93, 0xd1, + 0x62, 0xff, 0x37, 0x8c, 0xd0, 0xdf, 0x4b, 0x15, 0x28, 0xb6, 0x63, 0x61, + 0x25, 0xdf, 0xfd, 0x0f, 0xc9, 0x1a, 0x59, 0xb0, 0x70, 0x58, 0xbb, 0x3a, + 0x2c, 0x54, 0x9f, 0x06, 0xe8, 0xf7, 0xff, 0xfa, 0x5c, 0x9b, 0xc2, 0xf6, + 0x0e, 0x4e, 0x3f, 0xcf, 0x6b, 0x17, 0xf9, 0xce, 0x39, 0xe0, 0x7c, 0x58, + 0xbf, 0xa7, 0x36, 0xf6, 0x7d, 0x62, 0xf7, 0xb3, 0x75, 0x8b, 0xff, 0xe2, + 0x7e, 0x8f, 0xef, 0xcf, 0xb9, 0x3d, 0x25, 0x62, 0x9d, 0x35, 0x5d, 0x11, + 0x7d, 0x80, 0x8d, 0x7c, 0x5c, 0x21, 0xeb, 0xfb, 0x6d, 0x67, 0xbe, 0xeb, + 0x17, 0xf8, 0x78, 0x50, 0x7f, 0x89, 0x62, 0xff, 0xe1, 0x73, 0xed, 0x09, + 0xea, 0x27, 0xed, 0x62, 0xff, 0xfe, 0x7d, 0x48, 0xa0, 0xee, 0x59, 0xe1, + 0x47, 0xbe, 0xcb, 0x16, 0x1a, 0xc5, 0xff, 0x4c, 0x76, 0x68, 0x07, 0x68, + 0x2c, 0x5f, 0xc2, 0xdf, 0xf3, 0xac, 0x58, 0xbd, 0xdf, 0x3e, 0xb1, 0x58, + 0x79, 0xcc, 0x5f, 0x58, 0x9e, 0x1b, 0x97, 0xe8, 0xcf, 0xe9, 0x0c, 0xba, + 0x42, 0x5c, 0x84, 0x55, 0xff, 0xf6, 0xbb, 0x9c, 0x84, 0xf9, 0xfb, 0x83, + 0x0d, 0x62, 0xff, 0xfd, 0x25, 0xe7, 0x38, 0x87, 0x3f, 0xc2, 0x6d, 0x2c, + 0x5f, 0xf9, 0x9f, 0x27, 0x4d, 0x07, 0xfa, 0xc5, 0x71, 0x11, 0xfe, 0x53, + 0xbf, 0x30, 0xf0, 0x80, 0xb1, 0x70, 0xba, 0x96, 0x2f, 0xfc, 0x39, 0x80, + 0x9e, 0x02, 0x78, 0x2c, 0x54, 0xa7, 0x09, 0x08, 0x70, 0x39, 0x1e, 0x89, + 0xd8, 0x6e, 0xff, 0xa7, 0x46, 0x72, 0x7e, 0xce, 0xb1, 0x7f, 0x3b, 0x43, + 0xcf, 0xb2, 0xc5, 0xf6, 0xd3, 0xf7, 0x58, 0xaf, 0x9e, 0x8b, 0x17, 0x5f, + 0x4e, 0x13, 0xac, 0x5f, 0x7a, 0x70, 0x6b, 0x14, 0x33, 0xc2, 0xec, 0x82, + 0xf7, 0xb3, 0x65, 0x8a, 0xeb, 0x1b, 0x8f, 0xae, 0xb4, 0x7a, 0x65, 0xdb, + 0xed, 0x18, 0xc4, 0x21, 0x1c, 0x36, 0xac, 0x97, 0xad, 0xbc, 0x6d, 0x4e, + 0x5f, 0x12, 0x4e, 0xa3, 0x82, 0x3c, 0x62, 0xbf, 0x8c, 0x71, 0xa3, 0x33, + 0x02, 0x49, 0x43, 0x37, 0x91, 0xf1, 0xfa, 0x50, 0xc8, 0xa3, 0xea, 0x09, + 0x36, 0x3a, 0x11, 0x41, 0xb1, 0xf5, 0x11, 0xde, 0xcc, 0x35, 0x62, 0xfe, + 0x98, 0x71, 0xb3, 0x75, 0x8b, 0xff, 0xfd, 0xbe, 0x7a, 0x4b, 0xdc, 0xfb, + 0x3f, 0xa5, 0xfa, 0x4a, 0xc5, 0xd3, 0x19, 0xa4, 0x56, 0x7c, 0x74, 0x32, + 0xeb, 0xe0, 0x7b, 0xdd, 0xac, 0x5e, 0x37, 0x52, 0xb1, 0x7e, 0xf3, 0xf4, + 0xfb, 0xac, 0x5b, 0xad, 0x93, 0xc8, 0xc1, 0xeb, 0xff, 0x16, 0x1e, 0x61, + 0x9a, 0xcf, 0x2c, 0x5f, 0xed, 0x37, 0x80, 0x19, 0x41, 0x62, 0xff, 0xfb, + 0xbe, 0x67, 0x47, 0xf4, 0xf4, 0x72, 0xc1, 0xac, 0x54, 0xa2, 0x20, 0x46, + 0xb7, 0xf0, 0x98, 0x8b, 0x00, 0xb1, 0x7f, 0xfe, 0x9f, 0x3e, 0xee, 0x39, + 0x7d, 0x3c, 0x1f, 0x8b, 0x17, 0xf3, 0xfa, 0x39, 0xfe, 0x25, 0x8a, 0xd2, + 0x21, 0x4e, 0xa9, 0x78, 0x73, 0xda, 0xc5, 0xf9, 0xb4, 0x31, 0x12, 0xc5, + 0x49, 0xe3, 0x1a, 0x3d, 0x7f, 0xef, 0xbf, 0xb8, 0xdd, 0xe6, 0x6c, 0xb1, + 0x7f, 0xfb, 0x8d, 0xef, 0xbc, 0x0f, 0xfe, 0xda, 0x3d, 0x62, 0xfc, 0xe7, + 0x6f, 0x4a, 0xc5, 0xfe, 0xf3, 0xee, 0xe3, 0xec, 0x96, 0x2f, 0xfe, 0xdb, + 0x0b, 0x22, 0x33, 0x42, 0x90, 0x2c, 0x5f, 0xd2, 0x7c, 0x16, 0x1d, 0x62, + 0xfa, 0x7b, 0xd6, 0x2c, 0x5c, 0x5d, 0x16, 0x2a, 0x51, 0xcb, 0x86, 0xae, + 0x8f, 0xa2, 0xde, 0xa2, 0x3b, 0xfc, 0xc3, 0x89, 0xf5, 0xb3, 0x2c, 0x5f, + 0xff, 0xff, 0xf8, 0x65, 0x3b, 0xf7, 0xbb, 0xf6, 0x76, 0x23, 0x70, 0x9b, + 0xb0, 0xb7, 0xfb, 0xc4, 0x4e, 0x7e, 0x2c, 0x5f, 0x78, 0x3c, 0xea, 0x58, + 0xbf, 0xf3, 0xfa, 0x7c, 0xfd, 0x24, 0xb7, 0x58, 0xbb, 0xb8, 0x2c, 0x56, + 0x26, 0x40, 0xf0, 0xa0, 0x62, 0x71, 0x20, 0x5f, 0x05, 0x9d, 0xf9, 0x62, + 0xf7, 0x62, 0xd9, 0x62, 0xfa, 0x60, 0x00, 0x96, 0x2b, 0x47, 0x88, 0x44, + 0x17, 0xe8, 0xe7, 0xd6, 0x1a, 0xb1, 0x58, 0x79, 0xa4, 0x43, 0x77, 0xbe, + 0xb1, 0x7f, 0x1e, 0x77, 0x34, 0xd6, 0x58, 0xbf, 0xec, 0xf7, 0x03, 0xe7, + 0xb3, 0xeb, 0x15, 0xb2, 0x21, 0x30, 0x60, 0xe6, 0x37, 0x8f, 0x3b, 0xac, + 0x5f, 0x14, 0x9f, 0x8b, 0x16, 0x7d, 0x8f, 0x03, 0xc3, 0xd7, 0xfc, 0xdd, + 0xf1, 0xe3, 0xfe, 0x20, 0xd6, 0x2f, 0xcd, 0xdc, 0x03, 0xe2, 0xc5, 0xe1, + 0x77, 0xc5, 0x8b, 0xfe, 0x8b, 0x9d, 0x18, 0xb6, 0x10, 0xd6, 0x2f, 0xf7, + 0x3a, 0x31, 0x7b, 0x00, 0xb1, 0x78, 0xf3, 0xe5, 0x8b, 0xdd, 0x53, 0x1e, + 0xb1, 0x4e, 0x8b, 0x38, 0x8f, 0x8e, 0x6b, 0xd4, 0x3b, 0x74, 0x9a, 0xb1, + 0x7f, 0xe2, 0x1f, 0xe7, 0x9c, 0xcd, 0x4a, 0xc5, 0x7c, 0xf5, 0x98, 0x62, + 0xd1, 0x9d, 0x6b, 0x28, 0x6a, 0x36, 0x6d, 0x92, 0xbd, 0xa1, 0x8a, 0x32, + 0x2c, 0x85, 0x89, 0xad, 0x3b, 0x91, 0x76, 0x81, 0x12, 0x7e, 0xa3, 0x0c, + 0x3a, 0x57, 0xe3, 0x55, 0x02, 0x01, 0x42, 0xdb, 0x90, 0xa4, 0xf3, 0x80, + 0x8a, 0x3a, 0x1f, 0xc7, 0x15, 0x87, 0x0d, 0x2e, 0xa8, 0x4b, 0x54, 0x63, + 0x38, 0x57, 0x25, 0x24, 0x82, 0x94, 0xb3, 0x7f, 0x3c, 0x5c, 0xd9, 0xf4, + 0xb1, 0x71, 0xfe, 0xb1, 0x7d, 0xbb, 0x36, 0xea, 0x93, 0x94, 0xbe, 0x63, + 0xe1, 0x2c, 0x56, 0x8f, 0x4b, 0xc6, 0x37, 0xbe, 0xff, 0x58, 0xbf, 0x98, + 0x7f, 0x92, 0xd9, 0x62, 0xe3, 0x7e, 0xb1, 0x73, 0x1d, 0x62, 0xfc, 0x29, + 0xee, 0x1c, 0x58, 0xb7, 0x16, 0x2a, 0x4f, 0x4f, 0x05, 0xd8, 0xaa, 0xd1, + 0x92, 0x9c, 0xf8, 0xcc, 0x31, 0xab, 0x72, 0x2f, 0x8e, 0xb1, 0x71, 0x36, + 0x5a, 0x35, 0x2c, 0x5c, 0xe7, 0x58, 0xb9, 0x86, 0xb1, 0x73, 0x9a, 0xb1, + 0x7e, 0xd6, 0xec, 0xdb, 0xaa, 0x4e, 0xd2, 0xfd, 0x3b, 0xb9, 0x32, 0xc5, + 0x2c, 0x51, 0xcd, 0x9f, 0x09, 0xef, 0x6d, 0x81, 0x2c, 0x5e, 0x07, 0x46, + 0x58, 0xbf, 0xe7, 0x84, 0x1c, 0x81, 0x30, 0x58, 0xb8, 0xf1, 0xcb, 0x17, + 0xfd, 0xd1, 0x8e, 0x51, 0x38, 0xba, 0xf5, 0x8b, 0xfd, 0x24, 0xe0, 0x8e, + 0x6d, 0x96, 0x29, 0xcf, 0xdf, 0xc8, 0x37, 0xb4, 0xc0, 0x58, 0xac, 0x37, + 0xce, 0x43, 0x6d, 0x2c, 0x5d, 0xb4, 0xac, 0x56, 0x1a, 0xa6, 0x12, 0xa8, + 0xd4, 0xaa, 0x5e, 0x46, 0x20, 0x2e, 0x31, 0x7c, 0x18, 0x76, 0xa3, 0x90, + 0xfc, 0x7d, 0x87, 0xc8, 0xe3, 0x90, 0xd0, 0x12, 0x4d, 0xec, 0x71, 0xac, + 0x5f, 0x08, 0x31, 0x04, 0xb1, 0x7f, 0xf3, 0xf7, 0x07, 0x9d, 0x34, 0x4f, + 0xf5, 0x8b, 0xfb, 0x3f, 0xc9, 0xd6, 0xeb, 0x17, 0xff, 0xf7, 0x27, 0x5b, + 0xe7, 0x7e, 0xef, 0x71, 0x31, 0x77, 0xe5, 0x8b, 0xfb, 0x82, 0x8a, 0x29, + 0x3a, 0xc5, 0xf6, 0x13, 0x71, 0x62, 0xf7, 0x60, 0x8c, 0xd9, 0x36, 0x9c, + 0x1c, 0x88, 0x98, 0x91, 0x78, 0x5e, 0x26, 0x18, 0xe3, 0x1a, 0x8c, 0x55, + 0x28, 0xd2, 0x85, 0xad, 0xe5, 0x8b, 0xc2, 0x60, 0xd6, 0x2a, 0x23, 0x60, + 0xc2, 0x57, 0xfd, 0x27, 0x30, 0x51, 0x3b, 0x76, 0xb1, 0x7d, 0x13, 0x7a, + 0x33, 0xe7, 0xba, 0x02, 0x1a, 0x98, 0xcc, 0x5a, 0xb6, 0x2b, 0x85, 0xac, + 0x74, 0x1c, 0xb8, 0x5c, 0x85, 0x41, 0xb7, 0x86, 0x70, 0xf7, 0xe6, 0xa5, + 0x1f, 0x0c, 0xcf, 0xd7, 0x2c, 0x8c, 0x5a, 0x56, 0x9d, 0x13, 0x91, 0xf2, + 0xfa, 0x76, 0x58, 0x38, 0x5d, 0xdf, 0xe8, 0xcc, 0xd6, 0xec, 0xdb, 0xaa, + 0x4a, 0x72, 0xfe, 0xce, 0x31, 0xbf, 0x75, 0x8b, 0xfd, 0xaf, 0x3f, 0xb6, + 0x17, 0x16, 0x2e, 0xe7, 0x16, 0x2f, 0xfc, 0x59, 0xa9, 0xf3, 0xee, 0xe3, + 0x58, 0xbf, 0x60, 0x27, 0x09, 0x62, 0xd1, 0x90, 0x47, 0x06, 0x17, 0x68, + 0xd9, 0x86, 0x08, 0xfa, 0xff, 0xfe, 0x7d, 0x08, 0xdf, 0xe1, 0x6f, 0xf7, + 0x8e, 0x79, 0x09, 0x62, 0xff, 0xb2, 0x28, 0x36, 0xb6, 0xf8, 0x96, 0x2f, + 0xfd, 0x85, 0xbf, 0xde, 0x39, 0xe4, 0x25, 0x8b, 0xf4, 0x9d, 0xa4, 0xeb, + 0x17, 0xb4, 0x23, 0x7e, 0x7d, 0x2c, 0x85, 0x7e, 0x1e, 0x60, 0x38, 0xb1, + 0x7f, 0xf4, 0x73, 0x10, 0x33, 0xd2, 0x4e, 0x05, 0x8b, 0x46, 0x75, 0xd5, + 0x3a, 0x61, 0xb0, 0x3c, 0x29, 0x78, 0x68, 0x19, 0x45, 0x12, 0xa5, 0x7e, + 0x91, 0xfb, 0x5f, 0xfc, 0xfd, 0x27, 0xef, 0x31, 0x45, 0x3b, 0xac, 0x5f, + 0xba, 0xe4, 0x69, 0xe7, 0x35, 0x62, 0xed, 0xb1, 0x62, 0xfb, 0x85, 0xff, + 0x2c, 0x5f, 0xef, 0xcf, 0x24, 0xe2, 0x89, 0x62, 0xfd, 0xb9, 0x4f, 0xf1, + 0x62, 0xfe, 0xf1, 0x83, 0x29, 0x82, 0xc5, 0xb6, 0x58, 0xa6, 0x3c, 0x21, + 0x17, 0xdf, 0xf9, 0xff, 0x3d, 0x3d, 0x98, 0x17, 0x16, 0x2f, 0x42, 0x76, + 0x58, 0xad, 0x1e, 0xf8, 0x90, 0x6f, 0xfb, 0xb8, 0x70, 0xcc, 0xe8, 0xda, + 0x58, 0xbf, 0x84, 0xfd, 0xf2, 0x7b, 0x58, 0xbf, 0xf0, 0xa2, 0x31, 0xfe, + 0x71, 0x6a, 0x56, 0x2f, 0xff, 0xa6, 0x27, 0x3b, 0x78, 0xc6, 0xf3, 0x07, + 0x12, 0xc5, 0xb7, 0x58, 0xa8, 0x2a, 0x7a, 0x19, 0x1b, 0x9a, 0xc4, 0xd5, + 0xa8, 0x40, 0x7c, 0x88, 0x8f, 0xb8, 0x60, 0x12, 0x17, 0x52, 0x9d, 0xfc, + 0x2e, 0xce, 0xcc, 0x4b, 0x17, 0xff, 0xec, 0x20, 0x09, 0x8b, 0x73, 0x1e, + 0x76, 0x60, 0xd6, 0x2d, 0xe5, 0x8b, 0xfb, 0xb3, 0x27, 0x20, 0x75, 0x8b, + 0xee, 0xf9, 0x23, 0x58, 0xb0, 0x96, 0x2f, 0x4b, 0x6c, 0x61, 0xb6, 0x01, + 0x25, 0x3a, 0x2a, 0xf4, 0x24, 0x4c, 0xd7, 0xd3, 0xef, 0xe2, 0xc5, 0xfa, + 0x7b, 0x86, 0x79, 0x62, 0xf8, 0xf8, 0xe7, 0x58, 0xbf, 0xb0, 0x23, 0x38, + 0x78, 0x2c, 0x5e, 0x66, 0xdd, 0x52, 0x5c, 0x95, 0xb1, 0xed, 0xee, 0x63, + 0x7e, 0xf6, 0x13, 0x79, 0x62, 0xff, 0x78, 0xb0, 0x7f, 0xcf, 0x2c, 0x54, + 0x9e, 0xd3, 0x93, 0xda, 0x56, 0x2f, 0xa7, 0xd3, 0xe5, 0x8a, 0x39, 0xb3, + 0x21, 0x1b, 0xf6, 0xb7, 0x66, 0xdd, 0x52, 0x67, 0x17, 0xfe, 0x35, 0xfb, + 0xe1, 0x60, 0x4c, 0x05, 0x8b, 0xdc, 0xc1, 0xac, 0x54, 0xa2, 0xd7, 0x08, + 0x3c, 0x6e, 0x24, 0x1b, 0xff, 0xdd, 0xf0, 0xcc, 0xde, 0x5c, 0x8a, 0x4e, + 0xb1, 0x7f, 0xd3, 0xbc, 0x9e, 0x4b, 0x3a, 0x2c, 0x51, 0x22, 0x17, 0xa9, + 0x2e, 0xa3, 0x11, 0xca, 0xf0, 0xc0, 0xbd, 0xd4, 0xdf, 0x58, 0xb9, 0xa0, + 0xb1, 0x7f, 0x43, 0xdd, 0xee, 0xfc, 0x58, 0xa6, 0x3c, 0x81, 0x0b, 0xdf, + 0xcf, 0xcc, 0x26, 0x09, 0x62, 0xff, 0x36, 0xb3, 0xa4, 0x97, 0x96, 0x2f, + 0xd0, 0xc3, 0xce, 0xeb, 0x15, 0xb9, 0xee, 0xe8, 0xd2, 0xfc, 0x11, 0x9b, + 0x60, 0x4b, 0x17, 0x42, 0x56, 0x2a, 0x4f, 0x10, 0x45, 0xb7, 0xfe, 0x98, + 0x99, 0xfb, 0xe1, 0x9b, 0x6c, 0xb1, 0x5b, 0x2e, 0x9e, 0x40, 0x89, 0xca, + 0x74, 0xfa, 0x77, 0xef, 0xc7, 0xda, 0xc5, 0x44, 0xd1, 0xe2, 0x11, 0x42, + 0x2b, 0xa3, 0x3f, 0x51, 0x0d, 0xc2, 0x25, 0x8b, 0xff, 0x3c, 0x5f, 0x92, + 0x19, 0x4c, 0x16, 0x29, 0xcf, 0x57, 0xe2, 0xf7, 0xb7, 0x6f, 0x2c, 0x5f, + 0xf8, 0x5a, 0xc1, 0xcf, 0x57, 0xdf, 0x75, 0x8a, 0xc3, 0xe1, 0xf8, 0xf5, + 0xff, 0x3e, 0xb7, 0xfe, 0x18, 0xf2, 0xb1, 0x50, 0x3d, 0xbe, 0x10, 0xdf, + 0xf7, 0x04, 0xc1, 0xc4, 0x66, 0x01, 0x62, 0xff, 0xf7, 0xa7, 0x86, 0x0b, + 0x9e, 0x98, 0xa2, 0x75, 0x8b, 0xe8, 0x0b, 0xf8, 0xb1, 0x7f, 0xfe, 0x6f, + 0xe1, 0xe4, 0xe6, 0x66, 0x1a, 0x6b, 0x41, 0x62, 0xfe, 0x73, 0xec, 0x2d, + 0x41, 0x62, 0xfb, 0x22, 0x60, 0x2c, 0x5d, 0xfc, 0x58, 0xa3, 0x9b, 0xaf, + 0x91, 0xdf, 0x6d, 0xf6, 0xf2, 0xc5, 0x31, 0xe2, 0x88, 0x86, 0xf8, 0xf1, + 0xa7, 0x5b, 0xe5, 0x8b, 0xf4, 0xc5, 0x14, 0xee, 0xb1, 0x74, 0xfc, 0xc3, + 0xd9, 0x72, 0xea, 0x95, 0x4b, 0x78, 0x7b, 0xda, 0x74, 0x44, 0x7f, 0x57, + 0x28, 0x57, 0xf4, 0x7a, 0xbf, 0xe2, 0x93, 0xf0, 0x50, 0x63, 0x56, 0x2f, + 0xff, 0xff, 0x79, 0xc1, 0xc6, 0xec, 0xc6, 0x17, 0x70, 0x90, 0xa7, 0x79, + 0xfc, 0xc4, 0xb1, 0x7f, 0x9b, 0xb8, 0x73, 0x3b, 0xf2, 0xc5, 0x4a, 0x2c, + 0xd9, 0xf6, 0xe3, 0xf4, 0x58, 0xbf, 0xef, 0x67, 0xcb, 0x3d, 0xf7, 0x58, + 0xba, 0x46, 0xb1, 0x50, 0x3c, 0xf2, 0x38, 0xbf, 0xfb, 0xef, 0xe9, 0xd0, + 0x0a, 0x7d, 0xc5, 0x8a, 0xc4, 0x67, 0x33, 0x48, 0x88, 0x6e, 0xfe, 0x2c, + 0x5f, 0xb2, 0x28, 0x85, 0xb2, 0xc5, 0x61, 0xe1, 0xfc, 0x5e, 0xfa, 0x0d, + 0xe7, 0x58, 0xbe, 0xd0, 0x01, 0x2b, 0x17, 0xfc, 0xfb, 0x99, 0xc8, 0x89, + 0x82, 0x58, 0xa3, 0x51, 0x47, 0xd9, 0x0b, 0x91, 0x7c, 0x8e, 0xfd, 0x14, + 0x9e, 0x43, 0x58, 0xbf, 0x18, 0x3c, 0xe0, 0x96, 0x2f, 0xc2, 0xea, 0xfc, + 0xf6, 0xb1, 0x7f, 0xff, 0x9f, 0x80, 0xc3, 0x1f, 0xa4, 0xfd, 0xe6, 0x28, + 0xa7, 0x75, 0x8b, 0xdc, 0xc2, 0x58, 0xad, 0x91, 0x5d, 0xa2, 0xd0, 0x32, + 0xdd, 0x03, 0xac, 0x5f, 0xfa, 0x23, 0x18, 0x6f, 0x31, 0x37, 0x96, 0x2a, + 0x53, 0xca, 0xc3, 0xe7, 0x2a, 0x68, 0x6c, 0x11, 0x88, 0x86, 0x2f, 0xb4, + 0x67, 0x5e, 0x4b, 0x17, 0xd2, 0x7c, 0x25, 0x8a, 0x93, 0xca, 0x39, 0x4d, + 0xe1, 0x37, 0x16, 0x2f, 0xf0, 0x6f, 0x14, 0xf1, 0xce, 0xb1, 0x7b, 0xd9, + 0xd7, 0xac, 0x5f, 0xfc, 0xe6, 0x7d, 0x9f, 0xd3, 0x83, 0x75, 0x8a, 0x73, + 0xe5, 0xf9, 0x15, 0xef, 0x7d, 0xd6, 0x2f, 0xfb, 0x46, 0x49, 0xde, 0x3d, + 0xa2, 0x58, 0xa9, 0x3d, 0xb7, 0x1d, 0xbc, 0x63, 0xe9, 0x62, 0xfb, 0x76, + 0x6d, 0xd5, 0x22, 0x11, 0x7f, 0x43, 0x58, 0x36, 0x3a, 0xc5, 0xf8, 0xa1, + 0xf0, 0xf8, 0xb1, 0x52, 0x7b, 0x0e, 0x5d, 0x46, 0xa3, 0x9e, 0x22, 0x0d, + 0x0f, 0x72, 0x11, 0x37, 0xfb, 0xdc, 0x14, 0x27, 0x69, 0x58, 0xbf, 0xf3, + 0x85, 0xcc, 0xd7, 0xbc, 0xfa, 0x58, 0xac, 0x3f, 0x5f, 0x1a, 0xdc, 0x46, + 0xac, 0x5f, 0xff, 0x9f, 0x5b, 0xff, 0x0c, 0xd6, 0xb0, 0x28, 0xe9, 0x3a, + 0xc5, 0x41, 0x12, 0xac, 0x43, 0xc1, 0x8b, 0xfd, 0x17, 0xe7, 0x86, 0x39, + 0xab, 0x17, 0xf7, 0xe7, 0x63, 0x30, 0x0b, 0x17, 0xf3, 0x37, 0x70, 0xe3, + 0xac, 0x5d, 0x1d, 0x2b, 0x17, 0xf9, 0x88, 0xce, 0xf8, 0x23, 0xac, 0x56, + 0x1e, 0x83, 0x0d, 0x5f, 0xe0, 0x4c, 0x7c, 0xfa, 0x46, 0xb1, 0x7f, 0x85, + 0x1e, 0xde, 0xfc, 0xf1, 0x62, 0xff, 0x63, 0x6b, 0x63, 0x3b, 0x3a, 0xc5, + 0x44, 0x7d, 0xc7, 0x37, 0xbf, 0x79, 0xc4, 0x46, 0xac, 0x5f, 0xe9, 0x3c, + 0xc6, 0x04, 0x10, 0x4b, 0x14, 0xe7, 0xc7, 0xd4, 0x53, 0x7b, 0x8f, 0x12, + 0xc5, 0x4a, 0x6d, 0x99, 0x0a, 0x46, 0x84, 0x30, 0x89, 0x2f, 0x33, 0x1d, + 0x62, 0xff, 0xb3, 0x92, 0x14, 0xbf, 0x7c, 0x58, 0xad, 0x8f, 0x58, 0x63, + 0x97, 0xfb, 0xbe, 0x78, 0xa4, 0xfc, 0x58, 0xbf, 0x77, 0xe8, 0xec, 0xfa, + 0xc5, 0xff, 0xe6, 0x2d, 0xcc, 0x19, 0x34, 0x3e, 0xd0, 0x58, 0xa7, 0x45, + 0x6b, 0x1a, 0x88, 0xb6, 0xff, 0xec, 0x1b, 0xf4, 0x62, 0x01, 0x9c, 0x02, + 0xc5, 0xfd, 0x84, 0xe0, 0xe4, 0xac, 0x5f, 0xf7, 0x7b, 0xbe, 0xb2, 0x10, + 0x95, 0x8b, 0xff, 0xf4, 0x53, 0x13, 0xc4, 0x63, 0xf7, 0xc6, 0x0d, 0xce, + 0xb1, 0x52, 0xc8, 0x8d, 0x84, 0x26, 0xb2, 0x36, 0x3e, 0xe3, 0x4e, 0x72, + 0xf8, 0x8d, 0xf4, 0x60, 0x77, 0xef, 0xc7, 0x18, 0xd0, 0x9b, 0x04, 0x34, + 0x08, 0xbb, 0x88, 0xfe, 0x2c, 0x11, 0xdd, 0xc5, 0x8b, 0x14, 0x63, 0x26, + 0xba, 0x32, 0x91, 0x54, 0xf0, 0xee, 0xbf, 0x45, 0xf7, 0xef, 0xcb, 0x17, + 0x3f, 0xd6, 0x2f, 0xfb, 0xed, 0xd9, 0x93, 0xde, 0x12, 0xc5, 0xff, 0x98, + 0x38, 0x89, 0xfc, 0x52, 0x05, 0x8a, 0xd9, 0x95, 0xa1, 0x0a, 0x4e, 0x78, + 0xd1, 0x7b, 0x2b, 0x00, 0xbf, 0x8e, 0xef, 0x8f, 0xbb, 0x0d, 0x62, 0xfe, + 0x33, 0xc5, 0x27, 0xe2, 0xc5, 0xfd, 0x3e, 0x70, 0x4c, 0x16, 0x2f, 0xdd, + 0xfa, 0x3b, 0x3e, 0xb1, 0x52, 0x8a, 0xd8, 0x12, 0x68, 0xbd, 0x8b, 0x6f, + 0xfc, 0xe7, 0xce, 0x19, 0xdc, 0x33, 0xcb, 0x17, 0xdc, 0x18, 0xe5, 0x62, + 0xbe, 0x7c, 0x9e, 0x41, 0xbd, 0xf0, 0xf8, 0xb1, 0x7f, 0x3e, 0xb3, 0x08, + 0xd5, 0x8b, 0xfd, 0x90, 0xe7, 0x30, 0x80, 0xb1, 0x7f, 0x33, 0x6c, 0x67, + 0xf1, 0x62, 0xbe, 0x7c, 0x5c, 0x33, 0xa8, 0x23, 0x40, 0xd1, 0xff, 0x42, + 0x3e, 0xff, 0x7f, 0x21, 0xcc, 0x28, 0x2c, 0x5f, 0xd1, 0x48, 0x7c, 0x6e, + 0xd6, 0x2d, 0x19, 0xe3, 0xe4, 0x11, 0x9d, 0xfd, 0x3d, 0xf0, 0xf2, 0x4b, + 0x17, 0xff, 0xf0, 0x01, 0x1a, 0x0a, 0x2e, 0xba, 0xf5, 0x74, 0x2e, 0xba, + 0x98, 0x67, 0xe3, 0x96, 0x2e, 0xeb, 0x91, 0xa2, 0xc5, 0xc6, 0x81, 0x62, + 0xff, 0xfd, 0xf7, 0x8b, 0xef, 0xdf, 0xbf, 0xbb, 0xf3, 0x06, 0xb1, 0x7d, + 0x2e, 0x2e, 0x2c, 0x5a, 0x33, 0xae, 0xd1, 0x6f, 0x24, 0x7b, 0x8c, 0xfd, + 0x66, 0xa5, 0x5b, 0x46, 0x43, 0xcb, 0x78, 0x4d, 0x39, 0x5f, 0xcb, 0x9a, + 0x33, 0x6b, 0xdf, 0x93, 0xac, 0x5a, 0x0b, 0x17, 0xf3, 0xf7, 0x02, 0x90, + 0xd6, 0x2b, 0x47, 0x83, 0xd0, 0x4a, 0xff, 0x66, 0xbd, 0x98, 0x17, 0x16, + 0x2f, 0xff, 0xd8, 0x09, 0x06, 0xb5, 0x21, 0x19, 0xa6, 0x68, 0x2c, 0x5b, + 0xad, 0x58, 0xbf, 0x67, 0xf7, 0x93, 0xac, 0x5f, 0xfd, 0x3b, 0x49, 0x93, + 0x14, 0xf0, 0x51, 0x2c, 0x5e, 0x78, 0xec, 0x58, 0xa8, 0x1f, 0x3f, 0x92, + 0x2a, 0x34, 0x4f, 0x5b, 0x17, 0xb7, 0x24, 0x23, 0x4e, 0x2b, 0xf8, 0x5c, + 0x50, 0x90, 0xbb, 0x9f, 0x58, 0xbe, 0xe6, 0x6b, 0x65, 0x8a, 0x81, 0xbc, + 0xe0, 0xc5, 0xee, 0x49, 0xab, 0x15, 0xf3, 0x7f, 0xc2, 0x1b, 0xfd, 0xbb, + 0xeb, 0x21, 0x09, 0x58, 0xba, 0x42, 0x58, 0xbe, 0x2f, 0x14, 0xac, 0x5f, + 0xec, 0x19, 0x30, 0x27, 0xa2, 0xc5, 0x31, 0xea, 0x80, 0x86, 0xff, 0xb3, + 0x6e, 0x3e, 0x1e, 0x77, 0x58, 0xac, 0x4c, 0x77, 0xb2, 0x17, 0x34, 0x66, + 0xde, 0x10, 0xdf, 0x88, 0xc1, 0x07, 0xba, 0xc5, 0xff, 0x37, 0xbe, 0x2d, + 0xff, 0x91, 0x2c, 0x54, 0x9f, 0x44, 0x45, 0x97, 0x74, 0x82, 0xc5, 0xff, + 0xd3, 0x14, 0x84, 0x67, 0xf2, 0x26, 0xed, 0x62, 0xa2, 0x44, 0x29, 0xc8, + 0x88, 0x6a, 0xfd, 0x3a, 0x30, 0x1e, 0x58, 0xbf, 0x81, 0x1a, 0x18, 0x67, + 0xe3, 0x96, 0x2f, 0xe6, 0xdf, 0x09, 0xcd, 0x58, 0xbb, 0x0e, 0xb1, 0x4b, + 0x15, 0xf3, 0x46, 0x18, 0xbd, 0xe0, 0x67, 0xd6, 0x2f, 0xfe, 0x90, 0x1d, + 0xa1, 0xcf, 0x66, 0x1d, 0x62, 0xff, 0x8b, 0x36, 0xfb, 0x16, 0x1d, 0x62, + 0xb6, 0x4c, 0x30, 0x6a, 0x3d, 0x91, 0x7c, 0x74, 0x91, 0x2e, 0x3c, 0x4b, + 0x16, 0x8e, 0x58, 0xa8, 0x8d, 0x77, 0x06, 0x6d, 0x19, 0x1b, 0x3a, 0xc0, + 0x9e, 0xbb, 0x48, 0xeb, 0xa9, 0xac, 0xca, 0x92, 0xda, 0x12, 0xb0, 0x2e, + 0x1c, 0x60, 0x59, 0x3a, 0xd5, 0xbc, 0x61, 0x7d, 0xc3, 0x75, 0xe5, 0x3e, + 0xc4, 0xd9, 0xa8, 0x76, 0x9e, 0x1d, 0xff, 0x95, 0xbc, 0xd4, 0xb7, 0x20, + 0x46, 0x26, 0x53, 0x80, 0xfc, 0x94, 0x79, 0xe9, 0x40, 0xc2, 0x8c, 0xd8, + 0x23, 0x08, 0xe2, 0xa0, 0xe3, 0x46, 0xea, 0x7a, 0xbf, 0xc2, 0x6d, 0x43, + 0xe1, 0x32, 0xc5, 0xfb, 0xe3, 0x7f, 0x62, 0xc5, 0xff, 0xff, 0xfd, 0x3e, + 0x26, 0x01, 0x37, 0x47, 0xe8, 0x42, 0xe0, 0x65, 0x23, 0xfb, 0x43, 0x38, + 0xb1, 0x7b, 0x7e, 0x41, 0x62, 0xff, 0xc1, 0x94, 0x8f, 0xed, 0x0c, 0xe2, + 0xc5, 0xff, 0x14, 0x8f, 0xed, 0x0c, 0xe2, 0xc5, 0xfe, 0x6e, 0x8f, 0xd0, + 0x85, 0xc3, 0x0f, 0xdc, 0x33, 0xfb, 0xd9, 0xdc, 0x60, 0xd3, 0xcc, 0x73, + 0x5d, 0x14, 0x34, 0x22, 0x8a, 0x12, 0xd7, 0xff, 0x46, 0x7d, 0xb8, 0x59, + 0xef, 0x48, 0x16, 0x2f, 0xff, 0x46, 0x1d, 0xa1, 0x19, 0x9a, 0xdd, 0x9b, + 0x75, 0x48, 0xf8, 0x5f, 0xed, 0xfa, 0xdf, 0x13, 0xf7, 0xc5, 0x8b, 0xe9, + 0xed, 0xba, 0x96, 0x2e, 0xe4, 0x63, 0x1f, 0x09, 0x1d, 0xdf, 0xfe, 0x84, + 0x66, 0x74, 0x73, 0x79, 0xc9, 0x38, 0x96, 0x2f, 0xfb, 0x02, 0xce, 0x8f, + 0xe8, 0x4a, 0xc5, 0xff, 0x31, 0x0f, 0xf2, 0x7e, 0xa1, 0x2c, 0x5e, 0xd4, + 0xf1, 0x62, 0x9c, 0xf6, 0x44, 0x79, 0x7f, 0xee, 0xfd, 0x14, 0x1b, 0x5b, + 0x7c, 0x4b, 0x17, 0xfe, 0x91, 0xb9, 0x6d, 0xee, 0x66, 0xcb, 0x17, 0xf0, + 0x8b, 0xc4, 0x2d, 0x96, 0x2f, 0xf7, 0xdc, 0xc1, 0x44, 0x28, 0xf5, 0x8b, + 0xd9, 0x9b, 0xac, 0x51, 0xa7, 0xae, 0x73, 0xab, 0xf4, 0xfb, 0x99, 0xd1, + 0x62, 0xfe, 0xef, 0x86, 0x14, 0xc1, 0x62, 0xa0, 0x7b, 0x4c, 0x55, 0x7b, + 0xa0, 0xe5, 0x62, 0xfe, 0x22, 0x73, 0xfb, 0x16, 0x2f, 0x43, 0x98, 0xb1, + 0x7a, 0x3a, 0x36, 0x09, 0x62, 0xb1, 0x11, 0xec, 0x3e, 0x19, 0x67, 0x50, + 0xed, 0xfe, 0xc7, 0xe8, 0xc7, 0xeb, 0xb3, 0x56, 0x2f, 0xc6, 0xb7, 0xb0, + 0x25, 0x8b, 0xfb, 0x60, 0xe3, 0x98, 0x80, 0xb1, 0x7e, 0x73, 0xc9, 0xae, + 0xb1, 0x7f, 0xcf, 0x07, 0xf8, 0x8e, 0x77, 0x58, 0xbf, 0xec, 0x8a, 0x0d, + 0xad, 0xbe, 0x25, 0x8b, 0xa6, 0x25, 0x8b, 0xcc, 0x40, 0x23, 0xd4, 0xf1, + 0xe5, 0x4a, 0x63, 0x3a, 0x33, 0xf1, 0x44, 0x74, 0x23, 0x6d, 0x19, 0xb2, + 0xe7, 0x80, 0xe1, 0x29, 0x84, 0x3a, 0x44, 0x3a, 0x03, 0x42, 0x18, 0x0f, + 0xa5, 0x0b, 0x0e, 0x1f, 0x88, 0xf4, 0x38, 0xd0, 0xeb, 0xb5, 0xe2, 0x86, + 0x2f, 0xf4, 0xea, 0x0d, 0xff, 0xcc, 0x5b, 0xc6, 0x67, 0x47, 0xef, 0xee, + 0xb1, 0x5b, 0xbb, 0xb7, 0xe7, 0x96, 0xf9, 0x1f, 0x6b, 0x0d, 0x75, 0x2e, + 0xc8, 0xec, 0xff, 0x47, 0x69, 0xee, 0x81, 0x1d, 0xdf, 0xfe, 0x8d, 0x46, + 0x85, 0x1f, 0xb0, 0xe3, 0x63, 0x0c, 0xfc, 0x72, 0xc5, 0xc2, 0xdd, 0x62, + 0xfe, 0x6f, 0x70, 0xb9, 0xe5, 0x8b, 0xf3, 0x0b, 0xaf, 0x3b, 0x2c, 0x56, + 0xe7, 0xe8, 0x43, 0x3e, 0x2e, 0xbf, 0x16, 0x6c, 0x7f, 0x2c, 0x5f, 0xff, + 0xc2, 0x26, 0x34, 0xcf, 0x1b, 0x25, 0x0c, 0xfb, 0x9d, 0x62, 0xe7, 0xed, + 0x62, 0xff, 0xfa, 0x1b, 0x46, 0xa9, 0x8d, 0x36, 0xdf, 0x46, 0x19, 0xf8, + 0xe5, 0x8a, 0x81, 0xff, 0x00, 0x62, 0xe0, 0xf8, 0xb1, 0x7f, 0xf6, 0xdf, + 0x97, 0xf7, 0x1c, 0xbb, 0x82, 0xc5, 0xc2, 0xdd, 0x62, 0xbe, 0x7f, 0x04, + 0x33, 0xc4, 0x6b, 0xff, 0xb3, 0xcf, 0x85, 0xfc, 0xf4, 0x8d, 0x62, 0xff, + 0xde, 0x36, 0x4a, 0x19, 0xf7, 0x3a, 0xc5, 0xff, 0x1b, 0x25, 0x0c, 0xfb, + 0x9d, 0x62, 0xf8, 0x44, 0xc6, 0x98, 0x7f, 0x1e, 0x3f, 0xbf, 0x3c, 0x40, + 0x60, 0x2c, 0x5f, 0xb4, 0x07, 0xfc, 0xac, 0x51, 0xd1, 0x17, 0xf3, 0xa1, + 0x14, 0xdf, 0xb3, 0x59, 0x91, 0x2c, 0x5a, 0x32, 0x0b, 0x8e, 0x19, 0x0d, + 0x8d, 0xcb, 0xce, 0x53, 0xf8, 0x6d, 0xb4, 0x26, 0x88, 0xbb, 0x91, 0xa2, + 0x86, 0x61, 0x7e, 0xd6, 0xec, 0xdb, 0xaa, 0x4b, 0x22, 0xff, 0xcd, 0x08, + 0xcc, 0xd6, 0xec, 0xdb, 0xaa, 0x46, 0xe2, 0xd1, 0x98, 0x88, 0x73, 0x9b, + 0xd6, 0xe9, 0xa8, 0x3c, 0x64, 0xb7, 0xff, 0xcd, 0xbc, 0x66, 0xd8, 0x17, + 0x27, 0xdf, 0xc2, 0x58, 0xbf, 0xe2, 0x68, 0xce, 0x48, 0x26, 0x56, 0x2f, + 0x75, 0x9d, 0xee, 0xb1, 0x7f, 0xfb, 0x8d, 0x07, 0x35, 0xe1, 0x80, 0xe6, + 0x2c, 0x5f, 0xf9, 0x8b, 0xd0, 0xcd, 0x67, 0x59, 0x1b, 0xac, 0x5f, 0xff, + 0xec, 0xf7, 0x33, 0x98, 0x4f, 0x3c, 0x6f, 0xe0, 0xb6, 0x58, 0xb3, 0xfd, + 0x14, 0xfe, 0x48, 0xbf, 0xc5, 0x2d, 0xf8, 0x67, 0x96, 0x2b, 0x64, 0xd2, + 0xe1, 0x0f, 0x1c, 0x28, 0xbf, 0xf0, 0xdc, 0x85, 0xbe, 0x73, 0xac, 0x8d, + 0xd6, 0x2f, 0xff, 0x79, 0xfe, 0x2f, 0xb3, 0xf7, 0xc9, 0x35, 0x62, 0xa5, + 0x12, 0xd8, 0x95, 0x7d, 0xbb, 0x36, 0xea, 0x91, 0x58, 0xbf, 0xfe, 0xd6, + 0xc5, 0x3a, 0x61, 0x93, 0x6a, 0x7a, 0x2c, 0x56, 0x91, 0x04, 0x23, 0x1b, + 0xfe, 0x67, 0x83, 0x90, 0xa4, 0xeb, 0x17, 0xd2, 0x36, 0xfa, 0xc5, 0xff, + 0xf7, 0x1b, 0xec, 0xe4, 0xde, 0x9f, 0xcf, 0x16, 0x2c, 0xeb, 0x14, 0xb1, + 0x7f, 0x9e, 0x0e, 0x42, 0x93, 0xac, 0x5f, 0x89, 0x9f, 0xbd, 0xce, 0x6f, + 0x98, 0x32, 0x89, 0x1f, 0x7e, 0x22, 0xe8, 0x9b, 0xd4, 0x9f, 0x7e, 0xcd, + 0x07, 0x31, 0xeb, 0x17, 0xf3, 0x94, 0xc2, 0x7a, 0x96, 0x2f, 0x3c, 0xf9, + 0x62, 0xf1, 0x1f, 0x65, 0x8b, 0xfa, 0x74, 0x0e, 0x60, 0xd6, 0x2a, 0x51, + 0x2f, 0xa2, 0xf6, 0x1c, 0xf0, 0xf5, 0xf0, 0x87, 0x86, 0xac, 0x5e, 0x68, + 0x46, 0x75, 0xc5, 0xd9, 0x79, 0x8d, 0xc0, 0x70, 0xcc, 0xc8, 0x51, 0xee, + 0x46, 0xf1, 0x99, 0x7d, 0x07, 0x90, 0xc3, 0x8e, 0x3b, 0xad, 0x97, 0xb7, + 0x77, 0x55, 0x3c, 0xee, 0x8d, 0xfa, 0x31, 0xa2, 0xe6, 0x2c, 0x5f, 0xa3, + 0x32, 0x12, 0x05, 0x8b, 0xf9, 0xb9, 0x18, 0x5c, 0x95, 0x8a, 0x8c, 0x46, + 0x26, 0xc7, 0xb0, 0x2c, 0xd1, 0x5d, 0xbc, 0xb1, 0x7f, 0xfe, 0xd4, 0xf4, + 0x29, 0x83, 0x6e, 0xe4, 0x36, 0x25, 0x8b, 0xe7, 0xc2, 0xf2, 0xc5, 0x76, + 0x7e, 0xdf, 0x55, 0xbe, 0x6d, 0x6d, 0x18, 0xe8, 0xab, 0x68, 0x44, 0x5f, + 0xfb, 0xd9, 0x19, 0x9a, 0x7d, 0x98, 0xeb, 0x17, 0xf8, 0x3f, 0x3e, 0xa4, + 0x5d, 0x7a, 0xc5, 0xfd, 0xd6, 0xb1, 0xf5, 0x3c, 0x58, 0xbf, 0xfd, 0xd6, + 0x46, 0xfd, 0x6f, 0x31, 0xa0, 0xf9, 0xac, 0x58, 0xbf, 0xfd, 0xd6, 0x46, + 0xfd, 0x6f, 0x31, 0xa0, 0xf9, 0xac, 0x58, 0xbf, 0xee, 0x08, 0xe4, 0xfd, + 0x04, 0xcb, 0x17, 0xff, 0xe9, 0xd4, 0xb0, 0xf3, 0xc2, 0x3c, 0xea, 0x4e, + 0xb1, 0x4e, 0x88, 0xfe, 0x1d, 0xdf, 0xf3, 0x1e, 0x7f, 0x30, 0x63, 0x56, + 0x2f, 0xff, 0xbf, 0x30, 0x70, 0x6b, 0x3e, 0xc4, 0xd0, 0x58, 0xbf, 0xe7, + 0xe0, 0x27, 0xa3, 0xfa, 0x56, 0x2f, 0xfa, 0x19, 0xee, 0x36, 0xc2, 0x82, + 0xc5, 0xe6, 0xd3, 0x40, 0xfd, 0x7e, 0x75, 0x7f, 0x3c, 0x1c, 0x78, 0x75, + 0x8b, 0xff, 0xee, 0xff, 0x9b, 0xff, 0x27, 0x4d, 0x0e, 0x62, 0xc5, 0xfe, + 0xf4, 0x9e, 0x46, 0xde, 0x58, 0xa9, 0x44, 0x26, 0x28, 0xdf, 0xfd, 0x83, + 0x62, 0x91, 0xb4, 0xe6, 0x96, 0x2b, 0x74, 0xd1, 0x7e, 0x64, 0x50, 0xb1, + 0xe1, 0x0d, 0xf0, 0x38, 0x23, 0xac, 0x5f, 0xd2, 0x4d, 0xbb, 0x47, 0xac, + 0x5f, 0x3f, 0x43, 0x46, 0xb1, 0x7b, 0xa8, 0x72, 0xb1, 0x52, 0x78, 0xc2, + 0x26, 0xbc, 0x59, 0x05, 0x8b, 0xff, 0xf7, 0xf3, 0x93, 0xce, 0x37, 0xe7, + 0xbf, 0xb9, 0xd6, 0x2f, 0xe3, 0x64, 0x9b, 0x46, 0xac, 0x57, 0x68, 0x85, + 0x75, 0x6b, 0xff, 0xfd, 0xec, 0xf3, 0x8b, 0xaf, 0x29, 0x8e, 0x16, 0x3f, + 0x1f, 0x4b, 0x14, 0xc8, 0x8a, 0x11, 0x1d, 0xff, 0x16, 0x01, 0xb7, 0xd4, + 0xee, 0xb1, 0x7f, 0xb7, 0x9d, 0x3f, 0xa7, 0x75, 0x8b, 0xfc, 0x28, 0x49, + 0xc9, 0xbe, 0xb1, 0x52, 0x7d, 0x1a, 0x35, 0xa8, 0x2e, 0xb8, 0x8c, 0x8b, + 0xb3, 0x97, 0x94, 0x11, 0xa4, 0x33, 0x92, 0x7d, 0xd8, 0x04, 0x25, 0x19, + 0x5f, 0x08, 0xbd, 0x0a, 0x2b, 0xfe, 0xc0, 0xa7, 0xef, 0x85, 0xe5, 0x8b, + 0x69, 0x62, 0xff, 0xde, 0x97, 0xfb, 0x0f, 0xec, 0x4b, 0x17, 0xfe, 0x07, + 0xb3, 0xf2, 0x5e, 0x8e, 0xc5, 0x8a, 0x1a, 0x24, 0x30, 0x48, 0x47, 0xb7, + 0xe0, 0x61, 0xe7, 0x75, 0x8b, 0xfe, 0x1f, 0x1b, 0x77, 0x1b, 0x41, 0x62, + 0xff, 0x68, 0x3d, 0xcb, 0x3f, 0x8b, 0x17, 0xf0, 0x9b, 0xb8, 0xe6, 0x35, + 0x62, 0xa5, 0x19, 0x63, 0x29, 0xc3, 0xaf, 0x9a, 0xdf, 0xff, 0x49, 0xb2, + 0x52, 0x0e, 0x67, 0x24, 0x8d, 0x58, 0xbf, 0xfe, 0xfb, 0x03, 0x98, 0x4d, + 0x07, 0x1e, 0x1d, 0x62, 0xff, 0x9f, 0xdc, 0x93, 0xe8, 0x5b, 0x2c, 0x5c, + 0x72, 0x58, 0xbf, 0x8b, 0x37, 0xfb, 0xe9, 0x60, 0x65, 0xbd, 0xf6, 0xec, + 0xdb, 0xaa, 0x45, 0xc2, 0xff, 0x30, 0xe7, 0xee, 0x6c, 0xac, 0x5f, 0x43, + 0x05, 0x05, 0x8b, 0xfc, 0x77, 0xfb, 0x7d, 0xf8, 0xb1, 0x52, 0x7a, 0xcc, + 0x47, 0x7c, 0xfa, 0xfb, 0x12, 0x2a, 0x79, 0x08, 0x9b, 0xf3, 0x43, 0x77, + 0xea, 0x58, 0xbd, 0xa6, 0x1a, 0xc5, 0xf7, 0xb9, 0x20, 0x58, 0xbf, 0xef, + 0xe0, 0xe7, 0xf3, 0x02, 0x93, 0xc0, 0x61, 0xdb, 0xff, 0xdd, 0x7b, 0xea, + 0x0d, 0xfc, 0x18, 0xa7, 0x8b, 0x15, 0x05, 0x69, 0x43, 0x4f, 0x35, 0x39, + 0xd4, 0xb4, 0x7b, 0xf8, 0x6d, 0x11, 0xef, 0x1b, 0x04, 0x99, 0x7f, 0xff, + 0xe6, 0x18, 0x33, 0x3b, 0xe7, 0x7c, 0x7d, 0x6f, 0xfc, 0x1e, 0x99, 0x62, + 0xf3, 0x36, 0xeb, 0x17, 0x89, 0x8e, 0xb1, 0x6d, 0x96, 0x2e, 0xcf, 0x0c, + 0xf3, 0x18, 0x77, 0xa8, 0x72, 0xf6, 0xb0, 0x25, 0x8a, 0x81, 0xed, 0x70, + 0xf2, 0xe1, 0x01, 0x62, 0xff, 0x3e, 0x9b, 0xab, 0xaa, 0x49, 0x62, 0xfb, + 0xa8, 0x9b, 0x65, 0x8b, 0xf4, 0x9e, 0x4b, 0x75, 0x8a, 0xd2, 0x27, 0xbe, + 0x30, 0xc7, 0x1e, 0x26, 0xbf, 0xff, 0xe9, 0xdb, 0x37, 0x1b, 0x97, 0xe5, + 0xf9, 0x83, 0x6e, 0xc9, 0x62, 0xff, 0xfe, 0x92, 0xcd, 0xe4, 0x05, 0x3a, + 0x14, 0x35, 0x30, 0x58, 0xbf, 0x60, 0x5a, 0x6d, 0x96, 0x2a, 0x08, 0xea, + 0xfb, 0x31, 0x2d, 0x5f, 0xfc, 0xff, 0x96, 0x7f, 0xb9, 0xd8, 0x6b, 0x17, + 0xfe, 0x11, 0x31, 0x3e, 0x6b, 0x20, 0xb1, 0x47, 0x3f, 0xe2, 0x42, 0xbf, + 0xff, 0xfc, 0x3f, 0xe7, 0xf1, 0x8b, 0x79, 0xdf, 0x59, 0xb1, 0x37, 0xb9, + 0x20, 0x58, 0xbf, 0xff, 0xff, 0xdf, 0x90, 0x73, 0x99, 0xa2, 0x9e, 0xe1, + 0xbf, 0xde, 0x22, 0xc7, 0xd4, 0xf4, 0x98, 0x2c, 0x54, 0xa6, 0x12, 0xef, + 0x17, 0x41, 0xd6, 0x2a, 0x53, 0x63, 0xc8, 0xca, 0x8d, 0x22, 0xbf, 0xff, + 0xdf, 0x7d, 0x8e, 0xd0, 0xc1, 0x75, 0xfc, 0x6f, 0xee, 0xfc, 0x58, 0xbf, + 0xff, 0xed, 0xe4, 0x5b, 0xfd, 0xf5, 0x83, 0xe4, 0x90, 0xb7, 0x73, 0x56, + 0x2a, 0x51, 0xa5, 0x8d, 0x17, 0x86, 0xd1, 0x2c, 0x5e, 0x68, 0xe3, 0x56, + 0x28, 0x66, 0xfc, 0x03, 0xd7, 0xf0, 0x18, 0x02, 0x2d, 0xd6, 0x2f, 0xfb, + 0x66, 0x1c, 0xc0, 0xb0, 0xeb, 0x17, 0xa4, 0xfc, 0x58, 0xbc, 0xd0, 0xf3, + 0x9e, 0xb1, 0x1c, 0xdf, 0xfb, 0x82, 0x37, 0x98, 0x77, 0xfc, 0xac, 0x5e, + 0xd4, 0xfd, 0x62, 0xff, 0x49, 0xe6, 0x30, 0x20, 0x82, 0x58, 0xa7, 0x44, + 0xbe, 0x90, 0x3a, 0x87, 0x6b, 0x13, 0xa0, 0xdc, 0x85, 0xe1, 0x0a, 0xd0, + 0xc8, 0xbf, 0xb7, 0x14, 0x7f, 0xda, 0x0b, 0x17, 0xff, 0xff, 0xb2, 0x1f, + 0x68, 0x48, 0xe4, 0x9b, 0xbf, 0xe7, 0x27, 0x9c, 0x6f, 0xac, 0x54, 0xa2, + 0xa5, 0xcc, 0xef, 0xfb, 0x0d, 0x96, 0xdf, 0x53, 0xba, 0xc5, 0x40, 0xf7, + 0x37, 0x21, 0xbf, 0xce, 0x36, 0xea, 0xe9, 0x30, 0x58, 0xbe, 0x8e, 0x7f, + 0xb2, 0xc5, 0x49, 0xee, 0xc0, 0xe2, 0xfc, 0x08, 0xa0, 0xc4, 0xb1, 0x7f, + 0x16, 0xa4, 0x9a, 0x0b, 0x15, 0x87, 0xaa, 0xc5, 0x36, 0x95, 0x8a, 0xe1, + 0xb1, 0x8e, 0x20, 0xbf, 0xf8, 0xa0, 0xc3, 0x69, 0x84, 0x93, 0x2c, 0x54, + 0x9f, 0x2e, 0x12, 0x5c, 0xda, 0x58, 0xbf, 0xff, 0x8b, 0x3a, 0x3f, 0xe4, + 0xf9, 0xbc, 0xf3, 0xf8, 0x75, 0x8b, 0x8a, 0x77, 0x3f, 0x3e, 0x0b, 0xdf, + 0xff, 0xd8, 0x2d, 0xff, 0x25, 0x30, 0x61, 0xcf, 0x7a, 0x75, 0x8b, 0xff, + 0x71, 0xc8, 0x5e, 0x8e, 0x7e, 0x87, 0x58, 0xbf, 0xff, 0xf9, 0xcb, 0x0f, + 0x3a, 0xc7, 0xfc, 0x83, 0x85, 0x91, 0x41, 0xa0, 0xb1, 0x7f, 0xed, 0x4f, + 0x9d, 0xa1, 0x25, 0xb2, 0xc5, 0xa6, 0x08, 0xad, 0x76, 0xfb, 0xff, 0xb3, + 0xd9, 0xf2, 0x68, 0x09, 0xb8, 0xb1, 0x7f, 0xff, 0xfb, 0x3d, 0xcc, 0x1b, + 0x0e, 0x49, 0xbb, 0xfe, 0x72, 0x79, 0xc6, 0xfa, 0xc5, 0x3a, 0x2e, 0x49, + 0x0e, 0xff, 0xfa, 0x02, 0x98, 0x30, 0xc9, 0xbd, 0xc9, 0x02, 0xc5, 0xfd, + 0x33, 0xc9, 0xef, 0x4b, 0x15, 0x27, 0xfa, 0x04, 0xfb, 0xff, 0xc5, 0x3b, + 0x61, 0x7b, 0xed, 0x0f, 0xe2, 0xc5, 0xff, 0xfd, 0xb1, 0xc5, 0xdb, 0x7b, + 0xf3, 0xcc, 0x1b, 0x4c, 0x16, 0x2f, 0xff, 0xf1, 0xbf, 0x68, 0x60, 0xf9, + 0xfc, 0xde, 0x79, 0xfc, 0x3a, 0xc5, 0x62, 0x30, 0x19, 0x76, 0xff, 0xe1, + 0xb1, 0x00, 0x9b, 0xbd, 0x61, 0xd6, 0x2a, 0x53, 0x6e, 0x28, 0xc2, 0x44, + 0x43, 0x79, 0xca, 0x56, 0x2f, 0xf8, 0x46, 0xb1, 0xb9, 0xb6, 0x6c, 0xb1, + 0x52, 0xbe, 0x65, 0x08, 0x40, 0x0e, 0x30, 0xc7, 0x84, 0x9c, 0x79, 0x69, + 0xd6, 0xff, 0x0f, 0x12, 0x87, 0x07, 0x21, 0x3d, 0xe8, 0xe3, 0xfa, 0x1a, + 0xc7, 0x0d, 0xdf, 0xfe, 0x2c, 0x78, 0x33, 0xef, 0x9a, 0x68, 0x2c, 0x5f, + 0xf6, 0x1d, 0xc8, 0x0f, 0xf1, 0x2c, 0x5f, 0xa1, 0xcf, 0xb8, 0x16, 0x2f, + 0xe9, 0x1e, 0x13, 0xca, 0xc5, 0xfe, 0x7e, 0xf9, 0x11, 0x30, 0x6b, 0x17, + 0xff, 0xf9, 0xfb, 0x08, 0x7f, 0x9d, 0x77, 0xbb, 0xf7, 0xee, 0x60, 0x4b, + 0x15, 0xa4, 0x64, 0x91, 0x5f, 0x8d, 0xaf, 0xfd, 0x9c, 0xe0, 0x8a, 0x28, + 0x4c, 0x7a, 0xc5, 0xff, 0x7b, 0x7f, 0xbe, 0x87, 0x9b, 0x2c, 0x5e, 0x79, + 0x82, 0xc5, 0x31, 0xec, 0x11, 0xe5, 0xcc, 0x6a, 0xc5, 0xf1, 0x16, 0x7b, + 0x13, 0x02, 0xd1, 0x7f, 0xe1, 0x37, 0x1c, 0x41, 0x7f, 0x66, 0x76, 0x3c, + 0x25, 0x8b, 0xfd, 0x25, 0x27, 0x7c, 0x09, 0x62, 0xfd, 0xf7, 0xd3, 0x71, + 0x62, 0xfe, 0x1c, 0xbf, 0xe4, 0xeb, 0x17, 0xe1, 0xcc, 0x7b, 0x69, 0x62, + 0xf4, 0x90, 0x30, 0xf6, 0x18, 0xb6, 0xbb, 0x56, 0xba, 0xf1, 0xfa, 0x69, + 0x6b, 0xe5, 0xbe, 0x32, 0xea, 0x84, 0x05, 0x6c, 0xaf, 0xf3, 0x25, 0xca, + 0xdf, 0xe9, 0x2d, 0xd9, 0xf6, 0xc5, 0x8b, 0xb7, 0x95, 0x8a, 0x34, 0xf2, + 0xc8, 0xce, 0xfe, 0xe9, 0x25, 0xbb, 0x71, 0x62, 0xff, 0xfc, 0x69, 0x60, + 0x39, 0xfc, 0xde, 0x79, 0xfc, 0x3a, 0xc5, 0xff, 0xa6, 0x18, 0x3c, 0x86, + 0x10, 0x16, 0x2b, 0x11, 0x28, 0x4a, 0xf7, 0xe6, 0x07, 0x30, 0x96, 0x2a, + 0x53, 0x0c, 0x78, 0x62, 0x70, 0x86, 0xff, 0xff, 0x3f, 0xa4, 0x98, 0xf8, + 0x76, 0x87, 0x27, 0xd2, 0x35, 0x8a, 0x74, 0xf0, 0x3d, 0x19, 0x77, 0x43, + 0x4b, 0xff, 0xdf, 0x9d, 0x13, 0x96, 0x7b, 0xd9, 0xc5, 0x8b, 0xe0, 0x01, + 0xfb, 0x58, 0xbf, 0xc2, 0xdd, 0x87, 0xa1, 0x6c, 0xb1, 0x7f, 0x1a, 0xfe, + 0xe4, 0x9d, 0x62, 0xff, 0xfb, 0x1f, 0xf2, 0x0e, 0x16, 0x45, 0x06, 0x82, + 0xc5, 0xf6, 0xfa, 0x9d, 0xd6, 0x2f, 0x6f, 0xf7, 0xc4, 0x6d, 0x1a, 0x6f, + 0xa2, 0xf6, 0x4f, 0xbf, 0x08, 0xd2, 0xc0, 0x2c, 0x5f, 0xff, 0xcf, 0xdc, + 0x27, 0xdc, 0x72, 0x86, 0x0d, 0xa6, 0x0b, 0x17, 0xfc, 0xda, 0x34, 0xb3, + 0xdf, 0x75, 0x8b, 0xfe, 0xe6, 0xd8, 0x17, 0xb9, 0x26, 0xac, 0x5f, 0xf4, + 0x9f, 0xed, 0xdc, 0x1f, 0x65, 0x8a, 0x73, 0xf8, 0xd1, 0xed, 0xff, 0xff, + 0xc2, 0x2d, 0xa5, 0xbf, 0x27, 0xc2, 0x93, 0x93, 0x7b, 0x92, 0x05, 0x8a, + 0x1a, 0xb5, 0x87, 0x48, 0xd4, 0x3f, 0x8e, 0x9d, 0xf2, 0x92, 0x5a, 0xf4, + 0x2c, 0x7a, 0x88, 0x6f, 0xf7, 0xdf, 0xbf, 0x6d, 0x81, 0x2c, 0x5f, 0xfb, + 0x3c, 0xdd, 0xe4, 0x3f, 0x3a, 0x58, 0xbf, 0xff, 0xf9, 0xfd, 0x87, 0xe3, + 0x43, 0x4f, 0xc9, 0x2d, 0x9b, 0xcf, 0x86, 0xac, 0x5f, 0xe7, 0x35, 0xff, + 0xbb, 0xf1, 0x62, 0xfe, 0x67, 0x83, 0x9b, 0x2b, 0x16, 0x98, 0x1f, 0x17, + 0xcd, 0x6f, 0xff, 0xff, 0xe2, 0x03, 0x10, 0x39, 0x87, 0x6f, 0xe0, 0xd9, + 0xca, 0x7e, 0xcf, 0x07, 0x1a, 0xc5, 0xff, 0xff, 0x9b, 0x63, 0xbf, 0x30, + 0x6c, 0xe5, 0x3f, 0x67, 0x83, 0x8d, 0x62, 0xfe, 0x7f, 0xb7, 0xdf, 0x8b, + 0x17, 0xbb, 0x84, 0xac, 0x5d, 0x00, 0x2c, 0x5f, 0xc4, 0x28, 0x7d, 0xa1, + 0x86, 0xd9, 0xc7, 0xaf, 0xfe, 0x14, 0x09, 0xe1, 0x3e, 0x21, 0x41, 0x62, + 0xfd, 0x3c, 0x01, 0xfc, 0xb1, 0x4e, 0x7d, 0xbf, 0x44, 0xa8, 0x2b, 0x18, + 0x1c, 0x34, 0xdc, 0x9f, 0x50, 0x83, 0x3b, 0x4f, 0x18, 0xfd, 0x0a, 0xeb, + 0x6e, 0xb1, 0x77, 0x3b, 0x58, 0xbf, 0xb4, 0x01, 0xe0, 0x38, 0xb1, 0x52, + 0xc8, 0x6b, 0xc9, 0x72, 0x1b, 0xbf, 0x39, 0xbb, 0x4b, 0x57, 0x03, 0xa7, + 0x84, 0xc4, 0x33, 0x7e, 0xfe, 0x16, 0x6e, 0xb1, 0x71, 0x79, 0x62, 0xa0, + 0x6f, 0xd8, 0xa2, 0xf4, 0x3f, 0xe5, 0x8a, 0x73, 0x7d, 0xf2, 0x0b, 0xee, + 0xff, 0x3b, 0xac, 0x5b, 0xf2, 0x78, 0xac, 0x41, 0x7f, 0x9b, 0x93, 0xbc, + 0x96, 0xcb, 0x16, 0xe2, 0xc5, 0xff, 0x9c, 0x1c, 0xd4, 0xbc, 0x1b, 0x8b, + 0x15, 0xb1, 0xe8, 0x10, 0x95, 0xff, 0xe0, 0x9b, 0x52, 0xe7, 0xc1, 0xcc, + 0x25, 0x62, 0xf8, 0x0c, 0xda, 0x58, 0xb3, 0x40, 0xfa, 0xfb, 0x49, 0xac, + 0x4d, 0x7c, 0xd2, 0x67, 0x84, 0x27, 0x21, 0x1b, 0x7c, 0x72, 0x61, 0xac, + 0x5e, 0x7d, 0xba, 0xf5, 0x8b, 0xf3, 0x9c, 0x9a, 0x0b, 0x17, 0x9f, 0xbe, + 0x2c, 0x5c, 0xde, 0x58, 0xb9, 0xe7, 0x63, 0x6b, 0xc1, 0xeb, 0xff, 0xbd, + 0xfc, 0xe9, 0xf7, 0x3e, 0x0b, 0xaf, 0x58, 0xa7, 0x4c, 0x66, 0x3c, 0x8b, + 0x44, 0x7f, 0x5c, 0x62, 0xcb, 0xf7, 0x3d, 0xf9, 0x09, 0x62, 0xfe, 0x37, + 0x59, 0xe6, 0xed, 0x62, 0xcd, 0xd9, 0xed, 0x68, 0xaa, 0xff, 0xe1, 0x34, + 0x7b, 0xed, 0x9f, 0x7e, 0xf8, 0xb1, 0x7f, 0xa6, 0x26, 0xf7, 0xd8, 0x0b, + 0x17, 0xfd, 0x0c, 0xf6, 0x6b, 0x79, 0xc5, 0x8b, 0xff, 0xdd, 0xfc, 0x47, + 0xc1, 0x75, 0xef, 0xf6, 0x3a, 0xc5, 0x76, 0x88, 0xa6, 0x39, 0xb4, 0x67, + 0x58, 0xec, 0xf5, 0x63, 0x43, 0xa8, 0xd8, 0xcf, 0xae, 0x2c, 0x4c, 0xf2, + 0xc6, 0xd0, 0xac, 0x84, 0x32, 0x07, 0x0f, 0xac, 0x97, 0x0b, 0xbc, 0x21, + 0x3b, 0x8c, 0x55, 0xe1, 0x81, 0x14, 0x64, 0xda, 0x94, 0x20, 0x78, 0xc2, + 0x3f, 0x28, 0x01, 0xa9, 0x0f, 0xa0, 0x86, 0x91, 0x4e, 0x22, 0x72, 0x95, + 0x45, 0xe9, 0x54, 0x22, 0x8d, 0x80, 0x28, 0x53, 0x47, 0x14, 0x06, 0x93, + 0xd5, 0x0b, 0xeb, 0xff, 0xe8, 0xcd, 0x39, 0xe6, 0x3e, 0x31, 0x9f, 0x42, + 0x8f, 0x58, 0xb3, 0x41, 0x53, 0x07, 0xe5, 0x02, 0x5f, 0xf8, 0x47, 0x8c, + 0xe4, 0x97, 0xb3, 0x4b, 0x17, 0x74, 0x75, 0x8b, 0xff, 0xa7, 0x8f, 0xd3, + 0x93, 0x07, 0xf3, 0x2c, 0x5f, 0xfa, 0x7d, 0x3d, 0x24, 0xb7, 0x6e, 0x2c, + 0x5e, 0xcf, 0xc6, 0x3a, 0x27, 0x98, 0x67, 0x88, 0xb7, 0xfc, 0x3c, 0x8c, + 0x9d, 0x3f, 0xc4, 0xb1, 0x7f, 0xe9, 0x8c, 0xea, 0xce, 0xe1, 0xf9, 0xe2, + 0xc5, 0xff, 0xfd, 0xc8, 0xc3, 0xe6, 0xf2, 0xfd, 0x18, 0x85, 0xbe, 0x71, + 0x62, 0x86, 0x8a, 0x72, 0x46, 0xb4, 0x66, 0xee, 0xe4, 0x41, 0xd0, 0x4f, + 0x6d, 0x9d, 0xf8, 0x63, 0xe8, 0x70, 0x09, 0x0b, 0xa4, 0x38, 0xef, 0x49, + 0x1a, 0xb1, 0x7f, 0xd0, 0x8c, 0xcd, 0x6e, 0xcd, 0xba, 0xa4, 0x3b, 0x2d, + 0x19, 0xf3, 0xe8, 0x61, 0xdb, 0xff, 0xe1, 0x4f, 0x70, 0x73, 0x85, 0x84, + 0x3f, 0xca, 0xc5, 0xff, 0xff, 0xc7, 0x9d, 0xf7, 0xfb, 0xc5, 0xf7, 0x21, + 0xb6, 0xa4, 0xd3, 0x45, 0xb2, 0xc5, 0xc2, 0x0d, 0x62, 0xf8, 0x99, 0xbb, + 0x58, 0xbe, 0xef, 0xce, 0x12, 0xc5, 0x49, 0xe3, 0x9c, 0x8a, 0xd1, 0x83, + 0x4d, 0x2b, 0x14, 0x4e, 0xf0, 0x1b, 0x05, 0xff, 0xa6, 0x11, 0x85, 0x91, + 0x7d, 0xfc, 0xb1, 0x5b, 0x22, 0x24, 0x91, 0xef, 0xff, 0xf3, 0x02, 0x30, + 0x39, 0xdb, 0x3d, 0x24, 0xe0, 0xce, 0xfc, 0xb1, 0x7e, 0xe3, 0xf4, 0xff, + 0x45, 0x8b, 0x8b, 0x8b, 0x17, 0xdf, 0xc8, 0x46, 0x49, 0xe2, 0x31, 0x6d, + 0x62, 0x60, 0xd1, 0x11, 0xfa, 0x15, 0x36, 0x35, 0x62, 0xe3, 0x06, 0xb1, + 0x51, 0xb9, 0xac, 0xeb, 0x44, 0xef, 0xfb, 0xad, 0x8e, 0xc3, 0x5f, 0xc5, + 0x2b, 0x17, 0xf4, 0x6c, 0x53, 0xbe, 0x12, 0xc5, 0x84, 0xb1, 0x7f, 0xb2, + 0x12, 0x6b, 0x71, 0xd6, 0x2f, 0xe2, 0x7d, 0xe7, 0x09, 0x62, 0xdf, 0x58, + 0xa8, 0xdd, 0x10, 0x71, 0xa0, 0x94, 0x6c, 0x66, 0x22, 0xcb, 0xfb, 0xad, + 0x2c, 0xfb, 0x79, 0x62, 0xff, 0xdd, 0x73, 0xae, 0x7f, 0x36, 0xcc, 0x23, + 0x56, 0x2c, 0x12, 0xc5, 0xf6, 0xff, 0x14, 0x7a, 0xc5, 0xf6, 0x1f, 0x09, + 0x62, 0xec, 0xfa, 0xc5, 0x0c, 0xdc, 0x78, 0x86, 0x96, 0x29, 0xcd, 0x69, + 0x10, 0xdf, 0xee, 0x61, 0x66, 0x9b, 0xcb, 0x17, 0x9c, 0x80, 0xb1, 0x5c, + 0x3c, 0xee, 0x86, 0x57, 0x7f, 0x16, 0x2f, 0xce, 0x31, 0x16, 0x2c, 0x5f, + 0xb0, 0x9c, 0x01, 0xac, 0x54, 0x9f, 0x34, 0x05, 0xf8, 0x4f, 0x7b, 0x35, + 0x2b, 0x17, 0x87, 0x30, 0x58, 0xbf, 0x0a, 0x60, 0xda, 0x58, 0xba, 0x49, + 0x8f, 0x16, 0x38, 0x76, 0xff, 0x7e, 0x76, 0xd4, 0xe0, 0xd6, 0x2e, 0xcd, + 0x96, 0x2f, 0x75, 0x0e, 0x56, 0x2a, 0x4f, 0xb0, 0x8d, 0x04, 0x31, 0x7f, + 0xed, 0x19, 0x9e, 0xcf, 0xce, 0x80, 0xb1, 0x7f, 0xff, 0xe6, 0x7d, 0xf0, + 0x8c, 0x86, 0x73, 0xd9, 0xf9, 0x2f, 0x7d, 0xd6, 0x2c, 0xeb, 0x14, 0xe8, + 0xbc, 0xfa, 0x03, 0x35, 0xdf, 0x4c, 0x27, 0x4b, 0x17, 0xff, 0xe8, 0x38, + 0xfe, 0xfd, 0x0c, 0xc1, 0xe9, 0xc5, 0xba, 0xc5, 0xed, 0x4e, 0x96, 0x2e, + 0x93, 0xac, 0x54, 0x9b, 0x4d, 0x0e, 0xd4, 0x6c, 0xb9, 0x4f, 0x22, 0x70, + 0x84, 0x6e, 0x36, 0xbc, 0x22, 0xb4, 0x5c, 0x76, 0x1f, 0xc2, 0x68, 0xa1, + 0xd3, 0xc2, 0xef, 0x11, 0x07, 0x08, 0xeb, 0xff, 0xda, 0xf0, 0x1c, 0xa1, + 0xc9, 0xe9, 0x31, 0xeb, 0x17, 0xa2, 0x9d, 0x96, 0x2f, 0xa4, 0xbd, 0xc5, + 0x8b, 0x05, 0x27, 0x83, 0xc1, 0xfa, 0x94, 0x5c, 0x64, 0x24, 0x2e, 0x2e, + 0x2c, 0x5f, 0xfb, 0x9e, 0xcf, 0xc9, 0x7b, 0xee, 0xb1, 0x7f, 0xc2, 0x3f, + 0xf3, 0xc2, 0x6f, 0x2c, 0x5f, 0xdc, 0x98, 0x99, 0xb4, 0xb1, 0x5c, 0x3e, + 0x8f, 0x1d, 0x5f, 0xf4, 0xe7, 0x9d, 0xb6, 0x9d, 0x2c, 0x58, 0xeb, 0x16, + 0x3a, 0xc5, 0x75, 0xa6, 0x90, 0x31, 0x2b, 0xff, 0xf0, 0xf3, 0x46, 0x61, + 0xc5, 0x3a, 0xd3, 0x8b, 0x75, 0x8a, 0x82, 0x77, 0x58, 0x2e, 0xf0, 0xa6, + 0x01, 0x17, 0x97, 0x04, 0x4f, 0x77, 0x59, 0xc5, 0x8b, 0xf8, 0x05, 0x9d, + 0xfb, 0x16, 0x2e, 0xda, 0x3d, 0x62, 0xfd, 0x9c, 0x6d, 0x1a, 0xb1, 0x7f, + 0xf7, 0x49, 0x1f, 0xb2, 0x5f, 0xd3, 0x12, 0xc5, 0xf1, 0xbf, 0xc0, 0x2c, + 0x5f, 0xcc, 0x16, 0x7a, 0x77, 0x58, 0xa6, 0x3d, 0x32, 0x24, 0xbe, 0x9d, + 0xe7, 0xa2, 0xc5, 0xff, 0xff, 0x4e, 0x80, 0x29, 0xcc, 0xfe, 0xef, 0x25, + 0x39, 0xf1, 0x2c, 0x59, 0xb6, 0x44, 0x49, 0xa4, 0xb7, 0xf1, 0xf3, 0xdc, + 0x0f, 0x8b, 0x17, 0xb4, 0xc1, 0xac, 0x5c, 0x40, 0xc3, 0xce, 0x63, 0x0b, + 0x3a, 0xc5, 0xff, 0xd3, 0xe3, 0x3d, 0xfc, 0x26, 0xd1, 0xab, 0x16, 0x9d, + 0x1e, 0xbf, 0x84, 0x6f, 0xf3, 0x6a, 0x0e, 0x42, 0xd9, 0x62, 0xa3, 0x45, + 0x64, 0xf2, 0x3b, 0xb1, 0x76, 0x0e, 0x39, 0x4e, 0xa1, 0x33, 0xf8, 0x54, + 0xb3, 0xc1, 0x42, 0x08, 0x44, 0xf7, 0xfe, 0x07, 0x33, 0xd9, 0x11, 0x49, + 0xd6, 0x2f, 0xff, 0x18, 0x58, 0xfa, 0x7d, 0x98, 0xe7, 0x75, 0x8b, 0xff, + 0xf1, 0x67, 0x3e, 0xcf, 0xe9, 0xf7, 0x36, 0xc0, 0x96, 0x2b, 0xe8, 0xa0, + 0xe8, 0x95, 0x7f, 0xff, 0xf7, 0xd8, 0x64, 0xc6, 0x73, 0xf3, 0xc3, 0x04, + 0xc6, 0x43, 0x3a, 0x4a, 0xc5, 0xfd, 0x8e, 0x6e, 0xb3, 0x8b, 0x17, 0xf8, + 0x7f, 0x63, 0x8a, 0x78, 0xb1, 0x7e, 0x63, 0x8a, 0x78, 0xb1, 0x63, 0x4c, + 0x44, 0x56, 0x17, 0x7c, 0xd2, 0xbe, 0x99, 0xb9, 0x46, 0x01, 0x7f, 0xf8, + 0xb0, 0xdf, 0xb4, 0x3e, 0x13, 0x06, 0x75, 0x8a, 0x93, 0xf6, 0xc2, 0x9a, + 0x95, 0x5a, 0x2f, 0x0d, 0xff, 0xc7, 0xa5, 0x7f, 0xef, 0xe6, 0xf9, 0xaf, + 0x33, 0x1a, 0xb1, 0x7f, 0xe7, 0xd1, 0x9c, 0x2c, 0x3c, 0xee, 0xb1, 0x7f, + 0x85, 0xe7, 0x6e, 0x8d, 0x05, 0x8b, 0xfe, 0xc0, 0x7d, 0xc0, 0x42, 0xf2, + 0xc5, 0xfe, 0x29, 0x01, 0x9f, 0x63, 0xac, 0x5f, 0xcd, 0xd0, 0x78, 0x46, + 0xac, 0x51, 0x23, 0x4b, 0x86, 0xbe, 0x39, 0x0c, 0xd2, 0xff, 0xff, 0xfe, + 0x72, 0x93, 0x32, 0x1f, 0x9f, 0x71, 0xf9, 0x84, 0x66, 0x13, 0xb1, 0xf0, + 0xeb, 0x15, 0x28, 0xc2, 0xc3, 0xdb, 0xff, 0xff, 0xfe, 0xfc, 0xeb, 0x6c, + 0x1b, 0xfb, 0x93, 0xb4, 0xeb, 0x07, 0x8f, 0x25, 0x9d, 0x1f, 0x4c, 0xb1, + 0x7f, 0xff, 0xe9, 0x2d, 0xdb, 0xcd, 0xd8, 0x0c, 0xc2, 0x79, 0x17, 0xff, + 0x2b, 0x15, 0x04, 0x7f, 0x82, 0x12, 0x77, 0xec, 0x1f, 0xd8, 0xeb, 0x17, + 0xff, 0xe0, 0x37, 0x1b, 0x3b, 0xf6, 0x42, 0x41, 0xcc, 0x58, 0xbf, 0xe1, + 0x40, 0xcc, 0x72, 0x93, 0xac, 0x5f, 0xff, 0x16, 0x6c, 0xfb, 0x99, 0xc9, + 0x3b, 0x77, 0xe5, 0x8a, 0x1a, 0x61, 0x3d, 0x94, 0x12, 0xaf, 0x8e, 0x6f, + 0xee, 0x41, 0xf7, 0x6d, 0x2c, 0x5e, 0x66, 0xdd, 0x52, 0x50, 0x97, 0xf1, + 0xbc, 0xfc, 0x97, 0x96, 0x2f, 0xff, 0x7b, 0xf8, 0x37, 0xe6, 0x10, 0x24, + 0xeb, 0x17, 0xff, 0x9f, 0xa6, 0x39, 0x66, 0xa7, 0x79, 0xd2, 0xc5, 0x8e, + 0xb1, 0x6f, 0x11, 0xee, 0x09, 0x2a, 0x9d, 0x19, 0x82, 0x85, 0x2d, 0xff, + 0xfb, 0x1f, 0xa1, 0x93, 0xa3, 0x30, 0x66, 0x60, 0x89, 0x62, 0xb1, 0x10, + 0x0e, 0x4f, 0x7f, 0x98, 0x13, 0x17, 0xc4, 0x05, 0x8a, 0x95, 0x45, 0x5b, + 0x97, 0xb9, 0x56, 0xa3, 0x7b, 0x11, 0x0d, 0xfa, 0x28, 0x0b, 0xb8, 0x2c, 0x5f, 0xff, 0xff, 0x8c, 0xc2, 0x76, 0xf4, 0xee, 0xfa, 0xd9, 0x8c, 0xcd, 0x6b, 0x05, 0xe1, 0x1d, 0x62, 0xa5, 0x16, 0x20, 0x2c, 0xbf, 0x7d, 0xe4, 0xbc, 0xb1, 0x7f, 0xb8, 0x67, 0x00, 0xd9, 0x12, 0xc5, 0x68, 0xf7, 0x40, - 0x4f, 0x7f, 0xfb, 0x1e, 0x02, 0xd6, 0x7f, 0xf3, 0x91, 0xeb, 0x17, 0xf7, - 0x73, 0x10, 0xc3, 0xe9, 0x62, 0x9d, 0x14, 0x3f, 0x22, 0x64, 0xcb, 0xfc, - 0x7e, 0x3e, 0x76, 0x6d, 0x2c, 0x5d, 0x83, 0x58, 0xbf, 0xff, 0x67, 0xf0, - 0xd3, 0x30, 0x66, 0x38, 0x80, 0x09, 0x58, 0xbe, 0x73, 0x5b, 0x75, 0x8b, - 0xff, 0xec, 0x39, 0x84, 0x2e, 0x19, 0xcc, 0xd3, 0x79, 0x62, 0xff, 0xe1, - 0x1b, 0xa7, 0x9f, 0x45, 0x06, 0x82, 0xc5, 0x6e, 0x8b, 0xde, 0x12, 0x79, - 0x4a, 0x99, 0x39, 0x22, 0x35, 0xf0, 0xb8, 0xa3, 0x15, 0xbe, 0xd6, 0xe2, - 0x02, 0xc5, 0xfd, 0x84, 0xda, 0xd3, 0xac, 0x53, 0x9e, 0x8f, 0xc9, 0x6f, - 0xd2, 0x42, 0x6d, 0x96, 0x2f, 0xf8, 0xa0, 0xe0, 0x3c, 0xf5, 0x05, 0x8b, - 0xff, 0xba, 0x2c, 0xf7, 0x5b, 0x8a, 0x75, 0xc5, 0x8a, 0xc4, 0x41, 0x31, - 0xd5, 0x62, 0x3b, 0x38, 0x42, 0x28, 0x55, 0x5f, 0x6c, 0x53, 0xb2, 0xc5, - 0xff, 0xda, 0x7f, 0x16, 0x1a, 0x63, 0xf6, 0x75, 0x8b, 0xff, 0x60, 0xb7, - 0xfb, 0x8b, 0x79, 0xd2, 0xc5, 0xff, 0xf3, 0xea, 0x60, 0x60, 0xdc, 0x8d, - 0xd3, 0x84, 0xb1, 0x52, 0x8f, 0xe7, 0x24, 0xf2, 0x3c, 0x72, 0x0d, 0xff, - 0xfd, 0xb8, 0xa6, 0x3c, 0xcc, 0x1f, 0xe4, 0xb7, 0x32, 0x74, 0xb1, 0x7f, - 0xf0, 0x46, 0x67, 0x67, 0xf4, 0xe1, 0x41, 0x62, 0xff, 0xd9, 0xf6, 0xf0, - 0xa7, 0xec, 0x75, 0x8a, 0x94, 0x42, 0x89, 0x1e, 0xfd, 0x9b, 0xb1, 0x1a, - 0xb1, 0x50, 0x66, 0xd6, 0x8c, 0xec, 0xd4, 0x0d, 0xe1, 0xb3, 0xd4, 0x66, - 0x8f, 0x19, 0x8e, 0xa3, 0xf3, 0x3c, 0x60, 0x1f, 0x8c, 0x80, 0xa3, 0xc0, - 0xe4, 0x6f, 0xfe, 0x8c, 0xc8, 0x47, 0xdd, 0xa1, 0xce, 0x19, 0x15, 0xff, - 0x9c, 0xc6, 0x7d, 0x64, 0x4c, 0x35, 0x8b, 0x9a, 0x56, 0x28, 0x67, 0xab, - 0x1e, 0x7f, 0x6c, 0x58, 0xbc, 0x63, 0x81, 0x62, 0xff, 0xf1, 0xe7, 0x73, - 0x37, 0xfb, 0xf7, 0x49, 0xe5, 0x62, 0xb0, 0xfb, 0x9c, 0x7a, 0xff, 0xe1, - 0x36, 0xdc, 0xc7, 0xdf, 0x7c, 0xec, 0xb1, 0x50, 0x47, 0x47, 0xdf, 0xc8, - 0x82, 0xf7, 0xbe, 0x75, 0x8b, 0xf8, 0x18, 0x66, 0x0f, 0x65, 0x8b, 0x78, - 0xc3, 0xce, 0x71, 0xeb, 0xf9, 0xf4, 0xdb, 0xb9, 0x2c, 0x56, 0x1e, 0xaf, - 0x8a, 0x2f, 0xff, 0xf4, 0xe8, 0xd3, 0x38, 0x42, 0xcf, 0x4c, 0x1c, 0x7f, - 0x75, 0x8a, 0x82, 0x20, 0xf8, 0x43, 0x7c, 0x76, 0x6d, 0xd6, 0x2f, 0x03, - 0x98, 0xb1, 0x7f, 0xb8, 0x28, 0x98, 0x6d, 0x12, 0xc5, 0xfb, 0xc0, 0x0c, - 0xa0, 0xb1, 0x7f, 0xfe, 0x09, 0xbb, 0xb8, 0xfa, 0x8b, 0x92, 0x76, 0xeb, - 0xcb, 0x14, 0xc8, 0x86, 0xe1, 0x55, 0xfd, 0x3b, 0xb9, 0x4c, 0x16, 0x2d, - 0x1c, 0xb1, 0x7f, 0x7b, 0x36, 0x3c, 0xee, 0xb1, 0x5b, 0x27, 0x21, 0x02, - 0x3e, 0x87, 0x62, 0x85, 0xe1, 0xc8, 0x80, 0x5b, 0xe1, 0x5b, 0xf1, 0x6c, - 0x09, 0x0d, 0x62, 0xfe, 0x84, 0x7c, 0xfa, 0x49, 0x62, 0xb0, 0xf6, 0xbb, - 0x8a, 0xaf, 0xd1, 0xe7, 0x97, 0xd2, 0xc5, 0xf6, 0x1c, 0x39, 0x58, 0xbd, - 0xdf, 0xc7, 0x3a, 0xc5, 0x11, 0xe4, 0x08, 0x8e, 0xa5, 0x12, 0x8e, 0xe7, - 0x74, 0xf1, 0x62, 0xa5, 0x1e, 0x10, 0x85, 0xc0, 0x08, 0x6f, 0xd0, 0x29, - 0x39, 0xab, 0x17, 0xff, 0x1f, 0x34, 0x58, 0xfd, 0x9f, 0x4c, 0xb1, 0x7f, - 0x3e, 0xee, 0x3d, 0xce, 0xb1, 0x5d, 0x22, 0x75, 0x8a, 0x7c, 0x89, 0x7f, - 0xfe, 0x7d, 0x19, 0x9e, 0x14, 0xe6, 0xdf, 0xc7, 0x82, 0xc5, 0xff, 0xf7, - 0x40, 0x92, 0xf6, 0x67, 0x5e, 0x9d, 0xe5, 0x62, 0xfa, 0x7c, 0x1c, 0x16, - 0x2f, 0xfc, 0x59, 0x17, 0xbf, 0x9a, 0x7e, 0x2c, 0x5f, 0xf8, 0xe6, 0x1d, - 0xbc, 0x67, 0xfd, 0xa5, 0x8b, 0xfd, 0x27, 0xc7, 0xd0, 0xa3, 0xd6, 0x29, - 0x8f, 0xe4, 0x48, 0x75, 0x29, 0xa7, 0x0d, 0x47, 0xe4, 0x85, 0x0b, 0x8b, - 0xf8, 0xe2, 0x6d, 0x9f, 0x65, 0x8b, 0xff, 0x85, 0x08, 0x49, 0x87, 0x71, - 0xe7, 0xd6, 0x2f, 0x89, 0xce, 0xeb, 0x15, 0x28, 0x97, 0xc3, 0x0e, 0x91, - 0xaf, 0x6d, 0x81, 0x2c, 0x5e, 0xcd, 0x7d, 0x62, 0xd3, 0x1b, 0x1b, 0xcd, - 0xc7, 0xef, 0xdc, 0xcd, 0xfe, 0xeb, 0x17, 0xd1, 0xc2, 0xee, 0x95, 0x8a, - 0x95, 0x72, 0xa3, 0x30, 0xc8, 0xe9, 0x1e, 0x1b, 0x1a, 0x6b, 0x62, 0xc1, - 0x14, 0xdf, 0xb3, 0x0d, 0x9d, 0x2c, 0x5f, 0x9b, 0xe6, 0x0e, 0x56, 0x2f, - 0xfb, 0x3e, 0xc7, 0xf0, 0x9b, 0xcb, 0x14, 0x74, 0x45, 0x78, 0xa2, 0x38, - 0xa6, 0xff, 0xbd, 0xc0, 0xf8, 0xdd, 0x43, 0x16, 0x2e, 0x17, 0xd6, 0x2f, - 0xe8, 0x38, 0x03, 0xf4, 0xac, 0x5f, 0xe6, 0x81, 0x9c, 0x10, 0x19, 0x62, - 0xfa, 0x7f, 0x3b, 0x2c, 0x59, 0xc6, 0x7b, 0x1f, 0x35, 0xa9, 0x4c, 0xd7, - 0x0c, 0xce, 0x78, 0xc3, 0x02, 0x84, 0x3d, 0xfb, 0x8f, 0xfc, 0x1a, 0xc5, - 0xfa, 0x13, 0xec, 0xd9, 0x62, 0xa3, 0xcf, 0x47, 0x45, 0x17, 0xa7, 0x9b, - 0x2c, 0x5f, 0xc4, 0xdd, 0x7a, 0x49, 0x62, 0xee, 0xbc, 0xb1, 0x77, 0xb1, - 0x62, 0xa4, 0xd8, 0x74, 0x33, 0x7f, 0x71, 0xcb, 0x7f, 0xca, 0xc5, 0x62, - 0x3b, 0xf7, 0x25, 0x71, 0xed, 0x2e, 0xf8, 0x86, 0xfd, 0x0e, 0x13, 0x01, - 0x62, 0xf4, 0x73, 0xfd, 0x62, 0xba, 0x3c, 0x87, 0x28, 0xbf, 0xef, 0x73, - 0x59, 0x17, 0xdc, 0xd5, 0x8b, 0xee, 0xe2, 0x68, 0x2c, 0x5c, 0x2d, 0x2c, - 0x57, 0xcd, 0xef, 0x09, 0x6b, 0x11, 0x35, 0xe7, 0x9b, 0x8b, 0xeb, 0x17, - 0xd0, 0x60, 0xe2, 0x58, 0xbf, 0xff, 0xdc, 0x71, 0x77, 0xff, 0x73, 0x33, - 0xaf, 0x7c, 0x3e, 0x6d, 0x2b, 0x17, 0xe8, 0x48, 0x39, 0x8b, 0x17, 0xfe, - 0xc3, 0x39, 0xe2, 0xc0, 0x47, 0x62, 0xc5, 0xec, 0xdc, 0xcc, 0x3e, 0xaf, - 0x94, 0x5b, 0xce, 0x98, 0x4f, 0x21, 0xab, 0x7f, 0xff, 0x3f, 0x01, 0x90, - 0x29, 0x03, 0x7f, 0xa8, 0x67, 0x96, 0x2f, 0xfc, 0xfa, 0xd3, 0x41, 0xb7, - 0x17, 0x4b, 0x17, 0xff, 0x98, 0x79, 0xda, 0x7f, 0x9a, 0xd3, 0xf6, 0x58, - 0xad, 0xd1, 0x1c, 0x48, 0x37, 0x80, 0xff, 0x58, 0xbf, 0xec, 0x37, 0x0e, - 0xf1, 0xd2, 0x75, 0x8b, 0xfd, 0x27, 0x98, 0xc0, 0x82, 0x09, 0x62, 0xba, - 0x55, 0xf6, 0xf1, 0x97, 0x68, 0xbb, 0xf0, 0xe9, 0x01, 0x19, 0x0e, 0xf7, - 0x1e, 0x5f, 0xf1, 0x8c, 0x59, 0xdc, 0x67, 0xc4, 0xb1, 0x7e, 0x09, 0xf5, - 0x86, 0xac, 0x54, 0xae, 0xae, 0x64, 0x24, 0x5e, 0x17, 0x91, 0x11, 0x34, - 0xb1, 0x21, 0x39, 0x86, 0x7d, 0x7f, 0xfc, 0xdf, 0x32, 0x4c, 0xce, 0xd3, - 0x03, 0x27, 0x4b, 0x17, 0xe1, 0xbf, 0xf0, 0x96, 0x2f, 0xfb, 0xcf, 0xc7, - 0x17, 0x7e, 0x39, 0x58, 0xba, 0x7a, 0x58, 0xbf, 0xc1, 0xf0, 0xc6, 0xd6, - 0xa5, 0x62, 0xff, 0xfb, 0xde, 0x9f, 0x75, 0x0f, 0xe1, 0x1a, 0x19, 0xd6, - 0x2f, 0xe9, 0xf6, 0x13, 0x47, 0xac, 0x5f, 0xa0, 0x0f, 0xb1, 0xd6, 0x2f, - 0x6d, 0x81, 0x2c, 0x58, 0x06, 0x1e, 0x44, 0x6c, 0x53, 0x7f, 0xdc, 0x93, - 0x1f, 0x68, 0x4f, 0x7a, 0xb1, 0x43, 0x54, 0x81, 0x8a, 0x8e, 0x4f, 0xa3, - 0xe3, 0x8c, 0x31, 0xb0, 0x15, 0x09, 0xdf, 0x85, 0xd7, 0x46, 0xdd, 0xea, - 0xc5, 0xff, 0x98, 0xb7, 0xf6, 0x7f, 0xde, 0x12, 0xc5, 0x39, 0xf1, 0x08, - 0x8a, 0xf4, 0xf6, 0x95, 0x8b, 0xfa, 0x75, 0xb4, 0xeb, 0x65, 0x8b, 0xe1, - 0x6d, 0x30, 0x58, 0xa8, 0x1e, 0xa7, 0x0c, 0x2f, 0xf1, 0xa6, 0x69, 0xfa, - 0xf6, 0x2c, 0x5f, 0xed, 0x34, 0x86, 0x39, 0xfa, 0xc5, 0xff, 0xf7, 0xe4, - 0x66, 0x7f, 0x0c, 0xcd, 0x34, 0x31, 0x62, 0xf9, 0xcd, 0xc1, 0xac, 0x5e, - 0x37, 0x06, 0xb1, 0x63, 0x98, 0x78, 0x2e, 0x47, 0x7e, 0x13, 0x43, 0x34, - 0xb1, 0x6f, 0x61, 0xe8, 0x11, 0x45, 0xff, 0x48, 0x0e, 0xd0, 0x8d, 0x3b, - 0xde, 0xf1, 0x62, 0xe0, 0xbb, 0xf5, 0x8b, 0xf0, 0x5f, 0x11, 0x6e, 0xb1, - 0x7f, 0x8b, 0xdc, 0xc8, 0x3f, 0xd6, 0x2a, 0x4f, 0x7b, 0x0a, 0xea, 0x51, - 0x39, 0xc7, 0xcb, 0xff, 0xd9, 0x0c, 0x89, 0xf5, 0x82, 0xdd, 0x89, 0x62, - 0xfe, 0x68, 0x68, 0xd6, 0x25, 0x8b, 0xf6, 0x76, 0x29, 0xe9, 0x62, 0xbe, - 0x8a, 0x20, 0x25, 0x70, 0xba, 0xe1, 0x7d, 0x62, 0xa5, 0x5b, 0x24, 0x0d, - 0xf7, 0x34, 0x78, 0x71, 0x11, 0x37, 0x21, 0xcb, 0xe8, 0x62, 0x47, 0x18, - 0x5f, 0xff, 0x48, 0x30, 0x8c, 0x6f, 0x19, 0xfc, 0x03, 0x2c, 0x5c, 0x5b, - 0x2c, 0x5d, 0x3d, 0x96, 0x2a, 0x57, 0x22, 0xb2, 0x5c, 0x33, 0xc2, 0x0c, - 0x94, 0x04, 0x31, 0x7f, 0xff, 0xdd, 0x6e, 0x59, 0xdb, 0x07, 0x98, 0x44, - 0x26, 0xda, 0x74, 0xb1, 0x7f, 0x87, 0x87, 0x33, 0x8d, 0xf5, 0x8b, 0xc2, - 0x9e, 0x2c, 0x56, 0x22, 0xe9, 0xda, 0x3e, 0x6b, 0x77, 0x20, 0xb1, 0x7f, - 0xff, 0xfe, 0xec, 0x59, 0xc7, 0xf6, 0x84, 0x73, 0x35, 0x3f, 0x73, 0x96, - 0x78, 0xc9, 0x82, 0xc5, 0xff, 0xd2, 0x72, 0x63, 0x4b, 0x01, 0xd0, 0x16, - 0x29, 0xd1, 0x97, 0xf8, 0x43, 0x5f, 0xdd, 0x98, 0xff, 0x09, 0x96, 0x2f, - 0xff, 0xa7, 0xdc, 0x9d, 0x8c, 0xc1, 0x98, 0xe7, 0x95, 0x8b, 0xff, 0xb5, - 0x3c, 0xc1, 0xfd, 0xfb, 0x66, 0x96, 0x2f, 0xff, 0xde, 0x6f, 0xc6, 0x73, - 0xf8, 0x5e, 0x30, 0x10, 0xe2, 0xc5, 0xff, 0xff, 0xdf, 0xe6, 0x1c, 0xf3, - 0xa3, 0x79, 0x83, 0x2c, 0x7d, 0x67, 0xa5, 0x62, 0xcf, 0x28, 0xcc, 0x65, - 0xbb, 0xfc, 0x4f, 0x9b, 0xcf, 0xb8, 0xb1, 0x7f, 0xce, 0x5d, 0xb6, 0xc3, - 0x73, 0x4b, 0x14, 0xe7, 0xdf, 0xc3, 0x3a, 0x82, 0xa7, 0x27, 0x27, 0xf9, - 0x88, 0x14, 0x8a, 0x31, 0x2f, 0x42, 0x56, 0xfe, 0x93, 0xbf, 0xe7, 0xa5, - 0x8b, 0x85, 0xa5, 0x8a, 0xd1, 0xe3, 0x70, 0xba, 0xff, 0x09, 0xb9, 0x9f, - 0x73, 0xac, 0x5e, 0xed, 0x9a, 0x58, 0xbc, 0x1e, 0x8d, 0x58, 0xbf, 0xf3, - 0xf8, 0x5a, 0x6e, 0x40, 0x1b, 0xac, 0x54, 0xa2, 0x00, 0xe3, 0xec, 0x41, - 0x77, 0xdd, 0x62, 0xff, 0xa0, 0x67, 0xb3, 0x5a, 0x7d, 0xd6, 0x29, 0xcf, - 0x4c, 0x85, 0xef, 0xc7, 0xef, 0x63, 0x6c, 0xd2, 0xc5, 0xff, 0x3f, 0xb0, - 0xee, 0x6e, 0x0d, 0x62, 0xa4, 0xfb, 0x30, 0xce, 0xfd, 0x9a, 0xe3, 0x69, - 0x62, 0xff, 0xdf, 0x72, 0x00, 0x7f, 0xfb, 0x6c, 0xb1, 0x7e, 0x70, 0x1d, - 0xa0, 0xb1, 0x73, 0xf1, 0x62, 0xb6, 0x37, 0xe7, 0x28, 0xbf, 0xd9, 0xf7, - 0x1c, 0x97, 0x96, 0x2f, 0xed, 0x31, 0x00, 0x12, 0xb1, 0x52, 0xbe, 0xad, - 0xb1, 0x76, 0x4b, 0x55, 0x78, 0x54, 0x68, 0x8b, 0xf0, 0xb3, 0x68, 0x40, - 0x94, 0x23, 0x38, 0x41, 0xe2, 0x81, 0x42, 0x00, 0x22, 0x20, 0xcc, 0xaf, - 0xf1, 0x67, 0xb8, 0x07, 0xe9, 0x62, 0xfc, 0x58, 0x32, 0x65, 0x8b, 0xfb, - 0x4f, 0xef, 0xb8, 0xd6, 0x2a, 0x08, 0x88, 0xc3, 0x4d, 0x13, 0x5f, 0x0a, - 0x78, 0x4b, 0x17, 0xff, 0xec, 0xea, 0x13, 0xb1, 0x9f, 0x97, 0x26, 0xd1, - 0xab, 0x17, 0x67, 0x65, 0x8b, 0xf4, 0x9d, 0xba, 0xf2, 0xc5, 0xd9, 0xb2, - 0xc5, 0xff, 0xc3, 0xe6, 0x68, 0xb0, 0x1c, 0xcd, 0x2c, 0x57, 0xd1, 0x3d, - 0xc1, 0x9f, 0x14, 0x88, 0x62, 0xfd, 0x9b, 0x89, 0xb6, 0x58, 0xad, 0xd3, - 0x7f, 0xd1, 0x17, 0xe1, 0xec, 0x47, 0xb7, 0xff, 0xff, 0xff, 0x0a, 0x60, - 0x26, 0x34, 0xce, 0x61, 0x67, 0x74, 0xc0, 0xcc, 0x27, 0x9f, 0xb9, 0x67, - 0xb3, 0xb2, 0xc5, 0xff, 0xe2, 0x17, 0x45, 0x8f, 0xad, 0xff, 0x3c, 0x58, - 0xb7, 0x7e, 0xb1, 0x5a, 0x3e, 0x20, 0x92, 0xef, 0xff, 0xed, 0xdb, 0xf9, - 0x09, 0xd4, 0x83, 0x52, 0x1b, 0x12, 0xc5, 0xff, 0xa4, 0x9c, 0xf8, 0xe5, - 0x27, 0x58, 0xbe, 0xcf, 0xb8, 0xd6, 0x28, 0xe7, 0xba, 0x03, 0xbb, 0xff, - 0xe6, 0x87, 0x1c, 0x66, 0x41, 0xc7, 0xf0, 0xf8, 0xb1, 0x52, 0x9a, 0x86, - 0x11, 0xb4, 0x2e, 0x04, 0x45, 0x7f, 0xf8, 0x6f, 0x3b, 0x87, 0xf6, 0xeb, - 0xdf, 0x95, 0x8b, 0xff, 0xf6, 0x43, 0xed, 0x03, 0x33, 0xd1, 0xcf, 0xa9, - 0x82, 0xc5, 0xf6, 0xcc, 0x5d, 0x96, 0x2e, 0xc0, 0x96, 0x2e, 0x11, 0x2c, - 0x5e, 0x06, 0x16, 0xc6, 0xbf, 0xe3, 0x15, 0x88, 0x86, 0x65, 0x4b, 0xff, - 0xff, 0xf1, 0x9e, 0xfb, 0xcf, 0x0c, 0xc1, 0x6f, 0x3d, 0x8c, 0xcd, 0x6b, - 0x3b, 0x09, 0xbe, 0xb1, 0x7a, 0x19, 0xb2, 0xc5, 0x41, 0x15, 0x2d, 0x08, - 0xbb, 0xef, 0x46, 0x9d, 0xef, 0x78, 0xb1, 0x52, 0x7b, 0x58, 0x4f, 0x7d, - 0xf2, 0x6e, 0xe5, 0x8b, 0x8c, 0x25, 0x8b, 0xcf, 0xdd, 0x2b, 0x15, 0x03, - 0x6e, 0x71, 0x8a, 0x95, 0xf7, 0x2c, 0x8e, 0xbb, 0x48, 0x7f, 0x94, 0xa8, - 0xc8, 0x00, 0x4d, 0x28, 0x6f, 0xf2, 0x32, 0x4f, 0x10, 0x09, 0x72, 0xff, - 0xf8, 0x5c, 0xfc, 0xe4, 0x7e, 0x11, 0x63, 0x81, 0x62, 0xfe, 0xeb, 0x8e, - 0x79, 0xdd, 0x62, 0xf9, 0x86, 0x2e, 0x2c, 0x5f, 0xf3, 0xc7, 0xb7, 0xf3, - 0xba, 0x62, 0x58, 0xa9, 0x47, 0x13, 0x28, 0x70, 0xc0, 0x32, 0x3b, 0xec, - 0x19, 0xf8, 0xb1, 0x7f, 0x9b, 0xfc, 0x7e, 0xd8, 0x35, 0x8b, 0xd9, 0x9c, - 0x58, 0xb6, 0x96, 0x2f, 0x7b, 0x0e, 0xb1, 0x52, 0x6b, 0xf0, 0x4a, 0xdb, - 0x0c, 0xfa, 0x99, 0x2e, 0xf0, 0x71, 0xcc, 0xb1, 0x7f, 0xfe, 0x7d, 0xbe, - 0xcf, 0xe9, 0xfb, 0xfb, 0x98, 0x35, 0x8b, 0xfe, 0x33, 0x3e, 0xed, 0xef, - 0xca, 0xc5, 0x47, 0xa2, 0x38, 0x95, 0x69, 0x62, 0xbe, 0x8e, 0x06, 0x85, - 0x78, 0x64, 0xb4, 0xc9, 0x9e, 0x8a, 0x30, 0x8b, 0x81, 0xde, 0xac, 0x5f, - 0xbf, 0x3f, 0x78, 0xf5, 0x8b, 0xdf, 0x9d, 0x2c, 0x5f, 0xff, 0x9c, 0x58, - 0x40, 0x33, 0x3e, 0x23, 0x9d, 0xa0, 0xb1, 0x5b, 0x9f, 0x9e, 0x87, 0x6f, - 0x8e, 0x22, 0xdd, 0x62, 0xff, 0xdd, 0x9a, 0x18, 0x43, 0x29, 0x82, 0xc5, - 0xff, 0xb8, 0x21, 0xfd, 0xcc, 0xdb, 0x02, 0x58, 0xbb, 0x69, 0x58, 0xac, - 0x44, 0xd7, 0x8f, 0xc4, 0x87, 0x7d, 0x9f, 0x3c, 0xac, 0x5f, 0x7c, 0x26, - 0xd9, 0x62, 0xa5, 0x50, 0x94, 0x07, 0x75, 0x09, 0xe0, 0x11, 0x94, 0x2f, - 0xb8, 0x5f, 0xe2, 0x2b, 0xce, 0x14, 0x4b, 0x17, 0xff, 0xf7, 0xf7, 0x16, - 0x00, 0xcc, 0xf7, 0x1f, 0xc0, 0x9d, 0x96, 0x2f, 0xf9, 0xbe, 0xfc, 0xe0, - 0x98, 0x0b, 0x14, 0x34, 0x5b, 0xe0, 0xfb, 0x2f, 0xda, 0x32, 0x37, 0x7d, - 0x11, 0xfe, 0xf0, 0xaf, 0xbd, 0x41, 0x8d, 0x21, 0x13, 0x1b, 0x1c, 0xf7, - 0xc3, 0x29, 0x9c, 0x54, 0xda, 0x1f, 0x50, 0x8e, 0x44, 0x72, 0xa3, 0xb2, - 0xb0, 0x78, 0x36, 0x36, 0x3d, 0xe3, 0x0d, 0xea, 0x35, 0x57, 0x8e, 0xce, - 0x28, 0xed, 0xf5, 0x38, 0xcc, 0x79, 0x45, 0x9f, 0x9e, 0xe9, 0x69, 0x56, - 0xc0, 0x86, 0xf7, 0x7e, 0x42, 0x53, 0x9f, 0x9c, 0xa4, 0x32, 0xfa, 0x91, - 0x9a, 0x28, 0xe1, 0x3b, 0x1e, 0x04, 0x47, 0x1d, 0x1e, 0xe0, 0x72, 0x8e, - 0xfb, 0xa3, 0x25, 0xbd, 0xd8, 0x0e, 0xb1, 0x7b, 0xb0, 0x1d, 0x62, 0xf1, - 0x38, 0x4b, 0x17, 0xfb, 0x8f, 0xe9, 0xfe, 0xee, 0xb1, 0x7d, 0xbb, 0x36, - 0xea, 0x92, 0xa0, 0xbf, 0xda, 0x9e, 0xdd, 0x43, 0x3c, 0xb1, 0x5a, 0x3e, - 0x81, 0x18, 0xdb, 0xa5, 0x8b, 0xfa, 0x7d, 0xce, 0xd8, 0x35, 0x8a, 0x93, - 0xc3, 0x34, 0x4e, 0xfe, 0x16, 0x81, 0xe6, 0xe9, 0x62, 0xff, 0xb3, 0xcd, - 0xd1, 0x9b, 0x60, 0x4b, 0x17, 0xfe, 0x68, 0x46, 0x66, 0xb7, 0x66, 0xdd, - 0x52, 0x35, 0x97, 0xfd, 0xf9, 0x3f, 0x38, 0xc5, 0xba, 0xc5, 0xf4, 0xea, - 0x7c, 0xb1, 0x73, 0x79, 0x62, 0x86, 0x6e, 0x4e, 0x45, 0x7f, 0x08, 0x78, - 0x4d, 0x05, 0x8b, 0xfd, 0xd7, 0x09, 0xe4, 0x33, 0xac, 0x51, 0xcf, 0x89, - 0x8b, 0x6f, 0xe0, 0xb3, 0xf0, 0xce, 0x2c, 0x5f, 0xe2, 0x6f, 0x72, 0x2f, - 0xba, 0xc5, 0xa3, 0x23, 0x65, 0x76, 0xbd, 0xf0, 0x7e, 0x03, 0xe3, 0x1d, - 0xc8, 0x4e, 0x1a, 0xcb, 0xb9, 0x16, 0x8c, 0x0e, 0x7b, 0xf5, 0x06, 0x73, - 0x04, 0x20, 0xf8, 0x42, 0x19, 0x7d, 0xff, 0xb0, 0xe6, 0x7b, 0x23, 0xdf, - 0xb7, 0x16, 0x2f, 0xff, 0xf4, 0x8e, 0x3e, 0x41, 0x31, 0x42, 0x7b, 0x67, - 0x73, 0x94, 0x4b, 0x16, 0x71, 0xa2, 0xbb, 0x88, 0xb7, 0xf9, 0xa2, 0xe3, - 0x78, 0x52, 0xb1, 0x51, 0xe7, 0xb9, 0xa2, 0x8b, 0x85, 0x12, 0xc5, 0xe6, - 0x6d, 0xd5, 0x25, 0x61, 0x7f, 0x45, 0xc6, 0xf0, 0xa5, 0x62, 0xda, 0xdc, - 0xf6, 0x58, 0xaa, 0xff, 0xff, 0x76, 0xce, 0xe7, 0x28, 0x8c, 0x29, 0xf7, - 0x32, 0x22, 0x65, 0x8b, 0xf9, 0xf3, 0xb8, 0xb0, 0x0b, 0x15, 0x04, 0x4a, - 0x8d, 0x9a, 0xfb, 0xef, 0xae, 0x2c, 0x5e, 0xd4, 0x9d, 0x62, 0xff, 0xfc, - 0xc4, 0x6c, 0x64, 0x3f, 0x9d, 0x37, 0xc4, 0x5b, 0x2c, 0x5f, 0xe8, 0x4e, - 0xb6, 0x9d, 0x6c, 0xb1, 0x7f, 0xce, 0x09, 0x03, 0x10, 0xb1, 0x62, 0xa4, - 0xfb, 0x70, 0xda, 0xff, 0xc4, 0x39, 0xed, 0x13, 0xf6, 0x20, 0x2c, 0x5f, - 0xfc, 0xec, 0x03, 0x27, 0x71, 0x10, 0xc4, 0xb1, 0x52, 0x88, 0x9f, 0xa1, - 0xda, 0x32, 0x55, 0xa5, 0x6c, 0x4b, 0x8e, 0x4f, 0x0b, 0xd8, 0x88, 0xf4, - 0x46, 0x71, 0xd2, 0x86, 0x47, 0xa1, 0x53, 0x7c, 0x58, 0x2e, 0xfd, 0x62, - 0xfe, 0xeb, 0xd3, 0xf6, 0x8f, 0x58, 0xbf, 0x37, 0xf3, 0x58, 0xb1, 0x52, - 0x7b, 0x2c, 0x65, 0x7f, 0x75, 0xcc, 0xfc, 0x9d, 0x62, 0xfe, 0xd0, 0xa2, - 0xe4, 0xf9, 0x62, 0xa5, 0x1f, 0xff, 0x84, 0x07, 0x88, 0x04, 0x5f, 0x7f, - 0xf0, 0x30, 0xa3, 0x20, 0x0e, 0x6c, 0xc4, 0xb1, 0x51, 0x88, 0x89, 0x94, - 0x1b, 0xf8, 0x6e, 0x2f, 0x67, 0x16, 0x2f, 0xe7, 0x3b, 0xfb, 0xf2, 0xb1, - 0x7d, 0x31, 0x4f, 0x4b, 0x15, 0xf3, 0xd1, 0xe1, 0x6d, 0xff, 0xfb, 0x42, - 0xd8, 0x7a, 0x6d, 0xcb, 0x3b, 0x69, 0xf8, 0xb1, 0x7f, 0x9f, 0xf2, 0x73, - 0xb4, 0x16, 0x2f, 0xda, 0xdd, 0x9b, 0x75, 0x48, 0x88, 0x5f, 0x30, 0x66, - 0xca, 0xc5, 0xff, 0xb3, 0xb9, 0xf6, 0xeb, 0x35, 0xa6, 0x58, 0xbf, 0x9c, - 0xfb, 0x0b, 0x50, 0x58, 0xb4, 0x64, 0xa6, 0x03, 0x86, 0x62, 0x37, 0xec, - 0x49, 0x1c, 0x87, 0x73, 0x1d, 0x62, 0xa0, 0x7d, 0xdd, 0x2b, 0xdf, 0xdb, - 0x4e, 0xbe, 0xce, 0xb1, 0x7f, 0x70, 0xb0, 0x02, 0xe2, 0xc5, 0xa3, 0x23, - 0x75, 0x5d, 0x38, 0xff, 0xa2, 0x26, 0x8f, 0x27, 0x84, 0x62, 0x2e, 0xbf, - 0x6b, 0x76, 0x6d, 0xd5, 0x26, 0x91, 0x7f, 0xe6, 0x84, 0x66, 0x6b, 0x76, - 0x6d, 0xd5, 0x23, 0xe9, 0x68, 0xcc, 0x44, 0x39, 0xcd, 0xef, 0xfc, 0xd0, - 0x8c, 0xcd, 0x6e, 0xcd, 0xba, 0xa4, 0x84, 0x2f, 0xc4, 0xdc, 0xcf, 0x2c, - 0x5a, 0x30, 0xe7, 0xee, 0xca, 0x17, 0xff, 0x60, 0x51, 0x9e, 0x35, 0xb8, - 0xfe, 0x95, 0x8b, 0xf7, 0x85, 0xbb, 0x71, 0x62, 0xe9, 0xd2, 0xc5, 0xff, - 0xd2, 0x71, 0x6b, 0x76, 0x71, 0xcc, 0x4b, 0x16, 0x7d, 0x8f, 0x76, 0x21, - 0x7a, 0x3a, 0x2c, 0x3f, 0x08, 0x7b, 0xed, 0xd9, 0xb7, 0x54, 0x91, 0xe5, - 0xfa, 0x4f, 0xfc, 0xee, 0x58, 0xad, 0x1e, 0xe7, 0x8c, 0x6d, 0x8b, 0x17, - 0xf0, 0xbc, 0x77, 0x0b, 0x8b, 0x14, 0x33, 0xc1, 0x21, 0x1b, 0xe7, 0xc0, - 0x71, 0x62, 0xe6, 0xdd, 0x62, 0xd8, 0x33, 0x75, 0xdc, 0x45, 0x7e, 0x9e, - 0x44, 0x52, 0xb1, 0x7f, 0xd3, 0x09, 0xd6, 0xd3, 0xad, 0x96, 0x2f, 0xff, - 0xff, 0xf0, 0x6f, 0xa8, 0xa7, 0xfa, 0xcf, 0xb0, 0x7c, 0xc3, 0x58, 0x81, - 0x25, 0x31, 0x7e, 0x56, 0x2f, 0xcd, 0xc7, 0xf4, 0xac, 0x5f, 0xf4, 0xc5, - 0x25, 0x31, 0x7e, 0x56, 0x2a, 0x51, 0xe0, 0x6c, 0x24, 0x08, 0x9e, 0xf8, - 0xfb, 0x60, 0x4b, 0x17, 0xff, 0xe1, 0xfe, 0x43, 0x8c, 0xf1, 0x30, 0x39, - 0xc9, 0x02, 0x45, 0x49, 0xff, 0xe1, 0x2d, 0xe6, 0x84, 0x64, 0xab, 0x91, - 0xc8, 0x42, 0x44, 0xc7, 0xa5, 0xbf, 0x94, 0x91, 0x47, 0xa3, 0x2b, 0x8e, - 0x85, 0x9d, 0xff, 0xd9, 0xf8, 0xcf, 0x1a, 0xdc, 0x7f, 0x4a, 0xc5, 0xff, - 0xff, 0xcf, 0xb4, 0x63, 0xfb, 0x22, 0x27, 0xe7, 0xa4, 0x37, 0xd4, 0x53, - 0xf5, 0x8b, 0x46, 0x6c, 0xbb, 0xc2, 0x79, 0xc8, 0xaf, 0x42, 0x63, 0xb9, - 0x22, 0xa6, 0x14, 0x1a, 0x7b, 0x5b, 0x33, 0x68, 0x43, 0xcb, 0x25, 0x52, - 0x9b, 0x7a, 0x30, 0x3b, 0xcf, 0x16, 0x75, 0x3a, 0x68, 0xf2, 0x87, 0xa2, - 0x96, 0x1d, 0xf8, 0x79, 0x02, 0x14, 0x5e, 0x9e, 0x0b, 0xbf, 0xfe, 0x0b, - 0x7e, 0xf3, 0xbd, 0x07, 0x7f, 0xa8, 0xd0, 0xc3, 0x3f, 0x1c, 0xb1, 0x7f, - 0xff, 0xee, 0xef, 0x46, 0xc3, 0x3c, 0x6c, 0x4f, 0xdf, 0x5f, 0x77, 0xfa, - 0x8d, 0x0c, 0x33, 0xf1, 0xcb, 0x15, 0xf4, 0xc0, 0xc2, 0x6f, 0xbf, 0xfb, - 0xf2, 0xfa, 0x7e, 0xff, 0x7f, 0xc8, 0x4b, 0x17, 0xff, 0xee, 0xf8, 0x6f, - 0x5d, 0xf3, 0xbe, 0x77, 0x84, 0x78, 0xd4, 0x61, 0x9f, 0x8e, 0x58, 0xbf, - 0xf7, 0x3b, 0xf7, 0x34, 0xc3, 0x3f, 0x1d, 0x19, 0x28, 0xed, 0xdc, 0x97, - 0x89, 0x77, 0xff, 0xff, 0xfb, 0xbb, 0xbf, 0x73, 0x4c, 0x33, 0xf1, 0xd1, - 0x93, 0xf0, 0xb7, 0xef, 0x3b, 0xd0, 0x77, 0xfa, 0x8d, 0x0c, 0x33, 0xf1, - 0xcb, 0x17, 0xed, 0x6e, 0xcd, 0xba, 0xa4, 0x22, 0x2f, 0xcf, 0xe8, 0x83, - 0x1a, 0xc5, 0xfe, 0xe0, 0xa6, 0x2f, 0x3f, 0x65, 0x8b, 0x46, 0x62, 0x26, - 0x77, 0x37, 0x88, 0xae, 0xfe, 0xcd, 0x6e, 0xcd, 0xba, 0xa4, 0x2b, 0x2f, - 0xda, 0xdd, 0x9b, 0x75, 0x49, 0x70, 0x5d, 0x3f, 0x58, 0xba, 0x3e, 0x33, - 0x0f, 0x3b, 0xb1, 0xbd, 0x46, 0x22, 0xfd, 0xa1, 0x15, 0x7d, 0xf6, 0xd3, - 0xac, 0x5f, 0xbc, 0x00, 0xca, 0x0b, 0x17, 0xe0, 0x49, 0x6f, 0x19, 0x27, - 0x98, 0xc4, 0x57, 0x45, 0x1e, 0xb1, 0x7f, 0x13, 0xef, 0xe9, 0x82, 0xc5, - 0xa3, 0x36, 0x3c, 0xad, 0x0e, 0x59, 0xfa, 0x45, 0xb0, 0x21, 0x15, 0x7f, - 0xbb, 0xde, 0xf0, 0xa7, 0x76, 0xe9, 0x62, 0xfb, 0x3e, 0xde, 0x58, 0xbf, - 0xd8, 0xfa, 0x00, 0x05, 0xc5, 0x8b, 0x77, 0xa4, 0x7a, 0xdc, 0x22, 0xbf, - 0xff, 0xff, 0xdd, 0xe4, 0x6f, 0xde, 0xcf, 0x3f, 0x86, 0xe0, 0xcb, 0x36, - 0x78, 0x72, 0x47, 0x3f, 0x26, 0x8f, 0x58, 0xbf, 0xff, 0xdf, 0xc1, 0x43, - 0xf9, 0xd9, 0xa3, 0xd8, 0xbd, 0xfc, 0x82, 0xc5, 0xff, 0x49, 0x6e, 0xdf, - 0x62, 0x1a, 0xc5, 0xfa, 0x7c, 0xc5, 0x8b, 0x14, 0x69, 0xef, 0x68, 0xe2, - 0xff, 0xfe, 0xd4, 0xec, 0x77, 0x86, 0x0b, 0x72, 0xcd, 0xb5, 0x2b, 0x17, - 0xe2, 0x6f, 0x4e, 0xeb, 0x17, 0xff, 0xee, 0x3f, 0xd9, 0xe0, 0xe5, 0xe1, - 0x7f, 0x58, 0xb1, 0x7f, 0x8f, 0xc7, 0x8e, 0xcd, 0x4a, 0xc5, 0xff, 0x4f, - 0x74, 0xfd, 0xca, 0x4e, 0xb1, 0x58, 0x7e, 0x04, 0x6d, 0x50, 0x54, 0x9e, - 0xf0, 0xc3, 0xd1, 0x1f, 0x17, 0x7c, 0x51, 0xdd, 0x0c, 0x4b, 0xb8, 0xeb, - 0x17, 0xd8, 0x79, 0x82, 0xc5, 0xd8, 0x10, 0x0d, 0xc9, 0x0b, 0xdf, 0x81, - 0xcf, 0x14, 0xac, 0x5f, 0xef, 0x72, 0x62, 0x66, 0xd2, 0xc5, 0x49, 0xee, - 0x39, 0x45, 0xf6, 0x1d, 0xbc, 0xb1, 0x7f, 0x31, 0xa1, 0x36, 0xb8, 0xb1, - 0x5f, 0x3d, 0x26, 0x22, 0xbf, 0xff, 0x7f, 0x0b, 0x0d, 0xfb, 0x43, 0xe1, - 0x30, 0x67, 0x58, 0xbf, 0xd2, 0x7f, 0x7f, 0x3b, 0x62, 0xc5, 0xf3, 0xef, - 0x9a, 0x58, 0xbf, 0xf8, 0x72, 0x01, 0xb3, 0x04, 0x3c, 0x25, 0x8b, 0xcc, - 0xdb, 0xaa, 0x49, 0xe2, 0xb6, 0x44, 0x88, 0xc8, 0xf7, 0x44, 0xbd, 0x25, - 0xe5, 0x8b, 0xff, 0x4f, 0x62, 0xce, 0x61, 0x39, 0xd6, 0x2f, 0x3e, 0xbe, - 0xe7, 0xb4, 0xc3, 0x97, 0xfc, 0xc7, 0xe3, 0xe7, 0x66, 0xd2, 0xc5, 0xff, - 0x8a, 0x7b, 0x3f, 0xa1, 0x38, 0x4b, 0x15, 0x05, 0x4a, 0x71, 0x2c, 0x6a, - 0x18, 0xdf, 0x84, 0x61, 0x18, 0xf8, 0xea, 0xff, 0x0c, 0x06, 0x4c, 0x7c, - 0xc1, 0x62, 0xff, 0x1d, 0xc6, 0x26, 0xd4, 0x16, 0x2e, 0x3b, 0xac, 0x54, - 0x9e, 0x5e, 0xe6, 0x97, 0xff, 0xf4, 0xfb, 0x82, 0x3e, 0xee, 0x09, 0xcf, - 0xb8, 0xb7, 0x58, 0xb9, 0xf8, 0xb1, 0x7f, 0x49, 0xf9, 0x2f, 0xb2, 0xc5, - 0x41, 0x14, 0x58, 0xbb, 0xe1, 0x7b, 0xff, 0xf9, 0xb4, 0xdf, 0xea, 0x19, - 0xec, 0x21, 0x78, 0x46, 0xac, 0x5f, 0x42, 0x73, 0x65, 0x8b, 0xff, 0xf6, - 0x85, 0xad, 0x49, 0x61, 0xaf, 0xff, 0xe0, 0x6b, 0x16, 0x1a, 0xc5, 0xcf, - 0xd9, 0x62, 0xce, 0xb1, 0x5b, 0xa6, 0x27, 0xd2, 0xee, 0x88, 0xce, 0xae, - 0x01, 0x2e, 0xc3, 0x37, 0x8f, 0x3b, 0xac, 0x5c, 0x5e, 0x58, 0xac, 0x36, - 0xae, 0x3d, 0x7e, 0x73, 0x8c, 0x78, 0xb1, 0x7b, 0x69, 0xdd, 0x62, 0xfe, - 0x1e, 0x43, 0xf3, 0xba, 0xc5, 0xff, 0x98, 0x73, 0x85, 0xee, 0x49, 0x2c, - 0x53, 0xa2, 0x29, 0x87, 0xc8, 0xbe, 0xf0, 0x60, 0x09, 0x62, 0xf8, 0x01, - 0xfa, 0x56, 0x2d, 0x08, 0xc3, 0xf1, 0xc2, 0xd7, 0x20, 0xba, 0x7a, 0x58, - 0xbc, 0x79, 0xdd, 0x62, 0xe7, 0xf6, 0xc6, 0xdb, 0x06, 0x29, 0x91, 0x30, - 0x26, 0xcb, 0xf0, 0x64, 0x1f, 0x5c, 0x58, 0xbc, 0x4e, 0x05, 0x8a, 0x19, - 0xe4, 0x1c, 0xb2, 0xff, 0xb4, 0xdb, 0x0c, 0x4d, 0xa8, 0x2c, 0x5f, 0xfb, - 0x82, 0xd3, 0xb3, 0x8e, 0x49, 0x62, 0xff, 0x49, 0xe6, 0x30, 0x20, 0x82, - 0x58, 0xa7, 0x3f, 0x7e, 0xe3, 0xda, 0x94, 0x7c, 0x39, 0x13, 0x42, 0xca, - 0xfe, 0x71, 0xe1, 0xc5, 0xe5, 0x8b, 0xfe, 0xc2, 0x04, 0x9d, 0xf5, 0x05, - 0x8b, 0xfc, 0xfc, 0x71, 0x77, 0xe3, 0x95, 0x8a, 0x81, 0xf8, 0x78, 0xe2, - 0xfd, 0xa9, 0x83, 0x81, 0x62, 0xff, 0xf8, 0xf8, 0xfe, 0x17, 0xa6, 0x0e, - 0x3c, 0x1a, 0xc5, 0x41, 0x33, 0x77, 0x84, 0xf6, 0x88, 0x80, 0x51, 0x7e, - 0xd6, 0xd3, 0xad, 0x96, 0x2f, 0xce, 0x5e, 0x0c, 0xeb, 0x15, 0x27, 0xa8, - 0x02, 0xbb, 0xfd, 0xa9, 0x9f, 0x71, 0xfb, 0x2c, 0x5f, 0xd3, 0xb3, 0x0d, - 0xbc, 0xb1, 0x50, 0x44, 0x21, 0xc8, 0x7b, 0x8d, 0x6f, 0xd2, 0x7d, 0xc0, - 0x4b, 0x17, 0xcc, 0xf1, 0xd2, 0xb1, 0x7c, 0x61, 0x34, 0x16, 0x2f, 0xcd, - 0x9f, 0x73, 0xac, 0x54, 0x48, 0x97, 0x39, 0x4f, 0x09, 0x3b, 0x11, 0xdd, - 0x3d, 0xcb, 0x15, 0x29, 0x92, 0x64, 0x32, 0xa2, 0x40, 0xbf, 0xfd, 0x02, - 0xc1, 0x7a, 0x7d, 0x84, 0x09, 0x58, 0xbf, 0x9f, 0xcc, 0x6f, 0xdd, 0x62, - 0xff, 0xf8, 0x4d, 0xa8, 0x6f, 0xf7, 0x1e, 0x9c, 0x5b, 0x2c, 0x5f, 0xf4, - 0xef, 0xf6, 0x78, 0xe9, 0xd2, 0xc5, 0xfe, 0x63, 0x98, 0x3f, 0xb9, 0xd6, - 0x28, 0xe7, 0xe3, 0xd8, 0xf2, 0xff, 0x8a, 0x4f, 0x30, 0x2c, 0x3a, 0xc5, - 0xff, 0x89, 0x82, 0xf6, 0x7d, 0x9e, 0x25, 0x8b, 0xdb, 0x4f, 0x4b, 0x17, - 0xff, 0x4e, 0xb6, 0x9e, 0xb0, 0x5d, 0xfe, 0x0d, 0x62, 0xb6, 0x3e, 0xa3, - 0x8f, 0xdf, 0xfe, 0xcf, 0x08, 0x07, 0x68, 0x19, 0xa6, 0xe2, 0xc5, 0xff, - 0xbe, 0xe4, 0x00, 0xff, 0xf6, 0xd9, 0x62, 0xfb, 0xd0, 0x93, 0x56, 0x2a, - 0x55, 0x89, 0x41, 0x20, 0x65, 0xd9, 0x0c, 0x47, 0x24, 0x88, 0xdd, 0xa1, - 0x52, 0x44, 0x7e, 0x4c, 0x0d, 0x06, 0xfb, 0x1c, 0xa2, 0x58, 0xbe, 0xf4, - 0x69, 0xde, 0xf7, 0x8b, 0x17, 0xb5, 0x3b, 0x2c, 0x56, 0x1e, 0x8b, 0x99, - 0xd6, 0xe8, 0x93, 0xe3, 0x9d, 0xfe, 0x2d, 0xf3, 0xb6, 0x7b, 0x8b, 0x17, - 0xe1, 0x8a, 0x75, 0xb2, 0xc5, 0xff, 0xf7, 0x81, 0x30, 0xce, 0xcf, 0xe9, - 0xc2, 0x82, 0xc5, 0xcc, 0x6a, 0xc5, 0x4a, 0x32, 0x30, 0xd9, 0xca, 0xb4, - 0xa1, 0x7b, 0xdf, 0x75, 0x8b, 0xb4, 0x25, 0x8b, 0xa7, 0x8b, 0x17, 0xd9, - 0xec, 0x3a, 0xc5, 0xb6, 0x93, 0xd1, 0x18, 0xc3, 0x0b, 0xd6, 0x22, 0x89, - 0x9b, 0xaf, 0xed, 0x03, 0x8e, 0x37, 0x58, 0xbe, 0xf8, 0x4d, 0xb2, 0xc5, - 0x49, 0xe9, 0xf8, 0xba, 0xf8, 0x45, 0x1e, 0x6a, 0xc5, 0xf8, 0xa1, 0x3f, - 0x95, 0x8a, 0x73, 0xce, 0x11, 0x3d, 0x46, 0x8d, 0xca, 0xb4, 0x6d, 0x09, - 0x5e, 0xf8, 0x59, 0x32, 0xbb, 0xf6, 0x84, 0xf4, 0x21, 0x10, 0x37, 0x2c, - 0x94, 0xe8, 0x6b, 0x1e, 0xf0, 0x83, 0xea, 0x18, 0x8f, 0x1a, 0x14, 0x50, - 0x91, 0xd0, 0xf9, 0xe3, 0xbb, 0xfc, 0x6c, 0x4d, 0x1b, 0x49, 0x4a, 0x3e, - 0xe4, 0xb4, 0x7f, 0x46, 0x4f, 0xda, 0x1d, 0x91, 0xd0, 0xdc, 0x0d, 0xd3, - 0xb9, 0xbe, 0xff, 0xff, 0x9f, 0xb1, 0x67, 0x23, 0x37, 0xfb, 0xfe, 0x73, - 0x50, 0x3c, 0x7a, 0xc5, 0xfd, 0x9e, 0xe6, 0x34, 0x7a, 0xc5, 0xfc, 0xc1, - 0x73, 0x92, 0x05, 0x8a, 0x93, 0xdf, 0x23, 0x0b, 0xf7, 0x83, 0xd8, 0x5d, - 0xfa, 0xc5, 0xfa, 0x3a, 0x40, 0xde, 0x58, 0xb6, 0xcb, 0x17, 0x9a, 0x11, - 0x83, 0x44, 0x7e, 0x10, 0x39, 0x88, 0x45, 0x77, 0xff, 0x80, 0x01, 0x72, - 0x30, 0x32, 0x63, 0x94, 0xac, 0x5f, 0xff, 0xfb, 0xdc, 0x10, 0xfe, 0xf1, - 0x9e, 0x13, 0x10, 0x38, 0x1c, 0xe8, 0x0b, 0x17, 0xff, 0x16, 0x01, 0x88, - 0x11, 0x87, 0x73, 0xac, 0x56, 0x93, 0x06, 0x24, 0xef, 0x39, 0x5f, 0xf0, - 0x51, 0x85, 0x91, 0x40, 0x5e, 0x58, 0xbf, 0x3e, 0xb8, 0x23, 0xac, 0x5f, - 0xc4, 0xcf, 0xfc, 0xe2, 0xc5, 0xf7, 0xdf, 0x91, 0x87, 0x3d, 0x5e, 0x14, - 0xd4, 0xa3, 0x43, 0x78, 0x4a, 0x5f, 0xff, 0xd3, 0xbc, 0x67, 0xdb, 0x79, - 0x03, 0x69, 0xbd, 0x06, 0x58, 0xbf, 0xfd, 0xd7, 0x23, 0x38, 0x59, 0xda, - 0x4b, 0xdc, 0x58, 0xbf, 0xff, 0xfc, 0xf0, 0xc2, 0x8c, 0x2c, 0xdc, 0xb3, - 0x6e, 0x16, 0x7b, 0xce, 0x0e, 0x2c, 0x5f, 0xfc, 0x2f, 0x41, 0xc1, 0x19, - 0xe3, 0x5c, 0x96, 0x2f, 0xf4, 0xfd, 0xce, 0xe5, 0x05, 0x8b, 0xf3, 0x7f, - 0xef, 0x12, 0xc5, 0xff, 0xd9, 0xc7, 0x20, 0x16, 0x7b, 0xf8, 0xb1, 0x7f, - 0xe7, 0x20, 0x16, 0x7b, 0xf9, 0x19, 0xa4, 0x4e, 0xfc, 0xc8, 0x32, 0x9a, - 0x8c, 0x64, 0x07, 0xc2, 0x3c, 0x11, 0xc6, 0xba, 0xf1, 0xab, 0x6a, 0x30, - 0x03, 0x94, 0x32, 0xf8, 0x14, 0x09, 0xe7, 0x90, 0xe6, 0xbc, 0x5d, 0x01, - 0x62, 0xd8, 0xb1, 0x7e, 0x29, 0x17, 0x7f, 0xc5, 0x8b, 0x9f, 0xeb, 0x17, - 0xff, 0xcc, 0x33, 0x5b, 0xd9, 0xf2, 0xcf, 0x7d, 0xd6, 0x2f, 0xe3, 0x74, - 0xc3, 0x62, 0x58, 0xa9, 0x47, 0x80, 0xc7, 0xb0, 0x47, 0x45, 0xbf, 0x17, - 0x64, 0xfb, 0xff, 0x9c, 0x7a, 0x6e, 0xa3, 0x35, 0xa9, 0xd9, 0x62, 0xa3, - 0x11, 0x3d, 0xf5, 0x4b, 0x4a, 0xc5, 0xfd, 0xc9, 0xdc, 0xa4, 0x6b, 0x14, - 0x33, 0x7e, 0xe2, 0x37, 0xcd, 0xd0, 0xe5, 0x62, 0xff, 0xfa, 0x75, 0x90, - 0x76, 0xf6, 0x0d, 0xc5, 0xba, 0x45, 0xc2, 0xe9, 0x62, 0xbe, 0x7d, 0x04, - 0x9f, 0x79, 0xc1, 0xc5, 0x8b, 0x6e, 0xb1, 0x7e, 0x98, 0x00, 0x50, 0x58, - 0xbe, 0xdd, 0x9b, 0x75, 0x49, 0x66, 0x5d, 0x21, 0x2c, 0x56, 0xc8, 0xa2, - 0xc1, 0xd8, 0x84, 0xf4, 0x53, 0xd8, 0xc6, 0xfb, 0xce, 0x7e, 0x2c, 0x5b, - 0x4b, 0x16, 0x35, 0x62, 0x9c, 0xd2, 0xf0, 0x4a, 0xf7, 0x05, 0xba, 0xc5, - 0x1a, 0x6f, 0xf8, 0x41, 0x7e, 0xf1, 0xaf, 0xd7, 0x16, 0x2c, 0x1a, 0xc5, - 0xff, 0x4e, 0xc5, 0x9d, 0xb4, 0xfc, 0x58, 0xbd, 0xa9, 0xec, 0xb1, 0x52, - 0x7d, 0xb0, 0x13, 0xe1, 0xdd, 0xfd, 0xd8, 0x8a, 0x63, 0xe2, 0x58, 0xbf, - 0x1e, 0x4a, 0x1c, 0x58, 0xba, 0x62, 0x58, 0xa9, 0x3f, 0x3d, 0x8c, 0xf4, - 0x51, 0x7d, 0xee, 0x07, 0xc5, 0x8b, 0xee, 0x72, 0x42, 0x58, 0xbf, 0xfc, - 0xde, 0xe7, 0x9f, 0xae, 0x76, 0xf6, 0xc4, 0xb1, 0x66, 0x58, 0xac, 0x45, - 0x4b, 0x92, 0x91, 0x27, 0x13, 0xee, 0xd9, 0xd6, 0x2f, 0x73, 0xe2, 0x58, - 0xbe, 0x60, 0xbe, 0x25, 0x8b, 0xfa, 0x27, 0x2f, 0xe7, 0x4b, 0x15, 0x87, - 0xe2, 0x71, 0xee, 0x12, 0x54, 0xa2, 0xdf, 0x21, 0x13, 0x73, 0x79, 0x62, - 0xf8, 0x01, 0x94, 0x16, 0x82, 0x86, 0x6f, 0xfc, 0x2f, 0x7f, 0xfd, 0x27, - 0xf6, 0x61, 0x7b, 0x9f, 0xc0, 0x32, 0xc5, 0xfe, 0x3c, 0xf5, 0xcd, 0x4f, - 0x65, 0x8b, 0x85, 0xb2, 0xc5, 0xb8, 0xb1, 0x7b, 0xcd, 0x12, 0xc5, 0x31, - 0xb0, 0xf0, 0x95, 0x4a, 0x28, 0x08, 0xdc, 0x49, 0x37, 0xf3, 0x8a, 0x3e, - 0x34, 0x01, 0xd6, 0x2f, 0xbc, 0xc0, 0x95, 0x8a, 0x81, 0xec, 0xf4, 0x6f, - 0x7e, 0x29, 0xfb, 0xe2, 0xc5, 0xd3, 0x05, 0x8a, 0xc3, 0xe0, 0x62, 0x30, - 0x13, 0x5d, 0xd7, 0x96, 0x2f, 0x68, 0x1c, 0x58, 0xc2, 0xe6, 0xfa, 0x41, - 0x30, 0x58, 0xb3, 0xac, 0x5e, 0x26, 0xf2, 0xc7, 0x0b, 0x1b, 0x64, 0x0f, - 0x78, 0x8c, 0xef, 0x0a, 0x03, 0x58, 0xa7, 0x46, 0x77, 0xe1, 0x14, 0x44, - 0xd7, 0xe8, 0xbe, 0xe5, 0xb2, 0xc5, 0xf7, 0xbf, 0x3d, 0x96, 0x2b, 0xa3, - 0xcf, 0x22, 0xab, 0xcc, 0xc7, 0x58, 0xbf, 0xd9, 0xaf, 0xcf, 0x5e, 0xc5, - 0x8b, 0xf3, 0x6c, 0x07, 0xf2, 0xc5, 0xf4, 0x5b, 0x08, 0x0b, 0x17, 0xfe, - 0x72, 0x14, 0x33, 0x9b, 0x60, 0x4b, 0x15, 0x87, 0xcd, 0xe2, 0x6b, 0xfb, - 0xd3, 0xa0, 0x4c, 0x4b, 0x15, 0x2c, 0xaa, 0x88, 0x10, 0x0e, 0x11, 0x79, - 0x0c, 0x3e, 0x93, 0x5e, 0x10, 0xf1, 0xe4, 0x51, 0x42, 0x63, 0x50, 0xa1, - 0x3c, 0x36, 0x3f, 0x0f, 0x16, 0x65, 0x01, 0x09, 0x43, 0xbb, 0x90, 0xe7, - 0xf4, 0x62, 0x82, 0x84, 0x17, 0x62, 0x20, 0x87, 0x23, 0x8d, 0x03, 0x84, - 0x7f, 0x71, 0x0d, 0xff, 0xff, 0xd2, 0x08, 0xc1, 0x94, 0xf5, 0x0f, 0xce, - 0xb6, 0xe6, 0x0b, 0x71, 0x74, 0xb1, 0x51, 0x89, 0xf6, 0x14, 0x6e, 0x57, - 0xec, 0x38, 0x73, 0x1e, 0xb1, 0x7f, 0x73, 0x92, 0x00, 0xf6, 0x58, 0xa8, - 0x1e, 0xee, 0x16, 0x5f, 0xef, 0x36, 0xb6, 0x97, 0x1a, 0xc5, 0xfd, 0xee, - 0x0d, 0xe4, 0x96, 0x29, 0xcf, 0x85, 0x8d, 0x2f, 0xe9, 0x0b, 0xc6, 0xb7, - 0x16, 0x2f, 0xe9, 0x3e, 0xc2, 0xd4, 0x16, 0x2f, 0xb5, 0x81, 0x79, 0x62, - 0xbe, 0x8a, 0x42, 0x20, 0xf1, 0x87, 0x63, 0x0b, 0xfd, 0xb7, 0xf3, 0x7f, - 0xce, 0x96, 0x2f, 0xfa, 0x4a, 0x1c, 0x3b, 0x11, 0xab, 0x15, 0x27, 0xdf, - 0xe3, 0x6b, 0xa4, 0x6b, 0x17, 0xfc, 0x23, 0xe6, 0xfa, 0xe9, 0x82, 0x58, - 0xa8, 0x1f, 0xaf, 0x08, 0x7c, 0x2f, 0x7f, 0xb5, 0x26, 0xe1, 0x39, 0xab, - 0x17, 0xff, 0xcc, 0xdb, 0x7d, 0xe4, 0xa0, 0xff, 0x6e, 0x2c, 0x5f, 0xd0, - 0xd6, 0xa4, 0xfc, 0x58, 0xbf, 0xcf, 0xa0, 0xc7, 0xf9, 0x82, 0xc5, 0xc7, - 0x95, 0x8a, 0x19, 0xfd, 0xb1, 0x7f, 0x71, 0xad, 0xff, 0xf0, 0xff, 0x3c, - 0x33, 0x1f, 0x4e, 0x79, 0x35, 0x62, 0xd2, 0xb1, 0x69, 0x58, 0xac, 0x3f, - 0x3e, 0x28, 0x88, 0x46, 0xff, 0xd0, 0xc8, 0xf6, 0x20, 0x6d, 0x81, 0x2c, - 0x5e, 0x26, 0xf2, 0xc5, 0xfb, 0x3a, 0x04, 0xfd, 0x62, 0xff, 0xe0, 0x83, - 0x39, 0x67, 0x5e, 0x9c, 0x09, 0x62, 0xf0, 0xe4, 0x0b, 0x17, 0xfc, 0xf0, - 0x7f, 0x88, 0xe7, 0x75, 0x8a, 0x94, 0x4f, 0x0d, 0x23, 0xc3, 0xb7, 0xef, - 0x39, 0x61, 0xd6, 0x2f, 0x31, 0x46, 0x0d, 0x77, 0x0b, 0x23, 0x26, 0xea, - 0x32, 0x2d, 0x17, 0x9c, 0xd3, 0xf0, 0xc9, 0x28, 0x52, 0x78, 0xbb, 0xb2, - 0x1c, 0x70, 0xe0, 0x70, 0xc7, 0xee, 0x2f, 0xbc, 0x7e, 0xa5, 0x62, 0xfe, - 0x83, 0x6b, 0x6f, 0x89, 0x62, 0xfd, 0xc9, 0x00, 0x7b, 0x2c, 0x54, 0x47, - 0xb7, 0xc3, 0x0a, 0x94, 0x4e, 0x63, 0xcd, 0xff, 0x17, 0xbf, 0x90, 0x70, - 0x62, 0xc5, 0xff, 0x84, 0x5e, 0xfe, 0x77, 0x38, 0x31, 0x62, 0xff, 0xb3, - 0xdf, 0xc8, 0x38, 0x31, 0x62, 0xfe, 0x7c, 0x03, 0x74, 0xeb, 0x17, 0xfe, - 0xf3, 0xc1, 0xfe, 0x23, 0x9d, 0xd6, 0x2f, 0x30, 0x51, 0x83, 0x4c, 0xfb, - 0x08, 0x4e, 0x70, 0x48, 0x3e, 0x38, 0x0c, 0xb6, 0xa0, 0xac, 0x90, 0xa5, - 0x5c, 0x5f, 0xf9, 0xa1, 0x19, 0x9a, 0xdd, 0x9b, 0x75, 0x48, 0x8a, 0x5f, - 0xf8, 0x71, 0x9d, 0xbc, 0x6e, 0x0d, 0xfa, 0x58, 0xbf, 0xfe, 0xfe, 0x14, - 0x67, 0x99, 0xba, 0xe1, 0xa6, 0xb2, 0xc5, 0x62, 0x27, 0x3c, 0x8f, 0x7f, - 0xe6, 0xf4, 0x64, 0xbe, 0x9f, 0xc2, 0x58, 0xa8, 0xc4, 0xd3, 0xe6, 0x1d, - 0x8c, 0x45, 0x7f, 0xda, 0xd3, 0x85, 0x91, 0x39, 0xd6, 0x2f, 0xb7, 0x9f, - 0xca, 0xc5, 0x39, 0xef, 0x11, 0xdd, 0xfb, 0x5b, 0xb3, 0x6e, 0xa9, 0x32, - 0x4b, 0x71, 0x62, 0xa4, 0xfa, 0x70, 0x80, 0xe6, 0xf7, 0xf4, 0x0a, 0x7e, - 0xc7, 0x58, 0xbe, 0x72, 0x87, 0x16, 0x2f, 0xd3, 0xcf, 0x3e, 0xcb, 0x15, - 0xb1, 0xe5, 0x9a, 0x45, 0x7f, 0x85, 0xb7, 0xe7, 0xdc, 0x75, 0x8b, 0xf8, - 0x43, 0x7d, 0x37, 0x16, 0x2e, 0x6e, 0x2c, 0x52, 0xc5, 0x68, 0xd1, 0xf8, - 0x5e, 0xfb, 0x36, 0x17, 0x4b, 0x14, 0xe7, 0x8c, 0x44, 0x37, 0xd9, 0x9d, - 0x41, 0x62, 0xfd, 0xee, 0x07, 0xc8, 0xc9, 0x4e, 0xaf, 0x1e, 0x34, 0x49, - 0xc3, 0x5f, 0x42, 0x5f, 0xb8, 0x82, 0xa3, 0x15, 0x2c, 0x64, 0x7b, 0x17, - 0xfe, 0x87, 0x1f, 0xc7, 0x3c, 0xfb, 0x8b, 0x17, 0xf4, 0xf5, 0x0d, 0xb0, - 0x25, 0x8b, 0xf4, 0x9d, 0x87, 0x19, 0xd1, 0xf8, 0xf9, 0x02, 0xfb, 0x02, - 0xe7, 0xd6, 0x2f, 0xce, 0x2e, 0xfd, 0xf4, 0xb1, 0x7d, 0x27, 0x70, 0x96, - 0x2f, 0xe7, 0x3c, 0xfc, 0x31, 0xac, 0x54, 0x47, 0xa5, 0xdc, 0x47, 0x7a, - 0x61, 0xc5, 0x8b, 0xe9, 0xc2, 0x1a, 0xc5, 0xdf, 0x7d, 0x1b, 0xe3, 0x8e, - 0xdf, 0xe9, 0xc0, 0x71, 0x9f, 0x65, 0x8b, 0xe7, 0x91, 0x77, 0xeb, 0x17, - 0x9b, 0xd2, 0xb1, 0x7f, 0x1f, 0xcf, 0xf6, 0x3a, 0xc5, 0xff, 0xe7, 0xf7, - 0xf3, 0xd8, 0x53, 0xe9, 0x1a, 0xc5, 0x49, 0xfb, 0x31, 0x75, 0xf3, 0xc6, - 0xcd, 0xba, 0xc5, 0xe1, 0x60, 0xd6, 0x2f, 0xf3, 0xf8, 0x5a, 0x6e, 0x46, - 0x6c, 0xaa, 0x10, 0x64, 0x98, 0xff, 0xbb, 0x24, 0x45, 0x9a, 0x33, 0x39, - 0x3f, 0xe1, 0x25, 0xe2, 0x08, 0xe2, 0x8a, 0x75, 0x71, 0x0d, 0x2b, 0x1a, - 0xff, 0xfd, 0xf6, 0x84, 0x66, 0x6a, 0x77, 0xeb, 0xc2, 0x6e, 0x2c, 0x5f, - 0xf3, 0x74, 0x08, 0xc3, 0xe9, 0xcd, 0x58, 0xa1, 0xa2, 0x6b, 0xcb, 0x77, - 0xf6, 0x6b, 0x76, 0x6d, 0xd5, 0x26, 0xc1, 0x7f, 0xfe, 0xf9, 0x85, 0x9a, - 0xf7, 0x3f, 0x11, 0x86, 0x7e, 0x39, 0x62, 0xfd, 0xf6, 0xd3, 0x9d, 0x62, - 0xbb, 0xd4, 0x43, 0xee, 0xbf, 0x7e, 0xce, 0xda, 0x6e, 0x2c, 0x5f, 0xfb, - 0x5b, 0x4f, 0x9d, 0xe1, 0xc9, 0x58, 0xbd, 0xa1, 0x7d, 0x62, 0xff, 0xe9, - 0x1e, 0x75, 0xe3, 0x58, 0x0f, 0xe5, 0x8b, 0xbd, 0x19, 0x28, 0xf6, 0x19, - 0x4e, 0x15, 0x68, 0xfc, 0x31, 0xea, 0x8c, 0x54, 0x22, 0xf1, 0xdc, 0xde, - 0xce, 0x62, 0xc5, 0xed, 0x66, 0xcb, 0x17, 0xdb, 0xb3, 0x6e, 0xa9, 0x36, - 0xcb, 0xf1, 0xc1, 0x85, 0xba, 0xc5, 0xcd, 0xa5, 0x8b, 0x41, 0x62, 0xdc, - 0x93, 0xd2, 0xd8, 0xa4, 0x42, 0xf5, 0xba, 0x35, 0xb4, 0x3d, 0xe8, 0x41, - 0xdf, 0xbf, 0xe7, 0x00, 0x96, 0x2f, 0xff, 0x4e, 0xde, 0x71, 0xe1, 0x41, - 0xfe, 0x25, 0x8a, 0x73, 0xf3, 0xf9, 0x4d, 0xf9, 0xa2, 0x29, 0x3a, 0xc5, - 0xf4, 0x67, 0x0f, 0x2b, 0x16, 0x25, 0x8a, 0x81, 0xb7, 0x22, 0x6b, 0xfd, - 0x09, 0xd6, 0xd3, 0xad, 0x96, 0x2f, 0xf0, 0x24, 0x0c, 0x42, 0xc5, 0x8b, - 0x83, 0xf2, 0xc5, 0x39, 0xe5, 0xe8, 0xca, 0xa5, 0x14, 0x59, 0x08, 0x1b, - 0xe9, 0x8b, 0x8e, 0xb1, 0x50, 0x56, 0x4d, 0x90, 0xf2, 0x8a, 0x15, 0x27, - 0x21, 0x65, 0xf2, 0x86, 0x17, 0x71, 0x35, 0xff, 0x87, 0xa7, 0x16, 0xd1, - 0x9c, 0xd7, 0x96, 0x2a, 0x31, 0x17, 0x78, 0xed, 0x7f, 0xff, 0xde, 0x73, - 0x63, 0x3c, 0x26, 0x88, 0x98, 0x2d, 0x4f, 0x9b, 0xcb, 0x17, 0xfb, 0x39, - 0xc9, 0x00, 0x7b, 0x2c, 0x5e, 0xfe, 0x6c, 0xb1, 0x7f, 0x30, 0xf3, 0x08, - 0xd5, 0x8b, 0xfb, 0xef, 0xad, 0x34, 0x16, 0x2f, 0xfd, 0xe7, 0x83, 0xfc, - 0x47, 0x3b, 0xac, 0x50, 0xd1, 0xdd, 0x11, 0xb1, 0xc7, 0xb8, 0x5a, 0x19, - 0x75, 0xfe, 0xc8, 0xcd, 0x64, 0x73, 0x9a, 0xb1, 0x60, 0x46, 0x22, 0x1a, - 0x39, 0x32, 0xd9, 0xf5, 0x41, 0xe5, 0x1f, 0x05, 0xff, 0xc5, 0x20, 0x8c, - 0x2c, 0x8a, 0x13, 0xd2, 0xc5, 0x89, 0x62, 0xd0, 0x58, 0xa8, 0xd8, 0xd1, - 0x8c, 0x46, 0xf4, 0x6d, 0xf1, 0xac, 0x5e, 0xdb, 0xee, 0xb1, 0x7f, 0xe8, - 0xda, 0x36, 0xef, 0xbf, 0x7f, 0x0a, 0x40, 0xb1, 0x7b, 0xbe, 0x46, 0xbe, - 0xf8, 0xb1, 0x7d, 0x3f, 0x68, 0x96, 0x2f, 0x76, 0x14, 0x16, 0x2b, 0xc7, - 0x87, 0xd8, 0x8e, 0xfc, 0x50, 0x18, 0x8e, 0xb1, 0x76, 0x79, 0x62, 0xfe, - 0x08, 0x38, 0xe6, 0x20, 0x2c, 0x54, 0x9f, 0x98, 0xca, 0x70, 0x5e, 0xff, - 0xdc, 0x11, 0xf7, 0xfb, 0x44, 0x20, 0x96, 0x2f, 0xe7, 0x0e, 0x2e, 0x0b, - 0xa5, 0x8b, 0xed, 0xfe, 0x2d, 0x2c, 0x5a, 0x36, 0x58, 0xa1, 0x9b, 0xcd, - 0x12, 0xd3, 0xa3, 0x4f, 0xe8, 0x8c, 0xdd, 0x7f, 0xb5, 0xa9, 0x83, 0x74, - 0x12, 0xc5, 0xfc, 0xfb, 0x0c, 0xa4, 0x35, 0x8a, 0xc3, 0xe5, 0x23, 0x6b, - 0xff, 0xf6, 0x81, 0xfc, 0xe7, 0xf3, 0xdc, 0x72, 0xea, 0x0b, 0x17, 0xff, - 0x8d, 0x35, 0x82, 0x9d, 0x7c, 0x26, 0x2d, 0x96, 0x2a, 0x51, 0x4c, 0xea, - 0xf7, 0xf8, 0x43, 0x0f, 0x66, 0x61, 0xac, 0x5f, 0xfd, 0x17, 0xc5, 0x1f, - 0xe0, 0x39, 0x43, 0x8b, 0x17, 0xdb, 0xb3, 0x6e, 0xa9, 0x3c, 0x0b, 0xf7, - 0xba, 0xdd, 0xf4, 0xb1, 0x7f, 0xc0, 0xe1, 0x9c, 0x03, 0x64, 0x4b, 0x17, - 0xfb, 0x5a, 0xcf, 0x72, 0x4e, 0xb1, 0x4e, 0x7e, 0x0c, 0x79, 0x78, 0x6f, - 0xe5, 0x8b, 0xfd, 0x3d, 0xb5, 0xac, 0xeb, 0x8b, 0x14, 0x73, 0xd4, 0xf0, - 0xed, 0xdc, 0xfa, 0xc5, 0x31, 0xba, 0x11, 0x15, 0xfb, 0x59, 0xd9, 0xb4, - 0xb1, 0x7f, 0xed, 0x07, 0xe7, 0xf9, 0x67, 0xb1, 0x62, 0x9c, 0xfa, 0x58, - 0xaa, 0xa0, 0xab, 0x10, 0x64, 0x2e, 0x6d, 0xa4, 0xa3, 0x98, 0xfe, 0x13, - 0x65, 0x0a, 0xee, 0xd0, 0x89, 0xbe, 0xf7, 0x7d, 0x72, 0x25, 0x8b, 0xa6, - 0x56, 0x2b, 0x47, 0x85, 0xe2, 0xcb, 0xf6, 0xc5, 0x2e, 0x35, 0x8b, 0x79, - 0x62, 0xff, 0xdf, 0x76, 0x07, 0x50, 0x13, 0x79, 0x62, 0xce, 0x03, 0xd2, - 0xf0, 0x95, 0xff, 0xf3, 0x9e, 0x77, 0x33, 0x0f, 0x85, 0xe8, 0xec, 0x58, - 0xa9, 0x47, 0xa0, 0xde, 0xbe, 0x4f, 0x73, 0x71, 0x62, 0xf4, 0x76, 0x7d, - 0x62, 0x80, 0x6d, 0xfc, 0x2f, 0x7e, 0x70, 0x99, 0xbb, 0x96, 0x2f, 0xf8, - 0x7a, 0x9f, 0x3e, 0xee, 0x35, 0x8b, 0xde, 0x93, 0xac, 0x56, 0x1e, 0xbf, - 0x8e, 0xaf, 0xa4, 0xa0, 0xcb, 0x17, 0x3c, 0x72, 0xc5, 0x44, 0x8d, 0xed, - 0x42, 0x08, 0xe4, 0x3d, 0xf9, 0x0d, 0xdb, 0x84, 0xb1, 0x7f, 0x49, 0x7b, - 0xb3, 0x6e, 0xb1, 0x7f, 0x42, 0x7b, 0x4e, 0xba, 0x58, 0xbf, 0xff, 0x9b, - 0x68, 0xa1, 0x3a, 0xdb, 0xd0, 0xc8, 0xf6, 0x20, 0x2c, 0x54, 0x68, 0x8d, - 0xc8, 0x0d, 0x61, 0x83, 0x18, 0xdf, 0x75, 0xc9, 0xec, 0xb1, 0x70, 0x7c, - 0x58, 0xbe, 0xf7, 0xf8, 0xeb, 0x17, 0xfb, 0xaf, 0xe0, 0xc3, 0x9e, 0x96, - 0x2a, 0x4f, 0x69, 0xc8, 0xef, 0x16, 0x44, 0xb1, 0x58, 0x8d, 0x68, 0x89, - 0xb4, 0xe7, 0xf2, 0x0b, 0xfb, 0xcd, 0xf3, 0x07, 0x2b, 0x17, 0xfc, 0xde, - 0xe4, 0xb8, 0xf0, 0xeb, 0x15, 0x27, 0xce, 0x45, 0xf7, 0xe8, 0x3b, 0xfd, - 0x96, 0x2f, 0x8b, 0x1c, 0xd5, 0x8b, 0xfa, 0x1e, 0xc2, 0xf7, 0x16, 0x2f, - 0x40, 0x5c, 0x58, 0xb1, 0xfa, 0x3c, 0xc8, 0x8b, 0xab, 0xa4, 0x5f, 0x9c, - 0x9c, 0x36, 0xeb, 0xbf, 0x05, 0x8b, 0xb0, 0xd5, 0x8b, 0xdb, 0xe1, 0x2c, - 0x5f, 0xba, 0xe3, 0xf5, 0xc5, 0x8b, 0x1d, 0x62, 0xfa, 0x1e, 0x7d, 0x96, - 0x2a, 0x4f, 0xfa, 0x21, 0xd3, 0x95, 0xb0, 0x95, 0xff, 0xde, 0x92, 0xdd, - 0xce, 0x77, 0xe0, 0x96, 0x2f, 0xfe, 0x0e, 0x75, 0x03, 0x39, 0x87, 0x9c, - 0x58, 0xa7, 0x44, 0x5f, 0x91, 0x6f, 0x98, 0xb6, 0xfa, 0xc5, 0x4a, 0x7d, - 0x70, 0x32, 0xc1, 0x87, 0x84, 0xb3, 0x43, 0x18, 0x22, 0x2b, 0xb0, 0xeb, - 0x17, 0xe7, 0xf8, 0xdf, 0x8b, 0x16, 0x7d, 0x8d, 0xfc, 0x05, 0xef, 0xd8, - 0x40, 0xee, 0x95, 0x8b, 0x9b, 0x8b, 0x17, 0x84, 0xdc, 0x58, 0xaf, 0x1b, - 0x40, 0xc5, 0xed, 0xc5, 0x8b, 0x8b, 0xcb, 0x17, 0x9f, 0x63, 0xac, 0x56, - 0x1b, 0x5d, 0x0b, 0xd6, 0xc7, 0xcf, 0x12, 0x3d, 0x4a, 0x2b, 0x72, 0x11, - 0x37, 0x44, 0x35, 0x8b, 0xff, 0xff, 0xe2, 0x13, 0x73, 0x0b, 0x9c, 0xcf, - 0xbf, 0x05, 0xb7, 0x3f, 0x9d, 0x7a, 0x56, 0x2f, 0xcf, 0xa6, 0xe8, 0x25, - 0x8b, 0xff, 0x4e, 0xe6, 0x61, 0x0a, 0x19, 0xc5, 0x8a, 0x82, 0x3a, 0x22, - 0x7e, 0x39, 0x55, 0xfe, 0xfb, 0x84, 0x6e, 0x98, 0x25, 0x8b, 0xf7, 0x69, - 0x19, 0xf8, 0xb1, 0x7f, 0x67, 0x05, 0xe9, 0x25, 0x8b, 0xfb, 0x0b, 0x7c, - 0xeb, 0xcb, 0x17, 0xff, 0xfc, 0xfe, 0x63, 0xb1, 0x03, 0x7f, 0xbe, 0xa0, - 0x1c, 0x30, 0x96, 0x2b, 0x11, 0x2c, 0xc5, 0xf7, 0xee, 0xd9, 0x84, 0x6a, - 0xc5, 0xfd, 0x83, 0xfc, 0xf2, 0x3d, 0x62, 0xf4, 0x1b, 0xa5, 0x8b, 0xc3, - 0xfe, 0x2c, 0x5d, 0x3d, 0x74, 0x6e, 0xd8, 0x7a, 0x86, 0xac, 0xef, 0x23, - 0x01, 0xdc, 0xc5, 0xcd, 0xe2, 0x2b, 0xfc, 0x30, 0xc0, 0x42, 0x45, 0x42, - 0x6c, 0xbf, 0x8b, 0x3c, 0x0c, 0xe9, 0x62, 0xff, 0x31, 0x03, 0xd1, 0xd9, - 0xf5, 0x8b, 0x71, 0x62, 0xf9, 0xe7, 0x50, 0x58, 0xbd, 0xf6, 0x83, 0x9b, - 0x43, 0x89, 0x54, 0x7a, 0x26, 0xfe, 0xd5, 0x52, 0x8e, 0xfc, 0x86, 0x4d, - 0xc7, 0xe2, 0xc5, 0xf4, 0x94, 0x23, 0xd6, 0x2f, 0xfe, 0x03, 0x10, 0x0b, - 0x3b, 0x7f, 0x06, 0xb1, 0x7f, 0xf3, 0x03, 0x07, 0x9f, 0x7d, 0x7d, 0x96, - 0x2b, 0xa4, 0x44, 0x71, 0x16, 0xff, 0xcc, 0x0f, 0x3f, 0x3f, 0x25, 0xe5, - 0x8b, 0xfb, 0xae, 0x61, 0xe6, 0x3d, 0x62, 0x9c, 0xfc, 0x04, 0x7d, 0x7f, - 0x83, 0x28, 0x07, 0xa6, 0x02, 0xc5, 0xef, 0x05, 0xba, 0xc5, 0xff, 0x8f, - 0xf2, 0xce, 0xbc, 0x26, 0xe2, 0xc5, 0x61, 0xf0, 0x31, 0x05, 0x80, 0xb1, - 0x7f, 0xb5, 0xa7, 0x3f, 0xf3, 0x65, 0x8a, 0x93, 0xc7, 0xc1, 0x2a, 0x82, - 0xab, 0xdc, 0x26, 0x34, 0x61, 0xe1, 0x5b, 0xf8, 0x4a, 0x00, 0x87, 0x90, - 0x96, 0xf3, 0x3d, 0xfe, 0x6f, 0xb0, 0x67, 0xce, 0x2c, 0x5d, 0xde, 0xf6, - 0x58, 0xb6, 0xeb, 0x17, 0x6f, 0x05, 0x8a, 0xc3, 0xcb, 0xdc, 0x7f, 0xc2, - 0x77, 0x45, 0xc5, 0x8b, 0xfb, 0x36, 0x07, 0x24, 0x96, 0x29, 0x8f, 0x1c, - 0x86, 0x6f, 0xff, 0xf9, 0xc8, 0x50, 0xce, 0x75, 0xed, 0x4e, 0x75, 0x03, - 0x80, 0x4b, 0x14, 0x48, 0x89, 0xf1, 0x05, 0x46, 0xed, 0xda, 0x6f, 0x7a, - 0x4d, 0x1b, 0x11, 0xf7, 0xc1, 0xe8, 0xd6, 0xa1, 0x2e, 0x7b, 0x42, 0x5e, - 0x11, 0x80, 0x0e, 0x12, 0x79, 0x2e, 0x28, 0xd8, 0x62, 0x6f, 0x18, 0xb7, - 0x4c, 0xcf, 0x0f, 0xf8, 0xa3, 0x24, 0xd4, 0x62, 0xc7, 0x85, 0x27, 0xe5, - 0x65, 0x34, 0x27, 0x80, 0x4e, 0x51, 0x85, 0xf2, 0x5b, 0x0f, 0xa7, 0x0d, - 0xbb, 0x42, 0x06, 0x39, 0xfc, 0x38, 0x7f, 0xde, 0xf4, 0x8d, 0x62, 0xf8, - 0x0d, 0xae, 0x2c, 0x5d, 0xd4, 0x64, 0x9e, 0x06, 0x0e, 0xdf, 0xe0, 0x46, - 0x45, 0x09, 0x2f, 0x2c, 0x54, 0x62, 0xa8, 0xc9, 0x94, 0x49, 0xa3, 0x0b, - 0x12, 0xc5, 0xba, 0x58, 0xb8, 0x87, 0x86, 0x90, 0x31, 0x1b, 0xb3, 0xa5, - 0x8b, 0xf0, 0x45, 0x9b, 0x09, 0x62, 0xf7, 0x05, 0xb2, 0xc5, 0x49, 0xe4, - 0xb1, 0x55, 0x3a, 0x20, 0x74, 0xc3, 0x7d, 0xbb, 0x36, 0xea, 0x93, 0xd0, - 0xbf, 0x01, 0xf5, 0x0c, 0x58, 0xad, 0x1e, 0xcf, 0x0c, 0x6f, 0x80, 0x1e, - 0xb7, 0x58, 0xbe, 0x92, 0x13, 0x2c, 0x5f, 0xb3, 0xc5, 0x3b, 0x2c, 0x5f, - 0xf9, 0x9f, 0xc2, 0xd3, 0x76, 0xc1, 0xac, 0x5c, 0x2e, 0x2c, 0x5f, 0x73, - 0xed, 0x1e, 0xb1, 0x43, 0x37, 0xdf, 0x18, 0xbf, 0x49, 0xdb, 0xf2, 0xb1, - 0x78, 0xef, 0xe5, 0x8b, 0xfe, 0x6f, 0x42, 0x4d, 0xf3, 0xec, 0xb1, 0x5a, - 0x3f, 0xf3, 0x93, 0x90, 0xed, 0xfb, 0x0f, 0xf6, 0x1a, 0xc5, 0x4a, 0xb2, - 0xd1, 0xc2, 0xb7, 0x1e, 0xfa, 0x22, 0x72, 0x6d, 0x10, 0xfc, 0xa1, 0x9f, - 0x83, 0x85, 0x07, 0x71, 0x75, 0xff, 0xd8, 0x3f, 0xe1, 0xce, 0xd0, 0xc2, - 0x58, 0xbc, 0x29, 0x02, 0xc5, 0xf7, 0x6c, 0x28, 0xc1, 0x9f, 0x06, 0x90, - 0xef, 0xfb, 0xaf, 0x61, 0x0a, 0x19, 0xc5, 0x8b, 0xe8, 0xa0, 0xc3, 0x58, - 0xbf, 0xcf, 0xc0, 0xc9, 0xbd, 0xc5, 0x8a, 0xc3, 0xd8, 0x34, 0x92, 0xfb, - 0xb9, 0xf5, 0xb2, 0xc5, 0xa3, 0x31, 0x1b, 0x7e, 0x84, 0x97, 0x71, 0x15, - 0x3a, 0x6b, 0x1f, 0x8c, 0x62, 0xa3, 0x15, 0x3c, 0xe4, 0xa5, 0x0a, 0x8d, - 0x4f, 0xe9, 0xf9, 0x1a, 0xdc, 0xe6, 0x35, 0x9d, 0xa1, 0xf3, 0x08, 0xcb, - 0x32, 0xd0, 0xc9, 0xef, 0x28, 0xe9, 0xe9, 0x9f, 0x31, 0x52, 0x5b, 0xf5, - 0x1b, 0xd1, 0xe5, 0xab, 0x7e, 0x70, 0x99, 0xa1, 0x88, 0x09, 0x46, 0x85, - 0x38, 0x1d, 0xc9, 0x46, 0x9e, 0x2f, 0x15, 0x7c, 0x88, 0x14, 0xf0, 0x2d, - 0xe0, 0x47, 0x6c, 0xb1, 0x7f, 0xd1, 0xbc, 0x68, 0x2e, 0x39, 0x75, 0x05, - 0x8b, 0xbd, 0xc5, 0x8a, 0x8d, 0x8f, 0xff, 0xbe, 0xc8, 0x89, 0x16, 0xe3, - 0x9d, 0x62, 0xdf, 0x58, 0xae, 0xf0, 0xd5, 0x08, 0x62, 0xff, 0xe1, 0x4c, - 0x45, 0x9d, 0x98, 0xe7, 0x75, 0x8b, 0xec, 0xfb, 0x79, 0x62, 0xff, 0x63, - 0xe8, 0x00, 0x17, 0x16, 0x2d, 0xde, 0x9a, 0x89, 0xc2, 0x46, 0xe1, 0x15, - 0xe7, 0xce, 0x2c, 0x5f, 0xfe, 0xf7, 0x05, 0x3c, 0xcf, 0x39, 0xda, 0x0b, - 0x17, 0xa7, 0xad, 0x96, 0x28, 0x8f, 0xa7, 0xc9, 0x57, 0xcf, 0x1d, 0x27, - 0x58, 0xbf, 0xdf, 0x9d, 0xb5, 0x38, 0x35, 0x8b, 0xff, 0xe8, 0xb3, 0x02, - 0x30, 0x38, 0x4f, 0x67, 0x20, 0x2c, 0x5f, 0xfd, 0x98, 0x10, 0x70, 0x9e, - 0xce, 0x40, 0x58, 0xbd, 0x8f, 0xd8, 0xc4, 0x4e, 0x44, 0xab, 0x52, 0x98, - 0x3f, 0xe1, 0xa1, 0x7f, 0xde, 0xe6, 0x75, 0x0f, 0x88, 0xd5, 0x8b, 0xdc, - 0x98, 0x96, 0x2e, 0xd4, 0xac, 0x50, 0xd5, 0x36, 0x3c, 0x21, 0x4e, 0x43, - 0xf8, 0xcb, 0x08, 0xa3, 0x87, 0xbd, 0xc3, 0xd6, 0xc5, 0x8b, 0x9b, 0xeb, - 0x15, 0xb9, 0xa8, 0x21, 0x1b, 0xdd, 0x63, 0x2c, 0x5d, 0x30, 0x58, 0xa8, - 0xc3, 0x69, 0xd8, 0x76, 0xf7, 0xf3, 0x8b, 0x17, 0xfc, 0x4e, 0x6f, 0xba, - 0xdd, 0xfe, 0xb1, 0x7b, 0x93, 0xb2, 0xc5, 0xfb, 0xbb, 0xf1, 0xf3, 0xd2, - 0xc5, 0x4a, 0x33, 0x46, 0x4d, 0x83, 0xbd, 0x1e, 0x38, 0xf5, 0xfe, 0xf7, - 0xdd, 0x80, 0x09, 0x58, 0xbe, 0xea, 0x02, 0xd9, 0x62, 0xfe, 0x37, 0x8d, - 0x3d, 0x41, 0x62, 0xd9, 0xd1, 0xeb, 0x39, 0x35, 0xe2, 0xcf, 0x2c, 0x5e, - 0xc2, 0x35, 0x62, 0xe1, 0x32, 0xc5, 0xe6, 0xd4, 0x24, 0xf4, 0x30, 0x70, - 0x87, 0x6e, 0x73, 0xac, 0x56, 0x26, 0xa9, 0xa8, 0x44, 0x89, 0xdf, 0xb8, - 0xf6, 0xff, 0xfc, 0x46, 0x16, 0x3e, 0x1c, 0xb3, 0xdf, 0x7e, 0x96, 0x2f, - 0x8e, 0x22, 0x1a, 0xc5, 0xff, 0xfd, 0x3a, 0x8b, 0x9b, 0xfc, 0x5c, 0xe4, - 0x9a, 0x59, 0xd9, 0x62, 0xf1, 0xb2, 0x12, 0xc5, 0xe6, 0x6d, 0xd5, 0x21, - 0x19, 0x7b, 0x76, 0xd2, 0xc5, 0xfe, 0x83, 0x30, 0xd9, 0xbb, 0x2c, 0x51, - 0xa7, 0xa5, 0xd0, 0xf5, 0x1a, 0x8b, 0xfd, 0xc7, 0xdd, 0xf2, 0xfb, 0xdc, - 0x60, 0x2c, 0x5f, 0x7d, 0xcd, 0x12, 0xc5, 0xdd, 0x0d, 0x62, 0xa3, 0x63, - 0xe0, 0x19, 0x1b, 0x12, 0x5f, 0x9d, 0x8f, 0x9a, 0x58, 0xbf, 0xe1, 0x37, - 0x45, 0x9b, 0x07, 0x05, 0x8b, 0xdb, 0x86, 0x75, 0x8b, 0xff, 0xfc, 0x21, - 0xb1, 0x03, 0x0d, 0xd3, 0xf5, 0x9e, 0xe1, 0x62, 0xc5, 0xff, 0xff, 0x4c, - 0x5e, 0x9e, 0x6a, 0x7c, 0xfb, 0xb8, 0xcc, 0x34, 0x99, 0x62, 0xa5, 0x1d, - 0x51, 0x10, 0x13, 0x0d, 0xff, 0xcf, 0xcf, 0xe1, 0xa6, 0xb1, 0x83, 0xe9, - 0x62, 0xa5, 0x70, 0x83, 0x65, 0x4d, 0xc8, 0xf5, 0x19, 0x01, 0xe1, 0x23, - 0xf3, 0x3e, 0x13, 0xfa, 0x32, 0x6e, 0xc5, 0xf7, 0xdf, 0x7e, 0x1a, 0xb1, - 0x7f, 0x37, 0x5f, 0xc7, 0x09, 0x62, 0xe8, 0x7d, 0x62, 0xb4, 0x78, 0xec, - 0x5f, 0x7f, 0xb3, 0xd8, 0x7d, 0xb0, 0x25, 0x8a, 0x19, 0xeb, 0x11, 0x0d, - 0xff, 0xdc, 0xe6, 0x1c, 0xb3, 0xb1, 0x93, 0xde, 0x2c, 0x53, 0x9f, 0x68, - 0x88, 0x6f, 0xf6, 0x6d, 0xf2, 0xc1, 0x0d, 0x62, 0xbe, 0x7a, 0xa4, 0x43, - 0x7f, 0xb6, 0xd6, 0x7b, 0xcf, 0xe5, 0x8a, 0x58, 0xbf, 0xfb, 0xf9, 0xe2, - 0x98, 0x8c, 0x34, 0x99, 0x62, 0xe1, 0x4c, 0x47, 0xa5, 0xe0, 0xca, 0x94, - 0x5a, 0xf2, 0x10, 0xf7, 0x8a, 0x7a, 0x58, 0xb9, 0xce, 0xb1, 0x76, 0x8d, - 0x58, 0xbf, 0x30, 0x5e, 0xcf, 0xac, 0x53, 0x1e, 0x11, 0x0c, 0xd4, 0x11, - 0x7a, 0x32, 0x7f, 0x8e, 0xf9, 0x66, 0xe6, 0xfa, 0xc5, 0xfe, 0xd6, 0x73, - 0x18, 0xb6, 0x58, 0xbc, 0x71, 0x74, 0xb1, 0x43, 0x3e, 0x9c, 0x17, 0x01, - 0x9d, 0xfe, 0x10, 0xc3, 0xff, 0xda, 0x0b, 0x16, 0x3a, 0xc5, 0xfe, 0x0e, - 0x13, 0xd9, 0xc8, 0x0b, 0x17, 0xf4, 0x27, 0xb3, 0x90, 0x16, 0x2c, 0x11, - 0x87, 0xca, 0x19, 0xb5, 0x0d, 0x14, 0x58, 0xef, 0x7f, 0xed, 0x8c, 0x2c, - 0xf7, 0x3f, 0x86, 0xac, 0x5f, 0xee, 0xa1, 0xc1, 0xfc, 0x47, 0x58, 0xa9, - 0x3f, 0x9c, 0x42, 0xbf, 0x36, 0xc1, 0xb8, 0xd6, 0x2f, 0xfe, 0xc0, 0x85, - 0x3b, 0x78, 0x73, 0xee, 0x2c, 0x5c, 0xf1, 0x2c, 0x54, 0x15, 0x0e, 0x64, - 0x36, 0x3f, 0x09, 0xb6, 0x20, 0x22, 0xaf, 0x23, 0xdf, 0xfe, 0x83, 0x9a, - 0x6b, 0x72, 0x5f, 0x66, 0xf2, 0xc5, 0xff, 0xfc, 0xcf, 0xe9, 0xf9, 0x67, - 0xbe, 0xff, 0xc7, 0x09, 0x62, 0xff, 0xff, 0xfe, 0x2c, 0xd6, 0x9f, 0xb8, - 0xc9, 0x83, 0xfb, 0xf2, 0x76, 0x23, 0x27, 0x5a, 0x7e, 0xcb, 0x14, 0xe9, - 0x99, 0x7d, 0x33, 0xcb, 0x36, 0x25, 0x8b, 0xfb, 0xe6, 0x7f, 0x07, 0x8b, - 0x17, 0xff, 0xff, 0x79, 0xcf, 0xa7, 0xce, 0x88, 0x5e, 0x9f, 0x99, 0xd9, - 0xfd, 0x14, 0xac, 0x53, 0x22, 0x97, 0xc5, 0xf7, 0xc1, 0x18, 0x0d, 0x96, - 0x2f, 0xe7, 0x27, 0xd6, 0xb1, 0x62, 0xa4, 0xf4, 0xf0, 0x9e, 0xff, 0xb1, - 0x88, 0x1a, 0x14, 0x81, 0x62, 0xff, 0xba, 0x86, 0x37, 0x51, 0xd2, 0x75, - 0x8a, 0x94, 0xfc, 0x46, 0x61, 0x90, 0xb6, 0xe9, 0xd7, 0x44, 0x1e, 0x38, - 0xbf, 0x79, 0xe1, 0x9c, 0x58, 0xbf, 0xe8, 0x3f, 0x83, 0xd4, 0xfe, 0x56, - 0x2b, 0x0f, 0x88, 0x45, 0x17, 0xff, 0xe3, 0xc7, 0xbb, 0x34, 0x5e, 0xfe, - 0x43, 0xef, 0xd9, 0x62, 0xff, 0xee, 0x7a, 0x7d, 0x9e, 0x8a, 0x13, 0xf5, - 0x8b, 0xc2, 0x90, 0x2c, 0x5f, 0xdc, 0x38, 0x8a, 0x42, 0x58, 0xbb, 0xa8, - 0x4a, 0x24, 0xb4, 0x8c, 0x21, 0xdb, 0xfe, 0x7e, 0x60, 0xf3, 0xb3, 0xe9, - 0x62, 0xff, 0xff, 0x9b, 0x9f, 0xce, 0xbc, 0x4e, 0x11, 0x93, 0x84, 0x3f, - 0xca, 0xc5, 0xfe, 0xd4, 0x51, 0xcf, 0xac, 0x35, 0x62, 0xfa, 0x75, 0x20, - 0x58, 0xac, 0x3d, 0xbf, 0x1c, 0xdc, 0xd1, 0x2c, 0x5f, 0x01, 0xa2, 0x3a, - 0xc5, 0xff, 0xfb, 0x0e, 0x77, 0xee, 0x33, 0x1f, 0x4e, 0x79, 0x35, 0x62, - 0xe9, 0x3e, 0x91, 0x2a, 0x01, 0x82, 0x24, 0xb8, 0x33, 0xac, 0x5f, 0xfe, - 0xf4, 0x33, 0x59, 0xc3, 0x34, 0x37, 0xd2, 0xc5, 0xfb, 0x35, 0x09, 0x3a, - 0xc5, 0x6c, 0x88, 0xd7, 0x19, 0x3a, 0x65, 0x4a, 0xbd, 0x2c, 0x87, 0x6e, - 0xe7, 0x9d, 0x1d, 0x3c, 0x30, 0xbf, 0x0b, 0x66, 0x86, 0x3d, 0xdb, 0x1d, - 0x22, 0xe0, 0x82, 0x48, 0xbf, 0xdf, 0x78, 0xbf, 0x3b, 0x46, 0x00, 0xd9, - 0x84, 0x33, 0x7d, 0x83, 0xfe, 0x2c, 0x5a, 0x33, 0x73, 0xf1, 0x24, 0xfb, - 0xfd, 0xc2, 0xcf, 0x47, 0x67, 0x96, 0x2f, 0xbb, 0x4f, 0xa5, 0x62, 0xf7, - 0x66, 0xd2, 0xc5, 0xf6, 0x7c, 0xb1, 0x62, 0xb0, 0xf0, 0x38, 0x3f, 0x50, - 0x47, 0x36, 0x15, 0xb9, 0xb7, 0x99, 0x2d, 0xdc, 0xb1, 0x7e, 0x63, 0xe7, - 0x5e, 0x58, 0xbf, 0xcc, 0x5b, 0x98, 0x17, 0xb8, 0xb1, 0x5b, 0x1f, 0xae, - 0x0a, 0x88, 0xa6, 0xff, 0x7b, 0x52, 0x5b, 0x3e, 0xeb, 0x17, 0xb6, 0x98, - 0xf5, 0x8a, 0x58, 0xbf, 0xfb, 0x0b, 0x39, 0xc6, 0xd7, 0x50, 0xe2, 0xc5, - 0xfe, 0xce, 0xbd, 0xfc, 0x16, 0xeb, 0x15, 0xba, 0x21, 0xdc, 0x30, 0x91, - 0x6f, 0xff, 0x39, 0xbc, 0x7c, 0x20, 0x0f, 0x4d, 0xba, 0xc5, 0x61, 0xfd, - 0x7c, 0xbe, 0xff, 0xbe, 0xe5, 0xb1, 0x63, 0xec, 0xb1, 0x7f, 0xfd, 0x8e, - 0x0e, 0x19, 0x87, 0x0f, 0xed, 0xf9, 0x58, 0xbf, 0xff, 0xf8, 0x53, 0xb7, - 0x50, 0xe1, 0x64, 0x46, 0x6f, 0xf9, 0xdc, 0xdd, 0x30, 0x4b, 0x17, 0xfc, - 0x07, 0x8b, 0x8f, 0xf7, 0x3a, 0xc5, 0xff, 0xfe, 0xcf, 0x73, 0xf8, 0x23, - 0xf0, 0xf8, 0x51, 0x7b, 0x52, 0xb1, 0x7f, 0x1c, 0xb0, 0x26, 0x02, 0xc5, - 0xe8, 0x38, 0x16, 0x2e, 0xcf, 0x2c, 0x56, 0x1f, 0x17, 0x0b, 0xa3, 0x87, - 0x6f, 0xf4, 0xff, 0x22, 0x83, 0x6c, 0xb1, 0x7f, 0xf8, 0xb3, 0x85, 0x86, - 0xf3, 0xf2, 0x5e, 0x58, 0xbf, 0xf8, 0xb3, 0xa8, 0x70, 0x6f, 0xda, 0x46, - 0xb1, 0x5b, 0x2e, 0x1e, 0x0e, 0x32, 0x2d, 0xc8, 0x74, 0x72, 0x75, 0x10, - 0x3d, 0x91, 0xd7, 0xa1, 0x88, 0x23, 0x1e, 0xc6, 0xbd, 0xc9, 0x37, 0xe7, - 0xf4, 0xfb, 0x8b, 0x14, 0xb1, 0x7f, 0x75, 0xc6, 0x21, 0x62, 0xc5, 0x39, - 0xba, 0x60, 0xcb, 0xe7, 0xd3, 0x01, 0x62, 0xa0, 0x8a, 0x30, 0x31, 0x70, - 0x7e, 0xfd, 0x85, 0xe3, 0x31, 0x62, 0xff, 0x02, 0x7b, 0x37, 0xfe, 0xeb, - 0x15, 0x18, 0x88, 0xde, 0x18, 0x78, 0xa2, 0xff, 0x19, 0x9f, 0x7d, 0x7d, - 0x96, 0x2f, 0xfb, 0x82, 0xd6, 0x9e, 0x5f, 0x4b, 0x17, 0xfd, 0xed, 0x0a, - 0x2c, 0xdc, 0xa5, 0x62, 0xa5, 0x7c, 0xa3, 0x27, 0x1c, 0x5a, 0x3d, 0xc0, - 0x19, 0xf8, 0xd0, 0x47, 0x36, 0x8f, 0x58, 0xbe, 0x2e, 0xa2, 0x95, 0x8b, - 0x9a, 0x3d, 0x62, 0xff, 0x3f, 0x5e, 0x66, 0x3f, 0x16, 0x2f, 0xfa, 0x73, - 0xa9, 0x68, 0x34, 0x16, 0x2f, 0xec, 0x01, 0x85, 0x80, 0x58, 0xb8, 0xfb, - 0xac, 0x50, 0xcf, 0x1d, 0x8b, 0xaf, 0xfd, 0x81, 0x18, 0xc3, 0x78, 0x9e, - 0x56, 0x2f, 0xd2, 0x5e, 0x90, 0x2c, 0x5e, 0xf0, 0x19, 0x62, 0xe9, 0xd9, - 0x62, 0xb4, 0x7b, 0x87, 0x27, 0xee, 0x1d, 0xbf, 0xfd, 0xa3, 0x94, 0xf4, - 0x1e, 0xbd, 0xc6, 0x3a, 0xc5, 0xec, 0x68, 0xf5, 0x8a, 0xc3, 0xec, 0x24, - 0xdb, 0xff, 0x7d, 0xc8, 0x01, 0xff, 0xed, 0xb2, 0xc5, 0xfa, 0x42, 0x0f, - 0xf2, 0xb1, 0x51, 0xba, 0xae, 0xc9, 0x15, 0xd8, 0x92, 0x03, 0x43, 0x34, - 0xc7, 0xfd, 0x10, 0xb4, 0x27, 0x39, 0x09, 0xef, 0x10, 0x06, 0x83, 0x7f, - 0x11, 0x37, 0x68, 0xa5, 0x62, 0xff, 0xb3, 0xff, 0x68, 0x7b, 0x3e, 0xb1, - 0x7e, 0x2c, 0xfb, 0x79, 0x62, 0xf1, 0x9c, 0xdd, 0x62, 0xa3, 0xcf, 0x1f, - 0xe4, 0xf7, 0xdd, 0x40, 0x51, 0xeb, 0x17, 0xfd, 0x81, 0x7f, 0x00, 0x79, - 0xd2, 0xc5, 0xfe, 0x76, 0x06, 0xb4, 0x2f, 0xac, 0x5f, 0xd2, 0x6e, 0x13, - 0x9a, 0xb1, 0x7f, 0x67, 0xbb, 0xbd, 0x9f, 0x58, 0xa9, 0x4f, 0x26, 0x05, - 0xf9, 0x08, 0x07, 0x25, 0xd1, 0x47, 0xce, 0x88, 0xd3, 0x85, 0xd7, 0xf6, - 0xd1, 0x4f, 0x05, 0xd2, 0xc5, 0xc2, 0xfa, 0xc5, 0xfe, 0x0c, 0x98, 0xdd, - 0x6a, 0x56, 0x2a, 0x4f, 0xff, 0x63, 0x26, 0x18, 0xbf, 0xff, 0x46, 0x69, - 0x89, 0xfd, 0x19, 0xa9, 0xf1, 0x30, 0x16, 0x2f, 0x9b, 0xee, 0x35, 0x8a, - 0xdc, 0xff, 0x3c, 0xb5, 0x68, 0x2c, 0x5f, 0xdf, 0x2c, 0x19, 0x32, 0xc5, - 0x46, 0x86, 0xf9, 0x84, 0xaf, 0x36, 0x12, 0xc5, 0xdd, 0x41, 0x62, 0xff, - 0xc5, 0x20, 0x6f, 0x00, 0x32, 0x82, 0xc5, 0x74, 0x7b, 0x1e, 0x19, 0xb0, - 0x4b, 0x17, 0xcf, 0x13, 0xca, 0xc5, 0xb8, 0xb1, 0x43, 0x36, 0x98, 0x45, - 0x7e, 0xcf, 0x47, 0x67, 0x96, 0x2c, 0x63, 0x1e, 0x59, 0x10, 0x5f, 0x14, - 0x9e, 0x56, 0x2c, 0xfa, 0x3c, 0x8f, 0x13, 0xdf, 0xff, 0xd9, 0xbf, 0x77, - 0x85, 0xd4, 0x39, 0xcf, 0x4c, 0xfb, 0x8b, 0x17, 0xf7, 0x45, 0x9e, 0xc0, - 0x2c, 0x57, 0x11, 0x20, 0x26, 0x2b, 0xf7, 0xa6, 0x7d, 0xc5, 0x8b, 0xe9, - 0x9f, 0x71, 0x62, 0xf7, 0x50, 0xe7, 0x0f, 0x2b, 0xc5, 0x15, 0x88, 0xa2, - 0x13, 0x6d, 0x3a, 0xa5, 0x5f, 0xc3, 0x6b, 0xd1, 0xac, 0xd4, 0x6e, 0xeb, - 0xdb, 0x63, 0x46, 0x48, 0xda, 0x18, 0x53, 0x2a, 0x9f, 0x68, 0x4d, 0x42, - 0x32, 0x21, 0xc7, 0x39, 0x93, 0x8c, 0xa6, 0xc2, 0x57, 0x78, 0xe0, 0xfa, - 0x8e, 0x4d, 0xe1, 0x4d, 0x14, 0xa4, 0xad, 0x4b, 0x83, 0x3c, 0x2f, 0xbf, - 0x2f, 0xcd, 0xa5, 0x01, 0x02, 0x16, 0x05, 0x3e, 0xaf, 0xc9, 0x6a, 0x3e, - 0x94, 0xe2, 0x28, 0x79, 0x76, 0x85, 0x50, 0x4c, 0x31, 0xc4, 0xa1, 0xb9, - 0xf7, 0x4a, 0x78, 0xbf, 0xc5, 0x82, 0xef, 0xf9, 0x9a, 0x58, 0xbb, 0xff, - 0x58, 0xa1, 0x9e, 0x80, 0x67, 0x17, 0x77, 0x7d, 0x62, 0xfd, 0xad, 0xd9, - 0xb7, 0x54, 0x85, 0xc5, 0xed, 0x0b, 0xeb, 0x17, 0xff, 0x0b, 0x5a, 0xc1, - 0xc1, 0xe3, 0xbe, 0x25, 0x8b, 0xf7, 0x80, 0x19, 0x41, 0x22, 0xfd, 0xcf, - 0x7e, 0x40, 0xb1, 0x7e, 0x6d, 0xa7, 0x42, 0x58, 0xb9, 0x8e, 0xb1, 0x68, - 0xc9, 0x4d, 0xbf, 0x62, 0x3c, 0x1b, 0xd1, 0xb9, 0xc7, 0x99, 0x24, 0x45, - 0x51, 0xc5, 0x21, 0x94, 0xdf, 0x0a, 0x19, 0xc5, 0x8b, 0x83, 0xd9, 0x62, - 0x88, 0xde, 0xf8, 0x8e, 0xf1, 0x36, 0xeb, 0x17, 0xa3, 0x9c, 0x0b, 0x17, - 0xb1, 0xfe, 0xb1, 0x78, 0x88, 0x6b, 0x17, 0xd9, 0x85, 0xe5, 0x8b, 0xd2, - 0xdb, 0xac, 0x5d, 0x08, 0xcc, 0x46, 0x99, 0xa4, 0x0e, 0x3b, 0xf2, 0x02, - 0x1c, 0xe0, 0xe7, 0x88, 0x6a, 0x31, 0x77, 0x66, 0x12, 0xf3, 0xba, 0x8e, - 0x6a, 0xff, 0xfb, 0x09, 0xc7, 0x19, 0xc2, 0xc1, 0xff, 0x34, 0xb1, 0x7f, - 0xf1, 0xda, 0x11, 0x99, 0xad, 0xd9, 0xb7, 0x54, 0x8c, 0xc5, 0xf4, 0x64, - 0x6a, 0xc6, 0x58, 0xbf, 0xf8, 0x71, 0x84, 0x26, 0x0c, 0x7f, 0x73, 0x56, - 0x2f, 0xfc, 0x52, 0x78, 0xce, 0x4f, 0x85, 0xc5, 0x8b, 0xff, 0xdd, 0xe0, - 0x1b, 0xde, 0xfe, 0x11, 0x37, 0x96, 0x2f, 0x7d, 0xf8, 0xb1, 0x7d, 0xde, - 0xf2, 0x7c, 0xb1, 0x7f, 0x4f, 0x0a, 0x7d, 0xc5, 0x8a, 0xef, 0xb3, 0xd5, - 0x39, 0x45, 0x46, 0xe8, 0xe9, 0x8d, 0x13, 0xa3, 0x53, 0x95, 0xfb, 0xda, - 0x14, 0xf6, 0x58, 0xbf, 0xf1, 0xb3, 0x9a, 0x33, 0x05, 0xad, 0x96, 0x2e, - 0x93, 0xac, 0x5f, 0xb0, 0xba, 0xf7, 0x78, 0xb1, 0x70, 0x5b, 0x2c, 0x57, - 0x7a, 0x8c, 0xc8, 0xd4, 0x57, 0x04, 0x2c, 0x17, 0xe8, 0xba, 0xdd, 0x96, - 0x2e, 0xd6, 0xcb, 0x17, 0xe7, 0xeb, 0x33, 0x65, 0x8a, 0x11, 0xe1, 0x76, - 0x19, 0xa1, 0x9f, 0xd6, 0x2b, 0x5d, 0x1d, 0x1b, 0xac, 0x5c, 0x17, 0x96, - 0x2a, 0x36, 0x3d, 0xae, 0xfb, 0x21, 0x19, 0x05, 0xf4, 0x6f, 0xde, 0xf2, - 0x56, 0x2f, 0x46, 0xf1, 0xae, 0x35, 0xac, 0x5b, 0xbe, 0xb1, 0xb9, 0xee, - 0x77, 0xc2, 0xdb, 0x44, 0xb1, 0x74, 0xf1, 0x62, 0xe8, 0xda, 0x0b, 0x17, - 0x07, 0xc5, 0x8a, 0xef, 0xb4, 0x4d, 0xec, 0x77, 0xd0, 0x9c, 0x42, 0xfe, - 0x1d, 0xb9, 0xb8, 0xb1, 0x7f, 0x9b, 0xae, 0x31, 0x0b, 0x16, 0x2f, 0xfd, - 0x0c, 0xff, 0xda, 0x0e, 0xe4, 0xb1, 0x5a, 0x44, 0x38, 0x05, 0xfc, 0x67, - 0x74, 0x74, 0x6e, 0xb1, 0x7e, 0xe3, 0x93, 0x6c, 0xb1, 0x7f, 0xef, 0xbf, - 0xb8, 0xdd, 0x6d, 0x81, 0x2c, 0x5f, 0xfb, 0xb4, 0xfd, 0xe6, 0x28, 0xa7, - 0x75, 0x8a, 0xef, 0x51, 0xfb, 0x1b, 0x18, 0x77, 0xc2, 0x0d, 0xca, 0x1d, - 0x0a, 0xe8, 0xe8, 0xdd, 0x62, 0xe7, 0x3a, 0xc5, 0xfb, 0xc4, 0xfd, 0x79, - 0x62, 0xbb, 0xe1, 0xf0, 0x6e, 0x40, 0x18, 0xbd, 0xfe, 0x01, 0xc3, 0xd3, - 0xed, 0x2b, 0x17, 0xc7, 0x6f, 0x4a, 0xc5, 0xff, 0xff, 0xdf, 0x0c, 0x71, - 0x9f, 0xcf, 0x64, 0x97, 0xb8, 0x58, 0x3f, 0xcf, 0x65, 0x8a, 0x8d, 0xd1, - 0x9f, 0x1a, 0x8d, 0xbb, 0x11, 0x5a, 0x25, 0x8b, 0xf4, 0x8c, 0x30, 0x71, - 0x62, 0xd1, 0xbf, 0xcd, 0xe9, 0x09, 0xdf, 0xdc, 0xfc, 0x9d, 0xc6, 0xb1, - 0x73, 0x12, 0xc5, 0x70, 0xf1, 0x3c, 0x5d, 0x73, 0x0d, 0x62, 0xfd, 0x91, - 0x42, 0x4e, 0xb1, 0x51, 0xba, 0x34, 0x63, 0x66, 0xfe, 0xf8, 0x44, 0x18, - 0xbd, 0xf7, 0x79, 0x1a, 0xf9, 0x2b, 0x16, 0x12, 0xc5, 0x77, 0xd4, 0xf0, - 0x1c, 0xba, 0xf7, 0x7d, 0xc6, 0xb8, 0xd6, 0xb1, 0x77, 0xb1, 0x62, 0xa3, - 0x59, 0xe4, 0x74, 0x63, 0x74, 0x74, 0x6e, 0xb1, 0x7f, 0xff, 0xff, 0x77, - 0xfd, 0x4f, 0x7c, 0xef, 0xb1, 0xef, 0xdb, 0x50, 0x8b, 0xb0, 0xbb, 0xeb, - 0x1a, 0xbb, 0xf8, 0xd7, 0xdf, 0x53, 0x0c, 0xfc, 0x72, 0xc5, 0xbe, 0xb1, - 0x7f, 0xd3, 0xb6, 0x9b, 0xf2, 0x77, 0x58, 0xbb, 0x3e, 0xb1, 0x44, 0x7a, - 0x1e, 0x39, 0xbf, 0xff, 0xe7, 0xf0, 0x7a, 0x9f, 0xce, 0x6e, 0x37, 0x2d, - 0x8f, 0x30, 0x58, 0xbc, 0x09, 0x02, 0xc5, 0xff, 0x60, 0x45, 0x86, 0xfd, - 0xa3, 0xd6, 0x2b, 0x0f, 0x68, 0x87, 0x6f, 0x18, 0x78, 0xf5, 0x8b, 0xdd, - 0x39, 0xd6, 0x2f, 0xd2, 0xe3, 0xc3, 0xac, 0x5f, 0xa2, 0xce, 0xd3, 0xc5, - 0x8a, 0x93, 0xd2, 0x62, 0x7a, 0xd9, 0x16, 0x5f, 0x22, 0x27, 0x0b, 0xfb, - 0x9a, 0x9c, 0xf7, 0x16, 0x2c, 0x25, 0x8a, 0x93, 0xc0, 0xc2, 0xeb, 0x9f, - 0x65, 0x8b, 0xfd, 0x21, 0xfd, 0xe1, 0x27, 0x58, 0xa8, 0x1e, 0x67, 0x06, - 0x2f, 0xe8, 0xa5, 0x87, 0x84, 0xb1, 0x7c, 0xe3, 0xc8, 0xf5, 0x8a, 0x39, - 0xe9, 0x00, 0xb6, 0xfa, 0x74, 0x66, 0xcb, 0x17, 0xf0, 0xd8, 0xfa, 0x9e, - 0x2c, 0x56, 0x1f, 0xaf, 0xc8, 0x98, 0x96, 0xff, 0xdd, 0x84, 0xdb, 0x8d, - 0xfb, 0x48, 0xd6, 0x2f, 0xe9, 0x3b, 0x42, 0x7c, 0xb1, 0x7f, 0xf4, 0x9d, - 0xbd, 0x9d, 0x00, 0xe1, 0xfd, 0x62, 0xff, 0xf6, 0xfa, 0x16, 0xdd, 0x71, - 0xf5, 0xbf, 0xf1, 0x62, 0xf0, 0x03, 0xf2, 0xc5, 0xf3, 0xf6, 0x60, 0x2c, - 0x54, 0xa2, 0x4f, 0x14, 0x3c, 0x3f, 0x7f, 0xf6, 0x7d, 0x87, 0xf7, 0x30, - 0xf9, 0xba, 0xc5, 0x0d, 0x3e, 0xcc, 0x2d, 0x35, 0x13, 0xe5, 0xa5, 0x0d, - 0xae, 0x17, 0x5f, 0x3e, 0xc2, 0x25, 0x8b, 0xf6, 0x6d, 0x80, 0x89, 0x62, - 0x8c, 0x3c, 0xdf, 0x11, 0xdf, 0x9f, 0xb8, 0xd7, 0xdd, 0x62, 0xff, 0x85, - 0x0e, 0x31, 0xd8, 0x80, 0xb1, 0x73, 0xf9, 0x62, 0xdb, 0xac, 0x51, 0x86, - 0xab, 0xbd, 0x17, 0xad, 0x22, 0xdd, 0x8b, 0x40, 0xc7, 0x7e, 0x04, 0xf3, - 0x3a, 0x58, 0xbe, 0x31, 0xda, 0x25, 0x8a, 0xd1, 0xe6, 0xf0, 0xa6, 0xc7, - 0x58, 0xa9, 0x36, 0x83, 0x22, 0xbf, 0xc6, 0x61, 0x36, 0x81, 0x1c, 0xb1, - 0x71, 0x41, 0x62, 0xf6, 0xa4, 0xd5, 0x8b, 0xff, 0xe6, 0xfe, 0x74, 0x0f, - 0x84, 0xdf, 0x8b, 0xe2, 0x58, 0xa7, 0x44, 0x4c, 0x42, 0xe7, 0x1e, 0xbf, - 0xc3, 0xd3, 0x01, 0xb3, 0x4b, 0x17, 0xf6, 0x72, 0x43, 0x29, 0x58, 0xbf, - 0xf7, 0x99, 0xe7, 0x61, 0x79, 0x83, 0x58, 0xbb, 0x87, 0x58, 0xa1, 0xa7, - 0x51, 0x90, 0xc0, 0x73, 0x0f, 0x99, 0xb1, 0x68, 0x90, 0x2d, 0x8b, 0x17, - 0x31, 0xd6, 0x2b, 0x86, 0xa3, 0xb8, 0x46, 0xee, 0xef, 0x2c, 0x5b, 0xbf, - 0x58, 0xb0, 0x24, 0xd9, 0x08, 0x6e, 0xf1, 0xdb, 0xcb, 0x16, 0xef, 0xd6, - 0x2f, 0xe9, 0xed, 0x3e, 0x6e, 0x2c, 0x56, 0x1f, 0x19, 0x0e, 0xf0, 0x5e, - 0xff, 0xe3, 0x00, 0x01, 0x73, 0x46, 0x19, 0xf8, 0xe5, 0x8b, 0xff, 0x75, - 0xfc, 0xe4, 0xf3, 0x8d, 0xf5, 0x8b, 0xf4, 0x70, 0xc9, 0x82, 0x58, 0xbf, - 0xfc, 0x73, 0x35, 0x9e, 0x6e, 0x8c, 0xf6, 0x01, 0x62, 0xa5, 0x33, 0x53, - 0x96, 0xb2, 0x77, 0x90, 0x04, 0x59, 0x7f, 0x36, 0xd2, 0x52, 0x05, 0x8a, - 0x58, 0x23, 0x5b, 0x7f, 0xf4, 0x4e, 0x42, 0x31, 0xfa, 0x83, 0x79, 0x62, - 0xff, 0xfe, 0xdc, 0xa4, 0xe6, 0x4e, 0xb4, 0xfd, 0xb4, 0xcc, 0x05, 0x8b, - 0xf4, 0x1b, 0xcc, 0x6a, 0xc5, 0x4a, 0x21, 0xf1, 0x7a, 0xf8, 0xb0, 0x12, - 0xb1, 0x44, 0x78, 0x5d, 0x88, 0x6f, 0x0f, 0x06, 0xb1, 0x4b, 0x17, 0xd9, - 0xec, 0x02, 0xc5, 0x8d, 0x01, 0xae, 0x20, 0xca, 0xc3, 0xf2, 0x64, 0xbb, - 0xe6, 0x3b, 0xc4, 0xb1, 0x7f, 0x38, 0x4f, 0xcc, 0xdd, 0x62, 0xa5, 0x50, - 0xbb, 0xc6, 0x21, 0xa8, 0x4a, 0xb1, 0x07, 0x08, 0xed, 0x2b, 0x17, 0xbd, - 0x30, 0x58, 0xbf, 0xf6, 0xc2, 0x68, 0xb1, 0xf4, 0x28, 0xf5, 0x8b, 0x85, - 0x05, 0x8a, 0x35, 0x11, 0x4e, 0x22, 0xc3, 0xbd, 0x91, 0x2f, 0x1e, 0x60, - 0xb1, 0x7b, 0x8d, 0x12, 0xc5, 0x49, 0xbb, 0xf0, 0xed, 0xfd, 0x19, 0x17, - 0x7b, 0xf6, 0x25, 0x8a, 0x8d, 0xdb, 0x19, 0xde, 0xfb, 0x20, 0xef, 0x90, - 0xce, 0xd9, 0x8a, 0x04, 0x23, 0x86, 0x16, 0x43, 0x4b, 0x77, 0x0e, 0x9b, - 0x1e, 0x56, 0xac, 0x50, 0xa9, 0xd4, 0x36, 0x8f, 0x0b, 0x0f, 0xc7, 0x90, - 0xd0, 0x82, 0x02, 0xb1, 0x47, 0x7d, 0xc7, 0x6f, 0x4a, 0x32, 0xed, 0x0d, - 0xe0, 0xde, 0x7b, 0x88, 0x2f, 0x9a, 0x01, 0x9d, 0x62, 0xf6, 0xe4, 0x05, - 0x8b, 0x6b, 0x47, 0x85, 0xc2, 0x4b, 0xf0, 0xa7, 0xe5, 0x2b, 0x17, 0x98, - 0xb7, 0x58, 0xbd, 0xe2, 0x95, 0x8b, 0xe2, 0x2c, 0xf2, 0xc5, 0xe2, 0xce, - 0x96, 0x2d, 0xd2, 0xc5, 0xf3, 0x07, 0x9b, 0x2c, 0x56, 0x1b, 0x7f, 0x89, - 0xde, 0x8b, 0xf2, 0xb1, 0x5d, 0xea, 0x33, 0xe4, 0x73, 0x62, 0x11, 0xaa, - 0x39, 0x05, 0x71, 0x33, 0xa0, 0xa1, 0xd9, 0x7c, 0x51, 0x48, 0xd6, 0x2e, - 0xeb, 0xcb, 0x17, 0xdf, 0x8a, 0x46, 0xb1, 0x7b, 0xbd, 0x14, 0xac, 0x5e, - 0xd6, 0xc3, 0x58, 0xbe, 0xc0, 0x07, 0xe5, 0x8b, 0xf6, 0xa4, 0x36, 0x25, - 0x8a, 0x19, 0xf5, 0xf4, 0x3e, 0x02, 0x4a, 0x95, 0x5a, 0x03, 0x28, 0xc8, - 0xd8, 0x5c, 0xaa, 0x22, 0x36, 0x19, 0x01, 0x20, 0xa1, 0x1b, 0x7e, 0x21, - 0xfc, 0x38, 0xe5, 0x8b, 0xff, 0x36, 0x77, 0x3e, 0x8d, 0x16, 0x7d, 0x62, - 0xf7, 0xe7, 0xa5, 0x8b, 0xf4, 0x9c, 0xb2, 0x25, 0x8b, 0xf9, 0xf0, 0x87, - 0xf9, 0x58, 0xb1, 0xd6, 0x2c, 0x75, 0x8b, 0xa4, 0x96, 0x2b, 0x63, 0x50, - 0x10, 0x95, 0xef, 0xe4, 0x4b, 0x14, 0x34, 0x67, 0xee, 0x51, 0x1e, 0x59, - 0xc3, 0xaf, 0x11, 0xd2, 0xc5, 0xff, 0x89, 0xbf, 0x24, 0xdf, 0x90, 0x2c, - 0x5f, 0xd2, 0x5e, 0xfb, 0x8d, 0x62, 0xfe, 0xd4, 0x90, 0xb3, 0xeb, 0x17, - 0xfc, 0xdd, 0x63, 0xef, 0xbb, 0x0d, 0x62, 0xfb, 0x53, 0x84, 0xb1, 0x7c, - 0xde, 0x80, 0x16, 0x2f, 0x7b, 0x98, 0xb1, 0x4b, 0x17, 0xe2, 0xc8, 0x9f, - 0x65, 0x8b, 0x0b, 0xa3, 0x6a, 0x70, 0xcb, 0xda, 0xc2, 0x58, 0xb0, 0x96, - 0x2f, 0xf3, 0xee, 0xd9, 0xac, 0xf2, 0xc5, 0x49, 0xf0, 0x80, 0x73, 0x82, - 0x57, 0x85, 0x1b, 0x92, 0xc5, 0x0d, 0x52, 0x01, 0xa7, 0x9b, 0x96, 0xe8, - 0xb4, 0xe7, 0x7f, 0x21, 0x62, 0x3e, 0x29, 0x7a, 0x11, 0x3d, 0xc5, 0xd7, - 0xfd, 0xa9, 0xc8, 0x4f, 0xe4, 0x0b, 0x17, 0xff, 0x8c, 0xfb, 0x3f, 0x80, - 0x22, 0x26, 0x82, 0xc5, 0xff, 0xe7, 0xe0, 0x8f, 0x9b, 0xfe, 0x4b, 0xdc, - 0x58, 0xbd, 0x01, 0x0d, 0x62, 0xcf, 0x03, 0xe9, 0x89, 0x2e, 0xfb, 0x39, - 0x3a, 0x58, 0xbf, 0xc7, 0xce, 0x33, 0x75, 0x05, 0x8a, 0x23, 0xd6, 0x0c, - 0x8a, 0xe8, 0xdf, 0xbd, 0x58, 0xbe, 0x7d, 0xdc, 0x6b, 0x17, 0xfd, 0xf9, - 0x71, 0xbf, 0x36, 0x65, 0x8a, 0xef, 0x87, 0xfd, 0x24, 0x4e, 0x47, 0x52, - 0xbd, 0x91, 0xb1, 0x6c, 0x10, 0xb2, 0x1d, 0xbb, 0xa7, 0x3c, 0xa4, 0xcd, - 0x42, 0x58, 0xe7, 0x1f, 0x85, 0x98, 0x1f, 0x8a, 0x14, 0x17, 0xff, 0xff, - 0xff, 0xff, 0xbb, 0xe7, 0x7b, 0x9d, 0xf2, 0x36, 0xef, 0xbe, 0xfb, 0xdf, - 0xbf, 0x98, 0xd7, 0x1b, 0x6b, 0x6e, 0xec, 0x10, 0xfb, 0xeb, 0x31, 0xdd, - 0x07, 0xf8, 0xda, 0x66, 0x36, 0x8f, 0x8d, 0x5e, 0x30, 0xcf, 0xc7, 0x2c, - 0x5f, 0xf1, 0x0e, 0x27, 0x2e, 0xa1, 0xc5, 0x8b, 0xfe, 0xd6, 0xa4, 0xbd, - 0xfc, 0x82, 0xc5, 0xff, 0xf6, 0xbe, 0x13, 0x0f, 0x36, 0x17, 0xb5, 0xa9, - 0x58, 0xbf, 0xfd, 0x0f, 0x8a, 0x75, 0x19, 0xf7, 0xdd, 0xb4, 0xb1, 0x7e, - 0x0f, 0x5c, 0x62, 0x58, 0xae, 0x8f, 0xe3, 0xe9, 0xf5, 0x29, 0xb1, 0x61, - 0xdb, 0x1c, 0x82, 0x19, 0x77, 0xf8, 0x38, 0xb9, 0x3e, 0x91, 0xac, 0x5b, - 0x8b, 0x17, 0x85, 0xa0, 0x2c, 0x5c, 0x28, 0x18, 0x6c, 0x37, 0x12, 0xbf, - 0xf7, 0xf0, 0xb0, 0xdc, 0x2c, 0x1a, 0xc5, 0xff, 0x82, 0x9f, 0x0d, 0xe3, - 0xf9, 0x27, 0x58, 0xbf, 0xbe, 0xfe, 0x29, 0x3a, 0xc5, 0x74, 0x7e, 0x04, - 0x87, 0x7c, 0xde, 0xe6, 0xcb, 0x17, 0xdc, 0xce, 0xbc, 0xb1, 0x7a, 0x29, - 0x09, 0x62, 0xf9, 0xb8, 0xe3, 0x58, 0xac, 0x3c, 0x10, 0x87, 0xef, 0xc3, - 0xfc, 0x96, 0xcb, 0x17, 0xce, 0x5e, 0xe2, 0xc5, 0xff, 0xff, 0x1d, 0xf5, - 0xf1, 0x72, 0x13, 0xdb, 0x52, 0x5e, 0xfe, 0x41, 0x62, 0xa0, 0x88, 0xb7, - 0x22, 0xbf, 0xf3, 0xf9, 0xf7, 0x71, 0xfb, 0x37, 0x58, 0xad, 0x95, 0x5f, - 0xc0, 0xbf, 0x21, 0x5b, 0x11, 0x16, 0x89, 0x3e, 0xca, 0x44, 0x5e, 0x85, - 0xa7, 0x71, 0x15, 0xc7, 0x1a, 0xc5, 0xf8, 0x9b, 0x4d, 0x05, 0x8b, 0x9f, - 0xb2, 0xc5, 0xfe, 0x21, 0xfe, 0x4f, 0xdc, 0x25, 0x8a, 0x93, 0xf7, 0x19, - 0x3b, 0x0c, 0xde, 0x91, 0xca, 0xc5, 0xfb, 0x3f, 0xfc, 0x02, 0xc5, 0xb7, - 0x39, 0xe2, 0x10, 0xe5, 0xf3, 0x04, 0xd1, 0xeb, 0x14, 0xc7, 0x9c, 0x45, - 0x17, 0xe1, 0x6f, 0xf7, 0x09, 0x62, 0xfb, 0xd1, 0xd9, 0xf5, 0x8b, 0xf8, - 0x23, 0x3d, 0xcc, 0x09, 0x62, 0xfd, 0xb4, 0x1c, 0xb1, 0x62, 0xff, 0xff, - 0x31, 0x6e, 0x58, 0x3f, 0x88, 0xcf, 0xcc, 0x35, 0x3b, 0x2c, 0x56, 0x23, - 0x8d, 0xc9, 0x98, 0xc8, 0x45, 0x17, 0x4f, 0xd6, 0x2f, 0xe0, 0xca, 0x7f, - 0x30, 0x58, 0xbf, 0xff, 0x8d, 0x2c, 0x00, 0xb8, 0x64, 0x1f, 0xf3, 0xb9, - 0x32, 0xc5, 0xfb, 0x93, 0x1f, 0xa9, 0x58, 0xa3, 0x51, 0x9a, 0x71, 0x76, - 0x2e, 0x02, 0xed, 0xff, 0x3e, 0xf1, 0x43, 0xf2, 0x46, 0xac, 0x5f, 0xdb, - 0x99, 0xf6, 0x27, 0x58, 0xbd, 0x27, 0xf2, 0xc5, 0x12, 0x22, 0x04, 0x78, - 0x11, 0x7d, 0xfe, 0xc0, 0xa7, 0xc4, 0xdc, 0x58, 0xbf, 0x16, 0x1d, 0xa0, - 0xb1, 0x7f, 0xff, 0xee, 0x72, 0x40, 0x19, 0xf8, 0xf8, 0x42, 0x86, 0x70, - 0x26, 0xe9, 0x62, 0x8d, 0x44, 0xb0, 0x44, 0xf7, 0x9f, 0xee, 0xb1, 0x52, - 0x99, 0xd3, 0x98, 0x34, 0x32, 0x7c, 0x4b, 0x74, 0x92, 0xc5, 0xf6, 0x6e, - 0x3c, 0x58, 0xba, 0x74, 0xb1, 0x4b, 0x10, 0x2d, 0xef, 0xcc, 0x3f, 0xc9, - 0x2c, 0x5f, 0x10, 0xc3, 0xe9, 0x62, 0xfc, 0xfb, 0x1e, 0x77, 0x58, 0xb8, - 0x5e, 0x58, 0xbc, 0xda, 0x81, 0x88, 0xe3, 0x73, 0xa3, 0x8d, 0xb1, 0x3f, - 0x89, 0x63, 0x8a, 0xaf, 0xf3, 0x14, 0x59, 0xb0, 0xa0, 0xb1, 0x51, 0xb3, - 0x37, 0x92, 0x65, 0x4c, 0x0d, 0x03, 0x25, 0x92, 0x9b, 0x08, 0xd7, 0x84, - 0x7e, 0xa1, 0x7e, 0x72, 0x0f, 0xc6, 0x1c, 0xd1, 0x83, 0x94, 0x7f, 0xfe, - 0x40, 0x14, 0x3e, 0x42, 0x6a, 0xbf, 0xf6, 0x81, 0x9b, 0xfe, 0x4b, 0xdc, - 0x58, 0xbf, 0xbe, 0xf1, 0xe2, 0x0e, 0x25, 0x8b, 0xed, 0xf3, 0xaf, 0x2c, - 0x5c, 0x6b, 0x18, 0x7b, 0x3d, 0x8d, 0x2e, 0x61, 0xac, 0x5d, 0xda, 0x3d, - 0x62, 0xff, 0x81, 0x30, 0x18, 0x9b, 0x50, 0x58, 0xa3, 0x51, 0x3f, 0xa3, - 0x16, 0x17, 0x21, 0xdb, 0xff, 0xf6, 0xb4, 0xf9, 0xd8, 0x85, 0xc3, 0x38, - 0x26, 0xe2, 0xc5, 0x2c, 0x5f, 0xff, 0x71, 0xe3, 0xb3, 0x7f, 0xb9, 0x10, - 0xb5, 0xb2, 0xc5, 0x68, 0xf8, 0x3c, 0x19, 0x7f, 0x7b, 0x0f, 0xd6, 0x1d, - 0x62, 0xa5, 0x30, 0xac, 0x85, 0xcb, 0x91, 0x5f, 0xe3, 0x9d, 0xa1, 0xc7, - 0x82, 0xc5, 0xfe, 0x34, 0xc9, 0xe8, 0x1a, 0x95, 0x8a, 0xc3, 0xeb, 0x63, - 0x4a, 0x95, 0x67, 0x8f, 0x19, 0xc7, 0xe3, 0x46, 0x28, 0x4f, 0x5f, 0xf0, - 0x44, 0xc6, 0xe0, 0xdc, 0x96, 0x2f, 0xff, 0x76, 0xc1, 0xfe, 0x7b, 0x1e, - 0x49, 0x83, 0x58, 0xb4, 0x4b, 0x15, 0x87, 0xc2, 0x24, 0xeb, 0x86, 0xeb, - 0x17, 0xf7, 0xdc, 0x29, 0x21, 0xac, 0x5a, 0x18, 0x78, 0xbb, 0x8b, 0xde, - 0xd4, 0xf9, 0x62, 0xfa, 0x1c, 0x78, 0x2c, 0x58, 0x7a, 0x3c, 0x06, 0x1d, - 0xa9, 0x4e, 0x3f, 0x50, 0x9a, 0x66, 0x61, 0x34, 0x5f, 0x08, 0xbd, 0xc5, - 0x8b, 0xfb, 0x82, 0x72, 0x7e, 0x2c, 0x5e, 0x9d, 0x4a, 0xc5, 0x18, 0x79, - 0x3f, 0x2d, 0xba, 0x77, 0x58, 0xad, 0xd1, 0x4f, 0xa6, 0xce, 0xe2, 0x3b, - 0xd0, 0x8e, 0x09, 0x62, 0xe0, 0x3a, 0xc5, 0xc2, 0xf2, 0xc5, 0xf8, 0xf0, - 0xf8, 0x7c, 0x58, 0xb6, 0x8c, 0x3d, 0xa8, 0xe1, 0x70, 0xc6, 0x2f, 0xcc, - 0x11, 0x60, 0xd6, 0x2a, 0x51, 0xbc, 0xef, 0x9a, 0x3a, 0xbf, 0xf1, 0x4e, - 0xe6, 0xb6, 0x69, 0xc0, 0xb1, 0x7f, 0x73, 0x1f, 0x5a, 0x65, 0x8b, 0xe3, - 0x00, 0xde, 0x58, 0xbf, 0xfe, 0x68, 0x7b, 0x3a, 0x83, 0x14, 0x33, 0xaf, - 0x2c, 0x57, 0x0f, 0xd7, 0xc4, 0x95, 0xb2, 0x60, 0x60, 0x3f, 0xf4, 0x28, + 0x4f, 0x7f, 0xfb, 0x1e, 0x02, 0xd6, 0x7f, 0xf3, 0x91, 0xeb, 0x17, 0xff, + 0xf8, 0x8c, 0x92, 0xf6, 0x85, 0xc1, 0x68, 0x1e, 0xf6, 0x7d, 0x62, 0xfc, + 0xc4, 0x30, 0xfb, 0x58, 0xae, 0xd1, 0x1b, 0xd4, 0xc7, 0x4e, 0x99, 0x17, + 0xc8, 0x9a, 0x1b, 0x37, 0xf8, 0x18, 0xe3, 0xe1, 0xd9, 0x62, 0xff, 0x1f, + 0x8f, 0x9d, 0x1b, 0x4b, 0x17, 0x60, 0xd6, 0x2f, 0xff, 0xd9, 0xfc, 0x34, + 0xcc, 0x19, 0x8e, 0x20, 0x02, 0x56, 0x2f, 0x9c, 0xd6, 0xdd, 0x62, 0xff, + 0xfb, 0x0e, 0x61, 0x0b, 0x86, 0x73, 0x34, 0xde, 0x58, 0xbf, 0xe1, 0x40, + 0xcf, 0xce, 0xc4, 0x25, 0x8b, 0xff, 0x1b, 0xa7, 0x9f, 0x45, 0x06, 0x82, + 0xc5, 0x68, 0xff, 0x44, 0x79, 0x5b, 0xa6, 0x2b, 0xc2, 0x4f, 0x43, 0x3e, + 0x99, 0x3f, 0x02, 0x35, 0xf0, 0xb8, 0xa3, 0x6d, 0xbe, 0xd6, 0xe2, 0x02, + 0xc5, 0xfd, 0x84, 0xda, 0xd3, 0xac, 0x53, 0x9e, 0x8f, 0xc9, 0x6f, 0x88, + 0x4d, 0xb2, 0xc5, 0xf0, 0xba, 0xfe, 0x62, 0xc5, 0x49, 0xe5, 0xb9, 0x1d, + 0xff, 0x14, 0x1c, 0x07, 0x9e, 0xe0, 0xb1, 0x7f, 0xf7, 0x65, 0x9e, 0xef, + 0x71, 0x4e, 0xb8, 0xb1, 0x58, 0x88, 0x26, 0x3a, 0xac, 0x4c, 0xbf, 0x8d, + 0x82, 0x85, 0x15, 0xf6, 0xc5, 0x3b, 0x2c, 0x5f, 0xfd, 0xa7, 0xf1, 0x61, + 0xa6, 0x3f, 0x47, 0x58, 0xbf, 0xf6, 0x0b, 0x7f, 0xb8, 0xb7, 0x9d, 0x2c, + 0x5f, 0xff, 0x3e, 0xa6, 0x06, 0x0d, 0xc8, 0xdd, 0x38, 0x4b, 0x15, 0x28, + 0xfe, 0x72, 0x4f, 0x23, 0xc7, 0x20, 0xdf, 0xff, 0xdb, 0x8a, 0x63, 0xcc, + 0xc1, 0xfe, 0x4b, 0x73, 0x27, 0x4b, 0x17, 0xff, 0x04, 0x66, 0x74, 0x7f, + 0x4e, 0x14, 0x16, 0x2f, 0xfd, 0x9f, 0x6f, 0x0a, 0x7e, 0xc7, 0x58, 0xa9, + 0x44, 0x28, 0x91, 0xef, 0xd9, 0xbb, 0x11, 0xab, 0x17, 0x49, 0xd6, 0x2a, + 0x0d, 0x83, 0xf0, 0xce, 0xcd, 0x40, 0xde, 0x3d, 0x4e, 0xe3, 0x20, 0x78, + 0xcc, 0x75, 0x29, 0xa0, 0xf1, 0x81, 0x7e, 0x3a, 0x10, 0x1a, 0x14, 0xa2, + 0x3e, 0x47, 0x85, 0xe8, 0xcc, 0xc4, 0x7d, 0xd2, 0x1c, 0xe1, 0x91, 0x75, + 0x14, 0xdf, 0xf9, 0xcc, 0x67, 0xd6, 0x44, 0xc3, 0x58, 0xb9, 0xa5, 0x62, + 0x86, 0x7a, 0xb1, 0xe7, 0xf7, 0xf8, 0xe3, 0xce, 0xa9, 0xd6, 0xeb, 0x16, + 0xc5, 0x8b, 0xc6, 0x38, 0x16, 0x2f, 0xff, 0x1e, 0x77, 0x33, 0x7f, 0xbf, + 0x54, 0x9e, 0x56, 0x2b, 0x0f, 0xb9, 0xc7, 0xaf, 0xfe, 0x13, 0x6d, 0xcc, + 0x7d, 0xf7, 0xce, 0x8b, 0x15, 0x29, 0x90, 0x40, 0xe3, 0xef, 0xe4, 0x41, + 0x7b, 0xdf, 0x3a, 0xc5, 0xfc, 0x0c, 0x33, 0x07, 0xb2, 0xc5, 0xbc, 0x61, + 0xe7, 0x38, 0xf5, 0xfc, 0xfa, 0x6d, 0xdc, 0x96, 0x2b, 0x0f, 0x57, 0xc5, + 0x17, 0xf7, 0xe7, 0xa1, 0x48, 0x16, 0x2f, 0xff, 0xf4, 0xe8, 0xd3, 0x38, + 0x42, 0xcf, 0x4c, 0x1c, 0x7f, 0x75, 0x8a, 0x82, 0x2c, 0xb0, 0x87, 0x85, + 0xf7, 0xc7, 0x66, 0xdd, 0x62, 0xf0, 0x39, 0x8b, 0x17, 0xf8, 0x98, 0x7f, + 0x7e, 0xf8, 0xb1, 0x7f, 0xb8, 0x28, 0x98, 0x6d, 0x12, 0xc5, 0xfb, 0xc0, + 0x0c, 0xa0, 0xb1, 0x7f, 0xfe, 0x09, 0xba, 0xb8, 0xfa, 0x8b, 0x92, 0x76, + 0xef, 0xcb, 0x14, 0xc8, 0x86, 0xe1, 0x55, 0xfd, 0x3b, 0xb9, 0x4c, 0x16, + 0x2f, 0xfe, 0x39, 0x99, 0xe6, 0xee, 0x02, 0xee, 0x0b, 0x16, 0x8e, 0x58, + 0xbf, 0xbd, 0x9b, 0x1e, 0x77, 0x58, 0xad, 0x95, 0x06, 0xc0, 0x8f, 0x07, + 0x7b, 0x34, 0x8a, 0x17, 0x87, 0x22, 0x62, 0xd0, 0x24, 0xf8, 0x56, 0xfc, + 0x5b, 0x02, 0x43, 0x58, 0xbf, 0xa1, 0x1f, 0x3e, 0x92, 0x58, 0xac, 0x3d, + 0xae, 0xa2, 0xab, 0xf4, 0x79, 0xe5, 0xf4, 0xb1, 0x7d, 0x87, 0x0e, 0x56, + 0x2f, 0x75, 0xf1, 0xce, 0xb1, 0x44, 0x79, 0x02, 0x23, 0xa9, 0x44, 0xa3, + 0xb9, 0xdf, 0xff, 0xbd, 0x3f, 0x33, 0xdf, 0xc3, 0xf8, 0xa4, 0x12, 0xb1, + 0x74, 0xf1, 0x62, 0xa5, 0x34, 0x68, 0x42, 0xe1, 0xc8, 0x40, 0xad, 0x7e, + 0x81, 0x49, 0xcd, 0x58, 0xbf, 0xf8, 0xf9, 0xa2, 0xc7, 0xe8, 0xfa, 0x65, + 0x8b, 0xf6, 0xee, 0x3d, 0xce, 0xb1, 0x7f, 0xff, 0xd8, 0x52, 0x03, 0x33, + 0x4c, 0x5e, 0xfb, 0x40, 0xcc, 0xd2, 0xc5, 0x3a, 0x24, 0x7e, 0x57, 0x5d, + 0xa6, 0x40, 0xc5, 0x3e, 0x86, 0xad, 0xff, 0xf6, 0x8c, 0xcf, 0x0a, 0x73, + 0x6f, 0xe3, 0xc1, 0x62, 0xc3, 0x58, 0xa7, 0x3e, 0x3d, 0x28, 0xdf, 0xff, + 0x76, 0x09, 0x2f, 0x66, 0x77, 0xe9, 0xde, 0x56, 0x2f, 0xa7, 0xc1, 0xc1, + 0x62, 0xff, 0xc5, 0x91, 0x7b, 0xf9, 0xa7, 0xe2, 0xc5, 0xff, 0x8e, 0x61, + 0xdb, 0xc6, 0x7f, 0xda, 0x58, 0xbf, 0xd2, 0x7c, 0x7d, 0x0a, 0x3d, 0x62, + 0x98, 0xfe, 0x44, 0x87, 0x52, 0x9a, 0x70, 0xd4, 0x7e, 0x48, 0x50, 0xb8, + 0xbf, 0x8e, 0x26, 0xd9, 0xf6, 0x58, 0xbf, 0xf8, 0x50, 0x84, 0x98, 0x77, + 0x1e, 0x7d, 0x62, 0xf8, 0x9c, 0xee, 0xb1, 0x52, 0x89, 0x7c, 0x30, 0xed, + 0x1a, 0xf6, 0xd8, 0x12, 0xc5, 0xec, 0xd7, 0xd6, 0x2d, 0x31, 0xb1, 0xbc, + 0xdc, 0x7e, 0xfd, 0xcc, 0xdf, 0xee, 0xb1, 0x7d, 0x1c, 0x2e, 0xa9, 0x58, + 0xa9, 0x57, 0x92, 0x38, 0x4c, 0xe4, 0x6d, 0xef, 0x0d, 0x8d, 0x35, 0xb1, + 0x60, 0x8a, 0x6f, 0xd9, 0x86, 0xce, 0x96, 0x2f, 0xcd, 0xf3, 0x07, 0x2b, + 0x17, 0xfd, 0x9f, 0x63, 0xf8, 0x4d, 0xe5, 0x8a, 0x3a, 0x22, 0xbc, 0x51, + 0x1c, 0x53, 0x7f, 0xde, 0xe0, 0x7c, 0x6e, 0xe1, 0x8b, 0x17, 0x0b, 0xeb, + 0x17, 0xf4, 0x73, 0x1b, 0x9d, 0xf9, 0x62, 0xf8, 0x01, 0xfa, 0x56, 0x2d, + 0x08, 0xc3, 0xd7, 0x73, 0x3b, 0xfc, 0xd0, 0x33, 0x82, 0x03, 0x2c, 0x5f, + 0x4f, 0xe7, 0x65, 0x8b, 0x38, 0xcf, 0x63, 0xe6, 0xb5, 0x29, 0xc3, 0xe1, + 0x99, 0xcf, 0x19, 0xbc, 0x50, 0x82, 0xbf, 0x71, 0xff, 0x83, 0x58, 0xbf, + 0x42, 0x7d, 0x9b, 0x2c, 0x54, 0x79, 0xe8, 0xe8, 0xa2, 0xf4, 0xf3, 0x65, + 0x8b, 0xf8, 0x9b, 0xbf, 0x49, 0x2c, 0x5d, 0xdf, 0x96, 0x2e, 0xf6, 0x2c, + 0x54, 0x9b, 0x0e, 0xc6, 0x6f, 0xee, 0x39, 0x6f, 0xf9, 0x58, 0xac, 0x47, + 0x7e, 0xe4, 0xae, 0x3d, 0xa5, 0xdf, 0x10, 0xdf, 0xa1, 0xc2, 0x60, 0x2c, + 0x5e, 0x8e, 0x7f, 0xac, 0x57, 0x67, 0x90, 0xe5, 0x17, 0xfd, 0xee, 0x6b, + 0x22, 0xfb, 0x9a, 0xb1, 0x7d, 0xd4, 0x4d, 0x05, 0x8b, 0x85, 0xa5, 0x8a, + 0xf9, 0xbd, 0xe1, 0x2d, 0x62, 0x26, 0xbc, 0xf3, 0x71, 0x7d, 0x62, 0xfa, + 0x0c, 0x1c, 0x4b, 0x17, 0xe1, 0x1b, 0xfc, 0xea, 0x58, 0xbf, 0xff, 0xf7, + 0x46, 0xff, 0xdc, 0xcc, 0x7d, 0xdb, 0x4d, 0xfe, 0xe1, 0x9e, 0x58, 0xbf, + 0xff, 0xdc, 0x71, 0x75, 0xff, 0x73, 0x33, 0xbf, 0x7c, 0x3e, 0x6d, 0x2b, + 0x17, 0xe8, 0x48, 0x39, 0x8b, 0x17, 0xfe, 0xc3, 0x39, 0xe2, 0xc0, 0x47, + 0x62, 0xc5, 0xec, 0xdc, 0xcc, 0x3e, 0xaf, 0x94, 0x54, 0xa6, 0xf2, 0xee, + 0x1c, 0x86, 0xad, 0x71, 0x3d, 0xaf, 0x47, 0x4d, 0x7f, 0xff, 0x3f, 0x01, + 0x90, 0x29, 0x03, 0x7f, 0xb8, 0x67, 0x96, 0x2f, 0xfc, 0xfa, 0xd3, 0x41, + 0xb7, 0x17, 0x6b, 0x17, 0xff, 0x98, 0x79, 0xd2, 0x7f, 0x9a, 0xd3, 0xf4, + 0x58, 0xad, 0xd1, 0x1c, 0x48, 0x37, 0x80, 0xff, 0x58, 0xbf, 0xec, 0x37, + 0x0e, 0xf1, 0xd2, 0x75, 0x8b, 0xfd, 0x27, 0x98, 0xc0, 0x82, 0x09, 0x62, + 0xbb, 0x57, 0x90, 0xf1, 0xff, 0xe8, 0xab, 0xf0, 0xe9, 0x01, 0x19, 0x0e, + 0xf5, 0x1e, 0x5f, 0xf1, 0x8c, 0x59, 0xd4, 0x67, 0xc4, 0xb1, 0x7e, 0x09, + 0xf5, 0x86, 0xac, 0x54, 0xaf, 0x14, 0xe4, 0x24, 0x5e, 0x17, 0x91, 0x11, + 0x34, 0xbd, 0xf1, 0x39, 0x86, 0x7d, 0x7f, 0xfc, 0xdf, 0x32, 0x4c, 0xce, + 0x93, 0x03, 0x27, 0x4b, 0x17, 0xe1, 0xbf, 0xf0, 0x96, 0x2f, 0xee, 0x38, + 0xba, 0xf1, 0xca, 0xc5, 0xff, 0x08, 0xb8, 0xe3, 0x30, 0x72, 0xb1, 0x6f, + 0x39, 0xf6, 0x80, 0xce, 0xe9, 0xed, 0x62, 0xff, 0x07, 0xc3, 0x1b, 0x5a, + 0x95, 0x8b, 0xff, 0xef, 0x7a, 0x7d, 0xdc, 0x3f, 0x84, 0x68, 0x67, 0x58, + 0xbf, 0xa7, 0xd8, 0x4d, 0x1e, 0xb1, 0x7e, 0x80, 0x3e, 0xc7, 0x58, 0xbd, + 0xb6, 0x04, 0xb1, 0x60, 0x18, 0x79, 0x11, 0xb1, 0x4d, 0xff, 0x72, 0x4c, + 0x7d, 0xa1, 0x3d, 0x6a, 0xc5, 0x0d, 0x54, 0xb6, 0x2a, 0x3c, 0x25, 0x34, + 0x4e, 0x71, 0x86, 0x36, 0x02, 0xa1, 0x3b, 0xf0, 0xba, 0xe8, 0xdb, 0xad, + 0x58, 0xbf, 0xf3, 0x16, 0xfe, 0xcf, 0xfb, 0xc2, 0x58, 0xa7, 0x3e, 0x21, + 0x11, 0x5e, 0x9e, 0x92, 0xb1, 0x7e, 0xd6, 0xd3, 0xad, 0x96, 0x2f, 0xce, + 0x5e, 0x0c, 0xeb, 0x15, 0x27, 0xa8, 0x02, 0xbb, 0xe1, 0x6d, 0x30, 0x58, + 0xa8, 0x1e, 0x2f, 0x08, 0x6f, 0xf1, 0xa6, 0x69, 0xfb, 0xf6, 0x2c, 0x5f, + 0xed, 0x34, 0x86, 0x39, 0xfa, 0xc5, 0xff, 0x7d, 0xcd, 0x33, 0xb8, 0x67, + 0x96, 0x2f, 0xef, 0xc9, 0xf0, 0xe0, 0x58, 0xbf, 0xf1, 0x9f, 0xc3, 0x33, + 0x4d, 0x0c, 0x58, 0xbf, 0x7d, 0xb6, 0x14, 0xac, 0x5a, 0x46, 0x7d, 0x27, + 0x40, 0xa9, 0x45, 0xf7, 0xe1, 0x2f, 0x7d, 0xed, 0x08, 0xeb, 0x17, 0xce, + 0x6e, 0x0d, 0x62, 0xf1, 0xb8, 0x35, 0x8b, 0x1c, 0xc3, 0xc1, 0x72, 0x3b, + 0xf0, 0x9a, 0x19, 0xa5, 0x8a, 0xc3, 0xd0, 0x22, 0x8a, 0x24, 0x6a, 0xfa, + 0x16, 0xb7, 0xfd, 0x20, 0x3b, 0x42, 0x34, 0xeb, 0x7a, 0xc5, 0x8b, 0x82, + 0xeb, 0xd6, 0x2f, 0xc1, 0x7c, 0x45, 0xba, 0xc5, 0xfe, 0x2f, 0x73, 0x20, + 0xff, 0x58, 0xa9, 0x3d, 0xec, 0x2b, 0xa9, 0x44, 0xe7, 0x1f, 0x2f, 0xfa, + 0x27, 0xd6, 0x0b, 0x76, 0x25, 0x8b, 0xc5, 0x90, 0x58, 0xbb, 0x21, 0x87, + 0xad, 0xe3, 0xab, 0xf9, 0xa1, 0xa3, 0x58, 0x96, 0x2f, 0xd9, 0xd0, 0xa7, + 0xb5, 0x8a, 0xfa, 0x21, 0x00, 0x59, 0xc2, 0xeb, 0x85, 0xf5, 0x8a, 0x95, + 0xcb, 0x28, 0x1b, 0x8c, 0xd3, 0x78, 0x7d, 0xbc, 0x3f, 0x08, 0x9f, 0x90, + 0xe5, 0xf4, 0x3f, 0x23, 0x8c, 0x2f, 0xff, 0xa4, 0x18, 0x46, 0x37, 0x8c, + 0xfe, 0x01, 0x96, 0x2e, 0x2d, 0x96, 0x2e, 0x9e, 0x8b, 0x15, 0x2b, 0xbd, + 0x79, 0x39, 0xa8, 0xf0, 0x96, 0x25, 0x01, 0x0c, 0x5f, 0xff, 0xf7, 0x7b, + 0x96, 0x74, 0xc1, 0xe6, 0x11, 0x09, 0xb6, 0x9d, 0x2c, 0x5f, 0xe1, 0xe1, + 0xcc, 0xe3, 0x7d, 0x62, 0xf0, 0xa7, 0x8b, 0x15, 0x88, 0xba, 0x76, 0x8f, + 0x9a, 0xdd, 0xc8, 0x2c, 0x5f, 0xdc, 0x0f, 0x98, 0x0e, 0x2c, 0x5f, 0xff, + 0xf7, 0xb4, 0x23, 0x99, 0xa9, 0xfb, 0x9c, 0xb3, 0xc6, 0x4c, 0x16, 0x2f, + 0xba, 0x16, 0x70, 0xc4, 0x4c, 0xb9, 0x85, 0xff, 0xd2, 0x72, 0x63, 0x4b, + 0x01, 0xd8, 0x16, 0x29, 0xd1, 0x01, 0xf3, 0xbb, 0xff, 0xa4, 0x1c, 0xc1, + 0xbe, 0x80, 0x29, 0x58, 0xbf, 0xba, 0x31, 0xfe, 0x13, 0x2c, 0x5f, 0xff, + 0x4f, 0xb9, 0x3b, 0x19, 0x83, 0x31, 0xcf, 0x2b, 0x17, 0xff, 0x6a, 0x79, + 0x83, 0xfb, 0xf4, 0xcd, 0x2c, 0x5f, 0xff, 0xbc, 0xdf, 0x8c, 0xe7, 0xf0, + 0xbc, 0x60, 0x21, 0xc5, 0x8b, 0xff, 0xff, 0xbf, 0xcc, 0x39, 0xe7, 0x46, + 0xf3, 0x06, 0x58, 0xfa, 0xcf, 0x4a, 0xc5, 0x9e, 0x51, 0x98, 0xcb, 0x77, + 0xf8, 0x9f, 0x37, 0x9f, 0x71, 0x62, 0xff, 0x9c, 0xba, 0x6d, 0x86, 0xe6, + 0x96, 0x29, 0xcf, 0xbf, 0x86, 0x75, 0x05, 0x56, 0x3b, 0x91, 0x3a, 0x27, + 0xcc, 0x40, 0xa4, 0x51, 0x89, 0x7a, 0x12, 0xb7, 0x44, 0x75, 0x8b, 0xfa, + 0x4e, 0xff, 0x9e, 0xd6, 0x2e, 0x16, 0x96, 0x2b, 0x47, 0x8d, 0xc2, 0xeb, + 0xfc, 0x26, 0xe6, 0x7d, 0xce, 0xb1, 0x7b, 0xa6, 0x69, 0x62, 0xdc, 0x58, + 0xbb, 0x52, 0xb1, 0x78, 0x3d, 0x1a, 0xb1, 0x7f, 0xe7, 0xf0, 0xb4, 0xdc, + 0x80, 0x37, 0x58, 0xa9, 0x45, 0x48, 0xc7, 0xf4, 0x24, 0x71, 0x76, 0x20, + 0xbb, 0xee, 0xb1, 0x7f, 0x98, 0xb6, 0x6c, 0xef, 0xcb, 0x17, 0xfd, 0x03, + 0x3d, 0x9a, 0xd3, 0xee, 0xb1, 0x4e, 0x88, 0x73, 0x8b, 0x91, 0xa5, 0xf8, + 0xfd, 0x6c, 0x6d, 0x9a, 0x58, 0xbe, 0x73, 0x70, 0x6b, 0x17, 0x8d, 0xc1, + 0xac, 0x5e, 0xf6, 0x1c, 0xc3, 0xc1, 0x72, 0x3b, 0xf4, 0x9f, 0x30, 0x25, + 0x8a, 0x73, 0xdb, 0x88, 0xce, 0xa5, 0x1e, 0x39, 0x0c, 0xfb, 0xf6, 0x6b, + 0x8d, 0xa5, 0x8b, 0xff, 0x7d, 0xc8, 0x01, 0xff, 0xed, 0xb2, 0xc5, 0xf9, + 0xc0, 0x76, 0x82, 0xc5, 0xcf, 0xc5, 0x8a, 0xd8, 0xdf, 0x9c, 0xa2, 0xff, + 0x67, 0xdc, 0x72, 0x5e, 0x58, 0xbf, 0xb4, 0xc4, 0x00, 0x4a, 0xc5, 0x4b, + 0x24, 0x6b, 0x62, 0xec, 0x97, 0xc4, 0x6b, 0x83, 0xaf, 0xe8, 0x8b, 0xf0, + 0xdc, 0x68, 0x67, 0x94, 0x63, 0xfc, 0x26, 0xf1, 0x40, 0xa1, 0x00, 0x11, + 0x10, 0x66, 0x57, 0xf8, 0xb3, 0xdc, 0x03, 0xf6, 0xb1, 0x7e, 0x2c, 0x19, + 0x32, 0xc5, 0xfd, 0xa7, 0xf7, 0xdc, 0x6b, 0x15, 0x04, 0x44, 0x61, 0xa6, + 0x89, 0xaf, 0x85, 0x3c, 0x25, 0x8b, 0xff, 0xf6, 0x77, 0x09, 0xd8, 0xcf, + 0xcb, 0x93, 0x68, 0xd5, 0x8b, 0xb3, 0xa2, 0xc5, 0xfa, 0x4e, 0xdd, 0xf9, + 0x62, 0xec, 0xd9, 0x62, 0xff, 0xe1, 0xf3, 0x34, 0x58, 0x0e, 0x66, 0x96, + 0x2b, 0xe8, 0x9e, 0xe0, 0xcf, 0x8a, 0x44, 0x31, 0x7e, 0xcd, 0xc4, 0xdb, + 0x2c, 0x56, 0xe9, 0xbf, 0xe8, 0x8b, 0xf0, 0xf6, 0x23, 0xdb, 0xfd, 0x25, + 0x02, 0xcc, 0x02, 0xc5, 0xff, 0xff, 0xff, 0xc2, 0x98, 0x09, 0x8d, 0x33, + 0x98, 0x59, 0xd5, 0x30, 0x33, 0x09, 0xe7, 0xee, 0x59, 0xec, 0xe8, 0xb1, + 0x7f, 0xf8, 0x85, 0xd9, 0x63, 0xeb, 0x7f, 0xcf, 0x16, 0x2d, 0xd7, 0xac, + 0x56, 0x8f, 0x88, 0x24, 0xbb, 0xff, 0xfb, 0x76, 0xfe, 0x42, 0x75, 0x20, + 0xd4, 0x86, 0xc4, 0xb1, 0x7f, 0xe9, 0x27, 0x3e, 0x39, 0x49, 0xd6, 0x2f, + 0xb3, 0xee, 0x35, 0x8a, 0x39, 0xee, 0x80, 0xee, 0xff, 0xf9, 0xa1, 0xc7, + 0x19, 0x90, 0x71, 0xfc, 0x3e, 0x2c, 0x54, 0xa6, 0xa1, 0x84, 0x6d, 0x0b, + 0x81, 0x11, 0x5f, 0xfe, 0x1b, 0xce, 0xe1, 0xfd, 0xbb, 0xf7, 0xe5, 0x62, + 0xff, 0xfd, 0x90, 0xfb, 0x40, 0xcc, 0xf4, 0x73, 0xea, 0x60, 0xb1, 0x7d, + 0xb3, 0x17, 0x45, 0x8b, 0xb0, 0x25, 0x8b, 0x84, 0x4b, 0x17, 0x81, 0x85, + 0xb1, 0xaf, 0xf8, 0xc5, 0x62, 0x21, 0x99, 0x52, 0xff, 0xff, 0xfc, 0x67, + 0xbe, 0xf3, 0xc3, 0x30, 0x5b, 0xcf, 0x43, 0x33, 0x5a, 0xce, 0x82, 0x6f, + 0xac, 0x5e, 0x86, 0x6c, 0xb1, 0x50, 0x45, 0x4b, 0x42, 0x2e, 0xfb, 0xd1, + 0xa7, 0x5b, 0xd6, 0x2c, 0x54, 0x9e, 0xd6, 0x13, 0xdf, 0x7c, 0x9b, 0xa9, + 0x62, 0xe3, 0x09, 0x62, 0xf3, 0xf5, 0x4a, 0xc5, 0x40, 0xdb, 0x9c, 0x62, + 0xa5, 0x7e, 0x8f, 0x23, 0xae, 0x35, 0x0f, 0x46, 0x3f, 0x94, 0xa8, 0xc8, + 0x00, 0x4d, 0x28, 0x6f, 0xf2, 0x32, 0x4f, 0x10, 0x09, 0x72, 0xff, 0xf8, + 0x5c, 0xfc, 0xe4, 0x7e, 0x11, 0x63, 0x81, 0x62, 0xfe, 0xef, 0x8e, 0x79, + 0xdd, 0x62, 0xf9, 0x86, 0x2e, 0x2c, 0x5f, 0xf3, 0xc7, 0xb7, 0xf3, 0xaa, + 0x62, 0x58, 0xa9, 0x47, 0x13, 0x28, 0x70, 0xc0, 0x32, 0x3b, 0xc3, 0x3f, + 0x16, 0x2f, 0xc3, 0x63, 0x7e, 0xeb, 0x15, 0x87, 0x8e, 0x21, 0xeb, 0xf7, + 0x1f, 0xa6, 0x0d, 0x62, 0xf9, 0xe2, 0x90, 0x2c, 0x59, 0xbe, 0x79, 0xbe, + 0x2a, 0xbd, 0x99, 0xc5, 0x8b, 0x69, 0x62, 0xf7, 0xb0, 0xeb, 0x15, 0x26, + 0xbf, 0x04, 0xad, 0xb0, 0xcf, 0xa9, 0x92, 0xef, 0xff, 0xec, 0x21, 0x6c, + 0x67, 0x30, 0x62, 0xf3, 0xfb, 0xd2, 0xb1, 0x7f, 0x88, 0x4c, 0x7c, 0x2f, + 0x2c, 0x5e, 0x0e, 0x39, 0x96, 0x2f, 0xff, 0xcf, 0xb7, 0xd9, 0xfd, 0x3f, + 0x7f, 0x73, 0x06, 0xb1, 0x7f, 0xc6, 0x67, 0xdd, 0xbd, 0xf9, 0x58, 0xa8, + 0xf4, 0x47, 0x12, 0xad, 0x2c, 0x54, 0xa6, 0xdf, 0x8b, 0xbf, 0x32, 0x68, + 0x57, 0x86, 0x4b, 0x4c, 0x9f, 0x28, 0xa3, 0x97, 0xb8, 0x1d, 0x6a, 0xc5, + 0xfb, 0xf3, 0xf7, 0x8f, 0x58, 0xbd, 0xf9, 0xd2, 0xc5, 0xff, 0xf9, 0xc5, + 0x84, 0x03, 0x33, 0xe2, 0x39, 0xda, 0x0b, 0x15, 0xb9, 0xf9, 0xe8, 0x76, + 0xf8, 0xe2, 0x2d, 0xd6, 0x2f, 0xfd, 0xd1, 0xa1, 0x84, 0x32, 0x98, 0x2c, + 0x5f, 0xfb, 0x82, 0x1f, 0xdc, 0xcd, 0xb0, 0x25, 0x8b, 0xb6, 0x95, 0x8a, + 0xc4, 0x4d, 0x78, 0xfc, 0x48, 0x77, 0xd9, 0xf3, 0xca, 0xc5, 0xf7, 0xc2, + 0x6d, 0x96, 0x2a, 0x55, 0x09, 0x40, 0x77, 0x50, 0x9e, 0x01, 0x19, 0x42, + 0xfb, 0x85, 0xfe, 0x22, 0xbc, 0xe1, 0x44, 0xb1, 0x7f, 0xff, 0x7f, 0x71, + 0x60, 0x0c, 0xcf, 0x71, 0xfc, 0x09, 0xd9, 0x62, 0xff, 0x9b, 0xef, 0xce, + 0x09, 0x80, 0xb1, 0x43, 0x45, 0xbe, 0x0f, 0xb2, 0xfd, 0xa3, 0x23, 0x77, + 0xdf, 0xe6, 0xeb, 0x0a, 0xfa, 0xd4, 0x18, 0xd2, 0x16, 0xb1, 0xb2, 0x67, + 0x5c, 0x32, 0x99, 0xcf, 0x3d, 0xa3, 0x7b, 0x84, 0x7c, 0x03, 0x97, 0x05, + 0x95, 0x9f, 0x61, 0xb1, 0xc2, 0x6f, 0x1a, 0x2f, 0x71, 0xc8, 0xbc, 0xa3, + 0xc8, 0xa5, 0x13, 0x6a, 0x74, 0xa8, 0xf2, 0xa0, 0xff, 0x3f, 0x6c, 0xd2, + 0xc3, 0x01, 0x0e, 0x3e, 0xbc, 0x84, 0xa7, 0xa8, 0xb9, 0x4a, 0x2a, 0xf5, + 0x24, 0x24, 0x51, 0xc9, 0x74, 0x84, 0x18, 0x4d, 0xd1, 0xd2, 0x9d, 0x83, + 0x94, 0x77, 0xd5, 0x19, 0x2d, 0xee, 0x80, 0x75, 0x8b, 0xdd, 0x00, 0xeb, + 0x17, 0xff, 0xfd, 0x07, 0xf3, 0x7d, 0x8e, 0x67, 0x1f, 0x38, 0xdf, 0x63, + 0xac, 0x5f, 0xec, 0x08, 0xb3, 0xa3, 0x92, 0xc5, 0xe2, 0x70, 0x96, 0x2f, + 0xf7, 0x1f, 0xd3, 0xfd, 0xdd, 0x62, 0xfb, 0x76, 0x6d, 0xd5, 0x25, 0x41, + 0x7f, 0xb5, 0x3d, 0x3b, 0x86, 0x79, 0x62, 0xb4, 0x7d, 0x02, 0x31, 0xb7, + 0x6b, 0x17, 0xf4, 0xfb, 0x9d, 0x30, 0x6b, 0x15, 0x27, 0x86, 0x68, 0x9d, + 0xfc, 0x2d, 0x03, 0xcd, 0xda, 0xc5, 0xff, 0x67, 0x9b, 0xb3, 0x36, 0xc0, + 0x96, 0x2f, 0xe7, 0xd4, 0x8b, 0xaf, 0x95, 0x8b, 0xed, 0xd9, 0xb7, 0x54, + 0x8d, 0x65, 0x1a, 0x7c, 0x7a, 0x32, 0xbf, 0xff, 0xdc, 0x6d, 0x38, 0xde, + 0x27, 0xdd, 0xb4, 0xc4, 0xc6, 0xac, 0x5e, 0x68, 0x46, 0x62, 0x21, 0x1c, + 0x8e, 0xff, 0xbf, 0x27, 0xe7, 0x18, 0xb7, 0x58, 0xbe, 0x9d, 0x4f, 0x96, + 0x2e, 0x6f, 0x2c, 0x50, 0xcd, 0xc9, 0xc8, 0xaf, 0xe1, 0x0f, 0x09, 0xa0, + 0xb1, 0x7f, 0xbb, 0xe1, 0x3c, 0x86, 0x75, 0x8a, 0x39, 0xf1, 0x31, 0x6d, + 0xfc, 0x16, 0x7e, 0x19, 0xc5, 0x8b, 0xff, 0x9b, 0xf8, 0x7d, 0xdf, 0xb0, + 0x73, 0x16, 0x2f, 0xf1, 0x37, 0xb9, 0x17, 0xdd, 0x62, 0xd1, 0x91, 0xb2, + 0xeb, 0x0f, 0x5c, 0x1f, 0x91, 0xfd, 0x99, 0xa0, 0x68, 0x31, 0xdc, 0x84, + 0xe1, 0xac, 0xbb, 0x91, 0x68, 0xc0, 0xf1, 0x92, 0x7c, 0xd5, 0x9c, 0xc1, + 0x08, 0x3e, 0x10, 0x88, 0xbc, 0x34, 0x6b, 0xff, 0x61, 0xcc, 0xf6, 0x47, + 0xbf, 0x4e, 0x2c, 0x5f, 0xff, 0xe9, 0x1c, 0x7c, 0x82, 0x62, 0x84, 0xf4, + 0xce, 0xa7, 0x28, 0x96, 0x2c, 0xe3, 0x45, 0x77, 0x11, 0x6f, 0xf3, 0x45, + 0xc6, 0xf0, 0xa5, 0x62, 0xa3, 0xcf, 0x73, 0x45, 0x17, 0x0a, 0x25, 0x8b, + 0xcc, 0xdb, 0xaa, 0x4a, 0xc2, 0xfe, 0x8b, 0x8d, 0xe1, 0x4a, 0xc5, 0xb5, + 0xb9, 0xec, 0xb1, 0x55, 0xff, 0xfe, 0xe9, 0x9d, 0x4e, 0x51, 0x18, 0x53, + 0xee, 0x64, 0x44, 0xcb, 0x17, 0xf3, 0xe7, 0x51, 0x60, 0x16, 0x2a, 0x08, + 0x95, 0x1b, 0x35, 0xf7, 0xdf, 0x5c, 0x58, 0xbd, 0xa9, 0x3a, 0xc5, 0xff, + 0xf9, 0x88, 0xd8, 0xc8, 0x7f, 0x3b, 0x6f, 0x88, 0xb6, 0x58, 0xbc, 0xfe, + 0xe2, 0xc5, 0xfe, 0x84, 0xeb, 0x69, 0xd6, 0xcb, 0x17, 0xfc, 0xe0, 0x90, + 0x31, 0x0b, 0x16, 0x2a, 0x4f, 0xb7, 0x0d, 0xaf, 0xfc, 0x43, 0x9e, 0x91, + 0x3f, 0x42, 0x02, 0xc5, 0xff, 0xce, 0xc0, 0x32, 0x77, 0x11, 0x0c, 0x4b, + 0x15, 0x28, 0x89, 0xfa, 0x1d, 0xa3, 0x25, 0x5b, 0x3e, 0xc4, 0xb8, 0xe4, + 0xf0, 0xbd, 0x88, 0x8f, 0x44, 0x67, 0x1d, 0xfa, 0xd9, 0x42, 0x2b, 0xd0, + 0xa9, 0xbe, 0x2c, 0x17, 0x5e, 0xb1, 0x7f, 0x77, 0xe9, 0xfb, 0x47, 0xac, + 0x5f, 0x9b, 0xf9, 0xac, 0x58, 0xa9, 0x3d, 0x96, 0x32, 0xbf, 0xbb, 0xe6, + 0x7e, 0x4e, 0xb1, 0x7f, 0x68, 0x51, 0x72, 0x7c, 0xb1, 0x7f, 0xf3, 0x6c, + 0x58, 0x76, 0xf7, 0x05, 0x05, 0x8a, 0x94, 0xd1, 0x3f, 0x08, 0x0f, 0x10, + 0x08, 0xbe, 0x38, 0xc2, 0xff, 0xe0, 0x61, 0x46, 0x40, 0x1c, 0xd9, 0x89, + 0x62, 0xa3, 0x11, 0x35, 0x2a, 0x57, 0xf0, 0xdc, 0x5e, 0xce, 0x2c, 0x5f, + 0xce, 0x77, 0xf7, 0xe5, 0x62, 0xfa, 0x62, 0x9e, 0xd6, 0x2b, 0xe7, 0xa3, + 0xc2, 0xdb, 0xff, 0xf6, 0x85, 0xb0, 0xf4, 0xdb, 0x96, 0x74, 0xd3, 0xf1, + 0x62, 0xff, 0x3f, 0xe4, 0xe7, 0x68, 0x2c, 0x5f, 0xb5, 0xbb, 0x36, 0xea, + 0x91, 0x10, 0xbe, 0x60, 0xcd, 0x95, 0x8b, 0xff, 0x67, 0x53, 0xed, 0xde, + 0x6b, 0x4c, 0xb1, 0x7f, 0x39, 0xf6, 0x16, 0xa0, 0xb1, 0x68, 0xc9, 0x4c, + 0x07, 0x0c, 0xc4, 0x6f, 0xd0, 0x92, 0x39, 0x0e, 0xe6, 0x3a, 0xc5, 0x40, + 0xfb, 0xbb, 0x57, 0xbf, 0xb6, 0x9d, 0x7d, 0x9d, 0x62, 0xfe, 0xcf, 0xbc, + 0x53, 0xe5, 0x8b, 0xfb, 0x85, 0x80, 0x17, 0x16, 0x2d, 0x19, 0x1b, 0xab, + 0x17, 0xc7, 0xfd, 0x11, 0x34, 0x79, 0x3c, 0x23, 0xf1, 0x70, 0x8b, 0xaf, + 0xda, 0xdd, 0x9b, 0x75, 0x49, 0xa4, 0x5f, 0xf9, 0xa1, 0x19, 0x9a, 0xdd, + 0x9b, 0x75, 0x48, 0xfa, 0x5a, 0x33, 0x11, 0x0e, 0x73, 0x7b, 0xff, 0x34, + 0x23, 0x33, 0x5b, 0xb3, 0x6e, 0xa9, 0x21, 0x0b, 0xf1, 0x37, 0x33, 0xcb, + 0x16, 0x8c, 0x39, 0xfb, 0xb2, 0x85, 0xff, 0xd8, 0x14, 0x67, 0x8d, 0x6e, + 0x3f, 0xa5, 0x62, 0xfd, 0xe1, 0x6e, 0xdc, 0x58, 0xba, 0x74, 0xb1, 0x7f, + 0xf4, 0x9c, 0x5a, 0xdd, 0x9c, 0x73, 0x12, 0xc5, 0x9f, 0x63, 0xdd, 0x88, + 0x5e, 0x8e, 0x8b, 0x0f, 0xc2, 0x1e, 0xfb, 0x76, 0x6d, 0xd5, 0x24, 0x79, + 0x7e, 0x93, 0xff, 0x3a, 0x96, 0x2b, 0x47, 0xb9, 0xe3, 0x1b, 0x62, 0xc5, + 0xfc, 0x2f, 0x1d, 0xc2, 0xe2, 0xc5, 0x0c, 0xf0, 0x48, 0x46, 0xf9, 0xf0, + 0x1c, 0x58, 0xb9, 0xb7, 0x58, 0xb6, 0x0c, 0xdd, 0x75, 0x11, 0x5f, 0xa7, + 0x91, 0x14, 0xac, 0x5f, 0xf4, 0xc2, 0x75, 0xb4, 0xeb, 0x65, 0x8b, 0xff, + 0xff, 0xfc, 0x1b, 0xea, 0x29, 0xfe, 0xb3, 0xec, 0x1f, 0x30, 0xd6, 0x20, + 0x49, 0x4c, 0x5f, 0x95, 0x8b, 0xf3, 0x71, 0xfd, 0x2b, 0x17, 0xfd, 0x31, + 0x49, 0x4c, 0x5f, 0x95, 0x8a, 0x94, 0x78, 0x1b, 0x09, 0x02, 0x27, 0xbe, + 0x3e, 0xd8, 0x12, 0xc5, 0xff, 0xf8, 0x7f, 0x90, 0xe3, 0x3c, 0x4c, 0x0e, + 0x72, 0x40, 0x91, 0x52, 0x7f, 0xf8, 0x4b, 0x79, 0xa1, 0x19, 0x2a, 0xe4, + 0x72, 0x10, 0x91, 0x31, 0xe9, 0x6f, 0xe5, 0x24, 0x51, 0xe8, 0xca, 0xe3, + 0xa1, 0x67, 0x7f, 0xf6, 0x7e, 0x33, 0xc6, 0xb7, 0x1f, 0xd2, 0xb1, 0x7f, + 0xff, 0xf3, 0xed, 0x18, 0xfe, 0xc8, 0x89, 0xf9, 0xe9, 0x0d, 0xf5, 0x14, + 0xfd, 0x62, 0xd1, 0x9b, 0x2e, 0xf0, 0x9e, 0x72, 0x2b, 0xd0, 0x98, 0xea, + 0x48, 0xa9, 0x85, 0xca, 0xe6, 0xd6, 0xe7, 0xf2, 0x10, 0xf2, 0xc9, 0x60, + 0x66, 0xdf, 0x02, 0x46, 0xf3, 0xfc, 0x3d, 0xce, 0xbf, 0xbc, 0xa8, 0x18, + 0xa5, 0x9e, 0x7e, 0x1f, 0xe0, 0x85, 0x17, 0xa7, 0x82, 0xef, 0xff, 0x82, + 0xdf, 0xac, 0xeb, 0x41, 0xd7, 0xea, 0x34, 0x30, 0xcf, 0xc7, 0x2c, 0x5f, + 0xff, 0xfb, 0xab, 0xd1, 0xb0, 0xcf, 0x1b, 0x13, 0xf5, 0xd7, 0xdd, 0x7e, + 0xa3, 0x43, 0x0c, 0xfc, 0x72, 0xc5, 0x7d, 0x30, 0x30, 0x9b, 0xef, 0xfe, + 0xfc, 0xbe, 0x9f, 0xaf, 0xdf, 0xf2, 0x12, 0xc5, 0xff, 0xfb, 0xae, 0x1b, + 0xdf, 0x5c, 0xeb, 0x9d, 0x61, 0x1e, 0x35, 0x18, 0x67, 0xe3, 0x96, 0x2f, + 0xfd, 0xce, 0xbd, 0xcd, 0x30, 0xcf, 0xc7, 0x46, 0x4a, 0x3b, 0x77, 0x25, + 0xe2, 0x5d, 0xff, 0xff, 0xfe, 0xea, 0xeb, 0xdc, 0xd3, 0x0c, 0xfc, 0x74, + 0x64, 0xfc, 0x2d, 0xfa, 0xce, 0xb4, 0x1d, 0x7e, 0xa3, 0x43, 0x0c, 0xfc, + 0x72, 0xc5, 0xfb, 0x5b, 0xb3, 0x6e, 0xa9, 0x08, 0x8b, 0xf3, 0xfa, 0x20, + 0xc6, 0xb1, 0x7f, 0xb8, 0x29, 0x8b, 0xcf, 0xd1, 0x62, 0xd1, 0x98, 0x89, + 0x9d, 0xcd, 0xe2, 0x2b, 0xbf, 0xb3, 0x5b, 0xb3, 0x6e, 0xa9, 0x0a, 0xcb, + 0xf6, 0xb7, 0x66, 0xdd, 0x52, 0x5c, 0x17, 0x4f, 0xd6, 0x2e, 0x8f, 0x8c, + 0xc3, 0xce, 0xe8, 0x6f, 0x51, 0x88, 0xbf, 0x68, 0x45, 0x5f, 0x7d, 0xb4, + 0xeb, 0x17, 0xef, 0x00, 0x32, 0x82, 0xc5, 0xf8, 0x12, 0x5b, 0xc6, 0x49, + 0xe6, 0x31, 0x15, 0xd1, 0x47, 0xac, 0x5e, 0x89, 0xfb, 0x58, 0xbf, 0x89, + 0xf7, 0xf4, 0xc1, 0x62, 0xff, 0xa4, 0x86, 0x22, 0x10, 0x7b, 0x2c, 0x5a, + 0x33, 0x64, 0x52, 0x60, 0xe6, 0x87, 0xc2, 0x2e, 0xb3, 0xf6, 0x99, 0x58, + 0x21, 0xc9, 0x7f, 0xba, 0xde, 0xb0, 0xa7, 0x76, 0xed, 0x62, 0xfb, 0x3e, + 0xde, 0x58, 0xbf, 0xd8, 0xfa, 0x00, 0x05, 0xc5, 0x8b, 0x75, 0xa4, 0x7a, + 0xdc, 0x22, 0xbf, 0xff, 0xff, 0xdd, 0x64, 0x6f, 0xd6, 0xcf, 0x3f, 0x86, + 0xe0, 0xcb, 0x36, 0x78, 0x72, 0x47, 0x3f, 0x26, 0x8f, 0x58, 0xbf, 0x1c, + 0x5d, 0x42, 0xea, 0x58, 0xbf, 0xff, 0xdf, 0xc1, 0x43, 0xf9, 0xd1, 0xa3, + 0xd8, 0xbd, 0xfc, 0x82, 0xc5, 0xf9, 0xc6, 0x22, 0xc5, 0x8b, 0xf8, 0x53, + 0xa6, 0xcf, 0xac, 0x5f, 0xf4, 0x96, 0xed, 0xf6, 0x21, 0xac, 0x5f, 0xa7, + 0xcc, 0x58, 0xb1, 0x7f, 0x4f, 0xf3, 0x4e, 0x75, 0x8a, 0x82, 0x37, 0xc6, + 0x4e, 0x69, 0x6e, 0x8e, 0x08, 0x9a, 0xfd, 0xf7, 0xe9, 0x91, 0x2c, 0x5f, + 0xff, 0xa7, 0x63, 0xbc, 0x30, 0x5b, 0x96, 0x6d, 0xa9, 0x58, 0xa8, 0x91, + 0x05, 0xa2, 0xbb, 0xf1, 0x37, 0xa7, 0x75, 0x8b, 0xff, 0xf7, 0x1f, 0xec, + 0xf0, 0x72, 0xf0, 0xbf, 0xac, 0x58, 0xbf, 0xc7, 0xe3, 0xc7, 0x66, 0xa5, + 0x62, 0xff, 0xa7, 0xaa, 0x7e, 0xe5, 0x27, 0x58, 0xac, 0x3f, 0x02, 0x36, + 0xad, 0x95, 0xb8, 0x40, 0xc1, 0xe3, 0x44, 0xd4, 0x33, 0x38, 0x49, 0xe2, + 0x8e, 0xa8, 0x62, 0x5d, 0xc7, 0x58, 0xbe, 0xc3, 0xcc, 0x16, 0x2e, 0xc0, + 0x80, 0x6e, 0x48, 0x5e, 0xdc, 0x58, 0xbd, 0xe2, 0x95, 0x8b, 0x02, 0x4d, + 0x77, 0x04, 0xaf, 0xe1, 0x1e, 0x7a, 0x3f, 0x45, 0x8b, 0xfb, 0x93, 0x13, + 0x36, 0x96, 0x2b, 0x87, 0xc1, 0xe3, 0x2a, 0x94, 0x54, 0x3c, 0x21, 0xaf, + 0xff, 0xff, 0x0d, 0xe0, 0xfa, 0xd8, 0x40, 0xfe, 0x6f, 0x27, 0x79, 0xe9, + 0x82, 0xfa, 0xc5, 0xf6, 0x1d, 0xbc, 0xb1, 0x7f, 0x31, 0xa1, 0x36, 0xb8, + 0xb1, 0x52, 0x8c, 0xdf, 0xbd, 0xb1, 0x15, 0xff, 0xfb, 0xf8, 0x58, 0x6f, + 0xda, 0x1f, 0x09, 0x83, 0x3a, 0xc5, 0xfe, 0x93, 0xfb, 0xf9, 0xd3, 0x16, + 0x2f, 0x9f, 0x7c, 0xd2, 0xc5, 0xff, 0xc3, 0x90, 0x0d, 0x98, 0x21, 0xe1, + 0x2c, 0x5e, 0x66, 0xdd, 0x52, 0x4f, 0x15, 0xb2, 0x24, 0x46, 0x47, 0xba, + 0x25, 0xe9, 0x2f, 0x2c, 0x5f, 0xfa, 0x7a, 0x16, 0x73, 0x09, 0xce, 0xb1, + 0x79, 0xf5, 0xf7, 0x3d, 0xa6, 0x1c, 0xbf, 0xe6, 0x3f, 0x1f, 0x3a, 0x36, + 0x96, 0x2f, 0xfc, 0x53, 0xd1, 0xfd, 0x09, 0xc2, 0x58, 0xa8, 0x2a, 0x53, + 0x89, 0x63, 0x50, 0xc6, 0xfc, 0x23, 0x08, 0xc7, 0xc7, 0x57, 0xf8, 0x60, + 0x32, 0x63, 0xe6, 0x0b, 0x17, 0xf8, 0xee, 0x31, 0x36, 0xa0, 0xb1, 0x71, + 0xdd, 0x62, 0xa4, 0xf2, 0xf7, 0x34, 0xbf, 0xff, 0xa7, 0xdc, 0x11, 0xf7, + 0x70, 0x4e, 0x7d, 0xc5, 0xba, 0xc5, 0xcf, 0xc5, 0x8b, 0xfa, 0x4f, 0xc9, + 0x7d, 0x96, 0x2a, 0x08, 0xa2, 0xc5, 0xdf, 0x0b, 0xdf, 0xff, 0xcd, 0xa6, + 0xff, 0x70, 0xcf, 0x61, 0x0b, 0xc2, 0x35, 0x62, 0xfa, 0x13, 0x9b, 0x2c, + 0x5f, 0xff, 0xb4, 0x2d, 0x6a, 0x4b, 0x0d, 0x7f, 0xff, 0x03, 0x58, 0xb0, + 0xd6, 0x2e, 0x7e, 0x8b, 0x16, 0x75, 0x8a, 0xdd, 0x31, 0x3e, 0xd7, 0x74, + 0x46, 0x75, 0x70, 0x09, 0x74, 0x19, 0xbc, 0x79, 0xdd, 0x62, 0xe2, 0xf2, + 0xc5, 0x61, 0xb5, 0x71, 0xeb, 0xe3, 0x8c, 0x78, 0xb1, 0x7f, 0x9c, 0x4c, + 0x09, 0x28, 0x2c, 0x53, 0x9e, 0xae, 0x88, 0xef, 0xff, 0xfb, 0xef, 0xaf, + 0xb1, 0x30, 0xe7, 0xc5, 0x80, 0xe6, 0x0d, 0x62, 0xf6, 0xd3, 0xba, 0xc5, + 0xfc, 0x3c, 0x87, 0xe7, 0x75, 0x8b, 0xff, 0x30, 0xe7, 0x0b, 0xdc, 0x92, + 0x58, 0xac, 0x47, 0x73, 0xb2, 0x30, 0xf9, 0x17, 0xde, 0x0c, 0x01, 0x2c, + 0x5f, 0x00, 0x3f, 0x4a, 0xc5, 0xa1, 0x18, 0x7f, 0xb8, 0x72, 0xe4, 0x17, + 0x4f, 0x6b, 0x17, 0x8f, 0x3b, 0xac, 0x5c, 0xfe, 0xd8, 0xdb, 0x60, 0xc5, + 0x32, 0x26, 0x04, 0xd9, 0x7e, 0x0c, 0x83, 0xef, 0x8b, 0x17, 0x89, 0xc0, + 0xb1, 0x43, 0x3c, 0x83, 0x96, 0x5a, 0x39, 0x62, 0xff, 0x36, 0xc3, 0x13, + 0x6a, 0x0b, 0x17, 0xd2, 0x76, 0x25, 0x8a, 0xd1, 0xeb, 0x11, 0xad, 0xff, + 0xb8, 0x2d, 0x3b, 0x38, 0xe4, 0x96, 0x2f, 0xf4, 0x9e, 0x63, 0x02, 0x08, + 0x25, 0x8a, 0x73, 0xf7, 0xea, 0x3d, 0xa9, 0x4d, 0x27, 0x72, 0x27, 0x6b, + 0x68, 0x4c, 0x5f, 0xce, 0x3c, 0x38, 0xbc, 0xb1, 0x7f, 0xd8, 0x40, 0x93, + 0xbe, 0xa0, 0xb1, 0x7f, 0x9f, 0x8e, 0x2e, 0xbc, 0x72, 0xb1, 0x50, 0x3f, + 0x0f, 0x1c, 0x5e, 0x83, 0x81, 0x62, 0xec, 0xed, 0x62, 0xda, 0x93, 0x6b, + 0x83, 0xb7, 0xff, 0xc7, 0xc7, 0xf0, 0xbd, 0x30, 0x71, 0xe0, 0xd6, 0x2f, + 0xfb, 0x3a, 0x39, 0x68, 0x52, 0x4b, 0x15, 0x04, 0xe8, 0x9e, 0x13, 0xda, + 0x57, 0x01, 0x29, 0x27, 0xdf, 0xb5, 0xb4, 0xeb, 0x65, 0x8b, 0xf3, 0x97, + 0x83, 0x3a, 0xc5, 0x49, 0xea, 0x00, 0xae, 0xff, 0x6a, 0x67, 0xdc, 0x7e, + 0x8b, 0x17, 0xf4, 0xec, 0xc3, 0x6f, 0x2c, 0x54, 0x11, 0x08, 0x72, 0x1e, + 0xa3, 0x5b, 0xf4, 0x9f, 0x70, 0x12, 0xc5, 0xf3, 0x3c, 0x74, 0xac, 0x5f, + 0x18, 0x4d, 0x05, 0x8b, 0xf3, 0x67, 0xdc, 0xeb, 0x15, 0x12, 0x25, 0xce, + 0x53, 0xc2, 0x4e, 0x84, 0x77, 0x4f, 0x52, 0xc5, 0x4a, 0x64, 0x99, 0x0c, + 0xa8, 0x90, 0x2f, 0xff, 0x40, 0xb0, 0x5e, 0x9f, 0x61, 0x02, 0x56, 0x2f, + 0xe7, 0xf3, 0x1b, 0xf7, 0x58, 0xbf, 0xfe, 0x13, 0x6a, 0x1b, 0xfd, 0xc7, + 0xa7, 0x16, 0xcb, 0x17, 0xfd, 0x3b, 0xfd, 0x9e, 0x3a, 0x74, 0xb1, 0x7e, + 0x7e, 0xe0, 0xfb, 0x2c, 0x5f, 0xe6, 0x39, 0x83, 0xfb, 0x9d, 0x62, 0x8e, + 0x89, 0xbf, 0x9e, 0x74, 0x2a, 0xbf, 0xe2, 0x93, 0xcc, 0x0b, 0x0e, 0xb1, + 0x7f, 0xe2, 0x60, 0xbd, 0x9f, 0x67, 0x89, 0x62, 0xf6, 0xd3, 0xda, 0xc5, + 0xf8, 0x8a, 0x76, 0xd2, 0xc5, 0xff, 0xd3, 0xad, 0xa7, 0xbc, 0x17, 0x5f, + 0x83, 0x58, 0xad, 0x91, 0x24, 0xe3, 0xe7, 0x28, 0xbf, 0xfd, 0x9e, 0x10, + 0x0e, 0xd0, 0x33, 0x4d, 0xc5, 0x8b, 0xff, 0x7d, 0xc8, 0x01, 0xff, 0xed, + 0xb2, 0xc5, 0xf7, 0xa1, 0x26, 0xac, 0x54, 0xab, 0x7f, 0x82, 0x40, 0xcb, + 0xb2, 0x1d, 0xce, 0x65, 0x11, 0xbb, 0x43, 0x44, 0x8c, 0x3c, 0x98, 0x1a, + 0x0d, 0xfd, 0xb6, 0xb3, 0xdf, 0x75, 0x8b, 0xfd, 0x25, 0x02, 0xcc, 0x02, + 0xc5, 0xf6, 0x39, 0x44, 0xb1, 0x7d, 0xe8, 0xd3, 0xad, 0xeb, 0x16, 0x2f, + 0x6a, 0x76, 0x58, 0xac, 0x3d, 0x17, 0x33, 0xac, 0x47, 0x99, 0xa5, 0xfb, + 0x98, 0xf1, 0xce, 0xff, 0x16, 0xf9, 0xd3, 0x3d, 0xc5, 0x8b, 0xf0, 0xc5, + 0x3a, 0xd9, 0x62, 0xff, 0xfb, 0xc0, 0x98, 0x67, 0x47, 0xf4, 0xe1, 0x41, + 0x62, 0xe6, 0x35, 0x62, 0xa5, 0x19, 0x18, 0x6c, 0xe5, 0x5a, 0x50, 0xbd, + 0xef, 0xba, 0xc5, 0xda, 0x12, 0xc5, 0xd3, 0xc5, 0x8b, 0xec, 0xf6, 0x1d, + 0x62, 0xdb, 0x49, 0xe8, 0x8c, 0x61, 0x85, 0xeb, 0x11, 0x44, 0xcd, 0xd7, + 0xf6, 0x81, 0xc7, 0x1b, 0xac, 0x5f, 0x7c, 0x26, 0xd9, 0x62, 0xa4, 0xf4, + 0xfc, 0x5d, 0x7c, 0x22, 0x8f, 0x35, 0x62, 0xfc, 0x50, 0x9f, 0xca, 0xc5, + 0x39, 0xe7, 0x08, 0x9e, 0xa3, 0x46, 0xf8, 0x3e, 0x36, 0x84, 0xaf, 0x5c, + 0x2c, 0x99, 0xc1, 0x0d, 0xa1, 0x65, 0x08, 0xc0, 0x87, 0x0f, 0x3c, 0x95, + 0x02, 0x6b, 0x1e, 0xf0, 0x83, 0xee, 0x18, 0x8f, 0x1a, 0x14, 0x50, 0x91, + 0xd3, 0xa1, 0xe5, 0x12, 0x7e, 0x3b, 0x36, 0x8f, 0x8c, 0xa5, 0x25, 0x72, + 0x5d, 0xa7, 0xa3, 0x87, 0xe9, 0x18, 0x34, 0x74, 0x37, 0x03, 0x74, 0xea, + 0x6f, 0xbe, 0x88, 0x85, 0xb2, 0xc5, 0xff, 0xbe, 0xff, 0x9c, 0xd4, 0x0f, + 0x1e, 0xb1, 0x7f, 0x3f, 0x42, 0xce, 0x46, 0x61, 0xf3, 0xee, 0x4b, 0x7f, + 0x67, 0xb9, 0x8d, 0x1e, 0xb1, 0x7f, 0x30, 0x5c, 0xe4, 0x81, 0x62, 0xa4, + 0xf7, 0xc8, 0xc2, 0xfd, 0xe0, 0xf6, 0x17, 0x5e, 0xb1, 0x7e, 0x8e, 0x90, + 0x37, 0x96, 0x2d, 0xb2, 0xc5, 0xe6, 0x84, 0x60, 0xd1, 0x1f, 0x84, 0x0e, + 0x62, 0x11, 0x5d, 0xff, 0xe0, 0x00, 0x5c, 0x8c, 0x0c, 0x98, 0xe5, 0x2b, + 0x17, 0xff, 0xfe, 0xf7, 0x04, 0x3f, 0xbc, 0x67, 0x84, 0xc4, 0x0e, 0x07, + 0x3a, 0x02, 0xc5, 0xff, 0xc5, 0x80, 0x62, 0x04, 0x61, 0xdc, 0xeb, 0x15, + 0xa4, 0xc1, 0x89, 0x3b, 0xce, 0x57, 0xfc, 0x14, 0x61, 0x64, 0x50, 0x17, + 0x96, 0x2f, 0xcf, 0xae, 0x08, 0xeb, 0x17, 0xf1, 0x33, 0xff, 0x38, 0xb1, + 0x7d, 0xf7, 0xe4, 0x61, 0xcf, 0x57, 0x85, 0x35, 0x28, 0xd0, 0xde, 0x12, + 0x97, 0xff, 0xf4, 0xef, 0x19, 0xf6, 0xde, 0x40, 0xda, 0x6f, 0x41, 0x96, + 0x2f, 0xff, 0x77, 0xc8, 0xce, 0x16, 0x74, 0x92, 0xf7, 0x16, 0x2f, 0xff, + 0xff, 0x3c, 0x30, 0xa3, 0x0b, 0x37, 0x2c, 0xdb, 0x85, 0x9e, 0xf3, 0x83, + 0x8b, 0x17, 0xff, 0x0b, 0xd0, 0x70, 0x46, 0x78, 0xd7, 0x25, 0x8b, 0xfd, + 0x3f, 0x73, 0xb9, 0x41, 0x62, 0xfc, 0xdf, 0xfb, 0xc4, 0xb1, 0x7f, 0xf6, + 0x71, 0xc8, 0x05, 0x9e, 0xfe, 0x2c, 0x5f, 0xf9, 0xc8, 0x05, 0x9e, 0xfe, + 0x46, 0x69, 0x13, 0xbf, 0x32, 0x0c, 0xa6, 0xa3, 0x19, 0x0b, 0x10, 0x94, + 0x62, 0x38, 0xcd, 0x9e, 0x35, 0x6d, 0x46, 0x00, 0x72, 0x86, 0x5f, 0x02, + 0x81, 0x3c, 0xf2, 0x1c, 0xd7, 0xf6, 0x77, 0x01, 0x30, 0xd6, 0x2e, 0xec, + 0x0b, 0x15, 0xb1, 0xe4, 0x11, 0x7d, 0xb1, 0x62, 0xfc, 0x52, 0x2e, 0xbf, + 0x8b, 0x17, 0x3f, 0xd6, 0x2f, 0xff, 0x98, 0x66, 0xb7, 0xb3, 0xe5, 0x9e, + 0xfb, 0xac, 0x5f, 0xc6, 0xe9, 0x86, 0xc4, 0xb1, 0x52, 0x8f, 0x41, 0x91, + 0x60, 0x8e, 0x8b, 0x7e, 0x2e, 0xc9, 0xf7, 0xff, 0x38, 0xf4, 0xdd, 0xc6, + 0x6b, 0x53, 0xb2, 0xc5, 0x46, 0x22, 0x7b, 0xea, 0x96, 0x95, 0x8b, 0xfb, + 0x93, 0xb9, 0x48, 0xd6, 0x28, 0x66, 0xfd, 0xc4, 0x6f, 0x9b, 0xb1, 0xca, + 0xc5, 0xff, 0xf4, 0xeb, 0x20, 0xed, 0xec, 0x1b, 0x8b, 0x74, 0x8b, 0x85, + 0xda, 0xc5, 0x7c, 0xfa, 0x09, 0x3e, 0xf3, 0x83, 0x8b, 0x16, 0xdd, 0x62, + 0xfd, 0x30, 0x00, 0xa0, 0xb1, 0x7d, 0xbb, 0x36, 0xea, 0x92, 0xcc, 0xba, + 0x42, 0x58, 0xad, 0x91, 0x45, 0x83, 0xb1, 0x09, 0xe8, 0xa7, 0xa1, 0x8d, + 0xe3, 0x72, 0x3d, 0x62, 0xfb, 0xce, 0x7e, 0x2c, 0x5b, 0x4b, 0x16, 0x35, + 0x62, 0x9c, 0xd2, 0xf0, 0x4a, 0xe1, 0x76, 0xb1, 0x7b, 0x82, 0xdd, 0x62, + 0x8d, 0x3d, 0x8d, 0xc8, 0x38, 0x33, 0x7e, 0xf1, 0xaf, 0xdf, 0x16, 0x2c, + 0x1a, 0xc5, 0xff, 0x4e, 0xc5, 0x9d, 0x34, 0xfc, 0x58, 0xbd, 0xa9, 0xe8, + 0xb1, 0x52, 0x7d, 0xb0, 0x13, 0xe1, 0xdd, 0xfd, 0xd0, 0x8a, 0x63, 0xe2, + 0x58, 0xbf, 0x1e, 0x4a, 0x1c, 0x58, 0xba, 0x62, 0x58, 0xa9, 0x3f, 0x3d, + 0x8c, 0xf4, 0x51, 0x7d, 0xee, 0x07, 0xc5, 0x8b, 0xee, 0x72, 0x42, 0x58, + 0xbf, 0xfc, 0xde, 0xe7, 0x9f, 0xbe, 0x74, 0xf6, 0xc4, 0xb1, 0x66, 0x58, + 0xac, 0x45, 0x4b, 0x92, 0x91, 0x27, 0x13, 0xee, 0xd9, 0xd6, 0x2f, 0x73, + 0xe2, 0x58, 0xbe, 0x60, 0xbe, 0x25, 0x8b, 0xfa, 0x27, 0x2f, 0xe7, 0x6b, + 0x15, 0x87, 0xe2, 0x71, 0xee, 0x12, 0x5f, 0xb9, 0xf0, 0xa4, 0x6b, 0x15, + 0x28, 0xe1, 0xc8, 0x44, 0xb1, 0x75, 0xcd, 0xe5, 0x8b, 0xe0, 0x06, 0x50, + 0x5a, 0x0a, 0x19, 0xbf, 0xf0, 0xbd, 0xff, 0xf4, 0x9f, 0xd9, 0x85, 0xee, + 0x7f, 0x00, 0xcb, 0x17, 0xf8, 0xf3, 0xdf, 0x35, 0x3d, 0x16, 0x2e, 0x16, + 0xcb, 0x16, 0xe2, 0xc5, 0xcd, 0x12, 0xc5, 0xdf, 0x89, 0x62, 0xbc, 0x6c, + 0x44, 0x31, 0x4c, 0x7c, 0x9e, 0x43, 0xa9, 0x46, 0xa9, 0x1b, 0x89, 0xf6, + 0xfe, 0x71, 0x47, 0xc6, 0x80, 0x3a, 0xc5, 0xf7, 0x98, 0x12, 0xb1, 0x50, + 0x3d, 0x9e, 0xcd, 0xef, 0xc5, 0x3f, 0x7c, 0x58, 0xba, 0x60, 0xb1, 0x58, + 0x7c, 0x0c, 0x46, 0x02, 0x6b, 0xbb, 0xf2, 0xc5, 0xed, 0x03, 0x8b, 0x18, + 0x5c, 0xdf, 0x48, 0x26, 0x0b, 0x16, 0x75, 0x8b, 0xc4, 0xde, 0x58, 0xe1, + 0x63, 0x6c, 0x81, 0xef, 0x11, 0x9d, 0xe1, 0x40, 0x6b, 0x14, 0xe8, 0xce, + 0xfc, 0x22, 0x88, 0x9a, 0xfd, 0x17, 0xdc, 0xb6, 0x58, 0xbe, 0xf7, 0xe7, + 0xa2, 0xc5, 0x76, 0x79, 0xe4, 0x55, 0x79, 0x98, 0xeb, 0x17, 0xfb, 0x35, + 0xf9, 0xef, 0xd8, 0xb1, 0x7e, 0x6d, 0x80, 0xfe, 0x58, 0xbe, 0x8b, 0x61, + 0x01, 0x62, 0xff, 0xce, 0x42, 0x86, 0x73, 0x6c, 0x09, 0x62, 0xb0, 0xf9, + 0xbc, 0x4d, 0x7f, 0x7a, 0x74, 0x09, 0x89, 0x62, 0xa5, 0x96, 0xb9, 0x02, + 0x01, 0xc2, 0x2f, 0x21, 0x86, 0x6a, 0x6f, 0x64, 0x2f, 0x0a, 0x08, 0xf3, + 0x18, 0xa1, 0x31, 0xa8, 0x50, 0x9e, 0x1b, 0x1f, 0x8c, 0x6d, 0x9c, 0x40, + 0x42, 0x51, 0x91, 0xf2, 0x1c, 0xfe, 0x8c, 0x50, 0x50, 0x82, 0xe8, 0x44, + 0x10, 0xe4, 0x71, 0xa0, 0x70, 0x8f, 0xea, 0x21, 0xbf, 0xff, 0xfa, 0x37, + 0x8d, 0x66, 0x19, 0xf8, 0xe8, 0xc8, 0x46, 0xb8, 0xf8, 0x4f, 0x58, 0x33, + 0x0c, 0xfc, 0x72, 0xc5, 0xff, 0xfc, 0x53, 0xdc, 0x3f, 0x3a, 0xdb, 0x98, + 0x2d, 0xc5, 0xda, 0xc5, 0xff, 0xf3, 0xf8, 0x98, 0x1c, 0x33, 0xb8, 0x4b, + 0x41, 0x62, 0xf4, 0x82, 0x30, 0x68, 0xb1, 0x35, 0x82, 0xa3, 0x15, 0x84, + 0x4c, 0x70, 0x45, 0x1a, 0x75, 0xfb, 0x0e, 0x1c, 0xc7, 0xac, 0x5f, 0xdc, + 0xe4, 0x80, 0x3d, 0x96, 0x2a, 0x07, 0xbb, 0x85, 0x97, 0xfb, 0xcd, 0xad, + 0xa5, 0xc6, 0xb1, 0x7f, 0x7b, 0x83, 0x79, 0x25, 0x8a, 0x73, 0xe1, 0x63, + 0x4b, 0xfa, 0x42, 0xf1, 0xad, 0xc5, 0x8b, 0xfa, 0x4f, 0xb0, 0xb5, 0x05, + 0x8b, 0xed, 0x60, 0x5e, 0x58, 0xaf, 0xa2, 0x90, 0x88, 0x3c, 0x61, 0xd0, + 0xc2, 0xff, 0x6d, 0xfc, 0xdf, 0xf3, 0xa5, 0x8b, 0xfe, 0x92, 0x87, 0x0e, + 0xc4, 0x6a, 0xc5, 0x49, 0xf7, 0xf8, 0xda, 0xe9, 0x1a, 0xc5, 0xff, 0x08, + 0xf9, 0xbe, 0xbb, 0x60, 0x96, 0x2a, 0x07, 0xeb, 0xc2, 0x1f, 0x0b, 0xdf, + 0xed, 0x49, 0xb8, 0x4e, 0x6a, 0xc5, 0xff, 0xf3, 0x36, 0xdf, 0x79, 0x28, + 0x3f, 0xdb, 0x8b, 0x17, 0xf4, 0x35, 0xa9, 0x3f, 0x16, 0x2f, 0xf3, 0xe8, + 0x31, 0xfe, 0x60, 0xb1, 0x71, 0xe5, 0x62, 0x86, 0x7f, 0x6c, 0x5f, 0xd4, + 0x6b, 0x7f, 0xfc, 0x3f, 0xcf, 0x0c, 0xc7, 0xd3, 0x9e, 0x4d, 0x58, 0xb4, + 0xac, 0x5a, 0x56, 0x2b, 0x0f, 0xcf, 0x8a, 0x22, 0x11, 0xbf, 0xf4, 0x32, + 0x3d, 0x88, 0x1b, 0x60, 0x4b, 0x17, 0x89, 0xbc, 0xb1, 0x7e, 0xce, 0xc1, + 0x3f, 0x58, 0xbf, 0xf8, 0x20, 0xce, 0x59, 0xdf, 0xa7, 0x02, 0x58, 0xbc, + 0x39, 0x02, 0xc5, 0xff, 0x3c, 0x1f, 0xe2, 0x39, 0xdd, 0x62, 0xa5, 0x13, + 0xc3, 0x48, 0xf0, 0xed, 0xfb, 0xce, 0x58, 0x75, 0x8b, 0xcc, 0x51, 0x83, + 0x5d, 0xc2, 0xc8, 0xc9, 0xbb, 0x8c, 0x8b, 0x45, 0xe7, 0x34, 0xfc, 0x32, + 0x4a, 0x14, 0x9e, 0x2e, 0xe8, 0x87, 0x1c, 0x38, 0x1c, 0x31, 0xfa, 0x8b, + 0xef, 0x1f, 0xb9, 0x58, 0xbf, 0xa0, 0xda, 0xdb, 0xe2, 0x58, 0xbf, 0x72, + 0x40, 0x1e, 0xcb, 0x15, 0x11, 0xed, 0xf0, 0xc2, 0xa5, 0x13, 0x98, 0xf3, + 0x7f, 0xc5, 0xef, 0xe4, 0x1c, 0x18, 0xb1, 0x7b, 0x93, 0xda, 0xc5, 0xb8, + 0xb1, 0x74, 0xc7, 0xac, 0x53, 0x1a, 0xce, 0x09, 0x5f, 0xf8, 0x45, 0xef, + 0xe7, 0x53, 0x83, 0x16, 0x2f, 0xfb, 0x3d, 0xfc, 0x83, 0x83, 0x16, 0x2f, + 0xe7, 0xc0, 0x37, 0x6e, 0xb1, 0x7f, 0xef, 0x3c, 0x1f, 0xe2, 0x39, 0xdd, + 0x62, 0xf3, 0x05, 0x18, 0x34, 0xea, 0x30, 0x87, 0xb3, 0x8d, 0x25, 0x1c, + 0x80, 0x90, 0x7c, 0x70, 0x19, 0x6d, 0x41, 0x5d, 0x49, 0x4b, 0x22, 0xbf, + 0xf3, 0x42, 0x33, 0x35, 0xbb, 0x36, 0xea, 0x91, 0x14, 0xbf, 0xd3, 0xee, + 0x16, 0x74, 0x65, 0x8b, 0xfb, 0xc6, 0xe0, 0xdf, 0xb5, 0x8b, 0x87, 0x18, + 0x03, 0xe4, 0xe8, 0x69, 0x7f, 0xfd, 0xfc, 0x28, 0xcf, 0x33, 0x77, 0xc3, + 0x4d, 0x65, 0x8a, 0xc4, 0x44, 0x78, 0xce, 0xfc, 0xfa, 0x7f, 0x09, 0x62, + 0xf7, 0x50, 0xb6, 0x58, 0xbc, 0xde, 0x8c, 0x93, 0xca, 0xea, 0x28, 0xa8, + 0xc4, 0xf8, 0x26, 0x33, 0xc6, 0x6c, 0xbf, 0xed, 0x69, 0xc2, 0xc8, 0x9c, + 0xeb, 0x17, 0xdb, 0xcf, 0xe5, 0x62, 0x9c, 0xf7, 0x88, 0xee, 0xfd, 0xad, + 0xd9, 0xb7, 0x54, 0x99, 0x25, 0xb8, 0xb1, 0x52, 0x7d, 0x38, 0x40, 0x73, + 0x7b, 0xfa, 0x05, 0x3f, 0x63, 0xac, 0x5f, 0x39, 0x43, 0x8b, 0x17, 0xe9, + 0xe7, 0x9f, 0x65, 0x8a, 0xd8, 0xf2, 0xcd, 0x22, 0xbf, 0xc2, 0xdb, 0xf3, + 0xee, 0x3a, 0xc5, 0xfc, 0x21, 0xbe, 0x9b, 0x8b, 0x17, 0x37, 0x16, 0x29, + 0x62, 0xb4, 0x68, 0xfc, 0x2f, 0x7d, 0x9b, 0x0b, 0xb5, 0x8a, 0x73, 0xc6, + 0x22, 0x1b, 0xec, 0xce, 0xe0, 0xb1, 0x7e, 0xf7, 0x03, 0xe4, 0x64, 0xa7, + 0x57, 0x8f, 0x1a, 0x24, 0xe1, 0xaf, 0xa1, 0x2f, 0xd4, 0x41, 0x51, 0x8a, + 0x96, 0x32, 0x3d, 0x8b, 0xff, 0x43, 0x8f, 0xe3, 0x9e, 0x7d, 0xc5, 0x8b, + 0xfa, 0x7b, 0x86, 0xd8, 0x12, 0xc5, 0xfa, 0x4e, 0xc3, 0x8c, 0xec, 0xfc, + 0x7c, 0x81, 0x7d, 0x81, 0x73, 0xeb, 0x17, 0xe7, 0x17, 0x5e, 0xfa, 0x58, + 0xbe, 0x93, 0xb8, 0x4b, 0x17, 0xf3, 0x9e, 0x7e, 0x18, 0xd6, 0x2a, 0x23, + 0xd2, 0xea, 0x23, 0xbd, 0x30, 0xe2, 0xc5, 0xf4, 0xe1, 0x0d, 0x62, 0xef, + 0xbe, 0x8d, 0xf1, 0xc7, 0x6f, 0xf4, 0xe0, 0x38, 0xcf, 0xb2, 0xc5, 0xf3, + 0xc8, 0xba, 0xf5, 0x8b, 0xcd, 0xe9, 0x58, 0xbf, 0x8f, 0xe7, 0xfb, 0x1d, + 0x62, 0xff, 0xf3, 0xfb, 0xf9, 0xec, 0x29, 0xf4, 0x8d, 0x62, 0xa4, 0xfd, + 0x98, 0xba, 0xf9, 0xe3, 0x66, 0xdd, 0x62, 0xf0, 0xb0, 0x6b, 0x17, 0xf9, + 0xfc, 0x2d, 0x37, 0x23, 0x36, 0x55, 0x08, 0x32, 0x4c, 0x7f, 0xdd, 0x92, + 0x22, 0xcd, 0x19, 0x9c, 0x9f, 0xf0, 0x92, 0xf1, 0x04, 0x71, 0x45, 0x3a, + 0xb8, 0x86, 0x95, 0x8d, 0x7f, 0xfe, 0xfb, 0x42, 0x33, 0x35, 0x3b, 0xf7, + 0xe1, 0x37, 0x16, 0x2f, 0xd2, 0x72, 0xc8, 0x2c, 0x5e, 0xd3, 0x9a, 0xb1, + 0x7c, 0xdd, 0x82, 0x32, 0x23, 0xc5, 0x39, 0x3d, 0x0d, 0x1b, 0xde, 0x85, + 0x05, 0xfd, 0x9a, 0xdd, 0x9b, 0x75, 0x49, 0xb0, 0x5f, 0xff, 0xbe, 0x61, + 0x66, 0xbd, 0xcf, 0xc4, 0x61, 0x9f, 0x8e, 0x58, 0xbf, 0x7d, 0xb4, 0xe7, + 0x58, 0xae, 0xb5, 0x10, 0xfb, 0xaf, 0xdf, 0xb3, 0xa6, 0x9b, 0x8b, 0x17, + 0xfe, 0xd6, 0xd3, 0xe7, 0x78, 0x72, 0x56, 0x2f, 0x68, 0x5f, 0x58, 0xbf, + 0x37, 0xbf, 0x90, 0x58, 0xbf, 0xfa, 0x47, 0x9d, 0xf8, 0xd6, 0x03, 0xf9, + 0x62, 0xef, 0x46, 0x4a, 0x63, 0xc3, 0x29, 0xc2, 0xad, 0x1f, 0xf0, 0x78, + 0x32, 0x8a, 0x8c, 0x54, 0x8e, 0xf1, 0xf0, 0xde, 0xce, 0x62, 0xc5, 0xed, + 0x66, 0xcb, 0x17, 0xdb, 0xb3, 0x6e, 0xa9, 0x36, 0xcb, 0xf1, 0xc1, 0x85, + 0xba, 0xc5, 0xcd, 0xa5, 0x8b, 0x41, 0x62, 0xdc, 0x93, 0xd2, 0xd8, 0xa4, + 0x42, 0xf5, 0xba, 0x35, 0xb4, 0x3d, 0xe8, 0x41, 0xdf, 0xbf, 0xe7, 0x00, + 0x96, 0x2f, 0xff, 0x4e, 0xde, 0x71, 0xe1, 0x41, 0xfe, 0x25, 0x8a, 0x73, + 0xf3, 0xf9, 0x4d, 0xf9, 0xa2, 0x29, 0x3a, 0xc5, 0xf4, 0x67, 0x0f, 0x2b, + 0x16, 0x25, 0x8a, 0x81, 0xb7, 0x22, 0x6b, 0xfd, 0x09, 0xd6, 0xd3, 0xad, + 0x96, 0x2f, 0xf0, 0x24, 0x0c, 0x42, 0xc5, 0x8b, 0x83, 0xf2, 0xc5, 0x39, + 0xe5, 0xe8, 0xca, 0xa5, 0x14, 0x59, 0x08, 0x1b, 0xe9, 0x8b, 0x8e, 0xb1, + 0x50, 0x56, 0x4d, 0x90, 0xf2, 0x8a, 0x15, 0x27, 0x21, 0x65, 0xf2, 0x86, + 0x17, 0x51, 0x35, 0xff, 0x87, 0xa7, 0x16, 0xd1, 0x9c, 0xd7, 0x96, 0x2a, + 0x31, 0x17, 0x78, 0xed, 0x7f, 0xff, 0xde, 0x73, 0x63, 0x3c, 0x26, 0x88, + 0x98, 0x2d, 0x4f, 0x9b, 0xcb, 0x17, 0xfb, 0x39, 0xc9, 0x00, 0x7b, 0x2c, + 0x5e, 0xfe, 0x6c, 0xb1, 0x7f, 0x30, 0xf3, 0x08, 0xd5, 0x8b, 0xfb, 0xef, + 0xad, 0x34, 0x16, 0x2f, 0xfd, 0xe7, 0x83, 0xfc, 0x47, 0x3b, 0xac, 0x50, + 0xd1, 0xdd, 0x11, 0xb1, 0xc7, 0xb8, 0x5a, 0x19, 0x75, 0xfe, 0xc8, 0xcd, + 0x64, 0x73, 0x9a, 0xb1, 0x60, 0x46, 0x22, 0x1a, 0x39, 0x32, 0xd9, 0xf5, + 0x41, 0xe5, 0x1f, 0x05, 0xff, 0xfe, 0xce, 0x99, 0x18, 0x0c, 0xf7, 0x3d, + 0x1d, 0x9f, 0xce, 0xfc, 0xb1, 0x7f, 0xe9, 0x04, 0x61, 0x64, 0x50, 0x9e, + 0xd6, 0x2b, 0xe8, 0xad, 0x26, 0xab, 0x12, 0xc5, 0xa0, 0xb1, 0x51, 0xb1, + 0xa3, 0x18, 0x8d, 0xe8, 0xdb, 0xe3, 0x58, 0xbd, 0xb7, 0xdd, 0x62, 0xff, + 0xd1, 0xb4, 0x6d, 0xd7, 0x7e, 0xfe, 0x14, 0x81, 0x62, 0xfb, 0xac, 0xde, + 0x12, 0xb1, 0x7b, 0xae, 0x46, 0xbe, 0xb8, 0xb1, 0x79, 0xfb, 0x82, 0xc5, + 0xf4, 0xfd, 0xa2, 0x58, 0xbd, 0xd0, 0x50, 0x58, 0xa3, 0x9f, 0x0f, 0x87, + 0xba, 0x11, 0xdf, 0x8a, 0x03, 0x11, 0xd6, 0x2e, 0xcf, 0x2c, 0x5f, 0xc1, + 0x07, 0x1c, 0xc4, 0x05, 0x8a, 0x93, 0xf3, 0x19, 0x4e, 0x0b, 0xdd, 0x86, + 0xac, 0x5f, 0xfb, 0x82, 0x3e, 0xff, 0x68, 0x84, 0x12, 0xc5, 0xfc, 0xe1, + 0xc5, 0xc1, 0x76, 0xb1, 0x7d, 0xbf, 0xc5, 0xa5, 0x8b, 0x46, 0xcb, 0x14, + 0x33, 0x79, 0xa2, 0x5a, 0x94, 0x75, 0xb8, 0xc7, 0xd1, 0x19, 0xba, 0xff, + 0x6b, 0x53, 0x06, 0xec, 0x25, 0x8b, 0xf9, 0xf6, 0x19, 0x48, 0x6b, 0x15, + 0x87, 0xca, 0x46, 0xd7, 0xff, 0xed, 0x03, 0xf9, 0xcf, 0xe7, 0xb8, 0xe5, + 0xdc, 0x16, 0x2f, 0xff, 0x1a, 0x6b, 0x05, 0x3a, 0xf8, 0x4c, 0x5b, 0x2c, + 0x54, 0xa2, 0x99, 0xd5, 0xef, 0xf0, 0x86, 0x1e, 0xcc, 0xc3, 0x58, 0xbf, + 0xfa, 0x2f, 0x8a, 0x3f, 0xc0, 0x72, 0x87, 0x16, 0x2f, 0xb7, 0x66, 0xdd, + 0x52, 0x78, 0x17, 0xef, 0x77, 0xbb, 0xe9, 0x62, 0xff, 0x81, 0xc3, 0x38, + 0x06, 0xc8, 0x96, 0x2f, 0xf6, 0xb5, 0x9e, 0xe4, 0x9d, 0x62, 0x9c, 0xfc, + 0x18, 0xf2, 0xf0, 0xdf, 0xcb, 0x17, 0xfa, 0x7a, 0x6b, 0x59, 0xdf, 0x16, + 0x28, 0xe7, 0xa9, 0xe1, 0xdb, 0xb9, 0xf5, 0x8a, 0x63, 0x74, 0x22, 0x2b, + 0xf6, 0xb3, 0xa3, 0x69, 0x62, 0xff, 0xda, 0x0f, 0xcf, 0xf2, 0xcf, 0x62, + 0xc5, 0x39, 0xf4, 0xb1, 0x55, 0x41, 0x56, 0x20, 0xc8, 0x5c, 0xdb, 0x49, + 0x47, 0x31, 0xfc, 0x26, 0xca, 0x15, 0xdd, 0x21, 0x13, 0x7d, 0xee, 0xba, + 0xe4, 0x4b, 0x17, 0x4c, 0xac, 0x56, 0x8f, 0x0b, 0xc5, 0x97, 0xed, 0x8a, + 0x5c, 0x6b, 0x16, 0xf2, 0xc5, 0xff, 0xbe, 0xec, 0x0e, 0xe0, 0x26, 0xf2, + 0xc5, 0x9c, 0x07, 0xa5, 0xe1, 0x2b, 0xff, 0xa7, 0x73, 0x30, 0xf8, 0x5e, + 0x8e, 0xc5, 0x8b, 0xff, 0xbc, 0xfc, 0xc8, 0x49, 0xa1, 0x6d, 0xb2, 0xc5, + 0x9c, 0xe8, 0x91, 0xf2, 0x45, 0x4a, 0x6b, 0x43, 0x7a, 0xfc, 0x2e, 0x2e, + 0x6e, 0x2c, 0x5c, 0x2e, 0x2c, 0x5e, 0x8e, 0xcf, 0xac, 0x50, 0x0f, 0x3f, + 0x82, 0xfe, 0x18, 0xbf, 0x38, 0x4c, 0xdd, 0x4b, 0x17, 0xfc, 0x3d, 0x4f, + 0x9f, 0x77, 0x1a, 0xc5, 0xef, 0x49, 0xd6, 0x2b, 0x0f, 0x5f, 0xc7, 0x57, + 0xd2, 0x50, 0x65, 0x8b, 0x9e, 0x39, 0x62, 0xa2, 0x46, 0xf6, 0xa1, 0x04, + 0x72, 0x1e, 0xbc, 0x86, 0xed, 0xc2, 0x58, 0xbf, 0xa4, 0xbd, 0xd1, 0xb7, + 0x58, 0xbf, 0xa1, 0x3d, 0x27, 0x5d, 0xac, 0x5f, 0xff, 0xcd, 0xb4, 0x50, + 0x9d, 0x6d, 0xe8, 0x64, 0x7b, 0x10, 0x16, 0x2a, 0x34, 0x46, 0xe4, 0x06, + 0xb0, 0xc1, 0x8c, 0x6f, 0xbb, 0xe4, 0xf4, 0x58, 0xb8, 0x3e, 0x2c, 0x5f, + 0x7b, 0xfc, 0x75, 0x8b, 0xf6, 0x0c, 0x39, 0xed, 0x62, 0xfd, 0x91, 0x7d, + 0x8e, 0xb1, 0x6e, 0xfe, 0x7a, 0x61, 0x95, 0x54, 0xa2, 0x81, 0xdd, 0xaf, + 0x16, 0x44, 0xb1, 0x58, 0x98, 0xec, 0x44, 0xda, 0x85, 0xcf, 0xc8, 0x6f, + 0xef, 0x37, 0xcc, 0x1c, 0xac, 0x5f, 0xf3, 0x7b, 0x92, 0xe3, 0xc3, 0xac, + 0x54, 0x9f, 0x39, 0x17, 0xdf, 0xa0, 0xef, 0xf6, 0x58, 0xbe, 0x2c, 0x73, + 0x56, 0x2f, 0xe8, 0x7b, 0x0b, 0xdc, 0x58, 0xbd, 0x01, 0x71, 0x62, 0xc7, + 0xec, 0xf3, 0x22, 0x2e, 0xae, 0xd1, 0x7e, 0x72, 0x70, 0xdb, 0xae, 0xfc, + 0x16, 0x2e, 0xc3, 0x56, 0x2f, 0x6f, 0x84, 0xb1, 0x7e, 0xef, 0x8f, 0xdf, + 0x16, 0x2c, 0x75, 0x8b, 0xe8, 0x79, 0xf6, 0x58, 0xa9, 0x3f, 0xe8, 0x87, + 0x4e, 0x56, 0xc2, 0x57, 0xff, 0x7a, 0x4b, 0x77, 0x39, 0xdf, 0x82, 0x58, + 0xbf, 0xf8, 0x39, 0xd4, 0x0c, 0xe6, 0x1e, 0x71, 0x62, 0x9d, 0x11, 0x7e, + 0x45, 0xbe, 0x62, 0xdb, 0xeb, 0x15, 0x29, 0xf5, 0xc0, 0xcb, 0x06, 0x1e, + 0x12, 0xcd, 0x0c, 0x60, 0x88, 0xae, 0xc3, 0xac, 0x5f, 0x9f, 0xe3, 0x7e, + 0x2c, 0x59, 0xf6, 0x37, 0xf0, 0x17, 0xbf, 0x61, 0x03, 0xaa, 0x56, 0x2e, + 0x6e, 0x2c, 0x5e, 0x13, 0x71, 0x62, 0xbc, 0x6d, 0x03, 0x17, 0xb7, 0x16, + 0x2e, 0x2f, 0x2c, 0x5e, 0x7d, 0x8e, 0xb1, 0x58, 0x6d, 0x74, 0x2f, 0x5b, + 0x1f, 0x3c, 0x48, 0xf7, 0xd0, 0xe6, 0xcc, 0xb1, 0x52, 0x8d, 0x1c, 0x84, + 0x48, 0x89, 0x2e, 0x88, 0x6b, 0x17, 0xff, 0xff, 0xc4, 0x26, 0xe6, 0x17, + 0x39, 0x9f, 0x7e, 0x0b, 0x6e, 0x7f, 0x3b, 0xf4, 0xac, 0x5f, 0x9f, 0x4d, + 0xd8, 0x4b, 0x17, 0xfe, 0x9d, 0xcc, 0xc2, 0x14, 0x33, 0x8b, 0x15, 0x04, + 0x74, 0x44, 0xfc, 0x72, 0xab, 0xfd, 0xf7, 0x08, 0xdd, 0x30, 0x4b, 0x17, + 0xee, 0x92, 0x33, 0xf1, 0x62, 0xfe, 0xce, 0x0b, 0xd2, 0x4b, 0x17, 0xff, + 0xfc, 0xfb, 0x73, 0x35, 0xbf, 0xc4, 0xc1, 0x8f, 0xf2, 0x3d, 0x32, 0xc5, + 0xe6, 0x20, 0x2c, 0x5f, 0x8b, 0x7c, 0xef, 0xcb, 0x15, 0x03, 0xc6, 0xc1, + 0xcb, 0xff, 0xfe, 0x7f, 0x31, 0xd8, 0x81, 0xbf, 0xdf, 0x50, 0x0e, 0x18, + 0x4b, 0x15, 0x29, 0x9c, 0x64, 0x2c, 0x18, 0x86, 0xfd, 0xd3, 0x30, 0x8d, + 0x58, 0xbf, 0xb0, 0x7f, 0x9e, 0x47, 0xac, 0x5e, 0x83, 0x76, 0xb1, 0x78, + 0x7f, 0xc5, 0x8b, 0xa7, 0xbe, 0xcd, 0xdb, 0x0f, 0x50, 0xd5, 0xf7, 0xe4, + 0x60, 0x3b, 0x98, 0xb9, 0xbc, 0x45, 0x7f, 0x8d, 0x94, 0x06, 0x64, 0x54, + 0x26, 0xcb, 0xf8, 0xb3, 0xc0, 0xce, 0xd6, 0x2f, 0xf3, 0x10, 0x3d, 0x1d, + 0x9f, 0x58, 0xb7, 0x16, 0x2f, 0x9e, 0x75, 0x05, 0x8b, 0xdf, 0x68, 0x39, + 0xb4, 0x38, 0x95, 0x47, 0xa2, 0x6f, 0xed, 0x55, 0x28, 0xef, 0xc8, 0x64, + 0xdc, 0x7e, 0x2c, 0x52, 0xc5, 0xec, 0xc0, 0x2c, 0x5e, 0x92, 0x84, 0x79, + 0xa8, 0x20, 0xcb, 0xff, 0x80, 0xc4, 0x02, 0xce, 0x9f, 0xc1, 0xac, 0x5f, + 0xfc, 0xc0, 0xc1, 0xe7, 0xdf, 0x5f, 0x65, 0x8a, 0xed, 0x11, 0x1c, 0x45, + 0xbf, 0xf3, 0x03, 0xcf, 0xcf, 0xc9, 0x79, 0x62, 0xfe, 0xef, 0x98, 0x79, + 0x8f, 0x58, 0xa7, 0x3f, 0x01, 0x1f, 0x5f, 0xe0, 0xca, 0x01, 0xe9, 0x80, + 0xb1, 0x7b, 0xc1, 0x6e, 0xb1, 0x7f, 0xe3, 0xfc, 0xb3, 0xbf, 0x09, 0xb8, + 0xb1, 0x58, 0x7c, 0x0c, 0x41, 0x60, 0x2c, 0x5f, 0xed, 0x69, 0xcf, 0xfc, + 0xd9, 0x62, 0xa4, 0xf1, 0xf0, 0x4a, 0xa0, 0xab, 0xcf, 0x09, 0x8d, 0x40, + 0x78, 0x5d, 0xfe, 0x12, 0x80, 0x21, 0xe4, 0x25, 0xbc, 0xcf, 0x7f, 0x9b, + 0xec, 0x19, 0xf3, 0x8b, 0x16, 0xe8, 0xb1, 0x70, 0x71, 0xcb, 0x15, 0xd6, + 0x9b, 0x0f, 0x8a, 0x5b, 0x75, 0x8b, 0xb7, 0x82, 0xc5, 0x61, 0xe9, 0x6e, + 0x4d, 0xe1, 0x3b, 0xa2, 0xe2, 0xc5, 0xfd, 0x9b, 0x03, 0x92, 0x4b, 0x14, + 0xc7, 0x8e, 0x43, 0x37, 0xfe, 0xe0, 0x80, 0x19, 0xe2, 0x83, 0xe9, 0x62, + 0xff, 0xff, 0x9c, 0x85, 0x0c, 0xe7, 0x7e, 0xd4, 0xe7, 0x70, 0x38, 0x04, + 0xb1, 0x44, 0x8c, 0xce, 0x10, 0x79, 0x0e, 0xff, 0x69, 0xbb, 0x1f, 0xdc, + 0x25, 0x8a, 0x8d, 0xdb, 0xe7, 0xde, 0xb4, 0x9a, 0x36, 0x23, 0xeb, 0x83, + 0xd1, 0xa9, 0x42, 0x35, 0x94, 0xcc, 0x24, 0x76, 0x85, 0x24, 0x23, 0x18, + 0x1c, 0x27, 0xf2, 0x5c, 0x51, 0xb0, 0xc4, 0xde, 0x37, 0xce, 0xe1, 0x08, + 0xf1, 0x86, 0xc5, 0x19, 0x26, 0xa3, 0x5d, 0x3c, 0x2a, 0xbf, 0x2b, 0x29, + 0xa1, 0x3c, 0x02, 0x72, 0x8c, 0xbf, 0x93, 0x84, 0x5e, 0x9c, 0x6d, 0xe9, + 0x08, 0x18, 0xe8, 0x5b, 0x07, 0x1a, 0x17, 0x51, 0x7d, 0xef, 0x48, 0xd6, + 0x2f, 0x80, 0xda, 0xe2, 0xc5, 0xdd, 0xc6, 0x49, 0xe0, 0x60, 0xed, 0xfe, + 0x04, 0x64, 0x50, 0x92, 0xf2, 0xc5, 0x46, 0x2a, 0xc1, 0x99, 0x4b, 0x3a, + 0x30, 0xbe, 0x37, 0x4c, 0x12, 0xc5, 0x89, 0x62, 0xdd, 0xac, 0x58, 0x78, + 0x69, 0x03, 0x11, 0xa0, 0x1f, 0x81, 0x24, 0xdd, 0x9d, 0xac, 0x5f, 0x82, + 0x2c, 0xd8, 0x4b, 0x17, 0xb8, 0x2d, 0x96, 0x2a, 0x4f, 0x25, 0x8a, 0xa9, + 0xd1, 0x03, 0xa6, 0x1b, 0xed, 0xd9, 0xb7, 0x54, 0x9e, 0x85, 0xf8, 0x0f, + 0xa8, 0x62, 0xc5, 0x68, 0xf6, 0x78, 0x63, 0x7c, 0x00, 0xf5, 0xba, 0xc5, + 0xf4, 0x90, 0x99, 0x62, 0xfd, 0x9e, 0x29, 0xd9, 0x62, 0xff, 0xcc, 0xfe, + 0x16, 0x9b, 0xa6, 0x0d, 0x62, 0xe1, 0x71, 0x62, 0xfb, 0x9f, 0x68, 0xf5, + 0x8a, 0x19, 0xbe, 0xf8, 0xc5, 0xfa, 0x4e, 0xdf, 0x95, 0x8b, 0xc7, 0x7f, + 0x2c, 0x5f, 0xf3, 0x7a, 0x12, 0x6f, 0x9f, 0x65, 0x8a, 0xd1, 0xff, 0x9c, + 0x9c, 0x87, 0x6f, 0xd8, 0x7f, 0xb0, 0xd6, 0x2a, 0x55, 0x91, 0x0e, 0x14, + 0x58, 0xf7, 0xd9, 0x13, 0x93, 0x68, 0x87, 0xe5, 0x0c, 0xfc, 0x1c, 0x28, + 0x3a, 0x8b, 0xaf, 0xfe, 0xc1, 0xff, 0x0e, 0x76, 0x86, 0x12, 0xc5, 0xe1, + 0x48, 0x16, 0x2f, 0xba, 0x61, 0x46, 0x0c, 0xf8, 0x34, 0x87, 0x7f, 0xdd, + 0xfb, 0x08, 0x50, 0xce, 0x2c, 0x5f, 0xff, 0x84, 0x3f, 0xb4, 0x38, 0xe7, + 0xe7, 0x18, 0xb7, 0x58, 0xbe, 0x8a, 0x0c, 0x35, 0x8b, 0xfc, 0xfc, 0x0c, + 0x9b, 0xdc, 0x58, 0xa8, 0x22, 0xbf, 0x15, 0xcd, 0x24, 0xbf, 0xbc, 0xfa, + 0x9c, 0x25, 0x8b, 0xee, 0xa7, 0xd6, 0xcb, 0x16, 0x8c, 0xc4, 0xdb, 0x3d, + 0x0e, 0x90, 0xcc, 0x3a, 0x8b, 0x29, 0xd3, 0xf8, 0xfc, 0x75, 0x35, 0x18, + 0xac, 0x67, 0x25, 0x78, 0x54, 0x6a, 0x84, 0x18, 0x3c, 0x6b, 0x73, 0x98, + 0xd6, 0x76, 0x87, 0xcc, 0x23, 0xa1, 0xcb, 0x4d, 0x2d, 0xbc, 0xa8, 0x77, + 0xa7, 0x64, 0xc5, 0x4a, 0x07, 0xd4, 0xa0, 0xb3, 0xcb, 0x57, 0xfc, 0xe1, + 0x33, 0x46, 0x10, 0x09, 0x4d, 0xe5, 0x38, 0x1d, 0xc9, 0x46, 0x9e, 0x86, + 0xe0, 0xad, 0x0c, 0x18, 0x53, 0xdc, 0xd7, 0x81, 0x1d, 0xb2, 0xc5, 0xff, + 0x46, 0xf1, 0xa0, 0xb8, 0xe5, 0xdc, 0x16, 0x2e, 0xf7, 0x16, 0x2a, 0x36, + 0x3f, 0xfe, 0xbb, 0x22, 0x24, 0x5b, 0x8e, 0x75, 0x8b, 0x7d, 0x62, 0xba, + 0xc3, 0x54, 0x21, 0x8b, 0xff, 0x85, 0x31, 0x16, 0x74, 0x63, 0x9d, 0xd6, + 0x2f, 0xb3, 0xed, 0xe5, 0x8b, 0xfd, 0x8f, 0xa0, 0x00, 0x5c, 0x58, 0xb7, + 0x5a, 0x6a, 0x27, 0x09, 0x1b, 0x84, 0x57, 0x9f, 0x38, 0xb1, 0x7f, 0xff, + 0xc4, 0x3f, 0xc9, 0x9e, 0xfe, 0x1f, 0x3c, 0x52, 0x00, 0x4a, 0xc5, 0xff, + 0xef, 0x70, 0x53, 0xcc, 0xf3, 0x9d, 0xa0, 0xb1, 0x7a, 0x7b, 0xd9, 0x62, + 0x88, 0xfa, 0x7c, 0x95, 0x7c, 0xf1, 0xd2, 0x75, 0x8b, 0xfd, 0xf9, 0xdb, + 0x53, 0x83, 0x58, 0xbf, 0xfe, 0x8b, 0x30, 0x23, 0x03, 0x84, 0xf4, 0x72, + 0x02, 0xc5, 0xff, 0xd9, 0x81, 0x07, 0x09, 0xe8, 0xe4, 0x05, 0x8b, 0xd8, + 0xfd, 0x0c, 0x44, 0xe4, 0x4a, 0xb5, 0x29, 0x83, 0xfe, 0x1a, 0x17, 0xfd, + 0xee, 0x67, 0x70, 0xf8, 0x8d, 0x58, 0xbd, 0xc9, 0x89, 0x62, 0xed, 0x4a, + 0xc5, 0x0d, 0x56, 0x96, 0x0e, 0x3c, 0x33, 0xce, 0x43, 0xf8, 0xcb, 0x08, + 0xa3, 0x87, 0xbd, 0x43, 0xd6, 0xc5, 0x8b, 0x9b, 0xeb, 0x17, 0xff, 0xff, + 0xf3, 0x99, 0xec, 0x8a, 0x41, 0xcd, 0xfe, 0x2e, 0xe1, 0x21, 0x16, 0x6c, + 0x61, 0x9f, 0x8e, 0x58, 0xad, 0xd1, 0x7a, 0x42, 0x3d, 0x42, 0xf7, 0xbb, + 0xc6, 0x58, 0xba, 0x60, 0xb1, 0x51, 0x86, 0xd3, 0xa0, 0xed, 0xef, 0xe7, + 0x16, 0x2f, 0xf8, 0x9c, 0xdf, 0x77, 0xbb, 0xfd, 0x62, 0xf7, 0x27, 0x65, + 0x8b, 0xf7, 0x57, 0xe3, 0xe7, 0xb5, 0x8a, 0x94, 0x66, 0x8c, 0x9b, 0x07, + 0x7b, 0x3c, 0x71, 0xeb, 0xfa, 0x0d, 0xad, 0xbe, 0x25, 0x8b, 0xfb, 0xee, + 0xc0, 0x04, 0xac, 0x54, 0x47, 0xbb, 0xe3, 0x0b, 0xff, 0xec, 0xce, 0x18, + 0x3f, 0xce, 0xb7, 0x2c, 0xd9, 0x62, 0xfb, 0xb8, 0x0b, 0x65, 0x8b, 0xf8, + 0xde, 0x34, 0xf7, 0x05, 0x8b, 0x61, 0xa8, 0xa8, 0xed, 0x49, 0xc9, 0xaf, + 0x16, 0x79, 0x62, 0xf6, 0x11, 0xab, 0x17, 0x09, 0x96, 0x2f, 0x36, 0xa1, + 0x27, 0xa1, 0x83, 0x84, 0x3b, 0x73, 0x9d, 0x62, 0xb1, 0x3a, 0x5d, 0x43, + 0x2c, 0x50, 0x86, 0xea, 0x3d, 0xbf, 0xff, 0x11, 0x85, 0x8f, 0x87, 0x2c, + 0xf7, 0xdf, 0xb5, 0x8b, 0xe3, 0x88, 0x86, 0xb1, 0x7f, 0xff, 0x4e, 0xa2, + 0xe6, 0xff, 0x17, 0x39, 0x26, 0x96, 0x74, 0x58, 0xbc, 0x6c, 0x84, 0xb1, + 0x79, 0x9b, 0x75, 0x48, 0x46, 0x5e, 0xdd, 0xb4, 0xb1, 0x7f, 0xa0, 0xcc, + 0x36, 0x6e, 0x8b, 0x14, 0x69, 0xe9, 0x76, 0x3d, 0x46, 0xa2, 0xff, 0x71, + 0xf7, 0x7c, 0xbe, 0xf7, 0x18, 0x0b, 0x17, 0xdf, 0x73, 0x44, 0xb1, 0x77, + 0x63, 0x58, 0xa8, 0xd8, 0xf8, 0x06, 0x46, 0xc4, 0x97, 0xe7, 0x63, 0xe6, + 0x96, 0x2f, 0xf8, 0x4d, 0xd9, 0x66, 0xc1, 0xc1, 0x62, 0xf6, 0xe1, 0x9d, + 0x62, 0xff, 0xff, 0x08, 0x6c, 0x40, 0xc3, 0x74, 0xfd, 0xe7, 0xb8, 0x58, + 0xb1, 0x7f, 0xff, 0xd3, 0x17, 0xa7, 0x9a, 0x9f, 0x3e, 0xee, 0x33, 0x0d, + 0x26, 0x58, 0xa9, 0x47, 0x54, 0x44, 0x04, 0xc3, 0x7f, 0xf3, 0xf3, 0xf8, + 0x69, 0xac, 0x60, 0xfb, 0x58, 0xa9, 0x5c, 0x20, 0xd9, 0x53, 0x72, 0x3d, + 0x46, 0x40, 0x78, 0x48, 0xfc, 0xcf, 0x84, 0xfe, 0x8c, 0x9b, 0xa1, 0x7d, + 0xe3, 0xe7, 0x16, 0x2f, 0x3f, 0x0d, 0x58, 0xbf, 0x45, 0x85, 0xee, 0x2c, + 0x5f, 0xfd, 0x9b, 0x0b, 0xb3, 0x35, 0x9e, 0x6e, 0xd6, 0x2d, 0xde, 0x8f, + 0xc8, 0x8a, 0x6a, 0x51, 0xab, 0xf1, 0xd6, 0x84, 0x85, 0xfc, 0xdd, 0xff, + 0x1c, 0x25, 0x8b, 0xa1, 0xf5, 0x8a, 0xd1, 0xe3, 0xb1, 0x7d, 0xfe, 0xcf, + 0x61, 0xf6, 0xc0, 0x96, 0x28, 0x67, 0xac, 0x44, 0x37, 0xff, 0x73, 0x98, + 0x72, 0xce, 0x86, 0x4f, 0x58, 0xb1, 0x4e, 0x7d, 0xa2, 0x21, 0xbf, 0xd9, + 0xb7, 0xcb, 0x04, 0x35, 0x8a, 0xf9, 0xea, 0x91, 0x0d, 0xfe, 0xdb, 0x59, + 0xef, 0x3f, 0x96, 0x29, 0x62, 0xff, 0xef, 0xe7, 0x8a, 0x62, 0x30, 0xd2, + 0x65, 0x8b, 0x85, 0x31, 0x1e, 0x97, 0x83, 0x2a, 0x51, 0x6b, 0xc8, 0x43, + 0xde, 0x29, 0xed, 0x62, 0xe7, 0x3a, 0xc5, 0xda, 0x35, 0x62, 0xfc, 0xc1, + 0x7b, 0x3e, 0xb1, 0x4c, 0x78, 0x44, 0x33, 0x50, 0x45, 0xe8, 0xc9, 0xfe, + 0x3b, 0xe5, 0x9b, 0x9b, 0xeb, 0x17, 0xfb, 0x59, 0xcc, 0x62, 0xd9, 0x62, + 0xf1, 0xc5, 0xda, 0xc5, 0x0c, 0xfa, 0x70, 0x5c, 0x06, 0x77, 0xf4, 0xec, + 0x69, 0x30, 0xd6, 0x2f, 0xe1, 0x87, 0xff, 0xb4, 0x16, 0x2b, 0x0f, 0x7c, + 0x45, 0xf6, 0x3a, 0xc5, 0xfe, 0x0e, 0x13, 0xd1, 0xc8, 0x0b, 0x17, 0xf4, + 0x27, 0xa3, 0x90, 0x16, 0x2c, 0x11, 0x87, 0xca, 0x19, 0xb5, 0x0d, 0x14, + 0x58, 0xef, 0x7f, 0xed, 0x8c, 0x2c, 0xf7, 0x3f, 0x86, 0xac, 0x5f, 0xee, + 0xe1, 0xc1, 0xfc, 0x47, 0x58, 0xa9, 0x3f, 0x9c, 0x42, 0xbf, 0x36, 0xc1, + 0xb8, 0xd6, 0x2f, 0xfe, 0xc0, 0x85, 0x3b, 0x78, 0x73, 0xee, 0x2c, 0x5c, + 0xf1, 0x2c, 0x54, 0x15, 0x03, 0xe4, 0x30, 0xff, 0x09, 0xb6, 0x20, 0x22, + 0xaf, 0x23, 0xdf, 0xfe, 0x83, 0x9a, 0x6b, 0x72, 0x5f, 0x66, 0xf2, 0xc5, + 0xff, 0xfc, 0xcf, 0xe9, 0xf9, 0x67, 0xbe, 0xff, 0xc7, 0x09, 0x62, 0xff, + 0xff, 0xfe, 0x2c, 0xd6, 0x9f, 0xa8, 0xc9, 0x83, 0xfb, 0xf2, 0x76, 0x23, + 0x27, 0x5a, 0x7e, 0x8b, 0x14, 0xe9, 0x99, 0x7d, 0x33, 0xcb, 0x36, 0x25, + 0x8b, 0xfb, 0xe6, 0x7f, 0x07, 0x8b, 0x17, 0xff, 0xff, 0x79, 0xcf, 0xa7, + 0xce, 0xc8, 0x5e, 0x9f, 0x99, 0xd1, 0xfd, 0x14, 0xac, 0x53, 0x22, 0x97, + 0xc5, 0xf7, 0xc1, 0x18, 0x0d, 0x96, 0x2f, 0xfe, 0xe6, 0x44, 0x00, 0x3e, + 0x9f, 0xb0, 0x2c, 0x5f, 0xce, 0x4f, 0xad, 0x62, 0xc5, 0x4a, 0x26, 0xa0, + 0x4f, 0x88, 0xf7, 0xfd, 0x8c, 0x40, 0xd0, 0xa4, 0x0b, 0x17, 0xf8, 0x83, + 0xf1, 0x9c, 0x91, 0xac, 0x5f, 0xf7, 0x70, 0xc6, 0xee, 0x3a, 0x4e, 0xb1, + 0x52, 0xa9, 0xf0, 0x66, 0x19, 0x0b, 0x6e, 0xe1, 0x79, 0xa2, 0xe6, 0x38, + 0xf1, 0xb5, 0xfe, 0xd8, 0xcf, 0xcb, 0x96, 0xeb, 0x17, 0xef, 0x3c, 0x33, + 0x8b, 0x17, 0xfd, 0x07, 0xf0, 0x7a, 0x9f, 0xca, 0xc5, 0x4a, 0x26, 0x30, + 0xd8, 0x45, 0x17, 0xff, 0xe3, 0xc7, 0xbb, 0x34, 0x5e, 0xfe, 0x43, 0xef, + 0xd1, 0x62, 0xff, 0xf3, 0x14, 0x4e, 0x7f, 0xe7, 0x31, 0xc9, 0x62, 0xff, + 0xee, 0x7a, 0x7d, 0x9e, 0x8a, 0x13, 0xf5, 0x8b, 0xc2, 0x90, 0x2c, 0x5f, + 0xdc, 0x38, 0x8a, 0x42, 0x58, 0xb4, 0x25, 0x12, 0x5a, 0x46, 0x10, 0xed, + 0xff, 0xfc, 0x11, 0x92, 0xe5, 0xee, 0x0a, 0x75, 0x9e, 0x6e, 0xd6, 0x2f, + 0xff, 0xff, 0x14, 0xef, 0xfc, 0xe3, 0x11, 0x9e, 0xfc, 0x90, 0xa7, 0xdc, + 0xc2, 0x58, 0xad, 0x93, 0xe2, 0xee, 0x1b, 0x4e, 0x6b, 0xe5, 0xdb, 0xfe, + 0x7e, 0x60, 0xf3, 0xa3, 0xe9, 0x62, 0xff, 0xff, 0x9b, 0x9f, 0xce, 0xfc, + 0x4e, 0x11, 0x93, 0x84, 0x3f, 0xca, 0xc5, 0xfa, 0x39, 0xf5, 0x86, 0xac, + 0x5f, 0x77, 0x93, 0xda, 0xc5, 0xb5, 0x11, 0xe8, 0x7c, 0xb2, 0xfa, 0x75, + 0x20, 0x58, 0xac, 0x3c, 0xbf, 0x14, 0xdc, 0xd1, 0x2c, 0x5f, 0x01, 0xa2, + 0x3a, 0xc5, 0xff, 0xfb, 0x0e, 0x77, 0xea, 0x33, 0x1f, 0x4e, 0x79, 0x35, + 0x62, 0xe9, 0x3e, 0x91, 0x2a, 0x01, 0x82, 0x24, 0xb8, 0x33, 0xac, 0x5f, + 0xfe, 0xf4, 0x33, 0x59, 0xc3, 0x34, 0x37, 0xd2, 0xc5, 0xfb, 0x35, 0x09, + 0x3a, 0xc5, 0x6c, 0x88, 0xd7, 0x19, 0x3a, 0x65, 0x4a, 0xeb, 0x56, 0x4a, + 0x3d, 0xdd, 0x13, 0xb3, 0xa7, 0x8c, 0x0b, 0xf0, 0xb6, 0x68, 0x63, 0xdd, + 0xb1, 0xd2, 0x2e, 0x08, 0x24, 0x8b, 0xfd, 0xf7, 0x8b, 0xf3, 0xb4, 0x60, + 0x0d, 0x98, 0x43, 0x37, 0xd8, 0x3f, 0xe2, 0xc5, 0xa3, 0x37, 0x3f, 0x12, + 0x4f, 0xbf, 0xdc, 0x2c, 0xf4, 0x76, 0x79, 0x62, 0xfb, 0xa4, 0xfa, 0x56, + 0x2f, 0xe3, 0xb9, 0x9b, 0x70, 0x25, 0x8b, 0xdd, 0x1b, 0x4b, 0x17, 0xd9, + 0xf2, 0xc5, 0x8a, 0xc3, 0xc0, 0xe0, 0xfd, 0x41, 0x31, 0x8c, 0x2b, 0x73, + 0x63, 0x92, 0x79, 0xca, 0xdd, 0x4b, 0x17, 0xe6, 0x3e, 0x77, 0xe5, 0x8b, + 0xfc, 0xc5, 0xb9, 0x81, 0x7b, 0x8b, 0x15, 0xb1, 0xfa, 0xe0, 0xa8, 0x8a, + 0x6f, 0xf7, 0xb5, 0x25, 0xb3, 0xee, 0xb1, 0x7b, 0x69, 0x8f, 0x58, 0xa5, + 0x8b, 0xff, 0xb0, 0xb3, 0x9c, 0x6d, 0x77, 0x0e, 0x2c, 0x5f, 0xec, 0xef, + 0xdf, 0xc1, 0x6e, 0xb1, 0x5b, 0xa2, 0x1d, 0xc3, 0x09, 0x16, 0xff, 0xf3, + 0x9b, 0xc7, 0xc2, 0x00, 0xf4, 0xdb, 0xac, 0x56, 0x1f, 0xd7, 0xcb, 0xef, + 0xfb, 0xee, 0x5b, 0x16, 0x3e, 0xcb, 0x17, 0xf8, 0x12, 0x06, 0x21, 0x62, + 0xc5, 0xff, 0xe7, 0x07, 0x0c, 0xc3, 0x87, 0xf6, 0xfc, 0xac, 0x5f, 0x60, + 0x8f, 0xf5, 0x8a, 0xc3, 0xef, 0xd2, 0x65, 0xff, 0xff, 0xc2, 0x9d, 0xbb, + 0x87, 0x0b, 0x22, 0x33, 0x7f, 0xce, 0xe6, 0xe9, 0x82, 0x58, 0xbf, 0xf7, + 0x18, 0x8c, 0xd6, 0x79, 0xbb, 0x58, 0xbf, 0xe0, 0x3c, 0x5c, 0x7f, 0xb9, + 0xd6, 0x2f, 0xff, 0xf6, 0x7b, 0x9f, 0xc1, 0x1f, 0x87, 0xc2, 0x8b, 0xda, + 0x95, 0x8b, 0xf8, 0xe5, 0x81, 0x30, 0x16, 0x2f, 0x41, 0xc0, 0xb1, 0x76, + 0x79, 0x62, 0xb0, 0xf8, 0xb8, 0x5d, 0x1c, 0x3b, 0x7f, 0xa7, 0xf9, 0x14, + 0x1b, 0x65, 0x8b, 0xff, 0xc5, 0x9c, 0x2c, 0x37, 0x9f, 0x92, 0xf2, 0xc5, + 0xff, 0xc5, 0x9d, 0xc3, 0x83, 0x7e, 0x92, 0x35, 0x8a, 0xd9, 0x73, 0xb4, + 0x71, 0x91, 0x6e, 0x42, 0xe7, 0x3a, 0x85, 0x09, 0xc8, 0x7e, 0xf6, 0x04, + 0x02, 0x3a, 0xf4, 0x31, 0x04, 0x63, 0xd0, 0xd7, 0xa9, 0x26, 0xfc, 0xfe, + 0x9f, 0x71, 0x62, 0x96, 0x2f, 0xee, 0xf8, 0xc4, 0x2c, 0x58, 0xa7, 0x37, + 0x4c, 0x19, 0x7c, 0xfa, 0x60, 0x2c, 0x54, 0x11, 0x46, 0x06, 0x2e, 0x0f, + 0xdf, 0xb0, 0xbc, 0x66, 0x2c, 0x5f, 0xe0, 0x4f, 0x46, 0xff, 0xdd, 0x62, + 0xa3, 0x11, 0x1b, 0xc3, 0x0f, 0x14, 0x5f, 0xe3, 0x33, 0xef, 0xaf, 0xb2, + 0xc5, 0xff, 0x70, 0x5a, 0xd3, 0xcb, 0xe9, 0x62, 0xff, 0xbd, 0xa1, 0x45, + 0x9b, 0x94, 0xac, 0x54, 0xaf, 0xfb, 0xe4, 0xe9, 0x13, 0x47, 0xf4, 0x03, + 0x3f, 0x1a, 0x08, 0xe6, 0xd1, 0xeb, 0x17, 0xc5, 0xdc, 0x52, 0xb1, 0x73, + 0x47, 0xac, 0x5f, 0xe7, 0xef, 0xcc, 0xc7, 0xe2, 0xc5, 0xff, 0x4e, 0x77, + 0x2d, 0x06, 0x82, 0xc5, 0xfd, 0x80, 0x30, 0xb0, 0x0b, 0x17, 0x1f, 0x75, + 0x8a, 0x19, 0xe3, 0xb1, 0x75, 0xff, 0xf4, 0xe1, 0x1b, 0xbf, 0xdc, 0xf3, + 0xbc, 0x00, 0xb1, 0x7f, 0xec, 0x08, 0xc6, 0x1b, 0xc4, 0xf2, 0xb1, 0x7e, + 0x92, 0xf4, 0x81, 0x62, 0xf7, 0x80, 0xcb, 0x17, 0x4e, 0xcb, 0x15, 0xa3, + 0xdc, 0x39, 0x3f, 0x50, 0xed, 0xff, 0xed, 0x1c, 0xa7, 0xb0, 0xf5, 0xee, + 0x31, 0xd6, 0x2f, 0x63, 0x47, 0xac, 0x5f, 0xfb, 0x46, 0x99, 0xcf, 0xe6, + 0xd9, 0xa5, 0x8a, 0xc4, 0x57, 0x92, 0x68, 0x87, 0xef, 0xfd, 0xf7, 0x20, + 0x07, 0xff, 0xb6, 0xcb, 0x17, 0xe9, 0x08, 0x3f, 0xca, 0xc5, 0x46, 0xea, + 0xe3, 0xe4, 0x57, 0x62, 0x48, 0x0d, 0x0c, 0xd3, 0x1f, 0xe2, 0x21, 0xd2, + 0x93, 0x42, 0x73, 0x90, 0xe1, 0xf1, 0x70, 0x68, 0x37, 0xf1, 0x13, 0x74, + 0x8a, 0x56, 0x2f, 0xfb, 0x3f, 0xf6, 0x87, 0xb3, 0xeb, 0x17, 0xe2, 0xcf, + 0xb7, 0x96, 0x2f, 0xff, 0xf4, 0x83, 0x9b, 0xfc, 0x5d, 0xc2, 0x42, 0x2c, + 0xdb, 0x04, 0xb1, 0x78, 0xce, 0x6e, 0xb1, 0x51, 0xe8, 0xac, 0x88, 0x9f, + 0xec, 0xb7, 0xfa, 0x4a, 0x05, 0x98, 0x05, 0x8b, 0xee, 0xe0, 0x28, 0xf5, + 0x8b, 0xfe, 0xc0, 0xbf, 0x80, 0x3c, 0xe9, 0x62, 0xff, 0x3b, 0x03, 0x5a, + 0x17, 0xd6, 0x2f, 0xe9, 0x37, 0x09, 0xcd, 0x58, 0xbf, 0xb3, 0xdd, 0x5e, + 0xcf, 0xac, 0x5f, 0xff, 0x4f, 0xb9, 0x11, 0x60, 0x5d, 0x8b, 0xb8, 0x71, + 0x62, 0xa5, 0x56, 0x1c, 0x0b, 0xf2, 0x1c, 0xa6, 0x9a, 0x39, 0x8e, 0x8a, + 0x3e, 0x74, 0x46, 0x9c, 0x2e, 0xf1, 0x8d, 0xfd, 0xb4, 0x53, 0xc1, 0x76, + 0xb1, 0x70, 0xbe, 0xb1, 0x7f, 0x83, 0x26, 0x37, 0x5a, 0x95, 0x8a, 0x93, + 0xff, 0xd8, 0xc9, 0x86, 0x2f, 0xff, 0xd1, 0x9a, 0x62, 0x7f, 0x46, 0x6a, + 0x7c, 0x4c, 0x05, 0x8b, 0xe6, 0xfb, 0x8d, 0x62, 0xb7, 0x3f, 0xcf, 0x2d, + 0x5a, 0x0b, 0x17, 0xf7, 0xcb, 0x06, 0x4c, 0xb1, 0x51, 0xa1, 0xbe, 0x61, + 0x2b, 0xff, 0xfc, 0x64, 0x70, 0xbe, 0xfa, 0x33, 0x35, 0xef, 0x3e, 0x8c, + 0x95, 0x8b, 0x12, 0xc5, 0x6c, 0x7f, 0x38, 0xd1, 0x7f, 0x85, 0x9d, 0x80, + 0x98, 0xeb, 0x14, 0xc7, 0xad, 0xc2, 0x2b, 0xbb, 0x82, 0xc5, 0xff, 0x8a, + 0x40, 0xde, 0x00, 0x65, 0x05, 0x8b, 0xe6, 0xf3, 0x6e, 0xb1, 0x5d, 0x9f, + 0xdf, 0x86, 0x63, 0x8f, 0xec, 0x12, 0xc5, 0xf3, 0xc4, 0xf2, 0xb1, 0x6e, + 0x2c, 0x50, 0xcd, 0xa6, 0x11, 0x5f, 0xb3, 0xd1, 0xd9, 0xe5, 0x8b, 0x18, + 0xc7, 0x96, 0x44, 0x17, 0xc5, 0x27, 0x95, 0x8b, 0x3e, 0x8f, 0x23, 0xc4, + 0xf7, 0xff, 0xf6, 0x6f, 0xd5, 0xe1, 0x77, 0x0e, 0x73, 0xd3, 0x3e, 0xe2, + 0xc5, 0xfd, 0xd9, 0x67, 0xb0, 0x0b, 0x15, 0xc4, 0x48, 0x09, 0x8a, 0xfd, + 0xe9, 0x9f, 0x71, 0x62, 0xfa, 0x67, 0xdc, 0x58, 0xbd, 0xdc, 0x39, 0xc3, + 0xca, 0xf1, 0x45, 0x62, 0x28, 0x84, 0xdb, 0x4e, 0xa9, 0x57, 0xf0, 0xda, + 0xf4, 0x6b, 0x35, 0x1b, 0xbb, 0x8c, 0x18, 0xd1, 0x92, 0x36, 0x86, 0x14, + 0xcb, 0x0d, 0xda, 0x33, 0xb8, 0x46, 0x68, 0x39, 0x49, 0x59, 0x38, 0xd4, + 0x6c, 0x6d, 0x5b, 0xc7, 0x25, 0xdc, 0x72, 0x6f, 0x0a, 0x68, 0xa5, 0x4a, + 0x6a, 0x70, 0x38, 0xf1, 0x83, 0x7e, 0x76, 0x61, 0xa5, 0x1c, 0x02, 0x17, + 0xc5, 0x48, 0x26, 0xe4, 0xbf, 0x4f, 0x4b, 0x79, 0x14, 0x61, 0xdd, 0x21, + 0x54, 0x13, 0x0c, 0x74, 0x3d, 0x03, 0x84, 0xe7, 0x54, 0xa8, 0x8b, 0xfc, + 0x58, 0x2e, 0xbf, 0x99, 0xa5, 0x8b, 0xbf, 0xf5, 0x8a, 0x19, 0xe8, 0x06, + 0x71, 0x77, 0x57, 0xd6, 0x2f, 0xda, 0xdd, 0x9b, 0x75, 0x48, 0x5c, 0x5e, + 0xd0, 0xbe, 0xb1, 0x7f, 0xf0, 0xb5, 0xac, 0x1c, 0x1e, 0x3b, 0xe2, 0x58, + 0xbf, 0x78, 0x01, 0x94, 0x12, 0x2f, 0xff, 0xf3, 0xc1, 0xb7, 0xcf, 0xb9, + 0x37, 0xa1, 0x84, 0xe3, 0x58, 0xbf, 0x73, 0xdf, 0x90, 0x2c, 0x5f, 0x9b, + 0x69, 0xd0, 0x96, 0x2e, 0x63, 0xac, 0x5a, 0x32, 0x53, 0xcd, 0xd8, 0x8f, + 0x06, 0xf4, 0x6e, 0x71, 0xe6, 0x49, 0xe1, 0x50, 0x97, 0xa3, 0x8a, 0x43, + 0x29, 0xbc, 0xfd, 0xc1, 0x62, 0xee, 0x62, 0xc5, 0xf0, 0xa1, 0x9c, 0x58, + 0xb8, 0x3d, 0x96, 0x28, 0x8d, 0xef, 0x88, 0xef, 0x13, 0x6e, 0xb1, 0x7a, + 0x39, 0xc0, 0xb1, 0x7b, 0x1f, 0xeb, 0x17, 0x88, 0x86, 0xb1, 0x7d, 0x98, + 0x5e, 0x58, 0xbd, 0x2d, 0xba, 0xc5, 0xd0, 0x8c, 0xd9, 0x34, 0x58, 0x0f, + 0x62, 0xa1, 0xa4, 0x0e, 0x3b, 0xf2, 0x02, 0x1c, 0xe0, 0xe7, 0x88, 0x6a, + 0x31, 0x7a, 0x9e, 0x13, 0x87, 0xdd, 0xc7, 0xb9, 0x7f, 0xdb, 0xea, 0x33, + 0x91, 0x66, 0x6e, 0xb1, 0x7f, 0xfd, 0x84, 0xe3, 0x8c, 0xe1, 0x60, 0xff, + 0x9a, 0x58, 0xbf, 0xf8, 0xed, 0x08, 0xcc, 0xd6, 0xec, 0xdb, 0xaa, 0x46, + 0x62, 0xfa, 0x32, 0x35, 0x63, 0x2c, 0x5f, 0xfc, 0x38, 0xc2, 0x13, 0x06, + 0x3f, 0xb9, 0xab, 0x17, 0xfe, 0x29, 0x3c, 0x67, 0x27, 0xc2, 0xe2, 0xc5, + 0xff, 0xee, 0xb0, 0x0d, 0xef, 0x7f, 0x08, 0x9b, 0xcb, 0x17, 0xbe, 0xfc, + 0x58, 0xbe, 0xeb, 0x79, 0x3e, 0x58, 0xbf, 0xa7, 0x85, 0x3e, 0xe2, 0xc5, + 0x75, 0xd9, 0xea, 0x9c, 0xa2, 0xee, 0xe3, 0x45, 0x8a, 0x8d, 0xd3, 0x07, + 0x8d, 0x13, 0xa3, 0x53, 0x96, 0x8a, 0x6f, 0xde, 0xd0, 0xa7, 0xa2, 0xc5, + 0xff, 0x8d, 0x9c, 0xd1, 0x98, 0x2d, 0x6c, 0xb1, 0x74, 0x9d, 0x62, 0xfd, + 0x85, 0xdf, 0xba, 0xc5, 0x8b, 0x82, 0xd9, 0x62, 0xba, 0xd4, 0x66, 0x46, + 0xa2, 0xb8, 0x21, 0x60, 0xbf, 0x65, 0xd6, 0xe8, 0xb1, 0x76, 0xb6, 0x58, + 0xbf, 0x3f, 0x79, 0x9b, 0x2c, 0x50, 0x8f, 0x0b, 0xa0, 0xcd, 0x0c, 0xfe, + 0xb1, 0x5a, 0xe8, 0xe8, 0xdd, 0x62, 0xff, 0xe2, 0xc7, 0xd3, 0xec, 0xc7, + 0x3b, 0xac, 0x5c, 0x17, 0x96, 0x2a, 0x36, 0x44, 0xef, 0x5d, 0x90, 0xc6, + 0xb2, 0x01, 0xa1, 0xdf, 0x46, 0xfd, 0x6f, 0x25, 0x62, 0xf4, 0x6f, 0x1a, + 0xe3, 0x5a, 0xc5, 0xba, 0xeb, 0x1b, 0x9e, 0xe7, 0x5c, 0x2d, 0xb4, 0x4b, + 0x17, 0x4f, 0x16, 0x2e, 0x8d, 0xa0, 0xb1, 0x70, 0x7c, 0x58, 0xae, 0xbb, + 0x44, 0xde, 0xc7, 0x7d, 0x89, 0xc4, 0x2f, 0xe1, 0xdb, 0xe8, 0xdb, 0x6c, + 0x09, 0x62, 0xe6, 0xe2, 0xc5, 0xfe, 0x6e, 0xf8, 0xc4, 0x2c, 0x58, 0xbf, + 0xf4, 0x33, 0xff, 0x68, 0x3b, 0x92, 0xc5, 0x69, 0x10, 0xe0, 0x17, 0xf1, + 0x9d, 0xd1, 0xd1, 0xba, 0xc5, 0xfb, 0x8e, 0x4d, 0xb2, 0xc5, 0xff, 0xbe, + 0xfe, 0xe3, 0x77, 0xb6, 0x04, 0xb1, 0x7f, 0xee, 0x93, 0xf7, 0x98, 0xa2, + 0x9d, 0xd6, 0x2a, 0x37, 0x4e, 0xbb, 0xad, 0x85, 0x8c, 0x6c, 0x61, 0xd7, + 0x08, 0x37, 0x28, 0x74, 0x2b, 0xa3, 0xa3, 0x75, 0x8b, 0x1d, 0x62, 0xe6, + 0x82, 0xc5, 0x39, 0xa9, 0xf8, 0x95, 0xfb, 0xc4, 0xfd, 0xf9, 0x62, 0xba, + 0xe2, 0x24, 0xb7, 0x49, 0x0c, 0x82, 0xff, 0x00, 0xe1, 0xe9, 0xf6, 0x95, + 0x8b, 0xe3, 0xb7, 0xa5, 0x62, 0xff, 0xff, 0xef, 0x86, 0x38, 0xcf, 0xe7, + 0xb2, 0x4b, 0xdc, 0x2c, 0x1f, 0xe7, 0xa2, 0xc5, 0x46, 0xe8, 0xcf, 0x8d, + 0x46, 0xdd, 0x08, 0xad, 0x12, 0xc5, 0xfa, 0x46, 0x18, 0x38, 0xb1, 0x68, + 0xdf, 0xe6, 0xf4, 0x84, 0xef, 0xee, 0x7e, 0x4e, 0xe3, 0x58, 0xb9, 0x89, + 0x62, 0xb8, 0x78, 0x9e, 0x2e, 0xb9, 0x86, 0xb1, 0x7f, 0xfc, 0x6f, 0x5c, + 0xeb, 0x7a, 0xe6, 0x75, 0xc8, 0xd7, 0xd7, 0x3a, 0xce, 0xb9, 0xd6, 0xf5, + 0xd5, 0x62, 0xfd, 0x91, 0x42, 0x4e, 0xb1, 0x51, 0xba, 0x6c, 0x11, 0xb3, + 0x7f, 0x5c, 0x22, 0xeb, 0xa8, 0xb8, 0x70, 0x8f, 0xbe, 0xeb, 0x23, 0x5f, + 0x25, 0x62, 0xc2, 0x58, 0xae, 0xba, 0x9e, 0x03, 0x97, 0x5e, 0xeb, 0xb8, + 0xd7, 0x1a, 0xd6, 0x2e, 0xf6, 0x2c, 0x54, 0x6b, 0x3c, 0x8e, 0xcc, 0x6f, + 0x13, 0x47, 0x2c, 0x5d, 0x1d, 0x1b, 0xac, 0x5f, 0xff, 0xff, 0xdd, 0x7f, + 0x73, 0xd7, 0x3a, 0xec, 0x7b, 0xf4, 0xd4, 0x22, 0xe8, 0x2e, 0xba, 0xc6, + 0xae, 0xbe, 0x35, 0xf5, 0xd4, 0xc3, 0x3f, 0x1c, 0xb1, 0x6f, 0xac, 0x5f, + 0xf4, 0xed, 0xa6, 0xfc, 0x9d, 0xd6, 0x2e, 0xcf, 0xac, 0x51, 0x1e, 0x87, + 0x8e, 0x6f, 0xf9, 0xa7, 0xd9, 0xf9, 0x70, 0x2c, 0x5f, 0xff, 0xb5, 0x3f, + 0x9c, 0xdc, 0x6e, 0x5b, 0x1e, 0x60, 0xb1, 0x73, 0xfb, 0xc8, 0x8d, 0x0c, + 0xde, 0xf0, 0x24, 0x0b, 0x17, 0xfd, 0x81, 0x16, 0x1b, 0xf6, 0x8f, 0x58, + 0xbe, 0xcd, 0x9a, 0x25, 0x8a, 0xc3, 0xfe, 0x21, 0xde, 0xa3, 0xdb, 0xc6, + 0x1e, 0x3d, 0x62, 0xfe, 0x9e, 0xa9, 0x2e, 0xa9, 0x58, 0xbd, 0xdb, 0x9d, + 0x62, 0xfd, 0x2e, 0x3c, 0x3a, 0xc5, 0xfa, 0x2c, 0xe9, 0x3c, 0x58, 0xa9, + 0x3d, 0x26, 0x27, 0xad, 0x91, 0xc9, 0xa2, 0x2f, 0x99, 0x13, 0x85, 0xfd, + 0xcd, 0x4e, 0x7b, 0x8b, 0x16, 0x12, 0xc5, 0x49, 0xe0, 0x61, 0x75, 0xcf, + 0xb2, 0xc5, 0xfe, 0x90, 0xfe, 0xf0, 0x93, 0xac, 0x54, 0x0f, 0x33, 0x83, + 0x17, 0x9a, 0x2e, 0x2c, 0x5f, 0xd1, 0x4b, 0x0f, 0x09, 0x62, 0xf0, 0xf2, + 0x3d, 0x62, 0xff, 0xfb, 0x76, 0xd6, 0x0e, 0x60, 0xff, 0x7d, 0x41, 0x62, + 0x9c, 0xfc, 0x18, 0x82, 0x8e, 0x8b, 0xd0, 0x42, 0x76, 0xfa, 0x74, 0x66, + 0xcb, 0x17, 0xf0, 0xd8, 0xfa, 0x9e, 0x2c, 0x56, 0x1f, 0xdf, 0xca, 0x18, + 0x96, 0xff, 0xdd, 0x04, 0xdb, 0x8d, 0xfa, 0x48, 0xd6, 0x2f, 0xe9, 0x3b, + 0x42, 0x7c, 0xb1, 0x7f, 0xf4, 0x9d, 0xbd, 0x9d, 0x80, 0xe1, 0xfd, 0x62, + 0xff, 0xf6, 0xfa, 0x16, 0xdd, 0xf1, 0xf5, 0xbf, 0xf1, 0x62, 0xf0, 0x03, + 0xf2, 0xc5, 0xf3, 0xf4, 0x60, 0x2c, 0x54, 0xa2, 0x4f, 0x14, 0x3c, 0x3f, + 0x7f, 0xf6, 0x7d, 0x87, 0xf7, 0x30, 0xf9, 0xba, 0xc5, 0x41, 0x5a, 0x10, + 0xe3, 0x56, 0xc2, 0xd3, 0x51, 0x3e, 0x5a, 0x50, 0xda, 0xe1, 0x75, 0xf3, + 0xec, 0x22, 0x58, 0xbf, 0x66, 0xd8, 0x08, 0x96, 0x28, 0xc3, 0xcd, 0xf1, + 0x1d, 0xff, 0xf4, 0x5f, 0x9e, 0x8f, 0xa9, 0x92, 0xf7, 0x25, 0x62, 0xfc, + 0xfd, 0x46, 0xbe, 0xeb, 0x17, 0xfc, 0x28, 0x71, 0x8e, 0xc4, 0x05, 0x8b, + 0x9f, 0xcb, 0x16, 0xdd, 0x62, 0x8c, 0x35, 0x5d, 0x68, 0xbd, 0x3a, 0x61, + 0x1a, 0x51, 0x62, 0xd0, 0x31, 0xdf, 0x81, 0x3c, 0xce, 0xd6, 0x2f, 0x8c, + 0x76, 0x89, 0x62, 0xb4, 0x79, 0xbc, 0x29, 0xb1, 0xd6, 0x2a, 0x4d, 0xa0, + 0xc8, 0xaf, 0xf1, 0x98, 0x4d, 0xa0, 0x47, 0x2c, 0x5c, 0x50, 0x58, 0xbd, + 0xa9, 0x35, 0x62, 0xff, 0xf9, 0xbf, 0x9d, 0x83, 0xe1, 0x37, 0xe2, 0xf8, + 0x96, 0x29, 0xd1, 0x13, 0x10, 0xb9, 0xc7, 0xaf, 0xf0, 0xf4, 0xc0, 0x6c, + 0xd2, 0xc5, 0xfd, 0x9c, 0x90, 0xca, 0x56, 0x2f, 0xfd, 0xe6, 0x79, 0xd8, + 0x5e, 0x60, 0xd6, 0x2e, 0xe1, 0xd6, 0x28, 0x69, 0xd4, 0x64, 0x30, 0x1c, + 0xc3, 0xe6, 0x6c, 0x5a, 0x24, 0x0b, 0x62, 0xc5, 0xcc, 0x75, 0x8a, 0xe1, + 0xa8, 0xea, 0x11, 0xbb, 0xab, 0xcb, 0x16, 0xeb, 0xd6, 0x2c, 0x09, 0x36, + 0x42, 0x1b, 0xbe, 0xc3, 0x5f, 0x4b, 0x17, 0x8e, 0xde, 0x58, 0xb7, 0x58, + 0xb1, 0x6e, 0xbd, 0x62, 0xfe, 0x9e, 0x93, 0xe6, 0xe2, 0xc5, 0x61, 0xfd, + 0x00, 0x74, 0x85, 0xf8, 0x2f, 0x7f, 0xf1, 0x80, 0x00, 0xb9, 0xa3, 0x0c, + 0xfc, 0x72, 0xc5, 0xff, 0xbb, 0xfe, 0x72, 0x79, 0xc6, 0xfa, 0xc5, 0xfa, + 0x38, 0x64, 0xc1, 0x2c, 0x5f, 0xa7, 0x8f, 0x31, 0x2c, 0x5f, 0xfc, 0x66, + 0xb3, 0xcd, 0xd9, 0x9e, 0xc0, 0x2c, 0x54, 0x47, 0xe0, 0x72, 0x8a, 0x94, + 0xe1, 0xce, 0x74, 0xc9, 0xde, 0x40, 0x14, 0x27, 0x2f, 0xe6, 0xda, 0x4a, + 0x40, 0xb1, 0x4b, 0x04, 0x6b, 0x6f, 0xfe, 0x89, 0xc8, 0x46, 0x3f, 0x70, + 0x6f, 0x2c, 0x5f, 0xff, 0xdb, 0x94, 0x9c, 0xc9, 0xd6, 0x9f, 0xa6, 0x99, + 0x80, 0xb1, 0x7e, 0x83, 0x79, 0x8d, 0x58, 0xa9, 0x44, 0x3e, 0x2f, 0x5f, + 0x16, 0x02, 0x56, 0x28, 0x8f, 0x0b, 0xa1, 0x0d, 0xe1, 0xe0, 0xd6, 0x29, + 0x62, 0xfb, 0x3d, 0x80, 0x58, 0xb1, 0xa0, 0x35, 0xc4, 0x19, 0x58, 0x7e, + 0x4c, 0x97, 0x7c, 0xc7, 0x78, 0x96, 0x2f, 0xe7, 0x09, 0xf9, 0x9b, 0xac, + 0x5f, 0x4f, 0x70, 0xc5, 0x8a, 0x95, 0x47, 0x4f, 0x18, 0x86, 0xa1, 0x2a, + 0xc4, 0x1c, 0x23, 0xf1, 0x7d, 0xa5, 0x62, 0xf7, 0xa6, 0x0b, 0x17, 0xfe, + 0xd8, 0x4d, 0x16, 0x3e, 0x85, 0x1e, 0xb1, 0x70, 0xa0, 0xb1, 0x46, 0xa2, + 0x29, 0xc4, 0x58, 0x77, 0xa2, 0x25, 0xf3, 0xec, 0x28, 0x96, 0x2f, 0x1e, + 0x60, 0xb1, 0x7b, 0x8d, 0x12, 0xc5, 0x49, 0xbb, 0xf0, 0xed, 0xfa, 0x2e, + 0xb7, 0xec, 0x4b, 0x17, 0xfb, 0x40, 0x2c, 0xe4, 0xe9, 0x62, 0xe3, 0xca, + 0xc5, 0xfa, 0x7e, 0x21, 0xca, 0xc5, 0x46, 0x22, 0x82, 0x4b, 0xb0, 0xcf, + 0xe2, 0xf4, 0x63, 0x6a, 0x23, 0x1b, 0x8f, 0xf5, 0xd9, 0x07, 0x5c, 0x86, + 0x76, 0xcc, 0x50, 0x85, 0x70, 0xe1, 0x5b, 0x91, 0x8a, 0x6e, 0xfb, 0xdb, + 0x63, 0xcb, 0x64, 0x8a, 0x17, 0xba, 0x8c, 0xac, 0xf0, 0xbd, 0xfc, 0x79, + 0x0d, 0x08, 0x20, 0x2b, 0x75, 0xe4, 0xc5, 0x28, 0x93, 0x8f, 0x7e, 0x94, + 0xab, 0xd2, 0x1d, 0x61, 0x1f, 0x06, 0xc1, 0xd5, 0x0c, 0x0b, 0xe6, 0x80, + 0x67, 0x58, 0xbd, 0xb9, 0x01, 0x62, 0xda, 0xd1, 0xe1, 0x70, 0x92, 0xfc, + 0x29, 0xf9, 0x4a, 0xc5, 0xe6, 0x2d, 0xd6, 0x2f, 0x78, 0xa5, 0x62, 0xf8, + 0x8b, 0x3c, 0xb1, 0x78, 0xb3, 0xb5, 0x8b, 0x76, 0xb1, 0x7c, 0xc1, 0xe6, + 0xcb, 0x15, 0x86, 0xdf, 0xe2, 0x77, 0xa2, 0xfc, 0xac, 0x5d, 0x0f, 0x2c, + 0x5f, 0xc2, 0x6d, 0x8a, 0x7b, 0x58, 0xae, 0xb5, 0x31, 0x69, 0x1c, 0xd8, + 0x84, 0x6a, 0x8e, 0x40, 0x01, 0xe2, 0x18, 0xae, 0x27, 0x36, 0x14, 0x66, + 0x77, 0xc5, 0x14, 0x8d, 0x62, 0xee, 0xfc, 0xb1, 0x7d, 0xf8, 0xa4, 0x6b, + 0x17, 0xba, 0xd1, 0x4a, 0xc5, 0xed, 0x6c, 0x35, 0x8b, 0xec, 0x00, 0x7e, + 0x58, 0xbf, 0x6a, 0x43, 0x62, 0x58, 0xa1, 0x9f, 0x5f, 0x63, 0xe0, 0x24, + 0xa9, 0x56, 0x64, 0x32, 0x8c, 0x8f, 0x09, 0xca, 0xe2, 0x23, 0x61, 0x90, + 0x12, 0x0a, 0x11, 0xb7, 0xe2, 0x1f, 0xc3, 0x8e, 0x58, 0xbf, 0xf3, 0x67, + 0x53, 0xe8, 0xd1, 0x67, 0xd6, 0x2f, 0x8a, 0x70, 0x6b, 0x17, 0x4f, 0x6b, + 0x14, 0x69, 0xb9, 0xf9, 0x0d, 0xfa, 0x4e, 0x59, 0x12, 0xc5, 0xfc, 0xf8, + 0x43, 0xfc, 0xac, 0x58, 0xeb, 0x16, 0x3a, 0xc5, 0xd2, 0x4b, 0x15, 0xb1, + 0xa8, 0x08, 0x4a, 0xf7, 0xf2, 0x25, 0x8a, 0x1a, 0x33, 0xf7, 0x28, 0x8f, + 0x2c, 0xe1, 0xd7, 0x88, 0xe9, 0x62, 0xff, 0xc4, 0xdf, 0x92, 0x6f, 0xc8, + 0x16, 0x2f, 0xe9, 0x2f, 0x7d, 0xc6, 0xb1, 0x78, 0x7d, 0x25, 0x62, 0xfd, + 0x24, 0x2c, 0xfa, 0xc5, 0x49, 0xe3, 0x68, 0x7e, 0xec, 0x25, 0x8b, 0xfb, + 0x1f, 0x7d, 0xd8, 0x6b, 0x16, 0x68, 0x1e, 0x2f, 0x62, 0xd7, 0xda, 0x9c, + 0x25, 0x8b, 0xe6, 0xf4, 0x00, 0xb1, 0x7b, 0xdc, 0xc5, 0x8b, 0xff, 0x7b, + 0x0e, 0x4c, 0x69, 0x60, 0x16, 0x29, 0x62, 0xfc, 0x59, 0x13, 0xec, 0xb1, + 0x61, 0x76, 0x6d, 0x4e, 0x19, 0x7b, 0x58, 0x4b, 0x16, 0x12, 0xc5, 0xfe, + 0x7d, 0xdb, 0x35, 0x9e, 0x58, 0xa9, 0x3e, 0x10, 0x0e, 0x70, 0x4a, 0xf0, + 0xa3, 0x72, 0x58, 0xa1, 0xaa, 0xea, 0x34, 0xf3, 0x77, 0x3d, 0x33, 0x1c, + 0xa3, 0xe4, 0x2c, 0x46, 0x43, 0xbc, 0x73, 0xf4, 0x22, 0x7a, 0x8b, 0xaf, + 0xfb, 0x53, 0x90, 0x9f, 0xc8, 0x16, 0x2f, 0xff, 0x19, 0xf6, 0x7f, 0x00, + 0x44, 0x4d, 0x05, 0x8b, 0xfc, 0x1f, 0x9f, 0xa4, 0x96, 0xeb, 0x17, 0xff, + 0x9f, 0x82, 0x3e, 0x6f, 0xf9, 0x2f, 0x71, 0x62, 0xf4, 0x04, 0x35, 0x8b, + 0x39, 0x88, 0xa0, 0x81, 0xbc, 0x49, 0x77, 0xd9, 0xc9, 0xd2, 0xc5, 0xfe, + 0x3e, 0x71, 0x9b, 0xb8, 0x2c, 0x51, 0x1e, 0xb0, 0x64, 0x57, 0x46, 0xfd, + 0x6a, 0xc5, 0xf3, 0xee, 0xe3, 0x58, 0xbf, 0xef, 0xcb, 0x8d, 0xf9, 0xb3, + 0x2c, 0x57, 0x5c, 0x3f, 0xe9, 0x22, 0x72, 0x3b, 0xb5, 0xb2, 0xc5, 0x4b, + 0x20, 0x6b, 0x62, 0xd8, 0x3d, 0xe4, 0x3c, 0x77, 0x4e, 0x79, 0x5e, 0xda, + 0x85, 0x11, 0xce, 0x3f, 0x0e, 0xa0, 0x42, 0x34, 0xa1, 0x41, 0xe3, 0x3b, + 0xff, 0xff, 0xff, 0xff, 0xdd, 0x73, 0xad, 0xce, 0xb9, 0x1b, 0x75, 0xdf, + 0x5d, 0xef, 0xd7, 0xcc, 0x6b, 0x8d, 0xb5, 0xb7, 0x56, 0x08, 0x7d, 0x75, + 0x98, 0xee, 0xc3, 0xfc, 0x6d, 0x33, 0x1b, 0x47, 0xc6, 0xaf, 0x18, 0x67, + 0xe3, 0x96, 0x2f, 0xf8, 0x87, 0x13, 0x97, 0x70, 0xe2, 0xc5, 0xff, 0x6b, + 0x52, 0x5e, 0xfe, 0x41, 0x62, 0xff, 0xfb, 0x5f, 0x09, 0x87, 0x9b, 0x0b, + 0xda, 0xd4, 0xac, 0x5f, 0xfe, 0x87, 0xc5, 0x3a, 0x8c, 0xfb, 0xee, 0xda, + 0x58, 0xbf, 0x07, 0xae, 0x31, 0x2c, 0x57, 0x67, 0xf1, 0xf4, 0xfa, 0x94, + 0xd8, 0xb0, 0xed, 0x8e, 0x41, 0x0c, 0xbb, 0xfc, 0x1c, 0x5c, 0x9f, 0x48, + 0xd6, 0x2d, 0xc5, 0x8b, 0xc2, 0xd0, 0x16, 0x2e, 0x14, 0x0c, 0x36, 0x1b, + 0x89, 0x5f, 0xfb, 0xf8, 0x58, 0x6e, 0x16, 0x0d, 0x62, 0xff, 0xc1, 0x4f, + 0x86, 0xf1, 0xfc, 0x93, 0xac, 0x5f, 0xdf, 0x7f, 0x14, 0x9d, 0x62, 0xbb, + 0x3f, 0x02, 0x43, 0xbe, 0x6f, 0x73, 0x65, 0x8b, 0xee, 0x67, 0x7e, 0x58, + 0xbd, 0x14, 0x84, 0xb1, 0x7c, 0xdc, 0x71, 0xac, 0x56, 0x1e, 0x08, 0x43, + 0xf7, 0xdf, 0x92, 0xd9, 0x62, 0xfe, 0xf7, 0xb0, 0xdf, 0x89, 0x62, 0x86, + 0x7a, 0x78, 0x47, 0x7c, 0xe5, 0xee, 0x2c, 0x5f, 0xff, 0xf1, 0xdf, 0x5f, + 0x17, 0x21, 0x3d, 0x35, 0x25, 0xef, 0xe4, 0x16, 0x2a, 0x08, 0x8b, 0x72, + 0x2b, 0xff, 0x3f, 0x9f, 0x77, 0x1f, 0xb3, 0x75, 0x8a, 0xd9, 0x58, 0x54, + 0x0b, 0xf2, 0x15, 0xb1, 0x11, 0x68, 0x93, 0xec, 0xa4, 0xeb, 0xe8, 0x56, + 0x75, 0x11, 0x5c, 0x71, 0xac, 0x5e, 0x6d, 0x6c, 0xb1, 0x7c, 0xda, 0x68, + 0x2c, 0x56, 0xe7, 0x80, 0x43, 0xd7, 0x3f, 0x45, 0x8b, 0xba, 0x84, 0xb1, + 0x7d, 0xef, 0x0b, 0xcb, 0x17, 0xc4, 0x3f, 0xc9, 0xcd, 0xfb, 0x0d, 0xd4, + 0xa2, 0xc0, 0x64, 0x4c, 0xb1, 0x7f, 0xc1, 0x7f, 0x3b, 0x80, 0xa4, 0x96, + 0x2f, 0x48, 0xe5, 0x62, 0xfd, 0x9f, 0xfe, 0x01, 0x62, 0xdb, 0x9c, 0xf1, + 0x08, 0x72, 0xf9, 0x82, 0x68, 0xf5, 0x8a, 0x94, 0x66, 0xb3, 0xf9, 0x14, + 0x5f, 0x85, 0xbf, 0xdc, 0x25, 0x8b, 0xff, 0xda, 0xf1, 0xb2, 0x50, 0x0f, + 0xaa, 0x4a, 0x0b, 0x17, 0xde, 0x8e, 0xcf, 0xac, 0x5f, 0xc1, 0x19, 0xee, + 0x60, 0x4b, 0x17, 0xed, 0xa0, 0xe5, 0x8b, 0x17, 0xff, 0xf9, 0x8b, 0x72, + 0xc1, 0xfc, 0x46, 0x7e, 0x61, 0xa9, 0xd9, 0x62, 0xa5, 0x33, 0x2c, 0x4f, + 0x72, 0x66, 0x32, 0x11, 0x45, 0xd3, 0xf5, 0x8b, 0xf8, 0x32, 0x9f, 0xcc, + 0x16, 0x2f, 0xff, 0xe3, 0x4b, 0x00, 0x2e, 0x19, 0x07, 0xfc, 0xee, 0x4c, + 0xb1, 0x7e, 0xe4, 0xc7, 0xea, 0x56, 0x28, 0xd4, 0x66, 0x9c, 0x5d, 0x8b, + 0x80, 0xbb, 0x7f, 0xcf, 0xbc, 0x50, 0xfc, 0x91, 0xab, 0x17, 0xf6, 0xe6, + 0x7d, 0x89, 0xd6, 0x2f, 0x49, 0xfc, 0xb1, 0x44, 0x88, 0x81, 0x1e, 0x04, + 0x5f, 0x7f, 0xf4, 0x59, 0xd4, 0x59, 0xd0, 0x78, 0xdb, 0xac, 0x5f, 0xec, + 0x0a, 0x7c, 0x4d, 0xc5, 0x8b, 0xf1, 0x61, 0xda, 0x0b, 0x17, 0xff, 0xfe, + 0xe7, 0x24, 0x01, 0x9f, 0x8f, 0x84, 0x28, 0x67, 0x02, 0x6e, 0xd6, 0x28, + 0xd4, 0x4b, 0x04, 0x4f, 0x79, 0xfe, 0xeb, 0x15, 0x29, 0xc2, 0x61, 0x83, + 0xa5, 0x34, 0x32, 0x7c, 0x4b, 0x62, 0x58, 0xb7, 0xd6, 0x2a, 0x4d, 0x1f, + 0x04, 0x6f, 0xb3, 0x71, 0xe2, 0xc5, 0xd3, 0xa5, 0x8a, 0x58, 0x81, 0x6f, + 0x7e, 0x61, 0xfe, 0x49, 0x62, 0xf8, 0x86, 0x1f, 0x6b, 0x17, 0xe7, 0xd8, + 0xf3, 0xba, 0xc5, 0xc2, 0xf2, 0xc5, 0xe6, 0xd4, 0x0c, 0x47, 0x1b, 0x9d, + 0x1c, 0x6d, 0x89, 0xfc, 0x4b, 0x1c, 0x55, 0x7f, 0x98, 0xa2, 0xcd, 0x85, + 0x05, 0x8a, 0x8d, 0x99, 0xfa, 0x13, 0x2a, 0x60, 0x68, 0x19, 0x2d, 0xc0, + 0xd8, 0x46, 0xbc, 0x61, 0x1a, 0x87, 0xd9, 0xcb, 0x7f, 0x1a, 0xeb, 0x46, + 0x28, 0x52, 0x92, 0x7c, 0xde, 0x28, 0xc0, 0xc2, 0x6a, 0xbf, 0xce, 0x50, + 0xe3, 0x67, 0x16, 0x2f, 0xfd, 0xa0, 0x66, 0xff, 0x92, 0xf7, 0x16, 0x2f, + 0xef, 0xbc, 0x78, 0x83, 0x89, 0x62, 0xfb, 0x7c, 0xef, 0xcb, 0x17, 0x1a, + 0xc6, 0x1e, 0xcf, 0x43, 0x4b, 0x98, 0x6b, 0x17, 0x74, 0x8f, 0x58, 0xbf, + 0xe0, 0x4c, 0x06, 0x26, 0xd4, 0x16, 0x2f, 0xec, 0x1e, 0x1b, 0x3c, 0x58, + 0xa3, 0x51, 0x9b, 0xa3, 0x16, 0x17, 0x21, 0xde, 0x87, 0x57, 0xdc, 0x13, + 0x71, 0x62, 0xfd, 0xde, 0xee, 0x6b, 0xac, 0x5f, 0xf6, 0xb4, 0xf9, 0xd0, + 0x85, 0xc3, 0x0f, 0x3b, 0xc4, 0x74, 0xb1, 0x7f, 0xfd, 0xc7, 0x8e, 0xcd, + 0xfe, 0xe4, 0x42, 0xd6, 0xcb, 0x15, 0xa3, 0xe0, 0xf0, 0x65, 0xfd, 0xec, + 0x3f, 0x78, 0x75, 0x8a, 0x94, 0xc0, 0xf2, 0x16, 0x4e, 0x45, 0x7f, 0x60, + 0x3f, 0x38, 0x35, 0x8b, 0xfc, 0x73, 0xb4, 0x38, 0xf0, 0x58, 0xbf, 0xc6, + 0x99, 0x3d, 0x83, 0x52, 0xb1, 0x52, 0x89, 0x8c, 0x2d, 0x63, 0x4a, 0x95, + 0x7f, 0x4f, 0x1b, 0x37, 0xe3, 0x9c, 0x28, 0x65, 0xdf, 0xf0, 0x44, 0xc6, + 0xe0, 0xdc, 0x96, 0x2f, 0xf1, 0x7b, 0x9b, 0xfd, 0xb4, 0xb1, 0x7f, 0xfb, + 0xa6, 0x0f, 0xf3, 0xd0, 0xf2, 0x4c, 0x1a, 0xc5, 0xa2, 0x58, 0xac, 0x3e, + 0x11, 0x27, 0x5c, 0x37, 0x58, 0xbf, 0xbe, 0xe1, 0x49, 0x0d, 0x62, 0xd0, + 0xc3, 0xc5, 0xdc, 0x5e, 0xf6, 0xa7, 0xcb, 0x17, 0xd0, 0xe3, 0xc1, 0x62, + 0xc3, 0xd1, 0xe0, 0x30, 0xed, 0x4a, 0x78, 0x8e, 0x73, 0xa8, 0x4b, 0x33, + 0x30, 0x9a, 0x2f, 0x84, 0x5e, 0xe2, 0xc5, 0xfd, 0xc1, 0x39, 0x3f, 0x16, + 0x2f, 0x4e, 0xa5, 0x62, 0x8c, 0x3c, 0x9f, 0x96, 0xdf, 0x1a, 0x67, 0x38, + 0xb1, 0x74, 0xee, 0xb1, 0x5b, 0xa3, 0x37, 0x4d, 0x84, 0x47, 0xd4, 0x4d, + 0x7a, 0x11, 0xc1, 0x2c, 0x5f, 0xda, 0xf7, 0xa7, 0x38, 0xb1, 0x67, 0x58, + 0xac, 0x37, 0xe0, 0x2e, 0xb6, 0xeb, 0x17, 0xf7, 0x9c, 0x9c, 0x1c, 0x58, + 0xaf, 0x1e, 0x00, 0x84, 0xee, 0x17, 0x96, 0x2f, 0xc7, 0x87, 0xc3, 0xe2, + 0xc5, 0xb4, 0x62, 0x31, 0x65, 0x82, 0x38, 0x88, 0x31, 0x8b, 0xf3, 0x04, + 0x58, 0x35, 0x8a, 0x94, 0xe5, 0x5e, 0x32, 0x6d, 0x23, 0xdf, 0xf8, 0xa7, + 0x73, 0x5b, 0x34, 0xe0, 0x58, 0xbf, 0xfe, 0xd3, 0xf4, 0x10, 0xf2, 0x13, + 0xa0, 0x4e, 0x96, 0x2f, 0xee, 0x63, 0xeb, 0x4c, 0xb1, 0x7c, 0x60, 0x1b, + 0xcb, 0x17, 0xff, 0xcd, 0x0f, 0x67, 0x70, 0x62, 0x86, 0x77, 0xe5, 0x8a, + 0xe1, 0xfa, 0xf8, 0x92, 0xb6, 0x4d, 0x57, 0x47, 0xe0, 0x52, 0xf4, 0x28, 0xae, 0x9d, 0x2c, 0x5f, 0xcd, 0xf8, 0xc0, 0x82, 0x09, 0x22, 0xec, 0xe2, - 0xc5, 0xed, 0xb3, 0x8e, 0x79, 0x9f, 0x35, 0xb3, 0x81, 0x12, 0xc4, 0xc7, - 0x7d, 0xf9, 0xeb, 0xb9, 0x62, 0xfe, 0xea, 0x11, 0x38, 0xbb, 0xf5, 0x8b, - 0xfc, 0xda, 0x8e, 0x17, 0xdf, 0x4b, 0x15, 0x27, 0xda, 0x23, 0x6a, 0x94, - 0xea, 0x47, 0x0c, 0xdd, 0xc9, 0xff, 0x09, 0x4b, 0xef, 0x8b, 0xa8, 0x2c, - 0x5f, 0xdd, 0x67, 0xc5, 0xd0, 0x16, 0x2d, 0xf5, 0x8b, 0xf8, 0xfc, 0xfc, - 0x97, 0x96, 0x2f, 0xb5, 0x3e, 0xe2, 0xc5, 0xed, 0xbe, 0x25, 0x8b, 0xff, - 0x7d, 0xb9, 0xfc, 0xed, 0x9e, 0xe2, 0xc5, 0x49, 0xf0, 0x30, 0xfd, 0x3a, - 0x34, 0x62, 0x2e, 0xfc, 0x20, 0xef, 0xce, 0x2d, 0xdf, 0x65, 0x8a, 0x82, - 0x73, 0x18, 0x4b, 0xb9, 0x8f, 0xa1, 0xc7, 0x1c, 0x6b, 0x7f, 0xf4, 0x96, - 0xed, 0xe6, 0x34, 0xc3, 0x65, 0x62, 0xff, 0xf3, 0x78, 0x46, 0x73, 0xee, - 0x32, 0x98, 0xf5, 0x8b, 0xfa, 0x4d, 0x6f, 0x31, 0xab, 0x17, 0xbd, 0x21, - 0xac, 0x56, 0x1e, 0x6b, 0x17, 0xd1, 0xa9, 0x81, 0x01, 0x1c, 0xa1, 0x37, - 0x77, 0xe2, 0x58, 0xbf, 0x07, 0xee, 0x4f, 0x96, 0x2f, 0x6d, 0xc2, 0x58, - 0xa9, 0x3e, 0x18, 0x0c, 0xe8, 0xaa, 0xff, 0x1f, 0x37, 0x26, 0xcd, 0xd6, - 0x2e, 0x14, 0x4b, 0x17, 0x43, 0x92, 0x79, 0xa0, 0x34, 0xbe, 0x3f, 0x03, - 0xe2, 0xc5, 0xf8, 0xb6, 0x1c, 0xe9, 0x62, 0xff, 0xe1, 0x47, 0xfd, 0xcf, - 0x31, 0xff, 0xcd, 0x96, 0x2f, 0x6e, 0x2d, 0xd6, 0x2a, 0x53, 0x62, 0xe9, - 0xed, 0xcb, 0x58, 0x94, 0x8a, 0x44, 0x99, 0x7f, 0xde, 0xf4, 0x9f, 0x30, - 0x8d, 0x58, 0xbf, 0xfe, 0xf7, 0xf3, 0xbb, 0xd9, 0xf2, 0xcf, 0x7d, 0xd6, - 0x2b, 0xa4, 0x45, 0x91, 0xcd, 0xde, 0xe2, 0xc5, 0xf9, 0xbd, 0x09, 0x35, - 0x62, 0xa0, 0x78, 0x24, 0x31, 0x7f, 0xb0, 0x03, 0x13, 0x6a, 0x0b, 0x15, - 0x27, 0xab, 0xb1, 0x0d, 0xfc, 0xcc, 0x3e, 0xd8, 0x35, 0x8b, 0x04, 0xb1, - 0x7c, 0xf1, 0xed, 0xc5, 0x8b, 0x9b, 0x75, 0x49, 0x9e, 0x5e, 0xc2, 0x1a, - 0xc5, 0x39, 0xfc, 0xfc, 0x4d, 0x89, 0x42, 0x25, 0xbf, 0xd2, 0x46, 0xe8, - 0x52, 0x4b, 0x17, 0xf0, 0x18, 0xa0, 0xe7, 0x58, 0xbb, 0x77, 0x58, 0xa9, - 0x54, 0x6d, 0xb4, 0x2e, 0x46, 0x45, 0xbc, 0x2a, 0x1c, 0xec, 0x06, 0x62, - 0x2d, 0xbf, 0x03, 0x30, 0x2e, 0x2c, 0x5f, 0xef, 0xfb, 0x8d, 0xd0, 0x67, - 0x58, 0xbf, 0xfc, 0x5e, 0x8e, 0xc8, 0xa0, 0xda, 0xd8, 0x72, 0xb1, 0x7f, - 0xa6, 0x0f, 0xe9, 0xf7, 0x16, 0x2f, 0xf7, 0x04, 0x77, 0xf0, 0x19, 0x62, - 0xf0, 0x7f, 0x95, 0x8a, 0x81, 0xe9, 0x00, 0xd2, 0xf0, 0xc6, 0xcb, 0x15, - 0xf4, 0x62, 0x14, 0x21, 0x7c, 0x45, 0x7f, 0x40, 0x3c, 0xfb, 0x74, 0xb1, - 0x7f, 0xff, 0x9c, 0x84, 0xde, 0x33, 0x06, 0x66, 0x41, 0xcd, 0x35, 0x96, - 0x2f, 0xe7, 0xf7, 0xf0, 0x6e, 0xb1, 0x7c, 0x53, 0x9d, 0x2c, 0x51, 0xa7, - 0x9f, 0xe2, 0xda, 0x31, 0x55, 0x64, 0x94, 0xe1, 0xbb, 0xc6, 0x26, 0xc6, - 0x9c, 0x30, 0x0e, 0x16, 0x56, 0xf2, 0xc5, 0xfd, 0xa0, 0x04, 0xdf, 0xe2, - 0xc5, 0xff, 0x1a, 0xc5, 0x9d, 0x8b, 0x38, 0xb1, 0x7f, 0x76, 0x2c, 0xe6, - 0x12, 0xc5, 0xfb, 0xa8, 0x3e, 0x12, 0xc5, 0xa3, 0xd6, 0x2b, 0x0f, 0xaf, - 0x45, 0xdc, 0x28, 0xbc, 0xf0, 0x95, 0x8b, 0x31, 0x87, 0x95, 0xc2, 0xeb, - 0x68, 0xd4, 0xc5, 0xff, 0x0e, 0xfb, 0xfc, 0xe3, 0xc3, 0x85, 0x9f, 0x58, - 0xb6, 0xcb, 0x17, 0xa1, 0x3d, 0x2c, 0x5f, 0xff, 0xdc, 0xcd, 0xd8, 0x80, - 0x66, 0xa4, 0x85, 0xe9, 0xfa, 0xc5, 0xb2, 0x23, 0xfa, 0xf0, 0xf5, 0xfb, - 0x83, 0x79, 0x25, 0x8a, 0x94, 0xc4, 0x0e, 0x68, 0x50, 0x8d, 0xf1, 0x45, - 0xf8, 0xb3, 0xb3, 0xf4, 0xb1, 0x6d, 0x2c, 0x5f, 0xfb, 0xcf, 0x10, 0x4c, - 0x39, 0xeb, 0x8b, 0x15, 0xa3, 0xfe, 0x62, 0xae, 0x09, 0x54, 0x6e, 0xae, - 0x1a, 0x44, 0x9e, 0x34, 0x76, 0x8d, 0x00, 0x50, 0xbf, 0xbe, 0x87, 0x1c, - 0x96, 0x2f, 0xff, 0xbf, 0x3a, 0x33, 0xf3, 0xb1, 0x0b, 0x61, 0x71, 0x62, - 0xfa, 0x40, 0xc7, 0x58, 0xba, 0x1c, 0x94, 0x4c, 0x0c, 0x88, 0x95, 0x2e, - 0x00, 0x16, 0x2f, 0xc2, 0x07, 0x9f, 0x65, 0x8b, 0xc1, 0x04, 0x12, 0x45, - 0xff, 0x43, 0x85, 0x9b, 0x8f, 0x34, 0x91, 0x18, 0x68, 0x6d, 0x05, 0x8b, - 0xfe, 0xf6, 0x6b, 0x69, 0xec, 0xc7, 0x58, 0xa9, 0x4c, 0xe1, 0xce, 0x8e, - 0x30, 0xc9, 0x7e, 0x4d, 0x0c, 0x4a, 0xff, 0x0f, 0xf2, 0x53, 0x81, 0x2c, - 0x5f, 0xf7, 0xd8, 0xff, 0x91, 0xbc, 0xac, 0x5f, 0xff, 0xbc, 0x6b, 0x73, - 0x53, 0xef, 0xe1, 0xf3, 0x58, 0xb1, 0x50, 0x46, 0x0f, 0x8c, 0xc2, 0x38, - 0xbf, 0x19, 0x9f, 0x91, 0xac, 0x5f, 0xbb, 0x84, 0x7c, 0x1a, 0xc5, 0xff, - 0xe3, 0x7f, 0x39, 0xd7, 0xb0, 0xec, 0x40, 0x58, 0xbf, 0xfd, 0xee, 0x78, - 0xd9, 0x28, 0x66, 0xc2, 0x82, 0xc5, 0xff, 0xf7, 0x62, 0x14, 0x33, 0xb3, - 0xfa, 0x77, 0xcf, 0xac, 0x5f, 0xff, 0xc2, 0x2f, 0x72, 0x48, 0xdf, 0xb9, - 0x9f, 0xc0, 0x32, 0xc5, 0xfb, 0x3b, 0x19, 0x03, 0xac, 0x5b, 0xd2, 0x8d, - 0xc8, 0x2a, 0x7d, 0x72, 0xa5, 0x51, 0x7e, 0xc6, 0x38, 0x52, 0xe5, 0x8c, - 0x96, 0x28, 0xca, 0x6f, 0xfd, 0xd4, 0x08, 0x40, 0x33, 0x73, 0x81, 0x62, - 0xe9, 0x35, 0x62, 0xf1, 0x4c, 0x16, 0x2f, 0xf8, 0x72, 0x52, 0x08, 0x7d, - 0xd6, 0x2f, 0xe9, 0x89, 0xcf, 0x31, 0x2c, 0x5e, 0xf3, 0xec, 0xb1, 0x79, - 0xc1, 0x8b, 0x17, 0xfe, 0x81, 0x09, 0xb9, 0xfc, 0x03, 0x2c, 0x5b, 0xa8, - 0x1e, 0xd6, 0x0e, 0x51, 0xa8, 0xa0, 0x67, 0x8a, 0x94, 0xe8, 0xb6, 0x44, - 0x18, 0xc3, 0x8e, 0x78, 0xe0, 0x50, 0xcf, 0xbc, 0x7c, 0x25, 0x8b, 0xfd, - 0xf7, 0x19, 0x33, 0x44, 0xb1, 0x7f, 0x7c, 0x4c, 0x08, 0xec, 0x58, 0xbf, - 0xfe, 0xc0, 0xbd, 0x38, 0x5b, 0xcf, 0xa7, 0xa0, 0x96, 0x2d, 0x8b, 0x15, - 0xb1, 0xf1, 0xf1, 0x4a, 0x86, 0x8b, 0x7e, 0x42, 0x52, 0xef, 0xfd, 0x62, - 0xff, 0xf8, 0x1d, 0x79, 0x9b, 0xc1, 0xfb, 0x82, 0x28, 0x2c, 0x5e, 0x04, - 0xe9, 0x62, 0xa4, 0xfc, 0x19, 0x4e, 0xff, 0xff, 0x66, 0xb4, 0xf2, 0x03, - 0x37, 0xfb, 0xc8, 0x0a, 0x40, 0xb1, 0x51, 0xba, 0xa3, 0x79, 0x1c, 0x78, - 0x75, 0x31, 0x47, 0x21, 0x11, 0xe2, 0x0b, 0xc7, 0xf7, 0x4b, 0x17, 0xd3, - 0xec, 0xd9, 0x62, 0xfa, 0x00, 0x04, 0xac, 0x5f, 0xe9, 0x33, 0xd9, 0xce, - 0x4a, 0xc5, 0xe9, 0xc2, 0x58, 0xbe, 0x18, 0xbd, 0xc5, 0x8b, 0x0c, 0x06, - 0xfc, 0x31, 0xbb, 0x47, 0x2c, 0x5f, 0xe9, 0xf3, 0xf6, 0x92, 0xdd, 0x62, - 0xfa, 0x70, 0xa0, 0xe7, 0x95, 0xc1, 0x5a, 0x35, 0x36, 0x1e, 0x88, 0xf4, - 0x46, 0x4e, 0x7e, 0x72, 0xbd, 0xf0, 0xf8, 0xb1, 0x7c, 0x67, 0xc3, 0x1a, - 0xc5, 0xd9, 0xc8, 0x1e, 0x2f, 0xc7, 0xe9, 0xd1, 0x7c, 0x50, 0x91, 0xbb, - 0x3a, 0x58, 0xbd, 0x24, 0x6a, 0xc5, 0xff, 0x1c, 0xb3, 0xdc, 0x16, 0xa0, - 0xb1, 0x7d, 0xff, 0x37, 0xd6, 0x2a, 0x4f, 0x75, 0xce, 0xaa, 0x0e, 0x8e, - 0x18, 0x71, 0xee, 0x64, 0x3a, 0x0d, 0x8c, 0x4b, 0x79, 0x5b, 0x5d, 0x47, - 0xc0, 0xf1, 0xaa, 0xc5, 0x1f, 0xce, 0xa5, 0x8b, 0x1e, 0x58, 0xe7, 0xe5, - 0xfa, 0x82, 0x51, 0x79, 0x4b, 0x46, 0xe4, 0x7f, 0xde, 0x95, 0x26, 0x26, - 0x5e, 0xd2, 0x8f, 0xa3, 0x89, 0x83, 0x18, 0xee, 0x7a, 0xbb, 0x52, 0xb1, - 0x68, 0xdd, 0x62, 0xff, 0xb3, 0x45, 0x9d, 0x9b, 0x50, 0x58, 0xbb, 0x3c, - 0xb1, 0x71, 0x32, 0xc5, 0xe0, 0x3e, 0xeb, 0x17, 0x8a, 0x60, 0xb0, 0x61, - 0x7d, 0x58, 0x7c, 0x0e, 0x69, 0x63, 0x31, 0x12, 0xe6, 0xbb, 0xdb, 0x8b, - 0x17, 0x75, 0x05, 0x8a, 0x73, 0xd5, 0x01, 0x54, 0x70, 0x95, 0xed, 0x46, - 0x9d, 0xcb, 0x17, 0x34, 0x16, 0x2f, 0xc5, 0xec, 0x01, 0xd6, 0x2f, 0xb4, - 0xf3, 0xe5, 0x8b, 0xfb, 0x85, 0x91, 0x49, 0xd6, 0x28, 0x07, 0xa1, 0xe2, - 0x2a, 0x74, 0x6b, 0x9c, 0x99, 0x85, 0xc4, 0xf1, 0x74, 0xf9, 0x62, 0xf8, - 0x0c, 0x17, 0x96, 0x2f, 0xf3, 0x05, 0xf7, 0x9d, 0x4a, 0xc5, 0xfc, 0x23, - 0xf0, 0x5a, 0xd9, 0x62, 0xfc, 0xfd, 0xa4, 0xbc, 0xb1, 0x46, 0x2b, 0x5f, - 0x8d, 0xc5, 0xe4, 0x5c, 0x71, 0x93, 0x1b, 0x18, 0x47, 0x47, 0x6e, 0x2f, - 0xa2, 0x42, 0x33, 0xe1, 0x8d, 0xff, 0xf7, 0xf0, 0x66, 0x0f, 0xee, 0x69, - 0x9d, 0x41, 0xd6, 0x2f, 0xff, 0xfb, 0xbf, 0x30, 0xb3, 0x78, 0xff, 0xe7, - 0xd8, 0xe3, 0x30, 0xcf, 0xc7, 0x2c, 0x5f, 0xfb, 0x4f, 0xc8, 0x07, 0xf9, - 0x29, 0x58, 0xbc, 0xf2, 0x75, 0x8b, 0x9f, 0xeb, 0x15, 0xa3, 0x67, 0x1c, - 0x39, 0x7f, 0xfe, 0xf1, 0xa2, 0x9c, 0x1f, 0xf3, 0x9d, 0x42, 0x7e, 0xb1, - 0x5d, 0xf6, 0x9b, 0x2e, 0x9d, 0xce, 0xe4, 0x44, 0x97, 0xf8, 0xc2, 0xce, - 0xc5, 0x9c, 0x58, 0xa5, 0x8b, 0xee, 0x79, 0xf6, 0x58, 0xb9, 0xcb, 0x73, - 0x61, 0x10, 0x65, 0xfd, 0x0e, 0x0a, 0x74, 0x6a, 0xc5, 0xe1, 0x6b, 0x65, - 0x8a, 0xe8, 0xf3, 0xc0, 0x61, 0x7f, 0xb3, 0xb7, 0x32, 0x4b, 0xa5, 0x8b, - 0xfb, 0x9e, 0x8e, 0xcd, 0x4a, 0xc5, 0xe8, 0x85, 0xa5, 0x8b, 0x9a, 0x0b, - 0x17, 0xed, 0xdc, 0xa2, 0x12, 0xc5, 0xfd, 0xc9, 0xeb, 0xbe, 0xc6, 0x75, - 0x8b, 0xf8, 0xf8, 0x5e, 0x8e, 0xc5, 0x8b, 0xff, 0xfd, 0x9e, 0x10, 0x0e, - 0xd0, 0x61, 0xc9, 0x36, 0x9a, 0x0b, 0x17, 0xf1, 0x30, 0x5e, 0xcf, 0xe2, - 0x23, 0xc8, 0xc2, 0xff, 0x67, 0xfe, 0x2f, 0x31, 0x2c, 0x5c, 0xe3, 0x58, - 0xbf, 0xbf, 0xbb, 0x69, 0xa0, 0xb1, 0x6d, 0xe0, 0x78, 0xd8, 0x2f, 0x79, - 0xe2, 0xe2, 0xc5, 0x49, 0xe3, 0x1c, 0xa2, 0xff, 0xff, 0x4e, 0x6a, 0x04, - 0xdf, 0x6e, 0x8d, 0x61, 0xbc, 0x9d, 0x62, 0xff, 0xef, 0x3f, 0xd8, 0xf1, - 0xc2, 0xfb, 0xe9, 0x62, 0xfe, 0x6f, 0x1e, 0x73, 0xcb, 0x14, 0xc7, 0xea, - 0x24, 0x8b, 0xfb, 0x35, 0xf9, 0x87, 0x16, 0x2f, 0x4f, 0x5c, 0x58, 0xa9, - 0x3c, 0xcf, 0x97, 0x5f, 0xd2, 0x50, 0x67, 0xd9, 0x62, 0xdc, 0x58, 0xbf, - 0xa4, 0x0f, 0xf7, 0x3a, 0xc5, 0x49, 0xbf, 0x71, 0x2b, 0xc5, 0x9b, 0xac, - 0x51, 0xa8, 0xa8, 0xfb, 0x67, 0x07, 0xe8, 0x6b, 0x8c, 0xdb, 0x8b, 0xf4, - 0x55, 0x14, 0x31, 0xb4, 0x86, 0x78, 0x5f, 0xfc, 0x84, 0xa1, 0xab, 0xc6, - 0xdf, 0x43, 0x26, 0xfe, 0xdf, 0xec, 0x77, 0xe2, 0xc5, 0x4a, 0xec, 0x4e, - 0x18, 0xbc, 0xe4, 0x2b, 0x42, 0x92, 0xfc, 0xff, 0x63, 0xba, 0xc5, 0xa5, - 0x62, 0xe0, 0xfc, 0xb1, 0x52, 0x6a, 0x80, 0x23, 0x79, 0x88, 0x0b, 0x14, - 0x62, 0x23, 0x71, 0x47, 0x72, 0x0b, 0xdd, 0xb0, 0x6b, 0x15, 0xb1, 0xe8, - 0x44, 0x63, 0x70, 0x22, 0x58, 0xad, 0x1b, 0xd2, 0x24, 0xb9, 0xbe, 0xb1, - 0x7e, 0xce, 0xd9, 0xee, 0x2c, 0x5f, 0x45, 0x06, 0x25, 0x8a, 0xd1, 0xf2, - 0x7c, 0x5f, 0x85, 0x57, 0xfb, 0xbb, 0x59, 0xdc, 0x42, 0x09, 0x62, 0xb6, - 0x3e, 0xa0, 0x8b, 0xef, 0x77, 0x38, 0xd6, 0x2b, 0x0f, 0x11, 0x89, 0x28, - 0xc6, 0x5b, 0xac, 0xc7, 0x75, 0xb2, 0x26, 0x32, 0xbb, 0xe6, 0x88, 0xff, - 0x3b, 0x7c, 0xd1, 0xb1, 0x94, 0x66, 0x57, 0x82, 0xea, 0x56, 0x2f, 0xe3, - 0xee, 0x66, 0x1f, 0x8b, 0x16, 0xfa, 0xc5, 0xfb, 0x6e, 0xa1, 0x27, 0x58, - 0xbf, 0xff, 0xfe, 0x07, 0x33, 0x08, 0xd0, 0xf4, 0x53, 0x9f, 0x8c, 0xe1, - 0x66, 0xc7, 0xc3, 0xac, 0x5e, 0x29, 0x1a, 0xc5, 0xda, 0xc5, 0x8b, 0xb8, - 0xeb, 0x15, 0xb1, 0xae, 0xd0, 0xbd, 0xc1, 0xc1, 0x62, 0xfa, 0x48, 0x33, - 0xac, 0x56, 0xc8, 0xa8, 0xc4, 0xa3, 0x91, 0x06, 0x33, 0x58, 0x9b, 0x3f, - 0xa3, 0x29, 0xb8, 0x1c, 0x58, 0xbe, 0x30, 0xa7, 0x75, 0x8b, 0xe6, 0xfc, - 0x86, 0xb1, 0x58, 0x7b, 0xff, 0x18, 0xec, 0x49, 0x7d, 0x21, 0x60, 0xd6, - 0x2f, 0xff, 0x85, 0xd4, 0x38, 0x3f, 0xce, 0x86, 0xcc, 0x12, 0xc5, 0xd1, - 0xbf, 0x7c, 0x58, 0xa8, 0xd4, 0xab, 0xd6, 0x44, 0xb2, 0x39, 0x27, 0x84, - 0x46, 0x8c, 0x08, 0x8c, 0x35, 0x3b, 0xb3, 0xcb, 0x17, 0x1d, 0xd6, 0x28, - 0x66, 0xb8, 0x85, 0xef, 0x82, 0x9e, 0xb8, 0xb1, 0x7f, 0x8b, 0x3a, 0x84, - 0xe7, 0x96, 0x2f, 0xf0, 0xdb, 0xc0, 0x0c, 0xa0, 0xb1, 0x7b, 0xc1, 0xe2, - 0xc5, 0xd3, 0xb2, 0xc5, 0x49, 0xf5, 0xb1, 0xaf, 0x07, 0xaf, 0x8b, 0xdc, - 0x95, 0x8b, 0xc3, 0x98, 0x2c, 0x5f, 0xa2, 0x84, 0xf5, 0xe5, 0x8b, 0xfb, - 0x7f, 0xbf, 0x66, 0xd2, 0xc5, 0xa7, 0x63, 0xdc, 0xc2, 0xbb, 0xed, 0x9c, - 0xbc, 0xb1, 0x76, 0x7d, 0x62, 0xa5, 0x1f, 0x8c, 0x44, 0x4f, 0x22, 0x27, - 0x8e, 0x23, 0xb0, 0xd6, 0x29, 0x63, 0x0b, 0x2b, 0xbd, 0xdf, 0xac, 0x54, - 0xaf, 0x43, 0x6c, 0x3f, 0x09, 0x64, 0xd9, 0x0a, 0x2f, 0x90, 0x00, 0x97, - 0x90, 0x9e, 0xf4, 0x65, 0x3d, 0x97, 0x23, 0x86, 0xad, 0x1a, 0x96, 0x2f, - 0xda, 0x01, 0xdf, 0x8b, 0x17, 0x4f, 0x65, 0x8b, 0xf3, 0xe1, 0x37, 0x4b, - 0x15, 0x87, 0xd3, 0xd8, 0xa7, 0xb8, 0x66, 0xf7, 0xc4, 0x12, 0xc5, 0xf3, - 0x19, 0x02, 0x58, 0xb9, 0xb6, 0x58, 0xa3, 0x4d, 0xdf, 0xc8, 0xee, 0x10, - 0x16, 0x2f, 0x09, 0xf7, 0x58, 0xbe, 0xf3, 0xcf, 0x4b, 0x15, 0x03, 0xd9, - 0xf8, 0xc7, 0x07, 0xae, 0x16, 0xeb, 0x17, 0xfd, 0x3b, 0x1d, 0x80, 0x07, - 0xfa, 0xc5, 0x41, 0x10, 0x40, 0x2f, 0xe0, 0xcd, 0xef, 0x60, 0x6b, 0x17, - 0xf9, 0xa2, 0x7e, 0xa7, 0x92, 0xb1, 0x7f, 0x1c, 0x5c, 0xf6, 0x79, 0x62, - 0xff, 0x04, 0xdb, 0xe1, 0x60, 0xd6, 0x2f, 0xcd, 0xfe, 0xa1, 0xc5, 0x8a, - 0x94, 0x46, 0xf0, 0xbc, 0x46, 0x97, 0xdc, 0x04, 0xc4, 0xb1, 0x7f, 0x3c, - 0x3f, 0x24, 0x6a, 0xc5, 0x61, 0xe9, 0x70, 0x92, 0xfb, 0x86, 0x6a, 0x56, - 0x2f, 0x98, 0x72, 0x75, 0x8b, 0xf9, 0xce, 0xf1, 0x08, 0x35, 0x8a, 0xe8, - 0xfd, 0xa2, 0x24, 0xf9, 0x15, 0xfd, 0xbe, 0x1c, 0x5c, 0xf2, 0xc5, 0x49, - 0xf0, 0x88, 0xc6, 0xfc, 0x21, 0x06, 0xf1, 0xeb, 0x17, 0xa1, 0x3c, 0x58, - 0xb8, 0x8e, 0xb1, 0x61, 0x2c, 0x54, 0x0f, 0x18, 0x63, 0xa0, 0x17, 0xbc, - 0x31, 0x6e, 0xb1, 0x7c, 0x32, 0x98, 0x2c, 0x51, 0x88, 0xe3, 0x97, 0x37, - 0x2f, 0x61, 0xfb, 0xe8, 0xb4, 0xf1, 0xcb, 0x17, 0xf3, 0xef, 0x27, 0x17, - 0x96, 0x2f, 0xff, 0xa7, 0xdf, 0x93, 0x47, 0x3a, 0x89, 0xba, 0x82, 0xc5, - 0xce, 0x35, 0x8b, 0xee, 0x41, 0x89, 0x62, 0xf3, 0xe0, 0xd6, 0x2b, 0x0f, - 0x57, 0x82, 0xfe, 0x22, 0xbf, 0x3f, 0x5e, 0x93, 0xac, 0x5f, 0xfc, 0x67, - 0x5e, 0x29, 0xc3, 0x33, 0xaf, 0x2c, 0x56, 0x1f, 0x88, 0x65, 0x37, 0xfd, - 0x3f, 0x79, 0x8a, 0x29, 0xdd, 0x62, 0xf9, 0x8e, 0xfe, 0x58, 0xa8, 0xd1, - 0x7f, 0xba, 0x61, 0x02, 0x33, 0x33, 0x56, 0xba, 0x87, 0xeb, 0x98, 0x47, - 0x8f, 0x45, 0x0c, 0x1d, 0x42, 0x04, 0xf0, 0xf8, 0xfc, 0x60, 0x8c, 0x76, - 0x44, 0xfc, 0x2f, 0xf4, 0x2a, 0x05, 0x09, 0xfe, 0xc4, 0x41, 0x1d, 0xdb, - 0xbf, 0x58, 0xbf, 0x37, 0xa1, 0x9d, 0x2c, 0x57, 0x7e, 0x78, 0x04, 0x2f, - 0x7f, 0x9e, 0x26, 0x27, 0xeb, 0x8b, 0x17, 0x66, 0xeb, 0x17, 0xf8, 0xbd, - 0xc2, 0x9f, 0x71, 0x62, 0xff, 0x7c, 0xb1, 0xc1, 0x20, 0x58, 0xbf, 0x3f, - 0x6c, 0x2e, 0x2c, 0x5f, 0x47, 0x66, 0xa5, 0x62, 0xff, 0xfe, 0x9f, 0x8b, - 0xa9, 0xf6, 0xff, 0x9d, 0x0b, 0x05, 0x12, 0xc5, 0x62, 0x62, 0x4e, 0x67, - 0xa3, 0x23, 0x94, 0xfc, 0x96, 0xe8, 0xec, 0x58, 0xbe, 0xcf, 0x8a, 0x3d, - 0x62, 0xb0, 0xf0, 0x3c, 0x35, 0x7f, 0xed, 0xbe, 0xe7, 0x98, 0xff, 0xe6, - 0xcb, 0x15, 0xd1, 0xf2, 0xe8, 0x86, 0xfe, 0xd6, 0x7f, 0xe2, 0xf2, 0xc5, - 0xfd, 0x19, 0xcf, 0x4f, 0xb8, 0xb9, 0x03, 0x4b, 0xe2, 0x9c, 0xd2, 0x85, - 0x6e, 0x7c, 0x1f, 0x3f, 0xbf, 0xb3, 0x5b, 0x09, 0x86, 0xa9, 0x03, 0x48, - 0xc3, 0x47, 0x5b, 0x26, 0x03, 0x08, 0x59, 0x5f, 0xf7, 0xb8, 0xda, 0x1e, - 0x9a, 0x0b, 0x15, 0xa3, 0xe4, 0xe1, 0x55, 0xf1, 0x7f, 0x3a, 0x58, 0xa9, - 0x4f, 0x35, 0xe3, 0x88, 0x62, 0x2b, 0xbb, 0x86, 0xb1, 0x7f, 0x71, 0xc9, - 0xb4, 0x6a, 0xc5, 0x7c, 0xf2, 0x7b, 0x0d, 0xdf, 0x6e, 0xe7, 0x95, 0x8b, - 0xff, 0x49, 0xa5, 0x9d, 0x79, 0xbf, 0x2b, 0x14, 0xc7, 0xc5, 0xe2, 0x3b, - 0xfa, 0x1f, 0x26, 0xeb, 0xcb, 0x15, 0xb9, 0xe8, 0x11, 0x0d, 0xf0, 0x64, - 0xdb, 0x2c, 0x5f, 0xb8, 0xfa, 0x70, 0x2c, 0x56, 0x1f, 0x77, 0x08, 0xbb, - 0x89, 0x2f, 0xde, 0xfc, 0xeb, 0x65, 0x8b, 0xba, 0x75, 0x8b, 0xf4, 0xf8, - 0xc3, 0x84, 0xb1, 0x7f, 0xed, 0xbd, 0xf9, 0xfe, 0x76, 0x68, 0x2c, 0x5e, - 0x3c, 0xee, 0xb1, 0x7c, 0x40, 0x17, 0x16, 0x2e, 0x68, 0x2c, 0x56, 0x1e, - 0xc6, 0x87, 0x98, 0x8e, 0xfd, 0xd4, 0x5f, 0x6e, 0x96, 0x2f, 0xa1, 0x9d, - 0x79, 0x62, 0xe0, 0x71, 0x62, 0xba, 0x37, 0x9a, 0x24, 0xa9, 0x4d, 0x45, - 0xe1, 0x34, 0xc5, 0xa2, 0x68, 0xbe, 0x66, 0x07, 0x16, 0x2e, 0x63, 0x56, - 0x2e, 0x6d, 0xa2, 0x37, 0x44, 0x45, 0x7f, 0xc3, 0xe7, 0x33, 0x43, 0xfe, - 0x2c, 0x5f, 0xe0, 0xbf, 0x9d, 0x43, 0x09, 0x62, 0xf7, 0xe7, 0x4b, 0x17, - 0x03, 0xa5, 0x8b, 0xfe, 0xe3, 0x14, 0xc4, 0xe3, 0xd9, 0x62, 0xc0, 0x58, - 0xbf, 0xd0, 0x73, 0xcf, 0xc3, 0x1a, 0xc5, 0xff, 0xe9, 0xc2, 0xeb, 0xd9, - 0xa7, 0xd9, 0x8e, 0xb1, 0x70, 0x5f, 0x58, 0xbb, 0x3e, 0x62, 0x39, 0x37, - 0x3a, 0xe0, 0x97, 0x8d, 0x42, 0x4a, 0xbb, 0x38, 0xb1, 0x46, 0x26, 0xd9, - 0xe8, 0x7e, 0xc7, 0x2c, 0x54, 0x13, 0xc3, 0x0a, 0x38, 0x9a, 0x95, 0x4b, - 0xb8, 0x74, 0xd1, 0xfc, 0x5f, 0x0c, 0x0d, 0xe5, 0x8b, 0xe3, 0x93, 0x04, - 0xb1, 0x7f, 0x07, 0xec, 0x36, 0x78, 0xb1, 0x43, 0x3d, 0x32, 0x23, 0xbd, - 0xd9, 0xa2, 0x58, 0xac, 0x45, 0xbb, 0xbb, 0x7c, 0x86, 0xff, 0xb2, 0x1f, - 0xc2, 0x6d, 0x1a, 0xb1, 0x71, 0xc2, 0x58, 0xa8, 0xc3, 0xd2, 0x81, 0xcd, - 0xf1, 0xfd, 0x9f, 0x58, 0xbd, 0xb4, 0xf7, 0x2c, 0x54, 0x9e, 0x27, 0x08, - 0xe8, 0xc6, 0x66, 0x1c, 0x68, 0x69, 0x31, 0x95, 0x42, 0x55, 0xd8, 0xdf, - 0x72, 0x34, 0x47, 0x31, 0x88, 0xab, 0x43, 0x1f, 0x8d, 0xf1, 0x9e, 0x8a, - 0x54, 0x57, 0x21, 0xd8, 0x28, 0x40, 0x77, 0x34, 0xdf, 0x9f, 0x79, 0x3c, - 0xac, 0x5f, 0x64, 0xf5, 0xe5, 0x8b, 0xfd, 0xd6, 0xb1, 0xff, 0x23, 0x58, - 0xbf, 0xed, 0xdf, 0x98, 0x2d, 0xd8, 0x96, 0x2e, 0x1c, 0xac, 0x5f, 0xa2, - 0xfb, 0x02, 0x56, 0x2e, 0xc8, 0x2c, 0x5f, 0xe7, 0xdd, 0xc7, 0x1c, 0xe0, - 0x58, 0xbf, 0xfe, 0xfc, 0x9c, 0xcf, 0xcb, 0x68, 0x65, 0x30, 0x58, 0xa8, - 0x27, 0x2e, 0x32, 0x8c, 0x23, 0xf9, 0xa3, 0x1d, 0x10, 0xbf, 0x0a, 0x7c, - 0x2e, 0x23, 0x7b, 0xb0, 0x35, 0x8b, 0xf7, 0xd8, 0xa6, 0x3d, 0x62, 0xff, - 0x1a, 0xde, 0xe1, 0xdf, 0xcb, 0x17, 0xf9, 0xbc, 0xd8, 0x37, 0xec, 0xb1, - 0x7c, 0x0f, 0xc8, 0xd6, 0x2f, 0xef, 0xb8, 0x45, 0x23, 0x58, 0xbf, 0xe9, - 0x01, 0xe7, 0x0b, 0xdc, 0x58, 0xbf, 0xee, 0x60, 0x5f, 0x63, 0xbf, 0x16, - 0x2f, 0xd9, 0xad, 0x85, 0xc5, 0x8a, 0x35, 0x35, 0x6d, 0xcd, 0x5c, 0xd2, - 0x22, 0x3f, 0x97, 0x70, 0xe3, 0xb1, 0xd5, 0xfd, 0xbb, 0xed, 0x9d, 0x79, - 0x62, 0xfc, 0xfd, 0x41, 0xc9, 0x62, 0xf3, 0xff, 0x16, 0x2f, 0xef, 0x31, - 0xcf, 0x27, 0x58, 0xac, 0x3f, 0x2d, 0xca, 0x3a, 0x1c, 0xa5, 0x8a, 0x35, - 0x1b, 0xe7, 0x85, 0x18, 0x46, 0x17, 0xfc, 0x2d, 0x8c, 0xcf, 0x7e, 0x7c, - 0xb1, 0x7e, 0xe0, 0x81, 0x9f, 0x58, 0xb9, 0xe2, 0x58, 0xa9, 0x45, 0xa6, - 0xe6, 0xfe, 0x3c, 0xee, 0x29, 0xbf, 0xf8, 0x84, 0x69, 0xc5, 0xef, 0xc8, - 0xbb, 0xf5, 0x8b, 0xe3, 0xce, 0x8d, 0x58, 0xbe, 0xc0, 0x01, 0x96, 0x2f, - 0x07, 0xf6, 0x58, 0xac, 0x3e, 0x42, 0x24, 0x8e, 0x22, 0xad, 0x91, 0xc0, - 0x14, 0x2c, 0x2f, 0x83, 0x92, 0xdd, 0x62, 0x96, 0x2f, 0x73, 0xf2, 0xb0, - 0x72, 0x65, 0xfa, 0x19, 0xf7, 0x3a, 0xc5, 0x41, 0x10, 0x63, 0x30, 0x22, - 0xbb, 0xf6, 0xd8, 0x2d, 0x6c, 0xb1, 0x7e, 0x2d, 0x04, 0xdb, 0x2c, 0x5f, - 0xef, 0xf6, 0xc1, 0xf3, 0x03, 0x58, 0xa9, 0x4d, 0xa3, 0x21, 0x5a, 0xe5, - 0xec, 0x56, 0x22, 0xab, 0xf3, 0x3f, 0x8a, 0x56, 0x2f, 0xb7, 0xfc, 0x84, - 0xb1, 0x7e, 0xcf, 0x71, 0xce, 0xb1, 0x70, 0x89, 0x62, 0xe1, 0x79, 0x62, - 0xc3, 0x58, 0xbf, 0x70, 0x73, 0x83, 0x58, 0xad, 0x8f, 0x4a, 0x3c, 0x61, - 0x84, 0xaf, 0x16, 0x6c, 0xb1, 0x52, 0xc8, 0x0f, 0x83, 0xe0, 0xc6, 0x32, - 0x38, 0x07, 0x8f, 0xf3, 0x52, 0xa2, 0x0e, 0x99, 0xdf, 0x93, 0x11, 0x2f, - 0x0a, 0x04, 0xd2, 0x19, 0x95, 0xff, 0x49, 0xe7, 0xce, 0x59, 0x05, 0x8b, - 0x41, 0x62, 0xfb, 0x82, 0x90, 0x2c, 0x5e, 0xfb, 0x9d, 0x62, 0xdd, 0xcb, - 0x15, 0xb9, 0xb2, 0x10, 0xed, 0x69, 0x18, 0x1f, 0x37, 0x00, 0x91, 0x2a, - 0xdd, 0x84, 0xb1, 0x7e, 0xe0, 0x7c, 0xf8, 0x96, 0x2b, 0xe7, 0x83, 0xe1, - 0x6b, 0xff, 0xda, 0x79, 0x3e, 0x19, 0x9f, 0x7c, 0x3a, 0xc5, 0xfb, 0xa9, - 0xf6, 0xa5, 0x62, 0xf9, 0xf9, 0x2c, 0xb1, 0x46, 0x22, 0x4c, 0x92, 0x78, - 0x53, 0x7f, 0xb0, 0xb3, 0xaf, 0x40, 0xeb, 0x17, 0x7a, 0x56, 0x2a, 0x4f, - 0x2d, 0x8d, 0x2f, 0xf9, 0xa0, 0x37, 0x17, 0x7e, 0xfa, 0x58, 0xbf, 0x61, - 0x14, 0x8d, 0x62, 0xf3, 0x7e, 0x56, 0x2f, 0xe2, 0x68, 0x3f, 0x50, 0x58, - 0xaf, 0x9e, 0x50, 0x63, 0x97, 0xf4, 0xec, 0x76, 0x8a, 0x56, 0x2d, 0xc5, - 0x8b, 0xe0, 0xfb, 0xa7, 0xa5, 0x8b, 0x69, 0x62, 0xa0, 0x89, 0xe8, 0x88, - 0xc0, 0x5e, 0x42, 0x42, 0x28, 0xbf, 0xfe, 0x63, 0x7d, 0x3a, 0x06, 0xa7, - 0xc4, 0xc0, 0x58, 0xbf, 0xb7, 0x1f, 0xc4, 0xdc, 0x58, 0xbf, 0xfd, 0xf9, - 0x72, 0x9f, 0x3e, 0x9f, 0xc2, 0x58, 0xa9, 0x3f, 0x87, 0x30, 0xb9, 0x8d, - 0x58, 0xbf, 0xb6, 0x2c, 0xf6, 0xa5, 0x62, 0xff, 0x3f, 0x83, 0xd4, 0xfe, - 0x56, 0x2f, 0xb7, 0x0f, 0xdc, 0x58, 0xbf, 0x8b, 0x01, 0x85, 0x05, 0x8b, - 0xff, 0x83, 0x26, 0xf7, 0x1f, 0xaf, 0xb8, 0x4b, 0x17, 0xf8, 0xf3, 0xbc, - 0x93, 0xc4, 0xb1, 0x63, 0x4c, 0x3f, 0xbc, 0x47, 0xac, 0x46, 0x83, 0x42, - 0x9e, 0xf6, 0xa4, 0xd5, 0x8a, 0x94, 0xe7, 0x20, 0x5c, 0xe6, 0x85, 0x0f, - 0x6e, 0x13, 0x54, 0xaf, 0x26, 0x63, 0xeb, 0xc2, 0xd7, 0x4f, 0x67, 0x20, - 0xf9, 0xf3, 0x46, 0x1c, 0x49, 0x5c, 0x86, 0x47, 0x88, 0x05, 0x1d, 0xa5, - 0xff, 0xe2, 0xc1, 0xea, 0x47, 0xf6, 0x0f, 0x36, 0x58, 0xbf, 0x72, 0x7b, - 0x37, 0xd6, 0x2f, 0x37, 0x40, 0x58, 0xb7, 0x65, 0x8a, 0x81, 0xb2, 0xe0, - 0xf5, 0xcf, 0xe5, 0x8b, 0xff, 0x8b, 0xed, 0xc2, 0xc3, 0x4d, 0xc8, 0xf5, - 0x8b, 0xf8, 0x43, 0xcf, 0x4c, 0x4b, 0x15, 0x87, 0xef, 0xba, 0x45, 0xfd, - 0x0c, 0x2d, 0x9f, 0x4b, 0x17, 0x89, 0x86, 0xb1, 0x7f, 0xa4, 0x5b, 0xe1, - 0xe7, 0x75, 0x8a, 0x73, 0xd1, 0x21, 0xcb, 0x83, 0xf2, 0xc5, 0xfb, 0x93, - 0xaf, 0x4a, 0xc5, 0x0c, 0xf8, 0x74, 0x41, 0xc1, 0x9b, 0x9f, 0xbf, 0x58, - 0xba, 0x01, 0xac, 0x5f, 0x05, 0x90, 0x75, 0x8b, 0xd8, 0xe6, 0xac, 0x5e, - 0xcc, 0xd9, 0x62, 0xc3, 0x58, 0xbc, 0xcd, 0xa5, 0x8a, 0x93, 0x5d, 0x10, - 0x95, 0x32, 0x2b, 0x08, 0x8f, 0xc3, 0xa1, 0xa5, 0xde, 0xc7, 0xec, 0xb1, - 0x7a, 0x01, 0x9d, 0x62, 0xbe, 0x6f, 0x58, 0x7a, 0xf8, 0x38, 0x0b, 0x4b, - 0x17, 0xf7, 0x1f, 0x58, 0x2d, 0x2c, 0x5e, 0x1b, 0xe9, 0x62, 0xff, 0xfe, - 0x88, 0xc7, 0xdc, 0x5a, 0xe0, 0x8c, 0x3b, 0xfb, 0xee, 0xb1, 0x74, 0x9a, - 0xb1, 0x52, 0x7f, 0x2e, 0xc3, 0x52, 0xba, 0x15, 0x04, 0xbc, 0x5c, 0x34, - 0x87, 0x78, 0x47, 0x74, 0x44, 0xf0, 0xe0, 0x88, 0xbf, 0x43, 0x87, 0x86, - 0x2f, 0xde, 0x78, 0x41, 0xe2, 0x51, 0x17, 0x77, 0x42, 0x5a, 0xf0, 0xcf, - 0xc5, 0x8b, 0xf8, 0x3f, 0x7c, 0x26, 0xd9, 0x62, 0xdd, 0xea, 0xa4, 0xfc, - 0x2a, 0x07, 0xac, 0x73, 0x2b, 0xf6, 0xdd, 0x42, 0x46, 0xb1, 0x7c, 0x4f, - 0xd4, 0x16, 0x2f, 0xe8, 0x9f, 0x82, 0x11, 0xd6, 0x2b, 0x0f, 0x4d, 0x88, - 0xef, 0xfa, 0x77, 0xfc, 0xf6, 0xd0, 0x7c, 0x58, 0xbd, 0xac, 0xc5, 0x8a, - 0x8d, 0xd1, 0xf0, 0xef, 0xc4, 0x41, 0xc3, 0xeb, 0xc1, 0xcc, 0x4b, 0x17, - 0x8a, 0x40, 0xb1, 0x79, 0xf3, 0xeb, 0x16, 0xde, 0x4d, 0xc6, 0x87, 0x2f, - 0xff, 0x16, 0x0f, 0xf3, 0xdb, 0x91, 0xef, 0xd7, 0x96, 0x2b, 0x48, 0xce, - 0x25, 0x7e, 0xc4, 0xf7, 0x86, 0x10, 0x16, 0x2f, 0xff, 0x7f, 0x24, 0xfa, - 0xce, 0xef, 0xbc, 0x9d, 0x62, 0xff, 0x85, 0x08, 0x1f, 0xde, 0x93, 0xac, - 0x5a, 0x1f, 0x44, 0x3f, 0x93, 0x2f, 0xd3, 0xf7, 0x07, 0x16, 0x2f, 0xee, - 0x4e, 0xd9, 0xc1, 0xac, 0x56, 0x8f, 0x5f, 0xc5, 0x17, 0x7f, 0x16, 0x2f, - 0xff, 0xbf, 0x23, 0xcd, 0xcc, 0xc2, 0xc1, 0xfe, 0x56, 0x2f, 0xfb, 0x53, - 0xf7, 0xed, 0xa9, 0x82, 0xc5, 0xff, 0xfe, 0x04, 0xf5, 0x0e, 0x0f, 0x30, - 0xb3, 0x7f, 0xb8, 0xbc, 0xb1, 0x7f, 0xec, 0x2c, 0xce, 0x19, 0x0e, 0x1d, - 0x62, 0xff, 0xe9, 0xea, 0x4b, 0x69, 0x83, 0x96, 0x2c, 0x5f, 0xfb, 0x3d, - 0x80, 0x33, 0x3e, 0x52, 0xb1, 0x4e, 0x8c, 0x03, 0x9f, 0x92, 0x1d, 0xff, - 0x9a, 0x7a, 0x81, 0x9c, 0xe8, 0x72, 0xb1, 0x7e, 0xc1, 0xfd, 0xfc, 0xb1, - 0x7f, 0x36, 0xc5, 0x9b, 0x09, 0x62, 0x86, 0xba, 0x25, 0x91, 0x87, 0x6e, - 0x63, 0xd4, 0x29, 0x9e, 0x10, 0x11, 0xe4, 0x51, 0x0b, 0xe9, 0x40, 0x07, - 0x7c, 0x8c, 0x8b, 0xc5, 0xc1, 0x21, 0x47, 0x14, 0x5e, 0xe1, 0x4a, 0xc5, - 0xf6, 0x04, 0x64, 0x16, 0x2f, 0x9f, 0x98, 0x33, 0x0f, 0x07, 0x61, 0xcb, - 0xc6, 0xce, 0x96, 0x2f, 0x8e, 0xc3, 0x12, 0xc5, 0xe8, 0xa4, 0xeb, 0x17, - 0xdf, 0x93, 0xba, 0xc5, 0xfd, 0x3f, 0x7e, 0x48, 0x6b, 0x15, 0x87, 0xdc, - 0x21, 0xe0, 0xc8, 0xaf, 0x80, 0x4d, 0x05, 0x8b, 0xfb, 0xee, 0x76, 0x6e, - 0xe5, 0x8b, 0xf4, 0x08, 0x4c, 0x6a, 0xc5, 0xe1, 0x75, 0xc5, 0x8b, 0xfc, - 0x22, 0xf3, 0xfd, 0xce, 0xb1, 0x78, 0xb3, 0xb9, 0x62, 0xf1, 0xf3, 0xb2, - 0xc5, 0x18, 0x89, 0x08, 0x0f, 0xe1, 0x9b, 0x0f, 0xdc, 0xfb, 0x2c, 0x58, - 0x96, 0x2b, 0x46, 0xa4, 0x31, 0x8b, 0x1d, 0x62, 0xf6, 0xb3, 0xa5, 0x8b, - 0xe3, 0x83, 0xa0, 0x2c, 0x5c, 0x39, 0x81, 0xea, 0x80, 0x48, 0x31, 0xeb, - 0xff, 0xd0, 0xf3, 0xec, 0xc3, 0x98, 0x16, 0x1d, 0x62, 0xd1, 0xcb, 0x17, - 0xe6, 0xf3, 0x10, 0x16, 0x2a, 0x31, 0x5c, 0x34, 0x8f, 0x0e, 0x12, 0x26, - 0x97, 0xee, 0x45, 0xd1, 0x84, 0x50, 0xb9, 0xd3, 0x29, 0xdd, 0xd8, 0xef, - 0xbf, 0x4a, 0x8e, 0x15, 0xbf, 0xe7, 0x36, 0x74, 0x58, 0xe6, 0xac, 0x5e, - 0x1e, 0xbb, 0x2c, 0x5d, 0xbe, 0xcb, 0x17, 0xb5, 0x14, 0x16, 0x2f, 0xba, - 0xc1, 0x1d, 0x62, 0x9c, 0xf0, 0xf4, 0x3f, 0x7f, 0xf8, 0xd6, 0xe8, 0xce, - 0x4e, 0x9a, 0x0f, 0xf5, 0x8a, 0xc3, 0xee, 0x34, 0x86, 0xf8, 0x9b, 0xdc, - 0x58, 0xa3, 0x9e, 0x27, 0x62, 0x2b, 0xe6, 0x88, 0x38, 0x96, 0x2a, 0x4f, - 0x29, 0x89, 0x2e, 0x78, 0x96, 0x2f, 0xfd, 0x9b, 0x19, 0xf9, 0x89, 0xfa, - 0x82, 0xc5, 0xfd, 0x26, 0x8c, 0xa7, 0xa5, 0x8b, 0x9c, 0xeb, 0x15, 0x28, - 0x89, 0xd2, 0x1f, 0x62, 0xfb, 0xe9, 0x29, 0xdd, 0x62, 0xf4, 0xe8, 0xd5, - 0x8a, 0xdc, 0xf0, 0x08, 0x8a, 0xfa, 0x4b, 0x0d, 0x58, 0xbd, 0xc9, 0x35, - 0x62, 0xf7, 0xdb, 0xa5, 0x8b, 0xfc, 0xd9, 0xd7, 0xbc, 0xdf, 0x58, 0xbf, - 0xf8, 0x43, 0xcd, 0x4c, 0x1c, 0x72, 0x4b, 0x17, 0xfc, 0x4d, 0xb4, 0xeb, - 0x4d, 0x05, 0x8b, 0xfb, 0x91, 0x42, 0x4a, 0x0b, 0x17, 0xfe, 0x7f, 0x68, - 0x50, 0xea, 0x19, 0xe5, 0x8a, 0x82, 0x3b, 0x3e, 0x87, 0xe3, 0x9e, 0xc5, - 0xf7, 0xfa, 0x4d, 0xf6, 0x13, 0x79, 0x62, 0xff, 0x73, 0x98, 0x40, 0x8e, - 0xc5, 0x8b, 0xff, 0x9f, 0x90, 0x7f, 0x07, 0xa9, 0xfc, 0xac, 0x58, 0xf8, - 0x7f, 0x7f, 0x36, 0xbf, 0xfe, 0xd3, 0x70, 0xb3, 0x60, 0xe0, 0x29, 0x72, - 0x58, 0xa9, 0x4d, 0x92, 0x07, 0xed, 0x0a, 0xe1, 0x13, 0xd7, 0x4a, 0xc0, - 0x62, 0x1e, 0xf8, 0xf7, 0xa5, 0x42, 0x5f, 0xff, 0xe7, 0xe0, 0x30, 0xc7, - 0xed, 0x3f, 0x79, 0x8a, 0x29, 0xdd, 0x62, 0xf7, 0x9f, 0x65, 0x8b, 0xfd, - 0xf7, 0xd1, 0x3f, 0xb8, 0xb1, 0x7b, 0xa9, 0x89, 0x62, 0xc0, 0xdc, 0xf4, - 0x98, 0xce, 0xf1, 0x4e, 0xeb, 0x17, 0xfb, 0x39, 0x17, 0xdc, 0x2f, 0x2c, - 0x5f, 0x9a, 0x13, 0x1e, 0x75, 0x8b, 0xff, 0x3c, 0x5f, 0x9d, 0x75, 0x09, - 0xd2, 0xc5, 0xfd, 0x09, 0x8f, 0x3c, 0xc1, 0x62, 0xff, 0xba, 0x68, 0xf3, - 0xe8, 0xa6, 0x0b, 0x17, 0xff, 0xbd, 0xf9, 0xed, 0xc2, 0x6f, 0x44, 0xfd, - 0x96, 0x2f, 0xfc, 0xe7, 0xcd, 0x64, 0xc4, 0xe7, 0x58, 0xac, 0x44, 0x6e, - 0x93, 0xea, 0x53, 0xbf, 0xd8, 0xd8, 0x65, 0x71, 0x20, 0xfc, 0xc7, 0x90, - 0xca, 0xbe, 0xcf, 0x48, 0xd6, 0x2f, 0xa2, 0xd4, 0xf4, 0xb1, 0x7f, 0xf1, - 0x37, 0x5c, 0xe6, 0x68, 0x7f, 0xc5, 0x8b, 0xff, 0xd3, 0xb9, 0x9a, 0xc7, - 0x17, 0x7f, 0x9d, 0xd8, 0xb1, 0x4e, 0x89, 0x82, 0x45, 0xa3, 0x19, 0x1a, - 0xd0, 0x85, 0x0e, 0x38, 0xee, 0x44, 0xf2, 0xc8, 0xf4, 0x90, 0x76, 0x56, - 0x70, 0x22, 0x8e, 0x47, 0xb8, 0x12, 0xf0, 0x64, 0x5d, 0xd0, 0xbd, 0xb7, - 0x78, 0xb1, 0x7b, 0xb0, 0x1d, 0x62, 0x96, 0x2f, 0xe6, 0xe8, 0xe4, 0xc1, - 0x2c, 0x54, 0x9b, 0xbd, 0x06, 0x52, 0xc5, 0xec, 0xc0, 0x2c, 0x5e, 0xfb, - 0xf9, 0x62, 0xdd, 0xbb, 0xd4, 0x6b, 0x77, 0xc1, 0x7c, 0x5a, 0x72, 0x02, - 0x0c, 0x0c, 0x72, 0xc0, 0x58, 0xbf, 0x6b, 0x61, 0x30, 0xd6, 0x2d, 0x1c, - 0xb1, 0x50, 0x3d, 0x1c, 0x12, 0x0c, 0xaa, 0xf4, 0xf7, 0x71, 0x62, 0xe6, - 0x3a, 0xc5, 0x1a, 0x7c, 0xdb, 0x97, 0xe8, 0x82, 0xfd, 0xad, 0x64, 0x7c, - 0x4b, 0x17, 0x98, 0x84, 0xb1, 0x70, 0xf1, 0x62, 0xdc, 0x58, 0xa1, 0x9a, - 0x90, 0x85, 0xea, 0x5b, 0xb4, 0xb8, 0x43, 0x9c, 0x6e, 0x99, 0x3c, 0x59, - 0xbc, 0x62, 0x8f, 0x2f, 0x02, 0x3e, 0x17, 0xd1, 0x1c, 0x9c, 0x83, 0xf1, - 0xac, 0xb5, 0x23, 0xd8, 0x11, 0xd3, 0x0a, 0x31, 0xfe, 0xc6, 0x21, 0x16, - 0x86, 0x8b, 0x7b, 0xd9, 0xf5, 0x8b, 0xfe, 0x33, 0x7f, 0xb6, 0x85, 0x30, - 0x58, 0xbf, 0xdd, 0xdc, 0xe4, 0x9e, 0x7c, 0xb1, 0x68, 0xe5, 0x8b, 0x06, - 0xb1, 0x4e, 0x6a, 0x18, 0x56, 0xa4, 0xff, 0x8e, 0xbf, 0x7a, 0x1d, 0xec, - 0xac, 0x5f, 0x9c, 0xbd, 0x20, 0x58, 0xbf, 0x1c, 0x5b, 0xe1, 0xd6, 0x2f, - 0xda, 0x3c, 0x83, 0x8b, 0x14, 0x62, 0x27, 0x24, 0x89, 0xc9, 0xd8, 0xaa, - 0xff, 0x14, 0x0b, 0x0f, 0x3b, 0xac, 0x5d, 0x91, 0xcb, 0x15, 0x87, 0x9b, - 0xf3, 0x3b, 0xf0, 0xfe, 0x26, 0xe2, 0xc5, 0xfb, 0xef, 0xdb, 0x06, 0xb1, - 0x77, 0x9d, 0x62, 0xf6, 0x1e, 0x56, 0x28, 0xc3, 0x67, 0x82, 0xf7, 0x31, - 0xd6, 0x2f, 0x9f, 0x76, 0xd2, 0xc5, 0xfe, 0x2c, 0x21, 0x43, 0x38, 0xb1, - 0x7e, 0xe4, 0xef, 0x80, 0x58, 0xbf, 0x38, 0xc5, 0xee, 0x2c, 0x5d, 0xee, - 0x18, 0x7a, 0x4c, 0x53, 0x52, 0x8b, 0x21, 0x42, 0x12, 0xb6, 0x4c, 0x4e, - 0x02, 0xe3, 0x86, 0xad, 0xc6, 0x74, 0xb1, 0x7e, 0x63, 0xbf, 0x76, 0x2c, - 0x5f, 0xd9, 0xf6, 0xf3, 0x44, 0xb1, 0x74, 0xf4, 0xb1, 0x5d, 0x1e, 0x37, - 0x8b, 0xaf, 0x36, 0xa2, 0x58, 0xac, 0x45, 0x8b, 0x38, 0x70, 0x8e, 0xff, - 0x08, 0xb3, 0xc4, 0xc7, 0x58, 0xbf, 0xff, 0xec, 0xfb, 0x77, 0x69, 0xb6, - 0x2c, 0xee, 0x7c, 0x0b, 0xa8, 0x71, 0x62, 0xb1, 0x14, 0x1a, 0x32, 0xb4, - 0x4b, 0x17, 0xa4, 0xbc, 0xb1, 0x7b, 0xf8, 0x05, 0x8a, 0x73, 0xcc, 0x8f, - 0x13, 0xf0, 0xe5, 0xfe, 0xe4, 0xc2, 0x76, 0x9d, 0x96, 0x2e, 0xc3, 0x56, - 0x2f, 0xff, 0x61, 0xbf, 0x7e, 0x7f, 0x3b, 0x4e, 0x74, 0xb1, 0x52, 0x8c, - 0xb7, 0x31, 0xf9, 0xa9, 0x0c, 0x5a, 0x56, 0x2f, 0x98, 0x39, 0x09, 0x62, - 0xff, 0xef, 0xe6, 0xfa, 0xd4, 0xfb, 0x9f, 0x75, 0x8b, 0x98, 0xeb, 0x15, - 0x28, 0x92, 0xe8, 0x47, 0xc4, 0x81, 0xa3, 0x5d, 0xac, 0x58, 0xbf, 0x77, - 0x07, 0xaf, 0xb2, 0xc5, 0xff, 0x87, 0x87, 0xd4, 0xb9, 0x64, 0xac, 0x5d, - 0x3b, 0xac, 0x53, 0x9e, 0xa7, 0x8f, 0x2f, 0x83, 0xe4, 0xec, 0xb1, 0x52, - 0x78, 0xdc, 0x21, 0xba, 0x37, 0xee, 0x58, 0xbd, 0x17, 0x19, 0x62, 0xb1, - 0x32, 0x60, 0x43, 0x1c, 0x88, 0x44, 0x41, 0x7c, 0xfa, 0x98, 0x2c, 0x5f, - 0x6c, 0x79, 0xe2, 0xc5, 0x6c, 0x78, 0xd8, 0x45, 0x7f, 0xe9, 0xf3, 0x0b, - 0xcd, 0xd6, 0x79, 0x62, 0xff, 0xb4, 0x64, 0x8f, 0xf9, 0xbc, 0xac, 0x5f, - 0xfd, 0x38, 0x37, 0xe1, 0x67, 0x67, 0x25, 0x8a, 0xfa, 0x2f, 0x58, 0xfc, - 0x47, 0x77, 0xcd, 0x2f, 0x1c, 0xb1, 0x7e, 0xe0, 0xb6, 0x3b, 0xac, 0x56, - 0xe7, 0x9d, 0xd1, 0x25, 0xf9, 0xbe, 0x77, 0xe2, 0xc5, 0xe2, 0xce, 0x2c, - 0x5f, 0xff, 0xfa, 0x7e, 0xe7, 0x8c, 0x8a, 0x0d, 0xa0, 0xfe, 0xfd, 0x73, - 0x77, 0xd9, 0x62, 0xbb, 0xd6, 0x60, 0x3c, 0x8e, 0xed, 0x0b, 0xa8, 0x42, - 0xf4, 0x70, 0x88, 0xc2, 0x13, 0x4a, 0x77, 0x5d, 0x78, 0xcd, 0x23, 0xcd, - 0xe2, 0x86, 0x5e, 0xa1, 0x9d, 0xf8, 0xce, 0x5a, 0x19, 0x80, 0x3e, 0x28, - 0xcf, 0x79, 0x08, 0x7f, 0x43, 0x7c, 0x4f, 0xbd, 0x89, 0x03, 0x28, 0xee, - 0x1c, 0xbf, 0xde, 0x86, 0x47, 0xb1, 0x01, 0x62, 0xf6, 0xb8, 0x25, 0x8b, - 0x71, 0x62, 0xff, 0x6e, 0x06, 0x03, 0x96, 0xeb, 0x15, 0xf3, 0xc7, 0x21, - 0x2a, 0xc4, 0x43, 0x3b, 0x2d, 0xfe, 0xd8, 0x79, 0xee, 0x37, 0x4b, 0x17, - 0x81, 0xee, 0x2c, 0x5f, 0xfc, 0x76, 0xea, 0x30, 0x98, 0x64, 0xdf, 0x58, - 0xb7, 0x16, 0x29, 0x62, 0xbc, 0x5f, 0x76, 0x12, 0xa3, 0x11, 0x4b, 0x83, - 0xc0, 0x65, 0xa5, 0x8b, 0xa1, 0xde, 0x2c, 0x58, 0xc7, 0x35, 0x2c, 0x19, - 0x7d, 0x82, 0xd6, 0xcb, 0x17, 0xd0, 0xe0, 0xce, 0xb1, 0x7e, 0x1e, 0x0d, - 0xa0, 0xb1, 0x4e, 0x7e, 0x0c, 0x48, 0x22, 0x4b, 0xff, 0xb3, 0xb6, 0x0f, - 0x08, 0x50, 0xce, 0x2c, 0x5f, 0xb5, 0x3f, 0x0c, 0x6b, 0x15, 0xa3, 0xef, - 0x64, 0x5b, 0x01, 0x62, 0xed, 0xa5, 0x62, 0xfd, 0x83, 0xfb, 0xec, 0xb1, - 0x69, 0xd8, 0xf4, 0xdc, 0x48, 0x86, 0x2f, 0x82, 0x6c, 0xe2, 0xc5, 0xfc, - 0x39, 0x01, 0x67, 0x4b, 0x17, 0xfd, 0x03, 0xb4, 0x3d, 0xc9, 0x35, 0x62, - 0xef, 0xba, 0xc5, 0x4a, 0x28, 0xf0, 0x8d, 0x8b, 0xbc, 0x77, 0x7a, 0x4b, - 0x75, 0x8b, 0x9f, 0x65, 0x8a, 0x93, 0x6b, 0xf1, 0xdb, 0xdc, 0x72, 0x58, - 0xb0, 0x16, 0x2f, 0xe8, 0x4e, 0xb5, 0x21, 0x2c, 0x5b, 0xa5, 0x8b, 0xb7, - 0x33, 0x0f, 0x0b, 0x85, 0xf5, 0xa4, 0x41, 0x92, 0xa5, 0xfe, 0x0e, 0x13, - 0xd9, 0xc8, 0x0b, 0x17, 0xcd, 0xdd, 0x84, 0xb1, 0x7d, 0xc6, 0xe9, 0xd6, - 0x2b, 0x13, 0x3e, 0x68, 0x4f, 0x91, 0x17, 0x0d, 0xbc, 0x49, 0x7f, 0xf8, - 0x01, 0xf9, 0xe0, 0xfa, 0x01, 0xdf, 0x8b, 0x14, 0x35, 0xef, 0x3c, 0x85, - 0xe6, 0xe4, 0x2f, 0x0d, 0xb8, 0xf5, 0x93, 0xc2, 0x59, 0xa1, 0x38, 0x07, - 0x42, 0x86, 0xb7, 0x1b, 0xc5, 0x1a, 0xf7, 0x64, 0xdb, 0xa1, 0xf5, 0x8b, - 0xee, 0x6c, 0x2e, 0x2c, 0x5d, 0xb4, 0x16, 0x2f, 0x3f, 0xdd, 0x62, 0xe3, - 0xca, 0xc5, 0xd1, 0xb8, 0xd6, 0x2a, 0x51, 0x4d, 0x83, 0x1d, 0x12, 0xf8, - 0x64, 0x43, 0x91, 0xc2, 0xf7, 0xff, 0x6d, 0xbf, 0xdc, 0x3d, 0x1b, 0x9d, - 0x79, 0x62, 0xfb, 0x3a, 0x84, 0xac, 0x5e, 0x7f, 0xca, 0xc5, 0xe1, 0x37, - 0x16, 0x2b, 0x11, 0x4f, 0xf4, 0xbe, 0xc4, 0x61, 0x8e, 0x5e, 0xf3, 0xec, - 0xb1, 0x7f, 0xce, 0x6c, 0x8e, 0x7b, 0x67, 0xd6, 0x2f, 0xd8, 0x51, 0xd2, - 0x6a, 0xc5, 0xf1, 0x00, 0xfe, 0x58, 0xbf, 0xbe, 0xe6, 0x6d, 0x81, 0x2c, - 0x54, 0x9e, 0xa7, 0x08, 0xef, 0xf3, 0x85, 0xd4, 0x39, 0x9b, 0xac, 0x5f, - 0xd0, 0x0c, 0x00, 0x9e, 0x96, 0x2f, 0x60, 0x5b, 0xac, 0x54, 0xa6, 0x4e, - 0xef, 0xff, 0x21, 0x63, 0x72, 0x31, 0xbf, 0x4f, 0x50, 0xe4, 0xac, 0x5f, - 0xf0, 0xb8, 0x60, 0xc4, 0xda, 0x82, 0xc5, 0x61, 0xf2, 0x91, 0x4d, 0xfc, - 0x2e, 0x4c, 0x42, 0xd2, 0xc5, 0xe1, 0x67, 0x4b, 0x17, 0xf6, 0x74, 0x0c, - 0xf7, 0x16, 0x2f, 0xd2, 0x5d, 0x43, 0x8b, 0x1f, 0x35, 0xf5, 0xf4, 0x5b, - 0x78, 0xc0, 0x49, 0xb7, 0xbe, 0xfb, 0xac, 0x5e, 0xf6, 0x1d, 0x62, 0xf9, - 0xcd, 0xfb, 0xac, 0x5b, 0x24, 0xf0, 0x3e, 0x3b, 0x50, 0x44, 0x27, 0x97, - 0xaf, 0xec, 0x3e, 0xb5, 0x23, 0x58, 0xbf, 0x75, 0xcf, 0x3e, 0xcb, 0x17, - 0xf0, 0x8b, 0x6e, 0x3f, 0x4b, 0x17, 0xff, 0x4e, 0xc1, 0x37, 0x5c, 0xc1, - 0xbf, 0x16, 0x2a, 0x51, 0x45, 0x02, 0xb2, 0x30, 0xb7, 0x96, 0x2f, 0x49, - 0x6c, 0xb1, 0x7e, 0xc3, 0x7c, 0xfb, 0x2c, 0x5f, 0xe7, 0x88, 0xc2, 0x9f, - 0x71, 0x62, 0xe8, 0x0d, 0x62, 0xec, 0xe9, 0x62, 0xb0, 0xd8, 0x00, 0x62, - 0xf4, 0x97, 0x96, 0x2a, 0x51, 0xf4, 0x31, 0x2e, 0x87, 0x74, 0x54, 0x06, - 0x5e, 0xc4, 0x17, 0x47, 0x4a, 0xc5, 0xfd, 0xc1, 0x40, 0xcc, 0x25, 0x8a, - 0x73, 0xc9, 0xf0, 0xd5, 0xff, 0xfd, 0x0e, 0x16, 0x44, 0x66, 0xff, 0x9d, - 0xcd, 0xd3, 0x04, 0xb1, 0x7b, 0x1f, 0x65, 0x8b, 0xa7, 0x6e, 0x8f, 0xfc, - 0x98, 0xa9, 0x91, 0x9c, 0x28, 0x50, 0x5f, 0xff, 0xa7, 0x40, 0xce, 0x10, - 0x9a, 0x1f, 0x13, 0x6c, 0xb1, 0x7c, 0xd0, 0xe8, 0x0b, 0x17, 0xf0, 0x24, - 0xef, 0xa8, 0x96, 0x2d, 0xd9, 0x62, 0xc5, 0x27, 0x87, 0x85, 0xf7, 0xef, - 0x63, 0x16, 0xeb, 0x15, 0xf4, 0xc2, 0x89, 0x5b, 0xcc, 0xfd, 0xc4, 0xb7, - 0xff, 0xa4, 0x1a, 0xd4, 0x84, 0x67, 0xb9, 0x9b, 0x2c, 0x5e, 0xea, 0x4e, - 0xb1, 0x7f, 0xf8, 0x7f, 0x9e, 0xa0, 0x58, 0x7c, 0xeb, 0xcb, 0x17, 0xe3, - 0xe7, 0xf0, 0x96, 0x29, 0xcf, 0xcd, 0x93, 0x2f, 0xf4, 0x1c, 0x85, 0x24, - 0x6a, 0xc5, 0xfe, 0xfb, 0xf0, 0x47, 0x97, 0x58, 0xbe, 0x68, 0xe6, 0x35, - 0x62, 0xee, 0xbd, 0xb9, 0xec, 0xfc, 0xce, 0xfe, 0xc3, 0x67, 0x80, 0x65, - 0x8a, 0xc3, 0xde, 0x08, 0xc2, 0xff, 0x34, 0x07, 0x98, 0x0e, 0x2c, 0x53, - 0x9e, 0xa8, 0x88, 0xaf, 0xfd, 0xdb, 0xed, 0x03, 0x3d, 0xf6, 0x35, 0x62, - 0xff, 0x03, 0x0a, 0x29, 0xcd, 0x2c, 0x56, 0x1f, 0xbb, 0x22, 0x5c, 0xc4, - 0xb1, 0x73, 0x77, 0x2c, 0x5c, 0x7c, 0xd1, 0xb0, 0xf8, 0xb5, 0xff, 0xba, - 0x87, 0xe4, 0xed, 0xd4, 0x31, 0x62, 0xfe, 0x7e, 0xba, 0x86, 0x79, 0x62, - 0xa5, 0x13, 0xb8, 0x58, 0x04, 0x1b, 0xff, 0xcc, 0x0e, 0x0f, 0xf8, 0x5e, - 0xce, 0xbc, 0xb1, 0x5d, 0x2b, 0x3d, 0xfc, 0x67, 0xe5, 0x09, 0x8e, 0x43, - 0xb7, 0xc5, 0xd7, 0xee, 0xb8, 0x77, 0x8f, 0x58, 0xb9, 0x9d, 0x62, 0xff, - 0xef, 0xb3, 0xf8, 0x02, 0x22, 0x68, 0x2c, 0x5f, 0xf3, 0x13, 0x9f, 0xae, - 0x4c, 0x4b, 0x17, 0xd2, 0x42, 0xef, 0xd6, 0x2f, 0x8f, 0x3d, 0x41, 0x62, - 0xec, 0xe1, 0x88, 0xc8, 0xd9, 0x0f, 0xe7, 0x40, 0x27, 0xa9, 0x4d, 0x55, - 0x8b, 0x4a, 0x1b, 0xd7, 0x7b, 0xbf, 0x58, 0xbf, 0xdc, 0xfb, 0x6f, 0x24, - 0x35, 0x8b, 0x30, 0x0f, 0x47, 0xc3, 0xb7, 0xf3, 0x6c, 0x06, 0x21, 0xac, - 0x5f, 0xec, 0x3c, 0x50, 0x62, 0xd9, 0x62, 0xfb, 0xdf, 0x63, 0xac, 0x5f, - 0xfe, 0xc0, 0xba, 0x87, 0x39, 0x27, 0x6e, 0xbc, 0xb1, 0x52, 0x7e, 0x2e, - 0x47, 0x5b, 0x36, 0x04, 0x03, 0x8d, 0x88, 0xd8, 0x56, 0x6f, 0x0d, 0x6e, - 0xa1, 0x68, 0xe4, 0x71, 0x43, 0x43, 0x51, 0x94, 0x1e, 0x37, 0x0f, 0xc6, - 0x62, 0x04, 0x02, 0x4e, 0xe4, 0x24, 0x7d, 0x2d, 0x77, 0xb4, 0x76, 0x21, - 0x42, 0x12, 0x38, 0x9c, 0x32, 0xee, 0xe8, 0x53, 0x5f, 0x45, 0x99, 0xba, - 0xc5, 0xf6, 0x44, 0xe7, 0x58, 0xad, 0x1e, 0x38, 0x09, 0x2f, 0xfb, 0xff, - 0xc7, 0xea, 0x19, 0xa5, 0x8b, 0xef, 0xe7, 0x50, 0x58, 0xa9, 0x44, 0x03, - 0x11, 0x70, 0xea, 0xff, 0x78, 0x5b, 0x4f, 0xa4, 0x6b, 0x17, 0xbd, 0x84, - 0xb1, 0x7b, 0xed, 0x1e, 0xb1, 0x71, 0x79, 0x62, 0xfc, 0x28, 0x60, 0x38, + 0xc5, 0xb8, 0xe7, 0x99, 0xf3, 0x5b, 0xfb, 0xdd, 0xee, 0xff, 0x89, 0x62, + 0xdb, 0x61, 0xec, 0xf0, 0x9e, 0xce, 0x04, 0x72, 0x14, 0x2f, 0x2f, 0xbf, + 0x3d, 0xf5, 0x2c, 0x5e, 0x71, 0x75, 0xeb, 0x17, 0xf9, 0x8d, 0xe7, 0xbf, + 0x90, 0x58, 0xbb, 0xb8, 0x44, 0x7a, 0xe4, 0x45, 0x7f, 0x9b, 0x51, 0xc2, + 0xfb, 0xe9, 0x62, 0xa4, 0xf9, 0x84, 0x5f, 0x52, 0xa9, 0x64, 0x71, 0x94, + 0x6e, 0x59, 0xf8, 0x72, 0x5c, 0xe3, 0x58, 0xbc, 0x2e, 0xe0, 0xb1, 0x43, + 0x36, 0xdf, 0x17, 0xbf, 0xbb, 0xcf, 0x8b, 0xb0, 0x2c, 0x5b, 0xeb, 0x17, + 0xf1, 0xf9, 0xf9, 0x2f, 0x2c, 0x5f, 0x6a, 0x7d, 0xc5, 0x8b, 0xdb, 0x7c, + 0x4b, 0x17, 0xfe, 0xfb, 0x73, 0xf9, 0xd3, 0x3d, 0xc5, 0x8a, 0x93, 0xe0, + 0x61, 0xfa, 0x74, 0x68, 0xc4, 0x5d, 0xf8, 0x41, 0xdf, 0x9c, 0x5b, 0xbe, + 0xcb, 0x15, 0x04, 0xe5, 0x30, 0x87, 0x73, 0x1f, 0x43, 0x8e, 0x38, 0xd6, + 0xff, 0xe9, 0x2d, 0xdb, 0xcc, 0x69, 0x86, 0xca, 0xc5, 0xff, 0xe6, 0xf0, + 0x8c, 0xe7, 0xdc, 0x65, 0x31, 0xeb, 0x17, 0xf4, 0x9a, 0xde, 0x63, 0x56, + 0x2f, 0x7a, 0x43, 0x58, 0xac, 0x3c, 0xd6, 0x2f, 0xa3, 0x53, 0x02, 0x02, + 0x39, 0x42, 0x6e, 0xfc, 0x2f, 0x73, 0x3c, 0xb1, 0x77, 0xe2, 0x58, 0xbf, + 0x07, 0xee, 0x4f, 0x96, 0x2f, 0x6d, 0xc2, 0x58, 0xa9, 0x3e, 0x18, 0x0c, + 0xe8, 0xaa, 0xff, 0x1f, 0x37, 0x26, 0xcd, 0xd6, 0x2e, 0x14, 0x4b, 0x17, + 0x43, 0x92, 0x79, 0xa0, 0x34, 0xbe, 0x3f, 0x03, 0xe2, 0xc5, 0xf8, 0xb6, + 0x1c, 0xe9, 0x62, 0xff, 0xe1, 0x47, 0xfd, 0xcf, 0x31, 0xff, 0xcd, 0x96, + 0x2f, 0x6e, 0x2d, 0xd6, 0x2a, 0x53, 0x62, 0xed, 0xed, 0xcb, 0x58, 0x94, + 0x8a, 0x44, 0x99, 0x7f, 0xde, 0xf4, 0x9f, 0x30, 0x8d, 0x58, 0xbf, 0xfe, + 0xf7, 0xf3, 0xab, 0xd9, 0xf2, 0xcf, 0x7d, 0xd6, 0x2b, 0xb4, 0x45, 0x91, + 0xcd, 0xde, 0xe2, 0xc5, 0xf9, 0xbd, 0x09, 0x35, 0x62, 0xa0, 0x78, 0x24, + 0x31, 0x7f, 0xb0, 0x03, 0x13, 0x6a, 0x0b, 0x17, 0xe6, 0x2f, 0x40, 0x0b, + 0x15, 0x27, 0xfb, 0xb1, 0x08, 0x8d, 0x2f, 0xe6, 0x61, 0xf4, 0xc1, 0xac, + 0x58, 0x25, 0x8b, 0x9b, 0x8b, 0x17, 0xf8, 0xbd, 0xf6, 0x87, 0xdd, 0x62, + 0xf4, 0xf7, 0x05, 0x8b, 0x47, 0x39, 0xe8, 0xf8, 0xce, 0xcf, 0x1e, 0x89, + 0x2e, 0x34, 0x5c, 0xdb, 0xaa, 0x4c, 0xf2, 0xf6, 0x10, 0xd6, 0x29, 0xd3, + 0x11, 0xfc, 0x29, 0x58, 0xac, 0x22, 0x5b, 0xfd, 0x24, 0x6e, 0x85, 0x24, + 0xb1, 0x7f, 0x01, 0x8a, 0x0e, 0x75, 0x8b, 0xb7, 0x75, 0x8a, 0x95, 0x61, + 0x5b, 0x43, 0x84, 0x65, 0xfb, 0xc6, 0x80, 0xe8, 0x40, 0x33, 0x11, 0x6d, + 0xf8, 0x19, 0x81, 0x71, 0x62, 0xf8, 0xd2, 0x90, 0x96, 0x2f, 0xef, 0x71, + 0xbb, 0x0c, 0xeb, 0x15, 0xa3, 0xd5, 0xf9, 0x25, 0xff, 0xe2, 0xf4, 0x76, + 0x45, 0x06, 0xd6, 0xc3, 0x95, 0x8b, 0xfd, 0x30, 0x7f, 0x4f, 0xb8, 0xb1, + 0x7f, 0xb8, 0x23, 0xbf, 0x80, 0xcb, 0x17, 0x83, 0xfc, 0xac, 0x54, 0x0f, + 0x48, 0x06, 0x97, 0x0d, 0x96, 0x2e, 0x6e, 0xa5, 0x8a, 0x19, 0xb1, 0x61, + 0x7a, 0xfa, 0x3e, 0x0a, 0x10, 0xbe, 0x53, 0xbf, 0xa0, 0x1e, 0x7d, 0xbb, + 0x58, 0xbf, 0xff, 0xce, 0x42, 0x6f, 0x19, 0x83, 0x33, 0x20, 0xe6, 0x9a, + 0xcb, 0x17, 0xf3, 0xfb, 0xf8, 0x37, 0x58, 0xbe, 0x29, 0xce, 0xd6, 0x28, + 0xd3, 0xcf, 0xf1, 0x6d, 0x18, 0xac, 0x82, 0x5f, 0xb0, 0x89, 0xe3, 0x47, + 0x63, 0x4e, 0x18, 0x07, 0x0b, 0x2b, 0x79, 0x62, 0xfe, 0xd0, 0x02, 0x6f, + 0xf1, 0x62, 0xff, 0x8d, 0x62, 0xce, 0x85, 0x9c, 0x58, 0xbf, 0xba, 0x16, + 0x73, 0x09, 0x62, 0xfd, 0xdc, 0x1f, 0x09, 0x62, 0xd1, 0xeb, 0x15, 0x87, + 0xd7, 0xa2, 0xee, 0x14, 0x5e, 0x78, 0x4a, 0xc5, 0x98, 0xc3, 0xca, 0xe1, + 0x75, 0xb4, 0x6a, 0x62, 0xff, 0x87, 0x7d, 0xfe, 0x71, 0xe1, 0xc2, 0xcf, + 0xac, 0x5f, 0xff, 0xff, 0x75, 0x49, 0x7b, 0x8f, 0xbe, 0x11, 0x93, 0xd5, + 0xfc, 0xe1, 0x9e, 0x9e, 0xe0, 0xb1, 0x6d, 0x96, 0x2f, 0x42, 0x7b, 0x58, + 0xbf, 0xff, 0xb9, 0x9b, 0xb1, 0x00, 0xcd, 0x49, 0x0b, 0xd3, 0xf5, 0x8b, + 0x64, 0x47, 0xf5, 0xe1, 0xeb, 0xf7, 0x06, 0xf2, 0x4b, 0x15, 0x29, 0xcb, + 0x39, 0xa1, 0xe1, 0x0c, 0x50, 0x8d, 0xf1, 0x45, 0xf8, 0xb3, 0xa3, 0xf6, + 0xb1, 0x6d, 0x2c, 0x5f, 0xfb, 0xcf, 0x10, 0x4c, 0x39, 0xef, 0x8b, 0x15, + 0xa3, 0xfe, 0x62, 0xae, 0x09, 0x54, 0x6e, 0xb8, 0x3b, 0x22, 0x4f, 0x1a, + 0x3b, 0x47, 0x8c, 0x28, 0x68, 0x5f, 0x43, 0x8e, 0x4b, 0x17, 0xff, 0xdf, + 0x9d, 0x19, 0xf9, 0xd8, 0x85, 0xb0, 0xb8, 0xb1, 0x7d, 0x20, 0x63, 0xac, + 0x5d, 0x0e, 0x4a, 0x26, 0x06, 0x44, 0x4a, 0x97, 0x00, 0x0b, 0x17, 0xe1, + 0x03, 0xcf, 0xb2, 0xc5, 0xe0, 0x82, 0x09, 0x22, 0xfd, 0x9b, 0x8f, 0x34, + 0x91, 0x18, 0x68, 0x6f, 0xfb, 0xce, 0x5b, 0x66, 0xb2, 0x0b, 0x17, 0x43, + 0x84, 0x7e, 0xa1, 0x9e, 0x5a, 0x0b, 0x17, 0xfd, 0xec, 0xd6, 0xd3, 0xd1, + 0x8e, 0xb1, 0x52, 0x9c, 0x73, 0x9d, 0x1c, 0x61, 0xa1, 0x81, 0xe2, 0xe0, + 0xc4, 0xaf, 0xf0, 0xff, 0x25, 0x38, 0x12, 0xc5, 0xff, 0x7d, 0x8f, 0xf9, + 0x1b, 0xca, 0xc5, 0xff, 0xfb, 0xc6, 0xb7, 0x35, 0x3e, 0xfe, 0x1f, 0x35, + 0x8b, 0x15, 0x04, 0x60, 0xf8, 0xcc, 0x23, 0x8b, 0xf1, 0x99, 0xf9, 0x1a, + 0xc5, 0xfb, 0xa8, 0x47, 0xc1, 0xac, 0x5f, 0xfe, 0x37, 0xf3, 0x9d, 0xfb, + 0x0e, 0xc4, 0x05, 0x8b, 0x85, 0x1b, 0x2c, 0x5f, 0xfd, 0xcf, 0x1b, 0x25, + 0x0c, 0xd8, 0x50, 0x58, 0xae, 0xb4, 0xf9, 0x3c, 0x3b, 0x7f, 0xfd, 0xd0, + 0x85, 0x0c, 0xe8, 0xfe, 0x9d, 0xf3, 0xeb, 0x17, 0xff, 0xf0, 0x8b, 0xdc, + 0x92, 0x37, 0xee, 0x67, 0xf0, 0x0c, 0xb1, 0x7e, 0xce, 0x86, 0x40, 0xeb, + 0x16, 0xf4, 0xa3, 0x72, 0x0a, 0x9f, 0x5c, 0xa9, 0x54, 0xdb, 0xb1, 0x8e, + 0x14, 0xb9, 0x63, 0x42, 0xbc, 0x51, 0x81, 0xdf, 0xff, 0xc1, 0x37, 0x7c, + 0xc3, 0xe7, 0x7e, 0x92, 0xf4, 0x76, 0x2c, 0x5f, 0xf4, 0x08, 0x40, 0x33, + 0x73, 0x81, 0x62, 0xa0, 0x89, 0xde, 0xd8, 0x2e, 0x93, 0x56, 0x2f, 0x14, + 0xc1, 0x62, 0xff, 0x49, 0x48, 0x21, 0xf7, 0x58, 0xbc, 0xec, 0x1a, 0xc5, + 0x0c, 0xf3, 0xce, 0x65, 0x7f, 0x4c, 0x4e, 0x79, 0x89, 0x62, 0xf7, 0x9f, + 0x65, 0x8b, 0xce, 0x0c, 0x58, 0xbf, 0xf4, 0x08, 0x4d, 0xcf, 0xe0, 0x19, + 0x62, 0xdd, 0xc0, 0xf6, 0xb0, 0x72, 0x8d, 0x45, 0x03, 0x3c, 0x54, 0xa7, + 0x77, 0xb1, 0x20, 0xc6, 0x1d, 0xaf, 0xc4, 0x42, 0x86, 0x7d, 0xe3, 0xe1, + 0x2c, 0x5f, 0xf7, 0x70, 0x29, 0xce, 0x61, 0x2c, 0x5f, 0x86, 0x4c, 0xd1, + 0x2c, 0x5f, 0xff, 0xff, 0x3f, 0x89, 0x80, 0xc4, 0x01, 0xfe, 0x43, 0x29, + 0xe7, 0x32, 0x19, 0xf5, 0x8a, 0x74, 0x51, 0xb1, 0x45, 0x6e, 0x8f, 0xcf, + 0xc3, 0x6e, 0xfe, 0xf8, 0x98, 0x11, 0xd8, 0xb1, 0x7f, 0xfd, 0x81, 0x7a, + 0x70, 0xb7, 0x9f, 0x4f, 0x61, 0x2c, 0x5b, 0x16, 0x2b, 0x63, 0xe3, 0xe2, + 0x95, 0x0d, 0x16, 0xfc, 0x84, 0xa5, 0xdf, 0xfa, 0xc5, 0xff, 0xf0, 0x3b, + 0xf3, 0x37, 0x83, 0xf7, 0x04, 0x50, 0x58, 0xbc, 0x09, 0xd2, 0xc5, 0x49, + 0xf8, 0x32, 0x9d, 0xff, 0xfe, 0xcd, 0x69, 0xe4, 0x06, 0x6f, 0xf7, 0x90, + 0x14, 0x81, 0x62, 0xa3, 0x75, 0x65, 0x33, 0x18, 0xc3, 0xc3, 0x81, 0x8a, + 0x39, 0x08, 0x8f, 0x10, 0x5d, 0xee, 0xd6, 0x2f, 0xff, 0xcf, 0xe9, 0x39, + 0x31, 0xbf, 0x76, 0xd6, 0xa5, 0x62, 0x8e, 0x7d, 0xbd, 0x78, 0xcd, 0xf4, + 0xfb, 0x36, 0x58, 0xbe, 0x80, 0x01, 0x2b, 0x17, 0xfa, 0x4c, 0xf6, 0x73, + 0x92, 0xb1, 0x7a, 0x70, 0x96, 0x2f, 0x86, 0x2f, 0x71, 0x62, 0xc3, 0x01, + 0xbf, 0x0c, 0x6e, 0xd1, 0xcb, 0x17, 0xfa, 0x7c, 0xfd, 0x24, 0xb7, 0x58, + 0xbe, 0x9c, 0x28, 0x39, 0xe5, 0x70, 0x56, 0x8d, 0x4d, 0x87, 0xb2, 0x3d, + 0x11, 0x93, 0x9f, 0x9c, 0xaf, 0x7c, 0x3e, 0x2c, 0x5f, 0x19, 0xf0, 0xc6, + 0xb1, 0x76, 0x72, 0x07, 0x8b, 0xf1, 0xfa, 0x74, 0x5f, 0x14, 0x24, 0x6e, + 0xce, 0xd6, 0x2f, 0x49, 0x1a, 0xb1, 0x7b, 0x4f, 0xe5, 0x8b, 0xfc, 0x59, + 0xee, 0x0b, 0x50, 0x58, 0xa7, 0x3d, 0x13, 0x8e, 0xdf, 0x7f, 0xcd, 0xf5, + 0x8a, 0x93, 0xc4, 0x72, 0x1a, 0xd9, 0xd7, 0x8e, 0x42, 0x70, 0xb0, 0x72, + 0x84, 0x72, 0x31, 0xa3, 0x63, 0xd5, 0xde, 0x5f, 0x1f, 0x72, 0x85, 0x1e, + 0x35, 0x58, 0xf3, 0x68, 0xa3, 0xec, 0xd4, 0xbe, 0xa3, 0xcb, 0x91, 0xfc, + 0xe4, 0x60, 0x25, 0x43, 0x14, 0xb8, 0x9e, 0x4a, 0xb9, 0xf4, 0xb8, 0x51, + 0x43, 0x63, 0xa4, 0xa4, 0x68, 0xe2, 0x60, 0xc6, 0x3a, 0xa1, 0x65, 0x76, + 0xa5, 0x62, 0xd1, 0xba, 0xc5, 0xff, 0x66, 0x8b, 0x3a, 0x36, 0xa0, 0xb1, + 0x76, 0x79, 0x62, 0xe2, 0x65, 0x8b, 0xc0, 0x7d, 0xd6, 0x2f, 0x14, 0xc1, + 0x60, 0xc2, 0xfa, 0xb0, 0xf8, 0x1c, 0xd2, 0xc6, 0x62, 0x25, 0xcd, 0x77, + 0xb7, 0x16, 0x2e, 0xee, 0x0b, 0x14, 0xe7, 0xaa, 0x02, 0xa8, 0xe1, 0x2b, + 0xfc, 0x69, 0xa6, 0x9b, 0xd7, 0x58, 0xe8, 0xdd, 0x62, 0xf6, 0xa3, 0x4e, + 0xa5, 0x8b, 0x9a, 0x0b, 0x17, 0xe2, 0xf6, 0x00, 0xeb, 0x17, 0xda, 0x79, + 0xf2, 0xc5, 0xfd, 0xc2, 0xc8, 0xa4, 0xeb, 0x14, 0x03, 0xd0, 0xf1, 0x15, + 0x1a, 0x99, 0x0b, 0xa5, 0x1c, 0x99, 0x85, 0xc4, 0xf1, 0x74, 0xf9, 0x62, + 0xf8, 0x0c, 0x17, 0x96, 0x2f, 0xff, 0x70, 0x84, 0xc1, 0xf9, 0xc7, 0x38, + 0x4b, 0x17, 0xf0, 0x5f, 0x79, 0xd4, 0xac, 0x56, 0x1f, 0xbb, 0x24, 0xdf, + 0x76, 0x10, 0x89, 0x62, 0xfe, 0x11, 0xf8, 0x2d, 0x6c, 0xb1, 0x7e, 0x7e, + 0x92, 0x5e, 0x58, 0xa3, 0x17, 0x10, 0x63, 0x71, 0x79, 0x17, 0x1c, 0x64, + 0xc6, 0xc6, 0xa5, 0xda, 0x53, 0x8b, 0xea, 0x13, 0x6c, 0x40, 0x44, 0xbc, + 0x31, 0xbf, 0xfe, 0xfe, 0x0c, 0xc1, 0xfd, 0xcd, 0x33, 0xb8, 0x3a, 0xc5, + 0xff, 0xff, 0x75, 0xe6, 0x16, 0x6f, 0x1f, 0xfc, 0xfb, 0x1c, 0x66, 0x19, + 0xf8, 0xe5, 0x8b, 0xff, 0x69, 0xf9, 0x00, 0xff, 0x25, 0x2b, 0x17, 0x9e, + 0x4e, 0xb1, 0x73, 0xfd, 0x62, 0xb4, 0x6c, 0xe3, 0x87, 0x2f, 0xff, 0xde, + 0x34, 0x53, 0x83, 0xfe, 0x73, 0xb8, 0x4f, 0xd6, 0x2b, 0xae, 0xd3, 0x65, + 0xd3, 0xb9, 0xdc, 0x88, 0x92, 0xff, 0x18, 0x59, 0xd0, 0xb3, 0x8b, 0x14, + 0xb1, 0x7d, 0xcf, 0x3e, 0xcb, 0x17, 0x39, 0x6e, 0x6c, 0x22, 0x0c, 0xbf, + 0xa1, 0xc1, 0x4e, 0x8d, 0x58, 0xbc, 0x2d, 0x6c, 0xb1, 0x5d, 0x9e, 0x78, + 0x0c, 0x2f, 0xf6, 0x74, 0xe6, 0x49, 0x76, 0xb1, 0x7f, 0x73, 0xd1, 0xd9, + 0xa9, 0x58, 0xbd, 0x10, 0xb4, 0xb1, 0x73, 0x41, 0x62, 0xfd, 0xbb, 0x94, + 0x42, 0x58, 0xbf, 0xb9, 0x3d, 0xf5, 0xd8, 0xce, 0xb1, 0x7f, 0x1f, 0x0b, + 0xd1, 0xd8, 0xb1, 0x7f, 0xff, 0xb3, 0xc2, 0x01, 0xda, 0x0c, 0x39, 0x26, + 0xd3, 0x41, 0x62, 0xfe, 0x26, 0x0b, 0xd9, 0xfc, 0x44, 0x79, 0x18, 0x5f, + 0xec, 0xff, 0xc5, 0xe6, 0x25, 0x8b, 0x9c, 0x6b, 0x17, 0xf7, 0xf7, 0x6d, + 0x34, 0x16, 0x2d, 0xbc, 0x0f, 0x1b, 0x05, 0xef, 0x3c, 0x5c, 0x58, 0xa9, + 0x3c, 0x63, 0x94, 0x5f, 0xff, 0xd9, 0xa8, 0x13, 0x7d, 0xbb, 0x35, 0x86, + 0xf2, 0x75, 0x8b, 0xff, 0xf6, 0xb0, 0x9e, 0x61, 0x9d, 0xf9, 0x80, 0x1f, + 0x6b, 0x15, 0x28, 0xb2, 0xc5, 0xbb, 0xff, 0xbc, 0xff, 0x63, 0xc7, 0x0b, + 0xef, 0xa5, 0x8b, 0xf9, 0xbc, 0x79, 0xcf, 0x2c, 0x53, 0x1f, 0xa8, 0x92, + 0x2f, 0xec, 0xd7, 0xe6, 0x1c, 0x58, 0xbb, 0x0d, 0x58, 0xbd, 0x3d, 0xf1, + 0x62, 0xa4, 0xf9, 0x34, 0x5d, 0xf1, 0x8b, 0xfa, 0x4a, 0x0c, 0xfb, 0x2c, + 0x5b, 0x8b, 0x17, 0xf4, 0x81, 0xfe, 0xe7, 0x58, 0xa9, 0x37, 0xee, 0x25, + 0x78, 0xb3, 0x75, 0x8a, 0x35, 0x15, 0x1f, 0x6c, 0xe0, 0xfd, 0x0d, 0x73, + 0xfb, 0x71, 0x7e, 0xca, 0xa2, 0x86, 0x36, 0x90, 0xcf, 0x0b, 0xff, 0xc3, + 0x4c, 0xa1, 0x2d, 0xc8, 0x42, 0xfa, 0x1a, 0xd7, 0xef, 0xb1, 0xdf, 0x8b, + 0x17, 0xef, 0x4e, 0x16, 0xeb, 0x15, 0xb9, 0xe8, 0x70, 0xa2, 0xa5, 0x79, + 0xbf, 0x0c, 0x5e, 0x74, 0x75, 0xa1, 0xfd, 0x7e, 0x7f, 0xb1, 0xdd, 0x62, + 0xd2, 0xb1, 0x70, 0x7e, 0x58, 0xa9, 0x35, 0x40, 0x11, 0xbc, 0xc4, 0x05, + 0x8b, 0xdc, 0x9d, 0x96, 0x28, 0xc4, 0x55, 0xe2, 0x8e, 0xe4, 0x1c, 0x1c, + 0xbd, 0xd3, 0x06, 0xb1, 0x70, 0x67, 0x58, 0xad, 0x8f, 0xda, 0x23, 0xe1, + 0x0f, 0xdc, 0x08, 0x96, 0x2b, 0x47, 0x94, 0x46, 0x37, 0x37, 0xd6, 0x2f, + 0xd9, 0xd3, 0x3d, 0xc5, 0x8b, 0xe8, 0xa0, 0xc4, 0xb1, 0x5a, 0x3e, 0x4f, + 0x8b, 0xf0, 0xaa, 0xff, 0x75, 0x6b, 0x3a, 0x88, 0x41, 0x2c, 0x56, 0xc7, + 0xd4, 0x11, 0x7d, 0xee, 0xa7, 0x1a, 0xc5, 0x61, 0xe2, 0x31, 0x25, 0x18, + 0xcc, 0xad, 0x98, 0xee, 0xb6, 0x44, 0xc6, 0x57, 0x7c, 0xd1, 0x1f, 0xe7, + 0xa9, 0x1a, 0x3b, 0x42, 0x8c, 0xce, 0xf0, 0x5d, 0xca, 0xc5, 0xfc, 0x7d, + 0xcc, 0xc3, 0xf1, 0x62, 0xdf, 0x58, 0xbd, 0x09, 0x3a, 0xc5, 0xfb, 0x35, + 0xde, 0x44, 0xb1, 0x6d, 0xbb, 0x3c, 0x7f, 0x8e, 0xdf, 0xff, 0xff, 0x03, + 0x99, 0x84, 0x68, 0x7a, 0x29, 0xcf, 0xc6, 0x70, 0xb3, 0x63, 0xe1, 0xd6, + 0x2f, 0x14, 0x8d, 0x62, 0xed, 0x62, 0xc5, 0xdc, 0x75, 0x8a, 0xd8, 0xd7, + 0x68, 0x5e, 0xe0, 0xe0, 0xb1, 0x7e, 0x14, 0x27, 0x69, 0x58, 0xbe, 0x92, + 0x0c, 0xeb, 0x15, 0xb2, 0x34, 0x71, 0x28, 0xe4, 0x5c, 0x19, 0x0c, 0xa6, + 0xb1, 0x39, 0xdf, 0x46, 0xa5, 0x70, 0x38, 0xb1, 0x7c, 0x61, 0x4e, 0xeb, + 0x17, 0xcd, 0xf9, 0x0d, 0x62, 0xb0, 0xf7, 0xfe, 0x31, 0xd0, 0x92, 0xfa, + 0x42, 0xc1, 0xac, 0x5f, 0xff, 0x0b, 0xb8, 0x70, 0x7f, 0x9d, 0x0d, 0x98, + 0x25, 0x8b, 0xa3, 0x7e, 0xb8, 0xb1, 0x51, 0xa9, 0x5b, 0x8c, 0xac, 0xe4, + 0x78, 0xef, 0x08, 0x8d, 0x18, 0x11, 0x18, 0x6a, 0x77, 0x67, 0x96, 0x2e, + 0x3b, 0xac, 0x50, 0xcd, 0x71, 0x0b, 0xdf, 0x05, 0x3d, 0xf1, 0x62, 0xff, + 0x16, 0x77, 0x09, 0xcf, 0x2c, 0x5f, 0xe1, 0xb7, 0x80, 0x19, 0x41, 0x62, + 0xf7, 0x83, 0xc5, 0x8b, 0xa7, 0x65, 0x8a, 0x93, 0xeb, 0x63, 0x5e, 0x0f, + 0x5f, 0x17, 0xb9, 0x2b, 0x17, 0x87, 0x30, 0x58, 0xbf, 0x45, 0x09, 0xef, + 0xcb, 0x17, 0xf6, 0xff, 0x7e, 0x8d, 0xa5, 0x8b, 0x4e, 0xc7, 0xb9, 0x85, + 0x77, 0xdb, 0x39, 0x79, 0x62, 0xec, 0xfa, 0xc5, 0x4a, 0x3f, 0x18, 0x88, + 0x9e, 0x44, 0x4f, 0x1c, 0x47, 0x61, 0xac, 0x52, 0xc6, 0x16, 0x57, 0x7b, + 0xaf, 0x58, 0xbf, 0x4f, 0xbe, 0xfd, 0x16, 0x2a, 0x57, 0xcb, 0x36, 0x1f, + 0x84, 0xba, 0x2c, 0x85, 0x17, 0xc8, 0x00, 0x4b, 0xc8, 0x4f, 0x7a, 0x32, + 0x9e, 0x8b, 0x91, 0xc3, 0x5d, 0x43, 0xb6, 0x8d, 0x4b, 0x17, 0x30, 0x4b, + 0x17, 0xc0, 0x3b, 0xf1, 0x62, 0xa2, 0x37, 0x7a, 0x18, 0xbf, 0xc2, 0x60, + 0xdc, 0x9a, 0x25, 0x8b, 0xa7, 0xa2, 0xc5, 0xf9, 0xf0, 0x9b, 0xb5, 0x8a, + 0xc4, 0x4b, 0x44, 0x45, 0xd0, 0xd3, 0xa8, 0x66, 0xff, 0x37, 0x25, 0xbc, + 0xdc, 0x58, 0xbd, 0xf1, 0x04, 0xb1, 0x7c, 0xc6, 0x40, 0x96, 0x2e, 0x6d, + 0x96, 0x28, 0xd3, 0x77, 0xf2, 0x3b, 0x84, 0x05, 0x8b, 0xc2, 0x7d, 0xd6, + 0x2f, 0xbc, 0xf3, 0xda, 0xc5, 0x40, 0xf6, 0x7e, 0x31, 0xc1, 0xeb, 0x85, + 0xba, 0xc5, 0xff, 0x4e, 0xc7, 0x60, 0x01, 0xfe, 0xb1, 0x50, 0x44, 0x10, + 0x0b, 0xf8, 0x33, 0x7b, 0xd8, 0x1a, 0xc5, 0xfe, 0x68, 0x9f, 0xb9, 0xe4, + 0xac, 0x5f, 0xc7, 0x17, 0x3d, 0x9e, 0x58, 0xbf, 0xc1, 0x36, 0xf8, 0x58, + 0x35, 0x8b, 0xf3, 0x7f, 0xb8, 0x71, 0x62, 0xa5, 0x11, 0xbc, 0x2f, 0x11, + 0xa5, 0xf7, 0x01, 0x31, 0x2c, 0x5e, 0x29, 0x82, 0xc5, 0xfc, 0xf0, 0xfc, + 0x91, 0xab, 0x15, 0x87, 0xdc, 0xc4, 0x9c, 0x1c, 0xbe, 0xe1, 0x9a, 0x95, + 0x8b, 0xe6, 0x1c, 0x9d, 0x62, 0xfe, 0x73, 0xbc, 0x42, 0x0d, 0x62, 0xbb, + 0x3f, 0x68, 0x89, 0x3e, 0x45, 0x77, 0x7c, 0x58, 0xbf, 0xb7, 0xc3, 0x8b, + 0x9e, 0x58, 0xa9, 0x3f, 0xa7, 0x31, 0x10, 0xcd, 0xf8, 0x42, 0x0d, 0xe3, + 0xd6, 0x2f, 0x42, 0x78, 0xb1, 0x71, 0x1d, 0x62, 0xc2, 0x58, 0xa8, 0x1e, + 0x30, 0xc7, 0x40, 0x2f, 0x78, 0x62, 0xdd, 0x62, 0xf8, 0x65, 0x30, 0x58, + 0xa3, 0x11, 0xc7, 0x2e, 0x6e, 0x5e, 0xc3, 0xf7, 0xd1, 0x69, 0xe3, 0x96, + 0x2f, 0xe7, 0xde, 0x4e, 0x2f, 0x2c, 0x5f, 0xff, 0x4f, 0xbf, 0x26, 0x8e, + 0x75, 0x13, 0x77, 0x05, 0x8b, 0x9c, 0x6b, 0x17, 0xc2, 0x3b, 0xf1, 0x62, + 0xfb, 0x90, 0x62, 0x58, 0xbc, 0xf8, 0x35, 0x8a, 0xc3, 0xf8, 0x88, 0x5f, + 0x84, 0x7e, 0x22, 0xbf, 0x3f, 0x7e, 0x93, 0xac, 0x5f, 0xfc, 0x67, 0x7e, + 0x29, 0xc3, 0x33, 0xbf, 0x2c, 0x56, 0x1f, 0x88, 0x65, 0x37, 0xfd, 0x3f, + 0x79, 0x8a, 0x29, 0xdd, 0x62, 0xf9, 0x8e, 0xfe, 0x58, 0xa8, 0xd1, 0x92, + 0x2b, 0x30, 0xe9, 0xd9, 0x08, 0x66, 0x46, 0xad, 0x77, 0x0f, 0xd7, 0x30, + 0x8f, 0x1e, 0x8a, 0x18, 0x3a, 0x84, 0xe9, 0xe3, 0x1d, 0xfc, 0x62, 0x0c, + 0x76, 0x44, 0xfc, 0x2f, 0xf4, 0x32, 0xc5, 0x0a, 0xde, 0x84, 0x41, 0x1d, + 0xdb, 0xaf, 0x58, 0xbf, 0x37, 0xa1, 0x9d, 0xac, 0x57, 0x5e, 0x78, 0x04, + 0x2f, 0x7f, 0x9e, 0x26, 0x27, 0xef, 0x8b, 0x17, 0x66, 0xeb, 0x17, 0xf8, + 0xbd, 0xc2, 0x9f, 0x71, 0x62, 0xff, 0x7c, 0xb1, 0xc1, 0x20, 0x58, 0xbf, + 0x3f, 0x4c, 0x2e, 0x2c, 0x5f, 0x47, 0x66, 0xa5, 0x62, 0xff, 0xfe, 0x9f, + 0x8b, 0xb9, 0xf6, 0xff, 0x9d, 0x0b, 0x05, 0x12, 0xc5, 0x62, 0x62, 0x4e, + 0x67, 0xa3, 0x23, 0x94, 0xfc, 0x96, 0xed, 0x32, 0xc5, 0xd1, 0xd8, 0xb1, + 0x7d, 0x9f, 0x14, 0x7a, 0xc5, 0x61, 0xe0, 0x78, 0x6a, 0xff, 0xdb, 0x7d, + 0xcf, 0x31, 0xff, 0xcd, 0x96, 0x2f, 0xee, 0x16, 0x78, 0xd9, 0x58, 0xad, + 0x91, 0xd5, 0xda, 0xbe, 0x88, 0x7c, 0x89, 0x7f, 0x6b, 0x3f, 0xf1, 0x79, + 0x62, 0xfe, 0x8c, 0xe7, 0xa7, 0xdc, 0x5c, 0x81, 0xa5, 0xf1, 0x4e, 0x69, + 0x42, 0xb7, 0x3e, 0x0f, 0x9f, 0xdf, 0xd9, 0xad, 0x84, 0xc3, 0x54, 0x81, + 0xa4, 0x61, 0xa3, 0xad, 0x93, 0x01, 0x84, 0x2c, 0xaf, 0xfb, 0xdc, 0x6d, + 0x0f, 0x4d, 0x05, 0x8a, 0xd1, 0xf2, 0x70, 0xaa, 0xf8, 0xbf, 0x9d, 0xac, + 0x54, 0xa7, 0xd2, 0xf1, 0xd2, 0x31, 0x15, 0xdd, 0x43, 0x58, 0xbf, 0xb8, + 0xe4, 0xda, 0x35, 0x62, 0xbe, 0x79, 0x3d, 0x06, 0xef, 0xb7, 0x73, 0xca, + 0xc5, 0xff, 0xa4, 0xd2, 0xce, 0xfc, 0xdf, 0x95, 0x8a, 0x63, 0xe2, 0xf1, + 0x1d, 0xfd, 0x0f, 0x93, 0x77, 0xe5, 0x8a, 0xdc, 0xf4, 0x08, 0x86, 0xf8, + 0x32, 0x6d, 0x96, 0x2f, 0xdc, 0x7d, 0x38, 0x16, 0x2b, 0x0f, 0xbb, 0x84, + 0x5d, 0x44, 0x97, 0xef, 0x7e, 0x75, 0xb2, 0xc5, 0xdd, 0xba, 0xc5, 0xc7, + 0x09, 0x62, 0xf7, 0xdf, 0xa2, 0xc5, 0xd3, 0xe3, 0x0d, 0xc6, 0x0c, 0xdf, + 0xfb, 0x6f, 0x7e, 0x7f, 0x9d, 0x1a, 0x0b, 0x17, 0x8f, 0x3b, 0xac, 0x5f, + 0x10, 0x05, 0xc5, 0x8b, 0x9a, 0x0b, 0x15, 0x87, 0xb1, 0xa1, 0xe6, 0x23, + 0xbf, 0x77, 0x17, 0xdb, 0xb5, 0x8b, 0xd9, 0x9c, 0x58, 0xbe, 0x86, 0x77, + 0xe5, 0x8b, 0x81, 0xc5, 0x8a, 0x34, 0xf6, 0x3b, 0x1c, 0xd1, 0x25, 0x4a, + 0x6f, 0x8f, 0x09, 0xa6, 0x2d, 0x14, 0x21, 0x2f, 0x99, 0x81, 0xc5, 0x8b, + 0x98, 0xd5, 0x8b, 0x9b, 0x68, 0x8d, 0xd1, 0x11, 0x5f, 0xee, 0x73, 0x34, + 0x3f, 0xe2, 0xc5, 0xf7, 0x06, 0xf1, 0x2c, 0x50, 0xcf, 0x60, 0xe6, 0x97, + 0xf8, 0x2f, 0xe7, 0x70, 0xc2, 0x58, 0xbd, 0xf9, 0xd2, 0xc5, 0xc0, 0xed, + 0x62, 0xff, 0xb8, 0xc5, 0x31, 0x38, 0xf6, 0x58, 0xb0, 0x16, 0x2f, 0xf4, + 0x1c, 0xf3, 0xf0, 0xc6, 0xb1, 0x7f, 0xfa, 0x70, 0xbb, 0xf6, 0x69, 0xf6, + 0x63, 0xac, 0x5c, 0x17, 0xd6, 0x2e, 0xcf, 0x98, 0x8e, 0x4d, 0xce, 0xb8, + 0x25, 0xe3, 0x50, 0x92, 0xae, 0xce, 0x2c, 0x51, 0x89, 0xb6, 0x7a, 0x1f, + 0xb1, 0xcb, 0x15, 0x04, 0xf0, 0xc2, 0x8e, 0x26, 0xa5, 0x52, 0x2e, 0x11, + 0x34, 0x7f, 0x17, 0xc3, 0x03, 0x79, 0x62, 0xf8, 0xe4, 0xc1, 0x2c, 0x5f, + 0xc1, 0xfb, 0x0d, 0x9e, 0x2c, 0x50, 0xcf, 0x4c, 0x88, 0xef, 0x74, 0x68, + 0x96, 0x2b, 0x11, 0x6e, 0xee, 0xdf, 0x21, 0xbf, 0xec, 0x87, 0xf0, 0x9b, + 0x46, 0xac, 0x5c, 0x70, 0x96, 0x2a, 0x30, 0xf4, 0xa0, 0x73, 0x7c, 0x7f, + 0x67, 0xd6, 0x2f, 0x6d, 0x3d, 0x4b, 0x15, 0x27, 0x89, 0xc2, 0x3a, 0x31, + 0x9b, 0x9b, 0x1a, 0x1a, 0x4c, 0x65, 0x50, 0x96, 0x38, 0x37, 0xdc, 0x8d, + 0x11, 0xcc, 0x62, 0x2a, 0xd2, 0x87, 0xe3, 0xa8, 0x67, 0xf2, 0x95, 0x95, + 0xc8, 0x76, 0x0a, 0x10, 0x1d, 0x4d, 0x37, 0xe7, 0xde, 0x4f, 0x2b, 0x17, + 0xd9, 0x3d, 0xf9, 0x62, 0xff, 0x77, 0xac, 0x7f, 0xc8, 0xd6, 0x2f, 0xbf, + 0x83, 0xc5, 0x8b, 0xfe, 0xdd, 0xf9, 0x82, 0xdd, 0x89, 0x62, 0xe1, 0xca, + 0xc5, 0xfa, 0x2f, 0xb0, 0x25, 0x62, 0xec, 0x82, 0xc5, 0xfe, 0x7d, 0xdc, + 0x71, 0xce, 0x05, 0x8b, 0xfe, 0xfc, 0xb6, 0x86, 0x53, 0x05, 0x8b, 0xf8, + 0xf8, 0x5e, 0x8e, 0xc5, 0x8b, 0xdf, 0x93, 0x98, 0x7d, 0x18, 0x71, 0x50, + 0x54, 0x08, 0x32, 0x8c, 0x23, 0x39, 0xa7, 0xc8, 0x98, 0xe8, 0x85, 0xf8, + 0x53, 0xe1, 0x71, 0x42, 0x7e, 0xec, 0x0d, 0x62, 0xfd, 0xf6, 0x29, 0x8f, + 0x58, 0xbf, 0xc6, 0xb7, 0xb8, 0x77, 0xf2, 0xc5, 0xfe, 0x6f, 0x36, 0x0d, + 0xfa, 0x2c, 0x5f, 0x03, 0xf2, 0x35, 0x8b, 0xfb, 0xee, 0x11, 0x48, 0xd6, + 0x2f, 0xfa, 0x40, 0x79, 0xc2, 0xf7, 0x16, 0x2f, 0xfb, 0x98, 0x17, 0xd8, + 0xef, 0xc5, 0x8b, 0xf6, 0x6b, 0x61, 0x71, 0x62, 0x8d, 0x4d, 0x5b, 0x73, + 0x57, 0x34, 0x88, 0x8f, 0xe5, 0xdc, 0x38, 0xe8, 0x75, 0x7f, 0x6e, 0xfb, + 0x67, 0x7e, 0x58, 0xbf, 0x3f, 0x70, 0x72, 0x58, 0xbc, 0xff, 0xc5, 0x8b, + 0xfb, 0xcc, 0x73, 0xc9, 0xd6, 0x2b, 0x0f, 0xcb, 0x72, 0x8e, 0xc7, 0x2f, + 0x61, 0x79, 0x62, 0x96, 0x28, 0xd4, 0x7d, 0x9e, 0x14, 0x7e, 0x30, 0x08, + 0x72, 0xff, 0x85, 0xb1, 0x99, 0xef, 0xcf, 0x96, 0x2f, 0xdc, 0x10, 0x33, + 0xeb, 0x17, 0x3c, 0x4b, 0x15, 0x28, 0xc1, 0xdd, 0x13, 0xc7, 0x9d, 0x45, + 0x37, 0xd0, 0x9d, 0x6c, 0xb1, 0x7b, 0x82, 0x25, 0x8b, 0xff, 0x08, 0xd3, + 0x8b, 0xdf, 0x91, 0x75, 0xeb, 0x15, 0xd9, 0xf2, 0x10, 0xed, 0xf1, 0xe7, + 0x46, 0xac, 0x5f, 0x60, 0x00, 0xcb, 0x17, 0x83, 0xfb, 0x2c, 0x56, 0x1f, + 0x21, 0x12, 0x47, 0x11, 0x56, 0xc8, 0xb6, 0x0a, 0x10, 0xd7, 0xc1, 0xc9, + 0x6e, 0xb1, 0x4b, 0x17, 0xb9, 0xf9, 0x58, 0x39, 0x32, 0xfd, 0x0c, 0xfb, + 0x9d, 0x62, 0xa0, 0x88, 0x31, 0x98, 0x11, 0x5d, 0xfb, 0x6c, 0x16, 0xb6, + 0x58, 0xbf, 0x16, 0x82, 0x6d, 0x96, 0x2f, 0xf7, 0xfa, 0x60, 0xf9, 0x81, + 0xac, 0x54, 0xa6, 0xd1, 0x90, 0xad, 0x72, 0xf6, 0x2b, 0x11, 0x55, 0xf9, + 0x9f, 0xc5, 0x2b, 0x17, 0xe8, 0x9f, 0x77, 0x1a, 0xc5, 0xf6, 0xff, 0x90, + 0x96, 0x2f, 0xd9, 0xee, 0x39, 0xd6, 0x2e, 0x11, 0x2c, 0x5c, 0x2f, 0x2c, + 0x58, 0x6b, 0x17, 0xee, 0x0e, 0x70, 0x6b, 0x15, 0xb1, 0xe9, 0x47, 0x8c, + 0x30, 0x95, 0xe2, 0xcd, 0x96, 0x2a, 0x59, 0x1a, 0x70, 0x84, 0x78, 0xc6, + 0x32, 0x38, 0x07, 0x94, 0x4b, 0x12, 0x06, 0xa5, 0x53, 0x1d, 0x31, 0x89, + 0xba, 0xf2, 0xa2, 0x25, 0xe1, 0x40, 0x9a, 0x43, 0x32, 0xbf, 0xe9, 0x3c, + 0xf9, 0xcb, 0x20, 0xb1, 0x68, 0x2c, 0x5f, 0x70, 0x52, 0x05, 0x8b, 0xdf, + 0x73, 0xac, 0x5b, 0xa9, 0x62, 0xb7, 0x36, 0x42, 0x1d, 0xad, 0x23, 0x03, + 0xe6, 0xe0, 0x12, 0x25, 0x5b, 0xb0, 0x96, 0x2f, 0xdc, 0x0f, 0x9f, 0x12, + 0xc5, 0x7c, 0xf0, 0x7c, 0x2d, 0x7f, 0xfb, 0x4f, 0x27, 0xc3, 0x33, 0xef, + 0x87, 0x58, 0xbf, 0x4f, 0x57, 0x47, 0x3a, 0xc5, 0xfb, 0xb9, 0xf6, 0xa5, + 0x62, 0xf9, 0xf9, 0x2c, 0xb1, 0x46, 0x23, 0x02, 0x24, 0x92, 0x2d, 0xe1, + 0x4d, 0xfe, 0xc2, 0xce, 0xfd, 0x03, 0xac, 0x5d, 0xe9, 0x58, 0xa9, 0x3c, + 0xb6, 0x34, 0xbf, 0xe6, 0x80, 0xdc, 0x5d, 0x7b, 0xe9, 0x62, 0xfd, 0x84, + 0x52, 0x35, 0x8b, 0xcd, 0xf9, 0x58, 0xbf, 0x89, 0xa0, 0xfd, 0xc1, 0x62, + 0xbe, 0x79, 0x41, 0x8e, 0x5d, 0xcf, 0x2c, 0x5f, 0xd3, 0xb1, 0xda, 0x29, + 0x58, 0xa5, 0x8b, 0x41, 0x62, 0xb8, 0x5f, 0x08, 0x32, 0xf8, 0x3e, 0xa9, + 0xed, 0x62, 0xda, 0x58, 0xa8, 0x23, 0x88, 0x64, 0x71, 0x0c, 0x01, 0x34, + 0x88, 0x04, 0x51, 0x7f, 0xfc, 0xc6, 0xfa, 0x74, 0x0d, 0x4f, 0x89, 0x80, + 0xb1, 0x7f, 0x6e, 0x3f, 0x89, 0xb8, 0xb1, 0x7f, 0xfb, 0xf2, 0xe5, 0x3e, + 0x7d, 0x3f, 0x84, 0xb1, 0x52, 0x7f, 0x0e, 0x61, 0x73, 0x1a, 0xb1, 0x7f, + 0x6c, 0x59, 0xed, 0x4a, 0xc5, 0xfe, 0x7f, 0x07, 0xa9, 0xfc, 0xac, 0x5f, + 0x6e, 0x1f, 0xb8, 0xb1, 0x7f, 0x16, 0x03, 0x0a, 0x0b, 0x17, 0xff, 0x06, + 0x4d, 0xee, 0x3f, 0x7f, 0x70, 0x96, 0x2f, 0xf1, 0xe7, 0x79, 0x27, 0x89, + 0x62, 0xc6, 0x98, 0x7f, 0x78, 0x8f, 0x58, 0x8d, 0x06, 0x85, 0x3d, 0xed, + 0x49, 0xab, 0x15, 0x29, 0xce, 0x40, 0xb9, 0xcd, 0x0a, 0x1e, 0xdc, 0x26, + 0xa9, 0x5e, 0xd8, 0xc7, 0xd7, 0x87, 0x16, 0xa1, 0x12, 0x72, 0x0f, 0x9f, + 0x34, 0x6a, 0x44, 0xaf, 0xc8, 0x64, 0x78, 0x80, 0x51, 0xda, 0x5f, 0xfe, + 0x2c, 0x1e, 0xa4, 0x7f, 0x60, 0xf3, 0x65, 0x8b, 0xf7, 0x27, 0xa3, 0x7d, + 0x62, 0xf3, 0x76, 0x05, 0x8b, 0x74, 0x58, 0xa8, 0x1b, 0x2e, 0x0f, 0x5c, + 0xfe, 0x58, 0xbf, 0xf8, 0xbe, 0xdc, 0x2c, 0x34, 0xdc, 0x8f, 0x58, 0xbf, + 0x84, 0x3c, 0xf4, 0xc4, 0xb1, 0x58, 0x7e, 0xfb, 0xa4, 0x5f, 0xb0, 0xb6, + 0x7d, 0x2c, 0x5c, 0xf2, 0xb1, 0x50, 0x37, 0xc3, 0x28, 0xbc, 0x4c, 0x35, + 0x8b, 0xfd, 0x22, 0xdf, 0x0f, 0x3b, 0xac, 0x53, 0x9e, 0x89, 0x0e, 0x5c, + 0x1f, 0x96, 0x2f, 0xdc, 0x9d, 0x7a, 0x56, 0x28, 0x67, 0xc3, 0xa2, 0x0e, + 0x0c, 0xdc, 0xfd, 0x7a, 0xc5, 0xd0, 0x0d, 0x62, 0xf8, 0x2c, 0x83, 0xac, + 0x5e, 0xc7, 0x35, 0x62, 0xf6, 0x66, 0xcb, 0x16, 0x1a, 0xc5, 0xe6, 0x6d, + 0x2c, 0x54, 0x9a, 0xe8, 0x84, 0xa9, 0x91, 0x58, 0x44, 0x7e, 0x1d, 0x0d, + 0x2e, 0xf6, 0x3f, 0x45, 0x8b, 0xd0, 0x0c, 0xeb, 0x15, 0xf3, 0x7a, 0xc3, + 0xd7, 0xc1, 0xc0, 0x5a, 0x58, 0xbf, 0xb8, 0xfa, 0xc1, 0x69, 0x62, 0xf0, + 0xdf, 0x4b, 0x17, 0xff, 0xf4, 0x46, 0x3e, 0xe2, 0xd7, 0x04, 0x61, 0xdf, + 0xdf, 0x75, 0x8b, 0xa4, 0xd5, 0x8a, 0x93, 0xf9, 0x76, 0x1a, 0x95, 0xd3, + 0xb8, 0x25, 0xe2, 0xe1, 0xa4, 0x3b, 0xc2, 0x3b, 0xb6, 0x07, 0x86, 0x9c, + 0x45, 0xfa, 0x1c, 0x3c, 0x31, 0x7e, 0xf3, 0xc2, 0x0f, 0x12, 0x88, 0xbb, + 0xaa, 0x12, 0xd7, 0x86, 0x7e, 0x2c, 0x5b, 0xcb, 0x17, 0xef, 0x7c, 0x26, + 0xd9, 0x62, 0xb4, 0x6f, 0x43, 0x12, 0xb7, 0x5a, 0xa9, 0x3f, 0x0a, 0x81, + 0xe3, 0x1c, 0x8a, 0xfd, 0xb7, 0x70, 0x91, 0xac, 0x5f, 0x13, 0xf7, 0x05, + 0x8b, 0xfa, 0x27, 0xe0, 0x84, 0x75, 0x8a, 0xc3, 0xd3, 0x62, 0x3b, 0xff, + 0x9b, 0x5f, 0x9e, 0x9f, 0x70, 0x8b, 0x16, 0x2f, 0xfa, 0x77, 0xfc, 0xf4, + 0xd0, 0x7c, 0x58, 0xbd, 0xac, 0xc5, 0x8a, 0x8d, 0xd3, 0x3e, 0x77, 0xef, + 0x90, 0x12, 0x37, 0x0f, 0xaf, 0x07, 0x31, 0x2c, 0x5e, 0x29, 0x02, 0xc5, + 0xe7, 0xcf, 0xac, 0x5b, 0x79, 0x37, 0x1a, 0x1c, 0xbf, 0xfc, 0x58, 0x3f, + 0xcf, 0x4e, 0x47, 0xbf, 0x7e, 0x58, 0xad, 0x23, 0x38, 0x95, 0xfa, 0x13, + 0xde, 0x18, 0x40, 0x58, 0xbf, 0xfd, 0xfc, 0x93, 0xeb, 0x3a, 0xbe, 0xf2, + 0x75, 0x8b, 0xfe, 0x14, 0x20, 0x7f, 0x7a, 0x4e, 0xb1, 0x68, 0x7d, 0x10, + 0xfe, 0x4c, 0xbf, 0x4f, 0xdc, 0x1c, 0x58, 0xbf, 0xb9, 0x3b, 0x67, 0x06, + 0xb1, 0x5a, 0x3d, 0x7f, 0x14, 0x5d, 0xfc, 0x58, 0xbf, 0xfe, 0xfc, 0x8f, + 0x37, 0x33, 0x0b, 0x07, 0xf9, 0x58, 0xbf, 0xed, 0x4f, 0xdf, 0xa6, 0xa6, + 0x0b, 0x17, 0xfe, 0xed, 0x82, 0x33, 0xc5, 0x27, 0xe2, 0xc5, 0xff, 0xfe, + 0x04, 0xf7, 0x0e, 0x0f, 0x30, 0xb3, 0x7f, 0xb8, 0xbc, 0xb1, 0x7f, 0xec, + 0x2c, 0xce, 0x19, 0x0e, 0x1d, 0x62, 0xff, 0xe9, 0xee, 0x4b, 0x69, 0x83, + 0x96, 0x2c, 0x5f, 0xfb, 0x3d, 0x80, 0x33, 0x3e, 0x52, 0xb1, 0x4e, 0x8c, + 0x03, 0x9f, 0x92, 0x1d, 0xff, 0x9a, 0x7b, 0x81, 0x9c, 0xec, 0x72, 0xb1, + 0x7f, 0xd2, 0x5e, 0xe6, 0x13, 0x1a, 0xb1, 0x7e, 0xc1, 0xfd, 0xfc, 0xb1, + 0x7f, 0x36, 0xc5, 0x9b, 0x09, 0x62, 0x86, 0xbb, 0x35, 0x91, 0x8e, 0x6e, + 0x63, 0xdc, 0x29, 0x9e, 0x10, 0x11, 0xe4, 0x51, 0x0b, 0xe9, 0x43, 0xe7, + 0x60, 0x42, 0xe4, 0x64, 0x5e, 0x2e, 0xe8, 0x84, 0x11, 0xc4, 0x71, 0x45, + 0xee, 0x14, 0xac, 0x5f, 0x60, 0x46, 0x41, 0x62, 0xf9, 0xf9, 0x83, 0x30, + 0xf0, 0x76, 0x1c, 0xbc, 0x6c, 0xe9, 0x62, 0xf8, 0xec, 0x31, 0x2c, 0x5e, + 0x8a, 0x4e, 0xb1, 0x7d, 0xf9, 0x3b, 0xac, 0x5f, 0xd3, 0xf7, 0xe4, 0x86, + 0xb1, 0x58, 0x7d, 0xc2, 0x1e, 0x0c, 0x8a, 0xf8, 0x04, 0xd0, 0x58, 0xbf, + 0xbe, 0xe7, 0x66, 0xea, 0x58, 0xbe, 0x21, 0x31, 0xab, 0x17, 0xe2, 0x9d, + 0xc5, 0xc5, 0x8a, 0x81, 0xe6, 0x70, 0x8e, 0xf0, 0xbb, 0xe2, 0xc5, 0xfe, + 0x11, 0x79, 0xfe, 0xe7, 0x58, 0xbc, 0x59, 0xd4, 0xb1, 0x78, 0xf9, 0xd1, + 0x62, 0x8c, 0x44, 0x84, 0x07, 0xf0, 0xcd, 0x87, 0xee, 0x7d, 0x96, 0x2c, + 0x4b, 0x15, 0xa3, 0x52, 0x18, 0xc5, 0x8e, 0xb1, 0x7b, 0x59, 0xda, 0xc5, + 0xf1, 0xc1, 0xd8, 0x16, 0x2e, 0x1c, 0xc0, 0xf5, 0x40, 0x24, 0x18, 0xf5, + 0xff, 0xe8, 0x79, 0xf6, 0x61, 0xcc, 0x0b, 0x0e, 0xb1, 0x68, 0xe5, 0x8b, + 0x8a, 0x25, 0x8b, 0xf3, 0x79, 0x88, 0x0b, 0x15, 0x18, 0xaf, 0x8e, 0x47, + 0x87, 0x09, 0x13, 0x4b, 0xf7, 0x22, 0xed, 0xf2, 0x28, 0x59, 0x69, 0x94, + 0xee, 0xec, 0x77, 0xd7, 0xa5, 0x08, 0x56, 0x38, 0x62, 0xff, 0x9c, 0xd9, + 0xd1, 0x63, 0x9a, 0xb1, 0x78, 0x7a, 0xe8, 0xb1, 0x76, 0xfb, 0x2c, 0x5e, + 0xd4, 0x50, 0x58, 0xbe, 0xef, 0x04, 0x75, 0x8a, 0x73, 0xc3, 0xd0, 0xfd, + 0xff, 0xe3, 0x5b, 0xb3, 0x39, 0x3a, 0x68, 0x3f, 0xd6, 0x2b, 0x0f, 0xb8, + 0xd2, 0x1b, 0xe2, 0x6f, 0x71, 0x62, 0x8e, 0x78, 0x9d, 0x08, 0xaf, 0x9a, + 0x20, 0xe2, 0x58, 0xa9, 0x3c, 0xa6, 0x24, 0xb9, 0xe2, 0x58, 0xbf, 0xf6, + 0x6c, 0x67, 0xe6, 0x27, 0xee, 0x0b, 0x17, 0xf4, 0x9a, 0x32, 0x9e, 0xd6, + 0x2e, 0x73, 0xac, 0x54, 0xa2, 0x27, 0x48, 0x7d, 0x0b, 0xef, 0xa4, 0xa7, + 0x75, 0x8b, 0xd3, 0xa3, 0x56, 0x2b, 0x73, 0xc0, 0x22, 0x2b, 0xe9, 0x2c, + 0x35, 0x62, 0xf7, 0x24, 0xd5, 0x8b, 0xdf, 0x6e, 0xd6, 0x2f, 0xf3, 0x67, + 0x7e, 0xf3, 0x7d, 0x62, 0xff, 0xe1, 0x0f, 0x35, 0x30, 0x71, 0xc9, 0x2c, + 0x5f, 0xf8, 0x98, 0xdc, 0xd6, 0xb0, 0x5d, 0x7a, 0xc5, 0xff, 0x13, 0x6d, + 0x3a, 0xd3, 0x41, 0x62, 0xfe, 0xe4, 0x50, 0x92, 0x82, 0xc5, 0xff, 0x9f, + 0xda, 0x14, 0x3b, 0x86, 0x79, 0x62, 0xa0, 0x99, 0x81, 0xd0, 0xfe, 0x89, + 0xe3, 0x9e, 0x85, 0xf7, 0xf1, 0xbe, 0xc2, 0x6f, 0x2c, 0x5f, 0xfd, 0xff, + 0xb4, 0x0c, 0xe7, 0x1c, 0x2e, 0x2c, 0x54, 0x9f, 0xb6, 0x17, 0x5f, 0xee, + 0x73, 0x08, 0x11, 0xd8, 0xb1, 0x7f, 0xf3, 0xf2, 0x0f, 0xe0, 0xf5, 0x3f, + 0x95, 0x8b, 0x1f, 0x0f, 0xef, 0xe6, 0xd7, 0xff, 0xda, 0x6e, 0x16, 0x6c, + 0x1c, 0x05, 0x2e, 0x4b, 0x15, 0x29, 0xea, 0xc2, 0x18, 0x6d, 0x09, 0xb1, + 0x13, 0xd7, 0x6a, 0xee, 0xe2, 0x1e, 0xf8, 0xf7, 0xa5, 0x9c, 0xdf, 0xff, + 0xe7, 0xe0, 0x30, 0xc7, 0xe9, 0x3f, 0x79, 0x8a, 0x29, 0xdd, 0x62, 0xf7, + 0x9f, 0x65, 0x8b, 0xfd, 0xf7, 0xd1, 0x3f, 0xb8, 0xb1, 0x7b, 0xb9, 0x89, + 0x62, 0xc0, 0xdc, 0xf4, 0x98, 0xce, 0xf1, 0x4e, 0xeb, 0x17, 0xfb, 0x39, + 0x17, 0xdc, 0x2f, 0x2c, 0x5f, 0x9a, 0x13, 0x1e, 0x75, 0x8b, 0xff, 0x3c, + 0x5f, 0x9d, 0x77, 0x09, 0xd2, 0xc5, 0xfd, 0x09, 0x8f, 0x3c, 0xc1, 0x62, + 0xf9, 0xbf, 0x91, 0xeb, 0x17, 0xfd, 0xdb, 0x47, 0x9f, 0x45, 0x30, 0x58, + 0xbf, 0xfd, 0xef, 0xcf, 0x4e, 0x13, 0x7a, 0x27, 0xe8, 0xb1, 0x7f, 0xe7, + 0x3e, 0x6b, 0x26, 0x27, 0x3a, 0xc5, 0x62, 0x23, 0x74, 0x9f, 0x52, 0x9f, + 0x26, 0xc6, 0xc3, 0x2b, 0x89, 0x07, 0x46, 0x3f, 0x25, 0xe4, 0x32, 0xaf, + 0xb3, 0xd2, 0x35, 0x8b, 0xe8, 0xb5, 0x3d, 0xac, 0x5f, 0xfc, 0x4d, 0xdf, + 0x39, 0x9a, 0x1f, 0xf1, 0x62, 0xff, 0xf4, 0xee, 0x66, 0xb1, 0xc5, 0xd7, + 0xe7, 0x56, 0x2c, 0x53, 0xa2, 0x60, 0x91, 0x68, 0xc6, 0x4e, 0x14, 0x21, + 0x43, 0x8e, 0x3b, 0x91, 0x3c, 0xbd, 0xdd, 0x24, 0x1d, 0x95, 0x9c, 0x08, + 0xa3, 0x92, 0x80, 0x42, 0x6b, 0x0c, 0x8b, 0xaa, 0x17, 0xb6, 0xeb, 0x16, + 0x2f, 0x74, 0x03, 0xac, 0x52, 0xc5, 0xfc, 0xdd, 0x9c, 0x98, 0x25, 0x8a, + 0x93, 0x77, 0xa0, 0xca, 0x58, 0xbd, 0x98, 0x05, 0x8b, 0xdf, 0x7f, 0x2c, + 0x5b, 0xa7, 0x5a, 0x8d, 0x6e, 0xb8, 0x2f, 0x8b, 0x4e, 0x40, 0x41, 0x81, + 0x8e, 0x5d, 0xdf, 0x16, 0x2f, 0x3f, 0x31, 0x62, 0xc0, 0x58, 0xbf, 0x6b, + 0x61, 0x30, 0xd6, 0x2d, 0x1c, 0xb1, 0x50, 0x3d, 0x1c, 0x12, 0x0c, 0xaa, + 0xf4, 0xf5, 0x71, 0x62, 0xe6, 0x3a, 0xc5, 0x4a, 0x3b, 0x36, 0x19, 0x35, + 0xb7, 0x72, 0xfd, 0x10, 0x5f, 0xb5, 0xac, 0x8f, 0x89, 0x62, 0xf3, 0x10, + 0x96, 0x2e, 0x1e, 0x2c, 0x5b, 0x8b, 0x14, 0x33, 0x52, 0x10, 0xbd, 0x4b, + 0x7c, 0x13, 0x08, 0x73, 0x8e, 0x14, 0x39, 0x3d, 0xf5, 0xbc, 0x66, 0x0f, + 0x38, 0x3b, 0x1f, 0x0c, 0xb8, 0x8e, 0x4e, 0x41, 0xf8, 0xd6, 0x5a, 0x93, + 0xc4, 0x08, 0xe9, 0xc5, 0x1a, 0xa7, 0x44, 0xc0, 0x8b, 0x43, 0x45, 0xbd, + 0xec, 0xfa, 0xc5, 0xff, 0x19, 0xbf, 0xdb, 0x42, 0x98, 0x2c, 0x5f, 0xee, + 0xae, 0x72, 0x4f, 0x3e, 0x58, 0xb4, 0x72, 0xc5, 0x83, 0x58, 0xa7, 0x35, + 0x0c, 0x2b, 0x52, 0x7f, 0xc7, 0x5f, 0xbd, 0x0e, 0xb6, 0x56, 0x2f, 0xce, + 0x5e, 0x90, 0x2c, 0x5f, 0x8e, 0x2d, 0xf0, 0xeb, 0x17, 0xed, 0x1e, 0x41, + 0xc5, 0x8a, 0x31, 0x13, 0x92, 0x44, 0xe4, 0xec, 0x55, 0x7f, 0x8a, 0x05, + 0x87, 0x9d, 0xd6, 0x2e, 0xc8, 0xe5, 0x8a, 0xc3, 0xcd, 0xf9, 0x9d, 0xf8, + 0x7f, 0x13, 0x71, 0x62, 0xfd, 0xf7, 0xe9, 0x83, 0x58, 0xbb, 0xce, 0xb1, + 0x7b, 0x0f, 0x2b, 0x14, 0x61, 0xb3, 0xc1, 0x7b, 0x98, 0xeb, 0x17, 0xcf, + 0xbb, 0x69, 0x62, 0xff, 0x16, 0x10, 0xa1, 0x9c, 0x58, 0xbf, 0x72, 0x77, + 0xc0, 0x2c, 0x5f, 0x9c, 0x62, 0xf7, 0x16, 0x2e, 0xf7, 0x0c, 0x3d, 0x26, + 0x29, 0xa9, 0x45, 0x90, 0xa1, 0x09, 0x7f, 0x37, 0x60, 0x92, 0xdd, 0x62, + 0xb6, 0x4d, 0x0a, 0x02, 0xe3, 0x86, 0xae, 0x89, 0xee, 0x33, 0xb5, 0x8b, + 0xf3, 0x1d, 0xfa, 0xb1, 0x62, 0xfe, 0xcf, 0xb7, 0x9a, 0x25, 0x8b, 0xa7, + 0xb5, 0x8a, 0xec, 0xf1, 0xbc, 0x5d, 0x79, 0xb5, 0x12, 0xc5, 0x62, 0x2c, + 0x59, 0xc3, 0x84, 0x77, 0xf8, 0x45, 0x9e, 0x26, 0x3a, 0xc5, 0xff, 0xff, + 0x67, 0xdb, 0xab, 0x4d, 0xb1, 0x67, 0x53, 0xe0, 0x5d, 0xc3, 0x8b, 0x15, + 0x88, 0xa0, 0xd1, 0x95, 0xa2, 0x58, 0xbd, 0x25, 0xe5, 0x8b, 0xdf, 0xc0, + 0x2c, 0x53, 0x9e, 0x64, 0x78, 0x9f, 0x87, 0x2f, 0xf7, 0x26, 0x13, 0xb4, + 0xec, 0xb1, 0x76, 0x1a, 0xb1, 0x7f, 0xfb, 0x0d, 0xfb, 0xf3, 0xf9, 0xd2, + 0x73, 0xb5, 0x8a, 0x94, 0x65, 0xb9, 0x8f, 0xcd, 0x48, 0x62, 0xd2, 0xb1, + 0x7c, 0xc1, 0xc8, 0x4b, 0x17, 0xff, 0x7f, 0x37, 0xd6, 0xa7, 0xdc, 0xfb, + 0xac, 0x5c, 0xc7, 0x58, 0xa9, 0x44, 0x97, 0x62, 0x3e, 0x24, 0x0d, 0x1a, + 0xed, 0x62, 0xc5, 0xc1, 0x4a, 0xc5, 0xfb, 0xa8, 0x3d, 0x7d, 0x96, 0x2f, + 0xfc, 0x3c, 0x3e, 0xa5, 0xcb, 0x25, 0x62, 0xe9, 0xdd, 0x62, 0x9c, 0xf5, + 0x3c, 0x79, 0x7c, 0x1f, 0x27, 0x65, 0x8a, 0x93, 0xc6, 0xe1, 0x0d, 0xd1, + 0xbf, 0x52, 0xc5, 0xe8, 0xb8, 0xcb, 0x15, 0x29, 0x9f, 0x60, 0xc0, 0x21, + 0x8e, 0x44, 0x22, 0x20, 0xbe, 0x7d, 0x4c, 0x16, 0x2f, 0xb6, 0x3c, 0xf1, + 0x62, 0xb6, 0x3c, 0x6c, 0x22, 0xbf, 0xf4, 0xf9, 0x85, 0xe6, 0xef, 0x3c, + 0xb1, 0x7f, 0xda, 0x32, 0x47, 0xfc, 0xde, 0x56, 0x2f, 0xfe, 0x9c, 0x1b, + 0xf0, 0xb3, 0xa3, 0x92, 0xc5, 0x7d, 0x17, 0xac, 0x7e, 0x23, 0xbb, 0xe6, + 0x97, 0x8e, 0x58, 0xbf, 0x70, 0x5b, 0x1d, 0xd6, 0x2b, 0x73, 0xce, 0xec, + 0x92, 0xfc, 0xdf, 0x3b, 0xf1, 0x62, 0xf1, 0x67, 0x16, 0x2f, 0xff, 0xfd, + 0x3f, 0x73, 0xc6, 0x45, 0x06, 0xd0, 0x7f, 0x7e, 0xf9, 0xbb, 0xec, 0xb1, + 0x5d, 0x6b, 0x31, 0x9e, 0x47, 0x76, 0x85, 0xd4, 0x21, 0x7a, 0x38, 0x44, + 0x61, 0x09, 0xa5, 0x3b, 0xae, 0xbc, 0x6c, 0x71, 0xe8, 0x91, 0x43, 0x2f, + 0x50, 0xce, 0xfc, 0x67, 0x2d, 0x0c, 0xc0, 0x1f, 0x14, 0x6a, 0xbc, 0x84, + 0x9f, 0xa1, 0xbe, 0x27, 0xde, 0x84, 0x81, 0x94, 0x75, 0x0e, 0x5f, 0xef, + 0x43, 0x23, 0xd8, 0x80, 0xb1, 0x7b, 0x5c, 0x12, 0xc5, 0xb8, 0xb1, 0x7f, + 0xb7, 0x03, 0x01, 0xcb, 0x75, 0x8a, 0xf9, 0xe3, 0x90, 0x95, 0x62, 0x21, + 0x9d, 0x96, 0xff, 0x6c, 0x3c, 0xf7, 0x1b, 0xb5, 0x8b, 0xc0, 0xf7, 0x16, + 0x2f, 0xfe, 0x3b, 0x77, 0x18, 0x4c, 0x32, 0x6f, 0xac, 0x5b, 0x8b, 0x14, + 0xb1, 0x5e, 0x2f, 0xba, 0x09, 0x51, 0x88, 0xa5, 0xc1, 0xe0, 0x32, 0xd2, + 0xc5, 0xd0, 0xeb, 0x16, 0x2c, 0x63, 0x9a, 0x96, 0x0c, 0xbe, 0xc1, 0x6b, + 0x65, 0x8b, 0xe8, 0x70, 0x67, 0x58, 0xbf, 0x0f, 0x06, 0xd0, 0x58, 0xa7, + 0x3f, 0x06, 0x24, 0x11, 0x25, 0xff, 0xd9, 0xd3, 0x07, 0x84, 0x28, 0x67, + 0x16, 0x2f, 0xda, 0x9f, 0x86, 0x35, 0x8a, 0xd1, 0xf7, 0xb2, 0x2d, 0x80, + 0xb1, 0x76, 0xd2, 0xb1, 0x7e, 0xc1, 0xfd, 0xf6, 0x58, 0xb4, 0xec, 0x7a, + 0x6e, 0x24, 0x43, 0x17, 0xc1, 0x36, 0x71, 0x62, 0xfe, 0x1c, 0x80, 0xb3, + 0xb5, 0x8b, 0xfe, 0x81, 0xda, 0x1e, 0xe4, 0x9a, 0xb1, 0x77, 0xdd, 0x62, + 0xa5, 0x14, 0x78, 0x46, 0xc5, 0xde, 0x3b, 0xbd, 0x25, 0xba, 0xc5, 0xcf, + 0xb2, 0xc5, 0x49, 0xb5, 0xf8, 0xed, 0xee, 0x39, 0x2c, 0x58, 0x0b, 0x17, + 0xf4, 0x27, 0x5a, 0x90, 0x96, 0x2d, 0xda, 0xc5, 0xdb, 0x99, 0x87, 0x85, + 0xc2, 0xfa, 0xd2, 0x20, 0xc9, 0x52, 0xff, 0x07, 0x09, 0xe8, 0xe4, 0x05, + 0x8b, 0xe6, 0xea, 0xc2, 0x58, 0xbe, 0xe3, 0x76, 0xeb, 0x15, 0x89, 0x9f, + 0x34, 0x27, 0xc8, 0x8b, 0x86, 0xde, 0x24, 0xbf, 0xfc, 0x00, 0xfc, 0xf0, + 0x7d, 0x00, 0xef, 0xc5, 0x8a, 0x1a, 0xf7, 0x9e, 0x42, 0xf3, 0x72, 0x17, + 0x86, 0xdc, 0x7a, 0xc9, 0xe1, 0x2c, 0xd0, 0x9c, 0x03, 0xa1, 0x43, 0x5b, + 0x8d, 0xe2, 0x8d, 0x7b, 0xa2, 0x6d, 0xd0, 0xfa, 0xc5, 0xf7, 0x36, 0x17, + 0x16, 0x2e, 0xda, 0x0b, 0x17, 0x9f, 0xee, 0xb1, 0x71, 0xe5, 0x62, 0xe8, + 0xdc, 0x6b, 0x15, 0x28, 0xa6, 0xc1, 0x8e, 0xc9, 0x7c, 0x32, 0x21, 0xc8, + 0xe1, 0x7b, 0xff, 0xb6, 0xdf, 0xee, 0x1e, 0x8d, 0xce, 0xfc, 0xb1, 0x7d, + 0x9d, 0xc2, 0x56, 0x2f, 0x3f, 0xe5, 0x62, 0xf0, 0x9b, 0x8b, 0x15, 0x88, + 0xa7, 0xfa, 0x5f, 0x42, 0x30, 0xc7, 0x2f, 0x79, 0xf6, 0x58, 0xbf, 0xe7, + 0x36, 0x47, 0x3d, 0x33, 0xeb, 0x17, 0xff, 0x89, 0x8d, 0xfe, 0x78, 0x0e, + 0x50, 0xe2, 0xc5, 0xfb, 0x0a, 0x3a, 0x4d, 0x58, 0xbe, 0x20, 0x1f, 0xcb, + 0x17, 0xf7, 0xdc, 0xcd, 0xb0, 0x25, 0x8a, 0x93, 0xd4, 0xe1, 0x1d, 0xfe, + 0x70, 0xbb, 0x87, 0x33, 0x75, 0x8b, 0xfa, 0x01, 0x80, 0x13, 0xda, 0xc5, + 0xec, 0x0b, 0x75, 0x8a, 0x94, 0xc9, 0xdd, 0xff, 0xe4, 0x2c, 0x6e, 0x46, + 0x37, 0xe9, 0xee, 0x1c, 0x95, 0x8b, 0xfe, 0x17, 0x0c, 0x18, 0x9b, 0x50, + 0x58, 0xac, 0x3e, 0x52, 0x29, 0xbf, 0x85, 0xc9, 0x88, 0x5a, 0x58, 0xbc, + 0x2c, 0xed, 0x62, 0xfe, 0xce, 0xc1, 0x9e, 0xe2, 0xc5, 0xfa, 0x4b, 0xb8, + 0x71, 0x63, 0xe6, 0xbe, 0xbe, 0x8b, 0x6f, 0x18, 0x09, 0x36, 0xf7, 0xdf, + 0x75, 0x8b, 0xde, 0xc3, 0xac, 0x5f, 0x39, 0xbf, 0x75, 0x8b, 0x64, 0x9e, + 0x07, 0xc7, 0x6a, 0x08, 0x84, 0xf2, 0xf5, 0x99, 0x62, 0xe9, 0x1a, 0xc5, + 0xc7, 0xd7, 0x66, 0xa3, 0x42, 0x37, 0xf4, 0x81, 0x88, 0x58, 0xb1, 0x58, + 0x7b, 0x40, 0x2e, 0xbf, 0x77, 0xcf, 0x3e, 0xcb, 0x17, 0xdd, 0xec, 0x2e, + 0x2c, 0x5f, 0x8b, 0x6e, 0x3f, 0x6b, 0x15, 0x27, 0xa0, 0x22, 0x6b, 0xff, + 0xa7, 0x60, 0x9b, 0xbe, 0x60, 0xdf, 0x8b, 0x15, 0x28, 0xe3, 0x83, 0xd9, + 0x10, 0xdb, 0xcb, 0x17, 0xa4, 0xb6, 0x58, 0xbf, 0x61, 0xbe, 0x7d, 0x96, + 0x2f, 0xf3, 0xc4, 0x61, 0x4f, 0xb8, 0xb1, 0x74, 0x06, 0xb1, 0x76, 0x76, + 0xb1, 0x58, 0x6c, 0x00, 0x31, 0x7a, 0x4b, 0xcb, 0x15, 0x28, 0xfa, 0x18, + 0x97, 0x63, 0xba, 0x2a, 0x03, 0x2f, 0x42, 0x0b, 0xa3, 0xa5, 0x62, 0xfe, + 0xe0, 0xa0, 0x66, 0x12, 0xc5, 0x39, 0xe4, 0xf8, 0x6a, 0xff, 0xfe, 0x87, + 0x0b, 0x22, 0x33, 0x7f, 0xce, 0xe6, 0xe9, 0x82, 0x58, 0xbd, 0x8f, 0xb2, + 0xc5, 0xd3, 0xb7, 0x67, 0xfe, 0x4c, 0x54, 0xc8, 0xce, 0x14, 0x28, 0x2f, + 0xff, 0xd3, 0xa0, 0x67, 0x08, 0x4d, 0x0f, 0x89, 0xb6, 0x58, 0xbe, 0x68, + 0x76, 0x05, 0x8b, 0xda, 0xc6, 0x58, 0xbf, 0x81, 0x27, 0x7d, 0x44, 0xb1, + 0x6e, 0x8b, 0x16, 0x29, 0x3c, 0x3c, 0x2f, 0xbf, 0x7b, 0x18, 0xb7, 0x58, + 0xaf, 0xa6, 0x4c, 0x4a, 0xdc, 0x24, 0xf2, 0xff, 0x51, 0x2d, 0xff, 0xe9, + 0x06, 0xb5, 0x21, 0x19, 0xee, 0x66, 0xcb, 0x17, 0xff, 0x03, 0x8f, 0xd8, + 0x43, 0xd1, 0x30, 0x4b, 0x17, 0x49, 0xd6, 0x2b, 0x0f, 0x7f, 0xb4, 0x8b, + 0xff, 0xc3, 0xfc, 0xf7, 0x02, 0xc3, 0xe7, 0x7e, 0x58, 0xbf, 0x1f, 0x3f, + 0x84, 0xb1, 0x4e, 0x7e, 0x6c, 0x99, 0x7f, 0xa0, 0xe4, 0x29, 0x23, 0x56, + 0x2f, 0xf7, 0xdf, 0x82, 0x3c, 0xba, 0xc5, 0xf3, 0x47, 0x31, 0xab, 0x17, + 0x77, 0xed, 0xcf, 0x67, 0xe6, 0x77, 0xf6, 0x1b, 0x3c, 0x03, 0x2c, 0x56, + 0x1e, 0xf0, 0x46, 0x17, 0xf9, 0xa0, 0x3c, 0xc0, 0x71, 0x62, 0x9c, 0xf5, + 0x44, 0x45, 0x7f, 0xee, 0x9f, 0x68, 0x19, 0xef, 0xb1, 0xab, 0x17, 0xf8, + 0x18, 0x51, 0x4e, 0x69, 0x62, 0xb0, 0xfd, 0xd9, 0x12, 0xe6, 0x25, 0x8b, + 0x9b, 0xa9, 0x62, 0xb4, 0x6c, 0x3e, 0x2d, 0x7e, 0x9f, 0x7f, 0x3b, 0x58, + 0xb1, 0xf0, 0xf2, 0x9c, 0x86, 0xff, 0xdd, 0xc3, 0xf2, 0x76, 0xee, 0x18, + 0xb1, 0x7f, 0x45, 0x9f, 0x9e, 0xf8, 0xb1, 0x7f, 0x3f, 0x7d, 0xc3, 0x3c, + 0xb1, 0x52, 0x8c, 0x7c, 0x26, 0x64, 0x10, 0x18, 0x5f, 0xfe, 0x60, 0x70, + 0x7f, 0xc2, 0xf6, 0x77, 0xe5, 0x8a, 0xed, 0x5d, 0xef, 0xe3, 0x3f, 0x28, + 0x4c, 0x72, 0x36, 0x1f, 0x1d, 0x5f, 0xbb, 0xe1, 0xde, 0x3d, 0x62, 0xe6, + 0x75, 0x8b, 0xff, 0xbe, 0xcf, 0xe0, 0x08, 0x89, 0xa0, 0xb1, 0x7f, 0xcc, + 0x4e, 0x7e, 0xf9, 0x31, 0x2c, 0x5f, 0x49, 0x0b, 0xaf, 0x58, 0xbe, 0x3c, + 0xf7, 0x05, 0x8b, 0xb3, 0x86, 0x23, 0x23, 0x64, 0x3f, 0x9d, 0x00, 0x9e, + 0xa5, 0x35, 0x56, 0x2d, 0x28, 0x6f, 0x5d, 0xee, 0xbd, 0x62, 0xff, 0x73, + 0xed, 0xbc, 0x90, 0xd6, 0x2c, 0xc0, 0x3d, 0x1f, 0x0e, 0xdf, 0xcd, 0xb0, + 0x18, 0x86, 0xb1, 0x7f, 0xb0, 0xf1, 0x41, 0x8b, 0x65, 0x8b, 0xef, 0x7d, + 0x8e, 0xb1, 0x7f, 0xfb, 0x02, 0xee, 0x1c, 0xe4, 0x9d, 0xbb, 0xf2, 0xc5, + 0x49, 0xf8, 0xb9, 0x1d, 0x6c, 0xd9, 0x16, 0xc0, 0xec, 0x71, 0xb8, 0x9b, + 0x0a, 0xcd, 0xe1, 0xad, 0xdc, 0x2d, 0x1e, 0x14, 0xb1, 0x46, 0x09, 0xa8, + 0xca, 0x0f, 0x1b, 0x87, 0xe3, 0x4d, 0x02, 0x69, 0x42, 0xb7, 0x90, 0x95, + 0xf4, 0xbd, 0xde, 0x91, 0xd9, 0x05, 0x08, 0x48, 0xe2, 0x70, 0xcb, 0xba, + 0xa1, 0x4d, 0x7f, 0xf1, 0x81, 0xee, 0xda, 0x6f, 0xe0, 0x23, 0x96, 0x2f, + 0x88, 0x4c, 0x1a, 0xc5, 0xf4, 0x59, 0x9b, 0xac, 0x5f, 0x64, 0x4e, 0x75, + 0x8a, 0xec, 0xfa, 0xb4, 0x46, 0x02, 0x4b, 0xfe, 0xff, 0xf1, 0xfb, 0x86, + 0x69, 0x62, 0xfb, 0xf3, 0xdf, 0x52, 0xc5, 0xec, 0xee, 0x0b, 0x15, 0xb9, + 0xe2, 0xfc, 0x9e, 0xa5, 0x1a, 0x4c, 0x61, 0xc7, 0xfb, 0xfd, 0xe1, 0x6d, + 0x3e, 0x91, 0xac, 0x5e, 0xf6, 0x12, 0xc5, 0xef, 0xb4, 0x7a, 0xc5, 0xbc, + 0xb1, 0x73, 0x9d, 0x62, 0x88, 0xd4, 0xf8, 0x4a, 0xfc, 0x28, 0x60, 0x38, 0xb1, 0x7f, 0x83, 0x9d, 0xe3, 0xb3, 0x52, 0xb1, 0x7f, 0xc3, 0xc1, 0x6b, - 0x6d, 0xdf, 0x65, 0x8b, 0xc5, 0x1a, 0x79, 0x62, 0xff, 0xf7, 0x6c, 0x21, + 0x6d, 0xdf, 0x65, 0x8b, 0xc5, 0x1a, 0x79, 0x62, 0xff, 0xf7, 0x4c, 0x21, 0x93, 0x05, 0xce, 0x48, 0x16, 0x2f, 0xff, 0xfe, 0x3b, 0xf0, 0xc8, 0xa0, 0x22, 0xf1, 0x9f, 0x98, 0x39, 0x61, 0xe5, 0x62, 0xb1, 0x18, 0x02, 0x4c, 0xbe, 0x7d, 0x49, 0xd6, 0x2b, 0x47, 0x89, 0xf2, 0x2b, 0xc5, 0x81, 0x2c, - 0x5f, 0xff, 0x6f, 0xf1, 0x16, 0x75, 0x07, 0xe1, 0x67, 0x65, 0x8b, 0xf7, - 0xe7, 0xee, 0x6a, 0xc5, 0xcd, 0x17, 0x0f, 0xf3, 0xb9, 0x4e, 0xf3, 0xe8, + 0x5f, 0xff, 0x6f, 0xf1, 0x16, 0x77, 0x07, 0xe1, 0x67, 0x45, 0x8b, 0xf7, + 0xe7, 0xee, 0x6a, 0xc5, 0xcd, 0x17, 0x0f, 0xf3, 0xa9, 0x4e, 0xf3, 0xe8, 0xd5, 0x8a, 0x94, 0xc2, 0xa2, 0x22, 0xfc, 0x26, 0x63, 0x8c, 0x6f, 0xff, - 0xf3, 0xf6, 0x21, 0x70, 0xc0, 0xca, 0x47, 0xf6, 0x86, 0x71, 0x62, 0xa0, - 0xaf, 0x2c, 0xd1, 0xc7, 0x20, 0xd0, 0xbf, 0xca, 0x58, 0xe0, 0x8f, 0x7d, - 0x28, 0xc3, 0xb2, 0x35, 0xfb, 0x22, 0x83, 0x12, 0xc5, 0xfb, 0x34, 0x52, - 0x05, 0x8b, 0xbb, 0x77, 0x2c, 0x5c, 0x7c, 0x58, 0xa9, 0x6d, 0xf5, 0xb6, - 0x3f, 0xca, 0xc0, 0xf9, 0xe5, 0x10, 0xe8, 0xb9, 0xa7, 0x00, 0x3d, 0x08, - 0x71, 0x14, 0x47, 0x13, 0x86, 0x3b, 0x7f, 0x39, 0xc5, 0x14, 0xf9, 0x62, - 0xfb, 0xff, 0x73, 0x56, 0x2e, 0x88, 0x4b, 0x17, 0xfe, 0x36, 0x4b, 0x76, - 0x7d, 0x8c, 0xc5, 0x8b, 0x1d, 0x62, 0xb1, 0x12, 0x1d, 0x12, 0x38, 0xcf, - 0x7e, 0x83, 0x7f, 0xbc, 0x01, 0x17, 0x1c, 0x6b, 0x17, 0xe8, 0x03, 0x30, - 0x6b, 0x16, 0xec, 0xe7, 0xb8, 0xc6, 0x97, 0xef, 0xbe, 0x80, 0x25, 0x8b, - 0xa6, 0x0b, 0x17, 0xe9, 0xeb, 0xd3, 0xa5, 0x8b, 0xcf, 0xf1, 0x2c, 0x5b, - 0x58, 0x8a, 0xe8, 0x8a, 0x34, 0x52, 0x71, 0x7f, 0x14, 0xdf, 0xc1, 0x71, - 0xa7, 0xa8, 0x2c, 0x54, 0xa2, 0x03, 0x14, 0x2f, 0xf3, 0x83, 0xdd, 0x6e, - 0xfa, 0x58, 0xbf, 0xec, 0xe9, 0xbd, 0x3e, 0x60, 0x2c, 0x5f, 0xfe, 0xc2, - 0xdb, 0x76, 0x1e, 0xb5, 0x27, 0xe2, 0xc5, 0xff, 0xc5, 0x3e, 0xe7, 0xba, - 0xdd, 0xcb, 0x65, 0x8b, 0xf7, 0x73, 0xf5, 0x0e, 0x2c, 0x54, 0x47, 0xe8, - 0xc8, 0xf7, 0x43, 0xeb, 0x17, 0xf9, 0xc8, 0xd6, 0x14, 0x06, 0xb1, 0x7c, - 0x70, 0xe2, 0xe2, 0xc5, 0x49, 0xf9, 0x60, 0xc3, 0x9a, 0x5f, 0xc5, 0x9e, - 0x14, 0x92, 0xc5, 0xfb, 0xa8, 0x14, 0x8d, 0x62, 0x8e, 0x7a, 0xac, 0x59, - 0x7f, 0x41, 0xc8, 0xed, 0xe5, 0x8b, 0xfe, 0x1e, 0x19, 0xc7, 0x2e, 0xa0, - 0xb1, 0x69, 0xe8, 0xfa, 0x02, 0x2d, 0xa9, 0x55, 0x81, 0x87, 0x2f, 0x0c, - 0x0f, 0xc2, 0x51, 0xa1, 0x02, 0x50, 0x89, 0xbd, 0x9b, 0x4a, 0xc5, 0xef, - 0x67, 0xd6, 0x2c, 0xd0, 0x37, 0x5f, 0x1d, 0xbf, 0xb0, 0x5d, 0xf8, 0xbc, - 0x1a, 0xc5, 0xff, 0xec, 0x20, 0xc0, 0x66, 0x6f, 0x8e, 0x52, 0xb1, 0x5a, - 0x3f, 0xff, 0x9a, 0xdf, 0xfd, 0x3c, 0xe6, 0x1f, 0xc5, 0x27, 0xe2, 0xc5, - 0xff, 0x4e, 0x8d, 0xf9, 0x4e, 0x69, 0x62, 0xfe, 0x34, 0xcc, 0x3c, 0xee, - 0xb1, 0x7f, 0xf4, 0xf5, 0x0f, 0x0a, 0x76, 0x7e, 0xbc, 0xb1, 0x7f, 0x9f, - 0xed, 0xbc, 0x90, 0xd6, 0x29, 0xd1, 0x58, 0x46, 0x3c, 0x48, 0xbf, 0xa7, - 0x70, 0x1c, 0x40, 0x58, 0xbe, 0xec, 0xe4, 0x35, 0x8b, 0xff, 0x14, 0x8f, - 0xf2, 0x72, 0xcd, 0xd6, 0x2f, 0x39, 0x79, 0x62, 0xb0, 0xff, 0xa2, 0x24, - 0xf9, 0xf5, 0xfe, 0x1f, 0x1f, 0xff, 0xc1, 0xac, 0x5f, 0xfa, 0x78, 0x4d, - 0x03, 0x39, 0x9a, 0x58, 0xbf, 0x42, 0x22, 0x91, 0xac, 0x53, 0x9f, 0x43, - 0x1f, 0xdf, 0x87, 0x85, 0x31, 0xeb, 0x17, 0xf1, 0x64, 0x3f, 0x23, 0x58, - 0xad, 0x8f, 0x5c, 0x65, 0x57, 0x89, 0xb4, 0xb1, 0x7c, 0xcc, 0xdd, 0xcb, - 0x17, 0xff, 0xff, 0xfb, 0xf8, 0xfa, 0x81, 0x85, 0x91, 0x42, 0x4b, 0xc6, - 0x03, 0x86, 0x70, 0xed, 0x03, 0x7c, 0xb1, 0x7f, 0xf0, 0x24, 0xcf, 0x7f, - 0x3d, 0xf6, 0x82, 0xc5, 0xff, 0xff, 0xfa, 0x7e, 0x59, 0xe8, 0xec, 0x33, - 0x7f, 0xb8, 0xca, 0x5b, 0x6f, 0xb1, 0x87, 0x02, 0xc5, 0xff, 0xff, 0xfb, - 0xf8, 0x7c, 0xde, 0x7f, 0x27, 0x33, 0x85, 0x9f, 0xf1, 0x48, 0x0c, 0x38, - 0x16, 0x2f, 0x60, 0xcc, 0x74, 0xd4, 0xf4, 0x8d, 0xe8, 0x44, 0x5f, 0xfd, - 0xcd, 0xb0, 0x2c, 0x21, 0x77, 0x4c, 0x66, 0x2a, 0x6e, 0x38, 0xe7, 0x89, - 0x3b, 0x47, 0xcf, 0x7e, 0xf7, 0x18, 0x8d, 0x58, 0xbf, 0xf4, 0x66, 0xee, - 0x6f, 0xda, 0x19, 0xc5, 0x8a, 0xd8, 0xfb, 0x78, 0x53, 0x52, 0xae, 0x9d, - 0xe5, 0x48, 0x87, 0x0f, 0x3b, 0xfd, 0xd4, 0x39, 0x14, 0x27, 0x65, 0x8b, - 0xfe, 0xd6, 0x1a, 0xc3, 0xfc, 0xe9, 0x62, 0x86, 0xc8, 0x64, 0xc8, 0x52, - 0xee, 0x45, 0x12, 0x26, 0xa1, 0xca, 0x72, 0xef, 0xc2, 0xb9, 0x8b, 0xca, - 0x13, 0x9e, 0x9c, 0x1e, 0x11, 0xef, 0x63, 0x8b, 0xff, 0xee, 0xbd, 0xad, - 0x4f, 0x80, 0x19, 0x43, 0xf8, 0xb1, 0x6f, 0x2c, 0x5b, 0xd8, 0x7c, 0xba, - 0x53, 0xb9, 0xfb, 0x2c, 0x5f, 0x49, 0x43, 0x8b, 0x16, 0x7e, 0x8f, 0x8a, - 0x22, 0x70, 0x0c, 0xdf, 0xed, 0x6c, 0x53, 0xbb, 0xc1, 0x62, 0xbe, 0x7d, - 0x6c, 0x6d, 0x7e, 0xfc, 0xf6, 0x1c, 0xac, 0x5c, 0xc4, 0xb1, 0x7d, 0xa6, - 0xed, 0x8b, 0x14, 0x33, 0x74, 0x21, 0x6b, 0xe7, 0xfc, 0xc1, 0x62, 0xdd, - 0x96, 0x2f, 0xdd, 0x78, 0xa7, 0xeb, 0x16, 0xd4, 0x9b, 0xd6, 0x14, 0xbe, - 0xea, 0x29, 0xd2, 0xc5, 0xb4, 0xb1, 0x58, 0x6d, 0xc4, 0x4b, 0x7c, 0xda, - 0xea, 0x0b, 0x17, 0x7d, 0xd6, 0x2f, 0xff, 0xd3, 0xef, 0xb4, 0x5c, 0x67, - 0xdc, 0x9b, 0x37, 0x58, 0xa8, 0x27, 0xe2, 0x36, 0x43, 0x48, 0x74, 0xbf, - 0xc5, 0xc1, 0x10, 0x76, 0x24, 0x8e, 0x17, 0xbe, 0x7e, 0xd8, 0x35, 0x8b, - 0xe2, 0xf6, 0x12, 0xc5, 0xc5, 0xed, 0x1e, 0x2b, 0x12, 0x5f, 0xf7, 0x50, - 0xe0, 0xbd, 0x3e, 0xe2, 0xc5, 0xfb, 0x50, 0x6e, 0x82, 0x58, 0xbf, 0xdc, - 0x09, 0x87, 0x3d, 0x71, 0x62, 0xa5, 0x19, 0x38, 0x58, 0xe7, 0x8c, 0x57, - 0x7e, 0xe0, 0xbd, 0x24, 0xb1, 0x7f, 0x85, 0xd4, 0x3d, 0xc1, 0x47, 0xac, - 0x5e, 0xe4, 0xf4, 0xb1, 0x7a, 0x7f, 0xc5, 0x8b, 0xf6, 0x7e, 0x1d, 0x01, - 0x62, 0xe6, 0x0b, 0xa3, 0xe5, 0x00, 0xf7, 0x87, 0x6f, 0xff, 0xa4, 0x83, - 0xc8, 0xbe, 0xc7, 0xc1, 0xb4, 0x16, 0x2a, 0x09, 0xc6, 0x61, 0xcf, 0xca, - 0x0a, 0x13, 0xe1, 0x1e, 0x5f, 0xec, 0xe8, 0xcc, 0xfb, 0xfd, 0x62, 0xef, - 0x8d, 0x62, 0xe7, 0xdd, 0x62, 0xe6, 0xf0, 0xcd, 0x84, 0x70, 0xc5, 0x69, - 0x12, 0x8c, 0xcb, 0x69, 0x58, 0xbf, 0xb5, 0x2f, 0x06, 0xe2, 0xc5, 0x0c, - 0xdf, 0x74, 0x23, 0x7f, 0x03, 0x22, 0x93, 0xba, 0xc5, 0xff, 0xb8, 0x1f, - 0x39, 0xb3, 0x45, 0x31, 0xeb, 0x14, 0xc7, 0xe9, 0xe2, 0xeb, 0xfe, 0xf7, - 0x05, 0x00, 0xc6, 0xfe, 0x58, 0xbd, 0x39, 0xa5, 0x8b, 0xf0, 0x8d, 0xfb, - 0xf1, 0x62, 0xf1, 0x31, 0xb1, 0x1e, 0x36, 0x87, 0x2a, 0x53, 0x6d, 0xc8, - 0x4b, 0x31, 0x08, 0xa1, 0x05, 0x7f, 0xfe, 0xd0, 0x8b, 0x9e, 0xeb, 0x77, - 0xd7, 0x98, 0x1c, 0x58, 0xbf, 0xfb, 0x87, 0x14, 0x20, 0xcf, 0xbb, 0x8d, - 0x62, 0xd1, 0x98, 0x89, 0xfe, 0x2c, 0xdf, 0x4e, 0x41, 0x96, 0x28, 0x67, - 0x99, 0xf2, 0xbb, 0xd8, 0xfc, 0x58, 0xbf, 0x7b, 0xd8, 0x2d, 0x96, 0x2f, - 0xff, 0xb6, 0x6f, 0xe0, 0xcc, 0xc2, 0x2c, 0x70, 0x2c, 0x5e, 0x3b, 0xe9, - 0x62, 0xb6, 0x45, 0x96, 0xe3, 0x9a, 0x2a, 0x02, 0x7d, 0xff, 0x68, 0x19, - 0xa0, 0x10, 0x80, 0xb1, 0x7e, 0x03, 0x75, 0x03, 0xac, 0x5f, 0xe8, 0x78, - 0xb3, 0x9f, 0x75, 0x8a, 0x94, 0x4b, 0xc4, 0x74, 0xc5, 0x57, 0x79, 0x96, - 0x2f, 0xe2, 0x84, 0xb9, 0x4a, 0xc5, 0xfc, 0x4c, 0x6f, 0x33, 0x4b, 0x17, - 0xff, 0xcd, 0xff, 0xb9, 0x90, 0x73, 0xcf, 0xc3, 0x1a, 0xc5, 0x62, 0x2a, - 0xce, 0x57, 0xd8, 0xba, 0xff, 0xf6, 0x6b, 0x4d, 0x03, 0x3f, 0x3e, 0xe3, - 0x2c, 0x5e, 0xf6, 0xc1, 0x2c, 0x5c, 0x7c, 0x58, 0xbf, 0x9c, 0x7a, 0x71, - 0x6c, 0xb1, 0x7b, 0x4d, 0xc3, 0x0f, 0x9b, 0x08, 0x3c, 0x2f, 0x6f, 0x4a, - 0x64, 0x50, 0x31, 0x14, 0x2c, 0x6f, 0xf6, 0xee, 0xc6, 0x71, 0xbe, 0xb1, - 0x4e, 0x7e, 0x1f, 0x3b, 0xbf, 0xff, 0x19, 0xe2, 0xc7, 0xe7, 0x30, 0xb3, - 0xdf, 0x75, 0x8a, 0x1a, 0xe5, 0x16, 0x43, 0x51, 0xe1, 0xac, 0x72, 0xf6, - 0x94, 0xa8, 0x22, 0x1b, 0xdc, 0x11, 0xab, 0x17, 0xbe, 0xe1, 0x2c, 0x5f, - 0xff, 0xbe, 0xe7, 0x61, 0xf3, 0x09, 0xba, 0xd6, 0x1d, 0x62, 0xf8, 0xa6, - 0x0e, 0xb1, 0x79, 0x8a, 0x25, 0x8b, 0xdd, 0x41, 0xd6, 0x2c, 0xc7, 0x37, - 0x64, 0x3b, 0x78, 0x52, 0x4b, 0x17, 0xf4, 0x27, 0xb4, 0x70, 0xb4, 0xb1, - 0x7f, 0xff, 0x9f, 0xd2, 0x4d, 0x0c, 0x1f, 0x1b, 0x4f, 0xf7, 0xec, 0xb1, - 0x7d, 0x25, 0x0e, 0x2c, 0x56, 0x27, 0xcb, 0xb8, 0xfb, 0x8f, 0x69, 0x57, - 0xeb, 0x84, 0x4a, 0x21, 0xce, 0xc6, 0x81, 0xb0, 0x5f, 0xff, 0xb8, 0x46, - 0x7d, 0x9f, 0xc0, 0x11, 0x13, 0x41, 0x62, 0xff, 0xff, 0xe9, 0xd6, 0x45, - 0x27, 0xcd, 0xdc, 0x7f, 0x9f, 0x70, 0xdd, 0x67, 0x72, 0xc5, 0xf8, 0xa6, - 0x00, 0x75, 0x8b, 0xf9, 0xcd, 0x8e, 0x16, 0x8d, 0x58, 0xbf, 0xc5, 0x22, - 0xeb, 0x8d, 0x1e, 0xb1, 0x5f, 0x3e, 0xb6, 0x34, 0xbe, 0x9c, 0x0b, 0xcb, - 0x17, 0xf6, 0xf3, 0xd0, 0x35, 0x2b, 0x17, 0xfa, 0x4b, 0x76, 0x20, 0x77, - 0xab, 0x15, 0x27, 0xd0, 0x73, 0x0b, 0x8b, 0x75, 0x8a, 0x58, 0xbe, 0xc8, - 0xe7, 0x02, 0xc5, 0x46, 0xc6, 0xc7, 0x41, 0x96, 0x7c, 0x3e, 0xf3, 0xa4, - 0xdf, 0xf4, 0x83, 0x5a, 0x90, 0x87, 0xd2, 0xc5, 0xfe, 0x08, 0xff, 0x97, - 0x2d, 0x96, 0x2f, 0xff, 0x34, 0x1f, 0x59, 0xd4, 0x50, 0x9d, 0x6c, 0xb1, - 0x7f, 0xff, 0x80, 0x76, 0x86, 0x76, 0x7e, 0x7f, 0x01, 0x1d, 0x9f, 0x75, - 0x8a, 0x94, 0x73, 0x80, 0xd4, 0x49, 0xb7, 0x05, 0xc5, 0x8b, 0xfe, 0x3c, - 0xef, 0x9e, 0x7d, 0x62, 0xc5, 0xcd, 0xe5, 0x8b, 0xc5, 0x9c, 0x30, 0xfa, - 0x70, 0x64, 0x8e, 0x6f, 0xe6, 0xd8, 0x79, 0x9c, 0x58, 0xbf, 0xe9, 0xd4, - 0x6c, 0x01, 0x31, 0x6e, 0xb1, 0x58, 0xb8, 0xb5, 0xbc, 0x24, 0xa2, 0x21, - 0x3c, 0x22, 0xff, 0x09, 0x00, 0x13, 0x7a, 0x32, 0x3e, 0xd0, 0x98, 0x8e, - 0x3e, 0x0c, 0xba, 0xff, 0xb9, 0xe1, 0x75, 0x83, 0x62, 0x58, 0xbf, 0xff, - 0xfa, 0x12, 0x60, 0xf0, 0x9b, 0x9f, 0x60, 0x70, 0xcc, 0xf4, 0xfb, 0x8b, - 0x15, 0x12, 0x2b, 0x7c, 0x75, 0x70, 0xba, 0x58, 0xbf, 0xa4, 0xf3, 0x9d, - 0x79, 0x62, 0xd8, 0x73, 0xc7, 0xf0, 0xcd, 0x4a, 0xf5, 0xfe, 0x4e, 0x68, - 0xb4, 0x6b, 0x82, 0x6b, 0xbf, 0xdb, 0x49, 0x7b, 0xed, 0x05, 0x8a, 0x58, - 0xbe, 0xfb, 0x31, 0xd6, 0x2f, 0xec, 0x2c, 0xe4, 0xe9, 0x62, 0xb4, 0x79, - 0xc1, 0x91, 0x5f, 0xdd, 0xee, 0x9e, 0x4f, 0x8b, 0x17, 0x68, 0xd5, 0x8a, - 0x94, 0x7e, 0x40, 0xd3, 0x16, 0x88, 0x8c, 0x33, 0x2b, 0xfe, 0xea, 0x11, - 0xce, 0x5e, 0x93, 0xac, 0x5e, 0xe1, 0x8e, 0xb1, 0x58, 0x7b, 0x7e, 0x3d, - 0xbf, 0xb6, 0xcd, 0x3e, 0xf2, 0xb1, 0x7c, 0x43, 0x93, 0xac, 0x5f, 0xff, - 0x08, 0xbd, 0xcf, 0xbc, 0x45, 0x27, 0x68, 0x2c, 0x5f, 0xda, 0x97, 0x83, - 0x71, 0x62, 0xe1, 0x32, 0xc5, 0xb0, 0xc3, 0xc4, 0x22, 0xda, 0x3a, 0x2e, - 0xfb, 0x42, 0x52, 0xfe, 0x60, 0x60, 0xda, 0x0b, 0x15, 0x29, 0x9a, 0x64, - 0x37, 0x5c, 0xaa, 0xf8, 0x1c, 0x8d, 0x5d, 0xea, 0xc5, 0xe6, 0xd6, 0xcb, - 0x17, 0xff, 0xcd, 0xe1, 0x4b, 0xcf, 0x5b, 0xff, 0x3a, 0xe2, 0xc5, 0x6e, - 0x7e, 0x00, 0x1e, 0xbf, 0x03, 0x86, 0x4f, 0x96, 0x2a, 0x4f, 0x35, 0x88, - 0xea, 0x55, 0x61, 0xb9, 0x0f, 0xe3, 0x63, 0x63, 0x32, 0x87, 0x65, 0xfb, - 0xe0, 0x7d, 0x1a, 0xb1, 0x7b, 0x70, 0xe0, 0xb1, 0x7d, 0x3a, 0xef, 0xf8, - 0xb1, 0x5f, 0x3c, 0x80, 0x10, 0x5f, 0xba, 0x03, 0x67, 0xd6, 0x2f, 0xe0, - 0x98, 0x73, 0xd7, 0x16, 0x29, 0xcf, 0x64, 0x05, 0x37, 0xf7, 0xf0, 0x02, - 0xf7, 0x16, 0x2f, 0x4e, 0x7d, 0x62, 0x86, 0x79, 0x7e, 0x2f, 0xbe, 0xce, - 0xe9, 0xd2, 0xc5, 0xff, 0xff, 0xfd, 0x91, 0xf8, 0x3e, 0x48, 0xe7, 0xdf, - 0xc1, 0x6f, 0xf9, 0xe7, 0xf3, 0x8d, 0x27, 0x58, 0xbf, 0x7f, 0x21, 0x06, - 0x58, 0xbf, 0xfe, 0xcf, 0xef, 0xf7, 0x88, 0x98, 0x2f, 0x67, 0xd6, 0x2b, - 0x15, 0x52, 0xbb, 0x96, 0x9e, 0xd9, 0xb0, 0x88, 0xb8, 0x4b, 0xe8, 0x45, - 0xc7, 0x14, 0x5f, 0x7f, 0x93, 0xba, 0xc5, 0xf7, 0x9f, 0x22, 0x58, 0xb1, - 0xab, 0x15, 0x87, 0xb5, 0xd1, 0x23, 0x91, 0xdf, 0x40, 0xa7, 0x65, 0x8b, - 0x83, 0x02, 0xc5, 0x68, 0xde, 0x70, 0x8e, 0xf6, 0x3c, 0x4b, 0x17, 0xa4, - 0x8d, 0x58, 0xa9, 0x3d, 0xb1, 0x90, 0xf0, 0x76, 0x8c, 0x76, 0x31, 0xf3, - 0x0b, 0xfd, 0xa3, 0xcb, 0x81, 0x08, 0xe5, 0x7b, 0x65, 0x24, 0x1b, 0x78, - 0xfe, 0x1e, 0x50, 0x94, 0x52, 0xc4, 0xb5, 0x0e, 0x33, 0xc7, 0x9b, 0xf9, - 0xdd, 0x26, 0x94, 0x9a, 0x08, 0x40, 0x14, 0xf8, 0xa7, 0x23, 0x47, 0xf4, - 0xb6, 0x61, 0x4a, 0xf8, 0x0a, 0x1a, 0x21, 0xc3, 0x16, 0xff, 0xef, 0x73, - 0xf9, 0x11, 0x0b, 0xa8, 0x71, 0x62, 0x96, 0x2f, 0xfe, 0xc2, 0x06, 0x66, - 0xb9, 0xe9, 0xc5, 0x8b, 0xfe, 0xeb, 0xd9, 0xa7, 0xd9, 0x8e, 0xb1, 0x7b, - 0x3b, 0x62, 0xc5, 0x01, 0x13, 0x64, 0x85, 0xc3, 0xbb, 0xfa, 0x13, 0xd0, - 0x35, 0x2b, 0x15, 0x29, 0xa6, 0xc1, 0x23, 0x21, 0x4f, 0xd1, 0x7d, 0xee, - 0xfe, 0x0e, 0xb1, 0x7d, 0x24, 0xd0, 0x58, 0xbe, 0xe0, 0x7b, 0x4a, 0xc5, - 0xe6, 0x20, 0x18, 0x7d, 0x1a, 0x22, 0xe1, 0x0d, 0xfe, 0xfb, 0x40, 0xcd, - 0x6a, 0x56, 0x2a, 0x3c, 0xfd, 0x7e, 0x81, 0x7f, 0x86, 0x39, 0x87, 0xc3, - 0xe2, 0xc5, 0xff, 0x8b, 0xdc, 0xc1, 0x9b, 0xac, 0xe2, 0xc5, 0x62, 0x26, - 0xdc, 0x94, 0x46, 0xd7, 0x8e, 0xd1, 0x2c, 0x5f, 0xfa, 0x0c, 0x41, 0x30, - 0xe7, 0xae, 0x2c, 0x5f, 0xff, 0x98, 0xbb, 0x67, 0x50, 0x3c, 0xff, 0xd8, - 0xfd, 0x96, 0x2f, 0xe7, 0x3c, 0xfc, 0x31, 0xac, 0x5f, 0xf0, 0x7e, 0x72, - 0x14, 0x33, 0x8b, 0x15, 0x03, 0xe9, 0x72, 0xfb, 0xdc, 0x62, 0x58, 0xbf, - 0x7d, 0xe7, 0x5c, 0x58, 0xad, 0xd3, 0x85, 0x88, 0x7b, 0x48, 0x1f, 0x86, - 0x17, 0x08, 0x7b, 0x0e, 0x5f, 0xff, 0xa1, 0xc2, 0xcf, 0x71, 0xf0, 0xfe, - 0xd6, 0x04, 0xb1, 0x70, 0xa0, 0xb1, 0x7f, 0xce, 0x71, 0xe4, 0x53, 0x9a, - 0x58, 0xad, 0x8f, 0x47, 0xe3, 0x17, 0xa1, 0x3d, 0x2c, 0x5f, 0x84, 0x42, - 0x9e, 0x96, 0x2f, 0x1f, 0x3c, 0xb1, 0x7d, 0x20, 0x63, 0xac, 0x5a, 0x18, - 0x8a, 0x98, 0x88, 0xce, 0x3c, 0x02, 0x92, 0x1d, 0xae, 0x93, 0x9f, 0x28, - 0xd4, 0x2f, 0xe2, 0x29, 0xf8, 0xb4, 0xb1, 0x6d, 0xd6, 0x2e, 0xf4, 0xac, - 0x5f, 0x4f, 0xc5, 0xa5, 0x8b, 0x73, 0xbd, 0x3c, 0xd7, 0x13, 0x21, 0x7b, - 0xe8, 0x66, 0xd0, 0x58, 0xa9, 0x4c, 0x01, 0xca, 0x99, 0xe8, 0x8e, 0x2f, - 0xc5, 0x80, 0x17, 0x16, 0x2f, 0xf1, 0x84, 0xdb, 0x14, 0xf4, 0xb1, 0x7f, - 0xef, 0xbf, 0xbf, 0x8f, 0xe9, 0x02, 0xc5, 0xdb, 0xbe, 0x22, 0x6f, 0x45, - 0x1c, 0x35, 0xbb, 0x9e, 0x58, 0xbf, 0x0d, 0x8a, 0x40, 0xb1, 0x5b, 0x9b, - 0xf0, 0xc6, 0x2f, 0xee, 0x0d, 0xc1, 0x24, 0xb1, 0x7f, 0x37, 0x80, 0x19, - 0x41, 0x62, 0xb6, 0x3f, 0xfe, 0x88, 0xfe, 0x5b, 0x7f, 0xfe, 0x29, 0x3f, - 0x89, 0x81, 0xc2, 0xcf, 0x48, 0x4b, 0x17, 0xf8, 0x53, 0xdb, 0x3c, 0xfa, - 0x58, 0xbd, 0xf7, 0x89, 0x62, 0xff, 0xa7, 0x7c, 0x1c, 0xf5, 0x0e, 0x2c, - 0x5f, 0x8b, 0x39, 0x27, 0x58, 0xad, 0xd1, 0x00, 0x43, 0xdd, 0x8e, 0xef, - 0xff, 0xfb, 0x40, 0x00, 0xb9, 0xf7, 0xf4, 0x33, 0xec, 0x07, 0x1c, 0xac, - 0x5f, 0xf3, 0x6b, 0x3b, 0x67, 0x69, 0x1a, 0xc5, 0x62, 0x28, 0xc0, 0xcf, - 0x7f, 0xfd, 0x86, 0x9a, 0xe3, 0xfb, 0xc5, 0xf7, 0xeb, 0xcb, 0x14, 0x73, - 0xf6, 0x22, 0x2b, 0xfc, 0x67, 0xda, 0x04, 0xe1, 0x2c, 0x5f, 0xd2, 0x18, - 0xc6, 0xfb, 0xac, 0x54, 0xa7, 0xa3, 0x91, 0xa5, 0xb9, 0x08, 0x8d, 0x6e, - 0x16, 0x96, 0x2f, 0x6e, 0xda, 0x58, 0xbf, 0xf6, 0xd8, 0x47, 0xcf, 0x70, - 0x3e, 0x2c, 0x5f, 0x6f, 0x3a, 0x35, 0x62, 0xfb, 0x3e, 0xdd, 0x2c, 0x57, - 0x0f, 0x20, 0x32, 0x5b, 0xec, 0xde, 0x4e, 0xb1, 0x7f, 0x71, 0xf0, 0x22, - 0x1a, 0xc5, 0xb6, 0xf9, 0xe8, 0xf0, 0x8e, 0xfe, 0x70, 0x75, 0x0c, 0xf2, - 0xc5, 0x6c, 0x9c, 0x5f, 0xc6, 0x18, 0x78, 0x10, 0x89, 0x27, 0x4e, 0xc5, - 0x37, 0xfc, 0x19, 0x43, 0x3b, 0x16, 0x71, 0x62, 0xfb, 0x36, 0x14, 0x16, - 0x2f, 0xa1, 0xec, 0x02, 0xc5, 0xee, 0x3c, 0x4b, 0x15, 0x03, 0xe5, 0xe8, - 0x93, 0x84, 0x77, 0xee, 0x39, 0x75, 0x05, 0x8b, 0x62, 0xc5, 0xef, 0x8b, - 0x75, 0x8a, 0xc3, 0xd9, 0xdc, 0xa7, 0xc2, 0x37, 0xec, 0x71, 0xfd, 0xd6, - 0x2b, 0x63, 0xd6, 0x81, 0x7d, 0xfd, 0xce, 0x39, 0x75, 0x05, 0x8b, 0xb4, - 0x6a, 0xc5, 0x74, 0x79, 0x0c, 0x5f, 0x7f, 0xf3, 0x40, 0xce, 0x16, 0x7b, - 0x99, 0x1e, 0xb1, 0x52, 0x9d, 0xa6, 0x43, 0x7d, 0x9a, 0xc4, 0x45, 0x7f, - 0xee, 0xbd, 0xc7, 0x29, 0x03, 0x1d, 0x62, 0x96, 0x2b, 0x0f, 0x2f, 0xb1, - 0xfd, 0xc7, 0xfa, 0xc5, 0xef, 0x7b, 0xa5, 0x8a, 0x81, 0xb7, 0x00, 0xc5, - 0x6c, 0x7f, 0x7e, 0x5a, 0xbf, 0xd8, 0x77, 0xfc, 0x86, 0x75, 0x8b, 0xff, - 0xfe, 0xcf, 0x7d, 0x87, 0x18, 0x59, 0xd8, 0xb3, 0x9c, 0x7e, 0xbc, 0xb1, - 0x5a, 0x44, 0xfc, 0x71, 0xa5, 0xba, 0x58, 0xbe, 0xc3, 0xcc, 0x7a, 0xc5, - 0xba, 0xef, 0xcd, 0xc7, 0x04, 0xef, 0x1a, 0xe1, 0x2c, 0x5f, 0x82, 0x7c, - 0x23, 0x56, 0x29, 0xcf, 0x20, 0x43, 0xf7, 0xf8, 0x61, 0xe4, 0x5f, 0x63, - 0xac, 0x56, 0x27, 0xd8, 0xf0, 0xc2, 0x65, 0xe2, 0x75, 0x11, 0x0d, 0xf3, - 0x83, 0xa1, 0xac, 0x5e, 0x6e, 0xee, 0x2c, 0x56, 0xe7, 0x89, 0xf2, 0x4b, - 0xff, 0x67, 0x5e, 0x0b, 0x08, 0x7f, 0x95, 0x8b, 0x36, 0xe7, 0xc7, 0xa2, - 0x3b, 0x62, 0xc5, 0xf6, 0xb6, 0x7d, 0x96, 0x2f, 0x7d, 0xf4, 0xb1, 0x66, - 0x73, 0xc2, 0x88, 0x96, 0x8c, 0x3f, 0xaf, 0xa9, 0xdd, 0x9e, 0x58, 0xbc, - 0x52, 0x75, 0x8a, 0x93, 0x67, 0xc1, 0x7b, 0xfd, 0x3c, 0xc7, 0xec, 0xc7, - 0x58, 0xbf, 0xf1, 0x30, 0x5a, 0x97, 0x83, 0x71, 0x62, 0xb6, 0x3f, 0x28, - 0x8d, 0x2f, 0x77, 0xf8, 0x4b, 0x17, 0xbb, 0x61, 0x2c, 0x54, 0xa6, 0x97, - 0xd2, 0xb3, 0x42, 0x48, 0x89, 0x3c, 0x43, 0x7b, 0xf0, 0x3a, 0xc5, 0xdf, - 0x75, 0x8a, 0xc3, 0x6b, 0xe1, 0xea, 0x96, 0xd8, 0xe6, 0x11, 0xdd, 0x64, - 0x76, 0x66, 0xcb, 0x00, 0xea, 0x1a, 0xaf, 0x0f, 0x98, 0x8c, 0x74, 0xa9, - 0xf9, 0x50, 0xcd, 0x1e, 0x60, 0x17, 0x8a, 0x52, 0xa7, 0x25, 0x79, 0x7a, - 0x1e, 0x62, 0x8f, 0xb6, 0x3a, 0x10, 0x77, 0xda, 0x79, 0xe9, 0x62, 0xf7, - 0xf3, 0x75, 0x8b, 0xc7, 0x7e, 0x2c, 0x56, 0x1b, 0xbd, 0x0f, 0x5f, 0x75, - 0xc1, 0x1d, 0x62, 0xe0, 0x3a, 0xc5, 0xd3, 0x13, 0x9b, 0xc6, 0x25, 0xbd, - 0xdb, 0x06, 0xb1, 0x73, 0x84, 0xb1, 0x6d, 0xd6, 0x2b, 0x0d, 0x59, 0xc6, - 0x2f, 0xe1, 0x75, 0xcf, 0xbc, 0x7a, 0xc5, 0xf8, 0xd3, 0x5f, 0x50, 0x58, - 0xb8, 0xd9, 0x58, 0xb4, 0x16, 0x2f, 0xf4, 0xfd, 0xbc, 0x21, 0x74, 0xb1, - 0x4e, 0x7b, 0xfc, 0x18, 0x10, 0x95, 0xe6, 0xea, 0x0b, 0x17, 0xe0, 0xfe, - 0xfd, 0x71, 0x62, 0xff, 0x14, 0x9d, 0x8b, 0xa8, 0x2c, 0x57, 0x7a, 0xaa, - 0xda, 0x57, 0xb6, 0x5c, 0x81, 0x58, 0xd2, 0xa3, 0xc8, 0x34, 0x66, 0x50, - 0x8a, 0xf1, 0x70, 0x87, 0x83, 0x2b, 0xbf, 0xbc, 0xe4, 0xe0, 0xe2, 0xc5, - 0xfd, 0xcc, 0x18, 0x1b, 0xcb, 0x17, 0x73, 0x8b, 0x17, 0xc3, 0x2c, 0xfa, - 0xc5, 0x86, 0x62, 0x25, 0x62, 0x2d, 0xd1, 0x70, 0x63, 0x17, 0xda, 0x92, - 0xdd, 0x62, 0xfb, 0x09, 0xc6, 0xb1, 0x7d, 0xa6, 0x23, 0x56, 0x2f, 0x3b, - 0x76, 0x58, 0xbb, 0x5b, 0x2c, 0x5d, 0x9c, 0x19, 0xb7, 0x10, 0xf5, 0xff, - 0xff, 0xff, 0x74, 0x0d, 0x6f, 0xc8, 0xfe, 0xcf, 0x1a, 0x1a, 0x1f, 0x79, - 0xc8, 0x77, 0xde, 0xbb, 0xe1, 0x80, 0x8f, 0x30, 0xcf, 0xc7, 0x2c, 0x56, - 0x27, 0xa8, 0xe8, 0xdf, 0x23, 0x62, 0x12, 0x5a, 0x0c, 0xb2, 0xfc, 0x71, - 0x7c, 0x3d, 0x96, 0x2e, 0x6f, 0x2c, 0x56, 0x8f, 0x0c, 0xe5, 0x97, 0x43, - 0xcb, 0x17, 0xde, 0x6e, 0xb8, 0xb1, 0x7e, 0x1b, 0xf6, 0x91, 0xac, 0x56, - 0xc7, 0x9d, 0xb9, 0x25, 0xbe, 0xb1, 0x60, 0x2c, 0x5c, 0xdd, 0xfa, 0xc5, - 0xdc, 0x82, 0xc5, 0x4a, 0x60, 0x83, 0x22, 0x66, 0x60, 0x12, 0x70, 0x4b, - 0xc2, 0x42, 0x1c, 0xbf, 0xb6, 0x8a, 0x11, 0xb6, 0xb6, 0x58, 0xba, 0x00, - 0x58, 0xbc, 0xd9, 0xa5, 0x8b, 0xc5, 0x9e, 0x58, 0xbd, 0xfc, 0x3a, 0xc5, - 0x74, 0x7d, 0xbf, 0x18, 0x21, 0xcf, 0x0e, 0x5d, 0xe2, 0x58, 0xbd, 0x3d, - 0x71, 0x62, 0xf9, 0xca, 0x18, 0xb1, 0x70, 0x7f, 0x58, 0xbd, 0xb3, 0x12, - 0xc5, 0xda, 0xd9, 0x62, 0x86, 0x88, 0xe3, 0x8f, 0x7c, 0x87, 0xc3, 0x22, - 0x1d, 0xbb, 0x5f, 0x58, 0xbe, 0x91, 0xb4, 0x16, 0x2f, 0xd9, 0xef, 0xbf, - 0x96, 0x2f, 0xcd, 0xd6, 0x75, 0xe5, 0x8a, 0xf9, 0xe9, 0x78, 0xa2, 0xf3, - 0x6a, 0x0b, 0x17, 0xbf, 0x87, 0x58, 0xa8, 0x1b, 0xaf, 0x0e, 0xdf, 0xf1, - 0xb1, 0x66, 0x6f, 0xe9, 0x35, 0x62, 0xfe, 0x6d, 0x67, 0xe4, 0x0b, 0x17, - 0x3f, 0x16, 0x2e, 0x2d, 0x96, 0x2b, 0x73, 0x5e, 0x21, 0x7b, 0xc1, 0xfd, - 0x96, 0x28, 0xc4, 0xf8, 0xb6, 0x18, 0x35, 0xd3, 0xa5, 0xcd, 0x10, 0x9c, - 0xf7, 0xeb, 0x9c, 0x22, 0xbe, 0x3c, 0x74, 0x78, 0xd6, 0x2d, 0xb2, 0xc5, - 0xdf, 0xc5, 0x8a, 0x58, 0xad, 0xcd, 0x1e, 0x85, 0xeb, 0x63, 0xd8, 0x73, - 0x6b, 0xed, 0x99, 0xbe, 0xb1, 0x7e, 0x16, 0xcc, 0xdf, 0x58, 0xbd, 0xb3, - 0x6c, 0xb1, 0x7e, 0xc1, 0x81, 0xbc, 0xb1, 0x46, 0x22, 0x4f, 0xe4, 0x6c, - 0x53, 0xd8, 0x7e, 0xfc, 0x1c, 0x05, 0x3c, 0x58, 0xbc, 0x00, 0xfe, 0xb1, - 0x7b, 0xcc, 0x35, 0x8a, 0xd9, 0x14, 0xa6, 0x9f, 0xf4, 0x54, 0x43, 0xf7, - 0xe1, 0xbf, 0x69, 0x1a, 0xc5, 0xbc, 0xb1, 0x74, 0x76, 0xeb, 0x17, 0xe7, - 0x2d, 0x83, 0xe9, 0x62, 0xf8, 0xa7, 0xae, 0x2c, 0x58, 0x21, 0x9e, 0x76, - 0x15, 0xd4, 0x11, 0x9d, 0xd1, 0x56, 0x84, 0x99, 0xaa, 0xfb, 0x3b, 0x60, - 0xd6, 0x2f, 0xe1, 0x36, 0xa0, 0xc0, 0x58, 0xbf, 0xe2, 0xcd, 0x6a, 0x77, - 0x0c, 0xeb, 0x17, 0xc7, 0x6e, 0xa3, 0x06, 0x7d, 0x21, 0x97, 0x59, 0x96, - 0x2e, 0x7d, 0x61, 0xe7, 0xf0, 0xfa, 0xfd, 0x17, 0xdf, 0xaf, 0x2c, 0x56, - 0x93, 0x33, 0xfc, 0x37, 0x3c, 0x59, 0x7e, 0xc2, 0x1f, 0xe5, 0x62, 0xa3, - 0x76, 0x46, 0xf4, 0xc2, 0x96, 0x07, 0x99, 0x0a, 0x57, 0x94, 0x58, 0x77, - 0x6f, 0xc2, 0x09, 0xa3, 0x5a, 0x28, 0xc3, 0x45, 0x1b, 0x80, 0x46, 0xd7, - 0xdd, 0xe7, 0xe7, 0xb2, 0xc5, 0xff, 0x60, 0xc6, 0xfd, 0x67, 0x5e, 0x58, - 0xbe, 0xdc, 0xa6, 0x0b, 0x15, 0xf3, 0xde, 0x63, 0xbb, 0xfd, 0x39, 0xe9, - 0xfb, 0x0d, 0x62, 0xee, 0x47, 0xac, 0x5c, 0xdd, 0x96, 0x2d, 0xd9, 0x62, - 0x9c, 0xd6, 0xb0, 0xcd, 0xef, 0xb9, 0xd6, 0x2e, 0xce, 0x2c, 0x50, 0xcf, - 0x4f, 0x07, 0xe3, 0x87, 0x6f, 0xfb, 0x3d, 0x3b, 0x87, 0x20, 0xc5, 0x8b, - 0xd3, 0xd4, 0x16, 0x2b, 0x64, 0xdd, 0xc6, 0x43, 0xa3, 0x20, 0x42, 0x6c, - 0x23, 0x1e, 0xe3, 0xab, 0xec, 0xc2, 0xf2, 0xc5, 0xff, 0xee, 0xce, 0x40, - 0xfb, 0xb4, 0x3c, 0xfb, 0x2c, 0x5f, 0x09, 0xb5, 0x05, 0x8b, 0xfe, 0xcd, - 0xe7, 0x76, 0xd6, 0xd2, 0xb1, 0x52, 0x8a, 0xa1, 0xa6, 0x7c, 0x8e, 0xff, - 0xd2, 0x3d, 0x4f, 0x9f, 0x77, 0x1a, 0xc5, 0xf7, 0xb8, 0xdb, 0xac, 0x50, - 0xcf, 0x8c, 0x47, 0xf7, 0xc2, 0x6d, 0x41, 0x62, 0xf4, 0xf7, 0x41, 0x62, - 0xf4, 0x70, 0xba, 0x58, 0xbe, 0x9c, 0xea, 0x0b, 0x14, 0x34, 0x44, 0x44, - 0x47, 0xa2, 0x0e, 0xe2, 0x2b, 0xfb, 0xdb, 0x8c, 0x67, 0xd2, 0xc5, 0xff, - 0xf3, 0x71, 0xb4, 0xfd, 0x03, 0xd0, 0x98, 0xec, 0x58, 0xbe, 0x72, 0x90, - 0x2c, 0x50, 0x0f, 0xd3, 0xca, 0x77, 0xfd, 0x17, 0x3b, 0x31, 0x6c, 0x21, - 0xac, 0x5f, 0xcc, 0x10, 0x00, 0x78, 0xe5, 0x8b, 0xec, 0xf6, 0x1d, 0x62, - 0xe2, 0x35, 0x62, 0x98, 0xdd, 0x08, 0x8a, 0xa0, 0x88, 0xde, 0x36, 0xdf, - 0xa0, 0x42, 0x6e, 0x2c, 0x5f, 0xfa, 0x48, 0x5e, 0x80, 0x8b, 0xdc, 0x58, - 0xac, 0x3e, 0x7d, 0x14, 0x5f, 0xff, 0x87, 0x30, 0x9c, 0x87, 0xe4, 0x65, - 0x3e, 0xe2, 0xc5, 0xff, 0x4f, 0xa1, 0x91, 0xec, 0x40, 0x58, 0xbf, 0x73, - 0x21, 0x09, 0x58, 0xac, 0x45, 0xb9, 0x2a, 0x70, 0xee, 0xf0, 0x1c, 0x0b, - 0x17, 0xdb, 0x45, 0xf7, 0x58, 0xb7, 0xf0, 0xf0, 0x84, 0x3b, 0x7f, 0xf4, - 0x09, 0xb8, 0xdf, 0xea, 0x19, 0xe5, 0x8b, 0x98, 0xeb, 0x15, 0x87, 0xb9, - 0xba, 0x2d, 0xff, 0x89, 0x8d, 0xfb, 0x43, 0x8e, 0x35, 0x8b, 0xf7, 0xdc, - 0x9b, 0x65, 0x8b, 0x6e, 0xb1, 0x7c, 0x28, 0x67, 0x37, 0x37, 0x64, 0x51, - 0x47, 0x45, 0x91, 0x3d, 0x5d, 0xda, 0x56, 0x2f, 0xff, 0xed, 0x9f, 0x44, - 0xc6, 0xf3, 0xf2, 0xdd, 0x48, 0xdd, 0x62, 0xec, 0xf2, 0xc5, 0x4a, 0x23, - 0x30, 0x64, 0x97, 0x2e, 0x0c, 0xeb, 0x14, 0xe8, 0xf4, 0x28, 0x57, 0x78, - 0xb6, 0xff, 0x0f, 0x39, 0xcc, 0xd6, 0xcb, 0x16, 0x1a, 0xc5, 0x6e, 0x78, - 0xfd, 0x1a, 0xdd, 0xd9, 0x96, 0x2f, 0xed, 0x4e, 0xf9, 0xdb, 0x16, 0x2f, - 0xf1, 0x03, 0x5a, 0x78, 0xb8, 0xb1, 0x52, 0x7c, 0xac, 0x61, 0x7a, 0x7b, - 0xa5, 0x62, 0xbb, 0xc6, 0x5d, 0x9c, 0xc7, 0xff, 0xb3, 0x14, 0x21, 0x96, - 0x38, 0x49, 0x64, 0x2a, 0x8d, 0x41, 0xea, 0x14, 0xae, 0x45, 0x14, 0x32, - 0xf5, 0x08, 0xa3, 0xc3, 0x63, 0xee, 0x05, 0x08, 0x3f, 0x47, 0x90, 0x27, - 0xae, 0xc4, 0x91, 0xcf, 0xdd, 0xc4, 0x17, 0xe8, 0xa7, 0xc5, 0xd9, 0x62, - 0xfa, 0x2c, 0x70, 0x2c, 0x51, 0x87, 0x9d, 0x25, 0x77, 0xff, 0x4f, 0x6d, - 0x4e, 0xb1, 0xff, 0x23, 0x58, 0xba, 0x71, 0x62, 0x88, 0xf6, 0xf8, 0x8b, - 0x7c, 0x7e, 0xf2, 0x35, 0xc6, 0xcb, 0x17, 0x31, 0xd6, 0x2e, 0x8a, 0x39, - 0x62, 0x88, 0xd9, 0xf6, 0x17, 0xbf, 0xf7, 0xdf, 0x45, 0x9d, 0xb4, 0xfc, - 0x58, 0xbf, 0xa7, 0xcd, 0x13, 0x79, 0x62, 0xc3, 0x58, 0xbf, 0xfd, 0xd4, - 0x38, 0x67, 0xf3, 0xdc, 0x26, 0xf2, 0xc5, 0x68, 0xf7, 0xce, 0x25, 0x7f, - 0xa4, 0x2e, 0x68, 0x52, 0x05, 0x8a, 0x73, 0xd7, 0x22, 0x2b, 0x85, 0xe5, - 0x8b, 0x0d, 0x62, 0xf8, 0xbd, 0x80, 0x58, 0xad, 0x1b, 0x41, 0x09, 0x54, - 0x15, 0x6c, 0x63, 0xef, 0x44, 0x2e, 0xcf, 0x11, 0x11, 0xd0, 0x3d, 0x0e, - 0x48, 0xe2, 0x0e, 0xe4, 0xcb, 0x46, 0x46, 0xf1, 0xae, 0xfb, 0xf7, 0x91, - 0x86, 0x77, 0xb1, 0x94, 0xc6, 0x91, 0x99, 0x46, 0xd1, 0xec, 0x77, 0xdc, - 0x2e, 0xbb, 0xe4, 0x60, 0xdd, 0xf5, 0x8d, 0x2e, 0x35, 0x42, 0x3a, 0x35, - 0xb8, 0xcd, 0x63, 0x8d, 0xb4, 0xe4, 0xc4, 0x27, 0xd0, 0xc7, 0x4e, 0x98, - 0xcb, 0x4f, 0x76, 0x6c, 0xe6, 0xee, 0xf4, 0xc1, 0x3e, 0xa7, 0xc7, 0xde, - 0x91, 0x2f, 0x1f, 0x1b, 0x4c, 0x54, 0xce, 0x9d, 0x52, 0xa9, 0x4f, 0x3f, - 0x95, 0xfb, 0x42, 0x02, 0xd4, 0xd2, 0x40, 0x52, 0x19, 0x7b, 0xf8, 0xdb, - 0xca, 0xb8, 0xd6, 0xe5, 0xb2, 0x3e, 0xf5, 0x72, 0x1c, 0x29, 0x7b, 0xbd, - 0xa5, 0x88, 0x05, 0x1c, 0xe4, 0x75, 0x25, 0x04, 0x3a, 0x63, 0xc7, 0x74, - 0xe3, 0x5d, 0xfa, 0x31, 0xf4, 0xda, 0x58, 0xa8, 0xc8, 0xd8, 0xd8, 0x76, - 0x56, 0x72, 0xb8, 0x92, 0xbf, 0x9a, 0xf9, 0x10, 0x25, 0xa4, 0xdf, 0xfe, - 0x8c, 0x3b, 0x42, 0x33, 0x35, 0xbb, 0x36, 0xea, 0x91, 0xb0, 0xbf, 0x6b, - 0x76, 0x6d, 0xd5, 0x25, 0x69, 0x70, 0x3b, 0x2c, 0x5d, 0xc8, 0xe5, 0x8b, - 0x46, 0x61, 0xf6, 0x7c, 0xdf, 0x83, 0x57, 0x76, 0xd2, 0xc5, 0xcd, 0x2b, - 0x17, 0xfa, 0x10, 0x17, 0x8a, 0x60, 0xb1, 0x7d, 0x9f, 0x6f, 0x2c, 0x56, - 0x1e, 0xb1, 0x1a, 0x5f, 0xf8, 0x1f, 0x68, 0x3c, 0x3e, 0xfd, 0x96, 0x2b, - 0xbd, 0x3e, 0x1e, 0x10, 0x5f, 0xff, 0xee, 0xd2, 0xfa, 0xdd, 0xce, 0xd0, - 0x72, 0xc1, 0xe1, 0xab, 0x17, 0xfe, 0x26, 0x7e, 0xe7, 0x2d, 0xa4, 0xd5, - 0x8b, 0x42, 0x51, 0x46, 0xcc, 0x57, 0xf8, 0xa5, 0xbd, 0xc7, 0x25, 0x8b, - 0xff, 0x38, 0x31, 0x9f, 0x5b, 0xcf, 0x96, 0x2f, 0x87, 0xf9, 0xd9, 0x62, - 0xb0, 0xf8, 0x9c, 0xfa, 0xf7, 0x31, 0xd6, 0x2f, 0xfb, 0x22, 0xcc, 0xe6, - 0xcd, 0x1e, 0xb1, 0x67, 0x58, 0xbb, 0xce, 0x61, 0xf5, 0x10, 0xe7, 0x63, - 0xdb, 0xff, 0x43, 0x21, 0x8d, 0x02, 0x93, 0xac, 0x54, 0x9f, 0xcb, 0x9e, - 0x5f, 0xf3, 0x7d, 0xa1, 0x9b, 0x60, 0x4b, 0x15, 0xa3, 0xda, 0x39, 0x05, - 0xfd, 0x9b, 0xc8, 0x03, 0x3a, 0xc5, 0xf6, 0xd9, 0xf7, 0x58, 0xad, 0x1e, - 0x98, 0x8c, 0x2f, 0xc5, 0x26, 0xfd, 0x96, 0x2f, 0xf7, 0x1b, 0xd1, 0x9c, - 0x29, 0x58, 0xbf, 0xa7, 0x6d, 0x4e, 0x0d, 0x62, 0xa0, 0x7c, 0x9f, 0x36, - 0xbf, 0xff, 0x4e, 0xd3, 0xa9, 0x3c, 0xcf, 0xbe, 0xe0, 0x3a, 0xc5, 0x49, - 0xfb, 0xfc, 0x8a, 0xff, 0x61, 0xdf, 0x5b, 0x08, 0x0b, 0x17, 0xff, 0xce, - 0x5b, 0x67, 0xc4, 0x6e, 0x00, 0xec, 0x05, 0x8b, 0xf3, 0x0b, 0xf3, 0xa5, - 0x8b, 0xf3, 0xf6, 0x72, 0x9d, 0x1f, 0xcf, 0x65, 0x1b, 0xff, 0xff, 0xec, - 0x16, 0xf8, 0x3f, 0xc9, 0x6f, 0x3a, 0xcc, 0xea, 0x05, 0x27, 0xcd, 0x2c, - 0x56, 0x22, 0xf4, 0x90, 0x2e, 0x78, 0xe5, 0x8b, 0xd2, 0x38, 0x96, 0x2f, - 0x76, 0x14, 0x16, 0x2a, 0x0b, 0xb6, 0xd8, 0x4f, 0xbc, 0x24, 0xde, 0x35, - 0xdd, 0x3a, 0x9c, 0x8b, 0xf1, 0x81, 0x80, 0x84, 0xa3, 0x6b, 0xe1, 0x0f, - 0x86, 0xbb, 0x0f, 0x5f, 0x8a, 0x45, 0xdf, 0xf1, 0x62, 0xef, 0x8d, 0x62, - 0xda, 0xc3, 0xc5, 0x39, 0x6d, 0xff, 0xda, 0x81, 0x67, 0xb9, 0x27, 0xf6, - 0xeb, 0x15, 0x27, 0xda, 0x22, 0x7b, 0xb0, 0x96, 0x2e, 0xff, 0x16, 0x2d, - 0xd2, 0xc5, 0xfc, 0x6c, 0x70, 0xbe, 0xfa, 0x58, 0xac, 0x3c, 0x67, 0x13, - 0xac, 0x3f, 0xe8, 0xe5, 0xea, 0x1a, 0x2e, 0x32, 0x12, 0x97, 0xfe, 0xe4, - 0xfb, 0xec, 0x73, 0xef, 0xba, 0xc5, 0xff, 0x99, 0xfb, 0xa7, 0xfe, 0x2c, - 0x82, 0xc5, 0xfa, 0x0f, 0xbb, 0x69, 0x62, 0xa0, 0x8a, 0xbf, 0xa1, 0x71, - 0x02, 0xf6, 0xee, 0x12, 0xc5, 0xcd, 0xba, 0xa4, 0xb4, 0x2b, 0x73, 0xc4, - 0x61, 0xfb, 0xf1, 0xbd, 0x70, 0x5d, 0x2c, 0x54, 0xa3, 0x0f, 0x77, 0x47, - 0x22, 0xbf, 0x84, 0xe6, 0xea, 0x46, 0xb1, 0x7f, 0x68, 0x01, 0xf2, 0x71, - 0x62, 0xf4, 0x97, 0x96, 0x2f, 0xff, 0xdc, 0xe6, 0x7d, 0xf8, 0x2d, 0x99, - 0xcf, 0xa7, 0x58, 0xbb, 0x5f, 0x73, 0xf2, 0x61, 0xca, 0x94, 0x66, 0xbc, - 0x28, 0x6f, 0xff, 0xdc, 0xe6, 0x7f, 0x36, 0xcd, 0x34, 0x20, 0xd0, 0x58, - 0xbf, 0xc7, 0xe3, 0xe7, 0x66, 0xd2, 0xc5, 0x62, 0x22, 0xd9, 0x5a, 0xfd, - 0xa1, 0x01, 0xc6, 0xb1, 0x7f, 0x0c, 0x79, 0x80, 0xe2, 0xc5, 0xfd, 0x20, - 0xf7, 0x05, 0x1e, 0xb1, 0x52, 0x7c, 0x1c, 0x2e, 0xbf, 0xfc, 0xfe, 0x84, - 0xef, 0xf7, 0xf7, 0x1b, 0xa5, 0x8a, 0xd2, 0xaf, 0x33, 0x97, 0xfe, 0x1f, - 0x85, 0x0b, 0x1e, 0x10, 0xfa, 0x11, 0x3d, 0x88, 0x6f, 0xe0, 0x19, 0x9a, - 0x73, 0x56, 0x2f, 0xfb, 0x06, 0xfc, 0x88, 0xa4, 0x6b, 0x14, 0x33, 0xe9, - 0x63, 0x0b, 0xfb, 0x69, 0xd6, 0xa4, 0x25, 0x8b, 0xfe, 0x9d, 0xf0, 0xf8, - 0x5e, 0x8e, 0x58, 0xbf, 0xdf, 0x9d, 0x03, 0xd9, 0xb2, 0xc5, 0xfe, 0x2c, - 0x81, 0x8f, 0xf8, 0x2c, 0x59, 0xce, 0x8a, 0x5f, 0x9e, 0x78, 0xd6, 0xa5, - 0x30, 0xaf, 0xc3, 0x56, 0xff, 0xe6, 0x81, 0x9a, 0x9f, 0x3e, 0xee, 0x35, - 0x8b, 0xf4, 0x96, 0xc4, 0x6a, 0xc5, 0xa0, 0xb1, 0x68, 0x4a, 0x20, 0x60, - 0x8d, 0xd1, 0x4d, 0xec, 0x3b, 0xac, 0x5f, 0xff, 0x37, 0x77, 0xf3, 0x45, - 0x30, 0x72, 0x10, 0x6b, 0x17, 0x85, 0xcf, 0x2c, 0x5f, 0xff, 0xa0, 0xc4, - 0xfe, 0x9f, 0xef, 0x83, 0x29, 0xe2, 0xc5, 0xff, 0xf9, 0xfb, 0xa4, 0x85, - 0x07, 0xe7, 0x24, 0xc3, 0xee, 0xb1, 0x4e, 0x8a, 0xe6, 0x54, 0xbf, 0xfe, - 0xde, 0x75, 0x80, 0x63, 0xb4, 0x25, 0xf7, 0x58, 0xbf, 0x3f, 0x77, 0xf0, - 0xeb, 0x17, 0xff, 0xd0, 0xe6, 0x14, 0x9d, 0xb3, 0xde, 0x93, 0xac, 0x5b, - 0xd2, 0x8c, 0x9c, 0x50, 0x62, 0xba, 0x1a, 0xa5, 0x7d, 0x0e, 0x1d, 0x4b, - 0xf0, 0xcc, 0xf4, 0x3a, 0xaf, 0xfb, 0xef, 0xaf, 0x37, 0xd8, 0x6b, 0x17, - 0xfd, 0x06, 0xe7, 0xb9, 0x82, 0xef, 0xd6, 0x2f, 0xff, 0xfc, 0xfe, 0xe6, - 0x1b, 0xbf, 0xdf, 0xd9, 0x11, 0x49, 0xf6, 0xc0, 0x96, 0x29, 0xd1, 0x5f, - 0xd8, 0xfe, 0xf6, 0xc2, 0xee, 0x58, 0xbe, 0x81, 0x37, 0x96, 0x2f, 0xff, - 0xbc, 0xd9, 0xc1, 0xe4, 0x3f, 0x3d, 0x87, 0x2b, 0x17, 0xff, 0xff, 0xf3, - 0xf8, 0x78, 0x2e, 0x19, 0xfc, 0xdf, 0xe2, 0xd9, 0xf0, 0xba, 0x87, 0x38, - 0x29, 0x58, 0xa6, 0x46, 0xf1, 0x28, 0xd4, 0xa6, 0xcf, 0x84, 0x9d, 0x11, - 0x34, 0x60, 0x17, 0xf7, 0x9b, 0xe6, 0x0e, 0x56, 0x2f, 0x80, 0x1f, 0xa5, - 0x62, 0xd1, 0x2c, 0x5a, 0x0e, 0x6d, 0xc4, 0x49, 0x52, 0x88, 0xc6, 0x66, - 0xbe, 0x87, 0x9f, 0x65, 0x8b, 0xf7, 0x38, 0xc5, 0xb2, 0xc5, 0xf8, 0x3f, - 0x14, 0x81, 0x62, 0xdf, 0x58, 0xae, 0x91, 0x10, 0x72, 0x4e, 0xc5, 0x21, - 0x94, 0xdf, 0xff, 0x01, 0xb3, 0xec, 0xfd, 0xd2, 0x72, 0x63, 0x56, 0x2f, - 0xfc, 0xfc, 0xc1, 0xf5, 0xc9, 0xd7, 0x16, 0x2f, 0xf3, 0x43, 0xcf, 0xb7, - 0xdd, 0x62, 0xf1, 0x48, 0x16, 0x2f, 0xf4, 0x9e, 0x63, 0x02, 0x08, 0x25, - 0x8a, 0x81, 0xeb, 0x77, 0x0e, 0x5f, 0xfd, 0x19, 0x20, 0x78, 0x67, 0x8a, - 0x40, 0xb1, 0x52, 0x9e, 0x3e, 0x20, 0xee, 0xa2, 0xe8, 0x0d, 0x08, 0xaf, - 0x12, 0xdf, 0xb3, 0xef, 0x87, 0x58, 0xb8, 0x80, 0xb1, 0x7c, 0x03, 0xbe, - 0x96, 0x2a, 0x4d, 0xd3, 0x8b, 0xdf, 0xf8, 0x6f, 0xd9, 0xc7, 0x81, 0x67, - 0xd6, 0x2f, 0xfc, 0x43, 0x63, 0xb4, 0x25, 0xf7, 0x58, 0xbd, 0x87, 0x95, - 0x8a, 0x93, 0xda, 0xc3, 0xeb, 0xfe, 0x17, 0xb9, 0x90, 0x7d, 0x4a, 0xc5, - 0xff, 0xff, 0x37, 0xa4, 0x9b, 0x69, 0xd4, 0xbc, 0x24, 0xe5, 0x26, 0xac, - 0x5f, 0xe7, 0xe3, 0x8b, 0xbf, 0x1c, 0xac, 0x50, 0xd1, 0xaa, 0x47, 0x3e, - 0x64, 0xbf, 0xbf, 0x3b, 0x93, 0x1d, 0x62, 0xff, 0xff, 0x1b, 0x9a, 0xcf, - 0x18, 0xe3, 0x31, 0x8b, 0x0e, 0x2f, 0xac, 0x5f, 0xf9, 0x9f, 0x7f, 0xb0, - 0xb6, 0xd3, 0xac, 0x53, 0xa3, 0x45, 0x8b, 0x89, 0x8e, 0xf6, 0xe2, 0x95, - 0x8b, 0xfd, 0xb4, 0xe1, 0x0f, 0xf2, 0xb1, 0x6c, 0x73, 0xd1, 0x61, 0xea, - 0xd9, 0x5d, 0x98, 0xd8, 0x70, 0x7f, 0x78, 0x4d, 0xbc, 0x3d, 0x7f, 0x18, - 0x01, 0x3f, 0x5f, 0xb3, 0xa0, 0x98, 0x25, 0x8b, 0xff, 0xba, 0xe7, 0xe7, - 0x99, 0xe2, 0x63, 0x56, 0x2e, 0x7c, 0x58, 0xad, 0x22, 0x1d, 0x8a, 0xf8, - 0x8d, 0x7f, 0xa1, 0x3a, 0xda, 0x75, 0xb2, 0xc5, 0xf4, 0x35, 0x87, 0x58, - 0xbd, 0x9a, 0x02, 0xc5, 0xfa, 0x2c, 0x19, 0xe3, 0xd6, 0x2f, 0xf1, 0xe7, - 0xad, 0x4f, 0x5e, 0x58, 0xbf, 0x71, 0xf0, 0x80, 0xb1, 0x7f, 0xf9, 0xc8, - 0x20, 0xc0, 0xd0, 0x21, 0x30, 0x6b, 0x17, 0xa7, 0x51, 0x2c, 0x5f, 0xc5, - 0x21, 0x75, 0x0e, 0x2c, 0x57, 0x49, 0xb2, 0x39, 0x1c, 0x43, 0xa7, 0x2d, - 0xe1, 0xb7, 0x89, 0xfb, 0x26, 0x77, 0x0f, 0x5e, 0x34, 0x5b, 0xac, 0x5d, - 0x9c, 0x58, 0xa9, 0x54, 0x93, 0x91, 0xcd, 0x1a, 0xf0, 0x19, 0x05, 0xff, - 0xff, 0xf9, 0xf7, 0xcf, 0x49, 0x7b, 0x86, 0x4b, 0x8f, 0x0e, 0x66, 0xa5, - 0xe0, 0xdc, 0x58, 0xbf, 0xfc, 0xcf, 0xe1, 0x69, 0xb8, 0x1e, 0x16, 0xeb, - 0x17, 0xe9, 0x87, 0xe7, 0x65, 0x8b, 0xff, 0xf8, 0xde, 0x7e, 0x4b, 0xc3, - 0xfc, 0xf0, 0x84, 0xde, 0x58, 0xa8, 0x22, 0x17, 0x0a, 0x6f, 0xfe, 0xc2, - 0x18, 0xe7, 0xf9, 0x85, 0xba, 0xc5, 0xff, 0xf6, 0x81, 0xc0, 0x7d, 0xa0, - 0xfe, 0x29, 0x02, 0xc5, 0x62, 0xa0, 0x8f, 0xc2, 0x0c, 0xa1, 0xa1, 0xc2, - 0x21, 0x21, 0xdf, 0xd9, 0xe6, 0x20, 0x09, 0x62, 0xfe, 0xf9, 0x8f, 0xb3, - 0x12, 0xc5, 0xfc, 0x7e, 0x0c, 0x98, 0x25, 0x8b, 0xf0, 0x39, 0x1a, 0xa3, - 0x54, 0x6a, 0x58, 0xa9, 0x3e, 0xb6, 0x2f, 0xbe, 0x71, 0xe1, 0x2c, 0x5f, - 0xc5, 0x9e, 0xf6, 0x6c, 0xb1, 0x5b, 0x9e, 0x7f, 0x88, 0x6f, 0x6a, 0x07, - 0x58, 0xbe, 0xd3, 0xc9, 0xd6, 0x2e, 0x61, 0xac, 0x57, 0x46, 0xe4, 0x04, - 0x55, 0x88, 0x9c, 0x72, 0x36, 0x57, 0xbf, 0xcd, 0xe7, 0xf3, 0x83, 0x8b, - 0x15, 0x05, 0x46, 0x58, 0x5a, 0x50, 0x9a, 0xe4, 0x61, 0x62, 0x2d, 0xb7, - 0x16, 0x2f, 0xbd, 0xcc, 0x82, 0xc5, 0x74, 0x6d, 0x74, 0x25, 0x7f, 0xdf, - 0xfb, 0xe9, 0xf6, 0x63, 0xac, 0x54, 0x9e, 0xe3, 0x11, 0x5f, 0xf6, 0xa2, - 0x2c, 0x1f, 0xe7, 0xb2, 0xc5, 0xff, 0x68, 0x18, 0x36, 0xf0, 0xa5, 0x62, - 0xff, 0xc3, 0xf8, 0x98, 0xdc, 0x1b, 0x41, 0x62, 0xfb, 0xe1, 0x36, 0xcb, - 0x15, 0x88, 0xda, 0x63, 0xc2, 0x39, 0xf2, 0x05, 0x46, 0xee, 0x9f, 0x2b, - 0xbd, 0x1a, 0x8d, 0xa1, 0x9b, 0x33, 0xd0, 0x1b, 0x46, 0xe2, 0x38, 0x6c, - 0xe4, 0xe4, 0x41, 0xb0, 0xdf, 0xde, 0x32, 0xbe, 0xa1, 0x52, 0xf2, 0xa3, - 0x62, 0x56, 0xd4, 0xa4, 0xf3, 0xc3, 0x3b, 0xf2, 0x9c, 0x1a, 0x70, 0x34, - 0x10, 0xfc, 0x29, 0x4f, 0x1c, 0x94, 0x9b, 0xe9, 0x50, 0xdd, 0xa1, 0xcc, - 0x1c, 0x3e, 0xaf, 0xa3, 0x0e, 0x1c, 0x7a, 0xc5, 0x46, 0x27, 0xc0, 0x6c, - 0x76, 0xb7, 0xf3, 0x81, 0xbb, 0x4f, 0x96, 0x2f, 0xa7, 0x77, 0xdd, 0x62, - 0xa0, 0x7a, 0x61, 0x17, 0xdf, 0xe1, 0x74, 0xc5, 0x80, 0xe2, 0xc5, 0xff, - 0xfb, 0xf8, 0x58, 0x6f, 0xda, 0x1f, 0x09, 0x83, 0x3a, 0xc5, 0xf6, 0xec, - 0xdb, 0xaa, 0x4c, 0x02, 0xa0, 0x88, 0x9d, 0x2c, 0x5f, 0xfe, 0xc1, 0x94, - 0xee, 0x67, 0xe7, 0x62, 0x12, 0xc5, 0xe9, 0xce, 0x96, 0x2f, 0x31, 0x6e, - 0xb1, 0x7c, 0xdd, 0x70, 0xc1, 0x9b, 0xa0, 0x87, 0x6f, 0xfd, 0x3e, 0xe7, - 0x9c, 0x78, 0x50, 0x58, 0xbf, 0xc7, 0x7e, 0x0a, 0x75, 0x12, 0xc5, 0xfa, - 0x2e, 0x6a, 0x7b, 0x2c, 0x5f, 0x6e, 0x1f, 0xe2, 0x58, 0xbf, 0xf9, 0xe0, - 0xfd, 0xa7, 0xf2, 0x77, 0xc5, 0x8a, 0x94, 0x66, 0x39, 0xab, 0x16, 0x08, - 0x9e, 0xfc, 0x58, 0x01, 0x71, 0x62, 0xe0, 0xc0, 0xb1, 0x5f, 0x3c, 0x10, - 0x14, 0x5f, 0xd3, 0xdb, 0x9c, 0x90, 0x2c, 0x5f, 0x66, 0x03, 0x8b, 0x17, - 0xf9, 0x86, 0xdd, 0x78, 0x99, 0x62, 0x86, 0x7a, 0xb1, 0xc4, 0x55, 0x2b, - 0x82, 0xbb, 0x11, 0xe4, 0x2f, 0x7e, 0x46, 0x08, 0x43, 0x11, 0xdf, 0x23, - 0x0a, 0xf3, 0xd8, 0x88, 0x83, 0x84, 0x2d, 0xfe, 0x1c, 0xc6, 0x75, 0xe1, - 0x4a, 0xc5, 0x46, 0x23, 0x68, 0x50, 0xa2, 0xbf, 0x6b, 0x76, 0x6d, 0xd5, - 0x23, 0xa9, 0x7f, 0xff, 0xbf, 0x3b, 0x0f, 0x0f, 0x19, 0xce, 0x67, 0xdf, - 0x82, 0xd9, 0x62, 0xff, 0xa7, 0xdc, 0x06, 0x66, 0xb8, 0xb1, 0x7e, 0x8c, - 0x3b, 0x42, 0x33, 0x11, 0xaf, 0x11, 0xb9, 0x33, 0xdf, 0xff, 0xc4, 0x29, - 0xf7, 0x30, 0xa3, 0x00, 0x09, 0xfb, 0x6c, 0xb1, 0x79, 0xa2, 0x65, 0x8b, - 0xa7, 0x8b, 0x17, 0x14, 0x64, 0x46, 0xd3, 0xc3, 0xb5, 0x28, 0xc2, 0xc8, - 0x49, 0x5e, 0x36, 0x4e, 0xb1, 0x7b, 0x69, 0xdd, 0x62, 0xff, 0xbe, 0x2e, - 0x86, 0xfd, 0xa4, 0x6b, 0x16, 0xcd, 0x8f, 0x73, 0xc3, 0xf7, 0xcd, 0xb8, - 0x67, 0x58, 0xbd, 0x0e, 0x46, 0x1a, 0x8c, 0x72, 0x7a, 0xec, 0x51, 0x7f, - 0xfe, 0x92, 0x19, 0x8d, 0x2f, 0xda, 0x4c, 0x33, 0xf1, 0xcb, 0x17, 0xe9, - 0x39, 0x49, 0xab, 0x17, 0x4f, 0xd6, 0x2a, 0x06, 0xfc, 0x65, 0x15, 0xde, - 0x22, 0xf1, 0xe1, 0x37, 0x7b, 0x0e, 0xeb, 0x17, 0xdb, 0xb3, 0x6e, 0xa9, - 0x36, 0x4b, 0xfc, 0xfa, 0xfb, 0x76, 0x7e, 0xfd, 0x62, 0xb4, 0x7d, 0x7f, - 0x31, 0xbf, 0xfb, 0xef, 0xef, 0x8b, 0xac, 0x3b, 0x74, 0xb1, 0x77, 0x67, - 0x58, 0xbf, 0xbc, 0xdf, 0x30, 0x72, 0xb1, 0x7f, 0xfd, 0xc9, 0x7c, 0x1b, - 0xe7, 0x33, 0xc5, 0x2b, 0x17, 0xc0, 0x0f, 0xd2, 0xb1, 0x68, 0x46, 0x1f, - 0x83, 0xa6, 0x54, 0xa3, 0x25, 0xa1, 0x3f, 0x7e, 0x84, 0xbf, 0x69, 0x58, - 0xbe, 0x78, 0xec, 0xd2, 0xc5, 0xfb, 0x08, 0x07, 0xc5, 0x8b, 0xfe, 0x9e, - 0x46, 0x7d, 0xf7, 0x6d, 0x2c, 0x5f, 0xff, 0x7b, 0xf9, 0x07, 0x28, 0x73, - 0xf2, 0x5e, 0x58, 0xbf, 0xe7, 0xc2, 0x36, 0x7b, 0x37, 0xd6, 0x2a, 0x53, - 0x3b, 0x81, 0x4e, 0xe4, 0xa0, 0x27, 0x23, 0xd8, 0xe4, 0xfb, 0xfd, 0x09, - 0xd6, 0xd3, 0xad, 0x96, 0x2f, 0xf7, 0xbe, 0xf1, 0x7e, 0x76, 0x58, 0xa9, - 0x3e, 0xcc, 0x36, 0xbf, 0xfb, 0xbb, 0x00, 0x77, 0xd1, 0x9d, 0xb8, 0x75, - 0x8b, 0xef, 0xb8, 0x51, 0xb2, 0xc5, 0xff, 0xfd, 0xf7, 0xe3, 0x7a, 0x4e, - 0x6c, 0xf1, 0xe3, 0xa7, 0xcb, 0x17, 0xff, 0xff, 0xdc, 0x7f, 0x49, 0xdb, - 0xc2, 0x93, 0x20, 0xfe, 0x93, 0x94, 0xef, 0xa9, 0x58, 0xbf, 0x7f, 0x35, - 0x3e, 0x58, 0xae, 0x93, 0x03, 0x3a, 0xf7, 0x9f, 0x6a, 0x53, 0xaa, 0x1a, - 0x63, 0x46, 0x59, 0x7f, 0xbd, 0x06, 0x87, 0xe7, 0x65, 0x8b, 0xa4, 0x0b, - 0x17, 0xef, 0x7c, 0x26, 0xd9, 0x62, 0xd1, 0x92, 0xbd, 0x36, 0x32, 0xcc, - 0x84, 0x3e, 0xe4, 0x4e, 0x8e, 0x78, 0x71, 0x34, 0x6c, 0x25, 0x0c, 0x6e, - 0x47, 0x95, 0xe3, 0x50, 0x8d, 0x43, 0x17, 0xbf, 0xe9, 0x7f, 0x72, 0x76, - 0xce, 0x2c, 0x5d, 0x0f, 0x2c, 0x5f, 0xfe, 0xcf, 0x08, 0x07, 0x68, 0x10, - 0x98, 0x35, 0x8b, 0xe0, 0x47, 0x64, 0x67, 0xd1, 0x38, 0x03, 0x92, 0x18, - 0xbf, 0xf1, 0x46, 0x1c, 0x4f, 0xe2, 0x6e, 0xe5, 0x8b, 0xf3, 0x73, 0xed, - 0x05, 0x8b, 0xfc, 0x2f, 0x03, 0x42, 0x87, 0x16, 0x2b, 0x47, 0xbc, 0x45, - 0x17, 0xf3, 0x6a, 0x39, 0x88, 0xd5, 0x8b, 0xc2, 0xe4, 0x66, 0x1e, 0x91, - 0x10, 0xd8, 0x18, 0x99, 0x48, 0x21, 0xe9, 0x58, 0x9d, 0x1b, 0x46, 0xeb, - 0x6d, 0xd6, 0x2f, 0x8a, 0x7d, 0xc5, 0x8a, 0xe8, 0xda, 0xc4, 0x27, 0x7d, - 0xbb, 0x36, 0xea, 0x93, 0x98, 0xb1, 0xd6, 0x2b, 0x47, 0x86, 0x11, 0x8d, - 0xfc, 0x59, 0xd0, 0x1e, 0x0b, 0x17, 0xf8, 0xa4, 0x32, 0xce, 0xd8, 0xb1, - 0x6e, 0xfd, 0x62, 0xb4, 0x7f, 0x3e, 0x2e, 0xec, 0x69, 0x79, 0x8f, 0xc5, - 0x8b, 0xb3, 0xeb, 0x17, 0xed, 0x0b, 0xa8, 0x71, 0x62, 0xa4, 0xf0, 0xb0, - 0x5e, 0xe8, 0x8e, 0xb1, 0x62, 0x58, 0xa5, 0x8c, 0x2c, 0x6a, 0x53, 0xf6, - 0xc6, 0x67, 0x84, 0xe3, 0x18, 0x92, 0xf8, 0x44, 0x11, 0xc5, 0x57, 0xe8, - 0xce, 0xf2, 0x37, 0x8d, 0xfb, 0xc5, 0x8b, 0xfe, 0x8c, 0xcd, 0x37, 0x3e, - 0xd0, 0x58, 0xad, 0x8f, 0xf4, 0x90, 0x6e, 0x8f, 0xf2, 0xc5, 0xfd, 0x06, - 0xd6, 0xdf, 0x12, 0xc5, 0xfb, 0x92, 0x00, 0xf6, 0x58, 0xb6, 0x44, 0x7b, - 0x7c, 0x30, 0xbe, 0x68, 0x7f, 0x16, 0x2f, 0xfe, 0xda, 0x7e, 0xcf, 0xee, - 0x60, 0xbb, 0xf5, 0x8a, 0x19, 0xf6, 0x68, 0x8a, 0xf3, 0xff, 0x8b, 0x17, - 0x0b, 0x75, 0x8b, 0xdc, 0x6d, 0x2c, 0x5f, 0x0c, 0x2c, 0xfa, 0xc5, 0xd8, - 0x4b, 0x17, 0xfc, 0xf0, 0x7f, 0x88, 0xe7, 0x75, 0x8a, 0x93, 0xf3, 0x19, - 0x27, 0x85, 0xae, 0xea, 0x32, 0x0a, 0x88, 0x06, 0xed, 0x90, 0x94, 0x01, - 0x17, 0x07, 0x7c, 0x32, 0x1c, 0x24, 0x2a, 0x31, 0x5d, 0x46, 0x43, 0x99, - 0xa5, 0x21, 0x5f, 0xb5, 0xbb, 0x36, 0xea, 0x93, 0xbc, 0xbf, 0xd0, 0x8c, - 0xe6, 0xb4, 0xe1, 0x2c, 0x5d, 0xef, 0x2c, 0x5a, 0x33, 0x11, 0x10, 0xc6, - 0xfe, 0x39, 0xbf, 0xe2, 0x96, 0xdb, 0xae, 0x48, 0xd6, 0x2c, 0xeb, 0x17, - 0x4e, 0xeb, 0x15, 0x03, 0x52, 0x71, 0x1b, 0x86, 0x05, 0x8b, 0xc7, 0x6f, - 0x2c, 0x5d, 0x3d, 0xcb, 0x17, 0x8b, 0x36, 0x58, 0xbe, 0xcd, 0x85, 0xd9, - 0x62, 0xd1, 0x83, 0x4c, 0x5b, 0x18, 0xcd, 0x21, 0x38, 0xc0, 0x07, 0x48, - 0x68, 0x31, 0xdb, 0xff, 0x7b, 0x23, 0xe3, 0x38, 0x0f, 0x7b, 0xa5, 0x8a, - 0x98, 0xea, 0xbe, 0xa0, 0x89, 0x99, 0xb1, 0xd9, 0x6e, 0xf3, 0xd4, 0x32, - 0xde, 0xd4, 0xf0, 0xea, 0x75, 0xc0, 0xf1, 0x81, 0x7e, 0x31, 0x46, 0x87, - 0x68, 0x27, 0xe7, 0x8a, 0x58, 0x4f, 0x27, 0x7e, 0xfd, 0x0c, 0x70, 0xe3, - 0x4d, 0xee, 0x6e, 0xb7, 0x96, 0x2f, 0xe6, 0xeb, 0x7f, 0xb6, 0x96, 0x2f, - 0xf9, 0x8b, 0x6e, 0x39, 0x75, 0x05, 0x8a, 0x23, 0xea, 0x08, 0xc2, 0xff, - 0xdb, 0x60, 0x5f, 0xce, 0x63, 0x92, 0xc5, 0xb8, 0xb1, 0x58, 0x7a, 0x20, - 0x3f, 0xbf, 0xf3, 0x91, 0x61, 0xbb, 0x89, 0x86, 0xb1, 0x7d, 0xf7, 0xd4, - 0x16, 0x2f, 0xd9, 0xf1, 0xb1, 0x2c, 0x5c, 0xf1, 0x87, 0x4e, 0x67, 0xef, - 0x84, 0xe7, 0xc2, 0x1f, 0x1f, 0x86, 0x47, 0x7e, 0xe7, 0x0e, 0xd0, 0x58, - 0xbe, 0xef, 0xe1, 0x0e, 0xfd, 0x62, 0xff, 0xfa, 0x4b, 0x6e, 0x09, 0x9e, - 0x1c, 0xfb, 0x41, 0x62, 0xb4, 0x7f, 0xdf, 0x2e, 0xba, 0x3e, 0x3d, 0x62, - 0xff, 0xfd, 0xf9, 0x2d, 0xb8, 0x26, 0x78, 0x73, 0xed, 0x05, 0x8b, 0xff, - 0xff, 0xf9, 0xe4, 0xbc, 0x4c, 0x6e, 0x78, 0x5e, 0x7f, 0x73, 0xef, 0xa9, - 0xd9, 0xb5, 0xba, 0xc5, 0xdf, 0x71, 0xa3, 0x7f, 0xea, 0xd7, 0xff, 0xf3, - 0x3f, 0xa7, 0xb1, 0x67, 0x3e, 0xd0, 0x1e, 0xbb, 0xf5, 0x8b, 0xff, 0xff, - 0x61, 0x36, 0x81, 0x1d, 0x81, 0x97, 0xbe, 0x26, 0x84, 0x83, 0x8b, 0x17, - 0x72, 0x56, 0x2f, 0xfe, 0xeb, 0x71, 0x37, 0x5e, 0xcc, 0x23, 0x56, 0x2f, - 0xee, 0xee, 0xe7, 0x8b, 0x92, 0xb1, 0x78, 0x9a, 0x32, 0x55, 0xac, 0x0e, - 0x14, 0xe6, 0x91, 0x6f, 0x0f, 0xdf, 0x97, 0x13, 0x0f, 0x1b, 0xfc, 0x2e, - 0x1a, 0x45, 0xfd, 0x1b, 0xc6, 0x93, 0xd6, 0xb6, 0x58, 0xbc, 0x71, 0x47, - 0xac, 0x5f, 0xe3, 0x64, 0xe3, 0x66, 0x09, 0x62, 0xfb, 0x36, 0x17, 0xd6, - 0x2e, 0x63, 0xac, 0x56, 0x8d, 0xd8, 0x89, 0x2f, 0x85, 0xdc, 0x39, 0x58, - 0xbf, 0xff, 0x70, 0x39, 0x1e, 0x4f, 0x9f, 0xb4, 0x8b, 0xbf, 0x95, 0x8b, - 0xf6, 0x77, 0x7a, 0x4d, 0x58, 0xb7, 0x72, 0xc5, 0x6c, 0x78, 0x38, 0x59, - 0x7d, 0xc7, 0xdf, 0x4b, 0x15, 0xb2, 0x77, 0x6e, 0x43, 0xa7, 0x0f, 0x90, - 0x80, 0x98, 0xa1, 0x3a, 0x11, 0x15, 0xff, 0xb8, 0xc6, 0xfd, 0xe4, 0x85, - 0x2b, 0x17, 0xfc, 0xde, 0x6f, 0xf5, 0x0c, 0xf2, 0xc5, 0xf8, 0x0d, 0xc1, - 0x4a, 0xc5, 0x7c, 0xf8, 0xbc, 0x75, 0x58, 0x8c, 0x27, 0x85, 0x05, 0xd0, - 0x65, 0x8b, 0x98, 0x0b, 0x17, 0xfd, 0x10, 0xd9, 0x82, 0xce, 0xbc, 0xb1, - 0x7f, 0xff, 0xf8, 0x98, 0x22, 0xcf, 0x7b, 0x36, 0x92, 0x63, 0x78, 0x79, - 0xc2, 0x1a, 0xc5, 0xff, 0x98, 0xa0, 0x60, 0xc4, 0xda, 0x82, 0xc5, 0xec, - 0x0f, 0x8b, 0x15, 0x29, 0x9f, 0x60, 0xbb, 0x8b, 0xe8, 0xf0, 0x27, 0x6e, - 0xe4, 0x0b, 0xcf, 0x17, 0x16, 0x2f, 0xe2, 0x90, 0x1d, 0xa0, 0xb1, 0x7f, - 0x14, 0x80, 0xed, 0x05, 0x8b, 0xfd, 0x1b, 0xc6, 0x85, 0x83, 0xf8, 0x96, - 0x2f, 0xd9, 0xda, 0x4b, 0xd8, 0x7d, 0x7c, 0x2d, 0xbf, 0x10, 0xb9, 0xf7, - 0x31, 0x1e, 0x98, 0x3d, 0xa8, 0x4c, 0x5f, 0x86, 0xfd, 0xb5, 0x8b, 0x16, - 0xfc, 0x9f, 0xde, 0x28, 0xdf, 0xe6, 0x86, 0xb2, 0x39, 0xc0, 0xb1, 0x7f, - 0xa4, 0xa7, 0x7e, 0x00, 0xeb, 0x17, 0xd3, 0x17, 0xdd, 0x62, 0xf3, 0x36, - 0xea, 0x91, 0x5c, 0xbf, 0xc6, 0xb1, 0x03, 0xd9, 0xf5, 0x8a, 0xd9, 0x10, - 0x3b, 0x91, 0xb9, 0x55, 0xef, 0xe6, 0xeb, 0x17, 0xd8, 0x01, 0x71, 0x62, - 0xe6, 0xeb, 0x0f, 0x04, 0x87, 0xaf, 0x9a, 0x0e, 0x05, 0x8b, 0xff, 0xff, - 0x82, 0xf1, 0xad, 0xcf, 0xee, 0xfc, 0xc1, 0xfa, 0x02, 0x1b, 0x10, 0x16, - 0x2f, 0xfa, 0x22, 0x60, 0xf0, 0x13, 0x05, 0x8b, 0xf3, 0x1a, 0xde, 0x82, - 0xc5, 0xff, 0xf7, 0x1d, 0xba, 0xfb, 0x3f, 0x85, 0xa6, 0xe2, 0xc5, 0x11, - 0xfc, 0xf8, 0xa6, 0x8d, 0x46, 0xa7, 0x50, 0xb3, 0xbf, 0xfb, 0xf9, 0x0d, - 0xfe, 0xe3, 0x92, 0xf2, 0xc5, 0x4a, 0x77, 0x2f, 0x1a, 0x57, 0x8a, 0xaf, - 0xff, 0xc7, 0xcf, 0x4f, 0xb9, 0x9a, 0x9c, 0x20, 0xce, 0xb1, 0x7f, 0xff, - 0xde, 0x7f, 0x73, 0xef, 0xf6, 0xe4, 0x50, 0x98, 0xfc, 0xeb, 0xcb, 0x15, - 0x28, 0xc1, 0x12, 0xad, 0x41, 0x72, 0x88, 0x64, 0xdb, 0x9b, 0x6a, 0x16, - 0xa7, 0x72, 0xf9, 0x61, 0x47, 0xb7, 0xe8, 0x7b, 0x5f, 0xfe, 0x66, 0x2c, - 0xf4, 0xeb, 0x85, 0xa3, 0xac, 0x5f, 0xfa, 0x01, 0xc3, 0x0b, 0xdb, 0x60, - 0xd6, 0x2f, 0xfd, 0xbb, 0xeb, 0x3e, 0xfa, 0xfb, 0x2c, 0x5f, 0xfc, 0x2e, - 0x7d, 0xa1, 0xe7, 0x62, 0x02, 0xc5, 0x74, 0x88, 0x3d, 0x1f, 0xdd, 0xf7, - 0x35, 0x33, 0x0d, 0x24, 0x7a, 0x18, 0x97, 0xb4, 0xfe, 0x58, 0xbf, 0x34, - 0x1b, 0xa8, 0x2c, 0x54, 0x47, 0x8d, 0xa1, 0xdb, 0xf1, 0x30, 0x41, 0x9d, - 0x62, 0xa4, 0xf3, 0x7c, 0x47, 0x7f, 0x42, 0x5c, 0x0e, 0x75, 0x8b, 0xff, - 0xfe, 0xce, 0xa1, 0x87, 0x72, 0x86, 0xa7, 0xec, 0xfe, 0x9f, 0xac, 0x5f, - 0x6d, 0xec, 0xfa, 0xc5, 0xff, 0xb4, 0x58, 0x37, 0x86, 0x75, 0xe5, 0x8a, - 0x93, 0xe3, 0x72, 0x4b, 0xfa, 0x4e, 0x3d, 0x36, 0xeb, 0x15, 0x04, 0xc5, - 0xff, 0x0c, 0x82, 0x20, 0xbf, 0xfb, 0xdf, 0xc8, 0x75, 0xed, 0x4e, 0x04, - 0xb1, 0x7f, 0xff, 0xe7, 0x07, 0x1b, 0xac, 0xfb, 0x8b, 0xbf, 0xcd, 0x67, - 0xf3, 0xb4, 0xac, 0x51, 0x22, 0xe7, 0xc8, 0xf7, 0xff, 0xff, 0x98, 0x83, - 0x90, 0x64, 0x3f, 0x3d, 0x87, 0x31, 0x98, 0x42, 0x86, 0x71, 0x62, 0xa5, - 0x13, 0xba, 0x22, 0xba, 0x1b, 0x2c, 0x5e, 0x68, 0x62, 0xc5, 0xe6, 0x8e, - 0x35, 0x62, 0xb7, 0x37, 0xa0, 0x1c, 0xbf, 0xff, 0xff, 0xff, 0x0d, 0x8e, - 0x76, 0x84, 0x24, 0x39, 0x1b, 0xe9, 0xba, 0x1f, 0xe7, 0x5c, 0x76, 0x62, - 0x9d, 0xff, 0x31, 0x2c, 0x5f, 0xc5, 0xe1, 0x7f, 0xbd, 0x95, 0x8b, 0x7a, - 0x51, 0xc8, 0xf0, 0xb1, 0xbf, 0xff, 0x8f, 0x9d, 0x7b, 0xed, 0xbb, 0x0f, - 0xdc, 0x27, 0x35, 0x62, 0xff, 0xe1, 0x6e, 0x58, 0x6f, 0xbc, 0xd0, 0xe2, - 0xc5, 0xfe, 0x93, 0xcc, 0x60, 0x41, 0x04, 0xb1, 0x4e, 0x98, 0x5b, 0x16, - 0x71, 0x7b, 0xb9, 0x1e, 0xb1, 0x52, 0x83, 0x4a, 0x11, 0xbf, 0xff, 0xff, - 0x77, 0x66, 0x9f, 0x66, 0x3e, 0xff, 0x7f, 0xbc, 0x97, 0xbe, 0xdb, 0xc9, - 0x0d, 0x62, 0xff, 0x76, 0xfe, 0x3f, 0xce, 0xcb, 0x17, 0xda, 0xd3, 0xec, - 0xb1, 0x4e, 0x7b, 0x20, 0x35, 0xa6, 0x4c, 0x00, 0xa1, 0xbf, 0x7f, 0xb3, - 0x5c, 0x6d, 0xc5, 0xd2, 0xc5, 0xff, 0xed, 0x7b, 0xcd, 0xb0, 0x67, 0x1f, - 0xdc, 0xd5, 0x8b, 0xff, 0x6d, 0x3b, 0x16, 0x7b, 0xd9, 0xb2, 0xc5, 0xdd, - 0x73, 0x11, 0x20, 0x1a, 0x7d, 0x62, 0x3d, 0x9a, 0x18, 0xd7, 0xfb, 0xac, - 0x7e, 0x70, 0x52, 0xb1, 0x7f, 0xec, 0xd4, 0x3c, 0xe3, 0xc2, 0x82, 0xc5, - 0x84, 0xb1, 0x73, 0xf6, 0x58, 0xbc, 0xf9, 0xa5, 0x8a, 0xf9, 0xb5, 0xf0, - 0xcd, 0xff, 0xfa, 0x40, 0x1c, 0x8c, 0x85, 0xe9, 0xe6, 0x75, 0xe5, 0x8b, - 0xcd, 0x0e, 0xf1, 0x62, 0xb6, 0x47, 0x0f, 0xd1, 0xc0, 0x43, 0xd9, 0x5e, - 0xff, 0xb1, 0xfb, 0x14, 0xe6, 0xa0, 0xb1, 0x7f, 0xfe, 0xf4, 0x32, 0x3d, - 0x88, 0x1d, 0x7b, 0x53, 0x81, 0x2c, 0x04, 0x6e, 0x6f, 0xbd, 0xf9, 0x02, - 0xc5, 0x80, 0xb1, 0x5d, 0x1b, 0x5d, 0x11, 0xd4, 0xaa, 0x5a, 0xc8, 0xc7, - 0xd9, 0xe4, 0x50, 0xa0, 0xbf, 0xff, 0x86, 0xfb, 0xfd, 0xc6, 0x3c, 0x08, - 0x38, 0xbe, 0x23, 0x56, 0x2f, 0xff, 0x69, 0xfb, 0x41, 0xfd, 0xf9, 0x3b, - 0x12, 0xc5, 0x62, 0x2b, 0x74, 0xc5, 0x7f, 0x7d, 0xbd, 0xcf, 0xca, 0xc5, - 0xff, 0xe8, 0x8a, 0x7d, 0xcf, 0x75, 0xbb, 0x96, 0xcb, 0x17, 0xff, 0xff, - 0xe6, 0x37, 0x34, 0xdd, 0x05, 0x07, 0xfc, 0xee, 0x4d, 0xd7, 0x1c, 0x84, - 0xdf, 0x58, 0xbf, 0xe6, 0x08, 0x7f, 0x9d, 0xb0, 0x25, 0x8a, 0x74, 0xc3, - 0xd9, 0x38, 0xa1, 0x0b, 0x7f, 0xfc, 0xe0, 0xc3, 0xbf, 0xb9, 0x27, 0x6e, - 0xbc, 0xb1, 0x7f, 0xff, 0x76, 0xc1, 0xea, 0x45, 0xc7, 0xec, 0xce, 0x31, - 0x4a, 0xc5, 0x62, 0x2b, 0x9d, 0x42, 0xff, 0xff, 0x6e, 0xda, 0x6f, 0xf5, - 0x0c, 0xf6, 0x7a, 0x45, 0xdf, 0xe2, 0xc5, 0xff, 0xcd, 0xd4, 0x1f, 0xdf, - 0x9d, 0x7a, 0x56, 0x2f, 0xfd, 0x06, 0xe7, 0x27, 0xf3, 0xbe, 0x2c, 0x5f, - 0xde, 0xc8, 0xa0, 0xfe, 0x58, 0xb4, 0xb9, 0xf7, 0x1c, 0xfe, 0xff, 0xfc, - 0xfa, 0xfe, 0x60, 0x5e, 0xcd, 0xb0, 0xd7, 0xd2, 0xc5, 0x41, 0x3b, 0x87, - 0x21, 0x3b, 0x3f, 0xa1, 0x67, 0xd8, 0x9a, 0xff, 0xff, 0x7d, 0xc6, 0x3c, - 0x0b, 0xaf, 0x09, 0xb9, 0xf0, 0x98, 0x6b, 0x17, 0xc2, 0x6d, 0x41, 0x62, - 0xfe, 0x29, 0xd8, 0x0d, 0xe5, 0x8b, 0xfc, 0xc3, 0x0f, 0xba, 0x4a, 0x0b, - 0x16, 0x9d, 0xcf, 0x94, 0xe5, 0xd7, 0xff, 0xc7, 0x62, 0x07, 0xc2, 0x62, - 0xdb, 0x77, 0xd9, 0x62, 0xff, 0xff, 0x9c, 0xa1, 0xcd, 0x85, 0xcc, 0xf4, - 0x93, 0x00, 0x9a, 0x0b, 0x17, 0xff, 0xf6, 0x9b, 0x98, 0x53, 0x80, 0xe6, - 0x45, 0x3d, 0x71, 0x62, 0xe7, 0xf3, 0x26, 0x26, 0x05, 0x31, 0x32, 0xd0, - 0xd3, 0xfe, 0x78, 0x44, 0x34, 0x67, 0x77, 0xfc, 0x20, 0x1d, 0xa1, 0xcd, - 0x0d, 0x62, 0xff, 0xff, 0x63, 0x97, 0xb0, 0x8c, 0x26, 0x1c, 0x96, 0xd3, - 0xa5, 0x8a, 0xf2, 0x26, 0x7b, 0x1d, 0xdb, 0x4b, 0x17, 0xff, 0xee, 0xbc, - 0x53, 0xf6, 0xe6, 0x6e, 0x4d, 0x9b, 0xac, 0x56, 0x22, 0x37, 0x72, 0x51, - 0x09, 0x5f, 0xf8, 0x5c, 0xc2, 0x6f, 0x80, 0x3e, 0x96, 0x2f, 0xff, 0xfe, - 0xc3, 0x81, 0xb5, 0x9d, 0xb0, 0x79, 0xc1, 0x37, 0x5f, 0x09, 0xbc, 0xb1, - 0x5a, 0x45, 0xb7, 0xd0, 0x6f, 0xf4, 0xfd, 0xfd, 0xc6, 0xe9, 0x62, 0xff, - 0xd9, 0xd7, 0xbd, 0x27, 0xfe, 0x6c, 0xb1, 0x7f, 0xd1, 0x6f, 0xf7, 0x3c, - 0xe8, 0xd5, 0x8b, 0xfc, 0x0c, 0xd6, 0x67, 0xb8, 0xb1, 0x7d, 0xb7, 0xb3, - 0x75, 0x8a, 0xc4, 0x4a, 0xf4, 0x7b, 0xa3, 0x3a, 0x96, 0x52, 0x7c, 0x08, - 0x87, 0x19, 0xee, 0x4a, 0x99, 0xdd, 0x47, 0xf2, 0x98, 0xca, 0x36, 0x0f, - 0x43, 0x98, 0x44, 0x61, 0x1a, 0x07, 0x0d, 0x6b, 0xd8, 0x06, 0x58, 0xbd, - 0xac, 0xe9, 0x62, 0xf7, 0xda, 0x1f, 0x37, 0x40, 0x1c, 0xbf, 0xf9, 0x9f, - 0xd2, 0x5b, 0xb9, 0xce, 0xeb, 0x17, 0xdf, 0x92, 0xf2, 0xc5, 0xce, 0x3f, - 0x9f, 0x2f, 0x10, 0xed, 0x9f, 0x46, 0x21, 0x42, 0x5e, 0xff, 0xb3, 0xae, - 0x0e, 0x58, 0xb6, 0x58, 0xbf, 0xcd, 0xc9, 0x2f, 0x7d, 0xd6, 0x2f, 0xc7, - 0x8b, 0x8e, 0x4b, 0x17, 0xff, 0x6e, 0xfa, 0xfe, 0x45, 0xf7, 0xd6, 0xcb, - 0x17, 0xdb, 0x36, 0x71, 0x62, 0xff, 0xe6, 0x06, 0x17, 0x5e, 0xd4, 0xe0, - 0x4b, 0x17, 0xfa, 0x4d, 0xcd, 0x07, 0xee, 0x2c, 0x5f, 0xe2, 0x29, 0xdb, - 0xf2, 0x35, 0x8b, 0xfd, 0x0e, 0x7e, 0x74, 0x18, 0xd6, 0x2b, 0x0f, 0xa5, - 0x8c, 0xea, 0x0a, 0x8c, 0x30, 0xb0, 0xd3, 0xad, 0xcc, 0xba, 0x29, 0x64, - 0x82, 0x23, 0xe2, 0x2f, 0xa1, 0x3f, 0x7e, 0x04, 0x4e, 0x2e, 0xfd, 0x62, - 0xff, 0xff, 0x7f, 0x37, 0x2c, 0x3e, 0x16, 0x78, 0x40, 0x3b, 0x41, 0x62, - 0xfe, 0xfb, 0x1c, 0xa7, 0xa5, 0x8b, 0xff, 0x16, 0x7f, 0x22, 0x83, 0xea, - 0x0b, 0x17, 0xff, 0xff, 0xc0, 0x92, 0xdd, 0xbc, 0xdd, 0x03, 0x3b, 0x3f, - 0xa1, 0xf7, 0xf7, 0x1c, 0x6b, 0x17, 0xfd, 0xd7, 0xbe, 0xc7, 0xce, 0xbc, - 0xb1, 0x7f, 0xff, 0xf8, 0x85, 0xff, 0x7e, 0x74, 0x0c, 0xd4, 0x09, 0xe1, - 0xfc, 0xc2, 0xdd, 0x62, 0xfd, 0xdf, 0xff, 0x00, 0xcb, 0x16, 0xce, 0x22, - 0x90, 0x4e, 0xf7, 0xfd, 0x39, 0xe2, 0xc0, 0x47, 0x62, 0xc5, 0xff, 0x9f, - 0xb3, 0xfa, 0x28, 0x49, 0x79, 0x62, 0xa5, 0x57, 0xfc, 0x0b, 0xf1, 0x83, - 0x72, 0xee, 0x8f, 0xf5, 0x08, 0x02, 0x87, 0x07, 0x0a, 0x3c, 0x75, 0x7f, - 0xf9, 0xb2, 0x1f, 0xc7, 0x2c, 0x04, 0x76, 0x2c, 0x5e, 0x68, 0x46, 0x46, - 0x8e, 0xae, 0xd2, 0x63, 0xf6, 0x84, 0x65, 0x83, 0x8d, 0x93, 0x27, 0x9a, - 0xb7, 0x8e, 0xd3, 0xa8, 0x6a, 0xb9, 0x0c, 0x51, 0xa2, 0x6a, 0x38, 0xb3, - 0x91, 0x7e, 0x55, 0x33, 0x46, 0x54, 0x08, 0xc7, 0x7b, 0xf2, 0x62, 0x95, - 0x1d, 0xca, 0x5a, 0x1f, 0xa5, 0xf7, 0x07, 0x2e, 0x13, 0xba, 0x11, 0x37, - 0x77, 0xf8, 0xb1, 0x78, 0x01, 0xf4, 0xb1, 0x7f, 0xd9, 0xe9, 0xd6, 0x17, - 0xc4, 0xb1, 0x7f, 0xf3, 0xe8, 0x98, 0xd2, 0xcf, 0x48, 0x4b, 0x17, 0xd2, - 0x2e, 0xff, 0x16, 0x28, 0xd3, 0xeb, 0xf2, 0x25, 0xff, 0x43, 0x3d, 0xf7, - 0x9d, 0x01, 0x62, 0xfb, 0x76, 0x86, 0x2c, 0x58, 0x0b, 0x15, 0x86, 0xd5, - 0xc8, 0xef, 0xf6, 0x0d, 0xcb, 0xd9, 0xf5, 0x8b, 0xff, 0xf8, 0x7f, 0x92, - 0xdb, 0x82, 0x67, 0x87, 0x3e, 0xd0, 0x58, 0xbf, 0xff, 0xff, 0x8b, 0x38, - 0x42, 0xff, 0xbf, 0x3a, 0x06, 0x6a, 0x04, 0xf0, 0xfe, 0x61, 0x6e, 0xb1, - 0x7b, 0x3f, 0x19, 0x1a, 0x95, 0x52, 0x48, 0xe0, 0xc8, 0x32, 0x14, 0x7d, - 0x11, 0xfd, 0xb8, 0x87, 0xf8, 0x64, 0x1a, 0xe5, 0xff, 0xff, 0xf0, 0xf2, - 0x33, 0x90, 0x7f, 0xcf, 0x50, 0xc3, 0xe7, 0x67, 0xf0, 0x24, 0x72, 0xb1, - 0x79, 0xe5, 0x96, 0x2f, 0x7a, 0x46, 0x91, 0x7f, 0xfb, 0xec, 0xfe, 0x98, - 0x3e, 0xb6, 0x10, 0x12, 0x2f, 0x6b, 0xbf, 0x8c, 0x93, 0xe8, 0xe0, 0xed, - 0xe6, 0xde, 0x32, 0x08, 0xbe, 0x1c, 0x20, 0xed, 0x18, 0x37, 0x6c, 0xd3, - 0xbc, 0xbb, 0xe3, 0xda, 0xc5, 0x2f, 0x4e, 0x1f, 0x0a, 0x13, 0xdd, 0xa3, - 0x40, 0xbf, 0xfd, 0x18, 0x76, 0x84, 0x66, 0x6b, 0x76, 0x6d, 0xd5, 0x23, - 0x09, 0x7d, 0x2e, 0x1f, 0xd6, 0x2f, 0xff, 0xff, 0xfa, 0x7c, 0x28, 0xc0, - 0xf7, 0x6d, 0x33, 0xed, 0x19, 0xbf, 0xde, 0x28, 0x66, 0xc6, 0x72, 0x67, - 0x65, 0x8b, 0xfd, 0xf9, 0x26, 0x3c, 0xf7, 0x2c, 0x5e, 0x70, 0xfe, 0xb1, - 0x7f, 0xff, 0x67, 0x66, 0x1f, 0xe6, 0x33, 0xdf, 0xc1, 0x8b, 0xdc, 0x58, - 0xbf, 0xfd, 0xa6, 0x04, 0x61, 0xbe, 0x80, 0x53, 0xc8, 0x2c, 0x5d, 0x91, - 0x83, 0x4f, 0x2b, 0xa2, 0x36, 0x85, 0x10, 0x0d, 0x48, 0x78, 0x36, 0x1b, - 0xbb, 0xce, 0xf8, 0xb1, 0x6e, 0xcb, 0x15, 0xde, 0x9b, 0x73, 0x91, 0xdf, - 0x9f, 0xff, 0xcd, 0x96, 0x2e, 0xef, 0x0e, 0xb1, 0x7f, 0x76, 0x7e, 0xb3, - 0x36, 0x58, 0xb0, 0xd6, 0x2b, 0x0f, 0x0f, 0xe6, 0x37, 0xf6, 0x42, 0x7f, - 0xbb, 0xac, 0x5f, 0xef, 0x7f, 0x08, 0x9b, 0xcb, 0x15, 0x1a, 0x23, 0x86, - 0x36, 0x60, 0xef, 0xa9, 0x0f, 0x71, 0x75, 0xfa, 0x01, 0xc2, 0x74, 0xb1, - 0x7f, 0xf7, 0x7b, 0x9d, 0x40, 0x4d, 0xe2, 0x98, 0x2c, 0x5f, 0x77, 0xde, - 0x40, 0xeb, 0x17, 0xe8, 0xd2, 0x34, 0xef, 0x23, 0xa3, 0x75, 0x8b, 0xbd, - 0x1a, 0x96, 0x2f, 0xb8, 0xe6, 0x62, 0xc5, 0xff, 0xd8, 0xe0, 0xc6, 0x7d, - 0x6f, 0x3e, 0x58, 0xbb, 0xa8, 0xf5, 0x8b, 0xf7, 0xdc, 0xf3, 0xba, 0xc5, - 0xd8, 0x73, 0x0f, 0x17, 0x71, 0xcb, 0xfa, 0x4f, 0x80, 0x9e, 0xcb, 0x17, - 0xff, 0xbd, 0xc1, 0x49, 0x9b, 0xfd, 0xe3, 0x9b, 0x65, 0x8a, 0x1a, 0x2b, - 0xfe, 0x5e, 0x45, 0xf7, 0xfd, 0x03, 0x3c, 0x46, 0x19, 0xf8, 0xe5, 0x8b, - 0xe9, 0x00, 0x67, 0x58, 0xbe, 0x9e, 0x48, 0x16, 0x2e, 0xd6, 0x6e, 0x78, - 0xc4, 0x49, 0x7e, 0xf3, 0x6c, 0xdc, 0x58, 0xbe, 0x93, 0xbe, 0x96, 0x2e, - 0xc2, 0x58, 0xa8, 0x8f, 0x87, 0x45, 0x3c, 0x22, 0xb8, 0x5c, 0x58, 0xa9, - 0x3c, 0x83, 0x98, 0x5f, 0x37, 0xc3, 0xe2, 0xc5, 0xe0, 0xf3, 0x65, 0x8a, - 0xf1, 0xe1, 0x88, 0x92, 0xff, 0xf3, 0x10, 0xb3, 0xc4, 0xdf, 0x2c, 0xd2, - 0xc5, 0xf4, 0x93, 0xc4, 0xb1, 0x7f, 0xfe, 0xcd, 0x8c, 0xcc, 0x2f, 0x7d, - 0x9f, 0x8f, 0xd9, 0x62, 0xf7, 0x61, 0x41, 0x62, 0xfd, 0xf9, 0x1b, 0x9a, - 0xb1, 0x46, 0xae, 0x3a, 0xee, 0x46, 0xf1, 0x9b, 0xc7, 0x97, 0xea, 0x10, - 0xe7, 0x86, 0xb7, 0xd9, 0x00, 0x44, 0x48, 0xfe, 0x22, 0xec, 0xaf, 0xdc, - 0x41, 0x7c, 0x76, 0x62, 0x58, 0xbf, 0xf4, 0xeb, 0x59, 0xf6, 0xf7, 0xe5, - 0x62, 0xff, 0x05, 0xf7, 0xf7, 0x1b, 0x4b, 0x17, 0x8b, 0x92, 0xb1, 0x51, - 0xa2, 0x2c, 0x36, 0x21, 0xc3, 0xe6, 0x35, 0xbe, 0x1e, 0xf2, 0x75, 0x8b, - 0xc1, 0xf0, 0x96, 0x2f, 0x82, 0xf6, 0x7d, 0x62, 0xfe, 0x01, 0x9e, 0x9e, - 0xa0, 0xb1, 0x52, 0x7a, 0xac, 0x49, 0x4e, 0x8b, 0x7f, 0x92, 0x13, 0x9d, - 0x99, 0x62, 0xfe, 0xd6, 0x17, 0x7a, 0x16, 0xeb, 0x15, 0x11, 0xe3, 0x30, - 0x8d, 0xd1, 0xbf, 0x96, 0x2f, 0xa2, 0x70, 0xa2, 0x58, 0xbf, 0xd2, 0x77, - 0xfc, 0xe1, 0x2c, 0x5c, 0xdc, 0x58, 0xa3, 0x9f, 0x77, 0x89, 0xbb, 0x18, - 0xdf, 0xde, 0x9e, 0xc4, 0xdd, 0x2c, 0x5f, 0x8b, 0x77, 0x2c, 0x58, 0xbf, - 0xf1, 0x60, 0xf3, 0xfe, 0x9e, 0xa0, 0xb1, 0x7e, 0xdb, 0xd8, 0xe3, 0x58, - 0xad, 0x1f, 0x41, 0x1f, 0xdf, 0xfb, 0x83, 0xd1, 0x30, 0x59, 0xd7, 0x96, - 0x2f, 0xf0, 0x45, 0x9d, 0x7b, 0x3e, 0xb1, 0x52, 0x89, 0x7c, 0x21, 0x74, - 0x1b, 0xfc, 0x6f, 0xe4, 0x6f, 0x3d, 0xcb, 0x17, 0xf7, 0xb3, 0xad, 0xdc, - 0x96, 0x29, 0x8f, 0x9b, 0xc6, 0xf7, 0xef, 0xe0, 0xe7, 0x65, 0x8b, 0xf6, - 0xde, 0x35, 0xb4, 0xb1, 0x69, 0xe8, 0xf5, 0x18, 0xa6, 0xfc, 0xda, 0x83, - 0x1d, 0x62, 0xa5, 0x5c, 0x58, 0xc8, 0xb2, 0x11, 0x7d, 0x18, 0xb9, 0x87, - 0xe3, 0x26, 0x68, 0x49, 0x93, 0xa8, 0x89, 0xec, 0x75, 0x8b, 0xfd, 0xef, - 0xb3, 0xf1, 0xfb, 0x2c, 0x5a, 0x37, 0x58, 0xa2, 0x3c, 0xc8, 0xe3, 0x5b, - 0xfd, 0xc9, 0xc2, 0x1f, 0xe5, 0x62, 0xfe, 0x9c, 0x21, 0xfe, 0x56, 0x2f, - 0x0b, 0x51, 0x18, 0x7b, 0xdc, 0x32, 0xbf, 0xf4, 0x36, 0x62, 0xc1, 0x94, - 0xee, 0xb1, 0x77, 0xe3, 0xd6, 0x2f, 0xfc, 0x6b, 0x44, 0x3d, 0x61, 0x60, - 0x4b, 0x17, 0xfb, 0x59, 0xb7, 0xa7, 0xa8, 0x2c, 0x5f, 0xff, 0xb9, 0x39, - 0xb7, 0x39, 0x9a, 0x06, 0x66, 0xb8, 0xb1, 0x50, 0x47, 0x41, 0xa3, 0x7b, - 0xa0, 0xf8, 0xda, 0xff, 0xe9, 0x87, 0xe4, 0x06, 0x1e, 0x73, 0xcb, 0x17, - 0xb6, 0x7d, 0x2c, 0x5f, 0x6e, 0x53, 0xf5, 0x8b, 0xfc, 0x11, 0x98, 0x3f, - 0xcf, 0x65, 0x8b, 0xff, 0x0b, 0x0d, 0xcf, 0x0a, 0x7a, 0x1a, 0xc5, 0x49, - 0xfc, 0xb9, 0xc5, 0xfe, 0x21, 0x7b, 0x3c, 0x1e, 0xcb, 0x15, 0xb2, 0x62, - 0x18, 0x3d, 0xa8, 0x4e, 0x78, 0x82, 0xec, 0x09, 0x62, 0xf4, 0x97, 0x96, - 0x2f, 0xf8, 0x79, 0x0f, 0xcf, 0x61, 0xca, 0xc5, 0xdd, 0xb6, 0x58, 0xa3, - 0x0f, 0x59, 0xce, 0xee, 0xd7, 0xdd, 0x12, 0x8c, 0xe5, 0x7f, 0xe1, 0xb7, - 0xe5, 0x9f, 0x59, 0xd2, 0xc5, 0x39, 0xf5, 0x86, 0x5b, 0x7f, 0xc1, 0x07, - 0xf9, 0xdf, 0xef, 0x12, 0xc5, 0xf0, 0x8f, 0x83, 0x58, 0xae, 0x8f, 0x87, - 0xb8, 0xfa, 0xff, 0x1f, 0x8f, 0x9d, 0x9b, 0x4b, 0x17, 0xff, 0xfd, 0xfc, - 0x86, 0x43, 0xf8, 0x58, 0x6f, 0xda, 0x19, 0x03, 0xac, 0x5f, 0xd0, 0xe3, - 0x67, 0x5e, 0x58, 0xac, 0x47, 0x83, 0x13, 0x78, 0xd4, 0x4c, 0xd7, 0xdc, - 0x0e, 0x76, 0x58, 0xbf, 0x6a, 0x61, 0xcc, 0x58, 0xbe, 0x7f, 0x67, 0x65, - 0x8a, 0x58, 0xbf, 0xd8, 0x17, 0x89, 0x81, 0xc5, 0x8a, 0x94, 0x46, 0x7c, - 0xa0, 0x89, 0x3c, 0x19, 0x7f, 0xff, 0xdb, 0xb6, 0xa7, 0xd3, 0x03, 0x03, - 0xf1, 0x60, 0x18, 0x80, 0xb1, 0x7b, 0xed, 0x05, 0x8a, 0x83, 0x21, 0x2b, - 0x17, 0xb7, 0x84, 0x17, 0x46, 0xcf, 0x19, 0x3c, 0x47, 0xfa, 0x8d, 0x54, - 0xe8, 0x7f, 0x8c, 0x5c, 0xa3, 0x73, 0xe1, 0xdf, 0xa1, 0x62, 0x23, 0xbe, - 0xcd, 0x17, 0xf9, 0xa0, 0xfd, 0x72, 0x7a, 0x58, 0xbf, 0xf7, 0x3f, 0x27, - 0xf7, 0x09, 0xba, 0x58, 0xbe, 0x21, 0x6a, 0x56, 0x2b, 0xa3, 0xe2, 0x64, - 0x0b, 0x8e, 0x05, 0x8a, 0xfa, 0x34, 0x5a, 0x12, 0xfc, 0x22, 0xbf, 0xf1, - 0x7e, 0x63, 0xfd, 0xc7, 0x28, 0x96, 0x2f, 0xff, 0xa4, 0xbd, 0xa9, 0x78, - 0x16, 0x1d, 0xa0, 0xb1, 0x7f, 0xc4, 0x2e, 0x16, 0x1b, 0x3c, 0x58, 0xbf, - 0x1c, 0xf8, 0x28, 0x96, 0x2f, 0xff, 0x4e, 0xfc, 0x17, 0x9f, 0xee, 0x6f, - 0xdd, 0x62, 0xfe, 0x3c, 0xe1, 0x7a, 0x39, 0x62, 0xfb, 0x4f, 0xd4, 0x16, - 0x2d, 0xc5, 0x8b, 0xf4, 0xe1, 0x7a, 0x39, 0x62, 0xf7, 0x1b, 0xa3, 0x11, - 0x20, 0xe6, 0x11, 0x12, 0x1c, 0x4a, 0x86, 0x9e, 0xe1, 0xa9, 0xba, 0x39, - 0x39, 0x57, 0xa1, 0xb9, 0x7f, 0xd1, 0xf8, 0x3f, 0xcc, 0x79, 0x4a, 0xc5, - 0x4a, 0xaa, 0xd7, 0x94, 0x3c, 0xca, 0x37, 0xfd, 0xad, 0xb7, 0xfb, 0xfc, - 0x5e, 0x58, 0xaf, 0x9f, 0x9b, 0x1b, 0x5f, 0x78, 0x2e, 0x6e, 0xb1, 0x7f, - 0x9c, 0xdd, 0x66, 0xd3, 0xb2, 0xc5, 0xfa, 0x4f, 0xd8, 0x10, 0x58, 0xac, - 0x44, 0x3f, 0x09, 0xbc, 0x6d, 0x77, 0x9d, 0x62, 0xe1, 0x62, 0xc5, 0xda, - 0xe2, 0xc5, 0x40, 0xfd, 0x4d, 0x2f, 0x00, 0xbc, 0x70, 0xbd, 0xff, 0xf0, - 0xb5, 0x3b, 0x85, 0x8f, 0xfd, 0xdf, 0x6e, 0xe5, 0x8b, 0xd2, 0xfb, 0xac, - 0x54, 0x0f, 0xd2, 0x25, 0x7b, 0xd9, 0xe7, 0x58, 0xbe, 0x9d, 0x66, 0xcb, - 0x17, 0xb5, 0x3d, 0x96, 0x2e, 0x9f, 0x2c, 0x54, 0x9b, 0x6d, 0x0f, 0xdf, - 0xb7, 0x7e, 0x7d, 0xd6, 0x2f, 0xec, 0x72, 0xf0, 0xbe, 0xb1, 0x5d, 0x1e, - 0xb7, 0xca, 0x6f, 0xdb, 0x93, 0xf5, 0x05, 0x8b, 0x83, 0xfa, 0xc5, 0x44, - 0x9b, 0xa6, 0x88, 0xfe, 0x39, 0xc5, 0x9f, 0x3b, 0x08, 0x8e, 0x38, 0xaa, - 0xf1, 0xcc, 0xc5, 0x8b, 0xf3, 0x8b, 0xbf, 0x8e, 0x75, 0x8b, 0xfb, 0x58, - 0xff, 0x91, 0xac, 0x5f, 0x6f, 0xec, 0xdd, 0x62, 0xe1, 0x71, 0x62, 0xb0, - 0xde, 0xe8, 0x96, 0xfa, 0x4a, 0x2d, 0xd6, 0x2f, 0xff, 0x49, 0x67, 0xbf, - 0x9e, 0xfc, 0x8b, 0xbf, 0x58, 0xbf, 0x4c, 0x4c, 0xda, 0x58, 0xad, 0x22, - 0x6b, 0xe4, 0x9c, 0x4e, 0xbf, 0x9f, 0x46, 0x31, 0x01, 0x62, 0xec, 0xe9, - 0x62, 0xf4, 0x9f, 0x16, 0x2b, 0xe6, 0xd3, 0xb0, 0xc5, 0xff, 0xfe, 0x0b, - 0xbb, 0xd9, 0xf3, 0x0b, 0x36, 0x7c, 0x2e, 0xa1, 0xc5, 0x8b, 0xf7, 0x33, - 0xc1, 0xec, 0xb1, 0x77, 0xf7, 0x58, 0xb8, 0x2f, 0x49, 0xe2, 0x61, 0x5d, - 0x62, 0x36, 0x1a, 0x15, 0x75, 0x2a, 0xc9, 0x60, 0x3c, 0x33, 0x0c, 0x6a, - 0x78, 0x5d, 0x7c, 0xc1, 0x98, 0x8a, 0x1f, 0x77, 0xfb, 0xdf, 0xc1, 0xe1, - 0x41, 0x62, 0xff, 0xff, 0xfe, 0x67, 0xf4, 0xfc, 0xb3, 0xdf, 0x7f, 0x43, - 0x3f, 0xf6, 0x87, 0x05, 0x1d, 0x9f, 0x58, 0xbf, 0xed, 0xdc, 0x7e, 0xcf, - 0x94, 0xac, 0x5f, 0xf9, 0x81, 0xfc, 0x71, 0x8b, 0xdc, 0x58, 0xa7, 0x3f, - 0x82, 0x39, 0xa7, 0x4d, 0x57, 0xe6, 0x7e, 0x8c, 0x0a, 0xfb, 0x0f, 0x9f, - 0x58, 0xbf, 0xe2, 0xf6, 0x6f, 0xf9, 0x26, 0x58, 0xb8, 0x72, 0xb1, 0x6e, - 0xd2, 0x79, 0xf8, 0x71, 0x7e, 0x68, 0xb8, 0x1f, 0x65, 0x8b, 0xe1, 0x0f, - 0xf2, 0xb1, 0x50, 0x3d, 0x02, 0x2d, 0xbe, 0x86, 0x4f, 0x4b, 0x17, 0xfd, - 0x3b, 0x07, 0x0f, 0x89, 0xb6, 0x58, 0xbd, 0x9d, 0xa5, 0x62, 0xff, 0xbd, - 0xf6, 0x81, 0x9c, 0xf8, 0xd6, 0x28, 0x07, 0xb4, 0x43, 0xd7, 0xa7, 0xa8, - 0x2c, 0x54, 0xaa, 0x39, 0x81, 0xb6, 0x38, 0xbb, 0xc4, 0x44, 0x3a, 0x23, - 0x68, 0x4b, 0x91, 0x0d, 0xfe, 0x8b, 0x8c, 0x51, 0x39, 0xd6, 0x2f, 0xfa, - 0x06, 0x7d, 0xb7, 0x92, 0x1a, 0xc5, 0x61, 0xf8, 0x74, 0x6b, 0x73, 0x7d, - 0x62, 0xf3, 0xc9, 0x2c, 0x5f, 0x41, 0xb8, 0xeb, 0x17, 0xf1, 0x38, 0x0f, - 0x3d, 0x96, 0x2f, 0x68, 0x07, 0x58, 0xa7, 0x3c, 0xd1, 0x17, 0xdc, 0x7d, - 0x2c, 0x5f, 0xf1, 0x7b, 0xf9, 0xd4, 0x05, 0x12, 0xc5, 0xfe, 0x7f, 0x07, - 0xa9, 0xfc, 0xac, 0x5f, 0x89, 0xb7, 0x2c, 0x58, 0xbf, 0xa1, 0x9f, 0xfb, - 0x41, 0x62, 0xa5, 0x18, 0xb0, 0x3c, 0x73, 0x4f, 0x13, 0xd6, 0x27, 0xf9, - 0xd1, 0x17, 0xc5, 0xd8, 0x6f, 0x8d, 0xfe, 0x21, 0x14, 0x37, 0x6f, 0x3c, - 0xf7, 0x2c, 0x5f, 0x16, 0x39, 0xab, 0x17, 0xcf, 0x3d, 0x71, 0x62, 0xfc, - 0x1f, 0x8a, 0x40, 0xb1, 0x43, 0x44, 0x69, 0xc7, 0xfc, 0x45, 0xd8, 0x8e, - 0xff, 0xc3, 0x7d, 0x6e, 0x37, 0xed, 0x23, 0x58, 0xbf, 0xf6, 0xa4, 0x3e, - 0xb9, 0xde, 0xb6, 0x7d, 0x62, 0xf4, 0x1f, 0x8b, 0x17, 0x83, 0x63, 0xac, - 0x5f, 0xfc, 0x3d, 0x3f, 0x50, 0x2c, 0x36, 0x78, 0xb1, 0x7b, 0xd8, 0x12, - 0xc5, 0x0d, 0x32, 0x77, 0x42, 0x89, 0x1b, 0x43, 0xa4, 0x3d, 0xe4, 0x6b, - 0xff, 0x9f, 0x98, 0x3f, 0xc9, 0xf6, 0xc0, 0x96, 0x2f, 0xec, 0xee, 0xf7, - 0x50, 0x95, 0x8b, 0xf6, 0x7d, 0xbd, 0xc5, 0x8b, 0xff, 0x02, 0x61, 0x9d, - 0x7b, 0x61, 0x04, 0xb1, 0x47, 0x3e, 0xbf, 0x14, 0x5f, 0xe2, 0xc3, 0x9f, - 0x05, 0x12, 0xc5, 0xf7, 0x7f, 0xf7, 0xe2, 0xc5, 0x49, 0xff, 0x68, 0x88, - 0x46, 0x97, 0xd0, 0x7d, 0x6c, 0xb1, 0x73, 0x44, 0xb1, 0x74, 0x9f, 0xa3, - 0x79, 0xa2, 0x4b, 0xe7, 0xd3, 0x69, 0x62, 0xf7, 0x01, 0x1e, 0xb1, 0x7c, - 0xe3, 0xc3, 0xac, 0x5f, 0xde, 0x86, 0x6b, 0x38, 0x61, 0xe1, 0xc9, 0x0d, - 0xfe, 0x7f, 0xb8, 0x99, 0xfe, 0xb1, 0x50, 0x46, 0xdb, 0xb2, 0xfd, 0x12, - 0xf7, 0x18, 0x0b, 0x15, 0x2b, 0x9b, 0x99, 0x1b, 0x36, 0xea, 0xfd, 0x23, - 0x3c, 0x63, 0x7f, 0x6a, 0x68, 0xc2, 0x3c, 0x5f, 0x4b, 0x17, 0xd2, 0x77, - 0x82, 0xc5, 0xdf, 0x98, 0x1a, 0xed, 0x06, 0x5e, 0x92, 0x35, 0x62, 0xe6, - 0x82, 0xc5, 0xff, 0x4f, 0xfb, 0x9b, 0x61, 0x3e, 0x96, 0x2e, 0xe6, 0x2c, - 0x53, 0x9e, 0xa3, 0x1e, 0xdf, 0xff, 0xf8, 0xf2, 0xde, 0xf4, 0x9b, 0x9e, - 0xfc, 0x93, 0x7b, 0x8e, 0x4b, 0x17, 0xe9, 0xdc, 0x98, 0xeb, 0x17, 0xfe, - 0x98, 0x19, 0x9f, 0x7d, 0x7d, 0x96, 0x2b, 0xe7, 0xcf, 0xc2, 0x8a, 0x94, - 0x79, 0xbc, 0x34, 0x6f, 0x7e, 0x7e, 0xb1, 0x43, 0x54, 0x15, 0xd1, 0x64, - 0x78, 0xec, 0x4d, 0x7f, 0x8c, 0x4f, 0xc4, 0xd7, 0x0b, 0x65, 0x8b, 0xec, - 0xd4, 0xee, 0xb1, 0x74, 0x5c, 0x19, 0xbc, 0xf8, 0xcd, 0xfd, 0xed, 0x4e, - 0xf9, 0xa5, 0x8b, 0xff, 0xff, 0xd3, 0xff, 0xb7, 0x0c, 0xfb, 0x3f, 0x3f, - 0x80, 0x33, 0x59, 0xe6, 0xe9, 0x62, 0xfe, 0xfb, 0x8d, 0xf5, 0xba, 0xc5, - 0xf3, 0xf2, 0x60, 0xb1, 0x7f, 0xb3, 0xe0, 0x3e, 0x6a, 0x25, 0x8b, 0xba, - 0xe6, 0xe8, 0x86, 0x62, 0xf2, 0x22, 0xbf, 0x98, 0x1a, 0xd3, 0xe9, 0x62, - 0xf7, 0x8c, 0xc5, 0x8a, 0x94, 0xf9, 0x5c, 0xbb, 0x45, 0xed, 0x18, 0x00, - 0x0f, 0x03, 0x2e, 0xb0, 0x16, 0x2f, 0x9f, 0xb4, 0xfd, 0x62, 0xd8, 0xe6, - 0xdb, 0xc2, 0x57, 0xf8, 0x31, 0xb3, 0x6e, 0xdb, 0xac, 0x5f, 0xfe, 0xe6, - 0xb3, 0xb4, 0x97, 0x98, 0x85, 0x8b, 0x15, 0x88, 0x80, 0xf1, 0xb5, 0xf7, - 0xc5, 0xd7, 0x96, 0x2f, 0xfe, 0xfe, 0x4e, 0x8b, 0x0e, 0x71, 0x44, 0xb1, - 0x7f, 0x78, 0x30, 0x02, 0x7a, 0x58, 0xbf, 0xe7, 0xf3, 0xe1, 0xcb, 0x36, - 0x58, 0xa7, 0x3e, 0x9f, 0x98, 0xdf, 0xdc, 0x73, 0x4e, 0xde, 0x58, 0xbf, - 0xf7, 0x69, 0x36, 0x0e, 0x53, 0xa9, 0x58, 0xbf, 0xff, 0xf6, 0xb3, 0xb4, - 0x97, 0x8c, 0x0c, 0xa7, 0xec, 0xfe, 0x9f, 0x71, 0x62, 0xff, 0xdf, 0x76, - 0x01, 0x9a, 0xd0, 0xbe, 0xb1, 0x76, 0xf1, 0xb2, 0xc5, 0xf1, 0x37, 0xcd, - 0x58, 0xbd, 0xb0, 0xa0, 0xb1, 0x78, 0xb3, 0x86, 0x1f, 0x00, 0xc7, 0xb0, - 0x8e, 0xf9, 0x81, 0x01, 0xac, 0x5f, 0xe9, 0x3e, 0xe4, 0xd9, 0xba, 0xc5, - 0x0d, 0x57, 0x1e, 0xf0, 0xae, 0xe8, 0x85, 0xcb, 0xf4, 0x81, 0xe6, 0xee, - 0xd0, 0xa1, 0x08, 0xfc, 0x32, 0x3b, 0xe3, 0x3b, 0x77, 0x6c, 0xb1, 0x7f, - 0xb9, 0xfc, 0xee, 0x7c, 0x09, 0x62, 0xa5, 0x70, 0x6c, 0x64, 0x59, 0x2c, - 0x20, 0xd8, 0x47, 0x80, 0xae, 0xd1, 0xeb, 0x17, 0xb6, 0x98, 0xf5, 0x8b, - 0xf7, 0x23, 0x4d, 0x0b, 0x65, 0x8b, 0x47, 0xac, 0x5e, 0xc1, 0xf9, 0x62, - 0x9c, 0xd9, 0x68, 0x56, 0xfc, 0xd1, 0x3f, 0xb8, 0xb1, 0x7f, 0xff, 0x9f, - 0x8d, 0xee, 0xe7, 0xd9, 0xbb, 0xb3, 0x59, 0xe6, 0x89, 0x62, 0xb6, 0x4c, - 0xcf, 0x08, 0x4e, 0xc5, 0xf2, 0x0f, 0x14, 0xdf, 0x76, 0x68, 0xa2, 0x58, - 0xbf, 0xba, 0xf3, 0x31, 0xf8, 0xb1, 0x52, 0x7a, 0xce, 0x4f, 0x78, 0xb3, - 0xa5, 0x8b, 0xbd, 0x8b, 0x17, 0xfe, 0x7e, 0xd8, 0x3f, 0xe6, 0xf8, 0x4b, - 0x17, 0xfd, 0x0f, 0x48, 0x45, 0x3e, 0xe2, 0xc5, 0xfe, 0x92, 0x90, 0x33, - 0x77, 0x2c, 0x5e, 0xd3, 0x41, 0x62, 0xff, 0x0f, 0xf9, 0xbf, 0xe7, 0x4b, - 0x14, 0x34, 0x43, 0x68, 0xd0, 0x87, 0x6f, 0xdc, 0xcf, 0x6a, 0x56, 0x2d, - 0xe5, 0x8b, 0xff, 0x8a, 0x4e, 0xcf, 0xf6, 0xf7, 0xe5, 0x62, 0xba, 0x3d, - 0x4e, 0xfc, 0x4a, 0xa5, 0x3e, 0xa8, 0x0b, 0xf4, 0x80, 0xf0, 0xc0, 0xe1, - 0x78, 0x9f, 0x2e, 0x6d, 0xd6, 0x2f, 0xe7, 0x89, 0xb7, 0xe4, 0x16, 0x2f, - 0xff, 0xf8, 0x63, 0xc8, 0xe9, 0xd6, 0x10, 0xff, 0x21, 0x80, 0x13, 0xd2, - 0xc5, 0x6e, 0x8b, 0x3f, 0x8c, 0x31, 0x85, 0xff, 0xd2, 0xe5, 0x9e, 0xe4, - 0xfd, 0x8e, 0xb1, 0x7f, 0xc5, 0x9c, 0xe3, 0xff, 0x3c, 0xb1, 0x5a, 0x3f, - 0xae, 0xc8, 0x57, 0xff, 0xf3, 0x90, 0xf5, 0x9b, 0xfe, 0x7f, 0x9a, 0xd4, - 0x9a, 0xb1, 0x7f, 0xfa, 0x41, 0xc3, 0x3d, 0x0c, 0x8f, 0x62, 0x02, 0xc5, - 0x7d, 0x15, 0x44, 0xb9, 0x70, 0x67, 0x58, 0xbf, 0x0b, 0xb9, 0xf0, 0xeb, - 0x17, 0xec, 0xf7, 0xa6, 0x25, 0x8b, 0xfa, 0x7a, 0xe1, 0x9e, 0x75, 0x8b, - 0xf7, 0x98, 0xef, 0xe5, 0x8a, 0x35, 0x15, 0x9a, 0x2b, 0x39, 0x49, 0x18, - 0x52, 0xc5, 0xf4, 0xe4, 0x19, 0x62, 0x8e, 0x6b, 0x7e, 0x19, 0x71, 0xfc, - 0xb1, 0x7f, 0x43, 0xf8, 0xf0, 0xe2, 0xc5, 0xfc, 0xfe, 0x16, 0x9b, 0x86, - 0x1e, 0x36, 0x0c, 0x54, 0xa6, 0x2a, 0x36, 0xa6, 0x67, 0xbf, 0xfb, 0xf8, - 0xd1, 0x16, 0x0f, 0xf3, 0xc5, 0x8b, 0xfb, 0x0e, 0x59, 0xb3, 0x2c, 0x50, - 0xcf, 0xc5, 0xd1, 0x2f, 0xf7, 0x1f, 0xb0, 0xe4, 0x1b, 0x2c, 0x56, 0x1e, - 0xc3, 0x10, 0xdf, 0xfb, 0x20, 0xc4, 0x03, 0x02, 0xcf, 0xac, 0x5f, 0x7b, - 0x80, 0x12, 0xc5, 0xe7, 0x3f, 0x96, 0x2f, 0x10, 0x7e, 0x58, 0xbf, 0x08, - 0x6c, 0x40, 0x30, 0xdd, 0xb0, 0xed, 0xfc, 0x0d, 0x48, 0xbb, 0xfc, 0x58, - 0xbf, 0xb5, 0x21, 0x37, 0xf8, 0xb1, 0x7f, 0x03, 0x8f, 0x13, 0x84, 0xb1, - 0x52, 0x89, 0x2c, 0x33, 0x62, 0xfb, 0x74, 0xb1, 0x52, 0x9b, 0x74, 0x17, - 0xca, 0x19, 0xfc, 0x2d, 0xbf, 0x74, 0xc3, 0xfe, 0x2c, 0x5f, 0x0f, 0x0f, - 0x1c, 0xb1, 0x7f, 0x7d, 0xfc, 0x52, 0x75, 0x8b, 0xe9, 0xec, 0x52, 0xb1, - 0x79, 0xa1, 0x8b, 0x15, 0x28, 0xbb, 0x72, 0x98, 0x89, 0x8e, 0x5a, 0x44, - 0x75, 0x1b, 0xb3, 0x27, 0x66, 0x34, 0x88, 0x42, 0x84, 0x64, 0x19, 0x28, - 0x1f, 0x78, 0xc3, 0xde, 0x15, 0x51, 0x43, 0x38, 0xe4, 0x5f, 0x8f, 0x68, - 0xa1, 0xf1, 0xc2, 0x0f, 0x47, 0x5c, 0x28, 0x7e, 0x5f, 0xed, 0x4f, 0x0d, - 0x03, 0x44, 0xb1, 0x7f, 0xf7, 0x1b, 0xdf, 0xce, 0xdf, 0x61, 0x6c, 0xb1, - 0x7c, 0xfc, 0x11, 0xd6, 0x2f, 0xf0, 0x8d, 0xc8, 0x49, 0x6e, 0xb1, 0x7f, - 0x64, 0x7b, 0x10, 0x0c, 0x81, 0xec, 0x68, 0x8e, 0xff, 0x68, 0x11, 0x7d, - 0xc8, 0x6b, 0x17, 0xff, 0xcc, 0x71, 0xfe, 0x7f, 0x27, 0x17, 0x50, 0xe2, - 0xc5, 0xff, 0xec, 0xf7, 0xdf, 0x3a, 0xf6, 0x76, 0x9e, 0x2c, 0x5b, 0xf2, - 0x8d, 0x3f, 0x9a, 0x92, 0x95, 0xf3, 0x73, 0xdb, 0x2c, 0x5f, 0x9d, 0x80, - 0x67, 0x96, 0x2f, 0xfc, 0x5f, 0x97, 0x1b, 0xf3, 0x20, 0xb1, 0x7b, 0x07, - 0x05, 0x8b, 0xdc, 0x93, 0xac, 0x53, 0x1f, 0xb8, 0x0f, 0x78, 0x3b, 0x73, - 0x3a, 0xc5, 0x83, 0x58, 0xa7, 0x35, 0x20, 0x16, 0xbf, 0x81, 0xcf, 0xc9, - 0x79, 0x62, 0xa4, 0xf3, 0x98, 0x82, 0xfd, 0xdb, 0xee, 0x08, 0x96, 0x2f, - 0xda, 0xc3, 0x67, 0x8b, 0x15, 0x87, 0xaa, 0xe5, 0x97, 0xff, 0x36, 0xd3, - 0xbf, 0xde, 0x28, 0x08, 0xeb, 0x15, 0x2b, 0x8d, 0x5b, 0x1b, 0x42, 0x14, - 0x19, 0x18, 0xd1, 0xa6, 0x9f, 0x24, 0x68, 0x50, 0x14, 0x29, 0x78, 0xea, - 0x22, 0x0b, 0x8a, 0x56, 0x2f, 0xbf, 0x3c, 0x95, 0x8b, 0xc1, 0x8f, 0x16, - 0x2f, 0x77, 0xfc, 0x8d, 0x96, 0x2b, 0x63, 0xfe, 0x18, 0xb3, 0x11, 0x70, - 0x7a, 0xf7, 0x1f, 0x8b, 0x17, 0x8e, 0x66, 0xeb, 0x17, 0x3e, 0x96, 0x2f, - 0xff, 0x07, 0xdd, 0x02, 0xc1, 0xe0, 0x5a, 0xcd, 0x96, 0x28, 0x67, 0xcf, - 0x10, 0xbd, 0x18, 0x8a, 0xa6, 0x84, 0x3d, 0xfd, 0xb4, 0x50, 0x8d, 0xb5, - 0xb2, 0xc5, 0xfc, 0x79, 0x2f, 0x67, 0x96, 0x2f, 0x66, 0xe3, 0x58, 0xbe, - 0xf6, 0x10, 0x16, 0x2f, 0x7b, 0x36, 0x58, 0xbf, 0x39, 0x6c, 0x1f, 0x4b, - 0x17, 0x30, 0x52, 0x79, 0x23, 0x1e, 0xbf, 0xb3, 0x5a, 0x99, 0x1a, 0xc5, - 0x46, 0xe9, 0xa4, 0x49, 0xc6, 0x16, 0xb8, 0xf1, 0x35, 0xc7, 0x16, 0xdf, - 0xfd, 0xb7, 0xf0, 0x63, 0x7e, 0xb3, 0xaf, 0x2c, 0x5f, 0x6c, 0x18, 0xb6, - 0x58, 0xbe, 0x8a, 0x13, 0xb2, 0xc5, 0x49, 0xe6, 0x61, 0x3d, 0xef, 0xb1, - 0xab, 0x17, 0xf8, 0xb6, 0x2c, 0x14, 0xf1, 0x62, 0x96, 0x2f, 0x80, 0x19, - 0x41, 0x62, 0xcf, 0x26, 0xc3, 0xc1, 0x97, 0xc5, 0x9f, 0xc5, 0x8b, 0xe0, - 0xa2, 0xe4, 0xac, 0x5e, 0x93, 0xe2, 0xc5, 0xc0, 0x95, 0x8a, 0x73, 0x66, - 0x01, 0xcb, 0xe2, 0x96, 0xdd, 0x62, 0xfd, 0x26, 0xe7, 0xb8, 0xb1, 0x7f, - 0xff, 0x61, 0x38, 0xf9, 0x9c, 0xe6, 0x7d, 0xf8, 0x2d, 0x96, 0x2f, 0xe1, - 0xe9, 0xbd, 0xf1, 0x2c, 0x5c, 0xde, 0x82, 0x22, 0xb8, 0xb7, 0x7f, 0x3f, - 0xc4, 0x73, 0xba, 0xc5, 0xff, 0xc2, 0x86, 0x70, 0xcf, 0x3c, 0x76, 0x6c, - 0xb1, 0x50, 0x3f, 0x82, 0x2e, 0xbe, 0xc8, 0x61, 0x2c, 0x53, 0x9e, 0x10, - 0x08, 0x6a, 0x55, 0xe8, 0xed, 0x09, 0x41, 0x90, 0x60, 0xf1, 0xac, 0x7b, - 0x92, 0xf4, 0x43, 0xa5, 0x83, 0x90, 0x7c, 0x88, 0xa1, 0x67, 0xe8, 0x74, - 0x5f, 0xff, 0x9b, 0xa8, 0x73, 0xf2, 0xfe, 0xe3, 0x97, 0x50, 0x58, 0xbd, - 0xe9, 0x02, 0xc5, 0x68, 0xfd, 0x09, 0x5e, 0xd1, 0x91, 0xbb, 0xea, 0x61, - 0xf7, 0x84, 0xdd, 0xec, 0x61, 0x51, 0xa2, 0x94, 0x6c, 0x55, 0xdf, 0x69, - 0x5d, 0xf5, 0x2a, 0x8d, 0x48, 0x33, 0x39, 0x27, 0xb4, 0x6e, 0x10, 0x87, - 0xc0, 0xe5, 0xff, 0xe5, 0x23, 0x58, 0xd8, 0xee, 0x37, 0x96, 0xa9, 0xd4, - 0x63, 0xaf, 0x28, 0xa2, 0x29, 0x71, 0xda, 0x9c, 0x06, 0x3c, 0xae, 0x0f, - 0xce, 0xe9, 0x34, 0xab, 0xc0, 0x4a, 0x85, 0xef, 0xe1, 0x24, 0x53, 0x98, - 0x1c, 0xa6, 0x7a, 0xfa, 0x75, 0xa0, 0x51, 0x8f, 0xf6, 0x3c, 0x0a, 0x18, - 0xf1, 0xd1, 0xb8, 0x07, 0x38, 0x5b, 0xdd, 0x19, 0x5d, 0xff, 0xf7, 0x7b, - 0x1b, 0xf7, 0xae, 0x1f, 0xf3, 0xa8, 0x67, 0x77, 0x16, 0x2e, 0x17, 0x96, - 0x2f, 0xe7, 0xf6, 0x6b, 0xd2, 0xb1, 0x76, 0xa5, 0x62, 0xa3, 0xcf, 0x72, - 0x21, 0x8e, 0xe2, 0xdb, 0xf6, 0x05, 0x9f, 0x65, 0x8b, 0xf9, 0xf6, 0x0f, - 0x69, 0xd9, 0x62, 0xff, 0xf7, 0x9f, 0xe2, 0xfb, 0x3f, 0x5c, 0x93, 0x56, - 0x2f, 0xff, 0x3f, 0x50, 0xe3, 0xfb, 0xf3, 0xaf, 0x4a, 0xc5, 0xfc, 0x0e, - 0x4c, 0x7e, 0xa5, 0x62, 0xb1, 0x19, 0x1a, 0x4c, 0x64, 0xbb, 0xfd, 0x3a, - 0x68, 0x9b, 0x90, 0x58, 0xbc, 0xcd, 0xba, 0xa4, 0xae, 0x2f, 0xe6, 0x0f, - 0xff, 0x63, 0xac, 0x56, 0xe7, 0xb3, 0xf2, 0xab, 0xf9, 0xf5, 0xf6, 0x0c, - 0xeb, 0x17, 0xcf, 0xe8, 0x4a, 0xc5, 0x0d, 0x30, 0x1d, 0x42, 0x37, 0xe4, - 0x7d, 0x8b, 0xef, 0xfe, 0x6f, 0x66, 0xc5, 0x83, 0xfe, 0x44, 0xb1, 0x7f, - 0xd3, 0xd1, 0x60, 0xff, 0x91, 0x2c, 0x57, 0xcf, 0xff, 0xb9, 0x16, 0xff, - 0xe6, 0xf6, 0x6c, 0x58, 0x3f, 0xe4, 0x4b, 0x17, 0xfd, 0x3d, 0x16, 0x0f, - 0xf9, 0x12, 0xc5, 0xff, 0xe9, 0xee, 0xe1, 0x31, 0x48, 0x7b, 0xc9, 0xcc, - 0x45, 0x27, 0xc9, 0x7b, 0x91, 0x6f, 0x8b, 0xbb, 0x8c, 0xb1, 0x7c, 0x59, - 0x14, 0xac, 0x5f, 0xff, 0xbe, 0xc5, 0xe8, 0xb3, 0x58, 0x66, 0x6f, 0x9e, - 0x58, 0xb4, 0x7a, 0xc5, 0xff, 0xe9, 0xdb, 0xce, 0x3c, 0x28, 0x3f, 0xc4, - 0xb1, 0x7d, 0xd4, 0x51, 0x12, 0xc5, 0x62, 0x3f, 0x9c, 0x88, 0xea, 0xff, - 0x15, 0x64, 0xab, 0xa4, 0xeb, 0x17, 0x70, 0x6b, 0x15, 0xa3, 0x5e, 0xc2, - 0xf7, 0xe6, 0x0f, 0x93, 0x8b, 0x17, 0xcf, 0xdb, 0x52, 0xb1, 0x7f, 0xf3, - 0x44, 0x23, 0x99, 0x3e, 0x7f, 0xca, 0xc5, 0x40, 0xfa, 0x88, 0x92, 0xa0, - 0x8b, 0x36, 0x84, 0x95, 0xfb, 0xd2, 0x52, 0x05, 0x8b, 0xff, 0x14, 0x82, - 0x58, 0x72, 0xf1, 0x2c, 0x5f, 0xf7, 0x5e, 0x8a, 0x7d, 0xf6, 0x89, 0x62, - 0xbc, 0x7f, 0x42, 0x3d, 0xb4, 0xe9, 0x18, 0x67, 0x85, 0x0d, 0xf6, 0xec, - 0xdb, 0xaa, 0x43, 0xc2, 0xf8, 0x50, 0xce, 0x2c, 0x5d, 0x19, 0x9a, 0x3d, - 0x42, 0x31, 0xbf, 0x7d, 0xf5, 0xf6, 0x58, 0xbc, 0x5e, 0x65, 0x8b, 0xb0, - 0x78, 0x78, 0x9c, 0x28, 0xa8, 0x22, 0x7c, 0xee, 0x77, 0xf4, 0xeb, 0x69, - 0xd6, 0xcb, 0x17, 0xfd, 0xd8, 0x3f, 0xb4, 0x40, 0xc8, 0x96, 0x2a, 0x07, - 0xdf, 0xe3, 0x0b, 0xfc, 0x09, 0x03, 0x10, 0xb1, 0x62, 0xff, 0xfe, 0x2c, - 0xee, 0xe1, 0x9c, 0x07, 0x63, 0x1b, 0x90, 0xd3, 0x2c, 0x5f, 0xcd, 0xf9, - 0x29, 0x02, 0xc5, 0x3a, 0x30, 0x7b, 0x19, 0x47, 0x31, 0xdf, 0xfd, 0xb4, - 0xeb, 0x7c, 0xe7, 0x30, 0x78, 0xb1, 0x52, 0x9a, 0xee, 0x43, 0x8d, 0x8d, - 0x2f, 0xd2, 0x3e, 0x77, 0x44, 0xb1, 0x7f, 0xee, 0xe9, 0xeb, 0x93, 0xc2, - 0x9f, 0x2c, 0x5f, 0xa2, 0x7f, 0x48, 0x16, 0x2f, 0xcd, 0xee, 0xe7, 0xd8, - 0xc3, 0xeb, 0x94, 0x2b, 0xf7, 0x7f, 0x90, 0xda, 0x25, 0x8b, 0x3f, 0x0f, - 0xc8, 0x48, 0x55, 0xb2, 0x66, 0x3e, 0x8c, 0x2a, 0xff, 0xa7, 0xb3, 0x44, - 0x3c, 0xc3, 0x56, 0x2f, 0xff, 0xfb, 0x45, 0x9b, 0x18, 0x59, 0xd8, 0xb3, - 0xbb, 0x86, 0x70, 0x1d, 0x96, 0x2f, 0xfc, 0x5b, 0x3e, 0xb8, 0x2e, 0x10, - 0x96, 0x2f, 0xfb, 0x3d, 0xc0, 0xf8, 0x66, 0xf0, 0x58, 0xbf, 0x8b, 0x3d, - 0xcc, 0x09, 0x62, 0xff, 0xff, 0x98, 0xb6, 0x1f, 0xe7, 0x99, 0xd7, 0x27, - 0x5e, 0xe6, 0x6c, 0xb1, 0x52, 0x9f, 0x64, 0x0a, 0xf0, 0xf1, 0xdc, 0x0e, - 0x80, 0xc7, 0xc1, 0x17, 0x5f, 0xed, 0xdf, 0x9f, 0x7f, 0x3a, 0xc5, 0xf8, - 0x73, 0xe9, 0x1a, 0xc5, 0xff, 0x39, 0x03, 0x53, 0xe6, 0xf2, 0xc5, 0xfb, - 0x36, 0x62, 0xe9, 0x62, 0xba, 0x45, 0xeb, 0x9a, 0x7c, 0xa0, 0x8e, 0x2f, - 0x7b, 0xbe, 0xf1, 0x62, 0xff, 0x0d, 0xb8, 0x09, 0xe8, 0x96, 0x2f, 0xfe, - 0x9e, 0x9c, 0xff, 0x6f, 0x14, 0x9d, 0x62, 0xfb, 0xd8, 0x40, 0x58, 0xae, - 0x91, 0x35, 0xa3, 0x4f, 0x22, 0x5f, 0xee, 0xe6, 0x1c, 0xe0, 0xdd, 0x62, - 0xd1, 0x91, 0xbb, 0x62, 0xb3, 0x30, 0xc1, 0xd8, 0xda, 0x05, 0x03, 0x87, - 0xd6, 0x46, 0x5f, 0xbc, 0x6d, 0x0e, 0xeb, 0x14, 0x64, 0x7a, 0x76, 0x3c, - 0x34, 0xff, 0x0e, 0xa6, 0x8c, 0x80, 0xa3, 0xef, 0xe4, 0xb5, 0x0f, 0x46, - 0x3f, 0xd8, 0xf0, 0x38, 0x5f, 0x77, 0x18, 0xde, 0xfb, 0x1d, 0x62, 0xfb, - 0x76, 0x6d, 0xd5, 0x26, 0x09, 0x61, 0xac, 0x56, 0x8f, 0x0f, 0xe6, 0x37, - 0x8d, 0x9d, 0x96, 0x2f, 0x67, 0x6c, 0x58, 0xb1, 0xd6, 0x2e, 0x7d, 0x11, - 0xb0, 0x10, 0xf5, 0xff, 0xf8, 0x4d, 0xb1, 0xf2, 0x38, 0x5a, 0xcd, 0x40, - 0x38, 0x2c, 0x57, 0xd1, 0x0e, 0x45, 0x77, 0x1b, 0xe5, 0x8b, 0x85, 0x05, - 0x8b, 0xf6, 0x16, 0x7b, 0x8b, 0x17, 0xec, 0xe0, 0x9b, 0xa5, 0x8b, 0xc2, - 0xe8, 0x0b, 0x17, 0xbc, 0x36, 0x58, 0xbc, 0x70, 0xce, 0xb1, 0x7f, 0x31, - 0xc3, 0xd3, 0x74, 0xb1, 0x7f, 0xff, 0xfe, 0x78, 0x6e, 0x42, 0x6d, 0x8f, - 0x91, 0xc2, 0xd4, 0x50, 0x9e, 0xb3, 0x50, 0x0e, 0x0b, 0x15, 0xa4, 0x5e, - 0x78, 0xc2, 0xd1, 0x92, 0xac, 0xd7, 0x18, 0x0d, 0x22, 0xde, 0x1a, 0xda, - 0x22, 0xf8, 0xcb, 0x0c, 0x11, 0x3f, 0x0a, 0x44, 0x3f, 0x1c, 0x3a, 0x1c, - 0x36, 0xef, 0xf4, 0x66, 0x6b, 0x76, 0x6d, 0xd5, 0x26, 0x51, 0x7f, 0xec, - 0xf4, 0x30, 0x11, 0xd9, 0xf1, 0x2c, 0x5e, 0x35, 0x89, 0x62, 0xff, 0xf6, - 0x30, 0xff, 0x9a, 0xd4, 0xf6, 0x36, 0x56, 0x2f, 0xb7, 0x66, 0xdd, 0x52, - 0x69, 0x97, 0xde, 0x29, 0x3a, 0xc5, 0xfb, 0x36, 0x2c, 0xec, 0xb1, 0x4e, - 0x79, 0x84, 0x45, 0x46, 0xa6, 0x0d, 0x1e, 0x3b, 0xa4, 0xcf, 0xbe, 0xd8, - 0x0b, 0x17, 0xa4, 0x5d, 0x2c, 0x5f, 0x66, 0xce, 0x12, 0xc5, 0x61, 0xea, - 0x7c, 0x48, 0x87, 0xaf, 0xdf, 0x6e, 0x80, 0xeb, 0x17, 0xbe, 0xdc, 0x58, - 0xbe, 0x6d, 0x7c, 0x58, 0x78, 0xc1, 0x94, 0xdf, 0xb3, 0x7f, 0x66, 0xeb, - 0x15, 0x03, 0xe3, 0xc3, 0x9b, 0xfc, 0x3f, 0xb4, 0x5f, 0x73, 0xac, 0x52, - 0xc3, 0x1b, 0x5b, 0xfd, 0x27, 0xc1, 0x94, 0xf4, 0xb1, 0x7e, 0x1b, 0x82, - 0x49, 0x62, 0xfb, 0x85, 0x20, 0x58, 0xbf, 0xde, 0x91, 0xbe, 0xa7, 0xb2, - 0xc5, 0x61, 0xeb, 0xb1, 0x15, 0xfd, 0xf6, 0xe4, 0xe7, 0x16, 0x2f, 0xe1, - 0x37, 0xdf, 0x09, 0x62, 0x86, 0xb8, 0x9f, 0x91, 0xa4, 0x6f, 0x09, 0x68, - 0xa1, 0xac, 0x75, 0x6f, 0x8d, 0xb1, 0x99, 0x3f, 0x70, 0x83, 0xc5, 0xb7, - 0xff, 0xf1, 0xe3, 0x1b, 0x9c, 0x62, 0x62, 0xcd, 0x8f, 0x3b, 0xac, 0x54, - 0x62, 0x3e, 0xf2, 0x13, 0xb7, 0xd8, 0x77, 0xf2, 0xc5, 0xd1, 0xb7, 0x7a, - 0xb1, 0x77, 0x7c, 0x8d, 0xfb, 0xd3, 0xc4, 0xef, 0x84, 0x57, 0xee, 0xf2, - 0x37, 0xef, 0x9d, 0xf3, 0xbe, 0x2c, 0x5f, 0x77, 0xc8, 0xde, 0x37, 0x8d, - 0x16, 0x2b, 0xbc, 0x3f, 0xfe, 0xfb, 0x46, 0xbe, 0xf3, 0x7f, 0x16, 0x2f, - 0xf4, 0xc5, 0xd9, 0xb7, 0x10, 0x16, 0x2a, 0x34, 0x3d, 0xae, 0xfa, 0x91, - 0x5e, 0x06, 0x71, 0x62, 0xff, 0x7d, 0xc2, 0x1b, 0x36, 0xeb, 0x15, 0xde, - 0x9e, 0x94, 0x6c, 0x3b, 0x7b, 0x4d, 0xba, 0xc5, 0xef, 0xbc, 0x4b, 0x17, - 0xe6, 0xeb, 0xc2, 0x95, 0x8a, 0x19, 0xf2, 0xb8, 0xf1, 0x0f, 0x5f, 0x86, - 0xc4, 0xdb, 0xac, 0x57, 0x7a, 0x7a, 0xbd, 0xf5, 0x2d, 0xbf, 0xa4, 0xf9, - 0xf7, 0x82, 0xc5, 0xfb, 0xbe, 0xfb, 0xde, 0x64, 0xac, 0x5f, 0xe3, 0x22, - 0x7f, 0x90, 0xbc, 0xb1, 0x4b, 0x17, 0xf7, 0x7d, 0x5b, 0xef, 0xdd, 0x2b, - 0x11, 0xb1, 0x32, 0xbb, 0xe2, 0x23, 0x7b, 0xea, 0x85, 0x7f, 0x83, 0x3e, - 0x7b, 0x8f, 0xc5, 0x8b, 0x3a, 0xc5, 0x46, 0xc7, 0x8d, 0x1c, 0x6b, 0x7f, - 0x77, 0xaf, 0xbc, 0xf5, 0xc5, 0x8b, 0xfd, 0x3b, 0x69, 0x87, 0xb3, 0x2c, - 0x5f, 0xff, 0xbe, 0xc5, 0xe8, 0x66, 0xb2, 0x48, 0xb3, 0xcb, 0x15, 0x04, - 0x43, 0xb9, 0xad, 0xff, 0xf3, 0x6c, 0xdd, 0xb8, 0x63, 0x76, 0xdf, 0xef, - 0xa5, 0x8b, 0xf7, 0x66, 0x1e, 0x1d, 0x62, 0xfe, 0xe3, 0x6c, 0x53, 0xb2, - 0xc5, 0xf3, 0x02, 0x3b, 0x16, 0x2f, 0xfb, 0x93, 0xf9, 0x1f, 0xd8, 0xd5, - 0x8a, 0x30, 0xf7, 0xfc, 0x4b, 0x76, 0x76, 0x58, 0xb7, 0x24, 0xde, 0x11, - 0x1d, 0xfb, 0xd2, 0x53, 0x12, 0xc5, 0xff, 0x43, 0x98, 0x53, 0xd9, 0x80, - 0xb1, 0x58, 0x7c, 0x5d, 0x14, 0x5f, 0x3f, 0x74, 0xf1, 0x62, 0xff, 0x9c, - 0x78, 0x73, 0x0e, 0xc3, 0x58, 0xbf, 0x3f, 0x74, 0x93, 0xac, 0x5e, 0x9f, - 0x71, 0x62, 0xa0, 0x88, 0x03, 0x9d, 0x11, 0x4d, 0xee, 0xe1, 0xca, 0xc5, - 0x39, 0xe7, 0x88, 0xbe, 0xfd, 0x25, 0xbf, 0xe5, 0x62, 0xff, 0x9f, 0x93, - 0xee, 0x4f, 0xe5, 0x62, 0xfd, 0x91, 0xd9, 0xa9, 0x58, 0xbf, 0x1e, 0x7a, - 0xe1, 0x92, 0x7c, 0x41, 0x9c, 0x5f, 0xfd, 0x9e, 0xfb, 0x9f, 0x3d, 0xc0, - 0xf8, 0xb1, 0x7f, 0xec, 0x60, 0x4c, 0x35, 0x38, 0x4b, 0x15, 0x28, 0xc3, - 0xdd, 0x05, 0xd1, 0xaf, 0x9f, 0xb7, 0xfb, 0x2c, 0x5f, 0x72, 0x4a, 0x25, - 0x8b, 0xe9, 0xee, 0x8b, 0x16, 0x2f, 0x9e, 0x4b, 0xcb, 0x14, 0xc7, 0xd4, - 0x44, 0x7c, 0x26, 0xbf, 0xfc, 0x39, 0x34, 0xc9, 0x7d, 0x4f, 0xa7, 0xeb, - 0x17, 0xed, 0xd8, 0xa4, 0x35, 0x8a, 0xc3, 0xf4, 0xfa, 0x5d, 0xff, 0xd1, - 0x07, 0x3b, 0x19, 0x3f, 0xcd, 0x62, 0xc5, 0x61, 0xf4, 0xb1, 0x0d, 0xfe, - 0xee, 0x70, 0x18, 0xdf, 0x12, 0xc5, 0x41, 0x7a, 0x68, 0x64, 0x58, 0xaf, - 0xd1, 0x53, 0xc3, 0x2a, 0x28, 0x43, 0x9c, 0x8b, 0xf0, 0xf4, 0x01, 0x09, - 0x46, 0x9b, 0xc2, 0xff, 0x42, 0x47, 0xb4, 0x61, 0x5d, 0xc4, 0x17, 0xc1, - 0x39, 0x91, 0xcb, 0x17, 0xff, 0xb0, 0xc9, 0xec, 0xda, 0xe4, 0xe9, 0xf8, - 0xb1, 0x77, 0x51, 0x2c, 0x5f, 0xf1, 0x60, 0xca, 0x77, 0x9d, 0x2c, 0x5f, - 0xff, 0xf7, 0x23, 0x1e, 0x27, 0xf9, 0x4e, 0x98, 0x0c, 0xe3, 0x92, 0x58, - 0xac, 0x4c, 0xb6, 0x22, 0x83, 0xa6, 0x30, 0xd0, 0x0e, 0x2f, 0xf1, 0xc3, - 0x38, 0x0e, 0xe0, 0x58, 0xbf, 0x19, 0xad, 0x0b, 0xeb, 0x17, 0xe7, 0x36, - 0x4b, 0x75, 0x8a, 0xe1, 0xea, 0x78, 0xae, 0xfc, 0x79, 0xf4, 0x8d, 0x62, - 0xfd, 0x31, 0x33, 0x69, 0x62, 0xde, 0x93, 0xd0, 0xe1, 0x45, 0x4a, 0x64, - 0x79, 0x08, 0xa7, 0x72, 0xbc, 0xf9, 0xb2, 0xc5, 0xff, 0xed, 0xfe, 0xff, - 0x7d, 0x4c, 0x41, 0x67, 0xd6, 0x2b, 0xe7, 0xd4, 0x43, 0xb7, 0xe6, 0xea, - 0x19, 0xe5, 0x8b, 0xc0, 0x2c, 0x58, 0xb8, 0xb1, 0x62, 0x8c, 0x36, 0x40, - 0x1c, 0xbc, 0x79, 0xd2, 0xc5, 0xff, 0x39, 0x9f, 0x6d, 0x4f, 0x69, 0x58, - 0xa9, 0x3d, 0x8e, 0x0e, 0xdf, 0xf1, 0xda, 0x11, 0xc2, 0xfb, 0xe9, 0x62, - 0xb6, 0x46, 0xc6, 0x9e, 0x8e, 0x43, 0x7e, 0x6e, 0x7a, 0x46, 0xb1, 0x52, - 0x7b, 0x22, 0x31, 0xbf, 0xcc, 0x10, 0x63, 0x1e, 0x04, 0xb1, 0x7f, 0x9b, - 0x50, 0x6f, 0x36, 0xeb, 0x17, 0xff, 0xb3, 0x0b, 0x00, 0x59, 0xef, 0xe4, - 0x16, 0x2a, 0x55, 0x40, 0x68, 0x87, 0xf1, 0xc6, 0x31, 0x08, 0x8d, 0xfb, - 0x8d, 0x2f, 0x1b, 0x30, 0x58, 0xbb, 0x7f, 0xac, 0x5f, 0xbb, 0x16, 0x70, - 0xcc, 0x36, 0xfe, 0x1e, 0xbf, 0xf1, 0x31, 0xa5, 0x80, 0xdb, 0x02, 0x58, - 0xbf, 0xf7, 0x3e, 0xe6, 0x4b, 0x8f, 0x0e, 0xb1, 0x47, 0x3f, 0xff, 0x20, - 0x5f, 0xfe, 0x2c, 0x37, 0xed, 0x0f, 0x84, 0xc1, 0x9d, 0x62, 0xa4, 0xfb, - 0xf0, 0x8a, 0x9d, 0x34, 0xdf, 0xc6, 0x5b, 0x7f, 0x49, 0x78, 0x65, 0x2b, - 0x17, 0xd0, 0xe1, 0xe0, 0xb1, 0x7f, 0xd2, 0x4f, 0xbb, 0x79, 0x8d, 0x58, - 0xbf, 0xb5, 0x9a, 0x00, 0x25, 0x62, 0xa5, 0x11, 0x66, 0x92, 0x39, 0xcd, - 0xf4, 0x87, 0x3f, 0x58, 0xb9, 0xf6, 0x58, 0xbc, 0xcd, 0xba, 0xa4, 0xdc, - 0x2e, 0x8b, 0x8b, 0x17, 0x3c, 0x4b, 0x17, 0xcd, 0xe6, 0x89, 0x62, 0xef, - 0x73, 0x86, 0xef, 0xb0, 0xc5, 0x6c, 0x8c, 0x5d, 0xc6, 0x1c, 0xa8, 0x35, - 0x4b, 0xff, 0x6e, 0x67, 0x07, 0xfc, 0xdf, 0x34, 0xb1, 0x7e, 0xf4, 0x45, - 0x23, 0x58, 0xa9, 0x3e, 0xc7, 0x43, 0xbf, 0xed, 0x7d, 0xb3, 0x5b, 0x3e, - 0xcb, 0x17, 0xde, 0xe6, 0x7d, 0x62, 0x9c, 0xf7, 0x98, 0xee, 0xfa, 0x29, - 0x1e, 0x2c, 0x5f, 0xc0, 0x3e, 0x70, 0x44, 0xb1, 0x71, 0x84, 0xb1, 0x7f, - 0x71, 0xf3, 0xb3, 0x69, 0x62, 0xfe, 0xe4, 0xeb, 0x58, 0x12, 0xc5, 0x40, - 0xfd, 0x8e, 0x31, 0xe2, 0xfa, 0x74, 0x69, 0xb4, 0x29, 0x2f, 0xe2, 0x33, - 0xf9, 0xd0, 0x4b, 0x17, 0xfb, 0x0f, 0xd4, 0x27, 0x3c, 0xb1, 0x76, 0x6b, - 0x0f, 0x94, 0x06, 0x37, 0xe2, 0x03, 0x75, 0xc5, 0x8b, 0xfb, 0x3b, 0x3f, - 0xce, 0xcb, 0x15, 0x28, 0x84, 0x62, 0xc2, 0x29, 0xbd, 0x31, 0x3a, 0xc5, - 0xce, 0x6a, 0xc5, 0xa4, 0x8d, 0xac, 0x70, 0xed, 0x41, 0x77, 0x3c, 0x65, - 0x26, 0xc2, 0xdf, 0xa2, 0xfd, 0x43, 0xa0, 0xf0, 0xab, 0xfb, 0xf3, 0x10, - 0x14, 0x3d, 0xb9, 0x18, 0x7f, 0x98, 0xaf, 0xfc, 0xc3, 0x26, 0xed, 0xf9, - 0x8b, 0x8b, 0x17, 0xfb, 0x73, 0x1b, 0xe4, 0xc0, 0x58, 0xa5, 0x8b, 0xd3, - 0xb9, 0x2c, 0x57, 0x8d, 0x4f, 0x60, 0xcb, 0xe2, 0x6d, 0xf1, 0x62, 0xfc, - 0x08, 0x8a, 0x4e, 0xb1, 0x4c, 0x79, 0x64, 0x45, 0x46, 0xa6, 0x5a, 0xe8, - 0x27, 0x5e, 0x66, 0xeb, 0xc7, 0x27, 0x58, 0xb1, 0x2c, 0x5f, 0xf7, 0xc4, - 0xdc, 0xcc, 0x23, 0x56, 0x2f, 0xff, 0xd3, 0xb9, 0x99, 0xf7, 0xd4, 0xff, - 0x08, 0x72, 0xb1, 0x7e, 0x79, 0x2f, 0x4a, 0xc5, 0xff, 0xff, 0x7a, 0x4e, - 0xfe, 0x7d, 0xf3, 0x41, 0xeb, 0x53, 0xe6, 0xf2, 0xc5, 0x86, 0xb1, 0x7b, - 0x8d, 0xd6, 0x1f, 0xd3, 0x34, 0x59, 0xc6, 0x9b, 0x01, 0xce, 0x7e, 0xab, - 0xe8, 0x50, 0x5f, 0xe6, 0x8c, 0x2c, 0xda, 0x4d, 0x58, 0xbd, 0x9d, 0xce, - 0xb1, 0x52, 0xa8, 0xaf, 0x07, 0x3f, 0x1b, 0x89, 0x24, 0x76, 0x37, 0xbf, - 0xe9, 0x62, 0xfe, 0x61, 0x6e, 0xb1, 0x74, 0x3b, 0xd5, 0x8b, 0xfc, 0x5b, - 0x13, 0x69, 0xa0, 0xb1, 0x52, 0x7a, 0x02, 0x1d, 0xbf, 0xfe, 0x9f, 0x7d, - 0x8e, 0x66, 0xf2, 0xe5, 0x3d, 0x96, 0x2a, 0x08, 0xfa, 0xe4, 0x21, 0xfb, - 0x88, 0x6f, 0xf1, 0x08, 0xf3, 0xcf, 0x3a, 0xc5, 0xfe, 0x72, 0x93, 0xcf, - 0x5c, 0x58, 0xbf, 0x4e, 0xb5, 0x9d, 0xcb, 0x15, 0x28, 0x91, 0x88, 0xcc, - 0x8c, 0xef, 0x86, 0x60, 0x67, 0x58, 0xbf, 0x86, 0x59, 0xd9, 0xa0, 0xb1, - 0x4e, 0x7a, 0xa2, 0x26, 0xbf, 0xff, 0x7e, 0x23, 0x0e, 0x2f, 0x3e, 0xd9, - 0xe3, 0x73, 0xeb, 0x17, 0xf1, 0x4c, 0x51, 0x60, 0x16, 0x2f, 0x6d, 0xce, - 0x2c, 0x5f, 0xfd, 0xb7, 0x9c, 0x78, 0x50, 0x7f, 0x89, 0x62, 0xd1, 0x2c, - 0x54, 0x9e, 0xc6, 0xe8, 0xb7, 0xf9, 0xfb, 0x67, 0xd8, 0xb6, 0x58, 0xbb, - 0x0e, 0xb1, 0x50, 0x3c, 0xce, 0x1a, 0xd8, 0x25, 0x8b, 0xd3, 0x9a, 0x58, - 0xbf, 0xdf, 0x98, 0x3c, 0x76, 0x1d, 0x62, 0xa0, 0x7c, 0xa3, 0x13, 0xe0, - 0xe5, 0xf8, 0xce, 0xb8, 0xe6, 0xac, 0x56, 0xc7, 0xb7, 0xd1, 0x7d, 0x74, - 0x98, 0x33, 0x43, 0x8a, 0xff, 0xd9, 0xf7, 0xd0, 0xff, 0x25, 0xba, 0xc5, - 0xf0, 0xf3, 0x82, 0x58, 0xbf, 0xf1, 0x67, 0xb9, 0x26, 0x7b, 0x37, 0x58, - 0xbe, 0x33, 0xd8, 0x05, 0x8b, 0xff, 0xb0, 0x0f, 0xa8, 0xcf, 0xe7, 0x69, - 0x25, 0x8a, 0x82, 0x61, 0xd8, 0x7e, 0xe4, 0x7f, 0x40, 0xf1, 0x25, 0xfe, - 0xea, 0x12, 0x5e, 0xc0, 0x2c, 0x5f, 0x70, 0x0f, 0xe5, 0x8a, 0x82, 0xe3, - 0x6e, 0xe4, 0x2e, 0xb7, 0x11, 0x7f, 0xdd, 0xda, 0x37, 0x4e, 0x46, 0x6e, - 0x24, 0x90, 0xcd, 0x2f, 0xcd, 0xaf, 0x67, 0xd6, 0x2f, 0xb3, 0x85, 0x2b, - 0x17, 0xfe, 0x70, 0x4c, 0x07, 0xf9, 0x2d, 0xd6, 0x2a, 0x08, 0x88, 0xf9, - 0x47, 0x88, 0x6f, 0x10, 0xb7, 0x58, 0xbf, 0x43, 0x35, 0x9c, 0x58, 0xa3, - 0x9e, 0x37, 0x87, 0xa9, 0x62, 0xf0, 0x9b, 0xcb, 0x17, 0x0a, 0x56, 0x2a, - 0x06, 0xd3, 0xc3, 0xb4, 0xb1, 0x7d, 0xd6, 0xef, 0xa5, 0x8b, 0x46, 0x62, - 0x24, 0xba, 0x40, 0x39, 0x0f, 0x83, 0x2f, 0xfd, 0x85, 0xd7, 0xb3, 0x30, - 0xb6, 0x58, 0xa3, 0xa2, 0x13, 0xc8, 0xd7, 0xd8, 0x32, 0x1a, 0xc5, 0x49, - 0xe2, 0xf6, 0x23, 0xbf, 0xb3, 0x9c, 0x62, 0xdd, 0x62, 0xff, 0x8b, 0xdf, - 0x68, 0x09, 0x83, 0x58, 0xa9, 0x54, 0xfd, 0x8e, 0xcf, 0x1b, 0xee, 0x88, - 0xd8, 0xba, 0xc4, 0xb1, 0x7b, 0x5d, 0xd2, 0xb1, 0x77, 0x8c, 0xef, 0x86, - 0xc6, 0x21, 0x1b, 0xcc, 0xfb, 0x2c, 0x56, 0x1e, 0x91, 0xa6, 0xb7, 0xee, - 0xe7, 0xec, 0xda, 0x58, 0xb8, 0x86, 0xb1, 0x67, 0x58, 0xb4, 0x72, 0xc5, - 0x00, 0xd3, 0x78, 0x46, 0xa5, 0x11, 0x63, 0x2d, 0x23, 0xdb, 0xc6, 0x46, - 0x91, 0xa2, 0xc5, 0xfd, 0x9a, 0xdd, 0x9b, 0x75, 0x49, 0x0e, 0x58, 0x6b, - 0x17, 0xfd, 0xac, 0xf1, 0x90, 0xdb, 0x8e, 0xb1, 0x74, 0x86, 0xb1, 0x68, - 0x46, 0x22, 0x8b, 0x63, 0xcc, 0x12, 0x23, 0xcb, 0xf4, 0x0c, 0xec, 0x79, - 0x58, 0xb4, 0x16, 0x2f, 0xe1, 0x78, 0xa7, 0xdc, 0x58, 0xa7, 0x3c, 0x00, - 0x09, 0x54, 0xaa, 0x78, 0x78, 0x56, 0xc4, 0x5c, 0xd0, 0xcb, 0x24, 0x51, - 0x36, 0x5e, 0xd1, 0xbb, 0xac, 0x5d, 0x87, 0x58, 0xbd, 0xec, 0xee, 0x58, - 0xb4, 0xee, 0x6d, 0xfc, 0x2f, 0x50, 0x3f, 0xe0, 0x2b, 0xdf, 0xc5, 0x9e, - 0xe6, 0x0d, 0x62, 0xfa, 0x63, 0xc5, 0x2b, 0x17, 0xa2, 0xc1, 0xac, 0x5e, - 0x8a, 0x7c, 0xb1, 0x52, 0x6f, 0x04, 0x3d, 0x5a, 0x46, 0x81, 0xc8, 0x80, - 0x5b, 0xc6, 0x1b, 0x84, 0x1a, 0xc5, 0xe6, 0x8e, 0x35, 0x62, 0xfd, 0xc6, - 0xfe, 0x6e, 0xb1, 0x5d, 0x1f, 0x18, 0x06, 0x78, 0x43, 0x7e, 0x89, 0xfa, - 0xee, 0xc5, 0x8b, 0x1d, 0x62, 0x8c, 0x37, 0xf2, 0x5b, 0x7e, 0xc2, 0x1f, - 0xe5, 0x62, 0x86, 0x79, 0x01, 0x10, 0xde, 0xcd, 0x32, 0xc5, 0xff, 0xff, - 0x79, 0xcb, 0xc2, 0xf9, 0x9e, 0x06, 0x77, 0x7d, 0xa2, 0x33, 0xb9, 0x62, - 0xff, 0xb2, 0x47, 0xf9, 0xee, 0x98, 0x96, 0x2f, 0xf0, 0x1f, 0xff, 0xc0, - 0x32, 0xc5, 0x6e, 0x8f, 0xc7, 0x1c, 0x3b, 0x88, 0x0f, 0x2f, 0xfd, 0x9e, - 0xe7, 0xf3, 0x5a, 0xc0, 0x96, 0x2f, 0xfc, 0x5d, 0xcc, 0x4c, 0x71, 0xe0, - 0xd6, 0x2a, 0x55, 0x99, 0xe4, 0x28, 0x1e, 0x16, 0xed, 0x18, 0xf8, 0x67, - 0xbd, 0xc8, 0x17, 0xff, 0xc3, 0x7e, 0xc6, 0x73, 0xcd, 0xd7, 0x0e, 0x28, - 0x2c, 0x5d, 0x30, 0x58, 0xbf, 0xce, 0x71, 0xc9, 0x9e, 0x75, 0x8a, 0x8f, - 0x3c, 0xbf, 0x8b, 0xdf, 0xff, 0xbf, 0x9a, 0x68, 0x9f, 0xe3, 0x29, 0x10, - 0xf1, 0x62, 0xff, 0x84, 0x06, 0x1f, 0xe4, 0xbb, 0x2c, 0x5f, 0xf9, 0x87, - 0x23, 0xfb, 0x93, 0x9d, 0x62, 0xff, 0xd0, 0x6e, 0x18, 0xfd, 0x41, 0xb8, - 0xb1, 0x7f, 0xcc, 0x03, 0x33, 0xcf, 0xac, 0x58, 0xbf, 0xe6, 0xd7, 0x1b, - 0xfc, 0x9d, 0x96, 0x2b, 0xa4, 0x5a, 0x12, 0x0f, 0x63, 0x9b, 0xf4, 0xf1, - 0xba, 0x02, 0xc5, 0xf7, 0xfb, 0x9f, 0x65, 0x8b, 0xec, 0x3f, 0x7c, 0x8d, - 0x4b, 0x15, 0xb9, 0xff, 0x80, 0xa7, 0xc4, 0xf7, 0xf0, 0xb7, 0xcf, 0x14, - 0xac, 0x5f, 0xfe, 0x9e, 0x7e, 0x4b, 0xc6, 0x45, 0xbf, 0xe2, 0x58, 0xae, - 0x1f, 0xef, 0x62, 0xea, 0xc5, 0x79, 0x2f, 0x0a, 0x18, 0x89, 0x74, 0xaa, - 0x73, 0xbf, 0xc3, 0xc4, 0xa1, 0x63, 0xe8, 0x56, 0xdf, 0xc5, 0xe3, 0x38, - 0x22, 0x58, 0xbf, 0x34, 0x21, 0x9c, 0x58, 0xbf, 0xf7, 0x5c, 0x33, 0xb6, - 0x48, 0xc5, 0xb2, 0xc5, 0xef, 0x66, 0xeb, 0x17, 0x66, 0xeb, 0x16, 0xc3, - 0x0d, 0xb7, 0x87, 0xaf, 0xfb, 0xed, 0xae, 0xbd, 0x2f, 0xb2, 0xc5, 0xfa, - 0x5c, 0xa7, 0xb2, 0xc5, 0xed, 0xff, 0x12, 0xc5, 0xe2, 0xdc, 0xcd, 0xcf, - 0x22, 0x22, 0x8a, 0x82, 0x2e, 0x9a, 0x10, 0x74, 0xe9, 0xed, 0x1c, 0xbd, - 0x8a, 0x09, 0xec, 0x50, 0xe1, 0xbf, 0xd0, 0x9d, 0x6d, 0x3a, 0xd9, 0x62, - 0xfa, 0x5b, 0x40, 0x58, 0xbf, 0x3f, 0xc8, 0x5e, 0x58, 0xbf, 0xdb, 0xbf, - 0x30, 0x6d, 0xba, 0xc5, 0xfd, 0xfc, 0x27, 0xf8, 0x96, 0x28, 0x68, 0xac, - 0x88, 0x8b, 0xe5, 0x1e, 0x35, 0xbf, 0x6d, 0x3f, 0x6f, 0x2c, 0x5f, 0x9b, - 0x9d, 0xb3, 0x8b, 0x17, 0xe6, 0xf1, 0x93, 0x2b, 0x15, 0x29, 0xcd, 0xe4, - 0x38, 0x98, 0xf8, 0x05, 0x22, 0x2a, 0xbf, 0x19, 0xfc, 0x03, 0x2c, 0x5f, - 0xed, 0x4f, 0xd8, 0x70, 0x3a, 0xc5, 0xfe, 0x7e, 0xd3, 0xbe, 0x9b, 0xb2, - 0xc5, 0xfe, 0x7f, 0x47, 0x61, 0x31, 0xab, 0x15, 0xb1, 0xf7, 0x1c, 0xe2, - 0xfc, 0x66, 0xc2, 0xd4, 0x16, 0x2f, 0x66, 0x71, 0x62, 0xfe, 0x83, 0x6b, - 0x3a, 0xf2, 0xc5, 0xfc, 0x36, 0x3f, 0xdc, 0x25, 0x8a, 0x93, 0xde, 0xc2, - 0xfb, 0xfe, 0xcf, 0x70, 0x3e, 0x69, 0xb8, 0xb1, 0x7f, 0xd3, 0xf7, 0x35, - 0xf6, 0x63, 0xac, 0x5d, 0xb6, 0xcb, 0x17, 0xc6, 0x1b, 0x83, 0x58, 0xbc, - 0x0f, 0x3a, 0xc5, 0x0c, 0xf7, 0x00, 0x34, 0x44, 0xb7, 0xe7, 0xf7, 0x19, - 0xd6, 0x2f, 0xfd, 0x81, 0x36, 0x8d, 0x9d, 0xf0, 0xeb, 0x17, 0xff, 0xdf, - 0x7e, 0x0b, 0x6d, 0xfe, 0xfe, 0xf6, 0x6c, 0xb1, 0x7e, 0x8b, 0x0d, 0x7d, - 0x2c, 0x56, 0x1f, 0xf3, 0xaa, 0x5f, 0xe0, 0x69, 0x8b, 0xd8, 0x05, 0x8b, - 0xff, 0x9b, 0xd0, 0x63, 0x22, 0x84, 0xeb, 0x65, 0x8a, 0xd1, 0xfd, 0x80, - 0xce, 0xfe, 0x93, 0x22, 0xdf, 0xf1, 0x2c, 0x56, 0xcb, 0x91, 0x23, 0x29, - 0xc8, 0x51, 0x39, 0x1c, 0x45, 0x9a, 0x7a, 0x39, 0x07, 0xce, 0xda, 0x12, - 0xc0, 0x2e, 0x22, 0x7e, 0x42, 0xfc, 0x50, 0x9b, 0xee, 0x22, 0xbc, 0x1e, - 0xa0, 0xb1, 0x7f, 0xc5, 0x3d, 0xa2, 0x7f, 0x7e, 0x56, 0x2f, 0xe0, 0xfc, - 0x29, 0xcd, 0x96, 0x2f, 0xe0, 0x7d, 0x9f, 0xe2, 0x58, 0xbd, 0xc2, 0x82, - 0xc5, 0x41, 0x1a, 0xae, 0x3f, 0x11, 0xde, 0x8c, 0x3c, 0x5d, 0x7e, 0xce, - 0xd9, 0xa8, 0x2c, 0x52, 0xc5, 0xf6, 0xe5, 0x3e, 0x23, 0x6d, 0x1c, 0x55, - 0x7e, 0x6e, 0x73, 0x6e, 0x2c, 0x5f, 0xcc, 0x40, 0x0c, 0x1c, 0x58, 0xbf, - 0x78, 0x98, 0x1c, 0x58, 0xbd, 0xc3, 0xb2, 0xc5, 0xfe, 0x23, 0x43, 0xff, - 0xc5, 0xc5, 0x8a, 0x35, 0x15, 0x7d, 0x17, 0xc4, 0x50, 0x21, 0xdb, 0xff, - 0x85, 0xcf, 0xb4, 0x24, 0x87, 0x9f, 0x58, 0xbf, 0xe0, 0xe4, 0x11, 0x42, - 0x75, 0xb2, 0xc5, 0xfc, 0x4d, 0xe0, 0xe7, 0x75, 0x8a, 0x39, 0xf6, 0x11, - 0xed, 0xf1, 0x03, 0x60, 0x2c, 0x5f, 0xff, 0xe8, 0xb8, 0xe3, 0x32, 0x27, - 0x2e, 0xcd, 0x13, 0x78, 0x52, 0xb1, 0x58, 0x8a, 0xb7, 0x21, 0x62, 0x4b, - 0xff, 0xc5, 0xe9, 0x07, 0xd8, 0xbb, 0x67, 0x5c, 0x58, 0xbd, 0xa6, 0xd2, - 0xc5, 0x39, 0xf4, 0xc4, 0x99, 0x7f, 0xc1, 0x94, 0x33, 0xb1, 0x67, 0x16, - 0x2f, 0xf8, 0xfc, 0x33, 0x07, 0x25, 0xe5, 0x8b, 0xf4, 0x0c, 0xe7, 0x31, - 0x62, 0xff, 0x70, 0xcf, 0x18, 0x3c, 0x25, 0x8b, 0x01, 0x62, 0xba, 0x3c, - 0x8d, 0x1b, 0x54, 0xa3, 0x3f, 0x0e, 0x9d, 0xca, 0xfe, 0x16, 0xff, 0x9d, - 0x62, 0xc5, 0xf7, 0x5c, 0xf3, 0xac, 0x56, 0x1e, 0x9b, 0x17, 0xd4, 0xae, - 0xc6, 0x64, 0x20, 0x0d, 0x3a, 0x78, 0x6a, 0xe9, 0x03, 0xf1, 0xad, 0xb4, - 0x25, 0x80, 0x44, 0x51, 0x85, 0x72, 0x10, 0x17, 0xff, 0x43, 0x3b, 0xa1, - 0x9e, 0x9f, 0x73, 0x16, 0x2f, 0xff, 0xfe, 0x67, 0xf4, 0x96, 0xee, 0x73, - 0xbf, 0x39, 0x9f, 0x7e, 0x0b, 0x65, 0x8b, 0x19, 0xd2, 0x2e, 0x7e, 0x8f, - 0x7e, 0x61, 0x1b, 0x21, 0xac, 0x5f, 0x66, 0xa7, 0x8b, 0x17, 0xb7, 0xef, - 0x74, 0xb1, 0x51, 0xb1, 0xe3, 0x08, 0x8a, 0xb1, 0x18, 0x51, 0x15, 0x93, - 0x85, 0xf4, 0x6f, 0x1b, 0xc6, 0xfd, 0xe2, 0xc5, 0xf4, 0x50, 0x11, 0xab, - 0x17, 0xf6, 0x79, 0xc7, 0x87, 0x58, 0xbe, 0x28, 0x39, 0xd6, 0x2c, 0x64, - 0x47, 0x9e, 0xc5, 0xb7, 0xf3, 0x97, 0x66, 0x8b, 0xbe, 0xab, 0x17, 0xf4, - 0xc5, 0xd4, 0x33, 0xb2, 0xc5, 0xff, 0xa4, 0xa7, 0x86, 0x04, 0xdd, 0x71, - 0x62, 0xa2, 0x45, 0x5f, 0x0e, 0x3c, 0x65, 0x77, 0x79, 0x1a, 0x2c, 0x5e, - 0x1e, 0x1d, 0x62, 0xfc, 0xcd, 0xd4, 0x38, 0xb1, 0x7b, 0xbb, 0xcc, 0x61, - 0xe3, 0x68, 0x76, 0xa3, 0x75, 0x4a, 0x32, 0x70, 0x37, 0x56, 0x86, 0xa7, - 0x8c, 0x43, 0x68, 0xbb, 0x80, 0x58, 0xbf, 0xa1, 0xc6, 0x38, 0xf8, 0xb1, - 0x46, 0x1e, 0x3b, 0x0c, 0x52, 0xc5, 0x2c, 0x5b, 0x80, 0x2e, 0x38, 0x19, - 0x7f, 0xfd, 0xf9, 0x0e, 0x33, 0xc4, 0xc0, 0xe7, 0x24, 0x09, 0x17, 0x1b, - 0x8b, 0x14, 0x33, 0xec, 0x35, 0x52, 0xe1, 0xe2, 0xc5, 0x2c, 0x5f, 0x4e, - 0xcd, 0xc5, 0x8a, 0x8d, 0x46, 0xbf, 0x60, 0xca, 0x31, 0x32, 0x3c, 0x84, - 0x93, 0x91, 0xb2, 0x35, 0xfd, 0xdc, 0xc0, 0x3c, 0xf1, 0x62, 0xfd, 0xcc, - 0xed, 0xf7, 0x58, 0xba, 0x40, 0xb1, 0x4b, 0x01, 0x96, 0xf5, 0xe3, 0xdd, - 0x12, 0x0d, 0x7d, 0x16, 0x00, 0x84, 0x75, 0xfe, 0x11, 0x78, 0xc2, 0x00, - 0x16, 0x2f, 0xb9, 0xdb, 0x38, 0xb1, 0x7f, 0xee, 0x76, 0x68, 0xb6, 0x62, - 0x68, 0x96, 0x2f, 0xfd, 0x3d, 0xd1, 0x37, 0x66, 0xf7, 0x69, 0x58, 0xbf, - 0xf6, 0x0e, 0x61, 0x3a, 0x3f, 0xba, 0x58, 0xbf, 0x98, 0x11, 0x14, 0x8d, - 0x62, 0xff, 0x8b, 0x36, 0x1f, 0xf0, 0xbc, 0xb1, 0x7b, 0xcf, 0xc5, 0x8b, - 0xfb, 0x53, 0xda, 0x4b, 0xcb, 0x17, 0xff, 0x64, 0x30, 0x8c, 0xfc, 0xc4, - 0x21, 0xac, 0x53, 0x9f, 0xa8, 0x0b, 0xea, 0x55, 0x32, 0xec, 0x51, 0x86, - 0xb1, 0x12, 0xe9, 0x0c, 0xe8, 0xdf, 0x40, 0x22, 0xee, 0x1c, 0xfa, 0x12, - 0x57, 0xc6, 0x08, 0xce, 0xcb, 0x15, 0x1b, 0xbe, 0x83, 0x27, 0x79, 0x0c, - 0x3e, 0xf6, 0x11, 0x11, 0xa4, 0x20, 0x63, 0x68, 0x73, 0x77, 0xd9, 0x7f, - 0x7c, 0x2d, 0xef, 0xac, 0x30, 0x63, 0x53, 0xbc, 0x6b, 0x2a, 0x99, 0xf5, - 0x6d, 0xa5, 0x09, 0xc2, 0x36, 0xd1, 0xcb, 0x1d, 0xc9, 0xfb, 0x33, 0x63, - 0xe2, 0xde, 0x53, 0x47, 0x51, 0xa5, 0xbc, 0x32, 0x62, 0x9c, 0xf1, 0xd4, - 0xb9, 0x43, 0xcb, 0x49, 0xfc, 0xe7, 0x0b, 0x4e, 0x19, 0x02, 0x52, 0xf9, - 0x47, 0xd1, 0xc9, 0xcd, 0x6f, 0x4f, 0x9c, 0x0a, 0x51, 0x2f, 0x69, 0x50, - 0x01, 0x42, 0xa6, 0x3a, 0x35, 0xd0, 0xe5, 0xab, 0x77, 0x42, 0x46, 0xff, - 0xbe, 0xcf, 0x09, 0xf7, 0x31, 0x62, 0xfa, 0x60, 0xdd, 0x96, 0x2f, 0xef, - 0x75, 0xc7, 0x21, 0xac, 0x5f, 0xfd, 0xac, 0xeb, 0x7f, 0xbf, 0xb8, 0xdd, - 0x2c, 0x5f, 0xa7, 0x9a, 0x10, 0x16, 0x2f, 0xff, 0xe3, 0xe7, 0xb8, 0x1f, - 0x0b, 0x3c, 0x20, 0x1d, 0xa0, 0xb1, 0x7d, 0x83, 0x68, 0x2c, 0x5e, 0x0c, - 0xa0, 0xb1, 0x4e, 0x78, 0x00, 0x22, 0xbb, 0x78, 0xc9, 0x4e, 0xeb, 0x63, - 0x87, 0x24, 0x01, 0x79, 0x24, 0x70, 0xa7, 0xd0, 0x9d, 0xa8, 0xc5, 0xcf, - 0xd1, 0x4e, 0x42, 0xdf, 0xe7, 0x8e, 0x0f, 0xa0, 0x72, 0x56, 0x2f, 0xa7, - 0x50, 0x3a, 0xc5, 0xff, 0x44, 0xd2, 0x53, 0x10, 0xa5, 0x62, 0xf7, 0xde, - 0x3d, 0x62, 0xff, 0xa1, 0x9e, 0x32, 0x4d, 0xd4, 0xac, 0x5f, 0x47, 0x66, - 0xa5, 0x62, 0xf7, 0x1a, 0x3d, 0x62, 0xde, 0x58, 0xac, 0x3d, 0x7e, 0x89, - 0x63, 0x88, 0x2f, 0xfe, 0x8b, 0xf9, 0xd4, 0x3b, 0x49, 0x44, 0x35, 0x8b, - 0xe1, 0x8b, 0xdc, 0x58, 0xa5, 0x8a, 0xc3, 0x60, 0x11, 0x25, 0xff, 0xf8, - 0xb2, 0x1f, 0x9d, 0x66, 0x11, 0xba, 0xd4, 0xac, 0x5f, 0xe6, 0xfb, 0x06, - 0x7c, 0xe2, 0xc5, 0xe6, 0xd1, 0xab, 0x17, 0xa4, 0x71, 0xba, 0xc5, 0xa3, - 0x25, 0x56, 0xe6, 0xc7, 0x38, 0x47, 0xb9, 0xcf, 0x44, 0x0f, 0x09, 0x26, - 0x32, 0x27, 0xae, 0x10, 0xf6, 0x54, 0x08, 0xd0, 0x31, 0xeb, 0xfd, 0x19, - 0x9a, 0xdd, 0x9b, 0x75, 0x49, 0xe6, 0x54, 0xc3, 0x43, 0x5e, 0x10, 0x8e, - 0x1c, 0xa2, 0x9c, 0xbd, 0x56, 0x5e, 0xab, 0x40, 0x8d, 0x4e, 0x48, 0x1e, - 0x17, 0x9f, 0x9d, 0x8f, 0x2b, 0xd5, 0xcf, 0xe4, 0xb0, 0xde, 0xd0, 0xb7, - 0xbf, 0xd1, 0x99, 0xad, 0xd9, 0xb7, 0x54, 0x92, 0xc5, 0xd1, 0xbc, 0x6a, - 0x58, 0xbb, 0xdb, 0x2c, 0x59, 0xd6, 0x2f, 0xff, 0xa1, 0x3d, 0xa6, 0x23, - 0x38, 0xfa, 0x29, 0x89, 0x62, 0xf3, 0xc6, 0x73, 0x0f, 0x95, 0xc4, 0x6f, - 0xff, 0xdf, 0xc2, 0xc3, 0x7e, 0xd0, 0xf8, 0x4c, 0x19, 0xd6, 0x2f, 0xc5, - 0x9c, 0x23, 0xac, 0x5f, 0x6e, 0xcd, 0xba, 0xa4, 0xc2, 0x2a, 0x08, 0xb0, - 0xdd, 0x63, 0x44, 0xf7, 0xde, 0x91, 0xe2, 0xc5, 0xff, 0xf6, 0x10, 0xe7, - 0xf3, 0xd7, 0xb0, 0x98, 0xeb, 0x17, 0x88, 0x5b, 0xac, 0x54, 0x9f, 0x63, - 0x27, 0x5f, 0xfe, 0xc1, 0x94, 0xee, 0x67, 0xe7, 0x62, 0x12, 0xc5, 0xff, - 0x37, 0x5c, 0x30, 0x73, 0x9d, 0x2c, 0x5f, 0xff, 0xde, 0xc7, 0xd7, 0x3c, - 0x4e, 0x0e, 0x4f, 0xb8, 0xeb, 0x17, 0xb3, 0xce, 0xb1, 0x4b, 0x16, 0xc5, - 0x8a, 0x94, 0x49, 0x9d, 0x6b, 0x83, 0x91, 0xc1, 0x97, 0xf0, 0xb4, 0xfb, - 0x31, 0xd6, 0x2d, 0x19, 0x1a, 0x95, 0xf6, 0xc9, 0x18, 0xdf, 0xb2, 0x1c, - 0x8e, 0x62, 0x78, 0x47, 0x7c, 0x80, 0x09, 0x9c, 0x86, 0x7c, 0x71, 0xfd, - 0xfe, 0x8c, 0xcd, 0x6e, 0xcd, 0xba, 0xa4, 0xcb, 0x2f, 0xfd, 0xdf, 0x23, - 0x4c, 0x87, 0xf1, 0xe1, 0xc5, 0x8b, 0xa0, 0xeb, 0x17, 0xfe, 0x8d, 0xfb, - 0xef, 0xec, 0xfe, 0x86, 0x71, 0x62, 0x96, 0x2c, 0xcb, 0x15, 0x25, 0xe9, - 0xa1, 0x97, 0xff, 0xbe, 0xfa, 0xfe, 0x4f, 0x8b, 0x35, 0x2b, 0x16, 0x82, - 0xc5, 0xcc, 0x6a, 0xc5, 0x8d, 0x58, 0xb1, 0xab, 0x15, 0x26, 0x9b, 0x42, - 0x77, 0xd1, 0x86, 0xc6, 0xae, 0xf1, 0x62, 0x92, 0x2f, 0x46, 0x06, 0x75, - 0x8a, 0xdc, 0xf8, 0x78, 0x66, 0x20, 0xcb, 0xec, 0xd3, 0x0d, 0x62, 0x86, - 0x9c, 0x5e, 0x10, 0x1a, 0x90, 0xe2, 0x44, 0x7d, 0xc8, 0x40, 0xf8, 0xc2, - 0xe9, 0xfa, 0xc5, 0x80, 0xb1, 0x71, 0xbb, 0x2c, 0x5b, 0x50, 0x35, 0x98, - 0x25, 0x6f, 0x2c, 0x56, 0xe7, 0xf6, 0xc8, 0x7e, 0x26, 0xba, 0x10, 0x58, - 0xa5, 0x8a, 0x58, 0x62, 0x65, 0xe8, 0x14, 0xac, 0x50, 0x0d, 0xaf, 0x86, - 0x6d, 0xf5, 0x8a, 0x58, 0xa8, 0x17, 0xc6, 0x89, 0x58, 0xd5, 0x8a, 0x94, - 0x66, 0x3a, 0xc8, 0x0f, 0xfc, 0x43, 0x7f, 0xfe, 0x1b, 0xfb, 0xf8, 0x37, - 0xc1, 0xb6, 0xcc, 0x4b, 0x17, 0xfc, 0xdd, 0x16, 0x75, 0xe9, 0x35, 0x62, - 0xff, 0x6d, 0xd7, 0x24, 0x7e, 0x75, 0x8b, 0xf4, 0xe7, 0x69, 0xe2, 0xc5, - 0xa5, 0x8f, 0x7c, 0x23, 0x6b, 0xf8, 0x8d, 0x03, 0x7b, 0x8b, 0x17, 0x6a, - 0x0b, 0x15, 0x27, 0x8e, 0xc5, 0xf5, 0x29, 0xbe, 0x32, 0xa1, 0x42, 0x68, - 0x4d, 0xd7, 0xff, 0xdf, 0xc7, 0x87, 0x3f, 0x9d, 0xcf, 0xe7, 0x82, 0xc5, - 0xf3, 0x42, 0x03, 0x58, 0xbf, 0xfc, 0x46, 0xb4, 0x21, 0x3b, 0x37, 0xb3, - 0x65, 0x8b, 0xfd, 0xc1, 0xb3, 0x1b, 0x9b, 0x2c, 0x5f, 0xfb, 0x59, 0x84, - 0x6f, 0x1f, 0xaf, 0x2c, 0x54, 0x9f, 0xab, 0x9a, 0xdf, 0xfe, 0xd9, 0xf9, - 0xcc, 0x84, 0x24, 0x31, 0x6c, 0xb1, 0x77, 0xbc, 0xb1, 0x7f, 0x14, 0x8b, - 0x7f, 0xb2, 0xc5, 0xdf, 0x6d, 0x8f, 0x18, 0x63, 0x17, 0x49, 0xd6, 0x2b, - 0x47, 0x8a, 0x45, 0xd7, 0xed, 0x4f, 0x9b, 0xeb, 0x14, 0xe7, 0x92, 0xc4, - 0x37, 0x82, 0x08, 0x24, 0x8b, 0xfd, 0x0e, 0xbd, 0xa9, 0xce, 0x92, 0x23, - 0x0d, 0x0d, 0xff, 0x00, 0xf9, 0xd7, 0x30, 0x8d, 0x58, 0xbf, 0xfb, 0xc2, - 0x37, 0x3a, 0xf0, 0xf3, 0x0d, 0x58, 0xa9, 0x46, 0x63, 0xa4, 0x88, 0xee, - 0xff, 0x84, 0xdd, 0x67, 0x9f, 0xa0, 0x96, 0x2e, 0x9e, 0x2c, 0x54, 0x17, - 0x01, 0x86, 0xa5, 0x84, 0x66, 0xc3, 0x07, 0x44, 0x1f, 0x8c, 0x88, 0xa3, - 0x0d, 0xe1, 0x77, 0x63, 0xcb, 0x77, 0x8b, 0x16, 0xec, 0xb1, 0x51, 0xa8, - 0xd5, 0xc0, 0x5e, 0xf1, 0xbd, 0x1a, 0xb1, 0x78, 0x1c, 0x12, 0xc5, 0x9a, - 0x4d, 0xff, 0x08, 0x6d, 0x2b, 0x17, 0xfe, 0x17, 0xa1, 0x26, 0x8b, 0xf2, - 0x75, 0x8b, 0xfe, 0xd6, 0x85, 0xb0, 0x1b, 0xdc, 0x58, 0xb3, 0xee, 0x88, - 0xe2, 0x11, 0x0d, 0x06, 0x9d, 0x1d, 0x3f, 0x85, 0x9d, 0xe6, 0xd6, 0xeb, - 0x17, 0xbf, 0x87, 0x58, 0xbf, 0xde, 0xd4, 0xe7, 0x5a, 0x9d, 0x8d, 0xdf, - 0x87, 0xaf, 0xfd, 0x0c, 0xea, 0x1e, 0x29, 0x3f, 0x16, 0x2f, 0xfd, 0x06, - 0xe3, 0x10, 0xb7, 0xce, 0x24, 0x5f, 0xfe, 0xcf, 0xe6, 0xff, 0x6c, 0xdc, - 0x85, 0xc5, 0x8a, 0x74, 0x45, 0x11, 0xfd, 0xff, 0xfd, 0xf7, 0xf7, 0xf3, - 0x85, 0x87, 0x17, 0x3e, 0xd0, 0x58, 0xbf, 0xd3, 0x0f, 0x37, 0xd8, 0x6b, - 0x17, 0xcd, 0xe3, 0x78, 0xb1, 0x52, 0x8d, 0x3c, 0x21, 0xd2, 0xdb, 0x19, - 0xde, 0xe7, 0x04, 0xb1, 0x7f, 0x14, 0xc5, 0x17, 0x25, 0x62, 0xf6, 0xed, - 0xa5, 0x8b, 0xff, 0xff, 0xfd, 0xf1, 0x31, 0xbc, 0x16, 0xc7, 0x16, 0x9a, - 0x05, 0x9d, 0x01, 0xbd, 0xc7, 0x2e, 0xa0, 0xb1, 0x7f, 0xfc, 0xde, 0xe6, - 0x17, 0x5e, 0x93, 0xce, 0xa2, 0x58, 0xbc, 0xfe, 0x91, 0xa3, 0x90, 0xa1, - 0x27, 0x58, 0x9b, 0x43, 0x97, 0xb4, 0x60, 0x56, 0x82, 0xc5, 0xfa, 0x13, - 0xb3, 0x79, 0x62, 0xd0, 0x58, 0xb4, 0x16, 0x2f, 0x04, 0x10, 0x4b, 0x16, - 0xdd, 0x22, 0x30, 0xd0, 0xdf, 0x80, 0x3f, 0xb6, 0xcb, 0x15, 0x28, 0xd0, - 0x80, 0x91, 0xa5, 0x2e, 0x24, 0x03, 0x32, 0x26, 0xb6, 0x96, 0x2f, 0xd2, - 0x43, 0xc3, 0x56, 0x2c, 0x12, 0xc5, 0x61, 0xe6, 0x9c, 0x48, 0x8a, 0x2d, - 0x2b, 0x14, 0xb1, 0x7e, 0x17, 0x3e, 0xd0, 0x58, 0xc2, 0x65, 0xff, 0xf7, - 0x1f, 0x7c, 0x2d, 0x49, 0x60, 0xf0, 0xd5, 0x8b, 0xff, 0x9b, 0x5b, 0x66, - 0xbd, 0xc7, 0xe8, 0x25, 0x8a, 0x3a, 0x33, 0x7c, 0x6c, 0x12, 0x7d, 0xff, - 0xf6, 0x0f, 0xec, 0xf0, 0x86, 0x79, 0x88, 0x0b, 0x17, 0xf9, 0xce, 0x2e, - 0x7d, 0xa0, 0xb1, 0xa3, 0xce, 0xbf, 0x73, 0x3b, 0x7d, 0xd6, 0x28, 0x67, - 0xdf, 0xe4, 0x5b, 0xbe, 0xcb, 0x16, 0xe9, 0x62, 0xc6, 0xac, 0x58, 0x4b, - 0x14, 0x46, 0x97, 0x82, 0x74, 0x35, 0x4d, 0x39, 0x0e, 0xa6, 0x87, 0x71, - 0x11, 0x70, 0x5f, 0xc7, 0x17, 0x70, 0x4b, 0x17, 0x61, 0xab, 0x17, 0x6c, - 0x6a, 0xc5, 0xfd, 0x25, 0x83, 0xc3, 0x56, 0x2f, 0xfd, 0xfc, 0x3f, 0xcb, - 0x3b, 0x36, 0xeb, 0x16, 0x8f, 0x94, 0x5c, 0x0c, 0x61, 0xc6, 0x34, 0x35, - 0xe2, 0xdb, 0xb8, 0x6a, 0xc5, 0xb1, 0x62, 0xc0, 0x93, 0x54, 0x31, 0x9a, - 0x64, 0x50, 0x89, 0xee, 0xd2, 0xb1, 0x7f, 0x48, 0xff, 0x3e, 0xe2, 0xc5, - 0x39, 0xbf, 0x21, 0x1b, 0xf3, 0xc2, 0x13, 0xd9, 0x62, 0xff, 0xfe, 0x9c, - 0xe3, 0x8c, 0x79, 0xe8, 0x66, 0xb7, 0xcf, 0xac, 0x5f, 0xff, 0xfe, 0x91, - 0xb8, 0xff, 0x30, 0xd3, 0x37, 0x50, 0xe7, 0xba, 0xdd, 0xf4, 0x6a, 0xc5, - 0x7d, 0x30, 0x1e, 0x15, 0x79, 0x6e, 0x96, 0x2d, 0xd2, 0xc0, 0xc9, 0x97, - 0xf1, 0x49, 0xca, 0x71, 0x62, 0xff, 0xfa, 0x5c, 0xbd, 0xa9, 0x83, 0xfd, - 0xf5, 0x05, 0x8b, 0xff, 0xa5, 0xb5, 0xef, 0xe0, 0xc5, 0xee, 0x2c, 0x5f, - 0xb3, 0xfe, 0x73, 0x56, 0x2e, 0xce, 0xcb, 0x17, 0x42, 0x56, 0x2c, 0x6a, - 0xc5, 0xee, 0x0c, 0xd5, 0x8a, 0xd9, 0x59, 0x40, 0xd8, 0x72, 0x32, 0x0e, - 0x8f, 0x62, 0x21, 0xd1, 0x5f, 0xd3, 0xb8, 0x8b, 0xe2, 0x91, 0x0c, 0x84, - 0x2e, 0x18, 0x9d, 0xff, 0x83, 0xcf, 0xb0, 0xfc, 0xfc, 0x75, 0x8b, 0xff, - 0xd9, 0xd7, 0x83, 0xf3, 0xfb, 0xf8, 0x37, 0x58, 0xbf, 0xff, 0xfb, 0xdc, - 0x7e, 0x72, 0x7d, 0xf7, 0x9d, 0x00, 0xed, 0x08, 0x78, 0xd5, 0x8b, 0xc7, - 0xe0, 0x96, 0x2a, 0x51, 0x24, 0xee, 0x97, 0xfe, 0x68, 0x6a, 0x70, 0xb3, - 0xaf, 0x2c, 0x56, 0x26, 0xf8, 0x69, 0xff, 0xe1, 0xbd, 0xc2, 0x1b, 0x9f, - 0xa5, 0x8b, 0xef, 0x93, 0xca, 0xc5, 0xd0, 0xfa, 0xc5, 0x31, 0xb9, 0x01, - 0x0d, 0xd2, 0x75, 0x8b, 0xff, 0xe2, 0x14, 0x21, 0x3e, 0xfe, 0x1c, 0x39, - 0x02, 0xc5, 0xfe, 0xc2, 0x21, 0x43, 0x82, 0x58, 0xa9, 0x44, 0x27, 0xd4, - 0x6f, 0xff, 0x49, 0x6c, 0xfa, 0xfc, 0xef, 0x38, 0x4b, 0x17, 0xf8, 0xd9, - 0xe0, 0xd9, 0x8d, 0x58, 0xbf, 0x9e, 0x7d, 0xc1, 0x71, 0x62, 0xc3, 0x58, - 0xa5, 0x8a, 0x72, 0xf8, 0x42, 0x57, 0x9f, 0x69, 0xf9, 0xf5, 0xf1, 0x32, - 0xff, 0xe1, 0x43, 0x39, 0xa9, 0x78, 0x37, 0x12, 0x2f, 0xff, 0xf1, 0x67, - 0x61, 0xcf, 0xdf, 0xf8, 0x43, 0xd3, 0xf5, 0x05, 0x8a, 0xd2, 0x36, 0x48, - 0xcf, 0x88, 0x95, 0x89, 0xd4, 0x3c, 0x6f, 0x35, 0x05, 0x47, 0x64, 0x45, - 0xe8, 0xfc, 0x6e, 0xde, 0x32, 0x37, 0x6f, 0xd4, 0x23, 0x44, 0xa8, 0xd4, - 0x2f, 0x31, 0xf9, 0xed, 0x0e, 0x38, 0x43, 0xec, 0x71, 0xdb, 0xe4, 0xe2, - 0x31, 0xb0, 0xbe, 0xde, 0x34, 0xfe, 0x98, 0xa2, 0x4a, 0xd4, 0x73, 0xa7, - 0x3a, 0xfc, 0x70, 0xcd, 0x18, 0x20, 0x21, 0x44, 0x52, 0xa5, 0xb9, 0x39, - 0xc3, 0xe9, 0x45, 0xbd, 0x90, 0xc2, 0x51, 0x8e, 0x20, 0x0e, 0x56, 0xb5, - 0xff, 0xe8, 0xc3, 0xb4, 0x23, 0x33, 0x5b, 0xb3, 0x6e, 0xa9, 0x23, 0x0b, - 0xfb, 0xed, 0xde, 0x7d, 0xbb, 0xc5, 0x8b, 0xf8, 0x78, 0x7d, 0x85, 0xc5, - 0x8b, 0xde, 0x68, 0xe5, 0x8b, 0xe6, 0x89, 0xb8, 0xb1, 0x4e, 0x78, 0x7a, - 0x20, 0xbf, 0x9b, 0x40, 0x3c, 0x81, 0x62, 0xfa, 0x75, 0x20, 0x58, 0xbf, - 0x0e, 0x4f, 0x21, 0xac, 0x5e, 0x97, 0xf2, 0xc5, 0x49, 0xe2, 0xfc, 0xa6, - 0x9d, 0x34, 0xa8, 0x9c, 0xfe, 0x43, 0xd8, 0xb8, 0x36, 0x7b, 0xff, 0xcd, - 0xf6, 0xcf, 0xb7, 0xdb, 0x3e, 0xcb, 0x17, 0xf9, 0xa1, 0xc7, 0x2c, 0x02, - 0xc5, 0xf9, 0xbd, 0xf7, 0x89, 0x62, 0xbe, 0x8a, 0x20, 0x23, 0x91, 0x95, - 0xf6, 0x61, 0x3a, 0xc5, 0xff, 0xda, 0xc1, 0xea, 0x7c, 0xfb, 0xb8, 0xd6, - 0x2f, 0xa7, 0x6c, 0x1a, 0xc5, 0xc1, 0x44, 0xb1, 0x5f, 0x37, 0xac, 0x47, - 0x7f, 0xfd, 0xa7, 0x37, 0x3c, 0x2f, 0xb9, 0xf3, 0xec, 0xb1, 0x7e, 0x26, - 0x04, 0x86, 0xb1, 0x7f, 0x86, 0x2e, 0xb9, 0xfc, 0xe2, 0xc5, 0xfe, 0xcf, - 0x70, 0x3d, 0xa7, 0x65, 0x8b, 0xfd, 0x99, 0x10, 0x4d, 0xd7, 0x16, 0x2f, - 0xee, 0x67, 0xf2, 0x1c, 0x58, 0xb6, 0x00, 0xf9, 0x3c, 0x6d, 0x7f, 0xce, - 0x59, 0xcf, 0x73, 0x36, 0x58, 0xbf, 0xe9, 0x18, 0x58, 0x43, 0xfc, 0xac, - 0x56, 0x1f, 0x90, 0x47, 0x37, 0xfe, 0x7e, 0xa1, 0xc2, 0xcf, 0x7c, 0x4b, - 0x17, 0xfc, 0xfa, 0xfe, 0x61, 0x43, 0x8b, 0x15, 0x03, 0xf8, 0xdd, 0x02, - 0xf9, 0xbb, 0x61, 0x2c, 0x5f, 0xff, 0xf6, 0x1f, 0xef, 0x3e, 0x2c, 0xf7, - 0xf0, 0xb0, 0x26, 0x02, 0xc5, 0xf6, 0x70, 0x3e, 0x2c, 0x5f, 0xfe, 0x68, - 0x89, 0x82, 0xd4, 0xbc, 0x1b, 0x8b, 0x15, 0xd2, 0x63, 0x1a, 0x23, 0xf9, - 0x19, 0x32, 0x08, 0x92, 0xe8, 0xfe, 0xe5, 0x8b, 0xfd, 0xbf, 0xdc, 0xf3, - 0xa3, 0x56, 0x2f, 0xc6, 0xe6, 0x11, 0xab, 0x16, 0x68, 0x1e, 0xfe, 0x8d, - 0xae, 0x07, 0x78, 0xb1, 0x7f, 0x6c, 0x1c, 0x73, 0x10, 0x16, 0x2f, 0xe3, - 0x33, 0x4d, 0xee, 0x2c, 0x5f, 0xf9, 0x88, 0x19, 0xe9, 0x27, 0x02, 0xc5, - 0x4a, 0x27, 0x8e, 0x67, 0x1c, 0x5f, 0x68, 0xce, 0xf1, 0x91, 0xa7, 0x31, - 0xc1, 0x64, 0x3c, 0x0d, 0x2f, 0x72, 0x08, 0xa1, 0x04, 0x72, 0x0f, 0xa8, - 0x31, 0x40, 0x0d, 0x8a, 0x13, 0x7c, 0x84, 0xcf, 0xa3, 0xb2, 0x12, 0x58, - 0x4f, 0xb1, 0xc4, 0xe1, 0xc2, 0xee, 0xa0, 0xec, 0x23, 0xb5, 0x38, 0x64, - 0x78, 0x55, 0xb5, 0x7f, 0x2b, 0xc8, 0xf2, 0xfd, 0x49, 0x32, 0xbf, 0xfa, - 0x31, 0xa1, 0x19, 0x9a, 0xdd, 0x9b, 0x75, 0x48, 0x72, 0x5f, 0xfe, 0x8c, - 0x3b, 0x42, 0x33, 0x35, 0xbb, 0x36, 0xea, 0x91, 0xc8, 0xbf, 0xd1, 0x99, - 0xad, 0xd9, 0xb7, 0x54, 0x99, 0x85, 0xff, 0xe1, 0xb1, 0xcc, 0xce, 0xa1, - 0x80, 0xc1, 0xac, 0x5d, 0xe0, 0x2c, 0x5f, 0xb3, 0xe5, 0x9a, 0x58, 0xbd, - 0xb4, 0xe9, 0x62, 0xfb, 0x8c, 0x78, 0xcc, 0x45, 0x4f, 0xd3, 0x08, 0x63, - 0x84, 0xf7, 0x46, 0x71, 0x62, 0xa0, 0x7e, 0x1d, 0x2a, 0xdf, 0x46, 0xbe, - 0xf3, 0xbc, 0x8d, 0x6b, 0x17, 0xf8, 0x78, 0x79, 0xea, 0x4e, 0xb1, 0x5d, - 0xe1, 0xf7, 0x46, 0xb3, 0xab, 0x76, 0x58, 0xbf, 0xa3, 0x48, 0xd3, 0x7f, - 0xcf, 0x4b, 0x17, 0x77, 0xdc, 0x72, 0xc5, 0xee, 0xfb, 0x8e, 0x8d, 0xd6, - 0x2a, 0x37, 0x3c, 0xf8, 0xd0, 0x8a, 0xff, 0xed, 0x69, 0x8a, 0x28, 0x39, - 0x19, 0x1e, 0xb1, 0x7f, 0xb5, 0x3e, 0xfb, 0x75, 0x05, 0x8b, 0xff, 0xff, - 0xe9, 0x8b, 0xf3, 0xe9, 0x0d, 0xf5, 0x14, 0xff, 0x3b, 0x67, 0xf0, 0x7d, - 0xb1, 0x62, 0x8c, 0x4c, 0x00, 0x09, 0x24, 0x6b, 0x7f, 0xd9, 0xc6, 0xf0, - 0x03, 0x28, 0x2c, 0x58, 0x0b, 0x17, 0xf7, 0x35, 0xac, 0xeb, 0x8b, 0x17, - 0x4c, 0x16, 0x2b, 0xbc, 0x3d, 0x9c, 0x12, 0xd1, 0x85, 0xfb, 0x92, 0x00, - 0xf6, 0x58, 0xbd, 0xac, 0x3a, 0xc5, 0xf3, 0x96, 0x71, 0x62, 0xd9, 0xc3, - 0xe9, 0xf1, 0x5f, 0x70, 0xed, 0x2c, 0x52, 0xc5, 0xff, 0xb5, 0xa6, 0x28, - 0xa0, 0xe4, 0x66, 0xc5, 0xc0, 0xc3, 0x2f, 0xff, 0xfd, 0xf9, 0x21, 0x73, - 0x92, 0x1f, 0x9c, 0x85, 0x0c, 0xe7, 0x9d, 0x62, 0xfc, 0x59, 0xdb, 0x09, - 0x62, 0xfb, 0xde, 0x7d, 0x2c, 0x5d, 0xc0, 0x2c, 0x51, 0x89, 0x92, 0x41, - 0x55, 0xdb, 0x34, 0x51, 0xe2, 0x3b, 0x79, 0x62, 0xdd, 0xcb, 0x15, 0x1c, - 0x69, 0xc3, 0x12, 0xa5, 0x8a, 0x58, 0xbf, 0xf6, 0xb4, 0xc5, 0x14, 0x1c, - 0x8c, 0x34, 0xb8, 0x88, 0x32, 0xef, 0xc4, 0xb1, 0x71, 0x6e, 0xb1, 0x46, - 0x22, 0x1e, 0x0a, 0xcc, 0x33, 0x7b, 0x93, 0xc5, 0x8b, 0xff, 0xb5, 0xa6, - 0x28, 0xa0, 0xe4, 0x66, 0x96, 0x2f, 0xee, 0x04, 0xc4, 0xdb, 0x2c, 0x51, - 0x87, 0xeb, 0x12, 0x35, 0xd1, 0xdc, 0x58, 0xbf, 0x61, 0xc3, 0xeb, 0x8b, - 0x17, 0x10, 0x16, 0x2f, 0xcc, 0x16, 0xd8, 0x12, 0xc5, 0x6c, 0x88, 0x88, - 0x0d, 0xb1, 0x59, 0x0b, 0xdb, 0xeb, 0x17, 0xc6, 0xfd, 0xf8, 0xb1, 0x7f, - 0x30, 0x71, 0xcc, 0x40, 0x58, 0xa8, 0xd8, 0xf9, 0xc4, 0x24, 0x11, 0x25, - 0x9d, 0x62, 0xff, 0x4f, 0x27, 0xdb, 0x60, 0x4b, 0x16, 0x73, 0x9e, 0x31, - 0x08, 0xd2, 0xc5, 0x2c, 0x52, 0xc5, 0xff, 0xb5, 0xa6, 0x28, 0xa0, 0xe4, - 0x64, 0x9a, 0x4e, 0x83, 0x1c, 0x32, 0xd0, 0x58, 0xbc, 0xc4, 0x05, 0x8a, - 0xdc, 0xd7, 0x68, 0x4a, 0xfd, 0xee, 0x14, 0xc1, 0x62, 0xf8, 0x2f, 0x49, - 0xab, 0x14, 0x62, 0x3f, 0xa6, 0x11, 0xf8, 0x44, 0xe5, 0x14, 0xb1, 0x4b, - 0x17, 0xfe, 0xd6, 0x98, 0xa2, 0x83, 0x91, 0x9b, 0x97, 0x00, 0x0c, 0xbe, - 0xc1, 0xb4, 0x16, 0x2f, 0xc0, 0xce, 0x07, 0xf5, 0x8b, 0xbd, 0xb2, 0xc5, - 0xdd, 0xa5, 0x62, 0xff, 0x87, 0xf9, 0xe7, 0x33, 0x52, 0xb1, 0x77, 0x69, - 0x58, 0xbb, 0xb4, 0xac, 0x51, 0x89, 0x9f, 0x41, 0x57, 0xa2, 0x27, 0x2a, - 0x38, 0xc9, 0x0c, 0xf0, 0xe6, 0x38, 0x66, 0xff, 0xed, 0x69, 0x8a, 0x28, - 0x39, 0x19, 0xc5, 0x8b, 0xa4, 0x4b, 0x17, 0xe2, 0x1e, 0x75, 0xe5, 0x8b, - 0x7d, 0x62, 0x8c, 0x44, 0xc0, 0xd1, 0x98, 0x5c, 0x45, 0x37, 0x01, 0x96, - 0x2f, 0xfe, 0xd6, 0x98, 0xa2, 0x83, 0x91, 0x98, 0xb1, 0x76, 0x12, 0xc5, - 0xc0, 0x12, 0xc5, 0x49, 0xae, 0xd0, 0xb5, 0xf3, 0x43, 0xf8, 0xb1, 0x7e, - 0xe7, 0xe4, 0xbc, 0xb1, 0x7b, 0xd9, 0x2b, 0x14, 0x33, 0xe6, 0x34, 0x8b, - 0xa2, 0x8b, 0xb7, 0x95, 0x8a, 0x31, 0x34, 0x21, 0xb9, 0xe4, 0x21, 0xb7, - 0x31, 0xb0, 0x6b, 0x17, 0xda, 0x89, 0xfe, 0xb1, 0x7f, 0xfb, 0x79, 0xe7, - 0x30, 0xfd, 0x78, 0x45, 0xe5, 0x8b, 0xde, 0xc3, 0xac, 0x5f, 0xe9, 0x06, - 0x14, 0xf5, 0xc5, 0x8b, 0xc0, 0xce, 0x2c, 0x5f, 0x61, 0x0a, 0x56, 0x28, - 0xc4, 0xc4, 0xa4, 0x4f, 0x09, 0x1d, 0x37, 0x83, 0xbe, 0x33, 0x10, 0xed, - 0xee, 0x49, 0xd6, 0x2f, 0xa7, 0xf8, 0x35, 0x8b, 0xfd, 0xc6, 0xf0, 0x03, - 0x28, 0x2c, 0x5f, 0x7a, 0x39, 0x8d, 0x58, 0xad, 0x8f, 0xfb, 0xa2, 0x22, - 0x35, 0xa8, 0x91, 0x96, 0xd0, 0x9b, 0xa5, 0x8a, 0x58, 0xbf, 0xf6, 0xb4, - 0xc5, 0x14, 0x1c, 0x8c, 0xef, 0xcb, 0x82, 0x0c, 0xbf, 0x6f, 0xf6, 0x7e, - 0xfd, 0x62, 0xfc, 0x2e, 0x4f, 0x25, 0x62, 0x8c, 0x45, 0x76, 0x96, 0x18, - 0xba, 0x96, 0x29, 0x62, 0xff, 0xda, 0xd3, 0x14, 0x50, 0x72, 0x32, 0x05, - 0xc1, 0xc3, 0x2f, 0xe2, 0x07, 0xf0, 0x0c, 0xb1, 0x7c, 0x53, 0xd8, 0x4b, - 0x14, 0x62, 0x29, 0x5d, 0x51, 0x8b, 0x6c, 0x75, 0x8b, 0x8d, 0x8e, 0x58, - 0xae, 0x8d, 0x73, 0x89, 0x5f, 0xfd, 0xad, 0x31, 0x45, 0x07, 0x23, 0x19, - 0x62, 0xfe, 0x19, 0x91, 0xb9, 0x67, 0x72, 0xc5, 0xed, 0xa2, 0x95, 0x8a, - 0x58, 0xbf, 0xe2, 0x06, 0x7a, 0x49, 0xc0, 0xb1, 0x58, 0x78, 0x6c, 0x19, - 0x46, 0x23, 0xfa, 0x51, 0x58, 0xde, 0x39, 0x8a, 0xf1, 0x0a, 0x25, 0x8b, - 0x46, 0x77, 0x8d, 0xa2, 0x2f, 0x7a, 0x5b, 0x1a, 0x0a, 0x46, 0xb8, 0x45, - 0x4c, 0x65, 0x9b, 0x18, 0xc2, 0x12, 0x63, 0x84, 0xe6, 0x46, 0xe6, 0x6b, - 0x96, 0xf0, 0xc4, 0xe8, 0xc1, 0xe1, 0x25, 0x14, 0x2b, 0x35, 0x0a, 0x33, - 0xbd, 0xfe, 0x34, 0x86, 0x8e, 0x58, 0x11, 0x86, 0xf7, 0xe7, 0xa5, 0x1a, - 0xcf, 0x23, 0x56, 0xf4, 0x65, 0xc2, 0x87, 0x77, 0x68, 0x76, 0xc7, 0x2e, - 0x87, 0x18, 0xff, 0x71, 0xfd, 0xfb, 0x5b, 0xb3, 0x6e, 0xa9, 0x37, 0x4b, + 0xf3, 0xf4, 0x21, 0x70, 0xc0, 0xca, 0x47, 0xf6, 0x86, 0x71, 0x62, 0xa0, + 0xaf, 0xf4, 0xd1, 0xc7, 0x49, 0xd1, 0x07, 0xca, 0x58, 0xe0, 0x8f, 0x7d, + 0x28, 0xc3, 0xa2, 0x35, 0xfb, 0x22, 0x83, 0x12, 0xc5, 0xfb, 0x34, 0x52, + 0x05, 0x8b, 0xba, 0x75, 0x2c, 0x5c, 0x7c, 0x58, 0xa9, 0x6e, 0xbb, 0x76, + 0x3f, 0xca, 0xc9, 0x2c, 0xd8, 0xdc, 0x9e, 0x38, 0x7d, 0x17, 0x34, 0xe1, + 0x97, 0xa1, 0x0e, 0x22, 0x88, 0xe2, 0x70, 0xc7, 0x6f, 0xc7, 0x14, 0x53, + 0xe5, 0x8b, 0x32, 0xc5, 0x39, 0xbb, 0xe1, 0x55, 0xf7, 0xfe, 0xe6, 0xac, + 0x5d, 0x10, 0x96, 0x2f, 0xfc, 0x6c, 0x96, 0xec, 0xfb, 0x19, 0x8b, 0x16, + 0x3a, 0xc5, 0xdf, 0x95, 0x8a, 0xc4, 0x53, 0xf6, 0x48, 0xe3, 0x3d, 0x7a, + 0x0f, 0x04, 0xaf, 0xf7, 0x80, 0x22, 0xe3, 0x8d, 0x62, 0xfd, 0x00, 0x66, + 0x0d, 0x62, 0xdd, 0x1c, 0xf7, 0x18, 0xd2, 0xfd, 0xf7, 0xd0, 0x04, 0xb1, + 0x74, 0xc1, 0x62, 0xfd, 0x3d, 0xfa, 0x74, 0xb1, 0x79, 0xfe, 0x25, 0x8b, + 0x6b, 0x11, 0x5d, 0x11, 0x46, 0x8a, 0x4e, 0x2f, 0xe2, 0x9b, 0xf8, 0x2e, + 0x34, 0xf7, 0x05, 0x8b, 0xee, 0x7b, 0x37, 0x58, 0xa9, 0x45, 0x26, 0x28, + 0x08, 0xc2, 0xfd, 0xe6, 0x63, 0xf1, 0x62, 0xfd, 0xee, 0xf7, 0x7d, 0x2c, + 0x59, 0xfb, 0x3d, 0x30, 0x14, 0x5f, 0xf6, 0x76, 0xde, 0x9f, 0x30, 0x16, + 0x2f, 0xff, 0x61, 0x6d, 0xbb, 0x0f, 0x5a, 0x93, 0xf1, 0x62, 0xff, 0xe2, + 0x9f, 0x73, 0xdd, 0xee, 0xe5, 0xb2, 0xc5, 0xfb, 0xa9, 0xfb, 0x87, 0x16, + 0x2a, 0x23, 0xf4, 0x64, 0x7b, 0xa1, 0xf5, 0x8b, 0xfc, 0xe4, 0x6b, 0x0a, + 0x03, 0x58, 0xbe, 0x38, 0x71, 0x71, 0x62, 0xa4, 0xfc, 0xb0, 0x61, 0xcd, + 0x2f, 0xe2, 0xcf, 0x0a, 0x49, 0x62, 0xfd, 0xdc, 0x0a, 0x46, 0xb1, 0x47, + 0x3d, 0x56, 0x2c, 0xbf, 0xa0, 0xe4, 0x76, 0xf2, 0xc5, 0xff, 0x0f, 0x0c, + 0xe3, 0x97, 0x70, 0x58, 0xb4, 0xf6, 0x7d, 0x01, 0x16, 0xd4, 0xaa, 0xc0, + 0xc3, 0x97, 0x86, 0x07, 0xe1, 0x28, 0xd0, 0x81, 0x28, 0x44, 0xde, 0xcd, + 0xa5, 0x62, 0xf7, 0xb3, 0xeb, 0x16, 0x68, 0x1b, 0xaf, 0x8e, 0xdf, 0xd8, + 0x2e, 0xbc, 0x5e, 0x0d, 0x62, 0xff, 0xf6, 0x10, 0x60, 0x33, 0x37, 0xc7, + 0x29, 0x58, 0xad, 0x1f, 0xff, 0xcd, 0x6f, 0xfe, 0x9e, 0x73, 0x0f, 0xe2, + 0x93, 0xf1, 0x62, 0xff, 0xa7, 0x46, 0xfc, 0xa7, 0x34, 0xb1, 0x7f, 0x1a, + 0x66, 0x1e, 0x77, 0x58, 0xbf, 0xfa, 0x7b, 0x87, 0x85, 0x3b, 0x3f, 0x7e, + 0x58, 0xbf, 0xcf, 0xf6, 0xde, 0x48, 0x6b, 0x14, 0xe8, 0xac, 0x23, 0x1e, + 0x24, 0x5f, 0xb7, 0x01, 0xc4, 0x05, 0x8b, 0xff, 0xa7, 0xb3, 0x18, 0xbd, + 0x16, 0x6b, 0x16, 0x2a, 0x4f, 0xc4, 0xe5, 0x77, 0xdd, 0x1c, 0x86, 0xb1, + 0x7f, 0xfd, 0xa2, 0x79, 0x1e, 0xb1, 0xcd, 0x29, 0xdd, 0x62, 0xff, 0xc5, + 0x23, 0xfc, 0x9c, 0xb3, 0x75, 0x8b, 0xce, 0x5e, 0x58, 0xac, 0x46, 0x6b, + 0x92, 0x44, 0x9f, 0xf3, 0xeb, 0xfc, 0x3e, 0x3f, 0xff, 0x83, 0x58, 0xbf, + 0xf4, 0xf0, 0x9a, 0x06, 0x73, 0x34, 0xb1, 0x7e, 0x84, 0x45, 0x23, 0x58, + 0xa7, 0x3e, 0x86, 0x3f, 0xbf, 0x0f, 0x0a, 0x63, 0xd6, 0x2f, 0xe2, 0xc8, + 0x7e, 0x46, 0xb1, 0x5b, 0x1e, 0xb8, 0xca, 0xaf, 0x13, 0x69, 0x62, 0xff, + 0xff, 0xe9, 0xf9, 0x67, 0xbe, 0xe6, 0x00, 0x9f, 0xb8, 0x78, 0x98, 0x1c, + 0x58, 0xbe, 0x66, 0x6e, 0xa5, 0x8b, 0xff, 0xff, 0xfd, 0xfc, 0x7d, 0x40, + 0xc2, 0xc8, 0xa1, 0x25, 0xe3, 0x01, 0xc3, 0x38, 0x76, 0x81, 0xbe, 0x58, + 0xbf, 0xf8, 0x12, 0x67, 0xbf, 0x9e, 0xfb, 0x41, 0x62, 0xff, 0xff, 0xfd, + 0x3f, 0x2c, 0xf4, 0x76, 0x19, 0xbf, 0xdc, 0x65, 0x2d, 0xb7, 0xd8, 0xc3, + 0x81, 0x62, 0xff, 0xff, 0xfd, 0xfc, 0x3e, 0x6f, 0x3f, 0x93, 0x99, 0xc2, + 0xcf, 0xf8, 0xa4, 0x06, 0x1c, 0x0b, 0x17, 0xb0, 0x66, 0x3a, 0x6a, 0x7a, + 0x46, 0xf4, 0x22, 0x2f, 0xfe, 0xe6, 0xd8, 0x16, 0x10, 0xba, 0xa6, 0x33, + 0x15, 0x70, 0x68, 0x70, 0xee, 0x5e, 0x24, 0xe9, 0x1f, 0x3d, 0xfb, 0xdc, + 0x62, 0x35, 0x62, 0xff, 0xd1, 0x9b, 0xb9, 0xbf, 0x68, 0x67, 0x16, 0x2b, + 0x63, 0xed, 0xe1, 0x4d, 0x4a, 0xe1, 0x33, 0xcb, 0x03, 0x0e, 0x30, 0x0b, + 0xfd, 0xdc, 0x39, 0x14, 0x27, 0x65, 0x8b, 0xfe, 0xd6, 0x1a, 0xc3, 0xfc, + 0xe9, 0x62, 0x86, 0xc9, 0xa3, 0xc8, 0x52, 0xee, 0x45, 0x12, 0x26, 0xa1, + 0xca, 0x78, 0x4f, 0xfe, 0x1d, 0xcc, 0x78, 0x50, 0x9c, 0xf4, 0xe4, 0xe8, + 0x8f, 0xfa, 0x1c, 0x5f, 0x74, 0xd1, 0xe5, 0x62, 0xff, 0xfb, 0xbf, 0x6b, + 0x53, 0xe0, 0x06, 0x50, 0xfe, 0x2c, 0x5b, 0xcb, 0x16, 0xf6, 0x1f, 0x2e, + 0x94, 0xee, 0x7e, 0x8b, 0x17, 0xd2, 0x50, 0xe2, 0xc5, 0x9f, 0xb3, 0xe2, + 0x88, 0x9c, 0x03, 0x37, 0xfb, 0x5b, 0x14, 0xee, 0xf0, 0x58, 0xaf, 0x9f, + 0x5b, 0x1b, 0x5f, 0xbf, 0x3d, 0x07, 0x2b, 0x17, 0x31, 0x2c, 0x5f, 0x69, + 0xba, 0x62, 0xc5, 0x0c, 0xdd, 0x08, 0x5a, 0xf9, 0xff, 0x30, 0x58, 0xb7, + 0x45, 0x8b, 0xf7, 0x7e, 0x29, 0xfa, 0xc5, 0xb5, 0x26, 0xf5, 0x85, 0x2e, + 0x9e, 0xa5, 0x8b, 0xee, 0xe2, 0x9d, 0x2c, 0x5b, 0x4b, 0x15, 0x86, 0xdc, + 0x44, 0xb7, 0xcd, 0xae, 0xe0, 0xb1, 0x77, 0xdd, 0x62, 0xff, 0xfd, 0x3e, + 0xfb, 0x45, 0xc6, 0x7d, 0xc9, 0xb3, 0x75, 0x8a, 0x82, 0xa0, 0xb1, 0xb2, + 0x1a, 0x43, 0xa5, 0xf3, 0x92, 0xf1, 0x44, 0x44, 0x1d, 0x09, 0x23, 0x85, + 0xef, 0x9f, 0xa6, 0x0d, 0x62, 0xf8, 0xbd, 0x84, 0xb1, 0x71, 0x7b, 0x47, + 0x8a, 0xc4, 0x97, 0xfd, 0xdc, 0x38, 0x2f, 0x4f, 0xb8, 0xb1, 0x7e, 0xd4, + 0x1b, 0xb0, 0x96, 0x2f, 0xf7, 0x02, 0x61, 0xcf, 0x7c, 0x58, 0xa9, 0x46, + 0x4e, 0x16, 0x39, 0xe3, 0x15, 0xdf, 0xb8, 0x2f, 0x49, 0x2c, 0x5f, 0xe1, + 0x77, 0x0f, 0x70, 0x51, 0xeb, 0x17, 0xb9, 0x3d, 0xac, 0x5e, 0x9f, 0xf1, + 0x62, 0xfd, 0xdf, 0x30, 0x8d, 0x58, 0xbb, 0xb0, 0x2c, 0x5d, 0x9f, 0x30, + 0xf0, 0xe0, 0x55, 0x73, 0x05, 0xda, 0x2b, 0x00, 0x3d, 0xe6, 0x0b, 0xff, + 0xe9, 0x20, 0xf2, 0x2f, 0xb1, 0xf0, 0x6d, 0x05, 0x8a, 0x82, 0x7a, 0x98, + 0x73, 0xf2, 0x82, 0x87, 0x30, 0x47, 0xb7, 0x60, 0x4b, 0x17, 0xfb, 0x3b, + 0x33, 0x3e, 0xff, 0x58, 0xbb, 0xe3, 0x58, 0xb9, 0xf7, 0x58, 0xb9, 0xbc, + 0x33, 0x61, 0x1c, 0x31, 0x7f, 0xf3, 0xef, 0xfc, 0xcf, 0x6a, 0x7f, 0x2b, + 0x14, 0xe8, 0xf0, 0xd0, 0xc3, 0x32, 0x91, 0x7d, 0xa5, 0x62, 0xfe, 0xd4, + 0xbc, 0x1b, 0x8b, 0x14, 0x33, 0x7d, 0xd8, 0x8d, 0xfc, 0x0c, 0x8a, 0x4e, + 0xeb, 0x17, 0xfe, 0xe0, 0x7c, 0xe6, 0xcd, 0x14, 0xc7, 0xac, 0x53, 0x1f, + 0xa7, 0x8b, 0xaf, 0xfb, 0xdc, 0x14, 0x03, 0x1b, 0xf9, 0x62, 0xf4, 0xe6, + 0x96, 0x2f, 0xc2, 0x37, 0xef, 0xc5, 0x8b, 0xc4, 0xc6, 0xc4, 0x78, 0xda, + 0x1c, 0xa9, 0x4d, 0xb7, 0x21, 0x2c, 0xc4, 0x22, 0x84, 0x15, 0xff, 0xe7, + 0xdb, 0x99, 0xaf, 0x13, 0x8b, 0xaf, 0xe2, 0xc5, 0xff, 0xc2, 0x6d, 0x43, + 0x92, 0x76, 0xef, 0xcb, 0x17, 0xff, 0xed, 0x08, 0xb9, 0xee, 0xf7, 0x7d, + 0x79, 0x81, 0xc5, 0x8b, 0xff, 0xb8, 0x71, 0x42, 0x0c, 0xfb, 0xb8, 0xd6, + 0x2f, 0xf3, 0x93, 0x6d, 0x3c, 0xc5, 0x8b, 0xff, 0x48, 0xdc, 0x8d, 0x88, + 0xa4, 0x6b, 0x16, 0x8c, 0x1a, 0x6a, 0xd8, 0x8d, 0xc5, 0x9f, 0x23, 0x06, + 0x65, 0x7d, 0x39, 0x06, 0x58, 0xa1, 0x9f, 0xaf, 0xd5, 0x2f, 0x63, 0xf1, + 0x62, 0xfd, 0xef, 0x60, 0xb6, 0x58, 0xbf, 0xfe, 0xd9, 0xbf, 0x83, 0x33, + 0x08, 0xb1, 0xc0, 0xb1, 0x78, 0xef, 0xa5, 0x8a, 0xd9, 0x16, 0x5b, 0x8e, + 0x68, 0xa8, 0x09, 0xf7, 0xfd, 0xa0, 0x66, 0x80, 0x42, 0x02, 0xc5, 0xf8, + 0x0d, 0xdc, 0x0e, 0xb1, 0x7b, 0x66, 0xdd, 0x62, 0xff, 0x43, 0xc5, 0x9c, + 0xfb, 0xac, 0x54, 0xa2, 0xda, 0x23, 0xad, 0x15, 0x30, 0xfd, 0xde, 0x65, + 0x8b, 0xf8, 0xa1, 0x2e, 0x52, 0xb1, 0x7f, 0x13, 0x1b, 0xcc, 0xd2, 0xc5, + 0xff, 0xf3, 0x7f, 0xee, 0x64, 0x1c, 0xf3, 0xf0, 0xc6, 0xb1, 0x58, 0x8a, + 0xb3, 0x95, 0xf4, 0x2e, 0xbf, 0xfd, 0x9a, 0xd3, 0x40, 0xcf, 0xcf, 0xb8, + 0xcb, 0x17, 0xbd, 0xb0, 0x4b, 0x17, 0x1f, 0x16, 0x2f, 0xe7, 0x1e, 0x9c, + 0x5b, 0x2c, 0x5e, 0xd3, 0x70, 0xc3, 0xe6, 0xc2, 0x0f, 0x0b, 0xdb, 0xd2, + 0x99, 0x14, 0x0c, 0x45, 0x0b, 0x1b, 0xfd, 0xbb, 0xb1, 0x9c, 0x6f, 0xac, + 0x53, 0x9f, 0x87, 0xce, 0xef, 0xec, 0xf7, 0xe7, 0x5c, 0x58, 0xbf, 0xff, + 0x19, 0xe2, 0xc7, 0xe7, 0x30, 0xb3, 0xdf, 0x75, 0x8a, 0x95, 0xf1, 0x71, + 0xca, 0x1b, 0xc8, 0x6a, 0x3c, 0x3d, 0x4e, 0x78, 0xd2, 0x95, 0x08, 0x84, + 0x45, 0xd7, 0xb8, 0x23, 0x56, 0x2f, 0x7d, 0xc2, 0x58, 0xbf, 0xff, 0x7d, + 0xce, 0xc3, 0xe6, 0x13, 0x77, 0xac, 0x3a, 0xc5, 0xf1, 0x4c, 0x1d, 0x62, + 0xf3, 0x14, 0x4b, 0x17, 0xbb, 0x83, 0xac, 0x59, 0x8e, 0x6e, 0xc8, 0x76, + 0xf0, 0xa4, 0x96, 0x2f, 0xe8, 0x4f, 0x48, 0xe1, 0x69, 0x62, 0xff, 0xff, + 0x3f, 0xa4, 0x9a, 0x18, 0x3e, 0x36, 0x9f, 0xef, 0xd1, 0x62, 0xfa, 0x4a, + 0x1c, 0x58, 0xac, 0x4f, 0x97, 0x71, 0xf7, 0x1e, 0xd2, 0xaf, 0xd7, 0x08, + 0x94, 0x43, 0x9d, 0x0d, 0x03, 0x60, 0xbf, 0xff, 0x70, 0x8c, 0xfb, 0x3f, + 0x80, 0x22, 0x26, 0x82, 0xc5, 0xff, 0xff, 0xd3, 0xac, 0x8a, 0x4f, 0x9b, + 0xb8, 0xff, 0x3e, 0xe1, 0xba, 0xce, 0xa5, 0x8b, 0xf1, 0x4c, 0x00, 0xeb, + 0x17, 0xf3, 0x9b, 0x1c, 0x2d, 0x1a, 0xb1, 0x7f, 0x8a, 0x45, 0xdf, 0x1a, + 0x3d, 0x62, 0xbe, 0x7d, 0x6c, 0x69, 0x7f, 0xf0, 0xf4, 0xdc, 0xfc, 0x9c, + 0xb3, 0x75, 0x8b, 0xe9, 0xc0, 0xbc, 0xb1, 0x7f, 0x6f, 0x3d, 0x83, 0x52, + 0xb1, 0x7f, 0xa4, 0xb7, 0x62, 0x07, 0x5a, 0xb1, 0x52, 0x7d, 0x07, 0x30, + 0xb8, 0xb7, 0x58, 0xa5, 0x8b, 0xec, 0x8e, 0x70, 0x2c, 0x54, 0x6c, 0x6c, + 0x74, 0x19, 0x67, 0xc3, 0xef, 0x3a, 0x4d, 0xff, 0x48, 0x35, 0xa9, 0x08, + 0x7d, 0xac, 0x5f, 0xe0, 0x8f, 0xf9, 0x72, 0xd9, 0x62, 0xff, 0xf3, 0x41, + 0xf5, 0x9d, 0xc5, 0x09, 0xd6, 0xcb, 0x17, 0xff, 0xf8, 0x07, 0x68, 0x67, + 0x47, 0xe7, 0xf0, 0x11, 0xd9, 0xf7, 0x58, 0xa9, 0x47, 0x38, 0x0d, 0x44, + 0x9b, 0x70, 0x5c, 0x58, 0xbf, 0xe3, 0xce, 0xf9, 0xe7, 0xd6, 0x2c, 0x5c, + 0xde, 0x58, 0xbc, 0x59, 0xc3, 0x0f, 0xa7, 0x06, 0x48, 0xe6, 0xfe, 0x6d, + 0x87, 0x99, 0xc5, 0x8b, 0xfe, 0x9d, 0x46, 0xc0, 0x13, 0x16, 0xeb, 0x15, + 0x8b, 0x93, 0xfb, 0xc2, 0x49, 0xc8, 0x62, 0x45, 0x3c, 0x22, 0xff, 0x09, + 0x00, 0x13, 0x7a, 0x32, 0x3e, 0x90, 0x98, 0x8e, 0x3e, 0x0c, 0xba, 0xe9, + 0xfa, 0xc5, 0xff, 0x73, 0xc2, 0xef, 0x06, 0xc4, 0xb1, 0x7f, 0xff, 0xf4, + 0x24, 0xc1, 0xe1, 0x37, 0x3e, 0xc0, 0xe1, 0x99, 0xe9, 0xf7, 0x16, 0x2a, + 0x24, 0x56, 0xf8, 0xea, 0xe1, 0x76, 0xb1, 0x7f, 0x49, 0xe7, 0x3b, 0xf2, + 0xc5, 0x1c, 0xf1, 0xfc, 0x33, 0x7f, 0xd0, 0xfb, 0x43, 0x76, 0xd6, 0xcb, + 0x15, 0x87, 0xbc, 0xc4, 0x55, 0x2b, 0xef, 0xd9, 0x3a, 0x2c, 0x78, 0x5d, + 0xb4, 0x31, 0x05, 0x0c, 0x9b, 0xfd, 0xb4, 0x97, 0xbe, 0xd0, 0x58, 0xa5, + 0x8b, 0xef, 0xb3, 0x1d, 0x62, 0xfe, 0xc2, 0xce, 0x4e, 0x96, 0x2b, 0x47, + 0x9c, 0x19, 0x15, 0xfd, 0xd6, 0xe9, 0xe4, 0xf8, 0xb1, 0x76, 0x8d, 0x58, + 0xa9, 0x47, 0xe4, 0x0d, 0x31, 0x68, 0x88, 0xc3, 0x32, 0xbf, 0xee, 0xe1, + 0x1c, 0xe5, 0xe9, 0x3a, 0xc5, 0xee, 0x18, 0xeb, 0x15, 0x87, 0xb7, 0xe3, + 0xdb, 0xfd, 0xbb, 0xeb, 0xdc, 0xc0, 0x96, 0x2f, 0xed, 0xb3, 0x4f, 0xbc, + 0xac, 0x5f, 0x10, 0xe4, 0xeb, 0x17, 0xff, 0xc2, 0x2f, 0x73, 0xef, 0x11, + 0x49, 0xda, 0x0b, 0x17, 0xf6, 0xa5, 0xe0, 0xdc, 0x58, 0xb8, 0x4c, 0xb1, + 0x6c, 0x30, 0xf1, 0x08, 0xb6, 0x8e, 0x8b, 0xbe, 0x90, 0x94, 0xbf, 0x98, + 0x18, 0x36, 0x82, 0xc5, 0x4a, 0x66, 0x99, 0x0d, 0xd7, 0x2a, 0xbe, 0x07, + 0x23, 0x57, 0x5a, 0xb1, 0x7b, 0xc1, 0xec, 0xb1, 0x79, 0xb5, 0xb2, 0xc5, + 0xff, 0xf3, 0x78, 0x52, 0xf3, 0xde, 0xff, 0xce, 0xf8, 0xb1, 0x58, 0x89, + 0x0d, 0xc8, 0x00, 0x3d, 0x7e, 0x07, 0x0c, 0x9f, 0x2c, 0x54, 0x9e, 0xd3, + 0x18, 0x54, 0xab, 0x26, 0xec, 0x85, 0xcd, 0xbf, 0x1b, 0x1b, 0x19, 0x94, + 0x63, 0x37, 0xef, 0x81, 0xf4, 0x6a, 0xc5, 0xed, 0xc3, 0x82, 0xc5, 0xf4, + 0xeb, 0xaf, 0xe2, 0xc5, 0x7c, 0xf2, 0x00, 0x41, 0x7e, 0xec, 0x0d, 0x9f, + 0x58, 0xbf, 0x82, 0x61, 0xcf, 0x7c, 0x58, 0xa7, 0x3d, 0x90, 0x14, 0xdf, + 0xdf, 0xc0, 0x0b, 0xdc, 0x58, 0xbd, 0x39, 0xf5, 0x8a, 0x19, 0xe5, 0xf8, + 0xbe, 0xfb, 0x3a, 0xa7, 0x4b, 0x17, 0xff, 0xff, 0xf6, 0x47, 0xe0, 0xf9, + 0x23, 0x9f, 0x7f, 0x05, 0xbf, 0xe7, 0x9f, 0xce, 0x34, 0x9d, 0x62, 0xfd, + 0xfc, 0x84, 0x19, 0x62, 0xff, 0xfb, 0x3f, 0xbf, 0xde, 0x22, 0x60, 0xbd, + 0x9f, 0x58, 0xac, 0x55, 0x4a, 0xee, 0x5a, 0x7b, 0x66, 0xc2, 0x22, 0xe1, + 0x2f, 0xa1, 0x17, 0x1c, 0x51, 0x7f, 0xf4, 0xbf, 0xbf, 0x9f, 0x60, 0x47, + 0x62, 0xc5, 0xd3, 0xba, 0xc5, 0xbf, 0xa3, 0xde, 0xe2, 0x35, 0xf7, 0x9f, + 0x22, 0x58, 0xb1, 0xab, 0x15, 0x87, 0xbd, 0xd9, 0x43, 0x91, 0xdf, 0x40, + 0xa7, 0x65, 0x8b, 0x83, 0x02, 0xc5, 0x68, 0xde, 0x70, 0x8e, 0xf6, 0x3c, + 0x4b, 0x17, 0x11, 0xab, 0x17, 0xd3, 0xa6, 0x82, 0xc5, 0x49, 0xba, 0x00, + 0xc5, 0x4a, 0x26, 0x06, 0x43, 0xc5, 0x7a, 0x31, 0xdb, 0xfb, 0xcc, 0x31, + 0xf6, 0x8f, 0xf2, 0x10, 0x81, 0x1c, 0xae, 0x8c, 0xa5, 0x22, 0x9b, 0x0c, + 0xbd, 0xe3, 0x57, 0x79, 0x45, 0x91, 0x4b, 0x68, 0xd4, 0x67, 0xe7, 0x8f, + 0x97, 0xf3, 0xeb, 0x8d, 0x29, 0xb0, 0x10, 0x80, 0x29, 0xfd, 0x3e, 0x46, + 0xbb, 0xe9, 0x79, 0x22, 0x96, 0x0e, 0x14, 0x66, 0x61, 0xc6, 0x05, 0x7f, + 0xf7, 0xb9, 0xfc, 0x88, 0x85, 0xdc, 0x38, 0xb1, 0x4b, 0x17, 0xff, 0x61, + 0x03, 0x33, 0x5c, 0xf4, 0xe2, 0xc5, 0xff, 0x77, 0xec, 0xd3, 0xec, 0xc7, + 0x58, 0xbd, 0x9d, 0x31, 0x62, 0x80, 0x89, 0xb2, 0x42, 0xe1, 0xdd, 0xfd, + 0x09, 0xec, 0x1a, 0x95, 0x8b, 0xff, 0xbb, 0x87, 0x07, 0xa9, 0x08, 0xb0, + 0x6b, 0x15, 0x29, 0xca, 0x41, 0x23, 0x21, 0x4f, 0xd9, 0x79, 0x17, 0xde, + 0xeb, 0xe0, 0xeb, 0x17, 0xd2, 0x4d, 0x05, 0x8b, 0xee, 0x07, 0xb4, 0xac, + 0x5e, 0x62, 0x01, 0x87, 0xd1, 0xa2, 0x2e, 0x10, 0xdf, 0xef, 0xb4, 0x0c, + 0xd6, 0xa5, 0x62, 0xa3, 0xcf, 0xd7, 0xe8, 0x17, 0xf8, 0x63, 0x98, 0x7c, + 0x3e, 0x2c, 0x5f, 0xf8, 0xbd, 0xcc, 0x19, 0xba, 0xce, 0x2c, 0x56, 0x22, + 0x6d, 0xc9, 0x44, 0x6d, 0x78, 0xed, 0x12, 0xc5, 0xff, 0xa0, 0xc4, 0x13, + 0x0e, 0x7b, 0xe2, 0xc5, 0xff, 0xf9, 0x8b, 0xa6, 0x77, 0x03, 0xcf, 0xfd, + 0x8f, 0xd1, 0x62, 0xfe, 0x73, 0xcf, 0xc3, 0x1a, 0xc5, 0xff, 0x07, 0xe7, + 0x21, 0x43, 0x38, 0xb1, 0x50, 0x3e, 0x97, 0x2f, 0xbd, 0xc6, 0x25, 0x8b, + 0xe7, 0x9d, 0x71, 0x62, 0xf8, 0x3d, 0x49, 0xd6, 0x2b, 0xe7, 0x8d, 0xc2, + 0x2a, 0xdd, 0x3c, 0x58, 0x87, 0xb4, 0x81, 0xf8, 0x61, 0x70, 0x87, 0xa3, + 0x15, 0xff, 0xfa, 0x1c, 0x2c, 0xf7, 0x1f, 0x0f, 0xed, 0x60, 0x4b, 0x17, + 0x9f, 0x52, 0xb1, 0x70, 0xa0, 0xb1, 0x7f, 0xce, 0x71, 0xe4, 0x53, 0x9a, + 0x58, 0xad, 0x8f, 0x47, 0xe3, 0x17, 0xa1, 0x3d, 0xac, 0x5f, 0x84, 0x42, + 0x9e, 0xd6, 0x2f, 0x1f, 0x3c, 0xb1, 0x78, 0x0c, 0x75, 0x8b, 0xb0, 0x0b, + 0x15, 0x26, 0xd3, 0x07, 0x6d, 0x09, 0x4d, 0x1f, 0x1b, 0x62, 0x23, 0x38, + 0xf0, 0x0a, 0x49, 0x46, 0xbb, 0x4f, 0xe4, 0xa3, 0x9d, 0xbf, 0x88, 0xa7, + 0xe2, 0xd2, 0xc5, 0xb7, 0x58, 0xbb, 0xd2, 0xb1, 0x7d, 0x3f, 0x16, 0x96, + 0x2d, 0xce, 0xb4, 0xf3, 0x5c, 0x4c, 0x85, 0xef, 0xa1, 0x9b, 0x41, 0x62, + 0xa5, 0x30, 0x07, 0x2a, 0x67, 0xa2, 0x38, 0xbf, 0x16, 0x00, 0x5c, 0x58, + 0xbf, 0xc6, 0x13, 0x6c, 0x53, 0xda, 0xc5, 0xff, 0xf0, 0x60, 0x68, 0x6f, + 0xf7, 0xee, 0x13, 0x9e, 0x58, 0xbf, 0xf7, 0xdf, 0xdf, 0xc7, 0xf4, 0x81, + 0x62, 0xed, 0xdf, 0x11, 0xdd, 0xa2, 0x82, 0x35, 0xe2, 0x9d, 0xdc, 0xf2, + 0xc5, 0xf8, 0x6c, 0x52, 0x05, 0x8a, 0xdc, 0xdf, 0x86, 0x31, 0x7f, 0x70, + 0x6e, 0x09, 0x25, 0x8b, 0xf3, 0x6e, 0xe4, 0x6a, 0xc5, 0xfc, 0xde, 0x00, + 0x65, 0x05, 0x8a, 0xd9, 0x15, 0x1d, 0x91, 0xe8, 0xb7, 0xe5, 0x37, 0xff, + 0xe2, 0x93, 0xf8, 0x98, 0x1c, 0x2c, 0xf4, 0x84, 0xb1, 0x7e, 0xe9, 0x9e, + 0x7d, 0x2c, 0x5f, 0xc5, 0x9b, 0x1c, 0x5f, 0x58, 0xb0, 0xa4, 0xf6, 0x60, + 0x55, 0x7b, 0xef, 0x12, 0xc5, 0xff, 0x4e, 0xf8, 0x39, 0xee, 0x1c, 0x58, + 0xbf, 0x16, 0x72, 0x4e, 0xb1, 0x5b, 0xa2, 0x00, 0x87, 0xba, 0x1d, 0xdf, + 0xff, 0xf6, 0x80, 0x01, 0x73, 0xef, 0xe8, 0x67, 0xd8, 0x0e, 0x39, 0x58, + 0xbf, 0xe6, 0xd6, 0x74, 0xce, 0x92, 0x35, 0x8a, 0xc4, 0x51, 0x81, 0x9e, + 0xff, 0xfb, 0x0d, 0x35, 0xc7, 0xf7, 0x8b, 0xef, 0xdf, 0x96, 0x28, 0xe7, + 0xec, 0x44, 0x57, 0xf8, 0xcf, 0xb4, 0x09, 0xc2, 0x58, 0xbf, 0xa4, 0x31, + 0x8d, 0xf7, 0x58, 0xa9, 0x4f, 0x47, 0x23, 0x4b, 0x72, 0x11, 0x1a, 0xdc, + 0x2d, 0x2c, 0x5e, 0xdd, 0xb4, 0xb1, 0x7f, 0xed, 0xb0, 0x8f, 0x9e, 0xe0, + 0x7c, 0x58, 0xbe, 0xde, 0x74, 0x6a, 0xc5, 0xf6, 0x7d, 0xbb, 0x58, 0xae, + 0x1e, 0x40, 0x64, 0xb7, 0xd9, 0xbc, 0x9d, 0x62, 0xfe, 0xe3, 0xe0, 0x44, + 0x35, 0x8b, 0x6d, 0xf3, 0xd1, 0xe1, 0x1d, 0xfc, 0xe0, 0xee, 0x19, 0xe5, + 0x8a, 0xd9, 0x38, 0xbf, 0x8c, 0x30, 0xf0, 0x21, 0x12, 0x4e, 0x9d, 0x0a, + 0x6f, 0xf8, 0x32, 0x86, 0x74, 0x2c, 0xe2, 0xc5, 0xf6, 0x6c, 0x28, 0x2c, + 0x5f, 0x43, 0xd8, 0x05, 0x8b, 0xdc, 0x78, 0x96, 0x2f, 0xdc, 0xc8, 0xa6, + 0x0b, 0x15, 0x04, 0x47, 0x76, 0x49, 0xc2, 0x3f, 0x0f, 0x5f, 0xb8, 0xe5, + 0xdc, 0x16, 0x2d, 0x8b, 0x17, 0xbe, 0x2d, 0xd6, 0x2b, 0x0f, 0x67, 0x72, + 0x9f, 0x08, 0xdf, 0xb1, 0xc7, 0xf7, 0x58, 0xad, 0x8f, 0x5a, 0x05, 0xf7, + 0xf7, 0x38, 0xe5, 0xdc, 0x16, 0x2e, 0xd1, 0xab, 0x15, 0xd9, 0xe4, 0x31, + 0x7d, 0xff, 0xcd, 0x03, 0x38, 0x59, 0xee, 0x64, 0x7a, 0xc5, 0x4a, 0x78, + 0x59, 0x0e, 0xd6, 0x6b, 0x11, 0x15, 0xfb, 0x67, 0xe7, 0xe5, 0x62, 0xe0, + 0x04, 0xb1, 0x58, 0x78, 0x46, 0x94, 0xdf, 0xfb, 0xbf, 0x71, 0xca, 0x40, + 0xc7, 0x58, 0xa5, 0x8a, 0xc3, 0xcb, 0xe8, 0x7f, 0x71, 0xfe, 0xb1, 0x7b, + 0xde, 0xed, 0x62, 0xa0, 0x6d, 0xc0, 0x31, 0x5b, 0x1f, 0xdf, 0x96, 0xaf, + 0xf6, 0x1d, 0xff, 0x21, 0x9d, 0x62, 0xff, 0xff, 0xb3, 0xdf, 0x61, 0xc6, + 0x16, 0x74, 0x2c, 0xe7, 0x1f, 0xbf, 0x2c, 0x56, 0x91, 0x3f, 0x1c, 0x69, + 0x6e, 0xd6, 0x2f, 0xb0, 0xf3, 0x1e, 0xb1, 0x6e, 0xfa, 0xf3, 0x71, 0xc1, + 0x3b, 0xc6, 0xb8, 0x4b, 0x17, 0xe0, 0x9f, 0x08, 0xd5, 0x8a, 0x73, 0xc8, + 0x10, 0xfd, 0xfe, 0x18, 0x79, 0x17, 0xd8, 0xeb, 0x15, 0x2a, 0xb5, 0x32, + 0x1d, 0x0f, 0x0c, 0x26, 0x5e, 0x27, 0x51, 0x10, 0xdf, 0xfe, 0xf7, 0x22, + 0x2c, 0x0b, 0xf9, 0xe9, 0x1a, 0xc5, 0xf3, 0x83, 0xb1, 0xac, 0x5e, 0x9e, + 0xfc, 0xb1, 0x79, 0xba, 0xb8, 0xb1, 0x5b, 0x9f, 0x16, 0x89, 0x3e, 0x3d, + 0x7f, 0xec, 0xef, 0xc1, 0x61, 0x0f, 0xf2, 0xb1, 0x5b, 0x9f, 0x86, 0x8c, + 0x2a, 0x53, 0x41, 0x68, 0xc7, 0xad, 0x8b, 0x17, 0xda, 0xd9, 0xf6, 0x58, + 0xbd, 0xf7, 0xd2, 0xc5, 0x99, 0xcf, 0x0a, 0x22, 0x5b, 0xfe, 0xe0, 0xb3, + 0xb0, 0x13, 0x1d, 0x62, 0x8c, 0x45, 0xa7, 0xd4, 0xe3, 0x89, 0xee, 0xcf, + 0x2c, 0x5e, 0x29, 0x3a, 0xc5, 0x49, 0xb3, 0xe0, 0xbd, 0xfe, 0x9e, 0x63, + 0xf4, 0x63, 0xac, 0x5f, 0xf8, 0x98, 0x2d, 0x4b, 0xc1, 0xb8, 0xb1, 0x5b, + 0x1f, 0x94, 0x46, 0x97, 0xba, 0xfc, 0x25, 0x8b, 0xdd, 0x30, 0x96, 0x2a, + 0x53, 0x5c, 0xed, 0x9d, 0xa1, 0x24, 0x44, 0x9e, 0x21, 0xbd, 0xf8, 0x1d, + 0x62, 0xef, 0xba, 0xc5, 0x61, 0xb5, 0xf0, 0xf5, 0xfe, 0x9d, 0xb5, 0x3a, + 0x99, 0x58, 0xa9, 0x6e, 0x61, 0x61, 0x1e, 0x36, 0x47, 0xe6, 0x6c, 0xb5, + 0xae, 0xe3, 0x28, 0x78, 0xcb, 0xa2, 0x3f, 0xd4, 0x2b, 0x7f, 0x29, 0xe1, + 0xa3, 0xcc, 0x02, 0xf1, 0x4a, 0x8b, 0xe4, 0xb5, 0x6f, 0x47, 0x3e, 0x29, + 0x47, 0x11, 0xd0, 0x83, 0x0c, 0x82, 0xfb, 0x4f, 0x3d, 0xac, 0x5e, 0xfe, + 0x6e, 0xb1, 0x78, 0xef, 0xc5, 0x8a, 0xc3, 0x77, 0xa1, 0xeb, 0xee, 0xf8, + 0x23, 0xac, 0x5c, 0x07, 0x58, 0xba, 0x62, 0x73, 0x78, 0xc4, 0xb7, 0xba, + 0x60, 0xd6, 0x2e, 0x70, 0x96, 0x2d, 0xba, 0xc5, 0x61, 0xab, 0x38, 0xc5, + 0xf1, 0x82, 0xef, 0x8b, 0x17, 0xf0, 0xbb, 0xe7, 0xde, 0x3d, 0x62, 0xfc, + 0x69, 0xaf, 0xa8, 0x2c, 0x5c, 0x6c, 0xac, 0x5a, 0x0b, 0x17, 0xfa, 0x7e, + 0xde, 0x10, 0xbb, 0x58, 0xa7, 0x3d, 0xfe, 0x0c, 0x08, 0x4a, 0xf3, 0x77, + 0x05, 0x8b, 0xf0, 0x7f, 0x7e, 0xf8, 0xb1, 0x7f, 0x8a, 0x4e, 0xc5, 0xdc, + 0x16, 0x2b, 0xad, 0x55, 0xb9, 0x2b, 0xdb, 0x2e, 0x40, 0xac, 0x69, 0x46, + 0x90, 0x47, 0x93, 0x68, 0xcc, 0xa1, 0x15, 0xe2, 0xe1, 0x0f, 0x06, 0x57, + 0x7f, 0x79, 0xc9, 0xc1, 0xc5, 0x8b, 0xfb, 0x98, 0x30, 0x37, 0x96, 0x2e, + 0xe7, 0x16, 0x2f, 0x86, 0x59, 0xf5, 0x8a, 0x31, 0x12, 0xb1, 0x16, 0xe8, + 0xb8, 0x31, 0x8b, 0xd0, 0xfc, 0xac, 0x50, 0xcf, 0x77, 0xb4, 0x0b, 0xed, + 0x49, 0x6e, 0xb1, 0x7d, 0x84, 0xe3, 0x58, 0xbe, 0xd3, 0x11, 0xab, 0x17, + 0x9d, 0xba, 0x2c, 0x5d, 0xad, 0x96, 0x2e, 0xce, 0x0c, 0xdb, 0x88, 0x7a, + 0xff, 0xff, 0xff, 0xbb, 0x06, 0xb7, 0xe4, 0x7f, 0x47, 0x8d, 0x0d, 0x0f, + 0xac, 0xe4, 0x3a, 0xef, 0x5d, 0x70, 0xc0, 0x47, 0x98, 0x67, 0xe3, 0x96, + 0x2b, 0x13, 0xb1, 0x72, 0x3f, 0x91, 0xb1, 0x09, 0x2d, 0x06, 0x59, 0x7e, + 0x38, 0xbe, 0x1e, 0xcb, 0x17, 0x37, 0x96, 0x2b, 0x47, 0x86, 0x72, 0xcb, + 0xa1, 0xe5, 0x8b, 0xef, 0x37, 0x7c, 0x58, 0xbf, 0x0d, 0xfa, 0x48, 0xd6, + 0x2b, 0x63, 0xce, 0xdc, 0x92, 0xdf, 0x58, 0xb0, 0x16, 0x2e, 0x6e, 0xbd, + 0x62, 0xee, 0x41, 0x62, 0xa5, 0x30, 0x41, 0x91, 0x33, 0x30, 0x09, 0x38, + 0x25, 0xe1, 0x21, 0x0e, 0x5f, 0xdb, 0x45, 0x08, 0xdb, 0x5b, 0x2c, 0x5d, + 0xd7, 0x23, 0x96, 0x2e, 0x80, 0x16, 0x2f, 0x36, 0x69, 0x62, 0xf1, 0x67, + 0x96, 0x2f, 0x7f, 0x0e, 0xb1, 0x5d, 0x9f, 0x6f, 0xc6, 0x08, 0x73, 0xc3, + 0x97, 0x78, 0x96, 0x2f, 0x4f, 0x7c, 0x58, 0xbe, 0x72, 0x86, 0x2c, 0x5c, + 0x1f, 0xd6, 0x2f, 0x6c, 0xc4, 0xb1, 0x76, 0xb6, 0x58, 0xbf, 0x13, 0x1f, + 0x0e, 0xb1, 0x43, 0x45, 0xa9, 0xc7, 0xbe, 0x43, 0xe1, 0x91, 0x0e, 0x86, + 0x33, 0x4b, 0x16, 0xfa, 0xc5, 0x49, 0x7d, 0xa0, 0xcb, 0xe9, 0x1b, 0x41, + 0x62, 0xfd, 0x9e, 0xfb, 0xf9, 0x62, 0xfc, 0xdd, 0xe7, 0x7e, 0x58, 0xaf, + 0x9e, 0x97, 0x8a, 0x2f, 0x36, 0xa0, 0xb1, 0x7b, 0xf8, 0x75, 0x8a, 0x81, + 0xba, 0xf0, 0xed, 0xff, 0x1b, 0x16, 0x66, 0xfe, 0x93, 0x56, 0x2f, 0xe6, + 0xd6, 0x7e, 0x40, 0xb1, 0x73, 0xf1, 0x62, 0xe2, 0xd9, 0x62, 0xb7, 0x35, + 0xe2, 0x17, 0xbc, 0x1f, 0xd9, 0x62, 0x8c, 0x4f, 0xa7, 0x61, 0xf3, 0x5d, + 0x3b, 0x5c, 0xd1, 0x09, 0xcf, 0x7e, 0xb9, 0xc2, 0x2b, 0xe3, 0xc7, 0x47, + 0x8d, 0x62, 0xdb, 0x2c, 0x5d, 0xfc, 0x58, 0xa5, 0x8a, 0xdc, 0xd1, 0xe8, + 0x5e, 0xb6, 0x3d, 0x87, 0x36, 0xbe, 0xd9, 0x9b, 0xeb, 0x17, 0xe1, 0x6c, + 0xcd, 0xf5, 0x8b, 0xdb, 0x36, 0xcb, 0x17, 0xec, 0x18, 0x1b, 0xcb, 0x14, + 0x62, 0x24, 0xfe, 0x46, 0xc5, 0x3d, 0x07, 0xef, 0xc1, 0xc0, 0x53, 0xc5, + 0x8b, 0xc0, 0x0f, 0xeb, 0x17, 0xbc, 0xc3, 0x58, 0xad, 0x91, 0x4a, 0x69, + 0xff, 0x65, 0x44, 0x3f, 0x7e, 0x1b, 0xf4, 0x91, 0xac, 0x5b, 0xcb, 0x17, + 0x47, 0x6e, 0xb1, 0x7e, 0x72, 0xd8, 0x3e, 0xd6, 0x2f, 0x8a, 0x7b, 0xe2, + 0xc5, 0x82, 0x19, 0xe7, 0x61, 0x5d, 0x41, 0x19, 0xdd, 0x95, 0x68, 0x49, + 0x9a, 0xaf, 0xb3, 0xa6, 0x0d, 0x62, 0xfe, 0x13, 0x6a, 0x0c, 0x05, 0x8b, + 0xfe, 0x2c, 0xd6, 0xa7, 0x70, 0xce, 0xb1, 0x7c, 0x76, 0xee, 0x30, 0x67, + 0xd2, 0x19, 0x75, 0x99, 0x62, 0xe7, 0xd6, 0x1e, 0x7f, 0x0f, 0xaf, 0xd1, + 0x7d, 0xfb, 0xf2, 0xc5, 0x69, 0x33, 0x3f, 0xc3, 0x73, 0xc5, 0x97, 0xec, + 0x21, 0xfe, 0x56, 0x2f, 0x6c, 0xde, 0x58, 0xa8, 0xdd, 0x92, 0xef, 0x1a, + 0xce, 0x26, 0x11, 0xd0, 0x3c, 0xc8, 0x66, 0x3c, 0xa5, 0xf3, 0xbb, 0x7e, + 0x10, 0x4d, 0x1a, 0xd1, 0x46, 0x1a, 0x28, 0xdc, 0x02, 0x36, 0x0c, 0x9e, + 0xfb, 0xac, 0xfc, 0xf4, 0x58, 0xbf, 0xec, 0x18, 0xdf, 0xbc, 0xef, 0xcb, + 0x17, 0xdb, 0x94, 0xc1, 0x62, 0xbe, 0x7b, 0xcc, 0x77, 0x7f, 0xa7, 0x3d, + 0x3f, 0x61, 0xac, 0x5d, 0xc8, 0xf5, 0x8b, 0x9b, 0xa2, 0xc5, 0xba, 0x2c, + 0x53, 0x9a, 0xd6, 0x19, 0xbd, 0xf7, 0x3a, 0xc5, 0xd9, 0xc5, 0x8a, 0x19, + 0xe9, 0xe0, 0xfc, 0x70, 0xed, 0xff, 0x67, 0xa7, 0x70, 0xe4, 0x18, 0xb1, + 0x7a, 0x7b, 0x82, 0xc5, 0x6c, 0x9b, 0xb8, 0xc8, 0x74, 0x64, 0x08, 0x4d, + 0x84, 0x63, 0xd4, 0x75, 0x7d, 0x98, 0x5e, 0x58, 0xbf, 0x9d, 0xa1, 0xe7, + 0xd9, 0x62, 0xff, 0x8f, 0xe8, 0x60, 0x39, 0x84, 0xb1, 0x7d, 0xd1, 0xc8, + 0x1f, 0x3e, 0x70, 0xcb, 0xaf, 0x84, 0xda, 0x82, 0xc5, 0xff, 0x66, 0xf3, + 0xbb, 0x6b, 0x69, 0x58, 0xa9, 0x44, 0xc8, 0xce, 0xfe, 0x47, 0x7f, 0xe9, + 0x1e, 0xa7, 0xcf, 0xbb, 0x8d, 0x62, 0xfb, 0xdc, 0x6d, 0xd6, 0x28, 0x67, + 0xc6, 0x23, 0xfb, 0xe1, 0x36, 0xa0, 0xb1, 0x7a, 0x7a, 0xa0, 0xb1, 0x7a, + 0x38, 0x5d, 0xac, 0x5f, 0x4e, 0x77, 0x05, 0x8a, 0x1a, 0x22, 0x22, 0x23, + 0xd1, 0x07, 0x51, 0x15, 0xfd, 0xed, 0xc6, 0x33, 0xe9, 0x62, 0xff, 0xf9, + 0xb8, 0xda, 0x7e, 0xc1, 0xe8, 0x4c, 0x76, 0x2c, 0x5f, 0x39, 0x48, 0x16, + 0x28, 0x07, 0xe9, 0xe5, 0x3b, 0xfe, 0x8b, 0x9d, 0x18, 0xb6, 0x10, 0xd6, + 0x2f, 0xe6, 0x08, 0x00, 0x3c, 0x72, 0xc5, 0xf6, 0x7b, 0x0e, 0xb1, 0x71, + 0x1a, 0xb1, 0x4c, 0x6e, 0x84, 0x45, 0x50, 0x44, 0x6f, 0x1b, 0x6f, 0xd0, + 0x21, 0x37, 0x16, 0x2f, 0xfd, 0x24, 0x2f, 0x40, 0x45, 0xee, 0x2c, 0x56, + 0x1f, 0x3e, 0x8a, 0x2f, 0xff, 0xc3, 0x98, 0x4e, 0x43, 0xf2, 0x32, 0x9f, + 0x71, 0x62, 0xff, 0xa7, 0xd0, 0xc8, 0xf6, 0x20, 0x2c, 0x5f, 0xb9, 0x90, + 0x84, 0xac, 0x56, 0x22, 0xdc, 0x95, 0x38, 0x77, 0x78, 0x0e, 0x05, 0x8b, + 0xed, 0xa2, 0xfb, 0xac, 0x5b, 0xf8, 0x78, 0x42, 0x1d, 0xbf, 0xf1, 0x37, + 0x1b, 0xfd, 0xc3, 0x3c, 0xb1, 0x7f, 0xfd, 0xc9, 0x3b, 0x78, 0x3c, 0xf9, + 0x09, 0xa3, 0xd6, 0x2a, 0x08, 0x92, 0xf1, 0xfd, 0xcc, 0x75, 0x8a, 0xc3, + 0x75, 0xb9, 0x1d, 0xff, 0x89, 0x8d, 0xfb, 0x43, 0x8e, 0x35, 0x8b, 0xe2, + 0xf6, 0x12, 0xc5, 0xfb, 0xee, 0x4d, 0xb2, 0xc5, 0xb7, 0x58, 0xbe, 0x14, + 0x33, 0x9b, 0x9b, 0xb2, 0x28, 0xa3, 0xa3, 0x4d, 0x8f, 0xc9, 0x72, 0xee, + 0x92, 0xb1, 0x7f, 0xff, 0x6c, 0xfa, 0x26, 0x37, 0x9f, 0x96, 0xee, 0x46, + 0xeb, 0x17, 0x67, 0x96, 0x2a, 0x51, 0x19, 0x83, 0x24, 0xb9, 0x70, 0x67, + 0x58, 0xa7, 0x4c, 0x00, 0xa1, 0x75, 0xe2, 0xdb, 0xfb, 0x39, 0xcc, 0xd6, + 0xcb, 0x17, 0xef, 0x1b, 0x25, 0x05, 0x8a, 0x19, 0xec, 0x06, 0x5f, 0x61, + 0xac, 0x56, 0xe6, 0xd7, 0xb2, 0x3b, 0xba, 0x32, 0xc5, 0xfd, 0xa9, 0xdf, + 0x3a, 0x62, 0xc5, 0xfe, 0x20, 0x6b, 0x4f, 0x17, 0x16, 0x2a, 0x4f, 0x95, + 0x8c, 0x2f, 0x4f, 0x54, 0xac, 0x57, 0x58, 0xcc, 0xeb, 0x98, 0xff, 0xf6, + 0x62, 0x84, 0x64, 0x23, 0x84, 0x96, 0x42, 0xa8, 0xd4, 0x1e, 0xe1, 0x4a, + 0xe4, 0x51, 0x43, 0x2f, 0x50, 0x8a, 0x3c, 0x36, 0x3e, 0xe0, 0x50, 0xf3, + 0xf4, 0x7e, 0x82, 0x86, 0x0f, 0x42, 0x38, 0xe7, 0xee, 0xa2, 0x0b, 0xf4, + 0x53, 0xe2, 0xe8, 0xb1, 0x7d, 0x16, 0x38, 0x16, 0x28, 0xc3, 0xce, 0x92, + 0xbb, 0xff, 0xa7, 0xa6, 0xa7, 0x58, 0xff, 0x91, 0xac, 0x5d, 0x38, 0xb1, + 0x44, 0x7b, 0x7c, 0x45, 0xbe, 0x3f, 0x59, 0x1a, 0xe3, 0x65, 0x8b, 0x98, + 0xeb, 0x17, 0x45, 0x1c, 0xb1, 0x44, 0x6c, 0xfa, 0x0b, 0xdf, 0xfb, 0xef, + 0xa2, 0xce, 0x9a, 0x7e, 0x2c, 0x5f, 0xd3, 0xe6, 0x89, 0xbc, 0xb1, 0x61, + 0xac, 0x5f, 0xfe, 0xee, 0x1c, 0x33, 0xf9, 0xee, 0x13, 0x79, 0x62, 0xb4, + 0x7b, 0xe7, 0x12, 0xbf, 0xd2, 0x17, 0x34, 0x29, 0x02, 0xc5, 0x39, 0xeb, + 0x91, 0x15, 0xc2, 0xf2, 0xc5, 0x86, 0xb1, 0x7c, 0x5e, 0xc0, 0x2c, 0x56, + 0x8d, 0xa0, 0x84, 0xaa, 0x0a, 0xb6, 0x31, 0xf7, 0xb2, 0x17, 0x67, 0x88, + 0x88, 0xe8, 0x1e, 0x87, 0x24, 0x71, 0x07, 0x52, 0x65, 0xa3, 0x23, 0x78, + 0xe2, 0x70, 0x7a, 0xc8, 0xc6, 0xba, 0xd8, 0xdb, 0x23, 0x48, 0xd1, 0xa3, + 0x69, 0x40, 0x5d, 0x77, 0x18, 0x27, 0x5c, 0x8c, 0x1f, 0xae, 0xb1, 0xed, + 0x46, 0xa8, 0x54, 0xc6, 0xb7, 0x19, 0xad, 0x4e, 0xb6, 0x9d, 0x35, 0x85, + 0x22, 0x54, 0x75, 0x84, 0xbe, 0x5b, 0x01, 0x83, 0x67, 0x7d, 0x37, 0xa6, + 0xae, 0xf7, 0x3f, 0x8a, 0xf4, 0x9c, 0xe8, 0xf8, 0xde, 0x62, 0xa6, 0xf9, + 0xea, 0x97, 0xac, 0x7a, 0x43, 0xb7, 0xed, 0x1f, 0xab, 0x53, 0x62, 0x81, + 0x48, 0x65, 0xeb, 0xe3, 0x6f, 0x2a, 0xef, 0xb7, 0x96, 0xe3, 0xd3, 0xd5, + 0xe5, 0xe0, 0xa7, 0x06, 0xba, 0x4b, 0x58, 0x0a, 0x39, 0xc8, 0xea, 0x4e, + 0xd0, 0x74, 0xdd, 0x1e, 0xa9, 0xc7, 0x1b, 0xf4, 0x63, 0xe9, 0xb4, 0xb1, + 0x51, 0x91, 0xc7, 0xa7, 0xec, 0xac, 0xe5, 0x71, 0x25, 0x7f, 0x38, 0xb0, + 0xa0, 0x4b, 0x4f, 0xbf, 0xfd, 0x18, 0x76, 0x84, 0x66, 0x6b, 0x76, 0x6d, + 0xd5, 0x23, 0x61, 0x7e, 0xd6, 0xec, 0xdb, 0xaa, 0x4a, 0xd2, 0xe0, 0x74, + 0x58, 0xbb, 0x91, 0xcb, 0x16, 0x8c, 0xc3, 0xec, 0xf9, 0xbf, 0x06, 0xae, + 0xe9, 0xa5, 0x8b, 0x9a, 0x56, 0x2f, 0xf4, 0x20, 0x2f, 0x14, 0xc1, 0x62, + 0xfb, 0x3e, 0xde, 0x58, 0xac, 0x3d, 0x62, 0x34, 0xbf, 0xf0, 0x3e, 0xd0, + 0x78, 0x7d, 0xfa, 0x2c, 0x57, 0x5a, 0x7c, 0x3c, 0x20, 0xbf, 0xff, 0xdd, + 0x25, 0xf5, 0xbb, 0x9d, 0xa0, 0xe5, 0x83, 0xc3, 0x56, 0x2f, 0xfc, 0x4c, + 0xfd, 0x4e, 0x5b, 0x49, 0xab, 0x15, 0x28, 0xa3, 0x66, 0x2b, 0xff, 0xbd, + 0xe6, 0x9f, 0x67, 0xe5, 0xc0, 0xb1, 0x50, 0x3e, 0x47, 0x21, 0xbf, 0xc5, + 0x2d, 0xee, 0x39, 0x2c, 0x5f, 0xf9, 0xc1, 0x8c, 0xfa, 0xde, 0x7c, 0xb1, + 0x7c, 0x3f, 0xce, 0xcb, 0x15, 0x87, 0xc4, 0xe7, 0xd7, 0xe7, 0x18, 0x8b, + 0x16, 0x2f, 0x73, 0x1d, 0x62, 0xff, 0xb2, 0x2c, 0xce, 0x6c, 0xd1, 0xeb, + 0x16, 0x75, 0x8b, 0xbc, 0xe6, 0x1f, 0x51, 0x0e, 0x74, 0x3d, 0xbf, 0xf4, + 0x32, 0x18, 0xd0, 0x29, 0x3a, 0xc5, 0x49, 0xfc, 0xb9, 0xe5, 0xff, 0x37, + 0xda, 0x19, 0xb6, 0x04, 0xb1, 0x50, 0x4d, 0x93, 0x51, 0x85, 0x1c, 0x82, + 0xfe, 0xcd, 0xe4, 0x01, 0x9d, 0x62, 0xfb, 0x6c, 0xfb, 0xac, 0x56, 0x8f, + 0x4c, 0x46, 0x17, 0xe2, 0x8c, 0xfb, 0x86, 0xb1, 0x7d, 0x26, 0xfd, 0x96, + 0x29, 0x8f, 0x3c, 0x8b, 0x2f, 0xf7, 0x1b, 0xd1, 0x9c, 0x29, 0x58, 0xbf, + 0xa7, 0x6d, 0x4e, 0x0d, 0x62, 0xa0, 0x7c, 0x9f, 0x36, 0xbf, 0xff, 0x4e, + 0xd3, 0xa9, 0x3c, 0xcf, 0xbe, 0xe0, 0x3a, 0xc5, 0x49, 0xfb, 0xfc, 0x8a, + 0xff, 0x61, 0xdf, 0x5b, 0x08, 0x0b, 0x17, 0xff, 0xce, 0x5b, 0x67, 0xc4, + 0x6e, 0x00, 0xec, 0x05, 0x8b, 0xf3, 0x0b, 0xf3, 0xa5, 0x8b, 0xf3, 0xf4, + 0x72, 0x9d, 0x1f, 0xcf, 0x45, 0x1b, 0xff, 0xff, 0xec, 0x16, 0xf8, 0x3f, + 0xc9, 0x6f, 0x3a, 0xcc, 0xee, 0x05, 0x27, 0xcd, 0x2c, 0x56, 0x22, 0xf4, + 0x90, 0x2e, 0x78, 0xe5, 0x8b, 0xd2, 0x38, 0x96, 0x2f, 0x74, 0x14, 0x16, + 0x2a, 0x0b, 0xc6, 0x78, 0x43, 0xbc, 0x24, 0xde, 0x38, 0x4d, 0x42, 0x28, + 0xee, 0x3f, 0x87, 0xd8, 0x08, 0x4a, 0x36, 0xbe, 0x10, 0xf8, 0x6b, 0xa0, + 0xf5, 0xf8, 0xa4, 0x5d, 0x7f, 0x16, 0x2e, 0xf8, 0xd6, 0x2d, 0xac, 0x3c, + 0x53, 0x96, 0xdf, 0xfd, 0xa8, 0x16, 0x7b, 0x92, 0x7f, 0x6e, 0xb1, 0x52, + 0x7d, 0xa2, 0x27, 0xbb, 0x09, 0x62, 0xff, 0xa4, 0xbd, 0x14, 0x27, 0x67, + 0x58, 0xbb, 0xfc, 0x58, 0xb7, 0x6b, 0x17, 0xf1, 0xb1, 0xc2, 0xfb, 0xe9, + 0x62, 0xb0, 0xf1, 0x9c, 0x4e, 0xa0, 0x8b, 0x8c, 0x3a, 0x8e, 0x5e, 0xa1, + 0xa6, 0x01, 0x90, 0xce, 0xbf, 0xf7, 0x27, 0xdf, 0x63, 0x9f, 0x7d, 0xd6, + 0x2f, 0xfc, 0xcf, 0xd5, 0x3f, 0xf1, 0x64, 0x16, 0x2f, 0xd0, 0x7d, 0xdb, + 0x4b, 0x15, 0x04, 0x55, 0xfd, 0x0b, 0x88, 0x17, 0xb7, 0x70, 0x96, 0x2e, + 0x6d, 0xd5, 0x25, 0xa1, 0x5b, 0x9e, 0x23, 0x0f, 0xdf, 0x8d, 0xef, 0x82, + 0xed, 0x62, 0xa5, 0x18, 0x7b, 0xba, 0x39, 0x15, 0xfc, 0x27, 0x37, 0x52, + 0x35, 0x8b, 0xfb, 0x40, 0x0f, 0x93, 0x8b, 0x17, 0xa4, 0xbc, 0xb1, 0x7f, + 0xfe, 0xe7, 0x33, 0xef, 0xc1, 0x6c, 0xce, 0x7d, 0x3a, 0xc5, 0xda, 0xfb, + 0x9f, 0x93, 0x0e, 0x54, 0xa3, 0x35, 0xe1, 0x43, 0x7f, 0xfe, 0xe7, 0x33, + 0xf9, 0xb6, 0x69, 0xa1, 0x06, 0x82, 0xc5, 0xff, 0x7e, 0x7f, 0xbb, 0xf3, + 0x06, 0xb1, 0x7e, 0x7c, 0xe8, 0xda, 0x58, 0xb1, 0xc6, 0x7c, 0x7c, 0x3a, + 0xac, 0x47, 0x0b, 0x42, 0xe6, 0xfd, 0xa1, 0x01, 0xc6, 0xb1, 0x7f, 0x0c, + 0x79, 0x80, 0xe2, 0xc5, 0xfd, 0x20, 0xf7, 0x05, 0x1e, 0xb1, 0x7f, 0xce, + 0x43, 0x6f, 0xc3, 0x3c, 0xb1, 0x52, 0x89, 0x8e, 0x17, 0x78, 0xca, 0xff, + 0xf3, 0xfa, 0x13, 0xbf, 0xdf, 0xdc, 0x6e, 0xd6, 0x2b, 0x4a, 0xe5, 0x0e, + 0x5f, 0xf8, 0x7e, 0x14, 0x60, 0xfc, 0x26, 0xf4, 0x30, 0x7a, 0x17, 0xdf, + 0xc0, 0x33, 0x34, 0xe6, 0xac, 0x5f, 0xf6, 0x0d, 0xf9, 0x11, 0x48, 0xd6, + 0x28, 0x67, 0xd2, 0xc6, 0x17, 0xf6, 0xd3, 0xad, 0x48, 0x4b, 0x17, 0xfd, + 0x3b, 0xe1, 0xf0, 0xbd, 0x1c, 0xb1, 0x7f, 0xbf, 0x3a, 0x07, 0xb3, 0x65, + 0x8b, 0xfc, 0x59, 0x03, 0x1f, 0xf0, 0x58, 0xb3, 0x9d, 0x14, 0xbf, 0x3c, + 0xf1, 0xad, 0xff, 0xfd, 0xad, 0xb3, 0xed, 0xd8, 0x38, 0x13, 0x0f, 0xee, + 0x12, 0xc5, 0x4a, 0x6d, 0x5f, 0x86, 0xab, 0x1a, 0xdf, 0xfc, 0xd0, 0x33, + 0x53, 0xe7, 0xdd, 0xc6, 0xb1, 0x7e, 0x92, 0xd8, 0x8d, 0x58, 0xbe, 0xf6, + 0x7d, 0x96, 0x2d, 0x05, 0x8b, 0x42, 0x51, 0x47, 0x04, 0x6c, 0x29, 0xec, + 0x8a, 0xf6, 0x1d, 0xd6, 0x2f, 0xff, 0x9b, 0xab, 0xf9, 0xa2, 0x98, 0x39, + 0x08, 0x35, 0x8b, 0xc2, 0xe7, 0x96, 0x2f, 0xff, 0xd0, 0x62, 0x7f, 0x4f, + 0xf7, 0xc1, 0x94, 0xf1, 0x62, 0xff, 0xfc, 0xfd, 0x52, 0x42, 0x83, 0xf3, + 0x92, 0x61, 0xf7, 0x58, 0xa7, 0x45, 0x73, 0x2a, 0x5f, 0xfe, 0xe4, 0xf0, + 0xb0, 0x05, 0x23, 0xfc, 0xac, 0x5f, 0xff, 0x6f, 0x3a, 0xc0, 0x31, 0xda, + 0x12, 0xfb, 0xac, 0x5f, 0x9f, 0xab, 0xf8, 0x75, 0x8b, 0xff, 0xe8, 0x73, + 0x0a, 0x4e, 0xd9, 0xef, 0x49, 0xd6, 0x2d, 0xe9, 0x46, 0x4e, 0x28, 0x31, + 0x5d, 0x0d, 0x54, 0xfe, 0x87, 0x0e, 0xa5, 0xf8, 0x66, 0x70, 0x87, 0xd1, + 0x88, 0xdf, 0xf7, 0xdf, 0x5e, 0x6f, 0xb0, 0xd6, 0x2f, 0xfa, 0x0d, 0xcf, + 0x73, 0x05, 0xd7, 0xac, 0x5f, 0xff, 0xf9, 0xfd, 0xcc, 0x37, 0x7f, 0xbf, + 0xb2, 0x22, 0x93, 0xed, 0x81, 0x2c, 0x53, 0xa2, 0xbf, 0xa1, 0xfd, 0xed, + 0x85, 0xd4, 0xb1, 0x7d, 0x02, 0x6f, 0x2c, 0x5f, 0xff, 0x79, 0xb3, 0x83, + 0xc8, 0x7e, 0x7a, 0x0e, 0x56, 0x2f, 0xff, 0xff, 0xe7, 0xf0, 0xf0, 0x5c, + 0x33, 0xf9, 0xbf, 0xc5, 0xb3, 0xe1, 0x77, 0x0e, 0x70, 0x52, 0xb1, 0x4c, + 0x8d, 0xe2, 0x51, 0xa9, 0x4d, 0x9f, 0x09, 0x3b, 0x22, 0x68, 0xc0, 0x2f, + 0xef, 0x37, 0xcc, 0x1c, 0xac, 0x5f, 0x00, 0x3f, 0x4a, 0xc5, 0xa2, 0x58, + 0xb4, 0x1c, 0xdb, 0x88, 0x92, 0xa5, 0x11, 0x8c, 0xcd, 0x7d, 0x0f, 0x3e, + 0xcb, 0x17, 0xee, 0x71, 0x8b, 0x65, 0x8b, 0xf0, 0x7e, 0x29, 0x02, 0xc5, + 0xbe, 0xb1, 0x5d, 0xa2, 0x20, 0xe4, 0x9d, 0x0a, 0x43, 0x29, 0xbd, 0xac, + 0xfa, 0xc5, 0xff, 0xe6, 0xcf, 0xb3, 0xf5, 0x49, 0xc9, 0x8d, 0x58, 0xad, + 0x1f, 0x40, 0x07, 0x6f, 0xfc, 0xfc, 0xc1, 0xf7, 0xc9, 0xd7, 0x16, 0x2f, + 0xf3, 0x43, 0xcf, 0xb7, 0xdd, 0x62, 0xf1, 0x48, 0x16, 0x2f, 0xfe, 0xef, + 0x92, 0x6e, 0x7d, 0xf5, 0xf6, 0x58, 0xbf, 0xd2, 0x79, 0x8c, 0x08, 0x20, + 0x96, 0x2a, 0x08, 0x9c, 0x71, 0xce, 0xa4, 0x6b, 0xff, 0xa3, 0x24, 0x0f, + 0x0c, 0xf1, 0x48, 0x16, 0x2a, 0x55, 0x29, 0xe4, 0x2a, 0x77, 0x22, 0x74, + 0x06, 0x86, 0x87, 0x8c, 0xaf, 0xd9, 0xf7, 0xc3, 0xac, 0x5c, 0x40, 0x58, + 0xbe, 0x01, 0xdf, 0x4b, 0x15, 0x26, 0xe9, 0xc5, 0xef, 0xfc, 0x37, 0xe8, + 0xe3, 0xc0, 0xb3, 0xeb, 0x17, 0xfe, 0x21, 0xb1, 0xda, 0x12, 0xfb, 0xac, + 0x5e, 0xc3, 0xca, 0xc5, 0x49, 0xed, 0x61, 0xf5, 0xff, 0x0b, 0xdc, 0xc8, + 0x3e, 0xa5, 0x62, 0xff, 0xff, 0x9b, 0xd2, 0x4d, 0xb4, 0xea, 0x5e, 0x12, + 0x72, 0x93, 0x56, 0x2f, 0xf3, 0xf1, 0xc5, 0xd7, 0x8e, 0x56, 0x28, 0x68, + 0xd5, 0x23, 0x9f, 0x32, 0x5f, 0xdf, 0x9d, 0xc9, 0x8e, 0xb1, 0x7f, 0xff, + 0x8d, 0xcd, 0x67, 0x8c, 0x71, 0x98, 0xc5, 0x87, 0x17, 0xd6, 0x2f, 0xfc, + 0xcf, 0xbf, 0xd8, 0x5b, 0x69, 0xd6, 0x29, 0xd1, 0xa2, 0xc5, 0xc4, 0xc7, + 0x7b, 0x71, 0x4a, 0xc5, 0xfe, 0xda, 0x70, 0x87, 0xf9, 0x58, 0xb6, 0x39, + 0xe8, 0xb0, 0xf5, 0x6c, 0xae, 0xcc, 0x6c, 0x38, 0x3f, 0xbc, 0x26, 0xde, + 0x1e, 0xbf, 0x8c, 0x00, 0x9f, 0xaf, 0xd9, 0xd8, 0x4c, 0x12, 0xc5, 0xff, + 0xdd, 0xf3, 0xf3, 0xcc, 0xf1, 0x31, 0xab, 0x17, 0x3e, 0x2c, 0x56, 0x91, + 0x0e, 0xc5, 0x7c, 0x46, 0xbf, 0xd0, 0x9d, 0x6d, 0x3a, 0xd9, 0x62, 0xfa, + 0x1a, 0xc3, 0xac, 0x5e, 0xcd, 0x01, 0x62, 0xfd, 0x16, 0x0c, 0xf1, 0xeb, + 0x17, 0xf8, 0xf3, 0xde, 0xa7, 0xbf, 0x2c, 0x5f, 0xb8, 0xf8, 0x40, 0x58, + 0xbf, 0xfc, 0xe4, 0x10, 0x60, 0x68, 0x10, 0x98, 0x35, 0x8b, 0xd3, 0xa8, + 0x96, 0x2f, 0xe2, 0x90, 0xbb, 0x87, 0x16, 0x2b, 0xb4, 0xd9, 0x1c, 0x8e, + 0x21, 0xd3, 0x96, 0xf0, 0xdb, 0xc4, 0xfd, 0x13, 0x3a, 0x87, 0xaf, 0x1a, + 0x2d, 0xd6, 0x2e, 0xce, 0x2c, 0x54, 0xaa, 0x49, 0xc8, 0xe6, 0x8d, 0x78, + 0x0c, 0x82, 0xff, 0xff, 0xfc, 0xfb, 0xe7, 0xa4, 0xbd, 0xc3, 0x25, 0xc7, + 0x87, 0x33, 0x52, 0xf0, 0x6e, 0x2c, 0x5f, 0xbe, 0xff, 0x68, 0x96, 0x2f, + 0xff, 0x33, 0xf8, 0x5a, 0x6e, 0x07, 0x85, 0xba, 0xc5, 0xfa, 0x61, 0xf9, + 0xd9, 0x62, 0xff, 0xfe, 0x37, 0x9f, 0x92, 0xf0, 0xff, 0x3c, 0x21, 0x37, + 0x96, 0x2a, 0x08, 0x85, 0xc2, 0x9b, 0xff, 0xb0, 0x86, 0x39, 0xfe, 0x61, + 0x6e, 0xb1, 0x7f, 0xfd, 0xa0, 0x70, 0x1f, 0x68, 0x3f, 0x8a, 0x40, 0xb1, + 0x58, 0xa8, 0xc7, 0x78, 0x41, 0xfc, 0xa4, 0xa1, 0xa1, 0xc2, 0x21, 0x21, + 0xdf, 0xd9, 0xe6, 0x20, 0x09, 0x62, 0xfe, 0xf9, 0x8f, 0xb3, 0x12, 0xc5, + 0xfe, 0x92, 0x81, 0x66, 0x01, 0x62, 0xff, 0x1f, 0x8d, 0x9e, 0xc3, 0xac, + 0x5f, 0xe7, 0x20, 0x75, 0x75, 0x0b, 0x65, 0x8b, 0xf8, 0xfc, 0x19, 0x30, + 0x4b, 0x17, 0xff, 0x02, 0x3b, 0x0c, 0xd4, 0x80, 0x44, 0x35, 0x8b, 0xf0, + 0x39, 0x1a, 0xa3, 0x54, 0x6a, 0x58, 0xa9, 0x45, 0xa6, 0x17, 0xb2, 0x4d, + 0xf3, 0x8f, 0x09, 0x62, 0xfe, 0x2c, 0xf7, 0xb3, 0x65, 0x8a, 0xdc, 0xf3, + 0xfc, 0x43, 0x7b, 0x50, 0x3a, 0xc5, 0xf6, 0x9e, 0x4e, 0xb1, 0x73, 0x0d, + 0x62, 0xbb, 0x37, 0x20, 0x22, 0xac, 0x44, 0xe3, 0x91, 0xb2, 0xbd, 0xfe, + 0x6f, 0x3f, 0x9c, 0x1c, 0x58, 0xa8, 0x2b, 0x27, 0xc2, 0xd3, 0x4b, 0xdc, + 0xc7, 0xe6, 0x65, 0x0e, 0xfe, 0x46, 0x30, 0x22, 0xdb, 0x71, 0x62, 0xfb, + 0xdc, 0xc8, 0x2c, 0x57, 0x66, 0xd7, 0x42, 0x57, 0xfd, 0xff, 0xbe, 0x9f, + 0x66, 0x3a, 0xc5, 0x49, 0xee, 0x31, 0x15, 0xfb, 0x6c, 0x89, 0xf6, 0x58, + 0xbf, 0xed, 0x44, 0x58, 0x3f, 0xcf, 0x45, 0x8b, 0xfe, 0xd0, 0x30, 0x6d, + 0xe1, 0x4a, 0xc5, 0xff, 0x87, 0xf1, 0x31, 0xb8, 0x36, 0x82, 0xc5, 0xf7, + 0xc2, 0x6d, 0x96, 0x2a, 0x53, 0x05, 0xc2, 0xb6, 0x3c, 0x23, 0x9f, 0x20, + 0x54, 0x6e, 0xeb, 0x29, 0xfa, 0xd1, 0xa8, 0xda, 0x19, 0xb3, 0x3e, 0xc3, + 0xb4, 0x6e, 0xa3, 0x8c, 0x87, 0x27, 0x4a, 0x8d, 0x87, 0x06, 0xf1, 0xc5, + 0xf7, 0x0d, 0x77, 0x95, 0xc3, 0x13, 0x26, 0xa5, 0x27, 0x9e, 0x19, 0xdf, + 0x95, 0xf8, 0xd3, 0x82, 0x60, 0x87, 0xe1, 0x4a, 0x78, 0xe4, 0xa7, 0x6f, + 0x4b, 0x89, 0xe9, 0x18, 0x68, 0x71, 0x92, 0xdf, 0x46, 0x1c, 0x38, 0xf5, + 0x8a, 0x8c, 0x4f, 0x8c, 0xd8, 0xee, 0x2f, 0xe7, 0x03, 0x74, 0x9f, 0x2c, + 0x5f, 0x4e, 0xef, 0xba, 0xc5, 0x40, 0xf4, 0xc2, 0x2f, 0xbf, 0xc2, 0xed, + 0x8b, 0x01, 0xc5, 0x8b, 0xff, 0xf7, 0xf0, 0xb0, 0xdf, 0xb4, 0x3e, 0x13, + 0x06, 0x75, 0x8b, 0xed, 0xd9, 0xb7, 0x54, 0x98, 0x05, 0x41, 0x11, 0x3a, + 0x58, 0xbf, 0xfd, 0x83, 0x29, 0xdc, 0xcf, 0xce, 0xc4, 0x25, 0x8b, 0xd3, + 0x9d, 0xac, 0x5e, 0x62, 0xdd, 0x62, 0xf9, 0xbb, 0xe1, 0x83, 0x37, 0x41, + 0x0e, 0xdf, 0xfa, 0x7d, 0xcf, 0x38, 0xf0, 0xa0, 0xb1, 0x7f, 0x3f, 0x05, + 0x3a, 0x89, 0x62, 0xff, 0x13, 0x03, 0x8e, 0x5e, 0x58, 0xa3, 0x9f, 0x0f, + 0x8b, 0xef, 0xd1, 0x73, 0x53, 0xd1, 0x62, 0xfb, 0x70, 0xff, 0x12, 0xc5, + 0x2c, 0x5f, 0xfc, 0xf0, 0x7e, 0x93, 0xf9, 0x3b, 0xe2, 0xc5, 0x4a, 0x31, + 0x5c, 0x89, 0x8b, 0x38, 0x4e, 0x20, 0xcb, 0xf1, 0x60, 0x05, 0xc5, 0x8b, + 0x83, 0x02, 0xc5, 0x7c, 0xf0, 0x40, 0x51, 0x7f, 0x4f, 0x4e, 0x72, 0x40, + 0xb1, 0x7d, 0x98, 0x0e, 0x2c, 0x5f, 0xe6, 0x1b, 0x77, 0xe2, 0x65, 0x8a, + 0x19, 0xea, 0xc7, 0x11, 0x54, 0xae, 0x3e, 0x6c, 0x47, 0x90, 0xbd, 0xf9, + 0x18, 0x21, 0x0c, 0x47, 0x7c, 0x8d, 0x93, 0xd0, 0x88, 0x11, 0x10, 0x70, + 0x85, 0xbf, 0xc3, 0x98, 0xce, 0xfc, 0x29, 0x58, 0xa8, 0xc4, 0x6f, 0x8a, + 0x14, 0xf7, 0xed, 0x6e, 0xcd, 0xba, 0xa4, 0x75, 0x2f, 0xff, 0xf7, 0xe7, + 0x61, 0xe1, 0xe3, 0x39, 0xcc, 0xfb, 0xf0, 0x5b, 0x2c, 0x5f, 0xf4, 0xfb, + 0x80, 0xcc, 0xd7, 0x16, 0x2f, 0xd1, 0x87, 0x68, 0x46, 0x62, 0x35, 0xe2, + 0x37, 0x26, 0x7b, 0xff, 0xf8, 0x85, 0x3e, 0xe6, 0x14, 0x60, 0x01, 0x3f, + 0x6d, 0x96, 0x2f, 0x34, 0x4c, 0xb1, 0x74, 0xf1, 0x62, 0xe2, 0x8c, 0x88, + 0xda, 0x78, 0x76, 0xa5, 0x18, 0x59, 0x09, 0x2b, 0xc6, 0xc9, 0xd6, 0x2f, + 0x6d, 0x3b, 0xac, 0x5f, 0xf7, 0xc5, 0xd8, 0xdf, 0xa4, 0x8d, 0x62, 0xd9, + 0xb1, 0xee, 0x78, 0x7e, 0xf9, 0xb7, 0x0c, 0xeb, 0x17, 0xa1, 0xc8, 0xc3, + 0x51, 0x8e, 0x4f, 0x5d, 0x0a, 0x2f, 0xf7, 0x5b, 0x9f, 0x7d, 0x7d, 0x96, + 0x2f, 0xff, 0xd2, 0x43, 0x31, 0xa5, 0xfa, 0x49, 0x86, 0x7e, 0x39, 0x62, + 0xff, 0x9f, 0x5b, 0x08, 0x1b, 0x60, 0x4b, 0x17, 0xe9, 0x39, 0x49, 0xab, + 0x17, 0x4f, 0xd6, 0x2a, 0x06, 0xfc, 0x65, 0x17, 0xf3, 0xfd, 0xcf, 0x86, + 0xac, 0x5f, 0xf8, 0x5e, 0xcf, 0x38, 0xba, 0xf2, 0x95, 0x8b, 0xff, 0xe9, + 0x29, 0xd9, 0x87, 0xf9, 0xf9, 0x61, 0xab, 0x15, 0xd6, 0x27, 0x73, 0x05, + 0xc7, 0x7c, 0xf9, 0x09, 0x17, 0x79, 0x0e, 0xf4, 0x9c, 0x0b, 0x17, 0xb0, + 0xee, 0xb1, 0x7f, 0xfe, 0x9e, 0xa7, 0x3c, 0xe0, 0xf9, 0x9c, 0x92, 0x35, + 0x62, 0xfb, 0x76, 0x6d, 0xd5, 0x26, 0xc9, 0x7f, 0x9f, 0x5f, 0x6e, 0x8f, + 0xd7, 0xac, 0x50, 0xd1, 0x85, 0xa5, 0x7f, 0x98, 0xdf, 0xfd, 0xf7, 0xf7, + 0xc5, 0xde, 0x1d, 0xbb, 0x58, 0xbb, 0xa3, 0xac, 0x5e, 0x8f, 0x6d, 0x2c, + 0x5f, 0xde, 0x6f, 0x98, 0x39, 0x58, 0xbd, 0x87, 0x75, 0x8b, 0xff, 0xd2, + 0xf8, 0x37, 0xce, 0x67, 0x8a, 0x56, 0x28, 0x67, 0xc5, 0xc1, 0xcb, 0xe0, + 0x07, 0xe9, 0x58, 0xb4, 0x23, 0x0f, 0x19, 0xc8, 0xaa, 0x53, 0x01, 0x68, + 0x6b, 0xdf, 0xa1, 0x2f, 0xd2, 0x56, 0x2f, 0xfb, 0xf3, 0xaf, 0x48, 0xc2, + 0xe2, 0xc5, 0xd9, 0xa5, 0x8b, 0x3f, 0x8f, 0x4a, 0x38, 0xee, 0xff, 0xbe, + 0xe4, 0x29, 0xd4, 0x79, 0xd6, 0x2f, 0xd8, 0x40, 0x3e, 0x2c, 0x5f, 0x36, + 0x9b, 0x8b, 0x17, 0xf3, 0x91, 0x37, 0x99, 0x62, 0xff, 0xa7, 0x91, 0x9f, + 0x7d, 0xdb, 0x4b, 0x17, 0xff, 0xde, 0xfe, 0x41, 0xca, 0x1c, 0xfc, 0x97, + 0x96, 0x2f, 0xf9, 0xf0, 0x8d, 0x9e, 0x8d, 0xf5, 0x8a, 0x95, 0x43, 0x70, + 0x7b, 0x19, 0x56, 0xe7, 0x87, 0x27, 0xf9, 0x10, 0x0a, 0xc8, 0xf6, 0x39, + 0x3e, 0xff, 0x42, 0x75, 0xb4, 0xeb, 0x65, 0x8b, 0xfd, 0xef, 0xbc, 0x5f, + 0x9d, 0x96, 0x2a, 0x4f, 0xb3, 0x0d, 0xaf, 0xfe, 0xea, 0xc0, 0x1d, 0xf4, + 0x67, 0x4e, 0x1d, 0x62, 0xfb, 0xee, 0x14, 0x6c, 0xb1, 0x7f, 0xff, 0xd3, + 0xe7, 0xdd, 0xc7, 0xc9, 0xe8, 0xfe, 0x92, 0x29, 0xfa, 0xc5, 0xff, 0xfd, + 0xf7, 0xe3, 0x7a, 0x4e, 0x6c, 0xf1, 0xe3, 0xa7, 0xcb, 0x17, 0xff, 0xf3, + 0x6c, 0x66, 0x0c, 0xce, 0x4f, 0x9f, 0x21, 0x84, 0xb1, 0x7f, 0xff, 0xfd, + 0xc7, 0xf4, 0x9d, 0xbc, 0x29, 0x32, 0x0f, 0xe9, 0x39, 0x4e, 0xfa, 0x95, + 0x8b, 0xf7, 0xf3, 0x53, 0xe5, 0x8a, 0xed, 0x35, 0xfd, 0x2f, 0x1d, 0x73, + 0xcf, 0xb5, 0x2a, 0x9e, 0x46, 0x98, 0xe5, 0x2d, 0x1e, 0x2d, 0xfe, 0x92, + 0x81, 0x66, 0x01, 0x62, 0xfe, 0x83, 0x43, 0xf3, 0xb2, 0xc5, 0x1a, 0x7c, + 0x1e, 0x31, 0xbf, 0xff, 0xf4, 0xf7, 0xa9, 0x84, 0xed, 0x83, 0xe4, 0xf9, + 0xf2, 0x18, 0x4b, 0x17, 0x48, 0x16, 0x2d, 0x05, 0x8b, 0xef, 0x84, 0xdb, + 0x2c, 0x50, 0x0d, 0xbf, 0x84, 0xad, 0x19, 0x1b, 0x33, 0x18, 0x26, 0x3f, + 0x18, 0x2d, 0x8c, 0x77, 0x21, 0xbd, 0xb9, 0x83, 0xa3, 0xc7, 0x8c, 0x9e, + 0x32, 0x16, 0x94, 0x84, 0x50, 0xee, 0xe4, 0xa9, 0x9f, 0x42, 0x88, 0x44, + 0x61, 0x35, 0x86, 0x9d, 0x7f, 0xd2, 0xfe, 0xe4, 0xed, 0x9c, 0x58, 0xba, + 0x1e, 0x58, 0xbf, 0xfd, 0x9e, 0x10, 0x0e, 0xd0, 0x21, 0x30, 0x6b, 0x17, + 0xc0, 0x8e, 0xc8, 0xcf, 0xa2, 0x70, 0x07, 0x24, 0x31, 0x7f, 0xe2, 0x8c, + 0x38, 0x9f, 0xc4, 0xdd, 0x4b, 0x17, 0xe6, 0xe7, 0xda, 0x0b, 0x17, 0xf8, + 0x5e, 0x06, 0x85, 0x0e, 0x2c, 0x56, 0x8f, 0x78, 0x8a, 0x2f, 0xe6, 0xd4, + 0x73, 0x11, 0xab, 0x17, 0x85, 0xc8, 0xcc, 0x3d, 0x22, 0x21, 0xb0, 0x31, + 0x32, 0x90, 0x43, 0xd2, 0xb1, 0x3a, 0x36, 0x8d, 0xd6, 0xdb, 0xac, 0x5f, + 0x14, 0xfb, 0x8b, 0x15, 0xd9, 0xb5, 0x88, 0x4e, 0xfb, 0x76, 0x6d, 0xd5, + 0x27, 0x31, 0x63, 0xac, 0x56, 0x8f, 0x0c, 0x23, 0x1b, 0xf8, 0xb3, 0xb0, + 0x3c, 0x16, 0x2f, 0xf1, 0x48, 0x65, 0x9d, 0x31, 0x62, 0xdd, 0x7a, 0xc5, + 0x68, 0xfe, 0x7c, 0x5d, 0xd0, 0xd2, 0xf3, 0x1f, 0x8b, 0x17, 0x67, 0xd6, + 0x2f, 0xda, 0x17, 0x70, 0xe2, 0xc5, 0x49, 0xe1, 0x60, 0xbd, 0xd1, 0x1d, + 0x62, 0xc4, 0xb1, 0x4b, 0x18, 0x58, 0xd4, 0xa7, 0xed, 0x8c, 0xcf, 0x09, + 0xc6, 0x31, 0x25, 0xf0, 0x88, 0x23, 0x8a, 0xaf, 0xd1, 0x9d, 0x64, 0x6f, + 0x1b, 0xf5, 0x8b, 0x17, 0xfd, 0x19, 0x9a, 0x6e, 0x7d, 0xa0, 0xb1, 0x5b, + 0x1f, 0xe9, 0x20, 0xdd, 0x1f, 0xe5, 0x8b, 0xfa, 0x0d, 0xad, 0xbe, 0x25, + 0x8b, 0xf7, 0x24, 0x01, 0xec, 0xb1, 0x6c, 0x88, 0xf6, 0xf8, 0x61, 0x7c, + 0xd0, 0xfe, 0x2c, 0x5f, 0xfd, 0xb4, 0xfd, 0x9f, 0xdc, 0xc1, 0x75, 0xeb, + 0x14, 0x33, 0xec, 0xd1, 0x15, 0xf4, 0x27, 0x5b, 0x2c, 0x5e, 0x7f, 0xf1, + 0x62, 0xe1, 0x6e, 0xb1, 0x7e, 0x00, 0x1f, 0xfc, 0x58, 0xb9, 0xb4, 0xb1, + 0x58, 0x78, 0x1c, 0x29, 0xbe, 0x18, 0x59, 0xf5, 0x8b, 0xb0, 0x96, 0x2f, + 0xf9, 0xe0, 0xff, 0x11, 0xce, 0xeb, 0x15, 0x27, 0xe6, 0x32, 0x4f, 0x0b, + 0x5d, 0xdc, 0x64, 0x15, 0x44, 0x0d, 0xdb, 0x21, 0x29, 0x11, 0x10, 0x09, + 0x38, 0x3b, 0xe5, 0x90, 0xe1, 0x29, 0x51, 0x8b, 0x83, 0xd9, 0x0e, 0x66, + 0x95, 0x55, 0x7e, 0xd6, 0xec, 0xdb, 0xaa, 0x4e, 0xf2, 0xff, 0x42, 0x33, + 0x9a, 0xd3, 0x84, 0xb1, 0x77, 0xbc, 0xb1, 0x68, 0xcc, 0x44, 0x43, 0x1b, + 0xf8, 0xe6, 0xff, 0x8a, 0x5b, 0x6e, 0xf9, 0x23, 0x58, 0xb3, 0xac, 0x5d, + 0x3b, 0xac, 0x54, 0x0d, 0x49, 0xc4, 0x6e, 0x18, 0x16, 0x2f, 0x1d, 0xbc, + 0xb1, 0x74, 0xf5, 0x2c, 0x5e, 0x2c, 0xd9, 0x62, 0xfb, 0x36, 0x17, 0x45, + 0x8b, 0x46, 0x0d, 0x31, 0x6c, 0x63, 0x34, 0x84, 0xe3, 0x00, 0x1d, 0x21, + 0xa0, 0xc7, 0x6f, 0xfd, 0xec, 0x8f, 0x8c, 0xe0, 0x3d, 0xee, 0xd6, 0x2a, + 0x63, 0xe2, 0x40, 0xd9, 0x16, 0x08, 0x19, 0x9c, 0x7d, 0x06, 0xef, 0x3d, + 0xc3, 0x2d, 0xed, 0x76, 0x0e, 0xa7, 0x77, 0x0f, 0x18, 0x17, 0xe3, 0x14, + 0x68, 0x76, 0x82, 0x99, 0x4e, 0x52, 0xd5, 0x39, 0x3c, 0xe3, 0xe8, 0x64, + 0x07, 0x1a, 0x6f, 0x53, 0x75, 0xd1, 0xff, 0x58, 0xb7, 0x96, 0x2f, 0xe6, + 0xef, 0x7f, 0xb6, 0x96, 0x2f, 0xf9, 0x8b, 0x6e, 0x39, 0x77, 0x05, 0x8a, + 0x23, 0xea, 0x08, 0xc2, 0xff, 0xdb, 0x60, 0x5f, 0xce, 0x63, 0x92, 0xc5, + 0xb8, 0xb1, 0x58, 0x7a, 0x20, 0x3f, 0xbf, 0xf3, 0x91, 0x61, 0xbb, 0x89, + 0x86, 0xb1, 0x7d, 0xf7, 0xd4, 0x16, 0x2f, 0xd9, 0xf1, 0xb1, 0x2c, 0x5c, + 0xf1, 0x92, 0x9d, 0xa1, 0xc6, 0xfe, 0xf8, 0x4e, 0x7c, 0x21, 0xf1, 0xf8, + 0x64, 0x77, 0xee, 0x70, 0xed, 0x05, 0x8b, 0xee, 0xbe, 0x10, 0xeb, 0xd6, + 0x2f, 0xff, 0xa4, 0xb6, 0xe0, 0x99, 0xe1, 0xcf, 0xb4, 0x16, 0x2b, 0x47, + 0xfd, 0xf2, 0xeb, 0xa3, 0xe3, 0xd6, 0x2f, 0xff, 0xdf, 0x92, 0xdb, 0x82, + 0x67, 0x87, 0x3e, 0xd0, 0x58, 0xbf, 0xff, 0xff, 0x9e, 0x4b, 0xc4, 0xc6, + 0xe7, 0x85, 0xe7, 0xf7, 0x3e, 0xfa, 0x9d, 0x9b, 0x5b, 0xac, 0x5d, 0xf7, + 0x1a, 0x37, 0xfe, 0xad, 0x7f, 0xff, 0x33, 0xfa, 0x7a, 0x16, 0x73, 0xed, + 0x01, 0xeb, 0xaf, 0x58, 0xbf, 0xff, 0xf6, 0x13, 0x68, 0x11, 0xd8, 0x19, + 0x7b, 0xe2, 0x68, 0x48, 0x38, 0xb1, 0x77, 0x25, 0x62, 0xff, 0xee, 0xf7, + 0x13, 0x77, 0xec, 0xc2, 0x35, 0x62, 0xfe, 0xea, 0xea, 0x78, 0xb9, 0x2b, + 0x17, 0x89, 0xa3, 0x25, 0x5a, 0xc0, 0xe1, 0x4e, 0x69, 0x16, 0xf0, 0xfd, + 0xf9, 0x71, 0x30, 0xf1, 0xbf, 0xc2, 0xe1, 0xa4, 0x5f, 0xd1, 0xbc, 0x69, + 0x3d, 0xeb, 0x65, 0x8b, 0xc7, 0x14, 0x7a, 0xc5, 0xfe, 0x36, 0x4e, 0x36, + 0x60, 0x96, 0x2f, 0xb3, 0x61, 0x7d, 0x62, 0xe6, 0x3a, 0xc5, 0x68, 0xdd, + 0x88, 0x92, 0xf8, 0x5d, 0x43, 0x95, 0x8b, 0xff, 0xf7, 0x03, 0x91, 0xe4, + 0xf9, 0xfa, 0x48, 0xba, 0xf9, 0x58, 0xbf, 0x67, 0x57, 0xa4, 0xd5, 0x8b, + 0x75, 0x2c, 0x56, 0xc7, 0x83, 0x85, 0x97, 0xdc, 0x7d, 0xf4, 0xb1, 0x5b, + 0x27, 0x76, 0xe4, 0x3a, 0x70, 0xf9, 0x08, 0x09, 0x8a, 0x13, 0xa1, 0x11, + 0x5f, 0xfb, 0x8c, 0x6f, 0xde, 0x48, 0x52, 0xb1, 0x7c, 0xda, 0xc3, 0xac, + 0x5f, 0xf3, 0x79, 0xbf, 0xdc, 0x33, 0xcb, 0x17, 0xe0, 0x37, 0x05, 0x2b, + 0x14, 0x34, 0x42, 0x7c, 0x8b, 0xc7, 0x55, 0x88, 0xf2, 0x78, 0x61, 0x5d, + 0x06, 0x58, 0xb9, 0x80, 0xb1, 0x7f, 0xd1, 0x0d, 0x98, 0x2c, 0xef, 0xcb, + 0x17, 0xff, 0xff, 0x89, 0x82, 0x2c, 0xf7, 0xb3, 0x69, 0x26, 0x37, 0x87, + 0x9c, 0x21, 0xac, 0x5f, 0xef, 0xce, 0xd1, 0x41, 0x89, 0x62, 0xfe, 0xdd, + 0xc7, 0xfc, 0xd9, 0x62, 0xe9, 0xd4, 0x47, 0xca, 0xc6, 0xb7, 0xfe, 0x62, + 0x81, 0x83, 0x13, 0x6a, 0x0b, 0x17, 0xb0, 0x3e, 0x2c, 0x54, 0xa7, 0xa1, + 0x82, 0xee, 0x2f, 0xa3, 0xcf, 0xc3, 0x6c, 0x22, 0xde, 0xa4, 0x0b, 0xcf, + 0x17, 0x16, 0x2f, 0xe2, 0x90, 0x1d, 0xa0, 0xb1, 0x7f, 0x14, 0x80, 0xed, + 0x05, 0x8b, 0xfd, 0x1b, 0xc6, 0x85, 0x83, 0xf8, 0x96, 0x2f, 0xd9, 0xd2, + 0x4b, 0xd8, 0x7d, 0x7c, 0x2d, 0xbf, 0x10, 0xb9, 0xf7, 0x31, 0x1e, 0x98, + 0x3d, 0xa8, 0x4c, 0x5f, 0x86, 0xfd, 0x35, 0x8b, 0x16, 0xfc, 0x9f, 0xde, + 0x28, 0xdf, 0x64, 0x73, 0x81, 0x62, 0xfc, 0xc7, 0x3b, 0x41, 0x62, 0xe6, + 0x86, 0x8f, 0x37, 0xe4, 0xb7, 0xfe, 0x7d, 0x6b, 0x3f, 0xf9, 0xee, 0x0b, + 0x17, 0xfa, 0x4a, 0x77, 0xe0, 0x0e, 0xb1, 0x7d, 0x31, 0x7d, 0xd6, 0x2f, + 0x33, 0x6e, 0xa9, 0x15, 0xcb, 0xfc, 0x6b, 0x10, 0x3d, 0x9f, 0x58, 0xad, + 0x91, 0x03, 0xb9, 0x1b, 0x95, 0x5e, 0xfe, 0x6e, 0xb1, 0x7d, 0x80, 0x17, + 0x16, 0x2e, 0x6e, 0xf0, 0xf0, 0x48, 0x7a, 0xf9, 0xa0, 0xe0, 0x58, 0xbf, + 0xff, 0xf8, 0x2f, 0x1a, 0xdc, 0xfe, 0xef, 0xcc, 0x1f, 0xa0, 0x21, 0xb1, + 0x01, 0x62, 0xff, 0xa2, 0x26, 0x0f, 0x01, 0x30, 0x58, 0xbf, 0x31, 0xad, + 0xe8, 0x2c, 0x5f, 0xff, 0x71, 0xdb, 0xbf, 0xb3, 0xf8, 0x5a, 0x6e, 0x2c, + 0x51, 0x1f, 0xcf, 0x8a, 0x68, 0xd4, 0x6a, 0x77, 0x0b, 0x3b, 0xff, 0xbf, + 0x90, 0xdf, 0xee, 0x39, 0x2f, 0x2c, 0x54, 0xa7, 0x72, 0xf1, 0xa5, 0x78, + 0xaa, 0xff, 0xfb, 0x3d, 0x3e, 0xe6, 0x6a, 0x70, 0x83, 0x3a, 0xc5, 0xff, + 0xfb, 0x99, 0xa9, 0xc2, 0xfb, 0xb4, 0x3c, 0xfb, 0x2c, 0x51, 0xd1, 0x47, + 0xe4, 0xfb, 0xff, 0xfe, 0xf3, 0xfb, 0x9f, 0x7f, 0xb7, 0x22, 0x84, 0xc7, + 0xe7, 0x7e, 0x58, 0xa9, 0x44, 0x78, 0x88, 0xef, 0xff, 0xe7, 0xf4, 0xe1, + 0x43, 0xdd, 0xee, 0xfa, 0x0e, 0x2e, 0x2c, 0x54, 0x17, 0x7d, 0x86, 0xe6, + 0x69, 0x6e, 0xe8, 0x1a, 0x85, 0xa9, 0xdc, 0xbe, 0x58, 0x51, 0xed, 0xfa, + 0x36, 0x7e, 0x84, 0x56, 0x75, 0x8b, 0xfd, 0xe7, 0x21, 0x43, 0x38, 0xb1, + 0x7d, 0x8e, 0x5b, 0x78, 0xf1, 0x03, 0x11, 0xbf, 0xfc, 0xcc, 0x59, 0xe9, + 0xd7, 0x0b, 0x47, 0x58, 0xbf, 0xf4, 0x03, 0x86, 0x17, 0xb6, 0xc1, 0xac, + 0x5d, 0x07, 0x58, 0xbf, 0x7d, 0xf5, 0xf6, 0x58, 0xbd, 0xbb, 0xe8, 0xc3, + 0x7f, 0x82, 0xf7, 0xff, 0x0b, 0x9f, 0x68, 0x79, 0xd8, 0x80, 0xb1, 0x5d, + 0x9f, 0xbe, 0x8c, 0xee, 0xfb, 0x9a, 0x9b, 0x16, 0x92, 0x3d, 0x0f, 0x7b, + 0xda, 0x7f, 0x2c, 0x5f, 0x9a, 0x0d, 0xdc, 0x16, 0x2a, 0x23, 0xc6, 0xd0, + 0xed, 0xff, 0xef, 0x48, 0x5c, 0xe6, 0x6b, 0x09, 0xc2, 0x58, 0xbf, 0xff, + 0xc0, 0xc8, 0x3f, 0x41, 0xcf, 0x39, 0x9f, 0x7e, 0x0b, 0x65, 0x8b, 0xc1, + 0x06, 0x75, 0x8b, 0x16, 0x22, 0x11, 0x99, 0x2a, 0x53, 0x18, 0x81, 0x1f, + 0xa1, 0x9f, 0x7f, 0x42, 0x5c, 0x0e, 0x75, 0x8b, 0xff, 0xfe, 0xce, 0xe1, + 0x87, 0x72, 0x86, 0xa7, 0xec, 0xfe, 0x9f, 0xac, 0x5f, 0x6d, 0xec, 0xfa, + 0xc5, 0xff, 0xb4, 0x58, 0x37, 0x86, 0x77, 0xe5, 0x8a, 0x93, 0xe3, 0x72, + 0x4b, 0xfa, 0x4e, 0x3d, 0x36, 0xeb, 0x15, 0x04, 0xc5, 0xff, 0x0c, 0x82, + 0x20, 0xbf, 0xfb, 0xdf, 0xc8, 0x77, 0xed, 0x4e, 0x04, 0xb1, 0x7f, 0xff, + 0xe7, 0x07, 0x1b, 0xbc, 0xfb, 0x8b, 0xaf, 0xcd, 0x67, 0xf3, 0xa4, 0xac, + 0x51, 0x22, 0xe7, 0xc8, 0xf7, 0xff, 0xff, 0x98, 0x83, 0x90, 0x64, 0x3f, + 0x3d, 0x07, 0x31, 0x98, 0x42, 0x86, 0x71, 0x62, 0xa5, 0x13, 0xba, 0x22, + 0xba, 0x1b, 0x2c, 0x5f, 0xc5, 0xbf, 0xdd, 0xb7, 0x58, 0xbc, 0xd0, 0xc5, + 0x8b, 0xcd, 0x1c, 0x6a, 0xc5, 0x61, 0xf6, 0x6e, 0x5e, 0x01, 0xcb, 0xff, + 0xff, 0xff, 0xe6, 0x39, 0xda, 0x10, 0x90, 0xe4, 0x6f, 0xa6, 0xec, 0x7f, + 0x9d, 0x71, 0xd9, 0x8a, 0x77, 0xfc, 0xc4, 0xb1, 0x7f, 0xff, 0xf9, 0x80, + 0x4d, 0x01, 0xff, 0x36, 0xe7, 0xe4, 0xe5, 0x9d, 0xf1, 0xcd, 0x58, 0xa1, + 0xa6, 0x48, 0x50, 0xab, 0xbf, 0x8b, 0xc2, 0xff, 0x5b, 0x2b, 0x16, 0xf4, + 0x9e, 0xdb, 0x94, 0x5f, 0xff, 0xc7, 0xce, 0xfd, 0xf6, 0xdd, 0x87, 0xee, + 0x13, 0x9a, 0xb1, 0x7f, 0xf0, 0xb7, 0x2c, 0x37, 0xde, 0x68, 0x71, 0x62, + 0xff, 0x49, 0xe6, 0x30, 0x20, 0x82, 0x58, 0xa7, 0x4c, 0x15, 0x89, 0xb8, + 0xbd, 0xd4, 0x8f, 0x58, 0xab, 0xc9, 0xa5, 0x59, 0xdf, 0xfb, 0x53, 0xfd, + 0xdf, 0x99, 0xdf, 0x96, 0x2f, 0xff, 0xff, 0xdd, 0x59, 0xa7, 0xd9, 0x8f, + 0xbf, 0xdf, 0xef, 0x25, 0xef, 0xb6, 0xf2, 0x43, 0x58, 0xbf, 0xdd, 0x3f, + 0x8f, 0xf3, 0xb2, 0xc5, 0xf6, 0xb4, 0xfb, 0x2c, 0x53, 0x9e, 0xc8, 0x0d, + 0x6a, 0x09, 0xa0, 0xb2, 0x09, 0x43, 0x7e, 0xff, 0x66, 0xb8, 0xdb, 0x8b, + 0xb5, 0x8b, 0xff, 0xda, 0xf7, 0x9b, 0x60, 0xce, 0x3f, 0xb9, 0xab, 0x17, + 0xfe, 0xda, 0x76, 0x2c, 0xf7, 0xb3, 0x65, 0x8b, 0xbb, 0xe6, 0x22, 0x40, + 0x34, 0xfa, 0xc4, 0x7b, 0x34, 0x31, 0xaf, 0xf7, 0x78, 0xfc, 0xe0, 0xa5, + 0x62, 0xff, 0xd9, 0xa8, 0x79, 0xc7, 0x85, 0x05, 0x8b, 0x09, 0x62, 0xff, + 0xed, 0x67, 0x49, 0x2f, 0x77, 0x0c, 0xf2, 0xc5, 0xcf, 0xd1, 0x62, 0xf3, + 0xe6, 0x96, 0x2b, 0xe6, 0xd7, 0xc3, 0x37, 0xff, 0xe9, 0x00, 0x72, 0x32, + 0x17, 0xa7, 0x99, 0xdf, 0x96, 0x2f, 0xfb, 0x82, 0x6e, 0xfe, 0x13, 0x79, + 0x62, 0xff, 0xbf, 0x3b, 0x77, 0xe1, 0x37, 0x16, 0x2f, 0xfb, 0xf8, 0x7f, + 0x14, 0x82, 0x56, 0x2f, 0xdc, 0x7d, 0xf0, 0xb1, 0x16, 0x11, 0x1e, 0x78, + 0xf2, 0xf3, 0x43, 0xac, 0x58, 0xad, 0x95, 0x12, 0x68, 0x4b, 0xef, 0x80, + 0x21, 0xf4, 0x60, 0xfd, 0x13, 0x2f, 0xfb, 0x1f, 0xa1, 0x4e, 0x6a, 0x0b, + 0x17, 0xff, 0xef, 0x43, 0x23, 0xd8, 0x81, 0xdf, 0xb5, 0x38, 0x12, 0xc0, + 0x46, 0xe6, 0xfb, 0xdf, 0x90, 0x2c, 0x58, 0x0b, 0x15, 0xd9, 0xb5, 0xd1, + 0x1d, 0x4a, 0xbb, 0xfc, 0x94, 0xc4, 0xd0, 0x9b, 0x14, 0x28, 0x2f, 0xff, + 0xe1, 0xbe, 0xff, 0x71, 0x8f, 0x02, 0x0e, 0x2f, 0x88, 0xd5, 0x8b, 0xff, + 0xda, 0x7e, 0x90, 0x7f, 0x7e, 0x4e, 0xc4, 0xb1, 0x58, 0x8a, 0xdd, 0x31, + 0x5f, 0xdf, 0x6f, 0x73, 0xf2, 0xb1, 0x7f, 0xfa, 0x22, 0x9f, 0x73, 0xdd, + 0xee, 0xe5, 0xb2, 0xc5, 0xff, 0xff, 0xf9, 0x8d, 0xcd, 0x37, 0x61, 0x41, + 0xff, 0x3b, 0x93, 0x77, 0xc7, 0x21, 0x37, 0xd6, 0x2f, 0xf9, 0x82, 0x1f, + 0xe7, 0x6c, 0x09, 0x62, 0x9d, 0x30, 0xf6, 0x4e, 0x28, 0x42, 0xdf, 0xff, + 0x38, 0x30, 0xef, 0xee, 0x49, 0xdb, 0xbf, 0x2c, 0x5f, 0xff, 0x0f, 0x52, + 0x2e, 0x3f, 0x46, 0x71, 0x8a, 0x56, 0x2f, 0xfb, 0x39, 0xe7, 0xc8, 0x9c, + 0x0b, 0x16, 0xe9, 0x88, 0x8a, 0x25, 0x1a, 0xc4, 0xc0, 0xde, 0x1b, 0x57, + 0xff, 0xfb, 0x76, 0xd3, 0x7f, 0xb8, 0x67, 0xb3, 0xd2, 0x2e, 0xbf, 0x16, + 0x2f, 0xfe, 0x6e, 0xe0, 0xfe, 0xfc, 0xeb, 0xd2, 0xb1, 0x7f, 0xfe, 0xfe, + 0x6d, 0xcf, 0xc9, 0xcb, 0x3b, 0xe3, 0x9a, 0xb1, 0x7f, 0xf7, 0xe4, 0x98, + 0xfd, 0xf8, 0x4d, 0xc5, 0x8b, 0xfc, 0x26, 0xef, 0xe1, 0x37, 0x86, 0x89, + 0xdd, 0xd6, 0x2f, 0xfd, 0x06, 0xe7, 0x27, 0xf3, 0xbe, 0x2c, 0x5f, 0xde, + 0xc8, 0xa0, 0xfe, 0x58, 0xb4, 0xb9, 0xf7, 0x1c, 0xfe, 0xff, 0xfc, 0xfa, + 0xfe, 0x60, 0x5e, 0xcd, 0xb0, 0xd7, 0xd2, 0xc5, 0x41, 0x55, 0x4b, 0x93, + 0x9d, 0x9f, 0x90, 0xe2, 0xf4, 0x2f, 0x3a, 0x13, 0x5f, 0xfe, 0xd1, 0xa1, + 0xf9, 0xf8, 0x59, 0xd1, 0xc6, 0xb1, 0x7f, 0xff, 0x38, 0xc7, 0x81, 0x77, + 0xe1, 0x37, 0x3e, 0x13, 0x0d, 0x62, 0xa5, 0x15, 0xbf, 0x4e, 0xbe, 0x13, + 0x6a, 0x0b, 0x17, 0xf1, 0x4e, 0xc0, 0x6f, 0x2c, 0x5f, 0xe6, 0x18, 0x7d, + 0x52, 0x50, 0x58, 0xb4, 0xee, 0x7c, 0xa7, 0x2e, 0xbf, 0xfe, 0x3b, 0x10, + 0x3e, 0x13, 0x16, 0xdb, 0xbe, 0xcb, 0x17, 0xff, 0xfc, 0xe5, 0x0e, 0x6c, + 0x2e, 0x67, 0xa4, 0x98, 0x04, 0xd0, 0x58, 0xbf, 0xff, 0xb4, 0xdc, 0xc2, + 0x9c, 0x07, 0x32, 0x29, 0xef, 0x8b, 0x17, 0x3f, 0x99, 0x31, 0x30, 0x29, + 0x89, 0x96, 0x86, 0x9f, 0xf3, 0xc2, 0x21, 0xa3, 0x3b, 0xbf, 0xe1, 0x00, + 0xed, 0x0e, 0x68, 0x6b, 0x17, 0xff, 0xfb, 0x1c, 0xbd, 0x84, 0x61, 0x30, + 0xe4, 0xb6, 0x9d, 0x2c, 0x57, 0x91, 0x33, 0xd0, 0xee, 0xda, 0x58, 0xbf, + 0xff, 0x77, 0xe2, 0x9f, 0xb7, 0x33, 0x72, 0x6c, 0xdd, 0x62, 0xb1, 0x11, + 0xbb, 0x92, 0x88, 0x4a, 0xff, 0xc2, 0xe6, 0x13, 0x7c, 0x01, 0xf6, 0xb1, + 0x7f, 0xff, 0x9b, 0x59, 0xd3, 0x07, 0x9c, 0x13, 0x77, 0xf0, 0x9b, 0xcb, + 0x17, 0xf1, 0x4e, 0xb4, 0xf1, 0x2c, 0x5f, 0xff, 0x4b, 0x16, 0xff, 0x6f, + 0xe0, 0xff, 0x23, 0x58, 0xbf, 0xfb, 0x4f, 0xd2, 0x28, 0x39, 0x14, 0x9d, + 0x62, 0xff, 0xed, 0xb8, 0xe5, 0xb7, 0x7e, 0x26, 0xfa, 0xc5, 0xfd, 0xee, + 0x0e, 0x7b, 0x82, 0xc5, 0x49, 0xfb, 0xb2, 0x3d, 0xff, 0xff, 0x88, 0x4d, + 0x0c, 0x84, 0x90, 0xf5, 0x8e, 0x6e, 0x85, 0x30, 0x58, 0xad, 0x26, 0x91, + 0xf8, 0x5e, 0xf0, 0x82, 0xfe, 0xf3, 0x97, 0xf0, 0x0b, 0x17, 0xfc, 0x52, + 0x0c, 0xd6, 0xcd, 0xf5, 0x8b, 0xf0, 0xc3, 0x62, 0x82, 0xc5, 0xfe, 0x6f, + 0x72, 0x2f, 0xce, 0xcb, 0x14, 0xc7, 0xbe, 0x11, 0x4d, 0xff, 0xb5, 0xa7, + 0xef, 0xf9, 0xd3, 0x38, 0xb1, 0x7f, 0xfd, 0xc9, 0xc1, 0xeb, 0x1c, 0xdd, + 0x0a, 0x60, 0xb1, 0x7c, 0x52, 0x09, 0x95, 0x6e, 0x83, 0x2e, 0xc8, 0xe5, + 0xfb, 0x36, 0x88, 0xb7, 0xf0, 0x98, 0xe1, 0x17, 0x90, 0xae, 0xc3, 0x81, + 0x71, 0xaf, 0xd2, 0xf6, 0x2b, 0x4b, 0x9c, 0x9f, 0x9c, 0xac, 0xbf, 0xd3, + 0xf7, 0xf7, 0x1b, 0xb5, 0x8b, 0xff, 0x67, 0x7e, 0xf4, 0x9f, 0xf9, 0xb2, + 0xc5, 0xff, 0x45, 0xbf, 0xdc, 0xf3, 0xa3, 0x56, 0x2f, 0xf0, 0x33, 0x59, + 0x9e, 0xe2, 0xc5, 0xf6, 0xde, 0xcd, 0xd6, 0x2b, 0x11, 0x2b, 0xd9, 0xee, + 0x8c, 0xea, 0x5b, 0x04, 0xb8, 0x11, 0x0e, 0x33, 0xdc, 0x97, 0xbf, 0xbc, + 0x62, 0x3f, 0x94, 0x40, 0x51, 0xb0, 0x7a, 0x74, 0x50, 0x45, 0xc1, 0x1a, + 0x07, 0x0d, 0x6b, 0xd8, 0x06, 0x58, 0xbd, 0xac, 0xed, 0x62, 0xf7, 0xda, + 0x1f, 0x37, 0x40, 0x1c, 0xbf, 0xf9, 0x9f, 0xd2, 0x5b, 0xb9, 0xce, 0xeb, + 0x17, 0xdf, 0x92, 0xf2, 0xc5, 0xce, 0x3f, 0x9f, 0x2f, 0x10, 0xed, 0x9f, + 0x46, 0x21, 0x42, 0x5e, 0xff, 0xb3, 0xbe, 0x0e, 0x58, 0xb6, 0x58, 0xbf, + 0xcd, 0xc9, 0x2f, 0x7d, 0xd6, 0x2f, 0xc7, 0x8b, 0x8e, 0x4b, 0x17, 0xff, + 0x6e, 0xfa, 0xfe, 0x45, 0xf7, 0xd6, 0xcb, 0x17, 0xdb, 0x36, 0x71, 0x62, + 0xff, 0xe6, 0x06, 0x17, 0x7e, 0xd4, 0xe0, 0x4b, 0x17, 0xfa, 0x4d, 0xcd, + 0x07, 0xee, 0x2c, 0x5f, 0xe2, 0x29, 0xdb, 0xf2, 0x35, 0x8b, 0xfd, 0x0e, + 0x7e, 0x74, 0x18, 0xd6, 0x2b, 0x0f, 0xa5, 0x8c, 0xea, 0x0a, 0x8c, 0x30, + 0xb0, 0xd3, 0xad, 0xcc, 0xbb, 0x29, 0x64, 0x82, 0x23, 0xe2, 0x2f, 0xa1, + 0x3f, 0x7d, 0xdc, 0x33, 0xcb, 0x17, 0xd1, 0x38, 0xba, 0xf5, 0x8a, 0x19, + 0xe6, 0x80, 0x92, 0xff, 0xff, 0x7f, 0x37, 0x2c, 0x3e, 0x16, 0x78, 0x40, + 0x3b, 0x41, 0x62, 0xfe, 0xfb, 0x1c, 0xa7, 0xb5, 0x8b, 0xff, 0x16, 0x7f, + 0x22, 0x83, 0xea, 0x0b, 0x17, 0xff, 0xff, 0xc0, 0x92, 0xdd, 0xbc, 0xdd, + 0x83, 0x3a, 0x3f, 0xa1, 0xf7, 0xf7, 0x1c, 0x6b, 0x17, 0xfd, 0xdf, 0xbe, + 0xc7, 0xce, 0xfc, 0xb1, 0x7f, 0xff, 0xf8, 0x85, 0xff, 0x7e, 0x74, 0x0c, + 0xd4, 0x09, 0xe1, 0xfc, 0xc2, 0xdd, 0x62, 0xfd, 0xd7, 0xff, 0x00, 0xcb, + 0x16, 0xce, 0x22, 0x90, 0x4e, 0xf7, 0xfd, 0x39, 0xe2, 0xc0, 0x47, 0x62, + 0xc5, 0xff, 0x9f, 0xa3, 0xfa, 0x28, 0x49, 0x79, 0x62, 0xa5, 0x57, 0x94, + 0x08, 0xb1, 0x83, 0x72, 0xee, 0xcf, 0xf5, 0x08, 0x02, 0x87, 0x07, 0x0a, + 0x3c, 0x75, 0x7f, 0xf9, 0xb2, 0x1f, 0xc7, 0x2c, 0x04, 0x76, 0x2c, 0x5e, + 0x68, 0x46, 0x46, 0x8e, 0xe1, 0x62, 0x63, 0xf6, 0x84, 0x6b, 0x83, 0x8f, + 0xdb, 0x27, 0xf4, 0x0d, 0x87, 0x36, 0xf1, 0xcd, 0xf7, 0x1d, 0x03, 0x9a, + 0xc5, 0x1a, 0x26, 0xa3, 0x8b, 0x39, 0x17, 0xe5, 0xbb, 0xb4, 0x6d, 0x60, + 0x8c, 0xab, 0xaf, 0x26, 0x29, 0x7e, 0x7c, 0xac, 0x51, 0x7d, 0x2f, 0xe0, + 0x39, 0x78, 0x9d, 0x50, 0x89, 0xbb, 0xaf, 0xc5, 0x8b, 0xc0, 0x0f, 0xb5, + 0x8b, 0x01, 0x62, 0xfe, 0x9d, 0x61, 0x7c, 0x4b, 0x16, 0xc6, 0x37, 0xfe, + 0x12, 0xbf, 0xf9, 0xf4, 0x4c, 0x69, 0x67, 0xa4, 0x25, 0x8b, 0xe9, 0x17, + 0x5f, 0x8b, 0x14, 0x69, 0xf5, 0xf9, 0x12, 0xff, 0xa1, 0x9e, 0xfb, 0xce, + 0x80, 0xb1, 0x7d, 0xbb, 0x43, 0x16, 0x2c, 0x05, 0x8a, 0xc3, 0x6a, 0xe4, + 0x77, 0xe7, 0x2f, 0x67, 0xd6, 0x2f, 0x71, 0xc2, 0x58, 0xb6, 0x0c, 0xf1, + 0x40, 0x4f, 0x7f, 0xff, 0x0f, 0xf2, 0x5b, 0x70, 0x4c, 0xf0, 0xe7, 0xda, + 0x0b, 0x17, 0xff, 0xff, 0xf1, 0x67, 0x08, 0x5f, 0xf7, 0xe7, 0x40, 0xcd, + 0x40, 0x9e, 0x1f, 0xcc, 0x2d, 0xd6, 0x2f, 0x67, 0xe3, 0x23, 0x52, 0xb0, + 0xa9, 0x1c, 0x1a, 0xfe, 0x42, 0x43, 0xb2, 0x3f, 0xb7, 0x13, 0x27, 0x09, + 0xc3, 0x5c, 0xbf, 0xff, 0xfe, 0x1e, 0x46, 0x72, 0x0f, 0xf9, 0xee, 0x18, + 0x7c, 0xe8, 0xfe, 0x04, 0x8e, 0x56, 0x2f, 0x3c, 0xb2, 0xc5, 0xef, 0x48, + 0xd2, 0x2f, 0xff, 0x7d, 0x9f, 0xd3, 0x07, 0xd6, 0xc2, 0x02, 0x45, 0xed, + 0x75, 0xf1, 0x92, 0x7d, 0x1c, 0x1d, 0xbc, 0xdb, 0xc6, 0x41, 0x17, 0xc3, + 0x84, 0x1d, 0xa3, 0x06, 0xf8, 0x72, 0x9b, 0xcb, 0xca, 0x3d, 0xb8, 0xf6, + 0xf4, 0xe5, 0xc8, 0xa1, 0x3d, 0xd2, 0x34, 0x0b, 0xff, 0xd1, 0x87, 0x68, + 0x46, 0x66, 0xb7, 0x66, 0xdd, 0x52, 0x30, 0x97, 0xd2, 0xe1, 0xfd, 0x62, + 0xff, 0xfb, 0x35, 0xa6, 0x87, 0xf4, 0xd0, 0xfb, 0xe9, 0x62, 0xdb, 0x2c, + 0x56, 0xe7, 0xc6, 0xea, 0x17, 0xff, 0xff, 0xfd, 0x3e, 0x14, 0x60, 0x7b, + 0xb6, 0x99, 0xf6, 0x8c, 0xdf, 0xef, 0x14, 0x33, 0x63, 0x39, 0x33, 0xb2, + 0xc5, 0xfe, 0xfc, 0x93, 0x1e, 0x7a, 0x96, 0x2f, 0x38, 0x7f, 0x58, 0xbf, + 0xf8, 0xb3, 0xdc, 0x93, 0xf7, 0x0c, 0xf2, 0xc5, 0xfd, 0xfc, 0x18, 0xbd, + 0xc5, 0x8b, 0xfd, 0x9d, 0x18, 0x7f, 0x98, 0xce, 0x1f, 0xa7, 0x91, 0x6f, + 0xff, 0x69, 0x81, 0x18, 0x6f, 0xa0, 0x14, 0xf2, 0x0b, 0x17, 0x64, 0x60, + 0xd5, 0x58, 0x64, 0x21, 0xbb, 0x22, 0x68, 0x51, 0x00, 0xd4, 0xa1, 0x24, + 0x1a, 0x75, 0xdd, 0x67, 0x5c, 0x58, 0xb7, 0x45, 0x8a, 0xeb, 0x4d, 0xb9, + 0xc8, 0xef, 0xcf, 0xff, 0xe6, 0xcb, 0x17, 0x75, 0x87, 0x58, 0xbf, 0xba, + 0x3f, 0x79, 0x9b, 0x2c, 0x58, 0x6b, 0x15, 0x87, 0x87, 0xf3, 0x1b, 0xfb, + 0x21, 0x3f, 0xdd, 0xd6, 0x2f, 0x7b, 0xdd, 0xac, 0x5f, 0xef, 0x7f, 0x08, + 0x9b, 0xcb, 0x15, 0x1a, 0x26, 0x01, 0x1b, 0x30, 0x75, 0xd4, 0x84, 0x05, + 0xdd, 0x43, 0xf7, 0xe8, 0x07, 0x09, 0xd2, 0xc5, 0xff, 0xdd, 0x6e, 0x77, + 0x01, 0x37, 0x8a, 0x60, 0xb1, 0x7d, 0xd7, 0x79, 0x03, 0xac, 0x5e, 0x8d, + 0x71, 0xb3, 0xac, 0x5f, 0xa3, 0x48, 0xd3, 0xac, 0x8e, 0x8d, 0xd6, 0x2e, + 0xf4, 0x6a, 0x58, 0xbf, 0xfc, 0xfe, 0xf3, 0x4f, 0xb3, 0xf2, 0xe0, 0x58, + 0xbe, 0xe3, 0x99, 0x8b, 0x17, 0xff, 0x63, 0x83, 0x19, 0xf5, 0xbc, 0xf9, + 0x62, 0xee, 0xe3, 0xd6, 0x2f, 0xdf, 0x73, 0xce, 0xeb, 0x17, 0x61, 0xcc, + 0x3c, 0x5d, 0xc7, 0x2f, 0x02, 0x7a, 0x2c, 0x5f, 0x7a, 0x74, 0x05, 0x8b, + 0xa4, 0xf8, 0x78, 0x4c, 0x3f, 0x7f, 0xfb, 0xdc, 0x14, 0x99, 0xbf, 0xde, + 0x39, 0xb6, 0x58, 0xa1, 0xa3, 0xb7, 0xee, 0x24, 0x57, 0x7f, 0xd0, 0x33, + 0xc4, 0x61, 0x9f, 0x8e, 0x58, 0xbe, 0x90, 0x06, 0x75, 0x8b, 0xe9, 0xe4, + 0x81, 0x62, 0xed, 0x66, 0xe7, 0x8c, 0x44, 0x97, 0xef, 0x36, 0xcd, 0xc5, + 0x8b, 0xe9, 0x3b, 0xe9, 0x62, 0xec, 0x25, 0x8a, 0x88, 0xf8, 0x74, 0x53, + 0xc2, 0x2b, 0x85, 0xc5, 0x8a, 0x93, 0xc8, 0x39, 0x85, 0xf3, 0x7c, 0x3e, + 0x2c, 0x5e, 0x0f, 0x36, 0x58, 0xaf, 0x1e, 0x18, 0x89, 0x2f, 0xff, 0x31, + 0x0b, 0x3c, 0x4d, 0xf2, 0xcd, 0x2c, 0x5f, 0x49, 0x3c, 0x4b, 0x17, 0xff, + 0xdb, 0x19, 0x98, 0x5e, 0xfb, 0x3f, 0x1f, 0xa2, 0xc5, 0xf8, 0x85, 0x0c, + 0xe2, 0xc5, 0x61, 0xfd, 0x3a, 0x95, 0xff, 0xc6, 0x16, 0x7b, 0xc4, 0x61, + 0x9f, 0x8e, 0x58, 0xb8, 0x50, 0x58, 0xa8, 0x8f, 0x8f, 0xa2, 0x5d, 0xfb, + 0xf2, 0x37, 0x35, 0x62, 0xa0, 0xbb, 0x4c, 0x6a, 0x46, 0xe4, 0x6f, 0x1b, + 0xac, 0x79, 0x7e, 0xa1, 0x0e, 0x78, 0x6b, 0x7d, 0x90, 0x04, 0x44, 0x8f, + 0xe8, 0x4e, 0x74, 0x84, 0x1f, 0x51, 0x2d, 0xf1, 0xd9, 0x89, 0x62, 0xff, + 0xd3, 0xad, 0x67, 0xdb, 0xdf, 0x95, 0x8b, 0xff, 0xff, 0x8e, 0x61, 0x67, + 0xbb, 0x80, 0x5f, 0xcd, 0x66, 0x70, 0xc3, 0x3f, 0x1c, 0xb1, 0x7f, 0x82, + 0xfb, 0xfb, 0x8d, 0xa5, 0x8b, 0xc5, 0xc9, 0x58, 0xa8, 0xd1, 0x32, 0xbd, + 0x88, 0x60, 0x7d, 0x8f, 0x6c, 0x6b, 0x4b, 0x17, 0xc3, 0xde, 0x4e, 0xb1, + 0x78, 0x3e, 0x12, 0xc5, 0xf0, 0x5e, 0xcf, 0xac, 0x5f, 0xc0, 0x33, 0xd3, + 0xdc, 0x16, 0x2a, 0x4f, 0x55, 0x89, 0x2a, 0x37, 0x46, 0x1b, 0x86, 0x7c, + 0x90, 0x9c, 0xec, 0xcb, 0x17, 0xf6, 0xb0, 0xba, 0xd0, 0xb7, 0x58, 0xa8, + 0x8f, 0x19, 0x84, 0x6e, 0x8d, 0xfc, 0xb1, 0x7d, 0x13, 0x85, 0x12, 0xc5, + 0xfe, 0x93, 0xbf, 0xe7, 0x09, 0x62, 0xe6, 0xe2, 0xc5, 0x1c, 0xfb, 0xbc, + 0x4d, 0xd0, 0xc6, 0xfe, 0xf4, 0xf4, 0x26, 0xed, 0x62, 0xfc, 0x5b, 0xb9, + 0x62, 0xc5, 0xff, 0x13, 0x05, 0xcd, 0x63, 0x12, 0xc5, 0xff, 0x8b, 0x07, + 0x9f, 0xf4, 0xf7, 0x05, 0x8b, 0xf6, 0xde, 0xc7, 0x1a, 0xc5, 0x68, 0xfa, + 0x08, 0xfe, 0xff, 0xdc, 0x1e, 0x89, 0x82, 0xce, 0xfc, 0xb1, 0x7f, 0x82, + 0x2c, 0xef, 0xd9, 0xf5, 0x8a, 0x94, 0x4b, 0xe1, 0x0b, 0xa0, 0xdf, 0xe3, + 0x7f, 0x23, 0x79, 0xea, 0x58, 0xbf, 0xbd, 0x9d, 0xee, 0xe4, 0xb1, 0x4c, + 0x7c, 0xde, 0x37, 0xbf, 0x7f, 0x07, 0x3b, 0x2c, 0x5f, 0xb6, 0xf1, 0xad, + 0xa5, 0x8b, 0x4f, 0x67, 0xa8, 0xc5, 0x37, 0xe6, 0xd4, 0x18, 0xeb, 0x15, + 0x2a, 0xf0, 0xc6, 0x45, 0x90, 0x8b, 0xec, 0xc5, 0xcc, 0x34, 0x4f, 0xf8, + 0xcd, 0xda, 0x12, 0x64, 0xea, 0x22, 0x7b, 0x1d, 0x62, 0xff, 0x7b, 0xec, + 0xfc, 0x7e, 0x8b, 0x16, 0x8d, 0xd6, 0x28, 0x8f, 0x32, 0x38, 0xd6, 0xd0, + 0x58, 0xbf, 0xdc, 0x9c, 0x21, 0xfe, 0x56, 0x2f, 0xe9, 0xc2, 0x1f, 0xe5, + 0x62, 0xed, 0x44, 0x61, 0xef, 0x70, 0xca, 0x89, 0x14, 0x02, 0x70, 0xbf, + 0xf4, 0x36, 0x62, 0xc1, 0x94, 0xee, 0xb1, 0x77, 0xe3, 0xd6, 0x2f, 0xfc, + 0x6b, 0x44, 0x3d, 0x61, 0x60, 0x4b, 0x17, 0xfb, 0x59, 0xb7, 0xa7, 0xb8, + 0x2c, 0x5f, 0xff, 0xb9, 0x39, 0xb7, 0x39, 0x9a, 0x06, 0x66, 0xb8, 0xb1, + 0x50, 0x47, 0x41, 0xa3, 0x7b, 0xa0, 0xf8, 0xda, 0xff, 0xe9, 0x87, 0xe4, + 0x06, 0x1e, 0x73, 0xcb, 0x17, 0xb6, 0x7d, 0x2c, 0x5f, 0x6e, 0x53, 0xf5, + 0x8b, 0xfc, 0x11, 0x98, 0x3f, 0xcf, 0x45, 0x8b, 0xff, 0x0b, 0x0d, 0xcf, + 0x0a, 0x7b, 0x1a, 0xc5, 0x49, 0xfc, 0xb9, 0xc5, 0xfe, 0x21, 0x7b, 0x3c, + 0x1e, 0xcb, 0x15, 0xb2, 0x62, 0x18, 0x3d, 0xa8, 0x4e, 0x78, 0x82, 0xec, + 0x09, 0x62, 0xe2, 0xf2, 0xc5, 0xff, 0xc2, 0x87, 0xe7, 0x00, 0xc4, 0x2c, + 0x58, 0xa9, 0x3d, 0xa0, 0x0b, 0xdf, 0xf0, 0xf2, 0x1f, 0x9e, 0x83, 0x95, + 0x8b, 0xba, 0x6c, 0xb1, 0x7b, 0xf9, 0xba, 0xc5, 0x18, 0x7e, 0x8e, 0x77, + 0xc1, 0xbb, 0xb5, 0xf7, 0x46, 0x23, 0x42, 0x56, 0xff, 0xc3, 0x6f, 0xcb, + 0x3e, 0xb3, 0xb5, 0x8a, 0x73, 0xf0, 0x0c, 0xca, 0xff, 0x82, 0x0f, 0xf3, + 0xbf, 0xde, 0x25, 0x8b, 0xff, 0xb9, 0xc7, 0x29, 0x3c, 0xfa, 0x74, 0xb1, + 0x7c, 0x23, 0xe0, 0xd6, 0x2b, 0xb4, 0x52, 0x39, 0xf7, 0x52, 0x1d, 0xfe, + 0x3f, 0x1f, 0x3a, 0x36, 0x96, 0x2f, 0xff, 0xfb, 0xf9, 0x0c, 0x87, 0xf0, + 0xb0, 0xdf, 0xb4, 0x32, 0x07, 0x58, 0xbf, 0xa1, 0xc6, 0xce, 0xfc, 0xb1, + 0x58, 0x8f, 0xd6, 0x33, 0xf1, 0xa8, 0x99, 0xaf, 0xb8, 0x1c, 0xec, 0xb1, + 0x7e, 0xd4, 0xc3, 0x98, 0xb1, 0x7c, 0xfe, 0xce, 0x8b, 0x14, 0xb1, 0x7f, + 0x05, 0xe2, 0x60, 0x71, 0x62, 0xfd, 0x11, 0x66, 0x69, 0x62, 0xb0, 0xf5, + 0xd8, 0xbe, 0xa5, 0x19, 0xff, 0x28, 0x22, 0x4f, 0x31, 0xdf, 0xff, 0xe6, + 0xd4, 0xfa, 0x60, 0x60, 0x7e, 0x2c, 0x03, 0x10, 0x16, 0x2f, 0xd3, 0xd1, + 0x9f, 0x65, 0x8a, 0xdd, 0x11, 0x7a, 0x61, 0xbd, 0xf6, 0x82, 0xc5, 0xec, + 0x2f, 0x2c, 0x5f, 0xa5, 0xf4, 0xfe, 0x58, 0xa8, 0x32, 0x89, 0x31, 0x7b, + 0x78, 0x62, 0x76, 0x44, 0xf1, 0x93, 0xc4, 0x7f, 0xa8, 0xd5, 0x4e, 0x87, + 0xf8, 0xe9, 0x8a, 0x3c, 0x3e, 0x1d, 0xfa, 0x1e, 0x82, 0x86, 0x37, 0x42, + 0x40, 0x87, 0x7a, 0x87, 0x2f, 0xf3, 0x41, 0xfb, 0xe4, 0xf6, 0xb1, 0x7f, + 0xee, 0x7e, 0x4f, 0xee, 0x13, 0x76, 0xb1, 0x7c, 0x42, 0xd4, 0xac, 0x57, + 0x67, 0xc4, 0xc8, 0x17, 0x1c, 0x0b, 0x15, 0xf4, 0x68, 0xb4, 0x25, 0xf8, + 0x45, 0x7f, 0xe2, 0xfc, 0xc7, 0xfb, 0x8e, 0x51, 0x2c, 0x5f, 0xff, 0x49, + 0x7b, 0x52, 0xf0, 0x2c, 0x3b, 0x41, 0x62, 0xff, 0x88, 0x5c, 0x2c, 0x36, + 0x78, 0xb1, 0x7e, 0x39, 0xf0, 0x51, 0x2c, 0x5f, 0xfe, 0x9d, 0xf8, 0x2f, + 0x3f, 0xdc, 0xdf, 0xba, 0xc5, 0xfc, 0x79, 0xc2, 0xf4, 0x72, 0xc5, 0xf6, + 0x9f, 0xb8, 0x2c, 0x5b, 0x8b, 0x17, 0xe9, 0xc2, 0xf4, 0x72, 0xc5, 0xee, + 0x37, 0x66, 0x22, 0x41, 0xcc, 0x22, 0x24, 0x38, 0x95, 0x0d, 0x3d, 0xc3, + 0x53, 0x74, 0x72, 0x72, 0xaf, 0x43, 0x72, 0xff, 0xa3, 0xf0, 0x7f, 0x98, + 0xf2, 0x95, 0x8a, 0x95, 0x55, 0xaf, 0x28, 0x79, 0x94, 0x6f, 0xfb, 0x5b, + 0x6f, 0xf7, 0xf8, 0xbc, 0xb1, 0x5f, 0x3f, 0x36, 0x36, 0xbe, 0xf0, 0x5c, + 0xdd, 0x62, 0xff, 0x39, 0xba, 0xcd, 0xa7, 0x65, 0x8b, 0xf4, 0x9f, 0xa0, + 0x20, 0xb1, 0x58, 0x88, 0x7e, 0x13, 0x78, 0xda, 0xef, 0x3a, 0xc5, 0xc2, + 0xc5, 0x8b, 0xc0, 0x2e, 0xbd, 0x62, 0xed, 0x71, 0x62, 0xa0, 0x89, 0x73, + 0x4b, 0xc0, 0x2f, 0xe1, 0x78, 0xe2, 0x2b, 0xf8, 0x44, 0x61, 0x60, 0xd6, + 0x2f, 0xff, 0x85, 0xa9, 0xdc, 0x2c, 0x7f, 0xee, 0xfb, 0x75, 0x2c, 0x5e, + 0x97, 0xdd, 0x62, 0xa0, 0x7e, 0x91, 0x2b, 0xde, 0xcf, 0x3a, 0xc5, 0xf4, + 0xeb, 0x36, 0x58, 0xbd, 0xa9, 0xe8, 0xb1, 0x74, 0xf9, 0x62, 0xa4, 0xdb, + 0x68, 0x7e, 0xfd, 0xbb, 0xf3, 0xee, 0xb1, 0x7f, 0x63, 0x97, 0x85, 0xf5, + 0x8a, 0xec, 0xf5, 0xbe, 0x53, 0x7e, 0xdc, 0x9f, 0xb8, 0x2c, 0x5c, 0x1f, + 0xd6, 0x28, 0x6a, 0x85, 0xa2, 0x85, 0x16, 0x88, 0xfe, 0x39, 0xc5, 0x9f, + 0x3b, 0x08, 0x8e, 0x38, 0xaa, 0xf1, 0xcc, 0xc5, 0x8b, 0xf4, 0x3c, 0x6e, + 0x69, 0x62, 0xf7, 0x5f, 0x1c, 0xeb, 0x16, 0x7d, 0x1e, 0x78, 0x8a, 0xaf, + 0xed, 0x63, 0xfe, 0x46, 0xb1, 0x7d, 0xbf, 0xb3, 0x75, 0x8b, 0x85, 0xc5, + 0x8a, 0xc3, 0x7b, 0xa2, 0x5b, 0xe9, 0x28, 0xb7, 0x58, 0xbf, 0xfd, 0x25, + 0x9e, 0xfe, 0x7b, 0xf2, 0x2e, 0xbd, 0x62, 0xfd, 0x31, 0x33, 0x69, 0x62, + 0xb4, 0x89, 0xaf, 0x92, 0x71, 0x3a, 0xf8, 0xc6, 0x20, 0x2c, 0x5d, 0x3c, + 0x58, 0xb3, 0xe8, 0xdd, 0x11, 0x1d, 0xd9, 0xda, 0xc5, 0xe9, 0x3e, 0x2c, + 0x57, 0xcd, 0xa7, 0x41, 0x8b, 0xff, 0xfc, 0x17, 0x57, 0xb3, 0xe6, 0x16, + 0x6c, 0xf8, 0x5d, 0xc3, 0x8b, 0x17, 0xee, 0x67, 0x83, 0xd9, 0x62, 0x96, + 0x2f, 0xa1, 0x3a, 0xd9, 0x62, 0xdf, 0xdc, 0xd8, 0x44, 0x19, 0x70, 0x5e, + 0x94, 0x42, 0x62, 0xdd, 0x62, 0x63, 0x2d, 0x0e, 0xba, 0x95, 0x7b, 0xd0, + 0x6d, 0x19, 0x3e, 0x35, 0x3c, 0x2e, 0xbe, 0xd4, 0xcb, 0x25, 0x19, 0xe5, + 0xfe, 0xf7, 0xf0, 0x78, 0x50, 0x58, 0xbf, 0xff, 0xff, 0x99, 0xfd, 0x3f, + 0x2c, 0xf7, 0xdf, 0xd0, 0xcf, 0xfd, 0xa1, 0xc1, 0x47, 0x67, 0xd6, 0x2f, + 0xfb, 0x77, 0x1f, 0xb3, 0xe5, 0x2b, 0x17, 0xfe, 0x60, 0x7f, 0x1c, 0x62, + 0xf7, 0x16, 0x29, 0xcf, 0xe0, 0x8e, 0x69, 0xd3, 0x55, 0xf9, 0x9f, 0xa3, + 0x02, 0xbe, 0xc3, 0xe7, 0xd6, 0x2f, 0x41, 0xf1, 0x62, 0xff, 0x8b, 0xd9, + 0xbf, 0xe4, 0x99, 0x62, 0xe1, 0xca, 0xc5, 0x49, 0xe7, 0xe1, 0xc5, 0x76, + 0x88, 0xbe, 0x8d, 0x77, 0xe6, 0x8b, 0x81, 0xf4, 0x58, 0xbe, 0x10, 0xff, + 0x2b, 0x15, 0x03, 0xd0, 0x22, 0xdb, 0xe8, 0x64, 0xf6, 0xb1, 0x7f, 0xd3, + 0xb0, 0x70, 0xf8, 0x9b, 0x65, 0x8b, 0xd9, 0xd2, 0x56, 0x2f, 0xfb, 0xdf, + 0x68, 0x19, 0xcf, 0x8d, 0x62, 0x80, 0x7b, 0x44, 0x3d, 0x7a, 0x7b, 0x82, + 0xc5, 0x4a, 0xa7, 0x38, 0x1b, 0x64, 0x2b, 0x5d, 0xda, 0x22, 0x1d, 0x11, + 0xb4, 0x25, 0xc8, 0x86, 0xff, 0x45, 0xc6, 0x28, 0x9c, 0xeb, 0x17, 0xfd, + 0x03, 0x3e, 0xdb, 0xc9, 0x0d, 0x62, 0xb0, 0xfc, 0x3b, 0x35, 0xb9, 0xbe, + 0xb1, 0x79, 0xe4, 0x96, 0x2f, 0xa0, 0xdc, 0x75, 0x8b, 0xf8, 0x9c, 0x07, + 0x9e, 0x8b, 0x17, 0xb4, 0x03, 0xac, 0x53, 0x9e, 0x68, 0x8b, 0xee, 0x3e, + 0x96, 0x2f, 0xf8, 0xbd, 0xfc, 0xee, 0x02, 0x89, 0x62, 0xff, 0x3f, 0x83, + 0xd4, 0xfe, 0x56, 0x2f, 0xc4, 0xdb, 0x96, 0x2c, 0x5f, 0xd0, 0xcf, 0xfd, + 0xa0, 0xb1, 0x52, 0x8c, 0x58, 0x1e, 0x39, 0xa7, 0x89, 0xeb, 0x13, 0xfc, + 0xec, 0x8b, 0xe2, 0xec, 0x37, 0xc6, 0xff, 0x10, 0x8a, 0x1b, 0xb7, 0x4f, + 0x52, 0xc5, 0xfd, 0x30, 0x21, 0x3c, 0x16, 0x29, 0xcf, 0x1f, 0x83, 0x57, + 0xf6, 0x7b, 0x9c, 0xf3, 0xac, 0x5f, 0x16, 0x39, 0xab, 0x17, 0xcf, 0x3d, + 0xf1, 0x62, 0xfc, 0x1f, 0x8a, 0x40, 0xb1, 0x43, 0x45, 0xe9, 0xa4, 0x27, + 0x2e, 0xf1, 0x17, 0x42, 0x3b, 0xfe, 0x7d, 0x6e, 0x37, 0xe9, 0x23, 0x58, + 0xbf, 0xcf, 0xaf, 0xbe, 0xcc, 0x4b, 0x14, 0x33, 0xef, 0xf9, 0xe5, 0xff, + 0xfe, 0xfb, 0x8f, 0x1b, 0x72, 0xce, 0x98, 0x39, 0xee, 0x1c, 0x58, 0xbf, + 0xf6, 0xa4, 0x3e, 0xf9, 0xd6, 0xb6, 0x7d, 0x62, 0xf4, 0x1f, 0x8b, 0x17, + 0x83, 0x63, 0xac, 0x5f, 0xfc, 0x3d, 0x3f, 0x70, 0x2c, 0x36, 0x78, 0xb1, + 0x7b, 0xd8, 0x12, 0xc5, 0x0d, 0x36, 0xad, 0xc8, 0x9d, 0x8e, 0x24, 0x6d, + 0x0e, 0x90, 0xf7, 0x91, 0xaf, 0xfe, 0x7e, 0x60, 0xff, 0x27, 0xdb, 0x02, + 0x58, 0xbf, 0xb3, 0xab, 0xdd, 0xc2, 0x56, 0x2f, 0xd9, 0xf6, 0xf7, 0x16, + 0x2f, 0xfc, 0x09, 0x86, 0x77, 0xed, 0x84, 0x12, 0xc5, 0x1c, 0xfa, 0xfc, + 0x51, 0x7f, 0x8b, 0x0e, 0x7c, 0x14, 0x4b, 0x17, 0xdd, 0x7f, 0xdf, 0x8b, + 0x15, 0x27, 0xfd, 0xa2, 0x21, 0x1a, 0x5f, 0x41, 0xf5, 0xb2, 0xc5, 0xcd, + 0x12, 0xc5, 0xd2, 0x7e, 0xcd, 0xe6, 0x89, 0x2f, 0x9f, 0x4d, 0xa5, 0x8b, + 0xdc, 0x04, 0x7a, 0xc5, 0xf3, 0x8f, 0x0e, 0xb1, 0x7f, 0x7a, 0x19, 0xac, + 0xe1, 0x87, 0x87, 0x24, 0x37, 0x85, 0x9e, 0x58, 0xbf, 0xcf, 0xf7, 0x13, + 0x3f, 0xd6, 0x2f, 0xdf, 0x73, 0x8e, 0x56, 0x2a, 0x09, 0x90, 0x3b, 0x2e, + 0x91, 0x3e, 0x3b, 0xe3, 0x2b, 0xdc, 0x60, 0x2c, 0x54, 0xaf, 0x05, 0x64, + 0xa2, 0x6d, 0xd9, 0x7b, 0x46, 0x78, 0xc6, 0xfe, 0xd4, 0xd1, 0xa6, 0xf9, + 0x2a, 0x96, 0x2f, 0xa4, 0xef, 0x05, 0x8b, 0xbf, 0x30, 0x35, 0xda, 0x0c, + 0xbd, 0x24, 0x6a, 0xc5, 0xf8, 0x72, 0x5c, 0x35, 0x62, 0xe6, 0x82, 0xc5, + 0xff, 0x4f, 0xfa, 0x9b, 0x61, 0x3e, 0x96, 0x2e, 0xe6, 0x2c, 0x53, 0x9e, + 0xa3, 0x1e, 0xdf, 0xff, 0xf8, 0xf2, 0xde, 0xf4, 0x9b, 0x9e, 0xfc, 0x93, + 0x7b, 0x8e, 0x4b, 0x17, 0xe9, 0xdc, 0x98, 0xeb, 0x17, 0xfe, 0x98, 0x19, + 0x9f, 0x7d, 0x7d, 0x96, 0x2b, 0xe7, 0xcf, 0xc2, 0x8a, 0x94, 0x79, 0xbc, + 0x34, 0x6f, 0x7e, 0x7e, 0xb1, 0x43, 0x54, 0x67, 0xd9, 0x63, 0x8e, 0xc7, + 0x94, 0xc4, 0xd7, 0xf8, 0xc4, 0xfc, 0x4d, 0x70, 0xb6, 0x58, 0xbe, 0xcd, + 0x4e, 0xeb, 0x17, 0x45, 0xc1, 0x9b, 0xcf, 0x8c, 0xdf, 0xb5, 0xe2, 0x9e, + 0xd6, 0x2f, 0xef, 0x6a, 0x77, 0xcd, 0x2c, 0x5f, 0xff, 0xfe, 0x9f, 0xfd, + 0xb8, 0x67, 0xd9, 0xf9, 0xfc, 0x01, 0x9a, 0xcf, 0x37, 0x6b, 0x17, 0xf7, + 0xdc, 0x6f, 0xad, 0xd6, 0x2f, 0x9f, 0x93, 0x05, 0x8b, 0xfd, 0x9f, 0x01, + 0xf3, 0x51, 0x2c, 0x5d, 0xdf, 0x37, 0x44, 0x33, 0x17, 0x91, 0x15, 0xf6, + 0xbc, 0x4c, 0xb1, 0x7e, 0x06, 0xb4, 0xfa, 0x58, 0xac, 0x3c, 0xb6, 0x22, + 0xbd, 0xe3, 0x31, 0x62, 0xa5, 0x52, 0x5e, 0x17, 0x39, 0x4e, 0x8b, 0xda, + 0x30, 0x00, 0x42, 0x1c, 0x32, 0x0b, 0x01, 0x62, 0xf9, 0xfa, 0x4f, 0xd6, + 0x2d, 0x8e, 0x6d, 0xbc, 0x25, 0x7f, 0x83, 0x1b, 0x36, 0xed, 0xba, 0xc5, + 0xff, 0xee, 0x6b, 0x3a, 0x49, 0x79, 0x88, 0x58, 0xb1, 0x58, 0x88, 0x0f, + 0x1b, 0x5c, 0x19, 0xd6, 0x2f, 0xbe, 0x2e, 0xfc, 0xb1, 0x7f, 0xda, 0xd3, + 0x77, 0xac, 0x62, 0x58, 0xbf, 0xe9, 0xd1, 0x61, 0xce, 0x28, 0x96, 0x2d, + 0xf9, 0x3f, 0x3c, 0x39, 0xbf, 0xbc, 0x18, 0x01, 0x3d, 0xac, 0x5f, 0xf3, + 0xf9, 0xf0, 0xe5, 0x9b, 0x2c, 0x53, 0x9f, 0x4f, 0xcc, 0x6f, 0xee, 0x39, + 0xa7, 0x6f, 0x2c, 0x5f, 0xfb, 0xa4, 0x9b, 0x07, 0x29, 0xd4, 0xac, 0x5f, + 0xff, 0xfb, 0x59, 0xd2, 0x4b, 0xc6, 0x06, 0x53, 0xf6, 0x7f, 0x4f, 0xb8, + 0xb1, 0x7f, 0xce, 0xc0, 0x33, 0x5a, 0x17, 0xd6, 0x2f, 0xf9, 0x81, 0xc7, + 0xff, 0xf0, 0x6b, 0x15, 0xf3, 0xf4, 0xf1, 0xdd, 0xff, 0xfe, 0x9e, 0xfe, + 0xf9, 0xee, 0x19, 0xac, 0x9e, 0xe0, 0xe7, 0x58, 0xbb, 0x78, 0xd9, 0x62, + 0xf8, 0x9b, 0xe6, 0xac, 0x5e, 0xd8, 0x50, 0x58, 0xbc, 0x59, 0xc3, 0x0f, + 0x80, 0x63, 0xd8, 0x47, 0x7c, 0xc0, 0x80, 0xd6, 0x2f, 0xf4, 0x9f, 0x72, + 0x6c, 0xdd, 0x62, 0xff, 0xed, 0x0b, 0x9a, 0xc9, 0xee, 0x0e, 0x75, 0x8a, + 0x1a, 0xbc, 0x2d, 0xe1, 0x1f, 0xd9, 0x0b, 0x97, 0xe9, 0x03, 0xd0, 0xe2, + 0x11, 0x17, 0x48, 0x61, 0x84, 0x7e, 0x19, 0x1f, 0x51, 0xa5, 0xf1, 0x9d, + 0x3a, 0xb6, 0x58, 0xbf, 0xdc, 0xfe, 0x75, 0x3e, 0x04, 0xb1, 0x7e, 0x00, + 0xdd, 0xba, 0x2c, 0x5f, 0x98, 0xfb, 0xcf, 0x45, 0x8a, 0x95, 0xdf, 0xd8, + 0x11, 0x0c, 0x67, 0x27, 0x16, 0x8d, 0x85, 0x88, 0x0a, 0xfc, 0x6e, 0x22, + 0xab, 0x47, 0xac, 0x5e, 0xda, 0x63, 0xd6, 0x2f, 0xdc, 0x8d, 0x34, 0x2d, + 0x96, 0x2d, 0x1e, 0xb1, 0x7b, 0x07, 0xe5, 0x8a, 0x73, 0x65, 0xa1, 0x5b, + 0xf3, 0x44, 0xfe, 0xe2, 0xc5, 0xff, 0xfe, 0x7e, 0x37, 0xba, 0x9f, 0x66, + 0xea, 0xcd, 0x67, 0x9a, 0x25, 0x8a, 0xd9, 0x33, 0x3c, 0x21, 0x3b, 0x17, + 0xc8, 0x3c, 0x53, 0x7d, 0xd1, 0xa2, 0x89, 0x62, 0xfe, 0xef, 0xcc, 0xc7, + 0xe2, 0xc5, 0x49, 0xeb, 0x39, 0x3d, 0xe2, 0xce, 0xd6, 0x2e, 0xf6, 0x2c, + 0x5f, 0xf9, 0xfa, 0x60, 0xff, 0x9b, 0xe1, 0x2c, 0x5f, 0xf4, 0x3d, 0x21, + 0x14, 0xfb, 0x8b, 0x17, 0xfa, 0x4a, 0x40, 0xcd, 0xd4, 0xb1, 0x7b, 0x4d, + 0x05, 0x8b, 0xfc, 0x3f, 0xe6, 0xff, 0x9d, 0x2c, 0x50, 0xd1, 0x0d, 0xa3, + 0x42, 0x1d, 0xbf, 0xd3, 0xbf, 0xd9, 0xc9, 0x96, 0x2f, 0xdc, 0xcf, 0x6a, + 0x56, 0x2d, 0xe5, 0x8b, 0xff, 0x8a, 0x4e, 0xcf, 0xf6, 0xf7, 0xe5, 0x62, + 0xbb, 0x3d, 0x4e, 0xbc, 0x4a, 0xa5, 0x50, 0xe4, 0x05, 0xfb, 0x40, 0x78, + 0x60, 0x1c, 0xbf, 0x86, 0x42, 0x7c, 0xb9, 0xb7, 0x58, 0xbf, 0x9e, 0x26, + 0xdf, 0x90, 0x58, 0xbf, 0xff, 0xe1, 0x8f, 0x23, 0xa7, 0x58, 0x43, 0xfc, + 0x86, 0x00, 0x4f, 0x6b, 0x15, 0xba, 0x2c, 0xfe, 0x30, 0xc6, 0x17, 0xff, + 0x4b, 0x96, 0x7b, 0x93, 0xf6, 0x3a, 0xc5, 0xff, 0x16, 0x73, 0x8f, 0xfc, + 0xf2, 0xc5, 0x68, 0xfe, 0xba, 0x21, 0x5f, 0xff, 0xce, 0x43, 0xd6, 0x6f, + 0xf9, 0xfe, 0x6b, 0x52, 0x6a, 0xc5, 0xff, 0xe9, 0x07, 0x0c, 0xf4, 0x32, + 0x3d, 0x88, 0x0b, 0x15, 0xf4, 0x55, 0x12, 0xe5, 0xc1, 0x9d, 0x62, 0xfc, + 0x2e, 0xa7, 0xc3, 0xac, 0x5f, 0xb3, 0xde, 0x98, 0x96, 0x2f, 0xe9, 0xef, + 0x86, 0x79, 0xd6, 0x2f, 0xde, 0x63, 0xbf, 0x96, 0x28, 0xd4, 0x56, 0x68, + 0xac, 0xe5, 0x24, 0x61, 0x4b, 0x17, 0xd3, 0x90, 0x65, 0x8a, 0x39, 0xad, + 0xf8, 0x65, 0xc7, 0xf2, 0xc5, 0xfd, 0x0f, 0xe3, 0xc3, 0x8b, 0x17, 0xf3, + 0xf8, 0x5a, 0x6e, 0x18, 0x78, 0xd8, 0x31, 0x52, 0x98, 0xa8, 0xda, 0x99, + 0x9e, 0xff, 0xef, 0xe3, 0x44, 0x58, 0x3f, 0xcf, 0x16, 0x2f, 0xec, 0x39, + 0x66, 0xcc, 0xb1, 0x43, 0x3f, 0x17, 0x44, 0xbf, 0xdc, 0x7e, 0x83, 0x90, + 0x6c, 0xb1, 0x7f, 0xd9, 0xa3, 0x73, 0x5a, 0x73, 0xac, 0x56, 0x22, 0x49, + 0x88, 0x44, 0x6f, 0x7f, 0x98, 0x80, 0x60, 0x59, 0xf5, 0x8b, 0xff, 0xb7, + 0x62, 0x06, 0x77, 0xec, 0xce, 0x2c, 0x5b, 0x20, 0x7f, 0x44, 0x6b, 0x7e, + 0x9f, 0x8a, 0x78, 0xb1, 0x7b, 0x80, 0x12, 0xc5, 0x76, 0x78, 0xde, 0x28, + 0xbc, 0xe7, 0xf2, 0xc5, 0xe2, 0x0f, 0xcb, 0x17, 0xe1, 0x0d, 0x88, 0x06, + 0x1b, 0xb6, 0x1d, 0xbf, 0xdb, 0xbe, 0x83, 0xf3, 0xc1, 0x62, 0xfe, 0x06, + 0xa4, 0x5d, 0x7e, 0x2c, 0x5f, 0xda, 0x90, 0x9b, 0xfc, 0x58, 0xbf, 0x81, + 0xc7, 0x89, 0xc2, 0x58, 0xa9, 0x44, 0x96, 0x19, 0xb1, 0x7d, 0xbb, 0x58, + 0xa9, 0x4e, 0x8e, 0x0b, 0xdd, 0x9e, 0x94, 0x32, 0x38, 0x5b, 0x7e, 0xed, + 0x87, 0xfc, 0x58, 0xbe, 0x1e, 0x1e, 0x39, 0x62, 0xfe, 0xfb, 0xf8, 0xa4, + 0xeb, 0x17, 0xd3, 0xd0, 0xa5, 0x62, 0xf3, 0x43, 0x16, 0x2a, 0x51, 0x76, + 0xe5, 0x31, 0x13, 0x1c, 0xb4, 0x88, 0xef, 0xff, 0xb3, 0xf8, 0x5e, 0xfe, + 0x42, 0x7d, 0x23, 0x58, 0xa8, 0xdd, 0x9c, 0xb9, 0x31, 0xa4, 0x42, 0x14, + 0x23, 0x20, 0xc9, 0x47, 0x3b, 0xc6, 0x3a, 0xf0, 0xaa, 0x8a, 0x19, 0xc7, + 0x22, 0xfc, 0x7b, 0x45, 0x19, 0x97, 0x21, 0x51, 0xe9, 0x41, 0xe2, 0x8c, + 0x28, 0x24, 0x8b, 0xfd, 0xa9, 0xe1, 0xa0, 0x68, 0x96, 0x2f, 0xfe, 0xe3, + 0x7b, 0xf9, 0xd3, 0xec, 0x2d, 0x96, 0x2f, 0x9f, 0x82, 0x3a, 0xc5, 0xfe, + 0x11, 0xb9, 0x09, 0x2d, 0xd6, 0x2f, 0xec, 0x8f, 0x62, 0x01, 0x90, 0x3d, + 0x8d, 0x11, 0xdf, 0xed, 0x02, 0x2f, 0xb9, 0x0d, 0x62, 0xff, 0xf9, 0x8e, + 0x3f, 0xcf, 0xe4, 0xe2, 0xee, 0x1c, 0x58, 0xbf, 0xfd, 0x9e, 0xfb, 0xe7, + 0x7e, 0xce, 0x93, 0xc5, 0x8b, 0x7e, 0x51, 0xa7, 0xf3, 0x52, 0x52, 0xbf, + 0x8a, 0x05, 0x98, 0x05, 0x8b, 0xdc, 0xf6, 0xcb, 0x15, 0x27, 0x96, 0xc5, + 0x97, 0xc6, 0x1f, 0xa7, 0x16, 0x2f, 0xce, 0xc0, 0x33, 0xcb, 0x17, 0xfe, + 0x2f, 0xcb, 0x8d, 0xf9, 0x90, 0x58, 0xbd, 0x83, 0x82, 0xc5, 0xee, 0x49, + 0xd6, 0x29, 0x8f, 0xdc, 0x07, 0xbc, 0x1d, 0xb9, 0x9d, 0x62, 0xc1, 0xac, + 0x53, 0x9a, 0x90, 0x0b, 0x5f, 0xc0, 0xe7, 0xe4, 0xbc, 0xb1, 0x52, 0x79, + 0xcc, 0x41, 0x7e, 0xe9, 0xf7, 0x04, 0x4b, 0x17, 0xed, 0x61, 0xb3, 0xc5, + 0x8a, 0xc3, 0xd5, 0x72, 0xcb, 0xfb, 0x91, 0x42, 0x4a, 0x0b, 0x17, 0xfe, + 0xda, 0x77, 0xfb, 0xc5, 0x01, 0x1d, 0x62, 0xb4, 0x7e, 0x4c, 0x5f, 0x52, + 0xba, 0x47, 0xb1, 0xb4, 0x21, 0x41, 0x91, 0x8d, 0x1a, 0xfe, 0xe4, 0x1f, + 0x27, 0x68, 0x50, 0x14, 0x29, 0x78, 0xea, 0x28, 0x49, 0x5c, 0x52, 0xb1, + 0x7d, 0xf9, 0xe4, 0xac, 0x5e, 0x0c, 0x78, 0xb1, 0x7b, 0xaf, 0xe4, 0x6c, + 0xb1, 0x5b, 0x1f, 0xf0, 0xc5, 0x98, 0x8b, 0x83, 0xd7, 0xb8, 0xfc, 0x58, + 0xbc, 0x73, 0x37, 0x58, 0xb9, 0xf4, 0xb1, 0x7f, 0xf8, 0x3e, 0xa8, 0x16, + 0x0f, 0x02, 0xd6, 0x6c, 0xb1, 0x43, 0x3e, 0x78, 0x85, 0xe8, 0xc4, 0x55, + 0x34, 0x21, 0xef, 0xed, 0xa2, 0x84, 0x6d, 0xad, 0x96, 0x2f, 0xd2, 0x5e, + 0xcf, 0x2c, 0x5f, 0xbc, 0xdd, 0x82, 0x56, 0x28, 0xe7, 0xa0, 0x44, 0xf7, + 0xb3, 0x71, 0xac, 0x5f, 0x7b, 0x08, 0x0b, 0x17, 0xbd, 0x9b, 0x2c, 0x5f, + 0x9c, 0xb6, 0x0f, 0xb5, 0x8b, 0x98, 0x29, 0x3c, 0x91, 0x8f, 0x5f, 0xd9, + 0xad, 0x4c, 0x8d, 0x62, 0xa3, 0x74, 0xe3, 0x26, 0x11, 0x18, 0x42, 0xe3, + 0xc4, 0xd7, 0x1c, 0x5b, 0x7f, 0xef, 0xe0, 0xc6, 0xfd, 0xe7, 0x7e, 0x58, + 0xbe, 0xee, 0x19, 0xe5, 0x8a, 0xd8, 0xf9, 0x46, 0x83, 0x7d, 0xb0, 0x62, + 0xd9, 0x62, 0xfa, 0x28, 0x4e, 0xcb, 0x15, 0x27, 0x99, 0x84, 0xf7, 0xff, + 0xf4, 0xf4, 0x72, 0x00, 0x67, 0xf4, 0x30, 0x1c, 0xc2, 0x58, 0xbd, 0xf6, + 0x35, 0x62, 0xff, 0x16, 0xc5, 0x82, 0x9e, 0x2c, 0x52, 0xc5, 0xf0, 0x03, + 0x28, 0x2c, 0x59, 0xe4, 0xd8, 0x78, 0x32, 0xf8, 0xb3, 0xf8, 0xb1, 0x7c, + 0x14, 0x5c, 0x95, 0x8b, 0xd2, 0x7c, 0x58, 0xb8, 0x12, 0xb1, 0x4e, 0x6c, + 0xc0, 0x39, 0x7c, 0x52, 0xdb, 0xac, 0x5f, 0xa4, 0xdc, 0xf7, 0x16, 0x2f, + 0xff, 0xec, 0x27, 0x1f, 0x33, 0x9c, 0xcf, 0xbf, 0x05, 0xb2, 0xc5, 0xfc, + 0x3d, 0x37, 0xbe, 0x25, 0x8b, 0x9b, 0xd0, 0x44, 0x57, 0x16, 0xef, 0xe7, + 0xf8, 0x8e, 0x77, 0x58, 0xbf, 0xf8, 0x50, 0xce, 0x19, 0xe7, 0x8e, 0xcd, + 0x96, 0x2a, 0x07, 0xf0, 0x45, 0xd7, 0xd9, 0x0c, 0x25, 0x8a, 0x73, 0xc2, + 0x01, 0x0d, 0x4a, 0xe0, 0x4e, 0xcd, 0xf0, 0x20, 0x1a, 0xee, 0x0f, 0x1a, + 0xc7, 0xb9, 0x2f, 0x64, 0x3a, 0x58, 0x39, 0x07, 0xc8, 0x8a, 0x16, 0x7e, + 0x87, 0x45, 0xff, 0xf9, 0xbb, 0x87, 0x3f, 0x2f, 0xee, 0x39, 0x77, 0x05, + 0x8b, 0xde, 0x90, 0x2c, 0x56, 0x8f, 0xd0, 0x95, 0xed, 0x19, 0x1b, 0xbf, + 0x14, 0xf7, 0x58, 0x4d, 0xd6, 0xc6, 0x53, 0x1a, 0x30, 0x46, 0xc5, 0x5d, + 0x76, 0x95, 0xd7, 0x0a, 0xba, 0xea, 0x51, 0x1a, 0x90, 0x66, 0x77, 0x13, + 0x69, 0x40, 0x50, 0x8c, 0x48, 0x73, 0x89, 0x39, 0x4a, 0xbd, 0x36, 0x3d, + 0xbd, 0xe5, 0xaa, 0x77, 0x19, 0xfb, 0xca, 0x64, 0x8a, 0x71, 0x6b, 0x53, + 0x88, 0x27, 0x95, 0xcb, 0xf9, 0xf7, 0x76, 0x95, 0xcc, 0x09, 0x5e, 0xfd, + 0x7c, 0x29, 0x0a, 0x7a, 0x8b, 0x94, 0xed, 0xcf, 0x4f, 0x1b, 0x8a, 0x33, + 0x0e, 0x87, 0x81, 0x43, 0x1e, 0x3a, 0x3b, 0x40, 0xe7, 0x33, 0xfa, 0xa3, + 0x34, 0xbf, 0xfe, 0xeb, 0x63, 0x7e, 0xb5, 0xc3, 0xfe, 0x77, 0x0c, 0xea, + 0xe2, 0xc5, 0xc2, 0xf2, 0xc5, 0xfc, 0xfe, 0xcd, 0x7a, 0x56, 0x2e, 0xd4, + 0xac, 0x54, 0x79, 0xee, 0x44, 0x31, 0xd4, 0x5b, 0x7e, 0xc0, 0xb3, 0xec, + 0xb1, 0x7f, 0x3e, 0xc1, 0xed, 0x3b, 0x2c, 0x5f, 0xfe, 0xf3, 0xfc, 0x5f, + 0x67, 0xef, 0x92, 0x6a, 0xc5, 0xff, 0xe7, 0xee, 0x1c, 0x7f, 0x7e, 0x75, + 0xe9, 0x58, 0xbf, 0x81, 0xc9, 0x8f, 0xd4, 0xac, 0x5f, 0xd3, 0x01, 0xe9, + 0xc2, 0x58, 0xac, 0x47, 0xbe, 0x93, 0x19, 0x2c, 0x8c, 0x6f, 0xf4, 0xe9, + 0xa2, 0x6e, 0x41, 0x62, 0xff, 0xfc, 0x2e, 0x41, 0xca, 0x7a, 0x73, 0xa9, + 0xb4, 0xd1, 0x2c, 0x5e, 0x66, 0xdd, 0x52, 0x57, 0x17, 0xf3, 0x07, 0xff, + 0xb1, 0xd6, 0x2b, 0x73, 0xd9, 0xf9, 0x55, 0xfc, 0xfa, 0xfb, 0x06, 0x75, + 0x8b, 0xe7, 0xf4, 0x25, 0x62, 0x86, 0x9a, 0xe7, 0x66, 0x9a, 0x85, 0xa7, + 0xc8, 0xfa, 0x17, 0xdf, 0xfc, 0xde, 0xcd, 0x8b, 0x07, 0xfc, 0x89, 0x62, + 0xff, 0xa7, 0xb2, 0xc1, 0xff, 0x22, 0x58, 0xaf, 0x9f, 0xff, 0x52, 0x2d, + 0xff, 0xcd, 0xec, 0xd8, 0xb0, 0x7f, 0xc8, 0x96, 0x2f, 0xfa, 0x7b, 0x2c, + 0x1f, 0xf2, 0x25, 0x8b, 0xff, 0xd3, 0xd5, 0xc2, 0x62, 0x90, 0xf7, 0x93, + 0x98, 0x8a, 0x4f, 0x92, 0xf5, 0x22, 0xdf, 0x0b, 0x6c, 0x09, 0x62, 0xf7, + 0x57, 0x19, 0x62, 0xf4, 0xf7, 0x8b, 0x15, 0xf3, 0xe2, 0x22, 0x5e, 0xa2, + 0x0b, 0xe2, 0xc8, 0xa5, 0x62, 0xff, 0xfd, 0xf6, 0x2f, 0x45, 0x9a, 0xc3, + 0x33, 0x7c, 0xf2, 0xc5, 0xa3, 0xd6, 0x2f, 0xff, 0x4e, 0xde, 0x71, 0xe1, + 0x41, 0xfe, 0x25, 0x8b, 0xee, 0xe2, 0x88, 0x96, 0x2b, 0x11, 0xfc, 0xe4, + 0x47, 0x57, 0xf8, 0xab, 0x25, 0x5d, 0x27, 0x58, 0xbb, 0x83, 0x58, 0xad, + 0x1a, 0xf6, 0x17, 0xbf, 0x30, 0x7c, 0x9c, 0x58, 0xbe, 0x7e, 0x9a, 0x95, + 0x8b, 0xff, 0x9a, 0x21, 0x1c, 0xc9, 0xf3, 0xfe, 0x56, 0x2a, 0x07, 0xd4, + 0x44, 0x95, 0x04, 0x59, 0xb4, 0x24, 0xaf, 0xde, 0x92, 0x90, 0x2c, 0x5f, + 0xf8, 0xa4, 0x12, 0xc3, 0x97, 0x89, 0x62, 0xff, 0xbb, 0xf4, 0x53, 0xef, + 0xb4, 0x4b, 0x15, 0xe3, 0xfa, 0x11, 0xed, 0xa7, 0x48, 0xc3, 0x3c, 0x28, + 0x6f, 0xb7, 0x66, 0xdd, 0x52, 0x1e, 0x17, 0xc2, 0x86, 0x71, 0x62, 0xe8, + 0xcc, 0xd1, 0xea, 0x11, 0x8d, 0xfb, 0xef, 0xaf, 0xb2, 0xc5, 0xe2, 0xf3, + 0x2c, 0x5d, 0x83, 0xc3, 0xc4, 0xe1, 0x45, 0x41, 0x13, 0xe7, 0x73, 0xbf, + 0xa7, 0x5b, 0x4e, 0xb6, 0x58, 0xbf, 0xee, 0x81, 0xfd, 0xa2, 0x06, 0x44, + 0xb1, 0x50, 0x3e, 0xff, 0x18, 0x5f, 0xe0, 0x48, 0x18, 0x85, 0x8b, 0x17, + 0xff, 0xf1, 0x67, 0x57, 0x0c, 0xe0, 0x3a, 0x18, 0xdc, 0x86, 0x99, 0x62, + 0xfe, 0x6f, 0xc9, 0x48, 0x16, 0x29, 0xd1, 0x83, 0xd0, 0xca, 0x39, 0x8e, + 0xff, 0xed, 0xa7, 0x5b, 0xe7, 0x39, 0x83, 0xc5, 0x8a, 0x94, 0xd7, 0x72, + 0x1c, 0x6c, 0x69, 0x7e, 0x91, 0xf3, 0xaa, 0x25, 0x8b, 0xff, 0x75, 0x4f, + 0x7c, 0x9e, 0x14, 0xf9, 0x62, 0xfd, 0x13, 0xfa, 0x40, 0xb1, 0x7e, 0x6f, + 0x75, 0x3e, 0xc6, 0x1f, 0x5c, 0xa1, 0x5f, 0xba, 0xfc, 0x86, 0xd1, 0x2c, + 0x59, 0xf8, 0x7e, 0x42, 0x42, 0xad, 0x93, 0x31, 0xf4, 0x61, 0x57, 0xfd, + 0x3d, 0x1a, 0x21, 0xe6, 0x1a, 0xb1, 0x7f, 0xff, 0xda, 0x2c, 0xd8, 0xc2, + 0xce, 0x85, 0x9d, 0x5c, 0x33, 0x80, 0xe8, 0xb1, 0x7f, 0xe2, 0xd9, 0xf5, + 0xc1, 0x70, 0x84, 0xb1, 0x7f, 0xd9, 0xee, 0x07, 0xc3, 0x37, 0x82, 0xc5, + 0xfc, 0x59, 0xee, 0x60, 0x4b, 0x17, 0xff, 0xfc, 0xc5, 0xb0, 0xff, 0x3c, + 0xce, 0xf9, 0x3a, 0xf7, 0x33, 0x65, 0x8a, 0x94, 0xfb, 0x20, 0x57, 0x87, + 0x8e, 0xe0, 0x74, 0x06, 0x3e, 0x08, 0xba, 0xff, 0x6e, 0xfc, 0xfb, 0xf9, + 0xd6, 0x2f, 0xc3, 0x9f, 0x48, 0xd6, 0x2f, 0xf9, 0xc8, 0x1a, 0x9f, 0x37, + 0x96, 0x2f, 0xd9, 0xb3, 0x17, 0x6b, 0x15, 0xda, 0x2f, 0x5c, 0xd3, 0xe5, + 0x04, 0x71, 0x7f, 0xfd, 0x02, 0x9e, 0x60, 0x7a, 0xce, 0xf6, 0xc0, 0x96, + 0x2f, 0x7b, 0xae, 0xf1, 0x62, 0xf4, 0x74, 0xf6, 0xb1, 0x7f, 0x86, 0xdc, + 0x04, 0xf6, 0x4b, 0x17, 0xff, 0x4f, 0x6e, 0x7f, 0xb7, 0x8a, 0x4e, 0xb1, + 0x7d, 0xec, 0x20, 0x2c, 0x57, 0x68, 0x9a, 0xd1, 0xa7, 0x91, 0x2f, 0xf7, + 0x53, 0x0e, 0x70, 0x6e, 0xb1, 0x68, 0xc8, 0xdd, 0xb2, 0xdf, 0x98, 0x60, + 0xec, 0x6d, 0x02, 0x81, 0xc6, 0x53, 0x91, 0xcb, 0x6f, 0x1b, 0xb3, 0xc3, + 0x5e, 0x28, 0xcb, 0xf4, 0xec, 0x78, 0x69, 0xfe, 0x1d, 0x4d, 0x19, 0x01, + 0x47, 0xdf, 0xc9, 0x6a, 0x1e, 0x8c, 0x7c, 0x47, 0x9d, 0x14, 0xe3, 0x89, + 0x03, 0x85, 0xdf, 0x51, 0x8d, 0xef, 0xb1, 0xd6, 0x2f, 0xb7, 0x66, 0xdd, + 0x52, 0x60, 0x96, 0x1a, 0xc5, 0x68, 0xf0, 0xfe, 0x63, 0x78, 0xd9, 0xd9, + 0x62, 0xf6, 0x74, 0xc5, 0x8b, 0x1d, 0x62, 0xe7, 0xd1, 0x1b, 0x01, 0x0f, + 0x5f, 0xff, 0x84, 0xdb, 0x1f, 0x23, 0x85, 0xac, 0xd4, 0x03, 0x82, 0xc5, + 0x7d, 0x10, 0xe4, 0x57, 0x71, 0xbe, 0x58, 0xb8, 0x50, 0x58, 0xbf, 0x61, + 0x67, 0xb8, 0xb1, 0x7e, 0xce, 0x09, 0xbb, 0x58, 0xbc, 0x2e, 0xc0, 0xb1, + 0x7b, 0xc3, 0x65, 0x8b, 0xc7, 0x0c, 0xeb, 0x17, 0xf3, 0x1c, 0x3d, 0x37, + 0x6b, 0x17, 0xff, 0xff, 0xe7, 0x86, 0xe4, 0x26, 0xd8, 0xf9, 0x1c, 0x2d, + 0x45, 0x09, 0xef, 0x35, 0x00, 0xe0, 0xb1, 0x5a, 0x45, 0xe7, 0x8c, 0x2d, + 0x19, 0x2a, 0xcd, 0x71, 0x80, 0xd2, 0x2d, 0xe1, 0xad, 0xa2, 0x2f, 0x8c, + 0xb0, 0xc1, 0x13, 0xf0, 0xa4, 0x43, 0xf1, 0xc3, 0xa1, 0xc3, 0x6e, 0xff, + 0x46, 0x66, 0xb7, 0x66, 0xdd, 0x52, 0x65, 0x17, 0xe8, 0x98, 0x72, 0x75, + 0x8b, 0xc1, 0x05, 0xb2, 0xc5, 0xff, 0xb3, 0xd0, 0xc0, 0x47, 0x67, 0xc4, + 0xb1, 0x78, 0xd6, 0x25, 0x8b, 0xff, 0xd8, 0xc3, 0xfe, 0x6b, 0x53, 0xd0, + 0xd9, 0x58, 0xbe, 0xdd, 0x9b, 0x75, 0x49, 0xa6, 0x5f, 0x78, 0xa4, 0xeb, + 0x17, 0xec, 0xd8, 0xb3, 0xa2, 0xc5, 0x39, 0xe6, 0x11, 0x15, 0x1a, 0x98, + 0x34, 0x78, 0xee, 0x93, 0x3e, 0xfb, 0x60, 0x2c, 0x5e, 0x91, 0x76, 0xb1, + 0x7d, 0x9b, 0x38, 0x4b, 0x15, 0x87, 0xa9, 0xf1, 0x22, 0x1e, 0xbe, 0xdc, + 0x4c, 0x4b, 0x17, 0xef, 0xb7, 0x60, 0x75, 0x8b, 0xdf, 0x6e, 0x2c, 0x5f, + 0x36, 0xbe, 0x2c, 0x3c, 0x60, 0xca, 0x6f, 0xd9, 0xbf, 0xb3, 0x75, 0x8a, + 0x81, 0xf1, 0xe1, 0xcd, 0xfe, 0x1f, 0xda, 0x2f, 0xb9, 0xd6, 0x29, 0x61, + 0x8d, 0xad, 0xfe, 0x93, 0xe0, 0xca, 0x7b, 0x58, 0xbf, 0x0d, 0xc1, 0x24, + 0xb1, 0x7d, 0xc2, 0x90, 0x2c, 0x5f, 0xef, 0x48, 0xdf, 0x53, 0xd1, 0x62, + 0xb0, 0xf5, 0xd8, 0x8a, 0xfe, 0xfb, 0x72, 0x73, 0x8b, 0x17, 0xf0, 0x9b, + 0xef, 0x84, 0xb1, 0x7f, 0xfd, 0x0f, 0xcf, 0xb4, 0x2e, 0x7d, 0xa1, 0xb1, + 0xd6, 0x2a, 0x57, 0x43, 0xf6, 0x29, 0x19, 0x0e, 0x46, 0x91, 0xbc, 0x25, + 0xbb, 0x2d, 0x8a, 0x19, 0x87, 0x56, 0xf8, 0xdb, 0x19, 0x93, 0xf7, 0x08, + 0x3c, 0x5a, 0x19, 0x65, 0xf9, 0xce, 0xde, 0x95, 0x8b, 0xff, 0xdc, 0xe3, + 0x13, 0x16, 0x6c, 0x79, 0xdd, 0x62, 0xe3, 0xc6, 0x40, 0xfc, 0x58, 0x9e, + 0xa3, 0x13, 0x74, 0xc8, 0xd1, 0x2f, 0xb0, 0xef, 0xe5, 0x8b, 0xa3, 0x6e, + 0xb5, 0x62, 0xee, 0xb9, 0x1b, 0xf5, 0xa7, 0x89, 0xd7, 0x08, 0xaf, 0xdd, + 0x64, 0x6f, 0xd7, 0x3a, 0xe7, 0x5c, 0x58, 0xbf, 0xe3, 0x03, 0xdd, 0xb4, + 0xd0, 0xc5, 0x8b, 0xee, 0xb9, 0x1b, 0xc6, 0xf1, 0xa2, 0xc5, 0x75, 0x88, + 0xbb, 0xeb, 0x51, 0xba, 0xec, 0xf2, 0xfb, 0xcd, 0xfc, 0x58, 0xbf, 0xd3, + 0x17, 0x46, 0xdc, 0x40, 0x58, 0xa8, 0xd0, 0xf6, 0xba, 0xea, 0x45, 0x78, + 0x19, 0xc5, 0x8b, 0xfd, 0xf7, 0x08, 0x6c, 0xdb, 0xac, 0x57, 0x5a, 0x7a, + 0x51, 0xb0, 0xed, 0xed, 0x36, 0xeb, 0x17, 0xbe, 0xf1, 0x2c, 0x5f, 0x9b, + 0xbf, 0x0a, 0x56, 0x28, 0x67, 0xca, 0xe3, 0xc4, 0x3d, 0x7e, 0x1b, 0x13, + 0x6e, 0xb1, 0x5d, 0x69, 0xea, 0xf5, 0xd4, 0xb6, 0xfe, 0xf7, 0x27, 0x5b, + 0x32, 0xc5, 0xf8, 0xf9, 0xf7, 0x82, 0xc5, 0x46, 0xc7, 0xaf, 0x25, 0xf7, + 0xee, 0xbb, 0xeb, 0x79, 0x92, 0xb1, 0x7f, 0x8c, 0x89, 0xfe, 0x42, 0xf2, + 0xc5, 0x2c, 0x5f, 0xdd, 0x75, 0x6f, 0xbf, 0x54, 0xac, 0x46, 0xc4, 0xca, + 0xeb, 0x88, 0x8d, 0xeb, 0xaa, 0x15, 0xfe, 0x0c, 0xf9, 0xee, 0x3f, 0x16, + 0x2c, 0xeb, 0x15, 0x1b, 0x1e, 0x34, 0x71, 0xad, 0xfd, 0xd6, 0xbe, 0xf3, + 0xdf, 0x16, 0x2f, 0xf4, 0xed, 0xa6, 0x1e, 0xcc, 0xb1, 0x7f, 0xfc, 0xc5, + 0xe8, 0x66, 0xb2, 0x48, 0xb3, 0xcb, 0x17, 0xfe, 0x62, 0xc3, 0x0b, 0x00, + 0x2e, 0x2c, 0x57, 0xd1, 0x15, 0xe4, 0xca, 0x82, 0x38, 0x9e, 0x17, 0xf7, + 0xff, 0xcd, 0xb3, 0x74, 0xe1, 0x8d, 0xd3, 0x7f, 0xbe, 0x96, 0x2f, 0xdd, + 0x18, 0x78, 0x75, 0x8b, 0xfb, 0x8d, 0xb1, 0x4e, 0xcb, 0x17, 0xcc, 0x08, + 0xec, 0x58, 0xbf, 0xee, 0x4f, 0xe4, 0x7f, 0x63, 0x56, 0x28, 0xc3, 0xdf, + 0xf1, 0x2d, 0xd9, 0xd1, 0x62, 0xdc, 0x93, 0x78, 0x44, 0x77, 0xef, 0x49, + 0x4c, 0x4b, 0x17, 0xfd, 0x0e, 0x61, 0x4f, 0x46, 0x02, 0xc5, 0x61, 0xf1, + 0x76, 0x51, 0x7f, 0x13, 0x7e, 0x41, 0xd6, 0x2c, 0x5e, 0xea, 0x9e, 0x2c, + 0x54, 0x9e, 0x93, 0x99, 0x5f, 0xf3, 0x8f, 0x0e, 0x61, 0xd8, 0x6b, 0x17, + 0xe7, 0xea, 0x92, 0x75, 0x8b, 0xd3, 0xee, 0x2c, 0x54, 0x11, 0x00, 0x73, + 0xa2, 0x29, 0xbe, 0xe7, 0x59, 0x1b, 0xf5, 0x8b, 0x17, 0x0e, 0x56, 0x2a, + 0x4f, 0x2b, 0xa8, 0xce, 0x9d, 0x13, 0xa2, 0x79, 0xbf, 0x49, 0x6f, 0xf9, + 0x58, 0xbf, 0xe7, 0xe4, 0xfb, 0x93, 0xf9, 0x58, 0xbf, 0x64, 0x76, 0x6a, + 0x56, 0x2f, 0xc7, 0x9e, 0xf8, 0x64, 0x9f, 0x10, 0x67, 0x17, 0xff, 0x67, + 0xbe, 0xe7, 0xcf, 0x70, 0x3e, 0x2c, 0x5f, 0xfb, 0x18, 0x13, 0x0d, 0x4e, + 0x12, 0xc5, 0x4a, 0x30, 0xf7, 0x41, 0x74, 0x6b, 0xe7, 0xe9, 0xfe, 0x8b, + 0x17, 0xdc, 0x92, 0x89, 0x62, 0xfa, 0x7a, 0xa2, 0xc5, 0x8b, 0xe7, 0x92, + 0xf2, 0xc5, 0x31, 0xf5, 0x11, 0x1f, 0x09, 0xaf, 0xff, 0x0e, 0x4d, 0x32, + 0x5f, 0x53, 0xe9, 0xfa, 0xc5, 0xfb, 0x76, 0x29, 0x0d, 0x62, 0xb0, 0xfd, + 0x3e, 0x97, 0x7f, 0xf4, 0x41, 0xce, 0xc6, 0x4f, 0xf3, 0x58, 0xb1, 0x58, + 0x7d, 0x2c, 0x43, 0x7f, 0xba, 0x9c, 0x06, 0x37, 0xc4, 0xb1, 0x50, 0x5f, + 0x3b, 0x19, 0x3e, 0x2b, 0xf6, 0x54, 0xf0, 0xca, 0x8a, 0x10, 0xe7, 0x74, + 0xfc, 0x67, 0xa0, 0x22, 0x28, 0xd3, 0x78, 0x5f, 0xe8, 0x48, 0xf4, 0x8c, + 0x2b, 0xa8, 0x82, 0xf8, 0x27, 0x32, 0x39, 0x62, 0xff, 0xdc, 0x97, 0xd3, + 0x7f, 0x79, 0x3a, 0xc5, 0xff, 0xec, 0x32, 0x7a, 0x36, 0xb9, 0x3a, 0x7e, + 0x2c, 0x5d, 0xdc, 0x4b, 0x17, 0xfc, 0x58, 0x32, 0x9d, 0xe7, 0x4b, 0x17, + 0xff, 0xfd, 0xc8, 0xc7, 0x89, 0xfe, 0x53, 0xa6, 0x03, 0x38, 0xe4, 0x96, + 0x2b, 0x13, 0x6c, 0x72, 0x88, 0x8f, 0xce, 0x98, 0xc3, 0x40, 0x38, 0xbf, + 0xc7, 0x0c, 0xe0, 0x3b, 0x81, 0x62, 0xfc, 0x66, 0xb4, 0x2f, 0xac, 0x5f, + 0x1b, 0x25, 0xba, 0xc5, 0x9d, 0x62, 0x9c, 0xda, 0xe8, 0x92, 0xb8, 0x88, + 0x0f, 0x30, 0x5f, 0x8f, 0x3e, 0x91, 0xac, 0x5f, 0xa6, 0x26, 0x6d, 0x2c, + 0x5b, 0xd2, 0x7a, 0x1c, 0x28, 0xa9, 0x4d, 0x43, 0x21, 0x6c, 0xee, 0x77, + 0x9f, 0x36, 0x58, 0xbf, 0xfd, 0xbf, 0xdf, 0xef, 0xa9, 0x88, 0x2c, 0xfa, + 0xc5, 0x7c, 0xfa, 0x88, 0x76, 0xfc, 0xdd, 0xc3, 0x3c, 0xb1, 0x78, 0x05, + 0x8b, 0x17, 0x16, 0x2c, 0x51, 0x86, 0xc8, 0x03, 0x97, 0x8f, 0x3a, 0x58, + 0xbf, 0xe7, 0x33, 0xed, 0xa9, 0xe9, 0x2b, 0x17, 0xbc, 0x52, 0xb1, 0x52, + 0x7e, 0x9c, 0x1d, 0x0c, 0xee, 0xff, 0x8e, 0xd0, 0x8e, 0x17, 0xdf, 0x4b, + 0x15, 0xb2, 0x60, 0x5a, 0x84, 0xb1, 0xcb, 0xef, 0xcd, 0xcf, 0x48, 0xd6, + 0x2a, 0x4f, 0x7c, 0x46, 0xf7, 0xf9, 0x82, 0x0c, 0x63, 0xc0, 0x96, 0x2f, + 0xfa, 0x76, 0x3b, 0x6a, 0x2e, 0x8e, 0xb1, 0x7f, 0x9b, 0x50, 0x6f, 0x36, + 0xeb, 0x17, 0xff, 0xb3, 0x0b, 0x00, 0x59, 0xef, 0xe4, 0x16, 0x2a, 0x55, + 0x76, 0xe8, 0x87, 0xf1, 0xde, 0x31, 0x09, 0x1b, 0x88, 0xf7, 0xa8, 0xd2, + 0xf1, 0xb3, 0x05, 0x8b, 0xb7, 0xfa, 0xc5, 0xfb, 0xa1, 0x67, 0x0c, 0xc3, + 0x6f, 0xe1, 0xeb, 0xff, 0x13, 0x1a, 0x58, 0x0d, 0xb0, 0x25, 0x8b, 0xff, + 0x73, 0xee, 0x64, 0xb8, 0xf0, 0xeb, 0x14, 0x73, 0xff, 0xf2, 0x05, 0xff, + 0xe2, 0xc3, 0x7e, 0xd0, 0xf8, 0x4c, 0x19, 0xd6, 0x2a, 0x4f, 0xbf, 0x08, + 0xa9, 0xd3, 0x4d, 0xfc, 0x65, 0xb7, 0xf4, 0x97, 0x86, 0x52, 0xb1, 0x7d, + 0x0e, 0x1e, 0x0b, 0x17, 0xfd, 0x24, 0xfb, 0xb7, 0x98, 0xd5, 0x8b, 0xed, + 0x00, 0x12, 0xb1, 0x7d, 0x3e, 0xd4, 0xac, 0x5b, 0x58, 0x78, 0xae, 0x47, + 0x52, 0x8c, 0x83, 0x49, 0x1d, 0xfa, 0xfa, 0x43, 0x9f, 0xac, 0x5c, 0xfb, + 0x2c, 0x5e, 0x66, 0xdd, 0x52, 0x6e, 0x17, 0x45, 0xc5, 0x8b, 0x9e, 0x25, + 0x8b, 0xe6, 0xf3, 0x44, 0xb1, 0x77, 0xb9, 0xc3, 0x77, 0xd0, 0x62, 0xb6, + 0x46, 0x2e, 0xe3, 0x0e, 0x54, 0x1a, 0xa5, 0xff, 0xb7, 0x33, 0x83, 0xfe, + 0x6f, 0x9a, 0x58, 0xbf, 0x7a, 0x22, 0x91, 0xac, 0x54, 0x9f, 0x63, 0xa1, + 0xdf, 0xf6, 0xbe, 0xd9, 0xad, 0x9f, 0x65, 0x8b, 0xef, 0x73, 0x3e, 0xb1, + 0x4e, 0x7b, 0xcc, 0x77, 0x7d, 0x14, 0x8f, 0x16, 0x2f, 0xe0, 0x1f, 0x38, + 0x22, 0x58, 0xb8, 0xc2, 0x58, 0xbf, 0xb8, 0xf9, 0xd1, 0xb4, 0xb1, 0x7f, + 0x72, 0x75, 0xac, 0x09, 0x62, 0xa0, 0x7e, 0xc7, 0x18, 0xf1, 0x7d, 0x3a, + 0x34, 0xda, 0x14, 0x97, 0xf1, 0x19, 0xfc, 0xec, 0x25, 0x8b, 0xfd, 0x87, + 0xee, 0x13, 0x9e, 0x58, 0xbb, 0x35, 0x87, 0xca, 0x03, 0x1b, 0xf1, 0x01, + 0xbb, 0xe2, 0xc5, 0xfd, 0x9d, 0x1f, 0xe7, 0x65, 0x8a, 0x94, 0x42, 0x31, + 0x61, 0x14, 0xde, 0x98, 0x9d, 0x62, 0xe7, 0x35, 0x62, 0xd2, 0x46, 0xd6, + 0x38, 0x76, 0xff, 0x7f, 0x01, 0xd3, 0x07, 0xba, 0xc5, 0x41, 0x79, 0x0c, + 0x65, 0x26, 0xc3, 0xd3, 0xb2, 0xfd, 0x43, 0xa0, 0xf0, 0xab, 0xfb, 0xf3, + 0x10, 0x14, 0x3d, 0xb9, 0x18, 0x7f, 0x98, 0xba, 0x8a, 0x2f, 0xf8, 0x64, + 0xdd, 0x3f, 0x31, 0x71, 0x62, 0xfd, 0x1b, 0xe3, 0x6b, 0xb5, 0x8a, 0x63, + 0xea, 0x8e, 0x3c, 0xbb, 0x90, 0x58, 0xbf, 0xdb, 0x98, 0xdf, 0x26, 0x02, + 0xc5, 0x2c, 0x5e, 0x9d, 0xc9, 0x62, 0xbc, 0x6a, 0x7a, 0x06, 0x5f, 0x13, + 0x6f, 0x8b, 0x17, 0xe0, 0x44, 0x52, 0x75, 0x8a, 0x63, 0xcb, 0x22, 0x2b, + 0xf0, 0x22, 0xd8, 0x51, 0x2c, 0x51, 0xa9, 0xaa, 0xee, 0x48, 0xe3, 0x07, + 0x5e, 0x66, 0xe2, 0x20, 0xbe, 0x9f, 0x8b, 0x4b, 0x17, 0xf7, 0x0c, 0xde, + 0x7b, 0xe2, 0xc5, 0xc4, 0xeb, 0x14, 0x69, 0xf5, 0xf6, 0x46, 0x73, 0x2b, + 0x12, 0xc5, 0xff, 0x7c, 0x4d, 0xcc, 0xc2, 0x35, 0x62, 0xff, 0xfd, 0x3b, + 0x99, 0x9f, 0x7d, 0x4f, 0xf0, 0x87, 0x2b, 0x14, 0xb1, 0x78, 0xf9, 0xe5, + 0x8b, 0xe7, 0x92, 0xf4, 0x9a, 0x90, 0x06, 0x5f, 0xff, 0xf7, 0xa4, 0xef, + 0xe7, 0xdf, 0x34, 0x1e, 0xb5, 0x3e, 0x6f, 0x2c, 0x58, 0x6b, 0x17, 0xb8, + 0xdd, 0xe1, 0xfd, 0x33, 0x45, 0x9c, 0x69, 0xcc, 0x1c, 0xe7, 0xef, 0xde, + 0x85, 0x7d, 0xfd, 0xa3, 0x3d, 0x1d, 0x9f, 0x58, 0xbf, 0xcd, 0x18, 0x59, + 0xb4, 0x9a, 0xb1, 0x7b, 0x3a, 0x9d, 0x62, 0xa5, 0x55, 0x5e, 0x18, 0xfe, + 0x3a, 0x96, 0x48, 0x23, 0x3e, 0x86, 0xf7, 0xfd, 0x2c, 0x5f, 0xcc, 0x2d, + 0xd6, 0x2e, 0x87, 0x5a, 0xb1, 0x7f, 0x8b, 0x62, 0x6d, 0x34, 0x16, 0x2a, + 0x4f, 0x40, 0x43, 0xb7, 0xff, 0xd3, 0xef, 0xb1, 0xcc, 0xde, 0x5c, 0xa7, + 0xa2, 0xc5, 0x41, 0x1f, 0x5c, 0x84, 0x3f, 0x51, 0x0d, 0xfe, 0x21, 0x1e, + 0x79, 0xe7, 0x58, 0xbf, 0xce, 0x52, 0x79, 0xef, 0x8b, 0x17, 0xe9, 0xd6, + 0xb3, 0xa9, 0x62, 0xa5, 0x12, 0x31, 0x19, 0x91, 0x9d, 0xf0, 0xcc, 0x0c, + 0xeb, 0x17, 0xf0, 0xcb, 0x3a, 0x34, 0x16, 0x29, 0xcf, 0x54, 0x44, 0xd7, + 0xff, 0xef, 0xc4, 0x61, 0xc5, 0xe7, 0xdb, 0x3c, 0x6e, 0x7d, 0x62, 0xfe, + 0x29, 0x8a, 0x2c, 0x02, 0xc5, 0xed, 0xb9, 0xc5, 0x8b, 0xff, 0xb6, 0xf3, + 0x8f, 0x0a, 0x0f, 0xf1, 0x2c, 0x5a, 0x25, 0x8a, 0x93, 0xd8, 0xdd, 0x16, + 0xff, 0x3f, 0x4c, 0xfb, 0x16, 0xcb, 0x17, 0x61, 0xd6, 0x2a, 0x07, 0x99, + 0xc3, 0x5b, 0x04, 0xb1, 0x7a, 0x73, 0x4b, 0x17, 0xfb, 0xf3, 0x07, 0x8e, + 0xc3, 0xac, 0x54, 0x0f, 0x94, 0x62, 0x7c, 0x1c, 0xbf, 0x19, 0xdf, 0x1c, + 0xd5, 0x8a, 0xd8, 0xf6, 0xfb, 0x2f, 0xae, 0xd3, 0x06, 0x68, 0x71, 0x5f, + 0xfb, 0x3e, 0xfa, 0x1f, 0xe4, 0xb7, 0x58, 0xbe, 0x1e, 0x70, 0x4b, 0x17, + 0xfe, 0x2c, 0xf7, 0x24, 0xcf, 0x66, 0xeb, 0x17, 0xe8, 0xc6, 0xf3, 0x6e, + 0xb1, 0x7c, 0x67, 0xb0, 0x0b, 0x17, 0xff, 0x60, 0x1f, 0x51, 0x9f, 0xce, + 0x92, 0x4b, 0x15, 0x04, 0xce, 0xb0, 0xfd, 0xc8, 0xce, 0x81, 0xf2, 0xcf, + 0x12, 0x5f, 0xee, 0xe1, 0x25, 0xec, 0x02, 0xc5, 0xf7, 0x00, 0xfe, 0x58, + 0xa8, 0x2e, 0x53, 0x6e, 0x42, 0xeb, 0x71, 0x17, 0xfd, 0xdd, 0xa3, 0x74, + 0xe4, 0x6c, 0x62, 0x56, 0x0c, 0xd2, 0xfc, 0xda, 0xf6, 0x7d, 0x62, 0xfe, + 0x3f, 0x8a, 0x4f, 0xc5, 0x8b, 0xec, 0xe1, 0x4a, 0xc5, 0xff, 0x9c, 0x13, + 0x01, 0xfe, 0x4b, 0x75, 0x8a, 0x82, 0x2d, 0xb0, 0xa3, 0xe5, 0xde, 0x21, + 0xbf, 0xf6, 0x1c, 0xc8, 0xec, 0x3b, 0x93, 0x2c, 0x5e, 0x21, 0x6e, 0xb1, + 0x7e, 0x86, 0x6b, 0x38, 0xb1, 0x5b, 0x22, 0x1c, 0xe8, 0x3e, 0x1e, 0xa5, + 0x8b, 0xc2, 0x6f, 0x2c, 0x5c, 0x29, 0x58, 0xa8, 0x1b, 0x4f, 0x0e, 0xd2, + 0xc5, 0xf7, 0x7b, 0xbe, 0x96, 0x2d, 0x19, 0x88, 0x92, 0xed, 0x00, 0xe4, + 0x3e, 0x0c, 0xbf, 0xf6, 0x17, 0x7e, 0xcc, 0xc2, 0xd9, 0x62, 0x8e, 0x88, + 0x4f, 0x23, 0x5f, 0x60, 0xc8, 0x6b, 0x15, 0x27, 0x8b, 0xd0, 0x8e, 0xf7, + 0x7a, 0xc5, 0x8b, 0xf7, 0x38, 0xc5, 0xba, 0xc5, 0x49, 0xe3, 0xe0, 0xf5, + 0xff, 0x17, 0xbe, 0xd0, 0x13, 0x06, 0xb1, 0x52, 0xac, 0x4f, 0x21, 0x86, + 0xf1, 0xc6, 0x69, 0xa9, 0x88, 0x2c, 0x4b, 0x17, 0xb5, 0xd5, 0x2b, 0x17, + 0x78, 0xce, 0xb8, 0x6c, 0x62, 0x11, 0xbc, 0xcf, 0xb2, 0xc5, 0x61, 0xe9, + 0x1a, 0x6b, 0x7e, 0xea, 0x7e, 0x8d, 0xa5, 0x8b, 0x88, 0x6b, 0x16, 0x75, + 0x8b, 0x47, 0x2c, 0x50, 0x0d, 0x37, 0x84, 0x6a, 0x51, 0x16, 0x32, 0xd2, + 0x3d, 0xbc, 0x64, 0x69, 0x1a, 0x2c, 0x5f, 0xd9, 0xad, 0xd9, 0xb7, 0x54, + 0x90, 0xe5, 0x86, 0xb1, 0x7f, 0xda, 0xcf, 0x19, 0x0d, 0xb8, 0xeb, 0x17, + 0x48, 0x6b, 0x15, 0x18, 0x8a, 0x2d, 0x8f, 0x30, 0x48, 0x8f, 0x2f, 0xd1, + 0x3e, 0xb6, 0x65, 0x8b, 0xfc, 0x03, 0x21, 0x9e, 0xd3, 0xac, 0x54, 0x11, + 0x3c, 0x33, 0xf2, 0x2a, 0xbf, 0x40, 0xce, 0x87, 0x95, 0x8b, 0x41, 0x62, + 0xfe, 0x17, 0x8a, 0x7d, 0xc5, 0x8a, 0x73, 0xc0, 0x00, 0x95, 0x4a, 0xb0, + 0x07, 0x85, 0x6c, 0x45, 0xcd, 0x1b, 0x49, 0x17, 0x89, 0xb2, 0xf6, 0x8d, + 0xdd, 0x62, 0xec, 0x3a, 0xc5, 0xef, 0x67, 0x52, 0xc5, 0xa7, 0x73, 0x6f, + 0xe1, 0x7a, 0x81, 0xff, 0x01, 0x5e, 0xfe, 0x2c, 0xf7, 0x30, 0x6b, 0x17, + 0xd3, 0x1e, 0x29, 0x58, 0xbd, 0x16, 0x0d, 0x62, 0xf4, 0x53, 0xe5, 0x8a, + 0x93, 0x78, 0x21, 0xea, 0xd2, 0x34, 0x0e, 0x44, 0x02, 0xde, 0x30, 0xdc, + 0x20, 0xd6, 0x2f, 0x9e, 0x29, 0x3a, 0xc5, 0xe6, 0x8e, 0x35, 0x62, 0xfd, + 0xc6, 0xfe, 0x6e, 0xb1, 0x5d, 0xa2, 0x1b, 0xe3, 0x20, 0x23, 0xe1, 0x0d, + 0xfa, 0x27, 0xef, 0xab, 0x16, 0x2c, 0x75, 0x8a, 0x30, 0xdf, 0xc9, 0x6d, + 0xfb, 0x08, 0x7f, 0x95, 0x8a, 0x19, 0xe4, 0x04, 0x43, 0x7b, 0x34, 0xcb, + 0x17, 0xff, 0xfd, 0xe7, 0x2f, 0x0b, 0xe6, 0x78, 0x19, 0xd5, 0xf6, 0x88, + 0xce, 0xa5, 0x8b, 0xfe, 0xc9, 0x1f, 0xe7, 0xaa, 0x62, 0x58, 0xbf, 0xc0, + 0x7f, 0xff, 0x00, 0xcb, 0x15, 0xba, 0x3f, 0x1c, 0x70, 0xee, 0x20, 0x3c, + 0xbf, 0x6c, 0x67, 0x9f, 0x8b, 0x17, 0xfe, 0xcf, 0x73, 0xf9, 0xad, 0x60, + 0x4b, 0x17, 0xfe, 0x2e, 0xa6, 0x26, 0x38, 0xf0, 0x6b, 0x15, 0x2a, 0xe3, + 0xf2, 0x18, 0x6f, 0x0c, 0x56, 0x8c, 0x7c, 0x8f, 0x43, 0x2b, 0xea, 0x40, + 0xbf, 0xfe, 0x1b, 0xf4, 0x33, 0x9e, 0x6e, 0xf8, 0x71, 0x41, 0x62, 0xe9, + 0x82, 0xc5, 0xfe, 0x73, 0x8e, 0x4c, 0xf3, 0xac, 0x54, 0x79, 0xe5, 0xfc, + 0x5e, 0xff, 0xfd, 0xfc, 0xd3, 0x44, 0xff, 0x19, 0x48, 0x87, 0x8b, 0x17, + 0xfc, 0x20, 0x30, 0xff, 0x25, 0xd1, 0x62, 0xff, 0xcc, 0x39, 0x1f, 0xdc, + 0x9c, 0xeb, 0x17, 0xfe, 0x83, 0x70, 0xc7, 0xee, 0x0d, 0xc5, 0x8b, 0xfe, + 0x60, 0x19, 0x9e, 0x7d, 0x62, 0xc5, 0xff, 0x36, 0xb8, 0xdf, 0xe4, 0xec, + 0xb1, 0x5d, 0xa2, 0xd0, 0x90, 0x7a, 0x1c, 0xdf, 0x47, 0xfe, 0x4e, 0xb1, + 0x7e, 0x9e, 0x37, 0x60, 0x58, 0xbf, 0x68, 0xd3, 0xe0, 0xd6, 0x2f, 0xbf, + 0xd4, 0xfb, 0x2c, 0x5f, 0x61, 0xfa, 0xe4, 0x6a, 0x58, 0xa9, 0x46, 0x7e, + 0xe4, 0xcc, 0x52, 0x02, 0xaf, 0x13, 0xdf, 0xc2, 0xdf, 0x3c, 0x52, 0xb1, + 0x7f, 0xfa, 0x79, 0xf9, 0x2f, 0x19, 0x16, 0xff, 0x89, 0x62, 0xb8, 0x7f, + 0xbd, 0x0b, 0xab, 0x17, 0x0c, 0x9e, 0x14, 0x31, 0x12, 0xe9, 0x54, 0xe7, + 0x7f, 0x87, 0x89, 0x46, 0x03, 0xe8, 0x63, 0x5f, 0xc5, 0xe3, 0x38, 0x22, + 0x58, 0xbf, 0x34, 0x21, 0x9c, 0x58, 0xbf, 0xba, 0x64, 0x8c, 0x5b, 0x2c, + 0x5f, 0x9b, 0xc3, 0x78, 0x96, 0x2e, 0xef, 0x86, 0x1e, 0xd0, 0x66, 0x37, + 0xbd, 0x9b, 0xac, 0x5d, 0x9b, 0xac, 0x5b, 0x0c, 0x36, 0xde, 0x1e, 0xbf, + 0xef, 0xb6, 0xbb, 0xf4, 0xbe, 0xcb, 0x17, 0xe9, 0x72, 0x9e, 0x8b, 0x17, + 0xb7, 0xfc, 0x4b, 0x17, 0x8b, 0x73, 0x37, 0x3c, 0x88, 0x8a, 0x2a, 0x08, + 0xba, 0x68, 0x41, 0xd3, 0xaa, 0x20, 0x39, 0x7b, 0x42, 0x08, 0x99, 0xc5, + 0x0e, 0x1b, 0xfd, 0x09, 0xd6, 0xd3, 0xad, 0x96, 0x2f, 0xa5, 0xb4, 0x05, + 0x8b, 0xf3, 0xfc, 0x85, 0xe5, 0x8b, 0xf9, 0xf9, 0x83, 0x6d, 0xd6, 0x2f, + 0x84, 0x47, 0x75, 0x8a, 0xdc, 0xf4, 0x3e, 0x5d, 0x7e, 0xc2, 0x7f, 0x89, + 0x62, 0xff, 0xcc, 0x03, 0xb9, 0x99, 0xf7, 0x09, 0x62, 0xbe, 0x7c, 0xe4, + 0x4f, 0x43, 0x4d, 0x16, 0x22, 0x2f, 0xbc, 0x7a, 0x11, 0x57, 0xd3, 0xf6, + 0xf2, 0xc5, 0xff, 0xd0, 0xc2, 0x71, 0x99, 0xdc, 0x33, 0xcb, 0x15, 0xb1, + 0xf4, 0x78, 0x8a, 0xfc, 0xdc, 0xe9, 0x9c, 0x58, 0xbf, 0x37, 0x8c, 0x99, + 0x58, 0xa9, 0x55, 0x39, 0x91, 0xbd, 0xb4, 0x2b, 0x00, 0x46, 0x22, 0xab, + 0xee, 0x84, 0xfb, 0xac, 0x5f, 0x8c, 0xfe, 0x01, 0x96, 0x2f, 0xf6, 0xa7, + 0xec, 0x38, 0x1d, 0x62, 0xff, 0x3f, 0x49, 0xdf, 0x4d, 0xd1, 0x62, 0xff, + 0x3e, 0xc6, 0x69, 0x86, 0xeb, 0x17, 0xf9, 0xfd, 0x1d, 0x84, 0xc6, 0xac, + 0x56, 0xc8, 0xa3, 0x88, 0xe0, 0xe6, 0xb7, 0xdb, 0x0b, 0x50, 0x58, 0xbd, + 0xb6, 0x04, 0xb1, 0x46, 0x1e, 0x24, 0x92, 0xde, 0xcc, 0xe2, 0xc5, 0xfd, + 0x06, 0xd6, 0x77, 0xe5, 0x8b, 0xf8, 0x6c, 0x7f, 0xb8, 0x4b, 0x17, 0xff, + 0x9f, 0x78, 0xdb, 0x7f, 0xbf, 0xde, 0x4b, 0xcb, 0x15, 0x28, 0xae, 0xc2, + 0xf2, 0x2f, 0xbf, 0xec, 0xf7, 0x03, 0xe6, 0x9b, 0x8b, 0x17, 0xfd, 0x3f, + 0x73, 0x5f, 0x66, 0x3a, 0xc5, 0xdb, 0x6c, 0xb1, 0x7c, 0x61, 0xb8, 0x35, + 0x8b, 0xc0, 0xf3, 0xac, 0x50, 0xcf, 0x70, 0x03, 0x44, 0x4b, 0x7e, 0x7f, + 0x71, 0x9d, 0x62, 0xfd, 0x3a, 0x07, 0xdd, 0x62, 0xff, 0x36, 0x8d, 0x9d, + 0xf0, 0xeb, 0x16, 0xc8, 0x1e, 0xe8, 0x45, 0x17, 0xff, 0xdf, 0x7e, 0x0b, + 0x6d, 0xfe, 0xfe, 0xf6, 0x6c, 0xb1, 0x7e, 0x8b, 0x0d, 0x7d, 0x2c, 0x56, + 0x1f, 0xf3, 0xaa, 0x5f, 0xe0, 0x69, 0x8b, 0xd8, 0x05, 0x8b, 0xff, 0x9b, + 0xd0, 0x63, 0x22, 0x84, 0xeb, 0x65, 0x8a, 0xd1, 0xfd, 0x80, 0xce, 0xfe, + 0x93, 0x22, 0xdf, 0xf1, 0x2c, 0x54, 0xae, 0xe6, 0xec, 0x4a, 0x32, 0x9c, + 0x86, 0xbb, 0xbb, 0x44, 0x45, 0xa8, 0x65, 0x1c, 0xb7, 0xe7, 0x6d, 0x09, + 0x60, 0x17, 0x14, 0x21, 0x39, 0x0a, 0x61, 0x42, 0x6f, 0xa8, 0x8a, 0xf0, + 0x7a, 0x82, 0xc5, 0xff, 0x14, 0xf4, 0x89, 0xfd, 0xf9, 0x58, 0xbf, 0x83, + 0xf0, 0xa7, 0x36, 0x58, 0xbf, 0x81, 0xf6, 0x7f, 0x89, 0x62, 0xf7, 0x0a, + 0x0b, 0x15, 0x04, 0x6a, 0xb8, 0xfc, 0x47, 0x7a, 0x30, 0xf1, 0x75, 0xfb, + 0x3a, 0x66, 0xa0, 0xb1, 0x4b, 0x17, 0xdb, 0x94, 0xf8, 0x8d, 0xb4, 0x71, + 0x55, 0xf9, 0xb9, 0xcd, 0xb8, 0xb1, 0x7f, 0x31, 0x00, 0x30, 0x71, 0x62, + 0xfd, 0xe2, 0x60, 0x71, 0x62, 0xf7, 0x0e, 0xcb, 0x17, 0xf8, 0x8d, 0x0f, + 0xff, 0x17, 0x16, 0x28, 0xd4, 0x55, 0xf6, 0x5f, 0x11, 0x40, 0x87, 0x6f, + 0xfe, 0x17, 0x3e, 0xd0, 0x92, 0x1e, 0x7d, 0x62, 0xfe, 0xf6, 0x85, 0xd5, + 0x84, 0xb1, 0x7f, 0xc1, 0xc8, 0x22, 0x84, 0xeb, 0x65, 0x8b, 0xf8, 0x9b, + 0xc1, 0xce, 0xeb, 0x14, 0x73, 0xec, 0x23, 0xdb, 0xe2, 0x06, 0xc0, 0x58, + 0xbf, 0xff, 0xd1, 0x71, 0xc6, 0x64, 0x4e, 0x5d, 0x1a, 0x26, 0xf0, 0xa5, + 0x62, 0xa5, 0x34, 0x8c, 0x84, 0xeb, 0x90, 0xb1, 0x25, 0xff, 0xe2, 0xf4, + 0x83, 0xec, 0x5d, 0x33, 0xbe, 0x2c, 0x5e, 0xd3, 0x69, 0x62, 0x9c, 0xfa, + 0x62, 0x4c, 0xbf, 0xe0, 0xca, 0x19, 0xd0, 0xb3, 0x8b, 0x17, 0xfc, 0x7e, + 0x19, 0x83, 0x92, 0xf2, 0xc5, 0xfa, 0x06, 0x73, 0x98, 0xb1, 0x7f, 0xb8, + 0x67, 0x8c, 0x1e, 0x12, 0xc5, 0x80, 0xb1, 0x5d, 0x9e, 0x46, 0x8d, 0xaa, + 0x51, 0x9f, 0x87, 0x4e, 0xe5, 0x7f, 0x0b, 0x7f, 0xce, 0xb1, 0x62, 0xfb, + 0xbe, 0x79, 0xd6, 0x2b, 0x0f, 0x4d, 0x8b, 0xef, 0xf3, 0x6d, 0x3b, 0xb6, + 0xb6, 0x58, 0xa9, 0x5e, 0x05, 0xc8, 0x40, 0x1a, 0x74, 0xf0, 0xd5, 0xd2, + 0x07, 0xe3, 0x8c, 0x68, 0x54, 0x00, 0x88, 0xa3, 0x0a, 0xe4, 0x20, 0x04, + 0x41, 0x7f, 0xf4, 0x33, 0xaa, 0x19, 0xe9, 0xf7, 0x31, 0x62, 0xff, 0xff, + 0xe6, 0x7f, 0x49, 0x6e, 0xe7, 0x3b, 0xf3, 0x99, 0xf7, 0xe0, 0xb6, 0x58, + 0xb1, 0x9d, 0xa2, 0xe7, 0xe8, 0xf7, 0xbc, 0xde, 0x58, 0xbe, 0x11, 0xb2, + 0x1a, 0xc5, 0x49, 0xe1, 0x30, 0xed, 0xf6, 0x6a, 0x78, 0xb1, 0x7b, 0x7e, + 0xb7, 0x4b, 0x15, 0x1b, 0x1e, 0x30, 0x88, 0xab, 0x11, 0xf5, 0x13, 0x69, + 0x33, 0x5f, 0x46, 0xf1, 0xbc, 0x6f, 0xd6, 0x2c, 0x5f, 0x45, 0x01, 0x1a, + 0xb1, 0x7f, 0x67, 0x9c, 0x78, 0x75, 0x8b, 0xe2, 0x83, 0x9d, 0x62, 0xc6, + 0x44, 0x79, 0xec, 0x5b, 0x7f, 0xbb, 0xe4, 0xea, 0x62, 0x95, 0x8b, 0xee, + 0x8d, 0x17, 0x5d, 0x56, 0x2c, 0xff, 0x3e, 0x32, 0x35, 0xbc, 0x29, 0x02, + 0xc5, 0xfd, 0x31, 0x77, 0x0c, 0xe8, 0xb1, 0x7f, 0xe9, 0x29, 0xe1, 0x81, + 0x37, 0x7c, 0x58, 0xa8, 0x91, 0x6d, 0xa2, 0x6e, 0x0e, 0xf8, 0xca, 0xee, + 0xb2, 0x34, 0x58, 0xbc, 0x3c, 0x3a, 0xc5, 0xf9, 0x9b, 0xb8, 0x71, 0x62, + 0xf7, 0x57, 0x98, 0xc3, 0xc6, 0xd0, 0xed, 0x46, 0xea, 0xb3, 0x24, 0xe0, + 0x6e, 0xad, 0x1a, 0x17, 0x8f, 0x83, 0x68, 0xbb, 0x80, 0x58, 0xbf, 0x71, + 0x8e, 0x3e, 0x2c, 0x5f, 0x70, 0xe2, 0xd9, 0x62, 0xff, 0xf8, 0xde, 0xf9, + 0x30, 0x31, 0xbe, 0xfc, 0x98, 0x2c, 0x54, 0x11, 0x43, 0xd9, 0x4e, 0x89, + 0x68, 0xc4, 0x75, 0x34, 0x2e, 0x69, 0x62, 0x96, 0x2d, 0xc0, 0x17, 0x1c, + 0x0c, 0xbf, 0xfe, 0xfc, 0x87, 0x19, 0xe2, 0x60, 0x73, 0x92, 0x04, 0x8b, + 0x8d, 0xc5, 0x8a, 0x19, 0xf6, 0x1a, 0xa9, 0x70, 0xf1, 0x62, 0x96, 0x2f, + 0xa7, 0x66, 0xe2, 0xc5, 0x46, 0xa3, 0x5f, 0xb0, 0x65, 0x18, 0x99, 0x1e, + 0x42, 0x49, 0xc8, 0xd9, 0x1a, 0xfe, 0xea, 0x60, 0x1e, 0x78, 0xb1, 0x7e, + 0xe6, 0x74, 0xfb, 0xac, 0x5d, 0x20, 0x58, 0xa5, 0x80, 0xcb, 0x7a, 0xf1, + 0xee, 0x89, 0x06, 0xfa, 0x42, 0x6f, 0x2c, 0x57, 0xd1, 0xa6, 0x08, 0x47, + 0x04, 0x45, 0x7f, 0xcd, 0xdb, 0x7b, 0x8c, 0x40, 0x58, 0xbf, 0x8b, 0xc6, + 0x10, 0x00, 0xb1, 0x5b, 0x1f, 0x40, 0x8e, 0x6f, 0xff, 0xe2, 0x6f, 0x7a, + 0x4c, 0xd4, 0xfd, 0xce, 0xe5, 0x05, 0x8b, 0xdd, 0x33, 0x8b, 0x15, 0xf3, + 0xf9, 0xe2, 0xd5, 0xff, 0xb9, 0xd1, 0xa2, 0xd9, 0x89, 0xa2, 0x58, 0xbf, + 0xf4, 0xf5, 0x44, 0xdd, 0x1b, 0xdd, 0x25, 0x62, 0xff, 0xd8, 0x39, 0x84, + 0xe8, 0xfe, 0xed, 0x62, 0xfe, 0x60, 0x44, 0x52, 0x35, 0x8b, 0xfe, 0x2c, + 0xd8, 0x7f, 0xc2, 0xf2, 0xc5, 0xef, 0x3f, 0x16, 0x2f, 0xfb, 0xa3, 0x70, + 0x6c, 0x53, 0xf5, 0x8b, 0xfb, 0x53, 0xd2, 0x4b, 0xcb, 0x17, 0xff, 0x64, + 0x30, 0x8c, 0xfc, 0xc4, 0x21, 0xac, 0x56, 0x22, 0xbd, 0xce, 0x80, 0x5f, + 0x7f, 0xb6, 0x30, 0x65, 0x2d, 0xb2, 0xc5, 0x4a, 0xbb, 0xcd, 0xa1, 0x3d, + 0x90, 0x9c, 0x88, 0x8b, 0x48, 0x67, 0x46, 0xfa, 0x01, 0x17, 0x70, 0xe7, + 0xd0, 0xcc, 0x11, 0x75, 0xf1, 0x82, 0x33, 0xa2, 0xc5, 0x46, 0xef, 0xbb, + 0x2f, 0xd6, 0x43, 0xff, 0xad, 0x84, 0xdc, 0x69, 0x08, 0x18, 0xda, 0x1c, + 0xdd, 0x77, 0x08, 0x6e, 0xb8, 0x4d, 0xd7, 0x58, 0x60, 0xc6, 0xa7, 0x78, + 0xd6, 0x55, 0x34, 0x85, 0x2d, 0xa5, 0x29, 0xc2, 0x3a, 0x61, 0xcb, 0x8a, + 0xca, 0x41, 0x99, 0xb2, 0xa1, 0x37, 0x96, 0xdb, 0xdc, 0x6a, 0xef, 0x0c, + 0x98, 0xa7, 0x4a, 0xb5, 0x38, 0xae, 0x79, 0x7a, 0xdf, 0x9d, 0x3e, 0x69, + 0xca, 0x70, 0x4a, 0xa7, 0x29, 0x5d, 0xfc, 0x9e, 0x21, 0xf4, 0xfe, 0x38, + 0xa5, 0x35, 0x74, 0x95, 0xf6, 0x14, 0x69, 0xb1, 0xd1, 0xb1, 0x87, 0x39, + 0xa1, 0xd5, 0x0a, 0x8b, 0xfe, 0xfb, 0x3c, 0x27, 0xdc, 0xc5, 0x8b, 0xe9, + 0x83, 0x74, 0x58, 0xbf, 0xbd, 0xdf, 0x1c, 0x86, 0xb1, 0x7f, 0xf6, 0xb3, + 0xbd, 0xfe, 0xfe, 0xe3, 0x76, 0xb1, 0x7e, 0x9e, 0x68, 0x40, 0x58, 0xbf, + 0xff, 0x67, 0xb8, 0x1f, 0x0b, 0x3c, 0x20, 0x1d, 0xa0, 0xb1, 0x7f, 0x9b, + 0x5c, 0xcc, 0x23, 0x56, 0x28, 0xe8, 0x8a, 0xf2, 0xbd, 0xf6, 0x0d, 0xa0, + 0xb1, 0x78, 0x32, 0x82, 0xc5, 0x39, 0xe0, 0x00, 0x8a, 0xed, 0xe3, 0x25, + 0x50, 0x56, 0xc7, 0x0e, 0x48, 0x02, 0xf2, 0x48, 0xe4, 0x2c, 0xfc, 0xc7, + 0x51, 0x8b, 0xab, 0x42, 0x9c, 0xe1, 0xbe, 0xfc, 0x9f, 0x16, 0x2f, 0xe8, + 0xe0, 0xfb, 0x07, 0x25, 0x62, 0xe9, 0x0d, 0x62, 0xb7, 0x3e, 0xe7, 0x22, + 0x39, 0xa5, 0xf4, 0xea, 0x07, 0x58, 0xb0, 0xd6, 0x2f, 0xf3, 0x49, 0x4c, + 0x42, 0x95, 0x8a, 0xc3, 0xc4, 0x88, 0x4a, 0xf7, 0xde, 0x3d, 0x62, 0xff, + 0xa1, 0x9e, 0x32, 0x4d, 0xd4, 0xac, 0x5f, 0x47, 0x66, 0xa5, 0x62, 0xf7, + 0x1a, 0x3d, 0x62, 0xde, 0x58, 0xac, 0x3d, 0x7e, 0xc9, 0x63, 0x88, 0x2f, + 0xfe, 0x8b, 0xf9, 0xdc, 0x3a, 0x49, 0x44, 0x35, 0x8b, 0xe1, 0x8b, 0xdc, + 0x58, 0xa5, 0x8a, 0xc3, 0x60, 0x11, 0x25, 0xff, 0xf8, 0xb2, 0x1f, 0x9d, + 0x66, 0x11, 0xba, 0xd4, 0xac, 0x5f, 0xe6, 0xfb, 0x06, 0x7c, 0xe2, 0xc5, + 0xe6, 0xd1, 0xab, 0x17, 0xa4, 0x71, 0xba, 0xc5, 0xa3, 0x25, 0x57, 0xfe, + 0xc5, 0xf8, 0xcf, 0xb9, 0x17, 0x64, 0x0f, 0x09, 0x26, 0x32, 0x27, 0xae, + 0x10, 0xf4, 0x54, 0x08, 0xd0, 0x31, 0xeb, 0xfd, 0x19, 0x9a, 0xdd, 0x9b, + 0x75, 0x49, 0xe6, 0x54, 0xc3, 0xc3, 0x32, 0x10, 0x8f, 0x1c, 0xb0, 0xfc, + 0xbe, 0x35, 0x7e, 0xeb, 0x5a, 0x5d, 0x4e, 0x59, 0x9e, 0x17, 0x9f, 0x9e, + 0xc8, 0x2b, 0xe3, 0x61, 0xe4, 0xb9, 0xee, 0x90, 0xb7, 0xbf, 0xd1, 0x99, + 0xad, 0xd9, 0xb7, 0x54, 0x92, 0xc5, 0xd1, 0xbc, 0x6a, 0x58, 0xa5, 0x8b, + 0xcd, 0xc7, 0x58, 0xb7, 0xb6, 0x35, 0x1a, 0x0c, 0xb3, 0xac, 0x5f, 0xff, + 0x42, 0x7a, 0x4c, 0x46, 0x71, 0xf4, 0x53, 0x12, 0xc5, 0xe7, 0x8c, 0xe6, + 0x1f, 0x2b, 0x88, 0xdf, 0xff, 0xbf, 0x85, 0x86, 0xfd, 0xa1, 0xf0, 0x98, + 0x33, 0xac, 0x5f, 0x8b, 0x38, 0x47, 0x58, 0xbe, 0xdd, 0x9b, 0x75, 0x49, + 0x84, 0x54, 0x11, 0x61, 0xba, 0xc6, 0x89, 0xef, 0xdf, 0x71, 0xb4, 0x16, + 0x2f, 0xbd, 0x23, 0xc5, 0x8b, 0xff, 0xec, 0x21, 0xcf, 0xe7, 0xbf, 0x61, + 0x31, 0xd6, 0x2f, 0x10, 0xb7, 0x58, 0xa9, 0x3e, 0xc6, 0x4e, 0xbf, 0xfd, + 0x83, 0x29, 0xdc, 0xcf, 0xce, 0xc4, 0x25, 0x8b, 0xfe, 0x6e, 0xf8, 0x60, + 0xe7, 0x3b, 0x58, 0xbf, 0xff, 0xbd, 0x8f, 0xae, 0x78, 0x9c, 0x1c, 0x9f, + 0x71, 0xd6, 0x2f, 0x67, 0x9d, 0x62, 0x96, 0x2d, 0x8b, 0x15, 0x28, 0x93, + 0x3a, 0xd7, 0x07, 0x23, 0x83, 0x2f, 0xe1, 0x69, 0xf6, 0x63, 0xac, 0x5a, + 0x32, 0x35, 0x2e, 0x26, 0x4a, 0x58, 0xe1, 0x1b, 0x90, 0xe4, 0xdc, 0xc5, + 0xca, 0x0f, 0x08, 0xef, 0x90, 0x01, 0x33, 0x90, 0xcf, 0x8e, 0x3f, 0xbf, + 0xd1, 0x99, 0xad, 0xd9, 0xb7, 0x54, 0x99, 0x65, 0xff, 0xba, 0xe4, 0x69, + 0x90, 0xfe, 0x3c, 0x38, 0xb1, 0x74, 0x1d, 0x62, 0xff, 0xd1, 0xbf, 0x5d, + 0xfd, 0x9f, 0xd0, 0xce, 0x2c, 0x52, 0xc5, 0x99, 0x62, 0xa4, 0xbd, 0x34, + 0x32, 0xff, 0xf7, 0xdf, 0x5f, 0xc9, 0xf1, 0x66, 0xa5, 0x62, 0xd0, 0x58, + 0xa5, 0x8b, 0x1a, 0xb1, 0x5b, 0x17, 0xec, 0x19, 0x63, 0x56, 0x2c, 0x6a, + 0xc5, 0x49, 0xa6, 0xd0, 0x9d, 0xf4, 0x61, 0xb1, 0xab, 0xac, 0x58, 0xa4, + 0x8b, 0xd1, 0x81, 0x9d, 0x62, 0xb7, 0x3e, 0x1e, 0x19, 0x88, 0x32, 0xc3, + 0x58, 0xbd, 0xa6, 0x1a, 0xc5, 0x49, 0xaf, 0xc1, 0x2a, 0x1a, 0x7b, 0xd8, + 0x40, 0x6a, 0x43, 0x98, 0x92, 0x37, 0x21, 0x03, 0xe5, 0xfb, 0xa7, 0xeb, + 0x16, 0x02, 0xc5, 0xc6, 0xec, 0xb1, 0x6d, 0x40, 0xd6, 0x60, 0x95, 0xbc, + 0xb1, 0x5b, 0x9f, 0xdb, 0x21, 0xf8, 0x9a, 0xe8, 0x41, 0x62, 0x96, 0x29, + 0x61, 0x89, 0x97, 0x40, 0xd5, 0x8b, 0xd0, 0x29, 0x58, 0xa0, 0x1e, 0x77, + 0x06, 0x7c, 0x33, 0x6f, 0xac, 0x52, 0xc5, 0x40, 0xbe, 0x34, 0x4a, 0xc0, + 0x58, 0xb1, 0xab, 0x15, 0x29, 0x82, 0xbb, 0x90, 0x13, 0x48, 0x87, 0xc2, + 0x57, 0xff, 0xe1, 0xbf, 0xbf, 0x83, 0x7c, 0x1b, 0x6c, 0xc4, 0xb1, 0x7f, + 0xf1, 0x16, 0x1b, 0x84, 0x06, 0x7d, 0x96, 0x2f, 0xf9, 0xbb, 0x2c, 0xef, + 0xd2, 0x6a, 0xc5, 0xfe, 0xdb, 0xbe, 0x48, 0xfc, 0xeb, 0x17, 0xe9, 0xce, + 0x93, 0xc5, 0x8b, 0xff, 0xbe, 0xdb, 0x73, 0x7f, 0xbf, 0x49, 0xe2, 0xc5, + 0xce, 0x12, 0xc0, 0xcf, 0x26, 0xd2, 0xc8, 0xd1, 0x08, 0xdb, 0xa9, 0xca, + 0xfe, 0x23, 0x40, 0xde, 0xe2, 0xc5, 0xda, 0x82, 0xc5, 0x49, 0xe3, 0xb1, + 0x7d, 0x4a, 0xa4, 0x2c, 0x54, 0x64, 0x32, 0x8c, 0x30, 0x4f, 0xf7, 0xff, + 0xdf, 0xc7, 0x87, 0x3f, 0x9d, 0x4f, 0xe7, 0x82, 0xc5, 0xf3, 0x42, 0x03, + 0x58, 0xbf, 0xfc, 0x46, 0xb4, 0x21, 0x3b, 0x37, 0xb3, 0x65, 0x8b, 0xfd, + 0xc1, 0xb3, 0x1b, 0x9b, 0x2c, 0x5f, 0xfb, 0x59, 0x84, 0x6f, 0x1f, 0xbf, + 0x2c, 0x54, 0x9f, 0xab, 0x9a, 0xdf, 0xfc, 0xfc, 0xe6, 0x42, 0x12, 0x18, + 0xb6, 0x58, 0xbf, 0x1b, 0x90, 0xf1, 0xab, 0x15, 0xb1, 0xf9, 0x3a, 0x3d, + 0xff, 0xff, 0xe9, 0xdf, 0xdf, 0xc3, 0x8a, 0x0c, 0x3c, 0xef, 0xdb, 0xfd, + 0xc7, 0xfc, 0x58, 0xbb, 0xde, 0x58, 0xbf, 0x8a, 0x45, 0xbf, 0xd9, 0x62, + 0xef, 0xb6, 0xc7, 0x8c, 0x31, 0x8b, 0xa4, 0xeb, 0x15, 0xa3, 0xc5, 0x22, + 0xeb, 0xf6, 0xa7, 0xcd, 0xf5, 0x8a, 0x73, 0xc9, 0x62, 0x1b, 0xc1, 0x04, + 0x12, 0x45, 0xfe, 0x87, 0x7e, 0xd4, 0xe7, 0x69, 0x11, 0x86, 0x86, 0xff, + 0x80, 0x7c, 0xef, 0x98, 0x46, 0xac, 0x5f, 0xfd, 0xe1, 0x1b, 0x9d, 0xf8, + 0x79, 0x86, 0xac, 0x54, 0xa3, 0x31, 0xd2, 0x44, 0x77, 0x7f, 0xdb, 0x64, + 0x3f, 0x8f, 0x0e, 0x2c, 0x5f, 0xe6, 0xef, 0x3c, 0xfd, 0x84, 0xb1, 0x52, + 0x7e, 0x02, 0x3a, 0xba, 0x78, 0xb1, 0x50, 0x5d, 0x1c, 0x1a, 0x96, 0x11, + 0x9b, 0x0c, 0x1d, 0x42, 0x48, 0xe4, 0x5f, 0x8d, 0x3c, 0xa3, 0x0d, 0xe4, + 0x27, 0xba, 0x10, 0xdb, 0xac, 0x58, 0xb7, 0x45, 0x8a, 0x8d, 0x46, 0xae, + 0x02, 0xf7, 0x8d, 0xec, 0xd5, 0x8b, 0xc0, 0xe0, 0x96, 0x2c, 0xd2, 0x6f, + 0xf8, 0x43, 0x69, 0x58, 0xbf, 0xf0, 0xbd, 0x09, 0x34, 0x5f, 0x93, 0xac, + 0x5f, 0xf6, 0xb4, 0x2d, 0x80, 0xde, 0xe2, 0xc5, 0x9f, 0x74, 0x47, 0x10, + 0x88, 0x68, 0x34, 0xe8, 0xe9, 0xfc, 0x2c, 0xef, 0x36, 0xb7, 0x58, 0xbd, + 0xfc, 0x3a, 0xc5, 0xa7, 0x63, 0x77, 0xe1, 0xeb, 0xfe, 0x67, 0xfe, 0x73, + 0xb7, 0xfa, 0xc5, 0xe9, 0xce, 0xf4, 0x7c, 0x04, 0x4f, 0x7f, 0x8b, 0xde, + 0x29, 0xce, 0xd6, 0x2d, 0xed, 0x1f, 0x28, 0x8c, 0xae, 0x39, 0xab, 0x17, + 0xfe, 0x86, 0x77, 0x0f, 0x14, 0x9f, 0x8b, 0x17, 0xfe, 0x83, 0x71, 0x88, + 0x5b, 0xe7, 0x12, 0x2f, 0xff, 0x67, 0xf3, 0x7f, 0xb6, 0x6e, 0x42, 0xe2, + 0xc5, 0x3a, 0x22, 0x88, 0xfe, 0xff, 0xfe, 0xfb, 0xfb, 0xf9, 0xc2, 0xc3, + 0x8b, 0x9f, 0x68, 0x2c, 0x5f, 0xe9, 0x87, 0x9b, 0xec, 0x35, 0x8b, 0xfb, + 0xd2, 0x32, 0x80, 0x96, 0x2d, 0xc5, 0x8b, 0x9b, 0xd2, 0x78, 0x06, 0x97, + 0x54, 0xa6, 0x39, 0x84, 0x3a, 0x5b, 0x67, 0x3b, 0x7d, 0x62, 0xee, 0x09, + 0x62, 0xb4, 0x6a, 0xb8, 0x25, 0x7f, 0xf6, 0x6b, 0x3d, 0xf1, 0x6f, 0x84, + 0x05, 0x8b, 0xb9, 0x2b, 0x17, 0x8a, 0x62, 0x93, 0xdc, 0x89, 0x16, 0xf6, + 0xed, 0xa5, 0x8b, 0xff, 0xff, 0xfd, 0xf1, 0x31, 0xbc, 0x16, 0xc7, 0x16, + 0x9a, 0x05, 0x9d, 0x81, 0xbd, 0xc7, 0x2e, 0xe0, 0xb1, 0x7c, 0x50, 0xc2, + 0x58, 0xbf, 0xbd, 0x27, 0x9d, 0x44, 0xb1, 0x7f, 0xec, 0x1c, 0xeb, 0x72, + 0xce, 0x98, 0xb1, 0x7e, 0x6f, 0x73, 0x0b, 0xb3, 0xef, 0xe1, 0x7d, 0xe7, + 0xf4, 0x8d, 0x36, 0x1c, 0x84, 0x99, 0x42, 0x42, 0xb1, 0x3f, 0xb7, 0x33, + 0x68, 0xdf, 0xed, 0x05, 0x8b, 0xf4, 0x27, 0x66, 0xf2, 0xc5, 0xa0, 0xb1, + 0x68, 0x2c, 0x5e, 0x08, 0x20, 0x96, 0x2d, 0xba, 0x44, 0x61, 0xa1, 0xbf, + 0x00, 0x7f, 0x6d, 0x96, 0x2a, 0x51, 0xa1, 0x01, 0x23, 0x4a, 0x5c, 0x48, + 0x06, 0x64, 0x4d, 0x6d, 0x2c, 0x59, 0x96, 0x2f, 0xd2, 0x43, 0xc3, 0x56, + 0x2c, 0x12, 0xc5, 0xff, 0xff, 0xf3, 0x16, 0xfb, 0xfd, 0xe2, 0x26, 0x08, + 0x3f, 0x61, 0xb3, 0xc1, 0xb3, 0x1a, 0xb1, 0x58, 0x8e, 0x08, 0xf1, 0x23, + 0x88, 0x91, 0x40, 0x84, 0xef, 0x17, 0x72, 0xb1, 0x69, 0x58, 0xa5, 0x8b, + 0xf0, 0xb9, 0xf6, 0x82, 0xc6, 0x13, 0x2f, 0xff, 0xb8, 0xfb, 0xe1, 0x6a, + 0x4b, 0x07, 0x86, 0xac, 0x5f, 0xfc, 0xda, 0xdb, 0x35, 0xee, 0x3f, 0x61, + 0x2c, 0x51, 0xd1, 0x9b, 0xe3, 0x60, 0x93, 0xef, 0xff, 0xb0, 0x7f, 0x67, + 0x84, 0x33, 0xcc, 0x40, 0x58, 0xbf, 0xce, 0x71, 0x73, 0xed, 0x05, 0x8d, + 0x1e, 0x75, 0xff, 0x7d, 0x8e, 0x59, 0xe9, 0x09, 0x62, 0xfb, 0x3a, 0x7d, + 0xd6, 0x29, 0xcf, 0x77, 0x87, 0x34, 0x34, 0x61, 0xfa, 0x14, 0x57, 0xa1, + 0xdc, 0xac, 0x5d, 0xf6, 0x58, 0xb7, 0x6b, 0x16, 0x35, 0x62, 0xc2, 0x58, + 0xa2, 0x34, 0xbc, 0x13, 0xa1, 0xaa, 0xe1, 0xc8, 0x75, 0x34, 0x68, 0x40, + 0x28, 0x21, 0xee, 0x0b, 0xf8, 0xe2, 0xee, 0x09, 0x62, 0xec, 0x35, 0x62, + 0xed, 0x8d, 0x58, 0xbf, 0xa4, 0xb0, 0x78, 0x6a, 0xc5, 0xff, 0xbf, 0x87, + 0xf9, 0x67, 0x46, 0xdd, 0x62, 0xff, 0xde, 0xc3, 0x67, 0x83, 0x66, 0x35, + 0x62, 0xd1, 0xf2, 0x8f, 0x81, 0x8c, 0x38, 0xc6, 0x86, 0xbc, 0x5a, 0x1a, + 0x0d, 0xdc, 0x35, 0x62, 0xd8, 0xb1, 0x60, 0x49, 0xaa, 0x18, 0xcd, 0x32, + 0x2b, 0xc5, 0x08, 0x9b, 0x4a, 0xc5, 0xfd, 0x23, 0xfc, 0xfb, 0x8b, 0x14, + 0xe6, 0xfc, 0x84, 0x6f, 0xcf, 0x08, 0x4f, 0x45, 0x8b, 0xff, 0xfa, 0x73, + 0x8e, 0x31, 0xe7, 0xa1, 0x9a, 0xdf, 0x3e, 0xb1, 0x7f, 0xff, 0xfa, 0x46, + 0xe3, 0xfc, 0xc3, 0x4c, 0xdd, 0xc3, 0x9e, 0xef, 0x77, 0xd1, 0xab, 0x15, + 0xf4, 0xc0, 0x78, 0x55, 0xe5, 0xba, 0x58, 0xb7, 0x6b, 0x03, 0x26, 0x5b, + 0x65, 0x8b, 0xf8, 0xa4, 0xe5, 0x38, 0xb1, 0x7f, 0xfd, 0x2e, 0x5e, 0xd4, + 0xc1, 0xfe, 0xfa, 0x82, 0xc5, 0xff, 0xe9, 0x87, 0x03, 0x21, 0x72, 0x70, + 0xbc, 0xb1, 0x7f, 0xf4, 0xb6, 0xbd, 0xfc, 0x18, 0xbd, 0xc5, 0x8b, 0xff, + 0xcf, 0x26, 0x9b, 0x3f, 0x97, 0x1f, 0xdd, 0x62, 0xfd, 0x9f, 0xf3, 0x9a, + 0xb1, 0x6e, 0x8b, 0x17, 0xff, 0xfb, 0x0f, 0xee, 0x67, 0x4f, 0xbe, 0xa4, + 0xb0, 0x78, 0x6a, 0xc5, 0x61, 0xfb, 0x7c, 0x52, 0xd2, 0xb1, 0x7f, 0x7d, + 0xf4, 0x3c, 0x3a, 0xc5, 0xfc, 0xde, 0x98, 0x36, 0x96, 0x2c, 0x0c, 0x3d, + 0xb2, 0x2e, 0xa8, 0x22, 0x4b, 0x4d, 0x96, 0x35, 0x62, 0xf7, 0x06, 0x6a, + 0xc5, 0x6c, 0xb9, 0xe0, 0x36, 0x6c, 0x8c, 0x83, 0xb3, 0xd8, 0xf2, 0x18, + 0x84, 0xf4, 0x56, 0x74, 0xef, 0xa5, 0x12, 0x2f, 0x12, 0xbd, 0x09, 0xf1, + 0x42, 0xcc, 0x22, 0x30, 0xc4, 0xef, 0xff, 0xb0, 0x9c, 0x61, 0x90, 0xb9, + 0x38, 0x5e, 0x58, 0xbf, 0xf0, 0x79, 0xf6, 0x1f, 0x9f, 0x8e, 0xb1, 0x7f, + 0xfb, 0x3b, 0xf0, 0x7e, 0x7f, 0x7f, 0x06, 0xeb, 0x17, 0xff, 0xff, 0x7b, + 0x8f, 0xce, 0x4f, 0xbe, 0xf3, 0xa0, 0x1d, 0xa1, 0x0f, 0x1a, 0xb1, 0x78, + 0xfc, 0x12, 0xc5, 0xff, 0xbb, 0x0c, 0x85, 0xc9, 0xc2, 0xf2, 0xc5, 0x4a, + 0x34, 0x9d, 0xd0, 0x43, 0xd7, 0x1f, 0x8b, 0x17, 0xfb, 0x52, 0x59, 0xb1, + 0xe5, 0x62, 0xa4, 0xf2, 0xf0, 0x62, 0xfe, 0xe9, 0xf7, 0x1e, 0x1a, 0xb1, + 0x7f, 0xd0, 0xd4, 0xe1, 0x67, 0x7e, 0x58, 0xac, 0x3e, 0xa6, 0x31, 0xa8, + 0x2a, 0xce, 0xc4, 0xe3, 0x4f, 0xff, 0x18, 0xf1, 0x3c, 0xf2, 0x11, 0x57, + 0xff, 0x68, 0xd8, 0x39, 0xf0, 0x7f, 0x90, 0x2c, 0x5c, 0xfd, 0xac, 0x5f, + 0x7c, 0x9e, 0x56, 0x2e, 0x87, 0xd6, 0x29, 0x8d, 0xc8, 0x08, 0x6e, 0x93, + 0xac, 0x5f, 0xff, 0x10, 0xa1, 0x09, 0xf7, 0xf0, 0xe1, 0xc8, 0x16, 0x2f, + 0xf6, 0x11, 0x0a, 0x1c, 0x12, 0xc5, 0x4a, 0x21, 0x3e, 0xa3, 0x7d, 0xbc, + 0xe1, 0x2c, 0x5f, 0xbd, 0xf7, 0xd4, 0x16, 0x2f, 0xe9, 0x2d, 0x9f, 0x5f, + 0x93, 0xcb, 0x62, 0x2b, 0xfc, 0x6c, 0xf0, 0x6c, 0xc6, 0xac, 0x5f, 0xcf, + 0x3e, 0xe0, 0xb8, 0xb1, 0x61, 0xac, 0x52, 0xc5, 0x39, 0x7c, 0x21, 0x2b, + 0xcf, 0xb4, 0xfc, 0xfa, 0xf8, 0x99, 0x7d, 0x9e, 0xfb, 0xac, 0x5f, 0xfa, + 0x19, 0xcd, 0x4b, 0xc1, 0xb8, 0x91, 0x5b, 0x9f, 0x00, 0x88, 0xaf, 0xff, + 0xf1, 0x67, 0x41, 0xcf, 0xdf, 0xf8, 0x43, 0xd3, 0xf7, 0x05, 0x8a, 0xd2, + 0x63, 0x05, 0x09, 0x3e, 0x11, 0xd6, 0x27, 0xda, 0xf1, 0xdc, 0x54, 0x15, + 0x62, 0x13, 0x6f, 0xa5, 0x17, 0xdd, 0xbc, 0x64, 0x6e, 0xea, 0x7b, 0x23, + 0x44, 0xa8, 0xd4, 0x2f, 0x32, 0x91, 0xb6, 0x87, 0x1c, 0x23, 0x34, 0x1c, + 0xa8, 0xac, 0x9d, 0x6a, 0x36, 0x1a, 0xbb, 0xc6, 0x9f, 0xdc, 0x64, 0xee, + 0x51, 0x10, 0xce, 0xa3, 0xe6, 0x3b, 0x2f, 0xe5, 0x3c, 0x34, 0x60, 0x80, + 0x8c, 0xd7, 0xaf, 0x4b, 0x29, 0x5f, 0xdc, 0x9f, 0x05, 0xf4, 0xbb, 0x31, + 0x31, 0xf4, 0x46, 0x09, 0x46, 0x38, 0x80, 0x39, 0x6b, 0xf7, 0xff, 0xa3, + 0x0e, 0xd0, 0x8c, 0xcd, 0x6e, 0xcd, 0xba, 0xa4, 0x8c, 0x2f, 0xef, 0xb7, + 0x59, 0xf6, 0xeb, 0x16, 0x2f, 0xe1, 0xe1, 0xf6, 0x17, 0x16, 0x2f, 0x79, + 0xa3, 0x96, 0x2f, 0x9a, 0x26, 0xe2, 0xc5, 0x39, 0xe1, 0xe8, 0x82, 0xfe, + 0x6d, 0x00, 0xf2, 0x05, 0x8b, 0xe9, 0xd4, 0x81, 0x62, 0xfc, 0x39, 0x3c, + 0x86, 0xb1, 0x7a, 0x5f, 0xcb, 0x15, 0x27, 0x8b, 0xf2, 0x9a, 0x74, 0xd2, + 0xa2, 0x73, 0xf9, 0x0f, 0x42, 0xe0, 0xd9, 0xef, 0xb0, 0x2d, 0xf1, 0x62, + 0xff, 0xf3, 0x7d, 0xb3, 0xed, 0xf6, 0xcf, 0xb2, 0xc5, 0xfe, 0x68, 0x71, + 0xcb, 0x00, 0xb1, 0x7e, 0x6f, 0x7d, 0xe2, 0x58, 0xbd, 0x39, 0xf5, 0x8a, + 0xfa, 0x2f, 0x80, 0x8e, 0x46, 0x5d, 0x0a, 0x6f, 0xb3, 0x09, 0xd6, 0x2f, + 0xfe, 0xd6, 0x0f, 0x53, 0xe7, 0xdd, 0xc6, 0xb1, 0x7d, 0x3b, 0x60, 0xd6, + 0x2e, 0x0a, 0x25, 0x8a, 0xf9, 0xbd, 0x62, 0x3b, 0xe0, 0x1e, 0x7b, 0x58, + 0xbf, 0xfe, 0xd3, 0x9b, 0x9e, 0x17, 0xdc, 0xf9, 0xf6, 0x58, 0xbd, 0xd2, + 0x60, 0xb1, 0x78, 0x12, 0x1a, 0xc5, 0x8b, 0x0d, 0xeb, 0x0f, 0xdf, 0xc2, + 0xef, 0x9f, 0xce, 0x2c, 0x5c, 0xd1, 0xeb, 0x14, 0x33, 0xca, 0x39, 0x85, + 0xfe, 0xcf, 0x70, 0x3d, 0xa7, 0x65, 0x8b, 0xfd, 0x99, 0x10, 0x4d, 0xdf, + 0x16, 0x2f, 0xee, 0x67, 0xf2, 0x1c, 0x58, 0xb6, 0x00, 0xf9, 0x3c, 0x6d, + 0x7f, 0x8b, 0x39, 0xee, 0x66, 0xcb, 0x17, 0xf4, 0xee, 0x42, 0x60, 0xd6, + 0x29, 0xcf, 0x8c, 0xe6, 0x97, 0xfd, 0x23, 0x0b, 0x08, 0x7f, 0x95, 0x8a, + 0xc3, 0xda, 0x08, 0x86, 0xff, 0xcf, 0xdc, 0x38, 0x59, 0xef, 0x89, 0x62, + 0xff, 0x9f, 0x5f, 0xcc, 0x28, 0x71, 0x62, 0xa0, 0x7f, 0x1b, 0xa0, 0x5f, + 0x37, 0x4c, 0x25, 0x8b, 0xff, 0xfe, 0xc3, 0xfd, 0xe7, 0xc5, 0x9e, 0xfe, + 0x16, 0x04, 0xc0, 0x58, 0xbe, 0xce, 0x07, 0xc5, 0x8b, 0xff, 0xcd, 0x11, + 0x30, 0x5a, 0x97, 0x83, 0x71, 0x62, 0xbb, 0x4c, 0x63, 0x44, 0x7f, 0x23, + 0x26, 0x41, 0x12, 0x5b, 0xa9, 0x62, 0xfe, 0x90, 0x7e, 0x43, 0xfa, 0xc5, + 0x47, 0x9e, 0x27, 0x05, 0x6f, 0xf6, 0xff, 0x73, 0xce, 0x8d, 0x58, 0xbf, + 0x1b, 0x98, 0x46, 0xac, 0x59, 0xa0, 0x7b, 0xfa, 0x36, 0xb8, 0x1d, 0x62, + 0xc5, 0xfd, 0xb0, 0x71, 0xcc, 0x40, 0x58, 0xbf, 0x8c, 0xcd, 0x37, 0xb8, + 0xb1, 0x7f, 0xe6, 0x20, 0x67, 0xa4, 0x9c, 0x0b, 0x15, 0x28, 0x9e, 0x39, + 0x9c, 0x71, 0x7d, 0xb7, 0x58, 0xb8, 0x47, 0x58, 0xa1, 0x9a, 0xb2, 0x13, + 0xb4, 0x67, 0x58, 0xca, 0x96, 0x98, 0xe0, 0xb6, 0x4e, 0xc8, 0x71, 0x1a, + 0x7c, 0xe4, 0x11, 0x42, 0x0b, 0x44, 0x07, 0x24, 0xfc, 0x23, 0x59, 0xb8, + 0x04, 0x45, 0x09, 0xbe, 0x43, 0x93, 0xd1, 0xd9, 0x0a, 0x11, 0xe1, 0x42, + 0x12, 0x38, 0x9c, 0x38, 0x5d, 0xf5, 0x2e, 0xd4, 0x1d, 0xee, 0x8e, 0xa7, + 0x24, 0x4f, 0x0b, 0xf6, 0xb5, 0x46, 0x3c, 0x94, 0x05, 0xea, 0x57, 0xad, + 0xff, 0xd1, 0x8d, 0x08, 0xcc, 0xd6, 0xec, 0xdb, 0xaa, 0x43, 0x92, 0xff, + 0xf4, 0x61, 0xda, 0x11, 0x99, 0xad, 0xd9, 0xb7, 0x54, 0x8e, 0x45, 0xfe, + 0x8c, 0xcd, 0x6e, 0xcd, 0xba, 0xa4, 0xcc, 0x2f, 0xff, 0x0d, 0x8e, 0x66, + 0x77, 0x0c, 0x06, 0x0d, 0x62, 0xef, 0x01, 0x62, 0xfd, 0x9f, 0x2c, 0xd2, + 0xc5, 0xed, 0xa7, 0x4b, 0x17, 0xdc, 0x63, 0xc6, 0x62, 0x2a, 0x7e, 0x98, + 0x43, 0x1c, 0x27, 0xba, 0x33, 0x8b, 0x15, 0x03, 0xf0, 0xed, 0x56, 0xfa, + 0x35, 0xf5, 0x9d, 0x64, 0x6b, 0x58, 0xbf, 0xc3, 0xc3, 0xcf, 0x72, 0x75, + 0x8a, 0xeb, 0x0f, 0xba, 0x35, 0x9d, 0x5b, 0xa2, 0xc5, 0xfd, 0x1a, 0x46, + 0x9b, 0xfe, 0x7b, 0x58, 0xbb, 0xae, 0xe3, 0x96, 0x2f, 0x75, 0xdc, 0x74, + 0x6e, 0xb1, 0x51, 0xb9, 0xe7, 0xc6, 0x84, 0x57, 0xff, 0x6b, 0x4c, 0x51, + 0x41, 0xc8, 0xc8, 0xf5, 0x8b, 0xfd, 0xa9, 0xf7, 0xdb, 0xb8, 0x2c, 0x5f, + 0xff, 0xff, 0x4c, 0x5f, 0x9f, 0x48, 0x6f, 0xa8, 0xa7, 0xf9, 0xd3, 0x3f, + 0x83, 0xe9, 0x8b, 0x14, 0x62, 0x60, 0x00, 0x49, 0x23, 0x5b, 0xfe, 0xce, + 0x37, 0x80, 0x19, 0x41, 0x62, 0xc0, 0x58, 0xbf, 0xb9, 0xad, 0x67, 0x7c, + 0x58, 0xba, 0x60, 0xb1, 0x5d, 0x61, 0xec, 0xe0, 0x96, 0x8c, 0x2e, 0x8a, + 0x39, 0x62, 0xfd, 0xc9, 0x00, 0x7b, 0x2c, 0x5e, 0xd6, 0x1d, 0x62, 0xf9, + 0xcb, 0x38, 0xb1, 0x5c, 0x3e, 0x9f, 0x15, 0xf5, 0x0e, 0xd4, 0x11, 0x6f, + 0x90, 0x85, 0xa5, 0x8a, 0x58, 0xa5, 0x8b, 0xff, 0x6b, 0x4c, 0x51, 0x41, + 0xc8, 0xcd, 0x8d, 0x20, 0xc3, 0x3e, 0x19, 0x7f, 0xff, 0xef, 0xc9, 0x0b, + 0x9c, 0x90, 0xfc, 0xe4, 0x28, 0x67, 0x3c, 0xeb, 0x17, 0xe2, 0xce, 0x98, + 0x4b, 0x17, 0xde, 0xf3, 0xe9, 0x62, 0xed, 0xe5, 0x62, 0xc0, 0x58, 0xa9, + 0x35, 0x5c, 0x18, 0xa3, 0x13, 0x64, 0x83, 0x1b, 0xb6, 0x68, 0xa3, 0xc9, + 0xb6, 0xf2, 0xc5, 0xba, 0x96, 0x2a, 0x38, 0xd3, 0x86, 0x25, 0x4b, 0x14, + 0xb1, 0x7f, 0xed, 0x69, 0x8a, 0x28, 0x39, 0x18, 0x69, 0x71, 0x10, 0x65, + 0xdf, 0x89, 0x62, 0xe2, 0xdd, 0x62, 0x8c, 0x44, 0x3c, 0x15, 0x98, 0x66, + 0xf7, 0x27, 0x8b, 0x17, 0xff, 0x6b, 0x4c, 0x51, 0x41, 0xc8, 0xcd, 0x2c, + 0x5f, 0xdc, 0x09, 0x89, 0xb6, 0x58, 0xbf, 0x36, 0xb1, 0x8e, 0xb1, 0x70, + 0xe3, 0xd6, 0x28, 0xc4, 0x5b, 0xc4, 0x8d, 0xa2, 0xf6, 0x27, 0xba, 0x3b, + 0x8b, 0x17, 0xec, 0x38, 0x7d, 0xf1, 0x62, 0xe2, 0x02, 0xc5, 0xf9, 0x82, + 0xdb, 0x02, 0x58, 0xad, 0x91, 0x11, 0x01, 0xb6, 0x2b, 0x21, 0x7b, 0x7d, + 0x62, 0xf8, 0xdf, 0xbf, 0x16, 0x2f, 0xe6, 0x0e, 0x39, 0x88, 0x0b, 0x15, + 0x1b, 0x1f, 0x38, 0x84, 0x82, 0x24, 0xb3, 0xac, 0x5f, 0xe9, 0xe4, 0xfb, + 0x6c, 0x09, 0x62, 0xce, 0x73, 0xc6, 0x21, 0x1a, 0x58, 0xa5, 0x8a, 0x58, + 0xbf, 0xf6, 0xb4, 0xc5, 0x14, 0x1c, 0x8c, 0x93, 0x49, 0xd8, 0x63, 0x86, + 0x5a, 0x0b, 0x17, 0x98, 0x80, 0xb1, 0x5b, 0x9a, 0xed, 0x09, 0x5f, 0xbd, + 0xc2, 0x98, 0x2c, 0x5f, 0x05, 0xe9, 0x35, 0x62, 0x8c, 0x47, 0xf4, 0xc2, + 0x3f, 0x08, 0x9c, 0xa2, 0x96, 0x29, 0x62, 0xff, 0xda, 0xd3, 0x14, 0x50, + 0x72, 0x33, 0x72, 0xe0, 0x01, 0x97, 0xd8, 0x36, 0x82, 0xc5, 0xf8, 0x19, + 0xc0, 0xfe, 0xb1, 0x77, 0xb6, 0x58, 0xbb, 0xa4, 0xac, 0x5f, 0xf0, 0xff, + 0x3c, 0xe6, 0x6a, 0x56, 0x2e, 0xe9, 0x2b, 0x17, 0x74, 0x95, 0x8a, 0x31, + 0x33, 0xe8, 0x2a, 0xf6, 0x44, 0xe5, 0x47, 0x19, 0x21, 0x9e, 0x1c, 0xc7, + 0x0c, 0xdf, 0xfd, 0xad, 0x31, 0x45, 0x07, 0x23, 0x38, 0xb1, 0x74, 0x89, + 0x62, 0xfc, 0x43, 0xce, 0xfc, 0xb1, 0x6f, 0xac, 0x51, 0x88, 0x98, 0x1a, + 0x33, 0x0b, 0x88, 0xa6, 0xe0, 0x32, 0xc5, 0xff, 0xda, 0xd3, 0x14, 0x50, + 0x72, 0x33, 0x16, 0x2e, 0xc2, 0x58, 0xb8, 0x02, 0x58, 0xa9, 0x35, 0xda, + 0x16, 0xbe, 0x68, 0x7f, 0x16, 0x2f, 0xdc, 0xfc, 0x97, 0x96, 0x2f, 0x7b, + 0x25, 0x62, 0x86, 0x7c, 0xc6, 0x91, 0x76, 0x51, 0x76, 0xf2, 0xb1, 0x46, + 0x26, 0x84, 0x37, 0x3c, 0x84, 0x36, 0xe6, 0x36, 0x0d, 0x62, 0xfb, 0x51, + 0x3f, 0xd6, 0x2f, 0xff, 0x6f, 0x3c, 0xe6, 0x1f, 0xbf, 0x08, 0xbc, 0xb1, + 0x7b, 0xd8, 0x75, 0x8b, 0xf8, 0x18, 0x53, 0xdf, 0x16, 0x2f, 0x7d, 0xfb, + 0x58, 0xa9, 0x3c, 0xcf, 0x17, 0x5e, 0x06, 0x71, 0x62, 0xfb, 0x08, 0x52, + 0xb1, 0x46, 0x26, 0x99, 0x22, 0x78, 0x48, 0xe9, 0xbc, 0x69, 0xf1, 0x08, + 0x87, 0x6f, 0x72, 0x4e, 0xb1, 0x7d, 0x3f, 0xc1, 0xac, 0x5f, 0xee, 0x37, + 0x80, 0x19, 0x41, 0x62, 0xfb, 0xd1, 0xcc, 0x6a, 0xc5, 0x6c, 0x7f, 0xdd, + 0x91, 0x11, 0xad, 0x44, 0x8c, 0xb6, 0x84, 0xdd, 0x2c, 0x52, 0xc5, 0xff, + 0xb5, 0xa6, 0x28, 0xa0, 0xe4, 0x67, 0x5e, 0x5c, 0x10, 0x65, 0xfb, 0x7f, + 0xb3, 0xf5, 0xeb, 0x17, 0xe1, 0x72, 0x79, 0x2b, 0x14, 0x62, 0x2b, 0xb4, + 0xb0, 0xc5, 0xd4, 0xb1, 0x4b, 0x17, 0xfe, 0xd6, 0x98, 0xa2, 0x83, 0x91, + 0x90, 0x2e, 0x0e, 0x19, 0x7f, 0x10, 0x3f, 0x80, 0x65, 0x8b, 0xe2, 0x9e, + 0x82, 0x58, 0xbd, 0xf9, 0xed, 0x62, 0x8c, 0x46, 0x1b, 0xaa, 0x31, 0x6c, + 0x71, 0x25, 0x8e, 0xb1, 0x71, 0xb1, 0xcb, 0x15, 0xd9, 0xae, 0x71, 0x2b, + 0xff, 0xb5, 0xa6, 0x28, 0xa0, 0xe4, 0x63, 0x2c, 0x5f, 0xc3, 0x32, 0x37, + 0x2c, 0xea, 0x58, 0xba, 0x49, 0x62, 0xf6, 0xd1, 0x4a, 0xc5, 0x2c, 0x5f, + 0xf1, 0x03, 0x3d, 0x24, 0xe0, 0x58, 0xac, 0x3c, 0x36, 0x0c, 0xa3, 0x13, + 0x14, 0x94, 0x5f, 0x9b, 0xb0, 0xb4, 0x73, 0x15, 0xe2, 0x14, 0x4b, 0x16, + 0x8c, 0xeb, 0x1b, 0x5b, 0x7e, 0xb4, 0xb6, 0x34, 0x14, 0x8d, 0x70, 0x8a, + 0x98, 0xcb, 0x36, 0x31, 0x84, 0x24, 0xc7, 0x0e, 0xac, 0x8e, 0xbc, 0xd7, + 0x2d, 0xe1, 0x89, 0xd9, 0x83, 0xc3, 0x52, 0x28, 0x63, 0x6a, 0x14, 0x67, + 0x7b, 0xfc, 0x69, 0x0d, 0x1c, 0xb0, 0x23, 0x0d, 0xeb, 0xcf, 0x4a, 0x35, + 0x9e, 0x47, 0x21, 0xe8, 0xcb, 0x85, 0x0e, 0xee, 0x91, 0x85, 0xc7, 0x36, + 0x87, 0x19, 0xaf, 0x52, 0x6d, 0xfb, 0x5b, 0xb3, 0x6e, 0xa9, 0x37, 0x4b, 0x88, 0x4b, 0x16, 0xe2, 0xc5, 0x61, 0xf0, 0x68, 0xdc, 0x02, 0xf7, 0xfa, - 0x75, 0x2e, 0x3c, 0x3a, 0xc5, 0xef, 0xce, 0x96, 0x2f, 0xd1, 0x17, 0x59, + 0x75, 0x2e, 0x3c, 0x3a, 0xc5, 0xef, 0xce, 0x96, 0x2f, 0xd1, 0x17, 0x79, 0xba, 0xc5, 0xff, 0x84, 0x32, 0x63, 0x70, 0x6d, 0x05, 0x8b, 0x46, 0x6c, 0x8b, 0x91, 0x99, 0x60, 0xef, 0x0a, 0xea, 0x31, 0x32, 0xdf, 0xc3, 0x9e, - 0xfc, 0xe0, 0xe6, 0x77, 0x2c, 0x5f, 0xe7, 0xd8, 0xb0, 0x02, 0xe2, 0xc5, + 0xfc, 0xe0, 0xe6, 0x75, 0x2c, 0x5f, 0xe7, 0xd8, 0xb0, 0x02, 0xe2, 0xc5, 0xf9, 0xf4, 0x1c, 0x5c, 0x58, 0xa8, 0x8f, 0x7f, 0xe6, 0x97, 0xf1, 0x34, - 0x66, 0xb6, 0xfa, 0xc5, 0xd9, 0xba, 0xc5, 0xa5, 0x62, 0xb0, 0xd4, 0x84, - 0x31, 0x79, 0xfa, 0x02, 0xc5, 0xfb, 0xa8, 0x7d, 0xc0, 0xb1, 0x7f, 0xf6, - 0x9b, 0x70, 0x0b, 0x9e, 0x9e, 0x82, 0x58, 0xb8, 0x8d, 0x58, 0xb3, 0x2c, - 0x5f, 0x6e, 0xcd, 0xba, 0xa4, 0x90, 0x2b, 0x0f, 0x6a, 0x21, 0x8d, 0x08, - 0xdf, 0xe8, 0x79, 0xc2, 0xe0, 0x1d, 0x62, 0xfe, 0x8f, 0xdf, 0xf2, 0xfa, - 0x58, 0xbd, 0x99, 0xba, 0xc5, 0xcf, 0xf5, 0x8b, 0xff, 0x9f, 0x8f, 0xdb, - 0xec, 0x7d, 0x4f, 0x16, 0x2b, 0x0f, 0x75, 0x85, 0xef, 0xfc, 0xd1, 0xd2, - 0x5b, 0xe7, 0xbe, 0xeb, 0x17, 0xfe, 0xcf, 0xbf, 0x6f, 0xe6, 0x16, 0xeb, - 0x17, 0xf6, 0x7f, 0x3e, 0xe6, 0xac, 0x5f, 0xbd, 0x3d, 0x9f, 0xb2, 0xc5, - 0xe6, 0x84, 0x64, 0xaa, 0xd8, 0x19, 0x56, 0x42, 0x8f, 0xa2, 0xf7, 0x35, - 0x88, 0xcb, 0xef, 0x44, 0x41, 0xc4, 0x1f, 0x20, 0x76, 0x2e, 0xbd, 0xcf, - 0x89, 0x62, 0xe9, 0x0d, 0x62, 0xb0, 0xdb, 0x04, 0x3d, 0x7f, 0x49, 0x73, - 0x8e, 0x75, 0x8a, 0xc3, 0xce, 0x72, 0x1b, 0xfc, 0xe3, 0x17, 0xb8, 0x72, - 0x58, 0xbe, 0x08, 0xf3, 0xc5, 0x8b, 0xff, 0xf0, 0xde, 0x30, 0x5e, 0xdf, - 0xf9, 0xef, 0xe7, 0x5c, 0x58, 0xbc, 0xc5, 0x05, 0x8b, 0xf8, 0x5a, 0x37, - 0xed, 0x05, 0x8b, 0xf7, 0x8a, 0x73, 0xa5, 0x8b, 0x46, 0x4a, 0xf4, 0xf6, - 0x42, 0x2b, 0x72, 0x38, 0x96, 0xf4, 0x42, 0x79, 0x5e, 0xdf, 0x8c, 0xdd, - 0x88, 0x04, 0x69, 0xd8, 0x90, 0x25, 0xc8, 0xe1, 0xc0, 0xcc, 0x2f, 0xfe, - 0x8c, 0x68, 0x46, 0x66, 0xb7, 0x66, 0xdd, 0x52, 0x29, 0x15, 0xb3, 0xa2, - 0x7b, 0x89, 0x64, 0xeb, 0xed, 0x1a, 0xf0, 0x2b, 0x4d, 0x62, 0x97, 0x2d, - 0xe9, 0xec, 0xae, 0xe8, 0x6b, 0x5e, 0x66, 0xdd, 0x62, 0xe0, 0x4a, 0xc5, - 0xb5, 0xb9, 0xb4, 0x00, 0xed, 0xfe, 0x66, 0xdb, 0x21, 0x26, 0xac, 0x52, - 0xc5, 0xee, 0xa4, 0x35, 0x8a, 0xdc, 0xd5, 0xb0, 0x65, 0xfd, 0x9e, 0xf3, - 0x85, 0xe5, 0x8b, 0x9b, 0x75, 0x8b, 0x46, 0x62, 0x3b, 0xe2, 0x28, 0x65, - 0xf2, 0x21, 0xec, 0x5f, 0x7f, 0x39, 0x67, 0xf3, 0x75, 0x8b, 0xf9, 0xcb, - 0xd8, 0xe3, 0x58, 0xba, 0x1e, 0x58, 0xbc, 0x52, 0x12, 0xc5, 0xd3, 0x19, - 0xa3, 0x6a, 0x43, 0x15, 0x04, 0x47, 0xf9, 0x86, 0xf7, 0x04, 0x75, 0x8b, - 0x41, 0x62, 0xe3, 0xf9, 0x62, 0xee, 0x32, 0xc5, 0xfb, 0x35, 0xe7, 0xc5, - 0x8b, 0xbd, 0x8b, 0x16, 0x8d, 0xd6, 0x2d, 0x19, 0x04, 0xe4, 0xfa, 0x85, - 0xe3, 0x91, 0xc4, 0x3c, 0x71, 0x20, 0x0c, 0x10, 0xbf, 0x62, 0x78, 0xe1, - 0x7b, 0xf7, 0x23, 0x03, 0x1f, 0xd6, 0x2f, 0xe2, 0xf4, 0x76, 0x4e, 0x96, - 0x2f, 0xff, 0x6a, 0x61, 0x1d, 0x9e, 0xe3, 0xfb, 0x68, 0x2c, 0x5f, 0xef, - 0x72, 0x62, 0x66, 0xd2, 0xc5, 0x4a, 0x20, 0xdd, 0x3e, 0xff, 0xfb, 0x3c, - 0xff, 0x17, 0xd9, 0xfa, 0xe4, 0x9a, 0xb1, 0x78, 0x9a, 0x0b, 0x17, 0x76, - 0x75, 0x8b, 0xfe, 0x97, 0xf7, 0xe7, 0xf2, 0x75, 0x8b, 0xf4, 0x6d, 0xde, - 0xeb, 0x9c, 0x58, 0xbf, 0xfd, 0xc6, 0x83, 0x9a, 0xf0, 0xc0, 0x73, 0x16, - 0x2f, 0xfe, 0xe8, 0x1a, 0xc1, 0xce, 0x9f, 0xa0, 0x2c, 0x5f, 0xd9, 0xf7, - 0x29, 0x3a, 0xc5, 0x2c, 0x5f, 0x9e, 0x3b, 0x35, 0x2b, 0x17, 0x61, 0xe4, - 0xdb, 0x70, 0x32, 0xb6, 0x4c, 0x79, 0xd2, 0xb4, 0x8f, 0xdc, 0xc5, 0x7f, - 0xe1, 0x6a, 0x19, 0x07, 0x34, 0xd6, 0x58, 0xbf, 0x6b, 0x76, 0x6d, 0xd5, - 0x23, 0xb1, 0x7f, 0xfb, 0x69, 0xdf, 0x93, 0xec, 0xd6, 0xa7, 0x75, 0x8b, - 0xf6, 0x40, 0xa7, 0x65, 0x8b, 0xe0, 0x34, 0x71, 0xab, 0x17, 0xfd, 0xdd, - 0x27, 0x98, 0xc0, 0x82, 0x09, 0x62, 0xb0, 0xfa, 0x98, 0x9e, 0xfc, 0xda, - 0xdf, 0x58, 0xb1, 0x7f, 0xf7, 0xc4, 0x71, 0x7b, 0x3b, 0x60, 0x8e, 0xb1, - 0x7f, 0x9f, 0x9c, 0x7f, 0xcf, 0x16, 0x2b, 0x64, 0x52, 0x0c, 0xa4, 0xe9, - 0x17, 0xbe, 0xc1, 0x2c, 0x5f, 0xf1, 0x34, 0x04, 0x03, 0xb4, 0x16, 0x2d, - 0x83, 0x3d, 0x7f, 0x8f, 0x5f, 0xff, 0xfd, 0xc9, 0x2d, 0xe7, 0xb3, 0x7c, - 0x72, 0x37, 0x83, 0xeb, 0x61, 0x01, 0x62, 0xff, 0x8d, 0x7f, 0x71, 0xf7, - 0x6d, 0x2c, 0x5e, 0x68, 0x46, 0x77, 0xd5, 0x74, 0x36, 0x63, 0x52, 0xd9, - 0x07, 0x10, 0x5c, 0xdf, 0x49, 0xbf, 0x84, 0x93, 0x43, 0x10, 0xa1, 0x11, - 0xc2, 0x70, 0xdd, 0x6d, 0x1e, 0xb1, 0x7f, 0xff, 0x61, 0x13, 0x7b, 0xf9, - 0xc6, 0xcd, 0x00, 0xf8, 0xb1, 0x5b, 0x1f, 0x6b, 0x0a, 0xdf, 0xcf, 0xd8, - 0xb3, 0x8e, 0xb1, 0x7f, 0xf8, 0x47, 0x9e, 0xe6, 0x19, 0x49, 0x66, 0xeb, - 0x15, 0x03, 0xfa, 0x19, 0x75, 0xe2, 0x98, 0x2c, 0x53, 0x9b, 0xed, 0x11, - 0x5e, 0x7d, 0x41, 0x62, 0xff, 0x42, 0x75, 0xb4, 0xeb, 0x65, 0x8b, 0xff, - 0x7c, 0x9a, 0x02, 0x01, 0xda, 0x0b, 0x15, 0x27, 0xeb, 0x86, 0xd7, 0x04, - 0xeb, 0x17, 0xf9, 0xb6, 0x6c, 0xf6, 0x1d, 0x62, 0xfe, 0xd0, 0x30, 0x9b, - 0xeb, 0x17, 0xff, 0xec, 0xea, 0x1f, 0x9e, 0x36, 0xa7, 0xbb, 0xed, 0xba, - 0xc5, 0xa3, 0x25, 0x94, 0xa7, 0x08, 0x59, 0x8c, 0x87, 0x14, 0x5c, 0x73, - 0x43, 0x27, 0x9d, 0x45, 0xfc, 0x66, 0xcd, 0x0d, 0xa0, 0x10, 0x14, 0x24, - 0x82, 0x20, 0x8e, 0x18, 0x0c, 0xcf, 0xb8, 0xb6, 0xe0, 0x47, 0x2c, 0x5f, - 0x48, 0xe4, 0x96, 0x2f, 0x9f, 0x53, 0xd9, 0x62, 0xec, 0xfa, 0xc5, 0xff, - 0xd1, 0xcc, 0x40, 0xcf, 0x49, 0x38, 0x16, 0x2d, 0x19, 0x1e, 0x8b, 0xc2, - 0x1b, 0xe1, 0x0c, 0x71, 0x20, 0x62, 0xf7, 0xff, 0x31, 0xff, 0x9b, 0xb7, - 0xe4, 0x38, 0x2c, 0x5f, 0xbd, 0xac, 0x90, 0x96, 0x2f, 0x38, 0xd9, 0x62, - 0xff, 0xf7, 0xc9, 0x80, 0xfe, 0x93, 0xe9, 0xcd, 0x58, 0xbf, 0xf8, 0xb3, - 0xed, 0xb6, 0x70, 0x9b, 0xa5, 0x8b, 0xa3, 0xa3, 0x06, 0x98, 0xcb, 0xa3, - 0x7c, 0xa5, 0x87, 0x38, 0x95, 0x52, 0xd8, 0x3d, 0xc2, 0x3e, 0x6c, 0x84, - 0x91, 0xe9, 0x50, 0x3c, 0x8e, 0xd6, 0x3a, 0x37, 0x2b, 0xff, 0xb4, 0xdd, - 0x46, 0x0f, 0x22, 0x66, 0xd9, 0x62, 0xff, 0xd1, 0xaa, 0x35, 0xf7, 0x9a, - 0xd6, 0x04, 0x4c, 0xb1, 0x7f, 0x41, 0xb5, 0xb7, 0xc4, 0xb1, 0x7e, 0xe4, - 0x80, 0x3d, 0x96, 0x2d, 0x91, 0x1e, 0xdf, 0x0c, 0x2f, 0xfc, 0xfa, 0xfb, - 0x73, 0xf2, 0xda, 0x58, 0xbf, 0xe9, 0x2e, 0x81, 0xce, 0x48, 0x16, 0x2f, - 0xb5, 0x81, 0x79, 0x62, 0xbe, 0x89, 0xce, 0x1f, 0x76, 0x3a, 0xbf, 0xda, - 0xce, 0x10, 0x98, 0x35, 0x8b, 0xff, 0xff, 0xfe, 0xfb, 0xf9, 0x9b, 0xae, - 0x73, 0x92, 0x79, 0xfe, 0x66, 0xd8, 0x59, 0xd7, 0xb9, 0x3d, 0x2c, 0x5f, - 0xe8, 0x37, 0xa2, 0x83, 0xf9, 0x62, 0xff, 0x4c, 0x1f, 0xce, 0x50, 0x58, - 0xbf, 0xfc, 0x3f, 0xcc, 0x36, 0xc0, 0xbd, 0x3d, 0x04, 0xb1, 0x7f, 0xff, - 0xed, 0xc5, 0xb6, 0x76, 0x9e, 0xb0, 0x6d, 0x00, 0xcf, 0xcc, 0x61, 0xac, - 0x5f, 0xd3, 0xa0, 0x6f, 0xbe, 0x2c, 0x5f, 0x9c, 0x3d, 0x84, 0x4b, 0x15, - 0xf3, 0xda, 0xe1, 0x85, 0xff, 0xbc, 0xf0, 0x7f, 0x88, 0xe7, 0x75, 0x8b, - 0xbd, 0x19, 0x1b, 0x2e, 0x27, 0x0e, 0x15, 0x99, 0x0c, 0x43, 0x4c, 0xb7, - 0x34, 0x8a, 0x12, 0xba, 0x35, 0x63, 0x2e, 0x27, 0xfa, 0x19, 0x81, 0x91, - 0x58, 0x6e, 0xba, 0xba, 0xd3, 0x93, 0x17, 0xfe, 0xeb, 0x8e, 0x73, 0x03, - 0xd6, 0x6c, 0xb1, 0x78, 0xb3, 0xcb, 0x15, 0x11, 0xf0, 0x12, 0x25, 0xfd, - 0x9a, 0x7f, 0x7e, 0x56, 0x2f, 0xe7, 0x20, 0x0f, 0x09, 0x62, 0xfb, 0x76, - 0x6d, 0xd5, 0x21, 0x61, 0x7f, 0x3e, 0x98, 0xb7, 0x95, 0x8b, 0xe7, 0x22, - 0x95, 0x8a, 0x82, 0x2a, 0xb4, 0x59, 0xf3, 0x1e, 0xc5, 0xb7, 0xe8, 0x85, - 0xb7, 0x74, 0xac, 0x5f, 0x67, 0x80, 0xeb, 0x17, 0xfe, 0x68, 0x46, 0x66, - 0xb7, 0x66, 0xdd, 0x52, 0x2e, 0x97, 0xf9, 0x87, 0x25, 0xf9, 0xe2, 0xc5, - 0xd3, 0x1e, 0xb1, 0x73, 0x1a, 0xb1, 0x50, 0x36, 0x5e, 0x1a, 0xbf, 0x3c, - 0x83, 0x09, 0x62, 0xf7, 0xf7, 0x75, 0x8b, 0xf3, 0x73, 0xcf, 0xd9, 0x62, - 0xf3, 0x8b, 0x65, 0x8a, 0x93, 0xe6, 0x34, 0x7b, 0x45, 0x57, 0xff, 0xf6, - 0x0f, 0xf2, 0x1c, 0x67, 0x89, 0x81, 0xce, 0x48, 0x12, 0x2d, 0x19, 0x2a, - 0xdd, 0xc6, 0x45, 0x90, 0xd7, 0x73, 0xfd, 0x17, 0x1c, 0x8b, 0xea, 0x0c, - 0xc8, 0x44, 0x3e, 0x84, 0x64, 0x71, 0x7d, 0xff, 0xc7, 0x68, 0x46, 0x66, - 0xb7, 0x66, 0xdd, 0x52, 0x31, 0x17, 0xf7, 0xe4, 0xba, 0x89, 0x96, 0x2f, - 0xf9, 0x98, 0xb3, 0xcf, 0xd0, 0x4b, 0x17, 0xf1, 0xf9, 0xc7, 0xc0, 0x96, - 0x2f, 0xe7, 0x8e, 0x70, 0x60, 0xd6, 0x2a, 0x4f, 0x7d, 0x8b, 0xef, 0xff, - 0xc4, 0xc0, 0x3b, 0x99, 0x9f, 0x79, 0x83, 0x41, 0x62, 0xfb, 0x37, 0x98, - 0xc9, 0x4c, 0xec, 0xe5, 0xff, 0x84, 0xc7, 0x88, 0x2a, 0x31, 0x3e, 0xdf, - 0xc7, 0x23, 0x7f, 0xbe, 0xc7, 0x8c, 0x61, 0x0d, 0x62, 0xc3, 0x58, 0xbc, - 0xe5, 0xb2, 0xc5, 0xfb, 0x5b, 0xb3, 0x6e, 0xa9, 0x2a, 0x4b, 0x62, 0xc5, - 0x6c, 0x7e, 0xe3, 0x12, 0xc1, 0xd3, 0x4d, 0xef, 0xfb, 0x5a, 0x72, 0x2c, - 0x16, 0xeb, 0x17, 0xfe, 0x13, 0x6a, 0x05, 0x81, 0x30, 0x16, 0x2f, 0xf7, - 0xc3, 0x1c, 0xfa, 0x46, 0xb1, 0x7f, 0xf3, 0x73, 0x4e, 0x17, 0xbe, 0xfa, - 0x82, 0xc5, 0xff, 0x69, 0xbf, 0xd4, 0x33, 0xd1, 0x92, 0x8f, 0x31, 0x9c, - 0xe1, 0xff, 0xcd, 0x6a, 0x31, 0x39, 0xd6, 0x8c, 0xc2, 0xff, 0xd1, 0x9f, - 0x93, 0xe0, 0xe4, 0xbc, 0xb1, 0x7b, 0xcf, 0xb2, 0xc5, 0xff, 0x9a, 0x11, - 0x99, 0xad, 0xd9, 0xb7, 0x54, 0x8e, 0x85, 0xf9, 0xfa, 0x01, 0xe5, 0x62, - 0xe2, 0xf2, 0xc5, 0x6c, 0x78, 0x0c, 0x53, 0x7c, 0x2e, 0x38, 0x16, 0x2f, - 0x3f, 0x41, 0x2c, 0x50, 0x0f, 0x0b, 0x84, 0x77, 0xee, 0x67, 0xcb, 0x16, - 0x2f, 0xbc, 0xf0, 0x75, 0x8a, 0x35, 0x37, 0xd3, 0x8f, 0x34, 0x24, 0x00, - 0xc9, 0xe2, 0x20, 0xc9, 0xef, 0x0b, 0xa8, 0x2c, 0x5f, 0x3e, 0x6b, 0xb2, - 0xc5, 0xe2, 0xf7, 0x16, 0x2f, 0xc5, 0xe2, 0x16, 0xcb, 0x14, 0xc7, 0x8c, - 0x21, 0xdb, 0xed, 0x8a, 0x76, 0x58, 0xbf, 0x61, 0x6c, 0xc3, 0x58, 0xbe, - 0x3c, 0x9b, 0x19, 0x28, 0xf6, 0x8f, 0x1f, 0x3b, 0x50, 0x88, 0x7b, 0x12, - 0x5f, 0xf8, 0x02, 0xe4, 0x60, 0xc2, 0x62, 0x82, 0xc5, 0x46, 0x2a, 0x01, - 0x78, 0xd5, 0x00, 0xd3, 0x7f, 0xf9, 0xf4, 0xdd, 0x7d, 0x9f, 0xae, 0x49, - 0xab, 0x17, 0xf9, 0xdb, 0x53, 0x06, 0xec, 0xb1, 0x7c, 0xe4, 0x07, 0x58, - 0xbf, 0x45, 0x31, 0x4f, 0x16, 0x2f, 0xe0, 0xb1, 0xfb, 0x61, 0x2c, 0x53, - 0x9e, 0xcf, 0x0a, 0xaf, 0x3f, 0xe5, 0x62, 0x30, 0xd0, 0xdf, 0xfc, 0x2e, - 0x7a, 0x7a, 0x8c, 0x14, 0x4e, 0x75, 0x8a, 0x82, 0x62, 0xa7, 0x84, 0xdf, - 0xcb, 0xef, 0xf6, 0xa0, 0x1c, 0x33, 0xec, 0xb1, 0x4b, 0x14, 0xe7, 0x83, - 0xc3, 0x5b, 0x69, 0x62, 0xbe, 0x6c, 0xd8, 0x86, 0xfd, 0xad, 0xd9, 0xb7, - 0x54, 0x8e, 0xe5, 0xff, 0xfd, 0x27, 0x16, 0xa2, 0x93, 0x98, 0x7c, 0xf7, - 0x1f, 0x8b, 0x17, 0x9a, 0x11, 0x98, 0x89, 0x5f, 0x1b, 0xdf, 0x9f, 0xb6, - 0xa6, 0x0b, 0x17, 0xef, 0x09, 0x8e, 0xe9, 0x17, 0x1e, 0x39, 0x62, 0xfe, - 0xc7, 0x1b, 0x31, 0xab, 0x17, 0xfe, 0x29, 0xf6, 0x73, 0x33, 0xa8, 0x2c, - 0x5f, 0xff, 0x8b, 0x58, 0x16, 0x47, 0xcf, 0xe5, 0xc8, 0x72, 0xb1, 0x50, - 0x5c, 0x58, 0x1a, 0x66, 0x46, 0x93, 0xbc, 0x2a, 0x8f, 0x0b, 0x5f, 0x9b, - 0x31, 0x51, 0x14, 0x70, 0x6f, 0xc5, 0xa1, 0x9f, 0x5f, 0xf0, 0xe6, 0x13, - 0x18, 0x17, 0x00, 0xb1, 0x7e, 0xe1, 0x48, 0x38, 0xb1, 0x78, 0xb0, 0x6b, - 0x17, 0xc2, 0xfb, 0xe9, 0x62, 0xe9, 0x8c, 0x93, 0xe7, 0x01, 0x44, 0x70, - 0xe5, 0x46, 0x27, 0x1d, 0x90, 0xaa, 0x28, 0x52, 0xdf, 0xfe, 0x90, 0x1d, - 0xa1, 0x19, 0xc1, 0x96, 0x7d, 0x62, 0xff, 0xbd, 0xc7, 0x3b, 0xf8, 0x0c, - 0xb1, 0x77, 0xa5, 0x62, 0xf6, 0xd3, 0xba, 0xc5, 0xdc, 0x8c, 0x93, 0xef, - 0xdc, 0xe5, 0xc5, 0xef, 0xff, 0x46, 0x1d, 0xa1, 0x19, 0x9a, 0xdd, 0x9b, - 0x75, 0x49, 0x0a, 0x5d, 0x3a, 0x58, 0xbd, 0x39, 0xa5, 0x8b, 0xf0, 0x27, - 0x6c, 0x09, 0x62, 0xff, 0xcd, 0xe8, 0x61, 0x38, 0xe3, 0x39, 0xb1, 0xee, - 0xc4, 0x2e, 0x01, 0xcb, 0xe2, 0x6d, 0x76, 0x58, 0xb9, 0x82, 0x58, 0xb6, - 0xcb, 0x14, 0x73, 0x56, 0x43, 0x17, 0xfe, 0xfb, 0x9d, 0xa1, 0x87, 0x6e, - 0x96, 0x2d, 0x19, 0x28, 0xae, 0xd9, 0x3f, 0x72, 0x0b, 0xb6, 0x75, 0x8b, - 0xff, 0xdf, 0x17, 0xa4, 0xb3, 0x63, 0x45, 0x31, 0x2c, 0x5f, 0xc2, 0x39, - 0xda, 0x11, 0x92, 0x7c, 0xbb, 0x8c, 0x5f, 0xff, 0xf8, 0xb3, 0xb3, 0xfc, - 0x51, 0x9b, 0xfd, 0xfe, 0x53, 0x9a, 0xc3, 0xac, 0x54, 0x13, 0x57, 0xfc, - 0x27, 0xf8, 0x91, 0x7d, 0xe6, 0xeb, 0x8b, 0x17, 0xe1, 0x75, 0xe7, 0xdd, - 0x62, 0xf8, 0xb0, 0x2f, 0xac, 0x5f, 0xd0, 0x6d, 0x6d, 0xf1, 0x2c, 0x5f, - 0xb9, 0x20, 0x0f, 0x65, 0x8b, 0x64, 0x47, 0xb7, 0xc3, 0x0b, 0xed, 0xc9, - 0xa0, 0xb1, 0x73, 0x47, 0x2c, 0x5f, 0x39, 0x49, 0xd6, 0x2f, 0xf0, 0xe4, - 0x8b, 0x33, 0x65, 0x8b, 0xe0, 0x63, 0x12, 0xc5, 0xfe, 0xf1, 0x48, 0x0e, - 0xd0, 0x58, 0xa9, 0x44, 0x36, 0x19, 0x39, 0x0d, 0xfe, 0xc2, 0x9c, 0xd4, - 0xec, 0xb1, 0x7f, 0xf7, 0x67, 0xf4, 0xfc, 0xb3, 0xda, 0x95, 0x8b, 0xf3, - 0x68, 0x11, 0xd8, 0xb1, 0x79, 0xc2, 0xf2, 0xc5, 0x62, 0x23, 0x9d, 0x17, - 0x85, 0x77, 0xfc, 0x78, 0xa0, 0xda, 0xdb, 0xe2, 0x58, 0xbd, 0x20, 0x8c, - 0x95, 0x66, 0x3b, 0x12, 0x40, 0xac, 0x6f, 0xce, 0x50, 0x72, 0x36, 0x1a, - 0x28, 0x53, 0xf0, 0xb7, 0xd0, 0xc0, 0x0c, 0xba, 0x9d, 0x70, 0x74, 0xa5, - 0xb3, 0xdf, 0xff, 0x85, 0xbc, 0x63, 0x7b, 0xf8, 0x79, 0xd1, 0x48, 0x16, - 0x2f, 0xf8, 0xed, 0xcc, 0x0a, 0x48, 0x6b, 0x17, 0xfe, 0x68, 0x46, 0x66, - 0xb7, 0x66, 0xdd, 0x52, 0x49, 0x17, 0xf7, 0xcb, 0x07, 0xf1, 0x2c, 0x5d, - 0x83, 0x58, 0xac, 0x3c, 0x5f, 0x97, 0x5e, 0x92, 0x1a, 0xc5, 0xa3, 0x36, - 0x4d, 0x93, 0x16, 0x4e, 0x73, 0xe8, 0x4a, 0x84, 0x43, 0x7f, 0xff, 0x0b, - 0x93, 0x85, 0xe2, 0x63, 0x72, 0x29, 0x21, 0xac, 0x5f, 0xc5, 0x9c, 0x0f, - 0x22, 0x58, 0xb6, 0x12, 0x22, 0x7b, 0x2d, 0x5c, 0x72, 0x58, 0xbf, 0xfa, - 0x2f, 0xb1, 0xfd, 0xf9, 0xf0, 0x8e, 0xb1, 0x7d, 0x85, 0x3b, 0x2c, 0x56, - 0x1f, 0x4e, 0x91, 0xef, 0x67, 0x23, 0x09, 0x19, 0x5c, 0x29, 0x0e, 0x10, - 0x15, 0x2d, 0xf9, 0x16, 0xd3, 0x81, 0x30, 0x95, 0x31, 0x85, 0xbb, 0xca, - 0x4b, 0x88, 0xb3, 0x52, 0xef, 0xcf, 0x3c, 0x41, 0xf3, 0xc6, 0x85, 0xe0, - 0x0f, 0x4a, 0x17, 0x9e, 0x9e, 0x88, 0x14, 0x71, 0xf1, 0xd1, 0xd6, 0xdd, - 0x1b, 0xf7, 0xd5, 0x62, 0xfb, 0x76, 0x6d, 0xd5, 0x21, 0x21, 0x7f, 0xfe, - 0x7d, 0x7d, 0x8c, 0x8b, 0xf3, 0xb7, 0x7f, 0xa9, 0x8e, 0x58, 0xad, 0x22, - 0x4b, 0xe6, 0x37, 0xff, 0xfb, 0xf3, 0xb7, 0x7f, 0xa9, 0x8e, 0x8c, 0xd3, - 0xc9, 0xf6, 0xc0, 0x96, 0x2f, 0xcf, 0xef, 0xe1, 0xd6, 0x2d, 0x19, 0x1b, - 0xa6, 0xe3, 0x90, 0xb7, 0x88, 0x8f, 0xbf, 0x6f, 0xbd, 0xa6, 0xd2, 0xc5, - 0xff, 0x9a, 0x11, 0x99, 0xad, 0xd9, 0xb7, 0x54, 0x8b, 0xc5, 0xdd, 0xbe, - 0xb1, 0x7c, 0xde, 0x6d, 0x96, 0x2d, 0x18, 0xe8, 0xaa, 0x38, 0xe9, 0x28, - 0x47, 0x0d, 0x5f, 0xdd, 0xf5, 0xcd, 0x01, 0x8e, 0xb1, 0x7f, 0xf4, 0xf6, - 0x68, 0x9f, 0x5d, 0x42, 0x62, 0x58, 0xbd, 0xde, 0x1c, 0x0b, 0x17, 0xf0, - 0xff, 0x8e, 0x46, 0xac, 0x5e, 0x39, 0x4a, 0xc5, 0x70, 0xf2, 0x83, 0x2e, - 0xbd, 0xe6, 0x35, 0x62, 0xbb, 0xd3, 0xc1, 0x62, 0x3b, 0xa2, 0x25, 0x8b, - 0xff, 0x77, 0xc6, 0x71, 0x8a, 0x4a, 0x60, 0xb1, 0x7f, 0xc6, 0x4f, 0x9f, - 0x53, 0xda, 0x25, 0x8b, 0xff, 0xdf, 0x9e, 0x06, 0x39, 0xd4, 0x58, 0x40, - 0x58, 0xbe, 0xd0, 0xbd, 0xc5, 0x8b, 0xf8, 0x6e, 0x6b, 0x10, 0x16, 0x2f, - 0xed, 0x30, 0x52, 0x39, 0x58, 0xbc, 0x1e, 0xdd, 0xcb, 0x17, 0xe9, 0x20, - 0x0c, 0xeb, 0x17, 0xfb, 0x0e, 0x64, 0x69, 0xde, 0x1c, 0x0b, 0x17, 0xc0, - 0x3b, 0xf1, 0x62, 0x86, 0x7c, 0x7a, 0x40, 0xb8, 0x07, 0x58, 0xbd, 0x25, - 0xd2, 0xc5, 0xfb, 0xc1, 0x9c, 0xa5, 0x62, 0xcf, 0xa3, 0xde, 0xf8, 0xc1, - 0x0e, 0xdf, 0xfe, 0xff, 0x69, 0x20, 0x47, 0xe0, 0xf3, 0x5d, 0x2c, 0x5f, - 0xe7, 0xd3, 0x0d, 0xc8, 0xd5, 0x8b, 0xa7, 0xcb, 0x17, 0xfc, 0xdb, 0x6a, - 0x7a, 0x83, 0x9d, 0x62, 0xff, 0xf0, 0x86, 0xfa, 0x0e, 0x2e, 0xe1, 0x31, - 0x44, 0xb1, 0x7b, 0x53, 0x05, 0x8b, 0x8a, 0x25, 0x8a, 0xc3, 0x6a, 0x21, - 0xda, 0x82, 0x75, 0xce, 0x67, 0xf5, 0x00, 0x19, 0x90, 0xbf, 0x0e, 0xfd, - 0x08, 0x6b, 0xf8, 0x1f, 0x9d, 0x39, 0xd6, 0x2f, 0xcf, 0xdd, 0xdc, 0xc7, - 0x58, 0xb6, 0x96, 0x2f, 0xfb, 0x93, 0xd9, 0xbf, 0x3d, 0x44, 0xb1, 0x58, - 0x79, 0xf1, 0x09, 0x54, 0xa3, 0x37, 0x45, 0xcc, 0xfb, 0x7e, 0x8a, 0x7a, - 0xf3, 0xac, 0x5e, 0xf0, 0x7b, 0x2c, 0x54, 0x9e, 0x56, 0x15, 0x5f, 0xf9, - 0xb8, 0x1f, 0x62, 0x9f, 0x37, 0xd6, 0x2f, 0xf8, 0xa6, 0x2d, 0x34, 0x4d, - 0xc5, 0x8b, 0x83, 0x3a, 0xc5, 0x41, 0x12, 0x9d, 0x90, 0x7b, 0x8e, 0xae, - 0xf8, 0x16, 0x29, 0xcf, 0x35, 0x8d, 0x6f, 0xd3, 0x17, 0x04, 0x4b, 0x17, - 0xd1, 0x70, 0x44, 0xb1, 0x73, 0x1c, 0xc3, 0xcd, 0x92, 0x9b, 0xed, 0xb3, - 0x87, 0x58, 0xbe, 0xeb, 0x93, 0xf5, 0x8a, 0x19, 0xfa, 0xe1, 0x6b, 0x92, - 0x5f, 0xb5, 0x3e, 0x7e, 0xcb, 0x17, 0xed, 0x9b, 0x8c, 0x05, 0x8a, 0x73, - 0xd3, 0x62, 0xab, 0xff, 0xa2, 0x30, 0x32, 0x9e, 0xcd, 0xda, 0x62, 0x58, - 0xa5, 0x8b, 0x44, 0xb1, 0x7f, 0xe6, 0xd9, 0xbb, 0x72, 0x49, 0xbb, 0x96, - 0x2f, 0xfd, 0xee, 0x67, 0x24, 0xbd, 0x80, 0x58, 0xbe, 0xf6, 0x6a, 0x25, - 0x8b, 0xde, 0x6e, 0xcb, 0x15, 0x87, 0x86, 0xc4, 0x95, 0x28, 0xa1, 0x84, - 0x20, 0x6f, 0x1f, 0x3b, 0x96, 0x2e, 0xed, 0x8b, 0x17, 0xa3, 0xd8, 0xd5, - 0x89, 0x2e, 0x6f, 0xcd, 0xc9, 0xed, 0x8b, 0x14, 0x34, 0xe7, 0x22, 0x87, - 0x26, 0x89, 0xfc, 0x73, 0xd8, 0xbe, 0xa5, 0x52, 0xd6, 0x26, 0x68, 0x31, - 0xa3, 0xaf, 0xbb, 0x52, 0xb1, 0x5d, 0xe3, 0x2b, 0x22, 0x07, 0xa3, 0x4c, - 0xc2, 0x43, 0x4b, 0xb7, 0x2e, 0xe8, 0x8d, 0xe1, 0x17, 0x14, 0xa2, 0xed, - 0x46, 0x6a, 0x77, 0x8f, 0xc6, 0x02, 0x50, 0xe2, 0xf4, 0x20, 0x3b, 0x4a, - 0x7a, 0xee, 0x42, 0xbb, 0x09, 0x62, 0xfc, 0x14, 0xc7, 0xc9, 0xd6, 0x2f, - 0xe3, 0x39, 0xfc, 0x7f, 0x2c, 0x5f, 0xfb, 0xae, 0x73, 0x3e, 0xfc, 0x16, - 0xcb, 0x14, 0x34, 0x59, 0xe0, 0xb3, 0x96, 0x08, 0xbe, 0xdd, 0x2c, 0x5f, - 0x07, 0xd9, 0xfb, 0x96, 0x2f, 0x76, 0x7e, 0xe5, 0x8b, 0xf7, 0xf3, 0xb8, - 0x44, 0x61, 0xe5, 0x86, 0x53, 0x7f, 0x9b, 0xdb, 0x0a, 0x29, 0x8f, 0x58, - 0xbf, 0xfb, 0x0e, 0x1f, 0x66, 0xf6, 0x1e, 0x78, 0xb1, 0x40, 0x44, 0x07, - 0x0e, 0x6f, 0xe9, 0x38, 0xff, 0x3c, 0x58, 0xba, 0x60, 0xb1, 0x43, 0x4e, - 0x27, 0x17, 0x9e, 0x18, 0x64, 0x47, 0xc2, 0xeb, 0xfd, 0xe7, 0x6d, 0x02, - 0x3b, 0x16, 0x2f, 0xe2, 0x17, 0xa2, 0x93, 0x56, 0x2f, 0x77, 0xef, 0xa5, - 0x8a, 0x63, 0xd2, 0x11, 0x85, 0xff, 0xd8, 0xfd, 0x73, 0xd3, 0xb1, 0xda, - 0x0b, 0x17, 0xe9, 0x03, 0xf5, 0xc5, 0x8a, 0xc4, 0xc6, 0x1e, 0x11, 0x1a, - 0x21, 0x24, 0x6b, 0xfc, 0x2f, 0x7c, 0xa7, 0x34, 0xb1, 0x7e, 0x2c, 0xd8, - 0x3e, 0xcb, 0x17, 0xd9, 0xb0, 0x7d, 0x96, 0x2f, 0xa7, 0xa1, 0xb1, 0x87, - 0xa6, 0x45, 0x97, 0xff, 0xf4, 0x3e, 0x1f, 0x5e, 0xfb, 0xb0, 0x23, 0xa7, - 0x58, 0x4b, 0x14, 0x34, 0x4c, 0xb9, 0xcd, 0xff, 0xd2, 0x5e, 0xee, 0x29, - 0x0b, 0xa8, 0x71, 0x62, 0xee, 0xf6, 0x3d, 0x62, 0xff, 0xf9, 0xf4, 0x67, - 0xe5, 0xfd, 0xc1, 0x6e, 0x29, 0x58, 0xbe, 0x7d, 0x81, 0x1e, 0xb1, 0x6e, - 0x96, 0x2f, 0x33, 0x6e, 0xa9, 0x25, 0xca, 0x58, 0xbf, 0xe7, 0xed, 0xfd, - 0xdf, 0x98, 0x35, 0x8a, 0xc4, 0x42, 0xee, 0x27, 0x11, 0x56, 0x83, 0x2f, - 0xef, 0x14, 0xf7, 0x31, 0xd6, 0x2f, 0xc5, 0x3d, 0xcc, 0x75, 0x8b, 0xa7, - 0x73, 0x0f, 0x6b, 0xc6, 0x17, 0xef, 0x1b, 0x25, 0x05, 0x8b, 0xde, 0x9d, - 0x2c, 0x51, 0xcf, 0x18, 0x8a, 0x6f, 0xfb, 0x35, 0x1f, 0x83, 0xcd, 0x74, - 0xb1, 0x4e, 0x7b, 0xdd, 0x88, 0x6f, 0xfd, 0x30, 0xfb, 0x3f, 0x5c, 0x93, - 0x56, 0x2f, 0xfa, 0x79, 0x27, 0x0f, 0x69, 0xd9, 0x62, 0xb6, 0x5c, 0xb2, - 0x84, 0x63, 0xe3, 0x22, 0xc4, 0x93, 0x48, 0x22, 0x52, 0xd4, 0x2b, 0x0f, - 0x09, 0x8f, 0xc3, 0x4c, 0x88, 0xfb, 0x90, 0x2f, 0xff, 0xcf, 0xed, 0x0b, - 0x9f, 0x68, 0x19, 0xc1, 0xf9, 0xd6, 0x2f, 0xff, 0x6b, 0x63, 0x3b, 0x0b, - 0xf2, 0xe7, 0x91, 0xac, 0x57, 0xd1, 0x4e, 0xcb, 0x17, 0x6b, 0xcb, 0x17, - 0xc3, 0xf8, 0x8e, 0xb1, 0x52, 0x6f, 0x04, 0x31, 0x7f, 0x0f, 0xa9, 0xd3, - 0xf4, 0xb1, 0x7d, 0xed, 0xb0, 0x25, 0x8a, 0x81, 0xfa, 0xb9, 0x01, 0x18, - 0x5f, 0xff, 0xa2, 0x6d, 0x6d, 0xe7, 0x8f, 0xcd, 0x9a, 0x29, 0x8f, 0x58, - 0xbe, 0x37, 0x59, 0xc5, 0x8a, 0x94, 0x41, 0xba, 0xfd, 0xff, 0xa4, 0xa7, - 0xe6, 0x08, 0x85, 0xba, 0xc5, 0xe8, 0x8f, 0x8b, 0x17, 0x08, 0x25, 0x8b, - 0xc2, 0x6e, 0x2c, 0x5f, 0xff, 0x68, 0x73, 0xf6, 0x8a, 0x63, 0xfd, 0x9d, - 0xb8, 0xb1, 0x78, 0xe5, 0x12, 0xc5, 0xe1, 0x34, 0x4b, 0x17, 0x10, 0xd6, - 0x2a, 0x51, 0x53, 0x8a, 0xd1, 0x0f, 0x30, 0xf5, 0xfa, 0x40, 0xdd, 0x71, - 0x62, 0xf7, 0x58, 0x05, 0x8b, 0x01, 0x62, 0xe8, 0x81, 0x26, 0xc3, 0xa1, - 0xeb, 0xd1, 0xcc, 0x4b, 0x15, 0x27, 0x9b, 0xe2, 0xeb, 0xc4, 0xe0, 0x58, - 0xbf, 0xe1, 0xb1, 0x01, 0x86, 0x28, 0xf5, 0x8b, 0xd9, 0xee, 0x2c, 0x54, - 0x9f, 0xae, 0x0e, 0x70, 0xf2, 0xff, 0xe2, 0x1f, 0x74, 0x59, 0x07, 0xd4, - 0xec, 0xb1, 0x7e, 0x97, 0x83, 0xf6, 0x58, 0xb9, 0x8d, 0x58, 0xbf, 0xfa, - 0x48, 0xd3, 0x27, 0x6f, 0x4f, 0x6e, 0x2c, 0x54, 0x79, 0xf0, 0xfc, 0x62, - 0xbe, 0x8a, 0xff, 0x42, 0x2a, 0xa5, 0x32, 0x06, 0x87, 0xc5, 0x41, 0x71, - 0x24, 0x64, 0x38, 0x81, 0x1e, 0x3d, 0x10, 0xcf, 0xe1, 0x8c, 0x03, 0xb2, - 0x85, 0x37, 0xa1, 0x2d, 0xda, 0x34, 0xdb, 0xed, 0x84, 0x37, 0x58, 0xbf, - 0xe1, 0xb1, 0x00, 0x33, 0x94, 0xac, 0x54, 0x9e, 0xee, 0x12, 0x5f, 0x31, - 0x0f, 0xb9, 0x62, 0xff, 0x16, 0x40, 0xcf, 0xcc, 0x7a, 0xc5, 0x47, 0x9e, - 0xe1, 0xc9, 0x69, 0x62, 0xfd, 0xcf, 0x6a, 0x78, 0xb1, 0x69, 0xe8, 0xda, - 0xf8, 0x32, 0xff, 0x81, 0xcd, 0x4f, 0x50, 0x73, 0xac, 0x5e, 0xf3, 0x76, - 0x58, 0xbf, 0x6c, 0x28, 0xa6, 0x3d, 0x62, 0xf8, 0x51, 0x4c, 0x7a, 0xc5, - 0xcd, 0xb1, 0x87, 0xab, 0xb1, 0x75, 0x4a, 0x37, 0xd8, 0xec, 0x4e, 0x97, - 0xf0, 0x39, 0x27, 0x6f, 0x2c, 0x5f, 0xe9, 0x8b, 0x92, 0x76, 0xf2, 0xc5, - 0xa5, 0xcf, 0x8b, 0xb1, 0x75, 0xff, 0x3f, 0x22, 0x72, 0xf4, 0x81, 0x62, - 0xfc, 0x0e, 0x31, 0x01, 0x62, 0xff, 0xe1, 0xb7, 0x47, 0x11, 0x7b, 0xf9, - 0x05, 0x8a, 0x93, 0xee, 0x72, 0x8b, 0xff, 0x8b, 0xdd, 0xa7, 0x5c, 0x62, - 0x98, 0xf5, 0x8b, 0xf9, 0x9f, 0x63, 0x0f, 0x8b, 0x15, 0x04, 0xfd, 0xb5, - 0x09, 0x03, 0x94, 0x7e, 0x14, 0xfc, 0x20, 0xf2, 0x45, 0xfe, 0x98, 0xfe, - 0x49, 0xdb, 0xcb, 0x17, 0x31, 0x2c, 0x5f, 0xf4, 0x80, 0xcf, 0xc9, 0xd8, - 0x96, 0x2b, 0xa3, 0xcf, 0xec, 0x2d, 0x7f, 0xfd, 0x83, 0x0e, 0x2e, 0x7b, - 0xf8, 0x31, 0x7b, 0x8b, 0x17, 0xf4, 0x59, 0x1e, 0xc4, 0x05, 0x8a, 0x82, - 0x65, 0xfa, 0x84, 0x2f, 0xc9, 0x7c, 0xa9, 0x7f, 0x48, 0x4f, 0xf1, 0x47, - 0xac, 0x5d, 0xdd, 0xf5, 0x8b, 0xfb, 0xa8, 0x71, 0x8b, 0xa5, 0x8a, 0x95, - 0xda, 0x78, 0x2d, 0x64, 0xaf, 0xc7, 0x8e, 0x47, 0x48, 0x67, 0x32, 0x0c, - 0x6e, 0xe1, 0x44, 0xb1, 0x7f, 0xd1, 0x19, 0xa9, 0xea, 0x0e, 0x75, 0x8a, - 0x88, 0xf5, 0x88, 0x66, 0xff, 0xf7, 0x69, 0x2f, 0x7b, 0xf8, 0x31, 0x7b, - 0x8b, 0x17, 0xb1, 0xce, 0xb1, 0x7f, 0x08, 0x0e, 0x4f, 0x1e, 0xb1, 0x7f, - 0xff, 0xd1, 0xd9, 0xe0, 0xfb, 0x37, 0x83, 0xd9, 0xfe, 0x58, 0x36, 0x3a, - 0xc5, 0x0d, 0x13, 0xde, 0x30, 0xba, 0x4e, 0xb1, 0x7c, 0x0c, 0xed, 0x2b, - 0x15, 0x29, 0xc3, 0xe1, 0x16, 0xe9, 0xaf, 0x0b, 0xad, 0x11, 0xb0, 0xbd, - 0xf8, 0xa2, 0xf3, 0x9a, 0xb1, 0x74, 0xc1, 0x62, 0xf8, 0xa2, 0x73, 0xac, - 0x5f, 0x9c, 0x62, 0x2c, 0x58, 0xbf, 0x48, 0xfe, 0xdd, 0x2c, 0x5f, 0xf7, - 0xe1, 0x9e, 0x60, 0x07, 0xd2, 0xc5, 0xf7, 0xbf, 0x90, 0x30, 0xf9, 0x5c, - 0xa6, 0xa2, 0x46, 0x29, 0x42, 0x32, 0xa5, 0x35, 0x17, 0x2a, 0x61, 0x71, - 0x43, 0xa2, 0xfe, 0xd4, 0x58, 0x52, 0x75, 0x8b, 0x76, 0x58, 0xac, 0x3c, - 0x27, 0x2e, 0xba, 0x62, 0x58, 0xbf, 0xfc, 0x2d, 0xb4, 0xe7, 0x7f, 0x72, - 0x75, 0xd9, 0x62, 0xa0, 0x88, 0x6d, 0x10, 0x10, 0xc5, 0xf8, 0x13, 0xbe, - 0x1d, 0x62, 0xff, 0x66, 0xdc, 0x98, 0x85, 0xa5, 0x8b, 0xec, 0x67, 0xd9, - 0x62, 0xe9, 0xf2, 0xc5, 0x1c, 0xdc, 0x91, 0x15, 0x3a, 0x39, 0xf4, 0x5e, - 0x45, 0x3c, 0x6f, 0xba, 0x18, 0xb1, 0x7e, 0xe1, 0xba, 0x60, 0x96, 0x2e, - 0xce, 0x96, 0x2f, 0x14, 0x9d, 0x62, 0x86, 0x7b, 0xfb, 0x95, 0xe8, 0x62, - 0x96, 0x2f, 0x47, 0xe4, 0x16, 0x2f, 0xf4, 0x80, 0xed, 0x00, 0xce, 0xb1, - 0x7f, 0x9f, 0xb1, 0x91, 0x14, 0x8d, 0x62, 0xbe, 0x7d, 0x9c, 0x35, 0xae, - 0x91, 0x5c, 0xf0, 0x8c, 0xbf, 0xcd, 0xa8, 0xb3, 0xdd, 0xdd, 0x96, 0x2e, - 0x07, 0x16, 0x2f, 0x0f, 0x8e, 0xb1, 0x52, 0x6d, 0x58, 0x62, 0xa5, 0x52, - 0x88, 0xce, 0xf1, 0xdb, 0xe6, 0x0d, 0x0b, 0xa1, 0x14, 0x04, 0xdf, 0x7c, - 0xdf, 0x6d, 0x96, 0x2f, 0xdf, 0x11, 0xb8, 0x4b, 0x17, 0x82, 0x68, 0x2c, - 0x5f, 0xa2, 0x60, 0x36, 0xeb, 0x17, 0xda, 0xf1, 0x4a, 0xc5, 0x61, 0xe6, - 0x31, 0x55, 0xfe, 0x08, 0x9b, 0xd0, 0x61, 0xac, 0x5d, 0x1c, 0xeb, 0x16, - 0x8f, 0x58, 0xb6, 0xcb, 0x14, 0x23, 0x50, 0x18, 0xad, 0xf0, 0x7b, 0x4f, - 0xd6, 0x28, 0x8f, 0x1f, 0xc4, 0x57, 0xec, 0xf7, 0x9c, 0xd5, 0x8b, 0xfe, - 0x9f, 0xf1, 0xbd, 0x3a, 0xee, 0x58, 0xbf, 0xf1, 0xd8, 0x61, 0xc5, 0x09, - 0x2e, 0x96, 0x28, 0x67, 0xfc, 0xe7, 0x97, 0xf0, 0xbf, 0x3a, 0xc0, 0x2c, - 0x5e, 0xed, 0x3a, 0x58, 0xbe, 0xd0, 0x03, 0xec, 0xb1, 0x79, 0xc2, 0xf2, - 0xc5, 0x41, 0x12, 0x4e, 0x5d, 0xf1, 0xfe, 0x13, 0xd6, 0xca, 0xd2, 0x86, - 0x47, 0x85, 0x3b, 0xb5, 0x74, 0x40, 0xe6, 0x91, 0x42, 0x27, 0x44, 0x3f, - 0x85, 0x3f, 0xa1, 0x67, 0x7f, 0x8b, 0xd9, 0xc7, 0x6f, 0xac, 0x5f, 0x72, - 0x1c, 0x65, 0x8b, 0xfe, 0x03, 0xff, 0x34, 0xd1, 0x71, 0x62, 0xf1, 0x8d, - 0xf5, 0x8b, 0xff, 0xe8, 0x14, 0xec, 0x1c, 0x5c, 0xfe, 0x77, 0x68, 0x0b, - 0x17, 0xa0, 0x3e, 0xcb, 0x15, 0x27, 0xee, 0xca, 0xf7, 0xf1, 0x87, 0xcf, - 0x37, 0x96, 0x2f, 0xef, 0xb8, 0xdf, 0x5b, 0xac, 0x52, 0xc5, 0xf3, 0x17, - 0x50, 0x58, 0xad, 0xcd, 0x7f, 0xc3, 0x2d, 0xcc, 0x45, 0x7e, 0xe5, 0xec, - 0xbd, 0x7b, 0xa8, 0xb8, 0xb1, 0x5d, 0x1e, 0xab, 0x1a, 0xde, 0x97, 0x1a, - 0xc5, 0xfd, 0xf7, 0xf1, 0x49, 0xd6, 0x2f, 0xf8, 0xb7, 0x6f, 0xf5, 0x0c, - 0xf2, 0xc5, 0x44, 0x7d, 0x0c, 0x5b, 0x52, 0xac, 0x40, 0x66, 0x5d, 0x11, - 0xb9, 0xd1, 0xe1, 0x2a, 0xd1, 0x92, 0x70, 0x88, 0x50, 0x84, 0xbf, 0xd8, - 0x14, 0x1f, 0x82, 0x3a, 0xc5, 0xdd, 0xb8, 0xb1, 0x7f, 0x0b, 0x93, 0x10, - 0xb4, 0xb1, 0x7e, 0xcd, 0xb3, 0xfc, 0x58, 0xa9, 0x3f, 0x3f, 0x8d, 0x11, - 0x85, 0xff, 0xe8, 0x09, 0xbb, 0x3f, 0xf8, 0x28, 0xe1, 0x69, 0x62, 0xff, - 0x02, 0x40, 0xc4, 0x2c, 0x58, 0xbe, 0x1f, 0xe4, 0xd5, 0x8b, 0xe3, 0x8a, - 0x2d, 0x2c, 0x5d, 0xae, 0x2c, 0x5f, 0xfb, 0x38, 0x67, 0xe5, 0xc8, 0x5b, - 0x2c, 0x56, 0x1e, 0xc1, 0x0c, 0x56, 0xe9, 0xb8, 0xf4, 0x5a, 0xea, 0x3a, - 0x32, 0x39, 0x27, 0x67, 0xdb, 0xfe, 0x04, 0x80, 0x3e, 0xd2, 0x5d, 0xcb, - 0x17, 0xff, 0xed, 0xa7, 0xd3, 0xf7, 0xf4, 0x1f, 0x5b, 0xfe, 0x56, 0x2e, - 0x93, 0xac, 0x54, 0xab, 0x21, 0xc9, 0x43, 0x2e, 0xb6, 0xc7, 0xe2, 0x57, - 0xbb, 0x61, 0xac, 0x5f, 0xf4, 0xc5, 0xe7, 0x1e, 0x14, 0x4b, 0x17, 0xff, - 0xfd, 0xae, 0xb7, 0x7e, 0x8c, 0x35, 0x8c, 0xe7, 0xdb, 0x79, 0x21, 0xac, - 0x5f, 0xf3, 0x70, 0x3f, 0x75, 0xbb, 0x9d, 0x62, 0xdf, 0x94, 0x55, 0x89, - 0xba, 0xf9, 0xcd, 0x8e, 0xc5, 0x8b, 0xf8, 0x3f, 0x4e, 0xc5, 0xd2, 0xc5, - 0xff, 0xf6, 0xff, 0x68, 0x83, 0x8a, 0x0e, 0x58, 0x79, 0x58, 0xbc, 0x4e, - 0x75, 0x8a, 0xd2, 0x31, 0x80, 0x4c, 0x46, 0x3e, 0x53, 0xbf, 0xcf, 0xe2, - 0xc3, 0x73, 0xeb, 0x17, 0xa3, 0xd8, 0xeb, 0x15, 0xe3, 0xd3, 0xee, 0x33, - 0xbb, 0x9c, 0x58, 0xbf, 0xfb, 0xdc, 0x0f, 0x98, 0x42, 0xf4, 0xfd, 0x62, - 0xfe, 0x96, 0x2f, 0x61, 0x2c, 0x56, 0x1f, 0x89, 0x23, 0x5f, 0xc6, 0x7a, - 0x76, 0x98, 0x96, 0x2f, 0xdc, 0x8f, 0x9d, 0x1a, 0xb1, 0x69, 0x34, 0xf7, - 0xba, 0x31, 0xbf, 0x9a, 0x27, 0xd4, 0xec, 0xb1, 0x74, 0xec, 0xb1, 0x5f, - 0x3c, 0x7e, 0xe2, 0xfb, 0xf7, 0x71, 0xe7, 0x3c, 0xb1, 0x7f, 0xf0, 0x7e, - 0x84, 0x8d, 0x8b, 0x3c, 0x05, 0x8b, 0xef, 0x4e, 0x7d, 0x62, 0xff, 0x3f, - 0x6e, 0xa1, 0x9d, 0xd0, 0x58, 0xac, 0x46, 0x66, 0x8a, 0xd9, 0x14, 0x88, - 0xae, 0xc3, 0xac, 0x54, 0xae, 0xac, 0xc0, 0x64, 0x70, 0xe5, 0xc8, 0x77, - 0x3c, 0x23, 0xf4, 0x4a, 0x78, 0x44, 0xfd, 0xf9, 0x9c, 0x05, 0x0f, 0x1e, - 0xc7, 0x57, 0xee, 0xe7, 0x3c, 0xf1, 0x62, 0xfa, 0x7a, 0x9f, 0x2c, 0x5e, - 0xcd, 0x71, 0x62, 0xcd, 0x11, 0xe0, 0x76, 0x23, 0xbf, 0x6c, 0x1f, 0x66, - 0x82, 0xc5, 0x0d, 0x18, 0x47, 0x6b, 0x22, 0xab, 0xdd, 0xb0, 0x6b, 0x16, - 0x09, 0x62, 0xf7, 0x18, 0xeb, 0x17, 0x89, 0xce, 0xb1, 0x6d, 0x96, 0x29, - 0x8d, 0x78, 0x63, 0x94, 0x69, 0xf6, 0xfd, 0x32, 0xf4, 0x5c, 0x95, 0x8b, - 0xed, 0x02, 0x3b, 0x16, 0x2f, 0xff, 0xa4, 0xa4, 0x06, 0x3f, 0xe1, 0x3e, - 0x61, 0xac, 0x51, 0xa8, 0x93, 0x61, 0xee, 0xe2, 0x6b, 0xfc, 0xc6, 0xeb, - 0x3b, 0x48, 0x16, 0x2e, 0x8b, 0x16, 0x29, 0x62, 0xfb, 0xdf, 0x68, 0x98, - 0xd2, 0x70, 0x62, 0xff, 0xa3, 0xd8, 0x80, 0xe6, 0xb7, 0x4b, 0x15, 0x27, - 0xeb, 0x87, 0x17, 0xfe, 0x73, 0x87, 0xf7, 0xf6, 0x76, 0x89, 0x62, 0xfe, - 0x07, 0x40, 0xcd, 0x62, 0xc5, 0xfa, 0x5f, 0xcf, 0x05, 0x8b, 0xf6, 0x1a, - 0x6b, 0x8d, 0x62, 0xb7, 0x3d, 0x12, 0x27, 0xbf, 0x47, 0x0b, 0xef, 0xa5, - 0x8b, 0xe1, 0x7d, 0xf4, 0xb1, 0x46, 0x1e, 0x7c, 0x71, 0x65, 0xe9, 0xcf, - 0x2c, 0x5f, 0x72, 0x75, 0x05, 0x8b, 0xf6, 0x6b, 0x42, 0xd9, 0x62, 0xc0, - 0x39, 0xf4, 0xf0, 0x73, 0xc4, 0x74, 0x74, 0x62, 0x34, 0x23, 0xea, 0x53, - 0xdc, 0xc8, 0x40, 0x3c, 0x66, 0xb7, 0xc3, 0xfb, 0x74, 0xb1, 0x7e, 0xfb, - 0xeb, 0xee, 0xb1, 0x73, 0x92, 0xc5, 0x61, 0xbe, 0x01, 0x45, 0xef, 0xcf, - 0x16, 0x2e, 0x07, 0x0c, 0x37, 0xb2, 0x41, 0x52, 0x8c, 0xc6, 0x84, 0xfd, - 0xf7, 0xb9, 0x9b, 0x2c, 0x5f, 0xff, 0xef, 0xbf, 0x66, 0x03, 0xc2, 0x7b, - 0x31, 0xe7, 0xfd, 0xcc, 0xb1, 0x5d, 0x22, 0x2b, 0xe4, 0x97, 0x66, 0xcb, - 0x14, 0xc6, 0xf0, 0x89, 0x2a, 0x57, 0xb5, 0x60, 0x5e, 0x31, 0xfc, 0x84, - 0x03, 0xc2, 0xda, 0x3c, 0xce, 0x28, 0x67, 0xe8, 0x83, 0xf2, 0x87, 0xca, - 0x30, 0x5e, 0x43, 0xb2, 0xff, 0xfd, 0xa6, 0x19, 0x93, 0xf3, 0x3e, 0xfa, - 0xc8, 0x76, 0x58, 0xb9, 0x86, 0xb1, 0x4e, 0x7e, 0x2c, 0xb5, 0x7f, 0xff, - 0x6e, 0xfc, 0xc1, 0xef, 0xf7, 0xf6, 0x44, 0x52, 0x75, 0x8b, 0xff, 0xce, - 0x73, 0x27, 0xe6, 0x61, 0x4b, 0x8d, 0x62, 0xa2, 0x46, 0x3f, 0xc8, 0x09, - 0x76, 0xd1, 0xcb, 0x17, 0xd3, 0x10, 0xb6, 0x58, 0xa3, 0x9b, 0xaf, 0x0a, - 0xdc, 0x0d, 0xd6, 0x2c, 0xeb, 0x16, 0xe2, 0xc5, 0x8d, 0xe1, 0xbc, 0xf0, - 0xc8, 0x84, 0x6f, 0xed, 0x9b, 0x3d, 0x87, 0x58, 0xbf, 0x7d, 0xf5, 0x3f, - 0x58, 0xa7, 0x44, 0x5b, 0x1a, 0x88, 0xba, 0xf0, 0x1b, 0x75, 0x8b, 0xff, - 0x79, 0x80, 0x67, 0x89, 0x81, 0xc5, 0x8b, 0xde, 0x29, 0x58, 0xa2, 0x3d, - 0xc0, 0x90, 0x2f, 0xf1, 0x63, 0xeb, 0x3d, 0x2b, 0x17, 0xf6, 0x3e, 0xb3, - 0xd2, 0xb1, 0x78, 0xa7, 0xe6, 0x1e, 0xe9, 0x18, 0xdf, 0xe9, 0xf7, 0x0c, - 0x1b, 0x04, 0xb1, 0x58, 0x8e, 0x71, 0x3f, 0xf6, 0x32, 0xbf, 0xfe, 0x6e, - 0xa0, 0x1f, 0x01, 0x82, 0xde, 0x48, 0x0b, 0x17, 0xe1, 0xe1, 0xe4, 0x6b, - 0x16, 0x6d, 0x1f, 0xd9, 0x29, 0xdf, 0xf7, 0xe2, 0x6f, 0xb9, 0xd8, 0x6b, - 0x17, 0xa2, 0xe4, 0xac, 0x53, 0x9e, 0xc0, 0x47, 0x57, 0xff, 0xdf, 0x3b, - 0x02, 0x7e, 0x1f, 0x1c, 0x13, 0xf5, 0x8b, 0xff, 0xda, 0x03, 0x0c, 0xcc, - 0xfc, 0x96, 0xdd, 0xcb, 0x17, 0xe2, 0x6d, 0xa7, 0xcb, 0x14, 0xe8, 0xc8, - 0xfa, 0x8f, 0x13, 0xef, 0xdb, 0x37, 0x32, 0x0b, 0x17, 0xff, 0xc3, 0xce, - 0xcd, 0xa8, 0x83, 0x83, 0x79, 0x8e, 0xb1, 0x76, 0x47, 0xac, 0x54, 0xa2, - 0x5d, 0xca, 0x74, 0xa9, 0x7f, 0xc1, 0x97, 0x21, 0x85, 0x9d, 0x2c, 0x5f, - 0xcd, 0xd0, 0x0e, 0xfc, 0x58, 0xb1, 0xab, 0x17, 0xff, 0xff, 0xdd, 0x3f, - 0xc6, 0x53, 0xdd, 0x3d, 0x67, 0x66, 0xf6, 0x7c, 0xb3, 0xdf, 0x75, 0x8b, - 0xf6, 0xb3, 0xb0, 0xe5, 0x62, 0xfe, 0x7f, 0x4c, 0x4d, 0xd9, 0x62, 0xa5, - 0x77, 0x03, 0x68, 0xd8, 0x77, 0x85, 0x67, 0x4f, 0xd1, 0x43, 0xab, 0x50, - 0xc6, 0x39, 0x77, 0xce, 0x80, 0x5e, 0x42, 0x7e, 0x84, 0x0f, 0x62, 0xab, - 0xff, 0xd3, 0xad, 0xdc, 0x2d, 0x4f, 0x50, 0x73, 0xac, 0x5f, 0xce, 0x13, - 0x45, 0x27, 0x58, 0xbd, 0xdd, 0x3c, 0x58, 0xae, 0x22, 0x73, 0xc9, 0xa2, - 0x2f, 0xb4, 0x67, 0x78, 0xfa, 0x12, 0xfd, 0xe9, 0xb4, 0x68, 0x93, 0x1b, - 0x42, 0xbb, 0xbe, 0x13, 0x46, 0xb1, 0x89, 0xa5, 0x85, 0xed, 0x1e, 0x24, - 0x23, 0xc4, 0x1c, 0x6c, 0xb9, 0x39, 0xe5, 0xbc, 0x6b, 0x7d, 0x43, 0x4d, - 0xe7, 0x3e, 0x63, 0xe3, 0x04, 0x8a, 0x78, 0x8f, 0x52, 0x93, 0xcf, 0x1d, - 0x5f, 0xe7, 0x10, 0x1a, 0x5d, 0x98, 0x25, 0xd7, 0x14, 0xba, 0x2e, 0x4e, - 0xd4, 0x7a, 0x90, 0x92, 0x28, 0xfd, 0x3b, 0x35, 0x47, 0x43, 0xa0, 0x39, - 0xde, 0xee, 0xe8, 0xd8, 0xaf, 0xda, 0xdd, 0x9b, 0x75, 0x49, 0x38, 0x5f, - 0xdf, 0x73, 0x93, 0x1a, 0xb1, 0x68, 0xcc, 0x3e, 0x57, 0x37, 0xbd, 0x1a, - 0xbd, 0x1a, 0x96, 0x2f, 0xe9, 0x3e, 0x77, 0x4f, 0x96, 0x2f, 0xbf, 0x24, + 0x66, 0xb6, 0xfa, 0xc5, 0xff, 0x42, 0x5a, 0x18, 0x6b, 0xe9, 0x62, 0xec, + 0xdd, 0x62, 0xd2, 0xb1, 0x58, 0x6a, 0x42, 0x18, 0xbc, 0xfd, 0x81, 0x62, + 0xfd, 0xdc, 0x3e, 0xe0, 0x58, 0xbf, 0xfb, 0x4d, 0xb8, 0x05, 0xcf, 0x4f, + 0x61, 0x2c, 0x5c, 0x46, 0xac, 0x59, 0x96, 0x2f, 0xb7, 0x66, 0xdd, 0x52, + 0x48, 0x17, 0xf3, 0x9a, 0x59, 0xd3, 0x16, 0x2b, 0x11, 0x13, 0x10, 0xc6, + 0x84, 0x7e, 0x63, 0x7e, 0x6d, 0x6c, 0x00, 0x96, 0x2f, 0xf4, 0x3c, 0xe1, + 0x70, 0x0e, 0xb1, 0x7e, 0xea, 0xc3, 0xb7, 0x6b, 0x17, 0xed, 0xff, 0x2f, + 0xa5, 0x8a, 0xec, 0xf5, 0x63, 0xcb, 0x2f, 0x66, 0x6e, 0xb1, 0x73, 0xfd, + 0x62, 0xff, 0xe7, 0xe3, 0xf4, 0xfb, 0x1f, 0x53, 0xc5, 0x8a, 0xc3, 0xdd, + 0x61, 0x7b, 0xc0, 0xe3, 0xac, 0x5f, 0xf9, 0xa3, 0xa4, 0xb7, 0xcf, 0x7d, + 0xd6, 0x2f, 0xfd, 0x9f, 0x7e, 0x9f, 0xcc, 0x2d, 0xd6, 0x2f, 0xec, 0xfe, + 0x7d, 0xcd, 0x58, 0xbf, 0x7a, 0x7a, 0x3f, 0x45, 0x8b, 0xcd, 0x08, 0xc9, + 0x57, 0x4c, 0x32, 0xac, 0x86, 0x96, 0xe7, 0xbd, 0x95, 0xbc, 0x22, 0xa2, + 0x26, 0xfb, 0xd3, 0x10, 0x10, 0xef, 0x10, 0x7c, 0x81, 0xd0, 0xba, 0xf7, + 0x3e, 0x25, 0x8b, 0xa4, 0x35, 0x8a, 0xc3, 0x6c, 0x10, 0xf5, 0xfd, 0x25, + 0xce, 0x39, 0xd6, 0x2b, 0x0f, 0x39, 0xc8, 0x6f, 0xf3, 0x8c, 0x5e, 0xe1, + 0xc9, 0x62, 0xe8, 0xe3, 0xac, 0x5f, 0x04, 0x79, 0xe2, 0xc5, 0xff, 0xf8, + 0x6f, 0x18, 0x2f, 0x6f, 0xfc, 0xf7, 0xf3, 0xbe, 0x2c, 0x5e, 0x62, 0x82, + 0xc5, 0xfc, 0x2d, 0x1b, 0xf6, 0x82, 0xc5, 0xfb, 0xc5, 0x39, 0xda, 0xc5, + 0xa3, 0x25, 0x7f, 0x7f, 0x21, 0x15, 0xb9, 0x1f, 0x66, 0x51, 0x31, 0x68, + 0x84, 0xf2, 0xf1, 0x3f, 0x1a, 0xb3, 0x10, 0x00, 0xd0, 0x43, 0x7d, 0x09, + 0x02, 0x5c, 0x8e, 0x1c, 0x0c, 0xc2, 0xff, 0xe8, 0xc6, 0x84, 0x66, 0x6b, + 0x76, 0x6d, 0xd5, 0x22, 0x91, 0x5b, 0x3a, 0x54, 0xa8, 0x96, 0x4e, 0xbe, + 0xd1, 0xaf, 0x02, 0xb6, 0x48, 0x29, 0x72, 0xfe, 0xa4, 0x05, 0xf5, 0x43, + 0xc6, 0xf3, 0x36, 0xeb, 0x17, 0x02, 0x56, 0x2d, 0xad, 0xcd, 0xa0, 0x07, + 0x6f, 0xf3, 0x36, 0xd9, 0x09, 0x35, 0x62, 0x96, 0x2f, 0x77, 0x21, 0xac, + 0x56, 0xe6, 0xad, 0x83, 0x2f, 0xec, 0xf7, 0x9c, 0x2f, 0x2c, 0x5c, 0xdb, + 0xac, 0x5a, 0x33, 0x11, 0xdf, 0x11, 0x43, 0x2f, 0x91, 0x0f, 0x42, 0xfb, + 0xf9, 0xcb, 0x3f, 0x9b, 0xac, 0x5f, 0xce, 0x5e, 0xc7, 0x1a, 0xc5, 0xd0, + 0xf2, 0xc5, 0xe2, 0x90, 0x96, 0x2e, 0x98, 0xcd, 0x1b, 0x52, 0x18, 0xa8, + 0x22, 0x3f, 0xcc, 0x37, 0xb8, 0x23, 0xac, 0x5a, 0x0b, 0x17, 0x1f, 0xcb, + 0x17, 0x71, 0x96, 0x2f, 0xd9, 0xaf, 0x3e, 0x2c, 0x5d, 0xec, 0x58, 0xb4, + 0x6e, 0xb1, 0x68, 0xc8, 0x27, 0x27, 0xdc, 0x2f, 0x1c, 0x8e, 0x21, 0xe3, + 0x89, 0x00, 0x60, 0x85, 0xfa, 0x13, 0xc7, 0x0b, 0xdf, 0xb9, 0x18, 0x18, + 0xfe, 0xb1, 0x7f, 0x17, 0xa3, 0xb2, 0x74, 0xb1, 0x7f, 0xff, 0xec, 0x0b, + 0x9c, 0xcf, 0xbf, 0x05, 0xb7, 0xe6, 0x0f, 0x1d, 0x87, 0x58, 0xbf, 0xfd, + 0xa9, 0x84, 0x76, 0x7b, 0x8f, 0xed, 0xa0, 0xb1, 0x7f, 0xbd, 0xc9, 0x89, + 0x9b, 0x4b, 0x15, 0x28, 0x83, 0x74, 0xfb, 0xff, 0xec, 0xf3, 0xfc, 0x5f, + 0x67, 0xef, 0x92, 0x6a, 0xc5, 0xe2, 0x68, 0x2c, 0x5d, 0xd1, 0xd6, 0x2f, + 0xfa, 0x5f, 0xdf, 0x9f, 0xc9, 0xd6, 0x2f, 0xd1, 0xb7, 0x5b, 0xae, 0x71, + 0x62, 0xff, 0xf7, 0x1a, 0x0e, 0x6b, 0xc3, 0x01, 0xcc, 0x58, 0xbf, 0xfb, + 0xb0, 0x6b, 0x07, 0x3a, 0x7e, 0xc0, 0xb1, 0x7f, 0x67, 0xdc, 0xa4, 0xeb, + 0x14, 0xb1, 0x7e, 0x78, 0xec, 0xd4, 0xac, 0x5d, 0x87, 0x93, 0x6d, 0xc0, + 0xca, 0xd9, 0x31, 0xe7, 0x4a, 0xd2, 0x3f, 0x53, 0x15, 0xff, 0x85, 0xa8, + 0x64, 0x1c, 0xd3, 0x59, 0x62, 0xfd, 0xad, 0xd9, 0xb7, 0x54, 0x8e, 0xc5, + 0xff, 0xed, 0xa7, 0x7e, 0x4f, 0xb3, 0x5a, 0x9d, 0xd6, 0x2f, 0xd9, 0x02, + 0x9d, 0x96, 0x2f, 0x80, 0xd1, 0xc6, 0xac, 0x5f, 0xf7, 0x54, 0x9e, 0x63, + 0x02, 0x08, 0x25, 0x8a, 0xc3, 0xea, 0x62, 0x7b, 0xf3, 0x6b, 0x7d, 0x62, + 0xc5, 0xff, 0xdf, 0x11, 0xc5, 0xec, 0xe9, 0x82, 0x3a, 0xc5, 0xfe, 0x7e, + 0x71, 0xff, 0x3c, 0x58, 0xad, 0x91, 0x48, 0x32, 0x93, 0xa4, 0x5e, 0xfb, + 0x04, 0xb1, 0x7f, 0xc4, 0xd0, 0x10, 0x0e, 0xd0, 0x58, 0xb6, 0x0c, 0xf5, + 0xfe, 0x3d, 0x7f, 0xff, 0xf7, 0x24, 0xb7, 0x9e, 0x8d, 0xf1, 0xc8, 0xde, + 0x0f, 0xad, 0x84, 0x05, 0x8b, 0xfe, 0x35, 0xfd, 0xc7, 0xdd, 0xb4, 0xb1, + 0x79, 0xa1, 0x19, 0xd7, 0x55, 0xd0, 0xd9, 0x8d, 0x4b, 0x64, 0x1c, 0x41, + 0x73, 0x7d, 0x26, 0xfe, 0x12, 0x4d, 0x0c, 0x42, 0x84, 0x47, 0x09, 0xc3, + 0x75, 0xb4, 0x7a, 0xc5, 0xff, 0xfd, 0x84, 0x4d, 0xef, 0xe7, 0x1b, 0x34, + 0x03, 0xe2, 0xc5, 0x6c, 0x7d, 0xac, 0x2b, 0x7f, 0x3f, 0x42, 0xce, 0x3a, + 0xc5, 0xff, 0xe1, 0x1e, 0x7a, 0x98, 0x65, 0x25, 0x9b, 0xac, 0x54, 0x0f, + 0xe8, 0x65, 0xd7, 0x8a, 0x60, 0xb1, 0x4e, 0x6f, 0xb4, 0x45, 0x79, 0xf5, + 0x05, 0x8b, 0xfd, 0x09, 0xd6, 0xd3, 0xad, 0x96, 0x2f, 0xfd, 0xf2, 0x68, + 0x08, 0x07, 0x68, 0x2c, 0x54, 0x9f, 0xae, 0x1b, 0x5c, 0x13, 0xac, 0x5f, + 0xe6, 0xd9, 0xb3, 0xd8, 0x75, 0x8b, 0xfb, 0x40, 0xc2, 0x6f, 0xac, 0x5f, + 0xff, 0xb3, 0xb8, 0x7e, 0x78, 0xda, 0x9e, 0xaf, 0xb6, 0xeb, 0x16, 0x8c, + 0x96, 0x56, 0x26, 0xc6, 0x10, 0x87, 0xa0, 0xc8, 0x71, 0x45, 0xc7, 0x34, + 0x32, 0x79, 0xd4, 0x5f, 0xc6, 0x6c, 0xd0, 0xda, 0x01, 0x01, 0x42, 0x48, + 0x22, 0x08, 0xe1, 0x80, 0xcc, 0xfa, 0x8b, 0x6e, 0x04, 0x72, 0xc5, 0xf4, + 0x8e, 0x49, 0x62, 0xf9, 0xf5, 0x3d, 0x16, 0x2e, 0xcf, 0xac, 0x5f, 0xfd, + 0x1c, 0xc4, 0x0c, 0xf4, 0x93, 0x81, 0x62, 0xd1, 0x91, 0xe8, 0xbc, 0x21, + 0xbe, 0x10, 0xc7, 0x12, 0x06, 0x2f, 0x7f, 0xf3, 0x1f, 0xf9, 0xbb, 0x7e, + 0x43, 0x82, 0xc5, 0xfb, 0xda, 0xc9, 0x09, 0x62, 0xf3, 0x8d, 0x96, 0x2f, + 0xff, 0x7c, 0x98, 0x0f, 0xe9, 0x3e, 0x9c, 0xd5, 0x8b, 0xff, 0xf6, 0x6f, + 0x3f, 0x93, 0xc1, 0xcd, 0x36, 0x4b, 0xcb, 0x17, 0xff, 0x16, 0x7d, 0xb6, + 0xce, 0x13, 0x76, 0xb1, 0x74, 0x74, 0x60, 0xd3, 0x70, 0x74, 0x6f, 0x94, + 0xb0, 0xe1, 0x25, 0x71, 0x5e, 0xa5, 0xb1, 0x5d, 0x84, 0x7c, 0xd9, 0x09, + 0x23, 0xd2, 0xbc, 0xb9, 0x1e, 0x1c, 0x74, 0x79, 0x37, 0xff, 0x69, 0xbb, + 0x8c, 0x1e, 0x44, 0xcd, 0xb2, 0xc5, 0xff, 0xa3, 0x54, 0x6b, 0xeb, 0x35, + 0xac, 0x08, 0x99, 0x62, 0xff, 0xff, 0xe2, 0x93, 0xb9, 0x03, 0x36, 0x6f, + 0x70, 0x79, 0x9f, 0x6e, 0xc2, 0x58, 0xbf, 0xa0, 0xda, 0xdb, 0xe2, 0x58, + 0xbf, 0x72, 0x40, 0x1e, 0xcb, 0x16, 0xc7, 0x46, 0x6c, 0x4e, 0x5c, 0x30, + 0xbf, 0xf3, 0xeb, 0xed, 0xcf, 0xcb, 0x69, 0x62, 0xff, 0xa4, 0xbb, 0x07, + 0x39, 0x20, 0x58, 0xbe, 0xd6, 0x05, 0xe5, 0x8a, 0xfa, 0x27, 0x38, 0x7d, + 0xd0, 0xea, 0xff, 0x6b, 0x38, 0x42, 0x60, 0xd6, 0x2f, 0xff, 0xff, 0xfb, + 0xef, 0xe6, 0x6e, 0xf9, 0xce, 0x49, 0xe7, 0xf9, 0x9b, 0x61, 0x67, 0x7e, + 0xe4, 0xf6, 0xb1, 0x7f, 0xa0, 0xde, 0x8a, 0x0f, 0xe5, 0x8b, 0xfd, 0x30, + 0x7f, 0x39, 0x41, 0x62, 0xff, 0xf0, 0xff, 0x30, 0xdb, 0x02, 0xf4, 0xf6, + 0x12, 0xc5, 0xff, 0xff, 0xb7, 0x16, 0xd9, 0xd2, 0x7b, 0xc1, 0xb4, 0x03, + 0x3f, 0x31, 0x86, 0xb1, 0x7f, 0x61, 0xa6, 0xe0, 0x67, 0x58, 0xbf, 0xa7, + 0x40, 0xdf, 0x7c, 0x58, 0xbf, 0x38, 0x7b, 0x08, 0x96, 0x2a, 0x08, 0x8b, + 0xf9, 0x8f, 0x0c, 0x2e, 0x60, 0x2c, 0x5f, 0xf3, 0xc1, 0xfe, 0x23, 0x9d, + 0xd6, 0x2b, 0xe7, 0xa1, 0xe1, 0x7b, 0xbd, 0x19, 0x1b, 0x2e, 0x9f, 0x8e, + 0x31, 0xec, 0x86, 0x89, 0xa6, 0x5b, 0x9a, 0x45, 0x09, 0x5d, 0x1a, 0xb1, + 0x97, 0x13, 0xfd, 0x0f, 0xd0, 0xe1, 0x01, 0x61, 0xba, 0xf2, 0xa3, 0x4e, + 0xc4, 0xdf, 0xf7, 0x1c, 0xe6, 0x07, 0xac, 0xd9, 0x62, 0xe6, 0x1a, 0xc5, + 0x76, 0x7a, 0x9c, 0x3d, 0xbc, 0x59, 0xe5, 0x8a, 0x88, 0xdf, 0x91, 0x1d, + 0xfd, 0x9a, 0x7f, 0x7e, 0x56, 0x2f, 0xe7, 0x20, 0x0f, 0x09, 0x62, 0xfb, + 0x76, 0x6d, 0xd5, 0x21, 0x61, 0x7f, 0x3e, 0x98, 0xb7, 0x95, 0x8b, 0xe7, + 0x22, 0x95, 0x8a, 0x82, 0x2a, 0xb4, 0x59, 0xf3, 0x1e, 0x85, 0xb7, 0xe8, + 0x85, 0xb7, 0x54, 0xac, 0x5f, 0x67, 0x80, 0xeb, 0x17, 0xfe, 0x68, 0x46, + 0x66, 0xb7, 0x66, 0xdd, 0x52, 0x2e, 0x97, 0xf9, 0x87, 0x25, 0xf9, 0xe2, + 0xc5, 0xd3, 0x1e, 0xb1, 0x73, 0x1a, 0xb1, 0x50, 0x36, 0x5e, 0x1a, 0xbf, + 0x3c, 0x83, 0x09, 0x62, 0xfc, 0xcf, 0xbc, 0xfd, 0x62, 0xf7, 0xf7, 0x75, + 0x8b, 0xf3, 0x73, 0xcf, 0xd1, 0x62, 0xf3, 0x8b, 0x65, 0x8a, 0x93, 0xe6, + 0x34, 0x7b, 0x45, 0x57, 0xff, 0xf6, 0x0f, 0xf2, 0x1c, 0x67, 0x89, 0x81, + 0xce, 0x48, 0x12, 0x2d, 0x19, 0x2a, 0xe7, 0x86, 0x43, 0x90, 0xd7, 0x73, + 0xfd, 0x17, 0x1c, 0x8b, 0xea, 0x0c, 0xc8, 0x44, 0x3c, 0x26, 0xf4, 0x23, + 0xa3, 0x8b, 0xef, 0xfe, 0x3b, 0x42, 0x33, 0x35, 0xbb, 0x36, 0xea, 0x91, + 0x88, 0xbf, 0xbf, 0x25, 0xdc, 0x4c, 0xb1, 0x7f, 0xcc, 0xc5, 0x9e, 0x7e, + 0xc2, 0x58, 0xbf, 0x8f, 0xce, 0x3e, 0x04, 0xb1, 0x7f, 0x3c, 0x73, 0x83, + 0x06, 0xb1, 0x52, 0x7b, 0xec, 0x5f, 0x7f, 0xfe, 0x26, 0x01, 0xdc, 0xcc, + 0xfb, 0xcc, 0x1a, 0x0b, 0x17, 0xd9, 0xbc, 0xc6, 0x4a, 0x67, 0x67, 0x2f, + 0xfc, 0x26, 0x3c, 0x41, 0x51, 0x89, 0xf6, 0xfe, 0x39, 0x1b, 0xfd, 0xf6, + 0x3c, 0x63, 0x08, 0x6b, 0x16, 0x1a, 0xc5, 0xe7, 0x2d, 0x96, 0x2f, 0xda, + 0xdd, 0x9b, 0x75, 0x49, 0x52, 0x5b, 0x16, 0x2e, 0x6f, 0x2c, 0x56, 0xc8, + 0x8e, 0x18, 0x96, 0x0e, 0x9a, 0x6e, 0xc2, 0x37, 0xfd, 0xad, 0x39, 0x16, + 0x0b, 0x75, 0x8b, 0xff, 0x09, 0xb5, 0x02, 0xc0, 0x98, 0x0b, 0x17, 0xfb, + 0xe1, 0x8e, 0x7d, 0x23, 0x58, 0xbf, 0xf9, 0xb9, 0xa7, 0x0b, 0xdf, 0x7d, + 0x41, 0x62, 0xfc, 0xda, 0xd3, 0x84, 0xb1, 0x7f, 0xda, 0x6f, 0xf7, 0x0c, + 0xf4, 0x64, 0xa6, 0x38, 0x33, 0x9c, 0x3f, 0xf9, 0xa8, 0x48, 0xd5, 0x18, + 0x9f, 0x13, 0x46, 0xcd, 0x7f, 0xfb, 0x38, 0xf8, 0x5e, 0x2c, 0xd9, 0x89, + 0x62, 0xff, 0xbb, 0x83, 0xe8, 0x64, 0xdf, 0x58, 0xbf, 0xfb, 0x34, 0xc6, + 0x87, 0x9a, 0xef, 0x92, 0xb1, 0x7f, 0xf0, 0x24, 0xb7, 0x6f, 0x37, 0x60, + 0x8c, 0x24, 0x64, 0x79, 0x1c, 0x33, 0xab, 0xff, 0x46, 0x7e, 0x4f, 0x83, + 0x92, 0xf2, 0xc5, 0xef, 0x3e, 0xcb, 0x17, 0xfe, 0x68, 0x46, 0x66, 0xb7, + 0x66, 0xdd, 0x52, 0x3a, 0x17, 0xe7, 0xec, 0x07, 0x95, 0x8b, 0x8b, 0xcb, + 0x15, 0xb1, 0xe0, 0x31, 0x4d, 0xf0, 0xb8, 0xe0, 0x58, 0xbc, 0xfd, 0x84, + 0xb1, 0x40, 0x3c, 0x2e, 0x11, 0xdf, 0xb9, 0x9f, 0x2c, 0x58, 0xbe, 0xf3, + 0xc1, 0xd6, 0x28, 0xd4, 0xdf, 0x4e, 0x3c, 0xd0, 0x90, 0x03, 0x27, 0x88, + 0x83, 0x27, 0xbc, 0x2e, 0xe0, 0xb1, 0x7c, 0xf9, 0xae, 0x8b, 0x17, 0x8b, + 0xdc, 0x58, 0xbf, 0x17, 0x88, 0x5b, 0x2c, 0x53, 0x1e, 0x30, 0x87, 0x6f, + 0xd9, 0xef, 0x3f, 0x6b, 0x17, 0xdb, 0x14, 0xec, 0xb1, 0x7e, 0xc2, 0xd9, + 0x86, 0xb1, 0x7c, 0x79, 0x36, 0x32, 0x53, 0x1f, 0x8f, 0x1f, 0x3b, 0x51, + 0x10, 0x88, 0xa7, 0xa1, 0x25, 0xff, 0x80, 0x2e, 0x46, 0x0c, 0x26, 0x28, + 0x2c, 0x54, 0x62, 0xa3, 0x77, 0x8d, 0xf4, 0x0e, 0xd7, 0xff, 0x9f, 0x4d, + 0xdf, 0xd9, 0xfb, 0xe4, 0x9a, 0xb1, 0x7f, 0x9d, 0xb5, 0x30, 0x6e, 0x8b, + 0x17, 0xce, 0x40, 0x75, 0x8b, 0xf4, 0x53, 0x14, 0xf1, 0x62, 0xfe, 0x0b, + 0x1f, 0xa6, 0x12, 0xc5, 0x39, 0xec, 0xf0, 0xaa, 0xf3, 0xfe, 0x56, 0x23, + 0x0d, 0x0d, 0xff, 0xc2, 0xe7, 0xa7, 0xb8, 0xc1, 0x44, 0xe7, 0x58, 0xa8, + 0x26, 0x2a, 0x78, 0x4d, 0xfc, 0xbe, 0xff, 0x6a, 0x01, 0xc3, 0x3e, 0xcb, + 0x14, 0xb1, 0x4e, 0x78, 0x3c, 0x35, 0xb6, 0x96, 0x2b, 0xe6, 0xcd, 0x88, + 0x6f, 0xd3, 0xcf, 0x3e, 0xcb, 0x17, 0xdb, 0xb3, 0x6e, 0xa9, 0x1d, 0xca, + 0x34, 0xf6, 0xb4, 0x53, 0x7f, 0xff, 0x49, 0xc5, 0xa8, 0xa4, 0xe6, 0x1f, + 0x3d, 0xc7, 0xe2, 0xc5, 0xe6, 0x84, 0x66, 0x22, 0x07, 0xc4, 0x77, 0xe7, + 0xe9, 0xa9, 0x82, 0xc5, 0xfb, 0xc2, 0x63, 0xba, 0x45, 0xc7, 0x8e, 0x58, + 0xbf, 0xb1, 0xc6, 0xcc, 0x6a, 0xc5, 0xff, 0x8a, 0x7d, 0x9c, 0xcc, 0xee, + 0x0b, 0x17, 0xff, 0xe2, 0xd6, 0x05, 0x91, 0xf3, 0xf9, 0x72, 0x1c, 0xac, + 0x54, 0x17, 0x27, 0x86, 0x99, 0x91, 0xa4, 0xef, 0x0a, 0xa3, 0xc3, 0xef, + 0xe6, 0xcc, 0x54, 0x45, 0x1c, 0x1b, 0xf1, 0x68, 0x67, 0xd7, 0xf1, 0x66, + 0xd9, 0x07, 0x58, 0xbb, 0x80, 0x58, 0xbf, 0x0e, 0x61, 0x31, 0x9b, 0x9e, + 0x28, 0x45, 0xb7, 0xee, 0x14, 0x83, 0x8b, 0x17, 0xfc, 0x36, 0x87, 0xde, + 0x29, 0x8f, 0x58, 0xbc, 0x58, 0x35, 0x8b, 0xe1, 0x7d, 0xf4, 0xb1, 0x74, + 0xc6, 0x4a, 0x29, 0x30, 0xa0, 0x07, 0xb1, 0xc3, 0x95, 0x18, 0xa8, 0x8b, + 0x21, 0xde, 0x50, 0xe7, 0xbf, 0xfd, 0x20, 0x3b, 0x42, 0x33, 0x83, 0x2c, + 0xfa, 0xc5, 0xff, 0x7b, 0x8e, 0x77, 0xf0, 0x19, 0x62, 0xef, 0x4a, 0xc5, + 0xed, 0xa7, 0x75, 0x8b, 0xb9, 0x19, 0x27, 0xdf, 0xb9, 0xcb, 0x8b, 0xdf, + 0xfe, 0x8c, 0x3b, 0x42, 0x33, 0x35, 0xbb, 0x36, 0xea, 0x92, 0x14, 0xbf, + 0xfb, 0xcf, 0xcd, 0xb0, 0x2f, 0x73, 0x36, 0x58, 0xbf, 0xff, 0xef, 0xb3, + 0xf3, 0x98, 0x40, 0x8e, 0xcd, 0x08, 0xd0, 0xda, 0x3d, 0x62, 0xfd, 0xad, + 0x4e, 0xf1, 0x98, 0x8b, 0x6e, 0x24, 0x5d, 0x3a, 0x58, 0xbd, 0x39, 0xa5, + 0x8b, 0xf0, 0x27, 0x6c, 0x09, 0x62, 0xff, 0xbd, 0x0c, 0x27, 0x1c, 0x67, + 0x36, 0x3d, 0xd8, 0x85, 0xc0, 0x39, 0x58, 0x98, 0x0b, 0x42, 0x82, 0xf8, + 0x9b, 0x5d, 0x16, 0x2e, 0x60, 0x96, 0x2d, 0xb2, 0xc5, 0x1c, 0xd5, 0x90, + 0xc5, 0xff, 0xbe, 0xe7, 0x68, 0x61, 0xdb, 0xb5, 0x8b, 0x46, 0x4a, 0x2b, + 0xb6, 0x4f, 0xdc, 0x82, 0xed, 0x9d, 0x62, 0xff, 0xff, 0xff, 0x8e, 0xc4, + 0x3f, 0x87, 0xc3, 0x3e, 0xcf, 0xe7, 0xe3, 0x8b, 0xaf, 0x84, 0x98, 0x53, + 0x9b, 0xac, 0x5f, 0xfe, 0xf8, 0xbd, 0x25, 0x9b, 0x1a, 0x29, 0x89, 0x62, + 0xfe, 0x11, 0xce, 0xd0, 0x8c, 0x94, 0xc0, 0x30, 0x63, 0x78, 0x4d, 0xdf, + 0xff, 0xf8, 0xb3, 0xa3, 0xfc, 0x51, 0x9b, 0xfd, 0xfe, 0x53, 0x9a, 0xc3, + 0xac, 0x54, 0x15, 0x02, 0xfe, 0x33, 0xae, 0x2d, 0xdf, 0x79, 0xbb, 0xe2, + 0xc5, 0xf8, 0x5d, 0xf9, 0xf7, 0x58, 0xbe, 0x2c, 0x0b, 0xeb, 0x17, 0xf4, + 0x1b, 0x5b, 0x7c, 0x4b, 0x17, 0xee, 0x48, 0x03, 0xd9, 0x62, 0xd9, 0x11, + 0xed, 0xf0, 0xc2, 0xfb, 0x72, 0x68, 0x2c, 0x5c, 0xd1, 0xcb, 0x17, 0xce, + 0x52, 0x75, 0x8b, 0xfc, 0x39, 0x22, 0xcc, 0xd9, 0x62, 0xf8, 0x18, 0xc4, + 0xb1, 0x7f, 0xbc, 0x52, 0x03, 0xb4, 0x16, 0x2a, 0x51, 0x0d, 0x86, 0x4e, + 0x43, 0x7f, 0xb0, 0xa7, 0x35, 0x3b, 0x2c, 0x5f, 0xfd, 0xd1, 0xfd, 0x3f, + 0x2c, 0xf6, 0xa5, 0x62, 0xfc, 0xda, 0x04, 0x76, 0x2c, 0x5e, 0x70, 0xbc, + 0xb1, 0x58, 0x88, 0xe7, 0x45, 0xe1, 0x5d, 0xff, 0x1e, 0x28, 0x36, 0xb6, + 0xf8, 0x96, 0x2f, 0x48, 0x23, 0x25, 0x59, 0x8e, 0xc4, 0x90, 0x2b, 0x1b, + 0xf3, 0x94, 0x1c, 0x8d, 0x86, 0x8a, 0x14, 0xfc, 0x2d, 0xf4, 0x30, 0x03, + 0x2e, 0xa7, 0x5c, 0x1f, 0x29, 0x6d, 0x37, 0xff, 0xe1, 0x6f, 0x18, 0xde, + 0xfe, 0x1e, 0x74, 0x52, 0x05, 0x8b, 0xfe, 0x3b, 0x73, 0x02, 0x92, 0x1a, + 0xc5, 0xff, 0x9a, 0x11, 0x99, 0xad, 0xd9, 0xb7, 0x54, 0x92, 0x45, 0xfd, + 0xf2, 0xc1, 0xfc, 0x4b, 0x17, 0x60, 0xd6, 0x2b, 0x0f, 0x17, 0xe5, 0xd7, + 0xa4, 0x86, 0xb1, 0x68, 0xcd, 0x93, 0x64, 0xc5, 0x93, 0x9c, 0xfa, 0x12, + 0xa1, 0x10, 0xdf, 0xff, 0xc2, 0xe4, 0xe1, 0x78, 0x98, 0xdc, 0x8a, 0x48, + 0x6b, 0x17, 0xf1, 0x67, 0x03, 0xc8, 0x96, 0x2d, 0x84, 0x88, 0x9e, 0x8b, + 0x57, 0x1c, 0x96, 0x2f, 0xfe, 0x8b, 0xec, 0x7f, 0x7e, 0x7c, 0x23, 0xac, + 0x5f, 0x61, 0x4e, 0xcb, 0x15, 0x87, 0xd3, 0xa4, 0x7b, 0xd9, 0xc8, 0xc2, + 0x46, 0x57, 0x0a, 0x43, 0x84, 0x05, 0x4b, 0xa3, 0xf6, 0xda, 0x71, 0x8e, + 0x12, 0xa9, 0x70, 0xb7, 0x79, 0x54, 0xfd, 0xc3, 0xd2, 0x26, 0xdd, 0x4b, + 0xf5, 0x3c, 0xf7, 0xd7, 0xcf, 0x5a, 0x17, 0x80, 0x3d, 0x29, 0x42, 0xde, + 0x9e, 0xf9, 0x14, 0x71, 0xf1, 0xd1, 0xd6, 0xdd, 0x1b, 0xf5, 0xd5, 0x62, + 0xf7, 0xdf, 0x65, 0x8b, 0xed, 0xd9, 0xb7, 0x54, 0x84, 0x85, 0xff, 0xf9, + 0xf5, 0xf6, 0x32, 0x2f, 0xce, 0xdd, 0x7e, 0xa6, 0x39, 0x62, 0xb4, 0x89, + 0x2f, 0x98, 0xdf, 0xff, 0xef, 0xce, 0xdd, 0x7e, 0xa6, 0x3a, 0x33, 0x4f, + 0x27, 0xdb, 0x02, 0x58, 0xbf, 0x3f, 0xbf, 0x87, 0x58, 0xbd, 0xc6, 0xd9, + 0x62, 0xd1, 0x91, 0xba, 0x75, 0xb2, 0x4b, 0x90, 0xb0, 0x88, 0x8f, 0xaf, + 0x6f, 0xe1, 0x45, 0xed, 0x36, 0x96, 0x2f, 0xfc, 0xd0, 0x8c, 0xcd, 0x6e, + 0xcd, 0xba, 0xa4, 0x5e, 0x2e, 0xe9, 0xf5, 0x8b, 0xe6, 0xf3, 0x6c, 0xb1, + 0x68, 0xc7, 0x45, 0x51, 0xc7, 0x49, 0x42, 0x38, 0x6a, 0xfe, 0xeb, 0xae, + 0x68, 0x0c, 0x75, 0x8b, 0xff, 0xa7, 0xa3, 0x44, 0xfa, 0xee, 0x13, 0x12, + 0xc5, 0xee, 0xb0, 0xe0, 0x58, 0xbf, 0x87, 0xfc, 0x72, 0x35, 0x62, 0xf1, + 0xca, 0x56, 0x2b, 0x87, 0x94, 0x19, 0x75, 0xef, 0x31, 0xab, 0x15, 0xd6, + 0x9e, 0x0b, 0x11, 0xdd, 0x11, 0x2c, 0x5f, 0xfb, 0xae, 0x33, 0x8c, 0x52, + 0x53, 0x05, 0x8b, 0xfe, 0x32, 0x7c, 0xfa, 0x9e, 0x91, 0x2c, 0x5f, 0xe2, + 0xe9, 0xb0, 0xa2, 0x98, 0xf5, 0x8b, 0xff, 0xdf, 0x9e, 0x06, 0x39, 0xd4, + 0x58, 0x40, 0x58, 0xbf, 0xf3, 0x10, 0xff, 0x3e, 0xce, 0x9c, 0x58, 0xbc, + 0x2f, 0x71, 0x62, 0x9c, 0xf7, 0xb4, 0x81, 0x7f, 0x0d, 0xcd, 0x62, 0x02, + 0xc5, 0xfd, 0xa6, 0x0a, 0x47, 0x2b, 0x17, 0x83, 0xdb, 0xa9, 0x62, 0xfd, + 0x24, 0x01, 0x9d, 0x62, 0xff, 0x61, 0xcc, 0x8d, 0x3a, 0xc3, 0x81, 0x62, + 0xf8, 0x07, 0x7e, 0x2c, 0x50, 0xcf, 0x8f, 0x48, 0x17, 0x00, 0xeb, 0x17, + 0xa4, 0xbb, 0x58, 0xbf, 0x78, 0x33, 0x94, 0xac, 0x59, 0xf4, 0x7b, 0xdf, + 0x18, 0x21, 0xdb, 0xff, 0xdf, 0xe9, 0x24, 0x08, 0xfc, 0x1e, 0x6b, 0xb5, + 0x8b, 0xfc, 0xfa, 0x61, 0xb9, 0x1a, 0xb1, 0x74, 0xf9, 0x62, 0xff, 0x6d, + 0xa9, 0xee, 0x0e, 0x75, 0x8b, 0xf9, 0xfa, 0xbd, 0x9d, 0x38, 0xb1, 0x4c, + 0x7d, 0x3e, 0x36, 0xbf, 0xfc, 0x21, 0xbe, 0x83, 0x8b, 0xa8, 0x4c, 0x51, + 0x2c, 0x5e, 0xd4, 0xc1, 0x62, 0xe2, 0x89, 0x62, 0xb0, 0xda, 0x88, 0x76, + 0xa0, 0x9f, 0xeb, 0x99, 0xfd, 0x40, 0x06, 0x65, 0x08, 0x0e, 0x10, 0xfa, + 0x10, 0xd7, 0xf0, 0x3f, 0x3a, 0x73, 0xac, 0x58, 0xeb, 0x17, 0x31, 0xd6, + 0x2e, 0x7e, 0xa6, 0x35, 0x3d, 0x42, 0x56, 0xd2, 0xc5, 0xff, 0x72, 0x7a, + 0x37, 0xe7, 0xb8, 0x96, 0x2b, 0x0f, 0x3e, 0x21, 0x2a, 0x94, 0x7c, 0xe9, + 0x5d, 0xa1, 0x01, 0x7e, 0x8a, 0x7b, 0xf3, 0xac, 0x5e, 0xf0, 0x7b, 0x2c, + 0x54, 0x9e, 0x56, 0x15, 0x5f, 0xf9, 0xb8, 0x1f, 0x42, 0x9f, 0x37, 0xd6, + 0x2f, 0xf8, 0xa6, 0x2d, 0x34, 0x4d, 0xc5, 0x8b, 0x83, 0x3a, 0xc5, 0x41, + 0x12, 0x9d, 0x10, 0x7a, 0x8e, 0xae, 0xf8, 0x16, 0x29, 0xcf, 0x35, 0x8d, + 0x6f, 0xe9, 0x3b, 0x9a, 0xe1, 0x2c, 0x5f, 0xa6, 0x2e, 0x08, 0x96, 0x2f, + 0xa2, 0xe0, 0x89, 0x62, 0xe6, 0x39, 0x87, 0x9b, 0x25, 0x37, 0xdb, 0x67, + 0x0e, 0xb1, 0x7d, 0xdf, 0x27, 0xeb, 0x14, 0x33, 0xf5, 0xc2, 0xd7, 0x24, + 0xbf, 0x6a, 0x7c, 0xfd, 0x16, 0x2f, 0xdb, 0x37, 0x18, 0x0b, 0x17, 0xfa, + 0x64, 0xbc, 0x1f, 0x70, 0x58, 0xa7, 0x44, 0x43, 0x15, 0x08, 0xa6, 0xff, + 0xe8, 0x8c, 0x0c, 0xa7, 0xa3, 0x74, 0x98, 0x96, 0x29, 0x62, 0xd1, 0x2c, + 0x5f, 0xf9, 0xb6, 0x6e, 0x9c, 0x92, 0x6e, 0xa5, 0x8b, 0xff, 0x7b, 0x99, + 0xc9, 0x2f, 0x60, 0x16, 0x2f, 0xbd, 0x9a, 0x89, 0x62, 0xf7, 0x9b, 0xa2, + 0xc5, 0x61, 0xe1, 0xb1, 0x25, 0x4a, 0x28, 0x61, 0x08, 0x1b, 0xc7, 0xce, + 0xa5, 0x8b, 0xba, 0x62, 0xc5, 0xe8, 0xf6, 0x35, 0x62, 0x4b, 0x9b, 0xf3, + 0x72, 0x7a, 0x62, 0xc5, 0x0d, 0x39, 0xc8, 0xa1, 0xc9, 0xa2, 0x7f, 0x1c, + 0xf4, 0x2f, 0xa9, 0x54, 0xb5, 0x89, 0x9a, 0x0c, 0x68, 0xeb, 0xee, 0xd4, + 0xac, 0x57, 0x58, 0xcc, 0x55, 0xd8, 0xf6, 0x07, 0x63, 0x85, 0x56, 0x10, + 0x9a, 0x5d, 0xb9, 0x77, 0x64, 0x6f, 0x08, 0xb8, 0xa5, 0x3e, 0xea, 0x36, + 0x63, 0xbe, 0xfe, 0x30, 0x10, 0x10, 0x14, 0x3c, 0x7d, 0x0b, 0x5e, 0x92, + 0xa2, 0x3a, 0x90, 0xae, 0xc2, 0x58, 0xbf, 0x05, 0x31, 0xf2, 0x75, 0x8b, + 0xf8, 0xce, 0x7f, 0x1f, 0xcb, 0x17, 0xfe, 0xef, 0x9c, 0xcf, 0xbf, 0x05, + 0xb2, 0xc5, 0x0d, 0x16, 0x78, 0x2c, 0xe5, 0x82, 0x2f, 0xb7, 0x6b, 0x17, + 0xc1, 0xf4, 0x7e, 0xa5, 0x8b, 0xdd, 0x1f, 0xa9, 0x62, 0xfd, 0xfc, 0xea, + 0x11, 0x18, 0x79, 0x61, 0x94, 0xdf, 0xe6, 0xf6, 0xc2, 0x8a, 0x63, 0xd6, + 0x2f, 0xfe, 0xc3, 0x87, 0xd1, 0xbd, 0x87, 0x9e, 0x2c, 0x50, 0x11, 0x01, + 0xc3, 0x9b, 0xfa, 0x4e, 0x3f, 0xcf, 0x16, 0x2e, 0x98, 0x2c, 0x50, 0xd3, + 0x89, 0xc5, 0xe7, 0x86, 0x19, 0x11, 0xf0, 0xba, 0xfd, 0xdb, 0x7d, 0xe2, + 0x58, 0xbf, 0x9d, 0xb4, 0x08, 0xec, 0x58, 0xbf, 0xfc, 0x64, 0xfc, 0xc0, + 0xe2, 0x06, 0x6a, 0x7e, 0xb1, 0x5a, 0x45, 0x4f, 0x8a, 0xba, 0x8c, 0x2f, + 0xe2, 0x17, 0xa2, 0x93, 0x56, 0x2f, 0x75, 0xef, 0xa5, 0x8a, 0x63, 0xd2, + 0x11, 0x85, 0xff, 0xd8, 0xfd, 0xf3, 0xd3, 0xb1, 0xda, 0x0b, 0x17, 0xe9, + 0x03, 0xf7, 0xc5, 0x8a, 0xc4, 0xc5, 0x5e, 0x10, 0xba, 0x21, 0x24, 0x6b, + 0xfc, 0x2f, 0x7c, 0xa7, 0x34, 0xb1, 0x7e, 0x2c, 0xd8, 0x3e, 0x8b, 0x17, + 0xd9, 0xb0, 0x7d, 0x16, 0x2f, 0x76, 0x36, 0x30, 0xf4, 0xc8, 0xb2, 0xfb, + 0xbe, 0xa6, 0x25, 0x8a, 0x93, 0xda, 0x63, 0x4b, 0xff, 0xfa, 0x1f, 0x0f, + 0xbf, 0x7d, 0xd8, 0x11, 0xd3, 0xac, 0x25, 0x8b, 0xfd, 0x3f, 0x73, 0x65, + 0xfa, 0x2c, 0x50, 0xd1, 0x6a, 0xe4, 0x1f, 0x60, 0xbf, 0xfa, 0x4b, 0xdd, + 0x45, 0x21, 0x77, 0x0e, 0x2c, 0x5d, 0xd6, 0xc7, 0xac, 0x5f, 0xff, 0x3e, + 0x8c, 0xfc, 0xbf, 0xb8, 0x2d, 0xc5, 0x2b, 0x17, 0xcf, 0xb0, 0x23, 0xd6, + 0x2d, 0xda, 0xc5, 0xe6, 0x6d, 0xd5, 0x24, 0xb9, 0x4b, 0x17, 0xfc, 0xfd, + 0x3f, 0xbb, 0xf3, 0x06, 0xb1, 0x58, 0x88, 0x5d, 0xc4, 0xe2, 0x2a, 0xd0, + 0x65, 0xfd, 0xe2, 0x9e, 0xa6, 0x3a, 0xc5, 0xf8, 0xa7, 0xa9, 0x8e, 0xb1, + 0x6d, 0xcc, 0x3d, 0xaf, 0x18, 0x5e, 0xf4, 0x4c, 0xb1, 0x52, 0x79, 0x0e, + 0x55, 0x7e, 0xf1, 0xb2, 0x50, 0x58, 0xbd, 0xe9, 0xd2, 0xc5, 0x1c, 0xf1, + 0x88, 0xa6, 0xff, 0xb3, 0x51, 0xf8, 0x3c, 0xd7, 0x6b, 0x14, 0xe7, 0xbd, + 0xd0, 0x86, 0xff, 0xd3, 0x0f, 0xb3, 0xf7, 0xc9, 0x35, 0x62, 0xfc, 0x0c, + 0xd4, 0xfd, 0x62, 0xff, 0xa7, 0x92, 0x70, 0xf6, 0x9d, 0x96, 0x2b, 0x65, + 0xd9, 0x68, 0x47, 0x2a, 0x32, 0xfc, 0x49, 0x34, 0x82, 0x25, 0x2d, 0x42, + 0xb0, 0xf0, 0xe0, 0xfc, 0x31, 0x08, 0x8f, 0xc8, 0x1d, 0x45, 0x17, 0xff, + 0x0b, 0x9f, 0x68, 0x19, 0xc1, 0xf9, 0xd6, 0x2f, 0x9b, 0x80, 0xc5, 0x8b, + 0x9f, 0xda, 0x3e, 0x92, 0x47, 0xbf, 0xfd, 0xad, 0x8c, 0xe8, 0x2f, 0xcb, + 0x9e, 0x46, 0xb1, 0x5f, 0x3f, 0xb6, 0x2c, 0xbb, 0x5e, 0x58, 0xbf, 0xff, + 0x75, 0x40, 0xcf, 0x7d, 0xce, 0x64, 0x70, 0xbe, 0xfa, 0x58, 0xbd, 0xad, + 0x3a, 0xc5, 0xf0, 0xfe, 0x23, 0xac, 0x54, 0xa2, 0xe7, 0x06, 0x1d, 0x80, + 0x43, 0xb7, 0xf0, 0xfb, 0x9d, 0x3f, 0x6b, 0x17, 0xde, 0xdb, 0x02, 0x58, + 0xa8, 0x22, 0x3d, 0xce, 0x88, 0xc2, 0xff, 0xf9, 0xb5, 0xb7, 0x9e, 0x3f, + 0x36, 0x68, 0xa6, 0x3d, 0x62, 0xf6, 0x47, 0xca, 0xc5, 0x44, 0x7e, 0xfe, + 0x58, 0xbe, 0x37, 0x59, 0xc5, 0x8a, 0x93, 0xc7, 0x72, 0x3b, 0xff, 0x49, + 0x4f, 0xcc, 0x11, 0x0b, 0x75, 0x8b, 0xd1, 0x1f, 0x16, 0x2e, 0x10, 0x4b, + 0x17, 0x84, 0xdc, 0x58, 0xbf, 0xfe, 0xd0, 0xe7, 0xed, 0x14, 0xc7, 0xfb, + 0x3a, 0x71, 0x62, 0xf1, 0xca, 0x25, 0x8b, 0xc2, 0x68, 0x96, 0x2e, 0x21, + 0xac, 0x54, 0xa2, 0xa7, 0x15, 0xa2, 0x1e, 0x61, 0xeb, 0xf4, 0x81, 0xbb, + 0xe2, 0xc5, 0xee, 0xf0, 0x0b, 0x16, 0x02, 0xc5, 0xd1, 0x02, 0x4d, 0x87, + 0x63, 0xd7, 0xa3, 0x98, 0x96, 0x2a, 0x4f, 0x37, 0xc5, 0xd7, 0x89, 0xc0, + 0xb1, 0x7f, 0xc3, 0x62, 0x03, 0x0c, 0x51, 0xeb, 0x17, 0xb3, 0xdc, 0x58, + 0xa9, 0x3f, 0x5c, 0x1c, 0xe1, 0xe5, 0xff, 0xc4, 0x3e, 0xa8, 0xb2, 0x0f, + 0xa9, 0xd9, 0x62, 0xfd, 0x2f, 0x07, 0xe8, 0xb1, 0x73, 0x1a, 0xb1, 0x7f, + 0xf4, 0x91, 0xa6, 0x4e, 0xde, 0x9e, 0x9c, 0x58, 0xa8, 0xf3, 0xe1, 0xf8, + 0xc5, 0x7d, 0x15, 0xfe, 0x84, 0x55, 0x4a, 0x64, 0x0d, 0x0f, 0x8b, 0x84, + 0x75, 0x8a, 0x82, 0xe3, 0x00, 0xc8, 0x31, 0x02, 0x3c, 0x7a, 0x21, 0x9f, + 0xc3, 0x18, 0x07, 0x65, 0x0a, 0x6f, 0x42, 0x5b, 0xa4, 0x69, 0xbd, 0x44, + 0xf7, 0xdb, 0x08, 0x6e, 0xb1, 0x7f, 0xc3, 0x62, 0x00, 0x67, 0x29, 0x58, + 0xa9, 0x3d, 0xdc, 0x24, 0xbe, 0x62, 0x1f, 0x52, 0xc5, 0xfe, 0x2c, 0x81, + 0x9f, 0x98, 0xf5, 0x8b, 0xfe, 0x14, 0x78, 0x7f, 0x29, 0xe9, 0xc5, 0x8a, + 0x8f, 0x44, 0xe1, 0xc9, 0x7e, 0x6f, 0x4b, 0x17, 0xee, 0x7b, 0x53, 0xc5, + 0x8b, 0x4f, 0x66, 0xd7, 0xc1, 0x97, 0xfc, 0x0e, 0x6a, 0x7b, 0x83, 0x9d, + 0x62, 0xff, 0xdc, 0x9e, 0x9a, 0x9e, 0xe0, 0xe7, 0x58, 0xbd, 0xe6, 0xe8, + 0xb1, 0x7e, 0xd8, 0x51, 0x4c, 0x7a, 0xc5, 0xf0, 0xa2, 0x98, 0xf5, 0x8b, + 0x9b, 0x63, 0x0f, 0x57, 0x62, 0xea, 0x94, 0xc8, 0x5c, 0xed, 0x90, 0x84, + 0xe9, 0x7f, 0x03, 0x92, 0x76, 0xf2, 0xc5, 0xfe, 0x98, 0xb9, 0x27, 0x6f, + 0x2c, 0x5a, 0x5c, 0xf8, 0xba, 0x17, 0x5f, 0xf3, 0xf2, 0x27, 0x2f, 0x48, + 0x16, 0x2f, 0xc0, 0xe3, 0x10, 0x16, 0x2f, 0xfe, 0x1b, 0x76, 0x71, 0x17, + 0xbf, 0x90, 0x58, 0xa9, 0x3e, 0xe7, 0x28, 0xbf, 0xfe, 0x91, 0x87, 0x17, + 0x3f, 0x3e, 0xe6, 0x14, 0x4b, 0x17, 0xff, 0x17, 0xba, 0x4e, 0xb8, 0xc5, + 0x31, 0xeb, 0x17, 0xf3, 0x3e, 0xc6, 0x1f, 0x16, 0x2a, 0x0a, 0x95, 0xb5, + 0x09, 0xd3, 0x94, 0x7e, 0x14, 0xe4, 0x41, 0xc5, 0x3f, 0x24, 0x5f, 0xe9, + 0x8f, 0xe4, 0x9d, 0xbc, 0xb1, 0x73, 0x12, 0xc5, 0xff, 0x48, 0x0c, 0xfc, + 0x9d, 0x89, 0x62, 0xbb, 0x3c, 0xfe, 0x82, 0xd7, 0xff, 0xd8, 0x30, 0xe2, + 0xe7, 0xbf, 0x83, 0x17, 0xb8, 0xb1, 0x7f, 0x45, 0x91, 0xec, 0x40, 0x58, + 0xa8, 0x26, 0x5f, 0xa8, 0x42, 0xfc, 0x97, 0xca, 0x97, 0x39, 0xd6, 0x2f, + 0xe9, 0x09, 0xfe, 0x28, 0xf5, 0x8b, 0xba, 0xbe, 0xb1, 0x7f, 0x77, 0x0e, + 0x31, 0x76, 0xb1, 0x52, 0xbc, 0xf7, 0x06, 0x8c, 0x97, 0x3c, 0xf1, 0xcf, + 0x44, 0x87, 0xa1, 0x73, 0x99, 0x06, 0x37, 0x70, 0xa2, 0x58, 0xbf, 0xe8, + 0x8c, 0xd4, 0xf7, 0x07, 0x3a, 0xc5, 0xff, 0x06, 0x53, 0xe7, 0xd3, 0x9d, + 0x62, 0xf1, 0x39, 0xab, 0x17, 0x89, 0x80, 0x61, 0xeb, 0x61, 0xcd, 0x44, + 0x8d, 0xe2, 0x19, 0xf4, 0x24, 0xef, 0xfc, 0x5e, 0xf7, 0xf0, 0x62, 0xf7, + 0x16, 0x2c, 0x35, 0x8b, 0x74, 0x93, 0xd2, 0xc4, 0x0b, 0xd8, 0xe7, 0x58, + 0xbf, 0x84, 0x07, 0x27, 0x8f, 0x58, 0xbf, 0xff, 0xe8, 0xec, 0xf0, 0x7d, + 0x1b, 0xc1, 0xec, 0xff, 0x2c, 0x1b, 0x1d, 0x62, 0x86, 0x89, 0xef, 0x18, + 0x5d, 0x27, 0x58, 0xbe, 0x06, 0x74, 0x95, 0x8a, 0x94, 0xf1, 0xf2, 0x10, + 0xfb, 0x94, 0x3c, 0x2e, 0xb4, 0x46, 0xc2, 0xf7, 0xe2, 0x8b, 0xce, 0x6a, + 0xc5, 0xd3, 0x05, 0x8b, 0xe2, 0x89, 0xce, 0xb1, 0x7c, 0x31, 0x7b, 0x8b, + 0x17, 0xe7, 0x18, 0x8b, 0x16, 0x2f, 0xd2, 0x3f, 0xb7, 0x6b, 0x17, 0xfd, + 0xf8, 0x67, 0x98, 0x01, 0xf6, 0xb1, 0x7d, 0xef, 0xe4, 0x0c, 0x3e, 0x57, + 0x29, 0xa7, 0x47, 0x4c, 0x44, 0x85, 0x08, 0xca, 0x94, 0xe0, 0x5c, 0xa9, + 0x85, 0xc5, 0x18, 0x65, 0xfd, 0xa8, 0xb0, 0xa4, 0xeb, 0x16, 0xe8, 0xb1, + 0x58, 0x78, 0x4e, 0x5d, 0x74, 0xc4, 0xb1, 0x7f, 0xf8, 0x5b, 0x69, 0xce, + 0xfe, 0xe4, 0xeb, 0xa2, 0xc5, 0x41, 0x10, 0xda, 0x20, 0x21, 0x8b, 0xf0, + 0x27, 0x7c, 0x3a, 0xc5, 0xfe, 0xcd, 0xb9, 0x31, 0x0b, 0x4b, 0x17, 0xd8, + 0xcf, 0xb2, 0xc5, 0xd3, 0xe5, 0x8a, 0x39, 0xb9, 0x22, 0x2a, 0x74, 0x73, + 0xe8, 0xbc, 0x8a, 0x78, 0xdf, 0x74, 0x31, 0x62, 0xfd, 0xc3, 0x74, 0xc1, + 0x2c, 0x5d, 0x9d, 0xac, 0x5e, 0x29, 0x3a, 0xc5, 0xff, 0xff, 0x98, 0xbb, + 0x0c, 0x86, 0xc7, 0x7e, 0x9e, 0xe1, 0x4f, 0xdf, 0xa2, 0xc5, 0x0d, 0x19, + 0xfb, 0x95, 0xe8, 0x63, 0xa8, 0x72, 0x96, 0x2f, 0x47, 0xe4, 0x16, 0x2f, + 0xf4, 0x80, 0xed, 0x00, 0xce, 0xb1, 0x7d, 0x11, 0x48, 0xd6, 0x2f, 0x88, + 0x7f, 0x95, 0x8b, 0x9f, 0xa1, 0x87, 0x8a, 0x22, 0x3b, 0xd1, 0xa0, 0xbe, + 0xb1, 0x5f, 0x46, 0x6f, 0x1e, 0xbc, 0x61, 0x5d, 0xa6, 0x3a, 0xf0, 0xed, + 0xbf, 0xcd, 0xa8, 0xb3, 0xdd, 0x5d, 0x16, 0x2e, 0x07, 0x16, 0x2f, 0x0f, + 0x8e, 0xb1, 0x52, 0x6d, 0x58, 0x62, 0xa5, 0x5a, 0x10, 0xce, 0xf2, 0x1c, + 0xdf, 0x41, 0x68, 0xca, 0x44, 0x52, 0x13, 0x7d, 0xf3, 0x7d, 0xb6, 0x58, + 0xbf, 0x7c, 0x46, 0xe1, 0x2c, 0x5e, 0x09, 0xa0, 0xb1, 0x7e, 0x89, 0x80, + 0xdb, 0xac, 0x5f, 0x6b, 0xc5, 0x2b, 0x15, 0x87, 0x98, 0xc5, 0x57, 0xf8, + 0x22, 0x6f, 0x41, 0x86, 0xb1, 0x74, 0x73, 0xac, 0x5a, 0x3d, 0x62, 0xdb, + 0x2c, 0x50, 0x8d, 0x40, 0x62, 0xb7, 0xc1, 0xed, 0x3f, 0x58, 0xa2, 0x3c, + 0x7f, 0x11, 0x5c, 0x46, 0xac, 0x5e, 0xf3, 0x9a, 0xb1, 0x6c, 0xc3, 0x6d, + 0xe1, 0x8b, 0xfe, 0x9f, 0xf1, 0xbd, 0x3a, 0xea, 0x58, 0xbf, 0xf1, 0xd8, + 0x61, 0xc5, 0x09, 0x2e, 0xd6, 0x28, 0x67, 0xfc, 0xe7, 0x97, 0xf0, 0xbf, + 0x3a, 0xc0, 0x2c, 0x5e, 0xe9, 0x3a, 0x58, 0xbe, 0xd0, 0x03, 0xe8, 0xb1, + 0x79, 0xc2, 0xf2, 0xc5, 0x41, 0x12, 0x4e, 0x5d, 0xf1, 0xfe, 0x13, 0xdf, + 0x9b, 0x51, 0xf3, 0x12, 0xc5, 0x6c, 0xae, 0xa0, 0x64, 0x78, 0x53, 0xbb, + 0x57, 0x64, 0x0e, 0x69, 0x14, 0x22, 0x74, 0xaf, 0xf8, 0x51, 0xfa, 0x16, + 0x7d, 0x0f, 0x2f, 0xf1, 0x7b, 0x38, 0xed, 0xf5, 0x8b, 0xee, 0x43, 0x8c, + 0xb1, 0x7f, 0xc0, 0x7f, 0xe6, 0x9a, 0x2e, 0x2c, 0x5e, 0x31, 0xbe, 0xb1, + 0x7f, 0xfd, 0x02, 0x9d, 0x83, 0x8b, 0x9f, 0xce, 0xad, 0x01, 0x62, 0xf4, + 0x07, 0xd1, 0x62, 0xa4, 0xfd, 0xd9, 0x5e, 0xfe, 0x30, 0xf9, 0xe6, 0xf2, + 0xc5, 0xfd, 0xf7, 0x1b, 0xeb, 0x75, 0x8a, 0x58, 0xbe, 0x62, 0xee, 0x0b, + 0x15, 0xb9, 0xaf, 0xf8, 0x65, 0xb9, 0x88, 0xaf, 0xdc, 0xbd, 0x97, 0xaf, + 0x77, 0x17, 0x16, 0x2b, 0xb3, 0xd5, 0x63, 0x5b, 0xd2, 0xe3, 0x58, 0xbf, + 0xbe, 0xfe, 0x29, 0x3a, 0xc5, 0xff, 0x16, 0xed, 0xfe, 0xe1, 0x9e, 0x58, + 0xa8, 0x8f, 0xa1, 0x8b, 0x6a, 0x55, 0x88, 0x0c, 0xcb, 0xb2, 0x37, 0x3a, + 0x3c, 0x25, 0x5a, 0x32, 0x4e, 0x11, 0x0a, 0x10, 0x97, 0xf0, 0x50, 0x7e, + 0x08, 0xeb, 0x17, 0xa7, 0x98, 0xb1, 0x58, 0x79, 0x86, 0x98, 0x5d, 0xd3, + 0x8b, 0x17, 0xf0, 0xb9, 0x31, 0x0b, 0x4b, 0x17, 0xec, 0xdb, 0x3f, 0xc5, + 0x8a, 0x93, 0xf3, 0xf8, 0xd1, 0x18, 0x5f, 0xfc, 0x26, 0xe8, 0xff, 0xe0, + 0xa3, 0x85, 0xa5, 0x8b, 0xfc, 0x30, 0xfe, 0xc0, 0x14, 0x4b, 0x15, 0x04, + 0x41, 0x32, 0x5d, 0xfe, 0x04, 0x81, 0x88, 0x58, 0xb1, 0x7c, 0x3f, 0xc9, + 0xab, 0x17, 0xc7, 0x14, 0x5a, 0x58, 0xbb, 0x5c, 0x58, 0xbf, 0xf6, 0x70, + 0xcf, 0xcb, 0x90, 0xb6, 0x58, 0xac, 0x3d, 0x82, 0x18, 0xad, 0xd3, 0xc4, + 0xee, 0x15, 0xee, 0x45, 0xa3, 0x23, 0x92, 0x74, 0x7d, 0xbf, 0xe0, 0x48, + 0x03, 0xe9, 0x25, 0xd4, 0xb1, 0x7f, 0xfd, 0x3e, 0x9f, 0xbf, 0xa0, 0xfa, + 0xdf, 0xf2, 0xb1, 0x7f, 0x86, 0x63, 0x74, 0xc2, 0x1a, 0xc5, 0x6c, 0x88, + 0x66, 0x50, 0xba, 0x4e, 0xb1, 0x52, 0xae, 0xe3, 0x25, 0x2c, 0xbb, 0x03, + 0x43, 0x14, 0x44, 0x77, 0x6c, 0x35, 0x8b, 0xfe, 0x98, 0xbc, 0xe3, 0xc2, + 0x89, 0x62, 0xff, 0xff, 0xb5, 0xde, 0xef, 0xd9, 0x86, 0xb1, 0x9c, 0xfb, + 0x6f, 0x24, 0x35, 0x8b, 0xfe, 0x6e, 0x07, 0xee, 0xf7, 0x73, 0xac, 0x5b, + 0xf2, 0x8a, 0xb1, 0x37, 0x5f, 0x39, 0xb1, 0xd8, 0xb1, 0x7f, 0x07, 0xe9, + 0xd8, 0xbb, 0x58, 0xbf, 0xfe, 0xdf, 0xed, 0x10, 0x71, 0x41, 0xcb, 0x0f, + 0x2b, 0x17, 0x89, 0xce, 0xb1, 0x5a, 0x46, 0x30, 0x09, 0x88, 0xc7, 0xca, + 0x77, 0xf9, 0xfc, 0x58, 0x6e, 0x7d, 0x62, 0xf4, 0x7b, 0x1d, 0x62, 0xbc, + 0x7a, 0x7d, 0x46, 0x77, 0x73, 0x8b, 0x17, 0xff, 0x7b, 0x81, 0xf3, 0x08, + 0x5e, 0x9f, 0xac, 0x5f, 0xd2, 0xc5, 0xec, 0x25, 0x8a, 0xc3, 0xf1, 0x24, + 0x6b, 0xf8, 0xcf, 0x4e, 0xd3, 0x12, 0xc5, 0xfb, 0x91, 0xf3, 0xa3, 0x56, + 0x2d, 0x26, 0x9e, 0xf7, 0x66, 0x37, 0xf3, 0x44, 0xfa, 0x9d, 0x96, 0x2e, + 0x9d, 0x96, 0x2b, 0xe7, 0x8f, 0xd4, 0x5f, 0x7f, 0xe1, 0x7f, 0xef, 0x9e, + 0x62, 0x02, 0xc5, 0xfb, 0xa8, 0xf3, 0x9e, 0x58, 0xbf, 0xf8, 0x3f, 0x42, + 0x46, 0xc5, 0x9e, 0x02, 0xc5, 0xf7, 0xa7, 0x3e, 0xb1, 0x7f, 0x9f, 0xa7, + 0x70, 0xce, 0xa8, 0x2c, 0x56, 0x23, 0x33, 0x45, 0x6c, 0x8a, 0x44, 0x57, + 0x61, 0xd6, 0x2a, 0x57, 0x65, 0xe0, 0x32, 0x38, 0x72, 0xe4, 0x3b, 0x9e, + 0x11, 0xfa, 0x25, 0x3c, 0x22, 0x7e, 0xfc, 0xce, 0x1e, 0x25, 0x14, 0x61, + 0x5d, 0x0e, 0xaf, 0xdd, 0x4e, 0x79, 0xe2, 0xc5, 0xf4, 0xf7, 0x3e, 0x58, + 0xbd, 0x9a, 0xe2, 0xc5, 0x9a, 0x23, 0xc0, 0xe8, 0x47, 0x7e, 0xd8, 0x3e, + 0x8d, 0x05, 0x8a, 0x1a, 0x30, 0x8e, 0xd6, 0x45, 0x57, 0xba, 0x60, 0xd6, + 0x2c, 0x12, 0xc5, 0xf3, 0x78, 0x52, 0xb1, 0x7b, 0x8c, 0x75, 0x8b, 0xc4, + 0xe7, 0x58, 0xb6, 0xcb, 0x14, 0xc6, 0xbc, 0x31, 0xcb, 0xd1, 0xe2, 0x3a, + 0xc5, 0xf4, 0x24, 0x86, 0xb1, 0x6e, 0x18, 0x78, 0x6e, 0x43, 0x58, 0x8f, + 0xa3, 0x48, 0xbe, 0x99, 0xd1, 0x92, 0xf4, 0x5c, 0x95, 0x8b, 0xed, 0x02, + 0x3b, 0x16, 0x2f, 0xff, 0xa4, 0xa4, 0x06, 0x3f, 0xe1, 0x3e, 0x61, 0xac, + 0x51, 0xa8, 0x93, 0x61, 0xee, 0xa2, 0x6b, 0xfc, 0xc6, 0xeb, 0x3a, 0x48, + 0x16, 0x2e, 0x8b, 0x16, 0x29, 0x62, 0xfb, 0xdf, 0x68, 0x98, 0xd2, 0x70, + 0x62, 0xff, 0xa3, 0xd8, 0x80, 0xe6, 0xb7, 0x6b, 0x15, 0x27, 0xeb, 0x87, + 0x17, 0xfe, 0x73, 0x87, 0xf7, 0xf6, 0x74, 0x89, 0x62, 0xfe, 0x07, 0x60, + 0xcd, 0x62, 0xc5, 0xfa, 0x5f, 0xcf, 0x05, 0x8b, 0xf6, 0x1a, 0x6b, 0x8d, + 0x62, 0xb7, 0x3d, 0x12, 0x27, 0xbf, 0x47, 0x0b, 0xef, 0xa5, 0x8b, 0xe1, + 0x7d, 0xf4, 0xb1, 0x46, 0x1e, 0x7c, 0x71, 0x65, 0xe9, 0xcf, 0x2c, 0x5f, + 0x72, 0x75, 0x05, 0x8b, 0xf6, 0x6b, 0x42, 0xd9, 0x62, 0xc0, 0x39, 0xf4, + 0xf0, 0x73, 0xc4, 0x74, 0x74, 0x62, 0x34, 0x23, 0xea, 0x53, 0xdc, 0xc8, + 0x40, 0x3c, 0x66, 0xb7, 0xc3, 0xfb, 0x76, 0xb1, 0x7e, 0xfb, 0xeb, 0xee, + 0xb1, 0x73, 0x92, 0xc5, 0x61, 0xbe, 0x01, 0x45, 0xef, 0xcf, 0x16, 0x2e, + 0x07, 0x0c, 0x37, 0xb2, 0x41, 0x52, 0x8c, 0xc6, 0x84, 0xfd, 0xf7, 0xb9, + 0x9b, 0x2c, 0x5f, 0xff, 0xef, 0xbf, 0x46, 0x03, 0xc2, 0x7a, 0x31, 0xe7, + 0xfd, 0x4c, 0xb1, 0x5d, 0xa2, 0x2b, 0xe4, 0x97, 0x66, 0xcb, 0x14, 0xc6, + 0xf0, 0x89, 0x2a, 0x57, 0xdf, 0xa0, 0x5e, 0x31, 0xfc, 0x8c, 0x35, 0xe1, + 0xa5, 0x1e, 0x67, 0x14, 0x33, 0xf4, 0x41, 0xf9, 0x43, 0xe5, 0x18, 0x2f, + 0x21, 0xd9, 0x7f, 0xf8, 0x66, 0x4f, 0xcc, 0xfb, 0xeb, 0x21, 0xd1, 0x62, + 0xf3, 0x44, 0x25, 0x8b, 0x69, 0x8f, 0xb7, 0xa9, 0x3e, 0xe6, 0x1a, 0xc5, + 0x39, 0xe0, 0xb1, 0x55, 0xff, 0xf9, 0xf9, 0x83, 0xdf, 0xef, 0xec, 0x88, + 0xa4, 0xeb, 0x17, 0xff, 0x7d, 0x88, 0x19, 0x1f, 0x83, 0x9f, 0xac, 0x56, + 0xe8, 0x9c, 0x75, 0x6b, 0xff, 0xce, 0x73, 0x27, 0xe6, 0x61, 0x4b, 0x8d, + 0x62, 0xa2, 0x4c, 0xa7, 0xf0, 0xbc, 0x22, 0x3b, 0x47, 0x2c, 0x5d, 0x10, + 0x16, 0x2f, 0xa6, 0x21, 0x6c, 0xb1, 0x47, 0x3d, 0x36, 0x15, 0xf0, 0xcd, + 0xc0, 0xdd, 0x62, 0xce, 0xb1, 0x6e, 0x2c, 0x58, 0xde, 0x1b, 0xcf, 0x0c, + 0x88, 0x46, 0xf4, 0xe6, 0x96, 0x2f, 0xb3, 0xd8, 0x75, 0x8a, 0x19, 0xbe, + 0x61, 0xcb, 0xdf, 0x17, 0x16, 0x2b, 0x63, 0x7c, 0x69, 0x05, 0xfb, 0xef, + 0xa9, 0xfa, 0xc5, 0x3a, 0x3f, 0x1a, 0x16, 0x22, 0x23, 0xbc, 0x06, 0xdd, + 0x62, 0xff, 0xde, 0x60, 0x19, 0xe2, 0x60, 0x71, 0x62, 0xf7, 0x8a, 0x56, + 0x28, 0x8f, 0x70, 0x24, 0x0b, 0xfc, 0x58, 0xfa, 0xcf, 0x4a, 0xc5, 0xfd, + 0x8f, 0xac, 0xf4, 0xac, 0x5e, 0x29, 0xf9, 0x87, 0xba, 0x46, 0x37, 0xfa, + 0x7d, 0xc3, 0x06, 0xc1, 0x2c, 0x56, 0x23, 0x9c, 0x4f, 0xfd, 0x0c, 0xaf, + 0xff, 0x9b, 0xb8, 0x07, 0xc0, 0x60, 0xb7, 0x92, 0x02, 0xc5, 0xf8, 0x78, + 0x79, 0x1a, 0xc5, 0x9b, 0x47, 0xf6, 0x4a, 0x77, 0xfd, 0xf8, 0x9b, 0xee, + 0x76, 0x1a, 0xc5, 0xe8, 0xb9, 0x2b, 0x14, 0xe7, 0xb0, 0x11, 0xd5, 0xff, + 0xf7, 0xce, 0xc0, 0x9f, 0x87, 0xc7, 0x04, 0xfd, 0x62, 0xff, 0xf6, 0x80, + 0xc3, 0x33, 0x3f, 0x25, 0xb7, 0x52, 0xc5, 0xf8, 0x9b, 0x69, 0xf2, 0xc5, + 0x3a, 0x32, 0x3e, 0xa3, 0xc4, 0xfb, 0xf6, 0xcd, 0xcc, 0x82, 0xc5, 0xff, + 0xf0, 0xd8, 0xe6, 0x3f, 0xfa, 0x49, 0x01, 0x86, 0xb1, 0x7f, 0xfc, 0x3c, + 0xe8, 0xda, 0x88, 0x38, 0x37, 0x98, 0xeb, 0x17, 0x64, 0x7a, 0xc5, 0x4a, + 0x3a, 0x70, 0xa5, 0xd4, 0xb4, 0xa9, 0x7f, 0xc1, 0x97, 0x21, 0x85, 0x9d, + 0xac, 0x5f, 0x00, 0xef, 0xc5, 0x8b, 0xfe, 0x14, 0x46, 0x3f, 0xcb, 0x3b, + 0x58, 0xb3, 0x76, 0x7b, 0xe0, 0x23, 0xb1, 0xab, 0x17, 0xff, 0xff, 0xdd, + 0xbf, 0xc6, 0x53, 0xd5, 0x3d, 0xe7, 0x46, 0xf6, 0x7c, 0xb3, 0xdf, 0x75, + 0x8b, 0xec, 0xe8, 0x39, 0x58, 0xba, 0x49, 0x62, 0xb4, 0x6e, 0xb8, 0x49, + 0x7f, 0x3f, 0xa6, 0x26, 0xe8, 0xb1, 0x52, 0xbd, 0x4f, 0xb4, 0x6c, 0x3b, + 0xc2, 0xb3, 0xb7, 0xe8, 0xa1, 0xd5, 0xa8, 0xc6, 0x0e, 0x75, 0xf8, 0x4c, + 0x80, 0xa0, 0x84, 0xfd, 0x0b, 0xbe, 0x84, 0x37, 0xff, 0x16, 0xc7, 0x9e, + 0x93, 0xa8, 0x4f, 0x45, 0x8b, 0xff, 0xd3, 0xad, 0xdc, 0x2d, 0x4f, 0x70, + 0x73, 0xac, 0x5f, 0xce, 0x13, 0x45, 0x27, 0x58, 0xbd, 0xd5, 0x3c, 0x58, + 0xa6, 0x47, 0x2f, 0x12, 0x7c, 0x9a, 0x22, 0xfb, 0x46, 0x75, 0x8f, 0xb9, + 0xed, 0xd6, 0x9b, 0x46, 0x89, 0x31, 0xb4, 0x2b, 0xba, 0xe1, 0x34, 0x6b, + 0x18, 0x9a, 0x64, 0xc6, 0xd1, 0xf2, 0x42, 0x3c, 0x41, 0xca, 0x0b, 0xc9, + 0xdd, 0x6d, 0xe3, 0xa5, 0xee, 0x36, 0x97, 0x9d, 0x4c, 0x8f, 0x8c, 0x52, + 0x29, 0xf3, 0x7d, 0x4b, 0x25, 0x3c, 0x7c, 0x1f, 0x9d, 0x32, 0x69, 0xc1, + 0x70, 0x4b, 0xbd, 0x29, 0xc8, 0x5e, 0x4e, 0xf5, 0xfa, 0x92, 0x00, 0x29, + 0x52, 0x9d, 0x21, 0x13, 0x1d, 0x1b, 0x30, 0x73, 0xdb, 0x5d, 0x51, 0xd8, + 0xdf, 0xb5, 0xbb, 0x36, 0xea, 0x92, 0x70, 0xbf, 0xbe, 0xe7, 0x26, 0x35, + 0x62, 0xd1, 0x98, 0x7c, 0xae, 0x6f, 0x7a, 0x35, 0x7a, 0x35, 0x2c, 0x5d, + 0xd7, 0x23, 0x96, 0x2f, 0xe9, 0x3e, 0x75, 0x4f, 0x96, 0x2f, 0xbf, 0x24, 0x6a, 0xc5, 0xf4, 0xef, 0x3f, 0x58, 0xbf, 0x48, 0x52, 0x52, 0xb1, 0x47, - 0x44, 0xef, 0x8c, 0x03, 0x23, 0xee, 0x23, 0xbc, 0x33, 0xf9, 0x62, 0xf7, - 0x03, 0x82, 0xc5, 0xff, 0x7d, 0x8b, 0xcd, 0x07, 0x02, 0xc5, 0x61, 0xeb, - 0xb8, 0xfd, 0xff, 0x69, 0xb9, 0xfc, 0xc2, 0xdd, 0x62, 0xfe, 0x17, 0x33, - 0xc1, 0xec, 0xb1, 0x4e, 0x7d, 0x5f, 0x39, 0xbe, 0xd6, 0xb3, 0x8b, 0x17, - 0xe6, 0xeb, 0xf3, 0xd9, 0x62, 0x8e, 0x79, 0xdd, 0x88, 0xef, 0xff, 0xdf, - 0x17, 0xb5, 0x3e, 0xe6, 0x6f, 0xc9, 0xd6, 0xeb, 0x17, 0xc2, 0xee, 0x68, - 0x96, 0x2f, 0xf3, 0x9b, 0x90, 0x90, 0x71, 0x62, 0xa0, 0x7b, 0x7c, 0x27, - 0xbc, 0x39, 0x3a, 0xc5, 0xf8, 0x5c, 0xfb, 0x84, 0xb1, 0x7f, 0xa7, 0xcf, - 0xbb, 0x8e, 0x56, 0x2d, 0xa5, 0x8b, 0xff, 0xe8, 0x89, 0xf9, 0xe9, 0x0d, - 0xf5, 0x14, 0xfd, 0x62, 0xe6, 0xf2, 0xc5, 0x40, 0xfe, 0xf0, 0x49, 0x94, - 0xa8, 0x69, 0x91, 0x1a, 0x3b, 0xa2, 0xaf, 0x42, 0xba, 0xf6, 0x71, 0xd6, - 0x2f, 0xf4, 0xfa, 0x5c, 0x83, 0xe2, 0xc5, 0x61, 0xe7, 0xe8, 0x72, 0xff, - 0x16, 0xf1, 0x41, 0xf5, 0x05, 0x8b, 0xff, 0xef, 0x70, 0x3e, 0x79, 0xe4, - 0xbc, 0x4c, 0x05, 0x8b, 0x8d, 0xd9, 0x62, 0xa5, 0x14, 0x18, 0x6c, 0x6a, - 0x85, 0xfd, 0xd4, 0x24, 0xe2, 0x89, 0x62, 0xfe, 0x38, 0xe7, 0x82, 0x25, - 0x8b, 0xd0, 0x93, 0xac, 0x5f, 0xef, 0x43, 0x0d, 0x62, 0x02, 0xc5, 0xdf, - 0x75, 0x8a, 0xe8, 0xfa, 0x1c, 0x77, 0xc6, 0x95, 0x28, 0xf6, 0x73, 0x16, - 0x84, 0xb5, 0xf9, 0xb5, 0xe2, 0x95, 0x8b, 0xe1, 0x44, 0x23, 0x56, 0x2f, - 0xed, 0xe7, 0x8d, 0xd0, 0x16, 0x2f, 0x9a, 0x26, 0xf2, 0xc5, 0x6e, 0x8a, - 0x08, 0x89, 0xc8, 0x98, 0x33, 0x0b, 0xff, 0xff, 0x8c, 0x6f, 0xc6, 0x16, - 0x6b, 0x00, 0x0c, 0x8b, 0x82, 0x88, 0xa4, 0xeb, 0x17, 0xdc, 0x33, 0x81, - 0xac, 0x5f, 0xfd, 0x9d, 0xb0, 0x7a, 0x97, 0x83, 0x71, 0x62, 0xba, 0x3e, - 0xbd, 0x13, 0x53, 0xa6, 0x0a, 0xd0, 0xe2, 0xbf, 0x7b, 0xa8, 0x48, 0x4b, - 0x17, 0xf3, 0x07, 0x9d, 0xa7, 0x8b, 0x15, 0x87, 0xb6, 0x22, 0xbb, 0xff, - 0xbe, 0xe1, 0xf9, 0xc8, 0x50, 0xce, 0x2c, 0x5f, 0xf7, 0x5c, 0x2c, 0x1f, - 0xd8, 0x25, 0x8b, 0xee, 0x3f, 0xa5, 0x62, 0x9c, 0xf7, 0x58, 0xee, 0xff, - 0xfb, 0x36, 0xce, 0xbd, 0xc7, 0x29, 0x03, 0x1d, 0x62, 0xb1, 0x31, 0x23, - 0x61, 0x45, 0xc2, 0x0b, 0xf3, 0xec, 0xc4, 0x05, 0x8b, 0xff, 0x67, 0xe7, - 0x59, 0x18, 0x10, 0x41, 0x24, 0x5c, 0xe1, 0x2c, 0x5d, 0xb4, 0x64, 0x6a, - 0x65, 0xc8, 0xcc, 0x31, 0xf6, 0x41, 0x83, 0xa8, 0xe1, 0x15, 0x8d, 0xfb, - 0x92, 0x75, 0x0b, 0x47, 0x8d, 0x12, 0x28, 0x49, 0x9e, 0x18, 0x3f, 0x8c, - 0x95, 0xa1, 0xa4, 0x08, 0xd1, 0x0a, 0x10, 0x5e, 0x8c, 0xcf, 0xb1, 0xb4, - 0x71, 0x47, 0x72, 0x2d, 0xfb, 0x5b, 0xb3, 0x6e, 0xa9, 0x2f, 0x0b, 0xff, - 0xbf, 0x3b, 0x6a, 0x7c, 0xfb, 0xb8, 0xd6, 0x2f, 0xff, 0x0d, 0xb5, 0xda, - 0x41, 0xf9, 0x3b, 0x12, 0xc5, 0xff, 0xbd, 0x24, 0xfb, 0x1d, 0xb4, 0x05, - 0x8a, 0x94, 0x45, 0x32, 0x5d, 0xff, 0xfd, 0x83, 0xfc, 0x87, 0x19, 0xe2, - 0x60, 0x73, 0x92, 0x04, 0x8b, 0x46, 0x62, 0x70, 0xf1, 0x1b, 0x94, 0x34, - 0x23, 0x88, 0x6f, 0xfe, 0x8c, 0x68, 0x46, 0x66, 0xb7, 0x66, 0xdd, 0x52, - 0x23, 0x97, 0x61, 0xd6, 0x2e, 0xf6, 0x2c, 0x5f, 0x75, 0xe0, 0xc0, 0xb1, - 0x5b, 0x9e, 0xa7, 0x42, 0xee, 0x2f, 0x7f, 0xfd, 0x9e, 0x7f, 0x8b, 0xec, - 0xfd, 0x72, 0x4d, 0x58, 0xbf, 0xfc, 0x6b, 0xeb, 0x35, 0x09, 0xff, 0xdc, - 0x0b, 0x17, 0x7c, 0x6b, 0x17, 0x48, 0xd6, 0x2f, 0xff, 0xde, 0x91, 0xc8, - 0xbb, 0xfd, 0x4f, 0x9c, 0x13, 0x05, 0x8b, 0xfd, 0xe7, 0x86, 0xb4, 0xfd, - 0x2c, 0x5e, 0x26, 0x8c, 0x82, 0x2f, 0xbe, 0x31, 0xd8, 0x5c, 0x35, 0xab, - 0xfe, 0x13, 0x7f, 0x06, 0xcd, 0xba, 0xc5, 0xff, 0xce, 0x11, 0x9c, 0xc7, - 0x8e, 0x72, 0xf2, 0xc5, 0xff, 0xed, 0x4e, 0x75, 0x19, 0xe8, 0x48, 0x0e, - 0xeb, 0x15, 0xba, 0x33, 0xf8, 0x73, 0xe4, 0x8b, 0xff, 0xe6, 0x93, 0xc6, - 0x73, 0x22, 0x91, 0x77, 0xfd, 0xdf, 0x58, 0xbf, 0xf9, 0xe2, 0x8c, 0x2c, - 0xd6, 0x67, 0x41, 0x2c, 0x51, 0x22, 0x94, 0x25, 0xcb, 0xff, 0xc4, 0xc1, - 0x7b, 0x3f, 0xa9, 0x83, 0x69, 0x62, 0xf3, 0x82, 0x56, 0x2f, 0x6f, 0x87, - 0x48, 0x8c, 0x2f, 0x2f, 0x77, 0x7c, 0xd5, 0x8b, 0xec, 0x6e, 0x80, 0xb1, - 0x7f, 0xe0, 0x70, 0xcd, 0xfe, 0xfd, 0x9f, 0x4b, 0x17, 0xff, 0xd2, 0x42, - 0xe7, 0xdf, 0x59, 0xda, 0x4b, 0xcb, 0x15, 0x28, 0x94, 0xfa, 0x25, 0xff, - 0xcf, 0xac, 0xd4, 0x27, 0xff, 0x70, 0x2c, 0x5f, 0x6e, 0xcd, 0xba, 0xa4, - 0x48, 0x2f, 0xe6, 0xd6, 0x76, 0xfe, 0x2c, 0x56, 0xc9, 0xbe, 0xc2, 0x16, - 0xe6, 0x91, 0x69, 0x10, 0x06, 0x37, 0xd1, 0x7b, 0x37, 0x58, 0xbf, 0x4b, - 0x81, 0xce, 0xb1, 0x52, 0x79, 0x90, 0x25, 0xbf, 0x8b, 0xc5, 0x27, 0xe2, - 0xc5, 0xed, 0x48, 0xd6, 0x2a, 0x4f, 0x2b, 0x0b, 0x6f, 0xff, 0xcf, 0xa7, - 0xee, 0x92, 0xda, 0x7c, 0xff, 0x6d, 0x96, 0x2f, 0xcd, 0x0f, 0x3e, 0xcb, - 0x15, 0x28, 0x81, 0x75, 0x8b, 0xed, 0x8e, 0x20, 0x96, 0x2f, 0xff, 0x37, - 0xa2, 0xe6, 0x0c, 0x62, 0x6d, 0x41, 0x62, 0xff, 0xf9, 0xba, 0xe6, 0x7d, - 0x8b, 0x36, 0x38, 0xbe, 0xb1, 0x7f, 0xf7, 0xdf, 0xaf, 0x67, 0x5e, 0xd6, - 0xa5, 0x62, 0xff, 0xe7, 0x93, 0xb0, 0xc3, 0xee, 0x92, 0x82, 0xc5, 0xfd, - 0x3f, 0xe4, 0x74, 0xf9, 0x62, 0xde, 0x58, 0xac, 0x4c, 0x8b, 0x75, 0x1f, - 0xa3, 0x81, 0x1f, 0xc6, 0x37, 0xff, 0x60, 0x23, 0xb3, 0x53, 0xb3, 0x6b, - 0x75, 0x8b, 0xf3, 0x03, 0xd8, 0x05, 0x8a, 0x23, 0xf1, 0xe2, 0x4d, 0xfe, - 0xcf, 0xb1, 0xca, 0x7a, 0x58, 0xba, 0x11, 0x92, 0xbc, 0x7d, 0x03, 0x0c, - 0x8e, 0x7d, 0xe1, 0x3d, 0x13, 0x5f, 0xe1, 0x42, 0xc4, 0x20, 0x26, 0xe4, - 0x6d, 0xde, 0x85, 0xe0, 0x64, 0x37, 0xe1, 0x75, 0xbb, 0xf1, 0x62, 0xff, - 0xb3, 0xcf, 0xcd, 0x6b, 0x20, 0xb1, 0x77, 0x7d, 0x7b, 0xc5, 0x8b, 0x98, - 0x0b, 0x14, 0xb1, 0x5a, 0x34, 0x67, 0x17, 0xbf, 0xbe, 0xfd, 0x79, 0xbe, - 0xb1, 0x77, 0xe3, 0x23, 0x64, 0x4c, 0x62, 0x46, 0xe4, 0x37, 0x8a, 0x62, - 0x58, 0xac, 0x3e, 0x17, 0x44, 0xb7, 0x4b, 0x17, 0x88, 0x47, 0x58, 0xbf, - 0xfc, 0xe4, 0x28, 0x67, 0x0b, 0x36, 0x0e, 0x0b, 0x14, 0x33, 0xfb, 0x34, - 0x4f, 0xc3, 0xb6, 0x8c, 0x96, 0x69, 0xa0, 0xcc, 0x31, 0x47, 0x78, 0xc2, - 0x7a, 0x8c, 0x89, 0xe1, 0xad, 0x11, 0x1b, 0x4f, 0x52, 0x02, 0x18, 0x7c, - 0x2b, 0xf4, 0x66, 0x41, 0xc2, 0x6e, 0xff, 0xe8, 0xc6, 0x84, 0x66, 0x6b, - 0x76, 0x6d, 0xd5, 0x22, 0x51, 0x7d, 0xbb, 0x36, 0xea, 0x93, 0xc4, 0xbc, - 0x1c, 0x81, 0x62, 0xb4, 0x79, 0xe7, 0x31, 0xbf, 0xe8, 0x46, 0x66, 0xb7, - 0x66, 0xdd, 0x52, 0x26, 0x96, 0x8c, 0xc3, 0xed, 0x62, 0x2b, 0xee, 0xf2, - 0x5e, 0x39, 0x62, 0xf7, 0xdc, 0x96, 0x2a, 0x37, 0x3c, 0x6d, 0xca, 0xaf, - 0x46, 0xa0, 0xb6, 0x58, 0xb8, 0x71, 0xb2, 0xc5, 0xfe, 0x87, 0xe3, 0x62, - 0x36, 0x74, 0xb1, 0x7f, 0xa3, 0x48, 0xd3, 0xf8, 0x7c, 0xe2, 0xc5, 0xf0, - 0x7b, 0x43, 0xcb, 0x15, 0xde, 0x9f, 0x24, 0x6c, 0x7d, 0x7f, 0xfe, 0x1b, - 0x43, 0x82, 0xf4, 0xfb, 0x80, 0xf7, 0xba, 0x58, 0xbd, 0xef, 0x74, 0xb1, - 0x77, 0x79, 0x1b, 0x61, 0xfc, 0x01, 0x66, 0xfd, 0xce, 0x61, 0x62, 0xc5, - 0xff, 0x6b, 0x79, 0xdb, 0x30, 0xbc, 0xb1, 0x7f, 0x10, 0x71, 0x6a, 0x7b, - 0x2c, 0x5f, 0x33, 0xf5, 0xc5, 0x8b, 0xfd, 0xce, 0x60, 0x0d, 0xf1, 0x2c, - 0x5f, 0xff, 0xbd, 0xc0, 0x16, 0x7b, 0xf9, 0xe2, 0x99, 0x3a, 0xc5, 0xbe, - 0xb1, 0x58, 0x9a, 0x8b, 0x93, 0xc7, 0x9d, 0x7c, 0xc9, 0x88, 0xc8, 0xd4, - 0x25, 0x4b, 0xe1, 0xfe, 0x76, 0x58, 0xbf, 0xd3, 0xf9, 0x10, 0x6f, 0xdc, - 0xb1, 0x7e, 0xc2, 0x9e, 0xb8, 0xb1, 0x7f, 0xf4, 0x27, 0xdf, 0x0f, 0x93, - 0xec, 0x3a, 0xc5, 0x00, 0xfb, 0xbc, 0x51, 0x7f, 0x3c, 0xf7, 0x7e, 0x74, - 0xb1, 0x5b, 0x23, 0xdd, 0xe1, 0x4b, 0xf2, 0x2b, 0xf1, 0x3e, 0xee, 0x35, - 0x8b, 0xdd, 0xa6, 0x0b, 0x17, 0xe9, 0xf7, 0x33, 0xcb, 0x17, 0x98, 0x87, - 0x87, 0x8f, 0xf1, 0xfb, 0xfc, 0xe6, 0xf5, 0xcc, 0x23, 0x56, 0x2f, 0xf1, - 0xc5, 0xef, 0xc8, 0xbb, 0xf5, 0x8b, 0xec, 0x16, 0xb6, 0x58, 0xbc, 0xda, - 0x81, 0x87, 0xbd, 0xc3, 0xaa, 0xc4, 0xda, 0x1d, 0xbf, 0xe6, 0x22, 0x84, - 0xa5, 0xfb, 0x05, 0xbb, 0x12, 0xc5, 0xe9, 0x9f, 0x2c, 0x5f, 0xf6, 0x00, - 0x7f, 0x92, 0x90, 0x96, 0x2f, 0x81, 0xcc, 0x25, 0x8a, 0x93, 0xdb, 0x73, - 0x9b, 0xff, 0x0b, 0x7e, 0x71, 0xb5, 0xe9, 0x35, 0x62, 0xfd, 0xff, 0x73, - 0x3c, 0xb1, 0x7f, 0xbc, 0xff, 0x73, 0x7e, 0xeb, 0x14, 0xe8, 0x9f, 0x64, - 0x21, 0x14, 0xdf, 0xff, 0xbe, 0xce, 0x0e, 0x61, 0xac, 0x7d, 0x4e, 0x12, - 0xc5, 0xfd, 0x9e, 0x36, 0x4a, 0x0b, 0x17, 0x38, 0xd6, 0x2a, 0x51, 0x32, - 0x35, 0x4f, 0x97, 0x5e, 0x17, 0x25, 0x62, 0xff, 0x70, 0x19, 0x91, 0x06, - 0x75, 0x8b, 0xc2, 0x9e, 0x96, 0x2a, 0x4f, 0x52, 0x06, 0xd7, 0xfd, 0xb3, - 0xf3, 0x8c, 0x0f, 0x89, 0x62, 0xfe, 0x1e, 0x17, 0x27, 0xeb, 0x17, 0xc3, - 0x29, 0xe9, 0x62, 0xda, 0x58, 0xb3, 0x8c, 0xf8, 0xb4, 0x5a, 0x22, 0x3b, - 0x7d, 0x62, 0xff, 0xb0, 0xd3, 0x5a, 0x19, 0xd7, 0x96, 0x2f, 0x6d, 0x3b, - 0x2c, 0x5c, 0xdd, 0x61, 0xed, 0x86, 0x79, 0x5e, 0x44, 0xd8, 0x9b, 0x6f, - 0xdc, 0x11, 0xbb, 0x32, 0xc5, 0xfe, 0xc1, 0xb1, 0xf3, 0xaf, 0x2c, 0x54, - 0x0f, 0x7c, 0x8a, 0xef, 0xd9, 0x9e, 0xfe, 0x2c, 0x54, 0x9e, 0x47, 0xc8, - 0x6f, 0xf4, 0x39, 0xad, 0x31, 0x79, 0x62, 0xff, 0xfd, 0xaf, 0x7f, 0x08, - 0x9b, 0xd2, 0x5e, 0x8e, 0xc5, 0x8a, 0x94, 0x45, 0x39, 0xa5, 0x18, 0xbb, - 0xd1, 0xb1, 0x44, 0x1d, 0xc7, 0x0b, 0xfd, 0xe1, 0x8f, 0xd1, 0x7c, 0x4e, - 0x3a, 0x21, 0xfc, 0x27, 0x79, 0x0c, 0xff, 0x43, 0x2b, 0xb4, 0x2a, 0xef, - 0xf3, 0x19, 0xcf, 0x7e, 0x40, 0xb1, 0x7e, 0x71, 0x8b, 0xdc, 0x58, 0xbe, - 0xc3, 0xcc, 0x7a, 0xc5, 0x1a, 0x88, 0x3f, 0x9a, 0xf0, 0xa6, 0xfe, 0x7c, - 0x29, 0xeb, 0x8b, 0x17, 0xb4, 0xe7, 0x58, 0xbf, 0x0c, 0x98, 0x2e, 0x2c, - 0x5f, 0x7a, 0x4b, 0x65, 0x8a, 0x34, 0xf3, 0x3c, 0x53, 0x7b, 0x59, 0xe5, - 0x8b, 0xff, 0x4e, 0xe6, 0x07, 0xee, 0x31, 0x1a, 0xb1, 0x5a, 0x3e, 0x03, - 0x8e, 0xd4, 0xa6, 0x1d, 0x8d, 0x2f, 0x08, 0x3b, 0xf6, 0xff, 0x66, 0xd2, - 0xc5, 0xfb, 0x07, 0xdf, 0x65, 0x1e, 0xb1, 0x7f, 0x31, 0x03, 0xbe, 0xca, - 0x3d, 0x62, 0xe6, 0x1f, 0x63, 0xe9, 0x8e, 0x32, 0xa3, 0xaa, 0x32, 0xfc, - 0x67, 0x7c, 0x33, 0x14, 0x24, 0xaf, 0xc5, 0xce, 0xa1, 0xc5, 0x8b, 0xcc, - 0x5b, 0xac, 0x5e, 0xfc, 0x86, 0xb1, 0x50, 0x3e, 0x5f, 0x15, 0x04, 0x3b, - 0x7f, 0x19, 0xee, 0x31, 0x1a, 0xb1, 0x7f, 0x05, 0x17, 0xe4, 0x8d, 0x58, - 0xbd, 0x8c, 0x75, 0x8b, 0x84, 0x1a, 0xc5, 0xc6, 0x1d, 0x62, 0xc2, 0x58, - 0xa9, 0x35, 0x7f, 0x19, 0xbe, 0x9f, 0xb9, 0xd6, 0x2e, 0xcf, 0x2c, 0x5f, - 0xe8, 0x3f, 0xda, 0x0f, 0xf5, 0x8a, 0xf9, 0xe5, 0x30, 0xbd, 0xe6, 0xe8, - 0x35, 0x8a, 0x82, 0x71, 0xb8, 0x60, 0x69, 0x8c, 0x43, 0x9a, 0x44, 0x39, - 0x07, 0xdb, 0x08, 0x86, 0xff, 0xf0, 0xb5, 0x02, 0x98, 0x4f, 0xbf, 0x84, - 0xb1, 0x7a, 0x37, 0xef, 0x65, 0x62, 0xfd, 0xc9, 0x21, 0x71, 0x62, 0xee, - 0xbc, 0xb1, 0x77, 0xe5, 0x62, 0xf4, 0xfb, 0x98, 0x6c, 0x03, 0x19, 0xbd, - 0x25, 0x12, 0xc5, 0xd3, 0x1e, 0xb1, 0x5a, 0x36, 0xff, 0x1d, 0xbf, 0x30, - 0x09, 0x8e, 0xb1, 0x51, 0xba, 0x66, 0x12, 0x4f, 0x05, 0x87, 0x69, 0x22, - 0x1b, 0xf0, 0xff, 0x1e, 0xe4, 0xb1, 0x7f, 0x8b, 0x0f, 0x1d, 0x9a, 0x95, - 0x8a, 0x93, 0xe0, 0x88, 0xae, 0xf4, 0xfb, 0x8b, 0x17, 0xf8, 0xff, 0xc1, - 0x8d, 0xfa, 0x58, 0xbf, 0x87, 0xf1, 0x4e, 0xa5, 0x62, 0xa4, 0xf8, 0xf0, - 0xd6, 0xff, 0xbf, 0x25, 0x91, 0x4e, 0xb6, 0x58, 0xbf, 0x8b, 0x07, 0xf6, - 0x09, 0x62, 0xfe, 0x83, 0x6b, 0x6f, 0x89, 0x62, 0xd2, 0x34, 0x4c, 0x1a, - 0x75, 0x11, 0x75, 0xfe, 0xf7, 0x5d, 0xe9, 0xa6, 0xb8, 0xd6, 0x2f, 0xfc, - 0xdd, 0x43, 0x86, 0x4e, 0xec, 0x1a, 0xc5, 0xee, 0xbd, 0x2b, 0x15, 0x8a, - 0x8b, 0xfa, 0x22, 0x78, 0x40, 0x6a, 0x17, 0x07, 0x37, 0x63, 0xd1, 0x21, - 0xdf, 0x61, 0x64, 0x4b, 0x17, 0x9e, 0x38, 0xeb, 0x17, 0x9e, 0x4d, 0x58, - 0xae, 0x8d, 0xef, 0x71, 0x05, 0xe8, 0x74, 0x6a, 0xc5, 0x86, 0xb1, 0x7e, - 0xcd, 0x43, 0xe2, 0x58, 0xbf, 0x41, 0xa7, 0xae, 0xe5, 0x8b, 0x8c, 0xf2, - 0xc5, 0xfb, 0xdf, 0x17, 0xb8, 0xb1, 0x43, 0x45, 0x56, 0xe2, 0x5d, 0x14, - 0xc4, 0x58, 0x71, 0x9b, 0xf0, 0xe7, 0x81, 0xf1, 0x62, 0xe1, 0xf4, 0xb1, - 0x47, 0x3c, 0x31, 0x15, 0x5f, 0xfc, 0x2d, 0x34, 0x0e, 0x21, 0xfc, 0x44, - 0xb1, 0x78, 0x53, 0xc5, 0x8b, 0xff, 0x03, 0x7f, 0xbe, 0x89, 0xfd, 0xc5, - 0x8b, 0xfe, 0x9c, 0xe4, 0x5f, 0x70, 0xbc, 0xb1, 0x47, 0x44, 0xc3, 0x0e, - 0xf1, 0x02, 0xfd, 0x0f, 0xc9, 0x1a, 0xb1, 0x7e, 0x76, 0xd4, 0xee, 0xb1, - 0x6e, 0xd8, 0x7a, 0x3c, 0x29, 0xb8, 0xb6, 0x58, 0xa9, 0x56, 0x80, 0x32, - 0x5c, 0x86, 0x53, 0xc2, 0x40, 0xe4, 0x4d, 0x0d, 0xe0, 0x42, 0x00, 0x32, - 0x9b, 0xcc, 0xc7, 0x58, 0xbe, 0x14, 0x42, 0x35, 0x62, 0x96, 0x2f, 0xe9, - 0x19, 0xe7, 0x3c, 0xb1, 0x5e, 0x37, 0x21, 0x86, 0x5f, 0xf4, 0xe8, 0x0d, - 0xe8, 0xec, 0xf2, 0xc5, 0xda, 0xc5, 0x8b, 0xf7, 0xdf, 0x4c, 0x75, 0x8b, - 0xee, 0x9f, 0xa8, 0x2c, 0x5c, 0x1e, 0xcb, 0x15, 0x87, 0xce, 0xe5, 0x00, - 0x25, 0xad, 0x93, 0x84, 0x88, 0x73, 0x4b, 0xff, 0x22, 0x01, 0xe1, 0x3f, - 0x5d, 0x1b, 0xf7, 0xda, 0xc5, 0xd8, 0x75, 0x8b, 0xda, 0xed, 0xf5, 0x8b, - 0xf6, 0x69, 0xa4, 0x6b, 0x15, 0x1b, 0xa2, 0x0a, 0x49, 0x18, 0x5c, 0x88, - 0x2f, 0x0f, 0x09, 0x62, 0xf8, 0x50, 0xf0, 0x6b, 0x17, 0xb7, 0x9d, 0x2c, - 0x5f, 0xfb, 0x42, 0x3f, 0xde, 0x4e, 0xc4, 0xb1, 0x7b, 0xa9, 0x8f, 0x58, - 0xbf, 0xc2, 0xe8, 0x7f, 0x13, 0x71, 0x62, 0xff, 0x49, 0xcb, 0x21, 0x24, - 0xb1, 0x5f, 0x3e, 0x7e, 0x1b, 0x5f, 0xe7, 0x23, 0x30, 0xef, 0xe5, 0x8a, - 0xd9, 0x35, 0xe7, 0x25, 0xd0, 0xf7, 0xcf, 0xbd, 0x08, 0x8e, 0xc4, 0x57, - 0xf1, 0x64, 0x45, 0x3b, 0x2c, 0x5f, 0xc4, 0x4e, 0x7f, 0x62, 0xc5, 0xe9, - 0xea, 0x0b, 0x17, 0x14, 0x16, 0x2e, 0x8d, 0x82, 0x58, 0xa1, 0x1b, 0x58, - 0xe1, 0x7a, 0x95, 0x55, 0x59, 0x1b, 0xd4, 0x7a, 0xfb, 0x17, 0x11, 0x67, - 0x72, 0x9d, 0xff, 0xdb, 0x89, 0x87, 0xdb, 0x07, 0xdf, 0x65, 0x1e, 0xb1, - 0x7c, 0xff, 0x9e, 0xcb, 0x15, 0xa3, 0xf6, 0xf2, 0x95, 0xfe, 0x9d, 0x4f, - 0x40, 0xd4, 0xac, 0x5f, 0xa1, 0x38, 0x08, 0xf5, 0x8b, 0xff, 0xfe, 0x9d, - 0x0b, 0xdc, 0x60, 0x7e, 0x70, 0x6f, 0xa8, 0x0b, 0x16, 0x2b, 0xa4, 0x48, - 0xf8, 0xae, 0xff, 0xb5, 0x9f, 0xc2, 0x29, 0x1a, 0xc5, 0xff, 0xfd, 0x3f, - 0x10, 0xde, 0x62, 0x97, 0xe0, 0x9a, 0x3b, 0x16, 0x2b, 0x48, 0x94, 0x39, - 0xbd, 0xe7, 0xee, 0xd9, 0x62, 0xdb, 0x2c, 0x54, 0x9b, 0x42, 0x21, 0xbd, - 0xf1, 0x47, 0xac, 0x5e, 0x06, 0x7d, 0x62, 0xfe, 0x29, 0xf7, 0xda, 0x0b, - 0x15, 0x27, 0xd7, 0xd1, 0x0c, 0x43, 0xb7, 0xbd, 0x3a, 0x58, 0xa9, 0x55, - 0x9b, 0xb1, 0x16, 0x43, 0x15, 0xe1, 0x71, 0x12, 0xbb, 0x42, 0x28, 0x46, - 0x17, 0x36, 0xeb, 0x17, 0xff, 0xff, 0xb0, 0x89, 0xa1, 0xf7, 0x30, 0x3d, - 0x6a, 0x60, 0xfe, 0x7d, 0x30, 0x16, 0x2f, 0xc3, 0x16, 0xc1, 0x9d, 0x62, - 0xff, 0xfc, 0x52, 0x3e, 0x09, 0x9e, 0x0e, 0x0e, 0x0b, 0x8b, 0x17, 0xf6, - 0x7b, 0xef, 0xd4, 0x16, 0x2a, 0x24, 0x42, 0x12, 0xad, 0x6e, 0x8d, 0x3f, - 0xc2, 0xc2, 0xfe, 0xeb, 0x98, 0x76, 0xe2, 0xc5, 0xfd, 0x84, 0x4d, 0xed, - 0x96, 0x2f, 0x87, 0x9f, 0x95, 0x8b, 0x69, 0x62, 0xfd, 0xb6, 0xa7, 0xad, - 0x2c, 0x56, 0xc6, 0xf7, 0x04, 0xaf, 0xff, 0xef, 0x18, 0x39, 0x6d, 0x61, - 0x00, 0xce, 0x7b, 0x9d, 0x2c, 0x5f, 0x6b, 0x60, 0x79, 0x62, 0xff, 0x37, - 0x5a, 0x98, 0x36, 0x96, 0x2f, 0xe1, 0xe4, 0x24, 0x1c, 0x58, 0xac, 0x47, - 0x33, 0xaf, 0x91, 0x28, 0x8d, 0x2a, 0x55, 0xc3, 0xc0, 0x63, 0x23, 0x4a, - 0x72, 0x9f, 0x97, 0xb1, 0x69, 0x2f, 0xf2, 0x30, 0x7b, 0xff, 0xfa, 0x35, - 0x0a, 0x34, 0x93, 0xf8, 0xcd, 0xb3, 0xe6, 0x19, 0xf8, 0xe5, 0x8b, 0xfb, - 0xef, 0xe9, 0x20, 0x2c, 0x5f, 0x7f, 0xb3, 0xe9, 0x62, 0xa4, 0xf4, 0xb0, - 0xb6, 0xff, 0xef, 0xef, 0xf7, 0xeb, 0xd8, 0x76, 0xe2, 0xc5, 0xe9, 0x2d, - 0x96, 0x2f, 0x7d, 0xbc, 0xb1, 0x58, 0x88, 0x1f, 0xa3, 0x86, 0x3b, 0x7e, - 0x8d, 0xa3, 0x5c, 0x6b, 0x8d, 0x7d, 0xcb, 0x17, 0x4f, 0x96, 0x2f, 0x14, - 0x6f, 0xd9, 0x62, 0x8e, 0x6e, 0xfc, 0x2f, 0x7f, 0x66, 0x73, 0x3a, 0xf2, - 0xc5, 0xc2, 0x8f, 0x58, 0xb6, 0xc3, 0x3c, 0x93, 0x97, 0x5f, 0xbc, 0x78, - 0x88, 0x6b, 0x17, 0xdf, 0x0e, 0x39, 0x96, 0x2a, 0x36, 0x4d, 0x8f, 0x1f, - 0xd9, 0xa8, 0x8a, 0x44, 0x55, 0x7d, 0xce, 0x39, 0xd6, 0x2f, 0xfe, 0xfb, - 0xf4, 0x14, 0x9f, 0xf2, 0xf0, 0x58, 0xa8, 0x8f, 0xa7, 0xe4, 0x77, 0x85, - 0xa3, 0x56, 0x2e, 0x17, 0x4b, 0x15, 0x03, 0x71, 0xc1, 0xfb, 0xfd, 0x14, - 0x1b, 0x5b, 0x7c, 0x4b, 0x17, 0xff, 0xdb, 0x04, 0xd0, 0xe7, 0x33, 0x41, - 0x4e, 0x8d, 0x58, 0xb1, 0x2c, 0x5f, 0xcd, 0xee, 0x6d, 0x81, 0x2c, 0x5f, - 0xff, 0xcf, 0xc6, 0x87, 0x1f, 0xb7, 0x04, 0xcf, 0x07, 0xec, 0xb1, 0x70, - 0x61, 0xac, 0x56, 0x27, 0x83, 0x12, 0xd9, 0xc8, 0x58, 0xdc, 0x0a, 0xa4, - 0x23, 0xe3, 0x00, 0xd7, 0xaf, 0xb4, 0x00, 0x4a, 0xc5, 0xf8, 0x2c, 0x1b, - 0x41, 0x62, 0xb0, 0xf3, 0x1c, 0x8e, 0xe8, 0xe8, 0xc8, 0xdd, 0xd7, 0xce, - 0x77, 0x85, 0x1d, 0xe9, 0x34, 0x68, 0x3b, 0xdf, 0x70, 0x9e, 0x8d, 0x50, - 0xa4, 0x98, 0xe2, 0x36, 0x65, 0x84, 0x63, 0x63, 0x8e, 0x77, 0x27, 0x8a, - 0x4d, 0x8d, 0x43, 0x79, 0x4c, 0x7d, 0x42, 0xbd, 0xe3, 0xbd, 0x8f, 0x72, - 0x8a, 0x37, 0x9d, 0x4a, 0xdc, 0x3b, 0x77, 0xe5, 0xcf, 0xb4, 0xa0, 0x80, - 0x43, 0x6c, 0xa5, 0x74, 0xf2, 0x5d, 0x27, 0xa5, 0xfd, 0x09, 0xeb, 0xb4, - 0x30, 0x82, 0x85, 0x0c, 0x74, 0x72, 0x61, 0xca, 0x77, 0xee, 0x85, 0xed, - 0xfe, 0x16, 0xd1, 0x9d, 0xdd, 0xce, 0x6a, 0xc5, 0x4c, 0x29, 0x84, 0xf6, - 0x8c, 0x02, 0x17, 0xa1, 0xbc, 0x39, 0x57, 0xef, 0x4b, 0xba, 0x8a, 0x57, - 0x19, 0xd3, 0xbf, 0x4d, 0xe1, 0xf4, 0x36, 0xc5, 0x18, 0xa8, 0x76, 0xc0, - 0x2f, 0xba, 0x53, 0x7d, 0x4d, 0x6c, 0x8c, 0xbf, 0xb5, 0x34, 0x3e, 0x15, - 0xd5, 0x38, 0xeb, 0xe1, 0x4c, 0xd6, 0x82, 0x90, 0x6d, 0x66, 0x13, 0xbe, - 0x70, 0xc4, 0xbd, 0x5e, 0xff, 0x93, 0xda, 0xc7, 0xa8, 0xf9, 0x54, 0x91, - 0x66, 0x1d, 0x87, 0xac, 0xce, 0x3e, 0x0f, 0xbf, 0x17, 0xad, 0xfb, 0x7a, - 0xc0, 0xd9, 0x85, 0x40, 0x82, 0xda, 0x27, 0x77, 0xf3, 0xbd, 0xe5, 0x8a, - 0x7c, 0x9e, 0x5f, 0xbf, 0x77, 0xb3, 0xe2, 0x48, 0x16, 0x61, 0x42, 0xbd, - 0xad, 0x8b, 0xe8, 0x56, 0x8b, 0xf6, 0x3a, 0xb2, 0x3c, 0x0e, 0xd2, 0x7e, - 0x77, 0x62, 0xa2, 0x6a, 0x80, + 0x44, 0xef, 0x8c, 0x03, 0x23, 0xea, 0x23, 0xb8, 0xfe, 0x58, 0xbf, 0xf0, + 0x59, 0xd1, 0xfd, 0x38, 0x50, 0x58, 0xb8, 0x03, 0x58, 0xa1, 0x9f, 0x86, + 0x0c, 0x12, 0x05, 0xee, 0x07, 0x05, 0x8b, 0xfe, 0xfb, 0x17, 0x9a, 0x0e, + 0x05, 0x8a, 0xc3, 0xd7, 0x71, 0xfb, 0xfe, 0xd3, 0x73, 0xf9, 0x85, 0xba, + 0xc5, 0xfc, 0x2e, 0x67, 0x83, 0xd9, 0x62, 0x9c, 0xfa, 0xbe, 0x73, 0x7d, + 0x0e, 0x67, 0x96, 0x2f, 0xb5, 0xac, 0xe2, 0xc5, 0xf9, 0xbb, 0xfc, 0xf4, + 0x58, 0xae, 0xcf, 0xc4, 0xe4, 0x7d, 0x08, 0xef, 0xff, 0xdf, 0x17, 0xb5, + 0x3e, 0xe6, 0x6f, 0xc9, 0xd6, 0xeb, 0x17, 0xc2, 0xea, 0x68, 0x96, 0x2f, + 0xf3, 0x9b, 0x90, 0x90, 0x71, 0x62, 0xa0, 0x7b, 0x7c, 0x27, 0xbc, 0x39, + 0x3a, 0xc5, 0xf8, 0x5c, 0xfb, 0x84, 0xb1, 0x7f, 0x79, 0xf7, 0x71, 0xca, + 0xc5, 0xe2, 0x98, 0x2c, 0x54, 0x9e, 0x53, 0x17, 0x5b, 0x4b, 0x17, 0xff, + 0xd1, 0x13, 0xf3, 0xd2, 0x1b, 0xea, 0x29, 0xfa, 0xc5, 0xcd, 0xe5, 0x8a, + 0x81, 0xfd, 0xe0, 0x93, 0x29, 0x50, 0xd3, 0x59, 0x34, 0x77, 0x4e, 0x9e, + 0x84, 0xdd, 0xec, 0xe3, 0xac, 0x5f, 0xe9, 0xf4, 0xb9, 0x07, 0xc5, 0x8a, + 0xc3, 0xcf, 0xd0, 0xe5, 0xfb, 0x39, 0x39, 0xb2, 0xc5, 0xfe, 0x2d, 0xe2, + 0x83, 0xea, 0x0b, 0x17, 0xff, 0xde, 0xe0, 0x7c, 0xf3, 0xc9, 0x78, 0x98, + 0x0b, 0x17, 0x1b, 0xb2, 0xc5, 0x4a, 0x28, 0x30, 0xd8, 0xd5, 0x0b, 0xfb, + 0xb8, 0x49, 0xc5, 0x12, 0xc5, 0xfc, 0x71, 0xcf, 0x04, 0x4b, 0x17, 0xa1, + 0x27, 0x58, 0xbf, 0xde, 0x86, 0x1a, 0xc4, 0x05, 0x8b, 0xbe, 0xeb, 0x15, + 0xd9, 0xf4, 0x38, 0xef, 0x8d, 0x2f, 0xff, 0x98, 0x06, 0x07, 0x3b, 0x99, + 0x14, 0x27, 0x5b, 0x2c, 0x54, 0xa6, 0x9a, 0xe6, 0x2d, 0x09, 0x62, 0x2f, + 0xbf, 0x36, 0xbc, 0x52, 0xb1, 0x7c, 0x28, 0x84, 0x6a, 0xc5, 0xfd, 0xbc, + 0xf1, 0xbb, 0x02, 0xc5, 0xf3, 0x44, 0xde, 0x58, 0xad, 0xd1, 0x41, 0x11, + 0x39, 0x13, 0x06, 0x61, 0x7f, 0xff, 0xf1, 0x8d, 0xf8, 0xc2, 0xcd, 0x60, + 0x01, 0x91, 0x70, 0x51, 0x14, 0x9d, 0x62, 0xfb, 0x86, 0x70, 0x35, 0x8b, + 0xff, 0xb3, 0xa6, 0x0f, 0x52, 0xf0, 0x6e, 0x2c, 0x57, 0x67, 0xd7, 0xa2, + 0x6a, 0x74, 0xc1, 0x5a, 0x1c, 0x57, 0xef, 0x77, 0x09, 0x09, 0x62, 0xfe, + 0x60, 0xf3, 0xa4, 0xf1, 0x62, 0xb0, 0xf6, 0xc4, 0x57, 0x7f, 0xf7, 0xdc, + 0x3f, 0x39, 0x0a, 0x19, 0xc5, 0x8b, 0xf8, 0xa0, 0x59, 0x80, 0x58, 0xbf, + 0xee, 0xf8, 0x58, 0x3f, 0xb0, 0x4b, 0x17, 0xdc, 0x7f, 0x4a, 0xc5, 0x4a, + 0x22, 0x5c, 0xb1, 0x8e, 0xef, 0xff, 0xb3, 0x6c, 0xef, 0xdc, 0x72, 0x90, + 0x31, 0xd6, 0x2b, 0x13, 0x4b, 0x36, 0x19, 0xdc, 0x2d, 0xbf, 0x3e, 0xcc, + 0x40, 0x58, 0xbf, 0xf6, 0x7e, 0x75, 0x91, 0x81, 0x04, 0x12, 0x45, 0xce, + 0x12, 0xc5, 0xdb, 0x46, 0x46, 0xa6, 0x6a, 0xf4, 0x6b, 0x2a, 0x98, 0x5f, + 0x6d, 0x0b, 0x18, 0x42, 0x10, 0x70, 0x8a, 0xc8, 0x49, 0x6e, 0x65, 0xdc, + 0x2d, 0x1e, 0x37, 0xb8, 0xa1, 0x27, 0xa2, 0x13, 0xc3, 0x23, 0xf1, 0xbe, + 0x34, 0x37, 0xc1, 0x1a, 0x21, 0x42, 0x0b, 0xd1, 0xb6, 0x74, 0x36, 0x8e, + 0x28, 0xea, 0x45, 0xbf, 0xdf, 0x14, 0xf3, 0xac, 0x8d, 0xfa, 0xc5, 0x8b, + 0xf6, 0xb7, 0x66, 0xdd, 0x52, 0x5e, 0x17, 0xff, 0x7e, 0x76, 0xd4, 0xf9, + 0xf7, 0x71, 0xac, 0x5f, 0xfe, 0x1b, 0x6b, 0xa4, 0x83, 0xf2, 0x76, 0x25, + 0x8b, 0xff, 0x7a, 0x49, 0xf6, 0x3b, 0x68, 0x0b, 0x15, 0x28, 0x8a, 0x64, + 0xbb, 0xff, 0xfb, 0x07, 0xf9, 0x0e, 0x33, 0xc4, 0xc0, 0xe7, 0x24, 0x09, + 0x16, 0x8c, 0x94, 0xf2, 0xf1, 0x12, 0x23, 0x72, 0x86, 0x84, 0x71, 0x0d, + 0xff, 0xd1, 0x8d, 0x08, 0xcc, 0xd6, 0xec, 0xdb, 0xaa, 0x44, 0x72, 0xec, + 0x3a, 0xc5, 0xde, 0xc5, 0x8b, 0xee, 0xfc, 0x18, 0x16, 0x2b, 0x73, 0xd4, + 0xec, 0x5d, 0xc5, 0xef, 0xff, 0xb3, 0xcf, 0xf1, 0x7d, 0x9f, 0xbe, 0x49, + 0xab, 0x17, 0xff, 0x8d, 0x7d, 0x66, 0xa1, 0x3f, 0xfb, 0x81, 0x62, 0xef, + 0x8d, 0x62, 0xe9, 0x1a, 0xc5, 0xf7, 0x67, 0x1c, 0x16, 0x2f, 0xf8, 0x98, + 0x1c, 0x8a, 0x0d, 0xa5, 0x8b, 0xff, 0xf7, 0xa4, 0x72, 0x2e, 0xbf, 0x53, + 0xe7, 0x04, 0xc1, 0x62, 0xff, 0x79, 0xe1, 0xad, 0x3f, 0x6b, 0x17, 0x89, + 0xa3, 0x20, 0x98, 0xef, 0xc6, 0x00, 0x2f, 0xe2, 0x5e, 0x87, 0x41, 0xad, + 0x5f, 0xf0, 0x9b, 0xf8, 0x36, 0x6d, 0xd6, 0x2f, 0xfe, 0x70, 0x8c, 0xe6, + 0x3c, 0x73, 0x97, 0x96, 0x2f, 0xff, 0x6a, 0x73, 0xb8, 0xcf, 0x42, 0x40, + 0x77, 0x58, 0xad, 0xd1, 0x9f, 0xc3, 0x9f, 0x24, 0x5f, 0xff, 0x34, 0x9e, + 0x33, 0x99, 0x14, 0x8b, 0xaf, 0xea, 0xfa, 0xc5, 0xff, 0xcf, 0x14, 0x61, + 0x66, 0xb3, 0x3b, 0x09, 0x62, 0x89, 0x14, 0xa1, 0x2e, 0x5f, 0xfe, 0x26, + 0x0b, 0xd9, 0xfd, 0x4c, 0x1b, 0x4b, 0x17, 0x9c, 0x12, 0xb1, 0x7b, 0x7c, + 0x3a, 0x44, 0x61, 0x79, 0x7b, 0xab, 0xe6, 0xac, 0x5f, 0x63, 0x76, 0x05, + 0x8b, 0xff, 0x03, 0x86, 0x6f, 0xf7, 0xe8, 0xfa, 0x58, 0xbf, 0xfc, 0x42, + 0xe7, 0xdf, 0x59, 0xd2, 0x4b, 0xcb, 0x17, 0xfe, 0x2c, 0x37, 0xed, 0x06, + 0x78, 0x2c, 0x54, 0xa2, 0x27, 0x12, 0xea, 0x51, 0xdd, 0xf8, 0x66, 0xdf, + 0xce, 0x2d, 0xfd, 0x9f, 0x58, 0xbf, 0xda, 0x84, 0xff, 0xee, 0x05, 0x8b, + 0xfb, 0x3f, 0xf9, 0xee, 0x0b, 0x17, 0x3e, 0xb0, 0xf8, 0xf4, 0x69, 0x7e, + 0x1e, 0x75, 0x3e, 0xcb, 0x17, 0xdb, 0xb3, 0x6e, 0xa9, 0x12, 0x0b, 0xf9, + 0xb5, 0x9d, 0x3f, 0x8b, 0x17, 0xfe, 0xd9, 0xcd, 0x30, 0xd3, 0x45, 0xee, + 0x2c, 0x56, 0xca, 0xb2, 0x21, 0x18, 0x88, 0xc9, 0xcd, 0x84, 0x96, 0xe5, + 0x9a, 0x2c, 0x01, 0x89, 0x17, 0xd9, 0xd6, 0x2f, 0xf7, 0x9c, 0x85, 0x0c, + 0xe2, 0xc5, 0xf6, 0x39, 0x6d, 0xe3, 0xc4, 0x0c, 0x46, 0xfb, 0x40, 0x04, + 0xac, 0x5f, 0xef, 0x39, 0x0a, 0x19, 0xc5, 0x8b, 0xe8, 0x7a, 0x42, 0xc3, + 0xd6, 0x0c, 0x8e, 0xfa, 0x2f, 0x66, 0xeb, 0x17, 0xe9, 0x70, 0x39, 0xd6, + 0x2a, 0x4f, 0x32, 0x04, 0xb7, 0xf1, 0x78, 0xa4, 0xfc, 0x58, 0xbd, 0xa9, + 0x1a, 0xc5, 0x49, 0xe5, 0x61, 0x6d, 0xff, 0xf9, 0xf4, 0xfd, 0x52, 0x5b, + 0x4f, 0x9f, 0xed, 0xb2, 0xc5, 0xf9, 0xa1, 0xe7, 0xd9, 0x62, 0xa5, 0x10, + 0x2e, 0xb1, 0x78, 0xe2, 0x09, 0x62, 0xff, 0xfa, 0x19, 0xd1, 0xf9, 0xcc, + 0x2d, 0xd8, 0x80, 0xb1, 0x5b, 0x1f, 0x81, 0xa3, 0xf7, 0xff, 0x9b, 0xd1, + 0x73, 0x06, 0x31, 0x36, 0xa0, 0xb1, 0x7e, 0xce, 0x8d, 0x0e, 0xb1, 0x62, + 0xff, 0xf9, 0xbb, 0xe6, 0x7d, 0x8b, 0x36, 0x38, 0xbe, 0xb1, 0x7f, 0xf7, + 0xdf, 0xbf, 0x67, 0x7e, 0xd6, 0xa5, 0x62, 0xff, 0xe7, 0x93, 0xb0, 0xc3, + 0xea, 0x92, 0x82, 0xc5, 0xfd, 0x3f, 0xe4, 0x74, 0xf9, 0x62, 0xff, 0x37, + 0xa6, 0x02, 0x1e, 0x2c, 0x5b, 0xcb, 0x17, 0xff, 0xd9, 0xf2, 0xcf, 0x7f, + 0x21, 0x3e, 0x91, 0xac, 0x56, 0x27, 0x47, 0xba, 0x8f, 0xd1, 0xc0, 0x8e, + 0x46, 0x3e, 0x33, 0x08, 0x4a, 0xff, 0xec, 0x04, 0x76, 0x6a, 0x76, 0x6d, + 0x6e, 0xb1, 0x7e, 0x60, 0x7b, 0x00, 0xb1, 0x44, 0x7e, 0x3c, 0x49, 0xbf, + 0x0f, 0xb8, 0x67, 0x96, 0x2f, 0xef, 0xb1, 0xca, 0x7b, 0x58, 0xa9, 0x3d, + 0x8c, 0x2a, 0xba, 0x11, 0x92, 0xca, 0x41, 0x81, 0x86, 0x4a, 0xea, 0x36, + 0x18, 0x9d, 0xc2, 0x3d, 0xe1, 0x0d, 0x13, 0x5f, 0xe1, 0x42, 0xd0, 0x91, + 0x01, 0x21, 0x26, 0x72, 0x3d, 0x2f, 0x43, 0x58, 0x37, 0x9b, 0xf0, 0xbb, + 0xdd, 0xf8, 0xb1, 0x7d, 0x3a, 0x69, 0x58, 0xbf, 0xde, 0x7e, 0x6b, 0x59, + 0x05, 0x8b, 0xff, 0xe9, 0xd1, 0xa1, 0xf9, 0xf8, 0x59, 0xd1, 0xc6, 0xb1, + 0x5b, 0x22, 0xa3, 0x08, 0x77, 0x34, 0xbb, 0xae, 0xbd, 0x62, 0xc5, 0xcc, + 0x05, 0x8a, 0x58, 0xad, 0x1a, 0x33, 0x8b, 0xdf, 0xdf, 0x7e, 0xfc, 0xdf, + 0x58, 0xbf, 0xb3, 0x43, 0x66, 0xfa, 0xc5, 0xdf, 0x8c, 0x8d, 0x91, 0x8b, + 0x89, 0x1b, 0x90, 0xf0, 0xbe, 0xf1, 0x4c, 0x4b, 0x15, 0x87, 0xdc, 0xea, + 0x36, 0xed, 0x62, 0xf1, 0x08, 0xeb, 0x17, 0xff, 0x9c, 0x85, 0x0c, 0xe1, + 0x66, 0xc1, 0xc1, 0x62, 0x86, 0x7f, 0x66, 0x89, 0xf8, 0x76, 0xd1, 0x92, + 0xd9, 0x62, 0x0c, 0xc3, 0x14, 0x77, 0x8d, 0xa3, 0xb8, 0xcf, 0x5e, 0x1a, + 0xd1, 0x11, 0xb5, 0x2a, 0x9c, 0x10, 0xfc, 0xe4, 0x34, 0xfd, 0x1b, 0x20, + 0x70, 0x9b, 0xbf, 0xfa, 0x31, 0xa1, 0x19, 0x9a, 0xdd, 0x9b, 0x75, 0x48, + 0x94, 0x5f, 0x6e, 0xcd, 0xba, 0xa4, 0xf1, 0x2f, 0x07, 0x20, 0x58, 0xad, + 0x1e, 0x79, 0xcc, 0x6f, 0xfa, 0x11, 0x99, 0xad, 0xd9, 0xb7, 0x54, 0x89, + 0xa5, 0xa3, 0x30, 0xfb, 0x58, 0x8a, 0xfb, 0xac, 0x97, 0x8e, 0x58, 0xbd, + 0xf7, 0x25, 0x8a, 0x8d, 0xcf, 0x1b, 0x72, 0xab, 0xd1, 0xa8, 0x2d, 0x96, + 0x2e, 0x1c, 0x6c, 0xb1, 0x7f, 0xba, 0xea, 0xc3, 0xfc, 0x96, 0xcb, 0x17, + 0xf7, 0xe3, 0x62, 0x36, 0x74, 0xb1, 0x5d, 0x76, 0x7e, 0x10, 0x3c, 0xbf, + 0xd1, 0xa4, 0x69, 0xfc, 0x3e, 0x71, 0x62, 0xf8, 0x3d, 0xa1, 0xe5, 0x8a, + 0xeb, 0x4f, 0x92, 0x36, 0x3e, 0xbf, 0xff, 0x0d, 0xa1, 0xc1, 0x7a, 0x7d, + 0xc0, 0x7b, 0xdd, 0xac, 0x5e, 0xf7, 0xbb, 0x58, 0xbb, 0xac, 0x8d, 0xb0, + 0xfe, 0x00, 0xb3, 0x7f, 0xff, 0xa3, 0xa7, 0xbe, 0x3f, 0x5c, 0xeb, 0x63, + 0x6e, 0xbf, 0xae, 0x74, 0x30, 0xcf, 0xc7, 0x2c, 0x5f, 0xb9, 0xcc, 0x2c, + 0x58, 0xbf, 0xed, 0x6f, 0x3b, 0x66, 0x17, 0x96, 0x2f, 0x3f, 0xe3, 0x96, + 0x2f, 0xc1, 0xc5, 0xa9, 0xe8, 0xb1, 0x5f, 0x3c, 0xd2, 0x20, 0xbe, 0x67, + 0xef, 0x8b, 0x17, 0xfb, 0x9c, 0xc0, 0x1b, 0xe2, 0x58, 0xbf, 0xff, 0x7b, + 0x80, 0x2c, 0xf7, 0xf3, 0xc5, 0x32, 0x75, 0x8b, 0x7d, 0x62, 0xba, 0xd5, + 0x42, 0xf9, 0x08, 0xa7, 0x27, 0x8f, 0x84, 0x3f, 0xc8, 0x58, 0x8c, 0x8d, + 0x42, 0x54, 0xbd, 0xf9, 0xd9, 0x62, 0xf9, 0xcb, 0xb8, 0x2c, 0x50, 0xcf, + 0x07, 0x83, 0xd7, 0xfa, 0x7f, 0x22, 0x0d, 0xfa, 0x96, 0x2f, 0xd8, 0x53, + 0xdf, 0x16, 0x2f, 0xf0, 0x8f, 0xc6, 0xd3, 0x71, 0x62, 0xff, 0xe8, 0x4f, + 0xbe, 0x1f, 0x27, 0xd8, 0x75, 0x8a, 0x02, 0x28, 0xb8, 0x51, 0xe3, 0x4b, + 0xf9, 0xe7, 0xab, 0xf3, 0xa5, 0x8a, 0xd9, 0x33, 0x97, 0x86, 0xcf, 0xcc, + 0x2f, 0xff, 0xa3, 0x68, 0xde, 0x34, 0x9e, 0xb6, 0x3e, 0x35, 0x78, 0xc3, + 0x3f, 0x1c, 0xb1, 0x7e, 0x27, 0xdd, 0xc6, 0xb1, 0x7b, 0xa4, 0xc1, 0x62, + 0xfd, 0x3e, 0xe6, 0x79, 0x62, 0xf3, 0x10, 0xf0, 0xf1, 0xfe, 0x3f, 0x7f, + 0x9c, 0xde, 0xf9, 0x84, 0x6a, 0xc5, 0xfe, 0x38, 0xbd, 0xf9, 0x17, 0x5e, + 0xb1, 0x7d, 0x82, 0xd6, 0xcb, 0x17, 0x9b, 0x50, 0x30, 0xf7, 0xb8, 0x75, + 0x5d, 0x6a, 0x7b, 0xb8, 0xea, 0xed, 0xff, 0x31, 0x14, 0x25, 0x2f, 0xd8, + 0x2d, 0xd8, 0x96, 0x2f, 0x4c, 0xf9, 0x62, 0xff, 0xb0, 0x03, 0xfc, 0x94, + 0x84, 0xb1, 0x7c, 0x0e, 0x61, 0x2c, 0x54, 0x9e, 0xdb, 0x9c, 0xdf, 0xf8, + 0x5b, 0xf3, 0x8d, 0xaf, 0x49, 0xab, 0x17, 0xef, 0xfb, 0x99, 0xe5, 0x8b, + 0xfd, 0xe7, 0xfb, 0x9b, 0xf7, 0x58, 0xa7, 0x44, 0xfb, 0x21, 0x08, 0xa6, + 0xff, 0xfd, 0xf6, 0x70, 0x73, 0x0d, 0x63, 0xea, 0x70, 0x96, 0x2f, 0xec, + 0xf1, 0xb2, 0x50, 0x58, 0xb9, 0xc6, 0xb1, 0x52, 0x89, 0x91, 0xaa, 0x7c, + 0xba, 0xf0, 0xb9, 0x2b, 0x17, 0xfb, 0x80, 0xcc, 0x88, 0x33, 0xac, 0x5e, + 0x14, 0xf6, 0xb1, 0x52, 0x7a, 0x90, 0x36, 0xbf, 0xed, 0x9f, 0x9c, 0x60, + 0x7c, 0x4b, 0x17, 0xff, 0xff, 0xf7, 0x3a, 0xea, 0xdb, 0x3c, 0x6f, 0xf8, + 0xdc, 0x1c, 0x8d, 0x7d, 0x75, 0xd7, 0x5c, 0xeb, 0x9d, 0x21, 0xd7, 0x0c, + 0x33, 0xf1, 0xcb, 0x17, 0xf0, 0xf0, 0xb9, 0x3f, 0x58, 0xbe, 0x19, 0x4f, + 0x6b, 0x16, 0xd2, 0xc5, 0x0c, 0xf8, 0xb4, 0x5a, 0x22, 0x3a, 0x8d, 0x69, + 0xac, 0xbc, 0x65, 0x56, 0xfa, 0xc5, 0xff, 0x61, 0xa6, 0xb4, 0x33, 0xbf, + 0x2c, 0x5e, 0xda, 0x76, 0x58, 0xb9, 0xbb, 0xc3, 0xdb, 0x0c, 0xf2, 0xbc, + 0x89, 0xb1, 0x36, 0xdf, 0xb8, 0x23, 0x76, 0x65, 0x8b, 0xfd, 0x83, 0x63, + 0xe7, 0x7e, 0x58, 0xa8, 0x1e, 0xf9, 0x15, 0xdf, 0xb3, 0x3d, 0xfc, 0x58, + 0xa9, 0x3c, 0x8f, 0x90, 0xdf, 0xe8, 0x73, 0x5a, 0x62, 0xf2, 0xc5, 0xff, + 0xfb, 0x5e, 0xfe, 0x11, 0x37, 0xa4, 0xbd, 0x1d, 0x8b, 0x15, 0x28, 0x8a, + 0x73, 0x4a, 0x31, 0x7b, 0x6b, 0x62, 0x88, 0x3b, 0x8e, 0x17, 0xfb, 0xc3, + 0x1f, 0xb2, 0xf8, 0x9c, 0x74, 0x43, 0xf8, 0xe5, 0x39, 0x0c, 0xaf, 0x43, + 0x2b, 0xa4, 0x2a, 0xef, 0xf3, 0x19, 0xcf, 0x7e, 0x40, 0xb1, 0x7e, 0x71, + 0x8b, 0xdc, 0x58, 0xbe, 0xc3, 0xcc, 0x7a, 0xc5, 0x1a, 0x88, 0x3f, 0x9a, + 0xf0, 0xa6, 0xfe, 0x7c, 0x29, 0xef, 0x8b, 0x17, 0xb4, 0xe7, 0x58, 0xbf, + 0x0c, 0x98, 0x2e, 0x2c, 0x5f, 0x7a, 0x4b, 0x65, 0x8a, 0x34, 0xf3, 0x3c, + 0x53, 0x7b, 0x59, 0xe5, 0x8b, 0xff, 0x4e, 0xe6, 0x07, 0xee, 0x31, 0x1a, + 0xb1, 0x7f, 0xf7, 0x9f, 0x99, 0x09, 0x34, 0x2d, 0xb6, 0x58, 0xad, 0x22, + 0xa4, 0xe3, 0xbe, 0x43, 0xa9, 0x4d, 0x97, 0x1a, 0x5e, 0x19, 0x97, 0xed, + 0xfe, 0xcd, 0xa5, 0x8b, 0xf6, 0x0f, 0xae, 0xca, 0x3d, 0x62, 0xfe, 0x62, + 0x07, 0x5d, 0x94, 0x7a, 0xc5, 0xcc, 0x3e, 0x87, 0xd3, 0x1c, 0x65, 0x47, + 0x55, 0x13, 0xf8, 0xe4, 0xb8, 0x66, 0x28, 0x49, 0x5f, 0x8b, 0x9d, 0xc3, + 0x8b, 0x17, 0x98, 0xb7, 0x58, 0xbd, 0xf9, 0x0d, 0x62, 0xa0, 0x7c, 0xbe, + 0x2a, 0x08, 0x76, 0xfe, 0x33, 0xdc, 0x62, 0x35, 0x62, 0xfe, 0x0a, 0x2f, + 0xc9, 0x1a, 0xb1, 0x7b, 0x18, 0xeb, 0x17, 0xfb, 0x8d, 0xb4, 0x93, 0xc4, + 0xb1, 0x70, 0x83, 0x58, 0xb8, 0xc3, 0xac, 0x58, 0x4b, 0x15, 0x26, 0xaf, + 0xe3, 0x37, 0xd3, 0xf7, 0x3a, 0xc5, 0xd9, 0xe5, 0x8b, 0xfd, 0x07, 0xfb, + 0x41, 0xfe, 0xb1, 0x5f, 0x3c, 0xa6, 0x17, 0xbc, 0xdd, 0x86, 0xb1, 0x7b, + 0x18, 0xeb, 0x15, 0x04, 0xf7, 0x70, 0xc0, 0xd3, 0x1e, 0xc7, 0x22, 0x34, + 0xd2, 0x21, 0xc8, 0x3e, 0xd8, 0x44, 0x21, 0x8f, 0xdf, 0xfe, 0x16, 0xa0, + 0x53, 0x09, 0xf7, 0xf0, 0x96, 0x2f, 0x46, 0xfd, 0x6c, 0xac, 0x5f, 0xb9, + 0x24, 0x2e, 0x2c, 0x5d, 0xdf, 0x96, 0x2e, 0xfc, 0xac, 0x5e, 0x9f, 0x73, + 0x0d, 0x80, 0x63, 0x37, 0xa4, 0xa2, 0x58, 0xba, 0x63, 0xd6, 0x2b, 0x46, + 0xdf, 0xe3, 0xb7, 0xe6, 0x01, 0x31, 0xd6, 0x2a, 0x37, 0x4c, 0xc2, 0x49, + 0xe0, 0xb0, 0xed, 0x24, 0x43, 0x7e, 0x1f, 0xe3, 0xdc, 0x96, 0x2f, 0xf1, + 0x61, 0xe3, 0xb3, 0x52, 0xb1, 0x52, 0x7c, 0x11, 0x15, 0xde, 0x9f, 0x71, + 0x62, 0xff, 0x1f, 0xf8, 0x31, 0xbf, 0x6b, 0x17, 0xf0, 0xfe, 0x29, 0xd4, + 0xac, 0x54, 0x9f, 0x1e, 0x1a, 0xdf, 0xf7, 0xe4, 0xb2, 0x29, 0xd6, 0xcb, + 0x17, 0xf1, 0x60, 0xfe, 0xc1, 0x2c, 0x5f, 0xd0, 0x6d, 0x6d, 0xf1, 0x2c, + 0x50, 0xd1, 0x30, 0x69, 0xd4, 0x45, 0xd7, 0xfd, 0xfc, 0xd6, 0xff, 0x92, + 0xf2, 0xc5, 0x49, 0xf6, 0x08, 0xca, 0xff, 0x7b, 0xbe, 0xb4, 0xd3, 0x5c, + 0x6b, 0x17, 0xfe, 0x6e, 0xe1, 0xc3, 0x27, 0x76, 0x0d, 0x62, 0xf7, 0x7e, + 0x95, 0x8a, 0xc5, 0x50, 0xbd, 0x91, 0x3c, 0x20, 0x35, 0x19, 0x21, 0xc8, + 0x58, 0xf4, 0x48, 0x77, 0xfb, 0x08, 0x7e, 0xe4, 0x81, 0x62, 0xf1, 0x64, + 0x4b, 0x17, 0xed, 0x49, 0xf0, 0xd5, 0x8b, 0xb6, 0xd9, 0x62, 0xc3, 0xc3, + 0xc3, 0x08, 0xa6, 0xa5, 0x17, 0x78, 0x66, 0xcc, 0x17, 0xe8, 0xa7, 0xf3, + 0xe5, 0x8b, 0xcf, 0x1c, 0x75, 0x8b, 0xcf, 0x26, 0xac, 0x57, 0x66, 0xf7, + 0xa8, 0x82, 0xf4, 0x3b, 0x35, 0x62, 0xc3, 0x58, 0xbf, 0x66, 0xa1, 0xf1, + 0x2c, 0x5f, 0xa0, 0xd3, 0xdf, 0x52, 0xc5, 0xc6, 0x79, 0x62, 0xfd, 0xef, + 0x8b, 0xdc, 0x58, 0xbf, 0x3f, 0xbb, 0xcd, 0x2c, 0x50, 0xd1, 0xa7, 0xb8, + 0x97, 0x65, 0x31, 0x16, 0x1c, 0x67, 0xe5, 0x57, 0xe1, 0xcf, 0x03, 0xe2, + 0xc5, 0xc3, 0xed, 0x62, 0x8e, 0x78, 0x62, 0x2a, 0xbf, 0xf8, 0x5a, 0x68, + 0x1c, 0x43, 0xf8, 0x89, 0x62, 0xf0, 0xa7, 0x8b, 0x17, 0xfe, 0x06, 0xff, + 0x7d, 0x13, 0xfb, 0x8b, 0x17, 0xfd, 0x39, 0xc8, 0xbe, 0xe1, 0x79, 0x62, + 0x8e, 0x89, 0x86, 0x1d, 0xe2, 0x05, 0xfa, 0x1f, 0x92, 0x35, 0x62, 0xfc, + 0xed, 0xa9, 0xdd, 0x62, 0xdd, 0x30, 0xf4, 0x78, 0x53, 0x7e, 0x60, 0x7b, + 0x52, 0xb1, 0x71, 0x6c, 0xb1, 0x51, 0xa2, 0xe0, 0x24, 0xb3, 0x0c, 0x97, + 0x21, 0xe6, 0xf0, 0x9d, 0x39, 0x13, 0x43, 0x78, 0x10, 0x80, 0x22, 0x90, + 0xca, 0x2f, 0x33, 0x1d, 0x62, 0xf8, 0x51, 0x08, 0xd5, 0x8a, 0x58, 0xbf, + 0xa4, 0x67, 0x9c, 0xf2, 0xc5, 0x78, 0xdc, 0x86, 0x19, 0x7f, 0xd3, 0xa0, + 0x37, 0xa3, 0xb3, 0xcb, 0x17, 0x6b, 0x16, 0x2f, 0xdf, 0x7d, 0x31, 0xd6, + 0x2f, 0xbb, 0x7e, 0xe0, 0xb1, 0x70, 0x7b, 0x2c, 0x56, 0x1f, 0x3b, 0x94, + 0x00, 0x96, 0xb6, 0x4e, 0x12, 0x21, 0xcd, 0x2f, 0xfc, 0x88, 0x07, 0x84, + 0xfd, 0x74, 0x6f, 0xd7, 0x6b, 0x17, 0x61, 0xd6, 0x2f, 0x6b, 0xa7, 0xd6, + 0x2f, 0xd9, 0xa6, 0x91, 0xac, 0x5e, 0xed, 0xbe, 0xb1, 0x51, 0xba, 0x28, + 0x24, 0x91, 0x85, 0xc8, 0x80, 0x44, 0xf7, 0x61, 0x2c, 0x5f, 0xdb, 0x77, + 0x0f, 0xbf, 0x96, 0x28, 0x67, 0x8f, 0x82, 0xd7, 0xc2, 0x87, 0x83, 0x58, + 0xbd, 0xbc, 0xe9, 0x62, 0xff, 0xda, 0x11, 0xfe, 0xf2, 0x76, 0x25, 0x8b, + 0xdd, 0xcc, 0x7a, 0xc5, 0xfe, 0x17, 0x63, 0xf8, 0x9b, 0x8b, 0x17, 0xfa, + 0x4e, 0x59, 0x09, 0x25, 0x8a, 0xf9, 0xf3, 0xf0, 0xda, 0xff, 0x39, 0x19, + 0x87, 0x7f, 0x2c, 0x56, 0xc9, 0xaf, 0x39, 0x2e, 0x87, 0xbe, 0x7d, 0xe8, + 0x44, 0x74, 0x22, 0xbf, 0x8b, 0x22, 0x29, 0xd9, 0x62, 0xfe, 0x22, 0x73, + 0xfb, 0x16, 0x2f, 0x4f, 0x70, 0x58, 0xb8, 0xa0, 0xb1, 0x74, 0x6c, 0x12, + 0xc5, 0x08, 0xda, 0xc7, 0x0b, 0xd4, 0xaa, 0xaf, 0xc8, 0xdf, 0xe3, 0xd7, + 0xd8, 0xb8, 0x8b, 0x3a, 0x94, 0xef, 0xfe, 0xdc, 0x4c, 0x3e, 0x98, 0x3e, + 0xbb, 0x28, 0xf5, 0x8b, 0xe7, 0xfc, 0xf4, 0x58, 0xad, 0x1f, 0xb7, 0x94, + 0xaf, 0xf4, 0xea, 0x7b, 0x06, 0xa5, 0x62, 0xfd, 0x09, 0xc0, 0x47, 0xac, + 0x5f, 0xff, 0xc2, 0xf7, 0x18, 0x1f, 0x9c, 0x1b, 0xea, 0x02, 0xc5, 0x8b, + 0xe1, 0xce, 0x76, 0xb1, 0x69, 0xd1, 0xff, 0x1d, 0x6e, 0xbb, 0x46, 0x87, + 0xa1, 0x53, 0x7f, 0xda, 0xcf, 0xe1, 0x14, 0x8d, 0x62, 0xff, 0xfe, 0x9f, + 0x88, 0x6f, 0x31, 0x4b, 0xf0, 0x4d, 0x1d, 0x8b, 0x15, 0xa4, 0x4a, 0x1c, + 0xde, 0xf3, 0xf5, 0x6c, 0xb1, 0x6d, 0x96, 0x2a, 0x4d, 0xa1, 0x10, 0xde, + 0xf8, 0xa3, 0xd6, 0x2f, 0x03, 0x3e, 0xb1, 0x7f, 0x14, 0xfb, 0xed, 0x05, + 0x8a, 0x93, 0xeb, 0xec, 0x86, 0x21, 0xdb, 0xfe, 0x62, 0x1f, 0xd8, 0xf9, + 0xa5, 0x8b, 0xde, 0x9d, 0x2c, 0x54, 0xab, 0x49, 0xd8, 0x8b, 0x23, 0x04, + 0x78, 0x5e, 0xc4, 0xae, 0xd0, 0x8a, 0x01, 0x80, 0x8e, 0x2e, 0x6d, 0xd6, + 0x2f, 0xff, 0xff, 0x61, 0x13, 0x43, 0xee, 0x60, 0x7a, 0xd4, 0xc1, 0xfc, + 0xfa, 0x60, 0x2c, 0x5f, 0x86, 0x2d, 0x83, 0x3a, 0xc5, 0xff, 0xf8, 0xa4, + 0x7c, 0x13, 0x3c, 0x1c, 0x1c, 0x17, 0x16, 0x2f, 0xec, 0xf7, 0xdf, 0xb8, + 0x2c, 0x54, 0x48, 0x84, 0x25, 0x5a, 0xdd, 0x1a, 0x7f, 0x85, 0x85, 0xfd, + 0xbb, 0x9a, 0x16, 0xdb, 0x2c, 0x5f, 0xdd, 0xf3, 0x0e, 0xdc, 0x58, 0xbf, + 0xb0, 0x89, 0xbd, 0xb2, 0xc5, 0xec, 0xfc, 0xac, 0x5e, 0xc3, 0x77, 0x58, + 0xa1, 0x9b, 0xbd, 0x0e, 0x5b, 0x4b, 0x17, 0xed, 0xb5, 0x3d, 0xe9, 0x62, + 0xb6, 0x37, 0xb8, 0x25, 0x7f, 0xff, 0x78, 0xc1, 0xcb, 0x6b, 0x08, 0x06, + 0x73, 0xdc, 0xed, 0x62, 0xfb, 0x5b, 0x03, 0xcb, 0x17, 0xf9, 0xbb, 0xd4, + 0xc1, 0xb4, 0xb1, 0x7f, 0x0f, 0x21, 0x20, 0xe2, 0xc5, 0x62, 0x39, 0x9d, + 0x7c, 0x89, 0x44, 0x69, 0x52, 0xaf, 0xd6, 0x03, 0x19, 0x1a, 0x57, 0x65, + 0x2e, 0x69, 0xf2, 0xf6, 0x68, 0x25, 0xee, 0x46, 0x0f, 0x7f, 0xff, 0x46, + 0xa1, 0x46, 0x92, 0x7f, 0x19, 0xb6, 0x7c, 0xc3, 0x3f, 0x1c, 0xb1, 0x7f, + 0x7d, 0xfd, 0x24, 0x05, 0x8b, 0xef, 0xf4, 0x7d, 0x2c, 0x54, 0x9e, 0x96, + 0x16, 0xdd, 0xa8, 0x96, 0x2f, 0xfe, 0xfe, 0xff, 0x7e, 0xfd, 0x87, 0x6e, + 0x2c, 0x5e, 0x92, 0xd9, 0x62, 0xf7, 0xdb, 0xcb, 0x15, 0x28, 0x9a, 0xc1, + 0x9f, 0xa3, 0x86, 0x3b, 0x7e, 0x8d, 0xa3, 0x5c, 0x6b, 0x8d, 0x7d, 0x4b, + 0x17, 0x4f, 0x96, 0x2f, 0x14, 0x6f, 0xd1, 0x62, 0x8e, 0x6e, 0xfc, 0x2f, + 0x7f, 0x66, 0x73, 0x3b, 0xf2, 0xc5, 0xc2, 0x8f, 0x58, 0xb6, 0xc3, 0x3c, + 0x93, 0x97, 0x5f, 0xbc, 0x78, 0x88, 0x6b, 0x17, 0xdf, 0x0e, 0x39, 0x96, + 0x2a, 0x36, 0x4d, 0x8f, 0x1f, 0xd9, 0xa8, 0x8a, 0x44, 0x55, 0x7d, 0xce, + 0x39, 0xd6, 0x2f, 0xfe, 0xfb, 0xf6, 0x14, 0x9f, 0xf2, 0xf0, 0x58, 0xa8, + 0x8f, 0xa7, 0xe4, 0x77, 0x85, 0xa3, 0x56, 0x2e, 0x17, 0x6b, 0x15, 0x03, + 0x71, 0xc1, 0xfb, 0xfd, 0x14, 0x1b, 0x5b, 0x7c, 0x4b, 0x17, 0xff, 0xdb, + 0x04, 0xd0, 0xe7, 0x33, 0x41, 0x4e, 0x8d, 0x58, 0xb1, 0x2c, 0x5f, 0xcd, + 0xee, 0x6d, 0x81, 0x2c, 0x5f, 0xff, 0xcf, 0xc6, 0x87, 0x1f, 0xa7, 0x04, + 0xcf, 0x07, 0xe8, 0xb1, 0x70, 0x61, 0xac, 0x56, 0x27, 0x83, 0x12, 0xd9, + 0xc8, 0x58, 0xdc, 0x0a, 0xa4, 0x23, 0xe3, 0x00, 0xd7, 0xaf, 0x00, 0x12, + 0xb1, 0x7f, 0xb7, 0x72, 0x1b, 0x11, 0xab, 0x15, 0xa3, 0xd1, 0x10, 0xed, + 0xf8, 0x2c, 0x1b, 0x41, 0x62, 0xb0, 0xf2, 0xdc, 0x8a, 0xe8, 0xe8, 0xc8, + 0xdd, 0xdb, 0xa9, 0x75, 0x85, 0x1d, 0x69, 0x34, 0x69, 0x08, 0xde, 0xbb, + 0x84, 0x6c, 0x6a, 0x85, 0x24, 0xca, 0x4e, 0xda, 0x18, 0x70, 0x8d, 0x6c, + 0x72, 0x84, 0xf2, 0x7c, 0xb4, 0xd8, 0xd4, 0x77, 0x95, 0x75, 0xdc, 0x2b, + 0xde, 0x50, 0x6c, 0x7c, 0x23, 0xa2, 0x8d, 0xe7, 0x52, 0xcc, 0x8f, 0x19, + 0x57, 0xe7, 0x0c, 0x5a, 0x51, 0x38, 0x21, 0xf2, 0x52, 0xd0, 0xb9, 0x38, + 0x41, 0xe9, 0xc7, 0x61, 0x42, 0x23, 0xa4, 0x30, 0x82, 0x85, 0xd4, 0x74, + 0x73, 0xe1, 0xca, 0x77, 0xea, 0x8c, 0x36, 0xff, 0x0b, 0x68, 0xce, 0xae, + 0xa7, 0x35, 0x62, 0xa6, 0x18, 0x4a, 0x1b, 0x46, 0x33, 0x0b, 0xdd, 0x3d, + 0x1c, 0xac, 0xa7, 0xa6, 0xc3, 0xc5, 0x2d, 0x58, 0xeb, 0x5f, 0xac, 0xdc, + 0x7d, 0x0e, 0x21, 0x46, 0x2a, 0x1d, 0xb7, 0xc1, 0xea, 0x95, 0x21, 0x53, + 0x5c, 0xa2, 0xdb, 0x6d, 0x4e, 0x05, 0x85, 0x7d, 0xc0, 0x3a, 0xff, 0xff, + 0x35, 0xd2, 0x0d, 0x9b, 0x5b, 0x09, 0xef, 0x9d, 0xe2, 0x3f, 0x78, 0x85, + 0x9f, 0x7b, 0x5e, 0x93, 0x1f, 0x2b, 0xa6, 0x2c, 0xca, 0x99, 0x35, 0x9a, + 0x96, 0x81, 0xf9, 0x11, 0x16, 0x9f, 0xbc, 0x39, 0x16, 0xcc, 0xcd, 0x00, + 0x16, 0xf2, 0x8f, 0xaf, 0x9e, 0x5a, 0x2c, 0x60, 0x93, 0xf3, 0x10, 0xbf, + 0x3e, 0xd4, 0x47, 0x72, 0x2c, 0xcd, 0xd7, 0xfa, 0x5b, 0xec, 0x00, 0xad, + 0x2e, 0x74, 0x75, 0x66, 0x3e, 0x1d, 0xaa, 0xc7, 0xea, 0xc6, 0x29, 0x4d, + 0x00, }; -static const unsigned kPreloadedHSTSBits = 1489857; -static const unsigned kHSTSRootPosition = 1489184; +static const unsigned kPreloadedHSTSBits = 1689888; +static const unsigned kHSTSRootPosition = 1689210; #endif // NET_HTTP_TRANSPORT_SECURITY_STATE_STATIC_H_
diff --git a/remoting/base/breakpad_win_unittest.cc b/remoting/base/breakpad_win_unittest.cc index f0da52c..38c368b30 100644 --- a/remoting/base/breakpad_win_unittest.cc +++ b/remoting/base/breakpad_win_unittest.cc
@@ -140,9 +140,13 @@ } TEST_F(BreakpadWinDeathTest, TestAccessViolation) { +#if !defined(ADDRESS_SANITIZER) + // ASan overrides the user unhandled exception filter so we won't receive this + // callback. if (callbacks_.get()) { EXPECT_CALL(*callbacks_, OnClientDumpRequested()); } +#endif // !defined(ADDRESS_SANITIZER) // Generate access violation exception. ASSERT_DEATH(*reinterpret_cast<volatile int*>(NULL) = 1, "");
diff --git a/sandbox/mac/bootstrap_sandbox_unittest.mm b/sandbox/mac/bootstrap_sandbox_unittest.mm index a6225a9..3f71e65 100644 --- a/sandbox/mac/bootstrap_sandbox_unittest.mm +++ b/sandbox/mac/bootstrap_sandbox_unittest.mm
@@ -104,13 +104,14 @@ base::LaunchOptions options; options.pre_exec_delegate = pre_exec_delegate.get(); - base::Process process = SpawnChildWithOptions(child_name, options); - ASSERT_TRUE(process.IsValid()); + base::SpawnChildResult spawn_child = + SpawnChildWithOptions(child_name, options); + ASSERT_TRUE(spawn_child.process.IsValid()); int code = 0; - EXPECT_TRUE(process.WaitForExit(&code)); + EXPECT_TRUE(spawn_child.process.WaitForExit(&code)); EXPECT_EQ(0, code); if (out_pid) - *out_pid = process.Pid(); + *out_pid = spawn_child.process.Pid(); } protected: @@ -124,15 +125,15 @@ base::scoped_nsobject<DistributedNotificationObserver> observer( [[DistributedNotificationObserver alloc] init]); - base::Process process = SpawnChild(kNotificationTestMain); - ASSERT_TRUE(process.IsValid()); + base::SpawnChildResult spawn_child = SpawnChild(kNotificationTestMain); + ASSERT_TRUE(spawn_child.process.IsValid()); int code = 0; - EXPECT_TRUE(process.WaitForExit(&code)); + EXPECT_TRUE(spawn_child.process.WaitForExit(&code)); EXPECT_EQ(0, code); [observer waitForNotification]; EXPECT_EQ(1, [observer receivedCount]); - EXPECT_EQ(process.Pid(), [[observer object] intValue]); + EXPECT_EQ(spawn_child.process.Pid(), [[observer object] intValue]); } // Run the test with the sandbox enabled without notifications on the policy @@ -471,7 +472,9 @@ sandbox_->NewClient(kTestPolicyId)); base::LaunchOptions options; options.pre_exec_delegate = pre_exec_delegate.get(); - base::Process process = SpawnChildWithOptions("ChildOutliveSandbox", options); + base::SpawnChildResult spawn_result = + SpawnChildWithOptions("ChildOutliveSandbox", options); + base::Process& process = spawn_result.process; ASSERT_TRUE(process.IsValid()); // Synchronize with the child.
diff --git a/sandbox/mac/sandbox_mac_compiler_unittest.mm b/sandbox/mac/sandbox_mac_compiler_unittest.mm index 404bf4bb..0e9ee97 100644 --- a/sandbox/mac/sandbox_mac_compiler_unittest.mm +++ b/sandbox/mac/sandbox_mac_compiler_unittest.mm
@@ -32,11 +32,11 @@ } TEST_F(SandboxMacCompilerTest, BasicProfileTest) { - base::Process process = SpawnChild("BasicProfileProcess"); - ASSERT_TRUE(process.IsValid()); + base::SpawnChildResult spawn_child = SpawnChild("BasicProfileProcess"); + ASSERT_TRUE(spawn_child.process.IsValid()); int exit_code = 42; - EXPECT_TRUE(process.WaitForExitWithTimeout(TestTimeouts::action_max_timeout(), - &exit_code)); + EXPECT_TRUE(spawn_child.process.WaitForExitWithTimeout( + TestTimeouts::action_max_timeout(), &exit_code)); EXPECT_EQ(exit_code, 0); } @@ -55,11 +55,12 @@ } TEST_F(SandboxMacCompilerTest, BasicProfileTestWithParam) { - base::Process process = SpawnChild("BasicProfileWithParamProcess"); - ASSERT_TRUE(process.IsValid()); + base::SpawnChildResult spawn_child = + SpawnChild("BasicProfileWithParamProcess"); + ASSERT_TRUE(spawn_child.process.IsValid()); int exit_code = 42; - EXPECT_TRUE(process.WaitForExitWithTimeout(TestTimeouts::action_max_timeout(), - &exit_code)); + EXPECT_TRUE(spawn_child.process.WaitForExitWithTimeout( + TestTimeouts::action_max_timeout(), &exit_code)); EXPECT_EQ(exit_code, 0); } @@ -86,11 +87,11 @@ } TEST_F(SandboxMacCompilerTest, ProfileFunctionalityTest) { - base::Process process = SpawnChild("ProfileFunctionalProcess"); - ASSERT_TRUE(process.IsValid()); + base::SpawnChildResult spawn_child = SpawnChild("ProfileFunctionalProcess"); + ASSERT_TRUE(spawn_child.process.IsValid()); int exit_code = 42; - EXPECT_TRUE(process.WaitForExitWithTimeout(TestTimeouts::action_max_timeout(), - &exit_code)); + EXPECT_TRUE(spawn_child.process.WaitForExitWithTimeout( + TestTimeouts::action_max_timeout(), &exit_code)); EXPECT_EQ(exit_code, 0); } @@ -126,11 +127,12 @@ } TEST_F(SandboxMacCompilerTest, ProfileFunctionalityTestWithParams) { - base::Process process = SpawnChild("ProfileFunctionalTestWithParamsProcess"); - ASSERT_TRUE(process.IsValid()); + base::SpawnChildResult spawn_child = + SpawnChild("ProfileFunctionalTestWithParamsProcess"); + ASSERT_TRUE(spawn_child.process.IsValid()); int exit_code = 42; - EXPECT_TRUE(process.WaitForExitWithTimeout(TestTimeouts::action_max_timeout(), - &exit_code)); + EXPECT_TRUE(spawn_child.process.WaitForExitWithTimeout( + TestTimeouts::action_max_timeout(), &exit_code)); EXPECT_EQ(exit_code, 0); } @@ -149,11 +151,12 @@ } TEST_F(SandboxMacCompilerTest, ProfileFunctionalityTestError) { - base::Process process = SpawnChild("ProfileFunctionalityTestErrorProcess"); - ASSERT_TRUE(process.IsValid()); + base::SpawnChildResult spawn_child = + SpawnChild("ProfileFunctionalityTestErrorProcess"); + ASSERT_TRUE(spawn_child.process.IsValid()); int exit_code = 42; - EXPECT_TRUE(process.WaitForExitWithTimeout(TestTimeouts::action_max_timeout(), - &exit_code)); + EXPECT_TRUE(spawn_child.process.WaitForExitWithTimeout( + TestTimeouts::action_max_timeout(), &exit_code)); EXPECT_EQ(exit_code, 0); }
diff --git a/sandbox/mac/sandbox_mac_compiler_v2_unittest.mm b/sandbox/mac/sandbox_mac_compiler_v2_unittest.mm index aba42ed..adb9895 100644 --- a/sandbox/mac/sandbox_mac_compiler_v2_unittest.mm +++ b/sandbox/mac/sandbox_mac_compiler_v2_unittest.mm
@@ -126,11 +126,11 @@ } TEST_F(SandboxMacCompilerV2Test, V2ProfileTest) { - base::Process process = SpawnChild("V2ProfileProcess"); - ASSERT_TRUE(process.IsValid()); + base::SpawnChildResult spawn_child = SpawnChild("V2ProfileProcess"); + ASSERT_TRUE(spawn_child.process.IsValid()); int exit_code = 42; - EXPECT_TRUE(process.WaitForExitWithTimeout(TestTimeouts::action_max_timeout(), - &exit_code)); + EXPECT_TRUE(spawn_child.process.WaitForExitWithTimeout( + TestTimeouts::action_max_timeout(), &exit_code)); EXPECT_EQ(exit_code, 0); }
diff --git a/sandbox/mac/xpc_message_server_unittest.cc b/sandbox/mac/xpc_message_server_unittest.cc index 0feaac9..630833f 100644 --- a/sandbox/mac/xpc_message_server_unittest.cc +++ b/sandbox/mac/xpc_message_server_unittest.cc
@@ -147,18 +147,17 @@ #pragma GCC diagnostic pop ASSERT_EQ(KERN_SUCCESS, kr); - base::Process child = base::SpawnMultiProcessTestChild( - "GetSenderPID", - base::GetMultiProcessTestChildBaseCommandLine(), + base::SpawnChildResult spawn_child = base::SpawnMultiProcessTestChild( + "GetSenderPID", base::GetMultiProcessTestChildBaseCommandLine(), base::LaunchOptions()); - ASSERT_TRUE(child.IsValid()); + ASSERT_TRUE(spawn_child.process.IsValid()); int exit_code = -1; - ASSERT_TRUE(child.WaitForExit(&exit_code)); + ASSERT_TRUE(spawn_child.process.WaitForExit(&exit_code)); EXPECT_EQ(0, exit_code); - EXPECT_EQ(child.Pid(), sender_pid); - EXPECT_EQ(child.Pid(), child_pid); + EXPECT_EQ(spawn_child.process.Pid(), sender_pid); + EXPECT_EQ(spawn_child.process.Pid(), child_pid); EXPECT_EQ(sender_pid, child_pid); }
diff --git a/testing/android/docs/junit4.md b/testing/android/docs/junit4.md index caa30f332..d697bcd 100644 --- a/testing/android/docs/junit4.md +++ b/testing/android/docs/junit4.md
@@ -104,7 +104,7 @@ - `//third_party/android_support_test_runner:runner_java` (for `AndroidJUnitRunner`, etc) - `//third_party/android_support_test_runner:rules_java` (for `ActivityTestRule`, etc) 2. Add class runner to your test apk manifest. - ([example][3]) + ([example][2]) - Keep in mind you can have multiple instrumentations in your manifest. Our test runner will run JUnit4 tests with JUnit4 runner and JUnit3 tests with non-JUnit4 runner.
diff --git a/testing/buildbot/chromium.chromiumos.json b/testing/buildbot/chromium.chromiumos.json index 171db6c..8bc2d57 100644 --- a/testing/buildbot/chromium.chromiumos.json +++ b/testing/buildbot/chromium.chromiumos.json
@@ -393,6 +393,12 @@ "swarming": { "can_use_on_swarming_builders": true }, + "test": "sync_integration_tests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "ui_arc_unittests" }, { @@ -770,6 +776,12 @@ "swarming": { "can_use_on_swarming_builders": true }, + "test": "sync_integration_tests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "ui_arc_unittests" }, { @@ -1116,6 +1128,12 @@ "swarming": { "can_use_on_swarming_builders": true }, + "test": "sync_integration_tests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "ui_arc_unittests" }, {
diff --git a/testing/buildbot/chromium.fyi.json b/testing/buildbot/chromium.fyi.json index aa7ef08..a778e7a 100644 --- a/testing/buildbot/chromium.fyi.json +++ b/testing/buildbot/chromium.fyi.json
@@ -255,7 +255,8 @@ { "args": [ "--shared-prefs-file=src/chrome/android/shared_preference_files/test/vr_cardboard_skipdon_setupcomplete.json", - "--additional-apk=src/third_party/gvr-android-sdk/test-apks/vr_services/vr_services_current.apk" + "--additional-apk=src/third_party/gvr-android-sdk/test-apks/vr_services/vr_services_current.apk", + "--strict-mode=off" ], "test": "chrome_public_test_vr_apk" }, @@ -263,7 +264,8 @@ "args": [ "--shared-prefs-file=src/chrome/android/shared_preference_files/test/vr_ddview_skipdon_setupcomplete.json", "--additional-apk=src/third_party/gvr-android-sdk/test-apks/vr_services/vr_services_current.apk", - "--additional-apk=src/third_party/gvr-android-sdk/test-apks/daydream_home/daydream_home_current.apk" + "--additional-apk=src/third_party/gvr-android-sdk/test-apks/daydream_home/daydream_home_current.apk", + "--strict-mode=off" ], "test": "chrome_public_test_vr_apk" }
diff --git a/testing/buildbot/chromium.perf.fyi.json b/testing/buildbot/chromium.perf.fyi.json index b5eac5be..5c0b256 100644 --- a/testing/buildbot/chromium.perf.fyi.json +++ b/testing/buildbot/chromium.perf.fyi.json
@@ -3140,6 +3140,63 @@ }, { "args": [ + "memory.desktop", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "memory.desktop", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device6", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "memory.desktop", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "memory.desktop.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device6", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ "memory.dual_browser_test", "-v", "--upload-results", @@ -14164,6 +14221,63 @@ }, { "args": [ + "memory.desktop", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "memory.desktop", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build48-b4", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "memory.desktop", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "memory.desktop.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build48-b4", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ "memory.dual_browser_test", "-v", "--upload-results", @@ -25150,6 +25264,63 @@ }, { "args": [ + "memory.desktop", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "memory.desktop", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "1002:9874", + "id": "build221-b4", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "memory.desktop", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "memory.desktop.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "1002:9874", + "id": "build221-b4", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ "memory.dual_browser_test", "-v", "--upload-results",
diff --git a/testing/buildbot/chromium.perf.json b/testing/buildbot/chromium.perf.json index 00d7962..09f5873 100644 --- a/testing/buildbot/chromium.perf.json +++ b/testing/buildbot/chromium.perf.json
@@ -3245,6 +3245,63 @@ }, { "args": [ + "memory.desktop", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release" + ], + "isolate_name": "telemetry_perf_tests", + "name": "memory.desktop", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "102b:0534", + "id": "build151-m1", + "os": "Ubuntu-14.04", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "memory.desktop", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "memory.desktop.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "102b:0534", + "id": "build151-m1", + "os": "Ubuntu-14.04", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ "memory.dual_browser_test", "-v", "--upload-results", @@ -14231,6 +14288,63 @@ }, { "args": [ + "memory.desktop", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release" + ], + "isolate_name": "telemetry_perf_tests", + "name": "memory.desktop", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:0166", + "id": "build105-b1", + "os": "Mac-10.11", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "memory.desktop", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "memory.desktop.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:0166", + "id": "build105-b1", + "os": "Mac-10.11", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ "memory.dual_browser_test", "-v", "--upload-results", @@ -25179,6 +25293,63 @@ }, { "args": [ + "memory.desktop", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release" + ], + "isolate_name": "telemetry_perf_tests", + "name": "memory.desktop", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:0a2e", + "id": "build161-m1", + "os": "Mac-10.12", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "memory.desktop", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "memory.desktop.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:0a2e", + "id": "build161-m1", + "os": "Mac-10.12", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ "memory.dual_browser_test", "-v", "--upload-results", @@ -36127,6 +36298,63 @@ }, { "args": [ + "memory.desktop", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release" + ], + "isolate_name": "telemetry_perf_tests", + "name": "memory.desktop", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:1626", + "id": "build126-b1", + "os": "Mac-10.11", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "memory.desktop", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "memory.desktop.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:1626", + "id": "build126-b1", + "os": "Mac-10.11", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ "memory.dual_browser_test", "-v", "--upload-results", @@ -47075,6 +47303,63 @@ }, { "args": [ + "memory.desktop", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release" + ], + "isolate_name": "telemetry_perf_tests", + "name": "memory.desktop", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:0a26", + "id": "build27-b1", + "os": "Mac-10.12", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "memory.desktop", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "memory.desktop.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:0a26", + "id": "build27-b1", + "os": "Mac-10.12", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ "memory.dual_browser_test", "-v", "--upload-results", @@ -58023,6 +58308,63 @@ }, { "args": [ + "memory.desktop", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release" + ], + "isolate_name": "telemetry_perf_tests", + "name": "memory.desktop", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "1002:6821", + "id": "build131-b1", + "os": "Mac-10.11", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "memory.desktop", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "memory.desktop.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "1002:6821", + "id": "build131-b1", + "os": "Mac-10.11", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ "memory.dual_browser_test", "-v", "--upload-results", @@ -68971,6 +69313,63 @@ }, { "args": [ + "memory.desktop", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release" + ], + "isolate_name": "telemetry_perf_tests", + "name": "memory.desktop", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:0d26", + "id": "build7-b1", + "os": "Mac-10.11", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "memory.desktop", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "memory.desktop.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:0d26", + "id": "build7-b1", + "os": "Mac-10.11", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ "memory.dual_browser_test", "-v", "--upload-results", @@ -79919,6 +80318,63 @@ }, { "args": [ + "memory.desktop", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "memory.desktop", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:1616", + "id": "build120-b1", + "os": "Windows-10-10240", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "memory.desktop", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "memory.desktop.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:1616", + "id": "build120-b1", + "os": "Windows-10-10240", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ "memory.dual_browser_test", "-v", "--upload-results", @@ -90886,6 +91342,63 @@ }, { "args": [ + "memory.desktop", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "memory.desktop", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "102b:0534", + "id": "build135-m1", + "os": "Windows-10-10240", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "memory.desktop", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "memory.desktop.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "102b:0534", + "id": "build135-m1", + "os": "Windows-10-10240", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ "memory.dual_browser_test", "-v", "--upload-results", @@ -101891,6 +102404,63 @@ }, { "args": [ + "memory.desktop", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "memory.desktop", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "1002:6613", + "id": "build104-m1", + "os": "Windows-2008ServerR2-SP1", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "memory.desktop", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "memory.desktop.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "1002:6613", + "id": "build104-m1", + "os": "Windows-2008ServerR2-SP1", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ "memory.dual_browser_test", "-v", "--upload-results", @@ -112896,6 +113466,63 @@ }, { "args": [ + "memory.desktop", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "memory.desktop", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:041a", + "id": "build167-m1", + "os": "Windows-2008ServerR2-SP1", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "memory.desktop", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "memory.desktop.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:041a", + "id": "build167-m1", + "os": "Windows-2008ServerR2-SP1", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ "memory.dual_browser_test", "-v", "--upload-results", @@ -123920,6 +124547,63 @@ }, { "args": [ + "memory.desktop", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "memory.desktop", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "10de:104a", + "id": "build95-m1", + "os": "Windows-2008ServerR2-SP1", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "memory.desktop", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "memory.desktop.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "10de:104a", + "id": "build95-m1", + "os": "Windows-2008ServerR2-SP1", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ "memory.dual_browser_test", "-v", "--upload-results", @@ -134925,6 +135609,63 @@ }, { "args": [ + "memory.desktop", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release" + ], + "isolate_name": "telemetry_perf_tests", + "name": "memory.desktop", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "102b:0532", + "id": "build188-m1", + "os": "Windows-2008ServerR2-SP1", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "memory.desktop", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "memory.desktop.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "102b:0532", + "id": "build188-m1", + "os": "Windows-2008ServerR2-SP1", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ "memory.dual_browser_test", "-v", "--upload-results", @@ -145911,6 +146652,63 @@ }, { "args": [ + "memory.desktop", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "memory.desktop", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "102b:0532", + "id": "build141-m1", + "os": "Windows-2008ServerR2-SP1", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "memory.desktop", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "memory.desktop.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "102b:0532", + "id": "build141-m1", + "os": "Windows-2008ServerR2-SP1", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ "memory.dual_browser_test", "-v", "--upload-results", @@ -156916,6 +157714,63 @@ }, { "args": [ + "memory.desktop", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "memory.desktop", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "102b:0532", + "id": "build146-m1", + "os": "Windows-2012ServerR2-SP0", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "memory.desktop", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "memory.desktop.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "102b:0532", + "id": "build146-m1", + "os": "Windows-2012ServerR2-SP0", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ "memory.dual_browser_test", "-v", "--upload-results", @@ -167883,6 +168738,63 @@ }, { "args": [ + "memory.desktop", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "memory.desktop", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:161e", + "id": "build33-b1", + "os": "Windows-10-10240", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "memory.desktop", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "memory.desktop.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:161e", + "id": "build33-b1", + "os": "Windows-10-10240", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ "memory.dual_browser_test", "-v", "--upload-results",
diff --git a/third_party/WebKit/LayoutTests/FlagExpectations/enable-browser-side-navigation b/third_party/WebKit/LayoutTests/FlagExpectations/enable-browser-side-navigation index 1683f65a..9ff174e 100644 --- a/third_party/WebKit/LayoutTests/FlagExpectations/enable-browser-side-navigation +++ b/third_party/WebKit/LayoutTests/FlagExpectations/enable-browser-side-navigation
@@ -20,14 +20,8 @@ # https://crbug.com/695072: Preserve SourceLocation information. # This results in a missing line number in console error messages. -# Fixed by https://codereview.chromium.org/2720763002/ -crbug.com/551000 http/tests/inspector/console-resource-errors.html [ Failure ] -crbug.com/555418 http/tests/security/contentSecurityPolicy/redirect-does-not-match-paths.html [ Timeout ] -crbug.com/695072 http/tests/security/location-href-clears-username-password.html [ Failure ] +# The following tests need teh SourceLocation forwarded to the renderer when adding MixedContents error messages to the console. crbug.com/695072 http/tests/security/mixedContent/insecure-iframe-with-hsts.https.html [ Failure ] -crbug.com/551000 virtual/mojo-loading/http/tests/inspector/console-resource-errors.html [ Failure ] -crbug.com/555418 virtual/mojo-loading/http/tests/security/contentSecurityPolicy/redirect-does-not-match-paths.html [ Timeout ] -crbug.com/695072 virtual/mojo-loading/http/tests/security/location-href-clears-username-password.html [ Failure ] crbug.com/695072 virtual/mojo-loading/http/tests/security/mixedContent/insecure-iframe-with-hsts.https.html [ Failure ] # These tests are flaky.
diff --git a/third_party/WebKit/LayoutTests/FlagExpectations/enable-slimming-paint-v2 b/third_party/WebKit/LayoutTests/FlagExpectations/enable-slimming-paint-v2 index 18a7e68..0c37b7d 100644 --- a/third_party/WebKit/LayoutTests/FlagExpectations/enable-slimming-paint-v2 +++ b/third_party/WebKit/LayoutTests/FlagExpectations/enable-slimming-paint-v2
@@ -244,7 +244,6 @@ Bug(none) compositing/gestures/gesture-tapHighlight-with-squashing.html [ Failure ] Bug(none) compositing/iframes/become-composited-nested-iframes.html [ Failure ] Bug(none) compositing/iframes/become-overlapped-iframe.html [ Failure ] -Bug(none) compositing/iframes/composited-iframe-alignment.html [ Failure ] Bug(none) compositing/iframes/composited-parent-iframe.html [ Failure ] Bug(none) compositing/iframes/connect-compositing-iframe2.html [ Failure ] Bug(none) compositing/iframes/connect-compositing-iframe3.html [ Failure ] @@ -384,9 +383,6 @@ Bug(none) compositing/reflections/simple-composited-reflections.html [ Failure ] Bug(none) compositing/reflections/transform-inside-reflection.html [ Failure ] Bug(none) compositing/rendering-contexts.html [ Failure ] -Bug(none) compositing/root-scroller/basic-disable-ancestor-clipping.html [ Failure ] -Bug(none) compositing/root-scroller/clipping-ancestor-is-composited-sibling.html [ Failure ] -Bug(none) compositing/root-scroller/clipping-ancestor-is-non-composited-sibling.html [ Failure ] Bug(none) compositing/rtl/rtl-absolute-overflow-scrolled.html [ Failure Crash ] Bug(none) compositing/rtl/rtl-absolute-overflow.html [ Failure Crash ] Bug(none) compositing/rtl/rtl-absolute.html [ Failure ] @@ -402,7 +398,6 @@ Bug(none) compositing/rtl/rtl-iframe-relative.html [ Failure ] Bug(none) compositing/rtl/rtl-overflow-invalidation.html [ Failure Crash ] Bug(none) compositing/rtl/rtl-relative.html [ Failure ] -Bug(none) compositing/scaling/preferred-raster-bounds.html [ Failure ] Bug(none) compositing/scaling/tiled-layer-recursion.html [ Crash Timeout ] Bug(none) compositing/scrollbars/custom-composited-different-track-parts.html [ Failure ] Bug(none) compositing/scrollbars/nested-overlay-scrollbars.html [ Failure ] @@ -448,7 +443,6 @@ Bug(none) compositing/video/video-poster.html [ Crash Failure ] Bug(none) compositing/video/video-reflection.html [ Crash Failure ] Bug(none) compositing/visibility/layer-visible-content.html [ Failure ] -Bug(none) compositing/visibility/overlays-persist-on-navigation.html [ Crash ] Bug(none) compositing/visibility/overlays.html [ Failure Crash ] Bug(none) compositing/visibility/visibility-image-layers-dynamic.html [ Crash Failure ] Bug(none) compositing/visibility/visibility-image-layers.html [ Failure ] @@ -491,8 +485,6 @@ Bug(none) fast/block/positioning/051.html [ Failure ] Bug(none) fast/block/positioning/055.html [ Failure ] Bug(none) fast/block/positioning/auto/007.html [ Failure ] -Bug(none) fast/block/positioning/auto/vertical-lr/005.html [ Failure ] -Bug(none) fast/block/positioning/auto/vertical-rl/005.html [ Failure ] Bug(none) fast/block/positioning/fixed-positioning-scrollbar-bug.html [ Failure ] Bug(none) fast/block/positioning/offsetLeft-offsetTop-multicolumn.html [ Failure ] Bug(none) fast/block/positioning/relative-overflow-block.html [ Failure ] @@ -531,7 +523,6 @@ Bug(none) fast/box-shadow/basic-shadows.html [ Failure ] Bug(none) fast/box-shadow/box-shadow-transformed.html [ Failure ] Bug(none) fast/box-shadow/box-shadow.html [ Failure ] -Bug(none) fast/box-shadow/scaled-box-shadow.html [ Failure ] Bug(none) fast/box-sizing/box-sizing.html [ Failure ] Bug(none) fast/canvas/canvas-composite-video.html [ Failure ] Bug(none) fast/canvas/canvas-css-clip-path.html [ Failure ] @@ -557,11 +548,8 @@ Bug(none) fast/css/last-of-type-pseudo-class.html [ Failure ] Bug(none) fast/css/line-height-overflow.html [ Failure ] Bug(none) fast/css/nested-rounded-corners.html [ Failure ] -Bug(none) fast/css/object-fit-img-svg.html [ Failure ] -Bug(none) fast/css/object-fit-img-svg2.html [ Failure ] Bug(none) fast/css/only-child-pseudo-class.html [ Failure ] Bug(none) fast/css/only-of-type-pseudo-class.html [ Failure ] -Bug(none) fast/css/outline-auto-empty-rects.html [ Failure ] Bug(none) fast/css/outline-offset-large.html [ Failure ] Bug(none) fast/css/resize-corner-tracking-transformed.html [ Failure ] Bug(none) fast/css/text-overflow-ellipsis-text-align-center.html [ Failure ] @@ -614,19 +602,15 @@ Bug(none) fast/forms/fieldset/fieldset-align.html [ Failure ] Bug(none) fast/forms/huge-mac-input-clamped-height.html [ Failure ] Bug(none) fast/forms/huge-mac-input-clamped-width.html [ Failure ] -Bug(none) fast/forms/number/number-appearance-spinbutton-layer.html [ Failure ] Bug(none) fast/forms/placeholder-position.html [ Failure ] Bug(none) fast/forms/select/listbox-appearance-basic.html [ Failure ] Bug(none) fast/forms/select/menulist-appearance-basic.html [ Failure ] Bug(none) fast/forms/select/menulist-appearance-rtl.html [ Failure ] Bug(none) fast/forms/text/input-appearance-selection.html [ Failure ] -Bug(none) fast/forms/text/input-readonly-autoscroll.html [ Failure ] Bug(none) fast/forms/text/input-table.html [ Failure ] Bug(none) fast/forms/text/input-text-scroll-left-on-blur.html [ Failure ] Bug(none) fast/forms/textarea/basic-textareas-quirks.html [ Failure ] Bug(none) fast/forms/textarea/basic-textareas.html [ Failure ] -Bug(none) fast/forms/textarea/textarea-scrolled-focus-ring.html [ Failure ] -Bug(none) fast/forms/textarea/textarea-scrolled-type.html [ Failure ] Bug(none) fast/forms/textarea/textAreaLineHeight.html [ Failure ] Bug(none) fast/frames/frame-set-rotation-hit.html [ Crash Timeout ] Bug(none) fast/frames/frame-set-scaling-hit.html [ Crash Timeout ] @@ -667,7 +651,6 @@ Bug(none) fast/inline/inline-continuation-borders.html [ Failure ] Bug(none) fast/layers/normal-flow-hit-test.html [ Crash Failure ] Bug(none) fast/layers/opacity-outline.html [ Failure ] -Bug(none) fast/layers/opacity-transforms.html [ Failure ] Bug(none) fast/layers/overflow-hidden-rounded-corners-occlusion.html [ Failure ] Bug(none) fast/layers/remove-layer-with-nested-stacking.html [ Skip ] Bug(none) fast/layers/scroll-rect-to-visible.html [ Failure ] @@ -879,7 +862,6 @@ Bug(none) fast/overflow/006.html [ Failure ] Bug(none) fast/overflow/007.html [ Failure ] Bug(none) fast/overflow/clip-rects-fixed-ancestor.html [ Failure ] -Bug(none) fast/overflow/overflow-focus-ring.html [ Failure ] Bug(none) fast/overflow/overflow-update-transform.html [ Failure ] Bug(none) fast/overflow/overflow-x-y.html [ Failure ] Bug(none) fast/overflow/position-fixed-transform-clipping.html [ Failure ] @@ -963,8 +945,6 @@ Bug(none) fast/text-autosizing/hackernews-comments.html [ Failure ] Bug(none) fast/text/capitalize-boundaries.html [ Failure ] Bug(none) fast/text/descent-clip-in-scaled-page.html [ Crash Timeout ] -Bug(none) fast/text/ellipsis-ltr-text-in-ltr-flow-underline-composition.html [ Failure ] -Bug(none) fast/text/ellipsis-rtl-text-in-ltr-flow-underline-composition.html [ Failure ] Bug(none) fast/text/emphasis.html [ Failure ] Bug(none) fast/text/font-stretch-variant.html [ Failure ] Bug(none) fast/text/font-weight-variant.html [ Failure ] @@ -978,7 +958,6 @@ Bug(none) fast/text/word-break.html [ Failure ] Bug(none) fast/writing-mode/border-radius-clipping-vertical-lr.html [ Failure ] Bug(none) fast/writing-mode/fieldsets.html [ Failure ] -Bug(none) svg/animations/animateMotion-accumulate-1a.svg [ Failure ] Bug(none) svg/animations/animateMotion-accumulate-1b.svg [ Failure ] Bug(none) svg/animations/animateMotion-accumulate-1c.svg [ Failure ] Bug(none) svg/animations/animateMotion-accumulate-2a.svg [ Failure ] @@ -987,7 +966,6 @@ Bug(none) svg/as-image/image-respects-pageScaleFactor.html [ Crash Timeout ] # Subpixel differences -Bug(none) svg/as-image/img-preserveAspectRatio-support-1.html [ Failure ] Bug(none) svg/as-image/svgview-references.html [ Failure ] Bug(none) svg/batik/filters/feTile.svg [ Failure ] Bug(none) svg/batik/filters/filterRegions.svg [ Failure ] @@ -1000,8 +978,6 @@ Bug(none) svg/batik/text/longTextOnPath.svg [ Failure Timeout ] Bug(none) svg/batik/text/smallFonts.svg [ Crash Failure Timeout ] Bug(none) svg/batik/text/textAnchor.svg [ Failure ] -Bug(none) svg/batik/text/textAnchor2.svg [ Failure ] -Bug(none) svg/batik/text/textAnchor3.svg [ Failure ] Bug(none) svg/batik/text/textDecoration.svg [ Failure ] Bug(none) svg/batik/text/textEffect.svg [ Failure ] Bug(none) svg/batik/text/textEffect2.svg [ Failure ] @@ -1038,15 +1014,9 @@ Bug(none) svg/custom/clip-path-with-css-transform-2.svg [ Failure ] Bug(none) svg/custom/clip-path-with-transform.svg [ Failure ] Bug(none) svg/custom/container-opacity-clip-viewBox.svg [ Failure ] -Bug(none) svg/custom/coords-relative-units-transforms.svg [ Failure ] Bug(none) svg/custom/cross-referenced-resources.html [ Failure ] Bug(none) svg/custom/dominant-baseline-hanging.svg [ Failure ] Bug(none) svg/custom/embedding-external-svgs.xhtml [ Failure ] -Bug(none) svg/custom/feComponentTransfer-Discrete.svg [ Failure ] -Bug(none) svg/custom/feComponentTransfer-Gamma.svg [ Failure ] -Bug(none) svg/custom/feComponentTransfer-Linear.svg [ Failure ] -Bug(none) svg/custom/feComponentTransfer-Table.svg [ Failure ] -Bug(none) svg/custom/feDisplacementMap-01.svg [ Failure ] Bug(none) svg/custom/focus-ring.svg [ Failure ] Bug(none) svg/custom/foreign-object-skew.svg [ Failure ] Bug(none) svg/custom/getscreenctm-in-scrollable-div-area-nested.xhtml [ Failure ] @@ -1057,7 +1027,6 @@ Bug(none) svg/custom/image-with-preserveAspectRatio-none.html [ Failure ] Bug(none) svg/custom/image-with-transform-clip-filter.svg [ Failure ] Bug(none) svg/custom/inline-svg-in-xhtml.xml [ Failure ] -Bug(none) svg/custom/invalid-stroke-hex.svg [ Failure ] Bug(none) svg/custom/junk-data.svg [ Failure ] Bug(none) svg/custom/linking-a-03-b-transform.svg [ Failure ] Bug(none) svg/custom/linking-a-03-b-viewBox-transform.svg [ Failure ] @@ -1074,18 +1043,13 @@ Bug(none) svg/custom/path-bad-data.svg [ Failure ] Bug(none) svg/custom/preserve-aspect-ratio-syntax.svg [ Failure ] Bug(none) svg/custom/recursive-clippath.svg [ Failure ] -Bug(none) svg/custom/recursive-filter.svg [ Failure ] -Bug(none) svg/custom/recursive-gradient.svg [ Failure ] Bug(none) svg/custom/recursive-mask.svg [ Failure ] -Bug(none) svg/custom/root-container-opacity-clip-viewBox.svg [ Failure ] Bug(none) svg/custom/shape-rendering.svg [ Failure ] Bug(none) svg/custom/shapes-supporting-markers.svg [ Failure ] Bug(none) svg/custom/svg-overflow-types.svg [ Failure ] Bug(none) svg/custom/text-clip.svg [ Failure ] Bug(none) svg/custom/transformed-outlines.svg [ Failure ] -Bug(none) svg/custom/transformed-pattern-clamp-svg-root.svg [ Failure ] Bug(none) svg/custom/use-clipped-transform.svg [ Failure ] -Bug(none) svg/custom/use-css-no-effect-on-shadow-tree.svg [ Failure ] Bug(none) svg/custom/use-font-face-crash.svg [ Failure ] Bug(none) svg/custom/use-modify-container-in-target.svg [ Failure ] Bug(none) svg/custom/use-modify-target-container.svg [ Failure ] @@ -1099,7 +1063,6 @@ Bug(none) svg/custom/viewport-clippath-invalidation.html [ Failure ] Bug(none) svg/custom/visibility-override-clip.svg [ Failure ] Bug(none) svg/custom/visibility-override-mask.svg [ Failure ] -Bug(none) svg/custom/visited-link-color.svg [ Failure ] Bug(none) svg/custom/width-full-percentage.svg [ Failure ] Bug(none) svg/dom/css-transforms.xhtml [ Failure ] Bug(none) svg/dom/SVGStringList-basics.xhtml [ Failure ] @@ -1110,7 +1073,6 @@ Bug(none) svg/dynamic-updates/SVGFEColorMatrixElement-svgdom-in-prop.html [ Failure ] Bug(none) svg/dynamic-updates/SVGFEColorMatrixElement-svgdom-type-prop.html [ Failure ] Bug(none) svg/dynamic-updates/SVGFEColorMatrixElement-svgdom-values-prop.html [ Failure ] -Bug(none) svg/dynamic-updates/SVGLinearGradientElement-svgdom-gradientTransform-prop.html [ Failure ] Bug(none) svg/dynamic-updates/SVGMaskElement-dom-height-attr.html [ Failure ] Bug(none) svg/dynamic-updates/SVGMaskElement-dom-maskContentUnits-attr.html [ Failure ] Bug(none) svg/dynamic-updates/SVGMaskElement-dom-maskUnits-attr.html [ Failure ] @@ -1123,7 +1085,6 @@ Bug(none) svg/dynamic-updates/SVGMaskElement-svgdom-width-prop.html [ Failure ] Bug(none) svg/dynamic-updates/SVGMaskElement-svgdom-x-prop.html [ Failure ] Bug(none) svg/dynamic-updates/SVGMaskElement-svgdom-y-prop.html [ Failure ] -Bug(none) svg/dynamic-updates/SVGRadialGradientElement-svgdom-gradientTransform-prop.html [ Failure ] Bug(none) svg/filters/big-sized-filter.svg [ Failure ] Bug(none) svg/filters/feDropShadow.svg [ Failure ] Bug(none) svg/filters/feImage-filterUnits-objectBoundingBox-primitiveUnits-objectBoundingBox.svg [ Failure ] @@ -1131,19 +1092,13 @@ Bug(none) svg/filters/feImage-filterUnits-userSpaceOnUse-primitiveUnits-objectBoundingBox.svg [ Failure ] Bug(none) svg/filters/feImage-filterUnits-userSpaceOnUse-primitiveUnits-userSpaceOnUse.svg [ Failure ] Bug(none) svg/filters/feImage-late-indirect-update.svg [ Failure ] -Bug(none) svg/filters/feImage-subregions-preseveAspectRatio-none-with-viewBox.svg [ Failure ] -Bug(none) svg/filters/feImage-subregions-preseveAspectRatio-none.svg [ Failure ] -Bug(none) svg/filters/feImage-subregions.svg [ Failure ] Bug(none) svg/filters/filter-clip.svg [ Failure ] Bug(none) svg/filters/filter-huge-clamping.svg [ Failure ] -Bug(none) svg/filters/subRegion-one-effect.svg [ Failure ] -Bug(none) svg/filters/subRegion-two-effects.svg [ Failure ] Bug(none) svg/filters/svg-element-invalid-filter.html [ Failure ] Bug(none) svg/filters/svg-filter-child-box-reflect.html [ Failure ] Bug(none) svg/filters/svg-filter-root-box-reflect.html [ Failure ] Bug(none) svg/foreignObject/clip.html [ Failure ] Bug(none) svg/foreignObject/mask.html [ Failure ] -Bug(none) svg/hixie/data-types/001.xml [ Failure ] Bug(none) svg/hixie/error/012.xml [ Failure ] Bug(none) svg/hixie/error/017.xml [ Failure ] Bug(none) svg/hixie/mixed/006.xml [ Failure ] @@ -1161,148 +1116,40 @@ Bug(none) svg/overflow/overflow-on-outermost-svg-element-ignore-attribute-2.svg [ Failure ] Bug(none) svg/overflow/overflow-on-outermost-svg-element-ignore-attribute-3.svg [ Failure ] Bug(none) svg/overflow/overflow-on-outermost-svg-element-in-xhtml-defaults.xhtml [ Failure ] -Bug(none) svg/stroke/zero-length-arc-linecaps-rendering.svg [ Failure ] -Bug(none) svg/stroke/zero-length-path-linecap-rendering.svg [ Failure ] Bug(none) svg/stroke/zero-length-subpaths-linecap-rendering.svg [ Failure ] Bug(none) svg/text/foreignObject-text-clipping-bug.xml [ Failure ] -Bug(none) svg/text/select-textLength-spacingAndGlyphs-squeeze-4.svg [ Failure ] Bug(none) svg/text/selection-styles.xhtml [ Failure ] Bug(none) svg/text/small-fonts-3.svg [ Failure ] -Bug(none) svg/text/text-fill-opacity.svg [ Failure ] -Bug(none) svg/text/text-selection-align-01-b.svg [ Failure ] -Bug(none) svg/text/text-selection-align-02-b.svg [ Failure ] -Bug(none) svg/text/text-selection-align-03-b.svg [ Failure ] -Bug(none) svg/text/text-selection-align-04-b.svg [ Failure ] -Bug(none) svg/text/text-selection-align-05-b.svg [ Failure ] -Bug(none) svg/text/text-selection-align-06-b.svg [ Failure ] Bug(none) svg/text/text-selection-path-01-b.svg [ Failure ] -Bug(none) svg/text/text-selection-text-04-t.svg [ Failure ] Bug(none) svg/text/text-selection-text-08-b.svg [ Failure ] -Bug(none) svg/text/text-selection-ws-02-t.svg [ Failure ] Bug(none) svg/transforms/svg-css-transforms-clip-path.xhtml [ Failure ] Bug(none) svg/transforms/svg-css-transforms.xhtml [ Failure ] Bug(none) svg/transforms/text-with-mask-with-svg-transform.svg [ Failure ] Bug(none) svg/transforms/text-with-pattern-inside-transformed-html.xhtml [ Failure ] Bug(none) svg/transforms/text-with-pattern-with-svg-transform.svg [ Failure ] -Bug(none) svg/W3C-I18N/g-dirLTR-ubNone.svg [ Failure ] -Bug(none) svg/W3C-I18N/g-dirLTR-ubOverride.svg [ Failure ] -Bug(none) svg/W3C-I18N/g-dirRTL-ubNone.svg [ Failure ] -Bug(none) svg/W3C-I18N/g-dirRTL-ubOverride.svg [ Failure ] -Bug(none) svg/W3C-I18N/text-anchor-dirLTR-anchorEnd.svg [ Failure ] -Bug(none) svg/W3C-I18N/text-anchor-dirLTR-anchorMiddle.svg [ Failure ] -Bug(none) svg/W3C-I18N/text-anchor-dirLTR-anchorStart.svg [ Failure ] -Bug(none) svg/W3C-I18N/text-anchor-dirNone-anchorEnd.svg [ Failure ] -Bug(none) svg/W3C-I18N/text-anchor-dirNone-anchorMiddle.svg [ Failure ] -Bug(none) svg/W3C-I18N/text-anchor-dirNone-anchorStart.svg [ Failure ] -Bug(none) svg/W3C-I18N/text-anchor-dirRTL-anchorEnd.svg [ Failure ] -Bug(none) svg/W3C-I18N/text-anchor-dirRTL-anchorMiddle.svg [ Failure ] -Bug(none) svg/W3C-I18N/text-anchor-dirRTL-anchorStart.svg [ Failure ] -Bug(none) svg/W3C-I18N/text-anchor-inherited-dirLTR-anchorEnd.svg [ Failure ] -Bug(none) svg/W3C-I18N/text-anchor-inherited-dirLTR-anchorMiddle.svg [ Failure ] -Bug(none) svg/W3C-I18N/text-anchor-inherited-dirLTR-anchorStart.svg [ Failure ] -Bug(none) svg/W3C-I18N/text-anchor-inherited-dirRTL-anchorEnd.svg [ Failure ] -Bug(none) svg/W3C-I18N/text-anchor-inherited-dirRTL-anchorMiddle.svg [ Failure ] -Bug(none) svg/W3C-I18N/text-anchor-inherited-dirRTL-anchorStart.svg [ Failure ] -Bug(none) svg/W3C-I18N/text-anchor-no-markup.svg [ Failure ] -Bug(none) svg/W3C-I18N/text-dirLTR-ubNone.svg [ Failure ] -Bug(none) svg/W3C-I18N/text-dirLTR-ubOverride.svg [ Failure ] -Bug(none) svg/W3C-I18N/text-dirRTL-ubNone.svg [ Failure ] -Bug(none) svg/W3C-I18N/text-dirRTL-ubOverride.svg [ Failure ] -Bug(none) svg/W3C-I18N/tspan-direction-ltr.svg [ Failure ] -Bug(none) svg/W3C-I18N/tspan-direction-rtl.svg [ Failure ] -Bug(none) svg/W3C-I18N/tspan-dirLTR-ubEmbed-in-rtl-context.svg [ Failure ] -Bug(none) svg/W3C-I18N/tspan-dirLTR-ubNone-in-rtl-context.svg [ Failure ] -Bug(none) svg/W3C-I18N/tspan-dirLTR-ubOverride-in-default-context.svg [ Failure ] -Bug(none) svg/W3C-I18N/tspan-dirLTR-ubOverride-in-ltr-context.svg [ Failure ] -Bug(none) svg/W3C-I18N/tspan-dirLTR-ubOverride-in-rtl-context.svg [ Failure ] -Bug(none) svg/W3C-I18N/tspan-dirNone-ubOverride-in-default-context.svg [ Failure ] -Bug(none) svg/W3C-I18N/tspan-dirNone-ubOverride-in-ltr-context.svg [ Failure ] -Bug(none) svg/W3C-I18N/tspan-dirNone-ubOverride-in-rtl-context.svg [ Failure ] -Bug(none) svg/W3C-I18N/tspan-dirRTL-ubEmbed-in-default-context.svg [ Failure ] -Bug(none) svg/W3C-I18N/tspan-dirRTL-ubEmbed-in-ltr-context.svg [ Failure ] -Bug(none) svg/W3C-I18N/tspan-dirRTL-ubNone-in-default-context.svg [ Failure ] -Bug(none) svg/W3C-I18N/tspan-dirRTL-ubNone-in-ltr-context.svg [ Failure ] -Bug(none) svg/W3C-I18N/tspan-dirRTL-ubOverride-in-default-context.svg [ Failure ] -Bug(none) svg/W3C-I18N/tspan-dirRTL-ubOverride-in-ltr-context.svg [ Failure ] -Bug(none) svg/W3C-I18N/tspan-dirRTL-ubOverride-in-rtl-context.svg [ Failure ] Bug(none) svg/W3C-SVG-1.1-SE/coords-dom-01-f.svg [ Failure ] Bug(none) svg/W3C-SVG-1.1-SE/coords-dom-02-f.svg [ Failure ] -Bug(none) svg/W3C-SVG-1.1-SE/coords-dom-04-f.svg [ Failure ] -Bug(none) svg/W3C-SVG-1.1-SE/coords-units-03-b.svg [ Failure ] -Bug(none) svg/W3C-SVG-1.1-SE/filters-image-03-f.svg [ Failure ] -Bug(none) svg/W3C-SVG-1.1-SE/filters-image-05-f.svg [ Failure ] -Bug(none) svg/W3C-SVG-1.1-SE/painting-marker-05-f.svg [ Failure ] Bug(none) svg/W3C-SVG-1.1-SE/pservers-grad-17-b.svg [ Failure ] Bug(none) svg/W3C-SVG-1.1-SE/pservers-grad-20-b.svg [ Failure ] -Bug(none) svg/W3C-SVG-1.1-SE/pservers-pattern-03-f.svg [ Failure ] -Bug(none) svg/W3C-SVG-1.1-SE/struct-use-14-f.svg [ Failure ] -Bug(none) svg/W3C-SVG-1.1-SE/svgdom-over-01-f.svg [ Failure ] -Bug(none) svg/W3C-SVG-1.1-SE/text-tspan-02-b.svg [ Failure ] -Bug(none) svg/W3C-SVG-1.1-SE/types-dom-01-b.svg [ Failure ] -Bug(none) svg/W3C-SVG-1.1-SE/types-dom-04-b.svg [ Failure ] Bug(none) svg/W3C-SVG-1.1/animate-elem-04-t.svg [ Failure ] Bug(none) svg/W3C-SVG-1.1/animate-elem-06-t.svg [ Failure ] Bug(none) svg/W3C-SVG-1.1/animate-elem-07-t.svg [ Failure ] -Bug(none) svg/W3C-SVG-1.1/animate-elem-08-t.svg [ Failure ] -Bug(none) svg/W3C-SVG-1.1/animate-elem-09-t.svg [ Failure ] -Bug(none) svg/W3C-SVG-1.1/animate-elem-10-t.svg [ Failure ] -Bug(none) svg/W3C-SVG-1.1/animate-elem-11-t.svg [ Failure ] -Bug(none) svg/W3C-SVG-1.1/animate-elem-12-t.svg [ Failure ] -Bug(none) svg/W3C-SVG-1.1/animate-elem-14-t.svg [ Failure ] -Bug(none) svg/W3C-SVG-1.1/animate-elem-15-t.svg [ Failure ] -Bug(none) svg/W3C-SVG-1.1/animate-elem-16-t.svg [ Failure ] -Bug(none) svg/W3C-SVG-1.1/animate-elem-17-t.svg [ Failure ] -Bug(none) svg/W3C-SVG-1.1/animate-elem-18-t.svg [ Failure ] -Bug(none) svg/W3C-SVG-1.1/animate-elem-19-t.svg [ Failure ] -Bug(none) svg/W3C-SVG-1.1/animate-elem-24-t.svg [ Failure ] -Bug(none) svg/W3C-SVG-1.1/animate-elem-28-t.svg [ Failure ] Bug(none) svg/W3C-SVG-1.1/animate-elem-33-t.svg [ Failure ] Bug(none) svg/W3C-SVG-1.1/animate-elem-34-t.svg [ Failure ] Bug(none) svg/W3C-SVG-1.1/animate-elem-36-t.svg [ Failure ] Bug(none) svg/W3C-SVG-1.1/animate-elem-37-t.svg [ Failure ] Bug(none) svg/W3C-SVG-1.1/animate-elem-39-t.svg [ Failure ] -Bug(none) svg/W3C-SVG-1.1/animate-elem-40-t.svg [ Failure ] Bug(none) svg/W3C-SVG-1.1/animate-elem-41-t.svg [ Failure ] -Bug(none) svg/W3C-SVG-1.1/animate-elem-46-t.svg [ Failure ] -Bug(none) svg/W3C-SVG-1.1/animate-elem-60-t.svg [ Failure ] -Bug(none) svg/W3C-SVG-1.1/animate-elem-61-t.svg [ Failure ] -Bug(none) svg/W3C-SVG-1.1/animate-elem-62-t.svg [ Failure ] -Bug(none) svg/W3C-SVG-1.1/animate-elem-63-t.svg [ Failure ] -Bug(none) svg/W3C-SVG-1.1/animate-elem-64-t.svg [ Failure ] -Bug(none) svg/W3C-SVG-1.1/animate-elem-65-t.svg [ Failure ] -Bug(none) svg/W3C-SVG-1.1/animate-elem-66-t.svg [ Failure ] -Bug(none) svg/W3C-SVG-1.1/animate-elem-67-t.svg [ Failure ] -Bug(none) svg/W3C-SVG-1.1/animate-elem-68-t.svg [ Failure ] -Bug(none) svg/W3C-SVG-1.1/animate-elem-69-t.svg [ Failure ] -Bug(none) svg/W3C-SVG-1.1/animate-elem-70-t.svg [ Failure ] -Bug(none) svg/W3C-SVG-1.1/animate-elem-77-t.svg [ Failure ] Bug(none) svg/W3C-SVG-1.1/animate-elem-78-t.svg [ Failure ] Bug(none) svg/W3C-SVG-1.1/animate-elem-80-t.svg [ Failure ] Bug(none) svg/W3C-SVG-1.1/animate-elem-81-t.svg [ Failure ] Bug(none) svg/W3C-SVG-1.1/animate-elem-82-t.svg [ Failure ] Bug(none) svg/W3C-SVG-1.1/animate-elem-83-t.svg [ Failure ] -Bug(none) svg/W3C-SVG-1.1/coords-coord-01-t.svg [ Failure ] -Bug(none) svg/W3C-SVG-1.1/coords-coord-02-t.svg [ Failure ] -Bug(none) svg/W3C-SVG-1.1/coords-trans-02-t.svg [ Failure ] -Bug(none) svg/W3C-SVG-1.1/coords-trans-03-t.svg [ Failure ] -Bug(none) svg/W3C-SVG-1.1/coords-trans-05-t.svg [ Failure ] -Bug(none) svg/W3C-SVG-1.1/coords-trans-06-t.svg [ Failure ] Bug(none) svg/W3C-SVG-1.1/coords-units-01-b.svg [ Failure ] Bug(none) svg/W3C-SVG-1.1/coords-units-02-b.svg [ Failure ] Bug(none) svg/W3C-SVG-1.1/coords-viewattr-01-b.svg [ Failure ] -Bug(none) svg/W3C-SVG-1.1/coords-viewattr-02-b.svg [ Failure ] Bug(none) svg/W3C-SVG-1.1/filters-blend-01-b.svg [ Failure ] Bug(none) svg/W3C-SVG-1.1/filters-color-01-b.svg [ Failure ] -Bug(none) svg/W3C-SVG-1.1/filters-composite-02-b.svg [ Failure ] -Bug(none) svg/W3C-SVG-1.1/filters-comptran-01-b.svg [ Failure ] -Bug(none) svg/W3C-SVG-1.1/filters-displace-01-f.svg [ Failure ] -Bug(none) svg/W3C-SVG-1.1/filters-gauss-01-b.svg [ Failure ] -Bug(none) svg/W3C-SVG-1.1/filters-image-01-b.svg [ Failure ] -Bug(none) svg/W3C-SVG-1.1/filters-light-01-f.svg [ Failure ] -Bug(none) svg/W3C-SVG-1.1/filters-light-04-f.svg [ Failure ] -Bug(none) svg/W3C-SVG-1.1/filters-morph-01-f.svg [ Failure ] -Bug(none) svg/W3C-SVG-1.1/filters-offset-01-b.svg [ Failure ] -Bug(none) svg/W3C-SVG-1.1/filters-turb-02-f.svg [ Failure ] Bug(none) svg/W3C-SVG-1.1/fonts-elem-03-b.svg [ Failure ] Bug(none) svg/W3C-SVG-1.1/fonts-elem-04-b.svg [ Failure ] Bug(none) svg/W3C-SVG-1.1/fonts-elem-07-b.svg [ Failure ] @@ -1317,68 +1164,25 @@ Bug(none) svg/W3C-SVG-1.1/masking-path-04-b.svg [ Failure ] Bug(none) svg/W3C-SVG-1.1/masking-path-05-f.svg [ Failure ] Bug(none) svg/W3C-SVG-1.1/metadata-example-01-b.svg [ Failure ] -Bug(none) svg/W3C-SVG-1.1/painting-fill-03-t.svg [ Failure ] -Bug(none) svg/W3C-SVG-1.1/painting-fill-04-t.svg [ Failure ] Bug(none) svg/W3C-SVG-1.1/painting-marker-02-f.svg [ Failure ] -Bug(none) svg/W3C-SVG-1.1/painting-render-01-b.svg [ Failure ] -Bug(none) svg/W3C-SVG-1.1/painting-stroke-01-t.svg [ Failure ] -Bug(none) svg/W3C-SVG-1.1/painting-stroke-02-t.svg [ Failure ] -Bug(none) svg/W3C-SVG-1.1/painting-stroke-03-t.svg [ Failure ] -Bug(none) svg/W3C-SVG-1.1/painting-stroke-04-t.svg [ Failure ] Bug(none) svg/W3C-SVG-1.1/paths-data-02-t.svg [ Pass Failure ] -Bug(none) svg/W3C-SVG-1.1/paths-data-10-t.svg [ Failure ] -Bug(none) svg/W3C-SVG-1.1/pservers-grad-09-b.svg [ Failure ] -Bug(none) svg/W3C-SVG-1.1/pservers-grad-12-b.svg [ Failure ] Bug(none) svg/W3C-SVG-1.1/pservers-grad-13-b.svg [ Failure ] -Bug(none) svg/W3C-SVG-1.1/render-elems-01-t.svg [ Failure ] -Bug(none) svg/W3C-SVG-1.1/render-elems-02-t.svg [ Failure ] -Bug(none) svg/W3C-SVG-1.1/render-elems-03-t.svg [ Failure ] Bug(none) svg/W3C-SVG-1.1/render-groups-01-b.svg [ Failure ] -Bug(none) svg/W3C-SVG-1.1/render-groups-03-t.svg [ Failure ] -Bug(none) svg/W3C-SVG-1.1/script-handle-02-b.svg [ Failure ] -Bug(none) svg/W3C-SVG-1.1/script-handle-03-b.svg [ Failure ] -Bug(none) svg/W3C-SVG-1.1/script-handle-04-b.svg [ Failure ] -Bug(none) svg/W3C-SVG-1.1/shapes-circle-02-t.svg [ Failure ] Bug(none) svg/W3C-SVG-1.1/shapes-ellipse-02-t.svg [ Failure ] -Bug(none) svg/W3C-SVG-1.1/shapes-rect-02-t.svg [ Failure ] Bug(none) svg/W3C-SVG-1.1/struct-frag-02-t.svg [ Failure ] -Bug(none) svg/W3C-SVG-1.1/struct-frag-03-t.svg [ Failure ] -Bug(none) svg/W3C-SVG-1.1/struct-frag-06-t.svg [ Failure ] Bug(none) svg/W3C-SVG-1.1/struct-group-03-t.svg [ Failure ] -Bug(none) svg/W3C-SVG-1.1/struct-image-06-t.svg [ Failure ] -Bug(none) svg/W3C-SVG-1.1/struct-image-08-t.svg [ Failure ] -Bug(none) svg/W3C-SVG-1.1/struct-image-09-t.svg [ Failure ] -Bug(none) svg/W3C-SVG-1.1/struct-image-10-t.svg [ Failure ] -Bug(none) svg/W3C-SVG-1.1/struct-symbol-01-b.svg [ Failure ] Bug(none) svg/W3C-SVG-1.1/struct-use-01-t.svg [ Failure ] -Bug(none) svg/W3C-SVG-1.1/struct-use-03-t.svg [ Failure ] -Bug(none) svg/W3C-SVG-1.1/text-align-01-b.svg [ Failure ] -Bug(none) svg/W3C-SVG-1.1/text-align-02-b.svg [ Failure ] -Bug(none) svg/W3C-SVG-1.1/text-align-03-b.svg [ Failure ] -Bug(none) svg/W3C-SVG-1.1/text-align-04-b.svg [ Failure ] -Bug(none) svg/W3C-SVG-1.1/text-align-05-b.svg [ Failure ] -Bug(none) svg/W3C-SVG-1.1/text-align-06-b.svg [ Failure ] -Bug(none) svg/W3C-SVG-1.1/text-align-08-b.svg [ Failure ] -Bug(none) svg/W3C-SVG-1.1/text-intro-03-b.svg [ Failure ] -Bug(none) svg/W3C-SVG-1.1/text-path-01-b.svg [ Failure ] -Bug(none) svg/W3C-SVG-1.1/text-text-04-t.svg [ Failure ] -Bug(none) svg/W3C-SVG-1.1/text-text-05-t.svg [ Failure ] Bug(none) svg/W3C-SVG-1.1/text-text-08-b.svg [ Failure ] -Bug(none) svg/W3C-SVG-1.1/text-ws-02-t.svg [ Failure ] -Bug(none) svg/W3C-SVG-1.1/types-basicDOM-01-b.svg [ Failure ] Bug(none) svg/wicd/test-rightsizing-b.xhtml [ Crash ] Bug(none) svg/wicd/test-scalable-background-image1.xhtml [ Failure ] Bug(none) svg/zoom/page/absolute-sized-document-scrollbars.svg [ Failure ] Bug(none) svg/zoom/page/zoom-clip-path.html [ Failure ] Bug(none) svg/zoom/page/zoom-coords-viewattr-01-b.svg [ Failure ] -Bug(none) svg/zoom/page/zoom-foreign-content.svg [ Failure ] Bug(none) svg/zoom/page/zoom-foreignObject.svg [ Failure ] Bug(none) svg/zoom/page/zoom-hixie-mixed-008.xml [ Failure ] Bug(none) svg/zoom/page/zoom-hixie-mixed-009.xml [ Failure ] -Bug(none) svg/zoom/page/zoom-img-preserveAspectRatio-support-1.html [ Crash Failure Timeout ] Bug(none) svg/zoom/page/zoom-mask-with-percentages.svg [ Failure ] Bug(none) svg/zoom/page/zoom-svg-float-border-padding.xml [ Failure ] -Bug(none) svg/zoom/page/zoom-svg-through-object-with-huge-size.xhtml [ Failure ] Bug(none) svg/zoom/page/zoom-svg-through-object-with-override-size.html [ Failure ] Bug(none) svg/zoom/text/zoom-hixie-mixed-008.xml [ Failure ] Bug(none) svg/zoom/text/zoom-hixie-mixed-009.xml [ Failure ] @@ -1390,7 +1194,6 @@ Bug(none) transforms/transform-table-row.html [ Failure ] Bug(none) transforms/transformed-caret.html [ Pass Failure ] Bug(none) transforms/transformed-focused-text-input.html [ Failure ] -Bug(none) transforms/transforms-with-opacity.html [ Failure ] crbug.com/644358 compositing/gestures/gesture-tapHighlight-2-iframe-scrolled-outer-late-composite.html [ Failure ] crbug.com/644358 compositing/iframes/connect-compositing-iframe-delayed.html [ Failure ] @@ -1454,7 +1257,6 @@ crbug.com/637316 svg/custom/marker-opacity.svg [ Failure ] crbug.com/637316 svg/custom/text-image-opacity.svg [ Failure ] -Bug(none) fast/block/basic/quirk-percent-height-table-cell.html [ Failure ] Bug(none) svg/hixie/viewbox/preserveAspectRatio/002.xml [ Failure ] Bug(none) fast/scrolling/overflow-scrollability.html [ Failure ] Bug(none) fast/scrolling/scrollbar-prevent-default.html [ Failure ] @@ -1560,9 +1362,7 @@ crbug.com/589265 fast/css/ZeroOpacityLayers2.html [ Failure ] crbug.com/589265 fast/dynamic/anonymous-block-layer-lost.html [ Failure ] crbug.com/589265 fast/forms/indeterminate.html [ Failure ] -crbug.com/589265 fast/layers/add-layer-with-nested-stacking.html [ Failure ] crbug.com/589265 fast/layers/opacity-stacking.html [ Failure ] -crbug.com/589265 svg/custom/non-opaque-filters.svg [ Failure ] crbug.com/589265 svg/custom/small-rect-scale.svg [ Failure ] crbug.com/589265 svg/dynamic-updates/SVGFEBlendElement-dom-in-attr.html [ Failure ] crbug.com/589265 svg/dynamic-updates/SVGFEBlendElement-dom-in2-attr.html [ Failure ] @@ -1570,7 +1370,6 @@ crbug.com/589265 svg/dynamic-updates/SVGFEBlendElement-svgdom-in-prop.html [ Failure ] crbug.com/589265 svg/dynamic-updates/SVGFEBlendElement-svgdom-in2-prop.html [ Failure ] crbug.com/589265 svg/dynamic-updates/SVGFEBlendElement-svgdom-mode-prop.html [ Failure ] -crbug.com/589265 svg/foreignObject/filter.html [ Failure ] # Failures due to SPv2 using SkBlendMode::kDstIn to implement masks. # Some rounding differences is expected but none of them should be apparent. @@ -1608,12 +1407,9 @@ # transforms/transform-overflow.html # Subpixel adjustments due to differences in compositing -Bug(none) svg/custom/non-scaling-stroke-update.svg [ Failure ] Bug(none) svg/custom/use-css-events.svg [ Failure ] Bug(none) svg/text/text-layout-crash.html [ Failure ] -Bug(none) images/color-profile-iframe.html [ Failure ] Bug(none) compositing/overflow/do-not-paint-outline-into-composited-scrolling-contents.html [ Failure ] -Bug(none) fast/table/edge-offsets.html [ Failure ] # Some work remains to fully support composited animation and scrolling. crbug.com/674317 virtual/threaded/animations/composited-filter-webkit-filter.html [ Failure ] @@ -1643,7 +1439,6 @@ Bug(none) virtual/threaded/inspector/ [ Skip ] Bug(none) virtual/threaded/fast/scroll-behavior/ [ Skip ] Bug(none) virtual/threaded/compositing/visibility/layer-visible-content.html [ Failure ] -Bug(none) virtual/threaded/compositing/visibility/overlays-persist-on-navigation.html [ Crash ] Bug(none) virtual/threaded/compositing/visibility/overlays.html [ Failure Crash ] Bug(none) virtual/threaded/compositing/visibility/visibility-image-layers-dynamic.html [ Crash Failure ] Bug(none) virtual/threaded/compositing/visibility/visibility-image-layers.html [ Failure ] @@ -1651,17 +1446,14 @@ Bug(none) virtual/threaded/compositing/webgl/webgl-reflection.html [ Failure ] Bug(none) virtual/threaded/printing/ [ Skip ] +# Tests that fail after changes to border dash painting, due to antialiasing differences +# and minor border radius clipping differences. Some SPv2 change is being ticked by the border +# painting code. Bug(700530) fast/css/background-clip-values.html [ Failure ] -Bug(700530) fast/borders/outline-negative-start.html [ Failure ] Bug(700530) svg/text/small-fonts-in-html5.html [ Failure ] Bug(700530) compositing/overflow/paint-neg-z-order-descendants-into-scrolling-contents-layer.html [ Failure ] Bug(700530) fast/multicol/tall-content-in-inner-with-fixed-height.html [ Failure ] -Bug(700530) svg/custom/pattern-rotate.svg [ Failure ] -Bug(700530) fast/forms/date/date-appearance-basic.html [ Failure ] -Bug(700530) fast/forms/text/input-placeholder-paint-order.html [ Failure ] -Bug(700530) fast/forms/select-popup/popup-menu-appearance-zoom110.html [ Crash Failure ] Bug(700530) svg/W3C-SVG-1.1/animate-elem-05-t.svg [ Failure ] -Bug(700530) svg/custom/use-referencing-nonexisting-symbol.svg [ Failure ] -Bug(700530) svg/custom/invalid-css.svg [ Failure ] -Bug(700530) fast/forms/textarea/textarea-placeholder-paint-order.html [ Failure ] -Bug(700530) fast/box-shadow/box-shadow-clipped-slices.html [ Failure ] +Bug(700530) compositing/geometry/abs-position-inside-opacity.html [ Failure ] +Bug(700530) fast/forms/select-popup/popup-menu-appearance-zoom110.html [ Failure ] +Bug(700530) fast/css3-text/css3-text-decoration/text-underline-position/text-underline-position-cjk.html [ Failure ]
diff --git a/third_party/WebKit/LayoutTests/MSANExpectations b/third_party/WebKit/LayoutTests/MSANExpectations index b54417b4..919622eda 100644 --- a/third_party/WebKit/LayoutTests/MSANExpectations +++ b/third_party/WebKit/LayoutTests/MSANExpectations
@@ -31,6 +31,9 @@ crbug.com/517704 [ Linux ] external/wpt/encoding/api-invalid-label.html [ Timeout Pass ] +crbug.com/701433 [ Linux ] crypto/subtle/worker-subtle-crypto-concurrent.html [ Timeout Pass ] +crbug.com/701563 [ Linux ] external/wpt/svg/interfaces.html [ Timeout Pass ] + # Times out on MSAN crbug.com/462190 [ Linux ] inspector-protocol/heap-profiler/heap-samples-in-snapshot.html [ Timeout ] crbug.com/462190 [ Linux ] inspector-protocol/heap-profiler/heap-snapshot-with-active-dom-object.html [ Timeout ]
diff --git a/third_party/WebKit/LayoutTests/TestExpectations b/third_party/WebKit/LayoutTests/TestExpectations index 251ce54..f8a69b1 100644 --- a/third_party/WebKit/LayoutTests/TestExpectations +++ b/third_party/WebKit/LayoutTests/TestExpectations
@@ -51,6 +51,23 @@ crbug.com/309675 compositing/gestures/gesture-tapHighlight-simple-longPress.html [ Failure ] +# TODO(schenney) For some reason these tests are failing to get correct baselines with rebaseline-cl. +# They may be flaky or it may be something else. Investigate and rebaseline manually or with the bot. +crbug.com/349985 [ Win Linux ] fast/css/background-clip-values.html [ Failure ] +crbug.com/349985 [ Win Linux ] compositing/scrollbars/custom-composited-different-track-parts.html [ Failure ] +crbug.com/349985 [ Mac ] fast/table/backgr_border-table-column-group.html [ Failure ] +crbug.com/349985 [ Mac ] fast/table/backgr_simple-table.html [ Failure ] +crbug.com/349985 [ Mac ] fast/table/backgr_position-table-cell-collapsed-border.html [ Failure ] +crbug.com/349985 [ Mac ] fast/table/backgr_border-table-collapsed-border.html [ Failure ] +crbug.com/349985 [ Mac ] fast/table/backgr_simple-table-collapsed-border.html [ Failure ] +crbug.com/349985 [ Win ] fast/table/backgr_position-table-row-collapsed-border.html [ Failure ] +crbug.com/349985 [ Win ] fast/table/backgr_border-table-row-collapsed-border.html [ Failure ] +crbug.com/349985 [ Win ] fast/table/backgr_simple-table-row-collapsed-border.html [ Failure ] +crbug.com/349985 [ Win ] fast/table/backgr_simple-table-cell-collapsed-border.html [ Failure ] +crbug.com/349985 [ Win ] fast/table/backgr_simple-table-cell.html [ Failure ] +crbug.com/349985 [ Win ] fast/table/backgr_simple-table-column-group.html [ Failure ] +crbug.com/349985 [ Win ] fast/table/backgr_position-table-column-group-collapsed-border.html [ Failure ] + crbug.com/504613 crbug.com/524248 paint/images/image-backgrounds-not-antialiased.html [ Skip ] crbug.com/517449 [ Android ] images/optimize-contrast-image.html [ Failure ] @@ -142,10 +159,6 @@ crbug.com/674858 [ Linux ] virtual/threaded/printing/offscreencanvas-2d-printing.html [ Pass Failure Crash ] crbug.com/674858 [ Linux ] virtual/threaded/printing/offscreencanvas-webgl-printing.html [ Pass Failure Crash ] -# Added 2017-01-16 -crbug.com/681471 paint/invalidation/media-audio-no-spurious-repaints.html [ Failure Pass Timeout ] -crbug.com/681471 virtual/disable-spinvalidation/paint/invalidation/media-audio-no-spurious-repaints.html [ Failure Pass Timeout ] - # Added 2017-02-20 crbug.com/693510 compositing/reflections/nested-reflection-anchor-point.html [ Failure Pass ] crbug.com/693510 compositing/reflections/nested-reflection-animated.html [ Failure Pass ] @@ -1867,7 +1880,6 @@ crbug.com/694525 external/wpt/content-security-policy/securitypolicyviolation [ Pass ] # These policies are not implemented yet. -crbug.com/627968 external/wpt/referrer-policy/origin-when-cross-origin/http-rp/same-origin/ [ Skip ] crbug.com/627968 external/wpt/referrer-policy/same-origin/ [ Skip ] crbug.com/627968 external/wpt/referrer-policy/strict-origin/ [ Skip ] crbug.com/627968 external/wpt/referrer-policy/strict-origin-when-cross-origin/ [ Skip ] @@ -2469,10 +2481,10 @@ crbug.com/697971 [ Mac10.12 ] fast/table/append-cells2.html [ Failure ] crbug.com/697971 [ Mac10.12 ] fast/table/backgr_border-table-cell-collapsed-border.html [ Failure ] crbug.com/697971 [ Mac10.12 ] fast/table/backgr_border-table-cell.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/table/backgr_border-table-collapsed-border.html [ Failure ] +# crbug.com/697971 [ Mac10.12 ] fast/table/backgr_border-table-collapsed-border.html [ Failure ] crbug.com/697971 [ Mac10.12 ] fast/table/backgr_border-table-column-collapsed-border.html [ Failure ] crbug.com/697971 [ Mac10.12 ] fast/table/backgr_border-table-column-group-collapsed-border.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/table/backgr_border-table-column-group.html [ Failure ] +# crbug.com/697971 [ Mac10.12 ] fast/table/backgr_border-table-column-group.html [ Failure ] crbug.com/697971 [ Mac10.12 ] fast/table/backgr_border-table-column.html [ Failure ] crbug.com/697971 [ Mac10.12 ] fast/table/backgr_border-table-quirks-collapsed-border.html [ Failure ] crbug.com/697971 [ Mac10.12 ] fast/table/backgr_border-table-quirks.html [ Failure ] @@ -2482,7 +2494,7 @@ crbug.com/697971 [ Mac10.12 ] fast/table/backgr_border-table.html [ Failure ] crbug.com/697971 [ Mac10.12 ] fast/table/backgr_layers-hide-collapsed-border.html [ Failure ] crbug.com/697971 [ Mac10.12 ] fast/table/backgr_layers-hide.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/table/backgr_position-table-cell-collapsed-border.html [ Failure ] +# crbug.com/697971 [ Mac10.12 ] fast/table/backgr_position-table-cell-collapsed-border.html [ Failure ] crbug.com/697971 [ Mac10.12 ] fast/table/backgr_position-table-cell.html [ Failure ] crbug.com/697971 [ Mac10.12 ] fast/table/backgr_position-table-collapsed-border.html [ Failure ] crbug.com/697971 [ Mac10.12 ] fast/table/backgr_position-table-column-collapsed-border.html [ Failure ] @@ -2495,14 +2507,13 @@ crbug.com/697971 [ Mac10.12 ] fast/table/backgr_position-table.html [ Failure ] crbug.com/697971 [ Mac10.12 ] fast/table/backgr_simple-table-cell-collapsed-border.html [ Failure ] crbug.com/697971 [ Mac10.12 ] fast/table/backgr_simple-table-cell.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/table/backgr_simple-table-collapsed-border.html [ Failure ] +# crbug.com/697971 [ Mac10.12 ] fast/table/backgr_simple-table-collapsed-border.html [ Failure ] crbug.com/697971 [ Mac10.12 ] fast/table/backgr_simple-table-column-collapsed-border.html [ Failure ] crbug.com/697971 [ Mac10.12 ] fast/table/backgr_simple-table-column-group-collapsed-border.html [ Failure ] crbug.com/697971 [ Mac10.12 ] fast/table/backgr_simple-table-column-group.html [ Failure ] crbug.com/697971 [ Mac10.12 ] fast/table/backgr_simple-table-column.html [ Failure ] crbug.com/697971 [ Mac10.12 ] fast/table/backgr_simple-table-row-collapsed-border.html [ Failure ] crbug.com/697971 [ Mac10.12 ] fast/table/backgr_simple-table-row-group-collapsed-border.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/table/backgr_simple-table-row-group.html [ Failure ] crbug.com/697971 [ Mac10.12 ] fast/table/backgr_simple-table-row.html [ Failure ] crbug.com/697971 [ Mac10.12 ] fast/table/remove-td-display-none.html [ Failure ] crbug.com/697971 [ Mac10.12 ] fast/table/spanOverlapRepaint.html [ Failure ] @@ -2876,6 +2887,8 @@ crbug.com/689781 http/tests/media/media-source/mediasource-duration.html [ Failure Pass ] crbug.com/689781 virtual/mojo-loading/http/tests/media/media-source/mediasource-duration.html [ Failure Pass ] +crbug.com/701445 external/wpt/dom/events/EventListener-invoke-legacy.html [ Timeout Pass ] + # When WebAssembly is exposed in V8 (soon), this test has the wrong number of expected Object.getOwnPropertyNames() for global object. crbug.com/681468 fast/forms/suggestion-picker/date-suggestion-picker-appearance-zoom125.html [ Failure Pass ]
diff --git a/third_party/WebKit/LayoutTests/canvas/philip/tests/2d.drawImage.animated.poster.html b/third_party/WebKit/LayoutTests/canvas/philip/tests/2d.drawImage.animated.poster.html index 123b890..7bbae88e 100644 --- a/third_party/WebKit/LayoutTests/canvas/philip/tests/2d.drawImage.animated.poster.html +++ b/third_party/WebKit/LayoutTests/canvas/philip/tests/2d.drawImage.animated.poster.html
@@ -12,8 +12,24 @@ <script> _addTest(function(canvas, ctx) { -ctx.drawImage(document.getElementById('anim-poster-gr.png'), 0, 0); -_assertPixelApprox(canvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255", 2); +// This test is disabled because it is wrong. It expects to draw the IDAT frame +// of an animated PNG in which the IDAT frame is not part of the animation. This +// should only happen if we do *not* support APNG. Now that we support APNG, +// this test fails. +// +// The ImageDecoder is not aware of what method is requesting the decode, and +// the APNG specification [1] does explicitly state that the IDAT is not part +// of the animated image if there's no fcTL chunk preceding it. It would make +// more sense if this test would verify that the first frame of the image is +// drawn, but that is explicitly not the purpose, as stated at [2]. In Firefox, +// the developer of the APNG specification, this test [2] fails too. +// +// [1] https://wiki.mozilla.org/APNG_Specification +// [2] http://www.w3c-test.org/2dcontext/drawing-images-to-the-canvas/2d.drawImage.animated.apng.html + _assertSame("disabled", "disabled", "disabled", "disabled"); + +// ctx.drawImage(document.getElementById('anim-poster-gr.png'), 0, 0); +// _assertPixelApprox(canvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255", 2); });
diff --git a/third_party/WebKit/LayoutTests/compositing/root-scroller/basic-disable-ancestor-clipping-expected.png b/third_party/WebKit/LayoutTests/compositing/root-scroller/basic-disable-ancestor-clipping-expected.png deleted file mode 100644 index a16bda0..0000000 --- a/third_party/WebKit/LayoutTests/compositing/root-scroller/basic-disable-ancestor-clipping-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/WebKit/LayoutTests/compositing/root-scroller/basic-disable-ancestor-clipping-expected.txt b/third_party/WebKit/LayoutTests/compositing/root-scroller/basic-disable-ancestor-clipping-expected.txt deleted file mode 100644 index 8b13789..0000000 --- a/third_party/WebKit/LayoutTests/compositing/root-scroller/basic-disable-ancestor-clipping-expected.txt +++ /dev/null
@@ -1 +0,0 @@ -
diff --git a/third_party/WebKit/LayoutTests/compositing/root-scroller/basic-disable-ancestor-clipping.html b/third_party/WebKit/LayoutTests/compositing/root-scroller/basic-disable-ancestor-clipping.html deleted file mode 100644 index 5d304ee7..0000000 --- a/third_party/WebKit/LayoutTests/compositing/root-scroller/basic-disable-ancestor-clipping.html +++ /dev/null
@@ -1,82 +0,0 @@ -<!DOCTYPE html> -<style> - ::-webkit-scrollbar { - width: 0px; - height: 0px; - } - - body, html { - width: 100%; - height: 100%; - background-color: blue; - } - - body { - margin: 0px; - } - - iframe { - width: 100vw; - height: 100vh; - left: -50px; - top: -50px; - position: absolute; - border: 0; - } - - .clipBox { - position: absolute; - overflow: hidden; - left: 50px; - right: 50px; - top: 50px; - bottom: 50px; - } - - .compositedClipBox { - position: absolute; - overflow: hidden; - left: 50px; - right: 50px; - top: 50px; - bottom: 50px; - background-color: red; - transform: translateZ(0); - } - - #scroller { - position: absolute; - left: -100px; - right: -100px; - top: -100px; - bottom: -100px; - background-color: yellow; - overflow: auto; - transform: translateZ(0); - } - - .spacer { - height: 1000px; - } -</style> - -<script> - // This test passed if the output is a fully yellow screen. We expect that - // the "clipBox" boxes in this document will have their clipping layers - // disabled/removed since the child #scroller element in the is the root - // scroller. - if (window.testRunner) - testRunner.dumpAsTextWithPixelResults(); - - window.addEventListener('load', function() { - document.rootScroller = document.getElementById('scroller'); - }); -</script> - -<div class="compositedClipBox"> - <div class="clipBox"> - <div id="scroller"> - <div class="spacer"></div> - </div> - </div> -</div>
diff --git a/third_party/WebKit/LayoutTests/compositing/root-scroller/basic-reenable-ancestor-clipping-expected.png b/third_party/WebKit/LayoutTests/compositing/root-scroller/basic-reenable-ancestor-clipping-expected.png deleted file mode 100644 index 6bc7152..0000000 --- a/third_party/WebKit/LayoutTests/compositing/root-scroller/basic-reenable-ancestor-clipping-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/WebKit/LayoutTests/compositing/root-scroller/basic-reenable-ancestor-clipping-expected.txt b/third_party/WebKit/LayoutTests/compositing/root-scroller/basic-reenable-ancestor-clipping-expected.txt deleted file mode 100644 index 8b13789..0000000 --- a/third_party/WebKit/LayoutTests/compositing/root-scroller/basic-reenable-ancestor-clipping-expected.txt +++ /dev/null
@@ -1 +0,0 @@ -
diff --git a/third_party/WebKit/LayoutTests/compositing/root-scroller/basic-reenable-ancestor-clipping.html b/third_party/WebKit/LayoutTests/compositing/root-scroller/basic-reenable-ancestor-clipping.html deleted file mode 100644 index e5589f3..0000000 --- a/third_party/WebKit/LayoutTests/compositing/root-scroller/basic-reenable-ancestor-clipping.html +++ /dev/null
@@ -1,88 +0,0 @@ -<!DOCTYPE html> -<style> - ::-webkit-scrollbar { - width: 0px; - height: 0px; - } - - body, html { - width: 100%; - height: 100%; - background-color: blue; - } - - body { - margin: 0px; - } - - iframe { - width: 100vw; - height: 100vh; - left: -50px; - top: -50px; - position: absolute; - border: 0; - } - - .clipBox { - position: absolute; - overflow: hidden; - left: 50px; - right: 50px; - top: 50px; - bottom: 50px; - } - - .compositedClipBox { - position: absolute; - overflow: hidden; - left: 50px; - right: 50px; - top: 50px; - bottom: 50px; - background-color: red; - transform: translateZ(0); - } - - #scroller { - position: absolute; - left: -100px; - right: -100px; - top: -100px; - bottom: -100px; - background-color: yellow; - overflow: auto; - transform: translateZ(0); - } - - .spacer { - height: 1000px; - } -</style> - -<script> - // This test passed if the output contains a yellow box in a red box in a - // blue box. We expect that the "clipBox" boxes in this document will have - // their clipping layers restored once the root scroller is reset. - if (window.testRunner) { - testRunner.dumpAsTextWithPixelResults(); - testRunner.waitUntilDone(); - } - - window.addEventListener('load', function() { - document.rootScroller = document.getElementById('scroller'); - - window.requestAnimationFrame(function() { - document.rootScroller = null; - testRunner.notifyDone(); - }); - }); -</script> - -<div class="compositedClipBox"> - <div class="clipBox"> - <div id="scroller"> - <div class="spacer"></div> - </div> - </div> -</div>
diff --git a/third_party/WebKit/LayoutTests/compositing/root-scroller/clipping-ancestor-is-composited-sibling-expected.png b/third_party/WebKit/LayoutTests/compositing/root-scroller/clipping-ancestor-is-composited-sibling-expected.png deleted file mode 100644 index a16bda0..0000000 --- a/third_party/WebKit/LayoutTests/compositing/root-scroller/clipping-ancestor-is-composited-sibling-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/WebKit/LayoutTests/compositing/root-scroller/clipping-ancestor-is-composited-sibling-expected.txt b/third_party/WebKit/LayoutTests/compositing/root-scroller/clipping-ancestor-is-composited-sibling-expected.txt deleted file mode 100644 index 8b13789..0000000 --- a/third_party/WebKit/LayoutTests/compositing/root-scroller/clipping-ancestor-is-composited-sibling-expected.txt +++ /dev/null
@@ -1 +0,0 @@ -
diff --git a/third_party/WebKit/LayoutTests/compositing/root-scroller/clipping-ancestor-is-composited-sibling.html b/third_party/WebKit/LayoutTests/compositing/root-scroller/clipping-ancestor-is-composited-sibling.html deleted file mode 100644 index 50db7ff..0000000 --- a/third_party/WebKit/LayoutTests/compositing/root-scroller/clipping-ancestor-is-composited-sibling.html +++ /dev/null
@@ -1,53 +0,0 @@ -<!DOCTYPE html> -<style> - ::-webkit-scrollbar { - width: 0px; - height: 0px; - } - - body, html { - width: 100%; - height: 100%; - background-color: blue; - } - - body { - margin: 0px; - } - - iframe { - width: 100vw; - height: 100vh; - left: -50px; - top: -50px; - position: absolute; - border: 0; - } - - .clipBox { - position: absolute; - overflow: hidden; - left: 50px; - right: 50px; - top: 50px; - bottom: 50px; - transform: translateZ(0); - } -</style> - -<script> - // This test passed if the output is a fully yellow screen. We expect that - // the "clipBox" boxes in this document and the iframe will have their - // clipping layers disabled/removed since the child #container element in the - // iframe is made to be the root scroller. - if (window.testRunner) - testRunner.dumpAsTextWithPixelResults(); - - window.addEventListener('load', function() { - document.rootScroller = document.getElementById('child'); - }); -</script> - -<div class="clipBox"> - <iframe id="child" src="resources/clipping-ancestor-is-composited-sibling-iframe.html"></iframe> -</div>
diff --git a/third_party/WebKit/LayoutTests/compositing/root-scroller/clipping-ancestor-is-non-composited-sibling-expected.png b/third_party/WebKit/LayoutTests/compositing/root-scroller/clipping-ancestor-is-non-composited-sibling-expected.png deleted file mode 100644 index a16bda0..0000000 --- a/third_party/WebKit/LayoutTests/compositing/root-scroller/clipping-ancestor-is-non-composited-sibling-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/WebKit/LayoutTests/compositing/root-scroller/clipping-ancestor-is-non-composited-sibling-expected.txt b/third_party/WebKit/LayoutTests/compositing/root-scroller/clipping-ancestor-is-non-composited-sibling-expected.txt deleted file mode 100644 index 8b13789..0000000 --- a/third_party/WebKit/LayoutTests/compositing/root-scroller/clipping-ancestor-is-non-composited-sibling-expected.txt +++ /dev/null
@@ -1 +0,0 @@ -
diff --git a/third_party/WebKit/LayoutTests/compositing/root-scroller/clipping-ancestor-is-non-composited-sibling.html b/third_party/WebKit/LayoutTests/compositing/root-scroller/clipping-ancestor-is-non-composited-sibling.html deleted file mode 100644 index 7af729a..0000000 --- a/third_party/WebKit/LayoutTests/compositing/root-scroller/clipping-ancestor-is-non-composited-sibling.html +++ /dev/null
@@ -1,52 +0,0 @@ -<!DOCTYPE html> -<style> - ::-webkit-scrollbar { - width: 0px; - height: 0px; - } - - body, html { - width: 100%; - height: 100%; - background-color: blue; - } - - body { - margin: 0px; - } - - iframe { - width: 100vw; - height: 100vh; - left: -50px; - top: -50px; - position: absolute; - border: 0; - } - - .clipBox { - position: absolute; - overflow: hidden; - left: 50px; - right: 50px; - top: 50px; - bottom: 50px; - } -</style> - -<script> - // This test passed if the output is a fully yellow screen. We expect that - // the "clipBox" boxes in this document and the iframe will have their - // clipping layers disabled/removed since the child #container element in the - // iframe is made to be the root scroller. - if (window.testRunner) - testRunner.dumpAsTextWithPixelResults(); - - window.addEventListener('load', function() { - document.rootScroller = document.getElementById('child'); - }); -</script> - -<div class="clipBox"> - <iframe id="child" src="resources/clipping-ancestor-is-non-composited-sibling-iframe.html"></iframe> -</div>
diff --git a/third_party/WebKit/LayoutTests/compositing/root-scroller/resources/clipping-ancestor-is-composited-sibling-iframe.html b/third_party/WebKit/LayoutTests/compositing/root-scroller/resources/clipping-ancestor-is-composited-sibling-iframe.html deleted file mode 100644 index 1e859e6..0000000 --- a/third_party/WebKit/LayoutTests/compositing/root-scroller/resources/clipping-ancestor-is-composited-sibling-iframe.html +++ /dev/null
@@ -1,54 +0,0 @@ -<!DOCTYPE html> -<style> - ::-webkit-scrollbar { - width: 0px; - height: 0px; - } - - body, html { - width: 100%; - height: 100%; - background-color: red; - } - - body { - margin: 0px; - } - - .clipBox { - position: absolute; - overflow: hidden; - left: 100px; - right: 100px; - top: 100px; - bottom: 100px; - } - - #container { - position: absolute; - left: -100px; - top: -100px; - right: -100px; - bottom: -100px; - background-color: yellow; - overflow: auto; - transform: translateZ(0); - } - - .spacer { - width: 100px; - height: 2000px; - } -</style> - -<script> - window.addEventListener('load', function() { - document.rootScroller = document.getElementById('container'); - }); -</script> - -<div class="clipBox"> - <div id="container"> - <div class="spacer"></div> - </div> -</div>
diff --git a/third_party/WebKit/LayoutTests/compositing/root-scroller/resources/clipping-ancestor-is-non-composited-sibling-iframe.html b/third_party/WebKit/LayoutTests/compositing/root-scroller/resources/clipping-ancestor-is-non-composited-sibling-iframe.html deleted file mode 100644 index 08075fe..0000000 --- a/third_party/WebKit/LayoutTests/compositing/root-scroller/resources/clipping-ancestor-is-non-composited-sibling-iframe.html +++ /dev/null
@@ -1,55 +0,0 @@ -<!DOCTYPE html> -<style> - ::-webkit-scrollbar { - width: 0px; - height: 0px; - } - - body, html { - width: 100%; - height: 100%; - background-color: red; - } - - body { - margin: 0px; - } - - .clipBox { - position: absolute; - overflow: hidden; - left: 100px; - right: 100px; - top: 100px; - bottom: 100px; - } - - #container { - position: absolute; - left: -100px; - top: -100px; - right: -100px; - bottom: -100px; - background-color: yellow; - overflow: auto; - transform: translateZ(0); - } - - .spacer { - width: 100px; - height: 2000px; - } -</style> - -<script> - window.addEventListener('load', function() { - document.rootScroller = document.getElementById('container'); - }); -</script> - -<div class="clipBox"> - <div id="container"> - <div class="spacer"> - </div> - </div> -</div>
diff --git a/third_party/WebKit/LayoutTests/compositing/scaling/preferred-raster-bounds.html b/third_party/WebKit/LayoutTests/compositing/scaling/preferred-raster-bounds.html deleted file mode 100644 index 1ba180b..0000000 --- a/third_party/WebKit/LayoutTests/compositing/scaling/preferred-raster-bounds.html +++ /dev/null
@@ -1,23 +0,0 @@ -<!doctype HTML> -<div id=target style="will-change: transform; width: 310px; height: 175px; background-size: 100% 100%"></div> -<pre id=output></pre> -<script> -onload = function() { - if (window.testRunner) { - window.testRunner.waitUntilDone(); - window.testRunner.dumpAsText(); - } - if (window.internals) - window.internals.runtimeFlags.preferredImageRasterBoundsEnabled = true; - - var bgImg = new Image(); - bgImg.src = '../../paint/invalidation/resources/ducky.png'; - bgImg.onload = function() { - target.style.backgroundImage = 'url(' + bgImg.src + ')'; - if (window.internals) - output.innerHTML = window.internals.layerTreeAsText(document); - if (window.testRunner) - testRunner.notifyDone(); - }; -} -</script>
diff --git a/third_party/WebKit/LayoutTests/compositing/scrollbars/custom-composited-different-track-parts-expected.png b/third_party/WebKit/LayoutTests/compositing/scrollbars/custom-composited-different-track-parts-expected.png new file mode 100644 index 0000000..2c7f7e5 --- /dev/null +++ b/third_party/WebKit/LayoutTests/compositing/scrollbars/custom-composited-different-track-parts-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/external/wpt/pointerevents/compat/pointerevent_touch-action_two-finger_interaction-manual-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/pointerevents/compat/pointerevent_touch-action_two-finger_interaction-manual-expected.txt deleted file mode 100644 index 6e2f7190a..0000000 --- a/third_party/WebKit/LayoutTests/external/wpt/pointerevents/compat/pointerevent_touch-action_two-finger_interaction-manual-expected.txt +++ /dev/null
@@ -1,6 +0,0 @@ -This is a testharness.js-based test. -FAIL touch two-finger pan on 'touch-action: pan-x pan-y' assert_equals: expected "pointerdown@black, pointerdown@black, pointerup@black, pointerup@black" but got "pointerdown@black, pointerdown@black, pointercancel@black, pointercancel@black" -PASS touch two-finger pan on 'touch-action: pinch-zoom' -PASS PointerEvent Automation -Harness: the test ran to completion. -
diff --git a/third_party/WebKit/LayoutTests/fast/css/background-clip-values-expected.png b/third_party/WebKit/LayoutTests/fast/css/background-clip-values-expected.png new file mode 100644 index 0000000..b1500e76 --- /dev/null +++ b/third_party/WebKit/LayoutTests/fast/css/background-clip-values-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/fast/css3-text/css3-text-decoration/text-decoration-skip-expected.png b/third_party/WebKit/LayoutTests/fast/css3-text/css3-text-decoration/text-decoration-skip-expected.png index f945695a..163b265 100644 --- a/third_party/WebKit/LayoutTests/fast/css3-text/css3-text-decoration/text-decoration-skip-expected.png +++ b/third_party/WebKit/LayoutTests/fast/css3-text/css3-text-decoration/text-decoration-skip-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/fast/css3-text/css3-text-decoration/text-decoration-style-expected.png b/third_party/WebKit/LayoutTests/fast/css3-text/css3-text-decoration/text-decoration-style-expected.png index ebfb8bb1..c348dd4 100644 --- a/third_party/WebKit/LayoutTests/fast/css3-text/css3-text-decoration/text-decoration-style-expected.png +++ b/third_party/WebKit/LayoutTests/fast/css3-text/css3-text-decoration/text-decoration-style-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/fast/events/gesture-pinch-zoom-scroll-bubble.html b/third_party/WebKit/LayoutTests/fast/events/gesture-pinch-zoom-scroll-bubble.html index d005541c..28f2429 100644 --- a/third_party/WebKit/LayoutTests/fast/events/gesture-pinch-zoom-scroll-bubble.html +++ b/third_party/WebKit/LayoutTests/fast/events/gesture-pinch-zoom-scroll-bubble.html
@@ -12,8 +12,8 @@ } function testHorizontalScroll() { - // Do a purely horizontal scroll. This will change pinch virtual viewport - // offset only. + // Do a purely horizontal scroll. This will change the visual viewport offset + // only. eventSender.continuousMouseScrollBy(-2, 0); shouldBecomeEqual('internals.visualViewportScrollX() == 201 && ' + 'internals.visualViewportScrollY() == 301', 'true', testDiagonalScroll);
diff --git a/third_party/WebKit/LayoutTests/fast/events/menu-key-context-menu-document-pinch-zoom.html b/third_party/WebKit/LayoutTests/fast/events/menu-key-context-menu-document-pinch-zoom.html index 0317b6ea..eff0c4f 100644 --- a/third_party/WebKit/LayoutTests/fast/events/menu-key-context-menu-document-pinch-zoom.html +++ b/third_party/WebKit/LayoutTests/fast/events/menu-key-context-menu-document-pinch-zoom.html
@@ -9,9 +9,9 @@ ' expected to appear in the top left of the viewport), click on the orange box to focus it then use the' + ' menu key, and select some text in the box and use the menu key. Note: on Mac there is no menu key.'); -// Pinch Viewport will be at the bottom right quadrant of the page. -var pinchViewportContentX = 400; -var pinchViewportContentY = 300; +// Visual Viewport will be at the bottom right quadrant of the page. +var visualViewportContentX = 400; +var visualViewportContentY = 300; var scale = 2; // Should match the static const in EventHandler::sendContextMenuEventForKey @@ -28,8 +28,8 @@ function handleContextMenuNoFocus(e) { event = e; - expectedX = kContextMenuMargin + pinchViewportContentX; - expectedY = kContextMenuMargin + pinchViewportContentY; + expectedX = kContextMenuMargin + visualViewportContentX; + expectedY = kContextMenuMargin + visualViewportContentY; expectedScreenX = kContextMenuMargin * scale; expectedScreenY = kContextMenuMargin * scale; shouldBe('event.clientX', 'expectedX'); @@ -43,8 +43,8 @@ event = e; expectedX = anchor.offsetLeft + anchor.offsetWidth/2; expectedY = anchor.offsetTop + anchor.offsetHeight/2; - expectedScreenX = (expectedX - pinchViewportContentX) * scale; - expectedScreenY = (expectedY - pinchViewportContentY) * scale; + expectedScreenX = (expectedX - visualViewportContentX) * scale; + expectedScreenY = (expectedY - visualViewportContentY) * scale; shouldBe('event.clientX', 'expectedX'); shouldBe('event.clientY', 'expectedY'); shouldBe('event.screenX', 'expectedScreenX'); @@ -63,8 +63,8 @@ // selections. expectedY = rangeRect.bottom - 1; - expectedScreenX = (expectedX - pinchViewportContentX) * scale; - expectedScreenY = (expectedY - pinchViewportContentY) * scale; + expectedScreenX = (expectedX - visualViewportContentX) * scale; + expectedScreenY = (expectedY - visualViewportContentY) * scale; shouldBe('event.clientX', 'expectedX'); shouldBe('event.clientY', 'expectedY'); @@ -76,12 +76,12 @@ var runTest = function() { internals.setPageScaleFactor(scale); - // Position the pinch viewport. + // Position the visual viewport. eventSender.gestureScrollBegin(0, 0); - // Start from pinch viewport offset (0, 0). - eventSender.gestureScrollUpdate(-pinchViewportContentX*scale, - -pinchViewportContentY*scale); + // Start from visual viewport offset (0, 0). + eventSender.gestureScrollUpdate(-visualViewportContentX*scale, + -visualViewportContentY*scale); eventSender.gestureScrollEnd(0, 0); anchor = document.getElementById("anchor");
diff --git a/third_party/WebKit/LayoutTests/fast/events/touch/gesture/touch-gesture-fling-with-page-scale.html b/third_party/WebKit/LayoutTests/fast/events/touch/gesture/touch-gesture-fling-with-page-scale.html index 5c35eed..ad1f262 100644 --- a/third_party/WebKit/LayoutTests/fast/events/touch/gesture/touch-gesture-fling-with-page-scale.html +++ b/third_party/WebKit/LayoutTests/fast/events/touch/gesture/touch-gesture-fling-with-page-scale.html
@@ -13,8 +13,8 @@ var startXInViewport; var startYInViewport; - var pinchViewportContentX = 300; - var pinchViewportContentY = 300; + var visualViewportContentX = 300; + var visualViewportContentY = 300; var scale = 2; var fullyScrolled; @@ -30,8 +30,8 @@ var startX = startSpot.offsetLeft + startSpot.offsetWidth/2; var startY = startSpot.offsetTop + startSpot.offsetHeight/2; - startXInViewport = (startX - pinchViewportContentX)*scale; - startYInViewport = (startY - pinchViewportContentY)*scale; + startXInViewport = (startX - visualViewportContentX)*scale; + startYInViewport = (startY - visualViewportContentY)*scale; if (window.testRunner && window.eventSender && window.internals) { internals.setPageScaleFactorLimits(1, 4.0); @@ -81,13 +81,13 @@ internals.setPageScaleFactor(scale); - // Position the pinch viewport. + // Position the visual viewport. eventSender.gestureScrollBegin(0, 0); - // Start from pinch viewport offset (0, 0). + // Start from visual viewport offset (0, 0). eventSender.gestureScrollUpdate(10000, 10000); - eventSender.gestureScrollUpdate(-pinchViewportContentX*scale, - -pinchViewportContentY*scale); + eventSender.gestureScrollUpdate(-visualViewportContentX*scale, + -visualViewportContentY*scale); eventSender.gestureScrollEnd(0, 0); }
diff --git a/third_party/WebKit/LayoutTests/fast/gradients/background-clipped-expected.png b/third_party/WebKit/LayoutTests/fast/gradients/background-clipped-expected.png index fd74c2f..d5ac707 100644 --- a/third_party/WebKit/LayoutTests/fast/gradients/background-clipped-expected.png +++ b/third_party/WebKit/LayoutTests/fast/gradients/background-clipped-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/fast/ruby/position-after-expected.png b/third_party/WebKit/LayoutTests/fast/ruby/position-after-expected.png index 2e9aaab7..ad79334 100644 --- a/third_party/WebKit/LayoutTests/fast/ruby/position-after-expected.png +++ b/third_party/WebKit/LayoutTests/fast/ruby/position-after-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/http/tests/inspector/network/warning-for-long-cookie-expected.txt b/third_party/WebKit/LayoutTests/http/tests/inspector/network/warning-for-long-cookie-expected.txt index 2f98e4f..68d4bfe 100644 --- a/third_party/WebKit/LayoutTests/http/tests/inspector/network/warning-for-long-cookie-expected.txt +++ b/third_party/WebKit/LayoutTests/http/tests/inspector/network/warning-for-long-cookie-expected.txt
@@ -1,3 +1,5 @@ Checks that we show warning message for long cookie. -Set-Cookie header is ignored in response from url: http://127.0.0.1:8000/inspector/network/resources/set-cookie.php?length=4097. Cookie length should be less then or equal to 4096 characters. +network-test.js:48 Set-Cookie header is ignored in response from url: http://127.0.0.1:8000/inspector/network/resources/set-cookie.php?length=4097. Cookie length should be less than or equal to 4096 characters. +makeFetch @ network-test.js:48 +(anonymous) @ VM:1
diff --git a/third_party/WebKit/LayoutTests/http/tests/misc/xhtml-expected.txt b/third_party/WebKit/LayoutTests/http/tests/misc/xhtml-expected.txt index c00235c..0038b9d3 100644 --- a/third_party/WebKit/LayoutTests/http/tests/misc/xhtml-expected.txt +++ b/third_party/WebKit/LayoutTests/http/tests/misc/xhtml-expected.txt
@@ -1,3 +1,3 @@ -Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 +Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8 PASS: The browser asks for XHTML.
diff --git a/third_party/WebKit/LayoutTests/http/tests/security/contentSecurityPolicy/1.1/form-action-src-redirect-blocked-in-new-window-expected.txt b/third_party/WebKit/LayoutTests/http/tests/security/contentSecurityPolicy/1.1/form-action-src-redirect-blocked-in-new-window-expected.txt deleted file mode 100644 index d1d429f..0000000 --- a/third_party/WebKit/LayoutTests/http/tests/security/contentSecurityPolicy/1.1/form-action-src-redirect-blocked-in-new-window-expected.txt +++ /dev/null
@@ -1,4 +0,0 @@ -This is a testharness.js-based test. -FAIL The form resubmission should be blocked after the redirect assert_unreached: The form submission wasn't blocked. Reached unreachable code -Harness: the test ran to completion. -
diff --git a/third_party/WebKit/LayoutTests/http/tests/security/contentSecurityPolicy/1.1/form-action-src-redirect-blocked-in-new-window.html b/third_party/WebKit/LayoutTests/http/tests/security/contentSecurityPolicy/1.1/form-action-src-redirect-blocked-in-new-window.html deleted file mode 100644 index be343af..0000000 --- a/third_party/WebKit/LayoutTests/http/tests/security/contentSecurityPolicy/1.1/form-action-src-redirect-blocked-in-new-window.html +++ /dev/null
@@ -1,60 +0,0 @@ -<!DOCTYPE html> -<!-- - TODO(mkwst, arthursonzogni). This test fails. See https://crbug.com/700964 ---> -<html> -<head> - <script src="/resources/testharness.js"></script> - <script src="/resources/testharnessreport.js"></script> - <meta http-equiv="Content-Security-Policy" content="form-action 127.0.0.1:8000"> -</head> -<body> - <form - action="/resources/redirection-response.php?host=localhost:8000&status=302&target=/security/resources/post-done-to-opener.html" - target="namedWindow" - method="post"> - <input type='submit' id='submit'> - </form> - - <script> - async_test(t => { - // #1 Open a new window with the name matching the form.target attribute - // above. - var namedWindow = window.open('http://localhost:8080/security/resources/empty.html', 'namedWindow') - - // #2 Wait the window to be loaded. It prevents the document url to still - // be about:blank and to have inherited from its opener's CSP. - setTimeout(function() { - window.addEventListener('message', t.step_func(e => { - if (e.source == namedWindow && e.data == "done") - assert_unreached("The form submission wasn't blocked."); - })); - - // The navigation should be blocked, either in the current window 1) or - // in the new window 2). - - // 1) The navigation is blocked in the current window. - window.addEventListener('securitypolicyviolation', t.step_func(e => { - assert_equals(e.effectiveDirective, "form-action"); - assert_equals(e.blockedURI, "localhost:8000/resources/post-done-to-opener.html"); - namedWindow.close(); - t.done(); - })); - - // 2) The navigation is blocked in the new window. - setTimeout(t.step_func(() => { - assert_equals(namedWindow.location.href, "localhost:8000/security/resources/empty.html"); - namedWindow.close(); - t.done(); - }), 500); - - // #3 Make a form submission with a redirect. It should be blocked by - // the form-action directive after the redirect. - document.getElementById('submit').click(); - - }, 500); - }, "The form resubmission should be blocked after the redirect"); - - </script> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/images/animated-png-expected.html b/third_party/WebKit/LayoutTests/images/animated-png-expected.html new file mode 100644 index 0000000..e98f3a6 --- /dev/null +++ b/third_party/WebKit/LayoutTests/images/animated-png-expected.html
@@ -0,0 +1,16 @@ +<html> +<head> +<title>APNG reftest: when animation ends, compare its last frame against the reference static PNG.</title> +<style> +img { margin: 1px; } +</style> +</head> +<body style="margin: 1px"> +<img src=resources/apng00-ref.png><img src=resources/apng01-ref.png><img src=resources/apng02-ref.png><img src=resources/apng04-ref.png><img src=resources/apng08-ref.png><br> +<img src=resources/apng10-ref.png><img src=resources/apng11-ref.png><img src=resources/apng12-ref.png><img src=resources/apng14-ref.png><img src=resources/apng18-ref.png><br> +<!-- These images are slightly different from the final frames of their + corresponding apngs. Disable for now. +<img src=resources/apng24-ref.png><img src=resources/apng26-ref.png> +--> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/images/animated-png.html b/third_party/WebKit/LayoutTests/images/animated-png.html new file mode 100644 index 0000000..073e85b --- /dev/null +++ b/third_party/WebKit/LayoutTests/images/animated-png.html
@@ -0,0 +1,63 @@ +<html> +<head> +<title>APNG reftest: when animation ends, compare its last frame against the reference static PNG.</title> +<style> +img { margin: 1px; } +</style> +</head> +<link rel="match" href="animated-png-expected.html"> +<body style="margin: 1px"> +<img id="apng00" src=resources/apng00.png><img id="apng01" src=resources/apng01.png><img id="apng02" src=resources/apng02.png><img id="apng04" src=resources/apng04.png><img id="apng08" src=resources/apng08.png><br> +<img id="apng10" src=resources/apng10.png><img id="apng11" src=resources/apng11.png><img id="apng12" src=resources/apng12.png><img id="apng14" src=resources/apng14.png><img id="apng18" src=resources/apng18.png><br> +<!-- These images are slightly different from the reference images. Disable for now. +<img id="apng24" src=resources/apng24.png><img id="apng26" src=resources/apng26.png> +--> +<script> +if (window.testRunner) { + window.onload = function() { + testRunner.waitUntilDone(); + + // Jump to the final frame for each image. + for (var i = 0; i < 9; i++) + window.internals.advanceImageAnimation(apng01); + + for (var i = 0; i < 9; i++) + window.internals.advanceImageAnimation(apng02); + + for (var i = 0; i < 12; i++) + window.internals.advanceImageAnimation(apng04); + + for (var i = 0; i < 12; i++) + window.internals.advanceImageAnimation(apng08); + + for (var i = 0; i < 3; i++) + window.internals.advanceImageAnimation(apng10); + + for (var i = 0; i < 9; i++) + window.internals.advanceImageAnimation(apng11); + + for (var i = 0; i < 9; i++) + window.internals.advanceImageAnimation(apng12); + + for (var i = 0; i < 12; i++) + window.internals.advanceImageAnimation(apng14); + + for (var i = 0; i < 12; i++) + window.internals.advanceImageAnimation(apng18); + + /* + for (var i = 0; i < 1; i++) + window.internals.advanceImageAnimation(apng24); + + for (var i = 0; i < 1; i++) + window.internals.advanceImageAnimation(apng26); + */ + + requestAnimationFrame(function() { + testRunner.notifyDone(); + }); + } +} +</script> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/images/resources/apng00-ref.png b/third_party/WebKit/LayoutTests/images/resources/apng00-ref.png new file mode 100644 index 0000000..1fc670ce --- /dev/null +++ b/third_party/WebKit/LayoutTests/images/resources/apng00-ref.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/images/resources/apng00.png b/third_party/WebKit/LayoutTests/images/resources/apng00.png new file mode 100644 index 0000000..5fd0078 --- /dev/null +++ b/third_party/WebKit/LayoutTests/images/resources/apng00.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/images/resources/apng01-ref.png b/third_party/WebKit/LayoutTests/images/resources/apng01-ref.png new file mode 100644 index 0000000..c6a2f13 --- /dev/null +++ b/third_party/WebKit/LayoutTests/images/resources/apng01-ref.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/images/resources/apng01.png b/third_party/WebKit/LayoutTests/images/resources/apng01.png new file mode 100644 index 0000000..96d40571 --- /dev/null +++ b/third_party/WebKit/LayoutTests/images/resources/apng01.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/images/resources/apng02-ref.png b/third_party/WebKit/LayoutTests/images/resources/apng02-ref.png new file mode 100644 index 0000000..6d226cc --- /dev/null +++ b/third_party/WebKit/LayoutTests/images/resources/apng02-ref.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/images/resources/apng02.png b/third_party/WebKit/LayoutTests/images/resources/apng02.png new file mode 100644 index 0000000..fdbceb3 --- /dev/null +++ b/third_party/WebKit/LayoutTests/images/resources/apng02.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/images/resources/apng04-ref.png b/third_party/WebKit/LayoutTests/images/resources/apng04-ref.png new file mode 100644 index 0000000..47a77dc --- /dev/null +++ b/third_party/WebKit/LayoutTests/images/resources/apng04-ref.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/images/resources/apng04.png b/third_party/WebKit/LayoutTests/images/resources/apng04.png new file mode 100644 index 0000000..c3ea3464 --- /dev/null +++ b/third_party/WebKit/LayoutTests/images/resources/apng04.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/images/resources/apng08-ref.png b/third_party/WebKit/LayoutTests/images/resources/apng08-ref.png new file mode 100644 index 0000000..91bf2b9d --- /dev/null +++ b/third_party/WebKit/LayoutTests/images/resources/apng08-ref.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/images/resources/apng08.png b/third_party/WebKit/LayoutTests/images/resources/apng08.png new file mode 100644 index 0000000..2683af6 --- /dev/null +++ b/third_party/WebKit/LayoutTests/images/resources/apng08.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/images/resources/apng10-ref.png b/third_party/WebKit/LayoutTests/images/resources/apng10-ref.png new file mode 100644 index 0000000..80041da --- /dev/null +++ b/third_party/WebKit/LayoutTests/images/resources/apng10-ref.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/images/resources/apng10.png b/third_party/WebKit/LayoutTests/images/resources/apng10.png new file mode 100644 index 0000000..716256f4 --- /dev/null +++ b/third_party/WebKit/LayoutTests/images/resources/apng10.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/images/resources/apng11-ref.png b/third_party/WebKit/LayoutTests/images/resources/apng11-ref.png new file mode 100644 index 0000000..308db582 --- /dev/null +++ b/third_party/WebKit/LayoutTests/images/resources/apng11-ref.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/images/resources/apng11.png b/third_party/WebKit/LayoutTests/images/resources/apng11.png new file mode 100644 index 0000000..58dd50d --- /dev/null +++ b/third_party/WebKit/LayoutTests/images/resources/apng11.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/images/resources/apng12-ref.png b/third_party/WebKit/LayoutTests/images/resources/apng12-ref.png new file mode 100644 index 0000000..b55c926 --- /dev/null +++ b/third_party/WebKit/LayoutTests/images/resources/apng12-ref.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/images/resources/apng12.png b/third_party/WebKit/LayoutTests/images/resources/apng12.png new file mode 100644 index 0000000..402ff06 --- /dev/null +++ b/third_party/WebKit/LayoutTests/images/resources/apng12.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/images/resources/apng14-ref.png b/third_party/WebKit/LayoutTests/images/resources/apng14-ref.png new file mode 100644 index 0000000..09274c8 --- /dev/null +++ b/third_party/WebKit/LayoutTests/images/resources/apng14-ref.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/images/resources/apng14.png b/third_party/WebKit/LayoutTests/images/resources/apng14.png new file mode 100644 index 0000000..e1e18c0c --- /dev/null +++ b/third_party/WebKit/LayoutTests/images/resources/apng14.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/images/resources/apng18-ref.png b/third_party/WebKit/LayoutTests/images/resources/apng18-ref.png new file mode 100644 index 0000000..1eb8f50 --- /dev/null +++ b/third_party/WebKit/LayoutTests/images/resources/apng18-ref.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/images/resources/apng18.png b/third_party/WebKit/LayoutTests/images/resources/apng18.png new file mode 100644 index 0000000..f0274e22 --- /dev/null +++ b/third_party/WebKit/LayoutTests/images/resources/apng18.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/images/resources/apng24-ref.png b/third_party/WebKit/LayoutTests/images/resources/apng24-ref.png new file mode 100644 index 0000000..209173e --- /dev/null +++ b/third_party/WebKit/LayoutTests/images/resources/apng24-ref.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/images/resources/apng24.png b/third_party/WebKit/LayoutTests/images/resources/apng24.png new file mode 100644 index 0000000..770e65f --- /dev/null +++ b/third_party/WebKit/LayoutTests/images/resources/apng24.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/images/resources/apng26-ref.png b/third_party/WebKit/LayoutTests/images/resources/apng26-ref.png new file mode 100644 index 0000000..9489fd4f4 --- /dev/null +++ b/third_party/WebKit/LayoutTests/images/resources/apng26-ref.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/images/resources/apng26.png b/third_party/WebKit/LayoutTests/images/resources/apng26.png new file mode 100644 index 0000000..9cd44a0 --- /dev/null +++ b/third_party/WebKit/LayoutTests/images/resources/apng26.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/images/resources/empty-frame.png b/third_party/WebKit/LayoutTests/images/resources/empty-frame.png new file mode 100644 index 0000000..dd77a56 --- /dev/null +++ b/third_party/WebKit/LayoutTests/images/resources/empty-frame.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/images/resources/png-animated-idat-not-part-of-animation.png b/third_party/WebKit/LayoutTests/images/resources/png-animated-idat-not-part-of-animation.png new file mode 100644 index 0000000..8667645d --- /dev/null +++ b/third_party/WebKit/LayoutTests/images/resources/png-animated-idat-not-part-of-animation.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/images/resources/png-animated-idat-part-of-animation.png b/third_party/WebKit/LayoutTests/images/resources/png-animated-idat-part-of-animation.png new file mode 100644 index 0000000..5695742 --- /dev/null +++ b/third_party/WebKit/LayoutTests/images/resources/png-animated-idat-part-of-animation.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/images/resources/png-animated-three-independent-frames.png b/third_party/WebKit/LayoutTests/images/resources/png-animated-three-independent-frames.png new file mode 100644 index 0000000..8ea2a7a --- /dev/null +++ b/third_party/WebKit/LayoutTests/images/resources/png-animated-three-independent-frames.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/media/controls-cast-button-narrow.html b/third_party/WebKit/LayoutTests/media/controls-cast-button-narrow.html index 5196286..a496748 100644 --- a/third_party/WebKit/LayoutTests/media/controls-cast-button-narrow.html +++ b/third_party/WebKit/LayoutTests/media/controls-cast-button-narrow.html
@@ -41,12 +41,5 @@ })); })); }); - - function isVisible(button) { - var computedStyle = getComputedStyle(button); - return computedStyle.display !== "none" && - computedStyle.display !== "hidden" && - computedStyle.visibility === "visible"; - } }); </script>
diff --git a/third_party/WebKit/LayoutTests/media/controls/download-button-displays-with-preload-none.html b/third_party/WebKit/LayoutTests/media/controls/download-button-displays-with-preload-none.html index 910af21..89aaad2 100644 --- a/third_party/WebKit/LayoutTests/media/controls/download-button-displays-with-preload-none.html +++ b/third_party/WebKit/LayoutTests/media/controls/download-button-displays-with-preload-none.html
@@ -21,11 +21,5 @@ throw 'Failed to find download button'; return button; } - - function isVisible(button) { - var computedStyle = getComputedStyle(button); - return computedStyle.display !== "none" && - computedStyle.visibility === "visible"; - } }); </script>
diff --git a/third_party/WebKit/LayoutTests/media/controls/overlay-play-button-document-move.html b/third_party/WebKit/LayoutTests/media/controls/overlay-play-button-document-move.html new file mode 100644 index 0000000..955b89c --- /dev/null +++ b/third_party/WebKit/LayoutTests/media/controls/overlay-play-button-document-move.html
@@ -0,0 +1,60 @@ +<!DOCTYPE html> +<title>media controls overlay play button document move</title> +<script src="../../resources/testharness.js"></script> +<script src="../../resources/testharnessreport.js"></script> +<script src="../media-file.js"></script> +<script src="../media-controls.js"></script> +<script src="overlay-play-button.js"></script> +<body> +<script> +async_test(function(t) { + // Make sure the overlay play button is turned on, as it's typically off + // unless we're dealing with Android. + enableOverlayPlayButtonForTest(t); + + var video = createAndMoveVideo(); + + video.onloadedmetadata = t.step_func(function() { + // Large-enough video should have an overlay play button. + assertOverlayPlayButtonVisible(video); + + // If the width goes under the minimum, the button should be hidden. + video.width = NARROW_VIDEO_WIDTH; + testRunner.layoutAndPaintAsyncThen(t.step_func(function() { + assertOverlayPlayButtonNotVisible(video); + + // Re-widening the video should display the button. + video.width = NORMAL_VIDEO_WIDTH; + testRunner.layoutAndPaintAsyncThen(t.step_func(function() { + assertOverlayPlayButtonVisible(video); + + // If the height goes under the minimum, the button should be hidden. + video.height = NARROW_VIDEO_HEIGHT; + testRunner.layoutAndPaintAsyncThen(t.step_func(function() { + assertOverlayPlayButtonNotVisible(video); + + // Re-heightening the video should display the button. + video.height = NORMAL_VIDEO_HEIGHT; + testRunner.layoutAndPaintAsyncThen(t.step_func_done(function() { + assertOverlayPlayButtonVisible(video); + })); + })); + })); + })); + }); + + function createAndMoveVideo() { + var doc = document.implementation.createHTMLDocument(); + var v = doc.createElement('video'); + v.src = findMediaFile('video', '../content/test'); + v.width = NORMAL_VIDEO_WIDTH; + v.height = NORMAL_VIDEO_HEIGHT; + v.controls = true; + doc.body.appendChild(v); + doc.body.removeChild(v); + document.body.appendChild(v); + return v; + } +}); +</script> +</body>
diff --git a/third_party/WebKit/LayoutTests/media/controls/overlay-play-button-narrow.html b/third_party/WebKit/LayoutTests/media/controls/overlay-play-button-narrow.html new file mode 100644 index 0000000..77e37c4a --- /dev/null +++ b/third_party/WebKit/LayoutTests/media/controls/overlay-play-button-narrow.html
@@ -0,0 +1,52 @@ +<!DOCTYPE html> +<title>media controls overlay play button narrow</title> +<script src="../../resources/testharness.js"></script> +<script src="../../resources/testharnessreport.js"></script> +<script src="../media-file.js"></script> +<script src="../media-controls.js"></script> +<script src="overlay-play-button.js"></script> +<body> +<script> +async_test(function(t) { + // Make sure the overlay play button is turned on, as it's typically off + // unless we're dealing with Android. + enableOverlayPlayButtonForTest(t); + + var video = document.createElement('video'); + video.src = findMediaFile("video", "../content/test"); + video.width = NORMAL_VIDEO_WIDTH; + video.height = NORMAL_VIDEO_HEIGHT; + video.controls = true; + document.body.appendChild(video); + + video.onloadedmetadata = t.step_func(function() { + // Large-enough video should have an overlay play button. + assertOverlayPlayButtonVisible(video); + + // If the width goes under the minimum, the button should be hidden. + video.width = NARROW_VIDEO_WIDTH; + testRunner.layoutAndPaintAsyncThen(t.step_func(function() { + assertOverlayPlayButtonNotVisible(video); + + // Re-widening the video should display the button. + video.width = NORMAL_VIDEO_WIDTH; + testRunner.layoutAndPaintAsyncThen(t.step_func(function() { + assertOverlayPlayButtonVisible(video); + + // If the height goes under the minimum, the button should be hidden. + video.height = NARROW_VIDEO_HEIGHT; + testRunner.layoutAndPaintAsyncThen(t.step_func(function() { + assertOverlayPlayButtonNotVisible(video); + + // Re-heightening the video should display the button. + video.height = NORMAL_VIDEO_HEIGHT; + testRunner.layoutAndPaintAsyncThen(t.step_func_done(function() { + assertOverlayPlayButtonVisible(video); + })); + })); + })); + })); + }); +}); +</script> +</body>
diff --git a/third_party/WebKit/LayoutTests/media/controls/overlay-play-button.js b/third_party/WebKit/LayoutTests/media/controls/overlay-play-button.js new file mode 100644 index 0000000..5feccd59 --- /dev/null +++ b/third_party/WebKit/LayoutTests/media/controls/overlay-play-button.js
@@ -0,0 +1,38 @@ +// Defined in core/html/shadow/MediaControls.cpp. +// Minimum width is 48px. +var NARROW_VIDEO_WIDTH = 40; +var NORMAL_VIDEO_WIDTH = 200; +// Minimum height is 116px. +var NARROW_VIDEO_HEIGHT = 90; +var NORMAL_VIDEO_HEIGHT = 200; + +function assertOverlayPlayButtonVisible(videoElement) { + assert_true(isVisible(overlayPlayButton(videoElement)), + "overlay play button should be visible"); +} + +function assertOverlayPlayButtonNotVisible(videoElement) { + assert_false(isVisible(overlayPlayButton(videoElement)), + "overlay play button should not be visible"); +} + +function overlayPlayButton(videoElement) { + var controlID = '-webkit-media-controls-overlay-play-button'; + var button = mediaControlsElement( + window.internals.shadowRoot(videoElement).firstChild, + controlID); + if (!button) + throw 'Failed to find overlay play button'; + return button; +} + +function enableOverlayPlayButtonForTest(t) { + var mediaControlsOverlayPlayButtonValue = + internals.runtimeFlags.mediaControlsOverlayPlayButtonEnabled; + internals.runtimeFlags.mediaControlsOverlayPlayButtonEnabled = true; + + t.add_cleanup(() => { + internals.runtimeFlags.mediaControlsOverlayPlayButtonEnabled = + mediaControlsOverlayPlayButtonValue; + }); +}
diff --git a/third_party/WebKit/LayoutTests/media/media-controls.js b/third_party/WebKit/LayoutTests/media/media-controls.js index 3fa54e6..b71c411 100644 --- a/third_party/WebKit/LayoutTests/media/media-controls.js +++ b/third_party/WebKit/LayoutTests/media/media-controls.js
@@ -228,3 +228,9 @@ { return getComputedStyle(mediaControlsButton(element, "panel")).opacity == "1"; } + +function isVisible(button) { + var computedStyle = getComputedStyle(button); + return computedStyle.display !== "none" && + computedStyle.visibility === "visible"; +}
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/media-audio-no-spurious-repaints.html b/third_party/WebKit/LayoutTests/paint/invalidation/media-audio-no-spurious-repaints.html index a6405ec..641d737 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/media-audio-no-spurious-repaints.html +++ b/third_party/WebKit/LayoutTests/paint/invalidation/media-audio-no-spurious-repaints.html
@@ -21,7 +21,7 @@ // Manually verify the number of repaints instead of using a repaint // test since media playback is asynchronous by nature and its threading // will cause a variance in the number of repaints on test bots. - var minExpected = 3, maxExpected = 4, expectedRect = [8, 8, 300, 150]; + var minExpected = 5, maxExpected = 8, expectedRect = [8, 8, 300, 150]; t.add_cleanup(function() { if (t.status == t.PASS)
diff --git a/third_party/WebKit/LayoutTests/platform/android/media/media-audio-no-spurious-repaints-expected.txt b/third_party/WebKit/LayoutTests/platform/android/media/media-audio-no-spurious-repaints-expected.txt deleted file mode 100644 index f98a895..0000000 --- a/third_party/WebKit/LayoutTests/platform/android/media/media-audio-no-spurious-repaints-expected.txt +++ /dev/null
@@ -1,32 +0,0 @@ -CONSOLE MESSAGE: line 29: FAIL! An unexpected number of repaints occurred; expected 3 to 4 with rects of [8, 8, 300, 150]. Actual layer tree: { - "bounds": [800, 600], - "children": [ - { - "bounds": [800, 600], - "contentsOpaque": true, - "drawsContent": true, - "paintInvalidations": [ - { - "object": "LayoutVideo VIDEO", - "rect": [8, 8, 300, 150], - "reason": "full" - }, - { - "object": "LayoutVideo VIDEO", - "rect": [8, 8, 300, 150], - "reason": "style change" - }, - { - "object": "LayoutVideo VIDEO", - "rect": [8, 8, 300, 150], - "reason": "full" - } - ] - } - ] -} - - This is a testharness.js-based test. -FAIL Verifies there are no spurious repaints for audio in a video tag. Cannot read property 'length' of undefined -Harness: the test ran to completion. -
diff --git a/third_party/WebKit/LayoutTests/platform/linux/css1/box_properties/border_style-expected.png b/third_party/WebKit/LayoutTests/platform/linux/css1/box_properties/border_style-expected.png index eb3fb83..5af001f 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/css1/box_properties/border_style-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/css1/box_properties/border_style-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/css1/box_properties/border_style_inline-expected.png b/third_party/WebKit/LayoutTests/platform/linux/css1/box_properties/border_style_inline-expected.png index 927d70e..a6816bd0 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/css1/box_properties/border_style_inline-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/css1/box_properties/border_style_inline-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/css2.1/20110323/replaced-intrinsic-ratio-001-expected.png b/third_party/WebKit/LayoutTests/platform/linux/css2.1/20110323/replaced-intrinsic-ratio-001-expected.png index bb6d023..35dc397b 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/css2.1/20110323/replaced-intrinsic-ratio-001-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/css2.1/20110323/replaced-intrinsic-ratio-001-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/css2.1/t0805-c5517-brdr-s-00-c-expected.png b/third_party/WebKit/LayoutTests/platform/linux/css2.1/t0805-c5517-brdr-s-00-c-expected.png index c550e031c..290d22d 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/css2.1/t0805-c5517-brdr-s-00-c-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/css2.1/t0805-c5517-brdr-s-00-c-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/css2.1/t0805-c5517-ibrdr-s-00-a-expected.png b/third_party/WebKit/LayoutTests/platform/linux/css2.1/t0805-c5517-ibrdr-s-00-a-expected.png index fc66dbe..785d931e 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/css2.1/t0805-c5517-ibrdr-s-00-a-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/css2.1/t0805-c5517-ibrdr-s-00-a-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-03-d-expected.png b/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-03-d-expected.png index 5ce6c8f..51a5411 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-03-d-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-03-d-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-13-d-expected.png b/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-13-d-expected.png index e0aea62..b5ec126 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-13-d-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-13-d-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-23-d-expected.png b/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-23-d-expected.png index 5aecb09..c30c529 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-23-d-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-23-d-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-31-d-expected.png b/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-31-d-expected.png index 78e43c6..be3ddd52 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-31-d-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-31-d-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-32-d-expected.png b/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-32-d-expected.png index 6f381a00..beefd54 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-32-d-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-32-d-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-33-d-expected.png b/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-33-d-expected.png index cce71db..19ae90e 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-33-d-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-33-d-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-34-d-expected.png b/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-34-d-expected.png index c91ea61..bbcce36 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-34-d-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-34-d-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-35-d-expected.png b/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-35-d-expected.png index d3d2828..b98b0d5 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-35-d-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-35-d-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-36-d-expected.png b/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-36-d-expected.png index bdcc593..a5c14fd 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-36-d-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-36-d-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-37-d-expected.png b/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-37-d-expected.png index 89482e9..88ad4e9a 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-37-d-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-37-d-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-38-d-expected.png b/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-38-d-expected.png index d1306ae..f8ddc3c 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-38-d-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-38-d-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-39-d-expected.png b/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-39-d-expected.png index d846ac6..2332a17 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-39-d-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-39-d-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-43-d-expected.png b/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-43-d-expected.png index b22f0cac..82b88d28 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-43-d-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-43-d-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-53-d-expected.png b/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-53-d-expected.png index f0070c6d..e408f83c 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-53-d-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-53-d-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-63-d-expected.png b/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-63-d-expected.png index 863ccea..a30a84e4 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-63-d-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-63-d-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-73-d-expected.png b/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-73-d-expected.png index be5653b7..82e26ab 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-73-d-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-73-d-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-83-d-expected.png b/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-83-d-expected.png index 73f67af..290030ac7 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-83-d-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-83-d-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-93-d-expected.png b/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-93-d-expected.png index f98064f..77ba4d0 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-93-d-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-93-d-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/editing/execCommand/5138441-expected.png b/third_party/WebKit/LayoutTests/platform/linux/editing/execCommand/5138441-expected.png index 71b8f9f..d7ef0c7 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/editing/execCommand/5138441-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/editing/execCommand/5138441-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/backgrounds/repeat/mask-negative-offset-repeat-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/backgrounds/repeat/mask-negative-offset-repeat-expected.png index 5dee2781..f40f82e 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/backgrounds/repeat/mask-negative-offset-repeat-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/backgrounds/repeat/mask-negative-offset-repeat-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/backgrounds/repeat/negative-offset-repeat-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/backgrounds/repeat/negative-offset-repeat-expected.png index a89e0cbd..4b9315c 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/backgrounds/repeat/negative-offset-repeat-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/backgrounds/repeat/negative-offset-repeat-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/backgrounds/repeat/negative-offset-repeat-transformed-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/backgrounds/repeat/negative-offset-repeat-transformed-expected.png index b41fed5..a018aca 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/backgrounds/repeat/negative-offset-repeat-transformed-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/backgrounds/repeat/negative-offset-repeat-transformed-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/block/positioning/absolute-in-inline-ltr-2-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/block/positioning/absolute-in-inline-ltr-2-expected.png index 0ec08b0..81e2490 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/block/positioning/absolute-in-inline-ltr-2-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/block/positioning/absolute-in-inline-ltr-2-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/block/positioning/absolute-in-inline-ltr-3-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/block/positioning/absolute-in-inline-ltr-3-expected.png index 3f952a3e2b..96a91f4e 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/block/positioning/absolute-in-inline-ltr-3-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/block/positioning/absolute-in-inline-ltr-3-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/block/positioning/absolute-in-inline-ltr-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/block/positioning/absolute-in-inline-ltr-expected.png index 64b6e7f..a792652b8 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/block/positioning/absolute-in-inline-ltr-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/block/positioning/absolute-in-inline-ltr-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/block/positioning/absolute-in-inline-rtl-2-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/block/positioning/absolute-in-inline-rtl-2-expected.png index fe2663c..e81a458 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/block/positioning/absolute-in-inline-rtl-2-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/block/positioning/absolute-in-inline-rtl-2-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/block/positioning/absolute-in-inline-rtl-3-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/block/positioning/absolute-in-inline-rtl-3-expected.png index e206a80f..03ec88f 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/block/positioning/absolute-in-inline-rtl-3-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/block/positioning/absolute-in-inline-rtl-3-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/block/positioning/absolute-in-inline-rtl-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/block/positioning/absolute-in-inline-rtl-expected.png index 1275ee0..3520a188 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/block/positioning/absolute-in-inline-rtl-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/block/positioning/absolute-in-inline-rtl-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/block/positioning/absolute-in-inline-short-ltr-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/block/positioning/absolute-in-inline-short-ltr-expected.png index 44ac998..05cb1ce 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/block/positioning/absolute-in-inline-short-ltr-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/block/positioning/absolute-in-inline-short-ltr-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/block/positioning/absolute-in-inline-short-rtl-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/block/positioning/absolute-in-inline-short-rtl-expected.png index 012bbbe..ba7e35d 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/block/positioning/absolute-in-inline-short-rtl-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/block/positioning/absolute-in-inline-short-rtl-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/block/positioning/child-of-absolute-with-auto-height-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/block/positioning/child-of-absolute-with-auto-height-expected.png index 6e8035cc..57bac7f 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/block/positioning/child-of-absolute-with-auto-height-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/block/positioning/child-of-absolute-with-auto-height-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/borders/borderRadiusAllStylesAllCorners-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/borders/borderRadiusAllStylesAllCorners-expected.png index 8b29ec4b..2270d33 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/borders/borderRadiusAllStylesAllCorners-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/borders/borderRadiusAllStylesAllCorners-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/borders/outline-alpha-block-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/borders/outline-alpha-block-expected.png index 7e06c05..a9bf967 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/borders/outline-alpha-block-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/borders/outline-alpha-block-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/borders/outline-alpha-inline-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/borders/outline-alpha-inline-expected.png index 50302121..7f8c3074 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/borders/outline-alpha-inline-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/borders/outline-alpha-inline-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/box-shadow/inset-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/box-shadow/inset-expected.png index 117b021..f7772ed 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/box-shadow/inset-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/box-shadow/inset-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/box-shadow/inset-subpixel-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/box-shadow/inset-subpixel-expected.png index 5e522e39..81fc7905 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/box-shadow/inset-subpixel-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/box-shadow/inset-subpixel-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/css-generated-content/012-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/css-generated-content/012-expected.png index e31ecb3d..f742769 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/css-generated-content/012-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/css-generated-content/012-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/css/border-height-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/css/border-height-expected.png index 91c4a7d..1321747 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/css/border-height-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/css/border-height-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/css/margin-top-bottom-dynamic-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/css/margin-top-bottom-dynamic-expected.png index 17d48194..bc7ccb5 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/css/margin-top-bottom-dynamic-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/css/margin-top-bottom-dynamic-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/css3-text/css3-text-decoration/text-decoration-skip-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/css3-text/css3-text-decoration/text-decoration-skip-expected.png index be4ca90..c3e5fb2 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/css3-text/css3-text-decoration/text-decoration-skip-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/css3-text/css3-text-decoration/text-decoration-skip-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/css3-text/css3-text-decoration/text-decoration-style-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/css3-text/css3-text-decoration/text-decoration-style-expected.png index 880ccd3..4a46160 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/css3-text/css3-text-decoration/text-decoration-style-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/css3-text/css3-text-decoration/text-decoration-style-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-expected.png index 4395229..86ff5ec8 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/forms/control-clip-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/forms/control-clip-expected.png index b96903e..61e5dea 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/forms/control-clip-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/forms/control-clip-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/forms/negativeLineHeight-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/forms/negativeLineHeight-expected.png index da66d77a..4c3dee1 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/forms/negativeLineHeight-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/forms/negativeLineHeight-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/forms/textarea/textAreaLineHeight-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/forms/textarea/textAreaLineHeight-expected.png index 29f498a..ab48f27 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/forms/textarea/textAreaLineHeight-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/forms/textarea/textAreaLineHeight-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/inline-block/inline-block-vertical-align-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/inline-block/inline-block-vertical-align-expected.png index 85f5fd7..d783726 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/inline-block/inline-block-vertical-align-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/inline-block/inline-block-vertical-align-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/lists/big-list-marker-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/lists/big-list-marker-expected.png index f7243cb..a9bb84ce 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/lists/big-list-marker-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/lists/big-list-marker-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/lists/ordered-list-with-no-ol-tag-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/lists/ordered-list-with-no-ol-tag-expected.png index 7baa14dbe..5b028f8 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/lists/ordered-list-with-no-ol-tag-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/lists/ordered-list-with-no-ol-tag-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/multicol/composited-with-overflow-in-next-column-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/multicol/composited-with-overflow-in-next-column-expected.png index 848a8f2..9caae91 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/multicol/composited-with-overflow-in-next-column-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/multicol/composited-with-overflow-in-next-column-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/replaced/replaced-child-of-absolute-with-auto-height-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/replaced/replaced-child-of-absolute-with-auto-height-expected.png index 604cbd9..6a03047e 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/replaced/replaced-child-of-absolute-with-auto-height-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/replaced/replaced-child-of-absolute-with-auto-height-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/spatial-navigation/snav-multiple-select-focusring-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/spatial-navigation/snav-multiple-select-focusring-expected.png index 99dcf3ef..a476ca8 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/spatial-navigation/snav-multiple-select-focusring-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/spatial-navigation/snav-multiple-select-focusring-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-cell-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-cell-collapsed-border-expected.png index 0c785da..ce0944db 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-cell-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-cell-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-cell-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-cell-expected.png index eb53a06..35651b1 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-cell-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-cell-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-collapsed-border-expected.png index e28c0df0..55b5f8c 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-column-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-column-collapsed-border-expected.png index 989bdc2..4ebc005 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-column-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-column-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-column-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-column-expected.png index 33910ce..9e88bd1 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-column-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-column-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-column-group-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-column-group-collapsed-border-expected.png index d5875d5..fb2d843 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-column-group-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-column-group-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-column-group-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-column-group-expected.png index 4483030..a6ad508 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-column-group-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-column-group-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-expected.png index d5c8824..346bd88 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-quirks-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-quirks-collapsed-border-expected.png index b55b0bf..d45548a 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-quirks-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-quirks-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-quirks-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-quirks-expected.png index 6a9675b1..a49e513 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-quirks-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-quirks-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-row-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-row-collapsed-border-expected.png index 6c8c586..8ca0fe54 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-row-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-row-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-row-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-row-expected.png index 7c054ab..5e24917 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-row-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-row-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-row-group-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-row-group-collapsed-border-expected.png index 28e03f6a..b8b87ef 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-row-group-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-row-group-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-row-group-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-row-group-expected.png index a8da450f..4bd187d 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-row-group-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-row-group-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_layers-hide-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_layers-hide-collapsed-border-expected.png index 30e4d11..ff4fd6a 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_layers-hide-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_layers-hide-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_layers-hide-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_layers-hide-expected.png index 6fa5d98..ccf013c6 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_layers-hide-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_layers-hide-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-cell-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-cell-collapsed-border-expected.png index e3094c3..a3df3b1 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-cell-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-cell-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-cell-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-cell-expected.png index 2f7b42f..ade03db1 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-cell-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-cell-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-collapsed-border-expected.png index 3d4229f5..044ad28 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-column-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-column-collapsed-border-expected.png index 641d86e..0a6d8af3 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-column-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-column-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-column-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-column-expected.png index 92b5a95a..021acf7c 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-column-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-column-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-column-group-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-column-group-collapsed-border-expected.png index ee4828f9..1118791 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-column-group-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-column-group-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-column-group-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-column-group-expected.png index 9369f31a..dd6bf6fd 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-column-group-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-column-group-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-expected.png index ae31260..31d690b 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-row-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-row-collapsed-border-expected.png index 05369ea..efb4b5d6 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-row-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-row-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-row-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-row-expected.png index b7fe49fe..23aea2f 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-row-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-row-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-row-group-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-row-group-collapsed-border-expected.png index 23485c9..5e917f6 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-row-group-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-row-group-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-row-group-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-row-group-expected.png index d14c47e..72d561a 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-row-group-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-row-group-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-cell-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-cell-collapsed-border-expected.png index 261c18b..d8e8a89 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-cell-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-cell-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-cell-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-cell-expected.png index 868c11e..15a91c49 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-cell-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-cell-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-collapsed-border-expected.png index fbc3fd1..eacd20d 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-column-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-column-collapsed-border-expected.png index 35f0cc2b..a156ef4 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-column-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-column-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-column-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-column-expected.png index 4f6c718..55bb5e3 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-column-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-column-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-column-group-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-column-group-collapsed-border-expected.png index fe0772f..14783be 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-column-group-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-column-group-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-column-group-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-column-group-expected.png index 9bed3b8..f79ae8ade 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-column-group-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-column-group-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-expected.png index 1d9aa93..cd74901 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-row-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-row-collapsed-border-expected.png index dcbbae8..bd0cf96e 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-row-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-row-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-row-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-row-expected.png index ecd44813..9911e6b 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-row-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-row-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-row-group-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-row-group-collapsed-border-expected.png index 99f2b47..73df624 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-row-group-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-row-group-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-row-group-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-row-group-expected.png index 60b6720..3263ca0d 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-row-group-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-row-group-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/border-collapsing/002-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/table/border-collapsing/002-expected.png index 2dad738..07a98a92 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/border-collapsing/002-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/border-collapsing/002-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/border-collapsing/002-vertical-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/table/border-collapsing/002-vertical-expected.png index ee279d7..df0b4c89 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/border-collapsing/002-vertical-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/border-collapsing/002-vertical-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/border-collapsing/rtl-border-collapsing-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/table/border-collapsing/rtl-border-collapsing-expected.png index 74f22e8b..b4dda72 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/border-collapsing/rtl-border-collapsing-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/border-collapsing/rtl-border-collapsing-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/border-collapsing/rtl-border-collapsing-vertical-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/table/border-collapsing/rtl-border-collapsing-vertical-expected.png index 3424b87..e8d31a1b 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/border-collapsing/rtl-border-collapsing-vertical-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/border-collapsing/rtl-border-collapsing-vertical-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/empty-table-percent-height-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/table/empty-table-percent-height-expected.png index 2ecf693..c0c5d246 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/empty-table-percent-height-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/empty-table-percent-height-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/table-and-parts-outline-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/table/table-and-parts-outline-expected.png index 2eed1a2..eff97882 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/table-and-parts-outline-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/table-and-parts-outline-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/text-autosizing/tables/css-table-lots-of-text-many-cells-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/text-autosizing/tables/css-table-lots-of-text-many-cells-expected.png index c911f6b..4adcbce 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/text-autosizing/tables/css-table-lots-of-text-many-cells-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/text-autosizing/tables/css-table-lots-of-text-many-cells-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/text-autosizing/tables/css-table-single-cell-lots-of-text-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/text-autosizing/tables/css-table-single-cell-lots-of-text-expected.png index 40d81b03..776b4a5 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/text-autosizing/tables/css-table-single-cell-lots-of-text-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/text-autosizing/tables/css-table-single-cell-lots-of-text-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/text-autosizing/tables/fixed-table-lots-of-text-many-cells-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/text-autosizing/tables/fixed-table-lots-of-text-many-cells-expected.png index bc29a38..147fd5e 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/text-autosizing/tables/fixed-table-lots-of-text-many-cells-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/text-autosizing/tables/fixed-table-lots-of-text-many-cells-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/text-autosizing/tables/fixed-table-single-cell-lots-of-text-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/text-autosizing/tables/fixed-table-single-cell-lots-of-text-expected.png index 3658b93..a71478c 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/text-autosizing/tables/fixed-table-single-cell-lots-of-text-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/text-autosizing/tables/fixed-table-single-cell-lots-of-text-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/text-autosizing/tables/lots-of-text-many-cells-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/text-autosizing/tables/lots-of-text-many-cells-expected.png index 46816278..50fd28d 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/text-autosizing/tables/lots-of-text-many-cells-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/text-autosizing/tables/lots-of-text-many-cells-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/text-autosizing/tables/narrow-percentage-width-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/text-autosizing/tables/narrow-percentage-width-expected.png index 9f6c573..01e4a5ad 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/text-autosizing/tables/narrow-percentage-width-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/text-autosizing/tables/narrow-percentage-width-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/text-autosizing/tables/narrow-specified-width-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/text-autosizing/tables/narrow-specified-width-expected.png index 2795d9fe..efce404 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/text-autosizing/tables/narrow-specified-width-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/text-autosizing/tables/narrow-specified-width-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/text-autosizing/tables/nested-table-wrapping-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/text-autosizing/tables/nested-table-wrapping-expected.png index 910daa8..9e5f3c9 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/text-autosizing/tables/nested-table-wrapping-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/text-autosizing/tables/nested-table-wrapping-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/text-autosizing/tables/nested-tables-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/text-autosizing/tables/nested-tables-expected.png index 1575528a..ea5a1741 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/text-autosizing/tables/nested-tables-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/text-autosizing/tables/nested-tables-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/text-autosizing/tables/single-cell-lots-of-text-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/text-autosizing/tables/single-cell-lots-of-text-expected.png index 0dcdc46..97b71332 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/text-autosizing/tables/single-cell-lots-of-text-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/text-autosizing/tables/single-cell-lots-of-text-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/text-autosizing/tables/single-percent-width-cell-lots-of-text-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/text-autosizing/tables/single-percent-width-cell-lots-of-text-expected.png index b020d22..e0b43e89 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/text-autosizing/tables/single-percent-width-cell-lots-of-text-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/text-autosizing/tables/single-percent-width-cell-lots-of-text-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/text-autosizing/tables/table-cell-inflation-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/text-autosizing/tables/table-cell-inflation-expected.png index 0a103c63..b3b07113 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/text-autosizing/tables/table-cell-inflation-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/text-autosizing/tables/table-cell-inflation-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/text-autosizing/tables/table-for-layout-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/text-autosizing/tables/table-for-layout-expected.png index f3afda7b..5b3b0c3c 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/text-autosizing/tables/table-for-layout-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/text-autosizing/tables/table-for-layout-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/text-autosizing/tables/table-with-inline-block-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/text-autosizing/tables/table-with-inline-block-expected.png index 4674d0b..4113aab 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/text-autosizing/tables/table-with-inline-block-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/text-autosizing/tables/table-with-inline-block-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/text-autosizing/tables/wide-percentage-width-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/text-autosizing/tables/wide-percentage-width-expected.png index d0c25af..3d538cf9 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/text-autosizing/tables/wide-percentage-width-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/text-autosizing/tables/wide-percentage-width-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/text-autosizing/tables/wide-specified-width-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/text-autosizing/tables/wide-specified-width-expected.png index 224e3efe..cbf0916 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/text-autosizing/tables/wide-specified-width-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/text-autosizing/tables/wide-specified-width-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/text/text-stroke-with-border-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/text/text-stroke-with-border-expected.png index a590925..ee4e46d 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/text/text-stroke-with-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/text/text-stroke-with-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/http/tests/misc/object-embedding-svg-delayed-size-negotiation-2-expected.png b/third_party/WebKit/LayoutTests/platform/linux/http/tests/misc/object-embedding-svg-delayed-size-negotiation-2-expected.png index 9aa9357..7eb79f59 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/http/tests/misc/object-embedding-svg-delayed-size-negotiation-2-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/http/tests/misc/object-embedding-svg-delayed-size-negotiation-2-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/ietestcenter/css3/bordersbackgrounds/background-color-border-box-expected.png b/third_party/WebKit/LayoutTests/platform/linux/ietestcenter/css3/bordersbackgrounds/background-color-border-box-expected.png index 06c22c41..aa2858d 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/ietestcenter/css3/bordersbackgrounds/background-color-border-box-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/ietestcenter/css3/bordersbackgrounds/background-color-border-box-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/ietestcenter/css3/bordersbackgrounds/background_color_padding_box-expected.png b/third_party/WebKit/LayoutTests/platform/linux/ietestcenter/css3/bordersbackgrounds/background_color_padding_box-expected.png index e37722c..fe3f83fa 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/ietestcenter/css3/bordersbackgrounds/background_color_padding_box-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/ietestcenter/css3/bordersbackgrounds/background_color_padding_box-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/ietestcenter/css3/bordersbackgrounds/border-radius-style-002-expected.png b/third_party/WebKit/LayoutTests/platform/linux/ietestcenter/css3/bordersbackgrounds/border-radius-style-002-expected.png index e910926..d167eb2 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/ietestcenter/css3/bordersbackgrounds/border-radius-style-002-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/ietestcenter/css3/bordersbackgrounds/border-radius-style-002-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/layer-child-outline-expected.png b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/layer-child-outline-expected.png index ebc25c2..5515ee26 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/layer-child-outline-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/layer-child-outline-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/plugins/embed-attributes-style-expected.png b/third_party/WebKit/LayoutTests/platform/linux/plugins/embed-attributes-style-expected.png index c3b12ad..9b88249c 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/plugins/embed-attributes-style-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/plugins/embed-attributes-style-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/scrollbars/border-box-rect-clips-scrollbars-expected.png b/third_party/WebKit/LayoutTests/platform/linux/scrollbars/border-box-rect-clips-scrollbars-expected.png index 9e12b6c97..c7e1686 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/scrollbars/border-box-rect-clips-scrollbars-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/scrollbars/border-box-rect-clips-scrollbars-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/as-background-image/background-image-preserveaspectRatio-support-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/as-background-image/background-image-preserveaspectRatio-support-expected.png index b784a03..cb44c9c 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/svg/as-background-image/background-image-preserveaspectRatio-support-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/svg/as-background-image/background-image-preserveaspectRatio-support-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/as-image/img-preserveAspectRatio-support-1-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/as-image/img-preserveAspectRatio-support-1-expected.png index ad98a12..30246f51 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/svg/as-image/img-preserveAspectRatio-support-1-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/svg/as-image/img-preserveAspectRatio-support-1-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/as-image/img-preserveAspectRatio-support-2-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/as-image/img-preserveAspectRatio-support-2-expected.png index 797fecd..b72f2ea 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/svg/as-image/img-preserveAspectRatio-support-2-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/svg/as-image/img-preserveAspectRatio-support-2-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/as-object/object-box-sizing-no-width-height-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/as-object/object-box-sizing-no-width-height-expected.png index 4ce41ea..660947e 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/svg/as-object/object-box-sizing-no-width-height-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/svg/as-object/object-box-sizing-no-width-height-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/transforms/svg-css-transforms-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/transforms/svg-css-transforms-expected.png index d95fbac..d026cff 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/svg/transforms/svg-css-transforms-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/svg/transforms/svg-css-transforms-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/zoom/page/zoom-img-preserveAspectRatio-support-1-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/zoom/page/zoom-img-preserveAspectRatio-support-1-expected.png index b89c4adb..ddcca6e 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/svg/zoom/page/zoom-img-preserveAspectRatio-support-1-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/svg/zoom/page/zoom-img-preserveAspectRatio-support-1-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/zoom/page/zoom-replaced-intrinsic-ratio-001-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/zoom/page/zoom-replaced-intrinsic-ratio-001-expected.png index 9bad3080..a60837d 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/svg/zoom/page/zoom-replaced-intrinsic-ratio-001-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/svg/zoom/page/zoom-replaced-intrinsic-ratio-001-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/bugs/bug22019-expected.png b/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/bugs/bug22019-expected.png index 82b40ed..3bbe01c 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/bugs/bug22019-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/bugs/bug22019-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/bugs/bug2886-expected.png b/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/bugs/bug2886-expected.png index 73f678b..cfd8c3b 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/bugs/bug2886-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/bugs/bug2886-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/bugs/bug2947-expected.png b/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/bugs/bug2947-expected.png index 020f3e6..e37293ff 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/bugs/bug2947-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/bugs/bug2947-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/collapsing_borders/bug41262-3-expected.png b/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/collapsing_borders/bug41262-3-expected.png index f7e26a8..16e3a73 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/collapsing_borders/bug41262-3-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/collapsing_borders/bug41262-3-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/marvin/tables_style-expected.png b/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/marvin/tables_style-expected.png index eb75576..8a05024 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/marvin/tables_style-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/marvin/tables_style-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla_expected_failures/bugs/bug2479-5-expected.png b/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla_expected_failures/bugs/bug2479-5-expected.png index a3e9e1cc..464536b 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla_expected_failures/bugs/bug2479-5-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla_expected_failures/bugs/bug2479-5-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla_expected_failures/marvin/backgr_fixed-bg-expected.png b/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla_expected_failures/marvin/backgr_fixed-bg-expected.png index 038a52e..e11c44f 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla_expected_failures/marvin/backgr_fixed-bg-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla_expected_failures/marvin/backgr_fixed-bg-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/transforms/svg-vs-css-expected.png b/third_party/WebKit/LayoutTests/platform/linux/transforms/svg-vs-css-expected.png index 715ac46..009cbc8a 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/transforms/svg-vs-css-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/transforms/svg-vs-css-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/layer-child-outline-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/layer-child-outline-expected.png index ebc25c2..5515ee26 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/layer-child-outline-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/layer-child-outline-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/css1/box_properties/border_style-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/css1/box_properties/border_style-expected.png index eb3fb83..5af001f 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/css1/box_properties/border_style-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/css1/box_properties/border_style-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/css1/box_properties/border_style_inline-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/css1/box_properties/border_style_inline-expected.png new file mode 100644 index 0000000..a6816bd0 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/css1/box_properties/border_style_inline-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/http/tests/misc/object-embedding-svg-delayed-size-negotiation-2-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/http/tests/misc/object-embedding-svg-delayed-size-negotiation-2-expected.png index 9aa9357..7eb79f59 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/http/tests/misc/object-embedding-svg-delayed-size-negotiation-2-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/http/tests/misc/object-embedding-svg-delayed-size-negotiation-2-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/scrollbars/border-box-rect-clips-scrollbars-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/scrollbars/border-box-rect-clips-scrollbars-expected.png index 9e12b6c97..c7e1686 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/scrollbars/border-box-rect-clips-scrollbars-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/scrollbars/border-box-rect-clips-scrollbars-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/rootlayerscrolls/scrollbars/border-box-rect-clips-scrollbars-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/rootlayerscrolls/scrollbars/border-box-rect-clips-scrollbars-expected.png index 9e12b6c97..c7e1686 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/virtual/rootlayerscrolls/scrollbars/border-box-rect-clips-scrollbars-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/rootlayerscrolls/scrollbars/border-box-rect-clips-scrollbars-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/css1/box_properties/border_style-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/css1/box_properties/border_style-expected.png index 0d2bf63..f4a848c 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/css1/box_properties/border_style-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/css1/box_properties/border_style-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/css1/box_properties/border_style_inline-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/css1/box_properties/border_style_inline-expected.png index c74e7ee..7f11984f 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/css1/box_properties/border_style_inline-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/css1/box_properties/border_style_inline-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/css/margin-top-bottom-dynamic-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/css/margin-top-bottom-dynamic-expected.png index fb461467..fbbaa2b 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/css/margin-top-bottom-dynamic-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/css/margin-top-bottom-dynamic-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/forms/control-clip-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/forms/control-clip-expected.png index 9be4f61..c549251 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/forms/control-clip-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/forms/control-clip-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/spatial-navigation/snav-multiple-select-focusring-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/spatial-navigation/snav-multiple-select-focusring-expected.png index 9c60ea8..3724e15 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/spatial-navigation/snav-multiple-select-focusring-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/spatial-navigation/snav-multiple-select-focusring-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-cell-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-cell-collapsed-border-expected.png index 50bcff2c..1081ea83 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-cell-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-cell-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-cell-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-cell-expected.png index 0d1b6ea..8cafe9e2 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-cell-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-cell-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-collapsed-border-expected.png index 5546500..8d8e1b4 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-column-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-column-collapsed-border-expected.png index e1a095be..31b4290 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-column-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-column-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-column-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-column-expected.png index 06529a3..9e01b86 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-column-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-column-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-column-group-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-column-group-collapsed-border-expected.png index 141eade..ef19b10 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-column-group-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-column-group-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-column-group-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-column-group-expected.png index d8b443d..d55e5bca 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-column-group-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-column-group-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-expected.png index d14d6e3..7d96a35 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-quirks-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-quirks-collapsed-border-expected.png index 3d60042..f2a74354 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-quirks-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-quirks-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-quirks-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-quirks-expected.png index c718c94..74a0f8b 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-quirks-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-quirks-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-row-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-row-collapsed-border-expected.png index 19ded3c0..cd009c4 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-row-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-row-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-row-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-row-expected.png index 7829973..21f2b44 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-row-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-row-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-row-group-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-row-group-collapsed-border-expected.png index e033cc7..49d7df7 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-row-group-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-row-group-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-row-group-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-row-group-expected.png index e1e2ed12..5ddfb38 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-row-group-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-row-group-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_layers-hide-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_layers-hide-collapsed-border-expected.png index f8e3e66..64f9e69 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_layers-hide-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_layers-hide-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_layers-hide-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_layers-hide-expected.png index 58d602f..89ba642b 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_layers-hide-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_layers-hide-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_position-table-cell-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_position-table-cell-collapsed-border-expected.png index d0a7ff8..0f799847 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_position-table-cell-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_position-table-cell-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_position-table-cell-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_position-table-cell-expected.png index f1734bf..372d8620 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_position-table-cell-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_position-table-cell-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_position-table-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_position-table-collapsed-border-expected.png index 2773d60..053b245 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_position-table-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_position-table-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_position-table-column-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_position-table-column-collapsed-border-expected.png index d84633ed..e57f5c5 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_position-table-column-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_position-table-column-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_position-table-column-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_position-table-column-expected.png index 07d0325..ba464a3 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_position-table-column-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_position-table-column-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_position-table-column-group-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_position-table-column-group-collapsed-border-expected.png index 7f28e8c5..5694ae1 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_position-table-column-group-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_position-table-column-group-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_position-table-column-group-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_position-table-column-group-expected.png index 238981b..9346be1 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_position-table-column-group-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_position-table-column-group-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_position-table-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_position-table-expected.png index 7ed87557..c5f2b04 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_position-table-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_position-table-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_position-table-row-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_position-table-row-collapsed-border-expected.png index a4a5284..a9da570 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_position-table-row-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_position-table-row-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_position-table-row-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_position-table-row-expected.png index 9d9e997..8e4ce79b 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_position-table-row-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_position-table-row-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_position-table-row-group-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_position-table-row-group-collapsed-border-expected.png index 02c843dd..4a719fcf 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_position-table-row-group-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_position-table-row-group-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_position-table-row-group-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_position-table-row-group-expected.png index 4d79fbb6..33276c0 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_position-table-row-group-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_position-table-row-group-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_simple-table-cell-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_simple-table-cell-collapsed-border-expected.png index dc81c7d..88f1fae 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_simple-table-cell-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_simple-table-cell-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_simple-table-cell-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_simple-table-cell-expected.png index f1853d4..b4afcc6 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_simple-table-cell-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_simple-table-cell-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_simple-table-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_simple-table-collapsed-border-expected.png index 9612833..56a775f 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_simple-table-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_simple-table-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_simple-table-column-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_simple-table-column-collapsed-border-expected.png index 61cb042..37ff3c4f 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_simple-table-column-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_simple-table-column-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_simple-table-column-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_simple-table-column-expected.png index 3f148be5..d6da6f2 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_simple-table-column-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_simple-table-column-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_simple-table-column-group-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_simple-table-column-group-collapsed-border-expected.png index 5aa0b32..f7434e0 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_simple-table-column-group-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_simple-table-column-group-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_simple-table-column-group-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_simple-table-column-group-expected.png index 48af205..089c050 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_simple-table-column-group-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_simple-table-column-group-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_simple-table-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_simple-table-expected.png index 55c0f60..e72d9cc 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_simple-table-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_simple-table-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_simple-table-row-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_simple-table-row-collapsed-border-expected.png index e3861d2..e48323a6 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_simple-table-row-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_simple-table-row-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_simple-table-row-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_simple-table-row-expected.png index c3f2944e..910fd72 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_simple-table-row-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_simple-table-row-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_simple-table-row-group-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_simple-table-row-group-collapsed-border-expected.png index 91a6222..a863ac9 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_simple-table-row-group-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_simple-table-row-group-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_simple-table-row-group-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_simple-table-row-group-expected.png index 04be757f..362a960 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_simple-table-row-group-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_simple-table-row-group-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text-autosizing/tables/css-table-lots-of-text-many-cells-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text-autosizing/tables/css-table-lots-of-text-many-cells-expected.png index ff5b9a51..c6f22688 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text-autosizing/tables/css-table-lots-of-text-many-cells-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text-autosizing/tables/css-table-lots-of-text-many-cells-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text-autosizing/tables/css-table-single-cell-lots-of-text-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text-autosizing/tables/css-table-single-cell-lots-of-text-expected.png index dbf5e65..e5be9c9 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text-autosizing/tables/css-table-single-cell-lots-of-text-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text-autosizing/tables/css-table-single-cell-lots-of-text-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text-autosizing/tables/fixed-table-lots-of-text-many-cells-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text-autosizing/tables/fixed-table-lots-of-text-many-cells-expected.png index 23a0d73..70917049 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text-autosizing/tables/fixed-table-lots-of-text-many-cells-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text-autosizing/tables/fixed-table-lots-of-text-many-cells-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text-autosizing/tables/fixed-table-single-cell-lots-of-text-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text-autosizing/tables/fixed-table-single-cell-lots-of-text-expected.png index 4c57321c..ef70e8e 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text-autosizing/tables/fixed-table-single-cell-lots-of-text-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text-autosizing/tables/fixed-table-single-cell-lots-of-text-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text-autosizing/tables/lots-of-text-many-cells-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text-autosizing/tables/lots-of-text-many-cells-expected.png index 670e4036..39690a6 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text-autosizing/tables/lots-of-text-many-cells-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text-autosizing/tables/lots-of-text-many-cells-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text-autosizing/tables/narrow-percentage-width-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text-autosizing/tables/narrow-percentage-width-expected.png index 2e57a40..ed5a29a 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text-autosizing/tables/narrow-percentage-width-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text-autosizing/tables/narrow-percentage-width-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text-autosizing/tables/narrow-specified-width-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text-autosizing/tables/narrow-specified-width-expected.png index 392e4254..3fa3047c 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text-autosizing/tables/narrow-specified-width-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text-autosizing/tables/narrow-specified-width-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text-autosizing/tables/nested-table-wrapping-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text-autosizing/tables/nested-table-wrapping-expected.png index bb361e8..6d52e2d 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text-autosizing/tables/nested-table-wrapping-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text-autosizing/tables/nested-table-wrapping-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text-autosizing/tables/nested-tables-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text-autosizing/tables/nested-tables-expected.png index 20e9f3f..3b3e969 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text-autosizing/tables/nested-tables-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text-autosizing/tables/nested-tables-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text-autosizing/tables/single-cell-lots-of-text-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text-autosizing/tables/single-cell-lots-of-text-expected.png index 208f76d..8f21799 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text-autosizing/tables/single-cell-lots-of-text-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text-autosizing/tables/single-cell-lots-of-text-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text-autosizing/tables/single-percent-width-cell-lots-of-text-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text-autosizing/tables/single-percent-width-cell-lots-of-text-expected.png index c77743e3..7db573c 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text-autosizing/tables/single-percent-width-cell-lots-of-text-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text-autosizing/tables/single-percent-width-cell-lots-of-text-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text-autosizing/tables/table-cell-inflation-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text-autosizing/tables/table-cell-inflation-expected.png index 5a9712e..0ecb7d8b 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text-autosizing/tables/table-cell-inflation-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text-autosizing/tables/table-cell-inflation-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text-autosizing/tables/table-for-layout-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text-autosizing/tables/table-for-layout-expected.png index 6852056..816f00d 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text-autosizing/tables/table-for-layout-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text-autosizing/tables/table-for-layout-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text-autosizing/tables/table-with-inline-block-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text-autosizing/tables/table-with-inline-block-expected.png index 633fd9e..53210ac 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text-autosizing/tables/table-with-inline-block-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text-autosizing/tables/table-with-inline-block-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text-autosizing/tables/wide-percentage-width-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text-autosizing/tables/wide-percentage-width-expected.png index 3bd6629..6e62bc1 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text-autosizing/tables/wide-percentage-width-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text-autosizing/tables/wide-percentage-width-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text-autosizing/tables/wide-specified-width-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text-autosizing/tables/wide-specified-width-expected.png index ba07b37..1af6567f 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text-autosizing/tables/wide-specified-width-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text-autosizing/tables/wide-specified-width-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/text-stroke-with-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/text-stroke-with-border-expected.png index 01eb92a..c5a7b3f 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/text-stroke-with-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/text/text-stroke-with-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/plugins/embed-attributes-style-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/plugins/embed-attributes-style-expected.png index a0a7b73b..05af893 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/plugins/embed-attributes-style-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/plugins/embed-attributes-style-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/tables/mozilla/bugs/bug22019-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/tables/mozilla/bugs/bug22019-expected.png index 960859c..7eadfe9 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/tables/mozilla/bugs/bug22019-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/tables/mozilla/bugs/bug22019-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/tables/mozilla/collapsing_borders/bug41262-3-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/tables/mozilla/collapsing_borders/bug41262-3-expected.png index eb04667..c95239a 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/tables/mozilla/collapsing_borders/bug41262-3-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/tables/mozilla/collapsing_borders/bug41262-3-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/tables/mozilla_expected_failures/bugs/bug2479-5-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/tables/mozilla_expected_failures/bugs/bug2479-5-expected.png index f727406a..94199d94 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/tables/mozilla_expected_failures/bugs/bug2479-5-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/tables/mozilla_expected_failures/bugs/bug2479-5-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/tables/mozilla_expected_failures/marvin/backgr_fixed-bg-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/tables/mozilla_expected_failures/marvin/backgr_fixed-bg-expected.png index 5cd1fe5c..1f5aaad 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/tables/mozilla_expected_failures/marvin/backgr_fixed-bg-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/tables/mozilla_expected_failures/marvin/backgr_fixed-bg-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/mojo-loading/css1/box_properties/border_style-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/mojo-loading/css1/box_properties/border_style-expected.png index 0d2bf63..f4a848c 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/mojo-loading/css1/box_properties/border_style-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/mojo-loading/css1/box_properties/border_style-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/mojo-loading/css1/box_properties/border_style_inline-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/mojo-loading/css1/box_properties/border_style_inline-expected.png new file mode 100644 index 0000000..7f11984f --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/mojo-loading/css1/box_properties/border_style_inline-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/compositing/overflow/border-radius-styles-with-composited-child-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/compositing/overflow/border-radius-styles-with-composited-child-expected.png index 6b0048e7..5cf728d 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/compositing/overflow/border-radius-styles-with-composited-child-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/compositing/overflow/border-radius-styles-with-composited-child-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/borders/borderRadiusAllStylesAllCorners-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/borders/borderRadiusAllStylesAllCorners-expected.png index 47cc36630..add80dc 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/borders/borderRadiusAllStylesAllCorners-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/borders/borderRadiusAllStylesAllCorners-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/borders/borderRadiusDashed01-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/borders/borderRadiusDashed01-expected.png index 2c73f27..d0e1c1dd 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/borders/borderRadiusDashed01-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/borders/borderRadiusDashed01-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/borders/borderRadiusDashed02-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/borders/borderRadiusDashed02-expected.png index be19b46..197931b 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/borders/borderRadiusDashed02-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/borders/borderRadiusDashed02-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/borders/borderRadiusDashed03-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/borders/borderRadiusDashed03-expected.png index eb3667dc..93ad8819 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/borders/borderRadiusDashed03-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/borders/borderRadiusDashed03-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/borders/borderRadiusDashed04-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/borders/borderRadiusDashed04-expected.png index 50f367a5..6801ab8 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/borders/borderRadiusDashed04-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/borders/borderRadiusDashed04-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/borders/borderRadiusDashed05-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/borders/borderRadiusDashed05-expected.png index e221d7f..eb136ed4 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/borders/borderRadiusDashed05-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/borders/borderRadiusDashed05-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/borders/borderRadiusDashed06-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/borders/borderRadiusDashed06-expected.png index 06e8f66..a33965f 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/borders/borderRadiusDashed06-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/borders/borderRadiusDashed06-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/box-shadow/inset-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/box-shadow/inset-expected.png index 1cdaf38..f8ff6cb 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/box-shadow/inset-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/box-shadow/inset-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/box-shadow/inset-subpixel-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/box-shadow/inset-subpixel-expected.png index fe88253..e127032 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/box-shadow/inset-subpixel-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/box-shadow/inset-subpixel-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/css-generated-content/012-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/css-generated-content/012-expected.png new file mode 100644 index 0000000..aa0bb9a --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/css-generated-content/012-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/css/margin-top-bottom-dynamic-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/css/margin-top-bottom-dynamic-expected.png new file mode 100644 index 0000000..1b508187 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/css/margin-top-bottom-dynamic-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/forms/control-clip-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/forms/control-clip-expected.png index 054dab1..fb254e67 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/forms/control-clip-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/forms/control-clip-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/lists/ordered-list-with-no-ol-tag-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/lists/ordered-list-with-no-ol-tag-expected.png new file mode 100644 index 0000000..16a7d46 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/lists/ordered-list-with-no-ol-tag-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/spatial-navigation/snav-multiple-select-focusring-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/spatial-navigation/snav-multiple-select-focusring-expected.png index 7b8eb266..b83ec9df 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/spatial-navigation/snav-multiple-select-focusring-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/spatial-navigation/snav-multiple-select-focusring-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_border-table-cell-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_border-table-cell-collapsed-border-expected.png index 8e27e80b..350ce8c1 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_border-table-cell-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_border-table-cell-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_border-table-cell-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_border-table-cell-expected.png index 84da41a..f120164 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_border-table-cell-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_border-table-cell-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_border-table-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_border-table-collapsed-border-expected.png index 422bf14..eb774af 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_border-table-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_border-table-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_border-table-column-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_border-table-column-collapsed-border-expected.png index 5a4e756..4dfff308 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_border-table-column-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_border-table-column-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_border-table-column-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_border-table-column-expected.png index b5f60217..8a1693c 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_border-table-column-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_border-table-column-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_border-table-column-group-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_border-table-column-group-collapsed-border-expected.png index 86388d7..5a0868e 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_border-table-column-group-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_border-table-column-group-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_border-table-column-group-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_border-table-column-group-expected.png index 5502154..e8758251 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_border-table-column-group-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_border-table-column-group-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_border-table-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_border-table-expected.png index b8964e3..9506c02 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_border-table-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_border-table-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_border-table-quirks-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_border-table-quirks-collapsed-border-expected.png index 0fbe02c..f834c5d 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_border-table-quirks-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_border-table-quirks-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_border-table-quirks-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_border-table-quirks-expected.png new file mode 100644 index 0000000..7ff6e1d9 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_border-table-quirks-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_border-table-row-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_border-table-row-collapsed-border-expected.png index 00c3eee1..51d56c8 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_border-table-row-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_border-table-row-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_border-table-row-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_border-table-row-expected.png index a1fa96c..ceecf6e 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_border-table-row-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_border-table-row-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_border-table-row-group-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_border-table-row-group-collapsed-border-expected.png index 147aab57..89f904ab 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_border-table-row-group-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_border-table-row-group-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_border-table-row-group-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_border-table-row-group-expected.png index 7e66d79..c2ba2b9 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_border-table-row-group-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_border-table-row-group-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_layers-hide-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_layers-hide-collapsed-border-expected.png index bb3448e..8f188cf 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_layers-hide-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_layers-hide-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_layers-hide-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_layers-hide-expected.png index 4ae4f2d..1374151 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_layers-hide-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_layers-hide-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_position-table-cell-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_position-table-cell-collapsed-border-expected.png index 690ea6a..b9695b2 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_position-table-cell-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_position-table-cell-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_position-table-cell-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_position-table-cell-expected.png index 42f89b0..2ac4d03 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_position-table-cell-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_position-table-cell-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_position-table-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_position-table-collapsed-border-expected.png index c11901f..36f340a9 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_position-table-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_position-table-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_position-table-column-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_position-table-column-collapsed-border-expected.png index bca24c3f..44d2cf8 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_position-table-column-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_position-table-column-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_position-table-column-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_position-table-column-expected.png index 638f9eb6..90c7bde 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_position-table-column-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_position-table-column-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_position-table-column-group-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_position-table-column-group-collapsed-border-expected.png index ec58490..f5e8048 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_position-table-column-group-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_position-table-column-group-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_position-table-column-group-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_position-table-column-group-expected.png index 203adb8..d79dec3d 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_position-table-column-group-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_position-table-column-group-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_position-table-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_position-table-expected.png index 9de1fbf..0311b71 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_position-table-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_position-table-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_position-table-row-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_position-table-row-collapsed-border-expected.png index 2bcd04f0..930004a 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_position-table-row-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_position-table-row-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_position-table-row-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_position-table-row-expected.png index f56dd92..7f64acb 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_position-table-row-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_position-table-row-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_position-table-row-group-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_position-table-row-group-collapsed-border-expected.png index 7bd8065..27eee1e 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_position-table-row-group-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_position-table-row-group-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_position-table-row-group-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_position-table-row-group-expected.png index cb21cdd..71f3f8f2 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_position-table-row-group-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_position-table-row-group-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_simple-table-cell-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_simple-table-cell-collapsed-border-expected.png index 22f7368..11ebb845 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_simple-table-cell-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_simple-table-cell-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_simple-table-cell-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_simple-table-cell-expected.png index 7180a24..748a45a89 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_simple-table-cell-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_simple-table-cell-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_simple-table-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_simple-table-collapsed-border-expected.png index 24c0120..30390c3 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_simple-table-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_simple-table-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_simple-table-column-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_simple-table-column-collapsed-border-expected.png index befe2af..44e882fe7 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_simple-table-column-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_simple-table-column-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_simple-table-column-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_simple-table-column-expected.png index 6a5023d..0f42d150 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_simple-table-column-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_simple-table-column-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_simple-table-column-group-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_simple-table-column-group-collapsed-border-expected.png index c27a2c2..a994a26 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_simple-table-column-group-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_simple-table-column-group-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_simple-table-column-group-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_simple-table-column-group-expected.png index f907feff..8e1bd82 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_simple-table-column-group-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_simple-table-column-group-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_simple-table-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_simple-table-expected.png index bc57e20..a28d673 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_simple-table-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_simple-table-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_simple-table-row-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_simple-table-row-collapsed-border-expected.png index b7aa3b9d..dc83788 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_simple-table-row-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_simple-table-row-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_simple-table-row-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_simple-table-row-expected.png index c424538..afd42dd1 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_simple-table-row-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_simple-table-row-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_simple-table-row-group-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_simple-table-row-group-collapsed-border-expected.png index e94e027..9f68c3cc 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_simple-table-row-group-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_simple-table-row-group-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_simple-table-row-group-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_simple-table-row-group-expected.png index e6cc992..37df9296 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_simple-table-row-group-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/backgr_simple-table-row-group-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/ietestcenter/css3/bordersbackgrounds/border-radius-style-002-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/ietestcenter/css3/bordersbackgrounds/border-radius-style-002-expected.png index 3741297..7f63e2fd 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/ietestcenter/css3/bordersbackgrounds/border-radius-style-002-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/ietestcenter/css3/bordersbackgrounds/border-radius-style-002-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/plugins/embed-attributes-style-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/plugins/embed-attributes-style-expected.png new file mode 100644 index 0000000..a77f0af --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/plugins/embed-attributes-style-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/svg/W3C-SVG-1.1/filters-conv-01-f-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/svg/W3C-SVG-1.1/filters-conv-01-f-expected.png deleted file mode 100644 index 5f46b988..0000000 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/svg/W3C-SVG-1.1/filters-conv-01-f-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/svg/transforms/svg-css-transforms-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/svg/transforms/svg-css-transforms-expected.png index 5ac156b..5ebbdc03 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/svg/transforms/svg-css-transforms-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/svg/transforms/svg-css-transforms-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/tables/mozilla_expected_failures/bugs/bug2479-5-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/tables/mozilla_expected_failures/bugs/bug2479-5-expected.png index bd530e3..372e81c 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/tables/mozilla_expected_failures/bugs/bug2479-5-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/tables/mozilla_expected_failures/bugs/bug2479-5-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/tables/mozilla_expected_failures/marvin/backgr_fixed-bg-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/tables/mozilla_expected_failures/marvin/backgr_fixed-bg-expected.png index 8956016..8a320b3f 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/tables/mozilla_expected_failures/marvin/backgr_fixed-bg-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/tables/mozilla_expected_failures/marvin/backgr_fixed-bg-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/transforms/svg-vs-css-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/transforms/svg-vs-css-expected.png index 82d8f64..87c38ee 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/transforms/svg-vs-css-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/transforms/svg-vs-css-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/virtual/prefer_compositing_to_lcd_text/compositing/overflow/border-radius-styles-with-composited-child-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/virtual/prefer_compositing_to_lcd_text/compositing/overflow/border-radius-styles-with-composited-child-expected.png index 6b0048e7..5cf728d 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/virtual/prefer_compositing_to_lcd_text/compositing/overflow/border-radius-styles-with-composited-child-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/virtual/prefer_compositing_to_lcd_text/compositing/overflow/border-radius-styles-with-composited-child-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/css1/box_properties/border_style-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/css1/box_properties/border_style-expected.png index 704158d..fd046da 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/css1/box_properties/border_style-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/css1/box_properties/border_style-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/css/border-height-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/css/border-height-expected.png index 56a9f86..f4ac9558 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/css/border-height-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/css/border-height-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/css/margin-top-bottom-dynamic-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/css/margin-top-bottom-dynamic-expected.png index 0e89aac0..c664400 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/css/margin-top-bottom-dynamic-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/css/margin-top-bottom-dynamic-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-expected.png index cef8905..5c45478 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/forms/control-clip-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/forms/control-clip-expected.png index 20e2264..d4ccb01 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/forms/control-clip-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/forms/control-clip-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/forms/textarea/textAreaLineHeight-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/forms/textarea/textAreaLineHeight-expected.png index 8152d42..afd8e06 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/forms/textarea/textAreaLineHeight-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/forms/textarea/textAreaLineHeight-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/spatial-navigation/snav-multiple-select-focusring-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/spatial-navigation/snav-multiple-select-focusring-expected.png index facaf7e..740bec1 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/spatial-navigation/snav-multiple-select-focusring-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/spatial-navigation/snav-multiple-select-focusring-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_border-table-cell-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_border-table-cell-collapsed-border-expected.png index 75d30e012..89d4937 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_border-table-cell-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_border-table-cell-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_border-table-cell-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_border-table-cell-expected.png index e0c0323..2a09863f 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_border-table-cell-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_border-table-cell-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_border-table-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_border-table-collapsed-border-expected.png new file mode 100644 index 0000000..afb73ba --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_border-table-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_border-table-column-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_border-table-column-collapsed-border-expected.png index 89f10ebd..6b0a834b 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_border-table-column-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_border-table-column-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_border-table-column-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_border-table-column-expected.png index 6dfd8345..935176e 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_border-table-column-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_border-table-column-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_border-table-column-group-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_border-table-column-group-collapsed-border-expected.png index 8dc1d506..9e942a7 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_border-table-column-group-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_border-table-column-group-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_border-table-column-group-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_border-table-column-group-expected.png index 7e48969..15c85d1 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_border-table-column-group-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_border-table-column-group-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_border-table-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_border-table-expected.png index d656feac..7989f4e 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_border-table-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_border-table-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_border-table-row-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_border-table-row-collapsed-border-expected.png index 87968a860..17ef3b0 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_border-table-row-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_border-table-row-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_border-table-row-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_border-table-row-expected.png index 4d8259b1..d5f2bdf 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_border-table-row-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_border-table-row-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_border-table-row-group-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_border-table-row-group-collapsed-border-expected.png index 9be923e..ab6b088 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_border-table-row-group-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_border-table-row-group-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_border-table-row-group-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_border-table-row-group-expected.png index e05d6619..a31ded37 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_border-table-row-group-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_border-table-row-group-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_layers-hide-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_layers-hide-expected.png index 4aa0917..4668be7 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_layers-hide-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_layers-hide-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_position-table-cell-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_position-table-cell-collapsed-border-expected.png index a518bbc..f5c1554e 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_position-table-cell-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_position-table-cell-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_position-table-cell-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_position-table-cell-expected.png index 64df69c36..f9c78590 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_position-table-cell-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_position-table-cell-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_position-table-column-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_position-table-column-collapsed-border-expected.png index 649e7a7..8b17405 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_position-table-column-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_position-table-column-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_position-table-column-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_position-table-column-expected.png index 01cc47e9..59e832c 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_position-table-column-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_position-table-column-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_position-table-column-group-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_position-table-column-group-collapsed-border-expected.png index 1e42a51..1a629f9 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_position-table-column-group-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_position-table-column-group-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_position-table-column-group-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_position-table-column-group-expected.png index bc296cf1..d0aa5c19 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_position-table-column-group-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_position-table-column-group-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_position-table-row-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_position-table-row-collapsed-border-expected.png index f59628a..f30732a 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_position-table-row-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_position-table-row-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_position-table-row-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_position-table-row-expected.png index 79ca1f3b2..d985ee8 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_position-table-row-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_position-table-row-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_position-table-row-group-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_position-table-row-group-collapsed-border-expected.png index f7f504c..0c52caa6 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_position-table-row-group-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_position-table-row-group-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_position-table-row-group-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_position-table-row-group-expected.png index ff3dd4a..d11a4bb5 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_position-table-row-group-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_position-table-row-group-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_simple-table-cell-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_simple-table-cell-collapsed-border-expected.png index 7918b23..34acf52f 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_simple-table-cell-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_simple-table-cell-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_simple-table-cell-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_simple-table-cell-expected.png index 90f2118..4de5c23 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_simple-table-cell-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_simple-table-cell-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_simple-table-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_simple-table-collapsed-border-expected.png index 2b37bb7..98abc7b 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_simple-table-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_simple-table-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_simple-table-column-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_simple-table-column-collapsed-border-expected.png index 94ec172..92084c1 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_simple-table-column-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_simple-table-column-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_simple-table-column-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_simple-table-column-expected.png index f7bc3d8..6febfe90 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_simple-table-column-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_simple-table-column-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_simple-table-column-group-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_simple-table-column-group-collapsed-border-expected.png index 96679a3e..ec39a7b 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_simple-table-column-group-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_simple-table-column-group-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_simple-table-column-group-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_simple-table-column-group-expected.png index ad2dc7d7..41833f2f 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_simple-table-column-group-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_simple-table-column-group-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_simple-table-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_simple-table-expected.png index 62973a5..f7c5b4d 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_simple-table-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_simple-table-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_simple-table-row-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_simple-table-row-collapsed-border-expected.png index 43e5676a..26d6559 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_simple-table-row-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_simple-table-row-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_simple-table-row-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_simple-table-row-expected.png index d5376af2f..53b2c98 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_simple-table-row-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_simple-table-row-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_simple-table-row-group-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_simple-table-row-group-collapsed-border-expected.png index 43fbcd3b..f47391cf 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_simple-table-row-group-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_simple-table-row-group-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_simple-table-row-group-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_simple-table-row-group-expected.png index 5a47d71..17ef097 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_simple-table-row-group-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_simple-table-row-group-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text-autosizing/tables/css-table-lots-of-text-many-cells-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text-autosizing/tables/css-table-lots-of-text-many-cells-expected.png index fa7e09e..37c47a9 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text-autosizing/tables/css-table-lots-of-text-many-cells-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text-autosizing/tables/css-table-lots-of-text-many-cells-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text-autosizing/tables/css-table-single-cell-lots-of-text-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text-autosizing/tables/css-table-single-cell-lots-of-text-expected.png index 65063ea..54bffab 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text-autosizing/tables/css-table-single-cell-lots-of-text-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text-autosizing/tables/css-table-single-cell-lots-of-text-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text-autosizing/tables/fixed-table-lots-of-text-many-cells-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text-autosizing/tables/fixed-table-lots-of-text-many-cells-expected.png index da69cab4..a1cd87b 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text-autosizing/tables/fixed-table-lots-of-text-many-cells-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text-autosizing/tables/fixed-table-lots-of-text-many-cells-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text-autosizing/tables/fixed-table-single-cell-lots-of-text-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text-autosizing/tables/fixed-table-single-cell-lots-of-text-expected.png index a2055eb2..695f9a2 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text-autosizing/tables/fixed-table-single-cell-lots-of-text-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text-autosizing/tables/fixed-table-single-cell-lots-of-text-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text-autosizing/tables/lots-of-text-many-cells-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text-autosizing/tables/lots-of-text-many-cells-expected.png index 31ef617..c38bee7 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text-autosizing/tables/lots-of-text-many-cells-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text-autosizing/tables/lots-of-text-many-cells-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text-autosizing/tables/narrow-percentage-width-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text-autosizing/tables/narrow-percentage-width-expected.png index d7cd6e3..8691e83 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text-autosizing/tables/narrow-percentage-width-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text-autosizing/tables/narrow-percentage-width-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text-autosizing/tables/narrow-specified-width-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text-autosizing/tables/narrow-specified-width-expected.png index 4174c9d7..90cb28e4 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text-autosizing/tables/narrow-specified-width-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text-autosizing/tables/narrow-specified-width-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text-autosizing/tables/nested-table-wrapping-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text-autosizing/tables/nested-table-wrapping-expected.png index 8d83df6d..9ccd32e6 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text-autosizing/tables/nested-table-wrapping-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text-autosizing/tables/nested-table-wrapping-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text-autosizing/tables/nested-tables-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text-autosizing/tables/nested-tables-expected.png index 101c6c76..ae19cf4 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text-autosizing/tables/nested-tables-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text-autosizing/tables/nested-tables-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text-autosizing/tables/single-cell-lots-of-text-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text-autosizing/tables/single-cell-lots-of-text-expected.png index 2a6f6b43..6777996d 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text-autosizing/tables/single-cell-lots-of-text-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text-autosizing/tables/single-cell-lots-of-text-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text-autosizing/tables/single-percent-width-cell-lots-of-text-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text-autosizing/tables/single-percent-width-cell-lots-of-text-expected.png index e3355de..9d28784 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text-autosizing/tables/single-percent-width-cell-lots-of-text-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text-autosizing/tables/single-percent-width-cell-lots-of-text-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text-autosizing/tables/table-cell-inflation-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text-autosizing/tables/table-cell-inflation-expected.png index b289890..2bfc3dc 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text-autosizing/tables/table-cell-inflation-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text-autosizing/tables/table-cell-inflation-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text-autosizing/tables/table-for-layout-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text-autosizing/tables/table-for-layout-expected.png index 48d718e3..f1c8385 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text-autosizing/tables/table-for-layout-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text-autosizing/tables/table-for-layout-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text-autosizing/tables/table-with-inline-block-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text-autosizing/tables/table-with-inline-block-expected.png index ce6bd42..049aa44 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text-autosizing/tables/table-with-inline-block-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text-autosizing/tables/table-with-inline-block-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text-autosizing/tables/wide-percentage-width-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text-autosizing/tables/wide-percentage-width-expected.png index 8a00293c1..4256edd 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text-autosizing/tables/wide-percentage-width-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text-autosizing/tables/wide-percentage-width-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text-autosizing/tables/wide-specified-width-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text-autosizing/tables/wide-specified-width-expected.png index 8194510..bbc6b658 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text-autosizing/tables/wide-specified-width-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text-autosizing/tables/wide-specified-width-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/text-stroke-with-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/text-stroke-with-border-expected.png index f7ecc5bb3..1295431 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/text-stroke-with-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/text/text-stroke-with-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/plugins/embed-attributes-style-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/plugins/embed-attributes-style-expected.png index 3ac1267..c4732529 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/plugins/embed-attributes-style-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/plugins/embed-attributes-style-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/scrollbars/border-box-rect-clips-scrollbars-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/scrollbars/border-box-rect-clips-scrollbars-expected.png index 2c368c2d..fedb6411 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/scrollbars/border-box-rect-clips-scrollbars-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/scrollbars/border-box-rect-clips-scrollbars-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/tables/mozilla/bugs/bug22019-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/tables/mozilla/bugs/bug22019-expected.png index 41eedcd2..9ab20f8 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/tables/mozilla/bugs/bug22019-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/tables/mozilla/bugs/bug22019-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/tables/mozilla/bugs/bug2947-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/tables/mozilla/bugs/bug2947-expected.png index cac07ff3..da4bd2a 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/tables/mozilla/bugs/bug2947-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/tables/mozilla/bugs/bug2947-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/tables/mozilla_expected_failures/bugs/bug2479-5-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/tables/mozilla_expected_failures/bugs/bug2479-5-expected.png index cda2e65..a244fa29 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/tables/mozilla_expected_failures/bugs/bug2479-5-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/tables/mozilla_expected_failures/bugs/bug2479-5-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/tables/mozilla_expected_failures/marvin/backgr_fixed-bg-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/tables/mozilla_expected_failures/marvin/backgr_fixed-bg-expected.png index 33a4218..879bdd5 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/tables/mozilla_expected_failures/marvin/backgr_fixed-bg-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/tables/mozilla_expected_failures/marvin/backgr_fixed-bg-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/mojo-loading/css1/box_properties/border_style-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/mojo-loading/css1/box_properties/border_style-expected.png index 704158d..fd046da 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/mojo-loading/css1/box_properties/border_style-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/mojo-loading/css1/box_properties/border_style-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/prefer_compositing_to_lcd_text/scrollbars/border-box-rect-clips-scrollbars-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/prefer_compositing_to_lcd_text/scrollbars/border-box-rect-clips-scrollbars-expected.png index ef12d9f2..942a7e3 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/prefer_compositing_to_lcd_text/scrollbars/border-box-rect-clips-scrollbars-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/prefer_compositing_to_lcd_text/scrollbars/border-box-rect-clips-scrollbars-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/rootlayerscrolls/scrollbars/border-box-rect-clips-scrollbars-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/rootlayerscrolls/scrollbars/border-box-rect-clips-scrollbars-expected.png index 2c368c2d..fedb6411 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/rootlayerscrolls/scrollbars/border-box-rect-clips-scrollbars-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/rootlayerscrolls/scrollbars/border-box-rect-clips-scrollbars-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/compositing/overflow/border-radius-styles-with-composited-child-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/compositing/overflow/border-radius-styles-with-composited-child-expected.png index 6b0048e7..5cf728d 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-retina/compositing/overflow/border-radius-styles-with-composited-child-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/compositing/overflow/border-radius-styles-with-composited-child-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/borders/borderRadiusAllStylesAllCorners-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/borders/borderRadiusAllStylesAllCorners-expected.png index 47cc36630..add80dc 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/borders/borderRadiusAllStylesAllCorners-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/borders/borderRadiusAllStylesAllCorners-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/borders/borderRadiusDashed01-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/borders/borderRadiusDashed01-expected.png index 2c73f27..d0e1c1dd 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/borders/borderRadiusDashed01-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/borders/borderRadiusDashed01-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/borders/borderRadiusDashed02-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/borders/borderRadiusDashed02-expected.png index be19b46..197931b 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/borders/borderRadiusDashed02-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/borders/borderRadiusDashed02-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/borders/borderRadiusDashed03-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/borders/borderRadiusDashed03-expected.png index eb3667dc..93ad8819 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/borders/borderRadiusDashed03-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/borders/borderRadiusDashed03-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/borders/borderRadiusDashed04-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/borders/borderRadiusDashed04-expected.png index 50f367a5..6801ab8 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/borders/borderRadiusDashed04-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/borders/borderRadiusDashed04-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/borders/borderRadiusDashed05-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/borders/borderRadiusDashed05-expected.png index e221d7f..eb136ed4 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/borders/borderRadiusDashed05-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/borders/borderRadiusDashed05-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/borders/borderRadiusDashed06-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/borders/borderRadiusDashed06-expected.png index 06e8f66..a33965f 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/borders/borderRadiusDashed06-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/borders/borderRadiusDashed06-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/box-shadow/inset-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/box-shadow/inset-expected.png index 1cdaf38..f8ff6cb 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/box-shadow/inset-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/box-shadow/inset-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/box-shadow/inset-subpixel-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/box-shadow/inset-subpixel-expected.png index fe88253..e127032 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/box-shadow/inset-subpixel-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/box-shadow/inset-subpixel-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/css-generated-content/012-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/css-generated-content/012-expected.png new file mode 100644 index 0000000..aa0bb9a --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/css-generated-content/012-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/css/margin-top-bottom-dynamic-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/css/margin-top-bottom-dynamic-expected.png new file mode 100644 index 0000000..1b508187 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/css/margin-top-bottom-dynamic-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/forms/control-clip-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/forms/control-clip-expected.png index 054dab1..fb254e67 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/forms/control-clip-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/forms/control-clip-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/lists/ordered-list-with-no-ol-tag-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/lists/ordered-list-with-no-ol-tag-expected.png new file mode 100644 index 0000000..16a7d46 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/lists/ordered-list-with-no-ol-tag-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/spatial-navigation/snav-multiple-select-focusring-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/spatial-navigation/snav-multiple-select-focusring-expected.png index 7b8eb266..b83ec9df 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/spatial-navigation/snav-multiple-select-focusring-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/spatial-navigation/snav-multiple-select-focusring-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_border-table-cell-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_border-table-cell-collapsed-border-expected.png index 8e27e80b..350ce8c1 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_border-table-cell-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_border-table-cell-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_border-table-cell-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_border-table-cell-expected.png index 84da41a..f120164 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_border-table-cell-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_border-table-cell-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_border-table-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_border-table-collapsed-border-expected.png index 422bf14..eb774af 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_border-table-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_border-table-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_border-table-column-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_border-table-column-collapsed-border-expected.png index 5a4e756..4dfff308 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_border-table-column-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_border-table-column-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_border-table-column-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_border-table-column-expected.png index b5f60217..8a1693c 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_border-table-column-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_border-table-column-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_border-table-column-group-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_border-table-column-group-collapsed-border-expected.png index 86388d7..5a0868e 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_border-table-column-group-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_border-table-column-group-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_border-table-column-group-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_border-table-column-group-expected.png index 5502154..e8758251 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_border-table-column-group-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_border-table-column-group-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_border-table-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_border-table-expected.png index b8964e3..9506c02 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_border-table-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_border-table-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_border-table-quirks-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_border-table-quirks-collapsed-border-expected.png index 0fbe02c..f834c5d 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_border-table-quirks-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_border-table-quirks-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_border-table-quirks-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_border-table-quirks-expected.png new file mode 100644 index 0000000..7ff6e1d9 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_border-table-quirks-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_border-table-row-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_border-table-row-collapsed-border-expected.png index 00c3eee1..51d56c8 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_border-table-row-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_border-table-row-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_border-table-row-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_border-table-row-expected.png index a1fa96c..ceecf6e 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_border-table-row-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_border-table-row-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_border-table-row-group-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_border-table-row-group-collapsed-border-expected.png index 147aab57..89f904ab 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_border-table-row-group-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_border-table-row-group-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_border-table-row-group-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_border-table-row-group-expected.png index 7e66d79..c2ba2b9 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_border-table-row-group-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_border-table-row-group-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_layers-hide-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_layers-hide-collapsed-border-expected.png index bb3448e..8f188cf 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_layers-hide-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_layers-hide-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_layers-hide-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_layers-hide-expected.png index 4ae4f2d..1374151 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_layers-hide-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_layers-hide-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_position-table-cell-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_position-table-cell-collapsed-border-expected.png index 690ea6a..b9695b2 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_position-table-cell-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_position-table-cell-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_position-table-cell-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_position-table-cell-expected.png index 42f89b0..2ac4d03 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_position-table-cell-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_position-table-cell-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_position-table-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_position-table-collapsed-border-expected.png index c11901f..36f340a9 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_position-table-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_position-table-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_position-table-column-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_position-table-column-collapsed-border-expected.png index bca24c3f..44d2cf8 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_position-table-column-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_position-table-column-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_position-table-column-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_position-table-column-expected.png index 638f9eb6..90c7bde 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_position-table-column-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_position-table-column-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_position-table-column-group-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_position-table-column-group-collapsed-border-expected.png index ec58490..f5e8048 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_position-table-column-group-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_position-table-column-group-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_position-table-column-group-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_position-table-column-group-expected.png index 203adb8..d79dec3d 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_position-table-column-group-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_position-table-column-group-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_position-table-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_position-table-expected.png index 9de1fbf..0311b71 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_position-table-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_position-table-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_position-table-row-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_position-table-row-collapsed-border-expected.png index 2bcd04f0..930004a 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_position-table-row-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_position-table-row-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_position-table-row-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_position-table-row-expected.png index f56dd92..7f64acb 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_position-table-row-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_position-table-row-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_position-table-row-group-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_position-table-row-group-collapsed-border-expected.png index 7bd8065..27eee1e 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_position-table-row-group-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_position-table-row-group-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_position-table-row-group-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_position-table-row-group-expected.png index cb21cdd..71f3f8f2 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_position-table-row-group-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_position-table-row-group-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_simple-table-cell-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_simple-table-cell-collapsed-border-expected.png index 22f7368..11ebb845 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_simple-table-cell-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_simple-table-cell-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_simple-table-cell-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_simple-table-cell-expected.png index 7180a24..748a45a89 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_simple-table-cell-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_simple-table-cell-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_simple-table-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_simple-table-collapsed-border-expected.png index 24c0120..30390c3 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_simple-table-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_simple-table-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_simple-table-column-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_simple-table-column-collapsed-border-expected.png index befe2af..44e882fe7 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_simple-table-column-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_simple-table-column-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_simple-table-column-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_simple-table-column-expected.png index 6a5023d..0f42d150 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_simple-table-column-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_simple-table-column-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_simple-table-column-group-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_simple-table-column-group-collapsed-border-expected.png index c27a2c2..a994a26 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_simple-table-column-group-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_simple-table-column-group-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_simple-table-column-group-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_simple-table-column-group-expected.png index f907feff..8e1bd82 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_simple-table-column-group-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_simple-table-column-group-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_simple-table-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_simple-table-expected.png index bc57e20..a28d673 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_simple-table-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_simple-table-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_simple-table-row-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_simple-table-row-collapsed-border-expected.png index b7aa3b9d..dc83788 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_simple-table-row-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_simple-table-row-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_simple-table-row-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_simple-table-row-expected.png index c424538..afd42dd1 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_simple-table-row-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_simple-table-row-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_simple-table-row-group-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_simple-table-row-group-collapsed-border-expected.png index e94e027..9f68c3cc 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_simple-table-row-group-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_simple-table-row-group-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_simple-table-row-group-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_simple-table-row-group-expected.png index e6cc992..37df9296 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_simple-table-row-group-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/backgr_simple-table-row-group-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/ietestcenter/css3/bordersbackgrounds/border-radius-style-002-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/ietestcenter/css3/bordersbackgrounds/border-radius-style-002-expected.png index 3741297..7f63e2fd 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-retina/ietestcenter/css3/bordersbackgrounds/border-radius-style-002-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/ietestcenter/css3/bordersbackgrounds/border-radius-style-002-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/plugins/embed-attributes-style-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/plugins/embed-attributes-style-expected.png new file mode 100644 index 0000000..a77f0af --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/plugins/embed-attributes-style-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/svg/W3C-SVG-1.1/filters-conv-01-f-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/svg/W3C-SVG-1.1/filters-conv-01-f-expected.png deleted file mode 100644 index 5f46b988..0000000 --- a/third_party/WebKit/LayoutTests/platform/mac-retina/svg/W3C-SVG-1.1/filters-conv-01-f-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/svg/transforms/svg-css-transforms-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/svg/transforms/svg-css-transforms-expected.png index 5ac156b..5ebbdc03 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-retina/svg/transforms/svg-css-transforms-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/svg/transforms/svg-css-transforms-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/tables/mozilla_expected_failures/bugs/bug2479-5-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/tables/mozilla_expected_failures/bugs/bug2479-5-expected.png index bd530e3..372e81c 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-retina/tables/mozilla_expected_failures/bugs/bug2479-5-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/tables/mozilla_expected_failures/bugs/bug2479-5-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/tables/mozilla_expected_failures/marvin/backgr_fixed-bg-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/tables/mozilla_expected_failures/marvin/backgr_fixed-bg-expected.png index 8956016..8a320b3f 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-retina/tables/mozilla_expected_failures/marvin/backgr_fixed-bg-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/tables/mozilla_expected_failures/marvin/backgr_fixed-bg-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/transforms/svg-vs-css-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/transforms/svg-vs-css-expected.png index 82d8f64..87c38ee 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-retina/transforms/svg-vs-css-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/transforms/svg-vs-css-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/virtual/prefer_compositing_to_lcd_text/compositing/overflow/border-radius-styles-with-composited-child-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/virtual/prefer_compositing_to_lcd_text/compositing/overflow/border-radius-styles-with-composited-child-expected.png index 6b0048e7..5cf728d 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-retina/virtual/prefer_compositing_to_lcd_text/compositing/overflow/border-radius-styles-with-composited-child-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/virtual/prefer_compositing_to_lcd_text/compositing/overflow/border-radius-styles-with-composited-child-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/compositing/scrollbars/custom-composited-different-track-parts-expected.png b/third_party/WebKit/LayoutTests/platform/mac/compositing/scrollbars/custom-composited-different-track-parts-expected.png deleted file mode 100644 index 3e35cf5..0000000 --- a/third_party/WebKit/LayoutTests/platform/mac/compositing/scrollbars/custom-composited-different-track-parts-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/css1/box_properties/border_style-expected.png b/third_party/WebKit/LayoutTests/platform/mac/css1/box_properties/border_style-expected.png index ade8054..85a2a03 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/css1/box_properties/border_style-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/css1/box_properties/border_style-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/css1/box_properties/border_style_inline-expected.png b/third_party/WebKit/LayoutTests/platform/mac/css1/box_properties/border_style_inline-expected.png index 46e72554..a01b903 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/css1/box_properties/border_style_inline-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/css1/box_properties/border_style_inline-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/css2.1/20110323/replaced-intrinsic-ratio-001-expected.png b/third_party/WebKit/LayoutTests/platform/mac/css2.1/20110323/replaced-intrinsic-ratio-001-expected.png index ee24d22..c0e8c056 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/css2.1/20110323/replaced-intrinsic-ratio-001-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/css2.1/20110323/replaced-intrinsic-ratio-001-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/css2.1/t0805-c5517-brdr-s-00-c-expected.png b/third_party/WebKit/LayoutTests/platform/mac/css2.1/t0805-c5517-brdr-s-00-c-expected.png index 68d490b..c2d96d4 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/css2.1/t0805-c5517-brdr-s-00-c-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/css2.1/t0805-c5517-brdr-s-00-c-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/css2.1/t0805-c5517-ibrdr-s-00-a-expected.png b/third_party/WebKit/LayoutTests/platform/mac/css2.1/t0805-c5517-ibrdr-s-00-a-expected.png index 05b61e4..48d9c34 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/css2.1/t0805-c5517-ibrdr-s-00-a-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/css2.1/t0805-c5517-ibrdr-s-00-a-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-03-d-expected.png b/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-03-d-expected.png index 2ad568e..85d91d34 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-03-d-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-03-d-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-13-d-expected.png b/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-13-d-expected.png index 5b78989..746d2431 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-13-d-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-13-d-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-23-d-expected.png b/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-23-d-expected.png index ab2e41241..274d8f7 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-23-d-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-23-d-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-31-d-expected.png b/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-31-d-expected.png index 4fad597..7ff02ba6 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-31-d-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-31-d-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-32-d-expected.png b/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-32-d-expected.png index 8d6e816..f30060e 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-32-d-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-32-d-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-33-d-expected.png b/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-33-d-expected.png index 3cc069d80..1102d50 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-33-d-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-33-d-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-34-d-expected.png b/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-34-d-expected.png index 609bb48..a148ba14 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-34-d-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-34-d-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-35-d-expected.png b/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-35-d-expected.png index cec24000..776d843 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-35-d-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-35-d-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-36-d-expected.png b/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-36-d-expected.png index 598eefc..ff7b25c 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-36-d-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-36-d-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-37-d-expected.png b/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-37-d-expected.png index 4a05289f..9805e2aa 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-37-d-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-37-d-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-38-d-expected.png b/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-38-d-expected.png index ab9577cc..0f60601 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-38-d-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-38-d-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-39-d-expected.png b/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-39-d-expected.png index a63bde4..c003a63 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-39-d-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-39-d-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-43-d-expected.png b/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-43-d-expected.png index 21c1b3e2..ab1df20 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-43-d-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-43-d-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-53-d-expected.png b/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-53-d-expected.png index 891f87b..ede6d7a 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-53-d-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-53-d-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-63-d-expected.png b/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-63-d-expected.png index 7157069d..9f3696eb 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-63-d-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-63-d-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-73-d-expected.png b/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-73-d-expected.png index 2b2e3d0..53b47d7 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-73-d-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-73-d-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-83-d-expected.png b/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-83-d-expected.png index e1cba35..e95f9f9f 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-83-d-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-83-d-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-93-d-expected.png b/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-93-d-expected.png index 3b99795..1e35f6b 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-93-d-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-93-d-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/editing/execCommand/5138441-expected.png b/third_party/WebKit/LayoutTests/platform/mac/editing/execCommand/5138441-expected.png index b239e8b8..1a63cc4b 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/editing/execCommand/5138441-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/editing/execCommand/5138441-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/backgrounds/repeat/mask-negative-offset-repeat-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/backgrounds/repeat/mask-negative-offset-repeat-expected.png index fc2d315..cafcaa6 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/backgrounds/repeat/mask-negative-offset-repeat-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/backgrounds/repeat/mask-negative-offset-repeat-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/backgrounds/repeat/negative-offset-repeat-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/backgrounds/repeat/negative-offset-repeat-expected.png index e7bc8b2..cdefb82 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/backgrounds/repeat/negative-offset-repeat-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/backgrounds/repeat/negative-offset-repeat-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/backgrounds/repeat/negative-offset-repeat-transformed-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/backgrounds/repeat/negative-offset-repeat-transformed-expected.png index 4ffb869..b8849642 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/backgrounds/repeat/negative-offset-repeat-transformed-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/backgrounds/repeat/negative-offset-repeat-transformed-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/block/positioning/absolute-in-inline-ltr-2-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/block/positioning/absolute-in-inline-ltr-2-expected.png index 09d57fb..c5e8934 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/block/positioning/absolute-in-inline-ltr-2-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/block/positioning/absolute-in-inline-ltr-2-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/block/positioning/absolute-in-inline-ltr-3-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/block/positioning/absolute-in-inline-ltr-3-expected.png index 8f1448d..1a49354 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/block/positioning/absolute-in-inline-ltr-3-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/block/positioning/absolute-in-inline-ltr-3-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/block/positioning/absolute-in-inline-ltr-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/block/positioning/absolute-in-inline-ltr-expected.png index 07a0fb1..ccd5f082 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/block/positioning/absolute-in-inline-ltr-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/block/positioning/absolute-in-inline-ltr-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/block/positioning/absolute-in-inline-rtl-2-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/block/positioning/absolute-in-inline-rtl-2-expected.png index cf321d3..751ef41 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/block/positioning/absolute-in-inline-rtl-2-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/block/positioning/absolute-in-inline-rtl-2-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/block/positioning/absolute-in-inline-rtl-3-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/block/positioning/absolute-in-inline-rtl-3-expected.png index 02ff5ac..8baa3d4 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/block/positioning/absolute-in-inline-rtl-3-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/block/positioning/absolute-in-inline-rtl-3-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/block/positioning/absolute-in-inline-rtl-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/block/positioning/absolute-in-inline-rtl-expected.png index b4a2739..3a212af5 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/block/positioning/absolute-in-inline-rtl-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/block/positioning/absolute-in-inline-rtl-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/block/positioning/absolute-in-inline-short-ltr-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/block/positioning/absolute-in-inline-short-ltr-expected.png index 4ed3618..1ec6f8e 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/block/positioning/absolute-in-inline-short-ltr-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/block/positioning/absolute-in-inline-short-ltr-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/block/positioning/absolute-in-inline-short-rtl-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/block/positioning/absolute-in-inline-short-rtl-expected.png index 711e0dd..d8caf2d 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/block/positioning/absolute-in-inline-short-rtl-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/block/positioning/absolute-in-inline-short-rtl-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/block/positioning/child-of-absolute-with-auto-height-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/block/positioning/child-of-absolute-with-auto-height-expected.png index 5b5781f..3068e13 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/block/positioning/child-of-absolute-with-auto-height-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/block/positioning/child-of-absolute-with-auto-height-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/borders/outline-alpha-block-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/borders/outline-alpha-block-expected.png index 4f45139..305de84 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/borders/outline-alpha-block-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/borders/outline-alpha-block-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/borders/outline-alpha-inline-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/borders/outline-alpha-inline-expected.png index f11037b..3d631e5f 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/borders/outline-alpha-inline-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/borders/outline-alpha-inline-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/css/background-clip-values-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/css/background-clip-values-expected.png deleted file mode 100644 index b717d22..0000000 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/css/background-clip-values-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/css/border-height-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/css/border-height-expected.png index c35b8f5..9c9331c6 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/css/border-height-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/css/border-height-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-expected.png index 6c5526b..0686425 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/forms/control-clip-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/forms/control-clip-expected.png index 4713179..cdd2380 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/forms/control-clip-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/forms/control-clip-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/forms/negativeLineHeight-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/forms/negativeLineHeight-expected.png index 97293ed..4a71434 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/forms/negativeLineHeight-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/forms/negativeLineHeight-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/forms/textarea/textAreaLineHeight-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/forms/textarea/textAreaLineHeight-expected.png index 96c2748..5ed2429 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/forms/textarea/textAreaLineHeight-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/forms/textarea/textAreaLineHeight-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/inline-block/inline-block-vertical-align-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/inline-block/inline-block-vertical-align-expected.png index 5b9d3516..e005b74 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/inline-block/inline-block-vertical-align-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/inline-block/inline-block-vertical-align-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/lists/big-list-marker-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/lists/big-list-marker-expected.png index 69e4c88..4566d88f 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/lists/big-list-marker-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/lists/big-list-marker-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/multicol/composited-with-overflow-in-next-column-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/multicol/composited-with-overflow-in-next-column-expected.png index 678f956..dcbf15b 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/multicol/composited-with-overflow-in-next-column-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/multicol/composited-with-overflow-in-next-column-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/replaced/replaced-child-of-absolute-with-auto-height-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/replaced/replaced-child-of-absolute-with-auto-height-expected.png index b408dc62..206793e 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/replaced/replaced-child-of-absolute-with-auto-height-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/replaced/replaced-child-of-absolute-with-auto-height-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_border-table-row-group-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_border-table-row-group-expected.png index 0a0bd2d2..f67806b 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_border-table-row-group-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_border-table-row-group-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_position-table-row-group-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_position-table-row-group-expected.png index de1b9a6b..96ba832 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_position-table-row-group-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_position-table-row-group-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_simple-table-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_simple-table-expected.png index 785e807..e6365bd 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_simple-table-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_simple-table-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_simple-table-row-group-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_simple-table-row-group-expected.png index cea8c892..c7097d2 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_simple-table-row-group-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_simple-table-row-group-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/table/border-collapsing/002-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/table/border-collapsing/002-expected.png index a544945..556b669 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/table/border-collapsing/002-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/table/border-collapsing/002-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/table/border-collapsing/002-vertical-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/table/border-collapsing/002-vertical-expected.png index 40c75fd..52141d74 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/table/border-collapsing/002-vertical-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/table/border-collapsing/002-vertical-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/table/border-collapsing/rtl-border-collapsing-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/table/border-collapsing/rtl-border-collapsing-expected.png index 1fc4c23..58fe56c 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/table/border-collapsing/rtl-border-collapsing-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/table/border-collapsing/rtl-border-collapsing-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/table/border-collapsing/rtl-border-collapsing-vertical-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/table/border-collapsing/rtl-border-collapsing-vertical-expected.png index 233985f..f64072c 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/table/border-collapsing/rtl-border-collapsing-vertical-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/table/border-collapsing/rtl-border-collapsing-vertical-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/table/empty-table-percent-height-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/table/empty-table-percent-height-expected.png index 35ff38b..41ec8f03 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/table/empty-table-percent-height-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/table/empty-table-percent-height-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/table/table-and-parts-outline-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/table/table-and-parts-outline-expected.png index 0a27e1af..2c39be16 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/table/table-and-parts-outline-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/table/table-and-parts-outline-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/text-autosizing/tables/css-table-lots-of-text-many-cells-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/text-autosizing/tables/css-table-lots-of-text-many-cells-expected.png index 2a5be54..4dd7e34d 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/text-autosizing/tables/css-table-lots-of-text-many-cells-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/text-autosizing/tables/css-table-lots-of-text-many-cells-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/text-autosizing/tables/css-table-single-cell-lots-of-text-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/text-autosizing/tables/css-table-single-cell-lots-of-text-expected.png index d95df2f..ca1f1392 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/text-autosizing/tables/css-table-single-cell-lots-of-text-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/text-autosizing/tables/css-table-single-cell-lots-of-text-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/text-autosizing/tables/fixed-table-lots-of-text-many-cells-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/text-autosizing/tables/fixed-table-lots-of-text-many-cells-expected.png index 719189b3..bd19cd6f 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/text-autosizing/tables/fixed-table-lots-of-text-many-cells-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/text-autosizing/tables/fixed-table-lots-of-text-many-cells-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/text-autosizing/tables/fixed-table-single-cell-lots-of-text-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/text-autosizing/tables/fixed-table-single-cell-lots-of-text-expected.png index 6d23b5c..e907321 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/text-autosizing/tables/fixed-table-single-cell-lots-of-text-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/text-autosizing/tables/fixed-table-single-cell-lots-of-text-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/text-autosizing/tables/lots-of-text-many-cells-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/text-autosizing/tables/lots-of-text-many-cells-expected.png index a8aed47..e64842c 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/text-autosizing/tables/lots-of-text-many-cells-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/text-autosizing/tables/lots-of-text-many-cells-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/text-autosizing/tables/narrow-percentage-width-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/text-autosizing/tables/narrow-percentage-width-expected.png index 07a7452a..f7f5040 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/text-autosizing/tables/narrow-percentage-width-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/text-autosizing/tables/narrow-percentage-width-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/text-autosizing/tables/narrow-specified-width-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/text-autosizing/tables/narrow-specified-width-expected.png index b516778..866cfeb 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/text-autosizing/tables/narrow-specified-width-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/text-autosizing/tables/narrow-specified-width-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/text-autosizing/tables/nested-table-wrapping-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/text-autosizing/tables/nested-table-wrapping-expected.png index b7240e3c..e74785a 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/text-autosizing/tables/nested-table-wrapping-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/text-autosizing/tables/nested-table-wrapping-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/text-autosizing/tables/nested-tables-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/text-autosizing/tables/nested-tables-expected.png index 5f092426..3dbe9d6 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/text-autosizing/tables/nested-tables-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/text-autosizing/tables/nested-tables-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/text-autosizing/tables/single-cell-lots-of-text-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/text-autosizing/tables/single-cell-lots-of-text-expected.png index 3cdf63c..6b3bd81 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/text-autosizing/tables/single-cell-lots-of-text-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/text-autosizing/tables/single-cell-lots-of-text-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/text-autosizing/tables/single-percent-width-cell-lots-of-text-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/text-autosizing/tables/single-percent-width-cell-lots-of-text-expected.png index 25ce3db..67fa178 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/text-autosizing/tables/single-percent-width-cell-lots-of-text-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/text-autosizing/tables/single-percent-width-cell-lots-of-text-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/text-autosizing/tables/table-cell-inflation-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/text-autosizing/tables/table-cell-inflation-expected.png index 48161c7e..b3fba7f 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/text-autosizing/tables/table-cell-inflation-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/text-autosizing/tables/table-cell-inflation-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/text-autosizing/tables/table-for-layout-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/text-autosizing/tables/table-for-layout-expected.png index 0ab7de22..31fe488e 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/text-autosizing/tables/table-for-layout-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/text-autosizing/tables/table-for-layout-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/text-autosizing/tables/table-with-inline-block-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/text-autosizing/tables/table-with-inline-block-expected.png index 1be0e91..e2037ec 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/text-autosizing/tables/table-with-inline-block-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/text-autosizing/tables/table-with-inline-block-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/text-autosizing/tables/wide-percentage-width-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/text-autosizing/tables/wide-percentage-width-expected.png index 0c76d15..b2bb27f7 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/text-autosizing/tables/wide-percentage-width-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/text-autosizing/tables/wide-percentage-width-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/text-autosizing/tables/wide-specified-width-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/text-autosizing/tables/wide-specified-width-expected.png index 4d756308..1d430a0 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/text-autosizing/tables/wide-specified-width-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/text-autosizing/tables/wide-specified-width-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/text/text-stroke-with-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/text/text-stroke-with-border-expected.png index aa547f8..dc9c7f4 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/text/text-stroke-with-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/text/text-stroke-with-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/writing-mode/block-level-images-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/writing-mode/block-level-images-expected.png index 64f9388..0e9c0ee0 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/writing-mode/block-level-images-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/writing-mode/block-level-images-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/http/tests/misc/object-embedding-svg-delayed-size-negotiation-2-expected.png b/third_party/WebKit/LayoutTests/platform/mac/http/tests/misc/object-embedding-svg-delayed-size-negotiation-2-expected.png index 31eea59..8d0c456 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/http/tests/misc/object-embedding-svg-delayed-size-negotiation-2-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/http/tests/misc/object-embedding-svg-delayed-size-negotiation-2-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/ietestcenter/css3/bordersbackgrounds/background-color-border-box-expected.png b/third_party/WebKit/LayoutTests/platform/mac/ietestcenter/css3/bordersbackgrounds/background-color-border-box-expected.png index c68cb62..048c5ec 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/ietestcenter/css3/bordersbackgrounds/background-color-border-box-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/ietestcenter/css3/bordersbackgrounds/background-color-border-box-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/ietestcenter/css3/bordersbackgrounds/background_color_padding_box-expected.png b/third_party/WebKit/LayoutTests/platform/mac/ietestcenter/css3/bordersbackgrounds/background_color_padding_box-expected.png index 719a5af..7f285b60 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/ietestcenter/css3/bordersbackgrounds/background_color_padding_box-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/ietestcenter/css3/bordersbackgrounds/background_color_padding_box-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/layer-child-outline-expected.png b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/layer-child-outline-expected.png index d15a3d63..ab37dbd 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/layer-child-outline-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/layer-child-outline-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/scrollbars/border-box-rect-clips-scrollbars-expected.png b/third_party/WebKit/LayoutTests/platform/mac/scrollbars/border-box-rect-clips-scrollbars-expected.png index b657943..3f249aa 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/scrollbars/border-box-rect-clips-scrollbars-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/scrollbars/border-box-rect-clips-scrollbars-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/W3C-SVG-1.1/filters-conv-01-f-expected.png b/third_party/WebKit/LayoutTests/platform/mac/svg/W3C-SVG-1.1/filters-conv-01-f-expected.png index 9acdff8..5f46b988 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/svg/W3C-SVG-1.1/filters-conv-01-f-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/svg/W3C-SVG-1.1/filters-conv-01-f-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/as-background-image/background-image-preserveaspectRatio-support-expected.png b/third_party/WebKit/LayoutTests/platform/mac/svg/as-background-image/background-image-preserveaspectRatio-support-expected.png index 685348c..ab426ac 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/svg/as-background-image/background-image-preserveaspectRatio-support-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/svg/as-background-image/background-image-preserveaspectRatio-support-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/as-image/img-preserveAspectRatio-support-1-expected.png b/third_party/WebKit/LayoutTests/platform/mac/svg/as-image/img-preserveAspectRatio-support-1-expected.png index 6146a19..7e1243a1 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/svg/as-image/img-preserveAspectRatio-support-1-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/svg/as-image/img-preserveAspectRatio-support-1-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/as-image/img-preserveAspectRatio-support-2-expected.png b/third_party/WebKit/LayoutTests/platform/mac/svg/as-image/img-preserveAspectRatio-support-2-expected.png index 13e0b500..2e759628 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/svg/as-image/img-preserveAspectRatio-support-2-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/svg/as-image/img-preserveAspectRatio-support-2-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/zoom/page/zoom-img-preserveAspectRatio-support-1-expected.png b/third_party/WebKit/LayoutTests/platform/mac/svg/zoom/page/zoom-img-preserveAspectRatio-support-1-expected.png index 2c695850..8938c8b 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/svg/zoom/page/zoom-img-preserveAspectRatio-support-1-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/svg/zoom/page/zoom-img-preserveAspectRatio-support-1-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/zoom/page/zoom-replaced-intrinsic-ratio-001-expected.png b/third_party/WebKit/LayoutTests/platform/mac/svg/zoom/page/zoom-replaced-intrinsic-ratio-001-expected.png index 910f28b..476b04e0 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/svg/zoom/page/zoom-replaced-intrinsic-ratio-001-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/svg/zoom/page/zoom-replaced-intrinsic-ratio-001-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/zoom/page/zoom-svg-through-object-with-auto-size-expected.png b/third_party/WebKit/LayoutTests/platform/mac/svg/zoom/page/zoom-svg-through-object-with-auto-size-expected.png index 2117159..35908f8 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/svg/zoom/page/zoom-svg-through-object-with-auto-size-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/svg/zoom/page/zoom-svg-through-object-with-auto-size-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/tables/mozilla/bugs/bug22019-expected.png b/third_party/WebKit/LayoutTests/platform/mac/tables/mozilla/bugs/bug22019-expected.png index 5e99006..e5802c9 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/tables/mozilla/bugs/bug22019-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/tables/mozilla/bugs/bug22019-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/tables/mozilla/bugs/bug2886-expected.png b/third_party/WebKit/LayoutTests/platform/mac/tables/mozilla/bugs/bug2886-expected.png index 99dc81b..f55e3b0 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/tables/mozilla/bugs/bug2886-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/tables/mozilla/bugs/bug2886-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/tables/mozilla/bugs/bug2947-expected.png b/third_party/WebKit/LayoutTests/platform/mac/tables/mozilla/bugs/bug2947-expected.png index caa16dfd..4e0ba8e1 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/tables/mozilla/bugs/bug2947-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/tables/mozilla/bugs/bug2947-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/tables/mozilla/bugs/bug6674-expected.png b/third_party/WebKit/LayoutTests/platform/mac/tables/mozilla/bugs/bug6674-expected.png index 7a71d582..d2eaff3 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/tables/mozilla/bugs/bug6674-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/tables/mozilla/bugs/bug6674-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/tables/mozilla/collapsing_borders/bug41262-3-expected.png b/third_party/WebKit/LayoutTests/platform/mac/tables/mozilla/collapsing_borders/bug41262-3-expected.png index 1b6b0506..55a4d3b6 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/tables/mozilla/collapsing_borders/bug41262-3-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/tables/mozilla/collapsing_borders/bug41262-3-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/tables/mozilla/marvin/tables_style-expected.png b/third_party/WebKit/LayoutTests/platform/mac/tables/mozilla/marvin/tables_style-expected.png index a36b31b8..6de4b03d 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/tables/mozilla/marvin/tables_style-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/tables/mozilla/marvin/tables_style-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/tables/mozilla_expected_failures/bugs/bug2479-5-expected.png b/third_party/WebKit/LayoutTests/platform/mac/tables/mozilla_expected_failures/bugs/bug2479-5-expected.png index b285487..56a120a4 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/tables/mozilla_expected_failures/bugs/bug2479-5-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/tables/mozilla_expected_failures/bugs/bug2479-5-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/tables/mozilla_expected_failures/marvin/backgr_fixed-bg-expected.png b/third_party/WebKit/LayoutTests/platform/mac/tables/mozilla_expected_failures/marvin/backgr_fixed-bg-expected.png index a4daad60..cdb6847 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/tables/mozilla_expected_failures/marvin/backgr_fixed-bg-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/tables/mozilla_expected_failures/marvin/backgr_fixed-bg-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/layer-child-outline-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/layer-child-outline-expected.png index d15a3d63..ab37dbd 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/layer-child-outline-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/layer-child-outline-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/mojo-loading/css1/box_properties/border_style-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/mojo-loading/css1/box_properties/border_style-expected.png index ade8054..85a2a03 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/virtual/mojo-loading/css1/box_properties/border_style-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/mojo-loading/css1/box_properties/border_style-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/mojo-loading/css1/box_properties/border_style_inline-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/mojo-loading/css1/box_properties/border_style_inline-expected.png new file mode 100644 index 0000000..a01b903 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/mojo-loading/css1/box_properties/border_style_inline-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/mojo-loading/http/tests/misc/object-embedding-svg-delayed-size-negotiation-2-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/mojo-loading/http/tests/misc/object-embedding-svg-delayed-size-negotiation-2-expected.png index 31eea59..8d0c456 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/virtual/mojo-loading/http/tests/misc/object-embedding-svg-delayed-size-negotiation-2-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/mojo-loading/http/tests/misc/object-embedding-svg-delayed-size-negotiation-2-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/prefer_compositing_to_lcd_text/scrollbars/border-box-rect-clips-scrollbars-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/prefer_compositing_to_lcd_text/scrollbars/border-box-rect-clips-scrollbars-expected.png index 17291d6d..57434748 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/virtual/prefer_compositing_to_lcd_text/scrollbars/border-box-rect-clips-scrollbars-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/prefer_compositing_to_lcd_text/scrollbars/border-box-rect-clips-scrollbars-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/rootlayerscrolls/scrollbars/border-box-rect-clips-scrollbars-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/rootlayerscrolls/scrollbars/border-box-rect-clips-scrollbars-expected.png index b657943..3f249aa 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/virtual/rootlayerscrolls/scrollbars/border-box-rect-clips-scrollbars-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/rootlayerscrolls/scrollbars/border-box-rect-clips-scrollbars-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/compositing/overflow/border-radius-styles-with-composited-child-expected.png b/third_party/WebKit/LayoutTests/platform/win/compositing/overflow/border-radius-styles-with-composited-child-expected.png index 6b0048e7..5cf728d 100644 --- a/third_party/WebKit/LayoutTests/platform/win/compositing/overflow/border-radius-styles-with-composited-child-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/compositing/overflow/border-radius-styles-with-composited-child-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/css1/box_properties/border_style-expected.png b/third_party/WebKit/LayoutTests/platform/win/css1/box_properties/border_style-expected.png index c7145a3..ae80c9b 100644 --- a/third_party/WebKit/LayoutTests/platform/win/css1/box_properties/border_style-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/css1/box_properties/border_style-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/css1/box_properties/border_style_inline-expected.png b/third_party/WebKit/LayoutTests/platform/win/css1/box_properties/border_style_inline-expected.png index aee40ae9..f0b51a7 100644 --- a/third_party/WebKit/LayoutTests/platform/win/css1/box_properties/border_style_inline-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/css1/box_properties/border_style_inline-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/css2.1/20110323/replaced-intrinsic-ratio-001-expected.png b/third_party/WebKit/LayoutTests/platform/win/css2.1/20110323/replaced-intrinsic-ratio-001-expected.png index e0e7514..fa81efb 100644 --- a/third_party/WebKit/LayoutTests/platform/win/css2.1/20110323/replaced-intrinsic-ratio-001-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/css2.1/20110323/replaced-intrinsic-ratio-001-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/css2.1/t0805-c5517-brdr-s-00-c-expected.png b/third_party/WebKit/LayoutTests/platform/win/css2.1/t0805-c5517-brdr-s-00-c-expected.png index 665b34b..ccff50a 100644 --- a/third_party/WebKit/LayoutTests/platform/win/css2.1/t0805-c5517-brdr-s-00-c-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/css2.1/t0805-c5517-brdr-s-00-c-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/css2.1/t0805-c5517-ibrdr-s-00-a-expected.png b/third_party/WebKit/LayoutTests/platform/win/css2.1/t0805-c5517-ibrdr-s-00-a-expected.png index 13afde6..aa95166 100644 --- a/third_party/WebKit/LayoutTests/platform/win/css2.1/t0805-c5517-ibrdr-s-00-a-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/css2.1/t0805-c5517-ibrdr-s-00-a-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-03-d-expected.png b/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-03-d-expected.png index ee59b610..97138cb 100644 --- a/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-03-d-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-03-d-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-13-d-expected.png b/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-13-d-expected.png index c46b9da..bc500201 100644 --- a/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-13-d-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-13-d-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-23-d-expected.png b/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-23-d-expected.png index 949332d..14595ca 100644 --- a/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-23-d-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-23-d-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-31-d-expected.png b/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-31-d-expected.png index 66dd71b..390b85a 100644 --- a/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-31-d-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-31-d-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-32-d-expected.png b/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-32-d-expected.png index ed5126aa..366130a 100644 --- a/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-32-d-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-32-d-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-33-d-expected.png b/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-33-d-expected.png index 8005299..622b731 100644 --- a/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-33-d-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-33-d-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-34-d-expected.png b/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-34-d-expected.png index b28f5667..598bbaa2 100644 --- a/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-34-d-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-34-d-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-35-d-expected.png b/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-35-d-expected.png index fb0e7904..3c16c00 100644 --- a/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-35-d-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-35-d-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-36-d-expected.png b/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-36-d-expected.png index 9ceb0cf3..200beeef 100644 --- a/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-36-d-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-36-d-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-37-d-expected.png b/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-37-d-expected.png index f18dcce0..988c63a 100644 --- a/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-37-d-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-37-d-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-38-d-expected.png b/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-38-d-expected.png index 7e4b255..3e10cf03 100644 --- a/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-38-d-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-38-d-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-39-d-expected.png b/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-39-d-expected.png index 174701dc..d352bc5 100644 --- a/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-39-d-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-39-d-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-43-d-expected.png b/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-43-d-expected.png index 7a2479c..4748ba9d2 100644 --- a/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-43-d-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-43-d-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-53-d-expected.png b/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-53-d-expected.png index 871c8e6..1fd8b7a 100644 --- a/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-53-d-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-53-d-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-63-d-expected.png b/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-63-d-expected.png index 180e3c10..b867c98 100644 --- a/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-63-d-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-63-d-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-73-d-expected.png b/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-73-d-expected.png index fd5f280..3a47d36 100644 --- a/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-73-d-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-73-d-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-83-d-expected.png b/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-83-d-expected.png index dc22700..2cc13dfc 100644 --- a/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-83-d-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-83-d-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-93-d-expected.png b/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-93-d-expected.png index 9cc50d3..5cc950b5 100644 --- a/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-93-d-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-93-d-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/editing/execCommand/5138441-expected.png b/third_party/WebKit/LayoutTests/platform/win/editing/execCommand/5138441-expected.png index f8b72af..76878c6 100644 --- a/third_party/WebKit/LayoutTests/platform/win/editing/execCommand/5138441-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/editing/execCommand/5138441-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/backgrounds/repeat/mask-negative-offset-repeat-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/backgrounds/repeat/mask-negative-offset-repeat-expected.png index 8c8e720f..d45b69a 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/backgrounds/repeat/mask-negative-offset-repeat-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/backgrounds/repeat/mask-negative-offset-repeat-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/backgrounds/repeat/negative-offset-repeat-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/backgrounds/repeat/negative-offset-repeat-expected.png index b79e770..acc69c6 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/backgrounds/repeat/negative-offset-repeat-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/backgrounds/repeat/negative-offset-repeat-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/backgrounds/repeat/negative-offset-repeat-transformed-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/backgrounds/repeat/negative-offset-repeat-transformed-expected.png index 62dd6eea..5764904d 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/backgrounds/repeat/negative-offset-repeat-transformed-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/backgrounds/repeat/negative-offset-repeat-transformed-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/block/positioning/absolute-in-inline-ltr-2-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/block/positioning/absolute-in-inline-ltr-2-expected.png index a4cf774..016ffb2 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/block/positioning/absolute-in-inline-ltr-2-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/block/positioning/absolute-in-inline-ltr-2-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/block/positioning/absolute-in-inline-ltr-3-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/block/positioning/absolute-in-inline-ltr-3-expected.png index 9642042..06b00b85 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/block/positioning/absolute-in-inline-ltr-3-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/block/positioning/absolute-in-inline-ltr-3-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/block/positioning/absolute-in-inline-ltr-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/block/positioning/absolute-in-inline-ltr-expected.png index fe64b48f..95d3884 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/block/positioning/absolute-in-inline-ltr-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/block/positioning/absolute-in-inline-ltr-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/block/positioning/absolute-in-inline-rtl-2-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/block/positioning/absolute-in-inline-rtl-2-expected.png index dc00b54..23dba18 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/block/positioning/absolute-in-inline-rtl-2-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/block/positioning/absolute-in-inline-rtl-2-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/block/positioning/absolute-in-inline-rtl-3-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/block/positioning/absolute-in-inline-rtl-3-expected.png index 7773b22f..6c995fbc 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/block/positioning/absolute-in-inline-rtl-3-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/block/positioning/absolute-in-inline-rtl-3-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/block/positioning/absolute-in-inline-rtl-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/block/positioning/absolute-in-inline-rtl-expected.png index c01199f..907f90c 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/block/positioning/absolute-in-inline-rtl-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/block/positioning/absolute-in-inline-rtl-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/block/positioning/absolute-in-inline-short-ltr-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/block/positioning/absolute-in-inline-short-ltr-expected.png index 3a9dc05..32bb32f2 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/block/positioning/absolute-in-inline-short-ltr-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/block/positioning/absolute-in-inline-short-ltr-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/block/positioning/absolute-in-inline-short-rtl-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/block/positioning/absolute-in-inline-short-rtl-expected.png index 71941e1..d56fee6 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/block/positioning/absolute-in-inline-short-rtl-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/block/positioning/absolute-in-inline-short-rtl-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/block/positioning/child-of-absolute-with-auto-height-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/block/positioning/child-of-absolute-with-auto-height-expected.png index 8855b2e..512da45 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/block/positioning/child-of-absolute-with-auto-height-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/block/positioning/child-of-absolute-with-auto-height-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/borders/borderRadiusAllStylesAllCorners-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/borders/borderRadiusAllStylesAllCorners-expected.png index 975ed01..870d0a4 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/borders/borderRadiusAllStylesAllCorners-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/borders/borderRadiusAllStylesAllCorners-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/borders/borderRadiusDashed01-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/borders/borderRadiusDashed01-expected.png index 2c73f27..d0e1c1dd 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/borders/borderRadiusDashed01-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/borders/borderRadiusDashed01-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/borders/borderRadiusDashed02-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/borders/borderRadiusDashed02-expected.png index be19b46..197931b 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/borders/borderRadiusDashed02-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/borders/borderRadiusDashed02-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/borders/borderRadiusDashed03-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/borders/borderRadiusDashed03-expected.png index eb3667dc..93ad8819 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/borders/borderRadiusDashed03-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/borders/borderRadiusDashed03-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/borders/borderRadiusDashed04-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/borders/borderRadiusDashed04-expected.png index 50f367a5..6801ab8 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/borders/borderRadiusDashed04-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/borders/borderRadiusDashed04-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/borders/borderRadiusDashed05-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/borders/borderRadiusDashed05-expected.png index e221d7f..eb136ed4 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/borders/borderRadiusDashed05-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/borders/borderRadiusDashed05-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/borders/borderRadiusDashed06-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/borders/borderRadiusDashed06-expected.png index 06e8f66..a33965f 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/borders/borderRadiusDashed06-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/borders/borderRadiusDashed06-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/borders/outline-alpha-block-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/borders/outline-alpha-block-expected.png index dcc3ae95..7cacd28 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/borders/outline-alpha-block-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/borders/outline-alpha-block-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/borders/outline-alpha-inline-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/borders/outline-alpha-inline-expected.png index 01c524c1..c7d82a9 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/borders/outline-alpha-inline-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/borders/outline-alpha-inline-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/box-shadow/inset-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/box-shadow/inset-expected.png index 72370bdc..a602dcdf 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/box-shadow/inset-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/box-shadow/inset-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/box-shadow/inset-subpixel-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/box-shadow/inset-subpixel-expected.png index 1bcc51a..4b04d82b 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/box-shadow/inset-subpixel-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/box-shadow/inset-subpixel-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/css-generated-content/012-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/css-generated-content/012-expected.png index 5b7ec45..34a9ee9 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/css-generated-content/012-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/css-generated-content/012-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/css/border-height-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/css/border-height-expected.png index 83a6c6ec..0b6aefb 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/css/border-height-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/css/border-height-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/css/margin-top-bottom-dynamic-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/css/margin-top-bottom-dynamic-expected.png index 40c4eab..98c4c54c 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/css/margin-top-bottom-dynamic-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/css/margin-top-bottom-dynamic-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-expected.png index 06d2095..a17b7c06 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/forms/control-clip-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/forms/control-clip-expected.png index 78c37a0..5f1cf65 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/forms/control-clip-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/forms/control-clip-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/forms/negativeLineHeight-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/forms/negativeLineHeight-expected.png index 657bfc0..0204207 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/forms/negativeLineHeight-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/forms/negativeLineHeight-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/forms/textarea/textAreaLineHeight-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/forms/textarea/textAreaLineHeight-expected.png index 18cc3f8..ab89fd0 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/forms/textarea/textAreaLineHeight-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/forms/textarea/textAreaLineHeight-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/inline-block/inline-block-vertical-align-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/inline-block/inline-block-vertical-align-expected.png index 09fe20b..80619a37 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/inline-block/inline-block-vertical-align-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/inline-block/inline-block-vertical-align-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/lists/big-list-marker-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/lists/big-list-marker-expected.png index 1e144a8..f803bbb 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/lists/big-list-marker-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/lists/big-list-marker-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/lists/ordered-list-with-no-ol-tag-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/lists/ordered-list-with-no-ol-tag-expected.png index 794d0ed..642f0b68 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/lists/ordered-list-with-no-ol-tag-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/lists/ordered-list-with-no-ol-tag-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/multicol/composited-with-overflow-in-next-column-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/multicol/composited-with-overflow-in-next-column-expected.png index 102ddb9..9e03bdc 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/multicol/composited-with-overflow-in-next-column-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/multicol/composited-with-overflow-in-next-column-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/replaced/replaced-child-of-absolute-with-auto-height-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/replaced/replaced-child-of-absolute-with-auto-height-expected.png index 0ff02578..40ae24d 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/replaced/replaced-child-of-absolute-with-auto-height-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/replaced/replaced-child-of-absolute-with-auto-height-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/spatial-navigation/snav-multiple-select-focusring-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/spatial-navigation/snav-multiple-select-focusring-expected.png index 5493fc6..74e18f4e 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/spatial-navigation/snav-multiple-select-focusring-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/spatial-navigation/snav-multiple-select-focusring-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_border-table-cell-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_border-table-cell-collapsed-border-expected.png index 546a2e5..03c84ad9 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_border-table-cell-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_border-table-cell-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_border-table-cell-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_border-table-cell-expected.png index b56283d..147bbbc 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_border-table-cell-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_border-table-cell-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_border-table-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_border-table-collapsed-border-expected.png index 6cafee1..cddf32e 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_border-table-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_border-table-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_border-table-column-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_border-table-column-collapsed-border-expected.png index 79912ad..aca3b09 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_border-table-column-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_border-table-column-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_border-table-column-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_border-table-column-expected.png index ac881b2..4f4aa11 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_border-table-column-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_border-table-column-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_border-table-column-group-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_border-table-column-group-collapsed-border-expected.png index 8c94d81..30dbdb4 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_border-table-column-group-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_border-table-column-group-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_border-table-column-group-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_border-table-column-group-expected.png index 4f1a070..3f0180e 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_border-table-column-group-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_border-table-column-group-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_border-table-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_border-table-expected.png index 8a6cf33..3f0788c 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_border-table-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_border-table-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_border-table-quirks-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_border-table-quirks-collapsed-border-expected.png index 5a2f2665..f3c4fcdf 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_border-table-quirks-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_border-table-quirks-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_border-table-quirks-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_border-table-quirks-expected.png index 0a4b4e41..72a70af 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_border-table-quirks-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_border-table-quirks-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_border-table-row-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_border-table-row-collapsed-border-expected.png index d84d548..11e6d9a 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_border-table-row-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_border-table-row-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_border-table-row-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_border-table-row-expected.png index 0aa61c5d..c13b522 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_border-table-row-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_border-table-row-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_border-table-row-group-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_border-table-row-group-collapsed-border-expected.png index 7ec2e6b..bd9de52 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_border-table-row-group-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_border-table-row-group-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_border-table-row-group-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_border-table-row-group-expected.png index c3324c24..56adf675 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_border-table-row-group-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_border-table-row-group-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_layers-hide-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_layers-hide-collapsed-border-expected.png index 6ef54fd..f460f14 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_layers-hide-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_layers-hide-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_layers-hide-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_layers-hide-expected.png index 0f77f8f..d78eb3f8 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_layers-hide-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_layers-hide-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_position-table-cell-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_position-table-cell-collapsed-border-expected.png index 939f215bf..737e9c6a 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_position-table-cell-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_position-table-cell-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_position-table-cell-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_position-table-cell-expected.png index 0ae201c..21bbc23 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_position-table-cell-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_position-table-cell-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_position-table-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_position-table-collapsed-border-expected.png index 577766d..2e71fd6 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_position-table-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_position-table-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_position-table-column-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_position-table-column-collapsed-border-expected.png index 40e91983..e5bf52e 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_position-table-column-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_position-table-column-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_position-table-column-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_position-table-column-expected.png index e51354fd..f07be36 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_position-table-column-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_position-table-column-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_position-table-column-group-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_position-table-column-group-collapsed-border-expected.png index b47f48e..4e07c4b 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_position-table-column-group-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_position-table-column-group-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_position-table-column-group-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_position-table-column-group-expected.png index b1e3af6..fd45fd4 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_position-table-column-group-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_position-table-column-group-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_position-table-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_position-table-expected.png index 185be0a41..6b8e38a 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_position-table-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_position-table-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_position-table-row-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_position-table-row-collapsed-border-expected.png index 2778326..8f65c1c7 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_position-table-row-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_position-table-row-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_position-table-row-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_position-table-row-expected.png index a51f5bb3b..e52989a0 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_position-table-row-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_position-table-row-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_position-table-row-group-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_position-table-row-group-collapsed-border-expected.png index 2572027..41fa082 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_position-table-row-group-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_position-table-row-group-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_position-table-row-group-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_position-table-row-group-expected.png index 0e896e1a..4caa37c5 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_position-table-row-group-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_position-table-row-group-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_simple-table-cell-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_simple-table-cell-collapsed-border-expected.png index 73bd851..889e629 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_simple-table-cell-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_simple-table-cell-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_simple-table-cell-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_simple-table-cell-expected.png index 2309a16..a2135e93 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_simple-table-cell-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_simple-table-cell-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_simple-table-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_simple-table-collapsed-border-expected.png index 4fccfa1..24360d0 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_simple-table-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_simple-table-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_simple-table-column-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_simple-table-column-collapsed-border-expected.png index 46f04da..13a1015 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_simple-table-column-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_simple-table-column-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_simple-table-column-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_simple-table-column-expected.png index 9484d17..4d927cd 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_simple-table-column-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_simple-table-column-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_simple-table-column-group-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_simple-table-column-group-collapsed-border-expected.png index b116634..8b12cc9c 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_simple-table-column-group-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_simple-table-column-group-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_simple-table-column-group-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_simple-table-column-group-expected.png index 252b66f..f877418 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_simple-table-column-group-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_simple-table-column-group-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_simple-table-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_simple-table-expected.png index e16005e..59ec549 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_simple-table-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_simple-table-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_simple-table-row-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_simple-table-row-collapsed-border-expected.png index e901560f..50a00482 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_simple-table-row-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_simple-table-row-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_simple-table-row-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_simple-table-row-expected.png index bcac783d..2568570 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_simple-table-row-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_simple-table-row-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_simple-table-row-group-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_simple-table-row-group-collapsed-border-expected.png index c53d551..7e4a0e2 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_simple-table-row-group-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_simple-table-row-group-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_simple-table-row-group-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_simple-table-row-group-expected.png index a0a806d..5cd1d79d 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_simple-table-row-group-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/table/backgr_simple-table-row-group-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/table/border-collapsing/001-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/table/border-collapsing/001-expected.png index a1d0ee97..f389daf 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/table/border-collapsing/001-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/table/border-collapsing/001-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/table/border-collapsing/001-vertical-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/table/border-collapsing/001-vertical-expected.png index a5c1f0c..43192194 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/table/border-collapsing/001-vertical-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/table/border-collapsing/001-vertical-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/table/border-collapsing/002-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/table/border-collapsing/002-expected.png index df2d220..3876edc 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/table/border-collapsing/002-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/table/border-collapsing/002-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/table/border-collapsing/002-vertical-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/table/border-collapsing/002-vertical-expected.png index 71652e9..a5b25bc8 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/table/border-collapsing/002-vertical-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/table/border-collapsing/002-vertical-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/table/border-collapsing/rtl-border-collapsing-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/table/border-collapsing/rtl-border-collapsing-expected.png index d2ab51c..24934453 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/table/border-collapsing/rtl-border-collapsing-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/table/border-collapsing/rtl-border-collapsing-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/table/border-collapsing/rtl-border-collapsing-vertical-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/table/border-collapsing/rtl-border-collapsing-vertical-expected.png index 04fc201..3c3e3ced 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/table/border-collapsing/rtl-border-collapsing-vertical-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/table/border-collapsing/rtl-border-collapsing-vertical-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/table/empty-table-percent-height-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/table/empty-table-percent-height-expected.png index 3f3d53e..e798bad3 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/table/empty-table-percent-height-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/table/empty-table-percent-height-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/table/table-and-parts-outline-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/table/table-and-parts-outline-expected.png index 2718812..52f0f7d 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/table/table-and-parts-outline-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/table/table-and-parts-outline-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/text-autosizing/tables/css-table-lots-of-text-many-cells-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/text-autosizing/tables/css-table-lots-of-text-many-cells-expected.png index 213e6d0..8feacb8 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/text-autosizing/tables/css-table-lots-of-text-many-cells-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/text-autosizing/tables/css-table-lots-of-text-many-cells-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/text-autosizing/tables/css-table-single-cell-lots-of-text-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/text-autosizing/tables/css-table-single-cell-lots-of-text-expected.png index 72c0ebe..e1dd9d4 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/text-autosizing/tables/css-table-single-cell-lots-of-text-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/text-autosizing/tables/css-table-single-cell-lots-of-text-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/text-autosizing/tables/fixed-table-lots-of-text-many-cells-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/text-autosizing/tables/fixed-table-lots-of-text-many-cells-expected.png index 21dddd3..ca08dff 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/text-autosizing/tables/fixed-table-lots-of-text-many-cells-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/text-autosizing/tables/fixed-table-lots-of-text-many-cells-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/text-autosizing/tables/fixed-table-single-cell-lots-of-text-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/text-autosizing/tables/fixed-table-single-cell-lots-of-text-expected.png index 488a9cd..34b147a 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/text-autosizing/tables/fixed-table-single-cell-lots-of-text-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/text-autosizing/tables/fixed-table-single-cell-lots-of-text-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/text-autosizing/tables/lots-of-text-many-cells-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/text-autosizing/tables/lots-of-text-many-cells-expected.png index cdfc7cb..8578ec3e 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/text-autosizing/tables/lots-of-text-many-cells-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/text-autosizing/tables/lots-of-text-many-cells-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/text-autosizing/tables/narrow-percentage-width-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/text-autosizing/tables/narrow-percentage-width-expected.png index 6f28468..60092fa 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/text-autosizing/tables/narrow-percentage-width-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/text-autosizing/tables/narrow-percentage-width-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/text-autosizing/tables/narrow-specified-width-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/text-autosizing/tables/narrow-specified-width-expected.png index 8adfbb5..27b4511 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/text-autosizing/tables/narrow-specified-width-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/text-autosizing/tables/narrow-specified-width-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/text-autosizing/tables/nested-table-wrapping-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/text-autosizing/tables/nested-table-wrapping-expected.png index 26d25d1b..6e191e8 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/text-autosizing/tables/nested-table-wrapping-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/text-autosizing/tables/nested-table-wrapping-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/text-autosizing/tables/nested-tables-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/text-autosizing/tables/nested-tables-expected.png index 12fd3805..6a1ba197 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/text-autosizing/tables/nested-tables-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/text-autosizing/tables/nested-tables-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/text-autosizing/tables/single-cell-lots-of-text-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/text-autosizing/tables/single-cell-lots-of-text-expected.png index 06aba5b..63fc3f45 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/text-autosizing/tables/single-cell-lots-of-text-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/text-autosizing/tables/single-cell-lots-of-text-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/text-autosizing/tables/single-percent-width-cell-lots-of-text-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/text-autosizing/tables/single-percent-width-cell-lots-of-text-expected.png index f715057..9d911cb 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/text-autosizing/tables/single-percent-width-cell-lots-of-text-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/text-autosizing/tables/single-percent-width-cell-lots-of-text-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/text-autosizing/tables/table-cell-inflation-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/text-autosizing/tables/table-cell-inflation-expected.png index 91dc610..a01254b 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/text-autosizing/tables/table-cell-inflation-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/text-autosizing/tables/table-cell-inflation-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/text-autosizing/tables/table-for-layout-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/text-autosizing/tables/table-for-layout-expected.png index 3b38a5f..333615b 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/text-autosizing/tables/table-for-layout-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/text-autosizing/tables/table-for-layout-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/text-autosizing/tables/table-with-inline-block-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/text-autosizing/tables/table-with-inline-block-expected.png index 89da2d5..452c2a2c 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/text-autosizing/tables/table-with-inline-block-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/text-autosizing/tables/table-with-inline-block-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/text-autosizing/tables/wide-percentage-width-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/text-autosizing/tables/wide-percentage-width-expected.png index f65ba82..7a0ddfec 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/text-autosizing/tables/wide-percentage-width-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/text-autosizing/tables/wide-percentage-width-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/text-autosizing/tables/wide-specified-width-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/text-autosizing/tables/wide-specified-width-expected.png index 3779946..c614842 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/text-autosizing/tables/wide-specified-width-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/text-autosizing/tables/wide-specified-width-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/text/text-stroke-with-border-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/text/text-stroke-with-border-expected.png index cf842f39..1c6f0e0 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/text/text-stroke-with-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/text/text-stroke-with-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/writing-mode/block-level-images-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/writing-mode/block-level-images-expected.png index cbbc978..fdf67faa 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/writing-mode/block-level-images-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/writing-mode/block-level-images-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/http/tests/misc/object-embedding-svg-delayed-size-negotiation-2-expected.png b/third_party/WebKit/LayoutTests/platform/win/http/tests/misc/object-embedding-svg-delayed-size-negotiation-2-expected.png index 62f7ed1..47f0ec68 100644 --- a/third_party/WebKit/LayoutTests/platform/win/http/tests/misc/object-embedding-svg-delayed-size-negotiation-2-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/http/tests/misc/object-embedding-svg-delayed-size-negotiation-2-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/ietestcenter/css3/bordersbackgrounds/background-color-border-box-expected.png b/third_party/WebKit/LayoutTests/platform/win/ietestcenter/css3/bordersbackgrounds/background-color-border-box-expected.png index 4e7efcd1..f09593a 100644 --- a/third_party/WebKit/LayoutTests/platform/win/ietestcenter/css3/bordersbackgrounds/background-color-border-box-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/ietestcenter/css3/bordersbackgrounds/background-color-border-box-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/ietestcenter/css3/bordersbackgrounds/background_color_padding_box-expected.png b/third_party/WebKit/LayoutTests/platform/win/ietestcenter/css3/bordersbackgrounds/background_color_padding_box-expected.png index f0bc8f5..53c41c0e 100644 --- a/third_party/WebKit/LayoutTests/platform/win/ietestcenter/css3/bordersbackgrounds/background_color_padding_box-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/ietestcenter/css3/bordersbackgrounds/background_color_padding_box-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/ietestcenter/css3/bordersbackgrounds/border-radius-style-002-expected.png b/third_party/WebKit/LayoutTests/platform/win/ietestcenter/css3/bordersbackgrounds/border-radius-style-002-expected.png index 858e02d..16d73b2 100644 --- a/third_party/WebKit/LayoutTests/platform/win/ietestcenter/css3/bordersbackgrounds/border-radius-style-002-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/ietestcenter/css3/bordersbackgrounds/border-radius-style-002-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/layer-child-outline-expected.png b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/layer-child-outline-expected.png index 7344b8d..071dcb0 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/layer-child-outline-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/layer-child-outline-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/plugins/embed-attributes-style-expected.png b/third_party/WebKit/LayoutTests/platform/win/plugins/embed-attributes-style-expected.png index 932715a..b0d4e0c 100644 --- a/third_party/WebKit/LayoutTests/platform/win/plugins/embed-attributes-style-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/plugins/embed-attributes-style-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/scrollbars/border-box-rect-clips-scrollbars-expected.png b/third_party/WebKit/LayoutTests/platform/win/scrollbars/border-box-rect-clips-scrollbars-expected.png index 8a1e281..6499c40c 100644 --- a/third_party/WebKit/LayoutTests/platform/win/scrollbars/border-box-rect-clips-scrollbars-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/scrollbars/border-box-rect-clips-scrollbars-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/as-background-image/background-image-preserveaspectRatio-support-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/as-background-image/background-image-preserveaspectRatio-support-expected.png index 10804572..d3ea587 100644 --- a/third_party/WebKit/LayoutTests/platform/win/svg/as-background-image/background-image-preserveaspectRatio-support-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/svg/as-background-image/background-image-preserveaspectRatio-support-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/as-image/img-preserveAspectRatio-support-1-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/as-image/img-preserveAspectRatio-support-1-expected.png index 87c396a..450d71a 100644 --- a/third_party/WebKit/LayoutTests/platform/win/svg/as-image/img-preserveAspectRatio-support-1-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/svg/as-image/img-preserveAspectRatio-support-1-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/as-image/img-preserveAspectRatio-support-2-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/as-image/img-preserveAspectRatio-support-2-expected.png index e7d9f31..2d48992 100644 --- a/third_party/WebKit/LayoutTests/platform/win/svg/as-image/img-preserveAspectRatio-support-2-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/svg/as-image/img-preserveAspectRatio-support-2-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/transforms/svg-css-transforms-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/transforms/svg-css-transforms-expected.png index 8278c5e..fdd03e4 100644 --- a/third_party/WebKit/LayoutTests/platform/win/svg/transforms/svg-css-transforms-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/svg/transforms/svg-css-transforms-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/zoom/page/zoom-img-preserveAspectRatio-support-1-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/zoom/page/zoom-img-preserveAspectRatio-support-1-expected.png index 38e0454..d0f3f4a 100644 --- a/third_party/WebKit/LayoutTests/platform/win/svg/zoom/page/zoom-img-preserveAspectRatio-support-1-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/svg/zoom/page/zoom-img-preserveAspectRatio-support-1-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/zoom/page/zoom-replaced-intrinsic-ratio-001-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/zoom/page/zoom-replaced-intrinsic-ratio-001-expected.png index 8ab4cc7..28d63d0 100644 --- a/third_party/WebKit/LayoutTests/platform/win/svg/zoom/page/zoom-replaced-intrinsic-ratio-001-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/svg/zoom/page/zoom-replaced-intrinsic-ratio-001-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/zoom/page/zoom-svg-through-object-with-auto-size-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/zoom/page/zoom-svg-through-object-with-auto-size-expected.png index d4105a01..00906f46 100644 --- a/third_party/WebKit/LayoutTests/platform/win/svg/zoom/page/zoom-svg-through-object-with-auto-size-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/svg/zoom/page/zoom-svg-through-object-with-auto-size-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/tables/mozilla/bugs/bug22019-expected.png b/third_party/WebKit/LayoutTests/platform/win/tables/mozilla/bugs/bug22019-expected.png index 3948de3..dd45647 100644 --- a/third_party/WebKit/LayoutTests/platform/win/tables/mozilla/bugs/bug22019-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/tables/mozilla/bugs/bug22019-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/tables/mozilla/bugs/bug2886-expected.png b/third_party/WebKit/LayoutTests/platform/win/tables/mozilla/bugs/bug2886-expected.png index f121db0..7817c0c 100644 --- a/third_party/WebKit/LayoutTests/platform/win/tables/mozilla/bugs/bug2886-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/tables/mozilla/bugs/bug2886-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/tables/mozilla/bugs/bug2947-expected.png b/third_party/WebKit/LayoutTests/platform/win/tables/mozilla/bugs/bug2947-expected.png index 3acf232..2d546da 100644 --- a/third_party/WebKit/LayoutTests/platform/win/tables/mozilla/bugs/bug2947-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/tables/mozilla/bugs/bug2947-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/tables/mozilla/bugs/bug6674-expected.png b/third_party/WebKit/LayoutTests/platform/win/tables/mozilla/bugs/bug6674-expected.png index b9c98b4..56efbae 100644 --- a/third_party/WebKit/LayoutTests/platform/win/tables/mozilla/bugs/bug6674-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/tables/mozilla/bugs/bug6674-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/tables/mozilla/collapsing_borders/bug41262-3-expected.png b/third_party/WebKit/LayoutTests/platform/win/tables/mozilla/collapsing_borders/bug41262-3-expected.png index 6703bbae8..a6aaac44 100644 --- a/third_party/WebKit/LayoutTests/platform/win/tables/mozilla/collapsing_borders/bug41262-3-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/tables/mozilla/collapsing_borders/bug41262-3-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/tables/mozilla/marvin/tables_style-expected.png b/third_party/WebKit/LayoutTests/platform/win/tables/mozilla/marvin/tables_style-expected.png index a3947a6..c38968ff 100644 --- a/third_party/WebKit/LayoutTests/platform/win/tables/mozilla/marvin/tables_style-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/tables/mozilla/marvin/tables_style-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/tables/mozilla_expected_failures/bugs/bug2479-5-expected.png b/third_party/WebKit/LayoutTests/platform/win/tables/mozilla_expected_failures/bugs/bug2479-5-expected.png index 7d3c6ec..e125784b 100644 --- a/third_party/WebKit/LayoutTests/platform/win/tables/mozilla_expected_failures/bugs/bug2479-5-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/tables/mozilla_expected_failures/bugs/bug2479-5-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/tables/mozilla_expected_failures/marvin/backgr_fixed-bg-expected.png b/third_party/WebKit/LayoutTests/platform/win/tables/mozilla_expected_failures/marvin/backgr_fixed-bg-expected.png index 7418c1c..5072b22 100644 --- a/third_party/WebKit/LayoutTests/platform/win/tables/mozilla_expected_failures/marvin/backgr_fixed-bg-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/tables/mozilla_expected_failures/marvin/backgr_fixed-bg-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/transforms/svg-vs-css-expected.png b/third_party/WebKit/LayoutTests/platform/win/transforms/svg-vs-css-expected.png index 30d1209..03ae2d7 100644 --- a/third_party/WebKit/LayoutTests/platform/win/transforms/svg-vs-css-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/transforms/svg-vs-css-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/layer-child-outline-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/layer-child-outline-expected.png index 7344b8d..071dcb0 100644 --- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/layer-child-outline-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/layer-child-outline-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/mojo-loading/css1/box_properties/border_style-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/mojo-loading/css1/box_properties/border_style-expected.png index c7145a3..ae80c9b 100644 --- a/third_party/WebKit/LayoutTests/platform/win/virtual/mojo-loading/css1/box_properties/border_style-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/virtual/mojo-loading/css1/box_properties/border_style-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/mojo-loading/css1/box_properties/border_style_inline-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/mojo-loading/css1/box_properties/border_style_inline-expected.png new file mode 100644 index 0000000..f0b51a7 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/win/virtual/mojo-loading/css1/box_properties/border_style_inline-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/mojo-loading/http/tests/misc/object-embedding-svg-delayed-size-negotiation-2-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/mojo-loading/http/tests/misc/object-embedding-svg-delayed-size-negotiation-2-expected.png index 62f7ed1..47f0ec68 100644 --- a/third_party/WebKit/LayoutTests/platform/win/virtual/mojo-loading/http/tests/misc/object-embedding-svg-delayed-size-negotiation-2-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/virtual/mojo-loading/http/tests/misc/object-embedding-svg-delayed-size-negotiation-2-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/prefer_compositing_to_lcd_text/compositing/overflow/border-radius-styles-with-composited-child-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/prefer_compositing_to_lcd_text/compositing/overflow/border-radius-styles-with-composited-child-expected.png index 6b0048e7..5cf728d 100644 --- a/third_party/WebKit/LayoutTests/platform/win/virtual/prefer_compositing_to_lcd_text/compositing/overflow/border-radius-styles-with-composited-child-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/virtual/prefer_compositing_to_lcd_text/compositing/overflow/border-radius-styles-with-composited-child-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/prefer_compositing_to_lcd_text/scrollbars/border-box-rect-clips-scrollbars-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/prefer_compositing_to_lcd_text/scrollbars/border-box-rect-clips-scrollbars-expected.png index 8a1e281..6499c40c 100644 --- a/third_party/WebKit/LayoutTests/platform/win/virtual/prefer_compositing_to_lcd_text/scrollbars/border-box-rect-clips-scrollbars-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/virtual/prefer_compositing_to_lcd_text/scrollbars/border-box-rect-clips-scrollbars-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/rootlayerscrolls/scrollbars/border-box-rect-clips-scrollbars-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/rootlayerscrolls/scrollbars/border-box-rect-clips-scrollbars-expected.png index 8a1e281..6499c40c 100644 --- a/third_party/WebKit/LayoutTests/platform/win/virtual/rootlayerscrolls/scrollbars/border-box-rect-clips-scrollbars-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/virtual/rootlayerscrolls/scrollbars/border-box-rect-clips-scrollbars-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_border-table-cell-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_border-table-cell-collapsed-border-expected.png index 2359ef5..519dca7 100644 --- a/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_border-table-cell-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_border-table-cell-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_border-table-cell-expected.png b/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_border-table-cell-expected.png index 0ec5faa..721f436c 100644 --- a/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_border-table-cell-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_border-table-cell-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_border-table-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_border-table-collapsed-border-expected.png index 4ed6a84..9c08b0de 100644 --- a/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_border-table-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_border-table-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_border-table-column-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_border-table-column-collapsed-border-expected.png index eeb7d96..d681f633 100644 --- a/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_border-table-column-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_border-table-column-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_border-table-column-expected.png b/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_border-table-column-expected.png index ee7418f..ddc5953 100644 --- a/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_border-table-column-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_border-table-column-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_border-table-column-group-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_border-table-column-group-collapsed-border-expected.png index 1e44d77..4d4a507 100644 --- a/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_border-table-column-group-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_border-table-column-group-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_border-table-column-group-expected.png b/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_border-table-column-group-expected.png index 9242bb1..f3acf10 100644 --- a/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_border-table-column-group-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_border-table-column-group-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_border-table-expected.png b/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_border-table-expected.png index aa0d768e..f5f33da 100644 --- a/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_border-table-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_border-table-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_border-table-quirks-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_border-table-quirks-collapsed-border-expected.png index 197c7ee..2e5aaf6a 100644 --- a/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_border-table-quirks-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_border-table-quirks-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_border-table-quirks-expected.png b/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_border-table-quirks-expected.png index 5e0e9345..da24812 100644 --- a/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_border-table-quirks-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_border-table-quirks-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_border-table-row-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_border-table-row-collapsed-border-expected.png index dba7e0aa..7bc73f87 100644 --- a/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_border-table-row-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_border-table-row-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_border-table-row-expected.png b/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_border-table-row-expected.png index 66250bcd..5797912b 100644 --- a/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_border-table-row-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_border-table-row-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_border-table-row-group-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_border-table-row-group-collapsed-border-expected.png index c69c9d2..9d48031 100644 --- a/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_border-table-row-group-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_border-table-row-group-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_border-table-row-group-expected.png b/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_border-table-row-group-expected.png index d18d304..17dfd83c 100644 --- a/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_border-table-row-group-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_border-table-row-group-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_layers-hide-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_layers-hide-collapsed-border-expected.png index f36f5e2..a70fc62 100644 --- a/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_layers-hide-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_layers-hide-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_layers-hide-expected.png b/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_layers-hide-expected.png index deec5d2..ac50390 100644 --- a/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_layers-hide-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_layers-hide-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_position-table-cell-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_position-table-cell-collapsed-border-expected.png index 8fb3385..b2b5b73 100644 --- a/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_position-table-cell-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_position-table-cell-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_position-table-cell-expected.png b/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_position-table-cell-expected.png index 9b05cb86..a8c356a 100644 --- a/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_position-table-cell-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_position-table-cell-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_position-table-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_position-table-collapsed-border-expected.png index aec8b1ac..da31412e 100644 --- a/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_position-table-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_position-table-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_position-table-column-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_position-table-column-collapsed-border-expected.png index f52d361..61f2cee 100644 --- a/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_position-table-column-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_position-table-column-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_position-table-column-expected.png b/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_position-table-column-expected.png index e801dd4..9eced7a5 100644 --- a/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_position-table-column-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_position-table-column-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_position-table-column-group-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_position-table-column-group-collapsed-border-expected.png index d2239d5..4fb0511 100644 --- a/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_position-table-column-group-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_position-table-column-group-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_position-table-column-group-expected.png b/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_position-table-column-group-expected.png index adef0983..724a0b1 100644 --- a/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_position-table-column-group-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_position-table-column-group-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_position-table-expected.png b/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_position-table-expected.png index 55ef1f36..75039c4 100644 --- a/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_position-table-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_position-table-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_position-table-row-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_position-table-row-collapsed-border-expected.png index 7064d91..d84a97c 100644 --- a/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_position-table-row-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_position-table-row-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_position-table-row-expected.png b/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_position-table-row-expected.png index 2e5edcd..abcb9d6 100644 --- a/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_position-table-row-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_position-table-row-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_position-table-row-group-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_position-table-row-group-collapsed-border-expected.png index 3cbfbd0..eca9425 100644 --- a/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_position-table-row-group-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_position-table-row-group-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_position-table-row-group-expected.png b/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_position-table-row-group-expected.png index 2d6ed22..85033f5 100644 --- a/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_position-table-row-group-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_position-table-row-group-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_simple-table-cell-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_simple-table-cell-collapsed-border-expected.png index ce962a961..960a6a74 100644 --- a/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_simple-table-cell-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_simple-table-cell-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_simple-table-cell-expected.png b/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_simple-table-cell-expected.png index 1ebcde18..bd22490 100644 --- a/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_simple-table-cell-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_simple-table-cell-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_simple-table-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_simple-table-collapsed-border-expected.png index 1cb2780..155f956 100644 --- a/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_simple-table-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_simple-table-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_simple-table-column-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_simple-table-column-collapsed-border-expected.png index 692cd93..c656bd3 100644 --- a/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_simple-table-column-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_simple-table-column-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_simple-table-column-expected.png b/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_simple-table-column-expected.png index df54319c..d544f5c 100644 --- a/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_simple-table-column-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_simple-table-column-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_simple-table-column-group-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_simple-table-column-group-collapsed-border-expected.png index bc6e3f0..637849c 100644 --- a/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_simple-table-column-group-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_simple-table-column-group-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_simple-table-column-group-expected.png b/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_simple-table-column-group-expected.png index 3956269f..0d70719 100644 --- a/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_simple-table-column-group-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_simple-table-column-group-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_simple-table-expected.png b/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_simple-table-expected.png index 01a6dfb..48d495a 100644 --- a/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_simple-table-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_simple-table-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_simple-table-row-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_simple-table-row-collapsed-border-expected.png index 20e29525..1e7508f 100644 --- a/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_simple-table-row-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_simple-table-row-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_simple-table-row-expected.png b/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_simple-table-row-expected.png index 61856240..6b15075 100644 --- a/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_simple-table-row-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_simple-table-row-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_simple-table-row-group-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_simple-table-row-group-collapsed-border-expected.png index d747543..4f9a41c 100644 --- a/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_simple-table-row-group-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_simple-table-row-group-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_simple-table-row-group-expected.png b/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_simple-table-row-group-expected.png index c582e33..dd6c083 100644 --- a/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_simple-table-row-group-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win7/fast/table/backgr_simple-table-row-group-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/fast/text-autosizing/tables/css-table-single-cell-lots-of-text-expected.png b/third_party/WebKit/LayoutTests/platform/win7/fast/text-autosizing/tables/css-table-single-cell-lots-of-text-expected.png index 11b632f..c1dd58a 100644 --- a/third_party/WebKit/LayoutTests/platform/win7/fast/text-autosizing/tables/css-table-single-cell-lots-of-text-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win7/fast/text-autosizing/tables/css-table-single-cell-lots-of-text-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/fast/text-autosizing/tables/fixed-table-single-cell-lots-of-text-expected.png b/third_party/WebKit/LayoutTests/platform/win7/fast/text-autosizing/tables/fixed-table-single-cell-lots-of-text-expected.png index f23653a..ec2bea888 100644 --- a/third_party/WebKit/LayoutTests/platform/win7/fast/text-autosizing/tables/fixed-table-single-cell-lots-of-text-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win7/fast/text-autosizing/tables/fixed-table-single-cell-lots-of-text-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/fast/text-autosizing/tables/nested-table-wrapping-expected.png b/third_party/WebKit/LayoutTests/platform/win7/fast/text-autosizing/tables/nested-table-wrapping-expected.png index 150f258..5d3a69f 100644 --- a/third_party/WebKit/LayoutTests/platform/win7/fast/text-autosizing/tables/nested-table-wrapping-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win7/fast/text-autosizing/tables/nested-table-wrapping-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/fast/text-autosizing/tables/nested-tables-expected.png b/third_party/WebKit/LayoutTests/platform/win7/fast/text-autosizing/tables/nested-tables-expected.png index ab3b48a0..49a71dd 100644 --- a/third_party/WebKit/LayoutTests/platform/win7/fast/text-autosizing/tables/nested-tables-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win7/fast/text-autosizing/tables/nested-tables-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/fast/text-autosizing/tables/single-cell-lots-of-text-expected.png b/third_party/WebKit/LayoutTests/platform/win7/fast/text-autosizing/tables/single-cell-lots-of-text-expected.png index e15d6ada..57fc73e 100644 --- a/third_party/WebKit/LayoutTests/platform/win7/fast/text-autosizing/tables/single-cell-lots-of-text-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win7/fast/text-autosizing/tables/single-cell-lots-of-text-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/fast/text-autosizing/tables/single-percent-width-cell-lots-of-text-expected.png b/third_party/WebKit/LayoutTests/platform/win7/fast/text-autosizing/tables/single-percent-width-cell-lots-of-text-expected.png index 2a011c1c..3c51113 100644 --- a/third_party/WebKit/LayoutTests/platform/win7/fast/text-autosizing/tables/single-percent-width-cell-lots-of-text-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win7/fast/text-autosizing/tables/single-percent-width-cell-lots-of-text-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/fast/text-autosizing/tables/table-cell-inflation-expected.png b/third_party/WebKit/LayoutTests/platform/win7/fast/text-autosizing/tables/table-cell-inflation-expected.png index 62a12d1b..ec6ba4f 100644 --- a/third_party/WebKit/LayoutTests/platform/win7/fast/text-autosizing/tables/table-cell-inflation-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win7/fast/text-autosizing/tables/table-cell-inflation-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/fast/text-autosizing/tables/table-for-layout-expected.png b/third_party/WebKit/LayoutTests/platform/win7/fast/text-autosizing/tables/table-for-layout-expected.png index a96744f..c8400b9 100644 --- a/third_party/WebKit/LayoutTests/platform/win7/fast/text-autosizing/tables/table-for-layout-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win7/fast/text-autosizing/tables/table-for-layout-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/fast/text-autosizing/tables/table-with-inline-block-expected.png b/third_party/WebKit/LayoutTests/platform/win7/fast/text-autosizing/tables/table-with-inline-block-expected.png index a57ce98..dbd44ea 100644 --- a/third_party/WebKit/LayoutTests/platform/win7/fast/text-autosizing/tables/table-with-inline-block-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win7/fast/text-autosizing/tables/table-with-inline-block-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/fast/text-autosizing/tables/wide-percentage-width-expected.png b/third_party/WebKit/LayoutTests/platform/win7/fast/text-autosizing/tables/wide-percentage-width-expected.png index b35ece2..40586bcb 100644 --- a/third_party/WebKit/LayoutTests/platform/win7/fast/text-autosizing/tables/wide-percentage-width-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win7/fast/text-autosizing/tables/wide-percentage-width-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/fast/text-autosizing/tables/wide-specified-width-expected.png b/third_party/WebKit/LayoutTests/platform/win7/fast/text-autosizing/tables/wide-specified-width-expected.png index fe2232d..1e14833 100644 --- a/third_party/WebKit/LayoutTests/platform/win7/fast/text-autosizing/tables/wide-specified-width-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win7/fast/text-autosizing/tables/wide-specified-width-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/tables/mozilla_expected_failures/marvin/backgr_fixed-bg-expected.png b/third_party/WebKit/LayoutTests/platform/win7/tables/mozilla_expected_failures/marvin/backgr_fixed-bg-expected.png index 3903a4e0..aee0faad 100644 --- a/third_party/WebKit/LayoutTests/platform/win7/tables/mozilla_expected_failures/marvin/backgr_fixed-bg-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win7/tables/mozilla_expected_failures/marvin/backgr_fixed-bg-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/virtual/threaded/inspector/tracing/timeline-js/timeline-runtime-stats-expected.txt b/third_party/WebKit/LayoutTests/platform/win7/virtual/threaded/inspector/tracing/timeline-js/timeline-runtime-stats-expected.txt new file mode 100644 index 0000000..ebed3d5 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/win7/virtual/threaded/inspector/tracing/timeline-js/timeline-runtime-stats-expected.txt
@@ -0,0 +1 @@ +Check that RuntimeCallStats are present in profile.
diff --git a/third_party/WebKit/LayoutTests/svg/as-background-image/same-image-two-instances-background-image-expected.png b/third_party/WebKit/LayoutTests/svg/as-background-image/same-image-two-instances-background-image-expected.png index 828464c..da0d6ae5 100644 --- a/third_party/WebKit/LayoutTests/svg/as-background-image/same-image-two-instances-background-image-expected.png +++ b/third_party/WebKit/LayoutTests/svg/as-background-image/same-image-two-instances-background-image-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/svg/as-image/same-image-two-instances-expected.png b/third_party/WebKit/LayoutTests/svg/as-image/same-image-two-instances-expected.png index bff33be..a29c721d 100644 --- a/third_party/WebKit/LayoutTests/svg/as-image/same-image-two-instances-expected.png +++ b/third_party/WebKit/LayoutTests/svg/as-image/same-image-two-instances-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/svg/as-object/object-box-sizing-no-width-height-expected.png b/third_party/WebKit/LayoutTests/svg/as-object/object-box-sizing-no-width-height-expected.png index eb20ccb..f2fb353 100644 --- a/third_party/WebKit/LayoutTests/svg/as-object/object-box-sizing-no-width-height-expected.png +++ b/third_party/WebKit/LayoutTests/svg/as-object/object-box-sizing-no-width-height-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/webaudio/AudioParam/audioparam-method-chaining.html b/third_party/WebKit/LayoutTests/webaudio/AudioParam/audioparam-method-chaining.html index f3195add..e869269 100644 --- a/third_party/WebKit/LayoutTests/webaudio/AudioParam/audioparam-method-chaining.html +++ b/third_party/WebKit/LayoutTests/webaudio/AudioParam/audioparam-method-chaining.html
@@ -12,7 +12,7 @@ <body> <script> - var sampleRate = 44100; + var sampleRate = 8000; // Create a dummy array for setValueCurveAtTime method. var curveArray = new Float32Array([5.0, 6.0]); @@ -53,7 +53,7 @@ // Task: test method chaining with invalid operation. audit.defineTask('invalid-operation', function (done) { - var context = new OfflineAudioContext(1, 44100, 44100); + var context = new OfflineAudioContext(1, sampleRate, sampleRate); var osc = context.createOscillator(); var amp1 = context.createGain(); var amp2 = context.createGain();
diff --git a/third_party/WebKit/LayoutTests/webaudio/BiquadFilter/biquad-automation.html b/third_party/WebKit/LayoutTests/webaudio/BiquadFilter/biquad-automation.html index 06476e6..476dc19c 100644 --- a/third_party/WebKit/LayoutTests/webaudio/BiquadFilter/biquad-automation.html +++ b/third_party/WebKit/LayoutTests/webaudio/BiquadFilter/biquad-automation.html
@@ -18,7 +18,7 @@ var sampleRate = 16000; // How long to render for each test. - var renderDuration = 1; + var renderDuration = 0.5; // Where to end the automations. Fairly arbitrary, but must end before // the renderDuration. var automationEndTime = renderDuration / 2; @@ -199,7 +199,7 @@ f.Q.linearRampToValueAtTime(parameters.Q[1], automationEndTime); context.startRendering() - .then(createFilterVerifier(createBandpassFilter, 1.1062e-6, parameters, b.getChannelData(0), + .then(createFilterVerifier(createBandpassFilter, 1.16232e-6, parameters, b.getChannelData(0), "Output of bandpass filter with Q automation")) .then(done); }); @@ -229,7 +229,7 @@ f.gain.linearRampToValueAtTime(parameters.gain[1], automationEndTime); context.startRendering() - .then(createFilterVerifier(createLowShelfFilter, 1.4306e-5, parameters, b.getChannelData(0), + .then(createFilterVerifier(createLowShelfFilter, 2.7657e-5, parameters, b.getChannelData(0), "Output of lowshelf filter with gain automation")) .then(done); }); @@ -253,7 +253,7 @@ f.detune.linearRampToValueAtTime(parameters.detune[1], automationEndTime); context.startRendering() - .then(createFilterVerifier(createBandpassFilter, 2.9535e-5, parameters, b.getChannelData(0), + .then(createFilterVerifier(createBandpassFilter, 3.1471e-5, parameters, b.getChannelData(0), "Output of bandpass filter with detune automation")) .then(done); });
diff --git a/third_party/WebKit/LayoutTests/webaudio/IIRFilter/iirfilter.html b/third_party/WebKit/LayoutTests/webaudio/IIRFilter/iirfilter.html index 2053af5..2b82ba1 100644 --- a/third_party/WebKit/LayoutTests/webaudio/IIRFilter/iirfilter.html +++ b/third_party/WebKit/LayoutTests/webaudio/IIRFilter/iirfilter.html
@@ -11,8 +11,8 @@ <body> <script> - var sampleRate = 48000; - var testDurationSec = 1; + var sampleRate = 24000; + var testDurationSec = 0.25; var testFrames = testDurationSec * sampleRate; var audit = Audit.createTaskRunner();
diff --git a/third_party/WebKit/Source/bindings/core/v8/ScriptWrappable.h b/third_party/WebKit/Source/bindings/core/v8/ScriptWrappable.h index 2caec00..388b12d0 100644 --- a/third_party/WebKit/Source/bindings/core/v8/ScriptWrappable.h +++ b/third_party/WebKit/Source/bindings/core/v8/ScriptWrappable.h
@@ -48,10 +48,6 @@ TraceWrapperBase() = default; virtual bool isScriptWrappable() const { return false; } - void markAndDispatchTraceWrappers(const WrapperVisitor* visitor) const { - visitor->dispatchTraceWrappers(this); - } - DECLARE_VIRTUAL_TRACE_WRAPPERS(){}; }; @@ -165,11 +161,6 @@ // ScriptWrappableVisitor::markWrapper(ScriptWrappable*, v8::Isolate*) void markWrapper(const WrapperVisitor*) const; - void markAndDispatchTraceWrappers(const WrapperVisitor* visitor) const { - visitor->markWrappersInAllWorlds(this); - visitor->dispatchTraceWrappers(this); - } - private: // These classes are exceptionally allowed to use mainWorldWrapper(). friend class DOMDataStore;
diff --git a/third_party/WebKit/Source/bindings/core/v8/ScriptWrappableVisitorTest.cpp b/third_party/WebKit/Source/bindings/core/v8/ScriptWrappableVisitorTest.cpp index bd78c6c6..bf7d773 100644 --- a/third_party/WebKit/Source/bindings/core/v8/ScriptWrappableVisitorTest.cpp +++ b/third_party/WebKit/Source/bindings/core/v8/ScriptWrappableVisitorTest.cpp
@@ -171,11 +171,11 @@ visitor->markAndPushToMarkingDeque(object); - EXPECT_EQ(visitor->getMarkingDeque()->first().rawObjectPointer(), object); + EXPECT_EQ(visitor->getMarkingDeque()->front().rawObjectPointer(), object); preciselyCollectGarbage(); - EXPECT_EQ(visitor->getMarkingDeque()->first().rawObjectPointer(), nullptr); + EXPECT_EQ(visitor->getMarkingDeque()->front().rawObjectPointer(), nullptr); visitor->AbortTracing(); }
diff --git a/third_party/WebKit/Source/bindings/core/v8/SerializedScriptValue.cpp b/third_party/WebKit/Source/bindings/core/v8/SerializedScriptValue.cpp index d9d92bc3..a79e51d 100644 --- a/third_party/WebKit/Source/bindings/core/v8/SerializedScriptValue.cpp +++ b/third_party/WebKit/Source/bindings/core/v8/SerializedScriptValue.cpp
@@ -109,12 +109,12 @@ } SerializedScriptValue::SerializedScriptValue() - : m_externallyAllocatedMemory(0), - m_adjustTransferableExternalAllocationOnContextTransfer(false) {} + : m_hasRegisteredExternalAllocation(false), + m_transferablesNeedExternalAllocationRegistration(false) {} SerializedScriptValue::SerializedScriptValue(const String& wireData) - : m_externallyAllocatedMemory(0), - m_adjustTransferableExternalAllocationOnContextTransfer(false) { + : m_hasRegisteredExternalAllocation(false), + m_transferablesNeedExternalAllocationRegistration(false) { size_t byteLength = wireData.length() * 2; m_dataBuffer.reset(static_cast<uint8_t*>(WTF::Partitions::bufferMalloc( byteLength, "SerializedScriptValue buffer"))); @@ -127,10 +127,10 @@ // If the allocated memory was not registered before, then this class is // likely used in a context other than Worker's onmessage environment and the // presence of current v8 context is not guaranteed. Avoid calling v8 then. - if (m_externallyAllocatedMemory) { + if (m_hasRegisteredExternalAllocation) { ASSERT(v8::Isolate::GetCurrent()); v8::Isolate::GetCurrent()->AdjustAmountOfExternalAllocatedMemory( - -static_cast<int64_t>(m_externallyAllocatedMemory)); + -static_cast<int64_t>(dataLengthInBytes())); } } @@ -446,47 +446,39 @@ return contents; } -void SerializedScriptValue::unregisterMemoryAllocatedByCurrentScriptContext() { - // If the caller is the only one holding a reference then this serialized - // value hasn't transferred ownership & no unregistration of allocation - // costs wanted. - if (hasOneRef() || m_adjustTransferableExternalAllocationOnContextTransfer) - return; - if (m_externallyAllocatedMemory) { +void SerializedScriptValue:: + unregisterMemoryAllocatedWithCurrentScriptContext() { + if (m_hasRegisteredExternalAllocation) { v8::Isolate::GetCurrent()->AdjustAmountOfExternalAllocatedMemory( - -static_cast<int64_t>(m_externallyAllocatedMemory)); - m_externallyAllocatedMemory = 0; + -static_cast<int64_t>(dataLengthInBytes())); + m_hasRegisteredExternalAllocation = false; } + // TODO: if other transferables start accounting for their external // allocations with V8, extend this with corresponding cases. - if (m_arrayBufferContentsArray) { - for (auto& buffer : *m_arrayBufferContentsArray) { - buffer.adjustExternalAllocatedMemoryUponContextTransfer( - WTF::ArrayBufferContents::Leave); - } - // Mark value as needing re-registration of external allocation - // costs in its target context, as handled by - // |registerMemoryAllocatedWithCurrentScriptContext()|. - m_adjustTransferableExternalAllocationOnContextTransfer = true; + if (m_arrayBufferContentsArray && + !m_transferablesNeedExternalAllocationRegistration) { + for (auto& buffer : *m_arrayBufferContentsArray) + buffer.unregisterExternalAllocationWithCurrentContext(); + m_transferablesNeedExternalAllocationRegistration = true; } } void SerializedScriptValue::registerMemoryAllocatedWithCurrentScriptContext() { - if (m_externallyAllocatedMemory) + if (m_hasRegisteredExternalAllocation) return; - m_externallyAllocatedMemory = dataLengthInBytes(); - int64_t diff = static_cast<int64_t>(m_externallyAllocatedMemory); + m_hasRegisteredExternalAllocation = true; + int64_t diff = static_cast<int64_t>(dataLengthInBytes()); DCHECK_GE(diff, 0); v8::Isolate::GetCurrent()->AdjustAmountOfExternalAllocatedMemory(diff); - if (m_adjustTransferableExternalAllocationOnContextTransfer) { - DCHECK(m_arrayBufferContentsArray); - for (size_t i = 0; i < m_arrayBufferContentsArray->size(); ++i) { - WTF::ArrayBufferContents& buffer = m_arrayBufferContentsArray->at(i); - buffer.adjustExternalAllocatedMemoryUponContextTransfer( - WTF::ArrayBufferContents::Enter); - } - m_adjustTransferableExternalAllocationOnContextTransfer = false; + + // Only (re)register allocation cost for transferables if this + // SerializedScriptValue has explicitly unregistered them before. + if (m_arrayBufferContentsArray && + m_transferablesNeedExternalAllocationRegistration) { + for (auto& buffer : *m_arrayBufferContentsArray) + buffer.registerExternalAllocationWithCurrentContext(); } }
diff --git a/third_party/WebKit/Source/bindings/core/v8/SerializedScriptValue.h b/third_party/WebKit/Source/bindings/core/v8/SerializedScriptValue.h index e74e3dfd8..9c4e3a9 100644 --- a/third_party/WebKit/Source/bindings/core/v8/SerializedScriptValue.h +++ b/third_party/WebKit/Source/bindings/core/v8/SerializedScriptValue.h
@@ -136,13 +136,13 @@ // The memory registration is revoked automatically in destructor. void registerMemoryAllocatedWithCurrentScriptContext(); - // Upon passing a serialized value from one context to another (via a - // postMessage()), the allocation amounts it has registered with the - // 'origining' context must be discharged, as the 'target' context will assume - // ownership of value. This method takes care of the first part of the - // external allocation bookkeeping, the above registration method the other - // half. - void unregisterMemoryAllocatedByCurrentScriptContext(); + // The dual, unregistering / subtracting the external memory allocation costs + // of this SerializedScriptValue with the current context. This includes + // discounting the cost of the transferables. + // + // The value is updated and marked as having no allocations registered, + // hence subsequent calls will be no-ops. + void unregisterMemoryAllocatedWithCurrentScriptContext(); const uint8_t* data() const { return m_dataBuffer.get(); } size_t dataLengthInBytes() const { return m_dataBufferSize; } @@ -188,8 +188,9 @@ std::unique_ptr<ArrayBufferContentsArray> m_arrayBufferContentsArray; std::unique_ptr<ImageBitmapContentsArray> m_imageBitmapContentsArray; BlobDataHandleMap m_blobDataHandles; - size_t m_externallyAllocatedMemory; - bool m_adjustTransferableExternalAllocationOnContextTransfer; + + bool m_hasRegisteredExternalAllocation; + bool m_transferablesNeedExternalAllocationRegistration; }; template <>
diff --git a/third_party/WebKit/Source/bindings/core/v8/TraceWrapperReference.md b/third_party/WebKit/Source/bindings/core/v8/TraceWrapperReference.md index 3547ce0..4908ec22 100644 --- a/third_party/WebKit/Source/bindings/core/v8/TraceWrapperReference.md +++ b/third_party/WebKit/Source/bindings/core/v8/TraceWrapperReference.md
@@ -257,7 +257,8 @@ In the case we cannot afford inheriting from ``TraceWrapperBase``, which will add a vtable pointer for tracing wrappers, use -``DECLARE_TRACE_WRAPPERS_WITHOUT_BASE`` to declare a traceWrappers method. +``DEFINE_TRAIT_FOR_TRACE_WRAPPERS(ClassName)`` after defining +``ClassName`` to define the proper tracing specializations. ## Explicit write barriers
diff --git a/third_party/WebKit/Source/bindings/core/v8/custom/V8WindowCustom.cpp b/third_party/WebKit/Source/bindings/core/v8/custom/V8WindowCustom.cpp index ed8330b..9151029 100644 --- a/third_party/WebKit/Source/bindings/core/v8/custom/V8WindowCustom.cpp +++ b/third_party/WebKit/Source/bindings/core/v8/custom/V8WindowCustom.cpp
@@ -284,9 +284,9 @@ if (exceptionState.hadException()) return; + message->unregisterMemoryAllocatedWithCurrentScriptContext(); window->postMessage(message.get(), transferables.messagePorts, targetOrigin, source, exceptionState); - message->unregisterMemoryAllocatedByCurrentScriptContext(); } void V8Window::openMethodCustom(
diff --git a/third_party/WebKit/Source/bindings/templates/methods.cpp.tmpl b/third_party/WebKit/Source/bindings/templates/methods.cpp.tmpl index 33cbc14..a4fd928 100644 --- a/third_party/WebKit/Source/bindings/templates/methods.cpp.tmpl +++ b/third_party/WebKit/Source/bindings/templates/methods.cpp.tmpl
@@ -465,8 +465,8 @@ // FIXME: Only pass scriptState/exceptionState if instance really requires it. ScriptState* scriptState = ScriptState::current(info.GetIsolate()); + message->unregisterMemoryAllocatedWithCurrentScriptContext(); instance->postMessage(scriptState, message.get(), transferables.messagePorts, exceptionState); - message->unregisterMemoryAllocatedByCurrentScriptContext(); } {% endmacro %}
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestObject.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestObject.cpp index 689a293..23b58c13 100644 --- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestObject.cpp +++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestObject.cpp
@@ -7727,8 +7727,8 @@ // FIXME: Only pass scriptState/exceptionState if instance really requires it. ScriptState* scriptState = ScriptState::current(info.GetIsolate()); + message->unregisterMemoryAllocatedWithCurrentScriptContext(); instance->postMessage(scriptState, message.get(), transferables.messagePorts, exceptionState); - message->unregisterMemoryAllocatedByCurrentScriptContext(); } static void activityLoggingForAllWorldsPerWorldBindingsVoidMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) {
diff --git a/third_party/WebKit/Source/core/css/CSSFontFace.cpp b/third_party/WebKit/Source/core/css/CSSFontFace.cpp index 48c50257..2443bf39 100644 --- a/third_party/WebKit/Source/core/css/CSSFontFace.cpp +++ b/third_party/WebKit/Source/core/css/CSSFontFace.cpp
@@ -54,7 +54,7 @@ } void CSSFontFace::fontLoaded(RemoteFontFaceSource* source) { - if (!isValid() || source != m_sources.first()) + if (!isValid() || source != m_sources.front()) return; if (loadStatus() == FontFace::Loading) { @@ -75,14 +75,14 @@ } size_t CSSFontFace::approximateBlankCharacterCount() const { - if (!m_sources.isEmpty() && m_sources.first()->isBlank() && + if (!m_sources.isEmpty() && m_sources.front()->isBlank() && m_segmentedFontFace) return m_segmentedFontFace->approximateCharacterCount(); return 0; } void CSSFontFace::didBecomeVisibleFallback(RemoteFontFaceSource* source) { - if (!isValid() || source != m_sources.first()) + if (!isValid() || source != m_sources.front()) return; if (m_segmentedFontFace) m_segmentedFontFace->fontFaceInvalidated(); @@ -94,7 +94,7 @@ return nullptr; while (!m_sources.isEmpty()) { - Member<CSSFontFaceSource>& source = m_sources.first(); + Member<CSSFontFaceSource>& source = m_sources.front(); if (RefPtr<SimpleFontData> result = source->getFontData(fontDescription)) { if (loadStatus() == FontFace::Unloaded && (source->isLoading() || source->isLoaded())) @@ -154,7 +154,7 @@ ASSERT(loadStatus() == FontFace::Loading); while (!m_sources.isEmpty()) { - Member<CSSFontFaceSource>& source = m_sources.first(); + Member<CSSFontFaceSource>& source = m_sources.front(); if (source->isValid()) { if (source->isLocal()) { if (source->isLocalFontAvailable(fontDescription)) {
diff --git a/third_party/WebKit/Source/core/css/CSSFontFace.h b/third_party/WebKit/Source/core/css/CSSFontFace.h index 8d217faa..bac50c5 100644 --- a/third_party/WebKit/Source/core/css/CSSFontFace.h +++ b/third_party/WebKit/Source/core/css/CSSFontFace.h
@@ -81,7 +81,7 @@ void load(); void load(const FontDescription&); - bool hadBlankText() { return isValid() && m_sources.first()->hadBlankText(); } + bool hadBlankText() { return isValid() && m_sources.front()->hadBlankText(); } DECLARE_TRACE();
diff --git a/third_party/WebKit/Source/core/css/mediaControls.css b/third_party/WebKit/Source/core/css/mediaControls.css index 7acdba1..3308cda5 100644 --- a/third_party/WebKit/Source/core/css/mediaControls.css +++ b/third_party/WebKit/Source/core/css/mediaControls.css
@@ -123,7 +123,8 @@ flex: 1 1; min-height: 0; width: 100%; - /* prevent disambiguation zooms with the panel */ + /* Prevent disambiguation zooms with the panel. If this changes, it must + * also be changed in core/html/shadow/MediaControls.cpp. */ margin-bottom: 10px; text-indent: 0; box-sizing: border-box;
diff --git a/third_party/WebKit/Source/core/css/mediaControlsAndroid.css b/third_party/WebKit/Source/core/css/mediaControlsAndroid.css index ac07ffdf..341d49c 100644 --- a/third_party/WebKit/Source/core/css/mediaControlsAndroid.css +++ b/third_party/WebKit/Source/core/css/mediaControlsAndroid.css
@@ -35,6 +35,8 @@ } audio::-webkit-media-controls-panel, video::-webkit-media-controls-panel { + /* If this changes, it must also be changed in + * core/html/shadow/MediaControls.cpp. */ height: 48px; min-width: 48px; line-height: 48px;
diff --git a/third_party/WebKit/Source/core/dom/ElementRareData.h b/third_party/WebKit/Source/core/dom/ElementRareData.h index 22763ff..687cac5 100644 --- a/third_party/WebKit/Source/core/dom/ElementRareData.h +++ b/third_party/WebKit/Source/core/dom/ElementRareData.h
@@ -213,6 +213,8 @@ explicit ElementRareData(LayoutObject*); }; +DEFINE_TRAIT_FOR_TRACE_WRAPPERS(ElementRareData); + inline LayoutSize defaultMinimumSizeForResizing() { return LayoutSize(LayoutUnit::max(), LayoutUnit::max()); }
diff --git a/third_party/WebKit/Source/core/dom/NodeListsNodeData.h b/third_party/WebKit/Source/core/dom/NodeListsNodeData.h index 61674ae..fc4cd8d 100644 --- a/third_party/WebKit/Source/core/dom/NodeListsNodeData.h +++ b/third_party/WebKit/Source/core/dom/NodeListsNodeData.h
@@ -169,7 +169,7 @@ } DECLARE_TRACE(); - DECLARE_TRACE_WRAPPERS_WITHOUT_BASE(); + DECLARE_TRACE_WRAPPERS(); private: NodeListsNodeData() : m_childNodeList(nullptr) {} @@ -189,6 +189,8 @@ TagCollectionCacheNS m_tagCollectionCacheNS; }; +DEFINE_TRAIT_FOR_TRACE_WRAPPERS(NodeListsNodeData); + template <typename Collection> inline Collection* ContainerNode::ensureCachedCollection(CollectionType type) { ThreadState::MainThreadGCForbiddenScope gcForbidden;
diff --git a/third_party/WebKit/Source/core/dom/NodeRareData.h b/third_party/WebKit/Source/core/dom/NodeRareData.h index 241b9f1..d08dd57 100644 --- a/third_party/WebKit/Source/core/dom/NodeRareData.h +++ b/third_party/WebKit/Source/core/dom/NodeRareData.h
@@ -74,7 +74,7 @@ visitor->trace(m_transientRegistry); } - DECLARE_TRACE_WRAPPERS_WITHOUT_BASE() { + DEFINE_INLINE_TRACE_WRAPPERS() { for (auto registration : m_registry) { visitor->traceWrappers(registration); } @@ -91,6 +91,8 @@ m_transientRegistry; }; +DEFINE_TRAIT_FOR_TRACE_WRAPPERS(NodeMutationObserverData); + class NodeRareData : public GarbageCollectedFinalized<NodeRareData>, public NodeRareDataBase { WTF_MAKE_NONCOPYABLE(NodeRareData); @@ -157,7 +159,7 @@ DECLARE_TRACE_AFTER_DISPATCH(); void finalizeGarbageCollectedObject(); - DECLARE_TRACE_WRAPPERS_WITHOUT_BASE(); + DECLARE_TRACE_WRAPPERS(); DECLARE_TRACE_WRAPPERS_AFTER_DISPATCH(); protected: @@ -180,6 +182,8 @@ unsigned m_isElementRareData : 1; }; +DEFINE_TRAIT_FOR_TRACE_WRAPPERS(NodeRareData); + } // namespace blink #endif // NodeRareData_h
diff --git a/third_party/WebKit/Source/core/dom/ScriptRunner.cpp b/third_party/WebKit/Source/core/dom/ScriptRunner.cpp index eaf82d8..333c2d8 100644 --- a/third_party/WebKit/Source/core/dom/ScriptRunner.cpp +++ b/third_party/WebKit/Source/core/dom/ScriptRunner.cpp
@@ -95,10 +95,10 @@ void ScriptRunner::scheduleReadyInOrderScripts() { while (!m_pendingInOrderScripts.isEmpty() && - m_pendingInOrderScripts.first()->isReady()) { + m_pendingInOrderScripts.front()->isReady()) { // A ScriptLoader that failed is responsible for cancelling itself // notifyScriptLoadError(); it continues this draining of ready scripts. - if (m_pendingInOrderScripts.first()->errorOccurred()) + if (m_pendingInOrderScripts.front()->errorOccurred()) break; m_inOrderScriptsToExecuteSoon.push_back( m_pendingInOrderScripts.takeFirst());
diff --git a/third_party/WebKit/Source/core/editing/Editor.cpp b/third_party/WebKit/Source/core/editing/Editor.cpp index bad48749..6bb6beb 100644 --- a/third_party/WebKit/Source/core/editing/Editor.cpp +++ b/third_party/WebKit/Source/core/editing/Editor.cpp
@@ -30,6 +30,7 @@ #include "core/CSSPropertyNames.h" #include "core/EventNames.h" #include "core/HTMLNames.h" +#include "core/InputTypeNames.h" #include "core/clipboard/DataObject.h" #include "core/clipboard/DataTransfer.h" #include "core/clipboard/Pasteboard.h" @@ -135,6 +136,15 @@ return InputEvent::EventIsComposing::NotComposing; } +bool isInPasswordFieldWithUnrevealedPassword(const Position& position) { + TextControlElement* textControl = enclosingTextControl(position); + if (!isHTMLInputElement(textControl)) + return false; + HTMLInputElement* input = toHTMLInputElement(textControl); + return (input->type() == InputTypeNames::password) && + !input->shouldRevealPassword(); +} + } // anonymous namespace Editor::RevealSelectionScope::RevealSelectionScope(Editor* editor) @@ -325,7 +335,7 @@ return true; FrameSelection& selection = frame().selection(); return selection.computeVisibleSelectionInDOMTreeDeprecated().isRange() && - !isInPasswordField( + !isInPasswordFieldWithUnrevealedPassword( frame().selection().computeVisibleSelectionInDOMTree().start()); }
diff --git a/third_party/WebKit/Source/core/editing/EditorTest.cpp b/third_party/WebKit/Source/core/editing/EditorTest.cpp index b2bd10e..3e5cd3a 100644 --- a/third_party/WebKit/Source/core/editing/EditorTest.cpp +++ b/third_party/WebKit/Source/core/editing/EditorTest.cpp
@@ -10,6 +10,7 @@ #include "core/html/HTMLDivElement.h" #include "core/html/HTMLHeadElement.h" #include "core/html/HTMLHtmlElement.h" +#include "core/html/HTMLInputElement.h" namespace blink { @@ -59,4 +60,26 @@ EXPECT_EQ(document().documentElement(), head->parentNode()); } +TEST_F(EditorTest, copyGeneratedPassword) { + // Checks that if the password field has the value generated by Chrome + // (HTMLInputElement::shouldRevealPassword will be true), copying the field + // should be available. + const char* bodyContent = "<input type='password' id='password'></input>"; + setBodyContent(bodyContent); + + HTMLInputElement& element = + toHTMLInputElement(*document().getElementById("password")); + + const String kPasswordValue = "secret"; + element.focus(); + element.setValue(kPasswordValue); + element.setSelectionRange(0, kPasswordValue.length()); + + Editor& editor = document().frame()->editor(); + EXPECT_FALSE(editor.canCopy()); + + element.setShouldRevealPassword(true); + EXPECT_TRUE(editor.canCopy()); +} + } // namespace blink
diff --git a/third_party/WebKit/Source/core/frame/FrameConsole.cpp b/third_party/WebKit/Source/core/frame/FrameConsole.cpp index 03d0c12..0bd2317d 100644 --- a/third_party/WebKit/Source/core/frame/FrameConsole.cpp +++ b/third_party/WebKit/Source/core/frame/FrameConsole.cpp
@@ -28,24 +28,40 @@ #include "core/frame/FrameConsole.h" +#include <memory> #include "bindings/core/v8/SourceLocation.h" #include "core/frame/FrameHost.h" #include "core/frame/LocalFrame.h" #include "core/inspector/ConsoleMessage.h" #include "core/inspector/ConsoleMessageStorage.h" #include "core/inspector/MainThreadDebugger.h" +#include "core/loader/DocumentLoader.h" #include "core/page/ChromeClient.h" #include "core/page/Page.h" #include "platform/network/ResourceError.h" #include "platform/network/ResourceResponse.h" #include "wtf/text/StringBuilder.h" -#include <memory> namespace blink { FrameConsole::FrameConsole(LocalFrame& frame) : m_frame(&frame) {} void FrameConsole::addMessage(ConsoleMessage* consoleMessage) { + // PlzNavigate: when trying to commit a navigation, the SourceLocation + // information for how the request was triggered has been stored in the + // provisional DocumentLoader. Use it instead. + DocumentLoader* provisionalLoader = + m_frame->loader().provisionalDocumentLoader(); + if (provisionalLoader) { + std::unique_ptr<SourceLocation> sourceLocation = + provisionalLoader->copySourceLocation(); + if (sourceLocation) { + consoleMessage = ConsoleMessage::create( + consoleMessage->source(), consoleMessage->level(), + consoleMessage->message(), std::move(sourceLocation)); + } + } + if (addMessageToStorage(consoleMessage)) reportMessageToClient(consoleMessage->source(), consoleMessage->level(), consoleMessage->message(),
diff --git a/third_party/WebKit/Source/core/html/parser/HTMLDocumentParser.cpp b/third_party/WebKit/Source/core/html/parser/HTMLDocumentParser.cpp index 51efd1d..873d7f7 100644 --- a/third_party/WebKit/Source/core/html/parser/HTMLDocumentParser.cpp +++ b/third_party/WebKit/Source/core/html/parser/HTMLDocumentParser.cpp
@@ -635,7 +635,7 @@ if (m_speculations.isEmpty() || m_parserScheduler->yieldIfNeeded( - session, m_speculations.first()->startingScript)) + session, m_speculations.front()->startingScript)) break; } }
diff --git a/third_party/WebKit/Source/core/html/parser/HTMLParserScriptRunner.cpp b/third_party/WebKit/Source/core/html/parser/HTMLParserScriptRunner.cpp index 13e32ea..083b919 100644 --- a/third_party/WebKit/Source/core/html/parser/HTMLParserScriptRunner.cpp +++ b/third_party/WebKit/Source/core/html/parser/HTMLParserScriptRunner.cpp
@@ -367,7 +367,7 @@ if (pendingScript == parserBlockingScript()) { m_parserBlockingScript = nullptr; } else { - CHECK_EQ(pendingScript, m_scriptsToExecuteAfterParsing.first()); + CHECK_EQ(pendingScript, m_scriptsToExecuteAfterParsing.front()); // TODO(hiroshige): Remove this CHECK() before going to beta. // This is only to make clusterfuzz to find a test case that executes @@ -505,18 +505,18 @@ while (!m_scriptsToExecuteAfterParsing.isEmpty()) { DCHECK(!isExecutingScript()); DCHECK(!hasParserBlockingScript()); - DCHECK(m_scriptsToExecuteAfterParsing.first()->resource()); + DCHECK(m_scriptsToExecuteAfterParsing.front()->resource()); // 1. "Spin the event loop until the first script in the list of scripts // that will execute when the document has finished parsing // has its "ready to be parser-executed" flag set and // the parser's Document has no style sheet that is blocking scripts." // TODO(hiroshige): Is the latter part checked anywhere? - if (!m_scriptsToExecuteAfterParsing.first()->isReady()) { - m_scriptsToExecuteAfterParsing.first()->watchForLoad(this); - traceParserBlockingScript(m_scriptsToExecuteAfterParsing.first().get(), + if (!m_scriptsToExecuteAfterParsing.front()->isReady()) { + m_scriptsToExecuteAfterParsing.front()->watchForLoad(this); + traceParserBlockingScript(m_scriptsToExecuteAfterParsing.front().get(), !m_document->isScriptExecutionReady()); - m_scriptsToExecuteAfterParsing.first()->markParserBlockingLoadStartTime(); + m_scriptsToExecuteAfterParsing.front()->markParserBlockingLoadStartTime(); return false; }
diff --git a/third_party/WebKit/Source/core/html/shadow/MediaControls.cpp b/third_party/WebKit/Source/core/html/shadow/MediaControls.cpp index 0c808b0..6fcf264 100644 --- a/third_party/WebKit/Source/core/html/shadow/MediaControls.cpp +++ b/third_party/WebKit/Source/core/html/shadow/MediaControls.cpp
@@ -29,6 +29,9 @@ #include "bindings/core/v8/ExceptionState.h" #include "core/dom/ClientRect.h" #include "core/dom/Fullscreen.h" +#include "core/dom/ResizeObserver.h" +#include "core/dom/ResizeObserverCallback.h" +#include "core/dom/ResizeObserverEntry.h" #include "core/dom/TaskRunnerHelper.h" #include "core/events/MouseEvent.h" #include "core/frame/Settings.h" @@ -46,6 +49,23 @@ namespace blink { +namespace { + +// TODO(steimel): should have better solution than hard-coding pixel values. +// Defined in core/css/mediaControls.css, core/css/mediaControlsAndroid.css, +// and core/paint/MediaControlsPainter.cpp. +constexpr int kOverlayPlayButtonWidth = 48; +constexpr int kOverlayPlayButtonHeight = 48; +constexpr int kOverlayBottomMargin = 10; +constexpr int kAndroidMediaPanelHeight = 48; + +constexpr int kMinWidthForOverlayPlayButton = kOverlayPlayButtonWidth; +constexpr int kMinHeightForOverlayPlayButton = kOverlayPlayButtonHeight + + kAndroidMediaPanelHeight + + (2 * kOverlayBottomMargin); + +} // anonymous namespace + // If you change this value, then also update the corresponding value in // LayoutTests/media/media-controls.js. static const double timeWithoutMouseMovementBeforeHidingMediaControls = 3; @@ -128,6 +148,31 @@ // Count of number open batches for controls visibility. int MediaControls::BatchedControlUpdate::s_batchDepth = 0; +class MediaControls::MediaControlsResizeObserverCallback final + : public ResizeObserverCallback { + public: + explicit MediaControlsResizeObserverCallback(MediaControls* controls) + : m_controls(controls) { + DCHECK(controls); + } + ~MediaControlsResizeObserverCallback() override = default; + + void handleEvent(const HeapVector<Member<ResizeObserverEntry>>& entries, + ResizeObserver* observer) override { + DCHECK_EQ(1u, entries.size()); + DCHECK_EQ(entries[0]->target(), m_controls->m_mediaElement); + m_controls->notifyElementSizeChanged(entries[0]->contentRect()); + } + + DEFINE_INLINE_TRACE() { + visitor->trace(m_controls); + ResizeObserverCallback::trace(visitor); + } + + private: + Member<MediaControls> m_controls; +}; + MediaControls::MediaControls(HTMLMediaElement& mediaElement) : HTMLDivElement(mediaElement.document()), m_mediaElement(&mediaElement), @@ -160,12 +205,16 @@ m_hideTimerBehaviorFlags(IgnoreNone), m_isMouseOverControls(false), m_isPausedForScrubbing(false), - m_panelWidthChangedTimer(TaskRunnerHelper::get(TaskType::UnspecedTimer, - &mediaElement.document()), - this, - &MediaControls::panelWidthChangedTimerFired), - m_panelWidth(0), - m_keepShowingUntilTimerFires(false) {} + m_resizeObserver(ResizeObserver::create( + mediaElement.document(), + new MediaControlsResizeObserverCallback(this))), + m_elementSizeChangedTimer(TaskRunnerHelper::get(TaskType::UnspecedTimer, + &mediaElement.document()), + this, + &MediaControls::elementSizeChangedTimerFired), + m_keepShowingUntilTimerFires(false) { + m_resizeObserver->observe(m_mediaElement); +} MediaControls* MediaControls::create(HTMLMediaElement& mediaElement, ShadowRoot& shadowRoot) { @@ -365,6 +414,13 @@ if (m_orientationLockDelegate) m_orientationLockDelegate->attach(); + if (!m_resizeObserver) { + m_resizeObserver = + ResizeObserver::create(m_mediaElement->document(), + new MediaControlsResizeObserverCallback(this)); + m_resizeObserver->observe(m_mediaElement); + } + return HTMLDivElement::insertedInto(root); } @@ -378,6 +434,8 @@ m_mediaEventListener->detach(); if (m_orientationLockDelegate) m_orientationLockDelegate->detach(); + + m_resizeObserver.clear(); } void MediaControls::reset() { @@ -836,25 +894,30 @@ startHideMediaControlsTimer(); } -void MediaControls::notifyPanelWidthChanged(const LayoutUnit& newWidth) { - // Don't bother to do any work if this matches the most recent panel - // width, since we're called after layout. +void MediaControls::notifyElementSizeChanged(ClientRect* newSize) { // Note that this code permits a bad frame on resize, since it is // run after the relayout / paint happens. It would be great to improve // this, but it would be even greater to move this code entirely to // JS and fix it there. - m_panelWidth = newWidth.toInt(); + + IntSize oldSize = m_size; + m_size.setWidth(newSize->width()); + m_size.setHeight(newSize->height()); // Adjust for effective zoom. - if (!m_panel->layoutObject() || !m_panel->layoutObject()->style()) - return; - m_panelWidth = - ceil(m_panelWidth / m_panel->layoutObject()->style()->effectiveZoom()); + if (m_panel->layoutObject() && m_panel->layoutObject()->style()) { + m_size.setWidth(ceil(m_size.width() / + m_panel->layoutObject()->style()->effectiveZoom())); + m_size.setHeight(ceil(m_size.height() / + m_panel->layoutObject()->style()->effectiveZoom())); + } - m_panelWidthChangedTimer.startOneShot(0, BLINK_FROM_HERE); + // Don't bother to do any work if this matches the most recent size. + if (oldSize != m_size) + m_elementSizeChangedTimer.startOneShot(0, BLINK_FROM_HERE); } -void MediaControls::panelWidthChangedTimerFired(TimerBase*) { +void MediaControls::elementSizeChangedTimerFired(TimerBase*) { computeWhichControlsFit(); } @@ -882,7 +945,7 @@ // element. const int sliderMargin = 36; // Sliders have 18px margin on each side. - if (!m_panelWidth) { + if (!m_size.width()) { // No layout yet -- hide everything, then make them show up later. // This prevents the wrong controls from being shown briefly // immediately after the first layout and paint, but before we have @@ -927,7 +990,7 @@ width += sliderMargin; element->shouldShowButtonInOverflowMenu(false); if (element->isWanted()) { - if (usedWidth + width <= m_panelWidth) { + if (usedWidth + width <= m_size.width()) { element->setDoesFit(true); usedWidth += width; } else { @@ -955,13 +1018,20 @@ if ((firstDisplacedElement == m_timeline.get()) || (firstDisplacedElement == m_volumeSlider.get())) width += sliderMargin; - if (usedWidth + width <= m_panelWidth) + if (usedWidth + width <= m_size.width()) firstDisplacedElement->setDoesFit(true); } } else if (overflowElements.size() == 1) { m_overflowMenu->setIsWanted(false); overflowElements.front()->setDoesFit(true); } + + // Decide if the overlay play button fits. + if (m_overlayPlayButton) { + bool doesFit = m_size.width() >= kMinWidthForOverlayPlayButton && + m_size.height() >= kMinHeightForOverlayPlayButton; + m_overlayPlayButton->setDoesFit(doesFit); + } } void MediaControls::invalidate(Element* element) { @@ -1010,6 +1080,7 @@ } DEFINE_TRACE(MediaControls) { + visitor->trace(m_resizeObserver); visitor->trace(m_mediaElement); visitor->trace(m_panel); visitor->trace(m_overlayPlayButton);
diff --git a/third_party/WebKit/Source/core/html/shadow/MediaControls.h b/third_party/WebKit/Source/core/html/shadow/MediaControls.h index 3b313fb..590db6e 100644 --- a/third_party/WebKit/Source/core/html/shadow/MediaControls.h +++ b/third_party/WebKit/Source/core/html/shadow/MediaControls.h
@@ -88,9 +88,6 @@ return m_volumeSlider; } - // Notify us that our controls enclosure has changed width. - void notifyPanelWidthChanged(const LayoutUnit& newWidth); - // Notify us that the media element's network state has changed. void networkStateChanged(); @@ -131,7 +128,12 @@ void invalidate(Element*); + // Need to be members of MediaControls for private member access. class BatchedControlUpdate; + class MediaControlsResizeObserverCallback; + + // Notify us that our controls enclosure has changed size. + void notifyElementSizeChanged(ClientRect* newSize); explicit MediaControls(HTMLMediaElement&); @@ -156,12 +158,13 @@ void stopHideMediaControlsTimer(); void resetHideMediaControlsTimer(); - void panelWidthChangedTimerFired(TimerBase*); + void elementSizeChangedTimerFired(TimerBase*); void hideAllMenus(); // Hide elements that don't fit, and show those things that we want which - // do fit. This requires that m_panelWidth is current. + // do fit. This requires that m_effectiveWidth and m_effectiveHeight are + // current. void computeWhichControlsFit(); // Node @@ -222,8 +225,12 @@ bool m_isMouseOverControls : 1; bool m_isPausedForScrubbing : 1; - TaskRunnerTimer<MediaControls> m_panelWidthChangedTimer; - int m_panelWidth; + // Watches the video element for resize and updates media controls as + // necessary. + Member<ResizeObserver> m_resizeObserver; + + TaskRunnerTimer<MediaControls> m_elementSizeChangedTimer; + IntSize m_size; bool m_keepShowingUntilTimerFires : 1; };
diff --git a/third_party/WebKit/Source/core/html/shadow/MediaControlsTest.cpp b/third_party/WebKit/Source/core/html/shadow/MediaControlsTest.cpp index b6417a8..57ae09d6 100644 --- a/third_party/WebKit/Source/core/html/shadow/MediaControlsTest.cpp +++ b/third_party/WebKit/Source/core/html/shadow/MediaControlsTest.cpp
@@ -171,10 +171,11 @@ WebRemotePlaybackAvailability::DeviceAvailable); } - void ensureLayout() { - // Force a relayout, so that the controls know the width. Otherwise, - // they don't know if, for example, the cast button will fit. - m_mediaControls->mediaElement().clientWidth(); + void ensureSizing() { + // Fire the size-change callback to ensure that the controls have + // been properly notified of the video size. + m_mediaControls->notifyElementSizeChanged( + m_mediaControls->mediaElement().getBoundingClientRect()); } void simulateHideMediaControlsTimerFired() { @@ -262,7 +263,7 @@ } TEST_F(MediaControlsTest, CastButtonRequiresRoute) { - ensureLayout(); + ensureSizing(); mediaControls().mediaElement().setBooleanAttribute(HTMLNames::controlsAttr, true); @@ -277,7 +278,7 @@ } TEST_F(MediaControlsTest, CastButtonDisableRemotePlaybackAttr) { - ensureLayout(); + ensureSizing(); mediaControls().mediaElement().setBooleanAttribute(HTMLNames::controlsAttr, true); @@ -364,7 +365,7 @@ } TEST_F(MediaControlsTest, DownloadButtonDisplayed) { - ensureLayout(); + ensureSizing(); Element* downloadButton = getElementByShadowPseudoId( mediaControls(), "-internal-media-controls-download-button"); @@ -379,7 +380,7 @@ } TEST_F(MediaControlsTest, DownloadButtonNotDisplayedEmptyUrl) { - ensureLayout(); + ensureSizing(); Element* downloadButton = getElementByShadowPseudoId( mediaControls(), "-internal-media-controls-download-button"); @@ -393,7 +394,7 @@ } TEST_F(MediaControlsTest, DownloadButtonDisplayedHiddenAndDisplayed) { - ensureLayout(); + ensureSizing(); Element* downloadButton = getElementByShadowPseudoId( mediaControls(), "-internal-media-controls-download-button"); @@ -423,7 +424,7 @@ } TEST_F(MediaControlsTest, DownloadButtonRecordsClickOnlyOnce) { - ensureLayout(); + ensureSizing(); MediaControlDownloadButtonElement* downloadButton = static_cast<MediaControlDownloadButtonElement*>( @@ -453,7 +454,7 @@ } TEST_F(MediaControlsTest, DownloadButtonNotDisplayedInfiniteDuration) { - ensureLayout(); + ensureSizing(); Element* downloadButton = getElementByShadowPseudoId( mediaControls(), "-internal-media-controls-download-button"); @@ -470,7 +471,7 @@ } TEST_F(MediaControlsTest, DownloadButtonNotDisplayedHLS) { - ensureLayout(); + ensureSizing(); Element* downloadButton = getElementByShadowPseudoId( mediaControls(), "-internal-media-controls-download-button"); @@ -484,7 +485,7 @@ } TEST_F(MediaControlsTest, TimelineSeekToRoundedEnd) { - ensureLayout(); + ensureSizing(); MediaControlTimelineElement* timeline = static_cast<MediaControlTimelineElement*>(getElementByShadowPseudoId( @@ -509,7 +510,7 @@ } TEST_F(MediaControlsTest, TimelineImmediatelyUpdatesCurrentTime) { - ensureLayout(); + ensureSizing(); MediaControlTimelineElement* timeline = static_cast<MediaControlTimelineElement*>(getElementByShadowPseudoId(
diff --git a/third_party/WebKit/Source/core/input/PointerEventManager.cpp b/third_party/WebKit/Source/core/input/PointerEventManager.cpp index 48f30e1..61a5f01 100644 --- a/third_party/WebKit/Source/core/input/PointerEventManager.cpp +++ b/third_party/WebKit/Source/core/input/PointerEventManager.cpp
@@ -712,7 +712,7 @@ // 2^32-1 (>4.2 billion): even with a generous 100 unique ids per touch // sequence & one sequence per 10 second, it takes 13+ years to wrap back. while (!m_touchIdsForCanceledPointerdowns.isEmpty()) { - uint32_t firstId = m_touchIdsForCanceledPointerdowns.first(); + uint32_t firstId = m_touchIdsForCanceledPointerdowns.front(); if (firstId > uniqueTouchEventId) return false; m_touchIdsForCanceledPointerdowns.takeFirst();
diff --git a/third_party/WebKit/Source/core/layout/LayoutBoxModelObject.cpp b/third_party/WebKit/Source/core/layout/LayoutBoxModelObject.cpp index 0507c39..9d85fac9 100644 --- a/third_party/WebKit/Source/core/layout/LayoutBoxModelObject.cpp +++ b/third_party/WebKit/Source/core/layout/LayoutBoxModelObject.cpp
@@ -551,7 +551,8 @@ PaintInvalidationState newPaintInvalidationState(paintInvalidationState, *this); - if (!shouldCheckForPaintInvalidation(newPaintInvalidationState)) + if (!shouldCheckForPaintInvalidationWithPaintInvalidationState( + newPaintInvalidationState)) return; if (mayNeedPaintInvalidationSubtree())
diff --git a/third_party/WebKit/Source/core/layout/LayoutMedia.cpp b/third_party/WebKit/Source/core/layout/LayoutMedia.cpp index bdfc148..f78d510 100644 --- a/third_party/WebKit/Source/core/layout/LayoutMedia.cpp +++ b/third_party/WebKit/Source/core/layout/LayoutMedia.cpp
@@ -53,8 +53,6 @@ LayoutState state(*this); - Optional<LayoutUnit> newPanelWidth; - // Iterate the children in reverse order so that the media controls are laid // out before the text track container. This is to ensure that the text // track rendering has an up-to-date position of the media controls for @@ -82,7 +80,6 @@ LayoutUnit width = newRect.width(); if (child->node()->isMediaControls()) { width = computePanelWidth(newRect); - newPanelWidth = width; } LayoutBox* layoutBox = toLayoutBox(child); @@ -96,18 +93,6 @@ } clearNeedsLayout(); - - // Notify our MediaControls that a layout has happened. - if (mediaElement() && mediaElement()->mediaControls() && - newPanelWidth.has_value()) { - if (!m_lastReportedPanelWidth.has_value() || - m_lastReportedPanelWidth.value() != newPanelWidth.value()) { - mediaElement()->mediaControls()->notifyPanelWidthChanged( - newPanelWidth.value()); - // Store the last value we reported, so we know if it has changed. - m_lastReportedPanelWidth = newPanelWidth.value(); - } - } } bool LayoutMedia::isChildAllowed(LayoutObject* child,
diff --git a/third_party/WebKit/Source/core/layout/LayoutMedia.h b/third_party/WebKit/Source/core/layout/LayoutMedia.h index b0155c6..d811d3a 100644 --- a/third_party/WebKit/Source/core/layout/LayoutMedia.h +++ b/third_party/WebKit/Source/core/layout/LayoutMedia.h
@@ -83,7 +83,6 @@ LayoutUnit computePanelWidth(const LayoutRect& mediaWidth) const; - Optional<LayoutUnit> m_lastReportedPanelWidth; LayoutObjectChildList m_children; };
diff --git a/third_party/WebKit/Source/core/layout/LayoutObject.cpp b/third_party/WebKit/Source/core/layout/LayoutObject.cpp index 077c672..e561c4b 100644 --- a/third_party/WebKit/Source/core/layout/LayoutObject.cpp +++ b/third_party/WebKit/Source/core/layout/LayoutObject.cpp
@@ -70,6 +70,7 @@ #include "core/layout/LayoutTableRow.h" #include "core/layout/LayoutTheme.h" #include "core/layout/LayoutView.h" +#include "core/layout/PaintInvalidationState.h" #include "core/layout/api/LayoutAPIShim.h" #include "core/layout/api/LayoutPartItem.h" #include "core/layout/ng/layout_ng_block_flow.h" @@ -1140,7 +1141,8 @@ // If we didn't need paint invalidation then our children don't need as well. // Skip walking down the tree as everything should be fine below us. - if (!shouldCheckForPaintInvalidation(paintInvalidationState)) + if (!shouldCheckForPaintInvalidationWithPaintInvalidationState( + paintInvalidationState)) return; PaintInvalidationState newPaintInvalidationState(paintInvalidationState, @@ -1213,7 +1215,7 @@ setVisualRect(newVisualRect); paintInvalidator.setLocationInBacking(context.newLocation); - if (!shouldCheckForPaintInvalidationRegardlessOfPaintInvalidationState() && + if (!shouldCheckForPaintInvalidation() && paintInvalidationState .forcedSubtreeInvalidationRectUpdateWithinContainerOnly()) { // We are done updating the visual rect. No other paint invalidation work @@ -3405,12 +3407,9 @@ } inline void LayoutObject::markAncestorsForPaintInvalidation() { - for ( - LayoutObject* parent = this->paintInvalidationParent(); - parent && - !parent - ->shouldCheckForPaintInvalidationRegardlessOfPaintInvalidationState(); - parent = parent->paintInvalidationParent()) + for (LayoutObject* parent = this->paintInvalidationParent(); + parent && !parent->shouldCheckForPaintInvalidation(); + parent = parent->paintInvalidationParent()) parent->m_bitfields.setChildShouldCheckForPaintInvalidation(true); } @@ -3422,6 +3421,12 @@ frameView()->scheduleVisualUpdateForPaintInvalidationIfNeeded(); } +bool LayoutObject::shouldCheckForPaintInvalidationWithPaintInvalidationState( + const PaintInvalidationState& paintInvalidationState) const { + return paintInvalidationState.hasForcedSubtreeInvalidationFlags() || + shouldCheckForPaintInvalidation(); +} + void LayoutObject::setShouldDoFullPaintInvalidation( PaintInvalidationReason reason) { // Only full invalidation reasons are allowed. @@ -3471,8 +3476,7 @@ // paintInvalidationStateIsDirty should be kept in sync with the // booleans that are cleared below. #if DCHECK_IS_ON() - DCHECK(!shouldCheckForPaintInvalidationRegardlessOfPaintInvalidationState() || - paintInvalidationStateIsDirty()); + DCHECK(!shouldCheckForPaintInvalidation() || paintInvalidationStateIsDirty()); #endif clearShouldDoFullPaintInvalidation(); m_bitfields.setChildShouldCheckForPaintInvalidation(false);
diff --git a/third_party/WebKit/Source/core/layout/LayoutObject.h b/third_party/WebKit/Source/core/layout/LayoutObject.h index db07d40..40dee15 100644 --- a/third_party/WebKit/Source/core/layout/LayoutObject.h +++ b/third_party/WebKit/Source/core/layout/LayoutObject.h
@@ -33,7 +33,6 @@ #include "core/editing/PositionWithAffinity.h" #include "core/layout/LayoutObjectChildList.h" #include "core/layout/MapCoordinatesFlags.h" -#include "core/layout/PaintInvalidationState.h" #include "core/layout/ScrollAlignment.h" #include "core/layout/SubtreeLayoutScope.h" #include "core/layout/api/HitTestAction.h" @@ -67,12 +66,15 @@ class LayoutMultiColumnSpannerPlaceholder; class LayoutView; class ObjectPaintProperties; +class PaintInvalidationState; class PaintLayer; class PseudoStyleRequest; struct PaintInfo; struct PaintInvalidatorContext; +enum VisualRectFlags { DefaultVisualRectFlags = 0, EdgeInclusive = 1 }; + enum CursorDirective { SetCursorBasedOnStyle, SetCursor, DoNotSetCursor }; enum HitTestFilter { HitTestAll, HitTestSelf, HitTestDescendants }; @@ -1668,14 +1670,10 @@ } void setShouldInvalidateSelection(); - bool shouldCheckForPaintInvalidation( - const PaintInvalidationState& paintInvalidationState) const { - return paintInvalidationState.hasForcedSubtreeInvalidationFlags() || - shouldCheckForPaintInvalidationRegardlessOfPaintInvalidationState(); - } + bool shouldCheckForPaintInvalidationWithPaintInvalidationState( + const PaintInvalidationState&) const; - bool shouldCheckForPaintInvalidationRegardlessOfPaintInvalidationState() - const { + bool shouldCheckForPaintInvalidation() const { return mayNeedPaintInvalidation() || shouldDoFullPaintInvalidation() || shouldInvalidateSelection() || m_bitfields.childShouldCheckForPaintInvalidation(); @@ -2015,7 +2013,7 @@ #if DCHECK_IS_ON() virtual bool paintInvalidationStateIsDirty() const { return backgroundChangedSinceLastPaintInvalidation() || - shouldCheckForPaintInvalidationRegardlessOfPaintInvalidationState(); + shouldCheckForPaintInvalidation(); } #endif
diff --git a/third_party/WebKit/Source/core/layout/PaintInvalidationState.h b/third_party/WebKit/Source/core/layout/PaintInvalidationState.h index 46b3be9..2046959e 100644 --- a/third_party/WebKit/Source/core/layout/PaintInvalidationState.h +++ b/third_party/WebKit/Source/core/layout/PaintInvalidationState.h
@@ -20,8 +20,6 @@ class LayoutView; class PaintLayer; -enum VisualRectFlags { DefaultVisualRectFlags = 0, EdgeInclusive = 1 }; - // PaintInvalidationState is an optimization used during the paint // invalidation phase. //
diff --git a/third_party/WebKit/Source/core/layout/compositing/CompositedLayerMapping.cpp b/third_party/WebKit/Source/core/layout/compositing/CompositedLayerMapping.cpp index 4726e94..183c283 100644 --- a/third_party/WebKit/Source/core/layout/compositing/CompositedLayerMapping.cpp +++ b/third_party/WebKit/Source/core/layout/compositing/CompositedLayerMapping.cpp
@@ -538,9 +538,6 @@ if (clippingContainer->enclosingLayer() == scrollParent) return; - if (clippingContainer->enclosingLayer()->hasRootScrollerAsDescendant()) - return; - if (compositingAncestor->layoutObject().isDescendantOf(clippingContainer)) return; @@ -610,12 +607,6 @@ if (m_owningLayer.needsCompositedScrolling()) needsDescendantsClippingLayer = false; - // We disable clipping on ancestor layers of the root scroller to give it - // the same behavior w.r.t browser controls as the real root layer. See the - // RootScrollerController class for more details. - if (m_owningLayer.hasRootScrollerAsDescendant()) - needsDescendantsClippingLayer = false; - const PaintLayer* scrollParent = this->scrollParent(); // This is required because compositing layers are parented according to the @@ -2301,6 +2292,7 @@ m_scrollingLayer = createGraphicsLayer(CompositingReasonLayerForScrollingContainer); m_scrollingLayer->setDrawsContent(false); + m_scrollingLayer->setMasksToBounds(true); // Inner layer which renders the content that scrolls. m_scrollingContentsLayer = @@ -2319,9 +2311,6 @@ scrollingCoordinator->scrollableAreasDidChange(); } } - - m_scrollingLayer->setMasksToBounds( - !m_owningLayer.hasRootScrollerAsDescendant()); } else if (m_scrollingLayer) { m_scrollingLayer = nullptr; m_scrollingContentsLayer = nullptr;
diff --git a/third_party/WebKit/Source/core/layout/compositing/CompositedLayerMappingTest.cpp b/third_party/WebKit/Source/core/layout/compositing/CompositedLayerMappingTest.cpp index 08d08aa..e0838dd6 100644 --- a/third_party/WebKit/Source/core/layout/compositing/CompositedLayerMappingTest.cpp +++ b/third_party/WebKit/Source/core/layout/compositing/CompositedLayerMappingTest.cpp
@@ -8,7 +8,6 @@ #include "core/layout/LayoutBoxModelObject.h" #include "core/layout/LayoutTestHelper.h" #include "core/layout/api/LayoutViewItem.h" -#include "core/page/scrolling/TopDocumentRootScrollerController.h" #include "core/paint/PaintLayer.h" #include "platform/testing/RuntimeEnabledFeaturesTestHelpers.h" #include "public/platform/WebContentLayer.h" @@ -933,154 +932,6 @@ EXPECT_FALSE(mapping->backgroundPaintsOntoScrollingContentsLayer()); } -// Make sure that clipping layers are removed or their masking bit turned off -// when they're an ancestor of the root scroller element. -TEST_P(CompositedLayerMappingTest, RootScrollerAncestorsNotClipped) { - NonThrowableExceptionState nonThrow; - - TopDocumentRootScrollerController& rootScrollerController = - document().page()->globalRootScrollerController(); - - setBodyInnerHTML( - // The container DIV is composited with scrolling contents and a - // non-composited parent that clips it. - "<div id='clip' style='overflow: hidden; width: 200px; height: 200px; " - "position: absolute; left: 0px; top: 0px;'>" - " <div id='container' style='transform: translateZ(0); overflow: " - "scroll; width: 300px; height: 300px'>" - " <div style='width: 2000px; height: 2000px;'>lorem ipsum</div>" - " <div id='innerScroller' style='width: 800px; height: 600px; " - "left: 0px; top: 0px; position: absolute; overflow: scroll'>" - " <div style='height: 2000px; width: 2000px'></div>" - " </div>" - " </div>" - "</div>" - - // The container DIV is composited with scrolling contents and a - // composited parent that clips it. - "<div id='clip2' style='transform: translateZ(0); position: absolute; " - "left: 0px; top: 0px; overflow: hidden; width: 200px; height: 200px'>" - " <div id='container2' style='transform: translateZ(0); overflow: " - "scroll; width: 300px; height: 300px'>" - " <div style='width: 2000px; height: 2000px;'>lorem ipsum</div>" - " <div id='innerScroller2' style='width: 800px; height: 600px; " - "left: 0px; top: 0px; position: absolute; overflow: scroll'>" - " <div style='height: 2000px; width: 2000px'></div>" - " </div>" - " </div>" - "</div>" - - // The container DIV is composited without scrolling contents but - // composited children that it clips. - "<div id='container3' style='translateZ(0); position: absolute; left: " - "0px; top: 0px; z-index: 1; overflow: hidden; width: 300px; height: " - "300px'>" - " <div style='transform: translateZ(0); z-index: -1; width: 2000px; " - "height: 2000px;'>lorem ipsum</div>" - " <div id='innerScroller3' style='width: 800px; height: 600px; " - "left: 0px; top: 0px; position: absolute; overflow: scroll'>" - " <div style='height: 2000px; width: 2000px'></div>" - " </div>" - "</div>"); - - CompositedLayerMapping* mapping = - toLayoutBlock(getLayoutObjectByElementId("container")) - ->layer() - ->compositedLayerMapping(); - CompositedLayerMapping* mapping2 = - toLayoutBlock(getLayoutObjectByElementId("container2")) - ->layer() - ->compositedLayerMapping(); - CompositedLayerMapping* mapping3 = - toLayoutBlock(getLayoutObjectByElementId("container3")) - ->layer() - ->compositedLayerMapping(); - Element* innerScroller = document().getElementById("innerScroller"); - Element* innerScroller2 = document().getElementById("innerScroller2"); - Element* innerScroller3 = document().getElementById("innerScroller3"); - - ASSERT_TRUE(mapping); - ASSERT_TRUE(mapping2); - ASSERT_TRUE(mapping3); - ASSERT_TRUE(innerScroller); - ASSERT_TRUE(innerScroller2); - ASSERT_TRUE(innerScroller3); - - // Since there's no need to composite the clip and we prefer LCD text, the - // mapping should create an ancestorClippingLayer. - ASSERT_TRUE(mapping->scrollingLayer()); - ASSERT_TRUE(mapping->ancestorClippingLayer()); - - // Since the clip has a transform it should be composited so there's no - // need for an ancestor clipping layer. - ASSERT_TRUE(mapping2->scrollingLayer()); - - // The third <div> should have a clipping layer since it's composited and - // clips composited children. - ASSERT_TRUE(mapping3->clippingLayer()); - - // All scrolling and clipping layers should have masksToBounds set on them. - { - EXPECT_TRUE(mapping->scrollingLayer()->platformLayer()->masksToBounds()); - EXPECT_TRUE( - mapping->ancestorClippingLayer()->platformLayer()->masksToBounds()); - EXPECT_TRUE(mapping2->scrollingLayer()->platformLayer()->masksToBounds()); - EXPECT_TRUE(mapping3->clippingLayer()->platformLayer()->masksToBounds()); - } - - // Set the inner scroller in the first container as the root scroller. Its - // clipping layer should be removed and the scrolling layer should not - // mask. - { - document().setRootScroller(innerScroller, nonThrow); - document().view()->updateAllLifecyclePhases(); - ASSERT_EQ(innerScroller, rootScrollerController.globalRootScroller()); - - EXPECT_FALSE(mapping->ancestorClippingLayer()); - EXPECT_FALSE(mapping->scrollingLayer()->platformLayer()->masksToBounds()); - } - - // Set the inner scroller in the second container as the root scroller. Its - // scrolling layer should no longer mask. The clipping and scrolling layers - // on the first container should now reset back. - { - document().setRootScroller(innerScroller2, nonThrow); - document().view()->updateAllLifecyclePhases(); - ASSERT_EQ(innerScroller2, rootScrollerController.globalRootScroller()); - - EXPECT_TRUE(mapping->ancestorClippingLayer()); - EXPECT_TRUE( - mapping->ancestorClippingLayer()->platformLayer()->masksToBounds()); - EXPECT_TRUE(mapping->scrollingLayer()->platformLayer()->masksToBounds()); - - EXPECT_FALSE(mapping2->scrollingLayer()->platformLayer()->masksToBounds()); - } - - // Set the inner scroller in the third container as the root scroller. Its - // clipping layer should be removed. - { - document().setRootScroller(innerScroller3, nonThrow); - document().view()->updateAllLifecyclePhases(); - ASSERT_EQ(innerScroller3, rootScrollerController.globalRootScroller()); - - EXPECT_TRUE(mapping2->scrollingLayer()->platformLayer()->masksToBounds()); - - EXPECT_FALSE(mapping3->clippingLayer()); - } - - // Unset the root scroller. The clipping layer on the third container should - // be restored. - { - document().setRootScroller(nullptr, nonThrow); - document().view()->updateAllLifecyclePhases(); - ASSERT_EQ(document().documentElement(), - rootScrollerController.globalRootScroller()); - - EXPECT_TRUE(mapping3->clippingLayer()); - EXPECT_TRUE(mapping3->clippingLayer()->platformLayer()->masksToBounds()); - } -} - TEST_P(CompositedLayerMappingTest, ScrollingLayerWithPerspectivePositionedCorrectly) { // Test positioning of a scrolling layer within an offset parent, both with
diff --git a/third_party/WebKit/Source/core/layout/compositing/PaintLayerCompositor.cpp b/third_party/WebKit/Source/core/layout/compositing/PaintLayerCompositor.cpp index a2b984e..3aebdb0 100644 --- a/third_party/WebKit/Source/core/layout/compositing/PaintLayerCompositor.cpp +++ b/third_party/WebKit/Source/core/layout/compositing/PaintLayerCompositor.cpp
@@ -431,8 +431,6 @@ } } - updateClippingOnCompositorLayers(); - GraphicsLayerUpdater updater; updater.update(*updateRoot, layersNeedingPaintInvalidation); @@ -485,35 +483,6 @@ probe::layerTreeDidChange(m_layoutView.frame()); } -void PaintLayerCompositor::updateClippingOnCompositorLayers() { - bool shouldClip = !rootLayer()->hasRootScrollerAsDescendant(); - if (m_rootContentLayer) { - // FIXME: with rootLayerScrolls, we probably don't even need - // m_rootContentLayer? - m_rootContentLayer->setMasksToBounds( - !RuntimeEnabledFeatures::rootLayerScrollingEnabled() && shouldClip); - } - - const TopDocumentRootScrollerController& globalRootScrollerController = - m_layoutView.document().page()->globalRootScrollerController(); - - Element* documentElement = m_layoutView.document().documentElement(); - bool frameIsRootScroller = - documentElement && - documentElement->isSameNode( - globalRootScrollerController.globalRootScroller()); - - // We normally clip iframes' (but not the root frame) overflow controls - // host and container layers but if the root scroller is the iframe itself - // we want it to behave like the root frame. - shouldClip &= !frameIsRootScroller && !m_layoutView.frame()->isLocalRoot(); - - if (m_containerLayer) - m_containerLayer->setMasksToBounds(shouldClip); - if (m_overflowControlsHostLayer) - m_overflowControlsHostLayer->setMasksToBounds(shouldClip); -} - static void restartAnimationOnCompositor(const LayoutObject& layoutObject) { Node* node = layoutObject.node(); ElementAnimations* elementAnimations = @@ -1140,6 +1109,13 @@ m_rootContentLayer->setPosition(FloatPoint()); m_rootContentLayer->setOwnerNodeId( DOMNodeIds::idForNode(m_layoutView.node())); + + // FIXME: with rootLayerScrolls, we probably don't even need + // m_rootContentLayer? + if (!RuntimeEnabledFeatures::rootLayerScrollingEnabled()) { + // Need to clip to prevent transformed content showing outside this frame + m_rootContentLayer->setMasksToBounds(true); + } } if (shouldCreateOwnLayers && !m_overflowControlsHostLayer) { @@ -1147,9 +1123,14 @@ ASSERT(!m_containerLayer); // Create a layer to host the clipping layer and the overflow controls - // layers. Whether these layers mask the content below is determined - // in updateClippingOnCompositorLayers. + // layers. m_overflowControlsHostLayer = GraphicsLayer::create(this); + + // Clip iframe's overflow controls layer. + bool containerMasksToBounds = !m_layoutView.frame()->isLocalRoot(); + m_overflowControlsHostLayer->setMasksToBounds(containerMasksToBounds); + + // Create a clipping layer if this is an iframe or settings require to clip. m_containerLayer = GraphicsLayer::create(this); m_scrollLayer = GraphicsLayer::create(this); if (ScrollingCoordinator* scrollingCoordinator =
diff --git a/third_party/WebKit/Source/core/layout/compositing/PaintLayerCompositor.h b/third_party/WebKit/Source/core/layout/compositing/PaintLayerCompositor.h index 86ba57de..10a953b 100644 --- a/third_party/WebKit/Source/core/layout/compositing/PaintLayerCompositor.h +++ b/third_party/WebKit/Source/core/layout/compositing/PaintLayerCompositor.h
@@ -147,12 +147,6 @@ void updateRootLayerPosition(); - // If the root scroller isn't the root layer then the PaintLayerCompositor - // must disable clipping on its layers so that the root scroller can - // expand/shrink its clipping layer in response to browser controls and have - // the result be visible. - void updateClippingOnCompositorLayers(); - void setIsInWindow(bool); static PaintLayerCompositor* frameContentsCompositor(LayoutPart&);
diff --git a/third_party/WebKit/Source/core/layout/ng/ng_constraint_space_builder.h b/third_party/WebKit/Source/core/layout/ng/ng_constraint_space_builder.h index d1b6458..852cb70 100644 --- a/third_party/WebKit/Source/core/layout/ng/ng_constraint_space_builder.h +++ b/third_party/WebKit/Source/core/layout/ng/ng_constraint_space_builder.h
@@ -72,7 +72,7 @@ NGPhysicalSize initial_containing_block_size_; LayoutUnit fragmentainer_space_available_; - unsigned parent_writing_mode_ : 2; + unsigned parent_writing_mode_ : 3; unsigned is_fixed_size_inline_ : 1; unsigned is_fixed_size_block_ : 1; unsigned is_shrink_to_fit_ : 1;
diff --git a/third_party/WebKit/Source/core/loader/DocumentLoader.cpp b/third_party/WebKit/Source/core/loader/DocumentLoader.cpp index f351ee6..d9d3d6b 100644 --- a/third_party/WebKit/Source/core/loader/DocumentLoader.cpp +++ b/third_party/WebKit/Source/core/loader/DocumentLoader.cpp
@@ -235,6 +235,15 @@ m_serviceWorkerNetworkProvider = std::move(provider); } +void DocumentLoader::setSourceLocation( + std::unique_ptr<SourceLocation> sourceLocation) { + m_sourceLocation = std::move(sourceLocation); +} + +std::unique_ptr<SourceLocation> DocumentLoader::copySourceLocation() const { + return m_sourceLocation ? m_sourceLocation->clone() : nullptr; +} + void DocumentLoader::dispatchLinkHeaderPreloads( ViewportDescriptionWrapper* viewport, LinkLoader::MediaPreloadPolicy mediaPolicy) {
diff --git a/third_party/WebKit/Source/core/loader/DocumentLoader.h b/third_party/WebKit/Source/core/loader/DocumentLoader.h index 112552f..cb84c36a 100644 --- a/third_party/WebKit/Source/core/loader/DocumentLoader.h +++ b/third_party/WebKit/Source/core/loader/DocumentLoader.h
@@ -30,6 +30,8 @@ #ifndef DocumentLoader_h #define DocumentLoader_h +#include <memory> +#include "bindings/core/v8/SourceLocation.h" #include "core/CoreExport.h" #include "core/dom/ViewportDescription.h" #include "core/dom/WeakIdentifierMap.h" @@ -200,6 +202,9 @@ return m_serviceWorkerNetworkProvider.get(); } + std::unique_ptr<SourceLocation> copySourceLocation() const; + void setSourceLocation(std::unique_ptr<SourceLocation>); + DECLARE_VIRTUAL_TRACE(); protected: @@ -303,6 +308,11 @@ bool m_wasBlockedAfterCSP; + // PlzNavigate: set when committing a navigation. The data has originally been + // captured when the navigation was sent to the browser process, and it is + // sent back at commit time. + std::unique_ptr<SourceLocation> m_sourceLocation; + enum State { NotStarted, Provisional,
diff --git a/third_party/WebKit/Source/core/loader/FrameFetchContext.cpp b/third_party/WebKit/Source/core/loader/FrameFetchContext.cpp index 0d00eb9..2d89785 100644 --- a/third_party/WebKit/Source/core/loader/FrameFetchContext.cpp +++ b/third_party/WebKit/Source/core/loader/FrameFetchContext.cpp
@@ -66,6 +66,7 @@ #include "core/timing/DOMWindowPerformance.h" #include "core/timing/Performance.h" #include "platform/WebFrameScheduler.h" +#include "platform/exported/WrappedResourceRequest.h" #include "platform/instrumentation/tracing/TracedValue.h" #include "platform/loader/fetch/ClientHintsPreferences.h" #include "platform/loader/fetch/FetchInitiatorTypeNames.h" @@ -424,6 +425,12 @@ void FrameFetchContext::prepareRequest(ResourceRequest& request) { frame()->loader().applyUserAgent(request); localFrameClient()->dispatchWillSendRequest(request); + + if (masterDocumentLoader()->getServiceWorkerNetworkProvider()) { + WrappedResourceRequest webreq(request); + masterDocumentLoader()->getServiceWorkerNetworkProvider()->willSendRequest( + webreq); + } } void FrameFetchContext::dispatchWillSendRequest( @@ -514,7 +521,6 @@ request, resource->response()); dispatchWillSendRequest(identifier, request, ResourceResponse(), resource->options().initiatorInfo); - probe::markResourceAsCached(frame(), identifier); if (!resource->response().isNull()) { dispatchDidReceiveResponseInternal(identifier, resource->response(), @@ -830,8 +836,9 @@ DCHECK(masterDocumentLoader()); auto* service_worker_network_provider = masterDocumentLoader()->getServiceWorkerNetworkProvider(); - return service_worker_network_provider && - service_worker_network_provider->serviceWorkerID(); + return service_worker_network_provider + ? service_worker_network_provider->serviceWorkerID() + : -1; } bool FrameFetchContext::isMainFrame() const {
diff --git a/third_party/WebKit/Source/core/loader/WorkerThreadableLoader.cpp b/third_party/WebKit/Source/core/loader/WorkerThreadableLoader.cpp index 18ea76e..6ba26f6 100644 --- a/third_party/WebKit/Source/core/loader/WorkerThreadableLoader.cpp +++ b/third_party/WebKit/Source/core/loader/WorkerThreadableLoader.cpp
@@ -413,7 +413,7 @@ DCHECK(!isMainThread()); if (!m_client) return; - std::unique_ptr<ResourceTimingInfo> info( + RefPtr<ResourceTimingInfo> info( ResourceTimingInfo::adopt(std::move(timingData))); WorkerGlobalScopePerformance::performance(*m_workerGlobalScope) ->addResourceTiming(*info);
diff --git a/third_party/WebKit/Source/core/page/scrolling/RootScrollerController.cpp b/third_party/WebKit/Source/core/page/scrolling/RootScrollerController.cpp index 5c08631..1916ed23 100644 --- a/third_party/WebKit/Source/core/page/scrolling/RootScrollerController.cpp +++ b/third_party/WebKit/Source/core/page/scrolling/RootScrollerController.cpp
@@ -105,23 +105,8 @@ return; } - PaintLayer* oldRootScrollerLayer = rootScrollerPaintLayer(); - m_effectiveRootScroller = newEffectiveRootScroller; - // This change affects both the old and new layers. - if (oldRootScrollerLayer) - oldRootScrollerLayer->setNeedsCompositingInputsUpdate(); - if (rootScrollerPaintLayer()) - rootScrollerPaintLayer()->setNeedsCompositingInputsUpdate(); - - // The above may not be enough as we need to update existing ancestor - // GraphicsLayers. This will force us to rebuild the GraphicsLayer tree. - if (LayoutView* layoutView = m_document->layoutView()) { - layoutView->compositor()->setNeedsCompositingUpdate( - CompositingUpdateRebuildTree); - } - if (Page* page = m_document->page()) page->globalRootScrollerController().didChangeRootScroller(); }
diff --git a/third_party/WebKit/Source/core/page/scrolling/TopDocumentRootScrollerController.cpp b/third_party/WebKit/Source/core/page/scrolling/TopDocumentRootScrollerController.cpp index bafdeb04..cd7daeee 100644 --- a/third_party/WebKit/Source/core/page/scrolling/TopDocumentRootScrollerController.cpp +++ b/third_party/WebKit/Source/core/page/scrolling/TopDocumentRootScrollerController.cpp
@@ -132,22 +132,11 @@ // scrolling the element so it will apply scroll to the element itself. target->setApplyScroll(m_viewportApplyScroll, "disable-native-scroll"); - // A change in global root scroller requires a compositing inputs update to - // the new and old global root scroller since it might change how the - // ancestor layers are clipped. e.g. An iframe that's the global root - // scroller clips its layers like the root frame. Normally this is set - // when the local effective root scroller changes but the global root - // scroller can change because the parent's effective root scroller - // changes. - setNeedsCompositingInputsUpdateOnGlobalRootScroller(); - ScrollableArea* oldRootScrollerArea = RootScrollerUtil::scrollableAreaForRootScroller(m_globalRootScroller); m_globalRootScroller = target; - setNeedsCompositingInputsUpdateOnGlobalRootScroller(); - // Ideally, scroll customization would pass the current element to scroll to // the apply scroll callback but this doesn't happen today so we set it // through a back door here. This is also needed by the @@ -170,23 +159,6 @@ return toLocalFrame(m_page->mainFrame())->document(); } -void TopDocumentRootScrollerController:: - setNeedsCompositingInputsUpdateOnGlobalRootScroller() { - if (!m_globalRootScroller) - return; - - PaintLayer* layer = m_globalRootScroller->document() - .rootScrollerController() - .rootScrollerPaintLayer(); - - if (layer) - layer->setNeedsCompositingInputsUpdate(); - - if (LayoutView* view = m_globalRootScroller->document().layoutView()) { - view->compositor()->setNeedsCompositingUpdate(CompositingUpdateRebuildTree); - } -} - void TopDocumentRootScrollerController::didUpdateCompositing() { if (!m_page) return;
diff --git a/third_party/WebKit/Source/core/page/scrolling/TopDocumentRootScrollerController.h b/third_party/WebKit/Source/core/page/scrolling/TopDocumentRootScrollerController.h index 9ad8c3e6..fd4071ee 100644 --- a/third_party/WebKit/Source/core/page/scrolling/TopDocumentRootScrollerController.h +++ b/third_party/WebKit/Source/core/page/scrolling/TopDocumentRootScrollerController.h
@@ -93,8 +93,6 @@ Document* topDocument() const; - void setNeedsCompositingInputsUpdateOnGlobalRootScroller(); - // The apply-scroll callback that moves browser controls and produces // overscroll effects. This class makes sure this callback is set on the // appropriate root scroller element.
diff --git a/third_party/WebKit/Source/core/paint/BoxBorderPainter.cpp b/third_party/WebKit/Source/core/paint/BoxBorderPainter.cpp index 3308fa3..25b5363 100644 --- a/third_party/WebKit/Source/core/paint/BoxBorderPainter.cpp +++ b/third_party/WebKit/Source/core/paint/BoxBorderPainter.cpp
@@ -1034,44 +1034,44 @@ return; } - // The stroke is doubled here because the provided path is the - // outside edge of the border so half the stroke is clipped off. // The extra multiplier is so that the clipping mask can antialias // the edges to prevent jaggies. graphicsContext.setStrokeThickness(drawThickness * 1.1f); graphicsContext.setStrokeStyle( borderStyle == BorderStyleDashed ? DashedStroke : DottedStroke); - // If the number of dashes that fit in the path is odd and non-integral - // then we will have an awkwardly-sized dash at the end of the path. To - // try to avoid that here, we simply make the whitespace dashes ever so - // slightly bigger. // TODO(schenney): This code for setting up the dash effect is trying to // do the same thing as StrokeData::setupPaintDashPathEffect and should be // refactored to re-use that code. It would require // GraphicsContext::strokePath to take a length parameter. - float dashLength = - thickness * ((borderStyle == BorderStyleDashed) ? 3.0f : 1.0f); + float dashLength = drawThickness; float gapLength = dashLength; - float numberOfDashes = centerlinePath.length() / dashLength; + if (borderStyle == BorderStyleDashed) { + dashLength *= StrokeData::dashLengthRatio(drawThickness); + gapLength *= StrokeData::dashGapRatio(drawThickness); + } + float pathLength = centerlinePath.length(); // Don't try to show dashes if we have less than 2 dashes + 2 gaps. - // FIXME: should do this test per side. - if (numberOfDashes >= 4) { - bool evenNumberOfFullDashes = !((int)numberOfDashes % 2); - bool integralNumberOfDashes = !(numberOfDashes - (int)numberOfDashes); - if (!evenNumberOfFullDashes && !integralNumberOfDashes) { - float numberOfGaps = numberOfDashes / 2; - gapLength += (dashLength / numberOfGaps); - } - + // TODO(schenney): should do this test per side. + if (pathLength >= 2 * dashLength + gapLength) { + float gap = gapLength; + if (borderStyle == BorderStyleDashed) + gap = StrokeData::selectBestDashGap(pathLength, dashLength, gapLength); DashArray lineDash; lineDash.push_back(dashLength); - lineDash.push_back(gapLength); + lineDash.push_back(gap); graphicsContext.setLineDash(lineDash, dashLength); - } + } else if (pathLength > dashLength) { + // Exactly 2 dashes proportionally sized + float multiplier = pathLength / (2 * dashLength + gapLength); + DashArray lineDash; + lineDash.push_back(dashLength * multiplier); + lineDash.push_back(gapLength * multiplier); + graphicsContext.setLineDash(lineDash, 0); + } // else don't dash at all - // FIXME: stroking the border path causes issues with tight corners: - // https://bugs.webkit.org/show_bug.cgi?id=58711 + // TODO(schenney): stroking the border path causes issues with tight corners: + // https://bugs.chromium.org/p/chromium/issues/detail?id=344234 graphicsContext.strokePath(centerlinePath); } @@ -1090,24 +1090,18 @@ // Adjust the width to get equal dot spacing as much as possible. float perDotLength = thickness * 2; - static float epsilon = 1.0e-2f; float pathLength = borderPath.length(); - if (pathLength < perDotLength + thickness) { - // Exactly 2 dots with whatever space we can get + if (pathLength < perDotLength) { + // Not enoguh space for 2 dots. Just draw 1 by giving a gap that is + // bigger than the length. DashArray lineDash; lineDash.push_back(0); - lineDash.push_back(pathLength - thickness - epsilon); + lineDash.push_back(perDotLength); graphicsContext.setLineDash(lineDash, 0); } else { - // Determine what number of dots gives the minimum deviation from - // idealGap between dots. Set the gap to that width. - float minNumDots = floorf((pathLength + thickness) / perDotLength); - float maxNumDots = minNumDots + 1; - float minGap = (pathLength - minNumDots * thickness) / (minNumDots - 1); - float maxGap = (pathLength - maxNumDots * thickness) / (maxNumDots - 1); - auto gap = - fabs(minGap - thickness) < fabs(maxGap - thickness) ? minGap : maxGap; + float gap = StrokeData::selectBestDashGap(pathLength, thickness, thickness); + static const float epsilon = 1.0e-2f; DashArray lineDash; lineDash.push_back(0); lineDash.push_back(gap + thickness - epsilon);
diff --git a/third_party/WebKit/Source/core/paint/BoxPainter.cpp b/third_party/WebKit/Source/core/paint/BoxPainter.cpp index bb81359..76403ba 100644 --- a/third_party/WebKit/Source/core/paint/BoxPainter.cpp +++ b/third_party/WebKit/Source/core/paint/BoxPainter.cpp
@@ -108,41 +108,6 @@ } // anonymous namespace -// Sets a preferred composited raster scale for box with a background image, -// if possible. -// |srcRect| is the rect, in the space of the source image, to raster. -// |destRect| is the rect, in the local layout space of |obj|, to raster. -inline void updatePreferredRasterBoundsFromImage( - const FloatRect srcRect, - const FloatRect& destRect, - const LayoutBoxModelObject& obj) { - if (!RuntimeEnabledFeatures::preferredImageRasterBoundsEnabled()) - return; - // Not yet implemented for SPv2. - if (RuntimeEnabledFeatures::slimmingPaintV2Enabled()) - return; - if (destRect.width() == 0.0f || destRect.height() == 0.0f) - return; - if (PaintLayer* paintLayer = obj.layer()) { - if (paintLayer->compositingState() != PaintsIntoOwnBacking) - return; - // TODO(chrishtr): ensure that this rounding does not ever lose any - // precision. - paintLayer->graphicsLayerBacking()->setPreferredRasterBounds( - roundedIntSize(srcRect.size())); - } -} - -inline void clearPreferredRasterBounds(const LayoutBox& obj) { - if (!RuntimeEnabledFeatures::preferredImageRasterBoundsEnabled()) - return; - if (PaintLayer* paintLayer = obj.layer()) { - if (paintLayer->compositingState() != PaintsIntoOwnBacking) - return; - paintLayer->graphicsLayerBacking()->clearPreferredRasterBounds(); - } -} - void BoxPainter::paintBoxDecorationBackgroundWithRect( const PaintInfo& paintInfo, const LayoutPoint& paintOffset, @@ -179,8 +144,6 @@ DisplayItem::kBoxDecorationBackground)) return; - clearPreferredRasterBounds(m_layoutBox); - DrawingRecorder recorder( paintInfo.context, displayItemClient, DisplayItem::kBoxDecorationBackground, @@ -598,8 +561,6 @@ context.drawImageRRect(imageContext.image(), border, srcRect, imageContext.compositeOp()); - updatePreferredRasterBoundsFromImage(srcRect, border.rect(), obj); - return true; }
diff --git a/third_party/WebKit/Source/core/paint/MediaControlsPainter.cpp b/third_party/WebKit/Source/core/paint/MediaControlsPainter.cpp index ad84527ad..5d69ffe 100644 --- a/third_party/WebKit/Source/core/paint/MediaControlsPainter.cpp +++ b/third_party/WebKit/Source/core/paint/MediaControlsPainter.cpp
@@ -31,6 +31,7 @@ #include "core/html/HTMLMediaElement.h" #include "core/html/TimeRanges.h" #include "core/html/shadow/MediaControlElementTypes.h" +#include "core/html/shadow/MediaControls.h" #include "core/layout/LayoutBox.h" #include "core/paint/PaintInfo.h" #include "core/style/ComputedStyle.h" @@ -50,7 +51,8 @@ static const int mediaSliderThumbPaintWidth = 12; // Painted area. static const int mediaSliderThumbPaintHeight = 12; -// Overlay play button size. +// Overlay play button size. If this changes, it must also be changed in +// core/html/shadow/MediaControls.cpp. static const int mediaOverlayPlayButtonWidth = 48; static const int mediaOverlayPlayButtonHeight = 48; @@ -176,6 +178,10 @@ if (!hasSource(mediaElement) || !mediaElement->paused()) return false; + MediaControlPanelElement* panelElement = nullptr; + if (mediaElement->mediaControls()) + panelElement = mediaElement->mediaControls()->panelElement(); + static Image* mediaOverlayPlay = platformResource("mediaplayerOverlayPlay"); IntRect buttonRect(rect); @@ -187,9 +193,10 @@ if (!box) return false; int mediaHeight = box->pixelSnappedHeight(); + int mediaPanelHeight = panelElement ? panelElement->clientHeight() : 0; buttonRect.setX(rect.center().x() - mediaOverlayPlayButtonWidth / 2); buttonRect.setY(rect.center().y() - mediaOverlayPlayButtonHeight / 2 + - (mediaHeight - rect.height()) / 2); + (mediaHeight - rect.height() - mediaPanelHeight) / 2); buttonRect.setWidth(mediaOverlayPlayButtonWidth); buttonRect.setHeight(mediaOverlayPlayButtonHeight);
diff --git a/third_party/WebKit/Source/core/paint/PaintInvalidationCapableScrollableArea.cpp b/third_party/WebKit/Source/core/paint/PaintInvalidationCapableScrollableArea.cpp index f37dd1d..8bca32a 100644 --- a/third_party/WebKit/Source/core/paint/PaintInvalidationCapableScrollableArea.cpp +++ b/third_party/WebKit/Source/core/paint/PaintInvalidationCapableScrollableArea.cpp
@@ -10,6 +10,7 @@ #include "core/layout/LayoutBox.h" #include "core/layout/LayoutScrollbar.h" #include "core/layout/LayoutScrollbarPart.h" +#include "core/layout/PaintInvalidationState.h" #include "core/paint/ObjectPaintInvalidator.h" #include "core/paint/PaintInvalidator.h" #include "core/paint/PaintLayer.h"
diff --git a/third_party/WebKit/Source/core/paint/PaintInvalidator.cpp b/third_party/WebKit/Source/core/paint/PaintInvalidator.cpp index 7b9deca..eac9f32 100644 --- a/third_party/WebKit/Source/core/paint/PaintInvalidator.cpp +++ b/third_party/WebKit/Source/core/paint/PaintInvalidator.cpp
@@ -429,8 +429,7 @@ updatePaintInvalidationContainer(object, context); bool objectShouldCheckForPaintInvalidation = - object - .shouldCheckForPaintInvalidationRegardlessOfPaintInvalidationState(); + object.shouldCheckForPaintInvalidation(); if (!context.forcedSubtreeInvalidationFlags && !objectShouldCheckForPaintInvalidation) { #if CHECK_VISUAL_RECT_UPDATE
diff --git a/third_party/WebKit/Source/core/paint/PaintLayer.cpp b/third_party/WebKit/Source/core/paint/PaintLayer.cpp index 2a663e4..abd609c8f6 100644 --- a/third_party/WebKit/Source/core/paint/PaintLayer.cpp +++ b/third_party/WebKit/Source/core/paint/PaintLayer.cpp
@@ -68,7 +68,6 @@ #include "core/layout/svg/LayoutSVGResourceClipper.h" #include "core/layout/svg/LayoutSVGRoot.h" #include "core/page/Page.h" -#include "core/page/scrolling/RootScrollerController.h" #include "core/page/scrolling/ScrollingCoordinator.h" #include "core/paint/BoxReflectionUtils.h" #include "core/paint/FilterEffectBuilder.h" @@ -156,7 +155,6 @@ m_hasDescendantWithClipPath(false), m_hasNonIsolatedDescendantWithBlendMode(false), m_hasAncestorWithClipPath(false), - m_hasRootScrollerAsDescendant(false), m_selfPaintingStatusChanged(false), m_layoutObject(layoutObject), m_parent(0), @@ -674,7 +672,6 @@ m_hasVisibleDescendant = false; m_hasNonIsolatedDescendantWithBlendMode = false; m_hasDescendantWithClipPath = false; - m_hasRootScrollerAsDescendant = false; for (PaintLayer* child = firstChild(); child; child = child->nextSibling()) { @@ -690,13 +687,6 @@ m_hasDescendantWithClipPath |= child->hasDescendantWithClipPath() || child->layoutObject().hasClipPath(); - - m_hasRootScrollerAsDescendant |= child->hasRootScrollerAsDescendant() || - (child == - child->layoutObject() - .document() - .rootScrollerController() - .rootScrollerPaintLayer()); } if (RuntimeEnabledFeatures::slimmingPaintInvalidationEnabled() &&
diff --git a/third_party/WebKit/Source/core/paint/PaintLayer.h b/third_party/WebKit/Source/core/paint/PaintLayer.h index 722352be..ad43b9f 100644 --- a/third_party/WebKit/Source/core/paint/PaintLayer.h +++ b/third_party/WebKit/Source/core/paint/PaintLayer.h
@@ -709,10 +709,6 @@ void updateAncestorDependentCompositingInputs( const AncestorDependentCompositingInputs&, bool hasAncestorWithClipPath); - void updateDescendantDependentCompositingInputs( - bool hasDescendantWithClipPath, - bool hasNonIsolatedDescendantWithBlendMode, - bool hasRootScrollerAsDescendant); void didUpdateCompositingInputs(); const IntRect& clippedAbsoluteBoundingBox() const { @@ -790,11 +786,6 @@ // stacking contexts. bool hasNonIsolatedDescendantWithBlendMode() const; - bool hasRootScrollerAsDescendant() const { - DCHECK(!m_needsDescendantDependentFlagsUpdate); - return m_hasRootScrollerAsDescendant; - } - bool lostGroupedMapping() const { DCHECK(isAllowedToQueryCompositingState()); return m_lostGroupedMapping; @@ -1206,7 +1197,6 @@ unsigned m_hasDescendantWithClipPath : 1; unsigned m_hasNonIsolatedDescendantWithBlendMode : 1; unsigned m_hasAncestorWithClipPath : 1; - unsigned m_hasRootScrollerAsDescendant : 1; unsigned m_selfPaintingStatusChanged : 1;
diff --git a/third_party/WebKit/Source/core/paint/PaintLayerPainter.cpp b/third_party/WebKit/Source/core/paint/PaintLayerPainter.cpp index 8aa1b45..9fc2b4d 100644 --- a/third_party/WebKit/Source/core/paint/PaintLayerPainter.cpp +++ b/third_party/WebKit/Source/core/paint/PaintLayerPainter.cpp
@@ -980,10 +980,6 @@ Optional<ScrollRecorder> scrollRecorder; LayoutPoint paintOffset = -m_paintLayer.layoutBoxLocation(); if (RuntimeEnabledFeatures::slimmingPaintV2Enabled()) { - const auto* objectPaintProperties = - m_paintLayer.layoutObject().paintProperties(); - DCHECK(objectPaintProperties && - objectPaintProperties->localBorderBoxProperties()); paintOffset += m_paintLayer.layoutObject().paintOffset(); newCullRect.move(paintingInfo.scrollOffsetAccumulation); } else {
diff --git a/third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilder.cpp b/third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilder.cpp index acc863e..247d41b 100644 --- a/third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilder.cpp +++ b/third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilder.cpp
@@ -683,9 +683,8 @@ if (!object.needsPaintPropertyUpdate() && !context.forceSubtreeUpdate) return; - // Avoid adding an ObjectPaintProperties for non-boxes to save memory, since - // we don't need them at the moment. - if (!object.isBox() && !object.hasLayer()) { + // We need localBorderBoxProperties for layered objects only. + if (!object.hasLayer()) { if (auto* properties = object.getMutableForPainting().paintProperties()) properties->clearLocalBorderBoxProperties(); } else {
diff --git a/third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilderTest.cpp b/third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilderTest.cpp index a2c6de28..d8ed4c874 100644 --- a/third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilderTest.cpp +++ b/third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilderTest.cpp
@@ -75,49 +75,47 @@ Settings::setMockScrollbarsEnabled(false); } -#define CHECK_VISUAL_RECT(expected, sourceLayoutObject, ancestorLayoutObject, \ - slopFactor) \ - do { \ - std::unique_ptr<GeometryMapper> geometryMapper = GeometryMapper::create(); \ - LayoutRect source((sourceLayoutObject)->localVisualRect()); \ - source.moveBy((sourceLayoutObject)->paintOffset()); \ - const auto& contentsProperties = \ - *(ancestorLayoutObject)->paintProperties()->contentsProperties(); \ - FloatRect actualFloatRect(source); \ - geometryMapper->sourceToDestinationVisualRect( \ - *(sourceLayoutObject)->paintProperties()->localBorderBoxProperties(), \ - contentsProperties, actualFloatRect); \ - LayoutRect actual(actualFloatRect); \ - actual.moveBy(-(ancestorLayoutObject)->paintOffset()); \ - EXPECT_EQ(expected, actual) \ - << "GeometryMapper: expected: " << expected.toString() \ - << ", actual: " << actual.toString(); \ - \ - if (slopFactor == LayoutUnit::max()) \ - break; \ - LayoutRect slowPathRect = (sourceLayoutObject)->localVisualRect(); \ - (sourceLayoutObject) \ - ->mapToVisualRectInAncestorSpace(ancestorLayoutObject, slowPathRect); \ - if (slopFactor) { \ - LayoutRect inflatedActual = LayoutRect(actual); \ - inflatedActual.inflate(slopFactor); \ - SCOPED_TRACE( \ - String::format("Old path rect: %s, Actual: %s, Inflated actual: %s", \ - slowPathRect.toString().ascii().data(), \ - actual.toString().ascii().data(), \ - inflatedActual.toString().ascii().data())); \ - EXPECT_TRUE(slowPathRect.contains(LayoutRect(actual))); \ - EXPECT_TRUE(inflatedActual.contains(slowPathRect)); \ - } else { \ - EXPECT_EQ(expected, slowPathRect) \ - << "Slow path: expected: " << slowPathRect.toString() \ - << ", actual: " << actual.toString().ascii().data(); \ - } \ +#define CHECK_VISUAL_RECT(expected, sourceObject, ancestorObject, slopFactor) \ + do { \ + if ((sourceObject)->hasLayer() && (ancestorObject)->hasLayer()) { \ + auto geometryMapper = GeometryMapper::create(); \ + LayoutRect source((sourceObject)->localVisualRect()); \ + source.moveBy((sourceObject)->paintOffset()); \ + const auto& contentsProperties = \ + *(ancestorObject)->paintProperties()->contentsProperties(); \ + FloatRect actualFloatRect(source); \ + geometryMapper->sourceToDestinationVisualRect( \ + *(sourceObject)->paintProperties()->localBorderBoxProperties(), \ + contentsProperties, actualFloatRect); \ + LayoutRect actual(actualFloatRect); \ + actual.moveBy(-(ancestorObject)->paintOffset()); \ + SCOPED_TRACE("GeometryMapper: "); \ + EXPECT_EQ(expected, actual); \ + } \ + \ + if (slopFactor == LayoutUnit::max()) \ + break; \ + LayoutRect slowPathRect = (sourceObject)->localVisualRect(); \ + (sourceObject) \ + ->mapToVisualRectInAncestorSpace(ancestorObject, slowPathRect); \ + if (slopFactor) { \ + LayoutRect inflatedExpected = LayoutRect(expected); \ + inflatedExpected.inflate(slopFactor); \ + SCOPED_TRACE(String::format( \ + "Old path rect: %s, Expected: %s, Inflated expected: %s", \ + slowPathRect.toString().ascii().data(), \ + expected.toString().ascii().data(), \ + inflatedExpected.toString().ascii().data())); \ + EXPECT_TRUE(slowPathRect.contains(LayoutRect(expected))); \ + EXPECT_TRUE(inflatedExpected.contains(slowPathRect)); \ + } else { \ + SCOPED_TRACE("Slow path: "); \ + EXPECT_EQ(expected, slowPathRect); \ + } \ } while (0) -#define CHECK_EXACT_VISUAL_RECT(expected, sourceLayoutObject, \ - ancestorLayoutObject) \ - CHECK_VISUAL_RECT(expected, sourceLayoutObject, ancestorLayoutObject, 0) +#define CHECK_EXACT_VISUAL_RECT(expected, sourceObject, ancestorObject) \ + CHECK_VISUAL_RECT(expected, sourceObject, ancestorObject, 0) INSTANTIATE_TEST_CASE_P(All, PaintPropertyTreeBuilderTest, ::testing::Bool()); @@ -534,7 +532,7 @@ document().getElementById("nodeWithoutOpacity")->layoutObject(); const ObjectPaintProperties* nodeWithoutOpacityProperties = nodeWithoutOpacity->paintProperties(); - EXPECT_NE(nullptr, nodeWithoutOpacityProperties); + EXPECT_EQ(nullptr, nodeWithoutOpacityProperties); CHECK_EXACT_VISUAL_RECT(LayoutRect(8, 8, 100, 200), nodeWithoutOpacity, document().view()->layoutView()); @@ -550,7 +548,7 @@ LayoutObject* grandChildWithoutOpacity = document().getElementById("grandChildWithoutOpacity")->layoutObject(); - EXPECT_NE(nullptr, grandChildWithoutOpacity->paintProperties()); + EXPECT_EQ(nullptr, grandChildWithoutOpacity->paintProperties()); CHECK_EXACT_VISUAL_RECT(LayoutRect(8, 8, 20, 30), grandChildWithoutOpacity, document().view()->layoutView()); @@ -1449,7 +1447,7 @@ " width: 100px;" " height: 100px;" " }" - " #abs {" + " #absolute {" " position: absolute;" " left: 654px;" " top: 321px;" @@ -1484,7 +1482,7 @@ absPosProperties->localBorderBoxProperties()->clip()); EXPECT_EQ(framePreTranslation(), absPosProperties->localBorderBoxProperties()->transform()); - EXPECT_EQ(LayoutPoint(123, 456), absolute->paintOffset()); + EXPECT_EQ(LayoutPoint(777, 777), absolute->paintOffset()); CHECK_VISUAL_RECT(LayoutRect(), absolute, document().view()->layoutView(), // TODO(crbug.com/599939): CSS clip of fixed-position // descendants is broken in @@ -3142,9 +3140,10 @@ "<div style='position: absolute; top: 55px; left: 66px'>" " <span id='span'" " style='position: relative; top: 100px; left: 200px; opacity: 0.5'>" - " <div id='target' style='float: left; width: 33px; height: 44px'>" + " <div id='target'" + " style='overflow: hidden; float: left; width: 3px; height: 4px'>" " </div>" - " </span" + " </span>" "</div>"); LayoutObject* span = getLayoutObjectByElementId("span");
diff --git a/third_party/WebKit/Source/core/paint/PrePaintTreeWalk.cpp b/third_party/WebKit/Source/core/paint/PrePaintTreeWalk.cpp index d6e05ed..8706e09f 100644 --- a/third_party/WebKit/Source/core/paint/PrePaintTreeWalk.cpp +++ b/third_party/WebKit/Source/core/paint/PrePaintTreeWalk.cpp
@@ -234,13 +234,11 @@ bool PrePaintTreeWalk::shouldEndWalkBefore( const LayoutObject& object, const PrePaintTreeWalkContext& context) { - return ( - !object.needsPaintPropertyUpdate() && - !object.descendantNeedsPaintPropertyUpdate() && - !context.treeBuilderContext->forceSubtreeUpdate && - !context.paintInvalidatorContext.forcedSubtreeInvalidationFlags && - !object - .shouldCheckForPaintInvalidationRegardlessOfPaintInvalidationState()); + return !object.needsPaintPropertyUpdate() && + !object.descendantNeedsPaintPropertyUpdate() && + !context.treeBuilderContext->forceSubtreeUpdate && + !context.paintInvalidatorContext.forcedSubtreeInvalidationFlags && + !object.shouldCheckForPaintInvalidation(); } void PrePaintTreeWalk::walk(const LayoutObject& object,
diff --git a/third_party/WebKit/Source/core/paint/TablePaintInvalidator.cpp b/third_party/WebKit/Source/core/paint/TablePaintInvalidator.cpp index 30d7d12..f76452a 100644 --- a/third_party/WebKit/Source/core/paint/TablePaintInvalidator.cpp +++ b/third_party/WebKit/Source/core/paint/TablePaintInvalidator.cpp
@@ -48,9 +48,7 @@ LayoutTableSection* section = toLayoutTableSection(child); section->ensureIsReadyForPaintInvalidation(); ObjectPaintInvalidator sectionInvalidator(*section); - if (!hasColChangedBackground && - !section - ->shouldCheckForPaintInvalidationRegardlessOfPaintInvalidationState()) + if (!hasColChangedBackground && !section->shouldCheckForPaintInvalidation()) continue; for (LayoutTableRow* row = section->firstRow(); row; row = row->nextRow()) { row->ensureIsReadyForPaintInvalidation();
diff --git a/third_party/WebKit/Source/core/style/ComputedStyle.cpp b/third_party/WebKit/Source/core/style/ComputedStyle.cpp index dd68659..204d91b 100644 --- a/third_party/WebKit/Source/core/style/ComputedStyle.cpp +++ b/third_party/WebKit/Source/core/style/ComputedStyle.cpp
@@ -95,7 +95,7 @@ ASSERT_SIZE(ComputedStyle, SameSizeAsComputedStyle); PassRefPtr<ComputedStyle> ComputedStyle::create() { - return adoptRef(new ComputedStyle()); + return adoptRef(new ComputedStyle(initialStyle())); } PassRefPtr<ComputedStyle> ComputedStyle::createInitialStyle() { @@ -120,24 +120,6 @@ return adoptRef(new ComputedStyle(other)); } -ALWAYS_INLINE ComputedStyle::ComputedStyle() - : ComputedStyleBase(), - RefCounted<ComputedStyle>(), - m_box(initialStyle().m_box), - m_visual(initialStyle().m_visual), - m_background(initialStyle().m_background), - m_surround(initialStyle().m_surround), - m_rareNonInheritedData(initialStyle().m_rareNonInheritedData), - m_rareInheritedData(initialStyle().m_rareInheritedData), - m_styleInheritedData(initialStyle().m_styleInheritedData), - m_svgStyle(initialStyle().m_svgStyle) { - initializeBitDefaults(); // Would it be faster to copy this from the default - // style? - static_assert((sizeof(InheritedData) <= 8), "InheritedData should not grow"); - static_assert((sizeof(NonInheritedData) <= 12), - "NonInheritedData should not grow"); -} - ALWAYS_INLINE ComputedStyle::ComputedStyle(InitialStyleTag) : ComputedStyleBase(), RefCounted<ComputedStyle>() { initializeBitDefaults();
diff --git a/third_party/WebKit/Source/core/style/ComputedStyle.h b/third_party/WebKit/Source/core/style/ComputedStyle.h index 043e2233..7cec815 100644 --- a/third_party/WebKit/Source/core/style/ComputedStyle.h +++ b/third_party/WebKit/Source/core/style/ComputedStyle.h
@@ -302,14 +302,13 @@ } private: - // TODO(sashab): Move these to the bottom of ComputedStyle. - ALWAYS_INLINE ComputedStyle(); - + // TODO(sashab): Move these private members to the bottom of ComputedStyle. enum InitialStyleTag { InitialStyle }; ALWAYS_INLINE explicit ComputedStyle(InitialStyleTag); ALWAYS_INLINE ComputedStyle(const ComputedStyle&); static PassRefPtr<ComputedStyle> createInitialStyle(); + // TODO(shend): Remove this. Initial style should not be mutable. static inline ComputedStyle& mutableInitialStyle() { LEAK_SANITIZER_DISABLED_SCOPE; DEFINE_STATIC_REF(ComputedStyle, s_initialStyle,
diff --git a/third_party/WebKit/Source/core/svg/SVGAngle.cpp b/third_party/WebKit/Source/core/svg/SVGAngle.cpp index 3924f93..7418a5e 100644 --- a/third_party/WebKit/Source/core/svg/SVGAngle.cpp +++ b/third_party/WebKit/Source/core/svg/SVGAngle.cpp
@@ -127,7 +127,7 @@ return m_valueInSpecifiedUnits; } - ASSERT_NOT_REACHED(); + NOTREACHED(); return 0; } @@ -210,7 +210,7 @@ return String::number(m_valueInSpecifiedUnits); } - ASSERT_NOT_REACHED(); + NOTREACHED(); return String(); } @@ -293,7 +293,7 @@ break; case kSvgAngletypeTurn: case kSvgAngletypeUnknown: - ASSERT_NOT_REACHED(); + NOTREACHED(); break; } break; @@ -311,7 +311,7 @@ break; case kSvgAngletypeRad: case kSvgAngletypeUnknown: - ASSERT_NOT_REACHED(); + NOTREACHED(); break; } break; @@ -329,7 +329,7 @@ break; case kSvgAngletypeGrad: case kSvgAngletypeUnknown: - ASSERT_NOT_REACHED(); + NOTREACHED(); break; } break; @@ -351,12 +351,12 @@ case kSvgAngletypeDeg: break; case kSvgAngletypeUnknown: - ASSERT_NOT_REACHED(); + NOTREACHED(); break; } break; case kSvgAngletypeUnknown: - ASSERT_NOT_REACHED(); + NOTREACHED(); break; }
diff --git a/third_party/WebKit/Source/core/svg/SVGAnimatedColor.cpp b/third_party/WebKit/Source/core/svg/SVGAnimatedColor.cpp index 875f7bfe..a9bee91 100644 --- a/third_party/WebKit/Source/core/svg/SVGAnimatedColor.cpp +++ b/third_party/WebKit/Source/core/svg/SVGAnimatedColor.cpp
@@ -41,7 +41,7 @@ SVGPropertyBase* SVGColorProperty::cloneForAnimation(const String&) const { // SVGAnimatedColor is deprecated. So No SVG DOM animation. - ASSERT_NOT_REACHED(); + NOTREACHED(); return nullptr; }
diff --git a/third_party/WebKit/Source/core/svg/SVGBoolean.cpp b/third_party/WebKit/Source/core/svg/SVGBoolean.cpp index a2dcb2c9..9c7dc4c 100644 --- a/third_party/WebKit/Source/core/svg/SVGBoolean.cpp +++ b/third_party/WebKit/Source/core/svg/SVGBoolean.cpp
@@ -51,7 +51,7 @@ } void SVGBoolean::add(SVGPropertyBase*, SVGElement*) { - ASSERT_NOT_REACHED(); + NOTREACHED(); } void SVGBoolean::calculateAnimatedValue(SVGAnimationElement* animationElement,
diff --git a/third_party/WebKit/Source/core/svg/SVGEnumeration.cpp b/third_party/WebKit/Source/core/svg/SVGEnumeration.cpp index f32cb9f..ab977855 100644 --- a/third_party/WebKit/Source/core/svg/SVGEnumeration.cpp +++ b/third_party/WebKit/Source/core/svg/SVGEnumeration.cpp
@@ -77,7 +77,7 @@ } void SVGEnumerationBase::add(SVGPropertyBase*, SVGElement*) { - ASSERT_NOT_REACHED(); + NOTREACHED(); } void SVGEnumerationBase::calculateAnimatedValue(
diff --git a/third_party/WebKit/Source/core/svg/SVGFEBlendElement.cpp b/third_party/WebKit/Source/core/svg/SVGFEBlendElement.cpp index 4c4f23c..98214ca 100644 --- a/third_party/WebKit/Source/core/svg/SVGFEBlendElement.cpp +++ b/third_party/WebKit/Source/core/svg/SVGFEBlendElement.cpp
@@ -49,7 +49,7 @@ MAP_BLEND_MODE(Color); MAP_BLEND_MODE(Luminosity); default: - ASSERT_NOT_REACHED(); + NOTREACHED(); return WebBlendModeNormal; } #undef MAP_BLEND_MODE
diff --git a/third_party/WebKit/Source/core/svg/SVGLengthContext.cpp b/third_party/WebKit/Source/core/svg/SVGLengthContext.cpp index de0637a6..717604b 100644 --- a/third_party/WebKit/Source/core/svg/SVGLengthContext.cpp +++ b/third_party/WebKit/Source/core/svg/SVGLengthContext.cpp
@@ -46,7 +46,7 @@ case SVGLengthMode::Other: return sqrtf(viewportSize.diagonalLengthSquared() / 2); } - ASSERT_NOT_REACHED(); + NOTREACHED(); return 0; } @@ -152,7 +152,7 @@ break; } - ASSERT_NOT_REACHED(); + NOTREACHED(); return 0; } @@ -308,7 +308,7 @@ userUnits = value * dimensionForViewportUnit(m_context, fromUnit); break; default: - ASSERT_NOT_REACHED(); + NOTREACHED(); break; } @@ -367,7 +367,7 @@ break; } - ASSERT_NOT_REACHED(); + NOTREACHED(); return 0; }
diff --git a/third_party/WebKit/Source/core/svg/SVGParsingError.cpp b/third_party/WebKit/Source/core/svg/SVGParsingError.cpp index db221a4..2ef3c5b 100644 --- a/third_party/WebKit/Source/core/svg/SVGParsingError.cpp +++ b/third_party/WebKit/Source/core/svg/SVGParsingError.cpp
@@ -61,7 +61,7 @@ case SVGParseStatus::ParsingFailed: return std::make_pair("Invalid value, ", "."); default: - ASSERT_NOT_REACHED(); + NOTREACHED(); break; } return std::make_pair("", "");
diff --git a/third_party/WebKit/Source/core/svg/SVGPathBlender.cpp b/third_party/WebKit/Source/core/svg/SVGPathBlender.cpp index 4d88330..673ece2 100644 --- a/third_party/WebKit/Source/core/svg/SVGPathBlender.cpp +++ b/third_party/WebKit/Source/core/svg/SVGPathBlender.cpp
@@ -205,7 +205,7 @@ currentPoint = subPathPoint; break; default: - ASSERT_NOT_REACHED(); + NOTREACHED(); } } @@ -277,7 +277,7 @@ } break; default: - ASSERT_NOT_REACHED(); + NOTREACHED(); } updateCurrentPoint(m_fromSubPathPoint, m_fromCurrentPoint, fromSeg);
diff --git a/third_party/WebKit/Source/core/svg/SVGPathBuilder.cpp b/third_party/WebKit/Source/core/svg/SVGPathBuilder.cpp index 2dfbb88..f7d81e98 100644 --- a/third_party/WebKit/Source/core/svg/SVGPathBuilder.cpp +++ b/third_party/WebKit/Source/core/svg/SVGPathBuilder.cpp
@@ -172,7 +172,7 @@ segment.largeArcFlag(), segment.sweepFlag()); break; default: - ASSERT_NOT_REACHED(); + NOTREACHED(); } m_lastCommand = segment.command;
diff --git a/third_party/WebKit/Source/core/svg/SVGPathByteStreamBuilder.cpp b/third_party/WebKit/Source/core/svg/SVGPathByteStreamBuilder.cpp index b5f1ea8..9d7f4724 100644 --- a/third_party/WebKit/Source/core/svg/SVGPathByteStreamBuilder.cpp +++ b/third_party/WebKit/Source/core/svg/SVGPathByteStreamBuilder.cpp
@@ -112,7 +112,7 @@ buffer.writeFloatPoint(segment.targetPoint); break; default: - ASSERT_NOT_REACHED(); + NOTREACHED(); } }
diff --git a/third_party/WebKit/Source/core/svg/SVGPathByteStreamSource.cpp b/third_party/WebKit/Source/core/svg/SVGPathByteStreamSource.cpp index 01b3912..56b63168 100644 --- a/third_party/WebKit/Source/core/svg/SVGPathByteStreamSource.cpp +++ b/third_party/WebKit/Source/core/svg/SVGPathByteStreamSource.cpp
@@ -68,7 +68,7 @@ break; } default: - ASSERT_NOT_REACHED(); + NOTREACHED(); } return segment; }
diff --git a/third_party/WebKit/Source/core/svg/SVGPathParser.cpp b/third_party/WebKit/Source/core/svg/SVGPathParser.cpp index 7a58948..f37ebe3 100644 --- a/third_party/WebKit/Source/core/svg/SVGPathParser.cpp +++ b/third_party/WebKit/Source/core/svg/SVGPathParser.cpp
@@ -152,7 +152,7 @@ } break; default: - ASSERT_NOT_REACHED(); + NOTREACHED(); } if (normSeg.command != PathSegArcAbs)
diff --git a/third_party/WebKit/Source/core/svg/SVGPathQuery.cpp b/third_party/WebKit/Source/core/svg/SVGPathQuery.cpp index 411ca90..17da979 100644 --- a/third_party/WebKit/Source/core/svg/SVGPathQuery.cpp +++ b/third_party/WebKit/Source/core/svg/SVGPathQuery.cpp
@@ -79,7 +79,7 @@ segment.point1, segment.point2, segment.targetPoint); break; default: - ASSERT_NOT_REACHED(); + NOTREACHED(); } }
diff --git a/third_party/WebKit/Source/core/svg/SVGPathStringBuilder.cpp b/third_party/WebKit/Source/core/svg/SVGPathStringBuilder.cpp index 2443876..488ba6df 100644 --- a/third_party/WebKit/Source/core/svg/SVGPathStringBuilder.cpp +++ b/third_party/WebKit/Source/core/svg/SVGPathStringBuilder.cpp
@@ -122,7 +122,7 @@ appendPoint(m_stringBuilder, segment.targetPoint); break; default: - ASSERT_NOT_REACHED(); + NOTREACHED(); } m_stringBuilder.append(' '); }
diff --git a/third_party/WebKit/Source/core/svg/SVGPathStringSource.cpp b/third_party/WebKit/Source/core/svg/SVGPathStringSource.cpp index dd46b3a..3359100 100644 --- a/third_party/WebKit/Source/core/svg/SVGPathStringSource.cpp +++ b/third_party/WebKit/Source/core/svg/SVGPathStringSource.cpp
@@ -243,7 +243,7 @@ segment.targetPoint.setY(parseNumberWithError()); break; case PathSegUnknown: - ASSERT_NOT_REACHED(); + NOTREACHED(); } if (UNLIKELY(m_error.status() != SVGParseStatus::NoError))
diff --git a/third_party/WebKit/Source/core/svg/SVGPreserveAspectRatio.cpp b/third_party/WebKit/Source/core/svg/SVGPreserveAspectRatio.cpp index c5a59884..9ee12c9 100644 --- a/third_party/WebKit/Source/core/svg/SVGPreserveAspectRatio.cpp +++ b/third_party/WebKit/Source/core/svg/SVGPreserveAspectRatio.cpp
@@ -430,7 +430,7 @@ } void SVGPreserveAspectRatio::add(SVGPropertyBase* other, SVGElement*) { - ASSERT_NOT_REACHED(); + NOTREACHED(); } void SVGPreserveAspectRatio::calculateAnimatedValue(
diff --git a/third_party/WebKit/Source/core/svg/SVGSVGElement.cpp b/third_party/WebKit/Source/core/svg/SVGSVGElement.cpp index 0206083a..0e57182 100644 --- a/third_party/WebKit/Source/core/svg/SVGSVGElement.cpp +++ b/third_party/WebKit/Source/core/svg/SVGSVGElement.cpp
@@ -344,7 +344,7 @@ result = rect.contains(mappedRepaintRect); break; default: - ASSERT_NOT_REACHED(); + NOTREACHED(); break; }
diff --git a/third_party/WebKit/Source/core/svg/SVGStaticStringList.cpp b/third_party/WebKit/Source/core/svg/SVGStaticStringList.cpp index 97c94c9..8cbf62e 100644 --- a/third_party/WebKit/Source/core/svg/SVGStaticStringList.cpp +++ b/third_party/WebKit/Source/core/svg/SVGStaticStringList.cpp
@@ -55,7 +55,7 @@ } const SVGPropertyBase& SVGStaticStringList::baseValueBase() const { - ASSERT_NOT_REACHED(); + NOTREACHED(); return *m_value; } @@ -64,16 +64,16 @@ } SVGPropertyBase* SVGStaticStringList::createAnimatedValue() { - ASSERT_NOT_REACHED(); + NOTREACHED(); return nullptr; } void SVGStaticStringList::setAnimatedValue(SVGPropertyBase*) { - ASSERT_NOT_REACHED(); + NOTREACHED(); } void SVGStaticStringList::animationEnded() { - ASSERT_NOT_REACHED(); + NOTREACHED(); } bool SVGStaticStringList::needsSynchronizeAttribute() {
diff --git a/third_party/WebKit/Source/core/svg/SVGStringList.cpp b/third_party/WebKit/Source/core/svg/SVGStringList.cpp index be9c878d..2549e65 100644 --- a/third_party/WebKit/Source/core/svg/SVGStringList.cpp +++ b/third_party/WebKit/Source/core/svg/SVGStringList.cpp
@@ -147,7 +147,7 @@ void SVGStringList::add(SVGPropertyBase* other, SVGElement* contextElement) { // SVGStringList is never animated. - ASSERT_NOT_REACHED(); + NOTREACHED(); } void SVGStringList::calculateAnimatedValue(SVGAnimationElement*, @@ -158,12 +158,12 @@ SVGPropertyBase*, SVGElement*) { // SVGStringList is never animated. - ASSERT_NOT_REACHED(); + NOTREACHED(); } float SVGStringList::calculateDistance(SVGPropertyBase*, SVGElement*) { // SVGStringList is never animated. - ASSERT_NOT_REACHED(); + NOTREACHED(); return -1.0f; }
diff --git a/third_party/WebKit/Source/core/svg/SVGTransform.cpp b/third_party/WebKit/Source/core/svg/SVGTransform.cpp index 0518512..c0feae20 100644 --- a/third_party/WebKit/Source/core/svg/SVGTransform.cpp +++ b/third_party/WebKit/Source/core/svg/SVGTransform.cpp
@@ -56,7 +56,7 @@ SVGPropertyBase* SVGTransform::cloneForAnimation(const String&) const { // SVGTransform is never animated. - ASSERT_NOT_REACHED(); + NOTREACHED(); return nullptr; } @@ -142,7 +142,7 @@ case kSvgTransformSkewy: return "skewY("; } - ASSERT_NOT_REACHED(); + NOTREACHED(); return ""; } @@ -217,7 +217,7 @@ void SVGTransform::add(SVGPropertyBase*, SVGElement*) { // SVGTransform is not animated by itself. - ASSERT_NOT_REACHED(); + NOTREACHED(); } void SVGTransform::calculateAnimatedValue(SVGAnimationElement*, @@ -228,12 +228,12 @@ SVGPropertyBase*, SVGElement*) { // SVGTransform is not animated by itself. - ASSERT_NOT_REACHED(); + NOTREACHED(); } float SVGTransform::calculateDistance(SVGPropertyBase*, SVGElement*) { // SVGTransform is not animated by itself. - ASSERT_NOT_REACHED(); + NOTREACHED(); return -1; }
diff --git a/third_party/WebKit/Source/core/svg/SVGTransformDistance.cpp b/third_party/WebKit/Source/core/svg/SVGTransformDistance.cpp index 91115288..b76ca94 100644 --- a/third_party/WebKit/Source/core/svg/SVGTransformDistance.cpp +++ b/third_party/WebKit/Source/core/svg/SVGTransformDistance.cpp
@@ -47,7 +47,7 @@ switch (m_transformType) { case kSvgTransformMatrix: - ASSERT_NOT_REACHED(); + NOTREACHED(); case kSvgTransformUnknown: break; case kSvgTransformRotate: { @@ -84,7 +84,7 @@ float scaleFactor) const { switch (m_transformType) { case kSvgTransformMatrix: - ASSERT_NOT_REACHED(); + NOTREACHED(); case kSvgTransformUnknown: return SVGTransformDistance(); case kSvgTransformRotate: @@ -108,7 +108,7 @@ AffineTransform()); } - ASSERT_NOT_REACHED(); + NOTREACHED(); return SVGTransformDistance(); } @@ -121,7 +121,7 @@ switch (first->transformType()) { case kSvgTransformMatrix: - ASSERT_NOT_REACHED(); + NOTREACHED(); case kSvgTransformUnknown: return transform; case kSvgTransformRotate: { @@ -152,7 +152,7 @@ transform->setSkewY(first->angle() + second->angle() * repeatCount); return transform; } - ASSERT_NOT_REACHED(); + NOTREACHED(); return transform; } @@ -165,7 +165,7 @@ switch (m_transformType) { case kSvgTransformMatrix: - ASSERT_NOT_REACHED(); + NOTREACHED(); case kSvgTransformUnknown: return SVGTransform::create(); case kSvgTransformTranslate: { @@ -195,14 +195,14 @@ return newTransform; } - ASSERT_NOT_REACHED(); + NOTREACHED(); return newTransform; } float SVGTransformDistance::distance() const { switch (m_transformType) { case kSvgTransformMatrix: - ASSERT_NOT_REACHED(); + NOTREACHED(); case kSvgTransformUnknown: return 0; case kSvgTransformRotate: @@ -217,7 +217,7 @@ case kSvgTransformSkewy: return m_angle; } - ASSERT_NOT_REACHED(); + NOTREACHED(); return 0; }
diff --git a/third_party/WebKit/Source/core/svg/SVGTransformList.cpp b/third_party/WebKit/Source/core/svg/SVGTransformList.cpp index 434641e..95b16887 100644 --- a/third_party/WebKit/Source/core/svg/SVGTransformList.cpp +++ b/third_party/WebKit/Source/core/svg/SVGTransformList.cpp
@@ -288,7 +288,7 @@ arguments[4], arguments[5])); break; case kSvgTransformUnknown: - ASSERT_NOT_REACHED(); + NOTREACHED(); break; } return transform;
diff --git a/third_party/WebKit/Source/core/svg/properties/SVGAnimatedProperty.cpp b/third_party/WebKit/Source/core/svg/properties/SVGAnimatedProperty.cpp index a6a9a698..15c362c 100644 --- a/third_party/WebKit/Source/core/svg/properties/SVGAnimatedProperty.cpp +++ b/third_party/WebKit/Source/core/svg/properties/SVGAnimatedProperty.cpp
@@ -40,7 +40,10 @@ const QualifiedName& attributeName, CSSPropertyID cssPropertyId) : m_type(type), - m_cssPropertyId(cssPropertyId), + // Cast to avoid warnings about unsafe bitfield truncations of the CSS + // property enum. CSS properties that don't fit in this bitfield are never + // used here. See static_assert in header. + m_cssPropertyId(static_cast<unsigned>(cssPropertyId)), m_contextElement(contextElement), m_attributeName(attributeName) { DCHECK(m_contextElement);
diff --git a/third_party/WebKit/Source/core/workers/InProcessWorkerMessagingProxy.cpp b/third_party/WebKit/Source/core/workers/InProcessWorkerMessagingProxy.cpp index 1dc6974..777b34f 100644 --- a/third_party/WebKit/Source/core/workers/InProcessWorkerMessagingProxy.cpp +++ b/third_party/WebKit/Source/core/workers/InProcessWorkerMessagingProxy.cpp
@@ -49,6 +49,11 @@ namespace blink { +struct InProcessWorkerMessagingProxy::QueuedTask { + RefPtr<SerializedScriptValue> message; + MessagePortChannelArray channels; +}; + InProcessWorkerMessagingProxy::InProcessWorkerMessagingProxy( InProcessWorkerBase* workerObject, WorkerClients* workerClients) @@ -149,7 +154,7 @@ workerThread()->postTask(BLINK_FROM_HERE, std::move(task)); } else { m_queuedEarlyTasks.push_back( - WTF::makeUnique<QueuedTask>(std::move(message), std::move(channels))); + QueuedTask{std::move(message), std::move(channels)}); } } @@ -192,8 +197,8 @@ std::unique_ptr<WTF::CrossThreadClosure> task = crossThreadBind( &InProcessWorkerObjectProxy::processMessageFromWorkerObject, crossThreadUnretained(&workerObjectProxy()), - queuedTask->message.release(), - WTF::passed(std::move(queuedTask->channels)), + queuedTask.message.release(), + WTF::passed(std::move(queuedTask.channels)), crossThreadUnretained(workerThread())); workerThread()->postTask(BLINK_FROM_HERE, std::move(task)); } @@ -238,11 +243,4 @@ return m_workerGlobalScopeHasPendingActivity; } -InProcessWorkerMessagingProxy::QueuedTask::QueuedTask( - RefPtr<SerializedScriptValue> message, - MessagePortChannelArray channels) - : message(std::move(message)), channels(std::move(channels)) {} - -InProcessWorkerMessagingProxy::QueuedTask::~QueuedTask() = default; - } // namespace blink
diff --git a/third_party/WebKit/Source/core/workers/InProcessWorkerMessagingProxy.h b/third_party/WebKit/Source/core/workers/InProcessWorkerMessagingProxy.h index cc4e01f..6e708c0 100644 --- a/third_party/WebKit/Source/core/workers/InProcessWorkerMessagingProxy.h +++ b/third_party/WebKit/Source/core/workers/InProcessWorkerMessagingProxy.h
@@ -98,17 +98,9 @@ WeakPersistent<InProcessWorkerBase> m_workerObject; Persistent<WorkerClients> m_workerClients; - struct QueuedTask { - RefPtr<SerializedScriptValue> message; - MessagePortChannelArray channels; - - QueuedTask(RefPtr<SerializedScriptValue> message, - MessagePortChannelArray channels); - ~QueuedTask(); - }; - // Tasks are queued here until there's a thread object created. - Vector<std::unique_ptr<QueuedTask>> m_queuedEarlyTasks; + struct QueuedTask; + Vector<QueuedTask> m_queuedEarlyTasks; // Unconfirmed messages from the parent context thread to the worker thread. // When this is greater than 0, |m_workerGlobalScopeHasPendingActivity| should
diff --git a/third_party/WebKit/Source/devtools/front_end/diff/Diff.js b/third_party/WebKit/Source/devtools/front_end/diff/Diff.js index 91fafabd..16ca602 100644 --- a/third_party/WebKit/Source/devtools/front_end/diff/Diff.js +++ b/third_party/WebKit/Source/devtools/front_end/diff/Diff.js
@@ -5,11 +5,15 @@ /** * @param {string} text1 * @param {string} text2 + * @param {boolean=} cleanup * @return {!Array.<!{0: number, 1: string}>} */ - charDiff: function(text1, text2) { + charDiff: function(text1, text2, cleanup) { var differ = new diff_match_patch(); - return differ.diff_main(text1, text2); + var diff = differ.diff_main(text1, text2); + if (cleanup) + differ.diff_cleanupSemantic(diff); + return diff; }, /**
diff --git a/third_party/WebKit/Source/devtools/front_end/externs.js b/third_party/WebKit/Source/devtools/front_end/externs.js index b2d0239..f6dc995f9 100644 --- a/third_party/WebKit/Source/devtools/front_end/externs.js +++ b/third_party/WebKit/Source/devtools/front_end/externs.js
@@ -357,7 +357,12 @@ * @param {string} text2 * @return {!Array.<!{0: number, 1: string}>} */ - diff_main: function(text1, text2) {} + diff_main: function(text1, text2) {}, + + /** + * @param {!Array.<!{0: number, 1: string}>} diff + */ + diff_cleanupSemantic(diff) {} }; /** @constructor */
diff --git a/third_party/WebKit/Source/devtools/front_end/sdk/ConsoleModel.js b/third_party/WebKit/Source/devtools/front_end/sdk/ConsoleModel.js index 66145c6..bb46b94 100644 --- a/third_party/WebKit/Source/devtools/front_end/sdk/ConsoleModel.js +++ b/third_party/WebKit/Source/devtools/front_end/sdk/ConsoleModel.js
@@ -67,12 +67,24 @@ SDK.CPUProfilerModel.Events.ConsoleProfileFinished, this._consoleProfileFinished, this); } + var resourceTreeModel = target.model(SDK.ResourceTreeModel); + if (resourceTreeModel) { + resourceTreeModel.addEventListener( + SDK.ResourceTreeModel.Events.MainFrameStartedLoading, this._mainFrameStartedLoading, this); + resourceTreeModel.addEventListener( + SDK.ResourceTreeModel.Events.MainFrameNavigated, this._mainFrameNavigated, this); + } + var runtimeModel = target.model(SDK.RuntimeModel); if (runtimeModel) { runtimeModel.addEventListener(SDK.RuntimeModel.Events.ExceptionThrown, this._exceptionThrown, this); runtimeModel.addEventListener(SDK.RuntimeModel.Events.ExceptionRevoked, this._exceptionRevoked, this); runtimeModel.addEventListener(SDK.RuntimeModel.Events.ConsoleAPICalled, this._consoleAPICalled, this); } + + var networkManager = target.model(SDK.NetworkManager); + if (networkManager) + networkManager.addEventListener(SDK.NetworkManager.Events.WarningGenerated, this._networkWarningGenerated, this); } /** @@ -207,6 +219,22 @@ /** * @param {!Common.Event} event */ + _mainFrameStartedLoading(event) { + if (!Common.moduleSetting('preserveConsoleLog').get()) + this.clear(); + } + + /** + * @param {!Common.Event} event + */ + _mainFrameNavigated(event) { + if (Common.moduleSetting('preserveConsoleLog').get()) + Common.console.log(Common.UIString('Navigated to %s', event.data.url)); + } + + /** + * @param {!Common.Event} event + */ _consoleProfileStarted(event) { var data = /** @type {!SDK.CPUProfilerModel.EventData} */ (event.data); this._addConsoleProfileMessage( @@ -243,6 +271,16 @@ } /** + * @param {!Common.Event} event + */ + _networkWarningGenerated(event) { + var warning = /** @type {!SDK.NetworkManager.Warning} */ (event.data); + this.addMessage(new SDK.ConsoleMessage( + this.target(), SDK.ConsoleMessage.MessageSource.Network, SDK.ConsoleMessage.MessageLevel.Warning, + warning.message, undefined, undefined, undefined, undefined, warning.requestId)); + } + + /** * @param {!SDK.ConsoleMessage} msg */ _incrementErrorWarningCount(msg) {
diff --git a/third_party/WebKit/Source/devtools/front_end/sdk/NetworkManager.js b/third_party/WebKit/Source/devtools/front_end/sdk/NetworkManager.js index 666bdd6..a27567e 100644 --- a/third_party/WebKit/Source/devtools/front_end/sdk/NetworkManager.js +++ b/third_party/WebKit/Source/devtools/front_end/sdk/NetworkManager.js
@@ -129,9 +129,13 @@ RequestUpdated: Symbol('RequestUpdated'), RequestFinished: Symbol('RequestFinished'), RequestUpdateDropped: Symbol('RequestUpdateDropped'), - ResponseReceived: Symbol('ResponseReceived') + ResponseReceived: Symbol('ResponseReceived'), + WarningGenerated: Symbol('WarningGenerated'), }; +/** @typedef {{message: string, requestId: string}} */ +SDK.NetworkManager.Warning; + /** @implements {Common.Emittable} */ SDK.NetworkManager.RequestRedirectEvent = class { /** @@ -249,13 +253,11 @@ networkRequest.setSecurityState(response.securityState); if (!this._mimeTypeIsConsistentWithType(networkRequest)) { - var consoleModel = this._manager.target().model(SDK.ConsoleModel); - consoleModel.addMessage(new SDK.ConsoleMessage( - consoleModel.target(), SDK.ConsoleMessage.MessageSource.Network, SDK.ConsoleMessage.MessageLevel.Info, - Common.UIString( - 'Resource interpreted as %s but transferred with MIME type %s: "%s".', - networkRequest.resourceType().title(), networkRequest.mimeType, networkRequest.url()), - undefined, undefined, undefined, undefined, networkRequest.requestId())); + var message = Common.UIString( + 'Resource interpreted as %s but transferred with MIME type %s: "%s".', networkRequest.resourceType().title(), + networkRequest.mimeType, networkRequest.url()); + this._manager.dispatchEventToListeners( + SDK.NetworkManager.Events.WarningGenerated, {message: message, requestId: networkRequest.requestId()}); } if (response.securityDetails) @@ -389,14 +391,11 @@ // net::ParsedCookie::kMaxCookieSize = 4096 (net/cookies/parsed_cookie.h) if ('Set-Cookie' in response.headers && response.headers['Set-Cookie'].length > 4096) { - var consoleModel = this._manager.target().model(SDK.ConsoleModel); - consoleModel.addMessage( - new SDK.ConsoleMessage( - consoleModel.target(), SDK.ConsoleMessage.MessageSource.Network, SDK.ConsoleMessage.MessageLevel.Warning, - Common.UIString( - 'Set-Cookie header is ignored in response from url: %s. Cookie length should be less then or equal to 4096 characters.', - response.url)), - undefined, undefined, undefined, undefined, requestId); + var message = Common.UIString( + 'Set-Cookie header is ignored in response from url: %s. Cookie length should be less than or equal to 4096 characters.', + response.url); + this._manager.dispatchEventToListeners( + SDK.NetworkManager.Events.WarningGenerated, {message: message, requestId: requestId}); } this._updateNetworkRequestWithResponse(networkRequest, response); @@ -458,11 +457,9 @@ if (blockedReason) { networkRequest.setBlockedReason(blockedReason); if (blockedReason === Protocol.Network.BlockedReason.Inspector) { - var consoleModel = this._manager.target().model(SDK.ConsoleModel); - consoleModel.addMessage(new SDK.ConsoleMessage( - consoleModel.target(), SDK.ConsoleMessage.MessageSource.Network, SDK.ConsoleMessage.MessageLevel.Warning, - Common.UIString('Request was blocked by DevTools: "%s".', networkRequest.url()), undefined, undefined, - undefined, undefined, requestId)); + var message = Common.UIString('Request was blocked by DevTools: "%s".', networkRequest.url()); + this._manager.dispatchEventToListeners( + SDK.NetworkManager.Events.WarningGenerated, {message: message, requestId: requestId}); } } networkRequest.localizedFailDescription = localizedDescription; @@ -631,14 +628,14 @@ _startNetworkRequest(networkRequest) { this._inflightRequestsById[networkRequest.requestId()] = networkRequest; this._inflightRequestsByURL[networkRequest.url()] = networkRequest; - this._dispatchEventToListeners(SDK.NetworkManager.Events.RequestStarted, networkRequest); + this._manager.dispatchEventToListeners(SDK.NetworkManager.Events.RequestStarted, networkRequest); } /** * @param {!SDK.NetworkRequest} networkRequest */ _updateNetworkRequest(networkRequest) { - this._dispatchEventToListeners(SDK.NetworkManager.Events.RequestUpdated, networkRequest); + this._manager.dispatchEventToListeners(SDK.NetworkManager.Events.RequestUpdated, networkRequest); } /** @@ -651,20 +648,12 @@ networkRequest.finished = true; if (encodedDataLength >= 0) networkRequest.setTransferSize(encodedDataLength); - this._dispatchEventToListeners(SDK.NetworkManager.Events.RequestFinished, networkRequest); + this._manager.dispatchEventToListeners(SDK.NetworkManager.Events.RequestFinished, networkRequest); delete this._inflightRequestsById[networkRequest.requestId()]; delete this._inflightRequestsByURL[networkRequest.url()]; } /** - * @param {string} eventType - * @param {!SDK.NetworkRequest} networkRequest - */ - _dispatchEventToListeners(eventType, networkRequest) { - this._manager.dispatchEventToListeners(eventType, networkRequest); - } - - /** * @param {!Protocol.Network.RequestId} requestId * @param {string} frameId * @param {!Protocol.Network.LoaderId} loaderId
diff --git a/third_party/WebKit/Source/devtools/front_end/sdk/RemoteObject.js b/third_party/WebKit/Source/devtools/front_end/sdk/RemoteObject.js index e10b37b..7e4001e 100644 --- a/third_party/WebKit/Source/devtools/front_end/sdk/RemoteObject.js +++ b/third_party/WebKit/Source/devtools/front_end/sdk/RemoteObject.js
@@ -638,8 +638,7 @@ return; } if (exceptionDetails) { - this._target.consoleModel.addMessage( - SDK.ConsoleMessage.fromException(this._target, exceptionDetails, undefined, undefined, undefined)); + this.target().runtimeModel.exceptionThrown(Date.now(), exceptionDetails); callback(null, null); return; }
diff --git a/third_party/WebKit/Source/devtools/front_end/sdk/ResourceTreeModel.js b/third_party/WebKit/Source/devtools/front_end/sdk/ResourceTreeModel.js index a6ebdd04..2464fdd 100644 --- a/third_party/WebKit/Source/devtools/front_end/sdk/ResourceTreeModel.js +++ b/third_party/WebKit/Source/devtools/front_end/sdk/ResourceTreeModel.js
@@ -176,11 +176,8 @@ frame._navigate(framePayload); this.dispatchEventToListeners(SDK.ResourceTreeModel.Events.FrameNavigated, frame); - if (frame.isMainFrame()) { + if (frame.isMainFrame()) this.dispatchEventToListeners(SDK.ResourceTreeModel.Events.MainFrameNavigated, frame); - if (Common.moduleSetting('preserveConsoleLog').get()) - Common.console.log(Common.UIString('Navigated to %s', frame.url)); - } // Fill frame with retained resources (the ones loaded using new loader). var resources = frame.resources(); @@ -220,10 +217,8 @@ return; var frame = this._frames.get(frameId); - if (frame && !frame.isMainFrame()) - return; - if (!Common.moduleSetting('preserveConsoleLog').get() && this.target().consoleModel) - this.target().consoleModel.clear(); + if (!frame || frame.isMainFrame()) + this.dispatchEventToListeners(SDK.ResourceTreeModel.Events.MainFrameStartedLoading); } /** @@ -456,6 +451,7 @@ FrameResized: Symbol('FrameResized'), FrameWillNavigate: Symbol('FrameWillNavigate'), MainFrameNavigated: Symbol('MainFrameNavigated'), + MainFrameStartedLoading: Symbol('MainFrameStartedLoading'), ResourceAdded: Symbol('ResourceAdded'), WillLoadCachedResources: Symbol('WillLoadCachedResources'), CachedResourcesLoaded: Symbol('CachedResourcesLoaded'),
diff --git a/third_party/WebKit/Source/devtools/front_end/sdk/RuntimeModel.js b/third_party/WebKit/Source/devtools/front_end/sdk/RuntimeModel.js index 97b2965..ec71844 100644 --- a/third_party/WebKit/Source/devtools/front_end/sdk/RuntimeModel.js +++ b/third_party/WebKit/Source/devtools/front_end/sdk/RuntimeModel.js
@@ -337,7 +337,7 @@ * @param {number} timestamp * @param {!Protocol.Runtime.ExceptionDetails} exceptionDetails */ - _exceptionThrown(timestamp, exceptionDetails) { + exceptionThrown(timestamp, exceptionDetails) { var exceptionWithTimestamp = {timestamp: timestamp, details: exceptionDetails}; this.dispatchEventToListeners(SDK.RuntimeModel.Events.ExceptionThrown, exceptionWithTimestamp); } @@ -432,7 +432,7 @@ * @param {!Protocol.Runtime.ExceptionDetails} exceptionDetails */ exceptionThrown(timestamp, exceptionDetails) { - this._runtimeModel._exceptionThrown(timestamp, exceptionDetails); + this._runtimeModel.exceptionThrown(timestamp, exceptionDetails); } /**
diff --git a/third_party/WebKit/Source/devtools/front_end/sdk/Script.js b/third_party/WebKit/Source/devtools/front_end/sdk/Script.js index eaf3408..114a9c3 100644 --- a/third_party/WebKit/Source/devtools/front_end/sdk/Script.js +++ b/third_party/WebKit/Source/devtools/front_end/sdk/Script.js
@@ -87,35 +87,6 @@ } /** - * @param {!SDK.Script} script - * @param {string} source - */ - static _reportDeprecatedCommentIfNeeded(script, source) { - var consoleModel = script.debuggerModel.target().consoleModel; - if (!consoleModel) - return; - var linesToCheck = 5; - var offset = source.lastIndexOf('\n'); - while (linesToCheck && offset !== -1) { - offset = source.lastIndexOf('\n', offset - 1); - --linesToCheck; - } - offset = offset !== -1 ? offset : 0; - var sourceTail = source.substr(offset); - if (sourceTail.length > 5000) - return; - if (sourceTail.search(/^[\040\t]*\/\/@ source(mapping)?url=/mi) === -1) - return; - var text = Common.UIString( - '\'//@ sourceURL\' and \'//@ sourceMappingURL\' are deprecated, please use \'//# sourceURL=\' and \'//# sourceMappingURL=\' instead.'); - var msg = new SDK.ConsoleMessage( - script.debuggerModel.target(), SDK.ConsoleMessage.MessageSource.JS, SDK.ConsoleMessage.MessageLevel.Warning, - text, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, - script.scriptId); - consoleModel.addMessage(msg); - } - - /** * @return {boolean} */ isContentScript() { @@ -173,12 +144,7 @@ * @param {string} source */ function didGetScriptSource(error, source) { - if (!error) { - SDK.Script._reportDeprecatedCommentIfNeeded(this, source); - this._source = SDK.Script._trimSourceURLComment(source); - } else { - this._source = ''; - } + this._source = error ? '' : SDK.Script._trimSourceURLComment(source); if (this._originalSource === null) this._originalSource = this._source; callback(this._source);
diff --git a/third_party/WebKit/Source/modules/fetch/DataConsumerHandleTestUtil.cpp b/third_party/WebKit/Source/modules/fetch/DataConsumerHandleTestUtil.cpp index e1861a1..da076b73 100644 --- a/third_party/WebKit/Source/modules/fetch/DataConsumerHandleTestUtil.cpp +++ b/third_party/WebKit/Source/modules/fetch/DataConsumerHandleTestUtil.cpp
@@ -207,7 +207,7 @@ const DataConsumerHandleTestUtil::Command& DataConsumerHandleTestUtil::ReplayingHandle::Context::top() { DCHECK(!isEmpty()); - return m_commands.first(); + return m_commands.front(); } void DataConsumerHandleTestUtil::ReplayingHandle::Context::consume(
diff --git a/third_party/WebKit/Source/modules/presentation/PresentationConnection.cpp b/third_party/WebKit/Source/modules/presentation/PresentationConnection.cpp index 6e269ae..8dd77d9a 100644 --- a/third_party/WebKit/Source/modules/presentation/PresentationConnection.cpp +++ b/third_party/WebKit/Source/modules/presentation/PresentationConnection.cpp
@@ -315,7 +315,7 @@ return; while (!m_messages.isEmpty() && !m_blobLoader) { - Message* message = m_messages.first().get(); + Message* message = m_messages.front().get(); switch (message->type) { case MessageTypeText: client->sendString(m_url, m_id, message->text, m_proxy.get()); @@ -473,7 +473,7 @@ } void PresentationConnection::didFinishLoadingBlob(DOMArrayBuffer* buffer) { - ASSERT(!m_messages.isEmpty() && m_messages.first()->type == MessageTypeBlob); + ASSERT(!m_messages.isEmpty() && m_messages.front()->type == MessageTypeBlob); ASSERT(buffer && buffer->buffer()); // Send the loaded blob immediately here and continue processing the queue. WebPresentationClient* client = presentationClient(getExecutionContext()); @@ -490,7 +490,7 @@ void PresentationConnection::didFailLoadingBlob( FileError::ErrorCode errorCode) { - ASSERT(!m_messages.isEmpty() && m_messages.first()->type == MessageTypeBlob); + ASSERT(!m_messages.isEmpty() && m_messages.front()->type == MessageTypeBlob); // FIXME: generate error message? // Ignore the current failed blob item and continue with next items. m_messages.pop_front();
diff --git a/third_party/WebKit/Source/modules/serviceworkers/BUILD.gn b/third_party/WebKit/Source/modules/serviceworkers/BUILD.gn index b08ba25..f8ccca08 100644 --- a/third_party/WebKit/Source/modules/serviceworkers/BUILD.gn +++ b/third_party/WebKit/Source/modules/serviceworkers/BUILD.gn
@@ -12,6 +12,8 @@ "ExtendableMessageEvent.h", "FetchEvent.cpp", "FetchEvent.h", + "FetchRespondWithObserver.cpp", + "FetchRespondWithObserver.h", "ForeignFetchEvent.cpp", "ForeignFetchEvent.h", "ForeignFetchRespondWithObserver.cpp",
diff --git a/third_party/WebKit/Source/modules/serviceworkers/FetchEvent.cpp b/third_party/WebKit/Source/modules/serviceworkers/FetchEvent.cpp index 8f4f9a0..9d39461 100644 --- a/third_party/WebKit/Source/modules/serviceworkers/FetchEvent.cpp +++ b/third_party/WebKit/Source/modules/serviceworkers/FetchEvent.cpp
@@ -10,6 +10,7 @@ #include "modules/fetch/BytesConsumerForDataConsumerHandle.h" #include "modules/fetch/Request.h" #include "modules/fetch/Response.h" +#include "modules/serviceworkers/FetchRespondWithObserver.h" #include "modules/serviceworkers/ServiceWorkerError.h" #include "modules/serviceworkers/ServiceWorkerGlobalScope.h" #include "public/platform/WebURLResponse.h" @@ -29,7 +30,7 @@ FetchEvent* FetchEvent::create(ScriptState* scriptState, const AtomicString& type, const FetchEventInit& initializer, - RespondWithObserver* respondWithObserver, + FetchRespondWithObserver* respondWithObserver, WaitUntilObserver* waitUntilObserver, bool navigationPreloadSent) { return new FetchEvent(scriptState, type, initializer, respondWithObserver, @@ -67,7 +68,7 @@ FetchEvent::FetchEvent(ScriptState* scriptState, const AtomicString& type, const FetchEventInit& initializer, - RespondWithObserver* respondWithObserver, + FetchRespondWithObserver* respondWithObserver, WaitUntilObserver* waitUntilObserver, bool navigationPreloadSent) : ExtendableEvent(type, initializer, waitUntilObserver),
diff --git a/third_party/WebKit/Source/modules/serviceworkers/FetchEvent.h b/third_party/WebKit/Source/modules/serviceworkers/FetchEvent.h index aa5a0eb..2137783 100644 --- a/third_party/WebKit/Source/modules/serviceworkers/FetchEvent.h +++ b/third_party/WebKit/Source/modules/serviceworkers/FetchEvent.h
@@ -12,23 +12,22 @@ #include "modules/fetch/Request.h" #include "modules/serviceworkers/ExtendableEvent.h" #include "modules/serviceworkers/FetchEventInit.h" -#include "modules/serviceworkers/RespondWithObserver.h" #include "modules/serviceworkers/WaitUntilObserver.h" #include "platform/heap/Handle.h" namespace blink { class ExceptionState; +class FetchRespondWithObserver; class Request; class Response; -class RespondWithObserver; class ScriptState; class WebDataConsumerHandle; struct WebServiceWorkerError; class WebURLResponse; // A fetch event is dispatched by the client to a service worker's script -// context. RespondWithObserver can be used to notify the client about the +// context. FetchRespondWithObserver can be used to notify the client about the // service worker's response. class MODULES_EXPORT FetchEvent final : public ExtendableEvent { DEFINE_WRAPPERTYPEINFO(); @@ -43,7 +42,7 @@ static FetchEvent* create(ScriptState*, const AtomicString& type, const FetchEventInit&, - RespondWithObserver*, + FetchRespondWithObserver*, WaitUntilObserver*, bool navigationPreloadSent); @@ -68,12 +67,12 @@ FetchEvent(ScriptState*, const AtomicString& type, const FetchEventInit&, - RespondWithObserver*, + FetchRespondWithObserver*, WaitUntilObserver*, bool navigationPreloadSent); private: - Member<RespondWithObserver> m_observer; + Member<FetchRespondWithObserver> m_observer; Member<Request> m_request; Member<PreloadResponseProperty> m_preloadResponseProperty; String m_clientId;
diff --git a/third_party/WebKit/Source/modules/serviceworkers/FetchRespondWithObserver.cpp b/third_party/WebKit/Source/modules/serviceworkers/FetchRespondWithObserver.cpp new file mode 100644 index 0000000..39cd2dd --- /dev/null +++ b/third_party/WebKit/Source/modules/serviceworkers/FetchRespondWithObserver.cpp
@@ -0,0 +1,282 @@ +// Copyright 2014 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 "modules/serviceworkers/FetchRespondWithObserver.h" + +#include <v8.h> +#include "bindings/core/v8/ScriptValue.h" +#include "bindings/core/v8/V8Binding.h" +#include "bindings/modules/v8/V8Response.h" +#include "core/dom/ExecutionContext.h" +#include "core/inspector/ConsoleMessage.h" +#include "core/inspector/ConsoleTypes.h" +#include "core/streams/Stream.h" +#include "modules/fetch/BodyStreamBuffer.h" +#include "modules/fetch/BytesConsumer.h" +#include "modules/serviceworkers/ServiceWorkerGlobalScopeClient.h" +#include "modules/serviceworkers/WaitUntilObserver.h" +#include "public/platform/modules/serviceworker/WebServiceWorkerResponse.h" + +namespace blink { +namespace { + +// Returns the error message to let the developer know about the reason of the +// unusual failures. +const String getMessageForResponseError(WebServiceWorkerResponseError error, + const KURL& requestURL) { + String errorMessage = "The FetchEvent for \"" + requestURL.getString() + + "\" resulted in a network error response: "; + switch (error) { + case WebServiceWorkerResponseErrorPromiseRejected: + errorMessage = errorMessage + "the promise was rejected."; + break; + case WebServiceWorkerResponseErrorDefaultPrevented: + errorMessage = + errorMessage + + "preventDefault() was called without calling respondWith()."; + break; + case WebServiceWorkerResponseErrorNoV8Instance: + errorMessage = + errorMessage + + "an object that was not a Response was passed to respondWith()."; + break; + case WebServiceWorkerResponseErrorResponseTypeError: + errorMessage = errorMessage + + "the promise was resolved with an error response object."; + break; + case WebServiceWorkerResponseErrorResponseTypeOpaque: + errorMessage = errorMessage + + "an \"opaque\" response was used for a request whose type " + "is not no-cors"; + break; + case WebServiceWorkerResponseErrorResponseTypeNotBasicOrDefault: + NOTREACHED(); + break; + case WebServiceWorkerResponseErrorBodyUsed: + errorMessage = errorMessage + + "a Response whose \"bodyUsed\" is \"true\" cannot be used " + "to respond to a request."; + break; + case WebServiceWorkerResponseErrorResponseTypeOpaqueForClientRequest: + errorMessage = errorMessage + + "an \"opaque\" response was used for a client request."; + break; + case WebServiceWorkerResponseErrorResponseTypeOpaqueRedirect: + errorMessage = errorMessage + + "an \"opaqueredirect\" type response was used for a " + "request whose redirect mode is not \"manual\"."; + break; + case WebServiceWorkerResponseErrorBodyLocked: + errorMessage = errorMessage + + "a Response whose \"body\" is locked cannot be used to " + "respond to a request."; + break; + case WebServiceWorkerResponseErrorNoForeignFetchResponse: + errorMessage = errorMessage + + "an object that was not a ForeignFetchResponse was passed " + "to respondWith()."; + break; + case WebServiceWorkerResponseErrorForeignFetchHeadersWithoutOrigin: + errorMessage = + errorMessage + + "headers were specified for a response without an explicit origin."; + break; + case WebServiceWorkerResponseErrorForeignFetchMismatchedOrigin: + errorMessage = + errorMessage + "origin in response does not match origin of request."; + break; + case WebServiceWorkerResponseErrorRedirectedResponseForNotFollowRequest: + errorMessage = errorMessage + + "a redirected response was used for a request whose " + "redirect mode is not \"follow\"."; + break; + case WebServiceWorkerResponseErrorUnknown: + default: + errorMessage = errorMessage + "an unexpected error occurred."; + break; + } + return errorMessage; +} + +const String getErrorMessageForRedirectedResponseForNavigationRequest( + const KURL& requestURL, + const Vector<KURL>& responseURLList) { + String errorMessage = + "In Chrome 59, the navigation to \"" + requestURL.getString() + "\" " + + "will result in a network error, because FetchEvent.respondWith() was " + + "called with a redirected response. See https://crbug.com/658249. The " + + "url list of the response was: [\"" + responseURLList[0].getString() + + "\""; + for (size_t i = 1; i < responseURLList.size(); ++i) { + errorMessage = + errorMessage + ", \"" + responseURLList[i].getString() + "\""; + } + return errorMessage + "]"; +} + +bool isNavigationRequest(WebURLRequest::FrameType frameType) { + return frameType != WebURLRequest::FrameTypeNone; +} + +bool isClientRequest(WebURLRequest::FrameType frameType, + WebURLRequest::RequestContext requestContext) { + return isNavigationRequest(frameType) || + requestContext == WebURLRequest::RequestContextSharedWorker || + requestContext == WebURLRequest::RequestContextWorker; +} + +class NoopLoaderClient final + : public GarbageCollectedFinalized<NoopLoaderClient>, + public FetchDataLoader::Client { + WTF_MAKE_NONCOPYABLE(NoopLoaderClient); + USING_GARBAGE_COLLECTED_MIXIN(NoopLoaderClient); + + public: + NoopLoaderClient() = default; + void didFetchDataLoadedStream() override {} + void didFetchDataLoadFailed() override {} + DEFINE_INLINE_TRACE() { FetchDataLoader::Client::trace(visitor); } +}; + +} // namespace + +FetchRespondWithObserver* FetchRespondWithObserver::create( + ExecutionContext* context, + int fetchEventID, + const KURL& requestURL, + WebURLRequest::FetchRequestMode requestMode, + WebURLRequest::FetchRedirectMode redirectMode, + WebURLRequest::FrameType frameType, + WebURLRequest::RequestContext requestContext, + WaitUntilObserver* observer) { + return new FetchRespondWithObserver(context, fetchEventID, requestURL, + requestMode, redirectMode, frameType, + requestContext, observer); +} + +void FetchRespondWithObserver::onResponseRejected( + WebServiceWorkerResponseError error) { + DCHECK(getExecutionContext()); + getExecutionContext()->addConsoleMessage( + ConsoleMessage::create(JSMessageSource, WarningMessageLevel, + getMessageForResponseError(error, m_requestURL))); + + // The default value of WebServiceWorkerResponse's status is 0, which maps + // to a network error. + WebServiceWorkerResponse webResponse; + webResponse.setError(error); + ServiceWorkerGlobalScopeClient::from(getExecutionContext()) + ->respondToFetchEvent(m_eventID, webResponse, m_eventDispatchTime); +} + +void FetchRespondWithObserver::onResponseFulfilled(const ScriptValue& value) { + DCHECK(getExecutionContext()); + if (!V8Response::hasInstance(value.v8Value(), + toIsolate(getExecutionContext()))) { + onResponseRejected(WebServiceWorkerResponseErrorNoV8Instance); + return; + } + Response* response = V8Response::toImplWithTypeCheck( + toIsolate(getExecutionContext()), value.v8Value()); + // "If one of the following conditions is true, return a network error: + // - |response|'s type is |error|. + // - |request|'s mode is not |no-cors| and response's type is |opaque|. + // - |request| is a client request and |response|'s type is neither + // |basic| nor |default|." + const FetchResponseData::Type responseType = response->response()->getType(); + if (responseType == FetchResponseData::ErrorType) { + onResponseRejected(WebServiceWorkerResponseErrorResponseTypeError); + return; + } + if (responseType == FetchResponseData::OpaqueType) { + if (m_requestMode != WebURLRequest::FetchRequestModeNoCORS) { + onResponseRejected(WebServiceWorkerResponseErrorResponseTypeOpaque); + return; + } + + // The request mode of client requests should be "same-origin" but it is + // not explicitly stated in the spec yet. So we need to check here. + // FIXME: Set the request mode of client requests to "same-origin" and + // remove this check when the spec will be updated. + // Spec issue: https://github.com/whatwg/fetch/issues/101 + if (isClientRequest(m_frameType, m_requestContext)) { + onResponseRejected( + WebServiceWorkerResponseErrorResponseTypeOpaqueForClientRequest); + return; + } + } + if (m_redirectMode != WebURLRequest::FetchRedirectModeManual && + responseType == FetchResponseData::OpaqueRedirectType) { + onResponseRejected(WebServiceWorkerResponseErrorResponseTypeOpaqueRedirect); + return; + } + if (m_redirectMode != WebURLRequest::FetchRedirectModeFollow && + response->redirected()) { + if (!isNavigationRequest(m_frameType)) { + onResponseRejected( + WebServiceWorkerResponseErrorRedirectedResponseForNotFollowRequest); + return; + } + // TODO(horo): We should just reject even if the request was a navigation. + // Currently we measure the impact of the restriction with the use counter + // in DocumentLoader. + getExecutionContext()->addConsoleMessage(ConsoleMessage::create( + JSMessageSource, ErrorMessageLevel, + getErrorMessageForRedirectedResponseForNavigationRequest( + m_requestURL, response->internalURLList()))); + } + if (response->isBodyLocked()) { + onResponseRejected(WebServiceWorkerResponseErrorBodyLocked); + return; + } + if (response->bodyUsed()) { + onResponseRejected(WebServiceWorkerResponseErrorBodyUsed); + return; + } + + WebServiceWorkerResponse webResponse; + response->populateWebServiceWorkerResponse(webResponse); + BodyStreamBuffer* buffer = response->internalBodyBuffer(); + if (buffer) { + RefPtr<BlobDataHandle> blobDataHandle = buffer->drainAsBlobDataHandle( + BytesConsumer::BlobSizePolicy::AllowBlobWithInvalidSize); + if (blobDataHandle) { + webResponse.setBlobDataHandle(blobDataHandle); + } else { + Stream* outStream = Stream::create(getExecutionContext(), ""); + webResponse.setStreamURL(outStream->url()); + buffer->startLoading(FetchDataLoader::createLoaderAsStream(outStream), + new NoopLoaderClient); + } + } + ServiceWorkerGlobalScopeClient::from(getExecutionContext()) + ->respondToFetchEvent(m_eventID, webResponse, m_eventDispatchTime); +} + +void FetchRespondWithObserver::onNoResponse() { + ServiceWorkerGlobalScopeClient::from(getExecutionContext()) + ->respondToFetchEvent(m_eventID, m_eventDispatchTime); +} + +FetchRespondWithObserver::FetchRespondWithObserver( + ExecutionContext* context, + int fetchEventID, + const KURL& requestURL, + WebURLRequest::FetchRequestMode requestMode, + WebURLRequest::FetchRedirectMode redirectMode, + WebURLRequest::FrameType frameType, + WebURLRequest::RequestContext requestContext, + WaitUntilObserver* observer) + : RespondWithObserver(context, fetchEventID, observer), + m_requestURL(requestURL), + m_requestMode(requestMode), + m_redirectMode(redirectMode), + m_frameType(frameType), + m_requestContext(requestContext) {} + +DEFINE_TRACE(FetchRespondWithObserver) { + RespondWithObserver::trace(visitor); +} + +} // namespace blink
diff --git a/third_party/WebKit/Source/modules/serviceworkers/FetchRespondWithObserver.h b/third_party/WebKit/Source/modules/serviceworkers/FetchRespondWithObserver.h new file mode 100644 index 0000000..0175a684 --- /dev/null +++ b/third_party/WebKit/Source/modules/serviceworkers/FetchRespondWithObserver.h
@@ -0,0 +1,61 @@ +// 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 FetchRespondWithObserver_h +#define FetchRespondWithObserver_h + +#include "modules/ModulesExport.h" +#include "modules/serviceworkers/RespondWithObserver.h" +#include "platform/weborigin/KURL.h" +#include "public/platform/WebURLRequest.h" +#include "public/platform/modules/serviceworker/WebServiceWorkerResponseError.h" + +namespace blink { + +class ExecutionContext; +class ScriptValue; +class WaitUntilObserver; + +// This class observes the service worker's handling of a FetchEvent and +// notifies the client. +class MODULES_EXPORT FetchRespondWithObserver : public RespondWithObserver { + public: + ~FetchRespondWithObserver() override = default; + + static FetchRespondWithObserver* create(ExecutionContext*, + int fetchEventID, + const KURL& requestURL, + WebURLRequest::FetchRequestMode, + WebURLRequest::FetchRedirectMode, + WebURLRequest::FrameType, + WebURLRequest::RequestContext, + WaitUntilObserver*); + + void onResponseRejected(WebServiceWorkerResponseError) override; + void onResponseFulfilled(const ScriptValue&) override; + void onNoResponse() override; + + DECLARE_VIRTUAL_TRACE(); + + protected: + FetchRespondWithObserver(ExecutionContext*, + int fetchEventID, + const KURL& requestURL, + WebURLRequest::FetchRequestMode, + WebURLRequest::FetchRedirectMode, + WebURLRequest::FrameType, + WebURLRequest::RequestContext, + WaitUntilObserver*); + + private: + const KURL m_requestURL; + const WebURLRequest::FetchRequestMode m_requestMode; + const WebURLRequest::FetchRedirectMode m_redirectMode; + const WebURLRequest::FrameType m_frameType; + const WebURLRequest::RequestContext m_requestContext; +}; + +} // namespace blink + +#endif // FetchRespondWithObserver_h
diff --git a/third_party/WebKit/Source/modules/serviceworkers/ForeignFetchRespondWithObserver.cpp b/third_party/WebKit/Source/modules/serviceworkers/ForeignFetchRespondWithObserver.cpp index a3347be..8b1f0e0 100644 --- a/third_party/WebKit/Source/modules/serviceworkers/ForeignFetchRespondWithObserver.cpp +++ b/third_party/WebKit/Source/modules/serviceworkers/ForeignFetchRespondWithObserver.cpp
@@ -26,7 +26,7 @@ requestContext, std::move(requestOrigin), observer); } -void ForeignFetchRespondWithObserver::responseWasFulfilled( +void ForeignFetchRespondWithObserver::onResponseFulfilled( const ScriptValue& value) { ASSERT(getExecutionContext()); ExceptionState exceptionState(value.isolate(), ExceptionState::UnknownContext, @@ -36,7 +36,7 @@ value, exceptionState); if (exceptionState.hadException()) { exceptionState.clearException(); - responseWasRejected(WebServiceWorkerResponseErrorNoForeignFetchResponse); + onResponseRejected(WebServiceWorkerResponseErrorNoForeignFetchResponse); return; } @@ -51,7 +51,7 @@ if (!foreignFetchResponse.hasOrigin()) { if (foreignFetchResponse.hasHeaders() && !foreignFetchResponse.headers().isEmpty()) { - responseWasRejected( + onResponseRejected( WebServiceWorkerResponseErrorForeignFetchHeadersWithoutOrigin); return; } @@ -63,7 +63,7 @@ response = Response::create(getExecutionContext(), opaqueData); } } else if (m_requestOrigin->toString() != foreignFetchResponse.origin()) { - responseWasRejected( + onResponseRejected( WebServiceWorkerResponseErrorForeignFetchMismatchedOrigin); return; } else if (!isOpaque) { @@ -88,7 +88,7 @@ response = Response::create(getExecutionContext(), responseData); } - RespondWithObserver::responseWasFulfilled( + FetchRespondWithObserver::onResponseFulfilled( ScriptValue::from(value.getScriptState(), response)); } @@ -102,14 +102,14 @@ WebURLRequest::RequestContext requestContext, PassRefPtr<SecurityOrigin> requestOrigin, WaitUntilObserver* observer) - : RespondWithObserver(context, - eventID, - requestURL, - requestMode, - redirectMode, - frameType, - requestContext, - observer), + : FetchRespondWithObserver(context, + eventID, + requestURL, + requestMode, + redirectMode, + frameType, + requestContext, + observer), m_requestOrigin(requestOrigin) {} } // namespace blink
diff --git a/third_party/WebKit/Source/modules/serviceworkers/ForeignFetchRespondWithObserver.h b/third_party/WebKit/Source/modules/serviceworkers/ForeignFetchRespondWithObserver.h index 4489268..012bde4 100644 --- a/third_party/WebKit/Source/modules/serviceworkers/ForeignFetchRespondWithObserver.h +++ b/third_party/WebKit/Source/modules/serviceworkers/ForeignFetchRespondWithObserver.h
@@ -5,14 +5,14 @@ #ifndef ForeignFetchRespondWithObserver_h #define ForeignFetchRespondWithObserver_h -#include "modules/serviceworkers/RespondWithObserver.h" +#include "modules/serviceworkers/FetchRespondWithObserver.h" namespace blink { // This class observes the service worker's handling of a ForeignFetchEvent and // notifies the client. class MODULES_EXPORT ForeignFetchRespondWithObserver final - : public RespondWithObserver { + : public FetchRespondWithObserver { public: static ForeignFetchRespondWithObserver* create( ExecutionContext*, @@ -25,7 +25,7 @@ PassRefPtr<SecurityOrigin>, WaitUntilObserver*); - void responseWasFulfilled(const ScriptValue&) override; + void onResponseFulfilled(const ScriptValue&) override; private: ForeignFetchRespondWithObserver(ExecutionContext*,
diff --git a/third_party/WebKit/Source/modules/serviceworkers/RespondWithObserver.cpp b/third_party/WebKit/Source/modules/serviceworkers/RespondWithObserver.cpp index abde40f..550df7e 100644 --- a/third_party/WebKit/Source/modules/serviceworkers/RespondWithObserver.cpp +++ b/third_party/WebKit/Source/modules/serviceworkers/RespondWithObserver.cpp
@@ -4,146 +4,17 @@ #include "modules/serviceworkers/RespondWithObserver.h" +#include <v8.h> + #include "bindings/core/v8/ScriptFunction.h" #include "bindings/core/v8/ScriptPromise.h" #include "bindings/core/v8/ScriptValue.h" #include "bindings/core/v8/V8Binding.h" -#include "bindings/modules/v8/V8Response.h" -#include "core/dom/ExceptionCode.h" #include "core/dom/ExecutionContext.h" -#include "core/inspector/ConsoleMessage.h" -#include "core/streams/Stream.h" -#include "modules/fetch/BodyStreamBuffer.h" -#include "modules/fetch/BytesConsumer.h" -#include "modules/serviceworkers/ServiceWorkerGlobalScopeClient.h" -#include "platform/RuntimeEnabledFeatures.h" +#include "modules/serviceworkers/WaitUntilObserver.h" #include "public/platform/modules/serviceworker/WebServiceWorkerResponse.h" -#include "v8/include/v8.h" -#include "wtf/Assertions.h" -#include "wtf/RefPtr.h" namespace blink { -namespace { - -// Returns the error message to let the developer know about the reason of the -// unusual failures. -const String getMessageForResponseError(WebServiceWorkerResponseError error, - const KURL& requestURL) { - String errorMessage = "The FetchEvent for \"" + requestURL.getString() + - "\" resulted in a network error response: "; - switch (error) { - case WebServiceWorkerResponseErrorPromiseRejected: - errorMessage = errorMessage + "the promise was rejected."; - break; - case WebServiceWorkerResponseErrorDefaultPrevented: - errorMessage = - errorMessage + - "preventDefault() was called without calling respondWith()."; - break; - case WebServiceWorkerResponseErrorNoV8Instance: - errorMessage = - errorMessage + - "an object that was not a Response was passed to respondWith()."; - break; - case WebServiceWorkerResponseErrorResponseTypeError: - errorMessage = errorMessage + - "the promise was resolved with an error response object."; - break; - case WebServiceWorkerResponseErrorResponseTypeOpaque: - errorMessage = errorMessage + - "an \"opaque\" response was used for a request whose type " - "is not no-cors"; - break; - case WebServiceWorkerResponseErrorResponseTypeNotBasicOrDefault: - ASSERT_NOT_REACHED(); - break; - case WebServiceWorkerResponseErrorBodyUsed: - errorMessage = errorMessage + - "a Response whose \"bodyUsed\" is \"true\" cannot be used " - "to respond to a request."; - break; - case WebServiceWorkerResponseErrorResponseTypeOpaqueForClientRequest: - errorMessage = errorMessage + - "an \"opaque\" response was used for a client request."; - break; - case WebServiceWorkerResponseErrorResponseTypeOpaqueRedirect: - errorMessage = errorMessage + - "an \"opaqueredirect\" type response was used for a " - "request whose redirect mode is not \"manual\"."; - break; - case WebServiceWorkerResponseErrorBodyLocked: - errorMessage = errorMessage + - "a Response whose \"body\" is locked cannot be used to " - "respond to a request."; - break; - case WebServiceWorkerResponseErrorNoForeignFetchResponse: - errorMessage = errorMessage + - "an object that was not a ForeignFetchResponse was passed " - "to respondWith()."; - break; - case WebServiceWorkerResponseErrorForeignFetchHeadersWithoutOrigin: - errorMessage = - errorMessage + - "headers were specified for a response without an explicit origin."; - break; - case WebServiceWorkerResponseErrorForeignFetchMismatchedOrigin: - errorMessage = - errorMessage + "origin in response does not match origin of request."; - break; - case WebServiceWorkerResponseErrorRedirectedResponseForNotFollowRequest: - errorMessage = errorMessage + - "a redirected response was used for a request whose " - "redirect mode is not \"follow\"."; - break; - case WebServiceWorkerResponseErrorUnknown: - default: - errorMessage = errorMessage + "an unexpected error occurred."; - break; - } - return errorMessage; -} - -const String getErrorMessageForRedirectedResponseForNavigationRequest( - const KURL& requestURL, - const Vector<KURL>& responseURLList) { - String errorMessage = - "In Chrome 59, the navigation to \"" + requestURL.getString() + "\" " + - "will result in a network error, because FetchEvent.respondWith() was " + - "called with a redirected response. See https://crbug.com/658249. The " + - "url list of the response was: [\"" + responseURLList[0].getString() + - "\""; - for (size_t i = 1; i < responseURLList.size(); ++i) { - errorMessage = - errorMessage + ", \"" + responseURLList[i].getString() + "\""; - } - return errorMessage + "]"; -} - -bool isNavigationRequest(WebURLRequest::FrameType frameType) { - return frameType != WebURLRequest::FrameTypeNone; -} - -bool isClientRequest(WebURLRequest::FrameType frameType, - WebURLRequest::RequestContext requestContext) { - return isNavigationRequest(frameType) || - requestContext == WebURLRequest::RequestContextSharedWorker || - requestContext == WebURLRequest::RequestContextWorker; -} - -class NoopLoaderClient final - : public GarbageCollectedFinalized<NoopLoaderClient>, - public FetchDataLoader::Client { - WTF_MAKE_NONCOPYABLE(NoopLoaderClient); - USING_GARBAGE_COLLECTED_MIXIN(NoopLoaderClient); - - public: - NoopLoaderClient() = default; - void didFetchDataLoadedStream() override {} - void didFetchDataLoadFailed() override {} - DEFINE_INLINE_TRACE() { FetchDataLoader::Client::trace(visitor); } -}; - -} // namespace class RespondWithObserver::ThenFunction final : public ScriptFunction { public: @@ -191,22 +62,6 @@ ResolveType m_resolveType; }; -RespondWithObserver::~RespondWithObserver() {} - -RespondWithObserver* RespondWithObserver::create( - ExecutionContext* context, - int fetchEventID, - const KURL& requestURL, - WebURLRequest::FetchRequestMode requestMode, - WebURLRequest::FetchRedirectMode redirectMode, - WebURLRequest::FrameType frameType, - WebURLRequest::RequestContext requestContext, - WaitUntilObserver* observer) { - return new RespondWithObserver(context, fetchEventID, requestURL, requestMode, - redirectMode, frameType, requestContext, - observer); -} - void RespondWithObserver::contextDestroyed(ExecutionContext*) { if (m_observer) { DCHECK_EQ(Pending, m_state); @@ -230,8 +85,7 @@ return; } - ServiceWorkerGlobalScopeClient::from(getExecutionContext()) - ->respondToFetchEvent(m_fetchEventID, m_eventDispatchTime); + onNoResponse(); m_state = Done; m_observer.clear(); } @@ -241,7 +95,7 @@ ExceptionState& exceptionState) { if (m_state != Initial) { exceptionState.throwDOMException( - InvalidStateError, "The fetch event has already been responded to."); + InvalidStateError, "The event has already been responded to."); return; } @@ -254,126 +108,24 @@ void RespondWithObserver::responseWasRejected( WebServiceWorkerResponseError error) { - ASSERT(getExecutionContext()); - getExecutionContext()->addConsoleMessage( - ConsoleMessage::create(JSMessageSource, WarningMessageLevel, - getMessageForResponseError(error, m_requestURL))); - - // The default value of WebServiceWorkerResponse's status is 0, which maps - // to a network error. - WebServiceWorkerResponse webResponse; - webResponse.setError(error); - ServiceWorkerGlobalScopeClient::from(getExecutionContext()) - ->respondToFetchEvent(m_fetchEventID, webResponse, m_eventDispatchTime); + onResponseRejected(error); m_state = Done; m_observer->decrementPendingActivity(); m_observer.clear(); } void RespondWithObserver::responseWasFulfilled(const ScriptValue& value) { - ASSERT(getExecutionContext()); - if (!V8Response::hasInstance(value.v8Value(), - toIsolate(getExecutionContext()))) { - responseWasRejected(WebServiceWorkerResponseErrorNoV8Instance); - return; - } - Response* response = V8Response::toImplWithTypeCheck( - toIsolate(getExecutionContext()), value.v8Value()); - // "If one of the following conditions is true, return a network error: - // - |response|'s type is |error|. - // - |request|'s mode is not |no-cors| and response's type is |opaque|. - // - |request| is a client request and |response|'s type is neither - // |basic| nor |default|." - const FetchResponseData::Type responseType = response->response()->getType(); - if (responseType == FetchResponseData::ErrorType) { - responseWasRejected(WebServiceWorkerResponseErrorResponseTypeError); - return; - } - if (responseType == FetchResponseData::OpaqueType) { - if (m_requestMode != WebURLRequest::FetchRequestModeNoCORS) { - responseWasRejected(WebServiceWorkerResponseErrorResponseTypeOpaque); - return; - } - - // The request mode of client requests should be "same-origin" but it is - // not explicitly stated in the spec yet. So we need to check here. - // FIXME: Set the request mode of client requests to "same-origin" and - // remove this check when the spec will be updated. - // Spec issue: https://github.com/whatwg/fetch/issues/101 - if (isClientRequest(m_frameType, m_requestContext)) { - responseWasRejected( - WebServiceWorkerResponseErrorResponseTypeOpaqueForClientRequest); - return; - } - } - if (m_redirectMode != WebURLRequest::FetchRedirectModeManual && - responseType == FetchResponseData::OpaqueRedirectType) { - responseWasRejected( - WebServiceWorkerResponseErrorResponseTypeOpaqueRedirect); - return; - } - if (m_redirectMode != WebURLRequest::FetchRedirectModeFollow && - response->redirected()) { - if (!isNavigationRequest(m_frameType)) { - responseWasRejected( - WebServiceWorkerResponseErrorRedirectedResponseForNotFollowRequest); - return; - } - // TODO(horo): We should just reject even if the request was a navigation. - // Currently we measure the impact of the restriction with the use counter - // in DocumentLoader. - getExecutionContext()->addConsoleMessage(ConsoleMessage::create( - JSMessageSource, ErrorMessageLevel, - getErrorMessageForRedirectedResponseForNavigationRequest( - m_requestURL, response->internalURLList()))); - } - if (response->isBodyLocked()) { - responseWasRejected(WebServiceWorkerResponseErrorBodyLocked); - return; - } - if (response->bodyUsed()) { - responseWasRejected(WebServiceWorkerResponseErrorBodyUsed); - return; - } - - WebServiceWorkerResponse webResponse; - response->populateWebServiceWorkerResponse(webResponse); - BodyStreamBuffer* buffer = response->internalBodyBuffer(); - if (buffer) { - RefPtr<BlobDataHandle> blobDataHandle = buffer->drainAsBlobDataHandle( - BytesConsumer::BlobSizePolicy::AllowBlobWithInvalidSize); - if (blobDataHandle) { - webResponse.setBlobDataHandle(blobDataHandle); - } else { - Stream* outStream = Stream::create(getExecutionContext(), ""); - webResponse.setStreamURL(outStream->url()); - buffer->startLoading(FetchDataLoader::createLoaderAsStream(outStream), - new NoopLoaderClient); - } - } - ServiceWorkerGlobalScopeClient::from(getExecutionContext()) - ->respondToFetchEvent(m_fetchEventID, webResponse, m_eventDispatchTime); + onResponseFulfilled(value); m_state = Done; m_observer->decrementPendingActivity(); m_observer.clear(); } -RespondWithObserver::RespondWithObserver( - ExecutionContext* context, - int fetchEventID, - const KURL& requestURL, - WebURLRequest::FetchRequestMode requestMode, - WebURLRequest::FetchRedirectMode redirectMode, - WebURLRequest::FrameType frameType, - WebURLRequest::RequestContext requestContext, - WaitUntilObserver* observer) +RespondWithObserver::RespondWithObserver(ExecutionContext* context, + int eventID, + WaitUntilObserver* observer) : ContextLifecycleObserver(context), - m_fetchEventID(fetchEventID), - m_requestURL(requestURL), - m_requestMode(requestMode), - m_redirectMode(redirectMode), - m_frameType(frameType), - m_requestContext(requestContext), + m_eventID(eventID), m_state(Initial), m_observer(observer) {}
diff --git a/third_party/WebKit/Source/modules/serviceworkers/RespondWithObserver.h b/third_party/WebKit/Source/modules/serviceworkers/RespondWithObserver.h index 194402f..8bb9a42 100644 --- a/third_party/WebKit/Source/modules/serviceworkers/RespondWithObserver.h +++ b/third_party/WebKit/Source/modules/serviceworkers/RespondWithObserver.h
@@ -8,9 +8,7 @@ #include "core/dom/ContextLifecycleObserver.h" #include "core/events/EventTarget.h" #include "modules/ModulesExport.h" -#include "modules/serviceworkers/WaitUntilObserver.h" #include "platform/heap/Handle.h" -#include "public/platform/WebURLRequest.h" #include "public/platform/modules/serviceworker/WebServiceWorkerResponseError.h" namespace blink { @@ -20,61 +18,51 @@ class ScriptPromise; class ScriptState; class ScriptValue; +class WaitUntilObserver; -// This class observes the service worker's handling of a FetchEvent and -// notifies the client. +// This is a base class to implement respondWith. The respondWith has the three +// types of results: fulfilled, rejected and not called. Derived classes for +// each event should implement the procedure of the three behaviors by +// overriding onResponseFulfilled, onResponseRejected and onNoResponse. class MODULES_EXPORT RespondWithObserver : public GarbageCollectedFinalized<RespondWithObserver>, public ContextLifecycleObserver { USING_GARBAGE_COLLECTED_MIXIN(RespondWithObserver); public: - virtual ~RespondWithObserver(); - - static RespondWithObserver* create(ExecutionContext*, - int fetchEventID, - const KURL& requestURL, - WebURLRequest::FetchRequestMode, - WebURLRequest::FetchRedirectMode, - WebURLRequest::FrameType, - WebURLRequest::RequestContext, - WaitUntilObserver*); + virtual ~RespondWithObserver() = default; void contextDestroyed(ExecutionContext*) override; void willDispatchEvent(); void didDispatchEvent(DispatchEventResult dispatchResult); - // Observes the promise and delays calling didHandleFetchEvent() until the - // given promise is resolved or rejected. + // The respondWith() observes the promise until the given promise is resolved + // or rejected and then delays calling ServiceWorkerGlobalScopeClient:: + // didHandle*Event() in order to notify the result to the client. void respondWith(ScriptState*, ScriptPromise, ExceptionState&); - void responseWasRejected(WebServiceWorkerResponseError); - virtual void responseWasFulfilled(const ScriptValue&); + // Called when the respondWith() promise was rejected. + virtual void onResponseRejected(WebServiceWorkerResponseError) = 0; + + // Called when the respondWith() promise was fulfilled. + virtual void onResponseFulfilled(const ScriptValue&) = 0; + + // Called when the event handler finished without calling respondWith(). + virtual void onNoResponse() = 0; DECLARE_VIRTUAL_TRACE(); protected: - RespondWithObserver(ExecutionContext*, - int fetchEventID, - const KURL& requestURL, - WebURLRequest::FetchRequestMode, - WebURLRequest::FetchRedirectMode, - WebURLRequest::FrameType, - WebURLRequest::RequestContext, - WaitUntilObserver*); + RespondWithObserver(ExecutionContext*, int eventID, WaitUntilObserver*); + const int m_eventID; + double m_eventDispatchTime = 0; private: class ThenFunction; - const int m_fetchEventID; - const KURL m_requestURL; - const WebURLRequest::FetchRequestMode m_requestMode; - const WebURLRequest::FetchRedirectMode m_redirectMode; - const WebURLRequest::FrameType m_frameType; - const WebURLRequest::RequestContext m_requestContext; - - double m_eventDispatchTime = 0; + void responseWasRejected(WebServiceWorkerResponseError); + void responseWasFulfilled(const ScriptValue&); enum State { Initial, Pending, Done }; State m_state;
diff --git a/third_party/WebKit/Source/modules/speech/SpeechSynthesis.cpp b/third_party/WebKit/Source/modules/speech/SpeechSynthesis.cpp index bfcc6df..0bae106 100644 --- a/third_party/WebKit/Source/modules/speech/SpeechSynthesis.cpp +++ b/third_party/WebKit/Source/modules/speech/SpeechSynthesis.cpp
@@ -227,7 +227,7 @@ if (m_utteranceQueue.isEmpty()) return nullptr; - return m_utteranceQueue.first(); + return m_utteranceQueue.front(); } const AtomicString& SpeechSynthesis::interfaceName() const {
diff --git a/third_party/WebKit/Source/modules/vr/NavigatorVR.cpp b/third_party/WebKit/Source/modules/vr/NavigatorVR.cpp index 10b97ce..0e084a9 100644 --- a/third_party/WebKit/Source/modules/vr/NavigatorVR.cpp +++ b/third_party/WebKit/Source/modules/vr/NavigatorVR.cpp
@@ -7,7 +7,6 @@ #include "bindings/core/v8/ScriptPromiseResolver.h" #include "core/dom/DOMException.h" #include "core/dom/Document.h" -#include "core/dom/DocumentUserGestureToken.h" #include "core/dom/ExceptionCode.h" #include "core/dom/Fullscreen.h" #include "core/frame/LocalDOMWindow.h" @@ -19,7 +18,6 @@ #include "modules/vr/VRDisplay.h" #include "modules/vr/VRGetDevicesCallback.h" #include "modules/vr/VRPose.h" -#include "platform/UserGestureIndicator.h" #include "public/platform/Platform.h" #include "wtf/PtrUtil.h" @@ -131,12 +129,10 @@ supplementable()->frame()->domWindow()->enqueueWindowEvent(event); } -void NavigatorVR::dispatchVRGestureEvent(VRDisplayEvent* event) { +void NavigatorVR::dispatchVREvent(VRDisplayEvent* event) { if (!(supplementable()->frame())) return; - UserGestureIndicator gestureIndicator( - DocumentUserGestureToken::create(document())); LocalDOMWindow* window = supplementable()->frame()->domWindow(); DCHECK(window); event->setTarget(window);
diff --git a/third_party/WebKit/Source/modules/vr/NavigatorVR.h b/third_party/WebKit/Source/modules/vr/NavigatorVR.h index dfe5472..3dae07f 100644 --- a/third_party/WebKit/Source/modules/vr/NavigatorVR.h +++ b/third_party/WebKit/Source/modules/vr/NavigatorVR.h
@@ -46,8 +46,8 @@ // Queues up event to be fired soon. void enqueueVREvent(VRDisplayEvent*); - // Dispatches a user gesture event immediately. - void dispatchVRGestureEvent(VRDisplayEvent*); + // Dispatches an event immediately. + void dispatchVREvent(VRDisplayEvent*); // Inherited from FocusChangedObserver. void focusedFrameChanged() override;
diff --git a/third_party/WebKit/Source/modules/vr/VRDisplay.cpp b/third_party/WebKit/Source/modules/vr/VRDisplay.cpp index 4fa6fa73..af69d50 100644 --- a/third_party/WebKit/Source/modules/vr/VRDisplay.cpp +++ b/third_party/WebKit/Source/modules/vr/VRDisplay.cpp
@@ -6,7 +6,6 @@ #include "core/css/StylePropertySet.h" #include "core/dom/DOMException.h" -#include "core/dom/DocumentUserGestureToken.h" #include "core/dom/FrameRequestCallback.h" #include "core/dom/ScriptedAnimationController.h" #include "core/dom/TaskRunnerHelper.h" @@ -228,7 +227,8 @@ // If the VRDisplay is already presenting, however, repeated calls are // allowed outside a user gesture so that the presented content may be // updated. - if (firstPresent && !UserGestureIndicator::utilizeUserGesture()) { + if (firstPresent && !UserGestureIndicator::utilizeUserGesture() && + !m_inDisplayActivate) { DOMException* exception = DOMException::create( InvalidStateError, "API can only be initiated by a user gesture."); resolver->reject(exception); @@ -369,7 +369,6 @@ void VRDisplay::beginPresent() { Document* doc = this->document(); - std::unique_ptr<UserGestureIndicator> gestureIndicator; if (m_capabilities->hasExternalDisplay()) { forceExitPresent(); DOMException* exception = DOMException::create( @@ -679,7 +678,8 @@ void VRDisplay::OnActivate(device::mojom::blink::VRDisplayEventReason reason) { if (!m_navigatorVR->isFocused() || m_displayBlurred) return; - m_navigatorVR->dispatchVRGestureEvent(VRDisplayEvent::create( + AutoReset<bool> activating(&m_inDisplayActivate, true); + m_navigatorVR->dispatchVREvent(VRDisplayEvent::create( EventTypeNames::vrdisplayactivate, true, false, this, reason)); }
diff --git a/third_party/WebKit/Source/modules/vr/VRDisplay.h b/third_party/WebKit/Source/modules/vr/VRDisplay.h index 3eaa741..9f0294a 100644 --- a/third_party/WebKit/Source/modules/vr/VRDisplay.h +++ b/third_party/WebKit/Source/modules/vr/VRDisplay.h
@@ -185,6 +185,7 @@ bool m_pendingRaf = false; bool m_pendingVsync = false; bool m_inAnimationFrame = false; + bool m_inDisplayActivate = false; bool m_displayBlurred = false; double m_timebase = -1; bool m_pendingPreviousFrameRender = false;
diff --git a/third_party/WebKit/Source/modules/webdatabase/SQLTransactionCoordinator.cpp b/third_party/WebKit/Source/modules/webdatabase/SQLTransactionCoordinator.cpp index 9e8b2ee6..5952849 100644 --- a/third_party/WebKit/Source/modules/webdatabase/SQLTransactionCoordinator.cpp +++ b/third_party/WebKit/Source/modules/webdatabase/SQLTransactionCoordinator.cpp
@@ -53,14 +53,14 @@ return; SQLTransactionBackend* firstPendingTransaction = - info.pendingTransactions.first(); + info.pendingTransactions.front(); if (firstPendingTransaction->isReadOnly()) { do { firstPendingTransaction = info.pendingTransactions.takeFirst(); info.activeReadTransactions.insert(firstPendingTransaction); firstPendingTransaction->lockAcquired(); } while (!info.pendingTransactions.isEmpty() && - info.pendingTransactions.first()->isReadOnly()); + info.pendingTransactions.front()->isReadOnly()); } else if (info.activeReadTransactions.isEmpty()) { info.pendingTransactions.pop_front(); info.activeWriteTransaction = firstPendingTransaction;
diff --git a/third_party/WebKit/Source/modules/websockets/DocumentWebSocketChannel.cpp b/third_party/WebKit/Source/modules/websockets/DocumentWebSocketChannel.cpp index 82f47cd..e4e75a3 100644 --- a/third_party/WebKit/Source/modules/websockets/DocumentWebSocketChannel.cpp +++ b/third_party/WebKit/Source/modules/websockets/DocumentWebSocketChannel.cpp
@@ -397,7 +397,7 @@ DCHECK(m_handle); uint64_t consumedBufferedAmount = 0; while (!m_messages.isEmpty() && !m_blobLoader) { - Message* message = m_messages.first().get(); + Message* message = m_messages.front().get(); if (m_sendingQuota == 0 && message->type != MessageTypeClose) break; switch (message->type) { @@ -672,9 +672,9 @@ DCHECK(m_handle); // The loaded blob is always placed on m_messages[0]. DCHECK_GT(m_messages.size(), 0u); - DCHECK_EQ(m_messages.first()->type, MessageTypeBlob); + DCHECK_EQ(m_messages.front()->type, MessageTypeBlob); // We replace it with the loaded blob. - m_messages.first() = new Message(buffer); + m_messages.front() = new Message(buffer); processSendQueue(); }
diff --git a/third_party/WebKit/Source/platform/RuntimeEnabledFeatures.json5 b/third_party/WebKit/Source/platform/RuntimeEnabledFeatures.json5 index 5ce0a14..b94dda3 100644 --- a/third_party/WebKit/Source/platform/RuntimeEnabledFeatures.json5 +++ b/third_party/WebKit/Source/platform/RuntimeEnabledFeatures.json5
@@ -811,7 +811,7 @@ { name: "SlimmingPaintInvalidation", implied_by: ["SlimmingPaintV2"], - status: "stable", + status: "experimental", }, { name: "SlimmingPaintV2",
diff --git a/third_party/WebKit/Source/platform/audio/AudioDestinationConsumer.h b/third_party/WebKit/Source/platform/audio/AudioDestinationConsumer.h index 99c2b5f..849fef2 100644 --- a/third_party/WebKit/Source/platform/audio/AudioDestinationConsumer.h +++ b/third_party/WebKit/Source/platform/audio/AudioDestinationConsumer.h
@@ -31,20 +31,17 @@ #ifndef AudioDestinationConsumer_h #define AudioDestinationConsumer_h +#include <memory> #include "platform/PlatformExport.h" -#include "platform/heap/Handle.h" namespace blink { class AudioBus; -class PLATFORM_EXPORT AudioDestinationConsumer - : public GarbageCollected<AudioDestinationConsumer> { +class PLATFORM_EXPORT AudioDestinationConsumer { public: virtual void setFormat(size_t numberOfChannels, float sampleRate) = 0; virtual void consumeAudio(AudioBus*, size_t numberOfFrames) = 0; - - DEFINE_INLINE_VIRTUAL_TRACE() {} }; } // namespace blink
diff --git a/third_party/WebKit/Source/platform/exported/WebMediaStreamSource.cpp b/third_party/WebKit/Source/platform/exported/WebMediaStreamSource.cpp index 56e5e5a70..5e19c39 100644 --- a/third_party/WebKit/Source/platform/exported/WebMediaStreamSource.cpp +++ b/third_party/WebKit/Source/platform/exported/WebMediaStreamSource.cpp
@@ -148,6 +148,8 @@ } class ConsumerWrapper final : public AudioDestinationConsumer { + USING_FAST_MALLOC(ConsumerWrapper); + public: static ConsumerWrapper* create(WebAudioDestinationConsumer* consumer) { return new ConsumerWrapper(consumer); @@ -196,12 +198,10 @@ ASSERT(isMainThread()); ASSERT(!m_private.isNull() && consumer); - const HeapHashSet<Member<AudioDestinationConsumer>>& consumers = + const HashSet<AudioDestinationConsumer*>& consumers = m_private->audioConsumers(); - for (HeapHashSet<Member<AudioDestinationConsumer>>::const_iterator it = - consumers.begin(); - it != consumers.end(); ++it) { - ConsumerWrapper* wrapper = static_cast<ConsumerWrapper*>(it->get()); + for (AudioDestinationConsumer* it : consumers) { + ConsumerWrapper* wrapper = static_cast<ConsumerWrapper*>(it); if (wrapper->consumer() == consumer) { m_private->removeAudioConsumer(wrapper); return true;
diff --git a/third_party/WebKit/Source/platform/graphics/Canvas2DLayerBridge.cpp b/third_party/WebKit/Source/platform/graphics/Canvas2DLayerBridge.cpp index 0462858..1c59437 100644 --- a/third_party/WebKit/Source/platform/graphics/Canvas2DLayerBridge.cpp +++ b/third_party/WebKit/Source/platform/graphics/Canvas2DLayerBridge.cpp
@@ -265,7 +265,7 @@ imageTexture, 0, textureTarget, imageInfo->m_textureId, 0, 0, 0, 0, 0, m_size.width(), m_size.height(), GL_FALSE, GL_FALSE, GL_FALSE); - MailboxInfo& info = m_mailboxes.first(); + MailboxInfo& info = m_mailboxes.front(); gpu::Mailbox mailbox; gl->GenMailboxCHROMIUM(mailbox.name); gl->ProduceTextureDirectCHROMIUM(imageInfo->m_textureId, textureTarget, @@ -376,7 +376,7 @@ sk_sp<SkImage> image, cc::TextureMailbox* outMailbox) { createMailboxInfo(); - MailboxInfo& mailboxInfo = m_mailboxes.first(); + MailboxInfo& mailboxInfo = m_mailboxes.front(); GrContext* grContext = m_contextProvider->grContext(); if (!grContext) {
diff --git a/third_party/WebKit/Source/platform/graphics/DeferredImageDecoderTest.cpp b/third_party/WebKit/Source/platform/graphics/DeferredImageDecoderTest.cpp index 1587d48..65054e92 100644 --- a/third_party/WebKit/Source/platform/graphics/DeferredImageDecoderTest.cpp +++ b/third_party/WebKit/Source/platform/graphics/DeferredImageDecoderTest.cpp
@@ -83,6 +83,19 @@ 0x01, 0x00, 0x01, 0x00, 0x00, 0x02, 0x02, 0x4c, 0x01, 0x00, 0x3b, }; +// Raw data for a GIF file with 1x1 white pixels. Modified from animatedGIF. +const unsigned char whiteGIF[] = { + 0x47, 0x49, 0x46, 0x38, 0x39, 0x61, 0x01, 0x00, 0x01, 0x00, 0xf0, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x21, 0xff, 0x0b, 0x4e, 0x45, + 0x54, 0x53, 0x43, 0x41, 0x50, 0x45, 0x32, 0x2e, 0x30, 0x03, 0x01, 0x00, + 0x00, 0x00, 0x21, 0xff, 0x0b, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x4d, 0x61, + 0x67, 0x69, 0x63, 0x6b, 0x0d, 0x67, 0x61, 0x6d, 0x6d, 0x61, 0x3d, 0x30, + 0x2e, 0x34, 0x35, 0x34, 0x35, 0x35, 0x00, 0x21, 0xff, 0x0b, 0x49, 0x6d, + 0x61, 0x67, 0x65, 0x4d, 0x61, 0x67, 0x69, 0x63, 0x6b, 0x0d, 0x67, 0x61, + 0x6d, 0x6d, 0x61, 0x3d, 0x30, 0x2e, 0x34, 0x35, 0x34, 0x35, 0x35, 0x00, + 0x21, 0xf9, 0x04, 0x00, 0x00, 0x00, 0xff, 0x00, 0x2c, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x02, 0x02, 0x4c, 0x01, 0x00, 0x3b}; + } // namespace class DeferredImageDecoderTest : public ::testing::Test, @@ -324,33 +337,39 @@ } TEST_F(DeferredImageDecoderTest, frameOpacity) { - std::unique_ptr<DeferredImageDecoder> decoder = DeferredImageDecoder::create( - m_data, true, ImageDecoder::AlphaPremultiplied, - ColorBehavior::transformToTargetForTesting()); + for (bool testGIF : {false, true}) { + if (testGIF) + m_data = SharedBuffer::create(whiteGIF, sizeof(whiteGIF)); - SkImageInfo pixInfo = SkImageInfo::MakeN32Premul(1, 1); + std::unique_ptr<DeferredImageDecoder> decoder = + DeferredImageDecoder::create( + m_data, true, ImageDecoder::AlphaPremultiplied, + ColorBehavior::transformToTargetForTesting()); - size_t rowBytes = pixInfo.minRowBytes(); - size_t size = pixInfo.getSafeSize(rowBytes); + SkImageInfo pixInfo = SkImageInfo::MakeN32Premul(1, 1); - Vector<char> storage(size); - SkPixmap pixmap(pixInfo, storage.data(), rowBytes); + size_t rowBytes = pixInfo.minRowBytes(); + size_t size = pixInfo.getSafeSize(rowBytes); - // Before decoding, the frame is not known to be opaque. - sk_sp<SkImage> frame = decoder->createFrameAtIndex(0); - ASSERT_TRUE(frame); - EXPECT_FALSE(frame->isOpaque()); + Vector<char> storage(size); + SkPixmap pixmap(pixInfo, storage.data(), rowBytes); - // Force a lazy decode by reading pixels. - EXPECT_TRUE(frame->readPixels(pixmap, 0, 0)); + // Before decoding, the frame is not known to be opaque. + sk_sp<SkImage> frame = decoder->createFrameAtIndex(0); + ASSERT_TRUE(frame); + EXPECT_FALSE(frame->isOpaque()); - // After decoding, the frame is known to be opaque. - frame = decoder->createFrameAtIndex(0); - ASSERT_TRUE(frame); - EXPECT_TRUE(frame->isOpaque()); + // Force a lazy decode by reading pixels. + EXPECT_TRUE(frame->readPixels(pixmap, 0, 0)); - // Re-generating the opaque-marked frame should not fail. - EXPECT_TRUE(frame->readPixels(pixmap, 0, 0)); + // After decoding, the frame is known to be opaque. + frame = decoder->createFrameAtIndex(0); + ASSERT_TRUE(frame); + EXPECT_TRUE(frame->isOpaque()); + + // Re-generating the opaque-marked frame should not fail. + EXPECT_TRUE(frame->readPixels(pixmap, 0, 0)); + } } // The DeferredImageDecoder would sometimes assume that a frame was a certain
diff --git a/third_party/WebKit/Source/platform/graphics/GraphicsLayer.cpp b/third_party/WebKit/Source/platform/graphics/GraphicsLayer.cpp index de25773..7e642f9 100644 --- a/third_party/WebKit/Source/platform/graphics/GraphicsLayer.cpp +++ b/third_party/WebKit/Source/platform/graphics/GraphicsLayer.cpp
@@ -110,8 +110,7 @@ m_contentsLayer(0), m_contentsLayerId(0), m_scrollableArea(nullptr), - m_renderingContext3d(0), - m_hasPreferredRasterBounds(false) { + m_renderingContext3d(0) { #if DCHECK_IS_ON() if (m_client) m_client->verifyNotPainting(); @@ -150,18 +149,6 @@ m_layer->layer()->setHasWillChangeTransformHint(hasWillChangeTransform); } -void GraphicsLayer::setPreferredRasterBounds(const IntSize& bounds) { - m_preferredRasterBounds = bounds; - m_hasPreferredRasterBounds = true; - m_layer->layer()->setPreferredRasterBounds(bounds); -} - -void GraphicsLayer::clearPreferredRasterBounds() { - m_preferredRasterBounds = IntSize(); - m_hasPreferredRasterBounds = false; - m_layer->layer()->clearPreferredRasterBounds(); -} - void GraphicsLayer::setParent(GraphicsLayer* layer) { #if DCHECK_IS_ON() DCHECK(!layer || !layer->hasAncestor(this)); @@ -679,11 +666,6 @@ m_backfaceVisibility ? "visible" : "hidden"); } - if (m_hasPreferredRasterBounds) { - json->setArray("preferredRasterBounds", - sizeAsJSONArray(m_preferredRasterBounds)); - } - if (flags & LayerTreeIncludesDebugInfo) json->setString("client", pointerAsString(m_client));
diff --git a/third_party/WebKit/Source/platform/graphics/GraphicsLayer.h b/third_party/WebKit/Source/platform/graphics/GraphicsLayer.h index a1ab48f..0d76737 100644 --- a/third_party/WebKit/Source/platform/graphics/GraphicsLayer.h +++ b/third_party/WebKit/Source/platform/graphics/GraphicsLayer.h
@@ -276,10 +276,6 @@ void setHasWillChangeTransformHint(bool); - // See comments in cc::Layer::SetPreferredRasterBounds. - void setPreferredRasterBounds(const IntSize&); - void clearPreferredRasterBounds(); - protected: String debugName(cc::Layer*) const; bool shouldFlattenTransform() const { return m_shouldFlattenTransform; } @@ -395,8 +391,6 @@ std::unique_ptr<PaintController> m_paintController; IntRect m_previousInterestRect; - IntSize m_preferredRasterBounds; - bool m_hasPreferredRasterBounds; }; } // namespace blink
diff --git a/third_party/WebKit/Source/platform/graphics/ImageFrameGenerator.cpp b/third_party/WebKit/Source/platform/graphics/ImageFrameGenerator.cpp index 27e93bc..caff5e4c 100644 --- a/third_party/WebKit/Source/platform/graphics/ImageFrameGenerator.cpp +++ b/third_party/WebKit/Source/platform/graphics/ImageFrameGenerator.cpp
@@ -307,28 +307,37 @@ return false; } - if (!m_isMultiFrame && newDecoder && allDataReceived) { - // If we're using an external memory allocator that means we're decoding - // directly into the output memory and we can save one memcpy. - ASSERT(allocator); - (*decoder)->setMemoryAllocator(allocator); - } if (shouldCallSetData) (*decoder)->setData(data, allDataReceived); - ImageFrame* frame = (*decoder)->frameBufferAtIndex(index); + + bool usingExternalAllocator = false; // For multi-frame image decoders, we need to know how many frames are // in that image in order to release the decoder when all frames are // decoded. frameCount() is reliable only if all data is received and set in // decoder, particularly with GIF. - if (allDataReceived) + if (allDataReceived) { m_frameCount = (*decoder)->frameCount(); + // TODO (scroggo): If !m_isMultiFrame && newDecoder && allDataReceived, it + // should always be the case that 1u == m_frameCount. But it looks like it + // is currently possible for m_frameCount to be another value. + if (!m_isMultiFrame && newDecoder && 1u == m_frameCount) { + // If we're using an external memory allocator that means we're decoding + // directly into the output memory and we can save one memcpy. + DCHECK(allocator); + (*decoder)->setMemoryAllocator(allocator); + usingExternalAllocator = true; + } + } + + ImageFrame* frame = (*decoder)->frameBufferAtIndex(index); (*decoder)->setData(PassRefPtr<SegmentReader>(nullptr), false); // Unref SegmentReader from ImageDecoder. (*decoder)->clearCacheExceptFrame(index); - (*decoder)->setMemoryAllocator(0); + if (usingExternalAllocator) + (*decoder)->setMemoryAllocator(0); if (!frame || frame->getStatus() == ImageFrame::FrameEmpty) return false;
diff --git a/third_party/WebKit/Source/platform/graphics/StrokeData.cpp b/third_party/WebKit/Source/platform/graphics/StrokeData.cpp index cbdb47b..ac64a3d 100644 --- a/third_party/WebKit/Source/platform/graphics/StrokeData.cpp +++ b/third_party/WebKit/Source/platform/graphics/StrokeData.cpp
@@ -34,8 +34,6 @@ namespace blink { -static const int dashRatio = 3; // Ratio of the length of a dash to its width. - void StrokeData::setLineDash(const DashArray& dashes, float dashOffset) { // FIXME: This is lifted directly off SkiaSupport, lines 49-74 // so it is not guaranteed to work correctly. @@ -71,56 +69,46 @@ if (m_dash) { flags->setPathEffect(m_dash); } else if (strokeIsDashed(m_thickness, m_style)) { - float width = - m_style == DashedStroke ? dashRatio * m_thickness : m_thickness; - - // Truncate the width, since we don't want fuzzy dots or dashes. - int dashLength = static_cast<int>(width); - // Subtract off the endcaps, since they're rendered separately. - int distance = length - 2 * static_cast<int>(m_thickness); - int phase = 1; - if (dashLength > 1) { - // Determine how many dashes or dots we should have. - int numDashes = distance / dashLength; - int remainder = distance % dashLength; - // Adjust the phase to center the dashes within the line. - if (numDashes % 2) { - // Odd: shift right a full dash, minus half the remainder. - phase = dashLength - remainder / 2; - } else { - // Even: shift right half a dash, minus half the remainder. - phase = (dashLength - remainder) / 2; - } + float dashLength = m_thickness; + float gapLength = dashLength; + if (m_style == DashedStroke) { + dashLength *= StrokeData::dashLengthRatio(m_thickness); + gapLength *= StrokeData::dashGapRatio(m_thickness); } - SkScalar dashLengthSk = SkIntToScalar(dashLength); - SkScalar intervals[2] = {dashLengthSk, dashLengthSk}; - flags->setPathEffect( - SkDashPathEffect::Make(intervals, 2, SkIntToScalar(phase))); + // Account for modification to effective length in + // GraphicsContext::adjustLineToPixelBoundaries + length -= 2 * m_thickness; + if (length <= dashLength) { + // No space for dashes + flags->setPathEffect(0); + } else if (length <= 2 * dashLength + gapLength) { + // Exactly 2 dashes proportionally sized + float multiplier = length / (2 * dashLength + gapLength); + SkScalar intervals[2] = {dashLength * multiplier, gapLength * multiplier}; + flags->setPathEffect(SkDashPathEffect::Make(intervals, 2, 0)); + } else { + float gap = gapLength; + if (m_style == DashedStroke) + gap = selectBestDashGap(length, dashLength, gapLength); + SkScalar intervals[2] = {dashLength, gap}; + flags->setPathEffect(SkDashPathEffect::Make(intervals, 2, 0)); + } } else if (m_style == DottedStroke) { flags->setStrokeCap((PaintFlags::Cap)RoundCap); // Adjust the width to get equal dot spacing as much as possible. float perDotLength = m_thickness * 2; - static float epsilon = 1.0e-2f; - if (length < perDotLength + m_thickness) { - // Exactly 2 dots with whatever space we can get - SkScalar intervals[2] = {0, length - m_thickness - epsilon}; + if (length < perDotLength) { + // Not enoguh space for 2 dots. Just draw 1 by giving a gap that is + // bigger than the length. + SkScalar intervals[2] = {0, perDotLength}; flags->setPathEffect(SkDashPathEffect::Make(intervals, 2, 0)); return; } - // Determine what number of dots gives the minimum deviation from - // idealGap between dots. Set the gap to that width. - float minNumDots = floorf((length + m_thickness) / perDotLength); - float maxNumDots = minNumDots + 1; - float minGap = (length - minNumDots * m_thickness) / (minNumDots - 1); - float maxGap = (length - maxNumDots * m_thickness) / (maxNumDots - 1); - if (fabs(minGap - m_thickness) < fabs(maxGap - m_thickness)) { - SkScalar intervals[2] = {0, minGap + m_thickness - epsilon}; - flags->setPathEffect(SkDashPathEffect::Make(intervals, 2, 0)); - } else { - SkScalar intervals[2] = {0, maxGap + m_thickness - epsilon}; - flags->setPathEffect(SkDashPathEffect::Make(intervals, 2, 0)); - } + static const float epsilon = 1.0e-2f; + float gap = selectBestDashGap(length, m_thickness, m_thickness); + SkScalar intervals[2] = {0, gap + m_thickness - epsilon}; + flags->setPathEffect(SkDashPathEffect::Make(intervals, 2, 0)); } else { // TODO(schenney): WavyStroke https://crbug.com/229574 flags->setPathEffect(0); @@ -131,4 +119,19 @@ return style == DashedStroke || (style == DottedStroke && width <= 3); } +float StrokeData::selectBestDashGap(float strokeLength, + float dashLength, + float gapLength) { + // Determine what number of dashes gives the minimum deviation from + // gapLength between dashes. Set the gap to that width. + float minNumDashes = + floorf((strokeLength + gapLength) / (dashLength + gapLength)); + float maxNumDashes = minNumDashes + 1; + float minGap = + (strokeLength - minNumDashes * dashLength) / (minNumDashes - 1); + float maxGap = + (strokeLength - maxNumDashes * dashLength) / (maxNumDashes - 1); + return fabs(minGap - gapLength) < fabs(maxGap - gapLength) ? minGap : maxGap; +} + } // namespace blink
diff --git a/third_party/WebKit/Source/platform/graphics/StrokeData.h b/third_party/WebKit/Source/platform/graphics/StrokeData.h index f39dffc..0c73f01 100644 --- a/third_party/WebKit/Source/platform/graphics/StrokeData.h +++ b/third_party/WebKit/Source/platform/graphics/StrokeData.h
@@ -87,6 +87,29 @@ // is specified but the line width is too small to draw circles. static bool strokeIsDashed(float width, StrokeStyle); + // The length of the dash relative to the line thickness for dashed stroking. + // A different dash length may be used when dashes are adjusted to better + // fit a given length path. Thin lines need longer dashes to avoid + // looking like dots when drawn. + static float dashLengthRatio(float thickness) { + return thickness >= 3 ? 2.0 : 3.0; + } + + // The length of the gap between dashes relative to the line thickness for + // dashed stroking. A different gap may be used when dashes are adjusted to + // better fit a given length path. Thin lines need longer gaps to avoid + // looking like a continuous line when drawn. + static float dashGapRatio(float thickness) { + return thickness >= 3 ? 1.0 : 2.0; + } + + // Return a dash gap size that places dashes at each end of a stroke that is + // strokeLength long, given preferred dash and gap sizes. The gap returned is + // the one that minimizes deviation from the preferred gap length. + static float selectBestDashGap(float strokeLength, + float dashLength, + float gapLength); + private: StrokeStyle m_style; float m_thickness;
diff --git a/third_party/WebKit/Source/platform/graphics/gpu/SharedContextRateLimiter.cpp b/third_party/WebKit/Source/platform/graphics/gpu/SharedContextRateLimiter.cpp index 703f31b..32b0ce44 100644 --- a/third_party/WebKit/Source/platform/graphics/gpu/SharedContextRateLimiter.cpp +++ b/third_party/WebKit/Source/platform/graphics/gpu/SharedContextRateLimiter.cpp
@@ -55,8 +55,8 @@ if (m_queries.size() > m_maxPendingTicks) { if (m_canUseSyncQueries) { GLuint result; - gl->GetQueryObjectuivEXT(m_queries.first(), GL_QUERY_RESULT_EXT, &result); - gl->DeleteQueriesEXT(1, &m_queries.first()); + gl->GetQueryObjectuivEXT(m_queries.front(), GL_QUERY_RESULT_EXT, &result); + gl->DeleteQueriesEXT(1, &m_queries.front()); m_queries.pop_front(); } else { gl->Finish(); @@ -72,7 +72,7 @@ gpu::gles2::GLES2Interface* gl = m_contextProvider->contextGL(); if (gl && gl->GetGraphicsResetStatusKHR() == GL_NO_ERROR) { while (m_queries.size() > 0) { - gl->DeleteQueriesEXT(1, &m_queries.first()); + gl->DeleteQueriesEXT(1, &m_queries.front()); m_queries.pop_front(); } } else {
diff --git a/third_party/WebKit/Source/platform/heap/GarbageCollected.h b/third_party/WebKit/Source/platform/heap/GarbageCollected.h index e22e0e1..f914e02 100644 --- a/third_party/WebKit/Source/platform/heap/GarbageCollected.h +++ b/third_party/WebKit/Source/platform/heap/GarbageCollected.h
@@ -246,17 +246,6 @@ IsGarbageCollectedMixin<typename std::remove_const<T>::type>::value; }; -class WrapperVisitor; -template <typename T, typename = void> -struct CanTraceWrappers : std::false_type {}; - -template <typename T> -struct CanTraceWrappers<T, - decltype( - std::declval<T&>().markAndDispatchTraceWrappers( - std::declval<WrapperVisitor*>()))> - : std::true_type {}; - // TODO(sof): migrate to wtf/TypeTraits.h template <typename T> class IsFullyDefined {
diff --git a/third_party/WebKit/Source/platform/heap/HeapTest.cpp b/third_party/WebKit/Source/platform/heap/HeapTest.cpp index 64d69dd..cd0ca606 100644 --- a/third_party/WebKit/Source/platform/heap/HeapTest.cpp +++ b/third_party/WebKit/Source/platform/heap/HeapTest.cpp
@@ -3879,9 +3879,9 @@ EXPECT_EQ(three, pVec.at(1)); EXPECT_EQ(2u, pDeque.size()); - EXPECT_EQ(seven, pDeque.first()); + EXPECT_EQ(seven, pDeque.front()); EXPECT_EQ(seven, pDeque.takeFirst()); - EXPECT_EQ(two, pDeque.first()); + EXPECT_EQ(two, pDeque.front()); EXPECT_EQ(1u, pDeque.size());
diff --git a/third_party/WebKit/Source/platform/heap/TraceTraits.h b/third_party/WebKit/Source/platform/heap/TraceTraits.h index 7d60bff..d61b64d 100644 --- a/third_party/WebKit/Source/platform/heap/TraceTraits.h +++ b/third_party/WebKit/Source/platform/heap/TraceTraits.h
@@ -204,9 +204,6 @@ private: static const T* ToWrapperTracingType(const void* t) { - static_assert(CanTraceWrappers<T>::value, - "T should be able to trace wrappers. See " - "dispatchTraceWrappers in WrapperVisitor.h"); static_assert(!NeedsAdjustAndMark<T>::value, "wrapper tracing is not supported within mixins"); #if DCHECK_IS_ON() @@ -241,7 +238,8 @@ // The term *mark* is misleading here as we effectively trace through the // API boundary, i.e., tell V8 that an object is alive. Actual marking // will be done in V8. - traceable->markAndDispatchTraceWrappers(visitor); + visitor->dispatchTraceWrappers(traceable); + visitor->markWrappersInAllWorlds(traceable); } template <typename T>
diff --git a/third_party/WebKit/Source/platform/heap/WrapperVisitor.h b/third_party/WebKit/Source/platform/heap/WrapperVisitor.h index d5002a6..5d37598 100644 --- a/third_party/WebKit/Source/platform/heap/WrapperVisitor.h +++ b/third_party/WebKit/Source/platform/heap/WrapperVisitor.h
@@ -41,22 +41,6 @@ void traceWrappers(const WrapperVisitor* visitor) const /** - * Declares markAndDispatchTraceWrappers and non-virtual traceWrappers methods. - * Use this on non-TraceWrapperBase classes that participate in wrapper tracing - * (e.g. NodeRareData): - * - * class NodeRareData { - * public: - * DECLARE_TRACE_WRAPPERS_WITHOUT_BASE(); - * }; - */ -#define DECLARE_TRACE_WRAPPERS_WITHOUT_BASE() \ - void markAndDispatchTraceWrappers(const WrapperVisitor* visitor) const { \ - traceWrappers(visitor); \ - } \ - DECLARE_TRACE_WRAPPERS() - -/** * Declares virtual traceWrappers method. It is used in ScriptWrappable, can be * used to override the method in the subclasses, and can be used by * non-ScriptWrappable classes which expect to be inherited. @@ -86,6 +70,15 @@ #define DEFINE_INLINE_TRACE_WRAPPERS() DECLARE_TRACE_WRAPPERS() #define DEFINE_INLINE_VIRTUAL_TRACE_WRAPPERS() DECLARE_VIRTUAL_TRACE_WRAPPERS() +#define DEFINE_TRAIT_FOR_TRACE_WRAPPERS(ClassName) \ + template <> \ + inline void TraceTrait<ClassName>::traceMarkedWrapper( \ + const WrapperVisitor* visitor, const void* t) { \ + const ClassName* traceable = ToWrapperTracingType(t); \ + DCHECK(heapObjectHeader(t)->isWrapperHeaderMarked()); \ + traceable->traceWrappers(visitor); \ + } + // ########################################################################### // TODO(hlopko): Get rid of virtual calls using CRTP class PLATFORM_EXPORT WrapperVisitor { @@ -100,9 +93,6 @@ template <typename T> void traceWrappers(const T* traceable) const { static_assert(sizeof(T), "T must be fully defined"); - static_assert(CanTraceWrappers<T>::value, - "T should be able to trace wrappers. See " - "dispatchTraceWrappers in WrapperVisitor.h"); if (!traceable) { return; @@ -156,6 +146,10 @@ virtual bool markWrapperHeader(HeapObjectHeader*) const = 0; virtual void markWrappersInAllWorlds(const ScriptWrappable*) const = 0; + void markWrappersInAllWorlds(const TraceWrapperBase*) const { + // TraceWrapperBase cannot point to V8 and thus doesn't need to + // mark wrappers. + } template <typename T> ALWAYS_INLINE void markAndPushToMarkingDeque(const T* traceable) const {
diff --git a/third_party/WebKit/Source/platform/image-decoders/ImageDecoder.cpp b/third_party/WebKit/Source/platform/image-decoders/ImageDecoder.cpp index 7e4e93e9..9ba0e09 100644 --- a/third_party/WebKit/Source/platform/image-decoders/ImageDecoder.cpp +++ b/third_party/WebKit/Source/platform/image-decoders/ImageDecoder.cpp
@@ -356,7 +356,7 @@ // This frame doesn't rely on any previous data. if (!buffer->setSizeAndColorSpace(size().width(), size().height(), colorSpaceForSkImages())) { - return setFailed(); + return false; } } else { ImageFrame* const prevBuffer = @@ -370,7 +370,7 @@ if ((!canReusePreviousFrameBuffer(frameIndex) || !buffer->takeBitmapDataIfWritable(prevBuffer)) && !buffer->copyBitmapData(*prevBuffer)) - return setFailed(); + return false; if (prevBuffer->getDisposalMethod() == ImageFrame::DisposeOverwriteBgcolor) { @@ -382,10 +382,11 @@ } } + onInitFrameBuffer(frameIndex); + // Update our status to be partially complete. buffer->setStatus(ImageFrame::FramePartial); - onInitFrameBuffer(frameIndex); return true; }
diff --git a/third_party/WebKit/Source/platform/image-decoders/ImageDecoder.h b/third_party/WebKit/Source/platform/image-decoders/ImageDecoder.h index de85ae0..fa0a989 100644 --- a/third_party/WebKit/Source/platform/image-decoders/ImageDecoder.h +++ b/third_party/WebKit/Source/platform/image-decoders/ImageDecoder.h
@@ -258,13 +258,15 @@ // and returns true. Otherwise returns false. virtual bool hotSpot(IntPoint&) const { return false; } - virtual void setMemoryAllocator(SkBitmap::Allocator* allocator) { + void setMemoryAllocator(SkBitmap::Allocator* allocator) { // FIXME: this doesn't work for images with multiple frames. if (m_frameBufferCache.isEmpty()) { - m_frameBufferCache.resize(1); - m_frameBufferCache[0].setRequiredPreviousFrameIndex( - findRequiredPreviousFrame(0, false)); + // Ensure that initializeNewFrame is called, after parsing if + // necessary. + if (!frameCount()) + return; } + m_frameBufferCache[0].setMemoryAllocator(allocator); } @@ -313,9 +315,11 @@ virtual size_t decodeFrameCount() { return 1; } // Called to initialize the frame buffer with the given index, based on the - // provided and previous frame's characteristics. Returns true on success. On - // failure, this will mark the image as failed. Before calling this method, - // the caller must verify that the frame exists. + // provided and previous frame's characteristics. Returns true on success. + // Before calling this method, the caller must verify that the frame exists. + // On failure, the client should call setFailed. This method does not call + // setFailed itself because that might delete the object directly making this + // call. bool initFrameBuffer(size_t); // Performs any additional setup of the requested frame after it has been
diff --git a/third_party/WebKit/Source/platform/image-decoders/ImageDecoderTestHelpers.cpp b/third_party/WebKit/Source/platform/image-decoders/ImageDecoderTestHelpers.cpp index 18c1406..b41606a 100644 --- a/third_party/WebKit/Source/platform/image-decoders/ImageDecoderTestHelpers.cpp +++ b/third_party/WebKit/Source/platform/image-decoders/ImageDecoderTestHelpers.cpp
@@ -54,10 +54,10 @@ } } -static void testByteByByteDecode(DecoderCreator createDecoder, - SharedBuffer* data, - size_t expectedFrameCount, - int expectedRepetitionCount) { +void testByteByByteDecode(DecoderCreator createDecoder, + SharedBuffer* data, + size_t expectedFrameCount, + int expectedRepetitionCount) { ASSERT_TRUE(data->data()); Vector<unsigned> baselineHashes; @@ -224,8 +224,10 @@ // Send data to the decoder byte-by-byte and use the provided frame offset in // the data to check that isSizeAvailable() changes state only when that // offset is reached. Also check other decoder state. + RefPtr<SharedBuffer> tempData = SharedBuffer::create(); + const char* source = data->data(); for (size_t length = 1; length <= frameOffset; ++length) { - RefPtr<SharedBuffer> tempData = SharedBuffer::create(data->data(), length); + tempData->append(source++, 1u); decoder->setData(tempData.get(), false); if (length < frameOffset) { @@ -258,9 +260,11 @@ Vector<unsigned> progressiveHashes; // Compute hashes when the file is truncated. + RefPtr<SharedBuffer> data = SharedBuffer::create(); + const char* source = fullData->data(); for (size_t i = 1; i <= fullLength; i += increment) { decoder = createDecoder(); - RefPtr<SharedBuffer> data = SharedBuffer::create(fullData->data(), i); + data->append(source++, 1u); decoder->setData(data.get(), i == fullLength); ImageFrame* frame = decoder->frameBufferAtIndex(0); if (!frame) { @@ -272,8 +276,10 @@ // Compute hashes when the file is progressively decoded. decoder = createDecoder(); + data = SharedBuffer::create(); + source = fullData->data(); for (size_t i = 1; i <= fullLength; i += increment) { - RefPtr<SharedBuffer> data = SharedBuffer::create(fullData->data(), i); + data->append(source++, 1u); decoder->setData(data.get(), i == fullLength); ImageFrame* frame = decoder->frameBufferAtIndex(0); if (!frame) { @@ -294,12 +300,11 @@ // Give it data that is enough to parse but not decode in order to check the // status of requiredPreviousFrameIndex before decoding. - size_t partialSize = 1; + RefPtr<SharedBuffer> data = SharedBuffer::create(); + const char* source = fullData->data(); do { - RefPtr<SharedBuffer> data = - SharedBuffer::create(fullData->data(), partialSize); + data->append(source++, 1u); decoder->setData(data.get(), false); - ++partialSize; } while (!decoder->frameCount() || decoder->frameBufferAtIndex(0)->getStatus() == ImageFrame::FrameEmpty); @@ -329,12 +334,11 @@ std::unique_ptr<ImageDecoder> decoder = createDecoder(); // Let frame 0 be partially decoded. - size_t partialSize = 1; + RefPtr<SharedBuffer> data = SharedBuffer::create(); + const char* source = fullData->data(); do { - RefPtr<SharedBuffer> data = - SharedBuffer::create(fullData->data(), partialSize); + data->append(source++, 1u); decoder->setData(data.get(), false); - ++partialSize; } while (!decoder->frameCount() || decoder->frameBufferAtIndex(0)->getStatus() == ImageFrame::FrameEmpty);
diff --git a/third_party/WebKit/Source/platform/image-decoders/ImageDecoderTestHelpers.h b/third_party/WebKit/Source/platform/image-decoders/ImageDecoderTestHelpers.h index fbe85ac..4b9dd12 100644 --- a/third_party/WebKit/Source/platform/image-decoders/ImageDecoderTestHelpers.h +++ b/third_party/WebKit/Source/platform/image-decoders/ImageDecoderTestHelpers.h
@@ -26,6 +26,10 @@ Vector<unsigned>* baselineHashes); void testByteByByteDecode(DecoderCreator createDecoder, + SharedBuffer* data, + size_t expectedFrameCount, + int expectedRepetitionCount); +void testByteByByteDecode(DecoderCreator createDecoder, const char* file, size_t expectedFrameCount, int expectedRepetitionCount);
diff --git a/third_party/WebKit/Source/platform/image-decoders/gif/GIFImageDecoder.cpp b/third_party/WebKit/Source/platform/image-decoders/gif/GIFImageDecoder.cpp index 357917f..307e6a4f 100644 --- a/third_party/WebKit/Source/platform/image-decoders/gif/GIFImageDecoder.cpp +++ b/third_party/WebKit/Source/platform/image-decoders/gif/GIFImageDecoder.cpp
@@ -189,12 +189,13 @@ // Initialize the frame if necessary. Some GIFs insert do-nothing frames, // in which case we never reach haveDecodedRow() before getting here. if (!initFrameBuffer(frameIndex)) - return false; // initFrameBuffer() has already called setFailed(). + return setFailed(); - m_frameBufferCache[frameIndex].setStatus(ImageFrame::FrameComplete); if (!m_currentBufferSawAlpha) correctAlphaWhenFrameBufferSawNoAlpha(frameIndex); + m_frameBufferCache[frameIndex].setStatus(ImageFrame::FrameComplete); + return true; }
diff --git a/third_party/WebKit/Source/platform/image-decoders/gif/GIFImageDecoderTest.cpp b/third_party/WebKit/Source/platform/image-decoders/gif/GIFImageDecoderTest.cpp index 8c4e988..d7ff80ed 100644 --- a/third_party/WebKit/Source/platform/image-decoders/gif/GIFImageDecoderTest.cpp +++ b/third_party/WebKit/Source/platform/image-decoders/gif/GIFImageDecoderTest.cpp
@@ -406,4 +406,34 @@ EXPECT_EQ(unpremulFrame->bitmap().alphaType(), kOpaque_SkAlphaType); } +namespace { +// Needed to exercise ImageDecoder::setMemoryAllocator, but still does the +// default allocation. +class Allocator final : public SkBitmap::Allocator { + bool allocPixelRef(SkBitmap* dst, SkColorTable* ctable) override { + return dst->tryAllocPixels(ctable); + } +}; +} + +// Ensure that calling setMemoryAllocator does not short-circuit +// initializeNewFrame. +TEST(GIFImageDecoderTest, externalAllocator) { + auto data = readFile(layoutTestResourcesDir, "boston.gif"); + ASSERT_TRUE(data.get()); + + auto decoder = createDecoder(); + decoder->setData(data.get(), true); + + Allocator allocator; + decoder->setMemoryAllocator(&allocator); + EXPECT_EQ(1u, decoder->frameCount()); + ImageFrame* frame = decoder->frameBufferAtIndex(0); + decoder->setMemoryAllocator(nullptr); + + ASSERT_TRUE(frame); + EXPECT_EQ(IntRect(IntPoint(), decoder->size()), frame->originalFrameRect()); + EXPECT_FALSE(frame->hasAlpha()); +} + } // namespace blink
diff --git a/third_party/WebKit/Source/platform/image-decoders/png/PNGImageDecoder.cpp b/third_party/WebKit/Source/platform/image-decoders/png/PNGImageDecoder.cpp index 6deba9ce..cb37d13 100644 --- a/third_party/WebKit/Source/platform/image-decoders/png/PNGImageDecoder.cpp +++ b/third_party/WebKit/Source/platform/image-decoders/png/PNGImageDecoder.cpp
@@ -38,11 +38,6 @@ #include "platform/image-decoders/png/PNGImageDecoder.h" -#include "platform/image-decoders/png/PNGImageReader.h" -#include "png.h" -#include "wtf/PtrUtil.h" -#include <memory> - namespace blink { PNGImageDecoder::PNGImageDecoder(AlphaOption alphaOption, @@ -50,10 +45,101 @@ size_t maxDecodedBytes, size_t offset) : ImageDecoder(alphaOption, colorBehavior, maxDecodedBytes), - m_offset(offset) {} + m_offset(offset), + m_currentFrame(0), + // It would be logical to default to cAnimationNone, but BitmapImage uses + // that as a signal to never check again, meaning the actual count will + // never be respected. + m_repetitionCount(cAnimationLoopOnce), + m_hasAlphaChannel(false), + m_currentBufferSawAlpha(false) {} PNGImageDecoder::~PNGImageDecoder() {} +bool PNGImageDecoder::setFailed() { + m_reader.reset(); + return ImageDecoder::setFailed(); +} + +size_t PNGImageDecoder::decodeFrameCount() { + parse(ParseQuery::MetaData); + return failed() ? m_frameBufferCache.size() : m_reader->frameCount(); +} + +void PNGImageDecoder::decode(size_t index) { + parse(ParseQuery::MetaData); + + if (failed()) + return; + + updateAggressivePurging(index); + + Vector<size_t> framesToDecode = findFramesToDecode(index); + for (auto i = framesToDecode.rbegin(); i != framesToDecode.rend(); i++) { + m_currentFrame = *i; + if (!m_reader->decode(*m_data, *i)) { + setFailed(); + return; + } + + // If this returns false, we need more data to continue decoding. + if (!postDecodeProcessing(*i)) + break; + } + + // It is also a fatal error if all data is received and we have decoded all + // frames available but the file is truncated. + if (index >= m_frameBufferCache.size() - 1 && isAllDataReceived() && + m_reader && !m_reader->parseCompleted()) + setFailed(); +} + +void PNGImageDecoder::parse(ParseQuery query) { + if (failed() || (m_reader && m_reader->parseCompleted())) + return; + + if (!m_reader) + m_reader = WTF::makeUnique<PNGImageReader>(this, m_offset); + + if (!m_reader->parse(*m_data, query)) + setFailed(); +} + +void PNGImageDecoder::clearFrameBuffer(size_t index) { + if (m_reader) + m_reader->clearDecodeState(index); + ImageDecoder::clearFrameBuffer(index); +} + +bool PNGImageDecoder::canReusePreviousFrameBuffer(size_t index) const { + DCHECK(index < m_frameBufferCache.size()); + return m_frameBufferCache[index].getDisposalMethod() != + ImageFrame::DisposeOverwritePrevious; +} + +void PNGImageDecoder::setRepetitionCount(int repetitionCount) { + m_repetitionCount = repetitionCount; +} + +int PNGImageDecoder::repetitionCount() const { + return failed() ? cAnimationLoopOnce : m_repetitionCount; +} + +void PNGImageDecoder::initializeNewFrame(size_t index) { + const PNGImageReader::FrameInfo& frameInfo = m_reader->frameInfo(index); + ImageFrame& buffer = m_frameBufferCache[index]; + + DCHECK(IntRect(IntPoint(), size()).contains(frameInfo.frameRect)); + buffer.setOriginalFrameRect(frameInfo.frameRect); + + buffer.setDuration(frameInfo.duration); + buffer.setDisposalMethod(frameInfo.disposalMethod); + buffer.setAlphaBlendSource(frameInfo.alphaBlend); + + size_t previousFrameIndex = findRequiredPreviousFrame(index, false); + buffer.setRequiredPreviousFrameIndex(previousFrameIndex); +} + inline sk_sp<SkColorSpace> readColorSpace(png_structp png, png_infop info) { if (png_get_valid(png, info, PNG_INFO_sRGB)) return SkColorSpace::MakeSRGB(); @@ -111,22 +197,8 @@ void PNGImageDecoder::headerAvailable() { png_structp png = m_reader->pngPtr(); png_infop info = m_reader->infoPtr(); - png_uint_32 width = png_get_image_width(png, info); - png_uint_32 height = png_get_image_height(png, info); - // Protect against large PNGs. See http://bugzil.la/251381 for more details. - const unsigned long maxPNGSize = 1000000UL; - if (width > maxPNGSize || height > maxPNGSize) { - longjmp(JMPBUF(png), 1); - return; - } - - // Set the image size now that the image header is available. - if (!setSize(width, height)) { - longjmp(JMPBUF(png), 1); - return; - } - + png_uint_32 width, height; int bitDepth, colorType, interlaceType, compressionType; png_get_IHDR(png, info, &width, &height, &bitDepth, &colorType, &interlaceType, &compressionType, nullptr); @@ -148,11 +220,29 @@ colorType == PNG_COLOR_TYPE_GRAY_ALPHA) png_set_gray_to_rgb(png); - if ((colorType & PNG_COLOR_MASK_COLOR) && !ignoresColorSpace()) { - // We only support color profiles for color PALETTE and RGB[A] PNG. - // TODO(msarret): Add GRAY profile support, block CYMK? - if (sk_sp<SkColorSpace> colorSpace = readColorSpace(png, info)) - setEmbeddedColorSpace(std::move(colorSpace)); + // Only set the size and the color space of the image once since non-first + // frames also use this method: there is no per-frame color space, and the + // image size is determined from the header width and height. + if (!isDecodedSizeAvailable()) { + // Protect against large PNGs. See http://bugzil.la/251381 for more details. + const unsigned long maxPNGSize = 1000000UL; + if (width > maxPNGSize || height > maxPNGSize) { + longjmp(JMPBUF(png), 1); + return; + } + + // Set the image size now that the image header is available. + if (!setSize(width, height)) { + longjmp(JMPBUF(png), 1); + return; + } + + if ((colorType & PNG_COLOR_MASK_COLOR) && !ignoresColorSpace()) { + // We only support color profiles for color PALETTE and RGB[A] PNG. + // TODO(msarret): Add GRAY profile support, block CYMK? + if (sk_sp<SkColorSpace> colorSpace = readColorSpace(png, info)) + setEmbeddedColorSpace(colorSpace); + } } if (!hasEmbeddedColorSpace()) { @@ -171,6 +261,8 @@ } } + DCHECK(isDecodedSizeAvailable()); + // Tell libpng to send us rows for interlaced pngs. if (interlaceType == PNG_INTERLACE_ADAM7) png_set_interlace_handling(png); @@ -180,56 +272,41 @@ int channels = png_get_channels(png, info); DCHECK(channels == 3 || channels == 4); - m_reader->setHasAlpha(channels == 4); - - if (m_reader->decodingSizeOnly()) { -// If we only needed the size, halt the reader. -#if PNG_LIBPNG_VER_MAJOR > 1 || \ - (PNG_LIBPNG_VER_MAJOR == 1 && PNG_LIBPNG_VER_MINOR >= 5) - // Passing '0' tells png_process_data_pause() not to cache unprocessed data. - m_reader->setReadOffset(m_reader->currentBufferSize() - - png_process_data_pause(png, 0)); -#else - m_reader->setReadOffset(m_reader->currentBufferSize() - png->buffer_size); - png->buffer_size = 0; -#endif - } + m_hasAlphaChannel = (channels == 4); } void PNGImageDecoder::rowAvailable(unsigned char* rowBuffer, unsigned rowIndex, int) { - if (m_frameBufferCache.isEmpty()) + if (m_currentFrame >= m_frameBufferCache.size()) return; - // Initialize the framebuffer if needed. - ImageFrame& buffer = m_frameBufferCache[0]; + ImageFrame& buffer = m_frameBufferCache[m_currentFrame]; if (buffer.getStatus() == ImageFrame::FrameEmpty) { png_structp png = m_reader->pngPtr(); - if (!buffer.setSizeAndColorSpace(size().width(), size().height(), - colorSpaceForSkImages())) { + if (!initFrameBuffer(m_currentFrame)) { longjmp(JMPBUF(png), 1); return; } - unsigned colorChannels = m_reader->hasAlpha() ? 4 : 3; + DCHECK_EQ(ImageFrame::FramePartial, buffer.getStatus()); + if (PNG_INTERLACE_ADAM7 == png_get_interlace_type(png, m_reader->infoPtr())) { - m_reader->createInterlaceBuffer(colorChannels * size().width() * - size().height()); + unsigned colorChannels = m_hasAlphaChannel ? 4 : 3; + m_reader->createInterlaceBuffer(colorChannels * size().area()); if (!m_reader->interlaceBuffer()) { longjmp(JMPBUF(png), 1); return; } } - buffer.setStatus(ImageFrame::FramePartial); - buffer.setHasAlpha(false); - - // For PNGs, the frame always fills the entire image. - buffer.setOriginalFrameRect(IntRect(IntPoint(), size())); + m_currentBufferSawAlpha = false; } + const IntRect& frameRect = buffer.originalFrameRect(); + DCHECK(IntRect(IntPoint(), size()).contains(frameRect)); + /* libpng comments (here to explain what follows). * * this function is called for every row in the image. If the @@ -242,15 +319,23 @@ * may make your life easier. */ - // Nothing to do if the row is unchanged, or the row is outside - // the image bounds: libpng may send extra rows, ignore them to - // make our lives easier. + // Nothing to do if the row is unchanged, or the row is outside the image + // bounds. In the case that a frame presents more data than the indicated + // frame size, ignore the extra rows and use the frame size as the source + // of truth. libpng can send extra rows: ignore them too, this to prevent + // memory writes outside of the image bounds (security). if (!rowBuffer) return; - int y = rowIndex; - if (y < 0 || y >= size().height()) + + DCHECK_GT(frameRect.height(), 0); + if (rowIndex >= static_cast<unsigned>(frameRect.height())) return; + int y = rowIndex + frameRect.y(); + if (y < 0) + return; + DCHECK_LT(y, size().height()); + /* libpng comments (continued). * * For the non-NULL rows of interlaced images, you must call @@ -270,7 +355,7 @@ * old row and the new row. */ - bool hasAlpha = m_reader->hasAlpha(); + bool hasAlpha = m_hasAlphaChannel; png_bytep row = rowBuffer; if (png_bytep interlaceBuffer = m_reader->interlaceBuffer()) { @@ -281,8 +366,8 @@ // Write the decoded row pixels to the frame buffer. The repetitive // form of the row write loops is for speed. - ImageFrame::PixelData* const dstRow = buffer.getAddr(0, y); - int width = size().width(); + ImageFrame::PixelData* const dstRow = buffer.getAddr(frameRect.x(), y); + int width = frameRect.width(); png_bytep srcPtr = row; if (hasAlpha) { @@ -305,23 +390,47 @@ } unsigned alphaMask = 255; - if (buffer.premultiplyAlpha()) { - for (auto *dstPixel = dstRow; dstPixel < dstRow + width; - srcPtr += 4, ++dstPixel) { - buffer.setRGBAPremultiply(dstPixel, srcPtr[0], srcPtr[1], srcPtr[2], - srcPtr[3]); - alphaMask &= srcPtr[3]; + if (m_frameBufferCache[m_currentFrame].getAlphaBlendSource() == + ImageFrame::BlendAtopBgcolor) { + if (buffer.premultiplyAlpha()) { + for (auto *dstPixel = dstRow; dstPixel < dstRow + width; + dstPixel++, srcPtr += 4) { + buffer.setRGBAPremultiply(dstPixel, srcPtr[0], srcPtr[1], srcPtr[2], + srcPtr[3]); + alphaMask &= srcPtr[3]; + } + } else { + for (auto *dstPixel = dstRow; dstPixel < dstRow + width; + dstPixel++, srcPtr += 4) { + buffer.setRGBARaw(dstPixel, srcPtr[0], srcPtr[1], srcPtr[2], + srcPtr[3]); + alphaMask &= srcPtr[3]; + } } } else { - for (auto *dstPixel = dstRow; dstPixel < dstRow + width; - srcPtr += 4, ++dstPixel) { - buffer.setRGBARaw(dstPixel, srcPtr[0], srcPtr[1], srcPtr[2], srcPtr[3]); - alphaMask &= srcPtr[3]; + // Now, the blend method is ImageFrame::BlendAtopPreviousFrame. Since the + // frame data of the previous frame is copied at initFrameBuffer, we can + // blend the pixel of this frame, stored in |srcPtr|, over the previous + // pixel stored in |dstPixel|. + if (buffer.premultiplyAlpha()) { + for (auto *dstPixel = dstRow; dstPixel < dstRow + width; + dstPixel++, srcPtr += 4) { + buffer.blendRGBAPremultiplied(dstPixel, srcPtr[0], srcPtr[1], + srcPtr[2], srcPtr[3]); + alphaMask &= srcPtr[3]; + } + } else { + for (auto *dstPixel = dstRow; dstPixel < dstRow + width; + dstPixel++, srcPtr += 4) { + buffer.blendRGBARaw(dstPixel, srcPtr[0], srcPtr[1], srcPtr[2], + srcPtr[3]); + alphaMask &= srcPtr[3]; + } } } - if (alphaMask != 255 && !buffer.hasAlpha()) - buffer.setHasAlpha(true); + if (alphaMask != 255) + m_currentBufferSawAlpha = true; } else { for (auto *dstPixel = dstRow; dstPixel < dstRow + width; @@ -341,32 +450,44 @@ buffer.setPixelsChanged(true); } -void PNGImageDecoder::complete() { - if (m_frameBufferCache.isEmpty()) +void PNGImageDecoder::frameComplete() { + if (m_currentFrame >= m_frameBufferCache.size()) return; - m_frameBufferCache[0].setStatus(ImageFrame::FrameComplete); -} + if (m_reader->interlaceBuffer()) + m_reader->clearInterlaceBuffer(); -inline bool isComplete(const PNGImageDecoder* decoder) { - return decoder->frameIsCompleteAtIndex(0); -} - -void PNGImageDecoder::decode(bool onlySize) { - if (failed()) + ImageFrame& buffer = m_frameBufferCache[m_currentFrame]; + if (buffer.getStatus() == ImageFrame::FrameEmpty) { + longjmp(JMPBUF(m_reader->pngPtr()), 1); return; + } - if (!m_reader) - m_reader = WTF::makeUnique<PNGImageReader>(this, m_offset); + if (!m_currentBufferSawAlpha) + correctAlphaWhenFrameBufferSawNoAlpha(m_currentFrame); - // If we couldn't decode the image but have received all the data, decoding - // has failed. - if (!m_reader->decode(*m_data, onlySize) && isAllDataReceived()) - setFailed(); + buffer.setStatus(ImageFrame::FrameComplete); +} - // If decoding is done or failed, we don't need the PNGImageReader anymore. - if (isComplete(this) || failed()) - m_reader.reset(); +bool PNGImageDecoder::frameIsCompleteAtIndex(size_t index) const { + if (!isDecodedSizeAvailable()) + return false; + + DCHECK(!failed() && m_reader); + + // For non-animated images, return whether the status of the frame is + // ImageFrame::FrameComplete with ImageDecoder::frameIsCompleteAtIndex. + // This matches the behavior of WEBPImageDecoder. + if (m_reader->parseCompleted() && m_reader->frameCount() == 1) + return ImageDecoder::frameIsCompleteAtIndex(index); + + return m_reader->frameIsReceivedAtIndex(index); +} + +float PNGImageDecoder::frameDurationAtIndex(size_t index) const { + if (index < m_frameBufferCache.size()) + return m_frameBufferCache[index].duration(); + return 0; } } // namespace blink
diff --git a/third_party/WebKit/Source/platform/image-decoders/png/PNGImageDecoder.h b/third_party/WebKit/Source/platform/image-decoders/png/PNGImageDecoder.h index a2e3d681..c31b8411 100644 --- a/third_party/WebKit/Source/platform/image-decoders/png/PNGImageDecoder.h +++ b/third_party/WebKit/Source/platform/image-decoders/png/PNGImageDecoder.h
@@ -26,13 +26,12 @@ #ifndef PNGImageDecoder_h #define PNGImageDecoder_h -#include "platform/image-decoders/ImageDecoder.h" #include <memory> +#include "platform/image-decoders/ImageDecoder.h" +#include "platform/image-decoders/png/PNGImageReader.h" namespace blink { -class PNGImageReader; - class PLATFORM_EXPORT PNGImageDecoder final : public ImageDecoder { WTF_MAKE_NONCOPYABLE(PNGImageDecoder); @@ -45,24 +44,36 @@ // ImageDecoder: String filenameExtension() const override { return "png"; } + int repetitionCount() const override; + bool frameIsCompleteAtIndex(size_t) const override; + float frameDurationAtIndex(size_t) const override; + bool setFailed() override; // Callbacks from libpng void headerAvailable(); void rowAvailable(unsigned char* row, unsigned rowIndex, int); - void complete(); + void frameComplete(); + + void setRepetitionCount(int); private: - // ImageDecoder: - void decodeSize() override { decode(true); } - void decode(size_t) override { decode(false); } + using ParseQuery = PNGImageReader::ParseQuery; - // Decodes the image. If |onlySize| is true, stops decoding after - // calculating the image size. If decoding fails but there is no more - // data coming, sets the "decode failure" flag. - void decode(bool onlySize); + // ImageDecoder: + void decodeSize() override { parse(ParseQuery::Size); } + void decode(size_t) override; + void parse(ParseQuery); + size_t decodeFrameCount() override; + void initializeNewFrame(size_t) override; + void clearFrameBuffer(size_t) override; + bool canReusePreviousFrameBuffer(size_t) const override; std::unique_ptr<PNGImageReader> m_reader; const unsigned m_offset; + size_t m_currentFrame; + int m_repetitionCount; + bool m_hasAlphaChannel; + bool m_currentBufferSawAlpha; }; } // namespace blink
diff --git a/third_party/WebKit/Source/platform/image-decoders/png/PNGImageDecoderTest.cpp b/third_party/WebKit/Source/platform/image-decoders/png/PNGImageDecoderTest.cpp index 5281c1ba..e84ddb6a 100644 --- a/third_party/WebKit/Source/platform/image-decoders/png/PNGImageDecoderTest.cpp +++ b/third_party/WebKit/Source/platform/image-decoders/png/PNGImageDecoderTest.cpp
@@ -4,9 +4,28 @@ #include "platform/image-decoders/png/PNGImageDecoder.h" -#include "platform/image-decoders/ImageDecoderTestHelpers.h" -#include "testing/gtest/include/gtest/gtest.h" #include <memory> +#include "platform/image-decoders/ImageDecoderTestHelpers.h" +#include "png.h" +#include "testing/gtest/include/gtest/gtest.h" + +// /LayoutTests/images/resources/png-animated-idat-part-of-animation.png +// is modified in multiple tests to simulate erroneous PNGs. As a reference, +// the table below shows how the file is structured. +// +// Offset | 8 33 95 133 172 210 241 279 314 352 422 +// ------------------------------------------------------------------------- +// Chunk | IHDR acTL fcTL IDAT fcTL fdAT fcTL fdAT fcTL fdAT IEND +// +// In between the acTL and fcTL there are two other chunks, PLTE and tRNS, but +// those are not specifically used in this test suite. The same holds for a +// tEXT chunk in between the last fdAT and IEND. +// +// In the current behavior of PNG image decoders, the 4 frames are detected when +// respectively 141, 249, 322 and 430 bytes are received. The first frame should +// be detected when the IDAT has been received, and non-first frames when the +// next fcTL or IEND chunk has been received. Note that all offsets are +8, +// because a chunk is identified by byte 4-7. namespace blink { @@ -37,21 +56,170 @@ EXPECT_EQ(expectedSize, decoder->size()); } +// Test whether querying for the size of the image works if we present the +// data byte by byte. +void testSizeByteByByte(const char* pngFile, + size_t bytesNeededToDecodeSize, + IntSize expectedSize) { + auto decoder = createDecoder(); + auto data = readFile(pngFile); + ASSERT_FALSE(data->isEmpty()); + ASSERT_LT(bytesNeededToDecodeSize, data->size()); + + const char* source = data->data(); + RefPtr<SharedBuffer> partialData = SharedBuffer::create(); + for (size_t length = 1; length <= bytesNeededToDecodeSize; length++) { + partialData->append(source++, 1u); + decoder->setData(partialData.get(), false); + + if (length < bytesNeededToDecodeSize) { + EXPECT_FALSE(decoder->isSizeAvailable()); + EXPECT_TRUE(decoder->size().isEmpty()); + EXPECT_FALSE(decoder->failed()); + } else { + EXPECT_TRUE(decoder->isSizeAvailable()); + EXPECT_EQ(expectedSize, decoder->size()); + } + } + EXPECT_FALSE(decoder->failed()); +} + +void writeUint32(uint32_t val, png_byte* data) { + data[0] = val >> 24; + data[1] = val >> 16; + data[2] = val >> 8; + data[3] = val; +} + void testRepetitionCount(const char* pngFile, int expectedRepetitionCount) { auto decoder = createDecoderWithPngData(pngFile); - // Decoding the frame count sets the repetition count as well. + // Decoding the frame count sets the number of repetitions as well. decoder->frameCount(); EXPECT_FALSE(decoder->failed()); EXPECT_EQ(expectedRepetitionCount, decoder->repetitionCount()); } +struct PublicFrameInfo { + size_t duration; + IntRect frameRect; + ImageFrame::AlphaBlendSource alphaBlend; + ImageFrame::DisposalMethod disposalMethod; +}; + +// This is the frame data for the following PNG image: +// /LayoutTests/images/resources/png-animated-idat-part-of-animation.png +static PublicFrameInfo pngAnimatedFrameInfo[] = { + {500, + {IntPoint(0, 0), IntSize(5, 5)}, + ImageFrame::BlendAtopBgcolor, + ImageFrame::DisposeKeep}, + {900, + {IntPoint(1, 1), IntSize(3, 1)}, + ImageFrame::BlendAtopBgcolor, + ImageFrame::DisposeOverwriteBgcolor}, + {2000, + {IntPoint(1, 2), IntSize(3, 2)}, + ImageFrame::BlendAtopPreviousFrame, + ImageFrame::DisposeKeep}, + {1500, + {IntPoint(1, 2), IntSize(3, 1)}, + ImageFrame::BlendAtopBgcolor, + ImageFrame::DisposeKeep}, +}; + +void compareFrameWithExpectation(const PublicFrameInfo& expected, + ImageDecoder* decoder, + size_t index) { + EXPECT_EQ(expected.duration, decoder->frameDurationAtIndex(index)); + + const auto* frame = decoder->frameBufferAtIndex(index); + ASSERT_TRUE(frame); + + EXPECT_EQ(expected.duration, frame->duration()); + EXPECT_EQ(expected.frameRect, frame->originalFrameRect()); + EXPECT_EQ(expected.disposalMethod, frame->getDisposalMethod()); + EXPECT_EQ(expected.alphaBlend, frame->getAlphaBlendSource()); +} + +// This function removes |length| bytes at |offset|, and then calls frameCount. +// It assumes the missing bytes should result in a failed decode because the +// parser jumps |length| bytes too far in the next chunk. +void testMissingDataBreaksDecoding(const char* pngFile, + size_t offset, + size_t length) { + auto decoder = createDecoder(); + auto data = readFile(pngFile); + ASSERT_FALSE(data->isEmpty()); + + RefPtr<SharedBuffer> invalidData = SharedBuffer::create(data->data(), offset); + invalidData->append(data->data() + offset + length, + data->size() - offset - length); + ASSERT_EQ(data->size() - length, invalidData->size()); + + decoder->setData(invalidData, true); + decoder->frameCount(); + EXPECT_TRUE(decoder->failed()); +} + +// Verify that a decoder with a parse error converts to a static image. +static void expectStatic(ImageDecoder* decoder) { + EXPECT_EQ(1u, decoder->frameCount()); + EXPECT_FALSE(decoder->failed()); + + ImageFrame* frame = decoder->frameBufferAtIndex(0); + ASSERT_NE(nullptr, frame); + EXPECT_EQ(ImageFrame::FrameComplete, frame->getStatus()); + EXPECT_FALSE(decoder->failed()); + EXPECT_EQ(cAnimationNone, decoder->repetitionCount()); +} + +// Decode up to the indicated fcTL offset and then provide an fcTL with the +// wrong chunk size (20 instead of 26). +void testInvalidFctlSize(const char* pngFile, + size_t offsetFctl, + size_t expectedFrameCount, + bool shouldFail) { + auto data = readFile(pngFile); + ASSERT_FALSE(data->isEmpty()); + + auto decoder = createDecoder(); + RefPtr<SharedBuffer> invalidData = + SharedBuffer::create(data->data(), offsetFctl); + + // Test if this gives the correct frame count, before the fcTL is parsed. + decoder->setData(invalidData, false); + EXPECT_EQ(expectedFrameCount, decoder->frameCount()); + ASSERT_FALSE(decoder->failed()); + + // Append the wrong size to the data stream + png_byte sizeChunk[4]; + writeUint32(20, sizeChunk); + invalidData->append(reinterpret_cast<char*>(sizeChunk), 4u); + + // Skip the size in the original data, but provide a truncated fcTL, + // which is 4B of tag, 20B of data and 4B of CRC, totalling 28B. + invalidData->append(data->data() + offsetFctl + 4, 28u); + // Append the rest of the data + const size_t offsetPostFctl = offsetFctl + 38; + invalidData->append(data->data() + offsetPostFctl, + data->size() - offsetPostFctl); + + decoder->setData(invalidData, false); + if (shouldFail) { + EXPECT_EQ(expectedFrameCount, decoder->frameCount()); + EXPECT_EQ(true, decoder->failed()); + } else { + expectStatic(decoder.get()); + } +} + // Verify that the decoder can successfully decode the first frame when // initially only half of the frame data is received, resulting in a partially // decoded image, and then the rest of the image data is received. Verify that // the bitmap hashes of the two stages are different. Also verify that the final // bitmap hash is equivalent to the hash when all data is provided at once. // -// This verifies that decoder correctly keeps track of where it stopped +// This verifies that the decoder correctly keeps track of where it stopped // decoding when the image was not yet fully received. void testProgressiveDecodingContinuesAfterFullData(const char* pngFile, size_t offsetMidFirstFrame) { @@ -60,7 +228,7 @@ auto decoderUpfront = createDecoder(); decoderUpfront->setData(fullData.get(), true); - EXPECT_GE(1u, decoderUpfront->frameCount()); + EXPECT_GE(decoderUpfront->frameCount(), 1u); const ImageFrame* const frameUpfront = decoderUpfront->frameBufferAtIndex(0); ASSERT_EQ(ImageFrame::FrameComplete, frameUpfront->getStatus()); const unsigned hashUpfront = hashBitmap(frameUpfront->bitmap()); @@ -86,16 +254,11 @@ } // Modify the frame data bytes for frame |frameIndex| so that decoding fails. -// Parsing should work fine, and is checked with |expectedFrameCountBefore|. If -// the failure should invalidate the decoder, |expectFailure| should be set to -// true. If not, |expectedFrameCountAfter| should indicate the new frame count -// after the failure. +// Parsing should work fine, and is checked with |expectedFrameCount|. void testFailureDuringDecode(const char* file, size_t idatOffset, size_t frameIndex, - bool expectFailure, - size_t expectedFrameCountBefore, - size_t expectedFrameCountAfter = 0u) { + size_t expectedFrameCount) { RefPtr<SharedBuffer> fullData = readFile(file); ASSERT_FALSE(fullData->isEmpty()); @@ -112,18 +275,664 @@ auto decoder = createDecoder(); decoder->setData(data.get(), true); - EXPECT_EQ(expectedFrameCountBefore, decoder->frameCount()); + EXPECT_EQ(expectedFrameCount, decoder->frameCount()); - const ImageFrame* const frame = decoder->frameBufferAtIndex(frameIndex); - EXPECT_EQ(expectFailure, decoder->failed()); - if (!expectFailure) { - EXPECT_EQ(expectedFrameCountAfter, decoder->frameCount()); - EXPECT_EQ(ImageFrame::FrameEmpty, frame->getStatus()); - } + decoder->frameBufferAtIndex(frameIndex); + ASSERT_EQ(true, decoder->failed()); + + EXPECT_EQ(expectedFrameCount, decoder->frameCount()); } } // Anonymous namespace +// Animated PNG Tests + +TEST(AnimatedPNGTests, sizeTest) { + testSize( + "/LayoutTests/images/resources/" + "png-animated-idat-part-of-animation.png", + IntSize(5, 5)); + testSize( + "/LayoutTests/images/resources/" + "png-animated-idat-not-part-of-animation.png", + IntSize(227, 35)); +} + +TEST(AnimatedPNGTests, repetitionCountTest) { + testRepetitionCount( + "/LayoutTests/images/resources/" + "png-animated-idat-part-of-animation.png", + 6u); + // This is an "animated" image with only one frame, that is, the IDAT is + // ignored and there is one fdAT frame. so it should be considered + // non-animated. + testRepetitionCount( + "/LayoutTests/images/resources/" + "png-animated-idat-not-part-of-animation.png", + cAnimationNone); +} + +// Test if the decoded metdata corresponds to the defined expectations +TEST(AnimatedPNGTests, MetaDataTest) { + const char* pngFile = + "/LayoutTests/images/resources/" + "png-animated-idat-part-of-animation.png"; + constexpr size_t expectedFrameCount = 4; + + auto decoder = createDecoderWithPngData(pngFile); + ASSERT_EQ(expectedFrameCount, decoder->frameCount()); + for (size_t i = 0; i < expectedFrameCount; i++) { + compareFrameWithExpectation(pngAnimatedFrameInfo[i], decoder.get(), i); + } +} + +TEST(AnimatedPNGTests, EmptyFrame) { + const char* pngFile = "/LayoutTests/images/resources/empty-frame.png"; + auto decoder = createDecoderWithPngData(pngFile); + // Frame 0 is empty. Ensure that decoding frame 1 (which depends on frame 0) + // fails (rather than crashing). + EXPECT_EQ(2u, decoder->frameCount()); + EXPECT_FALSE(decoder->failed()); + + ImageFrame* frame = decoder->frameBufferAtIndex(1); + EXPECT_TRUE(decoder->failed()); + ASSERT_NE(nullptr, frame); + EXPECT_EQ(ImageFrame::FrameEmpty, frame->getStatus()); +} + +TEST(AnimatedPNGTests, ByteByByteSizeAvailable) { + testSizeByteByByte( + "/LayoutTests/images/resources/" + "png-animated-idat-part-of-animation.png", + 141u, IntSize(5, 5)); + testSizeByteByByte( + "/LayoutTests/images/resources/" + "png-animated-idat-not-part-of-animation.png", + 79u, IntSize(227, 35)); +} + +TEST(AnimatedPNGTests, ByteByByteMetaData) { + const char* pngFile = + "/LayoutTests/images/resources/" + "png-animated-idat-part-of-animation.png"; + constexpr size_t expectedFrameCount = 4; + + // These are the byte offsets where each frame should have been parsed. + // It boils down to the offset of the first fcTL / IEND after the last + // frame data chunk, plus 8 bytes for recognition. The exception on this is + // the first frame, which is reported when its first framedata is seen. + size_t frameOffsets[expectedFrameCount] = {141, 249, 322, 430}; + + auto decoder = createDecoder(); + auto data = readFile(pngFile); + ASSERT_FALSE(data->isEmpty()); + size_t framesParsed = 0; + + const char* source = data->data(); + RefPtr<SharedBuffer> partialData = SharedBuffer::create(); + for (size_t length = 1; length <= frameOffsets[expectedFrameCount - 1]; + length++) { + partialData->append(source++, 1u); + decoder->setData(partialData.get(), false); + EXPECT_FALSE(decoder->failed()); + if (length < frameOffsets[framesParsed]) { + EXPECT_EQ(framesParsed, decoder->frameCount()); + } else { + ASSERT_EQ(framesParsed + 1, decoder->frameCount()); + compareFrameWithExpectation(pngAnimatedFrameInfo[framesParsed], + decoder.get(), framesParsed); + framesParsed++; + } + } + EXPECT_EQ(expectedFrameCount, decoder->frameCount()); + EXPECT_FALSE(decoder->failed()); +} + +TEST(AnimatedPNGTests, TestRandomFrameDecode) { + testRandomFrameDecode(&createDecoder, + "/LayoutTests/images/resources/" + "png-animated-idat-part-of-animation.png", + 2u); +} + +TEST(AnimatedPNGTests, TestDecodeAfterReallocation) { + testDecodeAfterReallocatingData(&createDecoder, + "/LayoutTests/images/resources/" + "png-animated-idat-part-of-animation.png"); +} + +TEST(AnimatedPNGTests, ProgressiveDecode) { + testProgressiveDecoding(&createDecoder, + "/LayoutTests/images/resources/" + "png-animated-idat-part-of-animation.png", + 13u); +} + +TEST(AnimatedPNGTests, ParseAndDecodeByteByByte) { + testByteByByteDecode(&createDecoder, + "/LayoutTests/images/resources/" + "png-animated-idat-part-of-animation.png", + 4u, 6u); +} + +TEST(AnimatedPNGTests, FailureDuringParsing) { + // Test the first fcTL in the stream. Because no frame data has been set at + // this point, the expected frame count is zero. 95 bytes is just before the + // first fcTL chunk, at which the first frame is detected. This is before the + // IDAT, so it should be treated as a static image. + testInvalidFctlSize( + "/LayoutTests/images/resources/" + "png-animated-idat-part-of-animation.png", + 95u, 0u, false); + + // Test for the third fcTL in the stream. This should see 1 frame before the + // fcTL, and then fail when parsing it. + testInvalidFctlSize( + "/LayoutTests/images/resources/" + "png-animated-idat-part-of-animation.png", + 241u, 1u, true); +} + +TEST(AnimatedPNGTests, ActlErrors) { + const char* pngFile = + "/LayoutTests/images/resources/" + "png-animated-idat-part-of-animation.png"; + auto data = readFile(pngFile); + ASSERT_FALSE(data->isEmpty()); + + const size_t offsetActl = 33u; + const size_t acTLSize = 20u; + { + // Remove the acTL chunk from the stream. This results in a static image. + RefPtr<SharedBuffer> noActlData = + SharedBuffer::create(data->data(), offsetActl); + noActlData->append(data->data() + offsetActl + acTLSize, + data->size() - offsetActl - acTLSize); + + auto decoder = createDecoder(); + decoder->setData(noActlData, true); + EXPECT_EQ(1u, decoder->frameCount()); + EXPECT_FALSE(decoder->failed()); + EXPECT_EQ(cAnimationNone, decoder->repetitionCount()); + } + + // Store the acTL for more tests. + char acTL[acTLSize]; + memcpy(acTL, data->data() + offsetActl, acTLSize); + + // Insert an extra acTL at a couple of different offsets. + // Prior to the IDAT, this should result in a static image. After, this + // should fail. + const struct { + size_t offset; + bool shouldFail; + } gRecs[] = {{8u, false}, + {offsetActl, false}, + {133u, false}, + {172u, true}, + {422u, true}}; + for (const auto& rec : gRecs) { + const size_t offset = rec.offset; + RefPtr<SharedBuffer> extraActlData = + SharedBuffer::create(data->data(), offset); + extraActlData->append(acTL, acTLSize); + extraActlData->append(data->data() + offset, data->size() - offset); + auto decoder = createDecoder(); + decoder->setData(extraActlData, true); + EXPECT_EQ(rec.shouldFail ? 0u : 1u, decoder->frameCount()); + EXPECT_EQ(rec.shouldFail, decoder->failed()); + } + + // An acTL after IDAT is ignored. + pngFile = + "/LayoutTests/images/resources/" + "cHRM_color_spin.png"; + { + auto data2 = readFile(pngFile); + ASSERT_FALSE(data2->isEmpty()); + const size_t postIDATOffset = 30971u; + for (size_t times = 0; times < 2; times++) { + RefPtr<SharedBuffer> extraActlData = + SharedBuffer::create(data2->data(), postIDATOffset); + for (size_t i = 0; i < times; i++) + extraActlData->append(acTL, acTLSize); + extraActlData->append(data2->data() + postIDATOffset, + data2->size() - postIDATOffset); + + auto decoder = createDecoder(); + decoder->setData(extraActlData, true); + EXPECT_EQ(1u, decoder->frameCount()); + EXPECT_FALSE(decoder->failed()); + EXPECT_EQ(cAnimationNone, decoder->repetitionCount()); + EXPECT_NE(nullptr, decoder->frameBufferAtIndex(0)); + EXPECT_FALSE(decoder->failed()); + } + } +} + +TEST(AnimatedPNGTests, fdatBeforeIdat) { + const char* pngFile = + "/LayoutTests/images/resources/" + "png-animated-idat-not-part-of-animation.png"; + auto data = readFile(pngFile); + ASSERT_FALSE(data->isEmpty()); + + // Insert fcTL and fdAT prior to the IDAT + const size_t idatOffset = 71u; + RefPtr<SharedBuffer> modifiedData = + SharedBuffer::create(data->data(), idatOffset); + // Copy fcTL and fdAT + const size_t fctlPlusFdatSize = 38u + 1566u; + modifiedData->append(data->data() + 2519u, fctlPlusFdatSize); + // Copy IDAT + modifiedData->append(data->data() + idatOffset, 2448u); + // Copy the remaining + modifiedData->append(data->data() + 4123u, 39u + 12u); + // Data has just been rearranged. + ASSERT_EQ(data->size(), modifiedData->size()); + + { + // This broken APNG will be treated as a static png. + auto decoder = createDecoder(); + decoder->setData(modifiedData.get(), true); + expectStatic(decoder.get()); + } + + { + // Remove the acTL from the modified image. It now has fdAT before + // IDAT, but no acTL, so fdAT should be ignored. + const size_t offsetActl = 33u; + const size_t acTLSize = 20u; + RefPtr<SharedBuffer> modifiedData2 = + SharedBuffer::create(modifiedData->data(), offsetActl); + modifiedData2->append(modifiedData->data() + offsetActl + acTLSize, + modifiedData->size() - offsetActl - acTLSize); + auto decoder = createDecoder(); + decoder->setData(modifiedData2.get(), true); + expectStatic(decoder.get()); + + // Likewise, if an acTL follows the fdAT, it is ignored. + const size_t insertionOffset = idatOffset + fctlPlusFdatSize - acTLSize; + RefPtr<SharedBuffer> modifiedData3 = + SharedBuffer::create(modifiedData2->data(), insertionOffset); + modifiedData3->append(data->data() + offsetActl, acTLSize); + modifiedData3->append(modifiedData2->data() + insertionOffset, + modifiedData2->size() - insertionOffset); + decoder = createDecoder(); + decoder->setData(modifiedData3.get(), true); + expectStatic(decoder.get()); + } +} + +TEST(AnimatedPNGTests, IdatSizeMismatch) { + // The default image must fill the image + const char* pngFile = + "/LayoutTests/images/resources/" + "png-animated-idat-part-of-animation.png"; + auto data = readFile(pngFile); + ASSERT_FALSE(data->isEmpty()); + + const size_t fctlOffset = 95u; + RefPtr<SharedBuffer> modifiedData = + SharedBuffer::create(data->data(), fctlOffset); + const size_t fctlSize = 38u; + png_byte fctl[fctlSize]; + memcpy(fctl, data->data() + fctlOffset, fctlSize); + // Set the height to a smaller value, so it does not fill the image. + writeUint32(3, fctl + 16); + // Correct the crc + writeUint32(3210324191, fctl + 34); + modifiedData->append((const char*)fctl, fctlSize); + const size_t afterFctl = fctlOffset + fctlSize; + modifiedData->append(data->data() + afterFctl, data->size() - afterFctl); + + auto decoder = createDecoder(); + decoder->setData(modifiedData.get(), true); + expectStatic(decoder.get()); +} + +// Originally, the third frame has an offset of (1,2) and a size of (3,2). By +// changing the offset to (4,4), the frame rect is no longer within the image +// size of 5x5. This results in a failure. +TEST(AnimatedPNGTests, VerifyFrameOutsideImageSizeFails) { + const char* pngFile = + "/LayoutTests/images/resources/" + "png-animated-idat-part-of-animation.png"; + auto data = readFile(pngFile); + auto decoder = createDecoder(); + ASSERT_FALSE(data->isEmpty()); + + const size_t offsetThirdFctl = 241; + RefPtr<SharedBuffer> modifiedData = + SharedBuffer::create(data->data(), offsetThirdFctl); + const size_t fctlSize = 38u; + png_byte fctl[fctlSize]; + memcpy(fctl, data->data() + offsetThirdFctl, fctlSize); + // Modify offset and crc. + writeUint32(4, fctl + 20u); + writeUint32(4, fctl + 24u); + writeUint32(3700322018, fctl + 34u); + + modifiedData->append(const_cast<const char*>(reinterpret_cast<char*>(fctl)), + fctlSize); + modifiedData->append(data->data() + offsetThirdFctl + fctlSize, + data->size() - offsetThirdFctl - fctlSize); + + decoder->setData(modifiedData, true); + + IntSize expectedSize(5, 5); + EXPECT_TRUE(decoder->isSizeAvailable()); + EXPECT_EQ(expectedSize, decoder->size()); + + const size_t expectedFrameCount = 0; + EXPECT_EQ(expectedFrameCount, decoder->frameCount()); + EXPECT_TRUE(decoder->failed()); +} + +TEST(AnimatedPNGTests, ProgressiveDecodingContinuesAfterFullData) { + // 160u is a randomly chosen offset in the IDAT chunk of the first frame. + testProgressiveDecodingContinuesAfterFullData( + "/LayoutTests/images/resources/" + "png-animated-idat-part-of-animation.png", + 160u); +} + +TEST(AnimatedPNGTests, RandomDecodeAfterClearFrameBufferCache) { + testRandomDecodeAfterClearFrameBufferCache( + &createDecoder, + "/LayoutTests/images/resources/" + "png-animated-idat-part-of-animation.png", + 2u); +} + +TEST(AnimatedPNGTests, VerifyAlphaBlending) { + testAlphaBlending(&createDecoder, + "/LayoutTests/images/resources/" + "png-animated-idat-part-of-animation.png"); +} + +// This tests if the frame count gets set correctly when parsing frameCount +// fails in one of the parsing queries. +// +// First, enough data is provided such that two frames should be registered. +// The decoder should at this point not be in the failed status. +// +// Then, we provide the rest of the data except for the last IEND chunk, but +// tell the decoder that this is all the data we have. The frame count should +// be three, since one extra frame should be discovered. The fourth frame +// should *not* be registered since the reader should not be able to determine +// where the frame ends. The decoder should *not* be in the failed state since +// there are three frames which can be shown. +// Attempting to decode the third frame should fail, since the file is +// truncated. +TEST(AnimatedPNGTests, FailureMissingIendChunk) { + RefPtr<SharedBuffer> fullData = readFile( + "/LayoutTests/images/resources/" + "png-animated-idat-part-of-animation.png"); + ASSERT_FALSE(fullData->isEmpty()); + auto decoder = createDecoder(); + + const size_t offsetTwoFrames = 249; + const size_t expectedFramesAfter249Bytes = 2; + RefPtr<SharedBuffer> tempData = + SharedBuffer::create(fullData->data(), offsetTwoFrames); + decoder->setData(tempData.get(), false); + EXPECT_EQ(expectedFramesAfter249Bytes, decoder->frameCount()); + EXPECT_FALSE(decoder->failed()); + + // Provide the rest of the data except for the last IEND chunk. + const size_t expectedFramesAfterAllExcept12Bytes = 3; + tempData = SharedBuffer::create(fullData->data(), fullData->size() - 12); + decoder->setData(tempData.get(), true); + ASSERT_EQ(expectedFramesAfterAllExcept12Bytes, decoder->frameCount()); + + for (size_t i = 0; i < expectedFramesAfterAllExcept12Bytes; i++) { + EXPECT_FALSE(decoder->failed()); + decoder->frameBufferAtIndex(i); + } + + EXPECT_TRUE(decoder->failed()); +} + +TEST(AnimatedPNGTests, FailureDuringDecodingInvalidatesDecoder) { + testFailureDuringDecode( + "/LayoutTests/images/resources/" + "png-animated-idat-part-of-animation.png", + 291u, // fdat offset for frame index 2, plus 12 to move past sequence + // number. + 2u, // try to decode frame index 2 + 4u); // expected frame count before failure + + testFailureDuringDecode( + "/LayoutTests/images/resources/" + "png-animated-idat-part-of-animation.png", + 133u, // idat offset for frame index 0 + 0u, // try to decode frame index 0 + 4u); // expected frame count before failure +} + +// Verify that a malformatted PNG, where the IEND appears before any frame data +// (IDAT), invalidates the decoder. +TEST(AnimatedPNGTests, VerifyIENDBeforeIDATInvalidatesDecoder) { + RefPtr<SharedBuffer> fullData = readFile( + "/LayoutTests/images/resources/" + "png-animated-idat-part-of-animation.png"); + ASSERT_FALSE(fullData->isEmpty()); + auto decoder = createDecoder(); + + const size_t offsetIDAT = 133; + RefPtr<SharedBuffer> data = + SharedBuffer::create(fullData->data(), offsetIDAT); + data->append(fullData->data() + fullData->size() - 12u, 12u); + data->append(fullData->data() + offsetIDAT, fullData->size() - offsetIDAT); + decoder->setData(data.get(), true); + + const size_t expectedFrameCount = 0u; + EXPECT_EQ(expectedFrameCount, decoder->frameCount()); + EXPECT_TRUE(decoder->failed()); +} + +// All IDAT chunks must be before all fdAT chunks +TEST(AnimatedPNGTests, MixedDataChunks) { + const char* pngFile = + "/LayoutTests/images/resources/" + "png-animated-idat-part-of-animation.png"; + RefPtr<SharedBuffer> fullData = readFile(pngFile); + ASSERT_FALSE(fullData->isEmpty()); + + // Add an extra fdAT after the first IDAT, skipping fcTL. + const size_t postIDAT = 172u; + RefPtr<SharedBuffer> data = SharedBuffer::create(fullData->data(), postIDAT); + const size_t fcTLSize = 38u; + const size_t fdATSize = 31u; + png_byte fdAT[fdATSize]; + memcpy(fdAT, fullData->data() + postIDAT + fcTLSize, fdATSize); + // Modify the sequence number + writeUint32(1u, fdAT + 8); + data->append((const char*)fdAT, fdATSize); + const size_t IENDOffset = 422u; + data->append(fullData->data() + IENDOffset, fullData->size() - IENDOffset); + auto decoder = createDecoder(); + decoder->setData(data.get(), true); + decoder->frameCount(); + EXPECT_TRUE(decoder->failed()); + + // Insert an IDAT after an fdAT. + const size_t postfdAT = postIDAT + fcTLSize + fdATSize; + data = SharedBuffer::create(fullData->data(), postfdAT); + const size_t IDATOffset = 133u; + data->append(fullData->data() + IDATOffset, postIDAT - IDATOffset); + // Append the rest. + data->append(fullData->data() + postIDAT, fullData->size() - postIDAT); + decoder = createDecoder(); + decoder->setData(data.get(), true); + decoder->frameCount(); + EXPECT_TRUE(decoder->failed()); +} + +// Verify that erroneous values for the disposal method and alpha blending +// cause the decoder to fail. +TEST(AnimatedPNGTests, VerifyInvalidDisposalAndBlending) { + const char* pngFile = + "/LayoutTests/images/resources/" + "png-animated-idat-part-of-animation.png"; + RefPtr<SharedBuffer> fullData = readFile(pngFile); + ASSERT_FALSE(fullData->isEmpty()); + auto decoder = createDecoder(); + + // The disposal byte in the frame control chunk is the 24th byte, alpha + // blending the 25th. |offsetDisposalOp| is 241 bytes to get to the third + // fctl chunk, 8 bytes to skip the length and tag bytes, and 24 bytes to get + // to the disposal op. + // + // Write invalid values to the disposal and alpha blending byte, correct the + // crc and append the rest of the buffer. + const size_t offsetDisposalOp = 241 + 8 + 24; + RefPtr<SharedBuffer> data = + SharedBuffer::create(fullData->data(), offsetDisposalOp); + png_byte disposalAndBlending[6u]; + disposalAndBlending[0] = 7; + disposalAndBlending[1] = 9; + writeUint32(2408835439u, disposalAndBlending + 2u); + data->append(reinterpret_cast<char*>(disposalAndBlending), 6u); + data->append(fullData->data() + offsetDisposalOp + 6u, + fullData->size() - offsetDisposalOp - 6u); + + decoder->setData(data.get(), true); + decoder->frameCount(); + ASSERT_TRUE(decoder->failed()); +} + +// This test verifies that the following situation does not invalidate the +// decoder: +// - Frame 0 is decoded progressively, but there's not enough data to fully +// decode it. +// - The rest of the image data is received. +// - Frame X, with X > 0, and X does not depend on frame 0, is decoded. +// - Frame 0 is decoded. +// This is a tricky case since the decoder resets the png struct for each frame, +// and this test verifies that it does not break the decoding of frame 0, even +// though it already started in the first call. +TEST(AnimatedPNGTests, VerifySuccessfulFirstFrameDecodeAfterLaterFrame) { + const char* pngFile = + "/LayoutTests/images/resources/" + "png-animated-three-independent-frames.png"; + auto decoder = createDecoder(); + auto fullData = readFile(pngFile); + ASSERT_FALSE(fullData->isEmpty()); + + // 160u is a randomly chosen offset in the IDAT chunk of the first frame. + const size_t middleFirstFrame = 160u; + RefPtr<SharedBuffer> data = + SharedBuffer::create(fullData->data(), middleFirstFrame); + decoder->setData(data.get(), false); + + ASSERT_EQ(1u, decoder->frameCount()); + ASSERT_EQ(ImageFrame::FramePartial, + decoder->frameBufferAtIndex(0)->getStatus()); + + decoder->setData(fullData.get(), true); + ASSERT_EQ(3u, decoder->frameCount()); + ASSERT_EQ(ImageFrame::FrameComplete, + decoder->frameBufferAtIndex(1)->getStatus()); + // The point is that this call does not decode frame 0, which it won't do if + // it does not have it as its required previous frame. + ASSERT_EQ(kNotFound, + decoder->frameBufferAtIndex(1)->requiredPreviousFrameIndex()); + + EXPECT_EQ(ImageFrame::FrameComplete, + decoder->frameBufferAtIndex(0)->getStatus()); + EXPECT_FALSE(decoder->failed()); +} + +// If the decoder attempts to decode a non-first frame which is subset and +// independent, it needs to discard its png_struct so it can use a modified +// IHDR. Test this by comparing a decode of frame 1 after frame 0 to a decode +// of frame 1 without decoding frame 0. +TEST(AnimatedPNGTests, DecodeFromIndependentFrame) { + const char* pngFile = + "/LayoutTests/images/resources/" + "png-animated-idat-part-of-animation.png"; + auto originalData = readFile(pngFile); + ASSERT_FALSE(originalData->isEmpty()); + + // This file almost fits the bill. Modify it to dispose frame 0, making + // frame 1 independent. + const size_t kDisposeOffset = 127u; + auto data = SharedBuffer::create(originalData->data(), kDisposeOffset); + // 1 Corresponds to APNG_DISPOSE_OP_BACKGROUND + const char one = '\001'; + data->append(&one, 1u); + // No need to modify the blend op + data->append(originalData->data() + kDisposeOffset + 1, 1u); + // Modify the CRC + png_byte crc[4]; + writeUint32(2226670956, crc); + data->append(reinterpret_cast<const char*>(crc), 4u); + data->append(originalData->data() + data->size(), + originalData->size() - data->size()); + ASSERT_EQ(originalData->size(), data->size()); + + auto decoder = createDecoder(); + decoder->setData(data.get(), true); + + ASSERT_EQ(4u, decoder->frameCount()); + ASSERT_FALSE(decoder->failed()); + + auto* frame = decoder->frameBufferAtIndex(0); + ASSERT_TRUE(frame); + ASSERT_EQ(ImageFrame::DisposeOverwriteBgcolor, frame->getDisposalMethod()); + + frame = decoder->frameBufferAtIndex(1); + ASSERT_TRUE(frame); + ASSERT_FALSE(decoder->failed()); + ASSERT_NE(IntRect({}, decoder->size()), frame->originalFrameRect()); + ASSERT_EQ(kNotFound, frame->requiredPreviousFrameIndex()); + + const auto hash = hashBitmap(frame->bitmap()); + + // Now decode starting from frame 1. + decoder = createDecoder(); + decoder->setData(data.get(), true); + + frame = decoder->frameBufferAtIndex(1); + ASSERT_TRUE(frame); + EXPECT_EQ(hash, hashBitmap(frame->bitmap())); +} + +// If the first frame is subset from IHDR (only allowed if the first frame is +// not the default image), the decoder has to destroy the png_struct it used +// for parsing so it can use a modified IHDR. +TEST(AnimatedPNGTests, SubsetFromIHDR) { + const char* pngFile = + "/LayoutTests/images/resources/" + "png-animated-idat-not-part-of-animation.png"; + auto originalData = readFile(pngFile); + ASSERT_FALSE(originalData->isEmpty()); + + const size_t fcTLOffset = 2519u; + auto data = SharedBuffer::create(originalData->data(), fcTLOffset); + + const size_t fcTLSize = 38u; + png_byte fcTL[fcTLSize]; + memcpy(fcTL, originalData->data() + fcTLOffset, fcTLSize); + // Modify to have a subset frame (yOffset 1, height 34 out of 35). + writeUint32(34, fcTL + 16u); + writeUint32(1, fcTL + 24u); + writeUint32(3972842751, fcTL + 34u); + data->append(reinterpret_cast<const char*>(fcTL), fcTLSize); + + // Append the rest of the data. + // Note: If PNGImageDecoder changes to reject an image with too many + // rows, the fdAT data will need to be modified as well. + data->append(originalData->data() + fcTLOffset + fcTLSize, + originalData->size() - data->size()); + ASSERT_EQ(originalData->size(), data->size()); + + // This will test both byte by byte and using the full data, and compare. + testByteByByteDecode(createDecoder, data.get(), 1, cAnimationNone); +} + // Static PNG tests TEST(StaticPNGTests, repetitionCountTest) { @@ -144,6 +953,11 @@ EXPECT_EQ(expectedDuration, decoder->frameDurationAtIndex(0)); } +TEST(StaticPNGTests, InvalidIHDRChunk) { + testMissingDataBreaksDecoding("/LayoutTests/images/resources/png-simple.png", + 20u, 2u); +} + TEST(StaticPNGTests, ProgressiveDecoding) { testProgressiveDecoding(&createDecoder, "/LayoutTests/images/resources/png-simple.png", 11u); @@ -159,20 +973,74 @@ "/LayoutTests/images/resources/png-simple.png", 85u, // idat offset for frame index 0 0u, // try to decode frame index 0 - true, // expect the decoder to be invalidated after the failure 1u); // expected frame count before failure } -// For static images, frameIsCompleteAtIndex(0) should return true if and only -// if the frame is successfully decoded, not when it is fully received. -TEST(StaticPNGTests, VerifyFrameCompleteBehavior) { - auto decoder = - createDecoderWithPngData("/LayoutTests/images/resources/png-simple.png"); - EXPECT_EQ(1u, decoder->frameCount()); - EXPECT_FALSE(decoder->frameIsCompleteAtIndex(0)); - EXPECT_EQ(ImageFrame::FrameComplete, - decoder->frameBufferAtIndex(0)->getStatus()); - EXPECT_TRUE(decoder->frameIsCompleteAtIndex(0)); +TEST(PNGTests, VerifyFrameCompleteBehavior) { + struct { + const char* name; + size_t expectedFrameCount; + size_t offsetInFirstFrame; + } gRecs[] = { + {"/LayoutTests/images/resources/" + "png-animated-three-independent-frames.png", + 3u, 150u}, + {"/LayoutTests/images/resources/" + "png-animated-idat-part-of-animation.png", + 4u, 160u}, + + {"/LayoutTests/images/resources/png-simple.png", 1u, 700u}, + {"/LayoutTests/images/resources/lenna.png", 1u, 40000u}, + }; + for (const auto& rec : gRecs) { + auto fullData = readFile(rec.name); + ASSERT_TRUE(fullData.get()); + + // Create with enough data for part of the first frame. + auto decoder = createDecoder(); + auto data = SharedBuffer::create(fullData->data(), rec.offsetInFirstFrame); + decoder->setData(data.get(), false); + + EXPECT_FALSE(decoder->frameIsCompleteAtIndex(0)); + + // Parsing the size is not enough to mark the frame as complete. + EXPECT_TRUE(decoder->isSizeAvailable()); + EXPECT_FALSE(decoder->frameIsCompleteAtIndex(0)); + + const auto partialFrameCount = decoder->frameCount(); + EXPECT_EQ(1u, partialFrameCount); + + // Frame is not complete, even after decoding partially. + EXPECT_FALSE(decoder->frameIsCompleteAtIndex(0)); + auto* frame = decoder->frameBufferAtIndex(0); + ASSERT_TRUE(frame); + EXPECT_NE(ImageFrame::FrameComplete, frame->getStatus()); + EXPECT_FALSE(decoder->frameIsCompleteAtIndex(0)); + + decoder->setData(fullData.get(), true); + + // With full data, parsing the size still does not mark a frame as + // complete. + EXPECT_TRUE(decoder->isSizeAvailable()); + EXPECT_FALSE(decoder->frameIsCompleteAtIndex(0)); + + const auto frameCount = decoder->frameCount(); + ASSERT_EQ(rec.expectedFrameCount, frameCount); + + if (frameCount > 1u) { + // After parsing (the full file), all frames are complete. + for (size_t i = 0; i < frameCount; ++i) + EXPECT_TRUE(decoder->frameIsCompleteAtIndex(i)); + } else { + // A single frame image is not reported complete until decoding. + EXPECT_FALSE(decoder->frameIsCompleteAtIndex(0)); + } + + frame = decoder->frameBufferAtIndex(0); + ASSERT_TRUE(frame); + EXPECT_EQ(ImageFrame::FrameComplete, frame->getStatus()); + EXPECT_TRUE(decoder->frameIsCompleteAtIndex(0)); + } } }; // namespace blink
diff --git a/third_party/WebKit/Source/platform/image-decoders/png/PNGImageReader.cpp b/third_party/WebKit/Source/platform/image-decoders/png/PNGImageReader.cpp index 1dad2dfa..ccfd5fc 100644 --- a/third_party/WebKit/Source/platform/image-decoders/png/PNGImageReader.cpp +++ b/third_party/WebKit/Source/platform/image-decoders/png/PNGImageReader.cpp
@@ -38,11 +38,12 @@ #include "platform/image-decoders/png/PNGImageReader.h" +#include <memory> +#include "platform/image-decoders/FastSharedBufferReader.h" #include "platform/image-decoders/SegmentReader.h" #include "platform/image-decoders/png/PNGImageDecoder.h" -#include "png.h" #include "wtf/PtrUtil.h" -#include <memory> +#include "zlib.h" namespace { @@ -61,8 +62,8 @@ imageDecoder(png)->rowAvailable(row, rowIndex, state); } -void PNGAPI pngComplete(png_structp png, png_infop) { - imageDecoder(png)->complete(); +void PNGAPI pngFrameComplete(png_structp png, png_infop) { + imageDecoder(png)->frameComplete(); } void PNGAPI pngFailed(png_structp png, png_const_charp) { @@ -73,45 +74,609 @@ namespace blink { -PNGImageReader::PNGImageReader(PNGImageDecoder* decoder, size_t readOffset) - : m_decoder(decoder), - m_readOffset(readOffset), - m_currentBufferSize(0), - m_decodingSizeOnly(false), - m_hasAlpha(false) { +PNGImageReader::PNGImageReader(PNGImageDecoder* decoder, size_t initialOffset) + : m_width(0), + m_height(0), + m_decoder(decoder), + m_initialOffset(initialOffset), + m_readOffset(initialOffset), + m_progressiveDecodeOffset(0), + m_idatOffset(0), + m_idatIsPartOfAnimation(false), + m_expectIdats(true), + m_isAnimated(false), + m_parsedSignature(false), + m_parsedIHDR(false), + m_parseCompleted(false), + m_reportedFrameCount(0), + m_nextSequenceNumber(0), + m_fctlNeedsDatChunk(false), + m_ignoreAnimation(false) { m_png = png_create_read_struct(PNG_LIBPNG_VER_STRING, 0, pngFailed, 0); m_info = png_create_info_struct(m_png); - png_set_progressive_read_fn(m_png, m_decoder, pngHeaderAvailable, - pngRowAvailable, pngComplete); + png_set_progressive_read_fn(m_png, m_decoder, nullptr, pngRowAvailable, + pngFrameComplete); } PNGImageReader::~PNGImageReader() { png_destroy_read_struct(m_png ? &m_png : 0, m_info ? &m_info : 0, 0); DCHECK(!m_png && !m_info); - - m_readOffset = 0; } -bool PNGImageReader::decode(const SegmentReader& data, bool sizeOnly) { - m_decodingSizeOnly = sizeOnly; +// This method reads from the FastSharedBufferReader, starting at offset, +// and returns |length| bytes in the form of a pointer to a const png_byte*. +// This function is used to make it easy to access data from the reader in a +// png friendly way, and pass it to libpng for decoding. +// +// Pre-conditions before using this: +// - |reader|.size() >= |readOffset| + |length| +// - |buffer|.size() >= |length| +// - |length| <= |kBufferSize| +// +// The reason for the last two precondition is that currently the png signature +// plus IHDR chunk (8B + 25B = 33B) is the largest chunk that is read using this +// method. If the data is not consecutive, it is stored in |buffer|, which must +// have the size of (at least) |length|, but there's no need for it to be larger +// than |kBufferSize|. +static constexpr size_t kBufferSize = 33; +const png_byte* readAsConstPngBytep(const FastSharedBufferReader& reader, + size_t readOffset, + size_t length, + char* buffer) { + DCHECK(length <= kBufferSize); + return reinterpret_cast<const png_byte*>( + reader.getConsecutiveData(readOffset, length, buffer)); +} - // We need to do the setjmp here. Otherwise bad things will happen. +bool PNGImageReader::shouldDecodeWithNewPNG(size_t index) const { + if (!m_png) + return true; + const bool firstFrameDecodeInProgress = m_progressiveDecodeOffset; + const bool frameSizeMatchesIHDR = + m_frameInfo[index].frameRect == IntRect(0, 0, m_width, m_height); + if (index) + return firstFrameDecodeInProgress || !frameSizeMatchesIHDR; + return !firstFrameDecodeInProgress && !frameSizeMatchesIHDR; +} + +// Return false on a fatal error. +bool PNGImageReader::decode(SegmentReader& data, size_t index) { + if (index >= m_frameInfo.size()) + return true; + + const FastSharedBufferReader reader(&data); + + if (!m_isAnimated) { + if (setjmp(JMPBUF(m_png))) + return false; + DCHECK_EQ(0u, index); + m_progressiveDecodeOffset += processData( + reader, m_frameInfo[0].startOffset + m_progressiveDecodeOffset, 0); + return true; + } + + DCHECK(m_isAnimated); + + const bool decodeWithNewPNG = shouldDecodeWithNewPNG(index); + if (decodeWithNewPNG) { + clearDecodeState(0); + m_png = png_create_read_struct(PNG_LIBPNG_VER_STRING, 0, pngFailed, 0); + m_info = png_create_info_struct(m_png); + png_set_progressive_read_fn(m_png, m_decoder, pngHeaderAvailable, + pngRowAvailable, pngFrameComplete); + } + if (setjmp(JMPBUF(m_png))) - return m_decoder->setFailed(); + return false; - const char* segment; - while (size_t segmentLength = data.getSomeData(segment, m_readOffset)) { - m_readOffset += segmentLength; - m_currentBufferSize = m_readOffset; - png_process_data(m_png, m_info, - reinterpret_cast<png_bytep>(const_cast<char*>(segment)), - segmentLength); - if (sizeOnly ? m_decoder->isDecodedSizeAvailable() - : m_decoder->frameIsCompleteAtIndex(0)) + if (decodeWithNewPNG) + startFrameDecoding(reader, index); + + if (!index && (!firstFrameFullyReceived() || m_progressiveDecodeOffset)) { + const bool decodedEntireFrame = progressivelyDecodeFirstFrame(reader); + if (!decodedEntireFrame) return true; + m_progressiveDecodeOffset = 0; + } else { + decodeFrame(reader, index); + } + + static png_byte IEND[12] = {0, 0, 0, 0, 'I', 'E', 'N', 'D', 174, 66, 96, 130}; + png_process_data(m_png, m_info, IEND, 12); + png_destroy_read_struct(&m_png, &m_info, 0); + DCHECK(!m_png && !m_info); + + return true; +} + +void PNGImageReader::startFrameDecoding(const FastSharedBufferReader& reader, + size_t index) { + // If the frame is the size of the whole image, just re-process all header + // data up to the first frame. + const IntRect& frameRect = m_frameInfo[index].frameRect; + if (frameRect == IntRect(0, 0, m_width, m_height)) { + processData(reader, m_initialOffset, m_idatOffset); + return; + } + + // Process the IHDR chunk, but change the width and height so it reflects + // the frame's width and height. ImageDecoder will apply the x,y offset. + constexpr size_t headerSize = kBufferSize; + char readBuffer[headerSize]; + const png_byte* chunk = + readAsConstPngBytep(reader, m_initialOffset, headerSize, readBuffer); + png_byte* header = reinterpret_cast<png_byte*>(readBuffer); + if (chunk != header) + memcpy(header, chunk, headerSize); + png_save_uint_32(header + 16, frameRect.width()); + png_save_uint_32(header + 20, frameRect.height()); + // IHDR has been modified, so tell libpng to ignore CRC errors. + png_set_crc_action(m_png, PNG_CRC_QUIET_USE, PNG_CRC_QUIET_USE); + png_process_data(m_png, m_info, header, headerSize); + + // Process the rest of the header chunks. + processData(reader, m_initialOffset + headerSize, m_idatOffset - headerSize); +} + +// Determine if the bytes 4 to 7 of |chunk| indicate that it is a |tag| chunk. +// - The length of |chunk| must be >= 8 +// - The length of |tag| must be = 4 +static inline bool isChunk(const png_byte* chunk, const char* tag) { + return memcmp(chunk + 4, tag, 4) == 0; +} + +bool PNGImageReader::progressivelyDecodeFirstFrame( + const FastSharedBufferReader& reader) { + size_t offset = m_frameInfo[0].startOffset; + + // Loop while there is enough data to do progressive decoding. + while (reader.size() >= offset + 8) { + char readBuffer[8]; + // At the beginning of each loop, the offset is at the start of a chunk. + const png_byte* chunk = readAsConstPngBytep(reader, offset, 8, readBuffer); + const png_uint_32 length = png_get_uint_32(chunk); + DCHECK(length <= PNG_UINT_31_MAX); + + // When an fcTL or IEND chunk is encountered, the frame data has ended. + // Return true, since all frame data is decoded. + if (isChunk(chunk, "fcTL") || isChunk(chunk, "IEND")) + return true; + + // If this chunk was already decoded, move on to the next. + if (m_progressiveDecodeOffset >= offset + length + 12) { + offset += length + 12; + continue; + } + + // Three scenarios are possible here: + // 1) Some bytes of this chunk were already decoded in a previous call. + // Continue from there. + // 2) This is an fdAT chunk. Convert it to an IDAT chunk to decode. + // 3) This is any other chunk. Pass it to libpng for processing. + size_t endOffsetChunk = offset + length + 12; + + if (m_progressiveDecodeOffset >= offset + 8) { + offset = m_progressiveDecodeOffset; + } else if (isChunk(chunk, "fdAT")) { + processFdatChunkAsIdat(length); + // Skip the sequence number. + offset += 12; + } else { + png_process_data(m_png, m_info, const_cast<png_byte*>(chunk), 8); + offset += 8; + } + + size_t bytesLeftInChunk = endOffsetChunk - offset; + size_t bytesDecoded = processData(reader, offset, bytesLeftInChunk); + m_progressiveDecodeOffset = offset + bytesDecoded; + if (bytesDecoded < bytesLeftInChunk) + return false; + offset += bytesDecoded; } return false; } +void PNGImageReader::processFdatChunkAsIdat(png_uint_32 fdatLength) { + // An fdAT chunk is build up as follows: + // - |length| (4B) + // - fdAT tag (4B) + // - sequence number (4B) + // - frame data (|length| - 4B) + // - CRC (4B) + // Thus, to reformat this into an IDAT chunk, do the following: + // - write |length| - 4 as the new length, since the sequence number + // must be removed. + // - change the tag to IDAT. + // - omit the sequence number from the data part of the chunk. + png_byte chunkIDAT[] = {0, 0, 0, 0, 'I', 'D', 'A', 'T'}; + png_save_uint_32(chunkIDAT, fdatLength - 4); + // The CRC is incorrect when applied to the modified fdAT. + png_set_crc_action(m_png, PNG_CRC_QUIET_USE, PNG_CRC_QUIET_USE); + png_process_data(m_png, m_info, chunkIDAT, 8); +} + +void PNGImageReader::decodeFrame(const FastSharedBufferReader& reader, + size_t index) { + size_t offset = m_frameInfo[index].startOffset; + size_t endOffset = offset + m_frameInfo[index].byteLength; + char readBuffer[8]; + + while (offset < endOffset) { + const png_byte* chunk = readAsConstPngBytep(reader, offset, 8, readBuffer); + const png_uint_32 length = png_get_uint_32(chunk); + DCHECK(length <= PNG_UINT_31_MAX); + + if (isChunk(chunk, "fdAT")) { + processFdatChunkAsIdat(length); + // The frame data and the CRC span |length| bytes, so skip the + // sequence number and process |length| bytes to decode the frame. + processData(reader, offset + 12, length); + } else { + png_process_data(m_png, m_info, const_cast<png_byte*>(chunk), 8); + processData(reader, offset + 8, length + 4); + } + + offset += 12 + length; + } +} + +// Compute the CRC and compare to the stored value. +static bool checkCrc(const FastSharedBufferReader& reader, + size_t chunkStart, + size_t chunkLength) { + constexpr size_t kSizeNeededForfcTL = 26 + 4; + char readBuffer[kSizeNeededForfcTL]; + DCHECK(chunkLength + 4 <= kSizeNeededForfcTL); + const png_byte* chunk = + readAsConstPngBytep(reader, chunkStart + 4, chunkLength + 4, readBuffer); + + char crcBuffer[4]; + const png_byte* crcPosition = + readAsConstPngBytep(reader, chunkStart + 8 + chunkLength, 4, crcBuffer); + png_uint_32 crc = png_get_uint_32(crcPosition); + return crc == crc32(crc32(0, Z_NULL, 0), chunk, chunkLength + 4); +} + +bool PNGImageReader::checkSequenceNumber(const png_byte* position) { + png_uint_32 sequence = png_get_uint_32(position); + if (sequence != m_nextSequenceNumber || sequence > PNG_UINT_31_MAX) + return false; + + ++m_nextSequenceNumber; + return true; +} + +// Return false if there was a fatal error; true otherwise. +bool PNGImageReader::parse(SegmentReader& data, ParseQuery query) { + if (m_parseCompleted) + return true; + + const FastSharedBufferReader reader(&data); + + if (!parseSize(reader)) + return false; + + if (!m_decoder->isDecodedSizeAvailable()) + return true; + + // For non animated images (identified by no acTL chunk before the IDAT), + // there is no need to continue parsing. + if (!m_isAnimated) { + FrameInfo frame; + frame.startOffset = m_readOffset; + // This should never be read in this case, but initialize just in case. + frame.byteLength = kFirstFrameIndicator; + frame.duration = 0; + frame.frameRect = IntRect(0, 0, m_width, m_height); + frame.disposalMethod = ImageFrame::DisposalMethod::DisposeKeep; + frame.alphaBlend = ImageFrame::AlphaBlendSource::BlendAtopBgcolor; + DCHECK(m_frameInfo.isEmpty()); + m_frameInfo.push_back(frame); + m_parseCompleted = true; + return true; + } + + if (query == ParseQuery::Size) + return true; + + DCHECK_EQ(ParseQuery::MetaData, query); + DCHECK(m_isAnimated); + + // Loop over the data and manually register all frames. Nothing is passed to + // libpng for processing. A frame is registered on the next fcTL chunk or + // when the IEND chunk is found. This ensures that only complete frames are + // reported, unless there is an error in the stream. + char readBuffer[kBufferSize]; + while (reader.size() >= m_readOffset + 8) { + const png_byte* chunk = + readAsConstPngBytep(reader, m_readOffset, 8, readBuffer); + const size_t length = png_get_uint_32(chunk); + if (length > PNG_UINT_31_MAX) + return false; + + const bool IDAT = isChunk(chunk, "IDAT"); + if (IDAT && !m_expectIdats) + return false; + + const bool fdAT = isChunk(chunk, "fdAT"); + if (fdAT && m_expectIdats) + return false; + + if (fdAT || (IDAT && m_idatIsPartOfAnimation)) { + m_fctlNeedsDatChunk = false; + if (!m_newFrame.startOffset) { + // Beginning of a new frame's data. + m_newFrame.startOffset = m_readOffset; + + if (m_frameInfo.isEmpty()) { + // This is the first frame. Report it immediately so it can be + // decoded progressively. + m_newFrame.byteLength = kFirstFrameIndicator; + m_frameInfo.push_back(m_newFrame); + } + } + + if (fdAT) { + if (reader.size() < m_readOffset + 8 + 4) + return true; + const png_byte* sequencePosition = + readAsConstPngBytep(reader, m_readOffset + 8, 4, readBuffer); + if (!checkSequenceNumber(sequencePosition)) + return false; + } + + } else if (isChunk(chunk, "fcTL") || isChunk(chunk, "IEND")) { + // This marks the end of the previous frame. + if (m_newFrame.startOffset) { + m_newFrame.byteLength = m_readOffset - m_newFrame.startOffset; + if (m_frameInfo[0].byteLength == kFirstFrameIndicator) { + m_frameInfo[0].byteLength = m_newFrame.byteLength; + } else { + m_frameInfo.push_back(m_newFrame); + if (isChunk(chunk, "fcTL")) { + if (m_frameInfo.size() >= m_reportedFrameCount) + return false; + } else { // IEND + if (m_frameInfo.size() != m_reportedFrameCount) + return false; + } + } + + m_newFrame.startOffset = 0; + } + + if (reader.size() < m_readOffset + 12 + length) + return true; + + if (isChunk(chunk, "IEND")) { + m_parseCompleted = true; + return true; + } + + if (length != 26 || !checkCrc(reader, m_readOffset, length)) + return false; + + chunk = readAsConstPngBytep(reader, m_readOffset + 8, length, readBuffer); + if (!parseFrameInfo(chunk)) + return false; + + m_expectIdats = false; + } else if (isChunk(chunk, "acTL")) { + // There should only be one acTL chunk, and it should be before the + // IDAT chunk. + return false; + } + + m_readOffset += 12 + length; + } + return true; +} + +// If |length| == 0, read until the stream ends. Return number of bytes +// processed. +size_t PNGImageReader::processData(const FastSharedBufferReader& reader, + size_t offset, + size_t length) { + const char* segment; + size_t totalProcessedBytes = 0; + while (reader.size() > offset) { + size_t segmentLength = reader.getSomeData(segment, offset); + if (length > 0 && segmentLength + totalProcessedBytes > length) + segmentLength = length - totalProcessedBytes; + + png_process_data(m_png, m_info, + reinterpret_cast<png_byte*>(const_cast<char*>(segment)), + segmentLength); + offset += segmentLength; + totalProcessedBytes += segmentLength; + if (totalProcessedBytes == length) + return length; + } + return totalProcessedBytes; +} + +// Process up to the start of the IDAT with libpng. +// Return false for a fatal error. True otherwise. +bool PNGImageReader::parseSize(const FastSharedBufferReader& reader) { + if (m_decoder->isDecodedSizeAvailable()) + return true; + + char readBuffer[kBufferSize]; + + if (setjmp(JMPBUF(m_png))) + return false; + + if (!m_parsedSignature) { + if (reader.size() < m_readOffset + 8) + return true; + + const png_byte* chunk = + readAsConstPngBytep(reader, m_readOffset, 8, readBuffer); + png_process_data(m_png, m_info, const_cast<png_byte*>(chunk), 8); + m_readOffset += 8; + m_parsedSignature = true; + m_newFrame.startOffset = 0; + } + + // Process APNG chunks manually, pass other chunks to libpng. + for (png_uint_32 length = 0; reader.size() >= m_readOffset + 8; + m_readOffset += length + 12) { + const png_byte* chunk = + readAsConstPngBytep(reader, m_readOffset, 8, readBuffer); + length = png_get_uint_32(chunk); + + if (isChunk(chunk, "IDAT")) { + // Done with header chunks. + m_idatOffset = m_readOffset; + m_fctlNeedsDatChunk = false; + if (m_ignoreAnimation) + m_isAnimated = false; + if (!m_isAnimated || 1 == m_reportedFrameCount) + m_decoder->setRepetitionCount(cAnimationNone); + m_decoder->headerAvailable(); + return true; + } + + // Wait until the entire chunk is available for parsing simplicity. + if (reader.size() < m_readOffset + length + 12) + break; + + if (isChunk(chunk, "acTL")) { + if (m_ignoreAnimation) + continue; + if (m_isAnimated || length != 8 || !m_parsedIHDR || + !checkCrc(reader, m_readOffset, 8)) { + m_ignoreAnimation = true; + continue; + } + chunk = readAsConstPngBytep(reader, m_readOffset + 8, length, readBuffer); + m_reportedFrameCount = png_get_uint_32(chunk); + if (!m_reportedFrameCount || m_reportedFrameCount > PNG_UINT_31_MAX) { + m_ignoreAnimation = true; + continue; + } + png_uint_32 repetitionCount = png_get_uint_32(chunk + 4); + if (repetitionCount > PNG_UINT_31_MAX) { + m_ignoreAnimation = true; + continue; + } + m_isAnimated = true; + m_decoder->setRepetitionCount(static_cast<int>(repetitionCount) - 1); + } else if (isChunk(chunk, "fcTL")) { + if (m_ignoreAnimation) + continue; + if (length != 26 || !m_parsedIHDR || + !checkCrc(reader, m_readOffset, 26)) { + m_ignoreAnimation = true; + continue; + } + chunk = readAsConstPngBytep(reader, m_readOffset + 8, length, readBuffer); + if (!parseFrameInfo(chunk) || + m_newFrame.frameRect != IntRect(0, 0, m_width, m_height)) { + m_ignoreAnimation = true; + continue; + } + m_idatIsPartOfAnimation = true; + } else if (isChunk(chunk, "fdAT")) { + m_ignoreAnimation = true; + } else { + png_process_data(m_png, m_info, const_cast<png_byte*>(chunk), 8); + processData(reader, m_readOffset + 8, length + 4); + if (isChunk(chunk, "IHDR")) { + m_parsedIHDR = true; + m_width = png_get_image_width(m_png, m_info); + m_height = png_get_image_height(m_png, m_info); + } + } + } + + // Not enough data to call headerAvailable. + return true; +} + +void PNGImageReader::clearDecodeState(size_t index) { + if (index) + return; + png_destroy_read_struct(m_png ? &m_png : nullptr, + m_info ? &m_info : nullptr, 0); + DCHECK(!m_png && !m_info); + m_progressiveDecodeOffset = 0; +} + +const PNGImageReader::FrameInfo& PNGImageReader::frameInfo(size_t index) const { + DCHECK(index < m_frameInfo.size()); + return m_frameInfo[index]; +} + +// Extract the fcTL frame control info and store it in m_newFrame. The length +// check on the fcTL data has been done by the calling code. +bool PNGImageReader::parseFrameInfo(const png_byte* data) { + if (m_fctlNeedsDatChunk) + return false; + + png_uint_32 frameWidth = png_get_uint_32(data + 4); + png_uint_32 frameHeight = png_get_uint_32(data + 8); + png_uint_32 xOffset = png_get_uint_32(data + 12); + png_uint_32 yOffset = png_get_uint_32(data + 16); + png_uint_16 delayNumerator = png_get_uint_16(data + 20); + png_uint_16 delayDenominator = png_get_uint_16(data + 22); + + if (!checkSequenceNumber(data)) + return false; + if (!frameWidth || !frameHeight) + return false; + if (xOffset + frameWidth > m_width || yOffset + frameHeight > m_height) + return false; + + m_newFrame.frameRect = IntRect(xOffset, yOffset, frameWidth, frameHeight); + + if (delayDenominator) + m_newFrame.duration = delayNumerator * 1000 / delayDenominator; + else + m_newFrame.duration = delayNumerator * 10; + + enum DisposeOperations : png_byte { + kAPNG_DISPOSE_OP_NONE = 0, + kAPNG_DISPOSE_OP_BACKGROUND = 1, + kAPNG_DISPOSE_OP_PREVIOUS = 2, + }; + const png_byte& disposeOp = data[24]; + switch (disposeOp) { + case kAPNG_DISPOSE_OP_NONE: + m_newFrame.disposalMethod = ImageFrame::DisposalMethod::DisposeKeep; + break; + case kAPNG_DISPOSE_OP_BACKGROUND: + m_newFrame.disposalMethod = + ImageFrame::DisposalMethod::DisposeOverwriteBgcolor; + break; + case kAPNG_DISPOSE_OP_PREVIOUS: + m_newFrame.disposalMethod = + ImageFrame::DisposalMethod::DisposeOverwritePrevious; + break; + default: + return false; + } + + enum BlendOperations : png_byte { + kAPNG_BLEND_OP_SOURCE = 0, + kAPNG_BLEND_OP_OVER = 1, + }; + const png_byte& blendOp = data[25]; + switch (blendOp) { + case kAPNG_BLEND_OP_SOURCE: + m_newFrame.alphaBlend = ImageFrame::AlphaBlendSource::BlendAtopBgcolor; + break; + case kAPNG_BLEND_OP_OVER: + m_newFrame.alphaBlend = + ImageFrame::AlphaBlendSource::BlendAtopPreviousFrame; + break; + default: + return false; + } + + m_fctlNeedsDatChunk = true; + return true; +} + } // namespace blink
diff --git a/third_party/WebKit/Source/platform/image-decoders/png/PNGImageReader.h b/third_party/WebKit/Source/platform/image-decoders/png/PNGImageReader.h index a7df4e6..4db0862 100644 --- a/third_party/WebKit/Source/platform/image-decoders/png/PNGImageReader.h +++ b/third_party/WebKit/Source/platform/image-decoders/png/PNGImageReader.h
@@ -27,9 +27,12 @@ #define PNGImageReader_h #include "platform/PlatformExport.h" +#include "platform/geometry/IntRect.h" +#include "platform/image-decoders/ImageFrame.h" #include "png.h" #include "wtf/Allocator.h" #include "wtf/PtrUtil.h" +#include "wtf/Vector.h" #if !defined(PNG_LIBPNG_VER_MAJOR) || !defined(PNG_LIBPNG_VER_MINOR) #error version error: compile against a versioned libpng. @@ -44,6 +47,7 @@ namespace blink { +class FastSharedBufferReader; class PNGImageDecoder; class SegmentReader; @@ -52,34 +56,113 @@ WTF_MAKE_NONCOPYABLE(PNGImageReader); public: - PNGImageReader(PNGImageDecoder*, size_t offset); + PNGImageReader(PNGImageDecoder*, size_t initialOffset); ~PNGImageReader(); - bool decode(const SegmentReader&, bool sizeOnly); + struct FrameInfo { + // The offset where the frame data of this frame starts. + size_t startOffset; + // The number of bytes that contain frame data, starting at startOffset. + size_t byteLength; + size_t duration; + IntRect frameRect; + ImageFrame::DisposalMethod disposalMethod; + ImageFrame::AlphaBlendSource alphaBlend; + }; + + enum class ParseQuery { Size, MetaData }; + + bool parse(SegmentReader&, ParseQuery); + + // Returns false on a fatal error. + bool decode(SegmentReader&, size_t); + const FrameInfo& frameInfo(size_t) const; + + // Number of complete frames parsed so far; includes frame 0 even if partial. + size_t frameCount() const { return m_frameInfo.size(); } + + bool parseCompleted() const { return m_parseCompleted; }; + + bool frameIsReceivedAtIndex(size_t index) const { + if (!index) + return firstFrameFullyReceived(); + return index < frameCount(); + } + + void clearDecodeState(size_t); + png_structp pngPtr() const { return m_png; } png_infop infoPtr() const { return m_info; } - size_t getReadOffset() const { return m_readOffset; } - void setReadOffset(size_t offset) { m_readOffset = offset; } - size_t currentBufferSize() const { return m_currentBufferSize; } - bool decodingSizeOnly() const { return m_decodingSizeOnly; } - void setHasAlpha(bool hasAlpha) { m_hasAlpha = hasAlpha; } - bool hasAlpha() const { return m_hasAlpha; } - png_bytep interlaceBuffer() const { return m_interlaceBuffer.get(); } void createInterlaceBuffer(int size) { m_interlaceBuffer = wrapArrayUnique(new png_byte[size]); } + void clearInterlaceBuffer() { m_interlaceBuffer.reset(); } private: png_structp m_png; png_infop m_info; + png_uint_32 m_width; + png_uint_32 m_height; + PNGImageDecoder* m_decoder; + + // The offset in the stream where the PNG image starts. + const size_t m_initialOffset; + // How many bytes have been read during parsing. size_t m_readOffset; - size_t m_currentBufferSize; - bool m_decodingSizeOnly; - bool m_hasAlpha; + size_t m_progressiveDecodeOffset; + size_t m_idatOffset; + + bool m_idatIsPartOfAnimation; + // All IDAT chunks must precede the first fdAT chunk, and all fdAT chunks + // should be separated from the IDAT chunks by an fcTL chunk. So this is true + // until the first fcTL chunk after an IDAT chunk. After that, only fdAT + // chunks are expected. + bool m_expectIdats; + bool m_isAnimated; + bool m_parsedSignature; + bool m_parsedIHDR; + bool m_parseCompleted; + uint32_t m_reportedFrameCount; + uint32_t m_nextSequenceNumber; + // True when an fcTL has been parsed but not its corresponding fdAT or IDAT + // chunk. Consecutive fcTLs is an error. + bool m_fctlNeedsDatChunk; + bool m_ignoreAnimation; + std::unique_ptr<png_byte[]> m_interlaceBuffer; + + // Value used for the byteLength of a FrameInfo struct to indicate that it is + // the first frame and its byteLength is not yet known. 1 is a safe value + // since the byteLength field of a frame is at least 12. + static constexpr size_t kFirstFrameIndicator = 1; + + // Stores information about a frame until it can be pushed to |m_frameInfo| + // once all the frame data has been read from the stream. + FrameInfo m_newFrame; + Vector<FrameInfo, 1> m_frameInfo; + + size_t processData(const FastSharedBufferReader&, + size_t offset, + size_t length); + // Returns false on a fatal error. + bool parseSize(const FastSharedBufferReader&); + // Returns false on an error. + bool parseFrameInfo(const png_byte* data); + bool shouldDecodeWithNewPNG(size_t) const; + void startFrameDecoding(const FastSharedBufferReader&, size_t); + // Returns whether the frame was completely decoded. + bool progressivelyDecodeFirstFrame(const FastSharedBufferReader&); + void decodeFrame(const FastSharedBufferReader&, size_t); + void processFdatChunkAsIdat(png_uint_32 fdatLength); + // Returns false on a fatal error. + bool checkSequenceNumber(const png_byte* position); + bool firstFrameFullyReceived() const { + return !m_frameInfo.isEmpty() && + m_frameInfo[0].byteLength != kFirstFrameIndicator; + } }; } // namespace blink
diff --git a/third_party/WebKit/Source/platform/image-decoders/webp/WEBPImageDecoder.cpp b/third_party/WebKit/Source/platform/image-decoders/webp/WEBPImageDecoder.cpp index 27757d08..8a3b219 100644 --- a/third_party/WebKit/Source/platform/image-decoders/webp/WEBPImageDecoder.cpp +++ b/third_party/WebKit/Source/platform/image-decoders/webp/WEBPImageDecoder.cpp
@@ -164,8 +164,8 @@ return false; if (!(m_formatFlags & ANIMATION_FLAG)) return ImageDecoder::frameIsCompleteAtIndex(index); - bool frameIsLoadedAtIndex = index < m_frameBufferCache.size(); - return frameIsLoadedAtIndex; + bool frameIsReceivedAtIndex = index < m_frameBufferCache.size(); + return frameIsReceivedAtIndex; } float WEBPImageDecoder::frameDurationAtIndex(size_t index) const { @@ -417,8 +417,11 @@ DCHECK(m_demux); for (auto i = framesToDecode.rbegin(); i != framesToDecode.rend(); ++i) { - if ((m_formatFlags & ANIMATION_FLAG) && !initFrameBuffer(*i)) + if ((m_formatFlags & ANIMATION_FLAG) && !initFrameBuffer(*i)) { + setFailed(); return; + } + WebPIterator webpFrame; if (!WebPDemuxGetFrame(m_demux, *i + 1, &webpFrame)) { setFailed();
diff --git a/third_party/WebKit/Source/platform/loader/fetch/ResourceFetcher.cpp b/third_party/WebKit/Source/platform/loader/fetch/ResourceFetcher.cpp index a5eae6c5..987e0fd 100644 --- a/third_party/WebKit/Source/platform/loader/fetch/ResourceFetcher.cpp +++ b/third_party/WebKit/Source/platform/loader/fetch/ResourceFetcher.cpp
@@ -312,13 +312,13 @@ !m_validatedURLs.contains(request.resourceRequest().url())) { // Resources loaded from memory cache should be reported the first time // they're used. - std::unique_ptr<ResourceTimingInfo> info = ResourceTimingInfo::create( + RefPtr<ResourceTimingInfo> info = ResourceTimingInfo::create( request.options().initiatorInfo.name, monotonicallyIncreasingTime(), resource->getType() == Resource::MainResource); populateTimingInfo(info.get(), resource); info->clearLoadTimings(); info->setLoadFinishTime(info->initialTime()); - m_scheduledResourceTimingReports.push_back(std::move(info)); + m_scheduledResourceTimingReports.push_back(info.release()); if (!m_resourceTimingReportTimer.isActive()) m_resourceTimingReportTimer.startOneShot(0, BLINK_FROM_HERE); } @@ -633,7 +633,7 @@ void ResourceFetcher::resourceTimingReportTimerFired(TimerBase* timer) { DCHECK_EQ(timer, &m_resourceTimingReportTimer); - Vector<std::unique_ptr<ResourceTimingInfo>> timingReports; + Vector<RefPtr<ResourceTimingInfo>> timingReports; timingReports.swap(m_scheduledResourceTimingReports); for (const auto& timingInfo : timingReports) context().addResourceTiming(*timingInfo); @@ -755,7 +755,7 @@ ResourceTimingInfo::create(fetchInitiator, startTime, isMainResource); } - std::unique_ptr<ResourceTimingInfo> info = + RefPtr<ResourceTimingInfo> info = ResourceTimingInfo::create(fetchInitiator, startTime, isMainResource); if (resource->isCacheValidator()) { @@ -767,7 +767,7 @@ if (!isMainResource || context().updateTimingInfoForIFrameNavigation(info.get())) { - m_resourceTimingInfoMap.insert(resource, std::move(info)); + m_resourceTimingInfoMap.insert(resource, info.release()); } } @@ -1171,7 +1171,7 @@ encodedDataLength == -1 ? 0 : encodedDataLength); } } - if (std::unique_ptr<ResourceTimingInfo> info = + if (RefPtr<ResourceTimingInfo> info = m_resourceTimingInfoMap.take(resource)) { // Store redirect responses that were packed inside the final response. addRedirectsToTimingInfo(resource, info.get());
diff --git a/third_party/WebKit/Source/platform/loader/fetch/ResourceFetcher.h b/third_party/WebKit/Source/platform/loader/fetch/ResourceFetcher.h index 59ef02a..c4b83ef 100644 --- a/third_party/WebKit/Source/platform/loader/fetch/ResourceFetcher.h +++ b/third_party/WebKit/Source/platform/loader/fetch/ResourceFetcher.h
@@ -229,12 +229,12 @@ TaskRunnerTimer<ResourceFetcher> m_resourceTimingReportTimer; using ResourceTimingInfoMap = - HeapHashMap<Member<Resource>, std::unique_ptr<ResourceTimingInfo>>; + HeapHashMap<Member<Resource>, RefPtr<ResourceTimingInfo>>; ResourceTimingInfoMap m_resourceTimingInfoMap; - std::unique_ptr<ResourceTimingInfo> m_navigationTimingInfo; + RefPtr<ResourceTimingInfo> m_navigationTimingInfo; - Vector<std::unique_ptr<ResourceTimingInfo>> m_scheduledResourceTimingReports; + Vector<RefPtr<ResourceTimingInfo>> m_scheduledResourceTimingReports; HeapHashSet<Member<ResourceLoader>> m_loaders; HeapHashSet<Member<ResourceLoader>> m_nonBlockingLoaders;
diff --git a/third_party/WebKit/Source/platform/mediastream/MediaStreamSource.cpp b/third_party/WebKit/Source/platform/mediastream/MediaStreamSource.cpp index e1ba1aa0..da4b301 100644 --- a/third_party/WebKit/Source/platform/mediastream/MediaStreamSource.cpp +++ b/third_party/WebKit/Source/platform/mediastream/MediaStreamSource.cpp
@@ -85,8 +85,7 @@ AudioDestinationConsumer* consumer) { ASSERT(m_requiresConsumer); MutexLocker locker(m_audioConsumersLock); - HeapHashSet<Member<AudioDestinationConsumer>>::iterator it = - m_audioConsumers.find(consumer); + auto it = m_audioConsumers.find(consumer); if (it == m_audioConsumers.end()) return false; m_audioConsumers.erase(it); @@ -101,24 +100,19 @@ float sampleRate) { ASSERT(m_requiresConsumer); MutexLocker locker(m_audioConsumersLock); - for (HeapHashSet<Member<AudioDestinationConsumer>>::iterator it = - m_audioConsumers.begin(); - it != m_audioConsumers.end(); ++it) - (*it)->setFormat(numberOfChannels, sampleRate); + for (AudioDestinationConsumer* consumer : m_audioConsumers) + consumer->setFormat(numberOfChannels, sampleRate); } void MediaStreamSource::consumeAudio(AudioBus* bus, size_t numberOfFrames) { ASSERT(m_requiresConsumer); MutexLocker locker(m_audioConsumersLock); - for (HeapHashSet<Member<AudioDestinationConsumer>>::iterator it = - m_audioConsumers.begin(); - it != m_audioConsumers.end(); ++it) - (*it)->consumeAudio(bus, numberOfFrames); + for (AudioDestinationConsumer* consumer : m_audioConsumers) + consumer->consumeAudio(bus, numberOfFrames); } DEFINE_TRACE(MediaStreamSource) { visitor->trace(m_observers); - visitor->trace(m_audioConsumers); } } // namespace blink
diff --git a/third_party/WebKit/Source/platform/mediastream/MediaStreamSource.h b/third_party/WebKit/Source/platform/mediastream/MediaStreamSource.h index d05fc45e6..e41f74b 100644 --- a/third_party/WebKit/Source/platform/mediastream/MediaStreamSource.h +++ b/third_party/WebKit/Source/platform/mediastream/MediaStreamSource.h
@@ -102,7 +102,7 @@ bool requiresAudioConsumer() const { return m_requiresConsumer; } void addAudioConsumer(AudioDestinationConsumer*); bool removeAudioConsumer(AudioDestinationConsumer*); - const HeapHashSet<Member<AudioDestinationConsumer>>& audioConsumers() { + const HashSet<AudioDestinationConsumer*>& audioConsumers() { return m_audioConsumers; } @@ -126,7 +126,7 @@ bool m_requiresConsumer; HeapHashSet<WeakMember<Observer>> m_observers; Mutex m_audioConsumersLock; - HeapHashSet<Member<AudioDestinationConsumer>> m_audioConsumers; + HashSet<AudioDestinationConsumer*> m_audioConsumers; std::unique_ptr<ExtraData> m_extraData; WebMediaConstraints m_constraints; };
diff --git a/third_party/WebKit/Source/platform/network/ResourceTimingInfo.cpp b/third_party/WebKit/Source/platform/network/ResourceTimingInfo.cpp index 067b0e7..9372db1 100644 --- a/third_party/WebKit/Source/platform/network/ResourceTimingInfo.cpp +++ b/third_party/WebKit/Source/platform/network/ResourceTimingInfo.cpp
@@ -10,9 +10,9 @@ namespace blink { -std::unique_ptr<ResourceTimingInfo> ResourceTimingInfo::adopt( +PassRefPtr<ResourceTimingInfo> ResourceTimingInfo::adopt( std::unique_ptr<CrossThreadResourceTimingInfoData> data) { - std::unique_ptr<ResourceTimingInfo> info = ResourceTimingInfo::create( + RefPtr<ResourceTimingInfo> info = ResourceTimingInfo::create( AtomicString(data->m_type), data->m_initialTime, data->m_isMainResource); info->m_originalTimingAllowOrigin = AtomicString(data->m_originalTimingAllowOrigin); @@ -22,7 +22,7 @@ for (auto& responseData : data->m_redirectChain) info->m_redirectChain.push_back(ResourceResponse(responseData.get())); info->m_transferSize = data->m_transferSize; - return info; + return info.release(); } std::unique_ptr<CrossThreadResourceTimingInfoData>
diff --git a/third_party/WebKit/Source/platform/network/ResourceTimingInfo.h b/third_party/WebKit/Source/platform/network/ResourceTimingInfo.h index dbb603e4b..fc9b8d12 100644 --- a/third_party/WebKit/Source/platform/network/ResourceTimingInfo.h +++ b/third_party/WebKit/Source/platform/network/ResourceTimingInfo.h
@@ -45,17 +45,18 @@ struct CrossThreadResourceTimingInfoData; -class PLATFORM_EXPORT ResourceTimingInfo { +class PLATFORM_EXPORT ResourceTimingInfo + : public RefCounted<ResourceTimingInfo> { USING_FAST_MALLOC(ResourceTimingInfo); WTF_MAKE_NONCOPYABLE(ResourceTimingInfo); public: - static std::unique_ptr<ResourceTimingInfo> create(const AtomicString& type, - const double time, - bool isMainResource) { - return WTF::wrapUnique(new ResourceTimingInfo(type, time, isMainResource)); + static PassRefPtr<ResourceTimingInfo> create(const AtomicString& type, + const double time, + bool isMainResource) { + return adoptRef(new ResourceTimingInfo(type, time, isMainResource)); } - static std::unique_ptr<ResourceTimingInfo> adopt( + static PassRefPtr<ResourceTimingInfo> adopt( std::unique_ptr<CrossThreadResourceTimingInfoData>); // Gets a copy of the data suitable for passing to another thread.
diff --git a/third_party/WebKit/Source/platform/testing/WebLayerTreeViewImplForTesting.cpp b/third_party/WebKit/Source/platform/testing/WebLayerTreeViewImplForTesting.cpp index a41b2bea..09a880a9 100644 --- a/third_party/WebKit/Source/platform/testing/WebLayerTreeViewImplForTesting.cpp +++ b/third_party/WebKit/Source/platform/testing/WebLayerTreeViewImplForTesting.cpp
@@ -154,8 +154,6 @@ const blink::WebLayer* innerViewportScrollLayer, const blink::WebLayer* outerViewportScrollLayer) { m_layerTreeHost->RegisterViewportLayers( - // The scroll elasticity layer will only exist when using pinch virtual - // viewports. overscrollElasticityLayer ? static_cast<const cc_blink::WebLayerImpl*>( overscrollElasticityLayer) @@ -164,8 +162,6 @@ static_cast<const cc_blink::WebLayerImpl*>(pageScaleLayer)->layer(), static_cast<const cc_blink::WebLayerImpl*>(innerViewportScrollLayer) ->layer(), - // The outer viewport layer will only exist when using pinch virtual - // viewports. outerViewportScrollLayer ? static_cast<const cc_blink::WebLayerImpl*>(outerViewportScrollLayer) ->layer()
diff --git a/third_party/WebKit/Source/web/LocalFrameClientImpl.cpp b/third_party/WebKit/Source/web/LocalFrameClientImpl.cpp index 6d50696..bae944f 100644 --- a/third_party/WebKit/Source/web/LocalFrameClientImpl.cpp +++ b/third_party/WebKit/Source/web/LocalFrameClientImpl.cpp
@@ -574,6 +574,14 @@ if (form) navigationInfo.form = WebFormElement(form); + std::unique_ptr<SourceLocation> sourceLocation = + SourceLocation::capture(m_webFrame->frame()->document()); + if (sourceLocation && !sourceLocation->isUnknown()) { + navigationInfo.sourceLocation.url = sourceLocation->url(); + navigationInfo.sourceLocation.lineNumber = sourceLocation->lineNumber(); + navigationInfo.sourceLocation.columnNumber = sourceLocation->columnNumber(); + } + WebNavigationPolicy webPolicy = m_webFrame->client()->decidePolicyForNavigation(navigationInfo); return static_cast<NavigationPolicy>(webPolicy);
diff --git a/third_party/WebKit/Source/web/ServiceWorkerGlobalScopeProxy.cpp b/third_party/WebKit/Source/web/ServiceWorkerGlobalScopeProxy.cpp index a77aff9..b64b6fc 100644 --- a/third_party/WebKit/Source/web/ServiceWorkerGlobalScopeProxy.cpp +++ b/third_party/WebKit/Source/web/ServiceWorkerGlobalScopeProxy.cpp
@@ -164,10 +164,11 @@ workerGlobalScope()->scriptController()->getScriptState()); WaitUntilObserver* waitUntilObserver = WaitUntilObserver::create( workerGlobalScope(), WaitUntilObserver::Fetch, fetchEventID); - RespondWithObserver* respondWithObserver = RespondWithObserver::create( - workerGlobalScope(), fetchEventID, webRequest.url(), webRequest.mode(), - webRequest.redirectMode(), webRequest.frameType(), - webRequest.requestContext(), waitUntilObserver); + FetchRespondWithObserver* respondWithObserver = + FetchRespondWithObserver::create( + workerGlobalScope(), fetchEventID, webRequest.url(), + webRequest.mode(), webRequest.redirectMode(), webRequest.frameType(), + webRequest.requestContext(), waitUntilObserver); Request* request = Request::create( workerGlobalScope()->scriptController()->getScriptState(), webRequest); request->getHeaders()->setGuard(Headers::ImmutableGuard);
diff --git a/third_party/WebKit/Source/web/WebDataSourceImpl.cpp b/third_party/WebKit/Source/web/WebDataSourceImpl.cpp index d8a3caf..1f32c07 100644 --- a/third_party/WebKit/Source/web/WebDataSourceImpl.cpp +++ b/third_party/WebKit/Source/web/WebDataSourceImpl.cpp
@@ -172,6 +172,18 @@ return DocumentLoader::getServiceWorkerNetworkProvider(); } +void WebDataSourceImpl::setSourceLocation( + const WebSourceLocation& sourceLocation) { + std::unique_ptr<SourceLocation> location = + SourceLocation::create(sourceLocation.url, sourceLocation.lineNumber, + sourceLocation.columnNumber, nullptr); + DocumentLoader::setSourceLocation(std::move(location)); +} + +void WebDataSourceImpl::resetSourceLocation() { + DocumentLoader::setSourceLocation(nullptr); +} + DEFINE_TRACE(WebDataSourceImpl) { DocumentLoader::trace(visitor); }
diff --git a/third_party/WebKit/Source/web/WebDataSourceImpl.h b/third_party/WebKit/Source/web/WebDataSourceImpl.h index f09ccb0..3497fed 100644 --- a/third_party/WebKit/Source/web/WebDataSourceImpl.h +++ b/third_party/WebKit/Source/web/WebDataSourceImpl.h
@@ -76,6 +76,8 @@ void setServiceWorkerNetworkProvider( std::unique_ptr<WebServiceWorkerNetworkProvider>) override; WebServiceWorkerNetworkProvider* getServiceWorkerNetworkProvider() override; + void setSourceLocation(const WebSourceLocation&) override; + void resetSourceLocation() override; static WebNavigationType toWebNavigationType(NavigationType);
diff --git a/third_party/WebKit/Source/web/WebEmbeddedWorkerImpl.cpp b/third_party/WebKit/Source/web/WebEmbeddedWorkerImpl.cpp index bcd4073..93969b4 100644 --- a/third_party/WebKit/Source/web/WebEmbeddedWorkerImpl.cpp +++ b/third_party/WebKit/Source/web/WebEmbeddedWorkerImpl.cpp
@@ -330,14 +330,6 @@ SubstituteData(buffer, "text/html", "UTF-8", KURL()))); } -void WebEmbeddedWorkerImpl::willSendRequest(WebLocalFrame* frame, - WebURLRequest& request) { - auto* networkProvider = - frame->dataSource()->getServiceWorkerNetworkProvider(); - if (networkProvider) - networkProvider->willSendRequest(request); -} - void WebEmbeddedWorkerImpl::didFinishDocumentLoad(WebLocalFrame* frame) { DCHECK(!m_mainScriptLoader); DCHECK(m_mainFrame);
diff --git a/third_party/WebKit/Source/web/WebEmbeddedWorkerImpl.h b/third_party/WebKit/Source/web/WebEmbeddedWorkerImpl.h index 0c49784..7b1dab0 100644 --- a/third_party/WebKit/Source/web/WebEmbeddedWorkerImpl.h +++ b/third_party/WebKit/Source/web/WebEmbeddedWorkerImpl.h
@@ -85,7 +85,6 @@ void loadShadowPage(); // WebFrameClient overrides. - void willSendRequest(WebLocalFrame*, WebURLRequest&) override; void didFinishDocumentLoad(WebLocalFrame*) override; // WebDevToolsAgentClient overrides.
diff --git a/third_party/WebKit/Source/web/WebInputElement.cpp b/third_party/WebKit/Source/web/WebInputElement.cpp index 5ba4e074..4033cee5 100644 --- a/third_party/WebKit/Source/web/WebInputElement.cpp +++ b/third_party/WebKit/Source/web/WebInputElement.cpp
@@ -127,6 +127,10 @@ unwrap<HTMLInputElement>()->setShouldRevealPassword(value); } +bool WebInputElement::shouldRevealPassword() const { + return constUnwrap<HTMLInputElement>()->shouldRevealPassword(); +} + WebInputElement::WebInputElement(HTMLInputElement* elem) : WebFormControlElement(elem) {}
diff --git a/third_party/WebKit/Source/web/WebSharedWorkerImpl.cpp b/third_party/WebKit/Source/web/WebSharedWorkerImpl.cpp index 0a5ad09..8254729c 100644 --- a/third_party/WebKit/Source/web/WebSharedWorkerImpl.cpp +++ b/third_party/WebKit/Source/web/WebSharedWorkerImpl.cpp
@@ -168,14 +168,6 @@ SubstituteData(buffer, "text/html", "UTF-8", KURL()))); } -void WebSharedWorkerImpl::willSendRequest(WebLocalFrame* frame, - WebURLRequest& request) { - auto* networkProvider = - frame->dataSource()->getServiceWorkerNetworkProvider(); - if (networkProvider) - networkProvider->willSendRequest(request); -} - void WebSharedWorkerImpl::didFinishDocumentLoad(WebLocalFrame* frame) { DCHECK(isMainThread()); DCHECK(!m_loadingDocument);
diff --git a/third_party/WebKit/Source/web/WebSharedWorkerImpl.h b/third_party/WebKit/Source/web/WebSharedWorkerImpl.h index c6b6ef1..9e1134c3 100644 --- a/third_party/WebKit/Source/web/WebSharedWorkerImpl.h +++ b/third_party/WebKit/Source/web/WebSharedWorkerImpl.h
@@ -73,7 +73,6 @@ // WebFrameClient methods to support resource loading thru the 'shadow page'. WebApplicationCacheHost* createApplicationCacheHost( WebApplicationCacheHostClient*) override; - void willSendRequest(WebLocalFrame*, WebURLRequest&) override; void didFinishDocumentLoad(WebLocalFrame*) override; // WebDevToolsAgentClient overrides.
diff --git a/third_party/WebKit/Source/web/tests/FrameThrottlingTest.cpp b/third_party/WebKit/Source/web/tests/FrameThrottlingTest.cpp index 43abb2f..6018aa1 100644 --- a/third_party/WebKit/Source/web/tests/FrameThrottlingTest.cpp +++ b/third_party/WebKit/Source/web/tests/FrameThrottlingTest.cpp
@@ -1014,7 +1014,7 @@ "transform: translateY(1000px)"); compositeFrame(); EXPECT_TRUE(frameDocument->view()->canThrottleRendering()); - EXPECT_FALSE(innerDivObject->paintProperties()->transform()); + EXPECT_FALSE(innerDivObject->paintProperties()); // Mutating the throttled frame should not cause paint property update. innerDiv->setAttribute(HTMLNames::styleAttr, "transform: translateY(20px)"); @@ -1025,7 +1025,7 @@ document().lifecycle()); document().view()->updateAllLifecyclePhases(); } - EXPECT_FALSE(innerDivObject->paintProperties()->transform()); + EXPECT_FALSE(innerDivObject->paintProperties()); // Move the frame back on screen to unthrottle it. frameElement->setAttribute(HTMLNames::styleAttr, "");
diff --git a/third_party/WebKit/Source/web/tests/RootScrollerTest.cpp b/third_party/WebKit/Source/web/tests/RootScrollerTest.cpp index 8a75f24..a90ecc8c 100644 --- a/third_party/WebKit/Source/web/tests/RootScrollerTest.cpp +++ b/third_party/WebKit/Source/web/tests/RootScrollerTest.cpp
@@ -742,194 +742,6 @@ m_helper.reset(); } -GraphicsLayer* scrollingLayer(LayoutView& layoutView) { - if (RuntimeEnabledFeatures::rootLayerScrollingEnabled()) - return layoutView.layer()->compositedLayerMapping()->scrollingLayer(); - return layoutView.compositor()->rootContentLayer(); -} - -// Tests that clipping layers belonging to any compositors in the ancestor chain -// of the global root scroller have their masking bit removed. -TEST_F(RootScrollerTest, RemoveClippingOnCompositorLayers) { - initialize("root-scroller-iframe.html"); - - HTMLFrameOwnerElement* iframe = toHTMLFrameOwnerElement( - mainFrame()->document()->getElementById("iframe")); - Element* container = iframe->contentDocument()->getElementById("container"); - - RootScrollerController& mainController = - mainFrame()->document()->rootScrollerController(); - RootScrollerController& childController = - iframe->contentDocument()->rootScrollerController(); - TopDocumentRootScrollerController& globalController = - page().globalRootScrollerController(); - - LayoutView* mainLayoutView = mainFrameView()->layoutView(); - LayoutView* childLayoutView = iframe->contentDocument()->layoutView(); - PaintLayerCompositor* mainCompositor = mainLayoutView->compositor(); - PaintLayerCompositor* childCompositor = childLayoutView->compositor(); - - NonThrowableExceptionState nonThrow; - - // No root scroller set, on the main frame the root content layer should - // clip. Additionally, on the child frame, the overflow controls host and - // container layers should also clip. - { - EXPECT_TRUE( - scrollingLayer(*mainLayoutView)->platformLayer()->masksToBounds()); - EXPECT_FALSE( - mainCompositor->rootGraphicsLayer()->platformLayer()->masksToBounds()); - EXPECT_FALSE( - mainCompositor->containerLayer()->platformLayer()->masksToBounds()); - - EXPECT_TRUE( - scrollingLayer(*childLayoutView)->platformLayer()->masksToBounds()); - EXPECT_TRUE( - childCompositor->rootGraphicsLayer()->platformLayer()->masksToBounds()); - EXPECT_TRUE( - childCompositor->containerLayer()->platformLayer()->masksToBounds()); - } - - // Now set the root scrollers such that the container in the iframe is the - // global root scroller. All the previously clipping layers in both paint - // layer compositors should no longer clip. - { - iframe->contentDocument()->setRootScroller(container, nonThrow); - mainFrame()->document()->setRootScroller(iframe, nonThrow); - mainFrameView()->updateAllLifecyclePhases(); - - ASSERT_EQ(iframe, &mainController.effectiveRootScroller()); - ASSERT_EQ(container, &childController.effectiveRootScroller()); - - EXPECT_FALSE( - scrollingLayer(*mainLayoutView)->platformLayer()->masksToBounds()); - EXPECT_FALSE( - mainCompositor->rootGraphicsLayer()->platformLayer()->masksToBounds()); - EXPECT_FALSE( - mainCompositor->containerLayer()->platformLayer()->masksToBounds()); - - EXPECT_FALSE( - scrollingLayer(*childLayoutView)->platformLayer()->masksToBounds()); - EXPECT_FALSE( - childCompositor->rootGraphicsLayer()->platformLayer()->masksToBounds()); - EXPECT_FALSE( - childCompositor->containerLayer()->platformLayer()->masksToBounds()); - } - - // Now reset the iframe's root scroller. Since the iframe itself is now the - // global root scroller we want it to behave as if it were the main frame, - // which means it should clip only on its root content layer. - { - iframe->contentDocument()->setRootScroller(nullptr, nonThrow); - mainFrameView()->updateAllLifecyclePhases(); - - ASSERT_EQ(iframe, &mainController.effectiveRootScroller()); - ASSERT_EQ(iframe->contentDocument(), - &childController.effectiveRootScroller()); - ASSERT_EQ(iframe->contentDocument()->documentElement(), - globalController.globalRootScroller()); - - EXPECT_FALSE( - scrollingLayer(*mainLayoutView)->platformLayer()->masksToBounds()); - EXPECT_FALSE( - mainCompositor->rootGraphicsLayer()->platformLayer()->masksToBounds()); - EXPECT_FALSE( - mainCompositor->containerLayer()->platformLayer()->masksToBounds()); - - EXPECT_TRUE( - scrollingLayer(*childLayoutView)->platformLayer()->masksToBounds()); - EXPECT_FALSE( - childCompositor->rootGraphicsLayer()->platformLayer()->masksToBounds()); - EXPECT_FALSE( - childCompositor->containerLayer()->platformLayer()->masksToBounds()); - } - - // Now reset the main frame's root scroller. Its compositor should go back - // to clipping as well. Because the iframe is now no longer the global root - // scroller, it should go back to clipping its overflow host and container - // layers. This checks that we invalidate the compositing state even though - // the iframe's effective root scroller hasn't changed. - - { - mainFrame()->document()->setRootScroller(nullptr, nonThrow); - mainFrameView()->updateAllLifecyclePhases(); - - ASSERT_EQ(mainFrame()->document(), &mainController.effectiveRootScroller()); - ASSERT_EQ(iframe->contentDocument(), - &childController.effectiveRootScroller()); - ASSERT_EQ(mainFrame()->document()->documentElement(), - globalController.globalRootScroller()); - - EXPECT_TRUE( - scrollingLayer(*mainLayoutView)->platformLayer()->masksToBounds()); - EXPECT_FALSE( - mainCompositor->rootGraphicsLayer()->platformLayer()->masksToBounds()); - EXPECT_FALSE( - mainCompositor->containerLayer()->platformLayer()->masksToBounds()); - - EXPECT_TRUE( - scrollingLayer(*childLayoutView)->platformLayer()->masksToBounds()); - EXPECT_TRUE( - childCompositor->rootGraphicsLayer()->platformLayer()->masksToBounds()); - EXPECT_TRUE( - childCompositor->containerLayer()->platformLayer()->masksToBounds()); - } - - // Set the iframe back as the main frame's root scroller. Since its the - // global root scroller again, it should clip like the root frame. This - // checks that we invalidate the compositing state even though the iframe's - // effective root scroller hasn't changed. - { - mainFrame()->document()->setRootScroller(iframe, nonThrow); - mainFrameView()->updateAllLifecyclePhases(); - - ASSERT_EQ(iframe, &mainController.effectiveRootScroller()); - ASSERT_EQ(iframe->contentDocument(), - &childController.effectiveRootScroller()); - ASSERT_EQ(iframe->contentDocument()->documentElement(), - globalController.globalRootScroller()); - - EXPECT_FALSE( - scrollingLayer(*mainLayoutView)->platformLayer()->masksToBounds()); - EXPECT_FALSE( - mainCompositor->rootGraphicsLayer()->platformLayer()->masksToBounds()); - EXPECT_FALSE( - mainCompositor->containerLayer()->platformLayer()->masksToBounds()); - - EXPECT_TRUE( - scrollingLayer(*childLayoutView)->platformLayer()->masksToBounds()); - EXPECT_FALSE( - childCompositor->rootGraphicsLayer()->platformLayer()->masksToBounds()); - EXPECT_FALSE( - childCompositor->containerLayer()->platformLayer()->masksToBounds()); - } - - // Set just the iframe's root scroller. We should stop clipping the - // iframe's compositor's layers but not the main frame's. - { - mainFrame()->document()->setRootScroller(nullptr, nonThrow); - iframe->contentDocument()->setRootScroller(container, nonThrow); - mainFrameView()->updateAllLifecyclePhases(); - - ASSERT_EQ(mainFrame()->document(), &mainController.effectiveRootScroller()); - ASSERT_EQ(container, &childController.effectiveRootScroller()); - - EXPECT_TRUE( - scrollingLayer(*mainLayoutView)->platformLayer()->masksToBounds()); - EXPECT_FALSE( - mainCompositor->rootGraphicsLayer()->platformLayer()->masksToBounds()); - EXPECT_FALSE( - mainCompositor->containerLayer()->platformLayer()->masksToBounds()); - - EXPECT_FALSE( - scrollingLayer(*childLayoutView)->platformLayer()->masksToBounds()); - EXPECT_FALSE( - childCompositor->rootGraphicsLayer()->platformLayer()->masksToBounds()); - EXPECT_FALSE( - childCompositor->containerLayer()->platformLayer()->masksToBounds()); - } -} - // Tests that the clipping layer is resized on the root scroller element even // if the layout height doesn't change. TEST_F(RootScrollerTest, BrowserControlsResizeClippingLayer) {
diff --git a/third_party/WebKit/Source/wtf/Deque.h b/third_party/WebKit/Source/wtf/Deque.h index 8a3acd686..43f8559 100644 --- a/third_party/WebKit/Source/wtf/Deque.h +++ b/third_party/WebKit/Source/wtf/Deque.h
@@ -89,11 +89,11 @@ return const_reverse_iterator(begin()); } - T& first() { + T& front() { DCHECK_NE(m_start, m_end); return m_buffer.buffer()[m_start]; } - const T& first() const { + const T& front() const { DCHECK_NE(m_start, m_end); return m_buffer.buffer()[m_start]; } @@ -140,8 +140,6 @@ void pop_back(); void pop_front(); bool empty() const { return isEmpty(); } - T& front() { return first(); } - const T& front() const { return first(); } T& back() { return last(); } const T& back() const { return last(); } template <typename... Args> @@ -484,7 +482,7 @@ template <typename T, size_t inlineCapacity, typename Allocator> inline T Deque<T, inlineCapacity, Allocator>::takeFirst() { - T oldFirst = std::move(first()); + T oldFirst = std::move(front()); pop_front(); return oldFirst; }
diff --git a/third_party/WebKit/Source/wtf/DequeTest.cpp b/third_party/WebKit/Source/wtf/DequeTest.cpp index f3a8873..09dd3cc54 100644 --- a/third_party/WebKit/Source/wtf/DequeTest.cpp +++ b/third_party/WebKit/Source/wtf/DequeTest.cpp
@@ -179,7 +179,7 @@ deque.push_back(WTF::wrapUnique(new DestructCounter(1, &destructNumber))); EXPECT_EQ(2u, deque.size()); - std::unique_ptr<DestructCounter>& counter0 = deque.first(); + std::unique_ptr<DestructCounter>& counter0 = deque.front(); EXPECT_EQ(0, counter0->get()); int counter1 = deque.last()->get(); EXPECT_EQ(1, counter1); @@ -203,13 +203,13 @@ } EXPECT_EQ(0, destructNumber); - EXPECT_EQ(0, deque.first()->get()); + EXPECT_EQ(0, deque.front()->get()); deque.pop_front(); - EXPECT_EQ(1, deque.first()->get()); + EXPECT_EQ(1, deque.front()->get()); EXPECT_EQ(1u, deque.size()); EXPECT_EQ(1, destructNumber); - std::unique_ptr<DestructCounter> ownCounter1 = std::move(deque.first()); + std::unique_ptr<DestructCounter> ownCounter1 = std::move(deque.front()); deque.pop_front(); EXPECT_EQ(counter1, ownCounter1->get()); EXPECT_EQ(0u, deque.size()); @@ -269,7 +269,7 @@ deque.push_back(MoveOnly(2)); EXPECT_EQ(2u, deque.size()); - ASSERT_EQ(1, deque.first().value()); + ASSERT_EQ(1, deque.front().value()); ASSERT_EQ(2, deque.last().value()); MoveOnly oldFirst = deque.takeFirst(); @@ -325,9 +325,9 @@ dequeA.swap(dequeB); ASSERT_EQ(1u, dequeA.size()); - EXPECT_EQ(2, dequeA.first().get()); + EXPECT_EQ(2, dequeA.front().get()); ASSERT_EQ(1u, dequeB.size()); - EXPECT_EQ(1, dequeB.first().get()); + EXPECT_EQ(1, dequeB.front().get()); dequeA.push_back(WrappedInt(3)); @@ -335,25 +335,25 @@ dequeA.swap(dequeB); ASSERT_EQ(1u, dequeA.size()); - EXPECT_EQ(1, dequeA.first().get()); + EXPECT_EQ(1, dequeA.front().get()); ASSERT_EQ(2u, dequeB.size()); - EXPECT_EQ(2, dequeB.first().get()); + EXPECT_EQ(2, dequeB.front().get()); ASSERT_LT(dequeA.size(), dequeB.size()); dequeA.swap(dequeB); ASSERT_EQ(2u, dequeA.size()); - EXPECT_EQ(2, dequeA.first().get()); + EXPECT_EQ(2, dequeA.front().get()); ASSERT_EQ(1u, dequeB.size()); - EXPECT_EQ(1, dequeB.first().get()); + EXPECT_EQ(1, dequeB.front().get()); dequeA.push_back(WrappedInt(4)); dequeA.swap(dequeB); ASSERT_EQ(1u, dequeA.size()); - EXPECT_EQ(1, dequeA.first().get()); + EXPECT_EQ(1, dequeA.front().get()); ASSERT_EQ(3u, dequeB.size()); - EXPECT_EQ(2, dequeB.first().get()); + EXPECT_EQ(2, dequeB.front().get()); dequeB.swap(dequeA); }
diff --git a/third_party/WebKit/Source/wtf/typed_arrays/ArrayBufferContents.cpp b/third_party/WebKit/Source/wtf/typed_arrays/ArrayBufferContents.cpp index 8dc7707f..4ae02962f 100644 --- a/third_party/WebKit/Source/wtf/typed_arrays/ArrayBufferContents.cpp +++ b/third_party/WebKit/Source/wtf/typed_arrays/ArrayBufferContents.cpp
@@ -135,10 +135,14 @@ } ArrayBufferContents::DataHolder::DataHolder() - : m_data(nullptr, freeMemory), m_sizeInBytes(0), m_isShared(NotShared) {} + : m_data(nullptr, freeMemory), + m_sizeInBytes(0), + m_isShared(NotShared), + m_hasRegisteredExternalAllocation(false) {} ArrayBufferContents::DataHolder::~DataHolder() { - adjustAmountOfExternalAllocatedMemory(-static_cast<int64_t>(m_sizeInBytes)); + if (m_hasRegisteredExternalAllocation) + adjustAmountOfExternalAllocatedMemory(-static_cast<int64_t>(m_sizeInBytes)); m_data.reset(); m_sizeInBytes = 0; @@ -150,6 +154,7 @@ InitializationPolicy policy) { DCHECK(!m_data); DCHECK_EQ(m_sizeInBytes, 0u); + DCHECK(!m_hasRegisteredExternalAllocation); m_data = createDataHandle(sizeInBytes, policy); if (!m_data) @@ -166,6 +171,7 @@ SharingType isShared) { DCHECK(!m_data); DCHECK_EQ(m_sizeInBytes, 0u); + DCHECK(!m_hasRegisteredExternalAllocation); m_data = std::move(data); m_sizeInBytes = sizeInBytes; @@ -177,6 +183,7 @@ void ArrayBufferContents::DataHolder::copyMemoryFrom(const DataHolder& source) { DCHECK(!m_data); DCHECK_EQ(m_sizeInBytes, 0u); + DCHECK(!m_hasRegisteredExternalAllocation); m_data = createDataHandle(source.sizeInBytes(), DontInitialize); if (!m_data) @@ -188,4 +195,17 @@ adjustAmountOfExternalAllocatedMemory(m_sizeInBytes); } +void ArrayBufferContents::DataHolder:: + registerExternalAllocationWithCurrentContext() { + DCHECK(!m_hasRegisteredExternalAllocation); + adjustAmountOfExternalAllocatedMemory(static_cast<int64_t>(m_sizeInBytes)); +} + +void ArrayBufferContents::DataHolder:: + unregisterExternalAllocationWithCurrentContext() { + if (!m_hasRegisteredExternalAllocation) + return; + adjustAmountOfExternalAllocatedMemory(-static_cast<int64_t>(m_sizeInBytes)); +} + } // namespace WTF
diff --git a/third_party/WebKit/Source/wtf/typed_arrays/ArrayBufferContents.h b/third_party/WebKit/Source/wtf/typed_arrays/ArrayBufferContents.h index 2bd5903dd..b574c9bd 100644 --- a/third_party/WebKit/Source/wtf/typed_arrays/ArrayBufferContents.h +++ b/third_party/WebKit/Source/wtf/typed_arrays/ArrayBufferContents.h
@@ -102,27 +102,14 @@ s_adjustAmountOfExternalAllocatedMemoryFunction = function; } - enum LeaveOrEnter { - Leave, - Enter, - }; + void registerExternalAllocationWithCurrentContext() { + if (m_holder) + m_holder->registerExternalAllocationWithCurrentContext(); + } - // Externally allocated memory is kept track of per context (isolate), - // hence when moving ArrayBufferContents to another context, its - // externally allocated memory needs to be registered with its - // destination context. - // - // Expose |adjustExternalAllocatedMemoryUponContextTransfer| in order to do - // so, which postMessage() implementations make use of when transferring - // array buffers. - void adjustExternalAllocatedMemoryUponContextTransfer( - LeaveOrEnter direction) { - int64_t diff = static_cast<int64_t>(sizeInBytes()); - if (!diff) - return; - if (direction == Leave) - diff = -diff; - m_holder->adjustAmountOfExternalAllocatedMemory(diff); + void unregisterExternalAllocationWithCurrentContext() { + if (m_holder) + m_holder->unregisterExternalAllocationWithCurrentContext(); } private: @@ -149,12 +136,17 @@ unsigned sizeInBytes() const { return m_sizeInBytes; } bool isShared() const { return m_isShared == Shared; } + void registerExternalAllocationWithCurrentContext(); + void unregisterExternalAllocationWithCurrentContext(); + + private: void adjustAmountOfExternalAllocatedMemory(int64_t diff) { + m_hasRegisteredExternalAllocation = !m_hasRegisteredExternalAllocation; + DCHECK(!diff || (m_hasRegisteredExternalAllocation == (diff > 0))); checkIfAdjustAmountOfExternalAllocatedMemoryIsConsistent(); s_adjustAmountOfExternalAllocatedMemoryFunction(diff); } - private: void adjustAmountOfExternalAllocatedMemory(unsigned diff) { adjustAmountOfExternalAllocatedMemory(static_cast<int64_t>(diff)); } @@ -177,6 +169,7 @@ DataHandle m_data; unsigned m_sizeInBytes; SharingType m_isShared; + bool m_hasRegisteredExternalAllocation; }; RefPtr<DataHolder> m_holder;
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/style/checkers/cpp.py b/third_party/WebKit/Tools/Scripts/webkitpy/style/checkers/cpp.py index 29fa523..e020141 100644 --- a/third_party/WebKit/Tools/Scripts/webkitpy/style/checkers/cpp.py +++ b/third_party/WebKit/Tools/Scripts/webkitpy/style/checkers/cpp.py
@@ -1200,7 +1200,6 @@ class _FileState(object): def __init__(self, clean_lines, file_extension): - self._did_inside_namespace_indent_warning = False self._clean_lines = clean_lines if file_extension in ['m', 'mm']: self._is_objective_c = True @@ -1218,12 +1217,6 @@ self._is_objective_c = False self._is_c = False - def set_did_inside_namespace_indent_warning(self): - self._did_inside_namespace_indent_warning = True - - def did_inside_namespace_indent_warning(self): - return self._did_inside_namespace_indent_warning - def is_objective_c(self): if self._is_objective_c is None: for line in self._clean_lines.elided: @@ -1823,13 +1816,6 @@ 'enum members should use InterCaps with an initial capital letter.') -def get_initial_spaces_for_line(clean_line): - initial_spaces = 0 - while initial_spaces < len(clean_line) and clean_line[initial_spaces] == ' ': - initial_spaces += 1 - return initial_spaces - - def check_using_std(clean_lines, line_number, file_state, error): """Looks for 'using std::foo;' statements which should be replaced with 'using namespace std;'.
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/style/checkers/cpp_unittest.py b/third_party/WebKit/Tools/Scripts/webkitpy/style/checkers/cpp_unittest.py index 7880bef1..8aab0ee 100644 --- a/third_party/WebKit/Tools/Scripts/webkitpy/style/checkers/cpp_unittest.py +++ b/third_party/WebKit/Tools/Scripts/webkitpy/style/checkers/cpp_unittest.py
@@ -50,10 +50,7 @@ # is in STYLE_CATEGORIES, to help keep that list up to date. -class ErrorCollector: - _all_style_categories = CppChecker.categories - # This is a list including all categories seen in any unit test. - _seen_style_categories = {} +class ErrorCollector(object): def __init__(self, assert_fn, filter=None, lines_to_check=None): """assert_fn: a function to call when we notice a problem. @@ -62,6 +59,7 @@ self._assert_fn = assert_fn self._errors = [] self._lines_to_check = lines_to_check + self._all_style_categories = CppChecker.categories if not filter: filter = FilterConfiguration() self._filter = filter @@ -75,7 +73,6 @@ return False if self._filter.should_check(category, ''): - self._seen_style_categories[category] = 1 self._errors.append('%s [%s] [%d]' % (message, category, confidence)) return True @@ -88,20 +85,6 @@ def result_list(self): return self._errors - def verify_all_categories_are_seen(self): - """Fails if there's a category in _all_style_categories - _seen_style_categories. - - This should only be called after all tests are run, so - _seen_style_categories has had a chance to fully populate. Since - this isn't called from within the normal unittest framework, we - can't use the normal unittest assert macros. Instead we just exit - when we see an error. Good thing this test is always run last! - """ - for category in self._all_style_categories: - if category not in self._seen_style_categories: - import sys - sys.exit('FATAL ERROR: There are no tests for category "%s"' % category) - class CppFunctionsTest(unittest.TestCase): @@ -2542,9 +2525,6 @@ def function_body(self, number_of_lines): return ' {\n' + ' this_is_just_a_test();\n' * number_of_lines + '}' - def function_body_with_blank_lines(self, number_of_lines): - return ' {\n' + ' this_is_just_a_test();\n\n' * number_of_lines + '}' - def function_body_with_no_lints(self, number_of_lines): return ' {\n' + ' this_is_just_a_test(); // NOLINT\n' * number_of_lines + '}'
diff --git a/third_party/WebKit/public/platform/WebLayer.h b/third_party/WebKit/public/platform/WebLayer.h index 9da1a40..457ee2e 100644 --- a/third_party/WebKit/public/platform/WebLayer.h +++ b/third_party/WebKit/public/platform/WebLayer.h
@@ -218,8 +218,6 @@ virtual uint32_t compositorMutableProperties() const = 0; virtual void setHasWillChangeTransformHint(bool) = 0; - virtual void setPreferredRasterBounds(const WebSize&) = 0; - virtual void clearPreferredRasterBounds() = 0; }; } // namespace blink
diff --git a/third_party/WebKit/public/platform/WebLayerTreeView.h b/third_party/WebKit/public/platform/WebLayerTreeView.h index d2aa2609..bc913cb6 100644 --- a/third_party/WebKit/public/platform/WebLayerTreeView.h +++ b/third_party/WebKit/public/platform/WebLayerTreeView.h
@@ -138,8 +138,7 @@ // Prevents updates to layer tree from becoming visible. virtual void setDeferCommits(bool deferCommits) {} - // Identify key layers to the compositor when using the pinch virtual - // viewport. + // Identify key viewport layers to the compositor. virtual void registerViewportLayers( const WebLayer* overscrollElasticityLayer, const WebLayer* pageScaleLayer,
diff --git a/third_party/WebKit/public/platform/modules/serviceworker/WebServiceWorkerNetworkProvider.h b/third_party/WebKit/public/platform/modules/serviceworker/WebServiceWorkerNetworkProvider.h index b17563e9..39db997 100644 --- a/third_party/WebKit/public/platform/modules/serviceworker/WebServiceWorkerNetworkProvider.h +++ b/third_party/WebKit/public/platform/modules/serviceworker/WebServiceWorkerNetworkProvider.h
@@ -36,9 +36,9 @@ class WebURLRequest; // This interface is implemented by the client and is only called on the main -// thread. Used by ServiceWorker and SharedWorker. isControlledByServiceWorker() -// and serviceWorkerID() are to be implemented only by SharedWorker's provider, -// as they are needed only for controllee workers. +// thread. isControlledByServiceWorker() and serviceWorkerID() are to be +// implemented only by Frame and SharedWorker's provider as they are needed +// only for controllee contexts (but not in controller context). // // An instance of this class is owned by the associated loading context, e.g. // DocumentLoader.
diff --git a/third_party/WebKit/public/web/WebDataSource.h b/third_party/WebKit/public/web/WebDataSource.h index a084487..7ba1d27e4 100644 --- a/third_party/WebKit/public/web/WebDataSource.h +++ b/third_party/WebKit/public/web/WebDataSource.h
@@ -35,6 +35,7 @@ #include "../platform/WebCommon.h" #include "WebNavigationType.h" +#include "WebSourceLocation.h" #include "WebTextDirection.h" namespace blink { @@ -131,6 +132,11 @@ virtual WebServiceWorkerNetworkProvider* getServiceWorkerNetworkProvider() = 0; + // PlzNavigate + // Allows to specify the SourceLocation that triggered the navigation. + virtual void setSourceLocation(const WebSourceLocation&) = 0; + virtual void resetSourceLocation() = 0; + protected: ~WebDataSource() {} };
diff --git a/third_party/WebKit/public/web/WebFrameClient.h b/third_party/WebKit/public/web/WebFrameClient.h index f8b5574..9d10cea 100644 --- a/third_party/WebKit/public/web/WebFrameClient.h +++ b/third_party/WebKit/public/web/WebFrameClient.h
@@ -45,6 +45,7 @@ #include "WebNavigationType.h" #include "WebNavigatorContentUtilsClient.h" #include "WebSandboxFlags.h" +#include "WebSourceLocation.h" #include "WebTextDirection.h" #include "public/platform/BlameContext.h" #include "public/platform/WebColor.h" @@ -300,6 +301,7 @@ bool isClientRedirect; WebFormElement form; bool isCacheDisabled; + WebSourceLocation sourceLocation; NavigationPolicyInfo(WebURLRequest& urlRequest) : extraData(nullptr),
diff --git a/third_party/WebKit/public/web/WebInputElement.h b/third_party/WebKit/public/web/WebInputElement.h index f78e0503..fb1b99a 100644 --- a/third_party/WebKit/public/web/WebInputElement.h +++ b/third_party/WebKit/public/web/WebInputElement.h
@@ -90,6 +90,9 @@ // If true, forces the text of the element to be visible. BLINK_EXPORT void setShouldRevealPassword(bool value); + // Returns true if the text of the element should be visible. + BLINK_EXPORT bool shouldRevealPassword() const; + #if BLINK_IMPLEMENTATION WebInputElement(HTMLInputElement*); WebInputElement& operator=(HTMLInputElement*);
diff --git a/third_party/WebKit/public/web/WebSourceLocation.h b/third_party/WebKit/public/web/WebSourceLocation.h new file mode 100644 index 0000000..bb3bf97 --- /dev/null +++ b/third_party/WebKit/public/web/WebSourceLocation.h
@@ -0,0 +1,23 @@ +// 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 WebSourceLocation_h +#define WebSourceLocation_h + +#include "third_party/WebKit/public/platform/WebString.h" + +namespace blink { + +// PlzNavigate +// This struct is passed to the browser when navigating, so that console error +// messages due to the navigation do not lose the source location information. +struct WebSourceLocation { + WebString url; + unsigned lineNumber = 0; + unsigned columnNumber = 0; +}; + +} // namespace blink + +#endif
diff --git a/third_party/crashpad/README.chromium b/third_party/crashpad/README.chromium index a69e595..d410154 100644 --- a/third_party/crashpad/README.chromium +++ b/third_party/crashpad/README.chromium
@@ -2,7 +2,7 @@ Short Name: crashpad URL: https://crashpad.chromium.org/ Version: unknown -Revision: 6128f38e28eb53721757d1faa5cbe3db27b61ca4 +Revision: 18d70acf81df49cc10b00bcc67c1ec64e16bd9d0 License: Apache 2.0 License File: crashpad/LICENSE Security Critical: yes
diff --git a/third_party/crashpad/crashpad/DEPS b/third_party/crashpad/crashpad/DEPS index a2def66..190f5a3 100644 --- a/third_party/crashpad/crashpad/DEPS +++ b/third_party/crashpad/crashpad/DEPS
@@ -38,7 +38,7 @@ 'crashpad/third_party/mini_chromium/mini_chromium': Var('chromium_git') + '/chromium/mini_chromium@' + - '3a2d52d74c9af5277bf6456cc00ae728f89c4898', + '9e0d322ae9f87acbe17c4ced025319b4964bf0b7', 'crashpad/third_party/zlib/zlib': Var('chromium_git') + '/chromium/src/third_party/zlib@' + '13dc246a58e4b72104d35f9b1809af95221ebda7',
diff --git a/third_party/crashpad/crashpad/client/crashpad_client.h b/third_party/crashpad/crashpad/client/crashpad_client.h index f6f3395..7799bd9c 100644 --- a/third_party/crashpad/crashpad/client/crashpad_client.h +++ b/third_party/crashpad/crashpad/client/crashpad_client.h
@@ -132,6 +132,27 @@ //! //! \return `true` on success, `false` on failure with a message logged. bool SetHandlerMachPort(base::mac::ScopedMachSendRight exception_port); + + //! \brief Retrieves a send right to the process’ crash handler Mach port. + //! + //! This method is only defined on macOS. + //! + //! This method can be used to obtain the crash handler Mach port when a + //! Crashpad client process wishes to provide a send right to this port to + //! another process. The IPC mechanism used to convey the right is under the + //! application’s control. If the other process wishes to become a client of + //! the same crash handler, it can provide the transferred right to + //! SetHandlerMachPort(). + //! + //! See StartHandler() for more detail on how the port and handler are + //! configured. + //! + //! \return The Mach port set by SetHandlerMachPort(), possibly indirectly by + //! a call to another method such as StartHandler() or + //! SetHandlerMachService(). This method must only be called after a + //! successful call to one of those methods. `MACH_PORT_NULL` on failure + //! with a message logged. + base::mac::ScopedMachSendRight GetHandlerMachPort() const; #endif #if defined(OS_WIN) || DOXYGEN @@ -155,14 +176,15 @@ //! \brief Retrieves the IPC pipe name used to register with the Crashpad //! handler. //! + //! This method is only defined on Windows. + //! //! This method retrieves the IPC pipe name set by SetHandlerIPCPipe(), or a - //! suitable IPC pipe name chosen by StartHandler(). It is intended to be used + //! suitable IPC pipe name chosen by StartHandler(). It must only be called + //! after a successful call to one of those methods. It is intended to be used //! to obtain the IPC pipe name so that it may be passed to other processes, //! so that they may register with an existing Crashpad handler by calling //! SetHandlerIPCPipe(). //! - //! This method is only defined on Windows. - //! //! \return The full name of the crash handler IPC pipe, a string of the form //! `"\\.\pipe\NAME"`. std::wstring GetHandlerIPCPipe() const; @@ -257,10 +279,12 @@ #endif private: -#if defined(OS_WIN) +#if defined(OS_MACOSX) + base::mac::ScopedMachSendRight exception_port_; +#elif defined(OS_WIN) std::wstring ipc_pipe_; ScopedKernelHANDLE handler_start_thread_; -#endif +#endif // OS_MACOSX DISALLOW_COPY_AND_ASSIGN(CrashpadClient); };
diff --git a/third_party/crashpad/crashpad/client/crashpad_client_mac.cc b/third_party/crashpad/crashpad/client/crashpad_client_mac.cc index cc50969..978024e 100644 --- a/third_party/crashpad/crashpad/client/crashpad_client_mac.cc +++ b/third_party/crashpad/crashpad/client/crashpad_client_mac.cc
@@ -523,7 +523,7 @@ } // namespace -CrashpadClient::CrashpadClient() { +CrashpadClient::CrashpadClient() : exception_port_(MACH_PORT_NULL) { } CrashpadClient::~CrashpadClient() { @@ -569,8 +569,42 @@ bool CrashpadClient::SetHandlerMachPort( base::mac::ScopedMachSendRight exception_port) { + DCHECK(!exception_port_.is_valid()); DCHECK(exception_port.is_valid()); - return SetCrashExceptionPorts(exception_port.get()); + + if (!SetCrashExceptionPorts(exception_port.get())) { + return false; + } + + exception_port_.swap(exception_port); + return true; +} + +base::mac::ScopedMachSendRight CrashpadClient::GetHandlerMachPort() const { + DCHECK(exception_port_.is_valid()); + + // For the purposes of this method, only return a port set by + // SetHandlerMachPort(). + // + // It would be possible to use task_get_exception_ports() to look up the + // EXC_CRASH task exception port, but that’s probably not what users of this + // interface really want. If CrashpadClient is asked for the handler Mach + // port, it should only return a port that it knows about by virtue of having + // set it. It shouldn’t return any EXC_CRASH task exception port in effect if + // SetHandlerMachPort() was never called, and it shouldn’t return any + // EXC_CRASH task exception port that might be set by other code after + // SetHandlerMachPort() is called. + // + // The caller is accepting its own new ScopedMachSendRight, so increment the + // reference count of the underlying right. + kern_return_t kr = mach_port_mod_refs( + mach_task_self(), exception_port_.get(), MACH_PORT_RIGHT_SEND, 1); + if (kr != KERN_SUCCESS) { + MACH_LOG(ERROR, kr) << "mach_port_mod_refs"; + return base::mac::ScopedMachSendRight(MACH_PORT_NULL); + } + + return base::mac::ScopedMachSendRight(exception_port_.get()); } // static
diff --git a/third_party/crashpad/crashpad/doc/developing.md b/third_party/crashpad/crashpad/doc/developing.md index 9f88167..4505d61 100644 --- a/third_party/crashpad/crashpad/doc/developing.md +++ b/third_party/crashpad/crashpad/doc/developing.md
@@ -278,10 +278,25 @@ patch set with `git cl upload` and let your reviewer know you’ve addressed the feedback. +The most recently uploaded patch set on a review may be tested on a [try +server](https://dev.chromium.org/developers/testing/try-server-usage) by running +`git cl try` or by clicking the “CQ Dry Run” button in Gerrit. These set the +“Commit-Queue: +1” label. This does not mean that the patch will be committed, +but the try server and commit queue share infrastructure and a Gerrit label. The +patch will be tested on try bots in a variety of configurations. Status +information will be available on Gerrit. + ### Landing Changes After code review is complete and “Code-Review: +1” has been received from all -reviewers, project members can commit the patch themselves: +reviewers, the patch can be submitted to Crashpad’s [commit +queue](https://dev.chromium.org/developers/testing/commit-queue) by clicking the +“Submit to CQ” button in Gerrit. This sets the “Commit-Queue: +2” label, which +tests the patch on the try server before landing it. + +Although the commit queue is recommended, if needed, project members can bypass +the commit queue and land patches without testing by using the “Submit” button +in Gerrit or by committing via `git cl land`: ``` $ cd ~/crashpad/crashpad @@ -289,15 +304,6 @@ $ git cl land ``` -Alternatively, patches can be committed by clicking the “Submit” button in the -Gerrit UI. - -Crashpad does not currently have a [commit -queue](https://dev.chromium.org/developers/testing/commit-queue), so -contributors who are not project members will have to ask a project member to -commit the patch for them. Project members can commit changes on behalf of -external contributors by clicking the “Submit” button in the Gerrit UI. - ### External Contributions Copyright holders must complete the [Individual Contributor License
diff --git a/third_party/crashpad/crashpad/doc/man.md b/third_party/crashpad/crashpad/doc/man.md index ff5fd41..0344fe7 100644 --- a/third_party/crashpad/crashpad/doc/man.md +++ b/third_party/crashpad/crashpad/doc/man.md
@@ -19,6 +19,7 @@ ## Section 1: User Commands * [crashpad_database_util](../tools/crashpad_database_util.md) + * [crashpad_http_upload](../tools/crashpad_http_upload.md) * [generate_dump](../tools/generate_dump.md) ### macOS-Specific
diff --git a/third_party/crashpad/crashpad/snapshot/mac/mach_o_image_annotations_reader_test.cc b/third_party/crashpad/crashpad/snapshot/mac/mach_o_image_annotations_reader_test.cc index f4f53494..7a94eb2 100644 --- a/third_party/crashpad/crashpad/snapshot/mac/mach_o_image_annotations_reader_test.cc +++ b/third_party/crashpad/crashpad/snapshot/mac/mach_o_image_annotations_reader_test.cc
@@ -117,14 +117,14 @@ bool* destroy_complex_request) override { *destroy_complex_request = true; - // In 10.12, dyld fatal errors as tested by test_type_ = kCrashDyld are via - // abort_with_payload(). In 10.12.1, the task port delivered in an exception - // message for this termination type is a corpse, even when the exception is - // EXC_CRASH and not EXC_CORPSE_NOTIFY. The corpse task port (here, |task|) - // is distinct from the process’ original task port (ChildTask()). This is - // filed as https://openradar.appspot.com/29079442. - // - // Instead of comparing task ports, compare PIDs. + if (test_type_ != kCrashDyld) { + // In 10.12.1 and later, the task port will not match ChildTask() in the + // kCrashDyld case, because kCrashDyld uses execl(), which results in a + // new task port being assigned. + EXPECT_EQ(ChildTask(), task); + } + + // The process ID should always compare favorably. pid_t task_pid; kern_return_t kr = pid_for_task(task, &task_pid); EXPECT_EQ(KERN_SUCCESS, kr) << MachErrorMessage(kr, "pid_for_task");
diff --git a/third_party/crashpad/crashpad/tools/crashpad_http_upload.cc b/third_party/crashpad/crashpad/tools/crashpad_http_upload.cc new file mode 100644 index 0000000..55ab955 --- /dev/null +++ b/third_party/crashpad/crashpad/tools/crashpad_http_upload.cc
@@ -0,0 +1,206 @@ +// Copyright 2017 The Crashpad Authors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include <getopt.h> +#include <stdio.h> +#include <stdlib.h> +#include <sys/types.h> + +#include <memory> +#include <string> + +#include "base/files/file_path.h" +#include "tools/tool_support.h" +#include "util/file/file_writer.h" +#include "util/net/http_body.h" +#include "util/net/http_multipart_builder.h" +#include "util/net/http_transport.h" +#include "util/string/split_string.h" + +namespace crashpad { +namespace { + +void Usage(const base::FilePath& me) { + fprintf(stderr, +"Usage: %" PRFilePath " [OPTION]...\n" +"Send an HTTP POST request.\n" +" -f, --file=KEY=PATH upload the file at PATH for the HTTP KEY parameter\n" +" --no-upload-gzip don't use gzip compression when uploading\n" +" -o, --output=FILE write the response body to FILE instead of stdout\n" +" -s, --string=KEY=VALUE set the HTTP KEY parameter to VALUE\n" +" -u, --url=URL send the request to URL\n" +" --help display this help and exit\n" +" --version output version information and exit\n", + me.value().c_str()); + ToolSupport::UsageTail(me); +} + +int HTTPUploadMain(int argc, char* argv[]) { + const base::FilePath argv0( + ToolSupport::CommandLineArgumentToFilePathStringType(argv[0])); + const base::FilePath me(argv0.BaseName()); + + enum OptionFlags { + // “Short” (single-character) options. + kOptionFile = 'f', + kOptionOutput = 'o', + kOptionString = 's', + kOptionURL = 'u', + + // Long options without short equivalents. + kOptionLastChar = 255, + kOptionNoUploadGzip, + + // Standard options. + kOptionHelp = -2, + kOptionVersion = -3, + }; + + struct { + std::string url; + const char* output; + bool upload_gzip; + } options = {}; + options.upload_gzip = true; + + const option long_options[] = { + {"file", required_argument, nullptr, kOptionFile}, + {"no-upload-gzip", no_argument, nullptr, kOptionNoUploadGzip}, + {"output", required_argument, nullptr, kOptionOutput}, + {"string", required_argument, nullptr, kOptionString}, + {"url", required_argument, nullptr, kOptionURL}, + {"help", no_argument, nullptr, kOptionHelp}, + {"version", no_argument, nullptr, kOptionVersion}, + {nullptr, 0, nullptr, 0}, + }; + + HTTPMultipartBuilder http_multipart_builder; + + int opt; + while ((opt = getopt_long(argc, argv, "f:o:s:u:", long_options, nullptr)) != + -1) { + switch (opt) { + case kOptionFile: { + std::string key; + std::string path; + if (!SplitStringFirst(optarg, '=', &key, &path)) { + ToolSupport::UsageHint(me, "--file requires KEY=STRING"); + return EXIT_FAILURE; + } + base::FilePath file_path( + ToolSupport::CommandLineArgumentToFilePathStringType(path)); + std::string file_name( + ToolSupport::FilePathToCommandLineArgument(file_path.BaseName())); + http_multipart_builder.SetFileAttachment( + key, file_name, file_path, "application/octet-stream"); + break; + } + case kOptionNoUploadGzip: { + options.upload_gzip = false; + break; + } + case kOptionOutput: { + options.output = optarg; + break; + } + case kOptionString: { + std::string key; + std::string value; + if (!SplitStringFirst(optarg, '=', &key, &value)) { + ToolSupport::UsageHint(me, "--string requires KEY=VALUE"); + return EXIT_FAILURE; + } + http_multipart_builder.SetFormData(key, value); + break; + } + case kOptionURL: + options.url = optarg; + break; + case kOptionHelp: + Usage(me); + return EXIT_SUCCESS; + case kOptionVersion: + ToolSupport::Version(me); + return EXIT_SUCCESS; + default: + ToolSupport::UsageHint(me, nullptr); + return EXIT_FAILURE; + } + } + argc -= optind; + argv += optind; + + if (options.url.empty()) { + ToolSupport::UsageHint(me, "--url is required"); + return EXIT_FAILURE; + } + + if (argc) { + ToolSupport::UsageHint(me, nullptr); + return EXIT_FAILURE; + } + + std::unique_ptr<FileWriterInterface> file_writer; + if (options.output) { + FileWriter* file_writer_impl = new FileWriter(); + file_writer.reset(file_writer_impl); + base::FilePath output_path( + ToolSupport::CommandLineArgumentToFilePathStringType(options.output)); + if (!file_writer_impl->Open(output_path, + FileWriteMode::kTruncateOrCreate, + FilePermissions::kWorldReadable)) { + return EXIT_FAILURE; + } + } else { + file_writer.reset(new WeakStdioFileWriter(stdout)); + } + + http_multipart_builder.SetGzipEnabled(options.upload_gzip); + + std::unique_ptr<HTTPTransport> http_transport(HTTPTransport::Create()); + http_transport->SetURL(options.url); + + HTTPHeaders content_headers; + http_multipart_builder.PopulateContentHeaders(&content_headers); + for (const auto& content_header : content_headers) { + http_transport->SetHeader(content_header.first, content_header.second); + } + + http_transport->SetBodyStream(http_multipart_builder.GetBodyStream()); + + std::string response_body; + if (!http_transport->ExecuteSynchronously(&response_body)) { + return EXIT_FAILURE; + } + + if (!response_body.empty() && + !file_writer->Write(&response_body[0], response_body.size())) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +} // namespace +} // namespace crashpad + +#if defined(OS_POSIX) +int main(int argc, char* argv[]) { + return crashpad::HTTPUploadMain(argc, argv); +} +#elif defined(OS_WIN) +int wmain(int argc, wchar_t* argv[]) { + return crashpad::ToolSupport::Wmain(argc, argv, crashpad::HTTPUploadMain); +} +#endif // OS_POSIX
diff --git a/third_party/crashpad/crashpad/tools/crashpad_http_upload.md b/third_party/crashpad/crashpad/tools/crashpad_http_upload.md new file mode 100644 index 0000000..93b87522 --- /dev/null +++ b/third_party/crashpad/crashpad/tools/crashpad_http_upload.md
@@ -0,0 +1,132 @@ +<!-- +Copyright 2017 The Crashpad Authors. All rights reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +--> + +# crashpad_http_upload(1) + +## Name + +crashpad_http_upload—Send an HTTP POST request + +## Synopsis + +**crashpad_http_uplaod** [_OPTION…_] + +## Description + +Performs an HTTP or HTTPS POST, building a `multipart/form-data` request from +key-value pairs and files in the manner of an HTML `<form>` with a POST action. +Provides the response. + +Programs that use the Crashpad client library directly will not normally use +this tool. This tool is provided for debugging and testing as it isolates +Crashpad’s networking implementation normally used to upload crash reports to +a crash report collection server, making it available for more general use. + +## Options + + * **-f**, **--file**=_KEY_=_PATH_ + + Include _PATH_ in the request as a file upload, in the manner of an HTML + `<input type="file">` element. _KEY_ is used as the field name. + + * **--no-upload-gzip** + + Do not use `gzip` compression. Normally, the entire request body is + compressed into a `gzip` stream and transmitted with `Content-Encoding: + gzip`. This option disables compression, and is intended for use with servers + that don’t accept uploads compressed in this way. + + * **-o**, **--output**=_FILE_ + + The response body will be written to _FILE_ instead of standard output. + + * **-s**, **--string**=_KEY_=_VALUE_ + + Include _KEY_ and _VALUE_ in the request as an ordinary form field, in the + manner of an HTML `<input type="text">` element. _KEY_ is used as the field + name, and _VALUE_ is used as its value. + + * **-u**, **--url**=_URL_ + + Send the request to _URL_. This option is required. + + * **--help** + + Display help and exit. + + * **--version** + + Output version information and exit. + +## Examples + +Uploads a file to an HTTP server running on `localhost`. + +``` +$ crashpad_http-upload --url http://localhost/upload_test \ + --string=when=now --file=what=1040.pdf +Thanks for the upload! +``` + +This example corresponds to the HTML form: + +``` +<form action="http://localhost/upload_test" method="post"> + <input type="text" name="when" value="now" /> + <input type="file" name="what" /> + <input type="submit" /> +</form> +``` + +## Exit Status + + * **0** + + Success. + + * **1** + + Failure, with a message printed to the standard error stream. HTTP error + statuses such as 404 (Not Found) are included in the definition of failure. + +## See Also + +[crashpad_handler(8)](../handler/crashpad_handler.md) + +## Resources + +Crashpad home page: https://crashpad.chromium.org/. + +Report bugs at https://crashpad.chromium.org/bug/new. + +## Copyright + +Copyright 2017 [The Crashpad +Authors](https://chromium.googlesource.com/crashpad/crashpad/+/master/AUTHORS). + +## License + +Licensed under the Apache License, Version 2.0 (the “License”); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an “AS IS” BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License.
diff --git a/third_party/crashpad/crashpad/tools/generate_dump.cc b/third_party/crashpad/crashpad/tools/generate_dump.cc index 11fe0ca5..b98b1f4 100644 --- a/third_party/crashpad/crashpad/tools/generate_dump.cc +++ b/third_party/crashpad/crashpad/tools/generate_dump.cc
@@ -12,7 +12,6 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include <fcntl.h> #include <getopt.h> #include <stdio.h> #include <stdlib.h> @@ -48,12 +47,6 @@ namespace crashpad { namespace { -struct Options { - std::string dump_path; - pid_t pid; - bool suspend; -}; - void Usage(const base::FilePath& me) { fprintf(stderr, "Usage: %" PRFilePath " [OPTION]... PID\n" @@ -85,7 +78,11 @@ kOptionVersion = -3, }; - Options options = {}; + struct { + std::string dump_path; + pid_t pid; + bool suspend; + } options = {}; options.suspend = true; const option long_options[] = {
diff --git a/third_party/crashpad/crashpad/tools/tool_support.cc b/third_party/crashpad/crashpad/tools/tool_support.cc index f6d4f84..15deead 100644 --- a/third_party/crashpad/crashpad/tools/tool_support.cc +++ b/third_party/crashpad/crashpad/tools/tool_support.cc
@@ -98,4 +98,14 @@ #endif // OS_POSIX } +// static +std::string ToolSupport::FilePathToCommandLineArgument( + const base::FilePath& file_path) { +#if defined(OS_POSIX) + return file_path.value(); +#elif defined(OS_WIN) + return base::UTF16ToUTF8(file_path.value()); +#endif // OS_POSIX +} + } // namespace crashpad
diff --git a/third_party/crashpad/crashpad/tools/tool_support.h b/third_party/crashpad/crashpad/tools/tool_support.h index e3a5061..48f412f 100644 --- a/third_party/crashpad/crashpad/tools/tool_support.h +++ b/third_party/crashpad/crashpad/tools/tool_support.h
@@ -72,9 +72,18 @@ //! `char*`. This undoes that transformation. //! //! \sa Wmain() + //! \sa FilePathToCommandLineArgument() static base::FilePath::StringType CommandLineArgumentToFilePathStringType( const base::StringPiece& arg); + //! \brief Converts a base::FilePath to a command line argument. + //! + //! On POSIX, this is a no-op. On Windows, this undoes the transformation done + //! by CommandLineArgumentToFilePathStringType() in the same manner as + //! Wmain(). + static std::string FilePathToCommandLineArgument( + const base::FilePath& file_path); + private: DISALLOW_IMPLICIT_CONSTRUCTORS(ToolSupport); };
diff --git a/third_party/crashpad/crashpad/tools/tools.gyp b/third_party/crashpad/crashpad/tools/tools.gyp index 4876300..3639b53 100644 --- a/third_party/crashpad/crashpad/tools/tools.gyp +++ b/third_party/crashpad/crashpad/tools/tools.gyp
@@ -49,6 +49,22 @@ ], }, { + 'target_name': 'crashpad_http_upload', + 'type': 'executable', + 'dependencies': [ + 'crashpad_tool_support', + '../compat/compat.gyp:crashpad_compat', + '../third_party/mini_chromium/mini_chromium.gyp:base', + '../util/util.gyp:crashpad_util', + ], + 'include_dirs': [ + '..', + ], + 'sources': [ + 'crashpad_http_upload.cc', + ], + }, + { 'target_name': 'generate_dump', 'type': 'executable', 'dependencies': [ @@ -77,7 +93,7 @@ }, }], ], - } + }, ], 'conditions': [ ['OS=="mac"', {
diff --git a/third_party/crashpad/crashpad/util/file/file_reader.cc b/third_party/crashpad/crashpad/util/file/file_reader.cc index 14d06c7..4f5ae773 100644 --- a/third_party/crashpad/crashpad/util/file/file_reader.cc +++ b/third_party/crashpad/crashpad/util/file/file_reader.cc
@@ -109,10 +109,14 @@ DCHECK(file_); size_t rv = fread(data, 1, size, file_); - if (rv < size && ferror(file_)) { + if (rv != size && ferror(file_)) { STDIO_PLOG(ERROR) << "fread"; return -1; } + if (rv > size) { + LOG(ERROR) << "fread: expected " << size << ", observed " << rv; + return -1; + } return rv; }
diff --git a/third_party/crashpad/crashpad/util/file/file_writer.cc b/third_party/crashpad/crashpad/util/file/file_writer.cc index 94f41f14..d22a1a3 100644 --- a/third_party/crashpad/crashpad/util/file/file_writer.cc +++ b/third_party/crashpad/crashpad/util/file/file_writer.cc
@@ -56,6 +56,11 @@ bool WeakFileHandleFileWriter::WriteIoVec(std::vector<WritableIoVec>* iovecs) { DCHECK_NE(file_handle_, kInvalidFileHandle); + if (iovecs->empty()) { + LOG(ERROR) << "WriteIoVec(): no iovecs"; + return false; + } + #if defined(OS_POSIX) ssize_t size = 0; @@ -187,4 +192,66 @@ return weak_file_handle_file_writer_.Seek(offset, whence); } +WeakStdioFileWriter::WeakStdioFileWriter(FILE* file) + : file_(file) { +} + +WeakStdioFileWriter::~WeakStdioFileWriter() { +} + +bool WeakStdioFileWriter::Write(const void* data, size_t size) { + DCHECK(file_); + + size_t rv = fwrite(data, 1, size, file_); + if (rv != size) { + if (ferror(file_)) { + STDIO_PLOG(ERROR) << "fwrite"; + } else { + LOG(ERROR) << "fwrite: expected " << size << ", observed " << rv; + } + return false; + } + + return true; +} + +bool WeakStdioFileWriter::WriteIoVec(std::vector<WritableIoVec>* iovecs) { + DCHECK(file_); + + if (iovecs->empty()) { + LOG(ERROR) << "WriteIoVec(): no iovecs"; + return false; + } + + for (const WritableIoVec& iov : *iovecs) { + if (!Write(iov.iov_base, iov.iov_len)) { + return false; + } + } + +#ifndef NDEBUG + // The interface says that |iovecs| is not sacred, so scramble it to make sure + // that nobody depends on it. + memset(&(*iovecs)[0], 0xa5, sizeof((*iovecs)[0]) * iovecs->size()); +#endif + + return true; +} + +FileOffset WeakStdioFileWriter::Seek(FileOffset offset, int whence) { + DCHECK(file_); + if (fseeko(file_, offset, whence) == -1) { + STDIO_PLOG(ERROR) << "fseeko"; + return -1; + } + + FileOffset new_offset = ftello(file_); + if (new_offset == -1) { + STDIO_PLOG(ERROR) << "ftello"; + return -1; + } + + return new_offset; +} + } // namespace crashpad
diff --git a/third_party/crashpad/crashpad/util/file/file_writer.h b/third_party/crashpad/crashpad/util/file/file_writer.h index ed261ec..007e5f3 100644 --- a/third_party/crashpad/crashpad/util/file/file_writer.h +++ b/third_party/crashpad/crashpad/util/file/file_writer.h
@@ -167,6 +167,41 @@ DISALLOW_COPY_AND_ASSIGN(FileWriter); }; +//! \brief A file writer backed by a standard input/output `FILE*`. +//! +//! This class accepts an already-open `FILE*`. It is not responsible for +//! opening or closing this `FILE*`. Users of this class must ensure that the +//! `FILE*` is closed appropriately elsewhere. Objects of this class may be used +//! to write to `FILE*` objects not associated with filesystem-based files, +//! although special attention should be paid to the Seek() method, which may +//! not function on `FILE*` objects that do not refer to disk-based files. +//! +//! This class is expected to be used when other code is responsible for +//! opening `FILE*` objects and already provides `FILE*` objects. A good use +//! would be a WeakStdioFileWriter for `stdout`. +class WeakStdioFileWriter : public FileWriterInterface { + public: + explicit WeakStdioFileWriter(FILE* file); + ~WeakStdioFileWriter() override; + + // FileWriterInterface: + bool Write(const void* data, size_t size) override; + bool WriteIoVec(std::vector<WritableIoVec>* iovecs) override; + + // FileSeekerInterface: + + //! \copydoc FileWriterInterface::Seek() + //! + //! \note This method is only guaranteed to function on `FILE*` objects + //! referring to disk-based files. + FileOffset Seek(FileOffset offset, int whence) override; + + private: + FILE* file_; // weak + + DISALLOW_COPY_AND_ASSIGN(WeakStdioFileWriter); +}; + } // namespace crashpad #endif // CRASHPAD_UTIL_FILE_FILE_WRITER_H_
diff --git a/third_party/crashpad/crashpad/util/net/http_transport_libcurl.cc b/third_party/crashpad/crashpad/util/net/http_transport_libcurl.cc new file mode 100644 index 0000000..96ea750 --- /dev/null +++ b/third_party/crashpad/crashpad/util/net/http_transport_libcurl.cc
@@ -0,0 +1,366 @@ +// Copyright 2017 The Crashpad Authors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "util/net/http_transport.h" + +#include <curl/curl.h> +#include <string.h> +#include <sys/utsname.h> + +#include <algorithm> +#include <limits> + +#include "base/logging.h" +#include "base/numerics/safe_math.h" +#include "base/scoped_generic.h" +#include "base/strings/string_number_conversions.h" +#include "base/strings/stringprintf.h" +#include "build/build_config.h" +#include "package.h" +#include "util/net/http_body.h" +#include "util/numeric/safe_assignment.h" + +namespace crashpad { + +namespace { + +std::string UserAgent() { + std::string user_agent = base::StringPrintf( + "%s/%s %s", PACKAGE_NAME, PACKAGE_VERSION, curl_version()); + + utsname os; + if (uname(&os) != 0) { + PLOG(WARNING) << "uname"; + } else { + // Match the architecture name that would be used by the kernel, so that the + // strcmp() below can omit the kernel’s architecture name if it’s the same + // as the user process’ architecture. On Linux, these names are normally + // defined in each architecture’s Makefile as UTS_MACHINE, but can be + // overridden in architecture-specific configuration as COMPAT_UTS_MACHINE. + // See linux-4.4.52/arch/*/Makefile and + // linux-4.4.52/arch/*/include/asm/compat.h. In turn, on some systems, these + // names are further overridden or refined in early kernel startup code by + // modifying the string returned by linux-4.4.52/include/linux/utsname.h + // init_utsname() as noted. +#if defined(ARCH_CPU_X86) + // linux-4.4.52/arch/x86/kernel/cpu/bugs.c check_bugs() sets the first digit + // to 4, 5, or 6, but no higher. Assume 6. + const char arch[] = "i686"; +#elif defined(ARCH_CPU_X86_64) + const char arch[] = "x86_64"; +#elif defined(ARCH_CPU_ARMEL) + // linux-4.4.52/arch/arm/kernel/setup.c setup_processor() bases the string + // on the ARM processor name and a character identifying little- or + // big-endian. The processor name comes from a definition in + // arch/arm/mm/proc-*.S. Assume armv7, little-endian. + const char arch[] = "armv7l"; +#elif defined(ARCH_CPU_ARM64) + // ARM64 uses aarch64 or aarch64_be as directed by ELF_PLATFORM. See + // linux-4.4.52/arch/arm64/kernel/setup.c setup_arch(). Assume + // little-endian. + const char arch[] = "aarch64"; +#elif defined(ARCH_CPU_MIPSEL) + const char arch[] = "mips"; +#elif defined(ARCH_CPU_MIPS64EL) + const char arch[] = "mips64"; +#else +#error Port +#endif + + user_agent.append( + base::StringPrintf(" %s/%s (%s", os.sysname, os.release, arch)); + if (strcmp(arch, os.machine) != 0) { + user_agent.append(base::StringPrintf("; %s", os.machine)); + } + user_agent.append(1, ')'); + } + + return user_agent; +} + +std::string CurlErrorMessage(CURLcode curl_err, const std::string& base) { + return base::StringPrintf( + "%s: %s (%d)", base.c_str(), curl_easy_strerror(curl_err), curl_err); +} + +struct ScopedCURLTraits { + static CURL* InvalidValue() { return nullptr; } + static void Free(CURL* curl) { + if (curl) { + curl_easy_cleanup(curl); + } + } +}; +using ScopedCURL = base::ScopedGeneric<CURL*, ScopedCURLTraits>; + +class CurlSList { + public: + CurlSList() : list_(nullptr) {} + ~CurlSList() { + if (list_) { + curl_slist_free_all(list_); + } + } + + curl_slist* get() const { return list_; } + + bool Append(const char* data) { + curl_slist* list = curl_slist_append(list_, data); + if (!list_) { + list_ = list; + } + return list != nullptr; + } + + private: + curl_slist* list_; + + DISALLOW_COPY_AND_ASSIGN(CurlSList); +}; + +class ScopedClearString { + public: + explicit ScopedClearString(std::string* string) : string_(string) {} + + ~ScopedClearString() { + if (string_) { + string_->clear(); + } + } + + void Disarm() { string_ = nullptr; } + + private: + std::string* string_; + + DISALLOW_COPY_AND_ASSIGN(ScopedClearString); +}; + +class HTTPTransportLibcurl final : public HTTPTransport { + public: + HTTPTransportLibcurl(); + ~HTTPTransportLibcurl() override; + + // HTTPTransport: + bool ExecuteSynchronously(std::string* response_body) override; + + private: + static size_t ReadRequestBody(char* buffer, + size_t size, + size_t nitems, + void* userdata); + static size_t WriteResponseBody(char* buffer, + size_t size, + size_t nitems, + void* userdata); + + DISALLOW_COPY_AND_ASSIGN(HTTPTransportLibcurl); +}; + +HTTPTransportLibcurl::HTTPTransportLibcurl() : HTTPTransport() {} + +HTTPTransportLibcurl::~HTTPTransportLibcurl() {} + +bool HTTPTransportLibcurl::ExecuteSynchronously(std::string* response_body) { + DCHECK(body_stream()); + + response_body->clear(); + + // curl_easy_init() will do this on the first call if it hasn’t been done yet, + // but not in a thread-safe way as is done here. + static CURLcode curl_global_init_err = []() { + return curl_global_init(CURL_GLOBAL_DEFAULT); + }(); + if (curl_global_init_err != CURLE_OK) { + LOG(ERROR) << CurlErrorMessage(curl_global_init_err, "curl_global_init"); + return false; + } + + CurlSList curl_headers; + ScopedCURL curl(curl_easy_init()); + if (!curl.get()) { + LOG(ERROR) << "curl_easy_init"; + return false; + } + +// These macros wrap the repetitive “try something, log an error and return +// false on failure” pattern. Macros are convenient because the log messages +// will point to the correct line number, which can help pinpoint a problem when +// there are as many calls to these functions as there are here. +#define TRY_CURL_EASY_SETOPT(curl, option, parameter) \ + do { \ + CURLcode curl_err = curl_easy_setopt((curl), (option), (parameter)); \ + if (curl_err != CURLE_OK) { \ + LOG(ERROR) << CurlErrorMessage(curl_err, "curl_easy_setopt"); \ + return false; \ + } \ + } while (false) +#define TRY_CURL_SLIST_APPEND(slist, data) \ + do { \ + if (!(slist).Append(data)) { \ + LOG(ERROR) << "curl_slist_append"; \ + return false; \ + } \ + } while (false) + + TRY_CURL_EASY_SETOPT(curl.get(), CURLOPT_USERAGENT, UserAgent().c_str()); + + // Accept and automatically decode any encoding that libcurl understands. + TRY_CURL_EASY_SETOPT(curl.get(), CURLOPT_ACCEPT_ENCODING, ""); + + TRY_CURL_EASY_SETOPT(curl.get(), CURLOPT_URL, url().c_str()); + + const int kMillisecondsPerSecond = 1E3; + TRY_CURL_EASY_SETOPT(curl.get(), + CURLOPT_TIMEOUT_MS, + static_cast<long>(timeout() * kMillisecondsPerSecond)); + + // If the request body size is known ahead of time, a Content-Length header + // field will be present. Store that to use as CURLOPT_POSTFIELDSIZE_LARGE, + // which will both set the Content-Length field in the request header and + // inform libcurl of the request body size. Otherwise, use Transfer-Encoding: + // chunked, which does not require advance knowledge of the request body size. + bool chunked = true; + size_t content_length; + for (const auto& pair : headers()) { + if (pair.first == kContentLength) { + chunked = !base::StringToSizeT(pair.second, &content_length); + DCHECK(!chunked); + } else { + TRY_CURL_SLIST_APPEND(curl_headers, + (pair.first + ": " + pair.second).c_str()); + } + } + + if (method() == "POST") { + TRY_CURL_EASY_SETOPT(curl.get(), CURLOPT_POST, 1l); + + // By default when sending a POST request, libcurl includes an “Expect: + // 100-continue” header field. Althogh this header is specified in HTTP/1.1 + // (RFC 2616 §8.2.3, RFC 7231 §5.1.1), even collection servers that claim to + // speak HTTP/1.1 may not respond to it. When sending this header field, + // libcurl will wait for one second for the server to respond with a “100 + // Continue” status before continuing to transmit the request body. This + // delay is avoided by telling libcurl not to send this header field at all. + // The drawback is that certain HTTP error statuses may not be received + // until after substantial amounts of data have been sent to the server. + TRY_CURL_SLIST_APPEND(curl_headers, "Expect:"); + + if (chunked) { + TRY_CURL_SLIST_APPEND(curl_headers, "Transfer-Encoding: chunked"); + } else { + curl_off_t content_length_curl; + if (!AssignIfInRange(&content_length_curl, content_length)) { + LOG(ERROR) << base::StringPrintf("Content-Length %zu too large", + content_length); + return false; + } + TRY_CURL_EASY_SETOPT( + curl.get(), CURLOPT_POSTFIELDSIZE_LARGE, content_length_curl); + } + } else if (method() != "GET") { + // Untested. + TRY_CURL_EASY_SETOPT(curl.get(), CURLOPT_CUSTOMREQUEST, method().c_str()); + } + + TRY_CURL_EASY_SETOPT(curl.get(), CURLOPT_HTTPHEADER, curl_headers.get()); + + TRY_CURL_EASY_SETOPT(curl.get(), CURLOPT_READFUNCTION, ReadRequestBody); + TRY_CURL_EASY_SETOPT(curl.get(), CURLOPT_READDATA, this); + TRY_CURL_EASY_SETOPT(curl.get(), CURLOPT_WRITEFUNCTION, WriteResponseBody); + TRY_CURL_EASY_SETOPT(curl.get(), CURLOPT_WRITEDATA, response_body); + +#undef TRY_CURL_EASY_SETOPT +#undef TRY_CURL_SLIST_APPEND + + // If a partial response body is received and then a failure occurs, ensure + // that response_body is cleared. + ScopedClearString clear_response_body(response_body); + + // Do it. + CURLcode curl_err = curl_easy_perform(curl.get()); + if (curl_err != CURLE_OK) { + LOG(ERROR) << CurlErrorMessage(curl_err, "curl_easy_perform"); + return false; + } + + long status; + curl_err = curl_easy_getinfo(curl.get(), CURLINFO_RESPONSE_CODE, &status); + if (curl_err != CURLE_OK) { + LOG(ERROR) << CurlErrorMessage(curl_err, "curl_easy_getinfo"); + return false; + } + + if (status != 200) { + LOG(ERROR) << base::StringPrintf("HTTP status %ld", status); + return false; + } + + // The response body is complete. Don’t clear it. + clear_response_body.Disarm(); + + return true; +} + +// static +size_t HTTPTransportLibcurl::ReadRequestBody(char* buffer, + size_t size, + size_t nitems, + void* userdata) { + HTTPTransportLibcurl* self = + reinterpret_cast<HTTPTransportLibcurl*>(userdata); + + // This libcurl callback mimics the silly stdio-style fread() interface: size + // and nitems have been separated and must be multiplied. + base::CheckedNumeric<size_t> checked_len = base::CheckMul(size, nitems); + size_t len = checked_len.ValueOrDefault(std::numeric_limits<size_t>::max()); + + // Limit the read to what can be expressed in a FileOperationResult. + len = std::min( + len, + static_cast<size_t>(std::numeric_limits<FileOperationResult>::max())); + + FileOperationResult bytes_read = self->body_stream()->GetBytesBuffer( + reinterpret_cast<uint8_t*>(buffer), len); + if (bytes_read < 0) { + return CURL_READFUNC_ABORT; + } + + return bytes_read; +} + +// static +size_t HTTPTransportLibcurl::WriteResponseBody(char* buffer, + size_t size, + size_t nitems, + void* userdata) { + std::string* response_body = reinterpret_cast<std::string*>(userdata); + + // This libcurl callback mimics the silly stdio-style fread() interface: size + // and nitems have been separated and must be multiplied. + base::CheckedNumeric<size_t> checked_len = base::CheckMul(size, nitems); + size_t len = checked_len.ValueOrDefault(std::numeric_limits<size_t>::max()); + + response_body->append(buffer, len); + return len; +} + +} // namespace + +// static +std::unique_ptr<HTTPTransport> HTTPTransport::Create() { + return std::unique_ptr<HTTPTransport>(new HTTPTransportLibcurl()); +} + +} // namespace crashpad
diff --git a/third_party/crashpad/crashpad/util/util.gyp b/third_party/crashpad/crashpad/util/util.gyp index 9e57b44..f1f004c 100644 --- a/third_party/crashpad/crashpad/util/util.gyp +++ b/third_party/crashpad/crashpad/util/util.gyp
@@ -119,6 +119,7 @@ 'net/http_multipart_builder.h', 'net/http_transport.cc', 'net/http_transport.h', + 'net/http_transport_libcurl.cc', 'net/http_transport_mac.mm', 'net/http_transport_win.cc', 'numeric/checked_address_range.cc', @@ -300,6 +301,17 @@ 'win/capture_context.asm', ], }], + ['OS=="linux"', { + 'link_settings': { + 'libraries': [ + '-lcurl', + ], + }, + }, { # else: OS!="linux" + 'sources!': [ + 'net/http_transport_libcurl.cc', + ], + }], ], }, ],
diff --git a/third_party/python_gflags/AUTHORS b/third_party/python_gflags/AUTHORS deleted file mode 100644 index 887918b..0000000 --- a/third_party/python_gflags/AUTHORS +++ /dev/null
@@ -1,2 +0,0 @@ -google-gflags@googlegroups.com -
diff --git a/third_party/python_gflags/COPYING b/third_party/python_gflags/COPYING deleted file mode 100644 index d15b0c24..0000000 --- a/third_party/python_gflags/COPYING +++ /dev/null
@@ -1,28 +0,0 @@ -Copyright (c) 2006, Google Inc. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/third_party/python_gflags/ChangeLog b/third_party/python_gflags/ChangeLog deleted file mode 100644 index 87732a2b..0000000 --- a/third_party/python_gflags/ChangeLog +++ /dev/null
@@ -1,62 +0,0 @@ -Wed Jan 18 13:57:39 2012 Google Inc. <google-gflags@googlegroups.com> - - * python-gflags: version 2.0 - * No changes from version 1.8. - -Wed Jan 18 11:54:03 2012 Google Inc. <google-gflags@googlegroups.com> - - * python-gflags: version 1.8 - * Don't raise DuplicateFlag when re-importing a module (mmcdonald) - * Changed the 'official' python-gflags email in setup.py/etc - * Changed copyright text to reflect Google's relinquished ownership - -Tue Dec 20 17:10:41 2011 Google Inc. <opensource@google.com> - - * python-gflags: version 1.7 - * Prepare gflags for python 3.x, keeping 2.4 compatibility (twouters) - * If output is a tty, use terminal's width to wrap help-text (wiesmann) - * PORTING: Fix ImportError for non-Unix platforms (kdeus) - * PORTING: Run correctly when termios isn't available (shines) - * Add unicode support to flags (csilvers) - -Fri Jul 29 12:24:08 2011 Google Inc. <opensource@google.com> - - * python-gflags: version 1.6 - * Document FlagValues.UseGnuGetOpt (garymm) - * replace fchmod with chmod to work on python 2.4 (mshields) - * Fix bug in flag decl reporting for dup flags (craigcitro) - * Add multi_float, and tests for multi_float/int (simonf) - * Make flagfiles expand in place, to follow docs (dmlynch) - * Raise exception if --flagfile can't be read (tlim) - -Wed Jan 26 13:50:46 2011 Google Inc. <opensource@google.com> - - * python-gflags: version 1.5.1 - * Fix manifest and setup.py to include new files - -Mon Jan 24 16:58:10 2011 Google Inc. <opensource@google.com> - - * python-gflags: version 1.5 - * Add support for flag validators (olexiy) - * Better reporting on UnrecognizedFlagError (sorenj) - * Cache ArgumentParser, to save space (tmarek) - -Wed Oct 13 17:40:12 2010 Google Inc. <opensource@google.com> - - * python-gflags: version 1.4 - * Unregister per-command flags after running the command (dnr) - * Allow key-flags to work with special flags (salcianu) - * Allow printing flags of a specific module (mikecurtis) - * BUGFIX: Fix an error message for float flags (olexiy) - * BUGFIX: Can now import while defining flags (salcianu) - * BUGFIX: Fix flagfile parsing in python (chronos) - * DOC: Better explain the format of --helpxml output (salcianu) - * DOC: Better error message on parse failure (tstromberg) - * Better test coverage under python 2.2 (mshields) - * Added a Makefile for building the packages. - -Mon Jan 4 18:46:29 2010 Tim 'mithro' Ansell <mithro@mithis.com> - - * python-gflags: version 1.3 - * Fork from the C++ package (google-gflags 1.3) - * Add debian packaging
diff --git a/third_party/python_gflags/MANIFEST.in b/third_party/python_gflags/MANIFEST.in deleted file mode 100644 index 17851bf..0000000 --- a/third_party/python_gflags/MANIFEST.in +++ /dev/null
@@ -1,19 +0,0 @@ -include AUTHORS -include COPYING -include ChangeLog -include MANIFEST.in -include Makefile -include NEWS -include README -include debian/README -include debian/changelog -include debian/compat -include debian/control -include debian/copyright -include debian/docs -include debian/rules -include gflags.py -include gflags2man.py -include gflags_validators.py -include setup.py -recursive-include tests *.py
diff --git a/third_party/python_gflags/Makefile b/third_party/python_gflags/Makefile deleted file mode 100644 index 6627c32..0000000 --- a/third_party/python_gflags/Makefile +++ /dev/null
@@ -1,69 +0,0 @@ - -prep: - @echo - # Install needed packages - sudo apt-get install subversion fakeroot python-setuptools python-subversion - # - @echo - # Check that the person has .pypirc - @if [ ! -e ~/.pypirc ]; then \ - echo "Please create a ~/.pypirc with the following contents:"; \ - echo "[server-login]"; \ - echo "username:google_opensource"; \ - echo "password:<see valentine>"; \ - fi - # - @echo - # FIXME(tansell): Check that the person has .dputrc for PPA - -clean: - # Clean up any build files. - python setup.py clean --all - # - # Clean up the debian stuff - fakeroot ./debian/rules clean - # - # Clean up everything else - rm MANIFEST || true - rm -rf build-* - # - # Clean up the egg files - rm -rf *egg* - # - # Remove dist - rm -rf dist - -dist: - # Generate the tarball based on MANIFEST.in - python setup.py sdist - # - # Build the debian packages - fakeroot ./debian/rules binary - mv ../python-gflags*.deb ./dist/ - # - # Build the python Egg - python setup.py bdist_egg - # - @echo - @echo "Files to upload:" - @echo "--------------------------" - @ls -l ./dist/ - -push: - # Send the updates to svn - # Upload the source package to code.google.com - - /home/build/opensource/tools/googlecode_upload.py \ - -p python-gflags ./dist/* - # - # Upload the package to PyPi - - python setup.py sdist upload - - python setup.py bdist_egg upload - # - # Upload the package to the ppa - # FIXME(tansell): dput should run here - -check: - # Run all the tests. - for test in tests/*.py; do PYTHONPATH=. python $$test || exit 1; done - -.PHONY: prep dist clean push check
diff --git a/third_party/python_gflags/NEWS b/third_party/python_gflags/NEWS deleted file mode 100644 index 8aaa72bf..0000000 --- a/third_party/python_gflags/NEWS +++ /dev/null
@@ -1,78 +0,0 @@ -== 18 January 2012 == - -[Prependum:] I just realized I should have named the new version 2.0, -to reflect the new ownership and status as a community run project. -Not too late, I guess. I've just released python-gflags 2.0, which is -identical to python-gflags 1.8 except for the version number. - -I've just released python-gflags 1.8. This fixes a bug, allowing -modules defining flags to be re-imported without raising duplicate -flag errors. - -Administrative note: In the coming weeks, I'll be stepping down as -maintainer for the python-gflags project, and as part of that Google -is relinquishing ownership of the project; it will now be entirely -community run. The remaining -[http://python-gflags.googlecode.com/svn/tags/python-gflags-1.8/ChangeLog changes] -in this release reflect that shift. - - -=== 20 December 2011 === - -I've just released python-gflags 1.7. The major change here is -improved unicode support, in both flag default values and -help-strings. We've also made big steps toward making gflags work -with python 3.x (while keeping 2.4 compatibility), and improving ---help output in the common case where output is a tty. - -For a full list of changes since last release, see the -[http://python-gflags.googlecode.com/svn/tags/python-gflags-1.7/ChangeLog ChangeLog]. - -=== 29 July 2011 === - -I've just released python-gflags 1.6. This release has only minor -changes, including support for multi_float flags. The full list of -changes is in the -[http://python-gflags.googlecode.com/svn/tags/python-gflags-1.6/ChangeLog ChangeLog]. - -The major change with this release is procedural: I've changed the -internal tools used to integrate Google-supplied patches for gflags -into the opensource release. These new tools should result in more -frequent updates with better change descriptions. They will also -result in future `ChangeLog` entries being much more verbose (for -better or for worse). - -=== 26 January 2011 === - -I've just released python-gflags 1.5.1. I had improperly packaged -python-gflags 1.5, so it probably doesn't work. All users who have -updated to python-gflags 1.5 are encouraged to update again to 1.5.1. - -=== 24 January 2011 === - -I've just released python-gflags 1.5. This release adds support for -flag verifiers: small functions you can associate with flags, that are -called whenever the flag value is set or modified, and can verify that -the new value is legal. It also has other, minor changes, described -in the -[http://python-gflags.googlecode.com/svn/tags/python-gflags-1.5/ChangeLog ChangeLog]. - -=== 11 October 2010 === - -I've just released python-gflags 1.4. This release has only minor -changes from 1.3, including support for printing flags of a specific -module, allowing key-flags to work with special flags, somewhat better -error messaging, and -[http://python-gflags.googlecode.com/svn/tags/python-gflags-1.4/ChangeLog so forth]. -If 1.3 is working well for you, there's no particular reason to upgrade. - -=== 4 January 2010 === - -I just released python-gflags 1.3. This is the first python-gflags -release; it is version 1.3 because this code is forked from the 1.3 -release of google-gflags. - -I don't have a tarball or .deb file up quite yet, so for now you will -have to get the source files by browsing under the 'source' -tag. Downloadable files will be available soon. -
diff --git a/third_party/python_gflags/OWNERS b/third_party/python_gflags/OWNERS deleted file mode 100644 index f8dba18..0000000 --- a/third_party/python_gflags/OWNERS +++ /dev/null
@@ -1,2 +0,0 @@ -dbeam@chromium.org -tbreisacher@chromium.org
diff --git a/third_party/python_gflags/README b/third_party/python_gflags/README deleted file mode 100644 index 81daa7a..0000000 --- a/third_party/python_gflags/README +++ /dev/null
@@ -1,23 +0,0 @@ -This repository contains a python implementation of the Google commandline -flags module. - - GFlags defines a *distributed* command line system, replacing systems like - getopt(), optparse and manual argument processing. Rather than an application - having to define all flags in or near main(), each python module defines flags - that are useful to it. When one python module imports another, it gains - access to the other's flags. - - It includes the ability to define flag types (boolean, float, interger, list), - autogeneration of help (in both human and machine readable format) and reading - arguments from a file. It also includes the ability to automatically generate - man pages from the help flags. - -Documentation for implementation is at the top of gflags.py file. - -To install the python module, run - python ./setup.py install - -When you install this library, you also get a helper application, -gflags2man.py, installed into /usr/local/bin. You can run gflags2man.py to -create an instant man page, with all the commandline flags and their docs, for -any C++ or python program you've written using the gflags library.
diff --git a/third_party/python_gflags/README.chromium b/third_party/python_gflags/README.chromium deleted file mode 100644 index 19b9be1..0000000 --- a/third_party/python_gflags/README.chromium +++ /dev/null
@@ -1,26 +0,0 @@ -Name: python-gflags -URL: http://code.google.com/p/python-gflags/ -Version: 2.0 -Date: 15 Feb 2012 -Revision: 41 -License: BSD 3-Clause License -License File: NOT_SHIPPED -Security Critical: no - -Description: - This project is the python equivalent of google-gflags, a Google commandline - flag implementation for C++. It is intended to be used in situations where a - project wants to mimic the command-line flag handling of a C++ app that uses - google-gflags, or for a Python app that, via swig or some other means, is - linked with a C++ app that uses google-gflags. - - The gflags package contains a library that implements commandline flags - processing. As such it's a replacement for getopt(). It has increased - flexibility, including built-in support for Python types, and the ability to - define flags in the source file in which they're used. (This last is its - major difference from OptParse.) - -Local modifications: - Removed tests/ - Removed debian/ - Added OWNERS file
diff --git a/third_party/python_gflags/gflags.py b/third_party/python_gflags/gflags.py deleted file mode 100644 index 822256a..0000000 --- a/third_party/python_gflags/gflags.py +++ /dev/null
@@ -1,2862 +0,0 @@ -#!/usr/bin/env python -# -# Copyright (c) 2002, Google Inc. -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are -# met: -# -# * Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# * Redistributions in binary form must reproduce the above -# copyright notice, this list of conditions and the following disclaimer -# in the documentation and/or other materials provided with the -# distribution. -# * Neither the name of Google Inc. nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# --- -# Author: Chad Lester -# Design and style contributions by: -# Amit Patel, Bogdan Cocosel, Daniel Dulitz, Eric Tiedemann, -# Eric Veach, Laurence Gonsalves, Matthew Springer -# Code reorganized a bit by Craig Silverstein - -"""This module is used to define and parse command line flags. - -This module defines a *distributed* flag-definition policy: rather than -an application having to define all flags in or near main(), each python -module defines flags that are useful to it. When one python module -imports another, it gains access to the other's flags. (This is -implemented by having all modules share a common, global registry object -containing all the flag information.) - -Flags are defined through the use of one of the DEFINE_xxx functions. -The specific function used determines how the flag is parsed, checked, -and optionally type-converted, when it's seen on the command line. - - -IMPLEMENTATION: DEFINE_* creates a 'Flag' object and registers it with a -'FlagValues' object (typically the global FlagValues FLAGS, defined -here). The 'FlagValues' object can scan the command line arguments and -pass flag arguments to the corresponding 'Flag' objects for -value-checking and type conversion. The converted flag values are -available as attributes of the 'FlagValues' object. - -Code can access the flag through a FlagValues object, for instance -gflags.FLAGS.myflag. Typically, the __main__ module passes the command -line arguments to gflags.FLAGS for parsing. - -At bottom, this module calls getopt(), so getopt functionality is -supported, including short- and long-style flags, and the use of -- to -terminate flags. - -Methods defined by the flag module will throw 'FlagsError' exceptions. -The exception argument will be a human-readable string. - - -FLAG TYPES: This is a list of the DEFINE_*'s that you can do. All flags -take a name, default value, help-string, and optional 'short' name -(one-letter name). Some flags have other arguments, which are described -with the flag. - -DEFINE_string: takes any input, and interprets it as a string. - -DEFINE_bool or -DEFINE_boolean: typically does not take an argument: say --myflag to - set FLAGS.myflag to true, or --nomyflag to set - FLAGS.myflag to false. Alternately, you can say - --myflag=true or --myflag=t or --myflag=1 or - --myflag=false or --myflag=f or --myflag=0 - -DEFINE_float: takes an input and interprets it as a floating point - number. Takes optional args lower_bound and upper_bound; - if the number specified on the command line is out of - range, it will raise a FlagError. - -DEFINE_integer: takes an input and interprets it as an integer. Takes - optional args lower_bound and upper_bound as for floats. - -DEFINE_enum: takes a list of strings which represents legal values. If - the command-line value is not in this list, raise a flag - error. Otherwise, assign to FLAGS.flag as a string. - -DEFINE_list: Takes a comma-separated list of strings on the commandline. - Stores them in a python list object. - -DEFINE_spaceseplist: Takes a space-separated list of strings on the - commandline. Stores them in a python list object. - Example: --myspacesepflag "foo bar baz" - -DEFINE_multistring: The same as DEFINE_string, except the flag can be - specified more than once on the commandline. The - result is a python list object (list of strings), - even if the flag is only on the command line once. - -DEFINE_multi_int: The same as DEFINE_integer, except the flag can be - specified more than once on the commandline. The - result is a python list object (list of ints), even if - the flag is only on the command line once. - - -SPECIAL FLAGS: There are a few flags that have special meaning: - --help prints a list of all the flags in a human-readable fashion - --helpshort prints a list of all key flags (see below). - --helpxml prints a list of all flags, in XML format. DO NOT parse - the output of --help and --helpshort. Instead, parse - the output of --helpxml. For more info, see - "OUTPUT FOR --helpxml" below. - --flagfile=foo read flags from file foo. - --undefok=f1,f2 ignore unrecognized option errors for f1,f2. - For boolean flags, you should use --undefok=boolflag, and - --boolflag and --noboolflag will be accepted. Do not use - --undefok=noboolflag. - -- as in getopt(), terminates flag-processing - - -FLAGS VALIDATORS: If your program: - - requires flag X to be specified - - needs flag Y to match a regular expression - - or requires any more general constraint to be satisfied -then validators are for you! - -Each validator represents a constraint over one flag, which is enforced -starting from the initial parsing of the flags and until the program -terminates. - -Also, lower_bound and upper_bound for numerical flags are enforced using flag -validators. - -Howto: -If you want to enforce a constraint over one flag, use - -gflags.RegisterValidator(flag_name, - checker, - message='Flag validation failed', - flag_values=FLAGS) - -After flag values are initially parsed, and after any change to the specified -flag, method checker(flag_value) will be executed. If constraint is not -satisfied, an IllegalFlagValue exception will be raised. See -RegisterValidator's docstring for a detailed explanation on how to construct -your own checker. - - -EXAMPLE USAGE: - -FLAGS = gflags.FLAGS - -gflags.DEFINE_integer('my_version', 0, 'Version number.') -gflags.DEFINE_string('filename', None, 'Input file name', short_name='f') - -gflags.RegisterValidator('my_version', - lambda value: value % 2 == 0, - message='--my_version must be divisible by 2') -gflags.MarkFlagAsRequired('filename') - - -NOTE ON --flagfile: - -Flags may be loaded from text files in addition to being specified on -the commandline. - -Any flags you don't feel like typing, throw them in a file, one flag per -line, for instance: - --myflag=myvalue - --nomyboolean_flag -You then specify your file with the special flag '--flagfile=somefile'. -You CAN recursively nest flagfile= tokens OR use multiple files on the -command line. Lines beginning with a single hash '#' or a double slash -'//' are comments in your flagfile. - -Any flagfile=<file> will be interpreted as having a relative path from -the current working directory rather than from the place the file was -included from: - myPythonScript.py --flagfile=config/somefile.cfg - -If somefile.cfg includes further --flagfile= directives, these will be -referenced relative to the original CWD, not from the directory the -including flagfile was found in! - -The caveat applies to people who are including a series of nested files -in a different dir than they are executing out of. Relative path names -are always from CWD, not from the directory of the parent include -flagfile. We do now support '~' expanded directory names. - -Absolute path names ALWAYS work! - - -EXAMPLE USAGE: - - - FLAGS = gflags.FLAGS - - # Flag names are globally defined! So in general, we need to be - # careful to pick names that are unlikely to be used by other libraries. - # If there is a conflict, we'll get an error at import time. - gflags.DEFINE_string('name', 'Mr. President', 'your name') - gflags.DEFINE_integer('age', None, 'your age in years', lower_bound=0) - gflags.DEFINE_boolean('debug', False, 'produces debugging output') - gflags.DEFINE_enum('gender', 'male', ['male', 'female'], 'your gender') - - def main(argv): - try: - argv = FLAGS(argv) # parse flags - except gflags.FlagsError, e: - print '%s\\nUsage: %s ARGS\\n%s' % (e, sys.argv[0], FLAGS) - sys.exit(1) - if FLAGS.debug: print 'non-flag arguments:', argv - print 'Happy Birthday', FLAGS.name - if FLAGS.age is not None: - print 'You are a %d year old %s' % (FLAGS.age, FLAGS.gender) - - if __name__ == '__main__': - main(sys.argv) - - -KEY FLAGS: - -As we already explained, each module gains access to all flags defined -by all the other modules it transitively imports. In the case of -non-trivial scripts, this means a lot of flags ... For documentation -purposes, it is good to identify the flags that are key (i.e., really -important) to a module. Clearly, the concept of "key flag" is a -subjective one. When trying to determine whether a flag is key to a -module or not, assume that you are trying to explain your module to a -potential user: which flags would you really like to mention first? - -We'll describe shortly how to declare which flags are key to a module. -For the moment, assume we know the set of key flags for each module. -Then, if you use the app.py module, you can use the --helpshort flag to -print only the help for the flags that are key to the main module, in a -human-readable format. - -NOTE: If you need to parse the flag help, do NOT use the output of ---help / --helpshort. That output is meant for human consumption, and -may be changed in the future. Instead, use --helpxml; flags that are -key for the main module are marked there with a <key>yes</key> element. - -The set of key flags for a module M is composed of: - -1. Flags defined by module M by calling a DEFINE_* function. - -2. Flags that module M explictly declares as key by using the function - - DECLARE_key_flag(<flag_name>) - -3. Key flags of other modules that M specifies by using the function - - ADOPT_module_key_flags(<other_module>) - - This is a "bulk" declaration of key flags: each flag that is key for - <other_module> becomes key for the current module too. - -Notice that if you do not use the functions described at points 2 and 3 -above, then --helpshort prints information only about the flags defined -by the main module of our script. In many cases, this behavior is good -enough. But if you move part of the main module code (together with the -related flags) into a different module, then it is nice to use -DECLARE_key_flag / ADOPT_module_key_flags and make sure --helpshort -lists all relevant flags (otherwise, your code refactoring may confuse -your users). - -Note: each of DECLARE_key_flag / ADOPT_module_key_flags has its own -pluses and minuses: DECLARE_key_flag is more targeted and may lead a -more focused --helpshort documentation. ADOPT_module_key_flags is good -for cases when an entire module is considered key to the current script. -Also, it does not require updates to client scripts when a new flag is -added to the module. - - -EXAMPLE USAGE 2 (WITH KEY FLAGS): - -Consider an application that contains the following three files (two -auxiliary modules and a main module) - -File libfoo.py: - - import gflags - - gflags.DEFINE_integer('num_replicas', 3, 'Number of replicas to start') - gflags.DEFINE_boolean('rpc2', True, 'Turn on the usage of RPC2.') - - ... some code ... - -File libbar.py: - - import gflags - - gflags.DEFINE_string('bar_gfs_path', '/gfs/path', - 'Path to the GFS files for libbar.') - gflags.DEFINE_string('email_for_bar_errors', 'bar-team@google.com', - 'Email address for bug reports about module libbar.') - gflags.DEFINE_boolean('bar_risky_hack', False, - 'Turn on an experimental and buggy optimization.') - - ... some code ... - -File myscript.py: - - import gflags - import libfoo - import libbar - - gflags.DEFINE_integer('num_iterations', 0, 'Number of iterations.') - - # Declare that all flags that are key for libfoo are - # key for this module too. - gflags.ADOPT_module_key_flags(libfoo) - - # Declare that the flag --bar_gfs_path (defined in libbar) is key - # for this module. - gflags.DECLARE_key_flag('bar_gfs_path') - - ... some code ... - -When myscript is invoked with the flag --helpshort, the resulted help -message lists information about all the key flags for myscript: ---num_iterations, --num_replicas, --rpc2, and --bar_gfs_path. - -Of course, myscript uses all the flags declared by it (in this case, -just --num_replicas) or by any of the modules it transitively imports -(e.g., the modules libfoo, libbar). E.g., it can access the value of -FLAGS.bar_risky_hack, even if --bar_risky_hack is not declared as a key -flag for myscript. - - -OUTPUT FOR --helpxml: - -The --helpxml flag generates output with the following structure: - -<?xml version="1.0"?> -<AllFlags> - <program>PROGRAM_BASENAME</program> - <usage>MAIN_MODULE_DOCSTRING</usage> - (<flag> - [<key>yes</key>] - <file>DECLARING_MODULE</file> - <name>FLAG_NAME</name> - <meaning>FLAG_HELP_MESSAGE</meaning> - <default>DEFAULT_FLAG_VALUE</default> - <current>CURRENT_FLAG_VALUE</current> - <type>FLAG_TYPE</type> - [OPTIONAL_ELEMENTS] - </flag>)* -</AllFlags> - -Notes: - -1. The output is intentionally similar to the output generated by the -C++ command-line flag library. The few differences are due to the -Python flags that do not have a C++ equivalent (at least not yet), -e.g., DEFINE_list. - -2. New XML elements may be added in the future. - -3. DEFAULT_FLAG_VALUE is in serialized form, i.e., the string you can -pass for this flag on the command-line. E.g., for a flag defined -using DEFINE_list, this field may be foo,bar, not ['foo', 'bar']. - -4. CURRENT_FLAG_VALUE is produced using str(). This means that the -string 'false' will be represented in the same way as the boolean -False. Using repr() would have removed this ambiguity and simplified -parsing, but would have broken the compatibility with the C++ -command-line flags. - -5. OPTIONAL_ELEMENTS describe elements relevant for certain kinds of -flags: lower_bound, upper_bound (for flags that specify bounds), -enum_value (for enum flags), list_separator (for flags that consist of -a list of values, separated by a special token). - -6. We do not provide any example here: please use --helpxml instead. - -This module requires at least python 2.2.1 to run. -""" - -import cgi -import getopt -import os -import re -import string -import struct -import sys -# pylint: disable-msg=C6204 -try: - import fcntl -except ImportError: - fcntl = None -try: - # Importing termios will fail on non-unix platforms. - import termios -except ImportError: - termios = None - -import gflags_validators -# pylint: enable-msg=C6204 - - -# Are we running under pychecker? -_RUNNING_PYCHECKER = 'pychecker.python' in sys.modules - - -def _GetCallingModuleObjectAndName(): - """Returns the module that's calling into this module. - - We generally use this function to get the name of the module calling a - DEFINE_foo... function. - """ - # Walk down the stack to find the first globals dict that's not ours. - for depth in range(1, sys.getrecursionlimit()): - if not sys._getframe(depth).f_globals is globals(): - globals_for_frame = sys._getframe(depth).f_globals - module, module_name = _GetModuleObjectAndName(globals_for_frame) - if module_name is not None: - return module, module_name - raise AssertionError("No module was found") - - -def _GetCallingModule(): - """Returns the name of the module that's calling into this module.""" - return _GetCallingModuleObjectAndName()[1] - - -def _GetThisModuleObjectAndName(): - """Returns: (module object, module name) for this module.""" - return _GetModuleObjectAndName(globals()) - - -# module exceptions: -class FlagsError(Exception): - """The base class for all flags errors.""" - pass - - -class DuplicateFlag(FlagsError): - """Raised if there is a flag naming conflict.""" - pass - -class CantOpenFlagFileError(FlagsError): - """Raised if flagfile fails to open: doesn't exist, wrong permissions, etc.""" - pass - - -class DuplicateFlagCannotPropagateNoneToSwig(DuplicateFlag): - """Special case of DuplicateFlag -- SWIG flag value can't be set to None. - - This can be raised when a duplicate flag is created. Even if allow_override is - True, we still abort if the new value is None, because it's currently - impossible to pass None default value back to SWIG. See FlagValues.SetDefault - for details. - """ - pass - - -class DuplicateFlagError(DuplicateFlag): - """A DuplicateFlag whose message cites the conflicting definitions. - - A DuplicateFlagError conveys more information than a DuplicateFlag, - namely the modules where the conflicting definitions occur. This - class was created to avoid breaking external modules which depend on - the existing DuplicateFlags interface. - """ - - def __init__(self, flagname, flag_values, other_flag_values=None): - """Create a DuplicateFlagError. - - Args: - flagname: Name of the flag being redefined. - flag_values: FlagValues object containing the first definition of - flagname. - other_flag_values: If this argument is not None, it should be the - FlagValues object where the second definition of flagname occurs. - If it is None, we assume that we're being called when attempting - to create the flag a second time, and we use the module calling - this one as the source of the second definition. - """ - self.flagname = flagname - first_module = flag_values.FindModuleDefiningFlag( - flagname, default='<unknown>') - if other_flag_values is None: - second_module = _GetCallingModule() - else: - second_module = other_flag_values.FindModuleDefiningFlag( - flagname, default='<unknown>') - msg = "The flag '%s' is defined twice. First from %s, Second from %s" % ( - self.flagname, first_module, second_module) - DuplicateFlag.__init__(self, msg) - - -class IllegalFlagValue(FlagsError): - """The flag command line argument is illegal.""" - pass - - -class UnrecognizedFlag(FlagsError): - """Raised if a flag is unrecognized.""" - pass - - -# An UnrecognizedFlagError conveys more information than an UnrecognizedFlag. -# Since there are external modules that create DuplicateFlags, the interface to -# DuplicateFlag shouldn't change. The flagvalue will be assigned the full value -# of the flag and its argument, if any, allowing handling of unrecognized flags -# in an exception handler. -# If flagvalue is the empty string, then this exception is an due to a -# reference to a flag that was not already defined. -class UnrecognizedFlagError(UnrecognizedFlag): - def __init__(self, flagname, flagvalue=''): - self.flagname = flagname - self.flagvalue = flagvalue - UnrecognizedFlag.__init__( - self, "Unknown command line flag '%s'" % flagname) - -# Global variable used by expvar -_exported_flags = {} -_help_width = 80 # width of help output - - -def GetHelpWidth(): - """Returns: an integer, the width of help lines that is used in TextWrap.""" - if (not sys.stdout.isatty()) or (termios is None) or (fcntl is None): - return _help_width - try: - data = fcntl.ioctl(sys.stdout, termios.TIOCGWINSZ, '1234') - columns = struct.unpack('hh', data)[1] - # Emacs mode returns 0. - # Here we assume that any value below 40 is unreasonable - if columns >= 40: - return columns - # Returning an int as default is fine, int(int) just return the int. - return int(os.getenv('COLUMNS', _help_width)) - - except (TypeError, IOError, struct.error): - return _help_width - - -def CutCommonSpacePrefix(text): - """Removes a common space prefix from the lines of a multiline text. - - If the first line does not start with a space, it is left as it is and - only in the remaining lines a common space prefix is being searched - for. That means the first line will stay untouched. This is especially - useful to turn doc strings into help texts. This is because some - people prefer to have the doc comment start already after the - apostrophe and then align the following lines while others have the - apostrophes on a separate line. - - The function also drops trailing empty lines and ignores empty lines - following the initial content line while calculating the initial - common whitespace. - - Args: - text: text to work on - - Returns: - the resulting text - """ - text_lines = text.splitlines() - # Drop trailing empty lines - while text_lines and not text_lines[-1]: - text_lines = text_lines[:-1] - if text_lines: - # We got some content, is the first line starting with a space? - if text_lines[0] and text_lines[0][0].isspace(): - text_first_line = [] - else: - text_first_line = [text_lines.pop(0)] - # Calculate length of common leading whitespace (only over content lines) - common_prefix = os.path.commonprefix([line for line in text_lines if line]) - space_prefix_len = len(common_prefix) - len(common_prefix.lstrip()) - # If we have a common space prefix, drop it from all lines - if space_prefix_len: - for index in xrange(len(text_lines)): - if text_lines[index]: - text_lines[index] = text_lines[index][space_prefix_len:] - return '\n'.join(text_first_line + text_lines) - return '' - - -def TextWrap(text, length=None, indent='', firstline_indent=None, tabs=' '): - """Wraps a given text to a maximum line length and returns it. - - We turn lines that only contain whitespace into empty lines. We keep - new lines and tabs (e.g., we do not treat tabs as spaces). - - Args: - text: text to wrap - length: maximum length of a line, includes indentation - if this is None then use GetHelpWidth() - indent: indent for all but first line - firstline_indent: indent for first line; if None, fall back to indent - tabs: replacement for tabs - - Returns: - wrapped text - - Raises: - FlagsError: if indent not shorter than length - FlagsError: if firstline_indent not shorter than length - """ - # Get defaults where callee used None - if length is None: - length = GetHelpWidth() - if indent is None: - indent = '' - if len(indent) >= length: - raise FlagsError('Indent must be shorter than length') - # In line we will be holding the current line which is to be started - # with indent (or firstline_indent if available) and then appended - # with words. - if firstline_indent is None: - firstline_indent = '' - line = indent - else: - line = firstline_indent - if len(firstline_indent) >= length: - raise FlagsError('First line indent must be shorter than length') - - # If the callee does not care about tabs we simply convert them to - # spaces If callee wanted tabs to be single space then we do that - # already here. - if not tabs or tabs == ' ': - text = text.replace('\t', ' ') - else: - tabs_are_whitespace = not tabs.strip() - - line_regex = re.compile('([ ]*)(\t*)([^ \t]+)', re.MULTILINE) - - # Split the text into lines and the lines with the regex above. The - # resulting lines are collected in result[]. For each split we get the - # spaces, the tabs and the next non white space (e.g. next word). - result = [] - for text_line in text.splitlines(): - # Store result length so we can find out whether processing the next - # line gave any new content - old_result_len = len(result) - # Process next line with line_regex. For optimization we do an rstrip(). - # - process tabs (changes either line or word, see below) - # - process word (first try to squeeze on line, then wrap or force wrap) - # Spaces found on the line are ignored, they get added while wrapping as - # needed. - for spaces, current_tabs, word in line_regex.findall(text_line.rstrip()): - # If tabs weren't converted to spaces, handle them now - if current_tabs: - # If the last thing we added was a space anyway then drop - # it. But let's not get rid of the indentation. - if (((result and line != indent) or - (not result and line != firstline_indent)) and line[-1] == ' '): - line = line[:-1] - # Add the tabs, if that means adding whitespace, just add it at - # the line, the rstrip() code while shorten the line down if - # necessary - if tabs_are_whitespace: - line += tabs * len(current_tabs) - else: - # if not all tab replacement is whitespace we prepend it to the word - word = tabs * len(current_tabs) + word - # Handle the case where word cannot be squeezed onto current last line - if len(line) + len(word) > length and len(indent) + len(word) <= length: - result.append(line.rstrip()) - line = indent + word - word = '' - # No space left on line or can we append a space? - if len(line) + 1 >= length: - result.append(line.rstrip()) - line = indent - else: - line += ' ' - # Add word and shorten it up to allowed line length. Restart next - # line with indent and repeat, or add a space if we're done (word - # finished) This deals with words that cannot fit on one line - # (e.g. indent + word longer than allowed line length). - while len(line) + len(word) >= length: - line += word - result.append(line[:length]) - word = line[length:] - line = indent - # Default case, simply append the word and a space - if word: - line += word + ' ' - # End of input line. If we have content we finish the line. If the - # current line is just the indent but we had content in during this - # original line then we need to add an empty line. - if (result and line != indent) or (not result and line != firstline_indent): - result.append(line.rstrip()) - elif len(result) == old_result_len: - result.append('') - line = indent - - return '\n'.join(result) - - -def DocToHelp(doc): - """Takes a __doc__ string and reformats it as help.""" - - # Get rid of starting and ending white space. Using lstrip() or even - # strip() could drop more than maximum of first line and right space - # of last line. - doc = doc.strip() - - # Get rid of all empty lines - whitespace_only_line = re.compile('^[ \t]+$', re.M) - doc = whitespace_only_line.sub('', doc) - - # Cut out common space at line beginnings - doc = CutCommonSpacePrefix(doc) - - # Just like this module's comment, comments tend to be aligned somehow. - # In other words they all start with the same amount of white space - # 1) keep double new lines - # 2) keep ws after new lines if not empty line - # 3) all other new lines shall be changed to a space - # Solution: Match new lines between non white space and replace with space. - doc = re.sub('(?<=\S)\n(?=\S)', ' ', doc, re.M) - - return doc - - -def _GetModuleObjectAndName(globals_dict): - """Returns the module that defines a global environment, and its name. - - Args: - globals_dict: A dictionary that should correspond to an environment - providing the values of the globals. - - Returns: - A pair consisting of (1) module object and (2) module name (a - string). Returns (None, None) if the module could not be - identified. - """ - # The use of .items() (instead of .iteritems()) is NOT a mistake: if - # a parallel thread imports a module while we iterate over - # .iteritems() (not nice, but possible), we get a RuntimeError ... - # Hence, we use the slightly slower but safer .items(). - for name, module in sys.modules.items(): - if getattr(module, '__dict__', None) is globals_dict: - if name == '__main__': - # Pick a more informative name for the main module. - name = sys.argv[0] - return (module, name) - return (None, None) - - -def _GetMainModule(): - """Returns: string, name of the module from which execution started.""" - # First, try to use the same logic used by _GetCallingModuleObjectAndName(), - # i.e., call _GetModuleObjectAndName(). For that we first need to - # find the dictionary that the main module uses to store the - # globals. - # - # That's (normally) the same dictionary object that the deepest - # (oldest) stack frame is using for globals. - deepest_frame = sys._getframe(0) - while deepest_frame.f_back is not None: - deepest_frame = deepest_frame.f_back - globals_for_main_module = deepest_frame.f_globals - main_module_name = _GetModuleObjectAndName(globals_for_main_module)[1] - # The above strategy fails in some cases (e.g., tools that compute - # code coverage by redefining, among other things, the main module). - # If so, just use sys.argv[0]. We can probably always do this, but - # it's safest to try to use the same logic as _GetCallingModuleObjectAndName() - if main_module_name is None: - main_module_name = sys.argv[0] - return main_module_name - - -class FlagValues: - """Registry of 'Flag' objects. - - A 'FlagValues' can then scan command line arguments, passing flag - arguments through to the 'Flag' objects that it owns. It also - provides easy access to the flag values. Typically only one - 'FlagValues' object is needed by an application: gflags.FLAGS - - This class is heavily overloaded: - - 'Flag' objects are registered via __setitem__: - FLAGS['longname'] = x # register a new flag - - The .value attribute of the registered 'Flag' objects can be accessed - as attributes of this 'FlagValues' object, through __getattr__. Both - the long and short name of the original 'Flag' objects can be used to - access its value: - FLAGS.longname # parsed flag value - FLAGS.x # parsed flag value (short name) - - Command line arguments are scanned and passed to the registered 'Flag' - objects through the __call__ method. Unparsed arguments, including - argv[0] (e.g. the program name) are returned. - argv = FLAGS(sys.argv) # scan command line arguments - - The original registered Flag objects can be retrieved through the use - of the dictionary-like operator, __getitem__: - x = FLAGS['longname'] # access the registered Flag object - - The str() operator of a 'FlagValues' object provides help for all of - the registered 'Flag' objects. - """ - - def __init__(self): - # Since everything in this class is so heavily overloaded, the only - # way of defining and using fields is to access __dict__ directly. - - # Dictionary: flag name (string) -> Flag object. - self.__dict__['__flags'] = {} - # Dictionary: module name (string) -> list of Flag objects that are defined - # by that module. - self.__dict__['__flags_by_module'] = {} - # Dictionary: module id (int) -> list of Flag objects that are defined by - # that module. - self.__dict__['__flags_by_module_id'] = {} - # Dictionary: module name (string) -> list of Flag objects that are - # key for that module. - self.__dict__['__key_flags_by_module'] = {} - - # Set if we should use new style gnu_getopt rather than getopt when parsing - # the args. Only possible with Python 2.3+ - self.UseGnuGetOpt(False) - - def UseGnuGetOpt(self, use_gnu_getopt=True): - """Use GNU-style scanning. Allows mixing of flag and non-flag arguments. - - See http://docs.python.org/library/getopt.html#getopt.gnu_getopt - - Args: - use_gnu_getopt: wether or not to use GNU style scanning. - """ - self.__dict__['__use_gnu_getopt'] = use_gnu_getopt - - def IsGnuGetOpt(self): - return self.__dict__['__use_gnu_getopt'] - - def FlagDict(self): - return self.__dict__['__flags'] - - def FlagsByModuleDict(self): - """Returns the dictionary of module_name -> list of defined flags. - - Returns: - A dictionary. Its keys are module names (strings). Its values - are lists of Flag objects. - """ - return self.__dict__['__flags_by_module'] - - def FlagsByModuleIdDict(self): - """Returns the dictionary of module_id -> list of defined flags. - - Returns: - A dictionary. Its keys are module IDs (ints). Its values - are lists of Flag objects. - """ - return self.__dict__['__flags_by_module_id'] - - def KeyFlagsByModuleDict(self): - """Returns the dictionary of module_name -> list of key flags. - - Returns: - A dictionary. Its keys are module names (strings). Its values - are lists of Flag objects. - """ - return self.__dict__['__key_flags_by_module'] - - def _RegisterFlagByModule(self, module_name, flag): - """Records the module that defines a specific flag. - - We keep track of which flag is defined by which module so that we - can later sort the flags by module. - - Args: - module_name: A string, the name of a Python module. - flag: A Flag object, a flag that is key to the module. - """ - flags_by_module = self.FlagsByModuleDict() - flags_by_module.setdefault(module_name, []).append(flag) - - def _RegisterFlagByModuleId(self, module_id, flag): - """Records the module that defines a specific flag. - - Args: - module_id: An int, the ID of the Python module. - flag: A Flag object, a flag that is key to the module. - """ - flags_by_module_id = self.FlagsByModuleIdDict() - flags_by_module_id.setdefault(module_id, []).append(flag) - - def _RegisterKeyFlagForModule(self, module_name, flag): - """Specifies that a flag is a key flag for a module. - - Args: - module_name: A string, the name of a Python module. - flag: A Flag object, a flag that is key to the module. - """ - key_flags_by_module = self.KeyFlagsByModuleDict() - # The list of key flags for the module named module_name. - key_flags = key_flags_by_module.setdefault(module_name, []) - # Add flag, but avoid duplicates. - if flag not in key_flags: - key_flags.append(flag) - - def _GetFlagsDefinedByModule(self, module): - """Returns the list of flags defined by a module. - - Args: - module: A module object or a module name (a string). - - Returns: - A new list of Flag objects. Caller may update this list as he - wishes: none of those changes will affect the internals of this - FlagValue object. - """ - if not isinstance(module, str): - module = module.__name__ - - return list(self.FlagsByModuleDict().get(module, [])) - - def _GetKeyFlagsForModule(self, module): - """Returns the list of key flags for a module. - - Args: - module: A module object or a module name (a string) - - Returns: - A new list of Flag objects. Caller may update this list as he - wishes: none of those changes will affect the internals of this - FlagValue object. - """ - if not isinstance(module, str): - module = module.__name__ - - # Any flag is a key flag for the module that defined it. NOTE: - # key_flags is a fresh list: we can update it without affecting the - # internals of this FlagValues object. - key_flags = self._GetFlagsDefinedByModule(module) - - # Take into account flags explicitly declared as key for a module. - for flag in self.KeyFlagsByModuleDict().get(module, []): - if flag not in key_flags: - key_flags.append(flag) - return key_flags - - def FindModuleDefiningFlag(self, flagname, default=None): - """Return the name of the module defining this flag, or default. - - Args: - flagname: Name of the flag to lookup. - default: Value to return if flagname is not defined. Defaults - to None. - - Returns: - The name of the module which registered the flag with this name. - If no such module exists (i.e. no flag with this name exists), - we return default. - """ - for module, flags in self.FlagsByModuleDict().iteritems(): - for flag in flags: - if flag.name == flagname or flag.short_name == flagname: - return module - return default - - def FindModuleIdDefiningFlag(self, flagname, default=None): - """Return the ID of the module defining this flag, or default. - - Args: - flagname: Name of the flag to lookup. - default: Value to return if flagname is not defined. Defaults - to None. - - Returns: - The ID of the module which registered the flag with this name. - If no such module exists (i.e. no flag with this name exists), - we return default. - """ - for module_id, flags in self.FlagsByModuleIdDict().iteritems(): - for flag in flags: - if flag.name == flagname or flag.short_name == flagname: - return module_id - return default - - def AppendFlagValues(self, flag_values): - """Appends flags registered in another FlagValues instance. - - Args: - flag_values: registry to copy from - """ - for flag_name, flag in flag_values.FlagDict().iteritems(): - # Each flags with shortname appears here twice (once under its - # normal name, and again with its short name). To prevent - # problems (DuplicateFlagError) with double flag registration, we - # perform a check to make sure that the entry we're looking at is - # for its normal name. - if flag_name == flag.name: - try: - self[flag_name] = flag - except DuplicateFlagError: - raise DuplicateFlagError(flag_name, self, - other_flag_values=flag_values) - - def RemoveFlagValues(self, flag_values): - """Remove flags that were previously appended from another FlagValues. - - Args: - flag_values: registry containing flags to remove. - """ - for flag_name in flag_values.FlagDict(): - self.__delattr__(flag_name) - - def __setitem__(self, name, flag): - """Registers a new flag variable.""" - fl = self.FlagDict() - if not isinstance(flag, Flag): - raise IllegalFlagValue(flag) - if not isinstance(name, type("")): - raise FlagsError("Flag name must be a string") - if len(name) == 0: - raise FlagsError("Flag name cannot be empty") - # If running under pychecker, duplicate keys are likely to be - # defined. Disable check for duplicate keys when pycheck'ing. - if (name in fl and not flag.allow_override and - not fl[name].allow_override and not _RUNNING_PYCHECKER): - module, module_name = _GetCallingModuleObjectAndName() - if (self.FindModuleDefiningFlag(name) == module_name and - id(module) != self.FindModuleIdDefiningFlag(name)): - # If the flag has already been defined by a module with the same name, - # but a different ID, we can stop here because it indicates that the - # module is simply being imported a subsequent time. - return - raise DuplicateFlagError(name, self) - short_name = flag.short_name - if short_name is not None: - if (short_name in fl and not flag.allow_override and - not fl[short_name].allow_override and not _RUNNING_PYCHECKER): - raise DuplicateFlagError(short_name, self) - fl[short_name] = flag - fl[name] = flag - global _exported_flags - _exported_flags[name] = flag - - def __getitem__(self, name): - """Retrieves the Flag object for the flag --name.""" - return self.FlagDict()[name] - - def __getattr__(self, name): - """Retrieves the 'value' attribute of the flag --name.""" - fl = self.FlagDict() - if name not in fl: - raise AttributeError(name) - return fl[name].value - - def __setattr__(self, name, value): - """Sets the 'value' attribute of the flag --name.""" - fl = self.FlagDict() - fl[name].value = value - self._AssertValidators(fl[name].validators) - return value - - def _AssertAllValidators(self): - all_validators = set() - for flag in self.FlagDict().itervalues(): - for validator in flag.validators: - all_validators.add(validator) - self._AssertValidators(all_validators) - - def _AssertValidators(self, validators): - """Assert if all validators in the list are satisfied. - - Asserts validators in the order they were created. - Args: - validators: Iterable(gflags_validators.Validator), validators to be - verified - Raises: - AttributeError: if validators work with a non-existing flag. - IllegalFlagValue: if validation fails for at least one validator - """ - for validator in sorted( - validators, key=lambda validator: validator.insertion_index): - try: - validator.Verify(self) - except gflags_validators.Error, e: - message = validator.PrintFlagsWithValues(self) - raise IllegalFlagValue('%s: %s' % (message, str(e))) - - def _FlagIsRegistered(self, flag_obj): - """Checks whether a Flag object is registered under some name. - - Note: this is non trivial: in addition to its normal name, a flag - may have a short name too. In self.FlagDict(), both the normal and - the short name are mapped to the same flag object. E.g., calling - only "del FLAGS.short_name" is not unregistering the corresponding - Flag object (it is still registered under the longer name). - - Args: - flag_obj: A Flag object. - - Returns: - A boolean: True iff flag_obj is registered under some name. - """ - flag_dict = self.FlagDict() - # Check whether flag_obj is registered under its long name. - name = flag_obj.name - if flag_dict.get(name, None) == flag_obj: - return True - # Check whether flag_obj is registered under its short name. - short_name = flag_obj.short_name - if (short_name is not None and - flag_dict.get(short_name, None) == flag_obj): - return True - # The flag cannot be registered under any other name, so we do not - # need to do a full search through the values of self.FlagDict(). - return False - - def __delattr__(self, flag_name): - """Deletes a previously-defined flag from a flag object. - - This method makes sure we can delete a flag by using - - del flag_values_object.<flag_name> - - E.g., - - gflags.DEFINE_integer('foo', 1, 'Integer flag.') - del gflags.FLAGS.foo - - Args: - flag_name: A string, the name of the flag to be deleted. - - Raises: - AttributeError: When there is no registered flag named flag_name. - """ - fl = self.FlagDict() - if flag_name not in fl: - raise AttributeError(flag_name) - - flag_obj = fl[flag_name] - del fl[flag_name] - - if not self._FlagIsRegistered(flag_obj): - # If the Flag object indicated by flag_name is no longer - # registered (please see the docstring of _FlagIsRegistered), then - # we delete the occurrences of the flag object in all our internal - # dictionaries. - self.__RemoveFlagFromDictByModule(self.FlagsByModuleDict(), flag_obj) - self.__RemoveFlagFromDictByModule(self.FlagsByModuleIdDict(), flag_obj) - self.__RemoveFlagFromDictByModule(self.KeyFlagsByModuleDict(), flag_obj) - - def __RemoveFlagFromDictByModule(self, flags_by_module_dict, flag_obj): - """Removes a flag object from a module -> list of flags dictionary. - - Args: - flags_by_module_dict: A dictionary that maps module names to lists of - flags. - flag_obj: A flag object. - """ - for unused_module, flags_in_module in flags_by_module_dict.iteritems(): - # while (as opposed to if) takes care of multiple occurrences of a - # flag in the list for the same module. - while flag_obj in flags_in_module: - flags_in_module.remove(flag_obj) - - def SetDefault(self, name, value): - """Changes the default value of the named flag object.""" - fl = self.FlagDict() - if name not in fl: - raise AttributeError(name) - fl[name].SetDefault(value) - self._AssertValidators(fl[name].validators) - - def __contains__(self, name): - """Returns True if name is a value (flag) in the dict.""" - return name in self.FlagDict() - - has_key = __contains__ # a synonym for __contains__() - - def __iter__(self): - return iter(self.FlagDict()) - - def __call__(self, argv): - """Parses flags from argv; stores parsed flags into this FlagValues object. - - All unparsed arguments are returned. Flags are parsed using the GNU - Program Argument Syntax Conventions, using getopt: - - http://www.gnu.org/software/libc/manual/html_mono/libc.html#Getopt - - Args: - argv: argument list. Can be of any type that may be converted to a list. - - Returns: - The list of arguments not parsed as options, including argv[0] - - Raises: - FlagsError: on any parsing error - """ - # Support any sequence type that can be converted to a list - argv = list(argv) - - shortopts = "" - longopts = [] - - fl = self.FlagDict() - - # This pre parses the argv list for --flagfile=<> options. - argv = argv[:1] + self.ReadFlagsFromFiles(argv[1:], force_gnu=False) - - # Correct the argv to support the google style of passing boolean - # parameters. Boolean parameters may be passed by using --mybool, - # --nomybool, --mybool=(true|false|1|0). getopt does not support - # having options that may or may not have a parameter. We replace - # instances of the short form --mybool and --nomybool with their - # full forms: --mybool=(true|false). - original_argv = list(argv) # list() makes a copy - shortest_matches = None - for name, flag in fl.items(): - if not flag.boolean: - continue - if shortest_matches is None: - # Determine the smallest allowable prefix for all flag names - shortest_matches = self.ShortestUniquePrefixes(fl) - no_name = 'no' + name - prefix = shortest_matches[name] - no_prefix = shortest_matches[no_name] - - # Replace all occurrences of this boolean with extended forms - for arg_idx in range(1, len(argv)): - arg = argv[arg_idx] - if arg.find('=') >= 0: continue - if arg.startswith('--'+prefix) and ('--'+name).startswith(arg): - argv[arg_idx] = ('--%s=true' % name) - elif arg.startswith('--'+no_prefix) and ('--'+no_name).startswith(arg): - argv[arg_idx] = ('--%s=false' % name) - - # Loop over all of the flags, building up the lists of short options - # and long options that will be passed to getopt. Short options are - # specified as a string of letters, each letter followed by a colon - # if it takes an argument. Long options are stored in an array of - # strings. Each string ends with an '=' if it takes an argument. - for name, flag in fl.items(): - longopts.append(name + "=") - if len(name) == 1: # one-letter option: allow short flag type also - shortopts += name - if not flag.boolean: - shortopts += ":" - - longopts.append('undefok=') - undefok_flags = [] - - # In case --undefok is specified, loop to pick up unrecognized - # options one by one. - unrecognized_opts = [] - args = argv[1:] - while True: - try: - if self.__dict__['__use_gnu_getopt']: - optlist, unparsed_args = getopt.gnu_getopt(args, shortopts, longopts) - else: - optlist, unparsed_args = getopt.getopt(args, shortopts, longopts) - break - except getopt.GetoptError, e: - if not e.opt or e.opt in fl: - # Not an unrecognized option, re-raise the exception as a FlagsError - raise FlagsError(e) - # Remove offender from args and try again - for arg_index in range(len(args)): - if ((args[arg_index] == '--' + e.opt) or - (args[arg_index] == '-' + e.opt) or - (args[arg_index].startswith('--' + e.opt + '='))): - unrecognized_opts.append((e.opt, args[arg_index])) - args = args[0:arg_index] + args[arg_index+1:] - break - else: - # We should have found the option, so we don't expect to get - # here. We could assert, but raising the original exception - # might work better. - raise FlagsError(e) - - for name, arg in optlist: - if name == '--undefok': - flag_names = arg.split(',') - undefok_flags.extend(flag_names) - # For boolean flags, if --undefok=boolflag is specified, then we should - # also accept --noboolflag, in addition to --boolflag. - # Since we don't know the type of the undefok'd flag, this will affect - # non-boolean flags as well. - # NOTE: You shouldn't use --undefok=noboolflag, because then we will - # accept --nonoboolflag here. We are choosing not to do the conversion - # from noboolflag -> boolflag because of the ambiguity that flag names - # can start with 'no'. - undefok_flags.extend('no' + name for name in flag_names) - continue - if name.startswith('--'): - # long option - name = name[2:] - short_option = 0 - else: - # short option - name = name[1:] - short_option = 1 - if name in fl: - flag = fl[name] - if flag.boolean and short_option: arg = 1 - flag.Parse(arg) - - # If there were unrecognized options, raise an exception unless - # the options were named via --undefok. - for opt, value in unrecognized_opts: - if opt not in undefok_flags: - raise UnrecognizedFlagError(opt, value) - - if unparsed_args: - if self.__dict__['__use_gnu_getopt']: - # if using gnu_getopt just return the program name + remainder of argv. - ret_val = argv[:1] + unparsed_args - else: - # unparsed_args becomes the first non-flag detected by getopt to - # the end of argv. Because argv may have been modified above, - # return original_argv for this region. - ret_val = argv[:1] + original_argv[-len(unparsed_args):] - else: - ret_val = argv[:1] - - self._AssertAllValidators() - return ret_val - - def Reset(self): - """Resets the values to the point before FLAGS(argv) was called.""" - for f in self.FlagDict().values(): - f.Unparse() - - def RegisteredFlags(self): - """Returns: a list of the names and short names of all registered flags.""" - return list(self.FlagDict()) - - def FlagValuesDict(self): - """Returns: a dictionary that maps flag names to flag values.""" - flag_values = {} - - for flag_name in self.RegisteredFlags(): - flag = self.FlagDict()[flag_name] - flag_values[flag_name] = flag.value - - return flag_values - - def __str__(self): - """Generates a help string for all known flags.""" - return self.GetHelp() - - def GetHelp(self, prefix=''): - """Generates a help string for all known flags.""" - helplist = [] - - flags_by_module = self.FlagsByModuleDict() - if flags_by_module: - - modules = sorted(flags_by_module) - - # Print the help for the main module first, if possible. - main_module = _GetMainModule() - if main_module in modules: - modules.remove(main_module) - modules = [main_module] + modules - - for module in modules: - self.__RenderOurModuleFlags(module, helplist) - - self.__RenderModuleFlags('gflags', - _SPECIAL_FLAGS.FlagDict().values(), - helplist) - - else: - # Just print one long list of flags. - self.__RenderFlagList( - self.FlagDict().values() + _SPECIAL_FLAGS.FlagDict().values(), - helplist, prefix) - - return '\n'.join(helplist) - - def __RenderModuleFlags(self, module, flags, output_lines, prefix=""): - """Generates a help string for a given module.""" - if not isinstance(module, str): - module = module.__name__ - output_lines.append('\n%s%s:' % (prefix, module)) - self.__RenderFlagList(flags, output_lines, prefix + " ") - - def __RenderOurModuleFlags(self, module, output_lines, prefix=""): - """Generates a help string for a given module.""" - flags = self._GetFlagsDefinedByModule(module) - if flags: - self.__RenderModuleFlags(module, flags, output_lines, prefix) - - def __RenderOurModuleKeyFlags(self, module, output_lines, prefix=""): - """Generates a help string for the key flags of a given module. - - Args: - module: A module object or a module name (a string). - output_lines: A list of strings. The generated help message - lines will be appended to this list. - prefix: A string that is prepended to each generated help line. - """ - key_flags = self._GetKeyFlagsForModule(module) - if key_flags: - self.__RenderModuleFlags(module, key_flags, output_lines, prefix) - - def ModuleHelp(self, module): - """Describe the key flags of a module. - - Args: - module: A module object or a module name (a string). - - Returns: - string describing the key flags of a module. - """ - helplist = [] - self.__RenderOurModuleKeyFlags(module, helplist) - return '\n'.join(helplist) - - def MainModuleHelp(self): - """Describe the key flags of the main module. - - Returns: - string describing the key flags of a module. - """ - return self.ModuleHelp(_GetMainModule()) - - def __RenderFlagList(self, flaglist, output_lines, prefix=" "): - fl = self.FlagDict() - special_fl = _SPECIAL_FLAGS.FlagDict() - flaglist = [(flag.name, flag) for flag in flaglist] - flaglist.sort() - flagset = {} - for (name, flag) in flaglist: - # It's possible this flag got deleted or overridden since being - # registered in the per-module flaglist. Check now against the - # canonical source of current flag information, the FlagDict. - if fl.get(name, None) != flag and special_fl.get(name, None) != flag: - # a different flag is using this name now - continue - # only print help once - if flag in flagset: continue - flagset[flag] = 1 - flaghelp = "" - if flag.short_name: flaghelp += "-%s," % flag.short_name - if flag.boolean: - flaghelp += "--[no]%s" % flag.name + ":" - else: - flaghelp += "--%s" % flag.name + ":" - flaghelp += " " - if flag.help: - flaghelp += flag.help - flaghelp = TextWrap(flaghelp, indent=prefix+" ", - firstline_indent=prefix) - if flag.default_as_str: - flaghelp += "\n" - flaghelp += TextWrap("(default: %s)" % flag.default_as_str, - indent=prefix+" ") - if flag.parser.syntactic_help: - flaghelp += "\n" - flaghelp += TextWrap("(%s)" % flag.parser.syntactic_help, - indent=prefix+" ") - output_lines.append(flaghelp) - - def get(self, name, default): - """Returns the value of a flag (if not None) or a default value. - - Args: - name: A string, the name of a flag. - default: Default value to use if the flag value is None. - """ - - value = self.__getattr__(name) - if value is not None: # Can't do if not value, b/c value might be '0' or "" - return value - else: - return default - - def ShortestUniquePrefixes(self, fl): - """Returns: dictionary; maps flag names to their shortest unique prefix.""" - # Sort the list of flag names - sorted_flags = [] - for name, flag in fl.items(): - sorted_flags.append(name) - if flag.boolean: - sorted_flags.append('no%s' % name) - sorted_flags.sort() - - # For each name in the sorted list, determine the shortest unique - # prefix by comparing itself to the next name and to the previous - # name (the latter check uses cached info from the previous loop). - shortest_matches = {} - prev_idx = 0 - for flag_idx in range(len(sorted_flags)): - curr = sorted_flags[flag_idx] - if flag_idx == (len(sorted_flags) - 1): - next = None - else: - next = sorted_flags[flag_idx+1] - next_len = len(next) - for curr_idx in range(len(curr)): - if (next is None - or curr_idx >= next_len - or curr[curr_idx] != next[curr_idx]): - # curr longer than next or no more chars in common - shortest_matches[curr] = curr[:max(prev_idx, curr_idx) + 1] - prev_idx = curr_idx - break - else: - # curr shorter than (or equal to) next - shortest_matches[curr] = curr - prev_idx = curr_idx + 1 # next will need at least one more char - return shortest_matches - - def __IsFlagFileDirective(self, flag_string): - """Checks whether flag_string contain a --flagfile=<foo> directive.""" - if isinstance(flag_string, type("")): - if flag_string.startswith('--flagfile='): - return 1 - elif flag_string == '--flagfile': - return 1 - elif flag_string.startswith('-flagfile='): - return 1 - elif flag_string == '-flagfile': - return 1 - else: - return 0 - return 0 - - def ExtractFilename(self, flagfile_str): - """Returns filename from a flagfile_str of form -[-]flagfile=filename. - - The cases of --flagfile foo and -flagfile foo shouldn't be hitting - this function, as they are dealt with in the level above this - function. - """ - if flagfile_str.startswith('--flagfile='): - return os.path.expanduser((flagfile_str[(len('--flagfile=')):]).strip()) - elif flagfile_str.startswith('-flagfile='): - return os.path.expanduser((flagfile_str[(len('-flagfile=')):]).strip()) - else: - raise FlagsError('Hit illegal --flagfile type: %s' % flagfile_str) - - def __GetFlagFileLines(self, filename, parsed_file_list): - """Returns the useful (!=comments, etc) lines from a file with flags. - - Args: - filename: A string, the name of the flag file. - parsed_file_list: A list of the names of the files we have - already read. MUTATED BY THIS FUNCTION. - - Returns: - List of strings. See the note below. - - NOTE(springer): This function checks for a nested --flagfile=<foo> - tag and handles the lower file recursively. It returns a list of - all the lines that _could_ contain command flags. This is - EVERYTHING except whitespace lines and comments (lines starting - with '#' or '//'). - """ - line_list = [] # All line from flagfile. - flag_line_list = [] # Subset of lines w/o comments, blanks, flagfile= tags. - try: - file_obj = open(filename, 'r') - except IOError, e_msg: - raise CantOpenFlagFileError('ERROR:: Unable to open flagfile: %s' % e_msg) - - line_list = file_obj.readlines() - file_obj.close() - parsed_file_list.append(filename) - - # This is where we check each line in the file we just read. - for line in line_list: - if line.isspace(): - pass - # Checks for comment (a line that starts with '#'). - elif line.startswith('#') or line.startswith('//'): - pass - # Checks for a nested "--flagfile=<bar>" flag in the current file. - # If we find one, recursively parse down into that file. - elif self.__IsFlagFileDirective(line): - sub_filename = self.ExtractFilename(line) - # We do a little safety check for reparsing a file we've already done. - if not sub_filename in parsed_file_list: - included_flags = self.__GetFlagFileLines(sub_filename, - parsed_file_list) - flag_line_list.extend(included_flags) - else: # Case of hitting a circularly included file. - sys.stderr.write('Warning: Hit circular flagfile dependency: %s\n' % - (sub_filename,)) - else: - # Any line that's not a comment or a nested flagfile should get - # copied into 2nd position. This leaves earlier arguments - # further back in the list, thus giving them higher priority. - flag_line_list.append(line.strip()) - return flag_line_list - - def ReadFlagsFromFiles(self, argv, force_gnu=True): - """Processes command line args, but also allow args to be read from file. - - Args: - argv: A list of strings, usually sys.argv[1:], which may contain one or - more flagfile directives of the form --flagfile="./filename". - Note that the name of the program (sys.argv[0]) should be omitted. - force_gnu: If False, --flagfile parsing obeys normal flag semantics. - If True, --flagfile parsing instead follows gnu_getopt semantics. - *** WARNING *** force_gnu=False may become the future default! - - Returns: - - A new list which has the original list combined with what we read - from any flagfile(s). - - References: Global gflags.FLAG class instance. - - This function should be called before the normal FLAGS(argv) call. - This function scans the input list for a flag that looks like: - --flagfile=<somefile>. Then it opens <somefile>, reads all valid key - and value pairs and inserts them into the input list between the - first item of the list and any subsequent items in the list. - - Note that your application's flags are still defined the usual way - using gflags DEFINE_flag() type functions. - - Notes (assuming we're getting a commandline of some sort as our input): - --> Flags from the command line argv _should_ always take precedence! - --> A further "--flagfile=<otherfile.cfg>" CAN be nested in a flagfile. - It will be processed after the parent flag file is done. - --> For duplicate flags, first one we hit should "win". - --> In a flagfile, a line beginning with # or // is a comment. - --> Entirely blank lines _should_ be ignored. - """ - parsed_file_list = [] - rest_of_args = argv - new_argv = [] - while rest_of_args: - current_arg = rest_of_args[0] - rest_of_args = rest_of_args[1:] - if self.__IsFlagFileDirective(current_arg): - # This handles the case of -(-)flagfile foo. In this case the - # next arg really is part of this one. - if current_arg == '--flagfile' or current_arg == '-flagfile': - if not rest_of_args: - raise IllegalFlagValue('--flagfile with no argument') - flag_filename = os.path.expanduser(rest_of_args[0]) - rest_of_args = rest_of_args[1:] - else: - # This handles the case of (-)-flagfile=foo. - flag_filename = self.ExtractFilename(current_arg) - new_argv.extend( - self.__GetFlagFileLines(flag_filename, parsed_file_list)) - else: - new_argv.append(current_arg) - # Stop parsing after '--', like getopt and gnu_getopt. - if current_arg == '--': - break - # Stop parsing after a non-flag, like getopt. - if not current_arg.startswith('-'): - if not force_gnu and not self.__dict__['__use_gnu_getopt']: - break - - if rest_of_args: - new_argv.extend(rest_of_args) - - return new_argv - - def FlagsIntoString(self): - """Returns a string with the flags assignments from this FlagValues object. - - This function ignores flags whose value is None. Each flag - assignment is separated by a newline. - - NOTE: MUST mirror the behavior of the C++ CommandlineFlagsIntoString - from http://code.google.com/p/google-gflags - """ - s = '' - for flag in self.FlagDict().values(): - if flag.value is not None: - s += flag.Serialize() + '\n' - return s - - def AppendFlagsIntoFile(self, filename): - """Appends all flags assignments from this FlagInfo object to a file. - - Output will be in the format of a flagfile. - - NOTE: MUST mirror the behavior of the C++ AppendFlagsIntoFile - from http://code.google.com/p/google-gflags - """ - out_file = open(filename, 'a') - out_file.write(self.FlagsIntoString()) - out_file.close() - - def WriteHelpInXMLFormat(self, outfile=None): - """Outputs flag documentation in XML format. - - NOTE: We use element names that are consistent with those used by - the C++ command-line flag library, from - http://code.google.com/p/google-gflags - We also use a few new elements (e.g., <key>), but we do not - interfere / overlap with existing XML elements used by the C++ - library. Please maintain this consistency. - - Args: - outfile: File object we write to. Default None means sys.stdout. - """ - outfile = outfile or sys.stdout - - outfile.write('<?xml version=\"1.0\"?>\n') - outfile.write('<AllFlags>\n') - indent = ' ' - _WriteSimpleXMLElement(outfile, 'program', os.path.basename(sys.argv[0]), - indent) - - usage_doc = sys.modules['__main__'].__doc__ - if not usage_doc: - usage_doc = '\nUSAGE: %s [flags]\n' % sys.argv[0] - else: - usage_doc = usage_doc.replace('%s', sys.argv[0]) - _WriteSimpleXMLElement(outfile, 'usage', usage_doc, indent) - - # Get list of key flags for the main module. - key_flags = self._GetKeyFlagsForModule(_GetMainModule()) - - # Sort flags by declaring module name and next by flag name. - flags_by_module = self.FlagsByModuleDict() - all_module_names = list(flags_by_module.keys()) - all_module_names.sort() - for module_name in all_module_names: - flag_list = [(f.name, f) for f in flags_by_module[module_name]] - flag_list.sort() - for unused_flag_name, flag in flag_list: - is_key = flag in key_flags - flag.WriteInfoInXMLFormat(outfile, module_name, - is_key=is_key, indent=indent) - - outfile.write('</AllFlags>\n') - outfile.flush() - - def AddValidator(self, validator): - """Register new flags validator to be checked. - - Args: - validator: gflags_validators.Validator - Raises: - AttributeError: if validators work with a non-existing flag. - """ - for flag_name in validator.GetFlagsNames(): - flag = self.FlagDict()[flag_name] - flag.validators.append(validator) - -# end of FlagValues definition - - -# The global FlagValues instance -FLAGS = FlagValues() - - -def _StrOrUnicode(value): - """Converts value to a python string or, if necessary, unicode-string.""" - try: - return str(value) - except UnicodeEncodeError: - return unicode(value) - - -def _MakeXMLSafe(s): - """Escapes <, >, and & from s, and removes XML 1.0-illegal chars.""" - s = cgi.escape(s) # Escape <, >, and & - # Remove characters that cannot appear in an XML 1.0 document - # (http://www.w3.org/TR/REC-xml/#charsets). - # - # NOTE: if there are problems with current solution, one may move to - # XML 1.1, which allows such chars, if they're entity-escaped (&#xHH;). - s = re.sub(r'[\x00-\x08\x0b\x0c\x0e-\x1f]', '', s) - # Convert non-ascii characters to entities. Note: requires python >=2.3 - s = s.encode('ascii', 'xmlcharrefreplace') # u'\xce\x88' -> 'uΈ' - return s - - -def _WriteSimpleXMLElement(outfile, name, value, indent): - """Writes a simple XML element. - - Args: - outfile: File object we write the XML element to. - name: A string, the name of XML element. - value: A Python object, whose string representation will be used - as the value of the XML element. - indent: A string, prepended to each line of generated output. - """ - value_str = _StrOrUnicode(value) - if isinstance(value, bool): - # Display boolean values as the C++ flag library does: no caps. - value_str = value_str.lower() - safe_value_str = _MakeXMLSafe(value_str) - outfile.write('%s<%s>%s</%s>\n' % (indent, name, safe_value_str, name)) - - -class Flag: - """Information about a command-line flag. - - 'Flag' objects define the following fields: - .name - the name for this flag - .default - the default value for this flag - .default_as_str - default value as repr'd string, e.g., "'true'" (or None) - .value - the most recent parsed value of this flag; set by Parse() - .help - a help string or None if no help is available - .short_name - the single letter alias for this flag (or None) - .boolean - if 'true', this flag does not accept arguments - .present - true if this flag was parsed from command line flags. - .parser - an ArgumentParser object - .serializer - an ArgumentSerializer object - .allow_override - the flag may be redefined without raising an error - - The only public method of a 'Flag' object is Parse(), but it is - typically only called by a 'FlagValues' object. The Parse() method is - a thin wrapper around the 'ArgumentParser' Parse() method. The parsed - value is saved in .value, and the .present attribute is updated. If - this flag was already present, a FlagsError is raised. - - Parse() is also called during __init__ to parse the default value and - initialize the .value attribute. This enables other python modules to - safely use flags even if the __main__ module neglects to parse the - command line arguments. The .present attribute is cleared after - __init__ parsing. If the default value is set to None, then the - __init__ parsing step is skipped and the .value attribute is - initialized to None. - - Note: The default value is also presented to the user in the help - string, so it is important that it be a legal value for this flag. - """ - - def __init__(self, parser, serializer, name, default, help_string, - short_name=None, boolean=0, allow_override=0): - self.name = name - - if not help_string: - help_string = '(no help available)' - - self.help = help_string - self.short_name = short_name - self.boolean = boolean - self.present = 0 - self.parser = parser - self.serializer = serializer - self.allow_override = allow_override - self.value = None - self.validators = [] - - self.SetDefault(default) - - def __hash__(self): - return hash(id(self)) - - def __eq__(self, other): - return self is other - - def __lt__(self, other): - if isinstance(other, Flag): - return id(self) < id(other) - return NotImplemented - - def __GetParsedValueAsString(self, value): - if value is None: - return None - if self.serializer: - return repr(self.serializer.Serialize(value)) - if self.boolean: - if value: - return repr('true') - else: - return repr('false') - return repr(_StrOrUnicode(value)) - - def Parse(self, argument): - try: - self.value = self.parser.Parse(argument) - except ValueError, e: # recast ValueError as IllegalFlagValue - raise IllegalFlagValue("flag --%s=%s: %s" % (self.name, argument, e)) - self.present += 1 - - def Unparse(self): - if self.default is None: - self.value = None - else: - self.Parse(self.default) - self.present = 0 - - def Serialize(self): - if self.value is None: - return '' - if self.boolean: - if self.value: - return "--%s" % self.name - else: - return "--no%s" % self.name - else: - if not self.serializer: - raise FlagsError("Serializer not present for flag %s" % self.name) - return "--%s=%s" % (self.name, self.serializer.Serialize(self.value)) - - def SetDefault(self, value): - """Changes the default value (and current value too) for this Flag.""" - # We can't allow a None override because it may end up not being - # passed to C++ code when we're overriding C++ flags. So we - # cowardly bail out until someone fixes the semantics of trying to - # pass None to a C++ flag. See swig_flags.Init() for details on - # this behavior. - # TODO(olexiy): Users can directly call this method, bypassing all flags - # validators (we don't have FlagValues here, so we can not check - # validators). - # The simplest solution I see is to make this method private. - # Another approach would be to store reference to the corresponding - # FlagValues with each flag, but this seems to be an overkill. - if value is None and self.allow_override: - raise DuplicateFlagCannotPropagateNoneToSwig(self.name) - - self.default = value - self.Unparse() - self.default_as_str = self.__GetParsedValueAsString(self.value) - - def Type(self): - """Returns: a string that describes the type of this Flag.""" - # NOTE: we use strings, and not the types.*Type constants because - # our flags can have more exotic types, e.g., 'comma separated list - # of strings', 'whitespace separated list of strings', etc. - return self.parser.Type() - - def WriteInfoInXMLFormat(self, outfile, module_name, is_key=False, indent=''): - """Writes common info about this flag, in XML format. - - This is information that is relevant to all flags (e.g., name, - meaning, etc.). If you defined a flag that has some other pieces of - info, then please override _WriteCustomInfoInXMLFormat. - - Please do NOT override this method. - - Args: - outfile: File object we write to. - module_name: A string, the name of the module that defines this flag. - is_key: A boolean, True iff this flag is key for main module. - indent: A string that is prepended to each generated line. - """ - outfile.write(indent + '<flag>\n') - inner_indent = indent + ' ' - if is_key: - _WriteSimpleXMLElement(outfile, 'key', 'yes', inner_indent) - _WriteSimpleXMLElement(outfile, 'file', module_name, inner_indent) - # Print flag features that are relevant for all flags. - _WriteSimpleXMLElement(outfile, 'name', self.name, inner_indent) - if self.short_name: - _WriteSimpleXMLElement(outfile, 'short_name', self.short_name, - inner_indent) - if self.help: - _WriteSimpleXMLElement(outfile, 'meaning', self.help, inner_indent) - # The default flag value can either be represented as a string like on the - # command line, or as a Python object. We serialize this value in the - # latter case in order to remain consistent. - if self.serializer and not isinstance(self.default, str): - default_serialized = self.serializer.Serialize(self.default) - else: - default_serialized = self.default - _WriteSimpleXMLElement(outfile, 'default', default_serialized, inner_indent) - _WriteSimpleXMLElement(outfile, 'current', self.value, inner_indent) - _WriteSimpleXMLElement(outfile, 'type', self.Type(), inner_indent) - # Print extra flag features this flag may have. - self._WriteCustomInfoInXMLFormat(outfile, inner_indent) - outfile.write(indent + '</flag>\n') - - def _WriteCustomInfoInXMLFormat(self, outfile, indent): - """Writes extra info about this flag, in XML format. - - "Extra" means "not already printed by WriteInfoInXMLFormat above." - - Args: - outfile: File object we write to. - indent: A string that is prepended to each generated line. - """ - # Usually, the parser knows the extra details about the flag, so - # we just forward the call to it. - self.parser.WriteCustomInfoInXMLFormat(outfile, indent) -# End of Flag definition - - -class _ArgumentParserCache(type): - """Metaclass used to cache and share argument parsers among flags.""" - - _instances = {} - - def __call__(mcs, *args, **kwargs): - """Returns an instance of the argument parser cls. - - This method overrides behavior of the __new__ methods in - all subclasses of ArgumentParser (inclusive). If an instance - for mcs with the same set of arguments exists, this instance is - returned, otherwise a new instance is created. - - If any keyword arguments are defined, or the values in args - are not hashable, this method always returns a new instance of - cls. - - Args: - args: Positional initializer arguments. - kwargs: Initializer keyword arguments. - - Returns: - An instance of cls, shared or new. - """ - if kwargs: - return type.__call__(mcs, *args, **kwargs) - else: - instances = mcs._instances - key = (mcs,) + tuple(args) - try: - return instances[key] - except KeyError: - # No cache entry for key exists, create a new one. - return instances.setdefault(key, type.__call__(mcs, *args)) - except TypeError: - # An object in args cannot be hashed, always return - # a new instance. - return type.__call__(mcs, *args) - - -class ArgumentParser(object): - """Base class used to parse and convert arguments. - - The Parse() method checks to make sure that the string argument is a - legal value and convert it to a native type. If the value cannot be - converted, it should throw a 'ValueError' exception with a human - readable explanation of why the value is illegal. - - Subclasses should also define a syntactic_help string which may be - presented to the user to describe the form of the legal values. - - Argument parser classes must be stateless, since instances are cached - and shared between flags. Initializer arguments are allowed, but all - member variables must be derived from initializer arguments only. - """ - __metaclass__ = _ArgumentParserCache - - syntactic_help = "" - - def Parse(self, argument): - """Default implementation: always returns its argument unmodified.""" - return argument - - def Type(self): - return 'string' - - def WriteCustomInfoInXMLFormat(self, outfile, indent): - pass - - -class ArgumentSerializer: - """Base class for generating string representations of a flag value.""" - - def Serialize(self, value): - return _StrOrUnicode(value) - - -class ListSerializer(ArgumentSerializer): - - def __init__(self, list_sep): - self.list_sep = list_sep - - def Serialize(self, value): - return self.list_sep.join([_StrOrUnicode(x) for x in value]) - - -# Flags validators - - -def RegisterValidator(flag_name, - checker, - message='Flag validation failed', - flag_values=FLAGS): - """Adds a constraint, which will be enforced during program execution. - - The constraint is validated when flags are initially parsed, and after each - change of the corresponding flag's value. - Args: - flag_name: string, name of the flag to be checked. - checker: method to validate the flag. - input - value of the corresponding flag (string, boolean, etc. - This value will be passed to checker by the library). See file's - docstring for examples. - output - Boolean. - Must return True if validator constraint is satisfied. - If constraint is not satisfied, it should either return False or - raise gflags_validators.Error(desired_error_message). - message: error text to be shown to the user if checker returns False. - If checker raises gflags_validators.Error, message from the raised - Error will be shown. - flag_values: FlagValues - Raises: - AttributeError: if flag_name is not registered as a valid flag name. - """ - flag_values.AddValidator(gflags_validators.SimpleValidator(flag_name, - checker, - message)) - - -def MarkFlagAsRequired(flag_name, flag_values=FLAGS): - """Ensure that flag is not None during program execution. - - Registers a flag validator, which will follow usual validator - rules. - Args: - flag_name: string, name of the flag - flag_values: FlagValues - Raises: - AttributeError: if flag_name is not registered as a valid flag name. - """ - RegisterValidator(flag_name, - lambda value: value is not None, - message='Flag --%s must be specified.' % flag_name, - flag_values=flag_values) - - -def _RegisterBoundsValidatorIfNeeded(parser, name, flag_values): - """Enforce lower and upper bounds for numeric flags. - - Args: - parser: NumericParser (either FloatParser or IntegerParser). Provides lower - and upper bounds, and help text to display. - name: string, name of the flag - flag_values: FlagValues - """ - if parser.lower_bound is not None or parser.upper_bound is not None: - - def Checker(value): - if value is not None and parser.IsOutsideBounds(value): - message = '%s is not %s' % (value, parser.syntactic_help) - raise gflags_validators.Error(message) - return True - - RegisterValidator(name, - Checker, - flag_values=flag_values) - - -# The DEFINE functions are explained in mode details in the module doc string. - - -def DEFINE(parser, name, default, help, flag_values=FLAGS, serializer=None, - **args): - """Registers a generic Flag object. - - NOTE: in the docstrings of all DEFINE* functions, "registers" is short - for "creates a new flag and registers it". - - Auxiliary function: clients should use the specialized DEFINE_<type> - function instead. - - Args: - parser: ArgumentParser that is used to parse the flag arguments. - name: A string, the flag name. - default: The default value of the flag. - help: A help string. - flag_values: FlagValues object the flag will be registered with. - serializer: ArgumentSerializer that serializes the flag value. - args: Dictionary with extra keyword args that are passes to the - Flag __init__. - """ - DEFINE_flag(Flag(parser, serializer, name, default, help, **args), - flag_values) - - -def DEFINE_flag(flag, flag_values=FLAGS): - """Registers a 'Flag' object with a 'FlagValues' object. - - By default, the global FLAGS 'FlagValue' object is used. - - Typical users will use one of the more specialized DEFINE_xxx - functions, such as DEFINE_string or DEFINE_integer. But developers - who need to create Flag objects themselves should use this function - to register their flags. - """ - # copying the reference to flag_values prevents pychecker warnings - fv = flag_values - fv[flag.name] = flag - # Tell flag_values who's defining the flag. - if isinstance(flag_values, FlagValues): - # Regarding the above isinstance test: some users pass funny - # values of flag_values (e.g., {}) in order to avoid the flag - # registration (in the past, there used to be a flag_values == - # FLAGS test here) and redefine flags with the same name (e.g., - # debug). To avoid breaking their code, we perform the - # registration only if flag_values is a real FlagValues object. - module, module_name = _GetCallingModuleObjectAndName() - flag_values._RegisterFlagByModule(module_name, flag) - flag_values._RegisterFlagByModuleId(id(module), flag) - - -def _InternalDeclareKeyFlags(flag_names, - flag_values=FLAGS, key_flag_values=None): - """Declares a flag as key for the calling module. - - Internal function. User code should call DECLARE_key_flag or - ADOPT_module_key_flags instead. - - Args: - flag_names: A list of strings that are names of already-registered - Flag objects. - flag_values: A FlagValues object that the flags listed in - flag_names have registered with (the value of the flag_values - argument from the DEFINE_* calls that defined those flags). - This should almost never need to be overridden. - key_flag_values: A FlagValues object that (among possibly many - other things) keeps track of the key flags for each module. - Default None means "same as flag_values". This should almost - never need to be overridden. - - Raises: - UnrecognizedFlagError: when we refer to a flag that was not - defined yet. - """ - key_flag_values = key_flag_values or flag_values - - module = _GetCallingModule() - - for flag_name in flag_names: - if flag_name not in flag_values: - raise UnrecognizedFlagError(flag_name) - flag = flag_values.FlagDict()[flag_name] - key_flag_values._RegisterKeyFlagForModule(module, flag) - - -def DECLARE_key_flag(flag_name, flag_values=FLAGS): - """Declares one flag as key to the current module. - - Key flags are flags that are deemed really important for a module. - They are important when listing help messages; e.g., if the - --helpshort command-line flag is used, then only the key flags of the - main module are listed (instead of all flags, as in the case of - --help). - - Sample usage: - - gflags.DECLARED_key_flag('flag_1') - - Args: - flag_name: A string, the name of an already declared flag. - (Redeclaring flags as key, including flags implicitly key - because they were declared in this module, is a no-op.) - flag_values: A FlagValues object. This should almost never - need to be overridden. - """ - if flag_name in _SPECIAL_FLAGS: - # Take care of the special flags, e.g., --flagfile, --undefok. - # These flags are defined in _SPECIAL_FLAGS, and are treated - # specially during flag parsing, taking precedence over the - # user-defined flags. - _InternalDeclareKeyFlags([flag_name], - flag_values=_SPECIAL_FLAGS, - key_flag_values=flag_values) - return - _InternalDeclareKeyFlags([flag_name], flag_values=flag_values) - - -def ADOPT_module_key_flags(module, flag_values=FLAGS): - """Declares that all flags key to a module are key to the current module. - - Args: - module: A module object. - flag_values: A FlagValues object. This should almost never need - to be overridden. - - Raises: - FlagsError: When given an argument that is a module name (a - string), instead of a module object. - """ - # NOTE(salcianu): an even better test would be if not - # isinstance(module, types.ModuleType) but I didn't want to import - # types for such a tiny use. - if isinstance(module, str): - raise FlagsError('Received module name %s; expected a module object.' - % module) - _InternalDeclareKeyFlags( - [f.name for f in flag_values._GetKeyFlagsForModule(module.__name__)], - flag_values=flag_values) - # If module is this flag module, take _SPECIAL_FLAGS into account. - if module == _GetThisModuleObjectAndName()[0]: - _InternalDeclareKeyFlags( - # As we associate flags with _GetCallingModuleObjectAndName(), the - # special flags defined in this module are incorrectly registered with - # a different module. So, we can't use _GetKeyFlagsForModule. - # Instead, we take all flags from _SPECIAL_FLAGS (a private - # FlagValues, where no other module should register flags). - [f.name for f in _SPECIAL_FLAGS.FlagDict().values()], - flag_values=_SPECIAL_FLAGS, - key_flag_values=flag_values) - - -# -# STRING FLAGS -# - - -def DEFINE_string(name, default, help, flag_values=FLAGS, **args): - """Registers a flag whose value can be any string.""" - parser = ArgumentParser() - serializer = ArgumentSerializer() - DEFINE(parser, name, default, help, flag_values, serializer, **args) - - -# -# BOOLEAN FLAGS -# - - -class BooleanParser(ArgumentParser): - """Parser of boolean values.""" - - def Convert(self, argument): - """Converts the argument to a boolean; raise ValueError on errors.""" - if type(argument) == str: - if argument.lower() in ['true', 't', '1']: - return True - elif argument.lower() in ['false', 'f', '0']: - return False - - bool_argument = bool(argument) - if argument == bool_argument: - # The argument is a valid boolean (True, False, 0, or 1), and not just - # something that always converts to bool (list, string, int, etc.). - return bool_argument - - raise ValueError('Non-boolean argument to boolean flag', argument) - - def Parse(self, argument): - val = self.Convert(argument) - return val - - def Type(self): - return 'bool' - - -class BooleanFlag(Flag): - """Basic boolean flag. - - Boolean flags do not take any arguments, and their value is either - True (1) or False (0). The false value is specified on the command - line by prepending the word 'no' to either the long or the short flag - name. - - For example, if a Boolean flag was created whose long name was - 'update' and whose short name was 'x', then this flag could be - explicitly unset through either --noupdate or --nox. - """ - - def __init__(self, name, default, help, short_name=None, **args): - p = BooleanParser() - Flag.__init__(self, p, None, name, default, help, short_name, 1, **args) - if not self.help: self.help = "a boolean value" - - -def DEFINE_boolean(name, default, help, flag_values=FLAGS, **args): - """Registers a boolean flag. - - Such a boolean flag does not take an argument. If a user wants to - specify a false value explicitly, the long option beginning with 'no' - must be used: i.e. --noflag - - This flag will have a value of None, True or False. None is possible - if default=None and the user does not specify the flag on the command - line. - """ - DEFINE_flag(BooleanFlag(name, default, help, **args), flag_values) - - -# Match C++ API to unconfuse C++ people. -DEFINE_bool = DEFINE_boolean - - -class HelpFlag(BooleanFlag): - """ - HelpFlag is a special boolean flag that prints usage information and - raises a SystemExit exception if it is ever found in the command - line arguments. Note this is called with allow_override=1, so other - apps can define their own --help flag, replacing this one, if they want. - """ - def __init__(self): - BooleanFlag.__init__(self, "help", 0, "show this help", - short_name="?", allow_override=1) - def Parse(self, arg): - if arg: - doc = sys.modules["__main__"].__doc__ - flags = str(FLAGS) - print doc or ("\nUSAGE: %s [flags]\n" % sys.argv[0]) - if flags: - print "flags:" - print flags - sys.exit(1) -class HelpXMLFlag(BooleanFlag): - """Similar to HelpFlag, but generates output in XML format.""" - def __init__(self): - BooleanFlag.__init__(self, 'helpxml', False, - 'like --help, but generates XML output', - allow_override=1) - def Parse(self, arg): - if arg: - FLAGS.WriteHelpInXMLFormat(sys.stdout) - sys.exit(1) -class HelpshortFlag(BooleanFlag): - """ - HelpshortFlag is a special boolean flag that prints usage - information for the "main" module, and rasies a SystemExit exception - if it is ever found in the command line arguments. Note this is - called with allow_override=1, so other apps can define their own - --helpshort flag, replacing this one, if they want. - """ - def __init__(self): - BooleanFlag.__init__(self, "helpshort", 0, - "show usage only for this module", allow_override=1) - def Parse(self, arg): - if arg: - doc = sys.modules["__main__"].__doc__ - flags = FLAGS.MainModuleHelp() - print doc or ("\nUSAGE: %s [flags]\n" % sys.argv[0]) - if flags: - print "flags:" - print flags - sys.exit(1) - -# -# Numeric parser - base class for Integer and Float parsers -# - - -class NumericParser(ArgumentParser): - """Parser of numeric values. - - Parsed value may be bounded to a given upper and lower bound. - """ - - def IsOutsideBounds(self, val): - return ((self.lower_bound is not None and val < self.lower_bound) or - (self.upper_bound is not None and val > self.upper_bound)) - - def Parse(self, argument): - val = self.Convert(argument) - if self.IsOutsideBounds(val): - raise ValueError("%s is not %s" % (val, self.syntactic_help)) - return val - - def WriteCustomInfoInXMLFormat(self, outfile, indent): - if self.lower_bound is not None: - _WriteSimpleXMLElement(outfile, 'lower_bound', self.lower_bound, indent) - if self.upper_bound is not None: - _WriteSimpleXMLElement(outfile, 'upper_bound', self.upper_bound, indent) - - def Convert(self, argument): - """Default implementation: always returns its argument unmodified.""" - return argument - -# End of Numeric Parser - -# -# FLOAT FLAGS -# - - -class FloatParser(NumericParser): - """Parser of floating point values. - - Parsed value may be bounded to a given upper and lower bound. - """ - number_article = "a" - number_name = "number" - syntactic_help = " ".join((number_article, number_name)) - - def __init__(self, lower_bound=None, upper_bound=None): - super(FloatParser, self).__init__() - self.lower_bound = lower_bound - self.upper_bound = upper_bound - sh = self.syntactic_help - if lower_bound is not None and upper_bound is not None: - sh = ("%s in the range [%s, %s]" % (sh, lower_bound, upper_bound)) - elif lower_bound == 0: - sh = "a non-negative %s" % self.number_name - elif upper_bound == 0: - sh = "a non-positive %s" % self.number_name - elif upper_bound is not None: - sh = "%s <= %s" % (self.number_name, upper_bound) - elif lower_bound is not None: - sh = "%s >= %s" % (self.number_name, lower_bound) - self.syntactic_help = sh - - def Convert(self, argument): - """Converts argument to a float; raises ValueError on errors.""" - return float(argument) - - def Type(self): - return 'float' -# End of FloatParser - - -def DEFINE_float(name, default, help, lower_bound=None, upper_bound=None, - flag_values=FLAGS, **args): - """Registers a flag whose value must be a float. - - If lower_bound or upper_bound are set, then this flag must be - within the given range. - """ - parser = FloatParser(lower_bound, upper_bound) - serializer = ArgumentSerializer() - DEFINE(parser, name, default, help, flag_values, serializer, **args) - _RegisterBoundsValidatorIfNeeded(parser, name, flag_values=flag_values) - -# -# INTEGER FLAGS -# - - -class IntegerParser(NumericParser): - """Parser of an integer value. - - Parsed value may be bounded to a given upper and lower bound. - """ - number_article = "an" - number_name = "integer" - syntactic_help = " ".join((number_article, number_name)) - - def __init__(self, lower_bound=None, upper_bound=None): - super(IntegerParser, self).__init__() - self.lower_bound = lower_bound - self.upper_bound = upper_bound - sh = self.syntactic_help - if lower_bound is not None and upper_bound is not None: - sh = ("%s in the range [%s, %s]" % (sh, lower_bound, upper_bound)) - elif lower_bound == 1: - sh = "a positive %s" % self.number_name - elif upper_bound == -1: - sh = "a negative %s" % self.number_name - elif lower_bound == 0: - sh = "a non-negative %s" % self.number_name - elif upper_bound == 0: - sh = "a non-positive %s" % self.number_name - elif upper_bound is not None: - sh = "%s <= %s" % (self.number_name, upper_bound) - elif lower_bound is not None: - sh = "%s >= %s" % (self.number_name, lower_bound) - self.syntactic_help = sh - - def Convert(self, argument): - __pychecker__ = 'no-returnvalues' - if type(argument) == str: - base = 10 - if len(argument) > 2 and argument[0] == "0" and argument[1] == "x": - base = 16 - return int(argument, base) - else: - return int(argument) - - def Type(self): - return 'int' - - -def DEFINE_integer(name, default, help, lower_bound=None, upper_bound=None, - flag_values=FLAGS, **args): - """Registers a flag whose value must be an integer. - - If lower_bound, or upper_bound are set, then this flag must be - within the given range. - """ - parser = IntegerParser(lower_bound, upper_bound) - serializer = ArgumentSerializer() - DEFINE(parser, name, default, help, flag_values, serializer, **args) - _RegisterBoundsValidatorIfNeeded(parser, name, flag_values=flag_values) - - -# -# ENUM FLAGS -# - - -class EnumParser(ArgumentParser): - """Parser of a string enum value (a string value from a given set). - - If enum_values (see below) is not specified, any string is allowed. - """ - - def __init__(self, enum_values=None): - super(EnumParser, self).__init__() - self.enum_values = enum_values - - def Parse(self, argument): - if self.enum_values and argument not in self.enum_values: - raise ValueError("value should be one of <%s>" % - "|".join(self.enum_values)) - return argument - - def Type(self): - return 'string enum' - - -class EnumFlag(Flag): - """Basic enum flag; its value can be any string from list of enum_values.""" - - def __init__(self, name, default, help, enum_values=None, - short_name=None, **args): - enum_values = enum_values or [] - p = EnumParser(enum_values) - g = ArgumentSerializer() - Flag.__init__(self, p, g, name, default, help, short_name, **args) - if not self.help: self.help = "an enum string" - self.help = "<%s>: %s" % ("|".join(enum_values), self.help) - - def _WriteCustomInfoInXMLFormat(self, outfile, indent): - for enum_value in self.parser.enum_values: - _WriteSimpleXMLElement(outfile, 'enum_value', enum_value, indent) - - -def DEFINE_enum(name, default, enum_values, help, flag_values=FLAGS, - **args): - """Registers a flag whose value can be any string from enum_values.""" - DEFINE_flag(EnumFlag(name, default, help, enum_values, ** args), - flag_values) - - -# -# LIST FLAGS -# - - -class BaseListParser(ArgumentParser): - """Base class for a parser of lists of strings. - - To extend, inherit from this class; from the subclass __init__, call - - BaseListParser.__init__(self, token, name) - - where token is a character used to tokenize, and name is a description - of the separator. - """ - - def __init__(self, token=None, name=None): - assert name - super(BaseListParser, self).__init__() - self._token = token - self._name = name - self.syntactic_help = "a %s separated list" % self._name - - def Parse(self, argument): - if isinstance(argument, list): - return argument - elif argument == '': - return [] - else: - return [s.strip() for s in argument.split(self._token)] - - def Type(self): - return '%s separated list of strings' % self._name - - -class ListParser(BaseListParser): - """Parser for a comma-separated list of strings.""" - - def __init__(self): - BaseListParser.__init__(self, ',', 'comma') - - def WriteCustomInfoInXMLFormat(self, outfile, indent): - BaseListParser.WriteCustomInfoInXMLFormat(self, outfile, indent) - _WriteSimpleXMLElement(outfile, 'list_separator', repr(','), indent) - - -class WhitespaceSeparatedListParser(BaseListParser): - """Parser for a whitespace-separated list of strings.""" - - def __init__(self): - BaseListParser.__init__(self, None, 'whitespace') - - def WriteCustomInfoInXMLFormat(self, outfile, indent): - BaseListParser.WriteCustomInfoInXMLFormat(self, outfile, indent) - separators = list(string.whitespace) - separators.sort() - for ws_char in string.whitespace: - _WriteSimpleXMLElement(outfile, 'list_separator', repr(ws_char), indent) - - -def DEFINE_list(name, default, help, flag_values=FLAGS, **args): - """Registers a flag whose value is a comma-separated list of strings.""" - parser = ListParser() - serializer = ListSerializer(',') - DEFINE(parser, name, default, help, flag_values, serializer, **args) - - -def DEFINE_spaceseplist(name, default, help, flag_values=FLAGS, **args): - """Registers a flag whose value is a whitespace-separated list of strings. - - Any whitespace can be used as a separator. - """ - parser = WhitespaceSeparatedListParser() - serializer = ListSerializer(' ') - DEFINE(parser, name, default, help, flag_values, serializer, **args) - - -# -# MULTI FLAGS -# - - -class MultiFlag(Flag): - """A flag that can appear multiple time on the command-line. - - The value of such a flag is a list that contains the individual values - from all the appearances of that flag on the command-line. - - See the __doc__ for Flag for most behavior of this class. Only - differences in behavior are described here: - - * The default value may be either a single value or a list of values. - A single value is interpreted as the [value] singleton list. - - * The value of the flag is always a list, even if the option was - only supplied once, and even if the default value is a single - value - """ - - def __init__(self, *args, **kwargs): - Flag.__init__(self, *args, **kwargs) - self.help += ';\n repeat this option to specify a list of values' - - def Parse(self, arguments): - """Parses one or more arguments with the installed parser. - - Args: - arguments: a single argument or a list of arguments (typically a - list of default values); a single argument is converted - internally into a list containing one item. - """ - if not isinstance(arguments, list): - # Default value may be a list of values. Most other arguments - # will not be, so convert them into a single-item list to make - # processing simpler below. - arguments = [arguments] - - if self.present: - # keep a backup reference to list of previously supplied option values - values = self.value - else: - # "erase" the defaults with an empty list - values = [] - - for item in arguments: - # have Flag superclass parse argument, overwriting self.value reference - Flag.Parse(self, item) # also increments self.present - values.append(self.value) - - # put list of option values back in the 'value' attribute - self.value = values - - def Serialize(self): - if not self.serializer: - raise FlagsError("Serializer not present for flag %s" % self.name) - if self.value is None: - return '' - - s = '' - - multi_value = self.value - - for self.value in multi_value: - if s: s += ' ' - s += Flag.Serialize(self) - - self.value = multi_value - - return s - - def Type(self): - return 'multi ' + self.parser.Type() - - -def DEFINE_multi(parser, serializer, name, default, help, flag_values=FLAGS, - **args): - """Registers a generic MultiFlag that parses its args with a given parser. - - Auxiliary function. Normal users should NOT use it directly. - - Developers who need to create their own 'Parser' classes for options - which can appear multiple times can call this module function to - register their flags. - """ - DEFINE_flag(MultiFlag(parser, serializer, name, default, help, **args), - flag_values) - - -def DEFINE_multistring(name, default, help, flag_values=FLAGS, **args): - """Registers a flag whose value can be a list of any strings. - - Use the flag on the command line multiple times to place multiple - string values into the list. The 'default' may be a single string - (which will be converted into a single-element list) or a list of - strings. - """ - parser = ArgumentParser() - serializer = ArgumentSerializer() - DEFINE_multi(parser, serializer, name, default, help, flag_values, **args) - - -def DEFINE_multi_int(name, default, help, lower_bound=None, upper_bound=None, - flag_values=FLAGS, **args): - """Registers a flag whose value can be a list of arbitrary integers. - - Use the flag on the command line multiple times to place multiple - integer values into the list. The 'default' may be a single integer - (which will be converted into a single-element list) or a list of - integers. - """ - parser = IntegerParser(lower_bound, upper_bound) - serializer = ArgumentSerializer() - DEFINE_multi(parser, serializer, name, default, help, flag_values, **args) - - -def DEFINE_multi_float(name, default, help, lower_bound=None, upper_bound=None, - flag_values=FLAGS, **args): - """Registers a flag whose value can be a list of arbitrary floats. - - Use the flag on the command line multiple times to place multiple - float values into the list. The 'default' may be a single float - (which will be converted into a single-element list) or a list of - floats. - """ - parser = FloatParser(lower_bound, upper_bound) - serializer = ArgumentSerializer() - DEFINE_multi(parser, serializer, name, default, help, flag_values, **args) - - -# Now register the flags that we want to exist in all applications. -# These are all defined with allow_override=1, so user-apps can use -# these flagnames for their own purposes, if they want. -DEFINE_flag(HelpFlag()) -DEFINE_flag(HelpshortFlag()) -DEFINE_flag(HelpXMLFlag()) - -# Define special flags here so that help may be generated for them. -# NOTE: Please do NOT use _SPECIAL_FLAGS from outside this module. -_SPECIAL_FLAGS = FlagValues() - - -DEFINE_string( - 'flagfile', "", - "Insert flag definitions from the given file into the command line.", - _SPECIAL_FLAGS) - -DEFINE_string( - 'undefok', "", - "comma-separated list of flag names that it is okay to specify " - "on the command line even if the program does not define a flag " - "with that name. IMPORTANT: flags in this list that have " - "arguments MUST use the --flag=value format.", _SPECIAL_FLAGS)
diff --git a/third_party/python_gflags/gflags2man.py b/third_party/python_gflags/gflags2man.py deleted file mode 100755 index 3a50f9e..0000000 --- a/third_party/python_gflags/gflags2man.py +++ /dev/null
@@ -1,544 +0,0 @@ -#!/usr/bin/env python - -# Copyright (c) 2006, Google Inc. -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are -# met: -# -# * Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# * Redistributions in binary form must reproduce the above -# copyright notice, this list of conditions and the following disclaimer -# in the documentation and/or other materials provided with the -# distribution. -# * Neither the name of Google Inc. nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -"""gflags2man runs a Google flags base program and generates a man page. - -Run the program, parse the output, and then format that into a man -page. - -Usage: - gflags2man <program> [program] ... -""" - -# TODO(csilvers): work with windows paths (\) as well as unix (/) - -# This may seem a bit of an end run, but it: doesn't bloat flags, can -# support python/java/C++, supports older executables, and can be -# extended to other document formats. -# Inspired by help2man. - - - -import os -import re -import sys -import stat -import time - -import gflags - -_VERSION = '0.1' - - -def _GetDefaultDestDir(): - home = os.environ.get('HOME', '') - homeman = os.path.join(home, 'man', 'man1') - if home and os.path.exists(homeman): - return homeman - else: - return os.environ.get('TMPDIR', '/tmp') - -FLAGS = gflags.FLAGS -gflags.DEFINE_string('dest_dir', _GetDefaultDestDir(), - 'Directory to write resulting manpage to.' - ' Specify \'-\' for stdout') -gflags.DEFINE_string('help_flag', '--help', - 'Option to pass to target program in to get help') -gflags.DEFINE_integer('v', 0, 'verbosity level to use for output') - - -_MIN_VALID_USAGE_MSG = 9 # if fewer lines than this, help is suspect - - -class Logging: - """A super-simple logging class""" - def error(self, msg): print >>sys.stderr, "ERROR: ", msg - def warn(self, msg): print >>sys.stderr, "WARNING: ", msg - def info(self, msg): print msg - def debug(self, msg): self.vlog(1, msg) - def vlog(self, level, msg): - if FLAGS.v >= level: print msg -logging = Logging() -class App: - def usage(self, shorthelp=0): - print >>sys.stderr, __doc__ - print >>sys.stderr, "flags:" - print >>sys.stderr, str(FLAGS) - def run(self): - main(sys.argv) -app = App() - - -def GetRealPath(filename): - """Given an executable filename, find in the PATH or find absolute path. - Args: - filename An executable filename (string) - Returns: - Absolute version of filename. - None if filename could not be found locally, absolutely, or in PATH - """ - if os.path.isabs(filename): # already absolute - return filename - - if filename.startswith('./') or filename.startswith('../'): # relative - return os.path.abspath(filename) - - path = os.getenv('PATH', '') - for directory in path.split(':'): - tryname = os.path.join(directory, filename) - if os.path.exists(tryname): - if not os.path.isabs(directory): # relative directory - return os.path.abspath(tryname) - return tryname - if os.path.exists(filename): - return os.path.abspath(filename) - return None # could not determine - -class Flag(object): - """The information about a single flag.""" - - def __init__(self, flag_desc, help): - """Create the flag object. - Args: - flag_desc The command line forms this could take. (string) - help The help text (string) - """ - self.desc = flag_desc # the command line forms - self.help = help # the help text - self.default = '' # default value - self.tips = '' # parsing/syntax tips - - -class ProgramInfo(object): - """All the information gleaned from running a program with --help.""" - - # Match a module block start, for python scripts --help - # "goopy.logging:" - module_py_re = re.compile(r'(\S.+):$') - # match the start of a flag listing - # " -v,--verbosity: Logging verbosity" - flag_py_re = re.compile(r'\s+(-\S+):\s+(.*)$') - # " (default: '0')" - flag_default_py_re = re.compile(r'\s+\(default:\s+\'(.*)\'\)$') - # " (an integer)" - flag_tips_py_re = re.compile(r'\s+\((.*)\)$') - - # Match a module block start, for c++ programs --help - # "google/base/commandlineflags": - module_c_re = re.compile(r'\s+Flags from (\S.+):$') - # match the start of a flag listing - # " -v,--verbosity: Logging verbosity" - flag_c_re = re.compile(r'\s+(-\S+)\s+(.*)$') - - # Match a module block start, for java programs --help - # "com.google.common.flags" - module_java_re = re.compile(r'\s+Flags for (\S.+):$') - # match the start of a flag listing - # " -v,--verbosity: Logging verbosity" - flag_java_re = re.compile(r'\s+(-\S+)\s+(.*)$') - - def __init__(self, executable): - """Create object with executable. - Args: - executable Program to execute (string) - """ - self.long_name = executable - self.name = os.path.basename(executable) # name - # Get name without extension (PAR files) - (self.short_name, self.ext) = os.path.splitext(self.name) - self.executable = GetRealPath(executable) # name of the program - self.output = [] # output from the program. List of lines. - self.desc = [] # top level description. List of lines - self.modules = {} # { section_name(string), [ flags ] } - self.module_list = [] # list of module names in their original order - self.date = time.localtime(time.time()) # default date info - - def Run(self): - """Run it and collect output. - - Returns: - 1 (true) If everything went well. - 0 (false) If there were problems. - """ - if not self.executable: - logging.error('Could not locate "%s"' % self.long_name) - return 0 - - finfo = os.stat(self.executable) - self.date = time.localtime(finfo[stat.ST_MTIME]) - - logging.info('Running: %s %s </dev/null 2>&1' - % (self.executable, FLAGS.help_flag)) - # --help output is often routed to stderr, so we combine with stdout. - # Re-direct stdin to /dev/null to encourage programs that - # don't understand --help to exit. - (child_stdin, child_stdout_and_stderr) = os.popen4( - [self.executable, FLAGS.help_flag]) - child_stdin.close() # '</dev/null' - self.output = child_stdout_and_stderr.readlines() - child_stdout_and_stderr.close() - if len(self.output) < _MIN_VALID_USAGE_MSG: - logging.error('Error: "%s %s" returned only %d lines: %s' - % (self.name, FLAGS.help_flag, - len(self.output), self.output)) - return 0 - return 1 - - def Parse(self): - """Parse program output.""" - (start_line, lang) = self.ParseDesc() - if start_line < 0: - return - if 'python' == lang: - self.ParsePythonFlags(start_line) - elif 'c' == lang: - self.ParseCFlags(start_line) - elif 'java' == lang: - self.ParseJavaFlags(start_line) - - def ParseDesc(self, start_line=0): - """Parse the initial description. - - This could be Python or C++. - - Returns: - (start_line, lang_type) - start_line Line to start parsing flags on (int) - lang_type Either 'python' or 'c' - (-1, '') if the flags start could not be found - """ - exec_mod_start = self.executable + ':' - - after_blank = 0 - start_line = 0 # ignore the passed-in arg for now (?) - for start_line in range(start_line, len(self.output)): # collect top description - line = self.output[start_line].rstrip() - # Python flags start with 'flags:\n' - if ('flags:' == line - and len(self.output) > start_line+1 - and '' == self.output[start_line+1].rstrip()): - start_line += 2 - logging.debug('Flags start (python): %s' % line) - return (start_line, 'python') - # SWIG flags just have the module name followed by colon. - if exec_mod_start == line: - logging.debug('Flags start (swig): %s' % line) - return (start_line, 'python') - # C++ flags begin after a blank line and with a constant string - if after_blank and line.startswith(' Flags from '): - logging.debug('Flags start (c): %s' % line) - return (start_line, 'c') - # java flags begin with a constant string - if line == 'where flags are': - logging.debug('Flags start (java): %s' % line) - start_line += 2 # skip "Standard flags:" - return (start_line, 'java') - - logging.debug('Desc: %s' % line) - self.desc.append(line) - after_blank = (line == '') - else: - logging.warn('Never found the start of the flags section for "%s"!' - % self.long_name) - return (-1, '') - - def ParsePythonFlags(self, start_line=0): - """Parse python/swig style flags.""" - modname = None # name of current module - modlist = [] - flag = None - for line_num in range(start_line, len(self.output)): # collect flags - line = self.output[line_num].rstrip() - if not line: # blank - continue - - mobj = self.module_py_re.match(line) - if mobj: # start of a new module - modname = mobj.group(1) - logging.debug('Module: %s' % line) - if flag: - modlist.append(flag) - self.module_list.append(modname) - self.modules.setdefault(modname, []) - modlist = self.modules[modname] - flag = None - continue - - mobj = self.flag_py_re.match(line) - if mobj: # start of a new flag - if flag: - modlist.append(flag) - logging.debug('Flag: %s' % line) - flag = Flag(mobj.group(1), mobj.group(2)) - continue - - if not flag: # continuation of a flag - logging.error('Flag info, but no current flag "%s"' % line) - mobj = self.flag_default_py_re.match(line) - if mobj: # (default: '...') - flag.default = mobj.group(1) - logging.debug('Fdef: %s' % line) - continue - mobj = self.flag_tips_py_re.match(line) - if mobj: # (tips) - flag.tips = mobj.group(1) - logging.debug('Ftip: %s' % line) - continue - if flag and flag.help: - flag.help += line # multiflags tack on an extra line - else: - logging.info('Extra: %s' % line) - if flag: - modlist.append(flag) - - def ParseCFlags(self, start_line=0): - """Parse C style flags.""" - modname = None # name of current module - modlist = [] - flag = None - for line_num in range(start_line, len(self.output)): # collect flags - line = self.output[line_num].rstrip() - if not line: # blank lines terminate flags - if flag: # save last flag - modlist.append(flag) - flag = None - continue - - mobj = self.module_c_re.match(line) - if mobj: # start of a new module - modname = mobj.group(1) - logging.debug('Module: %s' % line) - if flag: - modlist.append(flag) - self.module_list.append(modname) - self.modules.setdefault(modname, []) - modlist = self.modules[modname] - flag = None - continue - - mobj = self.flag_c_re.match(line) - if mobj: # start of a new flag - if flag: # save last flag - modlist.append(flag) - logging.debug('Flag: %s' % line) - flag = Flag(mobj.group(1), mobj.group(2)) - continue - - # append to flag help. type and default are part of the main text - if flag: - flag.help += ' ' + line.strip() - else: - logging.info('Extra: %s' % line) - if flag: - modlist.append(flag) - - def ParseJavaFlags(self, start_line=0): - """Parse Java style flags (com.google.common.flags).""" - # The java flags prints starts with a "Standard flags" "module" - # that doesn't follow the standard module syntax. - modname = 'Standard flags' # name of current module - self.module_list.append(modname) - self.modules.setdefault(modname, []) - modlist = self.modules[modname] - flag = None - - for line_num in range(start_line, len(self.output)): # collect flags - line = self.output[line_num].rstrip() - logging.vlog(2, 'Line: "%s"' % line) - if not line: # blank lines terminate module - if flag: # save last flag - modlist.append(flag) - flag = None - continue - - mobj = self.module_java_re.match(line) - if mobj: # start of a new module - modname = mobj.group(1) - logging.debug('Module: %s' % line) - if flag: - modlist.append(flag) - self.module_list.append(modname) - self.modules.setdefault(modname, []) - modlist = self.modules[modname] - flag = None - continue - - mobj = self.flag_java_re.match(line) - if mobj: # start of a new flag - if flag: # save last flag - modlist.append(flag) - logging.debug('Flag: %s' % line) - flag = Flag(mobj.group(1), mobj.group(2)) - continue - - # append to flag help. type and default are part of the main text - if flag: - flag.help += ' ' + line.strip() - else: - logging.info('Extra: %s' % line) - if flag: - modlist.append(flag) - - def Filter(self): - """Filter parsed data to create derived fields.""" - if not self.desc: - self.short_desc = '' - return - - for i in range(len(self.desc)): # replace full path with name - if self.desc[i].find(self.executable) >= 0: - self.desc[i] = self.desc[i].replace(self.executable, self.name) - - self.short_desc = self.desc[0] - word_list = self.short_desc.split(' ') - all_names = [ self.name, self.short_name, ] - # Since the short_desc is always listed right after the name, - # trim it from the short_desc - while word_list and (word_list[0] in all_names - or word_list[0].lower() in all_names): - del word_list[0] - self.short_desc = '' # signal need to reconstruct - if not self.short_desc and word_list: - self.short_desc = ' '.join(word_list) - - -class GenerateDoc(object): - """Base class to output flags information.""" - - def __init__(self, proginfo, directory='.'): - """Create base object. - Args: - proginfo A ProgramInfo object - directory Directory to write output into - """ - self.info = proginfo - self.dirname = directory - - def Output(self): - """Output all sections of the page.""" - self.Open() - self.Header() - self.Body() - self.Footer() - - def Open(self): raise NotImplementedError # define in subclass - def Header(self): raise NotImplementedError # define in subclass - def Body(self): raise NotImplementedError # define in subclass - def Footer(self): raise NotImplementedError # define in subclass - - -class GenerateMan(GenerateDoc): - """Output a man page.""" - - def __init__(self, proginfo, directory='.'): - """Create base object. - Args: - proginfo A ProgramInfo object - directory Directory to write output into - """ - GenerateDoc.__init__(self, proginfo, directory) - - def Open(self): - if self.dirname == '-': - logging.info('Writing to stdout') - self.fp = sys.stdout - else: - self.file_path = '%s.1' % os.path.join(self.dirname, self.info.name) - logging.info('Writing: %s' % self.file_path) - self.fp = open(self.file_path, 'w') - - def Header(self): - self.fp.write( - '.\\" DO NOT MODIFY THIS FILE! It was generated by gflags2man %s\n' - % _VERSION) - self.fp.write( - '.TH %s "1" "%s" "%s" "User Commands"\n' - % (self.info.name, time.strftime('%x', self.info.date), self.info.name)) - self.fp.write( - '.SH NAME\n%s \\- %s\n' % (self.info.name, self.info.short_desc)) - self.fp.write( - '.SH SYNOPSIS\n.B %s\n[\\fIFLAGS\\fR]...\n' % self.info.name) - - def Body(self): - self.fp.write( - '.SH DESCRIPTION\n.\\" Add any additional description here\n.PP\n') - for ln in self.info.desc: - self.fp.write('%s\n' % ln) - self.fp.write( - '.SH OPTIONS\n') - # This shows flags in the original order - for modname in self.info.module_list: - if modname.find(self.info.executable) >= 0: - mod = modname.replace(self.info.executable, self.info.name) - else: - mod = modname - self.fp.write('\n.P\n.I %s\n' % mod) - for flag in self.info.modules[modname]: - help_string = flag.help - if flag.default or flag.tips: - help_string += '\n.br\n' - if flag.default: - help_string += ' (default: \'%s\')' % flag.default - if flag.tips: - help_string += ' (%s)' % flag.tips - self.fp.write( - '.TP\n%s\n%s\n' % (flag.desc, help_string)) - - def Footer(self): - self.fp.write( - '.SH COPYRIGHT\nCopyright \(co %s Google.\n' - % time.strftime('%Y', self.info.date)) - self.fp.write('Gflags2man created this page from "%s %s" output.\n' - % (self.info.name, FLAGS.help_flag)) - self.fp.write('\nGflags2man was written by Dan Christian. ' - ' Note that the date on this' - ' page is the modification date of %s.\n' % self.info.name) - - -def main(argv): - argv = FLAGS(argv) # handles help as well - if len(argv) <= 1: - app.usage(shorthelp=1) - return 1 - - for arg in argv[1:]: - prog = ProgramInfo(arg) - if not prog.Run(): - continue - prog.Parse() - prog.Filter() - doc = GenerateMan(prog, FLAGS.dest_dir) - doc.Output() - return 0 - -if __name__ == '__main__': - app.run()
diff --git a/third_party/python_gflags/gflags_validators.py b/third_party/python_gflags/gflags_validators.py deleted file mode 100755 index d83058d5..0000000 --- a/third_party/python_gflags/gflags_validators.py +++ /dev/null
@@ -1,187 +0,0 @@ -#!/usr/bin/env python - -# Copyright (c) 2010, Google Inc. -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are -# met: -# -# * Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# * Redistributions in binary form must reproduce the above -# copyright notice, this list of conditions and the following disclaimer -# in the documentation and/or other materials provided with the -# distribution. -# * Neither the name of Google Inc. nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -"""Module to enforce different constraints on flags. - -A validator represents an invariant, enforced over a one or more flags. -See 'FLAGS VALIDATORS' in gflags.py's docstring for a usage manual. -""" - -__author__ = 'olexiy@google.com (Olexiy Oryeshko)' - - -class Error(Exception): - """Thrown If validator constraint is not satisfied.""" - - -class Validator(object): - """Base class for flags validators. - - Users should NOT overload these classes, and use gflags.Register... - methods instead. - """ - - # Used to assign each validator an unique insertion_index - validators_count = 0 - - def __init__(self, checker, message): - """Constructor to create all validators. - - Args: - checker: function to verify the constraint. - Input of this method varies, see SimpleValidator and - DictionaryValidator for a detailed description. - message: string, error message to be shown to the user - """ - self.checker = checker - self.message = message - Validator.validators_count += 1 - # Used to assert validators in the order they were registered (CL/18694236) - self.insertion_index = Validator.validators_count - - def Verify(self, flag_values): - """Verify that constraint is satisfied. - - flags library calls this method to verify Validator's constraint. - Args: - flag_values: gflags.FlagValues, containing all flags - Raises: - Error: if constraint is not satisfied. - """ - param = self._GetInputToCheckerFunction(flag_values) - if not self.checker(param): - raise Error(self.message) - - def GetFlagsNames(self): - """Return the names of the flags checked by this validator. - - Returns: - [string], names of the flags - """ - raise NotImplementedError('This method should be overloaded') - - def PrintFlagsWithValues(self, flag_values): - raise NotImplementedError('This method should be overloaded') - - def _GetInputToCheckerFunction(self, flag_values): - """Given flag values, construct the input to be given to checker. - - Args: - flag_values: gflags.FlagValues, containing all flags. - Returns: - Return type depends on the specific validator. - """ - raise NotImplementedError('This method should be overloaded') - - -class SimpleValidator(Validator): - """Validator behind RegisterValidator() method. - - Validates that a single flag passes its checker function. The checker function - takes the flag value and returns True (if value looks fine) or, if flag value - is not valid, either returns False or raises an Exception.""" - def __init__(self, flag_name, checker, message): - """Constructor. - - Args: - flag_name: string, name of the flag. - checker: function to verify the validator. - input - value of the corresponding flag (string, boolean, etc). - output - Boolean. Must return True if validator constraint is satisfied. - If constraint is not satisfied, it should either return False or - raise Error. - message: string, error message to be shown to the user if validator's - condition is not satisfied - """ - super(SimpleValidator, self).__init__(checker, message) - self.flag_name = flag_name - - def GetFlagsNames(self): - return [self.flag_name] - - def PrintFlagsWithValues(self, flag_values): - return 'flag --%s=%s' % (self.flag_name, flag_values[self.flag_name].value) - - def _GetInputToCheckerFunction(self, flag_values): - """Given flag values, construct the input to be given to checker. - - Args: - flag_values: gflags.FlagValues - Returns: - value of the corresponding flag. - """ - return flag_values[self.flag_name].value - - -class DictionaryValidator(Validator): - """Validator behind RegisterDictionaryValidator method. - - Validates that flag values pass their common checker function. The checker - function takes flag values and returns True (if values look fine) or, - if values are not valid, either returns False or raises an Exception. - """ - def __init__(self, flag_names, checker, message): - """Constructor. - - Args: - flag_names: [string], containing names of the flags used by checker. - checker: function to verify the validator. - input - dictionary, with keys() being flag_names, and value for each - key being the value of the corresponding flag (string, boolean, etc). - output - Boolean. Must return True if validator constraint is satisfied. - If constraint is not satisfied, it should either return False or - raise Error. - message: string, error message to be shown to the user if validator's - condition is not satisfied - """ - super(DictionaryValidator, self).__init__(checker, message) - self.flag_names = flag_names - - def _GetInputToCheckerFunction(self, flag_values): - """Given flag values, construct the input to be given to checker. - - Args: - flag_values: gflags.FlagValues - Returns: - dictionary, with keys() being self.lag_names, and value for each key - being the value of the corresponding flag (string, boolean, etc). - """ - return dict([key, flag_values[key].value] for key in self.flag_names) - - def PrintFlagsWithValues(self, flag_values): - prefix = 'flags ' - flags_with_values = [] - for key in self.flag_names: - flags_with_values.append('%s=%s' % (key, flag_values[key].value)) - return prefix + ', '.join(flags_with_values) - - def GetFlagsNames(self): - return self.flag_names
diff --git a/third_party/python_gflags/setup.py b/third_party/python_gflags/setup.py deleted file mode 100755 index 573db2d4..0000000 --- a/third_party/python_gflags/setup.py +++ /dev/null
@@ -1,44 +0,0 @@ -#!/usr/bin/env python - -# Copyright (c) 2007, Google Inc. -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are -# met: -# -# * Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# * Redistributions in binary form must reproduce the above -# copyright notice, this list of conditions and the following disclaimer -# in the documentation and/or other materials provided with the -# distribution. -# * Neither the name of Google Inc. nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -from setuptools import setup - -setup(name='python-gflags', - version='2.0', - description='Google Commandline Flags Module', - license='BSD', - author='Google Inc. and others', - author_email='google-gflags@googlegroups.com', - url='http://code.google.com/p/python-gflags', - py_modules=["gflags", "gflags_validators"], - data_files=[("bin", ["gflags2man.py"])], - include_package_data=True, - )
diff --git a/tools/checkperms/checkperms.py b/tools/checkperms/checkperms.py index 9960558..81c2cf5 100755 --- a/tools/checkperms/checkperms.py +++ b/tools/checkperms/checkperms.py
@@ -192,7 +192,6 @@ 'third_party/libxml/src/ltmain.sh', 'third_party/mesa/', 'third_party/protobuf/', - 'third_party/python_gflags/gflags.py', 'third_party/sqlite/', 'third_party/talloc/script/mksyms.sh', 'third_party/tcmalloc/',
diff --git a/tools/chrome_proxy/webdriver/bypass.py b/tools/chrome_proxy/webdriver/bypass.py index 3b7798a..6000687 100644 --- a/tools/chrome_proxy/webdriver/bypass.py +++ b/tools/chrome_proxy/webdriver/bypass.py
@@ -102,6 +102,39 @@ for response in responses: self.assertHasChromeProxyViaHeader(response) + # Verify that when Chrome receives a 4xx response through a Data Reduction + # Proxy that doesn't set a proper via header, Chrome bypasses all proxies and + # retries the request over direct. + def testMissingViaHeader4xxBypass(self): + with TestDriver() as test_driver: + test_driver.AddChromeArg('--enable-spdy-proxy-auth') + + # Set the primary Data Reduction Proxy to be the test server, which does + # not add any Via headers. + test_driver.AddChromeArg('--data-reduction-proxy-http-proxies=' + 'https://chromeproxy-test.appspot.com;' + 'http://compress.googlezip.net') + + # Load a page that will come back with a 4xx response code and without the + # proper via header. Chrome should bypass all proxies and retry the + # request. + test_driver.LoadURL( + 'http://chromeproxy-test.appspot.com/default?respStatus=414') + responses = test_driver.GetHTTPResponses() + self.assertNotEqual(0, len(responses)) + for response in responses: + self.assertNotHasChromeProxyViaHeader(response) + self.assertEqual(u'http/1.1', response.protocol) + + # Check that the BlockTypePrimary histogram has a single entry in the + # MissingViaHeader4xx category (which is enum value 4), to make sure that + # the bypass was caused by the missing via header logic and not something + # else. + histogram = test_driver.GetHistogram( + "DataReductionProxy.BlockTypePrimary") + self.assertEqual(1, histogram['count']) + self.assertIn({'count': 1, 'high': 5, 'low': 4}, histogram['buckets']) + if __name__ == '__main__': IntegrationTest.RunAllTests()
diff --git a/tools/chrome_proxy/webdriver/fallback.py b/tools/chrome_proxy/webdriver/fallback.py index 4de3956..86025e2b 100644 --- a/tools/chrome_proxy/webdriver/fallback.py +++ b/tools/chrome_proxy/webdriver/fallback.py
@@ -36,5 +36,38 @@ self.assertHasChromeProxyViaHeader(response) self.assertEqual(u'http/1.1', response.protocol) + # Verify that when Chrome receives a non-4xx response through a Data Reduction + # Proxy that doesn't set a proper via header, Chrome falls back to the next + # available proxy. + def testMissingViaHeaderNon4xxFallback(self): + with TestDriver() as test_driver: + test_driver.AddChromeArg('--enable-spdy-proxy-auth') + + # Set the primary Data Reduction Proxy to be the test server, which does + # not add any Via headers. The fallback Data Reduction Proxy is set to the + # canonical Data Reduction Proxy target. + test_driver.AddChromeArg('--data-reduction-proxy-http-proxies=' + 'https://chromeproxy-test.appspot.com;' + 'http://compress.googlezip.net') + + # Load a page that should fall back off of the test server proxy, and onto + # the canonical proxy that will set the correct Via header. + test_driver.LoadURL('http://chromeproxy-test.appspot.com/default') + responses = test_driver.GetHTTPResponses() + self.assertNotEqual(0, len(responses)) + for response in responses: + self.assertHasChromeProxyViaHeader(response) + self.assertEqual(u'http/1.1', response.protocol) + + # Check that the BypassTypePrimary histogram has a single entry in the + # MissingViaHeaderOther category (which is enum value 5), to make sure + # that the bypass was caused by the missing via header logic and not + # something else. + histogram = test_driver.GetHistogram( + "DataReductionProxy.BypassTypePrimary") + self.assertEqual(1, histogram['count']) + self.assertIn({'count': 1, 'high': 6, 'low': 5}, histogram['buckets']) + + if __name__ == '__main__': IntegrationTest.RunAllTests()
diff --git a/tools/clang/scripts/update.py b/tools/clang/scripts/update.py index 35e57c9..ae0aca7 100755 --- a/tools/clang/scripts/update.py +++ b/tools/clang/scripts/update.py
@@ -397,8 +397,9 @@ def UpdateClang(args): print 'Updating Clang to %s...' % PACKAGE_VERSION - # Required for LTO, which is used when is_official_build = true. - need_gold_plugin = sys.platform.startswith('linux') + need_gold_plugin = 'LLVM_DOWNLOAD_GOLD_PLUGIN' in os.environ or ( + sys.platform.startswith('linux') and + 'buildtype=Official' in os.environ.get('GYP_DEFINES', '')) if ReadStampFile() == PACKAGE_VERSION and not args.force_local_build: print 'Clang is already up to date.'
diff --git a/tools/gypv8sh.py b/tools/gypv8sh.py index d1f246c..e6d655f 100755 --- a/tools/gypv8sh.py +++ b/tools/gypv8sh.py
@@ -45,15 +45,6 @@ (v8_shell, mock_js, test_api, js2webui, test_type, inputfile, inputrelfile, cxxoutfile, jsoutfile) = args cmd = [v8_shell] - icudatafile = os.path.join(os.path.dirname(v8_shell), 'icudtl.dat') - if os.path.exists(icudatafile): - cmd.extend(['--icu-data-file=%s' % icudatafile]) - v8nativesfile = os.path.join(os.path.dirname(v8_shell), 'natives_blob.bin') - if opts.external == 'y' and os.path.exists(v8nativesfile): - cmd.extend(['--natives_blob=%s' % v8nativesfile]) - v8snapshotfile = os.path.join(os.path.dirname(v8_shell), 'snapshot_blob.bin') - if opts.external == 'y' and os.path.exists(v8snapshotfile): - cmd.extend(['--snapshot_blob=%s' % v8snapshotfile]) arguments = [js2webui, inputfile, inputrelfile, opts.deps_js, cxxoutfile, test_type] cmd.extend(['-e', "arguments=" + json.dumps(arguments), mock_js,
diff --git a/tools/mb/mb_config.pyl b/tools/mb/mb_config.pyl index d67e6f8..c9f01f39 100644 --- a/tools/mb/mb_config.pyl +++ b/tools/mb/mb_config.pyl
@@ -206,9 +206,6 @@ 'ThinLTO Linux ToT': 'thin_lto_clang_tot_full_symbols_release_static_use_lld', 'UBSanVptr Linux': 'ubsan_vptr_release_bot', 'WebKit Linux - TraceWrappables': 'debug_bot', - 'WebKit Linux - WPTServe': 'release_bot', - 'WebKit Mac - WPTServe': 'release_bot', - 'WebKit Win - WPTServe': 'release_bot_x86', 'WebKit Linux - RandomOrder': 'release_bot', 'WebKit Mac - RandomOrder': 'release_bot', 'WebKit Win - RandomOrder': 'release_bot_x86',
diff --git a/tools/metrics/histograms/histograms.xml b/tools/metrics/histograms/histograms.xml index 3670e9d20..7b496b83 100644 --- a/tools/metrics/histograms/histograms.xml +++ b/tools/metrics/histograms/histograms.xml
@@ -1577,7 +1577,7 @@ <owner>alexchau@google.com</owner> <owner>phweiss@google.com</owner> <summary> - Elapsed time from click on "Sign in" to call to onSignInFailed for + Elapsed time from the signing in process start to call to onSignInFailed for managed users. </summary> </histogram> @@ -1586,7 +1586,7 @@ <owner>alexchau@google.com</owner> <owner>phweiss@google.com</owner> <summary> - Elapsed time from click on "Sign in" to call to onSignInFailed for + Elapsed time from the signing in process start to call to onSignInFailed for unmanaged users. </summary> </histogram> @@ -1595,7 +1595,7 @@ <owner>alexchau@google.com</owner> <owner>phweiss@google.com</owner> <summary> - Elapsed time from click on "Sign in" to successful call to + Elapsed time from the signing in process start to successful call to onSignInComplete for managed users. </summary> </histogram> @@ -1604,7 +1604,7 @@ <owner>alexchau@google.com</owner> <owner>phweiss@google.com</owner> <summary> - Elapsed time from click on "Sign in" to successful call to + Elapsed time from the signing in process start to successful call to onSignInComplete for unmanaged users. </summary> </histogram> @@ -72234,6 +72234,11 @@ </summary> </histogram> +<histogram name="TouchBar.Default.Metrics" enum="DefaultTouchBarActions"> + <owner>spqchan@chromium.com</owner> + <summary>Tracks the usage of the default touch bar buttons.</summary> +</histogram> + <histogram name="Touchpad.Device" enum="TouchpadDeviceState"> <owner>pthammaiah@google.com</owner> <summary>Tracks touchpad device state.</summary> @@ -86736,6 +86741,17 @@ <int value="8" label="DSP set to new engine with no previous value in prefs"/> </enum> +<enum name="DefaultTouchBarActions" type="int"> + <int value="0" label="Back"/> + <int value="1" label="Forward"/> + <int value="2" label="Stop"/> + <int value="3" label="Reload"/> + <int value="4" label="Home"/> + <int value="5" label="Search"/> + <int value="6" label="Star"/> + <int value="7" label="New Tab"/> +</enum> + <enum name="DefaultWebClientState" type="int"> <int value="0" label="Not default">Chrome is not the default web client.</int> <int value="1" label="Is default">Chrome is the default web client.</int> @@ -99466,6 +99482,7 @@ label="NonValidatingReloadOnRefreshContentV2:disabled"/> <int value="-231922000" label="enable-renderer-mojo-channel"/> <int value="-213518852" label="protect-sync-credential:enabled"/> + <int value="-213214894" label="enable-chromevox-arc-support"/> <int value="-206393363" label="enable-scroll-prediction"/> <int value="-204355195" label="secondary-ui-md"/> <int value="-202007318" label="AndroidAIAFetching:enabled"/>
diff --git a/tools/perf/OWNERS b/tools/perf/OWNERS index 596f984..ad7d080 100644 --- a/tools/perf/OWNERS +++ b/tools/perf/OWNERS
@@ -1,11 +1,11 @@ -achuith@chromium.org -aiolos@chromium.org -dtu@chromium.org -eakuefner@chromium.org +charliea@chromium.org nednguyen@google.com -skyostil@chromium.org sullivan@chromium.org -zhenw@chromium.org + +# For changes related to ChromeOS. +achuith@chromium.org + +# For changes related to generate_perf_json. eyaich@chromium.org # Simple rubberstamp-only oilpan-related changes. @@ -18,11 +18,16 @@ kouhei@chromium.org # emeritus: +# aiolos@chromium.org +# dtu@chromium.org +# eakuefner@chromium.org # marja@chromium.org # nduca@chromium.org # petrcermak@chromium.org # qyearsley@chromium.org +# skyostil@chromium.org # tonyg@chromium.org +# zhenw@chromium.org # TEAM: benchmarking-dev@chromium.org # COMPONENT: Speed>Benchmarking
diff --git a/tools/perf/PRESUBMIT.py b/tools/perf/PRESUBMIT.py index fb84812..c753c2ac 100644 --- a/tools/perf/PRESUBMIT.py +++ b/tools/perf/PRESUBMIT.py
@@ -54,7 +54,7 @@ perf_dir = input_api.PresubmitLocalPath() out, return_code = _RunArgs([ input_api.python_executable, - input_api.os_path.join(perf_dir, 'generate_perf_json.py'), + input_api.os_path.join(perf_dir, 'generate_perf_json'), '--validate-only'], input_api) if return_code: results.append(output_api.PresubmitError(
diff --git a/tools/perf/benchmarks/memory.py b/tools/perf/benchmarks/memory.py index eb7baa0..3b0df04 100644 --- a/tools/perf/benchmarks/memory.py +++ b/tools/perf/benchmarks/memory.py
@@ -51,6 +51,29 @@ options.clear_sytem_cache_for_browser_and_profile_on_start = True +@benchmark.Enabled('mac') +@benchmark.Enabled('win') +@benchmark.Owner(emails=['erikchen@chromium.org']) +class MemoryBenchmarkTrivialSitesDesktop(_MemoryInfra): + """Measure memory usage on trivial sites.""" + page_set = page_sets.TrivialSitesStorySet + options = {'pageset_repeat': 5} + + @classmethod + def Name(cls): + return 'memory.desktop' + + @classmethod + def ShouldTearDownStateAfterEachStoryRun(cls): + return True + + @classmethod + def ValueCanBeAddedPredicate(cls, value, is_first_result): + # TODO(crbug.com/610962): Remove this stopgap when the perf dashboard + # is able to cope with the data load generated by TBMv2 metrics. + return not _IGNORED_STATS_RE.search(value.name) + + @benchmark.Enabled('android') # catapult:#3176 @benchmark.Owner(emails=['perezju@chromium.org']) class MemoryBenchmarkTop10Mobile(_MemoryInfra):
diff --git a/tools/perf/desktop_benchmark_avg_times.json b/tools/perf/core/desktop_benchmark_avg_times.json similarity index 100% rename from tools/perf/desktop_benchmark_avg_times.json rename to tools/perf/core/desktop_benchmark_avg_times.json
diff --git a/tools/perf/generate_perf_json.py b/tools/perf/core/perf_json_generator.py similarity index 98% rename from tools/perf/generate_perf_json.py rename to tools/perf/core/perf_json_generator.py index 6339808b..5e908f6 100755 --- a/tools/perf/generate_perf_json.py +++ b/tools/perf/core/perf_json_generator.py
@@ -682,7 +682,7 @@ runtime_list = [] benchmark_avgs = {} new_benchmarks = [] - timing_file_path = os.path.join(src_dir(), 'tools', 'perf', + timing_file_path = os.path.join(src_dir(), 'tools', 'perf', 'core', 'desktop_benchmark_avg_times.json') # Load in the avg times as calculated on Nov 1st, 2016 with open(timing_file_path) as f: @@ -809,7 +809,8 @@ def src_dir(): file_path = os.path.abspath(__file__) - return os.path.dirname(os.path.dirname(os.path.dirname(file_path))) + return os.path.dirname(os.path.dirname( + os.path.dirname(os.path.dirname(file_path)))) def main(args): @@ -842,6 +843,3 @@ update_all_tests(fyi_waterfall) update_all_tests(waterfall) return 0 - -if __name__ == '__main__': - sys.exit(main(sys.argv[1:]))
diff --git a/tools/perf/generate_perf_json b/tools/perf/generate_perf_json new file mode 100755 index 0000000..e465c72d --- /dev/null +++ b/tools/perf/generate_perf_json
@@ -0,0 +1,12 @@ +#!/usr/bin/env python +# 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 sys + +from core import perf_json_generator + + +if __name__ == '__main__': + sys.exit(perf_json_generator.main(sys.argv[1:]))
diff --git a/ui/android/BUILD.gn b/ui/android/BUILD.gn index 515c97c6d..9726c38 100644 --- a/ui/android/BUILD.gn +++ b/ui/android/BUILD.gn
@@ -170,6 +170,7 @@ "java/src/org/chromium/ui/DropdownItem.java", "java/src/org/chromium/ui/DropdownItemBase.java", "java/src/org/chromium/ui/DropdownPopupWindow.java", + "java/src/org/chromium/ui/HorizontalListDividerDrawable.java", "java/src/org/chromium/ui/OverscrollRefreshHandler.java", "java/src/org/chromium/ui/UiUtils.java", "java/src/org/chromium/ui/VSyncMonitor.java",
diff --git a/ui/android/java/src/org/chromium/ui/HorizontalListDividerDrawable.java b/ui/android/java/src/org/chromium/ui/HorizontalListDividerDrawable.java new file mode 100644 index 0000000..5d31e1e --- /dev/null +++ b/ui/android/java/src/org/chromium/ui/HorizontalListDividerDrawable.java
@@ -0,0 +1,43 @@ +// 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. + +package org.chromium.ui; + +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.Rect; +import android.graphics.drawable.Drawable; +import android.graphics.drawable.LayerDrawable; + +/** + * Draws a horizontal list divider line at the bottom of its drawing area. + * + * Because ?android:attr/listDivider may be a 9-patch, there's no way to achieve this drawing + * effect with the platform Drawable classes; hence this custom Drawable. + */ +public class HorizontalListDividerDrawable extends LayerDrawable { + /** + * Create a horizontal list divider drawable. + * + * @param context The context used to create drawable. + * @return The drawable. + */ + public static HorizontalListDividerDrawable create(Context context) { + TypedArray a = context.obtainStyledAttributes(new int[] {android.R.attr.listDivider}); + Drawable listDivider = a.getDrawable(0); + a.recycle(); + return new HorizontalListDividerDrawable(new Drawable[] {listDivider}); + } + + private HorizontalListDividerDrawable(Drawable[] layers) { + super(layers); + } + + @Override + protected void onBoundsChange(Rect bounds) { + int listDividerHeight = getDrawable(0).getIntrinsicHeight(); + setLayerInset(0, 0, bounds.height() - listDividerHeight, 0, 0); + super.onBoundsChange(bounds); + } +}
diff --git a/ui/android/java/src/org/chromium/ui/base/ViewAndroidDelegate.java b/ui/android/java/src/org/chromium/ui/base/ViewAndroidDelegate.java index bf674594..8e3deda 100644 --- a/ui/android/java/src/org/chromium/ui/base/ViewAndroidDelegate.java +++ b/ui/android/java/src/org/chromium/ui/base/ViewAndroidDelegate.java
@@ -4,6 +4,7 @@ package org.chromium.ui.base; +import android.annotation.TargetApi; import android.content.ClipData; import android.content.Intent; import android.graphics.Bitmap; @@ -26,10 +27,6 @@ @JNINamespace("ui") public abstract class ViewAndroidDelegate { private static final String TAG = "ViewAndroidDelegate"; - - // TODO(hush): use View#DRAG_FLAG_GLOBAL when Chromium starts to build with API 24. - private static final int DRAG_FLAG_GLOBAL = 1 << 8; - private static final String GEO_SCHEME = "geo"; private static final String TEL_SCHEME = "tel"; private static final String MAILTO_SCHEME = "mailto"; @@ -95,8 +92,7 @@ * @param shadowImage The shadow image for the dragged text. */ @SuppressWarnings("deprecation") - // TODO(hush): uncomment below when we build with API 24. - // @TargetApi(Build.VERSION_CODES.N) + @TargetApi(Build.VERSION_CODES.N) @CalledByNative private boolean startDragAndDrop(String text, Bitmap shadowImage) { if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.M) return false; @@ -108,9 +104,8 @@ imageView.setImageBitmap(shadowImage); imageView.layout(0, 0, shadowImage.getWidth(), shadowImage.getHeight()); - // TODO(hush): use View#startDragAndDrop when Chromium starts to build with API 24. - return containerView.startDrag(ClipData.newPlainText(null, text), - new View.DragShadowBuilder(imageView), null, DRAG_FLAG_GLOBAL); + return containerView.startDragAndDrop(ClipData.newPlainText(null, text), + new View.DragShadowBuilder(imageView), null, View.DRAG_FLAG_GLOBAL); } /**
diff --git a/ui/aura/window_tree_host.cc b/ui/aura/window_tree_host.cc index cf223aed..a136f94f 100644 --- a/ui/aura/window_tree_host.cc +++ b/ui/aura/window_tree_host.cc
@@ -266,8 +266,7 @@ compositor_->SetScaleAndSize(GetDeviceScaleFactorFromDisplay(window()), GetBoundsInPixels().size()); compositor_->SetRootLayer(window()->layer()); - compositor_->SetDisplayColorSpace( - GetICCProfileForCurrentDisplay().GetColorSpace()); + compositor_->SetDisplayColorProfile(GetICCProfileForCurrentDisplay()); } void WindowTreeHost::OnAcceleratedWidgetAvailable() {
diff --git a/ui/compositor/compositor.cc b/ui/compositor/compositor.cc index 9c0bb0c..34ff8e9 100644 --- a/ui/compositor/compositor.cc +++ b/ui/compositor/compositor.cc
@@ -41,6 +41,7 @@ #include "ui/compositor/layer.h" #include "ui/compositor/layer_animator_collection.h" #include "ui/compositor/scoped_animation_duration_scale_mode.h" +#include "ui/gfx/icc_profile.h" #include "ui/gl/gl_switches.h" namespace { @@ -360,15 +361,15 @@ } } -void Compositor::SetDisplayColorSpace(const gfx::ColorSpace& color_space) { - blending_color_space_ = color_space; - output_color_space_ = color_space; +void Compositor::SetDisplayColorProfile(const gfx::ICCProfile& icc_profile) { + blending_color_space_ = icc_profile.GetColorSpace(); + output_color_space_ = blending_color_space_; if (base::CommandLine::ForCurrentProcess()->HasSwitch( switches::kEnableHDROutput)) { blending_color_space_ = gfx::ColorSpace::CreateExtendedSRGB(); output_color_space_ = gfx::ColorSpace::CreateSCRGBLinear(); } - host_->SetRasterColorSpace(color_space); + host_->SetRasterColorSpace(icc_profile.GetParametricColorSpace()); // Color space is reset when the output surface is lost, so this must also be // updated then. // TODO(fsamuel): Get rid of this.
diff --git a/ui/compositor/compositor.h b/ui/compositor/compositor.h index 55e910f..f94748b 100644 --- a/ui/compositor/compositor.h +++ b/ui/compositor/compositor.h
@@ -263,7 +263,7 @@ void SetScaleAndSize(float scale, const gfx::Size& size_in_pixel); // Set the output color profile into which this compositor should render. - void SetDisplayColorSpace(const gfx::ColorSpace& color_space); + void SetDisplayColorProfile(const gfx::ICCProfile& icc_profile); // Returns the size of the widget that is being drawn to in pixel coordinates. const gfx::Size& size() const { return size_; }
diff --git a/ui/events/blink/blink_event_util.cc b/ui/events/blink/blink_event_util.cc index f382fc1c..4cd7ac30 100644 --- a/ui/events/blink/blink_event_util.cc +++ b/ui/events/blink/blink_event_util.cc
@@ -962,11 +962,13 @@ return static_cast<blink::WebInputEvent::Modifiers>(0); } -bool IsGestureScollOrPinch(WebInputEvent::Type type) { +bool IsGestureScrollOrFlingOrPinch(WebInputEvent::Type type) { switch (type) { case blink::WebGestureEvent::GestureScrollBegin: case blink::WebGestureEvent::GestureScrollUpdate: case blink::WebGestureEvent::GestureScrollEnd: + case blink::WebGestureEvent::GestureFlingStart: + case blink::WebGestureEvent::GestureFlingCancel: case blink::WebGestureEvent::GesturePinchBegin: case blink::WebGestureEvent::GesturePinchUpdate: case blink::WebGestureEvent::GesturePinchEnd:
diff --git a/ui/events/blink/blink_event_util.h b/ui/events/blink/blink_event_util.h index 186428e..f201c63f6 100644 --- a/ui/events/blink/blink_event_util.h +++ b/ui/events/blink/blink_event_util.h
@@ -86,13 +86,13 @@ blink::WebInputEvent::Modifiers DomCodeToWebInputEventModifiers( ui::DomCode code); -bool IsGestureScollOrPinch(blink::WebInputEvent::Type); +bool IsGestureScrollOrFlingOrPinch(blink::WebInputEvent::Type); bool IsContinuousGestureEvent(blink::WebInputEvent::Type); inline const blink::WebGestureEvent& ToWebGestureEvent( const blink::WebInputEvent& event) { - DCHECK(IsGestureScollOrPinch(event.type())); + DCHECK(blink::WebInputEvent::isGestureEventType(event.type())); return static_cast<const blink::WebGestureEvent&>(event); }
diff --git a/ui/events/blink/input_handler_proxy.cc b/ui/events/blink/input_handler_proxy.cc index 9e93d47..bb002e4 100644 --- a/ui/events/blink/input_handler_proxy.cc +++ b/ui/events/blink/input_handler_proxy.cc
@@ -311,7 +311,7 @@ // Note: Other input can race ahead of gesture input as they don't have to go // through the queue, but we believe it's OK to do so. if (!compositor_event_queue_ || - !IsGestureScollOrPinch(event_with_callback->event().type())) { + !IsGestureScrollOrFlingOrPinch(event_with_callback->event().type())) { DispatchSingleInputEvent(std::move(event_with_callback), tick_clock_->NowTicks()); return; @@ -336,7 +336,7 @@ std::unique_ptr<EventWithCallback> event_with_callback, const base::TimeTicks now) { if (compositor_event_queue_ && - IsGestureScollOrPinch(event_with_callback->event().type())) { + IsGestureScrollOrFlingOrPinch(event_with_callback->event().type())) { // Report the coalesced count only for continuous events to avoid the noise // from non-continuous events. if (IsContinuousGestureEvent(event_with_callback->event().type())) {
diff --git a/ui/events/blink/input_handler_proxy_unittest.cc b/ui/events/blink/input_handler_proxy_unittest.cc index 6c86685..a9b6b2af 100644 --- a/ui/events/blink/input_handler_proxy_unittest.cc +++ b/ui/events/blink/input_handler_proxy_unittest.cc
@@ -126,15 +126,17 @@ modifiers); } -WebScopedInputEvent CreateGestureScrollOrPinch(WebInputEvent::Type type, - float deltaYOrScale = 0, - int x = 0, - int y = 0) { +WebScopedInputEvent CreateGestureScrollFlingPinch(WebInputEvent::Type type, + float deltaYOrScale = 0, + int x = 0, + int y = 0) { WebGestureEvent gesture(type, WebInputEvent::NoModifiers, WebInputEvent::TimeStampForTesting); gesture.sourceDevice = blink::WebGestureDeviceTouchpad; if (type == WebInputEvent::GestureScrollUpdate) { gesture.data.scrollUpdate.deltaY = deltaYOrScale; + } else if (type == WebInputEvent::GestureFlingStart) { + gesture.data.flingStart.velocityY = deltaYOrScale; } else if (type == WebInputEvent::GesturePinchUpdate) { gesture.data.pinchUpdate.scale = deltaYOrScale; gesture.x = x; @@ -541,7 +543,7 @@ int y = 0) { LatencyInfo latency; input_handler_proxy_->HandleInputEventWithLatencyInfo( - CreateGestureScrollOrPinch(type, deltay_or_scale, x, y), latency, + CreateGestureScrollFlingPinch(type, deltay_or_scale, x, y), latency, base::Bind( &InputHandlerProxyEventQueueTest::DidHandleInputEventAndOverscroll, weak_ptr_factory_.GetWeakPtr())); @@ -3532,6 +3534,55 @@ testing::Mock::VerifyAndClearExpectations(&mock_input_handler_); } +TEST_F(InputHandlerProxyEventQueueTest, GestureScrollFlingOrder) { + // Handle scroll on compositor. + cc::InputHandlerScrollResult scroll_result_did_scroll_; + scroll_result_did_scroll_.did_scroll = true; + + EXPECT_CALL(mock_input_handler_, ScrollBegin(testing::_, testing::_)) + .WillRepeatedly(testing::Return(kImplThreadScrollState)); + EXPECT_CALL(mock_input_handler_, SetNeedsAnimateInput()) + .Times(::testing::AtLeast(1)); + EXPECT_CALL( + mock_input_handler_, + ScrollBy(testing::Property(&cc::ScrollState::delta_y, testing::Gt(0)))) + .WillRepeatedly(testing::Return(scroll_result_did_scroll_)); + EXPECT_CALL(mock_input_handler_, ScrollEnd(testing::_)) + .Times(::testing::AtLeast(1)); + + // Simulate scroll. + HandleGestureEvent(WebInputEvent::GestureScrollBegin); + HandleGestureEvent(WebInputEvent::GestureScrollUpdate, -20); + HandleGestureEvent(WebInputEvent::GestureScrollUpdate, -30); + HandleGestureEvent(WebInputEvent::GestureFlingStart, -10); + + // ScrollUpdate and FlingStart should be queued. + EXPECT_EQ(2ul, event_queue().size()); + EXPECT_EQ(1ul, event_disposition_recorder_.size()); + EXPECT_EQ(WebInputEvent::GestureScrollUpdate, + event_queue()[0]->event().type()); + EXPECT_EQ(WebInputEvent::GestureFlingStart, event_queue()[1]->event().type()); + + // Dispatch events. + input_handler_proxy_->DeliverInputForBeginFrame(); + EXPECT_EQ(0ul, event_queue().size()); + EXPECT_EQ(4ul, event_disposition_recorder_.size()); + EXPECT_TRUE( + input_handler_proxy_->gesture_scroll_on_impl_thread_for_testing()); + + // Send FlingCancel to stop scrolling. + HandleGestureEvent(WebInputEvent::GestureFlingCancel); + EXPECT_EQ(1ul, event_queue().size()); + EXPECT_EQ(WebInputEvent::GestureFlingCancel, + event_queue()[0]->event().type()); + input_handler_proxy_->DeliverInputForBeginFrame(); + EXPECT_EQ(0ul, event_queue().size()); + EXPECT_EQ(5ul, event_disposition_recorder_.size()); + // Should stop scrolling. Note that no ScrollEnd was sent. + EXPECT_TRUE( + !input_handler_proxy_->gesture_scroll_on_impl_thread_for_testing()); +} + INSTANTIATE_TEST_CASE_P(AnimateInput, InputHandlerProxyTest, testing::ValuesIn(test_types));
diff --git a/ui/events/latency_info.dot b/ui/events/latency_info.dot index 7dcac5ad..e8ade17 100644 --- a/ui/events/latency_info.dot +++ b/ui/events/latency_info.dot
@@ -33,7 +33,7 @@ style=invis; node [shape=plaintext]; key [label="\ -INPUT_MODALITY = (Wheel | Mouse)\l\ +INPUT_MODALITY = (Wheel | Touch\l\ THREAD = (Main | Impl)\l\ SCROLL = (ScrollBegin | ScrollUpdate)\l"] }
diff --git a/ui/gfx/color_space.cc b/ui/gfx/color_space.cc index 78141bd..d32ddc3 100644 --- a/ui/gfx/color_space.cc +++ b/ui/gfx/color_space.cc
@@ -434,18 +434,12 @@ SkMatrix44 primaries; GetPrimaryMatrix(&primaries); SkColorSpaceTransferFn tr_fn; - bool get_tr_fn_result = GetTransferFunction(&tr_fn); - if (!get_tr_fn_result) { - DLOG(ERROR) << "Failed to parameterize transfer function for SkColorSpace"; - CreateSRGB().GetTransferFunction(&tr_fn); + if (!GetTransferFunction(&tr_fn)) { + DLOG(ERROR) << "Not creating non-parametric nonlinear-blended SkColorSpace"; + return nullptr; } - sk_sp<SkColorSpace> result = SkColorSpace::MakeRGB( - tr_fn, primaries, SkColorSpace::kNonLinearBlending_ColorSpaceFlag); - if (!result) { - DLOG(ERROR) << "Failed to create nonlinearly blended SkColorSpace"; - CreateSRGB().GetTransferFunction(&tr_fn); - } - return result; + return SkColorSpace::MakeRGB(tr_fn, primaries, + SkColorSpace::kNonLinearBlending_ColorSpaceFlag); } bool ColorSpace::GetICCProfile(ICCProfile* icc_profile) const { @@ -464,7 +458,7 @@ // If this was created from an ICC profile, retrieve that exact profile. ICCProfile result; - if (ICCProfile::FromId(icc_profile_id_, false, icc_profile)) + if (ICCProfile::FromId(icc_profile_id_, icc_profile)) return true; // Otherwise, construct an ICC profile based on the best approximated @@ -494,6 +488,7 @@ return; case ColorSpace::PrimaryID::INVALID: + case ColorSpace::PrimaryID::ICC_BASED: to_XYZD50->setIdentity(); return; @@ -699,6 +694,7 @@ case ColorSpace::TransferID::SMPTEST2084: case ColorSpace::TransferID::SMPTEST2084_NON_HDR: case ColorSpace::TransferID::INVALID: + case ColorSpace::TransferID::ICC_BASED: break; }
diff --git a/ui/gfx/color_space.h b/ui/gfx/color_space.h index f472af3..8a05ba0 100644 --- a/ui/gfx/color_space.h +++ b/ui/gfx/color_space.h
@@ -42,8 +42,13 @@ SMPTEST432_1, XYZ_D50, ADOBE_RGB, + // Primaries defined by the primary matrix |custom_primary_matrix_|. CUSTOM, - LAST = CUSTOM + // For color spaces defined by an ICC profile which cannot be represented + // parametrically. Any ColorTransform using this color space will use the + // ICC profile directly to compute a transform LUT. + ICC_BASED, + LAST = ICC_BASED, }; enum class TransferID : uint16_t { @@ -74,8 +79,11 @@ IEC61966_2_1_HDR, // The same as LINEAR but is defined for all real values. LINEAR_HDR, + // A parametric transfer function defined by |custom_transfer_params_|. CUSTOM, - LAST = CUSTOM, + // See PrimaryID::ICC_BASED. + ICC_BASED, + LAST = ICC_BASED, }; enum class MatrixID : int16_t {
diff --git a/ui/gfx/color_space_win.cc b/ui/gfx/color_space_win.cc index 2ca5593..75ab323 100644 --- a/ui/gfx/color_space_win.cc +++ b/ui/gfx/color_space_win.cc
@@ -78,6 +78,7 @@ case gfx::ColorSpace::PrimaryID::SMPTEST432_1: case gfx::ColorSpace::PrimaryID::XYZ_D50: case gfx::ColorSpace::PrimaryID::ADOBE_RGB: + case gfx::ColorSpace::PrimaryID::ICC_BASED: case gfx::ColorSpace::PrimaryID::CUSTOM: case gfx::ColorSpace::PrimaryID::INVALID: // Not handled @@ -118,6 +119,7 @@ case gfx::ColorSpace::TransferID::ARIB_STD_B67: case gfx::ColorSpace::TransferID::GAMMA24: case gfx::ColorSpace::TransferID::SMPTEST2084_NON_HDR: + case gfx::ColorSpace::TransferID::ICC_BASED: case gfx::ColorSpace::TransferID::CUSTOM: case gfx::ColorSpace::TransferID::INVALID: // Not handled
diff --git a/ui/gfx/color_transform.cc b/ui/gfx/color_transform.cc index c87652b..d47c5bfb 100644 --- a/ui/gfx/color_transform.cc +++ b/ui/gfx/color_transform.cc
@@ -746,6 +746,7 @@ base::MakeUnique<ColorTransformMatrix>(Invert(GetRangeAdjustMatrix(to)))); } +// TODO(ccameron): Change this to SkColorSpaceXform. class QCMSColorTransform : public ColorTransformStep { public: // Takes ownership of the profiles @@ -788,9 +789,21 @@ ScopedQcmsProfile ColorTransformInternal::GetQCMSProfileIfNecessary( const ColorSpace& color_space) { - ICCProfile icc_profile; - if (!ICCProfile::FromId(color_space.icc_profile_id_, true, &icc_profile)) + if (color_space.primaries_ != ColorSpace::PrimaryID::ICC_BASED && + color_space.transfer_ != ColorSpace::TransferID::ICC_BASED) { return nullptr; + } + // TODO(ccameron): Use SkColorSpaceXform here to avoid looking up the + // ICCProfile. + ICCProfile icc_profile; + if (!ICCProfile::FromId(color_space.icc_profile_id_, &icc_profile)) { + // We needed the original ICC profile to construct this transform, but it + // has been flushed from our cache. Fall back to using the ICC profile's + // inaccurate, so spam the console. + // TODO(ccameron): This will go away when we switch to SkColorSpaceXform. + LOG(ERROR) << "Failed to retrieve original ICC profile, using sRGB"; + return ScopedQcmsProfile(qcms_profile_sRGB()); + } return ScopedQcmsProfile(qcms_profile_from_memory( icc_profile.GetData().data(), icc_profile.GetData().size())); }
diff --git a/ui/gfx/icc_profile.cc b/ui/gfx/icc_profile.cc index de11f29..d2ddfef 100644 --- a/ui/gfx/icc_profile.cc +++ b/ui/gfx/icc_profile.cc
@@ -11,6 +11,7 @@ #include "base/synchronization/lock.h" #include "third_party/skia/include/core/SkICC.h" #include "ui/gfx/color_transform.h" +#include "ui/gfx/skia_color_space_util.h" namespace gfx { @@ -19,10 +20,9 @@ const uint64_t ICCProfile::test_id_generic_rgb_ = 3; const uint64_t ICCProfile::test_id_srgb_ = 4; const uint64_t ICCProfile::test_id_no_analytic_tr_fn_ = 5; +const uint64_t ICCProfile::test_id_a2b_only_ = 6; namespace { -const size_t kMinProfileLength = 128; -const size_t kMaxProfileLength = 4 * 1024 * 1024; // Allow keeping around a maximum of 8 cached ICC profiles. Beware that // we will do a linear search thorugh currently-cached ICC profiles, @@ -71,9 +71,8 @@ ICCProfile ICCProfile::FromDataWithId(const void* data, size_t size, uint64_t new_profile_id) { - if (!IsValidProfileLength(size)) { - if (size != 0) - DLOG(ERROR) << "Invalid ICC profile length: " << size << "."; + if (!size) { + DLOG(ERROR) << "Invalid empty ICC profile."; return ICCProfile(); } @@ -129,9 +128,21 @@ return color_space_; } +const ColorSpace& ICCProfile::GetParametricColorSpace() const { + // Move this ICC profile to the most recently used end of the cache, + // inserting if needed. + if (id_) { + Cache& cache = g_cache.Get(); + base::AutoLock lock(cache.lock); + auto found = cache.id_to_icc_profile_mru.Get(id_); + if (found == cache.id_to_icc_profile_mru.end()) + found = cache.id_to_icc_profile_mru.Put(id_, *this); + } + return parametric_color_space_; +} + // static bool ICCProfile::FromId(uint64_t id, - bool only_if_needed, ICCProfile* icc_profile) { if (!id) return false; @@ -143,11 +154,7 @@ if (found == cache.id_to_icc_profile_mru.end()) return false; - const ICCProfile& found_icc_profile = found->second; - if (found_icc_profile.color_space_is_accurate_ && only_if_needed) - return false; - - *icc_profile = found_icc_profile; + *icc_profile = found->second; return true; } @@ -162,47 +169,71 @@ auto found = cache.id_to_icc_profile_mru.Get(id_); if (found != cache.id_to_icc_profile_mru.end()) { color_space_ = found->second.color_space_; + parametric_color_space_ = found->second.parametric_color_space_; successfully_parsed_by_sk_icc_ = found->second.successfully_parsed_by_sk_icc_; return; } } - color_space_is_accurate_ = true; - SkMatrix44 to_XYZD50_matrix; - SkColorSpaceTransferFn fn; sk_sp<SkICC> sk_icc = SkICC::Make(data_.data(), data_.size()); if (sk_icc) { + bool parametric_color_space_is_accurate = false; successfully_parsed_by_sk_icc_ = true; - if (!sk_icc->toXYZD50(&to_XYZD50_matrix)) { - // Just say that the primaries were the sRGB primaries if we can't - // extract them. - gfx::ColorSpace::CreateSRGB().GetPrimaryMatrix(&to_XYZD50_matrix); - color_space_is_accurate_ = false; - DLOG(ERROR) << "Unable to handle ICCProfile primaries."; + + // Populate |parametric_color_space_| as a primary matrix and analytic + // transfer function, if possible. + SkMatrix44 to_XYZD50_matrix; + if (sk_icc->toXYZD50(&to_XYZD50_matrix)) { + SkColorSpaceTransferFn fn; + // First try to get a numerical transfer function from the profile. + if (sk_icc->isNumericalTransferFn(&fn)) { + parametric_color_space_is_accurate = true; + } else { + // If that fails, try to approximate the transfer function. + float fn_max_error = 0; + bool got_approximate_fn = + SkApproximateTransferFn(sk_icc, &fn_max_error, &fn); + if (got_approximate_fn) { + float kMaxError = 3.f / 256.f; + if (fn_max_error < kMaxError) { + parametric_color_space_is_accurate = true; + } else { + DLOG(ERROR) << "ICCProfile transfer function approximation " + << "inexact, error: " << 256.f * fn_max_error << "/256"; + } + } else { + // And if that fails, just say that the transfer function was sRGB. + DLOG(ERROR) << "Failed to approximate ICCProfile transfer function."; + gfx::ColorSpace::CreateSRGB().GetTransferFunction(&fn); + } + } + parametric_color_space_ = + gfx::ColorSpace::CreateCustom(to_XYZD50_matrix, fn); + } else { + DLOG(ERROR) << "Failed to extract ICCProfile primary matrix."; + // TODO(ccameron): Get an approximate gamut for rasterization. + parametric_color_space_ = gfx::ColorSpace::CreateSRGB(); } - if (!sk_icc->isNumericalTransferFn(&fn)) { - // Just say that the transfer function was sRGB if we cannot read it. - // TODO(ccameron): Use a least squares approximation of the transfer - // function when it is not numerical. - gfx::ColorSpace::CreateSRGB().GetTransferFunction(&fn); - color_space_is_accurate_ = false; - DLOG(ERROR) << "Unable to handle ICCProfile transfer function."; + + // If the approximation is accurate, then set |parametric_color_space_| and + // |color_space_| to the same value, and link them to |this|. Otherwise, set + // them separately, and do not link |parametric_color_space_| to |this|. + if (parametric_color_space_is_accurate) { + parametric_color_space_.icc_profile_id_ = id_; + color_space_ = parametric_color_space_; + } else { + color_space_ = ColorSpace(ColorSpace::PrimaryID::ICC_BASED, + ColorSpace::TransferID::ICC_BASED); + color_space_.icc_profile_id_ = id_; + color_space_.icc_profile_sk_color_space_ = + SkColorSpace::MakeICC(data_.data(), data_.size()); } } else { - successfully_parsed_by_sk_icc_ = false; - gfx::ColorSpace::CreateSRGB().GetPrimaryMatrix(&to_XYZD50_matrix); - gfx::ColorSpace::CreateSRGB().GetTransferFunction(&fn); - color_space_is_accurate_ = false; DLOG(ERROR) << "Unable parse ICCProfile."; + successfully_parsed_by_sk_icc_ = false; } - // Compute the color space. - color_space_ = gfx::ColorSpace::CreateCustom(to_XYZD50_matrix, fn); - color_space_.icc_profile_id_ = id_; - color_space_.icc_profile_sk_color_space_ = - SkColorSpace::MakeICC(data_.data(), data_.size()); - // Add to the cache. { Cache& cache = g_cache.Get(); @@ -211,9 +242,4 @@ } } -// static -bool ICCProfile::IsValidProfileLength(size_t length) { - return length >= kMinProfileLength && length <= kMaxProfileLength; -} - } // namespace gfx
diff --git a/ui/gfx/icc_profile.h b/ui/gfx/icc_profile.h index 95ae024..c4abac26f 100644 --- a/ui/gfx/icc_profile.h +++ b/ui/gfx/icc_profile.h
@@ -57,10 +57,15 @@ // Create directly from profile data. static ICCProfile FromData(const void* icc_profile, size_t size); - // This will perform a potentially-lossy conversion to a more compact color - // space representation. + // Return a ColorSpace that references this ICCProfile. ColorTransforms + // created using this ColorSpace will match this ICCProfile precisely. const ColorSpace& GetColorSpace() const; + // Return a ColorSpace that is the best parametric approximation of this + // ICCProfile. The resulting ColorSpace will reference this ICCProfile only + // if the parametric approximation is almost exact. + const ColorSpace& GetParametricColorSpace() const; + const std::vector<char>& GetData() const; #if defined(OS_WIN) @@ -76,17 +81,17 @@ friend ICCProfile ICCProfileForTestingGenericRGB(); friend ICCProfile ICCProfileForTestingSRGB(); friend ICCProfile ICCProfileForTestingNoAnalyticTrFn(); + friend ICCProfile ICCProfileForTestingA2BOnly(); static const uint64_t test_id_adobe_rgb_; static const uint64_t test_id_color_spin_; static const uint64_t test_id_generic_rgb_; static const uint64_t test_id_srgb_; static const uint64_t test_id_no_analytic_tr_fn_; + static const uint64_t test_id_a2b_only_; // Populate |icc_profile| with the ICCProfile corresponding to id |id|. Return - // false if |id| is not in the cache. If |only_if_needed| is true, then return - // false if |color_space_is_accurate_| is true for this profile (that is, if - // the ICCProfile is needed to know the space precisely). - static bool FromId(uint64_t id, bool only_if_needed, ICCProfile* icc_profile); + // false if |id| is not in the cache. + static bool FromId(uint64_t id, ICCProfile* icc_profile); // This method is used to hard-code the |id_| to a specific value, and is // used by test methods to ensure that they don't conflict with the values @@ -95,7 +100,6 @@ size_t size, uint64_t id); - static bool IsValidProfileLength(size_t length); void ComputeColorSpaceAndCache(); // This globally identifies this ICC profile. It is used to look up this ICC @@ -104,11 +108,13 @@ uint64_t id_ = 0; std::vector<char> data_; + // |color_space| always links back to this ICC profile, and its SkColorSpace + // is always equal to the SkColorSpace created from this ICCProfile. gfx::ColorSpace color_space_; - // True if |color_space_| accurately represents this color space (this is - // false e.g, for lookup-based profiles). - bool color_space_is_accurate_ = false; + // |parametric_color_space_| will only link back to this ICC profile if it + // is accurate, and its SkColorSpace will always be parametrically created. + gfx::ColorSpace parametric_color_space_; // This is set to true if SkICC successfully parsed this profile. bool successfully_parsed_by_sk_icc_ = false;
diff --git a/ui/gfx/icc_profile_unittest.cc b/ui/gfx/icc_profile_unittest.cc index c4e3db8..35d8edc 100644 --- a/ui/gfx/icc_profile_unittest.cc +++ b/ui/gfx/icc_profile_unittest.cc
@@ -64,4 +64,59 @@ adobe_space.ToSkColorSpace().get())); } +TEST(ICCProfile, ParametricVersusExact) { + // This ICC profile has three transfer functions that differ enough that the + // parametric color space is considered inaccurate. + ICCProfile inaccurate = ICCProfileForTestingNoAnalyticTrFn(); + EXPECT_NE(inaccurate.GetColorSpace(), inaccurate.GetParametricColorSpace()); + + ICCProfile inaccurate_color_space; + EXPECT_TRUE( + inaccurate.GetColorSpace().GetICCProfile(&inaccurate_color_space)); + EXPECT_EQ(inaccurate_color_space, inaccurate); + + ICCProfile inaccurate_parametric_color_space; + EXPECT_TRUE(inaccurate.GetParametricColorSpace().GetICCProfile( + &inaccurate_parametric_color_space)); + EXPECT_NE(inaccurate_parametric_color_space, inaccurate); + + // This ICC profile is precisely represented by the parametric color space. + ICCProfile accurate = ICCProfileForTestingAdobeRGB(); + EXPECT_EQ(accurate.GetColorSpace(), accurate.GetParametricColorSpace()); + + ICCProfile accurate_color_space; + EXPECT_TRUE(accurate.GetColorSpace().GetICCProfile(&accurate_color_space)); + EXPECT_EQ(accurate_color_space, accurate); + + ICCProfile accurate_parametric_color_space; + EXPECT_TRUE(accurate.GetParametricColorSpace().GetICCProfile( + &accurate_parametric_color_space)); + EXPECT_EQ(accurate_parametric_color_space, accurate); + + // This ICC profile has only an A2B representation. For now, this means that + // the parametric representation will be sRGB. We will eventually want to get + // some sense of the gamut. + ICCProfile a2b = ICCProfileForTestingA2BOnly(); + EXPECT_TRUE(a2b.GetColorSpace().IsValid()); + EXPECT_NE(a2b.GetColorSpace(), a2b.GetParametricColorSpace()); + EXPECT_EQ(ColorSpace::CreateSRGB(), a2b.GetParametricColorSpace()); +} + +TEST(ICCProfile, GarbageData) { + std::vector<char> bad_data(10 * 1024); + const char* bad_data_string = "deadbeef"; + for (size_t i = 0; i < bad_data.size(); ++i) + bad_data[i] = bad_data_string[i % 8]; + ICCProfile garbage_profile = + ICCProfile::FromData(bad_data.data(), bad_data.size()); + EXPECT_FALSE(garbage_profile.IsValid()); + EXPECT_FALSE(garbage_profile.GetColorSpace().IsValid()); + EXPECT_FALSE(garbage_profile.GetParametricColorSpace().IsValid()); + + ICCProfile default_ctor_profile; + EXPECT_FALSE(default_ctor_profile.IsValid()); + EXPECT_FALSE(default_ctor_profile.GetColorSpace().IsValid()); + EXPECT_FALSE(default_ctor_profile.GetParametricColorSpace().IsValid()); +} + } // namespace gfx
diff --git a/ui/gfx/skia_color_space_util.cc b/ui/gfx/skia_color_space_util.cc index b092887..b4878ec 100644 --- a/ui/gfx/skia_color_space_util.cc +++ b/ui/gfx/skia_color_space_util.cc
@@ -6,6 +6,7 @@ #include <algorithm> #include <cmath> +#include <vector> #include "base/logging.h" @@ -220,9 +221,9 @@ size_t n, SkColorSpaceTransferFn* fn) { // First, guess at a value of fD. Assume that the nonlinear segment applies - // to all x >= 0.1. This is generally a safe assumption (fD is usually less + // to all x >= 0.25. This is generally a safe assumption (fD is usually less // than 0.1). - fn->fD = 0.1f; + fn->fD = 0.25f; // Do a nonlinear regression on the nonlinear segment. Use a number of guesses // for the initial value of fG, because not all values will converge. @@ -362,6 +363,44 @@ return false; } +bool GFX_EXPORT SkApproximateTransferFn(sk_sp<SkICC> sk_icc, + float* max_error, + SkColorSpaceTransferFn* fn) { + SkICC::Tables tables; + bool got_tables = sk_icc->rawTransferFnData(&tables); + if (!got_tables) + return false; + + // Merge all channels' tables into a single array. + std::vector<float> x; + std::vector<float> t; + for (size_t c = 0; c < 3; ++c) { + SkICC::Channel* channels[3] = {&tables.fRed, &tables.fGreen, &tables.fBlue}; + SkICC::Channel* channel = channels[c]; + const float* data = reinterpret_cast<const float*>( + tables.fStorage->bytes() + channel->fOffset); + for (int i = 0; i < channel->fCount; ++i) { + float xi = i / (channel->fCount - 1.f); + float ti = data[i]; + x.push_back(xi); + t.push_back(ti); + } + } + + // Approximate and evalaute. + bool converged = + SkApproximateTransferFnInternal(x.data(), t.data(), x.size(), fn); + if (!converged) + return false; + *max_error = 0; + for (size_t i = 0; i < x.size(); ++i) { + float fn_of_xi = gfx::SkTransferFnEval(*fn, x[i]); + float error_at_xi = std::abs(t[i] - fn_of_xi); + *max_error = std::max(*max_error, error_at_xi); + } + return true; +} + bool SkMatrixIsApproximatelyIdentity(const SkMatrix44& m) { const float kEpsilon = 1.f / 256.f; for (int i = 0; i < 4; ++i) {
diff --git a/ui/gfx/skia_color_space_util.h b/ui/gfx/skia_color_space_util.h index f22b040..5ece50e 100644 --- a/ui/gfx/skia_color_space_util.h +++ b/ui/gfx/skia_color_space_util.h
@@ -6,6 +6,7 @@ #define UI_GFX_SKIA_COLOR_SPACE_UTIL_H_ #include "third_party/skia/include/core/SkColorSpace.h" +#include "third_party/skia/include/core/SkICC.h" #include "ui/gfx/gfx_export.h" namespace gfx { @@ -29,6 +30,14 @@ size_t n, SkColorSpaceTransferFn* fn); +// Approximates |sk_icc| by the transfer function |fn|. Returns in |max_error| +// the maximum pointwise of all color channels' transfer functions with |fn|. +// Returns false if no approximation was possible, or no approximation +// converged. +bool GFX_EXPORT SkApproximateTransferFn(sk_sp<SkICC> sk_icc, + float* max_error, + SkColorSpaceTransferFn* fn); + bool GFX_EXPORT SkMatrixIsApproximatelyIdentity(const SkMatrix44& m); } // namespace gfx
diff --git a/ui/gfx/test/icc_profiles.cc b/ui/gfx/test/icc_profiles.cc index ee7130f..f6c48d3 100644 --- a/ui/gfx/test/icc_profiles.cc +++ b/ui/gfx/test/icc_profiles.cc
@@ -704,6 +704,346 @@ 0x00, 0x6c, 0x00, 0x65, 0x00, 0x20, 0x00, 0x49, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x2e, 0x00, 0x20, 0x00, 0x32, 0x00, 0x30, 0x00, 0x31, 0x00, 0x36}; +const unsigned char a2b_only_profile_data[] = { + 0x00, 0x00, 0x0f, 0xd8, 0x41, 0x44, 0x42, 0x45, 0x04, 0x00, 0x00, 0x00, + 0x73, 0x63, 0x6e, 0x72, 0x52, 0x47, 0x42, 0x20, 0x58, 0x59, 0x5a, 0x20, + 0x07, 0xd2, 0x00, 0x08, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x63, 0x73, 0x70, 0x41, 0x50, 0x50, 0x4c, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0xf6, 0xd6, + 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0xd3, 0x2d, 0x41, 0x44, 0x42, 0x45, + 0x90, 0x51, 0xe0, 0x2b, 0x81, 0x28, 0xa4, 0x4d, 0x54, 0xfa, 0xae, 0x96, + 0xfb, 0x1a, 0x46, 0x77, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, + 0x63, 0x70, 0x72, 0x74, 0x00, 0x00, 0x00, 0xe4, 0x00, 0x00, 0x00, 0x6e, + 0x64, 0x65, 0x73, 0x63, 0x00, 0x00, 0x01, 0x54, 0x00, 0x00, 0x00, 0x30, + 0x77, 0x74, 0x70, 0x74, 0x00, 0x00, 0x01, 0x84, 0x00, 0x00, 0x00, 0x14, + 0x62, 0x6b, 0x70, 0x74, 0x00, 0x00, 0x01, 0x98, 0x00, 0x00, 0x00, 0x14, + 0x63, 0x68, 0x61, 0x64, 0x00, 0x00, 0x01, 0xac, 0x00, 0x00, 0x00, 0x2c, + 0x41, 0x32, 0x42, 0x30, 0x00, 0x00, 0x01, 0xd8, 0x00, 0x00, 0x07, 0x00, + 0x41, 0x32, 0x42, 0x32, 0x00, 0x00, 0x01, 0xd8, 0x00, 0x00, 0x07, 0x00, + 0x41, 0x32, 0x42, 0x31, 0x00, 0x00, 0x08, 0xd8, 0x00, 0x00, 0x07, 0x00, + 0x6d, 0x6c, 0x75, 0x63, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x0c, 0x65, 0x6e, 0x55, 0x53, 0x00, 0x00, 0x00, 0x52, + 0x00, 0x00, 0x00, 0x1c, 0x00, 0x43, 0x00, 0x6f, 0x00, 0x70, 0x00, 0x79, + 0x00, 0x72, 0x00, 0x69, 0x00, 0x67, 0x00, 0x68, 0x00, 0x74, 0x00, 0x20, + 0x00, 0x32, 0x00, 0x30, 0x00, 0x30, 0x00, 0x32, 0x00, 0x20, 0x00, 0x41, + 0x00, 0x64, 0x00, 0x6f, 0x00, 0x62, 0x00, 0x65, 0x00, 0x20, 0x00, 0x53, + 0x00, 0x79, 0x00, 0x73, 0x00, 0x74, 0x00, 0x65, 0x00, 0x6d, 0x00, 0x73, + 0x00, 0x20, 0x00, 0x49, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x6f, 0x00, 0x72, + 0x00, 0x70, 0x00, 0x6f, 0x00, 0x72, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, + 0x00, 0x64, 0x00, 0x00, 0x6d, 0x6c, 0x75, 0x63, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0c, 0x65, 0x6e, 0x55, 0x53, + 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x73, 0x00, 0x59, + 0x00, 0x43, 0x00, 0x43, 0x00, 0x20, 0x00, 0x38, 0x00, 0x2d, 0x00, 0x62, + 0x00, 0x69, 0x00, 0x74, 0x58, 0x59, 0x5a, 0x20, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xf6, 0xd6, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0xd3, 0x2d, + 0x58, 0x59, 0x5a, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x16, + 0x00, 0x00, 0x03, 0x33, 0x00, 0x00, 0x02, 0xa4, 0x73, 0x66, 0x33, 0x32, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x0c, 0x3f, 0x00, 0x00, 0x05, 0xdc, + 0xff, 0xff, 0xf3, 0x26, 0x00, 0x00, 0x07, 0x90, 0x00, 0x00, 0xfd, 0x92, + 0xff, 0xff, 0xfb, 0xa1, 0xff, 0xff, 0xfd, 0xa2, 0x00, 0x00, 0x03, 0xdc, + 0x00, 0x00, 0xc0, 0x71, 0x6d, 0x41, 0x42, 0x20, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x44, + 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x06, 0x98, 0x00, 0x00, 0x06, 0xdc, + 0x63, 0x75, 0x72, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x63, 0x75, 0x72, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x63, 0x75, 0x72, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x19, 0xde, 0x00, 0x00, 0xf8, 0xf2, 0x00, 0x00, 0x5c, 0x7d, + 0x00, 0x00, 0x8f, 0xcc, 0x00, 0x01, 0xcf, 0x78, 0x00, 0x00, 0x27, 0x30, + 0x00, 0x00, 0x08, 0xfc, 0x00, 0x00, 0x3e, 0xc1, 0x00, 0x01, 0xcd, 0x84, + 0xff, 0xff, 0xa2, 0x21, 0xff, 0xff, 0x9e, 0xa4, 0xff, 0xff, 0xaf, 0xb0, + 0x63, 0x75, 0x72, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x01, 0x10, 0x02, 0x1b, 0x03, 0x22, 0x04, 0x24, 0x05, 0x23, + 0x06, 0x1d, 0x07, 0x12, 0x08, 0x04, 0x08, 0xf1, 0x09, 0xda, 0x0a, 0xbe, + 0x0b, 0x9f, 0x0c, 0x7b, 0x0d, 0x53, 0x0e, 0x28, 0x0e, 0xf8, 0x0f, 0xc3, + 0x10, 0x8b, 0x11, 0x4f, 0x12, 0x0f, 0x12, 0xcb, 0x13, 0x83, 0x14, 0x37, + 0x14, 0xe7, 0x15, 0x93, 0x16, 0x3c, 0x16, 0xe0, 0x17, 0x81, 0x18, 0x1e, + 0x18, 0xb7, 0x19, 0x4d, 0x19, 0xdf, 0x1a, 0x6d, 0x1a, 0xf7, 0x1b, 0x7e, + 0x1c, 0x01, 0x1c, 0x81, 0x1c, 0xfd, 0x1d, 0x76, 0x1d, 0xeb, 0x1e, 0x5d, + 0x1e, 0xcb, 0x1f, 0x36, 0x1f, 0x9e, 0x20, 0x02, 0x20, 0x63, 0x20, 0xc1, + 0x21, 0x1b, 0x21, 0x73, 0x21, 0xc7, 0x22, 0x18, 0x22, 0x66, 0x22, 0xb0, + 0x22, 0xf8, 0x23, 0x3d, 0x23, 0x7f, 0x23, 0xbe, 0x23, 0xfa, 0x24, 0x33, + 0x24, 0x69, 0x24, 0x9d, 0x24, 0xce, 0x24, 0xfc, 0x25, 0x28, 0x25, 0x51, + 0x25, 0x77, 0x25, 0x9b, 0x25, 0xbd, 0x25, 0xdc, 0x25, 0xf9, 0x26, 0x13, + 0x26, 0x2b, 0x26, 0x41, 0x26, 0x55, 0x26, 0x67, 0x26, 0x77, 0x26, 0x85, + 0x26, 0x91, 0x26, 0x9c, 0x26, 0xa7, 0x26, 0xb2, 0x26, 0xbd, 0x26, 0xc8, + 0x26, 0xd3, 0x26, 0xde, 0x26, 0xe9, 0x26, 0xf6, 0x27, 0x04, 0x27, 0x15, + 0x27, 0x27, 0x27, 0x3c, 0x27, 0x53, 0x27, 0x6c, 0x27, 0x87, 0x27, 0xa5, + 0x27, 0xc5, 0x27, 0xe7, 0x28, 0x0c, 0x28, 0x34, 0x28, 0x5d, 0x28, 0x8a, + 0x28, 0xb9, 0x28, 0xeb, 0x29, 0x20, 0x29, 0x57, 0x29, 0x91, 0x29, 0xce, + 0x2a, 0x0e, 0x2a, 0x51, 0x2a, 0x97, 0x2a, 0xe0, 0x2b, 0x2c, 0x2b, 0x7b, + 0x2b, 0xcd, 0x2c, 0x22, 0x2c, 0x7a, 0x2c, 0xd6, 0x2d, 0x35, 0x2d, 0x97, + 0x2d, 0xfc, 0x2e, 0x65, 0x2e, 0xd1, 0x2f, 0x41, 0x2f, 0xb4, 0x30, 0x2a, + 0x30, 0xa4, 0x31, 0x21, 0x31, 0xa2, 0x32, 0x27, 0x32, 0xaf, 0x33, 0x3b, + 0x33, 0xca, 0x34, 0x5d, 0x34, 0xf4, 0x35, 0x8f, 0x36, 0x2d, 0x36, 0xcf, + 0x37, 0x75, 0x38, 0x1f, 0x38, 0xcc, 0x39, 0x7e, 0x3a, 0x33, 0x3a, 0xed, + 0x3b, 0xaa, 0x3c, 0x6b, 0x3d, 0x31, 0x3d, 0xfa, 0x3e, 0xc7, 0x3f, 0x99, + 0x40, 0x6e, 0x41, 0x48, 0x42, 0x26, 0x43, 0x08, 0x43, 0xee, 0x44, 0xd8, + 0x45, 0xc7, 0x46, 0xba, 0x47, 0xb1, 0x48, 0xac, 0x49, 0xac, 0x4a, 0xb0, + 0x4b, 0xb9, 0x4c, 0xc6, 0x4d, 0xd7, 0x4e, 0xec, 0x50, 0x06, 0x51, 0x25, + 0x52, 0x48, 0x53, 0x70, 0x54, 0x9c, 0x55, 0xcc, 0x57, 0x01, 0x58, 0x3b, + 0x59, 0x79, 0x5a, 0xbc, 0x5c, 0x04, 0x5d, 0x50, 0x5e, 0xa1, 0x5f, 0xf7, + 0x61, 0x51, 0x62, 0xb0, 0x64, 0x14, 0x65, 0x7c, 0x66, 0xea, 0x68, 0x5c, + 0x69, 0xd3, 0x6b, 0x4f, 0x6c, 0xcf, 0x6e, 0x55, 0x6f, 0xdf, 0x71, 0x6f, + 0x73, 0x03, 0x74, 0x9c, 0x76, 0x3a, 0x77, 0xdd, 0x79, 0x85, 0x7b, 0x32, + 0x7c, 0xe5, 0x7e, 0x9c, 0x80, 0x58, 0x82, 0x19, 0x83, 0xe0, 0x85, 0xab, + 0x87, 0x7c, 0x89, 0x52, 0x8b, 0x2d, 0x8d, 0x0d, 0x8e, 0xf2, 0x90, 0xdc, + 0x92, 0xcc, 0x94, 0xc1, 0x96, 0xbb, 0x98, 0xbb, 0x9a, 0xc0, 0x9c, 0xca, + 0x9e, 0xd9, 0xa0, 0xee, 0xa3, 0x08, 0xa5, 0x27, 0xa7, 0x4c, 0xa9, 0x76, + 0xab, 0xa6, 0xad, 0xdb, 0xb0, 0x15, 0xb2, 0x55, 0xb4, 0x9a, 0xb6, 0xe5, + 0xb9, 0x36, 0xbb, 0x8b, 0xbd, 0xe7, 0xc0, 0x48, 0xc2, 0xae, 0xc5, 0x1a, + 0xc7, 0x8c, 0xca, 0x03, 0xcc, 0x80, 0xcf, 0x02, 0xd1, 0x8a, 0xd4, 0x18, + 0xd6, 0xab, 0xd9, 0x44, 0xdb, 0xe3, 0xde, 0x87, 0xe1, 0x32, 0xe3, 0xe2, + 0xe6, 0x97, 0xe9, 0x53, 0xec, 0x14, 0xee, 0xdb, 0xf1, 0xa8, 0xf4, 0x7a, + 0xf7, 0x53, 0xfa, 0x31, 0xfd, 0x15, 0xff, 0xff, 0x63, 0x75, 0x72, 0x76, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x10, + 0x02, 0x1b, 0x03, 0x22, 0x04, 0x24, 0x05, 0x23, 0x06, 0x1d, 0x07, 0x12, + 0x08, 0x04, 0x08, 0xf1, 0x09, 0xda, 0x0a, 0xbe, 0x0b, 0x9f, 0x0c, 0x7b, + 0x0d, 0x53, 0x0e, 0x28, 0x0e, 0xf8, 0x0f, 0xc3, 0x10, 0x8b, 0x11, 0x4f, + 0x12, 0x0f, 0x12, 0xcb, 0x13, 0x83, 0x14, 0x37, 0x14, 0xe7, 0x15, 0x93, + 0x16, 0x3c, 0x16, 0xe0, 0x17, 0x81, 0x18, 0x1e, 0x18, 0xb7, 0x19, 0x4d, + 0x19, 0xdf, 0x1a, 0x6d, 0x1a, 0xf7, 0x1b, 0x7e, 0x1c, 0x01, 0x1c, 0x81, + 0x1c, 0xfd, 0x1d, 0x76, 0x1d, 0xeb, 0x1e, 0x5d, 0x1e, 0xcb, 0x1f, 0x36, + 0x1f, 0x9e, 0x20, 0x02, 0x20, 0x63, 0x20, 0xc1, 0x21, 0x1b, 0x21, 0x73, + 0x21, 0xc7, 0x22, 0x18, 0x22, 0x66, 0x22, 0xb0, 0x22, 0xf8, 0x23, 0x3d, + 0x23, 0x7f, 0x23, 0xbe, 0x23, 0xfa, 0x24, 0x33, 0x24, 0x69, 0x24, 0x9d, + 0x24, 0xce, 0x24, 0xfc, 0x25, 0x28, 0x25, 0x51, 0x25, 0x77, 0x25, 0x9b, + 0x25, 0xbd, 0x25, 0xdc, 0x25, 0xf9, 0x26, 0x13, 0x26, 0x2b, 0x26, 0x41, + 0x26, 0x55, 0x26, 0x67, 0x26, 0x77, 0x26, 0x85, 0x26, 0x91, 0x26, 0x9c, + 0x26, 0xa7, 0x26, 0xb2, 0x26, 0xbd, 0x26, 0xc8, 0x26, 0xd3, 0x26, 0xde, + 0x26, 0xe9, 0x26, 0xf6, 0x27, 0x04, 0x27, 0x15, 0x27, 0x27, 0x27, 0x3c, + 0x27, 0x53, 0x27, 0x6c, 0x27, 0x87, 0x27, 0xa5, 0x27, 0xc5, 0x27, 0xe7, + 0x28, 0x0c, 0x28, 0x34, 0x28, 0x5d, 0x28, 0x8a, 0x28, 0xb9, 0x28, 0xeb, + 0x29, 0x20, 0x29, 0x57, 0x29, 0x91, 0x29, 0xce, 0x2a, 0x0e, 0x2a, 0x51, + 0x2a, 0x97, 0x2a, 0xe0, 0x2b, 0x2c, 0x2b, 0x7b, 0x2b, 0xcd, 0x2c, 0x22, + 0x2c, 0x7a, 0x2c, 0xd6, 0x2d, 0x35, 0x2d, 0x97, 0x2d, 0xfc, 0x2e, 0x65, + 0x2e, 0xd1, 0x2f, 0x41, 0x2f, 0xb4, 0x30, 0x2a, 0x30, 0xa4, 0x31, 0x21, + 0x31, 0xa2, 0x32, 0x27, 0x32, 0xaf, 0x33, 0x3b, 0x33, 0xca, 0x34, 0x5d, + 0x34, 0xf4, 0x35, 0x8f, 0x36, 0x2d, 0x36, 0xcf, 0x37, 0x75, 0x38, 0x1f, + 0x38, 0xcc, 0x39, 0x7e, 0x3a, 0x33, 0x3a, 0xed, 0x3b, 0xaa, 0x3c, 0x6b, + 0x3d, 0x31, 0x3d, 0xfa, 0x3e, 0xc7, 0x3f, 0x99, 0x40, 0x6e, 0x41, 0x48, + 0x42, 0x26, 0x43, 0x08, 0x43, 0xee, 0x44, 0xd8, 0x45, 0xc7, 0x46, 0xba, + 0x47, 0xb1, 0x48, 0xac, 0x49, 0xac, 0x4a, 0xb0, 0x4b, 0xb9, 0x4c, 0xc6, + 0x4d, 0xd7, 0x4e, 0xec, 0x50, 0x06, 0x51, 0x25, 0x52, 0x48, 0x53, 0x70, + 0x54, 0x9c, 0x55, 0xcc, 0x57, 0x01, 0x58, 0x3b, 0x59, 0x79, 0x5a, 0xbc, + 0x5c, 0x04, 0x5d, 0x50, 0x5e, 0xa1, 0x5f, 0xf7, 0x61, 0x51, 0x62, 0xb0, + 0x64, 0x14, 0x65, 0x7c, 0x66, 0xea, 0x68, 0x5c, 0x69, 0xd3, 0x6b, 0x4f, + 0x6c, 0xcf, 0x6e, 0x55, 0x6f, 0xdf, 0x71, 0x6f, 0x73, 0x03, 0x74, 0x9c, + 0x76, 0x3a, 0x77, 0xdd, 0x79, 0x85, 0x7b, 0x32, 0x7c, 0xe5, 0x7e, 0x9c, + 0x80, 0x58, 0x82, 0x19, 0x83, 0xe0, 0x85, 0xab, 0x87, 0x7c, 0x89, 0x52, + 0x8b, 0x2d, 0x8d, 0x0d, 0x8e, 0xf2, 0x90, 0xdc, 0x92, 0xcc, 0x94, 0xc1, + 0x96, 0xbb, 0x98, 0xbb, 0x9a, 0xc0, 0x9c, 0xca, 0x9e, 0xd9, 0xa0, 0xee, + 0xa3, 0x08, 0xa5, 0x27, 0xa7, 0x4c, 0xa9, 0x76, 0xab, 0xa6, 0xad, 0xdb, + 0xb0, 0x15, 0xb2, 0x55, 0xb4, 0x9a, 0xb6, 0xe5, 0xb9, 0x36, 0xbb, 0x8b, + 0xbd, 0xe7, 0xc0, 0x48, 0xc2, 0xae, 0xc5, 0x1a, 0xc7, 0x8c, 0xca, 0x03, + 0xcc, 0x80, 0xcf, 0x02, 0xd1, 0x8a, 0xd4, 0x18, 0xd6, 0xab, 0xd9, 0x44, + 0xdb, 0xe3, 0xde, 0x87, 0xe1, 0x32, 0xe3, 0xe2, 0xe6, 0x97, 0xe9, 0x53, + 0xec, 0x14, 0xee, 0xdb, 0xf1, 0xa8, 0xf4, 0x7a, 0xf7, 0x53, 0xfa, 0x31, + 0xfd, 0x15, 0xff, 0xff, 0x63, 0x75, 0x72, 0x76, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x10, 0x02, 0x1b, 0x03, 0x22, + 0x04, 0x24, 0x05, 0x23, 0x06, 0x1d, 0x07, 0x12, 0x08, 0x04, 0x08, 0xf1, + 0x09, 0xda, 0x0a, 0xbe, 0x0b, 0x9f, 0x0c, 0x7b, 0x0d, 0x53, 0x0e, 0x28, + 0x0e, 0xf8, 0x0f, 0xc3, 0x10, 0x8b, 0x11, 0x4f, 0x12, 0x0f, 0x12, 0xcb, + 0x13, 0x83, 0x14, 0x37, 0x14, 0xe7, 0x15, 0x93, 0x16, 0x3c, 0x16, 0xe0, + 0x17, 0x81, 0x18, 0x1e, 0x18, 0xb7, 0x19, 0x4d, 0x19, 0xdf, 0x1a, 0x6d, + 0x1a, 0xf7, 0x1b, 0x7e, 0x1c, 0x01, 0x1c, 0x81, 0x1c, 0xfd, 0x1d, 0x76, + 0x1d, 0xeb, 0x1e, 0x5d, 0x1e, 0xcb, 0x1f, 0x36, 0x1f, 0x9e, 0x20, 0x02, + 0x20, 0x63, 0x20, 0xc1, 0x21, 0x1b, 0x21, 0x73, 0x21, 0xc7, 0x22, 0x18, + 0x22, 0x66, 0x22, 0xb0, 0x22, 0xf8, 0x23, 0x3d, 0x23, 0x7f, 0x23, 0xbe, + 0x23, 0xfa, 0x24, 0x33, 0x24, 0x69, 0x24, 0x9d, 0x24, 0xce, 0x24, 0xfc, + 0x25, 0x28, 0x25, 0x51, 0x25, 0x77, 0x25, 0x9b, 0x25, 0xbd, 0x25, 0xdc, + 0x25, 0xf9, 0x26, 0x13, 0x26, 0x2b, 0x26, 0x41, 0x26, 0x55, 0x26, 0x67, + 0x26, 0x77, 0x26, 0x85, 0x26, 0x91, 0x26, 0x9c, 0x26, 0xa7, 0x26, 0xb2, + 0x26, 0xbd, 0x26, 0xc8, 0x26, 0xd3, 0x26, 0xde, 0x26, 0xe9, 0x26, 0xf6, + 0x27, 0x04, 0x27, 0x15, 0x27, 0x27, 0x27, 0x3c, 0x27, 0x53, 0x27, 0x6c, + 0x27, 0x87, 0x27, 0xa5, 0x27, 0xc5, 0x27, 0xe7, 0x28, 0x0c, 0x28, 0x34, + 0x28, 0x5d, 0x28, 0x8a, 0x28, 0xb9, 0x28, 0xeb, 0x29, 0x20, 0x29, 0x57, + 0x29, 0x91, 0x29, 0xce, 0x2a, 0x0e, 0x2a, 0x51, 0x2a, 0x97, 0x2a, 0xe0, + 0x2b, 0x2c, 0x2b, 0x7b, 0x2b, 0xcd, 0x2c, 0x22, 0x2c, 0x7a, 0x2c, 0xd6, + 0x2d, 0x35, 0x2d, 0x97, 0x2d, 0xfc, 0x2e, 0x65, 0x2e, 0xd1, 0x2f, 0x41, + 0x2f, 0xb4, 0x30, 0x2a, 0x30, 0xa4, 0x31, 0x21, 0x31, 0xa2, 0x32, 0x27, + 0x32, 0xaf, 0x33, 0x3b, 0x33, 0xca, 0x34, 0x5d, 0x34, 0xf4, 0x35, 0x8f, + 0x36, 0x2d, 0x36, 0xcf, 0x37, 0x75, 0x38, 0x1f, 0x38, 0xcc, 0x39, 0x7e, + 0x3a, 0x33, 0x3a, 0xed, 0x3b, 0xaa, 0x3c, 0x6b, 0x3d, 0x31, 0x3d, 0xfa, + 0x3e, 0xc7, 0x3f, 0x99, 0x40, 0x6e, 0x41, 0x48, 0x42, 0x26, 0x43, 0x08, + 0x43, 0xee, 0x44, 0xd8, 0x45, 0xc7, 0x46, 0xba, 0x47, 0xb1, 0x48, 0xac, + 0x49, 0xac, 0x4a, 0xb0, 0x4b, 0xb9, 0x4c, 0xc6, 0x4d, 0xd7, 0x4e, 0xec, + 0x50, 0x06, 0x51, 0x25, 0x52, 0x48, 0x53, 0x70, 0x54, 0x9c, 0x55, 0xcc, + 0x57, 0x01, 0x58, 0x3b, 0x59, 0x79, 0x5a, 0xbc, 0x5c, 0x04, 0x5d, 0x50, + 0x5e, 0xa1, 0x5f, 0xf7, 0x61, 0x51, 0x62, 0xb0, 0x64, 0x14, 0x65, 0x7c, + 0x66, 0xea, 0x68, 0x5c, 0x69, 0xd3, 0x6b, 0x4f, 0x6c, 0xcf, 0x6e, 0x55, + 0x6f, 0xdf, 0x71, 0x6f, 0x73, 0x03, 0x74, 0x9c, 0x76, 0x3a, 0x77, 0xdd, + 0x79, 0x85, 0x7b, 0x32, 0x7c, 0xe5, 0x7e, 0x9c, 0x80, 0x58, 0x82, 0x19, + 0x83, 0xe0, 0x85, 0xab, 0x87, 0x7c, 0x89, 0x52, 0x8b, 0x2d, 0x8d, 0x0d, + 0x8e, 0xf2, 0x90, 0xdc, 0x92, 0xcc, 0x94, 0xc1, 0x96, 0xbb, 0x98, 0xbb, + 0x9a, 0xc0, 0x9c, 0xca, 0x9e, 0xd9, 0xa0, 0xee, 0xa3, 0x08, 0xa5, 0x27, + 0xa7, 0x4c, 0xa9, 0x76, 0xab, 0xa6, 0xad, 0xdb, 0xb0, 0x15, 0xb2, 0x55, + 0xb4, 0x9a, 0xb6, 0xe5, 0xb9, 0x36, 0xbb, 0x8b, 0xbd, 0xe7, 0xc0, 0x48, + 0xc2, 0xae, 0xc5, 0x1a, 0xc7, 0x8c, 0xca, 0x03, 0xcc, 0x80, 0xcf, 0x02, + 0xd1, 0x8a, 0xd4, 0x18, 0xd6, 0xab, 0xd9, 0x44, 0xdb, 0xe3, 0xde, 0x87, + 0xe1, 0x32, 0xe3, 0xe2, 0xe6, 0x97, 0xe9, 0x53, 0xec, 0x14, 0xee, 0xdb, + 0xf1, 0xa8, 0xf4, 0x7a, 0xf7, 0x53, 0xfa, 0x31, 0xfd, 0x15, 0xff, 0xff, + 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x11, 0x27, 0x83, 0x33, + 0x00, 0x00, 0x92, 0xa1, 0x41, 0x40, 0x00, 0x00, 0x11, 0x27, 0x63, 0x6c, + 0xa3, 0xa5, 0x92, 0xa1, 0x21, 0x79, 0xa3, 0xa5, 0x6d, 0x81, 0xdf, 0x8c, + 0x5c, 0x5a, 0xee, 0xfa, 0x9d, 0x9a, 0x5c, 0x5a, 0x6d, 0x81, 0xbf, 0xc5, + 0xff, 0xff, 0xee, 0xfa, 0x7d, 0xd3, 0xff, 0xff, 0x63, 0x75, 0x72, 0x76, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x63, 0x75, 0x72, 0x76, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x63, 0x75, 0x72, 0x76, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6d, 0x41, 0x42, 0x20, + 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, + 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x06, 0x98, + 0x00, 0x00, 0x06, 0xdc, 0x63, 0x75, 0x72, 0x76, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x63, 0x75, 0x72, 0x76, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x63, 0x75, 0x72, 0x76, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x17, 0x51, 0x00, 0x00, 0xf6, 0xb1, + 0x00, 0x00, 0x5b, 0xa7, 0x00, 0x00, 0x8e, 0x7e, 0x00, 0x01, 0xcb, 0x45, + 0x00, 0x00, 0x26, 0xd5, 0x00, 0x00, 0x08, 0xe7, 0x00, 0x00, 0x3e, 0x30, + 0x00, 0x01, 0xc9, 0x57, 0xff, 0xff, 0xa4, 0x18, 0xff, 0xff, 0xa0, 0xaf, + 0xff, 0xff, 0xb1, 0x5f, 0x63, 0x75, 0x72, 0x76, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x10, 0x02, 0x1b, 0x03, 0x22, + 0x04, 0x24, 0x05, 0x23, 0x06, 0x1d, 0x07, 0x12, 0x08, 0x04, 0x08, 0xf1, + 0x09, 0xda, 0x0a, 0xbe, 0x0b, 0x9f, 0x0c, 0x7b, 0x0d, 0x53, 0x0e, 0x28, + 0x0e, 0xf8, 0x0f, 0xc3, 0x10, 0x8b, 0x11, 0x4f, 0x12, 0x0f, 0x12, 0xcb, + 0x13, 0x83, 0x14, 0x37, 0x14, 0xe7, 0x15, 0x93, 0x16, 0x3c, 0x16, 0xe0, + 0x17, 0x81, 0x18, 0x1e, 0x18, 0xb7, 0x19, 0x4d, 0x19, 0xdf, 0x1a, 0x6d, + 0x1a, 0xf7, 0x1b, 0x7e, 0x1c, 0x01, 0x1c, 0x81, 0x1c, 0xfd, 0x1d, 0x76, + 0x1d, 0xeb, 0x1e, 0x5d, 0x1e, 0xcb, 0x1f, 0x36, 0x1f, 0x9e, 0x20, 0x02, + 0x20, 0x63, 0x20, 0xc1, 0x21, 0x1b, 0x21, 0x73, 0x21, 0xc7, 0x22, 0x18, + 0x22, 0x66, 0x22, 0xb0, 0x22, 0xf8, 0x23, 0x3d, 0x23, 0x7f, 0x23, 0xbe, + 0x23, 0xfa, 0x24, 0x33, 0x24, 0x69, 0x24, 0x9d, 0x24, 0xce, 0x24, 0xfc, + 0x25, 0x28, 0x25, 0x51, 0x25, 0x77, 0x25, 0x9b, 0x25, 0xbd, 0x25, 0xdc, + 0x25, 0xf9, 0x26, 0x13, 0x26, 0x2b, 0x26, 0x41, 0x26, 0x55, 0x26, 0x67, + 0x26, 0x77, 0x26, 0x85, 0x26, 0x91, 0x26, 0x9c, 0x26, 0xa7, 0x26, 0xb2, + 0x26, 0xbd, 0x26, 0xc8, 0x26, 0xd3, 0x26, 0xde, 0x26, 0xe9, 0x26, 0xf6, + 0x27, 0x04, 0x27, 0x15, 0x27, 0x27, 0x27, 0x3c, 0x27, 0x53, 0x27, 0x6c, + 0x27, 0x87, 0x27, 0xa5, 0x27, 0xc5, 0x27, 0xe7, 0x28, 0x0c, 0x28, 0x34, + 0x28, 0x5d, 0x28, 0x8a, 0x28, 0xb9, 0x28, 0xeb, 0x29, 0x20, 0x29, 0x57, + 0x29, 0x91, 0x29, 0xce, 0x2a, 0x0e, 0x2a, 0x51, 0x2a, 0x97, 0x2a, 0xe0, + 0x2b, 0x2c, 0x2b, 0x7b, 0x2b, 0xcd, 0x2c, 0x22, 0x2c, 0x7a, 0x2c, 0xd6, + 0x2d, 0x35, 0x2d, 0x97, 0x2d, 0xfc, 0x2e, 0x65, 0x2e, 0xd1, 0x2f, 0x41, + 0x2f, 0xb4, 0x30, 0x2a, 0x30, 0xa4, 0x31, 0x21, 0x31, 0xa2, 0x32, 0x27, + 0x32, 0xaf, 0x33, 0x3b, 0x33, 0xca, 0x34, 0x5d, 0x34, 0xf4, 0x35, 0x8f, + 0x36, 0x2d, 0x36, 0xcf, 0x37, 0x75, 0x38, 0x1f, 0x38, 0xcc, 0x39, 0x7e, + 0x3a, 0x33, 0x3a, 0xed, 0x3b, 0xaa, 0x3c, 0x6b, 0x3d, 0x31, 0x3d, 0xfa, + 0x3e, 0xc7, 0x3f, 0x99, 0x40, 0x6e, 0x41, 0x48, 0x42, 0x26, 0x43, 0x08, + 0x43, 0xee, 0x44, 0xd8, 0x45, 0xc7, 0x46, 0xba, 0x47, 0xb1, 0x48, 0xac, + 0x49, 0xac, 0x4a, 0xb0, 0x4b, 0xb9, 0x4c, 0xc6, 0x4d, 0xd7, 0x4e, 0xec, + 0x50, 0x06, 0x51, 0x25, 0x52, 0x48, 0x53, 0x70, 0x54, 0x9c, 0x55, 0xcc, + 0x57, 0x01, 0x58, 0x3b, 0x59, 0x79, 0x5a, 0xbc, 0x5c, 0x04, 0x5d, 0x50, + 0x5e, 0xa1, 0x5f, 0xf7, 0x61, 0x51, 0x62, 0xb0, 0x64, 0x14, 0x65, 0x7c, + 0x66, 0xea, 0x68, 0x5c, 0x69, 0xd3, 0x6b, 0x4f, 0x6c, 0xcf, 0x6e, 0x55, + 0x6f, 0xdf, 0x71, 0x6f, 0x73, 0x03, 0x74, 0x9c, 0x76, 0x3a, 0x77, 0xdd, + 0x79, 0x85, 0x7b, 0x32, 0x7c, 0xe5, 0x7e, 0x9c, 0x80, 0x58, 0x82, 0x19, + 0x83, 0xe0, 0x85, 0xab, 0x87, 0x7c, 0x89, 0x52, 0x8b, 0x2d, 0x8d, 0x0d, + 0x8e, 0xf2, 0x90, 0xdc, 0x92, 0xcc, 0x94, 0xc1, 0x96, 0xbb, 0x98, 0xbb, + 0x9a, 0xc0, 0x9c, 0xca, 0x9e, 0xd9, 0xa0, 0xee, 0xa3, 0x08, 0xa5, 0x27, + 0xa7, 0x4c, 0xa9, 0x76, 0xab, 0xa6, 0xad, 0xdb, 0xb0, 0x15, 0xb2, 0x55, + 0xb4, 0x9a, 0xb6, 0xe5, 0xb9, 0x36, 0xbb, 0x8b, 0xbd, 0xe7, 0xc0, 0x48, + 0xc2, 0xae, 0xc5, 0x1a, 0xc7, 0x8c, 0xca, 0x03, 0xcc, 0x80, 0xcf, 0x02, + 0xd1, 0x8a, 0xd4, 0x18, 0xd6, 0xab, 0xd9, 0x44, 0xdb, 0xe3, 0xde, 0x87, + 0xe1, 0x32, 0xe3, 0xe2, 0xe6, 0x97, 0xe9, 0x53, 0xec, 0x14, 0xee, 0xdb, + 0xf1, 0xa8, 0xf4, 0x7a, 0xf7, 0x53, 0xfa, 0x31, 0xfd, 0x15, 0xff, 0xff, + 0x63, 0x75, 0x72, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x01, 0x10, 0x02, 0x1b, 0x03, 0x22, 0x04, 0x24, 0x05, 0x23, + 0x06, 0x1d, 0x07, 0x12, 0x08, 0x04, 0x08, 0xf1, 0x09, 0xda, 0x0a, 0xbe, + 0x0b, 0x9f, 0x0c, 0x7b, 0x0d, 0x53, 0x0e, 0x28, 0x0e, 0xf8, 0x0f, 0xc3, + 0x10, 0x8b, 0x11, 0x4f, 0x12, 0x0f, 0x12, 0xcb, 0x13, 0x83, 0x14, 0x37, + 0x14, 0xe7, 0x15, 0x93, 0x16, 0x3c, 0x16, 0xe0, 0x17, 0x81, 0x18, 0x1e, + 0x18, 0xb7, 0x19, 0x4d, 0x19, 0xdf, 0x1a, 0x6d, 0x1a, 0xf7, 0x1b, 0x7e, + 0x1c, 0x01, 0x1c, 0x81, 0x1c, 0xfd, 0x1d, 0x76, 0x1d, 0xeb, 0x1e, 0x5d, + 0x1e, 0xcb, 0x1f, 0x36, 0x1f, 0x9e, 0x20, 0x02, 0x20, 0x63, 0x20, 0xc1, + 0x21, 0x1b, 0x21, 0x73, 0x21, 0xc7, 0x22, 0x18, 0x22, 0x66, 0x22, 0xb0, + 0x22, 0xf8, 0x23, 0x3d, 0x23, 0x7f, 0x23, 0xbe, 0x23, 0xfa, 0x24, 0x33, + 0x24, 0x69, 0x24, 0x9d, 0x24, 0xce, 0x24, 0xfc, 0x25, 0x28, 0x25, 0x51, + 0x25, 0x77, 0x25, 0x9b, 0x25, 0xbd, 0x25, 0xdc, 0x25, 0xf9, 0x26, 0x13, + 0x26, 0x2b, 0x26, 0x41, 0x26, 0x55, 0x26, 0x67, 0x26, 0x77, 0x26, 0x85, + 0x26, 0x91, 0x26, 0x9c, 0x26, 0xa7, 0x26, 0xb2, 0x26, 0xbd, 0x26, 0xc8, + 0x26, 0xd3, 0x26, 0xde, 0x26, 0xe9, 0x26, 0xf6, 0x27, 0x04, 0x27, 0x15, + 0x27, 0x27, 0x27, 0x3c, 0x27, 0x53, 0x27, 0x6c, 0x27, 0x87, 0x27, 0xa5, + 0x27, 0xc5, 0x27, 0xe7, 0x28, 0x0c, 0x28, 0x34, 0x28, 0x5d, 0x28, 0x8a, + 0x28, 0xb9, 0x28, 0xeb, 0x29, 0x20, 0x29, 0x57, 0x29, 0x91, 0x29, 0xce, + 0x2a, 0x0e, 0x2a, 0x51, 0x2a, 0x97, 0x2a, 0xe0, 0x2b, 0x2c, 0x2b, 0x7b, + 0x2b, 0xcd, 0x2c, 0x22, 0x2c, 0x7a, 0x2c, 0xd6, 0x2d, 0x35, 0x2d, 0x97, + 0x2d, 0xfc, 0x2e, 0x65, 0x2e, 0xd1, 0x2f, 0x41, 0x2f, 0xb4, 0x30, 0x2a, + 0x30, 0xa4, 0x31, 0x21, 0x31, 0xa2, 0x32, 0x27, 0x32, 0xaf, 0x33, 0x3b, + 0x33, 0xca, 0x34, 0x5d, 0x34, 0xf4, 0x35, 0x8f, 0x36, 0x2d, 0x36, 0xcf, + 0x37, 0x75, 0x38, 0x1f, 0x38, 0xcc, 0x39, 0x7e, 0x3a, 0x33, 0x3a, 0xed, + 0x3b, 0xaa, 0x3c, 0x6b, 0x3d, 0x31, 0x3d, 0xfa, 0x3e, 0xc7, 0x3f, 0x99, + 0x40, 0x6e, 0x41, 0x48, 0x42, 0x26, 0x43, 0x08, 0x43, 0xee, 0x44, 0xd8, + 0x45, 0xc7, 0x46, 0xba, 0x47, 0xb1, 0x48, 0xac, 0x49, 0xac, 0x4a, 0xb0, + 0x4b, 0xb9, 0x4c, 0xc6, 0x4d, 0xd7, 0x4e, 0xec, 0x50, 0x06, 0x51, 0x25, + 0x52, 0x48, 0x53, 0x70, 0x54, 0x9c, 0x55, 0xcc, 0x57, 0x01, 0x58, 0x3b, + 0x59, 0x79, 0x5a, 0xbc, 0x5c, 0x04, 0x5d, 0x50, 0x5e, 0xa1, 0x5f, 0xf7, + 0x61, 0x51, 0x62, 0xb0, 0x64, 0x14, 0x65, 0x7c, 0x66, 0xea, 0x68, 0x5c, + 0x69, 0xd3, 0x6b, 0x4f, 0x6c, 0xcf, 0x6e, 0x55, 0x6f, 0xdf, 0x71, 0x6f, + 0x73, 0x03, 0x74, 0x9c, 0x76, 0x3a, 0x77, 0xdd, 0x79, 0x85, 0x7b, 0x32, + 0x7c, 0xe5, 0x7e, 0x9c, 0x80, 0x58, 0x82, 0x19, 0x83, 0xe0, 0x85, 0xab, + 0x87, 0x7c, 0x89, 0x52, 0x8b, 0x2d, 0x8d, 0x0d, 0x8e, 0xf2, 0x90, 0xdc, + 0x92, 0xcc, 0x94, 0xc1, 0x96, 0xbb, 0x98, 0xbb, 0x9a, 0xc0, 0x9c, 0xca, + 0x9e, 0xd9, 0xa0, 0xee, 0xa3, 0x08, 0xa5, 0x27, 0xa7, 0x4c, 0xa9, 0x76, + 0xab, 0xa6, 0xad, 0xdb, 0xb0, 0x15, 0xb2, 0x55, 0xb4, 0x9a, 0xb6, 0xe5, + 0xb9, 0x36, 0xbb, 0x8b, 0xbd, 0xe7, 0xc0, 0x48, 0xc2, 0xae, 0xc5, 0x1a, + 0xc7, 0x8c, 0xca, 0x03, 0xcc, 0x80, 0xcf, 0x02, 0xd1, 0x8a, 0xd4, 0x18, + 0xd6, 0xab, 0xd9, 0x44, 0xdb, 0xe3, 0xde, 0x87, 0xe1, 0x32, 0xe3, 0xe2, + 0xe6, 0x97, 0xe9, 0x53, 0xec, 0x14, 0xee, 0xdb, 0xf1, 0xa8, 0xf4, 0x7a, + 0xf7, 0x53, 0xfa, 0x31, 0xfd, 0x15, 0xff, 0xff, 0x63, 0x75, 0x72, 0x76, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x10, + 0x02, 0x1b, 0x03, 0x22, 0x04, 0x24, 0x05, 0x23, 0x06, 0x1d, 0x07, 0x12, + 0x08, 0x04, 0x08, 0xf1, 0x09, 0xda, 0x0a, 0xbe, 0x0b, 0x9f, 0x0c, 0x7b, + 0x0d, 0x53, 0x0e, 0x28, 0x0e, 0xf8, 0x0f, 0xc3, 0x10, 0x8b, 0x11, 0x4f, + 0x12, 0x0f, 0x12, 0xcb, 0x13, 0x83, 0x14, 0x37, 0x14, 0xe7, 0x15, 0x93, + 0x16, 0x3c, 0x16, 0xe0, 0x17, 0x81, 0x18, 0x1e, 0x18, 0xb7, 0x19, 0x4d, + 0x19, 0xdf, 0x1a, 0x6d, 0x1a, 0xf7, 0x1b, 0x7e, 0x1c, 0x01, 0x1c, 0x81, + 0x1c, 0xfd, 0x1d, 0x76, 0x1d, 0xeb, 0x1e, 0x5d, 0x1e, 0xcb, 0x1f, 0x36, + 0x1f, 0x9e, 0x20, 0x02, 0x20, 0x63, 0x20, 0xc1, 0x21, 0x1b, 0x21, 0x73, + 0x21, 0xc7, 0x22, 0x18, 0x22, 0x66, 0x22, 0xb0, 0x22, 0xf8, 0x23, 0x3d, + 0x23, 0x7f, 0x23, 0xbe, 0x23, 0xfa, 0x24, 0x33, 0x24, 0x69, 0x24, 0x9d, + 0x24, 0xce, 0x24, 0xfc, 0x25, 0x28, 0x25, 0x51, 0x25, 0x77, 0x25, 0x9b, + 0x25, 0xbd, 0x25, 0xdc, 0x25, 0xf9, 0x26, 0x13, 0x26, 0x2b, 0x26, 0x41, + 0x26, 0x55, 0x26, 0x67, 0x26, 0x77, 0x26, 0x85, 0x26, 0x91, 0x26, 0x9c, + 0x26, 0xa7, 0x26, 0xb2, 0x26, 0xbd, 0x26, 0xc8, 0x26, 0xd3, 0x26, 0xde, + 0x26, 0xe9, 0x26, 0xf6, 0x27, 0x04, 0x27, 0x15, 0x27, 0x27, 0x27, 0x3c, + 0x27, 0x53, 0x27, 0x6c, 0x27, 0x87, 0x27, 0xa5, 0x27, 0xc5, 0x27, 0xe7, + 0x28, 0x0c, 0x28, 0x34, 0x28, 0x5d, 0x28, 0x8a, 0x28, 0xb9, 0x28, 0xeb, + 0x29, 0x20, 0x29, 0x57, 0x29, 0x91, 0x29, 0xce, 0x2a, 0x0e, 0x2a, 0x51, + 0x2a, 0x97, 0x2a, 0xe0, 0x2b, 0x2c, 0x2b, 0x7b, 0x2b, 0xcd, 0x2c, 0x22, + 0x2c, 0x7a, 0x2c, 0xd6, 0x2d, 0x35, 0x2d, 0x97, 0x2d, 0xfc, 0x2e, 0x65, + 0x2e, 0xd1, 0x2f, 0x41, 0x2f, 0xb4, 0x30, 0x2a, 0x30, 0xa4, 0x31, 0x21, + 0x31, 0xa2, 0x32, 0x27, 0x32, 0xaf, 0x33, 0x3b, 0x33, 0xca, 0x34, 0x5d, + 0x34, 0xf4, 0x35, 0x8f, 0x36, 0x2d, 0x36, 0xcf, 0x37, 0x75, 0x38, 0x1f, + 0x38, 0xcc, 0x39, 0x7e, 0x3a, 0x33, 0x3a, 0xed, 0x3b, 0xaa, 0x3c, 0x6b, + 0x3d, 0x31, 0x3d, 0xfa, 0x3e, 0xc7, 0x3f, 0x99, 0x40, 0x6e, 0x41, 0x48, + 0x42, 0x26, 0x43, 0x08, 0x43, 0xee, 0x44, 0xd8, 0x45, 0xc7, 0x46, 0xba, + 0x47, 0xb1, 0x48, 0xac, 0x49, 0xac, 0x4a, 0xb0, 0x4b, 0xb9, 0x4c, 0xc6, + 0x4d, 0xd7, 0x4e, 0xec, 0x50, 0x06, 0x51, 0x25, 0x52, 0x48, 0x53, 0x70, + 0x54, 0x9c, 0x55, 0xcc, 0x57, 0x01, 0x58, 0x3b, 0x59, 0x79, 0x5a, 0xbc, + 0x5c, 0x04, 0x5d, 0x50, 0x5e, 0xa1, 0x5f, 0xf7, 0x61, 0x51, 0x62, 0xb0, + 0x64, 0x14, 0x65, 0x7c, 0x66, 0xea, 0x68, 0x5c, 0x69, 0xd3, 0x6b, 0x4f, + 0x6c, 0xcf, 0x6e, 0x55, 0x6f, 0xdf, 0x71, 0x6f, 0x73, 0x03, 0x74, 0x9c, + 0x76, 0x3a, 0x77, 0xdd, 0x79, 0x85, 0x7b, 0x32, 0x7c, 0xe5, 0x7e, 0x9c, + 0x80, 0x58, 0x82, 0x19, 0x83, 0xe0, 0x85, 0xab, 0x87, 0x7c, 0x89, 0x52, + 0x8b, 0x2d, 0x8d, 0x0d, 0x8e, 0xf2, 0x90, 0xdc, 0x92, 0xcc, 0x94, 0xc1, + 0x96, 0xbb, 0x98, 0xbb, 0x9a, 0xc0, 0x9c, 0xca, 0x9e, 0xd9, 0xa0, 0xee, + 0xa3, 0x08, 0xa5, 0x27, 0xa7, 0x4c, 0xa9, 0x76, 0xab, 0xa6, 0xad, 0xdb, + 0xb0, 0x15, 0xb2, 0x55, 0xb4, 0x9a, 0xb6, 0xe5, 0xb9, 0x36, 0xbb, 0x8b, + 0xbd, 0xe7, 0xc0, 0x48, 0xc2, 0xae, 0xc5, 0x1a, 0xc7, 0x8c, 0xca, 0x03, + 0xcc, 0x80, 0xcf, 0x02, 0xd1, 0x8a, 0xd4, 0x18, 0xd6, 0xab, 0xd9, 0x44, + 0xdb, 0xe3, 0xde, 0x87, 0xe1, 0x32, 0xe3, 0xe2, 0xe6, 0x97, 0xe9, 0x53, + 0xec, 0x14, 0xee, 0xdb, 0xf1, 0xa8, 0xf4, 0x7a, 0xf7, 0x53, 0xfa, 0x31, + 0xfd, 0x15, 0xff, 0xff, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x11, 0x27, 0x83, 0x33, 0x00, 0x00, 0x92, 0xa1, 0x41, 0x40, 0x00, 0x00, + 0x11, 0x27, 0x63, 0x6c, 0xa3, 0xa5, 0x92, 0xa1, 0x21, 0x79, 0xa3, 0xa5, + 0x6d, 0x81, 0xdf, 0x8c, 0x5c, 0x5a, 0xee, 0xfa, 0x9d, 0x9a, 0x5c, 0x5a, + 0x6d, 0x81, 0xbf, 0xc5, 0xff, 0xff, 0xee, 0xfa, 0x7d, 0xd3, 0xff, 0xff, + 0x63, 0x75, 0x72, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x63, 0x75, 0x72, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x63, 0x75, 0x72, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; + ICCProfile ICCProfileForTestingAdobeRGB() { return ICCProfile::FromDataWithId( reinterpret_cast<const char*>(adobe_rgb_profile_data), @@ -735,4 +1075,10 @@ ICCProfile::test_id_no_analytic_tr_fn_); } +ICCProfile ICCProfileForTestingA2BOnly() { + return ICCProfile::FromDataWithId( + reinterpret_cast<const char*>(a2b_only_profile_data), + arraysize(a2b_only_profile_data), ICCProfile::test_id_a2b_only_); +} + } // namespace gfx
diff --git a/ui/gfx/test/icc_profiles.h b/ui/gfx/test/icc_profiles.h index 464f107..28cb3df 100644 --- a/ui/gfx/test/icc_profiles.h +++ b/ui/gfx/test/icc_profiles.h
@@ -14,4 +14,7 @@ // A profile that does not have an analytic transfer function. ICCProfile ICCProfileForTestingNoAnalyticTrFn(); +// A profile that is A2B only. +ICCProfile ICCProfileForTestingA2BOnly(); + } // namespace gfx
diff --git a/ui/gl/BUILD.gn b/ui/gl/BUILD.gn index 37596e8..238c677 100644 --- a/ui/gl/BUILD.gn +++ b/ui/gl/BUILD.gn
@@ -10,7 +10,7 @@ import("//testing/test.gni") declare_args() { - enable_swiftshader = is_chrome_branded && is_win + enable_swiftshader = is_win } use_egl = is_win || is_android || is_linux
diff --git a/ui/gl/gl_switches.cc b/ui/gl/gl_switches.cc index 2eccfc3..ce3c71a 100644 --- a/ui/gl/gl_switches.cc +++ b/ui/gl/gl_switches.cc
@@ -71,8 +71,6 @@ // swiftshader: The SwiftShader software renderer. const char kUseGL[] = "use-gl"; -const char kSwiftShaderPath[] = "swiftshader-path"; - // Inform Chrome that a GPU context will not be lost in power saving mode, // screen saving mode, etc. Note that this flag does not ensure that a GPU // context will never be lost in any situations, say, a GPU reset.
diff --git a/ui/gl/gl_switches.h b/ui/gl/gl_switches.h index 945783b7..54b5b1d7 100644 --- a/ui/gl/gl_switches.h +++ b/ui/gl/gl_switches.h
@@ -47,7 +47,6 @@ GL_EXPORT extern const char kUseANGLE[]; GL_EXPORT extern const char kUseGL[]; -GL_EXPORT extern const char kSwiftShaderPath[]; GL_EXPORT extern const char kTestGLLib[]; GL_EXPORT extern const char kUseGpuInTests[]; GL_EXPORT extern const char kEnableES3APIs[];
diff --git a/ui/gl/gpu_timing_fake.cc b/ui/gl/gpu_timing_fake.cc index a35793e8..4a3fc2e 100644 --- a/ui/gl/gpu_timing_fake.cc +++ b/ui/gl/gpu_timing_fake.cc
@@ -80,8 +80,8 @@ void GPUTimingFake::ExpectGPUTimeStampQuery(MockGLInterface& gl, bool elapsed_query) { - EXPECT_CALL(gl, GenQueries(1, NotNull())).Times(Exactly(1)) - .WillRepeatedly(Invoke(this, &GPUTimingFake::FakeGLGenQueries)); + EXPECT_CALL(gl, GenQueries(1, NotNull())) + .WillOnce(Invoke(this, &GPUTimingFake::FakeGLGenQueries)); EXPECT_CALL(gl, GetQueryiv(GL_TIMESTAMP, GL_QUERY_COUNTER_BITS, NotNull())) .WillRepeatedly(DoAll(SetArgPointee<2>(64), Return())); @@ -113,9 +113,9 @@ .WillRepeatedly( Invoke(this, &GPUTimingFake::FakeGLGetQueryObjectui64v)); - EXPECT_CALL(gl, DeleteQueries(1, NotNull())).Times(AtLeast(1)) - .WillRepeatedly( - Invoke(this, &GPUTimingFake::FakeGLDeleteQueries)); + EXPECT_CALL(gl, DeleteQueries(1, NotNull())) + .WillOnce(Invoke(this, &GPUTimingFake::FakeGLDeleteQueries)) + .RetiresOnSaturation(); } void GPUTimingFake::ExpectGPUTimerQuery(
diff --git a/ui/gl/init/BUILD.gn b/ui/gl/init/BUILD.gn index 074e7b1d..f97b44f 100644 --- a/ui/gl/init/BUILD.gn +++ b/ui/gl/init/BUILD.gn
@@ -54,7 +54,10 @@ "gl_initializer_x11.cc", ] - deps += [ "//ui/gfx/x" ] + deps += [ + "//ui/gfx/x", + "//ui/gl:gl_features", + ] } else if (use_ozone) { sources += [ "gl_factory_ozone.cc",
diff --git a/ui/gl/init/gl_initializer_win.cc b/ui/gl/init/gl_initializer_win.cc index c8648a761..e3b67c5 100644 --- a/ui/gl/init/gl_initializer_win.cc +++ b/ui/gl/init/gl_initializer_win.cc
@@ -104,11 +104,13 @@ (use_gl == kGLImplementationSwiftShaderName) || (use_gl == kGLImplementationSwiftShaderForWebGLName); if (using_swift_shader) { - if (!command_line->HasSwitch(switches::kSwiftShaderPath)) - return false; - gles_path = command_line->GetSwitchValuePath(switches::kSwiftShaderPath); +#if BUILDFLAG(ENABLE_SWIFTSHADER) + gles_path = module_path.Append(L"swiftshader/"); // Preload library LoadLibrary(L"ddraw.dll"); +#else + return false; +#endif } else { gles_path = module_path; } @@ -133,18 +135,6 @@ return false; } -#if BUILDFLAG(ENABLE_SWIFTSHADER) - if (using_swift_shader) { - // Register key so that SwiftShader doesn't display watermark logo. - typedef void (__stdcall *RegisterFunc)(const char* key); - RegisterFunc reg = reinterpret_cast<RegisterFunc>( - base::GetFunctionPointerFromNativeLibrary(gles_library, "Register")); - if (reg) { - reg("SS3GCKK6B448CF63"); - } - } -#endif - GLGetProcAddressProc get_proc_address = reinterpret_cast<GLGetProcAddressProc>( base::GetFunctionPointerFromNativeLibrary(egl_library,
diff --git a/ui/gl/init/gl_initializer_x11.cc b/ui/gl/init/gl_initializer_x11.cc index 2d88875..a8e3d42 100644 --- a/ui/gl/init/gl_initializer_x11.cc +++ b/ui/gl/init/gl_initializer_x11.cc
@@ -13,6 +13,7 @@ #include "ui/gfx/x/x11_types.h" #include "ui/gl/gl_bindings.h" #include "ui/gl/gl_egl_api_implementation.h" +#include "ui/gl/gl_features.h" #include "ui/gl/gl_gl_api_implementation.h" #include "ui/gl/gl_glx_api_implementation.h" #include "ui/gl/gl_implementation_osmesa.h" @@ -39,8 +40,10 @@ const char kGLESv2ANGLELibraryName[] = "libGLESv2.so"; const char kEGLANGLELibraryName[] = "libEGL.so"; +#if BUILDFLAG(ENABLE_SWIFTSHADER) const char kGLESv2SwiftShaderLibraryName[] = "libGLESv2.so"; const char kEGLSwiftShaderLibraryName[] = "libEGL.so"; +#endif bool InitializeStaticGLXInternal() { base::NativeLibrary library = NULL; @@ -84,23 +87,28 @@ const base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); - if (command_line->GetSwitchValueASCII(switches::kUseGL) == - kGLImplementationANGLEName) { + const std::string use_gl = + command_line->GetSwitchValueASCII(switches::kUseGL); + if (use_gl == kGLImplementationANGLEName) { base::FilePath module_path; if (!PathService::Get(base::DIR_MODULE, &module_path)) return false; glesv2_path = module_path.Append(kGLESv2ANGLELibraryName); egl_path = module_path.Append(kEGLANGLELibraryName); - } else if (command_line->GetSwitchValueASCII(switches::kUseGL) == - kGLImplementationSwiftShaderName) { + } else if ((use_gl == kGLImplementationSwiftShaderName) || + (use_gl == kGLImplementationSwiftShaderForWebGLName)) { +#if BUILDFLAG(ENABLE_SWIFTSHADER) base::FilePath module_path; - if (!command_line->HasSwitch(switches::kSwiftShaderPath)) + if (!PathService::Get(base::DIR_MODULE, &module_path)) return false; - module_path = command_line->GetSwitchValuePath(switches::kSwiftShaderPath); + module_path = module_path.Append("swiftshader/"); glesv2_path = module_path.Append(kGLESv2SwiftShaderLibraryName); egl_path = module_path.Append(kEGLSwiftShaderLibraryName); +#else + return false; +#endif } base::NativeLibrary gles_library = LoadLibraryAndPrintError(glesv2_path);
diff --git a/ui/views/focus/focus_manager.cc b/ui/views/focus/focus_manager.cc index b482dbe..740a4c7 100644 --- a/ui/views/focus/focus_manager.cc +++ b/ui/views/focus/focus_manager.cc
@@ -5,9 +5,13 @@ #include "ui/views/focus/focus_manager.h" #include <algorithm> +#include <cstring> #include <vector> #include "base/auto_reset.h" +#include "base/debug/alias.h" +#include "base/debug/dump_without_crashing.h" +#include "base/debug/stack_trace.h" #include "base/logging.h" #include "ui/base/accelerators/accelerator.h" #include "ui/base/ime/input_method.h" @@ -24,6 +28,16 @@ #include "ui/views/widget/widget_delegate.h" namespace views { +namespace { + +#if defined(OS_CHROMEOS) +// Crash appears to be specific to chromeos, so only log there. +bool should_log_focused_view = true; +#else +bool should_log_focused_view = false; +#endif + +} // namespace bool FocusManager::arrow_key_traversal_enabled_ = false; @@ -37,6 +51,8 @@ } FocusManager::~FocusManager() { + if (focused_view_) + focused_view_->RemoveObserver(this); } bool FocusManager::OnKeyEvent(const ui::KeyEvent& event) { @@ -328,14 +344,24 @@ View* old_focused_view = focused_view_; focused_view_ = view; - if (old_focused_view) + if (old_focused_view) { + old_focused_view->RemoveObserver(this); old_focused_view->Blur(); + } // Also make |focused_view_| the stored focus view. This way the stored focus // view is remembered if focus changes are requested prior to a show or while // hidden. SetStoredFocusView(focused_view_); - if (focused_view_) + if (focused_view_) { + focused_view_->AddObserver(this); focused_view_->Focus(); + if (should_log_focused_view) { + stack_when_focused_view_set_ = + base::MakeUnique<base::debug::StackTrace>(); + } + } else { + stack_when_focused_view_set_.reset(); + } for (FocusChangeListener& observer : focus_change_listeners_) observer.OnDidChangeFocus(old_focused_view, focused_view_); @@ -565,4 +591,37 @@ #endif } +void FocusManager::OnViewIsDeleting(View* view) { + CHECK_EQ(view, focused_view_); + + // Widget forwards the appropriate calls such that we should never end up + // here. None-the-less crashes indicate we are. This logs the stack once when + // this happens. + // TODO(sky): remove when cause of 687232 is found. + if (stack_when_focused_view_set_ && should_log_focused_view) { + should_log_focused_view = false; + size_t stack_size = 0u; + const void* const* instruction_pointers = + stack_when_focused_view_set_->Addresses(&stack_size); + static constexpr size_t kMaxStackSize = 100; + const void* instruction_pointers_copy[kMaxStackSize]; + // Insert markers bracketing the crash to make it easier to locate. + memset(&instruction_pointers_copy[0], 0xAB, + sizeof(instruction_pointers_copy[0])); + const size_t last_marker_index = + std::min(kMaxStackSize - 1, stack_size + 1); + memset(&instruction_pointers_copy[last_marker_index], 0xAB, + sizeof(instruction_pointers_copy[last_marker_index])); + std::memcpy(&instruction_pointers_copy[1], instruction_pointers, + std::min(kMaxStackSize - 2, stack_size) * sizeof(const void*)); + base::debug::Alias(&stack_size); + base::debug::Alias(&instruction_pointers_copy); + base::debug::DumpWithoutCrashing(); + stack_when_focused_view_set_.reset(); + } + + focused_view_->RemoveObserver(this); + focused_view_ = nullptr; +} + } // namespace views
diff --git a/ui/views/focus/focus_manager.h b/ui/views/focus/focus_manager.h index 02fe0ab..5f91273 100644 --- a/ui/views/focus/focus_manager.h +++ b/ui/views/focus/focus_manager.h
@@ -10,6 +10,7 @@ #include "base/macros.h" #include "base/observer_list.h" #include "ui/base/accelerators/accelerator_manager.h" +#include "ui/views/view_observer.h" #include "ui/views/views_export.h" // FocusManager handles focus traversal, stores and restores focused views, and @@ -70,6 +71,12 @@ // Note that FocusTraversable views do not have to be RootViews: // AccessibleToolbarView is FocusTraversable. +namespace base { +namespace debug { +class StackTrace; +} +} + namespace ui { class Accelerator; class AcceleratorTarget; @@ -118,7 +125,8 @@ virtual ~FocusChangeListener() {} }; -class VIEWS_EXPORT FocusManager { +// FocusManager adds itself as a ViewObserver to the currently focused view. +class VIEWS_EXPORT FocusManager : public ViewObserver { public: // The reason why the focus changed. enum FocusChangeReason { @@ -146,7 +154,7 @@ }; FocusManager(Widget* widget, std::unique_ptr<FocusManagerDelegate> delegate); - virtual ~FocusManager(); + ~FocusManager() override; // Processes the passed key event for accelerators and keyboard traversal. // Returns false if the event has been consumed and should not be processed @@ -331,6 +339,9 @@ // of |keyboard_accesible_|. bool IsFocusable(View* view) const; + // ViewObserver: + void OnViewIsDeleting(View* view) override; + // Whether arrow key traversal is enabled. static bool arrow_key_traversal_enabled_; @@ -344,6 +355,9 @@ // The view that currently is focused. View* focused_view_ = nullptr; + // TODO(sky): remove, used for debugging 687232. + std::unique_ptr<base::debug::StackTrace> stack_when_focused_view_set_; + // The AcceleratorManager this FocusManager is associated with. ui::AcceleratorManager accelerator_manager_;
diff --git a/ui/views/mus/mus_client.cc b/ui/views/mus/mus_client.cc index d03fe330..da055be 100644 --- a/ui/views/mus/mus_client.cc +++ b/ui/views/mus/mus_client.cc
@@ -113,6 +113,8 @@ ViewsDelegate::GetInstance()->set_native_widget_factory( base::Bind(&MusClient::CreateNativeWidget, base::Unretained(this))); + ViewsDelegate::GetInstance()->set_desktop_window_tree_host_factory(base::Bind( + &MusClient::CreateDesktopWindowTreeHost, base::Unretained(this))); } MusClient::~MusClient() { @@ -125,6 +127,8 @@ if (ViewsDelegate::GetInstance()) { ViewsDelegate::GetInstance()->set_native_widget_factory( ViewsDelegate::NativeWidgetFactory()); + ViewsDelegate::GetInstance()->set_desktop_window_tree_host_factory( + ViewsDelegate::DesktopWindowTreeHostFactory()); } base::DiscardableMemoryAllocator::SetInstance(nullptr); @@ -218,11 +222,8 @@ native_widget->SetDesktopWindowTreeHost( base::WrapUnique(init_params.desktop_window_tree_host)); } else { - std::map<std::string, std::vector<uint8_t>> mus_properties = - ConfigurePropertiesFromParams(init_params); native_widget->SetDesktopWindowTreeHost( - base::MakeUnique<DesktopWindowTreeHostMus>(delegate, native_widget, - &mus_properties)); + CreateDesktopWindowTreeHost(init_params, delegate, native_widget)); } return native_widget; } @@ -253,6 +254,16 @@ mus_property_mirror_ = std::move(mirror); } +std::unique_ptr<DesktopWindowTreeHost> MusClient::CreateDesktopWindowTreeHost( + const Widget::InitParams& init_params, + internal::NativeWidgetDelegate* delegate, + DesktopNativeWidgetAura* desktop_native_widget_aura) { + std::map<std::string, std::vector<uint8_t>> mus_properties = + ConfigurePropertiesFromParams(init_params); + return base::MakeUnique<DesktopWindowTreeHostMus>( + delegate, desktop_native_widget_aura, &mus_properties); +} + void MusClient::OnEmbed( std::unique_ptr<aura::WindowTreeHostMus> window_tree_host) { NOTREACHED();
diff --git a/ui/views/mus/mus_client.h b/ui/views/mus/mus_client.h index 829a049..781edb57 100644 --- a/ui/views/mus/mus_client.h +++ b/ui/views/mus/mus_client.h
@@ -44,6 +44,7 @@ namespace views { +class DesktopNativeWidgetAura; class MusClientObserver; class MusPropertyMirror; class PointerWatcherEventRouter; @@ -98,7 +99,6 @@ // NativeWidget has not been explicitly set. NativeWidget* CreateNativeWidget(const Widget::InitParams& init_params, internal::NativeWidgetDelegate* delegate); - // Called when the capture client has been set for a window to notify // PointerWatcherEventRouter and CaptureSynchronizer. void OnCaptureClientSet(aura::client::CaptureClient* capture_client); @@ -119,6 +119,14 @@ friend class AuraInit; friend class test::MusClientTestApi; + // Creates a DesktopWindowTreeHostMus. This is set as the factory function + // ViewsDelegate such that if DesktopNativeWidgetAura is created without a + // DesktopWindowTreeHost this is created. + std::unique_ptr<DesktopWindowTreeHost> CreateDesktopWindowTreeHost( + const Widget::InitParams& init_params, + internal::NativeWidgetDelegate* delegate, + DesktopNativeWidgetAura* desktop_native_widget_aura); + // aura::WindowTreeClientDelegate: void OnEmbed( std::unique_ptr<aura::WindowTreeHostMus> window_tree_host) override;
diff --git a/ui/views/view.cc b/ui/views/view.cc index 359ef56..86624f8 100644 --- a/ui/views/view.cc +++ b/ui/views/view.cc
@@ -163,6 +163,9 @@ delete child; } } + + for (ViewObserver& observer : observers_) + observer.OnViewIsDeleting(this); } // Tree operations -------------------------------------------------------------
diff --git a/ui/views/view_observer.h b/ui/views/view_observer.h index c1d69f9..5876588d 100644 --- a/ui/views/view_observer.h +++ b/ui/views/view_observer.h
@@ -33,6 +33,9 @@ // parent view. |view| is the child view being moved. virtual void OnChildViewReordered(View* view) {} + // Called from ~View. + virtual void OnViewIsDeleting(View* observed_view) {} + protected: virtual ~ViewObserver() {} };
diff --git a/ui/views/views_delegate.h b/ui/views/views_delegate.h index 6a784af5..04324b50 100644 --- a/ui/views/views_delegate.h +++ b/ui/views/views_delegate.h
@@ -5,6 +5,7 @@ #ifndef UI_VIEWS_VIEWS_DELEGATE_H_ #define UI_VIEWS_VIEWS_DELEGATE_H_ +#include <memory> #include <string> #if defined(OS_WIN) @@ -51,6 +52,8 @@ class Widget; #if defined(USE_AURA) +class DesktopNativeWidgetAura; +class DesktopWindowTreeHost; class TouchSelectionMenuRunnerViews; #endif @@ -98,6 +101,14 @@ using NativeWidgetFactory = base::Callback<NativeWidget*(const Widget::InitParams&, internal::NativeWidgetDelegate*)>; +#if defined(USE_AURA) + using DesktopWindowTreeHostFactory = + base::Callback<std::unique_ptr<DesktopWindowTreeHost>( + const Widget::InitParams&, + internal::NativeWidgetDelegate*, + DesktopNativeWidgetAura*)>; +#endif + #if defined(OS_WIN) enum AppbarAutohideEdge { EDGE_TOP = 1 << 0, @@ -124,13 +135,22 @@ // Call this method to set a factory callback that will be used to construct // NativeWidget implementations overriding the platform defaults. - void set_native_widget_factory(NativeWidgetFactory factory) { + void set_native_widget_factory(const NativeWidgetFactory& factory) { native_widget_factory_ = factory; } - const NativeWidgetFactory& native_widget_factory() { + const NativeWidgetFactory& native_widget_factory() const { return native_widget_factory_; } +#if defined(USE_AURA) + void set_desktop_window_tree_host_factory( + const DesktopWindowTreeHostFactory& factory) { + desktop_window_tree_host_factory_ = factory; + } + const DesktopWindowTreeHostFactory& desktop_window_tree_host_factory() const { + return desktop_window_tree_host_factory_; + } +#endif // Saves the position, size and "show" state for the window with the // specified name. virtual void SaveWindowPlacement(const Widget* widget, @@ -240,6 +260,8 @@ #if defined(USE_AURA) std::unique_ptr<TouchSelectionMenuRunnerViews> touch_selection_menu_runner_; + + DesktopWindowTreeHostFactory desktop_window_tree_host_factory_; #endif NativeWidgetFactory native_widget_factory_;
diff --git a/ui/views/widget/desktop_aura/desktop_native_widget_aura.cc b/ui/views/widget/desktop_aura/desktop_native_widget_aura.cc index 2e903f9..edeae4a8 100644 --- a/ui/views/widget/desktop_aura/desktop_native_widget_aura.cc +++ b/ui/views/widget/desktop_aura/desktop_native_widget_aura.cc
@@ -31,6 +31,7 @@ #include "ui/views/corewm/tooltip_controller.h" #include "ui/views/drag_utils.h" #include "ui/views/view_constants_aura.h" +#include "ui/views/views_delegate.h" #include "ui/views/widget/desktop_aura/desktop_capture_client.h" #include "ui/views/widget/desktop_aura/desktop_event_client.h" #include "ui/views/widget/desktop_aura/desktop_focus_rules.h" @@ -415,10 +416,20 @@ wm::SetShadowElevation(content_window_, wm::ShadowElevation::NONE); if (!desktop_window_tree_host_) { - desktop_window_tree_host_ = - params.desktop_window_tree_host - ? params.desktop_window_tree_host - : DesktopWindowTreeHost::Create(native_widget_delegate_, this); + if (params.desktop_window_tree_host) { + desktop_window_tree_host_ = params.desktop_window_tree_host; + } else if (!ViewsDelegate::GetInstance() + ->desktop_window_tree_host_factory() + .is_null()) { + desktop_window_tree_host_ = + ViewsDelegate::GetInstance() + ->desktop_window_tree_host_factory() + .Run(params, native_widget_delegate_, this) + .release(); + } else { + desktop_window_tree_host_ = + DesktopWindowTreeHost::Create(native_widget_delegate_, this); + } host_.reset(desktop_window_tree_host_->AsWindowTreeHost()); } desktop_window_tree_host_->Init(content_window_, params);
diff --git a/ui/views/widget/desktop_aura/desktop_window_tree_host_chromeos.cc b/ui/views/widget/desktop_aura/desktop_window_tree_host_chromeos.cc index 41b1987..d0caf5e 100644 --- a/ui/views/widget/desktop_aura/desktop_window_tree_host_chromeos.cc +++ b/ui/views/widget/desktop_aura/desktop_window_tree_host_chromeos.cc
@@ -10,8 +10,9 @@ DesktopWindowTreeHost* DesktopWindowTreeHost::Create( internal::NativeWidgetDelegate* native_widget_delegate, DesktopNativeWidgetAura* desktop_native_widget_aura) { - // DesktopNativeWidgetAura is only used with mus, and MusClient injects the - // DesktopWindowTreeHost so that this is never called. + // DesktopNativeWidgetAura is only used with mus, and MusClient sets itself + // as the factory for both NativeWidgets and DesktopWindowTreeHosts, so this + // should never be called. NOTREACHED(); return nullptr; }
diff --git a/url/gurl.cc b/url/gurl.cc index c9dad06..09ab212c 100644 --- a/url/gurl.cc +++ b/url/gurl.cc
@@ -79,6 +79,15 @@ DCHECK(!is_valid_ || !SchemeIsFileSystem() || inner_url_); } +GURL::GURL(GURL&& other) + : spec_(std::move(other.spec_)), + is_valid_(other.is_valid_), + parsed_(other.parsed_), + inner_url_(std::move(other.inner_url_)) { + other.is_valid_ = false; + other.parsed_ = url::Parsed(); +} + GURL::GURL(base::StringPiece url_string) { InitCanonical(url_string, true); } @@ -168,8 +177,29 @@ GURL::~GURL() { } -GURL& GURL::operator=(GURL other) { - Swap(&other); +GURL& GURL::operator=(const GURL& other) { + spec_ = other.spec_; + is_valid_ = other.is_valid_; + parsed_ = other.parsed_; + + if (!other.inner_url_) + inner_url_.reset(); + else if (inner_url_) + *inner_url_ = *other.inner_url_; + else + inner_url_.reset(new GURL(*other.inner_url_)); + + return *this; +} + +GURL& GURL::operator=(GURL&& other) { + spec_ = std::move(other.spec_); + is_valid_ = other.is_valid_; + parsed_ = other.parsed_; + inner_url_ = std::move(other.inner_url_); + + other.is_valid_ = false; + other.parsed_ = url::Parsed(); return *this; }
diff --git a/url/gurl.h b/url/gurl.h index ae2c4088..4cbd8465 100644 --- a/url/gurl.h +++ b/url/gurl.h
@@ -54,6 +54,7 @@ // Copy construction is relatively inexpensive, with most of the time going // to reallocating the string. It does not re-parse. GURL(const GURL& other); + GURL(GURL&& other); // The strings to this contructor should be UTF-8 / UTF-16. explicit GURL(base::StringPiece url_string); @@ -76,7 +77,8 @@ ~GURL(); - GURL& operator=(GURL other); + GURL& operator=(const GURL& other); + GURL& operator=(GURL&& other); // Returns true when this object represents a valid parsed URL. When not // valid, other functions will still succeed, but you will not get canonical