user: What is the c source code of the assembly code below:

```asm
<CreateCounts>:
  endbr64
  push   %r12
  push   %rbp
  mov    %rdi,%rbp
  sub    $0x8,%rsp
  cmp    $0x20,%esi
  je     L9
  mov    %esi,%r12d
  cmp    $0x8,%esi
  ja     L17
  lea    D6(%rip),%rsi
  xor    %eax,%eax
  call   <Output@plt>
  lea    D25(%rip),%rsi
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <Output@plt>
  lea    D68(%rip),%rsi
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <Output@plt>
  lea    D31(%rip),%rsi
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <Output@plt>
  lea    D88(%rip),%rsi
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <Output@plt>
L25:
  mov    %rbp,%rdi
  lea    D107(%rip),%rsi
  xor    %eax,%eax
  call   <Output@plt>
  mov    $0x20,%eax
  xor    %edx,%edx
  mov    %rbp,%rdi
  div    %r12d
  lea    D17(%rip),%rsi
  mov    %eax,%edx
  mov    %eax,%r12d
  xor    %eax,%eax
  call   <Output@plt>
  mov    %rbp,%rdi
  lea    D54(%rip),%rsi
  xor    %eax,%eax
  call   <Output@plt>
  add    $0x8,%rsp
  mov    %r12d,%edx
  mov    %rbp,%rdi
  lea    D9(%rip),%rsi
  pop    %rbp
  xor    %eax,%eax
  pop    %r12
  jmp    1050 <Output@plt>
  nopw   0x0(%rax,%rax,1)
L17:
  lea    D27(%rip),%rsi
  xor    %eax,%eax
  call   <Output@plt>
  jmp    L25
  nopl   0x0(%rax,%rax,1)
L9:
  add    $0x8,%rsp
  lea    D87(%rip),%rsi
  xor    %eax,%eax
  pop    %rbp
  pop    %r12
  jmp    1050 <Output@plt>
```

tool_calls: name: extract_symbolic_data
arguments: tag: D6
datatype: string
name: extract_symbolic_data
arguments: tag: D25
datatype: string
name: extract_symbolic_data
arguments: tag: D68
datatype: string
name: extract_symbolic_data
arguments: tag: D31
datatype: string
name: extract_symbolic_data
arguments: tag: D88
datatype: string
name: extract_symbolic_data
arguments: tag: D107
datatype: string
name: extract_symbolic_data
arguments: tag: D17
datatype: string
name: extract_symbolic_data
arguments: tag: D54
datatype: string
name: extract_symbolic_data
arguments: tag: D9
datatype: string
name: extract_symbolic_data
arguments: tag: D27
datatype: string
name: extract_symbolic_data
arguments: tag: D87
datatype: string

tool: D6: LeftCount = (ULONG_PTR) DestBase & 0x03;


tool: D25: if ((ULONG)(BltInfo->DestRect.right - BltInfo->DestRect.left) < LeftCount)


tool: D68: {


tool: D31: LeftCount = BltInfo->DestRect.right - BltInfo->DestRect.left;


tool: D88: }


tool: D107: CenterCount = (BltInfo->DestRect.right - BltInfo->DestRect.left -


tool: D17:                LeftCount) / %u;


tool: D54: RightCount = (BltInfo->DestRect.right - BltInfo->DestRect.left -


tool: D9:               LeftCount - %u * CenterCount);


tool: D27: LeftCount = ((ULONG_PTR) DestBase >> 1) & 0x01;


tool: D87: CenterCount = BltInfo->DestRect.right - BltInfo->DestRect.left;


assistant: ```c
void CreateCounts(FILE *Out, unsigned Bpp) {
  ;
  if (32 != Bpp) {
    if (8 < Bpp) {
      Output(Out, "LeftCount = ((ULONG_PTR) DestBase >> 1) & 0x01;\n");
    } else {
      Output(Out, "LeftCount = (ULONG_PTR) DestBase & 0x03;\n");
      Output(Out, "if ((ULONG)(BltInfo->DestRect.right - BltInfo->DestRect.left) < "
                  "LeftCount)\n");
      Output(Out, "{\n");
      Output(Out, "LeftCount = BltInfo->DestRect.right - "
                  "BltInfo->DestRect.left;\n");
      Output(Out, "}\n");
    }
    Output(Out, "CenterCount = (BltInfo->DestRect.right - BltInfo->DestRect.left -\n");
    Output(Out, "               LeftCount) / %u;\n", 32 / Bpp);
    Output(Out, "RightCount = (BltInfo->DestRect.right - BltInfo->DestRect.left -\n");
    Output(Out, "              LeftCount - %u * CenterCount);\n", 32 / Bpp);
  } else {
    Output(Out, "CenterCount = BltInfo->DestRect.right - BltInfo->DestRect.left;\n");
  }
}
```