// File: jeffchan[P]blockchain-parser/BlockChain.cpp
// Function: BitcoinTransactionFactory::saveStatistics(bool)
void saveStatistics(bool record_addresses)
	{
		if ( record_addresses )
		{
			saveAddressesOverTime();
		}
		FILE *fph = fopen("stats.csv", "wb");
		if ( !fph ) 
		{
			printf("Failed to open statistics output file 'stats.csv' for write access.\r\n");
			return;
		}

// BitcoinAddress Summary Results first

		AgeStat ageStats[AM_LAST];

		// First compute how many bitcoin addresses have a balance over a minimum bitcoin size (we will start with just one)
		uint32_t plotCount = 0;
		for (uint32_t i=0; i<mAddresses.size(); i++) // print one in every 10,000 addresses (just for testing right now)
		{
			BitcoinAddress *ba = mAddresses.getKey(i);
			uint64_t balance = ba->mTotalReceived-ba->mTotalSent;

			uint32_t days = ba->getDaysSinceLastUsed();
			if ( days <= 1 )
			{
				ageStats[AM_ONE_DAY].addValue(balance);
			}
			else if ( days <= 7 )
			{
				ageStats[AM_ONE_WEEK].addValue(balance);
			}
			else if ( days <= 30 )
			{
				ageStats[AM_ONE_MONTH].addValue(balance);
			}
			else if ( days <= (30*3) )
			{
				ageStats[AM_THREE_MONTHS].addValue(balance);
			}
			else if ( days <= (30*6) )
			{
				ageStats[AM_SIX_MONTHS].addValue(balance);
			}
			else if ( days <= 365 )
			{
				ageStats[AM_ONE_YEAR].addValue(balance);
			}
			else if ( days <= 365*2 )
			{
				ageStats[AM_TWO_YEARS].addValue(balance);
			}
			else if ( days <= 365*3 )
			{
				ageStats[AM_THREE_YEARS].addValue(balance);
			}
			else if ( days <= 365*4 )
			{
				ageStats[AM_FOUR_YEARS].addValue(balance);
			}
			else
			{
				ageStats[AM_FIVE_YEARS].addValue(balance);
			}
			if ( balance >= ONE_BTC )
			{
				plotCount++;
			}
		}



		if ( plotCount )
		{
#define MAX_PLOT_COUNT 150000
			BitcoinAddress **sortPointers = new BitcoinAddress*[plotCount];
			uint32_t plotCount = 0;
			for (uint32_t i=0; i<mAddresses.size(); i++) // print one in every 10,000 addresses (just for testing right now)
			{
				BitcoinAddress *ba = mAddresses.getKey(i);
				uint64_t balance = ba->mTotalReceived-ba->mTotalSent;
				if ( balance >= ONE_BTC )
				{
					sortPointers[plotCount] = ba;
					plotCount++;
				}
			}
			uint32_t reportCount = plotCount;
			fprintf(fph,"\r\n");
			fprintf(fph,"\"BlockChain Statistics Report generated by: https://code.google.com/p/blockchain/ \"\r\n" );
			fprintf(fph,"\r\n");
			fprintf(fph,"\"Written by John W. Ratcliff mailto:jratcliffscarab@gmail.com\"\r\n" );
			fprintf(fph,"\"Website: http://codesuppository.blogspot.com/\"\r\n" );
			fprintf(fph,"\"TipJar Address: 1BT66EoaGySkbY9J6MugvQRhMMXDwPxPya\"\r\n" );

			fprintf(fph,"\r\n");
			fprintf(fph,"Bitcoin value distribution based on age.\r\n");
			fprintf(fph,"Age,Value,Count\r\n");
			for (uint32_t i=0; i<AM_LAST; i++)
			{
				AgeStat &as = ageStats[i];
				fprintf(fph,"%s,%d,%d\r\n", getAgeString((AgeMarker)i), (uint32_t)(as.mTotalValue/ONE_BTC), as.mCount );
			}
			fprintf(fph,"\r\n");


			fprintf(fph,"\"Found %s addreses with a bitcoin balance of 1btc or more.\"\r\n", formatNumber(plotCount));
			if ( plotCount > MAX_PLOT_COUNT )
			{
				reportCount = MAX_PLOT_COUNT;
				fprintf(fph,"\"Exceeded maximum plot count, so only reporting the first %s addresses.\"\r\n", formatNumber(reportCount));
			}
			{
				fprintf(fph,"\"Scatter Plot Data values of %s bitcoin address balances with over 1btc and number of days since last transaction. Sorted by Balance\"\r\n", formatNumber(plotCount));
				fprintf(fph,"Days,Value,FirstUsed,LastReceived,LastSpent,TotalSent,TotalReceived,TransactionCount,PublicKeyAddress\r\n");
				SortByBalance sb(sortPointers,plotCount);
				time_t currentTime;
				time(&currentTime); // get the current time.
				for (uint32_t i=0; i<reportCount; i++)
				{
					BitcoinAddress *ba = sortPointers[i];
					uint64_t balance = ba->mTotalReceived-ba->mTotalSent;
					uint32_t lastUsed = ba->mLastInputTime; // the last time we sent money (not received because anyone can send us money).
					if ( ba->mLastInputTime == 0 ) // if it has never had a spend.. then we use the time of first receive..
					{
						lastUsed = ba->mFirstOutputTime;
					}
					double seconds = difftime(currentTime,time_t(lastUsed));
					double minutes = seconds/60;
					double hours = minutes/60;
					uint32_t days = (uint32_t) (hours/24);
					uint32_t adr = mAddresses.getIndex(ba)+1;

					fprintf(fph,"%d,", days );
					fprintf(fph,"%d,", (uint32_t)( balance / ONE_BTC ));
					fprintf(fph,"\"%s\",", getTimeString(ba->mFirstOutputTime));
					fprintf(fph,"\"%s\",", getTimeString(ba->mLastOutputTime));
					fprintf(fph,"\"%s\",", getTimeString(ba->mLastInputTime));
					fprintf(fph,"%0.2f,", (float)ba->mTotalSent / ONE_BTC );
					fprintf(fph,"%0.2f,", (float) ba->mTotalReceived / ONE_BTC );
					fprintf(fph,"%d,", ba->mTransactionCount );
					fprintf(fph,"%s\r\n", getKey(adr) );

				}
				fprintf(fph,"\r\n");
			}
			{
				fprintf(fph,"\"Scatter Plot Data values of %s bitcoin address balances with over 1btc and number of days since last transaction. Sorted by Age\"\r\n", formatNumber(plotCount));
				fprintf(fph,"Days,Value,FirstUsed,LastReceived,LastSpent,TotalSent,TotalReceived,TransactionCount,PublicKeyAddress\r\n");

				SortByAge sb(sortPointers,plotCount);
				time_t currentTime;
				time(&currentTime); // get the current time.
				for (uint32_t i=0; i<reportCount; i++)
				{
					BitcoinAddress *ba = sortPointers[i];
					uint64_t balance = ba->mTotalReceived-ba->mTotalSent;
					uint32_t days = ba->getDaysSinceLastUsed();
					uint32_t adr = mAddresses.getIndex(ba)+1;
					fprintf(fph,"%d,", days );
					fprintf(fph,"%d,", (uint32_t)( balance / ONE_BTC ));
					fprintf(fph,"\"%s\",", getTimeString(ba->mFirstOutputTime));
					fprintf(fph,"\"%s\",", getTimeString(ba->mLastOutputTime));
					fprintf(fph,"\"%s\",", getTimeString(ba->mLastInputTime));
					fprintf(fph,"%0.2f,", (float)ba->mTotalSent / ONE_BTC );
					fprintf(fph,"%0.2f,", (float) ba->mTotalReceived / ONE_BTC );
					fprintf(fph,"%d,", ba->mTransactionCount );
					fprintf(fph,"%s\r\n", getKey(adr) );

				}
				fprintf(fph,"\r\n");
			}
			delete []sortPointers;
		}
//


		const char *months[12] = { "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" };
		{
			fprintf(fph,"\r\n");
			fprintf(fph,"Summary statistics for %d months.\r\n", mStatCount );
			fprintf(fph,"\r\n");


			fprintf(fph,"Date,");					// Date of this row
			fprintf(fph,"ZombieValue,");			// The total value of all zombie addresses
			fprintf(fph,"ZombieCount,");			// The number of zombie addresses
			fprintf(fph,"TotalBTC,");				// Total BTC in circulation
			fprintf(fph,"TotalActiveBTC,");			// Total non-zombie BTC
			fprintf(fph,"AddressesUsed,");			// Total addresses used.
			fprintf(fph,"AddressesWithBalance,");	// Total non-zero addresses.
			fprintf(fph,"ZeroBalanceCount,");		// Number of zero balance addresses.
			fprintf(fph,"DustCount,");				// The number of dust addresses < 1mbtc
			fprintf(fph,"DustAmount,");				// The total amount in all dust addresses.
			fprintf(fph,"AddressOneBTCCount,");		// The number of addresses with at least 1btc or more.
			fprintf(fph,"AddressOneBTCValue,");		// The total value of all addresses with at least 1btc or more.
			fprintf(fph,"Address1KCount,");			// The number of addresses with more than 1,000 btc in them.
			fprintf(fph,"Address1KValue,");		// The total value of all addresses with more than 1,000 btc
			fprintf(fph,"NewAddressCount,");		// Number of new addresses with a non-zero balance created
			fprintf(fph,"ZeroAddressCount,");		// number of addresses who's balance went down to zero.
			fprintf(fph,"ChangeAddressCount,");		// number of addresses who had changes against them.
			fprintf(fph,"SameAddressCount,");		// The number of addresses with no change.
			fprintf(fph,"RiseFromDeadCount,");		// number of addresses which rose from the dead.
			fprintf(fph,"RiseFromDeadAmount\r\n");	// 

			for (uint32_t i=0; i<mStatCount; i++)
			{
				StatRow &row = mStatistics[i];
				time_t tnow(row.mTime);
				struct tm beg;
				beg = *localtime(&tnow);

				uint32_t addressUsed = row.mCount;
				uint32_t zeroCount = row.mStats[SS_ZERO].mCount;
				uint32_t addressWithBalance = addressUsed - zeroCount;

				uint32_t dustCount = row.mStats[SS_ONE_MBTC].mCount;
				uint64_t dustAmount = row.mStats[SS_ONE_MBTC].mValue;

				uint32_t addressOneBTCCount = 0;
				uint64_t addressOneBTCTotal = 0;
				uint32_t addressOneKCount = 0;
				uint64_t addressOneKTotal = 0;

				for (uint32_t i=SS_FIVE_BTC; i<SS_MAX_BTC; i++)
				{
					addressOneBTCCount+=row.mStats[i].mCount;
					addressOneBTCTotal+=row.mStats[i].mValue;
					if ( i > SS_ONE_THOUSAND_BTC )
					{
						addressOneKCount+=row.mStats[i].mCount;
						addressOneKTotal+=row.mStats[i].mValue;
					}
				}

				
				// Date
				fprintf(fph,"\"%s %d %d\",",months[beg.tm_mon], beg.tm_mday, beg.tm_year+1900); 
				fprintf(fph,"%d,", (uint32_t)(row.mZombieTotal/ONE_BTC) );
				fprintf(fph,"%d,", row.mZombieCount );

				fprintf(fph,"%d,", (uint32_t)(row.mValue / ONE_BTC) );
				fprintf(fph,"%d,", (uint32_t)((row.mValue-row.mZombieTotal)/ ONE_BTC) );

				fprintf(fph,"%d,", addressUsed );
				fprintf(fph,"%d,", addressWithBalance );
				fprintf(fph,"%d,", zeroCount );
				fprintf(fph,"%d,", dustCount );
				fprintf(fph,"%d,", (uint32_t)(dustAmount / ONE_BTC) );
				fprintf(fph,"%d,", addressOneBTCCount );
				fprintf(fph,"%d,", (uint32_t) (addressOneBTCTotal / ONE_BTC) );
				fprintf(fph,"%d,", addressOneKCount );
				fprintf(fph,"%d,", (uint32_t) (addressOneKTotal / ONE_BTC) );

				fprintf(fph,"%d,", row.mNewAddressCount );
				fprintf(fph,"%d,", row.mDeleteAddressCount );
				fprintf(fph,"%d,", row.mChangeAddressCount );
				fprintf(fph,"%d,", row.mSameAddressCount );
				fprintf(fph,"%d,", row.mRiseFromDeadCount );
				fprintf(fph,"%d,", row.mRiseFromDeadAmount );

				fprintf(fph,"\r\n");
			}

			fprintf(fph,"\r\n");
		}
	
		{
			fprintf(fph,"\r\n");
			fprintf(fph,"Bitcoin Public Key Address Distribution Count by balance.\r\n");
			fprintf(fph,"\r\n");
			fprintf(fph,",");
			for (uint32_t i=0; i<SS_COUNT; i++)
			{
				fprintf(fph,"\"%s\",", mStatLabel[i]);
			}
			fprintf(fph,"\r\n");
			for (uint32_t i=0; i<mStatCount; i++)
			{
				StatRow &row = mStatistics[i];
				time_t tnow(row.mTime);
				struct tm beg;
				beg = *localtime(&tnow);
				fprintf(fph,"\"%s %d %d\",", months[beg.tm_mon], beg.tm_mday, beg.tm_year+1900);
				for (uint32_t j=0; j<SS_COUNT; j++)
				{
					StatValue &v = row.mStats[j];
					fprintf(fph,"%d,",v.mCount);
				}
				fprintf(fph,"\r\n");
			}
			fprintf(fph,"\r\n");
		}

		{
			fprintf(fph,"\r\n");
			fprintf(fph,"Bitcoin Public Key Address Distribution Total Value by balance.\r\n");
			fprintf(fph,"\r\n");
			fprintf(fph,",");
			for (uint32_t i=0; i<SS_COUNT; i++)
			{
				fprintf(fph,"\"%s\",", mStatLabel[i]);
			}
			fprintf(fph,"\r\n");
			for (uint32_t i=0; i<mStatCount; i++)
			{
				StatRow &row = mStatistics[i];
				time_t tnow(row.mTime);
				struct tm beg;
				beg = *localtime(&tnow);
				fprintf(fph,"\"%s %d %d\",", months[beg.tm_mon], beg.tm_mday, beg.tm_year+1900);
				for (uint32_t j=0; j<SS_COUNT; j++)
				{
					StatValue &v = row.mStats[j];
					fprintf(fph,"%0.4f,",(float)v.mValue/ONE_BTC);
				}
				fprintf(fph,"\r\n");
			}
			fprintf(fph,"\r\n");
		}


		{
			fprintf(fph,"\r\n");
			fprintf(fph,"NORMALIZED : Bitcoin Public Key Address Distribution Count by balance.\r\n");
			fprintf(fph,"\r\n");
			fprintf(fph,",");
			for (uint32_t i=1; i<SS_COUNT; i++)
			{
				fprintf(fph,"\"%s\",", mStatLabel[i]);
			}
			fprintf(fph,"\r\n");
			for (uint32_t i=0; i<mStatCount; i++)
			{
				StatRow &row = mStatistics[i];
				time_t tnow(row.mTime);
				struct tm beg;
				beg = *localtime(&tnow);
				fprintf(fph,"\"%s %d\",", months[beg.tm_mon], beg.tm_year+1900);
				for (uint32_t j=1; j<SS_COUNT; j++)
				{
					StatValue &v = row.mStats[j];
					float value = (float)v.mCount*100.0f / (float)(row.mCount-row.mStats[0].mCount);
					fprintf(fph,"%0.4f,", value );
				}
				fprintf(fph,"\r\n");
			}
			fprintf(fph,"\r\n");
		}

		{
			fprintf(fph,"\r\n");
			fprintf(fph,"NORMALIZED: Bitcoin Public Key Address Distribution Total Value by balance.\r\n");
			fprintf(fph,"\r\n");
			fprintf(fph,",");
			for (uint32_t i=1; i<SS_COUNT; i++)
			{
				fprintf(fph,"\"%s\",", mStatLabel[i]);
			}
			fprintf(fph,"\r\n");
			for (uint32_t i=0; i<mStatCount; i++)
			{
				StatRow &row = mStatistics[i];
				time_t tnow(row.mTime);
				struct tm beg;
				beg = *localtime(&tnow);
				fprintf(fph,"\"%s %d\",", months[beg.tm_mon], beg.tm_year+1900);
				for (uint32_t j=1; j<SS_COUNT; j++)
				{
					StatValue &v = row.mStats[j];
					float value = (float)(v.mValue)*100.0f / (float)row.mValue;
					fprintf(fph,"%0.4f,",value);
				}
				fprintf(fph,"\r\n");
			}
			fprintf(fph,"\r\n");
		}


		fclose(fph);
	}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x550, %rsp            # imm = 0x550
movb %sil, %al
movq %rdi, -0x8(%rbp)
andb $0x1, %al
movb %al, -0x9(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x418(%rbp)
testb $0x1, -0x9(%rbp)
je 0x1f764
movq -0x418(%rbp), %rdi
callq 0x213d0
leaq 0x12438(%rip), %rdi     # 0x31ba3
leaq 0x1243b(%rip), %rsi     # 0x31bad
callq 0x2190
movq %rax, -0x18(%rbp)
cmpq $0x0, -0x18(%rbp)
jne 0x1f795
leaq 0x12427(%rip), %rdi     # 0x31bb0
movb $0x0, %al
callq 0x2050
jmp 0x213b8
leaq -0xc0(%rbp), %rax
movq %rax, %rcx
addq $0xa0, %rcx
movq %rcx, -0x428(%rbp)
movq %rax, -0x420(%rbp)
movq -0x420(%rbp), %rdi
movq %rdi, -0x430(%rbp)
callq 0x21af0
movq -0x430(%rbp), %rax
movq -0x428(%rbp), %rcx
addq $0x10, %rax
cmpq %rcx, %rax
movq %rax, -0x420(%rbp)
jne 0x1f7b4
movl $0x0, -0xc4(%rbp)
movl $0x0, -0xc8(%rbp)
movq -0x418(%rbp), %rdi
movl -0xc8(%rbp), %eax
movl %eax, -0x434(%rbp)
callq 0x1d960
movl %eax, %ecx
movl -0x434(%rbp), %eax
cmpl %ecx, %eax
jae 0x1fa17
movq -0x418(%rbp), %rdi
movl -0xc8(%rbp), %esi
callq 0x1d360
movq %rax, -0xd0(%rbp)
movq -0xd0(%rbp), %rax
movq 0x28(%rax), %rax
movq -0xd0(%rbp), %rcx
subq 0x20(%rcx), %rax
movq %rax, -0xd8(%rbp)
movq -0xd0(%rbp), %rdi
callq 0x21b10
movl %eax, -0xdc(%rbp)
cmpl $0x1, -0xdc(%rbp)
ja 0x1f88a
leaq -0xc0(%rbp), %rdi
movq -0xd8(%rbp), %rsi
callq 0x21ba0
jmp 0x1f9e5
cmpl $0x7, -0xdc(%rbp)
ja 0x1f8af
leaq -0xc0(%rbp), %rdi
addq $0x10, %rdi
movq -0xd8(%rbp), %rsi
callq 0x21ba0
jmp 0x1f9e3
cmpl $0x1e, -0xdc(%rbp)
ja 0x1f8d4
leaq -0xc0(%rbp), %rdi
addq $0x20, %rdi
movq -0xd8(%rbp), %rsi
callq 0x21ba0
jmp 0x1f9e1
cmpl $0x5a, -0xdc(%rbp)
ja 0x1f8f9
leaq -0xc0(%rbp), %rdi
addq $0x30, %rdi
movq -0xd8(%rbp), %rsi
callq 0x21ba0
jmp 0x1f9df
cmpl $0xb4, -0xdc(%rbp)
ja 0x1f921
leaq -0xc0(%rbp), %rdi
addq $0x40, %rdi
movq -0xd8(%rbp), %rsi
callq 0x21ba0
jmp 0x1f9dd
cmpl $0x16d, -0xdc(%rbp)     # imm = 0x16D
ja 0x1f949
leaq -0xc0(%rbp), %rdi
addq $0x50, %rdi
movq -0xd8(%rbp), %rsi
callq 0x21ba0
jmp 0x1f9db
cmpl $0x2da, -0xdc(%rbp)     # imm = 0x2DA
ja 0x1f96e
leaq -0xc0(%rbp), %rdi
addq $0x60, %rdi
movq -0xd8(%rbp), %rsi
callq 0x21ba0
jmp 0x1f9d9
cmpl $0x447, -0xdc(%rbp)     # imm = 0x447
ja 0x1f993
leaq -0xc0(%rbp), %rdi
addq $0x70, %rdi
movq -0xd8(%rbp), %rsi
callq 0x21ba0
jmp 0x1f9d7
cmpl $0x5b4, -0xdc(%rbp)     # imm = 0x5B4
ja 0x1f9bb
leaq -0xc0(%rbp), %rdi
addq $0x80, %rdi
movq -0xd8(%rbp), %rsi
callq 0x21ba0
jmp 0x1f9d5
leaq -0xc0(%rbp), %rdi
addq $0x90, %rdi
movq -0xd8(%rbp), %rsi
callq 0x21ba0
jmp 0x1f9d7
jmp 0x1f9d9
jmp 0x1f9db
jmp 0x1f9dd
jmp 0x1f9df
jmp 0x1f9e1
jmp 0x1f9e3
jmp 0x1f9e5
cmpq $0x5f5e100, -0xd8(%rbp) # imm = 0x5F5E100
jb 0x1fa01
movl -0xc4(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xc4(%rbp)
jmp 0x1fa03
movl -0xc8(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xc8(%rbp)
jmp 0x1f7f9
cmpl $0x0, -0xc4(%rbp)
je 0x20442
movl -0xc4(%rbp), %eax
movl $0x8, %ecx
mulq %rcx
movq %rax, %rdi
seto %cl
movq $-0x1, %rax
testb $0x1, %cl
cmovneq %rax, %rdi
callq 0x2040
movq %rax, -0xe8(%rbp)
movl $0x0, -0xec(%rbp)
movl $0x0, -0xf0(%rbp)
movq -0x418(%rbp), %rdi
movl -0xf0(%rbp), %eax
movl %eax, -0x438(%rbp)
callq 0x1d960
movl %eax, %ecx
movl -0x438(%rbp), %eax
cmpl %ecx, %eax
jae 0x1fb0e
movq -0x418(%rbp), %rdi
movl -0xf0(%rbp), %esi
callq 0x1d360
movq %rax, -0xf8(%rbp)
movq -0xf8(%rbp), %rax
movq 0x28(%rax), %rax
movq -0xf8(%rbp), %rcx
subq 0x20(%rcx), %rax
movq %rax, -0x100(%rbp)
cmpq $0x5f5e100, -0x100(%rbp) # imm = 0x5F5E100
jb 0x1faf8
movq -0xf8(%rbp), %rdx
movq -0xe8(%rbp), %rax
movl -0xec(%rbp), %ecx
movq %rdx, (%rax,%rcx,8)
movl -0xec(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xec(%rbp)
jmp 0x1fafa
movl -0xf0(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xf0(%rbp)
jmp 0x1fa66
movl -0xec(%rbp), %eax
movl %eax, -0x104(%rbp)
movq -0x18(%rbp), %rdi
leaq 0x118f7(%rip), %rsi     # 0x3141c
movb $0x0, %al
callq 0x2200
movq -0x18(%rbp), %rdi
leaq 0x120bf(%rip), %rsi     # 0x31bf6
movb $0x0, %al
callq 0x2200
movq -0x18(%rbp), %rdi
leaq 0x118d3(%rip), %rsi     # 0x3141c
movb $0x0, %al
callq 0x2200
movq -0x18(%rbp), %rdi
leaq 0x120f1(%rip), %rsi     # 0x31c4c
movb $0x0, %al
callq 0x2200
movq -0x18(%rbp), %rdi
leaq 0x12120(%rip), %rsi     # 0x31c8d
movb $0x0, %al
callq 0x2200
movq -0x18(%rbp), %rdi
leaq 0x12140(%rip), %rsi     # 0x31cbf
movb $0x0, %al
callq 0x2200
movq -0x18(%rbp), %rdi
leaq 0x1188b(%rip), %rsi     # 0x3141c
movb $0x0, %al
callq 0x2200
movq -0x18(%rbp), %rdi
leaq 0x12153(%rip), %rsi     # 0x31cf6
movb $0x0, %al
callq 0x2200
movq -0x18(%rbp), %rdi
leaq 0x1216c(%rip), %rsi     # 0x31d21
movb $0x0, %al
callq 0x2200
movl $0x0, -0x108(%rbp)
cmpl $0xa, -0x108(%rbp)
jae 0x1fc5e
movl -0x108(%rbp), %eax
movl %eax, %ecx
leaq -0xc0(%rbp), %rax
shlq $0x4, %rcx
addq %rcx, %rax
movq %rax, -0x110(%rbp)
movq -0x18(%rbp), %rax
movq %rax, -0x448(%rbp)
movl -0x108(%rbp), %edi
callq 0x197f0
movq -0x448(%rbp), %rdi
movq %rax, -0x440(%rbp)
movq -0x110(%rbp), %rax
movq (%rax), %rax
movl $0x5f5e100, %ecx        # imm = 0x5F5E100
xorl %edx, %edx
divq %rcx
movq -0x440(%rbp), %rdx
movl %eax, %ecx
movq -0x110(%rbp), %rax
movl 0x8(%rax), %r8d
leaq 0x120f0(%rip), %rsi     # 0x31d33
movb $0x0, %al
callq 0x2200
movl -0x108(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x108(%rbp)
jmp 0x1fbc6
movq -0x18(%rbp), %rdi
leaq 0x117b3(%rip), %rsi     # 0x3141c
movb $0x0, %al
callq 0x2200
movq -0x18(%rbp), %rax
movq %rax, -0x450(%rbp)
movl -0xec(%rbp), %edi
callq 0x19c20
movq -0x450(%rbp), %rdi
movq %rax, %rdx
leaq 0x120a7(%rip), %rsi     # 0x31d3e
movb $0x0, %al
callq 0x2200
cmpl $0x249f0, -0xec(%rbp)   # imm = 0x249F0
jbe 0x1fce2
movl $0x249f0, -0x104(%rbp)  # imm = 0x249F0
movq -0x18(%rbp), %rax
movq %rax, -0x458(%rbp)
movl -0x104(%rbp), %edi
callq 0x19c20
movq -0x458(%rbp), %rdi
movq %rax, %rdx
leaq 0x120a1(%rip), %rsi     # 0x31d7c
movb $0x0, %al
callq 0x2200
movq -0x18(%rbp), %rax
movq %rax, -0x460(%rbp)
movl -0xec(%rbp), %edi
callq 0x19c20
movq -0x460(%rbp), %rdi
movq %rax, %rdx
leaq 0x120be(%rip), %rsi     # 0x31dc7
movb $0x0, %al
callq 0x2200
movq -0x18(%rbp), %rdi
leaq 0x12134(%rip), %rsi     # 0x31e4f
movb $0x0, %al
callq 0x2200
movq -0xe8(%rbp), %rsi
movl -0xec(%rbp), %edx
leaq -0x118(%rbp), %rdi
callq 0x1ea90
leaq -0x120(%rbp), %rdi
callq 0x2120
movl $0x0, -0x124(%rbp)
movl -0x124(%rbp), %eax
cmpl -0x104(%rbp), %eax
jae 0x200b4
movq -0xe8(%rbp), %rax
movl -0x124(%rbp), %ecx
movq (%rax,%rcx,8), %rax
movq %rax, -0x130(%rbp)
movq -0x130(%rbp), %rax
movq 0x28(%rax), %rax
movq -0x130(%rbp), %rcx
subq 0x20(%rcx), %rax
movq %rax, -0x138(%rbp)
movq -0x130(%rbp), %rax
movl 0x14(%rax), %eax
movl %eax, -0x13c(%rbp)
movq -0x130(%rbp), %rax
cmpl $0x0, 0x14(%rax)
jne 0x1fdc5
movq -0x130(%rbp), %rax
movl 0x1c(%rax), %eax
movl %eax, -0x13c(%rbp)
movq -0x120(%rbp), %rdi
movl -0x13c(%rbp), %eax
movl %eax, %esi
callq 0x20a0
movq -0x418(%rbp), %rdi
movsd %xmm0, -0x148(%rbp)
movsd -0x148(%rbp), %xmm0
movsd 0x10e48(%rip), %xmm1    # 0x30c40
divsd %xmm1, %xmm0
movsd %xmm0, -0x150(%rbp)
movsd -0x150(%rbp), %xmm0
divsd %xmm1, %xmm0
movsd %xmm0, -0x158(%rbp)
movsd -0x158(%rbp), %xmm0
movsd 0x10e20(%rip), %xmm1    # 0x30c48
divsd %xmm1, %xmm0
cvttsd2si %xmm0, %rax
movl %eax, -0x15c(%rbp)
movq -0x130(%rbp), %rsi
callq 0x1d0d0
incl %eax
movl %eax, -0x160(%rbp)
movq -0x18(%rbp), %rdi
movl -0x15c(%rbp), %edx
leaq 0x1205b(%rip), %rsi     # 0x31eb7
movq %rsi, -0x4a0(%rbp)
xorl %eax, %eax
movb %al, -0x471(%rbp)
callq 0x2200
movq -0x4a0(%rbp), %rsi
movq -0x18(%rbp), %rdi
movq -0x138(%rbp), %rax
movabsq $-0x543388ee7b9e3103, %rcx # imm = 0xABCC77118461CEFD
mulq %rcx
movb -0x471(%rbp), %al
shrq $0x1a, %rdx
callq 0x2200
movq -0x18(%rbp), %rax
movq %rax, -0x498(%rbp)
movq -0x130(%rbp), %rax
movl 0x1c(%rax), %edi
callq 0x19db0
movq -0x498(%rbp), %rdi
movq %rax, %rdx
movb -0x471(%rbp), %al
leaq 0x11fec(%rip), %rsi     # 0x31ebb
movq %rsi, -0x480(%rbp)
callq 0x2200
movq -0x18(%rbp), %rax
movq %rax, -0x490(%rbp)
movq -0x130(%rbp), %rax
movl 0x18(%rax), %edi
callq 0x19db0
movq -0x490(%rbp), %rdi
movq -0x480(%rbp), %rsi
movq %rax, %rdx
movb -0x471(%rbp), %al
callq 0x2200
movq -0x18(%rbp), %rax
movq %rax, -0x488(%rbp)
movq -0x130(%rbp), %rax
movl 0x14(%rax), %edi
callq 0x19db0
movq -0x488(%rbp), %rdi
movq -0x480(%rbp), %rsi
movq %rax, %rdx
movb -0x471(%rbp), %al
callq 0x2200
movq -0x18(%rbp), %rax
movq %rax, -0x470(%rbp)
movq -0x130(%rbp), %rax
movq 0x20(%rax), %rax
movq %rax, %rdx
shrq %rdx
movl %eax, %ecx
andl $0x1, %ecx
orq %rdx, %rcx
cvtsi2ss %rcx, %xmm0
addss %xmm0, %xmm0
cvtsi2ss %rax, %xmm1
movss %xmm1, -0x468(%rbp)
testq %rax, %rax
movss %xmm0, -0x464(%rbp)
js 0x1ff9e
movss -0x468(%rbp), %xmm0
movss %xmm0, -0x464(%rbp)
movq -0x470(%rbp), %rdi
movss -0x464(%rbp), %xmm0
movss 0x10c7b(%rip), %xmm1    # 0x30c30
divss %xmm1, %xmm0
cvtss2sd %xmm0, %xmm0
leaq 0x11efd(%rip), %rsi     # 0x31ec1
movb $0x1, %al
callq 0x2200
movq -0x18(%rbp), %rax
movq %rax, -0x4b0(%rbp)
movq -0x130(%rbp), %rax
movq 0x28(%rax), %rax
movq %rax, %rdx
shrq %rdx
movl %eax, %ecx
andl $0x1, %ecx
orq %rdx, %rcx
cvtsi2ss %rcx, %xmm0
addss %xmm0, %xmm0
cvtsi2ss %rax, %xmm1
movss %xmm1, -0x4a8(%rbp)
testq %rax, %rax
movss %xmm0, -0x4a4(%rbp)
js 0x20022
movss -0x4a8(%rbp), %xmm0
movss %xmm0, -0x4a4(%rbp)
movq -0x4b0(%rbp), %rdi
movss -0x4a4(%rbp), %xmm0
movss 0x10bf7(%rip), %xmm1    # 0x30c30
divss %xmm1, %xmm0
cvtss2sd %xmm0, %xmm0
leaq 0x11e79(%rip), %rsi     # 0x31ec1
movb $0x1, %al
callq 0x2200
movq -0x18(%rbp), %rdi
movq -0x130(%rbp), %rax
movl 0x3c(%rax), %edx
leaq 0x11e53(%rip), %rsi     # 0x31eb7
movb $0x0, %al
callq 0x2200
movq -0x418(%rbp), %rdi
movq -0x18(%rbp), %rax
movq %rax, -0x4b8(%rbp)
movl -0x160(%rbp), %esi
callq 0x1efc0
movq -0x4b8(%rbp), %rdi
movq %rax, %rdx
leaq 0x10fc2(%rip), %rsi     # 0x3105b
movb $0x0, %al
callq 0x2200
movl -0x124(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x124(%rbp)
jmp 0x1fd51
movq -0x18(%rbp), %rdi
leaq 0x1135d(%rip), %rsi     # 0x3141c
movb $0x0, %al
callq 0x2200
movq -0x18(%rbp), %rax
movq %rax, -0x4c0(%rbp)
movl -0xec(%rbp), %edi
callq 0x19c20
movq -0x4c0(%rbp), %rdi
movq %rax, %rdx
leaq 0x11ddb(%rip), %rsi     # 0x31ec8
movb $0x0, %al
callq 0x2200
movq -0x18(%rbp), %rdi
leaq 0x11d50(%rip), %rsi     # 0x31e4f
movb $0x0, %al
callq 0x2200
movq -0xe8(%rbp), %rsi
movl -0xec(%rbp), %edx
leaq -0x168(%rbp), %rdi
callq 0x21be0
leaq -0x170(%rbp), %rdi
callq 0x2120
movl $0x0, -0x174(%rbp)
movl -0x174(%rbp), %eax
cmpl -0x104(%rbp), %eax
jae 0x2040e
movq -0xe8(%rbp), %rax
movl -0x174(%rbp), %ecx
movq (%rax,%rcx,8), %rax
movq %rax, -0x180(%rbp)
movq -0x180(%rbp), %rax
movq 0x20(%rax), %rcx
movq 0x28(%rax), %rax
subq %rcx, %rax
movq %rax, -0x188(%rbp)
movq -0x180(%rbp), %rdi
callq 0x21b10
movq -0x418(%rbp), %rdi
movl %eax, -0x18c(%rbp)
movq -0x180(%rbp), %rsi
callq 0x1d0d0
incl %eax
movl %eax, -0x190(%rbp)
movq -0x18(%rbp), %rdi
movl -0x18c(%rbp), %edx
leaq 0x11d01(%rip), %rsi     # 0x31eb7
movq %rsi, -0x500(%rbp)
xorl %eax, %eax
movb %al, -0x4d1(%rbp)
callq 0x2200
movq -0x500(%rbp), %rsi
movq -0x18(%rbp), %rdi
movq -0x188(%rbp), %rax
movabsq $-0x543388ee7b9e3103, %rcx # imm = 0xABCC77118461CEFD
mulq %rcx
movb -0x4d1(%rbp), %al
shrq $0x1a, %rdx
callq 0x2200
movq -0x18(%rbp), %rax
movq %rax, -0x4f8(%rbp)
movq -0x180(%rbp), %rax
movl 0x1c(%rax), %edi
callq 0x19db0
movq -0x4f8(%rbp), %rdi
movq %rax, %rdx
movb -0x4d1(%rbp), %al
leaq 0x11c92(%rip), %rsi     # 0x31ebb
movq %rsi, -0x4e0(%rbp)
callq 0x2200
movq -0x18(%rbp), %rax
movq %rax, -0x4f0(%rbp)
movq -0x180(%rbp), %rax
movl 0x18(%rax), %edi
callq 0x19db0
movq -0x4f0(%rbp), %rdi
movq -0x4e0(%rbp), %rsi
movq %rax, %rdx
movb -0x4d1(%rbp), %al
callq 0x2200
movq -0x18(%rbp), %rax
movq %rax, -0x4e8(%rbp)
movq -0x180(%rbp), %rax
movl 0x14(%rax), %edi
callq 0x19db0
movq -0x4e8(%rbp), %rdi
movq -0x4e0(%rbp), %rsi
movq %rax, %rdx
movb -0x4d1(%rbp), %al
callq 0x2200
movq -0x18(%rbp), %rax
movq %rax, -0x4d0(%rbp)
movq -0x180(%rbp), %rax
movq 0x20(%rax), %rax
movq %rax, %rdx
shrq %rdx
movl %eax, %ecx
andl $0x1, %ecx
orq %rdx, %rcx
cvtsi2ss %rcx, %xmm0
addss %xmm0, %xmm0
cvtsi2ss %rax, %xmm1
movss %xmm1, -0x4c8(%rbp)
testq %rax, %rax
movss %xmm0, -0x4c4(%rbp)
js 0x202f8
movss -0x4c8(%rbp), %xmm0
movss %xmm0, -0x4c4(%rbp)
movq -0x4d0(%rbp), %rdi
movss -0x4c4(%rbp), %xmm0
movss 0x10921(%rip), %xmm1    # 0x30c30
divss %xmm1, %xmm0
cvtss2sd %xmm0, %xmm0
leaq 0x11ba3(%rip), %rsi     # 0x31ec1
movb $0x1, %al
callq 0x2200
movq -0x18(%rbp), %rax
movq %rax, -0x510(%rbp)
movq -0x180(%rbp), %rax
movq 0x28(%rax), %rax
movq %rax, %rdx
shrq %rdx
movl %eax, %ecx
andl $0x1, %ecx
orq %rdx, %rcx
cvtsi2ss %rcx, %xmm0
addss %xmm0, %xmm0
cvtsi2ss %rax, %xmm1
movss %xmm1, -0x508(%rbp)
testq %rax, %rax
movss %xmm0, -0x504(%rbp)
js 0x2037c
movss -0x508(%rbp), %xmm0
movss %xmm0, -0x504(%rbp)
movq -0x510(%rbp), %rdi
movss -0x504(%rbp), %xmm0
movss 0x1089d(%rip), %xmm1    # 0x30c30
divss %xmm1, %xmm0
cvtss2sd %xmm0, %xmm0
leaq 0x11b1f(%rip), %rsi     # 0x31ec1
movb $0x1, %al
callq 0x2200
movq -0x18(%rbp), %rdi
movq -0x180(%rbp), %rax
movl 0x3c(%rax), %edx
leaq 0x11af9(%rip), %rsi     # 0x31eb7
movb $0x0, %al
callq 0x2200
movq -0x418(%rbp), %rdi
movq -0x18(%rbp), %rax
movq %rax, -0x518(%rbp)
movl -0x190(%rbp), %esi
callq 0x1efc0
movq -0x518(%rbp), %rdi
movq %rax, %rdx
leaq 0x10c68(%rip), %rsi     # 0x3105b
movb $0x0, %al
callq 0x2200
movl -0x174(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x174(%rbp)
jmp 0x20135
movq -0x18(%rbp), %rdi
leaq 0x11003(%rip), %rsi     # 0x3141c
movb $0x0, %al
callq 0x2200
movq -0xe8(%rbp), %rax
movq %rax, -0x520(%rbp)
cmpq $0x0, %rax
je 0x20440
movq -0x520(%rbp), %rdi
callq 0x21d0
jmp 0x20442
leaq -0x1f0(%rbp), %rdi
leaq 0x187c0(%rip), %rsi     # 0x38c10
movl $0x60, %edx
callq 0x20f0
movq -0x18(%rbp), %rdi
leaq 0x10fb7(%rip), %rsi     # 0x3141c
movb $0x0, %al
callq 0x2200
movq -0x418(%rbp), %rax
movq -0x18(%rbp), %rdi
movl 0x2000050(%rax), %edx
leaq 0x11b1e(%rip), %rsi     # 0x31fa2
movb $0x0, %al
callq 0x2200
movq -0x18(%rbp), %rdi
leaq 0x10f86(%rip), %rsi     # 0x3141c
movb $0x0, %al
callq 0x2200
movq -0x18(%rbp), %rdi
leaq 0x11b1e(%rip), %rsi     # 0x31fc6
movb $0x0, %al
callq 0x2200
movq -0x18(%rbp), %rdi
leaq 0x11b12(%rip), %rsi     # 0x31fcc
movb $0x0, %al
callq 0x2200
movq -0x18(%rbp), %rdi
leaq 0x11b0d(%rip), %rsi     # 0x31fd9
movb $0x0, %al
callq 0x2200
movq -0x18(%rbp), %rdi
leaq 0x11b08(%rip), %rsi     # 0x31fe6
movb $0x0, %al
callq 0x2200
movq -0x18(%rbp), %rdi
leaq 0x11b00(%rip), %rsi     # 0x31ff0
movb $0x0, %al
callq 0x2200
movq -0x18(%rbp), %rdi
leaq 0x11afe(%rip), %rsi     # 0x32000
movb $0x0, %al
callq 0x2200
movq -0x18(%rbp), %rdi
leaq 0x11afb(%rip), %rsi     # 0x3200f
movb $0x0, %al
callq 0x2200
movq -0x18(%rbp), %rdi
leaq 0x11aff(%rip), %rsi     # 0x32025
movb $0x0, %al
callq 0x2200
movq -0x18(%rbp), %rdi
leaq 0x11aff(%rip), %rsi     # 0x32037
movb $0x0, %al
callq 0x2200
movq -0x18(%rbp), %rdi
leaq 0x11af8(%rip), %rsi     # 0x32042
movb $0x0, %al
callq 0x2200
movq -0x18(%rbp), %rdi
leaq 0x11af2(%rip), %rsi     # 0x3204e
movb $0x0, %al
callq 0x2200
movq -0x18(%rbp), %rdi
leaq 0x11af4(%rip), %rsi     # 0x32062
movb $0x0, %al
callq 0x2200
movq -0x18(%rbp), %rdi
leaq 0x11af6(%rip), %rsi     # 0x32076
movb $0x0, %al
callq 0x2200
movq -0x18(%rbp), %rdi
leaq 0x11af4(%rip), %rsi     # 0x32086
movb $0x0, %al
callq 0x2200
movq -0x18(%rbp), %rdi
leaq 0x11af2(%rip), %rsi     # 0x32096
movb $0x0, %al
callq 0x2200
movq -0x18(%rbp), %rdi
leaq 0x11af1(%rip), %rsi     # 0x320a7
movb $0x0, %al
callq 0x2200
movq -0x18(%rbp), %rdi
leaq 0x11af1(%rip), %rsi     # 0x320b9
movb $0x0, %al
callq 0x2200
movq -0x18(%rbp), %rdi
leaq 0x11af3(%rip), %rsi     # 0x320cd
movb $0x0, %al
callq 0x2200
movq -0x18(%rbp), %rdi
leaq 0x11af3(%rip), %rsi     # 0x320df
movb $0x0, %al
callq 0x2200
movq -0x18(%rbp), %rdi
leaq 0x11af4(%rip), %rsi     # 0x320f2
movb $0x0, %al
callq 0x2200
movl $0x0, -0x1f4(%rbp)
movq -0x418(%rbp), %rcx
movl -0x1f4(%rbp), %eax
cmpl 0x2000050(%rcx), %eax
jae 0x20a85
movq -0x418(%rbp), %rax
addq $0x2000058, %rax        # imm = 0x2000058
movl -0x1f4(%rbp), %ecx
imulq $0x190, %rcx, %rcx      # imm = 0x190
addq %rcx, %rax
movq %rax, -0x200(%rbp)
movq -0x200(%rbp), %rax
movl 0xc(%rax), %eax
movq %rax, -0x208(%rbp)
leaq -0x208(%rbp), %rdi
callq 0x20d0
movq %rax, %rsi
leaq -0x240(%rbp), %rdi
movl $0x38, %edx
callq 0x20f0
movq -0x200(%rbp), %rax
movl 0x10(%rax), %eax
movl %eax, -0x244(%rbp)
movq -0x200(%rbp), %rax
movl 0x20(%rax), %eax
movl %eax, -0x248(%rbp)
movl -0x244(%rbp), %eax
subl -0x248(%rbp), %eax
movl %eax, -0x24c(%rbp)
movq -0x200(%rbp), %rax
movl 0x30(%rax), %eax
movl %eax, -0x250(%rbp)
movq -0x200(%rbp), %rax
movq 0x38(%rax), %rax
movq %rax, -0x258(%rbp)
movl $0x0, -0x25c(%rbp)
movq $0x0, -0x268(%rbp)
movl $0x0, -0x26c(%rbp)
movq $0x0, -0x278(%rbp)
movl $0x8, -0x27c(%rbp)
cmpl $0x12, -0x27c(%rbp)
jae 0x207d1
movq -0x200(%rbp), %rax
addq $0x20, %rax
movl -0x27c(%rbp), %ecx
shlq $0x4, %rcx
addq %rcx, %rax
movl (%rax), %eax
addl -0x25c(%rbp), %eax
movl %eax, -0x25c(%rbp)
movq -0x200(%rbp), %rax
addq $0x20, %rax
movl -0x27c(%rbp), %ecx
shlq $0x4, %rcx
addq %rcx, %rax
movq 0x8(%rax), %rax
addq -0x268(%rbp), %rax
movq %rax, -0x268(%rbp)
cmpl $0xd, -0x27c(%rbp)
jbe 0x207bb
movq -0x200(%rbp), %rax
addq $0x20, %rax
movl -0x27c(%rbp), %ecx
shlq $0x4, %rcx
addq %rcx, %rax
movl (%rax), %eax
addl -0x26c(%rbp), %eax
movl %eax, -0x26c(%rbp)
movq -0x200(%rbp), %rax
addq $0x20, %rax
movl -0x27c(%rbp), %ecx
shlq $0x4, %rcx
addq %rcx, %rax
movq 0x8(%rax), %rax
addq -0x278(%rbp), %rax
movq %rax, -0x278(%rbp)
jmp 0x207bd
movl -0x27c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x27c(%rbp)
jmp 0x20705
movq -0x18(%rbp), %rdi
movslq -0x230(%rbp), %rax
movq -0x1f0(%rbp,%rax,8), %rdx
movl -0x234(%rbp), %ecx
movl -0x22c(%rbp), %r8d
addl $0x76c, %r8d            # imm = 0x76C
leaq 0x11908(%rip), %rsi     # 0x32107
movb $0x0, %al
callq 0x2200
movq -0x18(%rbp), %rdi
movq -0x200(%rbp), %rax
movq (%rax), %rax
movl $0x5f5e100, %ecx        # imm = 0x5F5E100
xorl %edx, %edx
divq %rcx
movl %eax, %edx
leaq 0x11690(%rip), %rsi     # 0x31eb7
movb $0x0, %al
callq 0x2200
movq -0x18(%rbp), %rdi
movq -0x200(%rbp), %rax
movl 0x8(%rax), %edx
leaq 0x11674(%rip), %rsi     # 0x31eb7
movb $0x0, %al
callq 0x2200
movq -0x18(%rbp), %rdi
movq -0x200(%rbp), %rax
movq 0x18(%rax), %rax
movl $0x5f5e100, %ecx        # imm = 0x5F5E100
xorl %edx, %edx
divq %rcx
movl %eax, %edx
leaq 0x1164b(%rip), %rsi     # 0x31eb7
movb $0x0, %al
callq 0x2200
movq -0x18(%rbp), %rdi
movq -0x200(%rbp), %rax
movq 0x18(%rax), %rax
movq -0x200(%rbp), %rcx
subq (%rcx), %rax
movl $0x5f5e100, %ecx        # imm = 0x5F5E100
xorl %edx, %edx
divq %rcx
movl %eax, %edx
leaq 0x11618(%rip), %rsi     # 0x31eb7
movb $0x0, %al
callq 0x2200
movq -0x18(%rbp), %rdi
movl -0x244(%rbp), %edx
leaq 0x11600(%rip), %rsi     # 0x31eb7
movb $0x0, %al
callq 0x2200
movq -0x18(%rbp), %rdi
movl -0x24c(%rbp), %edx
leaq 0x115e8(%rip), %rsi     # 0x31eb7
movb $0x0, %al
callq 0x2200
movq -0x18(%rbp), %rdi
movl -0x248(%rbp), %edx
leaq 0x115d0(%rip), %rsi     # 0x31eb7
movb $0x0, %al
callq 0x2200
movq -0x18(%rbp), %rdi
movl -0x250(%rbp), %edx
leaq 0x115b8(%rip), %rsi     # 0x31eb7
movb $0x0, %al
callq 0x2200
movq -0x18(%rbp), %rdi
movq -0x258(%rbp), %rax
movl $0x5f5e100, %ecx        # imm = 0x5F5E100
xorl %edx, %edx
divq %rcx
movl %eax, %edx
leaq 0x11593(%rip), %rsi     # 0x31eb7
movb $0x0, %al
callq 0x2200
movq -0x18(%rbp), %rdi
movl -0x25c(%rbp), %edx
leaq 0x1157b(%rip), %rsi     # 0x31eb7
movb $0x0, %al
callq 0x2200
movq -0x18(%rbp), %rdi
movq -0x268(%rbp), %rax
movl $0x5f5e100, %ecx        # imm = 0x5F5E100
xorl %edx, %edx
divq %rcx
movl %eax, %edx
leaq 0x11556(%rip), %rsi     # 0x31eb7
movb $0x0, %al
callq 0x2200
movq -0x18(%rbp), %rdi
movl -0x26c(%rbp), %edx
leaq 0x1153e(%rip), %rsi     # 0x31eb7
movb $0x0, %al
callq 0x2200
movq -0x18(%rbp), %rdi
movq -0x278(%rbp), %rax
movl $0x5f5e100, %ecx        # imm = 0x5F5E100
xorl %edx, %edx
divq %rcx
movl %eax, %edx
leaq 0x11519(%rip), %rsi     # 0x31eb7
movb $0x0, %al
callq 0x2200
movq -0x18(%rbp), %rdi
movq -0x200(%rbp), %rax
movl 0x160(%rax), %edx
leaq 0x114fa(%rip), %rsi     # 0x31eb7
movb $0x0, %al
callq 0x2200
movq -0x18(%rbp), %rdi
movq -0x200(%rbp), %rax
movl 0x164(%rax), %edx
leaq 0x114db(%rip), %rsi     # 0x31eb7
movb $0x0, %al
callq 0x2200
movq -0x18(%rbp), %rdi
movq -0x200(%rbp), %rax
movl 0x168(%rax), %edx
leaq 0x114bc(%rip), %rsi     # 0x31eb7
movb $0x0, %al
callq 0x2200
movq -0x18(%rbp), %rdi
movq -0x200(%rbp), %rax
movl 0x16c(%rax), %edx
leaq 0x1149d(%rip), %rsi     # 0x31eb7
movb $0x0, %al
callq 0x2200
movq -0x18(%rbp), %rdi
movq -0x200(%rbp), %rax
movl 0x170(%rax), %edx
leaq 0x1147e(%rip), %rsi     # 0x31eb7
movb $0x0, %al
callq 0x2200
movq -0x18(%rbp), %rdi
movq -0x200(%rbp), %rax
movl 0x174(%rax), %edx
leaq 0x1145f(%rip), %rsi     # 0x31eb7
movb $0x0, %al
callq 0x2200
movq -0x18(%rbp), %rdi
leaq 0x109b2(%rip), %rsi     # 0x3141c
movb $0x0, %al
callq 0x2200
movl -0x1f4(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x1f4(%rbp)
jmp 0x2060f
movq -0x18(%rbp), %rdi
leaq 0x1098c(%rip), %rsi     # 0x3141c
movb $0x0, %al
callq 0x2200
movq -0x18(%rbp), %rdi
leaq 0x1097a(%rip), %rsi     # 0x3141c
movb $0x0, %al
callq 0x2200
movq -0x18(%rbp), %rdi
leaq 0x11673(%rip), %rsi     # 0x32127
movb $0x0, %al
callq 0x2200
movq -0x18(%rbp), %rdi
leaq 0x10956(%rip), %rsi     # 0x3141c
movb $0x0, %al
callq 0x2200
movq -0x18(%rbp), %rdi
leaq 0x11639(%rip), %rsi     # 0x32111
movb $0x0, %al
callq 0x2200
movl $0x0, -0x280(%rbp)
cmpl $0x13, -0x280(%rbp)
jae 0x20b2a
movq -0x418(%rbp), %rax
movq -0x18(%rbp), %rdi
movl -0x280(%rbp), %ecx
movq 0x20d5e38(%rax,%rcx,8), %rdx
leaq 0x113a9(%rip), %rsi     # 0x31ebb
movb $0x0, %al
callq 0x2200
movl -0x280(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x280(%rbp)
jmp 0x20ae9
movq -0x18(%rbp), %rdi
leaq 0x108e7(%rip), %rsi     # 0x3141c
movb $0x0, %al
callq 0x2200
movl $0x0, -0x284(%rbp)
movq -0x418(%rbp), %rcx
movl -0x284(%rbp), %eax
cmpl 0x2000050(%rcx), %eax
jae 0x20c6d
movq -0x418(%rbp), %rax
addq $0x2000058, %rax        # imm = 0x2000058
movl -0x284(%rbp), %ecx
imulq $0x190, %rcx, %rcx      # imm = 0x190
addq %rcx, %rax
movq %rax, -0x290(%rbp)
movq -0x290(%rbp), %rax
movl 0xc(%rax), %eax
movq %rax, -0x298(%rbp)
leaq -0x298(%rbp), %rdi
callq 0x20d0
movq %rax, %rsi
leaq -0x2d0(%rbp), %rdi
movl $0x38, %edx
callq 0x20f0
movq -0x18(%rbp), %rdi
movslq -0x2c0(%rbp), %rax
movq -0x1f0(%rbp,%rax,8), %rdx
movl -0x2c4(%rbp), %ecx
movl -0x2bc(%rbp), %r8d
addl $0x76c, %r8d            # imm = 0x76C
leaq 0x11525(%rip), %rsi     # 0x32107
movb $0x0, %al
callq 0x2200
movl $0x0, -0x2d4(%rbp)
cmpl $0x13, -0x2d4(%rbp)
jae 0x20c47
movq -0x290(%rbp), %rax
addq $0x20, %rax
movl -0x2d4(%rbp), %ecx
shlq $0x4, %rcx
addq %rcx, %rax
movq %rax, -0x2e0(%rbp)
movq -0x18(%rbp), %rdi
movq -0x2e0(%rbp), %rax
movl (%rax), %edx
leaq 0x11288(%rip), %rsi     # 0x31eb7
movb $0x0, %al
callq 0x2200
movl -0x2d4(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x2d4(%rbp)
jmp 0x20bf3
movq -0x18(%rbp), %rdi
leaq 0x107ca(%rip), %rsi     # 0x3141c
movb $0x0, %al
callq 0x2200
movl -0x284(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x284(%rbp)
jmp 0x20b46
movq -0x18(%rbp), %rdi
leaq 0x107a4(%rip), %rsi     # 0x3141c
movb $0x0, %al
callq 0x2200
movq -0x18(%rbp), %rdi
leaq 0x10792(%rip), %rsi     # 0x3141c
movb $0x0, %al
callq 0x2200
movq -0x18(%rbp), %rdi
leaq 0x114dc(%rip), %rsi     # 0x32178
movb $0x0, %al
callq 0x2200
movq -0x18(%rbp), %rdi
leaq 0x1076e(%rip), %rsi     # 0x3141c
movb $0x0, %al
callq 0x2200
movq -0x18(%rbp), %rdi
leaq 0x11451(%rip), %rsi     # 0x32111
movb $0x0, %al
callq 0x2200
movl $0x0, -0x2e4(%rbp)
cmpl $0x13, -0x2e4(%rbp)
jae 0x20d12
movq -0x418(%rbp), %rax
movq -0x18(%rbp), %rdi
movl -0x2e4(%rbp), %ecx
movq 0x20d5e38(%rax,%rcx,8), %rdx
leaq 0x111c1(%rip), %rsi     # 0x31ebb
movb $0x0, %al
callq 0x2200
movl -0x2e4(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x2e4(%rbp)
jmp 0x20cd1
movq -0x18(%rbp), %rdi
leaq 0x106ff(%rip), %rsi     # 0x3141c
movb $0x0, %al
callq 0x2200
movl $0x0, -0x2e8(%rbp)
movq -0x418(%rbp), %rcx
movl -0x2e8(%rbp), %eax
cmpl 0x2000050(%rcx), %eax
jae 0x20ec3
movq -0x418(%rbp), %rax
addq $0x2000058, %rax        # imm = 0x2000058
movl -0x2e8(%rbp), %ecx
imulq $0x190, %rcx, %rcx      # imm = 0x190
addq %rcx, %rax
movq %rax, -0x2f0(%rbp)
movq -0x2f0(%rbp), %rax
movl 0xc(%rax), %eax
movq %rax, -0x2f8(%rbp)
leaq -0x2f8(%rbp), %rdi
callq 0x20d0
movq %rax, %rsi
leaq -0x330(%rbp), %rdi
movl $0x38, %edx
callq 0x20f0
movq -0x18(%rbp), %rdi
movslq -0x320(%rbp), %rax
movq -0x1f0(%rbp,%rax,8), %rdx
movl -0x324(%rbp), %ecx
movl -0x31c(%rbp), %r8d
addl $0x76c, %r8d            # imm = 0x76C
leaq 0x1133d(%rip), %rsi     # 0x32107
movb $0x0, %al
callq 0x2200
movl $0x0, -0x334(%rbp)
cmpl $0x13, -0x334(%rbp)
jae 0x20e9d
movq -0x2f0(%rbp), %rax
movl -0x334(%rbp), %ecx
shlq $0x4, %rcx
leaq 0x20(%rax,%rcx), %rax
movq %rax, -0x340(%rbp)
movq -0x18(%rbp), %rax
movq %rax, -0x530(%rbp)
movq -0x340(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, %rdx
shrq %rdx
movl %eax, %ecx
andl $0x1, %ecx
orq %rdx, %rcx
cvtsi2ss %rcx, %xmm0
addss %xmm0, %xmm0
cvtsi2ss %rax, %xmm1
movss %xmm1, -0x528(%rbp)
testq %rax, %rax
movss %xmm0, -0x524(%rbp)
js 0x20e5c
movss -0x528(%rbp), %xmm0
movss %xmm0, -0x524(%rbp)
movq -0x530(%rbp), %rdi
movss -0x524(%rbp), %xmm0
movss 0xfdbd(%rip), %xmm1     # 0x30c30
divss %xmm1, %xmm0
cvtss2sd %xmm0, %xmm0
leaq 0x11291(%rip), %rsi     # 0x32113
movb $0x1, %al
callq 0x2200
movl -0x334(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x334(%rbp)
jmp 0x20ddb
movq -0x18(%rbp), %rdi
leaq 0x10574(%rip), %rsi     # 0x3141c
movb $0x0, %al
callq 0x2200
movl -0x2e8(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x2e8(%rbp)
jmp 0x20d2e
movq -0x18(%rbp), %rdi
leaq 0x1054e(%rip), %rsi     # 0x3141c
movb $0x0, %al
callq 0x2200
movq -0x18(%rbp), %rdi
leaq 0x1053c(%rip), %rsi     # 0x3141c
movb $0x0, %al
callq 0x2200
movq -0x18(%rbp), %rdi
leaq 0x11228(%rip), %rsi     # 0x3211a
movb $0x0, %al
callq 0x2200
movq -0x18(%rbp), %rdi
leaq 0x10518(%rip), %rsi     # 0x3141c
movb $0x0, %al
callq 0x2200
movq -0x18(%rbp), %rdi
leaq 0x111fb(%rip), %rsi     # 0x32111
movb $0x0, %al
callq 0x2200
movl $0x1, -0x344(%rbp)
cmpl $0x13, -0x344(%rbp)
jae 0x20f68
movq -0x418(%rbp), %rax
movq -0x18(%rbp), %rdi
movl -0x344(%rbp), %ecx
movq 0x20d5e38(%rax,%rcx,8), %rdx
leaq 0x10f6b(%rip), %rsi     # 0x31ebb
movb $0x0, %al
callq 0x2200
movl -0x344(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x344(%rbp)
jmp 0x20f27
movq -0x18(%rbp), %rdi
leaq 0x104a9(%rip), %rsi     # 0x3141c
movb $0x0, %al
callq 0x2200
movl $0x0, -0x348(%rbp)
movq -0x418(%rbp), %rcx
movl -0x348(%rbp), %eax
cmpl 0x2000050(%rcx), %eax
jae 0x210e5
movq -0x418(%rbp), %rax
addq $0x2000058, %rax        # imm = 0x2000058
movl -0x348(%rbp), %ecx
imulq $0x190, %rcx, %rcx      # imm = 0x190
addq %rcx, %rax
movq %rax, -0x350(%rbp)
movq -0x350(%rbp), %rax
movl 0xc(%rax), %eax
movq %rax, -0x358(%rbp)
leaq -0x358(%rbp), %rdi
callq 0x20d0
movq %rax, %rsi
leaq -0x390(%rbp), %rdi
movl $0x38, %edx
callq 0x20f0
movq -0x18(%rbp), %rdi
movslq -0x380(%rbp), %rax
movq -0x1f0(%rbp,%rax,8), %rdx
movl -0x37c(%rbp), %ecx
addl $0x76c, %ecx            # imm = 0x76C
leaq 0x1114b(%rip), %rsi     # 0x32163
movb $0x0, %al
callq 0x2200
movl $0x1, -0x394(%rbp)
cmpl $0x13, -0x394(%rbp)
jae 0x210bf
movq -0x350(%rbp), %rax
movl -0x394(%rbp), %ecx
shlq $0x4, %rcx
leaq 0x20(%rax,%rcx), %rax
movq %rax, -0x3a0(%rbp)
movq -0x3a0(%rbp), %rax
movl (%rax), %eax
cvtsi2ss %rax, %xmm0
movss 0xfbcf(%rip), %xmm1     # 0x30c38
mulss %xmm1, %xmm0
movq -0x350(%rbp), %rcx
movl 0x10(%rcx), %eax
movl 0x20(%rcx), %ecx
subl %ecx, %eax
cvtsi2ss %rax, %xmm1
divss %xmm1, %xmm0
movss %xmm0, -0x3a4(%rbp)
movq -0x18(%rbp), %rdi
movss -0x3a4(%rbp), %xmm0
cvtss2sd %xmm0, %xmm0
leaq 0x1106f(%rip), %rsi     # 0x32113
movb $0x1, %al
callq 0x2200
movl -0x394(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x394(%rbp)
jmp 0x21029
movq -0x18(%rbp), %rdi
leaq 0x10352(%rip), %rsi     # 0x3141c
movb $0x0, %al
callq 0x2200
movl -0x348(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x348(%rbp)
jmp 0x20f84
movq -0x18(%rbp), %rdi
leaq 0x1032c(%rip), %rsi     # 0x3141c
movb $0x0, %al
callq 0x2200
movq -0x18(%rbp), %rdi
leaq 0x1031a(%rip), %rsi     # 0x3141c
movb $0x0, %al
callq 0x2200
movq -0x18(%rbp), %rdi
leaq 0x11058(%rip), %rsi     # 0x3216c
movb $0x0, %al
callq 0x2200
movq -0x18(%rbp), %rdi
leaq 0x102f6(%rip), %rsi     # 0x3141c
movb $0x0, %al
callq 0x2200
movq -0x18(%rbp), %rdi
leaq 0x10fd9(%rip), %rsi     # 0x32111
movb $0x0, %al
callq 0x2200
movl $0x1, -0x3a8(%rbp)
cmpl $0x13, -0x3a8(%rbp)
jae 0x2118a
movq -0x418(%rbp), %rax
movq -0x18(%rbp), %rdi
movl -0x3a8(%rbp), %ecx
movq 0x20d5e38(%rax,%rcx,8), %rdx
leaq 0x10d49(%rip), %rsi     # 0x31ebb
movb $0x0, %al
callq 0x2200
movl -0x3a8(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x3a8(%rbp)
jmp 0x21149
movq -0x18(%rbp), %rdi
leaq 0x10287(%rip), %rsi     # 0x3141c
movb $0x0, %al
callq 0x2200
movl $0x0, -0x3ac(%rbp)
movq -0x418(%rbp), %rcx
movl -0x3ac(%rbp), %eax
cmpl 0x2000050(%rcx), %eax
jae 0x2139d
movq -0x418(%rbp), %rax
addq $0x2000058, %rax        # imm = 0x2000058
movl -0x3ac(%rbp), %ecx
imulq $0x190, %rcx, %rcx      # imm = 0x190
addq %rcx, %rax
movq %rax, -0x3b8(%rbp)
movq -0x3b8(%rbp), %rax
movl 0xc(%rax), %eax
movq %rax, -0x3c0(%rbp)
leaq -0x3c0(%rbp), %rdi
callq 0x20d0
movq %rax, %rsi
leaq -0x3f8(%rbp), %rdi
movl $0x38, %edx
callq 0x20f0
movq -0x18(%rbp), %rdi
movslq -0x3e8(%rbp), %rax
movq -0x1f0(%rbp,%rax,8), %rdx
movl -0x3e4(%rbp), %ecx
addl $0x76c, %ecx            # imm = 0x76C
leaq 0x10f29(%rip), %rsi     # 0x32163
movb $0x0, %al
callq 0x2200
movl $0x1, -0x3fc(%rbp)
cmpl $0x13, -0x3fc(%rbp)
jae 0x21377
movq -0x3b8(%rbp), %rax
movl -0x3fc(%rbp), %ecx
shlq $0x4, %rcx
leaq 0x20(%rax,%rcx), %rax
movq %rax, -0x408(%rbp)
movq -0x408(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, %rdx
shrq %rdx
movl %eax, %ecx
andl $0x1, %ecx
orq %rdx, %rcx
cvtsi2ss %rcx, %xmm0
addss %xmm0, %xmm0
cvtsi2ss %rax, %xmm1
movss %xmm1, -0x538(%rbp)
testq %rax, %rax
movss %xmm0, -0x534(%rbp)
js 0x212c1
movss -0x538(%rbp), %xmm0
movss %xmm0, -0x534(%rbp)
movss -0x534(%rbp), %xmm0
movss 0xf967(%rip), %xmm1     # 0x30c38
mulss %xmm1, %xmm0
movss %xmm0, -0x544(%rbp)
movq -0x3b8(%rbp), %rax
movq 0x18(%rax), %rax
movq %rax, %rdx
shrq %rdx
movl %eax, %ecx
andl $0x1, %ecx
orq %rdx, %rcx
cvtsi2ss %rcx, %xmm0
addss %xmm0, %xmm0
cvtsi2ss %rax, %xmm1
movss %xmm1, -0x540(%rbp)
testq %rax, %rax
movss %xmm0, -0x53c(%rbp)
js 0x21329
movss -0x540(%rbp), %xmm0
movss %xmm0, -0x53c(%rbp)
movss -0x544(%rbp), %xmm0
movss -0x53c(%rbp), %xmm1
divss %xmm1, %xmm0
movss %xmm0, -0x40c(%rbp)
movq -0x18(%rbp), %rdi
movss -0x40c(%rbp), %xmm0
cvtss2sd %xmm0, %xmm0
leaq 0x10db7(%rip), %rsi     # 0x32113
movb $0x1, %al
callq 0x2200
movl -0x3fc(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x3fc(%rbp)
jmp 0x2124b
movq -0x18(%rbp), %rdi
leaq 0x1009a(%rip), %rsi     # 0x3141c
movb $0x0, %al
callq 0x2200
movl -0x3ac(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x3ac(%rbp)
jmp 0x211a6
movq -0x18(%rbp), %rdi
leaq 0x10074(%rip), %rsi     # 0x3141c
movb $0x0, %al
callq 0x2200
movq -0x18(%rbp), %rdi
callq 0x2140
addq $0x550, %rsp            # imm = 0x550
popq %rbp
retq
nopw %cs:(%rax,%rax)
nopl (%rax,%rax)