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

```asm
<draw_start>:
  endbr64
  push   %r15
  xor    %eax,%eax
  lea    D267(%rip),%r15
  push   %r14
  lea    D316(%rip),%r14
  push   %r13
  lea    D490(%rip),%r13
  push   %r12
  lea    D850(%rip),%r12
  push   %rbp
  mov    %rdi,%rbp
  push   %rbx
  lea    D1044(%rip),%rbx
  sub    $0x18,%rsp
  mov    %esi,0x8(%rsp)
  lea    D210(%rip),%rsi
  mov    %edx,0xc(%rsp)
  call   <fprintf@plt>
  mov    %rbp,%rcx
  mov    $0x1a,%edx
  mov    $0x1,%esi
  lea    D1146(%rip),%rdi
  call   <fwrite@plt>
  mov    %rbp,%rdi
  lea    D382(%rip),%rsi
  xor    %eax,%eax
  call   <fprintf@plt>
  mov    %rbp,%rdi
  lea    D233(%rip),%rsi
  xor    %eax,%eax
  call   <fprintf@plt>
  mov    %rbp,%rdi
  lea    D512(%rip),%rsi
  xor    %eax,%eax
  call   <fprintf@plt>
  mov    %rbp,%rdi
  lea    D1147(%rip),%rsi
  xor    %eax,%eax
  call   <fprintf@plt>
  mov    %rbp,%rcx
  mov    $0x18,%edx
  mov    $0x1,%esi
  lea    D256(%rip),%rdi
  call   <fwrite@plt>
  mov    %rbp,%rcx
  mov    $0x18,%edx
  mov    $0x1,%esi
  lea    D112(%rip),%rdi
  call   <fwrite@plt>
  mov    %rbp,%rcx
  mov    $0x22,%edx
  mov    $0x1,%esi
  lea    D1079(%rip),%rdi
  call   <fwrite@plt>
  mov    %rbp,%rcx
  mov    $0x22,%edx
  mov    $0x1,%esi
  lea    D683(%rip),%rdi
  call   <fwrite@plt>
  mov    %rbp,%rcx
  mov    $0x18,%edx
  mov    $0x1,%esi
  lea    D73(%rip),%rdi
  call   <fwrite@plt>
  mov    %rbp,%rcx
  mov    $0x18,%edx
  mov    $0x1,%esi
  lea    D709(%rip),%rdi
  call   <fwrite@plt>
  mov    %rbp,%rcx
  mov    $0x1a,%edx
  mov    $0x1,%esi
  lea    D1034(%rip),%rdi
  call   <fwrite@plt>
  mov    %rbp,%rcx
  mov    $0x1a,%edx
  mov    $0x1,%esi
  lea    D946(%rip),%rdi
  call   <fwrite@plt>
  mov    %rbp,%rcx
  mov    $0x1a,%edx
  mov    $0x1,%esi
  lea    D806(%rip),%rdi
  call   <fwrite@plt>
  mov    %rbp,%rcx
  mov    $0x1a,%edx
  mov    $0x1,%esi
  lea    D855(%rip),%rdi
  call   <fwrite@plt>
  mov    %rbp,%rcx
  mov    $0x1c,%edx
  mov    $0x1,%esi
  lea    D1082(%rip),%rdi
  call   <fwrite@plt>
  mov    %rbp,%rcx
  mov    $0x33,%edx
  mov    $0x1,%esi
  lea    D1042(%rip),%rdi
  call   <fwrite@plt>
  mov    %rbp,%rsi
  mov    $0xa,%edi
  call   <fputc@plt>
  mov    %rbp,%rdi
  lea    D511(%rip),%rsi
  xor    %eax,%eax
  call   <fprintf@plt>
  mov    %rbp,%rcx
  mov    $0x1f,%edx
  mov    $0x1,%esi
  lea    D1134(%rip),%rdi
  call   <fwrite@plt>
  mov    %rbp,%rdi
  lea    D30(%rip),%rsi
  xor    %eax,%eax
  call   <fprintf@plt>
  mov    %rbp,%rcx
  mov    $0x1e,%edx
  mov    $0x1,%esi
  lea    D61(%rip),%rdi
  call   <fwrite@plt>
  mov    %rbp,%rdi
  lea    D1058(%rip),%rsi
  xor    %eax,%eax
  call   <fprintf@plt>
  mov    %rbp,%rcx
  mov    $0x1a,%edx
  mov    $0x1,%esi
  lea    D160(%rip),%rdi
  call   <fwrite@plt>
  mov    %rbp,%rcx
  mov    $0x2d,%edx
  mov    $0x1,%esi
  lea    D455(%rip),%rdi
  call   <fwrite@plt>
  mov    %rbp,%rcx
  mov    $0xd,%edx
  mov    $0x1,%esi
  lea    D232(%rip),%rdi
  call   <fwrite@plt>
  mov    %rbp,%rdi
  lea    D1028(%rip),%rsi
  xor    %eax,%eax
  call   <fprintf@plt>
  mov    %rbp,%rcx
  mov    $0x1f,%edx
  mov    $0x1,%esi
  lea    D1119(%rip),%rdi
  call   <fwrite@plt>
  mov    %rbp,%rcx
  mov    $0x19,%edx
  mov    $0x1,%esi
  lea    D244(%rip),%rdi
  call   <fwrite@plt>
  mov    %rbp,%rdi
  lea    D1089(%rip),%rsi
  xor    %eax,%eax
  call   <fprintf@plt>
  mov    %rbp,%rcx
  mov    $0x6,%edx
  mov    %r12,%rdi
  mov    $0x1,%esi
  call   <fwrite@plt>
  mov    %rbp,%rsi
  mov    $0xa,%edi
  call   <fputc@plt>
  mov    %rbp,%rdi
  lea    D295(%rip),%rsi
  xor    %eax,%eax
  call   <fprintf@plt>
  mov    %rbp,%rcx
  mov    $0x12,%edx
  mov    $0x1,%esi
  lea    D933(%rip),%rdi
  call   <fwrite@plt>
  mov    %rbp,%rcx
  mov    $0x12,%edx
  mov    $0x1,%esi
  lea    D834(%rip),%rdi
  call   <fwrite@plt>
  mov    %rbp,%rcx
  mov    $0xa,%edx
  mov    %rbx,%rdi
  mov    $0x1,%esi
  call   <fwrite@plt>
  mov    %rbp,%rdi
  lea    D265(%rip),%rsi
  xor    %eax,%eax
  call   <fprintf@plt>
  mov    %rbp,%rcx
  mov    $0x16,%edx
  mov    $0x1,%esi
  lea    D190(%rip),%rdi
  call   <fwrite@plt>
  lea    D245(%rip),%r10
  mov    %rbp,%rdi
  xor    %eax,%eax
  mov    %r10,%rsi
  call   <fprintf@plt>
  mov    %rbp,%rdi
  lea    D723(%rip),%rsi
  xor    %eax,%eax
  call   <fprintf@plt>
  mov    %rbp,%rdi
  lea    D836(%rip),%rsi
  xor    %eax,%eax
  call   <fprintf@plt>
  mov    %rbp,%rdi
  lea    D943(%rip),%rsi
  xor    %eax,%eax
  call   <fprintf@plt>
  mov    %rbp,%rdi
  lea    D122(%rip),%rsi
  xor    %eax,%eax
  call   <fprintf@plt>
  mov    %rbp,%rdi
  lea    D616(%rip),%rsi
  xor    %eax,%eax
  call   <fprintf@plt>
  mov    %rbp,%rcx
  mov    %r14,%rdi
  mov    $0x13,%edx
  mov    $0x1,%esi
  call   <fwrite@plt>
  mov    %rbp,%rcx
  mov    $0x13,%edx
  mov    %r13,%rdi
  mov    $0x1,%esi
  call   <fwrite@plt>
  lea    D831(%rip),%r8
  mov    %rbp,%rdi
  xor    %eax,%eax
  mov    %r8,%rsi
  call   <fprintf@plt>
  mov    %rbp,%rdi
  lea    D880(%rip),%rsi
  xor    %eax,%eax
  call   <fprintf@plt>
  mov    %rbp,%rdi
  lea    D569(%rip),%rsi
  xor    %eax,%eax
  call   <fprintf@plt>
  mov    %rbp,%rcx
  mov    %r14,%rdi
  mov    $0x13,%edx
  mov    $0x1,%esi
  call   <fwrite@plt>
  mov    %rbp,%rcx
  mov    %r13,%rdi
  mov    $0x13,%edx
  mov    $0x1,%esi
  call   <fwrite@plt>
  mov    %rbp,%rcx
  mov    $0x9,%edx
  mov    %r15,%rdi
  mov    $0x1,%esi
  call   <fwrite@plt>
  mov    %rbp,%rdi
  lea    D885(%rip),%rsi
  xor    %eax,%eax
  call   <fprintf@plt>
  mov    %rbp,%rcx
  mov    $0x16,%edx
  mov    $0x1,%esi
  lea    D907(%rip),%rdi
  call   <fwrite@plt>
  mov    %rbp,%rcx
  mov    $0x12,%edx
  mov    $0x1,%esi
  lea    D242(%rip),%rdi
  call   <fwrite@plt>
  mov    %rbp,%rcx
  mov    $0x19,%edx
  mov    $0x1,%esi
  lea    D941(%rip),%rdi
  call   <fwrite@plt>
  mov    %rbp,%rcx
  mov    $0x12,%edx
  mov    $0x1,%esi
  lea    D1013(%rip),%rdi
  call   <fwrite@plt>
  mov    %rbp,%rcx
  mov    $0x6,%edx
  mov    %r12,%rdi
  mov    $0x1,%esi
  call   <fwrite@plt>
  mov    %rbp,%rsi
  mov    $0xa,%edi
  call   <fputc@plt>
  mov    %rbp,%rdi
  lea    D754(%rip),%rsi
  xor    %eax,%eax
  call   <fprintf@plt>
  mov    %rbp,%rdi
  lea    D934(%rip),%rsi
  xor    %eax,%eax
  call   <fprintf@plt>
  mov    %rbp,%rdi
  lea    D347(%rip),%rsi
  xor    %eax,%eax
  call   <fprintf@plt>
  mov    %rbp,%rdi
  lea    D732(%rip),%rsi
  xor    %eax,%eax
  call   <fprintf@plt>
  lea    D323(%rip),%r9
  mov    %rbp,%rdi
  xor    %eax,%eax
  mov    %r9,%rsi
  call   <fprintf@plt>
  mov    %rbp,%rdi
  lea    D812(%rip),%rsi
  xor    %eax,%eax
  call   <fprintf@plt>
  mov    %rbp,%rcx
  mov    %rbx,%rdi
  mov    $0xa,%edx
  mov    $0x1,%esi
  call   <fwrite@plt>
  mov    %rbp,%rcx
  mov    $0x13,%edx
  mov    %r14,%rdi
  mov    $0x1,%esi
  call   <fwrite@plt>
  mov    %rbp,%rdi
  lea    D426(%rip),%rsi
  xor    %eax,%eax
  call   <fprintf@plt>
  mov    %rbp,%rcx
  mov    $0x13,%edx
  mov    $0x1,%esi
  lea    D645(%rip),%rdi
  call   <fwrite@plt>
  mov    %rbp,%rcx
  mov    %r13,%rdi
  mov    $0x13,%edx
  mov    $0x1,%esi
  call   <fwrite@plt>
  mov    %rbp,%rcx
  mov    $0x9,%edx
  mov    %r15,%rdi
  mov    $0x1,%esi
  call   <fwrite@plt>
  mov    %rbp,%rdi
  lea    D779(%rip),%rsi
  xor    %eax,%eax
  call   <fprintf@plt>
  mov    %rbp,%rcx
  mov    $0xb,%edx
  mov    $0x1,%esi
  lea    D782(%rip),%rdi
  call   <fwrite@plt>
  mov    %rbp,%rdi
  lea    D673(%rip),%rsi
  xor    %eax,%eax
  call   <fprintf@plt>
  mov    %rbp,%rdi
  lea    D201(%rip),%rsi
  xor    %eax,%eax
  call   <fprintf@plt>
  mov    %rbp,%rcx
  mov    $0x14,%edx
  mov    $0x1,%esi
  lea    D435(%rip),%rdi
  call   <fwrite@plt>
  mov    %rbp,%rcx
  mov    $0x13,%edx
  mov    $0x1,%esi
  lea    D804(%rip),%rdi
  call   <fwrite@plt>
  mov    %rbp,%rcx
  mov    $0x6,%edx
  mov    $0x1,%esi
  lea    D1047(%rip),%rdi
  call   <fwrite@plt>
  mov    %rbp,%rcx
  mov    $0x6,%edx
  mov    %r12,%rdi
  mov    $0x1,%esi
  call   <fwrite@plt>
  mov    %rbp,%rsi
  mov    $0xa,%edi
  call   <fputc@plt>
  mov    %rbp,%rdi
  lea    D1006(%rip),%rsi
  xor    %eax,%eax
  call   <fprintf@plt>
  lea    D245(%rip),%r10
  mov    %rbp,%rdi
  xor    %eax,%eax
  mov    %r10,%rsi
  call   <fprintf@plt>
  lea    D509(%rip),%r11
  mov    %rbp,%rdi
  xor    %eax,%eax
  mov    %r11,%rsi
  call   <fprintf@plt>
  lea    D323(%rip),%r9
  mov    %rbp,%rdi
  xor    %eax,%eax
  mov    %r9,%rsi
  call   <fprintf@plt>
  lea    D287(%rip),%r10
  mov    %rbp,%rdi
  xor    %eax,%eax
  mov    %r10,%rsi
  call   <fprintf@plt>
  mov    %rbp,%rdi
  lea    D784(%rip),%rsi
  xor    %eax,%eax
  call   <fprintf@plt>
  mov    %rbp,%rcx
  mov    %rbx,%rdi
  mov    $0xa,%edx
  mov    $0x1,%esi
  call   <fwrite@plt>
  mov    %rbp,%rcx
  mov    %r14,%rdi
  mov    $0x13,%edx
  mov    $0x1,%esi
  call   <fwrite@plt>
  mov    %rbp,%rcx
  mov    %r13,%rdi
  mov    $0x13,%edx
  mov    $0x1,%esi
  call   <fwrite@plt>
  mov    %rbp,%rcx
  mov    $0x9,%edx
  mov    %r15,%rdi
  mov    $0x1,%esi
  call   <fwrite@plt>
  mov    %rbp,%rdi
  lea    D779(%rip),%rsi
  xor    %eax,%eax
  call   <fprintf@plt>
  mov    %rbp,%rcx
  mov    $0xb,%edx
  mov    $0x1,%esi
  lea    D782(%rip),%rdi
  call   <fwrite@plt>
  mov    %rbp,%rdi
  lea    D673(%rip),%rsi
  xor    %eax,%eax
  call   <fprintf@plt>
  mov    %rbp,%rdi
  lea    D201(%rip),%rsi
  xor    %eax,%eax
  call   <fprintf@plt>
  mov    %rbp,%rcx
  mov    $0x14,%edx
  mov    $0x1,%esi
  lea    D435(%rip),%rdi
  call   <fwrite@plt>
  mov    %rbp,%rcx
  mov    $0x13,%edx
  mov    $0x1,%esi
  lea    D804(%rip),%rdi
  call   <fwrite@plt>
  mov    %rbp,%rcx
  mov    $0x6,%edx
  mov    $0x1,%esi
  lea    D1047(%rip),%rdi
  call   <fwrite@plt>
  mov    %rbp,%rcx
  mov    $0x6,%edx
  mov    %r12,%rdi
  mov    $0x1,%esi
  call   <fwrite@plt>
  mov    %rbp,%rsi
  mov    $0xa,%edi
  call   <fputc@plt>
  mov    %rbp,%rdi
  lea    D366(%rip),%rsi
  xor    %eax,%eax
  call   <fprintf@plt>
  lea    D831(%rip),%r8
  mov    %rbp,%rdi
  xor    %eax,%eax
  mov    %r8,%rsi
  call   <fprintf@plt>
  lea    D509(%rip),%r11
  mov    %rbp,%rdi
  xor    %eax,%eax
  mov    %r11,%rsi
  call   <fprintf@plt>
  lea    D323(%rip),%r9
  mov    %rbp,%rdi
  xor    %eax,%eax
  mov    %r9,%rsi
  call   <fprintf@plt>
  lea    D287(%rip),%r10
  mov    %rbp,%rdi
  xor    %eax,%eax
  mov    %r10,%rsi
  call   <fprintf@plt>
  mov    %rbp,%rdi
  lea    D575(%rip),%rsi
  xor    %eax,%eax
  call   <fprintf@plt>
  mov    %rbp,%rcx
  mov    %rbx,%rdi
  mov    $0xa,%edx
  mov    $0x1,%esi
  lea    D935(%rip),%rbx
  call   <fwrite@plt>
  mov    %rbp,%rcx
  mov    %r14,%rdi
  mov    $0x13,%edx
  mov    $0x1,%esi
  lea    D443(%rip),%r14
  call   <fwrite@plt>
  mov    %rbp,%rcx
  mov    %r13,%rdi
  mov    $0x13,%edx
  mov    $0x1,%esi
  lea    D912(%rip),%r13
  call   <fwrite@plt>
  mov    %rbp,%rcx
  mov    $0x9,%edx
  mov    %r15,%rdi
  mov    $0x1,%esi
  lea    D681(%rip),%r15
  call   <fwrite@plt>
  mov    %rbp,%rdi
  lea    D779(%rip),%rsi
  xor    %eax,%eax
  call   <fprintf@plt>
  mov    %rbp,%rcx
  mov    $0xb,%edx
  mov    $0x1,%esi
  lea    D782(%rip),%rdi
  call   <fwrite@plt>
  mov    %rbp,%rdi
  lea    D673(%rip),%rsi
  xor    %eax,%eax
  call   <fprintf@plt>
  mov    %rbp,%rdi
  lea    D201(%rip),%rsi
  xor    %eax,%eax
  call   <fprintf@plt>
  mov    %rbp,%rcx
  mov    $0x14,%edx
  mov    $0x1,%esi
  lea    D435(%rip),%rdi
  call   <fwrite@plt>
  mov    %rbp,%rcx
  mov    $0x13,%edx
  mov    $0x1,%esi
  lea    D804(%rip),%rdi
  call   <fwrite@plt>
  mov    %rbp,%rcx
  mov    $0x6,%edx
  mov    $0x1,%esi
  lea    D1047(%rip),%rdi
  call   <fwrite@plt>
  mov    %rbp,%rcx
  mov    $0x6,%edx
  mov    %r12,%rdi
  mov    $0x1,%esi
  call   <fwrite@plt>
  mov    %rbp,%rsi
  mov    $0xa,%edi
  call   <fputc@plt>
  mov    %rbp,%rdi
  lea    D869(%rip),%rsi
  xor    %eax,%eax
  call   <fprintf@plt>
  mov    %rbp,%rcx
  mov    %rbx,%rdi
  mov    $0x22,%edx
  mov    $0x1,%esi
  call   <fwrite@plt>
  mov    %rbp,%rcx
  mov    %r15,%rdi
  mov    $0x17,%edx
  mov    $0x1,%esi
  call   <fwrite@plt>
  mov    %rbp,%rcx
  mov    %r14,%rdi
  mov    $0x25,%edx
  mov    $0x1,%esi
  call   <fwrite@plt>
  mov    %rbp,%rcx
  mov    %r13,%rdi
  mov    $0x1f,%edx
  mov    $0x1,%esi
  call   <fwrite@plt>
  mov    %rbp,%rcx
  mov    $0x6,%edx
  mov    %r12,%rdi
  mov    $0x1,%esi
  call   <fwrite@plt>
  mov    %rbp,%rsi
  mov    $0xa,%edi
  call   <fputc@plt>
  mov    %rbp,%rdi
  lea    D259(%rip),%rsi
  xor    %eax,%eax
  call   <fprintf@plt>
  mov    %rbp,%rcx
  mov    %rbx,%rdi
  mov    $0x22,%edx
  mov    $0x1,%esi
  lea    D542(%rip),%rbx
  call   <fwrite@plt>
  mov    %rbp,%rcx
  mov    %r15,%rdi
  mov    $0x17,%edx
  mov    $0x1,%esi
  call   <fwrite@plt>
  mov    %rbp,%rcx
  mov    %r14,%rdi
  mov    $0x25,%edx
  mov    $0x1,%esi
  call   <fwrite@plt>
  mov    %rbp,%rcx
  mov    %r13,%rdi
  mov    $0x1f,%edx
  mov    $0x1,%esi
  call   <fwrite@plt>
  mov    %rbp,%rcx
  mov    $0x6,%edx
  mov    %r12,%rdi
  mov    $0x1,%esi
  call   <fwrite@plt>
  mov    %rbp,%rsi
  mov    $0xa,%edi
  call   <fputc@plt>
  mov    %rbp,%rdi
  lea    D360(%rip),%rsi
  xor    %eax,%eax
  call   <fprintf@plt>
  mov    %rbp,%rcx
  mov    $0x1c,%edx
  mov    $0x1,%esi
  lea    D102(%rip),%rdi
  call   <fwrite@plt>
  mov    %rbp,%rcx
  mov    %r15,%rdi
  mov    $0x17,%edx
  mov    $0x1,%esi
  lea    D996(%rip),%r15
  call   <fwrite@plt>
  mov    %rbp,%rcx
  mov    %r14,%rdi
  mov    $0x25,%edx
  mov    $0x1,%esi
  lea    D590(%rip),%r14
  call   <fwrite@plt>
  mov    %rbp,%rcx
  mov    %r13,%rdi
  mov    $0x1f,%edx
  mov    $0x1,%esi
  lea    D739(%rip),%r13
  call   <fwrite@plt>
  mov    %rbp,%rcx
  mov    $0x6,%edx
  mov    %r12,%rdi
  mov    $0x1,%esi
  call   <fwrite@plt>
  mov    %rbp,%rsi
  mov    $0xa,%edi
  call   <fputc@plt>
  mov    %rbp,%rdi
  lea    D139(%rip),%rsi
  xor    %eax,%eax
  call   <fprintf@plt>
  lea    D39(%rip),%r9
  mov    %rbp,%rcx
  mov    $0x12,%edx
  mov    %r9,%rdi
  mov    $0x1,%esi
  call   <fwrite@plt>
  lea    D749(%rip),%r8
  mov    %rbp,%rcx
  mov    $0x12,%edx
  mov    %r8,%rdi
  mov    $0x1,%esi
  call   <fwrite@plt>
  mov    %rbp,%rcx
  mov    $0x29,%edx
  mov    %rbx,%rdi
  mov    $0x1,%esi
  call   <fwrite@plt>
  mov    %rbp,%rdi
  lea    D95(%rip),%rsi
  xor    %eax,%eax
  call   <fprintf@plt>
  mov    %rbp,%rcx
  mov    $0x19,%edx
  mov    %r15,%rdi
  mov    $0x1,%esi
  call   <fwrite@plt>
  mov    %r14,%rsi
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <fprintf@plt>
  mov    %rbp,%rcx
  mov    %r13,%rdi
  mov    $0x13,%edx
  mov    $0x1,%esi
  call   <fwrite@plt>
  mov    %rbp,%rcx
  mov    $0x6,%edx
  mov    %r12,%rdi
  mov    $0x1,%esi
  call   <fwrite@plt>
  mov    %rbp,%rsi
  mov    $0xa,%edi
  call   <fputc@plt>
  mov    %rbp,%rdi
  lea    D544(%rip),%rsi
  xor    %eax,%eax
  call   <fprintf@plt>
  lea    D39(%rip),%r9
  mov    %rbp,%rcx
  mov    $0x12,%edx
  mov    %r9,%rdi
  mov    $0x1,%esi
  call   <fwrite@plt>
  lea    D749(%rip),%r8
  mov    %rbp,%rcx
  mov    $0x12,%edx
  mov    %r8,%rdi
  mov    $0x1,%esi
  call   <fwrite@plt>
  mov    %rbp,%rcx
  mov    $0x29,%edx
  mov    %rbx,%rdi
  mov    $0x1,%esi
  call   <fwrite@plt>
  mov    %rbp,%rdi
  lea    D1144(%rip),%rsi
  xor    %eax,%eax
  call   <fprintf@plt>
  mov    %rbp,%rcx
  mov    $0x19,%edx
  mov    %r15,%rdi
  mov    $0x1,%esi
  call   <fwrite@plt>
  mov    %r14,%rsi
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <fprintf@plt>
  mov    %rbp,%rcx
  mov    %r13,%rdi
  mov    $0x13,%edx
  mov    $0x1,%esi
  call   <fwrite@plt>
  mov    %rbp,%rcx
  mov    $0x6,%edx
  mov    %r12,%rdi
  mov    $0x1,%esi
  call   <fwrite@plt>
  mov    %rbp,%rsi
  mov    $0xa,%edi
  call   <fputc@plt>
  mov    0xc(%rsp),%ecx
  mov    0x8(%rsp),%edx
  mov    %rbp,%rdi
  add    $0x18,%rsp
  lea    D89(%rip),%rsi
  xor    %eax,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  jmp    1080 <fprintf@plt>
```

tool_calls: name: retrieve_data
arguments: tag: D267
type: string
name: retrieve_data
arguments: tag: D316
type: string
name: retrieve_data
arguments: tag: D490
type: string
name: retrieve_data
arguments: tag: D850
type: string
name: retrieve_data
arguments: tag: D1044
type: string
name: retrieve_data
arguments: tag: D210
type: string
name: retrieve_data
arguments: tag: D1146
type: string
name: retrieve_data
arguments: tag: D382
type: string
name: retrieve_data
arguments: tag: D233
type: string
name: retrieve_data
arguments: tag: D512
type: string
name: retrieve_data
arguments: tag: D1147
type: string
name: retrieve_data
arguments: tag: D256
type: string
name: retrieve_data
arguments: tag: D112
type: string
name: retrieve_data
arguments: tag: D1079
type: string
name: retrieve_data
arguments: tag: D683
type: string
name: retrieve_data
arguments: tag: D73
type: string
name: retrieve_data
arguments: tag: D709
type: string
name: retrieve_data
arguments: tag: D1034
type: string
name: retrieve_data
arguments: tag: D946
type: string
name: retrieve_data
arguments: tag: D806
type: string
name: retrieve_data
arguments: tag: D855
type: string
name: retrieve_data
arguments: tag: D1082
type: string
name: retrieve_data
arguments: tag: D1042
type: string
name: retrieve_data
arguments: tag: D511
type: string
name: retrieve_data
arguments: tag: D1134
type: string
name: retrieve_data
arguments: tag: D30
type: string
name: retrieve_data
arguments: tag: D61
type: string
name: retrieve_data
arguments: tag: D1058
type: string
name: retrieve_data
arguments: tag: D160
type: string
name: retrieve_data
arguments: tag: D455
type: string
name: retrieve_data
arguments: tag: D232
type: string
name: retrieve_data
arguments: tag: D1028
type: string
name: retrieve_data
arguments: tag: D1119
type: string
name: retrieve_data
arguments: tag: D244
type: string
name: retrieve_data
arguments: tag: D1089
type: string
name: retrieve_data
arguments: tag: D295
type: string
name: retrieve_data
arguments: tag: D933
type: string
name: retrieve_data
arguments: tag: D834
type: string
name: retrieve_data
arguments: tag: D265
type: string
name: retrieve_data
arguments: tag: D190
type: string
name: retrieve_data
arguments: tag: D245
type: string
name: retrieve_data
arguments: tag: D723
type: string
name: retrieve_data
arguments: tag: D836
type: string
name: retrieve_data
arguments: tag: D943
type: string
name: retrieve_data
arguments: tag: D122
type: string
name: retrieve_data
arguments: tag: D616
type: string
name: retrieve_data
arguments: tag: D831
type: string
name: retrieve_data
arguments: tag: D880
type: string
name: retrieve_data
arguments: tag: D569
type: string
name: retrieve_data
arguments: tag: D885
type: string
name: retrieve_data
arguments: tag: D907
type: string
name: retrieve_data
arguments: tag: D242
type: string
name: retrieve_data
arguments: tag: D941
type: string
name: retrieve_data
arguments: tag: D1013
type: string
name: retrieve_data
arguments: tag: D754
type: string
name: retrieve_data
arguments: tag: D934
type: string
name: retrieve_data
arguments: tag: D347
type: string
name: retrieve_data
arguments: tag: D732
type: string
name: retrieve_data
arguments: tag: D323
type: string
name: retrieve_data
arguments: tag: D812
type: string
name: retrieve_data
arguments: tag: D426
type: string
name: retrieve_data
arguments: tag: D645
type: string
name: retrieve_data
arguments: tag: D779
type: string
name: retrieve_data
arguments: tag: D782
type: string
name: retrieve_data
arguments: tag: D673
type: string
name: retrieve_data
arguments: tag: D201
type: string
name: retrieve_data
arguments: tag: D435
type: string
name: retrieve_data
arguments: tag: D804
type: string
name: retrieve_data
arguments: tag: D1047
type: string
name: retrieve_data
arguments: tag: D1006
type: string
name: retrieve_data
arguments: tag: D509
type: string
name: retrieve_data
arguments: tag: D287
type: string
name: retrieve_data
arguments: tag: D784
type: string
name: retrieve_data
arguments: tag: D366
type: string
name: retrieve_data
arguments: tag: D575
type: string
name: retrieve_data
arguments: tag: D935
type: string
name: retrieve_data
arguments: tag: D443
type: string
name: retrieve_data
arguments: tag: D912
type: string
name: retrieve_data
arguments: tag: D681
type: string
name: retrieve_data
arguments: tag: D869
type: string
name: retrieve_data
arguments: tag: D259
type: string
name: retrieve_data
arguments: tag: D542
type: string
name: retrieve_data
arguments: tag: D360
type: string
name: retrieve_data
arguments: tag: D102
type: string
name: retrieve_data
arguments: tag: D996
type: string
name: retrieve_data
arguments: tag: D590
type: string
name: retrieve_data
arguments: tag: D739
type: string
name: retrieve_data
arguments: tag: D139
type: string
name: retrieve_data
arguments: tag: D39
type: string
name: retrieve_data
arguments: tag: D749
type: string
name: retrieve_data
arguments: tag: D95
type: string
name: retrieve_data
arguments: tag: D544
type: string
name: retrieve_data
arguments: tag: D1144
type: string
name: retrieve_data
arguments: tag: D89
type: string

tool: D267:   stroke


tool: D316:   fx fy neg moveto


tool: D490:   tx ty neg lineto


tool: D850: } def


tool: D1044:   newpath


tool: D210: %%!


tool: D1146: /mm {72 mul 25.4 div} def


tool: D382: /PageWidth  210 mm def %% const


tool: D233: /PageHeight 297 mm def %% const


tool: D512: /BorderWidth  7 mm def %% const


tool: D1147: /FontHeight     10 def %% const


tool: D256: /setR {/R exch def} def


tool: D112: /setr {/r exch def} def


tool: D1079: /setscaleX {/scaleX exch def} def


tool: D683: /setscaleY {/scaleY exch def} def


tool: D73: /setx {/x exch def} def


tool: D709: /sety {/y exch def} def


tool: D1034: /setfx {/fx exch def} def


tool: D946: /setfy {/fy exch def} def


tool: D806: /settx {/tx exch def} def


tool: D855: /setty {/ty exch def} def


tool: D1082: /settmp {/tmp exch def} def


tool: D1042: /Times-Roman findfont FontHeight scalefont setfont


tool: D511: /rescale {                     %% stack: max_pos, max_level


tool: D1134:   PageHeight 2 BorderWidth mul


tool: D30:   sub exch 1 add div setscaleY %% scaleY = (PH-2BW)/(max_level+1)


tool: D61:   PageWidth 2 BorderWidth mul


tool: D1058:   sub exch div setscaleX       %% scaleX = (PH-2BW)/(max_pos)


tool: D160:   scaleX .33 mul dup setR


tool: D455:   0.25 scaleY mul gt {.2 scaleY mul setR} if


tool: D232:   .6 mm setr


tool: D1028:   0 PageHeight translate       %% go to top of page


tool: D1119:   BorderWidth scaleX 2 div add


tool: D244:   BorderWidth scaleY add


tool: D1089:   neg translate                %% go to left top of drawing


tool: D295: /node {                        %% stack: (id), x, y


tool: D933:   scaleY mul sety


tool: D834:   scaleX mul setx


tool: D265:   %% draw node


tool: D190:   x y neg R 0 360 arc


tool: D245:   %% draw then edge


tool: D723:   .5 sqrt R mul settmp         %% tmp = sqrt(2) * R


tool: D836:   x tmp sub setfx              %% fx = X(x) - tmp


tool: D943:   y tmp add setfy              %% fy = Y(y) - sqrt 2 * R


tool: D122:   x R sub settx                %% tx = X(x) - R


tool: D616:   y R add setty                %% ty = Y(y) + R


tool: D831:   %% draw else edge


tool: D880:   x tmp add setfx              %% fx = X(x) + tmp


tool: D569:   x R add settx                %% tx = X(x) + R


tool: D885:   %% draw string


tool: D907:   dup stringwidth pop


tool: D242:   2 div neg x add


tool: D941:   y FontHeight 3 div add


tool: D1013:   neg moveto show


tool: D754: /edge {                        %% stack: (polarity), fx, tx, ty


tool: D934:   %% draw initial edge


tool: D347:   scaleY mul R sub setty       %% ty = Y(y) - R


tool: D732:   0 setfy                      %% fy = Y(0)


tool: D323:   scaleX mul settx             %% tx = X(tx)


tool: D812:   scaleX mul setfx             %% fx = X(fx)


tool: D426:   0.5 scaleY mul setfy         %% fy = Y(0.5)


tool: D645:   fx fy neg lineto


tool: D779:   %% draw negation if necessary


tool: D782:   (n) eq {


tool: D673:     fx tx add 2 div            %% fx = (fx+tx)/2


tool: D201:     fy ty add 2 div            %% fy = (fy+ty)/2


tool: D435:     neg r 0 360 arc


tool: D804:     0 setgray fill


tool: D1047:   }if


tool: D1006: /then { %%stack: (polarity), fx, fy, tx, ty


tool: D509:   scaleY mul R sub setty       %% ty = Y(ty) - R


tool: D287:   scaleY mul R add setfy       %% fy = Y(fy) + R


tool: D784:   scaleX mul R sub setfx       %% fx = X(fx) - R


tool: D366: /else { %%stack: (polarity), fx, fy, tx, ty


tool: D575:   scaleX mul R add setfx       %% fx = X(fx) + R


tool: D935:   scaleY mul FontHeight 2 div add


tool: D443:   newpath neg moveto dup stringwidth


tool: D912:   pop 2 div neg 0 rmoveto show


tool: D681:   exch scaleX mul exch


tool: D869: /const {                       %% stack: (const), x, y


tool: D259: /void {                       %% stack: (void), x, y


tool: D542:   newpath neg moveto dup stringwidth pop


tool: D360: /name {                       %% stack: (name), x, y


tool: D102:   scaleY mul FontHeight sub


tool: D996:   R 0.025 scaleY mul add


tool: D590:   FontHeight add               %% y = Y(y) + R + 0.025*scaleY + FH


tool: D739:   neg rmoveto show


tool: D139: /then_const {                  %% stack: (const), x, y


tool: D39:   scaleY mul exch


tool: D749:   scaleX mul exch


tool: D95:   2 div R add neg              %% x = X(x) - R - fw/2


tool: D544: /else_const {                  %% stack: (const), x, y


tool: D1144:   2 div neg R add              %% x = X(x) + R - fw/2


tool: D89: %d %d rescale


assistant: ```c
void draw_start(FILE *fp, int max_x, int max_y) {
  fprintf(fp, "%%!\n");
  fprintf(fp, "/mm {72 mul 25.4 div} def\n");
  fprintf(fp, "/PageWidth  210 mm def %% const\n");
  fprintf(fp, "/PageHeight 297 mm def %% const\n");
  fprintf(fp, "/BorderWidth  7 mm def %% const\n");
  fprintf(fp, "/FontHeight     10 def %% const\n");
  fprintf(fp, "/setR {/R exch def} def\n");
  fprintf(fp, "/setr {/r exch def} def\n");
  fprintf(fp, "/setscaleX {/scaleX exch def} def\n");
  fprintf(fp, "/setscaleY {/scaleY exch def} def\n");
  fprintf(fp, "/setx {/x exch def} def\n");
  fprintf(fp, "/sety {/y exch def} def\n");
  fprintf(fp, "/setfx {/fx exch def} def\n");
  fprintf(fp, "/setfy {/fy exch def} def\n");
  fprintf(fp, "/settx {/tx exch def} def\n");
  fprintf(fp, "/setty {/ty exch def} def\n");
  fprintf(fp, "/settmp {/tmp exch def} def\n");
  fprintf(fp, "/Times-Roman findfont FontHeight scalefont setfont\n");
  fprintf(fp, "\n");
  fprintf(fp, "/rescale {                     %% stack: max_pos, max_level\n");
  fprintf(fp, "  PageHeight 2 BorderWidth mul\n");
  fprintf(fp, "  sub exch 1 add div setscaleY %% scaleY = (PH-2BW)/(max_level+1)\n");
  fprintf(fp, "  PageWidth 2 BorderWidth mul\n");
  fprintf(fp, "  sub exch div setscaleX       %% scaleX = (PH-2BW)/(max_pos)\n");
  fprintf(fp, "  scaleX .33 mul dup setR\n");
  fprintf(fp, "  0.25 scaleY mul gt {.2 scaleY mul setR} if\n");
  fprintf(fp, "  .6 mm setr\n");
  fprintf(fp, "  0 PageHeight translate       %% go to top of page\n");
  fprintf(fp, "  BorderWidth scaleX 2 div add\n");
  fprintf(fp, "  BorderWidth scaleY add\n");
  fprintf(fp, "  neg translate                %% go to left top of drawing\n");
  fprintf(fp, "} def\n");
  fprintf(fp, "\n");
  fprintf(fp, "/node {                        %% stack: (id), x, y\n");
  fprintf(fp, "  scaleY mul sety\n");
  fprintf(fp, "  scaleX mul setx\n");
  fprintf(fp, "  newpath\n");
  fprintf(fp, "  %% draw node\n");
  fprintf(fp, "  x y neg R 0 360 arc\n");
  fprintf(fp, "  %% draw then edge\n");
  fprintf(fp, "  .5 sqrt R mul settmp         %% tmp = sqrt(2) * R\n");
  fprintf(fp, "  x tmp sub setfx              %% fx = X(x) - tmp\n");
  fprintf(fp, "  y tmp add setfy              %% fy = Y(y) - sqrt 2 * R\n");
  fprintf(fp, "  x R sub settx                %% tx = X(x) - R\n");
  fprintf(fp, "  y R add setty                %% ty = Y(y) + R\n");
  fprintf(fp, "  fx fy neg moveto\n");
  fprintf(fp, "  tx ty neg lineto\n");
  fprintf(fp, "  %% draw else edge\n");
  fprintf(fp, "  x tmp add setfx              %% fx = X(x) + tmp\n");
  fprintf(fp, "  x R add settx                %% tx = X(x) + R\n");
  fprintf(fp, "  fx fy neg moveto\n");
  fprintf(fp, "  tx ty neg lineto\n");
  fprintf(fp, "  stroke\n");
  fprintf(fp, "  %% draw string\n");
  fprintf(fp, "  dup stringwidth pop\n");
  fprintf(fp, "  2 div neg x add\n");
  fprintf(fp, "  y FontHeight 3 div add\n");
  fprintf(fp, "  neg moveto show\n");
  fprintf(fp, "} def\n");
  fprintf(fp, "\n");
  fprintf(fp, "/edge {                        %% stack: (polarity), fx, tx, ty\n");
  fprintf(fp, "  %% draw initial edge\n");
  fprintf(fp, "  scaleY mul R sub setty       %% ty = Y(y) - R\n");
  fprintf(fp, "  0 setfy                      %% fy = Y(0)\n");
  fprintf(fp, "  scaleX mul settx             %% tx = X(tx)\n");
  fprintf(fp, "  scaleX mul setfx             %% fx = X(fx)\n");
  fprintf(fp, "  newpath\n");
  fprintf(fp, "  fx fy neg moveto\n");
  fprintf(fp, "  0.5 scaleY mul setfy         %% fy = Y(0.5)\n");
  fprintf(fp, "  fx fy neg lineto\n");
  fprintf(fp, "  tx ty neg lineto\n");
  fprintf(fp, "  stroke\n");
  fprintf(fp, "  %% draw negation if necessary\n");
  fprintf(fp, "  (n) eq {\n");
  fprintf(fp, "    fx tx add 2 div            %% fx = (fx+tx)/2\n");
  fprintf(fp, "    fy ty add 2 div            %% fy = (fy+ty)/2\n");
  fprintf(fp, "    neg r 0 360 arc\n");
  fprintf(fp, "    0 setgray fill\n");
  fprintf(fp, "  }if\n");
  fprintf(fp, "} def\n");
  fprintf(fp, "\n");
  fprintf(fp, "/then { %%stack: (polarity), fx, fy, tx, ty\n");
  fprintf(fp, "  %% draw then edge\n");
  fprintf(fp, "  scaleY mul R sub setty       %% ty = Y(ty) - R\n");
  fprintf(fp, "  scaleX mul settx             %% tx = X(tx)\n");
  fprintf(fp, "  scaleY mul R add setfy       %% fy = Y(fy) + R\n");
  fprintf(fp, "  scaleX mul R sub setfx       %% fx = X(fx) - R\n");
  fprintf(fp, "  newpath\n");
  fprintf(fp, "  fx fy neg moveto\n");
  fprintf(fp, "  tx ty neg lineto\n");
  fprintf(fp, "  stroke\n");
  fprintf(fp, "  %% draw negation if necessary\n");
  fprintf(fp, "  (n) eq {\n");
  fprintf(fp, "    fx tx add 2 div            %% fx = (fx+tx)/2\n");
  fprintf(fp, "    fy ty add 2 div            %% fy = (fy+ty)/2\n");
  fprintf(fp, "    neg r 0 360 arc\n");
  fprintf(fp, "    0 setgray fill\n");
  fprintf(fp, "  }if\n");
  fprintf(fp, "} def\n");
  fprintf(fp, "\n");
  fprintf(fp, "/else { %%stack: (polarity), fx, fy, tx, ty\n");
  fprintf(fp, "  %% draw else edge\n");
  fprintf(fp, "  scaleY mul R sub setty       %% ty = Y(ty) - R\n");
  fprintf(fp, "  scaleX mul settx             %% tx = X(tx)\n");
  fprintf(fp, "  scaleY mul R add setfy       %% fy = Y(fy) + R\n");
  fprintf(fp, "  scaleX mul R add setfx       %% fx = X(fx) + R\n");
  fprintf(fp, "  newpath\n");
  fprintf(fp, "  fx fy neg moveto\n");
  fprintf(fp, "  tx ty neg lineto\n");
  fprintf(fp, "  stroke\n");
  fprintf(fp, "  %% draw negation if necessary\n");
  fprintf(fp, "  (n) eq {\n");
  fprintf(fp, "    fx tx add 2 div            %% fx = (fx+tx)/2\n");
  fprintf(fp, "    fy ty add 2 div            %% fy = (fy+ty)/2\n");
  fprintf(fp, "    neg r 0 360 arc\n");
  fprintf(fp, "    0 setgray fill\n");
  fprintf(fp, "  }if\n");
  fprintf(fp, "} def\n");
  fprintf(fp, "\n");
  fprintf(fp, "/const {                       %% stack: (const), x, y\n");
  fprintf(fp, "  scaleY mul FontHeight 2 div add\n");
  fprintf(fp, "  exch scaleX mul exch\n");
  fprintf(fp, "  newpath neg moveto dup stringwidth\n");
  fprintf(fp, "  pop 2 div neg 0 rmoveto show\n");
  fprintf(fp, "} def\n");
  fprintf(fp, "\n");
  fprintf(fp, "/void {                       %% stack: (void), x, y\n");
  fprintf(fp, "  scaleY mul FontHeight 2 div add\n");
  fprintf(fp, "  exch scaleX mul exch\n");
  fprintf(fp, "  newpath neg moveto dup stringwidth\n");
  fprintf(fp, "  pop 2 div neg 0 rmoveto show\n");
  fprintf(fp, "} def\n");
  fprintf(fp, "\n");
  fprintf(fp, "/name {                       %% stack: (name), x, y\n");
  fprintf(fp, "  scaleY mul FontHeight sub\n");
  fprintf(fp, "  exch scaleX mul exch\n");
  fprintf(fp, "  newpath neg moveto dup stringwidth\n");
  fprintf(fp, "  pop 2 div neg 0 rmoveto show\n");
  fprintf(fp, "} def\n");
  fprintf(fp, "\n");
  fprintf(fp, "/then_const {                  %% stack: (const), x, y\n");
  fprintf(fp, "  scaleY mul exch\n");
  fprintf(fp, "  scaleX mul exch\n");
  fprintf(fp, "  newpath neg moveto dup stringwidth pop\n");
  fprintf(fp, "  2 div R add neg              %% x = X(x) - R - fw/2\n");
  fprintf(fp, "  R 0.025 scaleY mul add\n");
  fprintf(fp, "  FontHeight add               %% y = Y(y) + R + 0.025*scaleY + FH\n");
  fprintf(fp, "  neg rmoveto show\n");
  fprintf(fp, "} def\n");
  fprintf(fp, "\n");
  fprintf(fp, "/else_const {                  %% stack: (const), x, y\n");
  fprintf(fp, "  scaleY mul exch\n");
  fprintf(fp, "  scaleX mul exch\n");
  fprintf(fp, "  newpath neg moveto dup stringwidth pop\n");
  fprintf(fp, "  2 div neg R add              %% x = X(x) + R - fw/2\n");
  fprintf(fp, "  R 0.025 scaleY mul add\n");
  fprintf(fp, "  FontHeight add               %% y = Y(y) + R + 0.025*scaleY + FH\n");
  fprintf(fp, "  neg rmoveto show\n");
  fprintf(fp, "} def\n");
  fprintf(fp, "\n");
  fprintf(fp, "%d %d rescale\n", max_x, max_y);
}
```