// File: /workspace/github_c_makefile_star2_O2/lucvoo[P]sparse-dev/expression.c
// Function: primary_expression
struct token *primary_expression(struct token *token, struct expression **tree)
{
	struct expression *expr = NULL;

	switch (token_type(token)) {
	case TOKEN_CHAR ... TOKEN_WIDE_CHAR_EMBEDDED_3:
		expr = alloc_expression(token->pos, EXPR_VALUE);
		expr->flags = CEF_SET_CHAR;
		get_char_constant(token, &expr->value);

		// TODO: handle 'u8', 'u' & 'U' prefixes.
		if (token_type(token) < TOKEN_WIDE_CHAR) {
			expr->ctype = &char_ctype;
			cast_value(expr, &int_ctype, expr);
		} else {
			expr->ctype = wchar_ctype;
		}
		token = token->next;
		break;

	case TOKEN_NUMBER:
		expr = alloc_expression(token->pos, EXPR_VALUE);
		get_number_value(expr, token); /* will see if it's an integer */
		token = token->next;
		break;

	case TOKEN_ZERO_IDENT: {
		expr = alloc_expression(token->pos, EXPR_SYMBOL);
		expr->flags = CEF_SET_INT;
		expr->ctype = &int_ctype;
		expr->symbol = &zero_int;
		expr->symbol_name = token->ident;
		token = token->next;
		break;
	}

	case TOKEN_IDENT: {
		struct symbol *sym = lookup_symbol(token->ident, NS_SYMBOL | NS_TYPEDEF);
		struct token *next = token->next;

		if (!sym) {
			sym = handle_func(token);
			if (token->ident == &__builtin_types_compatible_p_ident) {
				token = builtin_types_compatible_p_expr(token, &expr);
				break;
			}
			if (token->ident == &__builtin_offsetof_ident) {
				token = builtin_offsetof_expr(token, &expr);
				break;
			}
			if (token->ident == &_Generic_ident) {
				token = generic_selection(token->next, &expr);
				break;
			}
		} else if (sym->enum_member) {
			expr = alloc_expression(token->pos, EXPR_VALUE);
			*expr = *sym->initializer;
			/* we want the right position reported, thus the copy */
			expr->pos = token->pos;
			expr->flags = CEF_SET_ENUM;
			token = next;
			break;
		}

		expr = alloc_expression(token->pos, EXPR_SYMBOL);

		/*
		 * We support types as real first-class citizens, with type
		 * comparisons etc:
		 *
		 *	if (typeof(a) == int) ..
		 */
		if (sym && sym->namespace == NS_TYPEDEF) {
			sparse_error(token->pos, "typename in expression");
			sym = NULL;
		}
		expr->symbol_name = token->ident;
		expr->symbol = sym;

		/*
		 * A pointer to an lvalue designating a static storage
		 * duration object is an address constant [6.6(9)].
		 */
		if (sym && (sym->ctype.modifiers & (MOD_TOPLEVEL | MOD_STATIC)))
			expr->flags = CEF_ADDR;

		token = next;
		break;
	}

	case TOKEN_STRING:
	case TOKEN_WIDE_STRING:
		expr = alloc_expression(token->pos, EXPR_STRING);
		token = get_string_constant(token, expr);
		break;

	case TOKEN_SPECIAL:
		if (token->special == '(') {
			expr = alloc_expression(token->pos, EXPR_PREOP);
			expr->op = '(';
			token = parens_expression(token, &expr->unop, "in expression");
			break;
		}
		if (token->special == '[' && lookup_type(token->next)) {
			expr = alloc_expression(token->pos, EXPR_TYPE);
			token = typename(token->next, &expr->symbol, NULL);
			token = expect(token, ']', "in type expression");
			break;
		}
			
	default:
		;
	}
	*tree = expr;
	return token;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x28, %rsp
movq %rsi, %rbx
movq %rdi, %r14
movq (%rdi), %rdi
movl %edi, %eax
andl $0x3f, %eax
addl $-0x3, %eax
cmpl $0xf, %eax
ja 0x330d8
leaq 0x113d8(%rip), %rcx     # 0x43d30
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
pushq $0x1
popq %rsi
callq 0x328b4
movq %rax, %r15
movb $0x38, 0x1(%rax)
leaq 0x20(%rax), %rsi
movq %r14, %rdi
callq 0x3812c
movl (%r14), %eax
andl $0x3f, %eax
cmpl $0xa, %eax
ja 0x329a6
leaq 0x3208a(%rip), %rax     # 0x64a18
movq %rax, 0x10(%r15)
leaq 0x32d9f(%rip), %rsi     # 0x65738
movq %r15, %rdi
movq %r15, %rdx
callq 0xe4ec
jmp 0x329b4
leaq 0x2bcb3(%rip), %rax     # 0x5e660
movq (%rax), %rax
movq %rax, 0x10(%r15)
movq 0x8(%r14), %r14
movq %r15, (%rbx)
movq %r14, %rax
addq $0x28, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
pushq $0x2
popq %rsi
callq 0x328b4
movq %rax, %r15
movq %r14, %rdi
movq %rax, %rsi
callq 0x383b5
movq %rax, %r14
jmp 0x329b8
pushq $0x1
popq %rbp
movl %ebp, %esi
callq 0x328b4
movq %rax, %r15
movq 0x10(%r14), %r13
callq 0xe070
movq %rax, %r12
andl $0x0, (%rax)
cmpb $0x30, (%r13)
jne 0x32b18
callq 0xe300
movq (%rax), %rax
movzbl 0x1(%r13), %ecx
cmpl $0x62, (%rax,%rcx,4)
jne 0x32b18
leaq 0x2(%r13), %rdi
leaq 0x10(%rsp), %rsi
pushq $0x2
popq %rdx
jmp 0x32b22
movq 0x10(%r14), %rdi
pushq $0x12
popq %rsi
callq 0x266e9
movq 0x8(%r14), %rbp
testq %rax, %rax
je 0x32c0d
movq %rax, %r12
testb $0x10, 0x2(%rax)
je 0x32df2
movq (%r14), %rdi
pushq $0x1
popq %rsi
callq 0x328b4
movq %rax, %r15
movq 0xb0(%r12), %rax
movaps (%rax), %xmm0
movaps 0x10(%rax), %xmm1
movaps 0x20(%rax), %xmm2
movaps 0x30(%rax), %xmm3
movaps %xmm0, (%r15)
movaps %xmm1, 0x10(%r15)
movaps %xmm2, 0x20(%r15)
movaps %xmm3, 0x30(%r15)
movq (%r14), %rax
movq %rax, 0x8(%r15)
movb $0x34, 0x1(%r15)
jmp 0x32ea0
pushq $0x3
popq %rsi
callq 0x328b4
movq %rax, %r15
movb $0x31, 0x1(%rax)
leaq 0x32c7c(%rip), %rax     # 0x65738
movq %rax, 0x10(%r15)
leaq 0x353d1(%rip), %rax     # 0x67e98
movq %rax, 0x20(%r15)
movq 0x10(%r14), %rax
movq %rax, 0x28(%r15)
jmp 0x329b4
movl 0x10(%r14), %eax
cmpl $0x5b, %eax
je 0x32d88
cmpl $0x28, %eax
jne 0x330d8
pushq $0x9
popq %rsi
callq 0x328b4
movq %rax, %r15
movl $0x28, 0x4(%rax)
leaq 0x20(%rax), %rsi
leaq 0x112fd(%rip), %rdx     # 0x43e08
movq %r14, %rdi
callq 0x327fd
jmp 0x329e3
leaq 0x10(%rsp), %rsi
movq %r13, %rdi
xorl %edx, %edx
callq 0xe1a0
movq 0x10(%rsp), %rdx
cmpq %r13, %rdx
je 0x32ba9
movb $0x1, %cl
movb $0x1, %sil
movq %rax, 0x18(%rsp)
cmpq $-0x1, %rax
jne 0x32b4a
cmpl $0x22, (%r12)
setne %sil
pushq $0x2
popq %rdi
xorl %eax, %eax
xorl %r8d, %r8d
movq %rdx, %r9
incq %rdx
movq %rdx, 0x10(%rsp)
movzbl (%r9), %r10d
testl %r10d, %r10d
je 0x32e2b
movl %r10d, %r11d
andl $-0x21, %r11d
cmpl $0x4c, %r11d
jne 0x32b95
testl %r8d, %r8d
jne 0x32bdb
movl %ebp, %r8d
cmpb %r10b, (%rdx)
jne 0x32b52
addq $0x2, %r9
movq %r9, 0x10(%rsp)
movq %r9, %rdx
movl %edi, %r8d
jmp 0x32b52
cmpl $0x55, %r11d
jne 0x32ba9
movl %ebp, %eax
testb $0x1, %cl
movl $0x0, %ecx
jne 0x32b52
jmp 0x32bdb
leaq 0x10(%rsp), %r12
movq %r13, %rdi
movq %r12, %rsi
callq 0x2be10
fstpt 0x20(%r15)
movq (%r12), %rax
cmpq %rax, %r13
je 0x32bdb
movzbl (%rax), %ecx
testl %ecx, %ecx
je 0x32f24
cmpb $0x0, 0x1(%rax)
je 0x33091
movq %r14, %rdi
callq 0x294bb
movq 0x8(%r15), %rdi
leaq 0x11391(%rip), %rsi     # 0x43f7f
movq %rax, %rdx
xorl %eax, %eax
callq 0x1120e
movb $0x1, (%r15)
andq $0x0, 0x20(%r15)
leaq 0x32b30(%rip), %rax     # 0x65738
jmp 0x329b0
movq 0x10(%r14), %r13
cmpq 0x27318(%rip), %r13     # 0x59f30
je 0x32c30
cmpq 0x272d7(%rip), %r13     # 0x59ef8
je 0x32c30
cmpq 0x272b6(%rip), %r13     # 0x59ee0
jne 0x32dc8
leaq 0x57339(%rip), %rax     # 0x89f70
movq (%rax), %rax
testq %rax, %rax
je 0x32dc8
cmpq $0x0, 0x18(%rax)
je 0x32dc8
movq (%r14), %rdi
pushq $0x6
popq %rsi
callq 0x2671f
movq %rax, %r15
leaq 0x31db5(%rip), %rcx     # 0x64a18
movq %rcx, 0x60(%rax)
pushq $0x1
popq %rcx
movq %rcx, 0x70(%rax)
movq (%r14), %rcx
movq %rcx, 0xc(%rax)
movq %rax, 0x8(%rsp)
movq (%r14), %rdi
pushq $0x3
popq %rsi
callq 0x2671f
movq %rax, %r12
movq %r15, 0x60(%rax)
pushq $0x1
popq %rax
movq %rax, 0x70(%r12)
movq $0x4, 0x68(%r12)
movq (%r14), %rax
movq %rax, 0xc(%r12)
leaq 0x2b0e4(%rip), %rax     # 0x5dd90
movq (%rax), %rcx
pushq $0x10
popq %rdx
movq %r12, %rdi
movq %r13, %rsi
callq 0x2733a
leaq 0x572ac(%rip), %rax     # 0x89f70
movq (%rax), %rax
movq 0x18(%rax), %rax
movq %rbp, 0x18(%rsp)
movzbl 0x10(%rax), %ebp
leaq 0x1(%rbp), %r13
movl %r13d, %edi
callq 0x2abd2
movq %rax, %r15
leaq 0x4(%rax), %rdi
leaq 0x57282(%rip), %rax     # 0x89f70
movq (%rax), %rax
movq 0x18(%rax), %rsi
addq $0x12, %rsi
movq %rbp, %rdx
callq 0xe1e0
movb $0x0, 0x4(%r15,%rbp)
movq 0x18(%rsp), %rbp
movl $0x80000000, %eax       # imm = 0x80000000
andl (%r15), %eax
orl %r13d, %eax
movl %eax, (%r15)
movq (%r14), %rdi
pushq $0x2
popq %rsi
callq 0x328b4
movq %rax, 0xb0(%r12)
movq %r15, 0x28(%rax)
movq 0xb0(%r12), %rax
movq %r12, 0x10(%rax)
movq (%r14), %r15
xorl %edi, %edi
callq 0x2aafa
movq %r15, 0x8(%rax)
movq %r13, 0x20(%rax)
leaq 0x329e2(%rip), %rcx     # 0x65738
movq %rcx, 0x10(%rax)
movw $0x3101, (%rax)         # imm = 0x3101
movq %rax, 0x58(%r12)
movq 0x8(%rsp), %rcx
movq %rax, 0x58(%rcx)
leaq 0x2b98c(%rip), %rax     # 0x5e700
movl (%rax), %eax
imull %r13d, %eax
movl %eax, 0x50(%rcx)
movl %eax, 0x50(%r12)
movq 0x10(%r14), %r13
jmp 0x32dcb
movq 0x8(%r14), %rdi
callq 0x3346e
testl %eax, %eax
je 0x330d8
movq (%r14), %rdi
pushq $0x4
popq %rsi
callq 0x328b4
movq %rax, %r15
movq 0x8(%r14), %rdi
leaq 0x20(%rax), %rsi
xorl %edx, %edx
callq 0x175d4
leaq 0x11059(%rip), %rdx     # 0x43e16
pushq $0x5d
popq %rsi
movq %rax, %rdi
jmp 0x332b3
xorl %r12d, %r12d
cmpq 0x27196(%rip), %r13     # 0x59f68
je 0x32ea8
cmpq 0x27159(%rip), %r13     # 0x59f38
je 0x32f3c
cmpq 0x271ec(%rip), %r13     # 0x59fd8
je 0x3316b
movq (%r14), %rdi
pushq $0x3
popq %rsi
callq 0x328b4
movq %rax, %r15
testq %r12, %r12
je 0x32e7f
movl $0x1ff00, %eax          # imm = 0x1FF00
andl (%r12), %eax
cmpl $0x200, %eax            # imm = 0x200
jne 0x32e82
movq (%r14), %rdi
leaq 0x10fe0(%rip), %rsi     # 0x43dff
xorl %r12d, %r12d
xorl %eax, %eax
callq 0x1120e
jmp 0x32e82
testb %sil, %sil
movq 0x18(%rsp), %r9
je 0x33451
cmpb $0x30, (%r13)
setne %dl
andb %cl, %dl
xorl %r12d, %r12d
cmpl $0x1, %r8d
je 0x330e0
testl %r8d, %r8d
jne 0x33104
leaq 0x2b8a8(%rip), %rcx     # 0x5e708
movl (%rcx), %ecx
decl %ecx
movq %r9, %rsi
shrq %cl, %rsi
testq $-0x2, %rsi
je 0x33388
pushq $0x1
popq %rsi
jmp 0x330e2
xorl %r12d, %r12d
movq 0x10(%r14), %rax
movq %rax, 0x28(%r15)
movq %r12, 0x20(%r15)
testq %r12, %r12
je 0x32ea0
testb $0x14, 0x68(%r12)
je 0x32ea0
movb $0x40, 0x1(%r15)
movq %rbp, %r14
jmp 0x329b8
movq (%r14), %rdi
pushq $0x16
popq %rsi
callq 0x328b4
movq %rax, %r15
movl $0x10a, 0x4(%rax)       # imm = 0x10A
movq 0x8(%r14), %rdi
movl (%rdi), %eax
andl $0x3f, %eax
cmpl $0x12, %eax
jne 0x32f30
cmpl $0x28, 0x10(%rdi)
jne 0x32f30
movq 0x8(%rdi), %rdi
leaq 0x20(%r15), %rsi
callq 0x33738
movl (%rax), %ecx
andl $0x3f, %ecx
cmpl $0x12, %ecx
jne 0x33376
cmpl $0x2c, 0x10(%rax)
jne 0x33376
movq 0x8(%rax), %rdi
leaq 0x28(%r15), %rsi
callq 0x33738
movl (%rax), %ecx
andl $0x3f, %ecx
cmpl $0x12, %ecx
jne 0x33403
cmpl $0x29, 0x10(%rax)
jne 0x33403
movq 0x8(%rax), %r14
jmp 0x329b8
leaq 0x3336d(%rip), %rax     # 0x66298
jmp 0x330b7
leaq 0x1106a(%rip), %rdx     # 0x43fa1
jmp 0x330cd
andq $0x0, 0x10(%rsp)
movq 0x8(%r14), %rdi
movl (%rdi), %eax
andl $0x3f, %eax
cmpl $0x12, %eax
jne 0x330c6
cmpl $0x28, 0x10(%rdi)
jne 0x330c6
movq 0x8(%rdi), %rdi
leaq 0x20(%rsp), %r15
movq %r15, %rsi
xorl %edx, %edx
callq 0x175d4
movq %rax, %r14
movq (%r15), %rax
movq 0x18(%rax), %rdx
testq %rdx, %rdx
je 0x32f95
addq $0x12, %rdx
movq (%r14), %rdi
leaq 0x1107d(%rip), %rsi     # 0x4400b
xorl %eax, %eax
callq 0x1120e
movq (%r14), %rdi
movl %edi, %eax
andl $0x3f, %eax
cmpl $0x12, %eax
jne 0x333b7
cmpl $0x2c, 0x10(%r14)
jne 0x333b7
pushq $0x2e
popq %rax
leaq 0x10(%rsp), %r13
pushq $0x1e
popq %rbp
xorl %r15d, %r15d
cmpl $0x2e, %eax
je 0x32fed
cmpl $0x5b, %eax
je 0x33025
cmpl $0x104, %eax            # imm = 0x104
jne 0x33411
movl %ebp, %esi
callq 0x328b4
movl $0x5b, 0x4(%rax)
movq %rax, (%r13)
addq $0x28, %rax
movq %rax, %r13
movq 0x8(%r14), %r14
movq (%r14), %rdi
movl %ebp, %esi
callq 0x328b4
movq %rax, %r12
movl $0x2e, 0x4(%rax)
movq (%r14), %rdi
movl %edi, %eax
andl $0x3f, %eax
cmpl $0x3, %eax
jne 0x33426
movq 0x10(%r14), %rax
movq %rax, 0x30(%r12)
movq 0x8(%r14), %r14
jmp 0x3306a
movq 0x8(%r14), %r14
movq (%r14), %rdi
movl %ebp, %esi
callq 0x328b4
movq %rax, %r12
movl $0x5b, 0x4(%rax)
leaq 0x30(%rax), %rsi
movq %r14, %rdi
callq 0x33661
movq %rax, %rdi
pushq $0x5d
popq %rsi
leaq 0x11043(%rip), %rdx     # 0x44099
callq 0x17480
movq %rax, %r14
cmpq $0x0, 0x30(%r12)
je 0x329b8
movq %r12, (%r13)
movq %r12, %r13
addq $0x28, %r13
movq (%r14), %rdi
movl %edi, %ecx
andl $0x3f, %ecx
xorl %eax, %eax
cmpl $0x12, %ecx
jne 0x32fbf
movl 0x10(%r14), %eax
jmp 0x32fbf
leaq 0x33120(%rip), %rax     # 0x661b8
cmpl $0x46, %ecx
je 0x330b7
cmpl $0x6c, %ecx
je 0x330b0
cmpl $0x66, %ecx
je 0x330b7
cmpl $0x4c, %ecx
jne 0x32bdb
leaq 0x332c1(%rip), %rax     # 0x66378
movq %rax, 0x10(%r15)
movw $0x221c, (%r15)         # imm = 0x221C
jmp 0x329b4
leaq 0x10f71(%rip), %rdx     # 0x4403e
pushq $0x28
popq %rsi
callq 0x17480
movq %rax, %r14
xorl %r15d, %r15d
jmp 0x329b8
xorl %esi, %esi
leaq 0x2b623(%rip), %rcx     # 0x5e70c
movl (%rcx), %ecx
decl %ecx
movq %r9, %rdi
shrq %cl, %rdi
testq $-0x2, %rdi
je 0x33357
pushq $0x1
popq %r12
leaq 0x2b605(%rip), %rcx     # 0x5e710
movl (%rcx), %ecx
decl %ecx
movq %r9, %rsi
shrq %cl, %rsi
testq $-0x2, %rsi
jne 0x33451
pushq $0x2
popq %rsi
movl %esi, 0x4(%rsp)
leaq 0xc893(%rip), %r13      # 0x3f9c3
btq %rcx, %r9
jae 0x332bd
pushq $0x1
popq %rax
movl %eax, 0x8(%rsp)
testb %dl, %dl
je 0x332c1
movq %r14, %rdi
callq 0x294bb
movq 0x8(%r15), %rdi
leaq 0x10cf6(%rip), %rsi     # 0x43e52
movq %rax, %rdx
xorl %eax, %eax
callq 0x1108a
jmp 0x332c1
movq 0x8(%r14), %r14
movq (%r14), %rdi
pushq $0x1f
popq %rsi
callq 0x328b4
movq %rax, %r15
leaq 0x20(%rax), %r12
leaq 0x10f2d(%rip), %rdx     # 0x440b5
pushq $0x28
popq %rsi
movq %r14, %rdi
callq 0x17480
movq %rax, %rdi
movq %r12, %rsi
callq 0x335c4
movq %rax, %r12
movq (%rax), %rax
movl %eax, %ecx
andl $0x3f, %ecx
cmpl $0x12, %ecx
jne 0x332a6
cmpl $0x2c, 0x10(%r12)
jne 0x332a6
leaq 0x30(%r15), %r13
leaq 0x28(%r15), %rbp
andl $0x3f, %eax
cmpl $0x12, %eax
jne 0x332a6
cmpl $0x2c, 0x10(%r12)
jne 0x332a6
movq 0x8(%r12), %r12
movq %r12, %rdi
callq 0x3346e
testl %eax, %eax
je 0x33234
xorl %edi, %edi
callq 0x327ac
movq %rax, %r14
movq %r12, %rdi
movq %rax, %rsi
xorl %edx, %edx
callq 0x175d4
movq %rax, %rdi
pushq $0x3a
popq %rsi
leaq 0x10eb3(%rip), %rdx     # 0x440c6
callq 0x17480
leaq 0x8(%r14), %rsi
movq %rax, %rdi
callq 0x335c4
movq %rax, %r12
movq %r14, (%r13)
addq $0x10, %r14
movq %r14, %r13
jmp 0x3329d
movq (%r12), %rdi
movl %edi, %eax
andl $0x3f, %eax
cmpl $0x3, %eax
jne 0x3329d
leaq 0x2ac07(%rip), %rax     # 0x5de50
cmpq %rax, 0x10(%r12)
jne 0x3329d
cmpq $0x0, (%rbp)
je 0x3327b
leaq 0x10e77(%rip), %rsi     # 0x440d5
xorl %eax, %eax
callq 0x1108a
movq (%rbp), %rax
movq 0x8(%rax), %rdi
leaq 0x10e88(%rip), %rsi     # 0x440fc
xorl %eax, %eax
callq 0x10ddc
movq 0x8(%r12), %rdi
pushq $0x3a
popq %rsi
leaq 0x10e3c(%rip), %rdx     # 0x440c6
callq 0x17480
movq %rax, %rdi
movq %rbp, %rsi
callq 0x335c4
movq %rax, %r12
movq (%r12), %rax
jmp 0x331c6
leaq 0x10e67(%rip), %rdx     # 0x44114
pushq $0x29
popq %rsi
movq %r12, %rdi
callq 0x17480
jmp 0x329e3
movl %eax, 0x8(%rsp)
movq %r13, %rbp
testl %r12d, %r12d
je 0x3330f
leaq 0x2db20(%rip), %rax     # 0x60df0
cmpl $0x0, (%rax)
je 0x3330f
movq %r14, %rdi
callq 0x294bb
cmpl $0x0, 0x8(%rsp)
leaq 0x65e4(%rip), %rdx      # 0x398cd
leaq 0x10bb1(%rip), %rcx     # 0x43ea1
cmoveq %rdx, %rcx
movq 0x8(%r15), %rdi
leaq 0x10b80(%rip), %rsi     # 0x43e7f
movq %rax, %rdx
movq %r13, %r8
movq %rbp, %r9
xorl %eax, %eax
callq 0x1108a
testb $0x2, %r12b
je 0x33332
movq %r14, %rdi
callq 0x294bb
movq 0x8(%r15), %rdi
leaq 0x10b83(%rip), %rsi     # 0x43eab
movq %rax, %rdx
xorl %eax, %eax
callq 0x1108a
movw $0x3101, (%r15)         # imm = 0x3101
movl 0x4(%rsp), %edi
movl 0x8(%rsp), %esi
callq 0x175b7
movq %rax, 0x10(%r15)
movq 0x18(%rsp), %rax
movq %rax, 0x20(%r15)
jmp 0x329b4
leaq 0x656f(%rip), %rbp      # 0x398cd
leaq 0xc65e(%rip), %r13      # 0x3f9c3
btq %rcx, %r9
jae 0x333c9
testb %dl, %dl
je 0x333dc
pushq $0x3
jmp 0x33102
leaq 0x10c47(%rip), %rdx     # 0x43fc4
pushq $0x2c
popq %rsi
movq %rax, %rdi
jmp 0x330d0
leaq 0x653e(%rip), %r13      # 0x398cd
xorl %r12d, %r12d
btq %rcx, %r9
jae 0x333ef
pushq $0x1
popq %rsi
movl %esi, 0x8(%rsp)
movq %r13, %rbp
movl $0x0, 0x4(%rsp)
testb %dl, %dl
jne 0x330e2
jmp 0x332c4
leaq 0x10c97(%rip), %rdx     # 0x44055
pushq $0x2c
popq %rsi
movq %r14, %rdi
jmp 0x330d0
pushq $0x1
popq %rcx
movl %ecx, 0x4(%rsp)
movl %eax, 0x8(%rsp)
movl %esi, %r12d
jmp 0x332c4
pushq $0x1
popq %rax
movl %esi, %r12d
movl %eax, 0x8(%rsp)
movl %eax, 0x4(%rsp)
jmp 0x332c4
movl %eax, 0x8(%rsp)
movq %r13, %rbp
movl $0x0, 0x4(%rsp)
jmp 0x332c4
leaq 0x10bda(%rip), %rdx     # 0x43fe4
pushq $0x29
jmp 0x3337f
cmpl $0x29, %eax
jne 0x3343c
movq 0x20(%rsp), %rax
movq 0x10(%rsp), %r15
movq %rax, 0x20(%r15)
jmp 0x3343f
leaq 0x10c57(%rip), %rsi     # 0x44084
xorl %r15d, %r15d
xorl %eax, %eax
callq 0x1120e
jmp 0x329b8
xorl %r15d, %r15d
leaq 0x10c23(%rip), %rdx     # 0x44069
pushq $0x29
popq %rsi
movq %r14, %rdi
jmp 0x332b3
movq %r14, %rdi
callq 0x294bb
movq 0x8(%r15), %rdi
leaq 0x10ae8(%rip), %rsi     # 0x43f4c
movq %rax, %rdx
xorl %eax, %eax
callq 0x1132a