// File: ef-gy[P]libefgy/src/test-case/markov.cpp
// Function: bool testMarkovChain<1u>(std::ostream&)
bool testMarkovChain(std::ostream &log) {
  typename markov::chain<char, order>::random PRNG(1);
  markov::chain<char, order> mc(PRNG);

  const std::vector<std::string> input{"frob", "frib", "frab",
                                       "foo",  "bar",  "baz"};
  for (const auto &i : input) {
    mc << typename markov::chain<char, order>::input(i.begin(), i.end());
  }

  typename markov::chain<char, order>::output out;

  mc >> out;
  std::cerr << std::string(out.begin(), out.end()) << "\n";
  mc >> out;
  std::cerr << std::string(out.begin(), out.end()) << "\n";
  mc >> out;
  std::cerr << std::string(out.begin(), out.end()) << "\n";
  mc >> out;
  std::cerr << std::string(out.begin(), out.end()) << "\n";
  mc >> out;
  std::cerr << std::string(out.begin(), out.end()) << "\n";

  return true;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x2b10, %rsp           # imm = 0x2B10
movq %rdi, -0x8(%rbp)
leaq -0x1390(%rbp), %rdi
movq %rdi, -0x29f0(%rbp)
movl $0x1, %esi
callq 0x347b0
movq -0x29f0(%rbp), %rsi
leaq -0x2748(%rbp), %rdi
callq 0x347e0
movb $0x1, -0x2852(%rbp)
leaq -0x2830(%rbp), %rax
movq %rax, -0x29e8(%rbp)
movq %rax, -0x2838(%rbp)
leaq -0x2839(%rbp), %rdi
movq %rdi, -0x29e0(%rbp)
callq 0x55c0
movq -0x29e8(%rbp), %rdi
movq -0x29e0(%rbp), %rdx
leaq 0x3863c(%rip), %rsi     # 0x3eb6a
callq 0x60a0
jmp 0x6535
leaq -0x2810(%rbp), %rax
movq %rax, -0x2a00(%rbp)
movq %rax, -0x2838(%rbp)
leaq -0x284d(%rbp), %rdi
movq %rdi, -0x29f8(%rbp)
callq 0x55c0
movq -0x2a00(%rbp), %rdi
movq -0x29f8(%rbp), %rdx
leaq 0x385fd(%rip), %rsi     # 0x3eb6f
callq 0x60a0
jmp 0x6579
leaq -0x27f0(%rbp), %rax
movq %rax, -0x2a10(%rbp)
movq %rax, -0x2838(%rbp)
leaq -0x284e(%rbp), %rdi
movq %rdi, -0x2a08(%rbp)
callq 0x55c0
movq -0x2a10(%rbp), %rdi
movq -0x2a08(%rbp), %rdx
leaq 0x385be(%rip), %rsi     # 0x3eb74
callq 0x60a0
jmp 0x65bd
leaq -0x27d0(%rbp), %rax
movq %rax, -0x2a20(%rbp)
movq %rax, -0x2838(%rbp)
leaq -0x284f(%rbp), %rdi
movq %rdi, -0x2a18(%rbp)
callq 0x55c0
movq -0x2a20(%rbp), %rdi
movq -0x2a18(%rbp), %rdx
leaq 0x3857f(%rip), %rsi     # 0x3eb79
callq 0x60a0
jmp 0x6601
leaq -0x27b0(%rbp), %rax
movq %rax, -0x2a30(%rbp)
movq %rax, -0x2838(%rbp)
leaq -0x2850(%rbp), %rdi
movq %rdi, -0x2a28(%rbp)
callq 0x55c0
movq -0x2a30(%rbp), %rdi
movq -0x2a28(%rbp), %rdx
leaq 0x3853f(%rip), %rsi     # 0x3eb7d
callq 0x60a0
jmp 0x6645
leaq -0x2790(%rbp), %rax
movq %rax, -0x2a40(%rbp)
movq %rax, -0x2838(%rbp)
leaq -0x2851(%rbp), %rdi
movq %rdi, -0x2a38(%rbp)
callq 0x55c0
movq -0x2a40(%rbp), %rdi
movq -0x2a38(%rbp), %rdx
leaq 0x384ff(%rip), %rsi     # 0x3eb81
callq 0x60a0
jmp 0x6689
movb $0x0, -0x2852(%rbp)
leaq -0x2830(%rbp), %rax
movq %rax, -0x2770(%rbp)
movq $0x6, -0x2768(%rbp)
leaq -0x2853(%rbp), %rdi
movq %rdi, -0x2a48(%rbp)
callq 0x34820
movq -0x2a48(%rbp), %rcx
movq -0x2770(%rbp), %rsi
movq -0x2768(%rbp), %rdx
leaq -0x2760(%rbp), %rdi
callq 0x34840
jmp 0x66df
leaq -0x2853(%rbp), %rdi
callq 0x1b630
leaq -0x2830(%rbp), %rax
movq %rax, -0x2a58(%rbp)
addq $0xc0, %rax
movq %rax, -0x2a50(%rbp)
movq -0x2a50(%rbp), %rdi
addq $-0x20, %rdi
movq %rdi, -0x2a60(%rbp)
callq 0x5230
movq -0x2a58(%rbp), %rcx
movq -0x2a60(%rbp), %rax
cmpq %rcx, %rax
movq %rax, -0x2a50(%rbp)
jne 0x6706
leaq -0x2851(%rbp), %rdi
callq 0x53c0
leaq -0x2850(%rbp), %rdi
callq 0x53c0
leaq -0x284f(%rbp), %rdi
callq 0x53c0
leaq -0x284e(%rbp), %rdi
callq 0x53c0
leaq -0x284d(%rbp), %rdi
callq 0x53c0
leaq -0x2839(%rbp), %rdi
callq 0x53c0
leaq -0x2760(%rbp), %rax
movq %rax, -0x2860(%rbp)
movq -0x2860(%rbp), %rdi
callq 0x18e60
movq %rax, -0x2868(%rbp)
movq -0x2860(%rbp), %rdi
callq 0x18e90
movq %rax, -0x2870(%rbp)
leaq -0x2868(%rbp), %rdi
leaq -0x2870(%rbp), %rsi
callq 0x18dd0
testb $0x1, %al
jne 0x67cf
jmp 0x6a57
leaq -0x2868(%rbp), %rdi
callq 0x19840
movq %rax, -0x2878(%rbp)
movq -0x2878(%rbp), %rdi
callq 0x5350
movq %rax, -0x2898(%rbp)
movq -0x2878(%rbp), %rdi
callq 0x55f0
movq %rax, -0x28a0(%rbp)
leaq -0x28a1(%rbp), %rdi
movq %rdi, -0x2a68(%rbp)
callq 0x55c0
movq -0x2a68(%rbp), %rcx
movq -0x2898(%rbp), %rsi
movq -0x28a0(%rbp), %rdx
leaq -0x2890(%rbp), %rdi
callq 0x348f0
jmp 0x683e
leaq -0x2748(%rbp), %rdi
leaq -0x2890(%rbp), %rsi
callq 0x348c0
jmp 0x6853
leaq -0x2890(%rbp), %rdi
callq 0x15680
leaq -0x28a1(%rbp), %rdi
callq 0x53c0
leaq -0x2868(%rbp), %rdi
callq 0x19790
jmp 0x67b3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x2848(%rbp)
movl %eax, -0x284c(%rbp)
jmp 0x69ab
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x2848(%rbp)
movl %eax, -0x284c(%rbp)
jmp 0x699f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x2848(%rbp)
movl %eax, -0x284c(%rbp)
jmp 0x6993
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x2848(%rbp)
movl %eax, -0x284c(%rbp)
jmp 0x6987
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x2848(%rbp)
movl %eax, -0x284c(%rbp)
jmp 0x697b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x2848(%rbp)
movl %eax, -0x284c(%rbp)
jmp 0x696f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x2848(%rbp)
movl %eax, -0x284c(%rbp)
leaq -0x2853(%rbp), %rdi
callq 0x1b630
leaq -0x2830(%rbp), %rax
movq %rax, -0x2a78(%rbp)
addq $0xc0, %rax
movq %rax, -0x2a70(%rbp)
movq -0x2a70(%rbp), %rdi
addq $-0x20, %rdi
movq %rdi, -0x2a80(%rbp)
callq 0x5230
movq -0x2a78(%rbp), %rcx
movq -0x2a80(%rbp), %rax
cmpq %rcx, %rax
movq %rax, -0x2a70(%rbp)
jne 0x693c
jmp 0x696f
leaq -0x2851(%rbp), %rdi
callq 0x53c0
leaq -0x2850(%rbp), %rdi
callq 0x53c0
leaq -0x284f(%rbp), %rdi
callq 0x53c0
leaq -0x284e(%rbp), %rdi
callq 0x53c0
leaq -0x284d(%rbp), %rdi
callq 0x53c0
leaq -0x2839(%rbp), %rdi
callq 0x53c0
testb $0x1, -0x2852(%rbp)
jne 0x69c2
jmp 0x6a0f
movq -0x2838(%rbp), %rax
leaq -0x2830(%rbp), %rcx
cmpq %rax, %rcx
movq %rax, -0x2a88(%rbp)
je 0x6a0d
movq -0x2a88(%rbp), %rdi
addq $-0x20, %rdi
movq %rdi, -0x2a90(%rbp)
callq 0x5230
movq -0x2a90(%rbp), %rax
leaq -0x2830(%rbp), %rcx
cmpq %rcx, %rax
movq %rax, -0x2a88(%rbp)
jne 0x69dc
jmp 0x6a0f
jmp 0x6fd3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x2848(%rbp)
movl %eax, -0x284c(%rbp)
jmp 0x6a46
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x2848(%rbp)
movl %eax, -0x284c(%rbp)
leaq -0x2890(%rbp), %rdi
callq 0x15680
leaq -0x28a1(%rbp), %rdi
callq 0x53c0
jmp 0x6fc7
leaq -0x28c0(%rbp), %rdi
movq %rdi, -0x2a98(%rbp)
callq 0x15490
movq -0x2a98(%rbp), %rsi
leaq -0x2748(%rbp), %rdi
callq 0x34970
jmp 0x6a7f
leaq -0x28c0(%rbp), %rdi
movq %rdi, -0x2aa8(%rbp)
callq 0x16bd0
movq -0x2aa8(%rbp), %rdi
movq %rax, -0x28e8(%rbp)
callq 0x16c00
movq %rax, -0x28f0(%rbp)
leaq -0x28f1(%rbp), %rdi
movq %rdi, -0x2aa0(%rbp)
callq 0x55c0
movq -0x2aa0(%rbp), %rcx
movq -0x28e8(%rbp), %rsi
movq -0x28f0(%rbp), %rdx
leaq -0x28e0(%rbp), %rdi
callq 0x349c0
jmp 0x6ae2
movq 0x564f7(%rip), %rdi     # 0x5cfe0
leaq -0x28e0(%rbp), %rsi
callq 0x5330
movq %rax, -0x2ab0(%rbp)
jmp 0x6afe
movq -0x2ab0(%rbp), %rdi
leaq 0x376ff(%rip), %rsi     # 0x3e20b
callq 0x5360
jmp 0x6b13
leaq -0x28e0(%rbp), %rdi
callq 0x5230
leaq -0x28f1(%rbp), %rdi
callq 0x53c0
leaq -0x2748(%rbp), %rdi
leaq -0x28c0(%rbp), %rsi
callq 0x34970
jmp 0x6b40
leaq -0x28c0(%rbp), %rdi
movq %rdi, -0x2ac0(%rbp)
callq 0x16bd0
movq -0x2ac0(%rbp), %rdi
movq %rax, -0x2920(%rbp)
callq 0x16c00
movq %rax, -0x2928(%rbp)
leaq -0x2929(%rbp), %rdi
movq %rdi, -0x2ab8(%rbp)
callq 0x55c0
movq -0x2ab8(%rbp), %rcx
movq -0x2920(%rbp), %rsi
movq -0x2928(%rbp), %rdx
leaq -0x2918(%rbp), %rdi
callq 0x349c0
jmp 0x6ba3
movq 0x56436(%rip), %rdi     # 0x5cfe0
leaq -0x2918(%rbp), %rsi
callq 0x5330
movq %rax, -0x2ac8(%rbp)
jmp 0x6bbf
movq -0x2ac8(%rbp), %rdi
leaq 0x3763e(%rip), %rsi     # 0x3e20b
callq 0x5360
jmp 0x6bd4
leaq -0x2918(%rbp), %rdi
callq 0x5230
leaq -0x2929(%rbp), %rdi
callq 0x53c0
leaq -0x2748(%rbp), %rdi
leaq -0x28c0(%rbp), %rsi
callq 0x34970
jmp 0x6c01
leaq -0x28c0(%rbp), %rdi
movq %rdi, -0x2ad8(%rbp)
callq 0x16bd0
movq -0x2ad8(%rbp), %rdi
movq %rax, -0x2958(%rbp)
callq 0x16c00
movq %rax, -0x2960(%rbp)
leaq -0x2961(%rbp), %rdi
movq %rdi, -0x2ad0(%rbp)
callq 0x55c0
movq -0x2ad0(%rbp), %rcx
movq -0x2958(%rbp), %rsi
movq -0x2960(%rbp), %rdx
leaq -0x2950(%rbp), %rdi
callq 0x349c0
jmp 0x6c64
movq 0x56375(%rip), %rdi     # 0x5cfe0
leaq -0x2950(%rbp), %rsi
callq 0x5330
movq %rax, -0x2ae0(%rbp)
jmp 0x6c80
movq -0x2ae0(%rbp), %rdi
leaq 0x3757d(%rip), %rsi     # 0x3e20b
callq 0x5360
jmp 0x6c95
leaq -0x2950(%rbp), %rdi
callq 0x5230
leaq -0x2961(%rbp), %rdi
callq 0x53c0
leaq -0x2748(%rbp), %rdi
leaq -0x28c0(%rbp), %rsi
callq 0x34970
jmp 0x6cc2
leaq -0x28c0(%rbp), %rdi
movq %rdi, -0x2af0(%rbp)
callq 0x16bd0
movq -0x2af0(%rbp), %rdi
movq %rax, -0x2990(%rbp)
callq 0x16c00
movq %rax, -0x2998(%rbp)
leaq -0x2999(%rbp), %rdi
movq %rdi, -0x2ae8(%rbp)
callq 0x55c0
movq -0x2ae8(%rbp), %rcx
movq -0x2990(%rbp), %rsi
movq -0x2998(%rbp), %rdx
leaq -0x2988(%rbp), %rdi
callq 0x349c0
jmp 0x6d25
movq 0x562b4(%rip), %rdi     # 0x5cfe0
leaq -0x2988(%rbp), %rsi
callq 0x5330
movq %rax, -0x2af8(%rbp)
jmp 0x6d41
movq -0x2af8(%rbp), %rdi
leaq 0x374bc(%rip), %rsi     # 0x3e20b
callq 0x5360
jmp 0x6d56
leaq -0x2988(%rbp), %rdi
callq 0x5230
leaq -0x2999(%rbp), %rdi
callq 0x53c0
leaq -0x2748(%rbp), %rdi
leaq -0x28c0(%rbp), %rsi
callq 0x34970
jmp 0x6d83
leaq -0x28c0(%rbp), %rdi
movq %rdi, -0x2b08(%rbp)
callq 0x16bd0
movq -0x2b08(%rbp), %rdi
movq %rax, -0x29c8(%rbp)
callq 0x16c00
movq %rax, -0x29d0(%rbp)
leaq -0x29d1(%rbp), %rdi
movq %rdi, -0x2b00(%rbp)
callq 0x55c0
movq -0x2b00(%rbp), %rcx
movq -0x29c8(%rbp), %rsi
movq -0x29d0(%rbp), %rdx
leaq -0x29c0(%rbp), %rdi
callq 0x349c0
jmp 0x6de6
movq 0x561f3(%rip), %rdi     # 0x5cfe0
leaq -0x29c0(%rbp), %rsi
callq 0x5330
movq %rax, -0x2b10(%rbp)
jmp 0x6e02
movq -0x2b10(%rbp), %rdi
leaq 0x373fb(%rip), %rsi     # 0x3e20b
callq 0x5360
jmp 0x6e17
leaq -0x29c0(%rbp), %rdi
callq 0x5230
leaq -0x29d1(%rbp), %rdi
callq 0x53c0
leaq -0x28c0(%rbp), %rdi
callq 0x15680
leaq -0x2760(%rbp), %rdi
callq 0x15620
leaq -0x2748(%rbp), %rdi
callq 0x34a40
movb $0x1, %al
andb $0x1, %al
addq $0x2b10, %rsp           # imm = 0x2B10
popq %rbp
retq
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x2848(%rbp)
movl %eax, -0x284c(%rbp)
jmp 0x6fbb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x2848(%rbp)
movl %eax, -0x284c(%rbp)
jmp 0x6ea9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x2848(%rbp)
movl %eax, -0x284c(%rbp)
leaq -0x28e0(%rbp), %rdi
callq 0x5230
leaq -0x28f1(%rbp), %rdi
callq 0x53c0
jmp 0x6fbb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x2848(%rbp)
movl %eax, -0x284c(%rbp)
jmp 0x6eec
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x2848(%rbp)
movl %eax, -0x284c(%rbp)
leaq -0x2918(%rbp), %rdi
callq 0x5230
leaq -0x2929(%rbp), %rdi
callq 0x53c0
jmp 0x6fbb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x2848(%rbp)
movl %eax, -0x284c(%rbp)
jmp 0x6f2f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x2848(%rbp)
movl %eax, -0x284c(%rbp)
leaq -0x2950(%rbp), %rdi
callq 0x5230
leaq -0x2961(%rbp), %rdi
callq 0x53c0
jmp 0x6fbb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x2848(%rbp)
movl %eax, -0x284c(%rbp)
jmp 0x6f6f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x2848(%rbp)
movl %eax, -0x284c(%rbp)
leaq -0x2988(%rbp), %rdi
callq 0x5230
leaq -0x2999(%rbp), %rdi
callq 0x53c0
jmp 0x6fbb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x2848(%rbp)
movl %eax, -0x284c(%rbp)
jmp 0x6faf
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x2848(%rbp)
movl %eax, -0x284c(%rbp)
leaq -0x29c0(%rbp), %rdi
callq 0x5230
leaq -0x29d1(%rbp), %rdi
callq 0x53c0
leaq -0x28c0(%rbp), %rdi
callq 0x15680
leaq -0x2760(%rbp), %rdi
callq 0x15620
leaq -0x2748(%rbp), %rdi
callq 0x34a40
movq -0x2848(%rbp), %rdi
callq 0x55b0
nopl (%rax,%rax)