user: Translate the below assembly code into C programming language:

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x30,%rsp
  movl   $0xa121,-0x28(%rbp)
  movl   $0xa121,-0x24(%rbp)
  movl   $0x51a,-0x20(%rbp)
  movl   $0x51a,-0x1c(%rbp)
  movl   $0x52a,-0x18(%rbp)
  movl   $0x52a,-0x14(%rbp)
  movl   $0x53a,-0x10(%rbp)
  movl   $0x54a,-0xc(%rbp)
  movl   $0x53a,-0x8(%rbp)
  movl   $0x54a,-0x4(%rbp)
  lea    D46(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  mov    -0x28(%rbp),%edx
  mov    -0x24(%rbp),%eax
  lea    (%rdx,%rax,1),%ecx
  mov    -0x24(%rbp),%edx
  mov    -0x28(%rbp),%eax
  mov    %eax,%esi
  lea    D13(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    -0x20(%rbp),%eax
  imul   -0x1c(%rbp),%eax
  mov    %eax,%ecx
  mov    -0x1c(%rbp),%edx
  mov    -0x20(%rbp),%eax
  mov    %eax,%esi
  lea    D24(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    -0x18(%rbp),%eax
  cltd
  idivl  -0x14(%rbp)
  mov    %eax,%ecx
  mov    -0x14(%rbp),%edx
  mov    -0x18(%rbp),%eax
  mov    %eax,%esi
  lea    D26(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    -0x10(%rbp),%eax
  sub    -0xc(%rbp),%eax
  mov    %eax,%ecx
  mov    -0xc(%rbp),%edx
  mov    -0x10(%rbp),%eax
  mov    %eax,%esi
  lea    D49(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    -0x8(%rbp),%eax
  cltd
  idivl  -0x4(%rbp)
  mov    %edx,%ecx
  mov    -0x4(%rbp),%edx
  mov    -0x8(%rbp),%eax
  mov    %eax,%esi
  lea    D28(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0x0,%eax
  leave
  ret
```

tool_calls: name: retrieve_data
arguments: data_label: D46
type: string
name: retrieve_data
arguments: data_label: D13
type: string
name: retrieve_data
arguments: data_label: D24
type: string
name: retrieve_data
arguments: data_label: D26
type: string
name: retrieve_data
arguments: data_label: D49
type: string
name: retrieve_data
arguments: data_label: D28
type: string

tool: D46: Hex.Checker.V1 RESULTS

tool: D13: ===========================
Addition (+) of 
x=%x
y=%x
is %x
===========================


tool: D24: Multiplication (*) of 
a=%x 
b=%x
is %x
===========================


tool: D26: Division (/) of 
c=%x 
d=%x
is %x
===========================


tool: D49: Subtraction (-) of 
e=%x 
f=%x
is %x
===========================


tool: D28: Modulus of 
g=%x 
h=%x
is %x
===========================


assistant: ```c
int main(void) {
  int x = 0xA121;
  int y = 0xA121;
  int a = 0x51A;
  int b = 0x51A;
  int c = 0x52A;
  int d = 0x52A;
  int e = 0x53A;
  int f = 0x54A;
  int g = 0x53A;
  int h = 0x54A;
  printf("Hex.Checker.V1 RESULTS\n");
  printf("===========================\nAddition (+) of \nx=%x\ny=%x\nis %x\n===========================\n", x, y, x + y);
  printf("Multiplication (*) of \na=%x \nb=%x\nis %x\n===========================\n", a, b, a * b);
  printf("Division (/) of \nc=%x \nd=%x\nis %x\n===========================\n", c, d, c / d);
  printf("Subtraction (-) of \ne=%x \nf=%x\nis %x\n===========================\n", e, f, e - f);
  printf("Modulus of \ng=%x \nh=%x\nis %x\n===========================\n", g, h, g % h);
  return 0;
  getchar();
}
```