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

```asm
<CTAI_Util_IQSort2>:
  endbr64
  cmp    %ecx,%edx
  jge    L45
  push   %r15
  movslq %ecx,%rax
  mov    %rsi,%r15
  mov    %ecx,%r10d
  push   %r14
  shl    $0x2,%rax
  push   %r13
  mov    %rdi,%r13
  push   %r12
  mov    %edx,%r12d
  push   %rbp
  push   %rbx
  sub    $0x48,%rsp
  mov    %rax,0x30(%rsp)
  add    %rdi,%rax
  mov    %rax,0x38(%rsp)
L137:
  mov    %r10d,%esi
  mov    %r12d,%edi
  mov    %r10d,0x8(%rsp)
  call   <choose_pivot@plt>
  movslq %eax,%rbx
  movslq %r12d,%rax
  lea    0x0(,%rax,4),%rbp
  shl    $0x2,%rbx
  lea    0x0(%r13,%rbp,1),%r14
  lea    0x0(%r13,%rbx,1),%rsi
  mov    %r14,%rdi
  mov    %r14,0x20(%rsp)
  call   <swap@plt>
  lea    (%r15,%rbp,1),%rdi
  lea    (%r15,%rbx,1),%rsi
  mov    %rdi,0x28(%rsp)
  call   <swap@plt>
  mov    0x8(%rsp),%r10d
  mov    (%r14),%ecx
  lea    0x1(%r12),%r14d
  mov    %r10d,%r8d
  cmp    %r14d,%r10d
  jl     L123
  xchg   %ax,%ax
L145:
  movslq %r14d,%rax
  mov    %r14d,%ebp
  lea    0x0(%r13,%rax,4),%rax
  jmp    L76
  nopl   (%rax)
L1:
  add    $0x1,%ebp
  add    $0x4,%rax
  cmp    %ebp,%r10d
  jl     L55
L76:
  cmp    %ecx,(%rax)
  jle    L1
L55:
  movslq %r8d,%rbx
  mov    %r8d,%eax
  shl    $0x2,%rbx
  lea    0x0(%r13,%rbx,1),%rsi
  cmp    %r12d,%r8d
  jge    L140
  jmp    L80
  cs nopw 0x0(%rax,%rax,1)
L126:
  sub    $0x4,%rbx
  cmp    %eax,%r12d
  jg     L133
L140:
  mov    %eax,%r8d
  lea    0x0(%r13,%rbx,1),%rsi
  lea    -0x1(%rax),%eax
  cmp    %ecx,0x0(%r13,%rbx,1)
  jg     L126
L80:
  cmp    %r8d,%ebp
  jl     L151
L22:
  jne    L84
L82:
  cmp    %r14d,%r10d
  jl     1080 <CTAI_Util_IQSort2.cold>
  mov    %ebp,%r14d
  cmp    %ebp,%r10d
  jge    L145
  jmp    L55
  nopl   (%rax)
L133:
  movslq %eax,%rbx
  mov    %eax,%r8d
  shl    $0x2,%rbx
  lea    0x0(%r13,%rbx,1),%rsi
  cmp    %r8d,%ebp
  jge    L22
L151:
  movslq %ebp,%rdi
  mov    %r10d,0x1c(%rsp)
  lea    0x0(,%rdi,4),%rdx
  mov    %r8d,0x18(%rsp)
  lea    0x0(%r13,%rdx,1),%rdi
  mov    %ecx,0x14(%rsp)
  mov    %rdx,0x8(%rsp)
  call   <swap@plt>
  mov    0x8(%rsp),%rdx
  lea    (%r15,%rbx,1),%rsi
  lea    (%r15,%rdx,1),%rdi
  call   <swap@plt>
  mov    0x14(%rsp),%ecx
  mov    0x18(%rsp),%r8d
  mov    0x1c(%rsp),%r10d
  jmp    L82
L123:
  mov    0x38(%rsp),%rsi
  mov    0x30(%rsp),%rbx
L84:
  mov    0x20(%rsp),%rdi
  mov    %r10d,0x14(%rsp)
  mov    %r8d,0x8(%rsp)
  call   <swap@plt>
  mov    0x28(%rsp),%rdi
  lea    (%r15,%rbx,1),%rsi
  call   <swap@plt>
  mov    0x8(%rsp),%r8d
  mov    %r12d,%edx
  mov    %r15,%rsi
  mov    %r13,%rdi
  lea    -0x1(%r8),%ecx
  call   <CTAI_Util_IQSort2>
  mov    0x8(%rsp),%r8d
  mov    0x14(%rsp),%r10d
  lea    0x1(%r8),%r12d
  cmp    %r10d,%r12d
  jl     L137
  add    $0x48,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L45:
  ret
```

assistant: ```c
void CTAI_Util_IQSort2(int *list, int *indx, int m, int n) {
  int key, i, j, k;
  if (m < n) {
    k = choose_pivot(m, n);
    swap(&list[m], &list[k]);
    swap(&indx[m], &indx[k]);
    key = list[m];
    i = m + 1;
    j = n;
    while (i <= j) {
      while ((i <= n) && (list[i] <= key))
        i++;
      while ((j >= m) && (list[j] > key))
        j--;
      if (i < j) {
        swap(&list[i], &list[j]);
        swap(&indx[i], &indx[j]);
      }
    }
    swap(&list[m], &list[j]);
    swap(&indx[m], &indx[j]);
    CTAI_Util_IQSort2(list, indx, m, j - 1);
    CTAI_Util_IQSort2(list, indx, j + 1, n);
  }
}
```