// File: chhylp123[P]hifiasm/inter.cpp
// Function: update_ava_het_site(haplotype_evdience_alloc*, unsigned long, unsigned long*, unsigned long*, unsigned long)
uint64_t update_ava_het_site(haplotype_evdience_alloc *h, uint64_t oid, uint64_t *beg, uint64_t *end, uint64_t is_srt)
{
	uint64_t k, l, i, occ = 0, n = h->length, need_srt = 0; SnpStats *s = NULL;
	haplotype_evdience tt;
	l = beg? (*beg):0; if(end) (*end) = n; if(beg) (*beg) = n;
	if(l < n && h->list[l].overlapID > oid){
		if(end) (*end) = l;
		return 0;
	}
	for (k = l + 1; k <= n; ++k) {  
		if(h->list[l].overlapID > oid) {
			if(end) (*end) = l;
			break;
		}
        if (k == n || h->list[k].overlapID != h->list[l].overlapID) {
			if(h->list[l].overlapID == oid) {
				for (i = l; i < k; i++) {
					if(h->list[i].type!=1) continue; 
					s = &(h->snp_stat.a[h->list[i].overlapSite]);
					if(s->score == 1 && (!(s->occ_0 < 2 || s->occ_1 < 2))) {
						if(l+occ != i) {
							tt = h->list[l+occ];
							h->list[l+occ] = h->list[i];
							h->list[i] = tt;
						}
						if((occ>0) && (h->list[l+occ].cov<h->list[l+occ-1].cov)) need_srt = 1;
						occ++;
					}
				}
				if(beg) (*beg) = l;
				if(end) (*end) = k;
				break;
			}
            l = k;
        }
    }
	// if(oid == 160) {
	// 	fprintf(stderr, "###[M::%s] l:%lu, occ:%lu\n", __func__, l, occ);
	// 	for (k = l; k < l + occ; k++) {
	// 		fprintf(stderr, "h->list[%lu]:%u\n", k, h->list[k].cov);
	// 	}
	// }
	if(occ && is_srt && need_srt) {
		radix_sort_hap_ev_cov_srt(h->list+l, h->list+l+occ);
	}

	return occ;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x90, %rsp
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq %rdx, -0x20(%rbp)
movq %rcx, -0x28(%rbp)
movq %r8, -0x30(%rbp)
movq $0x0, -0x50(%rbp)
movq -0x10(%rbp), %rax
movl 0x10(%rax), %eax
movq %rax, -0x58(%rbp)
movq $0x0, -0x60(%rbp)
movq $0x0, -0x68(%rbp)
cmpq $0x0, -0x20(%rbp)
je 0x28c7e9
movq -0x20(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x88(%rbp)
jmp 0x28c7f4
xorl %eax, %eax
movq %rax, -0x88(%rbp)
jmp 0x28c7f4
movq -0x88(%rbp), %rax
movq %rax, -0x40(%rbp)
cmpq $0x0, -0x28(%rbp)
je 0x28c811
movq -0x58(%rbp), %rcx
movq -0x28(%rbp), %rax
movq %rcx, (%rax)
cmpq $0x0, -0x20(%rbp)
je 0x28c823
movq -0x58(%rbp), %rcx
movq -0x20(%rbp), %rax
movq %rcx, (%rax)
movq -0x40(%rbp), %rax
cmpq -0x58(%rbp), %rax
jae 0x28c864
movq -0x10(%rbp), %rax
movq (%rax), %rax
imulq $0x18, -0x40(%rbp), %rcx
addq %rcx, %rax
movl 0x4(%rax), %eax
cmpq -0x18(%rbp), %rax
jbe 0x28c864
cmpq $0x0, -0x28(%rbp)
je 0x28c857
movq -0x40(%rbp), %rcx
movq -0x28(%rbp), %rax
movq %rcx, (%rax)
movq $0x0, -0x8(%rbp)
jmp 0x28cb11
movq -0x40(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x38(%rbp)
movq -0x38(%rbp), %rax
cmpq -0x58(%rbp), %rax
ja 0x28cac9
movq -0x10(%rbp), %rax
movq (%rax), %rax
imulq $0x18, -0x40(%rbp), %rcx
addq %rcx, %rax
movl 0x4(%rax), %eax
cmpq -0x18(%rbp), %rax
jbe 0x28c8ad
cmpq $0x0, -0x28(%rbp)
je 0x28c8a8
movq -0x40(%rbp), %rcx
movq -0x28(%rbp), %rax
movq %rcx, (%rax)
jmp 0x28cac9
movq -0x38(%rbp), %rax
cmpq -0x58(%rbp), %rax
je 0x28c8e1
movq -0x10(%rbp), %rax
movq (%rax), %rax
imulq $0x18, -0x38(%rbp), %rcx
addq %rcx, %rax
movl 0x4(%rax), %eax
movq -0x10(%rbp), %rcx
movq (%rcx), %rcx
imulq $0x18, -0x40(%rbp), %rdx
addq %rdx, %rcx
cmpl 0x4(%rcx), %eax
je 0x28cab6
movq -0x10(%rbp), %rax
movq (%rax), %rax
imulq $0x18, -0x40(%rbp), %rcx
addq %rcx, %rax
movl 0x4(%rax), %eax
cmpq -0x18(%rbp), %rax
jne 0x28caae
movq -0x40(%rbp), %rax
movq %rax, -0x48(%rbp)
movq -0x48(%rbp), %rax
cmpq -0x38(%rbp), %rax
jae 0x28ca88
movq -0x10(%rbp), %rax
movq (%rax), %rax
imulq $0x18, -0x48(%rbp), %rcx
addq %rcx, %rax
movzbl 0xc(%rax), %eax
cmpl $0x1, %eax
je 0x28c930
jmp 0x28ca77
movq -0x10(%rbp), %rax
movq 0x218(%rax), %rax
movq -0x10(%rbp), %rcx
movq (%rcx), %rcx
imulq $0x18, -0x48(%rbp), %rdx
addq %rdx, %rcx
movl 0x8(%rcx), %ecx
imulq $0x28, %rcx, %rcx
addq %rcx, %rax
movq %rax, -0x68(%rbp)
movq -0x68(%rbp), %rax
cmpl $0x1, 0x1c(%rax)
jne 0x28ca75
movq -0x68(%rbp), %rax
cmpl $0x2, 0x8(%rax)
jb 0x28ca75
movq -0x68(%rbp), %rax
cmpl $0x2, 0xc(%rax)
jb 0x28ca75
movq -0x40(%rbp), %rax
addq -0x50(%rbp), %rax
cmpq -0x48(%rbp), %rax
je 0x28ca22
movq -0x10(%rbp), %rax
movq (%rax), %rax
movq -0x40(%rbp), %rcx
addq -0x50(%rbp), %rcx
imulq $0x18, %rcx, %rcx
addq %rcx, %rax
movq (%rax), %rcx
movq %rcx, -0x80(%rbp)
movq 0x8(%rax), %rcx
movq %rcx, -0x78(%rbp)
movq 0x10(%rax), %rax
movq %rax, -0x70(%rbp)
movq -0x10(%rbp), %rax
movq (%rax), %rcx
imulq $0x18, -0x48(%rbp), %rax
addq %rax, %rcx
movq -0x10(%rbp), %rax
movq (%rax), %rax
movq -0x40(%rbp), %rdx
addq -0x50(%rbp), %rdx
imulq $0x18, %rdx, %rdx
addq %rdx, %rax
movq (%rcx), %rdx
movq %rdx, (%rax)
movq 0x8(%rcx), %rdx
movq %rdx, 0x8(%rax)
movq 0x10(%rcx), %rcx
movq %rcx, 0x10(%rax)
movq -0x10(%rbp), %rax
movq (%rax), %rax
imulq $0x18, -0x48(%rbp), %rcx
addq %rcx, %rax
movq -0x80(%rbp), %rcx
movq %rcx, (%rax)
movq -0x78(%rbp), %rcx
movq %rcx, 0x8(%rax)
movq -0x70(%rbp), %rcx
movq %rcx, 0x10(%rax)
cmpq $0x0, -0x50(%rbp)
jbe 0x28ca69
movq -0x10(%rbp), %rax
movq (%rax), %rax
movq -0x40(%rbp), %rcx
addq -0x50(%rbp), %rcx
imulq $0x18, %rcx, %rcx
addq %rcx, %rax
movl 0x10(%rax), %eax
movq -0x10(%rbp), %rcx
movq (%rcx), %rcx
movq -0x40(%rbp), %rdx
addq -0x50(%rbp), %rdx
subq $0x1, %rdx
imulq $0x18, %rdx, %rdx
addq %rdx, %rcx
cmpl 0x10(%rcx), %eax
jae 0x28ca69
movq $0x1, -0x60(%rbp)
movq -0x50(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x50(%rbp)
jmp 0x28ca77
movq -0x48(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x48(%rbp)
jmp 0x28c905
cmpq $0x0, -0x20(%rbp)
je 0x28ca9a
movq -0x40(%rbp), %rcx
movq -0x20(%rbp), %rax
movq %rcx, (%rax)
cmpq $0x0, -0x28(%rbp)
je 0x28caac
movq -0x38(%rbp), %rcx
movq -0x28(%rbp), %rax
movq %rcx, (%rax)
jmp 0x28cac9
movq -0x38(%rbp), %rax
movq %rax, -0x40(%rbp)
jmp 0x28cab8
movq -0x38(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x38(%rbp)
jmp 0x28c870
cmpq $0x0, -0x50(%rbp)
je 0x28cb09
cmpq $0x0, -0x30(%rbp)
je 0x28cb09
cmpq $0x0, -0x60(%rbp)
je 0x28cb09
movq -0x10(%rbp), %rax
movq (%rax), %rdi
imulq $0x18, -0x40(%rbp), %rax
addq %rax, %rdi
movq -0x10(%rbp), %rax
movq (%rax), %rsi
imulq $0x18, -0x40(%rbp), %rax
addq %rax, %rsi
imulq $0x18, -0x50(%rbp), %rax
addq %rax, %rsi
callq 0x27d140
movq -0x50(%rbp), %rax
movq %rax, -0x8(%rbp)
movq -0x8(%rbp), %rax
addq $0x90, %rsp
popq %rbp
retq
nop