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

```asm
<solve_at_xy>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x30,%rsp
  mov    %rdi,-0x28(%rbp)
  mov    %esi,-0x2c(%rbp)
  mov    %edx,-0x30(%rbp)
  movl   $0x1,-0x14(%rbp)
  jmp    L325
L165:
  mov    -0x30(%rbp),%ecx
  mov    -0x2c(%rbp),%edx
  mov    -0x14(%rbp),%esi
  mov    -0x28(%rbp),%rax
  mov    %rax,%rdi
  call   <check_conflict@plt>
  cmp    $0x1,%eax
  je     L345
  movl   $0x0,-0x10(%rbp)
  jmp    L286
L114:
  mov    -0x2c(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x3,%rax
  add    %rdx,%rax
  shl    $0x2,%rax
  mov    %rax,%rdx
  mov    -0x28(%rbp),%rax
  add    %rax,%rdx
  mov    -0x10(%rbp),%eax
  cltq
  mov    (%rdx,%rax,4),%eax
  test   %eax,%eax
  jne    L189
  mov    -0x10(%rbp),%eax
  cmp    -0x30(%rbp),%eax
  je     L189
  mov    -0x10(%rbp),%ecx
  mov    -0x2c(%rbp),%edx
  mov    -0x14(%rbp),%esi
  mov    -0x28(%rbp),%rax
  mov    %rax,%rdi
  call   <check_conflict@plt>
  test   %eax,%eax
  je     L18
  jmp    L224
L189:
  nop
L224:
  addl   $0x1,-0x10(%rbp)
L286:
  cmpl   $0x8,-0x10(%rbp)
  jle    L114
  jmp    L63
L18:
  nop
L63:
  cmpl   $0x9,-0x10(%rbp)
  jne    L145
  mov    -0x14(%rbp),%eax
  jmp    L217
L145:
  movl   $0x0,-0x10(%rbp)
  jmp    L296
L70:
  mov    -0x10(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x3,%rax
  add    %rdx,%rax
  shl    $0x2,%rax
  mov    %rax,%rdx
  mov    -0x28(%rbp),%rax
  add    %rax,%rdx
  mov    -0x30(%rbp),%eax
  cltq
  mov    (%rdx,%rax,4),%eax
  test   %eax,%eax
  jne    L24
  mov    -0x10(%rbp),%eax
  cmp    -0x2c(%rbp),%eax
  je     L24
  mov    -0x30(%rbp),%ecx
  mov    -0x10(%rbp),%edx
  mov    -0x14(%rbp),%esi
  mov    -0x28(%rbp),%rax
  mov    %rax,%rdi
  call   <check_conflict@plt>
  test   %eax,%eax
  je     L76
  jmp    L215
L24:
  nop
L215:
  addl   $0x1,-0x10(%rbp)
L296:
  cmpl   $0x8,-0x10(%rbp)
  jle    L70
  jmp    L161
L76:
  nop
L161:
  cmpl   $0x9,-0x10(%rbp)
  jne    L197
  mov    -0x14(%rbp),%eax
  jmp    L217
L197:
  mov    -0x2c(%rbp),%eax
  movslq %eax,%rdx
  imul   $0x55555556,%rdx,%rdx
  shr    $0x20,%rdx
  mov    %eax,%esi
  sar    $0x1f,%esi
  mov    %edx,%ecx
  sub    %esi,%ecx
  mov    %ecx,%edx
  add    %edx,%edx
  add    %ecx,%edx
  sub    %edx,%eax
  mov    %eax,%ecx
  mov    -0x2c(%rbp),%eax
  sub    %ecx,%eax
  mov    %eax,-0x8(%rbp)
  mov    -0x30(%rbp),%eax
  movslq %eax,%rdx
  imul   $0x55555556,%rdx,%rdx
  shr    $0x20,%rdx
  mov    %eax,%esi
  sar    $0x1f,%esi
  mov    %edx,%ecx
  sub    %esi,%ecx
  mov    %ecx,%edx
  add    %edx,%edx
  add    %ecx,%edx
  sub    %edx,%eax
  mov    %eax,%ecx
  mov    -0x30(%rbp),%eax
  sub    %ecx,%eax
  mov    %eax,-0x4(%rbp)
  mov    -0x8(%rbp),%eax
  mov    %eax,-0x10(%rbp)
  jmp    L341
L326:
  mov    -0x4(%rbp),%eax
  mov    %eax,-0xc(%rbp)
  jmp    L17
L267:
  mov    -0x10(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x3,%rax
  add    %rdx,%rax
  shl    $0x2,%rax
  mov    %rax,%rdx
  mov    -0x28(%rbp),%rax
  add    %rax,%rdx
  mov    -0xc(%rbp),%eax
  cltq
  mov    (%rdx,%rax,4),%eax
  test   %eax,%eax
  jne    L281
  mov    -0x10(%rbp),%eax
  cmp    -0x2c(%rbp),%eax
  jne    L207
  mov    -0xc(%rbp),%eax
  cmp    -0x30(%rbp),%eax
  je     L281
L207:
  mov    -0xc(%rbp),%ecx
  mov    -0x10(%rbp),%edx
  mov    -0x14(%rbp),%esi
  mov    -0x28(%rbp),%rax
  mov    %rax,%rdi
  call   <check_conflict@plt>
  test   %eax,%eax
  je     L308
  jmp    L278
L281:
  nop
L278:
  addl   $0x1,-0xc(%rbp)
L17:
  mov    -0x4(%rbp),%eax
  add    $0x2,%eax
  cmp    %eax,-0xc(%rbp)
  jle    L267
  jmp    L90
L308:
  nop
L90:
  mov    -0x4(%rbp),%eax
  add    $0x2,%eax
  cmp    %eax,-0xc(%rbp)
  jle    L241
  addl   $0x1,-0x10(%rbp)
L341:
  mov    -0x8(%rbp),%eax
  add    $0x2,%eax
  cmp    %eax,-0x10(%rbp)
  jle    L326
  jmp    L317
L241:
  nop
L317:
  mov    -0x8(%rbp),%eax
  add    $0x3,%eax
  cmp    %eax,-0x10(%rbp)
  jne    L184
  mov    -0x4(%rbp),%eax
  add    $0x3,%eax
  cmp    %eax,-0xc(%rbp)
  jne    L184
  mov    -0x14(%rbp),%eax
  jmp    L217
L345:
  nop
L184:
  addl   $0x1,-0x14(%rbp)
L325:
  cmpl   $0x9,-0x14(%rbp)
  jle    L165
  mov    $0x0,%eax
L217:
  leave
  ret
```

assistant: ```c
int solve_at_xy(const int sudoku[9][9], const int row_no, const int column_no) {
  int test_value, i, j, row_start, column_start;
  for (test_value = 1; test_value <= 9; ++test_value) {
    if (check_conflict(sudoku, test_value, row_no, column_no) == 1) {
      continue;
    }
    for (i = 0; i < 9; ++i) {
      if ((sudoku[row_no][i] != 0) || (i == column_no)) {
        continue;
      }
      if (check_conflict(sudoku, test_value, row_no, i) == 0) {
        break;
      }
    }
    if (i == 9) {
      return test_value;
    }
    for (i = 0; i < 9; ++i) {
      if ((sudoku[i][column_no] != 0) || (i == row_no)) {
        continue;
      }
      if (check_conflict(sudoku, test_value, i, column_no) == 0) {
        break;
      }
    }
    if (i == 9) {
      return test_value;
    }
    row_start = row_no - (row_no % 3);
    column_start = column_no - (column_no % 3);
    for (i = row_start; i < row_start + 3; ++i) {
      for (j = column_start; j < column_start + 3; ++j) {
        if ((sudoku[i][j] != 0) || (i == row_no && j == column_no)) {
          continue;
        }
        if (check_conflict(sudoku, test_value, i, j) == 0) {
          break;
        }
      }
      if (j < column_start + 3) {
        break;
      }
    }
    if ((i == row_start + 3) && (j == column_start + 3)) {
      return test_value;
    }
  }
  return 0;
}
```