// File: /workspace/github_cpp_makefile_star2_O2/lishen2[P]Excel_formula_parser_cpp/FormulaParser.cpp
// Function: ExcelFormula::FormulaParser::parserToToken1()
void FormulaParser::parserToToken1()
	{
		if (m_formula.size() < 2 
				|| m_formula[0] != '=') return;

		//! keywords used in parsing excel formual
		const char QUOTE_DOUBLE  = '"';
		const char QUOTE_SINGLE  = '\'';
		const char BRACKET_CLOSE = ']';
		const char BRACKET_OPEN  = '[';
		const char BRACE_OPEN    = '{';
		const char BRACE_CLOSE   = '}';
		const char PAREN_OPEN    = '(';
		const char PAREN_CLOSE   = ')';
		const char SEMICOLON     = ';';
		const char WHITESPACE    = ' ';
		const char COMMA         = ',';
		const char ERROR_START   = '#';

		const string OPERATORS_SN = "+-";
		const string OPERATORS_INFIX = "+-*/^&=><";
		const string OPERATORS_POSTFIX = "%";

		const char* ERRORS[] = {"#NULL!", "#DIV/0!", "#VALUE!", "#REF!", "#NAME?", "#NUM!", "#N/A"};
		const int ERRORS_LEN = 7; 

		const char* COMPARATORS_MULTI[] = {">=", "<=", "<>"};
		const int COMPARATORS_MULTI_LEN = 3;

		bool inString = false;
		bool inPath = false;
		bool inRange = false;
		bool inError = false;

		int index = 1;
		string value = "";      

		while(index < m_formula.size())
		{
			// state-dependent character evaluation (order is important)

			// double-quoted strings
			// embeds are doubled
			// end marks token

			if (inString) {    
				if (m_formula[index] == QUOTE_DOUBLE) {
					if (((index + 2) <= m_formula.size()) && (m_formula[index + 1] == QUOTE_DOUBLE)) {
						value += QUOTE_DOUBLE;
						index++;
					} else {
						inString = false;
						m_tmpAry.add(MakeToken(value.c_str(), Token::Operand, Token::Text));
						value = "";
					}      
				} else {
					value += m_formula[index];
				}
				index++;
				continue;
			}

			// single-quoted strings (links)
			// embeds are double
			// end does not mark a token

			if (inPath) {
				if (m_formula[index] == QUOTE_SINGLE) {
					if (((index + 2) <= m_formula.size()) && (m_formula[index + 1] == QUOTE_SINGLE)) {
						value += QUOTE_SINGLE;
						index++;
					} else {
						inPath = false;
					}
				} else {
					value += m_formula[index];
				}
				index++;
				continue; 
			}    

			// bracked strings (R1C1 range index or linked workbook name)
			// no embeds (changed to "()" by Excel)
			// end does not mark a token

			if (inRange) {
				if (m_formula[index] == BRACKET_CLOSE) {
					inRange = false;
				}
				value += m_formula[index];
				index++;
				continue;
			}

			// error values
			// end marks a token, determined from absolute list of values

			if (inError) {
				value += m_formula[index];
				index++;
				if (StrUtils::indexOf(ERRORS_LEN, ERRORS, value.c_str()) != -1) {
					inError = false;
					m_tmpAry.add(MakeToken(value.c_str(), Token::Operand, Token::Error));
					value = "";
				}
				continue;
			}

			// scientific notation check

			if ((OPERATORS_SN).find_first_of(m_formula[index]) != string::npos) {
				if (value.size() > 1) {
					if (m_regex->PartialMatch(value.c_str())) {
						value+= m_formula[index];
						index++;
						continue;
					}
				}
			}

			// independent character evaluation (order not important)

			// establish state-dependent character evaluations

			if (m_formula[index] == QUOTE_DOUBLE) {  
				if (value.size() > 0) {  // unexpected
					m_tmpAry.add(MakeToken(value.c_str(), Token::Unknown));
					value = "";
				}
				inString = true;
				index++;
				continue;
			}

			if (m_formula[index] == QUOTE_SINGLE) {
				if (value.size() > 0) { // unexpected
					m_tmpAry.add(MakeToken(value.c_str(), Token::Unknown));
					value = "";
				}
				inPath = true;
				index++;
				continue;
			}

			if (m_formula[index] == BRACKET_OPEN) {
				inRange = true;
				value += BRACKET_OPEN;
				index++;
				continue;
			}

			if (m_formula[index] == ERROR_START) {
				if (value.size() > 0) { // unexpected
					m_tmpAry.add(MakeToken(value.c_str(), Token::Unknown));
					value = "";
				}
				inError = true;
				value += ERROR_START;
				index++;
				continue;
			}

			// mark start and end of arrays and array rows

			if (m_formula[index] == BRACE_OPEN) {  
				if (value.size() > 0) { // unexpected
					m_tmpAry.add(MakeToken(value.c_str(), Token::Unknown));
					value = "";
				}
				m_tmpStack.push(m_tmpAry.add(MakeToken("ARRAY", Token::Function, Token::Start)));
				m_tmpStack.push(m_tmpAry.add(MakeToken("ARRAYROW", Token::Function, Token::Start)));
				index++;
				continue;
			}

			if (m_formula[index] == SEMICOLON) {  
				if (value.size() > 0) {
					m_tmpAry.add(MakeToken(value.c_str(), Token::Operand));
					value = "";
				}
				m_tmpAry.add(m_tmpStack.pop());
				m_tmpAry.add(MakeToken(",", Token::Argument));
				m_tmpStack.push(m_tmpAry.add(MakeToken("ARRAYROW", Token::Function, Token::Start)));
				index++;
				continue;
			}

			if (m_formula[index] == BRACE_CLOSE) {  
				if (value.size() > 0) {
					m_tmpAry.add(MakeToken(value.c_str(), Token::Operand));
					value = "";
				}
				m_tmpAry.add(m_tmpStack.pop());
				m_tmpAry.add(m_tmpStack.pop());
				index++;
				continue;
			}

			// trim white-space

			if (m_formula[index] == WHITESPACE) {
				if (value.size() > 0) {
					m_tmpAry.add(MakeToken(value.c_str(), Token::Operand));
					value = "";
				}
				m_tmpAry.add(MakeToken("", Token::Whitespace));
				index++;
				while ((m_formula[index] == WHITESPACE) && (index < m_formula.size())) { 
					index++;
				}
				continue;
			}

			// multi-character comparators

			if ((index + 2) <= m_formula.size()) {
				if (StrUtils::indexOf(COMPARATORS_MULTI_LEN, COMPARATORS_MULTI, m_formula.substr(index, 2).c_str()) != -1) {
					if (value.size() > 0) {
						m_tmpAry.add(MakeToken(value.c_str(), Token::Operand));
						value = "";
					}
					m_tmpAry.add(MakeToken(m_formula.substr(index, 2).c_str(), Token::OperatorInfix, Token::Logical));
					index += 2;
					continue;     
				}
			}

			// standard infix operators

			if ((OPERATORS_INFIX).find_first_of(m_formula[index]) != string::npos) {
				if (value.size() > 0) {
					m_tmpAry.add(MakeToken(value.c_str(), Token::Operand));
					value = "";
				}
				char buf[2] = {0};
				buf[0] = m_formula[index];
				m_tmpAry.add(MakeToken(buf, Token::OperatorInfix));
				index++;
				continue;     
			}

			// standard postfix operators (only one)

			static string operatorsProtfixStr(OPERATORS_POSTFIX);
			if (operatorsProtfixStr.find_first_of(m_formula[index]) != string::npos) {
				if (value.size() > 0) {
					m_tmpAry.add(MakeToken(value.c_str(), Token::Operand));
					value = "";
				}
				char buf[2] = {0};
				buf[0] = m_formula[index];
				m_tmpAry.add(MakeToken(buf, Token::OperatorPostfix));
				index++;
				continue;     
			}

			// start subexpression or function

			if (m_formula[index] == PAREN_OPEN) {
				if (value.size() > 0) {
					m_tmpStack.push(m_tmpAry.add(MakeToken(value.c_str(), Token::Function, Token::Start)));
					value = "";
				} else {
					m_tmpStack.push(m_tmpAry.add(MakeToken("", Token::Subexpression, Token::Start)));
				}
				index++;
				continue;
			}

			// function, subexpression, or array parameters, or operand unions

			if (m_formula[index] == COMMA) {
				if (value.size() > 0) {
					m_tmpAry.add(MakeToken(value.c_str(), Token::Operand));
					value = "";
				}
				if (m_tmpStack.getCurrent()->getType() != Token::Function) {
					m_tmpAry.add(MakeToken(",", Token::OperatorInfix, Token::Union));
				} else {
					m_tmpAry.add(MakeToken(",", Token::Argument));
				}
				index++;
				continue;
			}

			// stop subexpression

			if (m_formula[index] == PAREN_CLOSE) {
				if (value.size() > 0) {
					m_tmpAry.add(MakeToken(value.c_str(), Token::Operand));
					value = "";
				}
				m_tmpAry.add(m_tmpStack.pop());
				index++;
				continue;
			}

			// token accumulation

			value += m_formula[index];
			index++;

		}

		// dump remaining accumulation

		if (value.size() > 0) {
			m_tmpAry.add(MakeToken(value.c_str(), Token::Operand));
		}

		m_tmpAry.toVector(m_tokens);

	}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x128, %rsp            # imm = 0x128
cmpq $0x2, 0x8(%rdi)
jb 0x331b
movq %rdi, %rbx
movq (%rdi), %rax
cmpb $0x3d, (%rax)
jne 0x331b
leaq 0x2881(%rip), %rsi      # 0x510e
leaq -0x150(%rbp), %rdi
leaq -0xd0(%rbp), %rdx
callq 0x3812
leaq 0x286a(%rip), %rsi      # 0x5111
leaq -0x130(%rbp), %rdi
leaq -0xd0(%rbp), %rdx
callq 0x3812
leaq 0x285a(%rip), %rsi      # 0x511b
leaq -0x110(%rbp), %rdi
leaq -0xd0(%rbp), %rdx
callq 0x3812
movq 0x5495(%rip), %rax      # 0x7d70
movq %rax, -0xa0(%rbp)
movaps 0x5477(%rip), %xmm0     # 0x7d60
movaps %xmm0, -0xb0(%rbp)
movaps 0x5459(%rip), %xmm0     # 0x7d50
movaps %xmm0, -0xc0(%rbp)
movaps 0x543b(%rip), %xmm0     # 0x7d40
movaps %xmm0, -0xd0(%rbp)
movq 0x547d(%rip), %rax      # 0x7d90
movq %rax, -0xe0(%rbp)
movaps 0x545f(%rip), %xmm0     # 0x7d80
movaps %xmm0, -0xf0(%rbp)
leaq 0x2872(%rip), %rsi      # 0x51a1
leaq -0x60(%rbp), %rdi
leaq -0x90(%rbp), %rdx
callq 0x3812
leaq 0x38(%rbx), %rax
movq %rax, -0x40(%rbp)
movq %rbx, -0x70(%rbp)
leaq 0x58(%rbx), %rax
movq %rax, -0x68(%rbp)
pushq $0x1
popq %rax
xorl %ebx, %ebx
xorl %r13d, %r13d
xorl %r15d, %r15d
movl $0x0, -0x34(%rbp)
movq %rax, -0x30(%rbp)
movslq -0x30(%rbp), %r12
movq -0x70(%rbp), %rax
movq 0x8(%rax), %rcx
cmpq %r12, %rcx
jbe 0x32bf
movq (%rax), %rax
movb (%rax,%r12), %r14b
movsbl %r14b, %esi
testb $0x1, %bl
jne 0x31c3
testb $0x1, %r13b
je 0x29d8
cmpb $0x27, %r14b
jne 0x2a03
movq -0x30(%rbp), %rdx
addl $0x2, %edx
movslq %edx, %rdx
cmpq %rdx, %rcx
jb 0x2a9e
cmpb $0x27, 0x1(%rax,%r12)
jne 0x2a9e
leaq -0x60(%rbp), %rdi
pushq $0x27
popq %rsi
callq 0x2130
incq %r12
movb $0x1, %r13b
movq %r12, -0x30(%rbp)
jmp 0x2aa1
testb $0x1, %r15b
je 0x2a14
leaq -0x60(%rbp), %rdi
callq 0x2130
cmpb $0x5d, %r14b
setne %r15b
movq -0x30(%rbp), %rax
incl %eax
movq %rax, -0x30(%rbp)
xorl %ebx, %ebx
xorl %r13d, %r13d
jmp 0x2969
movb $0x1, %r13b
leaq -0x60(%rbp), %rdi
callq 0x2130
jmp 0x2aa1
testb $0x1, -0x34(%rbp)
je 0x2ab2
leaq -0x60(%rbp), %rdi
callq 0x2130
movq -0x60(%rbp), %rdx
pushq $0x7
popq %rdi
leaq -0xd0(%rbp), %rsi
callq 0x3ba4
movq -0x30(%rbp), %rcx
incl %ecx
movq %rcx, -0x30(%rbp)
movb $0x1, %cl
movl %ecx, -0x34(%rbp)
xorl %ebx, %ebx
movl $0x0, %r13d
movl $0x0, %r15d
cmpl $-0x1, %eax
je 0x2969
movq -0x60(%rbp), %rdi
xorl %esi, %esi
pushq $0x6
popq %rdx
callq 0x3d38
movq -0x40(%rbp), %rdi
movq %rax, %rsi
callq 0x3ed4
xorl %ebx, %ebx
leaq -0x60(%rbp), %rdi
leaq 0x271a(%rip), %rsi      # 0x51a1
callq 0x2250
xorl %r13d, %r13d
xorl %r15d, %r15d
movl $0x0, -0x34(%rbp)
jmp 0x2969
xorl %r13d, %r13d
movq -0x30(%rbp), %rax
incl %eax
movq %rax, -0x30(%rbp)
xorl %ebx, %ebx
jmp 0x2969
leaq -0x150(%rbp), %rdi
xorl %edx, %edx
callq 0x21a0
cmpq $-0x1, %rax
movq -0x70(%rbp), %rbx
je 0x2b37
cmpq $0x2, -0x58(%rbp)
jb 0x2b37
movq 0xa8(%rbx), %r13
movq -0x60(%rbp), %rdi
movq %rdi, -0x90(%rbp)
callq 0x20b0
movl %eax, -0x88(%rbp)
movq %r13, %rdi
leaq -0x90(%rbp), %rsi
movq 0x54d1(%rip), %rcx      # 0x7fd0
movq %rcx, %rdx
movq %rcx, %r8
movq %rcx, %r9
pushq %rcx
pushq %rcx
pushq %rcx
pushq %rcx
pushq %rcx
pushq %rcx
pushq %rcx
pushq %rcx
pushq %rcx
pushq %rcx
pushq %rcx
pushq %rcx
callq 0x2080
addq $0x60, %rsp
testb %al, %al
je 0x2b37
movq (%rbx), %rax
movsbl (%rax,%r12), %esi
leaq -0x60(%rbp), %rdi
callq 0x2130
jmp 0x2f36
movq (%rbx), %rax
movb (%rax,%r12), %al
movzbl %al, %ecx
leal -0x20(%rcx), %edx
cmpl $0x7, %edx
jbe 0x2bce
cmpl $0x3b, %ecx
je 0x2e29
cmpl $0x5b, %ecx
je 0x2f54
cmpl $0x7b, %ecx
je 0x2eb5
cmpl $0x7d, %ecx
jne 0x2c71
cmpq $0x0, -0x58(%rbp)
je 0x2b9f
movq -0x60(%rbp), %rdi
xorl %esi, %esi
callq 0x3db0
movq -0x40(%rbp), %rdi
movq %rax, %rsi
callq 0x3ed4
leaq -0x60(%rbp), %rdi
leaq 0x2607(%rip), %rsi      # 0x51a1
callq 0x2250
movq -0x68(%rbp), %rdi
callq 0x41ee
movq -0x40(%rbp), %rdi
movq %rax, %rsi
callq 0x3ed4
movq -0x68(%rbp), %rdi
callq 0x41ee
movq -0x40(%rbp), %rdi
movq %rax, %rsi
callq 0x3ed4
jmp 0x2f36
leaq 0x24c7(%rip), %rsi      # 0x509c
movslq (%rsi,%rdx,4), %rcx
addq %rsi, %rcx
jmpq *%rcx
cmpq $0x0, -0x58(%rbp)
je 0x2c0c
movq -0x60(%rbp), %rdi
xorl %esi, %esi
callq 0x3db0
movq -0x40(%rbp), %rdi
movq %rax, %rsi
callq 0x3ed4
leaq -0x60(%rbp), %rdi
leaq 0x259a(%rip), %rsi      # 0x51a1
callq 0x2250
leaq 0x258e(%rip), %rdi      # 0x51a1
pushq $0x7
popq %rsi
callq 0x3db0
movq -0x40(%rbp), %rdi
movq %rax, %rsi
callq 0x3ed4
movq -0x70(%rbp), %rcx
movq (%rcx), %rax
movq 0x8(%rcx), %rcx
incq %r12
movq -0x30(%rbp), %rdx
incl %edx
movq %rdx, -0x30(%rbp)
xorl %ebx, %ebx
cmpb $0x20, (%rax,%r12)
jne 0x2f42
leaq 0x1(%r12), %rdx
movl $0x0, %r13d
movl $0x0, %r15d
movl $0x0, -0x34(%rbp)
cmpq %r12, %rcx
movq %rdx, %r12
ja 0x2c35
jmp 0x2969
movq -0x30(%rbp), %rcx
leal 0x2(%rcx), %r14d
movslq %r14d, %rcx
cmpq %rcx, 0x8(%rbx)
jb 0x2ccd
leaq -0x90(%rbp), %rdi
movq %rbx, %rsi
movq %r12, %rdx
pushq $0x2
popq %rcx
callq 0x2190
movq -0x90(%rbp), %rdx
pushq $0x3
popq %rdi
leaq -0xf0(%rbp), %rsi
callq 0x3ba4
movl %eax, %r13d
leaq -0x90(%rbp), %rdi
callq 0x2268
cmpl $-0x1, %r13d
jne 0x323b
movq (%rbx), %rax
movb (%rax,%r12), %al
movsbl %al, %esi
leaq -0x130(%rbp), %rdi
xorl %edx, %edx
callq 0x21a0
cmpq $-0x1, %rax
je 0x2f7e
cmpq $0x0, -0x58(%rbp)
je 0x2d16
movq -0x60(%rbp), %rdi
xorl %esi, %esi
callq 0x3db0
movq -0x40(%rbp), %rdi
movq %rax, %rsi
callq 0x3ed4
leaq -0x60(%rbp), %rdi
leaq 0x2490(%rip), %rsi      # 0x51a1
callq 0x2250
andw $0x0, -0x90(%rbp)
movq -0x70(%rbp), %rax
movq (%rax), %rax
movb (%rax,%r12), %al
movb %al, -0x90(%rbp)
leaq -0x90(%rbp), %rdi
pushq $0x5
popq %rsi
callq 0x3db0
movq -0x40(%rbp), %rdi
movq %rax, %rsi
callq 0x3ed4
jmp 0x2f36
cmpq $0x0, -0x58(%rbp)
je 0x2d7e
movq -0x60(%rbp), %rdi
pushq $0x8
popq %rsi
callq 0x3db0
movq -0x40(%rbp), %rdi
movq %rax, %rsi
callq 0x3ed4
leaq -0x60(%rbp), %rdi
leaq 0x2428(%rip), %rsi      # 0x51a1
callq 0x2250
movq -0x30(%rbp), %rax
incl %eax
movq %rax, -0x30(%rbp)
movb $0x1, %r13b
xorl %ebx, %ebx
jmp 0x2f45
cmpq $0x0, -0x58(%rbp)
je 0x2dc1
movq -0x60(%rbp), %rdi
pushq $0x8
popq %rsi
callq 0x3db0
movq -0x40(%rbp), %rdi
movq %rax, %rsi
callq 0x3ed4
leaq -0x60(%rbp), %rdi
leaq 0x23e5(%rip), %rsi      # 0x51a1
callq 0x2250
leaq -0x60(%rbp), %rdi
pushq $0x23
popq %rsi
callq 0x2130
movq -0x30(%rbp), %rax
incl %eax
movq %rax, -0x30(%rbp)
movb $0x1, %al
movl %eax, -0x34(%rbp)
xorl %ebx, %ebx
xorl %r13d, %r13d
xorl %r15d, %r15d
jmp 0x2969
cmpq $0x0, -0x58(%rbp)
je 0x2e18
movq -0x60(%rbp), %rdi
pushq $0x8
popq %rsi
callq 0x3db0
movq -0x40(%rbp), %rdi
movq %rax, %rsi
callq 0x3ed4
leaq -0x60(%rbp), %rdi
leaq 0x238e(%rip), %rsi      # 0x51a1
callq 0x2250
movq -0x30(%rbp), %rax
incl %eax
movq %rax, -0x30(%rbp)
movb $0x1, %bl
jmp 0x2f42
cmpq $0x0, -0x58(%rbp)
je 0x2e57
movq -0x60(%rbp), %rdi
xorl %esi, %esi
callq 0x3db0
movq -0x40(%rbp), %rdi
movq %rax, %rsi
callq 0x3ed4
leaq -0x60(%rbp), %rdi
leaq 0x234f(%rip), %rsi      # 0x51a1
callq 0x2250
movq -0x68(%rbp), %rdi
callq 0x41ee
movq -0x40(%rbp), %rdi
movq %rax, %rsi
callq 0x3ed4
leaq 0x22ee(%rip), %rdi      # 0x5161
pushq $0x3
popq %rsi
callq 0x3db0
movq -0x40(%rbp), %rdi
movq %rax, %rsi
callq 0x3ed4
leaq 0x22ca(%rip), %rdi      # 0x5158
pushq $0x1
popq %rdx
movl %edx, %esi
callq 0x3d38
movq -0x40(%rbp), %rdi
movq %rax, %rsi
callq 0x3ed4
movq -0x68(%rbp), %rdi
movq %rax, %rsi
callq 0x41d0
jmp 0x2f36
cmpq $0x0, -0x58(%rbp)
je 0x2ee4
movq -0x60(%rbp), %rdi
pushq $0x8
popq %rsi
callq 0x3db0
movq -0x40(%rbp), %rdi
movq %rax, %rsi
callq 0x3ed4
leaq -0x60(%rbp), %rdi
leaq 0x22c2(%rip), %rsi      # 0x51a1
callq 0x2250
leaq 0x2267(%rip), %rdi      # 0x5152
pushq $0x1
popq %rdx
movl %edx, %esi
callq 0x3d38
movq -0x40(%rbp), %rdi
movq %rax, %rsi
callq 0x3ed4
movq -0x68(%rbp), %rdi
movq %rax, %rsi
callq 0x41d0
leaq 0x2244(%rip), %rdi      # 0x5158
pushq $0x1
popq %rdx
movl %edx, %esi
callq 0x3d38
movq -0x40(%rbp), %rdi
movq %rax, %rsi
callq 0x3ed4
movq -0x68(%rbp), %rdi
movq %rax, %rsi
callq 0x41d0
movq -0x30(%rbp), %rax
incl %eax
movq %rax, -0x30(%rbp)
xorl %ebx, %ebx
xorl %r13d, %r13d
xorl %r15d, %r15d
movl $0x0, -0x34(%rbp)
jmp 0x2969
leaq -0x60(%rbp), %rdi
pushq $0x5b
popq %rsi
callq 0x2130
movq -0x30(%rbp), %rax
incl %eax
movq %rax, -0x30(%rbp)
movb $0x1, %r15b
xorl %ebx, %ebx
xorl %r13d, %r13d
movl $0x0, -0x34(%rbp)
jmp 0x2969
movb 0x51ec(%rip), %al       # 0x8170
testb %al, %al
je 0x316d
movq (%rbx), %rax
movsbl (%rax,%r12), %esi
leaq 0x51b5(%rip), %rdi      # 0x8150
xorl %edx, %edx
callq 0x21a0
cmpq $-0x1, %rax
je 0x300f
cmpq $0x0, -0x58(%rbp)
je 0x2fd6
movq -0x60(%rbp), %rdi
xorl %esi, %esi
callq 0x3db0
movq -0x40(%rbp), %rdi
movq %rax, %rsi
callq 0x3ed4
leaq -0x60(%rbp), %rdi
leaq 0x21d0(%rip), %rsi      # 0x51a1
callq 0x2250
andw $0x0, -0x90(%rbp)
movq -0x70(%rbp), %rax
movq (%rax), %rax
movb (%rax,%r12), %al
movb %al, -0x90(%rbp)
leaq -0x90(%rbp), %rdi
pushq $0x6
popq %rsi
callq 0x3db0
movq -0x40(%rbp), %rdi
movq %rax, %rsi
callq 0x3ed4
jmp 0x2f36
movq (%rbx), %rax
movzbl (%rax,%r12), %eax
cmpl $0x2c, %eax
je 0x30bc
cmpl $0x29, %eax
je 0x3074
cmpl $0x28, %eax
jne 0x310a
cmpq $0x0, -0x58(%rbp)
je 0x313e
movq -0x60(%rbp), %rdi
pushq $0x1
popq %rdx
movl %edx, %esi
callq 0x3d38
movq -0x40(%rbp), %rdi
movq %rax, %rsi
callq 0x3ed4
movq -0x68(%rbp), %rdi
movq %rax, %rsi
callq 0x41d0
leaq -0x60(%rbp), %rdi
leaq 0x2137(%rip), %rsi      # 0x51a1
callq 0x2250
jmp 0x2f36
cmpq $0x0, -0x58(%rbp)
je 0x30a2
movq -0x60(%rbp), %rdi
xorl %esi, %esi
callq 0x3db0
movq -0x40(%rbp), %rdi
movq %rax, %rsi
callq 0x3ed4
leaq -0x60(%rbp), %rdi
leaq 0x2104(%rip), %rsi      # 0x51a1
callq 0x2250
movq -0x68(%rbp), %rdi
callq 0x41ee
movq -0x40(%rbp), %rdi
movq %rax, %rsi
callq 0x3ed4
jmp 0x2f36
cmpq $0x0, -0x58(%rbp)
je 0x30ea
movq -0x60(%rbp), %rdi
xorl %esi, %esi
callq 0x3db0
movq -0x40(%rbp), %rdi
movq %rax, %rsi
callq 0x3ed4
leaq -0x60(%rbp), %rdi
leaq 0x20bc(%rip), %rsi      # 0x51a1
callq 0x2250
movq -0x68(%rbp), %rdi
callq 0x423e
cmpl $0x1, 0x20(%rax)
jne 0x311b
leaq 0x2061(%rip), %rdi      # 0x5161
pushq $0x3
popq %rsi
callq 0x3db0
jmp 0x312d
movsbl %al, %esi
leaq -0x60(%rbp), %rdi
callq 0x2130
jmp 0x2f36
leaq 0x203f(%rip), %rdi      # 0x5161
pushq $0x5
popq %rsi
pushq $0xb
popq %rdx
callq 0x3d38
movq -0x40(%rbp), %rdi
movq %rax, %rsi
callq 0x3ed4
jmp 0x2f36
leaq 0x205c(%rip), %rdi      # 0x51a1
pushq $0x2
popq %rsi
pushq $0x1
popq %rdx
callq 0x3d38
movq -0x40(%rbp), %rdi
movq %rax, %rsi
callq 0x3ed4
movq -0x68(%rbp), %rdi
movq %rax, %rsi
callq 0x41d0
jmp 0x2f36
leaq 0x4ffc(%rip), %rdi      # 0x8170
callq 0x2230
testl %eax, %eax
je 0x2f8c
leaq 0x4fc8(%rip), %rdi      # 0x8150
leaq -0x110(%rbp), %rsi
callq 0x21b0
movq 0x4e25(%rip), %rdi      # 0x7fc0
leaq 0x4fae(%rip), %rsi      # 0x8150
leaq 0x4f8f(%rip), %rdx      # 0x8138
callq 0x2140
leaq 0x4fbb(%rip), %rdi      # 0x8170
callq 0x20f0
movq -0x70(%rbp), %rbx
jmp 0x2f8c
cmpb $0x22, %r14b
jne 0x31f7
movq -0x30(%rbp), %rdx
addl $0x2, %edx
movslq %edx, %rdx
cmpq %rdx, %rcx
jb 0x3204
cmpb $0x22, 0x1(%rax,%r12)
jne 0x3204
leaq -0x60(%rbp), %rdi
pushq $0x22
popq %rsi
callq 0x2130
incq %r12
movb $0x1, %bl
movq %r12, -0x30(%rbp)
jmp 0x3230
movb $0x1, %bl
leaq -0x60(%rbp), %rdi
callq 0x2130
jmp 0x3230
movq -0x60(%rbp), %rdi
xorl %esi, %esi
pushq $0x3
popq %rdx
callq 0x3d38
movq -0x40(%rbp), %rdi
movq %rax, %rsi
callq 0x3ed4
leaq -0x60(%rbp), %rdi
leaq 0x1f78(%rip), %rsi      # 0x51a1
callq 0x2250
xorl %ebx, %ebx
movq -0x30(%rbp), %rax
incl %eax
jmp 0x2965
cmpq $0x0, -0x58(%rbp)
je 0x3269
movq -0x60(%rbp), %rdi
xorl %esi, %esi
callq 0x3db0
movq -0x40(%rbp), %rdi
movq %rax, %rsi
callq 0x3ed4
leaq -0x60(%rbp), %rdi
leaq 0x1f3d(%rip), %rsi      # 0x51a1
callq 0x2250
leaq -0x90(%rbp), %rdi
movq -0x70(%rbp), %rsi
movq %r12, %rdx
pushq $0x2
popq %rcx
callq 0x2190
movq -0x90(%rbp), %rdi
pushq $0x5
popq %rdx
movl %edx, %esi
callq 0x3d38
movq -0x40(%rbp), %rdi
movq %rax, %rsi
callq 0x3ed4
leaq -0x90(%rbp), %rdi
callq 0x2268
xorl %ebx, %ebx
xorl %r13d, %r13d
xorl %r15d, %r15d
movl $0x0, -0x34(%rbp)
movl %r14d, %eax
jmp 0x2965
cmpq $0x0, -0x58(%rbp)
je 0x32dd
movq -0x60(%rbp), %rdi
xorl %esi, %esi
callq 0x3db0
movq -0x40(%rbp), %rdi
movq %rax, %rsi
callq 0x3ed4
movq -0x70(%rbp), %rsi
addq $0x20, %rsi
movq -0x40(%rbp), %rdi
callq 0x3f20
leaq -0x60(%rbp), %rdi
callq 0x2268
leaq -0x110(%rbp), %rdi
callq 0x2268
leaq -0x130(%rbp), %rdi
callq 0x2268
leaq -0x150(%rbp), %rdi
callq 0x2268
addq $0x128, %rsp            # imm = 0x128
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %rax, %rbx
leaq 0x4e39(%rip), %rdi      # 0x8170
callq 0x20e0
jmp 0x336f
jmp 0x336c
jmp 0x336c
jmp 0x336c
jmp 0x3346
movq %rax, %rbx
leaq -0x90(%rbp), %rdi
callq 0x2268
jmp 0x336f
jmp 0x336c
jmp 0x336c
movq %rax, %rbx
jmp 0x3378
movq %rax, %rbx
jmp 0x3384
movq %rax, %rbx
jmp 0x3390
jmp 0x336c
movq %rax, %rbx
leaq -0x60(%rbp), %rdi
callq 0x2268
leaq -0x110(%rbp), %rdi
callq 0x2268
leaq -0x130(%rbp), %rdi
callq 0x2268
leaq -0x150(%rbp), %rdi
callq 0x2268
movq %rbx, %rdi
callq 0x2210