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

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x40,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x34(%rbp)
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x30(%rbp)
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x2c(%rbp)
  mov    $0x0,%eax
  call   <menu@plt>
  jmp    L87
L62:
  nop
L28:
  mov    $0x0,%eax
  call   <getchar@plt>
  cmp    $0xa,%al
  jne    L62
  movzbl -0x39(%rbp),%eax
  movsbl %al,%eax
  cmp    $0x63,%eax
  je     L86
  cmp    $0x63,%eax
  jg     L13
  cmp    $0x61,%eax
  je     L32
  cmp    $0x62,%eax
  je     L148
  jmp    L13
L32:
  lea    D239(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    -0x38(%rbp),%rax
  mov    %rax,%rsi
  lea    D152(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <scanf@plt>
  movss  -0x38(%rbp),%xmm0
  movss  -0x34(%rbp),%xmm1
  addss  %xmm1,%xmm0
  movss  %xmm0,-0x34(%rbp)
  jmp    L59
L148:
  lea    D210(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    -0x38(%rbp),%rax
  mov    %rax,%rsi
  lea    D152(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <scanf@plt>
  movss  -0x38(%rbp),%xmm0
  movss  -0x30(%rbp),%xmm1
  addss  %xmm1,%xmm0
  movss  %xmm0,-0x30(%rbp)
  jmp    L59
L86:
  lea    D216(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    -0x38(%rbp),%rax
  mov    %rax,%rsi
  lea    D152(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <scanf@plt>
  movss  -0x38(%rbp),%xmm0
  movss  -0x2c(%rbp),%xmm1
  addss  %xmm1,%xmm0
  movss  %xmm0,-0x2c(%rbp)
  jmp    L59
L13:
  lea    D21(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  jmp    L87
L59:
  jmp    L107
L215:
  nop
L107:
  mov    $0x0,%eax
  call   <getchar@plt>
  cmp    $0xa,%al
  jne    L215
  mov    $0x0,%eax
  call   <menu@plt>
L87:
  lea    -0x39(%rbp),%rax
  mov    %rax,%rsi
  lea    D219(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <scanf@plt>
  test   %rax,%rax
  je     L65
  movzbl -0x39(%rbp),%eax
  cmp    $0x71,%al
  jne    L28
L65:
  movss  -0x34(%rbp),%xmm1
  movss  D228(%rip),%xmm0
  mulss  %xmm1,%xmm0
  movss  %xmm0,-0x28(%rbp)
  pxor   %xmm1,%xmm1
  cvtss2sd -0x30(%rbp),%xmm1
  movsd  D116(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  cvtsd2ss %xmm0,%xmm0
  movss  %xmm0,-0x24(%rbp)
  pxor   %xmm1,%xmm1
  cvtss2sd -0x2c(%rbp),%xmm1
  movsd  D266(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  cvtsd2ss %xmm0,%xmm0
  movss  %xmm0,-0x20(%rbp)
  movss  -0x28(%rbp),%xmm0
  addss  -0x24(%rbp),%xmm0
  movss  -0x20(%rbp),%xmm1
  addss  %xmm1,%xmm0
  movss  %xmm0,-0x1c(%rbp)
  movss  -0x34(%rbp),%xmm0
  addss  -0x30(%rbp),%xmm0
  movss  -0x2c(%rbp),%xmm1
  addss  %xmm1,%xmm0
  movss  %xmm0,-0x18(%rbp)
  movss  D351(%rip),%xmm0
  comiss -0x18(%rbp),%xmm0
  jbe    L122
  movss  D154(%rip),%xmm0
  jmp    L111
L122:
  movss  D113(%rip),%xmm0
  comiss -0x18(%rbp),%xmm0
  jbe    L156
  movss  D238(%rip),%xmm0
  jmp    L111
L156:
  movss  -0x18(%rbp),%xmm0
  movss  D113(%rip),%xmm1
  subss  %xmm1,%xmm0
  pxor   %xmm1,%xmm1
  cvtss2sd %xmm0,%xmm1
  movsd  D221(%rip),%xmm0
  mulsd  %xmm0,%xmm1
  movsd  D281(%rip),%xmm0
  addsd  %xmm1,%xmm0
  cvtsd2ss %xmm0,%xmm0
L111:
  movss  %xmm0,-0x14(%rbp)
  movss  -0x1c(%rbp),%xmm0
  comiss D8(%rip),%xmm0
  jbe    L37
  pxor   %xmm1,%xmm1
  cvtss2sd -0x1c(%rbp),%xmm1
  movsd  D201(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  cvtsd2ss %xmm0,%xmm0
  jmp    L52
L37:
  pxor   %xmm0,%xmm0
L52:
  movss  %xmm0,-0x10(%rbp)
  movss  -0x1c(%rbp),%xmm0
  subss  -0x10(%rbp),%xmm0
  movss  -0x14(%rbp),%xmm1
  addss  %xmm1,%xmm0
  movss  %xmm0,-0xc(%rbp)
  lea    D183(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    D283(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  movsd  D116(%rip),%xmm0
  mov    D165(%rip),%rax
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  lea    D213(%rip),%rax
  mov    %rax,%rdi
  mov    $0x2,%eax
  call   <printf@plt>
  mov    D266(%rip),%rax
  movq   %rax,%xmm0
  lea    D196(%rip),%rax
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  lea    D338(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  pxor   %xmm0,%xmm0
  cvtss2sd -0x30(%rbp),%xmm0
  pxor   %xmm2,%xmm2
  cvtss2sd -0x34(%rbp),%xmm2
  movq   %xmm2,%rax
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  lea    D226(%rip),%rax
  mov    %rax,%rdi
  mov    $0x2,%eax
  call   <printf@plt>
  pxor   %xmm3,%xmm3
  cvtss2sd -0x2c(%rbp),%xmm3
  movq   %xmm3,%rax
  movq   %rax,%xmm0
  lea    D364(%rip),%rax
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  lea    D170(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  pxor   %xmm0,%xmm0
  cvtss2sd -0x24(%rbp),%xmm0
  pxor   %xmm4,%xmm4
  cvtss2sd -0x28(%rbp),%xmm4
  movq   %xmm4,%rax
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  lea    D213(%rip),%rax
  mov    %rax,%rdi
  mov    $0x2,%eax
  call   <printf@plt>
  pxor   %xmm0,%xmm0
  cvtss2sd -0x1c(%rbp),%xmm0
  pxor   %xmm5,%xmm5
  cvtss2sd -0x20(%rbp),%xmm5
  movq   %xmm5,%rax
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  lea    D309(%rip),%rax
  mov    %rax,%rdi
  mov    $0x2,%eax
  call   <printf@plt>
  pxor   %xmm6,%xmm6
  cvtss2sd -0x10(%rbp),%xmm6
  movq   %xmm6,%rax
  movq   %rax,%xmm0
  lea    D200(%rip),%rax
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  pxor   %xmm7,%xmm7
  cvtss2sd -0x14(%rbp),%xmm7
  movq   %xmm7,%rax
  movq   %rax,%xmm0
  lea    D140(%rip),%rax
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  pxor   %xmm2,%xmm2
  cvtss2sd -0xc(%rbp),%xmm2
  movq   %xmm2,%rax
  movq   %rax,%xmm0
  lea    D25(%rip),%rax
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  lea    D183(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  mov    $0x0,%eax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L81
  call   <__stack_chk_fail@plt>
L81:
  leave
  ret
```

tool_calls: name: read_data
arguments: data_label: D239
datatype: string
name: read_data
arguments: data_label: D152
datatype: string
name: read_data
arguments: data_label: D210
datatype: string
name: read_data
arguments: data_label: D216
datatype: string
name: read_data
arguments: data_label: D21
datatype: string
name: read_data
arguments: data_label: D219
datatype: string
name: read_data
arguments: data_label: D228
datatype: f32
name: read_data
arguments: data_label: D116
datatype: f64
name: read_data
arguments: data_label: D266
datatype: f64
name: read_data
arguments: data_label: D351
datatype: f32
name: read_data
arguments: data_label: D154
datatype: f32
name: read_data
arguments: data_label: D113
datatype: f32
name: read_data
arguments: data_label: D238
datatype: f32
name: read_data
arguments: data_label: D221
datatype: f64
name: read_data
arguments: data_label: D281
datatype: f64
name: read_data
arguments: data_label: D8
datatype: f32
name: read_data
arguments: data_label: D201
datatype: f64
name: read_data
arguments: data_label: D183
datatype: string
name: read_data
arguments: data_label: D283
datatype: string
name: read_data
arguments: data_label: D165
datatype: f32[2]
name: read_data
arguments: data_label: D213
datatype: string
name: read_data
arguments: data_label: D196
datatype: string
name: read_data
arguments: data_label: D338
datatype: string
name: read_data
arguments: data_label: D226
datatype: string
name: read_data
arguments: data_label: D364
datatype: string
name: read_data
arguments: data_label: D170
datatype: string
name: read_data
arguments: data_label: D309
datatype: string
name: read_data
arguments: data_label: D200
datatype: string
name: read_data
arguments: data_label: D140
datatype: string
name: read_data
arguments: data_label: D25
datatype: string

tool: D239: please enter the weight (in pound) of artichoke

tool: D152: %f

tool: D210: please enter the weight (in pound) of beet

tool: D216: please enter the weight (in pound) of carrot

tool: D21: No such option! Please enter a letter within the range a ~ c & q.

tool: D219: %c

tool: D228: 1.25

tool: D116: 0.65

tool: D266: 0.89

tool: D351: 5

tool: D154: 3.5

tool: D113: 20

tool: D238: 10

tool: D221: 0.1

tool: D281: 8

tool: D8: 100

tool: D201: 0.05

tool: D183: 
***********************************


tool: D283: Unit price:

tool: {"D165": [0.0,1.90625]}

tool: D213: Artichoke: $%.2f	Beet: $%.2f


tool: D196: Carrot: $%.2f



tool: D338: Weight ordered:

tool: D226: Artichoke: %.2f		Beet: %.2f


tool: D364: Carrot: %.2f



tool: D170: Order price:

tool: D309: Carrot: $%.2f		All: $%.2f



tool: D200: Discount: $%.2f


tool: D140: Transportation cost: $%.2f



tool: D25: Total: $%.2f


assistant: ```c
int main(void) {
  float weightA = 0, weightB = 0, weightC = 0;
  char type;
  menu();
  while (scanf("%c", &type) && type != 'q') {
    while (getchar() != '\n')
      continue;
    float addition;
    switch (type) {
    case 'a':
      printf("please enter the weight (in pound) of artichoke\n");
      scanf("%f", &addition);
      weightA += addition;
      break;
    case 'b':
      printf("please enter the weight (in pound) of beet\n");
      scanf("%f", &addition);
      weightB += addition;
      break;
    case 'c':
      printf("please enter the weight (in pound) of carrot\n");
      scanf("%f", &addition);
      weightC += addition;
      break;
    default:
      printf("No such option! Please enter a letter within the range a ~ c & q.\n");
      continue;
    }
    while (getchar() != '\n')
      continue;
    menu();
  }
  float costA = weightA * 1.25, costB = weightB * 0.65, costC = weightC * 0.89, costABC = costA + costB + costC, weight = weightA + weightB + weightC, costTrans = weight < 5 ? 3.5 : weight < 20 ? 10.0 : 8 + 0.1 * (weight - 20), discount = costABC > 100 ? 0.05 * costABC : 0, costT = costABC - discount + costTrans;
  printf("\n***********************************\n\n");
  printf("Unit price:\n");
  printf("Artichoke: $%.2f\tBeet: $%.2f\n", 1.25, 0.65);
  printf("Carrot: $%.2f\n\n", 0.89);
  printf("Weight ordered:\n");
  printf("Artichoke: %.2f\t\tBeet: %.2f\n", weightA, weightB);
  printf("Carrot: %.2f\n\n", weightC);
  printf("Order price:\n");
  printf("Artichoke: $%.2f\tBeet: $%.2f\n", costA, costB);
  printf("Carrot: $%.2f\t\tAll: $%.2f\n\n", costC, costABC);
  printf("Discount: $%.2f\n", discount);
  printf("Transportation cost: $%.2f\n\n", costTrans);
  printf("Total: $%.2f\n", costT);
  printf("\n***********************************\n\n");
  return 0;
}
```