user: Demonstrate the C code that generates the assembly output below:

```asm
<test_find_song>:
  endbr64
  push   %rbp
  lea    D170(%rip),%rdi
  lea    D4(%rip),%rbp
  call   <printf@plt>
  lea    D126(%rip),%rdi
  call   <printf@plt>
  xor    %eax,%eax
  call   <populate@plt>
  lea    D40(%rip),%rsi
  lea    D43(%rip),%rdi
  call   <find_song@plt>
  mov    %eax,%edi
  call   <print_node@plt>
  lea    D172(%rip),%rsi
  lea    D19(%rip),%rdi
  call   <find_song@plt>
  mov    %eax,%edi
  call   <print_node@plt>
  lea    D64(%rip),%rsi
  lea    D146(%rip),%rdi
  call   <find_song@plt>
  mov    %eax,%edi
  call   <print_node@plt>
  lea    D5(%rip),%rsi
  lea    D27(%rip),%rdi
  call   <find_song@plt>
  mov    %eax,%edi
  call   <print_node@plt>
  mov    %rbp,%rsi
  lea    D58(%rip),%rdi
  call   <find_song@plt>
  mov    %eax,%edi
  call   <print_node@plt>
  mov    %rbp,%rsi
  lea    D160(%rip),%rdi
  call   <find_song@plt>
  mov    %eax,%edi
  call   <print_node@plt>
  mov    %rbp,%rsi
  lea    D145(%rip),%rdi
  call   <find_song@plt>
  mov    %eax,%edi
  call   <print_node@plt>
  mov    %rbp,%rsi
  lea    D132(%rip),%rdi
  lea    D151(%rip),%rbp
  call   <find_song@plt>
  mov    %eax,%edi
  call   <print_node@plt>
  mov    %rbp,%rsi
  lea    D99(%rip),%rdi
  call   <find_song@plt>
  mov    %eax,%edi
  call   <print_node@plt>
  mov    %rbp,%rsi
  lea    D140(%rip),%rdi
  call   <find_song@plt>
  mov    %eax,%edi
  call   <print_node@plt>
  xor    %eax,%eax
  pop    %rbp
  jmp    10c0 <free_list@plt>
```

tool_calls: name: retrieve_data
arguments: data_label: D170
type_infered: string
name: retrieve_data
arguments: data_label: D4
type_infered: string
name: retrieve_data
arguments: data_label: D126
type_infered: string
name: retrieve_data
arguments: data_label: D40
type_infered: string
name: retrieve_data
arguments: data_label: D43
type_infered: string
name: retrieve_data
arguments: data_label: D172
type_infered: string
name: retrieve_data
arguments: data_label: D19
type_infered: string
name: retrieve_data
arguments: data_label: D64
type_infered: string
name: retrieve_data
arguments: data_label: D146
type_infered: string
name: retrieve_data
arguments: data_label: D5
type_infered: string
name: retrieve_data
arguments: data_label: D27
type_infered: string
name: retrieve_data
arguments: data_label: D58
type_infered: string
name: retrieve_data
arguments: data_label: D160
type_infered: string
name: retrieve_data
arguments: data_label: D145
type_infered: string
name: retrieve_data
arguments: data_label: D132
type_infered: string
name: retrieve_data
arguments: data_label: D151
type_infered: string
name: retrieve_data
arguments: data_label: D99
type_infered: string
name: retrieve_data
arguments: data_label: D140
type_infered: string

tool: D170: ====================================================================


tool: D4: taylor swift

tool: D126: TESTING FIND SONG...


tool: D40: donny osmond

tool: D43: make a man out of you

tool: D172: sia

tool: D19: chandelier

tool: D64: lin manuel miranda

tool: D146: how far ill go

tool: D5: against the current

tool: D27: legends never die

tool: D58: look what you made me do

tool: D160: ours

tool: D145: theirs

tool: D132: you belong with me

tool: D151: t

tool: D99: test

tool: 

assistant: ```c
void test_find_song() {
  printf("====================================================================\n");
  printf("TESTING FIND SONG...\n");
  populate();
  print_node(find_song("make a man out of you", "donny osmond"));
  print_node(find_song("chandelier", "sia"));
  print_node(find_song("how far ill go", "lin manuel miranda"));
  print_node(find_song("legends never die", "against the current"));
  print_node(find_song("look what you made me do", "taylor swift"));
  print_node(find_song("ours", "taylor swift"));
  print_node(find_song("theirs", "taylor swift"));
  print_node(find_song("you belong with me", "taylor swift"));
  print_node(find_song("test", "t"));
  print_node(find_song("", "t"));
  free_list();
}
```