From f904fd356ac821e4e03db548ac41ba984f51c45c Mon Sep 17 00:00:00 2001 From: reuk Date: Thu, 22 May 2025 16:30:39 +0100 Subject: [PATCH] Android: Improve screen safe-area reporting The goal of this change is to ensure that the safeAreaInsets and keyboardInsets members of Display correctly take the current system UI and screen cutouts into account. This change also enables rendering behind the status bar and navigation bar for JUCE applications. This is in line with the new defaults in Android 15, where building against the Android SDK 35 will automatically enable "edge-to-edge" drawing. Enabling this behaviour on older platforms too provides a more consistent experience. --- .../native/juce_JNIHelpers_android.h | 22 +- .../juce_Accessibility_android.cpp | 2 +- .../app/com/rmsl/juce/ComponentPeerView.java | 92 +- .../app/com/rmsl/juce/JuceActivity.java | 40 +- .../native/juce_Windowing_android.cpp | 2384 +++++++++-------- 5 files changed, 1359 insertions(+), 1181 deletions(-) diff --git a/modules/juce_core/native/juce_JNIHelpers_android.h b/modules/juce_core/native/juce_JNIHelpers_android.h index 924b27970b..c756b81802 100644 --- a/modules/juce_core/native/juce_JNIHelpers_android.h +++ b/modules/juce_core/native/juce_JNIHelpers_android.h @@ -350,7 +350,9 @@ DECLARE_JNI_CLASS (AndroidContext, "android/content/Context") METHOD (startActivityForResult, "startActivityForResult", "(Landroid/content/Intent;I)V") \ METHOD (getFragmentManager, "getFragmentManager", "()Landroid/app/FragmentManager;") \ METHOD (setContentView, "setContentView", "(Landroid/view/View;)V") \ - METHOD (getWindow, "getWindow", "()Landroid/view/Window;") + METHOD (getActionBar, "getActionBar", "()Landroid/app/ActionBar;") \ + METHOD (getWindow, "getWindow", "()Landroid/view/Window;") \ + METHOD (isInMultiWindowMode, "isInMultiWindowMode", "()Z") \ DECLARE_JNI_CLASS (AndroidActivity, "android/app/Activity") #undef JNI_CLASS_MEMBERS @@ -638,13 +640,16 @@ DECLARE_JNI_CLASS (AndroidUri, "android/net/Uri") METHOD (invalidate, "invalidate", "(IIII)V") \ METHOD (setVisibility, "setVisibility", "(I)V") \ METHOD (setLayoutParams, "setLayoutParams", "(Landroid/view/ViewGroup$LayoutParams;)V") \ + METHOD (getLayoutParams, "getLayoutParams", "()Landroid/view/ViewGroup$LayoutParams;") \ METHOD (setSystemUiVisibility, "setSystemUiVisibility", "(I)V") \ METHOD (findViewById, "findViewById", "(I)Landroid/view/View;") \ + METHOD (getWindowToken, "getWindowToken", "()Landroid/os/IBinder;") \ METHOD (getRootView, "getRootView", "()Landroid/view/View;") \ METHOD (addOnLayoutChangeListener, "addOnLayoutChangeListener", "(Landroid/view/View$OnLayoutChangeListener;)V") \ METHOD (announceForAccessibility, "announceForAccessibility", "(Ljava/lang/CharSequence;)V") \ METHOD (setOnApplyWindowInsetsListener, "setOnApplyWindowInsetsListener", "(Landroid/view/View$OnApplyWindowInsetsListener;)V") \ - METHOD (getRootWindowInsets, "getRootWindowInsets", "()Landroid/view/WindowInsets;") + METHOD (getRootWindowInsets, "getRootWindowInsets", "()Landroid/view/WindowInsets;") \ + METHOD (getWindowSystemUiVisibility, "getWindowSystemUiVisibility", "()I") \ DECLARE_JNI_CLASS (AndroidView, "android/view/View") #undef JNI_CLASS_MEMBERS @@ -658,9 +663,10 @@ DECLARE_JNI_CLASS (AndroidViewGroup, "android/view/ViewGroup") #undef JNI_CLASS_MEMBERS #define JNI_CLASS_MEMBERS(METHOD, STATICMETHOD, FIELD, STATICFIELD, CALLBACK) \ - METHOD (getDecorView, "getDecorView", "()Landroid/view/View;") \ - METHOD (setFlags, "setFlags", "(II)V") \ - METHOD (clearFlags, "clearFlags", "(I)V") + METHOD (getDecorView, "getDecorView", "()Landroid/view/View;") \ + METHOD (getAttributes, "getAttributes", "()Landroid/view/WindowManager$LayoutParams;") \ + METHOD (setFlags, "setFlags", "(II)V") \ + METHOD (clearFlags, "clearFlags", "(I)V") DECLARE_JNI_CLASS (AndroidWindow, "android/view/Window") #undef JNI_CLASS_MEMBERS @@ -671,6 +677,12 @@ DECLARE_JNI_CLASS (AndroidWindow, "android/view/Window") DECLARE_JNI_CLASS (AndroidWindowManager, "android/view/WindowManager") #undef JNI_CLASS_MEMBERS +#define JNI_CLASS_MEMBERS(METHOD, STATICMETHOD, FIELD, STATICFIELD, CALLBACK) \ + METHOD (getCurrentWindowMetrics, "getCurrentWindowMetrics", "()Landroid/view/WindowMetrics;") + +DECLARE_JNI_CLASS_WITH_MIN_SDK (AndroidWindowManager30, "android/view/WindowManager", 30) +#undef JNI_CLASS_MEMBERS + //============================================================================== #define JNI_CLASS_MEMBERS(METHOD, STATICMETHOD, FIELD, STATICFIELD, CALLBACK) \ METHOD (constructor, "", "(I)V") \ diff --git a/modules/juce_gui_basics/native/accessibility/juce_Accessibility_android.cpp b/modules/juce_gui_basics/native/accessibility/juce_Accessibility_android.cpp index e4badb82bb..ae04c50bda 100644 --- a/modules/juce_gui_basics/native/accessibility/juce_Accessibility_android.cpp +++ b/modules/juce_gui_basics/native/accessibility/juce_Accessibility_android.cpp @@ -230,7 +230,7 @@ static jobject makeAndroidRect (Rectangle r) r.getBottom()); } -static jobject makeAndroidPoint (Point p) +static inline jobject makeAndroidPoint (Point p) { return getEnv()->NewObject (AndroidPoint, AndroidPoint.create, diff --git a/modules/juce_gui_basics/native/java/app/com/rmsl/juce/ComponentPeerView.java b/modules/juce_gui_basics/native/java/app/com/rmsl/juce/ComponentPeerView.java index 6a390b0830..2bf4490ca3 100644 --- a/modules/juce_gui_basics/native/java/app/com/rmsl/juce/ComponentPeerView.java +++ b/modules/juce_gui_basics/native/java/app/com/rmsl/juce/ComponentPeerView.java @@ -34,6 +34,10 @@ package com.rmsl.juce; +import static android.view.WindowInsetsController.BEHAVIOR_DEFAULT; +import static android.view.WindowInsetsController.BEHAVIOR_SHOW_BARS_BY_SWIPE; +import static android.view.WindowInsetsController.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE; + import android.app.Activity; import android.app.Application; import android.content.Context; @@ -44,31 +48,33 @@ import android.graphics.Paint; import android.graphics.Point; import android.graphics.Rect; import android.os.Build; -import android.text.Selection; -import android.text.SpanWatcher; -import android.text.Spannable; -import android.text.Spanned; -import android.text.TextWatcher; -import android.util.Pair; import android.os.Bundle; import android.text.Editable; import android.text.InputType; +import android.text.Selection; +import android.text.SpanWatcher; +import android.text.Spannable; import android.text.SpannableStringBuilder; +import android.text.Spanned; +import android.text.TextWatcher; +import android.util.Pair; import android.view.Choreographer; import android.view.KeyEvent; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; import android.view.ViewTreeObserver; -import android.view.accessibility.AccessibilityNodeProvider; -import android.view.accessibility.AccessibilityNodeInfo; +import android.view.Window; +import android.view.WindowInsets; +import android.view.WindowInsetsController; import android.view.accessibility.AccessibilityManager; +import android.view.accessibility.AccessibilityNodeInfo; +import android.view.accessibility.AccessibilityNodeProvider; import android.view.inputmethod.BaseInputConnection; import android.view.inputmethod.EditorInfo; import android.view.inputmethod.InputConnection; import android.view.inputmethod.InputMethodManager; -import java.lang.reflect.Method; import java.util.ArrayList; import java.util.List; @@ -80,7 +86,7 @@ public final class ComponentPeerView extends ViewGroup { super (context); - if (Application.class.isInstance (context)) + if (context instanceof Application) { ((Application) context).registerActivityLifecycleCallbacks (this); } @@ -796,35 +802,53 @@ public final class ComponentPeerView extends ViewGroup { } - public void setSystemUiVisibilityCompat (int visibility) + public void setSystemUiVisibilityCompat (Window window, boolean visible) { - Method systemUIVisibilityMethod = null; - try + if (30 <= Build.VERSION.SDK_INT) { - systemUIVisibilityMethod = this.getClass().getMethod ("setSystemUiVisibility", int.class); - } - catch (SecurityException e) - { - return; - } - catch (NoSuchMethodException e) - { - return; - } - if (systemUIVisibilityMethod == null) return; + WindowInsetsController controller = getWindowInsetsController(); - try - { - systemUIVisibilityMethod.invoke (this, visibility); + if (controller != null) + { + if (visible) + { + controller.show (WindowInsets.Type.systemBars()); + controller.setSystemBarsBehavior (31 <= Build.VERSION.SDK_INT ? BEHAVIOR_DEFAULT + : BEHAVIOR_SHOW_BARS_BY_SWIPE); + } + else + { + controller.hide (WindowInsets.Type.systemBars()); + controller.setSystemBarsBehavior (BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE); + } + + return; + } } - catch (java.lang.IllegalArgumentException e) - { - } - catch (java.lang.IllegalAccessException e) - { - } - catch (java.lang.reflect.InvocationTargetException e) + + if (window == null) + return; + + // Displays::findDisplays queries the DecorView to determine the + // most recently-requested visibility state of the system UI. + // As we're creating new top-level views via WindowManager, + // updating only the DecorView isn't sufficient to hide the global + // system UI; we also need to update the view that was added to + // the WindowManager. + ArrayList views = new ArrayList<>(); + views.add (window.getDecorView()); + views.add (this); + + for (View view : views) { + final int prevFlags = view.getSystemUiVisibility(); + final int fullScreenFlags = SYSTEM_UI_FLAG_HIDE_NAVIGATION + | SYSTEM_UI_FLAG_FULLSCREEN + | SYSTEM_UI_FLAG_IMMERSIVE_STICKY; + final int newFlags = visible ? (prevFlags & ~fullScreenFlags) + : (prevFlags | fullScreenFlags); + + view.setSystemUiVisibility (newFlags); } } diff --git a/modules/juce_gui_basics/native/javaopt/app/com/rmsl/juce/JuceActivity.java b/modules/juce_gui_basics/native/javaopt/app/com/rmsl/juce/JuceActivity.java index ae88d7f505..8bd0290466 100644 --- a/modules/juce_gui_basics/native/javaopt/app/com/rmsl/juce/JuceActivity.java +++ b/modules/juce_gui_basics/native/javaopt/app/com/rmsl/juce/JuceActivity.java @@ -34,21 +34,54 @@ package com.rmsl.juce; +import static android.view.View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN; +import static android.view.View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION; +import static android.view.View.SYSTEM_UI_FLAG_LAYOUT_STABLE; + import android.app.Activity; +import android.os.Build; +import android.os.Bundle; import android.content.Intent; +import android.view.View; //============================================================================== public class JuceActivity extends Activity { - //============================================================================== private native void appNewIntent (Intent intent); private native void appOnResume(); + private void initEdgeToEdge() + { + if (Build.VERSION.SDK_INT < 35) + { + View decorView = getWindow().getDecorView(); + + final int flags = Build.VERSION.SDK_INT < 30 + ? ( SYSTEM_UI_FLAG_LAYOUT_STABLE + | SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION + | SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN) + : SYSTEM_UI_FLAG_LAYOUT_STABLE; + + decorView.setSystemUiVisibility (decorView.getSystemUiVisibility() | flags); + } + + if (30 <= Build.VERSION.SDK_INT) + getWindow().setDecorFitsSystemWindows (false); + } + + @Override + protected void onCreate (Bundle savedInstanceState) + { + initEdgeToEdge(); + + super.onCreate (savedInstanceState); + } + @Override protected void onNewIntent (Intent intent) { - super.onNewIntent(intent); - setIntent(intent); + super.onNewIntent (intent); + setIntent (intent); appNewIntent (intent); } @@ -57,7 +90,6 @@ public class JuceActivity extends Activity protected void onResume() { super.onResume(); - appOnResume(); } } diff --git a/modules/juce_gui_basics/native/juce_Windowing_android.cpp b/modules/juce_gui_basics/native/juce_Windowing_android.cpp index f06feb916a..cfb36015b1 100644 --- a/modules/juce_gui_basics/native/juce_Windowing_android.cpp +++ b/modules/juce_gui_basics/native/juce_Windowing_android.cpp @@ -39,872 +39,802 @@ namespace juce // See juce_core/native/java/README.txt on how to generate this byte-code. const uint8 javaComponentPeerView[] { - 0x1f, 0x8b, 0x08, 0x08, 0x10, 0xaa, 0x6f, 0x64, 0x00, 0x03, 0x4a, 0x61, - 0x76, 0x61, 0x44, 0x65, 0x78, 0x42, 0x79, 0x74, 0x65, 0x43, 0x6f, 0x64, - 0x65, 0x2e, 0x64, 0x65, 0x78, 0x00, 0xa5, 0x7c, 0x0b, 0x7c, 0xd4, 0xc5, - 0xb5, 0xff, 0x99, 0xf9, 0xed, 0x23, 0xd9, 0xbc, 0x36, 0x9b, 0x90, 0x04, - 0x48, 0x60, 0x03, 0xa8, 0x01, 0xf2, 0xe2, 0x9d, 0x98, 0x28, 0x8f, 0xf0, - 0x0a, 0x49, 0x48, 0x20, 0x4b, 0x04, 0x42, 0xab, 0x4b, 0xb2, 0x81, 0xd5, - 0x65, 0x77, 0xb3, 0xbb, 0x09, 0xa0, 0xb6, 0x45, 0xa4, 0xa2, 0xd5, 0x5b, - 0x51, 0xa9, 0xa5, 0x6a, 0xad, 0xf5, 0x55, 0x6d, 0x6d, 0x6f, 0x55, 0x5a, - 0xd1, 0xaa, 0xad, 0xd5, 0x56, 0xab, 0x5e, 0x5f, 0xb5, 0xfe, 0xfd, 0xb7, - 0x5e, 0xaf, 0xda, 0x7a, 0x4b, 0xad, 0x7a, 0x6d, 0xa5, 0x0f, 0x95, 0x5b, - 0xef, 0xf7, 0xcc, 0xcc, 0x6e, 0x7e, 0x21, 0xa1, 0xb6, 0xf7, 0x26, 0x9f, - 0xef, 0xef, 0x9c, 0x99, 0x73, 0xe6, 0x3d, 0x73, 0xce, 0x99, 0xdf, 0x6e, - 0xd2, 0x1f, 0xda, 0xe5, 0xa9, 0x9f, 0xb7, 0x80, 0xb6, 0x2e, 0x4b, 0xdc, - 0xf3, 0xd1, 0xb5, 0x8f, 0x0c, 0xde, 0x7a, 0x49, 0xf7, 0xbe, 0x8f, 0xce, - 0xff, 0xf9, 0xfb, 0xfe, 0x37, 0x4f, 0x5f, 0xfd, 0xd1, 0xc2, 0xe7, 0x9e, - 0xd9, 0xb3, 0x81, 0x28, 0x4e, 0x44, 0xbb, 0x7a, 0xe6, 0xfb, 0xc8, 0xfc, - 0x3c, 0x18, 0x20, 0xfa, 0xa1, 0xd0, 0xf9, 0x2b, 0x81, 0x88, 0x1b, 0x00, - 0xdd, 0x97, 0x45, 0x34, 0x1d, 0xf4, 0x60, 0x1e, 0xd1, 0xcf, 0x41, 0xef, - 0xca, 0x27, 0x82, 0x88, 0x96, 0x4f, 0x20, 0xda, 0xb2, 0x98, 0x68, 0x46, - 0x09, 0xd1, 0x81, 0x3a, 0xa2, 0xab, 0x81, 0x2f, 0x01, 0x87, 0x80, 0xeb, - 0x81, 0x1b, 0x81, 0x9b, 0x81, 0xdb, 0x80, 0x3b, 0x80, 0xef, 0x02, 0x87, - 0x81, 0x07, 0x80, 0x1f, 0x03, 0xcf, 0x03, 0xbf, 0x03, 0xfe, 0x04, 0xfc, - 0x15, 0x38, 0x0e, 0x7c, 0x0c, 0x58, 0xf5, 0xa8, 0x1f, 0xc8, 0x05, 0xbc, - 0xc0, 0x04, 0x60, 0x22, 0x50, 0x0e, 0xf8, 0x81, 0x19, 0x40, 0x0b, 0xb0, - 0x05, 0x38, 0x1b, 0xe8, 0x03, 0xb6, 0x03, 0x11, 0x60, 0x10, 0xd8, 0x09, - 0x5c, 0x00, 0xec, 0x01, 0x3e, 0x0f, 0x5c, 0x0e, 0x1c, 0x00, 0xee, 0x00, - 0x5e, 0x05, 0x3e, 0x00, 0x8a, 0xe7, 0x10, 0xd5, 0x01, 0x9d, 0x40, 0x0c, - 0xb8, 0x0e, 0x38, 0x0c, 0x3c, 0x03, 0xfc, 0x16, 0xb0, 0xe6, 0x12, 0x95, - 0x01, 0xb5, 0xc0, 0x2a, 0x20, 0x08, 0x7c, 0x06, 0xf8, 0x32, 0xf0, 0x30, - 0xf0, 0x4b, 0xe0, 0x5d, 0xc0, 0x9a, 0x87, 0x7a, 0x80, 0x0e, 0x60, 0x00, - 0xd8, 0x0b, 0x7c, 0x1b, 0xf8, 0x31, 0xf0, 0x0a, 0x50, 0x3c, 0x9f, 0x68, - 0x01, 0xb0, 0x1d, 0xb8, 0x01, 0x78, 0x11, 0x70, 0x2c, 0x20, 0x9a, 0x0d, - 0x9c, 0x05, 0x5c, 0x02, 0xdc, 0x07, 0xbc, 0x09, 0x9c, 0xba, 0x90, 0x28, - 0x0a, 0xdc, 0x09, 0xbc, 0x02, 0x7c, 0x0c, 0x4c, 0x5f, 0x84, 0xb1, 0x02, - 0x03, 0xc0, 0xe7, 0x81, 0xaf, 0x01, 0xf7, 0x00, 0x2f, 0x01, 0xc7, 0x81, - 0xc2, 0x06, 0xa2, 0xf9, 0xc0, 0x6a, 0x60, 0x1b, 0x70, 0x01, 0xf0, 0x4d, - 0xe0, 0xa7, 0xc0, 0xbf, 0x03, 0x73, 0x1a, 0x89, 0x96, 0x01, 0x01, 0xe0, - 0x16, 0xe0, 0x2e, 0xe0, 0x1e, 0xe0, 0x51, 0xe0, 0x79, 0xe0, 0x45, 0xe0, - 0x65, 0xe0, 0xdf, 0x81, 0x5f, 0x03, 0x6f, 0x01, 0xef, 0x02, 0x7f, 0x06, - 0x8e, 0x03, 0xd6, 0xe9, 0x44, 0x59, 0x40, 0x1e, 0x50, 0x04, 0x94, 0x01, - 0xe5, 0x40, 0x25, 0x70, 0x1a, 0x50, 0x0b, 0xcc, 0x03, 0x1a, 0x80, 0xc5, - 0xc0, 0x6a, 0x60, 0x2d, 0xd0, 0x0d, 0x6c, 0x02, 0xce, 0x06, 0xfa, 0x80, - 0xf3, 0x80, 0x28, 0x90, 0x04, 0x76, 0x03, 0x9f, 0x05, 0xf6, 0x02, 0x97, - 0x01, 0x57, 0x02, 0xd7, 0x00, 0x87, 0x80, 0x9b, 0x80, 0x6f, 0x00, 0xdf, - 0x02, 0xfe, 0x15, 0xb8, 0x17, 0x78, 0x1c, 0x78, 0x05, 0x38, 0x0a, 0x1c, - 0x03, 0x44, 0x13, 0x51, 0x3e, 0x30, 0x19, 0xa8, 0x02, 0x16, 0x00, 0xcb, - 0x80, 0x4e, 0x60, 0x0b, 0x10, 0x06, 0x86, 0x81, 0xbd, 0xc0, 0x95, 0xc0, - 0xf5, 0xc0, 0x37, 0x80, 0x7b, 0x81, 0x1f, 0x02, 0x4f, 0x01, 0xff, 0x0f, - 0xf8, 0x35, 0xf0, 0x1e, 0xf0, 0x31, 0x30, 0xa1, 0x99, 0xa8, 0x02, 0x98, - 0x05, 0xcc, 0x07, 0x1a, 0x81, 0x00, 0xd0, 0x0b, 0xec, 0x00, 0x76, 0x01, - 0x17, 0x00, 0x5f, 0x04, 0xae, 0x05, 0xee, 0x04, 0xee, 0x06, 0xee, 0x07, - 0x1e, 0x01, 0x7e, 0x0e, 0xfc, 0x0a, 0x78, 0x0b, 0x78, 0x1f, 0xf8, 0x10, - 0xc8, 0x39, 0x03, 0x7b, 0x15, 0x98, 0x05, 0x2c, 0x02, 0x56, 0x01, 0x01, - 0xa0, 0x1f, 0x48, 0x02, 0x97, 0x01, 0x57, 0x03, 0x5f, 0x01, 0xbe, 0x0f, - 0x3c, 0x08, 0xfc, 0x04, 0x78, 0x02, 0x78, 0x01, 0x78, 0x15, 0xf8, 0x35, - 0xf0, 0x0e, 0x70, 0x0c, 0x28, 0x39, 0x13, 0xf3, 0x0e, 0x2c, 0x04, 0xce, - 0x00, 0xda, 0x80, 0x8d, 0x40, 0x10, 0x18, 0x04, 0x3e, 0x03, 0x5c, 0x07, - 0x1c, 0x01, 0x1e, 0x05, 0x5e, 0x04, 0x7e, 0x0f, 0xfc, 0x37, 0x50, 0x84, - 0x73, 0x3a, 0x0d, 0xa8, 0x06, 0x96, 0x02, 0x1b, 0x81, 0x7e, 0x60, 0x10, - 0xf8, 0x1c, 0x70, 0x1d, 0xf0, 0x20, 0xf0, 0x38, 0xf0, 0x06, 0xf0, 0x11, - 0xe0, 0x5d, 0x82, 0x35, 0x06, 0x3a, 0x81, 0x2d, 0xc0, 0x0e, 0x60, 0x2f, - 0x70, 0x00, 0xb8, 0x1e, 0xf8, 0x26, 0xf0, 0x03, 0xe0, 0x67, 0xc0, 0x0b, - 0xc0, 0xaf, 0x80, 0xa3, 0xc0, 0x07, 0x40, 0xee, 0x52, 0xa2, 0x29, 0x40, - 0x2d, 0xb0, 0x04, 0xd8, 0x00, 0x84, 0x80, 0xf3, 0x81, 0xcb, 0x80, 0xaf, - 0x00, 0xf7, 0x01, 0x0f, 0x01, 0x8f, 0x02, 0x3f, 0x05, 0x5e, 0x03, 0xfe, - 0x00, 0x58, 0xcb, 0xb0, 0x1e, 0xc0, 0x0c, 0x60, 0x1e, 0xb0, 0x04, 0xe8, - 0x01, 0xb6, 0x01, 0xbb, 0x80, 0xfd, 0xc0, 0x41, 0xe0, 0x4e, 0xe0, 0x5e, - 0xe0, 0x11, 0xe0, 0x97, 0xc0, 0x6f, 0x80, 0xb7, 0x80, 0x77, 0x80, 0x0f, - 0x80, 0xbf, 0x01, 0x05, 0x2d, 0xe8, 0x07, 0x50, 0x07, 0x34, 0x03, 0xab, - 0x80, 0x0d, 0xc0, 0x76, 0x20, 0x01, 0x9c, 0x0f, 0x5c, 0x02, 0x1c, 0x00, - 0x6e, 0x01, 0x1e, 0x06, 0x7e, 0x06, 0xbc, 0x00, 0xfc, 0x1e, 0xf8, 0x10, - 0x10, 0xcb, 0x31, 0x17, 0x40, 0x09, 0x30, 0x05, 0x98, 0x01, 0x54, 0x03, - 0x75, 0xc0, 0x02, 0x60, 0x29, 0xb0, 0x0a, 0xe8, 0x02, 0x36, 0x01, 0x7d, - 0xc0, 0x20, 0xb0, 0x1b, 0xb8, 0x08, 0xd8, 0x0f, 0x5c, 0x0f, 0x7c, 0x1d, - 0xf8, 0x06, 0xf0, 0x00, 0xf0, 0x2c, 0xf0, 0x3a, 0x70, 0x0c, 0x28, 0x5c, - 0x81, 0x3a, 0x81, 0x45, 0x40, 0x17, 0xb0, 0x11, 0xd8, 0x06, 0xec, 0x04, - 0x3e, 0x0f, 0x1c, 0x00, 0xbe, 0x06, 0xdc, 0x01, 0xdc, 0x03, 0x3c, 0x02, - 0x3c, 0x03, 0xfc, 0x3b, 0xf0, 0x36, 0xf0, 0x11, 0x90, 0x0d, 0x83, 0x5d, - 0x08, 0x4c, 0x02, 0xa6, 0x01, 0xd5, 0xc0, 0x3c, 0xe0, 0x74, 0x60, 0x29, - 0xd0, 0x01, 0x6c, 0x01, 0xfa, 0x80, 0xbd, 0xc0, 0x97, 0x80, 0xeb, 0x80, - 0xaf, 0x02, 0xb7, 0x03, 0x4f, 0x02, 0x47, 0x81, 0x63, 0x80, 0x5c, 0x85, - 0xfa, 0x80, 0x5c, 0x60, 0x12, 0x30, 0x0b, 0xa8, 0x03, 0x16, 0x03, 0x1d, - 0xc0, 0x00, 0x70, 0x21, 0x70, 0x15, 0xf0, 0x35, 0xe0, 0x7e, 0xe0, 0x71, - 0xe0, 0x39, 0xe0, 0xb7, 0x80, 0x63, 0x35, 0xce, 0x12, 0x30, 0x0b, 0x68, - 0x04, 0x56, 0x00, 0x1b, 0x80, 0x3e, 0x20, 0x01, 0xec, 0x06, 0x2e, 0x03, - 0x0e, 0x01, 0x37, 0x01, 0xdf, 0x06, 0x8e, 0x00, 0x2f, 0x00, 0xbf, 0x04, - 0x7e, 0x03, 0xbc, 0x05, 0xe4, 0xb4, 0x12, 0xd5, 0x03, 0x9b, 0x81, 0xbd, - 0xc0, 0xcd, 0xc0, 0x23, 0xc0, 0x1b, 0x80, 0x63, 0x0d, 0xec, 0x25, 0xd0, - 0x06, 0x24, 0x81, 0xdd, 0xc0, 0x45, 0xc0, 0x65, 0xc0, 0x95, 0xc0, 0x57, - 0x80, 0x1b, 0x81, 0x5b, 0x81, 0xc7, 0x81, 0x3f, 0x02, 0xbe, 0x36, 0xac, - 0x17, 0xb0, 0x18, 0x58, 0x06, 0xb4, 0x02, 0xeb, 0x81, 0x8d, 0xc0, 0x39, - 0xc0, 0x20, 0x70, 0x21, 0xf0, 0x45, 0xe0, 0x16, 0xe0, 0x1e, 0xe0, 0x61, - 0xe0, 0x11, 0xe0, 0x71, 0xe0, 0x49, 0xe0, 0x19, 0xe0, 0x05, 0xe0, 0x25, - 0xe0, 0x97, 0xc0, 0xab, 0x40, 0x01, 0x7c, 0x61, 0x21, 0x50, 0x06, 0x54, - 0x01, 0x33, 0x81, 0x59, 0xc0, 0x6c, 0xa0, 0x1a, 0xa8, 0x01, 0x6a, 0x01, - 0xb8, 0x36, 0x82, 0xeb, 0x21, 0xb8, 0x17, 0x82, 0xeb, 0x20, 0xb8, 0x07, - 0x82, 0x3b, 0x20, 0x98, 0x7e, 0x82, 0xa9, 0x27, 0x98, 0x73, 0x82, 0xc9, - 0x26, 0x98, 0x5d, 0x82, 0x99, 0x23, 0x98, 0x25, 0xc2, 0xb1, 0x27, 0x1c, - 0x5f, 0xc2, 0x71, 0x24, 0x1c, 0x2b, 0xc2, 0xf1, 0x20, 0x6c, 0x6b, 0x6a, - 0x61, 0xff, 0x0b, 0xac, 0x30, 0xbe, 0x1a, 0xd3, 0x4e, 0x98, 0x32, 0xc2, - 0xd4, 0x10, 0x86, 0x4a, 0xe8, 0x16, 0xb5, 0x03, 0x1d, 0xc0, 0x5a, 0xa0, - 0x13, 0xe8, 0x02, 0xd6, 0x01, 0xeb, 0x81, 0x6e, 0x00, 0xee, 0x9e, 0x10, - 0x06, 0x50, 0x0f, 0x70, 0x16, 0xb0, 0x11, 0xd8, 0x04, 0x6c, 0x06, 0x7a, - 0x81, 0x2d, 0xc0, 0xa7, 0x80, 0x4f, 0x03, 0x67, 0x03, 0xe7, 0x00, 0x41, - 0x60, 0x2b, 0xd0, 0x07, 0xf4, 0x03, 0xdb, 0x80, 0x1d, 0xc0, 0xa5, 0x1c, - 0x1f, 0x00, 0x5f, 0x02, 0xae, 0x05, 0xbe, 0x4c, 0x7a, 0x5e, 0xd2, 0x3f, - 0xde, 0x34, 0xad, 0xd1, 0x73, 0x25, 0x4c, 0xba, 0xc8, 0xf0, 0x9c, 0x5f, - 0x6c, 0xf8, 0x32, 0xf0, 0x13, 0x0c, 0xef, 0x07, 0x5f, 0x62, 0xf8, 0x2a, - 0xf0, 0xa5, 0x86, 0xaf, 0xb7, 0xf1, 0x0d, 0x36, 0x7e, 0x49, 0x8d, 0x5e, - 0x07, 0x69, 0xea, 0x9f, 0x68, 0x78, 0xae, 0x67, 0x92, 0xe1, 0x57, 0x83, - 0xaf, 0x00, 0x75, 0x19, 0x1d, 0x8e, 0x6d, 0xb2, 0x78, 0x7e, 0x4c, 0x7e, - 0xba, 0xaf, 0xcc, 0x17, 0xda, 0xf8, 0x89, 0x36, 0xbe, 0xc2, 0xf0, 0x95, - 0x86, 0xdf, 0x88, 0xb2, 0xa7, 0x1a, 0xfe, 0x1c, 0x53, 0x8f, 0xdf, 0xa6, - 0x3f, 0xcd, 0xf0, 0x53, 0x0c, 0xcf, 0xe3, 0x9d, 0x61, 0xf8, 0x88, 0xd1, - 0x9f, 0x6e, 0xeb, 0x0f, 0xd7, 0x95, 0x32, 0xf9, 0xa7, 0x99, 0x7c, 0xae, - 0xaf, 0xc6, 0x8c, 0x85, 0x75, 0x78, 0x4f, 0x5d, 0x08, 0x7e, 0x2a, 0xe9, - 0xbd, 0x54, 0x66, 0xf4, 0xe7, 0xdb, 0xda, 0x5a, 0x64, 0xda, 0xf2, 0x1b, - 0x9e, 0xcb, 0x9e, 0x62, 0xf8, 0x7d, 0x35, 0xba, 0x6e, 0xde, 0x6f, 0x57, - 0x98, 0x3a, 0x99, 0x3f, 0x68, 0xea, 0x69, 0x32, 0xf5, 0x4c, 0x35, 0x3c, - 0xd7, 0x3f, 0xcd, 0xf0, 0x37, 0x98, 0xb2, 0xbc, 0x3f, 0xef, 0x30, 0x65, - 0x79, 0x8f, 0x7e, 0xd7, 0x8c, 0x8b, 0xf9, 0x23, 0x35, 0x7a, 0x6f, 0x2c, - 0x31, 0xf5, 0x44, 0x0d, 0xcf, 0xfd, 0x89, 0x19, 0x9e, 0xeb, 0x8c, 0x1b, - 0xfe, 0x47, 0xe0, 0x07, 0x0d, 0xff, 0x34, 0xf8, 0x84, 0xe1, 0xb9, 0xcf, - 0x49, 0xc3, 0xbf, 0x0c, 0x3e, 0x65, 0x78, 0xee, 0xc3, 0x90, 0xe1, 0x8f, - 0x82, 0x1f, 0x36, 0xfc, 0x31, 0xf0, 0xbb, 0x0c, 0x7f, 0x1c, 0xfc, 0x4e, - 0xc3, 0x67, 0xd5, 0x8e, 0xf0, 0x5e, 0xf0, 0xbb, 0xd3, 0x7d, 0x00, 0x7f, - 0x7e, 0xba, 0x2d, 0xf0, 0x9f, 0x33, 0x7c, 0x95, 0x2d, 0xbf, 0xde, 0xc6, - 0x37, 0x80, 0xdf, 0x67, 0xf8, 0x25, 0xb6, 0xfc, 0x76, 0x1b, 0x1f, 0xb0, - 0xf1, 0x5b, 0x6c, 0x3c, 0xcf, 0x4f, 0xba, 0xfe, 0x7e, 0xe4, 0x5f, 0x68, - 0xf8, 0x08, 0xf8, 0x3d, 0x86, 0xdf, 0x05, 0xfe, 0x22, 0xc3, 0xef, 0xb3, - 0x95, 0x3d, 0x68, 0xe3, 0x6f, 0xb0, 0xf1, 0xb7, 0x82, 0xbf, 0x20, 0x5d, - 0x0f, 0xea, 0xbf, 0xd8, 0xf0, 0x77, 0xd9, 0x74, 0x8e, 0x57, 0x8f, 0xf0, - 0xbc, 0x67, 0x3e, 0x9b, 0xae, 0x1f, 0xfc, 0x5e, 0xc3, 0x1f, 0xb6, 0x8d, - 0xfd, 0x47, 0xe0, 0x3f, 0x6f, 0xf8, 0x27, 0x6c, 0xf5, 0xf0, 0xf9, 0xfa, - 0x8c, 0xe1, 0x5f, 0xb4, 0xe5, 0xbf, 0x56, 0x3b, 0x92, 0x7f, 0xd4, 0x56, - 0xcf, 0x31, 0x7b, 0xff, 0x6b, 0x6c, 0xfd, 0x41, 0xfe, 0x25, 0x86, 0x77, - 0xc0, 0x30, 0xee, 0x37, 0x7c, 0x6e, 0xdd, 0x88, 0x4e, 0xb9, 0x8d, 0x9f, - 0x51, 0xa7, 0x6d, 0x0c, 0xdb, 0x3f, 0xfe, 0xb9, 0xcc, 0xf0, 0xbc, 0x7f, - 0xbe, 0x60, 0xf8, 0xea, 0xba, 0x11, 0xbe, 0x01, 0xfc, 0xe5, 0x86, 0x5f, - 0x0e, 0xfe, 0x0a, 0xc3, 0xf3, 0x5e, 0xfa, 0x17, 0xc3, 0xb7, 0x23, 0xff, - 0x8b, 0x86, 0xdf, 0x08, 0xfe, 0x80, 0xe1, 0xfb, 0xc1, 0x5f, 0x69, 0xf8, - 0x88, 0x2d, 0x9f, 0xe7, 0xf6, 0x2a, 0xc3, 0xa7, 0xf8, 0xbe, 0x63, 0xf8, - 0x7d, 0x36, 0x7d, 0x9e, 0x87, 0x34, 0xcf, 0xe3, 0xbd, 0xc6, 0xf0, 0x3c, - 0xc6, 0x3c, 0x58, 0xa8, 0x07, 0x49, 0xd3, 0x5b, 0x61, 0xac, 0xf2, 0x41, - 0xc3, 0xc4, 0xe7, 0x71, 0x1e, 0xdd, 0x6d, 0xa8, 0x5f, 0x30, 0x15, 0x34, - 0xdd, 0xd0, 0x53, 0x0c, 0x3d, 0xd5, 0xd0, 0xd3, 0x0c, 0x9d, 0x29, 0xb4, - 0xfe, 0x42, 0xc1, 0x3e, 0xa7, 0x89, 0x9e, 0x26, 0xa6, 0x85, 0xea, 0x7e, - 0x56, 0x05, 0x2b, 0x71, 0x95, 0xca, 0xaf, 0xa5, 0xef, 0x08, 0xf6, 0x47, - 0x85, 0xf4, 0x30, 0x31, 0xad, 0xa2, 0x47, 0x14, 0xd5, 0xf2, 0x99, 0x46, - 0x3e, 0x0b, 0xf4, 0x26, 0x43, 0x39, 0x3d, 0x1b, 0x3d, 0x5e, 0xa0, 0x68, - 0x35, 0x7d, 0x5d, 0xb0, 0x0f, 0xd3, 0xf2, 0x6a, 0x23, 0xaf, 0x86, 0xe4, - 0x1e, 0xc1, 0xb6, 0x48, 0x52, 0xa5, 0x60, 0x3b, 0x54, 0x49, 0xff, 0x4a, - 0x4c, 0x67, 0xd2, 0x0f, 0x15, 0x4d, 0xe7, 0x57, 0xd3, 0x7c, 0x45, 0x67, - 0x51, 0x8b, 0xa2, 0x4b, 0xe9, 0x1c, 0x45, 0x73, 0x28, 0x24, 0xd8, 0x06, - 0xcd, 0xa7, 0x73, 0xa1, 0xef, 0x44, 0xff, 0x63, 0x82, 0xed, 0x71, 0x1e, - 0xbd, 0x49, 0x4c, 0x67, 0x90, 0x03, 0xe9, 0x6c, 0xb4, 0xc3, 0x76, 0x39, - 0x1b, 0x1e, 0x69, 0x27, 0xd2, 0x1e, 0x58, 0x15, 0x4e, 0xe7, 0x98, 0xfc, - 0x1c, 0xcc, 0xe0, 0x2e, 0xc1, 0xf3, 0xa9, 0xd3, 0x85, 0x68, 0xb7, 0x51, - 0x30, 0xed, 0xa6, 0x41, 0x45, 0x03, 0xb4, 0x07, 0xd4, 0x87, 0x1a, 0xa4, - 0xa1, 0x96, 0xa2, 0x2d, 0xf4, 0x39, 0xc1, 0x3e, 0x66, 0x9d, 0x2a, 0x57, - 0x0a, 0x2f, 0xc8, 0x74, 0x22, 0x4a, 0xfc, 0x45, 0xd1, 0x95, 0x74, 0x9e, - 0x60, 0x7f, 0x51, 0xa3, 0xf2, 0x27, 0xa1, 0xde, 0x5f, 0x2b, 0x7a, 0x0a, - 0x1d, 0x35, 0xe9, 0x0f, 0x0d, 0xcd, 0x82, 0xde, 0x64, 0x23, 0x67, 0xfa, - 0x1b, 0x45, 0x3d, 0xf4, 0xae, 0x49, 0xff, 0xb7, 0xa2, 0x16, 0xfd, 0x4d, - 0x51, 0xdc, 0x35, 0x0c, 0x25, 0x55, 0x4e, 0x50, 0x9e, 0xa1, 0xf9, 0x82, - 0x6d, 0x6e, 0x09, 0x3d, 0x4b, 0x4c, 0x25, 0xfd, 0x41, 0xd1, 0x25, 0x94, - 0x2b, 0xd8, 0x8e, 0x37, 0xab, 0x7e, 0x4c, 0x81, 0x07, 0xee, 0x51, 0xe9, - 0xb3, 0xe9, 0x2c, 0x45, 0xeb, 0x68, 0xb3, 0x60, 0xdb, 0xde, 0x46, 0x87, - 0x49, 0xd3, 0xb8, 0x60, 0x9f, 0xb4, 0x85, 0xe6, 0x08, 0xb6, 0xd5, 0xad, - 0xaa, 0xdc, 0x34, 0x78, 0xc4, 0x15, 0x2a, 0x3d, 0x9b, 0xa2, 0x82, 0x6d, - 0xb5, 0x9e, 0xaf, 0x19, 0x88, 0x14, 0x34, 0x9d, 0x4d, 0x8f, 0x29, 0x9a, - 0x45, 0x6f, 0x19, 0xfa, 0x7b, 0x45, 0xbd, 0xf4, 0x0e, 0xb1, 0x9d, 0xef, - 0xa7, 0xa9, 0x82, 0xe9, 0x6a, 0x4a, 0x28, 0x3a, 0x40, 0x97, 0xa9, 0xfd, - 0xb5, 0x56, 0x95, 0xaf, 0xc2, 0xba, 0x7e, 0x5f, 0xd1, 0xf5, 0xf4, 0x03, - 0x45, 0x67, 0x92, 0x5b, 0xc9, 0x97, 0x53, 0xaf, 0xa2, 0x2b, 0x68, 0x8b, - 0x49, 0x7f, 0x4a, 0x68, 0xbd, 0x4f, 0x2b, 0xba, 0x8c, 0x6e, 0x37, 0xf4, - 0x1b, 0x86, 0xde, 0x61, 0xe8, 0x9d, 0x6a, 0x7f, 0x76, 0xa9, 0xfa, 0x67, - 0x9a, 0xfe, 0xcd, 0xc4, 0xb8, 0x7e, 0xa9, 0xa8, 0xee, 0xd7, 0x4c, 0x3a, - 0x8f, 0x2e, 0x54, 0xfb, 0xb6, 0x53, 0xe9, 0xcd, 0xc2, 0x4a, 0x3e, 0xab, - 0xe8, 0x2c, 0x7a, 0xd9, 0xa4, 0xff, 0xbf, 0xa2, 0x9f, 0xa6, 0xed, 0x6a, - 0x3f, 0xb7, 0x2b, 0xbd, 0xd9, 0xf8, 0x0d, 0xa8, 0x7d, 0xac, 0xcb, 0x55, - 0x23, 0xff, 0x7a, 0x43, 0x6f, 0x50, 0xb4, 0x82, 0xbe, 0x4a, 0x7a, 0x9f, - 0x5f, 0x6e, 0xf6, 0xfb, 0x15, 0x6a, 0xbf, 0xd7, 0x2b, 0x7d, 0xde, 0xf7, - 0xff, 0xa9, 0xa8, 0x9b, 0x7e, 0x6b, 0xd2, 0x7f, 0x34, 0xf4, 0x7d, 0x43, - 0xff, 0xaa, 0xe8, 0xa9, 0xe4, 0x34, 0xe7, 0xc4, 0xa5, 0x68, 0x0f, 0xcd, - 0x56, 0x74, 0x0b, 0xd5, 0x2b, 0x5a, 0x43, 0x17, 0x28, 0x7a, 0x16, 0x5d, - 0xac, 0xce, 0xc5, 0x19, 0xaa, 0xfe, 0x5a, 0x44, 0x59, 0x87, 0x14, 0x75, - 0xd2, 0x57, 0x14, 0x5d, 0x44, 0xd7, 0x29, 0x9a, 0x4b, 0x37, 0x2a, 0xda, - 0x41, 0x5f, 0x53, 0xb4, 0x98, 0x6e, 0x52, 0x74, 0x3b, 0x7d, 0x5d, 0xd1, - 0x69, 0x74, 0xb3, 0xa1, 0xb7, 0x98, 0xf2, 0xb7, 0x2a, 0xba, 0x8d, 0x6e, - 0x53, 0x74, 0x2e, 0xdd, 0xae, 0xe8, 0x69, 0xf4, 0x0d, 0x45, 0x17, 0xd2, - 0x1d, 0x46, 0xef, 0x4e, 0x43, 0xbf, 0xa9, 0xa8, 0x8b, 0xbe, 0x65, 0xd2, - 0x77, 0x29, 0x3a, 0x9b, 0xee, 0x37, 0xf4, 0x51, 0x43, 0x7f, 0xa2, 0xe8, - 0xa7, 0xe8, 0x29, 0x45, 0xeb, 0xe9, 0x79, 0x45, 0x1b, 0xe8, 0x15, 0xd2, - 0xf6, 0xe0, 0x75, 0x45, 0x27, 0xd2, 0x1b, 0x8a, 0xe6, 0xd1, 0xdb, 0x8a, - 0x96, 0xd3, 0x7f, 0x91, 0x3e, 0xff, 0xef, 0x19, 0x3b, 0xf1, 0x07, 0xa3, - 0x7f, 0x4c, 0xd1, 0xc9, 0xf4, 0x27, 0x45, 0x2d, 0xfa, 0xb3, 0xa2, 0xbd, - 0xf4, 0x81, 0xa2, 0x45, 0x74, 0x5c, 0x51, 0x1f, 0x09, 0x35, 0x4f, 0x13, - 0x28, 0x5b, 0xe8, 0xf2, 0x1e, 0x45, 0x0b, 0x28, 0x47, 0x51, 0x7d, 0x5e, - 0x6a, 0x11, 0x61, 0x7b, 0x85, 0xee, 0x57, 0xa1, 0xa1, 0x3e, 0x43, 0x8b, - 0x14, 0x9d, 0x4f, 0xc5, 0x8a, 0xce, 0xa3, 0x09, 0x42, 0xcf, 0x4b, 0x89, - 0x91, 0x97, 0x9a, 0xf2, 0x65, 0x86, 0x4e, 0x34, 0x74, 0x92, 0xa2, 0x0b, - 0x68, 0xb2, 0xa2, 0x5b, 0xa9, 0x5c, 0xe8, 0x79, 0x98, 0xa2, 0xe8, 0x16, - 0xaa, 0x33, 0x74, 0xae, 0xa2, 0xa7, 0xd3, 0x1a, 0x45, 0x1b, 0xa9, 0xcd, - 0xd0, 0x76, 0x43, 0x3b, 0x8c, 0x7c, 0xad, 0x49, 0x77, 0x1a, 0xda, 0xa5, - 0xe8, 0x24, 0x5a, 0xa7, 0xe8, 0x99, 0xb4, 0x5e, 0xd1, 0x35, 0xd4, 0xad, - 0x68, 0x88, 0x36, 0x28, 0xaa, 0xcf, 0x7f, 0xad, 0x39, 0xff, 0x9c, 0xde, - 0xa8, 0xe8, 0x26, 0xda, 0xa4, 0xa8, 0xb6, 0x07, 0xac, 0x7f, 0xb6, 0xa2, - 0x7d, 0x74, 0xae, 0xa2, 0x1b, 0x69, 0xb7, 0xa1, 0xe7, 0x2b, 0xba, 0x8a, - 0x3e, 0x6b, 0xec, 0xf3, 0x5e, 0x45, 0x7b, 0x68, 0x9f, 0x49, 0x7f, 0xde, - 0xe8, 0x5d, 0x62, 0xe8, 0x7e, 0x45, 0x6b, 0xe9, 0x52, 0xa1, 0xf7, 0xc3, - 0x41, 0xa1, 0xf7, 0xc7, 0x97, 0x4c, 0xfa, 0x5a, 0x43, 0xbf, 0x6c, 0xe8, - 0x21, 0xa1, 0xf7, 0xd7, 0x57, 0x4c, 0xfa, 0x3a, 0xa1, 0xf7, 0xd9, 0xf5, - 0x42, 0xef, 0xeb, 0x1b, 0xcc, 0x7c, 0x7f, 0x55, 0xe8, 0x7d, 0x7d, 0xa3, - 0x99, 0xf7, 0xef, 0x0a, 0x8e, 0x61, 0xa7, 0xd0, 0x17, 0x15, 0x3d, 0x85, - 0x6e, 0x11, 0x1c, 0xc7, 0x56, 0xd1, 0x47, 0xc4, 0x34, 0x4c, 0xb5, 0xca, - 0x5f, 0x48, 0xaa, 0x56, 0xd4, 0x4f, 0xdf, 0x16, 0x1c, 0xab, 0x6a, 0x3b, - 0xd6, 0x88, 0x08, 0xf5, 0x77, 0x8a, 0xea, 0x72, 0x4d, 0xd8, 0x3f, 0x8f, - 0x13, 0x53, 0x07, 0x3d, 0xa1, 0xe8, 0xb9, 0xf4, 0x92, 0xa2, 0xda, 0x3f, - 0x70, 0xfe, 0x2a, 0x45, 0x4f, 0xa5, 0x2b, 0x05, 0xc7, 0xb0, 0xd3, 0xa9, - 0x46, 0xf0, 0x3d, 0x4b, 0xd7, 0x77, 0x26, 0xda, 0xbb, 0x97, 0xf4, 0x5d, - 0xce, 0x4b, 0x3a, 0x26, 0x3e, 0x56, 0xcd, 0x7e, 0x06, 0xb1, 0x01, 0xe8, - 0xd9, 0x7c, 0x81, 0x22, 0x7d, 0xcf, 0xf3, 0x92, 0x8e, 0x77, 0x89, 0xb4, - 0xfc, 0x42, 0xc8, 0xbf, 0x6a, 0xe4, 0xb3, 0x8c, 0x7c, 0xba, 0x4d, 0x7e, - 0x05, 0xe4, 0xf7, 0x19, 0xf9, 0x6c, 0x93, 0xcf, 0xf5, 0x1f, 0x37, 0xf5, - 0xdf, 0x0a, 0xfa, 0x92, 0x91, 0x57, 0xdb, 0xda, 0x4f, 0x97, 0x3f, 0x8c, - 0xcc, 0xdf, 0x19, 0x39, 0xdf, 0x05, 0xc4, 0x09, 0xf2, 0xc7, 0x20, 0x2f, - 0xec, 0xd6, 0x69, 0xbe, 0x1f, 0xf0, 0xfd, 0x85, 0xef, 0x01, 0x8e, 0x1a, - 0x2d, 0x7f, 0x05, 0xf2, 0x56, 0x23, 0xe7, 0xbb, 0xd0, 0x97, 0x71, 0x21, - 0xbc, 0x71, 0x9d, 0xae, 0xe7, 0xce, 0x75, 0x23, 0x79, 0x8f, 0xd9, 0xf8, - 0x67, 0x8d, 0xfc, 0x97, 0x26, 0xef, 0xbf, 0x40, 0xff, 0x0c, 0x58, 0x46, - 0x2e, 0xd0, 0x9f, 0xdc, 0xf5, 0x23, 0xfa, 0x13, 0xd6, 0x9b, 0xbb, 0x9b, - 0xa1, 0x8b, 0x0c, 0x5d, 0xbd, 0x9e, 0x7d, 0xbb, 0x43, 0xe9, 0xbd, 0xde, - 0xa6, 0xfb, 0x16, 0xf7, 0x3e, 0x8e, 0x74, 0xef, 0xf4, 0x7c, 0xea, 0x9d, - 0x91, 0x4b, 0xbd, 0xa7, 0xe4, 0x51, 0xc0, 0x9f, 0x4b, 0x81, 0xca, 0x3c, - 0x1a, 0xf4, 0x2f, 0xc6, 0xe8, 0xf3, 0x89, 0xef, 0x66, 0x42, 0xb5, 0xf5, - 0xc7, 0x36, 0x7d, 0x77, 0xf6, 0xb9, 0x06, 0xbd, 0x73, 0x61, 0x7b, 0x3d, - 0x72, 0xd0, 0x3b, 0x87, 0x29, 0x9d, 0x2e, 0x1d, 0x6a, 0x55, 0x7d, 0xa2, - 0x50, 0x44, 0xbd, 0x3f, 0x43, 0x5e, 0xae, 0x35, 0x4d, 0x9c, 0x89, 0xda, - 0x9f, 0x47, 0xd9, 0x69, 0x8e, 0x52, 0x8a, 0xd6, 0x3f, 0x45, 0x7d, 0xd2, - 0xe3, 0x1c, 0xf4, 0xfe, 0x14, 0xbb, 0x32, 0xd7, 0xa9, 0xd2, 0xe4, 0x71, - 0x71, 0xda, 0x45, 0xb9, 0xae, 0x78, 0xbd, 0x97, 0x02, 0xae, 0xa8, 0xff, - 0x05, 0xf8, 0xb2, 0xaa, 0x57, 0xf9, 0xfd, 0xb6, 0x54, 0x6d, 0x96, 0xb4, - 0xeb, 0xf9, 0xf3, 0x39, 0xa2, 0xde, 0x8d, 0xd0, 0xf4, 0xa0, 0xfe, 0x4d, - 0x4c, 0xe9, 0x74, 0xe1, 0x50, 0x3b, 0x2d, 0x9f, 0xb8, 0x45, 0xd4, 0x29, - 0xa3, 0xf5, 0xcf, 0xd0, 0x32, 0xe1, 0xb1, 0x14, 0x25, 0x8f, 0x63, 0xb0, - 0x3e, 0x9f, 0x16, 0x38, 0xaa, 0xde, 0xb3, 0x50, 0x17, 0x8f, 0x79, 0x61, - 0xbb, 0xbe, 0x67, 0x0e, 0x7a, 0x4f, 0x47, 0xaf, 0x72, 0x29, 0xea, 0x3f, - 0x07, 0xf9, 0xf9, 0x4a, 0xca, 0xf2, 0xa5, 0xed, 0xfa, 0xbd, 0xfa, 0xa0, - 0x7f, 0x19, 0x46, 0x3e, 0xe8, 0x5f, 0x62, 0xc6, 0x9f, 0xee, 0x4b, 0x47, - 0xa6, 0x2f, 0x83, 0xde, 0x3c, 0xb4, 0xe8, 0x11, 0x83, 0xde, 0x5c, 0xa6, - 0xe3, 0xf6, 0xe5, 0x29, 0xd3, 0x97, 0xa7, 0x54, 0x5f, 0xa2, 0xf5, 0x67, - 0xd3, 0x42, 0xf4, 0x45, 0x9a, 0x9b, 0xf1, 0x8e, 0x76, 0xbd, 0x26, 0x5c, - 0xbf, 0x0b, 0x25, 0x98, 0x1f, 0x32, 0xed, 0x27, 0xbc, 0x3f, 0x86, 0x16, - 0x56, 0xc3, 0x9b, 0x63, 0xda, 0x77, 0xaa, 0x52, 0xfb, 0x4c, 0xff, 0x47, - 0x56, 0x68, 0xa9, 0xea, 0x61, 0xb6, 0xea, 0x21, 0x62, 0xdd, 0x93, 0xc8, - 0xd3, 0xe5, 0x6f, 0x3f, 0x89, 0x9c, 0xc7, 0xc0, 0xe3, 0xfb, 0x5e, 0xbb, - 0xfe, 0xbc, 0xc1, 0xe7, 0x0a, 0x24, 0x72, 0x69, 0xde, 0x5e, 0x17, 0x05, - 0x12, 0x39, 0xd4, 0x28, 0x79, 0x5c, 0x07, 0x64, 0x76, 0x4e, 0xa2, 0xfe, - 0x11, 0x3a, 0x24, 0x73, 0xa5, 0xe9, 0x9f, 0xf0, 0xd1, 0x24, 0x29, 0x31, - 0x8b, 0x4f, 0xc3, 0x7f, 0x78, 0x64, 0xa3, 0xf4, 0x20, 0x6d, 0x65, 0xd2, - 0x0d, 0xd8, 0x13, 0x45, 0x18, 0xfb, 0x24, 0x84, 0x7e, 0xa3, 0xf3, 0xce, - 0x40, 0xbd, 0xd8, 0x67, 0xc9, 0x1c, 0xbd, 0x2b, 0xb2, 0x3d, 0x56, 0x20, - 0x95, 0x43, 0x07, 0x9c, 0xd9, 0x1e, 0x4e, 0xf7, 0x3b, 0xf5, 0x6c, 0xcd, - 0x75, 0xb0, 0x56, 0x03, 0xaf, 0x93, 0xf7, 0xdf, 0x30, 0x3f, 0x1e, 0xeb, - 0x65, 0xcb, 0xfa, 0x38, 0x5a, 0xff, 0x2c, 0x05, 0xad, 0x5c, 0x11, 0xf5, - 0x7f, 0x0a, 0xde, 0x88, 0xa5, 0x81, 0x44, 0x3e, 0x4d, 0xb3, 0x26, 0x51, - 0xbc, 0xbe, 0x08, 0x3b, 0x2a, 0x5a, 0x7f, 0x1b, 0x49, 0x8b, 0xfb, 0x1f, - 0x48, 0xea, 0x11, 0xce, 0x25, 0x9f, 0xec, 0xc5, 0x38, 0xaa, 0x6e, 0x74, - 0x60, 0x87, 0xf2, 0x38, 0x7f, 0x63, 0xe6, 0x21, 0x5e, 0x5f, 0x47, 0x5e, - 0xd9, 0x8b, 0x71, 0xf4, 0x5a, 0x85, 0x18, 0xa3, 0x03, 0xad, 0xf0, 0x3c, - 0xbd, 0xdf, 0xae, 0xcf, 0xbe, 0x4f, 0x06, 0xea, 0x0b, 0xd0, 0x06, 0xfa, - 0x8a, 0xdd, 0xd9, 0x80, 0x79, 0xe6, 0x74, 0x60, 0x8e, 0x97, 0x12, 0x7e, - 0x0f, 0x66, 0xae, 0x77, 0x6e, 0x01, 0x50, 0x48, 0xbc, 0x8b, 0x8a, 0x44, - 0x19, 0xcd, 0xf7, 0x7a, 0x29, 0xe6, 0xad, 0x47, 0x1b, 0x3a, 0x67, 0x2a, - 0x72, 0x5c, 0xe8, 0x65, 0xd4, 0xbf, 0xca, 0xec, 0x8d, 0x15, 0xa0, 0x55, - 0xc7, 0xf9, 0x3c, 0x39, 0xf9, 0xfc, 0x77, 0xe8, 0xf7, 0x47, 0x3c, 0xdf, - 0x68, 0x47, 0x3a, 0x89, 0x69, 0xa1, 0x0c, 0x24, 0x0a, 0x31, 0xeb, 0xd9, - 0xa8, 0x6b, 0x1e, 0x9f, 0x24, 0xf4, 0xbe, 0x80, 0xaa, 0xfe, 0xc4, 0xb9, - 0x51, 0xef, 0x16, 0xe5, 0x73, 0x15, 0x5f, 0xdf, 0x4b, 0x5b, 0x45, 0x2e, - 0x4d, 0x93, 0x13, 0x28, 0xee, 0x2f, 0xe0, 0x53, 0x0c, 0xbd, 0x69, 0xb2, - 0x0a, 0x23, 0xf7, 0x51, 0x20, 0x85, 0x9e, 0x0e, 0x15, 0x52, 0x7c, 0xc9, - 0x22, 0x9a, 0x1b, 0xe8, 0x4d, 0x78, 0x55, 0xdd, 0x81, 0xa4, 0x57, 0x49, - 0x12, 0xde, 0x6c, 0x8c, 0xd6, 0xe3, 0x28, 0x72, 0xfa, 0x28, 0xb1, 0x21, - 0x87, 0xe6, 0xae, 0x64, 0x69, 0xd5, 0xa3, 0x6c, 0x53, 0x2c, 0x6d, 0x3b, - 0x3a, 0xf4, 0x1c, 0xf5, 0x8a, 0x22, 0x9c, 0x62, 0xb6, 0x64, 0xbd, 0xb2, - 0x18, 0x63, 0xc8, 0x41, 0x3b, 0xdc, 0xf7, 0xd9, 0x1d, 0xfa, 0xdd, 0x96, - 0x4f, 0x16, 0x65, 0x4d, 0xa1, 0xc0, 0x35, 0x45, 0x38, 0x55, 0x21, 0x94, - 0xcd, 0x71, 0x94, 0xb8, 0x60, 0x25, 0x2c, 0x87, 0xab, 0xd1, 0x72, 0x90, - 0xbb, 0xb2, 0x50, 0xb0, 0x2c, 0x70, 0x50, 0xcb, 0x1d, 0x90, 0x0f, 0x2e, - 0xd9, 0x46, 0x2d, 0xb7, 0xe5, 0x62, 0x3e, 0xdd, 0x18, 0x4f, 0x25, 0xea, - 0xc8, 0x15, 0x55, 0xef, 0x9c, 0x63, 0x49, 0x9a, 0x7f, 0xb1, 0x9f, 0xa6, - 0x89, 0x69, 0xa8, 0xad, 0x18, 0x6b, 0x33, 0x9b, 0xe6, 0x78, 0xc6, 0x94, - 0x5d, 0xb7, 0x1d, 0x65, 0x3d, 0x56, 0xa3, 0xf5, 0x8b, 0x8f, 0xb9, 0xc4, - 0x82, 0x8b, 0x9d, 0xa8, 0xa3, 0x06, 0x3d, 0x76, 0x57, 0x56, 0x3d, 0xc5, - 0xe5, 0x06, 0xfd, 0xd5, 0x88, 0xbd, 0x50, 0x23, 0x2e, 0x04, 0x0e, 0x33, - 0x96, 0x40, 0x87, 0x7e, 0xd7, 0x34, 0x8d, 0xb4, 0x45, 0x62, 0xcb, 0x97, - 0x65, 0xce, 0xf4, 0xa7, 0x3b, 0xf4, 0xfb, 0x3f, 0x9f, 0x08, 0x6c, 0xd5, - 0xed, 0x48, 0xca, 0x91, 0x25, 0x0e, 0x8c, 0x41, 0x4a, 0x07, 0xef, 0xfd, - 0x42, 0xe1, 0xf3, 0xcd, 0x3b, 0x6d, 0x22, 0xb1, 0x3c, 0xd0, 0x37, 0x32, - 0xce, 0xc1, 0xfa, 0x30, 0x2d, 0x73, 0xf2, 0x38, 0xde, 0xfb, 0x38, 0xea, - 0xe5, 0x78, 0x0c, 0xb6, 0xc9, 0xdf, 0x8a, 0x3b, 0x04, 0x5a, 0xff, 0xcf, - 0xb1, 0xda, 0xe7, 0x2a, 0xed, 0xaa, 0xdf, 0xf1, 0xbd, 0xc9, 0xa1, 0xfa, - 0x93, 0xea, 0xd0, 0xf6, 0x24, 0x10, 0xd7, 0x7a, 0x2c, 0x29, 0x91, 0xca, - 0xc6, 0xca, 0x46, 0xb6, 0xa6, 0x88, 0xab, 0x02, 0x83, 0x45, 0x76, 0xb9, - 0x14, 0xfb, 0xc4, 0x97, 0xdc, 0xb7, 0xef, 0x74, 0x45, 0xf8, 0x44, 0x90, - 0xb6, 0x6d, 0x3c, 0xc6, 0xbd, 0x1d, 0x7c, 0x4f, 0xc3, 0x2a, 0xf9, 0x4a, - 0x94, 0x4d, 0x17, 0x28, 0xbd, 0xc5, 0x3b, 0x61, 0x94, 0xfd, 0xbe, 0xbc, - 0x43, 0xbf, 0x5b, 0x2c, 0x72, 0x15, 0x63, 0x9f, 0xe4, 0x41, 0x8f, 0x67, - 0x21, 0x90, 0x2c, 0xa1, 0xc0, 0x3c, 0x58, 0x68, 0xef, 0xe7, 0xa1, 0x95, - 0x2b, 0x1a, 0x45, 0xf3, 0x48, 0x9e, 0xff, 0x32, 0x78, 0xcf, 0x11, 0x8d, - 0xcf, 0x41, 0xc3, 0x63, 0xad, 0x87, 0xc3, 0x5d, 0x8f, 0x8b, 0xf1, 0xdd, - 0x81, 0xab, 0xc8, 0x72, 0x2c, 0x38, 0x67, 0x12, 0x6d, 0x48, 0x4e, 0xa0, - 0x06, 0xab, 0x84, 0x7c, 0xd6, 0x16, 0x70, 0x69, 0xfd, 0x40, 0xaa, 0x04, - 0xfd, 0x5e, 0x8f, 0x91, 0xe4, 0x3a, 0x32, 0x2b, 0x58, 0x3f, 0x40, 0x2d, - 0x4e, 0xd6, 0x6f, 0xb4, 0xdc, 0xb4, 0xe8, 0x1c, 0x27, 0xf9, 0x8a, 0xb8, - 0x0c, 0x4e, 0x87, 0x7f, 0x3a, 0x6c, 0x44, 0xd4, 0x3b, 0x4d, 0x9d, 0xf5, - 0xd1, 0x6d, 0x54, 0x3d, 0xc3, 0x6b, 0xc9, 0x67, 0xf3, 0xfb, 0x1d, 0xfa, - 0xbd, 0x66, 0xaf, 0xaf, 0xd4, 0x8c, 0x93, 0x6f, 0x55, 0x71, 0x6c, 0x57, - 0x9c, 0x47, 0xef, 0x44, 0xea, 0x2d, 0x2a, 0x53, 0x63, 0x16, 0xea, 0x97, - 0xe8, 0xa7, 0x1d, 0xbc, 0x0f, 0xd8, 0xcf, 0x75, 0x93, 0xbe, 0xf1, 0xeb, - 0xfc, 0x67, 0x32, 0xf9, 0x01, 0x95, 0x2f, 0xcd, 0x1b, 0xd1, 0x97, 0x3a, - 0xb4, 0x5f, 0x0d, 0x78, 0xcb, 0x94, 0x7f, 0xb4, 0x8c, 0x4d, 0x78, 0x15, - 0xf9, 0xb9, 0xca, 0x76, 0x96, 0xa1, 0x8f, 0xfc, 0xe6, 0x84, 0x6d, 0xe8, - 0x44, 0xf4, 0xba, 0x4a, 0xd9, 0xd0, 0xb4, 0xde, 0x9b, 0x27, 0xd5, 0x9b, - 0xa9, 0xf4, 0xd2, 0x7b, 0xf2, 0x6d, 0xb3, 0x27, 0xf5, 0x18, 0x36, 0xfb, - 0x26, 0xd9, 0xea, 0x38, 0xd6, 0xa1, 0xfd, 0x40, 0xb7, 0x7f, 0x12, 0xf6, - 0x73, 0x1c, 0xe5, 0x3c, 0x6a, 0xcc, 0x0e, 0xb3, 0x67, 0x3f, 0xb4, 0xcb, - 0xeb, 0x13, 0xe4, 0xb5, 0xb4, 0x3c, 0x5d, 0x5e, 0xae, 0xb5, 0x97, 0xef, - 0xcb, 0x94, 0x4f, 0xcb, 0xb3, 0x46, 0xc9, 0xcf, 0x1b, 0x23, 0xcf, 0x1f, - 0x25, 0x4f, 0x66, 0xe4, 0xec, 0x25, 0x78, 0xce, 0x8a, 0xed, 0xf2, 0x25, - 0x51, 0xf2, 0xb6, 0xe4, 0x8e, 0x9a, 0xab, 0x29, 0xa3, 0xca, 0x0f, 0x8e, - 0xe9, 0xff, 0x8c, 0xb5, 0x7a, 0xec, 0xba, 0xff, 0x31, 0xf4, 0x7f, 0x64, - 0xec, 0xd5, 0xa3, 0xca, 0x6e, 0x1d, 0xd3, 0xf6, 0x5c, 0x7b, 0xd9, 0x25, - 0x3b, 0xd0, 0x76, 0x7e, 0xa6, 0xde, 0xe6, 0x51, 0xf5, 0xf6, 0xab, 0x7a, - 0xf3, 0x55, 0x49, 0x49, 0xad, 0x90, 0xbd, 0xc0, 0xe7, 0xdc, 0xed, 0x2b, - 0x89, 0xfb, 0x67, 0xe0, 0xbe, 0x35, 0xcd, 0x91, 0x83, 0xd9, 0xe7, 0x78, - 0xa8, 0xf7, 0x60, 0x25, 0x52, 0xd5, 0xb0, 0x39, 0x9d, 0x74, 0x30, 0xbb, - 0xf7, 0xe0, 0x14, 0xa4, 0x66, 0x21, 0xb5, 0x5a, 0xa5, 0xa6, 0x62, 0x1d, - 0x2f, 0xc4, 0xd9, 0xca, 0x75, 0x4c, 0x72, 0x7e, 0x07, 0xeb, 0x88, 0x13, - 0x03, 0x7e, 0xaa, 0xa3, 0x12, 0xe5, 0x26, 0x53, 0xb9, 0x03, 0x16, 0xc8, - 0xff, 0x18, 0xee, 0x79, 0x1e, 0x47, 0x83, 0x03, 0xf7, 0x74, 0x0f, 0xa7, - 0x09, 0xf7, 0xc5, 0xcd, 0x37, 0x54, 0x80, 0xbb, 0x97, 0x76, 0xd3, 0x96, - 0xeb, 0xfd, 0xe0, 0xee, 0x42, 0x54, 0x1b, 0xf5, 0x7f, 0x5b, 0x3d, 0xbf, - 0x83, 0x7b, 0xe5, 0x34, 0xd4, 0x19, 0xf7, 0x72, 0xbf, 0x8b, 0x1c, 0xc5, - 0x34, 0x7d, 0xe9, 0x32, 0x3a, 0x55, 0xf0, 0x27, 0x00, 0x51, 0xbf, 0x03, - 0xa3, 0x0e, 0x70, 0x9f, 0x9c, 0x1e, 0xec, 0x6c, 0x27, 0x71, 0x8d, 0x6e, - 0xb4, 0xea, 0xb3, 0xa2, 0xde, 0x27, 0x4c, 0x4f, 0x3e, 0x23, 0x7c, 0xa7, - 0x4e, 0x1f, 0x58, 0x8e, 0xf1, 0x6c, 0xcd, 0x9a, 0x46, 0x1d, 0x59, 0x2e, - 0xb7, 0xaf, 0xb4, 0x3c, 0x2b, 0x47, 0x71, 0xd1, 0xfa, 0x47, 0x11, 0x4b, - 0xe5, 0x5a, 0x0d, 0x56, 0x31, 0xec, 0xb3, 0x6f, 0xc6, 0xf4, 0xe5, 0x2b, - 0xc8, 0xa7, 0x22, 0x2f, 0x78, 0x6d, 0x57, 0x87, 0xcb, 0xe1, 0xf4, 0x4d, - 0xf0, 0x29, 0x1a, 0xad, 0x7f, 0x8e, 0xae, 0x71, 0x0c, 0xaa, 0xd5, 0xcb, - 0x75, 0x44, 0xfd, 0x3e, 0x3a, 0xa8, 0xfc, 0x14, 0xdb, 0x16, 0x1e, 0xa3, - 0x1e, 0xcb, 0x41, 0xaa, 0xba, 0x2e, 0xcf, 0x51, 0xf5, 0x0e, 0xf0, 0x7b, - 0xe0, 0x77, 0xc0, 0xcf, 0x81, 0xe7, 0x71, 0x30, 0xd5, 0x67, 0x06, 0x23, - 0x3f, 0x7b, 0x16, 0xd3, 0x3f, 0x95, 0x3e, 0xf1, 0x47, 0xcb, 0xf9, 0xb3, - 0x8e, 0x12, 0xd8, 0x42, 0x7e, 0xf7, 0xe8, 0xe5, 0x7d, 0x61, 0x2d, 0xbc, - 0x49, 0x2c, 0xb8, 0x51, 0x34, 0xdf, 0x20, 0xe4, 0xe9, 0xb7, 0x8a, 0x86, - 0x9b, 0x85, 0xde, 0x4b, 0xbc, 0x5f, 0x1e, 0x58, 0x4b, 0xca, 0x1f, 0x0d, - 0xfa, 0x1f, 0x82, 0xa7, 0x1f, 0xd9, 0x67, 0x2c, 0x7b, 0x24, 0x23, 0xbb, - 0x2f, 0x23, 0xb3, 0xd4, 0x2f, 0xd1, 0x13, 0x6b, 0xf5, 0xf9, 0x1f, 0xac, - 0xff, 0x21, 0x62, 0x80, 0x7c, 0x73, 0x2a, 0x89, 0x9e, 0x5f, 0xab, 0xcf, - 0x7f, 0xb7, 0xbf, 0x42, 0xc5, 0xfe, 0x0e, 0xa3, 0xff, 0xb2, 0xd1, 0x8f, - 0xd7, 0x5f, 0x45, 0x95, 0x16, 0xef, 0x2a, 0x87, 0x4a, 0xbf, 0x6e, 0xda, - 0x88, 0x2f, 0xd9, 0x47, 0x95, 0xe6, 0x1c, 0x70, 0x3c, 0xc7, 0x79, 0x6f, - 0xa7, 0x65, 0x1b, 0xbe, 0x05, 0x59, 0xba, 0x6f, 0xba, 0xbe, 0x0f, 0xd2, - 0xb2, 0xfa, 0x3d, 0xa8, 0x4f, 0x97, 0x4b, 0xcb, 0x64, 0x67, 0x5a, 0x76, - 0xbe, 0x4d, 0xa6, 0xc7, 0x94, 0xd3, 0x99, 0x1e, 0xd3, 0x91, 0xcc, 0x98, - 0xdc, 0x68, 0x91, 0xf7, 0xbd, 0xcf, 0xc8, 0x86, 0x5d, 0xd7, 0x2a, 0xef, - 0xa0, 0xdb, 0xd3, 0xfd, 0xac, 0xec, 0x34, 0xe3, 0x5d, 0xf2, 0x30, 0x79, - 0xe7, 0xe6, 0xab, 0x7b, 0x00, 0xa7, 0xab, 0xd3, 0xf5, 0x2d, 0x79, 0x00, - 0x71, 0x42, 0xfa, 0x1c, 0xeb, 0x7e, 0x2c, 0x4a, 0x97, 0xa9, 0x7f, 0x50, - 0xcd, 0x51, 0xba, 0x0f, 0x4b, 0x32, 0x7d, 0xf8, 0xde, 0x98, 0x39, 0x5f, - 0x95, 0x91, 0xfd, 0x20, 0x23, 0x73, 0x9a, 0xfa, 0xd6, 0xa6, 0x65, 0xf5, - 0xdf, 0x47, 0x74, 0x37, 0xba, 0xdc, 0x59, 0x99, 0x72, 0xf7, 0x67, 0xca, - 0x65, 0x99, 0x72, 0x9f, 0xee, 0xe4, 0x77, 0x86, 0x3c, 0x1f, 0x9f, 0xa5, - 0x90, 0xdb, 0xf8, 0x48, 0x14, 0x6b, 0x90, 0x59, 0xf0, 0x63, 0x35, 0xc8, - 0xdf, 0x40, 0x52, 0x14, 0x4a, 0x9f, 0xac, 0xfa, 0x5b, 0xda, 0x8e, 0x47, - 0x3a, 0xf5, 0xfd, 0x6b, 0xb6, 0x28, 0xe7, 0x99, 0x41, 0x7d, 0xc5, 0xda, - 0x63, 0x1e, 0xf7, 0xf9, 0xab, 0x3e, 0x2c, 0x22, 0xe9, 0xaf, 0xfa, 0x4b, - 0xb1, 0x8a, 0x03, 0xaa, 0xde, 0x2f, 0x86, 0xdf, 0x01, 0xfd, 0x2f, 0x5f, - 0x7d, 0xd5, 0x3b, 0xc5, 0x74, 0x11, 0xf3, 0xbf, 0x23, 0xe1, 0x56, 0xf5, - 0x70, 0x9f, 0xd8, 0xaf, 0xe6, 0x90, 0x8e, 0xd5, 0x7d, 0xa4, 0x3f, 0x0f, - 0x2b, 0x53, 0x32, 0xed, 0x57, 0x2f, 0xee, 0xd4, 0x3e, 0xa9, 0x7b, 0x49, - 0x85, 0xcd, 0x7f, 0x73, 0xc4, 0xc7, 0x39, 0xf1, 0xfa, 0x7f, 0x21, 0x87, - 0xa8, 0xfa, 0x90, 0x32, 0x7b, 0xec, 0x72, 0x33, 0x56, 0xae, 0x67, 0x33, - 0xf6, 0x59, 0x3e, 0x8d, 0xd8, 0xce, 0xab, 0x3b, 0xf5, 0xe7, 0x70, 0x51, - 0xef, 0x45, 0xea, 0x0e, 0xa0, 0xeb, 0x09, 0x54, 0x96, 0x53, 0x03, 0x7a, - 0xc4, 0x34, 0xea, 0x5d, 0x4e, 0x1c, 0x51, 0x2f, 0xc0, 0x2d, 0xbc, 0xea, - 0x7d, 0x1d, 0xd1, 0x12, 0xdd, 0xdc, 0xa9, 0xef, 0x7f, 0x3e, 0x6f, 0x81, - 0x9a, 0x37, 0xae, 0xff, 0xae, 0x4e, 0xdd, 0x46, 0x77, 0xd7, 0x98, 0x7e, - 0x21, 0x27, 0x7e, 0xd6, 0x17, 0xc9, 0x19, 0x34, 0x67, 0x9f, 0xf8, 0xec, - 0x77, 0xa1, 0xbe, 0xf4, 0xfc, 0xdd, 0xd7, 0x99, 0xf6, 0x83, 0x53, 0x47, - 0xd9, 0xf6, 0x87, 0x3a, 0xf5, 0x3d, 0x96, 0x6d, 0x22, 0xf7, 0x6f, 0x92, - 0x98, 0x25, 0xd8, 0x26, 0x7a, 0xc1, 0x4f, 0xa5, 0xd3, 0xcc, 0x5e, 0xd5, - 0xf3, 0xf2, 0x68, 0xa7, 0xfe, 0x1c, 0x91, 0xc7, 0x62, 0x65, 0xc6, 0x12, - 0xf5, 0x5e, 0xaa, 0xe2, 0x0c, 0x1f, 0xee, 0x48, 0xf3, 0xb1, 0xaf, 0x02, - 0x73, 0xa6, 0x20, 0x4a, 0x58, 0x87, 0x32, 0x55, 0x7f, 0xa4, 0x8c, 0x1f, - 0x7e, 0xc1, 0xb4, 0xbf, 0xc1, 0xeb, 0x57, 0x73, 0x2b, 0x8d, 0xdf, 0x7e, - 0xb9, 0x93, 0xdf, 0x43, 0x73, 0x9d, 0xfb, 0xd5, 0x7a, 0xaa, 0x38, 0x09, - 0x63, 0xf6, 0x51, 0xd5, 0xdf, 0x2c, 0x33, 0x17, 0xaf, 0x76, 0x8e, 0xdc, - 0xad, 0xd2, 0xf7, 0xad, 0xa3, 0x9d, 0xf6, 0xfb, 0x96, 0xf6, 0x17, 0xef, - 0x7d, 0xc2, 0xba, 0x5d, 0x6e, 0xd6, 0x2d, 0xad, 0xff, 0xe1, 0x27, 0xe8, - 0x5f, 0x91, 0x59, 0x67, 0xdd, 0x0f, 0x47, 0xd7, 0xd8, 0x7e, 0xe4, 0x8f, - 0x93, 0x57, 0x62, 0xcb, 0xe3, 0x88, 0x8c, 0xcf, 0xdc, 0x94, 0x2e, 0x73, - 0x37, 0xb0, 0x7c, 0x7f, 0xec, 0xee, 0xe7, 0xda, 0x3f, 0x43, 0x2b, 0x9d, - 0xb9, 0xea, 0x3d, 0x58, 0xef, 0xa0, 0x65, 0xa8, 0x83, 0x36, 0x25, 0x5d, - 0x88, 0x40, 0xeb, 0x88, 0x6f, 0xc7, 0x1c, 0x81, 0x6e, 0x1a, 0xcc, 0x42, - 0xda, 0x45, 0x7c, 0x4b, 0x46, 0x5a, 0x6e, 0x4a, 0xb8, 0x8d, 0xae, 0x87, - 0xdf, 0xb5, 0x75, 0x6d, 0x1a, 0x74, 0x42, 0x8e, 0x78, 0xc4, 0xbb, 0x59, - 0xe9, 0x0f, 0x7a, 0xf7, 0xf2, 0x3c, 0xa2, 0x5c, 0x36, 0x62, 0xef, 0x99, - 0xe4, 0xf3, 0xc5, 0x97, 0xb4, 0x50, 0x50, 0xf6, 0x06, 0xcb, 0x29, 0x00, - 0x14, 0x0a, 0x51, 0x59, 0xf5, 0x92, 0x98, 0x53, 0xf5, 0x9e, 0x9e, 0x07, - 0xde, 0x57, 0xa7, 0x77, 0xe9, 0x77, 0x07, 0xe3, 0xcf, 0x43, 0x60, 0x59, - 0x25, 0xc5, 0xd7, 0x7f, 0x89, 0x1c, 0xeb, 0xaa, 0xfe, 0xca, 0xb6, 0x49, - 0xfb, 0xed, 0xe5, 0x27, 0x2d, 0x33, 0x6f, 0xc5, 0xc7, 0x1f, 0xab, 0xf9, - 0x5b, 0xb2, 0x9b, 0x1c, 0x41, 0x2e, 0xe3, 0xe1, 0xf7, 0xfa, 0xd0, 0x5d, - 0xd7, 0xa5, 0x3f, 0xef, 0x0c, 0xec, 0x99, 0x8c, 0xfe, 0xf2, 0xdb, 0x1c, - 0x0f, 0xfa, 0x3e, 0x89, 0xba, 0x2f, 0x82, 0x67, 0x45, 0xac, 0x97, 0x8d, - 0x38, 0x31, 0xea, 0xad, 0x60, 0xea, 0x88, 0x7a, 0xa7, 0x30, 0x75, 0x46, - 0xbd, 0x93, 0x40, 0x73, 0x5c, 0xee, 0x3d, 0xc3, 0x59, 0x5f, 0x30, 0xe7, - 0x81, 0xf7, 0x86, 0x07, 0x6d, 0xb1, 0x8d, 0xfc, 0x74, 0x97, 0xfe, 0x8c, - 0xdf, 0xe7, 0xed, 0x4e, 0xa0, 0x27, 0x1c, 0xe7, 0x0b, 0xc4, 0xf9, 0x42, - 0x47, 0xdb, 0x51, 0xef, 0x30, 0x7a, 0x5c, 0x9d, 0xc5, 0x36, 0x83, 0xe5, - 0x51, 0x6f, 0xa9, 0xa9, 0xb5, 0x84, 0xa9, 0xcb, 0x3d, 0x28, 0xf6, 0x0d, - 0xbb, 0xae, 0xe4, 0xbd, 0xfa, 0x56, 0xac, 0xfe, 0x14, 0xda, 0x9f, 0x0d, - 0x8b, 0xf2, 0x66, 0xd4, 0x9b, 0x42, 0xa9, 0xaa, 0xd7, 0xe1, 0xa8, 0xd4, - 0x58, 0xd9, 0x36, 0x4c, 0x34, 0xb4, 0xc8, 0x20, 0xd7, 0xc4, 0xfc, 0x9f, - 0xe9, 0xd2, 0x9f, 0xd9, 0x16, 0x39, 0x2a, 0xd0, 0x62, 0xf7, 0x5e, 0xf4, - 0xc1, 0xa5, 0xfa, 0xe0, 0x6a, 0x14, 0x16, 0x7a, 0xd0, 0x98, 0x9d, 0x47, - 0xe7, 0x08, 0xdc, 0x6c, 0x96, 0xf2, 0x49, 0x29, 0x86, 0xdd, 0xf1, 0x08, - 0xdf, 0xb4, 0xb9, 0x95, 0x6e, 0x8a, 0x2d, 0x39, 0x95, 0x0e, 0x3d, 0x80, - 0xf6, 0xde, 0xd5, 0xf2, 0xdf, 0xe3, 0xd6, 0x31, 0x01, 0xf2, 0x5c, 0xd1, - 0x20, 0xde, 0xcc, 0xf0, 0x51, 0xff, 0x93, 0xbc, 0x9e, 0x4e, 0xae, 0x99, - 0x7b, 0x9d, 0xc3, 0xbd, 0xbe, 0x48, 0x1c, 0xd4, 0xbd, 0xf6, 0x79, 0xab, - 0x9e, 0xd5, 0x6b, 0xc2, 0xeb, 0x78, 0x7d, 0x97, 0x3e, 0x9f, 0xa3, 0xd7, - 0x44, 0xcf, 0x04, 0xe7, 0xf1, 0xe8, 0x5d, 0xd8, 0x43, 0xf1, 0xf5, 0x07, - 0xb0, 0x9a, 0x28, 0xfb, 0x27, 0x32, 0x9e, 0x86, 0xe8, 0x4e, 0xdb, 0x9e, - 0xcd, 0x36, 0xfe, 0xee, 0x7e, 0xb3, 0xc6, 0xb1, 0x8d, 0xa7, 0x51, 0x60, - 0xd8, 0x5e, 0x2b, 0xdf, 0xf5, 0xf4, 0x19, 0xf9, 0x11, 0xce, 0x08, 0x97, - 0x29, 0x30, 0x6b, 0xfc, 0x24, 0xca, 0xf0, 0xbb, 0xdc, 0xee, 0xe7, 0xa1, - 0x6d, 0xf1, 0x4c, 0x08, 0x4b, 0xad, 0x86, 0x28, 0x10, 0x51, 0x2f, 0xc7, - 0xf2, 0x9e, 0x6c, 0x5e, 0x53, 0xdc, 0x3c, 0xdd, 0xbf, 0xb8, 0xea, 0x63, - 0xd8, 0x73, 0x7e, 0x33, 0xed, 0x13, 0x55, 0x7f, 0xe8, 0x7e, 0x01, 0x33, - 0x88, 0xf1, 0x96, 0xe3, 0x0e, 0xc5, 0xeb, 0xcf, 0x76, 0x94, 0x57, 0x6a, - 0x0a, 0x53, 0x97, 0xfb, 0xf9, 0xe1, 0xac, 0xab, 0x79, 0xc4, 0x85, 0x55, - 0xaf, 0x7c, 0xb2, 0xe6, 0x41, 0xad, 0xf9, 0xf8, 0x27, 0x6b, 0x5e, 0xc3, - 0xb6, 0xd7, 0x3b, 0x99, 0xd3, 0x39, 0xbe, 0xc2, 0x45, 0x93, 0x67, 0x91, - 0xaf, 0x72, 0x7a, 0x79, 0x0b, 0xec, 0xe7, 0xc5, 0xf4, 0x6f, 0xe4, 0x9b, - 0xb4, 0xe0, 0x81, 0x4a, 0xe2, 0x5a, 0xb8, 0x8e, 0xef, 0x70, 0x1d, 0xfe, - 0xa9, 0x4c, 0x85, 0xcf, 0xb9, 0xdc, 0x99, 0xeb, 0xdc, 0xbb, 0xe1, 0xa7, - 0x13, 0xa2, 0x7e, 0xbf, 0xce, 0x29, 0x59, 0xee, 0xca, 0x75, 0xed, 0x1d, - 0xf8, 0x69, 0x49, 0xba, 0xde, 0x97, 0x3d, 0x1e, 0x51, 0xf5, 0x1a, 0xfa, - 0x71, 0x71, 0xb1, 0xe0, 0x0f, 0xaa, 0xbe, 0x77, 0xd5, 0xeb, 0x1e, 0x91, - 0xd5, 0xe8, 0x29, 0xa3, 0x7f, 0x74, 0x04, 0x33, 0x69, 0xe0, 0x63, 0x7b, - 0x7f, 0xfe, 0x37, 0x3d, 0xe1, 0x9a, 0xaa, 0x7e, 0xf5, 0xcf, 0xf7, 0xe0, - 0x6a, 0xd3, 0x83, 0x53, 0xfe, 0xcf, 0x3d, 0xb8, 0x5a, 0xf5, 0x00, 0xcb, - 0x6c, 0xf3, 0xc1, 0xfc, 0xdd, 0x91, 0x3a, 0x43, 0xd9, 0xba, 0xf2, 0xe7, - 0x6d, 0x49, 0xb5, 0xf7, 0xa4, 0x8a, 0xef, 0x5b, 0xd6, 0x69, 0x7f, 0x8f, - 0x3e, 0x22, 0x46, 0xe6, 0xb7, 0x26, 0x93, 0xac, 0x8b, 0x84, 0xaf, 0x78, - 0xfa, 0x72, 0xc4, 0xc8, 0xce, 0xad, 0x2e, 0xc4, 0xc8, 0x2a, 0xde, 0x7d, - 0x14, 0x91, 0x07, 0xdf, 0x71, 0xdd, 0xe8, 0x77, 0x1e, 0xec, 0x42, 0x1e, - 0x47, 0x04, 0xbe, 0xe9, 0xd3, 0x10, 0x21, 0x5b, 0x1c, 0x21, 0x67, 0x21, - 0xee, 0xed, 0x70, 0x48, 0x8b, 0x23, 0xe3, 0x41, 0x59, 0xf5, 0x6e, 0x9e, - 0xac, 0x7a, 0x1b, 0x78, 0x0b, 0x38, 0xca, 0xfb, 0xbd, 0x10, 0x7d, 0x9b, - 0xac, 0xce, 0x33, 0xac, 0xa1, 0x3c, 0xbd, 0xa4, 0xa1, 0xcc, 0x5a, 0x58, - 0xb5, 0xa0, 0xba, 0x79, 0x96, 0xcd, 0x9e, 0xc7, 0xd6, 0x8d, 0x9c, 0x8d, - 0xf4, 0xbb, 0xc7, 0x9d, 0xeb, 0x74, 0x1c, 0xd1, 0x20, 0xdd, 0xea, 0x8d, - 0xd0, 0xdd, 0xfc, 0x99, 0x23, 0xf9, 0x96, 0x54, 0x7d, 0xa4, 0xdf, 0xc9, - 0xf2, 0x98, 0x2e, 0x5a, 0x37, 0x9e, 0xef, 0xd7, 0x9e, 0x1e, 0xe3, 0xaa, - 0x5f, 0x48, 0x7e, 0x11, 0xa8, 0x64, 0x6f, 0xd9, 0xc5, 0x33, 0xf4, 0x3e, - 0x7f, 0xef, 0x97, 0x7f, 0xb4, 0xc7, 0xd4, 0xdf, 0x59, 0xaa, 0x47, 0x5e, - 0x83, 0xc9, 0x4f, 0xff, 0x2c, 0x3f, 0x41, 0x8f, 0xbf, 0x9f, 0xd4, 0x85, - 0xbc, 0x8d, 0x27, 0xe8, 0xf5, 0x9f, 0x90, 0x4e, 0x9d, 0x50, 0xee, 0x1c, - 0x60, 0x0f, 0xf2, 0x2e, 0x3d, 0x21, 0x9f, 0x3f, 0x73, 0x3e, 0x50, 0xa2, - 0xe3, 0x8f, 0x22, 0x44, 0x1c, 0x9c, 0x3f, 0xd5, 0xac, 0x53, 0x39, 0xc6, - 0x56, 0x66, 0x74, 0x05, 0x69, 0x9d, 0xf4, 0x1d, 0x5c, 0x66, 0x90, 0xab, - 0xd2, 0xb9, 0x46, 0x27, 0xfd, 0x3d, 0xa4, 0x79, 0x86, 0xd6, 0x1a, 0x9a, - 0x95, 0xd1, 0xd7, 0xf1, 0x45, 0xad, 0x89, 0x16, 0x38, 0xaf, 0xc2, 0xd4, - 0x79, 0x8a, 0xd1, 0xad, 0x36, 0xf9, 0xb5, 0x66, 0xfe, 0x1b, 0xe1, 0x4d, - 0x39, 0xbf, 0xc9, 0xf4, 0x4b, 0xda, 0xfa, 0xd0, 0x44, 0xcb, 0x49, 0xaf, - 0x6d, 0x3a, 0xad, 0xeb, 0x4f, 0xf7, 0xd3, 0x91, 0xe1, 0xcd, 0x7b, 0x3b, - 0x33, 0x72, 0x69, 0x64, 0xd2, 0xc8, 0x74, 0xdf, 0xa4, 0xa9, 0xdf, 0xad, - 0x62, 0x46, 0x9d, 0xd7, 0x64, 0xe8, 0x62, 0x43, 0x97, 0xaa, 0x1a, 0x2c, - 0x23, 0x67, 0xbb, 0x3f, 0xd2, 0x8e, 0xbe, 0xc3, 0x5a, 0x8a, 0x2e, 0x35, - 0xf3, 0xa5, 0xef, 0xc4, 0x4c, 0xb3, 0x0d, 0xcd, 0x33, 0x65, 0x0b, 0xa9, - 0x46, 0xe9, 0x16, 0xdb, 0xfa, 0x5a, 0x8c, 0xd1, 0x72, 0xca, 0x65, 0xe3, - 0xd3, 0x63, 0x49, 0xaf, 0x45, 0xb9, 0xa1, 0x15, 0x99, 0xf9, 0x5b, 0x6a, - 0xe6, 0xb4, 0x50, 0x7d, 0xae, 0xa1, 0xe7, 0xae, 0xd6, 0xe4, 0x2d, 0x55, - 0x79, 0x0e, 0xb5, 0x26, 0x23, 0x75, 0x35, 0x9a, 0xbc, 0x46, 0xdb, 0xf8, - 0x1b, 0x55, 0x4a, 0x7f, 0xff, 0x88, 0xe9, 0x52, 0xd2, 0xe7, 0x77, 0xa9, - 0xad, 0x1c, 0x63, 0x99, 0xa1, 0x2d, 0x66, 0xac, 0x2c, 0x29, 0xb0, 0xf1, - 0xe9, 0xef, 0x8a, 0x31, 0x37, 0x32, 0xc7, 0x05, 0x99, 0xb5, 0x9b, 0x66, - 0xe4, 0x5e, 0x53, 0xe7, 0x64, 0xd3, 0x4e, 0x6d, 0x46, 0x53, 0xf7, 0xad, - 0x36, 0xa3, 0x2d, 0xb2, 0x49, 0x78, 0x48, 0xe4, 0x91, 0xa8, 0x22, 0x59, - 0xb5, 0x86, 0x10, 0xec, 0x88, 0x66, 0x72, 0x35, 0x87, 0xa3, 0xe1, 0xd4, - 0x99, 0x24, 0xcf, 0x6c, 0x22, 0xc7, 0x99, 0x4d, 0x78, 0xba, 0xf8, 0x39, - 0xb3, 0x87, 0xf2, 0x5a, 0xb6, 0x07, 0xa3, 0xdb, 0x42, 0x67, 0x05, 0x53, - 0x7d, 0xdb, 0x43, 0x09, 0x2a, 0x69, 0x89, 0xed, 0x88, 0xc7, 0xa2, 0xa1, - 0x68, 0xaa, 0x2b, 0x14, 0x4a, 0xf4, 0x84, 0x43, 0x3b, 0x6b, 0xcf, 0x0d, - 0x0e, 0x07, 0xc9, 0xd3, 0x12, 0x8b, 0x46, 0x43, 0x7d, 0xa9, 0x70, 0x2c, - 0x4a, 0x62, 0x25, 0xc9, 0x95, 0xad, 0x24, 0x5a, 0x49, 0xb6, 0xce, 0x04, - 0x5a, 0xc9, 0x6a, 0x6d, 0xe5, 0xc4, 0x1a, 0x30, 0x6b, 0xda, 0xc1, 0xb4, - 0x93, 0x58, 0x43, 0x72, 0x0d, 0xa3, 0x9d, 0x2a, 0xd6, 0x0c, 0xf5, 0x85, - 0x96, 0xf6, 0xf5, 0x85, 0x92, 0xc9, 0xf0, 0xd6, 0x70, 0x24, 0x9c, 0xda, - 0xbd, 0x36, 0xd6, 0x1f, 0xea, 0x4a, 0xc4, 0x86, 0xc3, 0xfd, 0x68, 0xb1, - 0xb4, 0x2d, 0xb4, 0x7b, 0x6b, 0x2c, 0x98, 0xe8, 0x5f, 0x1e, 0x4e, 0xee, - 0x08, 0x27, 0x93, 0xed, 0xe1, 0x64, 0x2a, 0x14, 0x85, 0x40, 0xa0, 0xa6, - 0x76, 0xd4, 0xdd, 0xce, 0x75, 0xb7, 0xa3, 0xee, 0xf6, 0x35, 0xad, 0xe4, - 0xc0, 0x83, 0x93, 0xed, 0x48, 0x2a, 0x21, 0x04, 0x8e, 0x76, 0x96, 0x80, - 0x6d, 0xa7, 0x92, 0xf6, 0x60, 0xb4, 0x3f, 0x11, 0x0b, 0xf7, 0xd7, 0x05, - 0xe3, 0xf1, 0xba, 0xa5, 0xe8, 0xef, 0x30, 0xda, 0x6b, 0xa2, 0xf9, 0xa3, - 0xf3, 0xe3, 0xf1, 0x48, 0xb8, 0x2f, 0xc8, 0x83, 0x99, 0x91, 0xd6, 0x69, - 0x0f, 0x0f, 0x84, 0xfa, 0x76, 0xf7, 0x45, 0x42, 0x2d, 0xc1, 0x48, 0x64, - 0x6b, 0xb0, 0xef, 0xbc, 0x64, 0x13, 0x4d, 0x3c, 0x59, 0x29, 0xbb, 0xa8, - 0x2f, 0x16, 0x45, 0x7f, 0x53, 0x75, 0x2d, 0x4c, 0x77, 0xa5, 0xec, 0xa2, - 0x6d, 0x89, 0x60, 0x7c, 0x7b, 0xb8, 0x2f, 0x59, 0xd7, 0x12, 0x8c, 0x0e, - 0x07, 0x51, 0xe1, 0x94, 0x71, 0x44, 0xb1, 0x48, 0x2c, 0xb1, 0x32, 0x1c, - 0x49, 0x85, 0x12, 0x27, 0x97, 0x77, 0x04, 0x53, 0x89, 0xf0, 0xae, 0x26, - 0x9a, 0xf9, 0x77, 0xe5, 0xa3, 0xaa, 0x2a, 0x1b, 0xab, 0xda, 0x15, 0x0c, - 0x47, 0x53, 0xe3, 0x4b, 0x62, 0x4a, 0x52, 0x3a, 0x56, 0xb2, 0x1e, 0x6b, - 0xde, 0x44, 0x93, 0x32, 0x82, 0x58, 0xb2, 0x6e, 0xd9, 0x50, 0x38, 0xd2, - 0x3f, 0xa3, 0x67, 0xc5, 0xfa, 0xee, 0xd6, 0xce, 0xb5, 0x4d, 0x54, 0x34, - 0x5a, 0x16, 0xed, 0x8f, 0x84, 0x9a, 0xa8, 0xd8, 0x9e, 0xd9, 0xba, 0x2c, - 0x1c, 0xed, 0xe7, 0x3e, 0x8d, 0xd4, 0xcf, 0x33, 0x55, 0xb7, 0xa2, 0x3f, - 0x9c, 0x0a, 0x6e, 0x65, 0xf5, 0xb2, 0xd1, 0x82, 0xee, 0x50, 0x44, 0x6f, - 0x35, 0x7b, 0xcb, 0x5a, 0x12, 0x0f, 0x46, 0xcd, 0x56, 0x1d, 0x5b, 0x0a, - 0xb2, 0xa8, 0xae, 0xef, 0x94, 0x93, 0x48, 0xba, 0x31, 0x4d, 0xd1, 0x6d, - 0x6a, 0x00, 0x5c, 0xc1, 0x09, 0x95, 0x07, 0xf0, 0xc8, 0x54, 0xee, 0xcb, - 0xc8, 0x86, 0x52, 0xe1, 0x08, 0xcf, 0x5d, 0xc2, 0x36, 0xd4, 0x4c, 0x5e, - 0x13, 0xcd, 0xca, 0x64, 0x0e, 0xe3, 0xb4, 0xd4, 0xb5, 0x6c, 0x8f, 0x25, - 0x42, 0x31, 0x35, 0x7f, 0xa1, 0xc4, 0x8c, 0x95, 0x89, 0xe0, 0x8e, 0xcc, - 0x8e, 0x6a, 0xa2, 0xf2, 0xbf, 0xa3, 0x6b, 0x9f, 0x1e, 0x25, 0xc5, 0xb9, - 0x58, 0x31, 0x1c, 0x8a, 0x8e, 0x9a, 0x7e, 0x25, 0xe8, 0x88, 0xf1, 0xdc, - 0x18, 0xd9, 0xcc, 0xd1, 0x32, 0x3e, 0xb1, 0x33, 0x3a, 0xa3, 0x2b, 0x63, - 0x7d, 0x43, 0x49, 0x7d, 0xb2, 0xd3, 0xe7, 0xc9, 0xbe, 0x52, 0x19, 0x55, - 0xfb, 0x24, 0x66, 0x32, 0x57, 0x25, 0x62, 0x43, 0xf1, 0x26, 0x5a, 0x38, - 0x56, 0x12, 0x48, 0x84, 0x42, 0x9d, 0x5b, 0x93, 0xa1, 0xc4, 0x30, 0xc6, - 0xd6, 0x19, 0x5d, 0x15, 0x89, 0x6d, 0x0d, 0x46, 0xda, 0x83, 0xbb, 0x63, - 0x43, 0xa9, 0x91, 0x66, 0xa6, 0xfe, 0xfd, 0x72, 0x4d, 0x34, 0x67, 0xb4, - 0x42, 0xd0, 0x6e, 0x1a, 0xea, 0x46, 0x19, 0x8a, 0x8e, 0x60, 0x34, 0xb8, - 0x8d, 0x8b, 0xcc, 0xfd, 0x87, 0x8b, 0xb0, 0x6d, 0x69, 0x8d, 0x0e, 0xc4, - 0xc6, 0xf4, 0xff, 0x13, 0xca, 0xa4, 0xed, 0x51, 0x13, 0xd5, 0x8e, 0x2e, - 0x17, 0x8e, 0xc6, 0x87, 0x52, 0x3b, 0x42, 0xa9, 0xed, 0xb1, 0xfe, 0xba, - 0x65, 0xc1, 0x24, 0x2a, 0x47, 0x7a, 0xc4, 0x1a, 0xda, 0x37, 0xdb, 0x18, - 0x7d, 0xde, 0xe1, 0xb1, 0x84, 0xee, 0xce, 0xac, 0x93, 0xab, 0x8d, 0xa9, - 0xb2, 0xe6, 0x13, 0x74, 0x3b, 0x14, 0x9f, 0x99, 0x9d, 0xba, 0xf6, 0xbe, - 0xd8, 0x8e, 0xba, 0xc4, 0x8e, 0x64, 0xa4, 0xee, 0x5c, 0xd8, 0xda, 0xba, - 0x31, 0x36, 0x7c, 0xc6, 0x28, 0x23, 0xdf, 0x44, 0xd5, 0x9f, 0x5c, 0xc0, - 0xd6, 0x9b, 0xc5, 0x9f, 0xa8, 0xfd, 0x77, 0x2d, 0x7c, 0x13, 0xad, 0xfc, - 0xc4, 0x0a, 0x4e, 0xe2, 0x03, 0x66, 0x8c, 0xde, 0x38, 0x8d, 0xff, 0xdb, - 0x7a, 0x78, 0xcf, 0x7d, 0x52, 0x51, 0x3e, 0xfd, 0x6a, 0x72, 0x03, 0xc1, - 0xc4, 0xb6, 0x10, 0x4e, 0x56, 0xe5, 0x27, 0x15, 0x69, 0xa2, 0x69, 0xed, - 0xfd, 0xc1, 0xc8, 0x70, 0xf8, 0xbc, 0x3a, 0xd8, 0x97, 0x58, 0x4a, 0xb9, - 0x86, 0xba, 0x15, 0xd1, 0xbe, 0x48, 0x2c, 0x09, 0x33, 0xd3, 0x12, 0x09, - 0x26, 0x95, 0xcd, 0x1f, 0xab, 0xd3, 0x8a, 0xc9, 0x4d, 0x18, 0x79, 0xe5, - 0x38, 0xf2, 0x8e, 0xd0, 0x8e, 0xad, 0x46, 0x21, 0x04, 0x95, 0x8a, 0x71, - 0x54, 0xba, 0xc3, 0xdb, 0xa2, 0xc1, 0xd4, 0x50, 0x42, 0x59, 0x4f, 0x76, - 0xd1, 0x75, 0x11, 0x2c, 0x31, 0x4c, 0x4a, 0x30, 0xd1, 0x1d, 0x1a, 0x1c, - 0x0a, 0x45, 0xfb, 0x20, 0x29, 0xb4, 0x4b, 0x74, 0x73, 0xd3, 0x6c, 0x59, - 0xad, 0x91, 0x48, 0x68, 0x5b, 0x30, 0xa2, 0x57, 0x6e, 0xc5, 0xae, 0xbe, - 0x50, 0x5c, 0x2f, 0xf8, 0x8c, 0x71, 0x74, 0x12, 0xdb, 0x86, 0x76, 0x60, - 0xec, 0x36, 0xad, 0x22, 0xbb, 0x16, 0x7c, 0x9f, 0xda, 0x8a, 0x95, 0xb6, - 0xcc, 0xb5, 0xb1, 0xee, 0xa1, 0xbe, 0xed, 0x7a, 0xaf, 0xda, 0xca, 0xf9, - 0x6c, 0x2a, 0x9d, 0x5b, 0xcf, 0x55, 0x0e, 0xa6, 0xc2, 0x96, 0xd7, 0x1d, - 0xea, 0x1b, 0x4a, 0x60, 0x0f, 0x9d, 0xa4, 0x88, 0xb6, 0xe1, 0x7c, 0x46, - 0x46, 0xf2, 0x12, 0xa1, 0x01, 0xf6, 0x18, 0xe8, 0xc6, 0x70, 0x4c, 0x7b, - 0x68, 0xbd, 0x88, 0xb6, 0x2a, 0x26, 0x8d, 0xa3, 0xae, 0xbb, 0xd6, 0x44, - 0x13, 0xb4, 0x4c, 0x19, 0xf5, 0xa5, 0x89, 0x44, 0x70, 0x37, 0xef, 0x9b, - 0x26, 0x5a, 0x3f, 0x5e, 0x76, 0xf3, 0x58, 0x1f, 0xd0, 0x3c, 0xce, 0x44, - 0x8c, 0x93, 0xa5, 0xc2, 0xae, 0x02, 0x5b, 0x9d, 0x5c, 0x1d, 0x79, 0x4f, - 0xc8, 0x68, 0xa2, 0x8e, 0x13, 0x72, 0xfe, 0x8f, 0x2d, 0xba, 0xbb, 0x97, - 0xb7, 0x9d, 0xdd, 0xba, 0x36, 0x40, 0x8e, 0xc0, 0xa6, 0xae, 0x15, 0x54, - 0x70, 0xc2, 0x3e, 0xa7, 0x5c, 0xfb, 0x19, 0x23, 0xd1, 0x43, 0xb2, 0x07, - 0xc1, 0x54, 0x0f, 0xa2, 0x2c, 0x47, 0x0f, 0x87, 0x75, 0x4e, 0x7e, 0x22, - 0xe4, 0xea, 0x59, 0x43, 0xae, 0x9e, 0x35, 0xad, 0x2b, 0x57, 0x22, 0xe0, - 0xea, 0x59, 0xa3, 0x04, 0x6b, 0x58, 0x60, 0xf5, 0x20, 0xce, 0xc3, 0xa3, - 0x9d, 0xb3, 0x39, 0x2e, 0xeb, 0x59, 0xb3, 0x19, 0xda, 0xcc, 0xb4, 0x73, - 0x1d, 0xed, 0x4a, 0xb5, 0x5d, 0xab, 0x72, 0x18, 0xd7, 0x03, 0x25, 0x64, - 0x70, 0xbe, 0x5b, 0x11, 0xd5, 0x54, 0xbb, 0x2a, 0xda, 0xbe, 0x99, 0xd9, - 0xcd, 0x6b, 0xd4, 0x13, 0xf1, 0x5f, 0xcf, 0x66, 0x34, 0xba, 0x59, 0xa9, - 0x88, 0xcd, 0x64, 0x6d, 0x66, 0x55, 0x3c, 0xda, 0x99, 0x85, 0x18, 0x8a, - 0xce, 0xcd, 0x6b, 0x38, 0xed, 0x00, 0xe1, 0x0c, 0x96, 0xa0, 0x59, 0xd7, - 0xe6, 0x76, 0x95, 0xed, 0x64, 0xca, 0xf9, 0xe8, 0x52, 0x2f, 0xc2, 0xd6, - 0xde, 0x56, 0xf2, 0xf5, 0x8e, 0x3d, 0x14, 0x45, 0xbd, 0xe3, 0xec, 0x49, - 0x8f, 0xf6, 0x18, 0x33, 0xea, 0xeb, 0xeb, 0x33, 0xfc, 0x1c, 0xf0, 0x39, - 0x23, 0xbc, 0x2d, 0x31, 0x4a, 0x32, 0xd7, 0x9e, 0x98, 0x67, 0x4f, 0xcc, - 0xb7, 0x27, 0x16, 0xd8, 0x13, 0x0b, 0xed, 0x89, 0x45, 0xf6, 0x44, 0x83, - 0x3d, 0xd1, 0x68, 0xeb, 0x8d, 0xbd, 0x99, 0xb9, 0xf6, 0x6e, 0xce, 0xb3, - 0xf1, 0xf3, 0x6d, 0xfc, 0x02, 0x1b, 0xbf, 0xd0, 0xc6, 0x2f, 0xb2, 0xf1, - 0x0d, 0x36, 0xbe, 0x71, 0xa4, 0x81, 0x95, 0x91, 0xe0, 0xb6, 0x24, 0xe5, - 0x8d, 0xf2, 0xa2, 0x54, 0x1c, 0x1c, 0xc7, 0x5b, 0x93, 0x2b, 0xa8, 0xef, - 0x09, 0x39, 0x9a, 0xb6, 0x07, 0xb7, 0x86, 0x22, 0x94, 0x15, 0x34, 0x81, - 0x36, 0x59, 0xc1, 0xfe, 0x7e, 0x9a, 0x88, 0xc7, 0xf8, 0x01, 0x04, 0x39, - 0x83, 0x03, 0x88, 0x60, 0xc9, 0xab, 0x08, 0xef, 0x56, 0xed, 0xbc, 0xfa, - 0x29, 0x3b, 0x68, 0x8c, 0x50, 0x92, 0xc4, 0x56, 0x2a, 0xe4, 0x90, 0x6a, - 0xd9, 0x50, 0x2a, 0x15, 0x8b, 0x76, 0x25, 0xd0, 0x09, 0x28, 0xb8, 0xb6, - 0x86, 0x06, 0x10, 0x51, 0x41, 0xa4, 0xa8, 0xbd, 0xac, 0x6b, 0x6b, 0x0c, - 0x9a, 0x3b, 0x40, 0x55, 0x84, 0x4a, 0xae, 0xbe, 0x20, 0x5c, 0x61, 0x3f, - 0x79, 0x35, 0xb5, 0xdd, 0x6e, 0x20, 0xe1, 0x60, 0x9d, 0xf2, 0xfa, 0x46, - 0x5d, 0x8c, 0xdc, 0x7d, 0xa6, 0x26, 0x27, 0xee, 0x08, 0xc1, 0x04, 0x15, - 0xb0, 0x95, 0x0f, 0xd9, 0xca, 0x95, 0xaa, 0x0c, 0x9b, 0x7b, 0x36, 0x17, - 0x02, 0x72, 0xf4, 0xc1, 0x19, 0x52, 0x0e, 0x3f, 0x55, 0x9c, 0xbd, 0x34, - 0x45, 0xf9, 0x99, 0x44, 0x4b, 0x6c, 0x28, 0x9a, 0x62, 0x61, 0x26, 0x8a, - 0x67, 0x21, 0x12, 0x81, 0x44, 0x30, 0x9a, 0xc4, 0x28, 0x76, 0xa0, 0x23, - 0xa8, 0x08, 0xa1, 0x7b, 0x52, 0x15, 0xa0, 0x62, 0x73, 0xe1, 0x48, 0x2e, - 0x53, 0x83, 0xd4, 0x03, 0x44, 0xf7, 0x4c, 0x6b, 0xce, 0x3e, 0x55, 0xe3, - 0xe4, 0xbe, 0x44, 0x28, 0x98, 0x1a, 0xeb, 0x94, 0x39, 0x16, 0x21, 0x47, - 0x7f, 0x78, 0x60, 0x80, 0xdc, 0xfd, 0x31, 0x15, 0x9e, 0x92, 0x08, 0x51, - 0x56, 0xc8, 0xc4, 0xe2, 0xe4, 0x49, 0x73, 0xad, 0x51, 0xb2, 0x42, 0xd1, - 0x7e, 0x88, 0xa2, 0xfd, 0xc9, 0xb3, 0xc2, 0xa9, 0xed, 0xe4, 0x0c, 0x71, - 0xc8, 0x49, 0xfe, 0x01, 0x84, 0xf3, 0xe3, 0x56, 0x9c, 0x5c, 0xb6, 0x9b, - 0xe7, 0x9c, 0xb2, 0x59, 0x43, 0x85, 0xa0, 0x54, 0x04, 0x36, 0x9c, 0xdc, - 0xae, 0x7c, 0x27, 0x3b, 0x45, 0x25, 0x77, 0x0e, 0x28, 0x59, 0xee, 0xc0, - 0x48, 0x94, 0xda, 0x4f, 0x39, 0x2a, 0xc5, 0x7e, 0xb5, 0xb5, 0x9f, 0xdc, - 0x2a, 0x81, 0xdc, 0xfc, 0x01, 0xee, 0x62, 0x20, 0xbc, 0x23, 0xb4, 0x36, - 0x18, 0x8d, 0x25, 0xc9, 0x33, 0x30, 0x14, 0x89, 0xe8, 0xb0, 0x8a, 0x26, - 0xc3, 0x7c, 0x8d, 0xea, 0xc7, 0x4a, 0x5b, 0x0d, 0xe5, 0x27, 0x0a, 0x47, - 0x5d, 0x3a, 0xb3, 0x95, 0x54, 0xad, 0x5b, 0x41, 0x86, 0xed, 0x08, 0x26, - 0xcf, 0x43, 0x93, 0x13, 0x38, 0x63, 0xe4, 0xae, 0x97, 0x5e, 0x46, 0x2f, - 0xb2, 0x5b, 0x82, 0x89, 0x50, 0xaa, 0x0b, 0x03, 0x51, 0x25, 0x8b, 0x39, - 0x07, 0xfe, 0xb6, 0x15, 0xb7, 0x9b, 0x5d, 0x2b, 0x63, 0x09, 0xbd, 0x3e, - 0x79, 0x26, 0x17, 0xfb, 0x3d, 0x94, 0x48, 0x52, 0x16, 0x27, 0xd9, 0xca, - 0x50, 0x11, 0x73, 0xe9, 0x79, 0xe0, 0x2b, 0xc9, 0x8a, 0xa8, 0x6e, 0x6c, - 0x54, 0x66, 0x77, 0x2a, 0x98, 0x48, 0x91, 0x47, 0x65, 0xeb, 0x86, 0x73, - 0xd8, 0x91, 0xa5, 0x97, 0x27, 0x97, 0x13, 0xbc, 0x0c, 0x3c, 0x25, 0x34, - 0x11, 0xa9, 0x95, 0x7a, 0xa6, 0x4e, 0x34, 0xeb, 0xfe, 0x93, 0x8a, 0x54, - 0x37, 0xcd, 0x1c, 0xac, 0x0e, 0x85, 0xb7, 0x6d, 0x4f, 0xa9, 0x7a, 0x56, - 0x83, 0x8b, 0x70, 0x2a, 0xd4, 0xbf, 0x3e, 0xb4, 0x0d, 0xe3, 0x5b, 0x86, - 0x27, 0xb6, 0xf5, 0x78, 0x22, 0xee, 0x39, 0x0f, 0x47, 0xd5, 0x6a, 0x9f, - 0xf5, 0x09, 0xe9, 0xcc, 0x51, 0x11, 0x2a, 0x9d, 0x9a, 0xce, 0x0e, 0xec, - 0x8e, 0x87, 0x30, 0x53, 0x1c, 0x2f, 0xf6, 0x84, 0x13, 0xa9, 0xa1, 0x60, - 0x24, 0x1d, 0xb1, 0xb1, 0x44, 0x0d, 0xb5, 0x35, 0x9a, 0x4c, 0x05, 0x11, - 0xbd, 0xa8, 0x85, 0x19, 0x25, 0xe5, 0x16, 0xdb, 0x8d, 0x7f, 0xef, 0x8c, - 0x76, 0x63, 0x87, 0x87, 0xa2, 0x6a, 0x42, 0xd0, 0x58, 0x10, 0xf3, 0x96, - 0x0a, 0xa9, 0x31, 0xe9, 0xa6, 0xd5, 0x3a, 0xac, 0x85, 0xee, 0x70, 0x88, - 0xfb, 0xa6, 0x6a, 0x33, 0x23, 0xd7, 0x67, 0x2e, 0x77, 0x24, 0x83, 0x37, - 0x1c, 0x52, 0xeb, 0x83, 0x3b, 0x37, 0xa6, 0x99, 0x4d, 0xaa, 0x2f, 0xeb, - 0x63, 0xb1, 0x54, 0xa6, 0x74, 0xe6, 0x56, 0xca, 0xa3, 0x2f, 0xb4, 0x67, - 0xe8, 0x35, 0xe3, 0x0d, 0xd2, 0xbd, 0x1b, 0x46, 0x6c, 0x47, 0x37, 0x7c, - 0x69, 0x18, 0x23, 0xc8, 0x47, 0x8e, 0x9e, 0xfc, 0xf5, 0xea, 0x90, 0xb2, - 0x46, 0x00, 0x01, 0x5c, 0x64, 0xed, 0xd0, 0x0e, 0xde, 0x22, 0x7a, 0x4f, - 0x6c, 0xe0, 0xcb, 0x71, 0x24, 0x1c, 0xc5, 0xe4, 0xb2, 0x56, 0x52, 0x15, - 0xdb, 0x10, 0x0d, 0xb3, 0x8d, 0x60, 0x2d, 0xa5, 0x74, 0xe2, 0x2d, 0x4a, - 0x0d, 0xaf, 0x27, 0x9c, 0xb1, 0xc4, 0x5c, 0xe6, 0x2c, 0x9c, 0xba, 0xd8, - 0xce, 0x40, 0xec, 0x3c, 0x4c, 0x4b, 0x79, 0x26, 0xad, 0x94, 0x22, 0x21, - 0x44, 0xc4, 0xf1, 0x48, 0x70, 0xb7, 0x3e, 0xf1, 0x0e, 0x48, 0x37, 0xaa, - 0xe7, 0x26, 0x12, 0xdb, 0xa9, 0x0c, 0x47, 0x10, 0x46, 0x71, 0xd4, 0x71, - 0x59, 0x1d, 0xe3, 0x56, 0x0a, 0x8c, 0x24, 0x1e, 0xef, 0x0a, 0xaa, 0xf3, - 0xe8, 0xcd, 0x64, 0xac, 0x0f, 0x25, 0x61, 0x8c, 0x33, 0x39, 0xcb, 0x32, - 0xd6, 0x98, 0xf2, 0x74, 0xce, 0x72, 0x63, 0x5e, 0x4c, 0x12, 0x4b, 0xb9, - 0x3c, 0xb6, 0x13, 0x5e, 0x21, 0x93, 0xdc, 0x10, 0xa7, 0xe2, 0x4c, 0x42, - 0x2d, 0xf3, 0xea, 0x70, 0x7f, 0x3f, 0x3a, 0x6f, 0x5a, 0xed, 0x88, 0xa1, - 0x49, 0x55, 0x66, 0x54, 0x46, 0x22, 0xb8, 0x2d, 0x5d, 0xa7, 0xca, 0x40, - 0x35, 0xa6, 0x4e, 0xf5, 0x82, 0x83, 0x8a, 0x4c, 0x22, 0x94, 0x60, 0xf3, - 0x69, 0x4e, 0x79, 0xd6, 0xf6, 0x60, 0x52, 0x5b, 0xa4, 0xdc, 0xed, 0xb0, - 0x00, 0xe9, 0x06, 0xa9, 0x94, 0x53, 0xdd, 0xb1, 0x01, 0xb3, 0x95, 0x13, - 0xb1, 0x1d, 0x7a, 0xd6, 0x50, 0x00, 0x75, 0x29, 0x6b, 0xe5, 0xd8, 0x1e, - 0x43, 0x9c, 0x26, 0xc2, 0xe4, 0xc1, 0x91, 0xeb, 0x54, 0xe1, 0x64, 0x92, - 0xac, 0xf0, 0x8e, 0x1d, 0x54, 0xc0, 0x2f, 0xd5, 0xc2, 0xc1, 0x48, 0x4b, - 0x30, 0x9e, 0xec, 0x60, 0x23, 0x9f, 0x67, 0x32, 0xb0, 0x33, 0x78, 0x93, - 0x14, 0x8c, 0x24, 0xf5, 0x16, 0xc9, 0x31, 0x19, 0xda, 0x4a, 0x86, 0xd3, - 0x27, 0x82, 0x72, 0x15, 0x7b, 0xb6, 0xbe, 0xe2, 0x51, 0x21, 0x6c, 0x7d, - 0x28, 0xa1, 0x1a, 0x5f, 0xaa, 0x4d, 0x0e, 0x65, 0xa1, 0x33, 0x3d, 0xc1, - 0xc8, 0x10, 0x1c, 0x57, 0x18, 0x31, 0xee, 0x79, 0xb0, 0xd3, 0xe1, 0x64, - 0xe6, 0xa4, 0x64, 0x85, 0x93, 0x9d, 0xf1, 0x20, 0x82, 0x7e, 0x14, 0x4d, - 0x66, 0x4e, 0xbb, 0x7a, 0xb3, 0x05, 0x1b, 0x81, 0xac, 0x18, 0xe2, 0xf0, - 0x15, 0xbb, 0xe2, 0x70, 0x2b, 0x41, 0xbd, 0x81, 0xd9, 0x96, 0xc0, 0xa1, - 0x86, 0x93, 0x66, 0x77, 0x90, 0xfb, 0xbc, 0xd0, 0xee, 0x16, 0x1e, 0x42, - 0xe9, 0x79, 0x27, 0x79, 0x1d, 0x97, 0x97, 0x16, 0x74, 0x6f, 0xe7, 0x25, - 0x71, 0x46, 0x94, 0x5b, 0xcf, 0xc3, 0x9e, 0x82, 0x97, 0xc6, 0x20, 0xd6, - 0xe2, 0x6e, 0x44, 0x8e, 0x48, 0x68, 0x20, 0x45, 0xae, 0x48, 0x28, 0xba, - 0x0d, 0x0e, 0xc3, 0x11, 0xe1, 0x08, 0xd7, 0x65, 0x86, 0x25, 0xa2, 0xe4, - 0x88, 0xf2, 0x86, 0xf0, 0x44, 0x47, 0x8e, 0xa5, 0x23, 0xca, 0x3e, 0xc6, - 0x1d, 0x0d, 0xed, 0x5c, 0xcb, 0x22, 0x66, 0xd4, 0xe4, 0x64, 0x45, 0xd3, - 0xce, 0x2a, 0x37, 0x6a, 0x37, 0xdc, 0x2e, 0x1e, 0x33, 0x66, 0xd2, 0x15, - 0xdb, 0xca, 0x3e, 0x91, 0x1c, 0x31, 0x2e, 0xef, 0x8b, 0x0d, 0x0c, 0x24, - 0x43, 0xa9, 0x65, 0x6a, 0x08, 0xea, 0x50, 0x27, 0x21, 0x89, 0xf4, 0x6f, - 0x57, 0xcf, 0x9d, 0x54, 0x18, 0x8b, 0xa6, 0xdf, 0xf3, 0xb5, 0x28, 0xbf, - 0x08, 0xf3, 0x35, 0x92, 0xb5, 0x3c, 0x94, 0x4c, 0x25, 0x62, 0xbb, 0x79, - 0x2f, 0x8f, 0x64, 0x9a, 0xfd, 0x6e, 0x2b, 0x99, 0xde, 0xf0, 0x93, 0x47, - 0xb2, 0xba, 0x83, 0xc3, 0xa1, 0xf4, 0x2a, 0x68, 0x03, 0x64, 0xd3, 0x57, - 0x4b, 0x3e, 0xba, 0x8a, 0xee, 0x54, 0x2c, 0x1e, 0x47, 0x56, 0x29, 0xdc, - 0x8a, 0xea, 0xc7, 0x09, 0x37, 0x7f, 0x0c, 0x2b, 0x8a, 0xfd, 0xbd, 0x93, - 0xf2, 0x62, 0xf6, 0x57, 0x38, 0x94, 0x1f, 0x1b, 0x15, 0x2a, 0x51, 0x6e, - 0x2c, 0xaa, 0xce, 0xa7, 0xf2, 0x04, 0x94, 0x1d, 0x8b, 0xa6, 0x0f, 0x57, - 0x9e, 0x62, 0x3b, 0x86, 0x22, 0xa9, 0x70, 0x9c, 0x57, 0x55, 0x25, 0x71, - 0x40, 0xb2, 0x38, 0x0c, 0x53, 0x45, 0xa1, 0xd1, 0x1d, 0x3e, 0x3f, 0x94, - 0xf1, 0xba, 0x48, 0xc2, 0xeb, 0x2c, 0xc5, 0xb9, 0xeb, 0x57, 0x32, 0x24, - 0xd2, 0x32, 0x93, 0x5c, 0x1f, 0xda, 0x81, 0xb6, 0x54, 0xd2, 0x1e, 0x51, - 0xa1, 0x0f, 0x7a, 0x5f, 0xa9, 0x3e, 0xb8, 0x62, 0x7a, 0x03, 0xba, 0x35, - 0x3d, 0x1b, 0x19, 0x7a, 0xa1, 0xb2, 0xd0, 0xe8, 0xd2, 0x54, 0x0a, 0xb6, - 0xce, 0x89, 0x0e, 0x72, 0x78, 0x17, 0x57, 0xa7, 0x94, 0x09, 0x32, 0x3d, - 0x71, 0xec, 0xef, 0xa8, 0x36, 0xb2, 0x79, 0xf1, 0x51, 0x47, 0xd6, 0x19, - 0x57, 0xfe, 0xb4, 0x22, 0x1e, 0x8b, 0x0f, 0x45, 0x4e, 0x1a, 0xcb, 0x14, - 0xc2, 0x75, 0xa6, 0x46, 0xbd, 0x66, 0x23, 0x2b, 0x9e, 0xc2, 0x45, 0x06, - 0x21, 0x5b, 0x42, 0xbf, 0xd1, 0xa5, 0x69, 0x09, 0x78, 0x2d, 0x6c, 0xe3, - 0xc4, 0xc9, 0x5f, 0xf6, 0x52, 0x79, 0x42, 0x0d, 0xf3, 0x24, 0x31, 0xa9, - 0x47, 0x4b, 0x79, 0x3a, 0x28, 0x17, 0xd1, 0x26, 0x0f, 0x4d, 0xad, 0x1d, - 0x39, 0x13, 0xca, 0x83, 0x0a, 0x18, 0x96, 0xa4, 0xdd, 0x41, 0xe4, 0x27, - 0x47, 0x7b, 0x07, 0x0b, 0xfb, 0x93, 0x33, 0x53, 0xb6, 0xb7, 0xb4, 0x5c, - 0x44, 0xbb, 0x4f, 0xe5, 0xdb, 0x4b, 0xed, 0xa9, 0x56, 0x3d, 0xbb, 0xca, - 0xac, 0x14, 0x27, 0xc7, 0xf1, 0xc1, 0x54, 0x84, 0xdc, 0xd6, 0x1d, 0x1c, - 0x82, 0xf2, 0xbe, 0x4c, 0xea, 0xee, 0x70, 0x8d, 0xed, 0xe9, 0x23, 0x49, - 0x65, 0x48, 0x8d, 0xfb, 0x32, 0x50, 0xe9, 0x65, 0xfc, 0x17, 0xb9, 0x39, - 0xc5, 0x63, 0x9b, 0x90, 0x4c, 0xfb, 0xb0, 0x0d, 0x61, 0x9b, 0x77, 0x99, - 0x3c, 0x6e, 0x36, 0xc7, 0x2d, 0xc1, 0x94, 0xea, 0x76, 0x20, 0x84, 0x10, - 0x26, 0x11, 0x4c, 0xec, 0x4e, 0x3b, 0x33, 0x44, 0x33, 0x94, 0x93, 0xd4, - 0x7e, 0x4b, 0x9d, 0xec, 0xbc, 0xe4, 0x28, 0x7f, 0xe5, 0x49, 0x27, 0x31, - 0x6e, 0x9e, 0x95, 0xb3, 0xc2, 0x91, 0xc8, 0xda, 0x58, 0x4a, 0x6d, 0xfe, - 0xdc, 0x24, 0x2c, 0x4c, 0xc6, 0x42, 0xe7, 0x71, 0x2a, 0x63, 0xa1, 0xc9, - 0xa9, 0xb7, 0x55, 0xbe, 0x22, 0x7a, 0x38, 0xdc, 0x56, 0x5e, 0x12, 0x47, - 0x6b, 0x24, 0xe9, 0x4a, 0xaa, 0xb7, 0x04, 0xe8, 0xc2, 0xd0, 0xd6, 0xf4, - 0xeb, 0x10, 0xca, 0x46, 0xc2, 0xe4, 0x97, 0x25, 0xf5, 0x68, 0x5a, 0x47, - 0xba, 0x64, 0xc2, 0x06, 0x57, 0x4a, 0xc7, 0x4f, 0x59, 0x9a, 0x22, 0x0a, - 0x76, 0xa8, 0x28, 0x6c, 0x6a, 0x6a, 0x74, 0x14, 0xb5, 0xea, 0xc4, 0x68, - 0x70, 0xfa, 0x38, 0x0a, 0x63, 0x82, 0xc3, 0xaa, 0xb1, 0x4a, 0x27, 0x89, - 0xbb, 0x4e, 0xfd, 0x07, 0x34, 0x79, 0x9f, 0x4d, 0x19, 0xab, 0x37, 0x2a, - 0x68, 0xaa, 0x18, 0x2b, 0xb7, 0x87, 0x24, 0xe3, 0x0c, 0x6b, 0x74, 0x84, - 0xe2, 0x3f, 0x41, 0xa1, 0x75, 0x8c, 0x6f, 0x1a, 0xa3, 0x31, 0xc6, 0x05, - 0x9d, 0x38, 0x35, 0xdd, 0xe3, 0x6d, 0xe7, 0x13, 0x07, 0xdc, 0x7d, 0x92, - 0x5d, 0xe5, 0x48, 0x6d, 0x0f, 0x27, 0xb1, 0x4c, 0x78, 0xce, 0xa8, 0x37, - 0x74, 0x0e, 0x72, 0x39, 0x1e, 0xce, 0x4a, 0xc5, 0xf4, 0xeb, 0x21, 0xb2, - 0xb0, 0x1d, 0x90, 0xc9, 0x33, 0x50, 0x39, 0x14, 0xef, 0x87, 0xf9, 0x48, - 0x87, 0xd0, 0x99, 0x5d, 0xcf, 0xce, 0xde, 0x04, 0xcb, 0x33, 0xb5, 0x8a, - 0x4e, 0x99, 0x70, 0x9c, 0x55, 0x74, 0x40, 0xc6, 0x8a, 0x99, 0x00, 0x7c, - 0x8a, 0x5d, 0x75, 0x1c, 0x79, 0xa5, 0x5d, 0x3e, 0xaa, 0xad, 0x8c, 0x4a, - 0xd6, 0x50, 0x6a, 0xa0, 0x41, 0x45, 0x76, 0x62, 0x98, 0x9c, 0xc3, 0xca, - 0xad, 0xbb, 0x15, 0xe9, 0x1c, 0x20, 0x07, 0xbf, 0xf1, 0x25, 0x17, 0x3f, - 0xb1, 0xf7, 0x0a, 0x98, 0xda, 0xed, 0x75, 0x36, 0x67, 0x04, 0x62, 0x1b, - 0x92, 0x88, 0x26, 0x87, 0x4f, 0x8c, 0x09, 0x8b, 0x86, 0xc7, 0x89, 0xa9, - 0xf3, 0x4c, 0xa6, 0x89, 0xd0, 0x3d, 0xc3, 0x23, 0x87, 0x50, 0xc0, 0xff, - 0xee, 0xdc, 0x8e, 0x23, 0x2c, 0x76, 0x91, 0xdc, 0x55, 0x0f, 0xcc, 0x01, - 0xe6, 0x02, 0xf3, 0x80, 0xf9, 0x24, 0x76, 0xd3, 0x4d, 0x0e, 0xeb, 0xbb, - 0xd6, 0x2f, 0xc4, 0x35, 0x96, 0x3b, 0xbf, 0xb9, 0xa6, 0xa6, 0x76, 0x17, - 0xed, 0x71, 0x8a, 0x17, 0x85, 0xbb, 0xa2, 0xcd, 0x92, 0x97, 0x5b, 0xb2, - 0xdd, 0xa2, 0x97, 0x84, 0x6c, 0x9b, 0x3e, 0xb1, 0xdd, 0xb2, 0xbe, 0x68, - 0x35, 0x6f, 0x76, 0x88, 0xdf, 0xca, 0xc5, 0x03, 0xf4, 0xa6, 0x43, 0xbe, - 0x28, 0x0e, 0x5a, 0xac, 0x25, 0x32, 0x5a, 0xeb, 0xa0, 0x24, 0xa1, 0xd4, - 0xb6, 0x9a, 0xae, 0x74, 0x42, 0x7e, 0x35, 0xaa, 0xdc, 0x45, 0x07, 0xd3, - 0x6c, 0x73, 0x33, 0xbd, 0xef, 0xd0, 0xfc, 0xa8, 0x62, 0x5d, 0x93, 0xda, - 0x74, 0xb1, 0x56, 0x7a, 0xc8, 0x21, 0xfe, 0x24, 0xdd, 0xf9, 0xf4, 0x63, - 0x87, 0xe3, 0x4f, 0x68, 0xfd, 0x59, 0xf1, 0x7d, 0xe1, 0xce, 0x0f, 0xd3, - 0xb7, 0x1c, 0x8e, 0x83, 0xd6, 0x11, 0xeb, 0x72, 0xeb, 0x25, 0xc1, 0x35, - 0xde, 0xe7, 0x70, 0x71, 0xf2, 0xd7, 0xf2, 0x71, 0xf9, 0x13, 0xf9, 0x23, - 0xc9, 0x59, 0x77, 0x8f, 0xd6, 0x78, 0x42, 0x97, 0xff, 0x81, 0x78, 0x16, - 0x03, 0x91, 0x13, 0x2f, 0x91, 0xe7, 0x56, 0xdc, 0x6e, 0x89, 0x1f, 0xcb, - 0xe6, 0xa9, 0x16, 0x3d, 0x2e, 0xe4, 0xc7, 0xb5, 0xfb, 0x6b, 0x1f, 0x6d, - 0x3d, 0x43, 0xe4, 0x3b, 0xc5, 0x92, 0x9a, 0xdb, 0x77, 0xd1, 0xcd, 0x4e, - 0x4c, 0xc1, 0xeb, 0xe9, 0x29, 0xa0, 0x9f, 0x38, 0xc9, 0x5d, 0xb1, 0x7f, - 0x77, 0x4d, 0xed, 0xb9, 0x67, 0x84, 0xbb, 0x26, 0xd3, 0x37, 0x39, 0xd9, - 0x26, 0xf3, 0xaa, 0xe5, 0x50, 0x45, 0xdb, 0xee, 0xb0, 0x25, 0x1e, 0x90, - 0x32, 0x6c, 0xd1, 0x9d, 0xb2, 0xf9, 0x82, 0x17, 0xde, 0xa3, 0x7d, 0x6e, - 0x49, 0xf7, 0xa0, 0xe0, 0xe6, 0x1a, 0xba, 0xdc, 0x2d, 0xbe, 0x67, 0xb9, - 0x9b, 0xe4, 0xe4, 0xe7, 0xe5, 0xf6, 0x8a, 0xc7, 0x2c, 0xfa, 0xa1, 0x9c, - 0x52, 0xf3, 0xa9, 0xf6, 0xcf, 0x5a, 0xe2, 0x51, 0x39, 0xfd, 0x8d, 0xb6, - 0x76, 0xb9, 0xab, 0xc2, 0x29, 0x84, 0xcb, 0x25, 0xe8, 0x2e, 0xb7, 0x3c, - 0x68, 0x41, 0x35, 0x9f, 0xee, 0x71, 0x8b, 0x57, 0xd0, 0xc5, 0xa7, 0xe4, - 0xf9, 0x15, 0x7f, 0xb4, 0xe8, 0x55, 0xd1, 0x50, 0x73, 0xb5, 0x93, 0xe8, - 0x11, 0x37, 0xa4, 0x77, 0x8b, 0x23, 0x18, 0xcb, 0xa3, 0x53, 0xe9, 0x3d, - 0x4b, 0x10, 0xea, 0x6f, 0xa6, 0xbf, 0x58, 0xe4, 0xae, 0xee, 0xb5, 0xe4, - 0xbb, 0x32, 0xff, 0x32, 0x4b, 0x1c, 0x95, 0x53, 0x6a, 0x77, 0xfd, 0xd5, - 0xa2, 0xe7, 0x85, 0x3c, 0xb7, 0x59, 0x14, 0x16, 0x86, 0x9b, 0x65, 0xb2, - 0xc2, 0x49, 0xcd, 0x22, 0xc7, 0x45, 0xf4, 0x1f, 0x96, 0xee, 0x95, 0x5c, - 0xb4, 0x49, 0xae, 0xd9, 0x59, 0x43, 0xaf, 0xa0, 0xd7, 0xdc, 0xde, 0x89, - 0xf4, 0x4d, 0x54, 0x99, 0x7f, 0x98, 0xde, 0xd2, 0xe4, 0x5a, 0x29, 0xde, - 0xe4, 0xe9, 0xbf, 0x51, 0x22, 0x49, 0x37, 0x49, 0xf1, 0x16, 0xa7, 0xbe, - 0xa2, 0x52, 0xd7, 0xa9, 0xe7, 0xd7, 0xd5, 0xf3, 0x06, 0x29, 0xef, 0x17, - 0x3f, 0x47, 0xef, 0xe8, 0x6b, 0x2a, 0xfd, 0x55, 0xc9, 0x7b, 0x21, 0x9f, - 0x0e, 0xa9, 0xd4, 0xf5, 0x19, 0xe9, 0xcd, 0x52, 0x90, 0xc3, 0xfa, 0x81, - 0x5c, 0x12, 0x46, 0x62, 0xb5, 0xf5, 0x8c, 0x78, 0x43, 0xde, 0x2c, 0xdd, - 0xd5, 0xf2, 0x3f, 0xa9, 0x49, 0xfe, 0x5e, 0xee, 0x94, 0x77, 0x5b, 0x3b, - 0x77, 0xc9, 0x8f, 0x77, 0xbd, 0x76, 0xa9, 0x90, 0x4e, 0xcf, 0xb2, 0x9a, - 0xe6, 0xda, 0xe6, 0xe6, 0x33, 0x7b, 0x2d, 0x7a, 0x52, 0x78, 0x2e, 0xb4, - 0xc4, 0x53, 0xa2, 0xa5, 0xf9, 0xf6, 0x4a, 0xcb, 0x7a, 0x50, 0x9e, 0x29, - 0x4a, 0x4b, 0xeb, 0xa7, 0x58, 0xf2, 0x88, 0x94, 0x32, 0x4f, 0x14, 0xe6, - 0x3b, 0xe5, 0x2e, 0xb9, 0x06, 0x43, 0x75, 0x0a, 0xa7, 0xe5, 0xf2, 0xc8, - 0xfa, 0x5b, 0x9d, 0x1e, 0x17, 0xb9, 0x84, 0x4b, 0xba, 0xac, 0x99, 0x33, - 0xe5, 0x50, 0xb5, 0x53, 0xce, 0x94, 0x89, 0x6a, 0x6a, 0xd1, 0x43, 0x4c, - 0x13, 0xf9, 0x80, 0xf5, 0x83, 0x71, 0xd3, 0x16, 0x33, 0x0f, 0x2a, 0xd6, - 0xa1, 0xd9, 0x87, 0x46, 0x2b, 0x9c, 0x58, 0xd2, 0x99, 0xd6, 0x7a, 0xf8, - 0xc4, 0xf2, 0x36, 0xf6, 0xc4, 0x42, 0xe3, 0xf7, 0xe2, 0x88, 0x14, 0x98, - 0x91, 0xfc, 0x36, 0x8b, 0xde, 0x91, 0x16, 0x3d, 0x26, 0xc5, 0xed, 0xbc, - 0x68, 0x53, 0x9a, 0x64, 0xa8, 0xba, 0xb3, 0x6e, 0xf1, 0xda, 0xb5, 0xb5, - 0x72, 0xdb, 0x1a, 0xba, 0x9a, 0x57, 0xe7, 0x0b, 0xe5, 0xf4, 0x05, 0xde, - 0x07, 0x6d, 0xf4, 0x36, 0xcf, 0x32, 0x8e, 0xce, 0x6d, 0xb2, 0x6a, 0xde, - 0xc4, 0xb6, 0x5e, 0xfa, 0xb1, 0x4b, 0xde, 0x6f, 0xfd, 0x90, 0x6b, 0xbb, - 0x51, 0x88, 0xd7, 0x30, 0xef, 0x57, 0x4c, 0xea, 0xa5, 0xe7, 0xdc, 0xbc, - 0x14, 0xbf, 0x55, 0x0b, 0xb2, 0xdf, 0xca, 0x14, 0x98, 0x33, 0x79, 0x3f, - 0xff, 0x45, 0x3c, 0xb7, 0xec, 0xe2, 0xe7, 0x51, 0x97, 0xbc, 0x57, 0x3c, - 0xcc, 0x6b, 0xf5, 0x86, 0x4b, 0xdc, 0xcb, 0xf4, 0x69, 0x4d, 0xd1, 0xdc, - 0xfb, 0x9a, 0xbb, 0xbc, 0x9c, 0x5e, 0xc9, 0x68, 0xbd, 0x6b, 0xb4, 0x5e, - 0x32, 0xf4, 0x75, 0xa7, 0xf8, 0x0d, 0x56, 0xf4, 0x5c, 0x8b, 0xfe, 0x43, - 0xd4, 0xb6, 0xb5, 0xd5, 0xec, 0xdf, 0xdf, 0xd6, 0x71, 0x5b, 0xed, 0x7e, - 0x39, 0xbc, 0x66, 0x1e, 0x5d, 0x23, 0xc4, 0x23, 0xba, 0xa6, 0xcb, 0x5c, - 0xf2, 0x2e, 0xeb, 0x46, 0x8c, 0xf3, 0xf2, 0xc9, 0x35, 0xf4, 0x05, 0x29, - 0x5e, 0x46, 0xf6, 0xa5, 0xa2, 0xa4, 0xc0, 0x4f, 0xd7, 0x5b, 0xf2, 0xb0, - 0x44, 0xb2, 0x62, 0xbf, 0x9c, 0x5c, 0x81, 0x53, 0x7a, 0x86, 0x2c, 0x68, - 0xaa, 0x6d, 0x0b, 0xc9, 0xa1, 0x35, 0x5b, 0xe4, 0xee, 0x35, 0xf4, 0xb8, - 0x65, 0x1d, 0x96, 0xcf, 0xb2, 0x7e, 0x93, 0x2c, 0xbc, 0x44, 0x26, 0x2a, - 0x5e, 0xe8, 0xbd, 0xfd, 0x52, 0xcb, 0xf9, 0x2d, 0x4b, 0xd6, 0x85, 0x16, - 0xd3, 0x43, 0xa6, 0x70, 0xfe, 0x7e, 0x7f, 0xf9, 0xb5, 0xb4, 0xd7, 0xe5, - 0x7c, 0x54, 0xdc, 0x2f, 0x6f, 0xb3, 0x8e, 0xc9, 0x87, 0xb8, 0x6b, 0x1f, - 0x38, 0x1d, 0xf7, 0x59, 0x07, 0xe4, 0x93, 0xf2, 0x67, 0x68, 0xf8, 0x8c, - 0xfd, 0x9b, 0xe9, 0x7e, 0xa1, 0x1a, 0xde, 0x2f, 0x9f, 0xa4, 0x0a, 0x79, - 0xe4, 0x73, 0xb0, 0x41, 0xd9, 0x77, 0x0b, 0xd8, 0x20, 0xf7, 0x2d, 0x96, - 0x25, 0x7f, 0x42, 0x9b, 0xe4, 0xc3, 0x9f, 0xab, 0x16, 0x45, 0x05, 0xf5, - 0x1a, 0xde, 0x76, 0x2b, 0xe7, 0x21, 0x29, 0xcf, 0x68, 0xb6, 0x72, 0xdf, - 0x92, 0xcb, 0xcf, 0x10, 0xc2, 0xf2, 0xdc, 0x22, 0x65, 0x8d, 0x28, 0xcf, - 0x5b, 0xec, 0xf4, 0x38, 0x73, 0xe7, 0x38, 0x73, 0xce, 0x75, 0x79, 0x6a, - 0x45, 0x51, 0xa9, 0xbc, 0xa0, 0xa9, 0xd9, 0x95, 0x7b, 0x86, 0xa8, 0x98, - 0xc0, 0xf9, 0xa3, 0x33, 0xe5, 0x72, 0x51, 0x81, 0x63, 0xe1, 0x12, 0xdf, - 0xc7, 0xf2, 0xf8, 0x2d, 0x71, 0x95, 0x75, 0xa6, 0xf0, 0x95, 0xc9, 0x82, - 0x6a, 0x19, 0xae, 0x80, 0x29, 0xfa, 0xb9, 0x68, 0x9a, 0xea, 0x24, 0xc5, - 0x34, 0x4e, 0x77, 0xd2, 0x1b, 0x73, 0x67, 0xd2, 0x41, 0x97, 0x78, 0x84, - 0x0f, 0xdd, 0x43, 0x2e, 0x71, 0x3f, 0xdb, 0xbe, 0x72, 0xfa, 0x40, 0x5a, - 0x87, 0xad, 0xbf, 0xc8, 0x3f, 0xcb, 0xf4, 0x1a, 0xce, 0x9f, 0xd4, 0xdc, - 0x46, 0xb2, 0x4e, 0xdc, 0x65, 0x95, 0xd5, 0xca, 0x7a, 0xf9, 0x6d, 0xe1, - 0x98, 0xf4, 0x90, 0x2c, 0xcd, 0x95, 0x73, 0x91, 0x53, 0xee, 0x29, 0x75, - 0x94, 0x2e, 0x2c, 0x75, 0x95, 0x0e, 0x94, 0xba, 0x4b, 0x9b, 0x81, 0x4f, - 0xe1, 0xd7, 0x33, 0xa2, 0x95, 0xaf, 0x59, 0x1f, 0xd8, 0xc9, 0xba, 0x80, - 0x1b, 0x05, 0x82, 0xa5, 0x3e, 0x55, 0x60, 0x75, 0x69, 0xb6, 0xae, 0xb7, - 0x5a, 0xab, 0x49, 0xa8, 0x45, 0x46, 0x4a, 0x94, 0xcb, 0x39, 0x5c, 0x42, - 0x94, 0xcd, 0xd6, 0x79, 0xd9, 0xc8, 0x3b, 0x4f, 0xd7, 0x92, 0x85, 0x5a, - 0xec, 0x4d, 0xe6, 0x68, 0x55, 0x67, 0x59, 0x75, 0xd9, 0xac, 0xb2, 0x9a, - 0xb2, 0x99, 0x65, 0x55, 0x69, 0x3d, 0xe7, 0x68, 0x3d, 0x72, 0xb8, 0x5c, - 0x39, 0x52, 0xf8, 0xf8, 0x77, 0xd1, 0x45, 0x7b, 0x1c, 0x87, 0x6a, 0x2c, - 0xcf, 0xd3, 0x35, 0x4e, 0xcf, 0x8f, 0x6a, 0x85, 0xe7, 0x8a, 0x3a, 0xe1, - 0xb9, 0x0b, 0x78, 0xba, 0xae, 0x41, 0x1c, 0xaa, 0x17, 0xe2, 0xae, 0x7a, - 0x29, 0x9e, 0x06, 0x7d, 0x1b, 0xb8, 0x62, 0x0e, 0xd2, 0x08, 0x0a, 0x84, - 0x2c, 0x90, 0x42, 0xfd, 0xb6, 0xec, 0xd9, 0xe3, 0x38, 0x38, 0x6f, 0xb9, - 0x38, 0x3c, 0x4f, 0x8a, 0x1b, 0xe6, 0x93, 0x14, 0x8e, 0xa2, 0x03, 0x7e, - 0xe1, 0x5b, 0x8d, 0x4a, 0x8f, 0x2c, 0x68, 0x15, 0x2f, 0x2f, 0x10, 0x62, - 0xdf, 0x22, 0x21, 0x6e, 0x02, 0x6e, 0x68, 0x80, 0x58, 0x4c, 0x90, 0xe2, - 0x80, 0xbf, 0x03, 0xa5, 0x8e, 0x36, 0xac, 0x15, 0x57, 0x34, 0x92, 0xe5, - 0xa2, 0x52, 0x2e, 0x21, 0x7c, 0x9d, 0x28, 0xf3, 0xdc, 0xe9, 0xe2, 0x52, - 0xff, 0x9e, 0x26, 0x3c, 0x0e, 0xf1, 0xe3, 0xbb, 0x4d, 0x42, 0x3e, 0x01, - 0xbc, 0xd7, 0x44, 0x42, 0xe4, 0x4c, 0xf2, 0x6d, 0xe0, 0xbe, 0x36, 0xf7, - 0x88, 0xc3, 0xcd, 0x42, 0xbc, 0x08, 0x1c, 0x03, 0x0e, 0x62, 0x97, 0x1c, - 0x06, 0x5e, 0x04, 0x8e, 0x01, 0x07, 0xcf, 0x14, 0xe2, 0xbb, 0xc0, 0x73, - 0xc0, 0xdb, 0x67, 0x92, 0x7b, 0xfe, 0xd4, 0xc9, 0x3e, 0xd5, 0x57, 0x9f, - 0xfe, 0x0d, 0xa2, 0x8e, 0x4b, 0x17, 0xa3, 0xf2, 0xd7, 0x96, 0xe1, 0x71, - 0x9c, 0x1f, 0x87, 0x5a, 0xb8, 0x2d, 0x7e, 0x3c, 0xc1, 0x8f, 0xd7, 0xf8, - 0x71, 0x9c, 0x1f, 0x87, 0x96, 0xe3, 0x71, 0x98, 0x1f, 0xcf, 0xf1, 0xe3, - 0x6d, 0x7e, 0x5c, 0xba, 0x02, 0x8f, 0x9b, 0xf8, 0xf1, 0x20, 0x3f, 0x5e, - 0xe4, 0xc7, 0x7b, 0xfc, 0xb8, 0x62, 0x25, 0x1e, 0x77, 0xac, 0x74, 0xed, - 0x95, 0x24, 0x00, 0x4b, 0x3e, 0xb6, 0x92, 0xa9, 0x64, 0x78, 0xfe, 0xba, - 0x92, 0x69, 0x5a, 0xf6, 0xcf, 0x60, 0x02, 0xe0, 0xf9, 0x02, 0xf8, 0x7f, - 0x14, 0xd0, 0x4f, 0x89, 0xdf, 0xac, 0xc2, 0x4c, 0xac, 0xc6, 0x4c, 0x00, - 0x47, 0x81, 0xe3, 0xab, 0x2d, 0x71, 0xa4, 0xd5, 0x45, 0xcf, 0xb5, 0x96, - 0x88, 0xe3, 0xad, 0x42, 0x1c, 0x59, 0x83, 0x19, 0x02, 0x8e, 0x01, 0x97, - 0xb6, 0x61, 0x71, 0x80, 0xa7, 0x81, 0xe3, 0xc0, 0x81, 0x76, 0x21, 0x6e, - 0x05, 0x8e, 0x00, 0x2f, 0x76, 0x40, 0xbe, 0x56, 0x88, 0x07, 0x81, 0x03, - 0x9d, 0x40, 0x17, 0x74, 0xd7, 0x09, 0xc7, 0xcb, 0xc0, 0xdb, 0xeb, 0xb0, - 0xb0, 0xeb, 0x9d, 0xe2, 0x68, 0x0f, 0xea, 0x39, 0x4b, 0x8a, 0x4b, 0x37, - 0x4a, 0x71, 0xd7, 0xc6, 0xcc, 0xff, 0xdf, 0x12, 0x36, 0x9a, 0xfe, 0xbf, - 0xa4, 0xfc, 0x9d, 0xab, 0xf4, 0xff, 0x26, 0xe5, 0xef, 0x62, 0xa5, 0xff, - 0x3f, 0x29, 0x7f, 0xd7, 0x2a, 0xfd, 0x3f, 0x4a, 0xf9, 0x7b, 0x58, 0xe9, - 0xff, 0x53, 0xea, 0xa2, 0x91, 0xff, 0x55, 0x6a, 0x79, 0xf5, 0xdf, 0x51, - 0xf0, 0xf7, 0x16, 0x85, 0x5f, 0xff, 0x7f, 0xb3, 0x43, 0xe0, 0x5d, 0x7e, - 0xad, 0xc3, 0x7f, 0xdb, 0x2f, 0xbc, 0xba, 0x7e, 0xfe, 0x7b, 0x7f, 0xe9, - 0xd7, 0xed, 0xf2, 0xff, 0x36, 0xb5, 0x8c, 0x3e, 0xff, 0xdd, 0xba, 0xc3, - 0xaf, 0xbf, 0x5b, 0xc9, 0x7f, 0xeb, 0x4e, 0xa6, 0xac, 0xfa, 0x9f, 0x00, - 0x5e, 0xdd, 0x57, 0xfe, 0x3f, 0xaa, 0xff, 0x03, 0x52, 0x5b, 0x3b, 0x13, - 0x80, 0x55, 0x00, 0x00, 0x00, 0x00, + 0x1f, 0x8b, 0x08, 0x08, 0x9a, 0x4b, 0x2f, 0x68, 0x00, 0x03, 0x63, 0x6c, + 0x61, 0x73, 0x73, 0x65, 0x73, 0x2e, 0x64, 0x65, 0x78, 0x00, 0xa5, 0x7c, + 0x0b, 0x7c, 0x94, 0x57, 0xb5, 0xef, 0xda, 0xdf, 0xbc, 0x92, 0xc9, 0x6b, + 0x32, 0x09, 0x24, 0x04, 0x02, 0x43, 0x08, 0x34, 0x90, 0x84, 0x4c, 0x42, + 0x80, 0x84, 0x04, 0x08, 0x01, 0x42, 0x5e, 0x40, 0x48, 0x86, 0x14, 0x12, + 0x6a, 0x19, 0x92, 0x09, 0x19, 0x98, 0xcc, 0x0c, 0x33, 0x93, 0x00, 0xb5, + 0xa7, 0x62, 0xa5, 0x82, 0xb5, 0x56, 0xd4, 0xaa, 0xb4, 0xf6, 0x28, 0x6a, + 0x6b, 0xab, 0x56, 0xed, 0x83, 0x6a, 0xed, 0xa9, 0xca, 0xb1, 0x4f, 0x6b, + 0xad, 0x6d, 0xed, 0x4b, 0xdb, 0x6a, 0x5f, 0xb7, 0xf6, 0xdc, 0x56, 0x5b, + 0xb5, 0xda, 0x7a, 0xec, 0xb5, 0xf7, 0xbf, 0xf6, 0xde, 0x33, 0xf9, 0x86, + 0x84, 0xd6, 0x73, 0x6f, 0xf2, 0xfb, 0x7f, 0x6b, 0xed, 0xb5, 0xd6, 0x7e, + 0xaf, 0xbd, 0xf6, 0xde, 0xdf, 0x4c, 0x32, 0x1c, 0x38, 0xe4, 0xf4, 0x2e, + 0x5b, 0x49, 0x9f, 0xb9, 0xe2, 0xd5, 0xb6, 0x37, 0xe2, 0x9f, 0x3b, 0xf4, + 0x97, 0xf3, 0xbf, 0x5b, 0x7a, 0xff, 0xf3, 0xbf, 0x7d, 0xe3, 0x89, 0x07, + 0xc3, 0xaf, 0x6c, 0xd9, 0x75, 0xfa, 0xb2, 0x87, 0xb6, 0x12, 0x45, 0x89, + 0xe8, 0x50, 0x7f, 0xbd, 0x9b, 0xf4, 0x4f, 0x06, 0x64, 0x17, 0x09, 0x25, + 0xef, 0x02, 0x76, 0xd8, 0x15, 0x7f, 0xd4, 0x41, 0xb4, 0x00, 0xf4, 0x9e, + 0x6c, 0xa2, 0x67, 0x41, 0x9f, 0xcd, 0x21, 0x82, 0x88, 0xee, 0x2a, 0x24, + 0xf2, 0xae, 0x22, 0xba, 0x76, 0x06, 0xd1, 0xcb, 0x35, 0x44, 0xaf, 0x00, + 0xff, 0x05, 0xbc, 0x0e, 0xbc, 0x01, 0xfc, 0x19, 0xf8, 0x1b, 0xf0, 0x77, + 0x40, 0x78, 0x89, 0x6c, 0x40, 0x16, 0x50, 0x00, 0x94, 0x01, 0xab, 0x80, + 0x36, 0xa0, 0x03, 0xd8, 0x0c, 0xf4, 0x00, 0x3e, 0x60, 0x07, 0x70, 0x01, + 0xe0, 0x07, 0x46, 0x80, 0x7d, 0xc0, 0x18, 0x70, 0x00, 0x18, 0x07, 0xae, + 0x02, 0xbe, 0x03, 0xdc, 0x0c, 0x9c, 0x06, 0x7e, 0x08, 0xfc, 0x08, 0xf8, + 0x29, 0xf0, 0x00, 0xf0, 0x10, 0xf0, 0x28, 0xf0, 0x24, 0xf0, 0x2c, 0xf0, + 0x02, 0xf0, 0x77, 0xa0, 0xa6, 0x96, 0xa8, 0x13, 0x08, 0x00, 0x47, 0x80, + 0x53, 0xc0, 0x19, 0xe0, 0x35, 0xc0, 0x56, 0x47, 0x34, 0x0f, 0x68, 0x00, + 0x7c, 0x40, 0x10, 0xf8, 0x08, 0x70, 0x12, 0xb8, 0x15, 0x78, 0x18, 0x78, + 0x15, 0xc8, 0x5b, 0x46, 0x54, 0x09, 0xb4, 0x00, 0xdb, 0x81, 0x8f, 0x02, + 0x5f, 0x01, 0xee, 0x00, 0x1e, 0x07, 0xde, 0x03, 0x0a, 0xeb, 0x89, 0x96, + 0x02, 0x23, 0xc0, 0x31, 0xe0, 0xcb, 0xc0, 0x19, 0xe0, 0xf7, 0x40, 0xc9, + 0x72, 0xa2, 0x2d, 0xc0, 0xc7, 0x81, 0xef, 0x03, 0xcf, 0x01, 0x99, 0x2b, + 0x50, 0x2f, 0x10, 0x04, 0xbe, 0x08, 0x3c, 0x0d, 0x78, 0x56, 0x12, 0x0d, + 0x02, 0x57, 0x02, 0xb7, 0x00, 0x4f, 0x00, 0x7f, 0x05, 0x8a, 0x1b, 0x88, + 0xd6, 0x00, 0x17, 0x00, 0x07, 0x81, 0xcb, 0x81, 0xef, 0x02, 0x8f, 0x03, + 0xff, 0x05, 0x64, 0x37, 0x22, 0x2f, 0xb0, 0x16, 0xe8, 0x03, 0x2e, 0x05, + 0xbe, 0x0c, 0xdc, 0x0e, 0xfc, 0x1c, 0x78, 0x0e, 0x78, 0x03, 0x78, 0x07, + 0xf8, 0x27, 0x90, 0x87, 0xf9, 0x2b, 0x05, 0x3c, 0x40, 0x39, 0xb0, 0x18, + 0xa8, 0x01, 0x56, 0x00, 0xab, 0x80, 0x56, 0xa0, 0x1d, 0xd8, 0x0a, 0xf8, + 0x80, 0x9d, 0xc0, 0x85, 0xc0, 0x30, 0x30, 0x0a, 0x8c, 0x01, 0x71, 0xe0, + 0x22, 0xe0, 0x23, 0xc0, 0x51, 0xe0, 0x93, 0xc0, 0x55, 0xc0, 0x35, 0xc0, + 0x57, 0x80, 0xeb, 0x81, 0x6f, 0x03, 0xdf, 0x03, 0x7e, 0x00, 0xdc, 0x09, + 0xfc, 0x04, 0xb8, 0x17, 0x78, 0x10, 0x78, 0x18, 0x78, 0x02, 0x78, 0x06, + 0xf8, 0x1d, 0xf0, 0x32, 0xf0, 0x3a, 0xf0, 0x17, 0xe0, 0x6d, 0xe0, 0x1f, + 0xc0, 0x7b, 0x40, 0x41, 0x13, 0x51, 0x05, 0x50, 0x0f, 0xb4, 0x00, 0x9b, + 0x81, 0x01, 0x60, 0x2f, 0x90, 0x00, 0x3e, 0x0a, 0x5c, 0x09, 0x7c, 0x09, + 0xb8, 0x11, 0xb8, 0x1d, 0xf8, 0x29, 0xf0, 0x30, 0xf0, 0x0c, 0xf0, 0x7b, + 0xe0, 0x2f, 0xc0, 0x7b, 0x40, 0x56, 0x33, 0x51, 0x11, 0xb0, 0x00, 0xa8, + 0x01, 0x9a, 0x81, 0x2e, 0xc0, 0x0f, 0x84, 0x81, 0x38, 0x70, 0x25, 0x70, + 0x0a, 0xb8, 0x0d, 0xb8, 0x0f, 0x78, 0x18, 0x78, 0x12, 0x78, 0x15, 0x78, + 0x1b, 0xf8, 0x27, 0x90, 0xb7, 0x1a, 0x6d, 0x02, 0x96, 0x03, 0x1b, 0x01, + 0x1f, 0xb0, 0x0f, 0x38, 0x06, 0x9c, 0x00, 0xae, 0x01, 0xae, 0x03, 0xee, + 0x03, 0x1e, 0x05, 0x7e, 0x07, 0xbc, 0x0b, 0x94, 0xac, 0x21, 0x5a, 0x08, + 0xac, 0x00, 0x36, 0x03, 0x17, 0x02, 0xe3, 0xc0, 0x51, 0xe0, 0x4a, 0xe0, + 0xeb, 0xc0, 0x9d, 0xc0, 0x7d, 0xc0, 0xe3, 0xc0, 0x0b, 0xc0, 0x1b, 0x80, + 0x73, 0x2d, 0x51, 0x15, 0xb0, 0x12, 0xe8, 0x05, 0xf6, 0x03, 0x47, 0x80, + 0x2f, 0x02, 0x3f, 0x01, 0x1e, 0x02, 0x9e, 0x03, 0xfe, 0x0c, 0x50, 0x0b, + 0xfa, 0x09, 0x94, 0x00, 0x95, 0x40, 0x23, 0xd0, 0x0a, 0x74, 0x01, 0x3b, + 0x80, 0x20, 0x70, 0x31, 0x70, 0x25, 0x70, 0x3d, 0x70, 0x3b, 0x70, 0x3f, + 0xf0, 0x2c, 0xf0, 0x3a, 0x20, 0xd6, 0x11, 0xb9, 0x80, 0x4a, 0xa0, 0x09, + 0xd8, 0x09, 0x5c, 0x08, 0x04, 0x80, 0x8f, 0x00, 0x27, 0x80, 0xaf, 0x01, + 0xa7, 0x81, 0xbb, 0x81, 0xc7, 0x80, 0xdf, 0x01, 0x7f, 0x05, 0xec, 0xad, + 0x18, 0x5f, 0x60, 0x11, 0xb0, 0x0c, 0x68, 0x07, 0xb6, 0x01, 0xe7, 0x03, + 0x01, 0xe0, 0x12, 0xe0, 0x38, 0x70, 0x25, 0x70, 0x0d, 0xf0, 0x6d, 0xe0, + 0x4e, 0xe0, 0xe7, 0xc0, 0x93, 0xc0, 0xcb, 0xc0, 0xdb, 0x80, 0x58, 0x8f, + 0xf5, 0x01, 0x14, 0x00, 0x8b, 0x80, 0x75, 0x40, 0x37, 0xd0, 0x0f, 0x44, + 0x80, 0x4b, 0x80, 0xcb, 0x80, 0x4f, 0x01, 0x9f, 0x03, 0xae, 0x01, 0x4e, + 0x01, 0xdf, 0x05, 0xbe, 0x0f, 0x3c, 0x08, 0x3c, 0x07, 0xfc, 0x19, 0xb0, + 0x6e, 0x40, 0x9b, 0x80, 0x7a, 0x60, 0x13, 0x30, 0x00, 0xc4, 0x81, 0x0f, + 0x03, 0x97, 0x03, 0xd7, 0x00, 0x37, 0x02, 0xb7, 0x01, 0x3f, 0x05, 0x7e, + 0x0e, 0x3c, 0x01, 0xbc, 0x0c, 0xfc, 0x09, 0xa0, 0x8d, 0x98, 0x6f, 0x60, + 0x2e, 0x50, 0x05, 0xd4, 0x03, 0x4d, 0x40, 0x27, 0x10, 0x04, 0x2e, 0x06, + 0x2e, 0x03, 0xbe, 0x09, 0xdc, 0x0f, 0xfc, 0x0a, 0x78, 0x01, 0x78, 0x05, + 0xf8, 0x1b, 0x60, 0x6d, 0xc3, 0x5a, 0x03, 0x96, 0x01, 0xed, 0x40, 0x3f, + 0x10, 0x05, 0x2e, 0x01, 0x8e, 0x01, 0x5f, 0x06, 0x6e, 0x07, 0x1e, 0x03, + 0x5e, 0x03, 0xde, 0x01, 0x1c, 0x9b, 0xd0, 0x77, 0x60, 0x01, 0xb0, 0x18, + 0x58, 0x09, 0xb4, 0x01, 0xfd, 0x40, 0x00, 0x88, 0x01, 0xff, 0x06, 0x7c, + 0x02, 0xf8, 0x0c, 0x70, 0x2b, 0xf0, 0x14, 0x20, 0xda, 0x61, 0x0f, 0x74, + 0x00, 0xa3, 0xc0, 0x27, 0x80, 0x6f, 0x03, 0xbf, 0x00, 0xfe, 0x0c, 0x94, + 0x74, 0x20, 0x06, 0x03, 0x4b, 0x80, 0x7a, 0xa0, 0x11, 0xd8, 0x05, 0x1c, + 0x03, 0x6e, 0x00, 0x1e, 0x04, 0x1e, 0x05, 0x7e, 0x03, 0x3c, 0x0f, 0xfc, + 0x09, 0xb0, 0x74, 0x12, 0xe5, 0x62, 0x18, 0x5c, 0x40, 0x11, 0x70, 0x1e, + 0x50, 0x01, 0x2c, 0x06, 0x96, 0x00, 0x95, 0x40, 0x15, 0x50, 0x0d, 0x2c, + 0x05, 0x10, 0xf6, 0x09, 0x61, 0x97, 0x10, 0x5e, 0x09, 0xa1, 0x93, 0x10, + 0x1a, 0x09, 0x21, 0x90, 0x10, 0xf2, 0x08, 0x21, 0x8e, 0x10, 0xce, 0x08, + 0x21, 0x8b, 0x10, 0x86, 0x08, 0xcb, 0x9b, 0xb0, 0x2c, 0x09, 0x4b, 0x83, + 0xe0, 0xe6, 0xa4, 0xdd, 0x97, 0xe0, 0x4a, 0x04, 0x37, 0x20, 0x4c, 0x1f, + 0xe9, 0x29, 0x20, 0x0c, 0x0b, 0xa1, 0x8b, 0x84, 0x6e, 0x10, 0x9a, 0x45, + 0x9d, 0x7a, 0xbf, 0xea, 0x06, 0x36, 0x03, 0x5b, 0x00, 0x6c, 0x65, 0xd4, + 0x03, 0x6c, 0x03, 0x7a, 0x81, 0x3e, 0xc0, 0x07, 0x6c, 0x07, 0xfa, 0x81, + 0xf3, 0x79, 0x7f, 0x03, 0x76, 0x02, 0x03, 0xc0, 0x20, 0xb0, 0x0b, 0xb8, + 0x00, 0xf8, 0x10, 0x70, 0x21, 0xb0, 0x1b, 0xf0, 0x03, 0x7b, 0x80, 0x21, + 0x60, 0x18, 0x08, 0x00, 0x23, 0xc0, 0x5e, 0x60, 0x14, 0x08, 0x02, 0x11, + 0xe0, 0x72, 0xe0, 0x0b, 0xc0, 0x17, 0x81, 0x93, 0xc0, 0xd5, 0xa4, 0xc6, + 0x2a, 0xf9, 0x93, 0xa7, 0xe9, 0xae, 0x6a, 0x35, 0x7e, 0x42, 0xa7, 0xdd, + 0x9a, 0x67, 0x79, 0x81, 0xe6, 0x87, 0xc1, 0x17, 0x6a, 0x3e, 0x04, 0x7e, + 0x86, 0xe6, 0x13, 0xe0, 0x67, 0x6a, 0xfe, 0x62, 0x13, 0x7f, 0xd4, 0xc4, + 0x5f, 0x51, 0xad, 0xe6, 0xc6, 0xd0, 0xe5, 0x17, 0x6b, 0x9e, 0xcb, 0x99, + 0xa5, 0xf9, 0xab, 0xc0, 0xcf, 0x01, 0xb5, 0x6b, 0x9b, 0x32, 0x20, 0x03, + 0xb8, 0x56, 0xcb, 0x5d, 0x5a, 0xce, 0x7c, 0xbe, 0x89, 0x9f, 0x65, 0xe2, + 0x4b, 0x35, 0xef, 0xd1, 0xfc, 0x75, 0xc8, 0xbb, 0x50, 0xf3, 0x37, 0xe9, + 0x72, 0x3c, 0x26, 0xfb, 0x05, 0x26, 0x7e, 0xa1, 0xe6, 0x4b, 0x35, 0xcf, + 0x7d, 0x5f, 0xa0, 0xf9, 0x3b, 0x74, 0xde, 0x45, 0xa6, 0xb6, 0xb1, 0x7f, + 0x9d, 0xd1, 0xf2, 0x25, 0x5a, 0x3e, 0x8f, 0x94, 0x6f, 0x71, 0xbf, 0xd8, + 0x86, 0x7d, 0xec, 0x01, 0xf0, 0x73, 0x49, 0xf9, 0xd5, 0xb0, 0xb6, 0x6f, + 0x30, 0xd5, 0xd5, 0xa4, 0xeb, 0x9a, 0xa7, 0x79, 0xce, 0x5b, 0xae, 0xf9, + 0x47, 0xb4, 0xfd, 0x6a, 0x6d, 0xbf, 0x48, 0xf3, 0x4f, 0xeb, 0xf2, 0x99, + 0x7f, 0x5e, 0xdb, 0xac, 0xd5, 0x36, 0x73, 0x35, 0xcf, 0x75, 0xcd, 0xd7, + 0xfc, 0xab, 0xd5, 0x2a, 0x2f, 0xfb, 0xed, 0x5b, 0xda, 0x7e, 0xbd, 0xa9, + 0x2f, 0xec, 0xc3, 0xef, 0xea, 0xfe, 0x32, 0x6f, 0x5d, 0xaa, 0xfc, 0x67, + 0xa3, 0xb6, 0x89, 0x6a, 0x9e, 0xdb, 0x79, 0x40, 0xf3, 0x5c, 0x7e, 0x4c, + 0xf3, 0xd9, 0xb0, 0x8f, 0x6b, 0xbe, 0x18, 0x7c, 0x42, 0xf3, 0xdc, 0x97, + 0x71, 0xcd, 0x97, 0x43, 0x3e, 0xa1, 0x79, 0x6e, 0xcf, 0x41, 0xcd, 0xd7, + 0x43, 0x7e, 0x48, 0xf3, 0x2d, 0xe0, 0x2f, 0xd2, 0x7c, 0x3b, 0xf8, 0xc3, + 0x9a, 0xf7, 0x99, 0xf8, 0x5d, 0xe0, 0x3f, 0x9c, 0x6c, 0x03, 0xf8, 0x8b, + 0x93, 0x75, 0x81, 0xff, 0xa8, 0xe6, 0x13, 0x26, 0xf9, 0xc5, 0x26, 0xfe, + 0x28, 0xf8, 0x8f, 0x6b, 0xfe, 0x0a, 0x93, 0xfc, 0xa4, 0x89, 0x3f, 0x65, + 0xe2, 0x6f, 0x34, 0xf1, 0x3c, 0x3e, 0xc9, 0xf2, 0x6f, 0x86, 0xfc, 0x12, + 0xcd, 0xdf, 0x01, 0xfe, 0x52, 0xcd, 0xdf, 0x03, 0xfe, 0x63, 0x9a, 0x7f, + 0xc4, 0x94, 0xf7, 0x79, 0x13, 0xff, 0xaa, 0x89, 0x7f, 0x13, 0xfc, 0xbf, + 0x25, 0xcb, 0x41, 0xf9, 0x97, 0x69, 0xfe, 0x1d, 0x93, 0x4d, 0xbb, 0x49, + 0xce, 0xc1, 0x2b, 0x29, 0x67, 0xbf, 0x3a, 0x92, 0xac, 0x0b, 0xfc, 0x51, + 0xcd, 0x67, 0xd4, 0x4c, 0xb6, 0xb3, 0x10, 0xfc, 0x31, 0xcd, 0xcf, 0x31, + 0xe5, 0xe5, 0xf5, 0xf8, 0x11, 0xcd, 0x57, 0x98, 0xe4, 0xf5, 0x35, 0x93, + 0xf2, 0x66, 0x53, 0x39, 0xed, 0x26, 0x1b, 0xf6, 0xb7, 0x24, 0xdf, 0x03, + 0xf9, 0x71, 0xcd, 0xef, 0x00, 0xff, 0x09, 0xcd, 0xef, 0x36, 0xd9, 0x47, + 0x4d, 0xfc, 0xa1, 0x1a, 0x15, 0x93, 0xda, 0xb4, 0x5f, 0x7d, 0x52, 0xf3, + 0xec, 0x4b, 0x57, 0x68, 0xfe, 0x48, 0xcd, 0x24, 0x7f, 0x05, 0xf8, 0x4f, + 0x69, 0xfe, 0x24, 0xf8, 0x2b, 0x35, 0xcf, 0x7e, 0xf5, 0x69, 0xcd, 0x9f, + 0x82, 0xfc, 0x84, 0xe6, 0x6f, 0x02, 0xff, 0x59, 0xcd, 0xdf, 0x01, 0xfe, + 0x33, 0x9a, 0x3f, 0x63, 0x96, 0x23, 0xef, 0xe7, 0x34, 0xff, 0x00, 0xe4, + 0x57, 0x69, 0xfe, 0x69, 0x93, 0x7d, 0xbd, 0x89, 0xe7, 0xfe, 0x7e, 0x5e, + 0xf3, 0xdc, 0xc7, 0x1c, 0x44, 0xb4, 0x3b, 0x48, 0xd1, 0x88, 0xe0, 0x78, + 0x2a, 0x68, 0x3f, 0x8f, 0x23, 0x56, 0xf8, 0xad, 0x9a, 0x66, 0x0b, 0xa6, + 0x82, 0x72, 0x35, 0xcd, 0xd3, 0xd4, 0xa5, 0x69, 0xbe, 0xa6, 0x6e, 0xa1, + 0xec, 0xe7, 0x0a, 0xde, 0xa7, 0xd6, 0xd2, 0x4f, 0x89, 0x69, 0x3e, 0xdd, + 0x2b, 0xa9, 0x97, 0x76, 0x4b, 0x79, 0x2d, 0x4d, 0x08, 0xde, 0xc3, 0xf2, + 0xe9, 0x87, 0xc4, 0xb4, 0x92, 0xfe, 0x43, 0x52, 0xa5, 0xaf, 0xd2, 0xfa, + 0x6a, 0xd0, 0x90, 0xa6, 0x9c, 0x5e, 0x8a, 0x16, 0x97, 0x4a, 0x5a, 0x43, + 0x63, 0x82, 0x5d, 0x47, 0xe9, 0x6b, 0xb4, 0xbe, 0x06, 0x9a, 0x43, 0x82, + 0xe3, 0x95, 0x41, 0x39, 0x82, 0x63, 0x55, 0x39, 0xdd, 0x42, 0x4c, 0xab, + 0xe8, 0x4e, 0x49, 0x93, 0xf2, 0x1a, 0x9a, 0x23, 0x69, 0x35, 0x2d, 0x90, + 0xb4, 0x8d, 0x9a, 0x25, 0xcd, 0xa2, 0xd5, 0x82, 0xe3, 0x54, 0x03, 0x85, + 0x60, 0x6f, 0xc3, 0x0e, 0xd9, 0x2a, 0x38, 0x7e, 0xe7, 0xd0, 0xc3, 0xc4, + 0x74, 0x11, 0xfd, 0x11, 0x34, 0x13, 0xf5, 0x38, 0x24, 0xfd, 0x10, 0xb5, + 0x41, 0xef, 0xc4, 0xce, 0xc9, 0xe9, 0x2c, 0x2d, 0xcf, 0xc2, 0x08, 0x6e, + 0x12, 0x3c, 0x9e, 0x2a, 0x9d, 0x8f, 0x7a, 0xe7, 0x09, 0xa6, 0xe7, 0xd3, + 0x06, 0x49, 0x77, 0xd0, 0x56, 0xc1, 0x7b, 0x52, 0x26, 0xbd, 0x4e, 0x8a, + 0xfe, 0x41, 0xd2, 0x36, 0xda, 0x22, 0x78, 0x1f, 0xda, 0x2e, 0xf3, 0x15, + 0x61, 0xd7, 0x64, 0x3a, 0x0b, 0x39, 0x5e, 0x90, 0xb4, 0x83, 0x5a, 0xa0, + 0x2f, 0x41, 0x0f, 0x59, 0x5e, 0x82, 0x72, 0x1f, 0x92, 0xf4, 0x3c, 0x7a, + 0x54, 0xa7, 0x5f, 0xd6, 0xf4, 0x2f, 0xa0, 0xb3, 0xb5, 0x9e, 0xe9, 0x2f, + 0x24, 0x75, 0xd2, 0xd3, 0x3a, 0xfd, 0x7b, 0x49, 0x2d, 0xf4, 0xaa, 0xa4, + 0xb8, 0xd3, 0x68, 0xfa, 0xbf, 0x25, 0x15, 0xf4, 0x77, 0x4d, 0xff, 0x9b, + 0x38, 0xa6, 0x17, 0xd1, 0xdd, 0x92, 0x1a, 0xf4, 0x8c, 0xa6, 0x6f, 0x48, + 0xba, 0x9e, 0xde, 0x91, 0xb4, 0x86, 0xb6, 0x09, 0x8e, 0xd3, 0x6b, 0x65, + 0xbb, 0xe6, 0x62, 0x07, 0xaf, 0x93, 0xe9, 0x21, 0x5a, 0x26, 0x69, 0x1d, + 0xad, 0x10, 0xbc, 0x4f, 0x6d, 0xa1, 0xd3, 0xa4, 0xe8, 0x7a, 0xc1, 0xb1, + 0xdc, 0x4d, 0x4f, 0x12, 0xc7, 0x6b, 0x83, 0x2e, 0x14, 0x1c, 0xab, 0x6b, + 0x28, 0x53, 0xd3, 0x1e, 0x4d, 0x77, 0x08, 0xde, 0x3b, 0x76, 0xd3, 0x2c, + 0xc1, 0xfb, 0x56, 0xb7, 0x2c, 0x7f, 0x21, 0x46, 0xa2, 0x5c, 0xa6, 0x97, + 0xd2, 0x3a, 0xc1, 0xfb, 0x80, 0x1a, 0xe7, 0xf3, 0x70, 0x2a, 0x51, 0x74, + 0x29, 0xfd, 0x48, 0xd2, 0x0c, 0xfa, 0x95, 0xa6, 0x8f, 0x4b, 0xea, 0xa2, + 0xa7, 0x88, 0xf7, 0xb6, 0x51, 0xca, 0x12, 0x4c, 0xbb, 0x68, 0xa3, 0xa4, + 0xfb, 0x68, 0x40, 0xfa, 0x65, 0xaf, 0xcc, 0x5f, 0x89, 0x1d, 0xe3, 0x76, + 0x49, 0xfb, 0xe9, 0x07, 0x92, 0x56, 0xd1, 0x9f, 0x25, 0xdd, 0x44, 0x2b, + 0xa5, 0x5d, 0x3b, 0x35, 0x08, 0x95, 0x6e, 0x14, 0xca, 0x6e, 0x95, 0xa4, + 0x1b, 0x29, 0xaa, 0xe9, 0x01, 0x4d, 0x63, 0x9a, 0xc6, 0xa5, 0x5f, 0xfb, + 0x64, 0xf9, 0x55, 0xba, 0x7d, 0x55, 0xba, 0x3d, 0x55, 0xd8, 0x99, 0xba, + 0xa4, 0x9f, 0xf7, 0x49, 0x7d, 0x35, 0x4e, 0x13, 0x77, 0x4b, 0x5a, 0x4d, + 0xf7, 0xeb, 0xf4, 0x03, 0x92, 0xee, 0xa1, 0x35, 0xd2, 0xff, 0x7b, 0xa4, + 0xdd, 0x52, 0xfc, 0x7a, 0xa5, 0xdf, 0xab, 0x7c, 0x18, 0x35, 0xfa, 0x77, + 0x4d, 0xbf, 0x2c, 0xe9, 0x5c, 0xfa, 0x0a, 0xa9, 0x75, 0x31, 0xa8, 0xd7, + 0xc7, 0x2e, 0xb9, 0x3e, 0x96, 0x49, 0x7b, 0x5e, 0x27, 0xbf, 0x94, 0xd4, + 0x41, 0x8f, 0xe8, 0xf4, 0xb3, 0x9a, 0x3e, 0xa7, 0xe9, 0x8b, 0x92, 0x56, + 0xd0, 0x9b, 0x3a, 0xfd, 0x27, 0x49, 0x07, 0xa8, 0x50, 0x96, 0xb3, 0x9b, + 0x8a, 0x25, 0xf5, 0x52, 0xa7, 0xa4, 0x83, 0xd4, 0x27, 0xd7, 0x51, 0x8b, + 0x2c, 0xbf, 0x16, 0xa7, 0xb8, 0x6b, 0x24, 0xb5, 0xd1, 0x97, 0x24, 0x5d, + 0x45, 0xd7, 0x4a, 0x9a, 0x4d, 0xa7, 0x24, 0xdd, 0x46, 0x5f, 0x95, 0xb4, + 0x90, 0xbe, 0x26, 0x69, 0x88, 0xbe, 0x2e, 0xe9, 0x02, 0xba, 0x4e, 0xd3, + 0xeb, 0x75, 0xfe, 0x6f, 0x48, 0xba, 0x9f, 0x6e, 0x90, 0x74, 0x39, 0xdd, + 0x28, 0xe9, 0x62, 0xfa, 0xa6, 0xa4, 0x8d, 0xf4, 0x2d, 0x6d, 0xf7, 0x6d, + 0x4d, 0x6f, 0x92, 0xd4, 0x4e, 0xdf, 0xd1, 0xe9, 0xef, 0x4a, 0xba, 0x94, + 0xbe, 0xaf, 0xe9, 0x5d, 0x9a, 0xfe, 0x58, 0x52, 0x3f, 0xfd, 0xa7, 0xa4, + 0xcb, 0xe8, 0x1e, 0x49, 0x9b, 0xe8, 0x67, 0x92, 0x96, 0xd1, 0x83, 0x92, + 0x96, 0xd0, 0xcf, 0x25, 0xcd, 0xa1, 0x27, 0x24, 0x2d, 0xa5, 0x5f, 0x93, + 0x8a, 0x17, 0xbf, 0xd1, 0x71, 0xe5, 0x19, 0x6d, 0xff, 0x5b, 0x49, 0xe7, + 0xd0, 0xef, 0x24, 0xb5, 0xd0, 0xf3, 0x92, 0x5e, 0x48, 0x2f, 0x49, 0x5a, + 0x40, 0xaf, 0x48, 0xea, 0xa6, 0xd7, 0x24, 0x9d, 0x41, 0x6f, 0xe9, 0xfc, + 0x7f, 0x95, 0x74, 0x26, 0xfd, 0x4d, 0xd2, 0x3c, 0x7a, 0x5b, 0x52, 0xb5, + 0xbe, 0x6a, 0x71, 0x9a, 0xff, 0x87, 0x6e, 0xdf, 0xbb, 0x9a, 0xfe, 0x1f, + 0x4d, 0xff, 0x29, 0xe9, 0x4a, 0x7a, 0x4f, 0xd2, 0x15, 0xf2, 0x70, 0xca, + 0xe3, 0x23, 0x84, 0xd2, 0x1b, 0x42, 0xe5, 0xb7, 0x68, 0x6a, 0xd5, 0xd4, + 0x26, 0x69, 0x03, 0xd9, 0x25, 0x1d, 0x21, 0x87, 0x50, 0xe3, 0xe1, 0x94, + 0x74, 0x37, 0x15, 0x69, 0x5a, 0x22, 0xe9, 0x6a, 0x5a, 0x24, 0x69, 0x33, + 0x9d, 0xa7, 0x69, 0x85, 0xa6, 0x8b, 0xb5, 0x7e, 0x89, 0x4e, 0x57, 0x6a, + 0x5a, 0x25, 0xe9, 0x6c, 0xaa, 0x96, 0x74, 0x1d, 0x2d, 0x95, 0x74, 0x33, + 0xd5, 0x48, 0x1a, 0xa4, 0x5a, 0x49, 0x55, 0x9c, 0xa8, 0xd5, 0x71, 0x82, + 0xd3, 0xf5, 0x92, 0x5e, 0x40, 0xcb, 0x25, 0x55, 0x71, 0x83, 0xed, 0x9b, + 0x24, 0xdd, 0x4b, 0x6b, 0x25, 0xdd, 0x45, 0xed, 0x9a, 0x76, 0x48, 0xda, + 0x49, 0x9b, 0x25, 0xdd, 0x4a, 0xbd, 0x92, 0x0e, 0x90, 0x4f, 0xc7, 0xf9, + 0xed, 0xda, 0xae, 0x5f, 0xd3, 0xf3, 0x25, 0xad, 0xa5, 0x9d, 0x42, 0xf9, + 0x85, 0x5f, 0x28, 0x3f, 0xd9, 0xa3, 0xd3, 0x43, 0x9a, 0x0e, 0x6b, 0x1a, + 0x10, 0xca, 0xcf, 0x46, 0x74, 0x7a, 0xaf, 0x50, 0xfe, 0x36, 0x2a, 0x94, + 0x7f, 0x07, 0xf5, 0x78, 0xef, 0x13, 0xca, 0xbf, 0xf7, 0xeb, 0x71, 0x3f, + 0x28, 0xf8, 0x7c, 0x3c, 0x8f, 0x2e, 0x90, 0xf4, 0x3c, 0x0a, 0x0b, 0x3e, + 0x23, 0x2f, 0xa1, 0xff, 0x45, 0xbc, 0xbf, 0x18, 0x34, 0x43, 0xee, 0x33, + 0xf3, 0x69, 0x5c, 0xf0, 0x99, 0x57, 0xc5, 0xaf, 0xd5, 0x88, 0x8c, 0x8f, + 0x49, 0xaa, 0xec, 0xd7, 0xc2, 0x7f, 0x7e, 0x42, 0x4c, 0xad, 0x74, 0x46, + 0xd2, 0x30, 0xdd, 0x27, 0xa9, 0xda, 0x4f, 0x58, 0xbe, 0x50, 0xd2, 0x0a, + 0xfa, 0x90, 0xe0, 0xb3, 0xf0, 0x42, 0x9a, 0x29, 0xf8, 0x1e, 0xa7, 0xca, + 0x6b, 0xa5, 0x31, 0xba, 0x4d, 0xd2, 0x4a, 0x9a, 0x2d, 0xf8, 0x7c, 0xbc, + 0x9b, 0x32, 0x24, 0x2d, 0xa7, 0x32, 0xa1, 0xee, 0x91, 0x2e, 0x52, 0x67, + 0xee, 0x16, 0x9c, 0x09, 0xb2, 0x41, 0x77, 0xe3, 0x52, 0x77, 0x84, 0x2f, + 0x79, 0xa4, 0xee, 0x98, 0x2e, 0x52, 0xf7, 0x4f, 0xfe, 0x61, 0xfd, 0x21, + 0xe8, 0x7f, 0xac, 0xf5, 0xd5, 0x5a, 0xbf, 0xc8, 0xa4, 0x3f, 0x0e, 0xfd, + 0xd3, 0x5a, 0xbf, 0x54, 0xcb, 0xb9, 0xfc, 0x76, 0x5d, 0xfe, 0x8d, 0xd0, + 0xbf, 0xad, 0xf5, 0x35, 0xa6, 0xfa, 0x93, 0xf9, 0xcf, 0x40, 0xef, 0xec, + 0x56, 0x69, 0xbe, 0x77, 0x88, 0xb3, 0xf4, 0x4f, 0x43, 0x5f, 0xa7, 0xf5, + 0x7c, 0x17, 0xe1, 0x7b, 0x13, 0xdf, 0x0f, 0x7a, 0x74, 0xf9, 0x6f, 0x42, + 0xbf, 0x4f, 0xeb, 0xed, 0xc8, 0x6d, 0xe1, 0x3a, 0x97, 0xa8, 0x7b, 0xf1, + 0x01, 0x57, 0x23, 0x66, 0xd0, 0x09, 0xda, 0xc0, 0x54, 0xac, 0xc2, 0xb8, + 0x35, 0x09, 0x0b, 0x55, 0x94, 0x87, 0x5d, 0xbf, 0x84, 0x24, 0xdb, 0x56, + 0x66, 0xb4, 0x52, 0xd4, 0xf5, 0x14, 0xc6, 0xb7, 0xcc, 0x52, 0x44, 0x6e, + 0x6b, 0xd8, 0xfb, 0x28, 0x62, 0x37, 0xe7, 0x78, 0x48, 0xd6, 0x2f, 0xd3, + 0xc2, 0x69, 0xe3, 0x34, 0xdb, 0x47, 0xbd, 0x2e, 0xb2, 0xd8, 0xc2, 0x9e, + 0xa7, 0x51, 0x7e, 0xbe, 0xe1, 0xb6, 0xe5, 0xdb, 0xac, 0x98, 0x13, 0xbe, + 0xfb, 0xdd, 0xba, 0x84, 0xf7, 0x7f, 0x9c, 0x15, 0x5d, 0xbc, 0xf3, 0x0e, + 0x8a, 0x5c, 0x1a, 0x34, 0xb2, 0x69, 0xd0, 0x92, 0x43, 0x07, 0x3c, 0x6d, + 0xb0, 0xe6, 0x3b, 0xab, 0x91, 0xba, 0x3d, 0xaa, 0x7e, 0xb2, 0xcc, 0x86, + 0x5f, 0xe6, 0x7f, 0xbc, 0x44, 0xbd, 0xfb, 0x8d, 0xb9, 0x7e, 0x86, 0x74, + 0xb6, 0x18, 0x14, 0x59, 0x29, 0x3d, 0xe7, 0xba, 0x7f, 0x89, 0xba, 0x4b, + 0xfa, 0x44, 0x36, 0xf9, 0x0c, 0x2e, 0xb5, 0x1d, 0xde, 0x94, 0x8b, 0x3c, + 0x0e, 0xa9, 0x7f, 0xe4, 0x1c, 0xfa, 0x64, 0xfe, 0x67, 0xce, 0xa1, 0xcf, + 0x84, 0x9e, 0xc7, 0xec, 0x65, 0xe8, 0xf9, 0x0c, 0xe4, 0x6b, 0xc9, 0xa6, + 0x65, 0x3d, 0x41, 0xd0, 0x2c, 0x78, 0x3d, 0xc6, 0x6a, 0xe8, 0xe6, 0xd1, + 0x98, 0xf7, 0x01, 0x0a, 0x64, 0x64, 0xdb, 0xb8, 0x6d, 0x3c, 0x0a, 0x25, + 0x19, 0x06, 0x85, 0x3d, 0x8f, 0xe1, 0x4c, 0xef, 0xcc, 0x70, 0x53, 0x63, + 0x46, 0x0e, 0x95, 0x64, 0x58, 0x52, 0x92, 0x06, 0xf0, 0x15, 0x16, 0x91, + 0x51, 0x61, 0x29, 0xc8, 0x68, 0x45, 0x3c, 0x11, 0x52, 0x33, 0x03, 0xe3, + 0xdf, 0x20, 0xac, 0x54, 0x90, 0xb1, 0x9a, 0x7c, 0xeb, 0x72, 0xc8, 0xd7, + 0x9a, 0x25, 0x47, 0xd7, 0xb0, 0x3b, 0x0d, 0xdf, 0xfa, 0x2c, 0xba, 0x79, + 0x82, 0x53, 0x16, 0xbb, 0xd3, 0x1e, 0xf6, 0x06, 0x68, 0xbe, 0xdd, 0xd7, + 0x96, 0x43, 0x0d, 0x19, 0x98, 0x01, 0xd7, 0xaf, 0x78, 0xee, 0x1c, 0x4f, + 0x3b, 0x1c, 0xef, 0x85, 0xbd, 0x4f, 0x90, 0xcd, 0x91, 0x8d, 0xf1, 0x1f, + 0xc2, 0x0e, 0xcc, 0x5a, 0xdf, 0xc6, 0x5c, 0x2a, 0xb3, 0x97, 0x50, 0xd4, + 0x5b, 0x40, 0xf6, 0x8c, 0xb0, 0xf7, 0x26, 0xba, 0xcc, 0xee, 0xdb, 0x08, + 0x79, 0x9b, 0xea, 0x61, 0x80, 0xdc, 0xb6, 0xc1, 0x8d, 0x59, 0x72, 0x1c, + 0x0c, 0xd9, 0xcf, 0x7f, 0x2c, 0x51, 0xfe, 0x13, 0x76, 0x7d, 0x08, 0x33, + 0xe7, 0x04, 0xbd, 0x90, 0xa9, 0x75, 0x15, 0x5a, 0xd8, 0x64, 0x45, 0xcb, + 0xf3, 0xd9, 0x37, 0x2c, 0x98, 0x01, 0xb7, 0x11, 0xf6, 0x3e, 0x8e, 0x31, + 0x82, 0x0d, 0x53, 0xab, 0xd3, 0x7a, 0xc0, 0x9b, 0x4b, 0x16, 0x6b, 0xae, + 0x9c, 0x47, 0x1e, 0x53, 0x47, 0xa5, 0x1a, 0xd3, 0x03, 0xfc, 0x32, 0x8f, + 0xbd, 0xc5, 0x33, 0xc2, 0x27, 0xe6, 0x94, 0x3e, 0xb7, 0x52, 0xcd, 0xe9, + 0x01, 0x4f, 0x07, 0xfc, 0xfe, 0x80, 0x67, 0x13, 0x9e, 0x6a, 0x4e, 0x55, + 0x5b, 0x66, 0x56, 0xaa, 0xb6, 0x1c, 0x70, 0xe5, 0x20, 0xcd, 0x5e, 0x97, + 0xcd, 0x54, 0xc8, 0xb6, 0x08, 0x53, 0x5b, 0x2c, 0xdc, 0x96, 0x47, 0xb1, + 0x3b, 0x3a, 0xe5, 0x98, 0x2d, 0x10, 0x4e, 0x0b, 0x8f, 0x92, 0xd5, 0x92, + 0x2b, 0x7d, 0xde, 0x86, 0x32, 0xca, 0x2a, 0xd5, 0xba, 0xf1, 0xf5, 0xe4, + 0x21, 0xee, 0x58, 0xb0, 0x4e, 0x7c, 0x3d, 0xf9, 0x98, 0xc1, 0x4c, 0x8a, + 0xb8, 0x56, 0xf1, 0xac, 0xd1, 0x20, 0x34, 0xf9, 0xe8, 0x2f, 0xbf, 0x75, + 0x71, 0x92, 0x6f, 0x5b, 0x3e, 0x71, 0xa9, 0x7e, 0xf4, 0x30, 0x1b, 0xd1, + 0x61, 0x06, 0x45, 0x3d, 0x79, 0x28, 0x6b, 0x70, 0x5b, 0x1e, 0x76, 0xb5, + 0x4a, 0xe8, 0xdd, 0xe4, 0xeb, 0xcb, 0x23, 0x9f, 0x2f, 0x9f, 0xa2, 0x2d, + 0x6b, 0xc8, 0xb5, 0x7e, 0xb0, 0xc7, 0x05, 0x69, 0x1e, 0x3c, 0x34, 0x13, + 0x76, 0x4e, 0x4b, 0x81, 0xd5, 0x4d, 0x31, 0x5f, 0x16, 0x89, 0x3a, 0x9f, + 0x2c, 0x19, 0x77, 0x6e, 0xfc, 0x72, 0xbf, 0x6a, 0xf4, 0xb8, 0x44, 0xbd, + 0x2b, 0xc8, 0x65, 0x0c, 0x0a, 0x37, 0xd6, 0x41, 0x3e, 0x7a, 0x6e, 0x41, + 0x3e, 0x1e, 0x97, 0x46, 0xdd, 0x6f, 0x9f, 0x87, 0xdb, 0x9a, 0x49, 0xbe, + 0xf9, 0x2e, 0x9c, 0xaf, 0x6c, 0x14, 0xf3, 0x38, 0x31, 0x42, 0xb0, 0x86, + 0x7c, 0xd0, 0x93, 0x8f, 0x96, 0xaf, 0x84, 0xfd, 0x6e, 0xa0, 0x40, 0xcc, + 0xa3, 0x7a, 0x97, 0x1d, 0xba, 0xb0, 0x67, 0x33, 0xd2, 0xb9, 0x28, 0xdf, + 0x90, 0xfd, 0xde, 0x50, 0xa9, 0xde, 0x57, 0xf9, 0x76, 0x17, 0x60, 0xfc, + 0xf8, 0x16, 0x93, 0x45, 0x33, 0x0d, 0x19, 0x2b, 0x0c, 0xb7, 0x60, 0x0f, + 0xce, 0x17, 0x26, 0x9d, 0x71, 0xa0, 0x65, 0x8c, 0x3c, 0xf1, 0x6c, 0xd4, + 0xeb, 0xc0, 0x58, 0xcc, 0xe7, 0x79, 0x73, 0xe4, 0x3b, 0x64, 0x1d, 0xc6, + 0x5c, 0xaa, 0x47, 0x0b, 0xca, 0x10, 0x55, 0x7d, 0x43, 0x85, 0x68, 0x7d, + 0x1d, 0x79, 0x1d, 0x15, 0x0e, 0xdf, 0xee, 0x42, 0xcc, 0xdd, 0x32, 0x8a, + 0x62, 0x9c, 0x7c, 0x43, 0xaa, 0x24, 0x0b, 0x65, 0x59, 0x0f, 0xf4, 0x84, + 0x69, 0xfd, 0xb8, 0xd3, 0xd1, 0xe8, 0x70, 0xd2, 0x6e, 0x87, 0x41, 0xcb, + 0xcf, 0xb3, 0xa1, 0x44, 0x7e, 0x0f, 0x97, 0x2f, 0xf2, 0x31, 0x2f, 0x6a, + 0x8e, 0x7b, 0x2b, 0x55, 0x2c, 0xf2, 0xb5, 0x9c, 0xbb, 0x7d, 0x6e, 0xd7, + 0x32, 0x1b, 0x56, 0xc4, 0x46, 0x65, 0x61, 0xe3, 0x56, 0x7a, 0x23, 0xb4, + 0xd0, 0x92, 0x6d, 0xab, 0xc8, 0x4a, 0x97, 0x46, 0xa5, 0xb4, 0xc1, 0x86, + 0xb5, 0xe3, 0xfa, 0x39, 0xaf, 0x0b, 0xac, 0x85, 0xad, 0x38, 0x65, 0x66, + 0x23, 0x12, 0xe5, 0x0b, 0x27, 0xc6, 0x9f, 0xdf, 0x3d, 0x5d, 0x50, 0xa9, + 0xde, 0x8f, 0x4c, 0x37, 0x26, 0x8d, 0xb0, 0x71, 0x3b, 0xf2, 0x1c, 0x26, + 0x9d, 0x10, 0x71, 0x71, 0xd4, 0xf1, 0xf9, 0x83, 0x76, 0x7e, 0x17, 0xe2, + 0x84, 0xce, 0x22, 0x67, 0x8a, 0x68, 0xa4, 0x52, 0xbd, 0xcb, 0x2a, 0x13, + 0x2a, 0x4a, 0xf2, 0xad, 0x2f, 0xa9, 0x1b, 0xd3, 0x73, 0x3c, 0x28, 0x0a, + 0xa0, 0xe3, 0x37, 0x8f, 0x83, 0x46, 0xa1, 0xf6, 0x7d, 0xd6, 0x8f, 0x57, + 0xf2, 0x7d, 0x89, 0xf5, 0x33, 0x75, 0x4c, 0x74, 0x8b, 0x5d, 0xf0, 0xb2, + 0x5c, 0x53, 0x9c, 0xbe, 0xb8, 0x52, 0xbd, 0x33, 0x2c, 0x43, 0xe4, 0x8c, + 0xba, 0x64, 0x74, 0xda, 0x36, 0x93, 0x7c, 0xf9, 0x45, 0xe8, 0xdd, 0x27, + 0x65, 0x14, 0x6c, 0x44, 0xee, 0x94, 0xcc, 0x73, 0x02, 0xb2, 0x49, 0x8b, + 0xcb, 0xd8, 0x0b, 0x45, 0xaf, 0xc1, 0xef, 0x21, 0x05, 0x55, 0x64, 0x87, + 0x3d, 0xe5, 0xa0, 0x61, 0x57, 0x59, 0x9a, 0xfc, 0x16, 0xe3, 0x96, 0xf9, + 0x05, 0x38, 0x6f, 0x2e, 0x17, 0x25, 0xb4, 0xbd, 0x77, 0x06, 0x35, 0x18, + 0x33, 0xe1, 0xf7, 0xbb, 0xc0, 0xf9, 0x7a, 0x51, 0x52, 0x59, 0x11, 0xbc, + 0x7c, 0x26, 0x46, 0x62, 0x87, 0x5c, 0x67, 0x7a, 0x6e, 0x2d, 0x07, 0xbc, + 0x21, 0xaa, 0xb3, 0xb2, 0x7d, 0xa3, 0xe1, 0xc0, 0x1d, 0xc0, 0x46, 0x6e, + 0xd7, 0xae, 0x9e, 0x19, 0xf2, 0xa6, 0x2c, 0x64, 0xfc, 0xfe, 0x14, 0xda, + 0xce, 0x7d, 0xf0, 0xe1, 0xac, 0xce, 0xbe, 0xcf, 0xe3, 0xc2, 0xbe, 0xfd, + 0xb9, 0x4a, 0xf5, 0x4e, 0x72, 0x50, 0x14, 0xe9, 0x7e, 0x97, 0x89, 0xa5, + 0x58, 0x5b, 0x7d, 0xbc, 0xb6, 0xc4, 0x2c, 0x8c, 0x52, 0xb1, 0x1c, 0x03, + 0xa1, 0x4b, 0xe2, 0x72, 0xac, 0x72, 0xdf, 0xd8, 0x49, 0xa4, 0xcb, 0x4f, + 0x97, 0x0f, 0x48, 0x79, 0x72, 0xed, 0x9c, 0xaa, 0x54, 0xfb, 0x9e, 0xcf, + 0x53, 0x8c, 0xbe, 0x5e, 0x21, 0xe3, 0x8e, 0x6f, 0xfe, 0x2c, 0x8c, 0xce, + 0x12, 0x19, 0x5d, 0x92, 0x76, 0xd7, 0x9f, 0xd3, 0xae, 0x32, 0xcd, 0xee, + 0x5b, 0x3a, 0x46, 0xf5, 0x79, 0x4a, 0xe0, 0xe5, 0xa3, 0xd0, 0x39, 0x65, + 0xfb, 0x93, 0xfa, 0xef, 0xa5, 0xe9, 0x27, 0x52, 0x7a, 0xab, 0xf6, 0xef, + 0xd3, 0x66, 0xbd, 0xf7, 0x10, 0xb9, 0x2c, 0x4e, 0x4b, 0x9e, 0x65, 0x32, + 0xff, 0x9d, 0x69, 0xf9, 0x83, 0x53, 0xca, 0xff, 0x49, 0x9a, 0xfe, 0xc0, + 0x14, 0xfd, 0x3d, 0x69, 0xfa, 0xc3, 0x53, 0xf4, 0x3f, 0x4b, 0xd3, 0x1f, + 0x4c, 0xe9, 0x79, 0x57, 0xe3, 0xf1, 0x7b, 0xd8, 0xac, 0x6f, 0x49, 0x20, + 0x8e, 0x65, 0x5b, 0xf2, 0x2d, 0x6a, 0xbe, 0x78, 0x9c, 0x9f, 0xd0, 0x3e, + 0xae, 0xe6, 0x6a, 0x00, 0x5e, 0x92, 0x9b, 0xea, 0xdb, 0x33, 0x5a, 0xa7, + 0xfa, 0x36, 0x8e, 0xbe, 0xe5, 0xa6, 0xca, 0x7d, 0xc1, 0xac, 0x6b, 0x89, + 0xa3, 0xdc, 0xc9, 0x7c, 0xaf, 0xa6, 0xe5, 0xdb, 0x27, 0xf3, 0x59, 0xe5, + 0x2f, 0xd1, 0x1f, 0x2b, 0x49, 0xc6, 0xad, 0x68, 0xcb, 0xe5, 0xe4, 0xaa, + 0xcb, 0x96, 0xbe, 0x63, 0x68, 0x9f, 0xfa, 0x6b, 0xd2, 0xa7, 0x5c, 0xf3, + 0xa4, 0x9c, 0x77, 0x76, 0xce, 0xf3, 0xdf, 0x3a, 0xb6, 0xf7, 0xf5, 0x94, + 0x22, 0x2a, 0x7d, 0x0c, 0x67, 0xf9, 0x6c, 0x79, 0x4e, 0x1f, 0xf4, 0x5b, + 0x00, 0xac, 0x67, 0x63, 0xe7, 0x1e, 0xc4, 0xc6, 0xbf, 0xa8, 0x98, 0xc6, + 0x6f, 0xd9, 0x9d, 0xd6, 0x0a, 0x43, 0xd4, 0xef, 0x1c, 0xce, 0xe0, 0x13, + 0xbf, 0xdc, 0xe3, 0x20, 0xb3, 0xec, 0x1c, 0x72, 0xc0, 0xde, 0xc9, 0x67, + 0xd1, 0x9e, 0x9d, 0x7e, 0x1b, 0x74, 0xbc, 0xff, 0xed, 0x66, 0x9d, 0x38, + 0xe0, 0x3a, 0xce, 0xeb, 0x06, 0x25, 0x65, 0x62, 0x47, 0xad, 0x22, 0x77, + 0x7e, 0xb4, 0xa5, 0x13, 0xa7, 0xe8, 0xc1, 0xfe, 0x39, 0x94, 0x6f, 0x9f, + 0x1c, 0x6f, 0x67, 0x95, 0x3a, 0xe7, 0x84, 0x5d, 0x97, 0x22, 0xcd, 0xed, + 0x28, 0x10, 0x61, 0x8f, 0x81, 0x71, 0xcf, 0xc6, 0xe9, 0x77, 0x89, 0xee, + 0x8f, 0xda, 0xff, 0xf2, 0xaa, 0x54, 0x5f, 0x0f, 0x78, 0xee, 0x31, 0xcd, + 0x8b, 0x4d, 0xca, 0x0a, 0xb5, 0x2e, 0xea, 0xbb, 0x15, 0xe3, 0xa0, 0x74, + 0x76, 0xf9, 0x8b, 0xd8, 0xa5, 0x75, 0x13, 0xf6, 0x7f, 0x97, 0x7b, 0x55, + 0x9e, 0x5e, 0x5f, 0xc9, 0x1f, 0x2e, 0xdb, 0x9d, 0x9f, 0x27, 0x92, 0xe3, + 0xb6, 0xb0, 0x4a, 0x8d, 0xdb, 0x76, 0x97, 0x47, 0xda, 0x1a, 0x7a, 0x0d, + 0x2d, 0xa9, 0xe2, 0xdc, 0xdc, 0xd6, 0x4f, 0x71, 0xdf, 0x48, 0xc6, 0x3e, + 0x57, 0x1e, 0x76, 0x91, 0x3c, 0x44, 0x44, 0x43, 0xc6, 0xaf, 0x9a, 0x2a, + 0xf5, 0xfe, 0xd8, 0x77, 0x62, 0x36, 0xec, 0x6a, 0x65, 0x7d, 0x0d, 0xb8, + 0xff, 0xf5, 0x7d, 0xb6, 0x14, 0xe9, 0x59, 0x48, 0x39, 0xad, 0x61, 0x57, + 0x29, 0x53, 0x5b, 0xd8, 0x35, 0x97, 0xa9, 0x3d, 0xec, 0x2a, 0x01, 0xcd, + 0x72, 0x38, 0x3e, 0x33, 0x91, 0xf1, 0x19, 0x7e, 0x07, 0x56, 0x92, 0xe7, + 0x74, 0x3b, 0xf3, 0x9c, 0x59, 0x68, 0x05, 0xb7, 0x7f, 0x45, 0x95, 0xfa, + 0x4c, 0xa6, 0xef, 0x48, 0x69, 0x7a, 0xdc, 0xcd, 0xcc, 0xcb, 0x0c, 0xbb, + 0x2e, 0x46, 0xbd, 0xee, 0x16, 0x77, 0x7e, 0x5d, 0xa6, 0x07, 0xf7, 0xc3, + 0x62, 0xaa, 0xcb, 0x9c, 0x09, 0x3a, 0x0b, 0xd4, 0x4d, 0x7d, 0x1f, 0xe3, + 0x5a, 0x8b, 0x74, 0x2d, 0x33, 0x99, 0x3a, 0x1c, 0x97, 0x8a, 0xcf, 0x4f, + 0xd8, 0xbf, 0x80, 0xf6, 0xe6, 0x09, 0xf1, 0xf9, 0x88, 0xf7, 0x3c, 0xda, + 0xe1, 0x74, 0xca, 0x92, 0x2e, 0x42, 0x49, 0xfc, 0x5e, 0x2e, 0x5b, 0xc7, + 0xfd, 0xf6, 0x2a, 0xf5, 0xd9, 0x8e, 0xb9, 0x5e, 0xb5, 0xc7, 0xe4, 0x89, + 0xc6, 0x4c, 0xaf, 0xda, 0x49, 0x8d, 0x52, 0x5a, 0xee, 0xe1, 0x79, 0x2f, + 0xc4, 0x18, 0x38, 0xc9, 0xbd, 0xa0, 0xce, 0x8b, 0x93, 0xc6, 0xfc, 0xdd, + 0x4e, 0xec, 0x60, 0x4b, 0xb8, 0xf6, 0x19, 0x90, 0x67, 0x3b, 0x1b, 0x9c, + 0x45, 0x29, 0x3e, 0xec, 0x79, 0x04, 0x23, 0xe2, 0xb4, 0xab, 0xd6, 0xcd, + 0xe4, 0x7c, 0xa6, 0x56, 0xb9, 0x67, 0xe5, 0x65, 0xca, 0x96, 0xb5, 0x54, + 0xd0, 0x8e, 0x3b, 0xb9, 0x65, 0x0e, 0xd4, 0xc8, 0xf3, 0xb7, 0xb3, 0x4a, + 0x7d, 0xf6, 0xd2, 0xd7, 0xa2, 0xdb, 0x03, 0xb7, 0x68, 0x34, 0x30, 0x0e, + 0xb6, 0x3c, 0x1b, 0xf7, 0xd2, 0x8e, 0x32, 0xa3, 0xfd, 0x5f, 0x24, 0xeb, + 0x36, 0xf7, 0x8c, 0x3c, 0x1b, 0xdf, 0x0d, 0xd4, 0x9c, 0xf8, 0x91, 0x8f, + 0xef, 0xad, 0x7d, 0xcf, 0x4f, 0xed, 0x47, 0xd8, 0x55, 0x8c, 0xd9, 0xe3, + 0xf6, 0x97, 0xf0, 0x2c, 0x66, 0x3c, 0x61, 0xbc, 0x87, 0xf1, 0x6f, 0x30, + 0x9e, 0xa5, 0xba, 0xaf, 0x7d, 0x82, 0xdc, 0x95, 0x75, 0xb7, 0x1e, 0x27, + 0xf7, 0xb2, 0xba, 0xba, 0x8f, 0x91, 0xbb, 0xaf, 0xd0, 0xca, 0xd7, 0xe4, + 0xba, 0xba, 0x56, 0x72, 0x0f, 0xd5, 0xd5, 0x71, 0xee, 0xdb, 0x5b, 0x5e, + 0xc0, 0xb6, 0xd5, 0x88, 0xf3, 0x55, 0xdf, 0x4b, 0xe8, 0x8b, 0x67, 0x0e, + 0x7c, 0x96, 0xe7, 0xb5, 0x94, 0xcb, 0xb4, 0xf3, 0xfc, 0xe6, 0x71, 0xdf, + 0x5e, 0x9c, 0xc8, 0xf8, 0x12, 0xda, 0x52, 0x51, 0xee, 0x78, 0x71, 0xc1, + 0x6d, 0xed, 0xb0, 0xfb, 0x04, 0xad, 0x21, 0xc7, 0xf2, 0xbe, 0x05, 0xa5, + 0xe4, 0xe8, 0xe7, 0x5c, 0x79, 0x72, 0xe7, 0x9d, 0x27, 0xad, 0x37, 0x08, + 0xbb, 0xb8, 0x34, 0xff, 0xbe, 0xa2, 0xb0, 0x87, 0xbd, 0xcf, 0x99, 0xb7, + 0x81, 0xec, 0xce, 0x4b, 0xe9, 0xbe, 0x3c, 0x31, 0x21, 0xde, 0x56, 0xe5, + 0xe4, 0x39, 0x1d, 0x2f, 0x26, 0x6b, 0x2e, 0x24, 0x2e, 0xe5, 0x5c, 0x35, + 0x4f, 0x64, 0x5c, 0xcd, 0xf5, 0x2e, 0xf8, 0xff, 0xad, 0xf5, 0x6a, 0x5d, + 0x6b, 0xc5, 0x1a, 0xc7, 0x8b, 0xef, 0x5f, 0xdf, 0x35, 0xb0, 0x0c, 0xbb, + 0x66, 0xcb, 0x31, 0x5d, 0x79, 0x6a, 0x11, 0x2d, 0xf8, 0x0f, 0x55, 0xf3, + 0x8f, 0x49, 0xdc, 0xb4, 0x3c, 0x7b, 0x6e, 0xaa, 0xb5, 0xbf, 0xd4, 0x75, + 0x83, 0xda, 0x37, 0x38, 0xb2, 0xc4, 0xa5, 0x07, 0xef, 0x9b, 0xe0, 0xba, + 0x7f, 0xc9, 0x6d, 0xc9, 0xc9, 0x72, 0x5e, 0xfa, 0xdc, 0x7d, 0x4f, 0xa9, + 0xd2, 0x9e, 0xce, 0xce, 0x16, 0x15, 0x2f, 0xe5, 0x39, 0xdf, 0xbf, 0xde, + 0xe4, 0xb8, 0x7c, 0xf0, 0x68, 0xe4, 0x39, 0x6d, 0x7a, 0xf5, 0x7f, 0xb6, + 0x4a, 0x7d, 0xae, 0x17, 0xf5, 0x1e, 0xc5, 0xee, 0x9c, 0x65, 0xe1, 0xcf, + 0xe6, 0xf8, 0x9d, 0x4b, 0x03, 0xbc, 0xa6, 0x0c, 0xb7, 0xc7, 0xa8, 0x77, + 0x90, 0xbc, 0x56, 0x9c, 0x6b, 0x11, 0xe1, 0xa7, 0xc6, 0xa0, 0x1f, 0xa7, + 0x62, 0xd0, 0x54, 0xdd, 0x4f, 0xde, 0x47, 0x77, 0xd7, 0xfb, 0xe8, 0x7e, + 0x6a, 0xda, 0x8f, 0x54, 0x1b, 0xaf, 0x4e, 0xea, 0xbc, 0x3f, 0xc2, 0xd9, + 0xf7, 0x5c, 0xf9, 0xce, 0xa4, 0xf2, 0x25, 0xcf, 0x13, 0xfc, 0xc3, 0xf7, + 0xe7, 0x4a, 0x79, 0x72, 0xe3, 0x08, 0x55, 0x48, 0x1f, 0xe5, 0xf5, 0x4d, + 0x6e, 0x2f, 0xf3, 0xf3, 0x25, 0x5f, 0x88, 0xf8, 0xca, 0xb4, 0x80, 0x0c, + 0x9c, 0x91, 0xdd, 0x1e, 0x96, 0x08, 0x55, 0x92, 0x70, 0xc8, 0x32, 0xf8, + 0x73, 0x49, 0x1e, 0x17, 0x5e, 0x77, 0x5c, 0x7e, 0x16, 0xa9, 0x73, 0x98, + 0x6d, 0x9a, 0x36, 0x46, 0xbd, 0x1f, 0x47, 0x1b, 0xb3, 0x53, 0xe7, 0x97, + 0x74, 0xdd, 0x91, 0x94, 0xee, 0xec, 0xbd, 0xeb, 0x40, 0xcb, 0x7f, 0xa6, + 0xf6, 0x2e, 0x8b, 0x6e, 0x7f, 0x9e, 0x8e, 0xc1, 0x7d, 0x9e, 0x52, 0x79, + 0xc7, 0xcf, 0x90, 0x3b, 0xa5, 0x41, 0x5f, 0x81, 0x9c, 0x3f, 0x6b, 0x88, + 0x7a, 0x16, 0xd1, 0x7a, 0xcc, 0x52, 0x16, 0x76, 0x5a, 0x8e, 0x55, 0x83, + 0xde, 0xf9, 0x38, 0x19, 0xd5, 0xa0, 0x9e, 0xed, 0x54, 0x6b, 0x19, 0xac, + 0x9d, 0x8b, 0x54, 0x35, 0x52, 0x5b, 0x64, 0x6a, 0x9e, 0xdc, 0x5f, 0xf8, + 0x16, 0x56, 0x62, 0xdc, 0x4c, 0xbc, 0xbf, 0xe0, 0x96, 0x22, 0xe6, 0x89, + 0x72, 0x1a, 0xac, 0x9d, 0x4d, 0x9e, 0x75, 0xd8, 0xbb, 0x44, 0x06, 0xcd, + 0xb3, 0xe2, 0xc4, 0xed, 0xe1, 0xcf, 0xbe, 0x2b, 0x9c, 0x61, 0x97, 0x40, + 0x1b, 0xb3, 0xad, 0x93, 0xb2, 0x81, 0x15, 0xa5, 0x7c, 0xa3, 0xf7, 0xdc, + 0x89, 0x7a, 0x77, 0x2d, 0xf7, 0x90, 0x7b, 0x46, 0xd8, 0x73, 0x1b, 0xf5, + 0x41, 0x7b, 0x5a, 0x3e, 0x6f, 0x47, 0x8c, 0x2e, 0xb3, 0x65, 0xa2, 0x3d, + 0x1c, 0xad, 0x0a, 0xec, 0x85, 0xb4, 0x60, 0x64, 0x13, 0x2d, 0xb2, 0xf3, + 0x27, 0x9b, 0x61, 0x8f, 0x15, 0x77, 0xc7, 0x32, 0xbb, 0x13, 0xed, 0xb6, + 0xe1, 0x8c, 0x1a, 0xf6, 0x38, 0x10, 0x3d, 0xdd, 0xf0, 0xd0, 0x87, 0xb9, + 0x55, 0xf6, 0x12, 0x47, 0xb7, 0xd8, 0x83, 0xde, 0xcc, 0xc1, 0x2d, 0xbd, + 0x5c, 0xde, 0xee, 0xf8, 0x5d, 0xc1, 0x83, 0x34, 0x01, 0x5d, 0x85, 0xe1, + 0xe8, 0x6f, 0xb0, 0xe7, 0xc8, 0x77, 0x08, 0xdc, 0xa2, 0x72, 0x4f, 0x27, + 0x9f, 0xd0, 0xad, 0x61, 0xef, 0x93, 0xb4, 0xc2, 0x7a, 0x40, 0x8e, 0x1a, + 0x52, 0x1e, 0x37, 0xda, 0x88, 0x93, 0xa0, 0xc5, 0x2a, 0x3f, 0x93, 0x9e, + 0xfc, 0x39, 0xb2, 0x96, 0xfe, 0x47, 0xe9, 0xb3, 0x7f, 0x94, 0x7e, 0x48, + 0x7a, 0x91, 0x90, 0x9f, 0x39, 0x66, 0xf1, 0x6d, 0xc4, 0x58, 0x33, 0xd1, + 0x3c, 0x61, 0x59, 0x75, 0x54, 0x34, 0x1e, 0x15, 0x2d, 0x47, 0x85, 0x79, + 0xbe, 0xad, 0xd2, 0x5f, 0xef, 0xc3, 0x7c, 0xe7, 0xd2, 0xd9, 0xf2, 0xa8, + 0xf7, 0xa4, 0x94, 0x9b, 0x7d, 0x40, 0xda, 0xb7, 0xdc, 0x0b, 0x1f, 0x98, + 0x6a, 0x7f, 0xc0, 0x7b, 0xb7, 0xb4, 0xb7, 0xe9, 0x33, 0xfe, 0x43, 0xfa, + 0xbc, 0x90, 0xbe, 0x07, 0x58, 0xd0, 0xf3, 0xa8, 0xf7, 0x2a, 0x44, 0xf9, + 0x5c, 0x93, 0x0f, 0x3d, 0xa6, 0x7d, 0x8f, 0xfd, 0x77, 0x00, 0x7e, 0x94, + 0xd4, 0xf1, 0xda, 0x79, 0x4a, 0xaf, 0xfd, 0xb0, 0xeb, 0x98, 0x3c, 0x77, + 0xf0, 0x6e, 0x90, 0x8b, 0x13, 0xed, 0x1c, 0x79, 0x73, 0x0c, 0xbb, 0xba, + 0xf8, 0xec, 0xef, 0x69, 0x26, 0x8f, 0x7c, 0x27, 0xa2, 0xf6, 0x9f, 0xdf, + 0x55, 0xa9, 0xcf, 0xfb, 0xa7, 0xa9, 0xbb, 0xff, 0xf3, 0xd8, 0x75, 0xf4, + 0x5c, 0xd8, 0x78, 0x2e, 0x36, 0xca, 0x73, 0x9f, 0x6a, 0xf3, 0xef, 0xab, + 0xd4, 0x77, 0x03, 0xb8, 0x2e, 0x4b, 0xaa, 0xae, 0xb0, 0xeb, 0xd3, 0xa9, + 0xf7, 0x02, 0x4d, 0xe8, 0xa3, 0xcf, 0x3b, 0x17, 0x73, 0xcc, 0xdf, 0x77, + 0xc8, 0xa5, 0xf4, 0xf3, 0x49, 0xf2, 0xdd, 0xce, 0x74, 0xef, 0x7b, 0x92, + 0xf7, 0xc2, 0x3f, 0x9e, 0x3d, 0x2e, 0x36, 0xb4, 0xcd, 0xa6, 0xc6, 0xe5, + 0xb3, 0x7a, 0x5c, 0x92, 0xb6, 0x7f, 0x7d, 0x1f, 0xdb, 0xcf, 0xa5, 0xc6, + 0xf0, 0x5f, 0xab, 0xff, 0x5c, 0x6d, 0xe2, 0xf1, 0x7a, 0xb7, 0x4a, 0xc5, + 0x8c, 0xa9, 0xe3, 0xe5, 0x6b, 0x9d, 0x4f, 0xd1, 0xde, 0x6b, 0x31, 0x66, + 0x6c, 0xef, 0xd0, 0x67, 0x60, 0x4b, 0xf5, 0xf4, 0xf6, 0x15, 0xf6, 0x65, + 0x1b, 0x6d, 0x38, 0xe1, 0x7e, 0x84, 0xac, 0x7e, 0x55, 0xbe, 0x7d, 0x4a, + 0x9d, 0xc9, 0x73, 0x60, 0x96, 0x2e, 0x23, 0xe2, 0x5b, 0x0c, 0x7f, 0xea, + 0x13, 0x28, 0x09, 0x1d, 0xa9, 0xb5, 0x08, 0x4b, 0x83, 0x05, 0x65, 0x78, + 0xef, 0x97, 0xde, 0x44, 0x3a, 0x9a, 0xc0, 0x37, 0xaa, 0xd5, 0xf7, 0x4b, + 0x0a, 0x68, 0x2e, 0xed, 0xc6, 0x09, 0x70, 0x05, 0xee, 0x7b, 0x61, 0xd7, + 0x95, 0xd2, 0x27, 0x1a, 0x10, 0x3b, 0x1b, 0xac, 0xb9, 0x74, 0x40, 0xbe, + 0xa9, 0x74, 0x5a, 0x62, 0x1e, 0xfe, 0xa4, 0xc2, 0x5d, 0x10, 0xf3, 0xd4, + 0x80, 0x9a, 0xe5, 0x4b, 0x59, 0xbe, 0x20, 0x29, 0x6f, 0xb4, 0xa0, 0xcd, + 0x35, 0x65, 0xa4, 0x6e, 0xb9, 0x3c, 0xef, 0x55, 0xf2, 0x36, 0xc8, 0xef, + 0xf9, 0xbc, 0xc4, 0x4f, 0x0f, 0x64, 0xfc, 0x09, 0x40, 0xb6, 0x25, 0xe6, + 0xfa, 0x8d, 0x7c, 0x57, 0xd3, 0x40, 0x45, 0x14, 0x73, 0x3d, 0x23, 0xfd, + 0x63, 0x1e, 0xf1, 0xb9, 0x88, 0xbf, 0x79, 0xe0, 0x14, 0x0d, 0x88, 0x3f, + 0x4f, 0xe4, 0xff, 0xfd, 0x8d, 0x0a, 0xcb, 0x93, 0xf9, 0x76, 0x57, 0xd8, + 0xb3, 0x10, 0xb1, 0xa1, 0xe2, 0x95, 0xdc, 0x73, 0xce, 0x05, 0x4b, 0xab, + 0xaa, 0x55, 0x8c, 0xe6, 0xf7, 0x63, 0x6e, 0x51, 0x61, 0xb8, 0xd7, 0x85, + 0x3d, 0x77, 0xe8, 0x77, 0x45, 0xc9, 0x77, 0x2a, 0x75, 0xfa, 0xbb, 0x2b, + 0xec, 0x93, 0x24, 0x6f, 0xc6, 0xd2, 0x27, 0xe1, 0xf1, 0x42, 0xbe, 0xc7, + 0x59, 0x4d, 0xc2, 0xf0, 0x09, 0xf6, 0xc8, 0x7e, 0xf9, 0x0e, 0xea, 0xd3, + 0x36, 0x3c, 0xbb, 0xae, 0xe9, 0x1e, 0xa0, 0xef, 0x59, 0x39, 0x7f, 0x6e, + 0x73, 0x75, 0xf5, 0x52, 0x7a, 0xd4, 0xca, 0xf3, 0x06, 0xf5, 0x9d, 0x49, + 0xe6, 0x3e, 0xab, 0x9e, 0x9b, 0x5c, 0x3a, 0x93, 0x94, 0x3d, 0xa5, 0x99, + 0x1b, 0x2e, 0x17, 0x33, 0xf3, 0x6f, 0x38, 0xdd, 0xb1, 0x5a, 0x14, 0x14, + 0x7e, 0xe3, 0x18, 0xbd, 0x65, 0x45, 0x63, 0x51, 0xe6, 0x60, 0x57, 0x3b, + 0x7d, 0xd9, 0xc6, 0x3c, 0x7d, 0x5d, 0x92, 0x66, 0xba, 0xd4, 0xa6, 0x54, + 0x03, 0x5d, 0x1d, 0xf4, 0x43, 0x1b, 0xe5, 0xee, 0xea, 0x3a, 0xdc, 0x75, + 0xe8, 0xc3, 0x8f, 0x9d, 0xa6, 0x5b, 0x6c, 0xba, 0x72, 0x7a, 0x1c, 0xe2, + 0x63, 0xdd, 0xd5, 0xde, 0xd5, 0x87, 0xe8, 0x26, 0x07, 0xda, 0xf6, 0xd2, + 0xbd, 0x17, 0xec, 0xbb, 0x7c, 0xff, 0x3d, 0x5d, 0xf4, 0x2b, 0x4e, 0x89, + 0xfc, 0xfc, 0xd3, 0xf7, 0xd2, 0x8b, 0x0e, 0x69, 0xfd, 0x12, 0xfd, 0xc2, + 0x21, 0x8b, 0xbf, 0x5e, 0x92, 0x01, 0x7a, 0xcf, 0x02, 0x93, 0x20, 0x7d, + 0xdc, 0x4a, 0xb9, 0x83, 0xdf, 0x3c, 0xf4, 0x44, 0xf3, 0xcb, 0x83, 0xd5, + 0xc8, 0x70, 0x88, 0x5e, 0x63, 0x39, 0xfd, 0xd1, 0xc2, 0x56, 0xc6, 0xca, + 0x9d, 0x46, 0xe7, 0x41, 0x7a, 0x8b, 0x87, 0xe5, 0xef, 0xfc, 0xb8, 0x81, + 0x5f, 0x13, 0x7d, 0x87, 0x1f, 0xdf, 0x33, 0xd8, 0xec, 0x46, 0x66, 0xbf, + 0xc9, 0x8f, 0x9b, 0xf9, 0xf1, 0x5d, 0x7e, 0x7c, 0xdb, 0x50, 0xf5, 0x48, + 0x83, 0x9b, 0xe4, 0xf3, 0x5b, 0x4a, 0x74, 0x8b, 0x4c, 0xf4, 0xca, 0xf6, + 0xd0, 0x9f, 0x1c, 0x78, 0xbc, 0xc9, 0x23, 0xba, 0xaf, 0xab, 0x79, 0xe0, + 0xfa, 0x60, 0xd7, 0xe6, 0x63, 0x4b, 0xe9, 0x6f, 0x5c, 0x40, 0xaf, 0xb4, + 0xd2, 0xe3, 0xd6, 0x6b, 0xd3, 0x23, 0x79, 0x07, 0x4b, 0x7f, 0x6d, 0xc7, + 0xe3, 0x6a, 0x2e, 0xe6, 0x38, 0x7d, 0x4b, 0x36, 0xf1, 0x5b, 0x46, 0xfe, + 0x1b, 0x4b, 0xbb, 0x02, 0xc6, 0xf8, 0xce, 0x5d, 0xf4, 0xa4, 0x45, 0x16, + 0x7d, 0xef, 0x4b, 0xdf, 0x38, 0x5e, 0x13, 0x30, 0x2e, 0x3a, 0x48, 0x0f, + 0x49, 0x93, 0x1b, 0xe8, 0x01, 0x81, 0x1c, 0x37, 0x74, 0x19, 0x0b, 0x85, + 0x27, 0x57, 0x14, 0xba, 0xab, 0xbb, 0x8d, 0x2c, 0xb1, 0x20, 0x57, 0xb8, + 0x99, 0xdb, 0xc6, 0xb2, 0x7c, 0x57, 0xa8, 0x7a, 0xbf, 0x71, 0x40, 0x94, + 0xe6, 0x1a, 0x1f, 0x16, 0x05, 0xb9, 0x74, 0x3f, 0x57, 0x71, 0x3d, 0xf5, + 0xca, 0x66, 0x9f, 0x2f, 0x4b, 0x35, 0x5e, 0xa1, 0x26, 0xe3, 0x35, 0xe3, + 0xa0, 0x71, 0xb7, 0xe5, 0xe0, 0x21, 0xe3, 0x0f, 0x87, 0x9e, 0xef, 0x0e, + 0x9d, 0x6c, 0x6e, 0x5e, 0xdd, 0xdc, 0xbc, 0xe6, 0xf0, 0x87, 0x9a, 0xbf, + 0x64, 0xe4, 0x8a, 0x99, 0xb9, 0x46, 0xce, 0x6d, 0xf4, 0x55, 0x0c, 0xd3, + 0x49, 0xba, 0x5a, 0x50, 0x15, 0xfd, 0x03, 0x9d, 0xb9, 0xb8, 0x6b, 0x35, + 0x7d, 0x87, 0x6b, 0x3f, 0xb9, 0x9a, 0xbe, 0x00, 0xd5, 0xc5, 0xc7, 0xe8, + 0x0f, 0x76, 0x4e, 0xd2, 0x55, 0x3c, 0x45, 0x57, 0xd3, 0xd7, 0xa4, 0x92, + 0x4e, 0xda, 0xb9, 0xaa, 0x1f, 0xd0, 0x71, 0xbb, 0xea, 0xf7, 0xea, 0x63, + 0x74, 0x03, 0x8b, 0xaa, 0xba, 0xaf, 0x38, 0xb6, 0xf5, 0x98, 0xe1, 0x3a, + 0x38, 0x70, 0x68, 0xb5, 0x70, 0xb9, 0xee, 0xa4, 0xdf, 0x22, 0xf7, 0x4e, + 0x3a, 0xae, 0x7a, 0x7a, 0x09, 0x7f, 0x0b, 0x54, 0xdd, 0xdd, 0x0a, 0x10, + 0xe1, 0x79, 0x0d, 0xcc, 0x23, 0x75, 0x66, 0x98, 0x03, 0x1f, 0x2f, 0xd6, + 0xeb, 0x42, 0x68, 0x9b, 0xe4, 0x7b, 0x10, 0x23, 0x85, 0x6c, 0x99, 0xce, + 0xd6, 0x36, 0xc9, 0xef, 0x71, 0xad, 0xd4, 0xb4, 0x56, 0xd3, 0x8c, 0x94, + 0xbd, 0x8a, 0xe5, 0xb5, 0xfa, 0x76, 0xcd, 0xb2, 0x52, 0x5d, 0x66, 0x85, + 0xb6, 0xad, 0xd1, 0xf2, 0x5a, 0xbd, 0x0e, 0x57, 0x53, 0xa7, 0x94, 0xaf, + 0xd5, 0xed, 0x32, 0x4c, 0x6d, 0x58, 0x4b, 0x1d, 0x92, 0xcf, 0x4f, 0xa5, + 0x55, 0xf9, 0xc9, 0x76, 0x5a, 0x53, 0xbc, 0x7a, 0x1f, 0x9b, 0xbc, 0x9b, + 0x1a, 0x5a, 0x67, 0x68, 0x9d, 0xa1, 0xd7, 0xbd, 0x2a, 0xdf, 0x21, 0xcf, + 0x67, 0x4a, 0xb6, 0x56, 0xd3, 0x0d, 0x9a, 0xb6, 0xc9, 0x12, 0x2c, 0x5a, + 0x8f, 0xdb, 0x8b, 0xa9, 0x1e, 0xf5, 0x7e, 0xc1, 0x22, 0x69, 0x9b, 0x1e, + 0x2f, 0xf5, 0x9e, 0x83, 0x69, 0xa6, 0xa6, 0x39, 0x3a, 0x6f, 0x3e, 0xa2, + 0x98, 0x45, 0x8e, 0xd9, 0x64, 0x5b, 0x0b, 0xd1, 0x5b, 0x4e, 0xd9, 0x4d, + 0x7c, 0xb2, 0x2f, 0xc9, 0xb9, 0x98, 0xa3, 0x69, 0x69, 0x6a, 0xfc, 0x54, + 0x5d, 0xf3, 0x41, 0xd5, 0xd8, 0xe6, 0xcb, 0xcf, 0x6c, 0xd4, 0x18, 0xd6, + 0x6a, 0x59, 0x9b, 0x94, 0x59, 0xe5, 0xdc, 0x4c, 0x96, 0xb9, 0x5a, 0xcb, + 0x56, 0x9b, 0xc6, 0x61, 0xb5, 0x4c, 0xa9, 0xef, 0x6b, 0x31, 0xe5, 0xef, + 0xa7, 0xd8, 0x24, 0x9d, 0xcc, 0xc7, 0xd8, 0xa4, 0x69, 0xbb, 0xee, 0x33, + 0x6b, 0xf2, 0x4c, 0x7c, 0x49, 0xca, 0x67, 0x4a, 0x4c, 0x63, 0x9d, 0x97, + 0x9a, 0xc3, 0x85, 0x5a, 0xef, 0xd2, 0x65, 0xce, 0xd6, 0xf5, 0xd4, 0xa6, + 0x2c, 0x55, 0xdb, 0x6a, 0x53, 0xd6, 0x22, 0x93, 0x84, 0x93, 0x44, 0x0e, + 0x89, 0x0a, 0x32, 0x2a, 0xe0, 0x15, 0x8b, 0xc9, 0xde, 0x1c, 0x0c, 0x07, + 0x13, 0x6b, 0xc8, 0x58, 0xd3, 0x44, 0xd6, 0x35, 0x4d, 0x78, 0xda, 0xf9, + 0xb9, 0xb8, 0x9f, 0x72, 0xd6, 0x8f, 0xfa, 0xc3, 0x7b, 0x03, 0xe7, 0xfb, + 0x13, 0x43, 0xa3, 0x81, 0x18, 0xcd, 0x5c, 0x1f, 0x19, 0x8b, 0x46, 0xc2, + 0x81, 0x70, 0xa2, 0x27, 0x10, 0x88, 0xf5, 0x07, 0x03, 0x07, 0x97, 0xee, + 0xf3, 0x4f, 0xf8, 0xc9, 0xb9, 0x3e, 0x12, 0x0e, 0x07, 0x86, 0x12, 0xc1, + 0x48, 0x98, 0x04, 0x06, 0xb2, 0x0d, 0x0e, 0xd5, 0x41, 0x46, 0xc7, 0x62, + 0xa0, 0x83, 0x2c, 0x1d, 0x1d, 0x9c, 0xe8, 0x04, 0xd3, 0xd9, 0x0d, 0xa6, + 0x9b, 0x44, 0x27, 0x19, 0x9d, 0x8c, 0x6e, 0x2a, 0xed, 0x1c, 0x1f, 0x0a, + 0xac, 0x1b, 0x1a, 0x0a, 0xc4, 0xe3, 0xc1, 0x3d, 0xc1, 0x50, 0x30, 0x71, + 0x78, 0x4b, 0x64, 0x38, 0xd0, 0x13, 0x8b, 0x4c, 0x04, 0x87, 0x51, 0x63, + 0x51, 0x57, 0xe0, 0xf0, 0x9e, 0x88, 0x3f, 0x36, 0xbc, 0x21, 0x18, 0x1f, + 0x0b, 0xc6, 0xe3, 0xdd, 0xc1, 0x78, 0x22, 0x10, 0x86, 0x42, 0xa0, 0xa4, + 0x6e, 0x94, 0xdd, 0xcd, 0x65, 0x77, 0xa3, 0xec, 0xee, 0xce, 0x0e, 0xb2, + 0xe2, 0xc1, 0xc9, 0x6e, 0x24, 0xa5, 0x12, 0x0a, 0x6b, 0x37, 0x6b, 0xc0, + 0x76, 0xd3, 0xcc, 0x6e, 0x7f, 0x78, 0x38, 0x16, 0x09, 0x0e, 0xd7, 0xf8, + 0xa3, 0xd1, 0x9a, 0x75, 0x68, 0xef, 0x04, 0xea, 0x6b, 0xa2, 0xfa, 0x74, + 0x79, 0x34, 0x1a, 0x0a, 0x0e, 0xf9, 0xb9, 0x33, 0xe5, 0x49, 0x9b, 0xee, + 0xe0, 0x48, 0x60, 0xe8, 0xf0, 0x50, 0x28, 0xb0, 0xde, 0x1f, 0x0a, 0xed, + 0xf1, 0x0f, 0xed, 0x8f, 0x37, 0xd1, 0xac, 0x73, 0xe5, 0x32, 0xab, 0x86, + 0x22, 0x61, 0xb4, 0x37, 0x51, 0xb3, 0x9e, 0xe9, 0xa1, 0x84, 0x59, 0xb5, + 0x37, 0xe6, 0x8f, 0x8e, 0x06, 0x87, 0xe2, 0x35, 0xeb, 0xfd, 0xe1, 0x09, + 0x3f, 0x0a, 0x9c, 0x3b, 0x8d, 0x2a, 0x12, 0x8a, 0xc4, 0xda, 0x82, 0xa1, + 0x44, 0x20, 0x76, 0x6e, 0xfd, 0x66, 0x7f, 0x22, 0x16, 0x3c, 0xd4, 0x44, + 0x8b, 0xdf, 0x57, 0x9f, 0x56, 0x54, 0xf1, 0x54, 0xd3, 0x1e, 0x7f, 0x30, + 0x9c, 0x98, 0x5e, 0x13, 0x91, 0x9a, 0xa2, 0xa9, 0x9a, 0x5e, 0xcc, 0x79, + 0x13, 0x95, 0xa4, 0x14, 0x91, 0x78, 0x4d, 0xeb, 0x78, 0x30, 0x34, 0x5c, + 0xde, 0xbf, 0xb1, 0xb7, 0xaf, 0x63, 0xeb, 0x96, 0x26, 0x2a, 0x48, 0xd7, + 0x85, 0x87, 0x43, 0x81, 0x26, 0x2a, 0x34, 0x0b, 0x3b, 0x5a, 0x83, 0xe1, + 0x61, 0x6e, 0xd3, 0x64, 0xf9, 0x3c, 0x52, 0x35, 0x1b, 0x87, 0x83, 0x09, + 0xff, 0x1e, 0x36, 0x2f, 0x4e, 0x57, 0xf4, 0x05, 0x42, 0xca, 0xd5, 0xcc, + 0x35, 0x2b, 0x4d, 0xd4, 0x1f, 0xd6, 0xae, 0x3a, 0x35, 0x17, 0x74, 0x61, + 0x55, 0xde, 0xc2, 0x73, 0x68, 0xfa, 0x30, 0x4c, 0xe1, 0xbd, 0xb2, 0x03, + 0x5c, 0xc0, 0x59, 0x85, 0xfb, 0xf0, 0x48, 0x15, 0x3e, 0xd9, 0xad, 0xf1, + 0x44, 0x30, 0xc4, 0x63, 0x37, 0xbd, 0xb0, 0x99, 0x96, 0xa4, 0x84, 0x13, + 0x58, 0x2e, 0x35, 0xeb, 0x47, 0x23, 0xb1, 0x40, 0x44, 0x0e, 0x60, 0x20, + 0x56, 0xde, 0x16, 0xf3, 0x8f, 0xa5, 0x5c, 0xaa, 0x89, 0xe6, 0xbc, 0x8f, + 0xad, 0x79, 0x7c, 0xa4, 0x16, 0x0b, 0x63, 0xe3, 0x44, 0x20, 0x9c, 0x36, + 0xfe, 0x52, 0xb1, 0x39, 0xc2, 0x83, 0xa3, 0x75, 0x8b, 0xd3, 0x75, 0xbc, + 0x64, 0xcb, 0xb7, 0x86, 0xdb, 0x22, 0x43, 0xe3, 0x71, 0xb5, 0xb4, 0x93, + 0x0b, 0xca, 0xdc, 0xfc, 0x94, 0xa9, 0x79, 0x14, 0x53, 0xc2, 0x4d, 0xb1, + 0xc8, 0x78, 0xb4, 0x89, 0x56, 0x4c, 0xd5, 0xf8, 0x62, 0x81, 0xc0, 0xd6, + 0x3d, 0xf1, 0x40, 0x6c, 0x02, 0x7d, 0xdb, 0x1a, 0xde, 0x14, 0x8a, 0xec, + 0xf1, 0x87, 0xba, 0xfd, 0x87, 0x23, 0xe3, 0x89, 0xc9, 0x6a, 0xe6, 0xbd, + 0x7f, 0xbe, 0x26, 0x9a, 0x91, 0x6e, 0x70, 0x3e, 0xdc, 0x23, 0x82, 0x96, + 0x78, 0xa6, 0x13, 0x77, 0x84, 0xe3, 0x81, 0x44, 0xbc, 0xdc, 0x77, 0x38, + 0x9a, 0x36, 0xaf, 0x53, 0x2c, 0x78, 0xf9, 0xc5, 0x22, 0xa1, 0x10, 0x97, + 0x5f, 0x9b, 0x6e, 0xe6, 0x37, 0xc7, 0x9e, 0x9a, 0xb4, 0x48, 0xb4, 0xd9, + 0x1f, 0xf6, 0xef, 0xe5, 0x2c, 0x75, 0xff, 0x72, 0x16, 0x0e, 0x5e, 0x1d, + 0xe1, 0x91, 0xc8, 0x94, 0xf1, 0xf9, 0x80, 0x3c, 0xc9, 0x80, 0xd7, 0x44, + 0x4b, 0xd3, 0xf3, 0x05, 0xc3, 0xd1, 0xf1, 0xc4, 0x58, 0x20, 0x31, 0x1a, + 0x19, 0xae, 0x69, 0xf5, 0xc7, 0x51, 0x38, 0xd2, 0x93, 0xe1, 0x76, 0x4a, + 0xaf, 0xcd, 0xf6, 0xbc, 0x84, 0x22, 0x31, 0xd5, 0x9c, 0x25, 0xe7, 0x36, + 0x9b, 0x52, 0x64, 0xf5, 0x07, 0xd8, 0x6e, 0x96, 0x7c, 0x6a, 0x74, 0x6a, + 0xba, 0x87, 0x22, 0x63, 0x35, 0xb1, 0xb1, 0x78, 0xa8, 0x66, 0x1f, 0x82, + 0x79, 0xcd, 0x94, 0x4d, 0xa2, 0x3c, 0x6d, 0x17, 0x69, 0xc2, 0x69, 0xea, + 0x03, 0x33, 0x98, 0x5a, 0xb3, 0xf6, 0x03, 0xad, 0xdf, 0x77, 0x0b, 0x69, + 0xa2, 0xb6, 0x0f, 0x2c, 0xe0, 0x1c, 0x9b, 0x4c, 0x79, 0xba, 0x63, 0x36, + 0xfe, 0xbf, 0x96, 0xc3, 0x3e, 0xf7, 0x41, 0x59, 0x39, 0xbc, 0xc8, 0xc1, + 0xf5, 0xf9, 0x63, 0x7b, 0x03, 0x58, 0xb9, 0xf3, 0x3f, 0x28, 0x4b, 0x13, + 0x95, 0x75, 0x0f, 0xfb, 0x43, 0x13, 0xc1, 0xfd, 0x35, 0x08, 0x60, 0x91, + 0x84, 0xdc, 0x7b, 0x6a, 0x36, 0x86, 0x87, 0x42, 0x91, 0x38, 0xe2, 0xd8, + 0xfa, 0x90, 0x3f, 0x2e, 0x37, 0x95, 0xa9, 0x36, 0x1d, 0x18, 0xdc, 0x98, + 0xd6, 0xcf, 0x9f, 0x46, 0xbf, 0x39, 0x30, 0xb6, 0x47, 0x1b, 0x04, 0x60, + 0x52, 0x3e, 0xad, 0x09, 0xbb, 0x40, 0x8f, 0x9f, 0x03, 0x18, 0x76, 0x14, + 0x58, 0x95, 0x4e, 0x63, 0xd5, 0x17, 0xdc, 0x1b, 0xf6, 0x27, 0xc6, 0x63, + 0x32, 0x88, 0xf3, 0x49, 0xa1, 0x26, 0x04, 0x47, 0x40, 0x60, 0xf3, 0xc7, + 0xfa, 0x02, 0x07, 0xc6, 0x03, 0xe1, 0x21, 0x68, 0xf2, 0xcd, 0x1a, 0xd5, + 0xa8, 0x32, 0x93, 0xa8, 0x03, 0xab, 0x76, 0xaf, 0x3f, 0xa4, 0xe6, 0x77, + 0xe3, 0xa1, 0xa1, 0x40, 0x54, 0xb9, 0x45, 0xf9, 0x34, 0x36, 0xb1, 0xbd, + 0xe3, 0x63, 0x18, 0x21, 0x93, 0x55, 0x81, 0xd9, 0x0a, 0x5b, 0xb0, 0x74, + 0xd8, 0xf9, 0x26, 0xe1, 0x96, 0x48, 0xdf, 0xf8, 0xd0, 0xa8, 0xea, 0x8e, + 0x29, 0x9f, 0xdb, 0x64, 0xb2, 0x75, 0xcf, 0x3e, 0xb9, 0xcf, 0x95, 0x9a, + 0x64, 0x7d, 0x81, 0xa1, 0xf1, 0x18, 0x3c, 0xed, 0x1c, 0x59, 0xd4, 0x56, + 0xc2, 0x2b, 0x69, 0x52, 0x16, 0x0b, 0x8c, 0xf0, 0xc6, 0x85, 0x66, 0x4c, + 0x44, 0xd4, 0x41, 0x41, 0x4d, 0xb5, 0xa9, 0x88, 0x92, 0x69, 0xcc, 0x55, + 0xd3, 0x38, 0x2c, 0x4a, 0x9d, 0xdc, 0x5a, 0xd6, 0xc5, 0x62, 0xfe, 0xc3, + 0xec, 0x5d, 0xbc, 0x97, 0x4e, 0x8a, 0x3b, 0x30, 0x13, 0x7e, 0xac, 0xf8, + 0x26, 0x72, 0x99, 0xa4, 0xca, 0xee, 0x6c, 0x49, 0x33, 0x39, 0xfa, 0x36, + 0x74, 0x5d, 0xd8, 0xb1, 0xc5, 0x47, 0x56, 0xdf, 0xce, 0x9e, 0x8d, 0x94, + 0x77, 0x96, 0x07, 0x52, 0xb6, 0xd9, 0xfb, 0x49, 0xf4, 0x93, 0xd1, 0x8f, + 0x73, 0x54, 0x3f, 0x0e, 0x58, 0xd6, 0x7e, 0x3e, 0xd1, 0xd9, 0xf8, 0x89, + 0xd3, 0x56, 0x7f, 0x27, 0xd9, 0xfb, 0x3b, 0x3b, 0xda, 0xda, 0x70, 0xd6, + 0xea, 0xef, 0x94, 0x8a, 0x4e, 0x56, 0x58, 0xfa, 0x71, 0xc4, 0xc3, 0xa3, + 0x9b, 0xc5, 0x7c, 0x24, 0xeb, 0xef, 0x1c, 0x80, 0x35, 0x33, 0xdd, 0x5c, + 0x46, 0xb7, 0x34, 0xed, 0x56, 0xa6, 0x7c, 0x82, 0xeb, 0x87, 0x11, 0x04, + 0x2c, 0x77, 0x48, 0x22, 0xab, 0xea, 0x96, 0x59, 0x71, 0xd9, 0x07, 0x3b, + 0xd0, 0x29, 0x9f, 0x38, 0xfa, 0xf5, 0x0f, 0xa0, 0xd2, 0x01, 0x69, 0x22, + 0x06, 0xc8, 0x32, 0xc0, 0xa6, 0x78, 0x74, 0x33, 0x0b, 0x35, 0x0c, 0x6d, + 0x03, 0x9d, 0x9c, 0xb6, 0x82, 0xb0, 0x80, 0x35, 0xa8, 0xd6, 0x3e, 0xd0, + 0x2d, 0xc5, 0x36, 0xa6, 0x2c, 0x47, 0x93, 0x06, 0x71, 0x62, 0x1d, 0xec, + 0x20, 0xf7, 0xe0, 0x54, 0x47, 0x2c, 0x18, 0x9c, 0xc6, 0x0f, 0x9c, 0x2a, + 0x96, 0x97, 0x7b, 0xbd, 0xde, 0x14, 0x5f, 0x0b, 0x3e, 0x6b, 0x92, 0x37, + 0x25, 0xd2, 0x34, 0x75, 0xe6, 0xc4, 0x32, 0x73, 0xa2, 0xde, 0x9c, 0x58, + 0x6e, 0x4e, 0xac, 0x30, 0x27, 0x56, 0x9a, 0x13, 0x0d, 0xe6, 0x44, 0xa3, + 0xa9, 0x35, 0xe6, 0x6a, 0xea, 0xcc, 0xcd, 0x5c, 0x66, 0xe2, 0xeb, 0x4d, + 0xfc, 0x72, 0x13, 0xbf, 0xc2, 0xc4, 0xaf, 0x34, 0xf1, 0x0d, 0x26, 0xbe, + 0x71, 0xb2, 0x82, 0xb6, 0x90, 0x7f, 0x6f, 0x9c, 0x72, 0xd2, 0xf6, 0x37, + 0x2a, 0xf4, 0x4f, 0xb3, 0x8f, 0x72, 0x0e, 0xf6, 0xf3, 0x6e, 0xff, 0x9e, + 0x40, 0x88, 0x2c, 0xfe, 0xe1, 0x61, 0x9a, 0x85, 0xc7, 0xf4, 0x07, 0x05, + 0x72, 0xf9, 0x47, 0xe0, 0xce, 0xec, 0x94, 0x6a, 0xf7, 0x18, 0xa6, 0x7c, + 0x3e, 0x25, 0xb5, 0x8e, 0x27, 0x12, 0x91, 0x70, 0x4f, 0x0c, 0xa5, 0x4b, + 0x51, 0x60, 0x04, 0x87, 0x24, 0xb3, 0x95, 0x7d, 0x4f, 0x04, 0x16, 0x63, + 0x64, 0x1f, 0xf2, 0x63, 0xb7, 0x19, 0x26, 0x97, 0xa2, 0xa6, 0x1b, 0x4a, + 0xce, 0x50, 0xda, 0xa5, 0xc6, 0x86, 0x63, 0xbd, 0x3f, 0x46, 0x79, 0x1c, + 0x37, 0x03, 0x26, 0xb3, 0x22, 0x29, 0x30, 0x6d, 0x78, 0xfa, 0x0c, 0x4f, + 0x59, 0x43, 0xbc, 0xbd, 0xf0, 0xa1, 0x78, 0x5d, 0x82, 0x72, 0x53, 0x89, + 0xf5, 0x91, 0xf1, 0x70, 0x02, 0x85, 0xc3, 0x0a, 0x47, 0xe9, 0xb8, 0x94, + 0x51, 0xa1, 0xbe, 0x00, 0xc4, 0x5b, 0x65, 0x43, 0x55, 0x23, 0x69, 0xf6, + 0x50, 0x2c, 0xe0, 0x4f, 0x4c, 0xdd, 0xb3, 0x78, 0xab, 0x26, 0xc7, 0x70, + 0x44, 0x9e, 0x0b, 0x29, 0x23, 0xa0, 0x8f, 0xc0, 0xe0, 0xc2, 0xc3, 0xf1, + 0xf3, 0x83, 0x89, 0x51, 0xf2, 0x8c, 0xe0, 0x54, 0x33, 0x6d, 0xbe, 0x78, + 0xeb, 0x61, 0x1e, 0x06, 0xca, 0x64, 0x0b, 0x79, 0xc0, 0xa3, 0xec, 0x91, + 0xc9, 0x73, 0xde, 0x30, 0xcd, 0xc6, 0xa2, 0x4e, 0xcb, 0x29, 0x8d, 0x78, + 0x27, 0xe9, 0x18, 0xa6, 0x39, 0x67, 0x2b, 0xd3, 0x6e, 0x61, 0x99, 0x52, + 0x2b, 0x47, 0x25, 0x2f, 0xc5, 0x6e, 0xf6, 0xc7, 0xf7, 0xa3, 0xd8, 0x19, + 0x2c, 0x98, 0xbc, 0xfc, 0x24, 0x07, 0xc9, 0x05, 0xf1, 0x7a, 0x7f, 0x2c, + 0x90, 0xe8, 0xc1, 0x6e, 0x24, 0x73, 0x16, 0xb2, 0x04, 0x91, 0xbf, 0x03, + 0xc7, 0xfd, 0x43, 0x6d, 0x91, 0x98, 0x1a, 0xa0, 0x1c, 0x2d, 0x85, 0x6b, + 0x60, 0x1b, 0xa1, 0x0c, 0x4e, 0xf2, 0xda, 0xa3, 0x02, 0xe6, 0x78, 0xcf, + 0xe3, 0xcd, 0x8c, 0xcf, 0xe8, 0x1b, 0xc3, 0xaa, 0xb2, 0x34, 0x61, 0x5f, + 0xc2, 0x1f, 0x4b, 0x90, 0x53, 0x8a, 0x55, 0xc5, 0xd9, 0xe0, 0x37, 0x04, + 0x86, 0x22, 0x72, 0x8f, 0xa4, 0x2c, 0x0e, 0xb0, 0xc9, 0x61, 0x64, 0x95, + 0x3c, 0x17, 0xfb, 0x82, 0x18, 0xde, 0x59, 0x48, 0xc9, 0x21, 0x08, 0x0c, + 0x9f, 0x1d, 0xfa, 0x3c, 0xe7, 0x54, 0xc9, 0x46, 0xeb, 0x11, 0x69, 0x0f, + 0x04, 0xf7, 0x8e, 0x26, 0x64, 0x39, 0xed, 0xe0, 0x42, 0x9c, 0x0a, 0x0c, + 0xf7, 0x06, 0xf6, 0xa2, 0xb7, 0xad, 0x78, 0xc2, 0x85, 0xa6, 0x53, 0x71, + 0x3f, 0xb8, 0x73, 0xb2, 0x54, 0xf3, 0x1c, 0xcc, 0x48, 0x0a, 0xd3, 0xce, + 0x57, 0xb4, 0x28, 0x29, 0xe6, 0x53, 0x2e, 0xc6, 0x8d, 0x4f, 0x3b, 0xfd, + 0xc1, 0x58, 0x62, 0xdc, 0x1f, 0x4a, 0x9e, 0x37, 0x58, 0x23, 0xbb, 0x8a, + 0xd3, 0x6e, 0xc2, 0x8f, 0x5d, 0x55, 0x4e, 0x53, 0x9a, 0x96, 0x6b, 0xec, + 0xd6, 0xfb, 0xce, 0xd6, 0x70, 0x1f, 0x1c, 0x30, 0x10, 0x96, 0x03, 0x82, + 0xca, 0xfc, 0x18, 0xc5, 0x44, 0x40, 0xf6, 0x49, 0x55, 0x2d, 0x67, 0x65, + 0x0b, 0x6c, 0x27, 0x02, 0x72, 0x14, 0xf3, 0x26, 0x7b, 0xae, 0xbc, 0x3c, + 0x7b, 0x52, 0x80, 0x86, 0x3b, 0x90, 0xea, 0xf5, 0x1f, 0xdc, 0x91, 0x64, + 0x76, 0xca, 0xb6, 0xf4, 0x46, 0x22, 0x89, 0x54, 0xee, 0xd4, 0xa5, 0x8d, + 0x7b, 0x9f, 0x6f, 0x16, 0xa8, 0x19, 0x64, 0x77, 0xe9, 0x3b, 0x8c, 0xa5, + 0x3f, 0xd6, 0x87, 0xfd, 0x26, 0x88, 0x1e, 0xcc, 0x48, 0x49, 0xb6, 0x07, + 0xfb, 0x83, 0xa9, 0xc8, 0x92, 0x0b, 0xb1, 0x9a, 0x93, 0x5e, 0xb9, 0x94, + 0x38, 0xa3, 0x0f, 0xe7, 0x8d, 0xd0, 0x96, 0xf1, 0x31, 0xf6, 0x23, 0xe5, + 0x38, 0xdb, 0xf9, 0x4a, 0x19, 0x0a, 0x86, 0x31, 0xe6, 0x6c, 0x15, 0x97, + 0xd9, 0xb6, 0x87, 0x83, 0xbc, 0x58, 0xd9, 0x4a, 0x1a, 0x9d, 0x7d, 0xf5, + 0x90, 0xbd, 0x36, 0x55, 0xc5, 0x13, 0x3b, 0xfd, 0x25, 0x42, 0x16, 0xa7, + 0x54, 0xbe, 0xc8, 0x7e, 0x0c, 0xe4, 0x9c, 0x54, 0x5a, 0xe6, 0x0f, 0x05, + 0x70, 0x02, 0x8c, 0x86, 0xfc, 0x87, 0xd5, 0x42, 0xb6, 0x42, 0xbb, 0x43, + 0x3e, 0x77, 0x52, 0x31, 0x56, 0x23, 0x2e, 0xc1, 0x69, 0x6b, 0xad, 0x3d, + 0xc2, 0xb5, 0xe7, 0x69, 0x4d, 0x34, 0xda, 0xe3, 0x67, 0xcf, 0x23, 0x57, + 0x4a, 0xd0, 0x1b, 0x88, 0xe3, 0x60, 0x93, 0x92, 0xb4, 0xa6, 0xe2, 0x20, + 0xe5, 0x28, 0xc9, 0x06, 0x1d, 0x32, 0x74, 0x12, 0x33, 0xbf, 0x21, 0x72, + 0x30, 0x4c, 0x59, 0xa9, 0xe4, 0xf6, 0x28, 0x15, 0xa6, 0x12, 0xd2, 0x2b, + 0xda, 0x83, 0xc3, 0xc3, 0x68, 0xb9, 0xae, 0x75, 0x73, 0x04, 0x55, 0xca, + 0x3c, 0x69, 0x82, 0x98, 0x7f, 0x6f, 0xb2, 0x4c, 0x29, 0x40, 0x31, 0xba, + 0x4c, 0xf9, 0xba, 0x80, 0x0a, 0x74, 0x22, 0x10, 0x43, 0x74, 0x1b, 0xd3, + 0x21, 0xc2, 0x31, 0xea, 0x8f, 0x6f, 0xe1, 0xa5, 0x68, 0x1d, 0x45, 0xf4, + 0xa0, 0x6c, 0x7e, 0x26, 0x6b, 0xa5, 0x22, 0x4e, 0xf5, 0x45, 0x46, 0xb4, + 0xfb, 0xc7, 0x22, 0x63, 0x6a, 0xdc, 0x28, 0x63, 0x14, 0x05, 0xfa, 0x54, + 0xb6, 0x48, 0x1c, 0x6b, 0x1a, 0x6b, 0x74, 0xab, 0x3c, 0x17, 0xc5, 0x29, + 0x8f, 0xdf, 0x4f, 0x05, 0xfd, 0xa1, 0xf5, 0xfe, 0x68, 0x7c, 0x33, 0xa6, + 0x90, 0x72, 0xb4, 0x00, 0x5e, 0xc4, 0x0e, 0x95, 0x37, 0x99, 0x54, 0xee, + 0x94, 0x19, 0x4c, 0x2e, 0x18, 0xca, 0x96, 0xec, 0x85, 0xea, 0xfe, 0x42, + 0xf9, 0x88, 0xcc, 0x81, 0x98, 0xac, 0x67, 0x9d, 0x8a, 0x4f, 0x94, 0x81, + 0x7a, 0xfb, 0xfd, 0xa1, 0xf1, 0x00, 0xd9, 0x83, 0x38, 0x9a, 0xed, 0x47, + 0xb8, 0x0d, 0xc6, 0xb7, 0x46, 0xfd, 0x38, 0x9f, 0xc2, 0x3c, 0x9e, 0x0a, + 0x00, 0xf2, 0x5d, 0x10, 0xc2, 0x06, 0x44, 0x11, 0x1c, 0x19, 0x37, 0x1e, + 0x8a, 0x86, 0x22, 0x31, 0xbf, 0xf2, 0x69, 0x0e, 0x2f, 0xc3, 0xa8, 0x35, + 0xae, 0xa7, 0x1f, 0x45, 0xe8, 0xb3, 0x18, 0x15, 0xed, 0x3f, 0xc7, 0x1b, + 0xac, 0x9c, 0xa4, 0xa2, 0x6f, 0x94, 0xc7, 0xdd, 0x16, 0x92, 0xdb, 0xa2, + 0x3d, 0x14, 0x08, 0xef, 0x45, 0xa0, 0xb7, 0x86, 0x79, 0x3e, 0x6d, 0xfc, + 0x8c, 0x23, 0x21, 0x23, 0x5b, 0xd8, 0x1c, 0x93, 0xed, 0x91, 0x3d, 0xbc, + 0xcf, 0x90, 0x3b, 0x32, 0x32, 0x02, 0xef, 0x6c, 0x3d, 0xbc, 0x3e, 0xb9, + 0x11, 0xc5, 0x29, 0x3f, 0x12, 0x4e, 0xbe, 0xb9, 0x5a, 0x2f, 0x77, 0x1a, + 0x44, 0x9c, 0x49, 0xd1, 0x86, 0x40, 0x1c, 0x7e, 0x7c, 0x98, 0xfd, 0x69, + 0x52, 0xa8, 0x7d, 0xce, 0x94, 0x33, 0xe9, 0x74, 0xb3, 0x27, 0x45, 0x7d, + 0xfe, 0x89, 0x40, 0x32, 0xc4, 0xa8, 0x98, 0x61, 0xb2, 0x97, 0x23, 0x9f, + 0x5e, 0x44, 0x5f, 0x22, 0x12, 0x8d, 0x42, 0x54, 0x84, 0x7d, 0x41, 0xb6, + 0xe3, 0xac, 0xab, 0x26, 0x3a, 0x11, 0x86, 0x8f, 0x1d, 0xa4, 0x9c, 0x88, + 0xf9, 0x9d, 0x04, 0xe5, 0x46, 0xd2, 0xce, 0x04, 0x94, 0x1d, 0x09, 0xcb, + 0x35, 0x22, 0x83, 0x37, 0x65, 0x46, 0xc2, 0x49, 0x07, 0xcf, 0x91, 0xec, + 0xe6, 0xf1, 0x50, 0x22, 0x18, 0xc5, 0xa8, 0x3b, 0x64, 0x12, 0x4e, 0x9a, + 0xc1, 0xa7, 0x0c, 0x99, 0x15, 0x16, 0x7d, 0xc1, 0x8b, 0x02, 0xc9, 0x4d, + 0x30, 0x0b, 0x49, 0x6c, 0x1b, 0xeb, 0xe0, 0xfb, 0xc3, 0x52, 0x87, 0x44, + 0x52, 0xa7, 0x93, 0xbd, 0x81, 0x31, 0xd4, 0x25, 0x93, 0xe6, 0x73, 0x05, + 0xda, 0xa0, 0xe6, 0x5d, 0xb6, 0xc1, 0x1e, 0x51, 0x0e, 0x62, 0x8b, 0xca, + 0x75, 0x90, 0x13, 0x4d, 0x5b, 0x01, 0xa5, 0xd1, 0x48, 0x74, 0x3c, 0x74, + 0xce, 0x1d, 0x3e, 0x1f, 0xfb, 0x57, 0x22, 0xed, 0xdd, 0x0f, 0x39, 0x62, + 0xea, 0xfd, 0x22, 0x95, 0xc5, 0xb0, 0x49, 0xc0, 0x43, 0x62, 0xe7, 0x7e, + 0xf5, 0x48, 0x73, 0x62, 0xb2, 0x89, 0xe7, 0x38, 0x38, 0x39, 0x95, 0x96, + 0xbb, 0x42, 0xd9, 0x38, 0x27, 0xf1, 0xb4, 0xc8, 0x71, 0x27, 0x0b, 0xfc, + 0x84, 0x72, 0xe3, 0xbc, 0x57, 0xa6, 0xde, 0x05, 0x52, 0x76, 0x5c, 0xef, + 0x75, 0x72, 0x8b, 0x2c, 0x32, 0xa7, 0x3a, 0x54, 0x8f, 0xe5, 0x8a, 0x2b, + 0x8c, 0x4f, 0xb3, 0x95, 0x51, 0x01, 0xa4, 0x1d, 0x63, 0x7c, 0x6a, 0x62, + 0x5f, 0x89, 0xab, 0x6a, 0xb8, 0x44, 0xb4, 0x09, 0x87, 0x37, 0x5e, 0x7f, + 0xc5, 0x48, 0x4d, 0xfb, 0xc6, 0x49, 0xda, 0xa5, 0xb6, 0x01, 0x72, 0x70, + 0x8a, 0xdb, 0x3c, 0x23, 0x9e, 0x0c, 0xfc, 0xad, 0x08, 0xe7, 0xad, 0x81, + 0x51, 0xff, 0x44, 0x10, 0xeb, 0x68, 0x52, 0x9c, 0xb6, 0x1f, 0xcc, 0x9e, + 0x56, 0xcc, 0x67, 0x04, 0x7f, 0x42, 0xf6, 0xc6, 0x17, 0xc0, 0x71, 0x21, + 0xe6, 0x8f, 0x1d, 0x4e, 0xee, 0x09, 0x38, 0x39, 0x50, 0x56, 0x5c, 0x85, + 0xff, 0x2d, 0x32, 0x68, 0xc6, 0xd3, 0xc2, 0xbe, 0x33, 0x99, 0xc4, 0x70, + 0xf0, 0x60, 0x9d, 0x1f, 0x0c, 0x85, 0xb6, 0x44, 0x12, 0xd2, 0x4f, 0xad, + 0x71, 0xac, 0x55, 0x34, 0x1c, 0xcf, 0x54, 0x44, 0xcb, 0xe1, 0x54, 0x2a, + 0xa2, 0x21, 0x0b, 0x0f, 0xb8, 0xea, 0x24, 0x57, 0x95, 0x13, 0xc7, 0x22, + 0x98, 0x4c, 0x66, 0xc5, 0xc7, 0xf7, 0x24, 0xef, 0xbe, 0x94, 0x89, 0x44, + 0x5c, 0x5e, 0x15, 0x51, 0x6b, 0xaa, 0xcb, 0x64, 0x4f, 0xa8, 0x63, 0xc8, + 0xbc, 0x44, 0xfa, 0xe1, 0x63, 0xd3, 0xd9, 0x47, 0xaa, 0x05, 0xd3, 0x18, + 0x4c, 0x39, 0x61, 0x55, 0x4c, 0x35, 0x3a, 0xc7, 0x71, 0x65, 0xd1, 0xbf, + 0x60, 0xc9, 0xe1, 0x76, 0xee, 0x54, 0xbb, 0xb4, 0xb3, 0x46, 0xe9, 0x54, + 0xbd, 0x79, 0xcb, 0x9e, 0xa6, 0x5b, 0xe9, 0x3b, 0xb8, 0xe7, 0x2c, 0x83, + 0x8e, 0x29, 0x31, 0x7b, 0x8a, 0xc5, 0x94, 0x30, 0x7d, 0xf6, 0xd0, 0xf4, + 0x4d, 0xe7, 0xbe, 0x67, 0x77, 0xb8, 0xef, 0x1c, 0xee, 0x62, 0x4f, 0x8c, + 0x06, 0x71, 0xdf, 0xd3, 0xb4, 0x96, 0x32, 0x12, 0x11, 0x75, 0xc3, 0x27, + 0x0b, 0x26, 0x97, 0xe6, 0x8f, 0x47, 0x87, 0xb1, 0xd8, 0x93, 0xe7, 0xcc, + 0x94, 0x4f, 0xf3, 0xee, 0xa6, 0x4f, 0x94, 0x8b, 0x95, 0x89, 0x4a, 0xe9, + 0x13, 0x2c, 0x9b, 0xa8, 0xe3, 0x09, 0x1b, 0xa6, 0x4e, 0xa9, 0x73, 0xcd, + 0xa6, 0xd3, 0xe8, 0xe7, 0x9b, 0xf5, 0x69, 0x75, 0xa5, 0x4c, 0x6c, 0x13, + 0x72, 0x3f, 0x73, 0x48, 0xb2, 0x75, 0x84, 0xac, 0x13, 0xf2, 0x1c, 0xc6, + 0x4f, 0x73, 0x30, 0x74, 0x4d, 0x9c, 0x7d, 0x02, 0xfa, 0x8a, 0xb8, 0xe4, + 0x92, 0x0d, 0x0d, 0x1f, 0x2e, 0xe3, 0x38, 0x83, 0x3b, 0x47, 0xd9, 0xaa, + 0x32, 0x78, 0x52, 0x59, 0x55, 0xd9, 0x10, 0x5a, 0x1c, 0x0c, 0xc9, 0xcd, + 0xae, 0x7a, 0x0c, 0xe1, 0x00, 0x8a, 0x18, 0x6a, 0xf6, 0xc7, 0x03, 0x50, + 0x62, 0xbb, 0xaf, 0xc6, 0x4d, 0x0a, 0x91, 0x69, 0x7c, 0x2c, 0x5e, 0xb6, + 0x6a, 0xc4, 0x1f, 0x8a, 0x07, 0xaa, 0xca, 0xc6, 0x82, 0xe1, 0x6a, 0x7f, + 0x34, 0x58, 0xb6, 0xaa, 0xae, 0xbe, 0xaa, 0x2c, 0x3e, 0xea, 0xaf, 0xae, + 0x45, 0x26, 0xff, 0x4a, 0xff, 0x70, 0x6d, 0x83, 0x7f, 0xa5, 0xb7, 0x7e, + 0x85, 0x77, 0xcf, 0xca, 0xc6, 0xc6, 0x61, 0x6f, 0x7d, 0x43, 0x5d, 0xa0, + 0xbe, 0x71, 0xe5, 0x50, 0xad, 0xb7, 0xd1, 0xbf, 0x72, 0xf9, 0x9e, 0x91, + 0x95, 0x23, 0x8d, 0xb5, 0xc3, 0x5c, 0x2a, 0x9a, 0x13, 0x47, 0x75, 0xc8, + 0xd4, 0xb0, 0xb4, 0xd6, 0xbb, 0xb4, 0xb1, 0x7a, 0x38, 0x30, 0x51, 0xf6, + 0x6f, 0x64, 0xac, 0x10, 0x6f, 0x19, 0x73, 0x32, 0x8a, 0xac, 0x45, 0xcb, + 0x8b, 0xec, 0x45, 0xfb, 0x8a, 0x9a, 0x8b, 0x76, 0xe3, 0x37, 0xd3, 0xa8, + 0x83, 0xb8, 0xb8, 0xd6, 0x58, 0x66, 0x7c, 0x4f, 0x58, 0x4b, 0x4e, 0x19, + 0x45, 0x59, 0x93, 0x6c, 0x8e, 0xb1, 0x1c, 0xec, 0x1c, 0xa3, 0xdc, 0xe5, + 0xb2, 0xd2, 0x57, 0x8d, 0x39, 0xc6, 0xdc, 0xb9, 0xaa, 0x14, 0x3b, 0x4a, + 0x19, 0x2e, 0xca, 0x47, 0x29, 0x9d, 0x45, 0x19, 0xca, 0xde, 0x0d, 0xfb, + 0x12, 0x65, 0x2f, 0x60, 0x0f, 0x6b, 0x31, 0x57, 0x95, 0x5d, 0xa3, 0x0c, + 0x0c, 0x18, 0x84, 0x27, 0x6d, 0x67, 0x1b, 0xf5, 0x5c, 0x92, 0x28, 0x5e, + 0x3a, 0x59, 0x64, 0xb2, 0x51, 0x4e, 0x65, 0x96, 0x09, 0xb3, 0xb1, 0xa4, + 0xd6, 0x66, 0xd2, 0xca, 0x9c, 0xb6, 0xe2, 0x9a, 0xe2, 0xea, 0x62, 0x6f, + 0x71, 0x55, 0x71, 0x25, 0x59, 0xed, 0xf6, 0x2c, 0x43, 0xb8, 0xf9, 0x77, + 0xcd, 0x47, 0x8f, 0x58, 0x4f, 0x54, 0x59, 0x9c, 0xd7, 0x56, 0xda, 0x9c, + 0x77, 0xd4, 0x08, 0xe7, 0x51, 0xaf, 0x70, 0x5e, 0x07, 0xdc, 0xe3, 0x5d, + 0x2b, 0xee, 0xaa, 0x12, 0xe2, 0x91, 0x2a, 0x43, 0xbc, 0x09, 0x7a, 0xa2, + 0x5a, 0x88, 0x9b, 0x81, 0x47, 0xaa, 0xc9, 0x2a, 0x8c, 0x3c, 0x43, 0xc8, + 0xdf, 0xce, 0x23, 0x47, 0xac, 0xd7, 0xd6, 0x75, 0x89, 0xbb, 0xea, 0x60, + 0x51, 0x4b, 0x86, 0xb0, 0x16, 0x9c, 0xf0, 0x08, 0xf7, 0x16, 0x14, 0x7a, + 0x64, 0xc5, 0x56, 0x71, 0x7c, 0x99, 0x10, 0x2f, 0x2f, 0x17, 0xe2, 0xc6, + 0x7a, 0x21, 0xae, 0x5d, 0x0e, 0xb5, 0x98, 0x61, 0x88, 0x13, 0x9e, 0x3e, + 0xe4, 0x3a, 0xb5, 0xc2, 0x27, 0xee, 0x59, 0x41, 0x16, 0x3b, 0x15, 0x71, + 0x0e, 0xe1, 0xde, 0x8e, 0x3c, 0x27, 0x1b, 0xc4, 0x71, 0xcf, 0x03, 0xfc, + 0x78, 0x9e, 0x1f, 0x47, 0x1a, 0x84, 0xf1, 0x0e, 0x70, 0xaa, 0x91, 0x84, + 0xc8, 0x2a, 0x71, 0x0f, 0xc2, 0xe4, 0x81, 0xa6, 0x5d, 0xe2, 0xd5, 0x46, + 0x21, 0x8e, 0xaf, 0x42, 0xb1, 0xc0, 0x03, 0xc0, 0xab, 0xcc, 0x37, 0x41, + 0x06, 0xbc, 0x0c, 0x3c, 0x00, 0xfd, 0x91, 0x66, 0x54, 0xd9, 0x4c, 0x8e, + 0xfa, 0x79, 0xb3, 0xdd, 0xb2, 0xad, 0x6e, 0xf5, 0xbb, 0x17, 0x65, 0xdc, + 0xd8, 0x89, 0xc2, 0xaf, 0x5b, 0x83, 0xc7, 0x8d, 0x9b, 0xb8, 0xc2, 0xcd, + 0x78, 0x9c, 0x60, 0xd9, 0xf3, 0xcc, 0xdd, 0xd1, 0x8c, 0xc7, 0x19, 0xd6, + 0xde, 0xd5, 0x81, 0xc7, 0xd3, 0xfc, 0xb8, 0x87, 0xed, 0x9e, 0x65, 0xd9, + 0x3b, 0x6c, 0xf2, 0x16, 0xcb, 0x4e, 0x6c, 0xe1, 0x1c, 0xac, 0x78, 0x97, + 0x1f, 0x27, 0xdb, 0xf1, 0x38, 0xdd, 0x6e, 0xbf, 0xd4, 0x20, 0x01, 0x58, + 0x8c, 0xb7, 0xda, 0x98, 0x1a, 0x0c, 0xe7, 0x23, 0xed, 0x4c, 0x1d, 0x5a, + 0xf7, 0x3f, 0xc1, 0x0c, 0xc0, 0x79, 0x39, 0xf8, 0x7f, 0x15, 0xb0, 0xbf, + 0x48, 0xdc, 0xb8, 0x45, 0x88, 0xc7, 0x81, 0x37, 0x81, 0x77, 0xd6, 0x08, + 0x71, 0xdd, 0x56, 0x8b, 0x78, 0xbc, 0xd9, 0x4e, 0xef, 0xac, 0x2e, 0x12, + 0xcf, 0x6e, 0x15, 0xe2, 0x8a, 0xb5, 0x90, 0x01, 0x27, 0x7b, 0x84, 0xb8, + 0x09, 0x38, 0x03, 0xbc, 0x0e, 0x9c, 0xdc, 0x86, 0x34, 0x70, 0x06, 0x78, + 0x1d, 0x23, 0xf8, 0x38, 0xe8, 0xd1, 0x5e, 0x8c, 0x28, 0x6c, 0xaf, 0x6d, + 0x11, 0xe2, 0xaa, 0x75, 0xc8, 0xd7, 0x2a, 0xac, 0xa7, 0x7b, 0x85, 0xf5, + 0x01, 0xc8, 0x9f, 0x6d, 0xb5, 0x89, 0x77, 0x40, 0xef, 0xf0, 0x19, 0xe2, + 0x21, 0xe0, 0x4d, 0xfe, 0x13, 0x52, 0xba, 0xbe, 0x53, 0x7d, 0x56, 0x7c, + 0x17, 0xe8, 0xdd, 0x26, 0xfe, 0xe1, 0x4e, 0xf5, 0x19, 0xf4, 0xaf, 0x35, + 0x7d, 0xcd, 0xa4, 0xfb, 0xa7, 0x96, 0x65, 0x76, 0x29, 0x59, 0x31, 0xe8, + 0xbc, 0x2e, 0xf5, 0xf9, 0x34, 0xeb, 0x97, 0x80, 0x5f, 0xde, 0xa5, 0x6c, + 0xd6, 0x74, 0x4d, 0xe6, 0xdb, 0xa6, 0x65, 0xbb, 0x34, 0x8d, 0x80, 0xbe, + 0xbc, 0x59, 0x7e, 0x6d, 0x20, 0xf5, 0xad, 0x50, 0xfe, 0xcb, 0xb2, 0x67, + 0x21, 0x7b, 0x53, 0xcb, 0x93, 0x3f, 0xd9, 0x5b, 0x28, 0xf5, 0xfd, 0x02, + 0xfe, 0xe1, 0xe4, 0xbb, 0x9b, 0xd5, 0xff, 0xe6, 0xb1, 0x22, 0xe1, 0xd9, + 0x92, 0x5e, 0x0e, 0xff, 0x9f, 0x9e, 0x62, 0xc8, 0xaa, 0xce, 0x92, 0x6f, + 0xd7, 0xf9, 0x36, 0x9c, 0x25, 0xe7, 0xff, 0xc5, 0xd3, 0x0c, 0xd9, 0x8e, + 0xb3, 0xe4, 0xfc, 0xf7, 0xa8, 0x3d, 0x5b, 0x26, 0xff, 0x97, 0x8d, 0x30, + 0xd1, 0xe4, 0xff, 0xb8, 0xe3, 0x36, 0x25, 0xff, 0xcf, 0x1d, 0x8f, 0x41, + 0xf2, 0x7f, 0xdd, 0xf1, 0x67, 0xec, 0xc9, 0xff, 0x77, 0xc7, 0x9f, 0xbf, + 0x27, 0xff, 0xe7, 0x1d, 0x7f, 0x07, 0x21, 0xf9, 0x7f, 0xef, 0x84, 0x47, + 0xfd, 0xbf, 0x20, 0xfe, 0xdf, 0x77, 0x16, 0x8f, 0xfa, 0x1f, 0x2f, 0xfc, + 0xf7, 0x9c, 0xc2, 0xa5, 0xbe, 0x07, 0xc0, 0x7f, 0xb7, 0x6a, 0x78, 0x54, + 0x5d, 0xfc, 0xbf, 0xf1, 0xac, 0x1e, 0xd5, 0x16, 0x9e, 0x37, 0xf2, 0xa8, + 0x72, 0xf8, 0xef, 0x59, 0x2d, 0x2e, 0xf5, 0xfd, 0x07, 0x1e, 0x3b, 0xbb, + 0x96, 0xf3, 0xdf, 0xba, 0xb2, 0xb1, 0xfc, 0x9e, 0xc8, 0x56, 0xa2, 0xff, + 0x0b, 0x4c, 0x11, 0x8a, 0xcf, 0xcc, 0x4f, 0x00, 0x00 }; //============================================================================== @@ -925,7 +855,9 @@ const uint8 javaComponentPeerView[] //============================================================================== #define JNI_CLASS_MEMBERS(METHOD, STATICMETHOD, FIELD, STATICFIELD, CALLBACK) \ - METHOD (create, "", "(II)V") + METHOD (create, "", "(II)V") \ + FIELD (width, "width", "I") \ + FIELD (height, "height", "I") \ DECLARE_JNI_CLASS (AndroidLayoutParams, "android/view/ViewGroup$LayoutParams") #undef JNI_CLASS_MEMBERS @@ -939,9 +871,17 @@ DECLARE_JNI_CLASS (AndroidViewManager, "android/view/ViewManager") #undef JNI_CLASS_MEMBERS #define JNI_CLASS_MEMBERS(METHOD, STATICMETHOD, FIELD, STATICFIELD, CALLBACK) \ - METHOD (create, "", "(IIIIIII)V") \ - FIELD (gravity, "gravity", "I") \ - FIELD (windowAnimations, "windowAnimations", "I") + METHOD (create, "", "(IIIIIII)V") \ + METHOD (createDefault, "", "()V") \ + FIELD (gravity, "gravity", "I") \ + FIELD (systemUiVisibility, "systemUiVisibility", "I") \ + FIELD (windowAnimations, "windowAnimations", "I") \ + FIELD (flags, "flags", "I") \ + FIELD (softInputMode, "softInputMode", "I") \ + FIELD (format, "format", "I") \ + FIELD (type, "type", "I") \ + FIELD (x, "x", "I") \ + FIELD (y, "y", "I") \ DECLARE_JNI_CLASS (AndroidWindowManagerLayoutParams, "android/view/WindowManager$LayoutParams") #undef JNI_CLASS_MEMBERS @@ -952,6 +892,20 @@ DECLARE_JNI_CLASS (AndroidWindowManagerLayoutParams, "android/view/WindowManager DECLARE_JNI_CLASS_WITH_MIN_SDK (AndroidWindowManagerLayoutParams28, "android/view/WindowManager$LayoutParams", 28) #undef JNI_CLASS_MEMBERS +#define JNI_CLASS_MEMBERS(METHOD, STATICMETHOD, FIELD, STATICFIELD, CALLBACK) \ + METHOD (getSystemWindowInsetTop, "getSystemWindowInsetTop", "()I") \ + METHOD (getSystemWindowInsetBottom, "getSystemWindowInsetBottom", "()I") \ + METHOD (getSystemWindowInsetLeft, "getSystemWindowInsetLeft", "()I") \ + METHOD (getSystemWindowInsetRight, "getSystemWindowInsetRight", "()I") \ + METHOD (getStableInsetTop, "getStableInsetTop", "()I") \ + METHOD (getStableInsetBottom, "getStableInsetBottom", "()I") \ + METHOD (getStableInsetLeft, "getStableInsetLeft", "()I") \ + METHOD (getStableInsetRight, "getStableInsetRight", "()I") \ + METHOD (consumeSystemWindowInsets, "consumeSystemWindowInsets", "()Landroid/view/WindowInsets;") \ + + DECLARE_JNI_CLASS (AndroidWindowInsets, "android/view/WindowInsets") +#undef JNI_CLASS_MEMBERS + #define JNI_CLASS_MEMBERS(METHOD, STATICMETHOD, FIELD, STATICFIELD, CALLBACK) \ METHOD (getDisplayCutout, "getDisplayCutout", "()Landroid/view/DisplayCutout;") \ METHOD (consumeDisplayCutout, "consumeDisplayCutout", "()Landroid/view/WindowInsets;") @@ -986,7 +940,8 @@ DECLARE_JNI_CLASS_WITH_MIN_SDK (AndroidWindowManagerLayoutParams28, "android/vie #define JNI_CLASS_MEMBERS(METHOD, STATICMETHOD, FIELD, STATICFIELD, CALLBACK) \ STATICMETHOD (ime, "ime", "()I") \ - STATICMETHOD (displayCutout, "displayCutout", "()I") + STATICMETHOD (displayCutout, "displayCutout", "()I") \ + STATICMETHOD (systemBars, "systemBars", "()I") \ DECLARE_JNI_CLASS_WITH_MIN_SDK (AndroidWindowInsetsType, "android/view/WindowInsets$Type", 30) #undef JNI_CLASS_MEMBERS @@ -998,6 +953,19 @@ DECLARE_JNI_CLASS_WITH_MIN_SDK (AndroidWindowManagerLayoutParams28, "android/vie DECLARE_JNI_CLASS (AndroidPair, "android/util/Pair") #undef JNI_CLASS_MEMBERS +#define JNI_CLASS_MEMBERS(METHOD, STATICMETHOD, FIELD, STATICFIELD, CALLBACK) \ + METHOD (getBounds, "getBounds", "()Landroid/graphics/Rect;") \ + METHOD (getWindowInsets, "getWindowInsets", "()Landroid/view/WindowInsets;") \ + + DECLARE_JNI_CLASS_WITH_MIN_SDK (AndroidWindowMetrics, "android/view/WindowMetrics", 30) +#undef JNI_CLASS_MEMBERS + +#define JNI_CLASS_MEMBERS(METHOD, STATICMETHOD, FIELD, STATICFIELD, CALLBACK) \ + METHOD (hide, "hide", "()V") \ + + DECLARE_JNI_CLASS (AndroidActionBar, "android/app/ActionBar") +#undef JNI_CLASS_MEMBERS + //============================================================================== namespace { @@ -1007,6 +975,7 @@ namespace SYSTEM_UI_FLAG_LOW_PROFILE = 1, SYSTEM_UI_FLAG_HIDE_NAVIGATION = 2, SYSTEM_UI_FLAG_FULLSCREEN = 4, + SYSTEM_UI_FLAG_LAYOUT_STABLE = 256, SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION = 512, SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN = 1024, SYSTEM_UI_FLAG_IMMERSIVE = 2048, @@ -1015,12 +984,24 @@ namespace constexpr int fullScreenFlags = SYSTEM_UI_FLAG_HIDE_NAVIGATION | SYSTEM_UI_FLAG_FULLSCREEN | SYSTEM_UI_FLAG_IMMERSIVE_STICKY; constexpr int FLAG_NOT_FOCUSABLE = 0x8; + + LocalRef getCurrentOrMainActivity() noexcept + { + if (auto result = getCurrentActivity()) + return result; + + if (auto result = getMainActivity()) + return result; + + return {}; + } } //============================================================================== -static bool supportsDisplayCutout() +static BorderSize computeLogicalBorderSize (BorderSize b, double displayScale) { - return getAndroidSDKVersion() >= 28; + const auto getInset = [&] (int physicalSize) { return roundToInt (physicalSize / displayScale); }; + return { getInset (b.getTop()), getInset (b.getLeft()), getInset (b.getBottom()), getInset (b.getRight()) }; } static BorderSize androidDisplayCutoutToBorderSize (LocalRef displayCutout, double displayScale) @@ -1030,15 +1011,13 @@ static BorderSize androidDisplayCutoutToBorderSize (LocalRef displ auto* env = getEnv(); - const auto getInset = [&] (jmethodID methodID) - { - return roundToInt (env->CallIntMethod (displayCutout, methodID) / displayScale); - }; + const auto getInset = [&] (jmethodID methodID) { return env->CallIntMethod (displayCutout, methodID); }; - return { getInset (AndroidDisplayCutout.getSafeInsetTop), - getInset (AndroidDisplayCutout.getSafeInsetLeft), - getInset (AndroidDisplayCutout.getSafeInsetBottom), - getInset (AndroidDisplayCutout.getSafeInsetRight) }; + return computeLogicalBorderSize ({ getInset (AndroidDisplayCutout.getSafeInsetTop), + getInset (AndroidDisplayCutout.getSafeInsetLeft), + getInset (AndroidDisplayCutout.getSafeInsetBottom), + getInset (AndroidDisplayCutout.getSafeInsetRight) }, + displayScale); } static BorderSize androidInsetsToBorderSize (LocalRef insets, double displayScale) @@ -1048,15 +1027,13 @@ static BorderSize androidInsetsToBorderSize (LocalRef insets, doub auto* env = getEnv(); - const auto getInset = [&] (jfieldID fieldID) - { - return roundToInt (env->GetIntField (insets, fieldID) / displayScale); - }; + const auto getInset = [&] (jfieldID fieldID) { return env->GetIntField (insets, fieldID); }; - return { getInset (AndroidGraphicsInsets.top), - getInset (AndroidGraphicsInsets.left), - getInset (AndroidGraphicsInsets.bottom), - getInset (AndroidGraphicsInsets.right) }; + return computeLogicalBorderSize ({ getInset (AndroidGraphicsInsets.top), + getInset (AndroidGraphicsInsets.left), + getInset (AndroidGraphicsInsets.bottom), + getInset (AndroidGraphicsInsets.right) }, + displayScale); } class JuceInsets @@ -1073,33 +1050,91 @@ public: auto tie() const { return std::tie (displayCutout, keyboard); } }; -static JuceInsets getInsetsFromAndroidWindowInsets (LocalRef windowInsets, double scale) +static JuceInsets getInsetsFromAndroidWindowInsets (LocalRef windowInsets, jint visibility, double scale) { auto* env = getEnv(); if (windowInsets == nullptr) return {}; - const auto displayCutout = [&]() -> BorderSize + const auto systemAreas = std::invoke ([&]() -> BorderSize { + // Use the new WindowInsets API where available + if (AndroidWindowInsets30.getInsets != nullptr) + { + const auto bars = env->CallStaticIntMethod (AndroidWindowInsetsType, AndroidWindowInsetsType.systemBars); + const auto cutout = env->CallStaticIntMethod (AndroidWindowInsetsType, AndroidWindowInsetsType.displayCutout); + const jint mask = cutout | bars; + const LocalRef insets { env->CallObjectMethod (windowInsets, AndroidWindowInsets30.getInsets, mask) }; + return androidInsetsToBorderSize (insets, scale); + } + + // The WindowInsets API with combined cutout/system area reporting isn't available, so + // use the old API instead. + const auto currentTop = env->CallIntMethod (windowInsets, AndroidWindowInsets.getSystemWindowInsetTop); + const auto currentLeft = env->CallIntMethod (windowInsets, AndroidWindowInsets.getSystemWindowInsetLeft); + const auto currentBottom = env->CallIntMethod (windowInsets, AndroidWindowInsets.getSystemWindowInsetBottom); + const auto currentRight = env->CallIntMethod (windowInsets, AndroidWindowInsets.getSystemWindowInsetRight); + + const auto stableBottom = env->CallIntMethod (windowInsets, AndroidWindowInsets.getStableInsetBottom); + + // This is similar to the approach taken in the AndroidX library, see WindowInsetsCompat.java. + // System UI insets are always posted to our window, even if the UI isn't showing on-screen. + // Therefore, we check which UI is *actually* visible, and remove the insets for any invisible UI. + const auto hasStatus = (visibility & SYSTEM_UI_FLAG_FULLSCREEN) == 0; + const auto hasNav = (visibility & SYSTEM_UI_FLAG_HIDE_NAVIGATION) == 0; + + const auto bottomInset = std::invoke ([&] + { + // This likely indicates that the IME is showing, and we want to respect the keyboard + // insets in this case + if (currentBottom > stableBottom) + return currentBottom; + + if (hasNav) + return currentBottom; + + return 0; + }); + + const auto baseBorder = computeLogicalBorderSize ({ hasStatus ? currentTop : 0, + hasNav ? currentLeft : 0, + bottomInset, + hasNav ? currentRight : 0 }, + scale); + if (AndroidWindowInsets28.getDisplayCutout == nullptr) - return {}; + return baseBorder; - const LocalRef insets { env->CallObjectMethod (windowInsets, AndroidWindowInsets28.getDisplayCutout) }; - return androidDisplayCutoutToBorderSize (insets, scale); - }(); + const LocalRef insets { env->CallObjectMethod (windowInsets, AndroidWindowInsets28.getDisplayCutout) }; + const auto cutouts = androidDisplayCutoutToBorderSize (insets, scale); + return { jmax (baseBorder.getTop(), cutouts.getTop()), + jmax (baseBorder.getLeft(), cutouts.getLeft()), + jmax (baseBorder.getBottom(), cutouts.getBottom()), + jmax (baseBorder.getRight(), cutouts.getRight()) }; + }); - const auto keyboard = [&]() -> BorderSize + const auto keyboard = std::invoke ([&]() -> BorderSize { if (AndroidWindowInsetsType.ime == nullptr || AndroidWindowInsets30.getInsets == nullptr) return {}; - const auto mask = env->CallStaticIntMethod (AndroidWindowInsetsType, AndroidWindowInsetsType.ime); - const LocalRef insets { env->CallObjectMethod (windowInsets, AndroidWindowInsets30.getInsets, mask) }; - return androidInsetsToBorderSize (insets, scale); - }(); + // The IME insets may also include the system or cutout insets, but we expect the keyboard + // insets to be strictly additive, so remove any insets we've already included in the system areas + const auto ime = env->CallStaticIntMethod (AndroidWindowInsetsType, AndroidWindowInsetsType.ime); + const auto bars = env->CallStaticIntMethod (AndroidWindowInsetsType, AndroidWindowInsetsType.systemBars); + const auto cutout = env->CallStaticIntMethod (AndroidWindowInsetsType, AndroidWindowInsetsType.displayCutout); + const jint mask = ime | cutout | bars; - return { displayCutout, keyboard }; + const LocalRef insets { env->CallObjectMethod (windowInsets, AndroidWindowInsets30.getInsets, mask) }; + const auto unclamped = systemAreas.subtractedFrom (androidInsetsToBorderSize (insets, scale)); + return { jmax (0, unclamped.getTop()), + jmax (0, unclamped.getLeft()), + jmax (0, unclamped.getBottom()), + jmax (0, unclamped.getRight()) }; + }); + + return { systemAreas, keyboard }; } /* The usage of the KeyPress class relies on its keyCode member having the standard ASCII values @@ -1232,8 +1267,7 @@ static constexpr int translateAndroidKeyboardFlags (int javaFlags) noexcept } //============================================================================== -class AndroidComponentPeer final : public ComponentPeer, - private Timer +class AndroidComponentPeer final : public ComponentPeer { public: AndroidComponentPeer (Component& comp, int windowStyleFlags, void* nativeViewHandle) @@ -1279,7 +1313,7 @@ public: { viewGroupIsWindow = true; - LocalRef viewLayoutParams (env->NewObject (AndroidLayoutParams, AndroidLayoutParams.create, -2, -2)); + LocalRef viewLayoutParams { env->NewObject (AndroidLayoutParams, AndroidLayoutParams.create, -2, -2) }; env->CallVoidMethod (view.get(), AndroidView.setLayoutParams, viewLayoutParams.get()); auto physicalBounds = (comp.getBoundsInParent().toFloat() * scale).toNearestInt(); @@ -1287,43 +1321,53 @@ public: view.callVoidMethod (AndroidView.layout, physicalBounds.getX(), physicalBounds.getY(), physicalBounds.getRight(), physicalBounds.getBottom()); - LocalRef windowLayoutParams (env->NewObject (AndroidWindowManagerLayoutParams, AndroidWindowManagerLayoutParams.create, - physicalBounds.getWidth(), physicalBounds.getHeight(), - physicalBounds.getX(), physicalBounds.getY(), - TYPE_APPLICATION, FLAG_NOT_TOUCH_MODAL | FLAG_LAYOUT_IN_SCREEN | FLAG_LAYOUT_NO_LIMITS | FLAG_NOT_FOCUSABLE, - component.isOpaque() ? PIXEL_FORMAT_OPAQUE : PIXEL_FORMAT_TRANSPARENT)); - - env->SetIntField (windowLayoutParams.get(), AndroidWindowManagerLayoutParams.gravity, GRAVITY_LEFT | GRAVITY_TOP); - env->SetIntField (windowLayoutParams.get(), AndroidWindowManagerLayoutParams.windowAnimations, 0x01030000 /* android.R.style.Animation */); - - if (supportsDisplayCutout()) - { - if (const auto fieldID = AndroidWindowManagerLayoutParams28.layoutInDisplayCutoutMode) - env->SetIntField (windowLayoutParams, fieldID, LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS); - } + LocalRef windowLayoutParams { env->NewObject (AndroidWindowManagerLayoutParams, + AndroidWindowManagerLayoutParams.createDefault) }; if (Desktop::getInstance().getKioskModeComponent() != nullptr) setNavBarsHidden (true); - LocalRef activity (getCurrentActivity()); + setUpLayoutParams (env, windowLayoutParams, physicalBounds); - if (activity == nullptr) - activity = getMainActivity(); + auto activity = getCurrentOrMainActivity(); - viewGroup = GlobalRef (LocalRef (env->CallObjectMethod (activity.get(), AndroidContext.getSystemService, javaString ("window").get()))); - env->CallVoidMethod (viewGroup.get(), AndroidViewManager.addView, view.get(), windowLayoutParams.get()); + const LocalRef window { env->CallObjectMethod (activity, AndroidActivity.getWindow) }; + activityWindow = GlobalRef { window }; + const LocalRef attributes { env->CallObjectMethod (window, AndroidWindow.getAttributes) }; + + static constexpr auto SOFT_INPUT_ADJUST_RESIZE = 0x10; + env->SetIntField (attributes, AndroidWindowManagerLayoutParams.softInputMode, SOFT_INPUT_ADJUST_RESIZE); + + enableLayoutInCutout (env, attributes); + + // There's not much use for an action bar if we're only drawing JUCE content into the window + if (const LocalRef actionBar { env->CallObjectMethod (activity, AndroidActivity.getActionBar) }) + env->CallVoidMethod (actionBar, AndroidActionBar.hide); + + auto flags = env->GetIntField (windowLayoutParams, AndroidWindowManagerLayoutParams.flags); + flags |= FLAG_NOT_FOCUSABLE; + env->SetIntField (windowLayoutParams, AndroidWindowManagerLayoutParams.flags, flags); + + viewGroup = GlobalRef { LocalRef { env->CallObjectMethod (activity, AndroidActivity.getWindowManager) } }; + env->CallVoidMethod (viewGroup, AndroidViewManager.addView, view.get(), windowLayoutParams.get()); + + // It *seems* as though adding a new focusable window will cause the system UI to show + // if previously hidden, even if the new window also wants the system UI to be hidden. + // Setting the focusable flag after first adding the window stops the system UI from + // reappearing. I don't know why this works! + env->SetIntField (windowLayoutParams, AndroidWindowManagerLayoutParams.flags, flags & ~FLAG_NOT_FOCUSABLE); + env->CallVoidMethod (viewGroup, AndroidViewManager.updateViewLayout, view.get(), windowLayoutParams.get()); } - if (supportsDisplayCutout()) - { - if (const auto methodID = AndroidView.setOnApplyWindowInsetsListener) - { - env->CallVoidMethod (view, - methodID, - CreateJavaInterface (new ViewWindowInsetsListener, - "android/view/View$OnApplyWindowInsetsListener").get()); - } - } + auto activity = getCurrentOrMainActivity(); + + const LocalRef window { env->CallObjectMethod (activity, AndroidActivity.getWindow) }; + const LocalRef decorView { env->CallObjectMethod (window, AndroidWindow.getDecorView) }; + const auto listener = CreateJavaInterface (new ViewWindowInsetsListener, + "android/view/View$OnApplyWindowInsetsListener"); + env->CallVoidMethod (decorView, + AndroidView.setOnApplyWindowInsetsListener, + listener.get()); if (isFocused()) handleFocusGain(); @@ -1331,10 +1375,15 @@ public: ~AndroidComponentPeer() override { - stopTimer(); - auto* env = getEnv(); + auto activity = getCurrentOrMainActivity(); + + const LocalRef window { env->CallObjectMethod (activity, AndroidActivity.getWindow) }; + const LocalRef decorView { env->CallObjectMethod (window, AndroidWindow.getDecorView) }; + + env->CallVoidMethod (decorView, AndroidView.setOnApplyWindowInsetsListener, (jobject) nullptr); + env->CallVoidMethod (view, ComponentPeerView.clear); frontWindow = nullptr; @@ -1378,20 +1427,30 @@ public: { fullScreen = isNowFullScreen; - view.callVoidMethod (AndroidView.layout, - bounds.getX(), bounds.getY(), bounds.getRight(), bounds.getBottom()); - if (viewGroup != nullptr && viewGroupIsWindow) { auto* env = getEnv(); - LocalRef windowLayoutParams (env->NewObject (AndroidWindowManagerLayoutParams, AndroidWindowManagerLayoutParams.create, - bounds.getWidth(), bounds.getHeight(), bounds.getX(), bounds.getY(), - TYPE_APPLICATION, FLAG_NOT_TOUCH_MODAL | FLAG_LAYOUT_IN_SCREEN | FLAG_LAYOUT_NO_LIMITS, - component.isOpaque() ? PIXEL_FORMAT_OPAQUE : PIXEL_FORMAT_TRANSPARENT)); + LocalRef windowLayoutParams { env->NewObject (AndroidWindowManagerLayoutParams, + AndroidWindowManagerLayoutParams.createDefault) }; + + setUpLayoutParams (env, windowLayoutParams.get(), bounds); + + env->CallVoidMethod (viewGroup.get(), + AndroidViewManager.updateViewLayout, + view.get(), + windowLayoutParams.get()); + + setNavBarsHidden (navBarsHidden); + } + else + { + view.callVoidMethod (AndroidView.layout, + bounds.getX(), + bounds.getY(), + bounds.getRight(), + bounds.getBottom()); - env->SetIntField (windowLayoutParams.get(), AndroidWindowManagerLayoutParams.gravity, GRAVITY_LEFT | GRAVITY_TOP); - env->CallVoidMethod (viewGroup.get(), AndroidViewManager.updateViewLayout, view.get(), windowLayoutParams.get()); } } else @@ -1426,16 +1485,7 @@ public: Point getScreenPosition() const { - auto* env = getEnv(); - - LocalRef position (env->NewIntArray (2)); - env->CallVoidMethod (view.get(), AndroidView.getLocationOnScreen, position.get()); - - jint* const screenPosition = env->GetIntArrayElements (position.get(), nullptr); - Point pos (screenPosition[0], screenPosition[1]); - env->ReleaseIntArrayElements (position.get(), screenPosition, 0); - - return pos; + return getViewLocationOnScreen (getEnv(), view.get()); } Point localToGlobal (Point relativePosition) override @@ -1469,27 +1519,19 @@ public: void setFullScreen (bool shouldBeFullScreen) override { - if (shouldNavBarsBeHidden (shouldBeFullScreen)) - { - if (isTimerRunning()) - return; + setNavBarsHidden (shouldNavBarsBeHidden (shouldBeFullScreen)); - startTimer (500); - } - else + auto newBounds = std::invoke ([&] { - setNavBarsHidden (false); - } - - auto newBounds = [&] - { - if (navBarsHidden || shouldBeFullScreen) + // Even if we're "fullscreen", Android might be displaying our app in a split-screen + // mode. We treat fullscreen mode as just filling the extent of the window provided for + // us. + if (shouldBeFullScreen) if (auto* display = Desktop::getInstance().getDisplays().getPrimaryDisplay()) - return navBarsHidden ? display->totalArea - : display->userArea; + return display->userArea; return lastNonFullscreenBounds.isEmpty() ? getBounds() : lastNonFullscreenBounds; - }(); + }); if (! newBounds.isEmpty()) setBounds (newBounds, shouldBeFullScreen); @@ -1840,9 +1882,6 @@ public: closeInputMethodContext(); view.callVoidMethod (ComponentPeerView.hideKeyboard); - - if (! isTimerRunning()) - startTimer (500); } //============================================================================== @@ -1950,10 +1989,129 @@ public: } }; + class MainActivityWindowLayoutListener : public AndroidInterfaceImplementer + { + private: + jobject invoke (jobject proxy, jobject method, jobjectArray args) override + { + auto* env = getEnv(); + auto methodName = juceString ((jstring) env->CallObjectMethod (method, JavaMethod.getName)); + + if (methodName == "onLayoutChange") + { + jassert (env->GetArrayLength (args) == 9); + + forceDisplayUpdate(); + + return nullptr; + } + + // invoke base class + return AndroidInterfaceImplementer::invoke (proxy, method, args); + } + }; + private: template static void mouseCallbackWrapper (JNIEnv*, AndroidComponentPeer& t, jint i, jfloat x, jfloat y, jlong time) { return (t.*Member) (i, Point { x, y }, time); } + static Point getViewLocationOnScreen (JNIEnv* env, jobject view) + { + if (view == nullptr) + return {}; + + LocalRef position { env->NewIntArray (2) }; + env->CallVoidMethod (view, AndroidView.getLocationOnScreen, position.get()); + + jint* const screenPosition = env->GetIntArrayElements (position.get(), nullptr); + Point pos (screenPosition[0], screenPosition[1]); + env->ReleaseIntArrayElements (position.get(), screenPosition, 0); + + return pos; + } + + static Point getActivityLocationOnScreen (JNIEnv* env, jobject activity) + { + if (activity == nullptr) + return {}; + + LocalRef mainWindow { env->CallObjectMethod (activity, AndroidActivity.getWindow) }; + + if (mainWindow == nullptr) + return {}; + + return getViewLocationOnScreen (env, env->CallObjectMethod (mainWindow, AndroidWindow.getDecorView)); + } + + static void enableLayoutInCutout (JNIEnv* env, jobject windowLayoutParams) + { + if (const auto fieldID = AndroidWindowManagerLayoutParams28.layoutInDisplayCutoutMode) + { + const jint layoutMode = getAndroidSDKVersion() >= 30 + ? LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS + : LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES; + env->SetIntField (windowLayoutParams, fieldID, layoutMode); + } + } + + void setUpLayoutParams (JNIEnv* env, jobject layoutParams, Rectangle bounds) const + { + constexpr jint MATCH_PARENT = -1; + env->SetIntField (layoutParams, AndroidLayoutParams.width, fullScreen ? MATCH_PARENT : bounds.getWidth()); + env->SetIntField (layoutParams, AndroidLayoutParams.height, fullScreen ? MATCH_PARENT : bounds.getHeight()); + + if (! env->IsInstanceOf (layoutParams, AndroidWindowManagerLayoutParams)) + return; + + // When viewGroupIsWindow is true, we're laying out the window within the bounds + // provided to the activity, and the userRect is in global screen space. + // For fullscreen windows, it's easiest to ask Android to size the view + // appropriately by matching the parent view. + // For non-fullscreen windows, despite FLAG_LAYOUT_IN_SCREEN below, the view + // coordinates here appear to be interpreted as relative to the bounds of the + // activity's main window, rather than relative to the display. + // This matters when the app window's top-left isn't flush with the top-left of + // the display, which frequently happens in split-screen mode. + + const auto posInActivity = fullScreen + ? Point{} + : bounds.getPosition() - getActivityLocationOnScreen (env, getMainActivity()); + + env->SetIntField (layoutParams, AndroidWindowManagerLayoutParams.x, posInActivity.x); + env->SetIntField (layoutParams, AndroidWindowManagerLayoutParams.y, posInActivity.y); + + env->SetIntField (layoutParams, AndroidWindowManagerLayoutParams.gravity, GRAVITY_TOP | GRAVITY_LEFT); + + enableLayoutInCutout (env, layoutParams); + + if (const auto fieldID = AndroidWindowManagerLayoutParams28.layoutInDisplayCutoutMode) + { + const jint layoutMode = getAndroidSDKVersion() >= 30 + ? LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS + : LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES; + env->SetIntField (layoutParams, fieldID, layoutMode); + } + + // In split-screen mode these flags seem to go missing, so make sure they're still + // set. Without these, the navigation bar insets and background may display incorrectly. + auto flags = env->GetIntField (layoutParams, AndroidWindowManagerLayoutParams.flags); + flags |= FLAG_NOT_TOUCH_MODAL + | FLAG_LAYOUT_IN_SCREEN + | FLAG_LAYOUT_NO_LIMITS + | FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS + | FLAG_TRANSLUCENT_NAVIGATION + | FLAG_TRANSLUCENT_STATUS; + env->SetIntField (layoutParams, AndroidWindowManagerLayoutParams.flags, flags); + + env->SetIntField (layoutParams, + AndroidWindowManagerLayoutParams.format, + component.isOpaque() ? PIXEL_FORMAT_OPAQUE : PIXEL_FORMAT_TRANSPARENT); + env->SetIntField (layoutParams, AndroidWindowManagerLayoutParams.type, TYPE_APPLICATION); + + static constexpr auto SOFT_INPUT_ADJUST_RESIZE = 0x10; + env->SetIntField (layoutParams, AndroidWindowManagerLayoutParams.softInputMode, SOFT_INPUT_ADJUST_RESIZE); + } + //============================================================================== #define JNI_CLASS_MEMBERS(METHOD, STATICMETHOD, FIELD, STATICFIELD, CALLBACK) \ METHOD (create, "", "(Landroid/content/Context;ZJ)V") \ @@ -1965,7 +2123,7 @@ private: METHOD (showKeyboard, "showKeyboard", "(III)V") \ METHOD (hideKeyboard, "hideKeyboard", "()V") \ METHOD (closeInputMethodContext, "closeInputMethodContext", "()V") \ - METHOD (setSystemUiVisibilityCompat, "setSystemUiVisibilityCompat", "(I)V") \ + METHOD (setSystemUiVisibilityCompat, "setSystemUiVisibilityCompat", "(Landroid/view/Window;Z)V") \ CALLBACK (generatedCallback<&AndroidComponentPeer::handleDoFrameCallback>, "handleDoFrame", "(JJ)V") \ CALLBACK (generatedCallback<&AndroidComponentPeer::handlePaintCallback>, "handlePaint", "(JLandroid/graphics/Canvas;Landroid/graphics/Paint;)V") \ CALLBACK (generatedCallback<&AndroidComponentPeer::handleKeyDownCallback>, "handleKeyDown", "(JIII)V") \ @@ -2088,40 +2246,36 @@ private: t.setTemporaryUnderlining (javaListOfPairToArrayOfRange (env, list)); } - //============================================================================== - class ViewWindowInsetsListener final : public juce::AndroidInterfaceImplementer + class ViewWindowInsetsListener final : public AndroidInterfaceImplementer { - public: - jobject onApplyWindowInsets (LocalRef, LocalRef insets) + private: + jobject onApplyWindowInsets (JNIEnv* env, LocalRef, LocalRef insets) const { - auto* env = getEnv(); - - const auto& mainDisplay = *Desktop::getInstance().getDisplays().getPrimaryDisplay(); - const auto newInsets = getInsetsFromAndroidWindowInsets (insets, mainDisplay.scale); - - if (newInsets.tie() != JuceInsets::tie (mainDisplay)) - forceDisplayUpdate(); + forceDisplayUpdate(); if (const auto fieldId = AndroidWindowInsets30.CONSUMED) return env->GetStaticObjectField (AndroidWindowInsets30, fieldId); - return env->CallObjectMethod (insets, AndroidWindowInsets28.consumeDisplayCutout); + auto* consumed = env->CallObjectMethod (insets, AndroidWindowInsets.consumeSystemWindowInsets); + + if (const auto fieldId = AndroidWindowInsets28.consumeDisplayCutout) + return env->CallObjectMethod (consumed, fieldId); + + return consumed; } - private: jobject invoke (jobject proxy, jobject method, jobjectArray args) override { auto* env = getEnv(); - auto methodName = juce::juceString ((jstring) env->CallObjectMethod (method, JavaMethod.getName)); + auto methodName = juceString ((jstring) env->CallObjectMethod (method, JavaMethod.getName)); if (methodName == "onApplyWindowInsets") { jassert (env->GetArrayLength (args) == 2); - LocalRef windowView (env->GetObjectArrayElement (args, 0)); - LocalRef insets (env->GetObjectArrayElement (args, 1)); - - return onApplyWindowInsets (std::move (windowView), std::move (insets)); + return onApplyWindowInsets (env, + LocalRef { env->GetObjectArrayElement (args, 0) }, + LocalRef { env->GetObjectArrayElement (args, 1) }); } // invoke base class @@ -2191,13 +2345,6 @@ private: }; //============================================================================== - void timerCallback() override - { - setNavBarsHidden (shouldNavBarsBeHidden (fullScreen)); - setFullScreen (fullScreen); - stopTimer(); - } - bool isKioskModeComponent() const { if (auto* kiosk = Desktop::getInstance().getKioskModeComponent()) @@ -2213,13 +2360,14 @@ private: void setNavBarsHidden (bool hidden) { - if (navBarsHidden != hidden) - { - navBarsHidden = hidden; - - view.callVoidMethod (ComponentPeerView.setSystemUiVisibilityCompat, - (navBarsHidden ? (jint) (fullScreenFlags) : (jint) (SYSTEM_UI_FLAG_VISIBLE))); - } + // The system may show the bars again, e.g when navigating away from the app and + // back again. Therefore, we should call setSystemUiVisibilityCompat each time to + // ensure that the system bars get put back into the expected state. + navBarsHidden = hidden; + getEnv()->CallVoidMethod (view, + ComponentPeerView.setSystemUiVisibilityCompat, + activityWindow.get(), + (jboolean) ! navBarsHidden); } template @@ -2236,13 +2384,19 @@ private: static AndroidComponentPeer* frontWindow; static GlobalRef activityCallbackListener; - static constexpr int GRAVITY_LEFT = 0x3, GRAVITY_TOP = 0x30; - static constexpr int TYPE_APPLICATION = 0x2; - static constexpr int FLAG_NOT_TOUCH_MODAL = 0x20, FLAG_LAYOUT_IN_SCREEN = 0x100, FLAG_LAYOUT_NO_LIMITS = 0x200; - static constexpr int PIXEL_FORMAT_OPAQUE = -1, PIXEL_FORMAT_TRANSPARENT = -2; - static constexpr int LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS = 0x3; + static constexpr jint GRAVITY_LEFT = 0x3, GRAVITY_TOP = 0x30; + static constexpr jint TYPE_APPLICATION = 0x2; + static constexpr jint TYPE_APPLICATION_PANEL = 1000; + static constexpr jint FLAG_NOT_TOUCH_MODAL = 0x20, FLAG_LAYOUT_IN_SCREEN = 0x100; + static constexpr jint FLAG_TRANSLUCENT_STATUS = 0x04000000; + static constexpr jint FLAG_TRANSLUCENT_NAVIGATION = 0x08000000; + static constexpr jint FLAG_LAYOUT_NO_LIMITS = 0x200; + static constexpr jint FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS = (jint) 0x80000000; + static constexpr jint PIXEL_FORMAT_OPAQUE = -1, PIXEL_FORMAT_TRANSPARENT = -2; + static constexpr jint LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS = 0x3; + static constexpr jint LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES = 0x1; - GlobalRef view, viewGroup, buffer; + GlobalRef view, viewGroup, buffer, activityWindow; bool viewGroupIsWindow = false, fullScreen = false, navBarsHidden = false; int sizeAllocated = 0; float scale = (float) Desktop::getInstance().getDisplays().getPrimaryDisplay()->scale; @@ -2366,7 +2520,6 @@ Desktop::DisplayOrientation Desktop::getCurrentOrientation() const JNIEnv* env = getEnv(); LocalRef windowServiceString (javaString ("window")); - LocalRef windowManager = LocalRef (env->CallObjectMethod (getAppContext().get(), AndroidContext.getSystemService, windowServiceString.get())); if (windowManager.get() != nullptr) @@ -2473,7 +2626,7 @@ DECLARE_JNI_CLASS (AndroidDialogOnClickListener, "android/content/DialogInterfac #undef JNI_CLASS_MEMBERS //============================================================================== -class DialogListener final : public juce::AndroidInterfaceImplementer +class DialogListener final : public AndroidInterfaceImplementer { public: explicit DialogListener (std::function cb) : callback (std::move (cb)) {} @@ -2481,7 +2634,7 @@ public: jobject invoke (jobject proxy, jobject method, jobjectArray args) override { auto* env = getEnv(); - auto methodName = juce::juceString ((jstring) env->CallObjectMethod (method, JavaMethod.getName)); + auto methodName = juceString ((jstring) env->CallObjectMethod (method, JavaMethod.getName)); if (methodName == "onCancel" || methodName == "onClick") { @@ -2582,159 +2735,116 @@ void Desktop::allowedOrientationsChanged() DECLARE_JNI_CLASS (AndroidDisplayMetrics, "android/util/DisplayMetrics") #undef JNI_CLASS_MEMBERS -//============================================================================== -class LayoutChangeListener : public juce::AndroidInterfaceImplementer -{ -public: - virtual void onLayoutChange (LocalRef view, int left, int top, int right, int bottom, - int oldLeft, int oldTop, int oldRight, int oldBottom) = 0; - -private: - jobject invoke (jobject proxy, jobject method, jobjectArray args) override - { - auto* env = getEnv(); - auto methodName = juce::juceString ((jstring) env->CallObjectMethod (method, JavaMethod.getName)); - - if (methodName == "onLayoutChange") - { - jassert (env->GetArrayLength (args) == 9); - - LocalRef view (env->GetObjectArrayElement (args, 0)); - int dims[8]; - - for (int i = 1; i < 9; ++i) - { - LocalRef integer (env->GetObjectArrayElement (args, i)); - dims[i - 1] = env->CallIntMethod (integer.get(), JavaInteger.intValue); - } - - onLayoutChange (std::move (view), dims[0], dims[1], dims[2], dims[3], - dims[4], dims[5], dims[6], dims[7]); - - return nullptr; - } - - // invoke base class - return AndroidInterfaceImplementer::invoke (proxy, method, args); - } - - std::unique_ptr callback; -}; - -//============================================================================== -struct MainActivityWindowLayoutListener final : public LayoutChangeListener -{ - MainActivityWindowLayoutListener (std::function&& updateDisplaysCb) - : forceDisplayUpdate (std::move (updateDisplaysCb)) - { - } - - void onLayoutChange (LocalRef /*view*/, int left, int top, int right, int bottom, - int oldLeft, int oldTop, int oldRight, int oldBottom) override - { - auto newBounds = Rectangle::leftTopRightBottom (left, top, right, bottom); - auto oldBounds = Rectangle::leftTopRightBottom (oldLeft, oldTop, oldRight, oldBottom); - - if (newBounds != oldBounds) - { - const auto& mainDisplay = *Desktop::getInstance().getDisplays().getPrimaryDisplay(); - auto userArea = (newBounds.toFloat() / mainDisplay.scale).toNearestInt(); - - if (userArea != mainDisplay.userArea) - forceDisplayUpdate(); - } - } - - std::function forceDisplayUpdate; -}; - //============================================================================== void Displays::findDisplays (float masterScale) { auto* env = getEnv(); - LocalRef usableSize (makeAndroidPoint ({})); LocalRef windowServiceString (javaString ("window")); - LocalRef displayMetrics (env->NewObject (AndroidDisplayMetrics, AndroidDisplayMetrics.create)); - LocalRef windowManager (env->CallObjectMethod (getAppContext().get(), AndroidContext.getSystemService, windowServiceString.get())); + + LocalRef windowManager (env->CallObjectMethod (getAppContext(), AndroidContext.getSystemService, windowServiceString.get())); LocalRef display (env->CallObjectMethod (windowManager, AndroidWindowManager.getDefaultDisplay)); - if (const auto getRealMetricsMethod = AndroidDisplay17.getRealMetrics) - env->CallVoidMethod (display, getRealMetricsMethod, displayMetrics.get()); - else - env->CallVoidMethod (display, AndroidDisplay.getMetrics, displayMetrics.get()); - - env->CallVoidMethod (display, AndroidDisplay.getSize, usableSize.get()); + LocalRef displayMetrics (env->NewObject (AndroidDisplayMetrics, AndroidDisplayMetrics.create)); + env->CallVoidMethod (display, AndroidDisplay17.getRealMetrics, displayMetrics.get()); Display d; - d.isMain = true; - d.scale = env->GetFloatField (displayMetrics.get(), AndroidDisplayMetrics.density); + + d.scale = env->GetFloatField (displayMetrics, AndroidDisplayMetrics.density); d.dpi = (d.scale * 160.f); d.scale *= masterScale; - d.totalArea = Rectangle (env->GetIntField (displayMetrics.get(), AndroidDisplayMetrics.widthPixels), - env->GetIntField (displayMetrics.get(), AndroidDisplayMetrics.heightPixels)) / d.scale; + d.totalArea = Rectangle (env->GetIntField (displayMetrics, AndroidDisplayMetrics.widthPixels), + env->GetIntField (displayMetrics, AndroidDisplayMetrics.heightPixels)) / d.scale; - d.userArea = Rectangle (env->GetIntField (usableSize.get(), AndroidPoint.x), - env->GetIntField (usableSize.get(), AndroidPoint.y)) / d.scale; + LocalRef activity { getMainActivity() }; + LocalRef mainWindow { activity != nullptr + ? env->CallObjectMethod (activity, AndroidActivity.getWindow) + : nullptr }; + LocalRef decorView { mainWindow != nullptr + ? env->CallObjectMethod (mainWindow, AndroidWindow.getDecorView) + : nullptr }; + static constexpr jint androidContentViewId = 0x01020002 /* android.R.id.content */; + LocalRef contentView { decorView != nullptr + ? env->CallObjectMethod (decorView, AndroidView.findViewById, androidContentViewId) + : nullptr }; - // unfortunately usableSize still contains the nav bar - // the best workaround is to try to get the size of the top-level view of - // the main activity - LocalRef activity (getMainActivity()); + LocalRef insetsNative { decorView != nullptr + ? env->CallObjectMethod (decorView, AndroidView.getRootWindowInsets) + : nullptr }; + + const auto isMultiWindow = activity != nullptr && env->CallBooleanMethod (activity, AndroidActivity.isInMultiWindowMode); + + if (insetsNative != nullptr) + { + // If we're in multi-window mode, the system UI bars are always visible + const auto visibility = isMultiWindow ? 0 : env->CallIntMethod (decorView, AndroidView.getWindowSystemUiVisibility); + JuceInsets::tie (d) = getInsetsFromAndroidWindowInsets (insetsNative, visibility, d.scale).tie(); + } + + static const auto sdkVersion = getAndroidSDKVersion(); + + if (sdkVersion >= 30) + { + const LocalRef windowMetrics (env->CallObjectMethod (windowManager, AndroidWindowManager30.getCurrentWindowMetrics)); + const LocalRef bounds (env->CallObjectMethod (windowMetrics, AndroidWindowMetrics.getBounds)); + d.userArea = (Rectangle::leftTopRightBottom (env->GetIntField (bounds, AndroidRect.left), + env->GetIntField (bounds, AndroidRect.top), + env->GetIntField (bounds, AndroidRect.right), + env->GetIntField (bounds, AndroidRect.bottom)) / d.scale); + } + else + { + d.userArea = std::invoke ([&] + { + // No content view yet; approximate with display size + if (contentView == nullptr) + return d.totalArea; + + const auto topLeft = AndroidComponentPeer::getViewLocationOnScreen (env, contentView); + + // This may not be correct for split-screen mode on older devices, but there also + // doesn't seem to be a reliable way of getting this information, so this'll have to do. + const auto contentSize = Rectangle { topLeft.x, + topLeft.y, + env->CallIntMethod (contentView, AndroidView.getWidth), + env->CallIntMethod (contentView, AndroidView.getHeight) } / d.scale; + + if (contentSize.isEmpty()) + return d.totalArea; + + return contentSize; + }); + } if (activity != nullptr) { - LocalRef mainWindow (env->CallObjectMethod (activity.get(), AndroidActivity.getWindow)); - LocalRef decorView (env->CallObjectMethod (mainWindow.get(), AndroidWindow.getDecorView)); - LocalRef contentView (env->CallObjectMethod (decorView.get(), AndroidView.findViewById, 0x01020002 /* android.R.id.content */)); - if (contentView != nullptr) { - Rectangle activityArea (env->CallIntMethod (contentView.get(), AndroidView.getLeft), - env->CallIntMethod (contentView.get(), AndroidView.getTop), - env->CallIntMethod (contentView.get(), AndroidView.getWidth), - env->CallIntMethod (contentView.get(), AndroidView.getHeight)); - - if (! activityArea.isEmpty()) - d.userArea = activityArea / d.scale; - - if (const auto getRootWindowInsetsMethodId = AndroidView.getRootWindowInsets) - { - LocalRef insets (env->CallObjectMethod (contentView.get(), getRootWindowInsetsMethodId)); - JuceInsets::tie (d) = getInsetsFromAndroidWindowInsets (insets, d.scale).tie(); - } - static bool hasAddedMainActivityListener = false; - if (! hasAddedMainActivityListener) + if (! std::exchange (hasAddedMainActivityListener, true)) { - hasAddedMainActivityListener = true; - - env->CallVoidMethod (contentView.get(), AndroidView.addOnLayoutChangeListener, - CreateJavaInterface (new MainActivityWindowLayoutListener ([this] { refresh(); }), + env->CallVoidMethod (contentView, AndroidView.addOnLayoutChangeListener, + CreateJavaInterface (new AndroidComponentPeer::MainActivityWindowLayoutListener, "android/view/View$OnLayoutChangeListener").get()); } } } - else + else if (AndroidComponentPeer::activityCallbackListener == nullptr) { - // the main activity may have not started yet so add an activity listener - if (AndroidComponentPeer::activityCallbackListener == nullptr) + LocalRef appContext (getAppContext()); + + if (appContext.get() != nullptr) { - LocalRef appContext (getAppContext()); + AndroidComponentPeer::activityCallbackListener = GlobalRef (CreateJavaInterface ( + new AndroidComponentPeer::StartupActivityCallbackListener, + "android/app/Application$ActivityLifecycleCallbacks")); - if (appContext.get() != nullptr) - { - AndroidComponentPeer::activityCallbackListener = GlobalRef (CreateJavaInterface ( - new AndroidComponentPeer::StartupActivityCallbackListener, - "android/app/Application$ActivityLifecycleCallbacks")); - - env->CallVoidMethod (appContext.get(), - AndroidApplication.registerActivityLifecycleCallbacks, - AndroidComponentPeer::activityCallbackListener.get()); - } + env->CallVoidMethod (appContext, + AndroidApplication.registerActivityLifecycleCallbacks, + AndroidComponentPeer::activityCallbackListener.get()); } }