// File: srcmake[P]tries/src/main.cpp
// Function: main
int main()  
	{
	cout << "Program started.\n";

	Trie trie;
	
	trie.Insert("apple");
	trie.Insert("banana");
	trie.Insert("apricot");

	assert(trie.Contains("apple") == true);
	assert(trie.Contains("app") == false);
	assert(trie.Contains("apricot") == true);

	assert(trie.Contains("bananas") == false);
	assert(trie.Contains("banana") == true);
	
	assert(trie.PrefixExists("app") == true);
	assert(trie.PrefixExists("banana") == true);
	assert(trie.PrefixExists("bann") == false);

	cout << "Program ended.\n";	
	return 0;
	}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x270, %rsp            # imm = 0x270
movl $0x0, -0x4(%rbp)
movq 0x588f(%rip), %rdi      # 0x6fd8
leaq 0x28b8(%rip), %rsi      # 0x4008
callq 0x10b0
leaq -0x10(%rbp), %rdi
callq 0x12c0
leaq -0x31(%rbp), %rdi
movq %rdi, -0x1e0(%rbp)
callq 0x1170
movq -0x1e0(%rbp), %rdx
leaq 0x289e(%rip), %rsi      # 0x401a
leaq -0x30(%rbp), %rdi
callq 0x1110
jmp 0x1787
leaq -0x10(%rbp), %rdi
leaq -0x30(%rbp), %rsi
callq 0x1340
jmp 0x1796
leaq -0x30(%rbp), %rdi
callq 0x1070
leaq -0x31(%rbp), %rdi
callq 0x10e0
leaq -0x69(%rbp), %rdi
movq %rdi, -0x1e8(%rbp)
callq 0x1170
movq -0x1e8(%rbp), %rdx
leaq 0x285a(%rip), %rsi      # 0x4020
leaq -0x68(%rbp), %rdi
callq 0x1110
jmp 0x17d1
leaq -0x10(%rbp), %rdi
leaq -0x68(%rbp), %rsi
callq 0x1340
jmp 0x17e0
leaq -0x68(%rbp), %rdi
callq 0x1070
leaq -0x69(%rbp), %rdi
callq 0x10e0
leaq -0x91(%rbp), %rdi
movq %rdi, -0x1f0(%rbp)
callq 0x1170
movq -0x1f0(%rbp), %rdx
leaq 0x2814(%rip), %rsi      # 0x4027
leaq -0x90(%rbp), %rdi
callq 0x1110
jmp 0x1821
leaq -0x10(%rbp), %rdi
leaq -0x90(%rbp), %rsi
callq 0x1340
jmp 0x1833
leaq -0x90(%rbp), %rdi
callq 0x1070
leaq -0x91(%rbp), %rdi
callq 0x10e0
leaq -0xb9(%rbp), %rdi
movq %rdi, -0x1f8(%rbp)
callq 0x1170
movq -0x1f8(%rbp), %rdx
leaq 0x27ae(%rip), %rsi      # 0x401a
leaq -0xb8(%rbp), %rdi
callq 0x1110
jmp 0x187a
leaq -0x10(%rbp), %rdi
leaq -0xb8(%rbp), %rsi
callq 0x14e0
movb %al, -0x1f9(%rbp)
jmp 0x1892
movb -0x1f9(%rbp), %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x1, %eax
jne 0x18a7
jmp 0x198d
leaq 0x2781(%rip), %rdi      # 0x402f
leaq 0x2799(%rip), %rsi      # 0x404e
movl $0x11, %edx
leaq 0x279a(%rip), %rcx      # 0x405b
callq 0x1080
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x18e9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x30(%rbp), %rdi
callq 0x1070
leaq -0x31(%rbp), %rdi
callq 0x10e0
jmp 0x1f93
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x191a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x68(%rbp), %rdi
callq 0x1070
leaq -0x69(%rbp), %rdi
callq 0x10e0
jmp 0x1f93
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x194e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x90(%rbp), %rdi
callq 0x1070
leaq -0x91(%rbp), %rdi
callq 0x10e0
jmp 0x1f93
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x1a1d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0xb8(%rbp), %rdi
callq 0x1070
jmp 0x1a1d
leaq -0xb8(%rbp), %rdi
callq 0x1070
leaq -0xb9(%rbp), %rdi
callq 0x10e0
leaq -0xe1(%rbp), %rdi
movq %rdi, -0x208(%rbp)
callq 0x1170
movq -0x208(%rbp), %rdx
leaq 0x26a0(%rip), %rsi      # 0x4066
leaq -0xe0(%rbp), %rdi
callq 0x1110
jmp 0x19d4
leaq -0x10(%rbp), %rdi
leaq -0xe0(%rbp), %rsi
callq 0x14e0
movb %al, -0x209(%rbp)
jmp 0x19ec
movb -0x209(%rbp), %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x0, %eax
jne 0x19fe
jmp 0x1a5c
leaq 0x2665(%rip), %rdi      # 0x406a
leaq 0x2642(%rip), %rsi      # 0x404e
movl $0x12, %edx
leaq 0x2643(%rip), %rcx      # 0x405b
callq 0x1080
leaq -0xb9(%rbp), %rdi
callq 0x10e0
jmp 0x1f93
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x1aec
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0xe0(%rbp), %rdi
callq 0x1070
jmp 0x1aec
leaq -0xe0(%rbp), %rdi
callq 0x1070
leaq -0xe1(%rbp), %rdi
callq 0x10e0
leaq -0x109(%rbp), %rdi
movq %rdi, -0x218(%rbp)
callq 0x1170
movq -0x218(%rbp), %rdx
leaq 0x2592(%rip), %rsi      # 0x4027
leaq -0x108(%rbp), %rdi
callq 0x1110
jmp 0x1aa3
leaq -0x10(%rbp), %rdi
leaq -0x108(%rbp), %rsi
callq 0x14e0
movb %al, -0x219(%rbp)
jmp 0x1abb
movb -0x219(%rbp), %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x1, %eax
jne 0x1acd
jmp 0x1b2b
leaq 0x25b4(%rip), %rdi      # 0x4088
leaq 0x2573(%rip), %rsi      # 0x404e
movl $0x13, %edx
leaq 0x2574(%rip), %rcx      # 0x405b
callq 0x1080
leaq -0xe1(%rbp), %rdi
callq 0x10e0
jmp 0x1f93
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x1bbb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x108(%rbp), %rdi
callq 0x1070
jmp 0x1bbb
leaq -0x108(%rbp), %rdi
callq 0x1070
leaq -0x109(%rbp), %rdi
callq 0x10e0
leaq -0x131(%rbp), %rdi
movq %rdi, -0x228(%rbp)
callq 0x1170
movq -0x228(%rbp), %rdx
leaq 0x2545(%rip), %rsi      # 0x40a9
leaq -0x130(%rbp), %rdi
callq 0x1110
jmp 0x1b72
leaq -0x10(%rbp), %rdi
leaq -0x130(%rbp), %rsi
callq 0x14e0
movb %al, -0x229(%rbp)
jmp 0x1b8a
movb -0x229(%rbp), %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x0, %eax
jne 0x1b9c
jmp 0x1bfa
leaq 0x250e(%rip), %rdi      # 0x40b1
leaq 0x24a4(%rip), %rsi      # 0x404e
movl $0x15, %edx
leaq 0x24a5(%rip), %rcx      # 0x405b
callq 0x1080
leaq -0x109(%rbp), %rdi
callq 0x10e0
jmp 0x1f93
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x1c8a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x130(%rbp), %rdi
callq 0x1070
jmp 0x1c8a
leaq -0x130(%rbp), %rdi
callq 0x1070
leaq -0x131(%rbp), %rdi
callq 0x10e0
leaq -0x159(%rbp), %rdi
movq %rdi, -0x238(%rbp)
callq 0x1170
movq -0x238(%rbp), %rdx
leaq 0x23ed(%rip), %rsi      # 0x4020
leaq -0x158(%rbp), %rdi
callq 0x1110
jmp 0x1c41
leaq -0x10(%rbp), %rdi
leaq -0x158(%rbp), %rsi
callq 0x14e0
movb %al, -0x239(%rbp)
jmp 0x1c59
movb -0x239(%rbp), %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x1, %eax
jne 0x1c6b
jmp 0x1cc9
leaq 0x2461(%rip), %rdi      # 0x40d3
leaq 0x23d5(%rip), %rsi      # 0x404e
movl $0x16, %edx
leaq 0x23d6(%rip), %rcx      # 0x405b
callq 0x1080
leaq -0x131(%rbp), %rdi
callq 0x10e0
jmp 0x1f93
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x1d59
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x158(%rbp), %rdi
callq 0x1070
jmp 0x1d59
leaq -0x158(%rbp), %rdi
callq 0x1070
leaq -0x159(%rbp), %rdi
callq 0x10e0
leaq -0x181(%rbp), %rdi
movq %rdi, -0x248(%rbp)
callq 0x1170
movq -0x248(%rbp), %rdx
leaq 0x2364(%rip), %rsi      # 0x4066
leaq -0x180(%rbp), %rdi
callq 0x1110
jmp 0x1d10
leaq -0x10(%rbp), %rdi
leaq -0x180(%rbp), %rsi
callq 0x1610
movb %al, -0x249(%rbp)
jmp 0x1d28
movb -0x249(%rbp), %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x1, %eax
jne 0x1d3a
jmp 0x1d98
leaq 0x23b2(%rip), %rdi      # 0x40f3
leaq 0x2306(%rip), %rsi      # 0x404e
movl $0x18, %edx
leaq 0x2307(%rip), %rcx      # 0x405b
callq 0x1080
leaq -0x159(%rbp), %rdi
callq 0x10e0
jmp 0x1f93
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x1e28
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x180(%rbp), %rdi
callq 0x1070
jmp 0x1e28
leaq -0x180(%rbp), %rdi
callq 0x1070
leaq -0x181(%rbp), %rdi
callq 0x10e0
leaq -0x1a9(%rbp), %rdi
movq %rdi, -0x258(%rbp)
callq 0x1170
movq -0x258(%rbp), %rdx
leaq 0x224f(%rip), %rsi      # 0x4020
leaq -0x1a8(%rbp), %rdi
callq 0x1110
jmp 0x1ddf
leaq -0x10(%rbp), %rdi
leaq -0x1a8(%rbp), %rsi
callq 0x1610
movb %al, -0x259(%rbp)
jmp 0x1df7
movb -0x259(%rbp), %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x1, %eax
jne 0x1e09
jmp 0x1e67
leaq 0x2304(%rip), %rdi      # 0x4114
leaq 0x2237(%rip), %rsi      # 0x404e
movl $0x19, %edx
leaq 0x2238(%rip), %rcx      # 0x405b
callq 0x1080
leaq -0x181(%rbp), %rdi
callq 0x10e0
jmp 0x1f93
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x1ef7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x1a8(%rbp), %rdi
callq 0x1070
jmp 0x1ef7
leaq -0x1a8(%rbp), %rdi
callq 0x1070
leaq -0x1a9(%rbp), %rdi
callq 0x10e0
leaq -0x1d1(%rbp), %rdi
movq %rdi, -0x268(%rbp)
callq 0x1170
movq -0x268(%rbp), %rdx
leaq 0x2298(%rip), %rsi      # 0x4138
leaq -0x1d0(%rbp), %rdi
callq 0x1110
jmp 0x1eae
leaq -0x10(%rbp), %rdi
leaq -0x1d0(%rbp), %rsi
callq 0x1610
movb %al, -0x269(%rbp)
jmp 0x1ec6
movb -0x269(%rbp), %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x0, %eax
jne 0x1ed8
jmp 0x1f30
leaq 0x225e(%rip), %rdi      # 0x413d
leaq 0x2168(%rip), %rsi      # 0x404e
movl $0x1a, %edx
leaq 0x2169(%rip), %rcx      # 0x405b
callq 0x1080
leaq -0x1a9(%rbp), %rdi
callq 0x10e0
jmp 0x1f93
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x1f79
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x1d0(%rbp), %rdi
callq 0x1070
jmp 0x1f79
leaq -0x1d0(%rbp), %rdi
callq 0x1070
leaq -0x1d1(%rbp), %rdi
callq 0x10e0
movq 0x5089(%rip), %rdi      # 0x6fd8
leaq 0x220a(%rip), %rsi      # 0x4160
callq 0x10b0
jmp 0x1f5d
movl $0x0, -0x4(%rbp)
leaq -0x10(%rbp), %rdi
callq 0x1330
movl -0x4(%rbp), %eax
addq $0x270, %rsp            # imm = 0x270
popq %rbp
retq
leaq -0x1d1(%rbp), %rdi
callq 0x10e0
jmp 0x1f93
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x10(%rbp), %rdi
callq 0x1330
movq -0x40(%rbp), %rdi
callq 0x1160
nopw %cs:(%rax,%rax)
nop