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

```asm
<FileExtensionToProtocolInfo>:
  endbr64
  push   %rbp
  push   %rbx
  sub    $0x28,%rsp
  mov    %rdi,%rbx
  mov    %fs:0x28,%rax
  mov    %rax,0x18(%rsp)
  xor    %eax,%eax
  test   %esi,%esi
  jne    L48
L35:
  cmpb   $0x2e,(%rbx)
  jne    L1
L50:
  lea    D70(%rip),%rsi
  mov    %rbx,%rdi
  call   <stricmp@plt>
  mov    %rax,%rdx
  lea    D241(%rip),%rax
  test   %rdx,%rdx
  jne    L149
L43:
  mov    0x18(%rsp),%rdx
  sub    %fs:0x28,%rdx
  jne    L24
  add    $0x28,%rsp
  pop    %rbx
  pop    %rbp
  ret
L48:
  lea    0xe(%rsp),%rbp
  mov    $0x0,%r8d
  mov    $0x1,%ecx
  mov    $0xa,%edx
  mov    %rdi,%rsi
  mov    %rbp,%rdi
  call   <strToUtf8@plt>
  mov    %rbp,%rbx
  jmp    L35
L1:
  movb   $0x2e,0x4(%rsp)
  lea    0x4(%rsp),%rbp
  lea    0x5(%rsp),%rdi
  mov    %rbx,%rsi
  call   <strcpy@plt>
  mov    %rbp,%rbx
  jmp    L50
L149:
  lea    D23(%rip),%rsi
  mov    %rbx,%rdi
  call   <stricmp@plt>
  mov    %rax,%rdx
  lea    D17(%rip),%rax
  test   %rdx,%rdx
  je     L43
  lea    D163(%rip),%rsi
  mov    %rbx,%rdi
  call   <stricmp@plt>
  mov    %rax,%rdx
  lea    D84(%rip),%rax
  test   %rdx,%rdx
  je     L43
  lea    D221(%rip),%rsi
  mov    %rbx,%rdi
  call   <stricmp@plt>
  mov    %rax,%rdx
  lea    D141(%rip),%rax
  test   %rdx,%rdx
  je     L43
  lea    D28(%rip),%rsi
  mov    %rbx,%rdi
  call   <stricmp@plt>
  mov    %rax,%rdx
  lea    D133(%rip),%rax
  test   %rdx,%rdx
  je     L43
  lea    D211(%rip),%rsi
  mov    %rbx,%rdi
  call   <stricmp@plt>
  mov    %rax,%rdx
  lea    D242(%rip),%rax
  test   %rdx,%rdx
  je     L43
  lea    D45(%rip),%rsi
  mov    %rbx,%rdi
  call   <stricmp@plt>
  mov    %rax,%rdx
  lea    D82(%rip),%rax
  test   %rdx,%rdx
  je     L43
  lea    D117(%rip),%rsi
  mov    %rbx,%rdi
  call   <stricmp@plt>
  mov    %rax,%rdx
  lea    D209(%rip),%rax
  test   %rdx,%rdx
  je     L43
  lea    D30(%rip),%rsi
  mov    %rbx,%rdi
  call   <stricmp@plt>
  mov    %rax,%rdx
  lea    D48(%rip),%rax
  test   %rdx,%rdx
  je     L43
  lea    D190(%rip),%rsi
  mov    %rbx,%rdi
  call   <stricmp@plt>
  mov    %rax,%rdx
  lea    D48(%rip),%rax
  test   %rdx,%rdx
  je     L43
  lea    D75(%rip),%rsi
  mov    %rbx,%rdi
  call   <stricmp@plt>
  mov    %rax,%rdx
  lea    D42(%rip),%rax
  test   %rdx,%rdx
  je     L43
  lea    D246(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmpi@plt>
  test   %rax,%rax
  lea    D22(%rip),%rax
  lea    D239(%rip),%rdx
  cmovne %rdx,%rax
  jmp    L43
L24:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: parse_data
arguments: data_label: D70
type_guessed: string
name: parse_data
arguments: data_label: D241
type_guessed: string
name: parse_data
arguments: data_label: D23
type_guessed: string
name: parse_data
arguments: data_label: D17
type_guessed: string
name: parse_data
arguments: data_label: D163
type_guessed: string
name: parse_data
arguments: data_label: D84
type_guessed: string
name: parse_data
arguments: data_label: D221
type_guessed: string
name: parse_data
arguments: data_label: D141
type_guessed: string
name: parse_data
arguments: data_label: D28
type_guessed: string
name: parse_data
arguments: data_label: D133
type_guessed: string
name: parse_data
arguments: data_label: D211
type_guessed: string
name: parse_data
arguments: data_label: D242
type_guessed: string
name: parse_data
arguments: data_label: D45
type_guessed: string
name: parse_data
arguments: data_label: D82
type_guessed: string
name: parse_data
arguments: data_label: D117
type_guessed: string
name: parse_data
arguments: data_label: D209
type_guessed: string
name: parse_data
arguments: data_label: D30
type_guessed: string
name: parse_data
arguments: data_label: D48
type_guessed: string
name: parse_data
arguments: data_label: D190
type_guessed: string
name: parse_data
arguments: data_label: D75
type_guessed: string
name: parse_data
arguments: data_label: D42
type_guessed: string
name: parse_data
arguments: data_label: D246
type_guessed: string
name: parse_data
arguments: data_label: D22
type_guessed: string
name: parse_data
arguments: data_label: D239
type_guessed: string

tool: D70: .mp3

tool: D241: http-get:*:audio/mpeg:*

tool: D23: .wma

tool: D17: http-get:*:audio/x-ms-wma:*

tool: D163: .ogg

tool: D84: http-get:*:audio/x-ogg:*

tool: D221: .asx

tool: D141: http-get:*:audio/x-ms-asx:*

tool: D28: .asf

tool: D133: http-get:*:video/x-ms-asf:*

tool: D211: .wmv

tool: D242: http-get:*:video/x-ms-wmv:*

tool: D45: .mpg

tool: D82: http-get:*:video/mpeg:*

tool: D117: .mov

tool: D209: http-get:*:video/quicktime:*

tool: D30: .jpg

tool: D48: http-get:*:image/jpeg:*

tool: D190: .jpeg

tool: D75: .bmp

tool: D42: http-get:*:image/bmp:*

tool: D246: .m3u

tool: D22: http-get:*:audio/mpegurl:*

tool: D239: http-get:*:application/octet-stream:*

assistant: ```c
char *FileExtensionToProtocolInfo(char *extension, int wide) {
  char tempExtension[10], temp2[10];
  char *retVal = NULL;
  if (wide) {
    strToUtf8(temp2, extension, 10, 1, NULL);
    extension = temp2;
  }
  if (extension[0] != '.') {
    tempExtension[0] = '.';
    strcpy(tempExtension + 1, extension);
    extension = tempExtension;
  }
  if (stricmp(extension, ".mp3") == 0) {
    retVal = "http-get:*:audio/mpeg:*";
  } else if (stricmp(extension, ".wma") == 0) {
    retVal = "http-get:*:audio/x-ms-wma:*";
  } else if (stricmp(extension, ".ogg") == 0) {
    retVal = "http-get:*:audio/x-ogg:*";
  } else if (stricmp(extension, ".asx") == 0) {
    retVal = "http-get:*:audio/x-ms-asx:*";
  } else if (stricmp(extension, ".asf") == 0) {
    retVal = "http-get:*:video/x-ms-asf:*";
  } else if (stricmp(extension, ".wmv") == 0) {
    retVal = "http-get:*:video/x-ms-wmv:*";
  } else if (stricmp(extension, ".mpg") == 0) {
    retVal = "http-get:*:video/mpeg:*";
  } else if (stricmp(extension, ".mov") == 0) {
    retVal = "http-get:*:video/quicktime:*";
  } else if (stricmp(extension, ".jpg") == 0) {
    retVal = "http-get:*:image/jpeg:*";
  } else if (stricmp(extension, ".jpeg") == 0) {
    retVal = "http-get:*:image/jpeg:*";
  } else if (stricmp(extension, ".bmp") == 0) {
    retVal = "http-get:*:image/bmp:*";
  } else if (strcmpi(extension, ".m3u") == 0) {
    retVal = "http-get:*:audio/mpegurl:*";
  } else {
    retVal = "http-get:*:application/octet-stream:*";
  }
  return retVal;
}
```