// File: ArashPartow[P]exprtk-extras/exprtk_sudoku_solver.cpp
// Function: void sudoku_solver<double>()
void sudoku_solver()
{
   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;

   std::vector<T> board =
   {
      0, 0, 0, 0, 0, 8, 2, 0, 5,
      0, 0, 0, 3, 2, 0, 0, 0, 8,
      0, 0, 0, 0, 0, 5, 6, 0, 0,
      0, 1, 0, 0, 4, 7, 0, 9, 3,
      0, 0, 0, 0, 0, 0, 0, 0, 0,
      8, 6, 0, 2, 3, 0, 0, 1, 0,
      0, 0, 6, 8, 0, 0, 0, 0, 0,
      5, 0, 0, 0, 7, 3, 0, 0, 0,
      4, 0, 3, 9, 0, 0, 0, 0, 0,
   };

   exprtk::rtl::io::package<T> io_package;

   symbol_table_t symbol_table;
   symbol_table.add_vector  ("board", board);
   symbol_table.add_function("print_digit",
                             [](T v) ->T
                             { printf(" %d ",static_cast<int>(v)); return 0; });
   symbol_table.add_package (io_package);

   compositor_t compositor(symbol_table);

   compositor.load_variables(true);
   compositor.load_vectors  (true);

   compositor.add(
      function_t("get_board")
      .vars("col", "row")
      .expression
      ( " board[row * sqrt(board[]) + col]; " ));

   compositor.add(
      function_t("set_board")
      .vars("col", "row", "value")
      .expression
      ( " board[row * sqrt(board[]) + col] := value; " ));

   compositor.add(
      function_t("display_board")
      .expression
      (
         " const var n := sqrt(board[]);                             "
         "                                                           "
         " for (var row := 0; row < n; row += 1)                     "
         " {                                                         "
         "    for (var col := 0; col < n; col += 1)                  "
         "    {                                                      "
         "       print_digit(get_board(col,row));                    "
         "                                                           "
         "       if ((col > 0) and (col < 8) and (col + 1) % 3 == 0) "
         "       {                                                   "
         "          print('|')                                       "
         "       }                                                   "
         "    };                                                     "
         "                                                           "
         "    println('');                                           "
         "                                                           "
         "    if ((row > 0) and (row < 8) and (row + 1) % 3 == 0)    "
         "    {                                                      "
         "       println('---------+---------+----------');          "
         "    }                                                      "
         " }                                                         "
      ));

   compositor.add(
      function_t("is_valid")
      .vars("col", "row", "num")
      .expression
      (
         " const var n := sqrt(board[]);                              "
         "                                                            "
         " for (var i := 0; i < n; i += 1)                            "
         " {                                                          "
         "    if (                                                    "
         "         (get_board(col, i  ) == num) or                    "
         "         (get_board(i  , row) == num)                       "
         "       )                                                    "
         "    {                                                       "
         "       return [false];                                      "
         "    }                                                       "
         " };                                                         "
         "                                                            "
         " var subgrid_row := row - floor(row % 3);                   "
         " var subgrid_col := col - floor(col % 3);                   "
         "                                                            "
         " for (var i := subgrid_row; i < subgrid_row + 3; i += 1)    "
         " {                                                          "
         "    for (var j := subgrid_col; j < subgrid_col + 3; j += 1) "
         "    {                                                       "
         "       if (get_board(j,i) == num)                           "
         "       {                                                    "
         "          return [false];                                   "
         "       }                                                    "
         "    }                                                       "
         " };                                                         "
         "                                                            "
         " return [true];                                             "
      ));

   compositor.add(
      function_t("solve_sudoku")
      .expression
      (
         " const var n := sqrt(board[]);                "
         "                                              "
         " for (var row := 0; row < n; row += 1)        "
         " {                                            "
         "    for (var col := 0; col < n; col += 1)     "
         "    {                                         "
         "       if (get_board(col, row) != 0)          "
         "       {                                      "
         "          continue;                           "
         "       }                                      "
         "                                              "
         "       for (var num := 1; num <= 9; num += 1) "
         "       {                                      "
         "          if (not(is_valid(col, row, num)))   "
         "          {                                   "
         "             continue;                        "
         "          }                                   "
         "                                              "
         "          set_board(col, row, num);           "
         "                                              "
         "          if (solve_sudoku())                 "
         "          {                                   "
         "             return [true];                   "
         "          };                                  "
         "                                              "
         "          set_board(col, row, 0);             "
         "       };                                     "
         "                                              "
         "       return [false];                        "
         "    }                                         "
         " };                                           "
         "                                              "
         " return [true];                               "
      ));

   const std::string sudoku_solver_program =
      " if (solve_sudoku())                           "
      " {                                             "
      "    println('Puzzle Solved!');                 "
      " }                                             "
      " else                                          "
      " {                                             "
      "    println('Error: Failed to solve puzzle.'); "
      " };                                            "
      "                                               "
      " display_board();                              ";

   expression_t expression;
   expression.register_symbol_table(symbol_table);

   parser_t parser;
   parser.compile(sudoku_solver_program,expression);

   expression.value();
}

// Assembly:
subq $0x1f38, %rsp           # imm = 0x1F38
leaq 0x34fcc2(%rip), %rsi    # 0x46b500
leaq 0x1c88(%rsp), %rdi
movq %rdi, 0xf0(%rsp)
movl $0x288, %edx            # imm = 0x288
callq 0x114090
movq 0xf0(%rsp), %rax
movq %rax, 0x1f10(%rsp)
movq $0x51, 0x1f18(%rsp)
leaq 0x1c87(%rsp), %rdi
movq %rdi, 0xf8(%rsp)
callq 0x11cc50
movq 0xf8(%rsp), %rcx
movq 0x1f10(%rsp), %rsi
movq 0x1f18(%rsp), %rdx
leaq 0x1f20(%rsp), %rdi
callq 0x11cc60
jmp 0x11b8b0
leaq 0x1c87(%rsp), %rdi
callq 0x11ccf0
leaq 0x1ba0(%rsp), %rdi
callq 0x11cd00
jmp 0x11b8cc
leaq 0x1b98(%rsp), %rdi
movl $0x1, %esi
callq 0x11ce50
jmp 0x11b8e0
leaq 0x1b77(%rsp), %rdi
movq %rdi, 0xe8(%rsp)
callq 0x114660
movq 0xe8(%rsp), %rdx
leaq 0x349c71(%rip), %rsi    # 0x465575
leaq 0x1b78(%rsp), %rdi
callq 0x11b770
jmp 0x11b913
leaq 0x1b98(%rsp), %rdi
leaq 0x1b78(%rsp), %rsi
leaq 0x1f20(%rsp), %rdx
callq 0x11ce90
jmp 0x11b932
leaq 0x1b78(%rsp), %rdi
callq 0x1147a8
leaq 0x1b77(%rsp), %rdi
callq 0x114790
leaq 0x1b4f(%rsp), %rdi
movq %rdi, 0xe0(%rsp)
callq 0x114660
movq 0xe0(%rsp), %rdx
leaq 0x349bf5(%rip), %rsi    # 0x465565
leaq 0x1b50(%rsp), %rdi
callq 0x11b770
jmp 0x11b97f
leaq 0x1b4e(%rsp), %rdi
callq 0x11d080
movq %rax, %rdx
leaq 0x1b98(%rsp), %rdi
leaq 0x1b50(%rsp), %rsi
callq 0x11cf50
jmp 0x11b9a6
leaq 0x1b50(%rsp), %rdi
callq 0x1147a8
leaq 0x1b4f(%rsp), %rdi
callq 0x114790
leaq 0x1b98(%rsp), %rdi
leaq 0x1ba0(%rsp), %rsi
callq 0x11d090
jmp 0x11b9d7
leaq 0x1160(%rsp), %rdi
leaq 0x1b98(%rsp), %rsi
callq 0x11d0c0
jmp 0x11b9ee
leaq 0x1160(%rsp), %rdi
movl $0x1, %esi
callq 0x11d260
jmp 0x11ba02
leaq 0x1160(%rsp), %rdi
movl $0x1, %esi
callq 0x11d290
jmp 0x11ba16
leaq 0x10af(%rsp), %rdi
movq %rdi, 0xd8(%rsp)
callq 0x114660
movq 0xd8(%rsp), %rdx
leaq 0x349b37(%rip), %rsi    # 0x465571
leaq 0x10b0(%rsp), %rdi
callq 0x11b770
jmp 0x11ba49
leaq 0x10d0(%rsp), %rdi
leaq 0x10b0(%rsp), %rsi
callq 0x11d310
jmp 0x11ba60
leaq 0x1087(%rsp), %rdi
movq %rdi, 0xd0(%rsp)
callq 0x114660
movq 0xd0(%rsp), %rdx
leaq 0x349af7(%rip), %rsi    # 0x46557b
leaq 0x1088(%rsp), %rdi
callq 0x11b770
jmp 0x11ba93
leaq 0x105f(%rsp), %rdi
movq %rdi, 0xc8(%rsp)
callq 0x114660
movq 0xc8(%rsp), %rdx
leaq 0x349ac8(%rip), %rsi    # 0x46557f
leaq 0x1060(%rsp), %rdi
callq 0x11b770
jmp 0x11bac6
leaq 0x10d0(%rsp), %rdi
leaq 0x1088(%rsp), %rsi
leaq 0x1060(%rsp), %rdx
callq 0x11d390
movq %rax, 0xc0(%rsp)
jmp 0x11baed
leaq 0x1037(%rsp), %rdi
movq %rdi, 0xb8(%rsp)
callq 0x114660
movq 0xb8(%rsp), %rdx
leaq 0x349a72(%rip), %rsi    # 0x465583
leaq 0x1038(%rsp), %rdi
callq 0x11b770
jmp 0x11bb20
movq 0xc0(%rsp), %rdi
leaq 0x1038(%rsp), %rsi
callq 0x11d3e0
movq %rax, 0xb0(%rsp)
jmp 0x11bb3f
movq 0xb0(%rsp), %rsi
leaq 0x1160(%rsp), %rdi
xorl %edx, %edx
callq 0x11d2c0
jmp 0x11bb58
leaq 0x1038(%rsp), %rdi
callq 0x1147a8
leaq 0x1037(%rsp), %rdi
callq 0x114790
leaq 0x1060(%rsp), %rdi
callq 0x1147a8
leaq 0x105f(%rsp), %rdi
callq 0x114790
leaq 0x1088(%rsp), %rdi
callq 0x1147a8
leaq 0x1087(%rsp), %rdi
callq 0x114790
leaq 0x10d0(%rsp), %rdi
callq 0x11d410
leaq 0x10b0(%rsp), %rdi
callq 0x1147a8
leaq 0x10af(%rsp), %rdi
callq 0x114790
leaq 0xf7f(%rsp), %rdi
movq %rdi, 0xa8(%rsp)
callq 0x114660
movq 0xa8(%rsp), %rdx
leaq 0x3499b6(%rip), %rsi    # 0x4655a7
leaq 0xf80(%rsp), %rdi
callq 0x11b770
jmp 0x11bc00
leaq 0xfa0(%rsp), %rdi
leaq 0xf80(%rsp), %rsi
callq 0x11d310
jmp 0x11bc17
leaq 0xf57(%rsp), %rdi
movq %rdi, 0xa0(%rsp)
callq 0x114660
movq 0xa0(%rsp), %rdx
leaq 0x349940(%rip), %rsi    # 0x46557b
leaq 0xf58(%rsp), %rdi
callq 0x11b770
jmp 0x11bc4a
leaq 0xf2f(%rsp), %rdi
movq %rdi, 0x98(%rsp)
callq 0x114660
movq 0x98(%rsp), %rdx
leaq 0x349911(%rip), %rsi    # 0x46557f
leaq 0xf30(%rsp), %rdi
callq 0x11b770
jmp 0x11bc7d
leaq 0xf07(%rsp), %rdi
movq %rdi, 0x90(%rsp)
callq 0x114660
movq 0x90(%rsp), %rdx
leaq 0x34ae63(%rip), %rsi    # 0x466b04
leaq 0xf08(%rsp), %rdi
callq 0x11b770
jmp 0x11bcb0
leaq 0xfa0(%rsp), %rdi
leaq 0xf58(%rsp), %rsi
leaq 0xf30(%rsp), %rdx
leaq 0xf08(%rsp), %rcx
callq 0x11d450
movq %rax, 0x88(%rsp)
jmp 0x11bcdf
leaq 0xedf(%rsp), %rdi
movq %rdi, 0x80(%rsp)
callq 0x114660
movq 0x80(%rsp), %rdx
leaq 0x3498ae(%rip), %rsi    # 0x4655b1
leaq 0xee0(%rsp), %rdi
callq 0x11b770
jmp 0x11bd12
movq 0x88(%rsp), %rdi
leaq 0xee0(%rsp), %rsi
callq 0x11d3e0
movq %rax, 0x78(%rsp)
jmp 0x11bd2e
movq 0x78(%rsp), %rsi
leaq 0x1160(%rsp), %rdi
xorl %edx, %edx
callq 0x11d2c0
jmp 0x11bd44
leaq 0xee0(%rsp), %rdi
callq 0x1147a8
leaq 0xedf(%rsp), %rdi
callq 0x114790
leaq 0xf08(%rsp), %rdi
callq 0x1147a8
leaq 0xf07(%rsp), %rdi
callq 0x114790
leaq 0xf30(%rsp), %rdi
callq 0x1147a8
leaq 0xf2f(%rsp), %rdi
callq 0x114790
leaq 0xf58(%rsp), %rdi
callq 0x1147a8
leaq 0xf57(%rsp), %rdi
callq 0x114790
leaq 0xfa0(%rsp), %rdi
callq 0x11d410
leaq 0xf80(%rsp), %rdi
callq 0x1147a8
leaq 0xf7f(%rsp), %rdi
callq 0x114790
leaq 0xe27(%rsp), %rdi
movq %rdi, 0x70(%rsp)
callq 0x114660
movq 0x70(%rsp), %rdx
leaq 0x3497ed(%rip), %rsi    # 0x4655de
leaq 0xe28(%rsp), %rdi
callq 0x11b770
jmp 0x11be00
leaq 0xe48(%rsp), %rdi
leaq 0xe28(%rsp), %rsi
callq 0x11d310
jmp 0x11be17
leaq 0xdff(%rsp), %rdi
movq %rdi, 0x68(%rsp)
callq 0x114660
movq 0x68(%rsp), %rdx
leaq 0x3497b7(%rip), %rsi    # 0x4655ec
leaq 0xe00(%rsp), %rdi
callq 0x11b770
jmp 0x11be44
leaq 0xe48(%rsp), %rdi
leaq 0xe00(%rsp), %rsi
callq 0x11d3e0
movq %rax, 0x60(%rsp)
jmp 0x11be60
movq 0x60(%rsp), %rsi
leaq 0x1160(%rsp), %rdi
xorl %edx, %edx
callq 0x11d2c0
jmp 0x11be76
leaq 0xe00(%rsp), %rdi
callq 0x1147a8
leaq 0xdff(%rsp), %rdi
callq 0x114790
leaq 0xe48(%rsp), %rdi
callq 0x11d410
leaq 0xe28(%rsp), %rdi
callq 0x1147a8
leaq 0xe27(%rsp), %rdi
callq 0x114790
leaq 0xd47(%rsp), %rdi
movq %rdi, 0x58(%rsp)
callq 0x114660
movq 0x58(%rsp), %rdx
leaq 0x349bef(%rip), %rsi    # 0x465ac4
leaq 0xd48(%rsp), %rdi
callq 0x11b770
jmp 0x11bee4
leaq 0xd68(%rsp), %rdi
leaq 0xd48(%rsp), %rsi
callq 0x11d310
jmp 0x11befb
leaq 0xd1f(%rsp), %rdi
movq %rdi, 0x50(%rsp)
callq 0x114660
movq 0x50(%rsp), %rdx
leaq 0x349662(%rip), %rsi    # 0x46557b
leaq 0xd20(%rsp), %rdi
callq 0x11b770
jmp 0x11bf28
leaq 0xcf7(%rsp), %rdi
movq %rdi, 0x48(%rsp)
callq 0x114660
movq 0x48(%rsp), %rdx
leaq 0x349639(%rip), %rsi    # 0x46557f
leaq 0xcf8(%rsp), %rdi
callq 0x11b770
jmp 0x11bf55
leaq 0xccf(%rsp), %rdi
movq %rdi, 0x40(%rsp)
callq 0x114660
movq 0x40(%rsp), %rdx
leaq 0x349b5a(%rip), %rsi    # 0x465acd
leaq 0xcd0(%rsp), %rdi
callq 0x11b770
jmp 0x11bf82
leaq 0xd68(%rsp), %rdi
leaq 0xd20(%rsp), %rsi
leaq 0xcf8(%rsp), %rdx
leaq 0xcd0(%rsp), %rcx
callq 0x11d450
movq %rax, 0x38(%rsp)
jmp 0x11bfae
leaq 0xca7(%rsp), %rdi
movq %rdi, 0x30(%rsp)
callq 0x114660
movq 0x30(%rsp), %rdx
leaq 0x349b05(%rip), %rsi    # 0x465ad1
leaq 0xca8(%rsp), %rdi
callq 0x11b770
jmp 0x11bfdb
movq 0x38(%rsp), %rdi
leaq 0xca8(%rsp), %rsi
callq 0x11d3e0
movq %rax, 0x28(%rsp)
jmp 0x11bff4
movq 0x28(%rsp), %rsi
leaq 0x1160(%rsp), %rdi
xorl %edx, %edx
callq 0x11d2c0
jmp 0x11c00a
leaq 0xca8(%rsp), %rdi
callq 0x1147a8
leaq 0xca7(%rsp), %rdi
callq 0x114790
leaq 0xcd0(%rsp), %rdi
callq 0x1147a8
leaq 0xccf(%rsp), %rdi
callq 0x114790
leaq 0xcf8(%rsp), %rdi
callq 0x1147a8
leaq 0xcf7(%rsp), %rdi
callq 0x114790
leaq 0xd20(%rsp), %rdi
callq 0x1147a8
leaq 0xd1f(%rsp), %rdi
callq 0x114790
leaq 0xd68(%rsp), %rdi
callq 0x11d410
leaq 0xd48(%rsp), %rdi
callq 0x1147a8
leaq 0xd47(%rsp), %rdi
callq 0x114790
leaq 0xbef(%rsp), %rdi
movq %rdi, 0x20(%rsp)
callq 0x114660
movq 0x20(%rsp), %rdx
leaq 0x34a0ab(%rip), %rsi    # 0x466162
leaq 0xbf0(%rsp), %rdi
callq 0x11b770
jmp 0x11c0c6
leaq 0xc10(%rsp), %rdi
leaq 0xbf0(%rsp), %rsi
callq 0x11d310
jmp 0x11c0dd
leaq 0xbc7(%rsp), %rdi
movq %rdi, 0x18(%rsp)
callq 0x114660
movq 0x18(%rsp), %rdx
leaq 0x34a074(%rip), %rsi    # 0x46616f
leaq 0xbc8(%rsp), %rdi
callq 0x11b770
jmp 0x11c10a
leaq 0xc10(%rsp), %rdi
leaq 0xbc8(%rsp), %rsi
callq 0x11d3e0
movq %rax, 0x10(%rsp)
jmp 0x11c126
movq 0x10(%rsp), %rsi
leaq 0x1160(%rsp), %rdi
xorl %edx, %edx
callq 0x11d2c0
jmp 0x11c13c
leaq 0xbc8(%rsp), %rdi
callq 0x1147a8
leaq 0xbc7(%rsp), %rdi
callq 0x114790
leaq 0xc10(%rsp), %rdi
callq 0x11d410
leaq 0xbf0(%rsp), %rdi
callq 0x1147a8
leaq 0xbef(%rsp), %rdi
callq 0x114790
leaq 0xb9f(%rsp), %rdi
movq %rdi, 0x8(%rsp)
callq 0x114660
movq 0x8(%rsp), %rdx
leaq 0x34a5c3(%rip), %rsi    # 0x46675e
leaq 0xba0(%rsp), %rdi
callq 0x11b770
jmp 0x11c1aa
leaq 0xb9f(%rsp), %rdi
callq 0x114790
leaq 0xb78(%rsp), %rdi
callq 0x11d4b0
jmp 0x11c1c6
leaq 0xb78(%rsp), %rdi
leaq 0x1b98(%rsp), %rsi
callq 0x11d560
jmp 0x11c1dd
leaq 0x100(%rsp), %rdi
movl $0x7f, %esi
callq 0x11d610
jmp 0x11c1f1
leaq 0x250(%rsp), %rdi
leaq 0x100(%rsp), %rsi
callq 0x11d740
jmp 0x11c208
leaq 0x100(%rsp), %rdi
callq 0x11df70
leaq 0x250(%rsp), %rdi
leaq 0xba0(%rsp), %rsi
leaq 0xb78(%rsp), %rdx
callq 0x11dfe0
jmp 0x11c234
leaq 0xb78(%rsp), %rdi
callq 0x11e870
jmp 0x11c243
leaq 0x250(%rsp), %rdi
callq 0x11e890
leaq 0xb78(%rsp), %rdi
callq 0x11ea90
leaq 0xba0(%rsp), %rdi
callq 0x1147a8
leaq 0x1160(%rsp), %rdi
callq 0x11ead0
leaq 0x1b98(%rsp), %rdi
callq 0x11eb60
leaq 0x1ba0(%rsp), %rdi
callq 0x11ebe0
leaq 0x1f20(%rsp), %rdi
callq 0x11ec10
addq $0x1f38, %rsp           # imm = 0x1F38
retq
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1c78(%rsp)
movl %eax, 0x1c74(%rsp)
leaq 0x1c87(%rsp), %rdi
callq 0x11ccf0
jmp 0x11c995
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1c78(%rsp)
movl %eax, 0x1c74(%rsp)
jmp 0x11c988
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1c78(%rsp)
movl %eax, 0x1c74(%rsp)
jmp 0x11c97b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1c78(%rsp)
movl %eax, 0x1c74(%rsp)
jmp 0x11c335
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1c78(%rsp)
movl %eax, 0x1c74(%rsp)
leaq 0x1b78(%rsp), %rdi
callq 0x1147a8
leaq 0x1b77(%rsp), %rdi
callq 0x114790
jmp 0x11c96e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1c78(%rsp)
movl %eax, 0x1c74(%rsp)
jmp 0x11c37e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1c78(%rsp)
movl %eax, 0x1c74(%rsp)
leaq 0x1b50(%rsp), %rdi
callq 0x1147a8
leaq 0x1b4f(%rsp), %rdi
callq 0x114790
jmp 0x11c96e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1c78(%rsp)
movl %eax, 0x1c74(%rsp)
jmp 0x11c96e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1c78(%rsp)
movl %eax, 0x1c74(%rsp)
jmp 0x11c961
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1c78(%rsp)
movl %eax, 0x1c74(%rsp)
jmp 0x11c4cb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1c78(%rsp)
movl %eax, 0x1c74(%rsp)
jmp 0x11c4be
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1c78(%rsp)
movl %eax, 0x1c74(%rsp)
jmp 0x11c4a4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1c78(%rsp)
movl %eax, 0x1c74(%rsp)
jmp 0x11c48a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1c78(%rsp)
movl %eax, 0x1c74(%rsp)
jmp 0x11c47d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1c78(%rsp)
movl %eax, 0x1c74(%rsp)
jmp 0x11c470
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1c78(%rsp)
movl %eax, 0x1c74(%rsp)
leaq 0x1038(%rsp), %rdi
callq 0x1147a8
leaq 0x1037(%rsp), %rdi
callq 0x114790
leaq 0x1060(%rsp), %rdi
callq 0x1147a8
leaq 0x105f(%rsp), %rdi
callq 0x114790
leaq 0x1088(%rsp), %rdi
callq 0x1147a8
leaq 0x1087(%rsp), %rdi
callq 0x114790
leaq 0x10d0(%rsp), %rdi
callq 0x11d410
leaq 0x10b0(%rsp), %rdi
callq 0x1147a8
leaq 0x10af(%rsp), %rdi
callq 0x114790
jmp 0x11c961
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1c78(%rsp)
movl %eax, 0x1c74(%rsp)
jmp 0x11c619
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1c78(%rsp)
movl %eax, 0x1c74(%rsp)
jmp 0x11c60c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1c78(%rsp)
movl %eax, 0x1c74(%rsp)
jmp 0x11c5f2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1c78(%rsp)
movl %eax, 0x1c74(%rsp)
jmp 0x11c5d8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1c78(%rsp)
movl %eax, 0x1c74(%rsp)
jmp 0x11c5be
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1c78(%rsp)
movl %eax, 0x1c74(%rsp)
jmp 0x11c5b1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1c78(%rsp)
movl %eax, 0x1c74(%rsp)
jmp 0x11c5a4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1c78(%rsp)
movl %eax, 0x1c74(%rsp)
leaq 0xee0(%rsp), %rdi
callq 0x1147a8
leaq 0xedf(%rsp), %rdi
callq 0x114790
leaq 0xf08(%rsp), %rdi
callq 0x1147a8
leaq 0xf07(%rsp), %rdi
callq 0x114790
leaq 0xf30(%rsp), %rdi
callq 0x1147a8
leaq 0xf2f(%rsp), %rdi
callq 0x114790
leaq 0xf58(%rsp), %rdi
callq 0x1147a8
leaq 0xf57(%rsp), %rdi
callq 0x114790
leaq 0xfa0(%rsp), %rdi
callq 0x11d410
leaq 0xf80(%rsp), %rdi
callq 0x1147a8
leaq 0xf7f(%rsp), %rdi
callq 0x114790
jmp 0x11c961
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1c78(%rsp)
movl %eax, 0x1c74(%rsp)
jmp 0x11c6b5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1c78(%rsp)
movl %eax, 0x1c74(%rsp)
jmp 0x11c6a8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1c78(%rsp)
movl %eax, 0x1c74(%rsp)
jmp 0x11c68e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1c78(%rsp)
movl %eax, 0x1c74(%rsp)
leaq 0xe00(%rsp), %rdi
callq 0x1147a8
leaq 0xdff(%rsp), %rdi
callq 0x114790
leaq 0xe48(%rsp), %rdi
callq 0x11d410
leaq 0xe28(%rsp), %rdi
callq 0x1147a8
leaq 0xe27(%rsp), %rdi
callq 0x114790
jmp 0x11c961
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1c78(%rsp)
movl %eax, 0x1c74(%rsp)
jmp 0x11c803
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1c78(%rsp)
movl %eax, 0x1c74(%rsp)
jmp 0x11c7f6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1c78(%rsp)
movl %eax, 0x1c74(%rsp)
jmp 0x11c7dc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1c78(%rsp)
movl %eax, 0x1c74(%rsp)
jmp 0x11c7c2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1c78(%rsp)
movl %eax, 0x1c74(%rsp)
jmp 0x11c7a8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1c78(%rsp)
movl %eax, 0x1c74(%rsp)
jmp 0x11c79b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1c78(%rsp)
movl %eax, 0x1c74(%rsp)
jmp 0x11c78e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1c78(%rsp)
movl %eax, 0x1c74(%rsp)
leaq 0xca8(%rsp), %rdi
callq 0x1147a8
leaq 0xca7(%rsp), %rdi
callq 0x114790
leaq 0xcd0(%rsp), %rdi
callq 0x1147a8
leaq 0xccf(%rsp), %rdi
callq 0x114790
leaq 0xcf8(%rsp), %rdi
callq 0x1147a8
leaq 0xcf7(%rsp), %rdi
callq 0x114790
leaq 0xd20(%rsp), %rdi
callq 0x1147a8
leaq 0xd1f(%rsp), %rdi
callq 0x114790
leaq 0xd68(%rsp), %rdi
callq 0x11d410
leaq 0xd48(%rsp), %rdi
callq 0x1147a8
leaq 0xd47(%rsp), %rdi
callq 0x114790
jmp 0x11c961
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1c78(%rsp)
movl %eax, 0x1c74(%rsp)
jmp 0x11c89f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1c78(%rsp)
movl %eax, 0x1c74(%rsp)
jmp 0x11c892
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1c78(%rsp)
movl %eax, 0x1c74(%rsp)
jmp 0x11c878
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1c78(%rsp)
movl %eax, 0x1c74(%rsp)
leaq 0xbc8(%rsp), %rdi
callq 0x1147a8
leaq 0xbc7(%rsp), %rdi
callq 0x114790
leaq 0xc10(%rsp), %rdi
callq 0x11d410
leaq 0xbf0(%rsp), %rdi
callq 0x1147a8
leaq 0xbef(%rsp), %rdi
callq 0x114790
jmp 0x11c961
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1c78(%rsp)
movl %eax, 0x1c74(%rsp)
leaq 0xb9f(%rsp), %rdi
callq 0x114790
jmp 0x11c961
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1c78(%rsp)
movl %eax, 0x1c74(%rsp)
jmp 0x11c954
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1c78(%rsp)
movl %eax, 0x1c74(%rsp)
jmp 0x11c947
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1c78(%rsp)
movl %eax, 0x1c74(%rsp)
leaq 0x100(%rsp), %rdi
callq 0x11df70
jmp 0x11c947
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1c78(%rsp)
movl %eax, 0x1c74(%rsp)
leaq 0x250(%rsp), %rdi
callq 0x11e890
leaq 0xb78(%rsp), %rdi
callq 0x11ea90
leaq 0xba0(%rsp), %rdi
callq 0x1147a8
leaq 0x1160(%rsp), %rdi
callq 0x11ead0
leaq 0x1b98(%rsp), %rdi
callq 0x11eb60
leaq 0x1ba0(%rsp), %rdi
callq 0x11ebe0
leaq 0x1f20(%rsp), %rdi
callq 0x11ec10
movq 0x1c78(%rsp), %rdi
callq 0x114450
nopw %cs:(%rax,%rax)
nopl (%rax)