// File: /workspace/github_c_makefile_star2_O0/LemonBoy[P]autobahn/xdiff/xemit.c
// Function: xdl_get_hunk
xdchange_t *xdl_get_hunk(xdchange_t **xscr, xdemitconf_t const *xecfg)
{
	xdchange_t *xch, *xchp, *lxch;
	long max_common = 2 * xecfg->ctxlen + xecfg->interhunkctxlen;
	long max_ignorable = xecfg->ctxlen;
	unsigned long ignored = 0; /* number of ignored blank lines */

	/* remove ignorable changes that are too far before other changes */
	for (xchp = *xscr; xchp && xchp->ignore; xchp = xchp->next) {
		xch = xchp->next;

		if (xch == NULL ||
		    xch->i1 - (xchp->i1 + xchp->chg1) >= max_ignorable)
			*xscr = xch;
	}

	if (*xscr == NULL)
		return NULL;

	lxch = *xscr;

	for (xchp = *xscr, xch = xchp->next; xch; xchp = xch, xch = xch->next) {
		long distance = xch->i1 - (xchp->i1 + xchp->chg1);
		if (distance > max_common)
			break;

		if (distance < max_ignorable && (!xch->ignore || lxch == xchp)) {
			lxch = xch;
			ignored = 0;
		} else if (distance < max_ignorable && xch->ignore) {
			ignored += xch->chg2;
		} else if (lxch != xchp &&
			   xch->i1 + ignored - (lxch->i1 + lxch->chg1) > max_common) {
			break;
		} else if (!xch->ignore) {
			lxch = xch;
			ignored = 0;
		} else {
			ignored += xch->chg2;
		}
	}

	return lxch;
}

// Assembly:
movq %rdi, -0x10(%rsp)
movq %rsi, -0x18(%rsp)
movq -0x18(%rsp), %rax
movq (%rax), %rax
shlq %rax
movq -0x18(%rsp), %rcx
addq 0x8(%rcx), %rax
movq %rax, -0x38(%rsp)
movq -0x18(%rsp), %rax
movq (%rax), %rax
movq %rax, -0x40(%rsp)
movq $0x0, -0x48(%rsp)
movq -0x10(%rsp), %rax
movq (%rax), %rax
movq %rax, -0x28(%rsp)
xorl %eax, %eax
cmpq $0x0, -0x28(%rsp)
movb %al, -0x51(%rsp)
je 0x46d4
movq -0x28(%rsp), %rax
cmpl $0x0, 0x28(%rax)
setne %al
movb %al, -0x51(%rsp)
movb -0x51(%rsp), %al
testb $0x1, %al
jne 0x46de
jmp 0x4736
movq -0x28(%rsp), %rax
movq (%rax), %rax
movq %rax, -0x20(%rsp)
cmpq $0x0, -0x20(%rsp)
je 0x4718
movq -0x20(%rsp), %rax
movq 0x8(%rax), %rax
movq -0x28(%rsp), %rcx
movq 0x8(%rcx), %rcx
movq -0x28(%rsp), %rdx
addq 0x18(%rdx), %rcx
subq %rcx, %rax
cmpq -0x40(%rsp), %rax
jl 0x4725
movq -0x20(%rsp), %rcx
movq -0x10(%rsp), %rax
movq %rcx, (%rax)
jmp 0x4727
movq -0x28(%rsp), %rax
movq (%rax), %rax
movq %rax, -0x28(%rsp)
jmp 0x46b6
movq -0x10(%rsp), %rax
cmpq $0x0, (%rax)
jne 0x474f
movq $0x0, -0x8(%rsp)
jmp 0x48b6
movq -0x10(%rsp), %rax
movq (%rax), %rax
movq %rax, -0x30(%rsp)
movq -0x10(%rsp), %rax
movq (%rax), %rax
movq %rax, -0x28(%rsp)
movq -0x28(%rsp), %rax
movq (%rax), %rax
movq %rax, -0x20(%rsp)
cmpq $0x0, -0x20(%rsp)
je 0x48ac
movq -0x20(%rsp), %rax
movq 0x8(%rax), %rax
movq -0x28(%rsp), %rcx
movq 0x8(%rcx), %rcx
movq -0x28(%rsp), %rdx
addq 0x18(%rdx), %rcx
subq %rcx, %rax
movq %rax, -0x50(%rsp)
movq -0x50(%rsp), %rax
cmpq -0x38(%rsp), %rax
jle 0x47b6
jmp 0x48ac
movq -0x50(%rsp), %rax
cmpq -0x40(%rsp), %rax
jge 0x47f1
movq -0x20(%rsp), %rax
cmpl $0x0, 0x28(%rax)
je 0x47d9
movq -0x30(%rsp), %rax
cmpq -0x28(%rsp), %rax
jne 0x47f1
movq -0x20(%rsp), %rax
movq %rax, -0x30(%rsp)
movq $0x0, -0x48(%rsp)
jmp 0x488e
movq -0x50(%rsp), %rax
cmpq -0x40(%rsp), %rax
jge 0x481d
movq -0x20(%rsp), %rax
cmpl $0x0, 0x28(%rax)
je 0x481d
movq -0x20(%rsp), %rax
movq 0x20(%rax), %rax
addq -0x48(%rsp), %rax
movq %rax, -0x48(%rsp)
jmp 0x488c
movq -0x30(%rsp), %rax
cmpq -0x28(%rsp), %rax
je 0x4855
movq -0x20(%rsp), %rax
movq 0x8(%rax), %rax
addq -0x48(%rsp), %rax
movq -0x30(%rsp), %rcx
movq 0x8(%rcx), %rcx
movq -0x30(%rsp), %rdx
addq 0x18(%rdx), %rcx
subq %rcx, %rax
cmpq -0x38(%rsp), %rax
jbe 0x4855
jmp 0x48ac
movq -0x20(%rsp), %rax
cmpl $0x0, 0x28(%rax)
jne 0x4875
movq -0x20(%rsp), %rax
movq %rax, -0x30(%rsp)
movq $0x0, -0x48(%rsp)
jmp 0x4888
movq -0x20(%rsp), %rax
movq 0x20(%rax), %rax
addq -0x48(%rsp), %rax
movq %rax, -0x48(%rsp)
jmp 0x488a
jmp 0x488c
jmp 0x488e
jmp 0x4890
movq -0x20(%rsp), %rax
movq %rax, -0x28(%rsp)
movq -0x20(%rsp), %rax
movq (%rax), %rax
movq %rax, -0x20(%rsp)
jmp 0x4776
movq -0x30(%rsp), %rax
movq %rax, -0x8(%rsp)
movq -0x8(%rsp), %rax
retq
nopl (%rax)