// File: Proudc[P]CTSS/src/ContinuousQuery/Frechet.cpp
// Function: (anonymous namespace)::dist(std::vector<std::vector<double, std::allocator<double>>, std::allocator<std::vector<double, std::allocator<double>>>>&, int, int, Point*, Point*)
double dist(std::vector<std::vector<double>>& ca, int i, int j, Point* p, Point* q)
{
	if (ca[i][j] > -1)
	{
		return ca[i][j];
	}
	else if (i == 0 && j == 0)
	{
		ca[i][j] = euc(p[0], q[0]);
	}
	else if (i > 0 && j == 0)
	{
		ca[i][j] = max(dist(ca, i - 1, 0, p, q), euc(p[i], q[0]));
	}
	else if (i == 0 && j > 0)
	{
		ca[i][j] = max(dist(ca, 0, j - 1, p, q), euc(p[0], q[j]));
	}
	else if (i > 0 && j > 0)
	{
		ca[i][j] = max(
			min(
				dist(ca, i - 1, j, p, q),
				dist(ca, i - 1, j - 1, p, q),
				dist(ca, i, j - 1, p, q)),
			euc(p[i], q[j]));
	}
	else
	{
		ca[i][j] = DBL_MAX;
	}
	return ca[i][j];
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xf0, %rsp
movq %rdi, -0x10(%rbp)
movl %esi, -0x14(%rbp)
movl %edx, -0x18(%rbp)
movq %rcx, -0x20(%rbp)
movq %r8, -0x28(%rbp)
movq -0x10(%rbp), %rdi
movslq -0x14(%rbp), %rsi
callq 0xd8a0
movq %rax, %rdi
movslq -0x18(%rbp), %rsi
callq 0xd8c0
movsd (%rax), %xmm0
movsd 0xd26e(%rip), %xmm1     # 0x199c0
ucomisd %xmm1, %xmm0
jbe 0xc77f
movq -0x10(%rbp), %rdi
movslq -0x14(%rbp), %rsi
callq 0xd8a0
movq %rax, %rdi
movslq -0x18(%rbp), %rsi
callq 0xd8c0
movsd (%rax), %xmm0
movsd %xmm0, -0x8(%rbp)
jmp 0xcb14
cmpl $0x0, -0x14(%rbp)
jne 0xc7fc
cmpl $0x0, -0x18(%rbp)
jne 0xc7fc
movq -0x20(%rbp), %rax
movq (%rax), %rcx
movq %rcx, -0x38(%rbp)
movq 0x8(%rax), %rax
movq %rax, -0x30(%rbp)
movq -0x28(%rbp), %rax
movq (%rax), %rcx
movq %rcx, -0x48(%rbp)
movq 0x8(%rax), %rax
movq %rax, -0x40(%rbp)
movsd -0x38(%rbp), %xmm0
movsd -0x30(%rbp), %xmm1
movsd -0x48(%rbp), %xmm2
movsd -0x40(%rbp), %xmm3
callq 0xd2f0
movsd %xmm0, -0xb0(%rbp)
movq -0x10(%rbp), %rdi
movslq -0x14(%rbp), %rsi
callq 0xd8a0
movq %rax, %rdi
movslq -0x18(%rbp), %rsi
callq 0xd8c0
movsd -0xb0(%rbp), %xmm0
movsd %xmm0, (%rax)
jmp 0xcaf0
cmpl $0x0, -0x14(%rbp)
jle 0xc8bd
cmpl $0x0, -0x18(%rbp)
jne 0xc8bd
movq -0x10(%rbp), %rdi
movl -0x14(%rbp), %esi
subl $0x1, %esi
movq -0x20(%rbp), %rcx
movq -0x28(%rbp), %r8
xorl %edx, %edx
callq 0xc710
movsd %xmm0, -0xc0(%rbp)
movq -0x20(%rbp), %rax
movslq -0x14(%rbp), %rcx
shlq $0x4, %rcx
addq %rcx, %rax
movq (%rax), %rcx
movq %rcx, -0x58(%rbp)
movq 0x8(%rax), %rax
movq %rax, -0x50(%rbp)
movq -0x28(%rbp), %rax
movq (%rax), %rcx
movq %rcx, -0x68(%rbp)
movq 0x8(%rax), %rax
movq %rax, -0x60(%rbp)
movsd -0x58(%rbp), %xmm0
movsd -0x50(%rbp), %xmm1
movsd -0x68(%rbp), %xmm2
movsd -0x60(%rbp), %xmm3
callq 0xd2f0
movaps %xmm0, %xmm1
movsd -0xc0(%rbp), %xmm0
callq 0xd360
movsd %xmm0, -0xb8(%rbp)
movq -0x10(%rbp), %rdi
movslq -0x14(%rbp), %rsi
callq 0xd8a0
movq %rax, %rdi
movslq -0x18(%rbp), %rsi
callq 0xd8c0
movsd -0xb8(%rbp), %xmm0
movsd %xmm0, (%rax)
jmp 0xcaee
cmpl $0x0, -0x14(%rbp)
jne 0xc984
cmpl $0x0, -0x18(%rbp)
jle 0xc984
movq -0x10(%rbp), %rdi
movl -0x18(%rbp), %edx
subl $0x1, %edx
movq -0x20(%rbp), %rcx
movq -0x28(%rbp), %r8
xorl %esi, %esi
callq 0xc710
movsd %xmm0, -0xd0(%rbp)
movq -0x20(%rbp), %rax
movq (%rax), %rcx
movq %rcx, -0x78(%rbp)
movq 0x8(%rax), %rax
movq %rax, -0x70(%rbp)
movq -0x28(%rbp), %rax
movslq -0x18(%rbp), %rcx
shlq $0x4, %rcx
addq %rcx, %rax
movq (%rax), %rcx
movq %rcx, -0x88(%rbp)
movq 0x8(%rax), %rax
movq %rax, -0x80(%rbp)
movsd -0x78(%rbp), %xmm0
movsd -0x70(%rbp), %xmm1
movsd -0x88(%rbp), %xmm2
movsd -0x80(%rbp), %xmm3
callq 0xd2f0
movaps %xmm0, %xmm1
movsd -0xd0(%rbp), %xmm0
callq 0xd360
movsd %xmm0, -0xc8(%rbp)
movq -0x10(%rbp), %rdi
movslq -0x14(%rbp), %rsi
callq 0xd8a0
movq %rax, %rdi
movslq -0x18(%rbp), %rsi
callq 0xd8c0
movsd -0xc8(%rbp), %xmm0
movsd %xmm0, (%rax)
jmp 0xcaec
cmpl $0x0, -0x14(%rbp)
jle 0xcac5
cmpl $0x0, -0x18(%rbp)
jle 0xcac5
movq -0x10(%rbp), %rdi
movl -0x14(%rbp), %esi
subl $0x1, %esi
movl -0x18(%rbp), %edx
movq -0x20(%rbp), %rcx
movq -0x28(%rbp), %r8
callq 0xc710
movsd %xmm0, -0xe8(%rbp)
movq -0x10(%rbp), %rdi
movl -0x14(%rbp), %esi
subl $0x1, %esi
movl -0x18(%rbp), %edx
subl $0x1, %edx
movq -0x20(%rbp), %rcx
movq -0x28(%rbp), %r8
callq 0xc710
movsd %xmm0, -0xf0(%rbp)
movq -0x10(%rbp), %rdi
movl -0x14(%rbp), %esi
movl -0x18(%rbp), %edx
subl $0x1, %edx
movq -0x20(%rbp), %rcx
movq -0x28(%rbp), %r8
callq 0xc710
movsd -0xf0(%rbp), %xmm1
movaps %xmm0, %xmm2
movsd -0xe8(%rbp), %xmm0
callq 0xd3a0
movsd %xmm0, -0xe0(%rbp)
movq -0x20(%rbp), %rax
movslq -0x14(%rbp), %rcx
shlq $0x4, %rcx
addq %rcx, %rax
movq (%rax), %rcx
movq %rcx, -0x98(%rbp)
movq 0x8(%rax), %rax
movq %rax, -0x90(%rbp)
movq -0x28(%rbp), %rax
movslq -0x18(%rbp), %rcx
shlq $0x4, %rcx
addq %rcx, %rax
movq (%rax), %rcx
movq %rcx, -0xa8(%rbp)
movq 0x8(%rax), %rax
movq %rax, -0xa0(%rbp)
movsd -0x98(%rbp), %xmm0
movsd -0x90(%rbp), %xmm1
movsd -0xa8(%rbp), %xmm2
movsd -0xa0(%rbp), %xmm3
callq 0xd2f0
movaps %xmm0, %xmm1
movsd -0xe0(%rbp), %xmm0
callq 0xd360
movsd %xmm0, -0xd8(%rbp)
movq -0x10(%rbp), %rdi
movslq -0x14(%rbp), %rsi
callq 0xd8a0
movq %rax, %rdi
movslq -0x18(%rbp), %rsi
callq 0xd8c0
movsd -0xd8(%rbp), %xmm0
movsd %xmm0, (%rax)
jmp 0xcaea
movq -0x10(%rbp), %rdi
movslq -0x14(%rbp), %rsi
callq 0xd8a0
movq %rax, %rdi
movslq -0x18(%rbp), %rsi
callq 0xd8c0
movsd 0xc642(%rip), %xmm0     # 0x19128
movsd %xmm0, (%rax)
jmp 0xcaec
jmp 0xcaee
jmp 0xcaf0
jmp 0xcaf2
movq -0x10(%rbp), %rdi
movslq -0x14(%rbp), %rsi
callq 0xd8a0
movq %rax, %rdi
movslq -0x18(%rbp), %rsi
callq 0xd8c0
movsd (%rax), %xmm0
movsd %xmm0, -0x8(%rbp)
movsd -0x8(%rbp), %xmm0
addq $0xf0, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)