-keepattributes RuntimeVisibleAnnotations
-keepattributes RuntimeInvisibleAnnotations
-keep class com.flexa.BuildConfig { public *; }
-keep class **.R$* { <fields>; }
-keep class com.flexa.core.Flexa { public *; }
-keep class com.flexa.core.theme.ThemeKt { public *; }
-keep class com.flexa.core.theme.FlexaTheme { public *; }
-keep class com.flexa.core.theme.SpendColorScheme { public *; }
-keep class com.flexa.core.shared.SerializerProvider { public *; }
-keep class com.flexa.core.domain.data.IDataRepository { public *; }
-keep class com.flexa.core.shared.FlexaConstants { public *; }
-keep class com.flexa.core.shared.FlexaConstants$Companion { *; }
-keep class com.flexa.core.shared.FlexaClientConfiguration { public *; }
-keep class com.flexa.core.domain.rest.RestInteractor { public *; }
-keep class com.flexa.core.view.LogoKt { public *; }
-keep class com.flexa.core.shared.AssetAccount { public *; }
-keep class com.flexa.core.shared.AvailableAsset { public *; }
-keep class com.flexa.core.shared.ErrorDialogsKt { public *; }
-keep class com.flexa.core.shared.Asset { public *; }
-keep class com.flexa.core.shared.AssetsResponse { public *; }
-keep class com.flexa.core.view.AutoSizeTextKt { public *; }
-keep class com.flexa.core.shared.ConnectionHandlerKt { public *; }
-keep class com.flexa.core.shared.ApiError { public *; }
-keep class com.flexa.core.shared.ApiError$InfoEntity { public *; }
-keep class com.flexa.core.shared.ApiError$ReportEntity { public *; }
-keep class com.flexa.core.shared.ConnectStatus { public *; }
-keep class com.flexa.core.shared.ConnectStatus$Status { public *; }
-keep class com.flexa.core.shared.ConnectionState { public *; }
-keep class com.flexa.core.shared.ConnectionState$Available { public *; }
-keep class com.flexa.core.shared.ConnectionState$Unavailable { public *; }
-keep class com.flexa.core.ExtensionsKt { public *; }
-keep class com.flexa.core.shared.SelectedAsset { public *; }
-keep class com.flexa.core.shared.Transaction { public *; }
-keep class com.flexa.core.shared.PaymentAuthorization { public *; }
-keep class com.flexa.core.shared.PaymentAuthorization$Success { public *; }
-keep class com.flexa.core.shared.PaymentAuthorization$Failed { public *; }
##---------------Begin: proguard configuration for Gson  ----------
# Gson uses generic type information stored in a class file when working with fields. Proguard
# removes such information by default, so configure it to keep all of it.
-keepattributes Signature

# For using GSON @Expose annotation
-keepattributes *Annotation*

# Gson specific classes
-dontwarn sun.misc.**
#-keep class com.google.gson.stream.** { *; }

# Application classes that will be serialized/deserialized over Gson
-keep class com.google.gson.examples.android.model.** { <fields>; }

# Prevent proguard from stripping interface information from TypeAdapter, TypeAdapterFactory,
# JsonSerializer, JsonDeserializer instances (so they can be used in @JsonAdapter)
-keep class * extends com.google.gson.TypeAdapter
-keep class * implements com.google.gson.TypeAdapterFactory
-keep class * implements com.google.gson.JsonSerializer
-keep class * implements com.google.gson.JsonDeserializer

# Prevent R8 from leaving Data object members always null
-keepclassmembers,allowobfuscation class * {
  @com.google.gson.annotations.SerializedName <fields>;
}

##---------------End: proguard configuration for Gson  ----------

-keepattributes RuntimeVisibleAnnotations
-keepattributes RuntimeInvisibleAnnotations
-keep class com.flexa.BuildConfig { public *; }
-keep class **.R$* { <fields>; }
-keep class com.flexa.identity.shared.ConnectResult { public *; }
-keep class com.flexa.identity.shared.ConnectResult$Connected { public *; }
-keep class com.flexa.identity.shared.ConnectResult$NotConnected { public *; }
-keep class com.flexa.identity.IdentityConfig { public *; }
-keep class com.flexa.identity.IdentityConfig$Builder { public *; }
-keep class com.flexa.identity.IdentityNavGraphKt { public *; }
-keep class com.flexa.identity.IdentityModuleKt { public *; }

# Keep `Companion` object fields of serializable classes.
# This avoids serializer lookup through `getDeclaredClasses` as done for named companion objects.
-if @kotlinx.serialization.Serializable class **
-keepclassmembers class <1> {
   static <1>$Companion Companion;
}

# Keep `serializer()` on companion objects (both default and named) of serializable classes.
-if @kotlinx.serialization.Serializable class ** {
   static **$* *;
}
-keepclassmembers class <2>$<3> {
   kotlinx.serialization.KSerializer serializer(...);
}

# Keep `INSTANCE.serializer()` of serializable objects.
-if @kotlinx.serialization.Serializable class ** {
   public static ** INSTANCE;
}
-keepclassmembers class <1> {
   public static <1> INSTANCE;
   kotlinx.serialization.KSerializer serializer(...);
}

# @Serializable and @Polymorphic are used at runtime for polymorphic serialization.
-keepattributes RuntimeVisibleAnnotations,AnnotationDefault
