// File: adamiaonr[P]rid-analytics/src/pugixml.cpp
// Function: pugi::xml_node::traverse(pugi::xml_tree_walker&)
PUGI__FN bool xml_node::traverse(xml_tree_walker& walker)
	{
		walker._depth = -1;

		xml_node arg_begin = *this;
		if (!walker.begin(arg_begin)) return false;

		xml_node cur = first_child();

		if (cur)
		{
			++walker._depth;

			do
			{
				xml_node arg_for_each = cur;
				if (!walker.for_each(arg_for_each))
					return false;

				if (cur.first_child())
				{
					++walker._depth;
					cur = cur.first_child();
				}
				else if (cur.next_sibling())
					cur = cur.next_sibling();
				else
				{
					// Borland C++ workaround
					while (!cur.next_sibling() && cur != *this && !cur.parent().empty())
					{
						--walker._depth;
						cur = cur.parent();
					}

					if (cur != *this)
						cur = cur.next_sibling();
				}
			}
			while (cur && cur != *this);
		}

		assert(walker._depth == -1);

		xml_node arg_end = *this;
		return walker.end(arg_end);
	}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x90, %rsp
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x80(%rbp)
movq -0x18(%rbp), %rcx
movl $0xffffffff, 0x8(%rcx)  # imm = 0xFFFFFFFF
movq (%rax), %rax
movq %rax, -0x20(%rbp)
movq -0x18(%rbp), %rdi
movq (%rdi), %rax
leaq -0x20(%rbp), %rsi
callq *0x10(%rax)
testb $0x1, %al
jne 0xaf68
movb $0x0, -0x1(%rbp)
jmp 0xb17d
movq -0x80(%rbp), %rdi
callq 0x8190
movq %rax, -0x28(%rbp)
leaq -0x28(%rbp), %rdi
callq 0x73b0
cmpq $0x0, %rax
je 0xb134
movq -0x18(%rbp), %rax
movl 0x8(%rax), %ecx
addl $0x1, %ecx
movl %ecx, 0x8(%rax)
movq -0x28(%rbp), %rax
movq %rax, -0x30(%rbp)
movq -0x18(%rbp), %rdi
movq (%rdi), %rax
leaq -0x30(%rbp), %rsi
callq *0x18(%rax)
testb $0x1, %al
jne 0xafb8
movb $0x0, -0x1(%rbp)
jmp 0xb17d
leaq -0x28(%rbp), %rdi
callq 0x8190
movq %rax, -0x38(%rbp)
leaq -0x38(%rbp), %rdi
callq 0x73b0
cmpq $0x0, %rax
je 0xaffb
movq -0x18(%rbp), %rax
movl 0x8(%rax), %ecx
addl $0x1, %ecx
movl %ecx, 0x8(%rax)
leaq -0x28(%rbp), %rdi
callq 0x8190
movq %rax, -0x40(%rbp)
movq -0x40(%rbp), %rax
movq %rax, -0x28(%rbp)
jmp 0xb0f5
leaq -0x28(%rbp), %rdi
callq 0x7b20
movq %rax, -0x48(%rbp)
leaq -0x48(%rbp), %rdi
callq 0x73b0
cmpq $0x0, %rax
je 0xb031
leaq -0x28(%rbp), %rdi
callq 0x7b20
movq %rax, -0x50(%rbp)
movq -0x50(%rbp), %rax
movq %rax, -0x28(%rbp)
jmp 0xb0f3
jmp 0xb033
leaq -0x28(%rbp), %rdi
callq 0x7b20
movq %rax, -0x58(%rbp)
leaq -0x58(%rbp), %rdi
callq 0x73f0
movb %al, %cl
xorl %eax, %eax
testb $0x1, %cl
movb %al, -0x81(%rbp)
jne 0xb05a
jmp 0xb096
movq -0x80(%rbp), %rsi
leaq -0x28(%rbp), %rdi
callq 0x7780
movb %al, %cl
xorl %eax, %eax
testb $0x1, %cl
movb %al, -0x81(%rbp)
jne 0xb078
jmp 0xb096
leaq -0x28(%rbp), %rdi
callq 0x7e60
movq %rax, -0x60(%rbp)
leaq -0x60(%rbp), %rdi
callq 0x7870
xorb $-0x1, %al
movb %al, -0x81(%rbp)
movb -0x81(%rbp), %al
testb $0x1, %al
jne 0xb0a2
jmp 0xb0c9
movq -0x18(%rbp), %rax
movl 0x8(%rax), %ecx
addl $-0x1, %ecx
movl %ecx, 0x8(%rax)
leaq -0x28(%rbp), %rdi
callq 0x7e60
movq %rax, -0x68(%rbp)
movq -0x68(%rbp), %rax
movq %rax, -0x28(%rbp)
jmp 0xb033
movq -0x80(%rbp), %rsi
leaq -0x28(%rbp), %rdi
callq 0x7780
testb $0x1, %al
jne 0xb0dc
jmp 0xb0f1
leaq -0x28(%rbp), %rdi
callq 0x7b20
movq %rax, -0x70(%rbp)
movq -0x70(%rbp), %rax
movq %rax, -0x28(%rbp)
jmp 0xb0f3
jmp 0xb0f5
jmp 0xb0f7
leaq -0x28(%rbp), %rdi
callq 0x73b0
movq %rax, %rcx
xorl %eax, %eax
cmpq $0x0, %rcx
movb %al, -0x82(%rbp)
je 0xb124
movq -0x80(%rbp), %rsi
leaq -0x28(%rbp), %rdi
callq 0x7780
movb %al, -0x82(%rbp)
movb -0x82(%rbp), %al
testb $0x1, %al
jne 0xaf95
jmp 0xb134
movq -0x18(%rbp), %rax
cmpl $-0x1, 0x8(%rax)
jne 0xb140
jmp 0xb15f
leaq 0x53b5e(%rip), %rdi     # 0x5eca5
leaq 0x53a27(%rip), %rsi     # 0x5eb75
movl $0x1856, %edx           # imm = 0x1856
leaq 0x53b5f(%rip), %rcx     # 0x5ecb9
callq 0x5310
movq -0x80(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x78(%rbp)
movq -0x18(%rbp), %rdi
movq (%rdi), %rax
leaq -0x78(%rbp), %rsi
callq *0x20(%rax)
andb $0x1, %al
movb %al, -0x1(%rbp)
movb -0x1(%rbp), %al
andb $0x1, %al
addq $0x90, %rsp
popq %rbp
retq
nopl (%rax,%rax)