Base64$Encoder.smali

.class public Lcom/sdk/orion/ui/baselibrary/utils/Base64$Encoder;
.super Ljava/lang/Object;


# annotations
.annotation system Ldalvik/annotation/EnclosingClass;
    value = Lcom/sdk/orion/ui/baselibrary/utils/Base64;
.end annotation

.annotation system Ldalvik/annotation/InnerClass;
    accessFlags = 0x9
    name = "Encoder"
.end annotation


# static fields
.field private static final CRLF:[B

.field private static final MIMELINEMAX:I = 0x4c

.field static final RFC2045:Lcom/sdk/orion/ui/baselibrary/utils/Base64$Encoder;

.field static final RFC4648:Lcom/sdk/orion/ui/baselibrary/utils/Base64$Encoder;

.field static final RFC4648_URLSAFE:Lcom/sdk/orion/ui/baselibrary/utils/Base64$Encoder;

.field private static final TO_BASE64:[C

.field private static final TO_BASE64_URL:[C


# instance fields
.field private final doPadding:Z

.field private final isURL:Z

.field private final linemax:I

.field private final newline:[B


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

    const/4 v5, 0x0

    const/16 v2, 0x40

    const/4 v4, 0x0

    const/4 v1, -0x1

    const/4 v3, 0x1

    new-array v0, v2, [C

    fill-array-data v0, :array_36

    sput-object v0, Lcom/sdk/orion/ui/baselibrary/utils/Base64$Encoder;->TO_BASE64:[C

    new-array v0, v2, [C

    fill-array-data v0, :array_7a

    sput-object v0, Lcom/sdk/orion/ui/baselibrary/utils/Base64$Encoder;->TO_BASE64_URL:[C

    const/4 v0, 0x2

    new-array v0, v0, [B

    fill-array-data v0, :array_be

    sput-object v0, Lcom/sdk/orion/ui/baselibrary/utils/Base64$Encoder;->CRLF:[B

    new-instance v0, Lcom/sdk/orion/ui/baselibrary/utils/Base64$Encoder;

    invoke-direct {v0, v4, v5, v1, v3}, Lcom/sdk/orion/ui/baselibrary/utils/Base64$Encoder;-><init>(Z[BIZ)V

    sput-object v0, Lcom/sdk/orion/ui/baselibrary/utils/Base64$Encoder;->RFC4648:Lcom/sdk/orion/ui/baselibrary/utils/Base64$Encoder;

    new-instance v0, Lcom/sdk/orion/ui/baselibrary/utils/Base64$Encoder;

    invoke-direct {v0, v3, v5, v1, v3}, Lcom/sdk/orion/ui/baselibrary/utils/Base64$Encoder;-><init>(Z[BIZ)V

    sput-object v0, Lcom/sdk/orion/ui/baselibrary/utils/Base64$Encoder;->RFC4648_URLSAFE:Lcom/sdk/orion/ui/baselibrary/utils/Base64$Encoder;

    new-instance v0, Lcom/sdk/orion/ui/baselibrary/utils/Base64$Encoder;

    sget-object v1, Lcom/sdk/orion/ui/baselibrary/utils/Base64$Encoder;->CRLF:[B

    const/16 v2, 0x4c

    invoke-direct {v0, v4, v1, v2, v3}, Lcom/sdk/orion/ui/baselibrary/utils/Base64$Encoder;-><init>(Z[BIZ)V

    sput-object v0, Lcom/sdk/orion/ui/baselibrary/utils/Base64$Encoder;->RFC2045:Lcom/sdk/orion/ui/baselibrary/utils/Base64$Encoder;

    return-void

    :array_36
    .array-data 2
        0x41s
        0x42s
        0x43s
        0x44s
        0x45s
        0x46s
        0x47s
        0x48s
        0x49s
        0x4as
        0x4bs
        0x4cs
        0x4ds
        0x4es
        0x4fs
        0x50s
        0x51s
        0x52s
        0x53s
        0x54s
        0x55s
        0x56s
        0x57s
        0x58s
        0x59s
        0x5as
        0x61s
        0x62s
        0x63s
        0x64s
        0x65s
        0x66s
        0x67s
        0x68s
        0x69s
        0x6as
        0x6bs
        0x6cs
        0x6ds
        0x6es
        0x6fs
        0x70s
        0x71s
        0x72s
        0x73s
        0x74s
        0x75s
        0x76s
        0x77s
        0x78s
        0x79s
        0x7as
        0x30s
        0x31s
        0x32s
        0x33s
        0x34s
        0x35s
        0x36s
        0x37s
        0x38s
        0x39s
        0x2bs
        0x2fs
    .end array-data

    :array_7a
    .array-data 2
        0x41s
        0x42s
        0x43s
        0x44s
        0x45s
        0x46s
        0x47s
        0x48s
        0x49s
        0x4as
        0x4bs
        0x4cs
        0x4ds
        0x4es
        0x4fs
        0x50s
        0x51s
        0x52s
        0x53s
        0x54s
        0x55s
        0x56s
        0x57s
        0x58s
        0x59s
        0x5as
        0x61s
        0x62s
        0x63s
        0x64s
        0x65s
        0x66s
        0x67s
        0x68s
        0x69s
        0x6as
        0x6bs
        0x6cs
        0x6ds
        0x6es
        0x6fs
        0x70s
        0x71s
        0x72s
        0x73s
        0x74s
        0x75s
        0x76s
        0x77s
        0x78s
        0x79s
        0x7as
        0x30s
        0x31s
        0x32s
        0x33s
        0x34s
        0x35s
        0x36s
        0x37s
        0x38s
        0x39s
        0x2ds
        0x5fs
    .end array-data

    :array_be
    .array-data 1
        0xdt
        0xat
    .end array-data
.end method

.method private constructor <init>(Z[BIZ)V
    .registers 5

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

    iput-boolean p1, p0, Lcom/sdk/orion/ui/baselibrary/utils/Base64$Encoder;->isURL:Z

    iput-object p2, p0, Lcom/sdk/orion/ui/baselibrary/utils/Base64$Encoder;->newline:[B

    iput p3, p0, Lcom/sdk/orion/ui/baselibrary/utils/Base64$Encoder;->linemax:I

    iput-boolean p4, p0, Lcom/sdk/orion/ui/baselibrary/utils/Base64$Encoder;->doPadding:Z

    return-void
.end method

.method synthetic constructor <init>(Z[BIZLcom/sdk/orion/ui/baselibrary/utils/Base64$1;)V
    .registers 6

    invoke-direct {p0, p1, p2, p3, p4}, Lcom/sdk/orion/ui/baselibrary/utils/Base64$Encoder;-><init>(Z[BIZ)V

    return-void
.end method

.method static synthetic access$200()[C
    .registers 1

    sget-object v0, Lcom/sdk/orion/ui/baselibrary/utils/Base64$Encoder;->TO_BASE64:[C

    return-object v0
.end method

.method static synthetic access$300()[C
    .registers 1

    sget-object v0, Lcom/sdk/orion/ui/baselibrary/utils/Base64$Encoder;->TO_BASE64_URL:[C

    return-object v0
.end method

.method private encode0([BII[B)I
    .registers 15

    iget-boolean v0, p0, Lcom/sdk/orion/ui/baselibrary/utils/Base64$Encoder;->isURL:Z

    if-eqz v0, :cond_72

    sget-object v0, Lcom/sdk/orion/ui/baselibrary/utils/Base64$Encoder;->TO_BASE64_URL:[C

    :goto_6
    sub-int v1, p3, p2

    div-int/lit8 v1, v1, 0x3

    mul-int/lit8 v1, v1, 0x3

    add-int v6, p2, v1

    const/4 v2, 0x3

    const/4 v3, 0x4

    iget v4, p0, Lcom/sdk/orion/ui/baselibrary/utils/Base64$Encoder;->linemax:I

    if-lez v4, :cond_21

    iget v4, p0, Lcom/sdk/orion/ui/baselibrary/utils/Base64$Encoder;->linemax:I

    div-int v3, v4, v3

    mul-int/2addr v2, v3

    if-le v1, v2, :cond_21

    iget v1, p0, Lcom/sdk/orion/ui/baselibrary/utils/Base64$Encoder;->linemax:I

    div-int/lit8 v1, v1, 0x4

    mul-int/lit8 v1, v1, 0x3

    :cond_21
    const/4 v2, 0x0

    move v5, p2

    :goto_23
    if-ge v5, v6, :cond_95

    add-int v3, v5, v1

    invoke-static {v3, v6}, Ljava/lang/Math;->min(II)I

    move-result p2

    move v3, v2

    move v4, v5

    :goto_2d
    if-ge v4, p2, :cond_75

    add-int/lit8 v7, v4, 0x1

    aget-byte v4, p1, v4

    and-int/lit16 v4, v4, 0xff

    shl-int/lit8 v4, v4, 0x10

    add-int/lit8 v8, v7, 0x1

    aget-byte v7, p1, v7

    and-int/lit16 v7, v7, 0xff

    shl-int/lit8 v7, v7, 0x8

    or-int/2addr v7, v4

    add-int/lit8 v4, v8, 0x1

    aget-byte v8, p1, v8

    and-int/lit16 v8, v8, 0xff

    or-int/2addr v7, v8

    add-int/lit8 v8, v3, 0x1

    ushr-int/lit8 v9, v7, 0x12

    and-int/lit8 v9, v9, 0x3f

    aget-char v9, v0, v9

    int-to-byte v9, v9

    aput-byte v9, p4, v3

    add-int/lit8 v3, v8, 0x1

    ushr-int/lit8 v9, v7, 0xc

    and-int/lit8 v9, v9, 0x3f

    aget-char v9, v0, v9

    int-to-byte v9, v9

    aput-byte v9, p4, v8

    add-int/lit8 v8, v3, 0x1

    ushr-int/lit8 v9, v7, 0x6

    and-int/lit8 v9, v9, 0x3f

    aget-char v9, v0, v9

    int-to-byte v9, v9

    aput-byte v9, p4, v3

    add-int/lit8 v3, v8, 0x1

    and-int/lit8 v7, v7, 0x3f

    aget-char v7, v0, v7

    int-to-byte v7, v7

    aput-byte v7, p4, v8

    goto :goto_2d

    :cond_72
    sget-object v0, Lcom/sdk/orion/ui/baselibrary/utils/Base64$Encoder;->TO_BASE64:[C

    goto :goto_6

    :cond_75
    sub-int v3, p2, v5

    div-int/lit8 v3, v3, 0x3

    mul-int/lit8 v3, v3, 0x4

    add-int/2addr v2, v3

    iget v4, p0, Lcom/sdk/orion/ui/baselibrary/utils/Base64$Encoder;->linemax:I

    if-ne v3, v4, :cond_93

    if-ge p2, p3, :cond_93

    iget-object v5, p0, Lcom/sdk/orion/ui/baselibrary/utils/Base64$Encoder;->newline:[B

    array-length v7, v5

    const/4 v3, 0x0

    :goto_86
    if-ge v3, v7, :cond_93

    aget-byte v8, v5, v3

    add-int/lit8 v4, v2, 0x1

    aput-byte v8, p4, v2

    add-int/lit8 v2, v3, 0x1

    move v3, v2

    move v2, v4

    goto :goto_86

    :cond_93
    move v5, p2

    goto :goto_23

    :cond_95
    if-ge v5, p3, :cond_f0

    add-int/lit8 v1, v5, 0x1

    aget-byte v3, p1, v5

    and-int/lit16 v3, v3, 0xff

    add-int/lit8 v4, v2, 0x1

    shr-int/lit8 v5, v3, 0x2

    aget-char v5, v0, v5

    int-to-byte v5, v5

    aput-byte v5, p4, v2

    if-ne v1, p3, :cond_c4

    add-int/lit8 v1, v4, 0x1

    shl-int/lit8 v2, v3, 0x4

    and-int/lit8 v2, v2, 0x3f

    aget-char v0, v0, v2

    int-to-byte v0, v0

    aput-byte v0, p4, v4

    iget-boolean v0, p0, Lcom/sdk/orion/ui/baselibrary/utils/Base64$Encoder;->doPadding:Z

    if-eqz v0, :cond_ee

    add-int/lit8 v2, v1, 0x1

    const/16 v0, 0x3d

    aput-byte v0, p4, v1

    add-int/lit8 v0, v2, 0x1

    const/16 v1, 0x3d

    aput-byte v1, p4, v2

    :goto_c3
    return v0

    :cond_c4
    add-int/lit8 v2, v1, 0x1

    aget-byte v1, p1, v1

    and-int/lit16 v2, v1, 0xff

    add-int/lit8 v5, v4, 0x1

    shl-int/lit8 v1, v3, 0x4

    and-int/lit8 v1, v1, 0x3f

    shr-int/lit8 v3, v2, 0x4

    or-int/2addr v1, v3

    aget-char v1, v0, v1

    int-to-byte v1, v1

    aput-byte v1, p4, v4

    add-int/lit8 v1, v5, 0x1

    shl-int/lit8 v2, v2, 0x2

    and-int/lit8 v2, v2, 0x3f

    aget-char v0, v0, v2

    int-to-byte v0, v0

    aput-byte v0, p4, v5

    iget-boolean v0, p0, Lcom/sdk/orion/ui/baselibrary/utils/Base64$Encoder;->doPadding:Z

    if-eqz v0, :cond_ee

    add-int/lit8 v0, v1, 0x1

    const/16 v2, 0x3d

    aput-byte v2, p4, v1

    goto :goto_c3

    :cond_ee
    move v0, v1

    goto :goto_c3

    :cond_f0
    move v0, v2

    goto :goto_c3
.end method

.method private outLength(I)I
    .registers 5

    iget-boolean v0, p0, Lcom/sdk/orion/ui/baselibrary/utils/Base64$Encoder;->doPadding:Z

    if-eqz v0, :cond_19

    add-int/lit8 v0, p1, 0x2

    div-int/lit8 v0, v0, 0x3

    mul-int/lit8 v0, v0, 0x4

    :goto_a
    iget v1, p0, Lcom/sdk/orion/ui/baselibrary/utils/Base64$Encoder;->linemax:I

    if-lez v1, :cond_18

    add-int/lit8 v1, v0, -0x1

    iget v2, p0, Lcom/sdk/orion/ui/baselibrary/utils/Base64$Encoder;->linemax:I

    div-int/2addr v1, v2

    iget-object v2, p0, Lcom/sdk/orion/ui/baselibrary/utils/Base64$Encoder;->newline:[B

    array-length v2, v2

    mul-int/2addr v1, v2

    add-int/2addr v0, v1

    :cond_18
    return v0

    :cond_19
    rem-int/lit8 v0, p1, 0x3

    div-int/lit8 v1, p1, 0x3

    mul-int/lit8 v1, v1, 0x4

    if-nez v0, :cond_24

    const/4 v0, 0x0

    :goto_22
    add-int/2addr v0, v1

    goto :goto_a

    :cond_24
    add-int/lit8 v0, v0, 0x1

    goto :goto_22
.end method


# virtual methods
.method public encode([B[B)I
    .registers 5

    array-length v0, p1

    invoke-direct {p0, v0}, Lcom/sdk/orion/ui/baselibrary/utils/Base64$Encoder;->outLength(I)I

    move-result v0

    array-length v1, p2

    if-ge v1, v0, :cond_11

    new-instance v0, Ljava/lang/IllegalArgumentException;

    const-string/jumbo v1, "Output byte array is too small for encoding all input bytes"

    invoke-direct {v0, v1}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V

    throw v0

    :cond_11
    const/4 v0, 0x0

    array-length v1, p1

    invoke-direct {p0, p1, v0, v1, p2}, Lcom/sdk/orion/ui/baselibrary/utils/Base64$Encoder;->encode0([BII[B)I

    move-result v0

    return v0
.end method

.method public encode(Ljava/nio/ByteBuffer;)Ljava/nio/ByteBuffer;
    .registers 7

    invoke-virtual {p1}, Ljava/nio/ByteBuffer;->remaining()I

    move-result v0

    invoke-direct {p0, v0}, Lcom/sdk/orion/ui/baselibrary/utils/Base64$Encoder;->outLength(I)I

    move-result v0

    new-array v1, v0, [B

    invoke-virtual {p1}, Ljava/nio/ByteBuffer;->hasArray()Z

    move-result v0

    if-eqz v0, :cond_3d

    invoke-virtual {p1}, Ljava/nio/ByteBuffer;->array()[B

    move-result-object v0

    invoke-virtual {p1}, Ljava/nio/ByteBuffer;->arrayOffset()I

    move-result v2

    invoke-virtual {p1}, Ljava/nio/ByteBuffer;->position()I

    move-result v3

    add-int/2addr v2, v3

    invoke-virtual {p1}, Ljava/nio/ByteBuffer;->arrayOffset()I

    move-result v3

    invoke-virtual {p1}, Ljava/nio/ByteBuffer;->limit()I

    move-result v4

    add-int/2addr v3, v4

    invoke-direct {p0, v0, v2, v3, v1}, Lcom/sdk/orion/ui/baselibrary/utils/Base64$Encoder;->encode0([BII[B)I

    move-result v0

    invoke-virtual {p1}, Ljava/nio/ByteBuffer;->limit()I

    move-result v2

    invoke-virtual {p1, v2}, Ljava/nio/ByteBuffer;->position(I)Ljava/nio/Buffer;

    :goto_31
    array-length v2, v1

    if-eq v0, v2, :cond_4d

    invoke-static {v1, v0}, Ljava/util/Arrays;->copyOf([BI)[B

    move-result-object v0

    :goto_38
    invoke-static {v0}, Ljava/nio/ByteBuffer;->wrap([B)Ljava/nio/ByteBuffer;

    move-result-object v0

    return-object v0

    :cond_3d
    invoke-virtual {p1}, Ljava/nio/ByteBuffer;->remaining()I

    move-result v0

    new-array v0, v0, [B

    invoke-virtual {p1, v0}, Ljava/nio/ByteBuffer;->get([B)Ljava/nio/ByteBuffer;

    const/4 v2, 0x0

    array-length v3, v0

    invoke-direct {p0, v0, v2, v3, v1}, Lcom/sdk/orion/ui/baselibrary/utils/Base64$Encoder;->encode0([BII[B)I

    move-result v0

    goto :goto_31

    :cond_4d
    move-object v0, v1

    goto :goto_38
.end method

.method public encode([B)[B
    .registers 5

    array-length v0, p1

    invoke-direct {p0, v0}, Lcom/sdk/orion/ui/baselibrary/utils/Base64$Encoder;->outLength(I)I

    move-result v0

    new-array v0, v0, [B

    const/4 v1, 0x0

    array-length v2, p1

    invoke-direct {p0, p1, v1, v2, v0}, Lcom/sdk/orion/ui/baselibrary/utils/Base64$Encoder;->encode0([BII[B)I

    move-result v1

    array-length v2, v0

    if-eq v1, v2, :cond_14

    invoke-static {v0, v1}, Ljava/util/Arrays;->copyOf([BI)[B

    move-result-object v0

    :cond_14
    return-object v0
.end method

.method public encodeToString([B)Ljava/lang/String;
    .registers 6

    const/4 v3, 0x0

    invoke-virtual {p0, p1}, Lcom/sdk/orion/ui/baselibrary/utils/Base64$Encoder;->encode([B)[B

    move-result-object v0

    new-instance v1, Ljava/lang/String;

    array-length v2, v0

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

    return-object v1
.end method

.method public withoutPadding()Lcom/sdk/orion/ui/baselibrary/utils/Base64$Encoder;
    .registers 6

    iget-boolean v0, p0, Lcom/sdk/orion/ui/baselibrary/utils/Base64$Encoder;->doPadding:Z

    if-nez v0, :cond_5

    :goto_4
    return-object p0

    :cond_5
    new-instance v0, Lcom/sdk/orion/ui/baselibrary/utils/Base64$Encoder;

    iget-boolean v1, p0, Lcom/sdk/orion/ui/baselibrary/utils/Base64$Encoder;->isURL:Z

    iget-object v2, p0, Lcom/sdk/orion/ui/baselibrary/utils/Base64$Encoder;->newline:[B

    iget v3, p0, Lcom/sdk/orion/ui/baselibrary/utils/Base64$Encoder;->linemax:I

    const/4 v4, 0x0

    invoke-direct {v0, v1, v2, v3, v4}, Lcom/sdk/orion/ui/baselibrary/utils/Base64$Encoder;-><init>(Z[BIZ)V

    move-object p0, v0

    goto :goto_4
.end method

.method public wrap(Ljava/io/OutputStream;)Ljava/io/OutputStream;
    .registers 8
    .annotation build Landroid/annotation/TargetApi;
        value = 0x13
    .end annotation

    invoke-static {p1}, Ljava/util/Objects;->requireNonNull(Ljava/lang/Object;)Ljava/lang/Object;

    new-instance v0, Lcom/sdk/orion/ui/baselibrary/utils/Base64$EncOutputStream;

    iget-boolean v1, p0, Lcom/sdk/orion/ui/baselibrary/utils/Base64$Encoder;->isURL:Z

    if-eqz v1, :cond_16

    sget-object v2, Lcom/sdk/orion/ui/baselibrary/utils/Base64$Encoder;->TO_BASE64_URL:[C

    :goto_b
    iget-object v3, p0, Lcom/sdk/orion/ui/baselibrary/utils/Base64$Encoder;->newline:[B

    iget v4, p0, Lcom/sdk/orion/ui/baselibrary/utils/Base64$Encoder;->linemax:I

    iget-boolean v5, p0, Lcom/sdk/orion/ui/baselibrary/utils/Base64$Encoder;->doPadding:Z

    move-object v1, p1

    invoke-direct/range {v0 .. v5}, Lcom/sdk/orion/ui/baselibrary/utils/Base64$EncOutputStream;-><init>(Ljava/io/OutputStream;[C[BIZ)V

    return-object v0

    :cond_16
    sget-object v2, Lcom/sdk/orion/ui/baselibrary/utils/Base64$Encoder;->TO_BASE64:[C

    goto :goto_b
.end method