// File: /workspace/github_c_makefile_star2_O3/MikeGray-APH[P]LibLouisAPH/source/pattern.c
// Function: pattern_compile_expression
static int pattern_compile_expression(
	const unichar *input,
	const int input_len,
	int *input_crs,
	unichar *expr_data,
	const int expr_len,
	unichar *expr_crs,
	unichar *loop_cnts,
	struct subpattern *subpatterns)
{
	struct subpattern *subpattern;
	unichar *data, attrs0, attrs1;;
	int expr_start, expr_end, expr_sub, expr_crs_prv;
	int input_end, subinput_crs;
	int set, esc, nest, i;

	switch(input[*input_crs])
	{
	case '(':

		if(*expr_crs + 10 >= expr_len)
			return 0;

		(*input_crs)++;
		if(*input_crs >= input_len)
			return 0;

		/*   find closing parenthesis   */
		nest = esc = 0;
		for(input_end = *input_crs; input_end < input_len; input_end++)
		{
			if(input[input_end] == '\\' && !esc)
			{
				esc = 1;
				continue;
			}

			if(input[input_end] == '(' && !esc)
				nest++;
			else if(input[input_end] == ')' && !esc)
			{
				if(nest)
					nest--;
				else
					break;
			}

			esc = 0;
		}
		if(input_end >= input_len)
			return 0;

		EXPR_TYPE(*expr_crs) = PTN_GROUP;

		/*   compile sub expressions   */
		expr_crs_prv = *expr_crs;
		*expr_crs += 4;
		EXPR_DATA_0(expr_crs_prv) = *expr_crs;
		expr_sub = *expr_crs;
		EXPR_TYPE(expr_sub) = PTN_ERROR;
		EXPR_PRV(expr_sub) = PTN_END;
		EXPR_NXT(expr_sub) = PTN_END;
		if(!pattern_compile_1(input, input_end, input_crs, expr_data, expr_len, expr_crs, loop_cnts, subpatterns))
			return 0;
		(*input_crs)++;

		/*   reset end expression   */
		expr_end = *expr_crs;
		EXPR_NXT(expr_end) = expr_crs_prv;

		return *expr_crs += 3;

	case '!':

		if(*expr_crs + 10 >= expr_len)
			return 0;

		(*input_crs)++;
		if(*input_crs >= input_len)
			return 0;

		EXPR_TYPE(*expr_crs) = PTN_NOT;
		expr_crs_prv = *expr_crs;
		*expr_crs += 4;
		EXPR_DATA_0(expr_crs_prv) = *expr_crs;

		/*   create start expression   */
		expr_start = *expr_crs;
		EXPR_TYPE(expr_start) = PTN_START;
		EXPR_PRV(expr_start) = PTN_END;
		*expr_crs += 3;
		EXPR_NXT(expr_start) = *expr_crs;

		/*   compile sub expression   */
		expr_sub = *expr_crs;
		EXPR_TYPE(expr_sub) = PTN_ERROR;
		EXPR_PRV(expr_sub) = expr_start;
		EXPR_NXT(expr_sub) = PTN_END;

		if(!pattern_compile_expression(input, input_len, input_crs, expr_data, expr_len, expr_crs, loop_cnts, subpatterns))
			return 0;

		EXPR_NXT(expr_sub) = *expr_crs;

		/*   create end expression   */
		expr_end = *expr_crs;
		EXPR_TYPE(expr_end) = PTN_END;
		EXPR_PRV(expr_end) = expr_sub;
		EXPR_NXT(expr_end) = expr_crs_prv;

		return *expr_crs += 3;

	case '+':

		if(*expr_crs + 4 >= expr_len)
			return 0;
		EXPR_TYPE(*expr_crs) = PTN_ONE_MORE;
		EXPR_DATA_1(*expr_crs) = (*loop_cnts)++;
		(*input_crs)++;
		return *expr_crs += 5;

	case '*':

		if(*expr_crs + 4 >= expr_len)
			return 0;
		EXPR_TYPE(*expr_crs) = PTN_ZERO_MORE;
		EXPR_DATA_1(*expr_crs) = (*loop_cnts)++;
		(*input_crs)++;
		return *expr_crs += 5;

	case '?':

		if(*expr_crs + 4 >= expr_len)
			return 0;
		EXPR_TYPE(*expr_crs) = PTN_OPTIONAL;
		(*input_crs)++;
		return *expr_crs += 4;

	case '|':

		if(*expr_crs + 5 >= expr_len)
			return 0;
		EXPR_TYPE(*expr_crs) = PTN_ALTERNATE;
		(*input_crs)++;
		return *expr_crs += 5;

	case '.':

		if(*expr_crs + 3 >= expr_len)
			return 0;
		EXPR_TYPE(*expr_crs) = PTN_ANY;
		(*input_crs)++;
		return *expr_crs += 3;

	case '%':

		if(*expr_crs + 5 >= expr_len)
			return 0;

		(*input_crs)++;
		if(*input_crs >= input_len)
			return 0;

		/*   find closing bracket   */
		if(input[*input_crs] == '[')
		{
			set = 1;
			(*input_crs)++;
			for(input_end = *input_crs; input_end < input_len; input_end++)
			if(input[input_end] == ']')
				break;
			if(input_end >= input_len)
				return 0;
		}
		else
		{
			set = 0;
			input_end = *input_crs + 1;
		}

		EXPR_TYPE(*expr_crs) = PTN_ATTRIBUTES;

		attrs0 = attrs1 = 0;
		for( ; (*input_crs) < input_end; (*input_crs)++)
			attr_from_char(&attrs0, &attrs1, input[*input_crs]);

		EXPR_DATA_0(*expr_crs) = attrs0;
		EXPR_DATA_1(*expr_crs) = attrs1;

		if(set)
			(*input_crs)++;
		return *expr_crs += 5;

	case '[':

		(*input_crs)++;
		if(*input_crs >= input_len)
			return 0;

		/*   find closing bracket   */
		esc = 0;
		for(input_end = *input_crs; input_end < input_len; input_end++)
		{
			if(input[input_end] == '\\' && !esc)
			{
				esc = 1;
				continue;
			}

			if(input[input_end] == ']' && !esc)
				break;
			esc = 0;
		}
		if(input_end >= input_len)
			return 0;

		if(*expr_crs + 4 + (input_end - *input_crs) >= expr_len)
			return 0;

		EXPR_TYPE(*expr_crs) = PTN_CHARS;

		esc = 0;
		data = EXPR_DATA(*expr_crs);
		for(i = 1; *input_crs < input_end; (*input_crs)++)
		{
			if(input[*input_crs] == '\\' && !esc)
			{
				esc = 1;
				continue;
			}

			esc = 0;
			data[i++] = (unichar)input[*input_crs];
		}
		data[0] = i - 1;
		(*input_crs)++;
		return *expr_crs += 4 + data[0];

	case '@':

		if(*expr_crs + 10 >= expr_len)
			return 0;

		(*input_crs)++;
		if(*input_crs >= input_len)
			return 0;

		/*   which bracket   */
		if(input[*input_crs] == '{')
		{
			set = 1;
			(*input_crs)++;
			for(input_end = *input_crs; input_end < input_len; input_end++)
			if(input[input_end] == '}')
				break;
			if(input_end >= input_len)
				return 0;

			if(*expr_crs + 4 + (input_end - *input_crs) >= expr_len)
				return 0;

			EXPR_TYPE(*expr_crs) = PTN_SUBPATTERN;

			esc = 0;
			data = EXPR_DATA(*expr_crs);
			for(i = 1; *input_crs < input_end; (*input_crs)++)
			{
				if(input[*input_crs] == '\\' && !esc)
				{
					esc = 1;
					continue;
				}

				esc = 0;
				data[i++] = (unichar)input[*input_crs];
			}
			data[0] = i - 1;
			(*input_crs)++;
			return *expr_crs += 4 + data[0];
		}

		/*   find closing bracket   */
		else if(input[*input_crs] == '[')
		{
			set = 1;
			(*input_crs)++;
			for(input_end = *input_crs; input_end < input_len; input_end++)
			if(input[input_end] == ']')
				break;
			if(input_end >= input_len)
				return 0;

			subpattern = subpattern_find(subpatterns, &input[*input_crs], input_end - *input_crs);
			if(!subpattern)
				return 0;
			if(subpattern->processing)
				return 0;

			EXPR_TYPE(*expr_crs) = PTN_GROUP;

			/*   compile sub pattern   */
			expr_crs_prv = *expr_crs;
			*expr_crs += 4;
			EXPR_DATA_0(expr_crs_prv) = *expr_crs;
			expr_sub = *expr_crs;
			EXPR_TYPE(expr_sub) = PTN_ERROR;
			EXPR_PRV(expr_sub) = PTN_END;
			EXPR_NXT(expr_sub) = PTN_END;
			subinput_crs = 0;
			subpattern->processing = 1;
			if(!pattern_compile_1(subpattern->src_data, subpattern->src_len, &subinput_crs, expr_data, expr_len, expr_crs, loop_cnts, subpatterns))
				return 0;
			subpattern->processing = 0;
			*input_crs = input_end + 1;

			/*   reset end expression   */
			expr_end = *expr_crs;
			EXPR_NXT(expr_end) = expr_crs_prv;

			return *expr_crs += 3;
		}

		return 0;

	case '^':
	case '$':

		if(*expr_crs + 3 >= expr_len)
			return 0;
		EXPR_TYPE(*expr_crs) = PTN_END_OF_INPUT;
		(*input_crs)++;
		return *expr_crs += 3;

	case '\\':

		(*input_crs)++;
		if(*input_crs >= input_len)
			return 0;

	default:

		if(*expr_crs + 5 >= expr_len)
			return 0;
		EXPR_TYPE(*expr_crs) = PTN_CHARS;
		EXPR_DATA_0(*expr_crs) = 1;
		EXPR_DATA_1(*expr_crs) = (unichar)input[*input_crs];
		(*input_crs)++;
		return *expr_crs += 5;
	}

}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x28, %rsp
movq %r9, %rbx
movl %r8d, %ebp
movq %rcx, %r13
movq %rdx, %r14
movl %esi, %eax
movq 0x68(%rsp), %r8
movq 0x60(%rsp), %r10
movl (%rdx), %r15d
movslq %r15d, %rsi
movzwl (%rdi,%rsi,2), %ecx
cmpl $0x3e, %ecx
jg 0x8807
addl $-0x21, %ecx
cmpl $0xd, %ecx
ja 0x8a5a
leaq 0xb380(%rip), %rdx      # 0x13ac8
movslq (%rdx,%rcx,4), %rcx
addq %rdx, %rcx
jmpq *%rcx
movzwl (%rbx), %ecx
leal 0xa(%rcx), %edx
xorl %r12d, %r12d
cmpl %ebp, %edx
jge 0x8d79
incl %r15d
movl %r15d, (%r14)
cmpl %eax, %r15d
jge 0x8d79
movw $0x3, (%r13,%rcx,2)
movzwl (%rbx), %r15d
leal 0x4(%r15), %ecx
movw %cx, (%rbx)
movw %cx, 0x6(%r13,%r15,2)
movzwl (%rbx), %esi
movl $0xffff0001, (%r13,%rsi,2) # imm = 0xFFFF0001
movzwl (%rbx), %edx
addl $0x3, %edx
movw %dx, (%rbx)
movw %dx, 0x4(%r13,%rsi,2)
movq %r13, %rcx
movzwl (%rbx), %r13d
movw $0x0, (%rcx,%r13,2)
movw %si, 0x2(%rcx,%r13,2)
movw $0xffff, 0x4(%rcx,%r13,2) # imm = 0xFFFF
movl %eax, %esi
movq %r14, %rdx
movq %rcx, %r14
movq %r8, %rax
movl %ebp, %r8d
movq %rbx, %r9
pushq %rax
pushq %r10
callq 0x86fc
addq $0x10, %rsp
testl %eax, %eax
je 0x8d79
movzwl (%rbx), %eax
movw %ax, 0x4(%r14,%r13,2)
movw $0xffff, (%r14,%rax,2)  # imm = 0xFFFF
movw %r13w, 0x2(%r14,%rax,2)
movw %r15w, 0x4(%r14,%rax,2)
jmp 0x88e4
cmpl $0x5b, %ecx
jg 0x887e
cmpl $0x3f, %ecx
je 0x8a27
cmpl $0x40, %ecx
je 0x8aa2
cmpl $0x5b, %ecx
jne 0x8a5a
incq %rsi
movl %esi, (%r14)
movl %esi, %ecx
subl %eax, %ecx
jge 0x8d76
leaq (%rdi,%rsi,2), %rdx
xorl %eax, %eax
xorl %r9d, %r9d
xorl %r12d, %r12d
movzwl (%rdx), %r10d
testl %r9d, %r9d
jne 0x8859
movl $0x1, %r8d
cmpw $0x5c, %r10w
je 0x886c
xorl %r8d, %r8d
testl %r9d, %r9d
jne 0x886c
cmpw $0x5d, %r10w
je 0x8b0d
decl %eax
addq $0x2, %rdx
movl %r8d, %r9d
cmpl %eax, %ecx
jne 0x8843
jmp 0x8d79
cmpl $0x5c, %ecx
je 0x8a4b
cmpl $0x5e, %ecx
je 0x88b0
cmpl $0x7c, %ecx
jne 0x8a5a
movzwl (%rbx), %eax
leal 0x5(%rax), %ecx
cmpl %ebp, %ecx
jge 0x8d76
movw $0x7, (%r13,%rax,2)
jmp 0x8a1f
movzwl (%rbx), %eax
leal 0x3(%rax), %ecx
cmpl %ebp, %ecx
jge 0x8d76
movw $0xc, (%r13,%rax,2)
jmp 0x88de
movzwl (%rbx), %eax
leal 0x3(%rax), %ecx
cmpl %ebp, %ecx
jge 0x8d76
movw $0x8, (%r13,%rax,2)
incl %r15d
movl %r15d, (%r14)
movzwl (%rbx), %eax
addl $0x3, %eax
jmp 0x8a96
movzwl (%rbx), %ecx
leal 0x5(%rcx), %edx
xorl %r12d, %r12d
cmpl %ebp, %edx
jge 0x8d79
leal 0x1(%rsi), %r8d
movl %r8d, (%r14)
cmpl %eax, %r8d
jge 0x8d79
movzwl 0x2(%rdi,%rsi,2), %edx
addl $0x2, %r15d
cmpw $0x5b, %dx
jne 0x8b8f
movl %r15d, (%r14)
cmpl %eax, %r15d
jge 0x8d79
movslq %r15d, %rsi
leaq (%rdi,%rsi,2), %r8
movl %r15d, %esi
cmpw $0x5d, (%r8)
je 0x8c7c
incl %esi
addq $0x2, %r8
cmpl %esi, %eax
jne 0x8939
jmp 0x8d79
movzwl (%rbx), %eax
leal 0x4(%rax), %ecx
cmpl %ebp, %ecx
jge 0x8d76
movw $0x5, (%r13,%rax,2)
jmp 0x8a0a
movzwl (%rbx), %ecx
leal 0xa(%rcx), %edx
xorl %r12d, %r12d
cmpl %ebp, %edx
jge 0x8d79
incq %rsi
movl %esi, (%r14)
cmpl %eax, %esi
jge 0x8d79
movq %r8, %r15
leaq (%rdi,%rsi,2), %rdx
xorl %r8d, %r8d
xorl %r10d, %r10d
xorl %r12d, %r12d
movzwl (%rdx), %r11d
testl %r10d, %r10d
jne 0x89b3
movl $0x1, %r9d
cmpw $0x5c, %r11w
je 0x89e2
testl %r10d, %r10d
jne 0x89c7
cmpw $0x28, %r11w
jne 0x89c7
incl %r8d
xorl %r9d, %r9d
jmp 0x89e2
xorl %r9d, %r9d
testl %r10d, %r10d
jne 0x89e2
cmpw $0x29, %r11w
jne 0x89e2
testl %r8d, %r8d
je 0x8ca3
decl %r8d
incl %esi
addq $0x2, %rdx
movl %r9d, %r10d
cmpl %esi, %eax
jne 0x899d
jmp 0x8d79
movzwl (%rbx), %eax
leal 0x4(%rax), %ecx
cmpl %ebp, %ecx
jge 0x8d76
movw $0x4, (%r13,%rax,2)
movzwl (%r10), %eax
movl %eax, %ecx
incl %ecx
movw %cx, (%r10)
movzwl (%rbx), %ecx
movw %ax, 0x8(%r13,%rcx,2)
incl %r15d
movl %r15d, (%r14)
jmp 0x8a90
movzwl (%rbx), %eax
leal 0x4(%rax), %ecx
cmpl %ebp, %ecx
jge 0x8d76
movw $0x6, (%r13,%rax,2)
incl %r15d
movl %r15d, (%r14)
movzwl (%rbx), %eax
addl $0x4, %eax
jmp 0x8a96
incl %r15d
movl %r15d, (%r14)
cmpl %eax, %r15d
jge 0x8d76
movzwl (%rbx), %eax
leal 0x5(%rax), %ecx
cmpl %ebp, %ecx
jge 0x8d76
movw $0xa, (%r13,%rax,2)
movzwl (%rbx), %eax
movw $0x1, 0x6(%r13,%rax,2)
movslq %r15d, %rax
movzwl (%rdi,%rax,2), %ecx
movzwl (%rbx), %edx
movw %cx, 0x8(%r13,%rdx,2)
incl %eax
movl %eax, (%r14)
movzwl (%rbx), %eax
addl $0x5, %eax
movw %ax, (%rbx)
movzwl %ax, %r12d
jmp 0x8d79
movzwl (%rbx), %r8d
leal 0xa(%r8), %ecx
xorl %r12d, %r12d
cmpl %ebp, %ecx
jge 0x8d79
leal 0x1(%rsi), %ecx
movl %ecx, (%r14)
cmpl %eax, %ecx
jge 0x8d79
movzwl 0x2(%rdi,%rsi,2), %ecx
cmpl $0x5b, %ecx
je 0x8c3f
cmpl $0x7b, %ecx
jne 0x8d79
addq $0x2, %rsi
movl %esi, (%r14)
movl %esi, %ecx
subl %eax, %ecx
jge 0x8d79
leaq (%rdi,%rsi,2), %rdx
xorl %eax, %eax
xorl %r12d, %r12d
cmpw $0x7d, (%rdx)
je 0x8d06
decl %eax
addq $0x2, %rdx
cmpl %eax, %ecx
jne 0x8af4
jmp 0x8d79
movzwl (%rbx), %ecx
movl %ecx, %edx
subl %eax, %edx
addl $0x4, %edx
cmpl %ebp, %edx
jge 0x8d76
movl %esi, %edx
subl %eax, %edx
movw $0xa, (%r13,%rcx,2)
movzwl (%rbx), %eax
leaq 0x6(,%rax,2), %rcx
addq %r13, %rcx
movw $0x1, %ax
cmpl %edx, %esi
jge 0x8b7c
movslq %edx, %r8
xorl %r9d, %r9d
movl $0x1, %eax
movzwl (%rdi,%rsi,2), %r10d
testl %r9d, %r9d
jne 0x8b65
cmpw $0x5c, %r10w
jne 0x8b65
movl $0x1, %r9d
jmp 0x8b72
movslq %eax, %r9
incl %eax
movw %r10w, (%rcx,%r9,2)
xorl %r9d, %r9d
incq %rsi
cmpq %rsi, %r8
jne 0x8b4c
movl %edx, %esi
leal -0x1(%rax), %edx
movw %dx, (%rcx)
incl %esi
movl %esi, (%r14)
addw (%rbx), %ax
jmp 0x88e7
movw $0x9, (%r13,%rcx,2)
xorl %eax, %eax
movw %ax, 0x4(%rsp)
movw %ax, 0x6(%rsp)
movl %r15d, %esi
movl %r8d, %r15d
movslq %r15d, %rax
movslq %esi, %r8
leaq 0xf54a(%rip), %r9       # 0x18100
leaq 0x6(%rsp), %r10
leaq 0x4(%rsp), %r11
movzwl (%rdi,%rax,2), %ebp
xorl %ecx, %ecx
movsbl (%rcx,%r9), %r15d
cmpl %ebp, %r15d
je 0x8bf1
incq %rcx
cmpq $0x10, %rcx
jne 0x8bc6
xorl %ecx, %ecx
movsbl 0x10(%rcx,%r9), %r15d
cmpl %ebp, %r15d
je 0x8bf6
incq %rcx
cmpq $0x10, %rcx
jne 0x8bdb
jmp 0x8c06
movq %r10, %r15
jmp 0x8bf9
movq %r11, %r15
movl $0x1, %r12d
shlq %cl, %r12
orw %r12w, (%r15)
incq %rax
cmpq %r8, %rax
jne 0x8bc0
movl %esi, (%r14)
movzwl 0x6(%rsp), %ecx
movzwl 0x4(%rsp), %eax
movl %esi, %r15d
movzwl (%rbx), %esi
movw %cx, 0x6(%r13,%rsi,2)
movzwl (%rbx), %ecx
movw %ax, 0x8(%r13,%rcx,2)
cmpw $0x5b, %dx
je 0x8a1f
jmp 0x8a90
movq %r13, 0x10(%rsp)
addq $0x2, %rsi
movl %esi, (%r14)
cmpl %eax, %esi
jge 0x8d79
leaq (%rdi,%rsi,2), %rsi
subl %r15d, %eax
addl $-0x2, %eax
xorl %r13d, %r13d
xorl %r12d, %r12d
cmpw $0x5d, (%rsi,%r13,2)
je 0x8d8b
incq %r13
cmpl %r13d, %eax
jne 0x8c63
jmp 0x8d79
movw $0x9, (%r13,%rcx,2)
xorl %eax, %eax
movw %ax, 0x4(%rsp)
movw %ax, 0x6(%rsp)
movl $0x0, %ecx
cmpl %esi, %r15d
jl 0x8ba9
jmp 0x8c1e
movq %r13, %r12
movw $0x2, (%r13,%rcx,2)
movzwl (%rbx), %r13d
leal 0x4(%r13), %eax
movw %ax, (%rbx)
movw %ax, 0x6(%r12,%r13,2)
movzwl (%rbx), %eax
movl $0xffff0000, (%r12,%rax,2) # imm = 0xFFFF0000
movw $0xffff, 0x4(%r12,%rax,2) # imm = 0xFFFF
movq %r14, %rdx
movq %r12, %rcx
movl %ebp, %r8d
movq %rbx, %r9
pushq %r15
pushq 0x68(%rsp)
callq 0x8125
addq $0x10, %rsp
testl %eax, %eax
je 0x8d76
incl (%r14)
movzwl (%rbx), %eax
movw %r13w, 0x4(%r12,%rax,2)
jmp 0x88e4
movl %r8d, %ecx
subl %eax, %ecx
addl $0x4, %ecx
cmpl %ebp, %ecx
jge 0x8d76
movl %esi, %edx
subl %eax, %edx
movw $0xb, (%r13,%r8,2)
movzwl (%rbx), %eax
leaq 0x6(,%rax,2), %rcx
addq %r13, %rcx
movw $0x1, %ax
cmpl %edx, %esi
jge 0x8b7c
movslq %edx, %r8
xorl %r9d, %r9d
movl $0x1, %eax
movzwl (%rdi,%rsi,2), %r10d
testl %r9d, %r9d
jne 0x8d5c
cmpw $0x5c, %r10w
jne 0x8d5c
movl $0x1, %r9d
jmp 0x8d69
movslq %eax, %r9
incl %eax
movw %r10w, (%rcx,%r9,2)
xorl %r9d, %r9d
incq %rsi
cmpq %rsi, %r8
jne 0x8d43
jmp 0x8b7a
xorl %r12d, %r12d
movl %r12d, %eax
addq $0x28, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %r8, 0x8(%rsp)
movq 0x68(%rsp), %rdi
movl %r13d, %edx
callq 0x8e48
xorl %r12d, %r12d
testq %rax, %rax
je 0x8d79
cmpl $0x0, 0x2c(%rax)
jne 0x8d79
movl 0x8(%rsp), %edx
movq 0x10(%rsp), %rcx
movw $0x2, (%rcx,%rdx,2)
movzwl (%rbx), %esi
leal 0x4(%rsi), %edx
movw %dx, (%rbx)
movq %rsi, 0x18(%rsp)
movw %dx, 0x6(%rcx,%rsi,2)
movzwl (%rbx), %edx
movl $0xffff0000, (%rcx,%rdx,2) # imm = 0xFFFF0000
movw $0xffff, 0x4(%rcx,%rdx,2) # imm = 0xFFFF
leaq 0x24(%rsp), %rdx
movl $0x0, (%rdx)
movl $0x1, 0x2c(%rax)
movq 0x18(%rax), %rdi
movq %rax, 0x8(%rsp)
movl 0x28(%rax), %esi
movl %ebp, %r8d
movq %rbx, %r9
pushq 0x68(%rsp)
pushq 0x68(%rsp)
callq 0x8125
addq $0x10, %rsp
testl %eax, %eax
je 0x8d79
movq 0x8(%rsp), %rax
movl $0x0, 0x2c(%rax)
leal (%r15,%r13), %eax
addl $0x3, %eax
movl %eax, (%r14)
movzwl (%rbx), %eax
movq 0x10(%rsp), %rcx
movq 0x18(%rsp), %rdx
movw %dx, 0x4(%rcx,%rax,2)
jmp 0x88e4