// File: grame-cncm[P]digraph/mtests.cpp
// Function: mtest3[abi:cxx11]()
std::string mtest3()
{
    digraph<char, multidep> g;
    g.add('A', 'B', mdep("Y", 1))
        .add('A', 'B', mdep("Y", 2))
        .add('B', 'C', mdep("Q"))
        .add('C', 'A', mdep("X"))
        .add('D', 'B', mdep("M"))
        .add('D', 'C', mdep("M", 2))
        .add('D', 'E', mdep("M"))
        .add('E', 'D', mdep("N", 1));

    std::stringstream ss;
    ss << "g = " << g;
    return ss.str();
}

// Assembly:
subq $0x548, %rsp            # imm = 0x548
movq %rdi, 0x78(%rsp)
movq %rdi, %rax
movq %rax, 0x80(%rsp)
movq %rdi, 0x540(%rsp)
leaq 0x530(%rsp), %rdi
callq 0x29c0
movb $0x41, 0x52f(%rsp)
movb $0x42, 0x52e(%rsp)
leaq 0x4cf(%rsp), %rdi
movq %rdi, 0x88(%rsp)
callq 0x22a0
movq 0x88(%rsp), %rdx
leaq 0x2a3e1(%rip), %rsi     # 0x3d751
leaq 0x4d0(%rsp), %rdi
callq 0x2200
jmp 0x1337f
leaq 0x4f0(%rsp), %rdi
leaq 0x4d0(%rsp), %rsi
movl $0x1, %edx
callq 0x15b20
jmp 0x1339b
leaq 0x530(%rsp), %rdi
leaq 0x52f(%rsp), %rsi
leaq 0x52e(%rsp), %rdx
leaq 0x4f0(%rsp), %rcx
callq 0x2a00
movq %rax, 0x70(%rsp)
jmp 0x133c7
movb $0x41, 0x4bb(%rsp)
movb $0x42, 0x4ba(%rsp)
leaq 0x45f(%rsp), %rdi
movq %rdi, 0x68(%rsp)
callq 0x22a0
movq 0x68(%rsp), %rdx
leaq 0x2a35c(%rip), %rsi     # 0x3d751
leaq 0x460(%rsp), %rdi
callq 0x2200
jmp 0x13404
leaq 0x480(%rsp), %rdi
leaq 0x460(%rsp), %rsi
movl $0x2, %edx
callq 0x15b20
jmp 0x13420
movq 0x70(%rsp), %rdi
leaq 0x4bb(%rsp), %rsi
leaq 0x4ba(%rsp), %rdx
leaq 0x480(%rsp), %rcx
callq 0x2a00
movq %rax, 0x60(%rsp)
jmp 0x13449
movb $0x42, 0x45e(%rsp)
movb $0x43, 0x45d(%rsp)
leaq 0x3ff(%rsp), %rdi
movq %rdi, 0x58(%rsp)
callq 0x22a0
movq 0x58(%rsp), %rdx
leaq 0x2a2dc(%rip), %rsi     # 0x3d753
leaq 0x400(%rsp), %rdi
callq 0x2200
jmp 0x13486
leaq 0x420(%rsp), %rdi
leaq 0x400(%rsp), %rsi
callq 0x15930
jmp 0x1349d
movq 0x60(%rsp), %rdi
leaq 0x45e(%rsp), %rsi
leaq 0x45d(%rsp), %rdx
leaq 0x420(%rsp), %rcx
callq 0x2a00
movq %rax, 0x50(%rsp)
jmp 0x134c6
movb $0x43, 0x3fe(%rsp)
movb $0x41, 0x3fd(%rsp)
leaq 0x39f(%rsp), %rdi
movq %rdi, 0x48(%rsp)
callq 0x22a0
movq 0x48(%rsp), %rdx
leaq 0x2a261(%rip), %rsi     # 0x3d755
leaq 0x3a0(%rsp), %rdi
callq 0x2200
jmp 0x13503
leaq 0x3c0(%rsp), %rdi
leaq 0x3a0(%rsp), %rsi
callq 0x15930
jmp 0x1351a
movq 0x50(%rsp), %rdi
leaq 0x3fe(%rsp), %rsi
leaq 0x3fd(%rsp), %rdx
leaq 0x3c0(%rsp), %rcx
callq 0x2a00
movq %rax, 0x40(%rsp)
jmp 0x13543
movb $0x44, 0x39e(%rsp)
movb $0x42, 0x39d(%rsp)
leaq 0x33f(%rsp), %rdi
movq %rdi, 0x38(%rsp)
callq 0x22a0
movq 0x38(%rsp), %rdx
leaq 0x29a93(%rip), %rsi     # 0x3d004
leaq 0x340(%rsp), %rdi
callq 0x2200
jmp 0x13580
leaq 0x360(%rsp), %rdi
leaq 0x340(%rsp), %rsi
callq 0x15930
jmp 0x13597
movq 0x40(%rsp), %rdi
leaq 0x39e(%rsp), %rsi
leaq 0x39d(%rsp), %rdx
leaq 0x360(%rsp), %rcx
callq 0x2a00
movq %rax, 0x30(%rsp)
jmp 0x135c0
movb $0x44, 0x33e(%rsp)
movb $0x43, 0x33d(%rsp)
leaq 0x2df(%rsp), %rdi
movq %rdi, 0x28(%rsp)
callq 0x22a0
movq 0x28(%rsp), %rdx
leaq 0x29a16(%rip), %rsi     # 0x3d004
leaq 0x2e0(%rsp), %rdi
callq 0x2200
jmp 0x135fd
leaq 0x300(%rsp), %rdi
leaq 0x2e0(%rsp), %rsi
movl $0x2, %edx
callq 0x15b20
jmp 0x13619
movq 0x30(%rsp), %rdi
leaq 0x33e(%rsp), %rsi
leaq 0x33d(%rsp), %rdx
leaq 0x300(%rsp), %rcx
callq 0x2a00
movq %rax, 0x20(%rsp)
jmp 0x13642
movb $0x44, 0x2de(%rsp)
movb $0x45, 0x2dd(%rsp)
leaq 0x27f(%rsp), %rdi
movq %rdi, 0x18(%rsp)
callq 0x22a0
movq 0x18(%rsp), %rdx
leaq 0x29994(%rip), %rsi     # 0x3d004
leaq 0x280(%rsp), %rdi
callq 0x2200
jmp 0x1367f
leaq 0x2a0(%rsp), %rdi
leaq 0x280(%rsp), %rsi
callq 0x15930
jmp 0x13696
movq 0x20(%rsp), %rdi
leaq 0x2de(%rsp), %rsi
leaq 0x2dd(%rsp), %rdx
leaq 0x2a0(%rsp), %rcx
callq 0x2a00
movq %rax, 0x10(%rsp)
jmp 0x136bf
movb $0x45, 0x27e(%rsp)
movb $0x44, 0x27d(%rsp)
leaq 0x21f(%rsp), %rdi
movq %rdi, 0x8(%rsp)
callq 0x22a0
movq 0x8(%rsp), %rdx
leaq 0x29919(%rip), %rsi     # 0x3d006
leaq 0x220(%rsp), %rdi
callq 0x2200
jmp 0x136fc
leaq 0x240(%rsp), %rdi
leaq 0x220(%rsp), %rsi
movl $0x1, %edx
callq 0x15b20
jmp 0x13718
movq 0x10(%rsp), %rdi
leaq 0x27e(%rsp), %rsi
leaq 0x27d(%rsp), %rdx
leaq 0x240(%rsp), %rcx
callq 0x2a00
jmp 0x1373c
leaq 0x240(%rsp), %rdi
callq 0x2c20
leaq 0x220(%rsp), %rdi
callq 0x20e0
leaq 0x21f(%rsp), %rdi
callq 0x21c0
leaq 0x2a0(%rsp), %rdi
callq 0x2c20
leaq 0x280(%rsp), %rdi
callq 0x20e0
leaq 0x27f(%rsp), %rdi
callq 0x21c0
leaq 0x300(%rsp), %rdi
callq 0x2c20
leaq 0x2e0(%rsp), %rdi
callq 0x20e0
leaq 0x2df(%rsp), %rdi
callq 0x21c0
leaq 0x360(%rsp), %rdi
callq 0x2c20
leaq 0x340(%rsp), %rdi
callq 0x20e0
leaq 0x33f(%rsp), %rdi
callq 0x21c0
leaq 0x3c0(%rsp), %rdi
callq 0x2c20
leaq 0x3a0(%rsp), %rdi
callq 0x20e0
leaq 0x39f(%rsp), %rdi
callq 0x21c0
leaq 0x420(%rsp), %rdi
callq 0x2c20
leaq 0x400(%rsp), %rdi
callq 0x20e0
leaq 0x3ff(%rsp), %rdi
callq 0x21c0
leaq 0x480(%rsp), %rdi
callq 0x2c20
leaq 0x460(%rsp), %rdi
callq 0x20e0
leaq 0x45f(%rsp), %rdi
callq 0x21c0
leaq 0x4f0(%rsp), %rdi
callq 0x2c20
leaq 0x4d0(%rsp), %rdi
callq 0x20e0
leaq 0x4cf(%rsp), %rdi
callq 0x21c0
leaq 0x90(%rsp), %rdi
callq 0x2110
jmp 0x13883
leaq 0xa0(%rsp), %rdi
leaq 0x2aaef(%rip), %rsi     # 0x3e381
callq 0x2180
movq %rax, (%rsp)
jmp 0x1389d
movq (%rsp), %rdi
leaq 0x530(%rsp), %rsi
callq 0x2c50
jmp 0x138b0
movq 0x78(%rsp), %rdi
leaq 0x90(%rsp), %rsi
callq 0x2170
jmp 0x138c4
leaq 0x90(%rsp), %rdi
callq 0x2120
leaq 0x530(%rsp), %rdi
callq 0x3780
movq 0x80(%rsp), %rax
addq $0x548, %rsp            # imm = 0x548
retq
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x4c0(%rsp)
movl %eax, 0x4bc(%rsp)
jmp 0x13c63
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x4c0(%rsp)
movl %eax, 0x4bc(%rsp)
jmp 0x13c56
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x4c0(%rsp)
movl %eax, 0x4bc(%rsp)
jmp 0x13c49
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x4c0(%rsp)
movl %eax, 0x4bc(%rsp)
jmp 0x13c3c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x4c0(%rsp)
movl %eax, 0x4bc(%rsp)
jmp 0x13c2f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x4c0(%rsp)
movl %eax, 0x4bc(%rsp)
jmp 0x13c22
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x4c0(%rsp)
movl %eax, 0x4bc(%rsp)
jmp 0x13c15
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x4c0(%rsp)
movl %eax, 0x4bc(%rsp)
jmp 0x13c08
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x4c0(%rsp)
movl %eax, 0x4bc(%rsp)
jmp 0x13bfb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x4c0(%rsp)
movl %eax, 0x4bc(%rsp)
jmp 0x13bee
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x4c0(%rsp)
movl %eax, 0x4bc(%rsp)
jmp 0x13be1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x4c0(%rsp)
movl %eax, 0x4bc(%rsp)
jmp 0x13bd4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x4c0(%rsp)
movl %eax, 0x4bc(%rsp)
jmp 0x13bc7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x4c0(%rsp)
movl %eax, 0x4bc(%rsp)
jmp 0x13bba
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x4c0(%rsp)
movl %eax, 0x4bc(%rsp)
jmp 0x13bad
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x4c0(%rsp)
movl %eax, 0x4bc(%rsp)
jmp 0x13ba0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x4c0(%rsp)
movl %eax, 0x4bc(%rsp)
jmp 0x13b93
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x4c0(%rsp)
movl %eax, 0x4bc(%rsp)
jmp 0x13b86
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x4c0(%rsp)
movl %eax, 0x4bc(%rsp)
jmp 0x13b79
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x4c0(%rsp)
movl %eax, 0x4bc(%rsp)
jmp 0x13b6c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x4c0(%rsp)
movl %eax, 0x4bc(%rsp)
jmp 0x13b5f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x4c0(%rsp)
movl %eax, 0x4bc(%rsp)
jmp 0x13b52
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x4c0(%rsp)
movl %eax, 0x4bc(%rsp)
jmp 0x13b45
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x4c0(%rsp)
movl %eax, 0x4bc(%rsp)
leaq 0x240(%rsp), %rdi
callq 0x2c20
leaq 0x220(%rsp), %rdi
callq 0x20e0
leaq 0x21f(%rsp), %rdi
callq 0x21c0
leaq 0x2a0(%rsp), %rdi
callq 0x2c20
leaq 0x280(%rsp), %rdi
callq 0x20e0
leaq 0x27f(%rsp), %rdi
callq 0x21c0
leaq 0x300(%rsp), %rdi
callq 0x2c20
leaq 0x2e0(%rsp), %rdi
callq 0x20e0
leaq 0x2df(%rsp), %rdi
callq 0x21c0
leaq 0x360(%rsp), %rdi
callq 0x2c20
leaq 0x340(%rsp), %rdi
callq 0x20e0
leaq 0x33f(%rsp), %rdi
callq 0x21c0
leaq 0x3c0(%rsp), %rdi
callq 0x2c20
leaq 0x3a0(%rsp), %rdi
callq 0x20e0
leaq 0x39f(%rsp), %rdi
callq 0x21c0
leaq 0x420(%rsp), %rdi
callq 0x2c20
leaq 0x400(%rsp), %rdi
callq 0x20e0
leaq 0x3ff(%rsp), %rdi
callq 0x21c0
leaq 0x480(%rsp), %rdi
callq 0x2c20
leaq 0x460(%rsp), %rdi
callq 0x20e0
leaq 0x45f(%rsp), %rdi
callq 0x21c0
leaq 0x4f0(%rsp), %rdi
callq 0x2c20
leaq 0x4d0(%rsp), %rdi
callq 0x20e0
leaq 0x4cf(%rsp), %rdi
callq 0x21c0
jmp 0x13ca9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x4c0(%rsp)
movl %eax, 0x4bc(%rsp)
jmp 0x13ca9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x4c0(%rsp)
movl %eax, 0x4bc(%rsp)
leaq 0x90(%rsp), %rdi
callq 0x2120
leaq 0x530(%rsp), %rdi
callq 0x3780
movq 0x4c0(%rsp), %rdi
callq 0x2290
nopw %cs:(%rax,%rax)