package com.google.gson.stream; import com.google.gson.internal.JsonReaderInternalAccess; import com.google.gson.internal.bind.JsonTreeReader; import com.ijm.dataencryption.de.DataDecryptTool; import com.tencent.bugly.Bugly; import java.io.Closeable; import java.io.EOFException; import java.io.IOException; import java.io.Reader; /* loaded from: classes.dex */ public class JsonReader implements Closeable { private static final long MIN_INCOMPLETE_INTEGER = -922337203685477580L; private static final char[] NON_EXECUTE_PREFIX = ")]}'\n".toCharArray(); private static final int NUMBER_CHAR_DECIMAL = 3; private static final int NUMBER_CHAR_DIGIT = 2; private static final int NUMBER_CHAR_EXP_DIGIT = 7; private static final int NUMBER_CHAR_EXP_E = 5; private static final int NUMBER_CHAR_EXP_SIGN = 6; private static final int NUMBER_CHAR_FRACTION_DIGIT = 4; private static final int NUMBER_CHAR_NONE = 0; private static final int NUMBER_CHAR_SIGN = 1; private static final int PEEKED_BEGIN_ARRAY = 3; private static final int PEEKED_BEGIN_OBJECT = 1; private static final int PEEKED_BUFFERED = 11; private static final int PEEKED_DOUBLE_QUOTED = 9; private static final int PEEKED_DOUBLE_QUOTED_NAME = 13; private static final int PEEKED_END_ARRAY = 4; private static final int PEEKED_END_OBJECT = 2; private static final int PEEKED_EOF = 17; private static final int PEEKED_FALSE = 6; private static final int PEEKED_LONG = 15; private static final int PEEKED_NONE = 0; private static final int PEEKED_NULL = 7; private static final int PEEKED_NUMBER = 16; private static final int PEEKED_SINGLE_QUOTED = 8; private static final int PEEKED_SINGLE_QUOTED_NAME = 12; private static final int PEEKED_TRUE = 5; private static final int PEEKED_UNQUOTED = 10; private static final int PEEKED_UNQUOTED_NAME = 14; private final Reader in; private int[] pathIndices; private String[] pathNames; private long peekedLong; private int peekedNumberLength; private String peekedString; private int stackSize; private boolean lenient = false; private final char[] buffer = new char[DataDecryptTool.DECRYPT_SP_FILE]; private int pos = 0; private int limit = 0; private int lineNumber = 0; private int lineStart = 0; int peeked = 0; private int[] stack = new int[32]; static { JsonReaderInternalAccess.INSTANCE = new JsonReaderInternalAccess() { // from class: com.google.gson.stream.JsonReader.1 @Override // com.google.gson.internal.JsonReaderInternalAccess public void promoteNameToValue(JsonReader jsonReader) throws IOException { if (jsonReader instanceof JsonTreeReader) { ((JsonTreeReader) jsonReader).promoteNameToValue(); return; } int i = jsonReader.peeked; if (i == 0) { i = jsonReader.doPeek(); } if (i == 13) { jsonReader.peeked = 9; return; } if (i == 12) { jsonReader.peeked = 8; return; } if (i == 14) { jsonReader.peeked = 10; return; } throw new IllegalStateException("Expected a name but was " + jsonReader.peek() + jsonReader.locationString()); } }; } public JsonReader(Reader reader) { this.stackSize = 0; int[] iArr = this.stack; int i = this.stackSize; this.stackSize = i + 1; iArr[i] = 6; this.pathNames = new String[32]; this.pathIndices = new int[32]; if (reader == null) { throw new NullPointerException("in == null"); } this.in = reader; } private void checkLenient() throws IOException { if (!this.lenient) { throw syntaxError("Use JsonReader.setLenient(true) to accept malformed JSON"); } } private void consumeNonExecutePrefix() throws IOException { nextNonWhitespace(true); this.pos--; int i = this.pos; char[] cArr = NON_EXECUTE_PREFIX; if (i + cArr.length > this.limit && !fillBuffer(cArr.length)) { return; } int i2 = 0; while (true) { char[] cArr2 = NON_EXECUTE_PREFIX; if (i2 >= cArr2.length) { this.pos += cArr2.length; return; } else if (this.buffer[this.pos + i2] != cArr2[i2]) { return; } else { i2++; } } } private boolean fillBuffer(int i) throws IOException { int i2; char[] cArr = this.buffer; int i3 = this.lineStart; int i4 = this.pos; this.lineStart = i3 - i4; int i5 = this.limit; if (i5 != i4) { this.limit = i5 - i4; System.arraycopy(cArr, i4, cArr, 0, this.limit); } else { this.limit = 0; } this.pos = 0; do { Reader reader = this.in; int i6 = this.limit; int read = reader.read(cArr, i6, cArr.length - i6); if (read == -1) { return false; } this.limit += read; if (this.lineNumber == 0 && (i2 = this.lineStart) == 0 && this.limit > 0 && cArr[0] == 65279) { this.pos++; this.lineStart = i2 + 1; i++; } } while (this.limit < i); return true; } private boolean isLiteral(char c) throws IOException { if (c == '\t' || c == '\n' || c == '\f' || c == '\r' || c == ' ') { return false; } if (c != '#') { if (c == ',') { return false; } if (c != '/' && c != '=') { if (c == '{' || c == '}' || c == ':') { return false; } if (c != ';') { switch (c) { case '[': case ']': return false; case '\\': break; default: return true; } } } } checkLenient(); return false; } private int nextNonWhitespace(boolean z) throws IOException { char[] cArr = this.buffer; int i = this.pos; int i2 = this.limit; while (true) { if (i == i2) { this.pos = i; if (!fillBuffer(1)) { if (!z) { return -1; } throw new EOFException("End of input" + locationString()); } i = this.pos; i2 = this.limit; } int i3 = i + 1; char c = cArr[i]; if (c == '\n') { this.lineNumber++; this.lineStart = i3; } else if (c != ' ' && c != '\r' && c != '\t') { if (c == '/') { this.pos = i3; if (i3 == i2) { this.pos--; boolean fillBuffer = fillBuffer(2); this.pos++; if (!fillBuffer) { return c; } } checkLenient(); int i4 = this.pos; char c2 = cArr[i4]; if (c2 == '*') { this.pos = i4 + 1; if (!skipTo("*/")) { throw syntaxError("Unterminated comment"); } i = this.pos + 2; i2 = this.limit; } else { if (c2 != '/') { return c; } this.pos = i4 + 1; skipToEndOfLine(); i = this.pos; i2 = this.limit; } } else { if (c != '#') { this.pos = i3; return c; } this.pos = i3; checkLenient(); skipToEndOfLine(); i = this.pos; i2 = this.limit; } } i = i3; } } /* JADX WARN: Code restructure failed: missing block: B:32:0x005b, code lost: if (r1 != null) goto L27; */ /* JADX WARN: Code restructure failed: missing block: B:33:0x005d, code lost: r1 = new java.lang.StringBuilder(java.lang.Math.max((r2 - r4) * 2, 16)); */ /* JADX WARN: Code restructure failed: missing block: B:34:0x006b, code lost: r1.append(r0, r4, r2 - r4); r9.pos = r2; */ /* Code decompiled incorrectly, please refer to instructions dump. To view partially-correct code enable 'Show inconsistent code' option in preferences */ private java.lang.String nextQuotedValue(char r10) throws java.io.IOException { /* r9 = this; char[] r0 = r9.buffer r1 = 0 L3: int r2 = r9.pos int r3 = r9.limit L7: r4 = r2 L8: r5 = 16 r6 = 1 if (r2 >= r3) goto L5b int r7 = r2 + 1 char r2 = r0[r2] if (r2 != r10) goto L27 r9.pos = r7 int r7 = r7 - r4 int r7 = r7 - r6 if (r1 != 0) goto L1f java.lang.String r10 = new java.lang.String r10.(r0, r4, r7) return r10 L1f: r1.append(r0, r4, r7) java.lang.String r10 = r1.toString() return r10 L27: r8 = 92 if (r2 != r8) goto L4e r9.pos = r7 int r7 = r7 - r4 int r7 = r7 - r6 if (r1 != 0) goto L3f int r1 = r7 + 1 int r1 = r1 * 2 java.lang.StringBuilder r2 = new java.lang.StringBuilder int r1 = java.lang.Math.max(r1, r5) r2.(r1) r1 = r2 L3f: r1.append(r0, r4, r7) char r2 = r9.readEscapeCharacter() r1.append(r2) int r2 = r9.pos int r3 = r9.limit goto L7 L4e: r5 = 10 if (r2 != r5) goto L59 int r2 = r9.lineNumber int r2 = r2 + r6 r9.lineNumber = r2 r9.lineStart = r7 L59: r2 = r7 goto L8 L5b: if (r1 != 0) goto L6b int r1 = r2 - r4 int r1 = r1 * 2 java.lang.StringBuilder r3 = new java.lang.StringBuilder int r1 = java.lang.Math.max(r1, r5) r3.(r1) r1 = r3 L6b: int r3 = r2 - r4 r1.append(r0, r4, r3) r9.pos = r2 boolean r2 = r9.fillBuffer(r6) if (r2 == 0) goto L79 goto L3 L79: java.lang.String r10 = "Unterminated string" java.io.IOException r10 = r9.syntaxError(r10) throw r10 */ throw new UnsupportedOperationException("Method not decompiled: com.google.gson.stream.JsonReader.nextQuotedValue(char):java.lang.String"); } /* JADX WARN: Code restructure failed: missing block: B:58:0x004b, code lost: checkLenient(); */ /* JADX WARN: Failed to find 'out' block for switch in B:54:0x0045. Please report as an issue. */ /* JADX WARN: Removed duplicated region for block: B:13:0x0081 */ /* JADX WARN: Removed duplicated region for block: B:17:0x008b */ /* Code decompiled incorrectly, please refer to instructions dump. To view partially-correct code enable 'Show inconsistent code' option in preferences */ private java.lang.String nextUnquotedValue() throws java.io.IOException { /* r6 = this; r0 = 0 r1 = 0 r2 = r1 L3: r1 = 0 L4: int r3 = r6.pos int r4 = r3 + r1 int r5 = r6.limit if (r4 >= r5) goto L4f char[] r4 = r6.buffer int r3 = r3 + r1 char r3 = r4[r3] r4 = 9 if (r3 == r4) goto L5d r4 = 10 if (r3 == r4) goto L5d r4 = 12 if (r3 == r4) goto L5d r4 = 13 if (r3 == r4) goto L5d r4 = 32 if (r3 == r4) goto L5d r4 = 35 if (r3 == r4) goto L4b r4 = 44 if (r3 == r4) goto L5d r4 = 47 if (r3 == r4) goto L4b r4 = 61 if (r3 == r4) goto L4b r4 = 123(0x7b, float:1.72E-43) if (r3 == r4) goto L5d r4 = 125(0x7d, float:1.75E-43) if (r3 == r4) goto L5d r4 = 58 if (r3 == r4) goto L5d r4 = 59 if (r3 == r4) goto L4b switch(r3) { case 91: goto L5d; case 92: goto L4b; case 93: goto L5d; default: goto L48; } L48: int r1 = r1 + 1 goto L4 L4b: r6.checkLenient() goto L5d L4f: char[] r3 = r6.buffer int r3 = r3.length if (r1 >= r3) goto L5f int r3 = r1 + 1 boolean r3 = r6.fillBuffer(r3) if (r3 == 0) goto L5d goto L4 L5d: r0 = r1 goto L7f L5f: if (r2 != 0) goto L6c java.lang.StringBuilder r2 = new java.lang.StringBuilder r3 = 16 int r3 = java.lang.Math.max(r1, r3) r2.(r3) L6c: char[] r3 = r6.buffer int r4 = r6.pos r2.append(r3, r4, r1) int r3 = r6.pos int r3 = r3 + r1 r6.pos = r3 r1 = 1 boolean r1 = r6.fillBuffer(r1) if (r1 != 0) goto L3 L7f: if (r2 != 0) goto L8b java.lang.String r1 = new java.lang.String char[] r2 = r6.buffer int r3 = r6.pos r1.(r2, r3, r0) goto L96 L8b: char[] r1 = r6.buffer int r3 = r6.pos r2.append(r1, r3, r0) java.lang.String r1 = r2.toString() L96: int r2 = r6.pos int r2 = r2 + r0 r6.pos = r2 return r1 */ throw new UnsupportedOperationException("Method not decompiled: com.google.gson.stream.JsonReader.nextUnquotedValue():java.lang.String"); } private int peekKeyword() throws IOException { int i; String str; String str2; char c = this.buffer[this.pos]; if (c == 't' || c == 'T') { i = 5; str = "true"; str2 = "TRUE"; } else if (c == 'f' || c == 'F') { i = 6; str = Bugly.SDK_IS_DEV; str2 = "FALSE"; } else { if (c != 'n' && c != 'N') { return 0; } i = 7; str = "null"; str2 = "NULL"; } int length = str.length(); for (int i2 = 1; i2 < length; i2++) { if (this.pos + i2 >= this.limit && !fillBuffer(i2 + 1)) { return 0; } char c2 = this.buffer[this.pos + i2]; if (c2 != str.charAt(i2) && c2 != str2.charAt(i2)) { return 0; } } if ((this.pos + length < this.limit || fillBuffer(length + 1)) && isLiteral(this.buffer[this.pos + length])) { return 0; } this.pos += length; this.peeked = i; return i; } /* JADX WARN: Code restructure failed: missing block: B:10:0x009a, code lost: if (r9 != 2) goto L69; */ /* JADX WARN: Code restructure failed: missing block: B:11:0x009c, code lost: if (r10 == false) goto L69; */ /* JADX WARN: Code restructure failed: missing block: B:13:0x00a2, code lost: if (r11 != Long.MIN_VALUE) goto L61; */ /* JADX WARN: Code restructure failed: missing block: B:14:0x00a4, code lost: if (r13 == false) goto L69; */ /* JADX WARN: Code restructure failed: missing block: B:16:0x00aa, code lost: if (r11 != 0) goto L64; */ /* JADX WARN: Code restructure failed: missing block: B:17:0x00ac, code lost: if (r13 != false) goto L69; */ /* JADX WARN: Code restructure failed: missing block: B:18:0x00ae, code lost: if (r13 == false) goto L66; */ /* JADX WARN: Code restructure failed: missing block: B:19:0x00b1, code lost: r11 = -r11; */ /* JADX WARN: Code restructure failed: missing block: B:20:0x00b2, code lost: r18.peekedLong = r11; r18.pos += r3; r18.peeked = 15; */ /* JADX WARN: Code restructure failed: missing block: B:21:0x00bd, code lost: return 15; */ /* JADX WARN: Code restructure failed: missing block: B:23:0x00be, code lost: if (r9 == 2) goto L77; */ /* JADX WARN: Code restructure failed: missing block: B:25:0x00c1, code lost: if (r9 == 4) goto L77; */ /* JADX WARN: Code restructure failed: missing block: B:27:0x00c4, code lost: if (r9 != 7) goto L75; */ /* JADX WARN: Code restructure failed: missing block: B:28:0x00c7, code lost: return 0; */ /* JADX WARN: Code restructure failed: missing block: B:29:0x00c9, code lost: r18.peekedNumberLength = r3; r18.peeked = 16; */ /* JADX WARN: Code restructure failed: missing block: B:30:0x00cf, code lost: return 16; */ /* JADX WARN: Code restructure failed: missing block: B:75:0x0098, code lost: if (isLiteral(r14) != false) goto L79; */ /* JADX WARN: Code restructure failed: missing block: B:76:0x00d0, code lost: return 0; */ /* Code decompiled incorrectly, please refer to instructions dump. To view partially-correct code enable 'Show inconsistent code' option in preferences */ private int peekNumber() throws java.io.IOException { /* Method dump skipped, instructions count: 255 To view this dump change 'Code comments level' option to 'DEBUG' */ throw new UnsupportedOperationException("Method not decompiled: com.google.gson.stream.JsonReader.peekNumber():int"); } private void push(int i) { int i2 = this.stackSize; int[] iArr = this.stack; if (i2 == iArr.length) { int[] iArr2 = new int[i2 * 2]; int[] iArr3 = new int[i2 * 2]; String[] strArr = new String[i2 * 2]; System.arraycopy(iArr, 0, iArr2, 0, i2); System.arraycopy(this.pathIndices, 0, iArr3, 0, this.stackSize); System.arraycopy(this.pathNames, 0, strArr, 0, this.stackSize); this.stack = iArr2; this.pathIndices = iArr3; this.pathNames = strArr; } int[] iArr4 = this.stack; int i3 = this.stackSize; this.stackSize = i3 + 1; iArr4[i3] = i; } private char readEscapeCharacter() throws IOException { int i; int i2; if (this.pos == this.limit && !fillBuffer(1)) { throw syntaxError("Unterminated escape sequence"); } char[] cArr = this.buffer; int i3 = this.pos; this.pos = i3 + 1; char c = cArr[i3]; if (c == '\n') { this.lineNumber++; this.lineStart = this.pos; } else if (c != '\"' && c != '\'' && c != '/' && c != '\\') { if (c == 'b') { return '\b'; } if (c == 'f') { return '\f'; } if (c == 'n') { return '\n'; } if (c == 'r') { return '\r'; } if (c == 't') { return '\t'; } if (c != 'u') { throw syntaxError("Invalid escape sequence"); } if (this.pos + 4 > this.limit && !fillBuffer(4)) { throw syntaxError("Unterminated escape sequence"); } char c2 = 0; int i4 = this.pos; int i5 = i4 + 4; while (i4 < i5) { char c3 = this.buffer[i4]; char c4 = (char) (c2 << 4); if (c3 < '0' || c3 > '9') { if (c3 >= 'a' && c3 <= 'f') { i = c3 - 'a'; } else { if (c3 < 'A' || c3 > 'F') { throw new NumberFormatException("\\u" + new String(this.buffer, this.pos, 4)); } i = c3 - 'A'; } i2 = i + 10; } else { i2 = c3 - '0'; } c2 = (char) (c4 + i2); i4++; } this.pos += 4; return c2; } return c; } private void skipQuotedValue(char c) throws IOException { char[] cArr = this.buffer; do { int i = this.pos; int i2 = this.limit; while (i < i2) { int i3 = i + 1; char c2 = cArr[i]; if (c2 == c) { this.pos = i3; return; } if (c2 == '\\') { this.pos = i3; readEscapeCharacter(); i = this.pos; i2 = this.limit; } else { if (c2 == '\n') { this.lineNumber++; this.lineStart = i3; } i = i3; } } this.pos = i; } while (fillBuffer(1)); throw syntaxError("Unterminated string"); } private boolean skipTo(String str) throws IOException { int length = str.length(); while (true) { if (this.pos + length > this.limit && !fillBuffer(length)) { return false; } char[] cArr = this.buffer; int i = this.pos; if (cArr[i] != '\n') { for (int i2 = 0; i2 < length; i2++) { if (this.buffer[this.pos + i2] != str.charAt(i2)) { break; } } return true; } this.lineNumber++; this.lineStart = i + 1; this.pos++; } } private void skipToEndOfLine() throws IOException { char c; do { if (this.pos >= this.limit && !fillBuffer(1)) { return; } char[] cArr = this.buffer; int i = this.pos; this.pos = i + 1; c = cArr[i]; if (c == '\n') { this.lineNumber++; this.lineStart = this.pos; return; } } while (c != '\r'); } /* JADX WARN: Code restructure failed: missing block: B:33:0x0048, code lost: checkLenient(); */ /* Code decompiled incorrectly, please refer to instructions dump. To view partially-correct code enable 'Show inconsistent code' option in preferences */ private void skipUnquotedValue() throws java.io.IOException { /* r4 = this; L0: r0 = 0 L1: int r1 = r4.pos int r2 = r1 + r0 int r3 = r4.limit if (r2 >= r3) goto L51 char[] r2 = r4.buffer 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.checkLenient() L4b: int r1 = r4.pos int r1 = r1 + r0 r4.pos = r1 return L51: int r1 = r1 + r0 r4.pos = r1 r0 = 1 boolean r0 = r4.fillBuffer(r0) if (r0 != 0) goto L0 return */ throw new UnsupportedOperationException("Method not decompiled: com.google.gson.stream.JsonReader.skipUnquotedValue():void"); } private IOException syntaxError(String str) throws IOException { throw new MalformedJsonException(str + locationString()); } public void beginArray() throws IOException { int i = this.peeked; if (i == 0) { i = doPeek(); } if (i == 3) { push(1); this.pathIndices[this.stackSize - 1] = 0; this.peeked = 0; } else { throw new IllegalStateException("Expected BEGIN_ARRAY but was " + peek() + locationString()); } } public void beginObject() throws IOException { int i = this.peeked; if (i == 0) { i = doPeek(); } if (i == 1) { push(3); this.peeked = 0; } else { throw new IllegalStateException("Expected BEGIN_OBJECT but was " + peek() + locationString()); } } @Override // java.io.Closeable, java.lang.AutoCloseable public void close() throws IOException { this.peeked = 0; this.stack[0] = 8; this.stackSize = 1; this.in.close(); } int doPeek() throws IOException { int nextNonWhitespace; int[] iArr = this.stack; int i = this.stackSize; int i2 = iArr[i - 1]; if (i2 == 1) { iArr[i - 1] = 2; } else if (i2 == 2) { int nextNonWhitespace2 = nextNonWhitespace(true); if (nextNonWhitespace2 != 44) { if (nextNonWhitespace2 != 59) { if (nextNonWhitespace2 != 93) { throw syntaxError("Unterminated array"); } this.peeked = 4; return 4; } checkLenient(); } } else { if (i2 == 3 || i2 == 5) { this.stack[this.stackSize - 1] = 4; if (i2 == 5 && (nextNonWhitespace = nextNonWhitespace(true)) != 44) { if (nextNonWhitespace != 59) { if (nextNonWhitespace != 125) { throw syntaxError("Unterminated object"); } this.peeked = 2; return 2; } checkLenient(); } int nextNonWhitespace3 = nextNonWhitespace(true); if (nextNonWhitespace3 == 34) { this.peeked = 13; return 13; } if (nextNonWhitespace3 == 39) { checkLenient(); this.peeked = 12; return 12; } if (nextNonWhitespace3 == 125) { if (i2 == 5) { throw syntaxError("Expected name"); } this.peeked = 2; return 2; } checkLenient(); this.pos--; if (!isLiteral((char) nextNonWhitespace3)) { throw syntaxError("Expected name"); } this.peeked = 14; return 14; } if (i2 == 4) { iArr[i - 1] = 5; int nextNonWhitespace4 = nextNonWhitespace(true); if (nextNonWhitespace4 != 58) { if (nextNonWhitespace4 != 61) { throw syntaxError("Expected ':'"); } checkLenient(); if (this.pos < this.limit || fillBuffer(1)) { char[] cArr = this.buffer; int i3 = this.pos; if (cArr[i3] == '>') { this.pos = i3 + 1; } } } } else if (i2 == 6) { if (this.lenient) { consumeNonExecutePrefix(); } this.stack[this.stackSize - 1] = 7; } else if (i2 == 7) { if (nextNonWhitespace(false) == -1) { this.peeked = 17; return 17; } checkLenient(); this.pos--; } else if (i2 == 8) { throw new IllegalStateException("JsonReader is closed"); } } int nextNonWhitespace5 = nextNonWhitespace(true); if (nextNonWhitespace5 == 34) { this.peeked = 9; return 9; } if (nextNonWhitespace5 == 39) { checkLenient(); this.peeked = 8; return 8; } if (nextNonWhitespace5 != 44 && nextNonWhitespace5 != 59) { if (nextNonWhitespace5 == 91) { this.peeked = 3; return 3; } if (nextNonWhitespace5 != 93) { if (nextNonWhitespace5 == 123) { this.peeked = 1; return 1; } this.pos--; int peekKeyword = peekKeyword(); if (peekKeyword != 0) { return peekKeyword; } int peekNumber = peekNumber(); if (peekNumber != 0) { return peekNumber; } if (!isLiteral(this.buffer[this.pos])) { throw syntaxError("Expected value"); } checkLenient(); this.peeked = 10; return 10; } if (i2 == 1) { this.peeked = 4; return 4; } } if (i2 != 1 && i2 != 2) { throw syntaxError("Unexpected value"); } checkLenient(); this.pos--; this.peeked = 7; return 7; } public void endArray() throws IOException { int i = this.peeked; if (i == 0) { i = doPeek(); } if (i != 4) { throw new IllegalStateException("Expected END_ARRAY but was " + peek() + locationString()); } this.stackSize--; int[] iArr = this.pathIndices; int i2 = this.stackSize - 1; iArr[i2] = iArr[i2] + 1; this.peeked = 0; } public void endObject() throws IOException { int i = this.peeked; if (i == 0) { i = doPeek(); } if (i != 2) { throw new IllegalStateException("Expected END_OBJECT but was " + peek() + locationString()); } this.stackSize--; String[] strArr = this.pathNames; int i2 = this.stackSize; strArr[i2] = null; int[] iArr = this.pathIndices; int i3 = i2 - 1; iArr[i3] = iArr[i3] + 1; this.peeked = 0; } public String getPath() { StringBuilder sb = new StringBuilder(); sb.append('$'); int i = this.stackSize; for (int i2 = 0; i2 < i; i2++) { int i3 = this.stack[i2]; if (i3 == 1 || i3 == 2) { sb.append('['); sb.append(this.pathIndices[i2]); sb.append(']'); } else if (i3 == 3 || i3 == 4 || i3 == 5) { sb.append('.'); String[] strArr = this.pathNames; if (strArr[i2] != null) { sb.append(strArr[i2]); } } } return sb.toString(); } public boolean hasNext() throws IOException { int i = this.peeked; if (i == 0) { i = doPeek(); } return (i == 2 || i == 4) ? false : true; } public final boolean isLenient() { return this.lenient; } String locationString() { return " at line " + (this.lineNumber + 1) + " column " + ((this.pos - this.lineStart) + 1) + " path " + getPath(); } public boolean nextBoolean() throws IOException { int i = this.peeked; if (i == 0) { i = doPeek(); } if (i == 5) { this.peeked = 0; int[] iArr = this.pathIndices; int i2 = this.stackSize - 1; iArr[i2] = iArr[i2] + 1; return true; } if (i == 6) { this.peeked = 0; int[] iArr2 = this.pathIndices; int i3 = this.stackSize - 1; iArr2[i3] = iArr2[i3] + 1; return false; } throw new IllegalStateException("Expected a boolean but was " + peek() + locationString()); } public double nextDouble() throws IOException { int i = this.peeked; if (i == 0) { i = doPeek(); } if (i == 15) { this.peeked = 0; int[] iArr = this.pathIndices; int i2 = this.stackSize - 1; iArr[i2] = iArr[i2] + 1; return this.peekedLong; } if (i == 16) { this.peekedString = new String(this.buffer, this.pos, this.peekedNumberLength); this.pos += this.peekedNumberLength; } else if (i == 8 || i == 9) { this.peekedString = nextQuotedValue(i == 8 ? '\'' : '\"'); } else if (i == 10) { this.peekedString = nextUnquotedValue(); } else if (i != 11) { throw new IllegalStateException("Expected a double but was " + peek() + locationString()); } this.peeked = 11; double parseDouble = Double.parseDouble(this.peekedString); if (!this.lenient && (Double.isNaN(parseDouble) || Double.isInfinite(parseDouble))) { throw new MalformedJsonException("JSON forbids NaN and infinities: " + parseDouble + locationString()); } this.peekedString = null; this.peeked = 0; int[] iArr2 = this.pathIndices; int i3 = this.stackSize - 1; iArr2[i3] = iArr2[i3] + 1; return parseDouble; } public int nextInt() throws IOException { int i = this.peeked; if (i == 0) { i = doPeek(); } if (i == 15) { long j = this.peekedLong; int i2 = (int) j; if (j == i2) { this.peeked = 0; int[] iArr = this.pathIndices; int i3 = this.stackSize - 1; iArr[i3] = iArr[i3] + 1; return i2; } throw new NumberFormatException("Expected an int but was " + this.peekedLong + locationString()); } if (i == 16) { this.peekedString = new String(this.buffer, this.pos, this.peekedNumberLength); this.pos += this.peekedNumberLength; } else { if (i != 8 && i != 9 && i != 10) { throw new IllegalStateException("Expected an int but was " + peek() + locationString()); } if (i == 10) { this.peekedString = nextUnquotedValue(); } else { this.peekedString = nextQuotedValue(i == 8 ? '\'' : '\"'); } try { int parseInt = Integer.parseInt(this.peekedString); this.peeked = 0; int[] iArr2 = this.pathIndices; int i4 = this.stackSize - 1; iArr2[i4] = iArr2[i4] + 1; return parseInt; } catch (NumberFormatException unused) { } } this.peeked = 11; double parseDouble = Double.parseDouble(this.peekedString); int i5 = (int) parseDouble; if (i5 != parseDouble) { throw new NumberFormatException("Expected an int but was " + this.peekedString + locationString()); } this.peekedString = null; this.peeked = 0; int[] iArr3 = this.pathIndices; int i6 = this.stackSize - 1; iArr3[i6] = iArr3[i6] + 1; return i5; } public long nextLong() throws IOException { int i = this.peeked; if (i == 0) { i = doPeek(); } if (i == 15) { this.peeked = 0; int[] iArr = this.pathIndices; int i2 = this.stackSize - 1; iArr[i2] = iArr[i2] + 1; return this.peekedLong; } if (i == 16) { this.peekedString = new String(this.buffer, this.pos, this.peekedNumberLength); this.pos += this.peekedNumberLength; } else { if (i != 8 && i != 9 && i != 10) { throw new IllegalStateException("Expected a long but was " + peek() + locationString()); } if (i == 10) { this.peekedString = nextUnquotedValue(); } else { this.peekedString = nextQuotedValue(i == 8 ? '\'' : '\"'); } try { long parseLong = Long.parseLong(this.peekedString); this.peeked = 0; int[] iArr2 = this.pathIndices; int i3 = this.stackSize - 1; iArr2[i3] = iArr2[i3] + 1; return parseLong; } catch (NumberFormatException unused) { } } this.peeked = 11; double parseDouble = Double.parseDouble(this.peekedString); long j = (long) parseDouble; if (j != parseDouble) { throw new NumberFormatException("Expected a long but was " + this.peekedString + locationString()); } this.peekedString = null; this.peeked = 0; int[] iArr3 = this.pathIndices; int i4 = this.stackSize - 1; iArr3[i4] = iArr3[i4] + 1; return j; } public String nextName() throws IOException { String nextQuotedValue; int i = this.peeked; if (i == 0) { i = doPeek(); } if (i == 14) { nextQuotedValue = nextUnquotedValue(); } else if (i == 12) { nextQuotedValue = nextQuotedValue('\''); } else { if (i != 13) { throw new IllegalStateException("Expected a name but was " + peek() + locationString()); } nextQuotedValue = nextQuotedValue('\"'); } this.peeked = 0; this.pathNames[this.stackSize - 1] = nextQuotedValue; return nextQuotedValue; } public void nextNull() throws IOException { int i = this.peeked; if (i == 0) { i = doPeek(); } if (i == 7) { this.peeked = 0; int[] iArr = this.pathIndices; int i2 = this.stackSize - 1; iArr[i2] = iArr[i2] + 1; return; } throw new IllegalStateException("Expected null but was " + peek() + locationString()); } public String nextString() throws IOException { String str; int i = this.peeked; if (i == 0) { i = doPeek(); } if (i == 10) { str = nextUnquotedValue(); } else if (i == 8) { str = nextQuotedValue('\''); } else if (i == 9) { str = nextQuotedValue('\"'); } else if (i == 11) { str = this.peekedString; this.peekedString = null; } else if (i == 15) { str = Long.toString(this.peekedLong); } else { if (i != 16) { throw new IllegalStateException("Expected a string but was " + peek() + locationString()); } str = new String(this.buffer, this.pos, this.peekedNumberLength); this.pos += this.peekedNumberLength; } this.peeked = 0; int[] iArr = this.pathIndices; int i2 = this.stackSize - 1; iArr[i2] = iArr[i2] + 1; return str; } public JsonToken peek() throws IOException { int i = this.peeked; if (i == 0) { i = doPeek(); } switch (i) { case 1: return JsonToken.BEGIN_OBJECT; case 2: return JsonToken.END_OBJECT; case 3: return JsonToken.BEGIN_ARRAY; case 4: return JsonToken.END_ARRAY; case 5: case 6: return JsonToken.BOOLEAN; case 7: return JsonToken.NULL; case 8: case 9: case 10: case 11: return JsonToken.STRING; case 12: case 13: case 14: return JsonToken.NAME; case 15: case 16: return JsonToken.NUMBER; case 17: return JsonToken.END_DOCUMENT; default: throw new AssertionError(); } } public final void setLenient(boolean z) { this.lenient = z; } public void skipValue() throws IOException { int i = 0; do { int i2 = this.peeked; if (i2 == 0) { i2 = doPeek(); } if (i2 == 3) { push(1); } else if (i2 == 1) { push(3); } else { if (i2 == 4) { this.stackSize--; } else if (i2 == 2) { this.stackSize--; } else { if (i2 == 14 || i2 == 10) { skipUnquotedValue(); } else if (i2 == 8 || i2 == 12) { skipQuotedValue('\''); } else if (i2 == 9 || i2 == 13) { skipQuotedValue('\"'); } else if (i2 == 16) { this.pos += this.peekedNumberLength; } this.peeked = 0; } i--; this.peeked = 0; } i++; this.peeked = 0; } while (i != 0); int[] iArr = this.pathIndices; int i3 = this.stackSize; int i4 = i3 - 1; iArr[i4] = iArr[i4] + 1; this.pathNames[i3 - 1] = "null"; } public String toString() { return getClass().getSimpleName() + locationString(); } }