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

```asm
<agrega_periodo>:
  endbr64
  cmp    $0xc,%edi
  ja     L45
  lea    D96(%rip),%rdx
  mov    %edi,%edi
  sub    $0x8,%rsp
  mov    %rsi,%r8
  movslq (%rdx,%rdi,4),%rax
  add    %rdx,%rax
  notrack jmp *%rax
  nopw   0x0(%rax,%rax,1)
  mov    $0xb,%edx
  lea    D109(%rip),%rsi
  mov    %r8,%rdi
  call   <strncat@plt>
  mov    $0xb,%eax
L91:
  add    $0x8,%rsp
  ret
  xchg   %ax,%ax
  mov    $0x6,%edx
  lea    D124(%rip),%rsi
  mov    %r8,%rdi
  call   <strncat@plt>
  mov    $0x6,%eax
  jmp    L91
  nopl   0x0(%rax,%rax,1)
  mov    $0x6,%edx
  lea    D42(%rip),%rsi
  mov    %r8,%rdi
  call   <strncat@plt>
  mov    $0x6,%eax
  jmp    L91
  nopl   0x0(%rax,%rax,1)
  mov    $0x7,%edx
  lea    D45(%rip),%rsi
  mov    %r8,%rdi
  call   <strncat@plt>
  mov    $0x7,%eax
  jmp    L91
  nopl   0x0(%rax,%rax,1)
  mov    $0xa,%edx
  lea    D84(%rip),%rsi
  mov    %r8,%rdi
  call   <strncat@plt>
  mov    $0xa,%eax
  jmp    L91
  xchg   %ax,%ax
  mov    $0xa,%edx
  lea    D28(%rip),%rsi
  mov    %r8,%rdi
  call   <strncat@plt>
  mov    $0xa,%eax
  jmp    L91
  xchg   %ax,%ax
  mov    $0x9,%edx
  lea    D36(%rip),%rsi
  mov    %r8,%rdi
  call   <strncat@plt>
  mov    $0x9,%eax
  jmp    L91
  xchg   %ax,%ax
  mov    $0x9,%edx
  lea    D126(%rip),%rsi
  mov    %r8,%rdi
  call   <strncat@plt>
  mov    $0x9,%eax
  jmp    L91
  xchg   %ax,%ax
  mov    $0x8,%edx
  lea    D70(%rip),%rsi
  mov    %r8,%rdi
  call   <strncat@plt>
  mov    $0x8,%eax
  jmp    L91
  xchg   %ax,%ax
  mov    $0x8,%edx
  lea    D92(%rip),%rsi
  mov    %r8,%rdi
  call   <strncat@plt>
  mov    $0x8,%eax
  jmp    L91
  xchg   %ax,%ax
  mov    $0x8,%edx
  lea    D85(%rip),%rsi
  mov    %r8,%rdi
  call   <strncat@plt>
  mov    $0x8,%eax
  jmp    L91
  xchg   %ax,%ax
  mov    $0xa,%edx
  lea    D11(%rip),%rsi
  mov    %r8,%rdi
  call   <strncat@plt>
  mov    $0xa,%eax
  jmp    L91
L45:
  xor    %eax,%eax
  ret
  xor    %eax,%eax
  jmp    L91
```

tool_calls: name: disassemble_data
arguments: data_tag: D109
type_guessed: string
name: disassemble_data
arguments: data_tag: D124
type_guessed: string
name: disassemble_data
arguments: data_tag: D42
type_guessed: string
name: disassemble_data
arguments: data_tag: D45
type_guessed: string
name: disassemble_data
arguments: data_tag: D84
type_guessed: string
name: disassemble_data
arguments: data_tag: D28
type_guessed: string
name: disassemble_data
arguments: data_tag: D36
type_guessed: string
name: disassemble_data
arguments: data_tag: D126
type_guessed: string
name: disassemble_data
arguments: data_tag: D70
type_guessed: string
name: disassemble_data
arguments: data_tag: D92
type_guessed: string
name: disassemble_data
arguments: data_tag: D85
type_guessed: string
name: disassemble_data
arguments: data_tag: D11
type_guessed: string

tool: D109: duodecillon

tool: D124: millon

tool: D42: billon

tool: D45: trillon

tool: D84: cuatrillon

tool: D28: quintillon

tool: D36: sextillon

tool: D126: septillon

tool: D70: octillon

tool: D92: nonillon

tool: D85: decillon

tool: D11: undecillon

assistant: ```c
int agrega_periodo(const unsigned int numero, char *buffer) {
  int len = 0;
  if (numero == 1) {
    len = 6;
    strncat(buffer, "millon", len);
  } else if (numero == 2) {
    len = 6;
    strncat(buffer, "billon", len);
  } else if (numero == 3) {
    len = 7;
    strncat(buffer, "trillon", len);
  } else if (numero == 4) {
    len = 10;
    strncat(buffer, "cuatrillon", len);
  } else if (numero == 5) {
    len = 10;
    strncat(buffer, "quintillon", len);
  } else if (numero == 6) {
    len = 9;
    strncat(buffer, "sextillon", len);
  } else if (numero == 7) {
    len = 9;
    strncat(buffer, "septillon", len);
  } else if (numero == 8) {
    len = 8;
    strncat(buffer, "octillon", len);
  } else if (numero == 9) {
    len = 8;
    strncat(buffer, "nonillon", len);
  } else if (numero == 10) {
    len = 8;
    strncat(buffer, "decillon", len);
  } else if (numero == 11) {
    len = 10;
    strncat(buffer, "undecillon", len);
  } else if (numero == 12) {
    len = 11;
    strncat(buffer, "duodecillon", len);
  }
  return len;
}
```