user: Please show me the C implementation that matches the assembly code listed below:

```asm
<cmdCfgAdslSetting>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x20,%rsp
  mov    %edi,-0x14(%rbp)
  mov    %rsi,-0x20(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movw   $0x0,-0xe(%rbp)
  movb   $0x0,-0xf(%rbp)
  lea    -0xc(%rbp),%rdx
  mov    -0x20(%rbp),%rax
  lea    D32(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <getArgValue@plt>
  cmp    $0x1,%eax
  jne    L89
  orw    $0x8,-0xe(%rbp)
L89:
  lea    -0xc(%rbp),%rdx
  mov    -0x20(%rbp),%rax
  lea    D61(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <getArgValue@plt>
  cmp    $0x1,%eax
  jne    L87
  orw    $0x2,-0xe(%rbp)
L87:
  lea    -0xc(%rbp),%rdx
  mov    -0x20(%rbp),%rax
  lea    D97(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <getArgValue@plt>
  cmp    $0x1,%eax
  jne    L59
  orw    $0x1,-0xe(%rbp)
L59:
  lea    -0xc(%rbp),%rdx
  mov    -0x20(%rbp),%rax
  lea    D47(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <getArgValue@plt>
  cmp    $0x1,%eax
  jne    L86
  orw    $0x10,-0xe(%rbp)
L86:
  lea    -0xc(%rbp),%rdx
  mov    -0x20(%rbp),%rax
  lea    D42(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <getArgValue@plt>
  cmp    $0x1,%eax
  jne    L104
  orw    $0x40,-0xe(%rbp)
L104:
  lea    -0xc(%rbp),%rdx
  mov    -0x20(%rbp),%rax
  lea    D34(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <getArgValue@plt>
  cmp    $0x1,%eax
  jne    L3
  orw    $0x20,-0xe(%rbp)
L3:
  lea    -0xc(%rbp),%rdx
  mov    -0x20(%rbp),%rax
  lea    D31(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <getArgValue@plt>
  cmp    $0x1,%eax
  jne    L10
  orw    $0x80,-0xe(%rbp)
L10:
  lea    -0xc(%rbp),%rdx
  mov    -0x20(%rbp),%rax
  lea    D95(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <getArgValue@plt>
  cmp    $0x1,%eax
  jne    L29
  orb    $0x1,-0xf(%rbp)
L29:
  lea    -0xc(%rbp),%rdx
  mov    -0x20(%rbp),%rax
  lea    D81(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <getArgValue@plt>
  cmp    $0x1,%eax
  jne    L27
  orb    $0x2,-0xf(%rbp)
L27:
  movsbl -0xf(%rbp),%edx
  movzwl -0xe(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  call   <setAdslSettings@plt>
  cmp    $0xffffffff,%eax
  jne    L107
  lea    D78(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
L107:
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L66
  call   <__stack_chk_fail@plt>
L66:
  leave
  ret
```

tool_calls: name: parse_data
arguments: data_tag: D32
type_guessed: string
name: parse_data
arguments: data_tag: D61
type_guessed: string
name: parse_data
arguments: data_tag: D97
type_guessed: string
name: parse_data
arguments: data_tag: D47
type_guessed: string
name: parse_data
arguments: data_tag: D42
type_guessed: string
name: parse_data
arguments: data_tag: D34
type_guessed: string
name: parse_data
arguments: data_tag: D31
type_guessed: string
name: parse_data
arguments: data_tag: D95
type_guessed: string
name: parse_data
arguments: data_tag: D81
type_guessed: string
name: parse_data
arguments: data_tag: D78
type_guessed: string

tool: D32: g.lite

tool: D61: g.dmt

tool: D97: t1.413

tool: D47: adsl2

tool: D42: adsl2+

tool: D34: annexl

tool: D31: annexm

tool: D95: bitswap

tool: D81: sra

tool: D78: Set ADSL error!


assistant: ```c
void cmdCfgAdslSetting(int cmdType, struct cmd_arg *pCmdArg) {
  unsigned short mode = 0;
  char olr = 0;
  int intVal;
  if (getArgValue(pCmdArg, "g.lite", (void *)&intVal) == 1) {
    mode |= 0x0008;
  }
  if (getArgValue(pCmdArg, "g.dmt", (void *)&intVal) == 1) {
    mode |= 0x0002;
  }
  if (getArgValue(pCmdArg, "t1.413", (void *)&intVal) == 1) {
    mode |= 0x0001;
  }
  if (getArgValue(pCmdArg, "adsl2", (void *)&intVal) == 1) {
    mode |= 0x0010;
  }
  if (getArgValue(pCmdArg, "adsl2+", (void *)&intVal) == 1) {
    mode |= 0x0040;
  }
  if (getArgValue(pCmdArg, "annexl", (void *)&intVal) == 1) {
    mode |= 0x0020;
  }
  if (getArgValue(pCmdArg, "annexm", (void *)&intVal) == 1) {
    mode |= 0x0080;
  }
  if (getArgValue(pCmdArg, "bitswap", (void *)&intVal) == 1) {
    olr |= 1;
  }
  if (getArgValue(pCmdArg, "sra", (void *)&intVal) == 1) {
    olr |= 2;
  }
  if (setAdslSettings(mode, olr) == -1) {
    printf("Set ADSL error!\n");
  }
}
```