UUID22.smali

.class public Lcn/rongcloud/rtc/utils/UUID22;
.super Ljava/lang/Object;
.source "UUID22.java"


# static fields
.field private static alphabet:[C


# direct methods
.method static constructor <clinit>()V
    .registers 1

    const-string v0, "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_="

    .line 1
    invoke-virtual {v0}, Ljava/lang/String;->toCharArray()[C

    move-result-object v0

    sput-object v0, Lcn/rongcloud/rtc/utils/UUID22;->alphabet:[C

    return-void
.end method

.method public constructor <init>()V
    .registers 1

    .line 1
    invoke-direct {p0}, Ljava/lang/Object;-><init>()V

    return-void
.end method

.method private encode([B)[C
    .registers 12

    .line 1
    array-length v0, p1

    add-int/lit8 v0, v0, 0x2

    div-int/lit8 v0, v0, 0x3

    mul-int/lit8 v0, v0, 0x4

    new-array v0, v0, [C

    const/4 v1, 0x0

    const/4 v2, 0x0

    const/4 v3, 0x0

    .line 2
    :goto_c
    array-length v4, p1

    if-ge v2, v4, :cond_6b

    .line 3
    aget-byte v4, p1, v2

    and-int/lit16 v4, v4, 0xff

    shl-int/lit8 v4, v4, 0x8

    add-int/lit8 v5, v2, 0x1

    .line 4
    array-length v6, p1

    const/4 v7, 0x1

    if-ge v5, v6, :cond_22

    .line 5
    aget-byte v5, p1, v5

    and-int/lit16 v5, v5, 0xff

    or-int/2addr v4, v5

    const/4 v5, 0x1

    goto :goto_23

    :cond_22
    const/4 v5, 0x0

    :goto_23
    shl-int/lit8 v4, v4, 0x8

    add-int/lit8 v6, v2, 0x2

    .line 6
    array-length v8, p1

    if-ge v6, v8, :cond_30

    .line 7
    aget-byte v6, p1, v6

    and-int/lit16 v6, v6, 0xff

    or-int/2addr v4, v6

    goto :goto_31

    :cond_30
    const/4 v7, 0x0

    :goto_31
    add-int/lit8 v6, v3, 0x3

    .line 8
    sget-object v8, Lcn/rongcloud/rtc/utils/UUID22;->alphabet:[C

    const/16 v9, 0x40

    if-eqz v7, :cond_3c

    and-int/lit8 v7, v4, 0x3f

    goto :goto_3e

    :cond_3c
    const/16 v7, 0x40

    :goto_3e
    aget-char v7, v8, v7

    aput-char v7, v0, v6

    shr-int/lit8 v4, v4, 0x6

    add-int/lit8 v6, v3, 0x2

    .line 9
    sget-object v7, Lcn/rongcloud/rtc/utils/UUID22;->alphabet:[C

    if-eqz v5, :cond_4c

    and-int/lit8 v9, v4, 0x3f

    :cond_4c
    aget-char v5, v7, v9

    aput-char v5, v0, v6

    shr-int/lit8 v4, v4, 0x6

    add-int/lit8 v5, v3, 0x1

    .line 10
    sget-object v6, Lcn/rongcloud/rtc/utils/UUID22;->alphabet:[C

    and-int/lit8 v7, v4, 0x3f

    aget-char v7, v6, v7

    aput-char v7, v0, v5

    shr-int/lit8 v4, v4, 0x6

    add-int/lit8 v5, v3, 0x0

    and-int/lit8 v4, v4, 0x3f

    .line 11
    aget-char v4, v6, v4

    aput-char v4, v0, v5

    add-int/lit8 v2, v2, 0x3

    add-int/lit8 v3, v3, 0x4

    goto :goto_c

    :cond_6b
    return-object v0
.end method

.method public static getUUID22()Ljava/lang/String;
    .registers 1

    .line 1
    invoke-static {}, Ljava/util/UUID;->randomUUID()Ljava/util/UUID;

    move-result-object v0

    invoke-static {v0}, Lcn/rongcloud/rtc/utils/UUID22;->getUUID22(Ljava/util/UUID;)Ljava/lang/String;

    move-result-object v0

    return-object v0
.end method

.method public static getUUID22(Ljava/util/UUID;)Ljava/lang/String;
    .registers 19

    .line 2
    invoke-virtual/range {p0 .. p0}, Ljava/util/UUID;->getMostSignificantBits()J

    move-result-wide v0

    .line 3
    invoke-virtual/range {p0 .. p0}, Ljava/util/UUID;->getLeastSignificantBits()J

    move-result-wide v2

    const/16 v4, 0x18

    .line 4
    new-array v4, v4, [C

    const/16 v6, 0x8

    const/4 v7, 0x0

    const/16 v8, 0x8

    const/16 v9, 0x8

    const/4 v10, 0x0

    :goto_14
    const/16 v11, 0x10

    if-ge v7, v11, :cond_bc

    add-int/lit8 v11, v7, 0x3

    mul-int/lit8 v12, v11, 0x8

    const/16 v13, 0x40

    rsub-int/lit8 v12, v12, 0x40

    const/4 v14, 0x1

    const/4 v15, 0x3

    if-le v8, v15, :cond_28

    const v15, 0xffffff

    goto :goto_40

    :cond_28
    if-ltz v8, :cond_35

    mul-int/lit8 v16, v8, 0x8

    shl-int v16, v14, v16

    add-int/lit8 v16, v16, -0x1

    sub-int/2addr v15, v8

    sub-int/2addr v9, v15

    move/from16 v15, v16

    goto :goto_40

    :cond_35
    if-le v9, v15, :cond_38

    goto :goto_39

    :cond_38
    move v15, v9

    :goto_39
    mul-int/lit8 v15, v15, 0x8

    shl-int v15, v14, v15

    sub-int/2addr v15, v14

    add-int/lit8 v9, v9, -0x3

    :goto_40
    if-lez v8, :cond_64

    add-int/lit8 v8, v8, -0x3

    if-gez v12, :cond_48

    move-wide v13, v0

    goto :goto_4d

    :cond_48
    ushr-long v16, v0, v12

    int-to-long v13, v15

    and-long v13, v16, v13

    :goto_4d
    long-to-int v14, v13

    if-gez v8, :cond_62

    .line 5
    invoke-static {v12}, Ljava/lang/Math;->abs(I)I

    move-result v13

    shl-int v13, v14, v13

    .line 6
    invoke-static {v8}, Ljava/lang/Math;->abs(I)I

    move-result v14

    mul-int/lit8 v14, v14, 0x8

    const/4 v15, 0x1

    shl-int v14, v15, v14

    add-int/lit8 v15, v14, -0x1

    goto :goto_65

    :cond_62
    move v13, v14

    goto :goto_65

    :cond_64
    const/4 v13, 0x0

    :goto_65
    if-gez v12, :cond_76

    add-int/lit8 v12, v12, 0x40

    int-to-long v13, v13

    if-gez v12, :cond_6f

    move-wide/from16 v16, v2

    goto :goto_71

    :cond_6f
    ushr-long v16, v2, v12

    :goto_71
    int-to-long v5, v15

    and-long v5, v16, v5

    or-long/2addr v5, v13

    long-to-int v13, v5

    :cond_76
    const/16 v5, 0xf

    if-ne v7, v5, :cond_8d

    add-int/lit8 v5, v10, 0x3

    .line 7
    sget-object v6, Lcn/rongcloud/rtc/utils/UUID22;->alphabet:[C

    const/16 v7, 0x40

    aget-char v14, v6, v7

    aput-char v14, v4, v5

    add-int/lit8 v5, v10, 0x2

    .line 8
    aget-char v6, v6, v7

    aput-char v6, v4, v5

    shl-int/lit8 v5, v13, 0x4

    goto :goto_a3

    :cond_8d
    add-int/lit8 v5, v10, 0x3

    .line 9
    sget-object v6, Lcn/rongcloud/rtc/utils/UUID22;->alphabet:[C

    and-int/lit8 v7, v13, 0x3f

    aget-char v7, v6, v7

    aput-char v7, v4, v5

    shr-int/lit8 v5, v13, 0x6

    add-int/lit8 v7, v10, 0x2

    and-int/lit8 v13, v5, 0x3f

    .line 10
    aget-char v6, v6, v13

    aput-char v6, v4, v7

    shr-int/lit8 v5, v5, 0x6

    :goto_a3
    add-int/lit8 v6, v10, 0x1

    .line 11
    sget-object v7, Lcn/rongcloud/rtc/utils/UUID22;->alphabet:[C

    and-int/lit8 v13, v5, 0x3f

    aget-char v13, v7, v13

    aput-char v13, v4, v6

    shr-int/lit8 v5, v5, 0x6

    and-int/lit8 v5, v5, 0x3f

    .line 12
    aget-char v5, v7, v5

    aput-char v5, v4, v10

    add-int/lit8 v10, v10, 0x4

    move v7, v11

    const/16 v6, 0x8

    goto/16 :goto_14

    .line 13
    :cond_bc
    new-instance v0, Ljava/lang/String;

    const/16 v1, 0x16

    const/4 v2, 0x0

    invoke-direct {v0, v4, v2, v1}, Ljava/lang/String;-><init>([CII)V

    return-object v0
.end method

.method public static main([Ljava/lang/String;)V
    .registers 2

    .line 1
    sget-object p0, Ljava/lang/System;->out:Ljava/io/PrintStream;

    invoke-static {}, Lcn/rongcloud/rtc/utils/UUID22;->getUUID22()Ljava/lang/String;

    move-result-object v0

    invoke-virtual {p0, v0}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V

    return-void
.end method

.method private toBytes()[B
    .registers 13

    .line 1
    invoke-static {}, Ljava/util/UUID;->randomUUID()Ljava/util/UUID;

    move-result-object v0

    .line 2
    invoke-virtual {v0}, Ljava/util/UUID;->getMostSignificantBits()J

    move-result-wide v1

    .line 3
    invoke-virtual {v0}, Ljava/util/UUID;->getLeastSignificantBits()J

    move-result-wide v3

    const/16 v0, 0x10

    .line 4
    new-array v0, v0, [B

    const/4 v5, 0x0

    :goto_11
    const/16 v6, 0x8

    if-ge v5, v6, :cond_2e

    rsub-int/lit8 v7, v5, 0x7

    mul-int/lit8 v7, v7, 0x8

    ushr-long v8, v1, v7

    const-wide/16 v10, 0xff

    and-long/2addr v8, v10

    long-to-int v6, v8

    int-to-byte v6, v6

    .line 5
    aput-byte v6, v0, v5

    add-int/lit8 v6, v5, 0x8

    ushr-long v7, v3, v7

    and-long/2addr v7, v10

    long-to-int v8, v7

    int-to-byte v7, v8

    .line 6
    aput-byte v7, v0, v6

    add-int/lit8 v5, v5, 0x1

    goto :goto_11

    :cond_2e
    return-object v0
.end method


# virtual methods
.method public getUUID()Ljava/lang/String;
    .registers 5

    .line 1
    invoke-direct {p0}, Lcn/rongcloud/rtc/utils/UUID22;->toBytes()[B

    move-result-object v0

    invoke-direct {p0, v0}, Lcn/rongcloud/rtc/utils/UUID22;->encode([B)[C

    move-result-object v0

    .line 2
    sget-object v1, Ljava/lang/System;->out:Ljava/io/PrintStream;

    new-instance v2, Ljava/lang/String;

    invoke-direct {v2, v0}, Ljava/lang/String;-><init>([C)V

    invoke-virtual {v1, v2}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V

    .line 3
    new-instance v1, Ljava/lang/String;

    array-length v2, v0

    add-int/lit8 v2, v2, -0x2

    const/4 v3, 0x0

    invoke-direct {v1, v0, v3, v2}, Ljava/lang/String;-><init>([CII)V

    return-object v1
.end method