// File: ArashPartow[P]exprtk-extras/exprtk_groups_examples.cpp
// Function: void groups_example<double>()
void groups_example()
{
   using symbol_table_t = exprtk::symbol_table<T>;
   using expression_t   = exprtk::expression<T>;
   using parser_t       = exprtk::parser<T>;

   using strset_t = std::set<std::string>;

   strset_t girl_names;
   strset_t boy_names;

   girl_names.insert("jane");
   girl_names.insert("jill");

   boy_names.insert("jack");
   boy_names.insert("jim" );
   boy_names.insert("john");

   groups_impl::groups_collection<std::string> names_groups;

   names_groups.add_group("girls", girl_names);
   names_groups.add_group("boys",  boy_names );

   assert(names_groups.contains("girls"));
   assert(names_groups.contains("boys" ));

   groups_impl::create  <T> group_create  (names_groups);
   groups_impl::add     <T> group_add     (names_groups);
   groups_impl::contains<T> group_contains(names_groups);
   groups_impl::size    <T> group_size    (names_groups);
   groups_impl::get     <T> group_get     (names_groups);
   groups_impl::erase   <T> group_erase   (names_groups);

   exprtk::rtl::io::println<T> println;

   symbol_table_t symbol_table;
   expression_t   expression;
   parser_t       parser;

   symbol_table.add_function("create"  , group_create  );
   symbol_table.add_function("add"     , group_add     );
   symbol_table.add_function("contains", group_contains);
   symbol_table.add_function("size"    , group_size    );
   symbol_table.add_function("get"     , group_get     );
   symbol_table.add_function("erase"   , group_erase   );
   symbol_table.add_function("println" , println       );

   expression.register_symbol_table(symbol_table);

   const std::string program =
      " /* Load the groups from symbol table */         "
      " var girls := create('girls');                   "
      " var boys  := create('boys' );                   "
      "                                                 "
      " if (not(girls))                                 "
      " {                                               "
      "    println('failed to create girls set!');      "
      "    return [];                                   "
      " };                                              "
      "                                                 "
      " if (not(boys))                                  "
      " {                                               "
      "    println('failed to create boys set!');       "
      "    return [];                                   "
      " };                                              "
      "                                                 "
      " var name := 'john';                             "
      "                                                 "
      " if (contains(girls, name))                      "
      " {                                               "
      "    println(name, ' in girls set');              "
      " }                                               "
      " else                                            "
      " {                                               "
      "    println(name, ' NOT in girls set');          "
      " };                                              "
      "                                                 "
      " if (contains(boys, name))                       "
      " {                                               "
      "    println(name, ' in boys set');               "
      " }                                               "
      " else                                            "
      " {                                               "
      "    println(name, ' NOT in boys set');           "
      " };                                              "
      "                                                 "
      " /* Create a group from scratch */               "
      " var pets := create('pets');                     "
      "                                                 "
      " add(pets, 'buddy');                             "
      " add(pets, 'fluffy', 'snowy');                   "
      " add(pets, 'ziggy', 'monty', 'teddy');           "
      "                                                 "
      " if (contains(pets, name))                       "
      " {                                               "
      "    println(name, ' in pets set');               "
      " }                                               "
      " else                                            "
      " {                                               "
      "    println(name, ' NOT in pets set');           "
      " };                                              "
      "                                                 "
      " if (contains(pets, name, 'fluffy'))             "
      " {                                               "
      "    println(name, ' or fluffy in pets set');     "
      " }                                               "
      " else                                            "
      " {                                               "
      "    println(name, ' or fluffy NOT in pets set'); "
      " };                                              "
      "                                                 "
      " println('List of \\'pets\\':');                 "
      "                                                 "
      " for (var i := 0; i < size(pets); i += 1)        "
      " {                                               "
      "    println('[', i ,']: ', get(pets,i));         "
      " };                                              "
      "                                                 "
      " if (erase(pets, 'fluffy', 'teddy') != 2)        "
      " {                                               "
      "    println('Failed to erase fluffy and teddy'); "
      "    return [];                                   "
      " };                                              "
      "                                                 "
      " println('List of \\'pets\\':');                 "
      "                                                 "
      " for (var i := 0; i < size(pets); i += 1)        "
      " {                                               "
      "    println('[', i ,']: ', get(pets,i));         "
      " };                                              "
      "                                                 ";

   if (!parser.compile(program, expression))
   {
      printf("Error: %s\tExpression: %s\n",
             parser.error().c_str(),
             program.c_str());
      return;
   }

   expression.value();

   // Benchmark
   //{
   //   constexpr auto rounds = 100000;
   //
   //   const auto begin = std::chrono::system_clock::now();
   //   {
   //      for (std::size_t i = 0; i < rounds; ++i)
   //      {
   //         expression.value();
   //      }
   //   }
   //   const auto end = std::chrono::system_clock::now();
   //
   //   const auto total_time_ms = std::chrono::duration_cast<std::chrono::milliseconds>(end - begin).count();
   //
   //   printf("[*] total time: %5.4fsec rate: %8.4feval/sec\n",
   //          total_time_ms / 1000.0,
   //          (1000.0 * rounds) / total_time_ms);
   //}
}

// Assembly:
subq $0x1258, %rsp           # imm = 0x1258
leaq 0x1228(%rsp), %rdi
callq 0x119b10
leaq 0x11f8(%rsp), %rdi
callq 0x119b10
leaq 0x11d7(%rsp), %rdi
movq %rdi, 0xe0(%rsp)
callq 0x111660
movq 0xe0(%rsp), %rdx
leaq 0x336cb4(%rip), %rsi    # 0x44f539
leaq 0x11d8(%rsp), %rdi
callq 0x118780
jmp 0x118894
leaq 0x1228(%rsp), %rdi
leaq 0x11d8(%rsp), %rsi
callq 0x119b20
movb %dl, 0xd7(%rsp)
movq %rax, 0xd8(%rsp)
jmp 0x1188ba
movb 0xd7(%rsp), %al
movq 0xd8(%rsp), %rcx
movq %rcx, 0x11b0(%rsp)
movb %al, 0x11b8(%rsp)
leaq 0x11d8(%rsp), %rdi
callq 0x1117b8
leaq 0x11d7(%rsp), %rdi
callq 0x1117a0
leaq 0x118f(%rsp), %rdi
movq %rdi, 0xc8(%rsp)
callq 0x111660
movq 0xc8(%rsp), %rdx
leaq 0x336c28(%rip), %rsi    # 0x44f53e
leaq 0x1190(%rsp), %rdi
callq 0x118780
jmp 0x118925
leaq 0x1228(%rsp), %rdi
leaq 0x1190(%rsp), %rsi
callq 0x119b20
movb %dl, 0xbf(%rsp)
movq %rax, 0xc0(%rsp)
jmp 0x11894b
movb 0xbf(%rsp), %al
movq 0xc0(%rsp), %rcx
movq %rcx, 0x1178(%rsp)
movb %al, 0x1180(%rsp)
leaq 0x1190(%rsp), %rdi
callq 0x1117b8
leaq 0x118f(%rsp), %rdi
callq 0x1117a0
leaq 0x1157(%rsp), %rdi
movq %rdi, 0xb0(%rsp)
callq 0x111660
movq 0xb0(%rsp), %rdx
leaq 0x336b9c(%rip), %rsi    # 0x44f543
leaq 0x1158(%rsp), %rdi
callq 0x118780
jmp 0x1189b6
leaq 0x11f8(%rsp), %rdi
leaq 0x1158(%rsp), %rsi
callq 0x119b20
movb %dl, 0xa7(%rsp)
movq %rax, 0xa8(%rsp)
jmp 0x1189dc
movb 0xa7(%rsp), %al
movq 0xa8(%rsp), %rcx
movq %rcx, 0x1140(%rsp)
movb %al, 0x1148(%rsp)
leaq 0x1158(%rsp), %rdi
callq 0x1117b8
leaq 0x1157(%rsp), %rdi
callq 0x1117a0
leaq 0x111f(%rsp), %rdi
movq %rdi, 0x98(%rsp)
callq 0x111660
movq 0x98(%rsp), %rdx
leaq 0x336b10(%rip), %rsi    # 0x44f548
leaq 0x1120(%rsp), %rdi
callq 0x118780
jmp 0x118a47
leaq 0x11f8(%rsp), %rdi
leaq 0x1120(%rsp), %rsi
callq 0x119b20
movb %dl, 0x8f(%rsp)
movq %rax, 0x90(%rsp)
jmp 0x118a6d
movb 0x8f(%rsp), %al
movq 0x90(%rsp), %rcx
movq %rcx, 0x1108(%rsp)
movb %al, 0x1110(%rsp)
leaq 0x1120(%rsp), %rdi
callq 0x1117b8
leaq 0x111f(%rsp), %rdi
callq 0x1117a0
leaq 0x10e7(%rsp), %rdi
movq %rdi, 0x80(%rsp)
callq 0x111660
movq 0x80(%rsp), %rdx
leaq 0x336a83(%rip), %rsi    # 0x44f54c
leaq 0x10e8(%rsp), %rdi
callq 0x118780
jmp 0x118ad8
leaq 0x11f8(%rsp), %rdi
leaq 0x10e8(%rsp), %rsi
callq 0x119b20
movb %dl, 0x77(%rsp)
movq %rax, 0x78(%rsp)
jmp 0x118af8
movb 0x77(%rsp), %al
movq 0x78(%rsp), %rcx
movq %rcx, 0x10d0(%rsp)
movb %al, 0x10d8(%rsp)
leaq 0x10e8(%rsp), %rdi
callq 0x1117b8
leaq 0x10e7(%rsp), %rdi
callq 0x1117a0
leaq 0x10a0(%rsp), %rdi
callq 0x119b80
leaq 0x107f(%rsp), %rdi
movq %rdi, 0x68(%rsp)
callq 0x111660
movq 0x68(%rsp), %rdx
leaq 0x3369fc(%rip), %rsi    # 0x44f551
leaq 0x1080(%rsp), %rdi
callq 0x118780
jmp 0x118b64
leaq 0x10a0(%rsp), %rdi
leaq 0x1080(%rsp), %rsi
leaq 0x1228(%rsp), %rdx
callq 0x119b90
jmp 0x118b83
leaq 0x1080(%rsp), %rdi
callq 0x1117b8
leaq 0x107f(%rsp), %rdi
callq 0x1117a0
leaq 0x1057(%rsp), %rdi
movq %rdi, 0x60(%rsp)
callq 0x111660
movq 0x60(%rsp), %rdx
leaq 0x33699c(%rip), %rsi    # 0x44f557
leaq 0x1058(%rsp), %rdi
callq 0x118780
jmp 0x118bca
leaq 0x10a0(%rsp), %rdi
leaq 0x1058(%rsp), %rsi
leaq 0x11f8(%rsp), %rdx
callq 0x119b90
jmp 0x118be9
leaq 0x1058(%rsp), %rdi
callq 0x1117b8
leaq 0x1057(%rsp), %rdi
callq 0x1117a0
leaq 0xfd8(%rsp), %rdi
leaq 0x10a0(%rsp), %rsi
callq 0x119c20
jmp 0x118c1a
leaq 0xf60(%rsp), %rdi
leaq 0x10a0(%rsp), %rsi
callq 0x119d30
jmp 0x118c31
leaq 0xee8(%rsp), %rdi
leaq 0x10a0(%rsp), %rsi
callq 0x119e20
jmp 0x118c48
leaq 0xe70(%rsp), %rdi
leaq 0x10a0(%rsp), %rsi
callq 0x119f10
jmp 0x118c5f
leaq 0xdf8(%rsp), %rdi
leaq 0x10a0(%rsp), %rsi
callq 0x11a000
jmp 0x118c76
leaq 0xd80(%rsp), %rdi
leaq 0x10a0(%rsp), %rsi
callq 0x11a0f0
jmp 0x118c8d
leaq 0xcf7(%rsp), %rdi
movq %rdi, 0x58(%rsp)
callq 0x111660
movq 0x58(%rsp), %rdx
leaq 0x3368b1(%rip), %rsi    # 0x44f55c
leaq 0xcf8(%rsp), %rdi
callq 0x118780
jmp 0x118cba
leaq 0xd18(%rsp), %rdi
leaq 0xcf8(%rsp), %rsi
callq 0x11a1e0
jmp 0x118cd1
leaq 0xcf8(%rsp), %rdi
callq 0x1117b8
leaq 0xcf7(%rsp), %rdi
callq 0x1117a0
leaq 0xce8(%rsp), %rdi
movl $0x1, %esi
callq 0x11a2f0
jmp 0x118cff
leaq 0xcc8(%rsp), %rdi
callq 0x11a330
jmp 0x118d0e
leaq 0x250(%rsp), %rdi
movl $0x7f, %esi
callq 0x11a3e0
jmp 0x118d22
leaq 0x3a0(%rsp), %rdi
leaq 0x250(%rsp), %rsi
callq 0x11a510
jmp 0x118d39
leaq 0x250(%rsp), %rdi
callq 0x11ad40
leaq 0x22f(%rsp), %rdi
movq %rdi, 0x50(%rsp)
callq 0x111660
movq 0x50(%rsp), %rdx
leaq 0x3367ff(%rip), %rsi    # 0x44f563
leaq 0x230(%rsp), %rdi
callq 0x118780
jmp 0x118d73
leaq 0xce8(%rsp), %rdi
leaq 0x230(%rsp), %rsi
leaq 0xfd8(%rsp), %rdx
callq 0x11adb0
jmp 0x118d92
leaq 0x230(%rsp), %rdi
callq 0x1117b8
leaq 0x22f(%rsp), %rdi
callq 0x1117a0
leaq 0x207(%rsp), %rdi
movq %rdi, 0x48(%rsp)
callq 0x111660
movq 0x48(%rsp), %rdx
leaq 0x3367a0(%rip), %rsi    # 0x44f56a
leaq 0x208(%rsp), %rdi
callq 0x118780
jmp 0x118dd9
leaq 0xce8(%rsp), %rdi
leaq 0x208(%rsp), %rsi
leaq 0xf60(%rsp), %rdx
callq 0x11adb0
jmp 0x118df8
leaq 0x208(%rsp), %rdi
callq 0x1117b8
leaq 0x207(%rsp), %rdi
callq 0x1117a0
leaq 0x1df(%rsp), %rdi
movq %rdi, 0x40(%rsp)
callq 0x111660
movq 0x40(%rsp), %rdx
leaq 0x33673e(%rip), %rsi    # 0x44f56e
leaq 0x1e0(%rsp), %rdi
callq 0x118780
jmp 0x118e3f
leaq 0xce8(%rsp), %rdi
leaq 0x1e0(%rsp), %rsi
leaq 0xee8(%rsp), %rdx
callq 0x11adb0
jmp 0x118e5e
leaq 0x1e0(%rsp), %rdi
callq 0x1117b8
leaq 0x1df(%rsp), %rdi
callq 0x1117a0
leaq 0x1b7(%rsp), %rdi
movq %rdi, 0x38(%rsp)
callq 0x111660
movq 0x38(%rsp), %rdx
leaq 0x3366e1(%rip), %rsi    # 0x44f577
leaq 0x1b8(%rsp), %rdi
callq 0x118780
jmp 0x118ea5
leaq 0xce8(%rsp), %rdi
leaq 0x1b8(%rsp), %rsi
leaq 0xe70(%rsp), %rdx
callq 0x11adb0
jmp 0x118ec4
leaq 0x1b8(%rsp), %rdi
callq 0x1117b8
leaq 0x1b7(%rsp), %rdi
callq 0x1117a0
leaq 0x18f(%rsp), %rdi
movq %rdi, 0x30(%rsp)
callq 0x111660
movq 0x30(%rsp), %rdx
leaq 0x336680(%rip), %rsi    # 0x44f57c
leaq 0x190(%rsp), %rdi
callq 0x118780
jmp 0x118f0b
leaq 0xce8(%rsp), %rdi
leaq 0x190(%rsp), %rsi
leaq 0xdf8(%rsp), %rdx
callq 0x11adb0
jmp 0x118f2a
leaq 0x190(%rsp), %rdi
callq 0x1117b8
leaq 0x18f(%rsp), %rdi
callq 0x1117a0
leaq 0x167(%rsp), %rdi
movq %rdi, 0x28(%rsp)
callq 0x111660
movq 0x28(%rsp), %rdx
leaq 0x33661e(%rip), %rsi    # 0x44f580
leaq 0x168(%rsp), %rdi
callq 0x118780
jmp 0x118f71
leaq 0xce8(%rsp), %rdi
leaq 0x168(%rsp), %rsi
leaq 0xd80(%rsp), %rdx
callq 0x11adb0
jmp 0x118f90
leaq 0x168(%rsp), %rdi
callq 0x1117b8
leaq 0x167(%rsp), %rdi
callq 0x1117a0
leaq 0x13f(%rsp), %rdi
movq %rdi, 0x20(%rsp)
callq 0x111660
movq 0x20(%rsp), %rdx
leaq 0x3365be(%rip), %rsi    # 0x44f586
leaq 0x140(%rsp), %rdi
callq 0x118780
jmp 0x118fd7
leaq 0xce8(%rsp), %rdi
leaq 0x140(%rsp), %rsi
leaq 0xd18(%rsp), %rdx
callq 0x11adb0
jmp 0x118ff6
leaq 0x140(%rsp), %rdi
callq 0x1117b8
leaq 0x13f(%rsp), %rdi
callq 0x1117a0
leaq 0xcc8(%rsp), %rdi
leaq 0xce8(%rsp), %rsi
callq 0x11afb0
jmp 0x119027
leaq 0x117(%rsp), %rdi
movq %rdi, 0x18(%rsp)
callq 0x111660
movq 0x18(%rsp), %rdx
leaq 0x336549(%rip), %rsi    # 0x44f58e
leaq 0x118(%rsp), %rdi
callq 0x118780
jmp 0x119054
leaq 0x117(%rsp), %rdi
callq 0x1117a0
leaq 0x3a0(%rsp), %rdi
leaq 0x118(%rsp), %rsi
leaq 0xcc8(%rsp), %rdx
callq 0x11b060
movb %al, 0x17(%rsp)
jmp 0x119084
movb 0x17(%rsp), %al
testb $0x1, %al
jne 0x1196c9
jmp 0x119092
leaq 0xf0(%rsp), %rdi
leaq 0x3a0(%rsp), %rsi
callq 0x11b8f0
jmp 0x1190a9
leaq 0xf0(%rsp), %rdi
callq 0x1110f0
movq %rax, 0x8(%rsp)
leaq 0x118(%rsp), %rdi
callq 0x1110f0
movq 0x8(%rsp), %rsi
movq %rax, %rdx
leaq 0x337435(%rip), %rdi    # 0x45050c
xorl %eax, %eax
callq 0x111080
jmp 0x1190e0
leaq 0xf0(%rsp), %rdi
callq 0x1117b8
movl $0x1, 0xec(%rsp)
jmp 0x1196e3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x11c8(%rsp)
movl %eax, 0x11c4(%rsp)
jmp 0x119134
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x11c8(%rsp)
movl %eax, 0x11c4(%rsp)
leaq 0x11d8(%rsp), %rdi
callq 0x1117b8
leaq 0x11d7(%rsp), %rdi
callq 0x1117a0
jmp 0x11983d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x11c8(%rsp)
movl %eax, 0x11c4(%rsp)
jmp 0x11917d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x11c8(%rsp)
movl %eax, 0x11c4(%rsp)
leaq 0x1190(%rsp), %rdi
callq 0x1117b8
leaq 0x118f(%rsp), %rdi
callq 0x1117a0
jmp 0x11983d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x11c8(%rsp)
movl %eax, 0x11c4(%rsp)
jmp 0x1191c6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x11c8(%rsp)
movl %eax, 0x11c4(%rsp)
leaq 0x1158(%rsp), %rdi
callq 0x1117b8
leaq 0x1157(%rsp), %rdi
callq 0x1117a0
jmp 0x11983d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x11c8(%rsp)
movl %eax, 0x11c4(%rsp)
jmp 0x11920f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x11c8(%rsp)
movl %eax, 0x11c4(%rsp)
leaq 0x1120(%rsp), %rdi
callq 0x1117b8
leaq 0x111f(%rsp), %rdi
callq 0x1117a0
jmp 0x11983d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x11c8(%rsp)
movl %eax, 0x11c4(%rsp)
jmp 0x119258
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x11c8(%rsp)
movl %eax, 0x11c4(%rsp)
leaq 0x10e8(%rsp), %rdi
callq 0x1117b8
leaq 0x10e7(%rsp), %rdi
callq 0x1117a0
jmp 0x11983d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x11c8(%rsp)
movl %eax, 0x11c4(%rsp)
jmp 0x1192a1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x11c8(%rsp)
movl %eax, 0x11c4(%rsp)
leaq 0x1080(%rsp), %rdi
callq 0x1117b8
leaq 0x107f(%rsp), %rdi
callq 0x1117a0
jmp 0x119830
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x11c8(%rsp)
movl %eax, 0x11c4(%rsp)
jmp 0x1192ea
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x11c8(%rsp)
movl %eax, 0x11c4(%rsp)
leaq 0x1058(%rsp), %rdi
callq 0x1117b8
leaq 0x1057(%rsp), %rdi
callq 0x1117a0
jmp 0x119830
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x11c8(%rsp)
movl %eax, 0x11c4(%rsp)
jmp 0x119830
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x11c8(%rsp)
movl %eax, 0x11c4(%rsp)
jmp 0x119823
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x11c8(%rsp)
movl %eax, 0x11c4(%rsp)
jmp 0x119816
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x11c8(%rsp)
movl %eax, 0x11c4(%rsp)
jmp 0x119809
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x11c8(%rsp)
movl %eax, 0x11c4(%rsp)
jmp 0x1197fc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x11c8(%rsp)
movl %eax, 0x11c4(%rsp)
jmp 0x1197ef
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x11c8(%rsp)
movl %eax, 0x11c4(%rsp)
jmp 0x1193c9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x11c8(%rsp)
movl %eax, 0x11c4(%rsp)
leaq 0xcf8(%rsp), %rdi
callq 0x1117b8
leaq 0xcf7(%rsp), %rdi
callq 0x1117a0
jmp 0x1197e2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x11c8(%rsp)
movl %eax, 0x11c4(%rsp)
jmp 0x1197d5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x11c8(%rsp)
movl %eax, 0x11c4(%rsp)
jmp 0x1197c8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x11c8(%rsp)
movl %eax, 0x11c4(%rsp)
jmp 0x1197bb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x11c8(%rsp)
movl %eax, 0x11c4(%rsp)
leaq 0x250(%rsp), %rdi
callq 0x11ad40
jmp 0x1197bb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x11c8(%rsp)
movl %eax, 0x11c4(%rsp)
jmp 0x119483
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x11c8(%rsp)
movl %eax, 0x11c4(%rsp)
leaq 0x230(%rsp), %rdi
callq 0x1117b8
leaq 0x22f(%rsp), %rdi
callq 0x1117a0
jmp 0x1197ae
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x11c8(%rsp)
movl %eax, 0x11c4(%rsp)
jmp 0x1194cc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x11c8(%rsp)
movl %eax, 0x11c4(%rsp)
leaq 0x208(%rsp), %rdi
callq 0x1117b8
leaq 0x207(%rsp), %rdi
callq 0x1117a0
jmp 0x1197ae
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x11c8(%rsp)
movl %eax, 0x11c4(%rsp)
jmp 0x119515
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x11c8(%rsp)
movl %eax, 0x11c4(%rsp)
leaq 0x1e0(%rsp), %rdi
callq 0x1117b8
leaq 0x1df(%rsp), %rdi
callq 0x1117a0
jmp 0x1197ae
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x11c8(%rsp)
movl %eax, 0x11c4(%rsp)
jmp 0x11955e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x11c8(%rsp)
movl %eax, 0x11c4(%rsp)
leaq 0x1b8(%rsp), %rdi
callq 0x1117b8
leaq 0x1b7(%rsp), %rdi
callq 0x1117a0
jmp 0x1197ae
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x11c8(%rsp)
movl %eax, 0x11c4(%rsp)
jmp 0x1195a7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x11c8(%rsp)
movl %eax, 0x11c4(%rsp)
leaq 0x190(%rsp), %rdi
callq 0x1117b8
leaq 0x18f(%rsp), %rdi
callq 0x1117a0
jmp 0x1197ae
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x11c8(%rsp)
movl %eax, 0x11c4(%rsp)
jmp 0x1195f0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x11c8(%rsp)
movl %eax, 0x11c4(%rsp)
leaq 0x168(%rsp), %rdi
callq 0x1117b8
leaq 0x167(%rsp), %rdi
callq 0x1117a0
jmp 0x1197ae
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x11c8(%rsp)
movl %eax, 0x11c4(%rsp)
jmp 0x119639
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x11c8(%rsp)
movl %eax, 0x11c4(%rsp)
leaq 0x140(%rsp), %rdi
callq 0x1117b8
leaq 0x13f(%rsp), %rdi
callq 0x1117a0
jmp 0x1197ae
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x11c8(%rsp)
movl %eax, 0x11c4(%rsp)
jmp 0x1197ae
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x11c8(%rsp)
movl %eax, 0x11c4(%rsp)
leaq 0x117(%rsp), %rdi
callq 0x1117a0
jmp 0x1197ae
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x11c8(%rsp)
movl %eax, 0x11c4(%rsp)
jmp 0x1197a1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x11c8(%rsp)
movl %eax, 0x11c4(%rsp)
leaq 0xf0(%rsp), %rdi
callq 0x1117b8
jmp 0x1197a1
leaq 0xcc8(%rsp), %rdi
callq 0x11b9b0
jmp 0x1196d8
movl $0x0, 0xec(%rsp)
leaq 0x118(%rsp), %rdi
callq 0x1117b8
leaq 0x3a0(%rsp), %rdi
callq 0x11b9d0
leaq 0xcc8(%rsp), %rdi
callq 0x11bbd0
leaq 0xce8(%rsp), %rdi
callq 0x11bc10
leaq 0xd18(%rsp), %rdi
callq 0x11bc90
leaq 0xd80(%rsp), %rdi
callq 0x11bcc0
leaq 0xdf8(%rsp), %rdi
callq 0x11bcf0
leaq 0xe70(%rsp), %rdi
callq 0x11bd20
leaq 0xee8(%rsp), %rdi
callq 0x11bd50
leaq 0xf60(%rsp), %rdi
callq 0x11bd80
leaq 0xfd8(%rsp), %rdi
callq 0x11bdb0
leaq 0x10a0(%rsp), %rdi
callq 0x11bde0
leaq 0x11f8(%rsp), %rdi
callq 0x11bdf0
leaq 0x1228(%rsp), %rdi
callq 0x11bdf0
addq $0x1258, %rsp           # imm = 0x1258
retq
leaq 0x118(%rsp), %rdi
callq 0x1117b8
leaq 0x3a0(%rsp), %rdi
callq 0x11b9d0
leaq 0xcc8(%rsp), %rdi
callq 0x11bbd0
leaq 0xce8(%rsp), %rdi
callq 0x11bc10
leaq 0xd18(%rsp), %rdi
callq 0x11bc90
leaq 0xd80(%rsp), %rdi
callq 0x11bcc0
leaq 0xdf8(%rsp), %rdi
callq 0x11bcf0
leaq 0xe70(%rsp), %rdi
callq 0x11bd20
leaq 0xee8(%rsp), %rdi
callq 0x11bd50
leaq 0xf60(%rsp), %rdi
callq 0x11bd80
leaq 0xfd8(%rsp), %rdi
callq 0x11bdb0
leaq 0x10a0(%rsp), %rdi
callq 0x11bde0
leaq 0x11f8(%rsp), %rdi
callq 0x11bdf0
leaq 0x1228(%rsp), %rdi
callq 0x11bdf0
movq 0x11c8(%rsp), %rdi
callq 0x111450
nopw %cs:(%rax,%rax)
nop