// File: sonnyit[P]profiler/example.cpp
// Function: main
int main() {
  srand(time(NULL));
  func1();
  func2();

  cout << "\n";
  cout << "- func1: \n\tnum_calls: " << PROFILER_GET(func1).count << "\n\ttotal_time_passed: " << PROFILER_GET(func1).time_pass << " microsecond" << "\n\tlast_execution_time: " << PROFILER_GET(func1).last_time_pass << " microsecond\n";
  cout << "- func2: \n\tnum_calls: " << PROFILER_GET(func2).count << "\n\ttotal_time_passed: " << PROFILER_GET(func2).time_pass << " microsecond" << "\n\tlast_execution_time: " << PROFILER_GET(func2).last_time_pass << " microsecond\n";
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x270, %rsp            # imm = 0x270
xorl %eax, %eax
movl %eax, %edi
callq 0x21a0
movl %eax, %edi
callq 0x21c0
callq 0x4490
callq 0x4610
movq 0x3814(%rip), %rdi      # 0x7fd0
movq %rdi, -0x1b0(%rbp)
leaq 0x8e1(%rip), %rsi       # 0x50ab
callq 0x21d0
movq -0x1b0(%rbp), %rdi
leaq 0x870(%rip), %rsi       # 0x504d
callq 0x21d0
movq %rax, -0x1a8(%rbp)
callq 0x2540
movq %rax, -0x1a0(%rbp)
leaq -0x39(%rbp), %rdi
movq %rdi, -0x198(%rbp)
callq 0x22b0
movq -0x198(%rbp), %rdx
leaq 0x812(%rip), %rsi       # 0x5025
leaq -0x38(%rbp), %rdi
callq 0x2230
jmp 0x481e
movq -0x1a0(%rbp), %rsi
leaq -0x18(%rbp), %rdi
leaq -0x38(%rbp), %rdx
callq 0x28e0
jmp 0x4834
movq -0x1a8(%rbp), %rdi
movq -0x10(%rbp), %rsi
callq 0x20d0
movq %rax, -0x1b8(%rbp)
jmp 0x484d
movq -0x1b8(%rbp), %rdi
leaq 0x809(%rip), %rsi       # 0x5064
callq 0x21d0
movq %rax, -0x1c0(%rbp)
jmp 0x4869
callq 0x2540
movq %rax, -0x1c8(%rbp)
jmp 0x4877
leaq -0x89(%rbp), %rdi
movq %rdi, -0x1d0(%rbp)
callq 0x22b0
movq -0x1d0(%rbp), %rdx
leaq 0x78d(%rip), %rsi       # 0x5025
leaq -0x88(%rbp), %rdi
callq 0x2230
jmp 0x48a6
movq -0x1c8(%rbp), %rsi
leaq -0x68(%rbp), %rdi
leaq -0x88(%rbp), %rdx
callq 0x28e0
jmp 0x48bf
movq -0x1c0(%rbp), %rdi
movq -0x68(%rbp), %rsi
callq 0x20d0
movq %rax, -0x1d8(%rbp)
jmp 0x48d8
movq -0x1d8(%rbp), %rdi
leaq 0x794(%rip), %rsi       # 0x507a
callq 0x21d0
movq %rax, -0x1e0(%rbp)
jmp 0x48f4
movq -0x1e0(%rbp), %rdi
leaq 0x785(%rip), %rsi       # 0x5087
callq 0x21d0
movq %rax, -0x1e8(%rbp)
jmp 0x4910
callq 0x2540
movq %rax, -0x1f0(%rbp)
jmp 0x491e
leaq -0xc9(%rbp), %rdi
movq %rdi, -0x1f8(%rbp)
callq 0x22b0
movq -0x1f8(%rbp), %rdx
leaq 0x6e6(%rip), %rsi       # 0x5025
leaq -0xc8(%rbp), %rdi
callq 0x2230
jmp 0x494d
movq -0x1f0(%rbp), %rsi
leaq -0xa8(%rbp), %rdi
leaq -0xc8(%rbp), %rdx
callq 0x28e0
jmp 0x4969
movq -0x1e8(%rbp), %rdi
movq -0x98(%rbp), %rsi
callq 0x22d0
movq %rax, -0x200(%rbp)
jmp 0x4985
movq -0x200(%rbp), %rdi
leaq 0x70c(%rip), %rsi       # 0x509f
callq 0x21d0
jmp 0x499a
leaq -0xc8(%rbp), %rdi
callq 0x20f0
leaq -0xc9(%rbp), %rdi
callq 0x2210
leaq -0x88(%rbp), %rdi
callq 0x20f0
leaq -0x89(%rbp), %rdi
callq 0x2210
leaq -0x38(%rbp), %rdi
callq 0x20f0
leaq -0x39(%rbp), %rdi
callq 0x2210
movq 0x35ed(%rip), %rdi      # 0x7fd0
leaq 0x6c3(%rip), %rsi       # 0x50ad
callq 0x21d0
movq %rax, -0x218(%rbp)
callq 0x2540
movq %rax, -0x210(%rbp)
leaq -0x109(%rbp), %rdi
movq %rdi, -0x208(%rbp)
callq 0x22b0
movq -0x208(%rbp), %rdx
leaq 0x616(%rip), %rsi       # 0x5039
leaq -0x108(%rbp), %rdi
callq 0x2230
jmp 0x4a31
movq -0x210(%rbp), %rsi
leaq -0xe8(%rbp), %rdi
leaq -0x108(%rbp), %rdx
callq 0x28e0
jmp 0x4a4d
movq -0x218(%rbp), %rdi
movq -0xe0(%rbp), %rsi
callq 0x20d0
movq %rax, -0x220(%rbp)
jmp 0x4a69
movq -0x220(%rbp), %rdi
leaq 0x5ed(%rip), %rsi       # 0x5064
callq 0x21d0
movq %rax, -0x228(%rbp)
jmp 0x4a85
callq 0x2540
movq %rax, -0x230(%rbp)
jmp 0x4a93
leaq -0x149(%rbp), %rdi
movq %rdi, -0x238(%rbp)
callq 0x22b0
movq -0x238(%rbp), %rdx
leaq 0x585(%rip), %rsi       # 0x5039
leaq -0x148(%rbp), %rdi
callq 0x2230
jmp 0x4ac2
movq -0x230(%rbp), %rsi
leaq -0x128(%rbp), %rdi
leaq -0x148(%rbp), %rdx
callq 0x28e0
jmp 0x4ade
movq -0x228(%rbp), %rdi
movq -0x128(%rbp), %rsi
callq 0x20d0
movq %rax, -0x240(%rbp)
jmp 0x4afa
movq -0x240(%rbp), %rdi
leaq 0x572(%rip), %rsi       # 0x507a
callq 0x21d0
movq %rax, -0x248(%rbp)
jmp 0x4b16
movq -0x248(%rbp), %rdi
leaq 0x563(%rip), %rsi       # 0x5087
callq 0x21d0
movq %rax, -0x250(%rbp)
jmp 0x4b32
callq 0x2540
movq %rax, -0x258(%rbp)
jmp 0x4b40
leaq -0x189(%rbp), %rdi
movq %rdi, -0x260(%rbp)
callq 0x22b0
movq -0x260(%rbp), %rdx
leaq 0x4d8(%rip), %rsi       # 0x5039
leaq -0x188(%rbp), %rdi
callq 0x2230
jmp 0x4b6f
movq -0x258(%rbp), %rsi
leaq -0x168(%rbp), %rdi
leaq -0x188(%rbp), %rdx
callq 0x28e0
jmp 0x4b8b
movq -0x250(%rbp), %rdi
movq -0x158(%rbp), %rsi
callq 0x22d0
movq %rax, -0x268(%rbp)
jmp 0x4ba7
movq -0x268(%rbp), %rdi
leaq 0x4ea(%rip), %rsi       # 0x509f
callq 0x21d0
jmp 0x4bbc
leaq -0x188(%rbp), %rdi
callq 0x20f0
leaq -0x189(%rbp), %rdi
callq 0x2210
leaq -0x148(%rbp), %rdi
callq 0x20f0
leaq -0x149(%rbp), %rdi
callq 0x2210
leaq -0x108(%rbp), %rdi
callq 0x20f0
leaq -0x109(%rbp), %rdi
callq 0x2210
xorl %eax, %eax
addq $0x270, %rsp            # imm = 0x270
popq %rbp
retq
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0x4c9a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0x4c91
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0x4c85
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0x4c79
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0x4c6d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0xc8(%rbp), %rdi
callq 0x20f0
leaq -0xc9(%rbp), %rdi
callq 0x2210
leaq -0x88(%rbp), %rdi
callq 0x20f0
leaq -0x89(%rbp), %rdi
callq 0x2210
leaq -0x38(%rbp), %rdi
callq 0x20f0
leaq -0x39(%rbp), %rdi
callq 0x2210
jmp 0x4d45
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0x4d39
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0x4d2d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0x4d21
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0x4d15
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0x4d09
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0x188(%rbp), %rdi
callq 0x20f0
leaq -0x189(%rbp), %rdi
callq 0x2210
leaq -0x148(%rbp), %rdi
callq 0x20f0
leaq -0x149(%rbp), %rdi
callq 0x2210
leaq -0x108(%rbp), %rdi
callq 0x20f0
leaq -0x109(%rbp), %rdi
callq 0x2210
movq -0x48(%rbp), %rdi
callq 0x22a0
nop