// File: wrighteagle2d[P]wrighteaglebase/Debug/../src/InterceptModel.cpp
// Function: InterceptModel::CalcInterception(Vector const&, Vector const&, double, PlayerState const*, InterceptModel::InterceptSolution*)
void InterceptModel::CalcInterception(const Vector &ball_pos,
                                      const Vector &ball_vel,
                                      const double buffer,
                                      const PlayerState *player,
                                      InterceptSolution *sol) {
  const double &alpha = ServerParam::instance().ballDecay();
  const double &ln_alpha = ServerParam::instance().logBallDecay();

  Vector start_pt = (player->GetPos() - ball_pos).Rotate(-ball_vel.Dir());

  //取得模型输入
  const double x0 = start_pt.X();
  const double y0 = start_pt.Y();
  const double ball_spd = ball_vel.Mod();

  const double &player_spd = player->GetEffectiveSpeedMax();
  const double &kick_area = buffer;
  const double cycle_delay = double(player->GetPosDelay());

  const double max_x = ball_spd / (1.0 - alpha);

  //	if (Logger::instance().CurrentTime() == Time(205, 0) &&
  //player->GetUnum() == 4){ 		PlotInterceptCurve(x0, y0, ball_spd, player_spd,
  //kick_area, cycle_delay, max_x);
  //	}

  //特殊情况处理
  const double s = Sqrt(x0 * x0 + y0 * y0);
  const double self_fix = kick_area + cycle_delay * player_spd;

  if (s < self_fix) { //最好的情况已经可踢
    sol->tangc = 0;
    sol->interc = 1;
    sol->interp[0] = 0;
    sol->intert[0] = 0;
    return;
  }

  if (ball_spd < 0.1) {
    sol->tangc = 0;
    sol->interc = 1;
    sol->interp[0] = 0;

    double p = (s - kick_area) / player_spd - cycle_delay;
    if (p < 0.0)
      p = 0.0;
    sol->intert[0] = p;
    return;
  }

  //先判断切点个数 -- 根据切点个数得到解的个数，并依次选择迭代的初值
  int n = CalcTangPoint(x0, y0, player_spd, kick_area, cycle_delay, sol);

  if (n < 1) { //没有切点
    sol->interc = 1;

    sol->interp[0] = CalcInterPoint(max_x - 1.0, x0, y0, ball_spd, player_spd,
                                    kick_area, cycle_delay);
    sol->intert[0] =
        log(1.0 - sol->interp[0] * (1.0 - alpha) / ball_spd) / ln_alpha;
  } else if (n == 1) {
    /**
     * n = 1的情况对应只有一个切点，即外切的时候同时内切
     **/
    sol->interc = 1;

    if (x0 < 0.0) {
      sol->interp[0] = CalcInterPoint(max_x - 1.0, x0, y0, ball_spd, player_spd,
                                      kick_area, cycle_delay);
    } else {
      sol->interp[0] = CalcInterPoint(x0, x0, y0, ball_spd, player_spd,
                                      kick_area, cycle_delay);
    }

    sol->intert[0] =
        log(1.0 - sol->interp[0] * (1.0 - alpha) / ball_spd) / ln_alpha;
  } else {
    if (ball_spd < sol->tangv[1]) { //没有最佳截球区间，早期就可截
      sol->interc = 1;

      sol->interp[0] = CalcInterPoint(x0, x0, y0, ball_spd, player_spd,
                                      kick_area, cycle_delay);
      sol->intert[0] =
          log(1.0 - sol->interp[0] * (1.0 - alpha) / ball_spd) / ln_alpha;
    } else if (ball_spd < sol->tangv[0]) { //有最佳截球区间
      sol->interc = 3;

      sol->interp[0] = CalcInterPoint(x0, x0, y0, ball_spd, player_spd,
                                      kick_area, cycle_delay);
      sol->intert[0] =
          log(1.0 - sol->interp[0] * (1.0 - alpha) / ball_spd) / ln_alpha;

      sol->interp[1] =
          CalcInterPoint((sol->tangp[0] + sol->tangp[1]) * 0.5, x0, y0,
                         ball_spd, player_spd, kick_area, cycle_delay);
      sol->intert[1] =
          log(1.0 - sol->interp[1] * (1.0 - alpha) / ball_spd) / ln_alpha;

      sol->interp[2] =
          CalcInterPoint((sol->tangp[1] + max_x) * 0.5, x0, y0, ball_spd,
                         player_spd, kick_area, cycle_delay);
      sol->intert[2] =
          log(1.0 - sol->interp[2] * (1.0 - alpha) / ball_spd) / ln_alpha;
    } else { //没有最佳截球区间，只有后期才可截
      sol->interc = 1;

      sol->interp[0] = CalcInterPoint(max_x - 1.0, x0, y0, ball_spd, player_spd,
                                      kick_area, cycle_delay);
      sol->intert[0] =
          log(1.0 - sol->interp[0] * (1.0 - alpha) / ball_spd) / ln_alpha;
    }
  }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x260, %rsp            # imm = 0x260
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movsd %xmm0, -0x20(%rbp)
movq %rcx, -0x28(%rbp)
movq %r8, -0x30(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x1c8(%rbp)
callq 0x855e0
movq %rax, %rdi
callq 0x113d0
movq %rax, -0x38(%rbp)
callq 0x855e0
movq %rax, %rdi
callq 0x4f340
movq %rax, -0x40(%rbp)
movq -0x28(%rbp), %rdi
addq $0x8, %rdi
callq 0x11090
movq %rax, %rdi
movq -0x10(%rbp), %rsi
callq 0x110a0
movsd %xmm0, -0x60(%rbp)
movsd %xmm1, -0x58(%rbp)
movq -0x18(%rbp), %rdi
callq 0x10520
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
movsd %xmm0, -0x68(%rbp)
leaq -0x60(%rbp), %rdi
leaq -0x68(%rbp), %rsi
callq 0x11110
movsd %xmm0, -0x50(%rbp)
movsd %xmm1, -0x48(%rbp)
leaq -0x50(%rbp), %rdi
callq 0x176f0
movsd (%rax), %xmm0
movsd %xmm0, -0x70(%rbp)
leaq -0x50(%rbp), %rdi
callq 0x17700
movsd (%rax), %xmm0
movsd %xmm0, -0x78(%rbp)
movq -0x18(%rbp), %rdi
callq 0x104e0
movsd %xmm0, -0x80(%rbp)
movq -0x28(%rbp), %rdi
callq 0x1d810
movq %rax, -0x88(%rbp)
leaq -0x20(%rbp), %rax
movq %rax, -0x90(%rbp)
movq -0x28(%rbp), %rdi
addq $0x8, %rdi
callq 0x1ddd0
cvtsi2sd %eax, %xmm0
movsd %xmm0, -0x98(%rbp)
movsd -0x80(%rbp), %xmm0
movq -0x38(%rbp), %rax
movsd 0x74239(%rip), %xmm1    # 0xc1010
subsd (%rax), %xmm1
divsd %xmm1, %xmm0
movsd %xmm0, -0xa0(%rbp)
movsd -0x70(%rbp), %xmm0
movsd -0x70(%rbp), %xmm2
movsd -0x78(%rbp), %xmm1
mulsd -0x78(%rbp), %xmm1
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0xb0(%rbp)
leaq -0xb0(%rbp), %rdi
callq 0x12420
movsd %xmm0, -0xa8(%rbp)
movq -0x90(%rbp), %rax
movsd (%rax), %xmm1
movsd -0x98(%rbp), %xmm0
movq -0x88(%rbp), %rax
movsd (%rax), %xmm2
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0xb8(%rbp)
movsd -0xa8(%rbp), %xmm1
movsd -0xb8(%rbp), %xmm0
ucomisd %xmm1, %xmm0
jbe 0x4cec9
movq -0x30(%rbp), %rax
movl $0x0, (%rax)
movq -0x30(%rbp), %rax
movl $0x1, 0x4(%rax)
movq -0x30(%rbp), %rdi
addq $0x28, %rdi
movq $0x0, -0xc0(%rbp)
leaq -0xc0(%rbp), %rsi
callq 0x4aae0
xorps %xmm0, %xmm0
movsd %xmm0, (%rax)
movq -0x30(%rbp), %rdi
addq $0x40, %rdi
movq $0x0, -0xc8(%rbp)
leaq -0xc8(%rbp), %rsi
callq 0x4aae0
xorps %xmm0, %xmm0
movsd %xmm0, (%rax)
jmp 0x4d8d6
movsd 0x7563f(%rip), %xmm0    # 0xc2510
ucomisd -0x80(%rbp), %xmm0
jbe 0x4cf9d
movq -0x30(%rbp), %rax
movl $0x0, (%rax)
movq -0x30(%rbp), %rax
movl $0x1, 0x4(%rax)
movq -0x30(%rbp), %rdi
addq $0x28, %rdi
movq $0x0, -0xd0(%rbp)
leaq -0xd0(%rbp), %rsi
callq 0x4aae0
xorps %xmm0, %xmm0
movsd %xmm0, (%rax)
movsd -0xa8(%rbp), %xmm0
movq -0x90(%rbp), %rax
subsd (%rax), %xmm0
movq -0x88(%rbp), %rax
divsd (%rax), %xmm0
subsd -0x98(%rbp), %xmm0
movsd %xmm0, -0xd8(%rbp)
xorps %xmm0, %xmm0
ucomisd -0xd8(%rbp), %xmm0
jbe 0x4cf5d
xorps %xmm0, %xmm0
movsd %xmm0, -0xd8(%rbp)
movsd -0xd8(%rbp), %xmm0
movsd %xmm0, -0x1d0(%rbp)
movq -0x30(%rbp), %rdi
addq $0x40, %rdi
movq $0x0, -0xe0(%rbp)
leaq -0xe0(%rbp), %rsi
callq 0x4aae0
movsd -0x1d0(%rbp), %xmm0
movsd %xmm0, (%rax)
jmp 0x4d8d6
movq -0x1c8(%rbp), %rdi
movsd -0x70(%rbp), %xmm0
movsd -0x78(%rbp), %xmm1
movq -0x88(%rbp), %rax
movsd (%rax), %xmm2
movq -0x90(%rbp), %rax
movsd (%rax), %xmm3
movsd -0x98(%rbp), %xmm4
movq -0x30(%rbp), %rsi
callq 0x4d8e0
movl %eax, -0xe4(%rbp)
cmpl $0x1, -0xe4(%rbp)
jge 0x4d100
movq -0x1c8(%rbp), %rdi
movq -0x30(%rbp), %rax
movl $0x1, 0x4(%rax)
movsd -0xa0(%rbp), %xmm0
movsd 0x74006(%rip), %xmm1    # 0xc1010
subsd %xmm1, %xmm0
movsd -0x70(%rbp), %xmm1
movsd -0x78(%rbp), %xmm2
movsd -0x80(%rbp), %xmm3
movq -0x88(%rbp), %rax
movsd (%rax), %xmm4
movq -0x90(%rbp), %rax
movsd (%rax), %xmm5
movsd -0x98(%rbp), %xmm6
callq 0x4e4f0
movsd %xmm0, -0x1e0(%rbp)
movq -0x30(%rbp), %rdi
addq $0x28, %rdi
movq $0x0, -0xf0(%rbp)
leaq -0xf0(%rbp), %rsi
callq 0x4aae0
movsd -0x1e0(%rbp), %xmm0
movsd %xmm0, (%rax)
movq -0x30(%rbp), %rdi
addq $0x28, %rdi
movq $0x0, -0xf8(%rbp)
leaq -0xf8(%rbp), %rsi
callq 0x4aae0
movsd (%rax), %xmm1
movq -0x38(%rbp), %rax
movsd 0x73f6e(%rip), %xmm0    # 0xc1010
subsd (%rax), %xmm0
mulsd %xmm0, %xmm1
divsd -0x80(%rbp), %xmm1
movsd 0x73f59(%rip), %xmm0    # 0xc1010
subsd %xmm1, %xmm0
callq 0xa490
movq -0x40(%rbp), %rax
divsd (%rax), %xmm0
movsd %xmm0, -0x1d8(%rbp)
movq -0x30(%rbp), %rdi
addq $0x40, %rdi
movq $0x0, -0x100(%rbp)
leaq -0x100(%rbp), %rsi
callq 0x4aae0
movsd -0x1d8(%rbp), %xmm0
movsd %xmm0, (%rax)
jmp 0x4d8d6
cmpl $0x1, -0xe4(%rbp)
jne 0x4d2a6
movq -0x30(%rbp), %rax
movl $0x1, 0x4(%rax)
xorps %xmm0, %xmm0
ucomisd -0x70(%rbp), %xmm0
jbe 0x4d1a8
movq -0x1c8(%rbp), %rdi
movsd -0xa0(%rbp), %xmm0
movsd 0x73ed3(%rip), %xmm1    # 0xc1010
subsd %xmm1, %xmm0
movsd -0x70(%rbp), %xmm1
movsd -0x78(%rbp), %xmm2
movsd -0x80(%rbp), %xmm3
movq -0x88(%rbp), %rax
movsd (%rax), %xmm4
movq -0x90(%rbp), %rax
movsd (%rax), %xmm5
movsd -0x98(%rbp), %xmm6
callq 0x4e4f0
movsd %xmm0, -0x1e8(%rbp)
movq -0x30(%rbp), %rdi
addq $0x28, %rdi
movq $0x0, -0x108(%rbp)
leaq -0x108(%rbp), %rsi
callq 0x4aae0
movsd -0x1e8(%rbp), %xmm0
movsd %xmm0, (%rax)
jmp 0x4d219
movq -0x1c8(%rbp), %rdi
movsd -0x70(%rbp), %xmm0
movsd -0x70(%rbp), %xmm1
movsd -0x78(%rbp), %xmm2
movsd -0x80(%rbp), %xmm3
movq -0x88(%rbp), %rax
movsd (%rax), %xmm4
movq -0x90(%rbp), %rax
movsd (%rax), %xmm5
movsd -0x98(%rbp), %xmm6
callq 0x4e4f0
movsd %xmm0, -0x1f0(%rbp)
movq -0x30(%rbp), %rdi
addq $0x28, %rdi
movq $0x0, -0x110(%rbp)
leaq -0x110(%rbp), %rsi
callq 0x4aae0
movsd -0x1f0(%rbp), %xmm0
movsd %xmm0, (%rax)
movq -0x30(%rbp), %rdi
addq $0x28, %rdi
movq $0x0, -0x118(%rbp)
leaq -0x118(%rbp), %rsi
callq 0x4aae0
movsd (%rax), %xmm1
movq -0x38(%rbp), %rax
movsd 0x73dc8(%rip), %xmm0    # 0xc1010
subsd (%rax), %xmm0
mulsd %xmm0, %xmm1
divsd -0x80(%rbp), %xmm1
movsd 0x73db3(%rip), %xmm0    # 0xc1010
subsd %xmm1, %xmm0
callq 0xa490
movq -0x40(%rbp), %rax
divsd (%rax), %xmm0
movsd %xmm0, -0x1f8(%rbp)
movq -0x30(%rbp), %rdi
addq $0x40, %rdi
movq $0x0, -0x120(%rbp)
leaq -0x120(%rbp), %rsi
callq 0x4aae0
movsd -0x1f8(%rbp), %xmm0
movsd %xmm0, (%rax)
jmp 0x4d8d4
movsd -0x80(%rbp), %xmm0
movsd %xmm0, -0x200(%rbp)
movq -0x30(%rbp), %rdi
addq $0x18, %rdi
movq $0x1, -0x128(%rbp)
leaq -0x128(%rbp), %rsi
callq 0x4f360
movsd -0x200(%rbp), %xmm1
movsd (%rax), %xmm0
ucomisd %xmm1, %xmm0
jbe 0x4d3f1
movq -0x1c8(%rbp), %rdi
movq -0x30(%rbp), %rax
movl $0x1, 0x4(%rax)
movsd -0x70(%rbp), %xmm0
movsd -0x70(%rbp), %xmm1
movsd -0x78(%rbp), %xmm2
movsd -0x80(%rbp), %xmm3
movq -0x88(%rbp), %rax
movsd (%rax), %xmm4
movq -0x90(%rbp), %rax
movsd (%rax), %xmm5
movsd -0x98(%rbp), %xmm6
callq 0x4e4f0
movsd %xmm0, -0x210(%rbp)
movq -0x30(%rbp), %rdi
addq $0x28, %rdi
movq $0x0, -0x130(%rbp)
leaq -0x130(%rbp), %rsi
callq 0x4aae0
movsd -0x210(%rbp), %xmm0
movsd %xmm0, (%rax)
movq -0x30(%rbp), %rdi
addq $0x28, %rdi
movq $0x0, -0x138(%rbp)
leaq -0x138(%rbp), %rsi
callq 0x4aae0
movsd (%rax), %xmm1
movq -0x38(%rbp), %rax
movsd 0x73c7d(%rip), %xmm0    # 0xc1010
subsd (%rax), %xmm0
mulsd %xmm0, %xmm1
divsd -0x80(%rbp), %xmm1
movsd 0x73c68(%rip), %xmm0    # 0xc1010
subsd %xmm1, %xmm0
callq 0xa490
movq -0x40(%rbp), %rax
divsd (%rax), %xmm0
movsd %xmm0, -0x208(%rbp)
movq -0x30(%rbp), %rdi
addq $0x40, %rdi
movq $0x0, -0x140(%rbp)
leaq -0x140(%rbp), %rsi
callq 0x4aae0
movsd -0x208(%rbp), %xmm0
movsd %xmm0, (%rax)
jmp 0x4d8d2
movsd -0x80(%rbp), %xmm0
movsd %xmm0, -0x218(%rbp)
movq -0x30(%rbp), %rdi
addq $0x18, %rdi
movq $0x0, -0x148(%rbp)
leaq -0x148(%rbp), %rsi
callq 0x4f360
movsd -0x218(%rbp), %xmm1
movsd (%rax), %xmm0
ucomisd %xmm1, %xmm0
jbe 0x4d7bd
movq -0x1c8(%rbp), %rdi
movq -0x30(%rbp), %rax
movl $0x3, 0x4(%rax)
movsd -0x70(%rbp), %xmm0
movsd -0x70(%rbp), %xmm1
movsd -0x78(%rbp), %xmm2
movsd -0x80(%rbp), %xmm3
movq -0x88(%rbp), %rax
movsd (%rax), %xmm4
movq -0x90(%rbp), %rax
movsd (%rax), %xmm5
movsd -0x98(%rbp), %xmm6
callq 0x4e4f0
movsd %xmm0, -0x250(%rbp)
movq -0x30(%rbp), %rdi
addq $0x28, %rdi
movq $0x0, -0x150(%rbp)
leaq -0x150(%rbp), %rsi
callq 0x4aae0
movsd -0x250(%rbp), %xmm0
movsd %xmm0, (%rax)
movq -0x30(%rbp), %rdi
addq $0x28, %rdi
movq $0x0, -0x158(%rbp)
leaq -0x158(%rbp), %rsi
callq 0x4aae0
movsd (%rax), %xmm1
movq -0x38(%rbp), %rax
movsd 0x73b32(%rip), %xmm0    # 0xc1010
subsd (%rax), %xmm0
mulsd %xmm0, %xmm1
divsd -0x80(%rbp), %xmm1
movsd 0x73b1d(%rip), %xmm0    # 0xc1010
subsd %xmm1, %xmm0
callq 0xa490
movq -0x40(%rbp), %rax
divsd (%rax), %xmm0
movsd %xmm0, -0x248(%rbp)
movq -0x30(%rbp), %rdi
addq $0x40, %rdi
movq $0x0, -0x160(%rbp)
leaq -0x160(%rbp), %rsi
callq 0x4aae0
movsd -0x248(%rbp), %xmm0
movsd %xmm0, (%rax)
movq -0x30(%rbp), %rdi
addq $0x8, %rdi
movq $0x0, -0x168(%rbp)
leaq -0x168(%rbp), %rsi
callq 0x4f360
movsd (%rax), %xmm0
movsd %xmm0, -0x240(%rbp)
movq -0x30(%rbp), %rdi
addq $0x8, %rdi
movq $0x1, -0x170(%rbp)
leaq -0x170(%rbp), %rsi
callq 0x4f360
movsd -0x240(%rbp), %xmm0
movq -0x1c8(%rbp), %rdi
addsd (%rax), %xmm0
movsd 0x73a84(%rip), %xmm1    # 0xc1020
mulsd %xmm1, %xmm0
movsd -0x70(%rbp), %xmm1
movsd -0x78(%rbp), %xmm2
movsd -0x80(%rbp), %xmm3
movq -0x88(%rbp), %rax
movsd (%rax), %xmm4
movq -0x90(%rbp), %rax
movsd (%rax), %xmm5
movsd -0x98(%rbp), %xmm6
callq 0x4e4f0
movsd %xmm0, -0x238(%rbp)
movq -0x30(%rbp), %rdi
addq $0x28, %rdi
movq $0x1, -0x178(%rbp)
leaq -0x178(%rbp), %rsi
callq 0x4aae0
movsd -0x238(%rbp), %xmm0
movsd %xmm0, (%rax)
movq -0x30(%rbp), %rdi
addq $0x28, %rdi
movq $0x1, -0x180(%rbp)
leaq -0x180(%rbp), %rsi
callq 0x4aae0
movsd (%rax), %xmm1
movq -0x38(%rbp), %rax
movsd 0x739dc(%rip), %xmm0    # 0xc1010
subsd (%rax), %xmm0
mulsd %xmm0, %xmm1
divsd -0x80(%rbp), %xmm1
movsd 0x739c7(%rip), %xmm0    # 0xc1010
subsd %xmm1, %xmm0
callq 0xa490
movq -0x40(%rbp), %rax
divsd (%rax), %xmm0
movsd %xmm0, -0x230(%rbp)
movq -0x30(%rbp), %rdi
addq $0x40, %rdi
movq $0x1, -0x188(%rbp)
leaq -0x188(%rbp), %rsi
callq 0x4aae0
movsd -0x230(%rbp), %xmm0
movsd %xmm0, (%rax)
movq -0x30(%rbp), %rdi
addq $0x8, %rdi
movq $0x1, -0x190(%rbp)
leaq -0x190(%rbp), %rsi
callq 0x4f360
movq -0x1c8(%rbp), %rdi
movsd (%rax), %xmm0
addsd -0xa0(%rbp), %xmm0
movsd 0x73959(%rip), %xmm1    # 0xc1020
mulsd %xmm1, %xmm0
movsd -0x70(%rbp), %xmm1
movsd -0x78(%rbp), %xmm2
movsd -0x80(%rbp), %xmm3
movq -0x88(%rbp), %rax
movsd (%rax), %xmm4
movq -0x90(%rbp), %rax
movsd (%rax), %xmm5
movsd -0x98(%rbp), %xmm6
callq 0x4e4f0
movsd %xmm0, -0x228(%rbp)
movq -0x30(%rbp), %rdi
addq $0x28, %rdi
movq $0x2, -0x198(%rbp)
leaq -0x198(%rbp), %rsi
callq 0x4aae0
movsd -0x228(%rbp), %xmm0
movsd %xmm0, (%rax)
movq -0x30(%rbp), %rdi
addq $0x28, %rdi
movq $0x2, -0x1a0(%rbp)
leaq -0x1a0(%rbp), %rsi
callq 0x4aae0
movsd (%rax), %xmm1
movq -0x38(%rbp), %rax
movsd 0x738b1(%rip), %xmm0    # 0xc1010
subsd (%rax), %xmm0
mulsd %xmm0, %xmm1
divsd -0x80(%rbp), %xmm1
movsd 0x7389c(%rip), %xmm0    # 0xc1010
subsd %xmm1, %xmm0
callq 0xa490
movq -0x40(%rbp), %rax
divsd (%rax), %xmm0
movsd %xmm0, -0x220(%rbp)
movq -0x30(%rbp), %rdi
addq $0x40, %rdi
movq $0x2, -0x1a8(%rbp)
leaq -0x1a8(%rbp), %rsi
callq 0x4aae0
movsd -0x220(%rbp), %xmm0
movsd %xmm0, (%rax)
jmp 0x4d8d0
movq -0x1c8(%rbp), %rdi
movq -0x30(%rbp), %rax
movl $0x1, 0x4(%rax)
movsd -0xa0(%rbp), %xmm0
movsd 0x73831(%rip), %xmm1    # 0xc1010
subsd %xmm1, %xmm0
movsd -0x70(%rbp), %xmm1
movsd -0x78(%rbp), %xmm2
movsd -0x80(%rbp), %xmm3
movq -0x88(%rbp), %rax
movsd (%rax), %xmm4
movq -0x90(%rbp), %rax
movsd (%rax), %xmm5
movsd -0x98(%rbp), %xmm6
callq 0x4e4f0
movsd %xmm0, -0x260(%rbp)
movq -0x30(%rbp), %rdi
addq $0x28, %rdi
movq $0x0, -0x1b0(%rbp)
leaq -0x1b0(%rbp), %rsi
callq 0x4aae0
movsd -0x260(%rbp), %xmm0
movsd %xmm0, (%rax)
movq -0x30(%rbp), %rdi
addq $0x28, %rdi
movq $0x0, -0x1b8(%rbp)
leaq -0x1b8(%rbp), %rsi
callq 0x4aae0
movsd (%rax), %xmm1
movq -0x38(%rbp), %rax
movsd 0x73799(%rip), %xmm0    # 0xc1010
subsd (%rax), %xmm0
mulsd %xmm0, %xmm1
divsd -0x80(%rbp), %xmm1
movsd 0x73784(%rip), %xmm0    # 0xc1010
subsd %xmm1, %xmm0
callq 0xa490
movq -0x40(%rbp), %rax
divsd (%rax), %xmm0
movsd %xmm0, -0x258(%rbp)
movq -0x30(%rbp), %rdi
addq $0x40, %rdi
movq $0x0, -0x1c0(%rbp)
leaq -0x1c0(%rbp), %rsi
callq 0x4aae0
movsd -0x258(%rbp), %xmm0
movsd %xmm0, (%rax)
jmp 0x4d8d2
jmp 0x4d8d4
jmp 0x4d8d6
addq $0x260, %rsp            # imm = 0x260
popq %rbp
retq
nop