user: 请从给定的汇编指令推导出C源代码：

```asm
<main>:
  endbr64
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x50,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x48(%rsp)
  xor    %eax,%eax
  movl   $0x0,0x44(%rsp)
  call   <setpar@plt>
  lea    0x34(%rsp),%rdx
  lea    D97(%rip),%rbx
  mov    %rbx,%rsi
  lea    D83(%rip),%rdi
  mov    $0x0,%eax
  call   <mstpar@plt>
  lea    0x38(%rsp),%rdx
  mov    %rbx,%rsi
  lea    D70(%rip),%rdi
  mov    $0x0,%eax
  call   <mstpar@plt>
  lea    0x3c(%rsp),%rdx
  mov    %rbx,%rsi
  lea    D158(%rip),%rdi
  mov    $0x0,%eax
  call   <mstpar@plt>
  lea    0x40(%rsp),%rdx
  mov    %rbx,%rsi
  lea    D139(%rip),%rdi
  mov    $0x0,%eax
  call   <mstpar@plt>
  lea    0x44(%rsp),%rdx
  mov    %rbx,%rsi
  lea    D131(%rip),%rdi
  mov    $0x0,%eax
  call   <getpar@plt>
  mov    $0x0,%eax
  call   <endpar@plt>
  mov    0x34(%rsp),%ebp
  mov    0x3c(%rsp),%ebx
  movd   %ebp,%xmm0
  movd   %ebx,%xmm7
  addss  %xmm7,%xmm0
  cvtss2sd %xmm0,%xmm0
  mulsd  D117(%rip),%xmm0
  mulsd  D49(%rip),%xmm0
  call   <tan@plt>
  mulsd  D143(%rip),%xmm0
  call   <atan@plt>
  lea    0x28(%rsp),%rdi
  lea    0x20(%rsp),%rsi
  call   <sincos@plt>
  mov    0x20(%rsp),%r12
  movsd  0x28(%rsp),%xmm0
  movapd %xmm0,%xmm1
  mulsd  D50(%rip),%xmm1
  mulsd  %xmm0,%xmm1
  movsd  %xmm1,0x10(%rsp)
  movsd  D3(%rip),%xmm0
  addsd  %xmm0,%xmm1
  divsd  %xmm1,%xmm0
  pxor   %xmm1,%xmm1
  ucomisd %xmm0,%xmm1
  ja     L26
  sqrtsd %xmm0,%xmm0
  movsd  %xmm0,0x8(%rsp)
L4:
  movq   %r12,%xmm0
  mulsd  D76(%rip),%xmm0
  mulsd  0x8(%rsp),%xmm0
  pxor   %xmm7,%xmm7
  cvtsd2ss %xmm0,%xmm7
  movss  %xmm7,0x1c(%rsp)
  movsd  0x10(%rsp),%xmm2
  mulsd  D167(%rip),%xmm2
  addsd  D3(%rip),%xmm2
  pxor   %xmm0,%xmm0
  ucomisd %xmm2,%xmm0
  ja     L18
  sqrtsd %xmm2,%xmm2
  movq   %xmm2,%r12
L15:
  lea    0x28(%rsp),%rdi
  lea    0x20(%rsp),%rsi
  pxor   %xmm0,%xmm0
  cvtss2sd 0x44(%rsp),%xmm0
  mulsd  D49(%rip),%xmm0
  call   <sincos@plt>
  pxor   %xmm0,%xmm0
  cvtsd2ss 0x20(%rsp),%xmm0
  pxor   %xmm4,%xmm4
  cvtsd2ss 0x28(%rsp),%xmm4
  movss  0x38(%rsp),%xmm3
  subss  0x40(%rsp),%xmm3
  mulss  0x1c(%rsp),%xmm3
  movq   %r12,%xmm2
  mulsd  D76(%rip),%xmm2
  movsd  0x8(%rsp),%xmm6
  mulsd  %xmm6,%xmm2
  mulsd  %xmm6,%xmm2
  mulsd  %xmm6,%xmm2
  cvtsd2ss %xmm2,%xmm2
  movd   %ebx,%xmm1
  movd   %ebp,%xmm7
  subss  %xmm7,%xmm1
  mulss  %xmm1,%xmm2
  movaps %xmm3,%xmm5
  mulss  %xmm4,%xmm5
  movaps %xmm0,%xmm1
  mulss  %xmm2,%xmm1
  subss  %xmm5,%xmm1
  mulss  %xmm3,%xmm0
  mulss  %xmm2,%xmm4
  addss  %xmm4,%xmm0
  cvtss2sd %xmm0,%xmm0
  cvtss2sd %xmm1,%xmm1
  lea    D68(%rip),%rdi
  mov    $0x2,%eax
  call   <printf@plt>
  mov    0x48(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L45
  mov    $0x0,%eax
  add    $0x50,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  ret
L26:
  call   <sqrt@plt>
  movsd  %xmm0,0x8(%rsp)
  jmp    L4
L18:
  movapd %xmm2,%xmm0
  call   <sqrt@plt>
  movq   %xmm0,%r12
  jmp    L15
L45:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: extract_symbolic_data
arguments: label: D97
data_type: string
name: extract_symbolic_data
arguments: label: D83
data_type: string
name: extract_symbolic_data
arguments: label: D70
data_type: string
name: extract_symbolic_data
arguments: label: D158
data_type: string
name: extract_symbolic_data
arguments: label: D139
data_type: string
name: extract_symbolic_data
arguments: label: D131
data_type: string
name: extract_symbolic_data
arguments: label: D117
data_type: f64
name: extract_symbolic_data
arguments: label: D49
data_type: f64
name: extract_symbolic_data
arguments: label: D143
data_type: byte[8]
name: extract_symbolic_data
arguments: label: D50
data_type: byte[8]
name: extract_symbolic_data
arguments: label: D3
data_type: f64
name: extract_symbolic_data
arguments: label: D76
data_type: byte[8]
name: extract_symbolic_data
arguments: label: D167
data_type: byte[8]
name: extract_symbolic_data
arguments: label: D68
data_type: string

tool: D97: f

tool: D83: elat

tool: D70: elon

tool: D158: mlat

tool: D139: mlon

tool: D131: rotate

tool: D117: 0.5

tool: D49: 0.017453292

tool: {"D143": [0x26,0xa3,0x18,0x9e,0x88,0xe4,0xef,0x3f]}

tool: {"D50": [0x2c,0x65,0x25,0x57,0xe7,0x9a,0x7b,0x3f]}

tool: D3: 1

tool: {"D76": [0x6d,0xf6,0x02,0x0e,0x73,0xd4,0x5b,0x40]}

tool: {"D167": [0xb3,0x92,0xab,0x73,0xcd,0x0d,0x00,0x40]}

tool: D68: %10.4f %10.4f


assistant: ```c
main(ac, av) int ac;
char **av;
{
  float elat, elon, mlat, mlon;
  float kperd_n, kperd_e, xtop, ytop;
  float x0, y0, cosR, sinR;
  double cosA, sinA, e2, den, g2, h2, lat0;
  float rotate = 0.0;
  double rperd = 0.017453292;
  double rad = 6378.139;
  double f = 298.256;
  setpar(ac, av);
  mstpar("elat", "f", &elat);
  mstpar("elon", "f", &elon);
  mstpar("mlat", "f", &mlat);
  mstpar("mlon", "f", &mlon);
  getpar("rotate", "f", &rotate);
  endpar();
  f = 1.0 / f;
  e2 = 2.0 * f - f * f;
  h2 = (1.0 - f) * (1.0 - f);
  g2 = e2 / h2;
  lat0 = atan((1.0 - f) * tan(0.5 * (elat + mlat) * rperd));
  cosA = cos(lat0);
  sinA = sin(lat0);
  den = sqrt(1.0 / (1.0 + g2 * sinA * sinA));
  kperd_e = rperd * rad * cosA * den;
  kperd_n = rperd * rad * (sqrt(1.0 + g2 * sinA * sinA * (2.0 + g2))) * den * den * den;
  cosR = cos(rotate * rperd);
  sinR = sin(rotate * rperd);
  x0 = (elon - mlon) * kperd_e;
  y0 = (mlat - elat) * kperd_n;
  xtop = x0 * cosR + y0 * sinR;
  ytop = -x0 * sinR + y0 * cosR;
  printf("%10.4f %10.4f\n", xtop, ytop);
}
```