// File: /workspace/github_c_makefile_star2_O0/samtools[P]htslib/cram/cram_encode.c
// Function: cram_encode_slice_header
cram_block *cram_encode_slice_header(cram_fd *fd, cram_slice *s) {
    char *buf;
    char *cp;
    cram_block *b = cram_new_block(MAPPED_SLICE, 0);
    int j;

    if (!b)
        return NULL;

    cp = buf = malloc(22+16+5*(8+s->hdr->num_blocks));
    if (NULL == buf) {
        cram_free_block(b);
        return NULL;
    }

    cp += fd->vv.varint_put32s(cp, NULL, s->hdr->ref_seq_id);
    if (CRAM_MAJOR_VERS(fd->version) >= 4) {
        cp += fd->vv.varint_put64(cp, NULL, s->hdr->ref_seq_start);
        cp += fd->vv.varint_put64(cp, NULL, s->hdr->ref_seq_span);
    } else {
        if (s->hdr->ref_seq_start < 0 || s->hdr->ref_seq_start > INT_MAX) {
            hts_log_error("Reference position too large for CRAM 3");
            cram_free_block(b);
            free(buf);
            return NULL;
        }
        cp += fd->vv.varint_put32(cp, NULL, s->hdr->ref_seq_start);
        cp += fd->vv.varint_put32(cp, NULL, s->hdr->ref_seq_span);
    }
    cp += fd->vv.varint_put32(cp, NULL, s->hdr->num_records);
    if (CRAM_MAJOR_VERS(fd->version) == 2)
        cp += fd->vv.varint_put32(cp, NULL, s->hdr->record_counter);
    else if (CRAM_MAJOR_VERS(fd->version) >= 3)
        cp += fd->vv.varint_put64(cp, NULL, s->hdr->record_counter);
    cp += fd->vv.varint_put32(cp, NULL, s->hdr->num_blocks);
    cp += fd->vv.varint_put32(cp, NULL, s->hdr->num_content_ids);
    for (j = 0; j < s->hdr->num_content_ids; j++) {
        cp += fd->vv.varint_put32(cp, NULL, s->hdr->block_content_ids[j]);
    }
    if (s->hdr->content_type == MAPPED_SLICE)
        cp += fd->vv.varint_put32(cp, NULL, s->hdr->ref_base_id);

    if (CRAM_MAJOR_VERS(fd->version) != 1) {
        memcpy(cp, s->hdr->md5, 16); cp += 16;
    }

    assert(cp-buf <= 22+16+5*(8+s->hdr->num_blocks));

    b->data = (unsigned char *)buf;
    b->comp_size = b->uncomp_size = cp-buf;

    return b;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x40, %rsp
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movl $0x2, %edi
xorl %esi, %esi
callq 0x6ede0
movq %rax, -0x30(%rbp)
cmpq $0x0, -0x30(%rbp)
jne 0x5c424
movq $0x0, -0x8(%rbp)
jmp 0x5c813
movq -0x18(%rbp), %rax
movq (%rax), %rax
movl 0x28(%rax), %eax
addl $0x8, %eax
imull $0x5, %eax, %eax
addl $0x26, %eax
movslq %eax, %rdi
callq 0x4650
movq %rax, -0x20(%rbp)
movq %rax, -0x28(%rbp)
xorl %eax, %eax
cmpq -0x20(%rbp), %rax
jne 0x5c465
movq -0x30(%rbp), %rdi
callq 0x6f940
movq $0x0, -0x8(%rbp)
jmp 0x5c813
movq -0x10(%rbp), %rax
movq 0x89d0(%rax), %rax
movq -0x28(%rbp), %rdi
movq -0x18(%rbp), %rcx
movq (%rcx), %rcx
movl 0x4(%rcx), %edx
xorl %ecx, %ecx
movl %ecx, %esi
callq *%rax
movl %eax, %ecx
movq -0x28(%rbp), %rax
movslq %ecx, %rcx
addq %rcx, %rax
movq %rax, -0x28(%rbp)
movq -0x10(%rbp), %rax
movl 0xc(%rax), %eax
sarl $0x8, %eax
cmpl $0x4, %eax
jl 0x5c508
movq -0x10(%rbp), %rax
movq 0x89d8(%rax), %rax
movq -0x28(%rbp), %rdi
movq -0x18(%rbp), %rcx
movq (%rcx), %rcx
movq 0x8(%rcx), %rdx
xorl %ecx, %ecx
movl %ecx, %esi
callq *%rax
movl %eax, %ecx
movq -0x28(%rbp), %rax
movslq %ecx, %rcx
addq %rcx, %rax
movq %rax, -0x28(%rbp)
movq -0x10(%rbp), %rax
movq 0x89d8(%rax), %rax
movq -0x28(%rbp), %rdi
movq -0x18(%rbp), %rcx
movq (%rcx), %rcx
movq 0x10(%rcx), %rdx
xorl %ecx, %ecx
movl %ecx, %esi
callq *%rax
movl %eax, %ecx
movq -0x28(%rbp), %rax
movslq %ecx, %rcx
addq %rcx, %rax
movq %rax, -0x28(%rbp)
jmp 0x5c5c4
movq -0x18(%rbp), %rax
movq (%rax), %rax
cmpq $0x0, 0x8(%rax)
jl 0x5c527
movq -0x18(%rbp), %rax
movq (%rax), %rax
cmpq $0x7fffffff, 0x8(%rax)  # imm = 0x7FFFFFFF
jle 0x5c560
movl $0x1, %edi
leaq 0x97d1e(%rip), %rsi     # 0xf4251
leaq 0x97d30(%rip), %rdx     # 0xf426a
movb $0x0, %al
callq 0x1b030
movq -0x30(%rbp), %rdi
callq 0x6f940
movq -0x20(%rbp), %rdi
callq 0x45a0
movq $0x0, -0x8(%rbp)
jmp 0x5c813
movq -0x10(%rbp), %rax
movq 0x89c8(%rax), %rax
movq -0x28(%rbp), %rdi
movq -0x18(%rbp), %rcx
movq (%rcx), %rcx
movq 0x8(%rcx), %rcx
movl %ecx, %edx
xorl %ecx, %ecx
movl %ecx, %esi
callq *%rax
movl %eax, %ecx
movq -0x28(%rbp), %rax
movslq %ecx, %rcx
addq %rcx, %rax
movq %rax, -0x28(%rbp)
movq -0x10(%rbp), %rax
movq 0x89c8(%rax), %rax
movq -0x28(%rbp), %rdi
movq -0x18(%rbp), %rcx
movq (%rcx), %rcx
movq 0x10(%rcx), %rcx
movl %ecx, %edx
xorl %ecx, %ecx
movl %ecx, %esi
callq *%rax
movl %eax, %ecx
movq -0x28(%rbp), %rax
movslq %ecx, %rcx
addq %rcx, %rax
movq %rax, -0x28(%rbp)
movq -0x10(%rbp), %rax
movq 0x89c8(%rax), %rax
movq -0x28(%rbp), %rdi
movq -0x18(%rbp), %rcx
movq (%rcx), %rcx
movl 0x18(%rcx), %edx
xorl %ecx, %ecx
movl %ecx, %esi
callq *%rax
movl %eax, %ecx
movq -0x28(%rbp), %rax
movslq %ecx, %rcx
addq %rcx, %rax
movq %rax, -0x28(%rbp)
movq -0x10(%rbp), %rax
movl 0xc(%rax), %eax
sarl $0x8, %eax
cmpl $0x2, %eax
jne 0x5c636
movq -0x10(%rbp), %rax
movq 0x89c8(%rax), %rax
movq -0x28(%rbp), %rdi
movq -0x18(%rbp), %rcx
movq (%rcx), %rcx
movq 0x20(%rcx), %rcx
movl %ecx, %edx
xorl %ecx, %ecx
movl %ecx, %esi
callq *%rax
movl %eax, %ecx
movq -0x28(%rbp), %rax
movslq %ecx, %rcx
addq %rcx, %rax
movq %rax, -0x28(%rbp)
jmp 0x5c677
movq -0x10(%rbp), %rax
movl 0xc(%rax), %eax
sarl $0x8, %eax
cmpl $0x3, %eax
jl 0x5c675
movq -0x10(%rbp), %rax
movq 0x89d8(%rax), %rax
movq -0x28(%rbp), %rdi
movq -0x18(%rbp), %rcx
movq (%rcx), %rcx
movq 0x20(%rcx), %rdx
xorl %ecx, %ecx
movl %ecx, %esi
callq *%rax
movl %eax, %ecx
movq -0x28(%rbp), %rax
movslq %ecx, %rcx
addq %rcx, %rax
movq %rax, -0x28(%rbp)
jmp 0x5c677
movq -0x10(%rbp), %rax
movq 0x89c8(%rax), %rax
movq -0x28(%rbp), %rdi
movq -0x18(%rbp), %rcx
movq (%rcx), %rcx
movl 0x28(%rcx), %edx
xorl %ecx, %ecx
movl %ecx, %esi
callq *%rax
movl %eax, %ecx
movq -0x28(%rbp), %rax
movslq %ecx, %rcx
addq %rcx, %rax
movq %rax, -0x28(%rbp)
movq -0x10(%rbp), %rax
movq 0x89c8(%rax), %rax
movq -0x28(%rbp), %rdi
movq -0x18(%rbp), %rcx
movq (%rcx), %rcx
movl 0x2c(%rcx), %edx
xorl %ecx, %ecx
movl %ecx, %esi
callq *%rax
movl %eax, %ecx
movq -0x28(%rbp), %rax
movslq %ecx, %rcx
addq %rcx, %rax
movq %rax, -0x28(%rbp)
movl $0x0, -0x34(%rbp)
movl -0x34(%rbp), %eax
movq -0x18(%rbp), %rcx
movq (%rcx), %rcx
cmpl 0x2c(%rcx), %eax
jge 0x5c72d
movq -0x10(%rbp), %rax
movq 0x89c8(%rax), %rax
movq -0x28(%rbp), %rdi
movq -0x18(%rbp), %rcx
movq (%rcx), %rcx
movq 0x30(%rcx), %rcx
movslq -0x34(%rbp), %rdx
movl (%rcx,%rdx,4), %edx
xorl %ecx, %ecx
movl %ecx, %esi
callq *%rax
movl %eax, %ecx
movq -0x28(%rbp), %rax
movslq %ecx, %rcx
addq %rcx, %rax
movq %rax, -0x28(%rbp)
movl -0x34(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x34(%rbp)
jmp 0x5c6dc
movq -0x18(%rbp), %rax
movq (%rax), %rax
cmpl $0x2, (%rax)
jne 0x5c768
movq -0x10(%rbp), %rax
movq 0x89c8(%rax), %rax
movq -0x28(%rbp), %rdi
movq -0x18(%rbp), %rcx
movq (%rcx), %rcx
movl 0x38(%rcx), %edx
xorl %ecx, %ecx
movl %ecx, %esi
callq *%rax
movl %eax, %ecx
movq -0x28(%rbp), %rax
movslq %ecx, %rcx
addq %rcx, %rax
movq %rax, -0x28(%rbp)
movq -0x10(%rbp), %rax
movl 0xc(%rax), %eax
sarl $0x8, %eax
cmpl $0x1, %eax
je 0x5c79d
movq -0x28(%rbp), %rax
movq -0x18(%rbp), %rcx
movq (%rcx), %rcx
movq 0x3c(%rcx), %rdx
movq %rdx, (%rax)
movq 0x44(%rcx), %rcx
movq %rcx, 0x8(%rax)
movq -0x28(%rbp), %rax
addq $0x10, %rax
movq %rax, -0x28(%rbp)
movq -0x28(%rbp), %rax
movq -0x20(%rbp), %rcx
subq %rcx, %rax
movq -0x18(%rbp), %rcx
movq (%rcx), %rcx
movl 0x28(%rcx), %ecx
addl $0x8, %ecx
imull $0x5, %ecx, %ecx
addl $0x26, %ecx
movslq %ecx, %rcx
cmpq %rcx, %rax
jg 0x5c7c5
jmp 0x5c7e4
leaq 0x97ac6(%rip), %rdi     # 0xf4292
leaq 0x97ae8(%rip), %rsi     # 0xf42bb
movl $0x22d, %edx            # imm = 0x22D
leaq 0x97aef(%rip), %rcx     # 0xf42ce
callq 0x42e0
movq -0x20(%rbp), %rcx
movq -0x30(%rbp), %rax
movq %rcx, 0x20(%rax)
movq -0x28(%rbp), %rax
movq -0x20(%rbp), %rcx
subq %rcx, %rax
movl %eax, %ecx
movq -0x30(%rbp), %rax
movl %ecx, 0x14(%rax)
movq -0x30(%rbp), %rax
movl %ecx, 0x10(%rax)
movq -0x30(%rbp), %rax
movq %rax, -0x8(%rbp)
movq -0x8(%rbp), %rax
addq $0x40, %rsp
popq %rbp
retq
nopl (%rax)