// File: pokorj54[P]Pathfinder-utilities/src/sacredGeometry.cpp
// Function: CombineExpressions[abi:cxx11](int, ExprAndValue*, int, int)
string CombineExpressions(int spellLevel, ExprAndValue * exprs, int size, int originalSize)
{
    if(size == 1)
    {
        for(int i : PRIMECONSTANTS[spellLevel - 1])
        {
            if((double)i == exprs[0].value.ToDouble())
            {
                return exprs[0].expression;
            }
        }
    }
    for(int i = 0; i < size; ++i)
    {
        ExprAndValue e1 = exprs[i];
        exprs[i] = exprs[size-1];
        for(int j = 0; j < size - 1; ++j)
        {
            ExprAndValue e2 = exprs[j];
            exprs[j] = exprs[size-2];
            string tmp;
            if(e1.pHighIndex < e2.pLowIndex && (e1.canSubstract || e2.canSubstract))
            {
                exprs[size-2] = e1.Combine(e2, Add, "+",e1.canSubstract && e2.canSubstract, true, 2*originalSize-size);
                exprs[size-2].pLowIndex = e1.pLowIndex;
                exprs[size-2].pHighIndex = e1.pHighIndex;
                tmp = CombineExpressions(spellLevel, exprs, size-1, originalSize);
                if(tmp != "")
                {
                    return tmp;
                }
            }
            if(e1.mHighIndex < e2.mLowIndex && (e1.canDivide || e2.canDivide) && (e1.value != Fraction(2) || e2.value != Fraction(2)) && (e1.value != Fraction(0) || e2.value != Fraction(0))) //2*2 == 2+2, 0*0=0+0
            {
                exprs[size-2] = e1.Combine(e2, Multiply, "*", true, e1.canDivide && e2.canDivide, 2*originalSize-size);
                exprs[size-2].mLowIndex = e1.mLowIndex;
                exprs[size-2].mHighIndex = e1.mHighIndex;
                tmp = CombineExpressions(spellLevel, exprs, size-1, originalSize);
                if(tmp != "")
                {
                    return tmp;
                }
            }
            exprs[size-2] = e1.Combine(e2, Subtract, "-", false, true, 2*originalSize-size);
            if(e2.canSubstract && exprs[size-2].value >= Fraction(0) && e1.value != exprs[size-2].value)//no point of using negative numbers, we already added 0
            {
                tmp = CombineExpressions(spellLevel, exprs, size-1, originalSize);
                if(tmp != "")
                {
                    return tmp;
                }
            }
            if(e2.canDivide && e2.value != Fraction(1) && e2.value != Fraction(0) && e1.value != Fraction(0) && (e1.value != Fraction(4) || e2.value != Fraction(2))) //we already multiplied by zero and substracted 2 from 4
            {
                exprs[size-2] = e1.Combine(e2, Divide, "/", true, false, 2*originalSize-size);
                tmp = CombineExpressions(spellLevel, exprs, size-1, originalSize);
                if(tmp != "")
                {
                    return tmp;
                }
            }
            exprs[size-2] = exprs[j];
            exprs[j] = e2;
        }
        exprs[size-1] = exprs[i];
        exprs[i] = e1;
    }
    return "";
}

// Assembly:
subq $0x4c8, %rsp            # imm = 0x4C8
movq %rdi, 0x160(%rsp)
movq %rdi, %rax
movq %rax, 0x168(%rsp)
movq %rdi, 0x4c0(%rsp)
movl %esi, 0x4bc(%rsp)
movq %rdx, 0x4b0(%rsp)
movl %ecx, 0x4ac(%rsp)
movl %r8d, 0x4a8(%rsp)
cmpl $0x1, 0x4ac(%rsp)
jne 0x3006
movl 0x4bc(%rsp), %eax
subl $0x1, %eax
movslq %eax, %rcx
leaq 0x31ae(%rip), %rax      # 0x60f0
imulq $0xc, %rcx, %rcx
addq %rcx, %rax
movq %rax, 0x4a0(%rsp)
movq 0x4a0(%rsp), %rax
movq %rax, 0x498(%rsp)
movq 0x4a0(%rsp), %rax
addq $0xc, %rax
movq %rax, 0x490(%rsp)
movq 0x498(%rsp), %rax
cmpq 0x490(%rsp), %rax
je 0x3004
movq 0x498(%rsp), %rax
movl (%rax), %eax
movl %eax, 0x48c(%rsp)
cvtsi2sdl 0x48c(%rsp), %xmm0
movsd %xmm0, 0x158(%rsp)
movq 0x4b0(%rsp), %rdi
callq 0x2670
movaps %xmm0, %xmm1
movsd 0x158(%rsp), %xmm0
ucomisd %xmm1, %xmm0
jne 0x2fe9
jp 0x2fe9
movq 0x160(%rsp), %rdi
movq 0x4b0(%rsp), %rsi
addq $0x8, %rsi
callq 0x20b0
jmp 0x3f8e
jmp 0x2feb
movq 0x498(%rsp), %rax
addq $0x4, %rax
movq %rax, 0x498(%rsp)
jmp 0x2f75
jmp 0x3006
movl $0x0, 0x488(%rsp)
movl 0x488(%rsp), %eax
cmpl 0x4ac(%rsp), %eax
jge 0x3f2f
movq 0x4b0(%rsp), %rsi
movslq 0x488(%rsp), %rax
shlq $0x6, %rax
addq %rax, %rsi
leaq 0x448(%rsp), %rdi
callq 0x4220
movq 0x4b0(%rsp), %rdi
movl 0x4ac(%rsp), %eax
decl %eax
cltq
shlq $0x6, %rax
movq %rdi, %rsi
addq %rax, %rsi
movslq 0x488(%rsp), %rax
shlq $0x6, %rax
addq %rax, %rdi
callq 0x4280
jmp 0x307c
movl $0x0, 0x438(%rsp)
movl 0x438(%rsp), %eax
movl 0x4ac(%rsp), %ecx
subl $0x1, %ecx
cmpl %ecx, %eax
jge 0x3e85
movq 0x4b0(%rsp), %rsi
movslq 0x438(%rsp), %rax
shlq $0x6, %rax
addq %rax, %rsi
leaq 0x3f8(%rsp), %rdi
callq 0x4220
jmp 0x30c6
movq 0x4b0(%rsp), %rdi
movl 0x4ac(%rsp), %eax
addl $-0x2, %eax
cltq
shlq $0x6, %rax
movq %rdi, %rsi
addq %rax, %rsi
movslq 0x438(%rsp), %rax
shlq $0x6, %rax
addq %rax, %rdi
callq 0x4280
jmp 0x30fa
movq 0x160(%rsp), %rdi
movb $0x0, 0x3f7(%rsp)
callq 0x21e0
movl 0x478(%rsp), %eax
cmpl 0x424(%rsp), %eax
jge 0x33bd
testb $0x1, 0x470(%rsp)
jne 0x313b
testb $0x1, 0x420(%rsp)
je 0x33bd
leaq 0x38f(%rsp), %rdi
movq %rdi, 0x150(%rsp)
callq 0x2280
movq 0x150(%rsp), %rdx
leaq 0x2ffd(%rip), %rsi      # 0x615c
leaq 0x390(%rsp), %rdi
callq 0x21d0
jmp 0x316e
xorl %eax, %eax
testb $0x1, 0x470(%rsp)
movb %al, 0x14f(%rsp)
je 0x318f
movb 0x420(%rsp), %al
movb %al, 0x14f(%rsp)
movb 0x14f(%rsp), %al
movl 0x4a8(%rsp), %edx
addl %edx, %edx
movl 0x4ac(%rsp), %ecx
subl %ecx, %edx
movq %rsp, %rcx
movl %edx, 0x8(%rcx)
movl $0x1, (%rcx)
movzbl %al, %r9d
andl $0x1, %r9d
leaq -0x993(%rip), %rcx      # 0x2830
leaq 0x3b0(%rsp), %rdi
leaq 0x448(%rsp), %rsi
leaq 0x3f8(%rsp), %rdx
leaq 0x390(%rsp), %r8
callq 0x42e0
jmp 0x31ea
movq 0x4b0(%rsp), %rdi
movl 0x4ac(%rsp), %eax
addl $-0x2, %eax
cltq
shlq $0x6, %rax
addq %rax, %rdi
leaq 0x3b0(%rsp), %rsi
movq %rsi, 0x140(%rsp)
callq 0x4520
movq 0x140(%rsp), %rdi
callq 0x4580
leaq 0x390(%rsp), %rdi
callq 0x2100
leaq 0x38f(%rsp), %rdi
callq 0x21a0
movl 0x474(%rsp), %edx
movq 0x4b0(%rsp), %rax
movl 0x4ac(%rsp), %ecx
addl $-0x2, %ecx
movslq %ecx, %rcx
shlq $0x6, %rcx
movl %edx, 0x2c(%rax,%rcx)
movl 0x478(%rsp), %edx
movq 0x4b0(%rsp), %rax
movl 0x4ac(%rsp), %ecx
addl $-0x2, %ecx
movslq %ecx, %rcx
shlq $0x6, %rcx
movl %edx, 0x30(%rax,%rcx)
movl 0x4bc(%rsp), %esi
movq 0x4b0(%rsp), %rdx
movl 0x4ac(%rsp), %ecx
decl %ecx
movl 0x4a8(%rsp), %r8d
leaq 0x368(%rsp), %rdi
callq 0x2ee0
jmp 0x32b8
movq 0x160(%rsp), %rdi
leaq 0x368(%rsp), %rsi
movq %rsi, 0x130(%rsp)
callq 0x21b0
movq 0x130(%rsp), %rdi
callq 0x2100
movq 0x160(%rsp), %rdi
leaq 0x2f4a(%rip), %rsi      # 0x623b
callq 0x45a0
movb %al, 0x13f(%rsp)
jmp 0x32ff
movb 0x13f(%rsp), %al
testb $0x1, %al
jne 0x330f
jmp 0x33bb
movb $0x1, 0x3f7(%rsp)
movl $0x1, 0x364(%rsp)
jmp 0x3e19
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x440(%rsp)
movl %eax, 0x43c(%rsp)
jmp 0x3f20
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x440(%rsp)
movl %eax, 0x43c(%rsp)
jmp 0x3e73
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x440(%rsp)
movl %eax, 0x43c(%rsp)
jmp 0x3390
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x440(%rsp)
movl %eax, 0x43c(%rsp)
leaq 0x390(%rsp), %rdi
callq 0x2100
leaq 0x38f(%rsp), %rdi
callq 0x21a0
jmp 0x3e66
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x440(%rsp)
movl %eax, 0x43c(%rsp)
jmp 0x3e66
jmp 0x33bd
movl 0x480(%rsp), %ecx
xorl %eax, %eax
cmpl 0x42c(%rsp), %ecx
movb %al, 0x12f(%rsp)
jge 0x356d
testb $0x1, 0x471(%rsp)
jne 0x33fb
xorl %eax, %eax
testb $0x1, 0x421(%rsp)
movb %al, 0x12f(%rsp)
je 0x356d
leaq 0x448(%rsp), %rax
movq %rax, 0x120(%rsp)
leaq 0x35c(%rsp), %rdi
movl $0x2, %esi
movl $0x1, %edx
callq 0x2460
jmp 0x3424
movq 0x120(%rsp), %rdi
leaq 0x35c(%rsp), %rsi
callq 0x27b0
movb %al, 0x11f(%rsp)
jmp 0x3442
movb 0x11f(%rsp), %al
testb $0x1, %al
jne 0x34b0
jmp 0x344f
leaq 0x3f8(%rsp), %rax
movq %rax, 0x110(%rsp)
leaq 0x354(%rsp), %rdi
movl $0x2, %esi
movl $0x1, %edx
callq 0x2460
jmp 0x3478
movq 0x110(%rsp), %rdi
leaq 0x354(%rsp), %rsi
callq 0x27b0
movb %al, 0x10f(%rsp)
jmp 0x3496
movb 0x10f(%rsp), %cl
xorl %eax, %eax
testb $0x1, %cl
movb %al, 0x12f(%rsp)
jne 0x34b0
jmp 0x356d
leaq 0x448(%rsp), %rax
movq %rax, 0x100(%rsp)
leaq 0x34c(%rsp), %rdi
xorl %esi, %esi
movl $0x1, %edx
callq 0x2460
jmp 0x34d6
movq 0x100(%rsp), %rdi
leaq 0x34c(%rsp), %rsi
callq 0x27b0
movb %al, 0xff(%rsp)
jmp 0x34f4
movb 0xff(%rsp), %cl
movb $0x1, %al
testb $0x1, %cl
movb %al, 0xfe(%rsp)
jne 0x355f
jmp 0x350b
leaq 0x3f8(%rsp), %rax
movq %rax, 0xf0(%rsp)
leaq 0x344(%rsp), %rdi
xorl %esi, %esi
movl $0x1, %edx
callq 0x2460
jmp 0x3531
movq 0xf0(%rsp), %rdi
leaq 0x344(%rsp), %rsi
callq 0x27b0
movb %al, 0xef(%rsp)
jmp 0x354f
movb 0xef(%rsp), %al
movb %al, 0xfe(%rsp)
jmp 0x355f
movb 0xfe(%rsp), %al
movb %al, 0x12f(%rsp)
movb 0x12f(%rsp), %al
testb $0x1, %al
jne 0x357d
jmp 0x37b1
leaq 0x2df(%rsp), %rdi
movq %rdi, 0xe0(%rsp)
callq 0x2280
movq 0xe0(%rsp), %rdx
leaq 0x2bbd(%rip), %rsi      # 0x615e
leaq 0x2e0(%rsp), %rdi
callq 0x21d0
jmp 0x35b0
xorl %eax, %eax
testb $0x1, 0x471(%rsp)
movb %al, 0xdf(%rsp)
je 0x35d1
movb 0x421(%rsp), %al
movb %al, 0xdf(%rsp)
movb 0xdf(%rsp), %cl
movl 0x4a8(%rsp), %edx
addl %edx, %edx
movl 0x4ac(%rsp), %eax
subl %eax, %edx
movq %rsp, %rax
movl %edx, 0x8(%rax)
movzbl %cl, %ecx
andl $0x1, %ecx
movl %ecx, (%rax)
leaq -0xd0f(%rip), %rcx      # 0x28f0
leaq 0x300(%rsp), %rdi
leaq 0x448(%rsp), %rsi
leaq 0x3f8(%rsp), %rdx
leaq 0x2e0(%rsp), %r8
movl $0x1, %r9d
callq 0x42e0
jmp 0x362c
movq 0x4b0(%rsp), %rdi
movl 0x4ac(%rsp), %eax
addl $-0x2, %eax
cltq
shlq $0x6, %rax
addq %rax, %rdi
leaq 0x300(%rsp), %rsi
movq %rsi, 0xd0(%rsp)
callq 0x4520
movq 0xd0(%rsp), %rdi
callq 0x4580
leaq 0x2e0(%rsp), %rdi
callq 0x2100
leaq 0x2df(%rsp), %rdi
callq 0x21a0
movl 0x47c(%rsp), %edx
movq 0x4b0(%rsp), %rax
movl 0x4ac(%rsp), %ecx
addl $-0x2, %ecx
movslq %ecx, %rcx
shlq $0x6, %rcx
movl %edx, 0x34(%rax,%rcx)
movl 0x480(%rsp), %edx
movq 0x4b0(%rsp), %rax
movl 0x4ac(%rsp), %ecx
addl $-0x2, %ecx
movslq %ecx, %rcx
shlq $0x6, %rcx
movl %edx, 0x38(%rax,%rcx)
movl 0x4bc(%rsp), %esi
movq 0x4b0(%rsp), %rdx
movl 0x4ac(%rsp), %ecx
decl %ecx
movl 0x4a8(%rsp), %r8d
leaq 0x2b8(%rsp), %rdi
callq 0x2ee0
jmp 0x36fa
movq 0x160(%rsp), %rdi
leaq 0x2b8(%rsp), %rsi
movq %rsi, 0xc0(%rsp)
callq 0x21b0
movq 0xc0(%rsp), %rdi
callq 0x2100
movq 0x160(%rsp), %rdi
leaq 0x2b08(%rip), %rsi      # 0x623b
callq 0x45a0
movb %al, 0xcf(%rsp)
jmp 0x3741
movb 0xcf(%rsp), %al
testb $0x1, %al
jne 0x374e
jmp 0x37af
movb $0x1, 0x3f7(%rsp)
movl $0x1, 0x364(%rsp)
jmp 0x3e19
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x440(%rsp)
movl %eax, 0x43c(%rsp)
jmp 0x379d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x440(%rsp)
movl %eax, 0x43c(%rsp)
leaq 0x2e0(%rsp), %rdi
callq 0x2100
leaq 0x2df(%rsp), %rdi
callq 0x21a0
jmp 0x3e66
jmp 0x37b1
leaq 0x257(%rsp), %rdi
movq %rdi, 0xb8(%rsp)
callq 0x2280
movq 0xb8(%rsp), %rdx
leaq 0x298b(%rip), %rsi      # 0x6160
leaq 0x258(%rsp), %rdi
callq 0x21d0
jmp 0x37e4
movl 0x4a8(%rsp), %ecx
addl %ecx, %ecx
movl 0x4ac(%rsp), %eax
subl %eax, %ecx
movq %rsp, %rax
movl %ecx, 0x8(%rax)
movl $0x1, (%rax)
leaq -0xf69(%rip), %rcx      # 0x28a0
leaq 0x278(%rsp), %rdi
leaq 0x448(%rsp), %rsi
leaq 0x3f8(%rsp), %rdx
leaq 0x258(%rsp), %r8
xorl %r9d, %r9d
callq 0x42e0
jmp 0x3833
movq 0x4b0(%rsp), %rdi
movl 0x4ac(%rsp), %eax
subl $0x2, %eax
cltq
shlq $0x6, %rax
addq %rax, %rdi
leaq 0x278(%rsp), %rsi
callq 0x4520
leaq 0x278(%rsp), %rdi
callq 0x4580
leaq 0x258(%rsp), %rdi
callq 0x2100
leaq 0x257(%rsp), %rdi
callq 0x21a0
xorl %eax, %eax
testb $0x1, 0x420(%rsp)
movb %al, 0xb7(%rsp)
je 0x3949
movq 0x4b0(%rsp), %rax
movl 0x4ac(%rsp), %ecx
addl $-0x2, %ecx
movslq %ecx, %rcx
shlq $0x6, %rcx
addq %rcx, %rax
movq %rax, 0xa8(%rsp)
leaq 0x24c(%rsp), %rdi
xorl %esi, %esi
movl $0x1, %edx
callq 0x2460
jmp 0x38d3
movq 0xa8(%rsp), %rdi
leaq 0x24c(%rsp), %rsi
callq 0x2780
movb %al, 0xa7(%rsp)
jmp 0x38f1
movb 0xa7(%rsp), %cl
xorl %eax, %eax
testb $0x1, %cl
movb %al, 0xb7(%rsp)
jne 0x3908
jmp 0x3949
movq 0x4b0(%rsp), %rsi
movl 0x4ac(%rsp), %eax
addl $-0x2, %eax
cltq
shlq $0x6, %rax
addq %rax, %rsi
leaq 0x448(%rsp), %rdi
callq 0x27b0
movb %al, 0xa6(%rsp)
jmp 0x3939
movb 0xa6(%rsp), %al
movb %al, 0xb7(%rsp)
jmp 0x3949
movb 0xb7(%rsp), %al
testb $0x1, %al
jne 0x3959
jmp 0x3a3f
movl 0x4bc(%rsp), %esi
movq 0x4b0(%rsp), %rdx
movl 0x4ac(%rsp), %ecx
decl %ecx
movl 0x4a8(%rsp), %r8d
leaq 0x228(%rsp), %rdi
callq 0x2ee0
jmp 0x3988
movq 0x160(%rsp), %rdi
leaq 0x228(%rsp), %rsi
movq %rsi, 0x98(%rsp)
callq 0x21b0
movq 0x98(%rsp), %rdi
callq 0x2100
movq 0x160(%rsp), %rdi
leaq 0x287a(%rip), %rsi      # 0x623b
callq 0x45a0
movb %al, 0xa5(%rsp)
jmp 0x39cf
movb 0xa5(%rsp), %al
testb $0x1, %al
jne 0x39dc
jmp 0x3a3d
movb $0x1, 0x3f7(%rsp)
movl $0x1, 0x364(%rsp)
jmp 0x3e19
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x440(%rsp)
movl %eax, 0x43c(%rsp)
jmp 0x3a2b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x440(%rsp)
movl %eax, 0x43c(%rsp)
leaq 0x258(%rsp), %rdi
callq 0x2100
leaq 0x257(%rsp), %rdi
callq 0x21a0
jmp 0x3e66
jmp 0x3a3f
xorl %eax, %eax
testb $0x1, 0x421(%rsp)
movb %al, 0x97(%rsp)
je 0x3bfa
leaq 0x3f8(%rsp), %rax
movq %rax, 0x88(%rsp)
leaq 0x220(%rsp), %rdi
movl $0x1, %edx
movl %edx, %esi
callq 0x2460
jmp 0x3a7c
movq 0x88(%rsp), %rdi
leaq 0x220(%rsp), %rsi
callq 0x27b0
movb %al, 0x87(%rsp)
jmp 0x3a9a
movb 0x87(%rsp), %cl
xorl %eax, %eax
testb $0x1, %cl
movb %al, 0x97(%rsp)
jne 0x3ab4
jmp 0x3bfa
leaq 0x3f8(%rsp), %rax
movq %rax, 0x78(%rsp)
leaq 0x218(%rsp), %rdi
xorl %esi, %esi
movl $0x1, %edx
callq 0x2460
jmp 0x3ad7
movq 0x78(%rsp), %rdi
leaq 0x218(%rsp), %rsi
callq 0x27b0
movb %al, 0x77(%rsp)
jmp 0x3aef
movb 0x77(%rsp), %cl
xorl %eax, %eax
testb $0x1, %cl
movb %al, 0x97(%rsp)
jne 0x3b06
jmp 0x3bfa
leaq 0x448(%rsp), %rax
movq %rax, 0x68(%rsp)
leaq 0x210(%rsp), %rdi
xorl %esi, %esi
movl $0x1, %edx
callq 0x2460
jmp 0x3b29
movq 0x68(%rsp), %rdi
leaq 0x210(%rsp), %rsi
callq 0x27b0
movb %al, 0x67(%rsp)
jmp 0x3b41
movb 0x67(%rsp), %cl
xorl %eax, %eax
testb $0x1, %cl
movb %al, 0x97(%rsp)
jne 0x3b58
jmp 0x3bfa
leaq 0x448(%rsp), %rax
movq %rax, 0x58(%rsp)
leaq 0x208(%rsp), %rdi
movl $0x4, %esi
movl $0x1, %edx
callq 0x2460
jmp 0x3b7e
movq 0x58(%rsp), %rdi
leaq 0x208(%rsp), %rsi
callq 0x27b0
movb %al, 0x57(%rsp)
jmp 0x3b96
movb 0x57(%rsp), %cl
movb $0x1, %al
testb $0x1, %cl
movb %al, 0x56(%rsp)
jne 0x3bef
jmp 0x3ba7
leaq 0x3f8(%rsp), %rax
movq %rax, 0x48(%rsp)
leaq 0x200(%rsp), %rdi
movl $0x2, %esi
movl $0x1, %edx
callq 0x2460
jmp 0x3bcd
movq 0x48(%rsp), %rdi
leaq 0x200(%rsp), %rsi
callq 0x27b0
movb %al, 0x47(%rsp)
jmp 0x3be5
movb 0x47(%rsp), %al
movb %al, 0x56(%rsp)
jmp 0x3bef
movb 0x56(%rsp), %al
movb %al, 0x97(%rsp)
movb 0x97(%rsp), %al
testb $0x1, %al
jne 0x3c0a
jmp 0x3db4
leaq 0x19f(%rsp), %rdi
movq %rdi, 0x38(%rsp)
callq 0x2280
movq 0x38(%rsp), %rdx
leaq 0x23dc(%rip), %rsi      # 0x6004
leaq 0x1a0(%rsp), %rdi
callq 0x21d0
jmp 0x3c37
movl 0x4a8(%rsp), %ecx
addl %ecx, %ecx
movl 0x4ac(%rsp), %eax
subl %eax, %ecx
movq %rsp, %rax
movl %ecx, 0x8(%rax)
movl $0x0, (%rax)
leaq -0x158c(%rip), %rcx     # 0x26d0
leaq 0x1c0(%rsp), %rdi
leaq 0x448(%rsp), %rsi
leaq 0x3f8(%rsp), %rdx
leaq 0x1a0(%rsp), %r8
movl $0x1, %r9d
callq 0x42e0
jmp 0x3c89
movq 0x4b0(%rsp), %rdi
movl 0x4ac(%rsp), %eax
addl $-0x2, %eax
cltq
shlq $0x6, %rax
addq %rax, %rdi
leaq 0x1c0(%rsp), %rsi
movq %rsi, 0x30(%rsp)
callq 0x4520
movq 0x30(%rsp), %rdi
callq 0x4580
leaq 0x1a0(%rsp), %rdi
callq 0x2100
leaq 0x19f(%rsp), %rdi
callq 0x21a0
movl 0x4bc(%rsp), %esi
movq 0x4b0(%rsp), %rdx
movl 0x4ac(%rsp), %ecx
decl %ecx
movl 0x4a8(%rsp), %r8d
leaq 0x178(%rsp), %rdi
callq 0x2ee0
jmp 0x3d09
movq 0x160(%rsp), %rdi
leaq 0x178(%rsp), %rsi
movq %rsi, 0x20(%rsp)
callq 0x21b0
movq 0x20(%rsp), %rdi
callq 0x2100
movq 0x160(%rsp), %rdi
leaq 0x24ff(%rip), %rsi      # 0x623b
callq 0x45a0
movb %al, 0x2f(%rsp)
jmp 0x3d47
movb 0x2f(%rsp), %al
testb $0x1, %al
jne 0x3d51
jmp 0x3db2
movb $0x1, 0x3f7(%rsp)
movl $0x1, 0x364(%rsp)
jmp 0x3e19
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x440(%rsp)
movl %eax, 0x43c(%rsp)
jmp 0x3da0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x440(%rsp)
movl %eax, 0x43c(%rsp)
leaq 0x1a0(%rsp), %rdi
callq 0x2100
leaq 0x19f(%rsp), %rdi
callq 0x21a0
jmp 0x3e66
jmp 0x3db4
movq 0x4b0(%rsp), %rdi
movslq 0x438(%rsp), %rax
shlq $0x6, %rax
movq %rdi, %rsi
addq %rax, %rsi
movl 0x4ac(%rsp), %eax
addl $-0x2, %eax
cltq
shlq $0x6, %rax
addq %rax, %rdi
callq 0x4280
jmp 0x3de8
movq 0x4b0(%rsp), %rdi
movslq 0x438(%rsp), %rax
shlq $0x6, %rax
addq %rax, %rdi
leaq 0x3f8(%rsp), %rsi
callq 0x4280
jmp 0x3e0e
movl $0x0, 0x364(%rsp)
testb $0x1, 0x3f7(%rsp)
jne 0x3e30
movq 0x160(%rsp), %rdi
callq 0x2100
leaq 0x3f8(%rsp), %rdi
callq 0x4580
movl 0x364(%rsp), %eax
testl %eax, %eax
jne 0x3ee9
jmp 0x3e4e
jmp 0x3e50
movl 0x438(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x438(%rsp)
jmp 0x3087
movq 0x160(%rsp), %rdi
callq 0x2100
leaq 0x3f8(%rsp), %rdi
callq 0x4580
jmp 0x3f20
movq 0x4b0(%rsp), %rdi
movslq 0x488(%rsp), %rax
shlq $0x6, %rax
movq %rdi, %rsi
addq %rax, %rsi
movl 0x4ac(%rsp), %eax
decl %eax
cltq
shlq $0x6, %rax
addq %rax, %rdi
callq 0x4280
jmp 0x3eb8
movq 0x4b0(%rsp), %rdi
movslq 0x488(%rsp), %rax
shlq $0x6, %rax
addq %rax, %rdi
leaq 0x448(%rsp), %rsi
callq 0x4280
jmp 0x3ede
movl $0x0, 0x364(%rsp)
leaq 0x448(%rsp), %rdi
callq 0x4580
movl 0x364(%rsp), %eax
testl %eax, %eax
je 0x3f08
jmp 0x3f03
jmp 0x3f8e
jmp 0x3f0a
movl 0x488(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x488(%rsp)
jmp 0x3011
leaq 0x448(%rsp), %rdi
callq 0x4580
jmp 0x3f9e
leaq 0x177(%rsp), %rdi
movq %rdi, 0x18(%rsp)
callq 0x2280
movq 0x160(%rsp), %rdi
movq 0x18(%rsp), %rdx
leaq 0x22e6(%rip), %rsi      # 0x623b
callq 0x21d0
jmp 0x3f5c
leaq 0x177(%rsp), %rdi
callq 0x21a0
jmp 0x3f8e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x440(%rsp)
movl %eax, 0x43c(%rsp)
leaq 0x177(%rsp), %rdi
callq 0x21a0
jmp 0x3f9e
movq 0x168(%rsp), %rax
addq $0x4c8, %rsp            # imm = 0x4C8
retq
movq 0x440(%rsp), %rdi
callq 0x2270
nopl (%rax,%rax)