// File: mapbox[P]svg-tools/test/path.hpp
// Function: mapbox::svg::test::operator<<(std::ostream&, mapbox::svg::test::PathCommand const&)
::std::ostream& operator<<(::std::ostream& os, const PathCommand& command) {
    switch (command.type) {
    case PathCommand::Type::MoveTo:
        os << "MoveTo { x: " << command.x << ", y: " << command.y << " }";
        break;

    case PathCommand::Type::ClosePath:
        os << "ClosePath";
        break;

    case PathCommand::Type::LineTo:
        os << "LineTo { x: " << command.x << ", y: " << command.y << " }";
        break;

    case PathCommand::Type::HorizontalLineTo:
        os << "HorizontalLineTo { x: " << command.x << " }";
        break;

    case PathCommand::Type::VerticalLineTo:
        os << "VerticalLineTo { y: " << command.y << " }";
        break;

    case PathCommand::Type::CurveTo:
        os << "CurveTo { x1: " << command.x1 << ", y1: " << command.y1 << ", x2: " << command.x2
           << ", y2: " << command.y2 << ", x: " << command.x << ", y: " << command.y << " }";
        break;

    case PathCommand::Type::SmoothCurveTo:
        os << "SmoothCurveTo { x2: " << command.x2 << ", y2: " << command.y2 << ", x: " << command.x
           << ", y: " << command.y << " }";
        break;

    case PathCommand::Type::QuadraticCurveTo:
        os << "QuadraticCurveTo { x1: " << command.x1 << ", y1: " << command.y1
           << ", x: " << command.x << ", y: " << command.y << " }";
        break;

    case PathCommand::Type::SmoothQuadraticCurveTo:
        os << "SmoothQuadraticCurveTo { x: " << command.x << ", y: " << command.y << " }";
        break;

    case PathCommand::Type::Arc:
        os << "Arc { rx: " << command.x1 << ", ry: " << command.y1
           << ", xAxisRotation: " << command.xAxisRotation
           << ", largeArc: " << (command.largeArcFlag ? "true" : "false")
           << ", sweep: " << (command.sweepFlag ? "true" : "false") << ", x: " << command.x
           << ", y: " << command.y << " }";
        break;
    default:
        os << "Unknown";
        break;
    }
    if (command.relative) {
        os << " (relative)";
    }
    return os;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x20, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq -0x10(%rbp), %rax
movzbl (%rax), %eax
movq %rax, -0x18(%rbp)
subq $0x9, %rax
ja 0x183e
movq -0x18(%rbp), %rax
leaq 0x4c64(%rip), %rcx      # 0x6004
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq -0x8(%rbp), %rdi
leaq 0x4f2a(%rip), %rsi      # 0x62de
callq 0x10c0
movq %rax, %rdi
movq -0x10(%rbp), %rax
movsd 0x8(%rax), %xmm0
callq 0x1170
movq %rax, %rdi
leaq 0x4f17(%rip), %rsi      # 0x62eb
callq 0x10c0
movq %rax, %rdi
movq -0x10(%rbp), %rax
movsd 0x10(%rax), %xmm0
callq 0x1170
movq %rax, %rdi
leaq 0x4efd(%rip), %rsi      # 0x62f1
callq 0x10c0
jmp 0x184e
movq -0x8(%rbp), %rdi
leaq 0x4eeb(%rip), %rsi      # 0x62f4
callq 0x10c0
jmp 0x184e
movq -0x8(%rbp), %rdi
leaq 0x4eea(%rip), %rsi      # 0x6308
callq 0x10c0
movq %rax, %rdi
movq -0x10(%rbp), %rax
movsd 0x8(%rax), %xmm0
callq 0x1170
movq %rax, %rdi
leaq 0x4ead(%rip), %rsi      # 0x62eb
callq 0x10c0
movq %rax, %rdi
movq -0x10(%rbp), %rax
movsd 0x10(%rax), %xmm0
callq 0x1170
movq %rax, %rdi
leaq 0x4e93(%rip), %rsi      # 0x62f1
callq 0x10c0
jmp 0x184e
movq -0x8(%rbp), %rdi
leaq 0x4e8b(%rip), %rsi      # 0x62fe
callq 0x10c0
movq %rax, %rdi
movq -0x10(%rbp), %rax
movsd 0x8(%rax), %xmm0
callq 0x1170
movq %rax, %rdi
leaq 0x4e5e(%rip), %rsi      # 0x62f1
callq 0x10c0
jmp 0x184e
movq -0x8(%rbp), %rdi
leaq 0x4e6d(%rip), %rsi      # 0x6315
callq 0x10c0
movq %rax, %rdi
movq -0x10(%rbp), %rax
movsd 0x10(%rax), %xmm0
callq 0x1170
movq %rax, %rdi
leaq 0x4e29(%rip), %rsi      # 0x62f1
callq 0x10c0
jmp 0x184e
movq -0x8(%rbp), %rdi
leaq 0x4e86(%rip), %rsi      # 0x6363
callq 0x10c0
movq %rax, %rdi
movq -0x10(%rbp), %rax
movsd 0x18(%rax), %xmm0
callq 0x1170
movq %rax, %rdi
leaq 0x4e2d(%rip), %rsi      # 0x632a
callq 0x10c0
movq %rax, %rdi
movq -0x10(%rbp), %rax
movsd 0x20(%rax), %xmm0
callq 0x1170
movq %rax, %rdi
leaq 0x4e14(%rip), %rsi      # 0x6331
callq 0x10c0
movq %rax, %rdi
movq -0x10(%rbp), %rax
movsd 0x28(%rax), %xmm0
callq 0x1170
movq %rax, %rdi
leaq 0x4dfb(%rip), %rsi      # 0x6338
callq 0x10c0
movq %rax, %rdi
movq -0x10(%rbp), %rax
movsd 0x30(%rax), %xmm0
callq 0x1170
movq %rax, %rdi
leaq 0x4de2(%rip), %rsi      # 0x633f
callq 0x10c0
movq %rax, %rdi
movq -0x10(%rbp), %rax
movsd 0x8(%rax), %xmm0
callq 0x1170
movq %rax, %rdi
leaq 0x4d6e(%rip), %rsi      # 0x62eb
callq 0x10c0
movq %rax, %rdi
movq -0x10(%rbp), %rax
movsd 0x10(%rax), %xmm0
callq 0x1170
movq %rax, %rdi
leaq 0x4d54(%rip), %rsi      # 0x62f1
callq 0x10c0
jmp 0x184e
movq -0x8(%rbp), %rdi
leaq 0x4d93(%rip), %rsi      # 0x6345
callq 0x10c0
movq %rax, %rdi
movq -0x10(%rbp), %rax
movsd 0x28(%rax), %xmm0
callq 0x1170
movq %rax, %rdi
leaq 0x4d66(%rip), %rsi      # 0x6338
callq 0x10c0
movq %rax, %rdi
movq -0x10(%rbp), %rax
movsd 0x30(%rax), %xmm0
callq 0x1170
movq %rax, %rdi
leaq 0x4d4d(%rip), %rsi      # 0x633f
callq 0x10c0
movq %rax, %rdi
movq -0x10(%rbp), %rax
movsd 0x8(%rax), %xmm0
callq 0x1170
movq %rax, %rdi
leaq 0x4cd9(%rip), %rsi      # 0x62eb
callq 0x10c0
movq %rax, %rdi
movq -0x10(%rbp), %rax
movsd 0x10(%rax), %xmm0
callq 0x1170
movq %rax, %rdi
leaq 0x4cbf(%rip), %rsi      # 0x62f1
callq 0x10c0
jmp 0x184e
movq -0x8(%rbp), %rdi
leaq 0x4d13(%rip), %rsi      # 0x635a
callq 0x10c0
movq %rax, %rdi
movq -0x10(%rbp), %rax
movsd 0x18(%rax), %xmm0
callq 0x1170
movq %rax, %rdi
leaq 0x4cc3(%rip), %rsi      # 0x632a
callq 0x10c0
movq %rax, %rdi
movq -0x10(%rbp), %rax
movsd 0x20(%rax), %xmm0
callq 0x1170
movq %rax, %rdi
leaq 0x4cb8(%rip), %rsi      # 0x633f
callq 0x10c0
movq %rax, %rdi
movq -0x10(%rbp), %rax
movsd 0x8(%rax), %xmm0
callq 0x1170
movq %rax, %rdi
leaq 0x4c44(%rip), %rsi      # 0x62eb
callq 0x10c0
movq %rax, %rdi
movq -0x10(%rbp), %rax
movsd 0x10(%rax), %xmm0
callq 0x1170
movq %rax, %rdi
leaq 0x4c2a(%rip), %rsi      # 0x62f1
callq 0x10c0
jmp 0x184e
movq -0x8(%rbp), %rdi
leaq 0x4c96(%rip), %rsi      # 0x6372
callq 0x10c0
movq %rax, %rdi
movq -0x10(%rbp), %rax
movsd 0x8(%rax), %xmm0
callq 0x1170
movq %rax, %rdi
leaq 0x4bef(%rip), %rsi      # 0x62eb
callq 0x10c0
movq %rax, %rdi
movq -0x10(%rbp), %rax
movsd 0x10(%rax), %xmm0
callq 0x1170
movq %rax, %rdi
leaq 0x4bd5(%rip), %rsi      # 0x62f1
callq 0x10c0
jmp 0x184e
movq -0x8(%rbp), %rdi
leaq 0x4c5e(%rip), %rsi      # 0x638f
callq 0x10c0
movq %rax, %rdi
movq -0x10(%rbp), %rax
movsd 0x18(%rax), %xmm0
callq 0x1170
movq %rax, %rdi
leaq 0x4c49(%rip), %rsi      # 0x639a
callq 0x10c0
movq %rax, %rdi
movq -0x10(%rbp), %rax
movsd 0x20(%rax), %xmm0
callq 0x1170
movq %rax, %rdi
leaq 0x4c30(%rip), %rsi      # 0x63a1
callq 0x10c0
movq %rax, %rdi
movq -0x10(%rbp), %rax
movsd 0x38(%rax), %xmm0
callq 0x1170
movq %rax, %rdi
leaq 0x4c22(%rip), %rsi      # 0x63b3
callq 0x10c0
movq %rax, %rdi
movq -0x10(%rbp), %rax
movb 0x2(%rax), %cl
leaq 0x4c1e(%rip), %rsi      # 0x63c5
leaq 0x4c12(%rip), %rax      # 0x63c0
testb $0x1, %cl
cmovneq %rax, %rsi
callq 0x10c0
movq %rax, %rdi
leaq 0x4c07(%rip), %rsi      # 0x63cb
callq 0x10c0
movq %rax, %rdi
movq -0x10(%rbp), %rax
movb 0x3(%rax), %cl
leaq 0x4beb(%rip), %rsi      # 0x63c5
leaq 0x4bdf(%rip), %rax      # 0x63c0
testb $0x1, %cl
cmovneq %rax, %rsi
callq 0x10c0
movq %rax, %rdi
leaq 0x4b48(%rip), %rsi      # 0x633f
callq 0x10c0
movq %rax, %rdi
movq -0x10(%rbp), %rax
movsd 0x8(%rax), %xmm0
callq 0x1170
movq %rax, %rdi
leaq 0x4ad4(%rip), %rsi      # 0x62eb
callq 0x10c0
movq %rax, %rdi
movq -0x10(%rbp), %rax
movsd 0x10(%rax), %xmm0
callq 0x1170
movq %rax, %rdi
leaq 0x4aba(%rip), %rsi      # 0x62f1
callq 0x10c0
jmp 0x184e
movq -0x8(%rbp), %rdi
leaq 0x4b8c(%rip), %rsi      # 0x63d5
callq 0x10c0
movq -0x10(%rbp), %rax
testb $0x1, 0x1(%rax)
je 0x1868
movq -0x8(%rbp), %rdi
leaq 0x4b7a(%rip), %rsi      # 0x63dd
callq 0x10c0
movq -0x8(%rbp), %rax
addq $0x20, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)