// File: /workspace/github_cpp_makefile_star2_O1/ArashPartow[P]exprtk/exprtk_simple_example_09.cpp
// Function: void primes<double>()
void primes()
{
   typedef exprtk::symbol_table<T>         symbol_table_t;
   typedef exprtk::expression<T>           expression_t;
   typedef exprtk::parser<T>               parser_t;
   typedef exprtk::function_compositor<T>  compositor_t;
   typedef typename compositor_t::function function_t;

   T x = T(0);

   symbol_table_t symbol_table;

   symbol_table.add_constants();
   symbol_table.add_variable("x",x);

   compositor_t compositor(symbol_table);

   //Mode 1 - if statement based
   compositor.add(
      function_t("is_prime_impl1")
      .vars("x", "y")
      .expression
      (
         " if (y == 1,true,                "
         "    if (0 == (x % y),false,      "
         "       is_prime_impl1(x,y - 1))) "
      ));

   compositor.add(
      function_t("is_prime1")
      .var("x")
      .expression
      (
         " if (frac(x) != 0)                                   "
         "    return [false];                                  "
         " else if (x <= 0)                                    "
         "    return [false];                                  "
         " else                                                "
         "    is_prime_impl1(x,min(x - 1,trunc(sqrt(x)) + 1)); "
      ));

   //Mode 2 - switch statement based
   compositor.add(
      function_t("is_prime_impl2")
      .vars("x", "y")
      .expression
      (
         " switch                                          "
         " {                                               "
         "    case y == 1       : true;                    "
         "    case (x % y) == 0 : false;                   "
         "    default           : is_prime_impl2(x,y - 1); "
         " }                                               "
      ));

   compositor.add(
      function_t("is_prime2")
      .var("x")
      .expression
      (
         " switch                                                                  "
         " {                                                                       "
         "    case x <= 0       : false;                                           "
         "    case frac(x) != 0 : false;                                           "
         "    default           : is_prime_impl2(x,min(x - 1,trunc(sqrt(x)) + 1)); "
         " }                                                                       "
      ));

   //Mode 3 - switch statement and for-loop based
   compositor.add(
      function_t("is_prime3")
      .var("x")
      .expression
      (
         " switch                                              "
         " {                                                   "
         "    case x <= 1       : return [false];              "
         "    case frac(x) != 0 : return [false];              "
         "    case x == 2       : return [true ];              "
         " };                                                  "
         "                                                     "
         " var prime_lut[27] :=                                "
         " {                                                   "
         "      2,   3,   5,   7,  11,  13,  17,  19,  23,     "
         "     29,  31,  37,  41,  43,  47,  53,  59,  61,     "
         "     67,  71,  73,  79,  83,  89,  97, 101, 103      "
         " };                                                  "
         "                                                     "
         " var upper_bound := min(x - 1, trunc(sqrt(x)) + 1);  "
         "                                                     "
         " for (var i := 0; i < prime_lut[]; i += 1)           "
         " {                                                   "
         "    if (prime_lut[i] >= upper_bound)                 "
         "       return [true];                                "
         "    else if ((x % prime_lut[i]) == 0)                "
         "       return [false];                               "
         " };                                                  "
         "                                                     "
         " var lower_bound := prime_lut[prime_lut[] - 1] + 2;  "
         "                                                     "
         " for (var i := lower_bound; i < upper_bound; i += 2) "
         " {                                                   "
         "    if ((x % i) == 0)                                "
         "    {                                                "
         "       return [false];                               "
         "    }                                                "
         " };                                                  "
         "                                                     "
         " return [true];                                      "
      ));

   std::string expression_str1 = "is_prime1(x)";
   std::string expression_str2 = "is_prime2(x)";
   std::string expression_str3 = "is_prime3(x)";

   expression_t expression1;
   expression_t expression2;
   expression_t expression3;
   expression1.register_symbol_table(symbol_table);
   expression2.register_symbol_table(symbol_table);
   expression3.register_symbol_table(symbol_table);

   parser_t parser;

   parser.compile(expression_str1, expression1);
   parser.compile(expression_str2, expression2);
   parser.compile(expression_str3, expression3);

   for (std::size_t i = 0; i < 15000; ++i)
   {
      x = static_cast<T>(i);

      const T result1 = expression1.value();
      const T result2 = expression2.value();
      const T result3 = expression3.value();

      const bool results_concur = (result1 == result2) &&
                                  (result1 == result3) ;

      printf("%03d  Result1: %c  Result2: %c  Result3: %c  "
             "Results Concur: %c\n",
             static_cast<unsigned int>(i),
             (result1 == T(1)) ? 'T' : 'F',
             (result2 == T(1)) ? 'T' : 'F',
             (result3 == T(1)) ? 'T' : 'F',
             (results_concur)  ? 'T' : 'F');
   }
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x1548, %rsp           # imm = 0x1548
movq $0x0, 0x70(%rsp)
leaq 0x28(%rsp), %rbx
movq %rbx, %rdi
movl $0x1, %esi
callq 0x11c728
movq %rbx, %rdi
callq 0x11c770
leaq 0xb70(%rsp), %r14
movq %r14, -0x10(%r14)
leaq 0x1b9310(%rip), %rsi    # 0x2d4835
leaq 0x1b930a(%rip), %rdx    # 0x2d4836
leaq 0xb60(%rsp), %rdi
callq 0x11c698
leaq 0x28(%rsp), %rdi
leaq 0xb60(%rsp), %rsi
leaq 0x70(%rsp), %rdx
xorl %ecx, %ecx
callq 0x11c8b6
movq 0xb60(%rsp), %rdi
cmpq %r14, %rdi
je 0x11b56f
movq 0xb70(%rsp), %rsi
incq %rsi
callq 0x118090
leaq 0xb60(%rsp), %rdi
leaq 0x28(%rsp), %rbx
movq %rbx, %rsi
callq 0x11ca24
leaq 0xf8(%rsp), %rax
movq %rax, -0x10(%rax)
leaq 0x1b9346(%rip), %rsi    # 0x2d48dd
leaq 0x1b934d(%rip), %rdx    # 0x2d48eb
leaq 0xe8(%rsp), %rdi
callq 0x11c698
leaq 0x238(%rsp), %rdi
leaq 0xe8(%rsp), %rsi
callq 0x11cbac
leaq 0x18(%rsp), %rax
movq %rax, -0x10(%rax)
leaq 0x1b9265(%rip), %rsi    # 0x2d4835
leaq 0x1b925f(%rip), %rdx    # 0x2d4836
leaq 0x8(%rsp), %rdi
callq 0x11c698
leaq 0x40(%rsp), %rbp
movq %rbp, -0x10(%rbp)
leaq 0x1ba0e2(%rip), %rsi    # 0x2d56d3
leaq 0x1ba0dc(%rip), %rdx    # 0x2d56d4
leaq 0x30(%rsp), %rdi
callq 0x11c698
leaq 0x278(%rsp), %r15
leaq 0x8(%rsp), %rsi
movq %r15, %rdi
callq 0x12bb0a
leaq 0x30(%rsp), %rsi
movq %r15, %rdi
callq 0x12bb0a
leaq 0x60(%rsp), %rax
movq %rax, -0x10(%rax)
leaq 0x1b92b8(%rip), %rsi    # 0x2d48ec
leaq 0x1b9314(%rip), %rdx    # 0x2d494f
leaq 0x50(%rsp), %rdi
callq 0x11c698
leaq 0x258(%rsp), %r12
leaq 0x50(%rsp), %rsi
movq %r12, %rdi
callq 0x118520
leaq 0x1490(%rsp), %rdi
leaq 0x238(%rsp), %rsi
callq 0x122082
leaq 0x1498(%rsp), %rcx
cmpq %rax, %rcx
jne 0x11b72e
leaq 0xb60(%rsp), %rdi
leaq 0x238(%rsp), %rsi
movq %r12, %rdx
movq %r15, %rcx
xorl %r8d, %r8d
callq 0x120de0
testb %al, %al
je 0x11b72e
leaq 0x238(%rsp), %rsi
movq 0x88(%rsi), %rax
movq %rax, %rcx
subq 0x68(%rsi), %rcx
shrq $0x3, %rcx
cmpq $0x1, %rax
adcq $-0x1, %rcx
movq 0x60(%rsi), %rax
movq 0x70(%rsi), %rdx
subq 0x78(%rsi), %rdx
subq 0x50(%rsi), %rax
sarq $0x5, %rdx
sarq $0x5, %rax
leaq (%rcx,%rcx,2), %rcx
shlq $0x8, %rcx
addq 0x14c0(%rsp), %rcx
leaq (%rdx,%rdx,2), %rdx
shlq $0x4, %rdx
leaq (%rax,%rax,2), %rdi
shlq $0x4, %rdi
addq %rdx, %rdi
addq %rcx, %rdi
callq 0x121cb2
movq (%rax), %r12
leaq 0x238(%rsp), %rsi
leaq 0x1490(%rsp), %rdi
callq 0x122006
movq %r12, %rdi
movq %rax, %rsi
callq 0x121d2e
movq 0x50(%rsp), %rdi
leaq 0x60(%rsp), %rax
cmpq %rax, %rdi
je 0x11b74a
movq 0x60(%rsp), %rsi
incq %rsi
callq 0x118090
movq 0x30(%rsp), %rdi
cmpq %rbp, %rdi
je 0x11b761
movq 0x40(%rsp), %rsi
incq %rsi
callq 0x118090
movq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
cmpq %rax, %rdi
je 0x11b77d
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x118090
movq %r15, %rdi
callq 0x12bda4
leaq 0x268(%rsp), %r14
movq -0x10(%r14), %rdi
cmpq %r14, %rdi
je 0x11b7a6
movq 0x268(%rsp), %rsi
incq %rsi
callq 0x118090
leaq 0x248(%rsp), %r13
movq -0x10(%r13), %rdi
cmpq %r13, %rdi
leaq 0xf8(%rsp), %r15
je 0x11b7cf
movq 0x248(%rsp), %rsi
incq %rsi
callq 0x118090
movq 0xe8(%rsp), %rdi
cmpq %r15, %rdi
je 0x11b7ec
movq 0xf8(%rsp), %rsi
incq %rsi
callq 0x118090
leaq 0xe8(%rsp), %rdi
movq %r15, (%rdi)
leaq 0x1b9152(%rip), %rsi    # 0x2d4950
leaq 0x1b9154(%rip), %rdx    # 0x2d4959
callq 0x11c698
leaq 0x238(%rsp), %rdi
leaq 0xe8(%rsp), %rsi
callq 0x11cbac
leaq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
movq %rax, (%rdi)
leaq 0x1b9002(%rip), %rsi    # 0x2d4835
leaq 0x1b8ffc(%rip), %rdx    # 0x2d4836
callq 0x11c698
leaq 0x278(%rsp), %r15
leaq 0x8(%rsp), %rsi
movq %r15, %rdi
callq 0x12bb0a
leaq 0x30(%rsp), %rdi
movq %rbp, (%rdi)
leaq 0x1b90f7(%rip), %rsi    # 0x2d495a
leaq 0x1b922e(%rip), %rdx    # 0x2d4a98
callq 0x11c698
leaq 0x258(%rsp), %r12
leaq 0x30(%rsp), %rsi
movq %r12, %rdi
callq 0x118520
leaq 0x238(%rsp), %rsi
leaq 0x1490(%rsp), %rdi
callq 0x122082
leaq 0x1498(%rsp), %rcx
cmpq %rax, %rcx
jne 0x11b958
leaq 0xb60(%rsp), %rdi
leaq 0x238(%rsp), %rsi
movq %r12, %rdx
movq %r15, %rcx
xorl %r8d, %r8d
callq 0x120de0
testb %al, %al
je 0x11b958
leaq 0x238(%rsp), %rsi
movq 0x88(%rsi), %rax
movq %rax, %rcx
subq 0x68(%rsi), %rcx
shrq $0x3, %rcx
cmpq $0x1, %rax
adcq $-0x1, %rcx
movq 0x60(%rsi), %rax
movq 0x70(%rsi), %rdx
subq 0x78(%rsi), %rdx
subq 0x50(%rsi), %rax
sarq $0x5, %rdx
sarq $0x5, %rax
leaq (%rcx,%rcx,2), %rcx
shlq $0x8, %rcx
addq 0x14c0(%rsp), %rcx
leaq (%rdx,%rdx,2), %rdx
shlq $0x4, %rdx
leaq (%rax,%rax,2), %rdi
shlq $0x4, %rdi
addq %rdx, %rdi
addq %rcx, %rdi
callq 0x121cb2
movq (%rax), %r12
leaq 0x238(%rsp), %rsi
leaq 0x1490(%rsp), %rdi
callq 0x122006
movq %r12, %rdi
movq %rax, %rsi
callq 0x121d2e
movq 0x30(%rsp), %rdi
cmpq %rbp, %rdi
je 0x11b96f
movq 0x40(%rsp), %rsi
incq %rsi
callq 0x118090
movq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
cmpq %rax, %rdi
je 0x11b98b
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x118090
movq %r15, %rdi
callq 0x12bda4
movq 0x258(%rsp), %rdi
cmpq %r14, %rdi
je 0x11b9b0
movq 0x268(%rsp), %rsi
incq %rsi
callq 0x118090
movq 0x238(%rsp), %rdi
cmpq %r13, %rdi
leaq 0xf8(%rsp), %r15
je 0x11b9d5
movq 0x248(%rsp), %rsi
incq %rsi
callq 0x118090
movq 0xe8(%rsp), %rdi
cmpq %r15, %rdi
je 0x11b9f2
movq 0xf8(%rsp), %rsi
incq %rsi
callq 0x118090
leaq 0xe8(%rsp), %rdi
movq %r15, (%rdi)
leaq 0x1b9095(%rip), %rsi    # 0x2d4a99
leaq 0x1b909c(%rip), %rdx    # 0x2d4aa7
callq 0x11c698
leaq 0x238(%rsp), %rdi
leaq 0xe8(%rsp), %rsi
callq 0x11cbac
leaq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
movq %rax, (%rdi)
leaq 0x1b8dfc(%rip), %rsi    # 0x2d4835
leaq 0x1b8df6(%rip), %rdx    # 0x2d4836
callq 0x11c698
leaq 0x30(%rsp), %rdi
movq %rbp, (%rdi)
leaq 0x1b9c7f(%rip), %rsi    # 0x2d56d3
leaq 0x1b9c79(%rip), %rdx    # 0x2d56d4
callq 0x11c698
leaq 0x278(%rsp), %r15
leaq 0x8(%rsp), %rsi
movq %r15, %rdi
callq 0x12bb0a
leaq 0x30(%rsp), %rsi
movq %r15, %rdi
callq 0x12bb0a
leaq 0x50(%rsp), %rdi
leaq 0x60(%rsp), %rax
movq %rax, (%rdi)
leaq 0x1b9012(%rip), %rsi    # 0x2d4aa8
leaq 0x1b9131(%rip), %rdx    # 0x2d4bce
callq 0x11c698
leaq 0x258(%rsp), %r12
leaq 0x50(%rsp), %rsi
movq %r12, %rdi
callq 0x118520
leaq 0x238(%rsp), %rsi
leaq 0x1490(%rsp), %rdi
callq 0x122082
leaq 0x1498(%rsp), %rcx
cmpq %rax, %rcx
jne 0x11bb8b
leaq 0xb60(%rsp), %rdi
leaq 0x238(%rsp), %rsi
movq %r12, %rdx
movq %r15, %rcx
xorl %r8d, %r8d
callq 0x120de0
testb %al, %al
je 0x11bb8b
leaq 0x238(%rsp), %rsi
movq 0x88(%rsi), %rax
movq %rax, %rcx
subq 0x68(%rsi), %rcx
shrq $0x3, %rcx
cmpq $0x1, %rax
adcq $-0x1, %rcx
movq 0x60(%rsi), %rax
movq 0x70(%rsi), %rdx
subq 0x78(%rsi), %rdx
subq 0x50(%rsi), %rax
sarq $0x5, %rdx
sarq $0x5, %rax
leaq (%rcx,%rcx,2), %rcx
shlq $0x8, %rcx
addq 0x14c0(%rsp), %rcx
leaq (%rdx,%rdx,2), %rdx
shlq $0x4, %rdx
leaq (%rax,%rax,2), %rdi
shlq $0x4, %rdi
addq %rdx, %rdi
addq %rcx, %rdi
callq 0x121cb2
movq (%rax), %r12
leaq 0x238(%rsp), %rsi
leaq 0x1490(%rsp), %rdi
callq 0x122006
movq %r12, %rdi
movq %rax, %rsi
callq 0x121d2e
movq 0x50(%rsp), %rdi
leaq 0x60(%rsp), %rax
cmpq %rax, %rdi
je 0x11bba7
movq 0x60(%rsp), %rsi
incq %rsi
callq 0x118090
movq 0x30(%rsp), %rdi
cmpq %rbp, %rdi
je 0x11bbbe
movq 0x40(%rsp), %rsi
incq %rsi
callq 0x118090
movq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
cmpq %rax, %rdi
je 0x11bbda
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x118090
movq %r15, %rdi
callq 0x12bda4
movq 0x258(%rsp), %rdi
cmpq %r14, %rdi
je 0x11bbff
movq 0x268(%rsp), %rsi
incq %rsi
callq 0x118090
movq 0x238(%rsp), %rdi
cmpq %r13, %rdi
leaq 0xf8(%rsp), %r15
je 0x11bc24
movq 0x248(%rsp), %rsi
incq %rsi
callq 0x118090
movq 0xe8(%rsp), %rdi
cmpq %r15, %rdi
je 0x11bc41
movq 0xf8(%rsp), %rsi
incq %rsi
callq 0x118090
leaq 0xe8(%rsp), %rdi
movq %r15, (%rdi)
leaq 0x1b8f7c(%rip), %rsi    # 0x2d4bcf
leaq 0x1b8f7e(%rip), %rdx    # 0x2d4bd8
callq 0x11c698
leaq 0x238(%rsp), %rdi
leaq 0xe8(%rsp), %rsi
callq 0x11cbac
leaq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
movq %rax, (%rdi)
leaq 0x1b8bad(%rip), %rsi    # 0x2d4835
leaq 0x1b8ba7(%rip), %rdx    # 0x2d4836
callq 0x11c698
leaq 0x278(%rsp), %r15
leaq 0x8(%rsp), %rsi
movq %r15, %rdi
callq 0x12bb0a
leaq 0x30(%rsp), %rdi
movq %rbp, (%rdi)
leaq 0x1b8f21(%rip), %rsi    # 0x2d4bd9
leaq 0x1b90d0(%rip), %rdx    # 0x2d4d8f
callq 0x11c698
leaq 0x258(%rsp), %r12
leaq 0x30(%rsp), %rsi
movq %r12, %rdi
callq 0x118520
leaq 0x238(%rsp), %rsi
leaq 0x1490(%rsp), %rdi
callq 0x122082
leaq 0x1498(%rsp), %rcx
cmpq %rax, %rcx
jne 0x11bdad
leaq 0xb60(%rsp), %rdi
leaq 0x238(%rsp), %rsi
movq %r12, %rdx
movq %r15, %rcx
xorl %r8d, %r8d
callq 0x120de0
testb %al, %al
je 0x11bdad
leaq 0x238(%rsp), %rsi
movq 0x88(%rsi), %rax
movq %rax, %rcx
subq 0x68(%rsi), %rcx
shrq $0x3, %rcx
cmpq $0x1, %rax
adcq $-0x1, %rcx
movq 0x60(%rsi), %rax
movq 0x70(%rsi), %rdx
subq 0x78(%rsi), %rdx
subq 0x50(%rsi), %rax
sarq $0x5, %rdx
sarq $0x5, %rax
leaq (%rcx,%rcx,2), %rcx
shlq $0x8, %rcx
addq 0x14c0(%rsp), %rcx
leaq (%rdx,%rdx,2), %rdx
shlq $0x4, %rdx
leaq (%rax,%rax,2), %rdi
shlq $0x4, %rdi
addq %rdx, %rdi
addq %rcx, %rdi
callq 0x121cb2
movq (%rax), %r12
leaq 0x238(%rsp), %rsi
leaq 0x1490(%rsp), %rdi
callq 0x122006
movq %r12, %rdi
movq %rax, %rsi
callq 0x121d2e
movq 0x30(%rsp), %rdi
cmpq %rbp, %rdi
je 0x11bdc4
movq 0x40(%rsp), %rsi
incq %rsi
callq 0x118090
movq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
cmpq %rax, %rdi
je 0x11bde0
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x118090
movq %r15, %rdi
callq 0x12bda4
movq 0x258(%rsp), %rdi
cmpq %r14, %rdi
je 0x11be05
movq 0x268(%rsp), %rsi
incq %rsi
callq 0x118090
movq 0x238(%rsp), %rdi
cmpq %r13, %rdi
leaq 0xf8(%rsp), %r15
je 0x11be2a
movq 0x248(%rsp), %rsi
incq %rsi
callq 0x118090
movq 0xe8(%rsp), %rdi
cmpq %r15, %rdi
je 0x11be47
movq 0xf8(%rsp), %rsi
incq %rsi
callq 0x118090
leaq 0xe8(%rsp), %rdi
movq %r15, (%rdi)
leaq 0x1b8f37(%rip), %rsi    # 0x2d4d90
leaq 0x1b8f39(%rip), %rdx    # 0x2d4d99
callq 0x11c698
leaq 0x238(%rsp), %rdi
leaq 0xe8(%rsp), %rsi
callq 0x11cbac
leaq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
movq %rax, (%rdi)
leaq 0x1b89a7(%rip), %rsi    # 0x2d4835
leaq 0x1b89a1(%rip), %rdx    # 0x2d4836
callq 0x11c698
leaq 0x278(%rsp), %r15
leaq 0x8(%rsp), %rsi
movq %r15, %rdi
callq 0x12bb0a
leaq 0x30(%rsp), %rdi
movq %rbp, (%rdi)
leaq 0x1b8edc(%rip), %rsi    # 0x2d4d9a
leaq 0x1b9614(%rip), %rdx    # 0x2d54d9
callq 0x11c698
leaq 0x258(%rsp), %r12
leaq 0x30(%rsp), %rsi
movq %r12, %rdi
callq 0x118520
leaq 0x238(%rsp), %rsi
leaq 0x1490(%rsp), %rdi
callq 0x122082
leaq 0x1498(%rsp), %rcx
cmpq %rax, %rcx
jne 0x11bfb3
leaq 0xb60(%rsp), %rdi
leaq 0x238(%rsp), %rsi
movq %r12, %rdx
movq %r15, %rcx
xorl %r8d, %r8d
callq 0x120de0
testb %al, %al
je 0x11bfb3
leaq 0x238(%rsp), %rsi
movq 0x88(%rsi), %rax
movq %rax, %rcx
subq 0x68(%rsi), %rcx
shrq $0x3, %rcx
cmpq $0x1, %rax
adcq $-0x1, %rcx
movq 0x60(%rsi), %rax
movq 0x70(%rsi), %rdx
subq 0x78(%rsi), %rdx
subq 0x50(%rsi), %rax
sarq $0x5, %rdx
sarq $0x5, %rax
leaq (%rcx,%rcx,2), %rcx
shlq $0x8, %rcx
addq 0x14c0(%rsp), %rcx
leaq (%rdx,%rdx,2), %rdx
shlq $0x4, %rdx
leaq (%rax,%rax,2), %rdi
shlq $0x4, %rdi
addq %rdx, %rdi
addq %rcx, %rdi
callq 0x121cb2
movq (%rax), %r12
leaq 0x238(%rsp), %rsi
leaq 0x1490(%rsp), %rdi
callq 0x122006
movq %r12, %rdi
movq %rax, %rsi
callq 0x121d2e
movq 0x30(%rsp), %rdi
cmpq %rbp, %rdi
je 0x11bfca
movq 0x40(%rsp), %rsi
incq %rsi
callq 0x118090
movq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
cmpq %rax, %rdi
je 0x11bfe6
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x118090
movq %r15, %rdi
callq 0x12bda4
movq 0x258(%rsp), %rdi
cmpq %r14, %rdi
je 0x11c00b
movq 0x268(%rsp), %rsi
incq %rsi
callq 0x118090
movq 0x238(%rsp), %rdi
cmpq %r13, %rdi
leaq 0xf8(%rsp), %r14
je 0x11c030
movq 0x248(%rsp), %rsi
incq %rsi
callq 0x118090
movq 0xe8(%rsp), %rdi
cmpq %r14, %rdi
je 0x11c04d
movq 0xf8(%rsp), %rsi
incq %rsi
callq 0x118090
leaq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
movq %rax, (%rdi)
leaq 0x1b9479(%rip), %rsi    # 0x2d54da
leaq 0x1b947e(%rip), %rdx    # 0x2d54e6
callq 0x11c698
leaq 0x30(%rsp), %rdi
movq %rbp, (%rdi)
leaq 0x1b946b(%rip), %rsi    # 0x2d54e7
leaq 0x1b9470(%rip), %rdx    # 0x2d54f3
callq 0x11c698
leaq 0x50(%rsp), %rdi
leaq 0x60(%rsp), %rax
movq %rax, (%rdi)
leaq 0x1b9458(%rip), %rsi    # 0x2d54f4
leaq 0x1b945d(%rip), %rdx    # 0x2d5500
callq 0x11c698
leaq 0xc8(%rsp), %rdi
callq 0x11cc86
leaq 0xa8(%rsp), %rdi
callq 0x11cc86
leaq 0x88(%rsp), %rdi
callq 0x11cc86
movq 0xd0(%rsp), %rcx
movq 0xd8(%rsp), %rax
subq %rcx, %rax
je 0x11c131
sarq $0x3, %rax
cmpq $0x1, %rax
movq %rax, %rsi
adcq $0x0, %rsi
cmpq %rbx, %rcx
je 0x11c143
movq 0x28(%rsp), %rdx
cmpq (%rcx), %rdx
je 0x11c143
addq $0x8, %rcx
movl $0x1, %edi
subq %rsi, %rdi
xorl %esi, %esi
cmpq %rsi, %rdi
je 0x11c131
decq %rsi
cmpq %rbx, %rcx
je 0x11c129
leaq 0x8(%rcx), %r8
cmpq (%rcx), %rdx
movq %r8, %rcx
jne 0x11c110
negq %rsi
cmpq %rax, %rsi
jb 0x11c143
leaq 0xd0(%rsp), %rdi
leaq 0x28(%rsp), %rsi
callq 0x12c016
movq 0xb0(%rsp), %rcx
movq 0xb8(%rsp), %rax
subq %rcx, %rax
je 0x11c1a5
sarq $0x3, %rax
cmpq $0x1, %rax
movq %rax, %rsi
adcq $0x0, %rsi
cmpq %rbx, %rcx
je 0x11c1b7
movq 0x28(%rsp), %rdx
cmpq (%rcx), %rdx
je 0x11c1b7
addq $0x8, %rcx
movl $0x1, %edi
subq %rsi, %rdi
xorl %esi, %esi
cmpq %rsi, %rdi
je 0x11c1a5
decq %rsi
cmpq %rbx, %rcx
je 0x11c19d
leaq 0x8(%rcx), %r8
cmpq (%rcx), %rdx
movq %r8, %rcx
jne 0x11c184
negq %rsi
cmpq %rax, %rsi
jb 0x11c1b7
leaq 0xb0(%rsp), %rdi
leaq 0x28(%rsp), %rsi
callq 0x12c016
movq 0x90(%rsp), %rcx
movq 0x98(%rsp), %rax
subq %rcx, %rax
je 0x11c219
sarq $0x3, %rax
cmpq $0x1, %rax
movq %rax, %rsi
adcq $0x0, %rsi
cmpq %rbx, %rcx
je 0x11c22b
movq 0x28(%rsp), %rdx
cmpq (%rcx), %rdx
je 0x11c22b
addq $0x8, %rcx
movl $0x1, %edi
subq %rsi, %rdi
xorl %esi, %esi
cmpq %rsi, %rdi
je 0x11c219
decq %rsi
cmpq %rbx, %rcx
je 0x11c211
leaq 0x8(%rcx), %r8
cmpq (%rcx), %rdx
movq %r8, %rcx
jne 0x11c1f8
negq %rsi
cmpq %rax, %rsi
jb 0x11c22b
leaq 0x90(%rsp), %rdi
leaq 0x28(%rsp), %rsi
callq 0x12c016
leaq 0xe8(%rsp), %rdi
movl $0x7f, %esi
callq 0x11cd20
leaq 0x238(%rsp), %rdi
leaq 0xe8(%rsp), %rsi
callq 0x11ce20
leaq 0x1e8(%rsp), %rdi
callq 0x12c1fc
leaq 0x1b8(%rsp), %rdi
callq 0x12c1fc
leaq 0x188(%rsp), %rdi
callq 0x12c1fc
leaq 0x158(%rsp), %rdi
callq 0x12c1fc
leaq 0x128(%rsp), %rdi
callq 0x12c1fc
leaq 0xf8(%rsp), %rdi
callq 0x12c1fc
leaq 0x238(%rsp), %rdi
leaq 0x8(%rsp), %rsi
leaq 0xc8(%rsp), %rdx
callq 0x11d644
leaq 0x238(%rsp), %rdi
leaq 0x30(%rsp), %rsi
leaq 0xa8(%rsp), %rdx
callq 0x11d644
leaq 0x238(%rsp), %rdi
leaq 0x50(%rsp), %rsi
leaq 0x88(%rsp), %rdx
callq 0x11d644
movl $0x46, %r15d
leaq 0x1b9206(%rip), %rbx    # 0x2d5501
xorl %r14d, %r14d
xorps %xmm0, %xmm0
cvtsi2sd %r14, %xmm0
movsd %xmm0, 0x70(%rsp)
movq 0xc8(%rsp), %rax
movq 0x8(%rax), %rdi
movq (%rdi), %rax
callq *0x18(%rax)
movsd %xmm0, 0x80(%rsp)
movq 0xa8(%rsp), %rax
movq 0x8(%rax), %rdi
movq (%rdi), %rax
callq *0x18(%rax)
movsd %xmm0, 0x78(%rsp)
movq 0x88(%rsp), %rax
movq 0x8(%rax), %rdi
movq (%rdi), %rax
callq *0x18(%rax)
movsd 0x1b3caf(%rip), %xmm1   # 0x2d0008
movsd 0x80(%rsp), %xmm2
ucomisd %xmm1, %xmm2
movl $0x54, %edx
cmovnel %r15d, %edx
cmovpl %r15d, %edx
movsd 0x78(%rsp), %xmm3
ucomisd %xmm1, %xmm3
movl $0x54, %ecx
cmovnel %r15d, %ecx
cmovpl %r15d, %ecx
ucomisd %xmm1, %xmm0
movl $0x54, %r8d
cmovnel %r15d, %r8d
cmovpl %r15d, %r8d
ucomisd %xmm0, %xmm2
movl $0x54, %r9d
cmovnel %r15d, %r9d
cmovpl %r15d, %r9d
ucomisd %xmm3, %xmm2
cmovnel %r15d, %r9d
cmovpl %r15d, %r9d
movq %rbx, %rdi
movl %r14d, %esi
xorl %eax, %eax
callq 0x118050
incq %r14
cmpq $0x3a98, %r14           # imm = 0x3A98
jne 0x11c2fe
leaq 0x238(%rsp), %rdi
callq 0x11e016
leaq 0x88(%rsp), %rdi
callq 0x11e2d8
leaq 0xa8(%rsp), %rdi
callq 0x11e2d8
leaq 0xc8(%rsp), %rdi
callq 0x11e2d8
movq 0x50(%rsp), %rdi
leaq 0x60(%rsp), %rax
cmpq %rax, %rdi
je 0x11c427
movq 0x60(%rsp), %rsi
incq %rsi
callq 0x118090
movq 0x30(%rsp), %rdi
cmpq %rbp, %rdi
je 0x11c43e
movq 0x40(%rsp), %rsi
incq %rsi
callq 0x118090
movq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
cmpq %rax, %rdi
je 0x11c45a
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x118090
leaq 0xb60(%rsp), %rdi
callq 0x11e326
leaq 0x28(%rsp), %rdi
callq 0x11e388
addq $0x1548, %rsp           # imm = 0x1548
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %rax, %rbx
leaq 0xe8(%rsp), %rdi
callq 0x11d5fc
jmp 0x11c5f8
jmp 0x11c543
movq %rax, %rbx
jmp 0x11c605
movq %rax, %rbx
jmp 0x11c612
movq %rax, %rbx
jmp 0x11c61f
movq %rax, %rbx
jmp 0x11c63b
movq %rax, %rbx
jmp 0x11c652
jmp 0x11c506
jmp 0x11c4f1
jmp 0x11c4f1
jmp 0x11c4f6
jmp 0x11c4fe
jmp 0x11c506
jmp 0x11c4f1
jmp 0x11c4f1
jmp 0x11c4f6
jmp 0x11c4fe
jmp 0x11c506
jmp 0x11c555
jmp 0x11c4f1
jmp 0x11c4f6
jmp 0x11c4fe
jmp 0x11c506
jmp 0x11c4f1
jmp 0x11c4f1
jmp 0x11c4f6
jmp 0x11c4fe
jmp 0x11c506
jmp 0x11c555
movq %rax, %rbx
jmp 0x11c56f
movq %rax, %rbx
jmp 0x11c58b
movq %rax, %rbx
jmp 0x11c598
movq %rax, %rbx
jmp 0x11c66e
jmp 0x11c53b
movq %rax, %rbx
movq 0xb60(%rsp), %rdi
cmpq %r14, %rdi
je 0x11c67b
movq 0xb70(%rsp), %rsi
incq %rsi
callq 0x118090
jmp 0x11c67b
jmp 0x11c53b
movq %rax, %rbx
jmp 0x11c67b
movq %rax, %rbx
jmp 0x11c5f8
jmp 0x11c555
jmp 0x11c555
jmp 0x11c555
jmp 0x11c555
jmp 0x11c5be
movq %rax, %rbx
movq 0x30(%rsp), %rdi
cmpq %rbp, %rdi
je 0x11c56f
movq 0x40(%rsp), %rsi
incq %rsi
callq 0x118090
movq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
cmpq %rax, %rdi
je 0x11c58b
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x118090
leaq 0x238(%rsp), %rdi
callq 0x11cc46
movq 0xe8(%rsp), %rdi
leaq 0xf8(%rsp), %rax
cmpq %rax, %rdi
je 0x11c66e
movq 0xf8(%rsp), %rsi
jmp 0x11c666
movq %rax, %rbx
movq 0x50(%rsp), %rdi
leaq 0x60(%rsp), %rax
cmpq %rax, %rdi
je 0x11c558
movq 0x60(%rsp), %rsi
incq %rsi
callq 0x118090
jmp 0x11c558
jmp 0x11c5e8
jmp 0x11c5e8
jmp 0x11c5e8
movq %rax, %rbx
leaq 0x238(%rsp), %rdi
callq 0x11e016
leaq 0x88(%rsp), %rdi
callq 0x11e2d8
leaq 0xa8(%rsp), %rdi
callq 0x11e2d8
leaq 0xc8(%rsp), %rdi
callq 0x11e2d8
movq 0x50(%rsp), %rdi
leaq 0x60(%rsp), %rax
cmpq %rax, %rdi
je 0x11c63b
movq 0x60(%rsp), %rsi
incq %rsi
callq 0x118090
movq 0x30(%rsp), %rdi
cmpq %rbp, %rdi
je 0x11c652
movq 0x40(%rsp), %rsi
incq %rsi
callq 0x118090
movq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
cmpq %rax, %rdi
je 0x11c66e
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x118090
leaq 0xb60(%rsp), %rdi
callq 0x11e326
leaq 0x28(%rsp), %rdi
callq 0x11e388
movq %rbx, %rdi
callq 0x1182e0