// File: SMT-COMP[P]scrambler/scrambler.cpp
// Function: scrambler::flip_antisymm(scrambler::node const*, scrambler::node**)
bool flip_antisymm(const node *n, node ** const out_n)
{
    if (no_scramble) {
        return false;
    }

    if (!next_rand_int(2)) {
        return false;
    }

    // *n might be a qualified identifier of the form ('as' identifier sort)
    const std::string *symbol = &(n->symbol);
    if (*symbol == "as") {
        assert(n->children.size() > 0);
        symbol = &(n->children[0]->symbol);
    }
    const std::string &s = *symbol;
    assert(!s.empty());

    // arithmetic (IA, RA, IRA) (but not difference logic)
    if (logic_is_arith()) {
        if (s == "<") {
            *out_n = make_node(">");
            return true;
        } else if (s == ">") {
            *out_n = make_node("<");
            return true;
        } else if (s == "<=") {
            *out_n = make_node(">=");
            return true;
        } else if (s == ">=") {
            *out_n = make_node("<=");
            return true;
        }
    }

    // BitVectors
    if (logic_is_bv()) {
        if (s == "bvslt") {
            *out_n = make_node("bvsgt");
            return true;
        } else if (s == "bvsle") {
            *out_n = make_node("bvsge");
            return true;
        } else if (s == "bvult") {
            *out_n = make_node("bvugt");
            return true;
        } else if (s == "bvule") {
            *out_n = make_node("bvuge");
            return true;
        } else if (s == "bvsgt") {
            *out_n = make_node("bvslt");
            return true;
        } else if (s == "bvsge") {
            *out_n = make_node("bvsle");
            return true;
        } else if (s == "bvugt") {
            *out_n = make_node("bvult");
            return true;
        } else if (s == "bvuge") {
            *out_n = make_node("bvule");
            return true;
        }
    }

    // FloatingPoint
    if (logic_is_fp()) {
        if (s == "fp.leq") {
            *out_n = make_node("fp.geq");
            return true;
        } else if (s == "fp.lt") {
            *out_n = make_node("fp.gt");
            return true;
        } else if (s == "fp.geq") {
            *out_n = make_node("fp.leq");
            return true;
        } else if (s == "fp.gt") {
            *out_n = make_node("fp.lt");
            return true;
        }
    }

    return false;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x30, %rsp
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
testb $0x1, 0x21bc9(%rip)     # 0x262f0
je 0x4732
movb $0x0, -0x1(%rbp)
jmp 0x4bf4
movl $0x2, %edi
callq 0x37c0
cmpq $0x0, %rax
jne 0x474b
movb $0x0, -0x1(%rbp)
jmp 0x4bf4
movq -0x10(%rbp), %rax
movq %rax, -0x20(%rbp)
movq -0x20(%rbp), %rdi
leaq 0x149b0(%rip), %rsi     # 0x1910e
callq 0x74e0
testb $0x1, %al
jne 0x4769
jmp 0x47b5
movq -0x10(%rbp), %rdi
addq $0x10, %rdi
callq 0x7430
cmpq $0x0, %rax
jbe 0x477e
jmp 0x479d
leaq 0x1498c(%rip), %rdi     # 0x19111
leaq 0x14889(%rip), %rsi     # 0x19015
movl $0x1f7, %edx            # imm = 0x1F7
leaq 0x14a19(%rip), %rcx     # 0x191b1
callq 0x31a0
movq -0x10(%rbp), %rdi
addq $0x10, %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x7510
movq (%rax), %rax
movq %rax, -0x20(%rbp)
movq -0x20(%rbp), %rax
movq %rax, -0x28(%rbp)
movq -0x28(%rbp), %rdi
callq 0x34f0
xorb $-0x1, %al
testb $0x1, %al
jne 0x47ce
jmp 0x47d0
jmp 0x47ef
leaq 0x1497d(%rip), %rdi     # 0x19154
leaq 0x14837(%rip), %rsi     # 0x19015
movl $0x1fb, %edx            # imm = 0x1FB
leaq 0x149c7(%rip), %rcx     # 0x191b1
callq 0x31a0
callq 0x4290
testb $0x1, %al
jne 0x47fd
jmp 0x48f5
movq -0x28(%rbp), %rdi
leaq 0x149e3(%rip), %rsi     # 0x191eb
callq 0x74e0
testb $0x1, %al
jne 0x4813
jmp 0x4839
leaq 0x149d3(%rip), %rdi     # 0x191ed
xorl %eax, %eax
movl %eax, %edx
movq %rdx, %rsi
callq 0x3d50
movq %rax, %rcx
movq -0x18(%rbp), %rax
movq %rcx, (%rax)
movb $0x1, -0x1(%rbp)
jmp 0x4bf4
movq -0x28(%rbp), %rdi
leaq 0x149a9(%rip), %rsi     # 0x191ed
callq 0x74e0
testb $0x1, %al
jne 0x484f
jmp 0x4875
leaq 0x14995(%rip), %rdi     # 0x191eb
xorl %eax, %eax
movl %eax, %edx
movq %rdx, %rsi
callq 0x3d50
movq %rax, %rcx
movq -0x18(%rbp), %rax
movq %rcx, (%rax)
movb $0x1, -0x1(%rbp)
jmp 0x4bf4
movq -0x28(%rbp), %rdi
leaq 0x1496f(%rip), %rsi     # 0x191ef
callq 0x74e0
testb $0x1, %al
jne 0x488b
jmp 0x48b1
leaq 0x14960(%rip), %rdi     # 0x191f2
xorl %eax, %eax
movl %eax, %edx
movq %rdx, %rsi
callq 0x3d50
movq %rax, %rcx
movq -0x18(%rbp), %rax
movq %rcx, (%rax)
movb $0x1, -0x1(%rbp)
jmp 0x4bf4
movq -0x28(%rbp), %rdi
leaq 0x14936(%rip), %rsi     # 0x191f2
callq 0x74e0
testb $0x1, %al
jne 0x48c7
jmp 0x48ed
leaq 0x14921(%rip), %rdi     # 0x191ef
xorl %eax, %eax
movl %eax, %edx
movq %rdx, %rsi
callq 0x3d50
movq %rax, %rcx
movq -0x18(%rbp), %rax
movq %rcx, (%rax)
movb $0x1, -0x1(%rbp)
jmp 0x4bf4
jmp 0x48ef
jmp 0x48f1
jmp 0x48f3
jmp 0x48f5
callq 0x4340
testb $0x1, %al
jne 0x4903
jmp 0x4af3
movq -0x28(%rbp), %rdi
leaq 0x148e7(%rip), %rsi     # 0x191f5
callq 0x74e0
testb $0x1, %al
jne 0x4919
jmp 0x493f
leaq 0x148db(%rip), %rdi     # 0x191fb
xorl %eax, %eax
movl %eax, %edx
movq %rdx, %rsi
callq 0x3d50
movq %rax, %rcx
movq -0x18(%rbp), %rax
movq %rcx, (%rax)
movb $0x1, -0x1(%rbp)
jmp 0x4bf4
movq -0x28(%rbp), %rdi
leaq 0x148b7(%rip), %rsi     # 0x19201
callq 0x74e0
testb $0x1, %al
jne 0x4955
jmp 0x497b
leaq 0x148ab(%rip), %rdi     # 0x19207
xorl %eax, %eax
movl %eax, %edx
movq %rdx, %rsi
callq 0x3d50
movq %rax, %rcx
movq -0x18(%rbp), %rax
movq %rcx, (%rax)
movb $0x1, -0x1(%rbp)
jmp 0x4bf4
movq -0x28(%rbp), %rdi
leaq 0x14887(%rip), %rsi     # 0x1920d
callq 0x74e0
testb $0x1, %al
jne 0x4991
jmp 0x49b7
leaq 0x1487b(%rip), %rdi     # 0x19213
xorl %eax, %eax
movl %eax, %edx
movq %rdx, %rsi
callq 0x3d50
movq %rax, %rcx
movq -0x18(%rbp), %rax
movq %rcx, (%rax)
movb $0x1, -0x1(%rbp)
jmp 0x4bf4
movq -0x28(%rbp), %rdi
leaq 0x14857(%rip), %rsi     # 0x19219
callq 0x74e0
testb $0x1, %al
jne 0x49cd
jmp 0x49f3
leaq 0x1484b(%rip), %rdi     # 0x1921f
xorl %eax, %eax
movl %eax, %edx
movq %rdx, %rsi
callq 0x3d50
movq %rax, %rcx
movq -0x18(%rbp), %rax
movq %rcx, (%rax)
movb $0x1, -0x1(%rbp)
jmp 0x4bf4
movq -0x28(%rbp), %rdi
leaq 0x147fd(%rip), %rsi     # 0x191fb
callq 0x74e0
testb $0x1, %al
jne 0x4a09
jmp 0x4a2f
leaq 0x147e5(%rip), %rdi     # 0x191f5
xorl %eax, %eax
movl %eax, %edx
movq %rdx, %rsi
callq 0x3d50
movq %rax, %rcx
movq -0x18(%rbp), %rax
movq %rcx, (%rax)
movb $0x1, -0x1(%rbp)
jmp 0x4bf4
movq -0x28(%rbp), %rdi
leaq 0x147cd(%rip), %rsi     # 0x19207
callq 0x74e0
testb $0x1, %al
jne 0x4a45
jmp 0x4a6b
leaq 0x147b5(%rip), %rdi     # 0x19201
xorl %eax, %eax
movl %eax, %edx
movq %rdx, %rsi
callq 0x3d50
movq %rax, %rcx
movq -0x18(%rbp), %rax
movq %rcx, (%rax)
movb $0x1, -0x1(%rbp)
jmp 0x4bf4
movq -0x28(%rbp), %rdi
leaq 0x1479d(%rip), %rsi     # 0x19213
callq 0x74e0
testb $0x1, %al
jne 0x4a81
jmp 0x4aa7
leaq 0x14785(%rip), %rdi     # 0x1920d
xorl %eax, %eax
movl %eax, %edx
movq %rdx, %rsi
callq 0x3d50
movq %rax, %rcx
movq -0x18(%rbp), %rax
movq %rcx, (%rax)
movb $0x1, -0x1(%rbp)
jmp 0x4bf4
movq -0x28(%rbp), %rdi
leaq 0x1476d(%rip), %rsi     # 0x1921f
callq 0x74e0
testb $0x1, %al
jne 0x4abd
jmp 0x4ae3
leaq 0x14755(%rip), %rdi     # 0x19219
xorl %eax, %eax
movl %eax, %edx
movq %rdx, %rsi
callq 0x3d50
movq %rax, %rcx
movq -0x18(%rbp), %rax
movq %rcx, (%rax)
movb $0x1, -0x1(%rbp)
jmp 0x4bf4
jmp 0x4ae5
jmp 0x4ae7
jmp 0x4ae9
jmp 0x4aeb
jmp 0x4aed
jmp 0x4aef
jmp 0x4af1
jmp 0x4af3
callq 0x43d0
testb $0x1, %al
jne 0x4b01
jmp 0x4bf0
movq -0x28(%rbp), %rdi
leaq 0x14719(%rip), %rsi     # 0x19225
callq 0x74e0
testb $0x1, %al
jne 0x4b17
jmp 0x4b3d
leaq 0x1470e(%rip), %rdi     # 0x1922c
xorl %eax, %eax
movl %eax, %edx
movq %rdx, %rsi
callq 0x3d50
movq %rax, %rcx
movq -0x18(%rbp), %rax
movq %rcx, (%rax)
movb $0x1, -0x1(%rbp)
jmp 0x4bf4
movq -0x28(%rbp), %rdi
leaq 0x146eb(%rip), %rsi     # 0x19233
callq 0x74e0
testb $0x1, %al
jne 0x4b53
jmp 0x4b76
leaq 0x146df(%rip), %rdi     # 0x19239
xorl %eax, %eax
movl %eax, %edx
movq %rdx, %rsi
callq 0x3d50
movq %rax, %rcx
movq -0x18(%rbp), %rax
movq %rcx, (%rax)
movb $0x1, -0x1(%rbp)
jmp 0x4bf4
movq -0x28(%rbp), %rdi
leaq 0x146ab(%rip), %rsi     # 0x1922c
callq 0x74e0
testb $0x1, %al
jne 0x4b8c
jmp 0x4baf
leaq 0x14692(%rip), %rdi     # 0x19225
xorl %eax, %eax
movl %eax, %edx
movq %rdx, %rsi
callq 0x3d50
movq %rax, %rcx
movq -0x18(%rbp), %rax
movq %rcx, (%rax)
movb $0x1, -0x1(%rbp)
jmp 0x4bf4
movq -0x28(%rbp), %rdi
leaq 0x1467f(%rip), %rsi     # 0x19239
callq 0x74e0
testb $0x1, %al
jne 0x4bc5
jmp 0x4be8
leaq 0x14667(%rip), %rdi     # 0x19233
xorl %eax, %eax
movl %eax, %edx
movq %rdx, %rsi
callq 0x3d50
movq %rax, %rcx
movq -0x18(%rbp), %rax
movq %rcx, (%rax)
movb $0x1, -0x1(%rbp)
jmp 0x4bf4
jmp 0x4bea
jmp 0x4bec
jmp 0x4bee
jmp 0x4bf0
movb $0x0, -0x1(%rbp)
movb -0x1(%rbp), %al
andb $0x1, %al
addq $0x30, %rsp
popq %rbp
retq
nop