// File: /workspace/github_c_makefile_star2_O3/pipde[P]deos-songlib/utils/processtab/processtab.c
// Function: outputSonglibFile
static void 
outputSonglibFile(Composition *c, FILE *out, char *baseName, char *programName, char *version)
    {  
    int i, j, k, noteCount = 0;
    Part *part;
    Section *section;
    Measure *measure;
    NoteInstance *noteInstance;
    ASTAttribute *attribute;
    char *noteLengthString, *voiceName;
    bool usedStdAttribute;
    
    if (c == 0 || c->partCount == 0)
        {
        Fatal("expected composition with at least one part\n");
        return;
        }
    
    /* includes and defines */
    
    indent(out); fprintf(out, "/*\n");
    indent(out); fprintf(out, "      This file was generated by %s %s.\n", PROGRAM_NAME, PROGRAM_VERSION);
    indent(out); fprintf(out, " */\n");
    indent(out); fprintf(out, "\n");
    indent(out); fprintf(out, "#include <stdio.h>\n");
    indent(out); fprintf(out, "#include <songlib/util.h>\n");
    indent(out); fprintf(out, "#include <songlib/songlib.h>\n");
    indent(out); fprintf(out, "#include <tab/tabproc.h>\n");
    indent(out); fprintf(out, "\n");
    indent(out); fprintf(out, "/* attribute includes */\n");
    
    for (i = 0; i < c->attributeNameCount; i++)
        {
        usedStdAttribute = false;
        for (j = 0; j < STD_ATTRIBUTE_COUNT; j++)
        	{
        	if (strcmp(c->attributeNames[i], stdAttributes[j]) == 0)
        		{
	        	indent(out); fprintf(out, "#include <tab/%s.h>\n", c->attributeNames[i]);
        		usedStdAttribute = true;
        		break;
        		}
	        }
        if (!usedStdAttribute)
        	{
        	indent(out); fprintf(out, "#include \"%s.h\"\n", c->attributeNames[i]);
        	}
        }

    indent(out); fprintf(out, "\n");     
    indent(out); fprintf(out, "char *PROGRAM_NAME = \"%s\";\n", programName);
    indent(out); fprintf(out, "char *PROGRAM_VERSION = \"%s\";\n", version);    
    indent(out); fprintf(out, "\n");
    indent(out); fprintf(out, "/**** Part definitions ****/\n");
    indent(out); fprintf(out, "\n");
    indent(out); fprintf(out, "#define PART_COUNT %i\n", c->partCount);
    indent(out); fprintf(out, "\n");
    for (i = 0; i < c->partCount; i++)
        {
        part = c->parts[i];
        indent(out); fprintf(out, "#define PART_%s %d\n", part->voiceName, i);
        }
    indent(out); fprintf(out, "\n");
    indent(out); fprintf(out, "Part **parts = 0;\n");    
    indent(out); fprintf(out, "\n");    
    indent(out); fprintf(out, "void\n");    
    indent(out); fprintf(out, "initParts()\n");
    indentLevel++;
    indent(out); fprintf(out, "{\n");
    indent(out); fprintf(out, "int i;\n");
    indent(out); fprintf(out, "parts = (Part **)New(sizeof(Part *) * %i);\n", c->partCount);
   
    /* loop through all parts */
    for(i = 0; i < c->partCount; i++)
        {
        part = c->parts[i];
        voiceName = part->voiceName;
        noteCount = 0;
        for(j = 0; j < part->measureCount;j++)
            {
            measure = part->measures[j];
            noteCount += measure->noteInstanceCount;
            }
        indent(out); fprintf(out, "\n");
        indent(out); fprintf(out, "parts[PART_%s] = part(\"%s\", %i, %i);\n", voiceName, voiceName, noteCount, c->sectionCount);
        indent(out); fprintf(out, "i = 0;\n");
        
        for(j = 0; j < part->measureCount;j++)
            {
            measure = part->measures[j];
            
            /* If measure corresponds to section, write section code */
            for (k = 0; k < c->sectionCount; k++)
            	{
            	if (c->sections[k]->measureNumber == j)
		        	{
					indent(out); fprintf(out, "/* Section %i (part %s) */\n", k, voiceName);
					indent(out); fprintf(out, "parts[PART_%s]->sections[%i] = section(i);\n", voiceName, k);
		        	}
            	}
            	
            /* Write measure code */
            indent(out); fprintf(out, "/* Measure %i (part %s) */\n", j, voiceName);
            
            for(k = 0; k < measure->noteInstanceCount;k++)
                {                
                noteInstance = measure->noteInstances[k];
                noteLengthString = getNoteLengthString(noteInstance->duration);
                
                if (noteInstance->noteName == 0) // REST
                    {
                    indent(out); fprintf(out, "parts[PART_%s]->notes[i++] = note(%s, REST);\n", 
                                    voiceName, noteLengthString);
                    }
                else // NOTE
                    {
                    indent(out); fprintf(out, "parts[PART_%s]->notes[i++] = note(%s, '%c');\n", 
                                    voiceName, noteLengthString, noteInstance->noteName);
                    }
                }
            }
        }
        
    indent(out); fprintf(out, "}\n");
    indentLevel--;
    indent(out); fprintf(out, "\n");
    
    /* main function definition */
    
    indent(out); fprintf(out, "/**** Main ****/\n");
    
    indent(out); fprintf(out, "int\n");
    indent(out); fprintf(out, "main()\n");
    indentLevel++;    
    indent(out); fprintf(out, "{\n");
    indent(out); fprintf(out, "initParts();\n");
    indent(out); fprintf(out, "int location, noteNumber, partIndex;\n");
    indent(out); fprintf(out, "Part *part;\n");
        
    for (i = 0; i < c->attributeNameCount; i++)
        {
        for (j = 0; j < c->sectionCount;j++)
            {
            section = c->sections[j];            
            for (k = 0; k < section->attributeCount; k++)
                {
                attribute = section->attributes[k];
                if (strcmp(c->attributeNames[i], attribute->name) != 0) continue;
                
                    
                indent(out); fprintf(out, "setupProcessor_%s(\n", attribute->name);
                indentLevel++;
                indent(out); fprintf(out, "%i, // attribute index\n", attribute->index);
                indent(out); fprintf(out, "%i, // section number\n", j);
                indent(out); fprintf(out, "json_parse(\n");
                indentLevel++;
                writeEscapedJsonString(out, attribute->value);
                indent(out); fprintf(out, ")\n");
                indentLevel--;
                indent(out); fprintf(out, ");\n");
                indentLevel--;
                }
            }
        }
        
    indent(out); fprintf(out, "songInit();\n");
    indent(out); fprintf(out, "\n");

    indent(out); fprintf(out, "setStride(0.05);\n");
    indent(out); fprintf(out, "setSustain(0.99995);\n");
    indent(out); fprintf(out, "setPrimaryEmphasis(1);\n");
    indent(out); fprintf(out, "setSecondaryEmphasis(1);\n");
    indent(out); fprintf(out, "setTempo(80);\n");
    indent(out); fprintf(out, "setTime(4,4);\n");
    indent(out); fprintf(out, "setUseRandomSampling(true);\n");
    indent(out); fprintf(out, "\n");
    indent(out); fprintf(out, "openOutput(\"%s.rra\",0,0);\n", baseName);
    indent(out); fprintf(out, "\n");
    indent(out); fprintf(out, "/* set beginning location for each part */\n");
    indent(out); fprintf(out, "\n"); 
    indent(out); fprintf(out, "location = getLocation();\n");
    indent(out); fprintf(out, "\n"); 
    indent(out); fprintf(out, "/* process each part */\n");
    indent(out); fprintf(out, "\n");         

    indent(out); fprintf(out, "for (partIndex = 0; partIndex < PART_COUNT; partIndex++)\n");
    indentLevel++;
    indent(out); fprintf(out, "{\n");
    indent(out); fprintf(out, "setLocation(location);\n");
    indent(out); fprintf(out, "part = parts[partIndex];\n");
    indent(out); fprintf(out, "\n");
    indent(out); fprintf(out, "/* run preprocessors */\n");
        
    for (j = 0; j < c->sectionCount;j++)
        {
        section = c->sections[j];            
        for (k = 0; k < section->attributeCount; k++)
            {
            attribute = section->attributes[k];      
            indent(out); fprintf(out, "preProcess_%s(%i, part);\n", attribute->name, attribute->index);
            }
        }
        
    indent(out); fprintf(out, "\n"); 
    indent(out); fprintf(out, "for (noteNumber = 0; noteNumber < part->noteCount; noteNumber++)\n");
    indentLevel++;
    indent(out); fprintf(out, "{\n"); 
    indent(out); fprintf(out, "/* pre-render notes */\n");
    
    for (j = 0; j < c->sectionCount;j++)
        {
        section = c->sections[j];            
        for (k = 0; k < section->attributeCount; k++)
            {
            attribute = section->attributes[k];      
            indent(out); fprintf(out, "preRenderNote_%s(%i, part, noteNumber);\n", 
                        attribute->name, attribute->index);
            }
        }
    indent(out); fprintf(out, "\n");
    indent(out); fprintf(out, "/* render notes */\n");
    
    for (j = 0; j < c->sectionCount;j++)
        {
        section = c->sections[j];            
        for (k = 0; k < section->attributeCount; k++)
            {
            attribute = section->attributes[k];      
            indent(out); fprintf(out, "renderNote_%s(%i, part, noteNumber);\n", 
                        attribute->name, attribute->index);
            }
        }
    indent(out); fprintf(out, "}\n");
    indentLevel--;
    indent(out); fprintf(out, "\n"); 
    indent(out); fprintf(out, "/* run postprocessors */\n");
        
    for (j = 0; j < c->sectionCount;j++)
        {
        section = c->sections[j];            
        for (k = 0; k < section->attributeCount; k++)
            {
            attribute = section->attributes[k];      
            indent(out); fprintf(out, "postProcess_%s(%i, part);\n", attribute->name, attribute->index);
            }
        }
        
    indent(out); fprintf(out, "}\n");
    indentLevel--;
    
    indent(out); fprintf(out, "\n");
    indent(out); fprintf(out, "closeOutput();\n");
    indent(out); fprintf(out, "\n");
    indent(out); fprintf(out, "return 0;\n");
    indent(out); fprintf(out, "}\n");
    indentLevel--;
    }

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x38, %rsp
testq %rdi, %rdi
je 0x2cc5
movq %rdi, %r14
cmpl $0x0, 0x8(%rdi)
je 0x2cc5
movq %rsi, %rbx
movq %rcx, 0x10(%rsp)
movq %r8, 0x8(%rsp)
movq %rdx, 0x28(%rsp)
movq %rsi, %rdi
callq 0x3ee9
leaq 0x4913(%rip), %rdi      # 0x6426
movl $0x3, %esi
movl $0x1, %edx
movq %rbx, %rcx
callq 0x11c0
movq %rbx, %rdi
callq 0x3ee9
movq 0x85cc(%rip), %rdx      # 0xa100
movq 0x85cd(%rip), %rcx      # 0xa108
leaq 0x48e8(%rip), %rsi      # 0x642a
movq %rbx, %rdi
xorl %eax, %eax
callq 0x1130
movq %rbx, %rdi
callq 0x3ee9
leaq 0x4b0d(%rip), %rdi      # 0x6668
movl $0x4, %esi
movl $0x1, %edx
movq %rbx, %rcx
callq 0x11c0
movq %rbx, %rdi
callq 0x3ee9
movl $0xa, %edi
movq %rbx, %rsi
callq 0x10f0
movq %rbx, %rdi
callq 0x3ee9
leaq 0x48c2(%rip), %rdi      # 0x6453
movl $0x13, %esi
movl $0x1, %edx
movq %rbx, %rcx
callq 0x11c0
movq %rbx, %rdi
callq 0x3ee9
leaq 0x48b5(%rip), %rdi      # 0x6467
movl $0x1a, %esi
movl $0x1, %edx
movq %rbx, %rcx
callq 0x11c0
movq %rbx, %rdi
callq 0x3ee9
leaq 0x48af(%rip), %rdi      # 0x6482
movl $0x1d, %esi
movl $0x1, %edx
movq %rbx, %rcx
callq 0x11c0
movq %rbx, %rdi
callq 0x3ee9
leaq 0x48ac(%rip), %rdi      # 0x64a0
movl $0x19, %esi
movl $0x1, %edx
movq %rbx, %rcx
callq 0x11c0
movq %rbx, %rdi
callq 0x3ee9
movl $0xa, %edi
movq %rbx, %rsi
callq 0x10f0
movq %rbx, %rdi
callq 0x3ee9
leaq 0x4890(%rip), %rdi      # 0x64ba
movl $0x19, %esi
movl $0x1, %edx
movq %rbx, %rcx
callq 0x11c0
cmpl $0x0, 0x28(%r14)
movq %r14, (%rsp)
jle 0x1cb6
leaq 0x84d2(%rip), %r13      # 0xa120
leaq 0x487f(%rip), %rbp      # 0x64d4
xorl %r15d, %r15d
movq 0x20(%r14), %rax
movq (%rax,%r15,8), %r12
xorl %r14d, %r14d
leaq (%r14,%r13), %rsi
movq %r12, %rdi
callq 0x1110
testl %eax, %eax
je 0x1c86
addq $0x14, %r14
cmpq $0x3c, %r14
jne 0x1c63
leaq 0x4865(%rip), %r12      # 0x64e9
jmp 0x1c89
movq %rbp, %r12
movq %rbx, %rdi
callq 0x3ee9
movq (%rsp), %r14
movq 0x20(%r14), %rax
movq (%rax,%r15,8), %rdx
movq %rbx, %rdi
movq %r12, %rsi
xorl %eax, %eax
callq 0x1130
incq %r15
movslq 0x28(%r14), %rax
cmpq %rax, %r15
jl 0x1c58
movq %rbx, %rdi
callq 0x3ee9
movl $0xa, %edi
movq %rbx, %rsi
callq 0x10f0
movq %rbx, %rdi
callq 0x3ee9
leaq 0x4820(%rip), %rsi      # 0x64fa
movq %rbx, %rdi
movq 0x10(%rsp), %rdx
xorl %eax, %eax
callq 0x1130
movq %rbx, %rdi
callq 0x3ee9
leaq 0x481e(%rip), %rsi      # 0x6516
movq %rbx, %rdi
movq 0x8(%rsp), %rdx
xorl %eax, %eax
callq 0x1130
movq %rbx, %rdi
callq 0x3ee9
movl $0xa, %edi
movq %rbx, %rsi
callq 0x10f0
movq %rbx, %rdi
callq 0x3ee9
leaq 0x480a(%rip), %rdi      # 0x6535
movl $0x1d, %esi
movl $0x1, %edx
movq %rbx, %rcx
callq 0x11c0
movq %rbx, %rdi
callq 0x3ee9
movl $0xa, %edi
movq %rbx, %rsi
callq 0x10f0
movq %rbx, %rdi
callq 0x3ee9
movl 0x8(%r14), %edx
leaq 0x47ee(%rip), %rsi      # 0x6553
movq %rbx, %rdi
xorl %eax, %eax
callq 0x1130
movq %rbx, %rdi
callq 0x3ee9
movl $0xa, %edi
movq %rbx, %rsi
callq 0x10f0
cmpl $0x0, 0x8(%r14)
jle 0x1dc5
leaq 0x47d8(%rip), %r13      # 0x656a
xorl %r15d, %r15d
movq (%r14), %rax
movq (%rax,%r15,8), %r12
movq %rbx, %rdi
callq 0x3ee9
movq 0x10(%r12), %rdx
movq %rbx, %rdi
movq %r13, %rsi
movl %r15d, %ecx
xorl %eax, %eax
callq 0x1130
incq %r15
movslq 0x8(%r14), %rax
cmpq %rax, %r15
jl 0x1d95
movq %rbx, %rdi
callq 0x3ee9
movl $0xa, %edi
movq %rbx, %rsi
callq 0x10f0
movq %rbx, %rdi
callq 0x3ee9
leaq 0x4795(%rip), %rdi      # 0x657e
movl $0x12, %esi
movl $0x1, %edx
movq %rbx, %rcx
callq 0x11c0
movq %rbx, %rdi
callq 0x3ee9
movl $0xa, %edi
movq %rbx, %rsi
callq 0x10f0
movq %rbx, %rdi
callq 0x3ee9
leaq 0x4772(%rip), %rdi      # 0x6591
movl $0x5, %esi
movl $0x1, %edx
movq %rbx, %rcx
callq 0x11c0
movq %rbx, %rdi
callq 0x3ee9
leaq 0x4757(%rip), %rdi      # 0x6597
movl $0xc, %esi
movl $0x1, %edx
movq %rbx, %rcx
callq 0x11c0
leaq 0x8323(%rip), %rax      # 0xa17c
incl (%rax)
movq %rbx, %rdi
callq 0x3ee9
leaq 0x473a(%rip), %rdi      # 0x65a4
movl $0x2, %esi
movl $0x1, %edx
movq %rbx, %rcx
callq 0x11c0
movq %rbx, %rdi
callq 0x3ee9
leaq 0x471c(%rip), %rdi      # 0x65a7
movl $0x7, %esi
movl $0x1, %edx
movq %rbx, %rcx
callq 0x11c0
movq %rbx, %rdi
callq 0x3ee9
movl 0x8(%r14), %edx
leaq 0x46ff(%rip), %rsi      # 0x65af
movq %rbx, %rdi
xorl %eax, %eax
callq 0x1130
cmpl $0x0, 0x8(%r14)
jle 0x2281
leaq 0x473d(%rip), %r15      # 0x6609
xorl %ecx, %ecx
movq (%r14), %rax
movq %rcx, 0x30(%rsp)
movq (%rax,%rcx,8), %r12
movslq 0x8(%r12), %rax
movl $0x0, %ebp
testq %rax, %rax
jle 0x1f00
movq (%r12), %rcx
xorl %edx, %edx
xorl %ebp, %ebp
movq (%rcx,%rdx,8), %rsi
addl 0x8(%rsi), %ebp
incq %rdx
cmpq %rdx, %rax
jne 0x1ef1
movq 0x10(%r12), %r13
movq %rbx, %rdi
callq 0x3ee9
movl $0xa, %edi
movq %rbx, %rsi
callq 0x10f0
movq %rbx, %rdi
callq 0x3ee9
movl 0x18(%r14), %r9d
movq %rbx, %rdi
leaq 0x46ab(%rip), %rsi      # 0x65db
movq %r13, %rdx
movq %r13, 0x8(%rsp)
movq %r13, %rcx
movl %ebp, %r8d
xorl %eax, %eax
callq 0x1130
movq %rbx, %rdi
callq 0x3ee9
movl $0x7, %esi
movl $0x1, %edx
leaq 0x46a3(%rip), %rdi      # 0x6601
movq %rbx, %rcx
callq 0x11c0
cmpl $0x0, 0x8(%r12)
jle 0x226c
xorl %edx, %edx
movq %r12, 0x18(%rsp)
movq (%r12), %rax
movq (%rax,%rdx,8), %r12
movl 0x18(%r14), %eax
testl %eax, %eax
movq %rdx, 0x10(%rsp)
jle 0x1ff1
xorl %ebp, %ebp
movq 0x10(%r14), %rcx
movq (%rcx,%rbp,8), %rcx
movl 0xc(%rcx), %ecx
cmpq %rcx, %rdx
jne 0x1fe6
movq %rbx, %rdi
callq 0x3ee9
movq %rbx, %rdi
movq %r15, %rsi
movl %ebp, %edx
movq 0x8(%rsp), %r13
movq %r13, %rcx
xorl %eax, %eax
callq 0x1130
movq %rbx, %rdi
callq 0x3ee9
movq %rbx, %rdi
leaq 0x4654(%rip), %rsi      # 0x6625
movq %r13, %rdx
movl %ebp, %ecx
xorl %eax, %eax
callq 0x1130
movq 0x10(%rsp), %rdx
movl 0x18(%r14), %eax
incq %rbp
movslq %eax, %rcx
cmpq %rcx, %rbp
jl 0x1f90
movq %rbx, %rdi
movq %rdx, %r14
callq 0x3ee9
movq %rbx, %rdi
leaq 0x464b(%rip), %rsi      # 0x6651
movl %r14d, %edx
movq 0x8(%rsp), %rcx
xorl %eax, %eax
callq 0x1130
cmpl $0x0, 0x8(%r12)
jle 0x2246
xorl %r15d, %r15d
movq (%r12), %rax
movq (%rax,%r15,8), %r13
movsd 0x8(%r13), %xmm0
ucomisd 0x403e(%rip), %xmm0     # 0x6078
leaq 0x4a0b(%rip), %rbp      # 0x6a4c
jne 0x2049
jnp 0x21eb
ucomisd 0x402f(%rip), %xmm0     # 0x6080
leaq 0x4a0d(%rip), %rbp      # 0x6a65
jne 0x2060
jnp 0x21eb
ucomisd 0x4020(%rip), %xmm0     # 0x6088
leaq 0x4a0c(%rip), %rbp      # 0x6a7b
jne 0x2077
jnp 0x21eb
ucomisd 0x4011(%rip), %xmm0     # 0x6090
leaq 0x4a08(%rip), %rbp      # 0x6a8e
jne 0x208e
jnp 0x21eb
ucomisd 0x4002(%rip), %xmm0     # 0x6098
leaq 0x4a05(%rip), %rbp      # 0x6aa2
jne 0x20a5
jnp 0x21eb
ucomisd 0x3ff3(%rip), %xmm0     # 0x60a0
leaq 0x49ff(%rip), %rbp      # 0x6ab3
jne 0x20bc
jnp 0x21eb
ucomisd 0x3fe4(%rip), %xmm0     # 0x60a8
leaq 0x497a(%rip), %rbp      # 0x6a45
jne 0x20d3
jnp 0x21eb
ucomisd 0x3fd5(%rip), %xmm0     # 0x60b0
leaq 0x497c(%rip), %rbp      # 0x6a5e
jne 0x20ea
jnp 0x21eb
ucomisd 0x3fc6(%rip), %xmm0     # 0x60b8
leaq 0x497b(%rip), %rbp      # 0x6a74
jne 0x2101
jnp 0x21eb
ucomisd 0x3fb7(%rip), %xmm0     # 0x60c0
leaq 0x4977(%rip), %rbp      # 0x6a87
jne 0x2118
jnp 0x21eb
ucomisd 0x3fa8(%rip), %xmm0     # 0x60c8
leaq 0x4974(%rip), %rbp      # 0x6a9b
jne 0x212f
jnp 0x21eb
ucomisd 0x3f99(%rip), %xmm0     # 0x60d0
leaq 0x496e(%rip), %rbp      # 0x6aac
jne 0x2146
jnp 0x21eb
ucomisd 0x3f8a(%rip), %xmm0     # 0x60d8
leaq 0x4969(%rip), %rbp      # 0x6abe
jne 0x215d
jnp 0x21eb
ucomisd 0x3f7b(%rip), %xmm0     # 0x60e0
leaq 0x496c(%rip), %rbp      # 0x6ad8
jne 0x2170
jnp 0x21eb
ucomisd 0x3f70(%rip), %xmm0     # 0x60e8
leaq 0x4970(%rip), %rbp      # 0x6aef
jne 0x2183
jnp 0x21eb
ucomisd 0x3f65(%rip), %xmm0     # 0x60f0
leaq 0x4971(%rip), %rbp      # 0x6b03
jne 0x2196
jnp 0x21eb
ucomisd 0x3f5a(%rip), %xmm0     # 0x60f8
leaq 0x4973(%rip), %rbp      # 0x6b18
jne 0x21a9
jnp 0x21eb
ucomisd 0x3f4f(%rip), %xmm0     # 0x6100
leaq 0x4972(%rip), %rbp      # 0x6b2a
jne 0x21bc
jnp 0x21eb
movl $0x50, %edi
movsd %xmm0, 0x20(%rsp)
callq 0x5257
movq %rax, %rbp
movl $0x4f, %esi
movq %rax, %rdi
leaq 0x495f(%rip), %rdx      # 0x6b3d
movsd 0x20(%rsp), %xmm0
movb $0x1, %al
callq 0x10b0
movb (%r13), %r14b
movq %rbx, %rdi
callq 0x3ee9
testb %r14b, %r14b
je 0x221c
movsbl (%r13), %r8d
movq %rbx, %rdi
leaq 0x4490(%rip), %rsi      # 0x669b
movq 0x8(%rsp), %rdx
movq %rbp, %rcx
xorl %eax, %eax
callq 0x1130
jmp 0x2235
movq %rbx, %rdi
leaq 0x4447(%rip), %rsi      # 0x666d
movq 0x8(%rsp), %rdx
movq %rbp, %rcx
xorl %eax, %eax
callq 0x1130
incq %r15
movslq 0x8(%r12), %rax
cmpq %rax, %r15
jl 0x2024
movq 0x10(%rsp), %rdx
incq %rdx
movq 0x18(%rsp), %r12
movslq 0x8(%r12), %rax
cmpq %rax, %rdx
movq (%rsp), %r14
leaq 0x43a3(%rip), %r15      # 0x6609
jl 0x1f79
movq 0x30(%rsp), %rcx
incq %rcx
movslq 0x8(%r14), %rax
cmpq %rax, %rcx
jl 0x1ece
movq %rbx, %rdi
callq 0x3ee9
leaq 0x4439(%rip), %rdi      # 0x66c9
movl $0x2, %esi
movl $0x1, %edx
movq %rbx, %rcx
callq 0x11c0
leaq 0x7ed3(%rip), %r15      # 0xa17c
decl (%r15)
movq %rbx, %rdi
callq 0x3ee9
movl $0xa, %edi
movq %rbx, %rsi
callq 0x10f0
movq %rbx, %rdi
callq 0x3ee9
leaq 0x43fc(%rip), %rdi      # 0x66cc
movl $0x11, %esi
movl $0x1, %edx
movq %rbx, %rcx
callq 0x11c0
movq %rbx, %rdi
callq 0x3ee9
leaq 0x43ed(%rip), %rdi      # 0x66de
movl $0x4, %esi
movl $0x1, %edx
movq %rbx, %rcx
callq 0x11c0
movq %rbx, %rdi
callq 0x3ee9
leaq 0x43d1(%rip), %rdi      # 0x66e3
movl $0x7, %esi
movl $0x1, %edx
movq %rbx, %rcx
callq 0x11c0
incl (%r15)
movq %rbx, %rdi
callq 0x3ee9
leaq 0x426e(%rip), %rdi      # 0x65a4
movl $0x2, %esi
movl $0x1, %edx
movq %rbx, %rcx
callq 0x11c0
movq %rbx, %rdi
callq 0x3ee9
leaq 0x4394(%rip), %rdi      # 0x66eb
movl $0xd, %esi
movl $0x1, %edx
movq %rbx, %rcx
callq 0x11c0
movq %rbx, %rdi
callq 0x3ee9
leaq 0x4381(%rip), %rdi      # 0x66f9
movl $0x25, %esi
movl $0x1, %edx
movq %rbx, %rcx
callq 0x11c0
movq %rbx, %rdi
callq 0x3ee9
leaq 0x4386(%rip), %rdi      # 0x671f
movl $0xc, %esi
movl $0x1, %edx
movq %rbx, %rcx
callq 0x11c0
movl 0x28(%r14), %ecx
testl %ecx, %ecx
jle 0x2662
movl 0x18(%r14), %eax
leaq 0x3c7e(%rip), %rbp      # 0x6040
leaq 0x4786(%rip), %r12      # 0x6b4f
movq $0x0, 0x10(%rsp)
testl %eax, %eax
jle 0x2649
xorl %edx, %edx
movq 0x10(%r14), %rcx
movq (%rcx,%rdx,8), %rcx
movq %rcx, 0x8(%rsp)
movl 0x8(%rcx), %r15d
testl %r15d, %r15d
jle 0x2632
movq %rdx, 0x18(%rsp)
xorl %r13d, %r13d
movq 0x8(%rsp), %rax
movq (%rax), %rax
movq (%rax,%r13,8), %r14
movq (%rsp), %rax
movq 0x20(%rax), %rax
movq 0x10(%rsp), %rcx
movq (%rax,%rcx,8), %rdi
movq (%r14), %rsi
callq 0x1110
testl %eax, %eax
jne 0x2617
movq %rbx, %rdi
callq 0x3ee9
movq (%r14), %rdx
movq %rbx, %rdi
leaq 0x42ec(%rip), %rsi      # 0x672c
xorl %eax, %eax
callq 0x1130
leaq 0x7d2e(%rip), %r15      # 0xa17c
incl (%r15)
movq %rbx, %rdi
callq 0x3ee9
movl 0x10(%r14), %edx
movq %rbx, %rdi
leaq 0x42d9(%rip), %rsi      # 0x6740
xorl %eax, %eax
callq 0x1130
movq %rbx, %rdi
callq 0x3ee9
movq %rbx, %rdi
leaq 0x42d8(%rip), %rsi      # 0x6758
movq 0x18(%rsp), %rdx
xorl %eax, %eax
callq 0x1130
movq %rbx, %rdi
callq 0x3ee9
movl $0xc, %esi
movl $0x1, %edx
leaq 0x42ca(%rip), %rdi      # 0x676f
movq %rbx, %rcx
callq 0x11c0
incl (%r15)
movq 0x8(%r14), %r14
movq %rbx, %rdi
callq 0x3ee9
movl $0x22, %edi
movq %rbx, %rsi
callq 0x10f0
leaq 0x4673(%rip), %r15      # 0x6b43
jmp 0x258e
movl $0x2, %esi
movl $0x1, %edx
leaq 0x4660(%rip), %rdi      # 0x6b46
jmp 0x2583
cmpl $0x5c, %eax
je 0x2576
cmpl $0x22, %eax
jne 0x250c
movl $0x2, %esi
movl $0x1, %edx
leaq 0x4636(%rip), %rdi      # 0x6b40
jmp 0x2583
movsbl %al, %edi
jmp 0x2559
movl $0x2, %esi
movl $0x1, %edx
leaq 0x4627(%rip), %rdi      # 0x6b49
jmp 0x2583
movl $0x2, %esi
movl $0x1, %edx
movq %r12, %rdi
jmp 0x2583
movl $0x4, %esi
movl $0x1, %edx
leaq 0x460e(%rip), %rdi      # 0x6b52
movq %rbx, %rcx
callq 0x11c0
movq %rbx, %rdi
callq 0x3ee9
movl $0x22, %edi
movq %rbx, %rsi
callq 0x10f0
jmp 0x258b
movl $0x2, %esi
movl $0x1, %edx
leaq 0x45d8(%rip), %rdi      # 0x6b4c
jmp 0x2583
movl $0x2, %esi
movl $0x1, %edx
movq %r15, %rdi
movq %rbx, %rcx
callq 0x11c0
incq %r14
movzbl (%r14), %eax
cmpq $0xd, %rax
ja 0x24eb
movslq (%rbp,%rax,4), %rcx
addq %rbp, %rcx
jmpq *%rcx
movl $0x2, %esi
movl $0x1, %edx
leaq 0x3f40(%rip), %rdi      # 0x64f7
movq %rbx, %rcx
callq 0x11c0
movq %rbx, %rdi
callq 0x3ee9
movl $0x2, %esi
movl $0x1, %edx
leaq 0x4c03(%rip), %rdi      # 0x71db
movq %rbx, %rcx
callq 0x11c0
leaq 0x7b95(%rip), %r14      # 0xa17c
decl (%r14)
movq %rbx, %rdi
callq 0x3ee9
movl $0x3, %esi
movl $0x1, %edx
leaq 0x40c2(%rip), %rdi      # 0x66c5
movq %rbx, %rcx
callq 0x11c0
decl (%r14)
movq 0x8(%rsp), %rax
movl 0x8(%rax), %r15d
incq %r13
movslq %r15d, %rax
cmpq %rax, %r13
jl 0x23fe
movq (%rsp), %rax
movl 0x18(%rax), %eax
movq 0x18(%rsp), %rdx
incq %rdx
movslq %eax, %rcx
cmpq %rcx, %rdx
movq (%rsp), %r14
jl 0x23dc
movl 0x28(%r14), %ecx
movq 0x10(%rsp), %rdi
incq %rdi
movslq %ecx, %rdx
movq %rdi, 0x10(%rsp)
cmpq %rdx, %rdi
jl 0x23d2
movq %rbx, %rdi
callq 0x3ee9
leaq 0x410b(%rip), %rdi      # 0x677c
movl $0xc, %esi
movl $0x1, %edx
movq %rbx, %rcx
callq 0x11c0
movq %rbx, %rdi
callq 0x3ee9
movl $0xa, %edi
movq %rbx, %rsi
callq 0x10f0
movq %rbx, %rdi
callq 0x3ee9
leaq 0x40e2(%rip), %rdi      # 0x6789
movl $0x11, %esi
movl $0x1, %edx
movq %rbx, %rcx
callq 0x11c0
movq %rbx, %rdi
callq 0x3ee9
leaq 0x40d3(%rip), %rdi      # 0x679b
movl $0x15, %esi
movl $0x1, %edx
movq %rbx, %rcx
callq 0x11c0
movq %rbx, %rdi
callq 0x3ee9
leaq 0x40c8(%rip), %rdi      # 0x67b1
movl $0x17, %esi
movl $0x1, %edx
movq %rbx, %rcx
callq 0x11c0
movq %rbx, %rdi
callq 0x3ee9
leaq 0x40bf(%rip), %rdi      # 0x67c9
movl $0x19, %esi
movl $0x1, %edx
movq %rbx, %rcx
callq 0x11c0
movq %rbx, %rdi
callq 0x3ee9
leaq 0x40b8(%rip), %rdi      # 0x67e3
movl $0xe, %esi
movl $0x1, %edx
movq %rbx, %rcx
callq 0x11c0
movq %rbx, %rdi
callq 0x3ee9
leaq 0x40a6(%rip), %rdi      # 0x67f2
movl $0xe, %esi
movl $0x1, %edx
movq %rbx, %rcx
callq 0x11c0
movq %rbx, %rdi
callq 0x3ee9
leaq 0x4094(%rip), %rdi      # 0x6801
movl $0x1c, %esi
movl $0x1, %edx
movq %rbx, %rcx
callq 0x11c0
movq %rbx, %rdi
callq 0x3ee9
movl $0xa, %edi
movq %rbx, %rsi
callq 0x10f0
movq %rbx, %rdi
callq 0x3ee9
leaq 0x407b(%rip), %rsi      # 0x681e
movq %rbx, %rdi
movq 0x28(%rsp), %rdx
xorl %eax, %eax
callq 0x1130
movq %rbx, %rdi
callq 0x3ee9
movl $0xa, %edi
movq %rbx, %rsi
callq 0x10f0
movq %rbx, %rdi
callq 0x3ee9
leaq 0x4063(%rip), %rdi      # 0x6839
movl $0x2b, %esi
movl $0x1, %edx
movq %rbx, %rcx
callq 0x11c0
movq %rbx, %rdi
callq 0x3ee9
movl $0xa, %edi
movq %rbx, %rsi
callq 0x10f0
movq %rbx, %rdi
callq 0x3ee9
leaq 0x4059(%rip), %rdi      # 0x6865
movl $0x1a, %esi
movl $0x1, %edx
movq %rbx, %rcx
callq 0x11c0
movq %rbx, %rdi
callq 0x3ee9
movl $0xa, %edi
movq %rbx, %rsi
callq 0x10f0
movq %rbx, %rdi
callq 0x3ee9
leaq 0x403e(%rip), %rdi      # 0x6880
movl $0x18, %esi
movl $0x1, %edx
movq %rbx, %rcx
callq 0x11c0
movq %rbx, %rdi
callq 0x3ee9
movl $0xa, %edi
movq %rbx, %rsi
callq 0x10f0
movq %rbx, %rdi
callq 0x3ee9
leaq 0x4021(%rip), %rdi      # 0x6899
movl $0x39, %esi
movl $0x1, %edx
movq %rbx, %rcx
callq 0x11c0
leaq 0x78eb(%rip), %rax      # 0xa17c
incl (%rax)
movq %rbx, %rdi
callq 0x3ee9
leaq 0x3d02(%rip), %rdi      # 0x65a4
movl $0x2, %esi
movl $0x1, %edx
movq %rbx, %rcx
callq 0x11c0
movq %rbx, %rdi
callq 0x3ee9
leaq 0x4010(%rip), %rdi      # 0x68d3
movl $0x17, %esi
movl $0x1, %edx
movq %rbx, %rcx
callq 0x11c0
movq %rbx, %rdi
callq 0x3ee9
leaq 0x4007(%rip), %rdi      # 0x68eb
movl $0x19, %esi
movl $0x1, %edx
movq %rbx, %rcx
callq 0x11c0
movq %rbx, %rdi
callq 0x3ee9
movl $0xa, %edi
movq %rbx, %rsi
callq 0x10f0
movq %rbx, %rdi
callq 0x3ee9
leaq 0x3feb(%rip), %rdi      # 0x6905
movl $0x18, %esi
movl $0x1, %edx
movq %rbx, %rcx
callq 0x11c0
movl 0x18(%r14), %eax
testl %eax, %eax
jle 0x2998
leaq 0x3fe3(%rip), %r14      # 0x691e
xorl %r15d, %r15d
movq (%rsp), %rcx
movq 0x10(%rcx), %rcx
movq (%rcx,%r15,8), %r12
cmpl $0x0, 0x8(%r12)
jle 0x298d
xorl %r13d, %r13d
movq (%r12), %rax
movq (%rax,%r13,8), %rbp
movq %rbx, %rdi
callq 0x3ee9
movq (%rbp), %rdx
movl 0x10(%rbp), %ecx
movq %rbx, %rdi
movq %r14, %rsi
xorl %eax, %eax
callq 0x1130
incq %r13
movslq 0x8(%r12), %rax
cmpq %rax, %r13
jl 0x2955
movq (%rsp), %rax
movl 0x18(%rax), %eax
incq %r15
movslq %eax, %rcx
cmpq %rcx, %r15
jl 0x293e
movq %rbx, %rdi
callq 0x3ee9
movl $0xa, %edi
movq %rbx, %rsi
callq 0x10f0
movq %rbx, %rdi
callq 0x3ee9
leaq 0x3f7c(%rip), %rdi      # 0x6938
movl $0x41, %esi
movl $0x1, %edx
movq %rbx, %rcx
callq 0x11c0
leaq 0x77a7(%rip), %rax      # 0xa17c
incl (%rax)
movq %rbx, %rdi
callq 0x3ee9
leaq 0x3bbe(%rip), %rdi      # 0x65a4
movl $0x2, %esi
movl $0x1, %edx
movq %rbx, %rcx
callq 0x11c0
movq %rbx, %rdi
callq 0x3ee9
leaq 0x3f73(%rip), %rdi      # 0x697a
movl $0x17, %esi
movl $0x1, %edx
movq %rbx, %rcx
callq 0x11c0
movq (%rsp), %rax
movl 0x18(%rax), %eax
testl %eax, %eax
jle 0x2a88
leaq 0x3f67(%rip), %r14      # 0x6992
xorl %r15d, %r15d
movq (%rsp), %rcx
movq 0x10(%rcx), %rcx
movq (%rcx,%r15,8), %r12
cmpl $0x0, 0x8(%r12)
jle 0x2a7d
xorl %r13d, %r13d
movq (%r12), %rax
movq (%rax,%r13,8), %rbp
movq %rbx, %rdi
callq 0x3ee9
movq (%rbp), %rdx
movl 0x10(%rbp), %ecx
movq %rbx, %rdi
movq %r14, %rsi
xorl %eax, %eax
callq 0x1130
incq %r13
movslq 0x8(%r12), %rax
cmpq %rax, %r13
jl 0x2a45
movq (%rsp), %rax
movl 0x18(%rax), %eax
incq %r15
movslq %eax, %rcx
cmpq %rcx, %r15
jl 0x2a2e
movq %rbx, %rdi
callq 0x3ee9
movl $0xa, %edi
movq %rbx, %rsi
callq 0x10f0
movq %rbx, %rdi
callq 0x3ee9
leaq 0x3f0f(%rip), %rdi      # 0x69bb
movl $0x13, %esi
movl $0x1, %edx
movq %rbx, %rcx
callq 0x11c0
movq (%rsp), %rax
movl 0x18(%rax), %eax
testl %eax, %eax
jle 0x2b2d
leaq 0x3eff(%rip), %r14      # 0x69cf
xorl %r15d, %r15d
movq (%rsp), %rcx
movq 0x10(%rcx), %rcx
movq (%rcx,%r15,8), %r12
cmpl $0x0, 0x8(%r12)
jle 0x2b22
xorl %r13d, %r13d
movq (%r12), %rax
movq (%rax,%r13,8), %rbp
movq %rbx, %rdi
callq 0x3ee9
movq (%rbp), %rdx
movl 0x10(%rbp), %ecx
movq %rbx, %rdi
movq %r14, %rsi
xorl %eax, %eax
callq 0x1130
incq %r13
movslq 0x8(%r12), %rax
cmpq %rax, %r13
jl 0x2aea
movq (%rsp), %rax
movl 0x18(%rax), %eax
incq %r15
movslq %eax, %rcx
cmpq %rcx, %r15
jl 0x2ad3
movq %rbx, %rdi
callq 0x3ee9
leaq 0x3b8d(%rip), %rdi      # 0x66c9
movl $0x2, %esi
movl $0x1, %edx
movq %rbx, %rcx
callq 0x11c0
leaq 0x7627(%rip), %rax      # 0xa17c
decl (%rax)
movq %rbx, %rdi
callq 0x3ee9
movl $0xa, %edi
movq %rbx, %rsi
callq 0x10f0
movq %rbx, %rdi
callq 0x3ee9
leaq 0x3e7a(%rip), %rdi      # 0x69f5
movl $0x19, %esi
movl $0x1, %edx
movq %rbx, %rcx
callq 0x11c0
movq (%rsp), %rax
movl 0x18(%rax), %eax
testl %eax, %eax
jle 0x2bfc
leaq 0x3e70(%rip), %r14      # 0x6a0f
xorl %r15d, %r15d
movq (%rsp), %rcx
movq 0x10(%rcx), %rcx
movq (%rcx,%r15,8), %r12
cmpl $0x0, 0x8(%r12)
jle 0x2bf1
xorl %r13d, %r13d
movq (%r12), %rax
movq (%rax,%r13,8), %rbp
movq %rbx, %rdi
callq 0x3ee9
movq (%rbp), %rdx
movl 0x10(%rbp), %ecx
movq %rbx, %rdi
movq %r14, %rsi
xorl %eax, %eax
callq 0x1130
incq %r13
movslq 0x8(%r12), %rax
cmpq %rax, %r13
jl 0x2bb9
movq (%rsp), %rax
movl 0x18(%rax), %eax
incq %r15
movslq %eax, %rcx
cmpq %rcx, %r15
jl 0x2ba2
movq %rbx, %rdi
callq 0x3ee9
leaq 0x3abe(%rip), %r14      # 0x66c9
movl $0x2, %esi
movl $0x1, %edx
movq %r14, %rdi
movq %rbx, %rcx
callq 0x11c0
leaq 0x7555(%rip), %r15      # 0xa17c
decl (%r15)
movq %rbx, %rdi
callq 0x3ee9
movl $0xa, %edi
movq %rbx, %rsi
callq 0x10f0
movq %rbx, %rdi
callq 0x3ee9
leaq 0x3ddc(%rip), %rdi      # 0x6a2a
movl $0xf, %esi
movl $0x1, %edx
movq %rbx, %rcx
callq 0x11c0
movq %rbx, %rdi
callq 0x3ee9
movl $0xa, %edi
movq %rbx, %rsi
callq 0x10f0
movq %rbx, %rdi
callq 0x3ee9
leaq 0x3db6(%rip), %rdi      # 0x6a3a
movl $0xa, %esi
movl $0x1, %edx
movq %rbx, %rcx
callq 0x11c0
movq %rbx, %rdi
callq 0x3ee9
movl $0x2, %esi
movl $0x1, %edx
movq %r14, %rdi
movq %rbx, %rcx
callq 0x11c0
decl (%r15)
addq $0x38, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x372d(%rip), %rdi      # 0x63f9
xorl %eax, %eax
addq $0x38, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x5138