Initial version -- added millennium read funcionality
This commit is contained in:
+10
@@ -0,0 +1,10 @@
|
||||
package com.google.android.gms.common.internal.safeparcel;
|
||||
|
||||
/* JADX INFO: compiled from: com.google.android.gms:play-services-basement@@18.3.0 */
|
||||
/* JADX INFO: loaded from: classes2.dex */
|
||||
public abstract class AbstractSafeParcelable implements SafeParcelable {
|
||||
@Override // android.os.Parcelable
|
||||
public final int describeContents() {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
+737
@@ -0,0 +1,737 @@
|
||||
package com.google.android.gms.common.internal.safeparcel;
|
||||
|
||||
import android.app.PendingIntent;
|
||||
import android.os.Bundle;
|
||||
import android.os.IBinder;
|
||||
import android.os.Parcel;
|
||||
import android.os.Parcelable;
|
||||
import android.util.SparseArray;
|
||||
import android.util.SparseBooleanArray;
|
||||
import android.util.SparseIntArray;
|
||||
import android.util.SparseLongArray;
|
||||
import androidx.core.internal.view.SupportMenu;
|
||||
import java.math.BigDecimal;
|
||||
import java.math.BigInteger;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/* JADX INFO: compiled from: com.google.android.gms:play-services-basement@@18.3.0 */
|
||||
/* JADX INFO: loaded from: classes2.dex */
|
||||
public class SafeParcelReader {
|
||||
|
||||
/* JADX INFO: compiled from: com.google.android.gms:play-services-basement@@18.3.0 */
|
||||
public static class ParseException extends RuntimeException {
|
||||
public ParseException(String str, Parcel parcel) {
|
||||
super(str + " Parcel: pos=" + parcel.dataPosition() + " size=" + parcel.dataSize());
|
||||
}
|
||||
}
|
||||
|
||||
private SafeParcelReader() {
|
||||
}
|
||||
|
||||
public static BigDecimal createBigDecimal(Parcel parcel, int i) {
|
||||
int size = readSize(parcel, i);
|
||||
int iDataPosition = parcel.dataPosition();
|
||||
if (size == 0) {
|
||||
return null;
|
||||
}
|
||||
byte[] bArrCreateByteArray = parcel.createByteArray();
|
||||
int i2 = parcel.readInt();
|
||||
parcel.setDataPosition(iDataPosition + size);
|
||||
return new BigDecimal(new BigInteger(bArrCreateByteArray), i2);
|
||||
}
|
||||
|
||||
public static BigDecimal[] createBigDecimalArray(Parcel parcel, int i) {
|
||||
int size = readSize(parcel, i);
|
||||
int iDataPosition = parcel.dataPosition();
|
||||
if (size == 0) {
|
||||
return null;
|
||||
}
|
||||
int i2 = parcel.readInt();
|
||||
BigDecimal[] bigDecimalArr = new BigDecimal[i2];
|
||||
for (int i3 = 0; i3 < i2; i3++) {
|
||||
byte[] bArrCreateByteArray = parcel.createByteArray();
|
||||
bigDecimalArr[i3] = new BigDecimal(new BigInteger(bArrCreateByteArray), parcel.readInt());
|
||||
}
|
||||
parcel.setDataPosition(iDataPosition + size);
|
||||
return bigDecimalArr;
|
||||
}
|
||||
|
||||
public static BigInteger createBigInteger(Parcel parcel, int i) {
|
||||
int size = readSize(parcel, i);
|
||||
int iDataPosition = parcel.dataPosition();
|
||||
if (size == 0) {
|
||||
return null;
|
||||
}
|
||||
byte[] bArrCreateByteArray = parcel.createByteArray();
|
||||
parcel.setDataPosition(iDataPosition + size);
|
||||
return new BigInteger(bArrCreateByteArray);
|
||||
}
|
||||
|
||||
public static BigInteger[] createBigIntegerArray(Parcel parcel, int i) {
|
||||
int size = readSize(parcel, i);
|
||||
int iDataPosition = parcel.dataPosition();
|
||||
if (size == 0) {
|
||||
return null;
|
||||
}
|
||||
int i2 = parcel.readInt();
|
||||
BigInteger[] bigIntegerArr = new BigInteger[i2];
|
||||
for (int i3 = 0; i3 < i2; i3++) {
|
||||
bigIntegerArr[i3] = new BigInteger(parcel.createByteArray());
|
||||
}
|
||||
parcel.setDataPosition(iDataPosition + size);
|
||||
return bigIntegerArr;
|
||||
}
|
||||
|
||||
public static boolean[] createBooleanArray(Parcel parcel, int i) {
|
||||
int size = readSize(parcel, i);
|
||||
int iDataPosition = parcel.dataPosition();
|
||||
if (size == 0) {
|
||||
return null;
|
||||
}
|
||||
boolean[] zArrCreateBooleanArray = parcel.createBooleanArray();
|
||||
parcel.setDataPosition(iDataPosition + size);
|
||||
return zArrCreateBooleanArray;
|
||||
}
|
||||
|
||||
public static ArrayList<Boolean> createBooleanList(Parcel parcel, int i) {
|
||||
int size = readSize(parcel, i);
|
||||
int iDataPosition = parcel.dataPosition();
|
||||
if (size == 0) {
|
||||
return null;
|
||||
}
|
||||
ArrayList<Boolean> arrayList = new ArrayList<>();
|
||||
int i2 = parcel.readInt();
|
||||
for (int i3 = 0; i3 < i2; i3++) {
|
||||
arrayList.add(Boolean.valueOf(parcel.readInt() != 0));
|
||||
}
|
||||
parcel.setDataPosition(iDataPosition + size);
|
||||
return arrayList;
|
||||
}
|
||||
|
||||
public static Bundle createBundle(Parcel parcel, int i) {
|
||||
int size = readSize(parcel, i);
|
||||
int iDataPosition = parcel.dataPosition();
|
||||
if (size == 0) {
|
||||
return null;
|
||||
}
|
||||
Bundle bundle = parcel.readBundle();
|
||||
parcel.setDataPosition(iDataPosition + size);
|
||||
return bundle;
|
||||
}
|
||||
|
||||
public static byte[] createByteArray(Parcel parcel, int i) {
|
||||
int size = readSize(parcel, i);
|
||||
int iDataPosition = parcel.dataPosition();
|
||||
if (size == 0) {
|
||||
return null;
|
||||
}
|
||||
byte[] bArrCreateByteArray = parcel.createByteArray();
|
||||
parcel.setDataPosition(iDataPosition + size);
|
||||
return bArrCreateByteArray;
|
||||
}
|
||||
|
||||
public static byte[][] createByteArrayArray(Parcel parcel, int i) {
|
||||
int size = readSize(parcel, i);
|
||||
int iDataPosition = parcel.dataPosition();
|
||||
if (size == 0) {
|
||||
return null;
|
||||
}
|
||||
int i2 = parcel.readInt();
|
||||
byte[][] bArr = new byte[i2][];
|
||||
for (int i3 = 0; i3 < i2; i3++) {
|
||||
bArr[i3] = parcel.createByteArray();
|
||||
}
|
||||
parcel.setDataPosition(iDataPosition + size);
|
||||
return bArr;
|
||||
}
|
||||
|
||||
public static SparseArray<byte[]> createByteArraySparseArray(Parcel parcel, int i) {
|
||||
int size = readSize(parcel, i);
|
||||
int iDataPosition = parcel.dataPosition();
|
||||
if (size == 0) {
|
||||
return null;
|
||||
}
|
||||
int i2 = parcel.readInt();
|
||||
SparseArray<byte[]> sparseArray = new SparseArray<>(i2);
|
||||
for (int i3 = 0; i3 < i2; i3++) {
|
||||
sparseArray.append(parcel.readInt(), parcel.createByteArray());
|
||||
}
|
||||
parcel.setDataPosition(iDataPosition + size);
|
||||
return sparseArray;
|
||||
}
|
||||
|
||||
public static char[] createCharArray(Parcel parcel, int i) {
|
||||
int size = readSize(parcel, i);
|
||||
int iDataPosition = parcel.dataPosition();
|
||||
if (size == 0) {
|
||||
return null;
|
||||
}
|
||||
char[] cArrCreateCharArray = parcel.createCharArray();
|
||||
parcel.setDataPosition(iDataPosition + size);
|
||||
return cArrCreateCharArray;
|
||||
}
|
||||
|
||||
public static double[] createDoubleArray(Parcel parcel, int i) {
|
||||
int size = readSize(parcel, i);
|
||||
int iDataPosition = parcel.dataPosition();
|
||||
if (size == 0) {
|
||||
return null;
|
||||
}
|
||||
double[] dArrCreateDoubleArray = parcel.createDoubleArray();
|
||||
parcel.setDataPosition(iDataPosition + size);
|
||||
return dArrCreateDoubleArray;
|
||||
}
|
||||
|
||||
public static ArrayList<Double> createDoubleList(Parcel parcel, int i) {
|
||||
int size = readSize(parcel, i);
|
||||
int iDataPosition = parcel.dataPosition();
|
||||
if (size == 0) {
|
||||
return null;
|
||||
}
|
||||
ArrayList<Double> arrayList = new ArrayList<>();
|
||||
int i2 = parcel.readInt();
|
||||
for (int i3 = 0; i3 < i2; i3++) {
|
||||
arrayList.add(Double.valueOf(parcel.readDouble()));
|
||||
}
|
||||
parcel.setDataPosition(iDataPosition + size);
|
||||
return arrayList;
|
||||
}
|
||||
|
||||
public static SparseArray<Double> createDoubleSparseArray(Parcel parcel, int i) {
|
||||
int size = readSize(parcel, i);
|
||||
int iDataPosition = parcel.dataPosition();
|
||||
if (size == 0) {
|
||||
return null;
|
||||
}
|
||||
SparseArray<Double> sparseArray = new SparseArray<>();
|
||||
int i2 = parcel.readInt();
|
||||
for (int i3 = 0; i3 < i2; i3++) {
|
||||
sparseArray.append(parcel.readInt(), Double.valueOf(parcel.readDouble()));
|
||||
}
|
||||
parcel.setDataPosition(iDataPosition + size);
|
||||
return sparseArray;
|
||||
}
|
||||
|
||||
public static float[] createFloatArray(Parcel parcel, int i) {
|
||||
int size = readSize(parcel, i);
|
||||
int iDataPosition = parcel.dataPosition();
|
||||
if (size == 0) {
|
||||
return null;
|
||||
}
|
||||
float[] fArrCreateFloatArray = parcel.createFloatArray();
|
||||
parcel.setDataPosition(iDataPosition + size);
|
||||
return fArrCreateFloatArray;
|
||||
}
|
||||
|
||||
public static ArrayList<Float> createFloatList(Parcel parcel, int i) {
|
||||
int size = readSize(parcel, i);
|
||||
int iDataPosition = parcel.dataPosition();
|
||||
if (size == 0) {
|
||||
return null;
|
||||
}
|
||||
ArrayList<Float> arrayList = new ArrayList<>();
|
||||
int i2 = parcel.readInt();
|
||||
for (int i3 = 0; i3 < i2; i3++) {
|
||||
arrayList.add(Float.valueOf(parcel.readFloat()));
|
||||
}
|
||||
parcel.setDataPosition(iDataPosition + size);
|
||||
return arrayList;
|
||||
}
|
||||
|
||||
public static SparseArray<Float> createFloatSparseArray(Parcel parcel, int i) {
|
||||
int size = readSize(parcel, i);
|
||||
int iDataPosition = parcel.dataPosition();
|
||||
if (size == 0) {
|
||||
return null;
|
||||
}
|
||||
SparseArray<Float> sparseArray = new SparseArray<>();
|
||||
int i2 = parcel.readInt();
|
||||
for (int i3 = 0; i3 < i2; i3++) {
|
||||
sparseArray.append(parcel.readInt(), Float.valueOf(parcel.readFloat()));
|
||||
}
|
||||
parcel.setDataPosition(iDataPosition + size);
|
||||
return sparseArray;
|
||||
}
|
||||
|
||||
public static IBinder[] createIBinderArray(Parcel parcel, int i) {
|
||||
int size = readSize(parcel, i);
|
||||
int iDataPosition = parcel.dataPosition();
|
||||
if (size == 0) {
|
||||
return null;
|
||||
}
|
||||
IBinder[] iBinderArrCreateBinderArray = parcel.createBinderArray();
|
||||
parcel.setDataPosition(iDataPosition + size);
|
||||
return iBinderArrCreateBinderArray;
|
||||
}
|
||||
|
||||
public static ArrayList<IBinder> createIBinderList(Parcel parcel, int i) {
|
||||
int size = readSize(parcel, i);
|
||||
int iDataPosition = parcel.dataPosition();
|
||||
if (size == 0) {
|
||||
return null;
|
||||
}
|
||||
ArrayList<IBinder> arrayListCreateBinderArrayList = parcel.createBinderArrayList();
|
||||
parcel.setDataPosition(iDataPosition + size);
|
||||
return arrayListCreateBinderArrayList;
|
||||
}
|
||||
|
||||
public static SparseArray<IBinder> createIBinderSparseArray(Parcel parcel, int i) {
|
||||
int size = readSize(parcel, i);
|
||||
int iDataPosition = parcel.dataPosition();
|
||||
if (size == 0) {
|
||||
return null;
|
||||
}
|
||||
int i2 = parcel.readInt();
|
||||
SparseArray<IBinder> sparseArray = new SparseArray<>(i2);
|
||||
for (int i3 = 0; i3 < i2; i3++) {
|
||||
sparseArray.append(parcel.readInt(), parcel.readStrongBinder());
|
||||
}
|
||||
parcel.setDataPosition(iDataPosition + size);
|
||||
return sparseArray;
|
||||
}
|
||||
|
||||
public static int[] createIntArray(Parcel parcel, int i) {
|
||||
int size = readSize(parcel, i);
|
||||
int iDataPosition = parcel.dataPosition();
|
||||
if (size == 0) {
|
||||
return null;
|
||||
}
|
||||
int[] iArrCreateIntArray = parcel.createIntArray();
|
||||
parcel.setDataPosition(iDataPosition + size);
|
||||
return iArrCreateIntArray;
|
||||
}
|
||||
|
||||
public static ArrayList<Integer> createIntegerList(Parcel parcel, int i) {
|
||||
int size = readSize(parcel, i);
|
||||
int iDataPosition = parcel.dataPosition();
|
||||
if (size == 0) {
|
||||
return null;
|
||||
}
|
||||
ArrayList<Integer> arrayList = new ArrayList<>();
|
||||
int i2 = parcel.readInt();
|
||||
for (int i3 = 0; i3 < i2; i3++) {
|
||||
arrayList.add(Integer.valueOf(parcel.readInt()));
|
||||
}
|
||||
parcel.setDataPosition(iDataPosition + size);
|
||||
return arrayList;
|
||||
}
|
||||
|
||||
public static long[] createLongArray(Parcel parcel, int i) {
|
||||
int size = readSize(parcel, i);
|
||||
int iDataPosition = parcel.dataPosition();
|
||||
if (size == 0) {
|
||||
return null;
|
||||
}
|
||||
long[] jArrCreateLongArray = parcel.createLongArray();
|
||||
parcel.setDataPosition(iDataPosition + size);
|
||||
return jArrCreateLongArray;
|
||||
}
|
||||
|
||||
public static ArrayList<Long> createLongList(Parcel parcel, int i) {
|
||||
int size = readSize(parcel, i);
|
||||
int iDataPosition = parcel.dataPosition();
|
||||
if (size == 0) {
|
||||
return null;
|
||||
}
|
||||
ArrayList<Long> arrayList = new ArrayList<>();
|
||||
int i2 = parcel.readInt();
|
||||
for (int i3 = 0; i3 < i2; i3++) {
|
||||
arrayList.add(Long.valueOf(parcel.readLong()));
|
||||
}
|
||||
parcel.setDataPosition(iDataPosition + size);
|
||||
return arrayList;
|
||||
}
|
||||
|
||||
public static Parcel createParcel(Parcel parcel, int i) {
|
||||
int size = readSize(parcel, i);
|
||||
int iDataPosition = parcel.dataPosition();
|
||||
if (size == 0) {
|
||||
return null;
|
||||
}
|
||||
Parcel parcelObtain = Parcel.obtain();
|
||||
parcelObtain.appendFrom(parcel, iDataPosition, size);
|
||||
parcel.setDataPosition(iDataPosition + size);
|
||||
return parcelObtain;
|
||||
}
|
||||
|
||||
public static Parcel[] createParcelArray(Parcel parcel, int i) {
|
||||
int size = readSize(parcel, i);
|
||||
int iDataPosition = parcel.dataPosition();
|
||||
if (size == 0) {
|
||||
return null;
|
||||
}
|
||||
int i2 = parcel.readInt();
|
||||
Parcel[] parcelArr = new Parcel[i2];
|
||||
for (int i3 = 0; i3 < i2; i3++) {
|
||||
int i4 = parcel.readInt();
|
||||
if (i4 != 0) {
|
||||
int iDataPosition2 = parcel.dataPosition();
|
||||
Parcel parcelObtain = Parcel.obtain();
|
||||
parcelObtain.appendFrom(parcel, iDataPosition2, i4);
|
||||
parcelArr[i3] = parcelObtain;
|
||||
parcel.setDataPosition(iDataPosition2 + i4);
|
||||
} else {
|
||||
parcelArr[i3] = null;
|
||||
}
|
||||
}
|
||||
parcel.setDataPosition(iDataPosition + size);
|
||||
return parcelArr;
|
||||
}
|
||||
|
||||
public static ArrayList<Parcel> createParcelList(Parcel parcel, int i) {
|
||||
int size = readSize(parcel, i);
|
||||
int iDataPosition = parcel.dataPosition();
|
||||
if (size == 0) {
|
||||
return null;
|
||||
}
|
||||
int i2 = parcel.readInt();
|
||||
ArrayList<Parcel> arrayList = new ArrayList<>();
|
||||
for (int i3 = 0; i3 < i2; i3++) {
|
||||
int i4 = parcel.readInt();
|
||||
if (i4 != 0) {
|
||||
int iDataPosition2 = parcel.dataPosition();
|
||||
Parcel parcelObtain = Parcel.obtain();
|
||||
parcelObtain.appendFrom(parcel, iDataPosition2, i4);
|
||||
arrayList.add(parcelObtain);
|
||||
parcel.setDataPosition(iDataPosition2 + i4);
|
||||
} else {
|
||||
arrayList.add(null);
|
||||
}
|
||||
}
|
||||
parcel.setDataPosition(iDataPosition + size);
|
||||
return arrayList;
|
||||
}
|
||||
|
||||
public static SparseArray<Parcel> createParcelSparseArray(Parcel parcel, int i) {
|
||||
int size = readSize(parcel, i);
|
||||
int iDataPosition = parcel.dataPosition();
|
||||
if (size == 0) {
|
||||
return null;
|
||||
}
|
||||
int i2 = parcel.readInt();
|
||||
SparseArray<Parcel> sparseArray = new SparseArray<>();
|
||||
for (int i3 = 0; i3 < i2; i3++) {
|
||||
int i4 = parcel.readInt();
|
||||
int i5 = parcel.readInt();
|
||||
if (i5 != 0) {
|
||||
int iDataPosition2 = parcel.dataPosition();
|
||||
Parcel parcelObtain = Parcel.obtain();
|
||||
parcelObtain.appendFrom(parcel, iDataPosition2, i5);
|
||||
sparseArray.append(i4, parcelObtain);
|
||||
parcel.setDataPosition(iDataPosition2 + i5);
|
||||
} else {
|
||||
sparseArray.append(i4, null);
|
||||
}
|
||||
}
|
||||
parcel.setDataPosition(iDataPosition + size);
|
||||
return sparseArray;
|
||||
}
|
||||
|
||||
public static <T extends Parcelable> T createParcelable(Parcel parcel, int i, Parcelable.Creator<T> creator) {
|
||||
int size = readSize(parcel, i);
|
||||
int iDataPosition = parcel.dataPosition();
|
||||
if (size == 0) {
|
||||
return null;
|
||||
}
|
||||
T tCreateFromParcel = creator.createFromParcel(parcel);
|
||||
parcel.setDataPosition(iDataPosition + size);
|
||||
return tCreateFromParcel;
|
||||
}
|
||||
|
||||
public static SparseBooleanArray createSparseBooleanArray(Parcel parcel, int i) {
|
||||
int size = readSize(parcel, i);
|
||||
int iDataPosition = parcel.dataPosition();
|
||||
if (size == 0) {
|
||||
return null;
|
||||
}
|
||||
SparseBooleanArray sparseBooleanArray = parcel.readSparseBooleanArray();
|
||||
parcel.setDataPosition(iDataPosition + size);
|
||||
return sparseBooleanArray;
|
||||
}
|
||||
|
||||
public static SparseIntArray createSparseIntArray(Parcel parcel, int i) {
|
||||
int size = readSize(parcel, i);
|
||||
int iDataPosition = parcel.dataPosition();
|
||||
if (size == 0) {
|
||||
return null;
|
||||
}
|
||||
SparseIntArray sparseIntArray = new SparseIntArray();
|
||||
int i2 = parcel.readInt();
|
||||
for (int i3 = 0; i3 < i2; i3++) {
|
||||
sparseIntArray.append(parcel.readInt(), parcel.readInt());
|
||||
}
|
||||
parcel.setDataPosition(iDataPosition + size);
|
||||
return sparseIntArray;
|
||||
}
|
||||
|
||||
public static SparseLongArray createSparseLongArray(Parcel parcel, int i) {
|
||||
int size = readSize(parcel, i);
|
||||
int iDataPosition = parcel.dataPosition();
|
||||
if (size == 0) {
|
||||
return null;
|
||||
}
|
||||
SparseLongArray sparseLongArray = new SparseLongArray();
|
||||
int i2 = parcel.readInt();
|
||||
for (int i3 = 0; i3 < i2; i3++) {
|
||||
sparseLongArray.append(parcel.readInt(), parcel.readLong());
|
||||
}
|
||||
parcel.setDataPosition(iDataPosition + size);
|
||||
return sparseLongArray;
|
||||
}
|
||||
|
||||
public static String createString(Parcel parcel, int i) {
|
||||
int size = readSize(parcel, i);
|
||||
int iDataPosition = parcel.dataPosition();
|
||||
if (size == 0) {
|
||||
return null;
|
||||
}
|
||||
String string = parcel.readString();
|
||||
parcel.setDataPosition(iDataPosition + size);
|
||||
return string;
|
||||
}
|
||||
|
||||
public static String[] createStringArray(Parcel parcel, int i) {
|
||||
int size = readSize(parcel, i);
|
||||
int iDataPosition = parcel.dataPosition();
|
||||
if (size == 0) {
|
||||
return null;
|
||||
}
|
||||
String[] strArrCreateStringArray = parcel.createStringArray();
|
||||
parcel.setDataPosition(iDataPosition + size);
|
||||
return strArrCreateStringArray;
|
||||
}
|
||||
|
||||
public static ArrayList<String> createStringList(Parcel parcel, int i) {
|
||||
int size = readSize(parcel, i);
|
||||
int iDataPosition = parcel.dataPosition();
|
||||
if (size == 0) {
|
||||
return null;
|
||||
}
|
||||
ArrayList<String> arrayListCreateStringArrayList = parcel.createStringArrayList();
|
||||
parcel.setDataPosition(iDataPosition + size);
|
||||
return arrayListCreateStringArrayList;
|
||||
}
|
||||
|
||||
public static SparseArray<String> createStringSparseArray(Parcel parcel, int i) {
|
||||
int size = readSize(parcel, i);
|
||||
int iDataPosition = parcel.dataPosition();
|
||||
if (size == 0) {
|
||||
return null;
|
||||
}
|
||||
SparseArray<String> sparseArray = new SparseArray<>();
|
||||
int i2 = parcel.readInt();
|
||||
for (int i3 = 0; i3 < i2; i3++) {
|
||||
sparseArray.append(parcel.readInt(), parcel.readString());
|
||||
}
|
||||
parcel.setDataPosition(iDataPosition + size);
|
||||
return sparseArray;
|
||||
}
|
||||
|
||||
public static <T> T[] createTypedArray(Parcel parcel, int i, Parcelable.Creator<T> creator) {
|
||||
int size = readSize(parcel, i);
|
||||
int iDataPosition = parcel.dataPosition();
|
||||
if (size == 0) {
|
||||
return null;
|
||||
}
|
||||
T[] tArr = (T[]) parcel.createTypedArray(creator);
|
||||
parcel.setDataPosition(iDataPosition + size);
|
||||
return tArr;
|
||||
}
|
||||
|
||||
public static <T> ArrayList<T> createTypedList(Parcel parcel, int i, Parcelable.Creator<T> creator) {
|
||||
int size = readSize(parcel, i);
|
||||
int iDataPosition = parcel.dataPosition();
|
||||
if (size == 0) {
|
||||
return null;
|
||||
}
|
||||
ArrayList<T> arrayListCreateTypedArrayList = parcel.createTypedArrayList(creator);
|
||||
parcel.setDataPosition(iDataPosition + size);
|
||||
return arrayListCreateTypedArrayList;
|
||||
}
|
||||
|
||||
public static <T> SparseArray<T> createTypedSparseArray(Parcel parcel, int i, Parcelable.Creator<T> creator) {
|
||||
int size = readSize(parcel, i);
|
||||
int iDataPosition = parcel.dataPosition();
|
||||
if (size == 0) {
|
||||
return null;
|
||||
}
|
||||
int i2 = parcel.readInt();
|
||||
SparseArray<T> sparseArray = new SparseArray<>();
|
||||
for (int i3 = 0; i3 < i2; i3++) {
|
||||
sparseArray.append(parcel.readInt(), parcel.readInt() != 0 ? creator.createFromParcel(parcel) : null);
|
||||
}
|
||||
parcel.setDataPosition(iDataPosition + size);
|
||||
return sparseArray;
|
||||
}
|
||||
|
||||
public static void ensureAtEnd(Parcel parcel, int i) {
|
||||
if (parcel.dataPosition() == i) {
|
||||
return;
|
||||
}
|
||||
throw new ParseException("Overread allowed size end=" + i, parcel);
|
||||
}
|
||||
|
||||
public static int getFieldId(int i) {
|
||||
return (char) i;
|
||||
}
|
||||
|
||||
public static boolean readBoolean(Parcel parcel, int i) {
|
||||
zzb(parcel, i, 4);
|
||||
return parcel.readInt() != 0;
|
||||
}
|
||||
|
||||
public static Boolean readBooleanObject(Parcel parcel, int i) {
|
||||
int size = readSize(parcel, i);
|
||||
if (size == 0) {
|
||||
return null;
|
||||
}
|
||||
zza(parcel, i, size, 4);
|
||||
return Boolean.valueOf(parcel.readInt() != 0);
|
||||
}
|
||||
|
||||
public static byte readByte(Parcel parcel, int i) {
|
||||
zzb(parcel, i, 4);
|
||||
return (byte) parcel.readInt();
|
||||
}
|
||||
|
||||
public static char readChar(Parcel parcel, int i) {
|
||||
zzb(parcel, i, 4);
|
||||
return (char) parcel.readInt();
|
||||
}
|
||||
|
||||
public static double readDouble(Parcel parcel, int i) {
|
||||
zzb(parcel, i, 8);
|
||||
return parcel.readDouble();
|
||||
}
|
||||
|
||||
public static Double readDoubleObject(Parcel parcel, int i) {
|
||||
int size = readSize(parcel, i);
|
||||
if (size == 0) {
|
||||
return null;
|
||||
}
|
||||
zza(parcel, i, size, 8);
|
||||
return Double.valueOf(parcel.readDouble());
|
||||
}
|
||||
|
||||
public static float readFloat(Parcel parcel, int i) {
|
||||
zzb(parcel, i, 4);
|
||||
return parcel.readFloat();
|
||||
}
|
||||
|
||||
public static Float readFloatObject(Parcel parcel, int i) {
|
||||
int size = readSize(parcel, i);
|
||||
if (size == 0) {
|
||||
return null;
|
||||
}
|
||||
zza(parcel, i, size, 4);
|
||||
return Float.valueOf(parcel.readFloat());
|
||||
}
|
||||
|
||||
public static int readHeader(Parcel parcel) {
|
||||
return parcel.readInt();
|
||||
}
|
||||
|
||||
public static IBinder readIBinder(Parcel parcel, int i) {
|
||||
int size = readSize(parcel, i);
|
||||
int iDataPosition = parcel.dataPosition();
|
||||
if (size == 0) {
|
||||
return null;
|
||||
}
|
||||
IBinder strongBinder = parcel.readStrongBinder();
|
||||
parcel.setDataPosition(iDataPosition + size);
|
||||
return strongBinder;
|
||||
}
|
||||
|
||||
public static int readInt(Parcel parcel, int i) {
|
||||
zzb(parcel, i, 4);
|
||||
return parcel.readInt();
|
||||
}
|
||||
|
||||
public static Integer readIntegerObject(Parcel parcel, int i) {
|
||||
int size = readSize(parcel, i);
|
||||
if (size == 0) {
|
||||
return null;
|
||||
}
|
||||
zza(parcel, i, size, 4);
|
||||
return Integer.valueOf(parcel.readInt());
|
||||
}
|
||||
|
||||
public static void readList(Parcel parcel, int i, List list, ClassLoader classLoader) {
|
||||
int size = readSize(parcel, i);
|
||||
int iDataPosition = parcel.dataPosition();
|
||||
if (size == 0) {
|
||||
return;
|
||||
}
|
||||
parcel.readList(list, classLoader);
|
||||
parcel.setDataPosition(iDataPosition + size);
|
||||
}
|
||||
|
||||
public static long readLong(Parcel parcel, int i) {
|
||||
zzb(parcel, i, 8);
|
||||
return parcel.readLong();
|
||||
}
|
||||
|
||||
public static Long readLongObject(Parcel parcel, int i) {
|
||||
int size = readSize(parcel, i);
|
||||
if (size == 0) {
|
||||
return null;
|
||||
}
|
||||
zza(parcel, i, size, 8);
|
||||
return Long.valueOf(parcel.readLong());
|
||||
}
|
||||
|
||||
public static PendingIntent readPendingIntent(Parcel parcel, int i) {
|
||||
int size = readSize(parcel, i);
|
||||
int iDataPosition = parcel.dataPosition();
|
||||
if (size == 0) {
|
||||
return null;
|
||||
}
|
||||
PendingIntent pendingIntentOrNullFromParcel = PendingIntent.readPendingIntentOrNullFromParcel(parcel);
|
||||
parcel.setDataPosition(iDataPosition + size);
|
||||
return pendingIntentOrNullFromParcel;
|
||||
}
|
||||
|
||||
public static short readShort(Parcel parcel, int i) {
|
||||
zzb(parcel, i, 4);
|
||||
return (short) parcel.readInt();
|
||||
}
|
||||
|
||||
public static int readSize(Parcel parcel, int i) {
|
||||
return (i & SupportMenu.CATEGORY_MASK) != -65536 ? (char) (i >> 16) : parcel.readInt();
|
||||
}
|
||||
|
||||
public static void skipUnknownField(Parcel parcel, int i) {
|
||||
parcel.setDataPosition(parcel.dataPosition() + readSize(parcel, i));
|
||||
}
|
||||
|
||||
public static int validateObjectHeader(Parcel parcel) {
|
||||
int header = readHeader(parcel);
|
||||
int size = readSize(parcel, header);
|
||||
int fieldId = getFieldId(header);
|
||||
int iDataPosition = parcel.dataPosition();
|
||||
if (fieldId != 20293) {
|
||||
throw new ParseException("Expected object header. Got 0x".concat(String.valueOf(Integer.toHexString(header))), parcel);
|
||||
}
|
||||
int i = size + iDataPosition;
|
||||
if (i >= iDataPosition && i <= parcel.dataSize()) {
|
||||
return i;
|
||||
}
|
||||
throw new ParseException("Size read is invalid start=" + iDataPosition + " end=" + i, parcel);
|
||||
}
|
||||
|
||||
private static void zza(Parcel parcel, int i, int i2, int i3) {
|
||||
if (i2 == i3) {
|
||||
return;
|
||||
}
|
||||
throw new ParseException("Expected size " + i3 + " got " + i2 + " (0x" + Integer.toHexString(i2) + ")", parcel);
|
||||
}
|
||||
|
||||
private static void zzb(Parcel parcel, int i, int i2) {
|
||||
int size = readSize(parcel, i);
|
||||
if (size == i2) {
|
||||
return;
|
||||
}
|
||||
throw new ParseException("Expected size " + i2 + " got " + size + " (0x" + Integer.toHexString(size) + ")", parcel);
|
||||
}
|
||||
}
|
||||
+790
@@ -0,0 +1,790 @@
|
||||
package com.google.android.gms.common.internal.safeparcel;
|
||||
|
||||
import android.app.PendingIntent;
|
||||
import android.os.Bundle;
|
||||
import android.os.IBinder;
|
||||
import android.os.Parcel;
|
||||
import android.os.Parcelable;
|
||||
import android.util.SparseArray;
|
||||
import android.util.SparseBooleanArray;
|
||||
import android.util.SparseIntArray;
|
||||
import android.util.SparseLongArray;
|
||||
import androidx.core.internal.view.SupportMenu;
|
||||
import java.math.BigDecimal;
|
||||
import java.math.BigInteger;
|
||||
import java.util.List;
|
||||
|
||||
/* JADX INFO: compiled from: com.google.android.gms:play-services-basement@@18.3.0 */
|
||||
/* JADX INFO: loaded from: classes2.dex */
|
||||
public class SafeParcelWriter {
|
||||
private SafeParcelWriter() {
|
||||
}
|
||||
|
||||
public static int beginObjectHeader(Parcel parcel) {
|
||||
return zza(parcel, 20293);
|
||||
}
|
||||
|
||||
public static void finishObjectHeader(Parcel parcel, int i) {
|
||||
zzb(parcel, i);
|
||||
}
|
||||
|
||||
public static void writeBigDecimal(Parcel parcel, int i, BigDecimal bigDecimal, boolean z) {
|
||||
if (bigDecimal == null) {
|
||||
if (z) {
|
||||
zzc(parcel, i, 0);
|
||||
}
|
||||
} else {
|
||||
int iZza = zza(parcel, i);
|
||||
parcel.writeByteArray(bigDecimal.unscaledValue().toByteArray());
|
||||
parcel.writeInt(bigDecimal.scale());
|
||||
zzb(parcel, iZza);
|
||||
}
|
||||
}
|
||||
|
||||
public static void writeBigDecimalArray(Parcel parcel, int i, BigDecimal[] bigDecimalArr, boolean z) {
|
||||
if (bigDecimalArr == null) {
|
||||
if (z) {
|
||||
zzc(parcel, i, 0);
|
||||
return;
|
||||
}
|
||||
return;
|
||||
}
|
||||
int iZza = zza(parcel, i);
|
||||
int length = bigDecimalArr.length;
|
||||
parcel.writeInt(length);
|
||||
for (int i2 = 0; i2 < length; i2++) {
|
||||
parcel.writeByteArray(bigDecimalArr[i2].unscaledValue().toByteArray());
|
||||
parcel.writeInt(bigDecimalArr[i2].scale());
|
||||
}
|
||||
zzb(parcel, iZza);
|
||||
}
|
||||
|
||||
public static void writeBigInteger(Parcel parcel, int i, BigInteger bigInteger, boolean z) {
|
||||
if (bigInteger == null) {
|
||||
if (z) {
|
||||
zzc(parcel, i, 0);
|
||||
}
|
||||
} else {
|
||||
int iZza = zza(parcel, i);
|
||||
parcel.writeByteArray(bigInteger.toByteArray());
|
||||
zzb(parcel, iZza);
|
||||
}
|
||||
}
|
||||
|
||||
public static void writeBigIntegerArray(Parcel parcel, int i, BigInteger[] bigIntegerArr, boolean z) {
|
||||
if (bigIntegerArr == null) {
|
||||
if (z) {
|
||||
zzc(parcel, i, 0);
|
||||
return;
|
||||
}
|
||||
return;
|
||||
}
|
||||
int iZza = zza(parcel, i);
|
||||
parcel.writeInt(bigIntegerArr.length);
|
||||
for (BigInteger bigInteger : bigIntegerArr) {
|
||||
parcel.writeByteArray(bigInteger.toByteArray());
|
||||
}
|
||||
zzb(parcel, iZza);
|
||||
}
|
||||
|
||||
public static void writeBoolean(Parcel parcel, int i, boolean z) {
|
||||
zzc(parcel, i, 4);
|
||||
parcel.writeInt(z ? 1 : 0);
|
||||
}
|
||||
|
||||
public static void writeBooleanArray(Parcel parcel, int i, boolean[] zArr, boolean z) {
|
||||
if (zArr == null) {
|
||||
if (z) {
|
||||
zzc(parcel, i, 0);
|
||||
}
|
||||
} else {
|
||||
int iZza = zza(parcel, i);
|
||||
parcel.writeBooleanArray(zArr);
|
||||
zzb(parcel, iZza);
|
||||
}
|
||||
}
|
||||
|
||||
public static void writeBooleanList(Parcel parcel, int i, List<Boolean> list, boolean z) {
|
||||
if (list == null) {
|
||||
if (z) {
|
||||
zzc(parcel, i, 0);
|
||||
return;
|
||||
}
|
||||
return;
|
||||
}
|
||||
int iZza = zza(parcel, i);
|
||||
int size = list.size();
|
||||
parcel.writeInt(size);
|
||||
for (int i2 = 0; i2 < size; i2++) {
|
||||
parcel.writeInt(list.get(i2).booleanValue() ? 1 : 0);
|
||||
}
|
||||
zzb(parcel, iZza);
|
||||
}
|
||||
|
||||
public static void writeBooleanObject(Parcel parcel, int i, Boolean bool, boolean z) {
|
||||
if (bool != null) {
|
||||
zzc(parcel, i, 4);
|
||||
parcel.writeInt(bool.booleanValue() ? 1 : 0);
|
||||
} else if (z) {
|
||||
zzc(parcel, i, 0);
|
||||
}
|
||||
}
|
||||
|
||||
public static void writeBundle(Parcel parcel, int i, Bundle bundle, boolean z) {
|
||||
if (bundle == null) {
|
||||
if (z) {
|
||||
zzc(parcel, i, 0);
|
||||
}
|
||||
} else {
|
||||
int iZza = zza(parcel, i);
|
||||
parcel.writeBundle(bundle);
|
||||
zzb(parcel, iZza);
|
||||
}
|
||||
}
|
||||
|
||||
public static void writeByte(Parcel parcel, int i, byte b) {
|
||||
zzc(parcel, i, 4);
|
||||
parcel.writeInt(b);
|
||||
}
|
||||
|
||||
public static void writeByteArray(Parcel parcel, int i, byte[] bArr, boolean z) {
|
||||
if (bArr == null) {
|
||||
if (z) {
|
||||
zzc(parcel, i, 0);
|
||||
}
|
||||
} else {
|
||||
int iZza = zza(parcel, i);
|
||||
parcel.writeByteArray(bArr);
|
||||
zzb(parcel, iZza);
|
||||
}
|
||||
}
|
||||
|
||||
public static void writeByteArrayArray(Parcel parcel, int i, byte[][] bArr, boolean z) {
|
||||
if (bArr == null) {
|
||||
if (z) {
|
||||
zzc(parcel, i, 0);
|
||||
return;
|
||||
}
|
||||
return;
|
||||
}
|
||||
int iZza = zza(parcel, i);
|
||||
parcel.writeInt(bArr.length);
|
||||
for (byte[] bArr2 : bArr) {
|
||||
parcel.writeByteArray(bArr2);
|
||||
}
|
||||
zzb(parcel, iZza);
|
||||
}
|
||||
|
||||
public static void writeByteArraySparseArray(Parcel parcel, int i, SparseArray<byte[]> sparseArray, boolean z) {
|
||||
if (sparseArray == null) {
|
||||
if (z) {
|
||||
zzc(parcel, i, 0);
|
||||
return;
|
||||
}
|
||||
return;
|
||||
}
|
||||
int iZza = zza(parcel, i);
|
||||
int size = sparseArray.size();
|
||||
parcel.writeInt(size);
|
||||
for (int i2 = 0; i2 < size; i2++) {
|
||||
parcel.writeInt(sparseArray.keyAt(i2));
|
||||
parcel.writeByteArray(sparseArray.valueAt(i2));
|
||||
}
|
||||
zzb(parcel, iZza);
|
||||
}
|
||||
|
||||
public static void writeChar(Parcel parcel, int i, char c) {
|
||||
zzc(parcel, i, 4);
|
||||
parcel.writeInt(c);
|
||||
}
|
||||
|
||||
public static void writeCharArray(Parcel parcel, int i, char[] cArr, boolean z) {
|
||||
if (cArr == null) {
|
||||
if (z) {
|
||||
zzc(parcel, i, 0);
|
||||
}
|
||||
} else {
|
||||
int iZza = zza(parcel, i);
|
||||
parcel.writeCharArray(cArr);
|
||||
zzb(parcel, iZza);
|
||||
}
|
||||
}
|
||||
|
||||
public static void writeDouble(Parcel parcel, int i, double d) {
|
||||
zzc(parcel, i, 8);
|
||||
parcel.writeDouble(d);
|
||||
}
|
||||
|
||||
public static void writeDoubleArray(Parcel parcel, int i, double[] dArr, boolean z) {
|
||||
if (dArr == null) {
|
||||
if (z) {
|
||||
zzc(parcel, i, 0);
|
||||
}
|
||||
} else {
|
||||
int iZza = zza(parcel, i);
|
||||
parcel.writeDoubleArray(dArr);
|
||||
zzb(parcel, iZza);
|
||||
}
|
||||
}
|
||||
|
||||
public static void writeDoubleList(Parcel parcel, int i, List<Double> list, boolean z) {
|
||||
if (list == null) {
|
||||
if (z) {
|
||||
zzc(parcel, i, 0);
|
||||
return;
|
||||
}
|
||||
return;
|
||||
}
|
||||
int iZza = zza(parcel, i);
|
||||
int size = list.size();
|
||||
parcel.writeInt(size);
|
||||
for (int i2 = 0; i2 < size; i2++) {
|
||||
parcel.writeDouble(list.get(i2).doubleValue());
|
||||
}
|
||||
zzb(parcel, iZza);
|
||||
}
|
||||
|
||||
public static void writeDoubleObject(Parcel parcel, int i, Double d, boolean z) {
|
||||
if (d != null) {
|
||||
zzc(parcel, i, 8);
|
||||
parcel.writeDouble(d.doubleValue());
|
||||
} else if (z) {
|
||||
zzc(parcel, i, 0);
|
||||
}
|
||||
}
|
||||
|
||||
public static void writeDoubleSparseArray(Parcel parcel, int i, SparseArray<Double> sparseArray, boolean z) {
|
||||
if (sparseArray == null) {
|
||||
if (z) {
|
||||
zzc(parcel, i, 0);
|
||||
return;
|
||||
}
|
||||
return;
|
||||
}
|
||||
int iZza = zza(parcel, i);
|
||||
int size = sparseArray.size();
|
||||
parcel.writeInt(size);
|
||||
for (int i2 = 0; i2 < size; i2++) {
|
||||
parcel.writeInt(sparseArray.keyAt(i2));
|
||||
parcel.writeDouble(sparseArray.valueAt(i2).doubleValue());
|
||||
}
|
||||
zzb(parcel, iZza);
|
||||
}
|
||||
|
||||
public static void writeFloat(Parcel parcel, int i, float f) {
|
||||
zzc(parcel, i, 4);
|
||||
parcel.writeFloat(f);
|
||||
}
|
||||
|
||||
public static void writeFloatArray(Parcel parcel, int i, float[] fArr, boolean z) {
|
||||
if (fArr == null) {
|
||||
if (z) {
|
||||
zzc(parcel, i, 0);
|
||||
}
|
||||
} else {
|
||||
int iZza = zza(parcel, i);
|
||||
parcel.writeFloatArray(fArr);
|
||||
zzb(parcel, iZza);
|
||||
}
|
||||
}
|
||||
|
||||
public static void writeFloatList(Parcel parcel, int i, List<Float> list, boolean z) {
|
||||
if (list == null) {
|
||||
if (z) {
|
||||
zzc(parcel, i, 0);
|
||||
return;
|
||||
}
|
||||
return;
|
||||
}
|
||||
int iZza = zza(parcel, i);
|
||||
int size = list.size();
|
||||
parcel.writeInt(size);
|
||||
for (int i2 = 0; i2 < size; i2++) {
|
||||
parcel.writeFloat(list.get(i2).floatValue());
|
||||
}
|
||||
zzb(parcel, iZza);
|
||||
}
|
||||
|
||||
public static void writeFloatObject(Parcel parcel, int i, Float f, boolean z) {
|
||||
if (f != null) {
|
||||
zzc(parcel, i, 4);
|
||||
parcel.writeFloat(f.floatValue());
|
||||
} else if (z) {
|
||||
zzc(parcel, i, 0);
|
||||
}
|
||||
}
|
||||
|
||||
public static void writeFloatSparseArray(Parcel parcel, int i, SparseArray<Float> sparseArray, boolean z) {
|
||||
if (sparseArray == null) {
|
||||
if (z) {
|
||||
zzc(parcel, i, 0);
|
||||
return;
|
||||
}
|
||||
return;
|
||||
}
|
||||
int iZza = zza(parcel, i);
|
||||
int size = sparseArray.size();
|
||||
parcel.writeInt(size);
|
||||
for (int i2 = 0; i2 < size; i2++) {
|
||||
parcel.writeInt(sparseArray.keyAt(i2));
|
||||
parcel.writeFloat(sparseArray.valueAt(i2).floatValue());
|
||||
}
|
||||
zzb(parcel, iZza);
|
||||
}
|
||||
|
||||
public static void writeIBinder(Parcel parcel, int i, IBinder iBinder, boolean z) {
|
||||
if (iBinder == null) {
|
||||
if (z) {
|
||||
zzc(parcel, i, 0);
|
||||
}
|
||||
} else {
|
||||
int iZza = zza(parcel, i);
|
||||
parcel.writeStrongBinder(iBinder);
|
||||
zzb(parcel, iZza);
|
||||
}
|
||||
}
|
||||
|
||||
public static void writeIBinderArray(Parcel parcel, int i, IBinder[] iBinderArr, boolean z) {
|
||||
if (iBinderArr == null) {
|
||||
if (z) {
|
||||
zzc(parcel, i, 0);
|
||||
}
|
||||
} else {
|
||||
int iZza = zza(parcel, i);
|
||||
parcel.writeBinderArray(iBinderArr);
|
||||
zzb(parcel, iZza);
|
||||
}
|
||||
}
|
||||
|
||||
public static void writeIBinderList(Parcel parcel, int i, List<IBinder> list, boolean z) {
|
||||
if (list == null) {
|
||||
if (z) {
|
||||
zzc(parcel, i, 0);
|
||||
}
|
||||
} else {
|
||||
int iZza = zza(parcel, i);
|
||||
parcel.writeBinderList(list);
|
||||
zzb(parcel, iZza);
|
||||
}
|
||||
}
|
||||
|
||||
public static void writeIBinderSparseArray(Parcel parcel, int i, SparseArray<IBinder> sparseArray, boolean z) {
|
||||
if (sparseArray == null) {
|
||||
if (z) {
|
||||
zzc(parcel, i, 0);
|
||||
return;
|
||||
}
|
||||
return;
|
||||
}
|
||||
int iZza = zza(parcel, i);
|
||||
int size = sparseArray.size();
|
||||
parcel.writeInt(size);
|
||||
for (int i2 = 0; i2 < size; i2++) {
|
||||
parcel.writeInt(sparseArray.keyAt(i2));
|
||||
parcel.writeStrongBinder(sparseArray.valueAt(i2));
|
||||
}
|
||||
zzb(parcel, iZza);
|
||||
}
|
||||
|
||||
public static void writeInt(Parcel parcel, int i, int i2) {
|
||||
zzc(parcel, i, 4);
|
||||
parcel.writeInt(i2);
|
||||
}
|
||||
|
||||
public static void writeIntArray(Parcel parcel, int i, int[] iArr, boolean z) {
|
||||
if (iArr == null) {
|
||||
if (z) {
|
||||
zzc(parcel, i, 0);
|
||||
}
|
||||
} else {
|
||||
int iZza = zza(parcel, i);
|
||||
parcel.writeIntArray(iArr);
|
||||
zzb(parcel, iZza);
|
||||
}
|
||||
}
|
||||
|
||||
public static void writeIntegerList(Parcel parcel, int i, List<Integer> list, boolean z) {
|
||||
if (list == null) {
|
||||
if (z) {
|
||||
zzc(parcel, i, 0);
|
||||
return;
|
||||
}
|
||||
return;
|
||||
}
|
||||
int iZza = zza(parcel, i);
|
||||
int size = list.size();
|
||||
parcel.writeInt(size);
|
||||
for (int i2 = 0; i2 < size; i2++) {
|
||||
parcel.writeInt(list.get(i2).intValue());
|
||||
}
|
||||
zzb(parcel, iZza);
|
||||
}
|
||||
|
||||
public static void writeIntegerObject(Parcel parcel, int i, Integer num, boolean z) {
|
||||
if (num != null) {
|
||||
zzc(parcel, i, 4);
|
||||
parcel.writeInt(num.intValue());
|
||||
} else if (z) {
|
||||
zzc(parcel, i, 0);
|
||||
}
|
||||
}
|
||||
|
||||
public static void writeList(Parcel parcel, int i, List list, boolean z) {
|
||||
if (list == null) {
|
||||
if (z) {
|
||||
zzc(parcel, i, 0);
|
||||
}
|
||||
} else {
|
||||
int iZza = zza(parcel, i);
|
||||
parcel.writeList(list);
|
||||
zzb(parcel, iZza);
|
||||
}
|
||||
}
|
||||
|
||||
public static void writeLong(Parcel parcel, int i, long j) {
|
||||
zzc(parcel, i, 8);
|
||||
parcel.writeLong(j);
|
||||
}
|
||||
|
||||
public static void writeLongArray(Parcel parcel, int i, long[] jArr, boolean z) {
|
||||
if (jArr == null) {
|
||||
if (z) {
|
||||
zzc(parcel, i, 0);
|
||||
}
|
||||
} else {
|
||||
int iZza = zza(parcel, i);
|
||||
parcel.writeLongArray(jArr);
|
||||
zzb(parcel, iZza);
|
||||
}
|
||||
}
|
||||
|
||||
public static void writeLongList(Parcel parcel, int i, List<Long> list, boolean z) {
|
||||
if (list == null) {
|
||||
if (z) {
|
||||
zzc(parcel, i, 0);
|
||||
return;
|
||||
}
|
||||
return;
|
||||
}
|
||||
int iZza = zza(parcel, i);
|
||||
int size = list.size();
|
||||
parcel.writeInt(size);
|
||||
for (int i2 = 0; i2 < size; i2++) {
|
||||
parcel.writeLong(list.get(i2).longValue());
|
||||
}
|
||||
zzb(parcel, iZza);
|
||||
}
|
||||
|
||||
public static void writeLongObject(Parcel parcel, int i, Long l, boolean z) {
|
||||
if (l != null) {
|
||||
zzc(parcel, i, 8);
|
||||
parcel.writeLong(l.longValue());
|
||||
} else if (z) {
|
||||
zzc(parcel, i, 0);
|
||||
}
|
||||
}
|
||||
|
||||
public static void writeParcel(Parcel parcel, int i, Parcel parcel2, boolean z) {
|
||||
if (parcel2 == null) {
|
||||
if (z) {
|
||||
zzc(parcel, i, 0);
|
||||
}
|
||||
} else {
|
||||
int iZza = zza(parcel, i);
|
||||
parcel.appendFrom(parcel2, 0, parcel2.dataSize());
|
||||
zzb(parcel, iZza);
|
||||
}
|
||||
}
|
||||
|
||||
public static void writeParcelArray(Parcel parcel, int i, Parcel[] parcelArr, boolean z) {
|
||||
if (parcelArr == null) {
|
||||
if (z) {
|
||||
zzc(parcel, i, 0);
|
||||
return;
|
||||
}
|
||||
return;
|
||||
}
|
||||
int iZza = zza(parcel, i);
|
||||
parcel.writeInt(parcelArr.length);
|
||||
for (Parcel parcel2 : parcelArr) {
|
||||
if (parcel2 != null) {
|
||||
parcel.writeInt(parcel2.dataSize());
|
||||
parcel.appendFrom(parcel2, 0, parcel2.dataSize());
|
||||
} else {
|
||||
parcel.writeInt(0);
|
||||
}
|
||||
}
|
||||
zzb(parcel, iZza);
|
||||
}
|
||||
|
||||
public static void writeParcelList(Parcel parcel, int i, List<Parcel> list, boolean z) {
|
||||
if (list == null) {
|
||||
if (z) {
|
||||
zzc(parcel, i, 0);
|
||||
return;
|
||||
}
|
||||
return;
|
||||
}
|
||||
int iZza = zza(parcel, i);
|
||||
int size = list.size();
|
||||
parcel.writeInt(size);
|
||||
for (int i2 = 0; i2 < size; i2++) {
|
||||
Parcel parcel2 = list.get(i2);
|
||||
if (parcel2 != null) {
|
||||
parcel.writeInt(parcel2.dataSize());
|
||||
parcel.appendFrom(parcel2, 0, parcel2.dataSize());
|
||||
} else {
|
||||
parcel.writeInt(0);
|
||||
}
|
||||
}
|
||||
zzb(parcel, iZza);
|
||||
}
|
||||
|
||||
public static void writeParcelSparseArray(Parcel parcel, int i, SparseArray<Parcel> sparseArray, boolean z) {
|
||||
if (sparseArray == null) {
|
||||
if (z) {
|
||||
zzc(parcel, i, 0);
|
||||
return;
|
||||
}
|
||||
return;
|
||||
}
|
||||
int iZza = zza(parcel, i);
|
||||
int size = sparseArray.size();
|
||||
parcel.writeInt(size);
|
||||
for (int i2 = 0; i2 < size; i2++) {
|
||||
parcel.writeInt(sparseArray.keyAt(i2));
|
||||
Parcel parcelValueAt = sparseArray.valueAt(i2);
|
||||
if (parcelValueAt != null) {
|
||||
parcel.writeInt(parcelValueAt.dataSize());
|
||||
parcel.appendFrom(parcelValueAt, 0, parcelValueAt.dataSize());
|
||||
} else {
|
||||
parcel.writeInt(0);
|
||||
}
|
||||
}
|
||||
zzb(parcel, iZza);
|
||||
}
|
||||
|
||||
public static void writeParcelable(Parcel parcel, int i, Parcelable parcelable, int i2, boolean z) {
|
||||
if (parcelable == null) {
|
||||
if (z) {
|
||||
zzc(parcel, i, 0);
|
||||
}
|
||||
} else {
|
||||
int iZza = zza(parcel, i);
|
||||
parcelable.writeToParcel(parcel, i2);
|
||||
zzb(parcel, iZza);
|
||||
}
|
||||
}
|
||||
|
||||
public static void writePendingIntent(Parcel parcel, int i, PendingIntent pendingIntent, boolean z) {
|
||||
if (pendingIntent == null) {
|
||||
if (z) {
|
||||
zzc(parcel, i, 0);
|
||||
}
|
||||
} else {
|
||||
int iZza = zza(parcel, i);
|
||||
PendingIntent.writePendingIntentOrNullToParcel(pendingIntent, parcel);
|
||||
zzb(parcel, iZza);
|
||||
}
|
||||
}
|
||||
|
||||
public static void writeShort(Parcel parcel, int i, short s) {
|
||||
zzc(parcel, i, 4);
|
||||
parcel.writeInt(s);
|
||||
}
|
||||
|
||||
public static void writeSparseBooleanArray(Parcel parcel, int i, SparseBooleanArray sparseBooleanArray, boolean z) {
|
||||
if (sparseBooleanArray == null) {
|
||||
if (z) {
|
||||
zzc(parcel, i, 0);
|
||||
}
|
||||
} else {
|
||||
int iZza = zza(parcel, i);
|
||||
parcel.writeSparseBooleanArray(sparseBooleanArray);
|
||||
zzb(parcel, iZza);
|
||||
}
|
||||
}
|
||||
|
||||
public static void writeSparseIntArray(Parcel parcel, int i, SparseIntArray sparseIntArray, boolean z) {
|
||||
if (sparseIntArray == null) {
|
||||
if (z) {
|
||||
zzc(parcel, i, 0);
|
||||
return;
|
||||
}
|
||||
return;
|
||||
}
|
||||
int iZza = zza(parcel, i);
|
||||
int size = sparseIntArray.size();
|
||||
parcel.writeInt(size);
|
||||
for (int i2 = 0; i2 < size; i2++) {
|
||||
parcel.writeInt(sparseIntArray.keyAt(i2));
|
||||
parcel.writeInt(sparseIntArray.valueAt(i2));
|
||||
}
|
||||
zzb(parcel, iZza);
|
||||
}
|
||||
|
||||
public static void writeSparseLongArray(Parcel parcel, int i, SparseLongArray sparseLongArray, boolean z) {
|
||||
if (sparseLongArray == null) {
|
||||
if (z) {
|
||||
zzc(parcel, i, 0);
|
||||
return;
|
||||
}
|
||||
return;
|
||||
}
|
||||
int iZza = zza(parcel, i);
|
||||
int size = sparseLongArray.size();
|
||||
parcel.writeInt(size);
|
||||
for (int i2 = 0; i2 < size; i2++) {
|
||||
parcel.writeInt(sparseLongArray.keyAt(i2));
|
||||
parcel.writeLong(sparseLongArray.valueAt(i2));
|
||||
}
|
||||
zzb(parcel, iZza);
|
||||
}
|
||||
|
||||
public static void writeString(Parcel parcel, int i, String str, boolean z) {
|
||||
if (str == null) {
|
||||
if (z) {
|
||||
zzc(parcel, i, 0);
|
||||
}
|
||||
} else {
|
||||
int iZza = zza(parcel, i);
|
||||
parcel.writeString(str);
|
||||
zzb(parcel, iZza);
|
||||
}
|
||||
}
|
||||
|
||||
public static void writeStringArray(Parcel parcel, int i, String[] strArr, boolean z) {
|
||||
if (strArr == null) {
|
||||
if (z) {
|
||||
zzc(parcel, i, 0);
|
||||
}
|
||||
} else {
|
||||
int iZza = zza(parcel, i);
|
||||
parcel.writeStringArray(strArr);
|
||||
zzb(parcel, iZza);
|
||||
}
|
||||
}
|
||||
|
||||
public static void writeStringList(Parcel parcel, int i, List<String> list, boolean z) {
|
||||
if (list == null) {
|
||||
if (z) {
|
||||
zzc(parcel, i, 0);
|
||||
}
|
||||
} else {
|
||||
int iZza = zza(parcel, i);
|
||||
parcel.writeStringList(list);
|
||||
zzb(parcel, iZza);
|
||||
}
|
||||
}
|
||||
|
||||
public static void writeStringSparseArray(Parcel parcel, int i, SparseArray<String> sparseArray, boolean z) {
|
||||
if (sparseArray == null) {
|
||||
if (z) {
|
||||
zzc(parcel, i, 0);
|
||||
return;
|
||||
}
|
||||
return;
|
||||
}
|
||||
int iZza = zza(parcel, i);
|
||||
int size = sparseArray.size();
|
||||
parcel.writeInt(size);
|
||||
for (int i2 = 0; i2 < size; i2++) {
|
||||
parcel.writeInt(sparseArray.keyAt(i2));
|
||||
parcel.writeString(sparseArray.valueAt(i2));
|
||||
}
|
||||
zzb(parcel, iZza);
|
||||
}
|
||||
|
||||
public static <T extends Parcelable> void writeTypedArray(Parcel parcel, int i, T[] tArr, int i2, boolean z) {
|
||||
if (tArr == null) {
|
||||
if (z) {
|
||||
zzc(parcel, i, 0);
|
||||
return;
|
||||
}
|
||||
return;
|
||||
}
|
||||
int iZza = zza(parcel, i);
|
||||
parcel.writeInt(tArr.length);
|
||||
for (T t : tArr) {
|
||||
if (t == null) {
|
||||
parcel.writeInt(0);
|
||||
} else {
|
||||
zzd(parcel, t, i2);
|
||||
}
|
||||
}
|
||||
zzb(parcel, iZza);
|
||||
}
|
||||
|
||||
public static <T extends Parcelable> void writeTypedList(Parcel parcel, int i, List<T> list, boolean z) {
|
||||
if (list == null) {
|
||||
if (z) {
|
||||
zzc(parcel, i, 0);
|
||||
return;
|
||||
}
|
||||
return;
|
||||
}
|
||||
int iZza = zza(parcel, i);
|
||||
int size = list.size();
|
||||
parcel.writeInt(size);
|
||||
for (int i2 = 0; i2 < size; i2++) {
|
||||
T t = list.get(i2);
|
||||
if (t == null) {
|
||||
parcel.writeInt(0);
|
||||
} else {
|
||||
zzd(parcel, t, 0);
|
||||
}
|
||||
}
|
||||
zzb(parcel, iZza);
|
||||
}
|
||||
|
||||
public static <T extends Parcelable> void writeTypedSparseArray(Parcel parcel, int i, SparseArray<T> sparseArray, boolean z) {
|
||||
if (sparseArray == null) {
|
||||
if (z) {
|
||||
zzc(parcel, i, 0);
|
||||
return;
|
||||
}
|
||||
return;
|
||||
}
|
||||
int iZza = zza(parcel, i);
|
||||
int size = sparseArray.size();
|
||||
parcel.writeInt(size);
|
||||
for (int i2 = 0; i2 < size; i2++) {
|
||||
parcel.writeInt(sparseArray.keyAt(i2));
|
||||
T tValueAt = sparseArray.valueAt(i2);
|
||||
if (tValueAt == null) {
|
||||
parcel.writeInt(0);
|
||||
} else {
|
||||
zzd(parcel, tValueAt, 0);
|
||||
}
|
||||
}
|
||||
zzb(parcel, iZza);
|
||||
}
|
||||
|
||||
private static int zza(Parcel parcel, int i) {
|
||||
parcel.writeInt(i | SupportMenu.CATEGORY_MASK);
|
||||
parcel.writeInt(0);
|
||||
return parcel.dataPosition();
|
||||
}
|
||||
|
||||
private static void zzb(Parcel parcel, int i) {
|
||||
int iDataPosition = parcel.dataPosition();
|
||||
parcel.setDataPosition(i - 4);
|
||||
parcel.writeInt(iDataPosition - i);
|
||||
parcel.setDataPosition(iDataPosition);
|
||||
}
|
||||
|
||||
private static void zzc(Parcel parcel, int i, int i2) {
|
||||
parcel.writeInt(i | (i2 << 16));
|
||||
}
|
||||
|
||||
private static void zzd(Parcel parcel, Parcelable parcelable, int i) {
|
||||
int iDataPosition = parcel.dataPosition();
|
||||
parcel.writeInt(1);
|
||||
int iDataPosition2 = parcel.dataPosition();
|
||||
parcelable.writeToParcel(parcel, i);
|
||||
int iDataPosition3 = parcel.dataPosition();
|
||||
parcel.setDataPosition(iDataPosition);
|
||||
parcel.writeInt(iDataPosition3 - iDataPosition2);
|
||||
parcel.setDataPosition(iDataPosition3);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,70 @@
|
||||
package com.google.android.gms.common.internal.safeparcel;
|
||||
|
||||
import android.os.Parcelable;
|
||||
|
||||
/* JADX INFO: compiled from: com.google.android.gms:play-services-basement@@18.3.0 */
|
||||
/* JADX INFO: loaded from: classes2.dex */
|
||||
public interface SafeParcelable extends Parcelable {
|
||||
public static final String NULL = "SAFE_PARCELABLE_NULL_STRING";
|
||||
|
||||
/* JADX INFO: compiled from: com.google.android.gms:play-services-basement@@18.3.0 */
|
||||
public @interface Class {
|
||||
String creator();
|
||||
|
||||
boolean creatorIsFinal() default true;
|
||||
|
||||
boolean doNotParcelTypeDefaultValues() default false;
|
||||
|
||||
boolean validate() default false;
|
||||
}
|
||||
|
||||
/* JADX INFO: compiled from: com.google.android.gms:play-services-basement@@18.3.0 */
|
||||
public @interface Constructor {
|
||||
}
|
||||
|
||||
/* JADX INFO: compiled from: com.google.android.gms:play-services-basement@@18.3.0 */
|
||||
public @interface Field {
|
||||
String defaultValue() default "SAFE_PARCELABLE_NULL_STRING";
|
||||
|
||||
String defaultValueUnchecked() default "SAFE_PARCELABLE_NULL_STRING";
|
||||
|
||||
String getter() default "SAFE_PARCELABLE_NULL_STRING";
|
||||
|
||||
int id();
|
||||
|
||||
String type() default "SAFE_PARCELABLE_NULL_STRING";
|
||||
}
|
||||
|
||||
/* JADX INFO: compiled from: com.google.android.gms:play-services-basement@@18.3.0 */
|
||||
public @interface Indicator {
|
||||
String getter() default "SAFE_PARCELABLE_NULL_STRING";
|
||||
}
|
||||
|
||||
/* JADX INFO: compiled from: com.google.android.gms:play-services-basement@@18.3.0 */
|
||||
public @interface Param {
|
||||
int id();
|
||||
}
|
||||
|
||||
/* JADX INFO: compiled from: com.google.android.gms:play-services-basement@@18.3.0 */
|
||||
public @interface RemovedParam {
|
||||
String defaultValue() default "SAFE_PARCELABLE_NULL_STRING";
|
||||
|
||||
String defaultValueUnchecked() default "SAFE_PARCELABLE_NULL_STRING";
|
||||
|
||||
int id();
|
||||
}
|
||||
|
||||
/* JADX INFO: compiled from: com.google.android.gms:play-services-basement@@18.3.0 */
|
||||
public @interface Reserved {
|
||||
int[] value();
|
||||
}
|
||||
|
||||
/* JADX INFO: compiled from: com.google.android.gms:play-services-basement@@18.3.0 */
|
||||
public @interface VersionField {
|
||||
String getter() default "SAFE_PARCELABLE_NULL_STRING";
|
||||
|
||||
int id();
|
||||
|
||||
String type() default "SAFE_PARCELABLE_NULL_STRING";
|
||||
}
|
||||
}
|
||||
+148
@@ -0,0 +1,148 @@
|
||||
package com.google.android.gms.common.internal.safeparcel;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.os.Parcel;
|
||||
import android.os.Parcelable;
|
||||
import com.google.android.gms.common.internal.Preconditions;
|
||||
import com.google.android.gms.common.util.Base64Utils;
|
||||
import com.google.android.gms.internal.common.zzag;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Iterator;
|
||||
|
||||
/* JADX INFO: compiled from: com.google.android.gms:play-services-basement@@18.3.0 */
|
||||
/* JADX INFO: loaded from: classes2.dex */
|
||||
public final class SafeParcelableSerializer {
|
||||
private SafeParcelableSerializer() {
|
||||
}
|
||||
|
||||
public static <T extends SafeParcelable> T deserializeFromBytes(byte[] bArr, Parcelable.Creator<T> creator) {
|
||||
Preconditions.checkNotNull(creator);
|
||||
Parcel parcelObtain = Parcel.obtain();
|
||||
parcelObtain.unmarshall(bArr, 0, bArr.length);
|
||||
parcelObtain.setDataPosition(0);
|
||||
T tCreateFromParcel = creator.createFromParcel(parcelObtain);
|
||||
parcelObtain.recycle();
|
||||
return tCreateFromParcel;
|
||||
}
|
||||
|
||||
public static <T extends SafeParcelable> T deserializeFromIntentExtra(Intent intent, String str, Parcelable.Creator<T> creator) {
|
||||
byte[] byteArrayExtra = intent.getByteArrayExtra(str);
|
||||
if (byteArrayExtra == null) {
|
||||
return null;
|
||||
}
|
||||
return (T) deserializeFromBytes(byteArrayExtra, creator);
|
||||
}
|
||||
|
||||
public static <T extends SafeParcelable> T deserializeFromString(String str, Parcelable.Creator<T> creator) {
|
||||
return (T) deserializeFromBytes(Base64Utils.decodeUrlSafe(str), creator);
|
||||
}
|
||||
|
||||
/* JADX WARN: Multi-variable type inference failed */
|
||||
@Deprecated
|
||||
public static <T extends SafeParcelable> ArrayList<T> deserializeIterableFromBundle(Bundle bundle, String str, Parcelable.Creator<T> creator) {
|
||||
ArrayList arrayList = (ArrayList) bundle.getSerializable(str);
|
||||
if (arrayList == null) {
|
||||
return null;
|
||||
}
|
||||
ArrayList<T> arrayList2 = (ArrayList<T>) new ArrayList(arrayList.size());
|
||||
int size = arrayList.size();
|
||||
for (int i = 0; i < size; i++) {
|
||||
arrayList2.add(deserializeFromBytes((byte[]) arrayList.get(i), creator));
|
||||
}
|
||||
return arrayList2;
|
||||
}
|
||||
|
||||
public static <T extends SafeParcelable> ArrayList<T> deserializeIterableFromBundleSafe(Bundle bundle, String str, Parcelable.Creator<T> creator) {
|
||||
return deserializeIterableFromBytes(bundle.getByteArray(str), creator);
|
||||
}
|
||||
|
||||
public static <T extends SafeParcelable> ArrayList<T> deserializeIterableFromBytes(byte[] bArr, Parcelable.Creator<T> creator) {
|
||||
if (bArr == null) {
|
||||
return null;
|
||||
}
|
||||
Parcel parcelObtain = Parcel.obtain();
|
||||
parcelObtain.unmarshall(bArr, 0, bArr.length);
|
||||
parcelObtain.setDataPosition(0);
|
||||
try {
|
||||
ArrayList<T> arrayList = new ArrayList<>();
|
||||
parcelObtain.readTypedList(arrayList, creator);
|
||||
return arrayList;
|
||||
} finally {
|
||||
parcelObtain.recycle();
|
||||
}
|
||||
}
|
||||
|
||||
/* JADX WARN: Multi-variable type inference failed */
|
||||
@Deprecated
|
||||
public static <T extends SafeParcelable> ArrayList<T> deserializeIterableFromIntentExtra(Intent intent, String str, Parcelable.Creator<T> creator) {
|
||||
ArrayList arrayList = (ArrayList) intent.getSerializableExtra(str);
|
||||
if (arrayList == null) {
|
||||
return null;
|
||||
}
|
||||
ArrayList<T> arrayList2 = (ArrayList<T>) new ArrayList(arrayList.size());
|
||||
int size = arrayList.size();
|
||||
for (int i = 0; i < size; i++) {
|
||||
arrayList2.add(deserializeFromBytes((byte[]) arrayList.get(i), creator));
|
||||
}
|
||||
return arrayList2;
|
||||
}
|
||||
|
||||
public static <T extends SafeParcelable> ArrayList<T> deserializeIterableFromIntentExtraSafe(Intent intent, String str, Parcelable.Creator<T> creator) {
|
||||
return deserializeIterableFromBytes(intent.getByteArrayExtra(str), creator);
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public static <T extends SafeParcelable> void serializeIterableToBundle(Iterable<T> iterable, Bundle bundle, String str) {
|
||||
ArrayList arrayList = new ArrayList();
|
||||
Iterator<T> it = iterable.iterator();
|
||||
while (it.hasNext()) {
|
||||
arrayList.add(serializeToBytes(it.next()));
|
||||
}
|
||||
bundle.putSerializable(str, arrayList);
|
||||
}
|
||||
|
||||
public static <T extends SafeParcelable> void serializeIterableToBundleSafe(Iterable<T> iterable, Bundle bundle, String str) {
|
||||
bundle.putByteArray(str, zza(iterable));
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public static <T extends SafeParcelable> void serializeIterableToIntentExtra(Iterable<T> iterable, Intent intent, String str) {
|
||||
ArrayList arrayList = new ArrayList();
|
||||
Iterator<T> it = iterable.iterator();
|
||||
while (it.hasNext()) {
|
||||
arrayList.add(serializeToBytes(it.next()));
|
||||
}
|
||||
intent.putExtra(str, arrayList);
|
||||
}
|
||||
|
||||
public static <T extends SafeParcelable> void serializeIterableToIntentExtraSafe(Iterable<T> iterable, Intent intent, String str) {
|
||||
intent.putExtra(str, zza(iterable));
|
||||
}
|
||||
|
||||
public static <T extends SafeParcelable> byte[] serializeToBytes(T t) {
|
||||
Parcel parcelObtain = Parcel.obtain();
|
||||
t.writeToParcel(parcelObtain, 0);
|
||||
byte[] bArrMarshall = parcelObtain.marshall();
|
||||
parcelObtain.recycle();
|
||||
return bArrMarshall;
|
||||
}
|
||||
|
||||
public static <T extends SafeParcelable> void serializeToIntentExtra(T t, Intent intent, String str) {
|
||||
intent.putExtra(str, serializeToBytes(t));
|
||||
}
|
||||
|
||||
public static <T extends SafeParcelable> String serializeToString(T t) {
|
||||
return Base64Utils.encodeUrlSafe(serializeToBytes(t));
|
||||
}
|
||||
|
||||
private static byte[] zza(Iterable iterable) {
|
||||
Parcel parcelObtain = Parcel.obtain();
|
||||
try {
|
||||
parcelObtain.writeTypedList(zzag.zzj(iterable));
|
||||
return parcelObtain.marshall();
|
||||
} finally {
|
||||
parcelObtain.recycle();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user