.class Lokhttp3/internal/framed/Huffman; .super Ljava/lang/Object; .source "Huffman.java" # annotations .annotation system Ldalvik/annotation/MemberClasses; value = { Lokhttp3/internal/framed/Huffman$Node; } .end annotation # static fields .field private static final CODES:[I .field private static final CODE_LENGTHS:[B .field private static final INSTANCE:Lokhttp3/internal/framed/Huffman; # instance fields .field private final root:Lokhttp3/internal/framed/Huffman$Node; # direct methods .method static constructor ()V .locals 2 .prologue const/16 v1, 0x100 new-array v0, v1, [I fill-array-data v0, :array_0 sput-object v0, Lokhttp3/internal/framed/Huffman;->CODES:[I new-array v0, v1, [B fill-array-data v0, :array_1 sput-object v0, Lokhttp3/internal/framed/Huffman;->CODE_LENGTHS:[B new-instance v0, Lokhttp3/internal/framed/Huffman; invoke-direct {v0}, Lokhttp3/internal/framed/Huffman;->()V sput-object v0, Lokhttp3/internal/framed/Huffman;->INSTANCE:Lokhttp3/internal/framed/Huffman; return-void :array_0 .array-data 4 0x1ff8 0x7fffd8 0xfffffe2 0xfffffe3 0xfffffe4 0xfffffe5 0xfffffe6 0xfffffe7 0xfffffe8 0xffffea 0x3ffffffc # 1.9999995f 0xfffffe9 0xfffffea 0x3ffffffd # 1.9999996f 0xfffffeb 0xfffffec 0xfffffed 0xfffffee 0xfffffef 0xffffff0 0xffffff1 0xffffff2 0x3ffffffe # 1.9999998f 0xffffff3 0xffffff4 0xffffff5 0xffffff6 0xffffff7 0xffffff8 0xffffff9 0xffffffa 0xffffffb 0x14 0x3f8 0x3f9 0xffa 0x1ff9 0x15 0xf8 0x7fa 0x3fa 0x3fb 0xf9 0x7fb 0xfa 0x16 0x17 0x18 0x0 0x1 0x2 0x19 0x1a 0x1b 0x1c 0x1d 0x1e 0x1f 0x5c 0xfb 0x7ffc 0x20 0xffb 0x3fc 0x1ffa 0x21 0x5d 0x5e 0x5f 0x60 0x61 0x62 0x63 0x64 0x65 0x66 0x67 0x68 0x69 0x6a 0x6b 0x6c 0x6d 0x6e 0x6f 0x70 0x71 0x72 0xfc 0x73 0xfd 0x1ffb 0x7fff0 0x1ffc 0x3ffc 0x22 0x7ffd 0x3 0x23 0x4 0x24 0x5 0x25 0x26 0x27 0x6 0x74 0x75 0x28 0x29 0x2a 0x7 0x2b 0x76 0x2c 0x8 0x9 0x2d 0x77 0x78 0x79 0x7a 0x7b 0x7ffe 0x7fc 0x3ffd 0x1ffd 0xffffffc 0xfffe6 0x3fffd2 0xfffe7 0xfffe8 0x3fffd3 0x3fffd4 0x3fffd5 0x7fffd9 0x3fffd6 0x7fffda 0x7fffdb 0x7fffdc 0x7fffdd 0x7fffde 0xffffeb 0x7fffdf 0xffffec 0xffffed 0x3fffd7 0x7fffe0 0xffffee 0x7fffe1 0x7fffe2 0x7fffe3 0x7fffe4 0x1fffdc 0x3fffd8 0x7fffe5 0x3fffd9 0x7fffe6 0x7fffe7 0xffffef 0x3fffda 0x1fffdd 0xfffe9 0x3fffdb 0x3fffdc 0x7fffe8 0x7fffe9 0x1fffde 0x7fffea 0x3fffdd 0x3fffde 0xfffff0 0x1fffdf 0x3fffdf 0x7fffeb 0x7fffec 0x1fffe0 0x1fffe1 0x3fffe0 0x1fffe2 0x7fffed 0x3fffe1 0x7fffee 0x7fffef 0xfffea 0x3fffe2 0x3fffe3 0x3fffe4 0x7ffff0 0x3fffe5 0x3fffe6 0x7ffff1 0x3ffffe0 0x3ffffe1 0xfffeb 0x7fff1 0x3fffe7 0x7ffff2 0x3fffe8 0x1ffffec 0x3ffffe2 0x3ffffe3 0x3ffffe4 0x7ffffde 0x7ffffdf 0x3ffffe5 0xfffff1 0x1ffffed 0x7fff2 0x1fffe3 0x3ffffe6 0x7ffffe0 0x7ffffe1 0x3ffffe7 0x7ffffe2 0xfffff2 0x1fffe4 0x1fffe5 0x3ffffe8 0x3ffffe9 0xffffffd 0x7ffffe3 0x7ffffe4 0x7ffffe5 0xfffec 0xfffff3 0xfffed 0x1fffe6 0x3fffe9 0x1fffe7 0x1fffe8 0x7ffff3 0x3fffea 0x3fffeb 0x1ffffee 0x1ffffef 0xfffff4 0xfffff5 0x3ffffea 0x7ffff4 0x3ffffeb 0x7ffffe6 0x3ffffec 0x3ffffed 0x7ffffe7 0x7ffffe8 0x7ffffe9 0x7ffffea 0x7ffffeb 0xffffffe 0x7ffffec 0x7ffffed 0x7ffffee 0x7ffffef 0x7fffff0 0x3ffffee .end array-data :array_1 .array-data 1 0xdt 0x17t 0x1ct 0x1ct 0x1ct 0x1ct 0x1ct 0x1ct 0x1ct 0x18t 0x1et 0x1ct 0x1ct 0x1et 0x1ct 0x1ct 0x1ct 0x1ct 0x1ct 0x1ct 0x1ct 0x1ct 0x1et 0x1ct 0x1ct 0x1ct 0x1ct 0x1ct 0x1ct 0x1ct 0x1ct 0x1ct 0x6t 0xat 0xat 0xct 0xdt 0x6t 0x8t 0xbt 0xat 0xat 0x8t 0xbt 0x8t 0x6t 0x6t 0x6t 0x5t 0x5t 0x5t 0x6t 0x6t 0x6t 0x6t 0x6t 0x6t 0x6t 0x7t 0x8t 0xft 0x6t 0xct 0xat 0xdt 0x6t 0x7t 0x7t 0x7t 0x7t 0x7t 0x7t 0x7t 0x7t 0x7t 0x7t 0x7t 0x7t 0x7t 0x7t 0x7t 0x7t 0x7t 0x7t 0x7t 0x7t 0x7t 0x7t 0x8t 0x7t 0x8t 0xdt 0x13t 0xdt 0xet 0x6t 0xft 0x5t 0x6t 0x5t 0x6t 0x5t 0x6t 0x6t 0x6t 0x5t 0x7t 0x7t 0x6t 0x6t 0x6t 0x5t 0x6t 0x7t 0x6t 0x5t 0x5t 0x6t 0x7t 0x7t 0x7t 0x7t 0x7t 0xft 0xbt 0xet 0xdt 0x1ct 0x14t 0x16t 0x14t 0x14t 0x16t 0x16t 0x16t 0x17t 0x16t 0x17t 0x17t 0x17t 0x17t 0x17t 0x18t 0x17t 0x18t 0x18t 0x16t 0x17t 0x18t 0x17t 0x17t 0x17t 0x17t 0x15t 0x16t 0x17t 0x16t 0x17t 0x17t 0x18t 0x16t 0x15t 0x14t 0x16t 0x16t 0x17t 0x17t 0x15t 0x17t 0x16t 0x16t 0x18t 0x15t 0x16t 0x17t 0x17t 0x15t 0x15t 0x16t 0x15t 0x17t 0x16t 0x17t 0x17t 0x14t 0x16t 0x16t 0x16t 0x17t 0x16t 0x16t 0x17t 0x1at 0x1at 0x14t 0x13t 0x16t 0x17t 0x16t 0x19t 0x1at 0x1at 0x1at 0x1bt 0x1bt 0x1at 0x18t 0x19t 0x13t 0x15t 0x1at 0x1bt 0x1bt 0x1at 0x1bt 0x18t 0x15t 0x15t 0x1at 0x1at 0x1ct 0x1bt 0x1bt 0x1bt 0x14t 0x18t 0x14t 0x15t 0x16t 0x15t 0x15t 0x17t 0x16t 0x16t 0x19t 0x19t 0x18t 0x18t 0x1at 0x17t 0x1at 0x1bt 0x1at 0x1at 0x1bt 0x1bt 0x1bt 0x1bt 0x1bt 0x1ct 0x1bt 0x1bt 0x1bt 0x1bt 0x1bt 0x1at .end array-data .end method .method private constructor ()V .locals 1 .prologue invoke-direct {p0}, Ljava/lang/Object;->()V new-instance v0, Lokhttp3/internal/framed/Huffman$Node; invoke-direct {v0}, Lokhttp3/internal/framed/Huffman$Node;->()V iput-object v0, p0, Lokhttp3/internal/framed/Huffman;->root:Lokhttp3/internal/framed/Huffman$Node; invoke-direct {p0}, Lokhttp3/internal/framed/Huffman;->buildTree()V return-void .end method .method private addCode(IIB)V .locals 8 .param p1, "sym" # I .param p2, "code" # I .param p3, "len" # B .prologue new-instance v5, Lokhttp3/internal/framed/Huffman$Node; invoke-direct {v5, p1, p3}, Lokhttp3/internal/framed/Huffman$Node;->(II)V .local v5, "terminal":Lokhttp3/internal/framed/Huffman$Node; iget-object v0, p0, Lokhttp3/internal/framed/Huffman;->root:Lokhttp3/internal/framed/Huffman$Node; .local v0, "current":Lokhttp3/internal/framed/Huffman$Node; :goto_0 const/16 v6, 0x8 if-le p3, v6, :cond_2 add-int/lit8 v6, p3, -0x8 int-to-byte p3, v6 ushr-int v6, p2, p3 and-int/lit16 v2, v6, 0xff .local v2, "i":I invoke-static {v0}, Lokhttp3/internal/framed/Huffman$Node;->access$000(Lokhttp3/internal/framed/Huffman$Node;)[Lokhttp3/internal/framed/Huffman$Node; move-result-object v6 if-nez v6, :cond_0 new-instance v6, Ljava/lang/IllegalStateException; const-string v7, "invalid dictionary: prefix not unique" invoke-direct {v6, v7}, Ljava/lang/IllegalStateException;->(Ljava/lang/String;)V throw v6 :cond_0 invoke-static {v0}, Lokhttp3/internal/framed/Huffman$Node;->access$000(Lokhttp3/internal/framed/Huffman$Node;)[Lokhttp3/internal/framed/Huffman$Node; move-result-object v6 aget-object v6, v6, v2 if-nez v6, :cond_1 invoke-static {v0}, Lokhttp3/internal/framed/Huffman$Node;->access$000(Lokhttp3/internal/framed/Huffman$Node;)[Lokhttp3/internal/framed/Huffman$Node; move-result-object v6 new-instance v7, Lokhttp3/internal/framed/Huffman$Node; invoke-direct {v7}, Lokhttp3/internal/framed/Huffman$Node;->()V aput-object v7, v6, v2 :cond_1 invoke-static {v0}, Lokhttp3/internal/framed/Huffman$Node;->access$000(Lokhttp3/internal/framed/Huffman$Node;)[Lokhttp3/internal/framed/Huffman$Node; move-result-object v6 aget-object v0, v6, v2 goto :goto_0 .end local v2 # "i":I :cond_2 rsub-int/lit8 v3, p3, 0x8 .local v3, "shift":I shl-int v6, p2, v3 and-int/lit16 v4, v6, 0xff .local v4, "start":I const/4 v6, 0x1 shl-int v1, v6, v3 .local v1, "end":I move v2, v4 .restart local v2 # "i":I :goto_1 add-int v6, v4, v1 if-ge v2, v6, :cond_3 invoke-static {v0}, Lokhttp3/internal/framed/Huffman$Node;->access$000(Lokhttp3/internal/framed/Huffman$Node;)[Lokhttp3/internal/framed/Huffman$Node; move-result-object v6 aput-object v5, v6, v2 add-int/lit8 v2, v2, 0x1 goto :goto_1 :cond_3 return-void .end method .method private buildTree()V .locals 3 .prologue const/4 v0, 0x0 .local v0, "i":I :goto_0 sget-object v1, Lokhttp3/internal/framed/Huffman;->CODE_LENGTHS:[B array-length v1, v1 if-ge v0, v1, :cond_0 sget-object v1, Lokhttp3/internal/framed/Huffman;->CODES:[I aget v1, v1, v0 sget-object v2, Lokhttp3/internal/framed/Huffman;->CODE_LENGTHS:[B aget-byte v2, v2, v0 invoke-direct {p0, v0, v1, v2}, Lokhttp3/internal/framed/Huffman;->addCode(IIB)V add-int/lit8 v0, v0, 0x1 goto :goto_0 :cond_0 return-void .end method .method public static get()Lokhttp3/internal/framed/Huffman; .locals 1 .prologue sget-object v0, Lokhttp3/internal/framed/Huffman;->INSTANCE:Lokhttp3/internal/framed/Huffman; return-object v0 .end method # virtual methods .method decode([B)[B .locals 8 .param p1, "buf" # [B .annotation system Ldalvik/annotation/Throws; value = { Ljava/io/IOException; } .end annotation .prologue new-instance v1, Ljava/io/ByteArrayOutputStream; invoke-direct {v1}, Ljava/io/ByteArrayOutputStream;->()V .local v1, "baos":Ljava/io/ByteArrayOutputStream; iget-object v6, p0, Lokhttp3/internal/framed/Huffman;->root:Lokhttp3/internal/framed/Huffman$Node; .local v6, "node":Lokhttp3/internal/framed/Huffman$Node; const/4 v3, 0x0 .local v3, "current":I const/4 v5, 0x0 .local v5, "nbits":I const/4 v4, 0x0 .local v4, "i":I :goto_0 array-length v7, p1 if-ge v4, v7, :cond_3 aget-byte v7, p1, v4 and-int/lit16 v0, v7, 0xff .local v0, "b":I shl-int/lit8 v7, v3, 0x8 or-int v3, v7, v0 add-int/lit8 v5, v5, 0x8 :goto_1 const/16 v7, 0x8 if-lt v5, v7, :cond_1 add-int/lit8 v7, v5, -0x8 ushr-int v7, v3, v7 and-int/lit16 v2, v7, 0xff .local v2, "c":I invoke-static {v6}, Lokhttp3/internal/framed/Huffman$Node;->access$000(Lokhttp3/internal/framed/Huffman$Node;)[Lokhttp3/internal/framed/Huffman$Node; move-result-object v7 aget-object v6, v7, v2 invoke-static {v6}, Lokhttp3/internal/framed/Huffman$Node;->access$000(Lokhttp3/internal/framed/Huffman$Node;)[Lokhttp3/internal/framed/Huffman$Node; move-result-object v7 if-nez v7, :cond_0 invoke-static {v6}, Lokhttp3/internal/framed/Huffman$Node;->access$100(Lokhttp3/internal/framed/Huffman$Node;)I move-result v7 invoke-virtual {v1, v7}, Ljava/io/ByteArrayOutputStream;->write(I)V invoke-static {v6}, Lokhttp3/internal/framed/Huffman$Node;->access$200(Lokhttp3/internal/framed/Huffman$Node;)I move-result v7 sub-int/2addr v5, v7 iget-object v6, p0, Lokhttp3/internal/framed/Huffman;->root:Lokhttp3/internal/framed/Huffman$Node; goto :goto_1 :cond_0 add-int/lit8 v5, v5, -0x8 goto :goto_1 .end local v2 # "c":I :cond_1 add-int/lit8 v4, v4, 0x1 goto :goto_0 .end local v0 # "b":I .restart local v2 # "c":I :cond_2 invoke-static {v6}, Lokhttp3/internal/framed/Huffman$Node;->access$100(Lokhttp3/internal/framed/Huffman$Node;)I move-result v7 invoke-virtual {v1, v7}, Ljava/io/ByteArrayOutputStream;->write(I)V invoke-static {v6}, Lokhttp3/internal/framed/Huffman$Node;->access$200(Lokhttp3/internal/framed/Huffman$Node;)I move-result v7 sub-int/2addr v5, v7 iget-object v6, p0, Lokhttp3/internal/framed/Huffman;->root:Lokhttp3/internal/framed/Huffman$Node; .end local v2 # "c":I :cond_3 if-lez v5, :cond_4 rsub-int/lit8 v7, v5, 0x8 shl-int v7, v3, v7 and-int/lit16 v2, v7, 0xff .restart local v2 # "c":I invoke-static {v6}, Lokhttp3/internal/framed/Huffman$Node;->access$000(Lokhttp3/internal/framed/Huffman$Node;)[Lokhttp3/internal/framed/Huffman$Node; move-result-object v7 aget-object v6, v7, v2 invoke-static {v6}, Lokhttp3/internal/framed/Huffman$Node;->access$000(Lokhttp3/internal/framed/Huffman$Node;)[Lokhttp3/internal/framed/Huffman$Node; move-result-object v7 if-nez v7, :cond_4 invoke-static {v6}, Lokhttp3/internal/framed/Huffman$Node;->access$200(Lokhttp3/internal/framed/Huffman$Node;)I move-result v7 if-le v7, v5, :cond_2 .end local v2 # "c":I :cond_4 invoke-virtual {v1}, Ljava/io/ByteArrayOutputStream;->toByteArray()[B move-result-object v7 return-object v7 .end method .method encode([BLjava/io/OutputStream;)V .locals 10 .param p1, "data" # [B .param p2, "out" # Ljava/io/OutputStream; .annotation system Ldalvik/annotation/Throws; value = { Ljava/io/IOException; } .end annotation .prologue const-wide/16 v2, 0x0 .local v2, "current":J const/4 v5, 0x0 .local v5, "n":I const/4 v4, 0x0 .local v4, "i":I :goto_0 array-length v7, p1 if-ge v4, v7, :cond_1 aget-byte v7, p1, v4 and-int/lit16 v0, v7, 0xff .local v0, "b":I sget-object v7, Lokhttp3/internal/framed/Huffman;->CODES:[I aget v1, v7, v0 .local v1, "code":I sget-object v7, Lokhttp3/internal/framed/Huffman;->CODE_LENGTHS:[B aget-byte v6, v7, v0 .local v6, "nbits":I shl-long/2addr v2, v6 int-to-long v8, v1 or-long/2addr v2, v8 add-int/2addr v5, v6 :goto_1 const/16 v7, 0x8 if-lt v5, v7, :cond_0 add-int/lit8 v5, v5, -0x8 shr-long v8, v2, v5 long-to-int v7, v8 invoke-virtual {p2, v7}, Ljava/io/OutputStream;->write(I)V goto :goto_1 :cond_0 add-int/lit8 v4, v4, 0x1 goto :goto_0 .end local v0 # "b":I .end local v1 # "code":I .end local v6 # "nbits":I :cond_1 if-lez v5, :cond_2 rsub-int/lit8 v7, v5, 0x8 shl-long/2addr v2, v7 const/16 v7, 0xff ushr-int/2addr v7, v5 int-to-long v8, v7 or-long/2addr v2, v8 long-to-int v7, v2 invoke-virtual {p2, v7}, Ljava/io/OutputStream;->write(I)V :cond_2 return-void .end method .method encodedLength([B)I .locals 7 .param p1, "bytes" # [B .prologue const-wide/16 v2, 0x0 .local v2, "len":J const/4 v1, 0x0 .local v1, "i":I :goto_0 array-length v4, p1 if-ge v1, v4, :cond_0 aget-byte v4, p1, v1 and-int/lit16 v0, v4, 0xff .local v0, "b":I sget-object v4, Lokhttp3/internal/framed/Huffman;->CODE_LENGTHS:[B aget-byte v4, v4, v0 int-to-long v4, v4 add-long/2addr v2, v4 add-int/lit8 v1, v1, 0x1 goto :goto_0 .end local v0 # "b":I :cond_0 const-wide/16 v4, 0x7 add-long/2addr v4, v2 const/4 v6, 0x3 shr-long/2addr v4, v6 long-to-int v4, v4 return v4 .end method