// File: chhylp123[P]hifiasm/gfa_ut.cpp
// Function: reload_uovl(all_ul_t*, char*)
int64_t reload_uovl(all_ul_t *x, char* file_name)
{
    char* gfa_name = NULL; MALLOC(gfa_name, strlen(file_name)+100);
    sprintf(gfa_name, "%s.%s.ul.ovlp.bin", file_name, "re");
    FILE* fp = fopen(gfa_name, "r"); free(gfa_name);
    if (!fp) return 0;
    uint64_t k; size_t kn; ul_vec_t *p = NULL;

    ///skip test ug
    size_t tt, i; uint32_t t; ma_utg_t ua;
    fread(&tt, sizeof(tt), 1, fp);
    for (i = 0; i < tt; i++) {
        fread(&t, sizeof(t), 1, fp);
        fread(&t, sizeof(t), 1, fp);
        fread(&(ua.start), sizeof(ua.start), 1, fp);
        fread(&(ua.end), sizeof(ua.end), 1, fp);
        fread(&(ua.n), sizeof(ua.n), 1, fp);
        fseek(fp, sizeof(uint64_t)*ua.n, SEEK_CUR);
        // fread(ua.a, sizeof(uint64_t), ua.n, fp);
    }



    fseek(fp, sizeof(x->nid.n), SEEK_CUR);
	for (k = 0; k < x->nid.n; k++) {
        fseek(fp, sizeof(x->nid.a[k].n), SEEK_CUR); 
        fseek(fp, sizeof((*(x->nid.a[k].a)))*x->nid.a[k].n, SEEK_CUR);
	}

    // free(x->ridx.idx.a); x->ridx.idx.a = NULL;
    fread(&kn, sizeof(kn), 1, fp); 
    fseek(fp, sizeof((*(x->ridx.idx.a)))*kn, SEEK_CUR);

    // free(x->ridx.occ.a); x->ridx.occ.a = NULL;
    fread(&kn, sizeof(kn), 1, fp); 
    fseek(fp, sizeof((*(x->ridx.occ.a)))*kn, SEEK_CUR);

    fread(&x->n, sizeof(x->n), 1, fp); assert(x->nid.n == x->n);
    if(x->n > x->m) kv_resize(ul_vec_t, *x, x->n);    
    fprintf(stderr, "[M::%s] x->n::%u, x->nid.n::%u\n", __func__, (uint32_t)x->n, (uint32_t)x->nid.n);
    for (k = 0; k < x->n; k++) {
        p = &(x->a[k]);
        fread(&p->dd, sizeof(p->dd), 1, fp);
        fread(&p->rlen, sizeof(p->rlen), 1, fp);

        fread(&p->r_base.n, sizeof(p->r_base.n), 1, fp); 
        if(p->r_base.n > p->r_base.m) kv_resize(uint8_t, p->r_base, p->r_base.n);        
        fread(p->r_base.a, sizeof((*(p->r_base.a))), p->r_base.n, fp);

        fread(&p->bb.n, sizeof(p->bb.n), 1, fp); 
        if(p->bb.n > p->bb.m) kv_resize(uc_block_t, p->bb, p->bb.n);
        fread(p->bb.a, sizeof((*(p->bb.a))), p->bb.n, fp);

        fread(&p->N_site.n, sizeof(p->N_site.n), 1, fp); 
        if(p->N_site.n > p->N_site.m) kv_resize(uint32_t, p->N_site, p->N_site.n);        
        fread(p->N_site.a, sizeof((*(p->N_site.a))), p->N_site.n, fp);
    }
    fclose(fp);
    return 1;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x80, %rsp
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq $0x0, -0x20(%rbp)
movq -0x18(%rbp), %rdi
callq 0x20a0
movq %rax, %rdi
addq $0x64, %rdi
shlq $0x0, %rdi
callq 0x2270
movq %rax, -0x20(%rbp)
movq -0x20(%rbp), %rdi
movq -0x18(%rbp), %rdx
leaq 0x33e8c(%rip), %rsi     # 0x39a7f3
leaq 0x2d283(%rip), %rcx     # 0x393bf1
movb $0x0, %al
callq 0x2050
movq -0x20(%rbp), %rdi
leaq 0x29a56(%rip), %rsi     # 0x3903d6
callq 0x2200
movq %rax, -0x28(%rbp)
movq -0x20(%rbp), %rdi
callq 0x2210
cmpq $0x0, -0x28(%rbp)
jne 0x3669a6
movq $0x0, -0x8(%rbp)
jmp 0x3670e8
movq $0x0, -0x40(%rbp)
movq -0x28(%rbp), %rcx
leaq -0x48(%rbp), %rdi
movl $0x8, %esi
movl $0x1, %edx
callq 0x22e0
movq $0x0, -0x50(%rbp)
movq -0x50(%rbp), %rax
cmpq -0x48(%rbp), %rax
jae 0x366a82
movq -0x28(%rbp), %rcx
leaq -0x54(%rbp), %rdi
movl $0x4, %esi
movl $0x1, %edx
callq 0x22e0
movq -0x28(%rbp), %rcx
leaq -0x54(%rbp), %rdi
movl $0x4, %esi
movl $0x1, %edx
callq 0x22e0
leaq -0x80(%rbp), %rdi
addq $0x4, %rdi
movq -0x28(%rbp), %rcx
movl $0x4, %esi
movl $0x1, %edx
callq 0x22e0
leaq -0x80(%rbp), %rdi
addq $0x8, %rdi
movq -0x28(%rbp), %rcx
movl $0x4, %esi
movl $0x1, %edx
callq 0x22e0
leaq -0x80(%rbp), %rdi
addq $0x10, %rdi
movq -0x28(%rbp), %rcx
movl $0x4, %esi
movl $0x1, %edx
callq 0x22e0
movq -0x28(%rbp), %rdi
movl -0x70(%rbp), %eax
movl %eax, %esi
shlq $0x3, %rsi
movl $0x1, %edx
callq 0x21b0
movq -0x50(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x50(%rbp)
jmp 0x3669cd
movq -0x28(%rbp), %rdi
movl $0x8, %esi
movl $0x1, %edx
callq 0x21b0
movq $0x0, -0x30(%rbp)
movq -0x30(%rbp), %rax
movq -0x10(%rbp), %rcx
cmpq (%rcx), %rax
jae 0x366af5
movq -0x28(%rbp), %rdi
movl $0x4, %esi
movl $0x1, %edx
callq 0x21b0
movq -0x28(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rax
movq -0x30(%rbp), %rcx
shlq $0x4, %rcx
addq %rcx, %rax
movl 0x8(%rax), %eax
movl %eax, %esi
shlq $0x0, %rsi
movl $0x1, %edx
callq 0x21b0
movq -0x30(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x30(%rbp)
jmp 0x366a9d
movq -0x28(%rbp), %rcx
leaq -0x38(%rbp), %rdi
movl $0x8, %esi
movl $0x1, %edx
callq 0x22e0
movq -0x28(%rbp), %rdi
movq -0x38(%rbp), %rsi
shlq $0x2, %rsi
movl $0x1, %edx
callq 0x21b0
movq -0x28(%rbp), %rcx
leaq -0x38(%rbp), %rdi
movl $0x8, %esi
movl $0x1, %edx
callq 0x22e0
movq -0x28(%rbp), %rdi
movq -0x38(%rbp), %rsi
shlq $0x3, %rsi
movl $0x1, %edx
callq 0x21b0
movq -0x10(%rbp), %rdi
addq $0x50, %rdi
movq -0x28(%rbp), %rcx
movl $0x8, %esi
movl $0x1, %edx
callq 0x22e0
movq -0x10(%rbp), %rax
movq (%rax), %rax
movq -0x10(%rbp), %rcx
cmpq 0x50(%rcx), %rax
jne 0x366b7d
jmp 0x366b9c
leaq 0x33c81(%rip), %rdi     # 0x39a805
leaq 0x2f62e(%rip), %rsi     # 0x3961b9
movl $0x39dd, %edx           # imm = 0x39DD
leaq 0x33c7f(%rip), %rcx     # 0x39a816
callq 0x2130
movq -0x10(%rbp), %rax
movq 0x50(%rax), %rax
movq -0x10(%rbp), %rcx
cmpq 0x58(%rcx), %rax
jbe 0x366c96
jmp 0x366bb4
movq -0x10(%rbp), %rax
movq 0x58(%rax), %rax
movq -0x10(%rbp), %rcx
cmpq 0x50(%rcx), %rax
jae 0x366c92
movq -0x10(%rbp), %rax
movq 0x50(%rax), %rcx
movq -0x10(%rbp), %rax
movq %rcx, 0x58(%rax)
movq -0x10(%rbp), %rax
movq 0x58(%rax), %rcx
addq $-0x1, %rcx
movq %rcx, 0x58(%rax)
movq -0x10(%rbp), %rax
movq 0x58(%rax), %rcx
shrq %rcx
movq -0x10(%rbp), %rax
orq 0x58(%rax), %rcx
movq %rcx, 0x58(%rax)
movq -0x10(%rbp), %rax
movq 0x58(%rax), %rcx
shrq $0x2, %rcx
movq -0x10(%rbp), %rax
orq 0x58(%rax), %rcx
movq %rcx, 0x58(%rax)
movq -0x10(%rbp), %rax
movq 0x58(%rax), %rcx
shrq $0x4, %rcx
movq -0x10(%rbp), %rax
orq 0x58(%rax), %rcx
movq %rcx, 0x58(%rax)
movq -0x10(%rbp), %rax
movq 0x58(%rax), %rcx
shrq $0x8, %rcx
movq -0x10(%rbp), %rax
orq 0x58(%rax), %rcx
movq %rcx, 0x58(%rax)
movq -0x10(%rbp), %rax
movq 0x58(%rax), %rcx
shrq $0x10, %rcx
movq -0x10(%rbp), %rax
orq 0x58(%rax), %rcx
movq %rcx, 0x58(%rax)
movq -0x10(%rbp), %rax
movq 0x58(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x58(%rax)
movq -0x10(%rbp), %rax
movq 0x48(%rax), %rdi
movq -0x10(%rbp), %rax
imulq $0x58, 0x58(%rax), %rsi
callq 0x2360
movq %rax, %rcx
movq -0x10(%rbp), %rax
movq %rcx, 0x48(%rax)
jmp 0x366c94
jmp 0x366c96
movq 0x5d343(%rip), %rax     # 0x3c3fe0
movq (%rax), %rdi
movq -0x10(%rbp), %rax
movq 0x50(%rax), %rax
movl %eax, %ecx
movq -0x10(%rbp), %rax
movq (%rax), %rax
movl %eax, %r8d
leaq 0x33b83(%rip), %rsi     # 0x39a83e
leaq 0x33b9c(%rip), %rdx     # 0x39a85e
movb $0x0, %al
callq 0x22a0
movq $0x0, -0x30(%rbp)
movq -0x30(%rbp), %rax
movq -0x10(%rbp), %rcx
cmpq 0x50(%rcx), %rax
jae 0x3670d7
movq -0x10(%rbp), %rax
movq 0x48(%rax), %rax
imulq $0x58, -0x30(%rbp), %rcx
addq %rcx, %rax
movq %rax, -0x40(%rbp)
movq -0x40(%rbp), %rdi
addq $0x50, %rdi
movq -0x28(%rbp), %rcx
movl $0x1, %edx
movq %rdx, %rsi
callq 0x22e0
movq -0x40(%rbp), %rdi
addq $0x18, %rdi
movq -0x28(%rbp), %rcx
movl $0x4, %esi
movl $0x1, %edx
callq 0x22e0
movq -0x40(%rbp), %rdi
movq -0x28(%rbp), %rcx
movl $0x8, %esi
movl $0x1, %edx
callq 0x22e0
movq -0x40(%rbp), %rax
movq (%rax), %rax
movq -0x40(%rbp), %rcx
cmpq 0x8(%rcx), %rax
jbe 0x366e3c
jmp 0x366d59
movq -0x40(%rbp), %rax
movq 0x8(%rax), %rax
movq -0x40(%rbp), %rcx
cmpq (%rcx), %rax
jae 0x366e38
movq -0x40(%rbp), %rax
movq (%rax), %rcx
movq -0x40(%rbp), %rax
movq %rcx, 0x8(%rax)
movq -0x40(%rbp), %rax
movq 0x8(%rax), %rcx
addq $-0x1, %rcx
movq %rcx, 0x8(%rax)
movq -0x40(%rbp), %rax
movq 0x8(%rax), %rcx
shrq %rcx
movq -0x40(%rbp), %rax
orq 0x8(%rax), %rcx
movq %rcx, 0x8(%rax)
movq -0x40(%rbp), %rax
movq 0x8(%rax), %rcx
shrq $0x2, %rcx
movq -0x40(%rbp), %rax
orq 0x8(%rax), %rcx
movq %rcx, 0x8(%rax)
movq -0x40(%rbp), %rax
movq 0x8(%rax), %rcx
shrq $0x4, %rcx
movq -0x40(%rbp), %rax
orq 0x8(%rax), %rcx
movq %rcx, 0x8(%rax)
movq -0x40(%rbp), %rax
movq 0x8(%rax), %rcx
shrq $0x8, %rcx
movq -0x40(%rbp), %rax
orq 0x8(%rax), %rcx
movq %rcx, 0x8(%rax)
movq -0x40(%rbp), %rax
movq 0x8(%rax), %rcx
shrq $0x10, %rcx
movq -0x40(%rbp), %rax
orq 0x8(%rax), %rcx
movq %rcx, 0x8(%rax)
movq -0x40(%rbp), %rax
movq 0x8(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x8(%rax)
movq -0x40(%rbp), %rax
movq 0x10(%rax), %rdi
movq -0x40(%rbp), %rax
movq 0x8(%rax), %rsi
shlq $0x0, %rsi
callq 0x2360
movq %rax, %rcx
movq -0x40(%rbp), %rax
movq %rcx, 0x10(%rax)
jmp 0x366e3a
jmp 0x366e3c
movq -0x40(%rbp), %rax
movq 0x10(%rax), %rdi
movq -0x40(%rbp), %rax
movq (%rax), %rdx
movq -0x28(%rbp), %rcx
movl $0x1, %esi
callq 0x22e0
movq -0x40(%rbp), %rdi
addq $0x20, %rdi
movq -0x28(%rbp), %rcx
movl $0x8, %esi
movl $0x1, %edx
callq 0x22e0
movq -0x40(%rbp), %rax
movq 0x20(%rax), %rax
movq -0x40(%rbp), %rcx
cmpq 0x28(%rcx), %rax
jbe 0x366f6e
jmp 0x366e8c
movq -0x40(%rbp), %rax
movq 0x28(%rax), %rax
movq -0x40(%rbp), %rcx
cmpq 0x20(%rcx), %rax
jae 0x366f6a
movq -0x40(%rbp), %rax
movq 0x20(%rax), %rcx
movq -0x40(%rbp), %rax
movq %rcx, 0x28(%rax)
movq -0x40(%rbp), %rax
movq 0x28(%rax), %rcx
addq $-0x1, %rcx
movq %rcx, 0x28(%rax)
movq -0x40(%rbp), %rax
movq 0x28(%rax), %rcx
shrq %rcx
movq -0x40(%rbp), %rax
orq 0x28(%rax), %rcx
movq %rcx, 0x28(%rax)
movq -0x40(%rbp), %rax
movq 0x28(%rax), %rcx
shrq $0x2, %rcx
movq -0x40(%rbp), %rax
orq 0x28(%rax), %rcx
movq %rcx, 0x28(%rax)
movq -0x40(%rbp), %rax
movq 0x28(%rax), %rcx
shrq $0x4, %rcx
movq -0x40(%rbp), %rax
orq 0x28(%rax), %rcx
movq %rcx, 0x28(%rax)
movq -0x40(%rbp), %rax
movq 0x28(%rax), %rcx
shrq $0x8, %rcx
movq -0x40(%rbp), %rax
orq 0x28(%rax), %rcx
movq %rcx, 0x28(%rax)
movq -0x40(%rbp), %rax
movq 0x28(%rax), %rcx
shrq $0x10, %rcx
movq -0x40(%rbp), %rax
orq 0x28(%rax), %rcx
movq %rcx, 0x28(%rax)
movq -0x40(%rbp), %rax
movq 0x28(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x28(%rax)
movq -0x40(%rbp), %rax
movq 0x30(%rax), %rdi
movq -0x40(%rbp), %rax
imulq $0x24, 0x28(%rax), %rsi
callq 0x2360
movq %rax, %rcx
movq -0x40(%rbp), %rax
movq %rcx, 0x30(%rax)
jmp 0x366f6c
jmp 0x366f6e
movq -0x40(%rbp), %rax
movq 0x30(%rax), %rdi
movq -0x40(%rbp), %rax
movq 0x20(%rax), %rdx
movq -0x28(%rbp), %rcx
movl $0x24, %esi
callq 0x22e0
movq -0x40(%rbp), %rdi
addq $0x38, %rdi
addq $0x8, %rdi
movq -0x28(%rbp), %rcx
movl $0x8, %esi
movl $0x1, %edx
callq 0x22e0
movq -0x40(%rbp), %rax
movq 0x40(%rax), %rax
movq -0x40(%rbp), %rcx
cmpq 0x48(%rcx), %rax
jbe 0x3670a8
jmp 0x366fc3
movq -0x40(%rbp), %rax
movq 0x48(%rax), %rax
movq -0x40(%rbp), %rcx
cmpq 0x40(%rcx), %rax
jae 0x3670a4
movq -0x40(%rbp), %rax
movq 0x40(%rax), %rcx
movq -0x40(%rbp), %rax
movq %rcx, 0x48(%rax)
movq -0x40(%rbp), %rax
movq 0x48(%rax), %rcx
addq $-0x1, %rcx
movq %rcx, 0x48(%rax)
movq -0x40(%rbp), %rax
movq 0x48(%rax), %rcx
shrq %rcx
movq -0x40(%rbp), %rax
orq 0x48(%rax), %rcx
movq %rcx, 0x48(%rax)
movq -0x40(%rbp), %rax
movq 0x48(%rax), %rcx
shrq $0x2, %rcx
movq -0x40(%rbp), %rax
orq 0x48(%rax), %rcx
movq %rcx, 0x48(%rax)
movq -0x40(%rbp), %rax
movq 0x48(%rax), %rcx
shrq $0x4, %rcx
movq -0x40(%rbp), %rax
orq 0x48(%rax), %rcx
movq %rcx, 0x48(%rax)
movq -0x40(%rbp), %rax
movq 0x48(%rax), %rcx
shrq $0x8, %rcx
movq -0x40(%rbp), %rax
orq 0x48(%rax), %rcx
movq %rcx, 0x48(%rax)
movq -0x40(%rbp), %rax
movq 0x48(%rax), %rcx
shrq $0x10, %rcx
movq -0x40(%rbp), %rax
orq 0x48(%rax), %rcx
movq %rcx, 0x48(%rax)
movq -0x40(%rbp), %rax
movq 0x48(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x48(%rax)
movq -0x40(%rbp), %rax
movq 0x38(%rax), %rdi
movq -0x40(%rbp), %rax
movq 0x48(%rax), %rsi
shlq $0x2, %rsi
callq 0x2360
movq %rax, %rcx
movq -0x40(%rbp), %rax
movq %rcx, 0x38(%rax)
jmp 0x3670a6
jmp 0x3670a8
movq -0x40(%rbp), %rax
movq 0x38(%rax), %rdi
movq -0x40(%rbp), %rax
movq 0x40(%rax), %rdx
movq -0x28(%rbp), %rcx
movl $0x4, %esi
callq 0x22e0
movq -0x30(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x30(%rbp)
jmp 0x366cd1
movq -0x28(%rbp), %rdi
callq 0x21a0
movq $0x1, -0x8(%rbp)
movq -0x8(%rbp), %rax
addq $0x80, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)