user: What would the C source look like for the assembly code provided here:

```asm
<output_add_method>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x20,%rsp
  mov    %rdi,-0x8(%rbp)
  mov    %rsi,-0x10(%rbp)
  mov    %rdx,-0x18(%rbp)
  mov    -0x8(%rbp),%rax
  lea    D116(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <outputf@plt>
  mov    -0x8(%rbp),%rax
  lea    D7(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <outputf@plt>
  mov    -0x18(%rbp),%rdx
  mov    -0x8(%rbp),%rax
  lea    D28(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <outputf@plt>
  mov    -0x18(%rbp),%rcx
  mov    -0x10(%rbp),%rdx
  mov    -0x8(%rbp),%rax
  mov    %rcx,%r8
  mov    %rdx,%rcx
  lea    D31(%rip),%rdx
  lea    D5(%rip),%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <outputf@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <output_dump_stack@plt>
  mov    -0x8(%rbp),%rax
  lea    D3(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <outputf@plt>
  mov    -0x8(%rbp),%rax
  lea    D0(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <outputf@plt>
  mov    -0x8(%rbp),%rax
  lea    D14(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <outputf@plt>
  mov    -0x8(%rbp),%rax
  lea    D17(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <outputf@plt>
  mov    -0x8(%rbp),%rax
  lea    D118(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <outputf@plt>
  mov    -0x8(%rbp),%rax
  lea    D104(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <outputf@plt>
  mov    -0x8(%rbp),%rax
  lea    D23(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <outputf@plt>
  mov    $0x0,%eax
  leave
  ret
```

tool_calls: name: parse_data
arguments: data_label: D116
data_type: string
name: parse_data
arguments: data_label: D7
data_type: string
name: parse_data
arguments: data_label: D28
data_type: string
name: parse_data
arguments: data_label: D31
data_type: string
name: parse_data
arguments: data_label: D5
data_type: string
name: parse_data
arguments: data_label: D3
data_type: string
name: parse_data
arguments: data_label: D0
data_type: string
name: parse_data
arguments: data_label: D14
data_type: string
name: parse_data
arguments: data_label: D17
data_type: string
name: parse_data
arguments: data_label: D118
data_type: string
name: parse_data
arguments: data_label: D104
data_type: string
name: parse_data
arguments: data_label: D23
data_type: string

tool: D116: 	/* Add a method */


tool: D7: 	duk_dup(ctx, 0);


tool: D28: 	duk_push_string(ctx, "%s");


tool: D31: dukky

tool: D5: 	duk_push_c_function(ctx, %s_%s_%s, DUK_VARARGS);


tool: D3: 	duk_def_prop(ctx, -3,


tool: D0: 		     DUK_DEFPROP_HAVE_VALUE |


tool: D14: 		     DUK_DEFPROP_HAVE_WRITABLE |


tool: D17: 		     DUK_DEFPROP_HAVE_ENUMERABLE |


tool: D118: 		     DUK_DEFPROP_ENUMERABLE |


tool: D104: 		     DUK_DEFPROP_HAVE_CONFIGURABLE);


tool: D23: 	duk_pop(ctx);



assistant: ```c
int output_add_method(struct opctx *outc, const char *class_name, const char *method) {
  outputf(outc, "\t/* Add a method */\n");
  outputf(outc, "\tduk_dup(ctx, 0);\n");
  outputf(outc, "\tduk_push_string(ctx, \"%s\");\n", method);
  outputf(outc, "\tduk_push_c_function(ctx, %s_%s_%s, DUK_VARARGS);\n", "dukky", class_name, method);
  output_dump_stack(outc);
  outputf(outc, "\tduk_def_prop(ctx, -3,\n");
  outputf(outc, "\t\t     DUK_DEFPROP_HAVE_VALUE |\n");
  outputf(outc, "\t\t     DUK_DEFPROP_HAVE_WRITABLE |\n");
  outputf(outc, "\t\t     DUK_DEFPROP_HAVE_ENUMERABLE |\n");
  outputf(outc, "\t\t     DUK_DEFPROP_ENUMERABLE |\n");
  outputf(outc, "\t\t     DUK_DEFPROP_HAVE_CONFIGURABLE);\n");
  outputf(outc, "\tduk_pop(ctx);\n\n");
  return 0;
}
```