user: Translate the below assembly code into C programming language:

```asm
<col221111>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x70,%rsp
  mov    %rdi,-0x58(%rbp)
  mov    %rsi,-0x60(%rbp)
  mov    %edx,-0x64(%rbp)
  mov    %ecx,-0x68(%rbp)
  mov    -0x60(%rbp),%rax
  mov    %rax,-0x20(%rbp)
  mov    -0x64(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x60(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,-0x18(%rbp)
  mov    -0x58(%rbp),%rax
  mov    %rax,-0x10(%rbp)
  mov    -0x58(%rbp),%rax
  add    $0x400,%rax
  mov    %rax,-0x8(%rbp)
  movl   $0x2,-0x44(%rbp)
  jmp    L1015
L30:
  movl   $0x4,-0x40(%rbp)
  jmp    L656
L497:
  movl   $0x0,-0x3c(%rbp)
  jmp    L1396
L832:
  mov    -0x3c(%rbp),%eax
  sar    $0x2,%eax
  shl    $0x3,%eax
  mov    %eax,-0x38(%rbp)
  mov    -0x3c(%rbp),%eax
  add    %eax,%eax
  and    $0x6,%eax
  mov    %eax,-0x34(%rbp)
  cmpl   $0x20,-0x68(%rbp)
  je     L606
  cmpl   $0x20,-0x68(%rbp)
  jg     L792
  cmpl   $0x8,-0x68(%rbp)
  je     L977
  cmpl   $0x10,-0x68(%rbp)
  je     L897
  jmp    L792
L977:
  mov    -0x3c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  mov    %eax,-0x30(%rbp)
  mov    -0x3c(%rbp),%eax
  add    $0x40,%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  mov    %eax,-0x2c(%rbp)
  mov    -0x30(%rbp),%eax
  imul   $0x32,%eax,%edx
  mov    -0x2c(%rbp),%eax
  imul   $0x82,%eax,%eax
  add    %edx,%eax
  sub    $0xffffff80,%eax
  sar    $0x8,%eax
  mov    %eax,-0x28(%rbp)
  mov    -0x38(%rbp),%eax
  lea    0x0(,%rax,8),%edx
  mov    -0x34(%rbp),%eax
  add    %edx,%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x10(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  mov    %eax,-0x24(%rbp)
  mov    -0x24(%rbp),%edx
  mov    -0x30(%rbp),%eax
  add    %edx,%eax
  cmp    $0xff,%eax
  jbe    L595
  mov    -0x24(%rbp),%edx
  mov    -0x30(%rbp),%eax
  add    %edx,%eax
  test   %eax,%eax
  jns    L613
  mov    $0x0,%edx
  jmp    L1188
L613:
  mov    $0xff,%edx
  jmp    L1188
L595:
  mov    -0x24(%rbp),%edx
  mov    -0x30(%rbp),%eax
  add    %eax,%edx
L1188:
  mov    -0x24(%rbp),%eax
  sub    -0x28(%rbp),%eax
  cmp    $0xff,%eax
  jbe    L54
  mov    -0x24(%rbp),%eax
  sub    -0x28(%rbp),%eax
  test   %eax,%eax
  jns    L325
  mov    $0x0,%eax
  jmp    L455
L325:
  mov    $0xff,%eax
  jmp    L455
L54:
  mov    -0x24(%rbp),%eax
  sub    -0x28(%rbp),%eax
L455:
  mov    -0x24(%rbp),%esi
  mov    -0x2c(%rbp),%ecx
  add    %esi,%ecx
  cmp    $0xff,%ecx
  jbe    L600
  mov    -0x24(%rbp),%esi
  mov    -0x2c(%rbp),%ecx
  add    %esi,%ecx
  test   %ecx,%ecx
  jns    L273
  mov    $0x0,%edi
  jmp    L503
L273:
  mov    $0xff,%edi
  jmp    L503
L600:
  mov    -0x24(%rbp),%esi
  mov    -0x2c(%rbp),%ecx
  lea    (%rsi,%rcx,1),%edi
L503:
  mov    $0xff,%ecx
  mov    %eax,%esi
  mov    $0x0,%eax
  call   <store_8@plt>
  mov    %eax,%edx
  mov    -0x3c(%rbp),%eax
  add    %eax,%eax
  movslq %eax,%rcx
  mov    -0x20(%rbp),%rax
  add    %rcx,%rax
  mov    %dl,(%rax)
  mov    -0x38(%rbp),%eax
  lea    0x0(,%rax,8),%edx
  mov    -0x34(%rbp),%eax
  add    %edx,%eax
  cltq
  add    $0x1,%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x10(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  mov    %eax,-0x24(%rbp)
  mov    -0x24(%rbp),%edx
  mov    -0x30(%rbp),%eax
  add    %edx,%eax
  cmp    $0xff,%eax
  jbe    L264
  mov    -0x24(%rbp),%edx
  mov    -0x30(%rbp),%eax
  add    %edx,%eax
  test   %eax,%eax
  jns    L1158
  mov    $0x0,%edx
  jmp    L105
L1158:
  mov    $0xff,%edx
  jmp    L105
L264:
  mov    -0x24(%rbp),%edx
  mov    -0x30(%rbp),%eax
  add    %eax,%edx
L105:
  mov    -0x24(%rbp),%eax
  sub    -0x28(%rbp),%eax
  cmp    $0xff,%eax
  jbe    L410
  mov    -0x24(%rbp),%eax
  sub    -0x28(%rbp),%eax
  test   %eax,%eax
  jns    L524
  mov    $0x0,%eax
  jmp    L1362
L524:
  mov    $0xff,%eax
  jmp    L1362
L410:
  mov    -0x24(%rbp),%eax
  sub    -0x28(%rbp),%eax
L1362:
  mov    -0x24(%rbp),%esi
  mov    -0x2c(%rbp),%ecx
  add    %esi,%ecx
  cmp    $0xff,%ecx
  jbe    L733
  mov    -0x24(%rbp),%esi
  mov    -0x2c(%rbp),%ecx
  add    %esi,%ecx
  test   %ecx,%ecx
  jns    L569
  mov    $0x0,%edi
  jmp    L335
L569:
  mov    $0xff,%edi
  jmp    L335
L733:
  mov    -0x24(%rbp),%esi
  mov    -0x2c(%rbp),%ecx
  lea    (%rsi,%rcx,1),%edi
L335:
  mov    $0x0,%ecx
  mov    %eax,%esi
  mov    $0x0,%eax
  call   <store_8@plt>
  mov    %eax,%edx
  mov    -0x3c(%rbp),%eax
  add    %eax,%eax
  cltq
  lea    0x1(%rax),%rcx
  mov    -0x20(%rbp),%rax
  add    %rcx,%rax
  mov    %dl,(%rax)
  mov    -0x38(%rbp),%eax
  add    $0x1,%eax
  lea    0x0(,%rax,8),%edx
  mov    -0x34(%rbp),%eax
  add    %edx,%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x10(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  mov    %eax,-0x24(%rbp)
  mov    -0x24(%rbp),%edx
  mov    -0x30(%rbp),%eax
  add    %edx,%eax
  cmp    $0xff,%eax
  jbe    L742
  mov    -0x24(%rbp),%edx
  mov    -0x30(%rbp),%eax
  add    %edx,%eax
  test   %eax,%eax
  jns    L517
  mov    $0x0,%edx
  jmp    L84
L517:
  mov    $0xff,%edx
  jmp    L84
L742:
  mov    -0x24(%rbp),%edx
  mov    -0x30(%rbp),%eax
  add    %eax,%edx
L84:
  mov    -0x24(%rbp),%eax
  sub    -0x28(%rbp),%eax
  cmp    $0xff,%eax
  jbe    L1120
  mov    -0x24(%rbp),%eax
  sub    -0x28(%rbp),%eax
  test   %eax,%eax
  jns    L679
  mov    $0x0,%eax
  jmp    L527
L679:
  mov    $0xff,%eax
  jmp    L527
L1120:
  mov    -0x24(%rbp),%eax
  sub    -0x28(%rbp),%eax
L527:
  mov    -0x24(%rbp),%esi
  mov    -0x2c(%rbp),%ecx
  add    %esi,%ecx
  cmp    $0xff,%ecx
  jbe    L910
  mov    -0x24(%rbp),%esi
  mov    -0x2c(%rbp),%ecx
  add    %esi,%ecx
  test   %ecx,%ecx
  jns    L828
  mov    $0x0,%edi
  jmp    L435
L828:
  mov    $0xff,%edi
  jmp    L435
L910:
  mov    -0x24(%rbp),%esi
  mov    -0x2c(%rbp),%ecx
  lea    (%rsi,%rcx,1),%edi
L435:
  mov    $0x55,%ecx
  mov    %eax,%esi
  mov    $0x0,%eax
  call   <store_8@plt>
  mov    %eax,%edx
  mov    -0x3c(%rbp),%eax
  add    %eax,%eax
  movslq %eax,%rcx
  mov    -0x18(%rbp),%rax
  add    %rcx,%rax
  mov    %dl,(%rax)
  mov    -0x38(%rbp),%eax
  add    $0x1,%eax
  lea    0x0(,%rax,8),%edx
  mov    -0x34(%rbp),%eax
  add    %edx,%eax
  cltq
  add    $0x1,%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x10(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  mov    %eax,-0x24(%rbp)
  mov    -0x24(%rbp),%edx
  mov    -0x30(%rbp),%eax
  add    %edx,%eax
  cmp    $0xff,%eax
  jbe    L813
  mov    -0x24(%rbp),%edx
  mov    -0x30(%rbp),%eax
  add    %edx,%eax
  test   %eax,%eax
  jns    L1432
  mov    $0x0,%edx
  jmp    L1228
L1432:
  mov    $0xff,%edx
  jmp    L1228
L813:
  mov    -0x24(%rbp),%edx
  mov    -0x30(%rbp),%eax
  add    %eax,%edx
L1228:
  mov    -0x24(%rbp),%eax
  sub    -0x28(%rbp),%eax
  cmp    $0xff,%eax
  jbe    L322
  mov    -0x24(%rbp),%eax
  sub    -0x28(%rbp),%eax
  test   %eax,%eax
  jns    L1041
  mov    $0x0,%eax
  jmp    L284
L1041:
  mov    $0xff,%eax
  jmp    L284
L322:
  mov    -0x24(%rbp),%eax
  sub    -0x28(%rbp),%eax
L284:
  mov    -0x24(%rbp),%esi
  mov    -0x2c(%rbp),%ecx
  add    %esi,%ecx
  cmp    $0xff,%ecx
  jbe    L822
  mov    -0x24(%rbp),%esi
  mov    -0x2c(%rbp),%ecx
  add    %esi,%ecx
  test   %ecx,%ecx
  jns    L638
  mov    $0x0,%edi
  jmp    L1190
L638:
  mov    $0xff,%edi
  jmp    L1190
L822:
  mov    -0x24(%rbp),%esi
  mov    -0x2c(%rbp),%ecx
  lea    (%rsi,%rcx,1),%edi
L1190:
  mov    $0xaa,%ecx
  mov    %eax,%esi
  mov    $0x0,%eax
  call   <store_8@plt>
  mov    %eax,%edx
  mov    -0x3c(%rbp),%eax
  add    %eax,%eax
  cltq
  lea    0x1(%rax),%rcx
  mov    -0x18(%rbp),%rax
  add    %rcx,%rax
  mov    %dl,(%rax)
  jmp    L792
L897:
  mov    -0x3c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  mov    %eax,-0x30(%rbp)
  mov    -0x3c(%rbp),%eax
  add    $0x40,%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  mov    %eax,-0x2c(%rbp)
  mov    -0x30(%rbp),%eax
  imul   $0x32,%eax,%edx
  mov    -0x2c(%rbp),%eax
  imul   $0x82,%eax,%eax
  add    %edx,%eax
  sub    $0xffffff80,%eax
  sar    $0x8,%eax
  mov    %eax,-0x28(%rbp)
  mov    -0x38(%rbp),%eax
  lea    0x0(,%rax,8),%edx
  mov    -0x34(%rbp),%eax
  add    %edx,%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x10(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  mov    %eax,-0x24(%rbp)
  mov    -0x24(%rbp),%edx
  mov    -0x30(%rbp),%eax
  add    %edx,%eax
  cmp    $0xff,%eax
  jbe    L80
  mov    -0x24(%rbp),%edx
  mov    -0x30(%rbp),%eax
  add    %edx,%eax
  test   %eax,%eax
  jns    L767
  mov    $0x0,%edx
  jmp    L689
L767:
  mov    $0xff,%edx
  jmp    L689
L80:
  mov    -0x24(%rbp),%edx
  mov    -0x30(%rbp),%eax
  add    %eax,%edx
L689:
  mov    -0x24(%rbp),%eax
  sub    -0x28(%rbp),%eax
  cmp    $0xff,%eax
  jbe    L587
  mov    -0x24(%rbp),%eax
  sub    -0x28(%rbp),%eax
  test   %eax,%eax
  jns    L818
  mov    $0x0,%eax
  jmp    L1340
L818:
  mov    $0xff,%eax
  jmp    L1340
L587:
  mov    -0x24(%rbp),%eax
  sub    -0x28(%rbp),%eax
L1340:
  mov    -0x24(%rbp),%esi
  mov    -0x2c(%rbp),%ecx
  add    %esi,%ecx
  cmp    $0xff,%ecx
  jbe    L596
  mov    -0x24(%rbp),%esi
  mov    -0x2c(%rbp),%ecx
  add    %esi,%ecx
  test   %ecx,%ecx
  jns    L59
  mov    $0x0,%edi
  jmp    L750
L59:
  mov    $0xff,%edi
  jmp    L750
L596:
  mov    -0x24(%rbp),%esi
  mov    -0x2c(%rbp),%ecx
  lea    (%rsi,%rcx,1),%edi
L750:
  mov    $0xff,%ecx
  mov    %eax,%esi
  mov    $0x0,%eax
  call   <store_16@plt>
  mov    -0x3c(%rbp),%edx
  shl    $0x2,%edx
  movslq %edx,%rcx
  mov    -0x20(%rbp),%rdx
  add    %rcx,%rdx
  mov    %ax,(%rdx)
  mov    -0x38(%rbp),%eax
  lea    0x0(,%rax,8),%edx
  mov    -0x34(%rbp),%eax
  add    %edx,%eax
  cltq
  add    $0x1,%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x10(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  mov    %eax,-0x24(%rbp)
  mov    -0x24(%rbp),%edx
  mov    -0x30(%rbp),%eax
  add    %edx,%eax
  cmp    $0xff,%eax
  jbe    L795
  mov    -0x24(%rbp),%edx
  mov    -0x30(%rbp),%eax
  add    %edx,%eax
  test   %eax,%eax
  jns    L1347
  mov    $0x0,%edx
  jmp    L655
L1347:
  mov    $0xff,%edx
  jmp    L655
L795:
  mov    -0x24(%rbp),%edx
  mov    -0x30(%rbp),%eax
  add    %eax,%edx
L655:
  mov    -0x24(%rbp),%eax
  sub    -0x28(%rbp),%eax
  cmp    $0xff,%eax
  jbe    L237
  mov    -0x24(%rbp),%eax
  sub    -0x28(%rbp),%eax
  test   %eax,%eax
  jns    L267
  mov    $0x0,%eax
  jmp    L530
L267:
  mov    $0xff,%eax
  jmp    L530
L237:
  mov    -0x24(%rbp),%eax
  sub    -0x28(%rbp),%eax
L530:
  mov    -0x24(%rbp),%esi
  mov    -0x2c(%rbp),%ecx
  add    %esi,%ecx
  cmp    $0xff,%ecx
  jbe    L473
  mov    -0x24(%rbp),%esi
  mov    -0x2c(%rbp),%ecx
  add    %esi,%ecx
  test   %ecx,%ecx
  jns    L760
  mov    $0x0,%edi
  jmp    L1122
L760:
  mov    $0xff,%edi
  jmp    L1122
L473:
  mov    -0x24(%rbp),%esi
  mov    -0x2c(%rbp),%ecx
  lea    (%rsi,%rcx,1),%edi
L1122:
  mov    $0x0,%ecx
  mov    %eax,%esi
  mov    $0x0,%eax
  call   <store_16@plt>
  mov    -0x3c(%rbp),%edx
  add    %edx,%edx
  add    $0x1,%edx
  add    %edx,%edx
  movslq %edx,%rcx
  mov    -0x20(%rbp),%rdx
  add    %rcx,%rdx
  mov    %ax,(%rdx)
  mov    -0x38(%rbp),%eax
  add    $0x1,%eax
  lea    0x0(,%rax,8),%edx
  mov    -0x34(%rbp),%eax
  add    %edx,%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x10(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  mov    %eax,-0x24(%rbp)
  mov    -0x24(%rbp),%edx
  mov    -0x30(%rbp),%eax
  add    %edx,%eax
  cmp    $0xff,%eax
  jbe    L711
  mov    -0x24(%rbp),%edx
  mov    -0x30(%rbp),%eax
  add    %edx,%eax
  test   %eax,%eax
  jns    L827
  mov    $0x0,%edx
  jmp    L1136
L827:
  mov    $0xff,%edx
  jmp    L1136
L711:
  mov    -0x24(%rbp),%edx
  mov    -0x30(%rbp),%eax
  add    %eax,%edx
L1136:
  mov    -0x24(%rbp),%eax
  sub    -0x28(%rbp),%eax
  cmp    $0xff,%eax
  jbe    L784
  mov    -0x24(%rbp),%eax
  sub    -0x28(%rbp),%eax
  test   %eax,%eax
  jns    L1308
  mov    $0x0,%eax
  jmp    L816
L1308:
  mov    $0xff,%eax
  jmp    L816
L784:
  mov    -0x24(%rbp),%eax
  sub    -0x28(%rbp),%eax
L816:
  mov    -0x24(%rbp),%esi
  mov    -0x2c(%rbp),%ecx
  add    %esi,%ecx
  cmp    $0xff,%ecx
  jbe    L918
  mov    -0x24(%rbp),%esi
  mov    -0x2c(%rbp),%ecx
  add    %esi,%ecx
  test   %ecx,%ecx
  jns    L239
  mov    $0x0,%edi
  jmp    L428
L239:
  mov    $0xff,%edi
  jmp    L428
L918:
  mov    -0x24(%rbp),%esi
  mov    -0x2c(%rbp),%ecx
  lea    (%rsi,%rcx,1),%edi
L428:
  mov    $0x55,%ecx
  mov    %eax,%esi
  mov    $0x0,%eax
  call   <store_16@plt>
  mov    -0x3c(%rbp),%edx
  shl    $0x2,%edx
  movslq %edx,%rcx
  mov    -0x18(%rbp),%rdx
  add    %rcx,%rdx
  mov    %ax,(%rdx)
  mov    -0x38(%rbp),%eax
  add    $0x1,%eax
  lea    0x0(,%rax,8),%edx
  mov    -0x34(%rbp),%eax
  add    %edx,%eax
  cltq
  add    $0x1,%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x10(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  mov    %eax,-0x24(%rbp)
  mov    -0x24(%rbp),%edx
  mov    -0x30(%rbp),%eax
  add    %edx,%eax
  cmp    $0xff,%eax
  jbe    L1140
  mov    -0x24(%rbp),%edx
  mov    -0x30(%rbp),%eax
  add    %edx,%eax
  test   %eax,%eax
  jns    L1046
  mov    $0x0,%edx
  jmp    L899
L1046:
  mov    $0xff,%edx
  jmp    L899
L1140:
  mov    -0x24(%rbp),%edx
  mov    -0x30(%rbp),%eax
  add    %eax,%edx
L899:
  mov    -0x24(%rbp),%eax
  sub    -0x28(%rbp),%eax
  cmp    $0xff,%eax
  jbe    L1427
  mov    -0x24(%rbp),%eax
  sub    -0x28(%rbp),%eax
  test   %eax,%eax
  jns    L41
  mov    $0x0,%eax
  jmp    L1013
L41:
  mov    $0xff,%eax
  jmp    L1013
L1427:
  mov    -0x24(%rbp),%eax
  sub    -0x28(%rbp),%eax
L1013:
  mov    -0x24(%rbp),%esi
  mov    -0x2c(%rbp),%ecx
  add    %esi,%ecx
  cmp    $0xff,%ecx
  jbe    L1108
  mov    -0x24(%rbp),%esi
  mov    -0x2c(%rbp),%ecx
  add    %esi,%ecx
  test   %ecx,%ecx
  jns    L309
  mov    $0x0,%edi
  jmp    L829
L309:
  mov    $0xff,%edi
  jmp    L829
L1108:
  mov    -0x24(%rbp),%esi
  mov    -0x2c(%rbp),%ecx
  lea    (%rsi,%rcx,1),%edi
L829:
  mov    $0xaa,%ecx
  mov    %eax,%esi
  mov    $0x0,%eax
  call   <store_16@plt>
  mov    -0x3c(%rbp),%edx
  add    %edx,%edx
  add    $0x1,%edx
  add    %edx,%edx
  movslq %edx,%rcx
  mov    -0x18(%rbp),%rdx
  add    %rcx,%rdx
  mov    %ax,(%rdx)
  jmp    L792
L606:
  mov    -0x3c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  mov    %eax,-0x30(%rbp)
  mov    -0x3c(%rbp),%eax
  add    $0x40,%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  mov    %eax,-0x2c(%rbp)
  mov    -0x30(%rbp),%eax
  imul   $0x32,%eax,%edx
  mov    -0x2c(%rbp),%eax
  imul   $0x82,%eax,%eax
  add    %edx,%eax
  sub    $0xffffff80,%eax
  sar    $0x8,%eax
  mov    %eax,-0x28(%rbp)
  mov    -0x38(%rbp),%eax
  lea    0x0(,%rax,8),%edx
  mov    -0x34(%rbp),%eax
  add    %edx,%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x10(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  mov    %eax,-0x24(%rbp)
  mov    -0x24(%rbp),%eax
  mov    %eax,%esi
  mov    -0x30(%rbp),%eax
  mov    %eax,%ecx
  mov    -0x3c(%rbp),%eax
  shl    $0x3,%eax
  movslq %eax,%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  lea    (%rsi,%rcx,1),%edx
  mov    %dl,(%rax)
  mov    -0x24(%rbp),%edx
  mov    -0x30(%rbp),%eax
  add    %edx,%eax
  cmp    $0xff,%eax
  jbe    L940
  mov    -0x24(%rbp),%edx
  mov    -0x30(%rbp),%eax
  add    %edx,%eax
  test   %eax,%eax
  jns    L250
  mov    $0x0,%edx
  jmp    L452
L250:
  mov    $0xffffffff,%edx
L452:
  mov    -0x3c(%rbp),%eax
  shl    $0x3,%eax
  movslq %eax,%rcx
  mov    -0x20(%rbp),%rax
  add    %rcx,%rax
  mov    %dl,(%rax)
L940:
  mov    -0x24(%rbp),%eax
  mov    %eax,%edx
  mov    -0x28(%rbp),%eax
  mov    %eax,%esi
  mov    -0x3c(%rbp),%eax
  shl    $0x3,%eax
  cltq
  lea    0x1(%rax),%rcx
  mov    -0x20(%rbp),%rax
  add    %rcx,%rax
  sub    %esi,%edx
  mov    %dl,(%rax)
  mov    -0x24(%rbp),%eax
  sub    -0x28(%rbp),%eax
  cmp    $0xff,%eax
  jbe    L1150
  mov    -0x24(%rbp),%eax
  sub    -0x28(%rbp),%eax
  test   %eax,%eax
  jns    L1025
  mov    $0x0,%edx
  jmp    L296
L1025:
  mov    $0xffffffff,%edx
L296:
  mov    -0x3c(%rbp),%eax
  shl    $0x3,%eax
  cltq
  lea    0x1(%rax),%rcx
  mov    -0x20(%rbp),%rax
  add    %rcx,%rax
  mov    %dl,(%rax)
L1150:
  mov    -0x24(%rbp),%eax
  mov    %eax,%esi
  mov    -0x2c(%rbp),%eax
  mov    %eax,%ecx
  mov    -0x3c(%rbp),%eax
  shl    $0x3,%eax
  cltq
  lea    0x2(%rax),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  lea    (%rsi,%rcx,1),%edx
  mov    %dl,(%rax)
  mov    -0x24(%rbp),%edx
  mov    -0x2c(%rbp),%eax
  add    %edx,%eax
  cmp    $0xff,%eax
  jbe    L882
  mov    -0x24(%rbp),%edx
  mov    -0x2c(%rbp),%eax
  add    %edx,%eax
  test   %eax,%eax
  jns    L65
  mov    $0x0,%edx
  jmp    L367
L65:
  mov    $0xffffffff,%edx
L367:
  mov    -0x3c(%rbp),%eax
  shl    $0x3,%eax
  cltq
  lea    0x2(%rax),%rcx
  mov    -0x20(%rbp),%rax
  add    %rcx,%rax
  mov    %dl,(%rax)
L882:
  mov    -0x38(%rbp),%eax
  lea    0x0(,%rax,8),%edx
  mov    -0x34(%rbp),%eax
  add    %edx,%eax
  cltq
  add    $0x1,%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x10(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  mov    %eax,-0x24(%rbp)
  mov    -0x24(%rbp),%eax
  mov    %eax,%esi
  mov    -0x30(%rbp),%eax
  mov    %eax,%ecx
  mov    -0x3c(%rbp),%eax
  add    %eax,%eax
  add    $0x1,%eax
  shl    $0x2,%eax
  movslq %eax,%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  lea    (%rsi,%rcx,1),%edx
  mov    %dl,(%rax)
  mov    -0x24(%rbp),%edx
  mov    -0x30(%rbp),%eax
  add    %edx,%eax
  cmp    $0xff,%eax
  jbe    L63
  mov    -0x24(%rbp),%edx
  mov    -0x30(%rbp),%eax
  add    %edx,%eax
  test   %eax,%eax
  jns    L281
  mov    $0x0,%edx
  jmp    L1176
L281:
  mov    $0xffffffff,%edx
L1176:
  mov    -0x3c(%rbp),%eax
  add    %eax,%eax
  add    $0x1,%eax
  shl    $0x2,%eax
  movslq %eax,%rcx
  mov    -0x20(%rbp),%rax
  add    %rcx,%rax
  mov    %dl,(%rax)
L63:
  mov    -0x24(%rbp),%eax
  mov    %eax,%edx
  mov    -0x28(%rbp),%eax
  mov    %eax,%esi
  mov    -0x3c(%rbp),%eax
  add    %eax,%eax
  add    $0x1,%eax
  shl    $0x2,%eax
  cltq
  lea    0x1(%rax),%rcx
  mov    -0x20(%rbp),%rax
  add    %rcx,%rax
  sub    %esi,%edx
  mov    %dl,(%rax)
  mov    -0x24(%rbp),%eax
  sub    -0x28(%rbp),%eax
  cmp    $0xff,%eax
  jbe    L646
  mov    -0x24(%rbp),%eax
  sub    -0x28(%rbp),%eax
  test   %eax,%eax
  jns    L210
  mov    $0x0,%edx
  jmp    L1397
L210:
  mov    $0xffffffff,%edx
L1397:
  mov    -0x3c(%rbp),%eax
  add    %eax,%eax
  add    $0x1,%eax
  shl    $0x2,%eax
  cltq
  lea    0x1(%rax),%rcx
  mov    -0x20(%rbp),%rax
  add    %rcx,%rax
  mov    %dl,(%rax)
L646:
  mov    -0x24(%rbp),%eax
  mov    %eax,%esi
  mov    -0x2c(%rbp),%eax
  mov    %eax,%ecx
  mov    -0x3c(%rbp),%eax
  add    %eax,%eax
  add    $0x1,%eax
  shl    $0x2,%eax
  cltq
  lea    0x2(%rax),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  lea    (%rsi,%rcx,1),%edx
  mov    %dl,(%rax)
  mov    -0x24(%rbp),%edx
  mov    -0x2c(%rbp),%eax
  add    %edx,%eax
  cmp    $0xff,%eax
  jbe    L1045
  mov    -0x24(%rbp),%edx
  mov    -0x2c(%rbp),%eax
  add    %edx,%eax
  test   %eax,%eax
  jns    L462
  mov    $0x0,%edx
  jmp    L459
L462:
  mov    $0xffffffff,%edx
L459:
  mov    -0x3c(%rbp),%eax
  add    %eax,%eax
  add    $0x1,%eax
  shl    $0x2,%eax
  cltq
  lea    0x2(%rax),%rcx
  mov    -0x20(%rbp),%rax
  add    %rcx,%rax
  mov    %dl,(%rax)
L1045:
  mov    -0x38(%rbp),%eax
  add    $0x1,%eax
  lea    0x0(,%rax,8),%edx
  mov    -0x34(%rbp),%eax
  add    %edx,%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x10(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  mov    %eax,-0x24(%rbp)
  mov    -0x24(%rbp),%eax
  mov    %eax,%esi
  mov    -0x30(%rbp),%eax
  mov    %eax,%ecx
  mov    -0x3c(%rbp),%eax
  shl    $0x3,%eax
  movslq %eax,%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  lea    (%rsi,%rcx,1),%edx
  mov    %dl,(%rax)
  mov    -0x24(%rbp),%edx
  mov    -0x30(%rbp),%eax
  add    %edx,%eax
  cmp    $0xff,%eax
  jbe    L870
  mov    -0x24(%rbp),%edx
  mov    -0x30(%rbp),%eax
  add    %edx,%eax
  test   %eax,%eax
  jns    L243
  mov    $0x0,%edx
  jmp    L533
L243:
  mov    $0xffffffff,%edx
L533:
  mov    -0x3c(%rbp),%eax
  shl    $0x3,%eax
  movslq %eax,%rcx
  mov    -0x18(%rbp),%rax
  add    %rcx,%rax
  mov    %dl,(%rax)
L870:
  mov    -0x24(%rbp),%eax
  mov    %eax,%edx
  mov    -0x28(%rbp),%eax
  mov    %eax,%esi
  mov    -0x3c(%rbp),%eax
  shl    $0x3,%eax
  cltq
  lea    0x1(%rax),%rcx
  mov    -0x18(%rbp),%rax
  add    %rcx,%rax
  sub    %esi,%edx
  mov    %dl,(%rax)
  mov    -0x24(%rbp),%eax
  sub    -0x28(%rbp),%eax
  cmp    $0xff,%eax
  jbe    L1227
  mov    -0x24(%rbp),%eax
  sub    -0x28(%rbp),%eax
  test   %eax,%eax
  jns    L1209
  mov    $0x0,%edx
  jmp    L384
L1209:
  mov    $0xffffffff,%edx
L384:
  mov    -0x3c(%rbp),%eax
  shl    $0x3,%eax
  cltq
  lea    0x1(%rax),%rcx
  mov    -0x18(%rbp),%rax
  add    %rcx,%rax
  mov    %dl,(%rax)
L1227:
  mov    -0x24(%rbp),%eax
  mov    %eax,%esi
  mov    -0x2c(%rbp),%eax
  mov    %eax,%ecx
  mov    -0x3c(%rbp),%eax
  shl    $0x3,%eax
  cltq
  lea    0x2(%rax),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  lea    (%rsi,%rcx,1),%edx
  mov    %dl,(%rax)
  mov    -0x24(%rbp),%edx
  mov    -0x2c(%rbp),%eax
  add    %edx,%eax
  cmp    $0xff,%eax
  jbe    L328
  mov    -0x24(%rbp),%edx
  mov    -0x2c(%rbp),%eax
  add    %edx,%eax
  test   %eax,%eax
  jns    L1101
  mov    $0x0,%edx
  jmp    L824
L1101:
  mov    $0xffffffff,%edx
L824:
  mov    -0x3c(%rbp),%eax
  shl    $0x3,%eax
  cltq
  lea    0x2(%rax),%rcx
  mov    -0x18(%rbp),%rax
  add    %rcx,%rax
  mov    %dl,(%rax)
L328:
  mov    -0x38(%rbp),%eax
  add    $0x1,%eax
  lea    0x0(,%rax,8),%edx
  mov    -0x34(%rbp),%eax
  add    %edx,%eax
  cltq
  add    $0x1,%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x10(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  mov    %eax,-0x24(%rbp)
  mov    -0x24(%rbp),%eax
  mov    %eax,%esi
  mov    -0x30(%rbp),%eax
  mov    %eax,%ecx
  mov    -0x3c(%rbp),%eax
  add    %eax,%eax
  add    $0x1,%eax
  shl    $0x2,%eax
  movslq %eax,%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  lea    (%rsi,%rcx,1),%edx
  mov    %dl,(%rax)
  mov    -0x24(%rbp),%edx
  mov    -0x30(%rbp),%eax
  add    %edx,%eax
  cmp    $0xff,%eax
  jbe    L932
  mov    -0x24(%rbp),%edx
  mov    -0x30(%rbp),%eax
  add    %edx,%eax
  test   %eax,%eax
  jns    L855
  mov    $0x0,%edx
  jmp    L371
L855:
  mov    $0xffffffff,%edx
L371:
  mov    -0x3c(%rbp),%eax
  add    %eax,%eax
  add    $0x1,%eax
  shl    $0x2,%eax
  movslq %eax,%rcx
  mov    -0x18(%rbp),%rax
  add    %rcx,%rax
  mov    %dl,(%rax)
L932:
  mov    -0x24(%rbp),%eax
  mov    %eax,%edx
  mov    -0x28(%rbp),%eax
  mov    %eax,%esi
  mov    -0x3c(%rbp),%eax
  add    %eax,%eax
  add    $0x1,%eax
  shl    $0x2,%eax
  cltq
  lea    0x1(%rax),%rcx
  mov    -0x18(%rbp),%rax
  add    %rcx,%rax
  sub    %esi,%edx
  mov    %dl,(%rax)
  mov    -0x24(%rbp),%eax
  sub    -0x28(%rbp),%eax
  cmp    $0xff,%eax
  jbe    L629
  mov    -0x24(%rbp),%eax
  sub    -0x28(%rbp),%eax
  test   %eax,%eax
  jns    L934
  mov    $0x0,%edx
  jmp    L1409
L934:
  mov    $0xffffffff,%edx
L1409:
  mov    -0x3c(%rbp),%eax
  add    %eax,%eax
  add    $0x1,%eax
  shl    $0x2,%eax
  cltq
  lea    0x1(%rax),%rcx
  mov    -0x18(%rbp),%rax
  add    %rcx,%rax
  mov    %dl,(%rax)
L629:
  mov    -0x24(%rbp),%eax
  mov    %eax,%esi
  mov    -0x2c(%rbp),%eax
  mov    %eax,%ecx
  mov    -0x3c(%rbp),%eax
  add    %eax,%eax
  add    $0x1,%eax
  shl    $0x2,%eax
  cltq
  lea    0x2(%rax),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  lea    (%rsi,%rcx,1),%edx
  mov    %dl,(%rax)
  mov    -0x24(%rbp),%edx
  mov    -0x2c(%rbp),%eax
  add    %edx,%eax
  cmp    $0xff,%eax
  jbe    L953
  mov    -0x24(%rbp),%edx
  mov    -0x2c(%rbp),%eax
  add    %edx,%eax
  test   %eax,%eax
  jns    L702
  mov    $0x0,%edx
  jmp    L631
L702:
  mov    $0xffffffff,%edx
L631:
  mov    -0x3c(%rbp),%eax
  add    %eax,%eax
  add    $0x1,%eax
  shl    $0x2,%eax
  cltq
  lea    0x2(%rax),%rcx
  mov    -0x18(%rbp),%rax
  add    %rcx,%rax
  mov    %dl,(%rax)
L953:
  nop
L792:
  addl   $0x1,-0x3c(%rbp)
L1396:
  cmpl   $0x7,-0x3c(%rbp)
  jle    L832
  addq   $0x20,-0x8(%rbp)
  addq   $0x40,-0x10(%rbp)
  mov    -0x64(%rbp),%eax
  add    %eax,%eax
  cltq
  add    %rax,-0x20(%rbp)
  mov    -0x64(%rbp),%eax
  add    %eax,%eax
  cltq
  add    %rax,-0x18(%rbp)
  subl   $0x1,-0x40(%rbp)
L656:
  cmpl   $0x0,-0x40(%rbp)
  jg     L497
  addq   $0x100,-0x10(%rbp)
  subl   $0x1,-0x44(%rbp)
L1015:
  cmpl   $0x0,-0x44(%rbp)
  jg     L30
  nop
  nop
  leave
  ret
```

assistant: ```c
void col221111(int *out, unsigned char *pic, int width, int bits) {
  int i, j, k, k_4, k_3;
  unsigned char *pic0, *pic1;
  int *outy, *outc;
  int cr, cg, cb, y;
  pic0 = pic;
  pic1 = pic + width;
  outy = out;
  outc = out + 64 * 4;
  for (i = 2; i > 0; i--) {
    for (j = 4; j > 0; j--) {
      for (k = 0; k < 8; k++) {
        k_4 = (k >> 2) << 3;
        k_3 = (k & 3) << 1;
        switch (bits) {
        case 8:
          ((cb = outc[0 + k], cr = outc[64 + k], cg = (50 * cb + 130 * cr + 128) >> 8), (y = outy[(k_4 + 0) * 8 + k_3 + 0], pic0[(k * 2 + 0)] = store_8(((unsigned int)(y + cr) >= 256 ? ((y + cr) < 0 ? 0 : 255) : (y + cr)), ((unsigned int)(y - cg) >= 256 ? ((y - cg) < 0 ? 0 : 255) : (y - cg)), ((unsigned int)(y + cb) >= 256 ? ((y + cb) < 0 ? 0 : 255) : (y + cb)), 3 * 0x55)), (y = outy[(k_4 + 0) * 8 + k_3 + 1], pic0[(k * 2 + 1)] = store_8(((unsigned int)(y + cr) >= 256 ? ((y + cr) < 0 ? 0 : 255) : (y + cr)), ((unsigned int)(y - cg) >= 256 ? ((y - cg) < 0 ? 0 : 255) : (y - cg)), ((unsigned int)(y + cb) >= 256 ? ((y + cb) < 0 ? 0 : 255) : (y + cb)), 0 * 0x55)), (y = outy[(k_4 + 1) * 8 + k_3 + 0], pic1[(k * 2 + 0)] = store_8(((unsigned int)(y + cr) >= 256 ? ((y + cr) < 0 ? 0 : 255) : (y + cr)), ((unsigned int)(y - cg) >= 256 ? ((y - cg) < 0 ? 0 : 255) : (y - cg)), ((unsigned int)(y + cb) >= 256 ? ((y + cb) < 0 ? 0 : 255) : (y + cb)), 1 * 0x55)), (y = outy[(k_4 + 1) * 8 + k_3 + 1], pic1[(k * 2 + 1)] = store_8(((unsigned int)(y + cr) >= 256 ? ((y + cr) < 0 ? 0 : 255) : (y + cr)), ((unsigned int)(y - cg) >= 256 ? ((y - cg) < 0 ? 0 : 255) : (y - cg)), ((unsigned int)(y + cb) >= 256 ? ((y + cb) < 0 ? 0 : 255) : (y + cb)), 2 * 0x55)));
          break;
        case 16:
          ((cb = outc[0 + k], cr = outc[64 + k], cg = (50 * cb + 130 * cr + 128) >> 8), (y = outy[(k_4 + 0) * 8 + k_3 + 0], *(unsigned short *)(pic0 + (k * 2 + 0) * 2) = store_16(((unsigned int)(y + cr) >= 256 ? ((y + cr) < 0 ? 0 : 255) : (y + cr)), ((unsigned int)(y - cg) >= 256 ? ((y - cg) < 0 ? 0 : 255) : (y - cg)), ((unsigned int)(y + cb) >= 256 ? ((y + cb) < 0 ? 0 : 255) : (y + cb)), 3 * 0x55)), (y = outy[(k_4 + 0) * 8 + k_3 + 1], *(unsigned short *)(pic0 + (k * 2 + 1) * 2) = store_16(((unsigned int)(y + cr) >= 256 ? ((y + cr) < 0 ? 0 : 255) : (y + cr)), ((unsigned int)(y - cg) >= 256 ? ((y - cg) < 0 ? 0 : 255) : (y - cg)), ((unsigned int)(y + cb) >= 256 ? ((y + cb) < 0 ? 0 : 255) : (y + cb)), 0 * 0x55)), (y = outy[(k_4 + 1) * 8 + k_3 + 0], *(unsigned short *)(pic1 + (k * 2 + 0) * 2) = store_16(((unsigned int)(y + cr) >= 256 ? ((y + cr) < 0 ? 0 : 255) : (y + cr)), ((unsigned int)(y - cg) >= 256 ? ((y - cg) < 0 ? 0 : 255) : (y - cg)), ((unsigned int)(y + cb) >= 256 ? ((y + cb) < 0 ? 0 : 255) : (y + cb)), 1 * 0x55)), (y = outy[(k_4 + 1) * 8 + k_3 + 1], *(unsigned short *)(pic1 + (k * 2 + 1) * 2) = store_16(((unsigned int)(y + cr) >= 256 ? ((y + cr) < 0 ? 0 : 255) : (y + cr)), ((unsigned int)(y - cg) >= 256 ? ((y - cg) < 0 ? 0 : 255) : (y - cg)), ((unsigned int)(y + cb) >= 256 ? ((y + cb) < 0 ? 0 : 255) : (y + cb)), 2 * 0x55)));
          break;
        case 32:
          ((cb = outc[0 + k], cr = outc[64 + k], cg = (50 * cb + 130 * cr + 128) >> 8), (y = outy[(k_4 + 0) * 8 + k_3 + 0], ((pic0[(k * 2 + 0) * 4 + 0]) = (y + cb), (unsigned int)(y + cb) >= 256 ? ((pic0[(k * 2 + 0) * 4 + 0]) = (y + cb) < 0 ? 0 : 255) : 0), ((pic0[(k * 2 + 0) * 4 + 1]) = (y - cg), (unsigned int)(y - cg) >= 256 ? ((pic0[(k * 2 + 0) * 4 + 1]) = (y - cg) < 0 ? 0 : 255) : 0), ((pic0[(k * 2 + 0) * 4 + 2]) = (y + cr), (unsigned int)(y + cr) >= 256 ? ((pic0[(k * 2 + 0) * 4 + 2]) = (y + cr) < 0 ? 0 : 255) : 0)), (y = outy[(k_4 + 0) * 8 + k_3 + 1], ((pic0[(k * 2 + 1) * 4 + 0]) = (y + cb), (unsigned int)(y + cb) >= 256 ? ((pic0[(k * 2 + 1) * 4 + 0]) = (y + cb) < 0 ? 0 : 255) : 0), ((pic0[(k * 2 + 1) * 4 + 1]) = (y - cg), (unsigned int)(y - cg) >= 256 ? ((pic0[(k * 2 + 1) * 4 + 1]) = (y - cg) < 0 ? 0 : 255) : 0), ((pic0[(k * 2 + 1) * 4 + 2]) = (y + cr), (unsigned int)(y + cr) >= 256 ? ((pic0[(k * 2 + 1) * 4 + 2]) = (y + cr) < 0 ? 0 : 255) : 0)), (y = outy[(k_4 + 1) * 8 + k_3 + 0], ((pic1[(k * 2 + 0) * 4 + 0]) = (y + cb), (unsigned int)(y + cb) >= 256 ? ((pic1[(k * 2 + 0) * 4 + 0]) = (y + cb) < 0 ? 0 : 255) : 0), ((pic1[(k * 2 + 0) * 4 + 1]) = (y - cg), (unsigned int)(y - cg) >= 256 ? ((pic1[(k * 2 + 0) * 4 + 1]) = (y - cg) < 0 ? 0 : 255) : 0), ((pic1[(k * 2 + 0) * 4 + 2]) = (y + cr), (unsigned int)(y + cr) >= 256 ? ((pic1[(k * 2 + 0) * 4 + 2]) = (y + cr) < 0 ? 0 : 255) : 0)), (y = outy[(k_4 + 1) * 8 + k_3 + 1], ((pic1[(k * 2 + 1) * 4 + 0]) = (y + cb), (unsigned int)(y + cb) >= 256 ? ((pic1[(k * 2 + 1) * 4 + 0]) = (y + cb) < 0 ? 0 : 255) : 0), ((pic1[(k * 2 + 1) * 4 + 1]) = (y - cg), (unsigned int)(y - cg) >= 256 ? ((pic1[(k * 2 + 1) * 4 + 1]) = (y - cg) < 0 ? 0 : 255) : 0), ((pic1[(k * 2 + 1) * 4 + 2]) = (y + cr), (unsigned int)(y + cr) >= 256 ? ((pic1[(k * 2 + 1) * 4 + 2]) = (y + cr) < 0 ? 0 : 255) : 0)));
          break;
        }
      }
      outc += 8;
      outy += 16;
      pic0 += 2 * width;
      pic1 += 2 * width;
    }
    outy += 64 * 2 - 16 * 4;
  }
}
```