// File: chhylp123[P]hifiasm/inter.cpp
// Function: dedup_sort_ul_ov_t(ul_ov_t*, long)
int64_t dedup_sort_ul_ov_t(ul_ov_t *a, int64_t a_n)
{
	int64_t k, l, z, r, i, qo, to; float rr = 0.9;
	for (k = 1, l = i = 0; k <= a_n; k++) {
		if(k == a_n || a[k].tn != a[l].tn) {///remove the duplicated contained alignments
			for (z = l; z < k; z++) {
				for (r = i-1; r >= 0 && a[r].tn == a[z].tn; r--){
					/**
                	if(a[z].qn == a[r].qn && a[z].qs == a[r].qs && a[z].qe == a[r].qe && 
					   a[z].tn == a[r].tn && a[z].ts == a[r].ts && a[z].te == a[r].te && 
					   a[z].sec == a[r].sec && a[z].el == a[r].el && a[z].rev == a[r].rev) {
						   break;
					}
					**/
					if(a[z].qn == a[r].qn && a[z].tn == a[r].tn && a[z].rev == a[r].rev) {
						qo = ((MIN(a[z].qe, a[r].qe) > MAX(a[z].qs, a[r].qs))? 
															MIN(a[z].qe, a[r].qe) - MAX(a[z].qs, a[r].qs):0);
						to = ((MIN(a[z].te, a[r].te) > MAX(a[z].ts, a[r].ts))?
															MIN(a[z].te, a[r].te) - MAX(a[z].ts, a[r].ts):0);
						if(qo >= ((a[r].qe - a[r].qs)*rr) && qo >= ((a[z].qe - a[z].qs)*rr) && 
						   to >= ((a[r].te - a[r].ts)*rr) && to >= ((a[z].te - a[z].ts)*rr)) {
							break;
						}
					}
				}
				if(r >= 0 && a[r].tn == a[z].tn) {
					if(a[z].el) a[r].el = 1;
					continue;
				}
				a[i++] = a[z];
			}
			l = k;
		}
	}
	return i;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %rax
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movss 0xf7157(%rip), %xmm0    # 0x38689c
movss %xmm0, -0x4c(%rbp)
movq $0x1, -0x18(%rbp)
movq $0x0, -0x38(%rbp)
movq $0x0, -0x20(%rbp)
movq -0x18(%rbp), %rax
cmpq -0x10(%rbp), %rax
jg 0x28fcd0
movq -0x18(%rbp), %rax
cmpq -0x10(%rbp), %rax
je 0x28f79e
movq -0x8(%rbp), %rax
imulq $0x1c, -0x18(%rbp), %rcx
addq %rcx, %rax
movl 0xc(%rax), %eax
movq -0x8(%rbp), %rcx
imulq $0x1c, -0x20(%rbp), %rdx
addq %rdx, %rcx
cmpl 0xc(%rcx), %eax
je 0x28fcbd
movq -0x20(%rbp), %rax
movq %rax, -0x28(%rbp)
movq -0x28(%rbp), %rax
cmpq -0x18(%rbp), %rax
jge 0x28fcb5
movq -0x38(%rbp), %rax
subq $0x1, %rax
movq %rax, -0x30(%rbp)
xorl %eax, %eax
cmpq $0x0, -0x30(%rbp)
movb %al, -0x4d(%rbp)
jl 0x28f7f0
movq -0x8(%rbp), %rax
imulq $0x1c, -0x30(%rbp), %rcx
addq %rcx, %rax
movl 0xc(%rax), %eax
movq -0x8(%rbp), %rcx
imulq $0x1c, -0x28(%rbp), %rdx
addq %rdx, %rcx
cmpl 0xc(%rcx), %eax
sete %al
movb %al, -0x4d(%rbp)
movb -0x4d(%rbp), %al
testb $0x1, %al
jne 0x28f7fc
jmp 0x28fc01
movq -0x8(%rbp), %rax
imulq $0x1c, -0x28(%rbp), %rcx
addq %rcx, %rax
movl (%rax), %eax
movq -0x8(%rbp), %rcx
imulq $0x1c, -0x30(%rbp), %rdx
addq %rdx, %rcx
cmpl (%rcx), %eax
jne 0x28fbee
movq -0x8(%rbp), %rax
imulq $0x1c, -0x28(%rbp), %rcx
addq %rcx, %rax
movl 0xc(%rax), %eax
movq -0x8(%rbp), %rcx
imulq $0x1c, -0x30(%rbp), %rdx
addq %rdx, %rcx
cmpl 0xc(%rcx), %eax
jne 0x28fbee
movq -0x8(%rbp), %rax
imulq $0x1c, -0x28(%rbp), %rcx
addq %rcx, %rax
movl 0x18(%rax), %eax
shrl $0x1f, %eax
movq -0x8(%rbp), %rcx
imulq $0x1c, -0x30(%rbp), %rdx
addq %rdx, %rcx
movl 0x18(%rcx), %ecx
shrl $0x1f, %ecx
cmpl %ecx, %eax
jne 0x28fbee
movq -0x8(%rbp), %rax
imulq $0x1c, -0x28(%rbp), %rcx
addq %rcx, %rax
movl 0x8(%rax), %eax
movq -0x8(%rbp), %rcx
imulq $0x1c, -0x30(%rbp), %rdx
addq %rdx, %rcx
cmpl 0x8(%rcx), %eax
ja 0x28f8a2
movq -0x8(%rbp), %rax
imulq $0x1c, -0x28(%rbp), %rcx
addq %rcx, %rax
movl 0x8(%rax), %eax
movl %eax, -0x54(%rbp)
jmp 0x28f8b4
movq -0x8(%rbp), %rax
imulq $0x1c, -0x30(%rbp), %rcx
addq %rcx, %rax
movl 0x8(%rax), %eax
movl %eax, -0x54(%rbp)
movl -0x54(%rbp), %eax
movl %eax, -0x58(%rbp)
movq -0x8(%rbp), %rax
imulq $0x1c, -0x28(%rbp), %rcx
addq %rcx, %rax
movl 0x4(%rax), %eax
movq -0x8(%rbp), %rcx
imulq $0x1c, -0x30(%rbp), %rdx
addq %rdx, %rcx
cmpl 0x4(%rcx), %eax
jb 0x28f8ee
movq -0x8(%rbp), %rax
imulq $0x1c, -0x28(%rbp), %rcx
addq %rcx, %rax
movl 0x4(%rax), %eax
movl %eax, -0x5c(%rbp)
jmp 0x28f900
movq -0x8(%rbp), %rax
imulq $0x1c, -0x30(%rbp), %rcx
addq %rcx, %rax
movl 0x4(%rax), %eax
movl %eax, -0x5c(%rbp)
movl -0x58(%rbp), %eax
movl -0x5c(%rbp), %ecx
cmpl %ecx, %eax
jbe 0x28f9ad
movq -0x8(%rbp), %rax
imulq $0x1c, -0x28(%rbp), %rcx
addq %rcx, %rax
movl 0x8(%rax), %eax
movq -0x8(%rbp), %rcx
imulq $0x1c, -0x30(%rbp), %rdx
addq %rdx, %rcx
cmpl 0x8(%rcx), %eax
ja 0x28f942
movq -0x8(%rbp), %rax
imulq $0x1c, -0x28(%rbp), %rcx
addq %rcx, %rax
movl 0x8(%rax), %eax
movl %eax, -0x60(%rbp)
jmp 0x28f954
movq -0x8(%rbp), %rax
imulq $0x1c, -0x30(%rbp), %rcx
addq %rcx, %rax
movl 0x8(%rax), %eax
movl %eax, -0x60(%rbp)
movl -0x60(%rbp), %eax
movl %eax, -0x64(%rbp)
movq -0x8(%rbp), %rax
imulq $0x1c, -0x28(%rbp), %rcx
addq %rcx, %rax
movl 0x4(%rax), %eax
movq -0x8(%rbp), %rcx
imulq $0x1c, -0x30(%rbp), %rdx
addq %rdx, %rcx
cmpl 0x4(%rcx), %eax
jb 0x28f98e
movq -0x8(%rbp), %rax
imulq $0x1c, -0x28(%rbp), %rcx
addq %rcx, %rax
movl 0x4(%rax), %eax
movl %eax, -0x68(%rbp)
jmp 0x28f9a0
movq -0x8(%rbp), %rax
imulq $0x1c, -0x30(%rbp), %rcx
addq %rcx, %rax
movl 0x4(%rax), %eax
movl %eax, -0x68(%rbp)
movl -0x64(%rbp), %eax
movl -0x68(%rbp), %ecx
subl %ecx, %eax
movl %eax, -0x6c(%rbp)
jmp 0x28f9b4
xorl %eax, %eax
movl %eax, -0x6c(%rbp)
jmp 0x28f9b4
movl -0x6c(%rbp), %eax
movl %eax, %eax
movq %rax, -0x40(%rbp)
movq -0x8(%rbp), %rax
imulq $0x1c, -0x28(%rbp), %rcx
addq %rcx, %rax
movl 0x14(%rax), %eax
movq -0x8(%rbp), %rcx
imulq $0x1c, -0x30(%rbp), %rdx
addq %rdx, %rcx
cmpl 0x14(%rcx), %eax
ja 0x28f9f1
movq -0x8(%rbp), %rax
imulq $0x1c, -0x28(%rbp), %rcx
addq %rcx, %rax
movl 0x14(%rax), %eax
movl %eax, -0x70(%rbp)
jmp 0x28fa03
movq -0x8(%rbp), %rax
imulq $0x1c, -0x30(%rbp), %rcx
addq %rcx, %rax
movl 0x14(%rax), %eax
movl %eax, -0x70(%rbp)
movl -0x70(%rbp), %eax
movl %eax, -0x74(%rbp)
movq -0x8(%rbp), %rax
imulq $0x1c, -0x28(%rbp), %rcx
addq %rcx, %rax
movl 0x10(%rax), %eax
movq -0x8(%rbp), %rcx
imulq $0x1c, -0x30(%rbp), %rdx
addq %rdx, %rcx
cmpl 0x10(%rcx), %eax
jb 0x28fa3d
movq -0x8(%rbp), %rax
imulq $0x1c, -0x28(%rbp), %rcx
addq %rcx, %rax
movl 0x10(%rax), %eax
movl %eax, -0x78(%rbp)
jmp 0x28fa4f
movq -0x8(%rbp), %rax
imulq $0x1c, -0x30(%rbp), %rcx
addq %rcx, %rax
movl 0x10(%rax), %eax
movl %eax, -0x78(%rbp)
movl -0x74(%rbp), %eax
movl -0x78(%rbp), %ecx
cmpl %ecx, %eax
jbe 0x28fb08
movq -0x8(%rbp), %rax
imulq $0x1c, -0x28(%rbp), %rcx
addq %rcx, %rax
movl 0x14(%rax), %eax
movq -0x8(%rbp), %rcx
imulq $0x1c, -0x30(%rbp), %rdx
addq %rdx, %rcx
cmpl 0x14(%rcx), %eax
ja 0x28fa91
movq -0x8(%rbp), %rax
imulq $0x1c, -0x28(%rbp), %rcx
addq %rcx, %rax
movl 0x14(%rax), %eax
movl %eax, -0x7c(%rbp)
jmp 0x28faa3
movq -0x8(%rbp), %rax
imulq $0x1c, -0x30(%rbp), %rcx
addq %rcx, %rax
movl 0x14(%rax), %eax
movl %eax, -0x7c(%rbp)
movl -0x7c(%rbp), %eax
movl %eax, -0x80(%rbp)
movq -0x8(%rbp), %rax
imulq $0x1c, -0x28(%rbp), %rcx
addq %rcx, %rax
movl 0x10(%rax), %eax
movq -0x8(%rbp), %rcx
imulq $0x1c, -0x30(%rbp), %rdx
addq %rdx, %rcx
cmpl 0x10(%rcx), %eax
jb 0x28fae0
movq -0x8(%rbp), %rax
imulq $0x1c, -0x28(%rbp), %rcx
addq %rcx, %rax
movl 0x10(%rax), %eax
movl %eax, -0x84(%rbp)
jmp 0x28faf5
movq -0x8(%rbp), %rax
imulq $0x1c, -0x30(%rbp), %rcx
addq %rcx, %rax
movl 0x10(%rax), %eax
movl %eax, -0x84(%rbp)
movl -0x80(%rbp), %eax
movl -0x84(%rbp), %ecx
subl %ecx, %eax
movl %eax, -0x88(%rbp)
jmp 0x28fb12
xorl %eax, %eax
movl %eax, -0x88(%rbp)
jmp 0x28fb12
movl -0x88(%rbp), %eax
movl %eax, %eax
movq %rax, -0x48(%rbp)
cvtsi2ssq -0x40(%rbp), %xmm0
movq -0x8(%rbp), %rax
movq -0x30(%rbp), %rcx
leaq (%rcx,%rcx,8), %rdx
leaq (%rdx,%rdx,2), %rdx
addq %rcx, %rdx
movl 0x4(%rax,%rdx), %ecx
movl 0x8(%rax,%rdx), %eax
subl %ecx, %eax
cvtsi2ss %rax, %xmm1
mulss -0x4c(%rbp), %xmm1
ucomiss %xmm1, %xmm0
jb 0x28fbec
cvtsi2ssq -0x40(%rbp), %xmm0
movq -0x8(%rbp), %rax
movq -0x28(%rbp), %rcx
leaq (%rcx,%rcx,8), %rdx
leaq (%rdx,%rdx,2), %rdx
addq %rcx, %rdx
movl 0x4(%rax,%rdx), %ecx
movl 0x8(%rax,%rdx), %eax
subl %ecx, %eax
cvtsi2ss %rax, %xmm1
mulss -0x4c(%rbp), %xmm1
ucomiss %xmm1, %xmm0
jb 0x28fbec
cvtsi2ssq -0x48(%rbp), %xmm0
movq -0x8(%rbp), %rax
movq -0x30(%rbp), %rcx
leaq (%rcx,%rcx,8), %rdx
leaq (%rdx,%rdx,2), %rdx
addq %rcx, %rdx
movl 0x10(%rax,%rdx), %ecx
movl 0x14(%rax,%rdx), %eax
subl %ecx, %eax
cvtsi2ss %rax, %xmm1
mulss -0x4c(%rbp), %xmm1
ucomiss %xmm1, %xmm0
jb 0x28fbec
cvtsi2ssq -0x48(%rbp), %xmm0
movq -0x8(%rbp), %rax
movq -0x28(%rbp), %rcx
leaq (%rcx,%rcx,8), %rdx
leaq (%rdx,%rdx,2), %rdx
addq %rcx, %rdx
movl 0x10(%rax,%rdx), %ecx
movl 0x14(%rax,%rdx), %eax
subl %ecx, %eax
cvtsi2ss %rax, %xmm1
mulss -0x4c(%rbp), %xmm1
ucomiss %xmm1, %xmm0
jb 0x28fbec
jmp 0x28fc01
jmp 0x28fbee
jmp 0x28fbf0
movq -0x30(%rbp), %rax
addq $-0x1, %rax
movq %rax, -0x30(%rbp)
jmp 0x28f7c0
cmpq $0x0, -0x30(%rbp)
jl 0x28fc62
movq -0x8(%rbp), %rax
imulq $0x1c, -0x30(%rbp), %rcx
addq %rcx, %rax
movl 0xc(%rax), %eax
movq -0x8(%rbp), %rcx
imulq $0x1c, -0x28(%rbp), %rdx
addq %rdx, %rcx
cmpl 0xc(%rcx), %eax
jne 0x28fc62
movq -0x8(%rbp), %rax
imulq $0x1c, -0x28(%rbp), %rcx
addq %rcx, %rax
movl 0x18(%rax), %eax
shrl $0x1e, %eax
andl $0x1, %eax
cmpl $0x0, %eax
je 0x28fc60
movq -0x8(%rbp), %rax
imulq $0x1c, -0x30(%rbp), %rcx
addq %rcx, %rax
movl 0x18(%rax), %ecx
andl $0xbfffffff, %ecx       # imm = 0xBFFFFFFF
orl $0x40000000, %ecx       # imm = 0x40000000
movl %ecx, 0x18(%rax)
jmp 0x28fca4
movq -0x8(%rbp), %rcx
imulq $0x1c, -0x28(%rbp), %rax
addq %rax, %rcx
movq -0x8(%rbp), %rax
movq -0x38(%rbp), %rdx
movq %rdx, %rsi
addq $0x1, %rsi
movq %rsi, -0x38(%rbp)
imulq $0x1c, %rdx, %rdx
addq %rdx, %rax
movq (%rcx), %rdx
movq %rdx, (%rax)
movq 0x8(%rcx), %rdx
movq %rdx, 0x8(%rax)
movq 0x10(%rcx), %rdx
movq %rdx, 0x10(%rax)
movl 0x18(%rcx), %ecx
movl %ecx, 0x18(%rax)
movq -0x28(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x28(%rbp)
jmp 0x28f7a6
movq -0x18(%rbp), %rax
movq %rax, -0x20(%rbp)
jmp 0x28fcbf
movq -0x18(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x18(%rbp)
jmp 0x28f762
movq -0x38(%rbp), %rax
addq $0x8, %rsp
popq %rbp
retq
nopw (%rax,%rax)