// File: /workspace/github_cpp_makefile_star2_O3/wrighteagle2d[P]wrighteaglebase/Debug/../src/Parser.cpp
// Function: Parser::Parse(char*)
void Parser::Parse(char *msg) {
  ServerMsgType msg_type = None_Msg;

  switch (msg[1]) {
  case 'i':
    msg_type = Initialize_Msg;
    break; /* ( i nit */
  case 'c':
    switch (msg[2]) {
    case 'h':
      msg_type = ChangePlayerType_Msg;
      break; /* ( c h ange */
    case 'l':
      msg_type = Clang_Msg;
      break; /* ( c l ang */
    }
    break;
  case 'd':
    msg_type = Disp_Msg;
    break; /* (d isp */
  case 'e':
    msg_type = Error_Msg;
    break; /* ( e rror */
  case 'f':
    msg_type = Fullstate_Msg;
    break; /* ( f ullstate */
  case 'h':
    msg_type = Hear_Msg;
    break; /* ( h ear  */
  case 'o':
    msg_type = Ok_Msg;
    break; /* ( o k */
  case 'p':
    switch (msg[8]) {
    case 'p':
      msg_type = PlayerParam_Msg;
      break; /* (p layer_ p ram */
    case 't':
      msg_type = PlayerType_Msg;
      break; /* ( p layer_ t ype */
    default:
      msg_type = None_Msg;
      break;
    }
    break;
  case 's':
    switch (msg[3]) {
    case 'o':
      msg_type = Score_Msg;
      break; /* ( s c o re */
    case 'e':
      switch (msg[4]) {
      case ' ':
        msg_type = Sight_Msg;
        break; /* ( s e e   */
      case '_':
        msg_type = CoachSight_Msg;
        break; /* ( s e e _global   */
      default:
        msg_type = None_Msg;
        break;
      }
      break;
    case 'n':
      msg_type = Sense_Msg;
      break; /* ( s e n se_body */
    case 'r':
      msg_type = ServerParam_Msg;
      break; /* ( s e r ver_param */
    default:
      msg_type = None_Msg;
      break;
    }
    break;
  case 't':
    msg_type = Think_Msg;
    break; /* (t hink */
  default:
    msg_type = None_Msg;
    break;
  }

  char *time_end = 0;
  switch (msg_type) {
  case Sight_Msg:
    ParseTime(msg, &time_end, false);
    ParseSight(time_end);
    mpObserver->SetNewSight();
    break;
  case CoachSight_Msg:
    ParseTime(msg, &time_end, true);
    ParseSight_Coach(time_end);
    mpObserver->SetNewSight();
    break;
  case Sense_Msg:
    ParseTime(msg, &time_end, true);
    ParseSense(time_end);
    mpObserver->SetNewSense();
    break;
  case Hear_Msg:
    if (!ParseForTrainer(msg)) {
      ParseTime(msg, &time_end, true);
      ParseSound(time_end);
    }
    break;
  case PlayerParam_Msg:
    ParsePlayerParam(msg);
    break;
  case ServerParam_Msg:
    ParseServerParam(msg);
    break;
  case Disp_Msg: /*TODO: process disp message */
    break;
  case Fullstate_Msg:
    ParseFullstateMsg(msg);
    break;
  case ChangePlayerType_Msg:
    ParseChangePlayerType(msg);
    break;
  case Clang_Msg: /*TODO: process clang message*/
    break;
  case PlayerType_Msg:
    ParsePlayerType(msg);
    break;
  case Score_Msg: /*TODO: process score message*/
    break;
  case Ok_Msg:
    ParseOkMsg(msg);
    break;
  case Initialize_Msg:
    ParseInitializeMsg(msg);
    break;
  case Error_Msg:
    std::cout << mpObserver->SelfUnum() << "@" << mpObserver->CurrentTime()
              << ": " << msg << std::endl;
    break;
  case Think_Msg:
    mpObserver->SetNewThink();
    break;
  case None_Msg:
    PRINT_ERROR(mpObserver->CurrentTime() << msg);
    break;
  }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movq %rsi, %rbx
movq %rdi, %r14
movzbl 0x1(%rsi), %eax
addl $-0x63, %eax
cmpl $0x11, %eax
ja 0x3de41
leaq 0x2d4c7(%rip), %rcx     # 0x6b110
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movb 0x2(%rbx), %dl
xorl %eax, %eax
cmpb $0x6c, %dl
sete %cl
cmpb $0x68, %dl
je 0x3def9
movb %cl, %al
leal (%rax,%rax,8), %eax
jmp 0x3de1e
movq 0x10(%r14), %rax
movl 0x2c(%rax), %esi
movq 0x46342(%rip), %rdi     # 0x83fc0
callq 0x9880
movq %rax, %r15
leaq 0x2d753(%rip), %rsi     # 0x6b3e0
movl $0x1, %edx
movq %rax, %rdi
callq 0x9560
movq 0x10(%r14), %rsi
addq $0xc, %rsi
movq %r15, %rdi
callq 0xe974
movq %rax, %r14
leaq 0x2d7a4(%rip), %rsi     # 0x6b458
movl $0x2, %edx
movq %rax, %rdi
callq 0x9560
jmp 0x3dea7
movq %r14, %rdi
movq %rbx, %rsi
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
jmp 0x3e28a
movq %r14, %rdi
movq %rbx, %rsi
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
jmp 0x411de
movb 0x8(%rbx), %cl
xorl %edx, %edx
cmpb $0x74, %cl
movl $0xa, %eax
cmovnel %edx, %eax
cmpb $0x70, %cl
jne 0x3de1e
movq %rbx, %rsi
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
jmp 0x4017c
movq %r14, %rdi
movq %rbx, %rsi
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
jmp 0x40208
movq $0x0, -0x20(%rbp)
movq %r14, %rdi
movq %rbx, %rsi
callq 0x3fdc6
testb %al, %al
jne 0x3deee
leaq -0x20(%rbp), %r15
movq %r14, %rdi
movq %rbx, %rsi
movq %r15, %rdx
movl $0x1, %ecx
callq 0x3e426
movq (%r15), %rsi
movq %r14, %rdi
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
jmp 0x3fe92
movq 0x10(%r14), %rdi
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
jmp 0x3c2a2
movzbl 0x3(%rbx), %eax
cmpl $0x6e, %eax
jg 0x3dddd
cmpl $0x65, %eax
je 0x3ddfd
cmpl $0x6e, %eax
jne 0x3de41
leaq -0x20(%rbp), %r15
movq $0x0, (%r15)
movq %r14, %rdi
movq %rbx, %rsi
movq %r15, %rdx
movl $0x1, %ecx
callq 0x3e426
movq (%r15), %rsi
movq %r14, %rdi
callq 0x3efd4
movq 0x10(%r14), %rdi
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
jmp 0x3c24a
cmpl $0x6f, %eax
je 0x3deee
cmpl $0x72, %eax
jne 0x3de41
movq %rbx, %rsi
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
jmp 0x401c2
movb 0x4(%rbx), %dl
xorl %eax, %eax
cmpb $0x5f, %dl
sete %cl
cmpb $0x20, %dl
jne 0x3de1a
movq $0x0, -0x20(%rbp)
jmp 0x3df0e
movb %cl, %al
addl %eax, %eax
movq $0x0, -0x20(%rbp)
cmpl $0xa, %eax
ja 0x3deee
movl %eax, %eax
leaq 0x2d320(%rip), %rcx     # 0x6b158
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq 0x461a8(%rip), %r15     # 0x83ff0
leaq 0x2d52f(%rip), %rsi     # 0x6b37e
movl $0x11, %edx
movq %r15, %rdi
callq 0x9560
leaq 0x2f32f(%rip), %rsi     # 0x6d192
movl $0x1, %edx
movq %r15, %rdi
callq 0x9560
movq %r15, %rdi
movl $0x156, %esi            # imm = 0x156
callq 0x9880
movq %rax, %r15
leaq 0x2d5d0(%rip), %rsi     # 0x6b457
movl $0x3, %edx
movq %rax, %rdi
callq 0x9560
movq 0x10(%r14), %rsi
addq $0xc, %rsi
movq %r15, %rdi
callq 0xe974
movq %rax, %r14
movq %rbx, %rdi
callq 0x9200
movq %r14, %rdi
movq %rbx, %rsi
movq %rax, %rdx
callq 0x9560
movq (%r14), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x9480
movsbl %al, %esi
movq %r14, %rdi
callq 0x9070
movq %rax, %rdi
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
jmp 0x9330
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
movq %r14, %rdi
movq %rbx, %rsi
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
jmp 0x4100a
leaq -0x20(%rbp), %r15
movq %r14, %rdi
movq %rbx, %rsi
movq %r15, %rdx
xorl %ecx, %ecx
callq 0x3e426
movq (%r15), %rsi
movq %r14, %rdi
callq 0x3e66a
jmp 0x3df63
movq %rbx, %rsi
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
jmp 0x410fe
leaq -0x20(%rbp), %r15
movq %r14, %rdi
movq %rbx, %rsi
movq %r15, %rdx
movl $0x1, %ecx
callq 0x3e426
movq (%r15), %rsi
movq %r14, %rdi
callq 0x3e9b0
movq 0x10(%r14), %rdi
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
jmp 0x3c2c4