// File: /workspace/github_cpp_makefile_star2_O1/ShootMe[P]Klondike-Solver/Solitaire.cpp
// Function: Solitaire::GameDiagramPysol[abi:cxx11]()
string Solitaire::GameDiagramPysol() {
	stringstream ss;
	ss << "Foundations: H-" << RANKS[piles[FOUNDATION4H].Size()] << " C-" << RANKS[piles[FOUNDATION1C].Size()] << " D-" << RANKS[piles[FOUNDATION2D].Size()] << " S-" << RANKS[piles[FOUNDATION3S].Size()];
	ss << "\nTalon: ";

	Pile & waste = piles[WASTE];
	int size = waste.UpSize();
	for (int j = size - 1; j >= 0; j--) {
		Card c = waste.Up(j);
		char rank = RANKS[c.Rank];
		char suit = c.Suit != NONE ? SUITS[c.Suit] : 'X';
		ss << rank << suit << ' ';
	}
	ss << "==> ";

	Pile & stock = piles[STOCK];
	size = stock.UpSize();
	for (int j = size - 1; j >= 0; j--) {
		Card c = stock.Up(j);
		char rank = RANKS[c.Rank];
		char suit = c.Suit != NONE ? SUITS[c.Suit] : 'X';
		ss << rank << suit << ' ';
	}
	ss << "<==";

	for (int i = TABLEAU1; i <= TABLEAU7; i++) {
		ss << "\n:";
		Pile & p = piles[i];
		size = p.DownSize();
		for (int j = 0; j < size; j++) {
			Card c = p.Down(j);
			char rank = RANKS[c.Rank];
			char suit = c.Suit != NONE ? SUITS[c.Suit] : 'X';
			ss << " <" << rank << suit << ">";
		}
		size = p.UpSize();
		for (int j = 0; j < size; j++) {
			Card c = p.Up(j);
			char rank = RANKS[c.Rank];
			char suit = c.Suit != NONE ? SUITS[c.Suit] : 'X';
			ss << ' ' << rank << suit;
		}
	}

	return ss.str();
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x1a8, %rsp            # imm = 0x1A8
movq %rsi, %r12
movq %rdi, 0x10(%rsp)
leaq 0x20(%rsp), %rdi
callq 0x2130
leaq 0x30(%rsp), %rdi
leaq 0x243f(%rip), %rsi      # 0xa92e
movl $0xf, %edx
callq 0x2200
leaq 0x1610(%r12), %rdi
callq 0x3aae
cltq
leaq 0x2371(%rip), %rcx      # 0xa880
movb (%rax,%rcx), %al
leaq 0x7(%rsp), %rsi
movb %al, (%rsi)
movl $0x1, %edx
leaq 0x30(%rsp), %rdi
callq 0x2200
movq %rax, %rbx
leaq 0x240c(%rip), %rsi      # 0xa93e
movl $0x3, %edx
movq %rax, %rdi
callq 0x2200
leaq 0x128c(%r12), %rdi
callq 0x3aae
cltq
leaq 0x232b(%rip), %rcx      # 0xa880
movb (%rax,%rcx), %al
leaq 0x7(%rsp), %rsi
movb %al, (%rsi)
movl $0x1, %edx
movq %rbx, %rdi
callq 0x2200
movq %rax, %rbx
leaq 0x23cc(%rip), %rsi      # 0xa942
movl $0x3, %edx
movq %rax, %rdi
callq 0x2200
leaq 0x13b8(%r12), %rdi
callq 0x3aae
cltq
leaq 0x22e7(%rip), %rcx      # 0xa880
movb (%rax,%rcx), %al
leaq 0x7(%rsp), %rsi
movb %al, (%rsi)
movl $0x1, %edx
movq %rbx, %rdi
callq 0x2200
movq %rax, %rbx
leaq 0x238c(%rip), %rsi      # 0xa946
movl $0x3, %edx
movq %rax, %rdi
callq 0x2200
leaq 0x14e4(%r12), %rdi
callq 0x3aae
cltq
leaq 0x22a3(%rip), %rcx      # 0xa880
movb (%rax,%rcx), %al
leaq 0x7(%rsp), %rsi
movb %al, (%rsi)
movl $0x1, %edx
movq %rbx, %rdi
callq 0x2200
leaq 0x234f(%rip), %rsi      # 0xa94a
movl $0x8, %edx
leaq 0x30(%rsp), %rdi
callq 0x2200
leaq 0x800(%r12), %rdi
movq %rdi, 0x18(%rsp)
callq 0x3abe
movl %eax, %ebx
testl %eax, %eax
jle 0x86ad
incl %ebx
movl $0xff, %r13d
leaq 0x7(%rsp), %r15
leaq 0x2333(%rip), %rbp      # 0xa96d
leal -0x2(%rbx), %esi
movq 0x18(%rsp), %rdi
callq 0x3afc
movq %rax, %rcx
andq %r13, %rcx
movb $0x58, %r14b
cmpq %r13, %rcx
je 0x8659
movb (%rcx,%rbp), %r14b
movzbl %ah, %eax
leaq 0x221d(%rip), %rcx      # 0xa880
movb (%rax,%rcx), %al
movb %al, 0x7(%rsp)
movl $0x1, %edx
leaq 0x30(%rsp), %rdi
movq %r15, %rsi
callq 0x2200
movb %r14b, 0x7(%rsp)
movl $0x1, %edx
movq %rax, %rdi
movq %r15, %rsi
callq 0x2200
movb $0x20, 0x7(%rsp)
movl $0x1, %edx
movq %rax, %rdi
movq %r15, %rsi
callq 0x2200
decl %ebx
cmpl $0x1, %ebx
jg 0x863a
leaq 0x229f(%rip), %rsi      # 0xa953
movl $0x4, %edx
leaq 0x30(%rsp), %rdi
callq 0x2200
addq $0x1160, %r12           # imm = 0x1160
movq %r12, %rdi
callq 0x3abe
movl %eax, %ebx
testl %eax, %eax
jle 0x8761
incl %ebx
movl $0xff, %r13d
leaq 0x7(%rsp), %r15
leaq 0x227d(%rip), %rbp      # 0xa96d
leal -0x2(%rbx), %esi
movq %r12, %rdi
callq 0x3afc
movq %rax, %rcx
andq %r13, %rcx
movb $0x58, %r14b
cmpq %r13, %rcx
je 0x870d
movb (%rcx,%rbp), %r14b
movzbl %ah, %eax
leaq 0x2169(%rip), %rcx      # 0xa880
movb (%rax,%rcx), %al
movb %al, 0x7(%rsp)
movl $0x1, %edx
leaq 0x30(%rsp), %rdi
movq %r15, %rsi
callq 0x2200
movb %r14b, 0x7(%rsp)
movl $0x1, %edx
movq %rax, %rdi
movq %r15, %rsi
callq 0x2200
movb $0x20, 0x7(%rsp)
movl $0x1, %edx
movq %rax, %rdi
movq %r15, %rsi
callq 0x2200
decl %ebx
cmpl $0x1, %ebx
jg 0x86f0
leaq 0x21f0(%rip), %rsi      # 0xa958
movl $0x3, %edx
leaq 0x30(%rsp), %rdi
callq 0x2200
movl $0x1, %eax
movq %rax, 0x8(%rsp)
leaq 0x7(%rsp), %rbp
movl $0x2, %edx
leaq 0x30(%rsp), %rdi
leaq 0x21c5(%rip), %rsi      # 0xa95c
callq 0x2200
imulq $0x12c, 0x8(%rsp), %r12 # imm = 0x12C
addq 0x18(%rsp), %r12
movq %r12, %rdi
callq 0x3ab6
movl %eax, %r15d
testl %eax, %eax
jle 0x8857
xorl %r13d, %r13d
movq %r12, %rdi
movl %r13d, %esi
callq 0x3ae4
movq %rax, %rcx
movl $0xff, %edx
andq %rdx, %rcx
movb $0x58, %r14b
cmpq %rdx, %rcx
je 0x87e9
leaq 0x2188(%rip), %rdx      # 0xa96d
movb (%rcx,%rdx), %r14b
movzbl %ah, %eax
leaq 0x208d(%rip), %rcx      # 0xa880
movb (%rax,%rcx), %bl
movl $0x2, %edx
leaq 0x30(%rsp), %rdi
leaq 0x2158(%rip), %rsi      # 0xa95f
callq 0x2200
movb %bl, 0x7(%rsp)
movl $0x1, %edx
leaq 0x30(%rsp), %rdi
movq %rbp, %rsi
callq 0x2200
movb %r14b, 0x7(%rsp)
movl $0x1, %edx
movq %rax, %rdi
movq %rbp, %rsi
callq 0x2200
movl $0x1, %edx
movq %rax, %rdi
leaq 0x211c(%rip), %rsi      # 0xa962
callq 0x2200
incl %r13d
cmpl %r13d, %r15d
jne 0x87c0
movq %r12, %rdi
callq 0x3abe
movl %eax, %r15d
testl %eax, %eax
jle 0x88eb
xorl %r13d, %r13d
movq %r12, %rdi
movl %r13d, %esi
callq 0x3afc
movq %rax, %rcx
movl $0xff, %edx
andq %rdx, %rcx
movb $0x58, %r14b
cmpq %rdx, %rcx
je 0x8896
leaq 0x20db(%rip), %rdx      # 0xa96d
movb (%rcx,%rdx), %r14b
movzbl %ah, %eax
leaq 0x1fe0(%rip), %rcx      # 0xa880
movb (%rax,%rcx), %bl
movb $0x20, 0x7(%rsp)
movl $0x1, %edx
leaq 0x30(%rsp), %rdi
movq %rbp, %rsi
callq 0x2200
movb %bl, 0x7(%rsp)
movl $0x1, %edx
movq %rax, %rdi
movq %rbp, %rsi
callq 0x2200
movb %r14b, 0x7(%rsp)
movl $0x1, %edx
movq %rax, %rdi
movq %rbp, %rsi
callq 0x2200
incl %r13d
cmpl %r13d, %r15d
jne 0x886d
movq 0x8(%rsp), %rax
incq %rax
movq %rax, 0x8(%rsp)
cmpq $0x8, %rax
jne 0x8786
leaq 0x38(%rsp), %rsi
movq 0x10(%rsp), %rdi
callq 0x2280
movq 0x56a0(%rip), %rsi      # 0xdfb8
leaq 0x20(%rsp), %rdi
callq 0x2150
leaq 0xa0(%rsp), %rdi
callq 0x20a0
movq 0x10(%rsp), %rax
addq $0x1a8, %rsp            # imm = 0x1A8
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0x895e
jmp 0x895e
jmp 0x895e
jmp 0x895e
jmp 0x895e
jmp 0x895e
jmp 0x895e
jmp 0x895e
jmp 0x895e
jmp 0x895e
jmp 0x895e
jmp 0x895e
movq %rax, %rbx
movq 0x5650(%rip), %rsi      # 0xdfb8
leaq 0x20(%rsp), %rdi
callq 0x2150
leaq 0xa0(%rsp), %rdi
callq 0x20a0
movq %rbx, %rdi
callq 0x22e0