// File: chhylp123[P]hifiasm/inter.cpp
// Function: rescue_adject_ovlp(asg_t*, unsigned int, kv_u_trans_t*, kv_ul_ov_t*, st_mt_t*)
uint32_t rescue_adject_ovlp(asg_t *g, uint32_t id, kv_u_trans_t *ta, kv_ul_ov_t *out, st_mt_t *buf)
{
	u_trans_t *a, *b; ul_ov_t rr; uint64_t a_n, b_n, k, l, i, z, m; 
	a = u_trans_a((*ta), id); a_n = u_trans_n((*ta), id);
	for (i = out->n = buf->n = 0; i < a_n; i++) {
		b = u_trans_a((*ta), a[i].tn); b_n = u_trans_n((*ta), a[i].tn);
		z = a[i].tn; z <<= 32; kv_push(uint64_t, *buf, z);
		for (k = 0; k < b_n; k++) {
			if(b[k].tn == id) continue;
			if(!tranfor_ovlp(&(a[i]), &(b[k]), g, &rr, 1)) continue;
			z = rr.tn; z <<= 32; z |= out->n; z |= ((uint64_t)0x80000000);
			rr.tn <<= 1; rr.tn |= rr.rev; kv_push(ul_ov_t, *out, rr); 
		}
	}
	if(out->n == 0) return 1;

	radix_sort_gfa64(buf->a, buf->a + buf->n); 
	for (k = 1, l = m = 0; k <= buf->n; k++) {
		if(k == buf->n || (buf->a[l]>>32)!=(buf->a[k]>>32)) {
			if((k - l > 1) && (!(buf->a[l]&((uint64_t)0x80000000)))) {///overlap within bck
				for (z = l; z < k; z++) {
					if(buf->a[z]&((uint64_t)0x80000000)) {
						out->a[(uint32_t)(buf->a[z]-((uint64_t)0x80000000))].tn = (uint32_t)-1;
						m++;
					}
				}
			}
			l = k;
		}
	}

	if(m) {
		for (k = m = 0; k < out->n; k++) {
			if(out->a[k].tn == (uint32_t)-1) continue;
			out->a[m++] = out->a[k];
		}
		out->n = m;
	}
	if(out->n == 0) return 1;

	radix_sort_ul_ov_srt_tn(out->a, out->a+out->n);
	for (k = 0; k < out->n; k++) out->a[k].tn >>= 1;

	return 0;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xb0, %rsp
movq %rdi, -0x10(%rbp)
movl %esi, -0x14(%rbp)
movq %rdx, -0x20(%rbp)
movq %rcx, -0x28(%rbp)
movq %r8, -0x30(%rbp)
movq -0x20(%rbp), %rax
movq 0x10(%rax), %rax
movq -0x20(%rbp), %rcx
movq 0x28(%rcx), %rcx
movl -0x14(%rbp), %edx
movq (%rcx,%rdx,8), %rcx
shrq $0x20, %rcx
imulq $0x30, %rcx, %rcx
addq %rcx, %rax
movq %rax, -0x38(%rbp)
movq -0x20(%rbp), %rax
movq 0x28(%rax), %rax
movl -0x14(%rbp), %ecx
movq (%rax,%rcx,8), %rax
movl %eax, %eax
movq %rax, -0x68(%rbp)
movq -0x30(%rbp), %rax
movq $0x0, (%rax)
movq -0x28(%rbp), %rax
movq $0x0, 0x8(%rax)
movq $0x0, -0x88(%rbp)
movq -0x88(%rbp), %rax
cmpq -0x68(%rbp), %rax
jae 0x2c2721
movq -0x20(%rbp), %rax
movq 0x10(%rax), %rax
movq -0x20(%rbp), %rcx
movq 0x28(%rcx), %rcx
movq -0x38(%rbp), %rdx
imulq $0x30, -0x88(%rbp), %rsi
addq %rsi, %rdx
movl 0x14(%rdx), %edx
movq (%rcx,%rdx,8), %rcx
shrq $0x20, %rcx
imulq $0x30, %rcx, %rcx
addq %rcx, %rax
movq %rax, -0x40(%rbp)
movq -0x20(%rbp), %rax
movq 0x28(%rax), %rax
movq -0x38(%rbp), %rcx
imulq $0x30, -0x88(%rbp), %rdx
addq %rdx, %rcx
movl 0x14(%rcx), %ecx
movq (%rax,%rcx,8), %rax
movl %eax, %eax
movq %rax, -0x70(%rbp)
movq -0x38(%rbp), %rax
imulq $0x30, -0x88(%rbp), %rcx
addq %rcx, %rax
movl 0x14(%rax), %eax
movq %rax, -0x90(%rbp)
movq -0x90(%rbp), %rax
shlq $0x20, %rax
movq %rax, -0x90(%rbp)
movq -0x30(%rbp), %rax
movq (%rax), %rax
movq -0x30(%rbp), %rcx
cmpq 0x8(%rcx), %rax
jne 0x2c2561
movq -0x30(%rbp), %rax
cmpq $0x0, 0x8(%rax)
je 0x2c2520
movq -0x30(%rbp), %rax
movq 0x8(%rax), %rax
shlq %rax
movq %rax, -0xa0(%rbp)
jmp 0x2c252e
movl $0x2, %eax
movq %rax, -0xa0(%rbp)
jmp 0x2c252e
movq -0xa0(%rbp), %rcx
movq -0x30(%rbp), %rax
movq %rcx, 0x8(%rax)
movq -0x30(%rbp), %rax
movq 0x10(%rax), %rdi
movq -0x30(%rbp), %rax
movq 0x8(%rax), %rsi
shlq $0x3, %rsi
callq 0x2360
movq %rax, %rcx
movq -0x30(%rbp), %rax
movq %rcx, 0x10(%rax)
movq -0x90(%rbp), %rdx
movq -0x30(%rbp), %rax
movq 0x10(%rax), %rax
movq -0x30(%rbp), %rsi
movq (%rsi), %rcx
movq %rcx, %rdi
addq $0x1, %rdi
movq %rdi, (%rsi)
movq %rdx, (%rax,%rcx,8)
movq $0x0, -0x78(%rbp)
movq -0x78(%rbp), %rax
cmpq -0x70(%rbp), %rax
jae 0x2c2708
movq -0x40(%rbp), %rax
imulq $0x30, -0x78(%rbp), %rcx
addq %rcx, %rax
movl 0x14(%rax), %eax
cmpl -0x14(%rbp), %eax
jne 0x2c25b4
jmp 0x2c26f7
movq -0x38(%rbp), %rdi
imulq $0x30, -0x88(%rbp), %rax
addq %rax, %rdi
movq -0x40(%rbp), %rsi
imulq $0x30, -0x78(%rbp), %rax
addq %rax, %rsi
movq -0x10(%rbp), %rdx
leaq -0x5c(%rbp), %rcx
movl $0x1, %r8d
callq 0x2c20b0
cmpl $0x0, %eax
jne 0x2c25ec
jmp 0x2c26f7
movl -0x50(%rbp), %eax
movq %rax, -0x90(%rbp)
movq -0x90(%rbp), %rax
shlq $0x20, %rax
movq %rax, -0x90(%rbp)
movq -0x28(%rbp), %rax
movq 0x8(%rax), %rax
orq -0x90(%rbp), %rax
movq %rax, -0x90(%rbp)
movabsq $0x80000000, %rax       # imm = 0x80000000
orq -0x90(%rbp), %rax
movq %rax, -0x90(%rbp)
movl -0x50(%rbp), %eax
shll %eax
movl %eax, -0x50(%rbp)
movl -0x44(%rbp), %eax
shrl $0x1f, %eax
orl -0x50(%rbp), %eax
movl %eax, -0x50(%rbp)
movq -0x28(%rbp), %rax
movq 0x8(%rax), %rax
movq -0x28(%rbp), %rcx
cmpq 0x10(%rcx), %rax
jne 0x2c26b7
movq -0x28(%rbp), %rax
cmpq $0x0, 0x10(%rax)
je 0x2c267b
movq -0x28(%rbp), %rax
movq 0x10(%rax), %rax
shlq %rax
movq %rax, -0xa8(%rbp)
jmp 0x2c2689
movl $0x2, %eax
movq %rax, -0xa8(%rbp)
jmp 0x2c2689
movq -0xa8(%rbp), %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0x10(%rax)
movq -0x28(%rbp), %rax
movq (%rax), %rdi
movq -0x28(%rbp), %rax
imulq $0x1c, 0x10(%rax), %rsi
callq 0x2360
movq %rax, %rcx
movq -0x28(%rbp), %rax
movq %rcx, (%rax)
movq -0x28(%rbp), %rax
movq (%rax), %rax
movq -0x28(%rbp), %rdx
movq 0x8(%rdx), %rcx
movq %rcx, %rsi
addq $0x1, %rsi
movq %rsi, 0x8(%rdx)
imulq $0x1c, %rcx, %rcx
addq %rcx, %rax
movq -0x5c(%rbp), %rcx
movq %rcx, (%rax)
movq -0x54(%rbp), %rcx
movq %rcx, 0x8(%rax)
movq -0x4c(%rbp), %rcx
movq %rcx, 0x10(%rax)
movl -0x44(%rbp), %ecx
movl %ecx, 0x18(%rax)
jmp 0x2c26f7
movq -0x78(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x78(%rbp)
jmp 0x2c258d
jmp 0x2c270a
movq -0x88(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x88(%rbp)
jmp 0x2c245b
movq -0x28(%rbp), %rax
cmpq $0x0, 0x8(%rax)
jne 0x2c2738
movl $0x1, -0x4(%rbp)
jmp 0x2c29e2
movq -0x30(%rbp), %rax
movq 0x10(%rax), %rdi
movq -0x30(%rbp), %rax
movq 0x10(%rax), %rsi
movq -0x30(%rbp), %rax
movq (%rax), %rax
shlq $0x3, %rax
addq %rax, %rsi
callq 0x27a9b0
movq $0x1, -0x78(%rbp)
movq $0x0, -0x98(%rbp)
movq $0x0, -0x80(%rbp)
movq -0x78(%rbp), %rax
movq -0x30(%rbp), %rcx
cmpq (%rcx), %rax
ja 0x2c28b9
movq -0x78(%rbp), %rax
movq -0x30(%rbp), %rcx
cmpq (%rcx), %rax
je 0x2c27c5
movq -0x30(%rbp), %rax
movq 0x10(%rax), %rax
movq -0x80(%rbp), %rcx
movq (%rax,%rcx,8), %rax
shrq $0x20, %rax
movq -0x30(%rbp), %rcx
movq 0x10(%rcx), %rcx
movq -0x78(%rbp), %rdx
movq (%rcx,%rdx,8), %rcx
shrq $0x20, %rcx
cmpq %rcx, %rax
je 0x2c28a6
movq -0x78(%rbp), %rax
subq -0x80(%rbp), %rax
cmpq $0x1, %rax
jbe 0x2c289e
movq -0x30(%rbp), %rax
movq 0x10(%rax), %rcx
movq -0x80(%rbp), %rdx
movabsq $0x80000000, %rax       # imm = 0x80000000
andq (%rcx,%rdx,8), %rax
cmpq $0x0, %rax
jne 0x2c289e
movq -0x80(%rbp), %rax
movq %rax, -0x90(%rbp)
movq -0x90(%rbp), %rax
cmpq -0x78(%rbp), %rax
jae 0x2c289c
movq -0x30(%rbp), %rax
movq 0x10(%rax), %rcx
movq -0x90(%rbp), %rdx
movabsq $0x80000000, %rax       # imm = 0x80000000
andq (%rcx,%rdx,8), %rax
cmpq $0x0, %rax
je 0x2c2883
movq -0x28(%rbp), %rax
movq (%rax), %rax
movq -0x30(%rbp), %rcx
movq 0x10(%rcx), %rcx
movq -0x90(%rbp), %rdx
movq (%rcx,%rdx,8), %rcx
movabsq $0x80000000, %rdx       # imm = 0x80000000
subq %rdx, %rcx
movl %ecx, %ecx
imulq $0x1c, %rcx, %rcx
addq %rcx, %rax
movl $0xffffffff, 0xc(%rax)  # imm = 0xFFFFFFFF
movq -0x98(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x98(%rbp)
jmp 0x2c2885
movq -0x90(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x90(%rbp)
jmp 0x2c2806
jmp 0x2c289e
movq -0x78(%rbp), %rax
movq %rax, -0x80(%rbp)
jmp 0x2c28a8
movq -0x78(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x78(%rbp)
jmp 0x2c2776
cmpq $0x0, -0x98(%rbp)
je 0x2c296d
movq $0x0, -0x98(%rbp)
movq $0x0, -0x78(%rbp)
movq -0x78(%rbp), %rax
movq -0x28(%rbp), %rcx
cmpq 0x8(%rcx), %rax
jae 0x2c295e
movq -0x28(%rbp), %rax
movq (%rax), %rax
imulq $0x1c, -0x78(%rbp), %rcx
addq %rcx, %rax
cmpl $-0x1, 0xc(%rax)
jne 0x2c28ff
jmp 0x2c294d
movq -0x28(%rbp), %rax
movq (%rax), %rcx
imulq $0x1c, -0x78(%rbp), %rax
addq %rax, %rcx
movq -0x28(%rbp), %rax
movq (%rax), %rax
movq -0x98(%rbp), %rdx
movq %rdx, %rsi
addq $0x1, %rsi
movq %rsi, -0x98(%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 -0x78(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x78(%rbp)
jmp 0x2c28da
movq -0x98(%rbp), %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0x8(%rax)
movq -0x28(%rbp), %rax
cmpq $0x0, 0x8(%rax)
jne 0x2c2981
movl $0x1, -0x4(%rbp)
jmp 0x2c29e2
movq -0x28(%rbp), %rax
movq (%rax), %rdi
movq -0x28(%rbp), %rax
movq (%rax), %rsi
movq -0x28(%rbp), %rax
imulq $0x1c, 0x8(%rax), %rax
addq %rax, %rsi
callq 0x27bdd0
movq $0x0, -0x78(%rbp)
movq -0x78(%rbp), %rax
movq -0x28(%rbp), %rcx
cmpq 0x8(%rcx), %rax
jae 0x2c29db
movq -0x28(%rbp), %rax
movq (%rax), %rax
imulq $0x1c, -0x78(%rbp), %rcx
addq %rcx, %rax
movl 0xc(%rax), %ecx
shrl %ecx
movl %ecx, 0xc(%rax)
movq -0x78(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x78(%rbp)
jmp 0x2c29a8
movl $0x0, -0x4(%rbp)
movl -0x4(%rbp), %eax
addq $0xb0, %rsp
popq %rbp
retq
nop