导航菜单

页面标题

页面副标题

CashVia v1.6.02 - AFe1rSDK.java 源代码

正在查看: CashVia v1.6.02 应用的 AFe1rSDK.java JAVA 源代码文件

本页面展示 JAVA 反编译生成的源代码文件,支持语法高亮显示。 仅供安全研究与技术分析使用,严禁用于任何非法用途。请遵守相关法律法规。


package com.appsflyer.internal;

import android.content.Context;
import android.graphics.Color;
import android.media.AudioTrack;
import android.os.Build;
import android.os.Process;
import android.os.SystemClock;
import android.text.AndroidCharacter;
import android.text.TextUtils;
import android.view.KeyEvent;
import android.view.View;
import android.view.ViewConfiguration;
import android.widget.ExpandableListView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.VisibleForTesting;
import com.appsflyer.AFLogger;
import com.appsflyer.AppsFlyerLib;
import com.appsflyer.AppsFlyerProperties;
import com.google.android.gms.dynamite.descriptors.com.google.android.gms.measurement.dynamite.ModuleDescriptor;
import java.lang.reflect.Method;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
import kotlin.jvm.internal.Intrinsics;
import kotlin.jvm.internal.StringCompanionObject;
import kotlin.text.Regex;

public final class AFe1rSDK {
    private static int $10 = 0;
    private static int $11 = 1;

    @VisibleForTesting
    private static String AFKeystoreWrapper = null;
    private static boolean AFLogger = false;
    private static int afInfoLog = 0;

    private static int f1769d = 0;

    private static boolean f1770e = false;
    private static char[] unregisterClient = null;
    public static String valueOf = null;

    private static int f1771w = 1;
    private final AppsFlyerProperties AFInAppEventParameterName;
    private final AFe1tSDK AFInAppEventType;
    private final AFe1bSDK registerClient;
    private final AFd1sSDK values;

    static {
        AFKeystoreWrapper();
        valueOf = "https://%sgcdsdk.%s/install_data/v5.0/";
        AFKeystoreWrapper = "https://%sonelink.%s/shortlink-sdk/v2";
        f1771w = (afInfoLog + 79) % 128;
    }

    public AFe1rSDK(AFe1tSDK aFe1tSDK, AFd1sSDK aFd1sSDK, AppsFlyerProperties appsFlyerProperties, AFe1bSDK aFe1bSDK) {
        this.AFInAppEventType = aFe1tSDK;
        this.values = aFd1sSDK;
        this.AFInAppEventParameterName = appsFlyerProperties;
        this.registerClient = aFe1bSDK;
    }

    public static void AFKeystoreWrapper() {
        AFLogger = true;
        f1770e = true;
        f1769d = 1875983374;
        unregisterClient = new char[]{15437, 15456, 15417, 15443, 15461, 15463, 15480, 15469, 15474, 15473, 15484, 15457, 15468, 15458};
    }

    private static void a(String str, int[] iArr, String str2, int i2, Object[] objArr) {
        char[] cArr = str2;
        if (str2 != null) {
            cArr = str2.toCharArray();
        }
        char[] cArr2 = cArr;
        byte[] bArr = str;
        if (str != null) {
            $11 = ($10 + 75) % 128;
            bArr = str.getBytes("ISO-8859-1");
        }
        byte[] bArr2 = bArr;
        AFk1wSDK aFk1wSDK = new AFk1wSDK();
        char[] cArr3 = unregisterClient;
        if (cArr3 != null) {
            int length = cArr3.length;
            char[] cArr4 = new char[length];
            int i3 = 0;
            while (i3 < length) {
                int i4 = $11;
                cArr4[i3] = (char) (cArr3[i3] ^ 7803990084475239563L);
                i3++;
                $10 = (i4 + 89) % 128;
            }
            cArr3 = cArr4;
        }
        int i5 = (int) (7803990084475239563L ^ f1769d);
        if (f1770e) {
            int length2 = bArr2.length;
            aFk1wSDK.values = length2;
            char[] cArr5 = new char[length2];
            aFk1wSDK.AFInAppEventParameterName = 0;
            while (true) {
                int i6 = aFk1wSDK.AFInAppEventParameterName;
                int i7 = aFk1wSDK.values;
                if (i6 >= i7) {
                    objArr[0] = new String(cArr5);
                    return;
                } else {
                    cArr5[i6] = (char) (cArr3[bArr2[(i7 - 1) - i6] + i2] - i5);
                    aFk1wSDK.AFInAppEventParameterName = i6 + 1;
                }
            }
        } else {
            if (!AFLogger) {
                int length3 = iArr.length;
                aFk1wSDK.values = length3;
                char[] cArr6 = new char[length3];
                aFk1wSDK.AFInAppEventParameterName = 0;
                while (true) {
                    int i8 = aFk1wSDK.AFInAppEventParameterName;
                    int i9 = aFk1wSDK.values;
                    if (i8 >= i9) {
                        break;
                    }
                    cArr6[i8] = (char) (cArr3[iArr[(i9 - 1) - i8] - i2] - i5);
                    aFk1wSDK.AFInAppEventParameterName = i8 + 1;
                }
                String str3 = new String(cArr6);
                int i10 = $10 + 43;
                $11 = i10 % 128;
                if (i10 % 2 == 0) {
                    throw null;
                }
                objArr[0] = str3;
                return;
            }
            int length4 = cArr2.length;
            aFk1wSDK.values = length4;
            char[] cArr7 = new char[length4];
            aFk1wSDK.AFInAppEventParameterName = 0;
            while (true) {
                int i11 = aFk1wSDK.AFInAppEventParameterName;
                int i12 = aFk1wSDK.values;
                if (i11 >= i12) {
                    objArr[0] = new String(cArr7);
                    return;
                } else {
                    cArr7[i11] = (char) (cArr3[cArr2[(i12 - 1) - i11] - i2] - i5);
                    aFk1wSDK.AFInAppEventParameterName = i11 + 1;
                }
            }
        }
    }

    @NonNull
    public final AFe1uSDK<AFc1jSDK> AFInAppEventParameterName(AFc1qSDK aFc1qSDK) {
        AFe1uSDK<AFc1jSDK> values = values(new AFe1hSDK(aFc1qSDK.unregisterClient, AFa1mSDK.valueOf((Map<String, ?>) aFc1qSDK.AFInAppEventType()).toString().getBytes(Charset.defaultCharset()), "POST", Collections.emptyMap(), aFc1qSDK.valueOf()), new AFc1kSDK());
        int i2 = f1771w + 83;
        afInfoLog = i2 % 128;
        if (i2 % 2 != 0) {
            int i3 = 24 / 0;
        }
        return values;
    }

    @Nullable
    public final AFe1uSDK<String> AFInAppEventType(Map<String, Object> map, String str, @Nullable String str2) {
        String AFInAppEventParameterName;
        f1771w = (afInfoLog + 93) % 128;
        try {
            Object[] objArr = {map, str};
            Map<Integer, Object> map2 = AFa1tSDK.afVerboseLog;
            Object obj = map2.get(-606898412);
            if (obj == null) {
                obj = ((Class) AFa1tSDK.valueOf(75 - (SystemClock.uptimeMillis() > 0L ? 1 : (SystemClock.uptimeMillis() == 0L ? 0 : -1)), 37 - (Process.myPid() >> 22), (char) (AndroidCharacter.getMirror('0') + 15826))).getMethod("AFKeystoreWrapper", Map.class, String.class);
                map2.put(-606898412, obj);
            }
            byte[] bArr = (byte[]) ((Method) obj).invoke(null, objArr);
            AFj1uSDK aFj1uSDK = new AFj1uSDK(this.values);
            if (str2 != null) {
                int i2 = afInfoLog + ModuleDescriptor.MODULE_VERSION;
                f1771w = i2 % 128;
                if (i2 % 2 == 0) {
                    str2.length();
                    throw null;
                }
                if (str2.length() != 0 && !new Regex("4.?(\\d+)?.?(\\d+)").matches(str2) && !new Regex("3.?(\\d+)?.?(\\d+)").matches(str2)) {
                    AFInAppEventParameterName = aFj1uSDK.AFInAppEventParameterName.AFInAppEventParameterName("https://%sviap.%s/api/v1/android/validate_purchase_v2?app_id=");
                    StringBuilder p2 = androidx.collection.a.p(AFInAppEventParameterName);
                    p2.append(aFj1uSDK.AFKeystoreWrapper.valueOf.AFKeystoreWrapper.getPackageName());
                    return values(new AFe1hSDK(aFj1uSDK.values(p2.toString()), bArr, "POST", Collections.emptyMap(), true), new AFe1nSDK());
                }
            }
            afInfoLog = (f1771w + 111) % 128;
            AFInAppEventParameterName = aFj1uSDK.AFInAppEventParameterName.AFInAppEventParameterName("https://%sviap.%s/api/v1/android/validate_purchase?app_id=");
            StringBuilder p22 = androidx.collection.a.p(AFInAppEventParameterName);
            p22.append(aFj1uSDK.AFKeystoreWrapper.valueOf.AFKeystoreWrapper.getPackageName());
            return values(new AFe1hSDK(aFj1uSDK.values(p22.toString()), bArr, "POST", Collections.emptyMap(), true), new AFe1nSDK());
        } catch (Throwable th) {
            try {
                Throwable cause = th.getCause();
                if (cause != null) {
                    throw cause;
                }
                throw th;
            } catch (Exception e2) {
                AFLogger.afErrorLogForExcManagerOnly("AFFinalizer: reflection init failed", e2);
                return null;
            }
        }
    }

    @Nullable
    public final AFe1vSDK valueOf(Map<String, Object> map, String str) {
        afInfoLog = (f1771w + 45) % 128;
        try {
            try {
                Object[] objArr = {map, str};
                Map<Integer, Object> map2 = AFa1tSDK.afVerboseLog;
                Object obj = map2.get(-606898412);
                if (obj == null) {
                    obj = ((Class) AFa1tSDK.valueOf(TextUtils.lastIndexOf("", '0') + 75, 38 - (ViewConfiguration.getGlobalActionKeyTimeout() > 0L ? 1 : (ViewConfiguration.getGlobalActionKeyTimeout() == 0L ? 0 : -1)), (char) (15874 - (ViewConfiguration.getEdgeSlop() >> 16)))).getMethod("AFKeystoreWrapper", Map.class, String.class);
                    map2.put(-606898412, obj);
                }
                byte[] bArr = (byte[]) ((Method) obj).invoke(null, objArr);
                if (bArr != null) {
                    return new AFe1vSDK(this.values, bArr);
                }
                AFLogger.afErrorLogForExcManagerOnly("AFFinalizer: failed to create bytes", new IllegalArgumentException("failed to create bytes from proxyData"));
                afInfoLog = (f1771w + 59) % 128;
                return null;
            } catch (Throwable th) {
                Throwable cause = th.getCause();
                if (cause != null) {
                    throw cause;
                }
                throw th;
            }
        } catch (Exception e2) {
            AFLogger.afErrorLogForExcManagerOnly("AFFinalizer: reflection init failed", e2);
            return null;
        }
    }

    @androidx.annotation.Nullable
    public final com.appsflyer.internal.AFe1uSDK<java.lang.String> values(java.util.Map<java.lang.String, java.lang.Object> r18, java.lang.String r19, @androidx.annotation.Nullable java.lang.String r20) {
        throw new UnsupportedOperationException("Method not decompiled: com.appsflyer.internal.AFe1rSDK.values(java.util.Map, java.lang.String, java.lang.String):com.appsflyer.internal.AFe1uSDK");
    }

    public final AFe1uSDK<String> AFKeystoreWrapper(AFh1mSDK aFh1mSDK) {
        AFe1uSDK<String> values = values(new AFe1hSDK(aFh1mSDK.unregisterClient, aFh1mSDK.AFKeystoreWrapper(), "POST", Collections.emptyMap(), true), new AFe1nSDK());
        afInfoLog = (f1771w + 9) % 128;
        return values;
    }

    public final AFe1uSDK<String> AFKeystoreWrapper(@NonNull String str, @NonNull Map<String, String> map, @Nullable String str2, @NonNull UUID uuid, @NonNull String str3) {
        String obj = uuid.toString();
        HashMap hashMap = new HashMap();
        hashMap.put("ttl", "-1");
        hashMap.put("uuid", obj);
        hashMap.put("data", map);
        hashMap.put("meta", AFInAppEventParameterName());
        if (str2 != null) {
            int i2 = afInfoLog + 41;
            f1771w = i2 % 128;
            if (i2 % 2 == 0) {
                hashMap.put("brand_domain", str2);
                int i3 = 54 / 0;
            } else {
                hashMap.put("brand_domain", str2);
            }
        }
        String jSONObject = AFa1mSDK.valueOf((Map<String, ?>) hashMap).toString();
        HashMap hashMap2 = new HashMap();
        Object[] objArr = new Object[1];
        a("\u008c\u008b\u008a\u0089\u0088\u0087\u0086\u0085\u0084\u0083\u0082\u0081", null, null, (ViewConfiguration.getJumpTapTimeout() >> 16) + 127, objArr);
        hashMap2.put(((String) objArr[0]).intern(), AFInAppEventType(str3, obj, "POST", jSONObject));
        StringBuilder sb = new StringBuilder();
        sb.append(String.format(AFKeystoreWrapper, AppsFlyerLib.getInstance().getHostPrefix(), AFb1rSDK.AFInAppEventParameterName().getHostName()));
        sb.append("/");
        sb.append(str);
        AFe1uSDK<String> AFInAppEventParameterName = AFInAppEventParameterName(new AFe1hSDK(sb.toString(), jSONObject.getBytes(Charset.defaultCharset()), "POST", hashMap2, false), new AFe1nSDK(), true);
        afInfoLog = (f1771w + 85) % 128;
        return AFInAppEventParameterName;
    }

    public final AFe1uSDK<Map<String, String>> AFInAppEventParameterName(@NonNull String str, @NonNull String str2, @NonNull UUID uuid, @NonNull String str3) {
        String obj = uuid.toString();
        StringBuilder sb = new StringBuilder();
        sb.append(String.format(AFKeystoreWrapper, AppsFlyerLib.getInstance().getHostPrefix(), AFb1rSDK.AFInAppEventParameterName().getHostName()));
        sb.append("/");
        sb.append(str);
        sb.append("?id=");
        sb.append(str2);
        String obj2 = sb.toString();
        Map<String, Object> AFInAppEventParameterName = AFInAppEventParameterName();
        String valueOf2 = String.valueOf(AFInAppEventParameterName.get("build_number"));
        HashMap hashMap = new HashMap();
        hashMap.put("Af-UUID", uuid.toString());
        hashMap.put("Af-Meta-Sdk-Ver", valueOf2);
        hashMap.put("Af-Meta-Counter", String.valueOf(AFInAppEventParameterName.get("counter")));
        hashMap.put("Af-Meta-Model", String.valueOf(AFInAppEventParameterName.get("model")));
        hashMap.put("Af-Meta-Platform", String.valueOf(AFInAppEventParameterName.get("platformextension")));
        hashMap.put("Af-Meta-System-Version", String.valueOf(AFInAppEventParameterName.get("sdk")));
        Object[] objArr = new Object[1];
        a("\u008c\u008b\u008a\u0089\u0088\u0087\u0086\u0085\u0084\u0083\u0082\u0081", null, null, 127 - Color.argb(0, 0, 0, 0), objArr);
        hashMap.put(((String) objArr[0]).intern(), AFInAppEventType(str3, obj, "GET", obj, str, str2, valueOf2));
        AFe1uSDK<Map<String, String>> values = values(new AFe1hSDK(obj2, null, "GET", hashMap, false), new AFe1gSDK());
        afInfoLog = (f1771w + 53) % 128;
        return values;
    }

    @VisibleForTesting
    private Map<String, Object> AFInAppEventParameterName() {
        HashMap hashMap = new HashMap();
        hashMap.put("build_number", "6.14.1");
        hashMap.put("counter", Integer.valueOf(this.values.values.valueOf("appsFlyerCount", 0)));
        hashMap.put("model", Build.MODEL);
        Object[] objArr = new Object[1];
        a("\u008e\u0087\u0088\u008b\u008d", null, null, (ViewConfiguration.getDoubleTapTimeout() >> 16) + 127, objArr);
        hashMap.put(((String) objArr[0]).intern(), Build.BRAND);
        hashMap.put("sdk", Integer.toString(Build.VERSION.SDK_INT));
        Context context = this.values.valueOf.AFKeystoreWrapper;
        hashMap.put("app_version_name", AFb1vSDK.values(context, context.getPackageName()));
        hashMap.put("app_id", this.values.valueOf.AFKeystoreWrapper.getPackageName());
        hashMap.put("platformextension", new AFb1cSDK().AFKeystoreWrapper());
        int i2 = f1771w + 119;
        afInfoLog = i2 % 128;
        if (i2 % 2 == 0) {
            return hashMap;
        }
        throw null;
    }

    public final AFe1uSDK<String> AFKeystoreWrapper(@NonNull String str) {
        AFe1hSDK aFe1hSDK = new AFe1hSDK(str, null, "GET", Collections.emptyMap(), false);
        aFe1hSDK.registerClient = 10000;
        aFe1hSDK.values = false;
        AFe1uSDK<String> values = values(aFe1hSDK, new AFe1nSDK());
        afInfoLog = (f1771w + 11) % 128;
        return values;
    }

    @Nullable
    public final AFe1uSDK<String> values(AFa1pSDK aFa1pSDK, String str, AFd1nSDK aFd1nSDK) {
        afInfoLog = (f1771w + 103) % 128;
        try {
            Object[] objArr = {aFa1pSDK, str, aFd1nSDK};
            Map<Integer, Object> map = AFa1tSDK.afVerboseLog;
            Object obj = map.get(1431570785);
            if (obj == null) {
                obj = ((Class) AFa1tSDK.valueOf(74 - Color.blue(0), 37 - (AudioTrack.getMinVolume() > 0.0f ? 1 : (AudioTrack.getMinVolume() == 0.0f ? 0 : -1)), (char) ((ViewConfiguration.getTouchSlop() >> 8) + 15874))).getMethod("AFInAppEventType", AFa1pSDK.class, String.class, AFd1nSDK.class);
                map.put(1431570785, obj);
            }
            byte[] bArr = (byte[]) ((Method) obj).invoke(null, objArr);
            f1771w = (afInfoLog + 77) % 128;
            return values(new AFe1hSDK(aFa1pSDK.unregisterClient, bArr, "POST", Collections.emptyMap(), aFa1pSDK.valueOf()), new AFe1nSDK());
        } catch (Throwable th) {
            try {
                Throwable cause = th.getCause();
                if (cause != null) {
                    throw cause;
                }
                throw th;
            } catch (Throwable th2) {
                AFLogger.afErrorLogForExcManagerOnly("AFFinalizer: reflection init failed", th2);
                return null;
            }
        }
    }

    @Nullable
    public final AFe1uSDK<String> AFInAppEventType(Map<String, Object> map, String str) {
        f1771w = (afInfoLog + 43) % 128;
        try {
            Object[] objArr = {map, str};
            Map<Integer, Object> map2 = AFa1tSDK.afVerboseLog;
            Object obj = map2.get(-606898412);
            if (obj == null) {
                obj = ((Class) AFa1tSDK.valueOf(74 - KeyEvent.keyCodeFromString(""), ExpandableListView.getPackedPositionGroup(0L) + 37, (char) (View.combineMeasuredStates(0, 0) + 15874))).getMethod("AFKeystoreWrapper", Map.class, String.class);
                map2.put(-606898412, obj);
            }
            byte[] bArr = (byte[]) ((Method) obj).invoke(null, objArr);
            AFj1uSDK aFj1uSDK = new AFj1uSDK(this.values);
            StringBuilder p2 = androidx.collection.a.p(aFj1uSDK.AFInAppEventParameterName.AFInAppEventParameterName("https://%svalidate-and-log.%s/api/v1.0/android/validateAndLog?app_id="));
            p2.append(aFj1uSDK.AFKeystoreWrapper.valueOf.AFKeystoreWrapper.getPackageName());
            AFe1uSDK<String> values = values(new AFe1hSDK(p2.toString(), bArr, "POST", Collections.emptyMap(), true), new AFe1nSDK());
            int i2 = f1771w + 33;
            afInfoLog = i2 % 128;
            if (i2 % 2 == 0) {
                return values;
            }
            throw null;
        } catch (Throwable th) {
            try {
                Throwable cause = th.getCause();
                if (cause != null) {
                    throw cause;
                }
                throw th;
            } catch (Throwable th2) {
                AFLogger.INSTANCE.e(AFg1bSDK.PURCHASE_VALIDATION, "AFFinalizer: reflection init failed", th2, false, false);
                return null;
            }
        }
    }

    public final AFe1uSDK<Map<String, Object>> values(String str, String str2) {
        String packageName = this.values.valueOf.AFKeystoreWrapper.getPackageName();
        AFd1sSDK aFd1sSDK = this.values;
        AFe1uSDK<Map<String, Object>> values = values(AFe1qSDK.AFInAppEventParameterName(packageName, AFb1jSDK.AFInAppEventType(aFd1sSDK.valueOf, aFd1sSDK.values), str, str2), new AFe1lSDK());
        afInfoLog = (f1771w + 69) % 128;
        return values;
    }

    private <T> AFe1uSDK<T> AFInAppEventParameterName(AFe1hSDK aFe1hSDK, AFe1iSDK<T> aFe1iSDK, boolean z2) {
        aFe1hSDK.AFInAppEventParameterName = z2;
        AFe1tSDK aFe1tSDK = this.AFInAppEventType;
        AFe1uSDK<T> aFe1uSDK = new AFe1uSDK<>(aFe1hSDK, aFe1tSDK.AFKeystoreWrapper, aFe1tSDK.valueOf, aFe1iSDK);
        afInfoLog = (f1771w + 81) % 128;
        return aFe1uSDK;
    }

    private <T> AFe1uSDK<T> values(AFe1hSDK aFe1hSDK, AFe1iSDK<T> aFe1iSDK) {
        afInfoLog = (f1771w + 105) % 128;
        AFe1uSDK<T> AFInAppEventParameterName = AFInAppEventParameterName(aFe1hSDK, aFe1iSDK, values());
        int i2 = f1771w + 93;
        afInfoLog = i2 % 128;
        if (i2 % 2 == 0) {
            return AFInAppEventParameterName;
        }
        throw null;
    }

    private boolean values() {
        if (this.AFInAppEventParameterName.getBoolean(AppsFlyerProperties.HTTP_CACHE, true)) {
            return false;
        }
        afInfoLog = (f1771w + 79) % 128;
        return true;
    }

    @NonNull
    public final AFe1uSDK<AFh1aSDK> AFInAppEventType(boolean z2, boolean z3, @NonNull String str, int i2) {
        String str2;
        String str3;
        f1771w = (afInfoLog + 3) % 128;
        AFe1bSDK aFe1bSDK = this.registerClient;
        Intrinsics.checkNotNullParameter(str, "");
        if (z2) {
            f1771w = (afInfoLog + 77) % 128;
            str2 = AFe1bSDK.AFInAppEventType;
        } else {
            str2 = AFe1bSDK.AFInAppEventParameterName;
            f1771w = (afInfoLog + 33) % 128;
        }
        if (z3) {
            int i3 = afInfoLog + 49;
            f1771w = i3 % 128;
            if (i3 % 2 != 0) {
                str3 = "stg";
            } else {
                throw null;
            }
        } else {
            str3 = "";
        }
        StringCompanionObject stringCompanionObject = StringCompanionObject.INSTANCE;
        String format = String.format(str2, Arrays.copyOf(new Object[]{AFe1bSDK.valueOf() ^ true ? "" : (String) aFe1bSDK.AFInAppEventParameterName.getValue(), str3, aFe1bSDK.AFInAppEventType(), str}, 4));
        Intrinsics.checkNotNullExpressionValue(format, "");
        AFe1hSDK aFe1hSDK = new AFe1hSDK(format, "GET");
        aFe1hSDK.registerClient = 1500;
        return values(aFe1hSDK, new AFe1pSDK());
    }

    private static String AFInAppEventType(String str, String str2, String... strArr) {
        ArrayList arrayList = new ArrayList(Arrays.asList(strArr));
        arrayList.add(1, "v2");
        String join = TextUtils.join("\u2063", (String[]) arrayList.toArray(new String[0]));
        StringBuilder sb = new StringBuilder();
        sb.append(str);
        sb.append(str2);
        sb.append("v2");
        String AFInAppEventParameterName = AFb1mSDK.AFInAppEventParameterName(join, sb.toString());
        f1771w = (afInfoLog + 21) % 128;
        return AFInAppEventParameterName;
    }
}