user: 请显示与下面列出的汇编代码相匹配的C语言实现：

```asm
<get_changedRxns_by_two_mets>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  mov    %rdi,%rbp
  mov    %rsi,%r12
  mov    %rcx,%rbx
  mov    0x38(%rsp),%rdi
  mov    0x40(%rsp),%r11
  mov    0x48(%rsp),%rsi
  mov    0x50(%rsp),%r13
  test   %edx,%edx
  jle    L139
  lea    0x1(%rdx),%r14d
  mov    $0x1,%eax
  mov    $0x0,%r10d
  movsd  D2(%rip),%xmm1
  movsd  D13(%rip),%xmm2
  movapd %xmm2,%xmm4
  movapd %xmm1,%xmm3
  jmp    L76
L22:
  cmpl   $0x0,-0x4(%rsi,%r15,4)
  jne    L97
  movslq %r10d,%rdx
  sub    $0x1,%ecx
  mov    %ecx,0x0(%r13,%rdx,4)
  add    $0x1,%r10d
  movslq 0x0(%rbp,%rax,4),%rdx
  movl   $0x1,-0x4(%rsi,%rdx,4)
L97:
  add    $0x1,%rax
  cmp    %r14,%rax
  je     L122
L76:
  mov    0x0(%rbp,%rax,4),%ecx
  movslq %ecx,%r15
  lea    0x0(,%r15,8),%rdx
  movsd  -0x8(%rdi,%rdx,1),%xmm0
  comisd %xmm1,%xmm0
  jbe    L151
  comisd (%r12,%rax,8),%xmm3
  ja     L22
L151:
  comisd -0x8(%r11,%rdx,1),%xmm2
  jbe    L97
  movsd  (%r12,%rax,8),%xmm0
  comisd %xmm4,%xmm0
  jbe    L97
  jmp    L22
L122:
  test   %r9d,%r9d
  jle    L117
L187:
  mov    $0x1,%eax
  movsd  D2(%rip),%xmm1
  movsd  D13(%rip),%xmm2
  movapd %xmm2,%xmm4
  movapd %xmm1,%xmm3
  jmp    L100
L189:
  cmpl   $0x0,-0x4(%rsi,%rbp,4)
  jne    L58
  movslq %r10d,%rdx
  sub    $0x1,%ecx
  mov    %ecx,0x0(%r13,%rdx,4)
  add    $0x1,%r10d
  movslq (%rbx,%rax,4),%rdx
  movl   $0x1,-0x4(%rsi,%rdx,4)
L58:
  add    $0x1,%rax
  cmp    %eax,%r9d
  jl     L117
L100:
  mov    (%rbx,%rax,4),%ecx
  movslq %ecx,%rbp
  lea    0x0(,%rbp,8),%rdx
  movsd  -0x8(%rdi,%rdx,1),%xmm0
  comisd %xmm1,%xmm0
  jbe    L201
  comisd (%r8,%rax,8),%xmm3
  ja     L189
L201:
  comisd -0x8(%r11,%rdx,1),%xmm2
  jbe    L58
  movsd  (%r8,%rax,8),%xmm0
  comisd %xmm4,%xmm0
  jbe    L58
  jmp    L189
L117:
  test   %r10d,%r10d
  jle    L138
  mov    %r13,%rax
  lea    -0x1(%r10),%edx
  lea    0x4(%r13,%rdx,4),%rcx
L175:
  movslq (%rax),%rdx
  movl   $0x0,(%rsi,%rdx,4)
  add    $0x4,%rax
  cmp    %rcx,%rax
  jne    L175
L138:
  mov    %r10d,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L139:
  mov    $0x0,%r10d
  test   %r9d,%r9d
  jg     L187
  jmp    L138
```

tool_calls: name: unpack_data
arguments: data_tag: D2
type: byte[8]
name: unpack_data
arguments: data_tag: D13
type: byte[8]

tool: {"D2": [0x8d,0xed,0xb5,0xa0,0xf7,0xc6,0xb0,0xbe]}

tool: {"D13": [0x8d,0xed,0xb5,0xa0,0xf7,0xc6,0xb0,0x3e]}

assistant: ```c
int get_changedRxns_by_two_mets(int *IA, double *VA, int lenA, int *IB, double *VB, int lenB, double *lb, double *ub, int *tmprun, int *changedRxn) {
  int i, j, k;
  k = 0;
  for (i = 1; i < lenA + 1; i++) {
    if ((lb[IA[i] - 1] > -1e-6 && VA[i] < -1e-6) || (ub[IA[i] - 1] < 1e-6 && VA[i] > 1e-6)) {
      if (tmprun[IA[i] - 1] == 0) {
        changedRxn[k] = IA[i] - 1;
        k = k + 1;
        tmprun[IA[i] - 1] = 1;
      }
    }
  }
  for (i = 1; i < lenB + 1; i++) {
    if ((lb[IB[i] - 1] > -1e-6 && VB[i] < -1e-6) || (ub[IB[i] - 1] < 1e-6 && VB[i] > 1e-6)) {
      if (tmprun[IB[i] - 1] == 0) {
        changedRxn[k] = IB[i] - 1;
        k = k + 1;
        tmprun[IB[i] - 1] = 1;
      }
    }
  }
  for (i = 0; i < k; i++) {
    tmprun[changedRxn[i]] = 0;
  }
  return k;
}
```