From 1be51392537e776644af72dda5fc200fa0ee721f Mon Sep 17 00:00:00 2001 From: Will Lin Date: Tue, 18 Apr 2017 20:13:47 +0800 Subject: [PATCH 01/28] [Android-things] Launch TermuxActivity automatically on boot --- app/src/main/AndroidManifest.xml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d875d5ab..d8ae463b 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -76,6 +76,18 @@ + + + + + + + + + + Date: Mon, 15 May 2017 23:40:55 +0200 Subject: [PATCH 02/28] Export TMPDIR to $PREFIX/tmp Fixes https://github.com/termux/termux-packages/issues/1010. Fixes https://github.com/termux/termux-app/issues/306. --- app/src/main/java/com/termux/app/BackgroundJob.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/termux/app/BackgroundJob.java b/app/src/main/java/com/termux/app/BackgroundJob.java index bd76edc2..1ff2450e 100644 --- a/app/src/main/java/com/termux/app/BackgroundJob.java +++ b/app/src/main/java/com/termux/app/BackgroundJob.java @@ -116,8 +116,9 @@ public final class BackgroundJob { final String langEnv = "LANG=en_US.UTF-8"; final String pathEnv = "PATH=" + TermuxService.PREFIX_PATH + "/bin:" + TermuxService.PREFIX_PATH + "/bin/applets"; final String pwdEnv = "PWD=" + cwd; + final String tmpdirEnv = "TMPDIR=" + TermuxService.PREFIX_PATH + "/tmp"; - return new String[]{termEnv, homeEnv, prefixEnv, ps1Env, ldEnv, langEnv, pathEnv, pwdEnv, androidRootEnv, androidDataEnv, externalStorageEnv}; + return new String[]{termEnv, homeEnv, prefixEnv, ps1Env, ldEnv, langEnv, pathEnv, pwdEnv, androidRootEnv, androidDataEnv, externalStorageEnv, tmpdirEnv}; } } From 0714e435cbb422b75dd8b0eb20f3e7e745ce613a Mon Sep 17 00:00:00 2001 From: Fredrik Fornwall Date: Mon, 15 May 2017 23:42:13 +0200 Subject: [PATCH 03/28] Do not show a Toast on clipboard text Fixes https://github.com/termux/termux-app/issues/149. --- app/src/main/java/com/termux/app/TermuxActivity.java | 1 - 1 file changed, 1 deletion(-) diff --git a/app/src/main/java/com/termux/app/TermuxActivity.java b/app/src/main/java/com/termux/app/TermuxActivity.java index 8e6c7255..c869ffeb 100644 --- a/app/src/main/java/com/termux/app/TermuxActivity.java +++ b/app/src/main/java/com/termux/app/TermuxActivity.java @@ -397,7 +397,6 @@ public final class TermuxActivity extends Activity implements ServiceConnection @Override public void onClipboardText(TerminalSession session, String text) { if (!mIsVisible) return; - showToast("Clipboard:\n\"" + text + "\"", false); ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE); clipboard.setPrimaryClip(new ClipData(null, new String[]{"text/plain"}, new ClipData.Item(text))); } From cf06e704296f16b00bacdeb2f13e15882f8dad21 Mon Sep 17 00:00:00 2001 From: Fredrik Fornwall Date: Mon, 15 May 2017 23:42:30 +0200 Subject: [PATCH 04/28] Update gradle configuration --- app/build.gradle | 2 +- build.gradle | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 88e2be60..348ed3a7 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -2,7 +2,7 @@ apply plugin: 'com.android.application' android { compileSdkVersion 25 - buildToolsVersion "25.0.2" + buildToolsVersion "25.0.3" dependencies { compile 'com.android.support:support-annotations:25.3.1' diff --git a/build.gradle b/build.gradle index 3ee2d98e..9c95303e 100644 --- a/build.gradle +++ b/build.gradle @@ -5,7 +5,7 @@ buildscript { jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:2.3.1' + classpath 'com.android.tools.build:gradle:2.3.2' } } From 3f0837688194ade55512b98329a343efeddb82de Mon Sep 17 00:00:00 2001 From: Fredrik Fornwall Date: Mon, 15 May 2017 23:42:55 +0200 Subject: [PATCH 05/28] Bump version to 0.49 --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 348ed3a7..48289e3a 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -14,8 +14,8 @@ android { applicationId "com.termux" minSdkVersion 21 targetSdkVersion 25 - versionCode 48 - versionName "0.48" + versionCode 49 + versionName "0.49" } buildTypes { From 61f766b59fb830ff4b3b3532c4a90de40f9ea939 Mon Sep 17 00:00:00 2001 From: Fredrik Fornwall Date: Tue, 16 May 2017 00:21:15 +0200 Subject: [PATCH 06/28] Bump build tools in .travis.yml --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 8c09f531..2e846d2e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -12,7 +12,7 @@ android: components: - platform-tools - tools - - build-tools-25.0.2 + - build-tools-25.0.3 - android-25 - extra-android-m2repository From 9d3f7734a18cefaba6a2199204cbad767d502828 Mon Sep 17 00:00:00 2001 From: Fredrik Fornwall Date: Tue, 16 May 2017 11:11:57 +0200 Subject: [PATCH 07/28] Update android build tools --- terminal-emulator/build.gradle | 2 +- terminal-view/build.gradle | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/terminal-emulator/build.gradle b/terminal-emulator/build.gradle index d10a39e1..04fb58db 100644 --- a/terminal-emulator/build.gradle +++ b/terminal-emulator/build.gradle @@ -18,7 +18,7 @@ ext { android { compileSdkVersion 25 - buildToolsVersion "25.0.2" + buildToolsVersion "25.0.3" defaultConfig { minSdkVersion 21 diff --git a/terminal-view/build.gradle b/terminal-view/build.gradle index 7e4c7cfa..be547fe1 100644 --- a/terminal-view/build.gradle +++ b/terminal-view/build.gradle @@ -18,7 +18,7 @@ ext { android { compileSdkVersion 25 - buildToolsVersion "25.0.2" + buildToolsVersion "25.0.3" dependencies { compile 'com.android.support:support-annotations:25.3.1' From 1a09b6d2a64a813aaf56a209e86100231f36c1e9 Mon Sep 17 00:00:00 2001 From: Fredrik Fornwall Date: Thu, 18 May 2017 13:25:41 +0200 Subject: [PATCH 08/28] Change android:extractNativeLibs to false We're trying this to see if that fixes an F-Droid build issue. See #319. --- app/build.gradle | 4 ++-- app/src/main/AndroidManifest.xml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 48289e3a..a057421c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -14,8 +14,8 @@ android { applicationId "com.termux" minSdkVersion 21 targetSdkVersion 25 - versionCode 49 - versionName "0.49" + versionCode 50 + versionName "0.50" } buildTypes { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d875d5ab..455b7b1e 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -13,7 +13,7 @@ Date: Sat, 3 Jun 2017 00:14:20 -0500 Subject: [PATCH 09/28] Add test for CSI followed by many parameters --- .../com/termux/terminal/ControlSequenceIntroducerTest.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/terminal-emulator/src/test/java/com/termux/terminal/ControlSequenceIntroducerTest.java b/terminal-emulator/src/test/java/com/termux/terminal/ControlSequenceIntroducerTest.java index 127b9539..626075f8 100644 --- a/terminal-emulator/src/test/java/com/termux/terminal/ControlSequenceIntroducerTest.java +++ b/terminal-emulator/src/test/java/com/termux/terminal/ControlSequenceIntroducerTest.java @@ -29,4 +29,10 @@ public class ControlSequenceIntroducerTest extends TerminalTestCase { withTerminalSized(13, 2).enterString("abcdefghijkl\b\b\b\b\b\033[20X").assertLinesAre("abcdefg ", " "); } + /** CSI Pm m Set SGR parameter(s) from semicolon-separated list Pm. */ + public void testCsiSGRParameters() { + // Set more parameters (19) than supported (16). Additional parameters should be silently consumed. + withTerminalSized(3, 2).enterString("\033[0;38;2;255;255;255;48;2;0;0;0;1;2;3;4;5;7;8;9mabc").assertLinesAre("abc", " "); + } + } From 058441dda6f703c15bad9d5ed327a9ec24e78229 Mon Sep 17 00:00:00 2001 From: Jeff Smith Date: Fri, 2 Jun 2017 13:18:03 -0500 Subject: [PATCH 10/28] Fix FC from too many control code parameters When the number of parameters in a CSI control code exceeds the size of the mArgs array, the code may attempt to read past the end of the array, resulting in a force close of the app. Stop the index from moving past the last element of the mArgs array. --- .../src/main/java/com/termux/terminal/TerminalEmulator.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/terminal-emulator/src/main/java/com/termux/terminal/TerminalEmulator.java b/terminal-emulator/src/main/java/com/termux/terminal/TerminalEmulator.java index e172d38e..6aa150a7 100644 --- a/terminal-emulator/src/main/java/com/termux/terminal/TerminalEmulator.java +++ b/terminal-emulator/src/main/java/com/termux/terminal/TerminalEmulator.java @@ -632,6 +632,7 @@ public final class TerminalEmulator { int bottom = Math.min(getArg(2, mRows, true) + 1, effectiveBottomMargin - 1) + effectiveTopMargin; int right = Math.min(getArg(3, mColumns, true) + 1, effectiveRightMargin - 1) + effectiveLeftMargin; if (mArgIndex >= 4) { + if (mArgIndex >= mArgs.length) mArgIndex = mArgs.length - 1; for (int i = 4; i <= mArgIndex; i++) { int bits = 0; boolean setOrClear = true; // True if setting, false if clearing. @@ -965,6 +966,7 @@ public final class TerminalEmulator { break; case 'h': case 'l': + if (mArgIndex >= mArgs.length) mArgIndex = mArgs.length - 1; for (int i = 0; i <= mArgIndex; i++) doDecSetOrReset(b == 'h', mArgs[i]); break; @@ -981,6 +983,7 @@ public final class TerminalEmulator { break; case 'r': case 's': + if (mArgIndex >= mArgs.length) mArgIndex = mArgs.length - 1; for (int i = 0; i <= mArgIndex; i++) { int externalBit = mArgs[i]; int internalBit = mapDecSetBitToInternalBit(externalBit); @@ -1639,6 +1642,7 @@ public final class TerminalEmulator { /** Select Graphic Rendition (SGR) - see http://en.wikipedia.org/wiki/ANSI_escape_code#graphics. */ private void selectGraphicRendition() { + if (mArgIndex >= mArgs.length) mArgIndex = mArgs.length - 1; for (int i = 0; i <= mArgIndex; i++) { int code = mArgs[i]; if (code < 0) { @@ -2049,6 +2053,7 @@ public final class TerminalEmulator { buf.append(", escapeState="); buf.append(mEscapeState); boolean firstArg = true; + if (mArgIndex >= mArgs.length) mArgIndex = mArgs.length - 1; for (int i = 0; i <= mArgIndex; i++) { int value = mArgs[i]; if (value >= 0) { From 58f9f1be71a8da42afcefdc7e687014a35c97698 Mon Sep 17 00:00:00 2001 From: Jeff Smith Date: Sat, 3 Jun 2017 17:20:43 -0500 Subject: [PATCH 11/28] Add tests for cursor save/restore --- .../termux/terminal/CursorAndScreenTest.java | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/terminal-emulator/src/test/java/com/termux/terminal/CursorAndScreenTest.java b/terminal-emulator/src/test/java/com/termux/terminal/CursorAndScreenTest.java index 567e627b..92c41f0f 100644 --- a/terminal-emulator/src/test/java/com/termux/terminal/CursorAndScreenTest.java +++ b/terminal-emulator/src/test/java/com/termux/terminal/CursorAndScreenTest.java @@ -227,4 +227,44 @@ public class CursorAndScreenTest extends TerminalTestCase { withTerminalSized(3, 3).enterString("\b\b\b\bhi").assertLinesAre("hi ", " ", " "); } + public void testCursorSaveRestoreLocation() { + // DEC save/restore + withTerminalSized(4, 2).enterString("t\0337est\r\nme\0338ry ").assertLinesAre("try ", "me "); + // ANSI.SYS save/restore + withTerminalSized(4, 2).enterString("t\033[sest\r\nme\033[ury ").assertLinesAre("try ", "me "); + // Alternate screen enter/exit + withTerminalSized(4, 2).enterString("t\033[?1049h\033[Hest\r\nme").assertLinesAre("est ", "me ").enterString("\033[?1049lry").assertLinesAre("try ", " "); + } + + public void testCursorSaveRestoreTextStyle() { + long s; + + // DEC save/restore + withTerminalSized(4, 2).enterString("\033[31;42;4m..\0337\033[36;47;24m\0338.."); + s = getStyleAt(0, 3); + Assert.assertEquals(1, TextStyle.decodeForeColor(s)); + Assert.assertEquals(2, TextStyle.decodeBackColor(s)); + Assert.assertEquals(TextStyle.CHARACTER_ATTRIBUTE_UNDERLINE, TextStyle.decodeEffect(s)); + + // ANSI.SYS save/restore + withTerminalSized(4, 2).enterString("\033[31;42;4m..\033[s\033[36;47;24m\033[u.."); + s = getStyleAt(0, 3); + Assert.assertEquals(1, TextStyle.decodeForeColor(s)); + Assert.assertEquals(2, TextStyle.decodeBackColor(s)); + Assert.assertEquals(TextStyle.CHARACTER_ATTRIBUTE_UNDERLINE, TextStyle.decodeEffect(s)); + + // Alternate screen enter/exit + withTerminalSized(4, 2); + enterString("\033[31;42;4m..\033[?1049h\033[H\033[36;47;24m."); + s = getStyleAt(0, 0); + Assert.assertEquals(6, TextStyle.decodeForeColor(s)); + Assert.assertEquals(7, TextStyle.decodeBackColor(s)); + Assert.assertEquals(0, TextStyle.decodeEffect(s)); + enterString("\033[?1049l.."); + s = getStyleAt(0, 3); + Assert.assertEquals(1, TextStyle.decodeForeColor(s)); + Assert.assertEquals(2, TextStyle.decodeBackColor(s)); + Assert.assertEquals(TextStyle.CHARACTER_ATTRIBUTE_UNDERLINE, TextStyle.decodeEffect(s)); + } + } From 2e9383720c44a0c216875f813005095a8743546b Mon Sep 17 00:00:00 2001 From: Jeff Smith Date: Fri, 2 Jun 2017 00:14:12 -0500 Subject: [PATCH 12/28] Make cursor save/restore affect color attributes SGR attributes are stored in three variables: mEffect, mForeColor, and mBackColor. Saving/restoring the cursor only preserves mEffect. Change the cursor save/restore methods to additionally preserve mForeColor and mBackColor. This affects both 'explit' saving/restoring the cursor and switching to/from the alternate screen buffer. --- .../java/com/termux/terminal/TerminalEmulator.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/terminal-emulator/src/main/java/com/termux/terminal/TerminalEmulator.java b/terminal-emulator/src/main/java/com/termux/terminal/TerminalEmulator.java index e172d38e..1d6eaf74 100644 --- a/terminal-emulator/src/main/java/com/termux/terminal/TerminalEmulator.java +++ b/terminal-emulator/src/main/java/com/termux/terminal/TerminalEmulator.java @@ -1307,6 +1307,8 @@ public final class TerminalEmulator { state.mSavedCursorRow = mCursorRow; state.mSavedCursorCol = mCursorCol; state.mSavedEffect = mEffect; + state.mSavedForeColor = mForeColor; + state.mSavedBackColor = mBackColor; state.mSavedDecFlags = mCurrentDecSetFlags; state.mUseLineDrawingG0 = mUseLineDrawingG0; state.mUseLineDrawingG1 = mUseLineDrawingG1; @@ -1318,6 +1320,8 @@ public final class TerminalEmulator { SavedScreenState state = (mScreen == mMainBuffer) ? mSavedStateMain : mSavedStateAlt; setCursorRowCol(state.mSavedCursorRow, state.mSavedCursorCol); mEffect = state.mSavedEffect; + mForeColor = state.mSavedForeColor; + mBackColor = state.mSavedBackColor; int mask = (DECSET_BIT_AUTOWRAP | DECSET_BIT_ORIGIN_MODE); mCurrentDecSetFlags = (mCurrentDecSetFlags & ~mask) | (state.mSavedDecFlags & mask); mUseLineDrawingG0 = state.mUseLineDrawingG0; @@ -2263,8 +2267,8 @@ public final class TerminalEmulator { mBottomMargin = mRows; mRightMargin = mColumns; mAboutToAutoWrap = false; - mForeColor = TextStyle.COLOR_INDEX_FOREGROUND; - mBackColor = TextStyle.COLOR_INDEX_BACKGROUND; + mForeColor = mSavedStateMain.mSavedForeColor = mSavedStateAlt.mSavedForeColor = TextStyle.COLOR_INDEX_FOREGROUND; + mBackColor = mSavedStateMain.mSavedBackColor = mSavedStateAlt.mSavedBackColor = TextStyle.COLOR_INDEX_BACKGROUND; setDefaultTabStops(); mUseLineDrawingG0 = mUseLineDrawingG1 = false; @@ -2318,7 +2322,7 @@ public final class TerminalEmulator { static final class SavedScreenState { /** Saved state of the cursor position, Used to implement the save/restore cursor position escape sequences. */ int mSavedCursorRow, mSavedCursorCol; - int mSavedEffect; + int mSavedEffect, mSavedForeColor, mSavedBackColor; int mSavedDecFlags; boolean mUseLineDrawingG0, mUseLineDrawingG1, mUseLineDrawingUsesG0 = true; } From 45bac89298543a9c9ca2e0740777da33dd810699 Mon Sep 17 00:00:00 2001 From: Fredrik Fornwall Date: Mon, 5 Jun 2017 22:45:15 +0200 Subject: [PATCH 13/28] Remove unused xmlns:android declaration --- terminal-emulator/src/main/AndroidManifest.xml | 3 +-- terminal-view/src/main/AndroidManifest.xml | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/terminal-emulator/src/main/AndroidManifest.xml b/terminal-emulator/src/main/AndroidManifest.xml index b931189d..a293cb64 100644 --- a/terminal-emulator/src/main/AndroidManifest.xml +++ b/terminal-emulator/src/main/AndroidManifest.xml @@ -1,3 +1,2 @@ - + diff --git a/terminal-view/src/main/AndroidManifest.xml b/terminal-view/src/main/AndroidManifest.xml index a312303c..f2b0725d 100644 --- a/terminal-view/src/main/AndroidManifest.xml +++ b/terminal-view/src/main/AndroidManifest.xml @@ -1,3 +1,2 @@ - + From c29909726cb2c21914b9f1c13a1097d00c910122 Mon Sep 17 00:00:00 2001 From: Fredrik Fornwall Date: Mon, 5 Jun 2017 22:45:44 +0200 Subject: [PATCH 14/28] Bump terminal-emulator libraryVersion to 0.50 --- terminal-emulator/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/terminal-emulator/build.gradle b/terminal-emulator/build.gradle index 04fb58db..759c5b8a 100644 --- a/terminal-emulator/build.gradle +++ b/terminal-emulator/build.gradle @@ -13,7 +13,7 @@ ext { libraryDescription = 'The terminal emulator used in Termux' siteUrl = 'https://github.com/termux/termux' gitUrl = 'https://github.com/termux/termux.git' - libraryVersion = '0.49' + libraryVersion = '0.50' } android { From d4be782c03eea8b116bdc97c71c61c4d88b21edf Mon Sep 17 00:00:00 2001 From: Fredrik Fornwall Date: Mon, 5 Jun 2017 22:49:11 +0200 Subject: [PATCH 15/28] Bump version to 0.51 --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index a057421c..e9fa9a2d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -14,8 +14,8 @@ android { applicationId "com.termux" minSdkVersion 21 targetSdkVersion 25 - versionCode 50 - versionName "0.50" + versionCode 51 + versionName "0.51" } buildTypes { From c972377bd120c685abe508fc38f02795ecbcb01f Mon Sep 17 00:00:00 2001 From: Fredrik Fornwall Date: Sun, 11 Jun 2017 22:47:59 +0200 Subject: [PATCH 16/28] Update gradle config --- build.gradle | 2 +- gradle/wrapper/gradle-wrapper.jar | Bin 54212 -> 54783 bytes gradle/wrapper/gradle-wrapper.properties | 4 ++-- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/build.gradle b/build.gradle index 9c95303e..ee9a47ab 100644 --- a/build.gradle +++ b/build.gradle @@ -5,7 +5,7 @@ buildscript { jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:2.3.2' + classpath 'com.android.tools.build:gradle:2.3.3' } } diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index eac8c4a1e1cd4a804d6bb953bd7248e926025859..f72beb3751268d6264f1768edc393ed5a8a27c26 100644 GIT binary patch delta 6729 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 delta 6082 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 jzP^Kh1*-ph{e$ Date: Mon, 12 Jun 2017 01:47:27 -0600 Subject: [PATCH 17/28] Add Multi Window support for Samsung devices A single meta-data entry is enough to make Termux "Multi Window" aware on supported Samsung devices. Tested and confirmed working on Samsung Note Pro 12.2 running Android 5.1.1. This addition should not interfer with Android 6+'s split screen feature. Tested and confirmed split screen functions as normal on a Nexus 6 running Android 7.0. This addition should go unnoticed on non-Smasung Android 5 devices. Tested and confirmed no functionality visible on Nexus 5 running Android 5.1. --- app/src/main/AndroidManifest.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 455b7b1e..c36010e6 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -99,6 +99,7 @@ android:grantUriPermissions="true" android:name="com.termux.app.TermuxOpenReceiver$ContentProvider" /> + From 7913e765d5239bac6bb8e2fe49d6811aa1a54eb2 Mon Sep 17 00:00:00 2001 From: Fredrik Fornwall Date: Tue, 13 Jun 2017 16:44:33 +0200 Subject: [PATCH 18/28] Bump version to 0.52 --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index e9fa9a2d..da92973c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -14,8 +14,8 @@ android { applicationId "com.termux" minSdkVersion 21 targetSdkVersion 25 - versionCode 51 - versionName "0.51" + versionCode 52 + versionName "0.52" } buildTypes { From 5b3909cb73b23542734b3315c9c02da7c6a15512 Mon Sep 17 00:00:00 2001 From: Will Lin Date: Sat, 17 Jun 2017 15:39:23 +0800 Subject: [PATCH 19/28] Update AndroidManifest.xml with expanded comment --- app/src/main/AndroidManifest.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d8ae463b..414ea3d8 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -80,7 +80,7 @@ android:name=".HomeActivity" android:targetActivity="com.termux.app.TermuxActivity"> - + From f9a565d1e03595a6bc9e5dc9fb74f941bb741687 Mon Sep 17 00:00:00 2001 From: Fredrik Fornwall Date: Mon, 26 Jun 2017 01:28:18 +0200 Subject: [PATCH 20/28] Ignore C1 control codes C1 control codes are not used nowadays and just risks messing up the terminal when they are used by accident. --- .../main/java/com/termux/terminal/TerminalEmulator.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/terminal-emulator/src/main/java/com/termux/terminal/TerminalEmulator.java b/terminal-emulator/src/main/java/com/termux/terminal/TerminalEmulator.java index a9c88004..a993d834 100644 --- a/terminal-emulator/src/main/java/com/termux/terminal/TerminalEmulator.java +++ b/terminal-emulator/src/main/java/com/termux/terminal/TerminalEmulator.java @@ -419,10 +419,11 @@ public final class TerminalEmulator { mUtf8Index = mUtf8ToFollow = 0; if (codePoint >= 0x80 && codePoint <= 0x9F) { - // Sequence decoded to a C1 control character which is the same as escape followed by - // ((code & 0x7F) + 0x40). - processCodePoint(/* escape (hexadecimal=0x1B, octal=033): */27); - processCodePoint((codePoint & 0x7F) + 0x40); + // Sequence decoded to a C1 control character which we ignore. They are + // not used nowadays and increases the risk of messing up the terminal state + // on binary input. XTerm does not allow them in utf-8: + // "It is not possible to use a C1 control obtained from decoding the + // UTF-8 text" - http://invisible-island.net/xterm/ctlseqs/ctlseqs.html } else { switch (Character.getType(codePoint)) { case Character.UNASSIGNED: From ad293562bc065f414a1c6b73a74ab8481e405980 Mon Sep 17 00:00:00 2001 From: Fredrik Fornwall Date: Mon, 26 Jun 2017 01:29:05 +0200 Subject: [PATCH 21/28] Fix possible crash in the copy/paste/more dialog --- terminal-view/src/main/java/com/termux/view/TerminalView.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/terminal-view/src/main/java/com/termux/view/TerminalView.java b/terminal-view/src/main/java/com/termux/view/TerminalView.java index fb018747..91d0762d 100644 --- a/terminal-view/src/main/java/com/termux/view/TerminalView.java +++ b/terminal-view/src/main/java/com/termux/view/TerminalView.java @@ -834,6 +834,10 @@ public final class TerminalView extends View { @Override public boolean onActionItemClicked(ActionMode mode, MenuItem item) { + if (!mIsSelectingText) { + // Fix issue where the dialog is pressed while being dismissed. + return true; + } switch (item.getItemId()) { case 1: String selectedText = mEmulator.getSelectedText(mSelX1, mSelY1, mSelX2, mSelY2).trim(); From 05ea2ea2389adbe7766e9da21ffe1ae98446a293 Mon Sep 17 00:00:00 2001 From: Fredrik Fornwall Date: Mon, 26 Jun 2017 01:30:08 +0200 Subject: [PATCH 22/28] Bump version to 0.53 --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index da92973c..2d2f3475 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -14,8 +14,8 @@ android { applicationId "com.termux" minSdkVersion 21 targetSdkVersion 25 - versionCode 52 - versionName "0.52" + versionCode 53 + versionName "0.53" } buildTypes { From adae111d5c421da0ebef6354abb821c18b807544 Mon Sep 17 00:00:00 2001 From: Fredrik Fornwall Date: Sun, 9 Jul 2017 21:07:18 +0200 Subject: [PATCH 23/28] Update gradle config --- .travis.yml | 2 +- app/build.gradle | 2 +- gradle/wrapper/gradle-wrapper.jar | Bin 54783 -> 54712 bytes gradle/wrapper/gradle-wrapper.properties | 4 ++-- gradlew | 6 +++--- terminal-emulator/build.gradle | 2 +- terminal-view/build.gradle | 2 +- 7 files changed, 9 insertions(+), 9 deletions(-) diff --git a/.travis.yml b/.travis.yml index 2e846d2e..47275393 100644 --- a/.travis.yml +++ b/.travis.yml @@ -12,7 +12,7 @@ android: components: - platform-tools - tools - - build-tools-25.0.3 + - build-tools-26.0.0 - android-25 - extra-android-m2repository diff --git a/app/build.gradle b/app/build.gradle index 2d2f3475..901fa1c2 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -2,7 +2,7 @@ apply plugin: 'com.android.application' android { compileSdkVersion 25 - buildToolsVersion "25.0.3" + buildToolsVersion "26.0.0" dependencies { compile 'com.android.support:support-annotations:25.3.1' diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index f72beb3751268d6264f1768edc393ed5a8a27c26..57f11ccfb1aa979ebac9b64050e8123cfaa31150 100644 GIT binary patch delta 17163 zcmY(KV{~Rgv$kW~wry)Bwr$(yo@A0IPA0a^iH(UT=ERuTw!it_b=EoS-M^}P-L-rF zsI|MR>#ENx$hIoTAH49()X|<_z`($?62w#yGmr3(@Ne9%-N3p+;k*zKerHCK!hnEE zMAM^cFmZ@)qO>*TrktLFaMS0F6W`%dTyJs}Q8J@d(t9*M17X7}os}{>%`d+5Iwl3p z@w|7~z9@>?&fRVXHR(BGm9^X-1YQI__V`bCU-sM|_C6m2(-6z_EO;`1JAzHSGzK=U zEpByJx|p)G_fA-kp0b0D2U%^OEFoc>@O-d)&Hid%`>woY7C(Egyn%w(t}{Vf3s?Fu znOAEt{ZGV@z0q4qlH$VVR4A}p@yn1YYg6(qpOM0zI%;|QJx2I&B#A!T#HLaEbBuw^> z9c)?LUN$_Vt^^qJe9~jTuo8bd{)PIG9^v(P`w4O;SPoC~2#7ZB+ocKp(ao?bqd~|= z0nq_RKtaW2c$8V5pblcO^E9>dNuxPIQe`FZnEeeH4iPAZa?ch=H+R@9N<_0P;^X0- zdZNz`!L(mW*-<#n4bd1nEDlX}M4XsKvpCHTX|?z9C^{?+)?~IRf$ zMPh*C)>DBvq&ey^j54YQWKA|g$$AEUR;L4zTX)6<{mp6%S?|>RBH8>RnH0>iM-*D^<2x6p!uPxthBOKX&Lp`%Bee5Qd&-4EBTF6A1%ER(uN#- zAhn0lq;hLgh8*fyRV|^%L@Ubx+)Z`ueteJvjmTfFQVzOuBZhTGO=#*mMl|o*)?zJl z*G)6=Y;x$&mog7kdHwl^wlu6|11n&Kcz<#CIw{kpgi5b%T8_4Cth>3W&|RyNX~RMR zd&HxTYdfFwoP%FM&({C37Tj8H`*m>Y4ssNLQCwqKH%SlJ$036}-2or}@`y3(OTX@(?DW?s5=>RtRpc!S-g`TMs>_vY4uw zM83gyo}5#2W!Worhi@EKOjCOBQy*+Zcjw$pW-f|kV=-xyzcAmSAW50bQk>W|#Uz=d z30Sdk=^K39oow2uzMS@+90!ERxR(Y|)SI^XgKIT8rdv{4VfQ1v6g|=l)jezr*RWcn zb4uI9*KK#;yM_i~ubb$-B0JNA5L9Q&zAh>y52Jjqx!%HCGL>M*A&0-9*RN$`ct%NJGQ^eVuEnv|Orqh^} z^3e|~vXg@pT;&Khn8GsXH$!n1(bFbvXYHdn8@ziRrW&?;P}86A->St_UKkvsV28vZ z(vTJz47EPIu?pH6 zafcwJ=?pWqTsJu?1=DET1I*Di$@+>~k(2~3cJnCRJ_TE*5`ci_x}ltBh~HHtK3na< zQ8MnuppyUiz+)_$L6I+0Cc{kW3aalqDO>=aO?!g1h_Q}G^Y>Q>Ret}9(>a4mdyZqO z4ivqfeb$LJg+7mO9kz=T?vSEodZa%koP(d;Y#Z5)WJdWrEv6fx+ho6MUnvUsu^&&@ z?z~zEoU{dTU%z{RLJ#guAuhTZ@YA5sWQl z8swDBj4J8`+M2p-n?qZYveIBI9r~_o}L`<7fi^a|q%#-o6)m+J; z=?P3L`2xSMrrTWVY3Yb-TVt@tbewo-oji-D1jxqL7bpxiU{sdeAfU^d$E=`Q>+rFx zJhmW6$^!d0Ex9=K^lj;hataMy7)j6ypEnQ*JOoUNpCyFQLYnF@`qOu^g%}Fi+4nd5 zR>Mg>bTMgZVC}kNHS(pfX)N(`a;_Ss5rsjD*roKw`{-_(mGi|TJ?H)*IzPn2DV$j? zFY=nZ(wo{iEm;};{ji$@rd6^YE_c|!o+I$e#{iLRNu_YsQn}3))nfvF8Yf*X7{fjb z(MEH$mE4&DE-DyWw>hKF70Fqt+~~x3S((k2MzhPJJEiXi&dKnsTaCrWo)1bE4jJy2 ze@SktGx#-2CVRG3pk2LJ~$onm) z*at-c-1XbgL1FAO|I(0AMq$xn@>iUIXM0)s63j7gtF@D5)2>cj&8u>2Z~IR>k>qj% zzv$3XL+7cR@i>(}HSD+_W&Jo*Y)IgQ6Hz8(_>h;miVdZG-F)b7!6_?B=oL3I_XPj>c47gw0asz<}+ioMVaW2Xoj}sGmmZ{#RBJA za%;oyEkz`)X3S3FP&Lb;#Bynd?ZnX?4lE}Py2Oog_d+GnXR*%h1ZY%TgLgZ&|o4z7xT7H3b{$Fq9R zFXVh_CVeO~cg8bxcWD-@>~C|l4M}8ZgUvB~Q?oQgw2rj=&&yegU>B-F%X)H*-)82@ zE{cpsbN(Lu9k#8ijb$xX%7#>UvyIDGTZZcQOb4~5?l`;v+9WFl!DiwR^Ab?cO|sb% zan9Phz`bP9^03gnQ0eR_f3CMKpnbb(J+t{Bs}Zi>xa=yYxax1mkJ%Ai_twNqn5KUs z64rtyKmgg+H9eKsk%WLp2_qbOpCeF?HmPEarm7PBRVSxw_s$`d96J za%lXCjWxHjkAZX>h>L^rZ~*IZ?(H=q`h9RI@a_^^paj={b_953j{uLsAZI5UhKgf* zg2A_uj;uD9m|-L42%&W)QcgO-WOK5LLkYKCt{7qTfereG(hW&EEEuU7i@~}Jd(HB7A0UT$>crpSPJW=< z&$YG~{{1TMgK9^AjWPW|vT#lHb4U8h2*0GT7L4}c#>I>kwv0hFy6j3s12J-sNLuB{ zM^r>?oGDl_jrCoqAzrm3bT9R^O?WePNU84tV9hlzZoc(BdkX#p@duD)O4ZXB2t7h`c1yvCBro~;tZTS z_OM1nI!@?yzgf*nOQe;dhx@g0Eek2`n-VJ$mJmL&OEQ%-y$>y~8OL}SS z%H=4bYg*k>l{XCt&|m4O2UBQ$KR%dHP`pE78~Ct94BqjHfKfA-V#)xGxOiy3IBi~2 zy5W^vu`;qg7aU6AJ{dBMy%U$N4&eZyXjP1ut`JP^-vmk3wBtII;Hr^bv@XQE*H@u2 zx9Y6wvN^wrc6-?mx<)i^d?bihOkTBWdyr3k%biM-NeZ1~o}$rR4nCg+U{-;`JJE{u~^fb)cZb}*1%Pa8d-!yj)zgCQN1AHk#qGLa6ftB!2hb9{IhD0Rn@n-=eIC* z;uPqz?5p^8qg*>|vD-H6$^%qC>ZmfC!>BTy&`LSuBU)Xsj?gb)=P`_1p{n*r14Eu@FUPw<|}l>A{g((v0@jqy!Y zvhjc#J2CY{M0aHzM&B2UKj*mAXSgefZh0GR!$uLwd1{HGvAUWR8m5^mD6t)Hy+$(q zPohaXxF5(t5p3v2FkoQ&h+trx|MEzjr0NkeAVo{x9rF-BNJMvT^^}_jg%5p%dq#p| zIpj`^p_59gPlL?8!F4zE>*8E^w@-6bt=2brWm);vVn;u@Rgl|!)&a$Qh7}Du+H|Nv zGiSF`S#N$?`>~?6pXy6MXF~#N8|L(rU{CmA;MSqPHt>EaO$x~ux+aj@-;N>_3D2zn z*zx_OjH5?3o=+I$Z}$CCQ@VCtm}#s=i@R{;$!(x9K#k1WI-oX=Pb^G#%%!4Jg)1RwD%?NFO-N$n`jqn zqYm3c6q40dobW64Ar}LG+!jpT2EESzMu<@u(pi*3?fCvw7`iAtA5*^{i@Bq%!Ix$L zj7Hr`nYOfE4@`y98*Qoe@7`9n=@Iuq{cXRBijn{3uV@|zt!?%Mo%@@ zj7=hF;YP3JZXpCIzNC4{yQiMYmEj1OVBIpPHeeHDHe!TDO;pZKTzr0)&NqCHj&U&3 z6LEf(IG~pi?%7Z6mcs(5S{zq^rFKnkt}^afmQEwgFCwcdEzXv*IF<62E3ND&38SOi zlnYC`6uQU`ZXk_}I%`A5^4A4Y(u|23#k+)QjmqD$Aj(Ez#_zHmuIpYzLuoA@pp;dE zdK@c@&1<_GhmF+W0grp(J9HxnNm^DxIeGoyk;Md4E=;2hR_@dG*V!|GP;Cqb3`%fQQkMm#HHrv14 z+;3>Sx@X}$Q-2KaiPDl-T-YxE^oW|;X-hf1BGQELYb z30tMqN&8e{w#}K>8+rC3UV9iLI2voar| z9kVHFP^nWNZ&PLz`S(%^qa1inoUrwzsp_B+0!bxZY$GRG>qUDYLw0|Q8B^2m{9Z4X z26|xtwd+X6r#~7?quC(_&$|j1M1x!tm2fZ_3AgbV z)eym|9O8d)U;mDBHbiqaFfYVT$sIsq91#Q=>Lk&o7H0++0O-brSQ~?5GWm#T(@Yd1 z-Mzts6p8cR`K~LQV$wgS3WBEu*_4oPcyN`62#-3##O*fkPz3(02O_>lA7wb5JUEqN zl=!E4kan`V!6(RbBr`*jl6lPwR7V;}SMIXnX<7%a>bJW3pzD{x`oCWMy*8jovH2Tm zz>(rWhK&G-Joz*D;;yN|qj1f7-LkawzW&9uG^_h_kMg3yLa@Bj8GZWBXhPH$z5&56 zJOs(fC8JTG2oZ2ZR`N-|)ZU|T_?|sWVY6=i@foQs$?Lw%%u|JLiH@1!(rY|9(Nwu) zUyUsjCR`j$(eGY8E~zzWHanhN-r&c*c&4d!sJI9mIuZ>#2H^KfqX56yHV5Dc7W4+` zgh>X<_~L+qZ$M+96@X_Wun z6%v=9sOAUDs+3jK zKba17o-{sUYJ>fkX|Gszh8}&1%1m%Kqz+zwz!_^1v0lGXII~=>bgi595SF>nk^VS$0c!Tr1H`~n75;kRJ`0oGVSnh$||T5Xq9iU0=2g$D-4@Sm;8fr1Kf z`0l_)f%FB8)gde)bUAdP9vRPq(81hH<}1o`og`IGf>Ml?Cl#@5R*MJC2B$2oto}-D z(vPX8W2MJU#tr}Y&rZSd29IyRJGAJ=>t^fHt5NRT^gulLG8s?BGN@D2VNibWMy$j)s;^%DAJnbv!=VwXZr(~hGM2ov*QsdN^o}CeG>;T18w^oCm zixJ|RN5Y^0^`X`)N9e8V-Oj{+LEaNj`g=c|At;oz>Ipum@~<@m%(Z*)D)IYyPC~8t zD@?}=>iOB}vA{yBbzSFAZ89`~zmjxmz*U%^fTT{Xe$OULOfoz}LEmqVU~U&*oJ>Pv zbA@|(llb^#;=001_2J_5f?(oH+GGe0dWuslwfQ1X@bf*gI7APMd+1yxMSbyXmMjsE z+V_|3Hu4m%BEJ9`<)OVz=$Gnx9X%7nL4{b5wEBz8I$WO2@$Rk^L)QSXdExCP?8hWq z6afE$z*H-$3p2W{BqZ$c8QZc;bEQA7`!;jdH{x3h7bdLJJcmU9oE^P&d9NvLzC*sP)=wUy|u zLbQ5RS?&F=9ZCeVF_suWEbhn0iq71*A#Krc6aSx=-!cWLP+E)Aal>ahNYy71u3Sc{ z-!@h7#=~lPo;h$9a0{My6=W-PScnrr*qcjRlbm1p$F0F(m8hA4cZ(^!V>#`K9|>}6 z26m;ESjjuCuzeMhp7D z1@_Pop0Z}sNFEq-(-z+DhYFZvZ7+=P6oxn^KyVvGpK`_QXd$=$wL+G5u>8IKaGkT6DH?TqvEGDyxkLV(9dnu zr=k#1+b7PC{^Csf@*F?EYH8A?EA2PMfvsy)WZU(MZLHjizJ5c5kBV*Mr`BI;sE?lG zJw)-1e}zy4CoxCcD&p&4`Dkgmgm7EsSwE~>)=KFgjuv$Qe*s6TWmR>I%U**chy`CV z{9r8h;QoSI*8H4Z!%Ti{!mRs!Yd5K86KcW2*2%?&pmTftXdwL+j zW~qFkJc;r`gE?CVT=(PasPY+!l5({{2t_6=a7hjOLMbM-K{LgLC~A*YU%SMQ+|jfT zg}Er|nDqicgR(rLB(qKCZW;HaxVx&Ou`0s&p?t()s!Gidltz89iJz<`L~FC~32z3@k)@N7XfE9w{SV>W2k(ZF`}S5Fw7v<7);2 z?&>#v*U`IJO(8nE3nEIFdm@%7A(pckM`UP!ehJHJua$d<`>-}Hulq1*c!qJkbz`4K z!3{h2SsAvn6^j;2=tuqfrS9;lu&@UB&W|o2rkf?~c=*y+plW0d0&Acpq?Gh-3{@F@ zs(aV>z>{^^jpc!862WlhsITEFcVko|a{Rh1liz0>zmD(w+4>*#YC+lq%l7UrCgdvZ zw1I+Dj^W)7A~`i%5{HUBb-eE3mX7v>xwlGuoA53^B0}4op{j4h`STu|%vEJo%#+JN ziP>U>3pvVAEuSc87xsC~4a6!k6V*1Aow$|go>QNepiadLc}Qb%=oZ_gI1P1?%RI{A zdyHc`=Ibll(+D%7b^!m}-`JfrUAzXrCgw3ww?#5sA45{si?g33sBNP^08UZ2hbge@ z6DG}u;y2?1?Un#rV<_$gp=++x_7V+%ZeUnD+>uU1tZnqwE`3=_Ql^_W)dOyFvmPDx ztAwA}F=pH7S;L2K50B2our{3}4YT{U&v^ppeLG^=S57Kk!h8-d`aRtT_HJWP+&>S) zmgqXo7X^9DGI_0r@xxyrk;QewVwYilg_D8m@&>NB*C)mC9|wH>Q(hr`UlD){)Pr+I zS@Jzd(CK|>C^@Wsez7aW&KJUcv?VpdHV9sqKSWSRd=pz766{}@Frw$Nw3U{3lhSc* zGY8*DSb8?;laZA3oBrV5Sr(k3zQ~b;0X{+b4kpXEDzFW7(_gc|wPjpNpf2;iV$zhjqbn|Tan=yI zT#_=i2tKQxL~u5w+hdh`S!~N8D z_iJew=^*jQ93p1EESQk0TZ<+g5ole4>kps_cYFg{w{_S5u=z|6yZ^T3&ooRo?uj?7 z$+KdUe-f0afh5-TxNr)9z;3ZJj1ySP7!;&XT(GrP&lij~6h19u_mYpf?-q*U%Ck*r z#)5yDx@ej9)4c)$tw#f?SC8zDFHl}_+oCLI1}+UBewwdH`Qf}V6d_|fKsPH?q$rGW zE1c2z@hbqveNV0I!QSki-kgpl&9TWdgE8&jjecxY5>F4@!W+vTA*N4-r0?JTLOi!A zaV@idBoT}}o*fp`#qq!R5}VYrel}TX><3^#a`OM(tB_=Y$7ix6pV;e1==?_Ijp*IJ z-rBa#SjHw(ik-|B92kc0sZNq6mlka@D_f2GiP}ibj0A_AgV-)cg$V}sKo15+_Meli z$tW_AqYEE^z27WK`*<)lIavq&wXK>GW0b^;i;f_Xte%|Al$~sc$~!S;oq8%q9^+Jt zR7>x?(6bfWySzkG1A~j9#dB#@ucl>j(b_)nyejag^RfR=XZlOP%E`$o@yoBhG-s=x z{pwHmp4&j*duL@~c?rblBD8x~F#^fVd@f&LF7#$*PrhjEunjHc#wU#SDPk*#MS?t+ z&OE7@9`4#AmqO7rqRdS-!fDrbE)+YLq>x@n{9szcN9%`mxDSdwLLNrpu@LWI*^SUK zed+;M*kQO0N<6A7d>W`cb$qYUAQQos;kG@h3fl;6FARY-5kFd-D=$svbB>HP>Cg>8 zfAqi?q?C{}z}&;W5#o%W-bo=B$(n}WuF=}oB-cYR!mCOuHOho3sMDj%Cfwtmn=ile zMF3cSD}FIzB%UM}2w#$I6d63cg$dLD+5{Sb^(_+Ol~u>zne39>M#OSTk<}M(ifauk z&tTQ?@sH38b>=k2+9SSkt>;QXI3)+{_IbkA#G7K*LWtlS(DzUhS~=r8m$7PC;BS)YFelibFT*XpJn~ za98>>b$71SRc2*>ss0Cb2w&TLjc1#D$XwRRBf(|a=-ALiL^pR-Ef89=?|V7p*WubY za*QucJYX?z#^<(MTZ^@Dt04iFh*v7R>9~m8!GA+faqX6NCmt6jD$kzIbMyBsmtx(95?@N(4w&oO*DoGV`EoH(AGXrsT5G+hBqFk2?VJqmMLrwJPovaz=fob~Vv zK%QE}2l|sv&miVt%p(0%YU~e)^^m>?4XlGn3?HXa8HN(0+1*nPzl`NUV@jcw?H|*T z~HVRS-UeV?`WFu-{aR zW<*Pih>vlrXQ>dIC$&i?k5r}R6vIsVitTdq^>3>I4#AfO$7b>bFc416oO89GdA@q` z`I;Z)ic`i$?f4t|e24(%1~y*27H>veuDbNso}d1353A+v)^WgIi`wFao29a}v0>V5 z4<~((t{#Wh>aN}QUm9k$xF+J=8%oEjBlEta5@U9}L_&vz-5XM!juP1kCJSL$8uMM- zKWZwCTdRHH5*>@q58?@2k@nJUZuBOm+MLRm%&QTl=I_`>n~F_&?;tcblhbAo4 zzQw2zC^|OQDOdq)Awjr=QWoC}q}Q|4nF8BB;feao{Z@ps$6%kqKMY!+ zHe(l#qf@V^Fs+&N`J>>(zPp^3-~6-KgAq%CD$7$h1D72r1nnu052&S=Q>jk{f%{%# zJ6wjCrGnciZyw-3p_3Opn{gRaQg-| zg_hu{`<{3hnoOS+sESh$@?o&Dz-XREA17tEXjNe$lnanFZ!aSkC=j0ANK5&iUMVN! zp46(rvSG|#B%Azdi-X*#M_1kDJwmRP z`)XKPj!)4f1DE4_6WS1+ORg6kuYB6pZW*zNQK0F|(bR&%YQzvdEgC#To2BjUhl}d2 zOJksw-PGAwWErt=leDOX)5>?eF4>itt4%$x;g<^-sT@PT_@}(sik0NevugNd=BgeO zya=Y$ma>-L!3kH+k@UdCC|C9;OXgoob|{r>c+~WFYWAe|mfv`GNpG``j-+Y!$Kt`Wrwzp$cEv5@78soj@MfE{uNBn>#~OlyHtD5dSgzxJm_ZF8hDg*&l`J;hCwZVBkTTdXyS7X(pcv) zm!i?d0=6!8c|_B~X+Ic|RpSf?^Pz z*iyA+-6*;N|EL|?`mWhFPTx4;MGI~pi83h)IiT+jXKsSnT8^vb2vq3qKxQ>8#z!ypWx zG;`DIadX1&>J(BEVJ1*#I(=#K;DMAP@;ctv3r~r#?Xc3XC|(|C&aaeUXYQO^P*MM5 zGc>yMq@uS_Oq5LCDrkQF;Nhsf%ZFgmq*o?J$eDjb88R%bDe^m>{;h3HIbs*pRkY<~ zyGhqx*Y6*KmI8Z3oPv6r#2`xT{QU~Re^>ZHWXHLC42Sh36ua@P13d+|jQnS_{oJq~ zDhh4urbJ#d2=oY-Vy!9CKTZD@m;#WQFcA>i+eYa{n?jn3H)k&j8%)>|!&gZq9laLx zPglJ`T#`nuvTG7ey^*{&36|bOza`4tH*o!osZ%K(Q-9Xn{BHK;jlBMDb*2eO_>(#I zbG&IK&!~<)cB=U*wYx$kvM|*#- z%Cqp75!UB-a{2g*S&a|ufQeoJ=WK%LJjRnUs?~Odp5I^Q?JBqpT7QQ07&A;%PP}_$1+n^nL5mp7N-8uIGB%KIg)iT2U$&&zSoMyb)Z!-5|O<)q5m$ zNs%*DX>4Y)=Wwptj&J2+Tp9j+Tv9vuv%(TQbkU%f5(@r3h;bI}z|sl8@d6GStc(9B z>F{6rG3A#{b2R6|V#2O0Bd)3cesb;XKOJo>Nt!Ul-C{^}H^u2WSI|yd zTt$#P_-t4B2V)9)9IO3>?&>AsX7nMMpOO0z(^)$$n*@f{8Rdf7QZtsl$H{m)sTv+Rtte|FW=;=3#*Wu@W{zC2h3%l&7(Rs&cWZMIY85-&<}6(N}zTx?&D3 zCN{*4zrI=q7$PGC2_2>&s~D}2h3O&Q(9VuS7LydZTJDF-&{y$E1UHO{bA99wZ2L9M z(|_|~(Xs=$!j!_0Zf$t5ch9*xz$q`-5GaBz^b6upj0Z z4$F^bRozm*j&P{deydL5`d&%)3?V(m&C(i^&3Ft*b--in&*9%8ci?M$Z3=Y?4h+=M zmuj6Oo^gP=>q@%luWsi`>WORx3q-7X*YV|D{M&VMG7x)&Xu7u=VjE81<@KYqH5GLx z#%hb>vpDk3qmHI^Ca*EgN(h2OdH1hdSsTa9|tpDnaa3*DuPEIcHj9aJXr9Xf(4GuPN0I$ zfokaFVrTO(Qm(=~wm?`bL-<`Sxh1#2|$3LEhIEk9Ce?yC@p^)P|y+9ds0fw2L+ z!9|2MUWezO%`d%ytz%HU7f2WJ;EvTq{T^*+#0qtaAD$JHTX_}qj? z^t6Y+v;K;X_!4^TQ0Z5c6~t66WckQd|3R5^GkNxazu>&cAM#n?(iZ8QxYSS8kFaTr zZyM`gm*ft1$?H^}PzSubt7kk!l z0PkQqqGE(p>P;qn!vvBOtrg8QPZZc;DIt?A3j=+rL8}eWzLFUI(37t=mE&HFMztE}EW1(;OsIz7g zfyf6xzfQE0_xqzAYE$<7lvcQu92AP6TSgT?9oUTDd3V)$K{GQ)a}k0d>p}hdj#7uQ zb<%m|8Sme| z{`0{PBly#Rf~cpEXvStgaA_C^a-Lg5X>#A=VC;5v8cO>Wa(`b* zNMqZy`o1PxGg$F&G6$>?b|VhBG2~tv@}APzJ@N8+l1|@3*ud8|;QA8->5fCEJH*5X zo5mlR{>+o=P1^PQ9Kn?^6X@R(|{%Vtr_@<%5-*9;}+3%6&0h80}a`pR*O%pL;`aYHC znlI=FY6(jR3iqsMQOj>{_7@Vx&`nbt5mW&!vGK+uaf^v~v19X@7h&on)ciaD1=CMB zy}bO|XH2@lkboEEI7!}LB)4@NK{CC;j;-cd@61}TVy&-{N2@O1zT7oZt$F?);uyKl8}I!kLppSvgRIcs1PSy||r@ySA9ta`kFCHxxq z0bh3{DO4tv=KdM-uvPG2tg`Tii_qEo_2_d-3_^mF0!O^>JuYHM<(kquEo=8|Lj<=H&V2gKUX$|43Vccf@>#yZ)s(WdaGXUP55#wJ#e1o&eMlu_bnUNxXkK2A_hiJx z?LU=~`jyU(r-+<+@-C)28`j~gT~J=TV){0l;!TmpOjVh~-H&gTV5YwGy8}+U73COD zpWux_GVP=Y+rGnW3Q%BRhX_euY$O0}LQSj>B@R=QbhpT2>;mi`3!%k>h$YRkv&m|N z$heBow)SUK`28~$G*b#}Z}3}&|%|By&vt zfM+u_W4SAG-U!%%^k3T9%Ln6e5kK2MY9qoaNZ65zxeOb%@!k@Sc)r)!C2N3Yt4pg0 z@9n;DlhTDDxQ6H!m20$MtM7V5(=Wef4!QheHufb}G~}?kRjX|xJ^C6HOKhAoq!hUw z6`QqU?KEfQ*Uu^oNHNs8laPR2%X^6xgGsu;wWYgwP?mA1Bxz?R*n?^lGOP zohT@6>z5V42Z&J#mMkj78CMjfHWnEoJxfw!atkZmxW7mJ;?O8AJDCMq)GDg%V>2uC zQW5Ew8M8zjb2&Cl8N{Jg9lpa-@_euNlh~CUA^Wqcd4PM!)e*gcdsyz}=3DC>UE0Og zosE6rT%)Ry1t%#~dUDXzP`m8p3HY1`JRI}*Db+o`!tB{O;h-!O=EV5vB9(leG#GWK z2;ds={@Y5OaQ^rc{8R<1dzFm#S}eLEWkL1xUjM*YeEi0A^y}Cd?*!cIniyKLSpJXV zZ-o&UKw;E!lIm~|oZ>KeZdCd2@~>&8`BL6*Eisp3itzY24)~r#H~an|M8oT`2(#eY z<@N)Nuy=xt2RUz%-P7XWA4#MZDB^I}OLbvy5`*j7;qu*bQM&!!YK?DaK)bEr1yWTwJwf>f~G~y;4 z0wpBrD;=4T>y^~$tZ46WUIJ`y^b0}>R&p$xrCCD575P57;*%Hrih2JKr4G47bi^#H z(ow%oKeuKfbj*CX3B+al_5RxR{;~TFB=4zjLyN?)IV5Gov&lP{~uLJ+L|C}aP-1L*h}Lo z5r6;#TZBsb7OV=Wq6vFH>*(M{H%Zo1)L=6kd&wKe1f!)4T40(f+Pnk>BW_x)IC`ZG z_wE3Hhte{iOadOH@ef%DW1xoy(Jm%(gx#&C&dwf5je8(${tkYNOAL+?Q1dB_D-%G` zY^yG+EGjLU`r#z24RQoYw7X6HIP($jtD8-!^%2au3j=`RR}@JEL+4*P?icc&@!vf61ccC92;q2t6m(&9&!k^{1{Gbp)vd_`+%7?{;?MQhC?%u`t7x z9CvRoQ)3zHSjgeGxj-7htJdAWqt;HDV$uJL8B@AWfoQ<&_f|1SeIzq6*I3%;D+gen zhiJB}R}!&p^4^5Uv-^kd_N@N&`RgC+Wutl;JNgCyk!#>Xz%LV|M2c-WYn>WedLY4@ z=O!umiU)y>cH10{o7evCUvw?C`A z#V2?Cy;6P;X~XWf7`{JFHq!T?b(ys$wW?UAz@tCZd?JMXa(@Md0-@i3iwx(KTgOTn z6fg+-h~Yd>C^zDSQllVKNmi@1|BI%Ye3BlFKX(kfLd?Jg7VjYvIq*T-`eYKp0y9rSeGg*Dy<0)E)Noz>e0+NrJ1HP0Kb{lipulC2>?w zs0?}!x<{0_3BP=A`Gu%ZMVO}RdQ1A_F6RC;Nzj|&4AMJy)i&Oj=%t#MpP_oemi9nY zH@mTuScuHiOrn>{o>(m%3`8U82!;>Ge)U1|;`*QS2o`ysUh<8mKi zW_Q*(V6q&CtjiP7xbsxHs~_xX<~5QV^Mx*5EW?zc){ZF6obLVc?$fir&K;?!TTl8s zktohW2M9m(iw$u&qTLAI!h~4wJxc*DsDA3HMUg-30)y*ALJW4lL-O`Uw3 z&JJoj=;%8f!eV5CLhpRI;CLce-5o9g+x8#XfN=O#EF3uH-P!I}uQ1iZ6tr*b>#)Y+ zcB&R{DcRJ=204P_I}kgxUU7TgcZOeAb1pF)BXDJ0dwTiEbH9jm$MHl!(Xvy_{;X}kyoOg8s=T2x#ZYlOkZW+39-hpiaF*rwn-my{b7ow(A|$+ynkawkC8EODOHXu!c$U$Rr1j_403uOqwHf3QB&f ziNVp6C(_U;60rCEIC7**;;`tH_i7ykpp`a-mZNcHxY%>wi(;Hxuu}@TNxU}WpEv!t zx_ldrdjsE)@Wf=tS7}lelks3$lB@b1K{`Ek(a_uzb|iqzX9=InZ%)12ll~Rlo;j~2+fZo+6Pe50&@uPNug2}MQAC*C+|$m>$i_qhbG3qFG!E)*;T_9}+pu%f8`%{TCX1BOQB#NZBRd+) zaV~^ju(}ubSe012k}GnVfvA7&{KGQQh)n8wnTx*q>hOIdwXL;|dC&CvzB@GWUk#6 zbymj^+ZymmW5Ysp%+p_VR5If-c^BQsAIHvt&bB4L`jk#IGhQC{%2ju`6b zqr~gvv6$_e7A|Q=mI(vGb1@4j=+j=2&NE6edoy3J5ho;HSlE_7#*f1VhSXMbk7-t@ zMmuZFd0SaFzzx`AcfqY}MM2@{BH_{r*#mf^NdIy$ljJ7bL>c5cM{E^|1Hu2nO&ck4 z@M$3@%8!#o2KjJiIcGSbz*OX6;rjYiRI&e&sQ+s9U`b9xL`kKCjQ`h(pR_ut4xXLF zGQe##&vb&N7VV95VxsGx|Pq%4n@L^j3%L8SOUQ=^|ouR9&USTOnjX&c7*lWoqp$RIj^ z3=Gx?JAf>$jLEiVBqzsZ04r9Y8(yA~VmhBQdE;f7$x^xElP%6_F{S2#xeaG6nU3az znF0koKpBC_pU+A$%`OEBDNTM;$}!pUoEB4i8JPRw9NXl3WulXF&kIc6bWVy%whAh2 z%OqF}W+v6jfMjJ5twja~Hx!qJHi8xIJ|DpJxf#sVzu?X!+5=|Jy5PnrKKbE=02!19 z0*V1#lfX*zFFGZQHhO+qN}HCf-RVcCusJwr$(a#L2|go%7vu>)g{-U9DB!f7HNM(#r+f`H)TgMg5L z0B=VKfW0G-fNUKYWAs(8ubie%HryCQP3b!08`D1M?2!>;xZerEAc5q;m=W~Yn`Bqg zy4urYjg0|YD=~+2yb5S1f>}$7SxtWpE<-V36fa8{Y!+9#Gh1ZhniMiy95Zsx5-2}+ zHpMEJCEa09r}@4vKEI#8uLW*jo&3((Ks+L%AW_>)0LIu%%XQB->%NklOq0hL?Qd|r zf_8gYw{p1t>j8n8kb+@GEH{-eUH1M83m+Z!{)2r4o*IKrwl54|3NH>|CLghZyTjMx zN4u%hM5ix7fkHz>%^QyHKRO&)1r7b$+^UDMqC<=s(Ep3G=&arKxLGrLer^fcA!hWAr^{(eY`8z0;)?C zBj=fEBctQ8ggTa6gZq zL#k5x-AC|qsZm9I9K7&h!gC>BL05fYc-W=KPQ{H@e87OL#ii|;RNzL>?O+(x2w@}w zAO~k}DONI2c_KT#p2p%Z{$ko~)>D(z;+N4~)vMR$1)*xxJ2-o+R25GqC46=(qwY4% zWcpd`tKmZWenbBe%%&WbfmEK$&QB|TzHCC-62Hxa0X{kyp+APMsx`^j3}mHUbAB>Z zXGF-Sb_T;$$thJ?>pUdLr@zpex=g6g0BdCF?J}Eu778UxhFdgr941~eJTpp=AM4}> z-8LLRn}W^?i`{7tqiasbbl2>&Kk_4ulPY;zhTF6e58{R~ebv=GJh4~5;^GjFiz&DN z4vr^PliO;Nk|>abrT|fCVfe17vb!$dj=JDq`i^LP3>g#K>+^oj-8#(HtFlub0*WV! z5EH5efi2xTIDANQklw6p0t_gs?k#ao-0AHsdK-qL-3xqQ@mEtXjnM`_)IJ?0X-UT7 z5+WZUS~vbwc(C;d%gwK$;Q#~=7eiV&q^^Fz9$Bt1HAZ?Jtf{$D6_v@lcDIiSohCKd z+1PCmJ|}`^PV#p)ZuxBatD;pm0YV7>HZF{p-&tQ(VP_?Cjx*z^4YPpJ8*rb>chVyQ zH8*w|efrW>UwXQmK^<*)^PSUzeHgnz2+7T$+as;vqTK;a~o+;>|U|BbB&FLA! zDaz+i0i)})I^To2jJ?W>ifkG4X$MM#+ggK}iw?$SI#3Zc-b0r_y;hiw0Hv%nldYps zj&0Sh>?zke?b9k4^0}o$ay6sX!Ko2yedyYox+*~=CzSS7BzBGtj`6jgb}1>5KS{W< z>C!kHJKP#pGf8t|(lT#L?9&y3U49H2sK!RfdCGG-v9rWU$$Ls?-dF(pCD3-`xE6jj z_6Y5AFkJ*R>7(%}%!i(U13EOz`8PFl2$#qJI2SG@S7W&-LrxSV%4-!<0mJ?Y;*1SWpD2MN7{{F zL0cj&hnE9a1A?@p3m_`K9o2%>jIW#7QmTDlC?`RD-Z?Ki9+ODpEk4Ybu@`YbLB*C> zLdToYphHNm$2{lt4*>i*H%falqD>}DD_nuso91k`2KC*X_q@%YJv%-3 zmyHY5F-0l%7%n?H+bXh2o?D~6gYozxEuHA- zLQTw(yOq7L{j5fRoqbJ@)1h3p#l@$?$A@>LL!evfb5m!5BZP^ST&I|_zD8Y}Kwo#K zNmpc3V!v1hN6*>!!c~S^)}^lR9TQH2fn;1%n&&Hs7r?Knk%zdKQV`ov*_zPuDfZNq zEOWcHrtONzP^iW_weU9f0o2qcv~fKg8OU#R8-<-VkS6bL>R8Vv>G4a|`i(kKY`2`T zlKiVv+V041E|I~@-x4Q#{~>jYg)^yK+e6B>yh~Jk0mtl#495^Z^`o8rj-+)?ZrRDf!(*ZRK;)+Ir62#b#>xhNbmWYLvdKq_>0wSGJ_87xz1{Os$6g5 z;{tSLBEA2cD053JyrxC7!@ z`QPfj-9`+3!?RZsg7wzD$=#GD^^JUAtCs3mg5ypf8HzY>kJhJJOtFZG;#O(vjmKm9 zUVAtUehm{iFIsyM&_U!nlmW=BQHUos5I_a)} z1|3G+kp}-b#%pHhv_n*xtzB>EdCQC)bdv<=Dzg1WTPQMC6GeAse*Lzr!zQ&8AK=`D zZ^aaf)OwimQoZGJMuvW)q1}4YvU!?z`96uEfvOtTIfbdXOCu~fxo@M+pMZl)1pp?g zPharFJ4K;)jsbx3n~R`yquaKOWvbQNbLom$;<3`Cdkc-FKW``#+FseI4-a*9`K7vL zaCxnHP{5ONpox0}zEh>nz6a|c0LT&=^ABJ%yA;w<)^yL(wl4bO-TC7kbhSF4Hk^?& zhY)Uq=7!llHeFoFiECm{+Eu~a@Jx?0wOkQA7Pl7sTYNq5o9XpcxKxh!_ zxNf#|SzW!ZhXo_~K+ie+yreD=)qb&-HC#<3ejgPc+G_5yiC`ZS*2-Y|4wz(cpXSi2 z>UL*nKG)k+?Zj-IUG6%;X=?QYUEW`z_sG!%KJDnv1Ur(_3tdf*B&T#J6)*(Pgd1+_ z10~+?cl|35^1pe>`ZMRq`sq7(oeHYiqW+%LH<#w$bx^L7Au#pk)jiP~7ET%tt}bz% zy!}E^=o7$yj6V?U00_Cb00Le*a&HC3@*Yfy-dzHs5h zgy@v?7++k4u`OLet$ShEb9}cZUCG+ZWw)^Y*iK~XgqA_Q*))b?0Eal0YY0or=&tKN zJ{7r`)b`e2s<8RWASgaw$n~jUD#>NTowtNR4tzb4&j)_N>dL2{LW05odJ*~5>v#T~ zIJHvngA}|rvYnJ+#{Of)udU(S?T_|MAs@{8XWRK{l40i_a+Q`nF?I+E3?fPjqIWNh z**_Pvfh|uGTWkxj03L8d=-o|41Dywc1ho(!qQPyHo@>abQ7ji?UjQc5rgo+G>vTaJ zHzN}v;+6ARi5KtKATKZb#NL&ai8ie{R3y%?yfhc68+rmYiN8KKC>s2*nodXbL>=u1 zBu{E`;dDwa-=8}8xPPIM%w4#Bi{2KwGluu1rC!qTiIAM}0kw_;%F&Gifr=tQ`}C6D zK?%a-W6S%V?mjQ#n1$rnUJz8Zi5!$VO3C$-parO2N_&tahx;(;+oeV&3B0%5BfTt| z9itlKp6U+k%G!$&A&*u5u%Zu4N#AKt3I(JwWWkD4FU zK0juvM&tIq0FYPw+ZmZYL4jW`AK*SL$ID6$RB#(=63>Fg`r~G4-hjwFO_ze5L3l3b8v z4+oIyuV8|SQgV&g5_6S38&tIRNsPhjJp*!$>1U`%5AvaXbji`9F0Sf5&B}hqtl)IU zmRDNT`Gr~v$o&=^7-~rUgvTKV;924L3+gOvTs)FE9%%B^0EH>2S`sm(6BNn{M?@mB+UiZu zTi6Zcj4oreI!&8pO^MNAZFo}DZ{XT45xAzDMLc^9 z)^BP4F0p;ZUhjMDKELiP?|wax3jN@YG&=LdFGlo5#ad#n-jCu19C#`YM#qxN+TM5R zcF)CPEq_qB-zDNQR_t4FXyaOLs%TC|#u`dzmoVC-*^PF^63F^O*%PGJ=Q-jNXtZ73 zBz5cZ^=!cqxfA@r<*nJX1wF4l8CuM43za}Hn!nLNFhVEd=b@$I_F z5;nSRa37xFP2o!gWW)MyX5*opPWU(q)NL7WxZ0bt?`Oga|Syz zs>gRv!*4d=<7SMP#)3_^3H02lRIV?z?!2=vL5DCcsHrz@+kUcQzSO`QCdkS)A-CZ z2ZbtqM$D@^nia$Ws#GNuS@F}acyN-&hF~^b(2X`0a5Qc8mUXj|y+$i1t?*jl@k=Vd z1LJN;X?eZU$$6DbHtS*6VEx}tshK9>_!}ZnLivsW93QTgd+&sbvnIv%#@MR}_yZqWsY{Mku|&zA0=ZjA=Is) zyH2I|`bw0nVn~K>&p|J6yW>s9Qm%^DqLXKlb;7hsQH$vMF!eRwJE zC$G$nc{&(yCvq4d(klCm=tHmEuf?jHaW5+pla9x6kC{|{6;<6z6e-cUbuNZfH?&#- zCjW}k+564B6;%78dI;j<58f1$Rd?wBcD1c19HXr~)~zWmn}ux7k75q5n>G$Gx*vV5 zb`*oPF(+moGl1uPQ=i@IP-;e)aoIs2o4keo#g=5Fw)@h*iTt}$P}tu28Oqv6NL>)O zVweZfc`FVPUziK=0466b0XJu;w15Z(kdKE_lT?Vknmb}eEx}a}i+Tz=^zYc2#kVD` z5B@XdV6ET6H9uea)4JfEGrCc%YkFAima@a~pe&&r+-F02uz`AyY08Z_4aooD@)VHqvM-8W5(KIYwCrVoiTn-lpiRMz%Upa zyR>?~0;umEaq+j{YJ0o|ERE$2S~NB;j$Ll)V}oEh#1I{#SfPx{XHdsy1Cb z?7Iw@L~yB2YN|F$ltis^!N~bCK&MelC!0$b;ly_d9hY_6!UHP~1iKp^(^PziDmq*gxPG&JIDp`B(zhcpC2Cg+aBs z(`FeVo}2`z$*z6dU_yzuH~d&2*SpRAJ-?lp?gQ$0*_%NW0Cg6op)9BuKo)29;`2zp z9D_0KVw+<-|Bm(|I<^b?{W@=>@)>c1Xx;le@M_KIa~pOPxc?f0+=w#XbaQr&wzL2U z{7LUi3lLe|Gr&jpM7lkA=Z{sZi*h9U`6(UDM5l<6J$`LU+Hvb@-IL3@oi%%)e^D=g zppy)hg|sjKNu(?X296HW7*A9Sir5-qd{F=k0z!-ZFMCKP1!;oKfPS#9a1t1vKZBSFZj!t#8OsT7h27Q)?VasB_k8+YzxRv+zr9{qKr)9gG5DNYBd0wh^bKiKQ)##h3#5ah zZd@U1Zw{0FyJY_wRv!R3+D7AiK0T|0R?ExcwJ|)q`MZ>c@opp`oK#h=0(PrRsdh-c zdNdfFfRmdVTXDarJ%#)EK0Q;xyY+@)yQKPkG^$44)#*odAdo7w>DssA!qB^R9y+GYp}AC5#XGVGw^t<;Kd|=I+YF8)Jaf?*4Z7 zHbI!rGlJXG6Epz4Ble8y!C77@I`qBToSkKZRC&dcQZ*%~F7!cr0~s14zV#P;lZS_U zlhvzwJM}vhA0K4H+)-m5g!u4gVMJN8n6Zh$XM8~IG=6?lWR3N}smy2`_V|xa>8W_x z3={#*BC0~yYf!%xZFY*fo=N%GP$}S>^b~Zi{Q2RbBrBk6a);2_W80fuq|n#p3zoi| zPu;qK!9XcC(I|PeKH%JSr;rL_f*`sKX9p(+ho6B+DTBYMKvGr|JgLY=_e$jeGwxzM zsXvaR-CNRh-Z>K|?ji!k=28$ZELxV-@&Fu1CP?lc=1r-To~(z7jy6nWlO4y4`nV0l z;)7p&!xbRudKzw+K4B(@#q(5LZB5S)mg>RV1zCRS$fn2_Wp;d8rv5})OYOEER#fRs zLQonly}=sMy8`#!XHS3j6sv|}wvk2aXHLEg1zLG-DP{Jg2&w5l#En}!C008dcSNd{ zsgINF4q+YCrODkFY!U+X&ik%JMgOU;X>#ylCJ)ei%~rs{(&$*gU^6FIXD(&3u*lw#a34spLCdu?9$zVb;z_&Bmg*f_M?jTPDG6~sN^X)Teq7tt}C0^K7$Rj!OnF|J#mc?Nlt#H~?_7!U|sHZ7V zDyWm)a3_a-ZM#S(*i{&5(N)SLBuMkZX%*C?h9k8LB5>=I6f+Nd7IxWQ7g80q=K*aA z0!g;u81?dKSTcToQZ^-&DNz`pd>aqq15Ki2klQF$q`{;t0?D|gR$@}q=3^RMLo+D6 z8SIDo(3x8(0v5rxtHrjNmc=&L31*T*3q!K?va;|trp@SB@S9v-W((~TjlNBi`crdH zX(V_Qe+q(2D#10RsU)e3H!6$lOaax}r4f$>ntQBw&UOmaCRmxuwp-!iags3!%Iq$L zUkZ_Bi{b(`W?oO!Owsz8>6F{{NDA*m$*bfs4$9(%l$_x)U9my-gBfk$t#qcqE~3^2 zm=gxdMDIp>r1~^3S7sNppw+xz9X3_fmAOiX44ejjOwag8$Hwz~22v-~a)55e`vn$( zc|p z1eMOp%3C~=d*@#4k@$>N(F~7XK0M;Z)tWkwpzg12>>kr0QZTfWou0(KjeN_tcKy=K zwd>|B7G9s#a~C^eCk4Li!2kmxDzn-WW`h?2C97pmy#UiS&AA6L!`FS9fiu1wD?`8j zl%Mq{)+yIPkVq-7ejZ$E6qKX6w8wiPR(%8T4L`M%?sj-sn8yEFG_qF_8X$)0E?~!< zxl+rNc-B=r8k#)dZrYwm$==gh<~cODaC0v3MpXx3a0^Y_kHmr z4S2Xh520QsTtk@z=V04rvJ!U}?z8Jt64bOjdZrb}6n|dXrsu$H3CJZ{G@M}?Pw05s z)HFhlBp%DW4m5THCyN$g^Z@2lb-RQkw@rkFy_hG7d<;#+U&JV$M~A$Jo*`1qh+cD^ z5U%x5)qY`@;0+^L&VWY@_@hTdw-cNtznQs~rkQ(vS-NbR?$Xyk0z%j86Ixz3X5^$S zYMf!A?LXZ-i0?Y}L@=zJ*S1UevP(Cyfmb;dM&Z9&uxfIND02e>#L{X_MR{_8=M59WT6_SQ==*ROY$AHDtUwME-@*vm7s&?~1az|A`Ua*1uYHYXHONeQ@#{#nCXjn?*7#ZZ~p)4sKAPGJG^ z8H|9!8(<61>W;`9QL}#~koIWEA?AUXBk?9nIo)`RKk#{{ae4m6E~Y)SOLC5DJ(=g{ zG>Ass_;}`=v^Ku9y}T@~;K2pS%eJ=IZGvl7JG3@8SXdKdm3f444*NE9)jaF%Iqfr> z@D8ADn(JQ}cX(oQ#sKza?)qFBjpj^0P`zk~PETrs*rrKWrbXJN&%``9q#5=EsW_Qz z{52W)YtbN!hew^Ckg_APX%S;Pe1GFRpoQ`VN?A{ANh5G0$|p&)b+*wxt7!06PokXI z-{YfvMNY@{&UOkE%oYEZ|C4>$L`@Q7Ay50A4zF!vgg3rDV8Hn7!1#Pe10QdLLm_X> zEEMNBv9J2q6{X7-^DR$b$P%kuzG4tpR!JK%Mp?2d;~*n;11ABOOtH3vaC0M6XLfIZ|#&JeJe2KEM>5pk}X zUn3)LU=fr(y>#*e2X^-1z6xaaIDViM!WwrL=H`rF%UiaHM{M8gN5=FanEr&tkBURr z*Q)pu)r<Q3voG!Ivv$RW6v8KWyf!OP zFQ7Yl&UOJSH=aUHNhg#x6`)<|t<=8x0}iY<|Eh0WK$>qPV4aYZD{mb3qdvRD1Q`=b zWK9@^9kyzm0a5`iE}gl9{wtqbGjzL&&@pYRexVPAwH01;UfRoV&O% zBkW8{bR5w#aa9ioilrJmE{IK=1W1!k+8DHR1)!oz&in`x%m>zrYdJ~14Wzs9HYzNNg~nyo)(r=5@Jdm_Y%{qhEvIOLp|Q85>FYH;mca-6M8=abnvCc{Tl zQh5})4meEFTqLBPxYgEWfI*TbbzCt|MZQj~05bVQf;*P&iuI;^7`4cT(k2f(xKw%v z1<7{;+Kdk5j%(ZLg}& zv#4af?lFrM_3l%^W-Ux|+JGf-Q&y)FFqt5L;rF=hJvtNoVkvW`ZKG6%0IC+jYZ!pg zj7V25VXt&TaUjzu)_R*&`}}xHkV4oZ^??GVs?6{QG0a}0JHuv1BHkX)fy+re&V+bW z7`STdHq1_Eb8cq9oKX@bQ$p!hS&x+0Fcf*=&Sp!F3Ths_U~QWjVnO;F<$-SvFgJ+j z#&G#(C>SG_su~{IVWslWQoWJhCx|NuACgz#YHU1PLa^`3^x|V1d!rFXLA?!S>RmlLxRiSGQV^M zi=6d{DYlpTbIvk(Ir}ou!j`f^OvNz~PENy33Iro}UJzfgc!aadEas}3RLp}m5cBvt zpr44TH&>rEcR0FpJD?++6o8nAA-K)?s=^;qH#pD8+$wghgS7LqXZIonn6?L4>bd>> zc)d^0FleoM`0|)2r!IBsVTUWy;hwS$taIHZSgg{2?vz&nQZ^|=S980Iu1hFotQ4Rv z@|rlxEb7uXRVaq6tn3fVncqTC)xW6U+bZrBm@vwPOx~$^{PJijl40PpaIkQx%$^|_ zsx0?fW>qLYIrU23DK)ADunYgD{fzdnSx|dul3iU8Dsw~dQ!EZULrH$RX*Twi#VDZ% zjhS71q`fM+K;NmpbN}#4u00We1&9dtl-(it7ETx);MEHd8I`xg1+S%Qe8B=RXwB`y ztsM>2v_eQF_G`<#QhQ^|W^&>&Dv3pB>3o3`T=xvLyA!SDzI?lYz@-C2HfrC}iQPS? z3SX>iwO7X;sSF>D9wqiRqa&zOhfC1GC@yld6qIGQ^^CK`d;1X4^$<~OLm5*;YW!8S zeC;jR{EsGfGRy_j&ooQZ#uz!!N<@wlkDYi7BzMxNum?f=g@muUpsB7e+a>J5kJV z_D`|fnfOfjY+QVF!D@0%R68(9gA?)QFXh%2Ii%(bZ+df^dBXKNvF^}i0|V4XI9E2@ zh7Jz67{ZJbUB_9t$21rErZ=%Vx857qc+F%{U3Xi2+pr>lH3AL{_9!~Rep($pj18r@ zoCTZlkY%ba;W_)^d^~2ul)32T5xVknfi`vL0(^c+1wt~ptm#=3cA~3tXx888VLsJn zgX$~lc$npNh>f%#$wZj!f(3UZ{_6Xq>i+upfHbH&4W!a(-o>RiieDA{(oU7W!MVz> zGG2H=v!|tipg+Q$C~^{ceJ3=RGoy6Ql6{N@J|`Y-Qis%{{F5p4Dz7#>Wa>F8uhc@7 zH_z%{JpuKe_Ep8yp}OvH&~mG;`8oThj7vCNc4DZ0Ldq{Z$+;(BXJrIx!~0X$4N81w zw7q>yk?Kq`_jk~678U%-M*9NP)I&t5a9;>YG38x?Inlva%1T+n zBKFG{WF0BUSs{PW=~-Y($qu3w@qTyfP9<8)o5t=jVX$Oo#6u@}7Vw5{C>{~rUBG@z z9}(T-(S8T-4r$k_K~{WVeybm~z7j0u)ilS+_MYU@eEdw_#c=xw+LhDumX9g9W7;?S zN;b9vj96P$;i+^fOe>DBiyeeL4>PO5~lWSX=pOD>jVaIj50=>m2k3onP09ZSDK6k8NJftSQ)B)N~|=%0I6AZAOm zl@OG=g58zZputK-IOO89o+D@#{Fs{DqQCqCELqG-S7tZ4{(VeSlFPO@*GHn{Y^cZb zAWyh8(^L=$20|0KjPBdlC_BGV>6`EM!9O~Dni9+b0w?>sF2T7-fcgtq3n+vp{eN0C zEEMLb*U?t!X#jKkeM?x15qk^_K)l2VGB%)}T$ zv@Z4x|L4%Nfw2lm_Ia~5f2bFY1P&(We3~ok1#SjpFY{TK zqx`&}x%U-!LaMBc%g*}XL;qE}0%MyN7)ir%^matzqK@XFjkaoIe;!Su#rLYE zlT!pXv_{yeQ~jT>1$^0+YkPG7ywR;f8`kxh6!pG@Hf)YotaO9Y#j@Oq zaO%_`HwXh6d98iAu$mH49=*eEWyFmqG%54I^`oMCu#iey9^JlZ$~<8HhF^EA1}GH@rW zxfpDkU)Bq$r<3AOnPWpwnbOH-y%G9^5B?!Nk%S4y&=Au7KP`qq6ttsC@`^uPaN|-V zns@Sk1;E<)JASF4j14%F`(vI4oIqy~x z`sdz(XO(-4)wQOmcHU4LkR)d{zj{Wg3^Qlif%Eie?7*`v+A7v~Hg}KMf!26D2mc1S zJR`ozh zP88nTz--GsCm1CGX3`#cJBTDjhm4oO9*B$5ggdQ;2m*BAXhe1gV41ANPf6Z5r#eve zk^U{(6WKRJKP<-y&YQspX;@|@6Y;ziRm9HY7Igs;D`sDI_weIpj1=$Ok_JvCiwhLc z4!T&=Ce(6sBilCHhq@D(ikW=$0Dc`1)_F?eMu@q;puXOKazajQNN+jGMNB+w`(A<| z3D-JT1OeH&z@5WW4F@{uS(69zi+`5{n(UlVh+sRjWjJ*sLmp|4<{es*&ksIp6p(sj zxqZ=L%8MzVYKL}>YKNXYE%owgza&h!oD|QvxrP0-Y%{(iS>~>cJCryeN`i>^ zVLI}ce)ui`g`Rh23aN;6#aej_>iMDT&sUx-vWwP4 z8um~41d+H~i~lrDpSh=?d|~-=j7eLphqBTtvZn_)#Sc$Lyiv{j^yibNQiBi>ldAWp zb^fY~={UPNd%j7b8?ZpHl6##;vOVa|ihj<@89aUMao8Z*yXNuUktzKkZ2Ob{O-6if z|0hyROnpmJrOh>dMrV>i%*`?L+NQ$p9=#^$0`_8``=vJDJsvmvqXqXBp@#1ok(U5Q z5vKsa!K|sa{|feiK&AnMi?x&w=( z0Eswm?4IQh3Y0yT8p}qf$)}HT{d?WnRvZohX@OMSkKwphbgGqXzz5}ImAJ=ASpHgU zh(Cau8-y3BeE|C-x@H&0;nY5V-ThcHxADRv1ZAI}5+R*e@_RF7QZ1Bf|3e7H{ z=Q+?Sli|v{P#1Ytvghp757J6GPOAA51|$VdTVQzbs~_gqK2~MvL@4Yvx#AfnvtfZ6 z{r;1T@CR|?5r69{LA!qmVo;R(_L~$Q@PMk_9c}ChLFt1*bIC#ek!nMNj+Kx3+W^M0 zTdp@??GS}9aZW({C*;((oZcS`oSzJZM(f8D36)<Wsolk3KZ9`JMhij<-9q` z1@JuElT4zs5x2-%)#|NPX^2!#S%q2h9;QkD$%O?R$VMQ~8bnxCK)|~flA+%q0pqA` zRL_gtP%q^woqLYnhVCGXuB4=cCZ(ze`L?UNMWrJVPxE!HKn^#Z| zcxxVfE$h3c%|$QWIDCI0srQ}R zp!B#nlWk;5B<&KagIxEog_jB1&cxGgz~wB67*PQ?Pe=GWR?|14#doCYaj){sCqlv3 zFGy(O43v6sTY@?X`an~n4WCVWpV21}%HfAu55ehh?Y+|8fDSTKvSZI1fcgYoUH)sB z97?W&bH_CEANhQM0*m_Tt}3Srae;kFdN;(-x9oQUYyvL7g=P&o<*$VbwtkYB;cpm& zQO2k2t%Kfv;hBRCb<~^nqp){dsxd#DYTsDRynCUCUPresD5Zp%@A+LdOGBg!>5ALI zsj@JEFnt;xi6|klaU|IpA;-UA+1cA$N~4m0k0JcmA`G_E4`+^n+g?^Fe1RAtZ40Tfsj?@BKClKu7J50sb zrDaVpUe-_)4#*j7HR3`>&LYF_e)n1KeEwe;LLqSii+M-ZZ<$;u|)BY5STzwiG zFsLmfpvk*cwvmy~79B>G?sp^{k&4lcKD$v;k}B;!Q0y($j8R>MiBsZTr30a6r-M(A z{Z^w{kq*v-E(p^CwoziL8ytnUU(0J2y1se=Y?*ic_YS3GUBHA>fW>y~oa3g9BIra_ zV6|=0jIE_v7XLGp#j3?Y4MVRW<6S@qaHKiP=uoZAsIcIP2kl;au>LvZ7FNzqAzqI_ z7`+BRa*h&%NAO$S!78073wS!?L6kLke!JhkQk~&8=q8ua)|>1t;y{Xii(tW3nd~;~ z(eQqVcfVe`IY!f8^Mo+A-kz|l1?NF}fT=QZp6d0pn6L2a=m20aV5r69Rq;=L_|zyl zO<(qlBWJ)GfaMpsnRv@di7lzLk$lToVlic`J7k7)Erybisv@j1LT{u}PggLc^(1c1 z`gAKUt|JN20WBtpu{*)sU)#rk!)Xg2?-ForzT`5Nd5tsUHcUqrNv&M%5ujQ{~*$-$#S;Lv)WqEc|i%*^4kcbSREFI%@_HS^?OX6&#&BJfaP4pt(d}- zC-s@zEENy-UkWVC)9+!Pn>gqZCxPbcIeJBbZH1TP+~1#~U`UkZk9-5fC4JY`g#q_% zAkd&p2#P|B=T=@yyw@f*7EQ7nhUZL@e!cyThuKbjncFC3XblK2E2ao9tETK2c-U)S zt9Bru%|LLs$et4v(m4EnfZL)jS|A(jd|bi~v_>BDm1UP_Jm&KkmDjUcZj@^;0z4-% zfl0W@=K_j(Xl|Y8Z#HGedi!Ve;uN5hJib7?M*o zLarN4yR&PodaFPE7kNFxNkMDSC}?m)17SmAkvCV!4N}2TQg!0t7MRGzPSJBA&KRlI zjK=WK)DWrJFRoWFt`AQ4U}2B=I-Rn&26iWba+or%*(0Dbj(cQby_tnH|AgWwC&tP2 zu9*wI>`$nN2;jMoQw~6#@+%$Dh9jK;2GQ-a(Z#z57D1P{C85Sy`y_N&R(q`$Sx^uV za0sA7pbCiyx&WIm{hnz;%Ztu%WC~Mf@tY}ejI60Bxvl8p^AE@@;C>();F=y!9u5*s zEY0U+ru}3_;Mdbht<&xg_8WdMFeO&$Gm1cg?j!_tw>H~6$G!4Ezff~I9$IeG@MJnF z_}dn~BzQc7qp@F$GDhB`1x{+@yY5f}f+#r)@6^~xg0#8&B6=?khc64a8hJAoOgBkv zj-5cZ{fNFt?5Ws8=~@Rkz;0^NO~-||ncZbXK0|e2HT{5MFx!%b5cF)Sp$)=6um?Ms zuVcip-G_E2!~)LBemY_LNV-^z=dVtlerf)@4k&#rQh8%OZVa~e3GDm(S2;fT^ijCw zNiHHInv~UBkx8Gauykw7tEAd&!2^?UsGCv@0g8MxYIU!HJ1+Gm;El}4uKk^?VB%q` zoGacbiO|uce5*&1HKCsa4az!=8=NM+Q`W*1O%F1MrR!st#mF?5YpAZdf-H3V(U!$t zGVXZoDw<#w*daLh6bV%Xm0_5N6M1negZf*LYoY*&8L`H_AX|nniXMR|;#}*7>5sFy zjlwyx(gE-5F@697;7@)oj0`qK95ew{X6-T)GT+8)^w5m_`|WxVO)Uz42)Pp3ARBW# zPJ`x2I!fhJiwZQ|kqeMt@fWiTTr0|CcR|Llf($2=LZbNU6@Oxt(r<{w#$+s}nZPJi zovq>SI&nPaGP=Lx>bwds zwv*Zogg88&lSKeAJW7@+CKhu#$*mdAH2s@_G=YES`kj!8prh3D*o?lvEoxd z4*k%noqDS^&2dM3yV&D(#NVnd^xHJ)85ifl+7)Yx2Gx8U`Q?=yi^?#Yb5&x5$H3#Z z4mK}f;TZAq2LZ%ed}j#p4gCn&oy9?uUwa=j%Jp0j(}DpW0P-2P4Bv(-!`4>QpxQgu zWH~A@hFGng^Khp>!SFsZ8`mFpe{;aSVs3;10!AJ2#jRe44&7^+@*33qvMho|noli0dNVQhl!80VDXRuaG{@>|4aR-@o@ z9zknLDrUHO9`>Y04aj5`*yGgA&hPi&j!truQn(EQxKh`(sfo`L47>Ra{^R$<-ve2X z5R$}XkN^{Y@LXY9mD7*xvBajDsVowgAGdIPQg>7xj3iex9%U=Ta78aYK91u2zkN3% zSE9hNSg7Z+!TaMn@R`F@+8?0fK7mzxFfv>BJUOP(zNM$8hvX6I4!qlqH*Q4ZqFvHT zv-$;A$|*T))TIep_(%cO#y0ZEJom*iiNWwM*dar9O|T|2+HNxqKk_8f$OrJ((Z=3i zY^Gi==n3a|MZDzIXd05%v6@JMq%pEW4JvOU<=VriMvd6Xf5Bn8suWlg{>|~MvkZ!)RISsM2Y?#YRrKcz+#E>%`Lo|EGLefN;?d zx#F-8oHE{0+Tdim&SlW1L$!(lfH~;N)QnB|)C-e=z3GbEZ}JjqjcfUq-Onl@`djh< zQ$PnnA4aazWFy_&Mi<$r4g6akaTK~5jCM>-Iw98@%o*=c`KQF4c$g50q>FK>b70!j zkB%o4U3;I~>+Oydf!{3o*<>?%>pzcjNNSpUM13Y1QJ9du^OkLVbHBv;08%Vdqwz-Oul(i zi%HrSDkMBv_mmcsdkC1DcgmefJrc}3bIOI0d9vW?P$q%Y$-1eklY38VG3HO+aoUDy zUh3rCsm7D}uL{T@dV@e8AiIM>GXtnd64*CX0V$lk=!_K8qnyc&c`}o4opEHU$OAI9 z!7>qNrI>EyPkxxMG1=jYz~nVR?z+;+g^kLSU!OH(npFm79xIcY9DPoU$)F0%jj0lv zya&itsReTbYNdg)0@8?g^ZH7CdP zi%qt>EFc4~`GMPW%u)2~P68{`zi7qeKNZZ3ohk^@GkNPpDMp{k7cRQVz{^xt1_oOc z-TJeDTJ$F;Ub146o(p!uflJm*Mf1T-h07jH8x{eXN|Spo8!$#s-g`Ni$$0N%y{$@< zHTLoV14WC;^1$SrD``x;hbBKbXblWCEyf3vt*+`R0P~3#JZ}K41TNb~0)|H>cU;wC J>pB7w0|3S`;ava# diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 5462cb43..0c3e0c5e 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Sun Jun 11 22:47:00 CEST 2017 +#Sun Jul 09 21:06:24 CEST 2017 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-3.5-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.0.1-bin.zip diff --git a/gradlew b/gradlew index 4453ccea..cccdd3d5 100755 --- a/gradlew +++ b/gradlew @@ -33,11 +33,11 @@ DEFAULT_JVM_OPTS="" # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD="maximum" -warn ( ) { +warn () { echo "$*" } -die ( ) { +die () { echo echo "$*" echo @@ -155,7 +155,7 @@ if $cygwin ; then fi # Escape application args -save ( ) { +save () { for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done echo " " } diff --git a/terminal-emulator/build.gradle b/terminal-emulator/build.gradle index 759c5b8a..63ddeabe 100644 --- a/terminal-emulator/build.gradle +++ b/terminal-emulator/build.gradle @@ -18,7 +18,7 @@ ext { android { compileSdkVersion 25 - buildToolsVersion "25.0.3" + buildToolsVersion "26.0.0" defaultConfig { minSdkVersion 21 diff --git a/terminal-view/build.gradle b/terminal-view/build.gradle index be547fe1..5f2c3674 100644 --- a/terminal-view/build.gradle +++ b/terminal-view/build.gradle @@ -18,7 +18,7 @@ ext { android { compileSdkVersion 25 - buildToolsVersion "25.0.3" + buildToolsVersion "26.0.0" dependencies { compile 'com.android.support:support-annotations:25.3.1' From d7520642de8855b0c8201512e37d5a90dc5fd2c3 Mon Sep 17 00:00:00 2001 From: Fredrik Fornwall Date: Sat, 29 Jul 2017 03:05:48 +0200 Subject: [PATCH 24/28] Update gradle --- gradle/wrapper/gradle-wrapper.jar | Bin 54712 -> 54712 bytes gradle/wrapper/gradle-wrapper.properties | 4 ++-- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 57f11ccfb1aa979ebac9b64050e8123cfaa31150..84abcfb69d0ca4655ca5999b3c17cb95c6fd989f 100644 GIT binary patch delta 75 zcmdn7nt8`+<_YF39P!#l6Ro4!J{El}Vq};gwQ-xxVdkw8e Date: Sun, 13 Aug 2017 16:14:31 +0200 Subject: [PATCH 25/28] Start supporting the REP escape sequence --- .../main/java/com/termux/terminal/TerminalEmulator.java | 8 ++++++++ .../termux/terminal/ControlSequenceIntroducerTest.java | 8 ++++++++ 2 files changed, 16 insertions(+) diff --git a/terminal-emulator/src/main/java/com/termux/terminal/TerminalEmulator.java b/terminal-emulator/src/main/java/com/termux/terminal/TerminalEmulator.java index a993d834..10c7321d 100644 --- a/terminal-emulator/src/main/java/com/termux/terminal/TerminalEmulator.java +++ b/terminal-emulator/src/main/java/com/termux/terminal/TerminalEmulator.java @@ -223,6 +223,7 @@ public final class TerminalEmulator { private byte mUtf8ToFollow, mUtf8Index; private final byte[] mUtf8InputBuffer = new byte[4]; + private int mLastEmittedCodePoint = -1; public final TerminalColors mColors = new TerminalColors(); @@ -1509,6 +1510,11 @@ public final class TerminalEmulator { case '`': // Horizontal position absolute (HPA - http://www.vt100.net/docs/vt510-rm/HPA). setCursorColRespectingOriginMode(getArg0(1) - 1); break; + case 'b': // Repeat the preceding graphic character Ps times (REP). + if (mLastEmittedCodePoint == -1) break; + final int numRepeat = getArg0(1); + for (int i = 0; i < numRepeat; i++) emitCodePoint(mLastEmittedCodePoint); + break; case 'c': // Primary Device Attributes (http://www.vt100.net/docs/vt510-rm/DA1) if argument is missing or zero. // The important part that may still be used by some (tmux stores this value but does not currently use it) // is the first response parameter identifying the terminal service class, where we send 64 for "vt420". @@ -1574,6 +1580,7 @@ public final class TerminalEmulator { // Also require that top + 2 <= bottom. mTopMargin = Math.max(0, Math.min(getArg0(1) - 1, mRows - 2)); mBottomMargin = Math.max(mTopMargin + 2, Math.min(getArg1(mRows), mRows)); + // DECSTBM moves the cursor to column 1, line 1 of the page respecting origin mode. setCursorPosition(0, 0); } @@ -2091,6 +2098,7 @@ public final class TerminalEmulator { * @param codePoint The code point of the character to display */ private void emitCodePoint(int codePoint) { + mLastEmittedCodePoint = codePoint; if (mUseLineDrawingUsesG0 ? mUseLineDrawingG0 : mUseLineDrawingG1) { // http://www.vt100.net/docs/vt102-ug/table5-15.html. switch (codePoint) { diff --git a/terminal-emulator/src/test/java/com/termux/terminal/ControlSequenceIntroducerTest.java b/terminal-emulator/src/test/java/com/termux/terminal/ControlSequenceIntroducerTest.java index 626075f8..b48243e5 100644 --- a/terminal-emulator/src/test/java/com/termux/terminal/ControlSequenceIntroducerTest.java +++ b/terminal-emulator/src/test/java/com/termux/terminal/ControlSequenceIntroducerTest.java @@ -35,4 +35,12 @@ public class ControlSequenceIntroducerTest extends TerminalTestCase { withTerminalSized(3, 2).enterString("\033[0;38;2;255;255;255;48;2;0;0;0;1;2;3;4;5;7;8;9mabc").assertLinesAre("abc", " "); } + /** CSI Ps b Repeat the preceding graphic character Ps times (REP). */ + public void testRepeat() { + withTerminalSized(3, 2).enterString("a\033[b").assertLinesAre("aa ", " "); + withTerminalSized(3, 2).enterString("a\033[2b").assertLinesAre("aaa", " "); + // When no char has been output we ignore REP: + withTerminalSized(3, 2).enterString("\033[b").assertLinesAre(" ", " "); + } + } From 68912139f6a8c8e2527b85d676b83bea5617ccac Mon Sep 17 00:00:00 2001 From: Fredrik Fornwall Date: Wed, 23 Aug 2017 23:29:59 +0200 Subject: [PATCH 26/28] Additional REP test --- .../com/termux/terminal/ControlSequenceIntroducerTest.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/terminal-emulator/src/test/java/com/termux/terminal/ControlSequenceIntroducerTest.java b/terminal-emulator/src/test/java/com/termux/terminal/ControlSequenceIntroducerTest.java index b48243e5..88b8e026 100644 --- a/terminal-emulator/src/test/java/com/termux/terminal/ControlSequenceIntroducerTest.java +++ b/terminal-emulator/src/test/java/com/termux/terminal/ControlSequenceIntroducerTest.java @@ -41,6 +41,9 @@ public class ControlSequenceIntroducerTest extends TerminalTestCase { withTerminalSized(3, 2).enterString("a\033[2b").assertLinesAre("aaa", " "); // When no char has been output we ignore REP: withTerminalSized(3, 2).enterString("\033[b").assertLinesAre(" ", " "); + // This shows that REP outputs the last emitted code point and not the one relative to the + // current cursor position: + withTerminalSized(5, 2).enterString("abcde\033[2G\033[2b\n").assertLinesAre("aeede", " "); } } From 42e3163e927c99089fcd770fd9db33dcfcda8eb2 Mon Sep 17 00:00:00 2001 From: Fredrik Fornwall Date: Thu, 24 Aug 2017 20:49:43 +0200 Subject: [PATCH 27/28] Update gradle to 4.1 --- gradle/wrapper/gradle-wrapper.jar | Bin 54712 -> 54708 bytes gradle/wrapper/gradle-wrapper.properties | 3 +-- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 84abcfb69d0ca4655ca5999b3c17cb95c6fd989f..7a3265ee94c0ab25cf079ac8ccdf87f41d455d42 100644 GIT binary patch delta 673 zcmYL{T}YEr9LC@CS2iPM?-E7dDatC-SEkOe=9HWi7A|cvi!7}mR_kk$kr%=)BqA>g zwTIC+k+YNsInN&s|1%lPmm+E8Eh%)}BF_bAu%@Q_3^@dEz<l3g#bM?1)#;Dy%C z*08Rfp_Kwr&n_$#^@k<$_J3tb8p5lYQ&ern_>2i&vk|sgm5ME*;j$Po#HGGU$o4ut zVzaems!Pipl+CHkkB+&cBs+!K)|La8vj8h|Dk*JgD;Jh|m0CK5^vxfpvMzy<`9q9g zTsTe!4=kSDxVNA(A0`(X>6r&_J$qqD%BYVhRPN=n5NEx+gf+&k=v55*itr`UOy_+Z zD@AfLs!*sG-+Ig8NXU4}<)fRpKDZOVqE@=yFHq}OaQd@KrU4Wmd>#aSeGwT?5UXcak+u^JQr9RKSG`{j%M7A*Dx9H<8Jl?#zYtUjVpqWOon)o1DZFX^1&JE}ZvX%Q delta 808 zcmYk4T}YEr7{}l9D05p=w`w}yW-CS5-l3&oSuWH*XlRO{)r`n4G(##&$O}V4x{ylT z@=vWyk-X?e2!shjfyO?x%{4z}H+5Z-H%Sp)6m)jf+`0PypWpL5=bYyp-+0Q@c#7wU zM%`>Lsgfk={Nu_-^=i&~=XxiTJo1Fk;ZL13{jJ7N|53xjA(HBA($sf7O>;(`ybF#% z^>!)Tfd=(3k9Tyo9Y96E3{^0L&A=EeV{5pr%0f#}p}h<&Y(y=SG0m+@m9T@MW8_HN zP#RneouCoThEwBB=pe0SZ#nI3C4Dj_9JD$6U<>Q<)S}n%T{qW5i-1@1RG7Bx#^+gu zit{!@*?1P!!(N!2Zz&Y8t}qjQyqU2m8ET3IEGyc8w$fynTPon$(sWVz$e9f9IR$*} z)S=_OLOW}?%|l&{NgTmitKYG8U`a9$h8xJ)C<@xcXUN(lrEm5#4Tuy$`tGnwm*89Ufkg_A77)z z)Yrx3aa{PIP;NJuRy22~V~Sftk4UQP*&}XM5|im%uLuqH7U0H`9-(JQ3Os}pTghmwc&`?-MSLs@(Sg_edz z+sqLI@28M$R9N$}liJ46J7&eeGN0%qGU9xqlPb~h*W2WYenWb^iM~%mJLAB>ydJ)| o%mRqTuaeh~3IBe$R&V!Z diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 1315ce35..f16d2666 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,5 @@ -#Sat Jul 29 03:05:42 CEST 2017 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.0.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-bin.zip From 9c42fdb3d6cad2443a42c185013709d4a6e0f450 Mon Sep 17 00:00:00 2001 From: Auxilus Date: Tue, 5 Sep 2017 10:43:30 +0530 Subject: [PATCH 28/28] Added wiki link --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 28691c10..45666bfc 100644 --- a/README.md +++ b/README.md @@ -7,6 +7,7 @@ Termux app * [Termux on Google Play Store](https://play.google.com/store/apps/details?id=com.termux) * [Termux on F-Droid](https://f-droid.org/repository/browse/?fdid=com.termux) +* [Termux Wiki](https://wiki.termux.com/wiki/) * [Termux Help](http://termux.com/help/) * [Termux Google+ community](http://termux.com/community/)