// File: /workspace/github_cpp_makefile_star2_O2/Chrom3D[P]Chrom3D/src/Chrom3D.cpp
// Function: parseArguments(int, char**)
Args parseArguments(int argc, char** argv) {
  string VERSION="1.0.2";
  Args args;
    try {  
    TCLAP::CmdLine cmd("Chrom3D is a 3D genome modeling platform designed to incorporate a versatile set of constraints. For example, Chrom3D can simultaneously incorporate chromosomal interaction constraints (such as Hi-C) and constraints from chromosome association with the nuclear periphery." , ' ', VERSION);

    TCLAP::UnlabeledValueArg<string> nolabel( "filename", "Model Setup File in GTrack format", true, "/dev/null", "Gtrack file"  );
    cmd.add( nolabel );	

    ////////
    /*
    ifstream f(nolabel.getValue().c_str());
    assert(f.good());
    */
    
    TCLAP::ValueArg<string> outfileArg("o","outstruct","Filename of the final, optimized structure in XML format suitable for visualization in Chimera (CMM format). If not specified, stdout will be used",false,"/dev/null","filename");

    TCLAP::ValueArg<uint> seedArg("s","seed","Seed used for randomization (default: 1234)",false,1234,"unsigned integer");

    TCLAP::ValueArg<double> radiusArg("r","radius","Radius of the nucleus in micrometer (default: 5.0)",false,5.0,"floating point number");

    TCLAP::ValueArg<uint> niterArg("n","iterations","Number of iterations (default: 2e+06)",false,2e+06,"unsigned integer");

    TCLAP::ValueArg<double> maxtempArg("T","maxtemp","Starting temperature of simulation (default: 1.0)",false,1.0,"floating point number");

    TCLAP::ValueArg<double> coolrateArg("c","coolrate","Cooling rate of temperature per iteration (default: 0)",false,0,"floating point number");

    TCLAP::ValueArg<double> occupancyArg("y","occupancy","Scale total volume of the model beads relative to the volume of the nucleus. Specified as a value between 0 and 1. (default: no scaling). Recommended value for e.g. human: 0.15.",false,0,"floating point number");

    TCLAP::ValueArg<uint> verboseArg("l","log","Write logging information to stderr every <number> iteration. This number must be between 0 and the total number of iterations (default: 0, not verbose)", false,0,"unsigned integer");

    TCLAP::ValueArg<string> modelnameArg("m","modelname","Name of model for the given run. (default: chrom3d_model)", false, "chrom3d_model" ,"string");

    vector<string> allowed;
    allowed.push_back("crankshaft");
    allowed.push_back("microcrank");
    allowed.push_back("armwiggle");
    allowed.push_back("armrotate");
    allowed.push_back("translate");
    allowed.push_back("rotate");

    TCLAP::ValuesConstraint<string> allowedVals( allowed );    
    TCLAP::MultiArg<string> excludeArg("e", "exclude", "Chromatin moves to exclude from the simulations", false, &allowedVals);


    //TCLAP::SwitchArg centerSwitch("","center","Add constraints such that all beads are pushed towards the center of the nucleus", false);
    TCLAP::SwitchArg nucleusSwitch("","nucleus","Add constraints such that all beads are pushed towards the inside of the nucleus", false);

    //TCLAP::SwitchArg pdbSwitch("","pdb","Create PDB files in addition to the CMM in a separate folder (modelname will be used to create the folder)", false);

    TCLAP::SwitchArg printfilesSwitch("","printmodels","Print intermediate models in CMM format (at intervals specified by -l/--log) with names consisting of the model name (specified by -m/--modelname) and the iteration number.", false);


    //////
    cmd.add( printfilesSwitch );
    cmd.add( excludeArg );
    //cmd.add( centerSwitch );
    cmd.add( nucleusSwitch );
    //cmd.add( pdbSwitch );

    cmd.add( verboseArg );
    cmd.add( seedArg );
    cmd.add( occupancyArg );
    cmd.add( radiusArg );
    cmd.add( coolrateArg );
    cmd.add( maxtempArg );
    cmd.add( niterArg );
    cmd.add( modelnameArg );

    cmd.add( outfileArg );

    /////////////////
    
    cmd.parse( argc, argv );
    /// Add arguments to res:
    args.fileName = nolabel.getValue();
    args.outFile = outfileArg.getValue();
    args.seed = seedArg.getValue();
    args.radius = radiusArg.getValue();
    args.nIter = niterArg.getValue();
    args.maxtemp = maxtempArg.getValue();
    args.coolrate = coolrateArg.getValue();
    args.verbose = verboseArg.getValue();
    args.occupancy = occupancyArg.getValue();
    args.modelName = modelnameArg.getValue();

    //args.centerConstraint = centerSwitch.getValue();
    args.nucleusConstraint = nucleusSwitch.getValue();

      
    args.excludeMoves = excludeArg.getValue();

    args.printStructures = printfilesSwitch.getValue();
    //args.pdbStructures = pdbSwitch.getValue();
      
    if(args.coolrate < 0.0 or args.coolrate > 1.0) throw std::range_error("Error: Cooling rate (-c) should be between 0 and 1");
    if(args.occupancy < 0.0 or args.occupancy > 1.0) throw std::range_error("Error: Occupancy (-y) should be between 0 and 1");
    if(args.verbose > args.nIter) throw std::range_error("Error: Verbose (-l) should be between 0 and number of iterations given (-n)");
    
  } catch (TCLAP::ArgException &e) { 
    std::cerr << "error: " << e.error() << " for arg " << e.argId() << std::endl; 
  }

    return(args);
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
subq $0xdb0, %rsp            # imm = 0xDB0
movq %rdx, %r14
movl %esi, %ebp
movq %rdi, %rbx
leaq 0xb0fc(%rip), %rsi      # 0x22306
leaq 0x488(%rsp), %rdi
leaq 0xaf0(%rsp), %rdx
callq 0xcaa6
movq %rbx, %rdi
callq 0x19cf6
leaq 0xb0de(%rip), %rsi      # 0x2230c
leaq 0xaf0(%rsp), %rdi
leaq 0x9e0(%rsp), %rdx
callq 0xcaa6
leaq 0x820(%rsp), %rdi
leaq 0xaf0(%rsp), %rsi
pushq $0x20
popq %rdx
leaq 0x488(%rsp), %rcx
pushq $0x1
popq %r8
callq 0x19d44
leaq 0xaf0(%rsp), %rdi
callq 0x66d0
leaq 0xb1a1(%rip), %rsi      # 0x2241c
leaq 0x9e0(%rsp), %rdi
leaq 0x900(%rsp), %rdx
callq 0xcaa6
leaq 0xb18e(%rip), %rsi      # 0x22425
leaq 0x270(%rsp), %rdi
leaq 0x4a8(%rsp), %rdx
callq 0xcaa6
leaq 0xb194(%rip), %rsi      # 0x22447
leaq 0x468(%rsp), %rdi
leaq 0x588(%rsp), %rdx
callq 0xcaa6
leaq 0xb182(%rip), %rsi      # 0x22451
leaq 0x78(%rsp), %rdi
leaq 0x740(%rsp), %rdx
callq 0xcaa6
andq $0x0, 0x8(%rsp)
andl $0x0, (%rsp)
leaq 0xaf0(%rsp), %rdi
leaq 0x9e0(%rsp), %rsi
leaq 0x270(%rsp), %rdx
pushq $0x1
popq %rcx
leaq 0x468(%rsp), %r8
leaq 0x78(%rsp), %r9
callq 0x19eb0
leaq 0x78(%rsp), %rdi
callq 0x66d0
leaq 0x468(%rsp), %rdi
callq 0x66d0
leaq 0x270(%rsp), %rdi
callq 0x66d0
leaq 0x9e0(%rsp), %rdi
callq 0x66d0
leaq 0x820(%rsp), %rdi
movq (%rdi), %rax
leaq 0xaf0(%rsp), %rsi
callq *0x18(%rax)
leaq 0xb0f7(%rip), %rsi      # 0x2245d
leaq 0x270(%rsp), %rdi
leaq 0x588(%rsp), %rdx
callq 0xcaa6
leaq 0xb0dd(%rip), %rsi      # 0x2245f
leaq 0x78(%rsp), %rdi
leaq 0x740(%rsp), %rdx
callq 0xcaa6
leaq 0xb0ce(%rip), %rsi      # 0x22469
leaq 0x900(%rsp), %rdi
leaq 0xcd8(%rsp), %rdx
callq 0xcaa6
leaq 0xb090(%rip), %rsi      # 0x22447
leaq 0x448(%rsp), %rdi
leaq 0xc00(%rsp), %rdx
callq 0xcaa6
leaq 0xb049(%rip), %rsi      # 0x2241c
leaq 0x4a8(%rsp), %r15
leaq 0x668(%rsp), %rdx
movq %r15, %rdi
callq 0xcaa6
andq $0x0, 0x8(%rsp)
movq %r15, (%rsp)
leaq 0x9e0(%rsp), %rdi
leaq 0x270(%rsp), %rsi
leaq 0x78(%rsp), %rdx
leaq 0x900(%rsp), %rcx
leaq 0x448(%rsp), %r9
xorl %r8d, %r8d
callq 0x19fca
leaq 0x4a8(%rsp), %rdi
callq 0x66d0
leaq 0x448(%rsp), %rdi
callq 0x66d0
leaq 0x900(%rsp), %rdi
callq 0x66d0
leaq 0x78(%rsp), %rdi
callq 0x66d0
leaq 0x270(%rsp), %rdi
callq 0x66d0
leaq 0xa585(%rip), %rsi      # 0x219ec
leaq 0x270(%rsp), %rdi
leaq 0x588(%rsp), %rdx
callq 0xcaa6
leaq 0xb079(%rip), %rsi      # 0x224fc
leaq 0x78(%rsp), %rdi
leaq 0x740(%rsp), %rdx
callq 0xcaa6
leaq 0xb065(%rip), %rsi      # 0x22501
leaq 0x900(%rsp), %rdi
leaq 0xc00(%rsp), %rdx
callq 0xcaa6
leaq 0xb075(%rip), %rsi      # 0x2252d
leaq 0x4a8(%rsp), %r15
leaq 0x668(%rsp), %rdx
movq %r15, %rdi
callq 0xcaa6
andq $0x0, 0x8(%rsp)
movq %r15, (%rsp)
leaq 0xcd8(%rsp), %rdi
leaq 0x270(%rsp), %rsi
leaq 0x78(%rsp), %rdx
leaq 0x900(%rsp), %rcx
xorl %r8d, %r8d
movl $0x4d2, %r9d            # imm = 0x4D2
callq 0x1a06a
leaq 0x4a8(%rsp), %rdi
callq 0x66d0
leaq 0x900(%rsp), %rdi
callq 0x66d0
leaq 0x78(%rsp), %rdi
callq 0x66d0
leaq 0x270(%rsp), %rdi
callq 0x66d0
leaq 0xb048(%rip), %rsi      # 0x22585
leaq 0x270(%rsp), %rdi
leaq 0x740(%rsp), %rdx
callq 0xcaa6
leaq 0xa49b(%rip), %rsi      # 0x219f4
leaq 0x78(%rsp), %rdi
leaq 0xc00(%rsp), %rdx
callq 0xcaa6
leaq 0xafcc(%rip), %rsi      # 0x2253e
leaq 0x4a8(%rsp), %rdi
leaq 0x668(%rsp), %rdx
callq 0xcaa6
leaq 0xafe3(%rip), %rsi      # 0x22571
leaq 0x588(%rsp), %rdi
leaq 0x188(%rsp), %rdx
callq 0xcaa6
andq $0x0, (%rsp)
leaq 0x900(%rsp), %rdi
leaq 0x270(%rsp), %rsi
leaq 0x78(%rsp), %rdx
leaq 0x4a8(%rsp), %rcx
movsd 0xad0b(%rip), %xmm0     # 0x222d8
leaq 0x588(%rsp), %r9
xorl %r8d, %r8d
callq 0x1a0d8
leaq 0x588(%rsp), %rdi
callq 0x66d0
leaq 0x4a8(%rsp), %rdi
callq 0x66d0
leaq 0x78(%rsp), %rdi
callq 0x66d0
leaq 0x270(%rsp), %rdi
callq 0x66d0
leaq 0x9ae1(%rip), %rsi      # 0x210f6
leaq 0x270(%rsp), %rdi
leaq 0x740(%rsp), %rdx
callq 0xcaa6
leaq 0xaf56(%rip), %rsi      # 0x22587
leaq 0x78(%rsp), %rdi
leaq 0x668(%rsp), %rdx
callq 0xcaa6
leaq 0xaf48(%rip), %rsi      # 0x22592
leaq 0x4a8(%rsp), %rdi
leaq 0x188(%rsp), %rdx
callq 0xcaa6
leaq 0xaec7(%rip), %rsi      # 0x2252d
leaq 0x588(%rsp), %r15
leaq 0x380(%rsp), %rdx
movq %r15, %rdi
callq 0xcaa6
andq $0x0, 0x8(%rsp)
movq %r15, (%rsp)
leaq 0xc00(%rsp), %rdi
leaq 0x270(%rsp), %rsi
leaq 0x78(%rsp), %rdx
leaq 0x4a8(%rsp), %rcx
xorl %r8d, %r8d
movl $0x1e8480, %r9d         # imm = 0x1E8480
callq 0x1a06a
leaq 0x588(%rsp), %rdi
callq 0x66d0
leaq 0x4a8(%rsp), %rdi
callq 0x66d0
leaq 0x78(%rsp), %rdi
callq 0x66d0
leaq 0x270(%rsp), %rdi
callq 0x66d0
leaq 0xa234(%rip), %rsi      # 0x2191f
leaq 0x270(%rsp), %rdi
leaq 0x668(%rsp), %rdx
callq 0xcaa6
leaq 0xaeb1(%rip), %rsi      # 0x225b8
leaq 0x78(%rsp), %rdi
leaq 0x188(%rsp), %rdx
callq 0xcaa6
leaq 0xaea0(%rip), %rsi      # 0x225c0
leaq 0x588(%rsp), %rdi
leaq 0x380(%rsp), %rdx
callq 0xcaa6
leaq 0xae35(%rip), %rsi      # 0x22571
leaq 0x740(%rsp), %rdi
leaq 0x230(%rsp), %rdx
callq 0xcaa6
andq $0x0, (%rsp)
leaq 0x4a8(%rsp), %rdi
leaq 0x270(%rsp), %rsi
leaq 0x78(%rsp), %rdx
leaq 0x588(%rsp), %rcx
movsd 0x888d(%rip), %xmm0     # 0x20008
leaq 0x740(%rsp), %r9
xorl %r8d, %r8d
callq 0x1a0d8
leaq 0x740(%rsp), %rdi
callq 0x66d0
leaq 0x588(%rsp), %rdi
callq 0x66d0
leaq 0x78(%rsp), %rdi
callq 0x66d0
leaq 0x270(%rsp), %rdi
callq 0x66d0
leaq 0xae2f(%rip), %rsi      # 0x225f2
leaq 0x270(%rsp), %rdi
leaq 0x188(%rsp), %rdx
callq 0xcaa6
leaq 0xae15(%rip), %rsi      # 0x225f4
leaq 0x78(%rsp), %rdi
leaq 0x380(%rsp), %rdx
callq 0xcaa6
leaq 0xae05(%rip), %rsi      # 0x225fd
leaq 0x740(%rsp), %rdi
leaq 0x230(%rsp), %rdx
callq 0xcaa6
leaq 0xad5d(%rip), %rsi      # 0x22571
leaq 0x668(%rsp), %rdi
leaq 0x38(%rsp), %rdx
callq 0xcaa6
andq $0x0, (%rsp)
leaq 0x588(%rsp), %rdi
leaq 0x270(%rsp), %rsi
leaq 0x78(%rsp), %rdx
leaq 0x740(%rsp), %rcx
leaq 0x668(%rsp), %r9
xorpd %xmm0, %xmm0
xorl %r8d, %r8d
callq 0x1a0d8
leaq 0x668(%rsp), %rdi
callq 0x66d0
leaq 0x740(%rsp), %rdi
callq 0x66d0
leaq 0x78(%rsp), %rdi
callq 0x66d0
leaq 0x270(%rsp), %rdi
callq 0x66d0
leaq 0xada8(%rip), %rsi      # 0x2263c
leaq 0x270(%rsp), %rdi
leaq 0x380(%rsp), %rdx
callq 0xcaa6
leaq 0xad84(%rip), %rsi      # 0x22634
leaq 0x78(%rsp), %rdi
leaq 0x230(%rsp), %rdx
callq 0xcaa6
leaq 0xad75(%rip), %rsi      # 0x2263e
leaq 0x668(%rsp), %rdi
leaq 0x38(%rsp), %rdx
callq 0xcaa6
leaq 0xac8f(%rip), %rsi      # 0x22571
leaq 0x188(%rsp), %rdi
leaq 0x58(%rsp), %rdx
callq 0xcaa6
andq $0x0, (%rsp)
leaq 0x740(%rsp), %rdi
leaq 0x270(%rsp), %rsi
leaq 0x78(%rsp), %rdx
leaq 0x668(%rsp), %rcx
leaq 0x188(%rsp), %r9
xorpd %xmm0, %xmm0
xorl %r8d, %r8d
callq 0x1a0d8
leaq 0x188(%rsp), %rdi
callq 0x66d0
leaq 0x668(%rsp), %rdi
callq 0x66d0
leaq 0x78(%rsp), %rdi
callq 0x66d0
leaq 0x270(%rsp), %rdi
callq 0x66d0
leaq 0xb195(%rip), %rsi      # 0x22af7
leaq 0x270(%rsp), %rdi
leaq 0x230(%rsp), %rdx
callq 0xcaa6
leaq 0xad72(%rip), %rsi      # 0x226f0
leaq 0x78(%rsp), %rdi
leaq 0x38(%rsp), %rdx
callq 0xcaa6
leaq 0xad60(%rip), %rsi      # 0x226f4
leaq 0x188(%rsp), %rdi
leaq 0x58(%rsp), %rdx
callq 0xcaa6
leaq 0xab80(%rip), %rsi      # 0x2252d
leaq 0x380(%rsp), %r15
leaq 0x168(%rsp), %rdx
movq %r15, %rdi
callq 0xcaa6
andq $0x0, 0x8(%rsp)
movq %r15, (%rsp)
leaq 0x668(%rsp), %rdi
leaq 0x270(%rsp), %rsi
leaq 0x78(%rsp), %rdx
leaq 0x188(%rsp), %rcx
xorl %r8d, %r8d
xorl %r9d, %r9d
callq 0x1a06a
leaq 0x380(%rsp), %rdi
callq 0x66d0
leaq 0x188(%rsp), %rdi
callq 0x66d0
leaq 0x78(%rsp), %rdi
callq 0x66d0
leaq 0x270(%rsp), %rdi
callq 0x66d0
leaq 0xb02a(%rip), %rsi      # 0x22a59
leaq 0x78(%rsp), %rdi
leaq 0x38(%rsp), %rdx
callq 0xcaa6
leaq 0xad48(%rip), %rsi      # 0x2278d
leaq 0x188(%rsp), %rdi
leaq 0x58(%rsp), %rdx
callq 0xcaa6
leaq 0xad39(%rip), %rsi      # 0x22797
leaq 0x380(%rsp), %rdi
leaq 0x168(%rsp), %rdx
callq 0xcaa6
leaq 0xad57(%rip), %rsi      # 0x227d1
leaq 0x428(%rsp), %rdi
leaq 0x20(%rsp), %rdx
callq 0xcaa6
leaq 0xad4c(%rip), %rsi      # 0x227df
leaq 0x230(%rsp), %r15
leaq 0x1d(%rsp), %rdx
movq %r15, %rdi
callq 0xcaa6
andq $0x0, 0x8(%rsp)
movq %r15, (%rsp)
leaq 0x270(%rsp), %rdi
leaq 0x78(%rsp), %rsi
leaq 0x188(%rsp), %rdx
leaq 0x380(%rsp), %rcx
leaq 0x428(%rsp), %r9
xorl %r8d, %r8d
callq 0x19fca
leaq 0x230(%rsp), %rdi
callq 0x66d0
leaq 0x428(%rsp), %rdi
callq 0x66d0
leaq 0x380(%rsp), %rdi
callq 0x66d0
leaq 0x188(%rsp), %rdi
callq 0x66d0
leaq 0x78(%rsp), %rdi
callq 0x66d0
xorpd %xmm0, %xmm0
movapd %xmm0, 0x20(%rsp)
andq $0x0, 0x30(%rsp)
leaq 0xacb2(%rip), %rsi      # 0x227e6
leaq 0x78(%rsp), %rdi
leaq 0x188(%rsp), %rdx
callq 0xcaa6
leaq 0x20(%rsp), %rdi
leaq 0x78(%rsp), %rsi
callq 0x1f172
leaq 0x78(%rsp), %rdi
callq 0x66d0
leaq 0xac8b(%rip), %rsi      # 0x227f1
leaq 0x78(%rsp), %rdi
leaq 0x188(%rsp), %rdx
callq 0xcaa6
leaq 0x20(%rsp), %rdi
leaq 0x78(%rsp), %rsi
callq 0x1f172
leaq 0x78(%rsp), %rdi
callq 0x66d0
leaq 0xac64(%rip), %rsi      # 0x227fc
leaq 0x78(%rsp), %rdi
leaq 0x188(%rsp), %rdx
callq 0xcaa6
leaq 0x20(%rsp), %rdi
leaq 0x78(%rsp), %rsi
callq 0x1f172
leaq 0x78(%rsp), %rdi
callq 0x66d0
leaq 0xac3c(%rip), %rsi      # 0x22806
leaq 0x78(%rsp), %rdi
leaq 0x188(%rsp), %rdx
callq 0xcaa6
leaq 0x20(%rsp), %rdi
leaq 0x78(%rsp), %rsi
callq 0x1f172
leaq 0x78(%rsp), %rdi
callq 0x66d0
leaq 0xac14(%rip), %rsi      # 0x22810
leaq 0x78(%rsp), %rdi
leaq 0x188(%rsp), %rdx
callq 0xcaa6
leaq 0x20(%rsp), %rdi
leaq 0x78(%rsp), %rsi
callq 0x1f172
leaq 0x78(%rsp), %rdi
callq 0x66d0
leaq 0xabdb(%rip), %rsi      # 0x22809
leaq 0x78(%rsp), %rdi
leaq 0x188(%rsp), %rdx
callq 0xcaa6
leaq 0x20(%rsp), %rdi
leaq 0x78(%rsp), %rsi
callq 0x1f172
leaq 0x78(%rsp), %rdi
callq 0x66d0
leaq 0x230(%rsp), %rdi
leaq 0x20(%rsp), %rsi
callq 0x1a150
leaq 0xabae(%rip), %rsi      # 0x22820
leaq 0x188(%rsp), %rdi
leaq 0x58(%rsp), %rdx
callq 0xcaa6
leaq 0xab8f(%rip), %rsi      # 0x2281a
leaq 0x380(%rsp), %rdi
leaq 0x168(%rsp), %rdx
callq 0xcaa6
leaq 0xab7b(%rip), %rsi      # 0x22822
leaq 0x38(%rsp), %rdi
leaq 0x1d(%rsp), %rdx
callq 0xcaa6
andq $0x0, (%rsp)
leaq 0x78(%rsp), %rdi
leaq 0x188(%rsp), %rsi
leaq 0x380(%rsp), %rdx
leaq 0x38(%rsp), %rcx
leaq 0x230(%rsp), %r9
xorl %r8d, %r8d
callq 0x1a26c
leaq 0x38(%rsp), %rdi
callq 0x66d0
leaq 0x380(%rsp), %rdi
callq 0x66d0
leaq 0x188(%rsp), %rdi
callq 0x66d0
leaq 0xb16b(%rip), %rsi      # 0x22e7b
leaq 0x380(%rsp), %rdi
leaq 0x168(%rsp), %rdx
callq 0xcaa6
leaq 0xab6f(%rip), %rsi      # 0x2289b
leaq 0x38(%rsp), %rdi
leaq 0x1d(%rsp), %rdx
callq 0xcaa6
leaq 0xab10(%rip), %rsi      # 0x22852
leaq 0x58(%rsp), %rdi
leaq 0x1e(%rsp), %rdx
callq 0xcaa6
leaq 0x188(%rsp), %rdi
leaq 0x380(%rsp), %rsi
leaq 0x38(%rsp), %rdx
leaq 0x58(%rsp), %rcx
xorl %r8d, %r8d
xorl %r9d, %r9d
callq 0x1a2fa
leaq 0x58(%rsp), %rdi
callq 0x66d0
leaq 0x38(%rsp), %rdi
callq 0x66d0
leaq 0x380(%rsp), %rdi
callq 0x66d0
leaq 0xb0dd(%rip), %rsi      # 0x22e7b
leaq 0x38(%rsp), %rdi
leaq 0x1d(%rsp), %rdx
callq 0xcaa6
leaq 0xaaef(%rip), %rsi      # 0x228a3
leaq 0x58(%rsp), %rdi
leaq 0x1e(%rsp), %rdx
callq 0xcaa6
leaq 0xaae5(%rip), %rsi      # 0x228af
leaq 0x168(%rsp), %rdi
leaq 0x1f(%rsp), %rdx
callq 0xcaa6
leaq 0x380(%rsp), %rdi
leaq 0x38(%rsp), %rsi
leaq 0x58(%rsp), %rdx
leaq 0x168(%rsp), %rcx
xorl %r8d, %r8d
xorl %r9d, %r9d
callq 0x1a2fa
leaq 0x168(%rsp), %rdi
callq 0x66d0
leaq 0x58(%rsp), %rdi
callq 0x66d0
leaq 0x38(%rsp), %rdi
callq 0x66d0
leaq 0x820(%rsp), %rdi
movq (%rdi), %rax
leaq 0x380(%rsp), %rsi
callq *0x18(%rax)
leaq 0x820(%rsp), %rdi
movq (%rdi), %rax
leaq 0x78(%rsp), %rsi
callq *0x18(%rax)
leaq 0x820(%rsp), %rdi
movq (%rdi), %rax
leaq 0x188(%rsp), %rsi
callq *0x18(%rax)
leaq 0x820(%rsp), %rdi
movq (%rdi), %rax
leaq 0x668(%rsp), %rsi
callq *0x18(%rax)
leaq 0x820(%rsp), %rdi
movq (%rdi), %rax
leaq 0xcd8(%rsp), %rsi
callq *0x18(%rax)
leaq 0x820(%rsp), %rdi
movq (%rdi), %rax
leaq 0x740(%rsp), %rsi
callq *0x18(%rax)
leaq 0x820(%rsp), %rdi
movq (%rdi), %rax
leaq 0x900(%rsp), %rsi
callq *0x18(%rax)
leaq 0x820(%rsp), %rdi
movq (%rdi), %rax
leaq 0x588(%rsp), %rsi
callq *0x18(%rax)
leaq 0x820(%rsp), %rdi
movq (%rdi), %rax
leaq 0x4a8(%rsp), %rsi
callq *0x18(%rax)
leaq 0x820(%rsp), %rdi
movq (%rdi), %rax
leaq 0xc00(%rsp), %rsi
callq *0x18(%rax)
leaq 0x820(%rsp), %rdi
movq (%rdi), %rax
leaq 0x270(%rsp), %rsi
callq *0x18(%rax)
leaq 0x820(%rsp), %rdi
movq (%rdi), %rax
leaq 0x9e0(%rsp), %rsi
callq *0x18(%rax)
leaq 0x820(%rsp), %rdi
movl %ebp, %esi
movq %r14, %rdx
callq 0x1a334
leaq 0xb98(%rsp), %rsi
movq %rbx, %rdi
callq 0x6200
leaq 0xa88(%rsp), %rsi
leaq 0x20(%rbx), %rdi
callq 0x6200
movl 0xd7c(%rsp), %eax
movl %eax, 0x40(%rbx)
movsd 0x9a8(%rsp), %xmm0
movsd %xmm0, 0x48(%rbx)
movl 0xca4(%rsp), %eax
movl %eax, 0x50(%rbx)
movsd 0x550(%rsp), %xmm0
movsd %xmm0, 0x58(%rbx)
movsd 0x630(%rsp), %xmm0
movsd %xmm0, 0x60(%rbx)
movl 0x70c(%rsp), %eax
movl %eax, 0x70(%rbx)
movsd 0x7e8(%rsp), %xmm0
movsd %xmm0, 0x68(%rbx)
leaq 0x318(%rsp), %rsi
leaq 0x78(%rbx), %rdi
callq 0x6200
movb 0x22b(%rsp), %al
movb %al, 0xb1(%rbx)
leaq 0x120(%rsp), %rsi
leaq 0x98(%rbx), %rdi
callq 0x1a3ec
movb 0x423(%rsp), %al
movb %al, 0xb2(%rbx)
movsd 0x60(%rbx), %xmm0
xorpd %xmm1, %xmm1
ucomisd %xmm0, %xmm1
ja 0x18123
ucomisd 0x7ffe(%rip), %xmm0     # 0x20008
ja 0x18123
movsd 0x68(%rbx), %xmm0
ucomisd %xmm0, %xmm1
ja 0x1813f
ucomisd 0x7fe1(%rip), %xmm0     # 0x20008
ja 0x1813f
movl 0x70(%rbx), %eax
cmpl 0x50(%rbx), %eax
ja 0x1815b
leaq 0x380(%rsp), %rdi
callq 0x1af04
leaq 0x188(%rsp), %rdi
callq 0x1af04
leaq 0x78(%rsp), %rdi
callq 0x1a4b6
leaq 0x230(%rsp), %rdi
callq 0x1a4e6
leaq 0x20(%rsp), %rdi
callq 0x7f2a
leaq 0x270(%rsp), %rdi
callq 0x1a55a
leaq 0x668(%rsp), %rdi
callq 0x1a512
leaq 0x740(%rsp), %rdi
callq 0x1a536
leaq 0x588(%rsp), %rdi
callq 0x1a536
leaq 0x4a8(%rsp), %rdi
callq 0x1a536
leaq 0xc00(%rsp), %rdi
callq 0x1a512
leaq 0x900(%rsp), %rdi
callq 0x1a536
leaq 0xcd8(%rsp), %rdi
callq 0x1a512
leaq 0x9e0(%rsp), %rdi
callq 0x1a55a
leaq 0xaf0(%rsp), %rdi
callq 0x1a55a
leaq 0x820(%rsp), %rdi
callq 0x19c52
leaq 0x488(%rsp), %rdi
callq 0x66d0
movq %rbx, %rax
addq $0xdb0, %rsp            # imm = 0xDB0
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
pushq $0x10
popq %rdi
callq 0x61e0
movq %rax, %r12
leaq 0xa827(%rip), %rsi      # 0x2295c
movq %rax, %rdi
callq 0x6590
jmp 0x18175
pushq $0x10
popq %rdi
callq 0x61e0
movq %rax, %r12
leaq 0xa83e(%rip), %rsi      # 0x2298f
movq %rax, %rdi
callq 0x6590
jmp 0x18175
pushq $0x10
popq %rdi
callq 0x61e0
movq %rax, %r12
leaq 0xa852(%rip), %rsi      # 0x229bf
movq %rax, %rdi
callq 0x6590
movq 0x19e34(%rip), %rsi     # 0x31fb0
movq 0x19dd5(%rip), %rdx     # 0x31f58
movq %r12, %rdi
callq 0x6580
jmp 0x1818f
jmp 0x1818f
movq %rdx, %r14
movq %rax, %r15
movq %r12, %rdi
callq 0x62b0
jmp 0x186c6
movq %rdx, %r14
movq %rax, %r15
leaq 0x168(%rsp), %rdi
callq 0x66d0
jmp 0x181bd
movq %rdx, %r14
movq %rax, %r15
leaq 0x58(%rsp), %rdi
callq 0x66d0
jmp 0x181cf
movq %rdx, %r14
movq %rax, %r15
leaq 0x38(%rsp), %rdi
callq 0x66d0
jmp 0x186d3
movq %rdx, %r14
movq %rax, %r15
jmp 0x186d3
movq %rdx, %r14
movq %rax, %r15
leaq 0x58(%rsp), %rdi
callq 0x66d0
jmp 0x18201
movq %rdx, %r14
movq %rax, %r15
leaq 0x38(%rsp), %rdi
callq 0x66d0
jmp 0x18213
movq %rdx, %r14
movq %rax, %r15
leaq 0x380(%rsp), %rdi
callq 0x66d0
jmp 0x186e0
movq %rdx, %r14
movq %rax, %r15
jmp 0x186e0
movq %rdx, %r14
movq %rax, %r15
leaq 0x38(%rsp), %rdi
callq 0x66d0
jmp 0x18248
movq %rdx, %r14
movq %rax, %r15
leaq 0x380(%rsp), %rdi
callq 0x66d0
jmp 0x1825d
movq %rdx, %r14
movq %rax, %r15
leaq 0x188(%rsp), %rdi
callq 0x66d0
jmp 0x186ea
movq %rdx, %r14
movq %rax, %r15
jmp 0x186ea
jmp 0x182a5
jmp 0x18290
jmp 0x182a5
jmp 0x18290
jmp 0x182a5
jmp 0x18290
jmp 0x182a5
jmp 0x18290
jmp 0x182a5
jmp 0x18290
jmp 0x182a5
movq %rdx, %r14
movq %rax, %r15
leaq 0x78(%rsp), %rdi
callq 0x66d0
jmp 0x186f7
movq %rdx, %r14
movq %rax, %r15
jmp 0x186f7
movq %rdx, %r14
movq %rax, %r15
leaq 0x230(%rsp), %rdi
callq 0x66d0
jmp 0x182cb
movq %rdx, %r14
movq %rax, %r15
leaq 0x428(%rsp), %rdi
callq 0x66d0
jmp 0x182e0
movq %rdx, %r14
movq %rax, %r15
leaq 0x380(%rsp), %rdi
callq 0x66d0
jmp 0x182f5
movq %rdx, %r14
movq %rax, %r15
leaq 0x188(%rsp), %rdi
callq 0x66d0
jmp 0x1830a
movq %rdx, %r14
movq %rax, %r15
leaq 0x78(%rsp), %rdi
callq 0x66d0
jmp 0x1870e
movq %rdx, %r14
movq %rax, %r15
jmp 0x1870e
movq %rdx, %r14
movq %rax, %r15
leaq 0x380(%rsp), %rdi
callq 0x66d0
jmp 0x1833f
movq %rdx, %r14
movq %rax, %r15
leaq 0x188(%rsp), %rdi
callq 0x66d0
jmp 0x18354
movq %rdx, %r14
movq %rax, %r15
leaq 0x78(%rsp), %rdi
callq 0x66d0
jmp 0x18366
movq %rdx, %r14
movq %rax, %r15
leaq 0x270(%rsp), %rdi
callq 0x66d0
jmp 0x1871b
movq %rdx, %r14
movq %rax, %r15
jmp 0x1871b
movq %rdx, %r14
movq %rax, %r15
leaq 0x188(%rsp), %rdi
callq 0x66d0
jmp 0x1839e
movq %rdx, %r14
movq %rax, %r15
leaq 0x668(%rsp), %rdi
callq 0x66d0
jmp 0x183b3
movq %rdx, %r14
movq %rax, %r15
leaq 0x78(%rsp), %rdi
callq 0x66d0
jmp 0x183c5
movq %rdx, %r14
movq %rax, %r15
leaq 0x270(%rsp), %rdi
callq 0x66d0
jmp 0x18728
movq %rdx, %r14
movq %rax, %r15
jmp 0x18728
movq %rdx, %r14
movq %rax, %r15
leaq 0x668(%rsp), %rdi
callq 0x66d0
jmp 0x183fd
movq %rdx, %r14
movq %rax, %r15
leaq 0x740(%rsp), %rdi
callq 0x66d0
jmp 0x18412
movq %rdx, %r14
movq %rax, %r15
leaq 0x78(%rsp), %rdi
callq 0x66d0
jmp 0x18424
movq %rdx, %r14
movq %rax, %r15
leaq 0x270(%rsp), %rdi
callq 0x66d0
jmp 0x18735
movq %rdx, %r14
movq %rax, %r15
jmp 0x18735
movq %rdx, %r14
movq %rax, %r15
leaq 0x740(%rsp), %rdi
callq 0x66d0
jmp 0x1845c
movq %rdx, %r14
movq %rax, %r15
leaq 0x588(%rsp), %rdi
callq 0x66d0
jmp 0x18471
movq %rdx, %r14
movq %rax, %r15
leaq 0x78(%rsp), %rdi
callq 0x66d0
jmp 0x18483
movq %rdx, %r14
movq %rax, %r15
leaq 0x270(%rsp), %rdi
callq 0x66d0
jmp 0x18742
movq %rdx, %r14
movq %rax, %r15
jmp 0x18742
movq %rdx, %r14
movq %rax, %r15
leaq 0x588(%rsp), %rdi
callq 0x66d0
jmp 0x184bb
movq %rdx, %r14
movq %rax, %r15
leaq 0x4a8(%rsp), %rdi
callq 0x66d0
jmp 0x184d0
movq %rdx, %r14
movq %rax, %r15
leaq 0x78(%rsp), %rdi
callq 0x66d0
jmp 0x184e2
movq %rdx, %r14
movq %rax, %r15
leaq 0x270(%rsp), %rdi
callq 0x66d0
jmp 0x1874f
movq %rdx, %r14
movq %rax, %r15
jmp 0x1874f
movq %rdx, %r14
movq %rax, %r15
leaq 0x588(%rsp), %rdi
callq 0x66d0
jmp 0x1851a
movq %rdx, %r14
movq %rax, %r15
leaq 0x4a8(%rsp), %rdi
callq 0x66d0
jmp 0x1852f
movq %rdx, %r14
movq %rax, %r15
leaq 0x78(%rsp), %rdi
callq 0x66d0
jmp 0x18541
movq %rdx, %r14
movq %rax, %r15
leaq 0x270(%rsp), %rdi
callq 0x66d0
jmp 0x1875c
movq %rdx, %r14
movq %rax, %r15
jmp 0x1875c
movq %rdx, %r14
movq %rax, %r15
leaq 0x4a8(%rsp), %rdi
callq 0x66d0
jmp 0x18579
movq %rdx, %r14
movq %rax, %r15
leaq 0x900(%rsp), %rdi
callq 0x66d0
jmp 0x1858e
movq %rdx, %r14
movq %rax, %r15
leaq 0x78(%rsp), %rdi
callq 0x66d0
jmp 0x185a0
movq %rdx, %r14
movq %rax, %r15
leaq 0x270(%rsp), %rdi
callq 0x66d0
jmp 0x18769
movq %rdx, %r14
movq %rax, %r15
jmp 0x18769
movq %rdx, %r14
movq %rax, %r15
leaq 0x4a8(%rsp), %rdi
callq 0x66d0
jmp 0x185d8
movq %rdx, %r14
movq %rax, %r15
leaq 0x448(%rsp), %rdi
callq 0x66d0
jmp 0x185ed
movq %rdx, %r14
movq %rax, %r15
leaq 0x900(%rsp), %rdi
callq 0x66d0
jmp 0x18602
movq %rdx, %r14
movq %rax, %r15
leaq 0x78(%rsp), %rdi
callq 0x66d0
jmp 0x18614
movq %rdx, %r14
movq %rax, %r15
leaq 0x270(%rsp), %rdi
callq 0x66d0
jmp 0x18776
jmp 0x18628
movq %rdx, %r14
movq %rax, %r15
jmp 0x18776
movq %rdx, %r14
movq %rax, %r15
leaq 0x78(%rsp), %rdi
callq 0x66d0
jmp 0x1864b
movq %rdx, %r14
movq %rax, %r15
leaq 0x468(%rsp), %rdi
callq 0x66d0
jmp 0x18660
movq %rdx, %r14
movq %rax, %r15
leaq 0x270(%rsp), %rdi
callq 0x66d0
jmp 0x18675
movq %rdx, %r14
movq %rax, %r15
leaq 0x9e0(%rsp), %rdi
callq 0x66d0
jmp 0x18783
movq %rdx, %r14
movq %rax, %r15
jmp 0x18783
movq %rdx, %r14
movq %rax, %r15
leaq 0xaf0(%rsp), %rdi
callq 0x66d0
jmp 0x18790
movq %rdx, %r14
movq %rax, %r15
jmp 0x18790
movq %rax, %r15
movq %r15, %rdi
callq 0x65d0
movq %rdx, %r14
movq %rax, %r15
leaq 0x380(%rsp), %rdi
callq 0x1af04
leaq 0x188(%rsp), %rdi
callq 0x1af04
leaq 0x78(%rsp), %rdi
callq 0x1a4b6
leaq 0x230(%rsp), %rdi
callq 0x1a4e6
leaq 0x20(%rsp), %rdi
callq 0x7f2a
leaq 0x270(%rsp), %rdi
callq 0x1a55a
leaq 0x668(%rsp), %rdi
callq 0x1a512
leaq 0x740(%rsp), %rdi
callq 0x1a536
leaq 0x588(%rsp), %rdi
callq 0x1a536
leaq 0x4a8(%rsp), %rdi
callq 0x1a536
leaq 0xc00(%rsp), %rdi
callq 0x1a512
leaq 0x900(%rsp), %rdi
callq 0x1a536
leaq 0xcd8(%rsp), %rdi
callq 0x1a512
leaq 0x9e0(%rsp), %rdi
callq 0x1a55a
leaq 0xaf0(%rsp), %rdi
callq 0x1a55a
leaq 0x820(%rsp), %rdi
callq 0x19c52
cmpl $0x1, %r14d
jne 0x1886f
movq %r15, %rdi
callq 0x6180
movq %rax, %r14
movq 0x19834(%rip), %rdi     # 0x31fe0
leaq 0xa258(%rip), %rsi      # 0x22a0b
callq 0x6330
movq %rax, %r15
leaq 0x8(%r14), %rsi
leaq 0xaf0(%rsp), %rdi
callq 0x6430
leaq 0xaf0(%rsp), %rsi
movq %r15, %rdi
callq 0x6320
leaq 0xa230(%rip), %rsi      # 0x22a13
movq %rax, %rdi
callq 0x6330
movq %rax, %r15
leaq 0x9e0(%rsp), %rdi
movq %r14, %rsi
callq 0x1a596
leaq 0x9e0(%rsp), %rsi
movq %r15, %rdi
callq 0x6320
movq %rax, %rdi
callq 0x61d0
leaq 0x9e0(%rsp), %rdi
callq 0x66d0
leaq 0xaf0(%rsp), %rdi
callq 0x66d0
callq 0x6520
jmp 0x18103
movq %rax, %r15
jmp 0x1886f
jmp 0x1885a
jmp 0x18843
movq %rax, %r15
jmp 0x1886a
movq %rax, %r15
leaq 0x9e0(%rsp), %rdi
callq 0x66d0
jmp 0x1885d
movq %rax, %r15
leaq 0xaf0(%rsp), %rdi
callq 0x66d0
callq 0x6520
movq %rbx, %rdi
callq 0x1a5ea
leaq 0x488(%rsp), %rdi
callq 0x66d0
jmp 0x186b8
movq %rax, %rdi
callq 0x8029