// File: /workspace/github_cpp_makefile_star2_O1/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
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x148, %rsp            # imm = 0x148
movq %rdi, %r14
testl %esi, %esi
je 0xe4cf
movq %r14, %rdi
callq 0xfb52
leaq 0xa10a(%rip), %rdi      # 0x185e0
leaq 0xa10d(%rip), %rsi      # 0x185ea
callq 0x21a0
testq %rax, %rax
je 0xe7e8
movq %rax, -0x38(%rbp)
movl $0x8, %eax
movq $0x0, -0x178(%rbp,%rax)
movl $0x0, -0x170(%rbp,%rax)
addq $0x10, %rax
cmpq $0xa8, %rax
jne 0xe4f4
movq -0x170(%rbp), %rax
movl 0x2000000(%r14), %r13d
testl %r13d, %r13d
je 0xe805
movq %rax, -0x30(%rbp)
movq -0xe0(%rbp), %rax
movq %rax, -0xa0(%rbp)
movl -0xd8(%rbp), %eax
movl %eax, -0x6c(%rbp)
movq -0xf0(%rbp), %rax
movq %rax, -0xa8(%rbp)
movl -0xe8(%rbp), %eax
movl %eax, -0x70(%rbp)
movq -0x100(%rbp), %rax
movq %rax, -0xb0(%rbp)
movl -0xf8(%rbp), %eax
movl %eax, -0x74(%rbp)
movq -0x110(%rbp), %rax
movq %rax, -0xb8(%rbp)
movl -0x108(%rbp), %eax
movl %eax, -0x78(%rbp)
movq -0x120(%rbp), %rax
movq %rax, -0xc0(%rbp)
movl -0x118(%rbp), %eax
movl %eax, -0x7c(%rbp)
movq -0x130(%rbp), %rax
movq %rax, -0xc8(%rbp)
movl -0x128(%rbp), %eax
movl %eax, -0x88(%rbp)
movq -0x140(%rbp), %rax
movq %rax, -0x90(%rbp)
movl -0x138(%rbp), %eax
movl %eax, -0x3c(%rbp)
movq -0x150(%rbp), %rax
movq %rax, -0x98(%rbp)
movl -0x148(%rbp), %eax
movl %eax, -0x40(%rbp)
movq -0x160(%rbp), %rax
movq %rax, -0x68(%rbp)
movl -0x158(%rbp), %eax
movl %eax, -0x58(%rbp)
xorl %r12d, %r12d
movl -0x168(%rbp), %eax
movl %eax, -0x50(%rbp)
xorl %ebx, %ebx
xorl %r15d, %r15d
movq 0x2000008(%r14), %rax
leaq (%rax,%r12), %rdi
movq 0x28(%rax,%r12), %r13
subq 0x20(%rax,%r12), %r13
callq 0x10002
xorl %ecx, %ecx
cmpq $0x5f5e100, %r13        # imm = 0x5F5E100
setae %cl
cmpl $0x1, %eax
ja 0xe649
addq %r13, -0x30(%rbp)
addl %ecx, -0x50(%rbp)
jmp 0xe6e8
cmpl $0x7, %eax
ja 0xe65a
addq %r13, -0x68(%rbp)
addl %ecx, -0x58(%rbp)
jmp 0xe6e8
cmpl $0x1e, %eax
ja 0xe66b
addq %r13, -0x98(%rbp)
addl %ecx, -0x40(%rbp)
jmp 0xe6e8
cmpl $0x5a, %eax
ja 0xe67c
addq %r13, -0x90(%rbp)
addl %ecx, -0x3c(%rbp)
jmp 0xe6e8
cmpl $0xb4, %eax
ja 0xe692
addq %r13, -0xc8(%rbp)
addl %ecx, -0x88(%rbp)
jmp 0xe6e8
cmpl $0x16d, %eax            # imm = 0x16D
ja 0xe6a5
addq %r13, -0xc0(%rbp)
addl %ecx, -0x7c(%rbp)
jmp 0xe6e8
cmpl $0x2da, %eax            # imm = 0x2DA
ja 0xe6b8
addq %r13, -0xb8(%rbp)
addl %ecx, -0x78(%rbp)
jmp 0xe6e8
cmpl $0x447, %eax            # imm = 0x447
ja 0xe6cb
addq %r13, -0xb0(%rbp)
addl %ecx, -0x74(%rbp)
jmp 0xe6e8
cmpl $0x5b4, %eax            # imm = 0x5B4
ja 0xe6de
addq %r13, -0xa8(%rbp)
addl %ecx, -0x70(%rbp)
jmp 0xe6e8
addq %r13, -0xa0(%rbp)
addl %ecx, -0x6c(%rbp)
cmpq $0x5f5e100, %r13        # imm = 0x5F5E100
sbbl $-0x1, %r15d
incq %rbx
movl 0x2000000(%r14), %r13d
addq $0x50, %r12
cmpq %r13, %rbx
jb 0xe612
movq -0xa0(%rbp), %rax
movq %rax, -0xe0(%rbp)
movl -0x6c(%rbp), %eax
movl %eax, -0xd8(%rbp)
movq -0xa8(%rbp), %rax
movq %rax, -0xf0(%rbp)
movl -0x70(%rbp), %eax
movl %eax, -0xe8(%rbp)
movq -0xb0(%rbp), %rax
movq %rax, -0x100(%rbp)
movl -0x74(%rbp), %eax
movl %eax, -0xf8(%rbp)
movq -0xb8(%rbp), %rax
movq %rax, -0x110(%rbp)
movl -0x78(%rbp), %eax
movl %eax, -0x108(%rbp)
movq -0xc0(%rbp), %rax
movq %rax, -0x120(%rbp)
movl -0x7c(%rbp), %eax
movl %eax, -0x118(%rbp)
movq -0xc8(%rbp), %rax
movq %rax, -0x130(%rbp)
movl -0x88(%rbp), %eax
movl %eax, -0x128(%rbp)
movq -0x90(%rbp), %rax
movq %rax, -0x140(%rbp)
movl -0x3c(%rbp), %eax
movl %eax, -0x138(%rbp)
movq -0x98(%rbp), %rax
movq %rax, -0x150(%rbp)
movl -0x40(%rbp), %eax
movl %eax, -0x148(%rbp)
movq -0x68(%rbp), %rax
movq %rax, -0x160(%rbp)
movl -0x58(%rbp), %eax
movl %eax, -0x158(%rbp)
movl -0x50(%rbp), %eax
movl %eax, -0x168(%rbp)
movq -0x30(%rbp), %rax
jmp 0xe808
leaq 0xb2d5(%rip), %rdi      # 0x19ac4
addq $0x148, %rsp            # imm = 0x148
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x2260
xorl %r15d, %r15d
movq %rax, -0x170(%rbp)
testl %r15d, %r15d
movq %r14, -0x60(%rbp)
je 0xeeb8
movl %r15d, %edi
shlq $0x3, %rdi
callq 0x2040
movq %rax, -0x30(%rbp)
testl %r13d, %r13d
je 0xe869
movq 0x2000008(%r14), %rax
movl %r13d, %ecx
xorl %edi, %edi
movq -0x38(%rbp), %r14
movq -0x30(%rbp), %rsi
movq 0x28(%rax), %rdx
subq 0x20(%rax), %rdx
cmpq $0x5f5e100, %rdx        # imm = 0x5F5E100
jb 0xe85e
movl %edi, %edx
movq %rax, (%rsi,%rdx,8)
incl %edi
addq $0x50, %rax
decq %rcx
jne 0xe845
jmp 0xe86f
xorl %edi, %edi
movq -0x38(%rbp), %r14
movl %edi, -0x68(%rbp)
leaq 0x9dc7(%rip), %rbx      # 0x18640
movl $0x2, %esi
movl $0x1, %edx
movq %rbx, %rdi
movq %r14, %rcx
callq 0x22b0
leaq 0x9d58(%rip), %rdi      # 0x185ed
movl $0x55, %esi
movl $0x1, %edx
movq %r14, %rcx
callq 0x22b0
movl $0x2, %esi
movl $0x1, %edx
movq %rbx, %rdi
movq %r14, %rcx
callq 0x22b0
leaq 0x9d80(%rip), %rdi      # 0x18643
movl $0x40, %esi
movl $0x1, %edx
movq %r14, %rcx
callq 0x22b0
leaq 0x9da8(%rip), %rdi      # 0x18684
movl $0x31, %esi
movl $0x1, %edx
movq %r14, %rcx
callq 0x22b0
leaq 0x9dc1(%rip), %rdi      # 0x186b6
movl $0x36, %esi
movl $0x1, %edx
movq %r14, %rcx
callq 0x22b0
movl $0x2, %esi
movl $0x1, %edx
movq %rbx, %rdi
movq %r14, %rcx
callq 0x22b0
leaq 0x9dca(%rip), %rdi      # 0x186ed
movl $0x2a, %esi
movl $0x1, %edx
movq %r14, %rcx
callq 0x22b0
leaq 0x9ddc(%rip), %rdi      # 0x18718
movl $0x11, %esi
movl $0x1, %edx
movq %r14, %rcx
callq 0x22b0
leaq 0x8f91(%rip), %r15      # 0x178e6
leaq 0x9dce(%rip), %rbx      # 0x1872a
xorl %r13d, %r13d
xorl %r12d, %r12d
movq -0x60(%rbp), %r14
movq %r15, %r9
cmpq $0x9, %r12
ja 0xe97b
leaq 0x102fa(%rip), %rax     # 0x1ec70
movq (%r13,%rax), %r9
movabsq $-0x543388ee7b9e3103, %rax # imm = 0xABCC77118461CEFD
mulq -0x170(%rbp,%r13,2)
movq %rdx, %rcx
shrq $0x1a, %rcx
movl -0x168(%rbp,%r13,2), %r8d
movq -0x38(%rbp), %rdi
movq %rbx, %rsi
movq %r9, %rdx
xorl %eax, %eax
callq 0x2230
incq %r12
addq $0x8, %r13
cmpq $0xa, %r12
jne 0xe966
leaq 0x9c7f(%rip), %rdi      # 0x18640
movl $0x2, %esi
movl $0x1, %edx
movq -0x38(%rbp), %r13
movq %r13, %rcx
callq 0x22b0
movl -0x68(%rbp), %ebx
movl %ebx, %edi
callq 0xb5d3
leaq 0x9d4d(%rip), %rsi      # 0x18735
movq %r13, %rdi
movq %rax, %rdx
xorl %eax, %eax
callq 0x2230
movl %ebx, %r15d
cmpl $0x249f0, %ebx          # imm = 0x249F0
jbe 0xea24
movl $0x249f0, %r15d         # imm = 0x249F0
movl $0x249f0, %edi          # imm = 0x249F0
callq 0xb5d3
leaq 0x9d5c(%rip), %rsi      # 0x18773
movq %r13, %rdi
movq %rax, %rdx
xorl %eax, %eax
callq 0x2230
movl %ebx, %edi
callq 0xb5d3
leaq 0x9d8c(%rip), %rsi      # 0x187be
movq %r13, %rdi
movq %rax, %rdx
xorl %eax, %eax
callq 0x2230
leaq 0x9e00(%rip), %rdi      # 0x18846
movl $0x67, %esi
movl $0x1, %edx
movq %r13, %rcx
callq 0x22b0
leaq 0x10181(%rip), %rax     # 0x1ebe0
leaq -0x48(%rbp), %rdi
movq %rax, (%rdi)
movq -0x30(%rbp), %rsi
movl %ebx, %edx
callq 0xb372
leaq -0xd0(%rbp), %rdi
callq 0x2120
movl %r15d, %eax
movq %rax, -0x50(%rbp)
movl %r15d, -0x40(%rbp)
testl %r15d, %r15d
je 0xec6f
xorl %ecx, %ecx
movq -0x30(%rbp), %rax
movq (%rax,%rcx,8), %r12
movl 0x14(%r12), %eax
testl %eax, %eax
jne 0xeaa9
movl 0x1c(%r12), %eax
movq %rcx, -0x58(%rbp)
testq %r12, %r12
je 0xfb32
movq 0x28(%r12), %rbx
subq 0x20(%r12), %rbx
movq -0xd0(%rbp), %rdi
movl %eax, %esi
callq 0x20a0
movsd 0x8d0a(%rip), %xmm1     # 0x177e0
divsd %xmm1, %xmm0
divsd %xmm1, %xmm0
divsd 0x8d02(%rip), %xmm0     # 0x177e8
cvttsd2si %xmm0, %rdx
movq %r12, %r13
subq 0x2000008(%r14), %r13
movq -0x38(%rbp), %r14
movq %r14, %rdi
leaq 0x9dab(%rip), %r15      # 0x188ae
movq %r15, %rsi
xorl %eax, %eax
callq 0x2230
movq %rbx, %rax
movabsq $-0x543388ee7b9e3103, %rcx # imm = 0xABCC77118461CEFD
mulq %rcx
shrq $0x1a, %rdx
movq %r14, %rdi
movq %r15, %rsi
xorl %eax, %eax
callq 0x2230
movl 0x1c(%r12), %edi
callq 0xb6b4
movq %r14, %rdi
leaq 0x9d70(%rip), %rbx      # 0x188b2
movq %rbx, %rsi
movq %rax, %rdx
xorl %eax, %eax
callq 0x2230
movl 0x18(%r12), %edi
callq 0xb6b4
movq %r14, %rdi
movq %rbx, %rsi
movq %rax, %rdx
xorl %eax, %eax
callq 0x2230
movl 0x14(%r12), %edi
callq 0xb6b4
movq %r14, %rdi
movq %rbx, %rsi
movq %rax, %rdx
xorl %eax, %eax
callq 0x2230
movq 0x20(%r12), %rax
testq %rax, %rax
js 0xeb97
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
jmp 0xebaf
movq %rax, %rcx
shrq %rcx
andl $0x1, %eax
orq %rcx, %rax
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
addss %xmm0, %xmm0
leaq 0x9d02(%rip), %r15      # 0x188b8
divss 0x8b52(%rip), %xmm0     # 0x17710
cvtss2sd %xmm0, %xmm0
movq -0x38(%rbp), %rdi
movq %r15, %rsi
movb $0x1, %al
callq 0x2230
movq 0x28(%r12), %rax
testq %rax, %rax
movq -0x60(%rbp), %r14
js 0xebe8
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
jmp 0xec00
movq %rax, %rcx
shrq %rcx
andl $0x1, %eax
orq %rcx, %rax
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
addss %xmm0, %xmm0
shrq $0x4, %r13
imull $0xcccccccd, %r13d, %ebx # imm = 0xCCCCCCCD
incl %ebx
divss 0x8afb(%rip), %xmm0     # 0x17710
cvtss2sd %xmm0, %xmm0
movq -0x38(%rbp), %r13
movq %r13, %rdi
movq %r15, %rsi
movb $0x1, %al
callq 0x2230
movl 0x3c(%r12), %edx
movq %r13, %rdi
leaq 0x9c75(%rip), %rsi      # 0x188ae
xorl %eax, %eax
callq 0x2230
movq %r14, %rdi
movl %ebx, %esi
callq 0xe040
movq %r13, %rdi
leaq 0x8f47(%rip), %rsi      # 0x17b9b
movq %rax, %rdx
xorl %eax, %eax
callq 0x2230
movq -0x58(%rbp), %rcx
incq %rcx
cmpq %rcx, -0x50(%rbp)
jne 0xea93
leaq 0x99ca(%rip), %rdi      # 0x18640
movl $0x2, %esi
movl $0x1, %edx
movq %r13, %rcx
callq 0x22b0
movl -0x68(%rbp), %ebx
movl %ebx, %edi
callq 0xb5d3
leaq 0x9c26(%rip), %rsi      # 0x188bf
movq %r13, %rdi
movq %rax, %rdx
xorl %eax, %eax
callq 0x2230
leaq 0x9b99(%rip), %rdi      # 0x18846
movl $0x67, %esi
movl $0x1, %edx
movq %r13, %rcx
callq 0x22b0
leaq 0x1000a(%rip), %rax     # 0x1ecd0
leaq -0x48(%rbp), %rdi
movq %rax, (%rdi)
movq -0x30(%rbp), %rsi
movl %ebx, %edx
callq 0xb372
leaq -0xd0(%rbp), %rdi
callq 0x2120
cmpl $0x0, -0x40(%rbp)
je 0xee96
leaq 0x9bb9(%rip), %rbx      # 0x188ae
xorl %ecx, %ecx
movq -0x30(%rbp), %rax
movq %rcx, -0x58(%rbp)
movq (%rax,%rcx,8), %r12
movq 0x28(%r12), %r13
subq 0x20(%r12), %r13
movq %r12, %rdi
callq 0x10002
movq %r12, %r15
subq 0x2000008(%r14), %r15
movq -0x38(%rbp), %rdi
movq %rbx, %rsi
movl %eax, %edx
xorl %eax, %eax
callq 0x2230
movq %r13, %rax
movq -0x38(%rbp), %r14
movabsq $-0x543388ee7b9e3103, %rcx # imm = 0xABCC77118461CEFD
mulq %rcx
shrq $0x1a, %rdx
movq %r14, %rdi
movq %rbx, %rsi
xorl %eax, %eax
callq 0x2230
movl 0x1c(%r12), %edi
callq 0xb6b4
movq %r14, %rdi
leaq 0x9b4a(%rip), %rbx      # 0x188b2
movq %rbx, %rsi
movq %rax, %rdx
xorl %eax, %eax
callq 0x2230
movl 0x18(%r12), %edi
callq 0xb6b4
movq %r14, %rdi
movq %rbx, %rsi
movq %rax, %rdx
xorl %eax, %eax
callq 0x2230
movl 0x14(%r12), %edi
callq 0xb6b4
movq %r14, %rdi
movq %rbx, %rsi
movq %rax, %rdx
xorl %eax, %eax
callq 0x2230
movq 0x20(%r12), %rax
testq %rax, %rax
js 0xedba
cvtsi2ss %rax, %xmm0
jmp 0xedcf
movq %rax, %rcx
shrq %rcx
andl $0x1, %eax
orq %rcx, %rax
cvtsi2ss %rax, %xmm0
addss %xmm0, %xmm0
leaq 0x9ae2(%rip), %rbx      # 0x188b8
divss 0x8932(%rip), %xmm0     # 0x17710
cvtss2sd %xmm0, %xmm0
movq %r14, %rdi
movq %rbx, %rsi
movb $0x1, %al
callq 0x2230
movq 0x28(%r12), %rax
testq %rax, %rax
js 0xee03
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
jmp 0xee1b
movq %rax, %rcx
shrq %rcx
andl $0x1, %eax
orq %rcx, %rax
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
addss %xmm0, %xmm0
shrq $0x4, %r15
imull $0xcccccccd, %r15d, %r13d # imm = 0xCCCCCCCD
incl %r13d
divss 0x88df(%rip), %xmm0     # 0x17710
cvtss2sd %xmm0, %xmm0
movq -0x38(%rbp), %r14
movq %r14, %rdi
movq %rbx, %rsi
movb $0x1, %al
callq 0x2230
movl 0x3c(%r12), %edx
movq %r14, %rdi
leaq 0x9a59(%rip), %rbx      # 0x188ae
movq %rbx, %rsi
xorl %eax, %eax
callq 0x2230
movq -0x60(%rbp), %rdi
movl %r13d, %esi
movq %r14, %r13
movq %rdi, %r14
callq 0xe040
movq %r13, %rdi
leaq 0x8d20(%rip), %rsi      # 0x17b9b
movq %rax, %rdx
xorl %eax, %eax
callq 0x2230
movq -0x58(%rbp), %rcx
incq %rcx
cmpq %rcx, -0x50(%rbp)
jne 0xecf7
leaq 0x97a3(%rip), %rdi      # 0x18640
movl $0x2, %esi
movl $0x1, %edx
movq %r13, %rcx
callq 0x22b0
movq -0x30(%rbp), %rdi
callq 0x21f0
leaq 0x9781(%rip), %rbx      # 0x18640
movl $0x2, %esi
movl $0x1, %edx
movq %rbx, %rdi
movq -0x38(%rbp), %r12
movq %r12, %rcx
callq 0x22b0
movl 0x2000050(%r14), %edx
leaq 0x9ab3(%rip), %rsi      # 0x18999
movq %r12, %rdi
xorl %eax, %eax
callq 0x2230
movl $0x2, %esi
movl $0x1, %edx
movq %rbx, %rdi
movq %r12, %rcx
callq 0x22b0
leaq 0x9ab1(%rip), %rdi      # 0x189bd
movl $0x5, %esi
movl $0x1, %edx
movq %r12, %rcx
callq 0x22b0
leaq 0x9a9e(%rip), %rdi      # 0x189c3
movl $0xc, %esi
movl $0x1, %edx
movq %r12, %rcx
callq 0x22b0
leaq 0x9a92(%rip), %rdi      # 0x189d0
movl $0xc, %esi
movl $0x1, %edx
movq %r12, %rcx
callq 0x22b0
leaq 0x9a86(%rip), %rdi      # 0x189dd
movl $0x9, %esi
movl $0x1, %edx
movq %r12, %rcx
callq 0x22b0
leaq 0x9a77(%rip), %rdi      # 0x189e7
movl $0xf, %esi
movl $0x1, %edx
movq %r12, %rcx
callq 0x22b0
leaq 0x9a6e(%rip), %rdi      # 0x189f7
movl $0xe, %esi
movl $0x1, %edx
movq %r12, %rcx
callq 0x22b0
leaq 0x9a64(%rip), %rdi      # 0x18a06
movl $0x15, %esi
movl $0x1, %edx
movq %r12, %rcx
callq 0x22b0
leaq 0x9a61(%rip), %rdi      # 0x18a1c
movl $0x11, %esi
movl $0x1, %edx
movq %r12, %rcx
callq 0x22b0
leaq 0x9a5a(%rip), %rdi      # 0x18a2e
movl $0xa, %esi
movl $0x1, %edx
movq %r12, %rcx
callq 0x22b0
leaq 0x9a4c(%rip), %rdi      # 0x18a39
movl $0xb, %esi
movl $0x1, %edx
movq %r12, %rcx
callq 0x22b0
leaq 0x9a3f(%rip), %rdi      # 0x18a45
movl $0x13, %esi
movl $0x1, %edx
movq %r12, %rcx
callq 0x22b0
leaq 0x9a3a(%rip), %rdi      # 0x18a59
movl $0x13, %esi
movl $0x1, %edx
movq %r12, %rcx
callq 0x22b0
leaq 0x9a35(%rip), %rdi      # 0x18a6d
movl $0xf, %esi
movl $0x1, %edx
movq %r12, %rcx
callq 0x22b0
leaq 0x9a2c(%rip), %rdi      # 0x18a7d
movl $0xf, %esi
movl $0x1, %edx
movq %r12, %rcx
callq 0x22b0
leaq 0x9a23(%rip), %rdi      # 0x18a8d
movl $0x10, %esi
movl $0x1, %edx
movq %r12, %rcx
callq 0x22b0
leaq 0x9a1b(%rip), %rdi      # 0x18a9e
movl $0x11, %esi
movl $0x1, %edx
movq %r12, %rcx
callq 0x22b0
leaq 0x9a14(%rip), %rdi      # 0x18ab0
movl $0x13, %esi
movl $0x1, %edx
movq %r12, %rcx
callq 0x22b0
leaq 0x9a0f(%rip), %rdi      # 0x18ac4
movl $0x11, %esi
movl $0x1, %edx
movq %r12, %rcx
callq 0x22b0
leaq 0x9a08(%rip), %rdi      # 0x18ad6
movl $0x12, %esi
movl $0x1, %edx
movq %r12, %rcx
callq 0x22b0
leaq 0x9a02(%rip), %rdi      # 0x18ae9
movl $0x14, %esi
movl $0x1, %edx
movq %r12, %rcx
callq 0x22b0
cmpl $0x0, 0x2000050(%r14)
je 0xf42b
leaq 0x2000058(%r14), %rax
movq %rax, -0x88(%rbp)
leaq 0x2000100(%r14), %r13
xorl %ecx, %ecx
movq %rcx, -0x58(%rbp)
imulq $0x190, %rcx, %rbx      # imm = 0x190
movq -0x88(%rbp), %r14
leaq (%r14,%rbx), %rax
movq %rax, -0x30(%rbp)
movl 0xc(%r14,%rbx), %eax
movq %rax, -0x48(%rbp)
leaq -0x48(%rbp), %rdi
callq 0x20d0
movl 0xc(%rax), %ecx
movl %ecx, -0x3c(%rbp)
movl 0x14(%rax), %r8d
movslq 0x10(%rax), %rcx
movl 0x10(%r14,%rbx), %eax
movl 0x20(%r14,%rbx), %r11d
movl 0x30(%r14,%rbx), %edx
movl %edx, -0x40(%rbp)
movq 0x38(%r14,%rbx), %rdx
movq %rdx, -0x68(%rbp)
xorl %r15d, %r15d
movl $0x8, %edx
movq %r13, -0x50(%rbp)
movq %r13, %rsi
xorl %r12d, %r12d
xorl %ebx, %ebx
xorl %r13d, %r13d
xorl %r10d, %r10d
movl -0x8(%rsi), %edi
addl %edi, %r15d
movq (%rsi), %r9
addq %r9, %r12
cmpq $0xe, %rdx
cmovbq %r10, %r9
cmovbl %r10d, %edi
addq %r9, %r13
addl %edi, %ebx
incq %rdx
addq $0x10, %rsi
cmpq $0x12, %rdx
jne 0xf18d
movl %eax, -0x90(%rbp)
subl %r11d, %eax
movl %eax, -0x98(%rbp)
leaq 0xfa43(%rip), %rdx      # 0x1ec10
movq (%rdx,%rcx,8), %rdx
addl $0x76c, %r8d            # imm = 0x76C
movq -0x38(%rbp), %r14
movq %r14, %rdi
leaq 0x9918(%rip), %rsi      # 0x18afe
movl -0x3c(%rbp), %ecx
xorl %eax, %eax
movl %r11d, -0x3c(%rbp)
callq 0x2230
movabsq $-0x543388ee7b9e3103, %rax # imm = 0xABCC77118461CEFD
movq -0x30(%rbp), %rcx
mulq (%rcx)
shrq $0x1a, %rdx
movq %r14, %rdi
leaq 0x969b(%rip), %rsi      # 0x188ae
xorl %eax, %eax
callq 0x2230
movq -0x30(%rbp), %r14
movl 0x8(%r14), %edx
movq -0x38(%rbp), %rdi
leaq 0x9681(%rip), %rsi      # 0x188ae
xorl %eax, %eax
callq 0x2230
movabsq $-0x543388ee7b9e3103, %rax # imm = 0xABCC77118461CEFD
mulq 0x18(%r14)
shrq $0x1a, %rdx
movq -0x38(%rbp), %r14
movq %r14, %rdi
leaq 0x965a(%rip), %rsi      # 0x188ae
xorl %eax, %eax
callq 0x2230
movq -0x30(%rbp), %rcx
movq 0x18(%rcx), %rax
subq (%rcx), %rax
movabsq $-0x543388ee7b9e3103, %rcx # imm = 0xABCC77118461CEFD
mulq %rcx
shrq $0x1a, %rdx
movq %r14, %rdi
leaq 0x962d(%rip), %rsi      # 0x188ae
xorl %eax, %eax
callq 0x2230
movq %r14, %rdi
leaq 0x961c(%rip), %rsi      # 0x188ae
movl -0x90(%rbp), %edx
xorl %eax, %eax
callq 0x2230
movq %r14, %rdi
leaq 0x9605(%rip), %rsi      # 0x188ae
movl -0x98(%rbp), %edx
xorl %eax, %eax
callq 0x2230
movq %r14, %rdi
leaq 0x95ee(%rip), %rsi      # 0x188ae
movl -0x3c(%rbp), %edx
xorl %eax, %eax
callq 0x2230
movq %r14, %rdi
leaq 0x95da(%rip), %rsi      # 0x188ae
movl -0x40(%rbp), %edx
xorl %eax, %eax
callq 0x2230
movq -0x68(%rbp), %rax
movabsq $-0x543388ee7b9e3103, %rcx # imm = 0xABCC77118461CEFD
mulq %rcx
shrq $0x1a, %rdx
movq %r14, %rdi
leaq 0x95b1(%rip), %rsi      # 0x188ae
xorl %eax, %eax
callq 0x2230
movq %r14, %rdi
leaq 0x95a0(%rip), %rsi      # 0x188ae
movl %r15d, %edx
xorl %eax, %eax
callq 0x2230
movq %r12, %rax
movabsq $-0x543388ee7b9e3103, %r15 # imm = 0xABCC77118461CEFD
mulq %r15
shrq $0x1a, %rdx
movq %r14, %rdi
leaq 0x9578(%rip), %r12      # 0x188ae
movq %r12, %rsi
xorl %eax, %eax
callq 0x2230
movq %r14, %rdi
movq %r12, %rsi
movl %ebx, %edx
xorl %eax, %eax
callq 0x2230
movq %r13, %rax
movq %r14, %r12
mulq %r15
shrq $0x1a, %rdx
movq %r14, %rdi
leaq 0x9548(%rip), %rbx      # 0x188ae
movq %rbx, %rsi
xorl %eax, %eax
callq 0x2230
movq -0x30(%rbp), %r14
movl 0x160(%r14), %edx
movq %r12, %rdi
movq %rbx, %rsi
xorl %eax, %eax
callq 0x2230
movl 0x164(%r14), %edx
movq %r12, %rdi
movq %rbx, %rsi
xorl %eax, %eax
callq 0x2230
movl 0x168(%r14), %edx
movq %r12, %rdi
movq %rbx, %rsi
xorl %eax, %eax
callq 0x2230
movl 0x16c(%r14), %edx
movq %r12, %rdi
movq %rbx, %rsi
xorl %eax, %eax
callq 0x2230
movl 0x170(%r14), %edx
movq %r12, %rdi
movq %rbx, %rsi
xorl %eax, %eax
callq 0x2230
movl 0x174(%r14), %edx
movq %r12, %rdi
movq %rbx, %rsi
xorl %eax, %eax
callq 0x2230
movl $0x2, %esi
movl $0x1, %edx
leaq 0x9243(%rip), %rdi      # 0x18640
movq %r12, %rcx
callq 0x22b0
movq -0x58(%rbp), %rcx
incq %rcx
movq -0x60(%rbp), %r14
movl 0x2000050(%r14), %eax
movq -0x50(%rbp), %r13
addq $0x190, %r13            # imm = 0x190
cmpq %rax, %rcx
jb 0xf11e
leaq 0x920e(%rip), %rbx      # 0x18640
movl $0x2, %esi
movl $0x1, %edx
movq %rbx, %rdi
movq %r12, %rcx
callq 0x22b0
movl $0x2, %esi
movl $0x1, %edx
movq %rbx, %rdi
movq %r12, %rcx
callq 0x22b0
leaq 0x96bb(%rip), %rdi      # 0x18b1e
movl $0x3b, %esi
movl $0x1, %edx
movq %r12, %rcx
callq 0x22b0
movl $0x2, %esi
movl $0x1, %edx
movq %rbx, %rdi
movq %r12, %rcx
callq 0x22b0
movl $0x2c, %edi
movq %r12, %rsi
callq 0x21d0
leaq 0x9414(%rip), %rbx      # 0x188b2
movq %r14, %r15
xorl %r14d, %r14d
movq 0x20d5e38(%r15,%r14,8), %rdx
movq %r12, %rdi
movq %rbx, %rsi
xorl %eax, %eax
callq 0x2230
incq %r14
cmpq $0x13, %r14
jne 0xf4a4
leaq 0x9177(%rip), %rdi      # 0x18640
movl $0x2, %esi
movl $0x1, %edx
movq %r12, %rcx
callq 0x22b0
cmpl $0x0, 0x2000050(%r15)
movq %r15, %r14
je 0xf5ab
leaq 0x2000058(%r14), %rax
movq %rax, -0x30(%rbp)
leaq 0x2000078(%r14), %r15
leaq 0x93a9(%rip), %rbx      # 0x188ae
xorl %r13d, %r13d
imulq $0x190, %r13, %rax      # imm = 0x190
movq -0x30(%rbp), %rcx
movl 0xc(%rcx,%rax), %eax
movq %rax, -0x48(%rbp)
leaq -0x48(%rbp), %rdi
callq 0x20d0
movl 0xc(%rax), %ecx
movslq 0x10(%rax), %rdx
leaq 0xf6de(%rip), %rsi      # 0x1ec10
movq (%rsi,%rdx,8), %rdx
movl 0x14(%rax), %r8d
movl $0x76c, %eax            # imm = 0x76C
addl %eax, %r8d
movq %r12, %rdi
leaq 0x95b2(%rip), %rsi      # 0x18afe
xorl %eax, %eax
callq 0x2230
xorl %r14d, %r14d
movl (%r15,%r14), %edx
movq %r12, %rdi
movq %rbx, %rsi
xorl %eax, %eax
callq 0x2230
addq $0x10, %r14
cmpq $0x130, %r14            # imm = 0x130
jne 0xf556
movl $0x2, %esi
movl $0x1, %edx
leaq 0x90bb(%rip), %rdi      # 0x18640
movq %r12, %rcx
callq 0x22b0
incq %r13
movq -0x60(%rbp), %r14
movl 0x2000050(%r14), %eax
addq $0x190, %r15            # imm = 0x190
cmpq %rax, %r13
jb 0xf508
leaq 0x908e(%rip), %rbx      # 0x18640
movl $0x2, %esi
movl $0x1, %edx
movq %rbx, %rdi
movq %r12, %rcx
callq 0x22b0
movl $0x2, %esi
movl $0x1, %edx
movq %rbx, %rdi
movq %r12, %rcx
callq 0x22b0
leaq 0x958c(%rip), %rdi      # 0x18b6f
movl $0x41, %esi
movl $0x1, %edx
movq %r12, %rcx
callq 0x22b0
movl $0x2, %esi
movl $0x1, %edx
movq %rbx, %rdi
movq %r12, %rcx
callq 0x22b0
movl $0x2c, %edi
movq %r12, %rsi
callq 0x21d0
leaq 0x9294(%rip), %rbx      # 0x188b2
movq %r14, %r15
xorl %r14d, %r14d
movq 0x20d5e38(%r15,%r14,8), %rdx
movq %r12, %rdi
movq %rbx, %rsi
xorl %eax, %eax
callq 0x2230
incq %r14
cmpq $0x13, %r14
jne 0xf624
leaq 0x8ff7(%rip), %rdi      # 0x18640
movl $0x2, %esi
movl $0x1, %edx
movq %r12, %rcx
callq 0x22b0
cmpl $0x0, 0x2000050(%r15)
movq %r15, %r14
movq %r12, %rbx
je 0xf761
leaq 0x2000058(%r14), %rax
movq %rax, -0x30(%rbp)
leaq 0x2000080(%r14), %r15
leaq 0x9482(%rip), %r12      # 0x18b0a
xorl %r13d, %r13d
imulq $0x190, %r13, %rax      # imm = 0x190
movq -0x30(%rbp), %rcx
movl 0xc(%rcx,%rax), %eax
movq %rax, -0x48(%rbp)
leaq -0x48(%rbp), %rdi
callq 0x20d0
movl 0xc(%rax), %ecx
movslq 0x10(%rax), %rdx
leaq 0xf55b(%rip), %rsi      # 0x1ec10
movq (%rsi,%rdx,8), %rdx
movl 0x14(%rax), %r8d
movl $0x76c, %eax            # imm = 0x76C
addl %eax, %r8d
movq %rbx, %rdi
leaq 0x942f(%rip), %rsi      # 0x18afe
xorl %eax, %eax
callq 0x2230
xorl %ebx, %ebx
movq (%r15,%rbx), %rax
testq %rax, %rax
js 0xf6eb
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
jmp 0xf703
movq %rax, %rcx
shrq %rcx
andl $0x1, %eax
orq %rcx, %rax
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
addss %xmm0, %xmm0
divss 0x8005(%rip), %xmm0     # 0x17710
cvtss2sd %xmm0, %xmm0
movq -0x38(%rbp), %rdi
movq %r12, %rsi
movb $0x1, %al
callq 0x2230
addq $0x10, %rbx
cmpq $0x130, %rbx            # imm = 0x130
jne 0xf6d8
movl $0x2, %esi
movl $0x1, %edx
leaq 0x8f05(%rip), %rdi      # 0x18640
movq -0x38(%rbp), %rbx
movq %rbx, %rcx
callq 0x22b0
incq %r13
movl 0x2000050(%r14), %eax
addq $0x190, %r15            # imm = 0x190
cmpq %rax, %r13
jb 0xf68b
leaq 0x8ed8(%rip), %r15      # 0x18640
movl $0x2, %esi
movl $0x1, %edx
movq %r15, %rdi
movq %rbx, %rcx
callq 0x22b0
movl $0x2, %esi
movl $0x1, %edx
movq %r15, %rdi
movq %rbx, %rcx
callq 0x22b0
leaq 0x9378(%rip), %rdi      # 0x18b11
movl $0x48, %esi
movl $0x1, %edx
movq %rbx, %rcx
callq 0x22b0
movl $0x2, %esi
movl $0x1, %edx
movq %r15, %rdi
movq %rbx, %rcx
callq 0x22b0
movl $0x2c, %edi
movq %rbx, %rsi
callq 0x21d0
leaq 0x90de(%rip), %r12      # 0x188b2
movq %r14, %r15
xorl %r14d, %r14d
movq 0x20d5e40(%r15,%r14,8), %rdx
movq %rbx, %rdi
movq %r12, %rsi
xorl %eax, %eax
callq 0x2230
incq %r14
cmpq $0x12, %r14
jne 0xf7da
leaq 0x8e41(%rip), %rdi      # 0x18640
movl $0x2, %esi
movl $0x1, %edx
movq %rbx, %rcx
callq 0x22b0
cmpl $0x0, 0x2000050(%r15)
movq %r15, %r14
movq %rbx, %r13
je 0xf910
leaq 0x2000058(%r14), %rax
movq %rax, -0x50(%rbp)
leaq 0x2000088(%r14), %r15
leaq 0x92cc(%rip), %r12      # 0x18b0a
xorl %ecx, %ecx
movq %rcx, -0x30(%rbp)
imulq $0x190, %rcx, %rax      # imm = 0x190
movq -0x50(%rbp), %rcx
leaq (%rcx,%rax), %rbx
movl 0xc(%rcx,%rax), %eax
movq %rax, -0x48(%rbp)
leaq -0x48(%rbp), %rdi
callq 0x20d0
movslq 0x10(%rax), %rcx
leaq 0xf3a1(%rip), %rdx      # 0x1ec10
movq (%rdx,%rcx,8), %rdx
movl 0x14(%rax), %ecx
movl $0x76c, %eax            # imm = 0x76C
addl %eax, %ecx
movq %r13, %rdi
leaq 0x92d3(%rip), %rsi      # 0x18b5a
xorl %eax, %eax
callq 0x2230
xorl %r14d, %r14d
movl (%r15,%r14), %eax
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
movl 0x10(%rbx), %eax
subl 0x20(%rbx), %eax
xorps %xmm1, %xmm1
cvtsi2ss %rax, %xmm1
mulss 0x7f29(%rip), %xmm0     # 0x177dc
divss %xmm1, %xmm0
cvtss2sd %xmm0, %xmm0
movq %r13, %rdi
movq %r12, %rsi
movb $0x1, %al
callq 0x2230
addq $0x10, %r14
cmpq $0x120, %r14            # imm = 0x120
jne 0xf891
movl $0x2, %esi
movl $0x1, %edx
leaq 0x8d5a(%rip), %rdi      # 0x18640
movq %r13, %rcx
callq 0x22b0
movq -0x30(%rbp), %rcx
incq %rcx
movq -0x60(%rbp), %r14
movl 0x2000050(%r14), %eax
addq $0x190, %r15            # imm = 0x190
cmpq %rax, %rcx
jb 0xf840
leaq 0x8d29(%rip), %rbx      # 0x18640
movl $0x2, %esi
movl $0x1, %edx
movq %rbx, %rdi
movq %r13, %rcx
callq 0x22b0
movl $0x2, %esi
movl $0x1, %edx
movq %rbx, %rdi
movq %r13, %rcx
callq 0x22b0
leaq 0x921b(%rip), %rdi      # 0x18b63
movl $0x4d, %esi
movl $0x1, %edx
movq %r13, %rcx
callq 0x22b0
movl $0x2, %esi
movl $0x1, %edx
movq %rbx, %rdi
movq %r13, %rcx
callq 0x22b0
movl $0x2c, %edi
movq %r13, %rsi
callq 0x21d0
leaq 0x8f2f(%rip), %rbx      # 0x188b2
movq %r14, %r15
xorl %r14d, %r14d
movq 0x20d5e40(%r15,%r14,8), %rdx
movq %r13, %rdi
movq %rbx, %rsi
xorl %eax, %eax
callq 0x2230
incq %r14
cmpq $0x12, %r14
jne 0xf989
leaq 0x8c92(%rip), %rdi      # 0x18640
movl $0x2, %esi
movl $0x1, %edx
movq %r13, %rcx
callq 0x22b0
cmpl $0x0, 0x2000050(%r15)
je 0xfaff
movq -0x60(%rbp), %rcx
leaq 0x2000058(%rcx), %rax
movq %rax, -0x30(%rbp)
leaq 0x2000090(%rcx), %r15
leaq 0x911f(%rip), %r12      # 0x18b0a
xorl %ecx, %ecx
movq %rcx, %r14
imulq $0x190, %rcx, %rax      # imm = 0x190
movq -0x30(%rbp), %rcx
leaq (%rcx,%rax), %rbx
movl 0xc(%rcx,%rax), %eax
movq %rax, -0x48(%rbp)
leaq -0x48(%rbp), %rdi
callq 0x20d0
movslq 0x10(%rax), %rcx
leaq 0xf1f5(%rip), %rdx      # 0x1ec10
movq (%rdx,%rcx,8), %rdx
movl 0x14(%rax), %ecx
movl $0x76c, %eax            # imm = 0x76C
addl %eax, %ecx
movq %r13, %rdi
leaq 0x9127(%rip), %rsi      # 0x18b5a
xorl %eax, %eax
callq 0x2230
xorl %r13d, %r13d
movq (%r15,%r13), %rax
testq %rax, %rax
js 0xfa50
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
jmp 0xfa68
movq %rax, %rcx
shrq %rcx
andl $0x1, %eax
orq %rcx, %rax
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
addss %xmm0, %xmm0
mulss 0x7d6c(%rip), %xmm0     # 0x177dc
movq 0x18(%rbx), %rax
testq %rax, %rax
js 0xfa83
xorps %xmm1, %xmm1
cvtsi2ss %rax, %xmm1
jmp 0xfa9b
movq %rax, %rcx
shrq %rcx
andl $0x1, %eax
orq %rcx, %rax
xorps %xmm1, %xmm1
cvtsi2ss %rax, %xmm1
addss %xmm1, %xmm1
divss %xmm1, %xmm0
cvtss2sd %xmm0, %xmm0
movq -0x38(%rbp), %rdi
movq %r12, %rsi
movb $0x1, %al
callq 0x2230
addq $0x10, %r13
cmpq $0x120, %r13            # imm = 0x120
jne 0xfa3d
movl $0x2, %esi
movl $0x1, %edx
leaq 0x8b6d(%rip), %rdi      # 0x18640
movq -0x38(%rbp), %r13
movq %r13, %rcx
callq 0x22b0
movq %r14, %rcx
incq %rcx
movq -0x60(%rbp), %rax
movl 0x2000050(%rax), %eax
addq $0x190, %r15            # imm = 0x190
cmpq %rax, %rcx
jb 0xf9ed
leaq 0x8b3a(%rip), %rdi      # 0x18640
movl $0x2, %esi
movl $0x1, %edx
movq %r13, %rcx
callq 0x22b0
movq %r13, %rdi
callq 0x2150
addq $0x148, %rsp            # imm = 0x148
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0xa69e(%rip), %rdi      # 0x1a1d7
leaq 0x7cb0(%rip), %rsi      # 0x177f0
leaq 0x8590(%rip), %rcx      # 0x180d7
movl $0x13b, %edx            # imm = 0x13B
callq 0x20c0
nop