// File: melop[P]admixem/./parser/parser.cpp
// Function: Parser::GetToken(bool)
const Parser::TokenType Parser::GetToken (const bool ignoreSign)
  {
  word_.erase (0, std::string::npos);
  
  // skip spaces
  while (*pWord_ && isspace (*pWord_))
    ++pWord_;

  pWordStart_ = pWord_;   // remember where word_ starts *now*
  
  // look out for unterminated statements and things
  if (*pWord_ == 0 &&  // we have EOF
      type_ == END)  // after already detecting it
    throw std::runtime_error ("Unexpected end of expression.");

  unsigned char cFirstCharacter = *pWord_;        // first character in new word_
  
  if (cFirstCharacter == 0)    // stop at end of file
    {
    word_ = "<end of expression>";
    return type_ = END;
    }
  
  unsigned char cNextCharacter  = *(pWord_ + 1);  // 2nd character in new word_
  
  // look for number
  // can be: + or - followed by a decimal point
  // or: + or - followed by a digit
  // or: starting with a digit
  // or: decimal point followed by a digit
  if ((!ignoreSign &&
	   (cFirstCharacter == '+' || cFirstCharacter == '-') &&
	   (isdigit (cNextCharacter) || cNextCharacter == '.')
	   )
	  || isdigit (cFirstCharacter)
	  // allow decimal numbers without a leading 0. e.g. ".5"
	  // Dennis Jones 01-30-2009
	  || (cFirstCharacter == '.' && isdigit (cNextCharacter)) )
	  {
    // skip sign for now
    if ((cFirstCharacter == '+' || cFirstCharacter == '-'))
      pWord_++;
    while (isdigit (*pWord_) || *pWord_ == '.')
      pWord_++;
    
    // allow for 1.53158e+15
    if (*pWord_ == 'e' || *pWord_ == 'E')
      {
      pWord_++; // skip 'e'
      if ((*pWord_  == '+' || *pWord_  == '-'))
        pWord_++; // skip sign after e
      while (isdigit (*pWord_))  // now digits after e
        pWord_++;      
      }
    
    word_ = std::string (pWordStart_, pWord_ - pWordStart_);
    
    std::istringstream is (word_);
    // parse std::string into double value
    is >> value_;
      
    if (is.fail () || !is.eof ())
      throw std::runtime_error ("Bad numeric literal: " + word_);
    return type_ = NUMBER;
    }   // end of number found

  // special test for 2-character sequences: <= >= == !=
  // also +=, -=, /=, *=
  if (cNextCharacter == '=')
    {
    switch (cFirstCharacter)
      {
      // comparisons
      case '=': type_ = EQ;   break;
      case '<': type_ = LE;   break;
      case '>': type_ = GE;   break;
      case '!': type_ = NE;   break;
      // assignments
      case '+': type_ = ASSIGN_ADD;   break;
      case '-': type_ = ASSIGN_SUB;   break;
      case '*': type_ = ASSIGN_MUL;   break;
      case '/': type_ = ASSIGN_DIV;   break;
      // none of the above
      default:  type_ = NONE; break;
      } // end of switch on cFirstCharacter
    
    if (type_ != NONE)
      {
      word_ = std::string (pWordStart_, 2);
      pWord_ += 2;   // skip both characters
      return type_;
      } // end of found one    
    } // end of *=
  
  switch (cFirstCharacter)
    {
    case '&': if (cNextCharacter == '&')    // &&
                {
                word_ = std::string (pWordStart_, 2);
                pWord_ += 2;   // skip both characters
                return type_ = AND;
                }
              break;
   case '|': if (cNextCharacter == '|')   // ||
                {
                word_ = std::string (pWordStart_, 2);
                pWord_ += 2;   // skip both characters
                return type_ = OR;
                }
              break;
    // single-character symboles
    case '=':
    case '<':
    case '>':
    case '+':
    case '-':
    case '/':
    case '*':
    case '(':
    case ')':
    case ',':
    case '!':
      word_ = std::string (pWordStart_, 1);
      ++pWord_;   // skip it
      return type_ = TokenType (cFirstCharacter);
    } // end of switch on cFirstCharacter
  
  if (!isalpha (cFirstCharacter))
    {
    if (cFirstCharacter < ' ')
      {
      std::ostringstream s;
      s << "Unexpected character (decimal " << int (cFirstCharacter) << ")";
      throw std::runtime_error (s.str ());    
      }
    else
      throw std::runtime_error ("Unexpected character: " + std::string (1, cFirstCharacter));
    }
  
  // we have a word (starting with A-Z) - pull it out
  while (isalnum (*pWord_) || *pWord_ == '_')
    ++pWord_;
  
  word_ = std::string (pWordStart_, pWord_ - pWordStart_);
  return type_ = NAME;
  }

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x5b0, %rsp            # imm = 0x5B0
movb %sil, %al
movq %rdi, -0x10(%rbp)
andb $0x1, %al
movb %al, -0x11(%rbp)
movq -0x10(%rbp), %rdi
movq %rdi, -0x4b0(%rbp)
addq $0x38, %rdi
xorl %eax, %eax
movl %eax, %esi
movq $-0x1, %rdx
callq 0x8100
movq -0x4b0(%rbp), %rax
movq 0x20(%rax), %rcx
xorl %eax, %eax
cmpb $0x0, (%rcx)
movb %al, -0x4b1(%rbp)
je 0x93fd
movq -0x4b0(%rbp), %rax
movq 0x20(%rax), %rax
movsbl (%rax), %edi
callq 0x80b0
cmpl $0x0, %eax
setne %al
movb %al, -0x4b1(%rbp)
movb -0x4b1(%rbp), %al
testb $0x1, %al
jne 0x9409
jmp 0x941e
movq -0x4b0(%rbp), %rax
movq 0x20(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x20(%rax)
jmp 0x93c6
movq -0x4b0(%rbp), %rax
movq 0x20(%rax), %rcx
movq %rcx, 0x28(%rax)
movq 0x20(%rax), %rax
movsbl (%rax), %eax
cmpl $0x0, %eax
jne 0x94a2
movq -0x4b0(%rbp), %rax
cmpl $0x3, 0x30(%rax)
jne 0x94a2
movl $0x10, %edi
callq 0x8230
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0x4c0(%rbp)
leaq 0x6ceb2(%rip), %rsi     # 0x76316
callq 0x81b0
jmp 0x946b
movq -0x4c0(%rbp), %rdi
movq 0xa0b77(%rip), %rsi     # 0xa9ff0
movq 0xa0b00(%rip), %rdx     # 0xa9f80
callq 0x8820
movq -0x4c0(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x20(%rbp)
movl %eax, -0x24(%rbp)
callq 0x8370
jmp 0xa022
movq -0x4b0(%rbp), %rax
movq 0x20(%rax), %rax
movb (%rax), %al
movb %al, -0x25(%rbp)
movzbl -0x25(%rbp), %eax
cmpl $0x0, %eax
jne 0x94ec
movq -0x4b0(%rbp), %rdi
addq $0x38, %rdi
leaq 0x6ce67(%rip), %rsi     # 0x76334
callq 0x8690
movq -0x4b0(%rbp), %rax
movl $0x3, 0x30(%rax)
movl $0x3, -0x4(%rbp)
jmp 0xa016
movq -0x4b0(%rbp), %rax
movq 0x20(%rax), %rax
movb 0x1(%rax), %al
movb %al, -0x26(%rbp)
testb $0x1, -0x11(%rbp)
jne 0x952c
movzbl -0x25(%rbp), %eax
cmpl $0x2b, %eax
je 0x9515
movzbl -0x25(%rbp), %eax
cmpl $0x2d, %eax
jne 0x952c
movzbl -0x26(%rbp), %edi
callq 0x8420
cmpl $0x0, %eax
jne 0x9559
movzbl -0x26(%rbp), %eax
cmpl $0x2e, %eax
je 0x9559
movzbl -0x25(%rbp), %edi
callq 0x8420
cmpl $0x0, %eax
jne 0x9559
movzbl -0x25(%rbp), %eax
cmpl $0x2e, %eax
jne 0x98a5
movzbl -0x26(%rbp), %edi
callq 0x8420
cmpl $0x0, %eax
je 0x98a5
movzbl -0x25(%rbp), %eax
cmpl $0x2b, %eax
je 0x956b
movzbl -0x25(%rbp), %eax
cmpl $0x2d, %eax
jne 0x957e
movq -0x4b0(%rbp), %rax
movq 0x20(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x20(%rax)
jmp 0x9580
movq -0x4b0(%rbp), %rax
movq 0x20(%rax), %rax
movsbl (%rax), %edi
callq 0x8420
movl %eax, %ecx
movb $0x1, %al
cmpl $0x0, %ecx
movb %al, -0x4c1(%rbp)
jne 0x95bc
movq -0x4b0(%rbp), %rax
movq 0x20(%rax), %rax
movsbl (%rax), %eax
cmpl $0x2e, %eax
sete %al
movb %al, -0x4c1(%rbp)
movb -0x4c1(%rbp), %al
testb $0x1, %al
jne 0x95c8
jmp 0x95dd
movq -0x4b0(%rbp), %rax
movq 0x20(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x20(%rax)
jmp 0x9580
movq -0x4b0(%rbp), %rax
movq 0x20(%rax), %rax
movsbl (%rax), %eax
cmpl $0x65, %eax
je 0x9603
movq -0x4b0(%rbp), %rax
movq 0x20(%rax), %rax
movsbl (%rax), %eax
cmpl $0x45, %eax
jne 0x9679
movq -0x4b0(%rbp), %rax
movq 0x20(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x20(%rax)
movq 0x20(%rax), %rax
movsbl (%rax), %eax
cmpl $0x2b, %eax
je 0x9635
movq -0x4b0(%rbp), %rax
movq 0x20(%rax), %rax
movsbl (%rax), %eax
cmpl $0x2d, %eax
jne 0x9648
movq -0x4b0(%rbp), %rax
movq 0x20(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x20(%rax)
jmp 0x964a
movq -0x4b0(%rbp), %rax
movq 0x20(%rax), %rax
movsbl (%rax), %edi
callq 0x8420
cmpl $0x0, %eax
je 0x9677
movq -0x4b0(%rbp), %rax
movq 0x20(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x20(%rax)
jmp 0x964a
jmp 0x9679
movq -0x4b0(%rbp), %rcx
movq 0x20(%rcx), %rax
movq 0x28(%rcx), %rcx
movq %rcx, -0x4e0(%rbp)
subq %rcx, %rax
movq %rax, -0x4d8(%rbp)
leaq -0x49(%rbp), %rdi
movq %rdi, -0x4d0(%rbp)
callq 0x8870
movq -0x4e0(%rbp), %rsi
movq -0x4d8(%rbp), %rdx
movq -0x4d0(%rbp), %rcx
leaq -0x48(%rbp), %rdi
callq 0x8570
jmp 0x96c9
movq -0x4b0(%rbp), %rdi
addq $0x38, %rdi
movq %rdi, -0x4f0(%rbp)
leaq -0x48(%rbp), %rsi
movq %rsi, -0x4f8(%rbp)
callq 0x8600
movq -0x4f8(%rbp), %rdi
callq 0x82e0
leaq -0x49(%rbp), %rdi
callq 0x8540
movq -0x4f0(%rbp), %rsi
leaq -0x1d0(%rbp), %rdi
movq %rdi, -0x4e8(%rbp)
movl $0x8, %edx
callq 0x87f0
movq -0x4b0(%rbp), %rsi
movq -0x4e8(%rbp), %rdi
addq $0x58, %rsi
callq 0x83c0
jmp 0x9738
movq -0x1d0(%rbp), %rax
movq -0x18(%rax), %rax
leaq -0x1d0(%rbp,%rax), %rdi
callq 0x8030
movb %al, -0x4f9(%rbp)
jmp 0x9758
movb -0x4f9(%rbp), %al
testb $0x1, %al
jne 0x9794
jmp 0x9764
movq -0x1d0(%rbp), %rax
movq -0x18(%rax), %rax
leaq -0x1d0(%rbp,%rax), %rdi
callq 0x88b0
movb %al, -0x4fa(%rbp)
jmp 0x9784
movb -0x4fa(%rbp), %al
testb $0x1, %al
jne 0x986e
jmp 0x9794
movb $0x1, -0x1f1(%rbp)
movl $0x10, %edi
callq 0x8230
movq -0x4b0(%rbp), %rdx
movq %rax, -0x508(%rbp)
addq $0x38, %rdx
leaq 0x6cb8a(%rip), %rsi     # 0x76348
leaq -0x1f0(%rbp), %rdi
callq 0xc3f0
jmp 0x97cc
movq -0x508(%rbp), %rdi
leaq -0x1f0(%rbp), %rsi
callq 0x87a0
jmp 0x97e1
movq -0x508(%rbp), %rdi
movb $0x0, -0x1f1(%rbp)
movq 0xa07fa(%rip), %rsi     # 0xa9ff0
movq 0xa0783(%rip), %rdx     # 0xa9f80
callq 0x8820
jmp 0xa02b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x20(%rbp)
movl %eax, -0x24(%rbp)
leaq -0x49(%rbp), %rdi
callq 0x8540
jmp 0xa022
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x20(%rbp)
movl %eax, -0x24(%rbp)
jmp 0x9894
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x20(%rbp)
movl %eax, -0x24(%rbp)
jmp 0x9855
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x20(%rbp)
movl %eax, -0x24(%rbp)
leaq -0x1f0(%rbp), %rdi
callq 0x82e0
testb $0x1, -0x1f1(%rbp)
jne 0x9860
jmp 0x986c
movq -0x508(%rbp), %rdi
callq 0x8370
jmp 0x9894
movq -0x4b0(%rbp), %rax
movl $0x2, 0x30(%rax)
movl $0x2, -0x4(%rbp)
leaq -0x1d0(%rbp), %rdi
callq 0x8220
jmp 0xa016
leaq -0x1d0(%rbp), %rdi
callq 0x8220
jmp 0xa022
movzbl -0x26(%rbp), %eax
cmpl $0x3d, %eax
jne 0x9a33
movzbl -0x25(%rbp), %eax
addl $-0x21, %eax
movl %eax, %ecx
movq %rcx, -0x510(%rbp)
subl $0x1d, %eax
ja 0x9962
movq -0x510(%rbp), %rax
leaq 0x6c73f(%rip), %rcx     # 0x76018
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq -0x4b0(%rbp), %rax
movl $0x41, 0x30(%rax)
jmp 0x9970
movq -0x4b0(%rbp), %rax
movl $0x3f, 0x30(%rax)
jmp 0x9970
movq -0x4b0(%rbp), %rax
movl $0x40, 0x30(%rax)
jmp 0x9970
movq -0x4b0(%rbp), %rax
movl $0x42, 0x30(%rax)
jmp 0x9970
movq -0x4b0(%rbp), %rax
movl $0x45, 0x30(%rax)
jmp 0x9970
movq -0x4b0(%rbp), %rax
movl $0x46, 0x30(%rax)
jmp 0x9970
movq -0x4b0(%rbp), %rax
movl $0x47, 0x30(%rax)
jmp 0x9970
movq -0x4b0(%rbp), %rax
movl $0x48, 0x30(%rax)
jmp 0x9970
movq -0x4b0(%rbp), %rax
movl $0x0, 0x30(%rax)
movq -0x4b0(%rbp), %rax
cmpl $0x0, 0x30(%rax)
je 0x9a31
movq -0x4b0(%rbp), %rax
movq 0x28(%rax), %rax
movq %rax, -0x520(%rbp)
leaq -0x219(%rbp), %rdi
movq %rdi, -0x518(%rbp)
callq 0x8870
movq -0x520(%rbp), %rsi
movq -0x518(%rbp), %rcx
leaq -0x218(%rbp), %rdi
movl $0x2, %edx
callq 0x8570
jmp 0x99c7
movq -0x4b0(%rbp), %rdi
addq $0x38, %rdi
leaq -0x218(%rbp), %rsi
callq 0x8600
leaq -0x218(%rbp), %rdi
callq 0x82e0
leaq -0x219(%rbp), %rdi
callq 0x8540
movq -0x4b0(%rbp), %rax
movq 0x20(%rax), %rcx
addq $0x2, %rcx
movq %rcx, 0x20(%rax)
movl 0x30(%rax), %eax
movl %eax, -0x4(%rbp)
jmp 0xa016
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x20(%rbp)
movl %eax, -0x24(%rbp)
leaq -0x219(%rbp), %rdi
callq 0x8540
jmp 0xa022
jmp 0x9a33
movzbl -0x25(%rbp), %eax
addl $-0x21, %eax
movl %eax, %ecx
movq %rcx, -0x528(%rbp)
subl $0x5b, %eax
ja 0x9cab
movq -0x528(%rbp), %rax
leaq 0x6c636(%rip), %rcx     # 0x76090
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movzbl -0x26(%rbp), %eax
cmpl $0x26, %eax
jne 0x9b28
movq -0x4b0(%rbp), %rax
movq 0x28(%rax), %rax
movq %rax, -0x538(%rbp)
leaq -0x241(%rbp), %rdi
movq %rdi, -0x530(%rbp)
callq 0x8870
movq -0x538(%rbp), %rsi
movq -0x530(%rbp), %rcx
leaq -0x240(%rbp), %rdi
movl $0x2, %edx
callq 0x8570
jmp 0x9ab6
movq -0x4b0(%rbp), %rdi
addq $0x38, %rdi
leaq -0x240(%rbp), %rsi
callq 0x8600
leaq -0x240(%rbp), %rdi
callq 0x82e0
leaq -0x241(%rbp), %rdi
callq 0x8540
movq -0x4b0(%rbp), %rax
movq 0x20(%rax), %rcx
addq $0x2, %rcx
movq %rcx, 0x20(%rax)
movl $0x43, 0x30(%rax)
movl $0x43, -0x4(%rbp)
jmp 0xa016
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x20(%rbp)
movl %eax, -0x24(%rbp)
leaq -0x241(%rbp), %rdi
callq 0x8540
jmp 0xa022
jmp 0x9cab
movzbl -0x26(%rbp), %eax
cmpl $0x7c, %eax
jne 0x9bf2
movq -0x4b0(%rbp), %rax
movq 0x28(%rax), %rax
movq %rax, -0x548(%rbp)
leaq -0x269(%rbp), %rdi
movq %rdi, -0x540(%rbp)
callq 0x8870
movq -0x548(%rbp), %rsi
movq -0x540(%rbp), %rcx
leaq -0x268(%rbp), %rdi
movl $0x2, %edx
callq 0x8570
jmp 0x9b80
movq -0x4b0(%rbp), %rdi
addq $0x38, %rdi
leaq -0x268(%rbp), %rsi
callq 0x8600
leaq -0x268(%rbp), %rdi
callq 0x82e0
leaq -0x269(%rbp), %rdi
callq 0x8540
movq -0x4b0(%rbp), %rax
movq 0x20(%rax), %rcx
addq $0x2, %rcx
movq %rcx, 0x20(%rax)
movl $0x44, 0x30(%rax)
movl $0x44, -0x4(%rbp)
jmp 0xa016
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x20(%rbp)
movl %eax, -0x24(%rbp)
leaq -0x269(%rbp), %rdi
callq 0x8540
jmp 0xa022
jmp 0x9cab
movq -0x4b0(%rbp), %rax
movq 0x28(%rax), %rax
movq %rax, -0x558(%rbp)
leaq -0x291(%rbp), %rdi
movq %rdi, -0x550(%rbp)
callq 0x8870
movq -0x558(%rbp), %rsi
movq -0x550(%rbp), %rcx
leaq -0x290(%rbp), %rdi
movl $0x1, %edx
callq 0x8570
jmp 0x9c3d
movq -0x4b0(%rbp), %rdi
addq $0x38, %rdi
leaq -0x290(%rbp), %rsi
callq 0x8600
leaq -0x290(%rbp), %rdi
callq 0x82e0
leaq -0x291(%rbp), %rdi
callq 0x8540
movq -0x4b0(%rbp), %rcx
movq 0x20(%rcx), %rax
addq $0x1, %rax
movq %rax, 0x20(%rcx)
movzbl -0x25(%rbp), %eax
movl %eax, 0x30(%rcx)
movl %eax, -0x4(%rbp)
jmp 0xa016
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x20(%rbp)
movl %eax, -0x24(%rbp)
leaq -0x291(%rbp), %rdi
callq 0x8540
jmp 0xa022
movzbl -0x25(%rbp), %edi
callq 0x8790
cmpl $0x0, %eax
jne 0x9f01
movzbl -0x25(%rbp), %eax
cmpl $0x20, %eax
jge 0x9ded
leaq -0x410(%rbp), %rdi
movq %rdi, -0x568(%rbp)
callq 0x8680
movq -0x568(%rbp), %rdi
leaq 0x6c673(%rip), %rsi     # 0x7635e
callq 0x84a0
movq %rax, -0x560(%rbp)
jmp 0x9cf9
movq -0x560(%rbp), %rdi
movzbl -0x25(%rbp), %esi
callq 0x8840
movq %rax, -0x570(%rbp)
jmp 0x9d12
movq -0x570(%rbp), %rdi
leaq 0x6e017(%rip), %rsi     # 0x77d37
callq 0x84a0
jmp 0x9d27
movb $0x1, -0x431(%rbp)
movl $0x10, %edi
callq 0x8230
movq %rax, -0x578(%rbp)
leaq -0x430(%rbp), %rdi
leaq -0x410(%rbp), %rsi
callq 0x84e0
jmp 0x9d54
movq -0x578(%rbp), %rdi
leaq -0x430(%rbp), %rsi
callq 0x87a0
jmp 0x9d69
movq -0x578(%rbp), %rdi
movb $0x0, -0x431(%rbp)
movq 0xa0272(%rip), %rsi     # 0xa9ff0
movq 0xa01fb(%rip), %rdx     # 0xa9f80
callq 0x8820
jmp 0xa02b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x20(%rbp)
movl %eax, -0x24(%rbp)
jmp 0x9ddc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x20(%rbp)
movl %eax, -0x24(%rbp)
jmp 0x9dc3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x20(%rbp)
movl %eax, -0x24(%rbp)
leaq -0x430(%rbp), %rdi
callq 0x82e0
testb $0x1, -0x431(%rbp)
jne 0x9dce
jmp 0x9dda
movq -0x578(%rbp), %rdi
callq 0x8370
jmp 0x9ddc
leaq -0x410(%rbp), %rdi
callq 0x8120
jmp 0xa022
movb $0x1, -0x47a(%rbp)
movl $0x10, %edi
callq 0x8230
movq %rax, -0x590(%rbp)
movsbl -0x25(%rbp), %eax
movl %eax, -0x584(%rbp)
leaq -0x479(%rbp), %rdi
movq %rdi, -0x580(%rbp)
callq 0x8870
movl -0x584(%rbp), %edx
movq -0x580(%rbp), %rcx
leaq -0x478(%rbp), %rdi
movl $0x1, %esi
callq 0xc550
jmp 0x9e42
leaq 0x6c534(%rip), %rsi     # 0x7637d
leaq -0x458(%rbp), %rdi
leaq -0x478(%rbp), %rdx
callq 0xc500
jmp 0x9e5e
movq -0x590(%rbp), %rdi
leaq -0x458(%rbp), %rsi
callq 0x87a0
jmp 0x9e73
movq -0x590(%rbp), %rdi
movb $0x0, -0x47a(%rbp)
movq 0xa0168(%rip), %rsi     # 0xa9ff0
movq 0xa00f1(%rip), %rdx     # 0xa9f80
callq 0x8820
jmp 0xa02b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x20(%rbp)
movl %eax, -0x24(%rbp)
jmp 0x9ed9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x20(%rbp)
movl %eax, -0x24(%rbp)
jmp 0x9ecd
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x20(%rbp)
movl %eax, -0x24(%rbp)
leaq -0x458(%rbp), %rdi
callq 0x82e0
leaq -0x478(%rbp), %rdi
callq 0x82e0
leaq -0x479(%rbp), %rdi
callq 0x8540
testb $0x1, -0x47a(%rbp)
jne 0x9ef0
jmp 0x9efc
movq -0x590(%rbp), %rdi
callq 0x8370
jmp 0xa022
jmp 0x9f03
movq -0x4b0(%rbp), %rax
movq 0x20(%rax), %rax
movsbl (%rax), %edi
callq 0x84f0
movl %eax, %ecx
movb $0x1, %al
cmpl $0x0, %ecx
movb %al, -0x591(%rbp)
jne 0x9f3f
movq -0x4b0(%rbp), %rax
movq 0x20(%rax), %rax
movsbl (%rax), %eax
cmpl $0x5f, %eax
sete %al
movb %al, -0x591(%rbp)
movb -0x591(%rbp), %al
testb $0x1, %al
jne 0x9f4b
jmp 0x9f60
movq -0x4b0(%rbp), %rax
movq 0x20(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x20(%rax)
jmp 0x9f03
movq -0x4b0(%rbp), %rcx
movq 0x20(%rcx), %rax
movq 0x28(%rcx), %rcx
movq %rcx, -0x5b0(%rbp)
subq %rcx, %rax
movq %rax, -0x5a8(%rbp)
leaq -0x4a1(%rbp), %rdi
movq %rdi, -0x5a0(%rbp)
callq 0x8870
movq -0x5b0(%rbp), %rsi
movq -0x5a8(%rbp), %rdx
movq -0x5a0(%rbp), %rcx
leaq -0x4a0(%rbp), %rdi
callq 0x8570
jmp 0x9fb6
movq -0x4b0(%rbp), %rdi
addq $0x38, %rdi
leaq -0x4a0(%rbp), %rsi
callq 0x8600
leaq -0x4a0(%rbp), %rdi
callq 0x82e0
leaq -0x4a1(%rbp), %rdi
callq 0x8540
movq -0x4b0(%rbp), %rax
movl $0x1, 0x30(%rax)
movl $0x1, -0x4(%rbp)
jmp 0xa016
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x20(%rbp)
movl %eax, -0x24(%rbp)
leaq -0x4a1(%rbp), %rdi
callq 0x8540
jmp 0xa022
movl -0x4(%rbp), %eax
addq $0x5b0, %rsp            # imm = 0x5B0
popq %rbp
retq
movq -0x20(%rbp), %rdi
callq 0x8860
nopl (%rax,%rax)