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

```asm
<generatePassword>:
  endbr64
  sub    $0x78,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x68(%rsp)
  xor    %eax,%eax
  cmp    $0x2,%esi
  je     L10
  jg     L28
  test   %esi,%esi
  je     L36
  cmp    $0x1,%esi
  jne    L35
  movdqa D57(%rip),%xmm0
  mov    $0x7a79,%edx
  mov    %rsp,%rsi
  movb   $0x0,0x3e(%rsp)
  movabs $0x74737271706f6e6d,%rax
  mov    %dx,0x3c(%rsp)
  mov    $0x3f,%edx
  movaps %xmm0,(%rsp)
  movdqa D87(%rip),%xmm0
  mov    %rax,0x30(%rsp)
  movaps %xmm0,0x10(%rsp)
  movdqa D76(%rip),%xmm0
  movl   $0x78777675,0x38(%rsp)
  movaps %xmm0,0x20(%rsp)
  call   <random_string@plt>
  lea    D81(%rip),%rdi
  mov    %rax,%rsi
  call   <printf@plt>
  nopl   0x0(%rax)
L35:
  mov    0x68(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L58
  add    $0x78,%rsp
  ret
  nopl   0x0(%rax)
L28:
  cmp    $0x3,%esi
  jne    L35
  movdqa D124(%rip),%xmm0
  mov    %rsp,%rsi
  mov    $0x35,%edx
  movl   $0x7a797877,0x30(%rsp)
  movb   $0x0,0x34(%rsp)
  movaps %xmm0,(%rsp)
  movdqa D71(%rip),%xmm0
  movaps %xmm0,0x10(%rsp)
  movdqa D123(%rip),%xmm0
  movaps %xmm0,0x20(%rsp)
  call   <random_string@plt>
  lea    D81(%rip),%rdi
  mov    %rax,%rsi
  call   <printf@plt>
  jmp    L35
  cs nopw 0x0(%rax,%rax,1)
L10:
  mov    %rsp,%rsi
  mov    $0xb,%edx
  movb   $0x0,0xa(%rsp)
  movabs $0x3736353433323130,%rax
  mov    %rax,(%rsp)
  mov    $0x3938,%eax
  mov    %ax,0x8(%rsp)
  call   <random_string@plt>
  lea    D81(%rip),%rdi
  mov    %rax,%rsi
  call   <printf@plt>
  jmp    L35
  xchg   %ax,%ax
L36:
  movdqa D57(%rip),%xmm0
  mov    %rsp,%rsi
  mov    $0x59,%edx
  movabs $0x5d5b7d7b3c7c5c40,%rax
  mov    %rax,0x50(%rsp)
  movaps %xmm0,(%rsp)
  movdqa D87(%rip),%xmm0
  movb   $0x0,0x58(%rsp)
  movaps %xmm0,0x10(%rsp)
  movdqa D76(%rip),%xmm0
  movaps %xmm0,0x20(%rsp)
  movdqa D106(%rip),%xmm0
  movaps %xmm0,0x30(%rsp)
  movdqa D15(%rip),%xmm0
  movaps %xmm0,0x40(%rsp)
  call   <random_string@plt>
  lea    D81(%rip),%rdi
  mov    %rax,%rsi
  call   <printf@plt>
  jmp    L35
L58:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: unpack_data
arguments: data_label: D57
type_guessed: byte[16]
name: unpack_data
arguments: data_label: D87
type_guessed: byte[16]
name: unpack_data
arguments: data_label: D76
type_guessed: byte[16]
name: unpack_data
arguments: data_label: D81
type_guessed: string
name: unpack_data
arguments: data_label: D124
type_guessed: byte[16]
name: unpack_data
arguments: data_label: D71
type_guessed: byte[16]
name: unpack_data
arguments: data_label: D123
type_guessed: byte[16]
name: unpack_data
arguments: data_label: D106
type_guessed: byte[16]
name: unpack_data
arguments: data_label: D15
type_guessed: byte[16]

tool: {"D57": [0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x41,0x42,0x43,0x44,0x45,0x46]}

tool: {"D87": [0x47,0x48,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f,0x50,0x51,0x52,0x53,0x54,0x55,0x56]}

tool: {"D76": [0x57,0x58,0x59,0x5a,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x6b,0x6c]}

tool: D81: %s

tool: {"D124": [0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f,0x50]}

tool: {"D71": [0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5a,0x61,0x62,0x63,0x64,0x65,0x66]}

tool: {"D123": [0x67,0x68,0x69,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f,0x70,0x71,0x72,0x73,0x74,0x75,0x76]}

tool: {"D106": [0x6d,0x6e,0x6f,0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x21,0x23]}

tool: {"D15": [0x24,0x25,0x26,0x2f,0x28,0x29,0x3d,0x3f,0x2b,0x2a,0x2d,0x5f,0x2e,0x3a,0x2c,0x3b]}

assistant: ```c
void generatePassword(int length, int option) {
  switch (option) {
  case 0: {
    char allSigns[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!#$%&/()=?+*-_.:,;@\\|<{}[]";
    int allSignsSize = sizeof(allSigns);
    printf("%s", random_string(length, allSigns, allSignsSize));
  } break;
  case 1: {
    char alphaNum[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
    int alphaNumSize = sizeof(alphaNum);
    printf("%s", random_string(length, alphaNum, alphaNumSize));
  } break;
  case 2: {
    char numbers[] = "0123456789";
    int numbersSize = sizeof(numbers);
    printf("%s", random_string(length, numbers, numbersSize));
  } break;
  case 3: {
    char chars[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
    int charsSize = sizeof(chars);
    printf("%s", random_string(length, chars, charsSize));
  } break;
  default: {
  } break;
  }
}
```