// File: /workspace/github_cpp_makefile_star2_O1/TBody[P]atomicpp/atomicpp/RateEquations.cpp
// Function: atomicpp::RateEquations::calculateElectronImpactPopulationEquation(double, std::vector<double, std::allocator<double>> const&, std::vector<double, std::allocator<double>> const&, double)
void RateEquations::calculateElectronImpactPopulationEquation(
	const double Ne,
	const std::vector<double>& Nzk,
	const std::vector<double>& Vzk,
	const double Te
	){
	
	// Initialise vectors as all zeros (this is default, but it doesn't hurt to be explicit)
	// These will be summed with Neumaier summation
	//Rates for population equation
		std::vector<double>    iz_to_above(Z+1, 0.0); //Rate (m^-3 s^-1)
		std::vector<double>  iz_from_below(Z+1, 0.0);
		std::vector<double>   rec_to_below(Z+1, 0.0);
		std::vector<double> rec_from_above(Z+1, 0.0);

	//Rates for momentum equation
		std::vector<double>    iz_p_to_above(Z+1, 0.0); //Momentum (kg m/s s^-1 = N)
		std::vector<double>  iz_p_from_below(Z+1, 0.0);
		std::vector<double>   rec_p_to_below(Z+1, 0.0);
		std::vector<double> rec_p_from_above(Z+1, 0.0);

	std::shared_ptr<RateCoefficient> ionisation_coefficient    = rate_coefficients["ionisation"];
	std::shared_ptr<RateCoefficient> recombination_coefficient = rate_coefficients["recombination"];
	
	//N.b. iterating over all data indices of the rate coefficient, hence the < since these are 0,...,Z-1  or 1,...,Z indexed
	for(int k=0; k < Z; ++k){
		double ionisation_coefficient_evaluated = ionisation_coefficient->call0D(k, Te, Ne);
		double recombination_coefficient_evaluated = recombination_coefficient->call0D(k, Te, Ne);
		
		// Note that recombination coefficients are indexed from 1 to Z, while ionisation is indexed from 0 to Z-1 (consider what 
		// charge the target must have in each case)
		int k_rec = k + 1; //The target charge state for recombination -- makes it a bit easier to understand

		double ionisation_rate_factor = ionisation_coefficient_evaluated * Ne;
		// std::printf("ionisation(%i)    K = %e, Ne = %e, Nzk = %e, R= %e\n",k,ionisation_coefficient_evaluated, Ne, Nzk[k],ionisation_rate_factor);
		double recombination_rate_factor = recombination_coefficient_evaluated * Ne;
		// std::printf("recombination(%i) K = %e, Ne = %e, Nzk = %e, R= %e\n",k+1,recombination_coefficient_evaluated, Ne, Nzk[k+1],recombination_rate_factor);

		// Want both the target and source densities to be above the Nthres density threshold
		// If we allow target to be below the source density, then won't get particle balance if ignoring stage or alternatively
		// 	will artificially pump a low density stage if we consider only source terms
		// 	N.b. Nzk[k+1] = Nzk[k_rec], Nzk[k] = Nzk[k_rec - 1], so can test just one condition and it will work for ionisation and recombination
		if((Nzk[k+1] > Nthres) and (Nzk[k] > Nthres)){
			//Rates 'to' a state are loss terms from that state. They are paired with Rates 'from'
			//which are source terms for other states
			iz_to_above.at(k)               = -ionisation_rate_factor * Nzk.at(k);
			iz_from_below.at(k+1)        = +ionisation_rate_factor * Nzk.at(k);
			rec_to_below.at(k_rec)       = -recombination_rate_factor * Nzk.at(k_rec);
			rec_from_above.at(k_rec-1)   = +recombination_rate_factor * Nzk.at(k_rec);

			iz_p_to_above.at(k)          = -ionisation_rate_factor * mz * amu_to_kg * Vzk.at(k);
			iz_p_from_below.at(k+1)      = +ionisation_rate_factor * mz * amu_to_kg * Vzk.at(k);
			rec_p_to_below.at(k_rec)     = -recombination_rate_factor * mz * amu_to_kg * Vzk.at(k_rec);
			rec_p_from_above.at(k_rec-1) = +recombination_rate_factor * mz * amu_to_kg * Vzk.at(k_rec);
		}
		// Otherwise, the rates stay as default = 0
	}

	for(int k=0; k <= Z; ++k){
		// N.b. bare nucleus will not contribute to electron density nor have an ionisation potential -- treat it separately
		// Rates will be zero for edge cases (from initialisation)
		std::vector<double> rates_for_stage              = {iz_to_above[k],iz_from_below[k],rec_to_below[k],rec_from_above[k]};
		std::pair<double, double> neumaier_pair_rates    = neumaierSum(rates_for_stage);
		dNzk[k]                                          = neumaier_pair_rates.first;
		dNzk_correction[k]                               = neumaier_pair_rates.second; //Store compensation separately for later evaluation

		std::vector<double> momentum_for_stage           = {iz_p_to_above[k],iz_p_from_below[k],rec_p_to_below[k],rec_p_from_above[k]};
		std::pair<double, double> neumaier_pair_momentum = neumaierSum(momentum_for_stage);
		F_zk[k]                                          = neumaier_pair_momentum.first;
		F_zk_correction[k]                               = neumaier_pair_momentum.second; //Store compensation separately for later evaluation
	}

	//For Neumaier summation of the change in Ne from the different rates 
	std::vector<double> dNe_from_stage(Z, 0.0);
	// Ionisation potential (in eV per transition) is not a rate coefficient, but is treated as one since the interpolation methods and
	// data shape are identical. This is used to calculate the effect of iz and rec on the electron energy (in Pcool).
	std::shared_ptr<RateCoefficient> ionisation_potential = rate_coefficients["ionisation_potential"];
	for(int k=0; k < Z; ++k){
		// N.b. bare nucleus will not contribute to electron density nor have an ionisation potential
		// Rates will be zero for edge cases (from initialisation)
		double ionisation_potential_evaluated            = ionisation_potential->call0D(k, Te, Ne);
		Pcool                                            += eV_to_J * ionisation_potential_evaluated * (iz_to_above[k] + rec_from_above[k]); //N.b. iz_to_above is -ve, rec_from_above is +ve
		dNe_from_stage[k]                                = -(iz_to_above[k] + rec_from_above[k]); //N.b. rates already have signs
	}
	// Perturbation on electron density
	std::pair<double, double> neumaier_pair_dNe      = neumaierSum(dNe_from_stage);
	dNe                                              = neumaier_pair_dNe.first + neumaier_pair_dNe.second;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x1a8, %rsp            # imm = 0x1A8
movsd %xmm1, -0xb0(%rbp)
movq %rdx, -0x198(%rbp)
movq %rsi, %r15
movsd %xmm0, -0x78(%rbp)
movq %rdi, %rbx
movslq 0x34(%rdi), %r12
incq %r12
leaq -0x70(%rbp), %r13
movq $0x0, (%r13)
leaq -0x180(%rbp), %r14
movq %r14, %rdi
callq 0x533c
leaq -0x1d0(%rbp), %rdi
movq %r12, %rsi
movq %r13, %rdx
movq %r14, %rcx
callq 0x18048
leaq -0x180(%rbp), %rdi
callq 0x5a80
movslq 0x34(%rbx), %r14
incq %r14
leaq -0x70(%rbp), %r12
movq $0x0, (%r12)
leaq -0x168(%rbp), %r13
movq %r13, %rdi
callq 0x533c
leaq -0x180(%rbp), %rdi
movq %r14, %rsi
movq %r12, %rdx
movq %r13, %rcx
callq 0x18048
leaq -0x168(%rbp), %rdi
callq 0x5a80
movslq 0x34(%rbx), %r14
incq %r14
movq $0x0, (%r12)
leaq -0xf0(%rbp), %r13
movq %r13, %rdi
callq 0x533c
leaq -0x168(%rbp), %rdi
movq %r14, %rsi
movq %r12, %rdx
movq %r13, %rcx
callq 0x18048
leaq -0xf0(%rbp), %rdi
callq 0x5a80
movslq 0x34(%rbx), %r14
incq %r14
movq $0x0, (%r12)
leaq -0x150(%rbp), %r13
movq %r13, %rdi
callq 0x533c
leaq -0xf0(%rbp), %rdi
movq %r14, %rsi
movq %r12, %rdx
movq %r13, %rcx
callq 0x18048
leaq -0x150(%rbp), %rdi
callq 0x5a80
movslq 0x34(%rbx), %r14
incq %r14
movq $0x0, (%r12)
leaq -0x138(%rbp), %r13
movq %r13, %rdi
callq 0x533c
leaq -0x150(%rbp), %rdi
movq %r14, %rsi
movq %r12, %rdx
movq %r13, %rcx
callq 0x18048
leaq -0x138(%rbp), %rdi
callq 0x5a80
movslq 0x34(%rbx), %r14
incq %r14
movq $0x0, (%r12)
leaq -0x120(%rbp), %r13
movq %r13, %rdi
callq 0x533c
leaq -0x138(%rbp), %rdi
movq %r14, %rsi
movq %r12, %rdx
movq %r13, %rcx
callq 0x18048
leaq -0x120(%rbp), %rdi
callq 0x5a80
movslq 0x34(%rbx), %r14
incq %r14
movq $0x0, (%r12)
leaq -0x108(%rbp), %r13
movq %r13, %rdi
callq 0x533c
leaq -0x120(%rbp), %rdi
movq %r14, %rsi
movq %r12, %rdx
movq %r13, %rcx
callq 0x18048
leaq -0x108(%rbp), %rdi
callq 0x5a80
movslq 0x34(%rbx), %r14
incq %r14
movq $0x0, (%r12)
leaq -0x90(%rbp), %r13
movq %r13, %rdi
callq 0x533c
leaq -0x108(%rbp), %rdi
movq %r14, %rsi
movq %r12, %rdx
movq %r13, %rcx
callq 0x18048
leaq -0x90(%rbp), %rdi
callq 0x5a80
leaq -0x90(%rbp), %r14
movq %r14, %rdi
callq 0x4540
leaq 0x2cd8(%rip), %rsi      # 0x22040
leaq -0x70(%rbp), %rdi
movq %r14, %rdx
callq 0x4160
leaq -0x70(%rbp), %rsi
movq %rbx, %rdi
callq 0xd1fc
leaq -0x1b8(%rbp), %rdi
movq %rax, %rsi
callq 0xd1f2
leaq -0x70(%rbp), %rdi
callq 0x41a0
leaq -0x90(%rbp), %rdi
callq 0x58c6
movq %r14, %rdi
callq 0x4540
leaq 0x2c98(%rip), %rsi      # 0x2204b
leaq -0x70(%rbp), %rdi
movq %r14, %rdx
callq 0x4160
leaq -0x70(%rbp), %rsi
movq %rbx, %rdi
callq 0xd1fc
movq -0x198(%rbp), %r14
leaq -0x1a8(%rbp), %rdi
movq %rax, %rsi
callq 0xd1f2
leaq -0x70(%rbp), %rdi
callq 0x41a0
leaq -0x90(%rbp), %rdi
callq 0x58c6
cmpl $0x0, 0x34(%rbx)
jle 0x1f6df
xorl %r12d, %r12d
leaq -0x1b8(%rbp), %rdi
callq 0x53ae
movq %rax, %rdi
movl %r12d, %esi
movsd -0xb0(%rbp), %xmm0
movsd -0x78(%rbp), %xmm1
callq 0x1136e
movapd %xmm0, -0x50(%rbp)
leaq -0x1a8(%rbp), %rdi
callq 0x53ae
movq %rax, %rdi
movl %r12d, %esi
movsd -0xb0(%rbp), %xmm0
movsd -0x78(%rbp), %xmm1
callq 0x1136e
movapd %xmm0, -0xa0(%rbp)
leaq 0x1(%r12), %r13
movq %r15, %rdi
movq %r13, %rsi
callq 0x18510
movsd (%rax), %xmm0
ucomisd 0x40(%rbx), %xmm0
jbe 0x1f6cf
movq %r15, %rdi
movq %r12, %rsi
callq 0x18510
movsd (%rax), %xmm0
ucomisd 0x40(%rbx), %xmm0
jbe 0x1f6cf
movq %r15, %rdi
movq %r12, %rsi
callq 0x1d21a
movsd (%rax), %xmm0
movsd %xmm0, -0x38(%rbp)
leaq -0x1d0(%rbp), %rdi
movq %r12, %rsi
callq 0x1d1be
movapd -0x50(%rbp), %xmm0
mulsd -0x78(%rbp), %xmm0
movapd %xmm0, -0x50(%rbp)
xorpd 0x5bc5(%rip), %xmm0     # 0x25090
movapd %xmm0, -0xc0(%rbp)
movsd -0x38(%rbp), %xmm1
mulsd %xmm0, %xmm1
movsd %xmm1, (%rax)
movq %r15, %rdi
movq %r12, %rsi
callq 0x1d21a
movsd (%rax), %xmm0
movsd %xmm0, -0x38(%rbp)
leaq -0x180(%rbp), %rdi
movq %r13, %rsi
callq 0x1d1be
movsd -0x38(%rbp), %xmm0
mulsd -0x50(%rbp), %xmm0
movsd %xmm0, (%rax)
movq %r15, %rdi
movq %r13, %rsi
callq 0x1d21a
movsd (%rax), %xmm0
movsd %xmm0, -0x38(%rbp)
leaq -0x168(%rbp), %rdi
movq %r13, %rsi
callq 0x1d1be
movapd -0xa0(%rbp), %xmm0
mulsd -0x78(%rbp), %xmm0
movapd %xmm0, -0xa0(%rbp)
xorpd 0x5b3f(%rip), %xmm0     # 0x25090
movapd %xmm0, -0x190(%rbp)
movsd -0x38(%rbp), %xmm1
mulsd %xmm0, %xmm1
movsd %xmm1, (%rax)
movq %r15, %rdi
movq %r13, %rsi
callq 0x1d21a
movsd (%rax), %xmm0
movsd %xmm0, -0x38(%rbp)
leaq -0xf0(%rbp), %rdi
movq %r12, %rsi
callq 0x1d1be
movsd -0x38(%rbp), %xmm0
mulsd -0xa0(%rbp), %xmm0
movsd %xmm0, (%rax)
movsd 0x38(%rbx), %xmm0
movsd %xmm0, -0x38(%rbp)
movq %r14, %rdi
movq %r12, %rsi
callq 0x1d21a
movsd (%rax), %xmm0
movsd %xmm0, -0xa8(%rbp)
leaq -0x150(%rbp), %rdi
movq %r12, %rsi
callq 0x1d1be
movsd -0x38(%rbp), %xmm0
mulsd -0xc0(%rbp), %xmm0
mulsd 0x5a91(%rip), %xmm0     # 0x25070
mulsd -0xa8(%rbp), %xmm0
movsd %xmm0, (%rax)
movsd 0x38(%rbx), %xmm0
movsd %xmm0, -0x38(%rbp)
movq %r14, %rdi
movq %r12, %rsi
callq 0x1d21a
movsd (%rax), %xmm0
movsd %xmm0, -0xc0(%rbp)
leaq -0x138(%rbp), %rdi
movq %r13, %rsi
callq 0x1d1be
movapd -0x50(%rbp), %xmm0
mulsd -0x38(%rbp), %xmm0
mulsd 0x5a43(%rip), %xmm0     # 0x25070
mulsd -0xc0(%rbp), %xmm0
movsd %xmm0, (%rax)
movsd 0x38(%rbx), %xmm0
movsd %xmm0, -0x50(%rbp)
movq %r14, %rdi
movq %r13, %rsi
callq 0x1d21a
movsd (%rax), %xmm0
movsd %xmm0, -0x38(%rbp)
leaq -0x120(%rbp), %rdi
movq %r13, %rsi
callq 0x1d1be
movsd -0x50(%rbp), %xmm0
mulsd -0x190(%rbp), %xmm0
mulsd 0x59f5(%rip), %xmm0     # 0x25070
mulsd -0x38(%rbp), %xmm0
movsd %xmm0, (%rax)
movsd 0x38(%rbx), %xmm0
movsd %xmm0, -0x50(%rbp)
movq %r14, %rdi
movq %r13, %rsi
callq 0x1d21a
movsd (%rax), %xmm0
movsd %xmm0, -0x38(%rbp)
leaq -0x108(%rbp), %rdi
movq %r12, %rsi
callq 0x1d1be
movapd -0xa0(%rbp), %xmm0
mulsd -0x50(%rbp), %xmm0
mulsd 0x59aa(%rip), %xmm0     # 0x25070
mulsd -0x38(%rbp), %xmm0
movsd %xmm0, (%rax)
movslq 0x34(%rbx), %rax
movq %r13, %r12
cmpq %rax, %r13
jl 0x1f403
movl 0x34(%rbx), %eax
testl %eax, %eax
js 0x1f8f7
leaq 0x70(%rbx), %rax
movq %rax, -0x38(%rbp)
leaq 0xa0(%rbx), %rax
movq %rax, -0xc0(%rbp)
leaq 0x88(%rbx), %rax
movq %rax, -0xa8(%rbp)
leaq 0xb8(%rbx), %rax
movq %rax, -0x190(%rbp)
movq $-0x1, %r14
leaq -0xd8(%rbp), %r15
leaq -0x29(%rbp), %r13
incq %r14
leaq -0x1d0(%rbp), %rdi
movq %r14, %rsi
callq 0x539c
movsd (%rax), %xmm0
movsd %xmm0, -0x70(%rbp)
leaq -0x180(%rbp), %rdi
movq %r14, %rsi
callq 0x539c
movsd (%rax), %xmm0
movsd %xmm0, -0x68(%rbp)
leaq -0x168(%rbp), %rdi
movq %r14, %rsi
callq 0x539c
movsd (%rax), %xmm0
movsd %xmm0, -0x60(%rbp)
leaq -0xf0(%rbp), %rdi
movq %r14, %rsi
callq 0x539c
movsd (%rax), %xmm0
movsd %xmm0, -0x58(%rbp)
movq %r15, %rdi
callq 0x533c
movl $0x4, %edx
leaq -0x90(%rbp), %rdi
leaq -0x70(%rbp), %r12
movq %r12, %rsi
movq %r15, %rcx
callq 0x1843a
movq %r15, %rdi
callq 0x5a80
xorps %xmm0, %xmm0
leaq -0x90(%rbp), %rdi
callq 0x20f00
movsd %xmm0, -0xa0(%rbp)
movsd %xmm1, -0x50(%rbp)
movq -0x38(%rbp), %rdi
movq %r14, %rsi
callq 0x539c
movsd -0xa0(%rbp), %xmm0
movsd %xmm0, (%rax)
movq -0xc0(%rbp), %rdi
movq %r14, %rsi
callq 0x539c
movsd -0x50(%rbp), %xmm0
movsd %xmm0, (%rax)
leaq -0x150(%rbp), %rdi
movq %r14, %rsi
callq 0x539c
movsd (%rax), %xmm0
movsd %xmm0, -0x70(%rbp)
leaq -0x138(%rbp), %rdi
movq %r14, %rsi
callq 0x539c
movsd (%rax), %xmm0
movsd %xmm0, -0x68(%rbp)
leaq -0x120(%rbp), %rdi
movq %r14, %rsi
callq 0x539c
movsd (%rax), %xmm0
movsd %xmm0, -0x60(%rbp)
leaq -0x108(%rbp), %rdi
movq %r14, %rsi
callq 0x539c
movsd (%rax), %xmm0
movsd %xmm0, -0x58(%rbp)
movq %r13, %rdi
callq 0x533c
movl $0x4, %edx
movq %r15, %rdi
movq %r12, %rsi
movq %r13, %rcx
callq 0x1843a
movq %r13, %rdi
callq 0x5a80
xorps %xmm0, %xmm0
movq %r15, %rdi
callq 0x20f00
movsd %xmm0, -0xa0(%rbp)
movsd %xmm1, -0x50(%rbp)
movq -0xa8(%rbp), %rdi
movq %r14, %rsi
callq 0x539c
movsd -0xa0(%rbp), %xmm0
movsd %xmm0, (%rax)
movq -0x190(%rbp), %rdi
movq %r14, %rsi
callq 0x539c
movsd -0x50(%rbp), %xmm0
movsd %xmm0, (%rax)
movq %r15, %rdi
callq 0x53c6
leaq -0x90(%rbp), %rdi
callq 0x53c6
movslq 0x34(%rbx), %rax
cmpq %rax, %r14
jl 0x1f72e
movslq %eax, %r14
leaq -0x70(%rbp), %r15
movq $0x0, (%r15)
leaq -0xd8(%rbp), %r12
movq %r12, %rdi
callq 0x533c
leaq -0x90(%rbp), %rdi
movq %r14, %rsi
movq %r15, %rdx
movq %r12, %rcx
callq 0x18048
leaq -0xd8(%rbp), %rdi
callq 0x5a80
leaq -0x29(%rbp), %r14
movq %r14, %rdi
callq 0x4540
leaq 0x3e9c(%rip), %rsi      # 0x237e4
leaq -0x70(%rbp), %rdi
movq %r14, %rdx
callq 0x4160
leaq -0x70(%rbp), %rsi
movq %rbx, %rdi
callq 0xd1fc
leaq -0xd8(%rbp), %rdi
movq %rax, %rsi
callq 0xd1f2
leaq -0x70(%rbp), %rdi
callq 0x41a0
leaq -0x29(%rbp), %rdi
callq 0x58c6
cmpl $0x0, 0x34(%rbx)
jle 0x1fa69
xorl %r14d, %r14d
leaq -0x1d0(%rbp), %r12
leaq -0xf0(%rbp), %r13
leaq -0x90(%rbp), %r15
leaq -0xd8(%rbp), %rdi
callq 0x53ae
movq %rax, %rdi
movl %r14d, %esi
movsd -0xb0(%rbp), %xmm0
movsd -0x78(%rbp), %xmm1
callq 0x1136e
mulsd 0x56a9(%rip), %xmm0     # 0x25078
movsd %xmm0, -0x50(%rbp)
movq %r12, %rdi
movq %r14, %rsi
callq 0x539c
movsd (%rax), %xmm0
movsd %xmm0, -0xa0(%rbp)
movq %r13, %rdi
movq %r14, %rsi
callq 0x539c
movsd -0xa0(%rbp), %xmm0
addsd (%rax), %xmm0
mulsd -0x50(%rbp), %xmm0
addsd 0x60(%rbx), %xmm0
movsd %xmm0, 0x60(%rbx)
movq %r12, %rdi
movq %r14, %rsi
callq 0x539c
movsd (%rax), %xmm0
movaps %xmm0, -0x50(%rbp)
movq %r13, %rdi
movq %r14, %rsi
callq 0x539c
movapd -0x50(%rbp), %xmm0
addsd (%rax), %xmm0
xorpd 0x5650(%rip), %xmm0     # 0x25090
movapd %xmm0, -0x50(%rbp)
movq %r15, %rdi
movq %r14, %rsi
callq 0x539c
movapd -0x50(%rbp), %xmm0
movlpd %xmm0, (%rax)
incq %r14
movslq 0x34(%rbx), %rax
cmpq %rax, %r14
jl 0x1f9a3
leaq -0x90(%rbp), %r14
xorpd %xmm0, %xmm0
movq %r14, %rdi
callq 0x20f00
addsd %xmm0, %xmm1
movsd %xmm1, 0xd0(%rbx)
leaq -0xd8(%rbp), %rdi
callq 0x53b8
movq %r14, %rdi
callq 0x53c6
leaq -0x1a8(%rbp), %rdi
callq 0x53b8
leaq -0x1b8(%rbp), %rdi
callq 0x53b8
leaq -0x108(%rbp), %rdi
callq 0x53c6
leaq -0x120(%rbp), %rdi
callq 0x53c6
leaq -0x138(%rbp), %rdi
callq 0x53c6
leaq -0x150(%rbp), %rdi
callq 0x53c6
leaq -0xf0(%rbp), %rdi
callq 0x53c6
leaq -0x168(%rbp), %rdi
callq 0x53c6
leaq -0x180(%rbp), %rdi
callq 0x53c6
leaq -0x1d0(%rbp), %rdi
callq 0x53c6
addq $0x1a8, %rsp            # imm = 0x1A8
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %rax, %rbx
leaq -0x70(%rbp), %rdi
callq 0x41a0
jmp 0x1fb37
movq %rax, %rbx
leaq -0x29(%rbp), %rdi
callq 0x58c6
jmp 0x1fc60
jmp 0x1fc43
movq %rax, %rbx
leaq -0x70(%rbp), %rdi
callq 0x41a0
jmp 0x1fb5b
movq %rax, %rbx
leaq -0x90(%rbp), %rdi
callq 0x58c6
jmp 0x1fc7d
movq %rax, %rbx
leaq -0x70(%rbp), %rdi
callq 0x41a0
jmp 0x1fb7d
movq %rax, %rbx
leaq -0x90(%rbp), %rdi
callq 0x58c6
jmp 0x1fc89
movq %rax, %rbx
leaq -0x90(%rbp), %rdi
callq 0x5a80
jmp 0x1fc95
movq %rax, %rbx
leaq -0x108(%rbp), %rdi
callq 0x5a80
jmp 0x1fca1
movq %rax, %rbx
leaq -0x120(%rbp), %rdi
callq 0x5a80
jmp 0x1fcad
movq %rax, %rbx
leaq -0x138(%rbp), %rdi
callq 0x5a80
jmp 0x1fcb9
movq %rax, %rbx
leaq -0x150(%rbp), %rdi
callq 0x5a80
jmp 0x1fcc5
movq %rax, %rbx
leaq -0xf0(%rbp), %rdi
callq 0x5a80
jmp 0x1fcd1
movq %rax, %rbx
leaq -0x168(%rbp), %rdi
callq 0x5a80
jmp 0x1fcdd
movq %rax, %rbx
leaq -0x180(%rbp), %rdi
callq 0x5a80
jmp 0x1fce9
movq %rax, %rbx
leaq -0xd8(%rbp), %rdi
callq 0x53b8
jmp 0x1fc60
jmp 0x1fc6e
jmp 0x1fc6e
movq %rax, %rbx
leaq -0xd8(%rbp), %rdi
callq 0x5a80
jmp 0x1fc71
movq %rax, %rbx
leaq -0x29(%rbp), %rdi
callq 0x5a80
leaq -0x90(%rbp), %rdi
callq 0x53c6
jmp 0x1fc71
movq %rax, %rbx
leaq -0x1a8(%rbp), %rdi
callq 0x53b8
leaq -0x1b8(%rbp), %rdi
callq 0x53b8
leaq -0x108(%rbp), %rdi
callq 0x53c6
leaq -0x120(%rbp), %rdi
callq 0x53c6
leaq -0x138(%rbp), %rdi
callq 0x53c6
leaq -0x150(%rbp), %rdi
callq 0x53c6
leaq -0xf0(%rbp), %rdi
callq 0x53c6
leaq -0x168(%rbp), %rdi
callq 0x53c6
leaq -0x180(%rbp), %rdi
callq 0x53c6
leaq -0x1d0(%rbp), %rdi
callq 0x53c6
movq %rbx, %rdi
callq 0x45a0
nop