package com.esotericsoftware.kryo.serializers; import c.d.b.a.a; import com.esotericsoftware.kryo.Kryo; import com.esotericsoftware.kryo.KryoException; import com.esotericsoftware.kryo.KryoSerializable; import com.esotericsoftware.kryo.Registration; import com.esotericsoftware.kryo.Serializer; import com.esotericsoftware.kryo.io.Input; import com.esotericsoftware.kryo.io.Output; import com.esotericsoftware.kryo.util.Util; import java.lang.reflect.Constructor; import java.math.BigDecimal; import java.math.BigInteger; import java.net.MalformedURLException; import java.net.URL; import java.nio.charset.Charset; import java.sql.Time; import java.sql.Timestamp; import java.util.Calendar; import java.util.Collection; import java.util.Collections; import java.util.Comparator; import java.util.Currency; import java.util.Date; import java.util.EnumSet; import java.util.GregorianCalendar; import java.util.Iterator; import java.util.List; import java.util.Locale; import java.util.Map; import java.util.Set; import java.util.TimeZone; import java.util.TreeMap; import java.util.TreeSet; public class DefaultSerializers { public static class BigDecimalSerializer extends Serializer { private final BigIntegerSerializer bigIntegerSerializer = new BigIntegerSerializer(); public BigDecimalSerializer() { setAcceptsNull(true); setImmutable(true); } @Override // com.esotericsoftware.kryo.Serializer public BigDecimal read(Kryo kryo, Input input, Class cls) { BigInteger read = this.bigIntegerSerializer.read(kryo, input, BigInteger.class); if (read == null) { return null; } int readInt = input.readInt(false); if (cls == BigDecimal.class || cls == null) { return (read == BigInteger.ZERO && readInt == 0) ? BigDecimal.ZERO : new BigDecimal(read, readInt); } try { Constructor constructor = cls.getConstructor(BigInteger.class, Integer.TYPE); if (!constructor.isAccessible()) { try { constructor.setAccessible(true); } catch (SecurityException unused) { } } return constructor.newInstance(read, Integer.valueOf(readInt)); } catch (Exception e) { throw new KryoException(e); } } public void write(Kryo kryo, Output output, BigDecimal bigDecimal) { if (bigDecimal == null) { output.writeVarInt(0, true); } else if (bigDecimal == BigDecimal.ZERO) { this.bigIntegerSerializer.write(kryo, output, BigInteger.ZERO); output.writeInt(0, false); } else { this.bigIntegerSerializer.write(kryo, output, bigDecimal.unscaledValue()); output.writeInt(bigDecimal.scale(), false); } } } public static class BigIntegerSerializer extends Serializer { public BigIntegerSerializer() { setImmutable(true); setAcceptsNull(true); } @Override // com.esotericsoftware.kryo.Serializer public BigInteger read(Kryo kryo, Input input, Class cls) { int readVarInt = input.readVarInt(true); if (readVarInt == 0) { return null; } byte[] readBytes = input.readBytes(readVarInt - 1); if (cls == BigInteger.class || cls == null) { if (readVarInt == 2) { byte b = readBytes[0]; if (b == 0) { return BigInteger.ZERO; } if (b == 1) { return BigInteger.ONE; } if (b == 10) { return BigInteger.TEN; } } return new BigInteger(readBytes); } try { Constructor constructor = cls.getConstructor(byte[].class); if (!constructor.isAccessible()) { try { constructor.setAccessible(true); } catch (SecurityException unused) { } } return constructor.newInstance(readBytes); } catch (Exception e) { throw new KryoException(e); } } public void write(Kryo kryo, Output output, BigInteger bigInteger) { if (bigInteger == null) { output.writeVarInt(0, true); } else if (bigInteger == BigInteger.ZERO) { output.writeVarInt(2, true); output.writeByte(0); } else { byte[] byteArray = bigInteger.toByteArray(); output.writeVarInt(byteArray.length + 1, true); output.writeBytes(byteArray); } } } public static class BooleanSerializer extends Serializer { public BooleanSerializer() { setImmutable(true); } @Override // com.esotericsoftware.kryo.Serializer public Boolean read(Kryo kryo, Input input, Class cls) { return Boolean.valueOf(input.readBoolean()); } public void write(Kryo kryo, Output output, Boolean bool) { output.writeBoolean(bool.booleanValue()); } } public static class ByteSerializer extends Serializer { public ByteSerializer() { setImmutable(true); } @Override // com.esotericsoftware.kryo.Serializer public Byte read(Kryo kryo, Input input, Class cls) { return Byte.valueOf(input.readByte()); } public void write(Kryo kryo, Output output, Byte b) { output.writeByte(b.byteValue()); } } public static class CalendarSerializer extends Serializer { private static final long DEFAULT_GREGORIAN_CUTOVER = -12219292800000L; public TimeZoneSerializer timeZoneSerializer = new TimeZoneSerializer(); public Calendar copy(Kryo kryo, Calendar calendar) { return (Calendar) calendar.clone(); } @Override // com.esotericsoftware.kryo.Serializer public Calendar read(Kryo kryo, Input input, Class cls) { Calendar instance = Calendar.getInstance(this.timeZoneSerializer.read(kryo, input, TimeZone.class)); instance.setTimeInMillis(input.readLong(true)); instance.setLenient(input.readBoolean()); instance.setFirstDayOfWeek(input.readInt(true)); instance.setMinimalDaysInFirstWeek(input.readInt(true)); long readLong = input.readLong(false); if (readLong != -12219292800000L && (instance instanceof GregorianCalendar)) { ((GregorianCalendar) instance).setGregorianChange(new Date(readLong)); } return instance; } public void write(Kryo kryo, Output output, Calendar calendar) { this.timeZoneSerializer.write(kryo, output, calendar.getTimeZone()); output.writeLong(calendar.getTimeInMillis(), true); output.writeBoolean(calendar.isLenient()); output.writeInt(calendar.getFirstDayOfWeek(), true); output.writeInt(calendar.getMinimalDaysInFirstWeek(), true); if (calendar instanceof GregorianCalendar) { output.writeLong(((GregorianCalendar) calendar).getGregorianChange().getTime(), false); } else { output.writeLong(-12219292800000L, false); } } } public static class CharSerializer extends Serializer { public CharSerializer() { setImmutable(true); } @Override // com.esotericsoftware.kryo.Serializer public Character read(Kryo kryo, Input input, Class cls) { return Character.valueOf(input.readChar()); } public void write(Kryo kryo, Output output, Character ch) { output.writeChar(ch.charValue()); } } public static class CharsetSerializer extends Serializer { public CharsetSerializer() { setImmutable(true); } @Override // com.esotericsoftware.kryo.Serializer public Charset read(Kryo kryo, Input input, Class cls) { return Charset.forName(input.readString()); } public void write(Kryo kryo, Output output, Charset charset) { output.writeString(charset.name()); } } public static class ClassSerializer extends Serializer { public ClassSerializer() { setImmutable(true); setAcceptsNull(true); } @Override // com.esotericsoftware.kryo.Serializer public Class read(Kryo kryo, Input input, Class cls) { Registration readClass = kryo.readClass(input); int read = input.read(); Class type = readClass != null ? readClass.getType() : null; return (type == null || !type.isPrimitive() || read == 1) ? type : Util.getWrapperClass(type); } public void write(Kryo kryo, Output output, Class cls) { kryo.writeClass(output, cls); output.writeByte((cls == null || !cls.isPrimitive()) ? 0 : 1); } } public static class CollectionsEmptyListSerializer extends Serializer { public CollectionsEmptyListSerializer() { setImmutable(true); } @Override // com.esotericsoftware.kryo.Serializer public Object read(Kryo kryo, Input input, Class cls) { return Collections.EMPTY_LIST; } @Override // com.esotericsoftware.kryo.Serializer public void write(Kryo kryo, Output output, Object obj) { } } public static class CollectionsEmptyMapSerializer extends Serializer { public CollectionsEmptyMapSerializer() { setImmutable(true); } @Override // com.esotericsoftware.kryo.Serializer public Object read(Kryo kryo, Input input, Class cls) { return Collections.EMPTY_MAP; } @Override // com.esotericsoftware.kryo.Serializer public void write(Kryo kryo, Output output, Object obj) { } } public static class CollectionsEmptySetSerializer extends Serializer { public CollectionsEmptySetSerializer() { setImmutable(true); } @Override // com.esotericsoftware.kryo.Serializer public Object read(Kryo kryo, Input input, Class cls) { return Collections.EMPTY_SET; } @Override // com.esotericsoftware.kryo.Serializer public void write(Kryo kryo, Output output, Object obj) { } } public static class CollectionsSingletonListSerializer extends Serializer { public CollectionsSingletonListSerializer() { setImmutable(true); } /* JADX DEBUG: Method arguments types fixed to match base method, original types: [com.esotericsoftware.kryo.Kryo, com.esotericsoftware.kryo.io.Input, java.lang.Class] */ @Override // com.esotericsoftware.kryo.Serializer public List read(Kryo kryo, Input input, Class cls) { return Collections.singletonList(kryo.readClassAndObject(input)); } public void write(Kryo kryo, Output output, List list) { kryo.writeClassAndObject(output, list.get(0)); } } public static class CollectionsSingletonMapSerializer extends Serializer { public CollectionsSingletonMapSerializer() { setImmutable(true); } /* JADX DEBUG: Method arguments types fixed to match base method, original types: [com.esotericsoftware.kryo.Kryo, com.esotericsoftware.kryo.io.Input, java.lang.Class] */ @Override // com.esotericsoftware.kryo.Serializer public Map read(Kryo kryo, Input input, Class cls) { return Collections.singletonMap(kryo.readClassAndObject(input), kryo.readClassAndObject(input)); } public void write(Kryo kryo, Output output, Map map) { Map.Entry entry = (Map.Entry) map.entrySet().iterator().next(); kryo.writeClassAndObject(output, entry.getKey()); kryo.writeClassAndObject(output, entry.getValue()); } } public static class CollectionsSingletonSetSerializer extends Serializer { public CollectionsSingletonSetSerializer() { setImmutable(true); } /* JADX DEBUG: Method arguments types fixed to match base method, original types: [com.esotericsoftware.kryo.Kryo, com.esotericsoftware.kryo.io.Input, java.lang.Class] */ @Override // com.esotericsoftware.kryo.Serializer public Set read(Kryo kryo, Input input, Class cls) { return Collections.singleton(kryo.readClassAndObject(input)); } public void write(Kryo kryo, Output output, Set set) { kryo.writeClassAndObject(output, set.iterator().next()); } } public static class CurrencySerializer extends Serializer { public CurrencySerializer() { setImmutable(true); setAcceptsNull(true); } @Override // com.esotericsoftware.kryo.Serializer public Currency read(Kryo kryo, Input input, Class cls) { String readString = input.readString(); if (readString == null) { return null; } return Currency.getInstance(readString); } public void write(Kryo kryo, Output output, Currency currency) { output.writeString(currency == null ? null : currency.getCurrencyCode()); } } public static class DateSerializer extends Serializer { private Date create(Kryo kryo, Class cls, long j) throws KryoException { if (cls == Date.class || cls == null) { return new Date(j); } if (cls == Timestamp.class) { return new Timestamp(j); } if (cls == java.sql.Date.class) { return new java.sql.Date(j); } if (cls == Time.class) { return new Time(j); } try { Constructor constructor = cls.getConstructor(Long.TYPE); if (!constructor.isAccessible()) { try { constructor.setAccessible(true); } catch (SecurityException unused) { } } return (Date) constructor.newInstance(Long.valueOf(j)); } catch (Exception unused2) { Date date = (Date) kryo.newInstance(cls); date.setTime(j); return date; } } /* JADX DEBUG: Multi-variable search result rejected for r3v0, resolved type: com.esotericsoftware.kryo.serializers.DefaultSerializers$DateSerializer */ /* JADX WARN: Multi-variable type inference failed */ public Date copy(Kryo kryo, Date date) { return create(kryo, date.getClass(), date.getTime()); } @Override // com.esotericsoftware.kryo.Serializer public Date read(Kryo kryo, Input input, Class cls) { return create(kryo, cls, input.readLong(true)); } public void write(Kryo kryo, Output output, Date date) { output.writeLong(date.getTime(), true); } } public static class DoubleSerializer extends Serializer { public DoubleSerializer() { setImmutable(true); } @Override // com.esotericsoftware.kryo.Serializer public Double read(Kryo kryo, Input input, Class cls) { return Double.valueOf(input.readDouble()); } public void write(Kryo kryo, Output output, Double d) { output.writeDouble(d.doubleValue()); } } public static class EnumSerializer extends Serializer { private Object[] enumConstants; public EnumSerializer(Class cls) { setImmutable(true); setAcceptsNull(true); Object[] enumConstants = cls.getEnumConstants(); this.enumConstants = enumConstants; if (enumConstants == null && !Enum.class.equals(cls)) { throw new IllegalArgumentException("The type must be an enum: " + cls); } } @Override // com.esotericsoftware.kryo.Serializer public Enum read(Kryo kryo, Input input, Class cls) { int readVarInt = input.readVarInt(true); if (readVarInt == 0) { return null; } int i = readVarInt - 1; if (i >= 0) { Object[] objArr = this.enumConstants; if (i <= objArr.length - 1) { return (Enum) objArr[i]; } } StringBuilder K = a.K("Invalid ordinal for enum \""); K.append(cls.getName()); K.append("\": "); K.append(i); throw new KryoException(K.toString()); } public void write(Kryo kryo, Output output, Enum r3) { if (r3 == null) { output.writeVarInt(0, true); } else { output.writeVarInt(r3.ordinal() + 1, true); } } } public static class EnumSetSerializer extends Serializer { public EnumSet copy(Kryo kryo, EnumSet enumSet) { return EnumSet.copyOf(enumSet); } @Override // com.esotericsoftware.kryo.Serializer public EnumSet read(Kryo kryo, Input input, Class cls) { Registration readClass = kryo.readClass(input); EnumSet noneOf = EnumSet.noneOf(readClass.getType()); Serializer serializer = readClass.getSerializer(); int readInt = input.readInt(true); for (int i = 0; i < readInt; i++) { noneOf.add(serializer.read(kryo, input, null)); } return noneOf; } public void write(Kryo kryo, Output output, EnumSet enumSet) { Serializer serializer; if (enumSet.isEmpty()) { EnumSet complementOf = EnumSet.complementOf(enumSet); if (!complementOf.isEmpty()) { serializer = kryo.writeClass(output, complementOf.iterator().next().getClass()).getSerializer(); } else { throw new KryoException("An EnumSet must have a defined Enum to be serialized."); } } else { serializer = kryo.writeClass(output, enumSet.iterator().next().getClass()).getSerializer(); } output.writeInt(enumSet.size(), true); Iterator it = enumSet.iterator(); while (it.hasNext()) { serializer.write(kryo, output, it.next()); } } } public static class FloatSerializer extends Serializer { public FloatSerializer() { setImmutable(true); } @Override // com.esotericsoftware.kryo.Serializer public Float read(Kryo kryo, Input input, Class cls) { return Float.valueOf(input.readFloat()); } public void write(Kryo kryo, Output output, Float f) { output.writeFloat(f.floatValue()); } } public static class IntSerializer extends Serializer { public IntSerializer() { setImmutable(true); } @Override // com.esotericsoftware.kryo.Serializer public Integer read(Kryo kryo, Input input, Class cls) { return Integer.valueOf(input.readInt(false)); } public void write(Kryo kryo, Output output, Integer num) { output.writeInt(num.intValue(), false); } } public static class KryoSerializableSerializer extends Serializer { @Override // com.esotericsoftware.kryo.Serializer public KryoSerializable read(Kryo kryo, Input input, Class cls) { KryoSerializable kryoSerializable = (KryoSerializable) kryo.newInstance(cls); kryo.reference(kryoSerializable); kryoSerializable.read(kryo, input); return kryoSerializable; } public void write(Kryo kryo, Output output, KryoSerializable kryoSerializable) { kryoSerializable.write(kryo, output); } } public static class LocaleSerializer extends Serializer { public static final Locale SPAIN = new Locale("es", "ES", ""); public static final Locale SPANISH = new Locale("es", "", ""); public LocaleSerializer() { setImmutable(true); } public static boolean isSameLocale(Locale locale, String str, String str2, String str3) { try { return locale.getLanguage().equals(str) && locale.getCountry().equals(str2) && locale.getVariant().equals(str3); } catch (NullPointerException unused) { return false; } } public Locale create(String str, String str2, String str3) { Locale locale = Locale.getDefault(); if (isSameLocale(locale, str, str2, str3)) { return locale; } Locale locale2 = Locale.US; if (locale != locale2 && isSameLocale(locale2, str, str2, str3)) { return locale2; } Locale locale3 = Locale.ENGLISH; if (isSameLocale(locale3, str, str2, str3)) { return locale3; } if (isSameLocale(Locale.GERMAN, str, str2, str3)) { return Locale.GERMAN; } Locale locale4 = SPANISH; if (isSameLocale(locale4, str, str2, str3)) { return locale4; } if (isSameLocale(Locale.FRENCH, str, str2, str3)) { return Locale.FRENCH; } if (isSameLocale(Locale.ITALIAN, str, str2, str3)) { return Locale.ITALIAN; } if (isSameLocale(Locale.JAPANESE, str, str2, str3)) { return Locale.JAPANESE; } if (isSameLocale(Locale.KOREAN, str, str2, str3)) { return Locale.KOREAN; } if (isSameLocale(Locale.SIMPLIFIED_CHINESE, str, str2, str3)) { return Locale.SIMPLIFIED_CHINESE; } if (isSameLocale(Locale.CHINESE, str, str2, str3)) { return Locale.CHINESE; } if (isSameLocale(Locale.TRADITIONAL_CHINESE, str, str2, str3)) { return Locale.TRADITIONAL_CHINESE; } if (isSameLocale(Locale.UK, str, str2, str3)) { return Locale.UK; } if (isSameLocale(Locale.GERMANY, str, str2, str3)) { return Locale.GERMANY; } Locale locale5 = SPAIN; return isSameLocale(locale5, str, str2, str3) ? locale5 : isSameLocale(Locale.FRANCE, str, str2, str3) ? Locale.FRANCE : isSameLocale(Locale.ITALY, str, str2, str3) ? Locale.ITALY : isSameLocale(Locale.JAPAN, str, str2, str3) ? Locale.JAPAN : isSameLocale(Locale.KOREA, str, str2, str3) ? Locale.KOREA : isSameLocale(Locale.CANADA, str, str2, str3) ? Locale.CANADA : isSameLocale(Locale.CANADA_FRENCH, str, str2, str3) ? Locale.CANADA_FRENCH : new Locale(str, str2, str3); } @Override // com.esotericsoftware.kryo.Serializer public Locale read(Kryo kryo, Input input, Class cls) { return create(input.readString(), input.readString(), input.readString()); } public void write(Kryo kryo, Output output, Locale locale) { output.writeAscii(locale.getLanguage()); output.writeAscii(locale.getCountry()); output.writeString(locale.getVariant()); } } public static class LongSerializer extends Serializer { public LongSerializer() { setImmutable(true); } @Override // com.esotericsoftware.kryo.Serializer public Long read(Kryo kryo, Input input, Class cls) { return Long.valueOf(input.readLong(false)); } public void write(Kryo kryo, Output output, Long l) { output.writeLong(l.longValue(), false); } } public static class ShortSerializer extends Serializer { public ShortSerializer() { setImmutable(true); } @Override // com.esotericsoftware.kryo.Serializer public Short read(Kryo kryo, Input input, Class cls) { return Short.valueOf(input.readShort()); } public void write(Kryo kryo, Output output, Short sh) { output.writeShort(sh.shortValue()); } } public static class StringBufferSerializer extends Serializer { public StringBufferSerializer() { setAcceptsNull(true); } public StringBuffer copy(Kryo kryo, StringBuffer stringBuffer) { return new StringBuffer(stringBuffer); } @Override // com.esotericsoftware.kryo.Serializer public StringBuffer read(Kryo kryo, Input input, Class cls) { String readString = input.readString(); if (readString == null) { return null; } return new StringBuffer(readString); } public void write(Kryo kryo, Output output, StringBuffer stringBuffer) { output.writeString(stringBuffer); } } public static class StringBuilderSerializer extends Serializer { public StringBuilderSerializer() { setAcceptsNull(true); } public StringBuilder copy(Kryo kryo, StringBuilder sb) { return new StringBuilder(sb); } @Override // com.esotericsoftware.kryo.Serializer public StringBuilder read(Kryo kryo, Input input, Class cls) { return input.readStringBuilder(); } public void write(Kryo kryo, Output output, StringBuilder sb) { output.writeString(sb); } } public static class StringSerializer extends Serializer { public StringSerializer() { setImmutable(true); setAcceptsNull(true); } @Override // com.esotericsoftware.kryo.Serializer public String read(Kryo kryo, Input input, Class cls) { return input.readString(); } public void write(Kryo kryo, Output output, String str) { output.writeString(str); } } public static class TimeZoneSerializer extends Serializer { public TimeZoneSerializer() { setImmutable(true); } @Override // com.esotericsoftware.kryo.Serializer public TimeZone read(Kryo kryo, Input input, Class cls) { return TimeZone.getTimeZone(input.readString()); } public void write(Kryo kryo, Output output, TimeZone timeZone) { output.writeString(timeZone.getID()); } } public static class TreeMapSerializer extends MapSerializer { private TreeMap createTreeMap(Class cls, Comparator comparator) { if (cls == TreeMap.class || cls == null) { return new TreeMap(comparator); } try { Constructor constructor = cls.getConstructor(Comparator.class); if (!constructor.isAccessible()) { try { constructor.setAccessible(true); } catch (SecurityException unused) { } } return (TreeMap) constructor.newInstance(comparator); } catch (Exception e) { throw new KryoException(e); } } @Override // com.esotericsoftware.kryo.serializers.MapSerializer public Map create(Kryo kryo, Input input, Class cls) { return createTreeMap(cls, (Comparator) kryo.readClassAndObject(input)); } /* JADX DEBUG: Multi-variable search result rejected for r0v0, resolved type: com.esotericsoftware.kryo.serializers.DefaultSerializers$TreeMapSerializer */ /* JADX WARN: Multi-variable type inference failed */ @Override // com.esotericsoftware.kryo.serializers.MapSerializer public Map createCopy(Kryo kryo, Map map) { return createTreeMap(map.getClass(), ((TreeMap) map).comparator()); } @Override // com.esotericsoftware.kryo.serializers.MapSerializer public void write(Kryo kryo, Output output, Map map) { kryo.writeClassAndObject(output, ((TreeMap) map).comparator()); super.write(kryo, output, map); } } public static class TreeSetSerializer extends CollectionSerializer { private TreeSet createTreeSet(Class cls, Comparator comparator) { if (cls == TreeSet.class || cls == null) { return new TreeSet(comparator); } try { Constructor constructor = cls.getConstructor(Comparator.class); if (!constructor.isAccessible()) { try { constructor.setAccessible(true); } catch (SecurityException unused) { } } return (TreeSet) constructor.newInstance(comparator); } catch (Exception e) { throw new KryoException(e); } } @Override // com.esotericsoftware.kryo.serializers.CollectionSerializer public TreeSet create(Kryo kryo, Input input, Class cls) { return createTreeSet(cls, (Comparator) kryo.readClassAndObject(input)); } /* JADX DEBUG: Multi-variable search result rejected for r0v0, resolved type: com.esotericsoftware.kryo.serializers.DefaultSerializers$TreeSetSerializer */ /* JADX WARN: Multi-variable type inference failed */ @Override // com.esotericsoftware.kryo.serializers.CollectionSerializer public TreeSet createCopy(Kryo kryo, Collection collection) { return createTreeSet(collection.getClass(), ((TreeSet) collection).comparator()); } @Override // com.esotericsoftware.kryo.serializers.CollectionSerializer public void write(Kryo kryo, Output output, Collection collection) { kryo.writeClassAndObject(output, ((TreeSet) collection).comparator()); super.write(kryo, output, collection); } } public static class URLSerializer extends Serializer { public URLSerializer() { setImmutable(true); } @Override // com.esotericsoftware.kryo.Serializer public URL read(Kryo kryo, Input input, Class cls) { try { return new URL(input.readString()); } catch (MalformedURLException e) { throw new KryoException(e); } } public void write(Kryo kryo, Output output, URL url) { output.writeString(url.toExternalForm()); } } public static class VoidSerializer extends Serializer { public VoidSerializer() { setImmutable(true); } @Override // com.esotericsoftware.kryo.Serializer public Object read(Kryo kryo, Input input, Class cls) { return null; } @Override // com.esotericsoftware.kryo.Serializer public void write(Kryo kryo, Output output, Object obj) { } } }