user: Please show me the C implementation that matches the assembly code listed below:

```asm
<SHA256_Xcompare_18>:
  endbr64
  push   %r13
  xor    %esi,%esi
  mov    $0x20,%edx
  push   %r12
  push   %rbp
  add    $0xffffffffffffff80,%rsp
  movdqa D28(%rip),%xmm0
  mov    %fs:0x28,%rax
  mov    %rax,0x78(%rsp)
  xor    %eax,%eax
  lea    0x20(%rsp),%rbp
  lea    0x40(%rsp),%r13
  mov    %rsp,%r12
  movaps %xmm0,0x40(%rsp)
  movdqa D16(%rip),%xmm0
  mov    %rbp,%rdi
  movabs $0x241dd9179a272a2d,%rax
  mov    %rax,0x60(%rsp)
  movaps %xmm0,0x50(%rsp)
  movdqa D32(%rip),%xmm0
  movl   $0xf0b15dbe,0x68(%rsp)
  movaps %xmm0,(%rsp)
  movdqa D69(%rip),%xmm0
  movb   $0xab,0x6c(%rsp)
  movaps %xmm0,0x10(%rsp)
  call   <memset@plt>
  mov    $0x2d,%edx
  mov    %rbp,%rsi
  mov    %r13,%rdi
  call   <SHA256_VST@plt>
  mov    $0x20,%edx
  mov    %rbp,%rsi
  mov    %r12,%rdi
  lea    D34(%rip),%rcx
  call   <check_test@plt>
  xor    %esi,%esi
  mov    $0x20,%edx
  mov    %rbp,%rdi
  call   <memset@plt>
  mov    $0x2d,%edx
  mov    %rbp,%rsi
  mov    %r13,%rdi
  call   <SHA256_NSS@plt>
  mov    $0x20,%edx
  mov    %rbp,%rsi
  mov    %r12,%rdi
  lea    D11(%rip),%rcx
  call   <check_test@plt>
  xor    %esi,%esi
  mov    $0x20,%edx
  mov    %rbp,%rdi
  call   <memset@plt>
  mov    $0x2d,%edx
  mov    %rbp,%rsi
  mov    %r13,%rdi
  call   <SHA256_sodium@plt>
  mov    $0x20,%edx
  mov    %rbp,%rsi
  mov    %r12,%rdi
  lea    D22(%rip),%rcx
  call   <check_test@plt>
  mov    0x78(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L1
  sub    $0xffffffffffffff80,%rsp
  pop    %rbp
  pop    %r12
  pop    %r13
  ret
L1:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: disassemble_data
arguments: label: D28
type_infered: byte[16]
name: disassemble_data
arguments: label: D16
type_infered: byte[16]
name: disassemble_data
arguments: label: D32
type_infered: byte[16]
name: disassemble_data
arguments: label: D69
type_infered: byte[16]
name: disassemble_data
arguments: label: D34
type_infered: string
name: disassemble_data
arguments: label: D11
type_infered: string
name: disassemble_data
arguments: label: D22
type_infered: string

tool: {"D28": [0x33,0xe0,0xd6,0xac,0xcf,0xbe,0xab,0x03,0x0f,0x3d,0x3f,0xcd,0xe1,0x56,0x94,0x1a]}

tool: {"D16": [0xd7,0xdb,0x39,0x32,0x02,0xb6,0x33,0xd7,0xf9,0x67,0xdc,0x55,0xe0,0x68,0xfa,0x2f]}

tool: {"D32": [0x8b,0x7c,0xd1,0x0b,0x1f,0xad,0x84,0xae,0x4e,0x48,0x49,0xfe,0xe3,0x02,0x9e,0x1e]}

tool: {"D69": [0xd5,0x3e,0x01,0x50,0xc5,0x58,0xc8,0x9b,0xe5,0xee,0x01,0x9c,0xb0,0x5b,0xcd,0xdb]}

tool: D34: Disagreement between given answer and SHA256_VST in SHA256_Xcompare_18


tool: D11: Disagreement between given answer and SHA256_NSS in SHA256_Xcompare_18


tool: D22: Disagreement between given answer and SHA256_sodium in SHA256_Xcompare_18


assistant: ```c
void SHA256_Xcompare_18() {
  unsigned char input[45] = {51, 224, 214, 172, 207, 190, 171, 3, 15, 61, 63, 205, 225, 86, 148, 26, 215, 219, 57, 50, 2, 182, 51, 215, 249, 103, 220, 85, 224, 104, 250, 47, 45, 42, 39, 154, 23, 217, 29, 36, 190, 93, 177, 240, 171};
  unsigned char result0[32] = {0x8B, 0x7C, 0xD1, 0x0B, 0x1F, 0xAD, 0x84, 0xAE, 0x4E, 0x48, 0x49, 0xFE, 0xE3, 0x02, 0x9E, 0x1E, 0xD5, 0x3E, 0x01, 0x50, 0xC5, 0x58, 0xC8, 0x9B, 0xE5, 0xEE, 0x01, 0x9C, 0xB0, 0x5B, 0xCD, 0xDB};
  unsigned char result1[32];
  memset(result1, 0, 32);
  SHA256_VST(input, result1, 45);
  check_test(result0, result1, 32, "Disagreement between given answer and SHA256_VST in SHA256_Xcompare_18\n");
  memset(result1, 0, 32);
  SHA256_NSS(input, result1, 45);
  check_test(result0, result1, 32, "Disagreement between given answer and SHA256_NSS in SHA256_Xcompare_18\n");
  memset(result1, 0, 32);
  SHA256_sodium(input, result1, 45);
  check_test(result0, result1, 32, "Disagreement between given answer and SHA256_sodium in SHA256_Xcompare_18\n");
}
```