// File: /workspace/github_cpp_makefile_star2_O1/temelmertcan[P]multgen/src/multgen.cpp
// Function: create_adder(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, bool, int, 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>>>>>&)
int create_adder (string final_stage_adder,
                  bool carryin, int adder_size,
                  queue<string>& verilog){

  if (final_stage_adder.compare ("RP") == 0)
    create_rp_adder (adder_size, carryin, verilog);
  else if (final_stage_adder.compare ("HC") == 0)
    create_hc_adder (adder_size, carryin, verilog);
  else if (final_stage_adder.compare ("LF") == 0)
    create_lf_adder (adder_size, carryin, verilog);
  else if (final_stage_adder.compare ("KS") == 0)
    create_ks_adder (adder_size, carryin, verilog);
  else if (final_stage_adder.compare ("BK") == 0)
    create_bk_adder (adder_size, carryin, verilog);
   else if (final_stage_adder.compare ("JSkCond") == 0)
     create_JSkCond_adder (adder_size, carryin, verilog);
  else{
    cout << "Bad Final Stage Adder Selection!" << endl;
    return 1;
  }

  string module_name = final_stage_adder+"_"+to_string(adder_size)+ (carryin?"_carry":"");
  
  verilog.push ("module "+module_name+"_spec (");
  verilog.push("indent");
  verilog.push("indent");
  if(carryin)
    verilog.push ("input logic carryin,");
  verilog.push ("input logic [" + to_string(adder_size-1) + ":0] IN1,");
  verilog.push ("input logic [" + to_string(adder_size-1) +  ":0] IN2,");
  verilog.push ("output logic adder_correct,");
  verilog.push ("output logic ["  + to_string(adder_size) +  ":0] spec_res);");
  verilog.push("outdent");
  verilog.push("");
  verilog.push((string)"assign spec_res = IN1 + IN2" + (string)(carryin?" + carryin;":";"));
  verilog.push("wire ["  + to_string(adder_size) +  ":0] adder_res;");
  verilog.push(module_name + " adder("+(carryin?"carryin, ":"")+"IN1, IN2, adder_res);");
  verilog.push("assign adder_correct = ((spec_res == adder_res) ? 1 : 0);");
  verilog.push("");
  verilog.push("outdent");
  verilog.push ("endmodule");
  verilog.push("");

  verilog.push ("\n");

  cout << endl;
  cout << "Adder Module (" << module_name << ") is created." << endl;
  cout << "   Inputs: IN1[" << adder_size-1 << ":0], IN2[" << adder_size-1 << ":0]" << (carryin?", carryin":"")<< endl;
  cout << "   Output: result[" <<adder_size << ":0]" << endl;
  cout << "   Function: result=IN1 + IN2" << (carryin?" + carryin":"") << endl;

  return 0;

}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0xb8, %rsp
movq %rcx, %r12
movl %edx, %r15d
movl %esi, %r14d
movq %rdi, %rbx
leaq 0x71e1b(%rip), %rsi     # 0x78321
callq 0x3090
testl %eax, %eax
je 0x65d2
leaq 0x721c2(%rip), %rsi     # 0x786dc
movq %rbx, %rdi
callq 0x3090
testl %eax, %eax
je 0x65e3
leaq 0x721ae(%rip), %rsi     # 0x786df
movq %rbx, %rdi
callq 0x3090
testl %eax, %eax
je 0x65f4
leaq 0x7219a(%rip), %rsi     # 0x786e2
movq %rbx, %rdi
callq 0x3090
testl %eax, %eax
je 0x6605
leaq 0x72186(%rip), %rsi     # 0x786e5
movq %rbx, %rdi
callq 0x3090
testl %eax, %eax
je 0x6616
leaq 0x72172(%rip), %rsi     # 0x786e8
movq %rbx, %rdi
callq 0x3090
testl %eax, %eax
je 0x6627
movq 0x80a43(%rip), %rbx     # 0x86fd0
leaq 0x726ef(%rip), %rsi     # 0x78c83
movl $0x20, %edx
movq %rbx, %rdi
callq 0x3240
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x31e0
movsbl %al, %esi
movq %rbx, %rdi
callq 0x3040
movq %rax, %rdi
callq 0x3160
movl $0x1, %eax
jmp 0x7618
movzbl %r14b, %esi
movl %r15d, %edi
movq %r12, %rdx
callq 0x2bfe7
jmp 0x6636
movzbl %r14b, %esi
movl %r15d, %edi
movq %r12, %rdx
callq 0x30643
jmp 0x6636
movzbl %r14b, %esi
movl %r15d, %edi
movq %r12, %rdx
callq 0x33c48
jmp 0x6636
movzbl %r14b, %esi
movl %r15d, %edi
movq %r12, %rdx
callq 0x3548c
jmp 0x6636
movzbl %r14b, %esi
movl %r15d, %edi
movq %r12, %rdx
callq 0x36bda
jmp 0x6636
movzbl %r14b, %esi
movl %r15d, %edi
movq %r12, %rdx
callq 0x39c6b
leaq -0x60(%rbp), %rax
movq %rax, -0x10(%rax)
movq (%rbx), %rsi
movq 0x8(%rbx), %rdx
addq %rsi, %rdx
leaq -0x70(%rbp), %rbx
movq %rbx, %rdi
callq 0x2acc6
leaq 0x73b1b(%rip), %rsi     # 0x7a176
movq %rbx, %rdi
callq 0x33d0
movl %r15d, %eax
negl %eax
cmovsl %r15d, %eax
movl $0x1, %ebx
movl %eax, -0x4c(%rbp)
cmpl $0xa, %eax
jb 0x66be
movl $0x4, %ebx
movl $0xd1b71759, %eax       # imm = 0xD1B71759
movl -0x4c(%rbp), %ecx
cmpl $0x63, %ecx
jbe 0x66b7
cmpl $0x3e7, %ecx            # imm = 0x3E7
jbe 0x66bc
cmpl $0x2710, %ecx           # imm = 0x2710
jb 0x66be
movl %ecx, %edx
imulq %rax, %rdx
shrq $0x2d, %rdx
addl $0x4, %ebx
cmpl $0x1869f, %ecx          # imm = 0x1869F
movl %edx, %ecx
ja 0x6686
addl $-0x3, %ebx
jmp 0x66be
addl $-0x2, %ebx
jmp 0x66be
decl %ebx
movl %r15d, %r13d
shrl $0x1f, %r13d
leal (%rbx,%r13), %esi
leaq -0x80(%rbp), %rax
movq %rax, -0x10(%rax)
leaq -0x90(%rbp), %rdi
movl $0x2d, %edx
callq 0x3250
movl %r13d, %eax
movq -0x90(%rbp), %rdi
movq %rax, -0xc8(%rbp)
addq %rax, %rdi
movl %ebx, %esi
movl -0x4c(%rbp), %edx
callq 0x2aad9
movq -0x70(%rbp), %rcx
movq -0x68(%rbp), %r8
movq -0x88(%rbp), %rdx
leaq (%rdx,%r8), %rax
movl $0xf, %esi
leaq -0x60(%rbp), %rdi
cmpq %rdi, %rcx
je 0x6725
movq -0x60(%rbp), %rsi
cmpq %rsi, %rax
jbe 0x6745
movl $0xf, %esi
leaq -0x80(%rbp), %rdi
cmpq %rdi, -0x90(%rbp)
je 0x6740
movq -0x80(%rbp), %rsi
cmpq %rsi, %rax
jbe 0x6757
movq -0x90(%rbp), %rsi
leaq -0x70(%rbp), %rdi
callq 0x30a0
jmp 0x6767
leaq -0x90(%rbp), %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0x3230
leaq -0x38(%rbp), %rdx
movq %rdx, -0x10(%rdx)
movq (%rax), %rsi
leaq 0x10(%rax), %rcx
cmpq %rcx, %rsi
je 0x6788
movq %rsi, -0x48(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x38(%rbp)
jmp 0x678e
movups (%rcx), %xmm0
movups %xmm0, (%rdx)
movq %rax, %rdx
addq $0x8, %rdx
movq 0x8(%rax), %rsi
movq %rsi, -0x40(%rbp)
movq %rcx, (%rax)
movq $0x0, (%rdx)
movb $0x0, (%rcx)
leaq 0x724f3(%rip), %rax     # 0x78ca4
leaq 0x73e49(%rip), %rsi     # 0x7a601
testb %r14b, %r14b
cmovneq %rax, %rsi
leaq -0x48(%rbp), %rdi
callq 0x33d0
leaq -0xa8(%rbp), %rsi
movq %rsi, -0x10(%rsi)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x67f5
movq %rdx, -0xb8(%rbp)
movq (%rcx), %rdx
movq %rdx, -0xa8(%rbp)
jmp 0x67fb
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, -0xb0(%rbp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq -0x38(%rbp), %rbx
movq -0x10(%rbx), %rdi
cmpq %rbx, %rdi
je 0x6827
callq 0x31d0
movq -0x90(%rbp), %rdi
leaq -0x80(%rbp), %rax
cmpq %rax, %rdi
je 0x683c
callq 0x31d0
movq -0x70(%rbp), %rdi
leaq -0x60(%rbp), %rax
cmpq %rax, %rdi
je 0x684e
callq 0x31d0
leaq 0x72456(%rip), %rsi     # 0x78cab
leaq -0x70(%rbp), %rdi
leaq -0xb8(%rbp), %rdx
callq 0x2a99b
leaq 0x72447(%rip), %rsi     # 0x78cb3
leaq -0x70(%rbp), %rdi
callq 0x33d0
movq %rbx, -0x48(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x6895
movq %rdx, -0x48(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x38(%rbp)
jmp 0x689b
movups (%rcx), %xmm0
movups %xmm0, (%rbx)
movq 0x8(%rax), %rdx
leaq -0x48(%rbp), %rsi
movq %rdx, 0x8(%rsi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq %r12, %rdi
callq 0x2ad60
movq -0x48(%rbp), %rdi
cmpq %rbx, %rdi
je 0x68cc
callq 0x31d0
movq -0x70(%rbp), %rdi
leaq -0x60(%rbp), %rax
cmpq %rax, %rdi
je 0x68de
callq 0x31d0
leaq -0x48(%rbp), %rdi
movq %rbx, (%rdi)
leaq 0x723cf(%rip), %rsi     # 0x78cbb
leaq 0x723ce(%rip), %rdx     # 0x78cc1
callq 0x2b022
leaq -0x48(%rbp), %rsi
movq %r12, %rdi
callq 0x2ad60
movq -0x48(%rbp), %rdi
cmpq %rbx, %rdi
je 0x6912
callq 0x31d0
leaq -0x48(%rbp), %rdi
movq %rbx, (%rdi)
leaq 0x7239b(%rip), %rsi     # 0x78cbb
leaq 0x7239a(%rip), %rdx     # 0x78cc1
callq 0x2b022
leaq -0x48(%rbp), %rsi
movq %r12, %rdi
callq 0x2ad60
movq -0x48(%rbp), %rdi
cmpq %rbx, %rdi
je 0x6946
callq 0x31d0
testb %r14b, %r14b
je 0x697f
leaq -0x48(%rbp), %rdi
movq %rbx, (%rdi)
leaq 0x72369(%rip), %rsi     # 0x78cc2
leaq 0x72376(%rip), %rdx     # 0x78cd6
callq 0x2b022
leaq -0x48(%rbp), %rsi
movq %r12, %rdi
callq 0x2ad60
movq -0x48(%rbp), %rdi
cmpq %rbx, %rdi
je 0x697f
callq 0x31d0
movq %r13, -0xc0(%rbp)
movq %r12, -0xd0(%rbp)
movl %r14d, -0x98(%rbp)
leal -0x1(%r15), %esi
movl %esi, %ebx
negl %ebx
cmovsl %esi, %ebx
movl $0x1, %r13d
cmpl $0xa, %ebx
jb 0x69f3
movl $0x4, %r13d
movl $0xd1b71759, %eax       # imm = 0xD1B71759
movl %ebx, %ecx
cmpl $0x63, %ecx
jbe 0x69ea
cmpl $0x3e7, %ecx            # imm = 0x3E7
jbe 0x69f0
cmpl $0x2710, %ecx           # imm = 0x2710
jb 0x69f3
movl %ecx, %edx
imulq %rax, %rdx
shrq $0x2d, %rdx
addl $0x4, %r13d
cmpl $0x1869f, %ecx          # imm = 0x1869F
movl %edx, %ecx
ja 0x69b7
addl $-0x3, %r13d
jmp 0x69f3
addl $-0x2, %r13d
jmp 0x69f3
decl %r13d
movq %r15, -0xd8(%rbp)
movl %esi, -0x94(%rbp)
movl %esi, %r12d
shrl $0x1f, %r12d
leal (%r12,%r13), %esi
leaq -0x90(%rbp), %rdi
leaq -0x80(%rbp), %rax
movq %rax, (%rdi)
movl $0x2d, %edx
callq 0x3250
movl %r12d, %r14d
leaq -0x90(%rbp), %r15
movq (%r15), %rdi
addq %r14, %rdi
movl %r13d, %esi
movl %ebx, %edx
callq 0x2aad9
leaq 0x72293(%rip), %rcx     # 0x78cd7
movl $0xd, %r8d
movq %r15, %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0x3230
leaq -0x60(%rbp), %rsi
movq %rsi, -0x70(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
movq -0xd0(%rbp), %r15
je 0x6a81
movq %rdx, -0x70(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x60(%rbp)
jmp 0x6a87
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
leaq -0x70(%rbp), %rdi
movq %rdx, 0x8(%rdi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0x7223c(%rip), %rsi     # 0x78ce5
callq 0x33d0
leaq -0x38(%rbp), %rsi
movq %rsi, -0x48(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x6ad2
movq %rdx, -0x48(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x38(%rbp)
jmp 0x6ad8
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
leaq -0x48(%rbp), %rsi
movq %rdx, 0x8(%rsi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq %r15, %rdi
callq 0x2ad60
movq -0x48(%rbp), %rdi
leaq -0x38(%rbp), %rax
cmpq %rax, %rdi
leaq -0x60(%rbp), %r15
je 0x6b11
callq 0x31d0
movq -0x70(%rbp), %rdi
cmpq %r15, %rdi
je 0x6b1f
callq 0x31d0
movq -0x90(%rbp), %rdi
leaq -0x80(%rbp), %rax
cmpq %rax, %rdi
je 0x6b34
callq 0x31d0
movl $0x1, %r13d
cmpl $0xa, %ebx
jb 0x6b88
movl $0x4, %r13d
movl $0xd1b71759, %eax       # imm = 0xD1B71759
movl %ebx, %ecx
cmpl $0x63, %ecx
jbe 0x6b7f
cmpl $0x3e7, %ecx            # imm = 0x3E7
jbe 0x6b85
cmpl $0x2710, %ecx           # imm = 0x2710
jb 0x6b88
movl %ecx, %edx
imulq %rax, %rdx
shrq $0x2d, %rdx
addl $0x4, %r13d
cmpl $0x1869f, %ecx          # imm = 0x1869F
movl %edx, %ecx
ja 0x6b4c
addl $-0x3, %r13d
jmp 0x6b88
addl $-0x2, %r13d
jmp 0x6b88
decl %r13d
addl %r13d, %r12d
leaq -0x90(%rbp), %rdi
leaq -0x80(%rbp), %rax
movq %rax, (%rdi)
movq %r12, %rsi
movl $0x2d, %edx
callq 0x3250
leaq -0x90(%rbp), %r15
addq (%r15), %r14
movq %r14, %rdi
movl %r13d, %esi
movl %ebx, %edx
callq 0x2aad9
leaq 0x72113(%rip), %rcx     # 0x78cd7
movl $0xd, %r8d
movq %r15, %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0x3230
leaq -0x60(%rbp), %r15
movq %r15, -0x70(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
movl -0x98(%rbp), %r12d
movq -0xd0(%rbp), %r13
leaq -0x38(%rbp), %rbx
je 0x6c0c
movq %rdx, -0x70(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x60(%rbp)
jmp 0x6c13
movups (%rcx), %xmm0
movups %xmm0, (%r15)
movq 0x8(%rax), %rdx
leaq -0x70(%rbp), %rdi
movq %rdx, 0x8(%rdi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0x720b9(%rip), %rsi     # 0x78cee
callq 0x33d0
movq %rbx, -0x48(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x6c5a
movq %rdx, -0x48(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x38(%rbp)
jmp 0x6c60
movups (%rcx), %xmm0
movups %xmm0, (%rbx)
movq 0x8(%rax), %rdx
leaq -0x48(%rbp), %rsi
movq %rdx, 0x8(%rsi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq %r13, %rdi
callq 0x2ad60
movq -0x48(%rbp), %rdi
cmpq %rbx, %rdi
je 0x6c91
callq 0x31d0
movq -0x70(%rbp), %rdi
cmpq %r15, %rdi
je 0x6c9f
callq 0x31d0
movq -0x90(%rbp), %rdi
leaq -0x80(%rbp), %rax
cmpq %rax, %rdi
je 0x6cb4
callq 0x31d0
leaq -0x48(%rbp), %rdi
movq %rbx, (%rdi)
leaq 0x72035(%rip), %rsi     # 0x78cf7
leaq 0x72049(%rip), %rdx     # 0x78d12
callq 0x2b022
leaq -0x48(%rbp), %rsi
movq %r13, %rdi
callq 0x2ad60
movq -0x48(%rbp), %rdi
cmpq %rbx, %rdi
je 0x6ce8
callq 0x31d0
movl $0x1, %ebx
cmpl $0xa, -0x4c(%rbp)
jb 0x6d38
movl $0x4, %ebx
movl $0xd1b71759, %eax       # imm = 0xD1B71759
movl -0x4c(%rbp), %ecx
cmpl $0x63, %ecx
jbe 0x6d31
cmpl $0x3e7, %ecx            # imm = 0x3E7
jbe 0x6d36
cmpl $0x2710, %ecx           # imm = 0x2710
jb 0x6d38
movl %ecx, %edx
imulq %rax, %rdx
shrq $0x2d, %rdx
addl $0x4, %ebx
cmpl $0x1869f, %ecx          # imm = 0x1869F
movl %edx, %ecx
ja 0x6d00
addl $-0x3, %ebx
jmp 0x6d38
addl $-0x2, %ebx
jmp 0x6d38
decl %ebx
movq -0xc0(%rbp), %rax
leal (%rbx,%rax), %esi
leaq -0x90(%rbp), %rdi
leaq -0x80(%rbp), %rax
movq %rax, (%rdi)
movl $0x2d, %edx
callq 0x3250
leaq -0x90(%rbp), %r14
movq (%r14), %rdi
addq -0xc8(%rbp), %rdi
movl %ebx, %esi
movl -0x4c(%rbp), %edx
callq 0x2aad9
leaq 0x71f97(%rip), %rcx     # 0x78d13
movl $0xe, %r8d
movq %r14, %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0x3230
movq %r15, -0x70(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
leaq -0x38(%rbp), %rbx
je 0x6db2
movq %rdx, -0x70(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x60(%rbp)
jmp 0x6db9
movups (%rcx), %xmm0
movups %xmm0, (%r15)
movq 0x8(%rax), %rdx
leaq -0x70(%rbp), %rdi
movq %rdx, 0x8(%rdi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0x71f47(%rip), %rsi     # 0x78d22
callq 0x33d0
movq %rbx, -0x48(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x6e00
movq %rdx, -0x48(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x38(%rbp)
jmp 0x6e06
movups (%rcx), %xmm0
movups %xmm0, (%rbx)
movq 0x8(%rax), %rdx
leaq -0x48(%rbp), %rsi
movq %rdx, 0x8(%rsi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq %r13, %rdi
callq 0x2ad60
movq -0x48(%rbp), %rdi
cmpq %rbx, %rdi
je 0x6e37
callq 0x31d0
movq -0x70(%rbp), %rdi
cmpq %r15, %rdi
je 0x6e45
callq 0x31d0
movq -0x90(%rbp), %rdi
leaq -0x80(%rbp), %rax
cmpq %rax, %rdi
je 0x6e5a
callq 0x31d0
leaq -0x48(%rbp), %rdi
movq %rbx, (%rdi)
leaq 0x71ec9(%rip), %rsi     # 0x78d31
leaq 0x71ec9(%rip), %rdx     # 0x78d38
callq 0x2b022
leaq -0x48(%rbp), %rsi
movq %r13, %rdi
callq 0x2ad60
movq -0x48(%rbp), %rdi
cmpq %rbx, %rdi
je 0x6e8e
callq 0x31d0
leaq -0x48(%rbp), %rdi
movq %rbx, (%rdi)
leaq 0x73765(%rip), %rbx     # 0x7a601
movq %rbx, %rsi
movq %rbx, %rdx
callq 0x2b022
leaq -0x48(%rbp), %rsi
movq %r13, %rdi
callq 0x2ad60
movq -0x48(%rbp), %rdi
leaq -0x38(%rbp), %rax
cmpq %rax, %rdi
je 0x6ec5
callq 0x31d0
leaq -0x70(%rbp), %rdi
movq %r15, (%rdi)
leaq 0x71e66(%rip), %rsi     # 0x78d39
leaq 0x71e7a(%rip), %rdx     # 0x78d54
callq 0x2b022
leaq 0x71e6f(%rip), %rax     # 0x78d55
leaq 0x73824(%rip), %rsi     # 0x7a711
testb %r12b, %r12b
cmovneq %rax, %rsi
leaq 0x1(%rsi), %rdx
leaq 0xb(%rsi), %rax
testb %r12b, %r12b
leaq -0x90(%rbp), %rdi
leaq -0x80(%rbp), %rcx
movq %rcx, (%rdi)
cmovneq %rax, %rdx
callq 0x2b022
movq -0x70(%rbp), %rcx
movq -0x68(%rbp), %r8
movq -0x88(%rbp), %rdx
leaq (%rdx,%r8), %rax
movl $0xf, %esi
cmpq %r15, %rcx
je 0x6f37
movq -0x60(%rbp), %rsi
cmpq %rsi, %rax
jbe 0x6f57
movl $0xf, %esi
leaq -0x80(%rbp), %rdi
cmpq %rdi, -0x90(%rbp)
je 0x6f52
movq -0x80(%rbp), %rsi
cmpq %rsi, %rax
jbe 0x6f69
movq -0x90(%rbp), %rsi
leaq -0x70(%rbp), %rdi
callq 0x30a0
jmp 0x6f79
leaq -0x90(%rbp), %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0x3230
leaq -0x38(%rbp), %rsi
movq %rsi, -0x48(%rbp)
movq (%rax), %rdx
leaq 0x10(%rax), %rcx
cmpq %rcx, %rdx
je 0x6f9a
movq %rdx, -0x48(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x38(%rbp)
jmp 0x6fa0
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq %rax, %rdx
addq $0x8, %rdx
movq 0x8(%rax), %rsi
movq %rsi, -0x40(%rbp)
movq %rcx, (%rax)
movq $0x0, (%rdx)
movb $0x0, (%rcx)
leaq -0x48(%rbp), %rsi
movq %r13, %rdi
callq 0x2ad60
movq -0x48(%rbp), %rdi
leaq -0x38(%rbp), %rax
cmpq %rax, %rdi
je 0x6fda
callq 0x31d0
movq -0x90(%rbp), %rdi
leaq -0x80(%rbp), %rax
cmpq %rax, %rdi
je 0x6fef
callq 0x31d0
movq -0x70(%rbp), %rdi
cmpq %r15, %rdi
je 0x6ffd
callq 0x31d0
movl $0x1, %r14d
cmpl $0xa, -0x4c(%rbp)
jb 0x7053
movl $0x4, %r14d
movl $0xd1b71759, %eax       # imm = 0xD1B71759
movl -0x4c(%rbp), %ecx
cmpl $0x63, %ecx
jbe 0x704a
cmpl $0x3e7, %ecx            # imm = 0x3E7
jbe 0x7050
cmpl $0x2710, %ecx           # imm = 0x2710
jb 0x7053
movl %ecx, %edx
imulq %rax, %rdx
shrq $0x2d, %rdx
addl $0x4, %r14d
cmpl $0x1869f, %ecx          # imm = 0x1869F
movl %edx, %ecx
ja 0x7017
addl $-0x3, %r14d
jmp 0x7053
addl $-0x2, %r14d
jmp 0x7053
decl %r14d
movq -0xc0(%rbp), %rsi
addl %r14d, %esi
leaq -0x90(%rbp), %rdi
leaq -0x80(%rbp), %rax
movq %rax, (%rdi)
movl $0x2d, %edx
callq 0x3250
leaq -0x90(%rbp), %r15
movq -0xc8(%rbp), %rdi
addq (%r15), %rdi
movl %r14d, %esi
movl -0x4c(%rbp), %edx
callq 0x2aad9
leaq 0x71cc9(%rip), %rcx     # 0x78d61
movl $0x6, %r8d
movq %r15, %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0x3230
leaq -0x60(%rbp), %r14
movq %r14, -0x70(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x70ce
movq %rdx, -0x70(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x60(%rbp)
jmp 0x70d5
movups (%rcx), %xmm0
movups %xmm0, (%r14)
movq 0x8(%rax), %rdx
leaq -0x70(%rbp), %rdi
movq %rdx, 0x8(%rdi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0x71c71(%rip), %rsi     # 0x78d68
callq 0x33d0
leaq -0x38(%rbp), %rsi
movq %rsi, -0x48(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x7120
movq %rdx, -0x48(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x38(%rbp)
jmp 0x7126
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
leaq -0x48(%rbp), %rsi
movq %rdx, 0x8(%rsi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq %r13, %rdi
callq 0x2ad60
movq -0x48(%rbp), %rdi
leaq -0x38(%rbp), %rax
cmpq %rax, %rdi
je 0x715b
callq 0x31d0
movq -0x70(%rbp), %rdi
cmpq %r14, %rdi
je 0x7169
callq 0x31d0
movq -0x90(%rbp), %rdi
leaq -0x80(%rbp), %rax
cmpq %rax, %rdi
je 0x717e
callq 0x31d0
leaq -0x90(%rbp), %rdi
leaq -0x80(%rbp), %rax
movq %rax, (%rdi)
movq -0xb8(%rbp), %rsi
movq -0xb0(%rbp), %rdx
addq %rsi, %rdx
callq 0x2acc6
leaq 0x71bce(%rip), %rsi     # 0x78d77
leaq -0x90(%rbp), %rdi
callq 0x33d0
leaq 0x71bc3(%rip), %rax     # 0x78d7f
testb %r12b, %r12b
cmovneq %rax, %rbx
leaq -0x90(%rbp), %rdi
movq %rbx, %rsi
callq 0x33d0
movq %r14, -0x70(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
leaq -0x38(%rbp), %rbx
je 0x71f6
movq %rdx, -0x70(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x60(%rbp)
jmp 0x71fd
movups (%rcx), %xmm0
movups %xmm0, (%r14)
movq 0x8(%rax), %rdx
leaq -0x70(%rbp), %rdi
movq %rdx, 0x8(%rdi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0x71b6a(%rip), %rsi     # 0x78d89
callq 0x33d0
movq %rbx, -0x48(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x7244
movq %rdx, -0x48(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x38(%rbp)
jmp 0x724a
movups (%rcx), %xmm0
movups %xmm0, (%rbx)
movq 0x8(%rax), %rdx
leaq -0x48(%rbp), %rsi
movq %rdx, 0x8(%rsi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq %r13, %rdi
callq 0x2ad60
movq -0x48(%rbp), %rdi
cmpq %rbx, %rdi
je 0x727b
callq 0x31d0
movq -0x70(%rbp), %rdi
cmpq %r14, %rdi
je 0x7289
callq 0x31d0
movq -0x90(%rbp), %rdi
leaq -0x80(%rbp), %rax
cmpq %rax, %rdi
je 0x729e
callq 0x31d0
leaq -0x48(%rbp), %rdi
movq %rbx, (%rdi)
leaq 0x71af3(%rip), %rsi     # 0x78d9f
leaq 0x71b25(%rip), %rdx     # 0x78dd8
callq 0x2b022
leaq -0x48(%rbp), %rsi
movq %r13, %rdi
callq 0x2ad60
movq -0x48(%rbp), %rdi
cmpq %rbx, %rdi
je 0x72d2
callq 0x31d0
leaq -0x48(%rbp), %rdi
movq %rbx, (%rdi)
leaq 0x73321(%rip), %rdx     # 0x7a601
movq %rdx, %rsi
callq 0x2b022
leaq -0x48(%rbp), %rsi
movq %r13, %rdi
callq 0x2ad60
movq -0x48(%rbp), %rdi
cmpq %rbx, %rdi
je 0x7302
callq 0x31d0
leaq -0x48(%rbp), %rdi
movq %rbx, (%rdi)
leaq 0x71a21(%rip), %rsi     # 0x78d31
leaq 0x71a21(%rip), %rdx     # 0x78d38
callq 0x2b022
leaq -0x48(%rbp), %rsi
movq %r13, %rdi
callq 0x2ad60
movq -0x48(%rbp), %rdi
cmpq %rbx, %rdi
je 0x7336
callq 0x31d0
leaq -0x48(%rbp), %rdi
movq %rbx, (%rdi)
leaq 0x71a95(%rip), %rsi     # 0x78dd9
leaq 0x71a97(%rip), %rdx     # 0x78de2
callq 0x2b022
leaq -0x48(%rbp), %rsi
movq %r13, %rdi
callq 0x2ad60
movq -0x48(%rbp), %rdi
cmpq %rbx, %rdi
je 0x736a
callq 0x31d0
leaq -0x48(%rbp), %rdi
movq %rbx, (%rdi)
leaq 0x73289(%rip), %rbx     # 0x7a601
movq %rbx, %rsi
movq %rbx, %rdx
callq 0x2b022
leaq -0x48(%rbp), %rsi
movq %r13, %rdi
callq 0x2ad60
movq -0x48(%rbp), %rdi
leaq -0x38(%rbp), %rax
cmpq %rax, %rdi
je 0x73a1
callq 0x31d0
leaq -0x48(%rbp), %rdi
leaq -0x38(%rbp), %rax
movq %rax, (%rdi)
leaq 0x704c7(%rip), %rsi     # 0x7787a
leaq 0x704c1(%rip), %rdx     # 0x7787b
callq 0x2b022
leaq -0x48(%rbp), %rsi
movq %r13, %rdi
callq 0x2ad60
movq -0x48(%rbp), %rdi
leaq -0x38(%rbp), %rax
cmpq %rax, %rdi
je 0x73dd
callq 0x31d0
movq 0x7fbec(%rip), %rdi     # 0x86fd0
movq (%rdi), %rax
addq -0x18(%rax), %rdi
movl $0xa, %esi
callq 0x31e0
movsbl %al, %esi
movq 0x7fbd1(%rip), %rdi     # 0x86fd0
callq 0x3040
movq %rax, %rdi
callq 0x3160
movq 0x7fbbd(%rip), %rdi     # 0x86fd0
leaq 0x719c9(%rip), %rsi     # 0x78de3
movl $0xe, %edx
callq 0x3240
movq -0xb8(%rbp), %rsi
movq -0xb0(%rbp), %rdx
movq 0x7fb97(%rip), %rdi     # 0x86fd0
callq 0x3240
movq %rax, %r14
leaq 0x719aa(%rip), %rsi     # 0x78df2
movl $0xd, %edx
movq %rax, %rdi
callq 0x3240
movq (%r14), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x31e0
movsbl %al, %esi
movq %r14, %rdi
callq 0x3040
movq %rax, %rdi
callq 0x3160
movq 0x7fb4d(%rip), %rdi     # 0x86fd0
leaq 0x71976(%rip), %rsi     # 0x78e00
movl $0xf, %edx
callq 0x3240
movq 0x7fb35(%rip), %rdi     # 0x86fd0
movl -0x94(%rbp), %esi
callq 0x3380
movq %rax, %r14
leaq 0x71960(%rip), %rsi     # 0x78e10
movl $0x9, %edx
movq %rax, %rdi
callq 0x3240
movq %r14, %rdi
movl -0x94(%rbp), %esi
callq 0x3380
movq %rax, %r14
leaq 0x71945(%rip), %rsi     # 0x78e1a
movl $0x3, %edx
movq %rax, %rdi
callq 0x3240
leaq 0x71935(%rip), %rsi     # 0x78e1e
testb %r12b, %r12b
cmoveq %rbx, %rsi
movzbl %r12b, %eax
leaq (%rax,%rax,8), %rdx
movq %r14, %rdi
callq 0x3240
movq (%r14), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x31e0
movsbl %al, %esi
movq %r14, %rdi
callq 0x3040
movq %rax, %rdi
callq 0x3160
movq 0x7faa2(%rip), %rdi     # 0x86fd0
leaq 0x718f3(%rip), %rsi     # 0x78e28
movl $0x12, %edx
callq 0x3240
movq 0x7fa8a(%rip), %rdi     # 0x86fd0
movq -0xd8(%rbp), %rsi
callq 0x3380
movq %rax, %r14
leaq 0x718be(%rip), %rsi     # 0x78e1a
movl $0x3, %edx
movq %rax, %rdi
callq 0x3240
movq (%r14), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x31e0
movsbl %al, %esi
movq %r14, %rdi
callq 0x3040
movq %rax, %rdi
callq 0x3160
movq 0x7fa39(%rip), %rdi     # 0x86fd0
leaq 0x7189d(%rip), %rsi     # 0x78e3b
movl $0x1d, %edx
callq 0x3240
leaq 0x718aa(%rip), %rax     # 0x78e59
xorl %ecx, %ecx
testb %r12b, %r12b
cmovneq %rax, %rbx
movl $0xa, %edx
cmoveq %rcx, %rdx
movq 0x7fa08(%rip), %r14     # 0x86fd0
movq %r14, %rdi
movq %rbx, %rsi
callq 0x3240
movq (%r14), %rax
addq -0x18(%rax), %r14
movq %r14, %rdi
movl $0xa, %esi
callq 0x31e0
movsbl %al, %esi
movq 0x7f9df(%rip), %rdi     # 0x86fd0
callq 0x3040
movq %rax, %rdi
callq 0x3160
movq -0xb8(%rbp), %rdi
leaq -0xa8(%rbp), %rax
cmpq %rax, %rdi
je 0x7616
callq 0x31d0
xorl %eax, %eax
addq $0xb8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0x776c
jmp 0x77ee
jmp 0x76da
jmp 0x77ee
jmp 0x76da
jmp 0x77ee
jmp 0x776c
jmp 0x77ee
jmp 0x776c
jmp 0x77ee
jmp 0x776c
jmp 0x77ee
jmp 0x776c
jmp 0x77ee
jmp 0x7708
jmp 0x7739
jmp 0x7750
jmp 0x7750
jmp 0x77ee
jmp 0x7722
jmp 0x7739
jmp 0x7750
jmp 0x77ee
movq %rax, %rbx
movq -0x48(%rbp), %rdi
leaq -0x38(%rbp), %rax
cmpq %rax, %rdi
je 0x76b7
callq 0x31d0
jmp 0x76b7
movq %rax, %rbx
movq -0x90(%rbp), %rdi
leaq -0x80(%rbp), %rax
cmpq %rax, %rdi
jne 0x778e
jmp 0x7798
jmp 0x7795
jmp 0x77ee
movq %rax, %rbx
movq -0x48(%rbp), %rdi
leaq -0x38(%rbp), %rax
jmp 0x77a0
jmp 0x77ee
jmp 0x776c
jmp 0x77ee
jmp 0x7708
jmp 0x7739
jmp 0x7750
jmp 0x77ee
jmp 0x776c
jmp 0x77ee
movq %rbx, %rcx
movq %rax, %rbx
movq -0x48(%rbp), %rdi
cmpq %rcx, %rdi
jne 0x7732
jmp 0x773c
jmp 0x7739
jmp 0x7750
jmp 0x77ee
movq %rax, %rbx
movq -0x48(%rbp), %rdi
leaq -0x38(%rbp), %rax
cmpq %rax, %rdi
je 0x773c
callq 0x31d0
jmp 0x773c
movq %rax, %rbx
movq -0x70(%rbp), %rdi
leaq -0x60(%rbp), %rax
cmpq %rax, %rdi
je 0x7753
callq 0x31d0
jmp 0x7753
movq %rax, %rbx
movq -0x90(%rbp), %rdi
leaq -0x80(%rbp), %rax
jmp 0x77a0
jmp 0x77ee
jmp 0x776c
jmp 0x77ee
movq %rbx, %rcx
movq %rax, %rbx
movq -0x48(%rbp), %rdi
cmpq %rcx, %rdi
jne 0x77a5
jmp 0x77f1
jmp 0x77ee
movq %rbx, %rcx
movq %rax, %rbx
movq -0x48(%rbp), %rdi
cmpq %rcx, %rdi
je 0x7798
callq 0x31d0
jmp 0x7798
movq %rax, %rbx
movq -0x70(%rbp), %rdi
leaq -0x60(%rbp), %rax
cmpq %rax, %rdi
je 0x77f1
callq 0x31d0
jmp 0x77f1
jmp 0x77ee
movq %rax, %rbx
leaq -0x38(%rbp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x77c8
callq 0x31d0
jmp 0x77c8
movq %rax, %rbx
movq -0x90(%rbp), %rdi
leaq -0x80(%rbp), %rax
cmpq %rax, %rdi
je 0x77e4
callq 0x31d0
jmp 0x77e4
jmp 0x77e1
movq %rax, %rbx
movq -0x70(%rbp), %rdi
leaq -0x60(%rbp), %rax
jmp 0x77ff
movq %rax, %rbx
movq -0xb8(%rbp), %rdi
leaq -0xa8(%rbp), %rax
cmpq %rax, %rdi
je 0x7809
callq 0x31d0
movq %rbx, %rdi
callq 0x33a0