user: 请从给定的汇编指令推导出C源代码:

```asm
<Send_KeyBindings>:
  endbr64
  push   %r13
  push   %r12
  push   %rbp
  sub    $0x20,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x18(%rsp)
  xor    %eax,%eax
  call   <trap_Key_GetCatcher@plt>
  test   %rax,%rax
  je     L162
L153:
  mov    0x18(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L130
  add    $0x20,%rsp
  pop    %rbp
  pop    %r12
  pop    %r13
  ret
  nopl   (%rax)
L162:
  lea    0x8(%rsp),%rbp
  lea    D204(%rip),%rdi
  mov    %rbp,%rsi
  call   <Controls_GetKeyBindings@plt>
  mov    0x8(%rsp),%ecx
  cmp    $0xffffffff,%ecx
  je     L19
  lea    0x13(%rsp),%r12
  lea    D82(%rip),%r13
  mov    $0x5,%esi
  mov    %r13,%rdx
  mov    %r12,%rdi
  call   <Com_sprintf@plt>
  mov    %r12,%rsi
  lea    D263(%rip),%rdi
  call   <trap_Cvar_Set@plt>
  mov    0xc(%rsp),%ecx
  cmp    $0xffffffff,%ecx
  jne    L206
L19:
  mov    %rbp,%rsi
  lea    D294(%rip),%rdi
  call   <Controls_GetKeyBindings@plt>
  mov    0x8(%rsp),%ecx
  cmp    $0xffffffff,%ecx
  je     L65
  lea    0x13(%rsp),%r12
  lea    D82(%rip),%r13
  mov    $0x5,%esi
  mov    %r13,%rdx
  mov    %r12,%rdi
  call   <Com_sprintf@plt>
  mov    %r12,%rsi
  lea    D171(%rip),%rdi
  call   <trap_Cvar_Set@plt>
  mov    0xc(%rsp),%ecx
  cmp    $0xffffffff,%ecx
  jne    L244
L65:
  mov    %rbp,%rsi
  lea    D185(%rip),%rdi
  call   <Controls_GetKeyBindings@plt>
  mov    0x8(%rsp),%ecx
  cmp    $0xffffffff,%ecx
  je     L211
  lea    0x13(%rsp),%r12
  lea    D82(%rip),%r13
  mov    $0x5,%esi
  mov    %r13,%rdx
  mov    %r12,%rdi
  call   <Com_sprintf@plt>
  mov    %r12,%rsi
  lea    D160(%rip),%rdi
  call   <trap_Cvar_Set@plt>
  mov    0xc(%rsp),%ecx
  cmp    $0xffffffff,%ecx
  jne    L127
L211:
  mov    %rbp,%rsi
  lea    D127(%rip),%rdi
  call   <Controls_GetKeyBindings@plt>
  mov    0x8(%rsp),%ecx
  cmp    $0xffffffff,%ecx
  je     L27
  lea    0x13(%rsp),%r12
  lea    D82(%rip),%r13
  mov    $0x5,%esi
  mov    %r13,%rdx
  mov    %r12,%rdi
  call   <Com_sprintf@plt>
  mov    %r12,%rsi
  lea    D57(%rip),%rdi
  call   <trap_Cvar_Set@plt>
  mov    0xc(%rsp),%ecx
  cmp    $0xffffffff,%ecx
  jne    L179
L27:
  mov    %rbp,%rsi
  lea    D249(%rip),%rdi
  call   <Controls_GetKeyBindings@plt>
  mov    0x8(%rsp),%ecx
  cmp    $0xffffffff,%ecx
  je     L105
  lea    0x13(%rsp),%r12
  lea    D82(%rip),%r13
  mov    $0x5,%esi
  mov    %r13,%rdx
  mov    %r12,%rdi
  call   <Com_sprintf@plt>
  mov    %r12,%rsi
  lea    D169(%rip),%rdi
  call   <trap_Cvar_Set@plt>
  mov    0xc(%rsp),%ecx
  cmp    $0xffffffff,%ecx
  jne    L152
L105:
  mov    %rbp,%rsi
  lea    D304(%rip),%rdi
  call   <Controls_GetKeyBindings@plt>
  mov    0x8(%rsp),%ecx
  cmp    $0xffffffff,%ecx
  je     L151
  lea    0x13(%rsp),%r12
  lea    D82(%rip),%r13
  mov    $0x5,%esi
  mov    %r13,%rdx
  mov    %r12,%rdi
  call   <Com_sprintf@plt>
  mov    %r12,%rsi
  lea    D215(%rip),%rdi
  call   <trap_Cvar_Set@plt>
  mov    0xc(%rsp),%ecx
  cmp    $0xffffffff,%ecx
  jne    L68
L151:
  mov    %rbp,%rsi
  lea    D130(%rip),%rdi
  call   <Controls_GetKeyBindings@plt>
  mov    0x8(%rsp),%ecx
  cmp    $0xffffffff,%ecx
  je     L197
  lea    0x13(%rsp),%r12
  lea    D82(%rip),%r13
  mov    $0x5,%esi
  mov    %r13,%rdx
  mov    %r12,%rdi
  call   <Com_sprintf@plt>
  mov    %r12,%rsi
  lea    D18(%rip),%rdi
  call   <trap_Cvar_Set@plt>
  mov    0xc(%rsp),%ecx
  cmp    $0xffffffff,%ecx
  jne    L84
L197:
  mov    %rbp,%rsi
  lea    D297(%rip),%rdi
  call   <Controls_GetKeyBindings@plt>
  mov    0x8(%rsp),%ecx
  cmp    $0xffffffff,%ecx
  je     L153
  lea    0x13(%rsp),%rbp
  lea    D82(%rip),%r12
  mov    $0x5,%esi
  mov    %r12,%rdx
  mov    %rbp,%rdi
  call   <Com_sprintf@plt>
  mov    %rbp,%rsi
  lea    D60(%rip),%rdi
  call   <trap_Cvar_Set@plt>
  mov    0xc(%rsp),%ecx
  cmp    $0xffffffff,%ecx
  je     L153
  mov    %rbp,%rdi
  mov    %r12,%rdx
  mov    $0x5,%esi
  call   <Com_sprintf@plt>
  mov    %rbp,%rsi
  lea    D32(%rip),%rdi
  call   <trap_Cvar_Set@plt>
  jmp    L153
  nopl   0x0(%rax)
L84:
  mov    %r12,%rdi
  mov    %r13,%rdx
  mov    $0x5,%esi
  call   <Com_sprintf@plt>
  mov    %r12,%rsi
  lea    D128(%rip),%rdi
  call   <trap_Cvar_Set@plt>
  jmp    L197
  nopl   0x0(%rax)
L68:
  mov    %r12,%rdi
  mov    %r13,%rdx
  mov    $0x5,%esi
  call   <Com_sprintf@plt>
  mov    %r12,%rsi
  lea    D180(%rip),%rdi
  call   <trap_Cvar_Set@plt>
  jmp    L151
  nopl   0x0(%rax)
L152:
  mov    %r12,%rdi
  mov    %r13,%rdx
  mov    $0x5,%esi
  call   <Com_sprintf@plt>
  mov    %r12,%rsi
  lea    D235(%rip),%rdi
  call   <trap_Cvar_Set@plt>
  jmp    L105
  nopl   0x0(%rax)
L179:
  mov    %r12,%rdi
  mov    %r13,%rdx
  mov    $0x5,%esi
  call   <Com_sprintf@plt>
  mov    %r12,%rsi
  lea    D96(%rip),%rdi
  call   <trap_Cvar_Set@plt>
  jmp    L27
  nopl   0x0(%rax)
L127:
  mov    %r12,%rdi
  mov    %r13,%rdx
  mov    $0x5,%esi
  call   <Com_sprintf@plt>
  mov    %r12,%rsi
  lea    D54(%rip),%rdi
  call   <trap_Cvar_Set@plt>
  jmp    L211
  nopl   0x0(%rax)
L244:
  mov    %r12,%rdi
  mov    %r13,%rdx
  mov    $0x5,%esi
  call   <Com_sprintf@plt>
  mov    %r12,%rsi
  lea    D77(%rip),%rdi
  call   <trap_Cvar_Set@plt>
  jmp    L65
  nopl   0x0(%rax)
L206:
  mov    %r12,%rdi
  mov    %r13,%rdx
  mov    $0x5,%esi
  call   <Com_sprintf@plt>
  mov    %r12,%rsi
  lea    D153(%rip),%rdi
  call   <trap_Cvar_Set@plt>
  jmp    L19
L130:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: retrieve_data
arguments: data_label: D204
type: string
name: retrieve_data
arguments: data_label: D82
type: string
name: retrieve_data
arguments: data_label: D263
type: string
name: retrieve_data
arguments: data_label: D294
type: string
name: retrieve_data
arguments: data_label: D171
type: string
name: retrieve_data
arguments: data_label: D185
type: string
name: retrieve_data
arguments: data_label: D160
type: string
name: retrieve_data
arguments: data_label: D127
type: string
name: retrieve_data
arguments: data_label: D57
type: string
name: retrieve_data
arguments: data_label: D249
type: string
name: retrieve_data
arguments: data_label: D169
type: string
name: retrieve_data
arguments: data_label: D304
type: string
name: retrieve_data
arguments: data_label: D215
type: string
name: retrieve_data
arguments: data_label: D130
type: string
name: retrieve_data
arguments: data_label: D18
type: string
name: retrieve_data
arguments: data_label: D297
type: string
name: retrieve_data
arguments: data_label: D60
type: string
name: retrieve_data
arguments: data_label: D32
type: string
name: retrieve_data
arguments: data_label: D128
type: string
name: retrieve_data
arguments: data_label: D180
type: string
name: retrieve_data
arguments: data_label: D235
type: string
name: retrieve_data
arguments: data_label: D96
type: string
name: retrieve_data
arguments: data_label: D54
type: string
name: retrieve_data
arguments: data_label: D77
type: string
name: retrieve_data
arguments: data_label: D153
type: string

tool: D204: +attack

tool: D82: %i

tool: D263: cl_button_attack1

tool: D294: +button6

tool: D171: cl_button_altattack1

tool: D185: +forward

tool: D160: cl_button_forward1

tool: D127: +back

tool: D57: cl_button_back1

tool: D249: +moveleft

tool: D169: cl_button_moveleft1

tool: D304: +moveright

tool: D215: cl_button_moveright1

tool: D130: +left

tool: D18: cl_button_turnleft1

tool: D297: +right

tool: D60: cl_button_turnright1

tool: D32: cl_button_turnright2

tool: D128: cl_button_turnleft2

tool: D180: cl_button_moveright2

tool: D235: cl_button_moveleft2

tool: D96: cl_button_back2

tool: D54: cl_button_forward2

tool: D77: cl_button_altattack2

tool: D153: cl_button_attack2

assistant: ```c
void Send_KeyBindings(void) {
  int keys[2];
  char key[5];
  if (trap_Key_GetCatcher())
    return;
  Controls_GetKeyBindings("+attack", keys);
  if (keys[0] != -1) {
    Com_sprintf(key, sizeof(key), "%i", keys[0]);
    trap_Cvar_Set("cl_button_attack1", key);
    if (keys[1] != -1) {
      Com_sprintf(key, sizeof(key), "%i", keys[1]);
      trap_Cvar_Set("cl_button_attack2", key);
    }
  }
  Controls_GetKeyBindings("+button6", keys);
  if (keys[0] != -1) {
    Com_sprintf(key, sizeof(key), "%i", keys[0]);
    trap_Cvar_Set("cl_button_altattack1", key);
    if (keys[1] != -1) {
      Com_sprintf(key, sizeof(key), "%i", keys[1]);
      trap_Cvar_Set("cl_button_altattack2", key);
    }
  }
  Controls_GetKeyBindings("+forward", keys);
  if (keys[0] != -1) {
    Com_sprintf(key, sizeof(key), "%i", keys[0]);
    trap_Cvar_Set("cl_button_forward1", key);
    if (keys[1] != -1) {
      Com_sprintf(key, sizeof(key), "%i", keys[1]);
      trap_Cvar_Set("cl_button_forward2", key);
    }
  }
  Controls_GetKeyBindings("+back", keys);
  if (keys[0] != -1) {
    Com_sprintf(key, sizeof(key), "%i", keys[0]);
    trap_Cvar_Set("cl_button_back1", key);
    if (keys[1] != -1) {
      Com_sprintf(key, sizeof(key), "%i", keys[1]);
      trap_Cvar_Set("cl_button_back2", key);
    }
  }
  Controls_GetKeyBindings("+moveleft", keys);
  if (keys[0] != -1) {
    Com_sprintf(key, sizeof(key), "%i", keys[0]);
    trap_Cvar_Set("cl_button_moveleft1", key);
    if (keys[1] != -1) {
      Com_sprintf(key, sizeof(key), "%i", keys[1]);
      trap_Cvar_Set("cl_button_moveleft2", key);
    }
  }
  Controls_GetKeyBindings("+moveright", keys);
  if (keys[0] != -1) {
    Com_sprintf(key, sizeof(key), "%i", keys[0]);
    trap_Cvar_Set("cl_button_moveright1", key);
    if (keys[1] != -1) {
      Com_sprintf(key, sizeof(key), "%i", keys[1]);
      trap_Cvar_Set("cl_button_moveright2", key);
    }
  }
  Controls_GetKeyBindings("+left", keys);
  if (keys[0] != -1) {
    Com_sprintf(key, sizeof(key), "%i", keys[0]);
    trap_Cvar_Set("cl_button_turnleft1", key);
    if (keys[1] != -1) {
      Com_sprintf(key, sizeof(key), "%i", keys[1]);
      trap_Cvar_Set("cl_button_turnleft2", key);
    }
  }
  Controls_GetKeyBindings("+right", keys);
  if (keys[0] != -1) {
    Com_sprintf(key, sizeof(key), "%i", keys[0]);
    trap_Cvar_Set("cl_button_turnright1", key);
    if (keys[1] != -1) {
      Com_sprintf(key, sizeof(key), "%i", keys[1]);
      trap_Cvar_Set("cl_button_turnright2", key);
    }
  }
}
```