user: 请从给定的汇编指令推导出C源代码：

```asm
<main>:
  endbr64
  push   %r12
  lea    D91(%rip),%rdi
  push   %rbp
  sub    $0xc8,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0xb8(%rsp)
  movabs $0x30302e303030302b,%rax
  lea    0x41(%rsp),%rbp
  movb   $0x0,0x4b(%rsp)
  lea    0x11(%rsp),%r12
  movl   $0x303030,0x54(%rsp)
  movl   $0x303030,0x60(%rsp)
  movl   $0x303030,0x6c(%rsp)
  movl   $0x303030,0x78(%rsp)
  movl   $0x303030,0x84(%rsp)
  mov    %rax,0x41(%rsp)
  mov    $0x3030,%eax
  mov    %ax,0x49(%rsp)
  movabs $0x302e30303231302b,%rax
  mov    %rax,0x4c(%rsp)
  add    $0x7070000,%rax
  mov    %rax,0x58(%rsp)
  sub    $0x8ff0000,%rax
  mov    %rax,0x64(%rsp)
  sub    $0x6ff00,%rax
  mov    %rax,0x70(%rsp)
  add    $0x900ff02,%rax
  mov    %rax,0x7c(%rsp)
  sub    $0x8ff0000,%rax
  mov    %rax,0x88(%rsp)
  sub    $0x1ff00,%rax
  mov    %rax,0x94(%rsp)
  sub    $0x20102,%rax
  mov    %rax,0xa0(%rsp)
  movabs $0x786a786a78797979,%rax
  mov    %rax,0xac(%rsp)
  xor    %eax,%eax
  movl   $0x303030,0x90(%rsp)
  movl   $0x303030,0x9c(%rsp)
  movl   $0x303030,0xa8(%rsp)
  movl   $0x6a6a6a,0xb4(%rsp)
  call   <printf@plt>
  lea    0x4c(%rsp),%rsi
  mov    %rbp,%rdi
  call   <geofence_aprs_frequency@plt>
  lea    D2(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  lea    0x58(%rsp),%rsi
  mov    %rbp,%rdi
  call   <geofence_aprs_frequency@plt>
  lea    D90(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  lea    0x64(%rsp),%rsi
  mov    %rbp,%rdi
  call   <geofence_aprs_frequency@plt>
  lea    D66(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  lea    0x70(%rsp),%rsi
  mov    %rbp,%rdi
  call   <geofence_aprs_frequency@plt>
  lea    D68(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  lea    0x7c(%rsp),%rsi
  mov    %rbp,%rdi
  call   <geofence_aprs_frequency@plt>
  lea    D52(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  lea    0x88(%rsp),%rsi
  mov    %rbp,%rdi
  call   <geofence_aprs_frequency@plt>
  lea    D50(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  lea    0x94(%rsp),%rsi
  mov    %rbp,%rdi
  call   <geofence_aprs_frequency@plt>
  lea    D15(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  lea    0xa0(%rsp),%rsi
  mov    %rbp,%rdi
  call   <geofence_aprs_frequency@plt>
  lea    D98(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    %rbp,%rdi
  lea    0xac(%rsp),%rsi
  mov    $0x30,%ebp
  call   <geofence_aprs_frequency@plt>
  xor    %esi,%esi
  xor    %edi,%edi
  mov    %bp,0x3f(%rsp)
  lea    0xb(%rsp),%rbp
  xor    %ecx,%ecx
  xor    %r8d,%r8d
  xor    %r9d,%r9d
  xor    %r10d,%r10d
  mov    $0x30,%r11d
  xor    %edx,%edx
  mov    %si,0x1b(%rsp)
  mov    %di,0x21(%rsp)
  mov    $0x1,%esi
  mov    %rbp,%rdi
  mov    %cx,0x15(%rsp)
  mov    %r8w,0x27(%rsp)
  mov    %r9w,0x2d(%rsp)
  mov    %r10w,0x33(%rsp)
  mov    %r11w,0x39(%rsp)
  mov    %dx,0xf(%rsp)
  movl   $0x30,0xb(%rsp)
  movl   $0x3038,0x11(%rsp)
  movl   $0x303038,0x17(%rsp)
  movl   $0x30303033,0x1d(%rsp)
  movl   $0x30303034,0x23(%rsp)
  movl   $0x30303134,0x29(%rsp)
  movl   $0x39393939,0x2f(%rsp)
  movl   $0x30303031,0x35(%rsp)
  movl   $0x30303035,0x3b(%rsp)
  call   <geofence_slow_tlm_altitude@plt>
  mov    %rbp,%rsi
  lea    D1(%rip),%rbp
  mov    %eax,%edx
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    %r12,%rdi
  mov    $0x2,%esi
  call   <geofence_slow_tlm_altitude@plt>
  mov    %r12,%rsi
  mov    %rbp,%rdi
  lea    0x17(%rsp),%r12
  mov    %eax,%edx
  xor    %eax,%eax
  call   <printf@plt>
  mov    %r12,%rdi
  mov    $0x3,%esi
  call   <geofence_slow_tlm_altitude@plt>
  mov    %r12,%rsi
  mov    %rbp,%rdi
  lea    0x1d(%rsp),%r12
  mov    %eax,%edx
  xor    %eax,%eax
  call   <printf@plt>
  mov    %r12,%rdi
  mov    $0x4,%esi
  call   <geofence_slow_tlm_altitude@plt>
  mov    %r12,%rsi
  mov    %rbp,%rdi
  lea    0x23(%rsp),%r12
  mov    %eax,%edx
  xor    %eax,%eax
  call   <printf@plt>
  mov    %r12,%rdi
  mov    $0x4,%esi
  call   <geofence_slow_tlm_altitude@plt>
  mov    %r12,%rsi
  mov    %rbp,%rdi
  lea    0x29(%rsp),%r12
  mov    %eax,%edx
  xor    %eax,%eax
  call   <printf@plt>
  mov    %r12,%rdi
  mov    $0x4,%esi
  call   <geofence_slow_tlm_altitude@plt>
  mov    %r12,%rsi
  mov    %rbp,%rdi
  lea    0x2f(%rsp),%r12
  mov    %eax,%edx
  xor    %eax,%eax
  call   <printf@plt>
  mov    %r12,%rdi
  mov    $0x4,%esi
  call   <geofence_slow_tlm_altitude@plt>
  mov    %r12,%rsi
  mov    %rbp,%rdi
  lea    0x35(%rsp),%r12
  mov    %eax,%edx
  xor    %eax,%eax
  call   <printf@plt>
  mov    %r12,%rdi
  mov    $0x5,%esi
  call   <geofence_slow_tlm_altitude@plt>
  mov    %r12,%rsi
  mov    %rbp,%rdi
  lea    0x3b(%rsp),%r12
  mov    %eax,%edx
  xor    %eax,%eax
  call   <printf@plt>
  mov    $0x5,%esi
  mov    %r12,%rdi
  call   <geofence_slow_tlm_altitude@plt>
  mov    %r12,%rsi
  mov    %rbp,%rdi
  mov    %eax,%edx
  xor    %eax,%eax
  call   <printf@plt>
  mov    0xb8(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L7
  add    $0xc8,%rsp
  xor    %eax,%eax
  pop    %rbp
  pop    %r12
  ret
L7:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: read_data
arguments: tag: D91
type_guessed: string
name: read_data
arguments: tag: D2
type_guessed: string
name: read_data
arguments: tag: D90
type_guessed: string
name: read_data
arguments: tag: D66
type_guessed: string
name: read_data
arguments: tag: D68
type_guessed: string
name: read_data
arguments: tag: D52
type_guessed: string
name: read_data
arguments: tag: D50
type_guessed: string
name: read_data
arguments: tag: D15
type_guessed: string
name: read_data
arguments: tag: D98
type_guessed: string
name: read_data
arguments: tag: D1
type_guessed: string

tool: D91: 12E (EU) is 

tool: D2: 89E (EU) is 

tool: D90: 90E (CN) is 

tool: D66: 120E (CN) is 

tool: D68: 39W (EU) is 

tool: D52: 40W (US) is 

tool: D50: 120W (US) is 

tool: D15: 0E (EU) is 

tool: D98: ERROR (EU) is 

tool: D1: %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;
}
```