// File: /workspace/github_c_makefile_star2_O2/martincameron[P]towntalk/towntalk.c
// Function: parse_expression
struct element* parse_expression( struct element *elem,
	struct function *func, struct variables *vars, struct expression *prev, char *message ) {
	struct element *next = elem->next;
	char *value = elem->str.string, chr = value[ 0 ];
	struct local_variable *local;
	enum reference_type type = 0;
	struct operator *oper;
	struct string *decl;
	if( ( chr >= '0' && chr <= '9' ) || ( chr == '-' && ( value[ 1 ] >= '0' && value[ 1 ] <= '9' ) ) ) {
		/* Number literal. */
		next = parse_number_literal_expression( elem, prev, message );
	} else if( chr == '"' ) {
		/* String literal. */
		next = parse_string_literal_expression( elem, prev, message );
	} else if( chr == '$' && value[ 1 ] == 0 ) {
		/* Element literal. */
		next = parse_element_literal_expression( elem, func->env, prev, message );
	} else if( ( chr == '`' || chr == '\'' ) && value[ 1 ] == 0 ) {
		/* Infix operator.*/
		next = parse_infix_expression( elem, func, vars, prev, message );
	} else if( chr == '\'' && value[ 1 ] ) {
		/* Character literal. */
		next = parse_character_literal_expression( elem, prev, message );
	} else if( chr == '\\' && value[ 1 ] == 0 && elem->next && elem->next->str.string[ 0 ] == '"' ) {
		/* Escaped character literal. */
		next = parse_character_literal_expression( elem->next, prev, message );
	} else if( chr == '[' ) {
		/* Array index operator. */
		next = parse_index_expression( elem, func, vars, prev, message );
	} else if( elem->str.length > 128 ) {
		sprintf( message, "Invalid expression '%.64s' on line %d.", value, elem->line );
	} else if( chr == '@' ) {
		if( value[ 1 ] ) {
			/* Function reference operator. */
			next = parse_func_ref_expression( elem, func, prev, message );
		} else {
			/* Recursive function call. */
			next = parse_call_expression( elem, func, vars, func, prev, message );
		}
	} else if( value[ 0 ] == ':' ) {
		if( value[ 1 ] == 0 ) {
			/* Function reference call. */
			next = parse_refcall_expression( elem, func, vars, prev, message );
		} else {
			/* Member function call. */
			next = parse_thiscall_expression( elem, func, vars, prev, message );
		}
	} else {
		local = get_local_variable( func->variable_decls, value, "+-.:" );
		if( local ) {
			/* Local variable reference.*/
			next = parse_local_expression( elem, func, vars, local, prev, message );
		} else {
			local = NULL;
			if( vars ) {
				local = get_local_variable( vars->func->variable_decls, value, ".:" );
			}
			if( local ) {
				/* Captured local variable. */
				next = parse_capture_expression( elem, func, vars, local, prev, message );
			} else {
				oper = get_operator( value, func->env->operators_index[ hash_code( value, 0 ) ] );
				if( oper ) {
					/* Operator. */
					next = parse_operator_expression( elem, oper, func, vars, prev, message );
				} else {
					decl = find_decl( func, value, 0, "!.:" );
					if( decl ) {
						type = decl->type;
					}
					switch( type ) {
						case CONST: case GLOBAL:
							/* Global variable reference.*/
							next = parse_global_expression( elem, func, vars, ( struct global_variable * ) decl, prev, message );
							break;
						case FUNCTION:
							/* Function call.*/
							next = parse_call_expression( elem, func, vars, ( struct function * ) decl, prev, message );
							break;
						case STRUCT:
							/* Structure. */
							next = parse_struct_expression( elem, func, vars, ( struct structure * ) decl, prev, message );
							break;
						default:
							sprintf( message, "Unhandled expression '%.64s' on line %d.", value, elem->line );
							break;
					}
				}
			}
		}
	}
	if( message[ 0 ] == 0 && next && next->str.string[ 0 ] == '(' ) {
		sprintf( message, "Unexpected '(' after expression on line %d.", next->line );
	}
	if( message[ 0 ] ) {
		dispose_expressions( prev->next );
		prev->next = NULL;
	}
	return next;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x88, %rsp
movq %r8, %r14
movq %rcx, %rbx
movq %rdi, %rbp
movq 0x8(%rdi), %r12
movzbl (%r12), %eax
leal -0x30(%rax), %ecx
cmpb $0xa, %cl
jae 0x4de7
pushq $0x1
popq %rdi
pushq $0x30
popq %rsi
callq 0x3130
testq %rax, %rax
je 0x4f54
movq %rax, %r15
movq %rax, 0x10(%rbx)
movl 0x28(%rbp), %eax
movl %eax, (%r15)
movq %r15, %rsi
addq $0x28, %rsi
movq %r12, %rdi
callq 0x4b5c
testl %eax, %eax
je 0x4e5c
movl 0x28(%r15), %eax
movl %eax, 0x4(%r15)
leaq -0x1413(%rip), %rax     # 0x39cb
movq %rax, 0x18(%r15)
jmp 0x4f63
cmpl $0x22, %eax
je 0x4f33
movq %rdx, %r13
movq %rsi, %r8
movq 0x20(%rbp), %r15
cmpl $0x24, %eax
je 0x4fbb
cmpl $0x27, %eax
je 0x4e3a
cmpl $0x60, %eax
je 0x4e3a
cmpl $0x5b, %eax
je 0x4e79
cmpl $0x5c, %eax
je 0x4efc
cmpl $0x2d, %eax
jne 0x4fc7
movb 0x1(%r12), %cl
addb $-0x30, %cl
cmpb $0x9, %cl
jbe 0x4d97
jmp 0x4fc7
cmpb $0x0, 0x1(%r12)
je 0x5061
cmpl $0x5b, %eax
je 0x4e79
cmpl $0x27, %eax
jne 0x4fc7
movq %rbp, %rdi
jmp 0x4f23
movq 0x8(%rbp), %rdx
movl 0x28(%rbp), %ecx
leaq 0xc6ef(%rip), %rsi      # 0x11559
movq %r14, %rdi
xorl %eax, %eax
callq 0x3200
jmp 0x4f63
movq %rbx, %r12
movq %r8, %rbx
xorps %xmm0, %xmm0
movaps %xmm0, 0x60(%rsp)
movaps %xmm0, 0x50(%rsp)
pushq $0x1
popq %rdi
pushq $0x20
popq %rsi
callq 0x3130
testq %rax, %rax
je 0x53a7
movq %rax, %r15
movq %r12, %rcx
movq %rax, 0x10(%r12)
movl 0x28(%rbp), %eax
movl %eax, (%r15)
movq 0x18(%rbp), %rdi
movq %r14, (%rsp)
leaq 0x50(%rsp), %r12
leaq 0x14(%rsp), %r9
movq %rbx, %rsi
movq %rcx, %rbx
movq %r13, %rdx
xorl %ecx, %ecx
movq %r12, %r8
callq 0x7b36
movq 0x10(%r12), %rax
movq %rax, 0x8(%r15)
cmpb $0x0, (%r14)
jne 0x4f63
cmpl $0x2, 0x14(%rsp)
jne 0x556d
leaq -0x695(%rip), %rax      # 0x4862
jmp 0x4dde
cmpb $0x0, 0x1(%r12)
setne %cl
testq %r15, %r15
sete %dl
orb %cl, %dl
jne 0x4fc7
movq 0x8(%r15), %rcx
cmpb $0x22, (%rcx)
jne 0x4fc7
movq %r15, %rdi
movq %rbx, %rsi
movq %r14, %rdx
callq 0x5cf9
jmp 0x5976
movq %r12, %rdi
callq 0x403d
testq %rax, %rax
je 0x4f54
movl 0x28(%rbp), %esi
movq %rax, %rdi
movq %r14, %rdx
callq 0x7a3a
movq %rax, 0x10(%rbx)
jmp 0x4f63
movq 0x13215(%rip), %rsi     # 0x18170
movq %r14, %rdi
callq 0x3070
movq 0x20(%rbp), %r15
movb (%r14), %al
testb %al, %al
jne 0x4f94
testq %r15, %r15
je 0x4f94
movq 0x8(%r15), %rax
cmpb $0x28, (%rax)
jne 0x4fa6
movl 0x28(%r15), %edx
leaq 0xc385(%rip), %rsi      # 0x1130c
movq %r14, %rdi
xorl %eax, %eax
callq 0x3200
movb (%r14), %al
testb %al, %al
je 0x4fa6
movq 0x10(%rbx), %rdi
callq 0x3a26
andq $0x0, 0x10(%rbx)
movq %r15, %rax
addq $0x88, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
cmpb $0x0, 0x1(%r12)
je 0x53be
cmpl $0x81, 0x10(%rbp)
jl 0x4fec
movl 0x28(%rbp), %ecx
leaq 0xc2d9(%rip), %rsi      # 0x112b3
movq %r14, %rdi
movq %r12, %rdx
xorl %eax, %eax
callq 0x3200
jmp 0x4f67
cmpl $0x3a, %eax
je 0x514a
cmpl $0x40, %eax
jne 0x52f8
cmpb $0x0, 0x1(%r12)
je 0x5410
movq %rbx, %r13
movq %r8, %rbx
pushq $0x1
popq %rdi
pushq $0x28
popq %rsi
callq 0x3130
testq %rax, %rax
je 0x5592
movq %rax, %r15
incq %r12
movq %rax, 0x10(%r13)
movl 0x28(%rbp), %eax
movl %eax, (%r15)
pushq $0x6
popq %rdx
movq %rbx, %rdi
movq %r12, %rsi
xorl %ecx, %ecx
callq 0x5f5b
movq %rax, 0x20(%r15)
testq %rax, %rax
je 0x56e4
leaq 0x2ba2(%rip), %rax      # 0x7bfa
movq %rax, 0x18(%r15)
jmp 0x56fb
testq %r15, %r15
je 0x513b
movq 0x8(%r15), %rax
cmpb $0x28, (%rax)
jne 0x513b
cmpq $0x0, 0x18(%r15)
je 0x513b
movq %rbx, 0x18(%rsp)
movq %r8, %rbx
movl 0x10(%r15), %edi
callq 0x3638
testq %rax, %rax
je 0x56b5
movq %rax, %r12
movl 0x28(%r15), %eax
movl %eax, 0x28(%r12)
movq 0x8(%r12), %rdi
movq 0x8(%r15), %rsi
callq 0x3070
movq 0x18(%r15), %rdi
callq 0x7a8c
movq %rax, 0x18(%r12)
testq %rax, %rax
je 0x5877
movq %r13, 0x20(%rsp)
movq 0x40(%rbx), %rcx
leaq 0xc415(%rip), %rdi      # 0x114f2
movq %rax, %rsi
movq %r15, %rdx
movq %r14, %r8
callq 0x61d9
cmpb $0x0, (%r14)
jne 0x5886
movq %rax, %r13
testq %rax, %rax
je 0x597e
movq 0x8(%r13), %rdi
movq 0x8(%rbp), %rsi
callq 0x3140
testl %eax, %eax
je 0x597e
movq 0x18(%r12), %rcx
movq %rbx, %rsi
movq %rcx, %rax
movq 0x20(%rcx), %rcx
cmpq %r13, %rcx
jne 0x511e
movq 0x20(%r13), %rcx
movq %rcx, 0x20(%rax)
movq %r12, 0x20(%r13)
jmp 0x5984
movl 0x28(%rbp), %edx
leaq 0xc780(%rip), %rsi      # 0x118c5
jmp 0x56d5
cmpb $0x0, 0x1(%r12)
movq %r8, 0x30(%rsp)
je 0x542c
movq %rbx, 0x18(%rsp)
incq %r12
leaq 0xc5d7(%rip), %rcx      # 0x11741
movq %r8, %rdi
movq %r12, %rsi
xorl %edx, %edx
movq %r8, %rbx
callq 0x5f5b
movq %rax, 0x48(%rsp)
movq 0x48(%rbx), %rdi
movq 0x8(%rbp), %rax
movq %rax, 0x28(%rsp)
leaq 0x1(%rax), %rbx
leaq 0xc5ab(%rip), %rdx      # 0x11742
movq %rbx, %rsi
callq 0x5eb5
movq %rax, %r12
xorps %xmm0, %xmm0
movaps %xmm0, 0x60(%rsp)
movaps %xmm0, 0x50(%rsp)
pushq $0x1
popq %rdi
pushq $0x30
popq %rsi
callq 0x3130
testq %rax, %rax
je 0x56b5
movq %rbx, 0x80(%rsp)
movq 0x18(%rsp), %rbx
movq %rax, 0x10(%rbx)
movl 0x28(%rbp), %ebp
movq %rax, 0x40(%rsp)
movl %ebp, (%rax)
testq %r12, %r12
movq %r13, 0x20(%rsp)
movq %r12, 0x78(%rsp)
je 0x5707
movq 0x10(%r12), %r12
movq $0x0, 0x38(%rsp)
xorl %r13d, %r13d
leaq 0xc538(%rip), %rsi      # 0x11741
movq 0x28(%rsp), %rdi
callq 0x7cc2
testq %r12, %r12
je 0x5586
cmpb $0x0, (%rax)
je 0x5586
movq 0x40(%rsp), %rcx
movq %r12, 0x20(%rcx)
movq 0x20(%r12), %rdi
incq %rax
movq %rax, %rsi
callq 0x7d09
testl %eax, %eax
js 0x58a1
testq %r15, %r15
je 0x5801
movq 0x8(%r15), %rcx
cmpb $0x28, (%rcx)
jne 0x5801
movl %eax, 0x28(%rsp)
movq 0x18(%r15), %rdi
movq %r14, (%rsp)
leaq 0x50(%rsp), %rbp
leaq 0x14(%rsp), %r9
movq 0x30(%rsp), %rsi
movq 0x20(%rsp), %rdx
xorl %ecx, %ecx
movq %rbp, %r8
callq 0x7b36
movq 0x10(%rbp), %rbp
movq 0x40(%rsp), %rdx
movq %rbp, 0x8(%rdx)
movq 0x78(%rsp), %rax
testq %rax, %rax
movq 0x38(%rsp), %rcx
jne 0x52b0
testq %rcx, %rcx
jne 0x52b0
testq %r13, %r13
je 0x5b5f
pushq $0x1
popq %rdi
pushq $0x30
popq %rsi
callq 0x3130
testq %rax, %rax
je 0x5b4b
movq 0x78(%rsp), %rcx
testq %rcx, %rcx
je 0x5baa
movl (%rcx), %ecx
movl %ecx, 0x4(%rax)
leaq -0x1263(%rip), %rcx     # 0x407b
movq 0x40(%rsp), %rdx
movq %rcx, 0x18(%rax)
movq %rbp, 0x10(%rax)
movq %rax, 0x8(%rdx)
incl 0x14(%rsp)
jmp 0x5b5f
movq %r13, 0x20(%rsp)
movq %r8, 0x30(%rsp)
movq 0x48(%r8), %rdi
leaq 0xbfcd(%rip), %rdx      # 0x112da
movq %r12, %rsi
callq 0x5eb5
testq %rax, %rax
je 0x54ca
movq %rax, 0x18(%rsp)
movq 0x8(%rax), %rdi
callq 0x30c0
movq %rax, %r13
pushq $0x1
popq %rdi
pushq $0x20
popq %rsi
callq 0x3130
testq %rax, %rax
je 0x5b37
addq %r12, %r13
movq %rax, 0x10(%rbx)
movl 0x28(%rbp), %ecx
movl %ecx, (%rax)
movq 0x18(%rsp), %rdi
movl (%rdi), %edx
movl %edx, 0x4(%rax)
leaq -0x12e5(%rip), %rdx     # 0x407b
movq %rdx, 0x18(%rax)
movzbl (%r13), %esi
testl %esi, %esi
je 0x4f67
cmpl $0x2b, %esi
je 0x5817
cmpl $0x2d, %esi
je 0x5859
cmpl $0x3a, %esi
je 0x5831
cmpl $0x2e, %esi
jne 0x586b
movq 0x10(%rdi), %rdi
incq %r13
movq %rax, %rsi
movq %r13, %rdx
jmp 0x593e
movq 0x12dc2(%rip), %rsi     # 0x18170
movq %r14, %rdi
callq 0x3070
movq %r12, %rbx
jmp 0x4f63
testq %r15, %r15
je 0x5401
movq 0x8(%r15), %rax
cmpb $0x7b, (%rax)
jne 0x5401
movq 0x18(%r15), %rdi
testq %rdi, %rdi
je 0x57d4
movq 0x40(%r8), %rax
cmpq $0x0, 0x3a0(%rax)
je 0x58cc
callq 0x7a8c
movq %rax, %rdi
testq %rax, %rax
jne 0x58cf
jmp 0x5890
movl 0x28(%rbp), %edx
leaq 0xc179(%rip), %rsi      # 0x11584
jmp 0x56d5
movq %rbp, %rdi
movq %r8, %rsi
movq %r13, %rdx
movq %r8, %rcx
movq %rbx, %r8
movq %r14, %r9
callq 0x5daa
jmp 0x5976
xorps %xmm0, %xmm0
movaps %xmm0, 0x60(%rsp)
movaps %xmm0, 0x50(%rsp)
pushq $0x1
popq %rdi
pushq $0x20
popq %rsi
callq 0x3130
testq %rax, %rax
je 0x5b37
movq %rax, %r12
movq %rax, 0x10(%rbx)
movl 0x28(%rbp), %edx
movl %edx, (%rax)
testq %r15, %r15
je 0x56ce
movq 0x8(%r15), %rax
cmpb $0x28, (%rax)
jne 0x56ce
movq 0x18(%r15), %rdi
movq %r14, (%rsp)
movq %r13, %rdx
leaq 0x50(%rsp), %r13
leaq 0x14(%rsp), %r9
movq 0x30(%rsp), %rsi
xorl %ecx, %ecx
movq %r13, %r8
callq 0x7b36
movq 0x10(%r13), %rax
movq %rax, 0x8(%r12)
cmpb $0x0, (%r14)
jne 0x4f67
movl 0x14(%rsp), %eax
testl %eax, %eax
jle 0x5b9a
decl %eax
movl %eax, 0x4(%r12)
leaq 0x2749(%rip), %rax      # 0x7c09
movq %rax, 0x18(%r12)
jmp 0x58de
movq 0x20(%rsp), %r13
testq %r13, %r13
je 0x55a6
movq 0x18(%r13), %rax
movq 0x48(%rax), %rdi
leaq 0xbdf9(%rip), %rdx      # 0x112e0
movq %r12, %rsi
callq 0x5eb5
testq %rax, %rax
je 0x55a6
movq 0x10(%r13), %rcx
movq %rcx, 0x18(%rsp)
movslq (%rax), %r13
movq %rax, 0x48(%rsp)
movq 0x8(%rax), %rdi
callq 0x30c0
movq %rax, 0x28(%rsp)
pushq $0x1
popq %rdi
pushq $0x30
popq %rsi
callq 0x3130
testq %rax, %rax
je 0x5b37
addq 0x28(%rsp), %r12
shlq $0x4, %r13
movq %rax, 0x10(%rbx)
movl 0x28(%rbp), %ecx
movl %ecx, (%rax)
movq 0x18(%rsp), %rdx
movl (%rdx,%r13), %ecx
movl %ecx, 0x4(%rax)
movl %ecx, 0x28(%rax)
movq 0x8(%rdx,%r13), %rcx
testq %rcx, %rcx
je 0x5909
incq (%rcx)
movq %rcx, 0x20(%rax)
leaq -0x1b94(%rip), %rcx     # 0x39d4
jmp 0x5910
movl 0x28(%rbp), %edx
leaq 0xc05e(%rip), %rsi      # 0x115d5
movq %r14, %rdi
xorl %eax, %eax
callq 0x3200
jmp 0x4f63
leaq 0xc1de(%rip), %rsi      # 0x1176b
jmp 0x5808
movq 0x12bd7(%rip), %rsi     # 0x18170
movq %r14, %rdi
callq 0x3070
jmp 0x56fb
movq %rbx, 0x18(%rsp)
movq 0x30(%rsp), %rbx
movq 0x40(%rbx), %r13
movq %r12, %rdi
xorl %esi, %esi
callq 0x5f40
movl %eax, %eax
movq 0x180(%r13,%rax,8), %rsi
movq %r12, %rdi
callq 0x5f11
testq %rax, %rax
je 0x5777
movq %rax, %r13
xorps %xmm0, %xmm0
movaps %xmm0, 0x60(%rsp)
movaps %xmm0, 0x50(%rsp)
pushq $0x1
popq %rdi
pushq $0x20
popq %rsi
callq 0x3130
testq %rax, %rax
je 0x56b5
movq %rax, %r12
movq 0x18(%rsp), %rbx
movq %rax, 0x10(%rbx)
movl 0x28(%rbp), %ecx
movl %ecx, (%rax)
movsbl 0x8(%r13), %eax
movl %eax, 0x4(%r12)
movq 0x10(%r13), %rax
movq %rax, 0x18(%r12)
cmpl $0x0, 0xc(%r13)
je 0x4f67
testq %r15, %r15
je 0x58f6
movq 0x8(%r15), %rax
cmpb $0x28, (%rax)
jne 0x58f6
movq %r13, %rbp
movq 0x18(%r15), %rdi
movq %r14, (%rsp)
leaq 0x50(%rsp), %r13
leaq 0x14(%rsp), %r9
movq 0x30(%rsp), %rsi
movq 0x20(%rsp), %rdx
xorl %ecx, %ecx
movq %r13, %r8
callq 0x7b36
movq 0x10(%r13), %rax
movq %rax, 0x8(%r12)
cmpb $0x0, (%r14)
jne 0x4f67
movl 0x14(%rsp), %eax
movl 0xc(%rbp), %ecx
cmpl %ecx, %eax
je 0x58de
testl %ecx, %ecx
setns %dl
negl %ecx
cmpl %ecx, %eax
setl %al
orb %dl, %al
je 0x58de
movq (%rbp), %rdx
movl 0x28(%r15), %ecx
leaq 0xbf9e(%rip), %rsi      # 0x1164e
jmp 0x5901
movq 0x12ab4(%rip), %rsi     # 0x18170
movq %r14, %rdi
callq 0x3070
movq 0x18(%rsp), %rbx
jmp 0x4f67
leaq 0xc003(%rip), %rsi      # 0x116d8
movq %r14, %rdi
xorl %eax, %eax
callq 0x3200
jmp 0x4f67
movl 0x28(%rbp), %ecx
leaq 0xbf36(%rip), %rsi      # 0x11624
movq %r14, %rdi
movq %r12, %rdx
xorl %eax, %eax
callq 0x3200
movq 0x20(%rbp), %r15
movq %r13, %rbx
jmp 0x4f67
testq %r13, %r13
je 0x573b
movq 0x18(%r13), %rax
movq 0x48(%rax), %rdi
leaq 0xc027(%rip), %rdx      # 0x11742
movq 0x80(%rsp), %rsi
callq 0x5eb5
testq %rax, %rax
je 0x573b
movq %rax, 0x38(%rsp)
movq 0x10(%rax), %r12
jmp 0x51ff
movq 0x48(%rsp), %r12
testq %r12, %r12
je 0x58b8
movzbl 0x14(%r12), %eax
cmpl $0x3, %eax
je 0x51f6
cmpl $0x4, %eax
jne 0x58b8
movq %r12, %r13
movq 0x28(%r12), %r12
movq $0x0, 0x38(%rsp)
jmp 0x5202
leaq 0xbb61(%rip), %rcx      # 0x112df
movq %rbx, %rdi
movq %r12, %rsi
xorl %edx, %edx
callq 0x5f5b
testq %rax, %rax
movq 0x18(%rsp), %rbx
je 0x58e7
movb 0x14(%rax), %r13b
movzbl %r13b, %edx
leal -0x4(%rdx), %ecx
cmpl $0x2, %ecx
jb 0x59b0
cmpl $0x3, %edx
je 0x5a33
cmpl $0x6, %edx
jne 0x58e7
movq %rbp, %rdi
movq 0x30(%rsp), %rsi
movq 0x20(%rsp), %rdx
movq %rax, %rcx
jmp 0x541c
pushq $0x1
popq %rdi
pushq $0x30
popq %rsi
callq 0x3130
movq %rax, 0x10(%rbx)
testq %rax, %rax
je 0x5890
movl 0x28(%rbp), %ecx
movl %ecx, (%rax)
leaq -0x1e2d(%rip), %rcx     # 0x39cb
movq %rcx, 0x18(%rax)
jmp 0x58de
leaq 0xbb88(%rip), %rsi      # 0x11390
movq %r14, %rdi
movq 0x28(%rsp), %rdx
movl %ebp, %ecx
jmp 0x4fe0
cmpb $0x2b, 0x1(%r13)
jne 0x586b
cmpb $0x0, 0x2(%r13)
jne 0x586b
leaq -0x178b(%rip), %rcx     # 0x40a1
jmp 0x5a2a
movq 0x10(%rdi), %rdi
incq %r13
movq %r14, 0x8(%rsp)
movq %rbx, (%rsp)
movq %rax, %rsi
movq %r13, %rdx
movq %rbp, %rcx
movq 0x30(%rsp), %r8
movq 0x20(%rsp), %r9
jmp 0x5971
cmpb $0x2d, 0x1(%r13)
jne 0x586b
cmpb $0x0, 0x2(%r13)
je 0x5a23
leaq 0xbf35(%rip), %rsi      # 0x117a7
jmp 0x4fda
movq 0x128f2(%rip), %rsi     # 0x18170
movq %r14, %rdi
callq 0x3070
movq 0x18(%rsp), %rbx
jmp 0x59a3
movq 0x128d9(%rip), %rsi     # 0x18170
movq %r14, %rdi
callq 0x3070
jmp 0x58de
leaq 0xbe9c(%rip), %rsi      # 0x11744
movq %r14, %rdi
movq 0x80(%rsp), %rdx
jmp 0x5810
movq $0x0, 0x38(%rsp)
xorl %r13d, %r13d
xorl %r12d, %r12d
jmp 0x5202
incq (%rdi)
movl 0x28(%rbp), %esi
movq %r14, %rdx
callq 0x7a3a
movq %rax, 0x10(%rbx)
movq 0x20(%r15), %r15
jmp 0x4f67
movl 0x28(%rbp), %ecx
leaq 0xb9f2(%rip), %rsi      # 0x112e3
jmp 0x4fda
movq (%r13), %rdx
leaq 0xba8f(%rip), %rsi      # 0x11390
movq %r14, %rdi
jmp 0x4fe0
leaq -0x1f45(%rip), %rcx     # 0x39cb
movq 0x20(%rsp), %r9
movq %rcx, 0x18(%rax)
movzbl (%r12), %ecx
cmpl $0x3a, %ecx
je 0x594e
cmpl $0x2e, %ecx
jne 0x4f67
movq 0x48(%rsp), %rcx
movq 0x10(%rcx), %rdi
incq %r12
movq %rax, %rsi
movq %r12, %rdx
movq %rbp, %rcx
movq %rbx, %r8
movq %r14, %r9
callq 0x7e74
jmp 0x5976
movq 0x48(%rsp), %rcx
movq 0x10(%rcx), %rdi
incq %r12
movq %r14, 0x8(%rsp)
movq %rbx, (%rsp)
movq %rax, %rsi
movq %r12, %rdx
movq %rbp, %rcx
movq 0x30(%rsp), %r8
callq 0x7f3a
movq %rax, %r15
jmp 0x4f67
movq %r12, %r13
movq %rbx, %rsi
movq 0x18(%rsp), %rbx
movq %r13, %rdi
movq 0x20(%rsp), %rdx
movq %rbx, %rcx
movq %r14, %r8
callq 0x4d6c
movq 0x20(%r15), %r15
movq %r13, %r12
movq %r12, %rdi
callq 0x3a69
jmp 0x4f67
movq %rax, %r12
movq 0x8(%rbp), %rdi
movq 0x20(%rbp), %r15
leaq 0xb91d(%rip), %rsi      # 0x112df
callq 0x7cc2
movq %rax, 0x28(%rsp)
pushq $0x1
popq %rdi
pushq $0x30
popq %rsi
callq 0x3130
testq %rax, %rax
je 0x5b37
movq %rax, 0x10(%rbx)
movl 0x28(%rbp), %ecx
movl %ecx, (%rax)
cmpb $0x5, %r13b
jne 0x5c1b
movq 0x38(%r12), %rdx
testq %rdx, %rdx
je 0x5c0f
leaq -0x203d(%rip), %rcx     # 0x39cb
cmpq %rcx, 0x18(%rdx)
jne 0x5c1b
movl 0x4(%rdx), %esi
movl %esi, 0x4(%rax)
movl 0x28(%rdx), %edx
movl %edx, 0x28(%rax)
jmp 0x5c26
leaq -0x1946(%rip), %rcx     # 0x40e4
movq %rcx, 0x18(%rax)
jmp 0x4f67
movq %rax, 0x28(%rsp)
movq 0x8(%rbp), %rdi
movq 0x20(%rbp), %r15
leaq 0xbcfa(%rip), %rsi      # 0x11741
movq %rdi, 0x48(%rsp)
callq 0x7cc2
movq %rax, %r13
xorps %xmm0, %xmm0
movaps %xmm0, 0x60(%rsp)
movaps %xmm0, 0x50(%rsp)
pushq $0x1
popq %rdi
pushq $0x30
popq %rsi
callq 0x3130
testq %rax, %rax
je 0x5b37
movq %rax, %r12
movq %rax, 0x10(%rbx)
movl 0x28(%rbp), %ebp
movl %ebp, (%rax)
movq 0x28(%rsp), %rcx
movq %rcx, 0x20(%rax)
movzbl (%r13), %eax
testl %eax, %eax
je 0x5bf3
cmpl $0x21, %eax
jne 0x5aa7
cmpb $0x0, 0x1(%r13)
je 0x5bf3
movq 0x20(%rcx), %rdi
incq %r13
movq %r13, %rsi
callq 0x7d09
testl %eax, %eax
js 0x5c9b
movl %eax, 0x4(%r12)
movl %eax, 0x28(%r12)
testq %r15, %r15
je 0x5c8a
movq 0x8(%r15), %rax
cmpb $0x28, (%rax)
jne 0x5c8a
movq 0x18(%r15), %rdi
movq %r14, (%rsp)
leaq 0x50(%rsp), %r13
leaq 0x14(%rsp), %r9
movq 0x30(%rsp), %rsi
movq 0x20(%rsp), %rdx
xorl %ecx, %ecx
movq %r13, %r8
callq 0x7b36
movq 0x10(%r13), %rax
movq %rax, 0x8(%r12)
cmpb $0x0, (%r14)
jne 0x56c4
cmpl $0x1, 0x14(%rsp)
jne 0x5cdf
leaq 0x2612(%rip), %rax      # 0x813b
movq %rax, 0x18(%r12)
movq 0x20(%r15), %r15
jmp 0x56c4
movq 0x12632(%rip), %rsi     # 0x18170
movq %r14, %rdi
callq 0x3070
jmp 0x4f67
movq 0x1261e(%rip), %rsi     # 0x18170
movq %r14, %rdi
callq 0x3070
movq 0x40(%rsp), %rdx
cmpb $0x0, (%r14)
jne 0x4f67
movl 0x14(%rsp), %eax
leal -0x1(%rax), %ecx
cmpl $0xfe, %ecx
ja 0x5b9a
movl 0x28(%rsp), %ecx
shll $0x8, %ecx
andl $0x7fffff00, %ecx       # imm = 0x7FFFFF00
orl %ecx, %eax
movl %eax, 0x4(%rdx)
leaq 0x21b9(%rip), %rax      # 0x7d4a
movq %rax, 0x18(%rdx)
jmp 0x58de
movl 0x28(%r15), %edx
leaq 0xbb09(%rip), %rsi      # 0x116ae
jmp 0x56d5
movq 0x38(%rsp), %r12
testq %r12, %r12
je 0x5caf
movq 0x20(%rsp), %rcx
movq 0x10(%rcx), %rcx
movslq (%r12), %rdx
shlq $0x4, %rdx
movl (%rcx,%rdx), %esi
movl %esi, 0x4(%rax)
movl %esi, 0x28(%rax)
movq 0x8(%rcx,%rdx), %rcx
testq %rcx, %rcx
je 0x5cd3
incq (%rcx)
movq %rcx, 0x20(%rax)
leaq -0x221a(%rip), %rcx     # 0x39d4
jmp 0x52de
pushq $0x3
popq %rax
movl %eax, 0x4(%r12)
movl %eax, 0x28(%r12)
incq (%rcx)
leaq -0x2236(%rip), %rax     # 0x39d4
jmp 0x5c91
cmpq $0x0, 0x20(%r12)
je 0x5cbf
movq %r12, 0x20(%rax)
leaq -0x1aff(%rip), %rcx     # 0x4127
movq %rcx, 0x18(%rax)
movq 0x28(%rsp), %rdx
movzbl (%rdx), %ecx
cmpl $0x3a, %ecx
je 0x5c71
cmpl $0x2e, %ecx
je 0x5c61
cmpl $0x21, %ecx
jne 0x4f67
movzbl 0x1(%rdx), %ecx
testl %ecx, %ecx
je 0x4f67
cmpl $0x3a, %ecx
jne 0x5c61
movq 0x28(%r12), %rdi
addq $0x2, %rdx
jmp 0x5c79
movq 0x28(%r12), %rdi
incq %rdx
movq %rax, %rsi
jmp 0x593e
movq 0x28(%r12), %rdi
incq %rdx
movq %r14, 0x8(%rsp)
movq %rbx, (%rsp)
movq %rax, %rsi
jmp 0x5847
leaq -0x22c6(%rip), %rax     # 0x39cb
movq %rax, 0x18(%r12)
jmp 0x4f67
leaq 0xbaa2(%rip), %rsi      # 0x11744
movq %r14, %rdi
movq 0x48(%rsp), %rdx
jmp 0x5810
movq %r13, 0x20(%rax)
leaq -0x1b93(%rip), %rcx     # 0x4127
jmp 0x52de
movl 0x18(%r12), %ecx
movl %ecx, 0x28(%rax)
leaq -0x2303(%rip), %rcx     # 0x39cb
jmp 0x5c26
leaq -0x230f(%rip), %rcx     # 0x39cb
jmp 0x52de
movl 0x28(%r15), %edx
leaq 0xbba0(%rip), %rsi      # 0x1188a
movq %r14, %rdi
xorl %eax, %eax
callq 0x3200
jmp 0x56c4