user: Demonstrate the C code that generates the assembly output below:

```asm
<get_first_winning_move>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  mov    %edi,%eax
  mov    0x38(%rsp),%r10d
  mov    0x40(%rsp),%r11d
  test   %r8w,%r8w
  sete   %bl
  test   %di,%di
  je     L1179
  test   %bl,%bl
  je     L1179
  mov    %r11d,%edi
  or     %r9w,%di
  jne    L2925
  test   %r10w,%r10w
  jne    L1404
L2925:
  mov    %r10d,%edi
  or     %r9w,%di
  jne    L2141
  test   %r11w,%r11w
  jne    L2972
L2141:
  test   %si,%si
  setne  %dil
L1082:
  test   %bl,%bl
  je     L306
  test   %dil,%dil
  je     L306
  mov    %r10d,%edi
  or     %r9w,%di
  jne    L306
  test   %r11w,%r11w
  jne    L1149
L306:
  test   %dx,%dx
  je     L1803
  test   %bl,%bl
  je     L1803
  mov    %r11d,%edi
  or     %r10w,%di
  jne    L1803
  test   %r9w,%r9w
  jne    L2858
L1803:
  test   %cx,%cx
  je     L111
  test   %bl,%bl
  je     L111
  mov    %r11d,%ebx
  or     %r9w,%bx
  jne    L111
  test   %r10w,%r10w
  jne    L3000
L111:
  cmp    $0x11,%ax
  sete   %bl
  cmp    $0x15,%r8w
  setne  -0xa(%rsp)
  movzbl -0xa(%rsp),%edi
  cmp    $0x15,%r9w
  setne  %bpl
  mov    %edi,%r13d
  and    %ebp,%r13d
  test   %bl,%bl
  je     L1623
  mov    $0x0,%edi
  test   %r13b,%r13b
  jne    L182
L1623:
  cmp    $0x12,%ax
  sete   %r12b
  cmp    $0x16,%r8w
  setne  -0x8(%rsp)
  movzbl -0x8(%rsp),%edi
  cmp    $0x16,%r9w
  setne  -0x9(%rsp)
  movzbl -0x9(%rsp),%r15d
  and    %r15d,%edi
  mov    %edi,%r15d
  mov    %dil,-0x4(%rsp)
  test   %r12b,%r12b
  je     L544
  mov    $0x0,%edi
  test   %r15b,%r15b
  jne    L182
L544:
  cmp    $0x13,%ax
  sete   %r15b
  cmp    $0x17,%r8w
  setne  -0x6(%rsp)
  movzbl -0x6(%rsp),%edi
  cmp    $0x17,%r9w
  setne  -0x7(%rsp)
  movzbl -0x7(%rsp),%r14d
  and    %r14d,%edi
  mov    %edi,%r14d
  mov    %dil,-0x3(%rsp)
  test   %r15b,%r15b
  je     L260
  mov    $0x0,%edi
  test   %r14b,%r14b
  jne    L182
L260:
  cmp    $0x14,%ax
  sete   %al
  cmp    $0x18,%r8w
  setne  -0x5(%rsp)
  movzbl -0x5(%rsp),%edi
  cmp    $0x18,%r9w
  setne  %r8b
  and    %r8d,%edi
  mov    %edi,%r9d
  test   %al,%al
  je     L2380
  mov    $0x0,%edi
  test   %r9b,%r9b
  jne    L182
L2380:
  test   %bl,%bl
  je     L1017
  mov    $0x1,%edi
  cmpb   $0x0,-0x4(%rsp)
  jne    L182
L1017:
  test   %r12b,%r12b
  je     L1127
  mov    $0x1,%edi
  cmpb   $0x0,-0x3(%rsp)
  jne    L182
L1127:
  test   %r15b,%r15b
  je     L2472
  mov    $0x1,%edi
  test   %r9b,%r9b
  jne    L182
L2472:
  test   %r12b,%r12b
  je     L54
  mov    $0x7,%edi
  test   %r13b,%r13b
  jne    L182
L54:
  test   %r15b,%r15b
  je     L2798
  mov    $0x7,%edi
  cmpb   $0x0,-0x4(%rsp)
  jne    L182
L2798:
  test   %al,%al
  je     L2609
  mov    $0x7,%edi
  cmpb   $0x0,-0x3(%rsp)
  jne    L182
L2609:
  cmp    $0x11,%si
  sete   %al
  cmp    $0x15,%r10w
  setne  %r12b
  test   %r12b,%al
  je     L2871
  mov    $0x8,%edi
  test   %bpl,%bpl
  jne    L182
L2871:
  cmp    $0x12,%si
  sete   %bl
  cmp    $0x16,%r10w
  setne  %r15b
  test   %r15b,%bl
  je     L504
  mov    $0x8,%edi
  cmpb   $0x0,-0x9(%rsp)
  jne    L182
L504:
  cmp    $0x13,%si
  sete   -0x1(%rsp)
  movzbl -0x1(%rsp),%edi
  cmp    $0x17,%r10w
  setne  -0x2(%rsp)
  movzbl -0x2(%rsp),%r14d
  test   %r14b,%dil
  je     L444
  mov    $0x8,%edi
  cmpb   $0x0,-0x7(%rsp)
  jne    L182
L444:
  cmp    $0x14,%si
  sete   %sil
  cmp    $0x18,%r10w
  setne  %r10b
  test   %r10b,%sil
  je     L140
  mov    $0x8,%edi
  test   %r8b,%r8b
  jne    L182
L140:
  test   %r15b,%al
  je     L2314
  mov    $0x9,%edi
  cmpb   $0x0,-0x9(%rsp)
  jne    L182
L2314:
  test   %bl,-0x2(%rsp)
  je     L672
  mov    $0x9,%edi
  cmpb   $0x0,-0x7(%rsp)
  jne    L182
L672:
  test   %r10b,-0x1(%rsp)
  je     L2295
  mov    $0x9,%edi
  test   %r8b,%r8b
  jne    L182
L2295:
  test   %r12b,%bl
  je     L2494
  mov    $0xf,%edi
  test   %bpl,%bpl
  jne    L182
L2494:
  test   %r15b,-0x1(%rsp)
  je     L1273
  mov    $0xf,%edi
  cmpb   $0x0,-0x9(%rsp)
  jne    L182
L1273:
  test   %sil,-0x2(%rsp)
  je     L2771
  mov    $0xf,%edi
  cmpb   $0x0,-0x7(%rsp)
  jne    L182
L2771:
  cmp    $0x11,%dx
  sete   %sil
  cmpb   $0x0,-0xa(%rsp)
  je     L511
  test   %sil,%sil
  je     L511
  cmp    $0x15,%r11w
  setne  %al
  mov    $0x10,%edi
  and    %r12b,%al
  mov    %eax,%r8d
  jne    L182
  cmp    $0x13,%dx
  sete   %bl
L1980:
  cmp    $0x14,%dx
  sete   %dl
  movzbl -0x5(%rsp),%eax
  and    %dl,%al
  je     L269
  cmp    $0x18,%r11w
  je     L2543
  mov    $0x10,%edi
  test   %r10b,%r10b
  je     L2543
  jmp    L182
L1404:
  movswl %ax,%ebp
  movswl %r10w,%r12d
  lea    0x4(%rbp),%r13d
  mov    $0x0,%edi
  cmp    %r12d,%r13d
  je     L182
  lea    0x5(%rbp),%edi
  cmp    %edi,%r12d
  je     L850
  lea    0x1(%rbp),%edi
  cmp    %edi,%r12d
  je     L2267
L2461:
  lea    -0x3(%rbp),%edi
  cmp    %edi,%r12d
  je     L2775
L496:
  cmp    $0x8,%ax
  setg   %r13b
  lea    -0x4(%rbp),%edi
  cmp    %r12d,%edi
  jne    L2699
  test   %r13b,%r13b
  jne    L2008
L2699:
  lea    -0x5(%rbp),%edi
  cmp    %edi,%r12d
  je     L2503
L657:
  lea    -0x1(%rbp),%edi
  cmp    %edi,%r12d
  je     L2936
L1451:
  add    $0x3,%ebp
  cmp    %ebp,%r12d
  jne    L2141
  mov    %eax,%edi
  sar    $0xf,%di
  shr    $0xe,%di
  lea    (%rdi,%rax,1),%ebp
  and    $0x3,%ebp
  sub    %edi,%ebp
  mov    $0x7,%edi
  cmp    $0x1,%bp
  je     L2141
  jmp    L182
L850:
  mov    $0x1,%edi
  test   $0x3,%al
  jne    L182
  lea    0x1(%rbp),%edi
  cmp    %edi,%r12d
  jne    L2461
  jmp    L496
L2267:
  mov    $0x2,%edi
  test   $0x3,%al
  je     L496
  jmp    L182
L2775:
  test   $0x3,%al
  je     L496
  mov    $0x3,%edi
  cmp    $0x8,%ax
  jle    L496
  jmp    L182
L2503:
  mov    %eax,%r14d
  sar    $0xf,%r14w
  shr    $0xe,%r14w
  lea    (%r14,%rax,1),%edi
  and    $0x3,%edi
  sub    %r14d,%edi
  cmp    $0x1,%di
  je     L657
  mov    $0x5,%edi
  test   %r13b,%r13b
  je     L657
  jmp    L182
L2936:
  mov    %eax,%edi
  sar    $0xf,%di
  shr    $0xe,%di
  lea    (%rdi,%rax,1),%r13d
  and    $0x3,%r13d
  sub    %edi,%r13d
  mov    $0x6,%edi
  cmp    $0x1,%r13w
  je     L1451
  jmp    L182
L2972:
  movswl %ax,%ebp
  movswl %r11w,%r12d
  lea    0x4(%rbp),%r13d
  mov    $0x0,%edi
  cmp    %r12d,%r13d
  je     L182
  lea    0x5(%rbp),%edi
  cmp    %edi,%r12d
  je     L2280
  lea    0x1(%rbp),%edi
  cmp    %edi,%r12d
  je     L1317
L732:
  lea    -0x3(%rbp),%edi
  cmp    %edi,%r12d
  je     L413
L1657:
  cmp    $0x8,%ax
  setg   %r13b
  lea    -0x4(%rbp),%edi
  cmp    %r12d,%edi
  jne    L1726
  test   %r13b,%r13b
  jne    L286
L1726:
  lea    -0x5(%rbp),%edi
  cmp    %edi,%r12d
  je     L1097
L1247:
  lea    -0x1(%rbp),%edi
  cmp    %edi,%r12d
  je     L2096
  add    $0x3,%ebp
  cmp    %ebp,%r12d
  jne    L2141
  mov    %eax,%edi
  sar    $0xf,%di
  shr    $0xe,%di
  lea    (%rdi,%rax,1),%ebp
  and    $0x3,%ebp
  sub    %edi,%ebp
  mov    $0x7,%edi
  cmp    $0x1,%bp
  je     L2141
  jmp    L182
L2280:
  mov    $0x1,%edi
  test   $0x3,%al
  jne    L182
  lea    0x1(%rbp),%edi
  cmp    %edi,%r12d
  jne    L732
  jmp    L1657
L1317:
  mov    $0x2,%edi
  test   $0x3,%al
  je     L1657
  jmp    L182
L413:
  test   $0x3,%al
  je     L1657
  mov    $0x3,%edi
  cmp    $0x8,%ax
  jle    L1657
  jmp    L182
L1097:
  mov    %eax,%r14d
  sar    $0xf,%r14w
  shr    $0xe,%r14w
  lea    (%r14,%rax,1),%edi
  and    $0x3,%edi
  sub    %r14d,%edi
  cmp    $0x1,%di
  je     L1247
  mov    $0x5,%edi
  test   %r13b,%r13b
  je     L1247
  jmp    L182
L2096:
  mov    %eax,%edi
  sar    $0xf,%di
  shr    $0xe,%di
  lea    (%rdi,%rax,1),%ebp
  and    $0x3,%ebp
  sub    %edi,%ebp
  mov    $0x6,%edi
  cmp    $0x1,%bp
  je     L2141
  jmp    L182
L1179:
  test   %si,%si
  setne  %bpl
  test   %r8w,%r8w
  setne  %dil
  and    %bpl,%dil
  je     L839
  mov    %r11d,%ebp
  or     %r10d,%ebp
  or     %r9w,%bp
  jne    L1082
  movswl %si,%ebp
  movswl %r8w,%r12d
  lea    0x4(%rbp),%edi
  cmp    %r12d,%edi
  je     L1703
  lea    0x5(%rbp),%edi
  cmp    %edi,%r12d
  je     L2929
  lea    0x1(%rbp),%edi
  cmp    %edi,%r12d
  je     L329
L1040:
  lea    -0x3(%rbp),%edi
  cmp    %edi,%r12d
  je     L305
L1033:
  cmp    $0x8,%si
  setg   %r13b
  lea    -0x4(%rbp),%edi
  cmp    %r12d,%edi
  jne    L263
  test   %r13b,%r13b
  jne    L198
L263:
  lea    -0x5(%rbp),%edi
  cmp    %edi,%r12d
  je     L1482
L2108:
  lea    -0x1(%rbp),%edi
  cmp    %edi,%r12d
  je     L1579
L2713:
  add    $0x3,%ebp
  cmp    %ebp,%r12d
  jne    L1803
  mov    %esi,%edi
  sar    $0xf,%di
  shr    $0xe,%di
  lea    (%rdi,%rsi,1),%ebp
  and    $0x3,%ebp
  sub    %edi,%ebp
  mov    $0xf,%edi
  cmp    $0x1,%bp
  je     L1803
  jmp    L182
L2929:
  mov    $0x9,%edi
  test   $0x3,%sil
  jne    L182
  lea    0x1(%rbp),%edi
  cmp    %edi,%r12d
  jne    L1040
  jmp    L1033
L329:
  mov    $0xa,%edi
  test   $0x3,%sil
  je     L1033
  jmp    L182
L305:
  test   $0x3,%sil
  je     L1033
  mov    $0xb,%edi
  cmp    $0x8,%si
  jle    L1033
  jmp    L182
L1482:
  mov    %esi,%r14d
  sar    $0xf,%r14w
  shr    $0xe,%r14w
  lea    (%r14,%rsi,1),%edi
  and    $0x3,%edi
  sub    %r14d,%edi
  cmp    $0x1,%di
  je     L2108
  mov    $0xd,%edi
  test   %r13b,%r13b
  je     L2108
  jmp    L182
L1579:
  mov    %esi,%edi
  sar    $0xf,%di
  shr    $0xe,%di
  lea    (%rdi,%rsi,1),%r13d
  and    $0x3,%r13d
  sub    %edi,%r13d
  mov    $0xe,%edi
  cmp    $0x1,%r13w
  je     L2713
  jmp    L182
L839:
  mov    %ebp,%edi
  jmp    L1082
L1149:
  movswl %si,%ebx
  movswl %r11w,%ebp
  lea    0x4(%rbx),%edi
  cmp    %ebp,%edi
  je     L2312
  lea    0x5(%rbx),%edi
  cmp    %edi,%ebp
  je     L326
  lea    0x1(%rbx),%edi
  cmp    %edi,%ebp
  je     L2217
L820:
  lea    -0x3(%rbx),%edi
  cmp    %edi,%ebp
  je     L1116
L2749:
  cmp    $0x8,%si
  setg   %r12b
  lea    -0x4(%rbx),%edi
  cmp    %ebp,%edi
  jne    L48
  test   %r12b,%r12b
  jne    L220
L48:
  lea    -0x5(%rbx),%edi
  cmp    %edi,%ebp
  je     L2976
L1618:
  lea    -0x1(%rbx),%edi
  cmp    %edi,%ebp
  je     L2367
L724:
  add    $0x3,%ebx
  cmp    %ebx,%ebp
  jne    L111
  mov    %esi,%edi
  sar    $0xf,%di
  shr    $0xe,%di
  lea    (%rdi,%rsi,1),%ebx
  and    $0x3,%ebx
  sub    %edi,%ebx
  mov    $0xf,%edi
  cmp    $0x1,%bx
  je     L111
  jmp    L182
L326:
  mov    $0x9,%edi
  test   $0x3,%sil
  jne    L182
  lea    0x1(%rbx),%edi
  cmp    %edi,%ebp
  jne    L820
  jmp    L2749
L2217:
  mov    $0xa,%edi
  test   $0x3,%sil
  je     L2749
  jmp    L182
L1116:
  test   $0x3,%sil
  je     L2749
  mov    $0xb,%edi
  cmp    $0x8,%si
  jle    L2749
  jmp    L182
L2976:
  mov    %esi,%r13d
  sar    $0xf,%r13w
  shr    $0xe,%r13w
  lea    0x0(%r13,%rsi,1),%edi
  and    $0x3,%edi
  sub    %r13d,%edi
  cmp    $0x1,%di
  je     L1618
  mov    $0xd,%edi
  test   %r12b,%r12b
  je     L1618
  jmp    L182
L2367:
  mov    %esi,%edi
  sar    $0xf,%di
  shr    $0xe,%di
  lea    (%rdi,%rsi,1),%r12d
  and    $0x3,%r12d
  sub    %edi,%r12d
  mov    $0xe,%edi
  cmp    $0x1,%r12w
  je     L724
  jmp    L182
L2858:
  movswl %dx,%ebx
  movswl %r9w,%ebp
  lea    0x4(%rbx),%edi
  cmp    %ebp,%edi
  je     L1734
  lea    0x5(%rbx),%edi
  cmp    %edi,%ebp
  je     L1963
  lea    0x1(%rbx),%edi
  cmp    %edi,%ebp
  je     L2294
L2968:
  lea    -0x3(%rbx),%edi
  cmp    %edi,%ebp
  je     L623
L1354:
  cmp    $0x8,%dx
  setg   %r12b
  lea    -0x4(%rbx),%edi
  cmp    %ebp,%edi
  jne    L1752
  test   %r12b,%r12b
  jne    L412
L1752:
  lea    -0x5(%rbx),%edi
  cmp    %edi,%ebp
  je     L1053
L181:
  lea    -0x1(%rbx),%edi
  cmp    %edi,%ebp
  je     L448
  add    $0x3,%ebx
  cmp    %ebx,%ebp
  jne    L111
  mov    %edx,%edi
  sar    $0xf,%di
  shr    $0xe,%di
  lea    (%rdi,%rdx,1),%ebx
  and    $0x3,%ebx
  sub    %edi,%ebx
  mov    $0x17,%edi
  cmp    $0x1,%bx
  je     L111
  jmp    L182
L1963:
  mov    $0x11,%edi
  test   $0x3,%dl
  jne    L182
  lea    0x1(%rbx),%edi
  cmp    %edi,%ebp
  jne    L2968
  jmp    L1354
L2294:
  mov    $0x12,%edi
  test   $0x3,%dl
  je     L1354
  jmp    L182
L623:
  test   $0x3,%dl
  je     L1354
  mov    $0x13,%edi
  cmp    $0x8,%dx
  jle    L1354
  jmp    L182
L1053:
  mov    %edx,%r13d
  sar    $0xf,%r13w
  shr    $0xe,%r13w
  lea    0x0(%r13,%rdx,1),%edi
  and    $0x3,%edi
  sub    %r13d,%edi
  cmp    $0x1,%di
  je     L181
  mov    $0x15,%edi
  test   %r12b,%r12b
  je     L181
  jmp    L182
L448:
  mov    %edx,%edi
  sar    $0xf,%di
  shr    $0xe,%di
  lea    (%rdi,%rdx,1),%ebx
  and    $0x3,%ebx
  sub    %edi,%ebx
  mov    $0x16,%edi
  cmp    $0x1,%bx
  je     L111
  jmp    L182
L3000:
  movswl %cx,%ebx
  movswl %r10w,%ebp
  lea    0x4(%rbx),%edi
  cmp    %ebp,%edi
  je     L1846
  lea    0x5(%rbx),%edi
  cmp    %edi,%ebp
  je     L1630
  lea    0x1(%rbx),%edi
  cmp    %edi,%ebp
  je     L212
L238:
  lea    -0x3(%rbx),%edi
  cmp    %edi,%ebp
  je     L403
L836:
  cmp    $0x8,%cx
  setg   %r12b
  lea    -0x4(%rbx),%edi
  cmp    %ebp,%edi
  jne    L757
  test   %r12b,%r12b
  jne    L2102
L757:
  lea    -0x5(%rbx),%edi
  cmp    %edi,%ebp
  je     L2437
L1485:
  lea    -0x1(%rbx),%edi
  cmp    %edi,%ebp
  je     L150
  add    $0x3,%ebx
  cmp    %ebx,%ebp
  jne    L111
  mov    %ecx,%edi
  sar    $0xf,%di
  shr    $0xe,%di
  lea    (%rdi,%rcx,1),%ebx
  and    $0x3,%ebx
  sub    %edi,%ebx
  mov    $0x1f,%edi
  cmp    $0x1,%bx
  je     L111
  jmp    L182
L1630:
  mov    $0x19,%edi
  test   $0x3,%cl
  jne    L182
  lea    0x1(%rbx),%edi
  cmp    %edi,%ebp
  jne    L238
  jmp    L836
L212:
  mov    $0x1a,%edi
  test   $0x3,%cl
  je     L836
  jmp    L182
L403:
  test   $0x3,%cl
  je     L836
  mov    $0x1b,%edi
  cmp    $0x8,%cx
  jle    L836
  jmp    L182
L2437:
  mov    %ecx,%r13d
  sar    $0xf,%r13w
  shr    $0xe,%r13w
  lea    0x0(%r13,%rcx,1),%edi
  and    $0x3,%edi
  sub    %r13d,%edi
  cmp    $0x1,%di
  je     L1485
  mov    $0x1d,%edi
  test   %r12b,%r12b
  je     L1485
  jmp    L182
L150:
  mov    %ecx,%edi
  sar    $0xf,%di
  shr    $0xe,%di
  lea    (%rdi,%rcx,1),%ebx
  and    $0x3,%ebx
  sub    %edi,%ebx
  mov    $0x1e,%edi
  cmp    $0x1,%bx
  je     L111
  jmp    L182
L511:
  cmp    $0x12,%dx
  sete   %r8b
  movzbl -0x8(%rsp),%ebp
  and    %r8b,%bpl
  je     L303
  cmp    $0x16,%r11w
  setne  %al
  mov    $0x10,%edi
  and    %r15b,%al
  mov    %eax,%ebx
  jne    L182
  cmp    $0x14,%dx
  sete   %dl
L99:
  cmpb   $0x0,-0x8(%rsp)
  je     L209
  test   %sil,%sil
  je     L209
  cmp    $0x16,%r11w
  je     L361
  mov    $0x11,%edi
  test   %r15b,%r15b
  jne    L182
L361:
  movzbl -0x5(%rsp),%eax
  and    %bl,%al
  je     L2729
  cmp    $0x18,%r11w
  je     L962
  mov    $0x11,%edi
  test   %r10b,%r10b
  jne    L182
L962:
  cmpb   $0x0,-0x8(%rsp)
  je     L2810
  test   %al,%al
  je     L2810
  cmp    $0x16,%r11w
  je     L2823
  test   %r15b,%r15b
  jne    L1714
L2823:
  cmp    $0x11,%cx
  sete   %sil
  cmpb   $0x0,-0xa(%rsp)
  je     L1105
  test   %sil,%sil
  je     L1105
  cmp    $0x15,%r11w
  setne  %dl
  mov    $0x18,%edi
  and    %r13b,%dl
  jne    L182
  cmp    $0x13,%cx
  sete   %al
L189:
  cmp    $0x14,%cx
  sete   %cl
  movzbl -0x5(%rsp),%edi
  and    %cl,%dil
  je     L2430
  cmp    $0x18,%r11w
  je     L2816
  test   %r9b,%r9b
  jne    L1439
L2816:
  mov    %edi,%ecx
  jmp    L1522
L303:
  cmp    $0x13,%dx
  sete   %al
  movzbl -0x6(%rsp),%ebx
  and    %al,%bl
  je     L371
  cmp    $0x17,%r11w
  setne  %al
  mov    $0x10,%edi
  and    -0x2(%rsp),%al
  jne    L182
L2543:
  movzbl -0x6(%rsp),%ebp
  and    %r8b,%bpl
  je     L553
  cmp    $0x17,%r11w
  je     L2920
  mov    $0x11,%edi
  cmpb   $0x0,-0x2(%rsp)
  jne    L182
L2920:
  cmpb   $0x0,-0xa(%rsp)
  je     L1870
  test   %bpl,%bpl
  je     L1870
  cmp    $0x15,%r11w
  je     L2171
  test   %r12b,%r12b
  jne    L2362
L2171:
  cmpb   $0x0,-0x6(%rsp)
  je     L2823
  test   %al,%al
  je     L2823
  cmp    $0x17,%r11w
  je     L2823
  cmpb   $0x0,-0x2(%rsp)
  je     L2823
  mov    $0x17,%edi
  jmp    L182
L371:
  mov    %eax,%ebx
  jmp    L1980
L269:
  mov    %r8d,%ebp
  jmp    L99
L209:
  mov    %edx,%eax
  mov    %ebp,%r8d
  jmp    L2543
L553:
  mov    %eax,%edx
  mov    %r8d,%ebp
  jmp    L361
L2729:
  mov    %edx,%eax
  jmp    L2920
L1870:
  mov    %eax,%edx
  mov    %ebx,%eax
  jmp    L962
L2810:
  mov    %edx,%eax
  jmp    L2171
L1105:
  cmp    $0x12,%cx
  sete   %dl
  movzbl -0x8(%rsp),%edi
  and    %dl,%dil
  je     L2583
  cmp    $0x16,%r11w
  setne  %al
  and    -0x4(%rsp),%al
  jne    L1005
  cmp    $0x14,%cx
  sete   %cl
  mov    %edi,%edx
L2430:
  cmpb   $0x0,-0x8(%rsp)
  je     L1522
  test   %sil,%sil
  je     L1522
  cmp    $0x16,%r11w
  je     L1371
  cmpb   $0x0,-0x4(%rsp)
  jne    L1319
L1371:
  movzbl -0x5(%rsp),%esi
  and    %al,%sil
  je     L145
  cmp    $0x18,%r11w
  je     L144
  test   %r9b,%r9b
  jne    L2133
L144:
  mov    %esi,%eax
L2715:
  cmpb   $0x0,-0x8(%rsp)
  je     L1293
  test   %al,%al
  je     L1293
  cmp    $0x16,%r11w
  je     L710
  mov    $0x1f,%edi
  cmpb   $0x0,-0x4(%rsp)
  jne    L182
L710:
  mov    $0xffffffff,%edi
  jmp    L182
L2583:
  cmp    $0x13,%cx
  sete   %al
  movzbl -0x6(%rsp),%edi
  and    %al,%dil
  je     L189
  cmp    $0x17,%r11w
  setne  %cl
  and    -0x3(%rsp),%cl
  jne    L885
  mov    %edi,%eax
L1522:
  movzbl -0x6(%rsp),%esi
  and    %dl,%sil
  je     L1371
  cmp    $0x17,%r11w
  je     L1505
  cmpb   $0x0,-0x3(%rsp)
  jne    L1606
L1505:
  mov    %esi,%edx
L145:
  cmpb   $0x0,-0xa(%rsp)
  je     L2715
  test   %dl,%dl
  je     L2715
  cmp    $0x15,%r11w
  je     L1293
  test   %r13b,%r13b
  jne    L2918
L1293:
  cmpb   $0x0,-0x6(%rsp)
  je     L1979
  test   %cl,%cl
  je     L1979
  cmp    $0x17,%r11w
  je     L1132
  cmpb   $0x0,-0x3(%rsp)
  je     L1132
  mov    $0x1f,%edi
  jmp    L182
L2008:
  mov    $0x4,%edi
  jmp    L182
L286:
  mov    $0x4,%edi
  jmp    L182
L1703:
  mov    $0x8,%edi
L182:
  mov    %edi,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L198:
  mov    $0xc,%edi
  jmp    L182
L2312:
  mov    $0x8,%edi
  jmp    L182
L220:
  mov    $0xc,%edi
  jmp    L182
L1734:
  mov    $0x10,%edi
  jmp    L182
L412:
  mov    $0x14,%edi
  jmp    L182
L1846:
  mov    $0x18,%edi
  jmp    L182
L2102:
  mov    $0x1c,%edi
  jmp    L182
L2362:
  mov    $0x17,%edi
  jmp    L182
L1714:
  mov    $0x17,%edi
  jmp    L182
L1005:
  mov    $0x18,%edi
  jmp    L182
L885:
  mov    $0x18,%edi
  jmp    L182
L1439:
  mov    $0x18,%edi
  jmp    L182
L1319:
  mov    $0x19,%edi
  jmp    L182
L1606:
  mov    $0x19,%edi
  jmp    L182
L2133:
  mov    $0x19,%edi
  jmp    L182
L2918:
  mov    $0x1f,%edi
  jmp    L182
L1979:
  mov    $0xffffffff,%edi
  jmp    L182
L1132:
  mov    $0xffffffff,%edi
  jmp    L182
```

assistant: ```c
short get_first_winning_move(short a, short b, short c, short d, short e, short f, short g, short h) {
  if (a != 0 && e == 0 && f == 0 && g != 0 && h == 0) {
    if (a + 4 == g)
      return 0;
    if (a + 5 == g && a % 4 != 0)
      return 1;
    if (a + 1 == g && a % 4 != 0)
      return 2;
    if (a - 3 == g && a % 4 != 0 && 8 < a)
      return 3;
    if (a - 4 == g && 8 < a)
      return 4;
    if (a - 5 == g && a % 4 != 1 && 8 < a)
      return 5;
    if (a - 1 == g && a % 4 != 1)
      return 6;
    if (a + 3 == g && a % 4 != 1)
      return 7;
  }
  if (a != 0 && e == 0 && f == 0 && g == 0 && h != 0) {
    if (a + 4 == h)
      return 0;
    if (a + 5 == h && a % 4 != 0)
      return 1;
    if (a + 1 == h && a % 4 != 0)
      return 2;
    if (a - 3 == h && a % 4 != 0 && 8 < a)
      return 3;
    if (a - 4 == h && 8 < a)
      return 4;
    if (a - 5 == h && a % 4 != 1 && 8 < a)
      return 5;
    if (a - 1 == h && a % 4 != 1)
      return 6;
    if (a + 3 == h && a % 4 != 1)
      return 7;
  }
  if (b != 0 && e != 0 && f == 0 && g == 0 && h == 0) {
    if (b + 4 == e)
      return 8;
    if (b + 5 == e && b % 4 != 0)
      return 9;
    if (b + 1 == e && b % 4 != 0)
      return 10;
    if (b - 3 == e && b % 4 != 0 && 8 < b)
      return 11;
    if (b - 4 == e && 8 < b)
      return 12;
    if (b - 5 == e && b % 4 != 1 && 8 < b)
      return 13;
    if (b - 1 == e && b % 4 != 1)
      return 14;
    if (b + 3 == e && b % 4 != 1)
      return 15;
  }
  if (b != 0 && e == 0 && f == 0 && g == 0 && h != 0) {
    if (b + 4 == h)
      return 8;
    if (b + 5 == h && b % 4 != 0)
      return 9;
    if (b + 1 == h && b % 4 != 0)
      return 10;
    if (b - 3 == h && b % 4 != 0 && 8 < b)
      return 11;
    if (b - 4 == h && 8 < b)
      return 12;
    if (b - 5 == h && b % 4 != 1 && 8 < b)
      return 13;
    if (b - 1 == h && b % 4 != 1)
      return 14;
    if (b + 3 == h && b % 4 != 1)
      return 15;
  }
  if (c != 0 && e == 0 && f != 0 && g == 0 && h == 0) {
    if (c + 4 == f)
      return 16;
    if (c + 5 == f && c % 4 != 0)
      return 17;
    if (c + 1 == f && c % 4 != 0)
      return 18;
    if (c - 3 == f && c % 4 != 0 && 8 < c)
      return 19;
    if (c - 4 == f && 8 < c)
      return 20;
    if (c - 5 == f && c % 4 != 1 && 8 < c)
      return 21;
    if (c - 1 == f && c % 4 != 1)
      return 22;
    if (c + 3 == f && c % 4 != 1)
      return 23;
  }
  if (d != 0 && e == 0 && f == 0 && g != 0 && h == 0) {
    if (d + 4 == g)
      return 24;
    if (d + 5 == g && d % 4 != 0)
      return 25;
    if (d + 1 == g && d % 4 != 0)
      return 26;
    if (d - 3 == g && d % 4 != 0 && 8 < d)
      return 27;
    if (d - 4 == g && 8 < d)
      return 28;
    if (d - 5 == g && d % 4 != 1 && 8 < d)
      return 29;
    if (d - 1 == g && d % 4 != 1)
      return 30;
    if (d + 3 == g && d % 4 != 1)
      return 31;
  }
  if ((a == 17 && e != 21 && f != 21) || (a == 18 && e != 22 && f != 22) || (a == 19 && e != 23 && f != 23) || (a == 20 && e != 24 && f != 24))
    return 0;
  if ((a == 17 && e != 22 && f != 22) || (a == 18 && e != 23 && f != 23) || (a == 19 && e != 24 && f != 24))
    return 1;
  if ((a == 18 && e != 21 && f != 21) || (a == 19 && e != 22 && f != 22) || (a == 20 && e != 23 && f != 23))
    return 7;
  if ((b == 17 && f != 21 && g != 21) || (b == 18 && f != 22 && g != 22) || (b == 19 && f != 23 && g != 23) || (b == 20 && f != 24 && g != 24))
    return 8;
  if ((b == 17 && f != 22 && g != 22) || (b == 18 && f != 23 && g != 23) || (b == 19 && f != 24 && g != 24))
    return 9;
  if ((b == 18 && f != 21 && g != 21) || (b == 19 && f != 22 && g != 22) || (b == 20 && f != 23 && g != 23))
    return 15;
  if ((c == 17 && e != 21 && g != 21 && h != 21) || (c == 18 && e != 22 && g != 22 && h != 22) || (c == 19 && e != 23 && g != 23 && h != 23) || (c == 20 && e != 24 && g != 24 && h != 24))
    return 16;
  if ((c == 17 && e != 22 && g != 22 && h != 22) || (c == 18 && e != 23 && g != 23 && h != 23) || (c == 19 && e != 24 && g != 24 && h != 24))
    return 17;
  if ((c == 18 && e != 21 && g != 21 && h != 21) || (c == 19 && e != 22 && g != 22 && h != 22) || (c == 20 && e != 23 && g != 23 && h != 23))
    return 23;
  if ((d == 17 && e != 21 && f != 21 && h != 21) || (d == 18 && e != 22 && f != 22 && h != 22) || (d == 19 && e != 23 && f != 23 && h != 23) || (d == 20 && e != 24 && f != 24 && h != 24))
    return 24;
  if ((d == 17 && e != 22 && f != 22 && h != 22) || (d == 18 && e != 23 && f != 23 && h != 23) || (d == 19 && e != 24 && f != 24 && h != 24))
    return 25;
  if ((d == 18 && e != 21 && f != 21 && h != 21) || (d == 19 && e != 22 && f != 22 && h != 22) || (d == 20 && e != 23 && f != 23 && h != 23))
    return 31;
  return -1;
}
```