user: Converte this assembly snippet into its equivalent C code:

```asm
<test_wmessage>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x20,%rsp
  mov    %rdi,-0x18(%rbp)
  mov    -0x18(%rbp),%rax
  lea    D135(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <pbc_wmessage_new@plt>
  mov    %rax,-0x10(%rbp)
  mov    -0x10(%rbp),%rax
  mov    $0xffffffff,%ecx
  lea    D16(%rip),%rdx
  lea    D176(%rip),%rsi
  mov    %rax,%rdi
  call   <pbc_wmessage_string@plt>
  mov    -0x10(%rbp),%rax
  mov    $0x0,%ecx
  mov    $0x3039,%edx
  lea    D117(%rip),%rsi
  mov    %rax,%rdi
  call   <pbc_wmessage_integer@plt>
  mov    -0x10(%rbp),%rax
  mov    $0xffffffff,%ecx
  lea    D12(%rip),%rdx
  lea    D81(%rip),%rsi
  mov    %rax,%rdi
  call   <pbc_wmessage_string@plt>
  mov    -0x10(%rbp),%rax
  lea    D30(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <pbc_wmessage_message@plt>
  mov    %rax,-0x8(%rbp)
  mov    -0x8(%rbp),%rax
  mov    $0xffffffff,%ecx
  lea    D36(%rip),%rdx
  lea    D57(%rip),%rsi
  mov    %rax,%rdi
  call   <pbc_wmessage_string@plt>
  mov    -0x10(%rbp),%rax
  lea    D30(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <pbc_wmessage_message@plt>
  mov    %rax,-0x8(%rbp)
  mov    -0x8(%rbp),%rax
  mov    $0xffffffff,%ecx
  lea    D65(%rip),%rdx
  lea    D57(%rip),%rsi
  mov    %rax,%rdi
  call   <pbc_wmessage_string@plt>
  mov    -0x8(%rbp),%rax
  mov    $0xffffffff,%ecx
  lea    D121(%rip),%rdx
  lea    D92(%rip),%rsi
  mov    %rax,%rdi
  call   <pbc_wmessage_string@plt>
  mov    -0x10(%rbp),%rax
  mov    $0x0,%ecx
  mov    $0xffffff85,%edx
  lea    D69(%rip),%rsi
  mov    %rax,%rdi
  call   <pbc_wmessage_integer@plt>
  mov    -0x10(%rbp),%rax
  mov    $0x0,%ecx
  mov    $0x3039,%edx
  lea    D69(%rip),%rsi
  mov    %rax,%rdi
  call   <pbc_wmessage_integer@plt>
  mov    -0x10(%rbp),%rax
  mov    $0x0,%ecx
  mov    $0x12d687,%edx
  lea    D69(%rip),%rsi
  mov    %rax,%rdi
  call   <pbc_wmessage_integer@plt>
  mov    -0x10(%rbp),%rax
  mov    $0x0,%ecx
  mov    $0xd431,%edx
  lea    D68(%rip),%rsi
  mov    %rax,%rdi
  call   <pbc_wmessage_integer@plt>
  mov    -0x10(%rbp),%rax
  leave
  ret
```

tool_calls: name: read_data
arguments: label: D135
datatype: string
name: read_data
arguments: label: D16
datatype: string
name: read_data
arguments: label: D176
datatype: string
name: read_data
arguments: label: D117
datatype: string
name: read_data
arguments: label: D12
datatype: string
name: read_data
arguments: label: D81
datatype: string
name: read_data
arguments: label: D30
datatype: string
name: read_data
arguments: label: D36
datatype: string
name: read_data
arguments: label: D57
datatype: string
name: read_data
arguments: label: D65
datatype: string
name: read_data
arguments: label: D121
datatype: string
name: read_data
arguments: label: D92
datatype: string
name: read_data
arguments: label: D69
datatype: string
name: read_data
arguments: label: D68
datatype: string

tool: D135: tutorial.Person

tool: D16: Alice

tool: D176: name

tool: D117: id

tool: D12: alice@unkown

tool: D81: email

tool: D30: phone

tool: D36: 87654321

tool: D57: number

tool: D65: 13901234567

tool: D121: MOBILE

tool: D92: type

tool: D69: test

tool: D68: tutorial.Ext.test

assistant: ```c
struct pbc_wmessage *test_wmessage(struct pbc_env *env) {
  struct pbc_wmessage *msg = pbc_wmessage_new(env, "tutorial.Person");
  pbc_wmessage_string(msg, "name", "Alice", -1);
  pbc_wmessage_integer(msg, "id", 12345, 0);
  pbc_wmessage_string(msg, "email", "alice@unkown", -1);
  struct pbc_wmessage *phone = pbc_wmessage_message(msg, "phone");
  pbc_wmessage_string(phone, "number", "87654321", -1);
  phone = pbc_wmessage_message(msg, "phone");
  pbc_wmessage_string(phone, "number", "13901234567", -1);
  pbc_wmessage_string(phone, "type", "MOBILE", -1);
  pbc_wmessage_integer(msg, "test", -123, 0);
  pbc_wmessage_integer(msg, "test", 12345, 0);
  pbc_wmessage_integer(msg, "test", 1234567, 0);
  pbc_wmessage_integer(msg, "tutorial.Ext.test", 54321, 0);
  return msg;
}
```