// File: maplechori[P]stata-reader-writer/SQLite.cpp
// Function: SQLite::write(Context&)
bool SQLite::write(Context & ctx) {
    char *zErrMsg = 0;
    int rc;
    stringstream sql_query;
    sqlite3_stmt *stmt = NULL;

    


    rc = sqlite3_exec(db,  "create table variables ("
                           "varpos integer primary key asc,"
                           "varname varchar(255),"
                           "vartype integer,"
                           "varformat varchar(20),"
                           "valuelabel varchar(255),"
                           "variablelabel varchar(255));" , NULL, 0, &zErrMsg);
    
    if( rc != SQLITE_OK )
    {
      cerr << "SQL error: " << zErrMsg << endl;
      sqlite3_free(zErrMsg);
      return false;
    }

    sql_query.str("");

    rc = sqlite3_prepare_v2(db, "INSERT INTO VARIABLES (VARPOS, VARNAME, VARTYPE, VARFORMAT, VALUELABEL, VARIABLELABEL ) VALUES ( NULL, ?, ?, ?, ?, ? )", -1, &stmt, NULL);

    if (rc != SQLITE_OK) {
        cerr << "SQLError prepare failed: " << sqlite3_errmsg(db) << endl;
        return false;
    } 

    sqlite3_exec(db, "BEGIN TRANSACTION", NULL, NULL, &zErrMsg);

    for (int j = 0; j < ctx.vList.size(); j++)
    {
        rc = sqlite3_bind_text(stmt, 1, ((StataVariables)*ctx.vList[j]).varname.c_str(), ((StataVariables)*ctx.vList[j]).varname.length(), SQLITE_STATIC);

        if (rc != SQLITE_OK) {
            cerr << "SQLError: varname bind failed: " << sqlite3_errmsg(db) << endl;
            return false;
        }

        rc = sqlite3_bind_int(stmt, 2, ((StataVariables)*ctx.vList[j]).type);

        if (rc != SQLITE_OK) {
            cerr << "SQLError: type bind failed: " << sqlite3_errmsg(db) << endl;
            return false;
        }

        rc = sqlite3_bind_text(stmt, 3, ((StataVariables)*ctx.vList[j]).format.c_str(), ((StataVariables)*ctx.vList[j]).format.length(), SQLITE_STATIC);

        if (rc != SQLITE_OK) {
            cerr << "SQLError: format bind failed: " << sqlite3_errmsg(db) << endl;
            return false;
        }

        rc = sqlite3_bind_text(stmt, 4, ((StataVariables)*ctx.vList[j]).vallbl.c_str(), ((StataVariables)*ctx.vList[j]).vallbl.length(), SQLITE_STATIC);

        if (rc != SQLITE_OK) {
            cerr << "SQLError: vallbl bind failed: " << sqlite3_errmsg(db) << endl;
            return false;
        }

        rc = sqlite3_bind_text(stmt, 5, ((StataVariables)*ctx.vList[j]).varlbl.c_str(), ((StataVariables)*ctx.vList[j]).varlbl.length(), SQLITE_STATIC);

        if (rc != SQLITE_OK) {
            cerr << "SQLError: varlbl bind failed: " << sqlite3_errmsg(db) << endl;
            return false;
        }
        
        rc =  sqlite3_step(stmt);

        if( rc != SQLITE_DONE )
        {
            cerr << "SQL error: "  << sqlite3_errmsg(db) << endl;
            return false;
        }
                    
        sqlite3_clear_bindings(stmt);    /* Clear bindings */
        sqlite3_reset(stmt);
    

    }  

    sqlite3_exec(db, "END TRANSACTION", NULL, NULL, &zErrMsg);

  
    rc = sqlite3_exec(db,  "create table vardata ("
                           "obs integer,"
                           "varpos integer,"
                           "value blob,"
                           "sizer int);" , NULL, 0, &zErrMsg);
    
    if( rc != SQLITE_OK )
    {
      cerr << "SQL error: " << zErrMsg << endl;
      sqlite3_free(zErrMsg);
      return false;
    }

    sqlite3_exec(db, "BEGIN TRANSACTION", NULL, NULL, &zErrMsg);

    rc = sqlite3_prepare_v2(db, "INSERT INTO VARDATA ( OBS, VARPOS, VALUE, SIZER ) VALUES ( ?, ?, ?, ? )", -1, &stmt, NULL);
    
    if (rc != SQLITE_OK) {
        cerr << "SQLError prepare failed: " << sqlite3_errmsg(db) << endl;
        return false;
    } 
    else 
    {
    
        for (int k = 0; k < ctx.vData.size(); k++)
        {
            for (int j = 0; j < ctx.vList.size(); j++)
            {
                int sz = 0;
                rc = sqlite3_bind_int(stmt, 1, k+1);

                
                if (rc != SQLITE_OK) {
                    cerr << "SQLError: obs bind failed: " << sqlite3_errmsg(db) << endl;
                    return false;
                }

                rc = sqlite3_bind_int(stmt, 2, j+1);
                if (rc != SQLITE_OK) {
                    cerr << "SQLError: varpos bind failed: " << sqlite3_errmsg(db) << endl;
                    return false;
                }                 
                
                switch(ctx.vList[j]->type)
                {
                    case ST_STRL:
                        cout << "Strl " << endl;             
                        break;
                    case ST_DOUBLE:  
                        sz=8;
                        break;
                    case ST_FLOAT:
                        sz=4;
                        break;
                    case ST_LONG:
                        sz=4;
                        break;
                    case ST_INT:
                        sz=2;
                        break;
                    case ST_BYTE:
                        sz=1;
                        break;
                    default: 
                        sz=strlen((*ctx.vData[k])[j]);
                        break;
                }                  

                rc = sqlite3_bind_blob(stmt,3, (*ctx.vData[k])[j], sz, SQLITE_STATIC);
                
                if (rc != SQLITE_OK) {
                    cerr << "SQLError blob bind failed: " << sqlite3_errmsg(db) << endl;
                    return false;
                } 

                rc = sqlite3_bind_int(stmt, 4, sz);
                if (rc != SQLITE_OK) {
                    cerr << "SQLError: sizer bind failed: " << sqlite3_errmsg(db) << endl;
                    return false;
                } 
                
                rc =  sqlite3_step(stmt);

                if( rc != SQLITE_DONE )
                {
                    cerr << "SQL error: "  << sqlite3_errmsg(db) << endl;
                    return false;
                }
                    
                sqlite3_clear_bindings(stmt);    /* Clear bindings */
                sqlite3_reset(stmt);
            }
        }
    } 
    
    sqlite3_exec(db, "END TRANSACTION", NULL, NULL, &zErrMsg);
    sqlite3_finalize(stmt);    
    return true;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x920, %rsp            # imm = 0x920
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x6d0(%rbp)
movq $0x0, -0x20(%rbp)
leaq -0x1b0(%rbp), %rdi
callq 0x8310
movq -0x6d0(%rbp), %rax
movq $0x0, -0x1b8(%rbp)
movq 0x8(%rax), %rdi
leaq 0x26c5(%rip), %rsi      # 0x22024
xorl %eax, %eax
movl %eax, %ecx
leaq -0x20(%rbp), %r8
movq %rcx, %rdx
callq 0x85e0
movl %eax, -0x6c8(%rbp)
jmp 0x1f977
movl -0x6c8(%rbp), %eax
movl %eax, -0x24(%rbp)
cmpl $0x0, -0x24(%rbp)
je 0x1fa05
movq 0x13663(%rip), %rdi     # 0x32ff0
leaq 0x2737(%rip), %rsi      # 0x220cb
callq 0x8420
movq %rax, -0x6d8(%rbp)
jmp 0x1f9a2
movq -0x6d8(%rbp), %rdi
movq -0x20(%rbp), %rsi
callq 0x8420
movq %rax, -0x6e0(%rbp)
jmp 0x1f9bb
movq -0x6e0(%rbp), %rdi
movq 0x135af(%rip), %rsi     # 0x32f78
callq 0x8480
jmp 0x1f9d0
movq -0x20(%rbp), %rdi
callq 0x8540
jmp 0x1f9db
movb $0x0, -0x1(%rbp)
movl $0x1, -0x1c8(%rbp)
jmp 0x20b53
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1c0(%rbp)
movl %eax, -0x1c4(%rbp)
jmp 0x20b6d
leaq -0x1e9(%rbp), %rdi
movq %rdi, -0x6e8(%rbp)
callq 0x87d0
movq -0x6e8(%rbp), %rdx
leaq 0x1702(%rip), %rsi      # 0x21128
leaq -0x1e8(%rbp), %rdi
callq 0xa840
jmp 0x1fa34
leaq -0x1b0(%rbp), %rdi
leaq -0x1e8(%rbp), %rsi
callq 0x8520
jmp 0x1fa49
leaq -0x1e8(%rbp), %rdi
callq 0x8280
leaq -0x1e9(%rbp), %rdi
callq 0x84a0
movq -0x6d0(%rbp), %rax
movq 0x8(%rax), %rdi
leaq 0x2664(%rip), %rsi      # 0x220d7
xorl %eax, %eax
movl %eax, %r8d
movl $0xffffffff, %edx       # imm = 0xFFFFFFFF
leaq -0x1b8(%rbp), %rcx
callq 0x83f0
movl %eax, -0x6ec(%rbp)
jmp 0x1fa91
movl -0x6ec(%rbp), %eax
movl %eax, -0x24(%rbp)
cmpl $0x0, -0x24(%rbp)
je 0x1fb60
movq 0x13545(%rip), %rdi     # 0x32ff0
leaq 0x269c(%rip), %rsi      # 0x2214e
callq 0x8420
movq %rax, -0x6f8(%rbp)
jmp 0x1fac0
movq -0x6d0(%rbp), %rax
movq 0x8(%rax), %rdi
callq 0x8410
movq %rax, -0x700(%rbp)
jmp 0x1fad9
movq -0x700(%rbp), %rsi
movq -0x6f8(%rbp), %rdi
callq 0x8420
movq %rax, -0x708(%rbp)
jmp 0x1faf5
movq -0x708(%rbp), %rdi
movq 0x13475(%rip), %rsi     # 0x32f78
callq 0x8480
jmp 0x1fb0a
movb $0x0, -0x1(%rbp)
movl $0x1, -0x1c8(%rbp)
jmp 0x20b53
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1c0(%rbp)
movl %eax, -0x1c4(%rbp)
jmp 0x1fb4f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1c0(%rbp)
movl %eax, -0x1c4(%rbp)
leaq -0x1e8(%rbp), %rdi
callq 0x8280
leaq -0x1e9(%rbp), %rdi
callq 0x84a0
jmp 0x20b6d
movq -0x6d0(%rbp), %rax
movq 0x8(%rax), %rdi
leaq 0x25f6(%rip), %rsi      # 0x22168
xorl %eax, %eax
movl %eax, %ecx
leaq -0x20(%rbp), %r8
movq %rcx, %rdx
callq 0x85e0
jmp 0x1fb84
movl $0x0, -0x1f0(%rbp)
movslq -0x1f0(%rbp), %rax
movq %rax, -0x710(%rbp)
movq -0x18(%rbp), %rdi
addq $0xc0, %rdi
callq 0x1c550
movq %rax, %rcx
movq -0x710(%rbp), %rax
cmpq %rcx, %rax
jae 0x20411
movq -0x1b8(%rbp), %rax
movq %rax, -0x718(%rbp)
movq -0x18(%rbp), %rdi
addq $0xc0, %rdi
movslq -0x1f0(%rbp), %rsi
callq 0x1d580
movq %rax, %rdi
callq 0x20d30
movq %rax, %rsi
leaq -0x278(%rbp), %rdi
callq 0x20d80
jmp 0x1fbfd
leaq -0x278(%rbp), %rdi
callq 0x8190
movq %rax, -0x720(%rbp)
movq -0x18(%rbp), %rdi
addq $0xc0, %rdi
movslq -0x1f0(%rbp), %rsi
callq 0x1d580
movq %rax, %rdi
callq 0x20d30
movq %rax, %rsi
leaq -0x300(%rbp), %rdi
callq 0x20d80
jmp 0x1fc40
leaq -0x300(%rbp), %rdi
callq 0x86b0
movq -0x718(%rbp), %rdi
movq -0x720(%rbp), %rdx
movl %eax, %ecx
xorl %eax, %eax
movl %eax, %r8d
movl $0x1, %esi
callq 0x83b0
movl %eax, -0x724(%rbp)
jmp 0x1fc73
movl -0x724(%rbp), %eax
movl %eax, -0x24(%rbp)
leaq -0x300(%rbp), %rdi
callq 0x1bd10
leaq -0x278(%rbp), %rdi
callq 0x1bd10
cmpl $0x0, -0x24(%rbp)
je 0x1fd5a
movq 0x1334b(%rip), %rdi     # 0x32ff0
leaq 0x24ce(%rip), %rsi      # 0x2217a
callq 0x8420
movq %rax, -0x730(%rbp)
jmp 0x1fcba
movq -0x6d0(%rbp), %rax
movq 0x8(%rax), %rdi
callq 0x8410
movq %rax, -0x738(%rbp)
jmp 0x1fcd3
movq -0x738(%rbp), %rsi
movq -0x730(%rbp), %rdi
callq 0x8420
movq %rax, -0x740(%rbp)
jmp 0x1fcef
movq -0x740(%rbp), %rdi
movq 0x1327b(%rip), %rsi     # 0x32f78
callq 0x8480
jmp 0x1fd04
movb $0x0, -0x1(%rbp)
movl $0x1, -0x1c8(%rbp)
jmp 0x20b53
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1c0(%rbp)
movl %eax, -0x1c4(%rbp)
jmp 0x1fd49
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1c0(%rbp)
movl %eax, -0x1c4(%rbp)
leaq -0x300(%rbp), %rdi
callq 0x1bd10
leaq -0x278(%rbp), %rdi
callq 0x1bd10
jmp 0x20b6d
movq -0x1b8(%rbp), %rax
movq %rax, -0x748(%rbp)
movq -0x18(%rbp), %rdi
addq $0xc0, %rdi
movslq -0x1f0(%rbp), %rsi
callq 0x1d580
movq %rax, %rdi
callq 0x20d30
movq %rax, %rsi
leaq -0x388(%rbp), %rdi
callq 0x20d80
jmp 0x1fd98
movq -0x748(%rbp), %rdi
movl -0x368(%rbp), %edx
movl $0x2, %esi
callq 0x8040
movl %eax, -0x74c(%rbp)
jmp 0x1fdb7
movl -0x74c(%rbp), %eax
movl %eax, -0x24(%rbp)
leaq -0x388(%rbp), %rdi
callq 0x1bd10
cmpl $0x0, -0x24(%rbp)
je 0x1fe72
movq 0x13213(%rip), %rdi     # 0x32ff0
leaq 0x23b6(%rip), %rsi      # 0x2219a
callq 0x8420
movq %rax, -0x758(%rbp)
jmp 0x1fdf2
movq -0x6d0(%rbp), %rax
movq 0x8(%rax), %rdi
callq 0x8410
movq %rax, -0x760(%rbp)
jmp 0x1fe0b
movq -0x760(%rbp), %rsi
movq -0x758(%rbp), %rdi
callq 0x8420
movq %rax, -0x768(%rbp)
jmp 0x1fe27
movq -0x768(%rbp), %rdi
movq 0x13143(%rip), %rsi     # 0x32f78
callq 0x8480
jmp 0x1fe3c
movb $0x0, -0x1(%rbp)
movl $0x1, -0x1c8(%rbp)
jmp 0x20b53
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1c0(%rbp)
movl %eax, -0x1c4(%rbp)
leaq -0x388(%rbp), %rdi
callq 0x1bd10
jmp 0x20b6d
movq -0x1b8(%rbp), %rax
movq %rax, -0x770(%rbp)
movq -0x18(%rbp), %rdi
addq $0xc0, %rdi
movslq -0x1f0(%rbp), %rsi
callq 0x1d580
movq %rax, %rdi
callq 0x20d30
movq %rax, %rsi
leaq -0x410(%rbp), %rdi
callq 0x20d80
jmp 0x1feb0
leaq -0x3e8(%rbp), %rdi
callq 0x8190
movq %rax, -0x778(%rbp)
movq -0x18(%rbp), %rdi
addq $0xc0, %rdi
movslq -0x1f0(%rbp), %rsi
callq 0x1d580
movq %rax, %rdi
callq 0x20d30
movq %rax, %rsi
leaq -0x498(%rbp), %rdi
callq 0x20d80
jmp 0x1fef3
leaq -0x470(%rbp), %rdi
callq 0x86b0
movq -0x770(%rbp), %rdi
movq -0x778(%rbp), %rdx
movl %eax, %ecx
xorl %eax, %eax
movl %eax, %r8d
movl $0x3, %esi
callq 0x83b0
movl %eax, -0x77c(%rbp)
jmp 0x1ff26
movl -0x77c(%rbp), %eax
movl %eax, -0x24(%rbp)
leaq -0x498(%rbp), %rdi
callq 0x1bd10
leaq -0x410(%rbp), %rdi
callq 0x1bd10
cmpl $0x0, -0x24(%rbp)
je 0x2000d
movq 0x13098(%rip), %rdi     # 0x32ff0
leaq 0x2258(%rip), %rsi      # 0x221b7
callq 0x8420
movq %rax, -0x788(%rbp)
jmp 0x1ff6d
movq -0x6d0(%rbp), %rax
movq 0x8(%rax), %rdi
callq 0x8410
movq %rax, -0x790(%rbp)
jmp 0x1ff86
movq -0x790(%rbp), %rsi
movq -0x788(%rbp), %rdi
callq 0x8420
movq %rax, -0x798(%rbp)
jmp 0x1ffa2
movq -0x798(%rbp), %rdi
movq 0x12fc8(%rip), %rsi     # 0x32f78
callq 0x8480
jmp 0x1ffb7
movb $0x0, -0x1(%rbp)
movl $0x1, -0x1c8(%rbp)
jmp 0x20b53
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1c0(%rbp)
movl %eax, -0x1c4(%rbp)
jmp 0x1fffc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1c0(%rbp)
movl %eax, -0x1c4(%rbp)
leaq -0x498(%rbp), %rdi
callq 0x1bd10
leaq -0x410(%rbp), %rdi
callq 0x1bd10
jmp 0x20b6d
movq -0x1b8(%rbp), %rax
movq %rax, -0x7a0(%rbp)
movq -0x18(%rbp), %rdi
addq $0xc0, %rdi
movslq -0x1f0(%rbp), %rsi
callq 0x1d580
movq %rax, %rdi
callq 0x20d30
movq %rax, %rsi
leaq -0x520(%rbp), %rdi
callq 0x20d80
jmp 0x2004b
leaq -0x4d8(%rbp), %rdi
callq 0x8190
movq %rax, -0x7a8(%rbp)
movq -0x18(%rbp), %rdi
addq $0xc0, %rdi
movslq -0x1f0(%rbp), %rsi
callq 0x1d580
movq %rax, %rdi
callq 0x20d30
movq %rax, %rsi
leaq -0x5a8(%rbp), %rdi
callq 0x20d80
jmp 0x2008e
leaq -0x560(%rbp), %rdi
callq 0x86b0
movq -0x7a0(%rbp), %rdi
movq -0x7a8(%rbp), %rdx
movl %eax, %ecx
xorl %eax, %eax
movl %eax, %r8d
movl $0x4, %esi
callq 0x83b0
movl %eax, -0x7ac(%rbp)
jmp 0x200c1
movl -0x7ac(%rbp), %eax
movl %eax, -0x24(%rbp)
leaq -0x5a8(%rbp), %rdi
callq 0x1bd10
leaq -0x520(%rbp), %rdi
callq 0x1bd10
cmpl $0x0, -0x24(%rbp)
je 0x201a8
movq 0x12efd(%rip), %rdi     # 0x32ff0
leaq 0x20dc(%rip), %rsi      # 0x221d6
callq 0x8420
movq %rax, -0x7b8(%rbp)
jmp 0x20108
movq -0x6d0(%rbp), %rax
movq 0x8(%rax), %rdi
callq 0x8410
movq %rax, -0x7c0(%rbp)
jmp 0x20121
movq -0x7c0(%rbp), %rsi
movq -0x7b8(%rbp), %rdi
callq 0x8420
movq %rax, -0x7c8(%rbp)
jmp 0x2013d
movq -0x7c8(%rbp), %rdi
movq 0x12e2d(%rip), %rsi     # 0x32f78
callq 0x8480
jmp 0x20152
movb $0x0, -0x1(%rbp)
movl $0x1, -0x1c8(%rbp)
jmp 0x20b53
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1c0(%rbp)
movl %eax, -0x1c4(%rbp)
jmp 0x20197
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1c0(%rbp)
movl %eax, -0x1c4(%rbp)
leaq -0x5a8(%rbp), %rdi
callq 0x1bd10
leaq -0x520(%rbp), %rdi
callq 0x1bd10
jmp 0x20b6d
movq -0x1b8(%rbp), %rax
movq %rax, -0x7d0(%rbp)
movq -0x18(%rbp), %rdi
addq $0xc0, %rdi
movslq -0x1f0(%rbp), %rsi
callq 0x1d580
movq %rax, %rdi
callq 0x20d30
movq %rax, %rsi
leaq -0x630(%rbp), %rdi
callq 0x20d80
jmp 0x201e6
leaq -0x5c8(%rbp), %rdi
callq 0x8190
movq %rax, -0x7d8(%rbp)
movq -0x18(%rbp), %rdi
addq $0xc0, %rdi
movslq -0x1f0(%rbp), %rsi
callq 0x1d580
movq %rax, %rdi
callq 0x20d30
movq %rax, %rsi
leaq -0x6b8(%rbp), %rdi
callq 0x20d80
jmp 0x20229
leaq -0x650(%rbp), %rdi
callq 0x86b0
movq -0x7d0(%rbp), %rdi
movq -0x7d8(%rbp), %rdx
movl %eax, %ecx
xorl %eax, %eax
movl %eax, %r8d
movl $0x5, %esi
callq 0x83b0
movl %eax, -0x7dc(%rbp)
jmp 0x2025c
movl -0x7dc(%rbp), %eax
movl %eax, -0x24(%rbp)
leaq -0x6b8(%rbp), %rdi
callq 0x1bd10
leaq -0x630(%rbp), %rdi
callq 0x1bd10
cmpl $0x0, -0x24(%rbp)
je 0x20343
movq 0x12d62(%rip), %rdi     # 0x32ff0
leaq 0x1f60(%rip), %rsi      # 0x221f5
callq 0x8420
movq %rax, -0x7e8(%rbp)
jmp 0x202a3
movq -0x6d0(%rbp), %rax
movq 0x8(%rax), %rdi
callq 0x8410
movq %rax, -0x7f0(%rbp)
jmp 0x202bc
movq -0x7f0(%rbp), %rsi
movq -0x7e8(%rbp), %rdi
callq 0x8420
movq %rax, -0x7f8(%rbp)
jmp 0x202d8
movq -0x7f8(%rbp), %rdi
movq 0x12c92(%rip), %rsi     # 0x32f78
callq 0x8480
jmp 0x202ed
movb $0x0, -0x1(%rbp)
movl $0x1, -0x1c8(%rbp)
jmp 0x20b53
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1c0(%rbp)
movl %eax, -0x1c4(%rbp)
jmp 0x20332
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1c0(%rbp)
movl %eax, -0x1c4(%rbp)
leaq -0x6b8(%rbp), %rdi
callq 0x1bd10
leaq -0x630(%rbp), %rdi
callq 0x1bd10
jmp 0x20b6d
movq -0x1b8(%rbp), %rdi
callq 0x8640
movl %eax, -0x7fc(%rbp)
jmp 0x20357
movl -0x7fc(%rbp), %eax
movl %eax, -0x24(%rbp)
cmpl $0x65, -0x24(%rbp)
je 0x203df
movq 0x12c83(%rip), %rdi     # 0x32ff0
leaq 0x1d57(%rip), %rsi      # 0x220cb
callq 0x8420
movq %rax, -0x808(%rbp)
jmp 0x20382
movq -0x6d0(%rbp), %rax
movq 0x8(%rax), %rdi
callq 0x8410
movq %rax, -0x810(%rbp)
jmp 0x2039b
movq -0x810(%rbp), %rsi
movq -0x808(%rbp), %rdi
callq 0x8420
movq %rax, -0x818(%rbp)
jmp 0x203b7
movq -0x818(%rbp), %rdi
movq 0x12bb3(%rip), %rsi     # 0x32f78
callq 0x8480
jmp 0x203cc
movb $0x0, -0x1(%rbp)
movl $0x1, -0x1c8(%rbp)
jmp 0x20b53
movq -0x1b8(%rbp), %rdi
callq 0x8850
jmp 0x203ed
movq -0x1b8(%rbp), %rdi
callq 0x8140
jmp 0x203fb
jmp 0x203fd
movl -0x1f0(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x1f0(%rbp)
jmp 0x1fb8e
movq -0x6d0(%rbp), %rax
movq 0x8(%rax), %rdi
leaq 0x1df1(%rip), %rsi      # 0x22214
xorl %eax, %eax
movl %eax, %ecx
leaq -0x20(%rbp), %r8
movq %rcx, %rdx
callq 0x85e0
jmp 0x20435
movq -0x6d0(%rbp), %rax
movq 0x8(%rax), %rdi
leaq 0x1ddd(%rip), %rsi      # 0x22224
xorl %eax, %eax
movl %eax, %ecx
leaq -0x20(%rbp), %r8
movq %rcx, %rdx
callq 0x85e0
movl %eax, -0x81c(%rbp)
jmp 0x2045f
movl -0x81c(%rbp), %eax
movl %eax, -0x24(%rbp)
cmpl $0x0, -0x24(%rbp)
je 0x204d6
movq 0x12b7b(%rip), %rdi     # 0x32ff0
leaq 0x1c4f(%rip), %rsi      # 0x220cb
callq 0x8420
movq %rax, -0x828(%rbp)
jmp 0x2048a
movq -0x828(%rbp), %rdi
movq -0x20(%rbp), %rsi
callq 0x8420
movq %rax, -0x830(%rbp)
jmp 0x204a3
movq -0x830(%rbp), %rdi
movq 0x12ac7(%rip), %rsi     # 0x32f78
callq 0x8480
jmp 0x204b8
movq -0x20(%rbp), %rdi
callq 0x8540
jmp 0x204c3
movb $0x0, -0x1(%rbp)
movl $0x1, -0x1c8(%rbp)
jmp 0x20b53
movq -0x6d0(%rbp), %rax
movq 0x8(%rax), %rdi
leaq 0x1c80(%rip), %rsi      # 0x22168
xorl %eax, %eax
movl %eax, %ecx
leaq -0x20(%rbp), %r8
movq %rcx, %rdx
callq 0x85e0
jmp 0x204fa
movq -0x6d0(%rbp), %rax
movq 0x8(%rax), %rdi
leaq 0x1d60(%rip), %rsi      # 0x2226c
xorl %eax, %eax
movl %eax, %r8d
movl $0xffffffff, %edx       # imm = 0xFFFFFFFF
leaq -0x1b8(%rbp), %rcx
callq 0x83f0
movl %eax, -0x834(%rbp)
jmp 0x2052a
movl -0x834(%rbp), %eax
movl %eax, -0x24(%rbp)
cmpl $0x0, -0x24(%rbp)
je 0x205b2
movq 0x12ab0(%rip), %rdi     # 0x32ff0
leaq 0x1c07(%rip), %rsi      # 0x2214e
callq 0x8420
movq %rax, -0x840(%rbp)
jmp 0x20555
movq -0x6d0(%rbp), %rax
movq 0x8(%rax), %rdi
callq 0x8410
movq %rax, -0x848(%rbp)
jmp 0x2056e
movq -0x848(%rbp), %rsi
movq -0x840(%rbp), %rdi
callq 0x8420
movq %rax, -0x850(%rbp)
jmp 0x2058a
movq -0x850(%rbp), %rdi
movq 0x129e0(%rip), %rsi     # 0x32f78
callq 0x8480
jmp 0x2059f
movb $0x0, -0x1(%rbp)
movl $0x1, -0x1c8(%rbp)
jmp 0x20b53
movl $0x0, -0x6bc(%rbp)
movslq -0x6bc(%rbp), %rax
movq %rax, -0x858(%rbp)
movq -0x18(%rbp), %rdi
addq $0xd8, %rdi
callq 0x1e5d0
movq %rax, %rcx
movq -0x858(%rbp), %rax
cmpq %rcx, %rax
jae 0x20b11
movl $0x0, -0x6c0(%rbp)
movslq -0x6c0(%rbp), %rax
movq %rax, -0x860(%rbp)
movq -0x18(%rbp), %rdi
addq $0xc0, %rdi
callq 0x1c550
movq %rax, %rcx
movq -0x860(%rbp), %rax
cmpq %rcx, %rax
jae 0x20afb
movl $0x0, -0x6c4(%rbp)
movq -0x1b8(%rbp), %rdi
movl -0x6bc(%rbp), %edx
incl %edx
movl $0x1, %esi
callq 0x8040
movl %eax, -0x864(%rbp)
jmp 0x20653
movl -0x864(%rbp), %eax
movl %eax, -0x24(%rbp)
cmpl $0x0, -0x24(%rbp)
je 0x206db
movq 0x12987(%rip), %rdi     # 0x32ff0
leaq 0x1c44(%rip), %rsi      # 0x222b4
callq 0x8420
movq %rax, -0x870(%rbp)
jmp 0x2067e
movq -0x6d0(%rbp), %rax
movq 0x8(%rax), %rdi
callq 0x8410
movq %rax, -0x878(%rbp)
jmp 0x20697
movq -0x878(%rbp), %rsi
movq -0x870(%rbp), %rdi
callq 0x8420
movq %rax, -0x880(%rbp)
jmp 0x206b3
movq -0x880(%rbp), %rdi
movq 0x128b7(%rip), %rsi     # 0x32f78
callq 0x8480
jmp 0x206c8
movb $0x0, -0x1(%rbp)
movl $0x1, -0x1c8(%rbp)
jmp 0x20b53
movq -0x1b8(%rbp), %rdi
movl -0x6c0(%rbp), %edx
incl %edx
movl $0x2, %esi
callq 0x8040
movl %eax, -0x884(%rbp)
jmp 0x206fc
movl -0x884(%rbp), %eax
movl %eax, -0x24(%rbp)
cmpl $0x0, -0x24(%rbp)
je 0x20784
movq 0x128de(%rip), %rdi     # 0x32ff0
leaq 0x1bb7(%rip), %rsi      # 0x222d0
callq 0x8420
movq %rax, -0x890(%rbp)
jmp 0x20727
movq -0x6d0(%rbp), %rax
movq 0x8(%rax), %rdi
callq 0x8410
movq %rax, -0x898(%rbp)
jmp 0x20740
movq -0x898(%rbp), %rsi
movq -0x890(%rbp), %rdi
callq 0x8420
movq %rax, -0x8a0(%rbp)
jmp 0x2075c
movq -0x8a0(%rbp), %rdi
movq 0x1280e(%rip), %rsi     # 0x32f78
callq 0x8480
jmp 0x20771
movb $0x0, -0x1(%rbp)
movl $0x1, -0x1c8(%rbp)
jmp 0x20b53
movq -0x18(%rbp), %rdi
addq $0xc0, %rdi
movslq -0x6c0(%rbp), %rsi
callq 0x1d580
movq %rax, %rdi
callq 0x190a0
movl 0x20(%rax), %eax
movl %eax, -0x8a4(%rbp)
subl $0x8000, %eax           # imm = 0x8000
je 0x20800
jmp 0x207b5
movl -0x8a4(%rbp), %eax
subl $0xfff6, %eax           # imm = 0xFFF6
je 0x20833
jmp 0x207c4
movl -0x8a4(%rbp), %eax
subl $0xfff7, %eax           # imm = 0xFFF7
je 0x2083f
jmp 0x207d3
movl -0x8a4(%rbp), %eax
subl $0xfff8, %eax           # imm = 0xFFF8
je 0x2084b
jmp 0x207e2
movl -0x8a4(%rbp), %eax
subl $0xfff9, %eax           # imm = 0xFFF9
je 0x20857
jmp 0x207f1
movl -0x8a4(%rbp), %eax
subl $0xfffa, %eax           # imm = 0xFFFA
je 0x20863
jmp 0x2086f
movq 0x127b9(%rip), %rdi     # 0x32fc0
leaq 0x1ae1(%rip), %rsi      # 0x222ef
callq 0x8420
movq %rax, -0x8b0(%rbp)
jmp 0x2081c
movq -0x8b0(%rbp), %rdi
movq 0x1274e(%rip), %rsi     # 0x32f78
callq 0x8480
jmp 0x20831
jmp 0x208a3
movl $0x8, -0x6c4(%rbp)
jmp 0x208a3
movl $0x4, -0x6c4(%rbp)
jmp 0x208a3
movl $0x4, -0x6c4(%rbp)
jmp 0x208a3
movl $0x2, -0x6c4(%rbp)
jmp 0x208a3
movl $0x1, -0x6c4(%rbp)
jmp 0x208a3
movq -0x18(%rbp), %rdi
addq $0xd8, %rdi
movslq -0x6bc(%rbp), %rsi
callq 0x20e60
movq (%rax), %rdi
movslq -0x6c0(%rbp), %rsi
callq 0x20e80
movq (%rax), %rdi
callq 0x81c0
movl %eax, -0x6c4(%rbp)
movq -0x1b8(%rbp), %rax
movq %rax, -0x8c0(%rbp)
movq -0x18(%rbp), %rdi
addq $0xd8, %rdi
movslq -0x6bc(%rbp), %rsi
callq 0x20e60
movq (%rax), %rdi
movslq -0x6c0(%rbp), %rsi
callq 0x20e80
movq -0x8c0(%rbp), %rdi
movq (%rax), %rdx
movl -0x6c4(%rbp), %ecx
xorl %eax, %eax
movl %eax, %r8d
movl $0x3, %esi
callq 0x8120
movl %eax, -0x8b4(%rbp)
jmp 0x208fe
movl -0x8b4(%rbp), %eax
movl %eax, -0x24(%rbp)
cmpl $0x0, -0x24(%rbp)
je 0x20986
movq 0x126dc(%rip), %rdi     # 0x32ff0
leaq 0x19da(%rip), %rsi      # 0x222f5
callq 0x8420
movq %rax, -0x8c8(%rbp)
jmp 0x20929
movq -0x6d0(%rbp), %rax
movq 0x8(%rax), %rdi
callq 0x8410
movq %rax, -0x8d0(%rbp)
jmp 0x20942
movq -0x8d0(%rbp), %rsi
movq -0x8c8(%rbp), %rdi
callq 0x8420
movq %rax, -0x8d8(%rbp)
jmp 0x2095e
movq -0x8d8(%rbp), %rdi
movq 0x1260c(%rip), %rsi     # 0x32f78
callq 0x8480
jmp 0x20973
movb $0x0, -0x1(%rbp)
movl $0x1, -0x1c8(%rbp)
jmp 0x20b53
movq -0x1b8(%rbp), %rdi
movl -0x6c4(%rbp), %edx
movl $0x4, %esi
callq 0x8040
movl %eax, -0x8dc(%rbp)
jmp 0x209a5
movl -0x8dc(%rbp), %eax
movl %eax, -0x24(%rbp)
cmpl $0x0, -0x24(%rbp)
je 0x20a2d
movq 0x12635(%rip), %rdi     # 0x32ff0
leaq 0x194f(%rip), %rsi      # 0x22311
callq 0x8420
movq %rax, -0x8e8(%rbp)
jmp 0x209d0
movq -0x6d0(%rbp), %rax
movq 0x8(%rax), %rdi
callq 0x8410
movq %rax, -0x8f0(%rbp)
jmp 0x209e9
movq -0x8f0(%rbp), %rsi
movq -0x8e8(%rbp), %rdi
callq 0x8420
movq %rax, -0x8f8(%rbp)
jmp 0x20a05
movq -0x8f8(%rbp), %rdi
movq 0x12565(%rip), %rsi     # 0x32f78
callq 0x8480
jmp 0x20a1a
movb $0x0, -0x1(%rbp)
movl $0x1, -0x1c8(%rbp)
jmp 0x20b53
movq -0x1b8(%rbp), %rdi
callq 0x8640
movl %eax, -0x8fc(%rbp)
jmp 0x20a41
movl -0x8fc(%rbp), %eax
movl %eax, -0x24(%rbp)
cmpl $0x65, -0x24(%rbp)
je 0x20ac9
movq 0x12599(%rip), %rdi     # 0x32ff0
leaq 0x166d(%rip), %rsi      # 0x220cb
callq 0x8420
movq %rax, -0x908(%rbp)
jmp 0x20a6c
movq -0x6d0(%rbp), %rax
movq 0x8(%rax), %rdi
callq 0x8410
movq %rax, -0x910(%rbp)
jmp 0x20a85
movq -0x910(%rbp), %rsi
movq -0x908(%rbp), %rdi
callq 0x8420
movq %rax, -0x918(%rbp)
jmp 0x20aa1
movq -0x918(%rbp), %rdi
movq 0x124c9(%rip), %rsi     # 0x32f78
callq 0x8480
jmp 0x20ab6
movb $0x0, -0x1(%rbp)
movl $0x1, -0x1c8(%rbp)
jmp 0x20b53
movq -0x1b8(%rbp), %rdi
callq 0x8850
jmp 0x20ad7
movq -0x1b8(%rbp), %rdi
callq 0x8140
jmp 0x20ae5
jmp 0x20ae7
movl -0x6c0(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x6c0(%rbp)
jmp 0x205f7
jmp 0x20afd
movl -0x6bc(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x6bc(%rbp)
jmp 0x205bc
jmp 0x20b13
movq -0x6d0(%rbp), %rax
movq 0x8(%rax), %rdi
leaq 0x16ef(%rip), %rsi      # 0x22214
xorl %eax, %eax
movl %eax, %ecx
leaq -0x20(%rbp), %r8
movq %rcx, %rdx
callq 0x85e0
jmp 0x20b37
movq -0x1b8(%rbp), %rdi
callq 0x8720
jmp 0x20b45
movb $0x1, -0x1(%rbp)
movl $0x1, -0x1c8(%rbp)
leaq -0x1b0(%rbp), %rdi
callq 0x8340
movb -0x1(%rbp), %al
andb $0x1, %al
addq $0x920, %rsp            # imm = 0x920
popq %rbp
retq
leaq -0x1b0(%rbp), %rdi
callq 0x8340
movq -0x1c0(%rbp), %rdi
callq 0x87c0
nopw %cs:(%rax,%rax)