From 74a0eb9903038491143125207a5d836b4df75995 Mon Sep 17 00:00:00 2001
From: Dan G
Date: Sun, 29 Oct 2023 04:53:47 +0900
Subject: [PATCH 01/12] Change Readme images
---
README.md | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/README.md b/README.md
index 1bede481c..029642252 100644
--- a/README.md
+++ b/README.md
@@ -1,12 +1,12 @@
-# HD Launcher - 2009Scape Mobile 2.0
+HD Launcher - 2009Scape Mobile 2.1
-
+
+
+
+
-
-# 2009Scape Mobile
-
Unoffical, unsupported, and unethical app to run 2009Scape on your Android device. Based on Pojav/Boardwalk.
# Download
From 793d2e4ba105c6319155afa72cca669c3d5e3509 Mon Sep 17 00:00:00 2001
From: Dan G
Date: Sun, 29 Oct 2023 05:25:04 +0900
Subject: [PATCH 02/12] Slight screenshot tweak
---
README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/README.md b/README.md
index 029642252..ec873e5f8 100644
--- a/README.md
+++ b/README.md
@@ -4,7 +4,7 @@
-
+
Unoffical, unsupported, and unethical app to run 2009Scape on your Android device. Based on Pojav/Boardwalk.
From aed8217b813ecdaf145c9146ee00754318e585df Mon Sep 17 00:00:00 2001
From: downthecrop
Date: Wed, 1 Nov 2023 22:25:57 -0700
Subject: [PATCH 03/12] SD mode respect mouse speed preferences
---
.gitignore | 1 +
.../java/net/kdt/pojavlaunch/JavaGUILauncherActivity.java | 7 +++++--
2 files changed, 6 insertions(+), 2 deletions(-)
diff --git a/.gitignore b/.gitignore
index f5de75c1f..3303a20bb 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,6 +2,7 @@
/build
/*/build
app_pojavlauncher/src/main/assets/components/jre
+app_pojavlauncher/src/main/assets/components/lwjgl3/version
local.properties
.idea/
.DS_Store
diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/JavaGUILauncherActivity.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/JavaGUILauncherActivity.java
index bba467323..00408dc40 100644
--- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/JavaGUILauncherActivity.java
+++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/JavaGUILauncherActivity.java
@@ -1,6 +1,7 @@
package net.kdt.pojavlaunch;
import static net.kdt.pojavlaunch.MainActivity.fullyExit;
+import static net.kdt.pojavlaunch.Tools.currentDisplayMetrics;
import android.annotation.SuppressLint;
import android.content.ClipboardManager;
@@ -101,11 +102,13 @@ public class JavaGUILauncherActivity extends BaseActivity implements View.OnTouc
// interested in events where the touch position changed.
// int index = event.getActionIndex();
int action = event.getActionMasked();
+ float mouseSpeed = LauncherPreferences.PREF_MOUSESPEED;
float x = event.getX();
float y = event.getY();
float mouseX, mouseY;
+ // Scale the mouse speed
mouseX = mMousePointerImageView.getX();
mouseY = mMousePointerImageView.getY();
@@ -117,8 +120,8 @@ public class JavaGUILauncherActivity extends BaseActivity implements View.OnTouc
}
} else {
if (action == MotionEvent.ACTION_MOVE) { // 2
- mouseX = Math.max(0, Math.min(CallbackBridge.physicalWidth, mouseX + x - prevX));
- mouseY = Math.max(0, Math.min(CallbackBridge.physicalHeight, mouseY + y - prevY));
+ mouseX = Math.max(0, Math.min(currentDisplayMetrics.widthPixels, mouseX + (x - prevX) * LauncherPreferences.PREF_MOUSESPEED));
+ mouseY = Math.max(0, Math.min(currentDisplayMetrics.heightPixels, mouseY + (y - prevY) * LauncherPreferences.PREF_MOUSESPEED));
placeMouseAt(mouseX, mouseY);
sendScaledMousePosition(mouseX, mouseY);
}
From 9df7163c220e9cd291850de0fba027ac42bf1e00 Mon Sep 17 00:00:00 2001
From: downthecrop
Date: Wed, 1 Nov 2023 22:27:59 -0700
Subject: [PATCH 04/12] Link images to the new repo
---
README.md | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/README.md b/README.md
index ec873e5f8..1d1029493 100644
--- a/README.md
+++ b/README.md
@@ -1,10 +1,10 @@
HD Launcher - 2009Scape Mobile 2.1
-
-
-
-
+
+
+
+
Unoffical, unsupported, and unethical app to run 2009Scape on your Android device. Based on Pojav/Boardwalk.
@@ -15,7 +15,7 @@ Unoffical, unsupported, and unethical app to run 2009Scape on your Android devic
-[Controls](https://github.com/downthecrop/2009Scape-mobile/wiki/Controls)
+[Controls](https://github.com/2009scape/2009Scape-mobile/wiki/Controls)
Tip: Use [SwiftKey](https://play.google.com/store/apps/details?id=com.touchtype.swiftkey&hl=en_CA&gl=US) keyboard and disable battery optimization to get the best experience
From 089c9f6c8cd42b34b5b67838a8ec3fda21868ed5 Mon Sep 17 00:00:00 2001
From: downthecrop
Date: Tue, 7 Nov 2023 20:41:50 -0800
Subject: [PATCH 05/12] Respect autoenabled virtual mouse
---
.../pojavlaunch/JavaGUILauncherActivity.java | 21 ++++++-------------
1 file changed, 6 insertions(+), 15 deletions(-)
diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/JavaGUILauncherActivity.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/JavaGUILauncherActivity.java
index 00408dc40..fce4051de 100644
--- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/JavaGUILauncherActivity.java
+++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/JavaGUILauncherActivity.java
@@ -91,6 +91,8 @@ public class JavaGUILauncherActivity extends BaseActivity implements View.OnTouc
ViewGroup.LayoutParams params = mMousePointerImageView.getLayoutParams();
params.width = (int) (36 / 100f * LauncherPreferences.PREF_MOUSESCALE);
params.height = (int) (54 / 100f * LauncherPreferences.PREF_MOUSESCALE);
+ if(LauncherPreferences.PREF_VIRTUAL_MOUSE_START)
+ toggleVirtualMouse();
});
mTouchPad.setOnTouchListener(new View.OnTouchListener() {
@@ -120,8 +122,8 @@ public class JavaGUILauncherActivity extends BaseActivity implements View.OnTouc
}
} else {
if (action == MotionEvent.ACTION_MOVE) { // 2
- mouseX = Math.max(0, Math.min(currentDisplayMetrics.widthPixels, mouseX + (x - prevX) * LauncherPreferences.PREF_MOUSESPEED));
- mouseY = Math.max(0, Math.min(currentDisplayMetrics.heightPixels, mouseY + (y - prevY) * LauncherPreferences.PREF_MOUSESPEED));
+ mouseX = Math.max(0, Math.min(currentDisplayMetrics.widthPixels, mouseX + (x - prevX) * mouseSpeed));
+ mouseY = Math.max(0, Math.min(currentDisplayMetrics.heightPixels, mouseY + (y - prevY) * mouseSpeed));
placeMouseAt(mouseX, mouseY);
sendScaledMousePosition(mouseX, mouseY);
}
@@ -130,8 +132,6 @@ public class JavaGUILauncherActivity extends BaseActivity implements View.OnTouc
if (event.getPointerCount() == 2) {
// Right-click event when a second finger touches the screen
// Simulating right-click by sending GLFW_MOUSE_BUTTON_RIGHT event
- Log.i("downthecrop","Hi from a rightclick event!");
- //activateRC();
AWTInputBridge.sendKey((char)AWTInputEvent.VK_F11,AWTInputEvent.VK_F11);
AWTInputBridge.sendMousePress(AWTInputEvent.BUTTON1_DOWN_MASK);
}
@@ -203,14 +203,6 @@ public class JavaGUILauncherActivity extends BaseActivity implements View.OnTouc
} catch (Throwable th) {
Tools.showError(this, th, true);
}
-
-
- getOnBackPressedDispatcher().addCallback(new OnBackPressedCallback(true) {
- @Override
- public void handleOnBackPressed() {
- MainActivity.dialogForceClose(JavaGUILauncherActivity.this);
- }
- });
}
@Override
@@ -261,7 +253,6 @@ public class JavaGUILauncherActivity extends BaseActivity implements View.OnTouc
break;
case R.id.camera:
if (!cameraMode) { // Camera Mode On
- Log.i("downthecrop", "Hello from the camrea Button");
AWTInputBridge.sendKey((char) AWTInputEvent.VK_F9, AWTInputEvent.VK_F9); // Send F9
cameraMode = true;
findViewById(R.id.camera).setBackground(getResources().getDrawable( R.drawable.control_button_pressed ));
@@ -272,7 +263,7 @@ public class JavaGUILauncherActivity extends BaseActivity implements View.OnTouc
}
break;
case R.id.mouseMode:
- toggleVirtualMouse(this.getCurrentFocus());
+ toggleVirtualMouse();
}
lastPress = time;
}
@@ -320,7 +311,7 @@ public class JavaGUILauncherActivity extends BaseActivity implements View.OnTouc
mLoggerView.setVisibility(View.VISIBLE);
}
- public void toggleVirtualMouse(View v) {
+ public void toggleVirtualMouse() {
mIsVirtualMouseEnabled = !mIsVirtualMouseEnabled;
ImageView view = findViewById(R.id.mouseModeIco);
if(!mIsVirtualMouseEnabled){
From f97451fc3d6bf3fecfb4b8c329ce7691c6a4fed9 Mon Sep 17 00:00:00 2001
From: downthecrop
Date: Tue, 7 Nov 2023 23:33:42 -0800
Subject: [PATCH 06/12] Swipe cam for SD + Start init of dragclick/longpress
---
.../pojavlaunch/JavaGUILauncherActivity.java | 60 ++++++++++++++++++-
1 file changed, 59 insertions(+), 1 deletion(-)
diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/JavaGUILauncherActivity.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/JavaGUILauncherActivity.java
index fce4051de..3572605f7 100644
--- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/JavaGUILauncherActivity.java
+++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/JavaGUILauncherActivity.java
@@ -3,6 +3,8 @@ package net.kdt.pojavlaunch;
import static net.kdt.pojavlaunch.MainActivity.fullyExit;
import static net.kdt.pojavlaunch.Tools.currentDisplayMetrics;
+import static java.security.AccessController.getContext;
+
import android.annotation.SuppressLint;
import android.content.ClipboardManager;
import android.graphics.Color;
@@ -46,9 +48,13 @@ public class JavaGUILauncherActivity extends BaseActivity implements View.OnTouc
private TouchCharInput mTouchCharInput;
private LinearLayout mTouchPad;
+ boolean isDragClicking = false;
private ImageView mMousePointerImageView;
private GestureDetector mGestureDetector;
+
+ private GestureDetector longPressDetector;
private boolean cameraMode = false;
+ float prevX = 0, prevY = 0;
private long lastPress = 0;
private ScaleGestureDetector scaleGestureDetector;
private boolean rcState = false;
@@ -96,7 +102,6 @@ public class JavaGUILauncherActivity extends BaseActivity implements View.OnTouc
});
mTouchPad.setOnTouchListener(new View.OnTouchListener() {
- float prevX = 0, prevY = 0;
@Override
public boolean onTouch(View v, MotionEvent event) {
// MotionEvent reports input details from the touch screen
@@ -137,6 +142,7 @@ public class JavaGUILauncherActivity extends BaseActivity implements View.OnTouc
}
}
}
+ longPressDetector.onTouchEvent(event);
prevY = y;
prevX = x;
@@ -146,6 +152,7 @@ public class JavaGUILauncherActivity extends BaseActivity implements View.OnTouc
mTextureView.setOnTouchListener((v, event) -> {
scaleGestureDetector.onTouchEvent(event);
+ longPressDetector.onTouchEvent(event);
float x = event.getX();
float y = event.getY();
if (mGestureDetector.onTouchEvent(event)) {
@@ -164,11 +171,40 @@ public class JavaGUILauncherActivity extends BaseActivity implements View.OnTouc
break;
case MotionEvent.ACTION_MOVE: // 2
sendScaledMousePosition(x + mTextureView.getX(), y);
+ try {
+ panCamera(prevX-x, prevY-y);
+ } catch (InterruptedException e) {
+ throw new RuntimeException(e);
+ }
break;
}
+
+ prevY = y;
+ prevX = x;
return true;
});
+ longPressDetector = new GestureDetector(this, new GestureDetector.SimpleOnGestureListener() {
+ @Override
+ public void onLongPress(MotionEvent e) {
+ super.onLongPress(e);
+ Log.i("downthecrop","Hi from a long press!");
+ if(!isDragClicking) {
+ isDragClicking = true;
+ //AWTInputBridge.sendKey((char) AWTInputEvent.VK_F5, AWTInputEvent.VK_F5);
+ }
+ }
+
+ @Override
+ public boolean onSingleTapUp(MotionEvent e) {
+ if(isDragClicking) {
+ isDragClicking = false;
+ //AWTInputBridge.sendKey((char)AWTInputEvent.VK_F5, AWTInputEvent.VK_F5);
+ }
+ return super.onSingleTapUp(e);
+ }
+ });
+
try {
placeMouseAt(CallbackBridge.physicalWidth / 2f, CallbackBridge.physicalHeight / 2f);
@@ -205,6 +241,28 @@ public class JavaGUILauncherActivity extends BaseActivity implements View.OnTouc
}
}
+ private void panCamera(float dx, float dy) throws InterruptedException {
+ //Log.i("downthecrop-pan","dx: " +dx + " dy: " + dy);
+ final float threshold = 8.0f; // adjust this value as needed to control the sensitivity of the panning
+
+ // Check horizontal panning
+ if(dx > threshold) {
+ // Finger moved to the right, pan camera to the right
+ AWTInputBridge.sendKey((char)AWTInputEvent.VK_RIGHT, AWTInputEvent.VK_RIGHT);
+ } else if(dx < -threshold) {
+ AWTInputBridge.sendKey((char)AWTInputEvent.VK_LEFT, AWTInputEvent.VK_LEFT);
+ }
+
+ // Check vertical panning
+ if(dy > threshold) {
+ // Finger moved down, pan camera up
+ AWTInputBridge.sendKey((char)AWTInputEvent.VK_UP, AWTInputEvent.VK_UP);
+ } else if(dy < -threshold) {
+ // Finger moved up, pan camera down
+ AWTInputBridge.sendKey((char)AWTInputEvent.VK_DOWN, AWTInputEvent.VK_DOWN);
+ }
+ }
+
@Override
public void onResume() {
super.onResume();
From 668660e13ea463d0776ca0b2d957b41333534467 Mon Sep 17 00:00:00 2001
From: downthecrop
Date: Thu, 30 Nov 2023 00:55:47 -0800
Subject: [PATCH 07/12] I'm guessing this was here for debug.. but why?..
anyway removing it
---
.../src/main/java/net/kdt/pojavlaunch/utils/KeyEncoder.java | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)
diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/utils/KeyEncoder.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/utils/KeyEncoder.java
index 25884bf74..c3f26b3e7 100644
--- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/utils/KeyEncoder.java
+++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/utils/KeyEncoder.java
@@ -23,9 +23,7 @@ public class KeyEncoder {
public static void sendEncodedChar(int keyCode, char iC){
System.out.println(keyCode);
- if(keyCode == 75)
- AWTInputBridge.sendKey((char)222,222);
- else if(keyCode == backspaceAndroid){
+ if(keyCode == backspaceAndroid){
AWTInputBridge.sendKey(backspaceUnicode,backspaceUnicode);
} else if(specialChars.contains(""+iC)){
// Send special character to client
From 5330ad05effaa215a1f2b7596bd4caacadf6b515 Mon Sep 17 00:00:00 2001
From: downthecrop
Date: Thu, 30 Nov 2023 01:35:48 -0800
Subject: [PATCH 08/12] Release 2.2
---
.../src/main/assets/plugins/XPDropPlugin.zip | Bin 6732 -> 0 bytes
.../net/kdt/pojavlaunch/GLFWGLSurface.java | 24 +++---------------
.../pojavlaunch/JavaGUILauncherActivity.java | 13 +++-------
3 files changed, 7 insertions(+), 30 deletions(-)
delete mode 100644 app_pojavlauncher/src/main/assets/plugins/XPDropPlugin.zip
diff --git a/app_pojavlauncher/src/main/assets/plugins/XPDropPlugin.zip b/app_pojavlauncher/src/main/assets/plugins/XPDropPlugin.zip
deleted file mode 100644
index c7686e153a6af37297a73c088f26e34e275d0e66..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 6732
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
P{JXdQc7uOOPPqR8O
Date: Thu, 30 Nov 2023 01:59:41 -0800
Subject: [PATCH 09/12] Longpress rc should only be active in touch mode
---
.../main/java/net/kdt/pojavlaunch/JavaGUILauncherActivity.java | 1 -
1 file changed, 1 deletion(-)
diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/JavaGUILauncherActivity.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/JavaGUILauncherActivity.java
index a1b8f30f6..1c781ff62 100644
--- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/JavaGUILauncherActivity.java
+++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/JavaGUILauncherActivity.java
@@ -141,7 +141,6 @@ public class JavaGUILauncherActivity extends BaseActivity implements View.OnTouc
}
}
}
- longPressDetector.onTouchEvent(event);
prevY = y;
prevX = x;
From fa697c6a757a4d13194d19e5119b0e5493ea8959 Mon Sep 17 00:00:00 2001
From: downthecrop
Date: Sun, 17 Dec 2023 01:34:13 -0800
Subject: [PATCH 10/12] Keycode 67 handling
---
.../keyboard/TouchCharInput.java | 5 +-
.../net/kdt/pojavlaunch/utils/KeyEncoder.java | 150 ++++++------------
2 files changed, 55 insertions(+), 100 deletions(-)
diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/keyboard/TouchCharInput.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/keyboard/TouchCharInput.java
index 8011684c2..f9b14b300 100644
--- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/keyboard/TouchCharInput.java
+++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/keyboard/TouchCharInput.java
@@ -23,6 +23,7 @@ import net.kdt.pojavlaunch.utils.KeyEncoder;
*/
public class TouchCharInput extends androidx.appcompat.widget.AppCompatEditText {
public static final String TEXT_FILLER = " ";
+ public static boolean softKeyboardIsActive = false;
public TouchCharInput(@NonNull Context context) {
this(context, null);
}
@@ -49,7 +50,7 @@ public class TouchCharInput extends androidx.appcompat.widget.AppCompatEditText
Log.i("TouchCharInput","New Event (before/after)!: "+ lengthBefore + " : " + lengthAfter);
boolean isBackSpace = (lengthBefore > lengthAfter);
if(isBackSpace) {
- KeyEncoder.sendEncodedChar(KeyEncoder.backspaceUnicode,KeyEncoder.backspaceUnicode);
+ KeyEncoder.sendUnicodeBackspace();
return;
}
char c = text.charAt(text.length()-1);
@@ -115,6 +116,7 @@ public class TouchCharInput extends androidx.appcompat.widget.AppCompatEditText
/** Regain ability to exist, take focus and have some text being input */
public void enable(){
+ softKeyboardIsActive = true;
setEnabled(true);
setFocusable(true);
setVisibility(VISIBLE);
@@ -123,6 +125,7 @@ public class TouchCharInput extends androidx.appcompat.widget.AppCompatEditText
/** Lose ability to exist, take focus and have some text being input */
public void disable(){
+ softKeyboardIsActive = false;
clear();
setVisibility(GONE);
clearFocus();
diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/utils/KeyEncoder.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/utils/KeyEncoder.java
index c3f26b3e7..4cfaf3da6 100644
--- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/utils/KeyEncoder.java
+++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/utils/KeyEncoder.java
@@ -1,110 +1,62 @@
package net.kdt.pojavlaunch.utils;
import net.kdt.pojavlaunch.AWTInputBridge;
+import net.kdt.pojavlaunch.customcontrols.keyboard.TouchCharInput;
-/*
- About Key Events. Because the Android Spec doesn't require
- soft keyboards to dispatch key events not all keyboard implementations
- across Android will trigger these actions.
-
- Currently we use the following function to translate keycodes for
- special character, capital letters, and digits.
-
- keycode 123 (F12) is used as a single digit capslock button which
- when sent to the miniclient before a char will act accordingly.
- */
+import java.util.HashMap;
+import java.util.Map;
public class KeyEncoder {
- static String specialChars = "/*!@#$%^&*()\"{}_[+:;=-_]'|\\?/<>,.";
- static char modifier = 123;
- static char backspaceAndroid = 67;
- public static char backspaceUnicode = 8;
+ private static final Map specialCharMap = createSpecialCharMap();
+ private static final char MODIFIER = 123; // F12 key as a modifier for caps lock
+ private static final char BACKSPACE_ANDROID = 67;
+ private static final char BACKSPACE_UNICODE = 8;
- public static void sendEncodedChar(int keyCode, char iC){
- System.out.println(keyCode);
- if(keyCode == backspaceAndroid){
- AWTInputBridge.sendKey(backspaceUnicode,backspaceUnicode);
- } else if(specialChars.contains(""+iC)){
- // Send special character to client
- char c = iC;
- switch(c){
- case '!':
- c = '1';
- break;
- case '@':
- c = '2';
- break;
- case '#':
- c = '3';
- break;
- case '$':
- c = '4';
- break;
- case '%':
- c = '5';
- break;
- case '^':
- c = '6';
- break;
- case '&':
- c = '7';
- break;
- case '*':
- c = '8';
- break;
- case '(':
- c = '9';
- break;
- case ')':
- c = '0';
- break;
- case '_':
- c = '-';
- break;
- case '+':
- c = '=';
- break;
- case '{':
- c = '[';
- break;
- case '}':
- c = ']';
- break;
- case ':':
- c = ';';
- break;
- case '"':
- c = '\'';
- break;
- case '<':
- c = ',';
- break;
- case '>':
- c = '.';
- break;
- case '?':
- c = '/';
- break;
- case '|':
- c = '\\';
- break;
- }
- if(c != iC){
- AWTInputBridge.sendKey(modifier,modifier);
- }
- AWTInputBridge.sendKey(c,c);
- } else if(Character.isDigit(iC)){
- AWTInputBridge.sendKey(iC,iC);
- } else if (iC == Character.toUpperCase(iC)){
- // We send F12 as a modifier to avoid needing to worry about shift.
- // Client takes this modifier and does a toUpperCase().
- AWTInputBridge.sendKey(modifier,modifier);
- AWTInputBridge.sendKey(Character.toUpperCase(iC),Character.toUpperCase(iC));
- } else if(iC == Character.toLowerCase(iC)){
- AWTInputBridge.sendKey(Character.toUpperCase(iC),Character.toUpperCase(iC));
+ // Initialize the mapping of special characters to their respective keys
+ private static Map createSpecialCharMap() {
+ Map map = new HashMap<>();
+ map.put('!', '1');
+ map.put('@', '2');
+ map.put('#', '3');
+ map.put('$', '4');
+ map.put('%', '5');
+ map.put('^', '6');
+ map.put('&', '7');
+ map.put('*', '8');
+ map.put('(', '9');
+ map.put(')', '0');
+ map.put('_', '-');
+ map.put('+', '=');
+ map.put('{', '[');
+ map.put('}', ']');
+ map.put(':', ';');
+ map.put('"', '\'');
+ map.put('<', ',');
+ map.put('>', '.');
+ map.put('?', '/');
+ map.put('|', '\\');
+ return map;
+ }
+
+ public static void sendUnicodeBackspace(){
+ AWTInputBridge.sendKey(BACKSPACE_UNICODE, BACKSPACE_UNICODE);
+ }
+
+ public static void sendEncodedChar(int keyCode, char c) {
+ if (keyCode == BACKSPACE_ANDROID && !TouchCharInput.softKeyboardIsActive) {
+ sendUnicodeBackspace();
+ } else if (specialCharMap.containsKey(c)) {
+ AWTInputBridge.sendKey(specialCharMap.get(c), specialCharMap.get(c));
+ } else if (Character.isDigit(c)) {
+ AWTInputBridge.sendKey(c, c);
+ } else if (Character.isLowerCase(c)){
+ AWTInputBridge.sendKey(Character.toUpperCase(c),Character.toUpperCase(c));
+ } else if (Character.isUpperCase(c)) {
+ AWTInputBridge.sendKey(MODIFIER, MODIFIER);
+ AWTInputBridge.sendKey(c, c);
} else {
- AWTInputBridge.sendKey(iC,keyCode);
+ AWTInputBridge.sendKey(c, keyCode);
}
}
-}
\ No newline at end of file
+}
From 5270adf48f376c90101fea01246e1c381ac9fdda Mon Sep 17 00:00:00 2001
From: downthecrop
Date: Sun, 17 Dec 2023 01:52:32 -0800
Subject: [PATCH 11/12] regession in special character sending
---
.../src/main/java/net/kdt/pojavlaunch/utils/KeyEncoder.java | 1 +
1 file changed, 1 insertion(+)
diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/utils/KeyEncoder.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/utils/KeyEncoder.java
index 4cfaf3da6..b5c7ca95a 100644
--- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/utils/KeyEncoder.java
+++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/utils/KeyEncoder.java
@@ -47,6 +47,7 @@ public class KeyEncoder {
if (keyCode == BACKSPACE_ANDROID && !TouchCharInput.softKeyboardIsActive) {
sendUnicodeBackspace();
} else if (specialCharMap.containsKey(c)) {
+ AWTInputBridge.sendKey(MODIFIER, MODIFIER);
AWTInputBridge.sendKey(specialCharMap.get(c), specialCharMap.get(c));
} else if (Character.isDigit(c)) {
AWTInputBridge.sendKey(c, c);
From cb9ffc52fba6ca03a7491a2362cca63f3e424272 Mon Sep 17 00:00:00 2001
From: downthecrop
Date: Sun, 9 Jun 2024 21:52:40 +0900
Subject: [PATCH 12/12] Update Jar to e8589 (Music + WorldMap), Set default
resolution scale
---
.../src/main/assets/plugins/XPDropPlugin.zip | Bin 6732 -> 0 bytes
app_pojavlauncher/src/main/assets/rt4.jar | Bin 10662859 -> 10665756 bytes
.../java/net/kdt/pojavlaunch/Touchpad.java | 3 ++-
.../customcontrols/gamepad/Gamepad.java | 3 ++-
.../prefs/LauncherPreferences.java | 4 ++--
.../LauncherPreferenceVideoFragment.java | 1 +
.../src/main/res/xml/pref_video.xml | 1 +
7 files changed, 8 insertions(+), 4 deletions(-)
delete mode 100644 app_pojavlauncher/src/main/assets/plugins/XPDropPlugin.zip
diff --git a/app_pojavlauncher/src/main/assets/plugins/XPDropPlugin.zip b/app_pojavlauncher/src/main/assets/plugins/XPDropPlugin.zip
deleted file mode 100644
index c7686e153a6af37297a73c088f26e34e275d0e66..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 6732
zcmZ{pWl$W<)^2epIKhIuyA19O?hF=!yE`Nhg1ZJ7g1dW=!F7VWy96C9cnI+2eCOV}
zb>2F+yKC>NuCC|js;;#)RS=N~;o#uV;53SI^+N6PE-;Yc;E*xk;HdxJf;8nkT-`LC
zylw4WxZM7?(StM<&Fx({EuG9gJ>&JaGzbj{U(R8$bMB7qde|>=`4Vr#UgYK$JwhV3
zI8!&w^upy~_)>1(ai_yce6_6Mn?A|DL7}-~AeCP|aHyCOd#LqAOKmC#T#JUu6B5|%
zc`mXgez?vj^fc8I{DS;}aEr%_GtJe{rNqg=fTIkAF1ID)KU<$oPZD}Jz04oevQtg$
z$|cU9@l0=l<=*YGB8WIgnx;3Ghq(aiHq)R>kVB;B=l=1MHAD(giKOy~mJZORQLr#9
zFPsLHhk1g$W{D6Hm|AKUXsx^OfP+@DW_{kwv5X+#w63a;3&qIt#|KEnTk
zP{OpbuI-zPbi(5}-BUWW+}~M{tW?FF>rLWaHyZnoyYc3WK#J!WmW(+h_@5aPu{!O9
z6Hdvyf8yu5KZ7fs&G1RR%5?|rBbxKijd^;6DqE&BC#mE$pr<9zOCHBR;%1MAfbNT=
z5U#D9YwmLVC_qgHuqutIuX8{Y12C7`q@I;}7mhm*M5+tEx7?aw*@ybJ9`Xmv*
zP(^Sk3AD6r21xL#=g(Xq5W06$m{1Kn5K17G-qErKOKRVyucu7uls)qkQBt5JM*lOf
zUZ>6FcXZ#OV)hBD$_O>fl(8lI9r1|nBA0~P2~eY&gO;cL#;xbVs{d@2@>vS2y{Lxn?^J&IuW5`aEGaxGYF7F_d8}um
z8VV)mK3zKWw<^^oD0-XM&2&FhN9T1H{`Ux{FWB%iz0Ge~3MWA7BN`ssVI=H$Ryy
z9pd0M4HSaoclPXV=#+5QrM>8W-n1Uz6I9*0*~C;iO|T3gXz6PQRss(7yR5HE8JGdI
zF^`B)^DqgJp(+mVt`9>PZZXB{ERukR(z}Hg5LUuC>|1%Y4PfoD2F
zvBJU0H^@mLgip018Yw~U~F8`vXpu2?(xaKHX1WeQ?
zpMBny?)ir(u*+zrLMSe1`{vtklN5sw{^KP>bH{P-S|?OjJq`o0M7s^Caj9Ar`9ypG
z*wn*dj3|z;eMO3%apsB
z7?^*K?%av#K8>t&H(flF=#qja&*oZ+MT9+u$;q>SnMi0ZT}mD%_mOs!-{o6HX@Uu7
z5TlKeAPyu*;&=M8*l_hbSZbqStEZmkIg28Kggv^Tci_o!cvMPyOqpWV?GJ7<`Cbona>M=lLm#XuQAxnjyKLz+4@+K{h(OJ9NwiFH{0UH2VT#vxGj}t1!0j@i@UCW=UQ^Kb
zJ!1T!q&4H&40j7Hem`+DLE)V7ja5p76jAupbTPO5E(C8A(-$9e|H62?t%}iUvB187HPn1ZkXT>Qq
z*AvYZJ(niL!{ye2#l_CU{pD`@R(8P-Vwu=`oQhBr5{5~Ni3Ynxd(@}jO(Frkv)s~V
zUiWu6UN=5I=(@uPhebct_f*l!+=L$6HC}-Vx+E9wEdg9bYWPIgld9?y7-^SY4cT1<
zBjEfbvwp)InN60nwDJVPJb*K7*kJRT&?o<+kpiKC(990)Y+eVXX^TxY-
zuR#mmiSdEH4T&$PvVL$qDfh{7F_WswUk-~*KKc3H!%a~{Pvq|RM_wtRQ4K)Ri%#h~
z#w7ck{KPUyb!0;zkW=eh_3;kxk4DnAFGmnP5g1u_Y?)F3ed7nmrg^t?D92?eFHA6ed<`TjwQuN0L+d=CxV4L7$HMia&`lTYtTP@mq|q`Fu1_J1LQs58Y?dzKpvfTBFW
z(m`BQGAB}#;tx;j>YG0hzVm5R)js%pUQq2C&qi&%DViTq305WGUj1roe96R{`iBJ*
z#}eX}S%ZtCnbtG6$J_OrgK5f7z3CU)xeAn*t}^XvtUv1bf-8sZu8uhsU4YvmldhK;7@ma6JUuZxum+Z&%
zVt_ep+fC_%JbNm+J-~c3q9s#5$lKzrqnY+Ah5g47Mf~CK_>N&~!aKXI+c0}&D7@j
zXXcl8)LOATe8DM2F|Ee0ik8&r<^q7L9Vb@(ocFF&YuR#1oW1zgZ%lR9RLe@YmXXl1u)bFEgw#H(oa^K2V&VwIKK3@mYCeJeDdRudZ{E%ts
z+lakGqWhWB|K7T|KgW1b-?jtPlFgE!+h`y^iofEa_T6Ytq@I1(R9pXm?YjE9?m7nz
z&}A9YmvM1B@~+|_WH*YjmDXM{gfJz=HZ|rTrQZ{XX<|5ptjz;tX!4C~!@M@(3Z|*o
zC2I{Au;)q
zFji9Tk8hji+Fgl_+e9Z|>m#Deyu$NOe0%L-eQVL=X`-R;hA$tKmh9L3(Hc438K|-8?uZBaUmGx3EjSJ{32qgQbY-ye)#DMGL(
zhXV!B$>jB`VNaQd_f3r|N`_msR58vxAbosG##!`;Jda~K9I?sLEFQV`T%o^32;eGw
zB0VDN{*i83BVjA8VVuu;DfR|UEX3C8BB_@MtL3rkk8En2=Of}zKLeZ817~bK2OTAe
zwCq89iS;|8rOfG1eR~B)VQ|ElQr(Ruk{A*W-x3QxOPYsVVdUoY?-Qx2
z?G6pR)qQ`obI*xXRcBEW5#avy&2;?*84B+F_7yNILOLZ=#x33jV}jA~BRx<1j{`Cn
zNRWOh^{hDB{;^wm*SZga%41DoYVkLRdWy07m@S)8`+xxaSRu_hT8K!AO?T0mU1DWaUxu&
zItv>htg7D{R+&E{p&VK|l8`j$3fZEm{Id%qr98dud*%IA)B9uS_HM`(#<_1k
zgP_)z;gLW`yZxogrJx8+kB*VMlDza@?NBDI0)W6%+LB{2l&g(U>D8oeI$3pWQ-@vt2H|3S5MXzM0;dSo
z*E96qa;us2iRI_iA`qwE$W8K3iBL_zbDx@m#n-;&W
zg_jvJXD^Ib%@gOGe#!gv0HJ#O>#qSqql;!I&Z*A%^BuqzqYB?9r_hqzNNe&+44!(G
zN;>h8sB;A`Z!1?`Pz);FSZA`c&O>WuF9mTa*g%sV*e53M$$SefWs$Zud~WFH&69Od
zRoL_a#?Ph6FY$aGH)jQp5dwU~30V9~!4=2If1<#*lA|x4_^%sMZ*6kehi2$sS^=}k
zar4}IMA^Sx*t=uOahHn8!4hGryq>S3?M$4KpXTzO=kmJAZwYnJnYcgGgt?(^1T)P|
zcSP+Jsj|8=CYqNPAkonRZ^)76-96%y94si9E~Sevg@-TYEuQ7AE}ai%F6f}TmRbzP
zy5=U;ePMP``m$-q+H*D7^>LKzOIOYN}OSc)QNKf))=9!zQt9rf7Ga%mj+zibDoUag|<-^l7G<
z8KXVf)5E;ppJGq@i@P8J1(zDph2a*`Qzt;Y=r9RX=K|)y#iee@#G&)8!DDUIFO~)?
zZFXxY!*}G)8l&*xH4SzG;mDmzsqnkbww2Ju5AyW_`_2m)D2*D0E){8ygoTbKSQI65
zY%-}9)>hb(UcpoTx|86vn-bX?`EJXzdwZ-GXv6S^-;o|+54Aov2jOkTP*$B<)g6rA
z&xhvn4XZ$QYDP-u$nwu%iQ&-&9R7V58o9?cG&9Teypi2T>05ebpIIBSXH&V(v}=sY
z!AP(b<+i{zT+>fWxe-f}LB*p!)GPS+8i{*Fe?G-!%nv+>NkrRTqSeJJre$0dyW-5I
z##?X%hAzu%C>%XLFLNy>6Bo~;)U=^=Z)899HLbd@^*>d~8PJiZPaF`=nB*X1i$c
zSlSg|QH4`^o~!}akoQSV7!e`g8ZeVvN&>z&BIAsW$Np(C$58FWJY>LmRT-^o+JB0j
z%#q<%NTdB&7=&IY(8e&sP@U3uti{+4j*;028`5nKbCB09&>y+rCAMqLmw6`ygYC1P
z5THIR0LhE9H_Gv!m3Jw5dhaG)auXyzLADp}DvIo+pOT%~LW?#OT)}M;4zOio_a!hCZ
zk^1pP<(BZ+n=ZXoV9nE3=E>nh#I+!cjBw<1G-GC+Ep1E&;!1XQ-2n_t72QK};%>(s
zB1~71-(0^xkWd2Ck)vS^f8!PBKSe;@WIX;jA{<=lU#a@n1^lN_1!?NIdDwedd;Z%6
zciHl>ID2mXrR1X|j#*RtllJAtxOJbo|Z#;w;eB
zrpMLB;PvA*^JhF5{*f5Bd+3E8Q}$~1*})rC!m93f>7l}5QURMr%^nFqCx6~ejc3>n
z2-6~X)KUmG-uVSJScoP_J$)9*ydN-aAC7fI{{1UgGUFRpBwx36hxDX}DOa=1T9IkF
zNP@uLQM32qH!wp8^I9eg{d87XNOA9P2TL>kg~@oeO!s0WBUd9fpt-mOu(=?oWM{*N
zI%(wf{@$&^FaN$W1FuxdY2N4TG9ctf@3t;RMj>A`GXx3Wra)LkfB6&L#EfAXnBkg;
zt2lMd;7v^mk&%-fJG+8X(X^~C&IhMbN;;$@rQ}yQXm_%TuZm
zeMmy5kfVrBx~pRk>G-CRr)*$>6C~E>10TPS^oNiZ3%d#ZJHrJVpT?twKP$f|jYT&m
zW-Ee;ESP+WYY0|qges%Mt=uGN`kyb6$b_iw8-=zYMa3cj4!;#;JTPw$#m@UsW>ArH&
zfGoMo`zNmEfoSbg^mnD@)rev
z7xn+ve^BASj9LDf_D{X|@0fq3DgEWle;L~R8!-Qj`6rzIUyK&fKVtrYDoqt+lz+WO
P{JXdQc7uOOPPqR8OxmHy;iS1aTE=k^$`t=rYr{yg9HJAfB^BMbX@x<8Z~6_PcAc<^OFA_vMB$JgDn3y
z)<5zR0g8fIs
zOe_EM=Ci8)kDl1`{^!l)ore3T1BkT#&r2(2@;{1`NQM6ArTxM5Kb?-^Z@hoyFZ`d>h!)#(2M0_-sVS4xsg3f#ZqnY`m+|50y1Cg#6b!$b!3f3~<>OC;3)Z{DL7
zqGf#6`8QWG}=F_&`#NURRnIYdanXwe(_zfQ5Nv_*=ToRgE+G%ny=-GDyN=N
z)g3F;K5nmk-Ffrb_jK8Ck>aA7<3;lk#~wxK2KUitZuJKDC#LY(l7X`)D*6l_!Bq8f
z`nB^`$Bi9rLB6?#zV02l@n`p34mrDrf}3Ypo$eq9Uw8f_f;t@_`sqD8x!@4b2Mu(4
zM9^ofugLx(SK(7IGa73u#S*$U+4dU}$J4_-ITCuGVGMICw}g!yzoh&m$yvPApm@Hu
zm8o?svJ5t^{y^-0@ac13{m8cjqBtM7x}SEH*=&pw1yybnvtNZfxX5Bkck9Oj@3-V9
zO+~hdqNLh)#a32;MX?7N)?Fevl3#cU2uY9IrNl^mB8+cXNS)
z?N+6~vf;{hSY)73sh(gJP|N_z%UTkKO&jvqqp=sxq_@?@cls}OGDikvYCyMD8iWyV
z-L8uc@kJCERvr6eA_Owu)Kbh3P#5$yc_-|RSIx=*C_AlkY}p1)AsC2r1oVjxl$<`l
z25;(*jU7Rhnf~8G$BGHN+V`m^a(ZxRV0m1)pCydd$jrw~X~w=0dUKMH6^D6|ZH=*z
zyEIl79$EG#b<`74?f17vhQyKlDLTY<*&0!i4p94Lh&f8eCtR?UQ1M`Ps~3`qxsvo!
zF8~RZ#MPh!nVOW)U;vqrbkPt4ncV2zCfwaK=r;VqBH2RVKa-#Kv?jerzn!0m5k5~
zd6Be7J6vcSMs!V~eh^jce~B%X1PJo=E8xkeF&b1ckrVi5LG5C
z=~3{z9DZn7^zn)c!9bDWOQjr1xfszzrd@K2z&`T29(~adx-Gg^-=vLcrK~jV7Z#h6
z10!zT!Y>u`Qd-AYnamDwrtUJv8fD#IC4e&KZD@-+M9c_q%T)U1pj4SXLOK>t5>jSD
zHf!ypvbw`sDx+;1&p_JZMOh~2FBG1Wv`-Jm*%P{7=d|&yjLI8O+4s|Iv}i%zvFi@!
z4G1tiiS-K6pB+*&6fL0})y#1ISa6O3W)`-D3KFOt%^4E0%@6|1`>2VPmHqh!6u<{>
zRikr{D7a(;^4mp9EsTlv#Eg_)68G@xWuCE`wOFuDJapk%{O4wWUktU2#?u
z-Z3n^D=--6;9C)k@}FaLGo1W+BHtQ-d6!VLAAX_z+M0idPJV9R7e;J~1zOYcJ(>}yY$Tun=411x~itNL0X
z)y)!mM|Ys8w^gZ7Km60Qn5hE6t6cw~rVo#6A)g=YkZ0H&h1sIbAoay}jmO*Rz90(f
zE+r7X+l=GZE;V-bR@l22)CqVA^qWaRx8W%ETS-Y6lV*EAA1hpC`jDdfwPx>l0ih>M
zO>V_%w*Y}lBTt$)003T;0U_t3V$8(2%o0gCZn&nW*ru&%rJdblPyfp62~*@Y9gqQ{
zK}xH;>{y|t#S+DSn&6`%KSMBnk)H}UwdlPT#3J_+4XTxW$pFW@q{wb<@wR-FS63@hpCs*{|mqL!UnPC6ICM5FnR!uLU#A4+Z=z4*n7Z7AW?}K^O
zQ>0EV>o1AhTM{k3y2d|*#a6Ejc2us}Z&eMjnz%x|fERn4O%a*Bv(o!WVD*d+OZ(Nk
zvI|qcn$l}4E%TDe1RSON1;iLg-(}2*87i2<<0~Mh4|<=+`zw*dRfuMsuiiWWT6xRC?C;h{MzCvw0PuoGxG*2;d=w{t6oor=b#_Du2B-lOl(@;uNF!TQ{(sS
zVSVaQ^9b@l8rH!qx~V~cD_%DaW}1R=Jl{O`QO59GmR07RO%L9RC1P|)J4V=|zIkTx
zq3OE57?nj!`+`38l*@WmUPm%aN=zM~CT~F&N?LhQBeZ*sds%tA#aqJT1i!h~XiS;Afs-Q=C-=84X4X^(RGkc<`D671*Z$)qveNM;Ugno62X
z0^H$k)nXQ?gD~H*K1})FBet=BR%uitbaO#F*a
z7UHyR-*2Qy6c0Kl(*RqguzwX!2eN-(ku`gAexs6jt<@>NuEEy~^cfBny?A={r+Zs@{m|od^#4uY$OIyH#
zh4qDJfrYb|{ZQe8F3+ha`#b+TXq$i^Eaa<)qvq4>YKl|#ci0uIBtc!P?+e@_g)06I
z0VbJ78Ahvz%L_w1peLrFD+E6!ZxLl|kvaWO^GuPX?Z3adfo#C!L&uhv&X)+lhs@mz
zeo!~eM@jmoRpw{f8{iIta8`s-v=kU5)Jg#9fVe)#XrLPokeO&=nz&ujgiBu44R2xx
zR3iJx&3;{ytE^;F#4KIY#6x`**v+D9)TWg`@+w-%B~`n0K(Zcgi-rwTE3g_DMiYy7K$og|
zv86fuHEu*-S9*16Rw6&zC7xotc-a<;>s~fxM9^uQG?#HHDW-z^`KJFVX>aELt>#47A;?A`D*xuU|7<5>c-;`e0G
zl6BBn@|G4^p$XY)iMXGnh@)EB*EN
zZpM$qGTSmn$y&Fzu6n+j!=8y4v&kXUoto{C5y~p58tn3}K?w}6Cs<^B#u+ckG
zPRyQvsf+e;s{v$7Px9+$TEqy@hIS#1i1^lUqC_O??zdc%mT)IR$9m?JUOGT$(qSx8mYbg0eT5~O2*jK{Gl}EO1}1IbYj2^`uNfX
z4p4?{xmER%{h9X}tWEciGM3dPAf0cgee%*o%LCHGUyTfwBM{CoqZq%bUhPkZ9!07a
zykSdVXvq8+DU#bMxj>1k9(pH7O9O~BtQPVYg$U<{;
zERRuQ>yKI6i)m1XTaL!(8(~ecFyI;3SeYOUtTE+#khoCbc^+dtaNEL?U^{6l#WzY|
zvZ;wm`mvS;zHC}e>e#EpM1@8BkykIjWu_;ad3l+y+se7RQnr@vIP_t)@b-1A))Iw^
z8^}(O;gBS}2^oU5{}R`4>$peK>>2#n`5Xz}rE-lq(ww5xW3M$2Sez>W!``s2_UjX%
z!C|drG+tfULwhooY<{&Gq!MH~w#WO%RtPir?$hkMbdDP4Pc>B8REkV>i~;J}t16Vf
z`)>`uq?C)=5CJaG+`1syD@uaO3bZ15q{Bj84tJFJxxQ+ZZ_8jlKqrFx$
zHGUPSWcEA0HljQ3L!n3aD3TF6lga&x^kg_DRkLPb6-Bx$|A&gJYhf>SkH9izFYw!6
z?>Iwz)uSw(3*v=4+K5L*HCHFb1>G46olCo+BOfEG@MfXAB+p6g%-U0VXghUd&pj74
z!rLX|!AnI5Mf0&EeFDOtmLqcWRrWYKgXS7sjYkV
ztP}Kx74L{bl8H0@o1i>gb@}%}3&5JQ#1N9x#E`>0aWq-mh%BT(^%s28x=nlpbV$#c
zYmLdihC8SlZK#deI##Er7Lp+K~`Jp1~%
zYOBaIr#N9wmUzCc5G*n$se5XO3r%cfUwm`id)t+bgr|gbwEwRsiReV>(-M
zQ?|cHyn8|4&A_od?tm6UNqq?2FZgOoyzFc)yYmZBe?D*0oEs~RV(dg7tHjUYKS~F?
zl`E#e%8vUE=~T>Jw%H%e2oWGI%~%j6xMn(oLo05g-IM_@0#*x2qo#(6h4X%4E|NFU
z)0YZcmb%5E_-}(Ij9KDOFTmXz+}B--2xgjcd#bOTw;~T4=e61yQb@qSVs;=Pph@~Z8gkdw+{5nj-C)N2
zTZYCcPx|S7gL<|d2xj-;h^K{|Mb;>gIx3}RI(_Y$Hwt9unC*)5-~fDZ8_zEs%_S+_
z-Y}JsMN?{zPrYP!lHx!WQk_?pK$t*-0=RhH^h)
zH`XEGs?VD~EwcDLq2YIhu4d(`ft~%^EGv$wdFOHiDvlw@^^Px#x9lVjLWlHjS7%&{
z@#nlrZbD7WA&WZv837P|MpDF$AKW&tlZk&p#YX{FHmE7Pf%T&|{Z7rtj&aQ}%P}y;
zIUIGjgY>}7RO1HL&Rgi<|G7O}gy`(ajZduQgIP-48v2aa`!1l^u6qQU-drt?$%~T^
zs6h+&L9Coucj%no{dUAd-#8Z_W+3X>(~wl9Sm1ey$-T)vZ4D$>|C
za^rwhI_0EVW0NgWkb-%u0UvU@g=v62?9`s&P&gHz+dopv?X}mMA$Z{^QCp)(sxq2M
z>&AkiP!eSM3Qbqk!I=jXA66zF_(rM|@7AU>zdNEwmk4B;5j!m_Amtk3+kukaWZTd>
z3q!d&H%_eC#*589-w2>92i(tM+NVv&mq&N_J8-`YxcMw?nSwoG&{#(1iYJ&apxRf6
z^N|(vpF4i+qvsNn|0O}$Iwq@8bJpJhLAgJ#3)ar+DdAIc`|zmyh(8SB3z77m;pPT(
z6dgYLYyh=WjrJB{p=q2b;;96G1fOGG#ACFAz`GkFRC@t<>8kQ)>>OAFXn>RT!9yrVJ|*H)7NYqbr&vn!8q1;j
z^UX;TJ+J%&J1#rCse9NX3NFq_)Nzhhr_VQP`tMP&7tdjCG+eWT84~CZ56@y0s^3=h
zPxY?s+~P#vu!<6OPsOb69ZYylnv+ODOLmGeeus%Q*(
zOF%Znb+sQnbq>-xN%nLX!d*jo11yCJ3BEs|cZqj=AM
z5a70xi$5GYjqLL?u*+9yDwS%Ex|T^8SOKqb&)(zWq&Y`Jg5{gSkF9MN-F}s*`wj{}
z4SVW0CYZNSV_r`oxA;1Bl&cl=d_*d*q!yipxuH+#Cup2;t1{ZuFwz?|<+XLCG1q$&
zFY`_Ou7cpkrq>Em^Jdjv?ujQAao#90cX2B$mGdQ#_{rHo8{5$|mjGusxG^*x>jA9l
z*f&>JKNxJb@R+@Ar?Sw%m5fPE!P82{*HA?txM_qa(#i1S4zy>t?FxF>aspFT^U=%U
zR>Xu{m=x==Z9;MP*j`=BAm7MaP;ndW#ymV${&vV~#!%ffK*={m2mn)yEIl?|M
zV>4s&!NsCvh^79H8e70eE+t|9i`0;Qo@bf7gw>|rWo%9_x-xD&YU+8oAA&g!>LY_M
z?z_w3YMFl9v9h91eQtP};GEdExPXy#mk5l*6l3V7`V&S^%~!kepBBwWjMqRFm`IJm
zat(`*Q!MHAq>9m2dUJo%y?klYY^5Xt{5Na_f#pRP{-Zg#r1`E{49A5EE&2lP*bb^B
z7sn6xi$qEMovaSs!UR0*uVS86v8Tr0#Bx>(J@j`6CzV;EFg=`^nRiYpgkzcAw;tT|
zrb<&HiVQjDhLVSeBoqs9OEH1Be80HAS@4vwMIvXRv4xsZR3alC@kuimM?tvj?(Y9F
z5SV9oa`*L~+ngD=!5-&NO~IXF%6I(hayx(SLgml+LyMBb$&afn5VANF`c43jCmYdx
z_Q&`N2o|ey$Ki!^G-;tSczlm-B+(U|0!qHGvvw7K)~4ut^10RWwvpbhWh=
zG+2As$P7cR$*gY!Jc8rvbWxV_G^(_MB(n~U(14o3o9JTmGHts4`%}G
z-wvG|8X%}Pp{Hcd-OJ88Y$ek%;v^VPH&nBhbBYh?XY1QIn?2tm_Z?`4D!aXsiKoAD
znapfQf8DQFshx9M_(=?GLM4!uSgZ9c-NuL}d|Y}VAzkF*MFyY0tNT{ke*-j6xpJk#
z6zox(AIa*FqUJOT5F2@T$gM88)?n@`XWOmb5vP_hO*lntO2Gr3zxP(=A!kB1TUm$h
zMZ|&6SZ)DTXg=aio0yvPTf+vQL%lZg2nSvrUpE)Y75z#Z2G)T;Jo^A^RZ1JPG#2Qv
znH!$x2l?>zFQm!e1~;#Ydn|^bODbT?AmyU*3J1?s)pd3BdtkDy7UvpV)R6^(_PTuD
zr!=z0BqsFMj56hBnPcgp`CZWz&Zye}KL*t&S+E
zKJsF^&r!rQwwDNhj{;ifYewHBFiCXEu#uBBd^Y?@5JMcllOdv30Ii-Xx;jpi(I}aN-;A;Z&KXipPDA4|;rX
z^W7aq^R+X4qD0Oe{xB=c&5`|g{s+pbSyeg2^`mCHCgEl6ZT?oWhAhJCpAe6`G!%8v
zCC>+@Fl-@Q08DW3q@ZPttRiM02_XN#>6es0lod!YSA_i4?EEdo`{6GZ-zZV;o=Q=4
zf)~#SdUlKGGI%R*AoidFJ|u4b{PCu!%AO%QDg|$nEgY!qJ1VDHXg-j25`WY7)JEjrJmmZ@sj(G9P&d$->xq82}SW)4zp
z*I0;$3d8!dZ9rFFy&<%UNC%5YsM8>6M1f8s=m!W#d6w1l_tM`zNShD5!05R59T%Lw
zI2oJ~y4?#$0)ui~$?B`NM;1RD)fvyXU#D@UKAT63v^gP{rU8px4Yw5saz_R5(!Y&?
zEKE|4^+gR81?C@EaIh~n!mAfuQyV>hxJll#N`q-KN%0$)3ijR(_JjN
zM}?>o#?FvKIG-v0AmsA*1o?$){0ik`gH1}oxsa@YzL4f^$6+qs(edz`-^_GVUu$m9
z6Aeqb$>Vn(`Q?>R>k;lwpeE}KhU>-#7D$URamm1!{GG4+R;(%g3O{;I^e6PxsZNi?
zT82o&2<*c0oe6;8J=pU&HxR<*k!Yt@v1wS2uvIkMj?ETz_#^uohkSk4F@8PhQI!)9
zQyOApa(o<{Fa7i=anqy4dzZ%ip2z>g=$%d_rCu)P)wr=+vG%=b)E*3@UYYC(6dkT_
zGGG-rF__4e=5?qoDf+PmLSygX$JEr~=C!gdRC7?CdCYSq-N_r7_K1sY_)7S}Dyi*k
zL9{Z9?500AH`0aWf5cGn{S)|ndWv{Zjl!SX(}9$E`#1IVeCa|v|5SUi_i{6g?QUizu-#6Tb6iM#GBP)dw;@^k%~MoP1yP`!0TEI^{n;n?
zD}||&YywRgi&S?rPBPUZwZL4$`+h%5xH)$VJhl0M2eIV=xh#UR?zkJXy;6agZnw)b
zz`579Hm~=2(f(309nPs+n6NLi%*UDo^IVxSTTusXp{mp_^te}%rs&TMpet#$GulOQ
zMUqFXo?X@=5ux=HrC`D<3cv
zK|!oy1bevh2(>cOTs{sKxD5vU>_&@?U||Ynp~?>$4`rtcV&@_SbBd+sh^9Nwgj-T8
zqbWtO$0$c*(KgQKPs$Lvv25k+2DvzQ
zAhv}nGb_mVS)7#INVHO9j7-d{vLh=NxaU#Nq4H(Jk*
z5Nc58T>i!d5xdxn5#1<_ATnKHoa=gQWGnDL~Tm`GSY^jQN5&Xa|VPvY6nc6J-$g
zR+6aqf2GgU`FkJcsplx<38tbQoP#cfbI}gMaB3e-`9Y}&2fc`()cO1_G1^*cWkb1$
zTmJm6pQ7Fzq+mTdqH7O+kf-YX@unN?6($(?h6qBR%lA9xHxYZG&0Yg$nHCGnMBJ92
z$sinX+<04oST+!!u~d4njL2amUrrn`4)ks|zmxoV3cZCcc&80GjlFFYfcz8(8O^zC
zdA}K9Z~j$y-y%Ff*CGgz28qn8yf6%3UMff*IC@G*SmZvJa)1NG_(W+x110~Ed5QsN
z)6Sj|!b-(4nLQCD1+>L8azxoUSJR`@>$Wn&XvvrgIg$~hzT0sZn3wFtEK#jm%%=Ke
zt2Atsy?98BD@OcE3Z7#kmG$IFqXKP&jHDroC>SMql+1C^*|r?BNV`d$TtwrjoFt(Y
z*H*@b&asfn=2XVX<&m?#3eX|If0+Xk7(cTF3Y+5B`5rrJ+CZNqtW{2u05HVXzt6y#
zeSu#Yz_?JxP)`TKLVd!vuptRbHwC2>j`poUub!?Vu_Lj=S;iN;bV~FW{(2G{iHz8P
zm{Af&cr3vDO4Dc>nlfK(8k#fTY#RDANu$3s0V9lU%pr`VstMjcR3M+Y=d>C);~%P-
zHeZbD(i$k;B$hzR8tvl4&zAu{5$Eg9A~85fJ6kr_ydc*6~gF6?$ZxH
zLoOVie@$4^)*CEy%_Se+s2
zT+?JB1N*7!@N2?)cc`D?9m1fUXw2$joV{XguD@Z|MVwrdaBSmJ@Az8|SWO0#r^5$W
zalcP>u#R-FXIrqvSTtTTMm$(-t|-fsj`-AxEyXC9cdx21MNAF-YOf+^u<*90JNq4P
z9#Kcc4Kd1_7PcaaXBh%qakh`dnz_jvWFDIdw;fC*KVVdvprJA@W+jOGj_rgebwgSc
z_vO1Kar4hLT8InQDn68shu+V9~II0jS
z29XQp>Oggv?MPVV$Kdpb~n*ph*Jdm5lPhQ1=Xz(&>z)K0VS&?Bj
zUO~7I$sF9OEc{sIEfh_N$D%1|C7oLphuqSma$`C99%zeB(Q%Zco?Y;J8UL7E`)@e%w-j(Z#=BW9xL9K9mQPD7$FmBaD|hg
zzhuzF9xm2`!-PbDgt|e8H3YX`pIZO`Q9Hs1+b)QkZx(63fsr3oe%^@MS9^5``l(U|fHlH7ZGqAqe>
zKjX~_s6Yo!6J)+NiBTyen4z{5Y(Zzj|C)kNN*2X$!Dvts@o5~MNl4C5WC|14;gh$*
ztqar`z-l3Ru%;rJiVw7HK{{Qr)t*=q4J1XR@W83E(r`i&fK#+ubV92Pl1oRgF@Bf<
z6MY$ZzlP9@!80KhoFdwh#0&J)=Fkns@QccLhSmfAMrna$>XS+t=cd~s+nyvtdcyL{
zM60!)w>Cf?vjgy#w9PFA&CGKOS*D~7KYm9~ndJzvx+OcUW|^p~%IPXJoOC*{u+$Y2
z($B(M{***1BFjs@RJ=)Nbh5R>#JAsec2wOn~jF{Jz)WjWMjPZtvn
zPu;e~6r%VL16tjdxgi3^KSwjxxuzt|6!H(ew`%4x%SB5z(Yqhl^I+3{f9E*t#rUts
zeX;%NugkU@H62jq)ZD|{Mr^#oa5O{4t|*GY*nSx{UOu?eq3s2NEWD6;GbbsO>DYc9
zHeLa^qoHm6CL(|n84+qIDPW|1EcI^2GAp609fIaqtcegmf2xfDFhXU`!93jFjRF`s
zu;!={&2*+(i>;iowEv!2j|&)C{Ll71)0qkB%AGaS;ExKNEOw^~*pg8(7LnMA@ecTx
zjaLK?e`tGvKp!V0#>`0ug*mR@f~`#uPHSizOrVb&!o;>h6jEvCg!+2Olt@#Of7bh$
zPy9o!_F|A;5xQlsFTonKCZ_*^ZKXu2la$MiVKtbTEQol0yM%UQ1FluVM4I?r0I8MU
zD>Jy2!7Cyd6=|zHPpiKZr%SK@lNK0>vbk0BheuR6{#eTVKw%7=`7^oo3&U)19gvd2
zQBrd&ysC>-#~Z%kR?+;xU<};(Gx_to=2l2m>{kZ8pK$^vc%Ar%JB^@=;No-PGUKN~
zq!!|MbM!nWFN~%7h#l=m1bgFz0mO4Q-ee&(t45k_vBz)v(~o_N=X5L6IpILkbHZ4(
z9LdaUl8w@sHG4kGogtzqUdtBy2#1%HEZP`CP&g?D4bW>~&;{E%6NEyQh
zYUp&6vHtfVazzJyXvSuVNIeoqz`b+E?_P5p+DF80)*=55INu?i
zF{@8Ym)1_Fyz@G+fpQKYWMfB$UVOXk|8CL8nRXKHq{fB@@rZVOZZKwiW%frzG~_R)
z;t~z*UG4zqBiE#P?%>Wja@y~nP|0Wgk)ANh70()l6J%)4wXH*fV+$K#GB|)F-ubT!
zO88hw)qt@ztmKn&`GMK<5RTPr@D2KX@;O^dH$J5)(8%#Pp4LPzy>q6h>D
zLxkA8kf0yw-O9@XR;j^2|5{qX&C)uzeKJ<*f^Ff#g=@J3g4rlx;*g_)>#o~j7TV{p
zE$>(#A2GeDH%~|(hE$(jaiJ0VEw^*W+4cF$yR#wbVRjMA>x&my1i^bRh>I6iZsnhY
zt1qwyr?oTLf5T571S%HES%3YF3VJhQMYQmxexQAbmRZ-AJ~hIc}Dr}PZFktv8Oiqiee;^
zFo1twVSkt!KlRSOY8epLTl;h8&lf4pYWh!Zl@E>-fBcZE&O!7u<}vyqf)kp_7oCH5
zbXURV)!V*94!s>MELz4_RA6uAu1K91mgY0E>tjV$FI%Yq@bEo^@9oAj(1pe8c=(UIm%?34=5WoYM*P7hsJjCtv6C1-)%??XBmN@lz@`#Pw
z(9Qx|pUxQj%{m#8&N!*Adi*(4>;P^GK6A~ACo^0>{j%;ukN%{ZC~a06B)KXNi!Oc4
znTHaBY1UYm{`DK50Qj(}p*@X$+VVQExgvRL@Q>d+leGmETMI@E-mrFg<-4_Cg80=O
zI%f_%kopRpTLh-#2683|Jyh5aCC!
zcVTF<1CAZ40NyUJRexp|g78t}j-4?4$F}PZ(9v*`Q#ir<*)JvRgsdx+bO66W{D$vW
zY6GDkTjpSD9hTt;_*u0jn8i%`&P8*SL7PK(dGGBe4TvNXoIR>lAMN&1o&+u{s`V0Rf
zkk8Sy_Zs3YiN`sc$2Eq0!qq$SY1d>cLHZeDYartKp)1XCJLbi?E7)`FL5
z&~cmQTB?VTO=)Oj>it^)yGUH_!0+AC+dEcwLXm98!6T-3`2hUG%YCc6w->&5Ous)N
z1i$a@UgX}zKInTRd&gN0ukPfYN8eRHfW%AhNk-F8Hw@2^0mbYkl%j*Uis;qR8#FZ`
z;nt&N24UoEzbiG8f)1YSxN3s3QT~qgc}z@x5G$SxyP$1GsEi8Vqx%NM)_m~bxHmop
zQ8nvM_O}Xh2sF}6a0vLQ8%5LAxDMtpXh1;KRS7Ma#H@>dk#D483*YVG1gA*q0NW$$
zqcyE1yJ#!z%_e5U`Cv2X`?zj}R9c{r*9MC*xBK@Ojj!#LYidJCI8nQwJwPYK%JGh&
zGVj!Bza7Ji-%~=um39BSF;NRsMs@i7dz?+{bQbaPhYh%@($b)0LM$*)pUKuzu{rwq
zeH8kg8{^&M`dXllq18<5GPvj60muVd$j?0Vq!FzSbu;%=93`t($igfmt9JF>SGcD|
z@^4k8oi*sq;cw+vV%9|~44hU*DpBe33C@k~+mE2Gm1p3GxvttqKSDoXag;wxOR
z>5VaU{yNgASMlS4-Ydpb(dT)Vqxw
z{b`V~tc6QFq{yh^sWA9UJg6VPbfF4*tKhYhHJDbxcFt#4KeaRvEk5Vb3OF!K`GINe
zF)fJsMgyXwbU}augY_t)*Fc5#3>T75Rk9+Qm$SBr(+DzI*f-nXK)Q$n)9$^(^H75I
zt`P668FuXP90D_%i@@GpR2?>tTeRntEuU6L#GQf59{^&;$bk%65`XCW*JDlDc{_ln
z33LgO6~fCG0Snw;g3YG5+#b5a^xa0W*@pGt$OaC2)ALCJ0Xum8$fkQh9W9cyq)Br@
zb4T*r{pk#U1zY7cFzu7FT_-e86?;#G4Q=O~G*QX%W!*TCb=Q1a#e7idzPW4+u+cU(=*bXoy)~p;B|#7b^GJt25kc
zV+w?vC|2>%**d1}%<9ASF7!34)H;lFFw??}cf!;8eHGXaR6~`tm_SP_cx7Y$j$?Db
zw7#+gb5kRO3tWRFjEYwAXvPY%D>z?cir+Wp=@fuerv{HT)AqA@YzpPzZ1(I?X2m7@vEXFTEuG{5#n9*p0)cV+}^47LH(Jrw%~*R
z*Wt?9J>K$a*2VJv+TfElDFF5{uW$Gxi@px=J30zh*4&jdY>lj>7Nby(?D)Wl(tJl`
zy{_=Z{Z5v`l42jIvGNHa_IjpXVmZg4!{P!+Gs@CD1#b*@tSa!6E!+_z9T>d1yn$|@
z(zFlRw4q4B_X|4lqHFdu0=~n_!ec5sQD7BJ;sVj2I^*(drh`lr-KP6-KWLMnrw(i-au=>
z!uP>Q?w0Pj%{nanJm0>;l>Bok{r+B33!d2;p-!2LwZ=?kGqZC`SjVUaQn%nS4_dAd
z&)7{OvsQ|^_>d8mx|X<2G7Hb9dVxhl)dl^}L?KbCNYpjJ(1ab1mE`^#(pf<{7TwzL#WhCQ%Dpn
zDyKAUm^}$Pc}bHDIp;z&h)q)_!T1v^2?#^1?_LHZ$XC%o3_nI)
zrxUWE-@`thb~_%&wb^29tW&9!eX`nbqAAHq7M^EGnX^eyTRBamiEMhdr5@3OBh+Ze
z&Fo_(BJ1aokbjWHE`E{6alGeN6L`iRk2uj6OcS#9G*KINn1MXFru;oGs1t+ZLtK4m
zkbEWbBk0fb1;T{t=-EYN&sM8|KmWU_`Le|4m7lcjaK0s>!9QalFWo&I#EjQ$GP|py
z?Wi8%6Jff;%&6}|fJe5J?{plQwWBSyGeLH|r5A%giViGS8m#kSoINiiHO@CGR5SJ<
zNBj8DBp?l&Rr#Z-wYP1S?qM!sj7;p!5zvEajqF3~maIt~((@>>927-s{K7q|nNWH1)!Y#iS`D
z$U%yTna@+tLX#U#cM9c2&KTmWlgUD-iF7q-IyU55p4^v!m#YC`ip5
zW;JY4R+Ty^y(^1TS$*9IY{Lt{)f&9oC0b#qG0SMn@gCw%p>iEu*
zBI`%FVC(~PC50iR9ZhYtL)4mON$(9&J4RC&~8@D&1YSz9<>=KalV
zRi9mdCbGDq4fVtwP^&)gru8jJ?k2ZTYH2`Me;sto=~L4e&<DL`>?g7hq2|=1YsxiymB=LgT0gES
zjZ{UOJ#Ob0rJ-%*dSa<)_vaN(XPj8%*s8Qo$FOsfZM3U>InXiw1y+dlp
z3OV7(!>&&4USu`cEPWTdk}GtEQY^Pff{cb?G{ZoNlvF6g?KML!MOat
z|7QHxOyRQ`BW?N4m$NWe1vY}x99}F6w;vf1=nL#vRx{`31O?M21V@R*sLRY>jYi?A
zUOIYa9%d*);86(YT}QV4StBpP`hkO(`)3XOfY4ZXmMWD=*ZR&2RxI_l#gm@olw`O0
z5WYCFjUdJTiqvloqN30ltkH#V#@7wDG;cr+fkVSb2Jook^VXB$qX6}%X!cuUw@h
zfjhk3#Blv%V2-ZRapgm>_>3!+pzvG_v65_@yl1n0RcES`P3c`O>~;?|BgR2
zzLL;uYR_WeZ49&+l;N2%eRq_XUhQe1eUmPJG&^NsR|j732HFAxf5B%pYw}P?fPm0F
z+abfe2`)jy`pPKdEqTFnIf9+EU_pQ6*^tI0sf+zJ#hTxf^E^hQ(Kk~oV9Plvk<_ye
z*Ru+{743(V`Wid`SgRZ^6*>P!8(iDNQ@ymP`xn+ObsTTb636
zOIJE~Jab&xZ0geLaE^V5xe2p_U4j(QJm=`jc#WA?w`BuRDw|*h3R{Z6NFJL6m
z4<09*dbX(BCnM;3OJ%Klg8+B0`(_y)=&vSCkJVjRzgrvkL>ba1Ql>ai4J7!z4k=gA
z^{II;{GM3NDgcH*Zc6QgpEDp7rUk>BJybET&pz;uFXGtVQQT}W-|U}Wga%lH&;fgc
zWIHd#l)1sR1%6&{>l!M;1%FX92MI7LW20SS*QLI0j7t})5tXT$jlo~ns~BSJg%u>@
z*J%pl0V5<|+U)=S_h(qT-V%e-DF3Up$sDq&$jE7!kT3I+gP0xG$Q%XhHNwZP
zJ&HKeHjCtqpNzb5j`&Oen8jE(Fn>=Q$X-0E$7wQoEJ&XAo0nPHUK43tjr1(mh;Zpl
zeVQHj%x;cKu{!Kj)BU4qW%~@YxwJB4A79I+Mf%h#A@T)=-;PtS2&
zUb@X_lJKio8oXWz^i5fsyj~XZZNc7+v7cw&w?G@c!<}w?F8y&3G1UegAit(Ab(1
zUYA$fZKP?+>{89S)dQ4TkwuMdeA5aUG=zmq;n4rhxxwS#DP&DyO%DoS)Zz&%U@Wj!
ztOHyXdSmd_R?|c#NMlJo<2N-SM;-PhjWg}q**9M8^+1V`pcMULGRPoM^{YoPl!Lob*6GxR+RQ3NSo1Q1oHG&Y
zrzkqzCB+(}a*$|^G#RfaR`KsDSmo%Dr^%HTSP=v{o%3^DXeU}A<90MKOc~@I*c-nZ8&?#
z3nT6@Vx*Dh1Y@d!A7ySM%F?aL$El!fpvYOQKDP#)rqu*nan-A&XKqkZZ&5*qQhelA
zxE>L7z*2{t9jm-&V%C_}c5=v&{*|=vOf`Xdq-@(1
zJZ(b)iLW|Zv3&J(S3~lZe}~h2IzQt~xc?#QPoVdmGftL4+W#BK30fR{7a5Yn1eP-}
z%-^LFo@V6xE&(K7+b)uV1soOCX!Lgy&u`x^Tq5?szC$(x+byBB^&j8juX@hZHGlS0
zFW0=fyNfiqd&-xWg_SrWJDun}L*$dkDo?IkoJYEQ+#t^B46esPs7$U~@
zhX*u6j(d{;vm@3!CvsIf&pV6S>rw*2ivj6hJw|fo*yC*MdA29T1eAx8cslN$l5-x~
z)?~WvV=SJmR3?`z%vr>iJ!kLGj`?>x1OTY2u}AFqoTjk%ilK)Kh5$2f3qaUm?Dwqz
zjfd(hhOLlp6RZQ3p`bws=HXE#!!Ccyx}qs#jXP;0Nupm=%>T(7UsM#j65RZ4XU+Wi}@1sw5xpGYFz;=Cf
z`cRUERK|8@5KVcRDJ6AwN}9;YYQedWZl4Gjr|~;7t5Ix3IythWg#Q5}1TIwY!+38$
zajGQ99pctqNe}T+u8%j|MLhcpt&ED(^ik*>mZkoIp;7-mtv-9_z|jwy_32fgbZr=0
zvTv>qL%Hj>+IxN85m_2W?Z3J2@#+(mvT97%Dn*?p%U)A7(E)Dx8pdJbzi#GY`TKcVs12}agYNvI6Jl}pk1NH+K
zk&x*g5YOynM4DmVVS
zIg|8iJ|HXzWL=!zmXVgxLoTux(EXcRPm_@UO1m%eE34qu=J4pp(O1!c%tnxA;udBL
zPpQz8EdzB{N_=Xg2=zy3yv%($*la$ph|IB|p0$umw@Uhv2GEi#FfW)5*(P?20xy*K
zx9(|qnpW+~x&;#_`K@;1v(8T$5LKe!QE(O3q21u(wq#1MD1>u(wt$5q4oH%;~PM
zw^%F@TA?KLX`HaPTPzV_;Rxg@v+(N+$wy~#f{ED3p_9MP`7wffyHrV}y;e;hx(&Cn
zpkX;TlwWt$8qmVE#e!j(<$9$y9p5TwWLnc|N`{`Ve|ozJ^zuUU=K<0o56RYT^@%M3
z9{KM*`+|Ut3$vkYanscFGK`hrc5VoVN;!xD~Un?g561}(9
zz!y(xdE&@Q8FWP?puVyCX-vh}jGC5|Tdn(K*CH;T9ViD6nW)2`Bwut={G8+r2ueE3
zcF65uOTKa=J-``=u*(pXWlO4)S$)qTr7Q?@yv)2f9^%-Ra7dgVYI%Es5zD0zKtxr+
z-~|sZ3(rb_mTIEVT+FFXAFKi4f7Pu8X*S_}7Tto4#i#*X7ayC>KC4CAGoa2s%lby^
z;Wv~zfT`ET0ncKN)kt*<78xPC1j4BIsk~^kgklkx
z-79klp6!oVWjDV#fB$$#sK{xK!)SkEUFb5U{wm_qIw`bKn+`qoIO|{@KzcCym6l$p
zfh9a-Xq~gG60gI}m9UWCCw?AS191+XUc~1#dbEuRzB#Shj>NhM`=F`Qr_1We^=C-&
z4VbGPACsdDGyh4&BdN(dU$sQ@Q0P}d;o-LgatFl#C0)B_v=vBraYs2I>)B}l
zv{E|V5@FlcyPhyKVd$k11U3a=?#e>HfMQm`=;;M;RWop#Oo%Q_1TM_rcTDhi|6mP9
zh;qGJsZk865zb6V6a92ip)E{cTf<^EO5H>g0nvwfu(Z9%m9Rc_=mf)(J8S~*IJNM4
zBjrwj3g*ExI(*w&&&n|xQ~F2TB@21xw5GlhEs7;${yGLg@ZS}u%4rHC2o6GGpk+fH
zscuwsDhz-XkWqWNl6W~pxuR@0tY8Y?5nR@|XE$|aj6ejU_aZ31g|r)@HL*1y%qa}f
z=5Y+h>*Q|Ur?2Cm?nUn8JcOvlm>!t&rLwqFUI~dADS0OMO;;SK_Qm$tZ(xpe>?PU=
z<$r-$iM;OLdS`mv9jRp$jQMy5KCR@W82v^Ihlpa~nkfxylh7wHE8H<6L;A8PG|i3+
zpT^&G4vPz##tUNF#tjsW-qkXS>N6e|BQT~Lhy%e$0sziYy90H@8opc4s3UkC&Yg9{
zhD-t@IMIeq`OYwuZ~+P8QDyks*fS
z?s-1t6ec&9EMgz$Agr%yr@v!3HJ5HD$aT;zlNNiAua4l0bZN)84sRP<*EwJ%Jj6th
z0aMZ`?in5@vY}N>ueWH=M~}i!qNO!x0_~PCsvj%WpSJFMcVv?@){-O&$G{U4lBTJy
zUXXSxw$DBff&aNPxkE1wTq|114uvlg=e}N}GnltCwF9aBwQ6`v%>tMK7?7Y+ABI^8
zr#-x>ap`CVmSxD>lpa@!xE=a2&uHKTIhxBaBG#FEpUdJ+zH&Nx&>@iG`bP&I9WqvWvn&|1K6ak{5Qd$4AfMl*Cj*6=+j=j-Hn`Qx2Z@QWMQ
zXAn5+)2E#H`dmXDZr~?6;wGW8n&J1EAt|1H<}~#dH3x*>A^(vFtB3>ladq7C@%}p}
z#gpXFZ-u<)Tv?ci$F816zu|?y!VHhRoKFW1cPBt9-wBTz$hJaEEX`TkC8`aRSpV1d|5yfmt|LkX#eXf>DAqUPZq_>uSc6gUI`wt`P_)
z{_vL{5i(n`9}QzL7uTKblrs}Q9^k}h?IUdleFj1~qQOR5)@VtuuVOJGmTc@8;Hul<
zu8MWFy
zW@+lA!m$eCwUS!ZRAhcQ(@?-*K
z&sj3@37qka@h@EQcJT?^@z8WyOD4h=a$_dK=29%$qpYA1CphTtl7ewe)Qu7&fGWlc
zH09L52N)W)cjc371t!MQ0^Vudg9to>?D8Ibw9))+OhV;dbG*JzdnQHAZQ(3~tsp<2
zI6a6XbHOs!+cUm*VoM))0<`FCh;e_Y+t_d6wfLi6`DuB$G<^)Eh@qo&-TpRCAc~ww
zvz291Jikz$Nq_H2I3#UyHVfvN#35l;Y?LzFN`gkCB&+^%@G5O2tBLqL!U`BdEzy&a
zbP;6PkN`R)J~~2;hQ}TAEMwk@Koo7ml`-f6A`VF8T5zsGiT)BhIs#+HUgbx0f|9lp
zEyoDQd2Ad7{*~(Hnz6l4i2omK_|FVDO!PEXnMQn*z1ZV$`qc))f
ze*9mySr42>@qcpK*!=zExg2(}UjU`wz6{*#(~U-)eZh;EVq?yPE*72mgOa
zwX@k$Mt#h0-@a1nroah-I&em6i;JIA8T71Pq;O0^Qn~&S#*_%g;q^g~7=@6+z3`%U
z@rcN*&KBT%TM2K1YpU`ec%S4c
zNQ1u^Cw?7g`doD#XMaHZ-OL6_f~k$?h)C^hqJI7cLf-Z~m!Mn$Ym{KGcMVDHhI-sR
zdqTHx2VuC9gHS}DVMl^+>0q5v2`h6w2LY&tO7G}1ZJ7jcM?2xD0A}X}*q}rs%P~5;uMCIBT81tlsP_9bk@t1mu
z5Pd*Af?1YArKU7T@PWunaQWMJ^<9Y&j#H)lfs%-)HEk&f}j
z%7bKoF|1Ye*hna^32a9_Z$Eqck9>96&KzS%*-UyjBY?{X6-I(dsgM_
z*sIDZR&M1`LltX#rzaXE6y5ac5e~n(5%zAyc;bJnAod-siPd}QS^`I~xSfn-*k1ZF!ni40MQ}4o54Llj7OS
zQ;wQCmi}@2f#1f4shuh{m?`CJ0hPA=bQNbuVj#(PT9}_APGx+(flZ_A0Sg|tCf4b-
zWM?wrW2x&|$fjI=IXmno%g8?~^@=U*FlW72OkeTc8Y|Z4MK{yRRW@BJ3VxG7p3y_c
zy~qxDxS>7k$;Pj_L!DI%TGkQ!P@ZU-ZEeVxzwTK}vUjr2Cq>uAke0xjM(sLHrdrhI
z@&|+FPLY_GT{o$F1r_cOLYd0iwum*07mGKSl+eqocr99}|7zr(8ephinulQKFRYYd
z+K{W3lV}k)RcM%R9d9fABVE*1#~E*z%|Hb_>B-;~1>(Bxbw6~yx)tv3wM$jR@fan>
z&Zgm$vc%e*+p2Dm3?mH>n@BXzzxgbThq)AI9l%wy@AkMGTUK1S<355U%2Pf(J3{h-r^k%%#!}?r=EVxTJy|nadd@_e_
zGxdmvF2iD@ZsTP55V~o4e0Y_qLfB*-SleXs#34K&XCRt`Xi${nYGl@5&w4_=HFD|7
zveRGBeuBMqY8a_if$27pH-;K0-@;{zP7rU3?reDhsVhL8Gl!UAx6iP=RF^cwpK68HC(&UaK3*&vTK)3+_@v|8uO{{{jU#3Z{FN>FGYcsrRI?P25RU0Clvz{>KMvrCCC5pZB_Z>-wIn49tvzs9Et|@5t
z)g;1-Qu@K5_=k(Kd996YGucgp0%JWtT464Eq;Ng?S~=&g)mM;2apkVC+IKv;cUa<`kWxfXBG_<<_0mRPbCzznawprk
zewW_qFj3>AFXU%G;V9K--nuc&c$*%rn{qoorlyS$a>ox8)MUEI&s|YJbOHc2RdP{c)xed|W&1rE
zoi?itD{HopXG!h9oLWU;8qyqbRi&S#*t($13NE*XC|IA%dpQ(ZQmRbBX_jus$?(d}
zWQ%1O3?}_ZpV{9(ePvTz84n6Y6gmP`MGUPF2D7F(wa6uG=v`t9je8+8s&Dttrn)IJiwziYfPZ}0M3c5fef%Mg~jMo$M0|JdTN*qRu
zPz*)paE&MTZn`8t!#K^6
z@eS5mfUCf@aZCb502EA855sJ+0kO(Tm936^Qfu>&v&mYt#VTSE&wh&gFHhg7F0-}E
zM?Gh~k2jf351O8w+D7H_5s9|oMleMH028&s`Zs0#6irEzwD8}OkOt1ESH0Cn`_D!=
zcl&*xUyDdzXBhcj?jS`Jv(j?gOQ#G$8LpL9!+aoh7k_^NS=5_Z3<{l{t&Pg$FL=7k
zAJ%+-^@|r7k}t(+EGN^mm6JLQ*@`+2N)+YZ(>3M#dEz!oN~mkhSlL@cvg=liv!fQv
zW0*4a-5J>ouz#vhcTK2t$p&0$X5pb9J(ER1qH9rlvkMvQH?D4ATg6V
z9m@<1S$Zj+Rk=UIS!I+h$BWt;!hb*9SehHe<=i*Z3=Xp;PH?xmg%}Q
zM_8K{n>O8&r6}>yndzy*L6Mtm1sGRdS;IhY(W<4)+%{hO2aD?3(cl<|-T{@wA^SkR
z3S|f={``*Vx6}Ei4ucx6P->T?`P3*o%hu-MHLEsj+CQPfu~OnMuUp1Ma&=;bvsqH+
zQ*65CPqA#E%
z`w?pweX;;E4Xe)_1R=ZdHl)Pq@g&6L?9spr1VD|yvpGGuN#iN_1B&C
zaKkm2?SNbl-oY9YqN67nPbYPF&HZ#tfpEnlCwlFb@ytn=u6kb`?P{_KB#1g+32lM(
ze}|i2&61~SCvXzQDIHnr|C+w!*ZTscwcYNHRO@})LJyPwg`&{IrGH`394>yc1#(2+
zEPc4QLZ
z0i>c9t6~j_H^AKgdBq}_Og|uSQIZM+d)yysdIRP3)6W>l@2mRvhJJCN
z#Tlgpq?_510=%xs8!_wSfOi)}ws3fHBsx3(sSe`;v#vji;9;V~c~{Xn^tlNO>iXor
z@v0cuT1UGf@?TcnfVh|f`d0Xot)qQkz5by^@EFqdqo7^ciK+q=4(ps5O)#0)U7;M-
zpcL3p7U4B`WQvAuL_HE?TBkgur}>>A|Eo`kaQF(|9lajWEj2dOhrSn0#NdjJKwoc{
zH3C0!hdD9qU^2z^pfz3V0f!Fl%azz#>A)%1wB96)qJn_|aF=)r{ws|6T6wv%yP_2*>3U549%Q}MH_*=PdlTk>ss19nwtGD+
zMRtHU#P$$d+X68J^oa#Ly62j4!gDQx;k!1vnH=Fs3IQO(z40ic
zKYHY^$VDkX)*4S!o@-rGO{ml`O=6ZfDeQcU;9qCZB}EglczsHO`z3
zzs0+mR7i9wr>Z5Mf4=Mw<~AcVOmxM?a8GS4t5aRnFCR4n5*AYxHLkP(xM|=Vxtmm%
z6|Tk7N-z%Jb)CNv&!ceCGz!=~3`tQ4HH&z~*gc##@F=ZD<5^Um^-fY6yOOVkXoI-c
zqg*G|3N6cDzfEyUP_V|(opZdkI^j%B>6!Uni_`oe2akk?Q3`SxO=&F!2&
z)WI})p)>OYWC*ny%HQ({9{AMfQ9Zrv=eu{nTN(&R<=NJO2Annxpkns-LGRDwyTe?KH@!93hq2J1l-%`Fr=h(X
zK)Zni4|=RDQJ6OMn8fRhUq^kUes{)sydJYt8CZ$h2QIc>8W0<
zXA~h__Ug#8DsnQM^tMx~lbs_-Tx-PW7%DYN;@I7&K@Ic;4)dxJ;(&s-7I}kQcAgDS
z(sNFR#aBDYTlz_T1w`$UMD6J%cEB-B`O9kq(oRJz3L|U50dV&H7SQgjBe?il!5O$e
z|IlRv=_`|P8s3MrfX(%wL1#{cx2}T|3lGoCwnuI3yOdP6Ei*76N(wWCJ_DE@saLBC
zymL}iFS|;hq71db4^`(XwLPA+kaKee0s2ViAi5FDLL$Rh_f~0+y~w>CSr@qO@9WML
zdOT>Slon!OaZi0?0`91sEF$C)$_r=ed4Dz=>2EAb!brtu4
zmP-hpL*8&TI*z+IOT3*MdqfDui;~p1`y`V;Rkaos^C`uRv8hqXhx#b(i;-VC90=@4W8+wLL-H_Uj
zcm17cw%0w(g}`(_nvCKc4t9&UudfPbdx+!=OYc77o3-gZ?v^_(VFNMSQC-57XUr|8
zG|%}qj2MA_=q1-?%d66G$?M)G49TSFTWl{BG8f*v$rhtQ12*c$wi#9nMh+_AijtLn
zEe@^r&OmoOFO#Fnil)GbV`{`Z!6Vbx-MW$IQ|_o;VdAJhuJqA}6>fs|V&sq6{?=
zyOJNg{DakWd0bg5Tw|it{699W4xUa1^02aLYLb(p6P*zSjU8VIwi9bxMoUVZRyJI=
z6c{-@qw!o!ISGElH0VoUL~wlqe?PwQ|2jrd`_xtYSjP?dsU`F^=<;g0u+OL!+M|*L
z9ANiMnSHaAxb}Hy1TqJ1TR;MPi_dYd20|YaV@?c5ZV~lQu=;BvLpXV
zk5}1WwKH+{LWe_#XAKx*kIWfe`2Ea$FYylcM+#q3F^2cW_uaiVoEZT?Po;63)A_aW
z(6KL!`Ave|DZ!x$y^2rGkQrwO$(}d7FQx#c?)Yy8+#ocS4*}n6vff+KC`1yP>;0(x
zVjmIU@>^T`R>hfjPwvP&dQBT)U}Zj6`wsSFt$au9ex5xtx
sO~*?;K`-k7;^yF(bWvqtV9A40Lw_v?0<~w7Ar>_
zt>~7S$aY%f1zLHxKVgl_4KMEnHg^-1zd+&My00K_r7vv~)2K~M(oll8VqDYbgB{G_
zn&C6m2qsK^^-m_#Se@*NSopUIc@hPNsotmoW@AI%J62D#1N|;1cECfHpUvZJ?ewOv
znX@#G38Kwccr(yX6Rz=E<8o+n78JBJO%E?O>vv2CZhRjAdyQvy!Y^xwt@ie1;rLs`kJ>1&=O>^;SE%JHw1ac7q_f(I&aR
z!3jn-Pv=5}rabt^i~O4Ohdc45Te$PXulGvEoeOy#%){fX{>5`O@uy)MNBL6kh$7$e+@kG%vc>aGHr|bgYjJue+05NtR@>uk;0({Vq%G)mtz)5!wwk*qT1BipbtY&!;epD2IFFEMZ%Md$pWlGP_afOU{?VU5U`-G~D2T2$&1{TOj(6^MQY
zYK!p+^ocu;hdX#R@(t5dj*TI64^fx2Q|l`1_nG2ZwCg61;cd_!TTpN|T+B1(RCDgN
ztUlJq0XPS@j+|TxII%k4^ji1~G}_IQGDl1)og4+8uv<^Pv@hck4!=8KyEX)86gjlX
zEisL{I4B$(kvjktJjPTH;5pNi-p`yTbWRV8r+)mZ--<5oiw>6%n7fXzIIw9!9Hnpw
zM8?|_|AXj6qe?efgBBXqUZ$6P$3eeQxjSUrrhOcHzNtp4xSulbb%p3Kb#O%IFm+@B
zVYqMSz;OdQc5Gr66q@
zwd8K?(t&B8;_8pn{$K{-9d=1)(sWxijN|c9i*Gcc!z#_S)BhPbY;0T>XWbDQ)Xy3`
z&dGM;W?TcC6sOsz-6q}+KKLHKaq@Z&Z%1Qxt@5VZ|AL!o2IJ`9bhW338{>jM7(9@1Rft@I0(4Ucia&>yrjLCsD4IX
zzqSpfPG)$8G7{X$7BfG;V+r;g9c^#Chh}`axI%MoJKfWB8f-oBhQ4RNwB%$E>)rXk
znPeHr^i-M2QAJBQj-L6V)OB0EddXe;{NvHcKU<%pjUGe+*KtLljo1i=|o
zDE^635M&!f9(2#oxSlZ_G;+mE+ESpqEE6!|DPjj7IA{pCNrDQ>E2TU`fdW&}!Gq_F
zf@gmV+#Ov}cJEfYq*CaHb8;oNzGDhMKr4zv?i
zOi+x4-Fe_K90WXaN{aeRqr9EaP$iUsJBh$}+)?=dZ)1p}lWHQcK_@ygT7ye^zZUFnOosze)7L??T~y
z^hqsX9GuGiY36Rd>zBwmlGmeoCTb84ld&baFn<)o*UfiF&4tX3IfWo-*i!-W3Lcb>L!ce>Kp-CuK88
zN;oSPj1fO@HnIJAfZ{t(aDawBV4$w3rpi#}wiW+d>BVZPUQ^1T%Z8vkCFj4mr|?T9
zpenTmwJ}@2&TeTEEAn{y0L>NXF5xAG!O=d5Vbz!9>eG8t^k`+ea@_aVMQ#kyGZ3i&
z`?QYy)rWKkeEDbfBMi8ldZ);wtM;Fi*PtCRL*Klm1@c|UxqSF*W^Bqa=`P~_A&ua_
zI`>&ENR(M#G{p7L`7A!E*oPiuMaV7#D*YY1MV|77Q#f1v75
z%n2B{lFyYfr&^eF%jr93S+Wt;Ac7Tt7sgEt;74Ym*WUvc_UAzOgQo#B{N+ErdrV1@wY%Rl_xM+D^DHnskZ8=%I=Yir4
zJ<`>1(8j%dp{~wXW4_Kiz3dGOD}|b@^M?g7dN&X~q3@91SnK{oZW~_^kpAfmO^G&@
zY4(Hpug*+vw$NenxGh=PkY^VjHT>BVt1gWpYW72IHfn=W!9bo-0(G5(BHaySIJ^Si
z0SMW>P!!3%)EN1en`*d)W3$ZN(c_ZoAoe>JVwJfrdZ@nXp5DFsw$IVWOZBHI)rDX*REi>O%g)_t)ET-V7kK@*USEix{T4e|
z@FU0dtN%ERCnWhin1NQ9pn#BHMQRQ<-F~4F`z*a*ujQ+u;A&mn%SxrOmX>Tb7j4g3XK-nV~HUpU2u?h2uA
zV*M};$Uu>_nafu1z7nc~~rdG_pJ4BN($my&=V!Bp+RC!&5LZM-US{>Wmm8)
z@Wl#cku(GHl@OguUqCwkIO_DxybB_t^n1UsBdb6wV7`m!O$&L+c;yoGl1@gY7>m*%
z9__3^DzXqiyzen^@95hP%(tziui?I2?X8@w3-C>IN<`|mR5j(SiHf8!=UDrRr+8@|
zsWwW{pgRb(rikTA3p?=gF`$w#7R#WNfMwL^&r%D~tnqjJ5j8#?0@JWEKFxs|)fXbi
zNKFD7yV5X|x{GQ?p7n*a*eOB{wr??5ARA>{#3qd@*V4Zr9{EoAGDQzZ(6dG-6a<$`
zmBf?Via!<;R2T}PJBVi!)iI(4v2cUrZ`v6h7pG|FZ-h~~?x9r^S0K(E=^;WDJK08H
zh=vaTD8R-<{0<49S<0tZIts(%WV-S4z#mtPt8~oDTXP09MVfoIoG~pBUAfmo^N;p3DcRMI5=_KvB@?kM82n|D>&zoE*7sG@
zTRbec2kF&affON$F)Z-%3qc3T>1;-t$`h=j;eCWH#bWiiCm7@
zhYmRVdBz>;y`{uh%ib<*$1zAPSB0qP?^r8