user: 请显示与下面列出的汇编代码相匹配的C语言实现：

```asm
<decode>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x30,%rsp
  mov    %rdi,-0x28(%rbp)
  mov    %rsi,-0x30(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movl   $0x0,-0x20(%rbp)
  movl   $0x0,-0x1c(%rbp)
  movl   $0x0,-0x18(%rbp)
  mov    -0x28(%rbp),%rax
  mov    $0x8,%edx
  mov    $0x0,%esi
  mov    %rax,%rdi
  call   <getBinaryData@plt>
  mov    %eax,-0x20(%rbp)
  mov    -0x30(%rbp),%rax
  lea    D415(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  cmpl   $0x5,-0x20(%rbp)
  jne    L850
  mov    -0x30(%rbp),%rax
  lea    D362(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  mov    -0x28(%rbp),%rax
  mov    $0x1,%edx
  mov    $0xc,%esi
  mov    %rax,%rdi
  call   <getBinaryData@plt>
  test   %eax,%eax
  je     L611
  mov    -0x30(%rbp),%rax
  lea    D198(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
L611:
  mov    -0x28(%rbp),%rax
  mov    $0x1,%edx
  mov    $0xd,%esi
  mov    %rax,%rdi
  call   <getBinaryData@plt>
  test   %eax,%eax
  je     L623
  mov    -0x30(%rbp),%rax
  lea    D401(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
L623:
  mov    -0x28(%rbp),%rax
  mov    $0x1,%edx
  mov    $0xe,%esi
  mov    %rax,%rdi
  call   <getBinaryData@plt>
  test   %eax,%eax
  je     L399
  mov    -0x30(%rbp),%rax
  lea    D616(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
L399:
  mov    -0x28(%rbp),%rax
  mov    $0x1,%edx
  mov    $0xf,%esi
  mov    %rax,%rdi
  call   <getBinaryData@plt>
  test   %eax,%eax
  je     L433
  mov    -0x30(%rbp),%rax
  lea    D74(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
L433:
  mov    -0x28(%rbp),%rax
  mov    $0x1,%edx
  mov    $0x10,%esi
  mov    %rax,%rdi
  call   <getBinaryData@plt>
  test   %eax,%eax
  je     L577
  mov    -0x30(%rbp),%rax
  lea    D443(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  jmp    L577
L850:
  cmpl   $0xa5,-0x20(%rbp)
  jne    L615
  mov    -0x28(%rbp),%rax
  mov    $0x4,%edx
  mov    $0x9,%esi
  mov    %rax,%rdi
  call   <getBinaryData@plt>
  mov    %eax,%edx
  lea    -0x14(%rbp),%rax
  lea    D676(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <sprintf@plt>
  mov    -0x28(%rbp),%rax
  mov    $0x4,%edx
  mov    $0xd,%esi
  mov    %rax,%rdi
  call   <getBinaryData@plt>
  mov    %eax,%edx
  lea    -0x12(%rbp),%rax
  lea    D676(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <sprintf@plt>
  mov    -0x28(%rbp),%rax
  mov    $0x4,%edx
  mov    $0x13,%esi
  mov    %rax,%rdi
  call   <getBinaryData@plt>
  mov    %eax,%edx
  lea    -0x10(%rbp),%rax
  lea    D676(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <sprintf@plt>
  mov    -0x28(%rbp),%rax
  mov    $0x5,%edx
  mov    $0x17,%esi
  mov    %rax,%rdi
  call   <getBinaryData@plt>
  mov    %eax,%edx
  lea    -0xe(%rbp),%rax
  lea    D676(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <sprintf@plt>
  mov    -0x28(%rbp),%rax
  mov    $0x5,%edx
  mov    $0x1c,%esi
  mov    %rax,%rdi
  call   <getBinaryData@plt>
  mov    %eax,%edx
  lea    -0xc(%rbp),%rax
  lea    D676(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <sprintf@plt>
  mov    -0x28(%rbp),%rax
  mov    $0x6,%edx
  mov    $0x21,%esi
  mov    %rax,%rdi
  call   <getBinaryData@plt>
  mov    %eax,%edx
  lea    -0xa(%rbp),%rax
  lea    D676(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <sprintf@plt>
  mov    -0x30(%rbp),%rax
  lea    D613(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  lea    -0x14(%rbp),%rdx
  mov    -0x30(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  lea    -0x12(%rbp),%rdx
  mov    -0x30(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  mov    -0x30(%rbp),%rax
  lea    D668(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  lea    -0x10(%rbp),%rdx
  mov    -0x30(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  mov    -0x30(%rbp),%rax
  lea    D668(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  lea    -0xe(%rbp),%rdx
  mov    -0x30(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  mov    -0x30(%rbp),%rax
  lea    D113(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  lea    -0xc(%rbp),%rdx
  mov    -0x30(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  mov    -0x30(%rbp),%rax
  lea    D439(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  lea    -0xa(%rbp),%rdx
  mov    -0x30(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  jmp    L577
L615:
  cmpl   $0x27,-0x20(%rbp)
  jne    L255
  mov    -0x30(%rbp),%rax
  lea    D444(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  mov    -0x28(%rbp),%rax
  mov    $0x8,%edx
  mov    $0x29,%esi
  mov    %rax,%rdi
  call   <getBinaryData@plt>
  mov    %eax,-0x1c(%rbp)
  mov    -0x1c(%rbp),%eax
  and    $0x1,%eax
  test   %eax,%eax
  je     L115
  mov    -0x30(%rbp),%rax
  lea    D466(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
L115:
  mov    -0x1c(%rbp),%eax
  and    $0x2,%eax
  test   %eax,%eax
  je     L775
  mov    -0x30(%rbp),%rax
  lea    D700(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
L775:
  mov    -0x1c(%rbp),%eax
  and    $0x4,%eax
  test   %eax,%eax
  je     L712
  mov    -0x30(%rbp),%rax
  lea    D200(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
L712:
  mov    -0x1c(%rbp),%eax
  and    $0x8,%eax
  test   %eax,%eax
  je     L721
  mov    -0x30(%rbp),%rax
  lea    D140(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
L721:
  mov    -0x1c(%rbp),%eax
  and    $0x10,%eax
  test   %eax,%eax
  je     L244
  mov    -0x30(%rbp),%rax
  lea    D546(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
L244:
  mov    -0x1c(%rbp),%eax
  and    $0x20,%eax
  test   %eax,%eax
  je     L175
  mov    -0x30(%rbp),%rax
  lea    D249(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
L175:
  mov    -0x1c(%rbp),%eax
  and    $0x40,%eax
  test   %eax,%eax
  je     L209
  mov    -0x30(%rbp),%rax
  lea    D630(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
L209:
  mov    -0x1c(%rbp),%eax
  and    $0x80,%eax
  test   %eax,%eax
  je     L577
  mov    -0x30(%rbp),%rax
  lea    D721(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  jmp    L577
L255:
  cmpl   $0x2d,-0x20(%rbp)
  jne    L570
  mov    -0x30(%rbp),%rax
  lea    D122(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  mov    -0x28(%rbp),%rax
  mov    $0x8,%edx
  mov    $0x29,%esi
  mov    %rax,%rdi
  call   <getBinaryData@plt>
  mov    %eax,-0x1c(%rbp)
  mov    -0x1c(%rbp),%eax
  and    $0x1,%eax
  test   %eax,%eax
  je     L679
  mov    -0x30(%rbp),%rax
  lea    D453(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
L679:
  mov    -0x1c(%rbp),%eax
  and    $0x2,%eax
  test   %eax,%eax
  je     L266
  mov    -0x30(%rbp),%rax
  lea    D321(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
L266:
  mov    -0x1c(%rbp),%eax
  and    $0x4,%eax
  test   %eax,%eax
  je     L619
  mov    -0x30(%rbp),%rax
  lea    D1(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
L619:
  mov    -0x1c(%rbp),%eax
  and    $0x8,%eax
  test   %eax,%eax
  je     L150
  mov    -0x30(%rbp),%rax
  lea    D266(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
L150:
  mov    -0x1c(%rbp),%eax
  and    $0x10,%eax
  test   %eax,%eax
  je     L667
  mov    -0x30(%rbp),%rax
  lea    D37(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
L667:
  mov    -0x1c(%rbp),%eax
  and    $0x20,%eax
  test   %eax,%eax
  je     L878
  mov    -0x30(%rbp),%rax
  lea    D197(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
L878:
  mov    -0x1c(%rbp),%eax
  and    $0x40,%eax
  test   %eax,%eax
  je     L362
  mov    -0x30(%rbp),%rax
  lea    D70(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
L362:
  mov    -0x1c(%rbp),%eax
  and    $0x80,%eax
  test   %eax,%eax
  je     L577
  mov    -0x30(%rbp),%rax
  lea    D655(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  jmp    L577
L570:
  cmpl   $0x34,-0x20(%rbp)
  jne    L698
  mov    -0x30(%rbp),%rax
  lea    D689(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  mov    -0x28(%rbp),%rax
  mov    $0x8,%edx
  mov    $0x29,%esi
  mov    %rax,%rdi
  call   <getBinaryData@plt>
  mov    %eax,-0x1c(%rbp)
  mov    -0x1c(%rbp),%eax
  and    $0x1,%eax
  test   %eax,%eax
  je     L848
  mov    -0x30(%rbp),%rax
  lea    D453(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
L848:
  mov    -0x1c(%rbp),%eax
  and    $0x2,%eax
  test   %eax,%eax
  je     L100
  mov    -0x30(%rbp),%rax
  lea    D321(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
L100:
  mov    -0x1c(%rbp),%eax
  and    $0x4,%eax
  test   %eax,%eax
  je     L318
  mov    -0x30(%rbp),%rax
  lea    D1(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
L318:
  mov    -0x1c(%rbp),%eax
  and    $0x8,%eax
  test   %eax,%eax
  je     L199
  mov    -0x30(%rbp),%rax
  lea    D266(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
L199:
  mov    -0x1c(%rbp),%eax
  and    $0x10,%eax
  test   %eax,%eax
  je     L3
  mov    -0x30(%rbp),%rax
  lea    D37(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
L3:
  mov    -0x1c(%rbp),%eax
  and    $0x20,%eax
  test   %eax,%eax
  je     L754
  mov    -0x30(%rbp),%rax
  lea    D197(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
L754:
  mov    -0x1c(%rbp),%eax
  and    $0x40,%eax
  test   %eax,%eax
  je     L203
  mov    -0x30(%rbp),%rax
  lea    D70(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
L203:
  mov    -0x1c(%rbp),%eax
  and    $0x80,%eax
  test   %eax,%eax
  je     L577
  mov    -0x30(%rbp),%rax
  lea    D655(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  jmp    L577
L698:
  cmpl   $0x3e,-0x20(%rbp)
  jne    L473
  mov    -0x30(%rbp),%rax
  lea    D347(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  mov    -0x28(%rbp),%rax
  mov    $0x8,%edx
  mov    $0x29,%esi
  mov    %rax,%rdi
  call   <getBinaryData@plt>
  mov    %eax,-0x1c(%rbp)
  mov    -0x1c(%rbp),%eax
  and    $0x1,%eax
  test   %eax,%eax
  je     L165
  mov    -0x30(%rbp),%rax
  lea    D453(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
L165:
  mov    -0x1c(%rbp),%eax
  and    $0x2,%eax
  test   %eax,%eax
  je     L730
  mov    -0x30(%rbp),%rax
  lea    D321(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
L730:
  mov    -0x1c(%rbp),%eax
  and    $0x4,%eax
  test   %eax,%eax
  je     L428
  mov    -0x30(%rbp),%rax
  lea    D1(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
L428:
  mov    -0x1c(%rbp),%eax
  and    $0x8,%eax
  test   %eax,%eax
  je     L501
  mov    -0x30(%rbp),%rax
  lea    D266(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
L501:
  mov    -0x1c(%rbp),%eax
  and    $0x10,%eax
  test   %eax,%eax
  je     L337
  mov    -0x30(%rbp),%rax
  lea    D37(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
L337:
  mov    -0x1c(%rbp),%eax
  and    $0x20,%eax
  test   %eax,%eax
  je     L861
  mov    -0x30(%rbp),%rax
  lea    D197(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
L861:
  mov    -0x1c(%rbp),%eax
  and    $0x40,%eax
  test   %eax,%eax
  je     L431
  mov    -0x30(%rbp),%rax
  lea    D70(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
L431:
  mov    -0x1c(%rbp),%eax
  and    $0x80,%eax
  test   %eax,%eax
  je     L577
  mov    -0x30(%rbp),%rax
  lea    D655(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  jmp    L577
L473:
  cmpl   $0xa,-0x20(%rbp)
  jne    L225
  mov    -0x30(%rbp),%rax
  lea    D664(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  jmp    L577
L225:
  cmpl   $0x63,-0x20(%rbp)
  jne    L700
  mov    -0x30(%rbp),%rax
  lea    D18(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  jmp    L577
L700:
  cmpl   $0x64,-0x20(%rbp)
  jne    L243
  mov    -0x30(%rbp),%rax
  lea    D18(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  jmp    L577
L243:
  cmpl   $0x69,-0x20(%rbp)
  jne    L300
  mov    -0x30(%rbp),%rax
  lea    D18(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  jmp    L577
L300:
  cmpl   $0x5d,-0x20(%rbp)
  jne    L139
  mov    -0x30(%rbp),%rax
  lea    D18(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  jmp    L577
L139:
  cmpl   $0x39,-0x20(%rbp)
  jne    L450
  mov    -0x30(%rbp),%rax
  lea    D18(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  jmp    L577
L450:
  cmpl   $0x11,-0x20(%rbp)
  jne    L580
  mov    -0x30(%rbp),%rax
  lea    D711(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  jmp    L577
L580:
  cmpl   $0xff,-0x20(%rbp)
  jne    L375
  mov    -0x30(%rbp),%rax
  lea    D494(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  mov    -0x28(%rbp),%rax
  mov    $0x20,%edx
  mov    $0x8,%esi
  mov    %rax,%rdi
  call   <getBinaryData@plt>
  cmp    $0xffffffff,%eax
  jne    L322
  mov    -0x30(%rbp),%rax
  lea    D644(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  jmp    L577
L322:
  mov    -0x28(%rbp),%rax
  mov    $0x14,%edx
  mov    $0x8,%esi
  mov    %rax,%rdi
  call   <getBinaryData@plt>
  mov    %eax,-0x18(%rbp)
  cmpl   $0x947ff,-0x18(%rbp)
  jne    L398
  mov    -0x30(%rbp),%rax
  lea    D666(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  jmp    L577
L398:
  cmpl   $0x96fff,-0x18(%rbp)
  jne    L207
  mov    -0x30(%rbp),%rax
  lea    D346(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  jmp    L577
L207:
  cmpl   $0x807ff,-0x18(%rbp)
  jne    L110
  mov    -0x30(%rbp),%rax
  lea    D652(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  jmp    L577
L110:
  cmpl   $0x82fff,-0x18(%rbp)
  jne    L105
  mov    -0x30(%rbp),%rax
  lea    D102(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  jmp    L577
L105:
  cmpl   $0x857ff,-0x18(%rbp)
  jne    L440
  mov    -0x30(%rbp),%rax
  lea    D438(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  jmp    L577
L440:
  cmpl   $0x87fff,-0x18(%rbp)
  jne    L414
  mov    -0x30(%rbp),%rax
  lea    D234(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  jmp    L577
L414:
  cmpl   $0x88fff,-0x18(%rbp)
  jne    L830
  mov    -0x30(%rbp),%rax
  lea    D219(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  jmp    L577
L830:
  cmpl   $0x8b7ff,-0x18(%rbp)
  jne    L531
  mov    -0x30(%rbp),%rax
  lea    D702(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  jmp    L577
L531:
  cmpl   $0x8dfff,-0x18(%rbp)
  jne    L631
  mov    -0x30(%rbp),%rax
  lea    D634(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  jmp    L577
L631:
  cmpl   $0x8e7ff,-0x18(%rbp)
  jne    L90
  mov    -0x30(%rbp),%rax
  lea    D563(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  jmp    L577
L90:
  cmpl   $0x917ff,-0x18(%rbp)
  jne    L862
  mov    -0x30(%rbp),%rax
  lea    D400(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  jmp    L577
L862:
  cmpl   $0x93fff,-0x18(%rbp)
  jne    L34
  mov    -0x30(%rbp),%rax
  lea    D680(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  jmp    L577
L34:
  mov    -0x30(%rbp),%rax
  lea    D518(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  jmp    L577
L375:
  mov    -0x30(%rbp),%rax
  lea    D386(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
L577:
  mov    -0x20(%rbp),%eax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L843
  call   <__stack_chk_fail@plt>
L843:
  leave
  ret
```

tool_calls: name: unpack_data
arguments: label: D415
data_type: string
name: unpack_data
arguments: label: D362
data_type: string
name: unpack_data
arguments: label: D198
data_type: string
name: unpack_data
arguments: label: D401
data_type: string
name: unpack_data
arguments: label: D616
data_type: string
name: unpack_data
arguments: label: D74
data_type: string
name: unpack_data
arguments: label: D443
data_type: string
name: unpack_data
arguments: label: D676
data_type: string
name: unpack_data
arguments: label: D613
data_type: string
name: unpack_data
arguments: label: D668
data_type: string
name: unpack_data
arguments: label: D113
data_type: string
name: unpack_data
arguments: label: D439
data_type: string
name: unpack_data
arguments: label: D444
data_type: string
name: unpack_data
arguments: label: D466
data_type: string
name: unpack_data
arguments: label: D700
data_type: string
name: unpack_data
arguments: label: D200
data_type: string
name: unpack_data
arguments: label: D140
data_type: string
name: unpack_data
arguments: label: D546
data_type: string
name: unpack_data
arguments: label: D249
data_type: string
name: unpack_data
arguments: label: D630
data_type: string
name: unpack_data
arguments: label: D721
data_type: string
name: unpack_data
arguments: label: D122
data_type: string
name: unpack_data
arguments: label: D453
data_type: string
name: unpack_data
arguments: label: D321
data_type: string
name: unpack_data
arguments: label: D1
data_type: string
name: unpack_data
arguments: label: D266
data_type: string
name: unpack_data
arguments: label: D37
data_type: string
name: unpack_data
arguments: label: D197
data_type: string
name: unpack_data
arguments: label: D70
data_type: string
name: unpack_data
arguments: label: D655
data_type: string
name: unpack_data
arguments: label: D689
data_type: string
name: unpack_data
arguments: label: D347
data_type: string
name: unpack_data
arguments: label: D664
data_type: string
name: unpack_data
arguments: label: D18
data_type: string
name: unpack_data
arguments: label: D711
data_type: string
name: unpack_data
arguments: label: D494
data_type: string
name: unpack_data
arguments: label: D644
data_type: string
name: unpack_data
arguments: label: D666
data_type: string
name: unpack_data
arguments: label: D346
data_type: string
name: unpack_data
arguments: label: D652
data_type: string
name: unpack_data
arguments: label: D102
data_type: string
name: unpack_data
arguments: label: D438
data_type: string
name: unpack_data
arguments: label: D234
data_type: string
name: unpack_data
arguments: label: D219
data_type: string
name: unpack_data
arguments: label: D702
data_type: string
name: unpack_data
arguments: label: D634
data_type: string
name: unpack_data
arguments: label: D563
data_type: string
name: unpack_data
arguments: label: D400
data_type: string
name: unpack_data
arguments: label: D680
data_type: string
name: unpack_data
arguments: label: D518
data_type: string
name: unpack_data
arguments: label: D386
data_type: string

tool: 

tool: D362: p->k LED Status: 

tool: D198: Error 

tool: D401: Bypass 

tool: D616: Memory 

tool: D74: Armed 

tool: D443: Ready 

tool: D676: %d

tool: D613: p->k Date: 20

tool: D668: -

tool: D113:  

tool: D439: :

tool: D444: p->k Zone1: 

tool: D466: 1 

tool: D700: 2 

tool: D200: 3 

tool: D140: 4 

tool: D546: 5 

tool: D249: 6 

tool: D630: 7 

tool: D721: 8 

tool: D122: p->k Zone2: 

tool: D453: 9 

tool: D321: 10 

tool: D1: 11 

tool: D266: 12 

tool: D37: 13 

tool: D197: 14 

tool: D70: 15 

tool: D655: 16 

tool: D689: p->k Zone3: 

tool: D347: p->k Zone4: 

tool: D664: p->k panel in program mode

tool: D18: p->k undefined command

tool: D711: p->k Keypad query

tool: D494: k->p 

tool: D644: idle

tool: D666: button * pressed

tool: D346: button # pressed

tool: D652: button 0 pressed

tool: D102: button 1 pressed

tool: D438: button 2 pressed

tool: D234: button 3 pressed

tool: D219: button 4 pressed

tool: D702: button 5 pressed

tool: D634: button 6 pressed

tool: D563: button 7 pressed

tool: D400: button 8 pressed

tool: D680: button 9 pressed

tool: D518: unknown keypad msg

tool: D386: p->k unknown command.

assistant: ```c
int decode(char *word, char *msg) {
  int cmd = 0, zones = 0, button = 0;
  char year3[2], year4[2], month[2], day[2], hour[2], minute[2];
  cmd = getBinaryData(word, 0, 8);
  strcpy(msg, "");
  if (cmd == 0x05) {
    strcpy(msg, "p->k LED Status: ");
    if (getBinaryData(word, 12, 1))
      strcat(msg, "Error ");
    if (getBinaryData(word, 13, 1))
      strcat(msg, "Bypass ");
    if (getBinaryData(word, 14, 1))
      strcat(msg, "Memory ");
    if (getBinaryData(word, 15, 1))
      strcat(msg, "Armed ");
    if (getBinaryData(word, 16, 1))
      strcat(msg, "Ready ");
  } else if (cmd == 0xa5) {
    sprintf(year3, "%d", getBinaryData(word, 9, 4));
    sprintf(year4, "%d", getBinaryData(word, 13, 4));
    sprintf(month, "%d", getBinaryData(word, 19, 4));
    sprintf(day, "%d", getBinaryData(word, 23, 5));
    sprintf(hour, "%d", getBinaryData(word, 28, 5));
    sprintf(minute, "%d", getBinaryData(word, 33, 6));
    strcpy(msg, "p->k Date: 20");
    strcat(msg, year3);
    strcat(msg, year4);
    strcat(msg, "-");
    strcat(msg, month);
    strcat(msg, "-");
    strcat(msg, day);
    strcat(msg, " ");
    strcat(msg, hour);
    strcat(msg, ":");
    strcat(msg, minute);
  } else if (cmd == 0x27) {
    strcpy(msg, "p->k Zone1: ");
    zones = getBinaryData(word, 41, 8);
    if (zones & 1)
      strcat(msg, "1 ");
    if (zones & 2)
      strcat(msg, "2 ");
    if (zones & 4)
      strcat(msg, "3 ");
    if (zones & 8)
      strcat(msg, "4 ");
    if (zones & 16)
      strcat(msg, "5 ");
    if (zones & 32)
      strcat(msg, "6 ");
    if (zones & 64)
      strcat(msg, "7 ");
    if (zones & 128)
      strcat(msg, "8 ");
  } else if (cmd == 0x2d) {
    strcpy(msg, "p->k Zone2: ");
    zones = getBinaryData(word, 41, 8);
    if (zones & 1)
      strcat(msg, "9 ");
    if (zones & 2)
      strcat(msg, "10 ");
    if (zones & 4)
      strcat(msg, "11 ");
    if (zones & 8)
      strcat(msg, "12 ");
    if (zones & 16)
      strcat(msg, "13 ");
    if (zones & 32)
      strcat(msg, "14 ");
    if (zones & 64)
      strcat(msg, "15 ");
    if (zones & 128)
      strcat(msg, "16 ");
  } else if (cmd == 0x34) {
    strcpy(msg, "p->k Zone3: ");
    zones = getBinaryData(word, 41, 8);
    if (zones & 1)
      strcat(msg, "9 ");
    if (zones & 2)
      strcat(msg, "10 ");
    if (zones & 4)
      strcat(msg, "11 ");
    if (zones & 8)
      strcat(msg, "12 ");
    if (zones & 16)
      strcat(msg, "13 ");
    if (zones & 32)
      strcat(msg, "14 ");
    if (zones & 64)
      strcat(msg, "15 ");
    if (zones & 128)
      strcat(msg, "16 ");
  } else if (cmd == 0x3e) {
    strcpy(msg, "p->k Zone4: ");
    zones = getBinaryData(word, 41, 8);
    if (zones & 1)
      strcat(msg, "9 ");
    if (zones & 2)
      strcat(msg, "10 ");
    if (zones & 4)
      strcat(msg, "11 ");
    if (zones & 8)
      strcat(msg, "12 ");
    if (zones & 16)
      strcat(msg, "13 ");
    if (zones & 32)
      strcat(msg, "14 ");
    if (zones & 64)
      strcat(msg, "15 ");
    if (zones & 128)
      strcat(msg, "16 ");
  } else if (cmd == 0x0a)
    strcpy(msg, "p->k panel in program mode");
  else if (cmd == 0x63)
    strcpy(msg, "p->k undefined command");
  else if (cmd == 0x64)
    strcpy(msg, "p->k undefined command");
  else if (cmd == 0x69)
    strcpy(msg, "p->k undefined command");
  else if (cmd == 0x5d)
    strcpy(msg, "p->k undefined command");
  else if (cmd == 0x39)
    strcpy(msg, "p->k undefined command");
  else if (cmd == 0x11)
    strcpy(msg, "p->k Keypad query");
  else if (cmd == 0xff) {
    strcpy(msg, "k->p ");
    if (getBinaryData(word, 8, 32) == 0xffffffff)
      strcat(msg, "idle");
    else {
      button = getBinaryData(word, 8, 20);
      if (button == 0x947ff)
        strcat(msg, "button * pressed");
      else if (button == 0x96fff)
        strcat(msg, "button # pressed");
      else if (button == 0x807ff)
        strcat(msg, "button 0 pressed");
      else if (button == 0x82fff)
        strcat(msg, "button 1 pressed");
      else if (button == 0x857ff)
        strcat(msg, "button 2 pressed");
      else if (button == 0x87fff)
        strcat(msg, "button 3 pressed");
      else if (button == 0x88fff)
        strcat(msg, "button 4 pressed");
      else if (button == 0x8b7ff)
        strcat(msg, "button 5 pressed");
      else if (button == 0x8dfff)
        strcat(msg, "button 6 pressed");
      else if (button == 0x8e7ff)
        strcat(msg, "button 7 pressed");
      else if (button == 0x917ff)
        strcat(msg, "button 8 pressed");
      else if (button == 0x93fff)
        strcat(msg, "button 9 pressed");
      else
        strcat(msg, "unknown keypad msg");
    }
  } else
    strcpy(msg, "p->k unknown command.");
  return cmd;
}
```