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

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0xe0,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movabs $0x30302e303030302b,%rax
  mov    %rax,-0x7f(%rbp)
  movw   $0x3030,-0x77(%rbp)
  movb   $0x0,-0x75(%rbp)
  movabs $0x302e30303231302b,%rax
  mov    %rax,-0x74(%rbp)
  movl   $0x303030,-0x6c(%rbp)
  movabs $0x302e30303938302b,%rax
  mov    %rax,-0x68(%rbp)
  movl   $0x303030,-0x60(%rbp)
  movabs $0x302e30303039302b,%rax
  mov    %rax,-0x5c(%rbp)
  movl   $0x303030,-0x54(%rbp)
  movabs $0x302e30303032312b,%rax
  mov    %rax,-0x50(%rbp)
  movl   $0x303030,-0x48(%rbp)
  movabs $0x302e30303933302d,%rax
  mov    %rax,-0x44(%rbp)
  movl   $0x303030,-0x3c(%rbp)
  movabs $0x302e30303034302d,%rax
  mov    %rax,-0x38(%rbp)
  movl   $0x303030,-0x30(%rbp)
  movabs $0x302e30303032312d,%rax
  mov    %rax,-0x2c(%rbp)
  movl   $0x303030,-0x24(%rbp)
  movabs $0x302e30303030302b,%rax
  mov    %rax,-0x20(%rbp)
  movl   $0x303030,-0x18(%rbp)
  movabs $0x786a786a78797979,%rax
  mov    %rax,-0x14(%rbp)
  movl   $0x6a6a6a,-0xc(%rbp)
  lea    D39(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    -0x74(%rbp),%rdx
  lea    -0x7f(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <geofence_aprs_frequency@plt>
  lea    D125(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    -0x68(%rbp),%rdx
  lea    -0x7f(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <geofence_aprs_frequency@plt>
  lea    D30(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    -0x5c(%rbp),%rdx
  lea    -0x7f(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <geofence_aprs_frequency@plt>
  lea    D68(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    -0x50(%rbp),%rdx
  lea    -0x7f(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <geofence_aprs_frequency@plt>
  lea    D70(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    -0x44(%rbp),%rdx
  lea    -0x7f(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <geofence_aprs_frequency@plt>
  lea    D49(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    -0x38(%rbp),%rdx
  lea    -0x7f(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <geofence_aprs_frequency@plt>
  lea    D23(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    -0x2c(%rbp),%rdx
  lea    -0x7f(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <geofence_aprs_frequency@plt>
  lea    D120(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    -0x20(%rbp),%rdx
  lea    -0x7f(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <geofence_aprs_frequency@plt>
  lea    D178(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    -0x14(%rbp),%rdx
  lea    -0x7f(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <geofence_aprs_frequency@plt>
  movl   $0x30,-0xb5(%rbp)
  movw   $0x0,-0xb1(%rbp)
  movl   $0x1,-0xdc(%rbp)
  movl   $0x3038,-0xaf(%rbp)
  movw   $0x0,-0xab(%rbp)
  movl   $0x2,-0xd8(%rbp)
  movl   $0x303038,-0xa9(%rbp)
  movw   $0x0,-0xa5(%rbp)
  movl   $0x3,-0xd4(%rbp)
  movl   $0x30303033,-0xa3(%rbp)
  movw   $0x0,-0x9f(%rbp)
  movl   $0x4,-0xd0(%rbp)
  movl   $0x30303034,-0x9d(%rbp)
  movw   $0x0,-0x99(%rbp)
  movl   $0x4,-0xcc(%rbp)
  movl   $0x30303134,-0x97(%rbp)
  movw   $0x0,-0x93(%rbp)
  movl   $0x4,-0xc8(%rbp)
  movl   $0x39393939,-0x91(%rbp)
  movw   $0x0,-0x8d(%rbp)
  movl   $0x4,-0xc4(%rbp)
  movl   $0x30303031,-0x8b(%rbp)
  movw   $0x30,-0x87(%rbp)
  movl   $0x5,-0xc0(%rbp)
  movl   $0x30303035,-0x85(%rbp)
  movw   $0x30,-0x81(%rbp)
  movl   $0x5,-0xbc(%rbp)
  mov    -0xdc(%rbp),%edx
  lea    -0xb5(%rbp),%rax
  mov    %edx,%esi
  mov    %rax,%rdi
  call   <geofence_slow_tlm_altitude@plt>
  mov    %eax,%edx
  lea    -0xb5(%rbp),%rax
  mov    %rax,%rsi
  lea    D106(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    -0xd8(%rbp),%edx
  lea    -0xaf(%rbp),%rax
  mov    %edx,%esi
  mov    %rax,%rdi
  call   <geofence_slow_tlm_altitude@plt>
  mov    %eax,%edx
  lea    -0xaf(%rbp),%rax
  mov    %rax,%rsi
  lea    D106(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    -0xd4(%rbp),%edx
  lea    -0xa9(%rbp),%rax
  mov    %edx,%esi
  mov    %rax,%rdi
  call   <geofence_slow_tlm_altitude@plt>
  mov    %eax,%edx
  lea    -0xa9(%rbp),%rax
  mov    %rax,%rsi
  lea    D106(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    -0xd0(%rbp),%edx
  lea    -0xa3(%rbp),%rax
  mov    %edx,%esi
  mov    %rax,%rdi
  call   <geofence_slow_tlm_altitude@plt>
  mov    %eax,%edx
  lea    -0xa3(%rbp),%rax
  mov    %rax,%rsi
  lea    D106(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    -0xcc(%rbp),%edx
  lea    -0x9d(%rbp),%rax
  mov    %edx,%esi
  mov    %rax,%rdi
  call   <geofence_slow_tlm_altitude@plt>
  mov    %eax,%edx
  lea    -0x9d(%rbp),%rax
  mov    %rax,%rsi
  lea    D106(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    -0xc8(%rbp),%edx
  lea    -0x97(%rbp),%rax
  mov    %edx,%esi
  mov    %rax,%rdi
  call   <geofence_slow_tlm_altitude@plt>
  mov    %eax,%edx
  lea    -0x97(%rbp),%rax
  mov    %rax,%rsi
  lea    D106(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    -0xc4(%rbp),%edx
  lea    -0x91(%rbp),%rax
  mov    %edx,%esi
  mov    %rax,%rdi
  call   <geofence_slow_tlm_altitude@plt>
  mov    %eax,%edx
  lea    -0x91(%rbp),%rax
  mov    %rax,%rsi
  lea    D106(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    -0xc0(%rbp),%edx
  lea    -0x8b(%rbp),%rax
  mov    %edx,%esi
  mov    %rax,%rdi
  call   <geofence_slow_tlm_altitude@plt>
  mov    %eax,%edx
  lea    -0x8b(%rbp),%rax
  mov    %rax,%rsi
  lea    D106(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    -0xbc(%rbp),%edx
  lea    -0x85(%rbp),%rax
  mov    %edx,%esi
  mov    %rax,%rdi
  call   <geofence_slow_tlm_altitude@plt>
  mov    %eax,%edx
  lea    -0x85(%rbp),%rax
  mov    %rax,%rsi
  lea    D106(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0x0,%eax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L9
  call   <__stack_chk_fail@plt>
L9:
  leave
  ret
```

tool_calls: name: read_data
arguments: label: D39
type: string
name: read_data
arguments: label: D125
type: string
name: read_data
arguments: label: D30
type: string
name: read_data
arguments: label: D68
type: string
name: read_data
arguments: label: D70
type: string
name: read_data
arguments: label: D49
type: string
name: read_data
arguments: label: D23
type: string
name: read_data
arguments: label: D120
type: string
name: read_data
arguments: label: D178
type: string
name: read_data
arguments: label: D106
type: string

tool: D39: 12E (EU) is 

tool: D125: 89E (EU) is 

tool: D30: 90E (CN) is 

tool: D68: 120E (CN) is 

tool: D70: 39W (EU) is 

tool: D49: 40W (US) is 

tool: D23: 120W (US) is 

tool: D120: 0E (EU) is 

tool: D178: ERROR (EU) is 

tool: D106: %s: %d


assistant: ```c
int main(void) {
  char lat[11] = "+0000.0000";
  char a[12] = "+01200.0000";
  char b[12] = "+08900.0000";
  char c[12] = "+09000.0000";
  char d[12] = "+12000.0000";
  char e[12] = "-03900.0000";
  char f[12] = "-04000.0000";
  char g[12] = "-12000.0000";
  char h[12] = "+00000.0000";
  char i[12] = "yyyxjxjxjjj";
  printf("12E (EU) is ");
  geofence_aprs_frequency(lat, a);
  printf("89E (EU) is ");
  geofence_aprs_frequency(lat, b);
  printf("90E (CN) is ");
  geofence_aprs_frequency(lat, c);
  printf("120E (CN) is ");
  geofence_aprs_frequency(lat, d);
  printf("39W (EU) is ");
  geofence_aprs_frequency(lat, e);
  printf("40W (US) is ");
  geofence_aprs_frequency(lat, f);
  printf("120W (US) is ");
  geofence_aprs_frequency(lat, g);
  printf("0E (EU) is ");
  geofence_aprs_frequency(lat, h);
  printf("ERROR (EU) is ");
  geofence_aprs_frequency(lat, i);
  char aa[6] = "0";
  int aa_len = 1;
  char bb[6] = "80";
  int bb_len = 2;
  char cc[6] = "800";
  int cc_len = 3;
  char dd[6] = "3000";
  int dd_len = 4;
  char ee[6] = "4000";
  int ee_len = 4;
  char ff[6] = "4100";
  int ff_len = 4;
  char gg[6] = "9999";
  int gg_len = 4;
  char hh[6] = "10000";
  int hh_len = 5;
  char ii[6] = "50000";
  int ii_len = 5;
  printf("%s: %d\n", aa, geofence_slow_tlm_altitude(aa, aa_len));
  printf("%s: %d\n", bb, geofence_slow_tlm_altitude(bb, bb_len));
  printf("%s: %d\n", cc, geofence_slow_tlm_altitude(cc, cc_len));
  printf("%s: %d\n", dd, geofence_slow_tlm_altitude(dd, dd_len));
  printf("%s: %d\n", ee, geofence_slow_tlm_altitude(ee, ee_len));
  printf("%s: %d\n", ff, geofence_slow_tlm_altitude(ff, ff_len));
  printf("%s: %d\n", gg, geofence_slow_tlm_altitude(gg, gg_len));
  printf("%s: %d\n", hh, geofence_slow_tlm_altitude(hh, hh_len));
  printf("%s: %d\n", ii, geofence_slow_tlm_altitude(ii, ii_len));
  return 0;
}
```