// File: maplechori[P]stata-reader-writer/main.cpp
// Function: main
int main(int argc, char **argv)
{
  namespace po = boost::program_options;
  Context *ctx = NULL;

  try
  {
    po::options_description desc("General options");
    desc.add_options()
    ("help", "produce help message")
    ("stata-file", po::value< string >(), "stata input file")
    ;

    po::options_description db_export("Database options");
    db_export.add_options()
    ("db-type,d", po::value< string >(), "select database type [sqlite]")
    ("connection-string,c", po::value< string >(), "connection string" )
    ;

    po::positional_options_description p;
    p.add("stata-file", -1);

    po::positional_options_description db;
    db.add("db-type", 1).add("connection-string", 2);
    
    po::options_description all("Allowed options");
    all.add(desc).add(db_export);
    
    po::variables_map args;
    
    po::store (po::command_line_parser(argc, argv).options(all).positional(p).positional(db)
    .style (po::command_line_style::default_style | po::command_line_style::allow_long_disguise)
    .run (), args);

    po::notify(args);

    if (args.count("help") || !args.count("stata-file"))
    {
      cout << "Usage: " << PROGRAM_NAME << " [options] <stata file>\n";
      cout << all << endl;
      return 0;
    }

    ifstream stfs(args["stata-file"].as< string >().c_str(), ios::in | ios::binary);
    std::string stata((std::istreambuf_iterator<char>(stfs)), std::istreambuf_iterator<char>());
    ctx = new Context((char *)stata.c_str(), stata.length());

    if (ctx != NULL) {
      ctx->advance();
    }

    
 
    if (args.count("db-type"))
    {
      DatabaseTypes db_type = SQLITE;

      if (!args.count("connection-string"))
      {
        cout << "Connection string required" << endl;
        return 0;     
      }
     
      if (args["db-type"].as< string >() == "sqlite")
      {
        db_type = SQLITE;
      }
      else
      {
        cout << "Database type not supported" << endl;
        return 0;
      }
    
      cout << "Exporting to " << args["connection-string"].as< string >().c_str() << endl;
      ctx->exportToDB( db_type, (char *)args["connection-string"].as< string >().c_str()); 
      return 1;
       
        
      
    }
    else
    {
        // Show the metadata of the file and exit 
         cout << "Information on Stata file: " << args["stata-file"].as< string >() << endl;
         cout << ctx->hdr.showHeader() << endl;
         return 1;
    }

  }
  catch(std::exception& e) {
      cout << e.what() << "\n";
  }
    

  
  

  //  ctx->exportToDB((char *)"export_context.db");
  

  
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x9d0, %rsp            # imm = 0x9D0
movl $0x0, -0x4(%rbp)
movl %edi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq $0x0, -0x18(%rbp)
leaq -0xb9(%rbp), %rdi
movq %rdi, -0x7c8(%rbp)
callq 0x87d0
movq -0x7c8(%rbp), %rdx
leaq 0x18157(%rip), %rsi     # 0x21029
leaq -0xb8(%rbp), %rdi
callq 0xa840
jmp 0x8ee0
movq 0x2a099(%rip), %rax     # 0x32f80
movl (%rax), %edx
movl %edx, %ecx
shrl %ecx
leaq -0x98(%rbp), %rdi
leaq -0xb8(%rbp), %rsi
callq 0x8620
jmp 0x8f02
leaq -0xb8(%rbp), %rdi
callq 0x8280
leaq -0xb9(%rbp), %rdi
callq 0x84a0
leaq -0x98(%rbp), %rdi
callq 0x8530
movq %rax, -0x7d0(%rbp)
jmp 0x8f2f
movq -0x7d0(%rbp), %rax
movq %rax, -0xd8(%rbp)
leaq 0x180f5(%rip), %rsi     # 0x21039
leaq 0x180f3(%rip), %rdx     # 0x2103e
leaq -0xd8(%rbp), %rdi
callq 0x8810
movq %rax, -0x7d8(%rbp)
jmp 0x8f60
callq 0xa8f0
movq %rax, -0x7e0(%rbp)
jmp 0x8f6e
movq -0x7e0(%rbp), %rdx
movq -0x7d8(%rbp), %rdi
leaq 0x180d0(%rip), %rsi     # 0x21053
leaq 0x180d4(%rip), %rcx     # 0x2105e
callq 0x8840
jmp 0x8f91
leaq -0x179(%rbp), %rdi
movq %rdi, -0x7e8(%rbp)
callq 0x87d0
movq -0x7e8(%rbp), %rdx
leaq 0x180bd(%rip), %rsi     # 0x2106f
leaq -0x178(%rbp), %rdi
callq 0xa840
jmp 0x8fc0
movq 0x29fb9(%rip), %rax     # 0x32f80
movl (%rax), %edx
movl %edx, %ecx
shrl %ecx
leaq -0x158(%rbp), %rdi
leaq -0x178(%rbp), %rsi
callq 0x8620
jmp 0x8fe2
leaq -0x178(%rbp), %rdi
callq 0x8280
leaq -0x179(%rbp), %rdi
callq 0x84a0
leaq -0x158(%rbp), %rdi
callq 0x8530
movq %rax, -0x7f0(%rbp)
jmp 0x900f
movq -0x7f0(%rbp), %rax
movq %rax, -0x188(%rbp)
callq 0xa8f0
movq %rax, -0x7f8(%rbp)
jmp 0x902b
movq -0x7f8(%rbp), %rdx
leaq 0x18047(%rip), %rsi     # 0x21080
leaq 0x1804a(%rip), %rcx     # 0x2108a
leaq -0x188(%rbp), %rdi
callq 0x8840
movq %rax, -0x800(%rbp)
jmp 0x9055
callq 0xa8f0
movq %rax, -0x808(%rbp)
jmp 0x9063
movq -0x808(%rbp), %rdx
movq -0x800(%rbp), %rdi
leaq 0x18030(%rip), %rsi     # 0x210a8
leaq 0x1803d(%rip), %rcx     # 0x210bc
callq 0x8840
jmp 0x9086
leaq -0x1c0(%rbp), %rdi
callq 0x85a0
jmp 0x9094
leaq 0x17fb8(%rip), %rsi     # 0x21053
leaq -0x1c0(%rbp), %rdi
movl $0xffffffff, %edx       # imm = 0xFFFFFFFF
callq 0x84b0
jmp 0x90ae
leaq -0x1f8(%rbp), %rdi
callq 0x85a0
jmp 0x90bc
leaq 0x1800b(%rip), %rsi     # 0x210ce
leaq -0x1f8(%rbp), %rdi
movl $0x1, %edx
callq 0x84b0
movq %rax, -0x810(%rbp)
jmp 0x90dd
movq -0x810(%rbp), %rdi
leaq 0x17feb(%rip), %rsi     # 0x210d6
movl $0x2, %edx
callq 0x84b0
jmp 0x90f7
leaq -0x299(%rbp), %rdi
movq %rdi, -0x818(%rbp)
callq 0x87d0
movq -0x818(%rbp), %rdx
leaq 0x17fd0(%rip), %rsi     # 0x210e8
leaq -0x298(%rbp), %rdi
callq 0xa840
jmp 0x9126
movq 0x29e53(%rip), %rax     # 0x32f80
movl (%rax), %edx
movl %edx, %ecx
shrl %ecx
leaq -0x278(%rbp), %rdi
leaq -0x298(%rbp), %rsi
callq 0x8620
jmp 0x9148
leaq -0x298(%rbp), %rdi
callq 0x8280
leaq -0x299(%rbp), %rdi
callq 0x84a0
leaq -0x278(%rbp), %rdi
leaq -0x98(%rbp), %rsi
callq 0x8460
movq %rax, -0x820(%rbp)
jmp 0x917c
movq -0x820(%rbp), %rdi
leaq -0x158(%rbp), %rsi
callq 0x8460
jmp 0x9191
leaq -0x340(%rbp), %rdi
callq 0x81a0
jmp 0x919f
movl -0x8(%rbp), %esi
movq -0x10(%rbp), %rdx
leaq -0x3e0(%rbp), %rdi
callq 0xa900
jmp 0x91b4
leaq -0x3e0(%rbp), %rdi
leaq -0x278(%rbp), %rsi
callq 0xaa20
movq %rax, -0x828(%rbp)
jmp 0x91d0
movq -0x828(%rbp), %rdi
leaq -0x1c0(%rbp), %rsi
callq 0xaa60
movq %rax, -0x830(%rbp)
jmp 0x91ec
movq -0x830(%rbp), %rdi
leaq -0x1f8(%rbp), %rsi
callq 0xaa60
movq %rax, -0x838(%rbp)
jmp 0x9208
movq -0x838(%rbp), %rdi
movl $0x13f7, %esi           # imm = 0x13F7
callq 0xaa90
movq %rax, -0x840(%rbp)
jmp 0x9222
movq -0x840(%rbp), %rsi
leaq -0x368(%rbp), %rdi
callq 0xaac0
jmp 0x9237
leaq -0x368(%rbp), %rdi
leaq -0x340(%rbp), %rsi
xorl %edx, %edx
callq 0x87b0
jmp 0x924e
leaq -0x368(%rbp), %rdi
callq 0xab80
leaq -0x3e0(%rbp), %rdi
callq 0xaba0
leaq -0x340(%rbp), %rdi
callq 0x8260
jmp 0x9274
leaq -0x330(%rbp), %rax
movq %rax, -0x850(%rbp)
leaq -0x401(%rbp), %rdi
movq %rdi, -0x848(%rbp)
callq 0x87d0
movq -0x848(%rbp), %rdx
movb $0x0, -0x42a(%rbp)
movb $0x0, -0x42b(%rbp)
leaq 0x17d88(%rip), %rsi     # 0x21039
leaq -0x400(%rbp), %rdi
callq 0xa840
jmp 0x92bf
movq -0x850(%rbp), %rdi
leaq -0x400(%rbp), %rsi
callq 0xabc0
movq %rax, -0x858(%rbp)
jmp 0x92db
movq -0x858(%rbp), %rcx
movb $0x1, %al
cmpq $0x0, %rcx
movb %al, -0x859(%rbp)
jne 0x936d
leaq -0x330(%rbp), %rax
movq %rax, -0x870(%rbp)
leaq -0x429(%rbp), %rdi
movq %rdi, -0x868(%rbp)
callq 0x87d0
movq -0x868(%rbp), %rdx
movb $0x1, -0x42a(%rbp)
leaq 0x17d2d(%rip), %rsi     # 0x21053
leaq -0x428(%rbp), %rdi
callq 0xa840
jmp 0x9334
movq -0x870(%rbp), %rdi
movb $0x1, -0x42b(%rbp)
leaq -0x428(%rbp), %rsi
callq 0xabc0
movq %rax, -0x878(%rbp)
jmp 0x9357
movq -0x878(%rbp), %rax
cmpq $0x0, %rax
setne %al
xorb $-0x1, %al
movb %al, -0x859(%rbp)
movb -0x859(%rbp), %al
movb %al, -0x879(%rbp)
testb $0x1, -0x42b(%rbp)
jne 0x9384
jmp 0x9390
leaq -0x428(%rbp), %rdi
callq 0x8280
testb $0x1, -0x42a(%rbp)
jne 0x939b
jmp 0x93a7
leaq -0x429(%rbp), %rdi
callq 0x84a0
leaq -0x400(%rbp), %rdi
callq 0x8280
leaq -0x401(%rbp), %rdi
callq 0x84a0
movb -0x879(%rbp), %al
testb $0x1, %al
jne 0x93ce
jmp 0x9695
movq 0x29beb(%rip), %rdi     # 0x32fc0
leaq 0x17d1c(%rip), %rsi     # 0x210f8
callq 0x8420
movq %rax, -0x888(%rbp)
jmp 0x93ea
movq -0x888(%rbp), %rdi
leaq 0x17d08(%rip), %rsi     # 0x21100
callq 0x8420
movq %rax, -0x890(%rbp)
jmp 0x9406
movq -0x890(%rbp), %rdi
leaq 0x17cfc(%rip), %rsi     # 0x21110
callq 0x8420
jmp 0x941b
movq 0x29b9e(%rip), %rdi     # 0x32fc0
leaq -0x278(%rbp), %rsi
callq 0x80a0
movq %rax, -0x898(%rbp)
jmp 0x9437
movq -0x898(%rbp), %rdi
movq 0x29b33(%rip), %rsi     # 0x32f78
callq 0x8480
jmp 0x944c
movl $0x0, -0x4(%rbp)
movl $0x1, -0x430(%rbp)
jmp 0x9fdc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc8(%rbp)
movl %eax, -0xcc(%rbp)
jmp 0x9494
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc8(%rbp)
movl %eax, -0xcc(%rbp)
leaq -0xb8(%rbp), %rdi
callq 0x8280
leaq -0xb9(%rbp), %rdi
callq 0x84a0
jmp 0xa071
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc8(%rbp)
movl %eax, -0xcc(%rbp)
jmp 0xa065
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc8(%rbp)
movl %eax, -0xcc(%rbp)
jmp 0x94ee
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc8(%rbp)
movl %eax, -0xcc(%rbp)
leaq -0x178(%rbp), %rdi
callq 0x8280
leaq -0x179(%rbp), %rdi
callq 0x84a0
jmp 0xa065
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc8(%rbp)
movl %eax, -0xcc(%rbp)
jmp 0xa059
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc8(%rbp)
movl %eax, -0xcc(%rbp)
jmp 0xa04d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc8(%rbp)
movl %eax, -0xcc(%rbp)
jmp 0xa041
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc8(%rbp)
movl %eax, -0xcc(%rbp)
jmp 0x9576
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc8(%rbp)
movl %eax, -0xcc(%rbp)
leaq -0x298(%rbp), %rdi
callq 0x8280
leaq -0x299(%rbp), %rdi
callq 0x84a0
jmp 0xa041
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc8(%rbp)
movl %eax, -0xcc(%rbp)
jmp 0xa035
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc8(%rbp)
movl %eax, -0xcc(%rbp)
jmp 0xa029
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc8(%rbp)
movl %eax, -0xcc(%rbp)
jmp 0x95e7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc8(%rbp)
movl %eax, -0xcc(%rbp)
leaq -0x368(%rbp), %rdi
callq 0xab80
leaq -0x3e0(%rbp), %rdi
callq 0xaba0
jmp 0xa029
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc8(%rbp)
movl %eax, -0xcc(%rbp)
jmp 0x9684
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc8(%rbp)
movl %eax, -0xcc(%rbp)
jmp 0x9678
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc8(%rbp)
movl %eax, -0xcc(%rbp)
jmp 0x965f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc8(%rbp)
movl %eax, -0xcc(%rbp)
testb $0x1, -0x42b(%rbp)
jne 0x9651
jmp 0x965d
leaq -0x428(%rbp), %rdi
callq 0x8280
jmp 0x965f
testb $0x1, -0x42a(%rbp)
jne 0x966a
jmp 0x9676
leaq -0x429(%rbp), %rdi
callq 0x84a0
jmp 0x9678
leaq -0x400(%rbp), %rdi
callq 0x8280
leaq -0x401(%rbp), %rdi
callq 0x84a0
jmp 0xa029
leaq -0x659(%rbp), %rdi
movq %rdi, -0x8a0(%rbp)
callq 0x87d0
movq -0x8a0(%rbp), %rdx
leaq 0x1799d(%rip), %rsi     # 0x21053
leaq -0x658(%rbp), %rdi
callq 0xa840
jmp 0x96c4
leaq -0x340(%rbp), %rdi
leaq -0x658(%rbp), %rsi
callq 0xac20
movq %rax, -0x8a8(%rbp)
jmp 0x96e0
movq -0x8a8(%rbp), %rdi
callq 0xac50
movq %rax, -0x8b0(%rbp)
jmp 0x96f5
movq -0x8b0(%rbp), %rdi
callq 0x8190
movq %rax, -0x8c0(%rbp)
movl $0x8, %edi
movl $0x4, %esi
callq 0xac70
movl %eax, -0x8b4(%rbp)
jmp 0x971f
movl -0x8b4(%rbp), %edx
movq -0x8c0(%rbp), %rsi
leaq -0x638(%rbp), %rdi
callq 0x8800
jmp 0x973a
leaq -0x658(%rbp), %rdi
callq 0x8280
leaq -0x659(%rbp), %rdi
callq 0x84a0
leaq -0x690(%rbp), %rdi
leaq -0x638(%rbp), %rsi
callq 0xac90
leaq -0x6a0(%rbp), %rdi
callq 0xacf0
leaq -0x6a1(%rbp), %rdi
movq %rdi, -0x8c8(%rbp)
callq 0x87d0
movq -0x8c8(%rbp), %r9
movq -0x690(%rbp), %rsi
movl -0x688(%rbp), %edx
movq -0x6a0(%rbp), %rcx
movl -0x698(%rbp), %r8d
leaq -0x680(%rbp), %rdi
callq 0xad20
jmp 0x97b4
leaq -0x6a1(%rbp), %rdi
callq 0x84a0
movl $0x118, %edi            # imm = 0x118
callq 0x8430
movq %rax, -0x8d0(%rbp)
jmp 0x97d3
leaq -0x680(%rbp), %rdi
movq %rdi, -0x8e0(%rbp)
callq 0x8190
movq -0x8e0(%rbp), %rdi
movq %rax, -0x8d8(%rbp)
callq 0x86b0
movq -0x8d0(%rbp), %rdi
movq -0x8d8(%rbp), %rsi
movl %eax, %edx
callq 0x14ed0
jmp 0x9810
movq -0x8d0(%rbp), %rax
movq %rax, -0x18(%rbp)
cmpq $0x0, -0x18(%rbp)
je 0x98db
movq -0x18(%rbp), %rdi
callq 0x15460
jmp 0x9831
jmp 0x98db
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc8(%rbp)
movl %eax, -0xcc(%rbp)
jmp 0x9868
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc8(%rbp)
movl %eax, -0xcc(%rbp)
leaq -0x658(%rbp), %rdi
callq 0x8280
leaq -0x659(%rbp), %rdi
callq 0x84a0
jmp 0xa029
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc8(%rbp)
movl %eax, -0xcc(%rbp)
leaq -0x6a1(%rbp), %rdi
callq 0x84a0
jmp 0x9fce
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc8(%rbp)
movl %eax, -0xcc(%rbp)
jmp 0x9fc2
movq -0x8d0(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc8(%rbp)
movl %eax, -0xcc(%rbp)
movl $0x118, %esi            # imm = 0x118
callq 0x8440
jmp 0x9fc2
leaq -0x330(%rbp), %rax
movq %rax, -0x8f0(%rbp)
leaq -0x6c9(%rbp), %rdi
movq %rdi, -0x8e8(%rbp)
callq 0x87d0
movq -0x8e8(%rbp), %rdx
leaq 0x177c4(%rip), %rsi     # 0x210ce
leaq -0x6c8(%rbp), %rdi
callq 0xa840
jmp 0x9918
movq -0x8f0(%rbp), %rdi
leaq -0x6c8(%rbp), %rsi
callq 0xabc0
movq %rax, -0x8f8(%rbp)
jmp 0x9934
leaq -0x6c8(%rbp), %rdi
callq 0x8280
leaq -0x6c9(%rbp), %rdi
callq 0x84a0
movq -0x8f8(%rbp), %rax
cmpq $0x0, %rax
je 0x9e1d
movl $0x0, -0x6d0(%rbp)
leaq -0x330(%rbp), %rax
movq %rax, -0x908(%rbp)
leaq -0x6f1(%rbp), %rdi
movq %rdi, -0x900(%rbp)
callq 0x87d0
movq -0x900(%rbp), %rdx
leaq 0x17740(%rip), %rsi     # 0x210d6
leaq -0x6f0(%rbp), %rdi
callq 0xa840
jmp 0x99a4
movq -0x908(%rbp), %rdi
leaq -0x6f0(%rbp), %rsi
callq 0xabc0
movq %rax, -0x910(%rbp)
jmp 0x99c0
movq -0x910(%rbp), %rax
cmpq $0x0, %rax
setne %al
xorb $-0x1, %al
movb %al, -0x911(%rbp)
leaq -0x6f0(%rbp), %rdi
callq 0x8280
leaq -0x6f1(%rbp), %rdi
callq 0x84a0
movb -0x911(%rbp), %al
testb $0x1, %al
jne 0x99fd
jmp 0x9aca
movq 0x295bc(%rip), %rdi     # 0x32fc0
leaq 0x1771e(%rip), %rsi     # 0x21129
callq 0x8420
movq %rax, -0x920(%rbp)
jmp 0x9a19
movq -0x920(%rbp), %rdi
movq 0x29551(%rip), %rsi     # 0x32f78
callq 0x8480
jmp 0x9a2e
movl $0x0, -0x4(%rbp)
movl $0x1, -0x430(%rbp)
jmp 0x9fa8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc8(%rbp)
movl %eax, -0xcc(%rbp)
jmp 0x9a76
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc8(%rbp)
movl %eax, -0xcc(%rbp)
leaq -0x6c8(%rbp), %rdi
callq 0x8280
leaq -0x6c9(%rbp), %rdi
callq 0x84a0
jmp 0x9fc2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc8(%rbp)
movl %eax, -0xcc(%rbp)
jmp 0x9ab9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc8(%rbp)
movl %eax, -0xcc(%rbp)
leaq -0x6f0(%rbp), %rdi
callq 0x8280
leaq -0x6f1(%rbp), %rdi
callq 0x84a0
jmp 0x9fc2
leaq -0x719(%rbp), %rdi
movq %rdi, -0x928(%rbp)
callq 0x87d0
movq -0x928(%rbp), %rdx
leaq 0x175e3(%rip), %rsi     # 0x210ce
leaq -0x718(%rbp), %rdi
callq 0xa840
jmp 0x9af9
leaq -0x340(%rbp), %rdi
leaq -0x718(%rbp), %rsi
callq 0xac20
movq %rax, -0x930(%rbp)
jmp 0x9b15
movq -0x930(%rbp), %rdi
callq 0xac50
movq %rax, -0x938(%rbp)
jmp 0x9b2a
movq -0x938(%rbp), %rdi
leaq 0x1760c(%rip), %rsi     # 0x21144
callq 0xadb0
movb %al, -0x939(%rbp)
jmp 0x9b45
leaq -0x718(%rbp), %rdi
callq 0x8280
leaq -0x719(%rbp), %rdi
callq 0x84a0
movb -0x939(%rbp), %al
testb $0x1, %al
jne 0x9b69
jmp 0x9bbb
movl $0x0, -0x6d0(%rbp)
jmp 0x9c02
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc8(%rbp)
movl %eax, -0xcc(%rbp)
jmp 0x9baa
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc8(%rbp)
movl %eax, -0xcc(%rbp)
leaq -0x718(%rbp), %rdi
callq 0x8280
leaq -0x719(%rbp), %rdi
callq 0x84a0
jmp 0x9fc2
movq 0x293fe(%rip), %rdi     # 0x32fc0
leaq 0x17582(%rip), %rsi     # 0x2114b
callq 0x8420
movq %rax, -0x948(%rbp)
jmp 0x9bd7
movq -0x948(%rbp), %rdi
movq 0x29393(%rip), %rsi     # 0x32f78
callq 0x8480
jmp 0x9bec
movl $0x0, -0x4(%rbp)
movl $0x1, -0x430(%rbp)
jmp 0x9fa8
movq 0x293b7(%rip), %rdi     # 0x32fc0
leaq 0x17557(%rip), %rsi     # 0x21167
callq 0x8420
movq %rax, -0x950(%rbp)
jmp 0x9c1e
leaq -0x741(%rbp), %rdi
movq %rdi, -0x958(%rbp)
callq 0x87d0
movq -0x958(%rbp), %rdx
leaq 0x17497(%rip), %rsi     # 0x210d6
leaq -0x740(%rbp), %rdi
callq 0xa840
jmp 0x9c4d
leaq -0x340(%rbp), %rdi
leaq -0x740(%rbp), %rsi
callq 0xac20
movq %rax, -0x960(%rbp)
jmp 0x9c69
movq -0x960(%rbp), %rdi
callq 0xac50
movq %rax, -0x968(%rbp)
jmp 0x9c7e
movq -0x968(%rbp), %rdi
callq 0x8190
movq -0x950(%rbp), %rdi
movq %rax, %rsi
callq 0x8420
movq %rax, -0x970(%rbp)
jmp 0x9ca2
movq -0x970(%rbp), %rdi
movq 0x292c8(%rip), %rsi     # 0x32f78
callq 0x8480
jmp 0x9cb7
leaq -0x740(%rbp), %rdi
callq 0x8280
leaq -0x741(%rbp), %rdi
callq 0x84a0
movq -0x18(%rbp), %rax
movq %rax, -0x988(%rbp)
movl -0x6d0(%rbp), %eax
movl %eax, -0x97c(%rbp)
leaq -0x769(%rbp), %rdi
movq %rdi, -0x978(%rbp)
callq 0x87d0
movq -0x978(%rbp), %rdx
leaq 0x173cf(%rip), %rsi     # 0x210d6
leaq -0x768(%rbp), %rdi
callq 0xa840
jmp 0x9d15
leaq -0x340(%rbp), %rdi
leaq -0x768(%rbp), %rsi
callq 0xac20
movq %rax, -0x990(%rbp)
jmp 0x9d31
movq -0x990(%rbp), %rdi
callq 0xac50
movq %rax, -0x998(%rbp)
jmp 0x9d46
movq -0x998(%rbp), %rdi
callq 0x8190
movq -0x988(%rbp), %rdi
movl -0x97c(%rbp), %esi
movq %rax, %rdx
callq 0x15110
jmp 0x9d69
leaq -0x768(%rbp), %rdi
callq 0x8280
leaq -0x769(%rbp), %rdi
callq 0x84a0
movl $0x1, -0x4(%rbp)
movl $0x1, -0x430(%rbp)
jmp 0x9fa8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc8(%rbp)
movl %eax, -0xcc(%rbp)
jmp 0x9dc9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc8(%rbp)
movl %eax, -0xcc(%rbp)
leaq -0x740(%rbp), %rdi
callq 0x8280
leaq -0x741(%rbp), %rdi
callq 0x84a0
jmp 0x9fc2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc8(%rbp)
movl %eax, -0xcc(%rbp)
jmp 0x9e0c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc8(%rbp)
movl %eax, -0xcc(%rbp)
leaq -0x768(%rbp), %rdi
callq 0x8280
leaq -0x769(%rbp), %rdi
callq 0x84a0
jmp 0x9fc2
movq 0x2919c(%rip), %rdi     # 0x32fc0
leaq 0x1734a(%rip), %rsi     # 0x21175
callq 0x8420
movq %rax, -0x9a0(%rbp)
jmp 0x9e39
leaq -0x791(%rbp), %rdi
movq %rdi, -0x9a8(%rbp)
callq 0x87d0
movq -0x9a8(%rbp), %rdx
leaq 0x171f9(%rip), %rsi     # 0x21053
leaq -0x790(%rbp), %rdi
callq 0xa840
jmp 0x9e68
leaq -0x340(%rbp), %rdi
leaq -0x790(%rbp), %rsi
callq 0xac20
movq %rax, -0x9b0(%rbp)
jmp 0x9e84
movq -0x9b0(%rbp), %rdi
callq 0xac50
movq %rax, -0x9b8(%rbp)
jmp 0x9e99
movq -0x9b8(%rbp), %rsi
movq -0x9a0(%rbp), %rdi
callq 0x83d0
movq %rax, -0x9c0(%rbp)
jmp 0x9eb5
movq -0x9c0(%rbp), %rdi
movq 0x290b5(%rip), %rsi     # 0x32f78
callq 0x8480
jmp 0x9eca
leaq -0x790(%rbp), %rdi
callq 0x8280
leaq -0x791(%rbp), %rdi
callq 0x84a0
movq -0x18(%rbp), %rsi
addq $0x8, %rsi
leaq -0x7b8(%rbp), %rdi
callq 0x14150
jmp 0x9ef8
movq 0x290c1(%rip), %rdi     # 0x32fc0
leaq -0x7b8(%rbp), %rsi
callq 0x83d0
movq %rax, -0x9c8(%rbp)
jmp 0x9f14
movq -0x9c8(%rbp), %rdi
movq 0x29056(%rip), %rsi     # 0x32f78
callq 0x8480
jmp 0x9f29
leaq -0x7b8(%rbp), %rdi
callq 0x8280
movl $0x1, -0x4(%rbp)
movl $0x1, -0x430(%rbp)
jmp 0x9fa8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc8(%rbp)
movl %eax, -0xcc(%rbp)
jmp 0x9f7a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc8(%rbp)
movl %eax, -0xcc(%rbp)
leaq -0x790(%rbp), %rdi
callq 0x8280
leaq -0x791(%rbp), %rdi
callq 0x84a0
jmp 0x9fc2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc8(%rbp)
movl %eax, -0xcc(%rbp)
leaq -0x7b8(%rbp), %rdi
callq 0x8280
jmp 0x9fc2
leaq -0x680(%rbp), %rdi
callq 0x8280
leaq -0x638(%rbp), %rdi
callq 0x80e0
jmp 0x9fdc
leaq -0x680(%rbp), %rdi
callq 0x8280
leaq -0x638(%rbp), %rdi
callq 0x80e0
jmp 0xa029
leaq -0x340(%rbp), %rdi
callq 0xade0
leaq -0x278(%rbp), %rdi
callq 0xae40
leaq -0x1f8(%rbp), %rdi
callq 0xae90
leaq -0x1c0(%rbp), %rdi
callq 0xae90
leaq -0x158(%rbp), %rdi
callq 0xae40
leaq -0x98(%rbp), %rdi
callq 0xae40
jmp 0xa0d5
leaq -0x340(%rbp), %rdi
callq 0xade0
leaq -0x278(%rbp), %rdi
callq 0xae40
leaq -0x1f8(%rbp), %rdi
callq 0xae90
leaq -0x1c0(%rbp), %rdi
callq 0xae90
leaq -0x158(%rbp), %rdi
callq 0xae40
leaq -0x98(%rbp), %rdi
callq 0xae40
movl -0xcc(%rbp), %eax
movl $0x1, %ecx
cmpl %ecx, %eax
jne 0xa0fc
movq -0xc8(%rbp), %rdi
callq 0x8180
movq %rax, -0x7c0(%rbp)
movq -0x7c0(%rbp), %rdi
movq (%rdi), %rax
movq 0x10(%rax), %rax
callq *%rax
movq %rax, %rsi
movq 0x28f13(%rip), %rdi     # 0x32fc0
callq 0x8420
movq %rax, -0x9d0(%rbp)
jmp 0xa0bb
movq -0x9d0(%rbp), %rdi
leaq 0x1705e(%rip), %rsi     # 0x21127
callq 0x8420
jmp 0xa0d0
callq 0x8710
movl -0x4(%rbp), %eax
addq $0x9d0, %rsp            # imm = 0x9D0
popq %rbp
retq
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc8(%rbp)
movl %eax, -0xcc(%rbp)
callq 0x8710
jmp 0xa0fa
jmp 0xa0fc
movq -0xc8(%rbp), %rdi
callq 0x87c0
movq %rax, %rdi
callq 0xa620