// File: /workspace/github_c_makefile_star2_O0/Ihsoh[P]ilang/compiler/frontend/semantics.c
// Function: expr_member_arridx_fncall
static void _expr_member_arridx_fncall(
	ParserContext *ctx,
	ParserASTNode *node
) {
	assert(ctx);
	assert(node);

	switch (node->type) {
		case FE_NODE_EXPR_MEMBER: {
			assert(node->nchilds == 2);

			ParserASTNode *node_expr = node->childs[0];
			ParserASTNode *node_id = node->childs[1];
			_expr_parenthesis(ctx, node_expr);

			if (FE_EXPR_AST_NODE_GET_TYPE(node_expr) != FE_TYPE_STRUCT) {
				_SYNERR_NODE(ctx, node_expr, "need struct type expression.");
			}
			ParserASTNode *struct_type_node = FE_EXPR_AST_NODE_GET_TYPE_NODE(node_expr);
			ParserASTNode *type_node = _get_struct_member_type_node(
				ctx, node, struct_type_node->childs[0]->token, node_id->token
			);
			FE_EXPR_AST_NODE_SET_TYPE(node, _get_type_by_type_node(ctx, type_node));
			FE_EXPR_AST_NODE_SET_TYPE_NODE(node, type_node);

			FE_EXPR_AST_NODE_SET_CONSTANT(node, false);
			break;
		}
		case FE_NODE_EXPR_PMEMBER: {
			assert(node->nchilds == 2);

			ParserASTNode *node_expr = node->childs[0];
			ParserASTNode *node_id = node->childs[1];
			_expr_parenthesis(ctx, node_expr);
			
			if (FE_EXPR_AST_NODE_GET_TYPE(node_expr) != FE_TYPE_POINTER) {
				_SYNERR_NODE(ctx, node_expr, "need struct pointer type expression.");
			}
			ParserASTNode *struct_pointer_type_node = FE_EXPR_AST_NODE_GET_TYPE_NODE(node_expr);
			assert(struct_pointer_type_node);
			ParserASTNode *struct_type_node = struct_pointer_type_node->childs[0];
			if (_get_type_by_type_node(ctx, struct_type_node) != FE_TYPE_STRUCT) {
				_SYNERR_NODE(ctx, node_expr, "need struct pointer type expression.");
			}
			assert(struct_type_node);
			assert(struct_type_node->nchilds == 1);
			assert(struct_type_node->childs[0]);
			assert(struct_type_node->childs[0]->token);
			assert(node_id->token);

			ParserASTNode *type_node = _get_struct_member_type_node(
				ctx, node, struct_type_node->childs[0]->token, node_id->token
			);
			FE_EXPR_AST_NODE_SET_TYPE(node, _get_type_by_type_node(ctx, type_node));
			FE_EXPR_AST_NODE_SET_TYPE_NODE(node, type_node);

			FE_EXPR_AST_NODE_SET_CONSTANT(node, false);
			break;
		}
		case FE_NODE_EXPR_ARRAY_INDEX: {
			assert(node->nchilds == 2);

			ParserASTNode *node_expr = node->childs[0];
			ParserASTNode *node_index = node->childs[1];
			_expr_parenthesis(ctx, node_expr);
			_expr(ctx, node_index);

			uint8_t node_expr_type = FE_EXPR_AST_NODE_GET_TYPE(node_expr);
			if (node_expr_type == FE_TYPE_POINTER) {
				ParserASTNode *node_type = FE_EXPR_AST_NODE_GET_TYPE_NODE(node_expr);
				assert(node_type);
				assert(node_type->nchilds == 1);
				
				FE_EXPR_AST_NODE_SET_TYPE(node, _get_type_by_type_node(ctx, node_type->childs[0]));
				FE_EXPR_AST_NODE_SET_TYPE_NODE(node, node_type->childs[0]);
			} else if (node_expr_type == FE_TYPE_ARRAY) {
				ParserASTNode *node_type = FE_EXPR_AST_NODE_GET_TYPE_NODE(node_expr);
				assert(node_type);
				assert(node_type->nchilds == 2);

				ParserASTNode *node_array_dims = node_type->childs[0];
				ParserASTNode *node_array_type = node_type->childs[1];

				if (node_array_dims->nchilds == 1) {
					FE_EXPR_AST_NODE_SET_TYPE(node, _get_type_by_type_node(ctx, node_array_type));
					FE_EXPR_AST_NODE_SET_TYPE_NODE(node, node_array_type);
				} else if (node_array_dims->nchilds > 1) {
					ParserASTNode *new_node_array_type = _NEW_NODE(ctx, FE_NODE_TYPE_ARRAY, NULL);
					ParserASTNode *new_node_array_dims = _NEW_NODE(ctx, FE_NODE_TYPE_ARRAY_DIMS, NULL);

					for (int32_t i = 1; i < node_array_dims->nchilds; i++) {
						parser_add_child(ctx, new_node_array_dims, node_array_dims->childs[i]);
					}

					parser_add_child(ctx, new_node_array_type, new_node_array_dims);
					parser_add_child(ctx, new_node_array_type, node_array_type);
					FE_EXPR_AST_NODE_SET_TYPE(node, _get_type_by_type_node(ctx, new_node_array_type));
					FE_EXPR_AST_NODE_SET_TYPE_NODE(node, new_node_array_type);
				} else {
					assert(0);
				}
			} else {
				_SYNERR_NODE(ctx, node_expr, "need pointer type or array type expression.");
			}

			FE_EXPR_AST_NODE_SET_CONSTANT(node, false);
			break;
		}
		case FE_NODE_EXPR_FUNC_CALL: {
			assert(node->nchilds == 2);
			
			ParserASTNode *node_expr = node->childs[0];
			ParserASTNode *node_func_params = node->childs[1];

			_expr_parenthesis(ctx, node_expr);

			ParserASTNode *node_expr_type = FE_EXPR_AST_NODE_GET_TYPE_NODE(node_expr);

			if (node_expr_type->type == FE_NODE_TYPE_POINTER
					&& node_expr_type->childs[0]->type == FE_NODE_TYPE_FUNC) {
				ParserASTNode *node_expr_params = node_expr_type->childs[0]->childs[0];

				_check_fncall_params(ctx, node_expr, node_expr_params, node_func_params);

				if (node_expr_type->childs[0]->nchilds == 1) {
					FE_EXPR_AST_NODE_SET_TYPE(node, FE_TYPE_VOID);
					FE_EXPR_AST_NODE_SET_TYPE_NODE(node, _NODE_TYPE_VOID);
				} else {
					ParserASTNode *node_expr_ret_type = node_expr_type->childs[0]->childs[1];
					FE_EXPR_AST_NODE_SET_TYPE(node, _get_type_by_type_node(ctx, node_expr_ret_type));
					FE_EXPR_AST_NODE_SET_TYPE_NODE(node, node_expr_ret_type);
				}
			} else {
				_SYNERR_NODE(ctx, node_expr, "function call need function pointer type.");
			}

			FE_EXPR_AST_NODE_SET_CONSTANT(node, false);
			break;
		}
		default: {
			_expr_parenthesis(ctx, node);
			break;
		}
	}
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x14f0, %rsp           # imm = 0x14F0
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
cmpq $0x0, -0x8(%rbp)
je 0x59d7c
jmp 0x59d9b
leaq 0x227d3(%rip), %rdi     # 0x7c556
leaq 0x244c0(%rip), %rsi     # 0x7e24a
movl $0xd1c, %edx            # imm = 0xD1C
leaq 0x252a0(%rip), %rcx     # 0x7f036
callq 0x30a0
cmpq $0x0, -0x10(%rbp)
je 0x59da4
jmp 0x59dc3
leaq 0x1c228(%rip), %rdi     # 0x75fd3
leaq 0x24498(%rip), %rsi     # 0x7e24a
movl $0xd1d, %edx            # imm = 0xD1D
leaq 0x25278(%rip), %rcx     # 0x7f036
callq 0x30a0
movq -0x10(%rbp), %rax
movl (%rax), %eax
addl $0xfffff130, %eax       # imm = 0xFFFFF130
movl %eax, %ecx
movq %rcx, -0x14e8(%rbp)
subl $0x3, %eax
ja 0x5a68a
movq -0x14e8(%rbp), %rax
leaq 0x24232(%rip), %rcx     # 0x7e020
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq -0x10(%rbp), %rax
cmpl $0x2, 0x44(%rax)
jne 0x59e03
jmp 0x59e22
leaq 0x2486a(%rip), %rdi     # 0x7e674
leaq 0x24439(%rip), %rsi     # 0x7e24a
movl $0xd21, %edx            # imm = 0xD21
leaq 0x25219(%rip), %rcx     # 0x7f036
callq 0x30a0
movq -0x10(%rbp), %rax
movq 0x48(%rax), %rax
movq (%rax), %rax
movq %rax, -0x18(%rbp)
movq -0x10(%rbp), %rax
movq 0x48(%rax), %rax
movq 0x8(%rax), %rax
movq %rax, -0x20(%rbp)
movq -0x8(%rbp), %rdi
movq -0x18(%rbp), %rsi
callq 0x5a6a0
movq -0x18(%rbp), %rax
movzbl 0x60(%rax), %eax
cmpl $0xd, %eax
je 0x59e89
leaq -0x420(%rbp), %rdi
leaq 0x2520f(%rip), %rsi     # 0x7f078
movb $0x0, %al
callq 0x3160
movq -0x8(%rbp), %rax
movq 0x58(%rax), %rax
movq -0x8(%rbp), %rdi
movq -0x18(%rbp), %rsi
leaq -0x420(%rbp), %rdx
callq *%rax
movq -0x18(%rbp), %rax
movq 0x68(%rax), %rax
movq %rax, -0x428(%rbp)
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x428(%rbp), %rax
movq 0x48(%rax), %rax
movq (%rax), %rax
movq 0x10(%rax), %rdx
movq -0x20(%rbp), %rax
movq 0x10(%rax), %rcx
callq 0x4cff0
movq %rax, -0x430(%rbp)
movq -0x8(%rbp), %rdi
movq -0x430(%rbp), %rsi
callq 0x4d750
movb %al, %cl
movq -0x10(%rbp), %rax
movb %cl, 0x60(%rax)
movq -0x430(%rbp), %rcx
movq -0x10(%rbp), %rax
movq %rcx, 0x68(%rax)
movq -0x10(%rbp), %rax
movb $0x0, 0x70(%rax)
jmp 0x5a697
movq -0x10(%rbp), %rax
cmpl $0x2, 0x44(%rax)
jne 0x59f07
jmp 0x59f26
leaq 0x24766(%rip), %rdi     # 0x7e674
leaq 0x24335(%rip), %rsi     # 0x7e24a
movl $0xd35, %edx            # imm = 0xD35
leaq 0x25115(%rip), %rcx     # 0x7f036
callq 0x30a0
movq -0x10(%rbp), %rax
movq 0x48(%rax), %rax
movq (%rax), %rax
movq %rax, -0x438(%rbp)
movq -0x10(%rbp), %rax
movq 0x48(%rax), %rax
movq 0x8(%rax), %rax
movq %rax, -0x440(%rbp)
movq -0x8(%rbp), %rdi
movq -0x438(%rbp), %rsi
callq 0x5a6a0
movq -0x438(%rbp), %rax
movzbl 0x60(%rax), %eax
cmpl $0x10, %eax
je 0x59f9c
leaq -0x840(%rbp), %rdi
leaq 0x2511c(%rip), %rsi     # 0x7f095
movb $0x0, %al
callq 0x3160
movq -0x8(%rbp), %rax
movq 0x58(%rax), %rax
movq -0x8(%rbp), %rdi
movq -0x438(%rbp), %rsi
leaq -0x840(%rbp), %rdx
callq *%rax
movq -0x438(%rbp), %rax
movq 0x68(%rax), %rax
movq %rax, -0x848(%rbp)
cmpq $0x0, -0x848(%rbp)
je 0x59fba
jmp 0x59fd9
leaq 0x250f9(%rip), %rdi     # 0x7f0ba
leaq 0x24282(%rip), %rsi     # 0x7e24a
movl $0xd3f, %edx            # imm = 0xD3F
leaq 0x25062(%rip), %rcx     # 0x7f036
callq 0x30a0
movq -0x848(%rbp), %rax
movq 0x48(%rax), %rax
movq (%rax), %rax
movq %rax, -0x850(%rbp)
movq -0x8(%rbp), %rdi
movq -0x850(%rbp), %rsi
callq 0x4d750
movzbl %al, %eax
cmpl $0xd, %eax
je 0x5a037
leaq -0xc50(%rbp), %rdi
leaq 0x25081(%rip), %rsi     # 0x7f095
movb $0x0, %al
callq 0x3160
movq -0x8(%rbp), %rax
movq 0x58(%rax), %rax
movq -0x8(%rbp), %rdi
movq -0x438(%rbp), %rsi
leaq -0xc50(%rbp), %rdx
callq *%rax
cmpq $0x0, -0x850(%rbp)
je 0x5a043
jmp 0x5a062
leaq 0x25089(%rip), %rdi     # 0x7f0d3
leaq 0x241f9(%rip), %rsi     # 0x7e24a
movl $0xd44, %edx            # imm = 0xD44
leaq 0x24fd9(%rip), %rcx     # 0x7f036
callq 0x30a0
movq -0x850(%rbp), %rax
cmpl $0x1, 0x44(%rax)
jne 0x5a071
jmp 0x5a090
leaq 0x2506c(%rip), %rdi     # 0x7f0e4
leaq 0x241cb(%rip), %rsi     # 0x7e24a
movl $0xd45, %edx            # imm = 0xD45
leaq 0x24fab(%rip), %rcx     # 0x7f036
callq 0x30a0
movq -0x850(%rbp), %rax
movq 0x48(%rax), %rax
cmpq $0x0, (%rax)
je 0x5a0a3
jmp 0x5a0c2
leaq 0x25059(%rip), %rdi     # 0x7f103
leaq 0x24199(%rip), %rsi     # 0x7e24a
movl $0xd46, %edx            # imm = 0xD46
leaq 0x24f79(%rip), %rcx     # 0x7f036
callq 0x30a0
movq -0x850(%rbp), %rax
movq 0x48(%rax), %rax
movq (%rax), %rax
cmpq $0x0, 0x10(%rax)
je 0x5a0d9
jmp 0x5a0f8
leaq 0x2503f(%rip), %rdi     # 0x7f11f
leaq 0x24163(%rip), %rsi     # 0x7e24a
movl $0xd47, %edx            # imm = 0xD47
leaq 0x24f43(%rip), %rcx     # 0x7f036
callq 0x30a0
movq -0x440(%rbp), %rax
cmpq $0x0, 0x10(%rax)
je 0x5a108
jmp 0x5a127
leaq 0x25033(%rip), %rdi     # 0x7f142
leaq 0x24134(%rip), %rsi     # 0x7e24a
movl $0xd48, %edx            # imm = 0xD48
leaq 0x24f14(%rip), %rcx     # 0x7f036
callq 0x30a0
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x850(%rbp), %rax
movq 0x48(%rax), %rax
movq (%rax), %rax
movq 0x10(%rax), %rdx
movq -0x440(%rbp), %rax
movq 0x10(%rax), %rcx
callq 0x4cff0
movq %rax, -0xc58(%rbp)
movq -0x8(%rbp), %rdi
movq -0xc58(%rbp), %rsi
callq 0x4d750
movb %al, %cl
movq -0x10(%rbp), %rax
movb %cl, 0x60(%rax)
movq -0xc58(%rbp), %rcx
movq -0x10(%rbp), %rax
movq %rcx, 0x68(%rax)
movq -0x10(%rbp), %rax
movb $0x0, 0x70(%rax)
jmp 0x5a697
movq -0x10(%rbp), %rax
cmpl $0x2, 0x44(%rax)
jne 0x5a199
jmp 0x5a1b8
leaq 0x244d4(%rip), %rdi     # 0x7e674
leaq 0x240a3(%rip), %rsi     # 0x7e24a
movl $0xd54, %edx            # imm = 0xD54
leaq 0x24e83(%rip), %rcx     # 0x7f036
callq 0x30a0
movq -0x10(%rbp), %rax
movq 0x48(%rax), %rax
movq (%rax), %rax
movq %rax, -0xc60(%rbp)
movq -0x10(%rbp), %rax
movq 0x48(%rax), %rax
movq 0x8(%rax), %rax
movq %rax, -0xc68(%rbp)
movq -0x8(%rbp), %rdi
movq -0xc60(%rbp), %rsi
callq 0x5a6a0
movq -0x8(%rbp), %rdi
movq -0xc68(%rbp), %rsi
callq 0x4f4b0
movq -0xc60(%rbp), %rax
movb 0x60(%rax), %al
movb %al, -0xc69(%rbp)
movzbl -0xc69(%rbp), %eax
cmpl $0x10, %eax
jne 0x5a2c3
movq -0xc60(%rbp), %rax
movq 0x68(%rax), %rax
movq %rax, -0xc78(%rbp)
cmpq $0x0, -0xc78(%rbp)
je 0x5a23b
jmp 0x5a25a
leaq 0x1a4f1(%rip), %rdi     # 0x74733
leaq 0x24001(%rip), %rsi     # 0x7e24a
movl $0xd5e, %edx            # imm = 0xD5E
leaq 0x24de1(%rip), %rcx     # 0x7f036
callq 0x30a0
movq -0xc78(%rbp), %rax
cmpl $0x1, 0x44(%rax)
jne 0x5a269
jmp 0x5a288
leaq 0x1a504(%rip), %rdi     # 0x74774
leaq 0x23fd3(%rip), %rsi     # 0x7e24a
movl $0xd5f, %edx            # imm = 0xD5F
leaq 0x24db3(%rip), %rcx     # 0x7f036
callq 0x30a0
movq -0x8(%rbp), %rdi
movq -0xc78(%rbp), %rax
movq 0x48(%rax), %rax
movq (%rax), %rsi
callq 0x4d750
movb %al, %cl
movq -0x10(%rbp), %rax
movb %cl, 0x60(%rax)
movq -0xc78(%rbp), %rax
movq 0x48(%rax), %rax
movq (%rax), %rcx
movq -0x10(%rbp), %rax
movq %rcx, 0x68(%rax)
jmp 0x5a4f5
movzbl -0xc69(%rbp), %eax
cmpl $0xe, %eax
jne 0x5a4c2
movq -0xc60(%rbp), %rax
movq 0x68(%rax), %rax
movq %rax, -0xc80(%rbp)
cmpq $0x0, -0xc80(%rbp)
je 0x5a2f1
jmp 0x5a310
leaq 0x1a43b(%rip), %rdi     # 0x74733
leaq 0x23f4b(%rip), %rsi     # 0x7e24a
movl $0xd65, %edx            # imm = 0xD65
leaq 0x24d2b(%rip), %rcx     # 0x7f036
callq 0x30a0
movq -0xc80(%rbp), %rax
cmpl $0x2, 0x44(%rax)
jne 0x5a31f
jmp 0x5a33e
leaq 0x1a522(%rip), %rdi     # 0x74848
leaq 0x23f1d(%rip), %rsi     # 0x7e24a
movl $0xd66, %edx            # imm = 0xD66
leaq 0x24cfd(%rip), %rcx     # 0x7f036
callq 0x30a0
movq -0xc80(%rbp), %rax
movq 0x48(%rax), %rax
movq (%rax), %rax
movq %rax, -0xc88(%rbp)
movq -0xc80(%rbp), %rax
movq 0x48(%rax), %rax
movq 0x8(%rax), %rax
movq %rax, -0xc90(%rbp)
movq -0xc88(%rbp), %rax
cmpl $0x1, 0x44(%rax)
jne 0x5a3a3
movq -0x8(%rbp), %rdi
movq -0xc90(%rbp), %rsi
callq 0x4d750
movb %al, %cl
movq -0x10(%rbp), %rax
movb %cl, 0x60(%rax)
movq -0xc90(%rbp), %rcx
movq -0x10(%rbp), %rax
movq %rcx, 0x68(%rax)
jmp 0x5a4c0
movq -0xc88(%rbp), %rax
cmpl $0x1, 0x44(%rax)
jle 0x5a49f
movq -0x8(%rbp), %rdi
movl $0x420, %esi            # imm = 0x420
leaq 0x22c04(%rip), %rdx     # 0x7cfc8
xorl %eax, %eax
movl %eax, %ecx
callq 0x58210
movq %rax, -0xc98(%rbp)
movq -0x8(%rbp), %rdi
movl $0x421, %esi            # imm = 0x421
leaq 0x1a3e5(%rip), %rdx     # 0x747c9
xorl %eax, %eax
movl %eax, %ecx
callq 0x58210
movq %rax, -0xca0(%rbp)
movl $0x1, -0xca4(%rbp)
movl -0xca4(%rbp), %eax
movq -0xc88(%rbp), %rcx
cmpl 0x44(%rcx), %eax
jge 0x5a447
movq -0x8(%rbp), %rdi
movq -0xca0(%rbp), %rsi
movq -0xc88(%rbp), %rax
movq 0x48(%rax), %rax
movslq -0xca4(%rbp), %rcx
movq (%rax,%rcx,8), %rdx
callq 0x7e20
movl -0xca4(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xca4(%rbp)
jmp 0x5a3fe
movq -0x8(%rbp), %rdi
movq -0xc98(%rbp), %rsi
movq -0xca0(%rbp), %rdx
callq 0x7e20
movq -0x8(%rbp), %rdi
movq -0xc98(%rbp), %rsi
movq -0xc90(%rbp), %rdx
callq 0x7e20
movq -0x8(%rbp), %rdi
movq -0xc98(%rbp), %rsi
callq 0x4d750
movb %al, %cl
movq -0x10(%rbp), %rax
movb %cl, 0x60(%rax)
movq -0xc98(%rbp), %rcx
movq -0x10(%rbp), %rax
movq %rcx, 0x68(%rax)
jmp 0x5a4be
leaq 0x17fb5(%rip), %rdi     # 0x7245b
leaq 0x23d9d(%rip), %rsi     # 0x7e24a
movl $0xd7b, %edx            # imm = 0xD7B
leaq 0x24b7d(%rip), %rcx     # 0x7f036
callq 0x30a0
jmp 0x5a4c0
jmp 0x5a4f3
leaq -0x10b0(%rbp), %rdi
leaq 0x24c81(%rip), %rsi     # 0x7f151
movb $0x0, %al
callq 0x3160
movq -0x8(%rbp), %rax
movq 0x58(%rax), %rax
movq -0x8(%rbp), %rdi
movq -0xc60(%rbp), %rsi
leaq -0x10b0(%rbp), %rdx
callq *%rax
jmp 0x5a4f5
movq -0x10(%rbp), %rax
movb $0x0, 0x70(%rax)
jmp 0x5a697
movq -0x10(%rbp), %rax
cmpl $0x2, 0x44(%rax)
jne 0x5a50e
jmp 0x5a52d
leaq 0x2415f(%rip), %rdi     # 0x7e674
leaq 0x23d2e(%rip), %rsi     # 0x7e24a
movl $0xd85, %edx            # imm = 0xD85
leaq 0x24b0e(%rip), %rcx     # 0x7f036
callq 0x30a0
movq -0x10(%rbp), %rax
movq 0x48(%rax), %rax
movq (%rax), %rax
movq %rax, -0x10b8(%rbp)
movq -0x10(%rbp), %rax
movq 0x48(%rax), %rax
movq 0x8(%rax), %rax
movq %rax, -0x10c0(%rbp)
movq -0x8(%rbp), %rdi
movq -0x10b8(%rbp), %rsi
callq 0x5a6a0
movq -0x10b8(%rbp), %rax
movq 0x68(%rax), %rax
movq %rax, -0x10c8(%rbp)
movq -0x10c8(%rbp), %rax
cmpl $0x440, (%rax)          # imm = 0x440
jne 0x5a64f
movq -0x10c8(%rbp), %rax
movq 0x48(%rax), %rax
movq (%rax), %rax
cmpl $0x430, (%rax)          # imm = 0x430
jne 0x5a64f
movq -0x10c8(%rbp), %rax
movq 0x48(%rax), %rax
movq (%rax), %rax
movq 0x48(%rax), %rax
movq (%rax), %rax
movq %rax, -0x10d0(%rbp)
movq -0x8(%rbp), %rdi
movq -0x10b8(%rbp), %rsi
movq -0x10d0(%rbp), %rdx
movq -0x10c0(%rbp), %rcx
callq 0x5a730
movq -0x10c8(%rbp), %rax
movq 0x48(%rax), %rax
movq (%rax), %rax
cmpl $0x1, 0x44(%rax)
jne 0x5a608
movq -0x10(%rbp), %rax
movb $-0x1, 0x60(%rax)
movq -0x10(%rbp), %rax
leaq 0x3373e(%rip), %rcx     # 0x8dd40
movq %rcx, 0x68(%rax)
jmp 0x5a64d
movq -0x10c8(%rbp), %rax
movq 0x48(%rax), %rax
movq (%rax), %rax
movq 0x48(%rax), %rax
movq 0x8(%rax), %rax
movq %rax, -0x10d8(%rbp)
movq -0x8(%rbp), %rdi
movq -0x10d8(%rbp), %rsi
callq 0x4d750
movb %al, %cl
movq -0x10(%rbp), %rax
movb %cl, 0x60(%rax)
movq -0x10d8(%rbp), %rcx
movq -0x10(%rbp), %rax
movq %rcx, 0x68(%rax)
jmp 0x5a680
leaq -0x14e0(%rbp), %rdi
leaq 0x24b20(%rip), %rsi     # 0x7f17d
movb $0x0, %al
callq 0x3160
movq -0x8(%rbp), %rax
movq 0x58(%rax), %rax
movq -0x8(%rbp), %rdi
movq -0x10b8(%rbp), %rsi
leaq -0x14e0(%rbp), %rdx
callq *%rax
movq -0x10(%rbp), %rax
movb $0x0, 0x70(%rax)
jmp 0x5a697
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
callq 0x5a6a0
addq $0x14f0, %rsp           # imm = 0x14F0
popq %rbp
retq