// File: DimitriDaSilva[P]42_ft_containers/containers/utils/red_black_tree.hpp
// Function: ft::red_black_tree<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, ft::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, custom_allocator<ft::red_black_tree_node<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>>>::insert(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&)
ft::pair<iterator, bool>
		insert(value_type const& val)
		{
			// Ignore duplicates keys
			iterator it = find(get_key_from_val(val));

			if (it != end())
				return ft::make_pair(it, false);

			// New nodes are necessarily red and leaf nodes so they point
			// to _nil
			node_pointer node = _alloc.allocate(1);
			_alloc.construct(node, node_type(val, NULL, _nil, _nil, red));

			it = iterator(insert_helper(node, _root), _root, _nil);

			_size++;

			return ft::make_pair(it, true);
		}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x1a0, %rsp            # imm = 0x1A0
movq %rdi, -0x178(%rbp)
movq %rdi, %rax
movq %rax, -0x170(%rbp)
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq -0x10(%rbp), %rsi
movq %rsi, -0x168(%rbp)
movq -0x18(%rbp), %rdx
movq (%rsi), %rax
movq 0x10(%rax), %rax
leaq -0x58(%rbp), %rdi
movq %rdi, -0x160(%rbp)
callq *%rax
movq -0x168(%rbp), %rsi
movq -0x160(%rbp), %rdx
leaq -0x38(%rbp), %rdi
callq 0xa430
jmp 0x80e4
leaq -0x58(%rbp), %rdi
callq 0x6130
movq -0x168(%rbp), %rsi
leaq -0x88(%rbp), %rdi
callq 0xa4e0
jmp 0x8102
leaq -0x38(%rbp), %rdi
leaq -0x88(%rbp), %rsi
callq 0xa4b0
movb %al, -0x179(%rbp)
jmp 0x811a
leaq -0x88(%rbp), %rdi
callq 0x8610
jmp 0x8128
movb -0x179(%rbp), %al
testb $0x1, %al
jne 0x8137
jmp 0x81e8
leaq -0xa8(%rbp), %rdi
leaq -0x38(%rbp), %rsi
callq 0xa580
jmp 0x8149
movq -0x178(%rbp), %rdi
leaq -0xa8(%rbp), %rsi
xorl %edx, %edx
callq 0xa540
jmp 0x8160
leaq -0xa8(%rbp), %rdi
callq 0x8610
jmp 0x816e
movl $0x1, -0xac(%rbp)
jmp 0x83d9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x58(%rbp), %rdi
callq 0x6130
jmp 0x8194
jmp 0x83ff
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x83f2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x88(%rbp), %rdi
callq 0x8610
jmp 0x81c4
jmp 0x83f2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0xa8(%rbp), %rdi
callq 0x8610
jmp 0x81e3
jmp 0x83f2
movq -0x168(%rbp), %rdi
addq $0x21, %rdi
xorl %eax, %eax
movl %eax, %edx
movl $0x1, %esi
callq 0xa120
movq %rax, -0x188(%rbp)
jmp 0x820a
movq -0x168(%rbp), %rax
movq -0x188(%rbp), %rcx
movq %rcx, -0xb8(%rbp)
addq $0x21, %rax
movq %rax, -0x198(%rbp)
movq -0xb8(%rbp), %rax
movq %rax, -0x190(%rbp)
movq -0x18(%rbp), %rsi
leaq -0x118(%rbp), %rdi
callq 0x60d0
jmp 0x824a
movq -0x168(%rbp), %rax
movq 0x10(%rax), %r8
xorl %r9d, %r9d
movl %r9d, %edx
leaq -0xf8(%rbp), %rdi
leaq -0x118(%rbp), %rsi
movq %r8, %rcx
callq 0xa180
jmp 0x8273
movq -0x190(%rbp), %rsi
movq -0x198(%rbp), %rdi
leaq -0xf8(%rbp), %rdx
callq 0xa150
jmp 0x828f
leaq -0xf8(%rbp), %rdi
callq 0xa1e0
jmp 0x829d
leaq -0x118(%rbp), %rdi
callq 0x6130
jmp 0x82ab
movq -0x168(%rbp), %rdi
movq -0xb8(%rbp), %rsi
movq 0x8(%rdi), %rdx
callq 0xa5d0
movq %rax, -0x1a0(%rbp)
jmp 0x82cb
movq -0x1a0(%rbp), %rsi
movq -0x168(%rbp), %rax
movq 0x8(%rax), %rdx
movq 0x10(%rax), %rcx
leaq -0x138(%rbp), %rdi
callq 0xa750
jmp 0x82ef
leaq -0x38(%rbp), %rdi
leaq -0x138(%rbp), %rsi
callq 0xa790
jmp 0x8301
leaq -0x138(%rbp), %rdi
callq 0x8610
jmp 0x830f
movq -0x168(%rbp), %rax
movq 0x18(%rax), %rcx
incq %rcx
movq %rcx, 0x18(%rax)
leaq -0x158(%rbp), %rdi
leaq -0x38(%rbp), %rsi
callq 0xa580
jmp 0x8333
movq -0x178(%rbp), %rdi
leaq -0x158(%rbp), %rsi
movl $0x1, %edx
callq 0xa540
jmp 0x834d
leaq -0x158(%rbp), %rdi
callq 0x8610
jmp 0x835b
movl $0x1, -0xac(%rbp)
jmp 0x83d9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x8391
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0xf8(%rbp), %rdi
callq 0xa1e0
jmp 0x838f
jmp 0x8391
leaq -0x118(%rbp), %rdi
callq 0x6130
jmp 0x839f
jmp 0x83f2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x138(%rbp), %rdi
callq 0x8610
jmp 0x83bb
jmp 0x83f2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x158(%rbp), %rdi
callq 0x8610
jmp 0x83d7
jmp 0x83f2
leaq -0x38(%rbp), %rdi
callq 0x8610
movq -0x170(%rbp), %rax
addq $0x1a0, %rsp            # imm = 0x1A0
popq %rbp
retq
leaq -0x38(%rbp), %rdi
callq 0x8610
jmp 0x83fd
jmp 0x83ff
movq -0x60(%rbp), %rdi
callq 0x6310
movq %rax, %rdi
callq 0x7110