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

```asm
<lineTwoStep>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  add    $0xffffffffffffff80,%rsp
  mov    %edi,-0x74(%rbp)
  mov    %esi,-0x78(%rbp)
  mov    %edx,-0x7c(%rbp)
  mov    %ecx,-0x80(%rbp)
  mov    -0x80(%rbp),%eax
  sub    -0x78(%rbp),%eax
  mov    %eax,-0x68(%rbp)
  mov    -0x7c(%rbp),%eax
  sub    -0x74(%rbp),%eax
  mov    %eax,-0x64(%rbp)
  cmpl   $0x0,-0x68(%rbp)
  jns    L513
  negl   -0x68(%rbp)
  movl   $0xffffffff,-0x5c(%rbp)
  jmp    L457
L513:
  movl   $0x1,-0x5c(%rbp)
L457:
  cmpl   $0x0,-0x64(%rbp)
  jns    L73
  negl   -0x64(%rbp)
  movl   $0xffffffff,-0x60(%rbp)
  jmp    L631
L73:
  movl   $0x1,-0x60(%rbp)
L631:
  mov    -0x78(%rbp),%edx
  mov    -0x74(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <lpoint@plt>
  cmpl   $0x0,-0x64(%rbp)
  jne    L661
  cmpl   $0x0,-0x68(%rbp)
  je     L86
L661:
  mov    -0x80(%rbp),%edx
  mov    -0x7c(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <lpoint@plt>
  mov    -0x64(%rbp),%eax
  cmp    -0x68(%rbp),%eax
  jle    L142
  mov    -0x64(%rbp),%eax
  sub    $0x1,%eax
  sar    $0x2,%eax
  mov    %eax,-0x1c(%rbp)
  mov    -0x64(%rbp),%eax
  sub    $0x1,%eax
  and    $0x3,%eax
  mov    %eax,-0x18(%rbp)
  mov    -0x68(%rbp),%eax
  lea    0x0(,%rax,4),%edx
  mov    -0x64(%rbp),%eax
  lea    (%rax,%rax,1),%ecx
  mov    %edx,%eax
  sub    %ecx,%eax
  mov    %eax,-0x14(%rbp)
  cmpl   $0x0,-0x14(%rbp)
  jns    L576
  mov    -0x68(%rbp),%eax
  add    %eax,%eax
  mov    %eax,-0x8(%rbp)
  mov    -0x8(%rbp),%eax
  add    %eax,%eax
  mov    %eax,-0x4(%rbp)
  mov    -0x4(%rbp),%eax
  sub    -0x64(%rbp),%eax
  mov    %eax,-0x58(%rbp)
  movl   $0x0,-0x54(%rbp)
  jmp    L110
L704:
  mov    -0x60(%rbp),%eax
  add    %eax,-0x74(%rbp)
  mov    -0x60(%rbp),%eax
  sub    %eax,-0x7c(%rbp)
  cmpl   $0x0,-0x58(%rbp)
  jns    L538
  mov    -0x78(%rbp),%edx
  mov    -0x74(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <lpoint@plt>
  mov    -0x60(%rbp),%eax
  add    %eax,-0x74(%rbp)
  mov    -0x78(%rbp),%edx
  mov    -0x74(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <lpoint@plt>
  mov    -0x80(%rbp),%edx
  mov    -0x7c(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <lpoint@plt>
  mov    -0x60(%rbp),%eax
  sub    %eax,-0x7c(%rbp)
  mov    -0x80(%rbp),%edx
  mov    -0x7c(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <lpoint@plt>
  mov    -0x4(%rbp),%eax
  add    %eax,-0x58(%rbp)
  jmp    L471
L538:
  mov    -0x58(%rbp),%eax
  cmp    -0x8(%rbp),%eax
  jge    L452
  mov    -0x78(%rbp),%edx
  mov    -0x74(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <lpoint@plt>
  mov    -0x5c(%rbp),%eax
  add    %eax,-0x78(%rbp)
  mov    -0x60(%rbp),%eax
  add    %eax,-0x74(%rbp)
  mov    -0x78(%rbp),%edx
  mov    -0x74(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <lpoint@plt>
  mov    -0x80(%rbp),%edx
  mov    -0x7c(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <lpoint@plt>
  mov    -0x5c(%rbp),%eax
  sub    %eax,-0x80(%rbp)
  mov    -0x60(%rbp),%eax
  sub    %eax,-0x7c(%rbp)
  mov    -0x80(%rbp),%edx
  mov    -0x7c(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <lpoint@plt>
  jmp    L383
L452:
  mov    -0x5c(%rbp),%eax
  add    %eax,-0x78(%rbp)
  mov    -0x78(%rbp),%edx
  mov    -0x74(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <lpoint@plt>
  mov    -0x60(%rbp),%eax
  add    %eax,-0x74(%rbp)
  mov    -0x78(%rbp),%edx
  mov    -0x74(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <lpoint@plt>
  mov    -0x5c(%rbp),%eax
  sub    %eax,-0x80(%rbp)
  mov    -0x80(%rbp),%edx
  mov    -0x7c(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <lpoint@plt>
  mov    -0x60(%rbp),%eax
  sub    %eax,-0x7c(%rbp)
  mov    -0x80(%rbp),%edx
  mov    -0x7c(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <lpoint@plt>
L383:
  mov    -0x14(%rbp),%eax
  add    %eax,-0x58(%rbp)
L471:
  addl   $0x1,-0x54(%rbp)
L110:
  mov    -0x54(%rbp),%eax
  cmp    -0x1c(%rbp),%eax
  jl     L704
  cmpl   $0x0,-0x18(%rbp)
  jle    L278
  cmpl   $0x0,-0x58(%rbp)
  jns    L277
  mov    -0x60(%rbp),%eax
  add    %eax,-0x74(%rbp)
  mov    -0x78(%rbp),%edx
  mov    -0x74(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <lpoint@plt>
  cmpl   $0x1,-0x18(%rbp)
  jle    L87
  mov    -0x60(%rbp),%eax
  add    %eax,-0x74(%rbp)
  mov    -0x78(%rbp),%edx
  mov    -0x74(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <lpoint@plt>
L87:
  cmpl   $0x2,-0x18(%rbp)
  jle    L278
  mov    -0x60(%rbp),%eax
  sub    %eax,-0x7c(%rbp)
  mov    -0x80(%rbp),%edx
  mov    -0x7c(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <lpoint@plt>
  jmp    L278
L277:
  mov    -0x58(%rbp),%eax
  cmp    -0x8(%rbp),%eax
  jge    L586
  mov    -0x60(%rbp),%eax
  add    %eax,-0x74(%rbp)
  mov    -0x78(%rbp),%edx
  mov    -0x74(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <lpoint@plt>
  cmpl   $0x1,-0x18(%rbp)
  jle    L603
  mov    -0x5c(%rbp),%eax
  add    %eax,-0x78(%rbp)
  mov    -0x60(%rbp),%eax
  add    %eax,-0x74(%rbp)
  mov    -0x78(%rbp),%edx
  mov    -0x74(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <lpoint@plt>
L603:
  cmpl   $0x2,-0x18(%rbp)
  jle    L278
  mov    -0x60(%rbp),%eax
  sub    %eax,-0x7c(%rbp)
  mov    -0x80(%rbp),%edx
  mov    -0x7c(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <lpoint@plt>
  jmp    L278
L586:
  mov    -0x5c(%rbp),%eax
  add    %eax,-0x78(%rbp)
  mov    -0x60(%rbp),%eax
  add    %eax,-0x74(%rbp)
  mov    -0x78(%rbp),%edx
  mov    -0x74(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <lpoint@plt>
  cmpl   $0x1,-0x18(%rbp)
  jle    L623
  mov    -0x60(%rbp),%eax
  add    %eax,-0x74(%rbp)
  mov    -0x78(%rbp),%edx
  mov    -0x74(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <lpoint@plt>
L623:
  cmpl   $0x2,-0x18(%rbp)
  jle    L278
  mov    -0x5c(%rbp),%eax
  sub    %eax,-0x80(%rbp)
  mov    -0x60(%rbp),%eax
  sub    %eax,-0x7c(%rbp)
  mov    -0x80(%rbp),%edx
  mov    -0x7c(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <lpoint@plt>
  jmp    L278
L576:
  mov    -0x68(%rbp),%eax
  sub    -0x64(%rbp),%eax
  add    %eax,%eax
  mov    %eax,-0x10(%rbp)
  mov    -0x10(%rbp),%eax
  add    %eax,%eax
  mov    %eax,-0xc(%rbp)
  mov    -0xc(%rbp),%edx
  mov    -0x64(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x50(%rbp)
  movl   $0x0,-0x4c(%rbp)
  jmp    L441
L157:
  mov    -0x60(%rbp),%eax
  add    %eax,-0x74(%rbp)
  mov    -0x60(%rbp),%eax
  sub    %eax,-0x7c(%rbp)
  cmpl   $0x0,-0x50(%rbp)
  jle    L58
  mov    -0x5c(%rbp),%eax
  add    %eax,-0x78(%rbp)
  mov    -0x78(%rbp),%edx
  mov    -0x74(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <lpoint@plt>
  mov    -0x5c(%rbp),%eax
  add    %eax,-0x78(%rbp)
  mov    -0x60(%rbp),%eax
  add    %eax,-0x74(%rbp)
  mov    -0x78(%rbp),%edx
  mov    -0x74(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <lpoint@plt>
  mov    -0x5c(%rbp),%eax
  sub    %eax,-0x80(%rbp)
  mov    -0x80(%rbp),%edx
  mov    -0x7c(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <lpoint@plt>
  mov    -0x5c(%rbp),%eax
  sub    %eax,-0x80(%rbp)
  mov    -0x60(%rbp),%eax
  sub    %eax,-0x7c(%rbp)
  mov    -0x80(%rbp),%edx
  mov    -0x7c(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <lpoint@plt>
  mov    -0xc(%rbp),%eax
  add    %eax,-0x50(%rbp)
  jmp    L610
L58:
  mov    -0x50(%rbp),%eax
  cmp    -0x10(%rbp),%eax
  jge    L628
  mov    -0x78(%rbp),%edx
  mov    -0x74(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <lpoint@plt>
  mov    -0x5c(%rbp),%eax
  add    %eax,-0x78(%rbp)
  mov    -0x60(%rbp),%eax
  add    %eax,-0x74(%rbp)
  mov    -0x78(%rbp),%edx
  mov    -0x74(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <lpoint@plt>
  mov    -0x80(%rbp),%edx
  mov    -0x7c(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <lpoint@plt>
  mov    -0x5c(%rbp),%eax
  sub    %eax,-0x80(%rbp)
  mov    -0x60(%rbp),%eax
  sub    %eax,-0x7c(%rbp)
  mov    -0x80(%rbp),%edx
  mov    -0x7c(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <lpoint@plt>
  jmp    L554
L628:
  mov    -0x5c(%rbp),%eax
  add    %eax,-0x78(%rbp)
  mov    -0x78(%rbp),%edx
  mov    -0x74(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <lpoint@plt>
  mov    -0x60(%rbp),%eax
  add    %eax,-0x74(%rbp)
  mov    -0x78(%rbp),%edx
  mov    -0x74(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <lpoint@plt>
  mov    -0x5c(%rbp),%eax
  sub    %eax,-0x80(%rbp)
  mov    -0x80(%rbp),%edx
  mov    -0x7c(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <lpoint@plt>
  mov    -0x60(%rbp),%eax
  sub    %eax,-0x7c(%rbp)
  mov    -0x80(%rbp),%edx
  mov    -0x7c(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <lpoint@plt>
L554:
  mov    -0x14(%rbp),%eax
  add    %eax,-0x50(%rbp)
L610:
  addl   $0x1,-0x4c(%rbp)
L441:
  mov    -0x4c(%rbp),%eax
  cmp    -0x1c(%rbp),%eax
  jl     L157
  cmpl   $0x0,-0x18(%rbp)
  jle    L278
  cmpl   $0x0,-0x50(%rbp)
  jle    L184
  mov    -0x5c(%rbp),%eax
  add    %eax,-0x78(%rbp)
  mov    -0x60(%rbp),%eax
  add    %eax,-0x74(%rbp)
  mov    -0x78(%rbp),%edx
  mov    -0x74(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <lpoint@plt>
  cmpl   $0x1,-0x18(%rbp)
  jle    L31
  mov    -0x5c(%rbp),%eax
  add    %eax,-0x78(%rbp)
  mov    -0x60(%rbp),%eax
  add    %eax,-0x74(%rbp)
  mov    -0x78(%rbp),%edx
  mov    -0x74(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <lpoint@plt>
L31:
  cmpl   $0x2,-0x18(%rbp)
  jle    L278
  mov    -0x5c(%rbp),%eax
  sub    %eax,-0x80(%rbp)
  mov    -0x60(%rbp),%eax
  sub    %eax,-0x7c(%rbp)
  mov    -0x80(%rbp),%edx
  mov    -0x7c(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <lpoint@plt>
  jmp    L278
L184:
  mov    -0x50(%rbp),%eax
  cmp    -0x10(%rbp),%eax
  jge    L751
  mov    -0x60(%rbp),%eax
  add    %eax,-0x74(%rbp)
  mov    -0x78(%rbp),%edx
  mov    -0x74(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <lpoint@plt>
  cmpl   $0x1,-0x18(%rbp)
  jle    L239
  mov    -0x5c(%rbp),%eax
  add    %eax,-0x78(%rbp)
  mov    -0x60(%rbp),%eax
  add    %eax,-0x74(%rbp)
  mov    -0x78(%rbp),%edx
  mov    -0x74(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <lpoint@plt>
L239:
  cmpl   $0x2,-0x18(%rbp)
  jle    L278
  mov    -0x60(%rbp),%eax
  sub    %eax,-0x7c(%rbp)
  mov    -0x80(%rbp),%edx
  mov    -0x7c(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <lpoint@plt>
  jmp    L278
L751:
  mov    -0x5c(%rbp),%eax
  add    %eax,-0x78(%rbp)
  mov    -0x60(%rbp),%eax
  add    %eax,-0x74(%rbp)
  mov    -0x78(%rbp),%edx
  mov    -0x74(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <lpoint@plt>
  cmpl   $0x1,-0x18(%rbp)
  jle    L627
  mov    -0x60(%rbp),%eax
  add    %eax,-0x74(%rbp)
  mov    -0x78(%rbp),%edx
  mov    -0x74(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <lpoint@plt>
L627:
  cmpl   $0x2,-0x18(%rbp)
  jle    L278
  mov    -0x50(%rbp),%eax
  cmp    -0x10(%rbp),%eax
  jle    L664
  mov    -0x5c(%rbp),%eax
  sub    %eax,-0x80(%rbp)
  mov    -0x60(%rbp),%eax
  sub    %eax,-0x7c(%rbp)
  mov    -0x80(%rbp),%edx
  mov    -0x7c(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <lpoint@plt>
  jmp    L278
L664:
  mov    -0x60(%rbp),%eax
  sub    %eax,-0x7c(%rbp)
  mov    -0x80(%rbp),%edx
  mov    -0x7c(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <lpoint@plt>
  jmp    L278
L142:
  mov    -0x68(%rbp),%eax
  sub    $0x1,%eax
  sar    $0x2,%eax
  mov    %eax,-0x38(%rbp)
  mov    -0x68(%rbp),%eax
  sub    $0x1,%eax
  and    $0x3,%eax
  mov    %eax,-0x34(%rbp)
  mov    -0x64(%rbp),%eax
  lea    0x0(,%rax,4),%edx
  mov    -0x68(%rbp),%eax
  lea    (%rax,%rax,1),%ecx
  mov    %edx,%eax
  sub    %ecx,%eax
  mov    %eax,-0x30(%rbp)
  cmpl   $0x0,-0x30(%rbp)
  jns    L666
  mov    -0x64(%rbp),%eax
  add    %eax,%eax
  mov    %eax,-0x24(%rbp)
  mov    -0x24(%rbp),%eax
  add    %eax,%eax
  mov    %eax,-0x20(%rbp)
  mov    -0x20(%rbp),%eax
  sub    -0x68(%rbp),%eax
  mov    %eax,-0x48(%rbp)
  movl   $0x0,-0x44(%rbp)
  jmp    L662
L44:
  mov    -0x5c(%rbp),%eax
  add    %eax,-0x78(%rbp)
  mov    -0x5c(%rbp),%eax
  sub    %eax,-0x80(%rbp)
  cmpl   $0x0,-0x48(%rbp)
  jns    L487
  mov    -0x78(%rbp),%edx
  mov    -0x74(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <lpoint@plt>
  mov    -0x5c(%rbp),%eax
  add    %eax,-0x78(%rbp)
  mov    -0x78(%rbp),%edx
  mov    -0x74(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <lpoint@plt>
  mov    -0x80(%rbp),%edx
  mov    -0x7c(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <lpoint@plt>
  mov    -0x5c(%rbp),%eax
  sub    %eax,-0x80(%rbp)
  mov    -0x80(%rbp),%edx
  mov    -0x7c(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <lpoint@plt>
  mov    -0x20(%rbp),%eax
  add    %eax,-0x48(%rbp)
  jmp    L724
L487:
  mov    -0x48(%rbp),%eax
  cmp    -0x24(%rbp),%eax
  jge    L757
  mov    -0x78(%rbp),%edx
  mov    -0x74(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <lpoint@plt>
  mov    -0x5c(%rbp),%eax
  add    %eax,-0x78(%rbp)
  mov    -0x60(%rbp),%eax
  add    %eax,-0x74(%rbp)
  mov    -0x78(%rbp),%edx
  mov    -0x74(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <lpoint@plt>
  mov    -0x80(%rbp),%edx
  mov    -0x7c(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <lpoint@plt>
  mov    -0x5c(%rbp),%eax
  sub    %eax,-0x80(%rbp)
  mov    -0x60(%rbp),%eax
  sub    %eax,-0x7c(%rbp)
  mov    -0x80(%rbp),%edx
  mov    -0x7c(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <lpoint@plt>
  jmp    L740
L757:
  mov    -0x60(%rbp),%eax
  add    %eax,-0x74(%rbp)
  mov    -0x78(%rbp),%edx
  mov    -0x74(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <lpoint@plt>
  mov    -0x5c(%rbp),%eax
  add    %eax,-0x78(%rbp)
  mov    -0x78(%rbp),%edx
  mov    -0x74(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <lpoint@plt>
  mov    -0x60(%rbp),%eax
  sub    %eax,-0x7c(%rbp)
  mov    -0x80(%rbp),%edx
  mov    -0x7c(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <lpoint@plt>
  mov    -0x5c(%rbp),%eax
  sub    %eax,-0x80(%rbp)
  mov    -0x80(%rbp),%edx
  mov    -0x7c(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <lpoint@plt>
L740:
  mov    -0x30(%rbp),%eax
  add    %eax,-0x48(%rbp)
L724:
  addl   $0x1,-0x44(%rbp)
L662:
  mov    -0x44(%rbp),%eax
  cmp    -0x38(%rbp),%eax
  jl     L44
  cmpl   $0x0,-0x34(%rbp)
  jle    L278
  cmpl   $0x0,-0x48(%rbp)
  jns    L812
  mov    -0x5c(%rbp),%eax
  add    %eax,-0x78(%rbp)
  mov    -0x78(%rbp),%edx
  mov    -0x74(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <lpoint@plt>
  cmpl   $0x1,-0x34(%rbp)
  jle    L302
  mov    -0x5c(%rbp),%eax
  add    %eax,-0x78(%rbp)
  mov    -0x78(%rbp),%edx
  mov    -0x74(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <lpoint@plt>
L302:
  cmpl   $0x2,-0x34(%rbp)
  jle    L278
  mov    -0x5c(%rbp),%eax
  sub    %eax,-0x80(%rbp)
  mov    -0x80(%rbp),%edx
  mov    -0x7c(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <lpoint@plt>
  jmp    L278
L812:
  mov    -0x48(%rbp),%eax
  cmp    -0x24(%rbp),%eax
  jge    L459
  mov    -0x5c(%rbp),%eax
  add    %eax,-0x78(%rbp)
  mov    -0x78(%rbp),%edx
  mov    -0x74(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <lpoint@plt>
  cmpl   $0x1,-0x34(%rbp)
  jle    L496
  mov    -0x5c(%rbp),%eax
  add    %eax,-0x78(%rbp)
  mov    -0x60(%rbp),%eax
  add    %eax,-0x74(%rbp)
  mov    -0x78(%rbp),%edx
  mov    -0x74(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <lpoint@plt>
L496:
  cmpl   $0x2,-0x34(%rbp)
  jle    L278
  mov    -0x5c(%rbp),%eax
  sub    %eax,-0x80(%rbp)
  mov    -0x80(%rbp),%edx
  mov    -0x7c(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <lpoint@plt>
  jmp    L278
L459:
  mov    -0x5c(%rbp),%eax
  add    %eax,-0x78(%rbp)
  mov    -0x60(%rbp),%eax
  add    %eax,-0x74(%rbp)
  mov    -0x78(%rbp),%edx
  mov    -0x74(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <lpoint@plt>
  cmpl   $0x1,-0x34(%rbp)
  jle    L264
  mov    -0x5c(%rbp),%eax
  add    %eax,-0x78(%rbp)
  mov    -0x78(%rbp),%edx
  mov    -0x74(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <lpoint@plt>
L264:
  cmpl   $0x2,-0x34(%rbp)
  jle    L278
  mov    -0x5c(%rbp),%eax
  sub    %eax,-0x80(%rbp)
  mov    -0x60(%rbp),%eax
  sub    %eax,-0x7c(%rbp)
  mov    -0x80(%rbp),%edx
  mov    -0x7c(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <lpoint@plt>
  jmp    L278
L666:
  mov    -0x64(%rbp),%eax
  sub    -0x68(%rbp),%eax
  add    %eax,%eax
  mov    %eax,-0x2c(%rbp)
  mov    -0x2c(%rbp),%eax
  add    %eax,%eax
  mov    %eax,-0x28(%rbp)
  mov    -0x28(%rbp),%edx
  mov    -0x68(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x40(%rbp)
  movl   $0x0,-0x3c(%rbp)
  jmp    L534
L193:
  mov    -0x5c(%rbp),%eax
  add    %eax,-0x78(%rbp)
  mov    -0x5c(%rbp),%eax
  sub    %eax,-0x80(%rbp)
  cmpl   $0x0,-0x40(%rbp)
  jle    L601
  mov    -0x60(%rbp),%eax
  add    %eax,-0x74(%rbp)
  mov    -0x78(%rbp),%edx
  mov    -0x74(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <lpoint@plt>
  mov    -0x5c(%rbp),%eax
  add    %eax,-0x78(%rbp)
  mov    -0x60(%rbp),%eax
  add    %eax,-0x74(%rbp)
  mov    -0x78(%rbp),%edx
  mov    -0x74(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <lpoint@plt>
  mov    -0x5c(%rbp),%eax
  sub    %eax,-0x7c(%rbp)
  mov    -0x80(%rbp),%edx
  mov    -0x7c(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <lpoint@plt>
  mov    -0x5c(%rbp),%eax
  sub    %eax,-0x80(%rbp)
  mov    -0x60(%rbp),%eax
  sub    %eax,-0x7c(%rbp)
  mov    -0x80(%rbp),%edx
  mov    -0x7c(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <lpoint@plt>
  mov    -0x28(%rbp),%eax
  add    %eax,-0x40(%rbp)
  jmp    L217
L601:
  mov    -0x40(%rbp),%eax
  cmp    -0x2c(%rbp),%eax
  jge    L211
  mov    -0x78(%rbp),%edx
  mov    -0x74(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <lpoint@plt>
  mov    -0x5c(%rbp),%eax
  add    %eax,-0x78(%rbp)
  mov    -0x60(%rbp),%eax
  add    %eax,-0x74(%rbp)
  mov    -0x78(%rbp),%edx
  mov    -0x74(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <lpoint@plt>
  mov    -0x80(%rbp),%edx
  mov    -0x7c(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <lpoint@plt>
  mov    -0x5c(%rbp),%eax
  sub    %eax,-0x80(%rbp)
  mov    -0x60(%rbp),%eax
  sub    %eax,-0x7c(%rbp)
  mov    -0x80(%rbp),%edx
  mov    -0x7c(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <lpoint@plt>
  jmp    L716
L211:
  mov    -0x60(%rbp),%eax
  add    %eax,-0x74(%rbp)
  mov    -0x78(%rbp),%edx
  mov    -0x74(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <lpoint@plt>
  mov    -0x5c(%rbp),%eax
  add    %eax,-0x78(%rbp)
  mov    -0x78(%rbp),%edx
  mov    -0x74(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <lpoint@plt>
  mov    -0x60(%rbp),%eax
  sub    %eax,-0x7c(%rbp)
  mov    -0x80(%rbp),%edx
  mov    -0x7c(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <lpoint@plt>
  mov    -0x5c(%rbp),%eax
  sub    %eax,-0x80(%rbp)
  mov    -0x80(%rbp),%edx
  mov    -0x7c(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <lpoint@plt>
L716:
  mov    -0x30(%rbp),%eax
  add    %eax,-0x40(%rbp)
L217:
  addl   $0x1,-0x3c(%rbp)
L534:
  mov    -0x3c(%rbp),%eax
  cmp    -0x38(%rbp),%eax
  jl     L193
  cmpl   $0x0,-0x34(%rbp)
  jle    L278
  cmpl   $0x0,-0x40(%rbp)
  jle    L503
  mov    -0x5c(%rbp),%eax
  add    %eax,-0x78(%rbp)
  mov    -0x60(%rbp),%eax
  add    %eax,-0x74(%rbp)
  mov    -0x78(%rbp),%edx
  mov    -0x74(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <lpoint@plt>
  cmpl   $0x1,-0x34(%rbp)
  jle    L413
  mov    -0x5c(%rbp),%eax
  add    %eax,-0x78(%rbp)
  mov    -0x60(%rbp),%eax
  add    %eax,-0x74(%rbp)
  mov    -0x78(%rbp),%edx
  mov    -0x74(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <lpoint@plt>
L413:
  cmpl   $0x2,-0x34(%rbp)
  jle    L278
  mov    -0x5c(%rbp),%eax
  sub    %eax,-0x80(%rbp)
  mov    -0x60(%rbp),%eax
  sub    %eax,-0x7c(%rbp)
  mov    -0x80(%rbp),%edx
  mov    -0x7c(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <lpoint@plt>
  jmp    L278
L503:
  mov    -0x40(%rbp),%eax
  cmp    -0x2c(%rbp),%eax
  jge    L32
  mov    -0x5c(%rbp),%eax
  add    %eax,-0x78(%rbp)
  mov    -0x78(%rbp),%edx
  mov    -0x74(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <lpoint@plt>
  cmpl   $0x1,-0x34(%rbp)
  jle    L109
  mov    -0x5c(%rbp),%eax
  add    %eax,-0x78(%rbp)
  mov    -0x60(%rbp),%eax
  add    %eax,-0x74(%rbp)
  mov    -0x78(%rbp),%edx
  mov    -0x74(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <lpoint@plt>
L109:
  cmpl   $0x2,-0x34(%rbp)
  jle    L278
  mov    -0x5c(%rbp),%eax
  sub    %eax,-0x80(%rbp)
  mov    -0x80(%rbp),%edx
  mov    -0x7c(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <lpoint@plt>
  jmp    L278
L32:
  mov    -0x5c(%rbp),%eax
  add    %eax,-0x78(%rbp)
  mov    -0x60(%rbp),%eax
  add    %eax,-0x74(%rbp)
  mov    -0x78(%rbp),%edx
  mov    -0x74(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <lpoint@plt>
  cmpl   $0x1,-0x34(%rbp)
  jle    L303
  mov    -0x5c(%rbp),%eax
  add    %eax,-0x78(%rbp)
  mov    -0x78(%rbp),%edx
  mov    -0x74(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <lpoint@plt>
L303:
  cmpl   $0x2,-0x34(%rbp)
  jle    L278
  mov    -0x40(%rbp),%eax
  cmp    -0x2c(%rbp),%eax
  jle    L319
  mov    -0x5c(%rbp),%eax
  sub    %eax,-0x80(%rbp)
  mov    -0x60(%rbp),%eax
  sub    %eax,-0x7c(%rbp)
  mov    -0x80(%rbp),%edx
  mov    -0x7c(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <lpoint@plt>
  jmp    L278
L319:
  mov    -0x5c(%rbp),%eax
  sub    %eax,-0x80(%rbp)
  mov    -0x80(%rbp),%edx
  mov    -0x7c(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <lpoint@plt>
  jmp    L278
L86:
  nop
L278:
  leave
  ret
```

assistant: ```c
void lineTwoStep(int x0, int y0, int x1, int y1) {
  int dy = y1 - y0;
  int dx = x1 - x0;
  int stepx, stepy;
  if (dy < 0) {
    dy = -dy;
    stepy = -1;
  } else {
    stepy = 1;
  }
  if (dx < 0) {
    dx = -dx;
    stepx = -1;
  } else {
    stepx = 1;
  }
  lpoint(x0, y0);
  if (dx == 0 && dy == 0)
    return;
  lpoint(x1, y1);
  if (dx > dy) {
    int length = (dx - 1) >> 2;
    int extras = (dx - 1) & 3;
    int incr2 = (dy << 2) - (dx << 1);
    if (incr2 < 0) {
      int c = dy << 1;
      int incr1 = c << 1;
      int d = incr1 - dx;
      int i;
      for (i = 0; i < length; i++) {
        x0 += stepx;
        x1 -= stepx;
        if (d < 0) {
          lpoint(x0, y0);
          lpoint(x0 += stepx, y0);
          lpoint(x1, y1);
          lpoint(x1 -= stepx, y1);
          d += incr1;
        } else {
          if (d < c) {
            lpoint(x0, y0);
            lpoint(x0 += stepx, y0 += stepy);
            lpoint(x1, y1);
            lpoint(x1 -= stepx, y1 -= stepy);
          } else {
            lpoint(x0, y0 += stepy);
            lpoint(x0 += stepx, y0);
            lpoint(x1, y1 -= stepy);
            lpoint(x1 -= stepx, y1);
          }
          d += incr2;
        }
      }
      if (extras > 0) {
        if (d < 0) {
          lpoint(x0 += stepx, y0);
          if (extras > 1)
            lpoint(x0 += stepx, y0);
          if (extras > 2)
            lpoint(x1 -= stepx, y1);
        } else if (d < c) {
          lpoint(x0 += stepx, y0);
          if (extras > 1)
            lpoint(x0 += stepx, y0 += stepy);
          if (extras > 2)
            lpoint(x1 -= stepx, y1);
        } else {
          lpoint(x0 += stepx, y0 += stepy);
          if (extras > 1)
            lpoint(x0 += stepx, y0);
          if (extras > 2)
            lpoint(x1 -= stepx, y1 -= stepy);
        }
      }
    } else {
      int c = (dy - dx) << 1;
      int incr1 = c << 1;
      int d = incr1 + dx;
      int i;
      for (i = 0; i < length; i++) {
        x0 += stepx;
        x1 -= stepx;
        if (d > 0) {
          lpoint(x0, y0 += stepy);
          lpoint(x0 += stepx, y0 += stepy);
          lpoint(x1, y1 -= stepy);
          lpoint(x1 -= stepx, y1 -= stepy);
          d += incr1;
        } else {
          if (d < c) {
            lpoint(x0, y0);
            lpoint(x0 += stepx, y0 += stepy);
            lpoint(x1, y1);
            lpoint(x1 -= stepx, y1 -= stepy);
          } else {
            lpoint(x0, y0 += stepy);
            lpoint(x0 += stepx, y0);
            lpoint(x1, y1 -= stepy);
            lpoint(x1 -= stepx, y1);
          }
          d += incr2;
        }
      }
      if (extras > 0) {
        if (d > 0) {
          lpoint(x0 += stepx, y0 += stepy);
          if (extras > 1)
            lpoint(x0 += stepx, y0 += stepy);
          if (extras > 2)
            lpoint(x1 -= stepx, y1 -= stepy);
        } else if (d < c) {
          lpoint(x0 += stepx, y0);
          if (extras > 1)
            lpoint(x0 += stepx, y0 += stepy);
          if (extras > 2)
            lpoint(x1 -= stepx, y1);
        } else {
          lpoint(x0 += stepx, y0 += stepy);
          if (extras > 1)
            lpoint(x0 += stepx, y0);
          if (extras > 2) {
            if (d > c)
              lpoint(x1 -= stepx, y1 -= stepy);
            else
              lpoint(x1 -= stepx, y1);
          }
        }
      }
    }
  } else {
    int length = (dy - 1) >> 2;
    int extras = (dy - 1) & 3;
    int incr2 = (dx << 2) - (dy << 1);
    if (incr2 < 0) {
      int c = dx << 1;
      int incr1 = c << 1;
      int d = incr1 - dy;
      int i;
      for (i = 0; i < length; i++) {
        y0 += stepy;
        y1 -= stepy;
        if (d < 0) {
          lpoint(x0, y0);
          lpoint(x0, y0 += stepy);
          lpoint(x1, y1);
          lpoint(x1, y1 -= stepy);
          d += incr1;
        } else {
          if (d < c) {
            lpoint(x0, y0);
            lpoint(x0 += stepx, y0 += stepy);
            lpoint(x1, y1);
            lpoint(x1 -= stepx, y1 -= stepy);
          } else {
            lpoint(x0 += stepx, y0);
            lpoint(x0, y0 += stepy);
            lpoint(x1 -= stepx, y1);
            lpoint(x1, y1 -= stepy);
          }
          d += incr2;
        }
      }
      if (extras > 0) {
        if (d < 0) {
          lpoint(x0, y0 += stepy);
          if (extras > 1)
            lpoint(x0, y0 += stepy);
          if (extras > 2)
            lpoint(x1, y1 -= stepy);
        } else if (d < c) {
          lpoint(x0, y0 += stepy);
          if (extras > 1)
            lpoint(x0 += stepx, y0 += stepy);
          if (extras > 2)
            lpoint(x1, y1 -= stepy);
        } else {
          lpoint(x0 += stepx, y0 += stepy);
          if (extras > 1)
            lpoint(x0, y0 += stepy);
          if (extras > 2)
            lpoint(x1 -= stepx, y1 -= stepy);
        }
      }
    } else {
      int c = (dx - dy) << 1;
      int incr1 = c << 1;
      int d = incr1 + dy;
      int i;
      for (i = 0; i < length; i++) {
        y0 += stepy;
        y1 -= stepy;
        if (d > 0) {
          lpoint(x0 += stepx, y0);
          lpoint(x0 += stepx, y0 += stepy);
          lpoint(x1 -= stepy, y1);
          lpoint(x1 -= stepx, y1 -= stepy);
          d += incr1;
        } else {
          if (d < c) {
            lpoint(x0, y0);
            lpoint(x0 += stepx, y0 += stepy);
            lpoint(x1, y1);
            lpoint(x1 -= stepx, y1 -= stepy);
          } else {
            lpoint(x0 += stepx, y0);
            lpoint(x0, y0 += stepy);
            lpoint(x1 -= stepx, y1);
            lpoint(x1, y1 -= stepy);
          }
          d += incr2;
        }
      }
      if (extras > 0) {
        if (d > 0) {
          lpoint(x0 += stepx, y0 += stepy);
          if (extras > 1)
            lpoint(x0 += stepx, y0 += stepy);
          if (extras > 2)
            lpoint(x1 -= stepx, y1 -= stepy);
        } else if (d < c) {
          lpoint(x0, y0 += stepy);
          if (extras > 1)
            lpoint(x0 += stepx, y0 += stepy);
          if (extras > 2)
            lpoint(x1, y1 -= stepy);
        } else {
          lpoint(x0 += stepx, y0 += stepy);
          if (extras > 1)
            lpoint(x0, y0 += stepy);
          if (extras > 2) {
            if (d > c)
              lpoint(x1 -= stepx, y1 -= stepy);
            else
              lpoint(x1, y1 -= stepy);
          }
        }
      }
    }
  }
}
```