user: 请将这段汇编代码片段转换成等效的C代码：

```asm
<main>:
  endbr64
  push   %r12
  xor    %eax,%eax
  call   <testinverse@plt>
  mov    %eax,%r12d
  test   %eax,%eax
  jne    L15
L276:
  xor    %eax,%eax
  call   <testdirect@plt>
  test   %eax,%eax
  jne    L279
L228:
  xor    %eax,%eax
  call   <testarcdirect@plt>
  test   %eax,%eax
  jne    L211
L201:
  xor    %eax,%eax
  call   <GeodSolve0@plt>
  test   %eax,%eax
  jne    L66
L409:
  xor    %eax,%eax
  call   <GeodSolve1@plt>
  test   %eax,%eax
  jne    L532
L17:
  xor    %eax,%eax
  call   <GeodSolve2@plt>
  test   %eax,%eax
  jne    L481
L195:
  xor    %eax,%eax
  call   <GeodSolve4@plt>
  test   %eax,%eax
  jne    L410
L557:
  xor    %eax,%eax
  call   <GeodSolve5@plt>
  test   %eax,%eax
  jne    L396
L348:
  xor    %eax,%eax
  call   <GeodSolve6@plt>
  test   %eax,%eax
  jne    L243
L578:
  xor    %eax,%eax
  call   <GeodSolve9@plt>
  test   %eax,%eax
  jne    L608
L503:
  xor    %eax,%eax
  call   <GeodSolve10@plt>
  test   %eax,%eax
  jne    L476
L142:
  xor    %eax,%eax
  call   <GeodSolve11@plt>
  test   %eax,%eax
  jne    L428
L472:
  xor    %eax,%eax
  call   <GeodSolve12@plt>
  test   %eax,%eax
  jne    L590
L524:
  xor    %eax,%eax
  call   <GeodSolve14@plt>
  test   %eax,%eax
  jne    L500
L531:
  xor    %eax,%eax
  call   <GeodSolve15@plt>
  test   %eax,%eax
  jne    L124
L225:
  xor    %eax,%eax
  call   <GeodSolve17@plt>
  test   %eax,%eax
  jne    L299
L387:
  xor    %eax,%eax
  call   <GeodSolve26@plt>
  test   %eax,%eax
  jne    L48
L283:
  xor    %eax,%eax
  call   <GeodSolve28@plt>
  test   %eax,%eax
  jne    L35
L19:
  xor    %eax,%eax
  call   <GeodSolve33@plt>
  test   %eax,%eax
  jne    L133
L273:
  xor    %eax,%eax
  call   <GeodSolve55@plt>
  test   %eax,%eax
  jne    L585
L115:
  xor    %eax,%eax
  call   <GeodSolve59@plt>
  test   %eax,%eax
  jne    L219
L237:
  xor    %eax,%eax
  call   <GeodSolve61@plt>
  test   %eax,%eax
  jne    L486
L160:
  xor    %eax,%eax
  call   <GeodSolve65@plt>
  test   %eax,%eax
  jne    L204
L92:
  xor    %eax,%eax
  call   <GeodSolve67@plt>
  test   %eax,%eax
  jne    L622
L83:
  xor    %eax,%eax
  call   <GeodSolve71@plt>
  test   %eax,%eax
  jne    L347
L443:
  xor    %eax,%eax
  call   <GeodSolve73@plt>
  test   %eax,%eax
  jne    L129
L50:
  xor    %eax,%eax
  call   <GeodSolve74@plt>
  test   %eax,%eax
  jne    L496
L408:
  xor    %eax,%eax
  call   <Planimeter0@plt>
  test   %eax,%eax
  jne    L248
L164:
  xor    %eax,%eax
  call   <Planimeter5@plt>
  test   %eax,%eax
  jne    L576
L326:
  xor    %eax,%eax
  call   <Planimeter6@plt>
  test   %eax,%eax
  jne    L541
L435:
  xor    %eax,%eax
  call   <Planimeter12@plt>
  test   %eax,%eax
  jne    L354
L265:
  xor    %eax,%eax
  call   <Planimeter13@plt>
  test   %eax,%eax
  jne    L605
L591:
  mov    %r12d,%eax
  pop    %r12
  ret
L15:
  mov    %eax,%esi
  lea    D15(%rip),%rdi
  mov    $0x1,%r12d
  call   <printf@plt>
  jmp    L276
L605:
  mov    %eax,%esi
  lea    D258(%rip),%rdi
  add    $0x1,%r12d
  call   <printf@plt>
  jmp    L591
L354:
  mov    %eax,%esi
  lea    D164(%rip),%rdi
  add    $0x1,%r12d
  call   <printf@plt>
  jmp    L265
L541:
  mov    %eax,%esi
  lea    D160(%rip),%rdi
  add    $0x1,%r12d
  call   <printf@plt>
  jmp    L435
L576:
  mov    %eax,%esi
  lea    D194(%rip),%rdi
  add    $0x1,%r12d
  call   <printf@plt>
  jmp    L326
L248:
  mov    %eax,%esi
  lea    D175(%rip),%rdi
  add    $0x1,%r12d
  call   <printf@plt>
  jmp    L164
L496:
  mov    %eax,%esi
  lea    D206(%rip),%rdi
  add    $0x1,%r12d
  call   <printf@plt>
  jmp    L408
L129:
  mov    %eax,%esi
  lea    D120(%rip),%rdi
  add    $0x1,%r12d
  call   <printf@plt>
  jmp    L50
L347:
  mov    %eax,%esi
  lea    D165(%rip),%rdi
  add    $0x1,%r12d
  call   <printf@plt>
  jmp    L443
L622:
  mov    %eax,%esi
  lea    D118(%rip),%rdi
  add    $0x1,%r12d
  call   <printf@plt>
  jmp    L83
L204:
  mov    %eax,%esi
  lea    D69(%rip),%rdi
  add    $0x1,%r12d
  call   <printf@plt>
  jmp    L92
L486:
  mov    %eax,%esi
  lea    D130(%rip),%rdi
  add    $0x1,%r12d
  call   <printf@plt>
  jmp    L160
L219:
  mov    %eax,%esi
  lea    D2(%rip),%rdi
  add    $0x1,%r12d
  call   <printf@plt>
  jmp    L237
L585:
  mov    %eax,%esi
  lea    D277(%rip),%rdi
  add    $0x1,%r12d
  call   <printf@plt>
  jmp    L115
L133:
  mov    %eax,%esi
  lea    D131(%rip),%rdi
  add    $0x1,%r12d
  call   <printf@plt>
  jmp    L273
L35:
  mov    %eax,%esi
  lea    D266(%rip),%rdi
  add    $0x1,%r12d
  call   <printf@plt>
  jmp    L19
L48:
  mov    %eax,%esi
  lea    D19(%rip),%rdi
  add    $0x1,%r12d
  call   <printf@plt>
  jmp    L283
L299:
  mov    %eax,%esi
  lea    D196(%rip),%rdi
  add    $0x1,%r12d
  call   <printf@plt>
  jmp    L387
L124:
  mov    %eax,%esi
  lea    D316(%rip),%rdi
  add    $0x1,%r12d
  call   <printf@plt>
  jmp    L225
L500:
  mov    %eax,%esi
  lea    D128(%rip),%rdi
  add    $0x1,%r12d
  call   <printf@plt>
  jmp    L531
L590:
  mov    %eax,%esi
  lea    D314(%rip),%rdi
  add    $0x1,%r12d
  call   <printf@plt>
  jmp    L524
L428:
  mov    %eax,%esi
  lea    D219(%rip),%rdi
  add    $0x1,%r12d
  call   <printf@plt>
  jmp    L472
L476:
  mov    %eax,%esi
  lea    D253(%rip),%rdi
  add    $0x1,%r12d
  call   <printf@plt>
  jmp    L142
L608:
  mov    %eax,%esi
  lea    D218(%rip),%rdi
  add    $0x1,%r12d
  call   <printf@plt>
  jmp    L503
L243:
  mov    %eax,%esi
  lea    D163(%rip),%rdi
  add    $0x1,%r12d
  call   <printf@plt>
  jmp    L578
L396:
  mov    %eax,%esi
  lea    D50(%rip),%rdi
  add    $0x1,%r12d
  call   <printf@plt>
  jmp    L348
L410:
  mov    %eax,%esi
  lea    D4(%rip),%rdi
  add    $0x1,%r12d
  call   <printf@plt>
  jmp    L557
L481:
  mov    %eax,%esi
  lea    D286(%rip),%rdi
  add    $0x1,%r12d
  call   <printf@plt>
  jmp    L195
L532:
  mov    %eax,%esi
  lea    D78(%rip),%rdi
  add    $0x1,%r12d
  call   <printf@plt>
  jmp    L17
L66:
  mov    %eax,%esi
  lea    D265(%rip),%rdi
  add    $0x1,%r12d
  call   <printf@plt>
  jmp    L409
L211:
  mov    %eax,%esi
  lea    D276(%rip),%rdi
  add    $0x1,%r12d
  call   <printf@plt>
  jmp    L201
L279:
  mov    %eax,%esi
  lea    D54(%rip),%rdi
  add    $0x1,%r12d
  call   <printf@plt>
  jmp    L228
```

tool_calls: name: unpack_data
arguments: label: D15
datatype: string
name: unpack_data
arguments: label: D258
datatype: string
name: unpack_data
arguments: label: D164
datatype: string
name: unpack_data
arguments: label: D160
datatype: string
name: unpack_data
arguments: label: D194
datatype: string
name: unpack_data
arguments: label: D175
datatype: string
name: unpack_data
arguments: label: D206
datatype: string
name: unpack_data
arguments: label: D120
datatype: string
name: unpack_data
arguments: label: D165
datatype: string
name: unpack_data
arguments: label: D118
datatype: string
name: unpack_data
arguments: label: D69
datatype: string
name: unpack_data
arguments: label: D130
datatype: string
name: unpack_data
arguments: label: D2
datatype: string
name: unpack_data
arguments: label: D277
datatype: string
name: unpack_data
arguments: label: D131
datatype: string
name: unpack_data
arguments: label: D266
datatype: string
name: unpack_data
arguments: label: D19
datatype: string
name: unpack_data
arguments: label: D196
datatype: string
name: unpack_data
arguments: label: D316
datatype: string
name: unpack_data
arguments: label: D128
datatype: string
name: unpack_data
arguments: label: D314
datatype: string
name: unpack_data
arguments: label: D219
datatype: string
name: unpack_data
arguments: label: D253
datatype: string
name: unpack_data
arguments: label: D218
datatype: string
name: unpack_data
arguments: label: D163
datatype: string
name: unpack_data
arguments: label: D50
datatype: string
name: unpack_data
arguments: label: D4
datatype: string
name: unpack_data
arguments: label: D286
datatype: string
name: unpack_data
arguments: label: D78
datatype: string
name: unpack_data
arguments: label: D265
datatype: string
name: unpack_data
arguments: label: D276
datatype: string
name: unpack_data
arguments: label: D54
datatype: string

tool: D15: testinverse fail: %d


tool: D258: Planimeter13 fail: %d


tool: D164: Planimeter12 fail: %d


tool: D160: Planimeter6 fail: %d


tool: D194: Planimeter5 fail: %d


tool: D175: Planimeter0 fail: %d


tool: D206: GeodSolve74 fail: %d


tool: D120: GeodSolve73 fail: %d


tool: D165: GeodSolve71 fail: %d


tool: D118: GeodSolve67 fail: %d


tool: D69: GeodSolve65 fail: %d


tool: D130: GeodSolve61 fail: %d


tool: D2: GeodSolve59 fail: %d


tool: D277: GeodSolve55 fail: %d


tool: D131: GeodSolve33 fail: %d


tool: D266: GeodSolve28 fail: %d


tool: D19: GeodSolve26 fail: %d


tool: D196: GeodSolve17 fail: %d


tool: D316: GeodSolve15 fail: %d


tool: D128: GeodSolve14 fail: %d


tool: D314: GeodSolve12 fail: %d


tool: D219: GeodSolve11 fail: %d


tool: D253: GeodSolve10 fail: %d


tool: D218: GeodSolve9 fail: %d


tool: D163: GeodSolve6 fail: %d


tool: D50: GeodSolve5 fail: %d


tool: D4: GeodSolve4 fail: %d


tool: D286: GeodSolve2 fail: %d


tool: D78: GeodSolve1 fail: %d


tool: D265: GeodSolve0 fail: %d


tool: D276: testarcdirect fail: %d


tool: D54: testdirect fail: %d


assistant: ```c
int main() {
  int n = 0, i;
  if ((i = testinverse())) {
    ++n;
    printf("testinverse fail: %d\n", i);
  }
  if ((i = testdirect())) {
    ++n;
    printf("testdirect fail: %d\n", i);
  }
  if ((i = testarcdirect())) {
    ++n;
    printf("testarcdirect fail: %d\n", i);
  }
  if ((i = GeodSolve0())) {
    ++n;
    printf("GeodSolve0 fail: %d\n", i);
  }
  if ((i = GeodSolve1())) {
    ++n;
    printf("GeodSolve1 fail: %d\n", i);
  }
  if ((i = GeodSolve2())) {
    ++n;
    printf("GeodSolve2 fail: %d\n", i);
  }
  if ((i = GeodSolve4())) {
    ++n;
    printf("GeodSolve4 fail: %d\n", i);
  }
  if ((i = GeodSolve5())) {
    ++n;
    printf("GeodSolve5 fail: %d\n", i);
  }
  if ((i = GeodSolve6())) {
    ++n;
    printf("GeodSolve6 fail: %d\n", i);
  }
  if ((i = GeodSolve9())) {
    ++n;
    printf("GeodSolve9 fail: %d\n", i);
  }
  if ((i = GeodSolve10())) {
    ++n;
    printf("GeodSolve10 fail: %d\n", i);
  }
  if ((i = GeodSolve11())) {
    ++n;
    printf("GeodSolve11 fail: %d\n", i);
  }
  if ((i = GeodSolve12())) {
    ++n;
    printf("GeodSolve12 fail: %d\n", i);
  }
  if ((i = GeodSolve14())) {
    ++n;
    printf("GeodSolve14 fail: %d\n", i);
  }
  if ((i = GeodSolve15())) {
    ++n;
    printf("GeodSolve15 fail: %d\n", i);
  }
  if ((i = GeodSolve17())) {
    ++n;
    printf("GeodSolve17 fail: %d\n", i);
  }
  if ((i = GeodSolve26())) {
    ++n;
    printf("GeodSolve26 fail: %d\n", i);
  }
  if ((i = GeodSolve28())) {
    ++n;
    printf("GeodSolve28 fail: %d\n", i);
  }
  if ((i = GeodSolve33())) {
    ++n;
    printf("GeodSolve33 fail: %d\n", i);
  }
  if ((i = GeodSolve55())) {
    ++n;
    printf("GeodSolve55 fail: %d\n", i);
  }
  if ((i = GeodSolve59())) {
    ++n;
    printf("GeodSolve59 fail: %d\n", i);
  }
  if ((i = GeodSolve61())) {
    ++n;
    printf("GeodSolve61 fail: %d\n", i);
  }
  if ((i = GeodSolve65())) {
    ++n;
    printf("GeodSolve65 fail: %d\n", i);
  }
  if ((i = GeodSolve67())) {
    ++n;
    printf("GeodSolve67 fail: %d\n", i);
  }
  if ((i = GeodSolve71())) {
    ++n;
    printf("GeodSolve71 fail: %d\n", i);
  }
  if ((i = GeodSolve73())) {
    ++n;
    printf("GeodSolve73 fail: %d\n", i);
  }
  if ((i = GeodSolve74())) {
    ++n;
    printf("GeodSolve74 fail: %d\n", i);
  }
  if ((i = Planimeter0())) {
    ++n;
    printf("Planimeter0 fail: %d\n", i);
  }
  if ((i = Planimeter5())) {
    ++n;
    printf("Planimeter5 fail: %d\n", i);
  }
  if ((i = Planimeter6())) {
    ++n;
    printf("Planimeter6 fail: %d\n", i);
  }
  if ((i = Planimeter12())) {
    ++n;
    printf("Planimeter12 fail: %d\n", i);
  }
  if ((i = Planimeter13())) {
    ++n;
    printf("Planimeter13 fail: %d\n", i);
  }
  return n;
}
```