user: 下面的汇编指令对应的C源代码是什么：

```asm
<append_band_ext>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x30,%rsp
  mov    %rdi,-0x18(%rbp)
  mov    %rsi,-0x20(%rbp)
  mov    %rdx,-0x28(%rbp)
  mov    -0x18(%rbp),%rax
  mov    %rax,%rdi
  call   <findExt@plt>
  mov    %rax,-0x8(%rbp)
  cmpq   $0x0,-0x8(%rbp)
  je     L26
  mov    -0x8(%rbp),%rax
  lea    D117(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp_case@plt>
  test   %rax,%rax
  je     L35
  mov    -0x8(%rbp),%rax
  lea    D73(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp_case@plt>
  test   %rax,%rax
  je     L35
  mov    -0x8(%rbp),%rax
  lea    D8(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp_case@plt>
  test   %rax,%rax
  je     L35
  mov    -0x8(%rbp),%rax
  lea    D40(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp_case@plt>
  test   %rax,%rax
  je     L35
  mov    -0x8(%rbp),%rax
  lea    D54(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp_case@plt>
  test   %rax,%rax
  je     L35
  mov    -0x8(%rbp),%rax
  lea    D62(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp_case@plt>
  test   %rax,%rax
  je     L35
  mov    -0x8(%rbp),%rax
  lea    D119(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp_case@plt>
  test   %rax,%rax
  je     L35
  mov    -0x8(%rbp),%rax
  lea    D7(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp_case@plt>
  test   %rax,%rax
  je     L35
  mov    -0x8(%rbp),%rax
  lea    D37(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp_case@plt>
  test   %rax,%rax
  je     L35
  mov    -0x8(%rbp),%rax
  lea    D1(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp_case@plt>
  test   %rax,%rax
  jne    L26
L35:
  mov    -0x18(%rbp),%rax
  mov    %rax,%rdi
  call   <stripExt@plt>
  mov    %rax,-0x10(%rbp)
  jmp    L101
L26:
  mov    $0xff,%edi
  call   <MALLOC@plt>
  mov    %rax,-0x10(%rbp)
  mov    -0x18(%rbp),%rdx
  mov    -0x10(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
L101:
  cmpq   $0x0,-0x28(%rbp)
  je     L78
  mov    -0x28(%rbp),%rcx
  mov    -0x10(%rbp),%rdx
  mov    -0x20(%rbp),%rax
  lea    D35(%rip),%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <sprintf@plt>
  jmp    L119
L78:
  mov    -0x10(%rbp),%rdx
  mov    -0x20(%rbp),%rax
  lea    D29(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <sprintf@plt>
L119:
  cmpq   $0x0,-0x8(%rbp)
  je     L59
  mov    -0x8(%rbp),%rdx
  mov    -0x20(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
L59:
  mov    -0x10(%rbp),%rax
  mov    %rax,%rdi
  call   <free@plt>
  nop
  leave
  ret
```

tool_calls: name: retrieve_data
arguments: tag: D117
type: string
name: retrieve_data
arguments: tag: D73
type: string
name: retrieve_data
arguments: tag: D8
type: string
name: retrieve_data
arguments: tag: D40
type: string
name: retrieve_data
arguments: tag: D54
type: string
name: retrieve_data
arguments: tag: D62
type: string
name: retrieve_data
arguments: tag: D119
type: string
name: retrieve_data
arguments: tag: D7
type: string
name: retrieve_data
arguments: tag: D37
type: string
name: retrieve_data
arguments: tag: D1
type: string
name: retrieve_data
arguments: tag: D35
type: string
name: retrieve_data
arguments: tag: D29
type: string

tool: D117: .IMG

tool: D73: .TIF

tool: D8: .TIFF

tool: D40: .JPG

tool: D54: .JPEG

tool: D62: .PNG

tool: D119: .PGM

tool: D7: .BIN

tool: D37: .NC

tool: D1: .H5

tool: D35: %s_%s

tool: D29: %s

assistant: ```c
void append_band_ext(char *inFile, char *outFile, char *bandExt) {
  char *ext, *base_name;
  ext = findExt(inFile);
  if (ext && (strcmp_case(ext, ".IMG") == 0 || strcmp_case(ext, ".TIF") == 0 || strcmp_case(ext, ".TIFF") == 0 || strcmp_case(ext, ".JPG") == 0 || strcmp_case(ext, ".JPEG") == 0 || strcmp_case(ext, ".PNG") == 0 || strcmp_case(ext, ".PGM") == 0 || strcmp_case(ext, ".BIN") == 0 || strcmp_case(ext, ".NC") == 0 || strcmp_case(ext, ".H5") == 0))
    base_name = stripExt(inFile);
  else {
    base_name = (char *)MALLOC(sizeof(char) * 255);
    strcpy(base_name, inFile);
  }
  if (bandExt)
    sprintf(outFile, "%s_%s", base_name, bandExt);
  else
    sprintf(outFile, "%s", base_name);
  if (ext)
    strcat(outFile, ext);
  free(base_name);
}
```