user: What is the c source code of the assembly code below:

```asm
<main>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x18,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x8(%rsp)
  xor    %eax,%eax
  movl   $0x0,0x4(%rsp)
  movb   $0x79,0x3(%rsp)
  mov    $0x0,%edi
  call   <time@plt>
  mov    %eax,%edi
  call   <srand@plt>
  mov    $0x0,%eax
  call   <rand@plt>
  movslq %eax,%rdx
  imul   $0x10624dd3,%rdx,%rdx
  sar    $0x26,%rdx
  mov    %eax,%ecx
  sar    $0x1f,%ecx
  sub    %ecx,%edx
  imul   $0x3e8,%edx,%edx
  sub    %edx,%eax
  cmpb   $0x79,0x3(%rsp)
  jne    L95
  lea    0x1(%rax),%ebx
  mov    $0x0,%ebp
  lea    D40(%rip),%r13
  lea    D36(%rip),%r15
  jmp    L56
L27:
  mov    %r14,%rdi
  call   <puts@plt>
L81:
  cmp    %ebx,0x4(%rsp)
  je     L93
L20:
  mov    %r12,%rsi
  mov    %r13,%rdi
  mov    $0x0,%eax
  call   <scanf@plt>
  add    $0x1,%ebp
  mov    0x4(%rsp),%eax
  cmp    %ebx,%eax
  jg     L27
  jge    L81
  mov    %r15,%rdi
  call   <puts@plt>
  jmp    L81
L93:
  mov    %ebp,%edi
  call   <inf@plt>
  lea    D35(%rip),%rdi
  call   <puts@plt>
  mov    $0x0,%eax
  call   <rand@plt>
  mov    %eax,%ebx
  movslq %eax,%rdx
  imul   $0x10624dd3,%rdx,%rdx
  sar    $0x26,%rdx
  sar    $0x1f,%eax
  sub    %eax,%edx
  imul   $0x3e8,%edx,%edx
  sub    %edx,%ebx
  add    $0x1,%ebx
  lea    0x3(%rsp),%rsi
  lea    D10(%rip),%rdi
  mov    $0x0,%eax
  call   <scanf@plt>
  lea    D39(%rip),%rdi
  call   <puts@plt>
  cmpb   $0x79,0x3(%rsp)
  jne    L95
L56:
  lea    D12(%rip),%rdi
  call   <puts@plt>
  cmp    %ebx,0x4(%rsp)
  je     L93
  lea    0x4(%rsp),%r12
  lea    D25(%rip),%r14
  jmp    L20
L95:
  mov    0x8(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L55
  add    $0x18,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L55:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: parse_data
arguments: tag: D40
type_guessed: string
name: parse_data
arguments: tag: D36
type_guessed: string
name: parse_data
arguments: tag: D35
type_guessed: string
name: parse_data
arguments: tag: D10
type_guessed: string
name: parse_data
arguments: tag: D39
type_guessed: string
name: parse_data
arguments: tag: D12
type_guessed: string
name: parse_data
arguments: tag: D25
type_guessed: string

tool: D40: %d

tool: D36: Too low.Try again.

tool: D35: Would you like to play again (y or n)?

tool: D10:  %c

tool: D39: 


tool: D12: I have a number between 1 and 1000.
Can you guess my number?
Please type your first guess.

tool: D25: Too high.Try again.

assistant: ```c
void main(void) {
  int num, guess = 0, n = 0;
  char status = 'y';
  srand(time(NULL));
  num = rand() % 1000 + 1;
  while ('y' == status) {
    printf("I have a number between 1 and 1000.\nCan you guess my number?\nPlease type your first guess.\n");
    while (guess != num) {
      scanf("%d", &guess);
      ++n;
      if (guess > num) {
        printf("%s\n", "Too high.Try again.");
      } else if (guess < num) {
        printf("%s\n", "Too low.Try again.");
      }
    }
    inf(n);
    printf("%s\n", "Would you like to play again (y or n)?");
    num = rand() % 1000 + 1;
    scanf(" %c", &status);
    printf("\n\n");
  }
}
```