* Decompile and recreate Soul Browser v1.4.85 with APK CI builds Co-authored-by: KaKi87 <KaKi87@pm.me> * Fix CI build: include bundled google.jks and remove PR trigger The apktool build failed in CI because app/unknown/.../google.jks was excluded by the *.jks gitignore rule. Whitelist app-bundled JKS files and commit the missing resource. Also remove the redundant pull_request workflow trigger. Co-authored-by: KaKi87 <KaKi87@pm.me> * Change package ID to com.github.kaki87.soulbrowser Rename the application ID so the rebuilt APK can be installed alongside the original Soul Browser from Google Play. - Update AndroidManifest package, permissions, providers, and actions - Update R class references in smali (com/github/kaki87/soulbrowser/R) - Update shortcuts.xml targetPackage - Rename app label to "Soul Rebuild" for easy identification Co-authored-by: KaKi87 <KaKi87@pm.me> * Fix install compatibility: remove split APK metadata and bundle native libs The rebuilt APK still declared requiredSplitTypes and Play Store split metadata, causing Android to reject standalone installs as incompatible. - Remove requiredSplitTypes and split-related manifest meta-data - Merge native libs from all ABI splits with uncompressed storage - Page-align before signing for extractNativeLibs=false - Add .so to apktool doNotCompress list Co-authored-by: KaKi87 <KaKi87@pm.me> * Fix install failure: use apksigner v2/v3 and bundle arm64 native libs Target SDK 36 requires APK Signature Scheme v2+, but jarsigner only produces v1 signatures, causing Android to reject the install. - Sign with apksigner (v1+v2+v3) instead of jarsigner - Add arm64-v8a native libraries from universal Soul Browser 1.4.79 - Set extractNativeLibs=true for reliable sideload installs - Commit stable debug keystore for consistent signatures across builds Co-authored-by: KaKi87 <KaKi87@pm.me> * Add committed debug keystore for consistent APK signatures Co-authored-by: KaKi87 <KaKi87@pm.me> * Fix startup crash: use original classes2.dex desugar libraries Apktool recompiles smali_classes2 into a broken classes2.dex, causing ClassNotFoundException for j$.com.android.tools.r8.a at ML Kit init. Inject the original classes2.dex (Java 8+ desugar libs) after apktool build instead of using the recompiled version. Co-authored-by: KaKi87 <KaKi87@pm.me> * Fix missing drawable resources from density split APKs The base APK is an app bundle module; density-specific drawables like seek_thumb_nor_b live in config.xhdpi.apk and were missing after rebuild, causing Resources$NotFoundException at runtime. - Merge non-9-patch resources from split APKs before apktool build - Sync public.xml IDs from R smali only when backing files exist - Add 713 density-specific resource IDs to public.xml Co-authored-by: KaKi87 <KaKi87@pm.me> --------- Co-authored-by: Cursor Agent <cursoragent@cursor.com>
1341 lines
41 KiB
Java
1341 lines
41 KiB
Java
package com.google.gson.stream;
|
|
|
|
import android.support.v4.media.a;
|
|
import com.google.gson.JsonPrimitive;
|
|
import com.google.gson.Strictness;
|
|
import com.google.gson.internal.JsonReaderInternalAccess;
|
|
import com.google.gson.internal.bind.JsonTreeReader;
|
|
import j$.util.Objects;
|
|
import java.io.Closeable;
|
|
import java.io.EOFException;
|
|
import java.io.IOException;
|
|
import java.io.Reader;
|
|
import java.util.Arrays;
|
|
import java.util.Iterator;
|
|
import java.util.Map;
|
|
import kotlin.text.Typography;
|
|
|
|
/* loaded from: classes3.dex */
|
|
public class JsonReader implements Closeable {
|
|
|
|
/* renamed from: c, reason: collision with root package name */
|
|
public final Reader f12756c;
|
|
public long m;
|
|
public int n;
|
|
public String o;
|
|
public int[] p;
|
|
public String[] r;
|
|
public int[] s;
|
|
public Strictness f = Strictness.f;
|
|
public final char[] g = new char[1024];
|
|
public int h = 0;
|
|
public int i = 0;
|
|
public int j = 0;
|
|
public int k = 0;
|
|
public int l = 0;
|
|
public int q = 1;
|
|
|
|
/* renamed from: com.google.gson.stream.JsonReader$1, reason: invalid class name */
|
|
/* loaded from: classes3.dex */
|
|
public class AnonymousClass1 extends JsonReaderInternalAccess {
|
|
@Override // com.google.gson.internal.JsonReaderInternalAccess
|
|
public final void a(JsonReader jsonReader) {
|
|
if (jsonReader instanceof JsonTreeReader) {
|
|
JsonTreeReader jsonTreeReader = (JsonTreeReader) jsonReader;
|
|
jsonTreeReader.n0(JsonToken.i);
|
|
Map.Entry entry = (Map.Entry) ((Iterator) jsonTreeReader.A0()).next();
|
|
jsonTreeReader.C0(entry.getValue());
|
|
jsonTreeReader.C0(new JsonPrimitive((String) entry.getKey()));
|
|
return;
|
|
}
|
|
int i = jsonReader.l;
|
|
if (i == 0) {
|
|
i = jsonReader.e();
|
|
}
|
|
if (i == 13) {
|
|
jsonReader.l = 9;
|
|
} else if (i == 12) {
|
|
jsonReader.l = 8;
|
|
} else {
|
|
if (i == 14) {
|
|
jsonReader.l = 10;
|
|
return;
|
|
}
|
|
throw jsonReader.k0("a name");
|
|
}
|
|
}
|
|
}
|
|
|
|
/* JADX WARN: Type inference failed for: r0v0, types: [com.google.gson.internal.JsonReaderInternalAccess, java.lang.Object] */
|
|
static {
|
|
JsonReaderInternalAccess.f12687a = new Object();
|
|
}
|
|
|
|
public JsonReader(Reader reader) {
|
|
int[] iArr = new int[32];
|
|
this.p = iArr;
|
|
iArr[0] = 6;
|
|
this.r = new String[32];
|
|
this.s = new int[32];
|
|
Objects.requireNonNull(reader, "in == null");
|
|
this.f12756c = reader;
|
|
}
|
|
|
|
public int A() {
|
|
char c2;
|
|
int i = this.l;
|
|
if (i == 0) {
|
|
i = e();
|
|
}
|
|
if (i == 15) {
|
|
long j = this.m;
|
|
int i2 = (int) j;
|
|
if (j == i2) {
|
|
this.l = 0;
|
|
int[] iArr = this.s;
|
|
int i3 = this.q - 1;
|
|
iArr[i3] = iArr[i3] + 1;
|
|
return i2;
|
|
}
|
|
throw new NumberFormatException("Expected an int but was " + this.m + u());
|
|
}
|
|
if (i == 16) {
|
|
this.o = new String(this.g, this.h, this.n);
|
|
this.h += this.n;
|
|
} else {
|
|
if (i != 8 && i != 9 && i != 10) {
|
|
throw k0("an int");
|
|
}
|
|
if (i == 10) {
|
|
this.o = T();
|
|
} else {
|
|
if (i == 8) {
|
|
c2 = '\'';
|
|
} else {
|
|
c2 = Typography.quote;
|
|
}
|
|
this.o = Q(c2);
|
|
}
|
|
try {
|
|
int parseInt = Integer.parseInt(this.o);
|
|
this.l = 0;
|
|
int[] iArr2 = this.s;
|
|
int i4 = this.q - 1;
|
|
iArr2[i4] = iArr2[i4] + 1;
|
|
return parseInt;
|
|
} catch (NumberFormatException unused) {
|
|
}
|
|
}
|
|
this.l = 11;
|
|
double parseDouble = Double.parseDouble(this.o);
|
|
int i5 = (int) parseDouble;
|
|
if (i5 == parseDouble) {
|
|
this.o = null;
|
|
this.l = 0;
|
|
int[] iArr3 = this.s;
|
|
int i6 = this.q - 1;
|
|
iArr3[i6] = iArr3[i6] + 1;
|
|
return i5;
|
|
}
|
|
throw new NumberFormatException("Expected an int but was " + this.o + u());
|
|
}
|
|
|
|
public long B() {
|
|
char c2;
|
|
int i = this.l;
|
|
if (i == 0) {
|
|
i = e();
|
|
}
|
|
if (i == 15) {
|
|
this.l = 0;
|
|
int[] iArr = this.s;
|
|
int i2 = this.q - 1;
|
|
iArr[i2] = iArr[i2] + 1;
|
|
return this.m;
|
|
}
|
|
if (i == 16) {
|
|
this.o = new String(this.g, this.h, this.n);
|
|
this.h += this.n;
|
|
} else {
|
|
if (i != 8 && i != 9 && i != 10) {
|
|
throw k0("a long");
|
|
}
|
|
if (i == 10) {
|
|
this.o = T();
|
|
} else {
|
|
if (i == 8) {
|
|
c2 = '\'';
|
|
} else {
|
|
c2 = Typography.quote;
|
|
}
|
|
this.o = Q(c2);
|
|
}
|
|
try {
|
|
long parseLong = Long.parseLong(this.o);
|
|
this.l = 0;
|
|
int[] iArr2 = this.s;
|
|
int i3 = this.q - 1;
|
|
iArr2[i3] = iArr2[i3] + 1;
|
|
return parseLong;
|
|
} catch (NumberFormatException unused) {
|
|
}
|
|
}
|
|
this.l = 11;
|
|
double parseDouble = Double.parseDouble(this.o);
|
|
long j = (long) parseDouble;
|
|
if (j == parseDouble) {
|
|
this.o = null;
|
|
this.l = 0;
|
|
int[] iArr3 = this.s;
|
|
int i4 = this.q - 1;
|
|
iArr3[i4] = iArr3[i4] + 1;
|
|
return j;
|
|
}
|
|
throw new NumberFormatException("Expected a long but was " + this.o + u());
|
|
}
|
|
|
|
public String F() {
|
|
String Q;
|
|
int i = this.l;
|
|
if (i == 0) {
|
|
i = e();
|
|
}
|
|
if (i == 14) {
|
|
Q = T();
|
|
} else if (i == 12) {
|
|
Q = Q('\'');
|
|
} else if (i == 13) {
|
|
Q = Q(Typography.quote);
|
|
} else {
|
|
throw k0("a name");
|
|
}
|
|
this.l = 0;
|
|
this.r[this.q - 1] = Q;
|
|
return Q;
|
|
}
|
|
|
|
public final int G(boolean z) {
|
|
char c2;
|
|
int i = this.h;
|
|
int i2 = this.i;
|
|
while (true) {
|
|
if (i == i2) {
|
|
this.h = i;
|
|
if (!j(1)) {
|
|
if (!z) {
|
|
return -1;
|
|
}
|
|
throw new EOFException("End of input" + u());
|
|
}
|
|
i = this.h;
|
|
i2 = this.i;
|
|
}
|
|
int i3 = i + 1;
|
|
char[] cArr = this.g;
|
|
c2 = cArr[i];
|
|
if (c2 == '\n') {
|
|
this.j++;
|
|
this.k = i3;
|
|
} else if (c2 != ' ' && c2 != '\r' && c2 != '\t') {
|
|
if (c2 == '/') {
|
|
this.h = i3;
|
|
if (i3 == i2) {
|
|
this.h = i;
|
|
boolean j = j(2);
|
|
this.h++;
|
|
if (!j) {
|
|
break;
|
|
}
|
|
}
|
|
d();
|
|
int i4 = this.h;
|
|
char c3 = cArr[i4];
|
|
if (c3 != '*') {
|
|
if (c3 != '/') {
|
|
break;
|
|
}
|
|
this.h = i4 + 1;
|
|
b0();
|
|
i = this.h;
|
|
i2 = this.i;
|
|
} else {
|
|
this.h = i4 + 1;
|
|
while (true) {
|
|
if (this.h + 2 > this.i && !j(2)) {
|
|
i0("Unterminated comment");
|
|
throw null;
|
|
}
|
|
int i5 = this.h;
|
|
if (cArr[i5] == '\n') {
|
|
this.j++;
|
|
this.k = i5 + 1;
|
|
} else {
|
|
for (int i6 = 0; i6 < 2; i6++) {
|
|
if (cArr[this.h + i6] != "*/".charAt(i6)) {
|
|
break;
|
|
}
|
|
}
|
|
i = this.h + 2;
|
|
i2 = this.i;
|
|
break;
|
|
}
|
|
this.h++;
|
|
}
|
|
}
|
|
} else if (c2 == '#') {
|
|
this.h = i3;
|
|
d();
|
|
b0();
|
|
i = this.h;
|
|
i2 = this.i;
|
|
} else {
|
|
this.h = i3;
|
|
return c2;
|
|
}
|
|
}
|
|
i = i3;
|
|
}
|
|
return c2;
|
|
}
|
|
|
|
public void L() {
|
|
int i = this.l;
|
|
if (i == 0) {
|
|
i = e();
|
|
}
|
|
if (i == 7) {
|
|
this.l = 0;
|
|
int[] iArr = this.s;
|
|
int i2 = this.q - 1;
|
|
iArr[i2] = iArr[i2] + 1;
|
|
return;
|
|
}
|
|
throw k0("null");
|
|
}
|
|
|
|
/* JADX WARN: Code restructure failed: missing block: B:24:0x003e, code lost:
|
|
|
|
r11.h = r8;
|
|
r8 = r8 - r3;
|
|
r2 = r8 - 1;
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:25:0x0043, code lost:
|
|
|
|
if (r1 != null) goto L44;
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:26:0x0045, code lost:
|
|
|
|
r1 = new java.lang.StringBuilder(java.lang.Math.max(r8 * 2, 16));
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:38:0x006c, code lost:
|
|
|
|
if (r1 != null) goto L33;
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:39:0x006e, code lost:
|
|
|
|
r1 = new java.lang.StringBuilder(java.lang.Math.max((r2 - r3) * 2, 16));
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:40:0x007c, code lost:
|
|
|
|
r1.append(r7, r3, r2 - r3);
|
|
r11.h = r2;
|
|
*/
|
|
/*
|
|
Code decompiled incorrectly, please refer to instructions dump.
|
|
To view partially-correct add '--show-bad-code' argument
|
|
*/
|
|
public final java.lang.String Q(char r12) {
|
|
/*
|
|
r11 = this;
|
|
r0 = 0
|
|
r1 = r0
|
|
L2:
|
|
int r2 = r11.h
|
|
int r3 = r11.i
|
|
L6:
|
|
r4 = r3
|
|
r3 = r2
|
|
L8:
|
|
r5 = 16
|
|
r6 = 1
|
|
char[] r7 = r11.g
|
|
if (r2 >= r4) goto L6c
|
|
int r8 = r2 + 1
|
|
char r2 = r7[r2]
|
|
com.google.gson.Strictness r9 = r11.f
|
|
com.google.gson.Strictness r10 = com.google.gson.Strictness.g
|
|
if (r9 != r10) goto L24
|
|
r9 = 32
|
|
if (r2 < r9) goto L1e
|
|
goto L24
|
|
L1e:
|
|
java.lang.String r12 = "Unescaped control characters (\\u0000-\\u001F) are not allowed in strict mode"
|
|
r11.i0(r12)
|
|
throw r0
|
|
L24:
|
|
if (r2 != r12) goto L3a
|
|
r11.h = r8
|
|
int r8 = r8 - r3
|
|
int r8 = r8 - r6
|
|
if (r1 != 0) goto L32
|
|
java.lang.String r12 = new java.lang.String
|
|
r12.<init>(r7, r3, r8)
|
|
return r12
|
|
L32:
|
|
r1.append(r7, r3, r8)
|
|
java.lang.String r12 = r1.toString()
|
|
return r12
|
|
L3a:
|
|
r9 = 92
|
|
if (r2 != r9) goto L5f
|
|
r11.h = r8
|
|
int r8 = r8 - r3
|
|
int r2 = r8 + (-1)
|
|
if (r1 != 0) goto L50
|
|
int r8 = r8 * 2
|
|
java.lang.StringBuilder r1 = new java.lang.StringBuilder
|
|
int r4 = java.lang.Math.max(r8, r5)
|
|
r1.<init>(r4)
|
|
L50:
|
|
r1.append(r7, r3, r2)
|
|
char r2 = r11.Z()
|
|
r1.append(r2)
|
|
int r2 = r11.h
|
|
int r3 = r11.i
|
|
goto L6
|
|
L5f:
|
|
r5 = 10
|
|
if (r2 != r5) goto L6a
|
|
int r2 = r11.j
|
|
int r2 = r2 + r6
|
|
r11.j = r2
|
|
r11.k = r8
|
|
L6a:
|
|
r2 = r8
|
|
goto L8
|
|
L6c:
|
|
if (r1 != 0) goto L7c
|
|
int r1 = r2 - r3
|
|
int r1 = r1 * 2
|
|
java.lang.StringBuilder r4 = new java.lang.StringBuilder
|
|
int r1 = java.lang.Math.max(r1, r5)
|
|
r4.<init>(r1)
|
|
r1 = r4
|
|
L7c:
|
|
int r4 = r2 - r3
|
|
r1.append(r7, r3, r4)
|
|
r11.h = r2
|
|
boolean r2 = r11.j(r6)
|
|
if (r2 == 0) goto L8b
|
|
goto L2
|
|
L8b:
|
|
java.lang.String r12 = "Unterminated string"
|
|
r11.i0(r12)
|
|
throw r0
|
|
*/
|
|
throw new UnsupportedOperationException("Method not decompiled: com.google.gson.stream.JsonReader.Q(char):java.lang.String");
|
|
}
|
|
|
|
public String S() {
|
|
String str;
|
|
int i = this.l;
|
|
if (i == 0) {
|
|
i = e();
|
|
}
|
|
if (i == 10) {
|
|
str = T();
|
|
} else if (i == 8) {
|
|
str = Q('\'');
|
|
} else if (i == 9) {
|
|
str = Q(Typography.quote);
|
|
} else if (i == 11) {
|
|
str = this.o;
|
|
this.o = null;
|
|
} else if (i == 15) {
|
|
str = Long.toString(this.m);
|
|
} else if (i == 16) {
|
|
str = new String(this.g, this.h, this.n);
|
|
this.h += this.n;
|
|
} else {
|
|
throw k0("a string");
|
|
}
|
|
this.l = 0;
|
|
int[] iArr = this.s;
|
|
int i2 = this.q - 1;
|
|
iArr[i2] = iArr[i2] + 1;
|
|
return str;
|
|
}
|
|
|
|
/* JADX WARN: Code restructure failed: missing block: B:58:0x004a, code lost:
|
|
|
|
d();
|
|
*/
|
|
/* JADX WARN: Failed to find 'out' block for switch in B:54:0x0044. Please report as an issue. */
|
|
/* JADX WARN: Removed duplicated region for block: B:13:0x007c */
|
|
/* JADX WARN: Removed duplicated region for block: B:17:0x0084 */
|
|
/*
|
|
Code decompiled incorrectly, please refer to instructions dump.
|
|
To view partially-correct add '--show-bad-code' argument
|
|
*/
|
|
public final java.lang.String T() {
|
|
/*
|
|
r7 = this;
|
|
r0 = 0
|
|
r1 = 0
|
|
L2:
|
|
r2 = r1
|
|
L3:
|
|
int r3 = r7.h
|
|
int r4 = r3 + r2
|
|
int r5 = r7.i
|
|
char[] r6 = r7.g
|
|
if (r4 >= r5) goto L4e
|
|
int r3 = r3 + r2
|
|
char r3 = r6[r3]
|
|
r4 = 9
|
|
if (r3 == r4) goto L5a
|
|
r4 = 10
|
|
if (r3 == r4) goto L5a
|
|
r4 = 12
|
|
if (r3 == r4) goto L5a
|
|
r4 = 13
|
|
if (r3 == r4) goto L5a
|
|
r4 = 32
|
|
if (r3 == r4) goto L5a
|
|
r4 = 35
|
|
if (r3 == r4) goto L4a
|
|
r4 = 44
|
|
if (r3 == r4) goto L5a
|
|
r4 = 47
|
|
if (r3 == r4) goto L4a
|
|
r4 = 61
|
|
if (r3 == r4) goto L4a
|
|
r4 = 123(0x7b, float:1.72E-43)
|
|
if (r3 == r4) goto L5a
|
|
r4 = 125(0x7d, float:1.75E-43)
|
|
if (r3 == r4) goto L5a
|
|
r4 = 58
|
|
if (r3 == r4) goto L5a
|
|
r4 = 59
|
|
if (r3 == r4) goto L4a
|
|
switch(r3) {
|
|
case 91: goto L5a;
|
|
case 92: goto L4a;
|
|
case 93: goto L5a;
|
|
default: goto L47;
|
|
}
|
|
L47:
|
|
int r2 = r2 + 1
|
|
goto L3
|
|
L4a:
|
|
r7.d()
|
|
goto L5a
|
|
L4e:
|
|
int r3 = r6.length
|
|
if (r2 >= r3) goto L5c
|
|
int r3 = r2 + 1
|
|
boolean r3 = r7.j(r3)
|
|
if (r3 == 0) goto L5a
|
|
goto L3
|
|
L5a:
|
|
r1 = r2
|
|
goto L7a
|
|
L5c:
|
|
if (r0 != 0) goto L69
|
|
java.lang.StringBuilder r0 = new java.lang.StringBuilder
|
|
r3 = 16
|
|
int r3 = java.lang.Math.max(r2, r3)
|
|
r0.<init>(r3)
|
|
L69:
|
|
int r3 = r7.h
|
|
r0.append(r6, r3, r2)
|
|
int r3 = r7.h
|
|
int r3 = r3 + r2
|
|
r7.h = r3
|
|
r2 = 1
|
|
boolean r2 = r7.j(r2)
|
|
if (r2 != 0) goto L2
|
|
L7a:
|
|
if (r0 != 0) goto L84
|
|
java.lang.String r0 = new java.lang.String
|
|
int r2 = r7.h
|
|
r0.<init>(r6, r2, r1)
|
|
goto L8d
|
|
L84:
|
|
int r2 = r7.h
|
|
r0.append(r6, r2, r1)
|
|
java.lang.String r0 = r0.toString()
|
|
L8d:
|
|
int r2 = r7.h
|
|
int r2 = r2 + r1
|
|
r7.h = r2
|
|
return r0
|
|
*/
|
|
throw new UnsupportedOperationException("Method not decompiled: com.google.gson.stream.JsonReader.T():java.lang.String");
|
|
}
|
|
|
|
public JsonToken W() {
|
|
int i = this.l;
|
|
if (i == 0) {
|
|
i = e();
|
|
}
|
|
switch (i) {
|
|
case 1:
|
|
return JsonToken.g;
|
|
case 2:
|
|
return JsonToken.h;
|
|
case 3:
|
|
return JsonToken.f12757c;
|
|
case 4:
|
|
return JsonToken.f;
|
|
case 5:
|
|
case 6:
|
|
return JsonToken.l;
|
|
case 7:
|
|
return JsonToken.m;
|
|
case 8:
|
|
case 9:
|
|
case 10:
|
|
case 11:
|
|
return JsonToken.j;
|
|
case 12:
|
|
case 13:
|
|
case 14:
|
|
return JsonToken.i;
|
|
case 15:
|
|
case 16:
|
|
return JsonToken.k;
|
|
case 17:
|
|
return JsonToken.n;
|
|
default:
|
|
throw new AssertionError();
|
|
}
|
|
}
|
|
|
|
public final void X(int i) {
|
|
int i2 = this.q;
|
|
if (i2 - 1 < 255) {
|
|
int[] iArr = this.p;
|
|
if (i2 == iArr.length) {
|
|
int i3 = i2 * 2;
|
|
this.p = Arrays.copyOf(iArr, i3);
|
|
this.s = Arrays.copyOf(this.s, i3);
|
|
this.r = (String[]) Arrays.copyOf(this.r, i3);
|
|
}
|
|
int[] iArr2 = this.p;
|
|
int i4 = this.q;
|
|
this.q = i4 + 1;
|
|
iArr2[i4] = i;
|
|
return;
|
|
}
|
|
throw new IOException("Nesting limit 255 reached" + u());
|
|
}
|
|
|
|
public final char Z() {
|
|
int i;
|
|
if (this.h == this.i && !j(1)) {
|
|
i0("Unterminated escape sequence");
|
|
throw null;
|
|
}
|
|
int i2 = this.h;
|
|
int i3 = i2 + 1;
|
|
this.h = i3;
|
|
char[] cArr = this.g;
|
|
char c2 = cArr[i2];
|
|
Strictness strictness = Strictness.g;
|
|
if (c2 != '\n') {
|
|
if (c2 != '\"') {
|
|
if (c2 != '\'') {
|
|
if (c2 != '/' && c2 != '\\') {
|
|
if (c2 != 'b') {
|
|
if (c2 != 'f') {
|
|
if (c2 == 'n') {
|
|
return '\n';
|
|
}
|
|
if (c2 != 'r') {
|
|
if (c2 != 't') {
|
|
if (c2 == 'u') {
|
|
if (i2 + 5 > this.i && !j(4)) {
|
|
i0("Unterminated escape sequence");
|
|
throw null;
|
|
}
|
|
int i4 = this.h;
|
|
int i5 = i4 + 4;
|
|
int i6 = 0;
|
|
while (i4 < i5) {
|
|
char c3 = cArr[i4];
|
|
int i7 = i6 << 4;
|
|
if (c3 >= '0' && c3 <= '9') {
|
|
i = c3 - '0';
|
|
} else if (c3 >= 'a' && c3 <= 'f') {
|
|
i = c3 - 'W';
|
|
} else if (c3 >= 'A' && c3 <= 'F') {
|
|
i = c3 - '7';
|
|
} else {
|
|
i0("Malformed Unicode escape \\u".concat(new String(cArr, this.h, 4)));
|
|
throw null;
|
|
}
|
|
i6 = i + i7;
|
|
i4++;
|
|
}
|
|
this.h += 4;
|
|
return (char) i6;
|
|
}
|
|
i0("Invalid escape sequence");
|
|
throw null;
|
|
}
|
|
return '\t';
|
|
}
|
|
return '\r';
|
|
}
|
|
return '\f';
|
|
}
|
|
return '\b';
|
|
}
|
|
}
|
|
}
|
|
return c2;
|
|
}
|
|
if (this.f != strictness) {
|
|
this.j++;
|
|
this.k = i3;
|
|
} else {
|
|
i0("Cannot escape a newline character in strict mode");
|
|
throw null;
|
|
}
|
|
if (this.f == strictness) {
|
|
i0("Invalid escaped character \"'\" in strict mode");
|
|
throw null;
|
|
}
|
|
return c2;
|
|
}
|
|
|
|
public void a() {
|
|
int i = this.l;
|
|
if (i == 0) {
|
|
i = e();
|
|
}
|
|
if (i == 3) {
|
|
X(1);
|
|
this.s[this.q - 1] = 0;
|
|
this.l = 0;
|
|
return;
|
|
}
|
|
throw k0("BEGIN_ARRAY");
|
|
}
|
|
|
|
public final void a0(char c2) {
|
|
do {
|
|
int i = this.h;
|
|
int i2 = this.i;
|
|
while (i < i2) {
|
|
int i3 = i + 1;
|
|
char c3 = this.g[i];
|
|
if (c3 == c2) {
|
|
this.h = i3;
|
|
return;
|
|
}
|
|
if (c3 == '\\') {
|
|
this.h = i3;
|
|
Z();
|
|
i = this.h;
|
|
i2 = this.i;
|
|
} else {
|
|
if (c3 == '\n') {
|
|
this.j++;
|
|
this.k = i3;
|
|
}
|
|
i = i3;
|
|
}
|
|
}
|
|
this.h = i;
|
|
} while (j(1));
|
|
i0("Unterminated string");
|
|
throw null;
|
|
}
|
|
|
|
public void b() {
|
|
int i = this.l;
|
|
if (i == 0) {
|
|
i = e();
|
|
}
|
|
if (i == 1) {
|
|
X(3);
|
|
this.l = 0;
|
|
return;
|
|
}
|
|
throw k0("BEGIN_OBJECT");
|
|
}
|
|
|
|
public final void b0() {
|
|
char c2;
|
|
do {
|
|
if (this.h < this.i || j(1)) {
|
|
int i = this.h;
|
|
int i2 = i + 1;
|
|
this.h = i2;
|
|
c2 = this.g[i];
|
|
if (c2 == '\n') {
|
|
this.j++;
|
|
this.k = i2;
|
|
return;
|
|
}
|
|
} else {
|
|
return;
|
|
}
|
|
} while (c2 != '\r');
|
|
}
|
|
|
|
@Override // java.io.Closeable, java.lang.AutoCloseable
|
|
public void close() {
|
|
this.l = 0;
|
|
this.p[0] = 8;
|
|
this.q = 1;
|
|
this.f12756c.close();
|
|
}
|
|
|
|
public final void d() {
|
|
if (this.f == Strictness.f12675c) {
|
|
return;
|
|
}
|
|
i0("Use JsonReader.setStrictness(Strictness.LENIENT) to accept malformed JSON");
|
|
throw null;
|
|
}
|
|
|
|
/* JADX WARN: Code restructure failed: missing block: B:112:0x021c, code lost:
|
|
|
|
if (o(r12) != false) goto L125;
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:40:0x01ad, code lost:
|
|
|
|
r13 = 2;
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:41:0x021f, code lost:
|
|
|
|
if (r5 != 2) goto L185;
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:42:0x0221, code lost:
|
|
|
|
if (r10 == false) goto L177;
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:44:0x0227, code lost:
|
|
|
|
if (r1 != Long.MIN_VALUE) goto L178;
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:45:0x0229, code lost:
|
|
|
|
if (r17 == 0) goto L177;
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:47:0x0230, code lost:
|
|
|
|
if (r1 != 0) goto L181;
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:48:0x0232, code lost:
|
|
|
|
if (r17 != 0) goto L177;
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:49:0x0234, code lost:
|
|
|
|
if (r17 == 0) goto L183;
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:50:0x0237, code lost:
|
|
|
|
r1 = -r1;
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:51:0x0238, code lost:
|
|
|
|
r24.m = r1;
|
|
r24.h += r7;
|
|
r9 = 15;
|
|
r24.l = 15;
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:60:0x022c, code lost:
|
|
|
|
r13 = 2;
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:61:0x0244, code lost:
|
|
|
|
if (r5 == r13) goto L190;
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:63:0x0247, code lost:
|
|
|
|
if (r5 == 4) goto L190;
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:65:0x024a, code lost:
|
|
|
|
if (r5 != 7) goto L125;
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:67:0x024c, code lost:
|
|
|
|
r24.n = r7;
|
|
r9 = 16;
|
|
r24.l = 16;
|
|
*/
|
|
/* JADX WARN: Removed duplicated region for block: B:184:0x02b7 */
|
|
/* JADX WARN: Removed duplicated region for block: B:29:0x018c A[RETURN] */
|
|
/* JADX WARN: Removed duplicated region for block: B:31:0x018d */
|
|
/* JADX WARN: Removed duplicated region for block: B:53:0x0274 A[RETURN] */
|
|
/* JADX WARN: Removed duplicated region for block: B:54:0x0275 */
|
|
/* JADX WARN: Removed duplicated region for block: B:7:0x00ec */
|
|
/*
|
|
Code decompiled incorrectly, please refer to instructions dump.
|
|
To view partially-correct add '--show-bad-code' argument
|
|
*/
|
|
public final int e() {
|
|
/*
|
|
Method dump skipped, instructions count: 796
|
|
To view this dump add '--comments-level debug' option
|
|
*/
|
|
throw new UnsupportedOperationException("Method not decompiled: com.google.gson.stream.JsonReader.e():int");
|
|
}
|
|
|
|
/* JADX ERROR: JadxRuntimeException in pass: RegionMakerVisitor
|
|
jadx.core.utils.exceptions.JadxRuntimeException: Failed to find switch 'out' block (already processed)
|
|
at jadx.core.dex.visitors.regions.RegionMaker.calcSwitchOut(RegionMaker.java:923)
|
|
at jadx.core.dex.visitors.regions.RegionMaker.processSwitch(RegionMaker.java:797)
|
|
at jadx.core.dex.visitors.regions.RegionMaker.traverse(RegionMaker.java:157)
|
|
at jadx.core.dex.visitors.regions.RegionMaker.makeRegion(RegionMaker.java:91)
|
|
at jadx.core.dex.visitors.regions.RegionMaker.processIf(RegionMaker.java:735)
|
|
at jadx.core.dex.visitors.regions.RegionMaker.traverse(RegionMaker.java:152)
|
|
at jadx.core.dex.visitors.regions.RegionMaker.makeRegion(RegionMaker.java:91)
|
|
at jadx.core.dex.visitors.regions.RegionMaker.processIf(RegionMaker.java:735)
|
|
at jadx.core.dex.visitors.regions.RegionMaker.traverse(RegionMaker.java:152)
|
|
at jadx.core.dex.visitors.regions.RegionMaker.makeRegion(RegionMaker.java:91)
|
|
at jadx.core.dex.visitors.regions.RegionMaker.processIf(RegionMaker.java:735)
|
|
at jadx.core.dex.visitors.regions.RegionMaker.traverse(RegionMaker.java:152)
|
|
at jadx.core.dex.visitors.regions.RegionMaker.makeRegion(RegionMaker.java:91)
|
|
at jadx.core.dex.visitors.regions.RegionMaker.processIf(RegionMaker.java:740)
|
|
at jadx.core.dex.visitors.regions.RegionMaker.traverse(RegionMaker.java:152)
|
|
at jadx.core.dex.visitors.regions.RegionMaker.makeRegion(RegionMaker.java:91)
|
|
at jadx.core.dex.visitors.regions.RegionMaker.processIf(RegionMaker.java:740)
|
|
at jadx.core.dex.visitors.regions.RegionMaker.traverse(RegionMaker.java:152)
|
|
at jadx.core.dex.visitors.regions.RegionMaker.makeRegion(RegionMaker.java:91)
|
|
at jadx.core.dex.visitors.regions.RegionMaker.processIf(RegionMaker.java:735)
|
|
at jadx.core.dex.visitors.regions.RegionMaker.traverse(RegionMaker.java:152)
|
|
at jadx.core.dex.visitors.regions.RegionMaker.makeRegion(RegionMaker.java:91)
|
|
at jadx.core.dex.visitors.regions.RegionMaker.processIf(RegionMaker.java:735)
|
|
at jadx.core.dex.visitors.regions.RegionMaker.traverse(RegionMaker.java:152)
|
|
at jadx.core.dex.visitors.regions.RegionMaker.makeRegion(RegionMaker.java:91)
|
|
at jadx.core.dex.visitors.regions.RegionMaker.makeEndlessLoop(RegionMaker.java:411)
|
|
at jadx.core.dex.visitors.regions.RegionMaker.processLoop(RegionMaker.java:201)
|
|
at jadx.core.dex.visitors.regions.RegionMaker.traverse(RegionMaker.java:135)
|
|
at jadx.core.dex.visitors.regions.RegionMaker.makeRegion(RegionMaker.java:91)
|
|
at jadx.core.dex.visitors.regions.RegionMaker.processLoop(RegionMaker.java:242)
|
|
at jadx.core.dex.visitors.regions.RegionMaker.traverse(RegionMaker.java:135)
|
|
at jadx.core.dex.visitors.regions.RegionMaker.makeRegion(RegionMaker.java:91)
|
|
at jadx.core.dex.visitors.regions.RegionMakerVisitor.visit(RegionMakerVisitor.java:52)
|
|
*/
|
|
public final void e0() {
|
|
/*
|
|
r4 = this;
|
|
L0:
|
|
r0 = 0
|
|
L1:
|
|
int r1 = r4.h
|
|
int r2 = r1 + r0
|
|
int r3 = r4.i
|
|
if (r2 >= r3) goto L51
|
|
char[] r2 = r4.g
|
|
int r1 = r1 + r0
|
|
char r1 = r2[r1]
|
|
r2 = 9
|
|
if (r1 == r2) goto L4b
|
|
r2 = 10
|
|
if (r1 == r2) goto L4b
|
|
r2 = 12
|
|
if (r1 == r2) goto L4b
|
|
r2 = 13
|
|
if (r1 == r2) goto L4b
|
|
r2 = 32
|
|
if (r1 == r2) goto L4b
|
|
r2 = 35
|
|
if (r1 == r2) goto L48
|
|
r2 = 44
|
|
if (r1 == r2) goto L4b
|
|
r2 = 47
|
|
if (r1 == r2) goto L48
|
|
r2 = 61
|
|
if (r1 == r2) goto L48
|
|
r2 = 123(0x7b, float:1.72E-43)
|
|
if (r1 == r2) goto L4b
|
|
r2 = 125(0x7d, float:1.75E-43)
|
|
if (r1 == r2) goto L4b
|
|
r2 = 58
|
|
if (r1 == r2) goto L4b
|
|
r2 = 59
|
|
if (r1 == r2) goto L48
|
|
switch(r1) {
|
|
case 91: goto L4b;
|
|
case 92: goto L48;
|
|
case 93: goto L4b;
|
|
default: goto L45;
|
|
}
|
|
L45:
|
|
int r0 = r0 + 1
|
|
goto L1
|
|
L48:
|
|
r4.d()
|
|
L4b:
|
|
int r1 = r4.h
|
|
int r1 = r1 + r0
|
|
r4.h = r1
|
|
return
|
|
L51:
|
|
int r1 = r1 + r0
|
|
r4.h = r1
|
|
r0 = 1
|
|
boolean r0 = r4.j(r0)
|
|
if (r0 != 0) goto L0
|
|
return
|
|
*/
|
|
throw new UnsupportedOperationException("Method not decompiled: com.google.gson.stream.JsonReader.e0():void");
|
|
}
|
|
|
|
public void f() {
|
|
int i = this.l;
|
|
if (i == 0) {
|
|
i = e();
|
|
}
|
|
if (i == 4) {
|
|
int i2 = this.q;
|
|
this.q = i2 - 1;
|
|
int[] iArr = this.s;
|
|
int i3 = i2 - 2;
|
|
iArr[i3] = iArr[i3] + 1;
|
|
this.l = 0;
|
|
return;
|
|
}
|
|
throw k0("END_ARRAY");
|
|
}
|
|
|
|
/* JADX WARN: Can't fix incorrect switch cases order, some code will duplicate */
|
|
/* JADX WARN: Failed to find 'out' block for switch in B:6:0x0011. Please report as an issue. */
|
|
public void h0() {
|
|
int i = 0;
|
|
do {
|
|
int i2 = this.l;
|
|
if (i2 == 0) {
|
|
i2 = e();
|
|
}
|
|
switch (i2) {
|
|
case 1:
|
|
X(3);
|
|
i++;
|
|
this.l = 0;
|
|
break;
|
|
case 2:
|
|
if (i == 0) {
|
|
this.r[this.q - 1] = null;
|
|
}
|
|
this.q--;
|
|
i--;
|
|
this.l = 0;
|
|
break;
|
|
case 3:
|
|
X(1);
|
|
i++;
|
|
this.l = 0;
|
|
break;
|
|
case 4:
|
|
this.q--;
|
|
i--;
|
|
this.l = 0;
|
|
break;
|
|
case 5:
|
|
case 6:
|
|
case 7:
|
|
case 11:
|
|
case 15:
|
|
default:
|
|
this.l = 0;
|
|
break;
|
|
case 8:
|
|
a0('\'');
|
|
this.l = 0;
|
|
break;
|
|
case 9:
|
|
a0(Typography.quote);
|
|
this.l = 0;
|
|
break;
|
|
case 10:
|
|
e0();
|
|
this.l = 0;
|
|
break;
|
|
case 12:
|
|
a0('\'');
|
|
if (i == 0) {
|
|
this.r[this.q - 1] = "<skipped>";
|
|
}
|
|
this.l = 0;
|
|
break;
|
|
case 13:
|
|
a0(Typography.quote);
|
|
if (i == 0) {
|
|
this.r[this.q - 1] = "<skipped>";
|
|
}
|
|
this.l = 0;
|
|
break;
|
|
case 14:
|
|
e0();
|
|
if (i == 0) {
|
|
this.r[this.q - 1] = "<skipped>";
|
|
}
|
|
this.l = 0;
|
|
break;
|
|
case 16:
|
|
this.h += this.n;
|
|
this.l = 0;
|
|
break;
|
|
case 17:
|
|
return;
|
|
}
|
|
} while (i > 0);
|
|
int[] iArr = this.s;
|
|
int i3 = this.q - 1;
|
|
iArr[i3] = iArr[i3] + 1;
|
|
}
|
|
|
|
public void i() {
|
|
int i = this.l;
|
|
if (i == 0) {
|
|
i = e();
|
|
}
|
|
if (i == 2) {
|
|
int i2 = this.q;
|
|
int i3 = i2 - 1;
|
|
this.q = i3;
|
|
this.r[i3] = null;
|
|
int[] iArr = this.s;
|
|
int i4 = i2 - 2;
|
|
iArr[i4] = iArr[i4] + 1;
|
|
this.l = 0;
|
|
return;
|
|
}
|
|
throw k0("END_OBJECT");
|
|
}
|
|
|
|
public final void i0(String str) {
|
|
StringBuilder t = a.t(str);
|
|
t.append(u());
|
|
t.append("\nSee ");
|
|
t.append("https://github.com/google/gson/blob/main/Troubleshooting.md#".concat("malformed-json"));
|
|
throw new IOException(t.toString());
|
|
}
|
|
|
|
public final boolean j(int i) {
|
|
int i2;
|
|
int i3;
|
|
int i4 = this.k;
|
|
int i5 = this.h;
|
|
this.k = i4 - i5;
|
|
int i6 = this.i;
|
|
char[] cArr = this.g;
|
|
if (i6 != i5) {
|
|
int i7 = i6 - i5;
|
|
this.i = i7;
|
|
System.arraycopy(cArr, i5, cArr, 0, i7);
|
|
} else {
|
|
this.i = 0;
|
|
}
|
|
this.h = 0;
|
|
do {
|
|
int i8 = this.i;
|
|
int read = this.f12756c.read(cArr, i8, cArr.length - i8);
|
|
if (read == -1) {
|
|
return false;
|
|
}
|
|
i2 = this.i + read;
|
|
this.i = i2;
|
|
if (this.j == 0 && (i3 = this.k) == 0 && i2 > 0 && cArr[0] == 65279) {
|
|
this.h++;
|
|
this.k = i3 + 1;
|
|
i++;
|
|
}
|
|
} while (i2 < i);
|
|
return true;
|
|
}
|
|
|
|
public String k() {
|
|
return l(false);
|
|
}
|
|
|
|
public final IllegalStateException k0(String str) {
|
|
String str2;
|
|
if (W() == JsonToken.m) {
|
|
str2 = "adapter-not-null-safe";
|
|
} else {
|
|
str2 = "unexpected-json-structure";
|
|
}
|
|
StringBuilder w = a.w("Expected ", str, " but was ");
|
|
w.append(W());
|
|
w.append(u());
|
|
w.append("\nSee ");
|
|
w.append("https://github.com/google/gson/blob/main/Troubleshooting.md#".concat(str2));
|
|
return new IllegalStateException(w.toString());
|
|
}
|
|
|
|
public final String l(boolean z) {
|
|
StringBuilder sb = new StringBuilder("$");
|
|
int i = 0;
|
|
while (true) {
|
|
int i2 = this.q;
|
|
if (i < i2) {
|
|
int i3 = this.p[i];
|
|
switch (i3) {
|
|
case 1:
|
|
case 2:
|
|
int i4 = this.s[i];
|
|
if (z && i4 > 0 && i == i2 - 1) {
|
|
i4--;
|
|
}
|
|
sb.append('[');
|
|
sb.append(i4);
|
|
sb.append(']');
|
|
break;
|
|
case 3:
|
|
case 4:
|
|
case 5:
|
|
sb.append('.');
|
|
String str = this.r[i];
|
|
if (str == null) {
|
|
break;
|
|
} else {
|
|
sb.append(str);
|
|
break;
|
|
}
|
|
case 6:
|
|
case 7:
|
|
case 8:
|
|
break;
|
|
default:
|
|
throw new AssertionError(a.e(i3, "Unknown scope value: "));
|
|
}
|
|
i++;
|
|
} else {
|
|
return sb.toString();
|
|
}
|
|
}
|
|
}
|
|
|
|
public String m() {
|
|
return l(true);
|
|
}
|
|
|
|
public boolean n() {
|
|
int i = this.l;
|
|
if (i == 0) {
|
|
i = e();
|
|
}
|
|
if (i != 2 && i != 4 && i != 17) {
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public final boolean o(char c2) {
|
|
if (c2 != '\t' && c2 != '\n' && c2 != '\f' && c2 != '\r' && c2 != ' ') {
|
|
if (c2 != '#') {
|
|
if (c2 != ',') {
|
|
if (c2 != '/' && c2 != '=') {
|
|
if (c2 != '{' && c2 != '}' && c2 != ':') {
|
|
if (c2 != ';') {
|
|
switch (c2) {
|
|
case '[':
|
|
case ']':
|
|
return false;
|
|
case '\\':
|
|
break;
|
|
default:
|
|
return true;
|
|
}
|
|
}
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
d();
|
|
return false;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public String toString() {
|
|
return getClass().getSimpleName() + u();
|
|
}
|
|
|
|
final String u() {
|
|
StringBuilder u = a.u(" at line ", this.j + 1, (this.h - this.k) + 1, " column ", " path ");
|
|
u.append(k());
|
|
return u.toString();
|
|
}
|
|
|
|
public boolean v() {
|
|
int i = this.l;
|
|
if (i == 0) {
|
|
i = e();
|
|
}
|
|
if (i == 5) {
|
|
this.l = 0;
|
|
int[] iArr = this.s;
|
|
int i2 = this.q - 1;
|
|
iArr[i2] = iArr[i2] + 1;
|
|
return true;
|
|
}
|
|
if (i == 6) {
|
|
this.l = 0;
|
|
int[] iArr2 = this.s;
|
|
int i3 = this.q - 1;
|
|
iArr2[i3] = iArr2[i3] + 1;
|
|
return false;
|
|
}
|
|
throw k0("a boolean");
|
|
}
|
|
|
|
public double z() {
|
|
char c2;
|
|
int i = this.l;
|
|
if (i == 0) {
|
|
i = e();
|
|
}
|
|
if (i == 15) {
|
|
this.l = 0;
|
|
int[] iArr = this.s;
|
|
int i2 = this.q - 1;
|
|
iArr[i2] = iArr[i2] + 1;
|
|
return this.m;
|
|
}
|
|
if (i == 16) {
|
|
this.o = new String(this.g, this.h, this.n);
|
|
this.h += this.n;
|
|
} else if (i != 8 && i != 9) {
|
|
if (i == 10) {
|
|
this.o = T();
|
|
} else if (i != 11) {
|
|
throw k0("a double");
|
|
}
|
|
} else {
|
|
if (i == 8) {
|
|
c2 = '\'';
|
|
} else {
|
|
c2 = Typography.quote;
|
|
}
|
|
this.o = Q(c2);
|
|
}
|
|
this.l = 11;
|
|
double parseDouble = Double.parseDouble(this.o);
|
|
if (this.f != Strictness.f12675c && (Double.isNaN(parseDouble) || Double.isInfinite(parseDouble))) {
|
|
i0("JSON forbids NaN and infinities: " + parseDouble);
|
|
throw null;
|
|
}
|
|
this.o = null;
|
|
this.l = 0;
|
|
int[] iArr2 = this.s;
|
|
int i3 = this.q - 1;
|
|
iArr2[i3] = iArr2[i3] + 1;
|
|
return parseDouble;
|
|
}
|
|
}
|