// File: /workspace/github_cpp_makefile_star2_O3/Laakeri[P]Triangulator/src/PMC.cpp
// Function: PMC::ONE_MORE_VERTEX(Graph const&, std::vector<std::vector<int, std::allocator<int>>, std::allocator<std::vector<int, std::allocator<int>>>> const&, std::vector<std::vector<int, std::allocator<int>>, std::allocator<std::vector<int, std::allocator<int>>>> const&, std::vector<std::vector<int, std::allocator<int>>, std::allocator<std::vector<int, std::allocator<int>>>> const&, int, PMC::valueT, int)
vector<vector<int> > ONE_MORE_VERTEX(const Graph& G, const vector<vector<int> >& oldPMCs, const vector<vector<int> >& oldMinSeps, const vector<vector<int> >& minSeps, int a, valueT upperBound, int PROBLEM) {
	vector<vector<int> > PMCs;
	for (const auto& pmc : oldPMCs) {
		if (!hasFullComponent(G, pmc)) {
			PMCs.push_back(pmc);
		}
		else {
			if (extend2(G, pmc, a)) {
				PMCs.push_back(pmc);
				PMCs.back().push_back(a);
				if (!canFill(G, PMCs.back(), upperBound, PROBLEM)) {
					PMCs.pop_back();
				}
			}
		}
	}
	int i2 = 0;
	set<vector<int> > tried;
	for (const auto& minSep : minSeps) {
		if (find(minSep.begin(), minSep.end(), a) != minSep.end()) continue;
		if (!canFill(G, minSep, upperBound, PROBLEM)) continue;
		if (extend2(G, minSep, a)) {
			PMCs.push_back(minSep);
			PMCs.back().push_back(a);
			if (hasFullComponent(G, PMCs.back())) {
				PMCs.pop_back();
			}
			else if (!canFill(G, PMCs.back(), upperBound, PROBLEM)) {
				PMCs.pop_back();
			}
		}
		while (i2 < (int)oldMinSeps.size() && oldMinSeps[i2] < minSep) i2++;
		if (i2 == (int)oldMinSeps.size() || oldMinSeps[i2] != minSep) {
			vector<vector<int> > components = getComponents(G, minSep);
			assert(components.size() >= 2);
			for (const auto& T : minSeps) {
				for (const auto& C : components) {
					vector<int> npmc = minSep;
					bool fo = false;
					for (int x : T) {
						if (binary_search(C.begin(), C.end(), x)) {
							if (!binary_search(minSep.begin(), minSep.end(), x)) {
								npmc.push_back(x);
								fo = true;
							}
						}
					}
					if (fo) {
						if (tried.count(npmc)) continue;
						tried.insert(npmc);
						if (PROBLEM == PROBLEM_HYPER) {
							if (isPMCbrute(G, npmc) && canFill(G, npmc, upperBound, PROBLEM)) {
								PMCs.push_back(npmc);
							}
						}
						else {
							if (canFill(G, npmc, upperBound, PROBLEM) && isPMCbrute(G, npmc)) {
								PMCs.push_back(npmc);
							}
						}
					}
				}
			}
		}
	}
	return PMCs;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x188, %rsp            # imm = 0x188
movq %r8, 0xe0(%rsp)
movq %rcx, 0x100(%rsp)
movq %rsi, 0x70(%rsp)
movl %r9d, 0x64(%rsp)
xorps %xmm0, %xmm0
movups %xmm0, (%rdi)
movq %rdi, 0x68(%rsp)
movq $0x0, 0x10(%rdi)
movq (%rdx), %rbx
movq 0x8(%rdx), %r12
cmpq %r12, %rbx
je 0x1c87b
leaq 0x150(%rsp), %r15
leaq 0x120(%rsp), %r13
leaq 0xb0(%rsp), %r14
movq 0x70(%rsp), %rbp
movq %rbp, %rdi
movq %rbx, %rsi
callq 0x1b74e
testb %al, %al
je 0x1c781
movl 0x64(%rsp), %edx
movq %rbp, %rdi
movq %rbx, %rsi
callq 0x1b8e3
testb %al, %al
je 0x1c78e
movq 0x68(%rsp), %rdi
movq %rbx, %rsi
callq 0xaaa4
movq 0x68(%rsp), %rax
movq 0x8(%rax), %rdi
movq -0x10(%rdi), %rsi
cmpq -0x8(%rdi), %rsi
je 0x1c79c
movl 0x64(%rsp), %eax
movl %eax, (%rsi)
addq $0x4, %rsi
movq %rsi, -0x10(%rdi)
jmp 0x1c7aa
movq 0x68(%rsp), %rdi
movq %rbx, %rsi
callq 0xaaa4
addq $0x18, %rbx
cmpq %r12, %rbx
jne 0x1c72f
jmp 0x1c87b
addq $-0x18, %rdi
leaq 0x64(%rsp), %rdx
callq 0x92c4
movq 0x68(%rsp), %rax
movq 0x8(%rax), %rdx
addq $-0x18, %rdx
leaq 0x1c0(%rsp), %rax
movaps (%rax), %xmm0
movaps 0x10(%rax), %xmm1
movaps 0x20(%rax), %xmm2
movaps %xmm2, 0xd0(%rsp)
movaps %xmm1, 0xc0(%rsp)
movaps %xmm0, 0xb0(%rsp)
xorps %xmm0, %xmm0
movaps %xmm0, 0x120(%rsp)
movq $0x0, 0x130(%rsp)
movaps (%rax), %xmm0
movaps 0x10(%rax), %xmm1
movaps 0x20(%rax), %xmm2
movaps %xmm2, 0x50(%rsp)
movaps %xmm1, 0x40(%rsp)
movaps %xmm0, 0x30(%rsp)
movaps %xmm2, 0x20(%rsp)
movaps %xmm1, 0x10(%rsp)
movaps %xmm0, (%rsp)
movq %r15, %rdi
movq 0x70(%rsp), %rsi
movq %r13, %rcx
movl 0x1f0(%rsp), %r8d
callq 0x1bfef
movq %r15, %rdi
movq %r14, %rsi
callq 0x1b4e8
testb %al, %al
je 0x1c78e
movq 0x68(%rsp), %rdx
movq 0x8(%rdx), %rax
leaq -0x18(%rax), %rcx
movq %rcx, 0x8(%rdx)
movq -0x18(%rax), %rdi
testq %rdi, %rdi
je 0x1c78e
movq -0x8(%rax), %rsi
subq %rdi, %rsi
callq 0x2210
jmp 0x1c78e
leaq 0x128(%rsp), %rax
movl $0x0, (%rax)
xorl %r12d, %r12d
movq %r12, 0x8(%rax)
movq %rax, 0x10(%rax)
movq %rax, 0x18(%rax)
movq %r12, 0x20(%rax)
movq 0xe0(%rsp), %rax
movq (%rax), %r13
movq 0x8(%rax), %rbx
cmpq %rbx, %r13
movq 0x68(%rsp), %r14
movq 0x70(%rsp), %r15
je 0x1cf7a
leaq 0x150(%rsp), %rbp
movq %rbx, 0xa8(%rsp)
movq (%r13), %rdi
movq 0x8(%r13), %rsi
leaq 0x64(%rsp), %rdx
callq 0x219f5
cmpq 0x8(%r13), %rax
jne 0x1cf6d
leaq 0x1c0(%rsp), %rax
movaps (%rax), %xmm0
movaps 0x10(%rax), %xmm1
movaps 0x20(%rax), %xmm2
movaps %xmm2, 0xd0(%rsp)
movaps %xmm1, 0xc0(%rsp)
movaps %xmm0, 0xb0(%rsp)
xorps %xmm0, %xmm0
movaps %xmm0, 0x90(%rsp)
movq $0x0, 0xa0(%rsp)
movaps (%rax), %xmm0
movaps 0x10(%rax), %xmm1
movaps 0x20(%rax), %xmm2
movaps %xmm2, 0x50(%rsp)
movaps %xmm1, 0x40(%rsp)
movaps %xmm0, 0x30(%rsp)
movaps %xmm2, 0x20(%rsp)
movaps %xmm1, 0x10(%rsp)
movaps %xmm0, (%rsp)
movq %rbp, %rdi
movq %r15, %rsi
movq %r13, %rdx
leaq 0x90(%rsp), %rcx
movl 0x1f0(%rsp), %r8d
callq 0x1bfef
movq %rbp, %rdi
leaq 0xb0(%rsp), %rsi
callq 0x1b4e8
testb %al, %al
jne 0x1cf6d
movl 0x64(%rsp), %edx
movq %r15, %rdi
movq %r13, %rsi
callq 0x1b8e3
testb %al, %al
je 0x1caba
movq %r14, %rdi
movq %r13, %rsi
callq 0xaaa4
movq 0x8(%r14), %rdi
movq -0x10(%rdi), %rsi
cmpq -0x8(%rdi), %rsi
je 0x1c9ca
movl 0x64(%rsp), %eax
movl %eax, (%rsi)
addq $0x4, %rsi
movq %rsi, -0x10(%rdi)
jmp 0x1c9d8
addq $-0x18, %rdi
leaq 0x64(%rsp), %rdx
callq 0x92c4
movq 0x8(%r14), %rsi
addq $-0x18, %rsi
movq %r15, %rdi
callq 0x1b74e
movq 0x8(%r14), %rcx
leaq -0x18(%rcx), %rdx
testb %al, %al
je 0x1ca00
movq %rdx, 0x8(%r14)
movq (%rdx), %rdi
jmp 0x1caa9
leaq 0x1c0(%rsp), %rax
movaps (%rax), %xmm0
movaps 0x10(%rax), %xmm1
movaps 0x20(%rax), %xmm2
movaps %xmm2, 0xd0(%rsp)
movaps %xmm1, 0xc0(%rsp)
movaps %xmm0, 0xb0(%rsp)
xorps %xmm0, %xmm0
movaps %xmm0, 0x90(%rsp)
movq $0x0, 0xa0(%rsp)
movaps (%rax), %xmm0
movaps 0x10(%rax), %xmm1
movaps 0x20(%rax), %xmm2
movaps %xmm2, 0x50(%rsp)
movaps %xmm1, 0x40(%rsp)
movaps %xmm0, 0x30(%rsp)
movaps %xmm2, 0x20(%rsp)
movaps %xmm1, 0x10(%rsp)
movaps %xmm0, (%rsp)
movq %rbp, %rdi
movq %r15, %rsi
leaq 0x90(%rsp), %rcx
movl 0x1f0(%rsp), %r8d
callq 0x1bfef
movq %rbp, %rdi
leaq 0xb0(%rsp), %rsi
callq 0x1b4e8
testb %al, %al
je 0x1caba
movq 0x8(%r14), %rcx
leaq -0x18(%rcx), %rax
movq %rax, 0x8(%r14)
movq -0x18(%rcx), %rdi
testq %rdi, %rdi
je 0x1caba
movq -0x8(%rcx), %rsi
subq %rdi, %rsi
callq 0x2210
movq 0x100(%rsp), %rcx
movq (%rcx), %rax
movq 0x8(%rcx), %rcx
subq %rax, %rcx
sarq $0x3, %rcx
movabsq $-0x5555555555555555, %rdx # imm = 0xAAAAAAAAAAAAAAAB
imulq %rdx, %rcx
cmpl %ecx, %r12d
jge 0x1cb5b
movq (%r13), %rdx
movq 0x8(%r13), %rsi
movq %rsi, %rdi
subq %rdx, %rdi
movslq %r12d, %r12
movslq %ecx, %r8
leaq (%r12,%r12,2), %r10
movq (%rax,%r10,8), %r9
movq 0x8(%rax,%r10,8), %r11
movq %r11, %rbx
subq %r9, %rbx
leaq (%r9,%rdi), %r10
cmpq %rbx, %rdi
cmovgeq %r11, %r10
movq %rdx, %r11
cmpq %r9, %r10
je 0x1cb41
movq %rdx, %r11
movl (%r9), %ebx
movl (%r11), %ebp
cmpl %ebp, %ebx
leaq 0x150(%rsp), %rbp
jl 0x1cb46
jg 0x1cb53
addq $0x4, %r9
addq $0x4, %r11
cmpq %r10, %r9
jne 0x1cb20
cmpq %rsi, %r11
je 0x1cb53
incq %r12
cmpq %r8, %r12
jne 0x1caf7
movl %ecx, %r12d
jmp 0x1cb9c
movq 0xa8(%rsp), %rbx
cmpl %ecx, %r12d
je 0x1cb9c
movslq %r12d, %rcx
leaq (%rcx,%rcx,2), %rcx
movq (%rax,%rcx,8), %rdi
movq 0x8(%rax,%rcx,8), %rax
movq %rax, %rdx
subq %rdi, %rdx
movq (%r13), %rsi
movq 0x8(%r13), %rcx
subq %rsi, %rcx
cmpq %rcx, %rdx
jne 0x1cb9c
cmpq %rdi, %rax
je 0x1cf6d
callq 0x2220
testl %eax, %eax
je 0x1cf6d
leaq 0xe8(%rsp), %rdi
movq %r15, %rsi
movq %r13, %rdx
callq 0x1bd76
movq %r12, 0x108(%rsp)
movq 0xf0(%rsp), %rax
subq 0xe8(%rsp), %rax
sarq $0x3, %rax
movabsq $-0x5555555555555555, %rcx # imm = 0xAAAAAAAAAAAAAAAB
imulq %rcx, %rax
cmpq $0x1, %rax
jbe 0x1cf9c
movq 0xe0(%rsp), %rax
movq (%rax), %r12
movq 0x8(%rax), %rax
movq %rax, 0x110(%rsp)
cmpq %rax, %r12
je 0x1cf46
movq 0xe8(%rsp), %rbx
movq 0xf0(%rsp), %rax
movq %rax, 0x118(%rsp)
cmpq %rax, %rbx
je 0x1cf34
leaq 0x78(%rsp), %rdi
movq %r13, %rsi
callq 0x42ce
movq (%r12), %r14
movq 0x8(%r12), %r15
cmpq %r15, %r14
je 0x1cd5e
xorl %ebp, %ebp
movl (%r14), %eax
movl %eax, 0x150(%rsp)
movq (%rbx), %rcx
movq 0x8(%rbx), %rdx
movq %rdx, %rsi
subq %rcx, %rsi
sarq $0x2, %rsi
testq %rsi, %rsi
jle 0x1cc8f
movq %rsi, %rdi
shrq %rdi
movq %rdi, %r8
notq %r8
addq %rsi, %r8
leaq (%rcx,%rdi,4), %rsi
addq $0x4, %rsi
cmpl %eax, -0x4(%rsi)
cmovlq %rsi, %rcx
cmovgeq %rdi, %r8
movq %r8, %rsi
testq %r8, %r8
jg 0x1cc65
cmpq %rdx, %rcx
je 0x1cd24
cmpl (%rcx), %eax
jl 0x1cd24
movq (%r13), %rcx
movq 0x8(%r13), %rdx
movq %rdx, %rsi
subq %rcx, %rsi
sarq $0x2, %rsi
testq %rsi, %rsi
jle 0x1cce1
movq %rsi, %rdi
shrq %rdi
movq %rdi, %r8
notq %r8
addq %rsi, %r8
leaq (%rcx,%rdi,4), %rsi
addq $0x4, %rsi
cmpl %eax, -0x4(%rsi)
cmovlq %rsi, %rcx
cmovgeq %rdi, %r8
movq %r8, %rsi
testq %r8, %r8
jg 0x1ccb7
cmpq %rdx, %rcx
je 0x1ccea
cmpl (%rcx), %eax
jge 0x1cd24
movq 0x80(%rsp), %rsi
cmpq 0x88(%rsp), %rsi
je 0x1cd0f
movl %eax, (%rsi)
addq $0x4, %rsi
movq %rsi, 0x80(%rsp)
movb $0x1, %bpl
jmp 0x1cd24
movb $0x1, %bpl
leaq 0x78(%rsp), %rdi
leaq 0x150(%rsp), %rdx
callq 0x92c4
addq $0x4, %r14
cmpq %r15, %r14
jne 0x1cc45
testb $0x1, %bpl
leaq 0x150(%rsp), %rbp
je 0x1cd5e
leaq 0x120(%rsp), %rdi
leaq 0x78(%rsp), %rsi
callq 0x21a9a
leaq 0x128(%rsp), %rcx
cmpq %rcx, %rax
je 0x1cd8f
movq 0x78(%rsp), %rdi
testq %rdi, %rdi
je 0x1cd78
movq 0x88(%rsp), %rsi
subq %rdi, %rsi
callq 0x2210
addq $0x18, %rbx
cmpq 0x118(%rsp), %rbx
jne 0x1cc24
jmp 0x1cf34
leaq 0x120(%rsp), %rdi
leaq 0x78(%rsp), %rsi
callq 0x21b50
movl 0x1f0(%rsp), %r8d
cmpl $0x4, %r8d
jne 0x1ce6d
movq 0x70(%rsp), %rdi
leaq 0x78(%rsp), %rsi
callq 0x1b998
testb %al, %al
je 0x1cd5e
leaq 0x1c0(%rsp), %rax
movaps (%rax), %xmm0
movaps 0x10(%rax), %xmm1
movaps 0x20(%rax), %xmm2
movaps %xmm2, 0xd0(%rsp)
movaps %xmm1, 0xc0(%rsp)
movaps %xmm0, 0xb0(%rsp)
xorps %xmm0, %xmm0
movaps %xmm0, 0x90(%rsp)
movq $0x0, 0xa0(%rsp)
movaps (%rax), %xmm0
movaps 0x10(%rax), %xmm1
movaps 0x20(%rax), %xmm2
movaps %xmm2, 0x50(%rsp)
movaps %xmm1, 0x40(%rsp)
movaps %xmm0, 0x30(%rsp)
movaps %xmm2, 0x20(%rsp)
movaps %xmm1, 0x10(%rsp)
movaps %xmm0, (%rsp)
movq %rbp, %rdi
movq 0x70(%rsp), %rsi
leaq 0x78(%rsp), %rdx
leaq 0x90(%rsp), %rcx
movl $0x4, %r8d
callq 0x1bfef
movq %rbp, %rdi
leaq 0xb0(%rsp), %rsi
callq 0x1b4e8
testb %al, %al
jne 0x1cd5e
jmp 0x1cf20
leaq 0x1c0(%rsp), %rax
movaps (%rax), %xmm0
movaps 0x10(%rax), %xmm1
movaps 0x20(%rax), %xmm2
movaps %xmm2, 0xd0(%rsp)
movaps %xmm1, 0xc0(%rsp)
movaps %xmm0, 0xb0(%rsp)
xorps %xmm0, %xmm0
movaps %xmm0, 0x90(%rsp)
movq $0x0, 0xa0(%rsp)
movaps (%rax), %xmm0
movaps 0x10(%rax), %xmm1
movaps 0x20(%rax), %xmm2
movaps %xmm2, 0x50(%rsp)
movaps %xmm1, 0x40(%rsp)
movaps %xmm0, 0x30(%rsp)
movaps %xmm2, 0x20(%rsp)
movaps %xmm1, 0x10(%rsp)
movaps %xmm0, (%rsp)
movq %rbp, %rdi
movq 0x70(%rsp), %rsi
leaq 0x78(%rsp), %rdx
leaq 0x90(%rsp), %rcx
callq 0x1bfef
movq %rbp, %rdi
leaq 0xb0(%rsp), %rsi
callq 0x1b4e8
testb %al, %al
jne 0x1cd5e
movq 0x70(%rsp), %rdi
leaq 0x78(%rsp), %rsi
callq 0x1b998
testb %al, %al
je 0x1cd5e
movq 0x68(%rsp), %rdi
leaq 0x78(%rsp), %rsi
callq 0xaaa4
jmp 0x1cd5e
addq $0x18, %r12
cmpq 0x110(%rsp), %r12
jne 0x1cc03
leaq 0xe8(%rsp), %rdi
callq 0x41aa
movq 0x68(%rsp), %r14
movq 0x70(%rsp), %r15
movq 0x108(%rsp), %r12
movq 0xa8(%rsp), %rbx
addq $0x18, %r13
cmpq %rbx, %r13
jne 0x1c8ce
leaq 0x120(%rsp), %rdi
callq 0x21862
movq %r14, %rax
addq $0x188, %rsp            # imm = 0x188
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0xdba7(%rip), %rdi      # 0x2ab4a
leaq 0xd71c(%rip), %rsi      # 0x2a6c6
leaq 0xdbb0(%rip), %rcx      # 0x2ab61
movl $0x168, %edx            # imm = 0x168
callq 0x2140
jmp 0x1cfbf
jmp 0x1cfbf
movq %rax, %rbx
jmp 0x1d004
movq %rax, %rbx
movq 0x68(%rsp), %r14
jmp 0x1d011
jmp 0x1cfd5
movq %rax, %rbx
jmp 0x1cff2
movq %rax, %rbx
movq 0x78(%rsp), %rdi
testq %rdi, %rdi
je 0x1cff2
movq 0x88(%rsp), %rsi
subq %rdi, %rsi
callq 0x2210
movq 0x68(%rsp), %r14
leaq 0xe8(%rsp), %rdi
callq 0x41aa
leaq 0x120(%rsp), %rdi
callq 0x21862
movq %r14, %rdi
callq 0x41aa
movq %rbx, %rdi
callq 0x2310