// File: xnevs[P]bullimp/examples/../graph/ullimp_sub_graph_iso.hpp
// Function: ullimp::detail::UllImp<boost::adjacency_list<boost::setS, boost::vecS, boost::bidirectionalS, boost::no_property, Color, boost::no_property, boost::listS>, boost::adjacency_list<boost::setS, boost::vecS, boost::bidirectionalS, boost::no_property, Color, boost::no_property, boost::listS>, boost::vec_adj_list_vertex_id_map<boost::no_property, unsigned long>, boost::vec_adj_list_vertex_id_map<boost::no_property, unsigned long>, std::vector<unsigned long, std::allocator<unsigned long>>, main::$_0, boost::always_equivalent, main::$_1>::run()
bool run() {
            bool iso_found = false;
            decltype(n) depth = 0;
            auto row_iter = std::begin(vertex_order_small);
            while(true) {
                while(depth < n - 1) {
                    auto row = *row_iter;
                    auto col = nextCol(row);
                    if(col != graph_traits<GraphLarge>::null_vertex()) {
                        iso[row] = col;									// map node -> col
                        isoinv[col] = row;								// mark column as used
                        map.snapshot();
                        filter(row, col);
                        if (depth <= n/2) refineMapPartial(row, col);
                        if (canMap(row, col)) {
                            ++depth;
                            ++row_iter;
                        } else {
                            map.undo();
                        }
                    } else {
                        if(row != graph_traits<GraphSmall>::null_vertex()) {   // backtrack iso
                            iso[row] = graph_traits<GraphLarge>::null_vertex();
                        }			

                        if(depth-- == 0) // all paths tried?
                            return iso_found;

                        --row_iter;
                        map.undo();
                    }
                }

                // all rows mapped (depth == num_vertices(g) - 1)
                
                auto row = *row_iter;

                BGL_FORALL_VERTICES_T(col, h, GraphLarge) {
                    if(isoinv[col] == graph_traits<GraphSmall>::null_vertex() &&
                            map(row, col) && vertex_comp(row, col) && checkEdges(row, col)) {
                        iso[row] = col;
                        isoinv[col] = row;
                        if(!user_callback(iso, isoinv))
                            return true;
                        iso_found = true;
                        iso[row] = graph_traits<GraphLarge>::null_vertex();
                        isoinv[col] = graph_traits<GraphSmall>::null_vertex();
                    }
                }

                map.undo();

                --depth;
                --row_iter;
            }

            return iso_found;
        }

// Assembly:
subq $0xb8, %rsp
movq %rdi, 0xa8(%rsp)
movq 0xa8(%rsp), %rdi
movq %rdi, 0x58(%rsp)
movb $0x0, 0xa7(%rsp)
movq $0x0, 0x98(%rsp)
addq $0x258, %rdi            # imm = 0x258
callq 0xff30
movq %rax, 0x90(%rsp)
jmp 0x4236
movq 0x58(%rsp), %rcx
movq 0x98(%rsp), %rax
movq 0x248(%rcx), %rcx
subq $0x1, %rcx
cmpq %rcx, %rax
jae 0x4461
leaq 0x90(%rsp), %rdi
callq 0x11af0
movq 0x58(%rsp), %rdi
movq (%rax), %rax
movq %rax, 0x88(%rsp)
movq 0x88(%rsp), %rsi
callq 0x4d00
movq %rax, 0x80(%rsp)
movq 0x80(%rsp), %rax
movq %rax, 0x50(%rsp)
callq 0xb980
movq %rax, %rcx
movq 0x50(%rsp), %rax
cmpq %rcx, %rax
je 0x43c2
movq 0x58(%rsp), %rdi
movq 0x80(%rsp), %rax
movq %rax, 0x40(%rsp)
addq $0x2c0, %rdi            # imm = 0x2C0
movq 0x88(%rsp), %rsi
callq 0x10070
movq 0x40(%rsp), %rcx
movq 0x58(%rsp), %rdi
movq %rcx, (%rax)
movq 0x88(%rsp), %rax
movq %rax, 0x48(%rsp)
addq $0x2e8, %rdi            # imm = 0x2E8
movq 0x80(%rsp), %rsi
callq 0x10070
movq 0x48(%rsp), %rcx
movq 0x58(%rsp), %rdi
movq %rcx, (%rax)
addq $0x2f8, %rdi            # imm = 0x2F8
callq 0x4ff0
movq 0x58(%rsp), %rdi
movq 0x88(%rsp), %rsi
movq 0x80(%rsp), %rdx
callq 0x5020
movq 0x58(%rsp), %rcx
movq 0x98(%rsp), %rax
movq 0x248(%rcx), %rcx
shrq %rcx
cmpq %rcx, %rax
ja 0x4369
movq 0x58(%rsp), %rdi
movq 0x88(%rsp), %rsi
movq 0x80(%rsp), %rdx
callq 0x5570
movq 0x58(%rsp), %rdi
movq 0x88(%rsp), %rsi
movq 0x80(%rsp), %rdx
callq 0x58b0
testb $0x1, %al
jne 0x4389
jmp 0x43ac
movq 0x98(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x98(%rsp)
leaq 0x90(%rsp), %rdi
callq 0x11f20
jmp 0x43bd
movq 0x58(%rsp), %rdi
addq $0x2f8, %rdi            # imm = 0x2F8
callq 0x5bd0
jmp 0x445c
movq 0x88(%rsp), %rax
movq %rax, 0x38(%rsp)
callq 0xb980
movq %rax, %rcx
movq 0x38(%rsp), %rax
cmpq %rcx, %rax
je 0x440c
callq 0xb980
movq 0x58(%rsp), %rdi
movq %rax, 0x30(%rsp)
addq $0x2c0, %rdi            # imm = 0x2C0
movq 0x88(%rsp), %rsi
callq 0x10070
movq 0x30(%rsp), %rcx
movq %rcx, (%rax)
movq 0x98(%rsp), %rax
movq %rax, %rcx
addq $-0x1, %rcx
movq %rcx, 0x98(%rsp)
cmpq $0x0, %rax
jne 0x443e
movb 0xa7(%rsp), %al
andb $0x1, %al
movb %al, 0xb7(%rsp)
jmp 0x46c2
leaq 0x90(%rsp), %rdi
callq 0x11f40
movq 0x58(%rsp), %rdi
addq $0x2f8, %rdi            # imm = 0x2F8
callq 0x5bd0
jmp 0x4236
leaq 0x90(%rsp), %rdi
callq 0x11af0
movq %rax, %rcx
movq 0x58(%rsp), %rax
movq (%rcx), %rcx
movq %rcx, 0x78(%rsp)
movq 0x8(%rax), %rdi
callq 0xaf50
movq %rax, 0x68(%rsp)
movq %rdx, 0x70(%rsp)
leaq 0x68(%rsp), %rdi
leaq 0x68(%rsp), %rsi
addq $0x8, %rsi
callq 0xafe0
testb $0x1, %al
jne 0x44ad
jmp 0x468b
jmp 0x44af
leaq 0x68(%rsp), %rdi
leaq 0x68(%rsp), %rsi
addq $0x8, %rsi
callq 0xafe0
testb $0x1, %al
jne 0x44c8
jmp 0x44df
leaq 0x68(%rsp), %rdi
callq 0xb030
movq %rax, 0x60(%rsp)
movb $0x1, %al
movb %al, 0x2f(%rsp)
jmp 0x44e7
xorl %eax, %eax
movb %al, 0x2f(%rsp)
jmp 0x44e7
movb 0x2f(%rsp), %al
testb $0x1, %al
jne 0x44f4
jmp 0x467a
movq 0x58(%rsp), %rdi
addq $0x2e8, %rdi            # imm = 0x2E8
movq 0x60(%rsp), %rsi
callq 0x10070
movq (%rax), %rax
movq %rax, 0x20(%rsp)
callq 0xb980
movq %rax, %rcx
movq 0x20(%rsp), %rax
cmpq %rcx, %rax
jne 0x4669
movq 0x58(%rsp), %rdi
addq $0x2f8, %rdi            # imm = 0x2F8
movq 0x78(%rsp), %rsi
movq 0x60(%rsp), %rdx
callq 0x46e0
testb $0x1, (%rax)
je 0x4669
movq 0x58(%rsp), %rdi
addq $0x280, %rdi            # imm = 0x280
leaq 0x78(%rsp), %rsi
leaq 0x60(%rsp), %rdx
callq 0x11f60
testb $0x1, %al
jne 0x4570
jmp 0x4669
movq 0x58(%rsp), %rdi
movq 0x78(%rsp), %rsi
movq 0x60(%rsp), %rdx
callq 0x5c30
testb $0x1, %al
jne 0x458d
jmp 0x4669
movq 0x58(%rsp), %rdi
movq 0x60(%rsp), %rax
movq %rax, 0x10(%rsp)
addq $0x2c0, %rdi            # imm = 0x2C0
movq 0x78(%rsp), %rsi
callq 0x10070
movq 0x10(%rsp), %rcx
movq 0x58(%rsp), %rdi
movq %rcx, (%rax)
movq 0x78(%rsp), %rax
movq %rax, 0x18(%rsp)
addq $0x2e8, %rdi            # imm = 0x2E8
movq 0x60(%rsp), %rsi
callq 0x10070
movq 0x18(%rsp), %rcx
movq 0x58(%rsp), %rdx
movq %rcx, (%rax)
movq %rdx, %rdi
addq $0x288, %rdi            # imm = 0x288
movq %rdx, %rsi
addq $0x2c0, %rsi            # imm = 0x2C0
addq $0x2e8, %rdx            # imm = 0x2E8
callq 0x5fd0
testb $0x1, %al
jne 0x4613
movb $0x1, 0xb7(%rsp)
jmp 0x46c2
movb $0x1, 0xa7(%rsp)
callq 0xb980
movq 0x58(%rsp), %rdi
movq %rax, (%rsp)
addq $0x2c0, %rdi            # imm = 0x2C0
movq 0x78(%rsp), %rsi
callq 0x10070
movq (%rsp), %rcx
movq %rcx, (%rax)
callq 0xb980
movq 0x58(%rsp), %rdi
movq %rax, 0x8(%rsp)
addq $0x2e8, %rdi            # imm = 0x2E8
movq 0x60(%rsp), %rsi
callq 0x10070
movq 0x8(%rsp), %rcx
movq %rcx, (%rax)
jmp 0x466b
leaq 0x68(%rsp), %rdi
callq 0xb820
jmp 0x44af
jmp 0x467c
movq 0x70(%rsp), %rax
movq %rax, 0x68(%rsp)
jmp 0x4491
movq 0x58(%rsp), %rdi
addq $0x2f8, %rdi            # imm = 0x2F8
callq 0x5bd0
movq 0x98(%rsp), %rax
addq $-0x1, %rax
movq %rax, 0x98(%rsp)
leaq 0x90(%rsp), %rdi
callq 0x11f40
jmp 0x4234
movb 0xb7(%rsp), %al
andb $0x1, %al
addq $0xb8, %rsp
retq
nopw %cs:(%rax,%rax)