// File: sisong[P]ApkDiffPatch/zlib1.3.1/trees.c
// Function: compress_block
local void compress_block(deflate_state *s, const ct_data *ltree,
                          const ct_data *dtree) {
    unsigned dist;      /* distance of matched string */
    int lc;             /* match length or unmatched char (if dist == 0) */
    unsigned sx = 0;    /* running index in symbol buffers */
    unsigned code;      /* the code to send */
    int extra;          /* number of extra bits to send */

    if (s->sym_next != 0) do {
#ifdef LIT_MEM
        dist = s->d_buf[sx];
        lc = s->l_buf[sx++];
#else
        dist = s->sym_buf[sx++] & 0xff;
        dist += (unsigned)(s->sym_buf[sx++] & 0xff) << 8;
        lc = s->sym_buf[sx++];
#endif
        if (dist == 0) {
            send_code(s, lc, ltree); /* send a literal byte */
            Tracecv(isgraph(lc), (stderr," '%c' ", lc));
        } else {
            /* Here, lc is the match length - MIN_MATCH */
            code = _length_code[lc];
            send_code(s, code + LITERALS + 1, ltree);   /* send length code */
            extra = extra_lbits[code];
            if (extra != 0) {
                lc -= base_length[code];
                send_bits(s, lc, extra);       /* send the extra length bits */
            }
            dist--; /* dist is now the match distance - 1 */
            code = d_code(dist);
            Assert (code < D_CODES, "bad d_code");

            send_code(s, code, dtree);       /* send the distance code */
            extra = extra_dbits[code];
            if (extra != 0) {
                dist -= (unsigned)base_dist[code];
                send_bits(s, dist, extra);   /* send the extra distance bits */
            }
        } /* literal or match pair ? */

        /* Check for no overlay of pending_buf on needed symbols */
#ifdef LIT_MEM
        Assert(s->pending < 2 * (s->lit_bufsize + sx), "pendingBuf overflow");
#else
        Assert(s->pending < s->lit_bufsize + sx, "pendingBuf overflow");
#endif

    } while (sx < s->sym_next);

    send_code(s, END_BLOCK, ltree);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movl $0x0, -0x24(%rbp)
movq -0x8(%rbp), %rax
cmpl $0x0, 0x170c(%rax)
je 0xa050b
jmp 0x9fdaa
movq -0x8(%rbp), %rax
movq 0x1700(%rax), %rax
movl -0x24(%rbp), %ecx
movl %ecx, %edx
addl $0x1, %edx
movl %edx, -0x24(%rbp)
movl %ecx, %ecx
movzbl (%rax,%rcx), %eax
andl $0xff, %eax
movl %eax, -0x1c(%rbp)
movq -0x8(%rbp), %rax
movq 0x1700(%rax), %rax
movl -0x24(%rbp), %ecx
movl %ecx, %edx
addl $0x1, %edx
movl %edx, -0x24(%rbp)
movl %ecx, %ecx
movzbl (%rax,%rcx), %eax
andl $0xff, %eax
shll $0x8, %eax
addl -0x1c(%rbp), %eax
movl %eax, -0x1c(%rbp)
movq -0x8(%rbp), %rax
movq 0x1700(%rax), %rax
movl -0x24(%rbp), %ecx
movl %ecx, %edx
addl $0x1, %edx
movl %edx, -0x24(%rbp)
movl %ecx, %ecx
movzbl (%rax,%rcx), %eax
movl %eax, -0x20(%rbp)
cmpl $0x0, -0x1c(%rbp)
jne 0x9ff5f
movq -0x10(%rbp), %rax
movslq -0x20(%rbp), %rcx
movzwl 0x2(%rax,%rcx,4), %eax
movl %eax, -0x30(%rbp)
movq -0x8(%rbp), %rax
movl 0x1734(%rax), %eax
movl $0x10, %ecx
subl -0x30(%rbp), %ecx
cmpl %ecx, %eax
jle 0x9ff1b
movq -0x10(%rbp), %rax
movslq -0x20(%rbp), %rcx
movzwl (%rax,%rcx,4), %eax
movl %eax, -0x34(%rbp)
movl -0x34(%rbp), %eax
movzwl %ax, %edx
movq -0x8(%rbp), %rax
movl 0x1734(%rax), %ecx
shll %cl, %edx
movq -0x8(%rbp), %rax
movzwl 0x1730(%rax), %ecx
orl %edx, %ecx
movw %cx, 0x1730(%rax)
movq -0x8(%rbp), %rax
movzwl 0x1730(%rax), %eax
andl $0xff, %eax
movb %al, %dl
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rax
movq -0x8(%rbp), %rsi
movq 0x28(%rsi), %rcx
movq %rcx, %rdi
addq $0x1, %rdi
movq %rdi, 0x28(%rsi)
movb %dl, (%rax,%rcx)
movq -0x8(%rbp), %rax
movzwl 0x1730(%rax), %eax
sarl $0x8, %eax
movb %al, %dl
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rax
movq -0x8(%rbp), %rsi
movq 0x28(%rsi), %rcx
movq %rcx, %rdi
addq $0x1, %rdi
movq %rdi, 0x28(%rsi)
movb %dl, (%rax,%rcx)
movl -0x34(%rbp), %eax
movzwl %ax, %eax
movq -0x8(%rbp), %rdx
movl $0x10, %ecx
subl 0x1734(%rdx), %ecx
sarl %cl, %eax
movw %ax, %cx
movq -0x8(%rbp), %rax
movw %cx, 0x1730(%rax)
movl -0x30(%rbp), %ecx
subl $0x10, %ecx
movq -0x8(%rbp), %rax
addl 0x1734(%rax), %ecx
movl %ecx, 0x1734(%rax)
jmp 0x9ff5a
movq -0x10(%rbp), %rax
movslq -0x20(%rbp), %rcx
movzwl (%rax,%rcx,4), %edx
movq -0x8(%rbp), %rax
movl 0x1734(%rax), %ecx
shll %cl, %edx
movq -0x8(%rbp), %rax
movzwl 0x1730(%rax), %ecx
orl %edx, %ecx
movw %cx, 0x1730(%rax)
movl -0x30(%rbp), %ecx
movq -0x8(%rbp), %rax
addl 0x1734(%rax), %ecx
movl %ecx, 0x1734(%rax)
jmp 0xa04f4
movslq -0x20(%rbp), %rcx
leaq 0x1e376(%rip), %rax     # 0xbe2e0
movzbl (%rax,%rcx), %eax
movl %eax, -0x28(%rbp)
movq -0x10(%rbp), %rax
movl -0x28(%rbp), %ecx
addl $0x100, %ecx            # imm = 0x100
addl $0x1, %ecx
movl %ecx, %ecx
movzwl 0x2(%rax,%rcx,4), %eax
movl %eax, -0x38(%rbp)
movq -0x8(%rbp), %rax
movl 0x1734(%rax), %eax
movl $0x10, %ecx
subl -0x38(%rbp), %ecx
cmpl %ecx, %eax
jle 0xa007f
movq -0x10(%rbp), %rax
movl -0x28(%rbp), %ecx
addl $0x100, %ecx            # imm = 0x100
addl $0x1, %ecx
movl %ecx, %ecx
movzwl (%rax,%rcx,4), %eax
movl %eax, -0x3c(%rbp)
movl -0x3c(%rbp), %eax
movzwl %ax, %edx
movq -0x8(%rbp), %rax
movl 0x1734(%rax), %ecx
shll %cl, %edx
movq -0x8(%rbp), %rax
movzwl 0x1730(%rax), %ecx
orl %edx, %ecx
movw %cx, 0x1730(%rax)
movq -0x8(%rbp), %rax
movzwl 0x1730(%rax), %eax
andl $0xff, %eax
movb %al, %dl
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rax
movq -0x8(%rbp), %rsi
movq 0x28(%rsi), %rcx
movq %rcx, %rdi
addq $0x1, %rdi
movq %rdi, 0x28(%rsi)
movb %dl, (%rax,%rcx)
movq -0x8(%rbp), %rax
movzwl 0x1730(%rax), %eax
sarl $0x8, %eax
movb %al, %dl
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rax
movq -0x8(%rbp), %rsi
movq 0x28(%rsi), %rcx
movq %rcx, %rdi
addq $0x1, %rdi
movq %rdi, 0x28(%rsi)
movb %dl, (%rax,%rcx)
movl -0x3c(%rbp), %eax
movzwl %ax, %eax
movq -0x8(%rbp), %rdx
movl $0x10, %ecx
subl 0x1734(%rdx), %ecx
sarl %cl, %eax
movw %ax, %cx
movq -0x8(%rbp), %rax
movw %cx, 0x1730(%rax)
movl -0x38(%rbp), %ecx
subl $0x10, %ecx
movq -0x8(%rbp), %rax
addl 0x1734(%rax), %ecx
movl %ecx, 0x1734(%rax)
jmp 0xa00c8
movq -0x10(%rbp), %rax
movl -0x28(%rbp), %ecx
addl $0x100, %ecx            # imm = 0x100
addl $0x1, %ecx
movl %ecx, %ecx
movzwl (%rax,%rcx,4), %edx
movq -0x8(%rbp), %rax
movl 0x1734(%rax), %ecx
shll %cl, %edx
movq -0x8(%rbp), %rax
movzwl 0x1730(%rax), %ecx
orl %edx, %ecx
movw %cx, 0x1730(%rax)
movl -0x38(%rbp), %ecx
movq -0x8(%rbp), %rax
addl 0x1734(%rax), %ecx
movl %ecx, 0x1734(%rax)
movl -0x28(%rbp), %eax
movl %eax, %ecx
leaq 0x1e80c(%rip), %rax     # 0xbe8e0
movl (%rax,%rcx,4), %eax
movl %eax, -0x2c(%rbp)
cmpl $0x0, -0x2c(%rbp)
je 0xa021d
movl -0x28(%rbp), %eax
movl %eax, %ecx
leaq 0x1e960(%rip), %rax     # 0xbea50
movl (%rax,%rcx,4), %ecx
movl -0x20(%rbp), %eax
subl %ecx, %eax
movl %eax, -0x20(%rbp)
movl -0x2c(%rbp), %eax
movl %eax, -0x40(%rbp)
movq -0x8(%rbp), %rax
movl 0x1734(%rax), %eax
movl $0x10, %ecx
subl -0x40(%rbp), %ecx
cmpl %ecx, %eax
jle 0xa01e2
movl -0x20(%rbp), %eax
movl %eax, -0x44(%rbp)
movl -0x44(%rbp), %eax
movzwl %ax, %edx
movq -0x8(%rbp), %rax
movl 0x1734(%rax), %ecx
shll %cl, %edx
movq -0x8(%rbp), %rax
movzwl 0x1730(%rax), %ecx
orl %edx, %ecx
movw %cx, 0x1730(%rax)
movq -0x8(%rbp), %rax
movzwl 0x1730(%rax), %eax
andl $0xff, %eax
movb %al, %dl
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rax
movq -0x8(%rbp), %rsi
movq 0x28(%rsi), %rcx
movq %rcx, %rdi
addq $0x1, %rdi
movq %rdi, 0x28(%rsi)
movb %dl, (%rax,%rcx)
movq -0x8(%rbp), %rax
movzwl 0x1730(%rax), %eax
sarl $0x8, %eax
movb %al, %dl
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rax
movq -0x8(%rbp), %rsi
movq 0x28(%rsi), %rcx
movq %rcx, %rdi
addq $0x1, %rdi
movq %rdi, 0x28(%rsi)
movb %dl, (%rax,%rcx)
movl -0x44(%rbp), %eax
movzwl %ax, %eax
movq -0x8(%rbp), %rdx
movl $0x10, %ecx
subl 0x1734(%rdx), %ecx
sarl %cl, %eax
movw %ax, %cx
movq -0x8(%rbp), %rax
movw %cx, 0x1730(%rax)
movl -0x40(%rbp), %ecx
subl $0x10, %ecx
movq -0x8(%rbp), %rax
addl 0x1734(%rax), %ecx
movl %ecx, 0x1734(%rax)
jmp 0xa021b
movl -0x20(%rbp), %eax
movzwl %ax, %edx
movq -0x8(%rbp), %rax
movl 0x1734(%rax), %ecx
shll %cl, %edx
movq -0x8(%rbp), %rax
movzwl 0x1730(%rax), %ecx
orl %edx, %ecx
movw %cx, 0x1730(%rax)
movl -0x40(%rbp), %ecx
movq -0x8(%rbp), %rax
addl 0x1734(%rax), %ecx
movl %ecx, 0x1734(%rax)
jmp 0xa021d
movl -0x1c(%rbp), %eax
addl $-0x1, %eax
movl %eax, -0x1c(%rbp)
cmpl $0x100, -0x1c(%rbp)     # imm = 0x100
jae 0xa0244
movl -0x1c(%rbp), %eax
movl %eax, %ecx
leaq 0x1dea5(%rip), %rax     # 0xbe0e0
movzbl (%rax,%rcx), %eax
movl %eax, -0x60(%rbp)
jmp 0xa0261
movl -0x1c(%rbp), %eax
shrl $0x7, %eax
addl $0x100, %eax            # imm = 0x100
movl %eax, %eax
movl %eax, %ecx
leaq 0x1de86(%rip), %rax     # 0xbe0e0
movzbl (%rax,%rcx), %eax
movl %eax, -0x60(%rbp)
movl -0x60(%rbp), %eax
movl %eax, -0x28(%rbp)
movq -0x18(%rbp), %rax
movl -0x28(%rbp), %ecx
movzwl 0x2(%rax,%rcx,4), %eax
movl %eax, -0x48(%rbp)
movq -0x8(%rbp), %rax
movl 0x1734(%rax), %eax
movl $0x10, %ecx
subl -0x48(%rbp), %ecx
cmpl %ecx, %eax
jle 0xa035f
movq -0x18(%rbp), %rax
movl -0x28(%rbp), %ecx
movzwl (%rax,%rcx,4), %eax
movl %eax, -0x4c(%rbp)
movl -0x4c(%rbp), %eax
movzwl %ax, %edx
movq -0x8(%rbp), %rax
movl 0x1734(%rax), %ecx
shll %cl, %edx
movq -0x8(%rbp), %rax
movzwl 0x1730(%rax), %ecx
orl %edx, %ecx
movw %cx, 0x1730(%rax)
movq -0x8(%rbp), %rax
movzwl 0x1730(%rax), %eax
andl $0xff, %eax
movb %al, %dl
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rax
movq -0x8(%rbp), %rsi
movq 0x28(%rsi), %rcx
movq %rcx, %rdi
addq $0x1, %rdi
movq %rdi, 0x28(%rsi)
movb %dl, (%rax,%rcx)
movq -0x8(%rbp), %rax
movzwl 0x1730(%rax), %eax
sarl $0x8, %eax
movb %al, %dl
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rax
movq -0x8(%rbp), %rsi
movq 0x28(%rsi), %rcx
movq %rcx, %rdi
addq $0x1, %rdi
movq %rdi, 0x28(%rsi)
movb %dl, (%rax,%rcx)
movl -0x4c(%rbp), %eax
movzwl %ax, %eax
movq -0x8(%rbp), %rdx
movl $0x10, %ecx
subl 0x1734(%rdx), %ecx
sarl %cl, %eax
movw %ax, %cx
movq -0x8(%rbp), %rax
movw %cx, 0x1730(%rax)
movl -0x48(%rbp), %ecx
subl $0x10, %ecx
movq -0x8(%rbp), %rax
addl 0x1734(%rax), %ecx
movl %ecx, 0x1734(%rax)
jmp 0xa039d
movq -0x18(%rbp), %rax
movl -0x28(%rbp), %ecx
movzwl (%rax,%rcx,4), %edx
movq -0x8(%rbp), %rax
movl 0x1734(%rax), %ecx
shll %cl, %edx
movq -0x8(%rbp), %rax
movzwl 0x1730(%rax), %ecx
orl %edx, %ecx
movw %cx, 0x1730(%rax)
movl -0x48(%rbp), %ecx
movq -0x8(%rbp), %rax
addl 0x1734(%rax), %ecx
movl %ecx, 0x1734(%rax)
movl -0x28(%rbp), %eax
movl %eax, %ecx
leaq 0x1e5b7(%rip), %rax     # 0xbe960
movl (%rax,%rcx,4), %eax
movl %eax, -0x2c(%rbp)
cmpl $0x0, -0x2c(%rbp)
je 0xa04f2
movl -0x28(%rbp), %eax
movl %eax, %ecx
leaq 0x1e70b(%rip), %rax     # 0xbead0
movl (%rax,%rcx,4), %ecx
movl -0x1c(%rbp), %eax
subl %ecx, %eax
movl %eax, -0x1c(%rbp)
movl -0x2c(%rbp), %eax
movl %eax, -0x50(%rbp)
movq -0x8(%rbp), %rax
movl 0x1734(%rax), %eax
movl $0x10, %ecx
subl -0x50(%rbp), %ecx
cmpl %ecx, %eax
jle 0xa04b7
movl -0x1c(%rbp), %eax
movl %eax, -0x54(%rbp)
movl -0x54(%rbp), %eax
movzwl %ax, %edx
movq -0x8(%rbp), %rax
movl 0x1734(%rax), %ecx
shll %cl, %edx
movq -0x8(%rbp), %rax
movzwl 0x1730(%rax), %ecx
orl %edx, %ecx
movw %cx, 0x1730(%rax)
movq -0x8(%rbp), %rax
movzwl 0x1730(%rax), %eax
andl $0xff, %eax
movb %al, %dl
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rax
movq -0x8(%rbp), %rsi
movq 0x28(%rsi), %rcx
movq %rcx, %rdi
addq $0x1, %rdi
movq %rdi, 0x28(%rsi)
movb %dl, (%rax,%rcx)
movq -0x8(%rbp), %rax
movzwl 0x1730(%rax), %eax
sarl $0x8, %eax
movb %al, %dl
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rax
movq -0x8(%rbp), %rsi
movq 0x28(%rsi), %rcx
movq %rcx, %rdi
addq $0x1, %rdi
movq %rdi, 0x28(%rsi)
movb %dl, (%rax,%rcx)
movl -0x54(%rbp), %eax
movzwl %ax, %eax
movq -0x8(%rbp), %rdx
movl $0x10, %ecx
subl 0x1734(%rdx), %ecx
sarl %cl, %eax
movw %ax, %cx
movq -0x8(%rbp), %rax
movw %cx, 0x1730(%rax)
movl -0x50(%rbp), %ecx
subl $0x10, %ecx
movq -0x8(%rbp), %rax
addl 0x1734(%rax), %ecx
movl %ecx, 0x1734(%rax)
jmp 0xa04f0
movl -0x1c(%rbp), %eax
movzwl %ax, %edx
movq -0x8(%rbp), %rax
movl 0x1734(%rax), %ecx
shll %cl, %edx
movq -0x8(%rbp), %rax
movzwl 0x1730(%rax), %ecx
orl %edx, %ecx
movw %cx, 0x1730(%rax)
movl -0x50(%rbp), %ecx
movq -0x8(%rbp), %rax
addl 0x1734(%rax), %ecx
movl %ecx, 0x1734(%rax)
jmp 0xa04f2
jmp 0xa04f4
jmp 0xa04f6
movl -0x24(%rbp), %eax
movq -0x8(%rbp), %rcx
cmpl 0x170c(%rcx), %eax
jb 0x9fdaa
jmp 0xa050b
movq -0x10(%rbp), %rax
movzwl 0x402(%rax), %eax
movl %eax, -0x58(%rbp)
movq -0x8(%rbp), %rax
movl 0x1734(%rax), %eax
movl $0x10, %ecx
subl -0x58(%rbp), %ecx
cmpl %ecx, %eax
jle 0xa0602
movq -0x10(%rbp), %rax
movzwl 0x400(%rax), %eax
movl %eax, -0x5c(%rbp)
movl -0x5c(%rbp), %eax
movzwl %ax, %edx
movq -0x8(%rbp), %rax
movl 0x1734(%rax), %ecx
shll %cl, %edx
movq -0x8(%rbp), %rax
movzwl 0x1730(%rax), %ecx
orl %edx, %ecx
movw %cx, 0x1730(%rax)
movq -0x8(%rbp), %rax
movzwl 0x1730(%rax), %eax
andl $0xff, %eax
movb %al, %dl
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rax
movq -0x8(%rbp), %rsi
movq 0x28(%rsi), %rcx
movq %rcx, %rdi
addq $0x1, %rdi
movq %rdi, 0x28(%rsi)
movb %dl, (%rax,%rcx)
movq -0x8(%rbp), %rax
movzwl 0x1730(%rax), %eax
sarl $0x8, %eax
movb %al, %dl
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rax
movq -0x8(%rbp), %rsi
movq 0x28(%rsi), %rcx
movq %rcx, %rdi
addq $0x1, %rdi
movq %rdi, 0x28(%rsi)
movb %dl, (%rax,%rcx)
movl -0x5c(%rbp), %eax
movzwl %ax, %eax
movq -0x8(%rbp), %rdx
movl $0x10, %ecx
subl 0x1734(%rdx), %ecx
sarl %cl, %eax
movw %ax, %cx
movq -0x8(%rbp), %rax
movw %cx, 0x1730(%rax)
movl -0x58(%rbp), %ecx
subl $0x10, %ecx
movq -0x8(%rbp), %rax
addl 0x1734(%rax), %ecx
movl %ecx, 0x1734(%rax)
jmp 0xa0640
movq -0x10(%rbp), %rax
movzwl 0x400(%rax), %edx
movq -0x8(%rbp), %rax
movl 0x1734(%rax), %ecx
shll %cl, %edx
movq -0x8(%rbp), %rax
movzwl 0x1730(%rax), %ecx
orl %edx, %ecx
movw %cx, 0x1730(%rax)
movl -0x58(%rbp), %ecx
movq -0x8(%rbp), %rax
addl 0x1734(%rax), %ecx
movl %ecx, 0x1734(%rax)
popq %rbp
retq
nopw %cs:(%rax,%rax)