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

```asm
<main>:
  endbr64
  sub    $0x68,%rsp
  lea    D17(%rip),%rdi
  mov    %fs:0x28,%rax
  mov    %rax,0x58(%rsp)
  xor    %eax,%eax
  lea    0x48(%rsp),%rsi
  call   <scanf@plt>
  movzbl 0x48(%rsp),%eax
  sub    $0x30,%eax
  cmp    $0x9,%al
  ja     L65
  movzbl 0x49(%rsp),%eax
  sub    $0x30,%eax
  cmp    $0x9,%al
  movzbl 0x4a(%rsp),%eax
  ja     L176
  lea    -0x30(%rax),%edx
  cmp    $0x9,%dl
  ja     L176
  movzbl 0x4b(%rsp),%ecx
  lea    -0x30(%rcx),%edx
  movzbl 0x4c(%rsp),%ecx
  cmp    $0x9,%dl
  ja     L135
  lea    -0x30(%rcx),%edx
  cmp    $0x9,%dl
  ja     L135
  movzbl 0x4d(%rsp),%edx
  sub    $0x30,%edx
  cmp    $0x9,%dl
  ja     L14
  movzbl 0x4e(%rsp),%edx
  sub    $0x30,%edx
  cmp    $0x9,%dl
  ja     L14
  movzbl 0x4f(%rsp),%edx
  sub    $0x30,%edx
  cmp    $0x9,%dl
  ja     L14
  movzbl 0x50(%rsp),%edx
  xor    %r8d,%r8d
  lea    -0x30(%rdx),%esi
  cmp    $0x9,%sil
  setbe  %r8b
L95:
  cmp    $0x35,%al
  jle    L84
  xor    %r8d,%r8d
L111:
  cmp    $0x33,%cl
  jne    L68
  xor    %eax,%eax
  cmpb   $0x32,0x4d(%rsp)
  cmovge %eax,%r8d
  jmp    L68
L176:
  movzbl 0x4c(%rsp),%ecx
L135:
  movzbl 0x50(%rsp),%edx
  xor    %r8d,%r8d
  cmp    $0x35,%al
  jg     L85
L84:
  mov    %eax,%esi
  and    $0xfffffffd,%esi
  cmp    $0x31,%sil
  jne    L164
L151:
  xor    %eax,%eax
  cmpb   $0x33,0x4b(%rsp)
  cmovge %eax,%r8d
L85:
  cmp    $0x2f,%cl
  jg     L111
  xor    %r8d,%r8d
L68:
  movq   0x48(%rsp),%xmm1
  sub    $0x30,%edx
  movzbl 0x51(%rsp),%ecx
  movq   D16(%rip),%xmm0
  mov    %dl,0x50(%rsp)
  sub    $0x30,%ecx
  paddb  %xmm0,%xmm1
  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
  lea    (%rdi,%rax,1),%esi
  movsbl %dl,%eax
  lea    D22(%rip),%rdi
  lea    (%rax,%rax,2),%eax
  lea    (%rsi,%rax,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
  cmovne %edx,%r8d
  mov    %r8d,%esi
  call   <printf@plt>
  mov    0x58(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L47
  xor    %eax,%eax
  add    $0x68,%rsp
  ret
L164:
  cmp    $0x35,%al
  je     L151
  jmp    L85
L14:
  movzbl 0x50(%rsp),%edx
  xor    %r8d,%r8d
  jmp    L95
L65:
  movzbl 0x4a(%rsp),%eax
  movzbl 0x4c(%rsp),%ecx
  jmp    L135
L47:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: unpack_data
arguments: data_label: D17
type: string
name: unpack_data
arguments: data_label: D16
type: byte[8]
name: unpack_data
arguments: data_label: D22
type: string

tool: D17: %s

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

tool: D22: %d

assistant: ```c
int main() {
  char s[11];
  int i, v, sum = 0;
  scanf("%s", s);
  v = 1;
  for (i = 0; i < 9; i++)
    if (s[i] < '0' || s[i] > '9') {
      v = 0;
      break;
    }
  if (s[2] > '5')
    v = 0;
  if (s[2] == '1' || s[2] == '3' || s[2] == '5')
    if (s[3] > '2')
      v = 0;
  if (s[4] < '0' && '3' > s[4])
    v = 0;
  if (s[4] == '3')
    if (s[5] > '1')
      v = 0;
  for (i = 0; i < 10; i++)
    s[i] = s[i] - 48;
  sum = s[0] * 2 + s[1] * 4 + s[2] * 8 + s[3] * 5 + s[4] * 10 + s[5] * 9 + s[6] * 7 + s[7] * 3 + s[8] * 6;
  sum = sum % 11;
  if (sum == 10)
    sum = 0;
  if (sum != s[9])
    v = 0;
  printf("%d", v);
  return 0;
}
```