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

```asm
<findopcode>:
  endbr64
  cmp    $0x130,%edi
  ja     L3
  lea    D14(%rip),%rdx
  mov    %edi,%eax
  movslq (%rdx,%rax,4),%rax
  add    %rdx,%rax
  notrack jmp *%rax
  nop
L3:
  sub    $0x8,%rsp
  mov    %edi,%esi
  lea    D18(%rip),%rdi
  call   <printf@plt>
  xor    %eax,%eax
  add    $0x8,%rsp
  ret
  mov    $0x44,%eax
  ret
  mov    $0x43,%eax
  ret
  mov    $0x42,%eax
  ret
  mov    $0x41,%eax
  ret
  mov    $0x40,%eax
  ret
  mov    $0x3f,%eax
  ret
  mov    $0x3e,%eax
  ret
  mov    $0x3d,%eax
  ret
  mov    $0x3c,%eax
  ret
  mov    $0x3b,%eax
  ret
  mov    $0x3a,%eax
  ret
  mov    $0x35,%eax
  ret
  mov    $0x50,%eax
  ret
  mov    $0x34,%eax
  ret
  mov    $0x33,%eax
  ret
  mov    $0x32,%eax
  ret
  mov    $0x31,%eax
  ret
  mov    $0x30,%eax
  ret
  mov    $0x2f,%eax
  ret
  mov    $0x2e,%eax
  ret
  mov    $0x2d,%eax
  ret
  mov    $0x2c,%eax
  ret
  mov    $0x2b,%eax
  ret
  mov    $0x2a,%eax
  ret
  mov    $0x29,%eax
  ret
  mov    $0x28,%eax
  ret
  mov    $0x27,%eax
  ret
  mov    $0x26,%eax
  ret
  mov    $0x25,%eax
  ret
  mov    $0x24,%eax
  ret
  mov    $0x23,%eax
  ret
  mov    $0x22,%eax
  ret
  mov    $0x21,%eax
  ret
  mov    $0x20,%eax
  ret
  mov    $0x1e,%eax
  ret
  mov    $0x1d,%eax
  ret
  mov    $0x1c,%eax
  ret
  mov    $0x1b,%eax
  ret
  mov    $0x16,%eax
  ret
  mov    $0x15,%eax
  ret
  mov    $0x14,%eax
  ret
  mov    $0x13,%eax
  ret
  mov    $0x12,%eax
  ret
  mov    $0x11,%eax
  ret
  mov    $0x10,%eax
  ret
  mov    $0xf,%eax
  ret
  mov    $0xe,%eax
  ret
  mov    $0xd,%eax
  ret
  mov    $0xc,%eax
  ret
  mov    $0xb,%eax
  ret
  mov    $0xa,%eax
  ret
  mov    $0x9,%eax
  ret
  mov    $0x8,%eax
  ret
  mov    $0x7,%eax
  ret
  mov    $0x6,%eax
  ret
  mov    $0x5,%eax
  ret
  mov    $0x4,%eax
  ret
  mov    $0x3,%eax
  ret
  mov    $0x2,%eax
  ret
  mov    %edi,%eax
  ret
  mov    $0x1,%eax
  ret
```

tool_calls: name: unpack_data
arguments: tag: D18
datatype: string

tool: D18: Unknown opcode %02x


assistant: ```c
int findopcode(int opnum) {
  switch (opnum) {
  case (0x00):
    return 0;
  case (0x10):
    return 1;
  case (0x11):
    return 2;
  case (0x12):
    return 3;
  case (0x13):
    return 4;
  case (0x14):
    return 5;
  case (0x15):
    return 6;
  case (0x18):
    return 7;
  case (0x19):
    return 8;
  case (0x1A):
    return 9;
  case (0x1B):
    return 10;
  case (0x1C):
    return 11;
  case (0x1D):
    return 12;
  case (0x1E):
    return 13;
  case (0x20):
    return 14;
  case (0x22):
    return 15;
  case (0x23):
    return 16;
  case (0x24):
    return 17;
  case (0x25):
    return 18;
  case (0x26):
    return 19;
  case (0x27):
    return 20;
  case (0x28):
    return 21;
  case (0x29):
    return 22;
  case (0x30):
    return 27;
  case (0x31):
    return 28;
  case (0x32):
    return 29;
  case (0x33):
    return 30;
  case (0x40):
    return 32;
  case (0x41):
    return 33;
  case (0x42):
    return 34;
  case (0x44):
    return 35;
  case (0x45):
    return 36;
  case (0x48):
    return 37;
  case (0x49):
    return 38;
  case (0x4A):
    return 39;
  case (0x4B):
    return 40;
  case (0x4C):
    return 41;
  case (0x4D):
    return 42;
  case (0x4E):
    return 43;
  case (0x4F):
    return 44;
  case (0x50):
    return 45;
  case (0x51):
    return 46;
  case (0x52):
    return 47;
  case (0x53):
    return 48;
  case (0x54):
    return 49;
  case (0x70):
    return 50;
  case (0x73):
    return 80;
  case (0x71):
    return 51;
  case (0x72):
    return 52;
  case (0x100):
    return 53;
  case (0x110):
    return 58;
  case (0x111):
    return 59;
  case (0x120):
    return 60;
  case (0x121):
    return 61;
  case (0x122):
    return 62;
  case (0x123):
    return 63;
  case (0x124):
    return 64;
  case (0x125):
    return 65;
  case (0x126):
    return 66;
  case (0x127):
    return 67;
  case (0x130):
    return 68;
  default:
    printf("Unknown opcode %02x\n", opnum);
    return 0;
  }
}
```