// File: /workspace/github_cpp_makefile_star2_O2/temelmertcan[P]multgen/src/pp_gen.cpp
// Function: create_br4pp(int, int, bool, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>**&, int&, int&, std::__cxx11::list<int, std::allocator<int>>&, bool, std::queue<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::deque<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>>>&)
void create_br4pp (int m, int n, bool signed_mul,
                   string**& pp_matrix,
                   int& pp_dim1,
                   int& pp_dim2,
                   std::list<int>& extra_ones_indices,
		   bool allowXes,
                   std::queue<string>& verilog){

  // m multiplier size,
  // n multiplicand size,

  if (signed_mul) {
    verilog.push ("wire [" + to_string(m-1) + ":0] mult = IN1;");
    verilog.push ("wire [" + to_string(n-1) + ":0] mcand = IN2;");
  } else {
    verilog.push ("wire [" + to_string(m) + ":0] mult = {1'b0, IN1};");
    verilog.push ("wire [" + to_string(n) + ":0] mcand = {1'b0, IN2};");
    m++;
    n++;
  }

  int pp_msb = n;
  pp_dim1 = (m+1)/2+2; // number of rows
  int size_to_fit_all_pp = pp_msb + 1 + 2*((m+1)/2-1);
  pp_dim2 = max(n+m, size_to_fit_all_pp); // number of columns

  pp_matrix = new string*[pp_dim1];
  // make sure it starts empty.
  for (int i = 0; i < pp_dim1; i++){
    pp_matrix[i] = new string[pp_dim2];
    for (int j = 0; j < pp_dim2; j++)
      pp_matrix[i][j] = "";
  }

  /////
  verilog.push ("wire [" + to_string(pp_msb) + ":0] mcand_1x;");
  verilog.push ("wire [" + to_string(pp_msb) + ":0] mcand_2x;");
  verilog.push ("assign mcand_1x = {{"+to_string(pp_msb - n + 1)+"{mcand["+ to_string(n-1) +"]}},  mcand};");
  verilog.push ("assign mcand_2x = {{"+to_string(pp_msb - n)+"{mcand["+ to_string(n-1) +"]}},  mcand, 1'b0};");

  /////

  for (int i = 0; i < m; i+=2){
    verilog.push ("");
    string m0 = (i == 0 ? "1'b0" : "mult[" + to_string(i-1) + "]");
    string m1 = "mult[" + to_string(i) + "]";
    string m2 = (i >= m-1 ? "mult[" + to_string(m-1) + "]" : "mult[" + to_string(i+1) + "]");

    verilog.push ("// Booth Radix-4 Partial Products. Multiplier selectors: " + m2 + " " + m1 + " " + m0);

    string select_0 = "select_0_" + to_string(i/2);
    string select_e = "select_e_" + to_string(i/2);
    string select_ne = "select_ne_" + to_string(i/2);
    string select_2x = "select_2x_" + to_string(i/2);
    string select_n2x = "select_n2x_" + to_string(i/2);
    string cmp = "tcomp" + to_string(i/2);

    verilog.push ( "wire logic " + select_0
		   + ", " + select_e
                   + ", " + select_2x
                   + ", " + cmp
                   + ", " + select_ne
                   + ", " + select_n2x
                   + ";");

    verilog.push ("assign " + select_0 +
                  " =  &{" + m2 + ", " + m1 + ", " + m0 + "} | "
                  + "~|{" + m2 + ", " + m1 + ", " + m0 + "}"+ ";");
    verilog.push ("assign " + select_e +
                  " = ((~ " + m2 + ") & (" + m1 + " ^ " + m0 + "));");// +
    //" | ((~ " + m2 + ") & (~ " + m0 + ") & " + m1 + ");");

    verilog.push ("assign " + select_ne +
                  " = " + m2 + " &  (" + m1 + " ^ " + m0 + ");");// +
    //" | (" + m2 + " & (~ " + m0 + ") & " + m1 + ");");

    verilog.push ("assign " + select_2x +
                  " = (~ " + m2 + ") & " + m1 + " & " + m0 + ";");

    verilog.push ("assign " + select_n2x +
                  " = " + m2 + " & (~ " + m1 + ") & (~ " + m0 + ");");

    
    string cur_pp = "pp_" + to_string(i/2);
    verilog.push ("reg ["+ to_string(pp_msb) +":0] " + cur_pp + ";");
    verilog.push ("always @(*) begin");
    //verilog.push ("   "+cur_pp+" = 0;");
    verilog.push ("   case (1'b1)");
    verilog.push ("      " +  select_0 + "   : " + cur_pp + " = 0; " );
    verilog.push ("      " +  select_e + "   : " + cur_pp + " = mcand_1x; ");
    verilog.push ("      " +  select_2x + "  : " + cur_pp + " = mcand_2x; " );
    verilog.push ("      " +  select_n2x + " : " + cur_pp + " = (~ mcand_2x); " );
    verilog.push ("      " +  select_ne + "  : " + cur_pp + " = (~ mcand_1x); " );
    if (!allowXes) verilog.push ("      default  : " + cur_pp + " = 0; " );
    verilog.push ("   endcase " );
    verilog.push ("   " + cur_pp + "["+to_string(pp_msb)+"] = ~"+ cur_pp + "["+to_string(pp_msb)+"]; // flip the MSB ");
    verilog.push ("end");

    verilog.push ("assign " + cmp + " =  " + select_n2x +" | " + select_ne + ";");

  }

  for (int i = 0; i < pp_dim1-2; i++){
    pp_matrix[i] = new string[pp_dim2];
    for (int j = 0; j < i*2; j++){
      pp_matrix[i][j] = "";
    }
    for (int j = 0; j <= pp_msb && j+i*2 < pp_dim2 ; j++){
      string cur;
      cur = "pp_" + to_string(i) + "[" + to_string(j) + "]";
      pp_matrix[i][j+i*2] = cur;
    }
  }

  // add tcomps for the extra 1 needed for twos complemented partial products
  pp_matrix[pp_dim1-2] = new string[pp_dim2];
  for (int j = 0; j < m; j+=2){
    pp_matrix[pp_dim1-2][j] = "tcomp"  + to_string(j/2);
  }

  for (int j = pp_msb; j < size_to_fit_all_pp; j += 2){
    extra_ones_indices.push_back(j);
  }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x378, %rsp            # imm = 0x378
movq %r9, -0x1a0(%rbp)
movq %r8, -0x190(%rbp)
movq %rcx, -0xb8(%rbp)
movl %esi, %r15d
movl %edi, %r12d
testl %edx, %edx
je 0x1bda8
leal -0x1(%r12), %esi
leaq -0x90(%rbp), %rbx
movq %rbx, %rdi
callq 0x11c73
leaq 0x1606d(%rip), %rsi     # 0x31d5e
leaq -0x70(%rbp), %rdi
movq %rbx, %rdx
callq 0x11d49
leaq 0x1726e(%rip), %rdx     # 0x32f72
leaq -0x50(%rbp), %rdi
leaq -0x70(%rbp), %rsi
callq 0x11ba1
leaq -0x50(%rbp), %rsi
movq 0x20(%rbp), %rdi
callq 0x120e4
leaq -0x50(%rbp), %rdi
callq 0x20f0
leaq -0x70(%rbp), %rdi
callq 0x20f0
leaq -0x90(%rbp), %rdi
callq 0x20f0
leal -0x1(%r15), %ebx
leaq -0x90(%rbp), %r14
movq %r14, %rdi
movl %ebx, %esi
callq 0x11c73
leaq 0x16006(%rip), %rsi     # 0x31d5e
leaq -0x70(%rbp), %rdi
movq %r14, %rdx
callq 0x11d49
leaq 0x17217(%rip), %rdx     # 0x32f82
leaq -0x50(%rbp), %rdi
leaq -0x70(%rbp), %rsi
callq 0x11ba1
leaq -0x50(%rbp), %rsi
movq 0x20(%rbp), %rdi
callq 0x120e4
leaq -0x50(%rbp), %rdi
callq 0x20f0
leaq -0x70(%rbp), %rdi
callq 0x20f0
leaq -0x90(%rbp), %rdi
callq 0x20f0
jmp 0x1be76
leaq -0x90(%rbp), %rbx
movq %rbx, %rdi
movl %r12d, %esi
callq 0x11c73
leaq 0x15f9d(%rip), %rsi     # 0x31d5e
leaq -0x70(%rbp), %rdi
movq %rbx, %rdx
callq 0x11d49
leaq 0x171bf(%rip), %rdx     # 0x32f93
leaq -0x50(%rbp), %rdi
leaq -0x70(%rbp), %rsi
callq 0x11ba1
leaq -0x50(%rbp), %rsi
movq 0x20(%rbp), %rdi
callq 0x120e4
leaq -0x50(%rbp), %rdi
callq 0x20f0
leaq -0x70(%rbp), %rdi
callq 0x20f0
leaq -0x90(%rbp), %rdi
callq 0x20f0
movq %rbx, %rdi
movl %r15d, %esi
callq 0x11c73
leaq 0x15f40(%rip), %rsi     # 0x31d5e
leaq -0x70(%rbp), %rdi
movq %rbx, %rdx
callq 0x11d49
leaq 0x1717a(%rip), %rdx     # 0x32fab
leaq -0x50(%rbp), %rdi
leaq -0x70(%rbp), %rsi
callq 0x11ba1
leaq -0x50(%rbp), %rsi
movq 0x20(%rbp), %rdi
callq 0x120e4
leaq -0x50(%rbp), %rdi
callq 0x20f0
leaq -0x70(%rbp), %rdi
callq 0x20f0
leaq -0x90(%rbp), %rdi
callq 0x20f0
incl %r12d
movl %r15d, %ebx
leal 0x1(%r15), %eax
movl %eax, %r15d
leal 0x1(%r12), %eax
pushq $0x2
popq %rcx
cltd
idivl %ecx
leal 0x2(%rax), %ecx
movq %rbx, -0x30(%rbp)
leal (%rbx,%rax,2), %eax
movq %r15, -0xc0(%rbp)
movq %r12, -0x1e8(%rbp)
addl %r15d, %r12d
cmpl %eax, %r12d
movl %eax, -0x20c(%rbp)
cmovlel %eax, %r12d
movq -0x190(%rbp), %rax
movl %ecx, (%rax)
movq -0x1a0(%rbp), %rcx
movl %r12d, (%rcx)
movslq (%rax), %r15
leaq (,%r15,8), %rdi
testq %r15, %r15
pushq $-0x1
popq %rax
cmovsq %rax, %rdi
callq 0x2030
movq -0xb8(%rbp), %rcx
movq %rax, (%rcx)
xorl %r13d, %r13d
leaq 0x176e7(%rip), %r14     # 0x335d1
movslq %r15d, %rax
cmpq %rax, %r13
jge 0x1bf90
movslq %r12d, %rbx
movq %rbx, %r15
shlq $0x5, %r15
leaq 0x8(%r15), %rdi
testl %ebx, %ebx
pushq $-0x1
popq %rax
cmovsq %rax, %rdi
callq 0x2030
movq %rbx, (%rax)
testl %ebx, %ebx
je 0x1bf33
leaq 0x18(%rax), %rcx
movq %rcx, -0x10(%rcx)
andq $0x0, -0x8(%rcx)
movb $0x0, (%rcx)
addq $0x20, %rcx
addq $-0x20, %r15
jne 0x1bf1d
addq $0x8, %rax
movq -0xb8(%rbp), %rcx
movq (%rcx), %rcx
movq %rax, (%rcx,%r13,8)
xorl %r15d, %r15d
xorl %ebx, %ebx
movslq %r12d, %rax
cmpq %rax, %rbx
jge 0x1bf7e
movq -0xb8(%rbp), %rax
movq (%rax), %rax
movq (%rax,%r13,8), %rdi
addq %r15, %rdi
movq %r14, %rsi
callq 0x2350
incq %rbx
movq -0x1a0(%rbp), %rax
movl (%rax), %r12d
addq $0x20, %r15
jmp 0x1bf4a
incq %r13
movq -0x190(%rbp), %rax
movl (%rax), %r15d
jmp 0x1beea
leaq -0x90(%rbp), %r14
movq %r14, %rdi
movq -0xc0(%rbp), %rsi
callq 0x11c73
leaq 0x15db1(%rip), %rsi     # 0x31d5e
leaq -0x70(%rbp), %rdi
movq %r14, %rdx
callq 0x11d49
leaq 0x170d4(%rip), %rdx     # 0x33094
leaq -0x50(%rbp), %rdi
leaq -0x70(%rbp), %rsi
callq 0x11ba1
movq -0x30(%rbp), %rbx
leaq -0x50(%rbp), %rsi
movq 0x20(%rbp), %rdi
callq 0x120e4
leaq -0x50(%rbp), %rdi
callq 0x20f0
leaq -0x70(%rbp), %rdi
callq 0x20f0
leaq -0x90(%rbp), %rdi
callq 0x20f0
movq %r14, %rdi
movq -0xc0(%rbp), %rsi
callq 0x11c73
leaq 0x15d4c(%rip), %rsi     # 0x31d5e
leaq -0x70(%rbp), %rdi
movq %r14, %rdx
callq 0x11d49
leaq 0x1707d(%rip), %rdx     # 0x330a2
leaq -0x50(%rbp), %rdi
leaq -0x70(%rbp), %rsi
callq 0x11ba1
leaq -0x50(%rbp), %rsi
movq 0x20(%rbp), %rdi
callq 0x120e4
leaq -0x50(%rbp), %rdi
callq 0x20f0
leaq -0x70(%rbp), %rdi
callq 0x20f0
leaq -0x90(%rbp), %rdi
callq 0x20f0
leaq -0x168(%rbp), %r14
pushq $0x1
popq %rsi
movq %r14, %rdi
callq 0x11c73
leaq 0x1703a(%rip), %rsi     # 0x330b0
leaq -0x108(%rbp), %rdi
movq %r14, %rdx
callq 0x11d49
leaq 0x17039(%rip), %rdx     # 0x330c5
leaq -0x90(%rbp), %rdi
leaq -0x108(%rbp), %rsi
callq 0x11ba1
leaq -0x148(%rbp), %rdi
movl %ebx, %esi
callq 0x11c73
leaq -0x70(%rbp), %rdi
leaq -0x90(%rbp), %rsi
leaq -0x148(%rbp), %rdx
callq 0x11bca
leaq 0x17002(%rip), %rdx     # 0x330cd
leaq -0x50(%rbp), %rdi
leaq -0x70(%rbp), %rsi
callq 0x11ba1
leaq -0x50(%rbp), %rsi
movq 0x20(%rbp), %rdi
callq 0x120e4
leaq -0x50(%rbp), %rdi
callq 0x20f0
leaq -0x70(%rbp), %rdi
callq 0x20f0
leaq -0x148(%rbp), %rdi
callq 0x20f0
leaq -0x90(%rbp), %rdi
callq 0x20f0
leaq -0x108(%rbp), %rdi
callq 0x20f0
leaq -0x168(%rbp), %rdi
callq 0x20f0
movq %r14, %rdi
xorl %esi, %esi
callq 0x11c73
leaq 0x16fa3(%rip), %rsi     # 0x330db
leaq -0x108(%rbp), %rdi
movq %r14, %rdx
callq 0x11d49
leaq 0x16f77(%rip), %rdx     # 0x330c5
leaq -0x90(%rbp), %rdi
leaq -0x108(%rbp), %rsi
callq 0x11ba1
leaq -0x148(%rbp), %rdi
movl %ebx, %esi
callq 0x11c73
leaq -0x70(%rbp), %rdi
leaq -0x90(%rbp), %rsi
leaq -0x148(%rbp), %rdx
callq 0x11bca
leaq 0x16f63(%rip), %rdx     # 0x330f0
leaq -0x50(%rbp), %rdi
leaq -0x70(%rbp), %rsi
callq 0x11ba1
leaq -0x50(%rbp), %rsi
movq 0x20(%rbp), %rdi
callq 0x120e4
leaq -0x50(%rbp), %rdi
callq 0x20f0
leaq -0x70(%rbp), %rdi
callq 0x20f0
leaq -0x148(%rbp), %rdi
callq 0x20f0
leaq -0x90(%rbp), %rdi
callq 0x20f0
leaq -0x108(%rbp), %rdi
callq 0x20f0
leaq -0x168(%rbp), %rdi
callq 0x20f0
movq -0x1e8(%rbp), %rax
decl %eax
movl %eax, -0x198(%rbp)
movl $0x0, -0x30(%rbp)
leaq -0x230(%rbp), %r12
leaq -0x208(%rbp), %r14
leaq -0x188(%rbp), %rbx
xorl %eax, %eax
movq %rax, -0xc8(%rbp)
cmpl -0x1e8(%rbp), %eax
jge 0x1d40c
leaq -0x70(%rbp), %rdx
leaq -0x50(%rbp), %r15
movq %r15, %rdi
leaq 0x17396(%rip), %rsi     # 0x335d1
movq %rdx, %r13
callq 0x20b0
movq 0x20(%rbp), %rdi
movq %r15, %rsi
callq 0x120e4
movq %r15, %rdi
callq 0x20f0
movq -0xc8(%rbp), %rax
testl %eax, %eax
je 0x1c2af
leal -0x1(%rax), %esi
leaq -0x90(%rbp), %r15
movq %r15, %rdi
callq 0x11c73
movq %r13, %rdi
leaq 0x16d4b(%rip), %rsi     # 0x32fc9
movq %r15, %rdx
callq 0x11d49
leaq -0x50(%rbp), %rdi
movq %r13, %rsi
leaq 0x15b85(%rip), %rdx     # 0x31e19
callq 0x11ba1
movq %r13, %rdi
callq 0x20f0
leaq -0x90(%rbp), %rdi
callq 0x20f0
jmp 0x1c2c1
movq %r15, %rdi
leaq 0x16d0b(%rip), %rsi     # 0x32fc4
movq %r13, %rdx
callq 0x20b0
leaq -0x108(%rbp), %r13
movq %r13, %rdi
movq -0xc8(%rbp), %rsi
callq 0x11c73
leaq -0x90(%rbp), %r15
movq %r15, %rdi
leaq 0x16ce1(%rip), %rsi     # 0x32fc9
movq %r13, %rdx
callq 0x11d49
leaq -0x70(%rbp), %rdi
movq %r15, %rsi
leaq 0x15b1b(%rip), %rdx     # 0x31e19
callq 0x11ba1
movq %r15, %rdi
callq 0x20f0
leaq -0x108(%rbp), %rdi
callq 0x20f0
movl -0x198(%rbp), %esi
movq -0xc8(%rbp), %rax
cmpl %esi, %eax
jge 0x1c36b
leal 0x1(%rax), %esi
leaq -0x168(%rbp), %r13
movq %r13, %rdi
callq 0x11c73
leaq -0x108(%rbp), %r15
movq %r15, %rdi
leaq 0x16c7e(%rip), %rsi     # 0x32fc9
movq %r13, %rdx
callq 0x11d49
leaq -0x90(%rbp), %rdi
movq %r15, %rsi
leaq 0x15ab5(%rip), %rdx     # 0x31e19
callq 0x11ba1
jmp 0x1c3a9
leaq -0x168(%rbp), %r13
movq %r13, %rdi
callq 0x11c73
leaq -0x108(%rbp), %r15
movq %r15, %rdi
leaq 0x16c3e(%rip), %rsi     # 0x32fc9
movq %r13, %rdx
callq 0x11d49
leaq -0x90(%rbp), %rdi
movq %r15, %rsi
leaq 0x15a75(%rip), %rdx     # 0x31e19
callq 0x11ba1
movq %r15, %rdi
callq 0x20f0
leaq -0x168(%rbp), %rdi
callq 0x20f0
leaq -0x278(%rbp), %r15
movq %r15, %rdi
leaq 0x16d36(%rip), %rsi     # 0x33104
leaq -0x90(%rbp), %rdx
callq 0x11cd3
leaq -0x250(%rbp), %r13
movq %r13, %rdi
movq %r15, %rsi
leaq 0x14826(%rip), %rdx     # 0x30c14
callq 0x11ba1
leaq -0x148(%rbp), %r15
movq %r15, %rdi
movq %r13, %rsi
leaq -0x70(%rbp), %rdx
callq 0x11d77
leaq -0x168(%rbp), %r13
movq %r13, %rdi
movq %r15, %rsi
leaq 0x147f7(%rip), %rdx     # 0x30c14
callq 0x11ba1
leaq -0x108(%rbp), %r15
movq %r15, %rdi
movq %r13, %rsi
leaq -0x50(%rbp), %rdx
callq 0x11d77
movq 0x20(%rbp), %rdi
movq %r15, %rsi
callq 0x120e4
movq %r15, %rdi
callq 0x20f0
movq %r13, %rdi
callq 0x20f0
leaq -0x148(%rbp), %rdi
callq 0x20f0
leaq -0x250(%rbp), %rdi
callq 0x20f0
leaq -0x278(%rbp), %rdi
callq 0x20f0
movq %r13, %rdi
movl -0x30(%rbp), %esi
callq 0x11c73
movq %r15, %rdi
leaq 0x16cb1(%rip), %rsi     # 0x3313e
movq %r13, %rdx
callq 0x11d49
movq %r13, %rdi
callq 0x20f0
leaq -0x148(%rbp), %r15
movq %r15, %rdi
movl -0x30(%rbp), %esi
callq 0x11c73
movq %r13, %rdi
leaq 0x16b50(%rip), %rsi     # 0x33009
movq %r15, %rdx
callq 0x11d49
movq %r15, %rdi
callq 0x20f0
leaq -0x250(%rbp), %r13
movq %r13, %rdi
movl -0x30(%rbp), %esi
callq 0x11c73
movq %r15, %rdi
leaq 0x16b2e(%rip), %rsi     # 0x33013
movq %r13, %rdx
callq 0x11d49
movq %r13, %rdi
callq 0x20f0
leaq -0x278(%rbp), %r15
movq %r15, %rdi
movl -0x30(%rbp), %esi
callq 0x11c73
movq %r13, %rdi
leaq 0x16c37(%rip), %rsi     # 0x33148
movq %r15, %rdx
callq 0x11d49
movq %r15, %rdi
callq 0x20f0
leaq -0x320(%rbp), %r13
movq %r13, %rdi
movl -0x30(%rbp), %esi
callq 0x11c73
movq %r15, %rdi
leaq 0x16c16(%rip), %rsi     # 0x33153
movq %r13, %rdx
callq 0x11d49
movq %r13, %rdi
callq 0x20f0
leaq -0x128(%rbp), %r15
movq %r15, %rdi
movl -0x30(%rbp), %esi
callq 0x11c73
movq %r13, %rdi
leaq 0x16ab5(%rip), %rsi     # 0x3301e
movq %r15, %rdx
callq 0x11d49
movq %r15, %rdi
callq 0x20f0
leaq -0x300(%rbp), %r15
movq %r15, %rdi
leaq 0x166cf(%rip), %rsi     # 0x32c59
leaq -0x108(%rbp), %rdx
callq 0x11cd3
leaq -0x298(%rbp), %r13
movq %r13, %rdi
movq %r15, %rsi
leaq 0x1604c(%rip), %rdx     # 0x325f6
callq 0x11ba1
leaq -0x2b8(%rbp), %r15
movq %r15, %rdi
movq %r13, %rsi
leaq -0x168(%rbp), %rdx
callq 0x11d77
leaq -0x2d8(%rbp), %r13
movq %r13, %rdi
movq %r15, %rsi
leaq 0x1601a(%rip), %rdx     # 0x325f6
callq 0x11ba1
leaq -0x1e0(%rbp), %r15
movq %r15, %rdi
movq %r13, %rsi
leaq -0x250(%rbp), %rdx
callq 0x11d77
leaq -0x1c0(%rbp), %r13
movq %r13, %rdi
movq %r15, %rsi
leaq 0x15fe8(%rip), %rdx     # 0x325f6
callq 0x11ba1
leaq -0xe8(%rbp), %r15
movq %r15, %rdi
movq %r13, %rsi
leaq -0x320(%rbp), %rdx
callq 0x11d77
leaq -0xb0(%rbp), %r13
movq %r13, %rdi
movq %r15, %rsi
leaq 0x15fb6(%rip), %rdx     # 0x325f6
callq 0x11ba1
movq %r12, %rdi
movq %r13, %rsi
leaq -0x148(%rbp), %rdx
callq 0x11d77
movq %r14, %rdi
movq %r12, %rsi
leaq 0x15f92(%rip), %rdx     # 0x325f6
callq 0x11ba1
movq %rbx, %rdi
movq %r14, %rsi
leaq -0x278(%rbp), %rdx
callq 0x11d77
leaq -0x128(%rbp), %r15
movq %r15, %rdi
movq %rbx, %rsi
leaq 0x17052(%rip), %rdx     # 0x336e1
callq 0x11ba1
movq 0x20(%rbp), %rdi
movq %r15, %rsi
callq 0x120e4
movq %r15, %rdi
callq 0x20f0
movq %rbx, %rdi
callq 0x20f0
movq %r14, %rdi
callq 0x20f0
movq %r12, %rdi
callq 0x20f0
leaq -0xb0(%rbp), %rdi
callq 0x20f0
leaq -0xe8(%rbp), %rdi
callq 0x20f0
leaq -0x1c0(%rbp), %rdi
callq 0x20f0
leaq -0x1e0(%rbp), %rdi
callq 0x20f0
leaq -0x2d8(%rbp), %rdi
callq 0x20f0
leaq -0x2b8(%rbp), %rdi
callq 0x20f0
leaq -0x298(%rbp), %rdi
callq 0x20f0
leaq -0x300(%rbp), %rdi
callq 0x20f0
leaq -0x340(%rbp), %r15
movq %r15, %rdi
leaq 0x15e7e(%rip), %rsi     # 0x325af
leaq -0x108(%rbp), %rdx
callq 0x11cd3
leaq -0x360(%rbp), %r13
movq %r13, %rdi
movq %r15, %rsi
leaq 0x16a0e(%rip), %rdx     # 0x3315f
callq 0x11ba1
leaq -0x380(%rbp), %r15
movq %r15, %rdi
movq %r13, %rsi
leaq -0x90(%rbp), %rdx
callq 0x11d77
leaq -0x3a0(%rbp), %r13
movq %r13, %rdi
movq %r15, %rsi
leaq 0x15e73(%rip), %rdx     # 0x325f6
callq 0x11ba1
leaq -0x300(%rbp), %r15
movq %r15, %rdi
movq %r13, %rsi
leaq -0x70(%rbp), %rdx
callq 0x11d77
leaq -0x298(%rbp), %r13
movq %r13, %rdi
movq %r15, %rsi
leaq 0x15e44(%rip), %rdx     # 0x325f6
callq 0x11ba1
leaq -0x2b8(%rbp), %r15
movq %r15, %rdi
movq %r13, %rsi
leaq -0x50(%rbp), %rdx
callq 0x11d77
leaq -0x2d8(%rbp), %r13
movq %r13, %rdi
movq %r15, %rsi
leaq 0x16985(%rip), %rdx     # 0x33166
callq 0x11ba1
leaq -0x1e0(%rbp), %r15
movq %r15, %rdi
movq %r13, %rsi
leaq 0x16971(%rip), %rdx     # 0x3316b
callq 0x11ba1
leaq -0x1c0(%rbp), %r13
movq %r13, %rdi
movq %r15, %rsi
leaq -0x90(%rbp), %rdx
callq 0x11d77
leaq -0xe8(%rbp), %r15
movq %r15, %rdi
movq %r13, %rsi
leaq 0x15dca(%rip), %rdx     # 0x325f6
callq 0x11ba1
leaq -0xb0(%rbp), %r13
movq %r13, %rdi
movq %r15, %rsi
leaq -0x70(%rbp), %rdx
callq 0x11d77
movq %r12, %rdi
movq %r13, %rsi
leaq 0x15da2(%rip), %rdx     # 0x325f6
callq 0x11ba1
movq %r14, %rdi
movq %r12, %rsi
leaq -0x50(%rbp), %rdx
callq 0x11d77
movq %rbx, %rdi
movq %r14, %rsi
leaq 0x16e00(%rip), %rdx     # 0x33675
callq 0x11ba1
leaq -0x128(%rbp), %r15
movq %r15, %rdi
movq %rbx, %rsi
leaq 0x16e53(%rip), %rdx     # 0x336e1
callq 0x11ba1
movq 0x20(%rbp), %rdi
movq %r15, %rsi
callq 0x120e4
movq %r15, %rdi
callq 0x20f0
movq %rbx, %rdi
callq 0x20f0
movq %r14, %rdi
callq 0x20f0
movq %r12, %rdi
callq 0x20f0
leaq -0xb0(%rbp), %rdi
callq 0x20f0
leaq -0xe8(%rbp), %rdi
callq 0x20f0
leaq -0x1c0(%rbp), %r13
movq %r13, %rdi
callq 0x20f0
leaq -0x1e0(%rbp), %r15
movq %r15, %rdi
callq 0x20f0
leaq -0x2d8(%rbp), %rdi
callq 0x20f0
leaq -0x2b8(%rbp), %rdi
callq 0x20f0
leaq -0x298(%rbp), %rdi
callq 0x20f0
leaq -0x300(%rbp), %rdi
callq 0x20f0
leaq -0x3a0(%rbp), %rdi
callq 0x20f0
leaq -0x380(%rbp), %rdi
callq 0x20f0
leaq -0x360(%rbp), %rdi
callq 0x20f0
leaq -0x340(%rbp), %rdi
callq 0x20f0
movq %r15, %rdi
leaq 0x15c50(%rip), %rsi     # 0x325af
leaq -0x168(%rbp), %rdx
callq 0x11cd3
movq %r13, %rdi
movq %r15, %rsi
leaq 0x167f7(%rip), %rdx     # 0x3316f
callq 0x11ba1
leaq -0xe8(%rbp), %r15
movq %r15, %rdi
movq %r13, %rsi
leaq -0x90(%rbp), %rdx
callq 0x11d77
leaq -0xb0(%rbp), %r13
movq %r13, %rdi
movq %r15, %rsi
leaq 0x167cd(%rip), %rdx     # 0x33177
callq 0x11ba1
movq %r12, %rdi
movq %r13, %rsi
leaq -0x70(%rbp), %rdx
callq 0x11d77
movq %r14, %rdi
movq %r12, %rsi
leaq 0x1625a(%rip), %rdx     # 0x32c25
callq 0x11ba1
movq %rbx, %rdi
movq %r14, %rsi
leaq -0x50(%rbp), %rdx
callq 0x11d77
leaq -0x128(%rbp), %r15
movq %r15, %rdi
movq %rbx, %rsi
leaq 0x15ac6(%rip), %rdx     # 0x324b9
callq 0x11ba1
movq 0x20(%rbp), %rdi
movq %r15, %rsi
callq 0x120e4
movq %r15, %rdi
callq 0x20f0
movq %rbx, %rdi
callq 0x20f0
movq %r14, %rdi
callq 0x20f0
movq %r12, %rdi
callq 0x20f0
leaq -0xb0(%rbp), %rdi
callq 0x20f0
leaq -0xe8(%rbp), %rdi
callq 0x20f0
leaq -0x1c0(%rbp), %r13
movq %r13, %rdi
callq 0x20f0
leaq -0x1e0(%rbp), %r15
movq %r15, %rdi
callq 0x20f0
movq %r15, %rdi
leaq 0x15b4b(%rip), %rsi     # 0x325af
leaq -0x148(%rbp), %rdx
callq 0x11cd3
movq %r13, %rdi
movq %r15, %rsi
leaq 0x157d6(%rip), %rdx     # 0x32253
callq 0x11ba1
leaq -0xe8(%rbp), %r15
movq %r15, %rdi
movq %r13, %rsi
leaq -0x90(%rbp), %rdx
callq 0x11d77
leaq -0xb0(%rbp), %r13
movq %r13, %rdi
movq %r15, %rsi
leaq 0x16a6b(%rip), %rdx     # 0x3351a
callq 0x11ba1
movq %r12, %rdi
movq %r13, %rsi
leaq -0x70(%rbp), %rdx
callq 0x11d77
movq %r14, %rdi
movq %r12, %rsi
leaq 0x16155(%rip), %rdx     # 0x32c25
callq 0x11ba1
movq %rbx, %rdi
movq %r14, %rsi
leaq -0x50(%rbp), %rdx
callq 0x11d77
leaq -0x128(%rbp), %r15
movq %r15, %rdi
movq %rbx, %rsi
leaq 0x16be8(%rip), %rdx     # 0x336e0
callq 0x11ba1
movq 0x20(%rbp), %rdi
movq %r15, %rsi
callq 0x120e4
movq %r15, %rdi
callq 0x20f0
movq %rbx, %rdi
callq 0x20f0
movq %r14, %rdi
callq 0x20f0
movq %r12, %rdi
callq 0x20f0
leaq -0xb0(%rbp), %rdi
callq 0x20f0
leaq -0xe8(%rbp), %rdi
callq 0x20f0
leaq -0x1c0(%rbp), %r13
movq %r13, %rdi
callq 0x20f0
leaq -0x1e0(%rbp), %r15
movq %r15, %rdi
callq 0x20f0
movq %r15, %rdi
leaq 0x15a46(%rip), %rsi     # 0x325af
leaq -0x250(%rbp), %rdx
callq 0x11cd3
movq %r13, %rdi
movq %r15, %rsi
leaq 0x165fb(%rip), %rdx     # 0x3317d
callq 0x11ba1
leaq -0xe8(%rbp), %r15
movq %r15, %rdi
movq %r13, %rsi
leaq -0x90(%rbp), %rdx
callq 0x11d77
leaq -0xb0(%rbp), %r13
movq %r13, %rdi
movq %r15, %rsi
leaq 0x165d0(%rip), %rdx     # 0x33184
callq 0x11ba1
movq %r12, %rdi
movq %r13, %rsi
leaq -0x70(%rbp), %rdx
callq 0x11d77
movq %r14, %rdi
movq %r12, %rsi
leaq 0x165b0(%rip), %rdx     # 0x33185
callq 0x11ba1
movq %rbx, %rdi
movq %r14, %rsi
leaq -0x50(%rbp), %rdx
callq 0x11d77
leaq -0x128(%rbp), %r15
movq %r15, %rdi
movq %rbx, %rsi
leaq 0x16ae4(%rip), %rdx     # 0x336e1
callq 0x11ba1
movq 0x20(%rbp), %rdi
movq %r15, %rsi
callq 0x120e4
movq %r15, %rdi
callq 0x20f0
movq %rbx, %rdi
callq 0x20f0
movq %r14, %rdi
callq 0x20f0
movq %r12, %rdi
callq 0x20f0
leaq -0xb0(%rbp), %rdi
callq 0x20f0
leaq -0xe8(%rbp), %rdi
callq 0x20f0
leaq -0x1c0(%rbp), %r13
movq %r13, %rdi
callq 0x20f0
leaq -0x1e0(%rbp), %r15
movq %r15, %rdi
callq 0x20f0
movq %r15, %rdi
leaq 0x15941(%rip), %rsi     # 0x325af
leaq -0x278(%rbp), %rdx
callq 0x11cd3
movq %r13, %rdi
movq %r15, %rsi
leaq 0x155cc(%rip), %rdx     # 0x32253
callq 0x11ba1
leaq -0xe8(%rbp), %r15
movq %r15, %rdi
movq %r13, %rsi
leaq -0x90(%rbp), %rdx
callq 0x11d77
leaq -0xb0(%rbp), %r13
movq %r13, %rdi
movq %r15, %rsi
leaq 0x164d1(%rip), %rdx     # 0x3318a
callq 0x11ba1
movq %r12, %rdi
movq %r13, %rsi
leaq -0x70(%rbp), %rdx
callq 0x11d77
movq %r14, %rdi
movq %r12, %rsi
leaq 0x164af(%rip), %rdx     # 0x33189
callq 0x11ba1
movq %rbx, %rdi
movq %r14, %rsi
leaq -0x50(%rbp), %rdx
callq 0x11d77
leaq -0x128(%rbp), %r15
movq %r15, %rdi
movq %rbx, %rsi
leaq 0x169de(%rip), %rdx     # 0x336e0
callq 0x11ba1
movq 0x20(%rbp), %rdi
movq %r15, %rsi
callq 0x120e4
movq %r15, %rdi
callq 0x20f0
movq %rbx, %rdi
callq 0x20f0
movq %r14, %rdi
callq 0x20f0
movq %r12, %rdi
callq 0x20f0
leaq -0xb0(%rbp), %rdi
callq 0x20f0
leaq -0xe8(%rbp), %rdi
callq 0x20f0
leaq -0x1c0(%rbp), %rdi
callq 0x20f0
leaq -0x1e0(%rbp), %rdi
callq 0x20f0
movq %rbx, %rdi
movl -0x30(%rbp), %esi
callq 0x11c73
movq %r15, %rdi
leaq 0x162b1(%rip), %rsi     # 0x33029
movq %rbx, %rdx
callq 0x11d49
movq %rbx, %rdi
callq 0x20f0
leaq -0xe8(%rbp), %r15
movq %r15, %rdi
movq -0xc0(%rbp), %rsi
callq 0x11c73
movq %r13, %rdi
leaq 0x163e9(%rip), %rsi     # 0x33191
movq %r15, %rdx
callq 0x11d49
movq %r12, %rdi
movq %r13, %rsi
leaq 0x15832(%rip), %rdx     # 0x325ef
callq 0x11ba1
movq %r14, %rdi
movq %r12, %rsi
leaq -0x128(%rbp), %rdx
callq 0x11d77
movq %rbx, %rdi
movq %r14, %rsi
leaq 0x16900(%rip), %rdx     # 0x336e1
callq 0x11ba1
movq 0x20(%rbp), %rdi
movq %rbx, %rsi
callq 0x120e4
movq %rbx, %rdi
callq 0x20f0
movq %r14, %rdi
callq 0x20f0
movq %r12, %rdi
callq 0x20f0
leaq -0xb0(%rbp), %rdi
callq 0x20f0
leaq -0xe8(%rbp), %rdi
callq 0x20f0
movq %rbx, %rdi
leaq 0x1636b(%rip), %rsi     # 0x33197
movq %r14, %rdx
callq 0x20b0
movq 0x20(%rbp), %rdi
movq %rbx, %rsi
callq 0x120e4
movq %rbx, %rdi
callq 0x20f0
movq %rbx, %rdi
leaq 0x16357(%rip), %rsi     # 0x331a9
movq %r14, %rdx
callq 0x20b0
movq 0x20(%rbp), %rdi
movq %rbx, %rsi
callq 0x120e4
movq %rbx, %rdi
callq 0x20f0
leaq -0xb0(%rbp), %r15
movq %r15, %rdi
leaq 0x15752(%rip), %rsi     # 0x325d1
leaq -0x108(%rbp), %rdx
callq 0x11cd3
movq %r12, %rdi
movq %r15, %rsi
leaq 0x16320(%rip), %rdx     # 0x331b8
callq 0x11ba1
movq %r14, %rdi
movq %r12, %rsi
leaq -0x128(%rbp), %rdx
callq 0x11d77
movq %rbx, %rdi
movq %r14, %rsi
leaq 0x16302(%rip), %rdx     # 0x331be
callq 0x11ba1
movq 0x20(%rbp), %rdi
movq %rbx, %rsi
callq 0x120e4
movq %rbx, %rdi
callq 0x20f0
movq %r14, %rdi
callq 0x20f0
movq %r12, %rdi
callq 0x20f0
movq %r15, %rdi
callq 0x20f0
movq %r15, %rdi
leaq 0x156da(%rip), %rsi     # 0x325d1
leaq -0x168(%rbp), %rdx
callq 0x11cd3
movq %r12, %rdi
movq %r15, %rsi
leaq 0x162a8(%rip), %rdx     # 0x331b8
callq 0x11ba1
movq %r14, %rdi
movq %r12, %rsi
leaq -0x128(%rbp), %rdx
callq 0x11d77
movq %rbx, %rdi
movq %r14, %rsi
leaq 0x16291(%rip), %rdx     # 0x331c5
callq 0x11ba1
movq 0x20(%rbp), %rdi
movq %rbx, %rsi
callq 0x120e4
movq %rbx, %rdi
callq 0x20f0
movq %r14, %rdi
callq 0x20f0
movq %r12, %rdi
callq 0x20f0
movq %r15, %rdi
callq 0x20f0
movq %r15, %rdi
leaq 0x15662(%rip), %rsi     # 0x325d1
leaq -0x250(%rbp), %rdx
callq 0x11cd3
movq %r12, %rdi
movq %r15, %rsi
leaq 0x16231(%rip), %rdx     # 0x331b9
callq 0x11ba1
movq %r14, %rdi
movq %r12, %rsi
leaq -0x128(%rbp), %rdx
callq 0x11d77
movq %rbx, %rdi
movq %r14, %rsi
leaq 0x16227(%rip), %rdx     # 0x331d3
callq 0x11ba1
movq 0x20(%rbp), %rdi
movq %rbx, %rsi
callq 0x120e4
movq %rbx, %rdi
callq 0x20f0
movq %r14, %rdi
callq 0x20f0
movq %r12, %rdi
callq 0x20f0
movq %r15, %rdi
callq 0x20f0
movq %r15, %rdi
leaq 0x155ea(%rip), %rsi     # 0x325d1
leaq -0x278(%rbp), %rdx
callq 0x11cd3
movq %r12, %rdi
movq %r15, %rsi
leaq 0x161ba(%rip), %rdx     # 0x331ba
callq 0x11ba1
movq %r14, %rdi
movq %r12, %rsi
leaq -0x128(%rbp), %rdx
callq 0x11d77
movq %rbx, %rdi
movq %r14, %rsi
leaq 0x161bd(%rip), %rdx     # 0x331e1
callq 0x11ba1
movq 0x20(%rbp), %rdi
movq %rbx, %rsi
callq 0x120e4
movq %rbx, %rdi
callq 0x20f0
movq %r14, %rdi
callq 0x20f0
movq %r12, %rdi
callq 0x20f0
movq %r15, %rdi
callq 0x20f0
movq %r15, %rdi
leaq 0x15572(%rip), %rsi     # 0x325d1
leaq -0x148(%rbp), %rdx
callq 0x11cd3
movq %r12, %rdi
movq %r15, %rsi
leaq 0x16141(%rip), %rdx     # 0x331b9
callq 0x11ba1
movq %r14, %rdi
movq %r12, %rsi
leaq -0x128(%rbp), %rdx
callq 0x11d77
movq %rbx, %rdi
movq %r14, %rsi
leaq 0x16157(%rip), %rdx     # 0x331f3
callq 0x11ba1
movq 0x20(%rbp), %rdi
movq %rbx, %rsi
callq 0x120e4
movq %rbx, %rdi
callq 0x20f0
movq %r14, %rdi
callq 0x20f0
movq %r12, %rdi
callq 0x20f0
leaq -0xb0(%rbp), %rdi
callq 0x20f0
cmpb $0x0, 0x18(%rbp)
jne 0x1d11b
movq %r14, %rdi
leaq 0x16124(%rip), %rsi     # 0x33205
leaq -0x128(%rbp), %rdx
callq 0x11cd3
movq %rbx, %rdi
movq %r14, %rsi
leaq 0x160c4(%rip), %rdx     # 0x331be
callq 0x11ba1
movq 0x20(%rbp), %rdi
movq %rbx, %rsi
callq 0x120e4
movq %rbx, %rdi
callq 0x20f0
movq %r14, %rdi
callq 0x20f0
movq %rbx, %rdi
leaq 0x160f2(%rip), %rsi     # 0x33217
movq %r14, %rdx
callq 0x20b0
movq 0x20(%rbp), %rdi
movq %rbx, %rsi
callq 0x120e4
movq %rbx, %rdi
callq 0x20f0
leaq -0x2d8(%rbp), %r15
movq %r15, %rdi
leaq 0x15482(%rip), %rsi     # 0x325d4
leaq -0x128(%rbp), %rdx
callq 0x11cd3
leaq -0x1e0(%rbp), %rdi
movq %r15, %rsi
leaq 0x1531b(%rip), %rdx     # 0x3248a
callq 0x11ba1
leaq -0x2b8(%rbp), %r15
movq %r15, %rdi
movq -0xc0(%rbp), %rsi
callq 0x11c73
leaq -0x1c0(%rbp), %r13
movq %r13, %rdi
leaq -0x1e0(%rbp), %rsi
movq %r15, %rdx
callq 0x11bca
leaq -0xe8(%rbp), %r15
movq %r15, %rdi
movq %r13, %rsi
leaq 0x1606c(%rip), %rdx     # 0x33223
callq 0x11ba1
leaq -0xb0(%rbp), %r13
movq %r13, %rdi
movq %r15, %rsi
leaq -0x128(%rbp), %rdx
callq 0x11d77
movq %r12, %rdi
movq %r13, %rsi
leaq 0x152a8(%rip), %rdx     # 0x3248a
callq 0x11ba1
leaq -0x298(%rbp), %r15
movq %r15, %rdi
movq -0xc0(%rbp), %rsi
callq 0x11c73
movq %r14, %rdi
movq %r12, %rsi
movq %r15, %rdx
callq 0x11bca
movq %rbx, %rdi
movq %r14, %rsi
leaq 0x16011(%rip), %rdx     # 0x33229
callq 0x11ba1
movq 0x20(%rbp), %rdi
movq %rbx, %rsi
callq 0x120e4
movq %rbx, %rdi
callq 0x20f0
movq %r14, %rdi
callq 0x20f0
leaq -0x298(%rbp), %rdi
callq 0x20f0
movq %r12, %rdi
callq 0x20f0
leaq -0xb0(%rbp), %rdi
callq 0x20f0
leaq -0xe8(%rbp), %rdi
callq 0x20f0
leaq -0x1c0(%rbp), %rdi
callq 0x20f0
leaq -0x2b8(%rbp), %rdi
callq 0x20f0
leaq -0x1e0(%rbp), %rdi
callq 0x20f0
leaq -0x2d8(%rbp), %rdi
callq 0x20f0
movq %rbx, %rdi
leaq 0x15f9e(%rip), %rsi     # 0x3323d
movq %r14, %rdx
callq 0x20b0
movq 0x20(%rbp), %rdi
movq %rbx, %rsi
callq 0x120e4
movq %rbx, %rdi
callq 0x20f0
leaq -0x1c0(%rbp), %r15
movq %r15, %rdi
leaq 0x152e3(%rip), %rsi     # 0x325af
leaq -0x320(%rbp), %rdx
callq 0x11cd3
leaq -0xe8(%rbp), %r13
movq %r13, %rdi
movq %r15, %rsi
leaq 0x15f55(%rip), %rdx     # 0x33241
callq 0x11ba1
leaq -0xb0(%rbp), %r15
movq %r15, %rdi
movq %r13, %rsi
leaq -0x278(%rbp), %rdx
callq 0x11d77
movq %r12, %rdi
movq %r15, %rsi
leaq 0x15d52(%rip), %rdx     # 0x33069
callq 0x11ba1
movq %r14, %rdi
movq %r12, %rsi
leaq -0x148(%rbp), %rdx
callq 0x11d77
movq %rbx, %rdi
movq %r14, %rsi
leaq 0x163a6(%rip), %rdx     # 0x336e1
callq 0x11ba1
movq 0x20(%rbp), %rdi
movq %rbx, %rsi
callq 0x120e4
movq %rbx, %rdi
callq 0x20f0
movq %r14, %rdi
callq 0x20f0
movq %r12, %rdi
callq 0x20f0
leaq -0xb0(%rbp), %rdi
callq 0x20f0
leaq -0xe8(%rbp), %rdi
callq 0x20f0
leaq -0x1c0(%rbp), %rdi
callq 0x20f0
leaq -0x128(%rbp), %rdi
callq 0x20f0
leaq -0x320(%rbp), %rdi
callq 0x20f0
leaq -0x278(%rbp), %rdi
callq 0x20f0
leaq -0x250(%rbp), %rdi
callq 0x20f0
leaq -0x148(%rbp), %rdi
callq 0x20f0
leaq -0x168(%rbp), %rdi
callq 0x20f0
leaq -0x108(%rbp), %rdi
callq 0x20f0
leaq -0x90(%rbp), %rdi
callq 0x20f0
leaq -0x70(%rbp), %rdi
callq 0x20f0
leaq -0x50(%rbp), %rdi
callq 0x20f0
movq -0xc8(%rbp), %rax
addl $0x2, %eax
incl -0x30(%rbp)
jmp 0x1c216
movslq -0xc0(%rbp), %rax
movq %rax, -0x2e0(%rbp)
movq $0x0, -0x258(%rbp)
leaq -0x90(%rbp), %rbx
xorl %r15d, %r15d
movq $0x0, -0x198(%rbp)
movq -0x190(%rbp), %rax
movslq (%rax), %r12
leaq -0x2(%r12), %rax
movq %rax, -0x30(%rbp)
movq -0x1a0(%rbp), %rax
movslq (%rax), %r13
movq %r13, %r14
shlq $0x5, %r14
leaq 0x8(%r14), %rdi
testq %r13, %r13
pushq $-0x1
popq %rax
cmovsq %rax, %rdi
callq 0x2030
leaq 0x8(%rax), %rcx
movq %r13, (%rax)
cmpq -0x30(%rbp), %r15
jge 0x1d666
testl %r13d, %r13d
je 0x1d4a5
addq $0x18, %rax
shlq $0x5, %r13
movq %rax, -0x10(%rax)
andq $0x0, -0x8(%rax)
movb $0x0, (%rax)
addq $0x20, %rax
addq $-0x20, %r13
jne 0x1d48f
movq -0xb8(%rbp), %rax
movq (%rax), %rax
movq %r15, -0x30(%rbp)
movq %rcx, (%rax,%r15,8)
xorl %r14d, %r14d
leaq -0x148(%rbp), %r12
movq -0x258(%rbp), %r13
cmpq %r14, %r13
je 0x1d4fb
movq -0xb8(%rbp), %rax
movq (%rax), %rax
movq -0x30(%rbp), %rcx
movq (%rax,%rcx,8), %rdi
addq %r14, %rdi
leaq 0x160e8(%rip), %rsi     # 0x335d1
callq 0x2350
leaq -0x148(%rbp), %r12
addq $0x20, %r14
jmp 0x1d4c8
movq %r13, %r14
xorl %r15d, %r15d
cmpq -0x2e0(%rbp), %r15
jg 0x1d64a
movq -0x198(%rbp), %rax
addl %r15d, %eax
movq -0x1a0(%rbp), %rcx
cmpl %eax, (%rcx)
jle 0x1d64a
movq %rbx, %r13
leaq -0x40(%rbp), %rax
movq %rax, -0x50(%rbp)
andq $0x0, -0x48(%rbp)
movb $0x0, -0x40(%rbp)
movq %r12, %rbx
movq %r12, %rdi
movq -0x30(%rbp), %rsi
callq 0x11c73
leaq -0x168(%rbp), %r12
movq %r12, %rdi
leaq 0x15ace(%rip), %rsi     # 0x33029
movq %rbx, %rdx
callq 0x11d49
leaq -0x108(%rbp), %rdi
movq %r12, %rsi
leaq 0x14f16(%rip), %rdx     # 0x3248a
callq 0x11ba1
leaq -0x250(%rbp), %rbx
movq %r15, %rsi
movq %rbx, %r15
movq %rbx, %rdi
movq %rsi, -0xc8(%rbp)
callq 0x11c73
movq %r13, %rdi
leaq -0x108(%rbp), %rsi
movq %r15, %rdx
callq 0x11bca
leaq -0x70(%rbp), %r15
movq %r15, %rdi
movq %r13, %rsi
leaq 0x14861(%rip), %rdx     # 0x31e19
callq 0x11ba1
movq %r13, %rbx
leaq -0x50(%rbp), %r13
movq %r13, %rdi
movq %r15, %rsi
callq 0x2210
movq %r15, %rdi
callq 0x20f0
movq %rbx, %rdi
callq 0x20f0
leaq -0x250(%rbp), %rdi
callq 0x20f0
leaq -0x108(%rbp), %rdi
callq 0x20f0
movq %r12, %rdi
callq 0x20f0
leaq -0x148(%rbp), %rdi
callq 0x20f0
movq -0xb8(%rbp), %rax
movq (%rax), %rax
movq -0x30(%rbp), %rcx
movq (%rax,%rcx,8), %rdi
addq %r14, %rdi
movq %r13, %rsi
callq 0x2130
movq %r13, %rdi
callq 0x20f0
movq -0xc8(%rbp), %r15
incq %r15
addq $0x20, %r14
leaq -0x148(%rbp), %r12
jmp 0x1d501
movq -0x30(%rbp), %r15
incq %r15
addq $0x2, -0x198(%rbp)
addq $0x40, -0x258(%rbp)
jmp 0x1d43a
testl %r13d, %r13d
je 0x1d685
addq $0x18, %rax
movq %rax, -0x10(%rax)
andq $0x0, -0x8(%rax)
movb $0x0, (%rax)
addq $0x20, %rax
addq $-0x20, %r14
jne 0x1d66f
movq -0xb8(%rbp), %rax
movq (%rax), %rax
movq %rcx, -0x10(%rax,%r12,8)
movslq -0x1e8(%rbp), %rax
movq %rax, -0x30(%rbp)
xorl %ebx, %ebx
leaq -0x70(%rbp), %r14
leaq -0x50(%rbp), %r12
xorl %r15d, %r15d
xorl %r13d, %r13d
cmpq -0x30(%rbp), %r13
jge 0x1d711
movq %r14, %rdi
movl %ebx, %esi
callq 0x11c73
movq %r12, %rdi
leaq 0x15955(%rip), %rsi     # 0x3301e
movq %r14, %rdx
callq 0x11d49
movq -0xb8(%rbp), %rax
movq (%rax), %rax
movq -0x190(%rbp), %rcx
movslq (%rcx), %rcx
movq -0x10(%rax,%rcx,8), %rdi
addq %r15, %rdi
movq %r12, %rsi
callq 0x2210
movq %r12, %rdi
callq 0x20f0
movq %r14, %rdi
callq 0x20f0
addq $0x2, %r13
addq $0x40, %r15
incl %ebx
jmp 0x1d6af
leaq -0x50(%rbp), %rbx
movq -0xc0(%rbp), %rax
movq 0x10(%rbp), %r14
movl -0x20c(%rbp), %r15d
movl %eax, -0x50(%rbp)
cmpl %r15d, %eax
jge 0x1d742
movq %r14, %rdi
movq %rbx, %rsi
callq 0x279ac
movl -0x50(%rbp), %eax
addl $0x2, %eax
jmp 0x1d727
addq $0x378, %rsp            # imm = 0x378
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0x1d800
jmp 0x1d800
jmp 0x1d874
jmp 0x1d874
jmp 0x1d86a
jmp 0x1d86a
jmp 0x1d800
jmp 0x1d800
jmp 0x1d874
jmp 0x1d874
jmp 0x1d86a
jmp 0x1d86a
jmp 0x1d79c
jmp 0x1d7aa
jmp 0x1d7b8
jmp 0x1d7c9
jmp 0x1d7da
jmp 0x1d7f5
movq %rax, %rbx
leaq -0x50(%rbp), %rdi
callq 0x20f0
jmp 0x1d7ad
movq %rax, %rbx
leaq -0x70(%rbp), %rdi
callq 0x20f0
jmp 0x1d7bb
movq %rax, %rbx
leaq -0x148(%rbp), %rdi
callq 0x20f0
jmp 0x1d7cc
movq %rax, %rbx
leaq -0x90(%rbp), %rdi
callq 0x20f0
jmp 0x1d7dd
movq %rax, %rbx
leaq -0x108(%rbp), %rdi
callq 0x20f0
leaq -0x168(%rbp), %rdi
jmp 0x1dfc7
movq %rax, %rbx
jmp 0x1d7e9
jmp 0x1d800
jmp 0x1d874
jmp 0x1d86a
movq %rax, %rbx
leaq -0x50(%rbp), %rdi
callq 0x20f0
jmp 0x1d877
jmp 0x1d874
jmp 0x1d86a
jmp 0x1deee
jmp 0x1dac8
movq %rax, %rbx
leaq -0x188(%rbp), %rdi
callq 0x20f0
jmp 0x1d830
movq %rax, %rbx
leaq -0x208(%rbp), %rdi
jmp 0x1db12
jmp 0x1d83e
movq %rax, %rbx
jmp 0x1decc
jmp 0x1d848
movq %rax, %rbx
leaq -0x108(%rbp), %rdi
callq 0x20f0
jmp 0x1d85e
jmp 0x1d85b
movq %rax, %rbx
leaq -0x168(%rbp), %rdi
jmp 0x1dec7
movq %rax, %rbx
jmp 0x1d880
jmp 0x1deee
movq %rax, %rbx
leaq -0x70(%rbp), %rdi
callq 0x20f0
leaq -0x90(%rbp), %rdi
jmp 0x1dfc7
movq %rax, %rbx
leaq -0x70(%rbp), %rdi
jmp 0x1dfc7
movq %rax, %rbx
leaq -0x188(%rbp), %rdi
callq 0x20f0
jmp 0x1d8ac
movq %rax, %rbx
leaq -0x208(%rbp), %rdi
callq 0x20f0
jmp 0x1d8bd
movq %rax, %rbx
leaq -0x230(%rbp), %rdi
callq 0x20f0
jmp 0x1d8ce
movq %rax, %rbx
leaq -0xb0(%rbp), %rdi
callq 0x20f0
jmp 0x1d8e4
movq %rax, %rbx
jmp 0x1d8f0
movq %rax, %rbx
leaq -0xe8(%rbp), %rdi
callq 0x20f0
leaq -0x1c0(%rbp), %rdi
jmp 0x1db12
jmp 0x1da6a
jmp 0x1da80
jmp 0x1da6a
jmp 0x1da80
jmp 0x1da85
jmp 0x1da6f
jmp 0x1da80
jmp 0x1dac8
jmp 0x1da6a
jmp 0x1da6f
movq %rax, %rbx
leaq -0x188(%rbp), %rdi
callq 0x20f0
jmp 0x1d965
movq %rax, %rbx
jmp 0x1d9a2
movq %rax, %rbx
jmp 0x1d9c6
jmp 0x1dac8
jmp 0x1dac8
jmp 0x1dac8
jmp 0x1dabc
jmp 0x1dac8
movq %rax, %rbx
leaq -0x208(%rbp), %rdi
callq 0x20f0
jmp 0x1d98a
movq %rax, %rbx
jmp 0x1d996
movq %rax, %rbx
jmp 0x1d9d2
jmp 0x1da85
jmp 0x1dac8
movq %rax, %rbx
leaq -0x298(%rbp), %rdi
callq 0x20f0
leaq -0x230(%rbp), %rdi
callq 0x20f0
leaq -0xb0(%rbp), %rdi
callq 0x20f0
leaq -0xe8(%rbp), %rdi
callq 0x20f0
leaq -0x1c0(%rbp), %rdi
callq 0x20f0
leaq -0x2b8(%rbp), %rdi
callq 0x20f0
leaq -0x1e0(%rbp), %rdi
callq 0x20f0
leaq -0x2d8(%rbp), %rdi
jmp 0x1db12
movq %rax, %rbx
jmp 0x1d9ae
movq %rax, %rbx
jmp 0x1d9ba
jmp 0x1dac8
jmp 0x1da6f
jmp 0x1da85
movq %rax, %rbx
jmp 0x1d9de
jmp 0x1dabc
jmp 0x1dc33
jmp 0x1da6f
jmp 0x1da80
movq %rax, %rbx
jmp 0x1db0b
jmp 0x1dbc4
jmp 0x1dac8
movq %rax, %rbx
jmp 0x1da52
movq %rax, %rbx
jmp 0x1daff
jmp 0x1dbdc
jmp 0x1da85
jmp 0x1dac8
jmp 0x1dac8
movq %rax, %rbx
leaq -0x188(%rbp), %rdi
callq 0x20f0
leaq -0x208(%rbp), %rdi
callq 0x20f0
jmp 0x1daf3
jmp 0x1dbdc
jmp 0x1da6a
movq %rax, %rbx
jmp 0x1da94
movq %rax, %rbx
jmp 0x1daa0
jmp 0x1ded5
jmp 0x1dbbf
jmp 0x1dac8
movq %rax, %rbx
jmp 0x1daac
movq %rax, %rbx
leaq -0x188(%rbp), %rdi
callq 0x20f0
leaq -0x208(%rbp), %rdi
callq 0x20f0
leaq -0x230(%rbp), %rdi
callq 0x20f0
leaq -0xb0(%rbp), %rdi
jmp 0x1db12
jmp 0x1db6a
jmp 0x1dabc
movq %rax, %rbx
leaq -0x188(%rbp), %rdi
jmp 0x1db12
movq %rax, %rbx
jmp 0x1db17
jmp 0x1db62
jmp 0x1db85
jmp 0x1dbc4
movq %rax, %rbx
leaq -0x188(%rbp), %rdi
jmp 0x1de73
jmp 0x1dbd7
movq %rax, %rbx
leaq -0x230(%rbp), %rdi
callq 0x20f0
leaq -0xb0(%rbp), %rdi
callq 0x20f0
leaq -0xe8(%rbp), %rdi
callq 0x20f0
leaq -0x128(%rbp), %rdi
jmp 0x1de73
jmp 0x1ded5
movq %rax, %rbx
jmp 0x1dc6b
jmp 0x1db6a
jmp 0x1dbdc
jmp 0x1dc33
jmp 0x1ded5
movq %rax, %rbx
jmp 0x1dba3
jmp 0x1ded5
jmp 0x1db62
jmp 0x1db6a
jmp 0x1db85
jmp 0x1dbbf
jmp 0x1db62
movq %rax, %rbx
jmp 0x1dc47
jmp 0x1ded5
movq %rax, %rbx
jmp 0x1dbeb
movq %rax, %rbx
jmp 0x1dc27
jmp 0x1db85
jmp 0x1dbc4
movq %rax, %rbx
jmp 0x1dbaf
movq %rax, %rbx
jmp 0x1dc53
jmp 0x1dbd7
movq %rax, %rbx
jmp 0x1dbf7
movq %rax, %rbx
jmp 0x1dc5f
jmp 0x1dbbf
movq %rax, %rbx
leaq -0x128(%rbp), %rdi
callq 0x20f0
leaq -0x188(%rbp), %rdi
callq 0x20f0
leaq -0x208(%rbp), %rdi
callq 0x20f0
jmp 0x1dc3b
jmp 0x1dc33
movq %rax, %rbx
jmp 0x1dc0f
movq %rax, %rbx
leaq -0x128(%rbp), %rdi
callq 0x20f0
jmp 0x1dbdf
jmp 0x1dbd7
movq %rax, %rbx
jmp 0x1dc03
movq %rax, %rbx
leaq -0x188(%rbp), %rdi
callq 0x20f0
leaq -0x208(%rbp), %rdi
callq 0x20f0
leaq -0x230(%rbp), %rdi
callq 0x20f0
leaq -0xb0(%rbp), %rdi
callq 0x20f0
leaq -0xe8(%rbp), %rdi
callq 0x20f0
leaq -0x1c0(%rbp), %rdi
callq 0x20f0
leaq -0x1e0(%rbp), %rdi
jmp 0x1de73
movq %rax, %rbx
jmp 0x1dc1b
movq %rax, %rbx
leaq -0x230(%rbp), %rdi
callq 0x20f0
leaq -0xb0(%rbp), %rdi
callq 0x20f0
leaq -0xe8(%rbp), %rdi
callq 0x20f0
leaq -0x1c0(%rbp), %rdi
callq 0x20f0
leaq -0x1e0(%rbp), %rdi
callq 0x20f0
leaq -0x2d8(%rbp), %rdi
callq 0x20f0
leaq -0x2b8(%rbp), %rdi
callq 0x20f0
leaq -0x298(%rbp), %rdi
callq 0x20f0
leaq -0x300(%rbp), %rdi
callq 0x20f0
leaq -0x3a0(%rbp), %rdi
callq 0x20f0
leaq -0x380(%rbp), %rdi
callq 0x20f0
leaq -0x360(%rbp), %rdi
callq 0x20f0
leaq -0x340(%rbp), %rdi
jmp 0x1de73
movq %rax, %rbx
jmp 0x1de9c
movq %rax, %rbx
jmp 0x1de30
movq %rax, %rbx
jmp 0x1de84
movq %rax, %rbx
jmp 0x1de90
movq %rax, %rbx
leaq -0x148(%rbp), %rdi
jmp 0x1deaf
movq %rax, %rbx
jmp 0x1ddf4
movq %rax, %rbx
jmp 0x1dc9b
movq %rax, %rbx
jmp 0x1dccb
movq %rax, %rbx
jmp 0x1de18
movq %rax, %rbx
jmp 0x1de00
movq %rax, %rbx
jmp 0x1de24
movq %rax, %rbx
jmp 0x1de0c
movq %rax, %rbx
jmp 0x1de3c
movq %rax, %rbx
jmp 0x1de60
movq %rax, %rbx
jmp 0x1dc8f
movq %rax, %rbx
jmp 0x1dca7
movq %rax, %rbx
jmp 0x1dc83
movq %rax, %rbx
jmp 0x1dcbf
movq %rax, %rbx
jmp 0x1dcb3
movq %rax, %rbx
leaq -0x168(%rbp), %rdi
jmp 0x1debb
movq %rax, %rbx
jmp 0x1de48
movq %rax, %rbx
leaq -0x250(%rbp), %rdi
jmp 0x1dea3
movq %rax, %rbx
leaq -0x320(%rbp), %rdi
jmp 0x1de8b
jmp 0x1ded5
movq %rax, %rbx
leaq -0x278(%rbp), %rdi
jmp 0x1de97
movq %rax, %rbx
jmp 0x1dea8
movq %rax, %rbx
leaq -0x128(%rbp), %rdi
jmp 0x1de7f
movq %rax, %rbx
jmp 0x1de54
movq %rax, %rbx
jmp 0x1de6c
movq %rax, %rbx
jmp 0x1dc77
movq %rax, %rbx
leaq -0x128(%rbp), %rdi
callq 0x20f0
leaq -0x188(%rbp), %rdi
callq 0x20f0
leaq -0x208(%rbp), %rdi
callq 0x20f0
leaq -0x230(%rbp), %rdi
callq 0x20f0
leaq -0xb0(%rbp), %rdi
callq 0x20f0
leaq -0xe8(%rbp), %rdi
callq 0x20f0
leaq -0x1c0(%rbp), %rdi
callq 0x20f0
leaq -0x1e0(%rbp), %rdi
callq 0x20f0
leaq -0x2d8(%rbp), %rdi
callq 0x20f0
leaq -0x2b8(%rbp), %rdi
callq 0x20f0
leaq -0x298(%rbp), %rdi
callq 0x20f0
leaq -0x300(%rbp), %rdi
callq 0x20f0
leaq -0x320(%rbp), %rdi
callq 0x20f0
leaq -0x278(%rbp), %rdi
callq 0x20f0
leaq -0x250(%rbp), %rdi
callq 0x20f0
leaq -0x148(%rbp), %rdi
callq 0x20f0
leaq -0x168(%rbp), %rdi
callq 0x20f0
leaq -0x108(%rbp), %rdi
callq 0x20f0
leaq -0x90(%rbp), %rdi
callq 0x20f0
leaq -0x70(%rbp), %rdi
jmp 0x1dfbe
movq %rax, %rbx
jmp 0x1de78
movq %rax, %rbx
jmp 0x1deb4
movq %rax, %rbx
jmp 0x1df4e
movq %rax, %rbx
jmp 0x1df11
movq %rax, %rbx
jmp 0x1df5a
movq %rax, %rbx
jmp 0x1dfcc
jmp 0x1dfd4
movq %rax, %rbx
jmp 0x1df2e
jmp 0x1df66
movq %rax, %rbx
leaq -0x108(%rbp), %rdi
callq 0x20f0
leaq -0x168(%rbp), %rdi
callq 0x20f0
jmp 0x1df42
movq %rax, %rbx
leaq -0x90(%rbp), %rdi
callq 0x20f0
leaq -0x108(%rbp), %rdi
jmp 0x1dfbe
jmp 0x1dfd4
movq %rax, %rbx
leaq -0x148(%rbp), %rdi
callq 0x20f0
leaq -0x250(%rbp), %rdi
callq 0x20f0
leaq -0x278(%rbp), %rdi
jmp 0x1debb
movq %rax, %rbx
jmp 0x1dec0
movq %rax, %rbx
jmp 0x1dfb7
movq %rax, %rbx
jmp 0x1df9f
movq %rax, %rbx
leaq -0x90(%rbp), %rdi
callq 0x20f0
jmp 0x1df93
jmp 0x1dfd4
movq %rax, %rbx
jmp 0x1dfab
movq %rax, %rbx
leaq -0x250(%rbp), %rdi
callq 0x20f0
leaq -0x108(%rbp), %rdi
callq 0x20f0
leaq -0x168(%rbp), %rdi
callq 0x20f0
leaq -0x148(%rbp), %rdi
callq 0x20f0
leaq -0x50(%rbp), %rdi
callq 0x20f0
movq %rbx, %rdi
callq 0x2330
movq %rax, %rbx
jmp 0x1dfc3