// File: /workspace/github_cpp_makefile_star2_O2/estwings57[P]CasHMC/sources/LinkSlave.cpp
// Function: CasHMC::LinkSlave::Update()
void LinkSlave::Update()
{
	//Extracting flow control and checking CRC, SEQ from linkRxTx packet 
	if(linkRxTx.size() > 0) {
		//Make sure that linkRxTx[0] is not virtual tail packet.
		if(linkRxTx[0] == NULL) {
			ERROR(header<<"  == Error - linkRxTx[0] is NULL (It could be one of virtual tail packet  (CurrentClock : "<<currentClockCycle<<")");
			exit(0);
		}
		else {
			for(int i=0; i<linkRxTx.size(); i++) {
				if(linkRxTx[i]->bufPopDelay == 0) {
					//Link retraining sequence
					if(linkRxTx[i]->CMD == NULL_) {
						//[Responder descrambler initializing]
						//The responder descrambler sync should occur within tRESP1 of the PLL locking
						if(downstream && localLinkMaster->currentState == SLEEP) {
							localLinkMaster->firstNull = true;
							localLinkMaster->currentState = RETRAIN1;
							uint64_t tran = ceil((double)(tRESP1)/tCK);
							localLinkMaster->retrainTransit = currentClockCycle + tran;
						}
						//[Requester descrambler synchronization]
						else if(!downstream && localLinkMaster->currentState == RETRAIN1) {
							localLinkMaster->firstNull = true;
							localLinkMaster->currentState = RETRAIN2;
						}
						//[Responder FLIT synchrony]
						//Responder link lock should occur within tRESP2
						else if(downstream && localLinkMaster->currentState == RETRAIN1) {
							localLinkMaster->firstNull = true;
							localLinkMaster->currentState = RETRAIN2;
							uint64_t tran = ceil((double)(tRESP2)/tCK);
							localLinkMaster->retrainTransit = currentClockCycle + tran;
						}
						//[Requester FLIT synchrony and sending a minimum of 32 NULL FLITs before entering ACTIVE]
						else if(!downstream && localLinkMaster->currentState == RETRAIN2) {
							currentState = ACTIVE;
							localLinkMaster->FinishRetrain();
						}
						//[sending a minimum of 32 NULL FLITs before entering ACTIVE]
						else if(downstream && localLinkMaster->currentState == RETRAIN2) {
							currentState = ACTIVE;
							localLinkMaster->FinishRetrain();
						}
						delete linkRxTx[i];
						linkRxTx.erase(linkRxTx.begin()+i);
						continue;
					}
					
					//Retry control
					if(linkRxTx[i]->CMD == IRTRY) {
						if(linkRxTx[i]->bufPopDelay == 0) {
							linkRxTx[i]->chkRRP = true;
							localLinkMaster->UpdateRetryPointer(linkRxTx[i]);
							if(linkRxTx[i]->FRP == 1) {
								if(localLinkMaster->currentState != LINK_RETRY) {
									localLinkMaster->LinkRetry(linkRxTx[i]);
								}
							}
							else if(linkRxTx[i]->FRP == 2) {
								if(localLinkMaster->currentState == START_RETRY
								|| localLinkMaster->currentState == LINK_RETRY) {
									localLinkMaster->FinishRetry();
									currentState = ACTIVE;
									slaveSEQ = 0;
								}
							}
							delete linkRxTx[i];
							linkRxTx.erase(linkRxTx.begin()+i);
							break;
						}
					}
					else if(currentState == START_RETRY) {
						delete linkRxTx[i];
						linkRxTx.erase(linkRxTx.begin()+i);
						break;
					}
				
					//Flow control
					if(linkRxTx[i]->chkRRP == false) {
						linkRxTx[i]->chkRRP = true;
						localLinkMaster->UpdateRetryPointer(linkRxTx[i]);

						//PRET packet is not saved in the retry buffer (No need to check CRC)
						if(linkRxTx[i]->CMD == PRET) {
							delete linkRxTx[i];
							linkRxTx.erase(linkRxTx.begin()+i);
							break;
						}
					}
					
					//Link low power mode control
					if(linkRxTx[i]->CMD == QUIET) {
						//(upstream) all-way links are checked to enter sleep mode
						if(localLinkMaster->currentState == WAIT) {
							localLinkMaster->currentState = CONFIRM;
							DEBUG(ALI(18)<<header<<ALI(15)<<*linkRxTx[i]<<(downstream ? "Down) " : "Up)   ")
								<<"link is ready to enter LOW POWER mode");
						}
						//(downstream) link is checking the link state to enter sleep mode
						else {
							currentState = WAIT;
							DEBUG(ALI(18)<<header<<ALI(15)<<*linkRxTx[i]<<(downstream ? "Down) " : "Up)   ")
								<<"link is checking the link state to enter sleep mode");
						}
						delete linkRxTx[i];
						linkRxTx.erase(linkRxTx.begin()+i);
						break;
					}
					
					//Count CRC calculation time
					if(linkRxTx[i]->chkRRP == true && linkRxTx[i]->chkCRC == false) {
						if(CRC_CHECK && !startCRC) {
							startCRC = true;
							countdownCRC = ceil((double)CRC_CAL_CYCLE * linkRxTx[i]->LNG);
						}
							
						if(CRC_CHECK && countdownCRC > 0) {
							DEBUG(ALI(18)<<header<<ALI(15)<<*linkRxTx[i]<<(downstream ? "Down) " : "Up)   ")
									<<"WAITING CRC calculation ("<<countdownCRC<<"/"<<ceil((double)CRC_CAL_CYCLE*linkRxTx[i]->LNG)<<")");
						}
						else {
							//Error check
							linkRxTx[i]->chkCRC = true;
							if(CheckNoError(linkRxTx[i])) {
								localLinkMaster->ReturnRetryPointer(linkRxTx[i]);
								localLinkMaster->UpdateToken(linkRxTx[i]);
								if(linkRxTx[i]->CMD != TRET) {
									Receive(linkRxTx[i]);
								}
								else {
									delete linkRxTx[i];
								}
								linkRxTx.erase(linkRxTx.begin()+i);
								break;
							}
							//Error abort mode
							else {
								if(localLinkMaster->retryStartPacket == NULL) {
									localLinkMaster->retryStartPacket = new Packet(*linkRxTx[i]);
								}
								else {
									ERROR(header<<"  == Error - localLinkMaster->retryStartPacket is NOT NULL  (CurrentClock : "<<currentClockCycle<<")");
									exit(0);
								}
								localLinkMaster->StartRetry(linkRxTx[i]);
								localLinkMaster->linkP->statis->errorPerLink[linkSlaveID]++;
								for(int j=0; j<linkRxTx.size(); j++) {
									if(linkRxTx[j] != NULL) {
										delete linkRxTx[j];
									}
									linkRxTx.erase(linkRxTx.begin()+j);
									j--;
								}
								linkRxTx.clear();
								currentState = START_RETRY;
							}
							startCRC = false;
						}
						countdownCRC = (countdownCRC>0) ? countdownCRC-1 : 0;
					}
				}
			}
		}
	}
	
	//Checking the link state to enter sleep mode
	if(currentState == WAIT) {
		//Link is ready for low power mode
		if(localLinkMaster->Buffers.size() == 0
		&& localLinkMaster->retBufReadP == localLinkMaster->retBufWriteP
		&& localLinkMaster->tokenCount == MAX_LINK_BUF) {
			currentState = SLEEP;
			localLinkMaster->currentState = SLEEP;
			localLinkMaster->QuitePacket();
		}
	}

	//Sending packet
	if(Buffers.size() > 0) {
		bool chkRcv = (downstream ? downBufferDest->ReceiveDown(Buffers[0]) : upBufferDest->ReceiveUp(Buffers[0]));
		if(chkRcv) {
			localLinkMaster->ReturnTocken(Buffers[0]);
			DEBUG(ALI(18)<<header<<ALI(15)<<*Buffers[0]<<(downstream ? "Down) " : "Up)   ")
						<<"SENDING packet to "<<(downstream ? "crossbar switch (CS)" : "HMC controller (HC)"));
			Buffers.erase(Buffers.begin(), Buffers.begin()+Buffers[0]->LNG);
		}
		else {
			//DEBUG(ALI(18)<<header<<ALI(15)<<*Buffers[0]<<"(downstream ? "Down) Crossbar switch" : "Up)   HMC controller")<<" buffer FULL");	
		}
	}

	Step();
	for(int i=0; i<linkRxTx.size(); i++) {
		if(linkRxTx[i] != NULL) {
			linkRxTx[i]->bufPopDelay = (linkRxTx[i]->bufPopDelay>0) ? linkRxTx[i]->bufPopDelay-1 : 0;
		}
	}
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movq %rdi, %rbx
movq 0x1e8(%rdi), %rax
movq 0x1f0(%rdi), %rcx
cmpq %rax, %rcx
je 0x1d085
cmpq $0x0, (%rax)
je 0x1d2ca
leaq 0x1e8(%rbx), %r14
leaq 0x20(%rbx), %rdx
movq %rdx, (%rsp)
leaq 0x14ab7(%rip), %r15     # 0x315a0
leaq 0x9c7f(%rip), %r12      # 0x2676f
xorl %r13d, %r13d
subq %rax, %rcx
sarq $0x3, %rcx
cmpq %r13, %rcx
jbe 0x1d085
movq (%rax,%r13,8), %rbp
cmpl $0x0, 0x14(%rbp)
jne 0x1cc97
movl 0x434(%rbp), %eax
testl %eax, %eax
je 0x1cbb9
cmpl $0x3, %eax
je 0x1cee5
cmpl $0xa, 0x200(%rbx)
je 0x1ced9
cmpb $0x0, 0x421(%rbp)
jne 0x1cb6e
movb $0x1, 0x421(%rbp)
movq 0x218(%rbx), %rdi
movq %rbp, %rsi
callq 0x1a142
movq 0x1e8(%rbx), %rax
movq (%rax,%r13,8), %rbp
movl 0x434(%rbp), %eax
cmpl $0x1, %eax
je 0x1ced9
cmpl $0x4, %eax
je 0x1cf3c
cmpb $0x1, 0x421(%rbp)
jne 0x1cc97
cmpb $0x0, 0x420(%rbp)
jne 0x1cc97
leaq 0x14934(%rip), %rax     # 0x314cc
cmpb $0x1, (%rax)
jne 0x1cdf1
cmpb $0x1, 0x228(%rbx)
jne 0x1ccad
movl 0x224(%rbx), %eax
jmp 0x1ccd9
movq 0x218(%rbx), %rbp
movl 0x200(%rbp), %eax
cmpb $0x1, 0x1cc(%rbx)
jne 0x1cbfc
cmpl $0x4, %eax
je 0x1cc19
cmpl $0x3, %eax
je 0x1cc2a
cmpl $0x1, %eax
jne 0x1cc76
movb $0x1, 0x268(%rbp)
movl $0x3, 0x200(%rbp)
leaq 0x14966(%rip), %rax     # 0x31560
jmp 0x1cc42
cmpl $0x4, %eax
je 0x1cc19
cmpl $0x3, %eax
jne 0x1cc76
movb $0x1, 0x268(%rbp)
movl $0x4, 0x200(%rbp)
jmp 0x1cc76
andl $0x0, 0x200(%rbx)
movq %rbp, %rdi
callq 0x1be62
jmp 0x1cc76
movb $0x1, 0x268(%rbp)
movl $0x4, 0x200(%rbp)
leaq 0x14926(%rip), %rax     # 0x31568
movsd (%rax), %xmm0
divsd (%r15), %xmm0
callq 0x4080
cvttsd2si %xmm0, %rax
movq %rax, %rcx
sarq $0x3f, %rcx
subsd 0x95d4(%rip), %xmm0     # 0x26238
cvttsd2si %xmm0, %rdx
andl %ecx, %edx
orl %edx, %eax
addl 0x8(%rbx), %eax
movl %eax, 0x264(%rbp)
movq (%r14), %rax
movq (%rax,%r13,8), %rdi
testq %rdi, %rdi
je 0x1cc8b
movq (%rdi), %rax
callq *0x8(%rax)
movq (%r14), %rax
leaq (%rax,%r13,8), %rsi
movq %r14, %rdi
callq 0x13408
incq %r13
movq 0x1e8(%rbx), %rax
movq 0x1f0(%rbx), %rcx
jmp 0x1caf3
movb $0x1, 0x228(%rbx)
movl 0x430(%rbp), %eax
cvtsi2sd %rax, %xmm0
leaq 0x1480a(%rip), %rax     # 0x314d0
mulsd (%rax), %xmm0
callq 0x4080
cvttsd2si %xmm0, %eax
movl %eax, 0x224(%rbx)
testl %eax, %eax
jle 0x1cdf1
leaq 0x147a0(%rip), %rax     # 0x31488
cmpb $0x1, (%rax)
jne 0x1cebb
leaq 0x14791(%rip), %rax     # 0x31489
cmpb $0x0, (%rax)
jne 0x1cebb
movq 0x142c8(%rip), %rdi     # 0x30fd0
movq (%rdi), %rax
movq -0x18(%rax), %rax
movq $0x12, 0x10(%rdi,%rax)
pushq $0x20
popq %rbp
movl %ebp, %esi
callq 0x4440
movq %rax, %rdi
movq (%rsp), %rsi
callq 0x42b0
movq (%rax), %rcx
movq -0x18(%rcx), %rcx
movq $0xf, 0x10(%rax,%rcx)
movq %rax, %rdi
movl %ebp, %esi
callq 0x4440
movq 0x1e8(%rbx), %rcx
movq (%rcx,%r13,8), %rsi
movq %rax, %rdi
callq 0x1e2c8
cmpb $0x0, 0x1cc(%rbx)
movq %r12, %rsi
leaq 0x99fc(%rip), %rcx      # 0x26768
cmovneq %rcx, %rsi
movq %rax, %rdi
callq 0x4300
movq %rax, %rdi
leaq 0x9e54(%rip), %rsi      # 0x26bd6
callq 0x4300
movl 0x224(%rbx), %esi
movq %rax, %rdi
callq 0x44f0
movq %rax, %rdi
leaq 0x753b(%rip), %rsi      # 0x242da
callq 0x4300
movq %rax, %rbp
movq 0x1e8(%rbx), %rax
movq (%rax,%r13,8), %rax
movl 0x430(%rax), %eax
cvtsi2sd %rax, %xmm0
leaq 0x1470c(%rip), %rax     # 0x314d0
mulsd (%rax), %xmm0
callq 0x4080
movq %rbp, %rdi
callq 0x4470
movq %rax, %rdi
leaq 0xa6f2(%rip), %rsi      # 0x274d1
callq 0x4300
movq %rax, %rdi
callq 0x4180
jmp 0x1cebb
movb $0x1, 0x420(%rbp)
movq %rbx, %rdi
movq %rbp, %rsi
callq 0x1d3d4
movq 0x218(%rbx), %rdi
testb %al, %al
jne 0x1d277
cmpq $0x0, 0x248(%rdi)
jne 0x1d32a
movl $0x468, %edi            # imm = 0x468
callq 0x4310
movq %rax, %rbp
movq (%r14), %rax
movq (%rax,%r13,8), %rsi
movq %rbp, %rdi
callq 0x1df98
movq 0x218(%rbx), %rdi
movq %rbp, 0x248(%rdi)
movq 0x1e8(%rbx), %rax
movq (%rax,%r13,8), %rsi
callq 0x1aa4c
movq 0x218(%rbx), %rax
movq 0x210(%rax), %rax
movq 0x1e0(%rax), %rax
movl 0x204(%rbx), %ecx
movq 0xf8(%rax), %rax
incl (%rax,%rcx,4)
movq 0x1e8(%rbx), %rsi
cmpq %rsi, 0x1f0(%rbx)
je 0x1ceaa
movq (%rsi), %rdi
testq %rdi, %rdi
je 0x1cea0
movq (%rdi), %rax
callq *0x8(%rax)
movq (%r14), %rsi
movq %r14, %rdi
callq 0x13408
jmp 0x1ce7f
movl $0xa, 0x200(%rbx)
movb $0x0, 0x228(%rbx)
movl 0x224(%rbx), %eax
leal -0x1(%rax), %ecx
testl %eax, %eax
movl $0x0, %eax
cmovlel %eax, %ecx
movl %ecx, 0x224(%rbx)
jmp 0x1cc97
movq (%rbp), %rax
movq %rbp, %rdi
jmp 0x1d073
movb $0x1, 0x421(%rbp)
movq 0x218(%rbx), %rdi
movq %rbp, %rsi
callq 0x1a142
movq 0x1e8(%rbx), %rax
movq (%rax,%r13,8), %rsi
movl 0x448(%rsi), %eax
cmpl $0x2, %eax
je 0x1d03c
cmpl $0x1, %eax
jne 0x1d064
movq 0x218(%rbx), %rdi
cmpl $0xb, 0x200(%rdi)
je 0x1d064
callq 0x1ac5c
jmp 0x1d064
movq 0x218(%rbx), %rax
cmpl $0x5, 0x200(%rax)
jne 0x1cf7f
movl $0x6, 0x200(%rax)
leaq 0x1452b(%rip), %rax     # 0x31488
cmpb $0x1, (%rax)
jne 0x1d064
leaq 0x1451c(%rip), %rax     # 0x31489
cmpb $0x0, (%rax)
jne 0x1d064
leaq 0x9e8b(%rip), %r15      # 0x26e08
jmp 0x1cfb0
movl $0x5, 0x200(%rbx)
leaq 0x144f8(%rip), %rax     # 0x31488
cmpb $0x1, (%rax)
jne 0x1d064
leaq 0x144e9(%rip), %rax     # 0x31489
cmpb $0x0, (%rax)
jne 0x1d064
leaq 0x9e7e(%rip), %r15      # 0x26e2e
movq 0x14019(%rip), %rdi     # 0x30fd0
movq (%rdi), %rax
movq -0x18(%rax), %rax
movq $0x12, 0x10(%rdi,%rax)
pushq $0x20
popq %rbp
movl %ebp, %esi
callq 0x4440
movq %rax, %rdi
movq (%rsp), %rsi
callq 0x42b0
movq (%rax), %rcx
movq -0x18(%rcx), %rcx
movq $0xf, 0x10(%rax,%rcx)
movq %rax, %rdi
movl %ebp, %esi
callq 0x4440
movq 0x1e8(%rbx), %rcx
movq (%rcx,%r13,8), %rsi
movq %rax, %rdi
callq 0x1e2c8
cmpb $0x0, 0x1cc(%rbx)
leaq 0x9750(%rip), %rcx      # 0x26768
cmovneq %rcx, %r12
movq %rax, %rdi
movq %r12, %rsi
callq 0x4300
movq %rax, %rdi
movq %r15, %rsi
callq 0x4300
movq %rax, %rdi
callq 0x4180
jmp 0x1d064
movq 0x218(%rbx), %rdi
movl 0x200(%rdi), %eax
andl $-0x2, %eax
cmpl $0xa, %eax
jne 0x1d064
callq 0x1b052
andl $0x0, 0x200(%rbx)
andl $0x0, 0x220(%rbx)
movq (%r14), %rax
movq (%rax,%r13,8), %rdi
testq %rdi, %rdi
je 0x1d079
movq (%rdi), %rax
callq *0x8(%rax)
movq (%r14), %rax
leaq (%rax,%r13,8), %rsi
movq %r14, %rdi
callq 0x13408
cmpl $0x5, 0x200(%rbx)
jne 0x1d0d8
movq 0x218(%rbx), %rdi
movq 0x1d8(%rdi), %rax
cmpq 0x1d0(%rdi), %rax
jne 0x1d0d8
movl 0x25c(%rdi), %eax
cmpl 0x260(%rdi), %eax
jne 0x1d0d8
movl 0x208(%rdi), %eax
leaq 0x143f8(%rip), %rcx     # 0x314b8
cmpl (%rcx), %eax
jne 0x1d0d8
pushq $0x1
popq %rax
movl %eax, 0x200(%rbx)
movl %eax, 0x200(%rdi)
callq 0x1bd3c
movq 0x1d0(%rbx), %rax
cmpq %rax, 0x1d8(%rbx)
je 0x1d221
movq (%rax), %rsi
cmpb $0x1, 0x1cc(%rbx)
jne 0x1d106
movq 0x208(%rbx), %rdi
callq 0x13340
jmp 0x1d112
movq 0x210(%rbx), %rdi
callq 0x1dc5a
testb %al, %al
je 0x1d221
leaq 0x1d0(%rbx), %r14
movq 0x1d0(%rbx), %rax
movq 0x218(%rbx), %rdi
movq (%rax), %rsi
callq 0x1a68a
leaq 0x1434a(%rip), %rax     # 0x31488
cmpb $0x1, (%rax)
jne 0x1d209
leaq 0x1433b(%rip), %rax     # 0x31489
cmpb $0x0, (%rax)
jne 0x1d209
movq 0x13e72(%rip), %rdi     # 0x30fd0
movq (%rdi), %rax
movq -0x18(%rax), %rax
movq $0x12, 0x10(%rdi,%rax)
pushq $0x20
popq %rbp
movl %ebp, %esi
callq 0x4440
leaq 0x20(%rbx), %rsi
movq %rax, %rdi
callq 0x42b0
movq (%rax), %rcx
movq -0x18(%rcx), %rcx
movq $0xf, 0x10(%rax,%rcx)
movq %rax, %rdi
movl %ebp, %esi
callq 0x4440
movq 0x1d0(%rbx), %rcx
movq (%rcx), %rsi
movq %rax, %rdi
callq 0x1e2c8
leaq 0x95b1(%rip), %rcx      # 0x26768
leaq 0x95b1(%rip), %rsi      # 0x2676f
cmpb $0x0, 0x1cc(%rbx)
cmovneq %rcx, %rsi
movq %rax, %rdi
callq 0x4300
leaq 0x9cd7(%rip), %rsi      # 0x26eaf
movq %rax, %rdi
callq 0x4300
leaq 0xac4b(%rip), %rcx      # 0x27e32
leaq 0x770e(%rip), %rsi      # 0x248fc
cmpb $0x0, 0x1cc(%rbx)
cmovneq %rcx, %rsi
movq %rax, %rdi
callq 0x4300
movq %rax, %rdi
callq 0x4180
movq (%r14), %rsi
movq (%rsi), %rax
movl 0x430(%rax), %eax
leaq (%rsi,%rax,8), %rdx
movq %r14, %rdi
callq 0x132b4
movq %rbx, %rdi
callq 0x1c69e
movq 0x1e8(%rbx), %rax
movq 0x1f0(%rbx), %rcx
subq %rax, %rcx
sarq $0x3, %rcx
xorl %edx, %edx
xorl %esi, %esi
cmpq %rsi, %rcx
je 0x1d268
movq (%rax,%rsi,8), %rdi
testq %rdi, %rdi
je 0x1d263
movl 0x14(%rdi), %r8d
leal -0x1(%r8), %r9d
testl %r8d, %r8d
cmovlel %edx, %r9d
movl %r9d, 0x14(%rdi)
incq %rsi
jmp 0x1d242
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq 0x1e8(%rbx), %rax
movq (%rax,%r13,8), %rsi
callq 0x1a286
movq 0x1e8(%rbx), %rax
movq 0x218(%rbx), %rdi
movq (%rax,%r13,8), %rsi
callq 0x1a4ea
movq 0x1e8(%rbx), %rax
movq (%rax,%r13,8), %rsi
cmpl $0x2, 0x434(%rsi)
jne 0x1d2bd
movq (%rsi), %rax
movq %rsi, %rdi
jmp 0x1d073
movq %rbx, %rdi
callq 0x13460
jmp 0x1d076
movq 0x13d1f(%rip), %rdi     # 0x30ff0
leaq 0x6d4a(%rip), %rsi      # 0x24022
callq 0x4300
leaq 0x9a2c(%rip), %rsi      # 0x26d10
movq %rax, %rdi
callq 0x4300
leaq 0x7584(%rip), %rsi      # 0x24877
movq %rax, %rdi
callq 0x4300
pushq $0x49
popq %rsi
movq %rax, %rdi
callq 0x44f0
leaq 0x6d34(%rip), %rsi      # 0x24041
movq %rax, %rdi
callq 0x4300
leaq 0x20(%rbx), %rsi
movq %rax, %rdi
callq 0x42b0
leaq 0x9a85(%rip), %rsi      # 0x26dad
jmp 0x1d38a
movq 0x13cbf(%rip), %rdi     # 0x30ff0
leaq 0x6cea(%rip), %rsi      # 0x24022
callq 0x4300
leaq 0x99cc(%rip), %rsi      # 0x26d10
movq %rax, %rdi
callq 0x4300
leaq 0x7524(%rip), %rsi      # 0x24877
movq %rax, %rdi
callq 0x4300
movq %rax, %rdi
movl $0xd2, %esi
callq 0x44f0
leaq 0x6cd2(%rip), %rsi      # 0x24041
movq %rax, %rdi
callq 0x4300
movq %rax, %rdi
movq (%rsp), %rsi
callq 0x42b0
leaq 0x9ad8(%rip), %rsi      # 0x26e62
movq %rax, %rdi
callq 0x4300
movq 0x8(%rbx), %rsi
movq %rax, %rdi
callq 0x40d0
leaq 0xa12c(%rip), %rsi      # 0x274d1
movq %rax, %rdi
callq 0x4300
movq %rax, %rdi
callq 0x4180
xorl %edi, %edi
callq 0x4370
movq %rax, %rbx
movl $0x468, %esi            # imm = 0x468
movq %rbp, %rdi
callq 0x4320
movq %rbx, %rdi
callq 0x4520