user: 下面的汇编指令对应的C源代码是什么:

```asm
<partition_sort>:
  endbr64
  push   %r15
  mov    %rdx,%r15
  mov    %rdi,%r11
  push   %r14
  lea    -0x1(%r15),%eax
  push   %r13
  push   %r12
  mov    %r15,%r12
  push   %rbp
  mov    %rcx,%rbp
  neg    %r12
  push   %rbx
  mov    %r15d,%ebx
  and    $0xfffffff0,%ebx
  sub    $0x208,%rsp
  mov    %fs:0x28,%rdx
  mov    %rdx,0x1f8(%rsp)
  xor    %edx,%edx
  mov    %eax,0x8(%rsp)
  mov    %r15d,%eax
  shr    $0x4,%eax
  mov    %rdi,0xf0(%rsp)
  mov    %r15d,%edi
  sub    $0x1,%eax
  sub    %ebx,%edi
  mov    %esi,0x1c(%rsp)
  add    $0x1,%rax
  mov    %esi,0x70(%rsp)
  shl    $0x4,%rax
  mov    %r15d,0x18(%rsp)
  mov    %rax,0x28(%rsp)
  mov    %ebx,%eax
  mov    %rax,0x48(%rsp)
  lea    -0x4(%r15),%eax
  mov    %eax,0x30(%rsp)
  shr    $0x2,%eax
  lea    0x1(%rax),%ecx
  mov    %eax,0x68(%rsp)
  mov    %ecx,%eax
  mov    %ecx,0xc(%rsp)
  and    $0xfffffffc,%ecx
  shr    $0x2,%eax
  mov    %r15d,0x4(%rsp)
  sub    $0x1,%eax
  mov    %ebx,0x50(%rsp)
  add    $0x1,%rax
  mov    %edi,0x54(%rsp)
  shl    $0x4,%rax
  mov    %ecx,0x34(%rsp)
  mov    %rax,0x40(%rsp)
  mov    %ecx,%eax
  shl    $0x2,%rax
  mov    %edi,0x58(%rsp)
  mov    %rax,0x38(%rsp)
  lea    -0x1(%rdi),%eax
  mov    %eax,0x5c(%rsp)
L1514:
  mov    %edx,0x6c(%rsp)
  nopl   (%rax)
L1372:
  mov    0x1c(%rsp),%ecx
  mov    0x18(%rsp),%edx
  mov    %r11,0x10(%rsp)
  mov    %r11,%rdi
  mov    %ecx,%eax
  sar    %eax
  imul   %edx,%eax
  movslq %eax,%rbx
  sub    %edx,%eax
  and    $0x1,%ecx
  cltq
  lea    (%r11,%rbx,1),%r13
  cmovne %rbx,%rax
  mov    %r13,%rsi
  mov    %rax,0x20(%rsp)
  lea    0x0(%r13,%rax,1),%r14
  call   *%rbp
  mov    0x10(%rsp),%r11
  test   %eax,%eax
  jle    L153
  mov    0x4(%rsp),%ecx
  mov    %ecx,%eax
  or     %r11d,%eax
  test   $0x3,%al
  lea    0x10(%rbx),%rax
  jne    L1604
  test   %rax,%rax
  lea    0x10(%r11),%rsi
  setle  %al
  cmp    %rsi,%r13
  setae  %sil
  or     %sil,%al
  je     L1245
  cmp    $0x4,%ecx
  je     L1245
  cmpl   $0x8,0x30(%rsp)
  jbe    L756
  mov    0x40(%rsp),%rdx
  xor    %eax,%eax
  nopw   0x0(%rax,%rax,1)
L212:
  movdqu (%r11,%rax,1),%xmm0
  movdqu 0x0(%r13,%rax,1),%xmm1
  movups %xmm1,(%r11,%rax,1)
  movups %xmm0,0x0(%r13,%rax,1)
  add    $0x10,%rax
  cmp    %rax,%rdx
  jne    L212
  mov    0x38(%rsp),%rax
  mov    0x34(%rsp),%ecx
  lea    (%r11,%rax,1),%rdi
  lea    0x0(%r13,%rax,1),%rsi
  mov    0x4(%rsp),%eax
  sub    $0x4,%eax
  cmp    %ecx,0xc(%rsp)
  je     L1745
  mov    %ecx,%eax
L891:
  mov    0xc(%rsp),%r8d
  sub    %eax,%r8d
  cmp    %eax,0x68(%rsp)
  je     L1732
  shl    $0x2,%rax
  lea    (%r11,%rax,1),%r9
  add    %rbx,%rax
  add    %r11,%rax
  mov    (%r9),%r10
  movq   (%rax),%xmm0
  movq   %xmm0,(%r9)
  mov    %r8d,%r9d
  and    $0xfffffffe,%r9d
  mov    %r10,(%rax)
  mov    %r9d,%eax
  shl    $0x2,%rax
  add    %rax,%rdi
  add    %rax,%rsi
  mov    0x4(%rsp),%eax
  sub    $0x4,%eax
  cmp    %r9d,%r8d
  je     L1745
L1732:
  mov    (%rdi),%eax
  mov    (%rsi),%r8d
  mov    %r8d,(%rdi)
  mov    %eax,(%rsi)
  mov    0x4(%rsp),%eax
  sub    $0x4,%eax
L1745:
  mov    %eax,%eax
  add    $0x4,%rax
  lea    (%r11,%rax,1),%rsi
  add    %r13,%rax
L421:
  lea    (%rsi,%r12,1),%rcx
  lea    (%rax,%r12,1),%r13
  mov    %rcx,0x10(%rsp)
L153:
  mov    %r11,0x60(%rsp)
  mov    %r14,%rsi
  mov    %r13,%rdi
  call   *%rbp
  test   %eax,%eax
  jle    L528
  mov    0x10(%rsp),%rdi
  mov    %r14,%rsi
  call   *%rbp
  test   %eax,%eax
  jle    L1450
  mov    0x4(%rsp),%ecx
  mov    0x10(%rsp),%rdx
  mov    0x60(%rsp),%r11
  mov    %ecx,%eax
  or     %edx,%eax
  test   $0x3,%al
  jne    L1342
  mov    0x20(%rsp),%r8
  lea    0x10(%rdx),%rdi
  add    %rbx,%r8
  lea    0x10(%r11,%r8,1),%rax
  lea    (%r11,%r8,1),%rsi
  cmp    %rax,%rdx
  setae  %al
  cmp    %rdi,%rsi
  setae  %dil
  or     %dil,%al
  je     L589
  cmp    $0x4,%ecx
  je     L589
  cmpl   $0x8,0x30(%rsp)
  jbe    L1714
  mov    0x40(%rsp),%rcx
  xor    %eax,%eax
L758:
  movdqu (%rdx,%rax,1),%xmm0
  movdqu (%rsi,%rax,1),%xmm6
  movups %xmm6,(%rdx,%rax,1)
  movups %xmm0,(%rsi,%rax,1)
  add    $0x10,%rax
  cmp    %rcx,%rax
  jne    L758
  mov    0x38(%rsp),%rax
  mov    0x10(%rsp),%rdi
  mov    0x34(%rsp),%ecx
  add    %rax,%rdi
  lea    (%r14,%rax,1),%rsi
  mov    0x4(%rsp),%eax
  sub    $0x4,%eax
  cmp    %ecx,0xc(%rsp)
  je     L1127
  mov    %ecx,%eax
L1333:
  mov    0xc(%rsp),%r9d
  sub    %eax,%r9d
  cmp    0x68(%rsp),%eax
  je     L452
  mov    0x10(%rsp),%rcx
  shl    $0x2,%rax
  lea    (%rcx,%rax,1),%r10
  add    %r8,%rax
  add    %r11,%rax
  mov    (%r10),%r8
  mov    (%rax),%r11
  mov    %r11,(%r10)
  mov    %r8,(%rax)
  mov    %r9d,%r8d
  and    $0xfffffffe,%r8d
  mov    %r8d,%eax
  shl    $0x2,%rax
  add    %rax,%rdi
  add    %rax,%rsi
  mov    0x4(%rsp),%eax
  sub    $0x4,%eax
  cmp    %r8d,%r9d
  je     L1127
L452:
  mov    (%rdi),%eax
  mov    (%rsi),%r8d
  mov    %r8d,(%rdi)
  mov    %eax,(%rsi)
  mov    0x4(%rsp),%eax
  sub    $0x4,%eax
L1127:
  mov    0x10(%rsp),%rsi
  mov    %eax,%eax
  add    $0x4,%rax
  add    %rax,%rsi
  add    %r14,%rax
L1266:
  lea    (%rsi,%r12,1),%rcx
  lea    (%rax,%r12,1),%r14
  mov    %rcx,0x10(%rsp)
L1450:
  mov    0x4(%rsp),%ecx
  mov    %ecx,%eax
  or     %r13d,%eax
  test   $0x3,%al
  lea    0xf(%r13),%rax
  jne    L896
  sub    %r14,%rax
  cmp    $0x1e,%rax
  jbe    L775
  cmp    $0x4,%ecx
  je     L775
  cmpl   $0x8,0x30(%rsp)
  jbe    L399
  mov    0x40(%rsp),%rdx
  xor    %eax,%eax
  nopw   0x0(%rax,%rax,1)
L534:
  movdqu 0x0(%r13,%rax,1),%xmm0
  movdqu (%r14,%rax,1),%xmm4
  movups %xmm4,0x0(%r13,%rax,1)
  movups %xmm0,(%r14,%rax,1)
  add    $0x10,%rax
  cmp    %rax,%rdx
  jne    L534
  mov    0x38(%rsp),%rax
  mov    0x34(%rsp),%ecx
  lea    0x0(%r13,%rax,1),%rdi
  lea    (%r14,%rax,1),%rsi
  mov    0x4(%rsp),%eax
  sub    $0x4,%eax
  cmp    %ecx,0xc(%rsp)
  je     L1262
  mov    %ecx,%eax
L719:
  mov    0xc(%rsp),%r8d
  sub    %eax,%r8d
  cmp    0x68(%rsp),%eax
  je     L16
  shl    $0x2,%rax
  lea    0x0(%r13,%rax,1),%r9
  add    %r14,%rax
  mov    (%rax),%r11
  mov    (%r9),%r10
  mov    %r11,(%r9)
  mov    %r8d,%r9d
  and    $0xfffffffe,%r9d
  mov    %r10,(%rax)
  mov    %r9d,%eax
  shl    $0x2,%rax
  add    %rax,%rdi
  add    %rax,%rsi
  mov    0x4(%rsp),%eax
  sub    $0x4,%eax
  cmp    %r9d,%r8d
  je     L1262
L16:
  mov    (%rdi),%eax
  mov    (%rsi),%r8d
  mov    %r8d,(%rdi)
  mov    %eax,(%rsi)
  mov    0x4(%rsp),%eax
  sub    $0x4,%eax
L1262:
  mov    %eax,%eax
  add    $0x4,%rax
  lea    0x0(%r13,%rax,1),%rdx
  add    %r14,%rax
L1007:
  lea    (%rdx,%r12,1),%r13
  lea    (%rax,%r12,1),%r14
L528:
  mov    0x4(%rsp),%ecx
  lea    (%r14,%r12,1),%rsi
  mov    %ecx,%eax
  or     %r13d,%eax
  test   $0x3,%al
  mov    %r14,%rax
  jne    L332
  sub    %r15,%rax
  lea    0x10(%r13),%rdi
  add    $0x10,%rax
  cmp    %rax,%r13
  setae  %al
  cmp    %rdi,%rsi
  setae  %dil
  or     %dil,%al
  je     L1383
  cmp    $0x4,%ecx
  je     L1383
  cmpl   $0x8,0x30(%rsp)
  jbe    L236
  mov    0x40(%rsp),%rdx
  xor    %eax,%eax
  nopl   0x0(%rax,%rax,1)
L1375:
  movdqu 0x0(%r13,%rax,1),%xmm0
  movdqu (%rsi,%rax,1),%xmm4
  movups %xmm4,0x0(%r13,%rax,1)
  movups %xmm0,(%rsi,%rax,1)
  add    $0x10,%rax
  cmp    %rax,%rdx
  jne    L1375
  mov    0x38(%rsp),%rax
  mov    0x34(%rsp),%ecx
  lea    0x0(%r13,%rax,1),%r8
  lea    (%rsi,%rax,1),%rdi
  mov    0x4(%rsp),%eax
  sub    $0x4,%eax
  cmp    %ecx,0xc(%rsp)
  je     L1712
  mov    %ecx,%eax
L1380:
  mov    0xc(%rsp),%r9d
  sub    %eax,%r9d
  cmp    0x68(%rsp),%eax
  je     L608
  shl    $0x2,%rax
  lea    0x0(%r13,%rax,1),%rdx
  sub    %r15,%rax
  add    %r14,%rax
  mov    (%rdx),%rcx
  mov    (%rax),%r10
  mov    %r10,(%rdx)
  mov    %r9d,%edx
  and    $0xfffffffe,%edx
  mov    %rcx,(%rax)
  mov    %edx,%eax
  shl    $0x2,%rax
  add    %rax,%r8
  add    %rax,%rdi
  mov    0x4(%rsp),%eax
  sub    $0x4,%eax
  cmp    %edx,%r9d
  je     L1712
L608:
  mov    (%r8),%eax
  mov    (%rdi),%edx
  mov    %edx,(%r8)
  mov    %eax,(%rdi)
  mov    0x4(%rsp),%eax
  sub    $0x4,%eax
L1712:
  mov    %eax,%eax
  lea    0x4(%rsi,%rax,1),%rax
  mov    %rax,0x20(%rsp)
L491:
  lea    (%rax,%r12,1),%rbx
  mov    0x10(%rsp),%r14
  mov    %rbx,%r13
  nopl   0x0(%rax,%rax,1)
L1259:
  add    %r15,%r14
  mov    %rbx,%rsi
  mov    %r14,%rdi
  call   *%rbp
  test   %eax,%eax
  js     L1259
  nop
L271:
  add    %r12,%r13
  mov    %rbx,%rsi
  mov    %r13,%rdi
  call   *%rbp
  test   %eax,%eax
  jg     L271
  mov    0x4(%rsp),%ecx
  mov    %ecx,%eax
  or     %r14d,%eax
  and    $0x3,%eax
  cmp    %r13,%r14
  jae    L1446
  test   %eax,%eax
  lea    0xf(%r13),%rax
  jne    L457
  sub    %r14,%rax
  cmp    $0x1e,%rax
  jbe    L562
  cmp    $0x4,%ecx
  je     L562
  cmpl   $0x8,0x30(%rsp)
  jbe    L513
  mov    0x40(%rsp),%rdx
  xor    %eax,%eax
  nopl   0x0(%rax,%rax,1)
L1098:
  movdqu (%r14,%rax,1),%xmm0
  movdqu 0x0(%r13,%rax,1),%xmm2
  movups %xmm2,(%r14,%rax,1)
  movups %xmm0,0x0(%r13,%rax,1)
  add    $0x10,%rax
  cmp    %rax,%rdx
  jne    L1098
  mov    0x38(%rsp),%rax
  mov    0x34(%rsp),%edi
  lea    (%r14,%rax,1),%rcx
  lea    0x0(%r13,%rax,1),%rdx
  mov    0x4(%rsp),%eax
  sub    $0x4,%eax
  cmp    %edi,0xc(%rsp)
  je     L1808
  mov    %edi,%eax
L954:
  mov    0xc(%rsp),%esi
  sub    %eax,%esi
  cmp    0x68(%rsp),%eax
  je     L1839
  shl    $0x2,%rax
  lea    (%r14,%rax,1),%rdi
  add    %r13,%rax
  mov    (%rax),%r9
  mov    (%rdi),%r8
  mov    %r9,(%rdi)
  mov    %esi,%edi
  and    $0xfffffffe,%edi
  mov    %r8,(%rax)
  mov    %edi,%eax
  shl    $0x2,%rax
  add    %rax,%rcx
  add    %rax,%rdx
  mov    0x4(%rsp),%eax
  sub    $0x4,%eax
  cmp    %edi,%esi
  je     L1808
L1839:
  mov    (%rcx),%eax
  mov    (%rdx),%esi
  mov    %esi,(%rcx)
  mov    %eax,(%rdx)
  mov    0x4(%rsp),%eax
  sub    $0x4,%eax
L1808:
  add    $0x4,%rax
  add    %rax,%r14
  add    %r13,%rax
L83:
  add    %r12,%r14
  lea    (%rax,%r12,1),%r13
  jmp    L1259
  cs nopw 0x0(%rax,%rax,1)
L457:
  sub    %r14,%rax
  cmp    $0x1e,%rax
  jbe    L277
  mov    0x8(%rsp),%eax
  cmp    $0x6,%eax
  jbe    L277
  cmp    $0xe,%eax
  jbe    L542
  mov    0x28(%rsp),%rdx
  xor    %eax,%eax
  nopw   0x0(%rax,%rax,1)
L1414:
  movdqu (%r14,%rax,1),%xmm0
  movdqu 0x0(%r13,%rax,1),%xmm3
  movups %xmm3,(%r14,%rax,1)
  movups %xmm0,0x0(%r13,%rax,1)
  add    $0x10,%rax
  cmp    %rax,%rdx
  jne    L1414
  mov    0x48(%rsp),%rax
  mov    0x50(%rsp),%edi
  lea    (%r14,%rax,1),%rcx
  lea    0x0(%r13,%rax,1),%rdx
  mov    0x8(%rsp),%eax
  cmp    %edi,0x18(%rsp)
  je     L294
  cmpl   $0x6,0x5c(%rsp)
  mov    0x58(%rsp),%r8d
  jbe    L363
  mov    %edi,%eax
  mov    0x54(%rsp),%edi
L705:
  lea    (%r14,%rax,1),%rsi
  add    %r13,%rax
  mov    (%rax),%r10
  mov    (%rsi),%r9
  mov    %r10,(%rsi)
  mov    %r8d,%esi
  and    $0xfffffff8,%esi
  mov    %r9,(%rax)
  mov    %esi,%eax
  sub    %esi,%edi
  add    %rax,%rcx
  add    %rax,%rdx
  mov    0x8(%rsp),%eax
  cmp    %r8d,%esi
  je     L294
L1196:
  movzbl (%rcx),%eax
  movzbl (%rdx),%esi
  mov    %sil,(%rcx)
  mov    %al,(%rdx)
  mov    0x8(%rsp),%eax
  cmp    $0x1,%edi
  je     L294
  movzbl 0x1(%rcx),%esi
  movzbl 0x1(%rdx),%r8d
  mov    %r8b,0x1(%rcx)
  mov    %sil,0x1(%rdx)
  cmp    $0x2,%edi
  je     L294
  movzbl 0x2(%rcx),%esi
  movzbl 0x2(%rdx),%r8d
  mov    %r8b,0x2(%rcx)
  mov    %sil,0x2(%rdx)
  cmp    $0x3,%edi
  je     L294
  movzbl 0x3(%rcx),%esi
  movzbl 0x3(%rdx),%r8d
  mov    %r8b,0x3(%rcx)
  mov    %sil,0x3(%rdx)
  cmp    $0x4,%edi
  je     L294
  movzbl 0x4(%rcx),%esi
  movzbl 0x4(%rdx),%r8d
  mov    %r8b,0x4(%rcx)
  mov    %sil,0x4(%rdx)
  cmp    $0x5,%edi
  je     L294
  movzbl 0x5(%rcx),%esi
  movzbl 0x5(%rdx),%r8d
  mov    %r8b,0x5(%rcx)
  mov    %sil,0x5(%rdx)
  cmp    $0x6,%edi
  je     L294
  movzbl 0x6(%rcx),%esi
  movzbl 0x6(%rdx),%edi
  mov    %dil,0x6(%rcx)
  mov    %sil,0x6(%rdx)
L294:
  add    $0x1,%rax
  add    %rax,%r14
  add    %r13,%rax
  jmp    L83
  nopl   0x0(%rax,%rax,1)
L1446:
  test   %eax,%eax
  mov    0x20(%rsp),%rax
  jne    L619
  sub    %r15,%rax
  lea    0x10(%r14),%rdx
  add    $0x10,%rax
  cmp    %rax,%r14
  setae  %al
  cmp    %rdx,%rbx
  setae  %dl
  or     %dl,%al
  je     L1678
  cmpl   $0x4,0x4(%rsp)
  je     L1678
  cmpl   $0x8,0x30(%rsp)
  jbe    L970
  mov    0x40(%rsp),%rdx
  xor    %eax,%eax
  nopl   0x0(%rax)
L988:
  movdqu (%r14,%rax,1),%xmm0
  movdqu (%rbx,%rax,1),%xmm6
  movups %xmm6,(%r14,%rax,1)
  movups %xmm0,(%rbx,%rax,1)
  add    $0x10,%rax
  cmp    %rdx,%rax
  jne    L988
  mov    0x38(%rsp),%rax
  mov    0x34(%rsp),%ecx
  lea    (%r14,%rax,1),%rdx
  add    %rax,%rbx
  mov    0x4(%rsp),%eax
  sub    $0x4,%eax
  cmp    %ecx,0xc(%rsp)
  je     L1415
  mov    %ecx,%eax
L1629:
  mov    0xc(%rsp),%esi
  sub    %eax,%esi
  cmp    0x68(%rsp),%eax
  je     L1438
  shl    $0x2,%rax
  lea    (%r14,%rax,1),%rdi
  sub    %r15,%rax
  add    0x20(%rsp),%rax
  mov    (%rax),%r9
  mov    (%rdi),%r8
  mov    %r9,(%rdi)
  mov    %esi,%edi
  and    $0xfffffffe,%edi
  mov    %r8,(%rax)
  mov    %edi,%eax
  shl    $0x2,%rax
  add    %rax,%rdx
  add    %rax,%rbx
  mov    0x4(%rsp),%eax
  sub    $0x4,%eax
  cmp    %esi,%edi
  je     L1415
L1438:
  mov    (%rdx),%eax
  mov    (%rbx),%esi
  mov    %esi,(%rdx)
  mov    %eax,(%rbx)
  mov    0x4(%rsp),%eax
  sub    $0x4,%eax
L1415:
  mov    %eax,%eax
  lea    0x4(%r14,%rax,1),%r11
L385:
  mov    0x10(%rsp),%rbx
  add    %r12,%r11
  xor    %edx,%edx
  mov    %r11,%rax
  sub    %rbx,%rax
  div    %r15
  sub    %eax,0x1c(%rsp)
  lea    -0x1(%rax),%edx
  mov    0x1c(%rsp),%eax
  cmp    %eax,%edx
  jle    L1596
  cmp    $0xa,%eax
  jle    L1751
  movslq 0x6c(%rsp),%rax
  mov    %rbx,0xf0(%rsp,%rax,8)
  mov    %edx,0x70(%rsp,%rax,4)
  lea    0x1(%rax),%eax
  mov    %eax,0x6c(%rsp)
  jmp    L1372
L277:
  mov    0x8(%rsp),%eax
  mov    %r13,%rcx
  mov    %r14,%rdx
  lea    0x1(%r14,%rax,1),%r8
  nopl   0x0(%rax)
L1655:
  movzbl (%rdx),%esi
  movzbl (%rcx),%edi
  add    $0x1,%rdx
  add    $0x1,%rcx
  mov    %dil,-0x1(%rdx)
  mov    %sil,-0x1(%rcx)
  cmp    %r8,%rdx
  jne    L1655
  jmp    L294
L562:
  mov    0x4(%rsp),%eax
  mov    %r13,%rcx
  lea    -0x4(%rax),%edx
  mov    %rdx,%rax
  lea    0x4(%r14,%rdx,1),%r8
  mov    %r14,%rdx
  nopl   (%rax)
L465:
  mov    (%rcx),%edi
  mov    (%rdx),%esi
  add    $0x4,%rdx
  add    $0x4,%rcx
  mov    %edi,-0x4(%rdx)
  mov    %esi,-0x4(%rcx)
  cmp    %r8,%rdx
  jne    L465
  jmp    L1808
L1596:
  cmp    $0xa,%edx
  jle    L1502
  mov    %eax,%ebx
  movslq 0x6c(%rsp),%rax
  mov    %edx,0x1c(%rsp)
  mov    %r11,0xf0(%rsp,%rax,8)
  mov    0x10(%rsp),%r11
  mov    %ebx,0x70(%rsp,%rax,4)
  lea    0x1(%rax),%eax
  mov    %eax,0x6c(%rsp)
  jmp    L1372
L619:
  sub    %r15,%rax
  lea    0x10(%r14),%rdx
  add    $0x10,%rax
  cmp    %rax,%r14
  setae  %al
  cmp    %rdx,%rbx
  setae  %dl
  or     %dl,%al
  je     L1463
  mov    0x8(%rsp),%eax
  cmp    $0x6,%eax
  jbe    L1463
  cmp    $0xe,%eax
  jbe    L335
  mov    0x28(%rsp),%rdx
  xor    %eax,%eax
  nopl   0x0(%rax)
L1552:
  movdqu (%r14,%rax,1),%xmm0
  movdqu (%rbx,%rax,1),%xmm7
  movups %xmm7,(%r14,%rax,1)
  movups %xmm0,(%rbx,%rax,1)
  add    $0x10,%rax
  cmp    %rdx,%rax
  jne    L1552
  mov    0x48(%rsp),%rax
  mov    0x8(%rsp),%edi
  lea    (%r14,%rax,1),%rdx
  add    %rax,%rbx
  mov    0x50(%rsp),%eax
  cmp    %eax,0x18(%rsp)
  je     L54
  cmpl   $0x6,0x5c(%rsp)
  mov    0x58(%rsp),%esi
  mov    0x54(%rsp),%r8d
  jbe    L797
L1274:
  lea    (%r14,%rax,1),%rdi
  sub    %r15,%rax
  add    0x20(%rsp),%rax
  mov    (%rdi),%r9
  mov    (%rax),%r10
  mov    %r10,(%rdi)
  mov    %r9,(%rax)
  mov    %esi,%eax
  and    $0xfffffff8,%eax
  mov    %eax,%edi
  sub    %eax,%r8d
  add    %rdi,%rdx
  add    %rdi,%rbx
  mov    0x8(%rsp),%edi
  cmp    %esi,%eax
  je     L54
L797:
  movzbl (%rdx),%eax
  movzbl (%rbx),%esi
  mov    0x8(%rsp),%edi
  mov    %sil,(%rdx)
  mov    %al,(%rbx)
  cmp    $0x1,%r8d
  je     L54
  movzbl 0x1(%rdx),%eax
  movzbl 0x1(%rbx),%esi
  mov    %sil,0x1(%rdx)
  mov    %al,0x1(%rbx)
  cmp    $0x2,%r8d
  je     L54
  movzbl 0x2(%rdx),%eax
  movzbl 0x2(%rbx),%esi
  mov    %sil,0x2(%rdx)
  mov    %al,0x2(%rbx)
  cmp    $0x3,%r8d
  je     L54
  movzbl 0x3(%rdx),%eax
  movzbl 0x3(%rbx),%esi
  mov    %sil,0x3(%rdx)
  mov    %al,0x3(%rbx)
  cmp    $0x4,%r8d
  je     L54
  movzbl 0x4(%rdx),%eax
  movzbl 0x4(%rbx),%esi
  mov    %sil,0x4(%rdx)
  mov    %al,0x4(%rbx)
  cmp    $0x5,%r8d
  je     L54
  movzbl 0x5(%rdx),%eax
  movzbl 0x5(%rbx),%esi
  mov    %sil,0x5(%rdx)
  mov    %al,0x5(%rbx)
  cmp    $0x6,%r8d
  je     L54
  movzbl 0x6(%rdx),%eax
  movzbl 0x6(%rbx),%esi
  mov    %sil,0x6(%rdx)
  mov    %al,0x6(%rbx)
L54:
  lea    0x1(%r14,%rdi,1),%r11
  jmp    L385
L332:
  sub    %r15,%rax
  lea    0x10(%r13),%rdi
  add    $0x10,%rax
  cmp    %rax,%r13
  setae  %al
  cmp    %rdi,%rsi
  setae  %dil
  or     %dil,%al
  je     L1133
  mov    0x8(%rsp),%eax
  cmp    $0x6,%eax
  jbe    L1133
  cmp    $0xe,%eax
  jbe    L959
  mov    0x28(%rsp),%rdx
  xor    %eax,%eax
  nopl   0x0(%rax)
L1835:
  movdqu 0x0(%r13,%rax,1),%xmm0
  movdqu (%rsi,%rax,1),%xmm5
  movups %xmm5,0x0(%r13,%rax,1)
  movups %xmm0,(%rsi,%rax,1)
  add    $0x10,%rax
  cmp    %rax,%rdx
  jne    L1835
  mov    0x48(%rsp),%rax
  mov    0x8(%rsp),%edi
  mov    0x50(%rsp),%ecx
  lea    0x0(%r13,%rax,1),%r8
  add    %rsi,%rax
  cmp    %ecx,0x18(%rsp)
  je     L494
  cmpl   $0x6,0x5c(%rsp)
  mov    0x58(%rsp),%r9d
  jbe    L365
  mov    0x54(%rsp),%r10d
  mov    %ecx,%edi
L1838:
  lea    0x0(%r13,%rdi,1),%rdx
  sub    %r15,%rdi
  lea    (%r14,%rdi,1),%rcx
  mov    (%rdx),%rdi
  mov    (%rcx),%r11
  mov    %r11,(%rdx)
  mov    %r9d,%edx
  and    $0xfffffff8,%edx
  mov    %rdi,(%rcx)
  mov    0x8(%rsp),%edi
  mov    %edx,%ecx
  sub    %edx,%r10d
  add    %rcx,%r8
  add    %rcx,%rax
  cmp    %r9d,%edx
  je     L494
L1645:
  movzbl (%r8),%edx
  movzbl (%rax),%ecx
  mov    0x8(%rsp),%edi
  mov    %cl,(%r8)
  mov    %dl,(%rax)
  cmp    $0x1,%r10d
  je     L494
  movzbl 0x1(%r8),%edx
  movzbl 0x1(%rax),%ecx
  mov    %cl,0x1(%r8)
  mov    %dl,0x1(%rax)
  cmp    $0x2,%r10d
  je     L494
  movzbl 0x2(%r8),%edx
  movzbl 0x2(%rax),%ecx
  mov    %cl,0x2(%r8)
  mov    %dl,0x2(%rax)
  cmp    $0x3,%r10d
  je     L494
  movzbl 0x3(%r8),%edx
  movzbl 0x3(%rax),%ecx
  mov    %cl,0x3(%r8)
  mov    %dl,0x3(%rax)
  cmp    $0x4,%r10d
  je     L494
  movzbl 0x4(%r8),%edx
  movzbl 0x4(%rax),%ecx
  mov    %cl,0x4(%r8)
  mov    %dl,0x4(%rax)
  cmp    $0x5,%r10d
  je     L494
  movzbl 0x5(%r8),%edx
  movzbl 0x5(%rax),%ecx
  mov    %cl,0x5(%r8)
  mov    %dl,0x5(%rax)
  cmp    $0x6,%r10d
  je     L494
  movzbl 0x6(%r8),%edx
  movzbl 0x6(%rax),%ecx
  mov    %cl,0x6(%r8)
  mov    %dl,0x6(%rax)
L494:
  lea    0x1(%rsi,%rdi,1),%rax
  mov    %rax,0x20(%rsp)
  jmp    L491
L542:
  mov    %ecx,%edi
  mov    0x18(%rsp),%r8d
  mov    %r13,%rdx
  mov    %r14,%rcx
  xor    %eax,%eax
  jmp    L705
L513:
  mov    %r13,%rdx
  mov    %r14,%rcx
  xor    %eax,%eax
  jmp    L954
L363:
  mov    0x54(%rsp),%edi
  jmp    L1196
L1604:
  test   %rax,%rax
  lea    0x10(%r11),%rsi
  setle  %al
  cmp    %rsi,%r13
  setae  %sil
  or     %sil,%al
  je     L759
  mov    0x8(%rsp),%eax
  cmp    $0x6,%eax
  jbe    L759
  cmp    $0xe,%eax
  jbe    L347
  mov    0x28(%rsp),%rdx
  xor    %eax,%eax
  nopw   0x0(%rax,%rax,1)
L629:
  movdqu (%r11,%rax,1),%xmm0
  movdqu 0x0(%r13,%rax,1),%xmm1
  movups %xmm1,(%r11,%rax,1)
  movups %xmm0,0x0(%r13,%rax,1)
  add    $0x10,%rax
  cmp    %rdx,%rax
  jne    L629
  mov    0x48(%rsp),%rax
  mov    0x8(%rsp),%edi
  lea    (%r11,%rax,1),%r8
  lea    0x0(%r13,%rax,1),%rsi
  mov    0x50(%rsp),%eax
  cmp    %eax,0x18(%rsp)
  je     L1878
  cmpl   $0x6,0x5c(%rsp)
  mov    0x58(%rsp),%r9d
  jbe    L418
  mov    0x54(%rsp),%edi
L496:
  lea    (%r11,%rax,1),%r10
  add    %rbx,%rax
  add    %r11,%rax
  movq   (%r10),%xmm0
  movq   (%rax),%xmm1
  movq   %xmm1,(%r10)
  movq   %xmm0,(%rax)
  mov    %r9d,%eax
  and    $0xfffffff8,%eax
  mov    %eax,%r10d
  sub    %eax,%edi
  add    %r10,%r8
  add    %r10,%rsi
  mov    %edi,%r10d
  mov    0x8(%rsp),%edi
  cmp    %eax,%r9d
  je     L1878
L1548:
  movzbl (%rsi),%edi
  movzbl (%r8),%eax
  mov    %dil,(%r8)
  mov    0x8(%rsp),%edi
  mov    %al,(%rsi)
  cmp    $0x1,%r10d
  je     L1878
  movzbl 0x1(%r8),%eax
  movzbl 0x1(%rsi),%r9d
  mov    %r9b,0x1(%r8)
  mov    %al,0x1(%rsi)
  cmp    $0x2,%r10d
  je     L1878
  movzbl 0x2(%r8),%eax
  movzbl 0x2(%rsi),%r9d
  mov    %r9b,0x2(%r8)
  mov    %al,0x2(%rsi)
  cmp    $0x3,%r10d
  je     L1878
  movzbl 0x3(%r8),%eax
  movzbl 0x3(%rsi),%r9d
  mov    %r9b,0x3(%r8)
  mov    %al,0x3(%rsi)
  cmp    $0x4,%r10d
  je     L1878
  movzbl 0x4(%r8),%eax
  movzbl 0x4(%rsi),%r9d
  mov    %r9b,0x4(%r8)
  mov    %al,0x4(%rsi)
  cmp    $0x5,%r10d
  je     L1878
  movzbl 0x5(%r8),%eax
  movzbl 0x5(%rsi),%r9d
  mov    %r9b,0x5(%r8)
  mov    %al,0x5(%rsi)
  cmp    $0x6,%r10d
  je     L1878
  movzbl 0x6(%r8),%eax
  movzbl 0x6(%rsi),%r9d
  mov    %r9b,0x6(%r8)
  mov    %al,0x6(%rsi)
L1878:
  lea    0x1(%rdi),%rax
  lea    (%r11,%rax,1),%rsi
  add    %r13,%rax
  jmp    L421
L896:
  sub    %r14,%rax
  cmp    $0x1e,%rax
  jbe    L194
  mov    0x8(%rsp),%eax
  cmp    $0x6,%eax
  jbe    L194
  cmp    $0xe,%eax
  jbe    L1254
  mov    0x28(%rsp),%rdx
  xor    %eax,%eax
  nopw   0x0(%rax,%rax,1)
L819:
  movdqu 0x0(%r13,%rax,1),%xmm0
  movdqu (%r14,%rax,1),%xmm5
  movups %xmm5,0x0(%r13,%rax,1)
  movups %xmm0,(%r14,%rax,1)
  add    $0x10,%rax
  cmp    %rax,%rdx
  jne    L819
  mov    0x48(%rsp),%rax
  mov    0x8(%rsp),%edi
  lea    0x0(%r13,%rax,1),%r8
  lea    (%r14,%rax,1),%rsi
  mov    0x50(%rsp),%eax
  cmp    %eax,0x18(%rsp)
  je     L835
  cmpl   $0x6,0x5c(%rsp)
  mov    0x58(%rsp),%r9d
  jbe    L1724
  mov    0x54(%rsp),%edi
L1387:
  lea    0x0(%r13,%rax,1),%r10
  add    %r14,%rax
  mov    (%rax),%rbx
  mov    (%r10),%r11
  mov    %rbx,(%r10)
  mov    %r9d,%r10d
  and    $0xfffffff8,%r10d
  mov    %r11,(%rax)
  mov    %r10d,%eax
  add    %rax,%r8
  add    %rax,%rsi
  mov    %edi,%eax
  mov    0x8(%rsp),%edi
  sub    %r10d,%eax
  cmp    %r10d,%r9d
  je     L835
L553:
  movzbl (%r8),%edi
  movzbl (%rsi),%r9d
  mov    %r9b,(%r8)
  mov    %dil,(%rsi)
  mov    0x8(%rsp),%edi
  cmp    $0x1,%eax
  je     L835
  movzbl 0x1(%r8),%r9d
  movzbl 0x1(%rsi),%r10d
  mov    %r10b,0x1(%r8)
  mov    %r9b,0x1(%rsi)
  cmp    $0x2,%eax
  je     L835
  movzbl 0x2(%r8),%r9d
  movzbl 0x2(%rsi),%r10d
  mov    %r10b,0x2(%r8)
  mov    %r9b,0x2(%rsi)
  cmp    $0x3,%eax
  je     L835
  movzbl 0x3(%r8),%r9d
  movzbl 0x3(%rsi),%r10d
  mov    %r10b,0x3(%r8)
  mov    %r9b,0x3(%rsi)
  cmp    $0x4,%eax
  je     L835
  movzbl 0x4(%r8),%r9d
  movzbl 0x4(%rsi),%r10d
  mov    %r10b,0x4(%r8)
  mov    %r9b,0x4(%rsi)
  cmp    $0x5,%eax
  je     L835
  movzbl 0x5(%r8),%r9d
  movzbl 0x5(%rsi),%r10d
  mov    %r10b,0x5(%r8)
  mov    %r9b,0x5(%rsi)
  cmp    $0x6,%eax
  je     L835
  movzbl 0x6(%r8),%eax
  movzbl 0x6(%rsi),%r9d
  mov    %r9b,0x6(%r8)
  mov    %al,0x6(%rsi)
L835:
  lea    0x1(%rdi),%rax
  lea    0x0(%r13,%rax,1),%rdx
  add    %r14,%rax
  jmp    L1007
L1751:
  cmp    $0xa,%edx
  jle    L794
  mov    %edx,0x1c(%rsp)
  mov    %rbx,%r11
  jmp    L1372
L1502:
  cmpl   $0xa,0x1c(%rsp)
  jg     L1372
L794:
  mov    0x6c(%rsp),%eax
  test   %eax,%eax
  je     L1636
  sub    $0x1,%eax
  mov    %eax,%edx
  cltq
  mov    0xf0(%rsp,%rax,8),%r11
  mov    0x70(%rsp,%rax,4),%eax
  mov    %eax,0x1c(%rsp)
  jmp    L1514
L1342:
  add    0x20(%rsp),%rbx
  lea    0x10(%rdx),%rdi
  lea    0x10(%r11,%rbx,1),%rax
  lea    (%r11,%rbx,1),%rsi
  cmp    %rax,%rdx
  setae  %al
  cmp    %rdi,%rsi
  setae  %dil
  or     %dil,%al
  je     L1289
  mov    0x8(%rsp),%eax
  cmp    $0x6,%eax
  jbe    L1289
  cmp    $0xe,%eax
  jbe    L626
  mov    0x28(%rsp),%rcx
  xor    %eax,%eax
L1771:
  movdqu (%rdx,%rax,1),%xmm0
  movdqu (%rsi,%rax,1),%xmm7
  movups %xmm7,(%rdx,%rax,1)
  movups %xmm0,(%rsi,%rax,1)
  add    $0x10,%rax
  cmp    %rax,%rcx
  jne    L1771
  mov    0x48(%rsp),%rax
  mov    0x10(%rsp),%rsi
  mov    0x8(%rsp),%edi
  mov    0x50(%rsp),%ecx
  add    %rax,%rsi
  add    %r14,%rax
  cmp    %ecx,0x18(%rsp)
  je     L812
  cmpl   $0x6,0x5c(%rsp)
  mov    0x58(%rsp),%r8d
  jbe    L231
  mov    0x54(%rsp),%r10d
  mov    %ecx,%edi
L855:
  mov    0x10(%rsp),%rcx
  add    %rdi,%rbx
  lea    (%rcx,%rdi,1),%r9
  lea    (%r11,%rbx,1),%rdi
  mov    (%rdi),%rbx
  mov    (%r9),%r11
  mov    %rbx,(%r9)
  mov    %r11,(%rdi)
  mov    %r8d,%r11d
  and    $0xfffffff8,%r11d
  mov    %r11d,%edi
  sub    %r11d,%r10d
  add    %rdi,%rsi
  add    %rdi,%rax
  mov    %r10d,%r9d
  mov    0x8(%rsp),%edi
  cmp    %r11d,%r8d
  je     L812
L484:
  movzbl (%rsi),%edi
  movzbl (%rax),%r8d
  mov    %r8b,(%rsi)
  mov    %dil,(%rax)
  mov    0x8(%rsp),%edi
  cmp    $0x1,%r9d
  je     L812
  movzbl 0x1(%rsi),%r8d
  movzbl 0x1(%rax),%r10d
  mov    %r10b,0x1(%rsi)
  mov    %r8b,0x1(%rax)
  cmp    $0x2,%r9d
  je     L812
  movzbl 0x2(%rsi),%r8d
  movzbl 0x2(%rax),%r10d
  mov    %r10b,0x2(%rsi)
  mov    %r8b,0x2(%rax)
  cmp    $0x3,%r9d
  je     L812
  movzbl 0x3(%rsi),%r8d
  movzbl 0x3(%rax),%r10d
  mov    %r10b,0x3(%rsi)
  mov    %r8b,0x3(%rax)
  cmp    $0x4,%r9d
  je     L812
  movzbl 0x4(%rsi),%r8d
  movzbl 0x4(%rax),%r10d
  mov    %r10b,0x4(%rsi)
  mov    %r8b,0x4(%rax)
  cmp    $0x5,%r9d
  je     L812
  movzbl 0x5(%rsi),%r8d
  movzbl 0x5(%rax),%r10d
  mov    %r10b,0x5(%rsi)
  mov    %r8b,0x5(%rax)
  cmp    $0x6,%r9d
  je     L812
  movzbl 0x6(%rsi),%r8d
  movzbl 0x6(%rax),%r9d
  mov    %r9b,0x6(%rsi)
  mov    %r8b,0x6(%rax)
L812:
  mov    0x10(%rsp),%rsi
  lea    0x1(%rdi),%rax
  add    %rax,%rsi
  add    %r14,%rax
  jmp    L1266
L1463:
  mov    0x8(%rsp),%edi
  mov    %r14,%rax
  lea    0x1(%rbx,%rdi,1),%r8
  nopl   0x0(%rax)
L1459:
  movzbl (%rax),%edx
  movzbl (%rbx),%ecx
  add    $0x1,%rbx
  add    $0x1,%rax
  mov    %cl,-0x1(%rax)
  mov    %dl,-0x1(%rbx)
  cmp    %rbx,%r8
  jne    L1459
  jmp    L54
L1678:
  mov    0x4(%rsp),%eax
  lea    -0x4(%rax),%edx
  mov    %rdx,%rax
  lea    0x4(%r14,%rdx,1),%r8
  mov    %r14,%rdx
L867:
  mov    (%rbx),%esi
  mov    (%rdx),%ecx
  add    $0x4,%rdx
  add    $0x4,%rbx
  mov    %esi,-0x4(%rdx)
  mov    %ecx,-0x4(%rbx)
  cmp    %r8,%rdx
  jne    L867
  jmp    L1415
L1133:
  mov    0x8(%rsp),%edi
  mov    %rsi,%rax
  lea    0x1(%r13,%rdi,1),%r9
  nopl   0x0(%rax,%rax,1)
L1646:
  movzbl 0x0(%r13),%edx
  movzbl (%rax),%ecx
  add    $0x1,%r13
  add    $0x1,%rax
  mov    %cl,-0x1(%r13)
  mov    %dl,-0x1(%rax)
  cmp    %r9,%r13
  jne    L1646
  jmp    L494
L1383:
  mov    0x4(%rsp),%eax
  lea    -0x4(%rax),%ecx
  mov    %rcx,%rax
  lea    0x4(%r13,%rcx,1),%r9
  mov    %rsi,%rcx
  nopl   0x0(%rax,%rax,1)
L1350:
  mov    (%rcx),%edi
  mov    0x0(%r13),%edx
  add    $0x4,%r13
  add    $0x4,%rcx
  mov    %edi,-0x4(%r13)
  mov    %edx,-0x4(%rcx)
  cmp    %r9,%r13
  jne    L1350
  jmp    L1712
L759:
  mov    0x8(%rsp),%edi
  mov    %r13,%rsi
  mov    %r11,%rax
  lea    0x1(%r11,%rdi,1),%r10
L997:
  movzbl (%rax),%edx
  movzbl (%rsi),%ecx
  add    $0x1,%rax
  add    $0x1,%rsi
  mov    %cl,-0x1(%rax)
  mov    %dl,-0x1(%rsi)
  cmp    %rax,%r10
  jne    L997
  jmp    L1878
L194:
  mov    0x8(%rsp),%edi
  mov    %r14,%rsi
  mov    %r13,%rax
  lea    0x1(%r13,%rdi,1),%r10
L1418:
  movzbl (%rax),%edx
  movzbl (%rsi),%ecx
  add    $0x1,%rax
  add    $0x1,%rsi
  mov    %cl,-0x1(%rax)
  mov    %dl,-0x1(%rsi)
  cmp    %r10,%rax
  jne    L1418
  jmp    L835
L775:
  mov    0x4(%rsp),%eax
  mov    %r14,%rdi
  lea    -0x4(%rax),%esi
  mov    %rsi,%rax
  lea    0x4(%r13,%rsi,1),%r10
  mov    %r13,%rsi
L930:
  mov    (%rdi),%ecx
  mov    (%rsi),%edx
  add    $0x4,%rsi
  add    $0x4,%rdi
  mov    %ecx,-0x4(%rsi)
  mov    %edx,-0x4(%rdi)
  cmp    %r10,%rsi
  jne    L930
  jmp    L1262
L1245:
  mov    0x4(%rsp),%eax
  mov    %r13,%rdi
  lea    -0x4(%rax),%esi
  mov    %rsi,%rax
  lea    0x4(%r11,%rsi,1),%r10
  mov    %r11,%rsi
L68:
  mov    (%rdi),%ecx
  mov    (%rsi),%edx
  add    $0x4,%rsi
  add    $0x4,%rdi
  mov    %ecx,-0x4(%rsi)
  mov    %edx,-0x4(%rdi)
  cmp    %r10,%rsi
  jne    L68
  jmp    L1745
L970:
  mov    %r14,%rdx
  xor    %eax,%eax
  jmp    L1629
L236:
  mov    %rsi,%rdi
  mov    %r13,%r8
  xor    %eax,%eax
  jmp    L1380
L335:
  mov    0x18(%rsp),%esi
  mov    %ecx,%r8d
  mov    %r14,%rdx
  xor    %eax,%eax
  jmp    L1274
L365:
  mov    0x54(%rsp),%r10d
  jmp    L1645
L959:
  mov    0x18(%rsp),%r9d
  mov    %ecx,%r10d
  mov    %rsi,%rax
  mov    %r13,%r8
  xor    %edi,%edi
  jmp    L1838
L1289:
  mov    0x8(%rsp),%edi
  mov    0x10(%rsp),%rax
  mov    %r14,%rsi
  lea    0x1(%rax,%rdi,1),%r10
L1829:
  movzbl (%rax),%edx
  movzbl (%rsi),%ecx
  add    $0x1,%rax
  add    $0x1,%rsi
  mov    %cl,-0x1(%rax)
  mov    %dl,-0x1(%rsi)
  cmp    %r10,%rax
  jne    L1829
  jmp    L812
L589:
  mov    0x4(%rsp),%eax
  mov    0x10(%rsp),%rcx
  mov    %r14,%rdi
  lea    -0x4(%rax),%esi
  mov    %rsi,%rax
  lea    0x4(%rcx,%rsi,1),%r10
  mov    %rcx,%rsi
L309:
  mov    (%rdi),%ecx
  mov    (%rsi),%edx
  add    $0x4,%rsi
  add    $0x4,%rdi
  mov    %ecx,-0x4(%rsi)
  mov    %edx,-0x4(%rdi)
  cmp    %r10,%rsi
  jne    L309
  jmp    L1127
L756:
  mov    %r13,%rsi
  mov    %r11,%rdi
  xor    %eax,%eax
  jmp    L891
L347:
  mov    0x18(%rsp),%r9d
  mov    %ecx,%edi
  mov    %r13,%rsi
  mov    %r11,%r8
  xor    %eax,%eax
  jmp    L496
L418:
  mov    0x54(%rsp),%r10d
  jmp    L1548
L1254:
  mov    0x18(%rsp),%r9d
  mov    %ecx,%edi
  mov    %r14,%rsi
  mov    %r13,%r8
  xor    %eax,%eax
  jmp    L1387
L1724:
  mov    0x54(%rsp),%eax
  jmp    L553
L399:
  mov    %r14,%rsi
  mov    %r13,%rdi
  xor    %eax,%eax
  jmp    L719
L1714:
  mov    %rdx,%rdi
  mov    %r14,%rsi
  xor    %eax,%eax
  jmp    L1333
L626:
  mov    0x18(%rsp),%r8d
  mov    %ecx,%r10d
  mov    %rdx,%rsi
  mov    %r14,%rax
  xor    %edi,%edi
  jmp    L855
L231:
  mov    0x54(%rsp),%r9d
  jmp    L484
L1636:
  mov    0x1f8(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L1001
  add    $0x208,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L1001:
  call   <__stack_chk_fail@plt>
```

assistant: ```c
void partition_sort(void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *)) {
  int stackpointer = 1;
  void *basestack[32];
  int sizestack[32];
  basestack[0] = base;
  sizestack[0] = nmemb;
  while (stackpointer != 0) {
    char *b = (char *)basestack[--stackpointer];
    int n = sizestack[stackpointer];
    for (;;) {
      int halfn = (n >> 1) * size;
      char *bmid = b + halfn;
      char *btop;
      if ((n & 1) == 0)
        halfn -= size;
      btop = bmid + halfn;
      if ((*compar)(b, bmid) > 0) {
        int xsize = size;
        if (((xsize | (int)b) & 0x3) == 0) {
          do {
            int temp = *(int *)b;
            *(int *)b = *(int *)bmid;
            *(int *)bmid = temp;
            b += 4;
            bmid += 4;
            xsize -= 4;
            ;
          } while (xsize != 0);
        } else {
          do {
            char temp = *b;
            *b++ = *bmid;
            *bmid++ = temp;
            xsize--;
          } while (xsize != 0);
        }
        b -= size;
        bmid -= size;
      };
      if ((*compar)(bmid, btop) > 0) {
        if ((*compar)(b, btop) > 0) {
          int xsize = size;
          if (((xsize | (int)b) & 0x3) == 0) {
            do {
              int temp = *(int *)b;
              *(int *)b = *(int *)btop;
              *(int *)btop = temp;
              b += 4;
              btop += 4;
              xsize -= 4;
              ;
            } while (xsize != 0);
          } else {
            do {
              char temp = *b;
              *b++ = *btop;
              *btop++ = temp;
              xsize--;
            } while (xsize != 0);
          }
          b -= size;
          btop -= size;
        };
        {
          int xsize = size;
          if (((xsize | (int)bmid) & 0x3) == 0) {
            do {
              int temp = *(int *)bmid;
              *(int *)bmid = *(int *)btop;
              *(int *)btop = temp;
              bmid += 4;
              btop += 4;
              xsize -= 4;
              ;
            } while (xsize != 0);
          } else {
            do {
              char temp = *bmid;
              *bmid++ = *btop;
              *btop++ = temp;
              xsize--;
            } while (xsize != 0);
          }
          bmid -= size;
          btop -= size;
        };
      }
      {
        char *l;
        char *r = btop - size;
        char *pivot;
        int s1, s2;
        {
          int xsize = size;
          if (((xsize | (int)bmid) & 0x3) == 0) {
            do {
              int temp = *(int *)bmid;
              *(int *)bmid = *(int *)r;
              *(int *)r = temp;
              bmid += 4;
              r += 4;
              xsize -= 4;
              ;
            } while (xsize != 0);
          } else {
            do {
              char temp = *bmid;
              *bmid++ = *r;
              *r++ = temp;
              xsize--;
            } while (xsize != 0);
          }
          bmid -= size;
          r -= size;
        };
        l = b;
        pivot = r;
        for (;;) {
          do
            l += size;
          while ((*compar)(l, pivot) < 0);
          do
            r -= size;
          while ((*compar)(r, pivot) > 0);
          if (r <= l)
            break;
          {
            int xsize = size;
            if (((xsize | (int)l) & 0x3) == 0) {
              do {
                int temp = *(int *)l;
                *(int *)l = *(int *)r;
                *(int *)r = temp;
                l += 4;
                r += 4;
                xsize -= 4;
                ;
              } while (xsize != 0);
            } else {
              do {
                char temp = *l;
                *l++ = *r;
                *r++ = temp;
                xsize--;
              } while (xsize != 0);
            }
            l -= size;
            r -= size;
          };
        }
        {
          int xsize = size;
          if (((xsize | (int)l) & 0x3) == 0) {
            do {
              int temp = *(int *)l;
              *(int *)l = *(int *)pivot;
              *(int *)pivot = temp;
              l += 4;
              pivot += 4;
              xsize -= 4;
              ;
            } while (xsize != 0);
          } else {
            do {
              char temp = *l;
              *l++ = *pivot;
              *pivot++ = temp;
              xsize--;
            } while (xsize != 0);
          }
          l -= size;
          pivot -= size;
        };
        s1 = ((l - b) / size) - 1;
        s2 = n - s1 - 1;
        if (s1 > s2) {
          if (s2 > 10) {
            (basestack[stackpointer] = (void *)(b), sizestack[stackpointer++] = (s1));
            b = l;
            n = s2;
          } else if (s1 > 10)
            n = s1;
          else
            break;
        } else {
          if (s1 > 10) {
            (basestack[stackpointer] = (void *)(l), sizestack[stackpointer++] = (s2));
            n = s1;
          } else if (s2 > 10) {
            b = l;
            n = s2;
          } else
            break;
        }
      }
    }
  }
}
```