// File: /workspace/github_cpp_makefile_star2_O1/joraso[P]Glassius/Protocol.cpp
// Function: Protocol::KobAndersonReplication(double, double, Stopwatch*)
void Protocol::KobAndersonReplication(double Temp, double relax, Stopwatch* timer){
    /* Replication run of the 1995 Kob-Anderson paper. */
    
    std::cout <<"\n"<< "Replication of Kob-Anderson Glass" <<"\n"<< std::endl;
    std::cout << "Using Parameters:" << std::endl;
    std::cout << "Temperature = " << Temp << std::endl;
    std::cout << "RelaxationTime =  " << relax << std::endl;
    
    double rho = 1000 / (9.4*9.4*9.4);
    
    std::cout << "Density = " << rho << std::endl;
    std::cout << "Boxlength = 9.4" << std::endl;
    
    std::cout << "\n" << "Setting up System..." << std::endl;
    Glass System(rho, 5.0, 10);
    timer->StampComplete();
    
    std::cout << "\n" << "Setting up Simulation..." << std::endl;
    Verlet Simulation(&System, 5, 0.01, 10);
    timer->StampComplete();
    
    
    std::cout << "\n" << "Equilibrating at T = 5.0" << std::endl;
     std::cout << "Running for t = 100" << std::endl;
    std::cout << "Recording every = " << Simulation.GetRecord() << std::endl;
    std::cout << "Thermostating every 50 timesteps" << std::endl;
    Simulation.Equilibrate(1000, 50);
    timer->StampComplete();
    
    std::cout << "\n" << "Equilibrating at T = " << Temp << std::endl;
    std::cout << "Running for t = " << relax << std::endl;
    std::cout << "Recording every = " << Simulation.GetRecord() << std::endl;
    std::cout << "Thermostating every 50 timesteps" << std::endl;
    Simulation.SetTemp(Temp);
    System.Thermalize(Temp);
    Simulation.Equilibrate(relax, 50);
    timer->StampComplete();
    
    std::cout << "\n" << "Begining Production Run" << std::endl;
    std::cout << "Running for t = " << relax << std::endl;
    if(Temp<1.0){
        Simulation.Setdt(0.02);
    }
    double dt = Simulation.Getdt();
    std::cout << "Timestep = " << dt << std::endl;
    int Npoints = 10000;
    std::cout << "Total Data Points = " << Npoints << std::endl;
    int Nrec = int( relax / (dt*Npoints) );
    Simulation.SetRecord(Nrec);
    std::cout << "Recording every = " << Simulation.GetRecord() << std::endl;
    Simulation.Run(relax);
    timer->StampComplete();
    
    return;
}

// Assembly:
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
subq $0xf8, %rsp
movq %rdi, %rbx
movsd %xmm1, 0x8(%rsp)
movsd %xmm0, (%rsp)
movq 0x69d1(%rip), %r14      # 0xafd8
leaq 0x3cca(%rip), %r15      # 0x82d8
movl $0x1, %edx
movq %r14, %rdi
movq %r15, %rsi
callq 0x21e0
leaq 0x3cb5(%rip), %rsi      # 0x82da
movl $0x21, %edx
movq %r14, %rdi
callq 0x21e0
movl $0x1, %edx
movq %r14, %rdi
movq %r15, %rsi
callq 0x21e0
movq (%r14), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x21d0
movsbl %al, %esi
movq %r14, %rdi
callq 0x2040
movq %rax, %rdi
callq 0x2120
leaq 0x3c8c(%rip), %rsi      # 0x82fc
movl $0x11, %edx
movq %r14, %rdi
callq 0x21e0
movq (%r14), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x21d0
movsbl %al, %esi
movq %r14, %rdi
callq 0x2040
movq %rax, %rdi
callq 0x2120
leaq 0x3c63(%rip), %rsi      # 0x830e
movl $0xe, %edx
movq %r14, %rdi
callq 0x21e0
movq %r14, %rdi
movsd (%rsp), %xmm0
callq 0x2260
movq %rax, %r12
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r12, %rdi
movl $0xa, %esi
callq 0x21d0
movsbl %al, %esi
movq %r12, %rdi
callq 0x2040
movq %rax, %rdi
callq 0x2120
leaq 0x3c27(%rip), %rsi      # 0x831d
movl $0x12, %edx
movq %r14, %rdi
callq 0x21e0
movq %r14, %rdi
movsd 0x8(%rsp), %xmm0
callq 0x2260
movq %rax, %r12
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r12, %rdi
movl $0xa, %esi
callq 0x21d0
movsbl %al, %esi
movq %r12, %rdi
callq 0x2040
movq %rax, %rdi
callq 0x2120
leaq 0x3bee(%rip), %rsi      # 0x8330
movl $0xa, %edx
movq %r14, %rdi
callq 0x21e0
movsd 0x3b29(%rip), %xmm0     # 0x8280
movq %r14, %rdi
callq 0x2260
movq %rax, %r12
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r12, %rdi
movl $0xa, %esi
callq 0x21d0
movsbl %al, %esi
movq %r12, %rdi
callq 0x2040
movq %rax, %rdi
callq 0x2120
leaq 0x3bab(%rip), %rsi      # 0x833b
movl $0xf, %edx
movq %r14, %rdi
callq 0x21e0
movq (%r14), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x21d0
movsbl %al, %esi
movq %r14, %rdi
callq 0x2040
movq %rax, %rdi
callq 0x2120
movl $0x1, %edx
movq %r14, %rdi
movq %r15, %rsi
callq 0x21e0
leaq 0x3b70(%rip), %rsi      # 0x834b
movl $0x14, %edx
movq %r14, %rdi
callq 0x21e0
movq (%r14), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x21d0
movsbl %al, %esi
movq %r14, %rdi
callq 0x2040
movq %rax, %rdi
callq 0x2120
leaq 0x68(%rsp), %rdi
movsd 0x3a6c(%rip), %xmm1     # 0x8288
movsd 0x3a6c(%rip), %xmm2     # 0x8290
movsd 0x3a54(%rip), %xmm0     # 0x8280
callq 0x6ce4
movq %rbx, %rdi
callq 0x2b8a
movq 0x6798(%rip), %rdi      # 0xafd8
leaq 0x3a91(%rip), %rsi      # 0x82d8
movl $0x1, %edx
callq 0x21e0
movq 0x6780(%rip), %r14      # 0xafd8
leaq 0x3b01(%rip), %rsi      # 0x8360
movl $0x18, %edx
movq %r14, %rdi
callq 0x21e0
movq (%r14), %rax
addq -0x18(%rax), %r14
movq %r14, %rdi
movl $0xa, %esi
callq 0x21d0
movsbl %al, %esi
movq 0x674e(%rip), %rdi      # 0xafd8
callq 0x2040
movq %rax, %rdi
callq 0x2120
leaq 0x10(%rsp), %rdi
leaq 0x68(%rsp), %rsi
movsd 0x39df(%rip), %xmm0     # 0x8288
movsd 0x39e7(%rip), %xmm1     # 0x8298
movl $0xa, %edx
callq 0x6d5c
movq %rbx, %rdi
callq 0x2b8a
movq 0x670e(%rip), %rdi      # 0xafd8
leaq 0x3a07(%rip), %rsi      # 0x82d8
movl $0x1, %edx
callq 0x21e0
movq 0x66f6(%rip), %r14      # 0xafd8
leaq 0x3a90(%rip), %rsi      # 0x8379
movl $0x18, %edx
movq %r14, %rdi
callq 0x21e0
movq (%r14), %rax
addq -0x18(%rax), %r14
movq %r14, %rdi
movl $0xa, %esi
callq 0x21d0
movsbl %al, %esi
movq 0x66c4(%rip), %rdi      # 0xafd8
callq 0x2040
movq %rax, %rdi
callq 0x2120
movq 0x66b0(%rip), %r14      # 0xafd8
leaq 0x3a63(%rip), %rsi      # 0x8392
movl $0x13, %edx
movq %r14, %rdi
callq 0x21e0
movq (%r14), %rax
addq -0x18(%rax), %r14
movq %r14, %rdi
movl $0xa, %esi
callq 0x21d0
movsbl %al, %esi
movq 0x667e(%rip), %rdi      # 0xafd8
callq 0x2040
movq %rax, %rdi
callq 0x2120
movq 0x666a(%rip), %rdi      # 0xafd8
leaq 0x3a31(%rip), %rsi      # 0x83a6
movl $0x12, %edx
callq 0x21e0
movl 0x38(%rsp), %esi
movq 0x664e(%rip), %rdi      # 0xafd8
callq 0x2290
movq %rax, %r14
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x21d0
movsbl %al, %esi
movq %r14, %rdi
callq 0x2040
movq %rax, %rdi
callq 0x2120
movq 0x6618(%rip), %r14      # 0xafd8
leaq 0x39f2(%rip), %rsi      # 0x83b9
movl $0x20, %edx
movq %r14, %rdi
callq 0x21e0
movq (%r14), %rax
addq -0x18(%rax), %r14
movq %r14, %rdi
movl $0xa, %esi
callq 0x21d0
movsbl %al, %esi
movq 0x65e6(%rip), %rdi      # 0xafd8
callq 0x2040
movq %rax, %rdi
callq 0x2120
leaq 0x10(%rsp), %rdi
movsd 0x3894(%rip), %xmm0     # 0x82a0
movl $0x32, %esi
callq 0x3d80
movq %rbx, %rdi
callq 0x2b8a
movq 0x65b3(%rip), %rdi      # 0xafd8
leaq 0x38ac(%rip), %rsi      # 0x82d8
movl $0x1, %edx
callq 0x21e0
movq 0x659b(%rip), %rdi      # 0xafd8
leaq 0x3996(%rip), %rsi      # 0x83da
movl $0x15, %edx
callq 0x21e0
movq 0x6583(%rip), %rdi      # 0xafd8
movsd (%rsp), %xmm0
callq 0x2260
movq %rax, %r14
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x21d0
movsbl %al, %esi
movq %r14, %rdi
callq 0x2040
movq %rax, %rdi
callq 0x2120
movq 0x6548(%rip), %rdi      # 0xafd8
leaq 0x3959(%rip), %rsi      # 0x83f0
movl $0x10, %edx
callq 0x21e0
movq 0x6530(%rip), %rdi      # 0xafd8
movsd 0x8(%rsp), %xmm0
callq 0x2260
movq %rax, %r14
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x21d0
movsbl %al, %esi
movq %r14, %rdi
callq 0x2040
movq %rax, %rdi
callq 0x2120
movq 0x64f4(%rip), %rdi      # 0xafd8
leaq 0x38bb(%rip), %rsi      # 0x83a6
movl $0x12, %edx
callq 0x21e0
movl 0x38(%rsp), %esi
movq 0x64d8(%rip), %rdi      # 0xafd8
callq 0x2290
movq %rax, %r14
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x21d0
movsbl %al, %esi
movq %r14, %rdi
callq 0x2040
movq %rax, %rdi
callq 0x2120
movq 0x64a2(%rip), %r14      # 0xafd8
leaq 0x387c(%rip), %rsi      # 0x83b9
movl $0x20, %edx
movq %r14, %rdi
callq 0x21e0
movq (%r14), %rax
addq -0x18(%rax), %r14
movq %r14, %rdi
movl $0xa, %esi
callq 0x21d0
movsbl %al, %esi
movq 0x6470(%rip), %rdi      # 0xafd8
callq 0x2040
movq %rax, %rdi
callq 0x2120
movsd (%rsp), %xmm0
movsd %xmm0, 0x20(%rsp)
leaq 0x68(%rsp), %rdi
callq 0x3630
leaq 0x10(%rsp), %rdi
movsd 0x8(%rsp), %xmm0
movl $0x32, %esi
callq 0x3d80
movq %rbx, %rdi
callq 0x2b8a
movq 0x642a(%rip), %rdi      # 0xafd8
leaq 0x3723(%rip), %rsi      # 0x82d8
movl $0x1, %edx
callq 0x21e0
movq 0x6412(%rip), %r14      # 0xafd8
leaq 0x3834(%rip), %rsi      # 0x8401
movl $0x17, %edx
movq %r14, %rdi
callq 0x21e0
movq (%r14), %rax
addq -0x18(%rax), %r14
movq %r14, %rdi
movl $0xa, %esi
callq 0x21d0
movsbl %al, %esi
movq 0x63e0(%rip), %rdi      # 0xafd8
callq 0x2040
movq %rax, %rdi
callq 0x2120
movq 0x63cc(%rip), %rdi      # 0xafd8
leaq 0x37dd(%rip), %rsi      # 0x83f0
movl $0x10, %edx
callq 0x21e0
movq 0x63b4(%rip), %rdi      # 0xafd8
movsd 0x8(%rsp), %xmm0
callq 0x2260
movq %rax, %r14
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x21d0
movsbl %al, %esi
movq %r14, %rdi
callq 0x2040
movq %rax, %rdi
callq 0x2120
movsd 0x33f7(%rip), %xmm0     # 0x8058
ucomisd (%rsp), %xmm0
jbe 0x4c77
movabsq $0x3f947ae147ae147b, %rax # imm = 0x3F947AE147AE147B
movq %rax, 0x28(%rsp)
movsd 0x28(%rsp), %xmm0
movsd %xmm0, (%rsp)
movq 0x634f(%rip), %rdi      # 0xafd8
leaq 0x3789(%rip), %rsi      # 0x8419
movl $0xb, %edx
callq 0x21e0
movq 0x6337(%rip), %rdi      # 0xafd8
movsd (%rsp), %xmm0
callq 0x2260
movq %rax, %r14
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x21d0
movsbl %al, %esi
movq %r14, %rdi
callq 0x2040
movq %rax, %rdi
callq 0x2120
movq 0x62fc(%rip), %rdi      # 0xafd8
leaq 0x3742(%rip), %rsi      # 0x8425
movl $0x14, %edx
callq 0x21e0
movq 0x62e4(%rip), %rdi      # 0xafd8
movl $0x2710, %esi           # imm = 0x2710
callq 0x2290
movq %rax, %r14
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x21d0
movsbl %al, %esi
movq %r14, %rdi
callq 0x2040
movq %rax, %rdi
callq 0x2120
movsd (%rsp), %xmm1
mulsd 0x3573(%rip), %xmm1     # 0x82a8
movsd 0x8(%rsp), %xmm0
divsd %xmm1, %xmm0
cvttsd2si %xmm0, %eax
movl %eax, 0x38(%rsp)
movq 0x628a(%rip), %rdi      # 0xafd8
leaq 0x3651(%rip), %rsi      # 0x83a6
movl $0x12, %edx
callq 0x21e0
movl 0x38(%rsp), %esi
movq 0x626e(%rip), %rdi      # 0xafd8
callq 0x2290
movq %rax, %r14
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x21d0
movsbl %al, %esi
movq %r14, %rdi
callq 0x2040
movq %rax, %rdi
callq 0x2120
leaq 0x10(%rsp), %rdi
movsd 0x8(%rsp), %xmm0
callq 0x3fae
movq %rbx, %rdi
callq 0x2b8a
leaq 0x5fe8(%rip), %rax      # 0xada0
leaq 0x50(%rsp), %rcx
movq %rax, -0x40(%rcx)
movq -0x10(%rcx), %rdi
cmpq %rcx, %rdi
je 0x4dcf
callq 0x21b0
leaq 0x5fb2(%rip), %rax      # 0xad88
leaq 0xa8(%rsp), %rdi
movq %rax, -0x40(%rdi)
callq 0x3008
leaq 0x98(%rsp), %rdi
callq 0x3008
leaq 0x88(%rsp), %rdi
callq 0x3008
addq $0xf8, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
retq
jmp 0x4e16
jmp 0x4e1d
jmp 0x4e1d
movq %rax, %rbx
jmp 0x4e3e
jmp 0x4e1d
movq %rax, %rbx
leaq 0x5f79(%rip), %rax      # 0xada0
leaq 0x50(%rsp), %rcx
movq %rax, -0x40(%rcx)
movq -0x10(%rcx), %rdi
cmpq %rcx, %rdi
je 0x4e3e
callq 0x21b0
leaq 0x68(%rsp), %rdi
callq 0x7042
movq %rbx, %rdi
callq 0x22b0