user: Converte this assembly snippet into its equivalent C code:

```asm
<floydWarshall>:
  endbr64
  sub    $0x58,%rsp
  movdqu 0x30(%rdi),%xmm0
  movdqu (%rdi),%xmm1
  mov    %fs:0x28,%rax
  mov    %rax,0x48(%rsp)
  xor    %eax,%eax
  movdqu 0x10(%rdi),%xmm2
  movdqu 0x20(%rdi),%xmm3
  mov    %rsp,%r9
  movaps %xmm0,0x30(%rsp)
  pshufd $0xff,%xmm0,%xmm0
  mov    %r9,%rdx
  mov    %r9,%rax
  movaps %xmm1,(%rsp)
  movd   %xmm0,%esi
  lea    0x40(%rsp),%r8
  movaps %xmm2,0x10(%rsp)
  movaps %xmm3,0x20(%rsp)
L105:
  mov    (%rdx),%ecx
  mov    (%rax),%edi
  add    %ecx,%edi
  cmp    %edi,(%rsp)
  jle    L151
  mov    %edi,(%rsp)
  mov    (%rdx),%ecx
L151:
  mov    0x4(%rax),%edi
  add    %ecx,%edi
  cmp    %edi,0x4(%rsp)
  jle    L44
  mov    %edi,0x4(%rsp)
  mov    (%rdx),%ecx
L44:
  mov    0x8(%rax),%edi
  add    %ecx,%edi
  cmp    0x8(%rsp),%edi
  jge    L166
  mov    %edi,0x8(%rsp)
  mov    (%rdx),%ecx
L166:
  add    0xc(%rax),%ecx
  cmp    0xc(%rsp),%ecx
  jge    L68
  mov    %ecx,0xc(%rsp)
L68:
  mov    0x10(%rdx),%ecx
  mov    (%rax),%edi
  add    %ecx,%edi
  cmp    %edi,0x10(%rsp)
  jle    L112
  mov    %edi,0x10(%rsp)
  mov    0x10(%rdx),%ecx
L112:
  mov    0x4(%rax),%edi
  add    %ecx,%edi
  cmp    0x14(%rsp),%edi
  jge    L111
  mov    %edi,0x14(%rsp)
  mov    0x10(%rdx),%ecx
L111:
  mov    0x8(%rax),%edi
  add    %ecx,%edi
  cmp    0x18(%rsp),%edi
  jge    L136
  mov    %edi,0x18(%rsp)
  mov    0x10(%rdx),%ecx
L136:
  add    0xc(%rax),%ecx
  cmp    0x1c(%rsp),%ecx
  jge    L66
  mov    %ecx,0x1c(%rsp)
L66:
  mov    0x20(%rdx),%ecx
  mov    (%rax),%edi
  add    %ecx,%edi
  cmp    0x20(%rsp),%edi
  jge    L128
  mov    %edi,0x20(%rsp)
  mov    0x20(%rdx),%ecx
L128:
  mov    0x4(%rax),%edi
  add    %ecx,%edi
  cmp    0x24(%rsp),%edi
  jge    L131
  mov    %edi,0x24(%rsp)
  mov    0x20(%rdx),%ecx
L131:
  mov    0x8(%rax),%edi
  add    %ecx,%edi
  cmp    0x28(%rsp),%edi
  jge    L11
  mov    %edi,0x28(%rsp)
  mov    0x20(%rdx),%ecx
L11:
  add    0xc(%rax),%ecx
  cmp    0x2c(%rsp),%ecx
  jge    L148
  mov    %ecx,0x2c(%rsp)
L148:
  mov    0x30(%rdx),%ecx
  mov    (%rax),%edi
  add    %ecx,%edi
  cmp    0x30(%rsp),%edi
  jge    L96
  mov    %edi,0x30(%rsp)
  mov    0x30(%rdx),%ecx
L96:
  mov    0x4(%rax),%edi
  add    %ecx,%edi
  cmp    0x34(%rsp),%edi
  jge    L157
  mov    %edi,0x34(%rsp)
  mov    0x30(%rdx),%ecx
L157:
  mov    0x8(%rax),%edi
  add    %ecx,%edi
  cmp    0x38(%rsp),%edi
  jge    L125
  mov    %edi,0x38(%rsp)
  mov    0x30(%rdx),%ecx
L125:
  add    0xc(%rax),%ecx
  cmp    %ecx,%esi
  jle    L33
  mov    %ecx,0x3c(%rsp)
  mov    %ecx,%esi
L33:
  add    $0x10,%rax
  add    $0x4,%rdx
  cmp    %r8,%rax
  jne    L105
  mov    %r9,%rdi
  call   <printSolution@plt>
  mov    0x48(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L144
  add    $0x58,%rsp
  ret
L144:
  call   <__stack_chk_fail@plt>
```

assistant: ```c
void floydWarshall(int graph[][4]) {
  int dist[4][4], i, j, k;
  for (i = 0; i < 4; i++)
    for (j = 0; j < 4; j++)
      dist[i][j] = graph[i][j];
  for (k = 0; k < 4; k++) {
    for (i = 0; i < 4; i++) {
      for (j = 0; j < 4; j++) {
        if (dist[i][k] + dist[k][j] < dist[i][j])
          dist[i][j] = dist[i][k] + dist[k][j];
      }
    }
  }
  printSolution(dist);
}
```