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

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x20,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movl   $0x1,-0x10(%rbp)
  jmp    L112
L116:
  lea    D68(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    D104(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    D61(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    D185(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    D164(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    D106(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    D33(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    D104(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    D165(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    -0x18(%rbp),%rax
  mov    %rax,%rsi
  lea    D160(%rip),%rax
  mov    %rax,%rdi
  call   <scanf@plt>
  mov    -0x18(%rbp),%eax
  cmp    $0x5,%eax
  ja     L76
  mov    %eax,%eax
  lea    0x0(,%rax,4),%rdx
  lea    D89(%rip),%rax
  mov    (%rdx,%rax,1),%eax
  cltq
  lea    D89(%rip),%rdx
  add    %rdx,%rax
  notrack jmp *%rax
  mov    $0x0,%eax
  call   <is_full@plt>
  test   %eax,%eax
  jne    L109
  lea    D45(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    -0x14(%rbp),%rax
  mov    %rax,%rsi
  lea    D160(%rip),%rax
  mov    %rax,%rdi
  call   <scanf@plt>
  mov    -0x14(%rbp),%eax
  mov    %eax,%edi
  call   <Enqueue@plt>
  mov    -0x14(%rbp),%eax
  mov    %eax,%esi
  lea    D49(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L112
L109:
  lea    D94(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L112
  mov    $0x0,%eax
  call   <is_empty@plt>
  test   %eax,%eax
  jne    L110
  mov    $0x0,%eax
  call   <Dequeue@plt>
  mov    %eax,-0xc(%rbp)
  mov    -0xc(%rbp),%eax
  mov    %eax,%esi
  lea    D198(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L112
L110:
  lea    D158(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L112
  mov    $0x0,%eax
  call   <is_empty@plt>
  test   %eax,%eax
  jne    L112
  mov    $0x0,%eax
  call   <Front@plt>
  mov    %eax,-0xc(%rbp)
  mov    -0xc(%rbp),%eax
  mov    %eax,%esi
  lea    D75(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L112
  mov    $0x0,%eax
  call   <Display@plt>
  jmp    L112
  movl   $0x0,-0x10(%rbp)
  jmp    L112
L76:
  lea    D93(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
L112:
  cmpl   $0x0,-0x10(%rbp)
  jne    L116
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L55
  call   <__stack_chk_fail@plt>
L55:
  leave
  ret
```

tool_calls: name: unpack_data
arguments: data_tag: D68
type_guessed: string
name: unpack_data
arguments: data_tag: D104
type_guessed: string
name: unpack_data
arguments: data_tag: D61
type_guessed: string
name: unpack_data
arguments: data_tag: D185
type_guessed: string
name: unpack_data
arguments: data_tag: D164
type_guessed: string
name: unpack_data
arguments: data_tag: D106
type_guessed: string
name: unpack_data
arguments: data_tag: D33
type_guessed: string
name: unpack_data
arguments: data_tag: D165
type_guessed: string
name: unpack_data
arguments: data_tag: D160
type_guessed: string
name: unpack_data
arguments: data_tag: D45
type_guessed: string
name: unpack_data
arguments: data_tag: D49
type_guessed: string
name: unpack_data
arguments: data_tag: D94
type_guessed: string
name: unpack_data
arguments: data_tag: D198
type_guessed: string
name: unpack_data
arguments: data_tag: D158
type_guessed: string
name: unpack_data
arguments: data_tag: D75
type_guessed: string
name: unpack_data
arguments: data_tag: D93
type_guessed: string

tool: D68: 

Queue Operations

tool: D104: 
----------------

tool: D61: 
1. Enqueue

tool: D185: 
2. Dequeue

tool: D164: 
3. Front

tool: D106: 
4. Display

tool: D33: 
5. Exit

tool: D165: 
Enter your choice: 

tool: D160: %d

tool: D45: 
Enter the element to be enqueued: 

tool: D49: 
Enqueued element: %d

tool: D94: 
Error: Queue is full

tool: D198: 
Dequeued element: %d

tool: D158: 
Error: Queue is empty

tool: D75: 
Front element: %d

tool: D93: 
Invalid Choice

assistant: ```c
void main() {
  int choice, element, flag = 1, temp;
  while (flag) {
    printf("\n\nQueue Operations");
    printf("\n----------------");
    printf("\n1. Enqueue");
    printf("\n2. Dequeue");
    printf("\n3. Front");
    printf("\n4. Display");
    printf("\n5. Exit");
    printf("\n----------------");
    printf("\nEnter your choice: ");
    scanf("%d", &choice);
    switch (choice) {
    case 1:
      if (!is_full()) {
        printf("\nEnter the element to be enqueued: ");
        scanf("%d", &element);
        Enqueue(element);
        printf("\nEnqueued element: %d", element);
      } else {
        printf("\nError: Queue is full");
      }
      break;
    case 2:
      if (!is_empty()) {
        temp = Dequeue();
        printf("\nDequeued element: %d", temp);
      } else {
        printf("\nError: Queue is empty");
      }
      break;
    case 3:
      if (!is_empty()) {
        temp = Front();
        printf("\nFront element: %d", temp);
      }
      break;
    case 4:
      Display();
      break;
    case 5:
      flag = 0;
      break;
    default:
      printf("\nInvalid Choice");
    }
  }
}
```