user: 提供的汇编代码用C语言表示会是什么样子：

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x2e0,%rsp
  mov    %edi,-0x2d4(%rbp)
  mov    %rsi,-0x2e0(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  mov    $0x42,%edi
  call   <tea_bag_size@plt>
  cmp    $0x48,%eax
  sete   %al
  movzbl %al,%eax
  mov    %eax,%edi
  call   <assert@plt>
  lea    -0x270(%rbp),%rax
  mov    $0x130,%edx
  mov    $0x58,%esi
  mov    %rax,%rdi
  call   <memset@plt>
  lea    -0x270(%rbp),%rax
  mov    $0x42,%edx
  mov    $0x61,%esi
  mov    %rax,%rdi
  call   <memset@plt>
  lea    -0x140(%rbp),%rax
  mov    $0x130,%edx
  mov    $0x58,%esi
  mov    %rax,%rdi
  call   <memset@plt>
  lea    -0x140(%rbp),%rax
  mov    $0x48,%edx
  mov    $0x0,%esi
  mov    %rax,%rdi
  call   <memset@plt>
  lea    -0x140(%rbp),%rax
  mov    $0x42,%edx
  mov    $0x61,%esi
  mov    %rax,%rdi
  call   <memset@plt>
  lea    -0x270(%rbp),%rcx
  lea    -0x2b0(%rbp),%rax
  mov    $0x42,%edx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <tea_encrypt@plt>
  lea    -0x270(%rbp),%rcx
  lea    -0x2b0(%rbp),%rax
  mov    $0x48,%edx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <tea_decrypt@plt>
  lea    -0x270(%rbp),%rcx
  lea    -0x2b0(%rbp),%rax
  mov    $0x42,%edx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <tea_encrypt@plt>
  lea    -0x270(%rbp),%rcx
  lea    -0x2b0(%rbp),%rax
  mov    $0x48,%edx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <tea_decrypt@plt>
  lea    -0x140(%rbp),%rcx
  lea    -0x270(%rbp),%rax
  mov    $0x130,%edx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <memcmp@plt>
  test   %rax,%rax
  sete   %al
  movzbl %al,%eax
  mov    %eax,%edi
  call   <assert@plt>
  lea    -0x2c8(%rbp),%rax
  mov    $0x0,%esi
  mov    %rax,%rdi
  call   <gettimeofday@plt>
  movl   $0x0,-0x2c0(%rbp)
  jmp    L39
L73:
  lea    -0x270(%rbp),%rcx
  lea    -0x2b0(%rbp),%rax
  mov    $0x42,%edx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <tea_encrypt@plt>
  addl   $0x1,-0x2c0(%rbp)
L39:
  cmpl   $0x1e847f,-0x2c0(%rbp)
  jle    L73
  lea    -0x2c4(%rbp),%rax
  mov    $0x0,%esi
  mov    %rax,%rdi
  call   <gettimeofday@plt>
  lea    -0x2c4(%rbp),%rdx
  lea    -0x2c8(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <delta_timeval@plt>
  mov    %rax,-0x2b8(%rbp)
  mov    -0x2b8(%rbp),%rax
  test   %rax,%rax
  js     L54
  pxor   %xmm0,%xmm0
  cvtsi2sd %rax,%xmm0
  jmp    L81
L54:
  mov    %rax,%rdx
  shr    %rdx
  and    $0x1,%eax
  or     %rax,%rdx
  pxor   %xmm0,%xmm0
  cvtsi2sd %rdx,%xmm0
  addsd  %xmm0,%xmm0
L81:
  movsd  D33(%rip),%xmm1
  mulsd  %xmm1,%xmm0
  movsd  D31(%rip),%xmm1
  divsd  %xmm1,%xmm0
  movq   %xmm0,%rdx
  mov    -0x2b8(%rbp),%rax
  movq   %rdx,%xmm0
  mov    %rax,%rsi
  lea    D21(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    -0x2c8(%rbp),%rax
  mov    $0x0,%esi
  mov    %rax,%rdi
  call   <gettimeofday@plt>
  movl   $0x0,-0x2bc(%rbp)
  jmp    L83
L50:
  lea    -0x270(%rbp),%rcx
  lea    -0x2b0(%rbp),%rax
  mov    $0x48,%edx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <tea_decrypt@plt>
  addl   $0x1,-0x2bc(%rbp)
L83:
  cmpl   $0x1e847f,-0x2bc(%rbp)
  jle    L50
  lea    -0x2c4(%rbp),%rax
  mov    $0x0,%esi
  mov    %rax,%rdi
  call   <gettimeofday@plt>
  lea    -0x2c4(%rbp),%rdx
  lea    -0x2c8(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <delta_timeval@plt>
  mov    %rax,-0x2b8(%rbp)
  mov    -0x2b8(%rbp),%rax
  test   %rax,%rax
  js     L85
  pxor   %xmm0,%xmm0
  cvtsi2sd %rax,%xmm0
  jmp    L43
L85:
  mov    %rax,%rdx
  shr    %rdx
  and    $0x1,%eax
  or     %rax,%rdx
  pxor   %xmm0,%xmm0
  cvtsi2sd %rdx,%xmm0
  addsd  %xmm0,%xmm0
L43:
  movsd  D33(%rip),%xmm1
  mulsd  %xmm1,%xmm0
  movsd  D31(%rip),%xmm1
  divsd  %xmm1,%xmm0
  movq   %xmm0,%rdx
  mov    -0x2b8(%rbp),%rax
  movq   %rdx,%xmm0
  mov    %rax,%rsi
  lea    D44(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  mov    $0x0,%eax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L20
  call   <__stack_chk_fail@plt>
L20:
  leave
  ret
```

tool_calls: name: extract_symbolic_data
arguments: label: D33
type_infered: f64
name: extract_symbolic_data
arguments: label: D31
type_infered: byte[8]
name: extract_symbolic_data
arguments: label: D21
type_infered: string
name: extract_symbolic_data
arguments: label: D44
type_infered: string

tool: D33: 1000

tool: {"D31": [0x00,0x00,0x00,0x00,0x80,0x84,0x3e,0x41]}

tool: D21: TEA Encrypt %luus  %.0fns


tool: D44: TEA Decrypt %luus  %.0fns


assistant: ```c
int main(int argc, char *argv[]) {
  uint8_t buf[72 + 4], expect[72 + 4];
  uint8_t key[16];
  unsigned long delta;
  struct timeval start, end;
  assert(tea_bag_size(66) == 72);
  memset(buf, 'X', sizeof(buf));
  memset(buf, 'a', 66);
  memset(expect, 'X', sizeof(expect));
  memset(expect, 0, 72);
  memset(expect, 'a', 66);
  tea_encrypt(key, buf, 66);
  tea_decrypt(key, buf, 72);
  tea_encrypt(key, buf, 66);
  tea_decrypt(key, buf, 72);
  assert(memcmp(buf, expect, sizeof(buf)) == 0);
  gettimeofday(&start, NULL);
  for (int i = 0; i < 2000000; ++i)
    tea_encrypt(key, buf, 66);
  gettimeofday(&end, NULL);
  delta = delta_timeval(&start, &end);
  printf("TEA Encrypt %luus  %.0fns\n", delta, (double)delta * 1000.0 / 2000000);
  gettimeofday(&start, NULL);
  for (int i = 0; i < 2000000; ++i)
    tea_decrypt(key, buf, 72);
  gettimeofday(&end, NULL);
  delta = delta_timeval(&start, &end);
  printf("TEA Decrypt %luus  %.0fns\n", delta, (double)delta * 1000.0 / 2000000);
  return 0;
}
```