// File: /workspace/github_cpp_makefile_star2_O2/icemiliang[P]vot/demo/votx.cpp
// Function: main
int main(int argc, char* argv[]) {

    try {
        std::string appName = fs::basename(argv[0]); 
        std::string dmFile, emFile;
        int maxIterP, maxIterH; // Position of centroids & Minimizier H
        double thres, plotScale, learnRate;
        std::string outDir;
        bool verb, debug;

        // Define and parse the program options //
        po::options_description desc("Options");
        desc.add_options()
            ("dirac,d", po::value<std::string>(&dmFile)->required(), 
                "Particles associated with Dirac measures")
            ("empirical,e", po::value<std::string>(&emFile)->required(), 
                "Test points associated with Empirical measures")
            ("iterD,p", po::value<int>(&maxIterP)->default_value(5), 
                "Max iteration for updating Dirac positions. Default is 5.")
            ("iterH,h", po::value<int>(&maxIterH)->default_value(1000), 
                "Max iteration for updating diagram/'H', or size of cells. Default is 1000.")
            ("threshold,t", po::value<double>(&thres)->default_value(1.0e-06), 
                "Threshold for terminating the program. Default is 1e-06")
            ("scale,s", po::value<double>(&plotScale)->default_value(1), 
                "Scale of the output diagram. Default is 1.")
            ("rate,r", po::value<double>(&learnRate)->default_value(0.2), 
                "Learning rate. Setting this parameter means you want to use GD instead of Newton.")
            ("outdir,o", po::value<std::string>(&outDir), 
                "Output directory")
            ("verbose,v", po::value<bool>(&verb)->default_value(false), 
                "Verbose output (both console and files). Default is False.")
            ("debug,b", po::value<bool>(&debug)->default_value(false), 
                "Multiple-point check. Default is False.")
            ("help", "Print help messages");
        po::variables_map vm;
        
        try {
            po::store(po::parse_command_line(argc, argv, desc), vm); // can throw 

            //  --help option  //
            if (vm.count("help") || argc < 2) {
                print_welcome_message();
                std::cout << desc << std::endl;
                return SUCCESS;
            }

            po::notify(vm); // TODO: What does this line do?
        }
        catch(po::required_option& e) {
            std::cerr << "ERROR: " << e.what() << std::endl << std::endl; 
            return ERROR_IN_COMMAND_LINE; 
        }
        catch(po::error& e){
            std::cerr << "ERROR: " << e.what() << std::endl << std::endl;
            std::cerr << desc << std::endl;
            return ERROR_IN_COMMAND_LINE;
        }

        // Displaying paramters // 
        int slashD = dmFile.find_last_of("/\\");
        int slashE = emFile.find_last_of("/\\");
        std::string outPrefix = "D" 
                              + dmFile.substr(slashD + 1, dmFile.length() - 6 - slashD) 
                              + "_E" 
                              + emFile.substr(slashE + 1, emFile.length() - 6 - slashE);
                              
        if (!outDir.empty()) outPrefix = outDir + "/" + outPrefix;

        fs::path dir(outDir.c_str());
        if (!outDir.empty() && !fs::is_directory(outDir)) {
            std::cerr << "Directory not found: " << std::endl;
            std::cerr << "Creating: " << std::endl;
            if (fs::create_directory(dir)) { 
                std::cerr << "Directory created: " << outDir << std::endl; 
            }
            else {
                std::cerr << "Error during creating the directory. "
                          << "Write output in the current directory." << std::endl;  
                outDir.clear();
            }   
        }
        
        std::cout << "Dirac measure file: " << dmFile << std::endl;
        std::cout << "Empirical measure file: " << emFile << std::endl;
        std::cout << "Max iteration for updating centroid positions: " << maxIterP << std::endl;
        std::cout << "Max iteration for updating 'H': " << maxIterH << std::endl;
        std::cout << "Learning rate: " << learnRate << std::endl;
        std::cout << "Threshold for terminating the program: " << thres << std::endl;
        std::cout << "Scale of the output diagram: " << plotScale << std::endl;
        std::cout << "Output prefix: " << outPrefix << std::endl;
        std::cout << "Berbose flag: " << verb << std::endl;
        std::cout << "Debug flag: " << debug << std::endl;

        // ----------------------------//
        // ------- Start program ------//
        // ----------------------------//

        OTX *otx = new OTX();
        std::cout << std::endl;

        otx->import_data(dmFile, emFile);

        std::cout << "--> Setting up parameters... " << std::endl;
        otx->setup(maxIterP, maxIterH, thres, learnRate, verb, plotScale, outPrefix, debug);
        std::cout << std::endl;

        std::cout << "--> Running variational Wasserstein clustering..." << std::endl << std::endl;
        otx->cluster();

    }
    catch(std::exception& e){
        std::cerr << "Unhandled Exception reached the top of main: " 
                  << e.what() << ", application will now exit" << std::endl;
        return ERROR_UNHANDLED_EXCEPTION;
    }

    return SUCCESS;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
subq $0x310, %rsp            # imm = 0x310
movq %rsi, %r14
movl %edi, %ebx
movq (%rsi), %rsi
leaq 0x1b0(%rsp), %rdi
callq 0x87ae
leaq 0x270(%rsp), %rdi
leaq 0x1b0(%rsp), %rsi
callq 0x8762
leaq 0x1b0(%rsp), %rdi
callq 0x7728
leaq 0x100(%rsp), %rax
movq %rax, -0x10(%rax)
andq $0x0, -0x8(%rax)
xorl %ecx, %ecx
leaq 0xe0(%rsp), %rdx
movq %rdx, -0x10(%rdx)
andq $0x0, -0x8(%rdx)
movb %cl, (%rax)
movb %cl, (%rdx)
leaq 0x90(%rsp), %rax
movq %rax, -0x10(%rax)
andq $0x0, -0x8(%rax)
movb %cl, (%rax)
leaq 0x8661(%rip), %rsi      # 0x100aa
leaq 0x1b0(%rsp), %rdi
leaq 0x18(%rsp), %rdx
callq 0x871c
movq 0x11516(%rip), %rax     # 0x18f78
movl (%rax), %edx
movl %edx, %ecx
shrl %ecx
leaq 0x290(%rsp), %rdi
leaq 0x1b0(%rsp), %rsi
callq 0x7460
leaq 0x1b0(%rsp), %rdi
callq 0x7728
leaq 0x290(%rsp), %rdi
callq 0x73a0
movq %rax, 0x1b0(%rsp)
leaq 0xf0(%rsp), %rdi
callq 0x87bb
movb $0x1, 0x8c(%rax)
leaq 0x85f8(%rip), %rsi      # 0x100b2
leaq 0x85f9(%rip), %rcx      # 0x100ba
leaq 0x1b0(%rsp), %rdi
movq %rax, %rdx
callq 0x76c0
movq %rax, %r15
leaq 0xd0(%rsp), %rdi
callq 0x87bb
movb $0x1, 0x8c(%rax)
leaq 0x85f4(%rip), %rsi      # 0x100e3
leaq 0x85f9(%rip), %rcx      # 0x100ef
movq %r15, %rdi
movq %rax, %rdx
callq 0x76c0
movq %rax, %r15
leaq 0x14(%rsp), %rdi
callq 0x87fd
leaq 0x130(%rsp), %rsi
movl $0x5, (%rsi)
movq %rax, %rdi
callq 0x8840
leaq 0x85f3(%rip), %rsi      # 0x1011e
leaq 0x85f4(%rip), %rcx      # 0x10126
movq %r15, %rdi
movq %rax, %rdx
callq 0x76c0
movq %rax, %r15
leaq 0x10(%rsp), %rdi
callq 0x87fd
leaq 0x110(%rsp), %rsi
movl $0x3e8, (%rsi)          # imm = 0x3E8
movq %rax, %rdi
callq 0x8840
leaq 0x85f9(%rip), %rsi      # 0x10160
leaq 0x85fa(%rip), %rcx      # 0x10168
movq %r15, %rdi
movq %rax, %rdx
callq 0x76c0
movq %rax, %r15
leaq 0xb0(%rsp), %rdi
callq 0x88b2
movabsq $0x3eb0c6f7a0b5ed8d, %rcx # imm = 0x3EB0C6F7A0B5ED8D
leaq 0x18(%rsp), %rsi
movq %rcx, (%rsi)
movq %rax, %rdi
callq 0x88f4
leaq 0x8609(%rip), %rsi      # 0x101b3
leaq 0x860e(%rip), %rcx      # 0x101bf
movq %r15, %rdi
movq %rax, %rdx
callq 0x76c0
movq %rax, %r15
leaq 0xa8(%rsp), %rdi
callq 0x88b2
movabsq $0x3ff0000000000000, %rcx # imm = 0x3FF0000000000000
leaq 0x60(%rsp), %rsi
movq %rcx, (%rsi)
movq %rax, %rdi
callq 0x88f4
leaq 0x860a(%rip), %rsi      # 0x101f7
leaq 0x860b(%rip), %rcx      # 0x101ff
movq %r15, %rdi
movq %rax, %rdx
callq 0x76c0
movq %rax, %r15
leaq 0xa0(%rsp), %rdi
callq 0x88b2
movabsq $0x3fc999999999999a, %rcx # imm = 0x3FC999999999999A
leaq 0x40(%rsp), %rsi
movq %rcx, (%rsi)
movq %rax, %rdi
callq 0x88f4
leaq 0x85fa(%rip), %rsi      # 0x1022a
leaq 0x85fa(%rip), %rcx      # 0x10231
movq %r15, %rdi
movq %rax, %rdx
callq 0x76c0
movq %rax, %r15
leaq 0x80(%rsp), %rdi
callq 0x87bb
leaq 0x862a(%rip), %rsi      # 0x10283
leaq 0x862c(%rip), %rcx      # 0x1028c
movq %r15, %rdi
movq %rax, %rdx
callq 0x76c0
movq %rax, %r15
leaq 0xd(%rsp), %rdi
callq 0x8966
leaq 0xf(%rsp), %rsi
movb $0x0, (%rsi)
movq %rax, %rdi
callq 0x89a8
leaq 0x860e(%rip), %rsi      # 0x1029d
leaq 0x8611(%rip), %rcx      # 0x102a7
movq %r15, %rdi
movq %rax, %rdx
callq 0x76c0
movq %rax, %r15
leaq 0xc(%rsp), %rdi
callq 0x8966
leaq 0xe(%rsp), %rsi
movb $0x0, (%rsi)
movq %rax, %rdi
callq 0x89a8
leaq 0x861d(%rip), %rsi      # 0x102e2
leaq 0x861e(%rip), %rcx      # 0x102ea
movq %r15, %rdi
movq %rax, %rdx
callq 0x76c0
leaq 0x8634(%rip), %rsi      # 0x10312
leaq 0x8632(%rip), %rdx      # 0x10317
movq %rax, %rdi
callq 0x7660
leaq 0x1b0(%rsp), %rdi
callq 0x7180
xorps %xmm0, %xmm0
leaq 0x250(%rsp), %r9
movaps %xmm0, (%r9)
movaps %xmm0, 0x10(%r9)
leaq 0x18(%rsp), %rdi
leaq 0x290(%rsp), %rcx
movl %ebx, %esi
movq %r14, %rdx
xorl %r8d, %r8d
callq 0x8a1a
leaq 0x18(%rsp), %rdi
leaq 0x1b0(%rsp), %rsi
xorl %edx, %edx
callq 0x7610
leaq 0x18(%rsp), %rdi
callq 0x8c8a
leaq 0x250(%rsp), %rdi
callq 0x8aca
leaq 0x85b8(%rip), %rsi      # 0x10312
leaq 0x18(%rsp), %rdi
leaq 0x60(%rsp), %rdx
callq 0x871c
leaq 0x1c0(%rsp), %rdi
leaq 0x18(%rsp), %rsi
callq 0x8ada
movq %rax, %r14
leaq 0x18(%rsp), %rdi
callq 0x7728
cmpl $0x2, %ebx
jl 0x7fda
testq %r14, %r14
jne 0x7fda
leaq 0x1b0(%rsp), %rdi
callq 0x7200
leaq 0x8585(%rip), %rbx      # 0x10333
leaq 0xf0(%rsp), %r14
pushq $-0x1
popq %r15
movq %r14, %rdi
movq %rbx, %rsi
movq %r15, %rdx
callq 0x7320
movq %rax, %r12
leaq 0xd0(%rsp), %rdi
movq %rbx, %rsi
movq %r15, %rdx
callq 0x7320
movq %rax, %rbx
leal 0x1(%r12), %eax
movslq %eax, %rdx
movq 0x8(%r14), %rax
movslq %r12d, %rcx
negq %rcx
addq %rax, %rcx
addq $-0x6, %rcx
leaq 0x130(%rsp), %rdi
movq %r14, %rsi
callq 0x7360
leaq 0x8525(%rip), %rsi      # 0x10336
leaq 0x40(%rsp), %rdi
leaq 0x130(%rsp), %rdx
callq 0x8b7a
leaq 0x850e(%rip), %rdx      # 0x10338
leaq 0x60(%rsp), %rdi
leaq 0x40(%rsp), %rsi
callq 0x8b5b
movabsq $0x100000000, %rax      # imm = 0x100000000
movq %rbx, %rdx
shlq $0x20, %rdx
addq %rax, %rdx
sarq $0x20, %rdx
leaq 0xd0(%rsp), %rsi
movq 0x8(%rsi), %rax
movslq %ebx, %rcx
negq %rcx
addq %rax, %rcx
addq $-0x6, %rcx
leaq 0x110(%rsp), %rdi
callq 0x7360
leaq 0x18(%rsp), %rdi
leaq 0x60(%rsp), %rsi
leaq 0x110(%rsp), %rdx
callq 0x8af4
leaq 0x110(%rsp), %rdi
callq 0x7728
leaq 0x60(%rsp), %rdi
callq 0x7728
leaq 0x40(%rsp), %rdi
callq 0x7728
leaq 0x130(%rsp), %rdi
callq 0x7728
cmpq $0x0, 0x88(%rsp)
je 0x7f18
leaq 0x846d(%rip), %rdx      # 0x1033b
leaq 0x40(%rsp), %rdi
leaq 0x80(%rsp), %rsi
callq 0x8bbd
leaq 0x60(%rsp), %rdi
leaq 0x40(%rsp), %rsi
leaq 0x18(%rsp), %rdx
callq 0x8b9e
leaq 0x18(%rsp), %rdi
leaq 0x60(%rsp), %rbx
movq %rbx, %rsi
callq 0x73c0
movq %rbx, %rdi
callq 0x7728
leaq 0x40(%rsp), %rdi
callq 0x7728
movq 0x80(%rsp), %rsi
leaq 0x60(%rsp), %rdi
callq 0x8bf6
cmpq $0x0, 0x88(%rsp)
je 0x8040
leaq 0x40(%rsp), %rdi
leaq 0x80(%rsp), %rsi
callq 0x7450
leaq 0x40(%rsp), %rdi
callq 0x8c03
movl %eax, %ebx
leaq 0x40(%rsp), %rdi
callq 0x7728
testb %bl, %bl
jne 0x8040
movq 0x11070(%rip), %rdi     # 0x18fe0
leaq 0x83c6(%rip), %rsi      # 0x1033d
callq 0x7330
movq %rax, %rdi
callq 0x71b0
movq 0x11055(%rip), %rdi     # 0x18fe0
leaq 0x83c1(%rip), %rsi      # 0x10353
callq 0x7330
movq %rax, %rdi
callq 0x71b0
leaq 0x60(%rsp), %rdi
callq 0x8c26
testb %al, %al
je 0x8002
movq 0x1102c(%rip), %rdi     # 0x18fe0
leaq 0x83a3(%rip), %rsi      # 0x1035e
callq 0x7330
leaq 0x80(%rsp), %rsi
movq %rax, %rdi
callq 0x7300
movq %rax, %rdi
callq 0x71b0
jmp 0x8040
callq 0x799c
movq 0x10fc2(%rip), %rdi     # 0x18fa8
leaq 0x290(%rsp), %rsi
callq 0x70b0
xorl %ebx, %ebx
movq %rax, %rdi
callq 0x71b0
jmp 0x8390
movq 0x10fd7(%rip), %rdi     # 0x18fe0
leaq 0x8362(%rip), %rsi      # 0x10372
callq 0x7330
leaq 0x837c(%rip), %rsi      # 0x10398
movq %rax, %rdi
callq 0x7330
movq %rax, %rdi
callq 0x71b0
andq $0x0, 0x88(%rsp)
movq 0x80(%rsp), %rax
movb $0x0, (%rax)
movq 0x10f61(%rip), %rdi     # 0x18fa8
leaq 0x8371(%rip), %rsi      # 0x103bf
callq 0x7330
leaq 0xf0(%rsp), %rsi
movq %rax, %rdi
callq 0x7300
movq %rax, %rdi
callq 0x71b0
movq 0x10f36(%rip), %rdi     # 0x18fa8
leaq 0x835b(%rip), %rsi      # 0x103d4
callq 0x7330
leaq 0xd0(%rsp), %rsi
movq %rax, %rdi
callq 0x7300
movq %rax, %rdi
callq 0x71b0
movq 0x10f0b(%rip), %rdi     # 0x18fa8
leaq 0x8349(%rip), %rsi      # 0x103ed
callq 0x7330
movl 0x14(%rsp), %esi
movq %rax, %rdi
callq 0x75f0
movq %rax, %rdi
callq 0x71b0
movq 0x10ee4(%rip), %rdi     # 0x18fa8
leaq 0x8352(%rip), %rsi      # 0x1041d
callq 0x7330
movl 0x10(%rsp), %esi
movq %rax, %rdi
callq 0x75f0
movq %rax, %rdi
callq 0x71b0
movq 0x10ebd(%rip), %rdi     # 0x18fa8
leaq 0x834c(%rip), %rsi      # 0x1043e
callq 0x7330
movsd 0xa0(%rsp), %xmm0
movq %rax, %rdi
callq 0x7560
movq %rax, %rdi
callq 0x71b0
movq 0x10e91(%rip), %rdi     # 0x18fa8
leaq 0x8330(%rip), %rsi      # 0x1044e
callq 0x7330
movsd 0xb0(%rsp), %xmm0
movq %rax, %rdi
callq 0x7560
movq %rax, %rdi
callq 0x71b0
movq 0x10e65(%rip), %rdi     # 0x18fa8
leaq 0x832c(%rip), %rsi      # 0x10476
callq 0x7330
movsd 0xa8(%rsp), %xmm0
movq %rax, %rdi
callq 0x7560
movq %rax, %rdi
callq 0x71b0
movq 0x10e39(%rip), %rdi     # 0x18fa8
leaq 0x831e(%rip), %rsi      # 0x10494
callq 0x7330
leaq 0x18(%rsp), %rsi
movq %rax, %rdi
callq 0x7300
movq %rax, %rdi
callq 0x71b0
movq 0x10e11(%rip), %rdi     # 0x18fa8
leaq 0x8306(%rip), %rsi      # 0x104a4
callq 0x7330
movzbl 0xd(%rsp), %esi
movq %rax, %rdi
callq 0x75b0
movq %rax, %rdi
callq 0x71b0
movq 0x10de9(%rip), %rdi     # 0x18fa8
leaq 0x82ed(%rip), %rsi      # 0x104b3
callq 0x7330
movzbl 0xc(%rsp), %esi
movq %rax, %rdi
callq 0x75b0
movq %rax, %rdi
callq 0x71b0
movl $0xa8, %edi
callq 0x7340
movq %rax, %rbx
addq $0x98, %rax
xorps %xmm0, %xmm0
movups %xmm0, 0x50(%rbx)
movups %xmm0, 0x40(%rbx)
movups %xmm0, 0x30(%rbx)
movups %xmm0, 0x20(%rbx)
movups %xmm0, 0x10(%rbx)
movups %xmm0, (%rbx)
movq %rax, 0x88(%rbx)
andq $0x0, 0x90(%rbx)
movb $0x0, 0x98(%rbx)
movq 0x10d7e(%rip), %rdi     # 0x18fa8
callq 0x71b0
leaq 0x190(%rsp), %rdi
leaq 0xf0(%rsp), %rsi
callq 0x7450
leaq 0x170(%rsp), %rdi
leaq 0xd0(%rsp), %rsi
callq 0x7450
leaq 0x190(%rsp), %rsi
leaq 0x170(%rsp), %rdx
movq %rbx, %rdi
callq 0xd7c0
leaq 0x170(%rsp), %rdi
callq 0x7728
leaq 0x190(%rsp), %rdi
callq 0x7728
movq 0x10d16(%rip), %rdi     # 0x18fa8
leaq 0x8227(%rip), %rsi      # 0x104c0
callq 0x7330
movq %rax, %rdi
callq 0x71b0
movl 0x14(%rsp), %ebp
movl 0x10(%rsp), %r14d
movsd 0xb0(%rsp), %xmm0
movsd %xmm0, 0xc8(%rsp)
movsd 0xa0(%rsp), %xmm0
movsd %xmm0, 0xc0(%rsp)
movb 0xd(%rsp), %r15b
movsd 0xa8(%rsp), %xmm0
movsd %xmm0, 0xb8(%rsp)
leaq 0x150(%rsp), %rdi
leaq 0x18(%rsp), %rsi
callq 0x7450
movzbl 0xc(%rsp), %r9d
movzbl %r15b, %ecx
leaq 0x150(%rsp), %r8
movq %rbx, %rdi
movl %ebp, %esi
movl %r14d, %edx
movsd 0xc8(%rsp), %xmm0
movsd 0xc0(%rsp), %xmm1
movsd 0xb8(%rsp), %xmm2
callq 0xd6d0
leaq 0x150(%rsp), %rdi
callq 0x7728
movq 0x10c5e(%rip), %rdi     # 0x18fa8
callq 0x71b0
movq 0x10c52(%rip), %rdi     # 0x18fa8
leaq 0x8181(%rip), %rsi      # 0x104de
callq 0x7330
movq %rax, %rdi
callq 0x71b0
movq %rax, %rdi
callq 0x71b0
movq %rbx, %rdi
callq 0xe1de
leaq 0x60(%rsp), %rdi
callq 0x7728
leaq 0x18(%rsp), %rdi
callq 0x7728
xorl %ebx, %ebx
leaq 0x1b0(%rsp), %rdi
callq 0x8c30
leaq 0x290(%rsp), %rdi
callq 0x8c62
leaq 0x80(%rsp), %rdi
callq 0x7728
leaq 0xd0(%rsp), %rdi
callq 0x7728
leaq 0xf0(%rsp), %rdi
callq 0x7728
leaq 0x270(%rsp), %rdi
callq 0x7728
movl %ebx, %eax
addq $0x310, %rsp            # imm = 0x310
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
movq %rdx, %rbx
movq %rax, %r14
leaq 0x40(%rsp), %rdi
jmp 0x8447
jmp 0x863e
movq %rdx, %rbx
movq %rax, %r14
leaq 0x40(%rsp), %rdi
jmp 0x8649
jmp 0x8451
movq %rdx, %rbx
movq %rax, %r14
leaq 0x150(%rsp), %rdi
jmp 0x8447
movq %rdx, %rbx
movq %rax, %r14
leaq 0x170(%rsp), %rdi
callq 0x7728
jmp 0x843f
movq %rdx, %rbx
movq %rax, %r14
leaq 0x190(%rsp), %rdi
callq 0x7728
jmp 0x8644
movq %rdx, %rbx
movq %rax, %r14
jmp 0x864e
movq %rdx, %rbx
movq %rax, %r14
leaq 0x110(%rsp), %rdi
callq 0x7728
jmp 0x8477
movq %rdx, %rbx
movq %rax, %r14
leaq 0x60(%rsp), %rdi
callq 0x7728
jmp 0x8489
movq %rdx, %rbx
movq %rax, %r14
leaq 0x40(%rsp), %rdi
callq 0x7728
jmp 0x849b
movq %rdx, %rbx
movq %rax, %r14
leaq 0x130(%rsp), %rdi
jmp 0x8653
movq %rdx, %rbx
movq %rax, %r14
jmp 0x8658
movq %rdx, %rbx
movq %rax, %r14
leaq 0x18(%rsp), %rdi
callq 0x7728
jmp 0x853a
jmp 0x8534
movq %rdx, %rbx
movq %rax, %r14
leaq 0x18(%rsp), %rdi
callq 0x8c8a
jmp 0x84df
movq %rdx, %rbx
movq %rax, %r14
leaq 0x250(%rsp), %rdi
callq 0x8aca
jmp 0x853a
jmp 0x8636
movq %rdx, %rbx
movq %rax, %r14
leaq 0x1b0(%rsp), %rdi
callq 0x7728
jmp 0x8672
movq %rdx, %rbx
movq %rax, %r14
jmp 0x8672
movq %rdx, %rbx
movq %rax, %r14
leaq 0x1b0(%rsp), %rdi
jmp 0x86a1
movq %rdx, %rbx
movq %rax, %r14
jmp 0x86a6
movq %rdx, %rbx
movq %rax, %r14
cmpl $0x3, %ebx
jne 0x858b
movq %r14, %rdi
callq 0x7170
movq %rax, %rbx
movq 0x10a8f(%rip), %rdi     # 0x18fe0
leaq 0x7dd3(%rip), %rsi      # 0x1032b
callq 0x7330
movq %rax, %r14
movq (%rbx), %rax
movq %rbx, %rdi
callq *0x10(%rax)
movq %r14, %rdi
movq %rax, %rsi
callq 0x7330
movq %rax, %rdi
callq 0x71b0
movq %rax, %rdi
callq 0x71b0
callq 0x7590
jmp 0x85fa
cmpl $0x2, %ebx
jne 0x8658
movq %r14, %rdi
callq 0x7170
movq %rax, %rbx
movq 0x10a3a(%rip), %rdi     # 0x18fe0
leaq 0x7d7e(%rip), %rsi      # 0x1032b
callq 0x7330
movq %rax, %r14
movq (%rbx), %rax
movq %rbx, %rdi
callq *0x10(%rax)
movq %r14, %rdi
movq %rax, %rsi
callq 0x7330
movq %rax, %rdi
callq 0x71b0
movq %rax, %rdi
callq 0x71b0
movq 0x10a00(%rip), %rdi     # 0x18fe0
leaq 0x290(%rsp), %rsi
callq 0x70b0
movq %rax, %rdi
callq 0x71b0
callq 0x7590
pushq $0x1
popq %rbx
jmp 0x8390
jmp 0x84a8
jmp 0x84a8
movq %rdx, %rbx
movq %rax, %r14
callq 0x7590
jmp 0x8658
movq %rdx, %rbx
movq %rax, %r14
callq 0x7590
jmp 0x8658
jmp 0x8636
jmp 0x8636
jmp 0x8636
jmp 0x8636
jmp 0x8636
jmp 0x8636
jmp 0x8636
jmp 0x863e
movq %rdx, %rbx
movq %rax, %r14
jmp 0x8665
movq %rdx, %rbx
movq %rax, %r14
leaq 0x60(%rsp), %rdi
callq 0x7728
leaq 0x18(%rsp), %rdi
callq 0x7728
leaq 0x1b0(%rsp), %rdi
callq 0x8c30
leaq 0x290(%rsp), %rdi
callq 0x8c62
leaq 0x80(%rsp), %rdi
callq 0x7728
leaq 0xd0(%rsp), %rdi
callq 0x7728
leaq 0xf0(%rsp), %rdi
callq 0x7728
leaq 0x270(%rsp), %rdi
callq 0x7728
cmpl $0x1, %ebx
jne 0x870c
movq %r14, %rdi
callq 0x7170
movq %rax, %rbx
movq 0x10923(%rip), %rdi     # 0x18fe0
leaq 0x7e4c(%rip), %rsi      # 0x10510
callq 0x7330
movq %rax, %r14
movq (%rbx), %rax
movq %rbx, %rdi
callq *0x10(%rax)
movq %r14, %rdi
movq %rax, %rsi
callq 0x7330
leaq 0x7e57(%rip), %rsi      # 0x1053e
movq %rax, %rdi
callq 0x7330
movq %rax, %rdi
callq 0x71b0
callq 0x7590
pushq $0x2
popq %rbx
jmp 0x83de
movq %rax, %r14
callq 0x7590
movq %r14, %rdi
callq 0x7620
movq %rax, %rdi
callq 0x8757