// File: /workspace/github_cpp_makefile_star2_O3/toxaart[P]hierarchical_block_sparse_lib/source/HierarchicalBlockSparseMatrix.h
// Function: hbsm::HierarchicalBlockSparseMatrix<double>::assign_from_vectors_general(std::vector<int, std::allocator<int>> const&, std::vector<int, std::allocator<int>> const&, std::vector<double, std::allocator<double>> const&, bool, bool)
void HierarchicalBlockSparseMatrix<Treal>::assign_from_vectors_general(const std::vector<int> & rows,
				     const std::vector<int> & cols,
				     const std::vector<Treal> & values,
				     bool useMax,
					 bool boundaries_checked) {


			assert(blocksize > 0);
			if(rows.size() != values.size() || cols.size() != values.size())
				throw std::runtime_error("Error in HierarchicalBlockSparseMatrix<Treal>::assign_from_vectors: bad sizes.");

			if(rows.size() == 0) return;

			// this will be done only at the top level, later it is not necessary
			if(!boundaries_checked){
				for(int i = 0; i < values.size(); ++i){
					if( rows[i] < 0 ||  rows[i] > nRows_orig-1 || cols[i] < 0 || cols[i] > nCols_orig - 1)
						throw std::runtime_error("Error in HierarchicalBlockSparseMatrix<Treal>::assign_from_vectors: index outside matrix boundaries.");

				}
			}

			if(lowest_level()){

        int max_row_num = nRows;
        if(on_bottom_boundary()) max_row_num = get_n_rows() % blocksize;

        int max_col_num = nCols;
        if(on_right_boundary()) max_col_num = get_n_cols() % blocksize;

        if(get_first_row_position() >= get_n_rows() || get_first_col_position() >= get_n_cols()){ // block to skip
            return;
        }


				for(size_t i = 0; i < values.size(); ++i){

          int row = rows[i];
					int col = cols[i];

          if(row >= max_row_num || col >= max_col_num){
						continue;
					}

					Treal val = values[i];

          if(useMax){
              submatrix[col * nRows + row] = (val > submatrix[col * nRows + row]) ? val : submatrix[col * nRows + row];
          }
          else{
              submatrix[col * nRows + row] += val; // Note: we use += here, so if an element appears several times, the result becomes the sum of those contributions.
          }

				}





				return;
			}

			// now we have to split arrays into 4 parts and recursively apply the same procedure on children
			std::vector<int> rows0, cols0, rows1, cols1, rows2, cols2, rows3, cols3;
            std::vector<Treal> vals0,vals1,vals2,vals3;

			int n_elements = rows.size();

            rows0.reserve(n_elements);
            cols0.reserve(n_elements);
            vals0.reserve(n_elements);

            rows1.reserve(n_elements);
            cols1.reserve(n_elements);
            vals1.reserve(n_elements);

            rows2.reserve(n_elements);
            cols2.reserve(n_elements);
            vals2.reserve(n_elements);

            rows3.reserve(n_elements);
            cols3.reserve(n_elements);
            vals3.reserve(n_elements);

			// the offset, when providing parts of vectors to the next level their "coordinates" will be shifted
			int offset = nRows/2;

			for(size_t i = 0; i < n_elements; ++i){

				int row = rows[i];
				int col = cols[i];
				Treal val = values[i];

				// this part goes to child0
				if(row < offset && col < offset){
					rows0.push_back(row);
					cols0.push_back(col);
					vals0.push_back(val);
				}

				// this part goes to child1
				if(offset <= row && row < nRows && col < offset){
					rows1.push_back(row-offset);
					cols1.push_back(col);
					vals1.push_back(val);
				}

				// this part goes to child2
				if(row < offset && offset <= col && col < nCols){
					rows2.push_back(row);
					cols2.push_back(col-offset);
					vals2.push_back(val);
				}

				// this part goes to child3
				if(offset <= row && row < nRows && offset <= col && col < nCols){
					rows3.push_back(row-offset);
					cols3.push_back(col-offset);
					vals3.push_back(val);
				}

			}

			if(vals0.size() > 0){
				if(children[0] != NULL){
					throw std::runtime_error("Error in HierarchicalBlockSparseMatrix<Treal>::assign_from_vectors: non-null child0 matrix occured.");
				}
				children[0] = std::make_shared<HierarchicalBlockSparseMatrix<Treal> >();
		    children[0]->set_params(get_params());
				children[0]->resize(nRows / 2, nCols / 2);
				children[0]->parent = this;
                children[0]->assign_from_vectors_general(rows0, cols0, vals0, useMax,true);
			}

			if(vals1.size() > 0){
				if(children[1] != NULL){
					throw std::runtime_error("Error in HierarchicalBlockSparseMatrix<Treal>::assign_from_vectors: non-null child1 matrix occured.");
				}
				children[1] = std::make_shared<HierarchicalBlockSparseMatrix<Treal> >();
		    children[1]->set_params(get_params());
				children[1]->resize(nRows / 2, nCols / 2);
				children[1]->parent = this;
                children[1]->assign_from_vectors_general(rows1, cols1, vals1, useMax,true);
			}

			if(vals2.size() > 0){
				if(children[2] != NULL){
					throw std::runtime_error("Error in HierarchicalBlockSparseMatrix<Treal>::assign_from_vectors: non-null child2 matrix occured.");
				}
				children[2] = std::make_shared<HierarchicalBlockSparseMatrix<Treal> >();
		    children[2]->set_params(get_params());
				children[2]->resize(nRows / 2, nCols / 2);
				children[2]->parent = this;
                children[2]->assign_from_vectors_general(rows2, cols2, vals2, useMax,true);
			}

			if(vals3.size() > 0){
				if(children[3] != NULL){
					throw std::runtime_error("Error in HierarchicalBlockSparseMatrix<Treal>::assign_from_vectors: non-null child3 matrix occured.");
				}
				children[3] = std::make_shared<HierarchicalBlockSparseMatrix<Treal> >();
		    children[3]->set_params(get_params());
				children[3]->resize(nRows / 2, nCols / 2);
				children[3]->parent = this;
                children[3]->assign_from_vectors_general(rows3, cols3, vals3, useMax,true);
			}
		}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x1a8, %rsp            # imm = 0x1A8
movq %rdx, 0x180(%rsp)
cmpl $0x0, 0x10(%rdi)
jle 0x783f
movl %r8d, %r14d
movq %rcx, %r12
movq %rsi, %r15
movq %rdi, %rbx
movq (%rsi), %rax
movq 0x8(%rsi), %rsi
movq %rsi, %r10
subq %rax, %r10
movq %r10, %rcx
sarq $0x2, %rcx
movq (%r12), %rdi
movq 0x8(%r12), %r8
movq %r8, %rdx
subq %rdi, %rdx
sarq $0x3, %rdx
cmpq %rdx, %rcx
jne 0x7821
movq 0x180(%rsp), %r11
movq (%r11), %rdx
movq 0x8(%r11), %r11
subq %rdx, %r11
cmpq %r10, %r11
jne 0x7821
cmpq %rax, %rsi
je 0x77dd
cmpq %rdi, %r8
sete %sil
orb %r9b, %sil
jne 0x6c9c
movl 0x8(%rbx), %esi
movl 0xc(%rbx), %edi
cmpq $0x1, %rcx
adcq $0x0, %rcx
xorl %r8d, %r8d
movl (%rax,%r8,4), %r9d
testl %r9d, %r9d
js 0x77ef
cmpl %esi, %r9d
jge 0x77ef
movl (%rdx,%r8,4), %r9d
testl %r9d, %r9d
js 0x77ef
cmpl %edi, %r9d
jge 0x77ef
incq %r8
cmpq %r8, %rcx
jne 0x6c68
movq %rbx, %rdi
callq 0x6b0e
testb %al, %al
je 0x6de2
movl (%rbx), %ebp
movq %rbx, %rdi
callq 0x7a80
testb %al, %al
je 0x6cdc
cmpq $0x0, 0x68(%rbx)
movq %rbx, %rax
je 0x6cd3
movq %rbx, %rcx
movq %rcx, %rax
movq 0x68(%rcx), %rcx
testq %rcx, %rcx
jne 0x6cc7
movl 0x8(%rax), %eax
cltd
idivl 0x10(%rbx)
movl %edx, %ebp
movl 0x4(%rbx), %r13d
movq %rbx, %rdi
callq 0x7ad6
testb %al, %al
je 0x6d0f
cmpq $0x0, 0x68(%rbx)
movq %rbx, %rax
je 0x6d05
movq %rbx, %rcx
movq %rcx, %rax
movq 0x68(%rcx), %rcx
testq %rcx, %rcx
jne 0x6cf9
movl 0xc(%rax), %eax
cltd
idivl 0x10(%rbx)
movl %edx, %r13d
movq %rbx, %rdi
callq 0x7b2e
cmpq $0x0, 0x68(%rbx)
movq %rbx, %rcx
je 0x6d30
movq %rbx, %rdx
movq %rdx, %rcx
movq 0x68(%rdx), %rdx
testq %rdx, %rdx
jne 0x6d24
cmpl 0x8(%rcx), %eax
jge 0x77dd
movq %rbx, %rdi
callq 0x7baa
cmpq $0x0, 0x68(%rbx)
movq %rbx, %rcx
je 0x6d5a
movq %rbx, %rdx
movq %rdx, %rcx
movq 0x68(%rdx), %rdx
testq %rdx, %rdx
jne 0x6d4e
cmpl 0xc(%rcx), %eax
jge 0x77dd
movq (%r12), %rax
movq 0x8(%r12), %rcx
subq %rax, %rcx
je 0x77dd
sarq $0x3, %rcx
movq (%r15), %rdx
movq 0x180(%rsp), %rsi
movq (%rsi), %rsi
movl (%rbx), %edi
movq 0x70(%rbx), %r8
cmpq $0x1, %rcx
adcq $0x0, %rcx
xorl %r9d, %r9d
movl (%rdx,%r9,4), %r10d
cmpl %ebp, %r10d
jge 0x6dd5
movl (%rsi,%r9,4), %r11d
cmpl %r13d, %r11d
jge 0x6dd5
movsd (%rax,%r9,8), %xmm0
imull %edi, %r11d
addl %r10d, %r11d
movslq %r11d, %r10
movsd (%r8,%r10,8), %xmm1
testb %r14b, %r14b
je 0x6dcb
maxsd %xmm1, %xmm0
jmp 0x6dcf
addsd %xmm1, %xmm0
movsd %xmm0, (%r8,%r10,8)
incq %r9
cmpq %r9, %rcx
jne 0x6d98
jmp 0x77dd
movl %r14d, 0x18c(%rsp)
xorpd %xmm0, %xmm0
leaq 0x190(%rsp), %rdi
movapd %xmm0, (%rdi)
xorl %eax, %eax
movq %rax, 0x10(%rdi)
movq %rax, 0x170(%rsp)
movapd %xmm0, 0x160(%rsp)
movq %rax, 0x150(%rsp)
movapd %xmm0, 0x140(%rsp)
movq %rax, 0x130(%rsp)
movapd %xmm0, 0x120(%rsp)
movq %rax, 0x110(%rsp)
movapd %xmm0, 0x100(%rsp)
movq %rax, 0xf0(%rsp)
movapd %xmm0, 0xe0(%rsp)
movq %rax, 0xd0(%rsp)
movapd %xmm0, 0xc0(%rsp)
movq %rax, 0xb0(%rsp)
movapd %xmm0, 0xa0(%rsp)
movq %rax, 0x90(%rsp)
movapd %xmm0, 0x80(%rsp)
movq %rax, 0x70(%rsp)
movapd %xmm0, 0x60(%rsp)
movq %rax, 0x50(%rsp)
movapd %xmm0, 0x40(%rsp)
movq %rax, 0x30(%rsp)
movapd %xmm0, 0x20(%rsp)
movq 0x8(%r15), %r14
subq (%r15), %r14
movq %r14, %rax
shrq $0x2, %rax
movslq %eax, %r13
movq %r13, %rsi
callq 0x7c28
leaq 0x160(%rsp), %rdi
movq %r13, %rsi
callq 0x7c28
leaq 0x80(%rsp), %rdi
movq %r13, %rsi
callq 0x7cc4
leaq 0x140(%rsp), %rdi
movq %r13, %rsi
callq 0x7c28
leaq 0x120(%rsp), %rdi
movq %r13, %rsi
callq 0x7c28
leaq 0x60(%rsp), %rdi
movq %r13, %rsi
callq 0x7cc4
leaq 0x100(%rsp), %rdi
movq %r13, %rsi
callq 0x7c28
leaq 0xe0(%rsp), %rdi
movq %r13, %rsi
callq 0x7c28
leaq 0x40(%rsp), %rdi
movq %r13, %rsi
callq 0x7cc4
leaq 0xc0(%rsp), %rdi
movq %r13, %rsi
callq 0x7c28
leaq 0xa0(%rsp), %rdi
movq %r13, %rsi
callq 0x7c28
leaq 0x20(%rsp), %rdi
movq %r13, %rsi
callq 0x7cc4
shlq $0x1e, %r14
je 0x72d4
movl (%rbx), %eax
movl %eax, %ebp
shrl $0x1f, %ebp
addl %eax, %ebp
sarl %ebp
cmpq $0x1, %r13
adcq $0x0, %r13
xorl %r14d, %r14d
movq (%r15), %rax
movl (%rax,%r14,4), %eax
movl %eax, 0x1c(%rsp)
movq 0x180(%rsp), %rcx
movq (%rcx), %rcx
movl (%rcx,%r14,4), %ecx
movl %ecx, 0x8(%rsp)
movq (%r12), %rdx
movsd (%rdx,%r14,8), %xmm0
movsd %xmm0, 0x10(%rsp)
cmpl %ebp, %eax
setl %dl
cmpl %ebp, %ecx
setl %cl
andb %dl, %cl
cmpb $0x1, %cl
jne 0x7074
movq 0x198(%rsp), %rsi
cmpq 0x1a0(%rsp), %rsi
je 0x6fee
movl %eax, (%rsi)
addq $0x4, %rsi
movq %rsi, 0x198(%rsp)
jmp 0x7000
leaq 0x190(%rsp), %rdi
leaq 0x1c(%rsp), %rdx
callq 0x86e4
movq 0x168(%rsp), %rsi
cmpq 0x170(%rsp), %rsi
je 0x7026
movl 0x8(%rsp), %eax
movl %eax, (%rsi)
addq $0x4, %rsi
movq %rsi, 0x168(%rsp)
jmp 0x7038
leaq 0x160(%rsp), %rdi
leaq 0x8(%rsp), %rdx
callq 0x86e4
movq 0x88(%rsp), %rsi
cmpq 0x90(%rsp), %rsi
je 0x7062
movsd 0x10(%rsp), %xmm0
movsd %xmm0, (%rsi)
addq $0x8, %rsi
movq %rsi, 0x88(%rsp)
jmp 0x7074
leaq 0x80(%rsp), %rdi
leaq 0x10(%rsp), %rdx
callq 0x7fb2
movl 0x1c(%rsp), %ecx
movl %ecx, %eax
subl %ebp, %eax
jl 0x7134
cmpl (%rbx), %ecx
jge 0x7134
cmpl %ebp, 0x8(%rsp)
jge 0x7134
movl %eax, 0xc(%rsp)
movq 0x148(%rsp), %rsi
cmpq 0x150(%rsp), %rsi
je 0x70ba
movl %eax, (%rsi)
addq $0x4, %rsi
movq %rsi, 0x148(%rsp)
jmp 0x70cc
leaq 0x140(%rsp), %rdi
leaq 0xc(%rsp), %rdx
callq 0x84e4
movq 0x128(%rsp), %rsi
cmpq 0x130(%rsp), %rsi
je 0x70f2
movl 0x8(%rsp), %eax
movl %eax, (%rsi)
addq $0x4, %rsi
movq %rsi, 0x128(%rsp)
jmp 0x7104
leaq 0x120(%rsp), %rdi
leaq 0x8(%rsp), %rdx
callq 0x86e4
movq 0x68(%rsp), %rsi
cmpq 0x70(%rsp), %rsi
je 0x7125
movsd 0x10(%rsp), %xmm0
movsd %xmm0, (%rsi)
addq $0x8, %rsi
movq %rsi, 0x68(%rsp)
jmp 0x7134
leaq 0x60(%rsp), %rdi
leaq 0x10(%rsp), %rdx
callq 0x7fb2
movl 0x1c(%rsp), %eax
cmpl %ebp, %eax
jge 0x71f7
movl 0x8(%rsp), %ecx
cmpl %ecx, %ebp
jg 0x71f7
cmpl 0x4(%rbx), %ecx
jge 0x71f7
movq 0x108(%rsp), %rsi
cmpq 0x110(%rsp), %rsi
je 0x7177
movl %eax, (%rsi)
addq $0x4, %rsi
movq %rsi, 0x108(%rsp)
jmp 0x7189
leaq 0x100(%rsp), %rdi
leaq 0x1c(%rsp), %rdx
callq 0x86e4
movl 0x8(%rsp), %eax
subl %ebp, %eax
movl %eax, 0xc(%rsp)
movq 0xe8(%rsp), %rsi
cmpq 0xf0(%rsp), %rsi
je 0x71b5
movl %eax, (%rsi)
addq $0x4, %rsi
movq %rsi, 0xe8(%rsp)
jmp 0x71c7
leaq 0xe0(%rsp), %rdi
leaq 0xc(%rsp), %rdx
callq 0x84e4
movq 0x48(%rsp), %rsi
cmpq 0x50(%rsp), %rsi
je 0x71e8
movsd 0x10(%rsp), %xmm0
movsd %xmm0, (%rsi)
addq $0x8, %rsi
movq %rsi, 0x48(%rsp)
jmp 0x71f7
leaq 0x40(%rsp), %rdi
leaq 0x10(%rsp), %rdx
callq 0x7fb2
movl 0x1c(%rsp), %ecx
movl %ecx, %eax
subl %ebp, %eax
jl 0x72c8
cmpl (%rbx), %ecx
jge 0x72c8
movl 0x8(%rsp), %ecx
cmpl %ecx, %ebp
jg 0x72c8
cmpl 0x4(%rbx), %ecx
jge 0x72c8
movl %eax, 0xc(%rsp)
movq 0xc8(%rsp), %rsi
cmpq 0xd0(%rsp), %rsi
je 0x7248
movl %eax, (%rsi)
addq $0x4, %rsi
movq %rsi, 0xc8(%rsp)
jmp 0x725a
leaq 0xc0(%rsp), %rdi
leaq 0xc(%rsp), %rdx
callq 0x84e4
movl 0x8(%rsp), %eax
subl %ebp, %eax
movl %eax, 0xc(%rsp)
movq 0xa8(%rsp), %rsi
cmpq 0xb0(%rsp), %rsi
je 0x7286
movl %eax, (%rsi)
addq $0x4, %rsi
movq %rsi, 0xa8(%rsp)
jmp 0x7298
leaq 0xa0(%rsp), %rdi
leaq 0xc(%rsp), %rdx
callq 0x84e4
movq 0x28(%rsp), %rsi
cmpq 0x30(%rsp), %rsi
je 0x72b9
movsd 0x10(%rsp), %xmm0
movsd %xmm0, (%rsi)
addq $0x8, %rsi
movq %rsi, 0x28(%rsp)
jmp 0x72c8
leaq 0x20(%rsp), %rdi
leaq 0x10(%rsp), %rdx
callq 0x7fb2
incq %r14
cmpq %r14, %r13
jne 0x6f89
movq 0x88(%rsp), %rax
movabsq $0x100000001, %r14      # imm = 0x100000001
movzbl 0x18c(%rsp), %ebp
cmpq 0x80(%rsp), %rax
je 0x73d8
cmpq $0x0, 0x28(%rbx)
jne 0x785e
movl $0x98, %edi
callq 0x2130
movq %r14, 0x8(%rax)
leaq 0x69fc(%rip), %rcx      # 0xdd18
movq %rcx, (%rax)
movq %rax, %rdi
addq $0x10, %rdi
xorpd %xmm0, %xmm0
movupd %xmm0, 0x10(%rax)
movl $0xffffffff, 0x20(%rax) # imm = 0xFFFFFFFF
movupd %xmm0, 0x28(%rax)
movupd %xmm0, 0x38(%rax)
movupd %xmm0, 0x48(%rax)
movupd %xmm0, 0x58(%rax)
movupd %xmm0, 0x68(%rax)
movupd %xmm0, 0x78(%rax)
movupd %xmm0, 0x88(%rax)
movq %rdi, 0x28(%rbx)
movq 0x30(%rbx), %rcx
movq %rax, 0x30(%rbx)
testq %rcx, %rcx
je 0x7379
movq %rcx, %rdi
callq 0x6b3c
movq 0x28(%rbx), %rdi
movl 0x10(%rbx), %eax
leaq 0x10(%rsp), %rsi
movl %eax, (%rsi)
callq 0x425e
movq 0x28(%rbx), %rdi
movl (%rbx), %eax
movl 0x4(%rbx), %ecx
movl %eax, %esi
shrl $0x1f, %esi
addl %eax, %esi
sarl %esi
movl %ecx, %edx
shrl $0x1f, %edx
addl %ecx, %edx
sarl %edx
xorl %ecx, %ecx
callq 0x430c
movq 0x28(%rbx), %rdi
movq %rbx, 0x68(%rdi)
leaq 0x190(%rsp), %rsi
leaq 0x160(%rsp), %rdx
leaq 0x80(%rsp), %rcx
movl %ebp, %r8d
movl $0x1, %r9d
callq 0x6bc8
movq 0x68(%rsp), %rax
cmpq 0x60(%rsp), %rax
je 0x74c1
cmpq $0x0, 0x38(%rbx)
jne 0x787c
movl $0x98, %edi
callq 0x2130
movq %r14, 0x8(%rax)
leaq 0x6910(%rip), %rcx      # 0xdd18
movq %rcx, (%rax)
movq %rax, %rdi
addq $0x10, %rdi
xorpd %xmm0, %xmm0
movupd %xmm0, 0x10(%rax)
movl $0xffffffff, 0x20(%rax) # imm = 0xFFFFFFFF
movupd %xmm0, 0x28(%rax)
movupd %xmm0, 0x38(%rax)
movupd %xmm0, 0x48(%rax)
movupd %xmm0, 0x58(%rax)
movupd %xmm0, 0x68(%rax)
movupd %xmm0, 0x78(%rax)
movupd %xmm0, 0x88(%rax)
movq %rdi, 0x38(%rbx)
movq 0x40(%rbx), %rcx
movq %rax, 0x40(%rbx)
testq %rcx, %rcx
je 0x7465
movq %rcx, %rdi
callq 0x6b3c
movq 0x38(%rbx), %rdi
movl 0x10(%rbx), %eax
leaq 0x10(%rsp), %rsi
movl %eax, (%rsi)
callq 0x425e
movq 0x38(%rbx), %rdi
movl (%rbx), %eax
movl 0x4(%rbx), %ecx
movl %eax, %esi
shrl $0x1f, %esi
addl %eax, %esi
sarl %esi
movl %ecx, %edx
shrl $0x1f, %edx
addl %ecx, %edx
sarl %edx
xorl %ecx, %ecx
callq 0x430c
movq 0x38(%rbx), %rdi
movq %rbx, 0x68(%rdi)
leaq 0x140(%rsp), %rsi
leaq 0x120(%rsp), %rdx
leaq 0x60(%rsp), %rcx
movl %ebp, %r8d
movl $0x1, %r9d
callq 0x6bc8
movq 0x48(%rsp), %rax
cmpq 0x40(%rsp), %rax
je 0x75aa
cmpq $0x0, 0x48(%rbx)
jne 0x789a
movl $0x98, %edi
callq 0x2130
movq %r14, 0x8(%rax)
leaq 0x6827(%rip), %rcx      # 0xdd18
movq %rcx, (%rax)
movq %rax, %rdi
addq $0x10, %rdi
xorpd %xmm0, %xmm0
movupd %xmm0, 0x10(%rax)
movl $0xffffffff, 0x20(%rax) # imm = 0xFFFFFFFF
movupd %xmm0, 0x28(%rax)
movupd %xmm0, 0x38(%rax)
movupd %xmm0, 0x48(%rax)
movupd %xmm0, 0x58(%rax)
movupd %xmm0, 0x68(%rax)
movupd %xmm0, 0x78(%rax)
movupd %xmm0, 0x88(%rax)
movq %rdi, 0x48(%rbx)
movq 0x50(%rbx), %rcx
movq %rax, 0x50(%rbx)
testq %rcx, %rcx
je 0x754e
movq %rcx, %rdi
callq 0x6b3c
movq 0x48(%rbx), %rdi
movl 0x10(%rbx), %eax
leaq 0x10(%rsp), %rsi
movl %eax, (%rsi)
callq 0x425e
movq 0x48(%rbx), %rdi
movl (%rbx), %eax
movl 0x4(%rbx), %ecx
movl %eax, %esi
shrl $0x1f, %esi
addl %eax, %esi
sarl %esi
movl %ecx, %edx
shrl $0x1f, %edx
addl %ecx, %edx
sarl %edx
xorl %ecx, %ecx
callq 0x430c
movq 0x48(%rbx), %rdi
movq %rbx, 0x68(%rdi)
leaq 0x100(%rsp), %rsi
leaq 0xe0(%rsp), %rdx
leaq 0x40(%rsp), %rcx
movl %ebp, %r8d
movl $0x1, %r9d
callq 0x6bc8
movq 0x20(%rsp), %rdi
cmpq %rdi, 0x28(%rsp)
je 0x7698
cmpq $0x0, 0x58(%rbx)
jne 0x78b8
movl $0x98, %edi
callq 0x2130
movq %r14, 0x8(%rax)
leaq 0x673e(%rip), %rcx      # 0xdd18
movq %rcx, (%rax)
movq %rax, %rdi
addq $0x10, %rdi
xorpd %xmm0, %xmm0
movupd %xmm0, 0x10(%rax)
movl $0xffffffff, 0x20(%rax) # imm = 0xFFFFFFFF
movupd %xmm0, 0x28(%rax)
movupd %xmm0, 0x38(%rax)
movupd %xmm0, 0x48(%rax)
movupd %xmm0, 0x58(%rax)
movupd %xmm0, 0x68(%rax)
movupd %xmm0, 0x78(%rax)
movupd %xmm0, 0x88(%rax)
movq %rdi, 0x58(%rbx)
movq 0x60(%rbx), %rcx
movq %rax, 0x60(%rbx)
testq %rcx, %rcx
je 0x7637
movq %rcx, %rdi
callq 0x6b3c
movq 0x58(%rbx), %rdi
movl 0x10(%rbx), %eax
leaq 0x10(%rsp), %rsi
movl %eax, (%rsi)
callq 0x425e
movq 0x58(%rbx), %rdi
movl (%rbx), %eax
movl 0x4(%rbx), %ecx
movl %eax, %esi
shrl $0x1f, %esi
addl %eax, %esi
sarl %esi
movl %ecx, %edx
shrl $0x1f, %edx
addl %ecx, %edx
sarl %edx
xorl %ecx, %ecx
callq 0x430c
movq 0x58(%rbx), %rdi
movq %rbx, 0x68(%rdi)
leaq 0xc0(%rsp), %rsi
leaq 0xa0(%rsp), %rdx
leaq 0x20(%rsp), %rcx
movl %ebp, %r8d
movl $0x1, %r9d
callq 0x6bc8
movq 0x20(%rsp), %rdi
testq %rdi, %rdi
je 0x76aa
movq 0x30(%rsp), %rsi
subq %rdi, %rsi
callq 0x2140
movq 0x40(%rsp), %rdi
testq %rdi, %rdi
je 0x76c1
movq 0x50(%rsp), %rsi
subq %rdi, %rsi
callq 0x2140
movq 0x60(%rsp), %rdi
testq %rdi, %rdi
je 0x76d8
movq 0x70(%rsp), %rsi
subq %rdi, %rsi
callq 0x2140
movq 0x80(%rsp), %rdi
testq %rdi, %rdi
je 0x76f5
movq 0x90(%rsp), %rsi
subq %rdi, %rsi
callq 0x2140
movq 0xa0(%rsp), %rdi
testq %rdi, %rdi
je 0x7712
movq 0xb0(%rsp), %rsi
subq %rdi, %rsi
callq 0x2140
movq 0xc0(%rsp), %rdi
testq %rdi, %rdi
je 0x772f
movq 0xd0(%rsp), %rsi
subq %rdi, %rsi
callq 0x2140
movq 0xe0(%rsp), %rdi
testq %rdi, %rdi
je 0x774c
movq 0xf0(%rsp), %rsi
subq %rdi, %rsi
callq 0x2140
movq 0x100(%rsp), %rdi
testq %rdi, %rdi
je 0x7769
movq 0x110(%rsp), %rsi
subq %rdi, %rsi
callq 0x2140
movq 0x120(%rsp), %rdi
testq %rdi, %rdi
je 0x7786
movq 0x130(%rsp), %rsi
subq %rdi, %rsi
callq 0x2140
movq 0x140(%rsp), %rdi
testq %rdi, %rdi
je 0x77a3
movq 0x150(%rsp), %rsi
subq %rdi, %rsi
callq 0x2140
movq 0x160(%rsp), %rdi
testq %rdi, %rdi
je 0x77c0
movq 0x170(%rsp), %rsi
subq %rdi, %rsi
callq 0x2140
movq 0x190(%rsp), %rdi
testq %rdi, %rdi
je 0x77dd
movq 0x1a0(%rsp), %rsi
subq %rdi, %rsi
callq 0x2140
addq $0x1a8, %rsp            # imm = 0x1A8
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movl $0x10, %edi
callq 0x2070
movq %rax, %r14
leaq 0x305f(%rip), %rsi      # 0xa862
movq %rax, %rdi
callq 0x2060
movq 0x67de(%rip), %rsi      # 0xdff0
movq 0x67a7(%rip), %rdx      # 0xdfc0
movq %r14, %rdi
callq 0x21a0
movl $0x10, %edi
callq 0x2070
movq %rax, %r14
leaq 0x2fde(%rip), %rsi      # 0xa813
movq %rax, %rdi
callq 0x2060
jmp 0x780b
leaq 0x2d39(%rip), %rdi      # 0xa57f
leaq 0x2d40(%rip), %rsi      # 0xa58d
leaq 0x2f04(%rip), %rcx      # 0xa758
movl $0x2a3, %edx            # imm = 0x2A3
callq 0x20a0
movl $0x10, %edi
callq 0x2070
movq %rax, %r14
leaq 0x3055(%rip), %rsi      # 0xa8c7
movq %rax, %rdi
callq 0x2060
jmp 0x78d4
movl $0x10, %edi
callq 0x2070
movq %rax, %r14
leaq 0x309b(%rip), %rsi      # 0xa92b
movq %rax, %rdi
callq 0x2060
jmp 0x78d4
movl $0x10, %edi
callq 0x2070
movq %rax, %r14
leaq 0x30e1(%rip), %rsi      # 0xa98f
movq %rax, %rdi
callq 0x2060
jmp 0x78d4
movl $0x10, %edi
callq 0x2070
movq %rax, %r14
leaq 0x3127(%rip), %rsi      # 0xa9f3
movq %rax, %rdi
callq 0x2060
movq 0x6715(%rip), %rsi      # 0xdff0
movq 0x66de(%rip), %rdx      # 0xdfc0
movq %r14, %rdi
callq 0x21a0
jmp 0x78f0
jmp 0x78f0
jmp 0x78f0
movq %rax, %rbx
movq %r14, %rdi
callq 0x20e0
jmp 0x7921
jmp 0x791e
jmp 0x791e
jmp 0x791e
jmp 0x791e
jmp 0x791e
jmp 0x791e
jmp 0x791e
jmp 0x791e
jmp 0x791e
jmp 0x791e
jmp 0x791e
jmp 0x7a6d
jmp 0x791e
jmp 0x791e
jmp 0x791e
movq %rax, %rbx
movq 0x20(%rsp), %rdi
testq %rdi, %rdi
je 0x7938
movq 0x30(%rsp), %rsi
subq %rdi, %rsi
callq 0x2140
movq 0x40(%rsp), %rdi
testq %rdi, %rdi
je 0x794f
movq 0x50(%rsp), %rsi
subq %rdi, %rsi
callq 0x2140
movq 0x60(%rsp), %rdi
testq %rdi, %rdi
je 0x7966
movq 0x70(%rsp), %rsi
subq %rdi, %rsi
callq 0x2140
movq 0x80(%rsp), %rdi
testq %rdi, %rdi
je 0x7983
movq 0x90(%rsp), %rsi
subq %rdi, %rsi
callq 0x2140
movq 0xa0(%rsp), %rdi
testq %rdi, %rdi
je 0x79a0
movq 0xb0(%rsp), %rsi
subq %rdi, %rsi
callq 0x2140
movq 0xc0(%rsp), %rdi
testq %rdi, %rdi
je 0x79bd
movq 0xd0(%rsp), %rsi
subq %rdi, %rsi
callq 0x2140
movq 0xe0(%rsp), %rdi
testq %rdi, %rdi
je 0x79da
movq 0xf0(%rsp), %rsi
subq %rdi, %rsi
callq 0x2140
movq 0x100(%rsp), %rdi
testq %rdi, %rdi
je 0x79f7
movq 0x110(%rsp), %rsi
subq %rdi, %rsi
callq 0x2140
movq 0x120(%rsp), %rdi
testq %rdi, %rdi
je 0x7a14
movq 0x130(%rsp), %rsi
subq %rdi, %rsi
callq 0x2140
movq 0x140(%rsp), %rdi
testq %rdi, %rdi
je 0x7a31
movq 0x150(%rsp), %rsi
subq %rdi, %rsi
callq 0x2140
movq 0x160(%rsp), %rdi
testq %rdi, %rdi
je 0x7a4e
movq 0x170(%rsp), %rsi
subq %rdi, %rsi
callq 0x2140
movq 0x190(%rsp), %rdi
testq %rdi, %rdi
je 0x7a78
movq 0x1a0(%rsp), %rsi
subq %rdi, %rsi
callq 0x2140
jmp 0x7a78
movq %rax, %rbx
movq %r14, %rdi
callq 0x20e0
movq %rbx, %rdi
callq 0x21c0