user: 请将以下的汇编代码转换成C语言代码：

```asm
<main>:
  endbr64
  push   %rbp
  lea    D15(%rip),%rdi
  sub    $0x60,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x58(%rsp)
  xor    %eax,%eax
  lea    0x48(%rsp),%rbp
  mov    %rbp,%rsi
  call   <scanf@plt>
  mov    %rbp,%rdi
  call   <strlen@plt>
  cmp    $0xa,%rax
  jne    L3
  movq   0x48(%rsp),%xmm1
  movzbl 0x50(%rsp),%ecx
  movq   D10(%rip),%xmm0
  lea    -0x30(%rcx),%edx
  movzbl 0x51(%rsp),%ecx
  paddb  %xmm0,%xmm1
  mov    %dl,0x50(%rsp)
  movsbl %dl,%edx
  lea    (%rdx,%rdx,2),%edx
  sub    $0x30,%ecx
  mov    %cl,0x51(%rsp)
  movsbl %cl,%ecx
  movq   %xmm1,%rax
  movq   %xmm1,0x48(%rsp)
  movzbl %ah,%edi
  movsbl %al,%esi
  movq   %xmm1,0x38(%rsp)
  movsbl %dil,%edi
  movq   %xmm1,0x30(%rsp)
  lea    (%rsi,%rdi,2),%edi
  movq   %xmm1,%rsi
  movq   %xmm1,0x28(%rsp)
  shl    $0x8,%rsi
  movq   %xmm1,0x20(%rsp)
  sar    $0x18,%esi
  movq   %xmm1,0x18(%rsp)
  lea    (%rdi,%rsi,4),%edi
  movq   %xmm1,%rsi
  movq   %xmm1,0x10(%rsp)
  shr    $0x18,%rsi
  movq   %xmm1,0x8(%rsp)
  movsbl %sil,%esi
  movq   %xmm1,(%rsp)
  lea    (%rsi,%rsi,4),%esi
  lea    (%rsi,%rdi,2),%edi
  movq   %xmm1,%rsi
  shr    $0x20,%rsi
  movsbl %sil,%esi
  lea    (%rsi,%rsi,4),%esi
  lea    (%rdi,%rsi,2),%edi
  movq   %xmm1,%rsi
  shr    $0x28,%rsi
  movsbl %sil,%esi
  lea    (%rsi,%rsi,8),%esi
  add    %esi,%edi
  movq   %xmm1,%rsi
  shr    $0x30,%rsi
  movsbl %sil,%esi
  lea    (%rdi,%rsi,8),%edi
  sub    %esi,%edi
  movq   %xmm1,%rsi
  shr    $0x38,%rsi
  movsbl %sil,%eax
  lea    (%rax,%rax,2),%eax
  add    %edi,%eax
  lea    (%rax,%rdx,2),%edx
  movslq %edx,%rax
  mov    %edx,%esi
  imul   $0x2e8ba2e9,%rax,%rax
  sar    $0x1f,%esi
  sar    $0x21,%rax
  sub    %esi,%eax
  lea    (%rax,%rax,4),%esi
  lea    (%rax,%rsi,2),%esi
  mov    %edx,%eax
  xor    %edx,%edx
  sub    %esi,%eax
  cmp    $0xa,%eax
  cmove  %edx,%eax
  cmp    %eax,%ecx
  je     L28
L3:
  mov    $0x30,%edi
  call   <putchar@plt>
L9:
  mov    0x58(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L37
  add    $0x60,%rsp
  xor    %eax,%eax
  pop    %rbp
  ret
L28:
  mov    $0x31,%edi
  call   <putchar@plt>
  jmp    L9
L37:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: extract_symbolic_data
arguments: data_label: D15
type: string
name: extract_symbolic_data
arguments: data_label: D10
type: byte[8]

tool: D15: %s

tool: {"D10": [0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0]}

assistant: ```c
int main() {
  char egn[12];
  int l, egn_control, months, i;
  scanf("%s", egn);
  l = strlen(egn);
  if (l != 10) {
    printf("0");
    return 0;
  }
  for (i = 0; i < l; i++) {
    egn[i] = (egn[i] - 48);
  }
  months = (egn[2]) * 10 + (egn[3]);
  if (months < 1 && months > 12) {
    printf("0");
    return 0;
  }
  if (months < 1 + 20 && months > 12 + 20) {
    printf("0");
    return 0;
  }
  if (months < 1 + 40 && months > 12 + 40) {
    printf("0");
    return 0;
  }
  egn_control = (egn[0] * 2) + (egn[1] * 4) + (egn[2] * 8) + (egn[3] * 5) + (egn[4] * 10) + (egn[5] * 9) + (egn[6] * 7) + (egn[7] * 3) + (egn[8] * 6);
  egn_control = egn_control % 11;
  if (egn_control == 10) {
    egn_control = 0;
  }
  if (egn[9] != egn_control) {
    printf("0");
  } else {
    printf("1");
  }
  return 0;
}
```