// File: zeeev[P]DASVC/bamtools/src/toolkit/bamtools_convert.cpp
// Function: BamTools::ConvertPileupFormatVisitor::Visit(BamTools::PileupPosition const&)
void ConvertPileupFormatVisitor::Visit(const PileupPosition& pileupData ) {
  
    // skip if no alignments at this position
    if ( pileupData.PileupAlignments.empty() ) return;
  
    // retrieve reference name
    const string& referenceName = m_references[pileupData.RefId].RefName;
    const int& position   = pileupData.Position;
    
    // retrieve reference base from FASTA file, if one provided; otherwise default to 'N'
    char referenceBase('N');
    if ( m_hasFasta && (pileupData.Position < m_references[pileupData.RefId].RefLength) ) {
        if ( !m_fasta.GetBase(pileupData.RefId, pileupData.Position, referenceBase ) ) {
            cerr << "bamtools convert ERROR: pileup conversion - could not read reference base from FASTA file" << endl;
            return;
        }
    }
    
    // get count of alleles at this position
    const int numberAlleles = pileupData.PileupAlignments.size();
    
    // -----------------------------------------------------------
    // build strings based on alleles at this positionInAlignment
    
    stringstream bases("");
    stringstream baseQualities("");
    stringstream mapQualities("");
    
    // iterate over alignments at this pileup position
    vector<PileupAlignment>::const_iterator pileupIter = pileupData.PileupAlignments.begin();
    vector<PileupAlignment>::const_iterator pileupEnd  = pileupData.PileupAlignments.end();
    for ( ; pileupIter != pileupEnd; ++pileupIter ) {
        const PileupAlignment pa = (*pileupIter);
        const BamAlignment& ba = pa.Alignment;
        
        // if beginning of read segment
        if ( pa.IsSegmentBegin )
            bases << '^' << ( ((int)ba.MapQuality > 93) ? (char)126 : (char)((int)ba.MapQuality+33) );
        
        // if current base is not a DELETION
        if ( !pa.IsCurrentDeletion ) {
          
            // get base at current position
            char base = ba.QueryBases.at(pa.PositionInAlignment);
            
            // if base matches reference
            if ( base == '=' || 
                 toupper(base) == toupper(referenceBase) ||
                 tolower(base) == tolower(referenceBase) ) 
            {
                base = ( ba.IsReverseStrand() ? ',' : '.' );
            }
            
            // mismatches reference
            else base = ( ba.IsReverseStrand() ? tolower(base) : toupper(base) );
            
            // store base
            bases << base;
          
            // if next position contains insertion
            if ( pa.IsNextInsertion ) {
                bases << '+' << pa.InsertionLength;
                for (int i = 1; i <= pa.InsertionLength; ++i) {
                    char insertedBase = (char)ba.QueryBases.at(pa.PositionInAlignment + i);
                    bases << (ba.IsReverseStrand() ? (char)tolower(insertedBase) : (char)toupper(insertedBase) );
                }
            }
            
            // if next position contains DELETION
            else if ( pa.IsNextDeletion ) {
                bases << '-' << pa.DeletionLength;
                for (int i = 1; i <= pa.DeletionLength; ++i) {
                    char deletedBase('N');
                    if ( m_hasFasta && (pileupData.Position+i < m_references[pileupData.RefId].RefLength) ) {
                        if ( !m_fasta.GetBase(pileupData.RefId, pileupData.Position+i, deletedBase ) ) {
                            cerr << "bamtools convert ERROR: pileup conversion - could not read reference base from FASTA file" << endl;
                            return;
                        }
                    }
                    bases << (ba.IsReverseStrand() ? (char)tolower(deletedBase) : (char)toupper(deletedBase) );
                }
            }
        }
        
        // otherwise, DELETION
        else bases << '*';
        
        // if end of read segment
        if ( pa.IsSegmentEnd )
            bases << '$';
        
        // store current base quality
        baseQualities << ba.Qualities.at(pa.PositionInAlignment);
        
        // save alignment map quality if desired
        if ( m_isPrintingMapQualities )
            mapQualities << ( ((int)ba.MapQuality > 93) ? (char)126 : (char)((int)ba.MapQuality+33) );
    }
    
    // ----------------------
    // print results 
    
    // tab-delimited
    // <refName> <1-based pos> <refBase> <numberAlleles> <bases> <qualities> [mapQuals]
    
    const string TAB = "\t";
    *m_out << referenceName       << TAB 
           << position + 1        << TAB 
           << referenceBase       << TAB 
           << numberAlleles       << TAB 
           << bases.str()         << TAB 
           << baseQualities.str() << TAB
           << mapQualities.str()  << endl;
}

// Assembly:
subq $0x8f8, %rsp            # imm = 0x8F8
movq %rdi, 0x8f0(%rsp)
movq %rsi, 0x8e8(%rsp)
movq 0x8f0(%rsp), %rax
movq %rax, 0x178(%rsp)
movq 0x8e8(%rsp), %rdi
addq $0x8, %rdi
callq 0x92850
testb $0x1, %al
jne 0x903be
jmp 0x903c3
jmp 0x910dd
movq 0x178(%rsp), %rdi
addq $0x20, %rdi
movq 0x8e8(%rsp), %rax
movslq (%rax), %rsi
callq 0x91720
movq %rax, %rcx
movq 0x178(%rsp), %rax
movq %rcx, 0x8e0(%rsp)
movq 0x8e8(%rsp), %rcx
addq $0x4, %rcx
movq %rcx, 0x8d8(%rsp)
movb $0x4e, 0x8d7(%rsp)
testb $0x1, 0x10(%rax)
je 0x904af
movq 0x178(%rsp), %rdi
movq 0x8e8(%rsp), %rax
movl 0x4(%rax), %eax
movl %eax, 0x174(%rsp)
addq $0x20, %rdi
movq 0x8e8(%rsp), %rax
movslq (%rax), %rsi
callq 0x91720
movq %rax, %rcx
movl 0x174(%rsp), %eax
cmpl 0x20(%rcx), %eax
jge 0x904af
movq 0x178(%rsp), %rdi
addq $0x8, %rdi
movq 0x8e8(%rsp), %rsi
movq 0x8e8(%rsp), %rdx
addq $0x4, %rdx
leaq 0x8d7(%rsp), %rcx
callq 0x10c140
testb $0x1, %al
jne 0x904ad
movq 0xd4b53(%rip), %rdi     # 0x164fe0
leaq 0x9e34a(%rip), %rsi     # 0x12e7de
callq 0x86700
movq %rax, %rdi
movq 0xd4acd(%rip), %rsi     # 0x164f70
callq 0x86770
jmp 0x910dd
jmp 0x904af
movq 0x8e8(%rsp), %rdi
addq $0x8, %rdi
callq 0x928a0
movl %eax, 0x8d0(%rsp)
leaq 0x727(%rsp), %rdi
movq %rdi, 0x168(%rsp)
callq 0x86da0
movq 0x168(%rsp), %rdx
leaq 0xa4788(%rip), %rsi     # 0x134c73
leaq 0x728(%rsp), %rdi
callq 0x86a00
jmp 0x904fa
movl $0x10, %edi
movl $0x8, %esi
callq 0x928c0
movl %eax, 0x164(%rsp)
jmp 0x90512
movl 0x164(%rsp), %edx
leaq 0x748(%rsp), %rdi
leaq 0x728(%rsp), %rsi
callq 0x86be0
jmp 0x90530
leaq 0x728(%rsp), %rdi
callq 0x86f68
jmp 0x9053f
leaq 0x727(%rsp), %rdi
callq 0x867b0
leaq 0x567(%rsp), %rdi
movq %rdi, 0x158(%rsp)
callq 0x86da0
movq 0x158(%rsp), %rdx
leaq 0xa4703(%rip), %rsi     # 0x134c73
leaq 0x568(%rsp), %rdi
callq 0x86a00
jmp 0x9057f
movl $0x10, %edi
movl $0x8, %esi
callq 0x928c0
movl %eax, 0x154(%rsp)
jmp 0x90597
movl 0x154(%rsp), %edx
leaq 0x588(%rsp), %rdi
leaq 0x568(%rsp), %rsi
callq 0x86be0
jmp 0x905b5
leaq 0x568(%rsp), %rdi
callq 0x86f68
jmp 0x905c4
leaq 0x567(%rsp), %rdi
callq 0x867b0
leaq 0x3b7(%rsp), %rdi
movq %rdi, 0x148(%rsp)
callq 0x86da0
movq 0x148(%rsp), %rdx
leaq 0xa467e(%rip), %rsi     # 0x134c73
leaq 0x3b8(%rsp), %rdi
callq 0x86a00
jmp 0x90604
movl $0x10, %edi
movl $0x8, %esi
callq 0x928c0
movl %eax, 0x144(%rsp)
jmp 0x9061c
movl 0x144(%rsp), %edx
leaq 0x3d8(%rsp), %rdi
leaq 0x3b8(%rsp), %rsi
callq 0x86be0
jmp 0x9063a
leaq 0x3b8(%rsp), %rdi
callq 0x86f68
jmp 0x90649
leaq 0x3b7(%rsp), %rdi
callq 0x867b0
movq 0x8e8(%rsp), %rdi
addq $0x8, %rdi
callq 0x928e0
movq %rax, 0x138(%rsp)
jmp 0x90671
movq 0x138(%rsp), %rax
movq %rax, 0x3a8(%rsp)
movq 0x8e8(%rsp), %rdi
addq $0x8, %rdi
callq 0x92910
movq %rax, 0x130(%rsp)
jmp 0x9069c
movq 0x130(%rsp), %rax
movq %rax, 0x3a0(%rsp)
leaq 0x3a8(%rsp), %rdi
leaq 0x3a0(%rsp), %rsi
callq 0x92940
movb %al, 0x12f(%rsp)
jmp 0x906ca
movb 0x12f(%rsp), %al
testb $0x1, %al
jne 0x906da
jmp 0x90e8a
leaq 0x3a8(%rsp), %rdi
callq 0x92980
movq %rax, 0x120(%rsp)
jmp 0x906f1
movq 0x120(%rsp), %rsi
leaq 0x230(%rsp), %rdi
callq 0x92990
jmp 0x90708
leaq 0x230(%rsp), %rax
movq %rax, 0x228(%rsp)
testb $0x1, 0x398(%rsp)
je 0x908be
leaq 0x758(%rsp), %rdi
movl $0x5e, %esi
callq 0x86890
movq %rax, 0x118(%rsp)
jmp 0x90742
movq 0x228(%rsp), %rax
movzwl 0xb2(%rax), %eax
cmpl $0x5d, %eax
jle 0x90761
movb $0x7e, %al
movb %al, 0x117(%rsp)
jmp 0x9077a
movq 0x228(%rsp), %rax
movzwl 0xb2(%rax), %eax
addl $0x21, %eax
movb %al, 0x117(%rsp)
movq 0x118(%rsp), %rdi
movb 0x117(%rsp), %al
movsbl %al, %esi
callq 0x86890
jmp 0x90793
jmp 0x908be
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x718(%rsp)
movl %eax, 0x714(%rsp)
jmp 0x907d3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x718(%rsp)
movl %eax, 0x714(%rsp)
leaq 0x728(%rsp), %rdi
callq 0x86f68
jmp 0x907d1
jmp 0x907d3
leaq 0x727(%rsp), %rdi
callq 0x867b0
jmp 0x91204
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x718(%rsp)
movl %eax, 0x714(%rsp)
jmp 0x90820
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x718(%rsp)
movl %eax, 0x714(%rsp)
leaq 0x568(%rsp), %rdi
callq 0x86f68
jmp 0x9081e
jmp 0x90820
leaq 0x567(%rsp), %rdi
callq 0x867b0
jmp 0x911f3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x718(%rsp)
movl %eax, 0x714(%rsp)
jmp 0x9086d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x718(%rsp)
movl %eax, 0x714(%rsp)
leaq 0x3b8(%rsp), %rdi
callq 0x86f68
jmp 0x9086b
jmp 0x9086d
leaq 0x3b7(%rsp), %rdi
callq 0x867b0
jmp 0x911e2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x718(%rsp)
movl %eax, 0x714(%rsp)
jmp 0x911bb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x718(%rsp)
movl %eax, 0x714(%rsp)
leaq 0x230(%rsp), %rdi
callq 0x929f0
jmp 0x90e85
testb $0x1, 0x38c(%rsp)
jne 0x90d55
movq 0x228(%rsp), %rdi
addq $0x28, %rdi
movslq 0x388(%rsp), %rsi
callq 0x868c0
movq %rax, 0x108(%rsp)
jmp 0x908ef
movq 0x108(%rsp), %rax
movb (%rax), %al
movb %al, 0x227(%rsp)
movsbl 0x227(%rsp), %eax
cmpl $0x3d, %eax
je 0x90969
movsbl 0x227(%rsp), %edi
callq 0x86e60
movl %eax, 0x104(%rsp)
movsbl 0x8d7(%rsp), %edi
callq 0x86e60
movl %eax, %ecx
movl 0x104(%rsp), %eax
cmpl %ecx, %eax
je 0x90969
movsbl 0x227(%rsp), %edi
callq 0x86a90
movl %eax, 0x100(%rsp)
movsbl 0x8d7(%rsp), %edi
callq 0x86a90
movl %eax, %ecx
movl 0x100(%rsp), %eax
cmpl %ecx, %eax
jne 0x909bb
movq 0x228(%rsp), %rdi
callq 0x86a40
movb %al, 0xff(%rsp)
jmp 0x9097f
movb 0xff(%rsp), %cl
movb $0x2c, %al
movb $0x2e, %dl
movb %dl, 0xfd(%rsp)
testb $0x1, %cl
movb %al, 0xfe(%rsp)
jne 0x909ab
movb 0xfd(%rsp), %al
movb %al, 0xfe(%rsp)
movb 0xfe(%rsp), %al
movb %al, 0x227(%rsp)
jmp 0x90a16
movq 0x228(%rsp), %rdi
callq 0x86a40
movb %al, 0xfc(%rsp)
jmp 0x909d1
movb 0xfc(%rsp), %al
testb $0x1, %al
jne 0x909de
jmp 0x909f4
movsbl 0x227(%rsp), %edi
callq 0x86a90
movl %eax, 0xf8(%rsp)
jmp 0x90a08
movsbl 0x227(%rsp), %edi
callq 0x86e60
movl %eax, 0xf8(%rsp)
movl 0xf8(%rsp), %eax
movb %al, 0x227(%rsp)
leaq 0x758(%rsp), %rdi
movsbl 0x227(%rsp), %esi
callq 0x86890
jmp 0x90a2d
testb $0x1, 0x38e(%rsp)
je 0x90b5e
leaq 0x758(%rsp), %rdi
movl $0x2b, %esi
callq 0x86890
movq %rax, 0xf0(%rsp)
jmp 0x90a57
movq 0xf0(%rsp), %rdi
movl 0x394(%rsp), %esi
callq 0x86d40
jmp 0x90a6d
movl $0x1, 0x220(%rsp)
movl 0x220(%rsp), %eax
cmpl 0x394(%rsp), %eax
jg 0x90b59
movq 0x228(%rsp), %rdi
addq $0x28, %rdi
movl 0x388(%rsp), %eax
movl 0x220(%rsp), %ecx
addl %ecx, %eax
movslq %eax, %rsi
callq 0x868c0
movq %rax, 0xe8(%rsp)
jmp 0x90aba
movq 0xe8(%rsp), %rax
movb (%rax), %al
movb %al, 0x21f(%rsp)
leaq 0x758(%rsp), %rax
movq %rax, 0xd8(%rsp)
movq 0x228(%rsp), %rdi
callq 0x86a40
movb %al, 0xe7(%rsp)
jmp 0x90af1
movb 0xe7(%rsp), %al
testb $0x1, %al
jne 0x90afe
jmp 0x90b14
movsbl 0x21f(%rsp), %edi
callq 0x86a90
movb %al, 0xd7(%rsp)
jmp 0x90b28
movsbl 0x21f(%rsp), %edi
callq 0x86e60
movb %al, 0xd7(%rsp)
movq 0xd8(%rsp), %rdi
movb 0xd7(%rsp), %al
movsbl %al, %esi
callq 0x86890
jmp 0x90b41
jmp 0x90b43
movl 0x220(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x220(%rsp)
jmp 0x90a78
jmp 0x90d53
testb $0x1, 0x38d(%rsp)
je 0x90d51
leaq 0x758(%rsp), %rdi
movl $0x2d, %esi
callq 0x86890
movq %rax, 0xc8(%rsp)
jmp 0x90b88
movq 0xc8(%rsp), %rdi
movl 0x390(%rsp), %esi
callq 0x86d40
jmp 0x90b9e
movl $0x1, 0x218(%rsp)
movl 0x218(%rsp), %eax
cmpl 0x390(%rsp), %eax
jg 0x90d4f
movq 0x178(%rsp), %rax
movb $0x4e, 0x217(%rsp)
testb $0x1, 0x10(%rax)
je 0x90cc1
movq 0x178(%rsp), %rdi
movq 0x8e8(%rsp), %rax
movl 0x4(%rax), %ecx
movl 0x218(%rsp), %edx
addl %edx, %ecx
movl %ecx, 0xbc(%rsp)
addq $0x20, %rdi
movslq (%rax), %rsi
callq 0x91720
movq %rax, 0xc0(%rsp)
jmp 0x90c10
movl 0xbc(%rsp), %eax
movq 0xc0(%rsp), %rcx
cmpl 0x20(%rcx), %eax
jge 0x90cc1
movq 0x178(%rsp), %rdi
addq $0x8, %rdi
movq 0x8e8(%rsp), %rsi
movl 0x4(%rsi), %eax
movl 0x218(%rsp), %ecx
addl %ecx, %eax
movl %eax, 0x210(%rsp)
leaq 0x210(%rsp), %rdx
leaq 0x217(%rsp), %rcx
callq 0x10c140
movb %al, 0xbb(%rsp)
jmp 0x90c6d
movb 0xbb(%rsp), %al
xorb $-0x1, %al
testb $0x1, %al
jne 0x90c7c
jmp 0x90cbf
movq 0xd435d(%rip), %rdi     # 0x164fe0
leaq 0x9db54(%rip), %rsi     # 0x12e7de
callq 0x86700
movq %rax, 0xb0(%rsp)
jmp 0x90c99
movq 0xb0(%rsp), %rdi
movq 0xd42c8(%rip), %rsi     # 0x164f70
callq 0x86770
jmp 0x90caf
movl $0x1, 0x20c(%rsp)
jmp 0x90e4f
jmp 0x90cc1
leaq 0x758(%rsp), %rax
movq %rax, 0xa0(%rsp)
movq 0x228(%rsp), %rdi
callq 0x86a40
movb %al, 0xaf(%rsp)
jmp 0x90ce7
movb 0xaf(%rsp), %al
testb $0x1, %al
jne 0x90cf4
jmp 0x90d0a
movsbl 0x217(%rsp), %edi
callq 0x86a90
movb %al, 0x9f(%rsp)
jmp 0x90d1e
movsbl 0x217(%rsp), %edi
callq 0x86e60
movb %al, 0x9f(%rsp)
movq 0xa0(%rsp), %rdi
movb 0x9f(%rsp), %al
movsbl %al, %esi
callq 0x86890
jmp 0x90d37
jmp 0x90d39
movl 0x218(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x218(%rsp)
jmp 0x90ba9
jmp 0x90d51
jmp 0x90d53
jmp 0x90d6b
leaq 0x758(%rsp), %rdi
movl $0x2a, %esi
callq 0x86890
jmp 0x90d69
jmp 0x90d6b
testb $0x1, 0x399(%rsp)
je 0x90d8b
leaq 0x758(%rsp), %rdi
movl $0x24, %esi
callq 0x86890
jmp 0x90d89
jmp 0x90d8b
leaq 0x598(%rsp), %rax
movq %rax, 0x88(%rsp)
movq 0x228(%rsp), %rdi
addq $0x68, %rdi
movslq 0x388(%rsp), %rsi
callq 0x868c0
movq %rax, 0x90(%rsp)
jmp 0x90dbe
movq 0x88(%rsp), %rdi
movq 0x90(%rsp), %rax
movsbl (%rax), %esi
callq 0x86890
jmp 0x90dd8
movq 0x178(%rsp), %rax
testb $0x1, 0x11(%rax)
je 0x90e44
leaq 0x3d8(%rsp), %rax
addq $0x10, %rax
movq %rax, 0x80(%rsp)
movq 0x228(%rsp), %rax
movzwl 0xb2(%rax), %eax
cmpl $0x5d, %eax
jle 0x90e16
movb $0x7e, %al
movb %al, 0x7f(%rsp)
jmp 0x90e2c
movq 0x228(%rsp), %rax
movzwl 0xb2(%rax), %eax
addl $0x21, %eax
movb %al, 0x7f(%rsp)
movq 0x80(%rsp), %rdi
movb 0x7f(%rsp), %al
movsbl %al, %esi
callq 0x86890
jmp 0x90e42
jmp 0x90e44
movl $0x0, 0x20c(%rsp)
leaq 0x230(%rsp), %rdi
callq 0x929f0
jmp 0x90e5e
movl 0x20c(%rsp), %eax
testl %eax, %eax
jne 0x910b2
jmp 0x90e6f
jmp 0x90e71
leaq 0x3a8(%rsp), %rdi
callq 0x92a00
jmp 0x90e80
jmp 0x906ac
jmp 0x911bb
leaq 0x1e7(%rsp), %rdi
movq %rdi, 0x70(%rsp)
callq 0x86da0
movq 0x70(%rsp), %rdx
leaq 0xa3dca(%rip), %rsi     # 0x134c72
leaq 0x1e8(%rsp), %rdi
callq 0x86a00
jmp 0x90eb7
leaq 0x1e7(%rsp), %rdi
callq 0x867b0
movq 0x178(%rsp), %rax
movq 0x18(%rax), %rdi
movq 0x8e0(%rsp), %rsi
callq 0x86640
movq %rax, 0x68(%rsp)
jmp 0x90ee4
movq 0x68(%rsp), %rdi
leaq 0x1e8(%rsp), %rsi
callq 0x86640
movq %rax, 0x60(%rsp)
jmp 0x90efd
movq 0x60(%rsp), %rdi
movq 0x8d8(%rsp), %rax
movl (%rax), %esi
incl %esi
callq 0x86d40
movq %rax, 0x58(%rsp)
jmp 0x90f1a
movq 0x58(%rsp), %rdi
leaq 0x1e8(%rsp), %rsi
callq 0x86640
movq %rax, 0x50(%rsp)
jmp 0x90f33
movq 0x50(%rsp), %rdi
movsbl 0x8d7(%rsp), %esi
callq 0x86890
movq %rax, 0x48(%rsp)
jmp 0x90f4c
movq 0x48(%rsp), %rdi
leaq 0x1e8(%rsp), %rsi
callq 0x86640
movq %rax, 0x40(%rsp)
jmp 0x90f65
movq 0x40(%rsp), %rdi
movl 0x8d0(%rsp), %esi
callq 0x86d40
movq %rax, 0x38(%rsp)
jmp 0x90f7d
movq 0x38(%rsp), %rdi
leaq 0x1e8(%rsp), %rsi
callq 0x86640
movq %rax, 0x30(%rsp)
jmp 0x90f96
leaq 0x1c0(%rsp), %rdi
leaq 0x748(%rsp), %rsi
callq 0x866f0
jmp 0x90fad
movq 0x30(%rsp), %rdi
leaq 0x1c0(%rsp), %rsi
callq 0x86640
movq %rax, 0x28(%rsp)
jmp 0x90fc6
movq 0x28(%rsp), %rdi
leaq 0x1e8(%rsp), %rsi
callq 0x86640
movq %rax, 0x20(%rsp)
jmp 0x90fdf
leaq 0x1a0(%rsp), %rdi
leaq 0x588(%rsp), %rsi
callq 0x866f0
jmp 0x90ff6
movq 0x20(%rsp), %rdi
leaq 0x1a0(%rsp), %rsi
callq 0x86640
movq %rax, 0x18(%rsp)
jmp 0x9100f
movq 0x18(%rsp), %rdi
leaq 0x1e8(%rsp), %rsi
callq 0x86640
movq %rax, 0x10(%rsp)
jmp 0x91028
leaq 0x180(%rsp), %rdi
leaq 0x3d8(%rsp), %rsi
callq 0x866f0
jmp 0x9103f
movq 0x10(%rsp), %rdi
leaq 0x180(%rsp), %rsi
callq 0x86640
movq %rax, 0x8(%rsp)
jmp 0x91058
movq 0x8(%rsp), %rdi
movq 0xd3f0c(%rip), %rsi     # 0x164f70
callq 0x86770
jmp 0x9106b
leaq 0x180(%rsp), %rdi
callq 0x86f68
jmp 0x9107a
leaq 0x1a0(%rsp), %rdi
callq 0x86f68
jmp 0x91089
leaq 0x1c0(%rsp), %rdi
callq 0x86f68
jmp 0x91098
leaq 0x1e8(%rsp), %rdi
callq 0x86f68
jmp 0x910a7
movl $0x0, 0x20c(%rsp)
leaq 0x3d8(%rsp), %rdi
callq 0x86580
jmp 0x910c1
leaq 0x588(%rsp), %rdi
callq 0x86580
jmp 0x910d0
leaq 0x748(%rsp), %rdi
callq 0x86580
addq $0x8f8, %rsp            # imm = 0x8F8
retq
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x718(%rsp)
movl %eax, 0x714(%rsp)
leaq 0x1e7(%rsp), %rdi
callq 0x867b0
jmp 0x911bb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x718(%rsp)
movl %eax, 0x714(%rsp)
jmp 0x91194
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x718(%rsp)
movl %eax, 0x714(%rsp)
jmp 0x91183
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x718(%rsp)
movl %eax, 0x714(%rsp)
jmp 0x91172
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x718(%rsp)
movl %eax, 0x714(%rsp)
leaq 0x180(%rsp), %rdi
callq 0x86f68
jmp 0x91170
jmp 0x91172
leaq 0x1a0(%rsp), %rdi
callq 0x86f68
jmp 0x91181
jmp 0x91183
leaq 0x1c0(%rsp), %rdi
callq 0x86f68
jmp 0x91192
jmp 0x91194
leaq 0x1e8(%rsp), %rdi
callq 0x86f68
jmp 0x911a3
jmp 0x911bb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x718(%rsp)
movl %eax, 0x714(%rsp)
jmp 0x911e2
leaq 0x3d8(%rsp), %rdi
callq 0x86580
jmp 0x911ca
jmp 0x911e2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x718(%rsp)
movl %eax, 0x714(%rsp)
jmp 0x911f3
leaq 0x588(%rsp), %rdi
callq 0x86580
jmp 0x911f1
jmp 0x911f3
leaq 0x748(%rsp), %rdi
callq 0x86580
jmp 0x91202
jmp 0x91204
movq 0x718(%rsp), %rdi
callq 0x86d80
movq %rax, %rdi
callq 0x91290
nopl (%rax)