// File: /workspace/github_cpp_makefile_star2_O1/planaria[P]cb_tree/./include/cb_tree/detail/cb_tree_base.hpp
// Function: cb_tree::detail::cb_tree_base<cb_tree::cb_set<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, cb_tree::cb_key_traits<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, void>, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, cb_tree::cb_key_traits<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, void>, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>>::lower_bound(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&)
iterator lower_bound(const key_type& key)
			{
				size_type size = traits_type::size(key);
				node_pointer branch = find_branch(key, size);
				if (branch == end_node())
					return end();

				node_pointer leaf = branch->any_leaf();
				size_type mismatch = traits_type::mismatch(key, derived().key(leaf->value()));

				while (branch != root_node() && mismatch <= branch->parent()->index())
					branch = branch->parent();

				if (mismatch == branch->index())
				{
					if (size == mismatch)
					{
						if (branch->leaf())
							return iterator(branch);

						return iterator(branch->next_leaf());
					}
					else
					{
						return iterator(branch->min_leaf());
					}
				}

				if (size == mismatch)
					return iterator(branch->next_leaf());

				if (traits_type::test(derived().key(leaf->value()), mismatch))
					return iterator(branch->min_leaf());

				return iterator(branch->next_branch_leaf());
			}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movq %rsi, %r12
movq %rdi, %rbx
movq 0x8(%rsi), %r14
shlq $0x4, %r14
incq %r14
movq %r14, %rdx
callq 0xd38a
addq $0x8, %rbx
cmpq %rbx, %rax
je 0x1635d
movq %rax, %r15
cmpb $0x0, 0x8(%rax)
movq %rax, %rbp
jne 0x16284
movq %r15, %rbp
xorl %eax, %eax
cmpq $0x0, (%rbp)
sete %al
shll $0x4, %eax
movq (%rbp,%rax), %rbp
cmpb $0x1, 0x8(%rbp)
jne 0x1626c
cmpb $0x0, 0x8(%rbp)
je 0x1636f
leaq 0x28(%rbp), %r13
movq %r12, %rdi
movq %r13, %rsi
callq 0xd418
movq (%rbx), %rcx
movq %r15, %rbx
cmpq %rcx, %r15
je 0x162b2
movq 0x18(%rbx), %r15
cmpq 0x20(%r15), %rax
jbe 0x162a0
cmpq 0x20(%rbx), %rax
jne 0x162c8
cmpq %rax, %r14
jne 0x162e3
cmpb $0x1, 0x8(%rbx)
jne 0x162cd
jmp 0x16358
cmpq %rax, %r14
jne 0x162f3
movq %rbx, %rdi
callq 0xd6ae
testq %rax, %rax
je 0x1638e
movq %rax, %rbx
jmp 0x1635d
movq %rbx, %rax
movq %rax, %rbx
movq (%rax), %rax
testq %rax, %rax
jne 0x162e6
jmp 0x16316
cmpb $0x0, 0x8(%rbp)
je 0x1636f
movq %r13, %rdi
movq %rax, %rsi
callq 0xd586
testb %al, %al
je 0x1633b
movq %rbx, %rax
movq %rax, %rbx
movq (%rax), %rax
testq %rax, %rax
jne 0x1630b
cmpb $0x0, 0x8(%rbx)
jne 0x1635d
leaq 0x3779c(%rip), %rdi     # 0x4dabf
leaq 0x371d1(%rip), %rsi     # 0x4d4fb
leaq 0x3779b(%rip), %rcx     # 0x4dacc
movl $0xd5, %edx
callq 0xb240
movq %rbx, %rax
movq 0x18(%rbx), %rbx
cmpq %rax, (%rbx)
jne 0x1633b
cmpb $0x0, 0x8(%rbx)
jne 0x16358
movq %rbx, %rdi
callq 0xd6ae
movq %rax, %rbx
testq %rbx, %rbx
je 0x1638e
movq %rbx, %rax
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x37454(%rip), %rdi     # 0x4d7ca
leaq 0x3717e(%rip), %rsi     # 0x4d4fb
leaq 0x3719c(%rip), %rcx     # 0x4d520
movl $0x78, %edx
callq 0xb240
leaq 0x37252(%rip), %rdi     # 0x4d5e7
leaq 0x37250(%rip), %rsi     # 0x4d5ec
leaq 0x37272(%rip), %rcx     # 0x4d615
movl $0x38, %edx
callq 0xb240
nop