// File: /workspace/github_cpp_makefile_star2_O1/sisong[P]ApkDiffPatch/src/diff/Differ.cpp
// Function: ZipDiffWithStream(hpatch_TStreamInput const*, hpatch_TStreamInput const*, hpatch_TStreamOutput const*, hdiff_TCompress const*, hpatch_TDecompress*, int, unsigned long, bool*, int)
bool ZipDiffWithStream(const hpatch_TStreamInput* oldZipStream,const hpatch_TStreamInput* newZipStream,
                       const hpatch_TStreamOutput* outDiffStream,
                       const hdiff_TCompress* compressPlugin,hpatch_TDecompress* decompressPlugin,
                       int diffMatchScore,size_t patchStepMemSize,
                       bool* out_isNewZipApkV2SignNoError,int threadNum){
    UnZipper            oldZip;
    UnZipper            newZip;
    std::vector<TByte>  newData;
    std::vector<TByte>  oldData;
    std::vector<TByte>  hdiffzData;
    std::vector<TByte>  out_diffData;
    std::vector<uint32_t> samePairList;
    std::vector<uint32_t> newRefDecompressList;
    std::vector<uint32_t> newRefList;
    std::vector<uint32_t> newRefOtherCompressedList;
    std::vector<uint32_t> newRefCompressedSizeList;
    std::vector<uint32_t> oldRefList;
    bool            result=true;
    bool            _isInClear=false;
    bool            byteByByteEqualCheck=false;
    bool            isNewZipApkV2SignNoError=true;
    size_t          newZipAlignSize=0;
    int             newZipNormalized_compressLevel=kDefaultZlibCompressLevel;
    int             newZipNormalized_compressMemLevel=kDefaultZlibCompressMemLevel;
    int             newZip_otherCompressLevel=0;
    int             newZip_otherCompressMemLevel=0;
    bool            newCompressedDataIsNormalized=false;
    const bool isSD=patchStepMemSize>0;
    
    check(compressPlugin!=0);
    check(decompressPlugin!=0);

    UnZipper_init(&oldZip);
    UnZipper_init(&newZip);
    check(UnZipper_openStream(&oldZip,oldZipStream));
    check(UnZipper_openStream(&newZip,newZipStream,false,false,true));
    
    newZipAlignSize=getBaseAlignSize_unsafe(&newZip);
    if (UnZipper_isHaveApkV2Sign(&newZip)){//precondition (+checkZipIsSame() to complete)
        newZip._isDataNormalized=(newZipAlignSize>0)&&(newZip._dataDescriptorCount==0);
    }else{
        newZip._isDataNormalized=true;
    }
    //if (newZip._isDataNormalized && UnZipper_isHaveApkV2Sign(&newZip)){
        newCompressedDataIsNormalized=getCompressedIsNormalized(&newZip,&newZipNormalized_compressLevel,
                                                                &newZipNormalized_compressMemLevel);
    //}else{
    //    newCompressedDataIsNormalized=getCompressedIsNormalizedBy(&newZip,newZipNormalized_compressLevel,
    //                                                              newZipNormalized_compressMemLevel);
    //}
    newZip._isDataNormalized&=newCompressedDataIsNormalized;
    if (UnZipper_isHaveApkV2Sign(&newZip)){
        if (!getCompressedIsNormalized(&newZip,&newZip_otherCompressLevel,&newZip_otherCompressMemLevel,true)){
            newZip_otherCompressLevel=0;
            newZip_otherCompressMemLevel=0;
        }
    }
    byteByByteEqualCheck=UnZipper_isHaveApkV2Sign(&newZip);
    
    if (newCompressedDataIsNormalized && UnZipper_isHaveApkV2Sign(&oldZip))
        oldZip._isDataNormalized=getCompressedIsNormalizedBy(&oldZip,newZipNormalized_compressLevel,
                                                             newZipNormalized_compressMemLevel);
    isNewZipApkV2SignNoError=checkZipInfo(&oldZip,&newZip);
    if (out_isNewZipApkV2SignNoError) *out_isNewZipApkV2SignNoError=isNewZipApkV2SignNoError;
    //if isNewZipApkV2SignNoError==false ,same info error,but continue;
    
    std::cout<<"ZipDiff with compress plugin: \""<<compressPlugin->compressType()<<"\"\n";
    check(getSamePairList(&newZip,&oldZip,newCompressedDataIsNormalized,
                          newZipNormalized_compressLevel,newZipNormalized_compressMemLevel,
                          samePairList,newRefList,newRefOtherCompressedList,newRefCompressedSizeList));
    newRefDecompressList=newRefList;
    if ((newZip_otherCompressLevel|newZip_otherCompressMemLevel)!=0){
        newRefDecompressList.insert(newRefDecompressList.end(),
                                    newRefOtherCompressedList.begin(),newRefOtherCompressedList.end());
        std::sort(newRefDecompressList.begin(),newRefDecompressList.end());
    }
    check(getOldRefList(&newZip,samePairList,newRefDecompressList,&oldZip,oldRefList));
    std::cout<<"ZipDiff same file count: "<<samePairList.size()/2<<" (all "
    <<UnZipper_fileCount(&newZip)<<")\n";
    std::cout<<"    diff new file count: "<<newRefList.size()+newRefOtherCompressedList.size()<<"\n";
    std::cout<<"     ref old file count: "<<oldRefList.size()<<" (all "
    <<UnZipper_fileCount(&oldZip)<<")\n";
    std::cout<<"     ref old decompress: "
    <<OldStream_getDecompressFileCount(&oldZip,oldRefList.data(),oldRefList.size())<<" file ("
    <<OldStream_getDecompressSumSize(&oldZip,oldRefList.data(),oldRefList.size()) <<" byte!)\n";
    //for (int i=0; i<(int)newRefList.size(); ++i) std::cout<<zipFile_name(&newZip,newRefList[i])<<"\n";
    //for (int i=0; i<(int)newRefOtherCompressedList.size(); ++i) std::cout<<zipFile_name(&newZip,newRefOtherCompressedList[i])<<"\n";
    //for (int i=0; i<(int)oldRefList.size(); ++i) std::cout<<zipFile_name(&oldZip,oldRefList[i])<<"\n";
    
    #define _loadNewAndOldData() \
        if ((newZip_otherCompressLevel|newZip_otherCompressMemLevel)!=0){ \
            check(readZipStreamData(&newZip,newRefDecompressList,std::vector<uint32_t>(),newData)); \
        }else{ \
            check(readZipStreamData(&newZip,newRefList,newRefOtherCompressedList,newData)); \
        } \
        check(readZipStreamData(&oldZip,oldRefList,std::vector<uint32_t>(),oldData));
    _loadNewAndOldData();
    check(HDiffZ(oldData,newData,hdiffzData,compressPlugin,diffMatchScore,patchStepMemSize,threadNum));
    _loadNewAndOldData();
    check(HPatchZ_check(oldData,newData,hdiffzData,decompressPlugin,isSD));
    { std::vector<TByte> _empty; oldData.swap(_empty); }
    { std::vector<TByte> _empty; newData.swap(_empty); }
    
    check(serializeZipDiffData(out_diffData,&newZip,&oldZip,newZipAlignSize,
                               newZipNormalized_compressLevel,newZipNormalized_compressMemLevel,
                               newZip_otherCompressLevel,newZip_otherCompressMemLevel,
                               samePairList,newRefOtherCompressedList,newRefCompressedSizeList,
                               oldRefList,hdiffzData,compressPlugin,isSD?1:0));
    std::cout<<"ZipDiff size: "<<out_diffData.size()<<"\n";
    
    check(outDiffStream->write(outDiffStream,0,out_diffData.data(),out_diffData.data()+out_diffData.size()));
clear:
    _isInClear=true;
    check(UnZipper_close(&newZip));
    check(UnZipper_close(&oldZip));
    return result;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x2d8, %rsp            # imm = 0x2D8
movl %r9d, 0xec(%rsp)
movq %rdx, 0x170(%rsp)
xorl %eax, %eax
movq %rax, 0x60(%rsp)
xorps %xmm0, %xmm0
movaps %xmm0, 0x50(%rsp)
movq %rax, 0x80(%rsp)
movaps %xmm0, 0x70(%rsp)
movq %rax, 0x140(%rsp)
movaps %xmm0, 0x130(%rsp)
movq %rax, 0x120(%rsp)
movaps %xmm0, 0x110(%rsp)
movq %rax, 0x100(%rsp)
movaps %xmm0, 0xf0(%rsp)
movq %rax, 0xc0(%rsp)
movaps %xmm0, 0xb0(%rsp)
movq %rax, 0xe0(%rsp)
movaps %xmm0, 0xd0(%rsp)
movq %rax, 0xa0(%rsp)
movaps %xmm0, 0x90(%rsp)
movq %rax, 0x160(%rsp)
movaps %xmm0, 0x150(%rsp)
movq %rax, 0x40(%rsp)
movaps %xmm0, 0x30(%rsp)
movl $0x6, 0xc(%rsp)
movl $0x8, 0x8(%rsp)
movl %eax, 0x4(%rsp)
movl %eax, (%rsp)
testq %rcx, %rcx
je 0xaf7a
movq %r8, %r15
testq %r8, %r8
je 0xaf86
movq %rcx, %r14
movq %rsi, %r12
movq %rdi, %r13
leaq 0x228(%rsp), %rdi
callq 0x3ff18
leaq 0x178(%rsp), %rdi
callq 0x3ff18
leaq 0x228(%rsp), %rdi
movq %r13, %rsi
xorl %edx, %edx
xorl %ecx, %ecx
xorl %r8d, %r8d
callq 0x3ffab
testb %al, %al
je 0xaf92
leaq 0x178(%rsp), %rdi
movq %r12, %rsi
xorl %edx, %edx
xorl %ecx, %ecx
movl $0x1, %r8d
callq 0x3ffab
testb %al, %al
je 0xaf9e
leaq 0x178(%rsp), %rdi
callq 0x813a
movq %rax, 0x128(%rsp)
movq 0x210(%rsp), %rax
cmpq 0x1c8(%rsp), %rax
jae 0xafaa
cmpq $0x0, 0x128(%rsp)
setne %al
cmpl $0x0, 0x1e8(%rsp)
sete %cl
andb %al, %cl
movb %cl, 0x201(%rsp)
jmp 0xafb2
leaq 0x4fe02(%rip), %r13     # 0x5ad83
jmp 0xb564
leaq 0x4fdf4(%rip), %r13     # 0x5ad81
jmp 0xb564
leaq 0x4f569(%rip), %r13     # 0x5a502
jmp 0xb564
leaq 0x4fdf7(%rip), %r13     # 0x5ad9c
jmp 0xb564
movb $0x1, 0x201(%rsp)
leaq 0x178(%rsp), %rdi
leaq 0xc(%rsp), %rsi
leaq 0x8(%rsp), %rdx
xorl %ecx, %ecx
callq 0x803f
movl %eax, %r13d
andb %al, 0x201(%rsp)
movq 0x210(%rsp), %rax
cmpq 0x1c8(%rsp), %rax
jae 0xb00e
leaq 0x178(%rsp), %rdi
leaq 0x4(%rsp), %rsi
movq %rsp, %rdx
movl $0x1, %ecx
callq 0x803f
testb %al, %al
jne 0xb00e
xorl %eax, %eax
movl %eax, 0x4(%rsp)
movl %eax, (%rsp)
testb %r13b, %r13b
je 0xb043
movq 0x2c0(%rsp), %rax
cmpq 0x278(%rsp), %rax
jae 0xb043
movl 0xc(%rsp), %esi
movl 0x8(%rsp), %edx
leaq 0x228(%rsp), %rdi
xorl %ecx, %ecx
callq 0x7d80
movb %al, 0x2b1(%rsp)
cmpb $0x1, 0x2b1(%rsp)
jne 0xb059
leaq 0x501f8(%rip), %rdi     # 0x5b24c
callq 0x44e0
leaq 0x228(%rsp), %rdi
callq 0x3fa96
testb %al, %al
je 0xb076
leaq 0x501fb(%rip), %rdi     # 0x5b26c
callq 0x44e0
movq 0x2c0(%rsp), %rax
cmpq 0x278(%rsp), %rax
jae 0xb094
leaq 0x50205(%rip), %rdi     # 0x5b294
callq 0x44e0
leaq 0x228(%rsp), %rdi
callq 0x3ff01
testb %al, %al
je 0xb0b1
leaq 0x50207(%rip), %rdi     # 0x5b2b3
callq 0x44e0
cmpb $0x1, 0x201(%rsp)
jne 0xb0c7
leaq 0x50210(%rip), %rdi     # 0x5b2d2
callq 0x44e0
leaq 0x178(%rsp), %rdi
callq 0x3fa96
testb %al, %al
je 0xb0e4
leaq 0x50213(%rip), %rdi     # 0x5b2f2
callq 0x44e0
movq 0x1c8(%rsp), %rbx
movq 0x210(%rsp), %r12
cmpq %rbx, %r12
jae 0xb105
leaq 0x5021a(%rip), %rdi     # 0x5b31a
callq 0x44e0
leaq 0x178(%rsp), %rdi
callq 0x3ff01
testb %al, %al
je 0xb122
leaq 0x5021c(%rip), %rdi     # 0x5b339
callq 0x44e0
movb $0x1, %bpl
cmpq %rbx, %r12
jae 0xb142
cmpb $0x0, 0x201(%rsp)
jne 0xb142
leaq 0x5021d(%rip), %rdi     # 0x5b358
callq 0x44e0
xorl %ebp, %ebp
cmpq %rbx, %r12
jb 0xb166
leaq 0x178(%rsp), %rdi
callq 0x3fc68
testb %al, %al
je 0xb166
leaq 0x5026c(%rip), %rdi     # 0x5b3cb
callq 0x44e0
xorl %ebp, %ebp
movq 0x318(%rsp), %rbx
movl $0xa, %edi
callq 0x4410
testq %rbx, %rbx
je 0xb180
movb %bpl, (%rbx)
movq 0x70e39(%rip), %r12     # 0x7bfc0
leaq 0x4f924(%rip), %rsi     # 0x5aab2
movl $0x1f, %edx
movq %r12, %rdi
callq 0x4370
callq *(%r14)
movq %rax, %rbx
testq %rax, %rax
je 0xb1c2
movq %rbx, %rdi
callq 0x4140
movq 0x70e0b(%rip), %rdi     # 0x7bfc0
movq %rbx, %rsi
movq %rax, %rdx
callq 0x4370
jmp 0xb1db
movq (%r12), %rax
movq -0x18(%rax), %rax
leaq (%r12,%rax), %rdi
movl 0x20(%r12,%rax), %esi
orl $0x1, %esi
callq 0x4560
movq 0x70dde(%rip), %rdi     # 0x7bfc0
leaq 0x4deba(%rip), %rsi     # 0x590a3
movl $0x2, %edx
callq 0x4370
movl 0xc(%rsp), %ecx
movl 0x8(%rsp), %r8d
subq $0x8, %rsp
leaq 0x158(%rsp), %r10
leaq 0x98(%rsp), %rbx
leaq 0xd8(%rsp), %rax
movzbl %r13b, %edx
leaq 0x180(%rsp), %rdi
leaq 0x230(%rsp), %rsi
leaq 0xf8(%rsp), %r9
movq %r10, %rbp
pushq %r10
pushq %rbx
pushq %rax
callq 0x82b6
addq $0x20, %rsp
testb %al, %al
je 0xb554
leaq 0xb0(%rsp), %rdi
leaq 0xd0(%rsp), %rsi
callq 0xc186
movl (%rsp), %eax
orl 0x4(%rsp), %eax
je 0xb2cd
leaq 0xb0(%rsp), %rdi
movq 0x8(%rdi), %rsi
movq 0x90(%rsp), %rdx
movq 0x98(%rsp), %rcx
callq 0xc2d0
movq 0xb0(%rsp), %r13
movq 0xb8(%rsp), %r12
cmpq %r12, %r13
je 0xb2cd
movq %r12, %rax
subq %r13, %rax
sarq $0x2, %rax
bsrq %rax, %rdx
xorl $0x3f, %edx
addl %edx, %edx
xorq $0x7e, %rdx
movq %r13, %rdi
movq %r12, %rsi
callq 0xc4c3
movq %r13, %rdi
movq %r12, %rsi
callq 0xc5a6
leaq 0x178(%rsp), %rdi
leaq 0xf0(%rsp), %rsi
leaq 0xb0(%rsp), %rdx
leaq 0x228(%rsp), %rcx
leaq 0x30(%rsp), %r8
callq 0xc818
testb %al, %al
je 0xb55d
movq 0x70cba(%rip), %rdi     # 0x7bfc0
leaq 0x4f7c5(%rip), %rsi     # 0x5aad2
movl $0x19, %edx
callq 0x4370
movq 0xf8(%rsp), %rsi
subq 0xf0(%rsp), %rsi
sarq $0x2, %rsi
shrq %rsi
movq 0x70c8b(%rip), %rdi     # 0x7bfc0
callq 0x4220
movq %rax, %r12
leaq 0x4f7a8(%rip), %rsi     # 0x5aaec
movl $0x6, %edx
movq %rax, %rdi
callq 0x4370
leaq 0x178(%rsp), %rdi
callq 0x3f9dd
movq %r12, %rdi
movl %eax, %esi
callq 0x45c0
leaq 0x4e138(%rip), %rsi     # 0x594a7
movl $0x2, %edx
movq %rax, %rdi
callq 0x4370
movq 0x70c3d(%rip), %rdi     # 0x7bfc0
leaq 0x4f769(%rip), %rsi     # 0x5aaf3
movl $0x19, %edx
callq 0x4370
movq 0xd8(%rsp), %rax
subq 0xd0(%rsp), %rax
sarq $0x2, %rax
movq 0x98(%rsp), %rsi
subq 0x90(%rsp), %rsi
sarq $0x2, %rsi
addq %rax, %rsi
movq 0x70bfa(%rip), %rdi     # 0x7bfc0
callq 0x4220
leaq 0x4f8a6(%rip), %rsi     # 0x5ac78
movl $0x1, %edx
movq %rax, %rdi
callq 0x4370
movq 0x70bda(%rip), %rdi     # 0x7bfc0
leaq 0x4f720(%rip), %rsi     # 0x5ab0d
movl $0x19, %edx
callq 0x4370
movq 0x38(%rsp), %rsi
subq 0x30(%rsp), %rsi
sarq $0x2, %rsi
movq 0x70bb4(%rip), %rdi     # 0x7bfc0
callq 0x4220
movq %rax, %r12
leaq 0x4f6d1(%rip), %rsi     # 0x5aaec
movl $0x6, %edx
movq %rax, %rdi
callq 0x4370
leaq 0x228(%rsp), %rdi
callq 0x3f9dd
movq %r12, %rdi
movl %eax, %esi
callq 0x45c0
leaq 0x4e061(%rip), %rsi     # 0x594a7
movl $0x2, %edx
movq %rax, %rdi
callq 0x4370
movq 0x70b66(%rip), %rdi     # 0x7bfc0
leaq 0x4f6c6(%rip), %rsi     # 0x5ab27
movl $0x19, %edx
callq 0x4370
movq 0x30(%rsp), %rsi
movq 0x38(%rsp), %rdx
subq %rsi, %rdx
sarq $0x2, %rdx
leaq 0x228(%rsp), %rdi
callq 0x3dec4
movq 0x70b30(%rip), %rdi     # 0x7bfc0
movl %eax, %esi
callq 0x45c0
movq %rax, %r13
leaq 0x4f6a0(%rip), %rsi     # 0x5ab41
movl $0x7, %edx
movq %rax, %rdi
callq 0x4370
movq 0x30(%rsp), %rsi
movq 0x38(%rsp), %rdx
subq %rsi, %rdx
sarq $0x2, %rdx
leaq 0x228(%rsp), %rdi
callq 0x3df0d
movl %eax, %esi
movq %r13, %rdi
callq 0x4220
leaq 0x4f66c(%rip), %rsi     # 0x5ab49
movl $0x8, %edx
movq %rax, %rdi
callq 0x4370
movl (%rsp), %eax
orl 0x4(%rsp), %eax
je 0xb6d3
movq %rbx, %r12
xorps %xmm0, %xmm0
leaq 0x10(%rsp), %rdx
movaps %xmm0, (%rdx)
movq $0x0, 0x10(%rdx)
leaq 0x178(%rsp), %rdi
leaq 0xb0(%rsp), %rsi
leaq 0x50(%rsp), %rcx
callq 0x8b6e
movl %eax, %ebx
movq 0x10(%rsp), %rdi
testq %rdi, %rdi
je 0xb540
movq 0x20(%rsp), %rsi
subq %rdi, %rsi
callq 0x4300
testb %bl, %bl
movq %r12, %rbx
jne 0xb6fd
leaq 0x4fc33(%rip), %r13     # 0x5b185
jmp 0xb564
leaq 0x4f883(%rip), %r13     # 0x5adde
jmp 0xb564
leaq 0x4f94e(%rip), %r13     # 0x5aeb2
movq %r13, %rdi
callq 0x44e0
xorl %ebx, %ebx
leaq 0x178(%rsp), %rdi
callq 0x3ff24
testb %al, %al
jne 0xb58d
leaq 0x4f007(%rip), %rdi     # 0x5a58d
callq 0x44e0
xorl %ebx, %ebx
leaq 0x228(%rsp), %rdi
callq 0x3ff24
testb %al, %al
jne 0xb5ac
leaq 0x4f007(%rip), %rdi     # 0x5a5ac
callq 0x44e0
xorl %ebx, %ebx
movq 0x30(%rsp), %rdi
testq %rdi, %rdi
je 0xb5c3
movq 0x40(%rsp), %rsi
subq %rdi, %rsi
callq 0x4300
movq 0x150(%rsp), %rdi
testq %rdi, %rdi
je 0xb5e0
movq 0x160(%rsp), %rsi
subq %rdi, %rsi
callq 0x4300
movq 0x90(%rsp), %rdi
testq %rdi, %rdi
je 0xb5fd
movq 0xa0(%rsp), %rsi
subq %rdi, %rsi
callq 0x4300
movq 0xd0(%rsp), %rdi
testq %rdi, %rdi
je 0xb61a
movq 0xe0(%rsp), %rsi
subq %rdi, %rsi
callq 0x4300
movq 0xb0(%rsp), %rdi
testq %rdi, %rdi
je 0xb637
movq 0xc0(%rsp), %rsi
subq %rdi, %rsi
callq 0x4300
movq 0xf0(%rsp), %rdi
testq %rdi, %rdi
je 0xb654
movq 0x100(%rsp), %rsi
subq %rdi, %rsi
callq 0x4300
movq 0x110(%rsp), %rdi
testq %rdi, %rdi
je 0xb671
movq 0x120(%rsp), %rsi
subq %rdi, %rsi
callq 0x4300
movq 0x130(%rsp), %rdi
testq %rdi, %rdi
je 0xb68e
movq 0x140(%rsp), %rsi
subq %rdi, %rsi
callq 0x4300
movq 0x70(%rsp), %rdi
testq %rdi, %rdi
je 0xb6a8
movq 0x80(%rsp), %rsi
subq %rdi, %rsi
callq 0x4300
movq 0x50(%rsp), %rdi
testq %rdi, %rdi
je 0xb6bf
movq 0x60(%rsp), %rsi
subq %rdi, %rsi
callq 0x4300
movl %ebx, %eax
addq $0x2d8, %rsp            # imm = 0x2D8
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x178(%rsp), %rdi
leaq 0xd0(%rsp), %rsi
leaq 0x90(%rsp), %rdx
leaq 0x50(%rsp), %rcx
callq 0x8b6e
testb %al, %al
je 0xb9da
xorps %xmm0, %xmm0
leaq 0x10(%rsp), %rdx
movaps %xmm0, (%rdx)
movq $0x0, 0x10(%rdx)
leaq 0x228(%rsp), %rdi
leaq 0x30(%rsp), %rsi
leaq 0x70(%rsp), %rcx
callq 0x8b6e
movl %eax, %r12d
movq 0x10(%rsp), %rdi
testq %rdi, %rdi
je 0xb741
movq 0x20(%rsp), %rsi
subq %rdi, %rsi
callq 0x4300
leaq 0x4f9f0(%rip), %r13     # 0x5b138
testb %r12b, %r12b
je 0xb564
movl 0x320(%rsp), %eax
movq 0x310(%rsp), %r9
subq $0x8, %rsp
leaq 0x78(%rsp), %rdi
leaq 0x58(%rsp), %rsi
leaq 0x138(%rsp), %rdx
movq %r14, %rcx
movl 0xf4(%rsp), %r8d
pushq %rax
callq 0xbe4a
addq $0x10, %rsp
movl (%rsp), %eax
orl 0x4(%rsp), %eax
je 0xb7e7
movq %rbx, %r12
xorps %xmm0, %xmm0
leaq 0x10(%rsp), %rdx
movaps %xmm0, (%rdx)
movq $0x0, 0x10(%rdx)
leaq 0x178(%rsp), %rdi
leaq 0xb0(%rsp), %rsi
leaq 0x50(%rsp), %rcx
callq 0x8b6e
movl %eax, %ebx
movq 0x10(%rsp), %rdi
testq %rdi, %rdi
je 0xb7dd
movq 0x20(%rsp), %rsi
subq %rdi, %rsi
callq 0x4300
testb %bl, %bl
je 0xb54b
jmp 0xb814
leaq 0x178(%rsp), %rdi
leaq 0xd0(%rsp), %rsi
leaq 0x90(%rsp), %rdx
leaq 0x50(%rsp), %rcx
callq 0x8b6e
movq %rbx, %r12
testb %al, %al
je 0xb9da
xorps %xmm0, %xmm0
leaq 0x10(%rsp), %rdx
movaps %xmm0, (%rdx)
movq $0x0, 0x10(%rdx)
leaq 0x228(%rsp), %rdi
leaq 0x30(%rsp), %rsi
leaq 0x70(%rsp), %rcx
callq 0x8b6e
movl %eax, %ebx
movq 0x10(%rsp), %rdi
testq %rdi, %rdi
je 0xb857
movq 0x20(%rsp), %rsi
subq %rdi, %rsi
callq 0x4300
testb %bl, %bl
je 0xb564
xorl %r8d, %r8d
cmpq $0x0, 0x310(%rsp)
setne %r8b
leaq 0x70(%rsp), %rdi
leaq 0x50(%rsp), %rsi
leaq 0x130(%rsp), %r13
movq %r13, %rdx
movq %r15, %rcx
callq 0xc030
testb %al, %al
je 0xb9e6
movq 0x70(%rsp), %rdi
movq 0x80(%rsp), %rsi
xorps %xmm0, %xmm0
movaps %xmm0, 0x70(%rsp)
movq $0x0, 0x80(%rsp)
testq %rdi, %rdi
je 0xb8c5
subq %rdi, %rsi
callq 0x4300
xorps %xmm0, %xmm0
movq 0x50(%rsp), %rdi
movq 0x60(%rsp), %rsi
movaps %xmm0, 0x50(%rsp)
movq $0x0, 0x60(%rsp)
testq %rdi, %rdi
je 0xb8ea
subq %rdi, %rsi
callq 0x4300
xorl %r10d, %r10d
cmpq $0x0, 0x310(%rsp)
setne %r10b
movslq 0xc(%rsp), %r8
movslq 0x8(%rsp), %r9
movslq 0x4(%rsp), %rax
movslq (%rsp), %r11
subq $0x8, %rsp
leaq 0x118(%rsp), %rdi
leaq 0x180(%rsp), %rsi
leaq 0x230(%rsp), %rdx
movq 0x130(%rsp), %rcx
pushq %r10
pushq %r14
pushq %r13
leaq 0x50(%rsp), %r10
pushq %r10
pushq %rbp
pushq %r12
leaq 0x128(%rsp), %r10
pushq %r10
pushq %r11
pushq %rax
callq 0x8d6d
addq $0x50, %rsp
testb %al, %al
je 0xb9f2
movq 0x7065a(%rip), %rdi     # 0x7bfc0
leaq 0x4f1e5(%rip), %rsi     # 0x5ab52
movl $0xe, %edx
callq 0x4370
movq 0x118(%rsp), %rsi
subq 0x110(%rsp), %rsi
movq 0x70632(%rip), %rdi     # 0x7bfc0
callq 0x4220
leaq 0x4f2de(%rip), %rsi     # 0x5ac78
movl $0x1, %edx
movq %rax, %rdi
callq 0x4370
movq 0x110(%rsp), %rdx
movq 0x118(%rsp), %rcx
movq 0x170(%rsp), %rdi
xorl %esi, %esi
callq *0x18(%rdi)
movb $0x1, %bl
testl %eax, %eax
jne 0xb56e
leaq 0x4f6fa(%rip), %r13     # 0x5b0cf
jmp 0xb564
leaq 0x4f524(%rip), %r13     # 0x5af05
jmp 0xb564
leaq 0x4f567(%rip), %r13     # 0x5af54
jmp 0xb564
leaq 0x4f5a2(%rip), %r13     # 0x5af9b
jmp 0xb564
jmp 0xba04
jmp 0xba04
jmp 0xba04
movq %rax, %rbx
movq 0x10(%rsp), %rdi
testq %rdi, %rdi
je 0xba25
movq 0x20(%rsp), %rsi
subq %rdi, %rsi
callq 0x4300
jmp 0xba25
jmp 0xba22
movq %rax, %rbx
movq 0x30(%rsp), %rdi
testq %rdi, %rdi
je 0xba3c
movq 0x40(%rsp), %rsi
subq %rdi, %rsi
callq 0x4300
movq 0x150(%rsp), %rdi
testq %rdi, %rdi
je 0xba59
movq 0x160(%rsp), %rsi
subq %rdi, %rsi
callq 0x4300
movq 0x90(%rsp), %rdi
testq %rdi, %rdi
je 0xba76
movq 0xa0(%rsp), %rsi
subq %rdi, %rsi
callq 0x4300
movq 0xd0(%rsp), %rdi
testq %rdi, %rdi
je 0xba93
movq 0xe0(%rsp), %rsi
subq %rdi, %rsi
callq 0x4300
movq 0xb0(%rsp), %rdi
testq %rdi, %rdi
je 0xbab0
movq 0xc0(%rsp), %rsi
subq %rdi, %rsi
callq 0x4300
movq 0xf0(%rsp), %rdi
testq %rdi, %rdi
je 0xbacd
movq 0x100(%rsp), %rsi
subq %rdi, %rsi
callq 0x4300
movq 0x110(%rsp), %rdi
testq %rdi, %rdi
je 0xbaea
movq 0x120(%rsp), %rsi
subq %rdi, %rsi
callq 0x4300
movq 0x130(%rsp), %rdi
testq %rdi, %rdi
je 0xbb07
movq 0x140(%rsp), %rsi
subq %rdi, %rsi
callq 0x4300
movq 0x70(%rsp), %rdi
testq %rdi, %rdi
je 0xbb21
movq 0x80(%rsp), %rsi
subq %rdi, %rsi
callq 0x4300
movq 0x50(%rsp), %rdi
testq %rdi, %rdi
je 0xbb38
movq 0x60(%rsp), %rsi
subq %rdi, %rsi
callq 0x4300
movq %rbx, %rdi
callq 0x45e0