// File: wrighteagle2d[P]wrighteaglebase/Debug/../src/Parser.cpp
// Function: Parser::ParseFullstateMsg(char*)
void Parser::ParseFullstateMsg(char *msg) {
  //(fullstate 336 (pmode goal_l) (vmode high narrow) (count 0 0 313 0 1 290 8
  //743) (arm (movable 0) (expires 0) (target 0 0) (count 0)) (score 1 0)
  //((b) 52.6578 -4.41664 0 0)
  //((p l 1 g 8) -47.5 0 0 0 -66.8915 -80 (stamina 8000 0.829636 1 130600))
  //((p l 2 4) -25 -13 7.7863e-25 4.77769e-24 151.664 34 (stamina 8000 0.974746
  //1 123249))
  //((p l 3 12) -5.00073 -8.01793 -1.54512e-19 -8.12881e-18 -25.8413 -66
  //(stamina 7621.08 0.985774 1 111028))
  //...
  //((p r 11 14) 0.385 -7.01275e-12 -1.15337e-23 -8.33192e-24 46.129 0 (stamina
  //8000 0.933173 1 124249)))

  int time = parser::get_int(&msg);

  if (time != mpObserver->CurrentTime().T()) {
    mpObserver->SetCurrentTime(Time(time, mpObserver->CurrentTime().S()));
  }

  parser::get_word(&msg);
  parser::get_next_word(&msg); // skip 'pmode'

  parser::get_word(&msg);

  {
    static char buffer[MAX_MESSAGE];
    char *end = msg;

    while (*end != ')')
      end++;
    int n = end - msg;
    strncpy(buffer, msg, n * sizeof(char));
    buffer[n] = '\0';

    ParsePlayMode(buffer);

    msg = end;
  }

  parser::get_next_word(&msg); // skip 'vmode'
  parser::get_next_word(&msg); // skip not used view quality

  ViewWidth view_width = VW_None;
  switch (msg[1]) {
  case 'o':
    view_width = VW_Normal;
    break; /* normal */
  case 'a':
    view_width = VW_Narrow;
    break; /* narrow */
  case 'i':
    view_width = VW_Wide;
    break; /* wide   */
  default:
    PARSE_ERROR("Unknown view quality");
    break;
  }

  int kicks = parser::get_int(&msg);
  int dashes = parser::get_int(&msg);
  int turns = parser::get_int(&msg);
  int catchs = parser::get_int(&msg);
  int moves = parser::get_int(&msg);
  int turn_necks = parser::get_int(&msg);
  int change_views = parser::get_int(&msg);
  int says = parser::get_int(&msg);

  int arm_movable_ban = parser::get_int(&msg); // 直到下次手臂能动的剩余周期数
  int arm_expires = parser::get_int(&msg); // 直到手臂动作失效剩余的周期数
  double arm_target_dist = parser::get_double(&msg); // 指向的目标的距离
  AngleDeg arm_target_dir = parser::get_double(&msg); // 指向的目标的方向
  int arm_count = parser::get_int(&msg);              // point count

  mpObserver->SetSensePartialBody(
      view_width,

      kicks, dashes, turns, says, turn_necks, catchs, moves, change_views,

      arm_movable_ban, arm_expires, arm_target_dist, arm_target_dir, arm_count,

      mpObserver->CurrentTime());

  for (int i = 1; i <= TEAMSIZE; ++i) {
    mpObserver->Teammate_Fullstate(i).SetIsAlive(false);
    mpObserver->Opponent_Fullstate(i).SetIsAlive(false);
  }

  msg = strstr(msg, "((");

  while (msg != 0) {                           // 直到没有object为止
    msg += 2;                                  // 跳过 ((
    ObjType obj = ParseObjType_Fullstate(msg); // 获得object的类型
    msg = strchr(msg, ')');
    ObjProperty_Fullstate prop =
        ParseObjProperty_Fullstate(msg + 1); // 获得object的属性

    switch (obj.type) {
    case OBJ_Ball:
      mpObserver->Ball_Fullstate().UpdatePos(Vector(prop.x, prop.y), 0, 1.0);
      mpObserver->Ball_Fullstate().UpdateVel(Vector(prop.vx, prop.vy), 0, 1.0);
      break;
    case OBJ_Player:
      if (obj.side == mpObserver->OurSide()) {
        mpObserver->Teammate_Fullstate(obj.num).UpdatePlayerType(
            obj.player_type);
        mpObserver->Teammate_Fullstate(obj.num).SetIsAlive(true);
        mpObserver->Teammate_Fullstate(obj.num).UpdatePos(
            Vector(prop.x, prop.y), 0, 1.0);
        mpObserver->Teammate_Fullstate(obj.num).UpdateVel(
            Vector(prop.vx, prop.vy), 0, 1.0);
        mpObserver->Teammate_Fullstate(obj.num).UpdateBodyDir(prop.body_dir, 0,
                                                              1.0);
        mpObserver->Teammate_Fullstate(obj.num).UpdateNeckDir(prop.head_dir, 0,
                                                              1.0);
        mpObserver->Teammate_Fullstate(obj.num).UpdateStamina(prop.stamina);
        mpObserver->Teammate_Fullstate(obj.num).UpdateEffort(prop.effort);
        mpObserver->Teammate_Fullstate(obj.num).UpdateRecovery(prop.recovery);
        mpObserver->Teammate_Fullstate(obj.num).UpdateCapacity(prop.capacity);
        mpObserver->Teammate_Fullstate(obj.num).UpdateCardType(prop.card_type);

        if (prop.pointing) {
          mpObserver->Teammate_Fullstate(obj.num).UpdateArmPoint(
              prop.point_dir, 0, 1.0, 0.0, 0, 0);
          // TODO:
          // 这个接口不好，因为是看不到dist，ban等信息的，这些要自己算然后维护
        }
        if (prop.tackling) {
          if (mpObserver->Teammate_Fullstate(obj.num).GetTackleBan() == 0) {
            mpObserver->Teammate_Fullstate(obj.num).UpdateTackleBan(
                ServerParam::instance().tackleCycles() - 1);
          }
        } else {
          mpObserver->Teammate_Fullstate(obj.num).UpdateTackleBan(0);
        }
        if (prop.lying) {
          if (mpObserver->Teammate_Fullstate(obj.num).GetFoulChargedCycle() ==
              0) {
            mpObserver->Teammate_Fullstate(obj.num).UpdateFoulChargedCycle(
                ServerParam::instance().foulCycles() - 1);
          }
        } else {
          mpObserver->Teammate_Fullstate(obj.num).UpdateFoulChargedCycle(0);
        }
      } else {
        mpObserver->Opponent_Fullstate(obj.num).UpdatePlayerType(
            obj.player_type);
        mpObserver->Opponent_Fullstate(obj.num).SetIsAlive(true);
        mpObserver->Opponent_Fullstate(obj.num).UpdatePos(
            Vector(prop.x, prop.y), 0, 1.0);
        mpObserver->Opponent_Fullstate(obj.num).UpdateVel(
            Vector(prop.vx, prop.vy), 0, 1.0);
        mpObserver->Opponent_Fullstate(obj.num).UpdateBodyDir(prop.body_dir, 0,
                                                              1.0);
        mpObserver->Opponent_Fullstate(obj.num).UpdateNeckDir(prop.head_dir, 0,
                                                              1.0);
        mpObserver->Opponent_Fullstate(obj.num).UpdateStamina(prop.stamina);
        mpObserver->Opponent_Fullstate(obj.num).UpdateEffort(prop.effort);
        mpObserver->Opponent_Fullstate(obj.num).UpdateRecovery(prop.recovery);
        mpObserver->Opponent_Fullstate(obj.num).UpdateCapacity(prop.capacity);
        mpObserver->Opponent_Fullstate(obj.num).UpdateCardType(prop.card_type);

        if (prop.pointing) {
          mpObserver->Opponent_Fullstate(obj.num).UpdateArmPoint(
              prop.point_dir, 0, 1.0, 0.0, 0, 0);
          // TODO:
          // 这个接口不好，因为是看不到dist，ban等信息的，这些要自己算然后维护
        }
        if (prop.tackling) {
          if (mpObserver->Opponent_Fullstate(obj.num).GetTackleBan() == 0) {
            mpObserver->Opponent_Fullstate(obj.num).UpdateTackleBan(
                ServerParam::instance().tackleCycles() - 1);
          }
        } else {
          mpObserver->Opponent_Fullstate(obj.num).UpdateTackleBan(0);
        }
        if (prop.lying) {
          if (mpObserver->Opponent_Fullstate(obj.num).GetFoulChargedCycle() ==
              0) {
            mpObserver->Opponent_Fullstate(obj.num).UpdateFoulChargedCycle(
                ServerParam::instance().foulCycles() - 1);
          }
        } else {
          mpObserver->Opponent_Fullstate(obj.num).UpdateFoulChargedCycle(0);
        }
      }
      break;
    default:
      break;
    }
    msg = strstr(msg, "(("); // 下一个object
  }

  mpObserver->mReceiveFullstateMsg = true;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x268, %rsp            # imm = 0x268
movq %rdi, -0x30(%rbp)
movq %rsi, -0x38(%rbp)
movq -0x30(%rbp), %rax
movq %rax, -0x198(%rbp)
leaq -0x38(%rbp), %rdi
callq 0x77bf0
movl %eax, %ecx
movq -0x198(%rbp), %rax
movl %ecx, -0x3c(%rbp)
movl -0x3c(%rbp), %ecx
movl %ecx, -0x18c(%rbp)
movq 0x10(%rax), %rdi
callq 0x11a70
movq %rax, %rdi
callq 0x13040
movl %eax, %ecx
movl -0x18c(%rbp), %eax
cmpl %ecx, %eax
je 0x7400f
movq -0x198(%rbp), %rax
movq 0x10(%rax), %rcx
movq %rcx, -0x1a0(%rbp)
movl -0x3c(%rbp), %ecx
movl %ecx, -0x1a4(%rbp)
movq 0x10(%rax), %rdi
callq 0x11a70
movq %rax, %rdi
callq 0x13050
movl -0x1a4(%rbp), %esi
movl %eax, %edx
leaq -0x44(%rbp), %rdi
callq 0x13c70
movq -0x1a0(%rbp), %rdi
leaq -0x44(%rbp), %rsi
callq 0x77ca0
leaq -0x38(%rbp), %rdi
callq 0x77cc0
leaq -0x38(%rbp), %rdi
callq 0x77d20
leaq -0x38(%rbp), %rdi
callq 0x77cc0
movq -0x38(%rbp), %rax
movq %rax, -0x50(%rbp)
movq -0x50(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x29, %eax
je 0x7404c
movq -0x50(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x50(%rbp)
jmp 0x74032
movl -0x50(%rbp), %eax
movl -0x38(%rbp), %ecx
subl %ecx, %eax
movl %eax, -0x54(%rbp)
movq -0x38(%rbp), %rsi
movslq -0x54(%rbp), %rdx
leaq 0x35b84a(%rip), %rdi    # 0x3cf8b0
movq %rdi, -0x1b8(%rbp)
callq 0xa2f0
movq -0x198(%rbp), %rdi
movq -0x1b8(%rbp), %rsi
movslq -0x54(%rbp), %rax
movb $0x0, (%rax,%rsi)
callq 0x75220
movq -0x50(%rbp), %rax
movq %rax, -0x38(%rbp)
leaq -0x38(%rbp), %rdi
movq %rdi, -0x1b0(%rbp)
callq 0x77d20
movq -0x1b0(%rbp), %rdi
callq 0x77d20
movl $0x0, -0x58(%rbp)
movq -0x38(%rbp), %rax
movsbl 0x1(%rax), %eax
movl %eax, -0x1a8(%rbp)
subl $0x61, %eax
je 0x740f0
jmp 0x740cd
movl -0x1a8(%rbp), %eax
subl $0x69, %eax
je 0x740f9
jmp 0x740da
movl -0x1a8(%rbp), %eax
subl $0x6f, %eax
jne 0x74102
jmp 0x740e7
movl $0x2, -0x58(%rbp)
jmp 0x74104
movl $0x1, -0x58(%rbp)
jmp 0x74104
movl $0x3, -0x58(%rbp)
jmp 0x74104
jmp 0x74104
leaq -0x38(%rbp), %rdi
callq 0x77bf0
movl %eax, -0x5c(%rbp)
leaq -0x38(%rbp), %rdi
callq 0x77bf0
movl %eax, -0x60(%rbp)
leaq -0x38(%rbp), %rdi
callq 0x77bf0
movl %eax, -0x64(%rbp)
leaq -0x38(%rbp), %rdi
callq 0x77bf0
movl %eax, -0x68(%rbp)
leaq -0x38(%rbp), %rdi
callq 0x77bf0
movl %eax, -0x6c(%rbp)
leaq -0x38(%rbp), %rdi
callq 0x77bf0
movl %eax, -0x70(%rbp)
leaq -0x38(%rbp), %rdi
callq 0x77bf0
movl %eax, -0x74(%rbp)
leaq -0x38(%rbp), %rdi
callq 0x77bf0
movl %eax, -0x78(%rbp)
leaq -0x38(%rbp), %rdi
callq 0x77bf0
movl %eax, -0x7c(%rbp)
leaq -0x38(%rbp), %rdi
callq 0x77bf0
movl %eax, -0x80(%rbp)
leaq -0x38(%rbp), %rdi
callq 0x77d60
movsd %xmm0, -0x88(%rbp)
leaq -0x38(%rbp), %rdi
callq 0x77d60
movsd %xmm0, -0x90(%rbp)
leaq -0x38(%rbp), %rdi
callq 0x77bf0
movl %eax, %ecx
movq -0x198(%rbp), %rax
movl %ecx, -0x94(%rbp)
movq 0x10(%rax), %rcx
movq %rcx, -0x1f0(%rbp)
movl -0x58(%rbp), %ecx
movl %ecx, -0x1e8(%rbp)
movl -0x5c(%rbp), %ecx
movl %ecx, -0x1e4(%rbp)
movl -0x60(%rbp), %ecx
movl %ecx, -0x1e0(%rbp)
movl -0x64(%rbp), %ecx
movl %ecx, -0x1dc(%rbp)
movl -0x78(%rbp), %ecx
movl %ecx, -0x1d8(%rbp)
movl -0x70(%rbp), %r13d
movl -0x68(%rbp), %r12d
movl -0x6c(%rbp), %r15d
movl -0x74(%rbp), %r14d
movl -0x7c(%rbp), %ebx
movl -0x80(%rbp), %ecx
movl %ecx, -0x1d4(%rbp)
movsd -0x88(%rbp), %xmm0
movsd %xmm0, -0x1d0(%rbp)
movsd -0x90(%rbp), %xmm0
movsd %xmm0, -0x1c8(%rbp)
movl -0x94(%rbp), %ecx
movl %ecx, -0x1bc(%rbp)
movq 0x10(%rax), %rdi
callq 0x11a70
movq -0x1f0(%rbp), %rdi
movl -0x1e8(%rbp), %esi
movl -0x1e4(%rbp), %edx
movl -0x1e0(%rbp), %ecx
movl -0x1dc(%rbp), %r8d
movl -0x1d8(%rbp), %r9d
movl -0x1d4(%rbp), %r11d
movsd -0x1d0(%rbp), %xmm0
movsd -0x1c8(%rbp), %xmm1
movl -0x1bc(%rbp), %r10d
movq (%rax), %rax
movq %rax, -0x9c(%rbp)
movq -0x9c(%rbp), %rax
movl %r13d, (%rsp)
movl %r12d, 0x8(%rsp)
movl %r15d, 0x10(%rsp)
movl %r14d, 0x18(%rsp)
movl %ebx, 0x20(%rsp)
movl %r11d, 0x28(%rsp)
movl %r10d, 0x30(%rsp)
movq %rax, 0x38(%rsp)
callq 0x6d1d0
movl $0x1, -0xa0(%rbp)
cmpl $0xb, -0xa0(%rbp)
jg 0x74324
movq -0x198(%rbp), %rax
movq 0x10(%rax), %rdi
movl -0xa0(%rbp), %esi
callq 0x29540
movq %rax, %rdi
xorl %esi, %esi
callq 0x288a0
movq -0x198(%rbp), %rax
movq 0x10(%rax), %rdi
movl -0xa0(%rbp), %esi
callq 0x77e10
movq %rax, %rdi
xorl %esi, %esi
callq 0x288a0
movl -0xa0(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xa0(%rbp)
jmp 0x742ca
movq -0x38(%rbp), %rdi
leaq 0x4e648(%rip), %rsi     # 0xc2977
callq 0xa170
movq %rax, -0x38(%rbp)
cmpq $0x0, -0x38(%rbp)
je 0x74b8d
movq -0x198(%rbp), %rsi
movq -0x38(%rbp), %rax
addq $0x2, %rax
movq %rax, -0x38(%rbp)
movq -0x38(%rbp), %rdx
leaq -0xb8(%rbp), %rdi
callq 0x75f30
movq -0x38(%rbp), %rdi
movl $0x29, %esi
callq 0xa220
movq -0x198(%rbp), %rsi
movq %rax, -0x38(%rbp)
movq -0x38(%rbp), %rdx
incq %rdx
leaq -0x128(%rbp), %rdi
callq 0x75fd0
movl -0xb8(%rbp), %eax
movl %eax, -0x1f4(%rbp)
subl $0x1, %eax
je 0x743b9
jmp 0x743a5
movl -0x1f4(%rbp), %eax
subl $0x4, %eax
je 0x74466
jmp 0x74b72
movq -0x198(%rbp), %rax
movq 0x10(%rax), %rdi
callq 0x77e40
movq %rax, -0x208(%rbp)
leaq -0x128(%rbp), %rsi
leaq -0x128(%rbp), %rdx
addq $0x8, %rdx
leaq -0x138(%rbp), %rdi
callq 0x11a10
movq -0x208(%rbp), %rdi
leaq -0x138(%rbp), %rsi
xorl %edx, %edx
movsd 0x4cc0a(%rip), %xmm0    # 0xc1010
callq 0x142f0
movq -0x198(%rbp), %rax
movq 0x10(%rax), %rdi
callq 0x77e40
movq %rax, -0x200(%rbp)
leaq -0x128(%rbp), %rsi
addq $0x10, %rsi
leaq -0x128(%rbp), %rdx
addq $0x18, %rdx
leaq -0x148(%rbp), %rdi
callq 0x11a10
movq -0x200(%rbp), %rdi
leaq -0x148(%rbp), %rsi
xorl %edx, %edx
movsd 0x4cbb4(%rip), %xmm0    # 0xc1010
callq 0x142a0
jmp 0x74b74
movq -0x198(%rbp), %rax
movsbl -0xac(%rbp), %ecx
movl %ecx, -0x20c(%rbp)
movq 0x10(%rax), %rdi
callq 0x6e5b0
movq %rax, %rcx
movl -0x20c(%rbp), %eax
movsbl (%rcx), %ecx
cmpl %ecx, %eax
jne 0x74805
movq -0x198(%rbp), %rax
movq 0x10(%rax), %rdi
movl -0xa8(%rbp), %esi
callq 0x29540
movq %rax, %rdi
movl -0xa4(%rbp), %esi
callq 0x77e60
movq -0x198(%rbp), %rax
movq 0x10(%rax), %rdi
movl -0xa8(%rbp), %esi
callq 0x29540
movq %rax, %rdi
movl $0x1, %esi
callq 0x288a0
movq -0x198(%rbp), %rax
movq 0x10(%rax), %rdi
movl -0xa8(%rbp), %esi
callq 0x29540
movq %rax, -0x220(%rbp)
leaq -0x128(%rbp), %rsi
leaq -0x128(%rbp), %rdx
addq $0x8, %rdx
leaq -0x158(%rbp), %rdi
callq 0x11a10
movq -0x220(%rbp), %rdi
leaq -0x158(%rbp), %rsi
xorl %edx, %edx
movsd 0x4cadf(%rip), %xmm0    # 0xc1010
callq 0x142f0
movq -0x198(%rbp), %rax
movq 0x10(%rax), %rdi
movl -0xa8(%rbp), %esi
callq 0x29540
movq %rax, -0x218(%rbp)
leaq -0x128(%rbp), %rsi
addq $0x10, %rsi
leaq -0x128(%rbp), %rdx
addq $0x18, %rdx
leaq -0x168(%rbp), %rdi
callq 0x11a10
movq -0x218(%rbp), %rdi
leaq -0x168(%rbp), %rsi
xorl %edx, %edx
movsd 0x4ca83(%rip), %xmm0    # 0xc1010
callq 0x142a0
movq -0x198(%rbp), %rax
movq 0x10(%rax), %rdi
movl -0xa8(%rbp), %esi
callq 0x29540
movq %rax, %rdi
movsd -0x108(%rbp), %xmm0
xorl %esi, %esi
movsd 0x4ca53(%rip), %xmm1    # 0xc1010
callq 0x77ef0
movq -0x198(%rbp), %rax
movq 0x10(%rax), %rdi
movl -0xa8(%rbp), %esi
callq 0x29540
movq %rax, %rdi
movsd -0x100(%rbp), %xmm0
xorl %esi, %esi
movsd 0x4ca23(%rip), %xmm1    # 0xc1010
callq 0x77f60
movq -0x198(%rbp), %rax
movq 0x10(%rax), %rdi
movl -0xa8(%rbp), %esi
callq 0x29540
movq %rax, %rdi
movsd -0xe0(%rbp), %xmm0
callq 0x77fd0
movq -0x198(%rbp), %rax
movq 0x10(%rax), %rdi
movl -0xa8(%rbp), %esi
callq 0x29540
movq %rax, %rdi
movsd -0xd8(%rbp), %xmm0
callq 0x77ff0
movq -0x198(%rbp), %rax
movq 0x10(%rax), %rdi
movl -0xa8(%rbp), %esi
callq 0x29540
movq %rax, %rdi
movsd -0xd0(%rbp), %xmm0
callq 0x78010
movq -0x198(%rbp), %rax
movq 0x10(%rax), %rdi
movl -0xa8(%rbp), %esi
callq 0x29540
movq %rax, %rdi
movsd -0xc8(%rbp), %xmm0
callq 0x78030
movq -0x198(%rbp), %rax
movq 0x10(%rax), %rdi
movl -0xa8(%rbp), %esi
callq 0x29540
movq %rax, %rdi
movl -0xbc(%rbp), %esi
callq 0x78050
testb $0x1, -0xf8(%rbp)
je 0x746ee
movq -0x198(%rbp), %rax
movq 0x10(%rax), %rdi
movl -0xa8(%rbp), %esi
callq 0x29540
movq %rax, %rdi
movsd -0xe8(%rbp), %xmm0
xorl %ecx, %ecx
movsd 0x4c92e(%rip), %xmm1    # 0xc1010
xorps %xmm2, %xmm2
movl %ecx, %esi
movl %ecx, %edx
callq 0x78090
testb $0x1, -0xc0(%rbp)
je 0x74757
movq -0x198(%rbp), %rax
movq 0x10(%rax), %rdi
movl -0xa8(%rbp), %esi
callq 0x29540
movq %rax, %rdi
callq 0x12c40
cmpl $0x0, %eax
jne 0x74755
movq -0x198(%rbp), %rax
movq 0x10(%rax), %rdi
movl -0xa8(%rbp), %esi
callq 0x29540
movq %rax, -0x228(%rbp)
callq 0x855e0
movq %rax, %rdi
callq 0x78160
movq -0x228(%rbp), %rdi
movl %eax, %esi
subl $0x1, %esi
callq 0x78140
jmp 0x74777
movq -0x198(%rbp), %rax
movq 0x10(%rax), %rdi
movl -0xa8(%rbp), %esi
callq 0x29540
movq %rax, %rdi
xorl %esi, %esi
callq 0x78140
testb $0x1, -0xbf(%rbp)
je 0x747e0
movq -0x198(%rbp), %rax
movq 0x10(%rax), %rdi
movl -0xa8(%rbp), %esi
callq 0x29540
movq %rax, %rdi
callq 0x12c60
cmpl $0x0, %eax
jne 0x747de
movq -0x198(%rbp), %rax
movq 0x10(%rax), %rdi
movl -0xa8(%rbp), %esi
callq 0x29540
movq %rax, -0x230(%rbp)
callq 0x855e0
movq %rax, %rdi
callq 0x781a0
movq -0x230(%rbp), %rdi
movl (%rax), %esi
subl $0x1, %esi
callq 0x78180
jmp 0x74800
movq -0x198(%rbp), %rax
movq 0x10(%rax), %rdi
movl -0xa8(%rbp), %esi
callq 0x29540
movq %rax, %rdi
xorl %esi, %esi
callq 0x78180
jmp 0x74b70
movq -0x198(%rbp), %rax
movq 0x10(%rax), %rdi
movl -0xa8(%rbp), %esi
callq 0x77e10
movq %rax, %rdi
movl -0xa4(%rbp), %esi
callq 0x77e60
movq -0x198(%rbp), %rax
movq 0x10(%rax), %rdi
movl -0xa8(%rbp), %esi
callq 0x77e10
movq %rax, %rdi
movl $0x1, %esi
callq 0x288a0
movq -0x198(%rbp), %rax
movq 0x10(%rax), %rdi
movl -0xa8(%rbp), %esi
callq 0x77e10
movq %rax, -0x240(%rbp)
leaq -0x128(%rbp), %rsi
leaq -0x128(%rbp), %rdx
addq $0x8, %rdx
leaq -0x178(%rbp), %rdi
callq 0x11a10
movq -0x240(%rbp), %rdi
leaq -0x178(%rbp), %rsi
xorl %edx, %edx
movsd 0x4c771(%rip), %xmm0    # 0xc1010
callq 0x142f0
movq -0x198(%rbp), %rax
movq 0x10(%rax), %rdi
movl -0xa8(%rbp), %esi
callq 0x77e10
movq %rax, -0x238(%rbp)
leaq -0x128(%rbp), %rsi
addq $0x10, %rsi
leaq -0x128(%rbp), %rdx
addq $0x18, %rdx
leaq -0x188(%rbp), %rdi
callq 0x11a10
movq -0x238(%rbp), %rdi
leaq -0x188(%rbp), %rsi
xorl %edx, %edx
movsd 0x4c715(%rip), %xmm0    # 0xc1010
callq 0x142a0
movq -0x198(%rbp), %rax
movq 0x10(%rax), %rdi
movl -0xa8(%rbp), %esi
callq 0x77e10
movq %rax, %rdi
movsd -0x108(%rbp), %xmm0
xorl %esi, %esi
movsd 0x4c6e5(%rip), %xmm1    # 0xc1010
callq 0x77ef0
movq -0x198(%rbp), %rax
movq 0x10(%rax), %rdi
movl -0xa8(%rbp), %esi
callq 0x77e10
movq %rax, %rdi
movsd -0x100(%rbp), %xmm0
xorl %esi, %esi
movsd 0x4c6b5(%rip), %xmm1    # 0xc1010
callq 0x77f60
movq -0x198(%rbp), %rax
movq 0x10(%rax), %rdi
movl -0xa8(%rbp), %esi
callq 0x77e10
movq %rax, %rdi
movsd -0xe0(%rbp), %xmm0
callq 0x77fd0
movq -0x198(%rbp), %rax
movq 0x10(%rax), %rdi
movl -0xa8(%rbp), %esi
callq 0x77e10
movq %rax, %rdi
movsd -0xd8(%rbp), %xmm0
callq 0x77ff0
movq -0x198(%rbp), %rax
movq 0x10(%rax), %rdi
movl -0xa8(%rbp), %esi
callq 0x77e10
movq %rax, %rdi
movsd -0xd0(%rbp), %xmm0
callq 0x78010
movq -0x198(%rbp), %rax
movq 0x10(%rax), %rdi
movl -0xa8(%rbp), %esi
callq 0x77e10
movq %rax, %rdi
movsd -0xc8(%rbp), %xmm0
callq 0x78030
movq -0x198(%rbp), %rax
movq 0x10(%rax), %rdi
movl -0xa8(%rbp), %esi
callq 0x77e10
movq %rax, %rdi
movl -0xbc(%rbp), %esi
callq 0x78050
testb $0x1, -0xf8(%rbp)
je 0x74a5c
movq -0x198(%rbp), %rax
movq 0x10(%rax), %rdi
movl -0xa8(%rbp), %esi
callq 0x77e10
movq %rax, %rdi
movsd -0xe8(%rbp), %xmm0
xorl %ecx, %ecx
movsd 0x4c5c0(%rip), %xmm1    # 0xc1010
xorps %xmm2, %xmm2
movl %ecx, %esi
movl %ecx, %edx
callq 0x78090
testb $0x1, -0xc0(%rbp)
je 0x74ac5
movq -0x198(%rbp), %rax
movq 0x10(%rax), %rdi
movl -0xa8(%rbp), %esi
callq 0x77e10
movq %rax, %rdi
callq 0x12c40
cmpl $0x0, %eax
jne 0x74ac3
movq -0x198(%rbp), %rax
movq 0x10(%rax), %rdi
movl -0xa8(%rbp), %esi
callq 0x77e10
movq %rax, -0x248(%rbp)
callq 0x855e0
movq %rax, %rdi
callq 0x78160
movq -0x248(%rbp), %rdi
movl %eax, %esi
subl $0x1, %esi
callq 0x78140
jmp 0x74ae5
movq -0x198(%rbp), %rax
movq 0x10(%rax), %rdi
movl -0xa8(%rbp), %esi
callq 0x77e10
movq %rax, %rdi
xorl %esi, %esi
callq 0x78140
testb $0x1, -0xbf(%rbp)
je 0x74b4e
movq -0x198(%rbp), %rax
movq 0x10(%rax), %rdi
movl -0xa8(%rbp), %esi
callq 0x77e10
movq %rax, %rdi
callq 0x12c60
cmpl $0x0, %eax
jne 0x74b4c
movq -0x198(%rbp), %rax
movq 0x10(%rax), %rdi
movl -0xa8(%rbp), %esi
callq 0x77e10
movq %rax, -0x250(%rbp)
callq 0x855e0
movq %rax, %rdi
callq 0x781a0
movq -0x250(%rbp), %rdi
movl (%rax), %esi
subl $0x1, %esi
callq 0x78180
jmp 0x74b6e
movq -0x198(%rbp), %rax
movq 0x10(%rax), %rdi
movl -0xa8(%rbp), %esi
callq 0x77e10
movq %rax, %rdi
xorl %esi, %esi
callq 0x78180
jmp 0x74b70
jmp 0x74b74
jmp 0x74b74
movq -0x38(%rbp), %rdi
leaq 0x4ddf8(%rip), %rsi     # 0xc2977
callq 0xa170
movq %rax, -0x38(%rbp)
jmp 0x74338
movq -0x198(%rbp), %rax
movq 0x10(%rax), %rax
movb $0x1, 0x8(%rax)
addq $0x268, %rsp            # imm = 0x268
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
nop