// File: chhylp123[P]hifiasm/inter.cpp
// Function: gen_ul_vec_rid_t(all_ul_t*, All_reads*, ma_ug_t*)
void gen_ul_vec_rid_t(all_ul_t *x, All_reads *rdb, ma_ug_t *ug)
{
	ul_vec_rid_t *ridx = &(x->ridx);
	uint64_t k, i, l, m, *a, a_n, idx_n; ul_vec_t *p = NULL;
	idx_n = (rdb?rdb->total_reads:ug->u.n);
	ridx->idx.n = ridx->idx.m = idx_n + 1; CALLOC(ridx->idx.a, ridx->idx.n);

	for (k = 0; k < x->n; k++) {///each UL read
		p = &(x->a[k]);
		for (i = 0; i < p->bb.n; i++) {
			if(p->bb.a[i].base) continue;
			ridx->idx.a[p->bb.a[i].hid]++;
		}
	}

	for (k = l = 0; k < ridx->idx.n; k++) {
		m = ridx->idx.a[k];
		ridx->idx.a[k] = l;
		l += m;
	}

	ridx->occ.n = ridx->occ.m = l; MALLOC(ridx->occ.a, ridx->occ.n);
	for (k = 0; k < idx_n; k++) {
		a = ridx->occ.a + ridx->idx.a[k];
		a_n = ridx->idx.a[k+1] - ridx->idx.a[k];
		if(a_n) a[a_n-1] = 0;
	}

	for (k = 0; k < x->n; k++) {
		p = &(x->a[k]);
		for (i = 0; i < p->bb.n; i++) {
			if(p->bb.a[i].base) continue;
			a = ridx->occ.a + ridx->idx.a[p->bb.a[i].hid];
			a_n = ridx->idx.a[p->bb.a[i].hid+1] - ridx->idx.a[p->bb.a[i].hid];
			if(a_n) {
				if(a[a_n-1] == a_n-1) a[a_n-1] = (k<<32)|i;
				else a[a[a_n-1]++] = (k<<32)|i;
			}
		}
	}
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x70, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq -0x8(%rbp), %rax
addq $0x18, %rax
movq %rax, -0x20(%rbp)
movq $0x0, -0x60(%rbp)
cmpq $0x0, -0x10(%rbp)
je 0x2f0d4d
movq -0x10(%rbp), %rax
movq 0x50(%rax), %rax
movq %rax, -0x68(%rbp)
jmp 0x2f0d58
movq -0x18(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x68(%rbp)
movq -0x68(%rbp), %rax
movq %rax, -0x58(%rbp)
movq -0x58(%rbp), %rcx
addq $0x1, %rcx
movq -0x20(%rbp), %rax
movq %rcx, 0x8(%rax)
movq -0x20(%rbp), %rax
movq %rcx, (%rax)
movq -0x20(%rbp), %rax
movq (%rax), %rdi
movl $0x4, %esi
callq 0x2140
movq %rax, %rcx
movq -0x20(%rbp), %rax
movq %rcx, 0x10(%rax)
movq $0x0, -0x28(%rbp)
movq -0x28(%rbp), %rax
movq -0x8(%rbp), %rcx
cmpq 0x50(%rcx), %rax
jae 0x2f0e39
movq -0x8(%rbp), %rax
movq 0x48(%rax), %rax
imulq $0x58, -0x28(%rbp), %rcx
addq %rcx, %rax
movq %rax, -0x60(%rbp)
movq $0x0, -0x30(%rbp)
movq -0x30(%rbp), %rax
movq -0x60(%rbp), %rcx
cmpq 0x20(%rcx), %rax
jae 0x2f0e26
movq -0x60(%rbp), %rax
movq 0x30(%rax), %rax
imulq $0x24, -0x30(%rbp), %rcx
addq %rcx, %rax
movb 0x20(%rax), %al
shrb $0x6, %al
andb $0x1, %al
cmpb $0x0, %al
je 0x2f0df5
jmp 0x2f0e18
movq -0x20(%rbp), %rax
movq 0x10(%rax), %rax
movq -0x60(%rbp), %rcx
movq 0x30(%rcx), %rcx
imulq $0x24, -0x30(%rbp), %rdx
addq %rdx, %rcx
movl (%rcx), %ecx
movl (%rax,%rcx,4), %edx
addl $0x1, %edx
movl %edx, (%rax,%rcx,4)
movq -0x30(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x30(%rbp)
jmp 0x2f0dc9
jmp 0x2f0e28
movq -0x28(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x28(%rbp)
jmp 0x2f0d9b
movq $0x0, -0x38(%rbp)
movq $0x0, -0x28(%rbp)
movq -0x28(%rbp), %rax
movq -0x20(%rbp), %rcx
cmpq (%rcx), %rax
jae 0x2f0e98
movq -0x20(%rbp), %rax
movq 0x10(%rax), %rax
movq -0x28(%rbp), %rcx
movl (%rax,%rcx,4), %eax
movq %rax, -0x40(%rbp)
movq -0x38(%rbp), %rax
movl %eax, %edx
movq -0x20(%rbp), %rax
movq 0x10(%rax), %rax
movq -0x28(%rbp), %rcx
movl %edx, (%rax,%rcx,4)
movq -0x40(%rbp), %rax
addq -0x38(%rbp), %rax
movq %rax, -0x38(%rbp)
movq -0x28(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x28(%rbp)
jmp 0x2f0e49
movq -0x38(%rbp), %rcx
movq -0x20(%rbp), %rax
movq %rcx, 0x20(%rax)
movq -0x20(%rbp), %rax
movq %rcx, 0x18(%rax)
movq -0x20(%rbp), %rax
movq 0x18(%rax), %rdi
shlq $0x3, %rdi
callq 0x2270
movq %rax, %rcx
movq -0x20(%rbp), %rax
movq %rcx, 0x28(%rax)
movq $0x0, -0x28(%rbp)
movq -0x28(%rbp), %rax
cmpq -0x58(%rbp), %rax
jae 0x2f0f4c
movq -0x20(%rbp), %rax
movq 0x28(%rax), %rax
movq -0x20(%rbp), %rcx
movq 0x10(%rcx), %rcx
movq -0x28(%rbp), %rdx
movl (%rcx,%rdx,4), %ecx
shlq $0x3, %rcx
addq %rcx, %rax
movq %rax, -0x48(%rbp)
movq -0x20(%rbp), %rax
movq 0x10(%rax), %rax
movq -0x28(%rbp), %rcx
movl 0x4(%rax,%rcx,4), %eax
movq -0x20(%rbp), %rcx
movq 0x10(%rcx), %rcx
movq -0x28(%rbp), %rdx
subl (%rcx,%rdx,4), %eax
movl %eax, %eax
movq %rax, -0x50(%rbp)
cmpq $0x0, -0x50(%rbp)
je 0x2f0f3c
movq -0x48(%rbp), %rax
movq -0x50(%rbp), %rcx
subq $0x1, %rcx
movq $0x0, (%rax,%rcx,8)
jmp 0x2f0f3e
movq -0x28(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x28(%rbp)
jmp 0x2f0ed0
movq $0x0, -0x28(%rbp)
movq -0x28(%rbp), %rax
movq -0x8(%rbp), %rcx
cmpq 0x50(%rcx), %rax
jae 0x2f10c3
movq -0x8(%rbp), %rax
movq 0x48(%rax), %rax
imulq $0x58, -0x28(%rbp), %rcx
addq %rcx, %rax
movq %rax, -0x60(%rbp)
movq $0x0, -0x30(%rbp)
movq -0x30(%rbp), %rax
movq -0x60(%rbp), %rcx
cmpq 0x20(%rcx), %rax
jae 0x2f10b0
movq -0x60(%rbp), %rax
movq 0x30(%rax), %rax
imulq $0x24, -0x30(%rbp), %rcx
addq %rcx, %rax
movb 0x20(%rax), %al
shrb $0x6, %al
andb $0x1, %al
cmpb $0x0, %al
je 0x2f0fb5
jmp 0x2f109f
movq -0x20(%rbp), %rax
movq 0x28(%rax), %rax
movq -0x20(%rbp), %rcx
movq 0x10(%rcx), %rcx
movq -0x60(%rbp), %rdx
movq 0x30(%rdx), %rdx
imulq $0x24, -0x30(%rbp), %rsi
addq %rsi, %rdx
movl (%rdx), %edx
movl (%rcx,%rdx,4), %ecx
shlq $0x3, %rcx
addq %rcx, %rax
movq %rax, -0x48(%rbp)
movq -0x20(%rbp), %rax
movq 0x10(%rax), %rax
movq -0x60(%rbp), %rcx
movq 0x30(%rcx), %rcx
imulq $0x24, -0x30(%rbp), %rdx
addq %rdx, %rcx
movl (%rcx), %ecx
addl $0x1, %ecx
movl %ecx, %ecx
movl (%rax,%rcx,4), %eax
movq -0x20(%rbp), %rcx
movq 0x10(%rcx), %rcx
movq -0x60(%rbp), %rdx
movq 0x30(%rdx), %rdx
imulq $0x24, -0x30(%rbp), %rsi
addq %rsi, %rdx
movl (%rdx), %edx
subl (%rcx,%rdx,4), %eax
movl %eax, %eax
movq %rax, -0x50(%rbp)
cmpq $0x0, -0x50(%rbp)
je 0x2f109d
movq -0x48(%rbp), %rax
movq -0x50(%rbp), %rcx
subq $0x1, %rcx
movq (%rax,%rcx,8), %rax
movq -0x50(%rbp), %rcx
subq $0x1, %rcx
cmpq %rcx, %rax
jne 0x2f106c
movq -0x28(%rbp), %rdx
shlq $0x20, %rdx
orq -0x30(%rbp), %rdx
movq -0x48(%rbp), %rax
movq -0x50(%rbp), %rcx
subq $0x1, %rcx
movq %rdx, (%rax,%rcx,8)
jmp 0x2f109b
movq -0x28(%rbp), %rdx
shlq $0x20, %rdx
orq -0x30(%rbp), %rdx
movq -0x48(%rbp), %rax
movq -0x48(%rbp), %rsi
movq -0x50(%rbp), %rdi
subq $0x1, %rdi
movq (%rsi,%rdi,8), %rcx
movq %rcx, %r8
addq $0x1, %r8
movq %r8, (%rsi,%rdi,8)
movq %rdx, (%rax,%rcx,8)
jmp 0x2f109d
jmp 0x2f109f
movq -0x30(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x30(%rbp)
jmp 0x2f0f82
jmp 0x2f10b2
movq -0x28(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x28(%rbp)
jmp 0x2f0f54
addq $0x70, %rsp
popq %rbp
retq
nopl (%rax)