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

```asm
<sgf_move>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0xde8,%rsp
  mov    %edi,%ebx
  mov    %rsi,%r13
  mov    %fs:0x28,%rax
  mov    %rax,0xdd8(%rsp)
  xor    %eax,%eax
  call   <get_board_size@plt>
  mov    %eax,%r14d
  mov    %r13,%rdi
  call   <strlen@plt>
  test   %eax,%eax
  je     L10
  mov    %r13,%rdi
  call   <strlen@plt>
  mov    $0x0,%ebp
  cmp    $0x2,%eax
  jg     L22
  movsbl 0x0(%r13),%r12d
  sub    $0x61,%r12d
  js     L20
  cmp    %r12d,%r14d
  jl     L20
  movsbl 0x1(%r13),%eax
  sub    $0x61,%eax
  mov    %r14d,%r13d
  sub    %eax,%r13d
  sub    $0x1,%r13d
  js     L68
  cmp    %r13d,%r14d
  jl     L68
  mov    %r13d,%edx
  mov    %r12d,%esi
  mov    %ebx,%edi
  call   <set_vertex@plt>
  mov    $0x0,%eax
  call   <scan_board_1@plt>
  mov    %ebx,%edi
  neg    %edi
  call   <remove_stones@plt>
  test   %eax,%eax
  jg     L100
L102:
  mov    %r13d,%esi
  mov    %r12d,%edi
  call   <get_worm_nr@plt>
  mov    %eax,%r14d
  mov    %eax,%edi
  call   <get_nr_of_liberties@plt>
  mov    %eax,%ebp
  mov    %r14d,%edi
  call   <get_size_of_worm@plt>
  mov    %eax,%r14d
  test   %ebp,%ebp
  je     L25
  lea    0x10(%rsp),%r15
  mov    %r15,%rdi
  call   <get_captured_now@plt>
  mov    %eax,0xc(%rsp)
  mov    $0x0,%eax
  call   <create_next_move@plt>
  mov    %r13d,%edx
  mov    %r12d,%esi
  mov    %ebx,%edi
  call   <set_move_vertex@plt>
  mov    %r15,%rdi
  call   <set_move_captured_stones@plt>
  cmp    $0x1,%r14d
  sete   %dl
  cmp    $0x1,%ebp
  sete   %al
  test   %al,%dl
  je     L101
  cmpl   $0x1,0xc(%rsp)
  je     L65
L101:
  mov    $0x0,%eax
  call   <push_move@plt>
  mov    $0x1,%ebp
  jmp    L22
L10:
  call   <create_next_move@plt>
  mov    %ebx,%edi
  call   <set_move_pass@plt>
  mov    $0x0,%eax
  call   <push_move@plt>
  mov    $0x1,%ebp
L22:
  mov    0xdd8(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L58
  mov    %ebp,%eax
  add    $0xde8,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L100:
  mov    $0x0,%eax
  call   <scan_board_1@plt>
  jmp    L102
L25:
  mov    %r13d,%edx
  mov    %r12d,%esi
  mov    $0x0,%edi
  call   <set_vertex@plt>
  jmp    L22
L65:
  mov    0x14(%rsp),%esi
  mov    0x10(%rsp),%edi
  call   <set_move_ko@plt>
  jmp    L101
L20:
  mov    $0x0,%ebp
  jmp    L22
L68:
  mov    $0x0,%ebp
  jmp    L22
L58:
  call   <__stack_chk_fail@plt>
```

assistant: ```c
bool sgf_move(int color, char *value) {
  int i, j;
  int nr_of_removed_stones;
  int group_nr;
  int nr_of_liberties;
  int group_size;
  int captured_now[21 * 21][2];
  int board_size = get_board_size();
  if (strlen(value) == 0) {
    create_next_move();
    set_move_pass(color);
    push_move();
    return true;
  }
  if (strlen(value) > 2) {
    return false;
  }
  i = value[0] - 97;
  j = board_size - (value[1] - 97) - 1;
  if (i < 0 || i > board_size) {
    return false;
  }
  if (j < 0 || j > board_size) {
    return false;
  }
  set_vertex(color, i, j);
  scan_board_1();
  nr_of_removed_stones = remove_stones(color * -1);
  if (nr_of_removed_stones > 0) {
    scan_board_1();
  }
  group_nr = get_worm_nr(i, j);
  nr_of_liberties = get_nr_of_liberties(group_nr);
  group_size = get_size_of_worm(group_nr);
  if (nr_of_liberties == 0) {
    set_vertex(0, i, j);
    return false;
  }
  nr_of_removed_stones = get_captured_now(captured_now);
  create_next_move();
  set_move_vertex(color, i, j);
  set_move_captured_stones(captured_now);
  if (nr_of_removed_stones == 1 && group_size == 1 && nr_of_liberties == 1) {
    set_move_ko(captured_now[0][0], captured_now[0][1]);
  }
  push_move();
  return true;
}
```