// File: /workspace/github_cpp_makefile_star2_O3/UBOdin[P]jitd-cpp/src/jitd_tester.cpp
// Function: jitd_test(JITD<Record, PureLocalPolicy<Record>>&, std::istream&, bool, int)
int jitd_test(
  JITD<Record, JITD_TEST_POLICY> &jitd, 
  istream &input, 
  bool interactive, 
  int per_op_sleep_ms
) {
  string line;
  vector<std::thread> threads;
  
  timeval global_start, global_end;
  gettimeofday(&global_start, NULL);
  
  if(interactive) { cout << "jitd> "; cout.flush(); }
  while(getline(input, line)){
    istringstream toks(line);
    string op;
    
    CASE_1("--") {
      // comment, ignore
      
    ///////////////// MUTATOR OPERATIONS /////////////////
    } CASE("init") {
      timeval start, end;
      RecordBuffer data = buffer_cmd(toks);
      gettimeofday(&start, NULL);
      jitd.init(data);
      gettimeofday(&end, NULL);
      cout << "Init JITD: " << total_time(start, end) << " us" << endl;
    } CASE("insert") {
      timeval start, end;
      RecordBuffer data = buffer_cmd(toks);
      gettimeofday(&start, NULL);
      jitd.insert(data);
      gettimeofday(&end, NULL);
      cout << "Insert into JITD: " << total_time(start, end) << " us" << endl;
    } CASE("remove") {
      timeval start, end;
      RecordBuffer data = buffer_cmd(toks);
      gettimeofday(&start, NULL);
      jitd.remove(data);
      gettimeofday(&end, NULL);
      cout << "Delete from JITD: " << total_time(start, end) << " us" << endl;

    ///////////////// POLICY OPERATIONS /////////////////    
    } CASE("policy_set") {
      
      CASE_1("cracksort"){
        int threshold;
        toks >> threshold;
        cout << "Switching to Crack/Sort Policy with Threshold of " << threshold << endl;
        jitd.getPolicy()->setScoreFunction(
          std::bind(CrackOrSortArraysBigFirst<Record>, threshold, std::placeholders::_1)
        );
        jitd.reinitPolicy();
      } else {
        cerr << "Invalid Policy " << op << endl;
        exit(-1);
      }

    } CASE("policy_act_once") {
      timeval start, end;
      jitd.getPolicy()->describeNext();
      JITD_TEST_POLICY *policy = jitd.getPolicy();
      gettimeofday(&start, NULL);
      policy->act();
      gettimeofday(&end, NULL);
      cout << "Policy Action: " << total_time(start, end) << " us" << endl;

    } CASE("policy_act_for") {
      int target_steps;
      double used_microseconds = 0;
      timeval start, end;
      JITD_TEST_POLICY *policy = jitd.getPolicy();

      toks >> target_steps;

      for(int x = 0; x < target_steps; x++){
        gettimeofday(&start, NULL);
        policy->act();
        gettimeofday(&end, NULL);
        used_microseconds += total_time(start, end);
      }

      cout << "Policy " << target_steps << " Actions: " << used_microseconds << " us" << endl;

    } CASE("policy_act_until_done") {
      bool more_work_to_do = true;
      int steps_taken;
      timeval start, end;
      JITD_TEST_POLICY *policy = jitd.getPolicy();

      gettimeofday(&start, NULL);
      while(more_work_to_do){
        steps_taken++;
        more_work_to_do = policy->act();
      }
      gettimeofday(&end, NULL);
      cout << "Policy " << steps_taken << " Actions: " << total_time(start, end) << " us" << endl;


    ///////////////// ACCESS OPERATIONS /////////////////    
    } CASE("scan") {
      Iterator<Record> iter = jitd.iterator();
      timeval start, end;
      int idx = 0;
      
      while(!toks.eof() && !iter->atEnd()){
        CASE_1("flush") { // no argument
          int startidx = idx;
          gettimeofday(&start, NULL);
          while(!iter->atEnd()){ iter->next(); idx++; }
          gettimeofday(&end, NULL);
          cout << "Records Flushed: " << (idx - startidx) << endl;
          cout << "Flush Time: " << total_time(start, end) << " us" << endl;
        } CASE("full") { // no argument
          while(!iter->atEnd()){ 
            cout << idx << " -> " << iter->get()->key << endl;
            iter->next(); 
            idx++; 
          }
        } CASE("step") { // no argument
          cout << idx << " -> " << iter->get()->key << endl;
          idx++;
          iter->next();
        } CASE("next") { // [CNT]
          int cnt;
          for(toks >> cnt; (cnt > 0) && !iter->atEnd(); cnt--){
            cout << idx << " -> " << iter->get()->key << endl;
            idx++;
            iter->next();
          }
        } CASE("quiet_next") { // [CNT]
          int cnt, startidx = idx;
          for(toks >> cnt; (cnt > 0) && !iter->atEnd(); cnt--){ 
            idx++;
            iter->next();
          }
        } CASE("seek") { // [TARGET]
          Record target;
          toks >> target.key;
          target.value = NULL;
          gettimeofday(&start, NULL);
          iter->seek(target);
          gettimeofday(&end, NULL);
          cout << "Seek Time: " << total_time(start, end) << " us" << endl;
        } CASE("quiet_seek") { // [TARGET]
          Record target;
          toks >> target.key;
          target.value = NULL;
          iter->seek(target);
        }
      }
    } CASE("random_scan") {
      int time_in_ms, max_key, key_cnt;
      long int scan_count = 0;
      timeval start, end;
      Record target;
      target.value = NULL;
      toks >> time_in_ms >> max_key >> key_cnt;
      gettimeofday(&start, NULL);
      gettimeofday(&end, NULL);
      
      cout << "Scanning for " << time_in_ms << " s in [0,"
           << max_key << ") -> " << key_cnt << " keys/read" << endl;
      while(total_time(start, end) < time_in_ms*1000){
        Iterator<Record> iter = jitd.iterator();
        target.key = rand() % max_key;
        iter->seek(target);
        for(; key_cnt > 0; key_cnt--) { iter->next(); }
        scan_count++;
        
        gettimeofday(&end, NULL);
      }
      cout << "Random Scan: " << scan_count << " scans over "
           << total_time(start, end)/(1000*1000) << " s" << endl 
           << "Rate: " 
             << ((1000*1000*scan_count) / total_time(start, end))
             << " scans/sec" << endl;
    
    } CASE("spawn") {
      string file;
      toks >> file;
      threads.emplace_back(run_test_thread, &jitd, file, 0);

    } CASE("spawn_slow") {
      int delay_ms;
      string file;
      toks >> delay_ms >> file;
      threads.emplace_back(run_test_thread, &jitd, file, delay_ms);
    
    } CASE("spawn_updates") {
      Key max_key;
      int size;
      long int low_mark;
      long int high_mark;
      int seed = 42;
      int per_op_sleep_ms;
      int runtime_ms;
      
      toks >> max_key >> size >> low_mark >> high_mark >> per_op_sleep_ms >> runtime_ms;
      
      threads.emplace_back(run_update_thread, &jitd, max_key, size, low_mark, high_mark, seed, per_op_sleep_ms, runtime_ms);

    } CASE("run") {
      string file;
      toks >> file;
      run_test_thread(&jitd, file, per_op_sleep_ms);

    } CASE("time") {
      timeval end; 
      gettimeofday(&end, NULL);
      cout << "Time now: " << total_time(global_start, end)/(1000*1000) << endl;
    
    } CASE("sleep") {
      int ms;
      toks >> ms;
      this_thread::sleep_for(chrono::milliseconds(ms));
      
    } CASE("size") {
      cout << jitd.size() << " records" << endl;
    } CASE("dump") {
      jitd.printDebug();
      
    ///////////////// OOOPS /////////////////
    } else {
      cerr << "Invalid Test Operation: " << op << endl;
      exit(-1);
    }

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x328, %rsp            # imm = 0x328
movl %ecx, -0xb8(%rbp)
movl %edx, %ebx
movq %rsi, %r12
movq %rdi, -0xa0(%rbp)
leaq -0x180(%rbp), %rcx
movq %rcx, -0x10(%rcx)
xorl %eax, %eax
movq %rax, -0x8(%rcx)
movb $0x0, (%rcx)
movq %rax, -0xf0(%rbp)
xorpd %xmm0, %xmm0
movapd %xmm0, -0x100(%rbp)
leaq -0x1b8(%rbp), %rdi
xorl %esi, %esi
callq 0x4380
movl %ebx, -0xdc(%rbp)
testl %ebx, %ebx
je 0x97cf
movq 0xe816(%rip), %rdi      # 0x17fc8
leaq 0x7e52(%rip), %rsi      # 0x1160b
movl $0x6, %edx
callq 0x42d0
movq 0xe7fe(%rip), %rdi      # 0x17fc8
callq 0x4190
leaq -0x40(%rbp), %r15
movq -0xa0(%rbp), %rax
leaq 0x10(%rax), %rcx
movq %rcx, -0xd8(%rbp)
addq $0x30, %rax
movq %rax, -0x198(%rbp)
movl -0xb8(%rbp), %eax
imulq $0x10624dd3, %rax, %rcx # imm = 0x10624DD3
shrq $0x26, %rcx
movq %rcx, -0x1a8(%rbp)
imulq $-0x3e8, %rcx, %rcx     # imm = 0xFC18
addq %rax, %rcx
imulq $0xf4240, %rcx, %rax    # imm = 0xF4240
movq %rax, -0x1a0(%rbp)
leaq -0x50(%rbp), %rbx
movq (%r12), %rax
movq -0x18(%rax), %rdi
addq %r12, %rdi
movl $0xa, %esi
callq 0x4250
movsbl %al, %edx
movq %r12, %rdi
leaq -0x190(%rbp), %rsi
callq 0x4420
movq (%rax), %rcx
movq -0x18(%rcx), %rcx
testb $0x5, 0x20(%rax,%rcx)
jne 0xb546
leaq -0x348(%rbp), %r14
movq %r14, %rdi
leaq -0x190(%rbp), %rsi
movl $0x8, %edx
callq 0x43b0
leaq -0x70(%rbp), %rax
movq %rax, -0x80(%rbp)
movq $0x0, -0x78(%rbp)
movb $0x0, -0x70(%rbp)
movq %r14, %rdi
leaq -0x80(%rbp), %rsi
callq 0x4300
movq %r15, -0x50(%rbp)
movq %rbx, %rdi
leaq 0x77e7(%rip), %rsi      # 0x1108d
leaq 0x77e2(%rip), %rdx      # 0x1108f
callq 0x78c0
movq -0x48(%rbp), %rdx
cmpq -0x78(%rbp), %rdx
jne 0x98d9
movq -0x50(%rbp), %r14
testq %rdx, %rdx
je 0x98e2
movq -0x80(%rbp), %rsi
movq %r14, %rdi
callq 0x42a0
testl %eax, %eax
sete %r13b
jmp 0x98e5
movq -0x50(%rbp), %r14
xorl %r13d, %r13d
jmp 0x98e5
movb $0x1, %r13b
cmpq %r15, %r14
je 0x98f9
movq -0x40(%rbp), %rsi
incq %rsi
movq %r14, %rdi
callq 0x4280
testb %r13b, %r13b
je 0x990a
movq 0xe6c3(%rip), %r13      # 0x17fc8
jmp 0x9dba
movq %r15, -0x50(%rbp)
movq %rbx, %rdi
leaq 0x7cfa(%rip), %rsi      # 0x11612
leaq 0x7cf7(%rip), %rdx      # 0x11616
callq 0x78c0
movq -0x48(%rbp), %rdx
cmpq -0x78(%rbp), %rdx
leaq -0x348(%rbp), %rsi
jne 0x9959
movq -0x50(%rbp), %r14
testq %rdx, %rdx
je 0x9962
movq -0x80(%rbp), %rsi
movq %r14, %rdi
callq 0x42a0
testl %eax, %eax
leaq -0x348(%rbp), %rsi
sete %r13b
jmp 0x9965
movq -0x50(%rbp), %r14
xorl %r13d, %r13d
jmp 0x9965
movb $0x1, %r13b
cmpq %r15, %r14
je 0x9980
movq -0x40(%rbp), %rsi
incq %rsi
movq %r14, %rdi
callq 0x4280
leaq -0x348(%rbp), %rsi
testb %r13b, %r13b
je 0x99d4
leaq -0x90(%rbp), %rdi
callq 0xfd12
movq 0xe630(%rip), %r13      # 0x17fc8
movq %rbx, %rdi
xorl %esi, %esi
callq 0x4380
movq -0x90(%rbp), %rcx
movq -0x88(%rbp), %rax
movq %rcx, -0x150(%rbp)
movq %rax, -0x148(%rbp)
testq %rax, %rax
je 0x9a2c
movq 0xe5f6(%rip), %rcx      # 0x17fc0
cmpb $0x0, (%rcx)
je 0x9a28
incl 0x8(%rax)
jmp 0x9a2c
movq %r15, -0x50(%rbp)
movq %rbx, %rdi
leaq 0x7746(%rip), %rsi      # 0x11128
leaq 0x7745(%rip), %rdx      # 0x1112e
callq 0x78c0
movq -0x48(%rbp), %rdx
cmpq -0x78(%rbp), %rdx
jne 0x9a1c
movq -0x50(%rbp), %r14
testq %rdx, %rdx
je 0x9ad6
movq -0x80(%rbp), %rsi
movq %r14, %rdi
callq 0x42a0
testl %eax, %eax
sete %r13b
jmp 0x9ad9
movq -0x50(%rbp), %r14
xorl %r13d, %r13d
jmp 0x9ad9
lock
incl 0x8(%rax)
movq -0xa0(%rbp), %rdi
leaq -0x150(%rbp), %rsi
callq 0xbfd6
movq -0x148(%rbp), %rdi
testq %rdi, %rdi
je 0x9a50
callq 0x65c2
leaq -0x60(%rbp), %rdi
xorl %esi, %esi
callq 0x4380
movl $0xb, %edx
movq %r13, %rdi
leaq 0x7bad(%rip), %rsi      # 0x11617
callq 0x42d0
movq %rbx, %rdi
leaq -0x60(%rbp), %rsi
callq 0xfce8
movq %r13, %rdi
callq 0x4360
movq %rax, %r14
movl $0x3, %edx
movq %rax, %rdi
leaq 0x7624(%rip), %rsi      # 0x110b9
callq 0x42d0
movq (%r14), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x4250
movsbl %al, %esi
movq %r14, %rdi
callq 0x4030
movq %rax, %rdi
callq 0x4190
movq -0x88(%rbp), %rdi
testq %rdi, %rdi
je 0x9dba
jmp 0x9db5
movb $0x1, %r13b
cmpq %r15, %r14
je 0x9aed
movq -0x40(%rbp), %rsi
incq %rsi
movq %r14, %rdi
callq 0x4280
testb %r13b, %r13b
je 0x9b48
leaq -0x90(%rbp), %rdi
leaq -0x348(%rbp), %rsi
callq 0xfd12
movq 0xe4bc(%rip), %r13      # 0x17fc8
movq %rbx, %rdi
xorl %esi, %esi
callq 0x4380
movq -0x90(%rbp), %rcx
movq -0x88(%rbp), %rax
movq %rcx, -0x140(%rbp)
movq %rax, -0x138(%rbp)
testq %rax, %rax
je 0x9ba0
movq 0xe482(%rip), %rcx      # 0x17fc0
cmpb $0x0, (%rcx)
je 0x9b9c
incl 0x8(%rax)
jmp 0x9ba0
movq %r15, -0x50(%rbp)
movq %rbx, %rdi
leaq 0x7ae0(%rip), %rsi      # 0x11636
leaq 0x7adf(%rip), %rdx      # 0x1163c
callq 0x78c0
movq -0x48(%rbp), %rdx
cmpq -0x78(%rbp), %rdx
jne 0x9b90
movq -0x50(%rbp), %r14
testq %rdx, %rdx
je 0x9c4a
movq -0x80(%rbp), %rsi
movq %r14, %rdi
callq 0x42a0
testl %eax, %eax
sete %r13b
jmp 0x9c4d
movq -0x50(%rbp), %r14
xorl %r13d, %r13d
jmp 0x9c4d
lock
incl 0x8(%rax)
movq -0xa0(%rbp), %rdi
leaq -0x140(%rbp), %rsi
callq 0xb980
movq -0x138(%rbp), %rdi
testq %rdi, %rdi
je 0x9bc4
callq 0x65c2
leaq -0x60(%rbp), %rdi
xorl %esi, %esi
callq 0x4380
movl $0x12, %edx
movq %r13, %rdi
leaq 0x7a45(%rip), %rsi      # 0x11623
callq 0x42d0
movq %rbx, %rdi
leaq -0x60(%rbp), %rsi
callq 0xfce8
movq %r13, %rdi
callq 0x4360
movq %rax, %r14
movl $0x3, %edx
movq %rax, %rdi
leaq 0x74b0(%rip), %rsi      # 0x110b9
callq 0x42d0
movq (%r14), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x4250
movsbl %al, %esi
movq %r14, %rdi
callq 0x4030
movq %rax, %rdi
callq 0x4190
movq -0x88(%rbp), %rdi
testq %rdi, %rdi
je 0x9dba
jmp 0x9db5
movb $0x1, %r13b
cmpq %r15, %r14
je 0x9c61
movq -0x40(%rbp), %rsi
incq %rsi
movq %r14, %rdi
callq 0x4280
testb %r13b, %r13b
je 0x9cbc
leaq -0x90(%rbp), %rdi
leaq -0x348(%rbp), %rsi
callq 0xfd12
movq 0xe348(%rip), %r13      # 0x17fc8
movq %rbx, %rdi
xorl %esi, %esi
callq 0x4380
movq -0x90(%rbp), %rcx
movq -0x88(%rbp), %rax
movq %rcx, -0x130(%rbp)
movq %rax, -0x128(%rbp)
testq %rax, %rax
je 0x9d14
movq 0xe30e(%rip), %rcx      # 0x17fc0
cmpb $0x0, (%rcx)
je 0x9d10
incl 0x8(%rax)
jmp 0x9d14
movq %r15, -0x50(%rbp)
movq %rbx, %rdi
leaq 0x7986(%rip), %rsi      # 0x11650
leaq 0x7989(%rip), %rdx      # 0x1165a
callq 0x78c0
movq -0x48(%rbp), %rdx
cmpq -0x78(%rbp), %rdx
jne 0x9d04
movq -0x50(%rbp), %r14
testq %rdx, %rdx
je 0x9e55
movq -0x80(%rbp), %rsi
movq %r14, %rdi
callq 0x42a0
testl %eax, %eax
sete %r13b
jmp 0x9e58
movq -0x50(%rbp), %r14
xorl %r13d, %r13d
jmp 0x9e58
lock
incl 0x8(%rax)
movq -0xa0(%rbp), %rdi
leaq -0x130(%rbp), %rsi
callq 0xbc78
movq -0x128(%rbp), %rdi
testq %rdi, %rdi
je 0x9d38
callq 0x65c2
leaq -0x60(%rbp), %rdi
xorl %esi, %esi
callq 0x4380
movl $0x12, %edx
movq %r13, %rdi
leaq 0x78eb(%rip), %rsi      # 0x1163d
callq 0x42d0
movq %rbx, %rdi
leaq -0x60(%rbp), %rsi
callq 0xfce8
movq %r13, %rdi
callq 0x4360
movq %rax, %r14
movl $0x3, %edx
movq %rax, %rdi
leaq 0x733c(%rip), %rsi      # 0x110b9
callq 0x42d0
movq (%r14), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x4250
movsbl %al, %esi
movq %r14, %rdi
callq 0x4030
movq %rax, %rdi
callq 0x4190
movq -0x88(%rbp), %rdi
testq %rdi, %rdi
je 0x9dba
callq 0x65c2
cmpb $0x0, -0xdc(%rbp)
je 0x9ddf
movl $0x6, %edx
movq %r13, %rdi
leaq 0x7839(%rip), %rsi      # 0x1160b
callq 0x42d0
movq %r13, %rdi
callq 0x4190
cmpl $0x0, -0xb8(%rbp)
jle 0x9e18
movq -0x1a8(%rbp), %rax
movq %rax, -0x50(%rbp)
movq -0x1a0(%rbp), %rax
movq %rax, -0x48(%rbp)
movq %rbx, %rdi
movq %rbx, %rsi
callq 0x40a0
cmpl $-0x1, %eax
jne 0x9e18
callq 0x4040
cmpl $0x4, (%rax)
je 0x9dfe
movq -0x80(%rbp), %rdi
leaq -0x70(%rbp), %rax
cmpq %rax, %rdi
je 0x9e31
movq -0x70(%rbp), %rsi
incq %rsi
callq 0x4280
leaq -0x348(%rbp), %rdi
movq 0xe179(%rip), %rsi      # 0x17fb8
callq 0x4310
leaq -0x2d0(%rbp), %rdi
callq 0x40b0
jmp 0x9824
movb $0x1, %r13b
cmpq %r15, %r14
je 0x9e6c
movq -0x40(%rbp), %rsi
incq %rsi
movq %r14, %rdi
callq 0x4280
testb %r13b, %r13b
je 0x9ec9
leaq -0x348(%rbp), %rdi
leaq -0x80(%rbp), %rsi
callq 0x4300
movq %r15, -0x50(%rbp)
movq %rbx, %rdi
leaq 0x77cc(%rip), %rsi      # 0x1165b
leaq 0x77ce(%rip), %rdx      # 0x11664
callq 0x78c0
movq -0x48(%rbp), %rdx
cmpq -0x78(%rbp), %rdx
jne 0x9f13
movq -0x50(%rbp), %r14
testq %rdx, %rdx
je 0xa031
movq -0x80(%rbp), %rsi
movq %r14, %rdi
callq 0x42a0
testl %eax, %eax
sete %r13b
jmp 0xa034
movq %r15, -0x50(%rbp)
movq %rbx, %rdi
leaq 0x77d0(%rip), %rsi      # 0x116a7
leaq 0x77d8(%rip), %rdx      # 0x116b6
callq 0x78c0
movq -0x48(%rbp), %rdx
cmpq -0x78(%rbp), %rdx
jne 0x9f0a
movq -0x50(%rbp), %r14
testq %rdx, %rdx
je 0x9f1f
movq -0x80(%rbp), %rsi
movq %r14, %rdi
callq 0x42a0
testl %eax, %eax
sete %r13b
jmp 0x9f22
movq -0x50(%rbp), %r14
xorl %r13d, %r13d
jmp 0x9f22
movq -0x50(%rbp), %r14
xorl %r13d, %r13d
jmp 0xa034
movb $0x1, %r13b
cmpq %r15, %r14
je 0x9f36
movq -0x40(%rbp), %rsi
incq %rsi
movq %r14, %rdi
callq 0x4280
testb %r13b, %r13b
je 0x9fdd
movq -0xd8(%rbp), %r14
movq %r14, %rdi
callq 0xc26c
movq 0xe073(%rip), %r13      # 0x17fc8
movq %rbx, %rdi
xorl %esi, %esi
callq 0x4380
movq %r14, %rdi
callq 0xc314
leaq -0x60(%rbp), %rdi
xorl %esi, %esi
callq 0x4380
movl $0xf, %edx
movq %r13, %rdi
leaq 0x7736(%rip), %rsi      # 0x116b7
callq 0x42d0
movq %rbx, %rdi
leaq -0x60(%rbp), %rsi
callq 0xfce8
movq %r13, %rdi
callq 0x4360
movq %rax, %r14
movl $0x3, %edx
movq %rax, %rdi
leaq 0x710d(%rip), %rsi      # 0x110b9
callq 0x42d0
movq (%r14), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x4250
movsbl %al, %esi
movq %r14, %rdi
callq 0x4030
movq %rax, %rdi
callq 0x4190
jmp 0x9dba
movq %r15, -0x50(%rbp)
movq %rbx, %rdi
leaq 0x76dc(%rip), %rsi      # 0x116c7
leaq 0x76e3(%rip), %rdx      # 0x116d5
callq 0x78c0
movq -0x48(%rbp), %rdx
cmpq -0x78(%rbp), %rdx
jne 0xa025
movq -0x50(%rbp), %r14
testq %rdx, %rdx
je 0xa144
movq -0x80(%rbp), %rsi
movq %r14, %rdi
callq 0x42a0
testl %eax, %eax
sete %r13b
jmp 0xa147
movq -0x50(%rbp), %r14
xorl %r13d, %r13d
jmp 0xa147
movb $0x1, %r13b
cmpq %r15, %r14
je 0xa048
movq -0x40(%rbp), %rsi
incq %rsi
movq %r14, %rdi
callq 0x4280
testb %r13b, %r13b
je 0xb5e1
leaq -0x348(%rbp), %rdi
movq %rbx, %rsi
callq 0x4150
movq 0xdf61(%rip), %r13      # 0x17fc8
movl $0x31, %edx
movq %r13, %rdi
leaq 0x75ef(%rip), %rsi      # 0x11665
callq 0x42d0
movl -0x50(%rbp), %esi
movq %r13, %rdi
callq 0x43f0
movq %rax, %r14
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x4250
movsbl %al, %esi
movq %r14, %rdi
callq 0x4030
movq %rax, %rdi
callq 0x4190
movl -0x50(%rbp), %r14d
xorpd %xmm0, %xmm0
movapd %xmm0, -0x120(%rbp)
movapd %xmm0, -0x110(%rbp)
movl $0x10, %edi
callq 0x4270
leaq 0x20b1(%rip), %rcx      # 0xc18a
movq %rcx, (%rax)
movl %r14d, 0x8(%rax)
movq %rax, -0x120(%rbp)
leaq 0x495c(%rip), %rax      # 0xea4a
movq %rax, -0x108(%rbp)
leaq 0x4970(%rip), %rax      # 0xea6c
movq %rax, -0x110(%rbp)
movq -0x198(%rbp), %rdi
leaq -0x120(%rbp), %rsi
callq 0xe19c
movq -0x110(%rbp), %rax
testq %rax, %rax
je 0xa133
leaq -0x120(%rbp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
movq -0xa0(%rbp), %rdi
callq 0xc1fc
jmp 0x9dba
movb $0x1, %r13b
cmpq %r15, %r14
je 0xa15b
movq -0x40(%rbp), %rsi
incq %rsi
movq %r14, %rdi
callq 0x4280
testb %r13b, %r13b
je 0xa1ef
leaq -0x348(%rbp), %rdi
leaq -0x90(%rbp), %rsi
callq 0x4150
movq 0xde4a(%rip), %r13      # 0x17fc8
cmpl $0x0, -0x90(%rbp)
jle 0xa243
xorl %r14d, %r14d
xorpd %xmm0, %xmm0
movsd %xmm0, -0x98(%rbp)
movq %rbx, %rdi
xorl %esi, %esi
callq 0x4380
movq -0xd8(%rbp), %rdi
callq 0xc314
leaq -0x60(%rbp), %r15
movq %r15, %rdi
xorl %esi, %esi
callq 0x4380
movq %rbx, %rdi
movq %r15, %rsi
callq 0xfce8
movsd -0x98(%rbp), %xmm1
addsd %xmm0, %xmm1
movsd %xmm1, -0x98(%rbp)
incl %r14d
cmpl -0x90(%rbp), %r14d
leaq -0x40(%rbp), %r15
jl 0xa19a
jmp 0xa24f
movq %r15, -0x50(%rbp)
movq %rbx, %rdi
leaq 0x74e4(%rip), %rsi      # 0x116e1
leaq 0x74f2(%rip), %rdx      # 0x116f6
callq 0x78c0
movq -0x48(%rbp), %rdx
cmpq -0x78(%rbp), %rdx
jne 0xa237
movq -0x50(%rbp), %r14
testq %rdx, %rdx
je 0xa2db
movq -0x80(%rbp), %rsi
movq %r14, %rdi
callq 0x42a0
testl %eax, %eax
sete %r13b
jmp 0xa2de
movq -0x50(%rbp), %r14
xorl %r13d, %r13d
jmp 0xa2de
xorpd %xmm0, %xmm0
movsd %xmm0, -0x98(%rbp)
movl $0x7, %edx
movq %r13, %rdi
leaq 0x7441(%rip), %rsi      # 0x1169f
callq 0x42d0
movl -0x90(%rbp), %esi
movq %r13, %rdi
callq 0x43f0
movq %rax, %r14
movl $0xa, %edx
movq %rax, %rdi
leaq 0x7453(%rip), %rsi      # 0x116d6
callq 0x42d0
movq %r14, %rdi
movsd -0x98(%rbp), %xmm0
callq 0x4360
movq %rax, %r14
movl $0x3, %edx
movq %rax, %rdi
leaq 0x6e0f(%rip), %rsi      # 0x110b9
callq 0x42d0
movq (%r14), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x4250
movsbl %al, %esi
movq %r14, %rdi
callq 0x4030
movq %rax, %rdi
callq 0x4190
jmp 0x9dba
movb $0x1, %r13b
cmpq %r15, %r14
je 0xa2f2
movq -0x40(%rbp), %rsi
incq %rsi
movq %r14, %rdi
callq 0x4280
testb %r13b, %r13b
je 0xa3cf
movq %rbx, %rdi
xorl %esi, %esi
callq 0x4380
movq -0xd8(%rbp), %rdi
movq 0xdcb5(%rip), %r13      # 0x17fc8
movl -0xbc(%rbp), %r14d
callq 0xc314
incl %r14d
testb %al, %al
movq -0xd8(%rbp), %rdi
jne 0xa31a
movl %r14d, -0xbc(%rbp)
leaq -0x60(%rbp), %rdi
xorl %esi, %esi
callq 0x4380
movl $0x7, %edx
movq %r13, %rdi
leaq 0x7351(%rip), %rsi      # 0x1169f
callq 0x42d0
movq %r13, %rdi
movl -0xbc(%rbp), %esi
callq 0x43f0
movq %rax, %r14
movl $0xa, %edx
movq %rax, %rdi
leaq 0x7363(%rip), %rsi      # 0x116d6
callq 0x42d0
movq %rbx, %rdi
leaq -0x60(%rbp), %rsi
callq 0xfce8
movq %r14, %rdi
callq 0x4360
movq %rax, %r14
movl $0x3, %edx
movq %rax, %rdi
leaq 0x6d1b(%rip), %rsi      # 0x110b9
callq 0x42d0
movq (%r14), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x4250
movsbl %al, %esi
movq %r14, %rdi
callq 0x4030
movq %rax, %rdi
callq 0x4190
jmp 0x9dba
movq %r15, -0x50(%rbp)
movq %rbx, %rdi
leaq 0x6cb8(%rip), %rsi      # 0x11095
leaq 0x6cb5(%rip), %rdx      # 0x11099
callq 0x78c0
movq -0x48(%rbp), %rdx
cmpq -0x78(%rbp), %rdx
jne 0xa410
movq -0x50(%rbp), %r14
testq %rdx, %rdx
je 0xa419
movq -0x80(%rbp), %rsi
movq %r14, %rdi
callq 0x42a0
testl %eax, %eax
sete %r13b
jmp 0xa41c
movq -0x50(%rbp), %r14
xorl %r13d, %r13d
jmp 0xa41c
movb $0x1, %r13b
cmpq %r15, %r14
je 0xa430
movq -0x40(%rbp), %rsi
incq %rsi
movq %r14, %rdi
callq 0x4280
testb %r13b, %r13b
je 0xaba5
leaq -0x60(%rbp), %rdi
movq -0xa0(%rbp), %rsi
callq 0xc67e
movq 0xdb78(%rip), %r13      # 0x17fc8
movq -0x348(%rbp), %rax
movq -0x18(%rax), %rax
testb $0x2, -0x328(%rbp,%rax)
jne 0xabe6
movl $0x0, -0x98(%rbp)
movq -0x60(%rbp), %rdi
movq (%rdi), %rax
callq *0x18(%rax)
testb %al, %al
jne 0xabe6
leaq -0x348(%rbp), %rdi
leaq -0x80(%rbp), %rsi
callq 0x4300
movq %r15, -0x50(%rbp)
movq %rbx, %rdi
leaq 0x7254(%rip), %rsi      # 0x116f7
leaq 0x7252(%rip), %rdx      # 0x116fc
callq 0x78c0
movq -0x48(%rbp), %rdx
cmpq -0x78(%rbp), %rdx
jne 0xa4d6
movq -0x50(%rbp), %r14
testq %rdx, %rdx
je 0xa4df
movq -0x80(%rbp), %rsi
movq %r14, %rdi
callq 0x42a0
testl %eax, %eax
sete %r13b
jmp 0xa4e2
movq -0x50(%rbp), %r14
xorl %r13d, %r13d
jmp 0xa4e2
movb $0x1, %r13b
cmpq %r15, %r14
je 0xa4f6
movq -0x40(%rbp), %rsi
incq %rsi
movq %r14, %rdi
callq 0x4280
testb %r13b, %r13b
je 0xa530
xorl %r14d, %r14d
leaq -0x90(%rbp), %rdi
xorl %esi, %esi
callq 0x4380
movq 0xdab5(%rip), %r13      # 0x17fc8
movq -0x60(%rbp), %rdi
movq (%rdi), %rax
callq *0x18(%rax)
testb %al, %al
jne 0xa57c
movq -0x60(%rbp), %rdi
movq (%rdi), %rax
callq *0x8(%rax)
incl %r14d
jmp 0xa513
movq %r15, -0x50(%rbp)
movq %rbx, %rdi
leaq 0x71de(%rip), %rsi      # 0x1171c
leaq 0x71db(%rip), %rdx      # 0x11720
callq 0x78c0
movq -0x48(%rbp), %rdx
cmpq -0x78(%rbp), %rdx
jne 0xa679
movq -0x50(%rbp), %r14
testq %rdx, %rdx
je 0xa682
movq -0x80(%rbp), %rsi
movq %r14, %rdi
callq 0x42a0
testl %eax, %eax
sete %r13b
jmp 0xa685
leaq -0xd0(%rbp), %rdi
xorl %esi, %esi
callq 0x4380
movl $0x11, %edx
movq %r13, %rdi
leaq 0x7164(%rip), %rsi      # 0x116fd
callq 0x42d0
movq 0xda23(%rip), %rdi      # 0x17fc8
movl %r14d, %esi
callq 0x43f0
movq %rax, %r13
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r13, %rdi
movl $0xa, %esi
callq 0x4250
movsbl %al, %esi
movq %r13, %rdi
callq 0x4030
movq %rax, %rdi
callq 0x4190
movl $0xc, %edx
movq 0xd9e5(%rip), %rdi      # 0x17fc8
leaq 0x7125(%rip), %rsi      # 0x1170f
callq 0x42d0
leaq -0x90(%rbp), %rdi
leaq -0xd0(%rbp), %rsi
callq 0xfce8
movq 0xd9bf(%rip), %rdi      # 0x17fc8
callq 0x4360
movq %rax, %r13
movl $0x3, %edx
movq %rax, %rdi
leaq 0x6a99(%rip), %rsi      # 0x110b9
callq 0x42d0
movq (%r13), %rax
movq -0x18(%rax), %rdi
addq %r13, %rdi
movl $0xa, %esi
callq 0x4250
movsbl %al, %esi
movq %r13, %rdi
callq 0x4030
movq %rax, %rdi
callq 0x4190
addl %r14d, -0x98(%rbp)
movq 0xd96d(%rip), %r13      # 0x17fc8
movq -0x348(%rbp), %rax
movq -0x18(%rax), %rax
testb $0x2, -0x328(%rbp,%rax)
je 0xa473
jmp 0xabe6
movq -0x50(%rbp), %r14
xorl %r13d, %r13d
jmp 0xa685
movb $0x1, %r13b
cmpq %r15, %r14
je 0xa699
movq -0x40(%rbp), %rsi
incq %rsi
movq %r14, %rdi
callq 0x4280
testb %r13b, %r13b
je 0xa72f
movq 0xd91f(%rip), %r13      # 0x17fc8
movq -0x60(%rbp), %rdi
movq (%rdi), %rax
callq *0x18(%rax)
testb %al, %al
jne 0xa65b
movq %r13, %rdi
movl -0x98(%rbp), %esi
callq 0x43f0
movq %rax, %r14
movl $0x4, %edx
movq %rax, %rdi
leaq 0x7096(%rip), %rsi      # 0x1176d
callq 0x42d0
movq -0x60(%rbp), %rdi
movq (%rdi), %rax
callq *(%rax)
movq (%rax), %rsi
movq %r14, %rdi
callq 0x4230
movq %rax, %r14
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x4250
movsbl %al, %esi
movq %r14, %rdi
callq 0x4030
movq %rax, %rdi
callq 0x4190
movq -0x60(%rbp), %rdi
movq (%rdi), %rax
callq *0x8(%rax)
incl -0x98(%rbp)
jmp 0xa6a9
movq %r15, -0x50(%rbp)
movq %rbx, %rdi
leaq 0x6fe4(%rip), %rsi      # 0x11721
leaq 0x6fe1(%rip), %rdx      # 0x11725
callq 0x78c0
movq -0x48(%rbp), %rdx
cmpq -0x78(%rbp), %rdx
jne 0xa770
movq -0x50(%rbp), %r14
testq %rdx, %rdx
je 0xa779
movq -0x80(%rbp), %rsi
movq %r14, %rdi
callq 0x42a0
testl %eax, %eax
sete %r13b
jmp 0xa77c
movq -0x50(%rbp), %r14
xorl %r13d, %r13d
jmp 0xa77c
movb $0x1, %r13b
cmpq %r15, %r14
je 0xa790
movq -0x40(%rbp), %rsi
incq %rsi
movq %r14, %rdi
callq 0x4280
testb %r13b, %r13b
je 0xa814
movq 0xd82c(%rip), %r13      # 0x17fc8
movq %r13, %rdi
movl -0x98(%rbp), %esi
callq 0x43f0
movq %rax, %r14
movl $0x4, %edx
movq %rax, %rdi
leaq 0x6fb1(%rip), %rsi      # 0x1176d
callq 0x42d0
movq -0x60(%rbp), %rdi
movq (%rdi), %rax
callq *(%rax)
movq (%rax), %rsi
movq %r14, %rdi
callq 0x4230
movq %rax, %r14
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x4250
movsbl %al, %esi
movq %r14, %rdi
callq 0x4030
movq %rax, %rdi
callq 0x4190
movq -0x60(%rbp), %rdi
movq (%rdi), %rax
callq *0x8(%rax)
incl -0x98(%rbp)
jmp 0xa65b
movq %r15, -0x50(%rbp)
movq %rbx, %rdi
leaq 0x6f0a(%rip), %rsi      # 0x1172c
leaq 0x6f07(%rip), %rdx      # 0x11730
callq 0x78c0
movq -0x48(%rbp), %rdx
cmpq -0x78(%rbp), %rdx
jne 0xa855
movq -0x50(%rbp), %r14
testq %rdx, %rdx
je 0xa85e
movq -0x80(%rbp), %rsi
movq %r14, %rdi
callq 0x42a0
testl %eax, %eax
sete %r13b
jmp 0xa861
movq -0x50(%rbp), %r14
xorl %r13d, %r13d
jmp 0xa861
movb $0x1, %r13b
cmpq %r15, %r14
je 0xa875
movq -0x40(%rbp), %rsi
incq %rsi
movq %r14, %rdi
callq 0x4280
testb %r13b, %r13b
je 0xa93a
leaq -0x348(%rbp), %rdi
movq %rbx, %rsi
callq 0x4150
movq 0xd734(%rip), %r13      # 0x17fc8
cmpl $0x0, -0x50(%rbp)
jle 0xa65b
movq -0x60(%rbp), %rdi
movq (%rdi), %rax
callq *0x18(%rax)
testb %al, %al
jne 0xa65b
movq %r13, %rdi
movl -0x98(%rbp), %esi
callq 0x43f0
movq %rax, %r14
movl $0x4, %edx
movq %rax, %rdi
leaq 0x6e9d(%rip), %rsi      # 0x1176d
callq 0x42d0
movq -0x60(%rbp), %rdi
movq (%rdi), %rax
callq *(%rax)
movq (%rax), %rsi
movq %r14, %rdi
callq 0x4230
movq %rax, %r14
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x4250
movsbl %al, %esi
movq %r14, %rdi
callq 0x4030
movq %rax, %rdi
callq 0x4190
movq -0x60(%rbp), %rdi
movq (%rdi), %rax
callq *0x8(%rax)
incl -0x98(%rbp)
movl -0x50(%rbp), %eax
leal -0x1(%rax), %ecx
movl %ecx, -0x50(%rbp)
cmpl $0x1, %eax
jg 0xa89e
jmp 0xa65b
movq %r15, -0x50(%rbp)
movq %rbx, %rdi
leaq 0x6dde(%rip), %rsi      # 0x11726
leaq 0x6de1(%rip), %rdx      # 0x11730
callq 0x78c0
movq -0x48(%rbp), %rdx
cmpq -0x78(%rbp), %rdx
jne 0xa97b
movq -0x50(%rbp), %r14
testq %rdx, %rdx
je 0xa984
movq -0x80(%rbp), %rsi
movq %r14, %rdi
callq 0x42a0
testl %eax, %eax
sete %r13b
jmp 0xa987
movq -0x50(%rbp), %r14
xorl %r13d, %r13d
jmp 0xa987
movb $0x1, %r13b
cmpq %r15, %r14
je 0xa99b
movq -0x40(%rbp), %rsi
incq %rsi
movq %r14, %rdi
callq 0x4280
testb %r13b, %r13b
je 0xa9f5
leaq -0x348(%rbp), %rdi
movq %rbx, %rsi
callq 0x4150
movq 0xd612(%rip), %r13      # 0x17fc8
cmpl $0x0, -0x50(%rbp)
jle 0xa65b
movq -0x60(%rbp), %rdi
movq (%rdi), %rax
callq *0x18(%rax)
testb %al, %al
jne 0xa65b
movq -0x60(%rbp), %rdi
movq (%rdi), %rax
callq *0x8(%rax)
incl -0x98(%rbp)
movl -0x50(%rbp), %eax
leal -0x1(%rax), %ecx
movl %ecx, -0x50(%rbp)
cmpl $0x1, %eax
jg 0xa9c0
jmp 0xa65b
movq %r15, -0x50(%rbp)
movq %rbx, %rdi
leaq 0x6d40(%rip), %rsi      # 0x11743
leaq 0x6d3d(%rip), %rdx      # 0x11747
callq 0x78c0
movq -0x48(%rbp), %rdx
cmpq -0x78(%rbp), %rdx
jne 0xaa36
movq -0x50(%rbp), %r14
testq %rdx, %rdx
je 0xaa3f
movq -0x80(%rbp), %rsi
movq %r14, %rdi
callq 0x42a0
testl %eax, %eax
sete %r13b
jmp 0xaa42
movq -0x50(%rbp), %r14
xorl %r13d, %r13d
jmp 0xaa42
movb $0x1, %r13b
cmpq %r15, %r14
je 0xaa56
movq -0x40(%rbp), %rsi
incq %rsi
movq %r14, %rdi
callq 0x4280
testb %r13b, %r13b
je 0xab02
xorpd %xmm0, %xmm0
movapd %xmm0, -0x50(%rbp)
leaq -0x348(%rbp), %rdi
movq %rbx, %rsi
callq 0x4290
movq 0xd54a(%rip), %r13      # 0x17fc8
movq $0x0, -0x48(%rbp)
leaq -0x90(%rbp), %rdi
xorl %esi, %esi
callq 0x4380
movq -0x60(%rbp), %rdi
movq (%rdi), %rax
movq %rbx, %rsi
callq *0x10(%rax)
leaq -0xd0(%rbp), %rdi
xorl %esi, %esi
callq 0x4380
movl $0xb, %edx
movq %r13, %rdi
leaq 0x6c73(%rip), %rsi      # 0x11731
callq 0x42d0
leaq -0x90(%rbp), %rdi
leaq -0xd0(%rbp), %rsi
callq 0xfce8
movq %r13, %rdi
callq 0x4360
movq %rax, %r14
movl $0x3, %edx
movq %rax, %rdi
leaq 0x65c9(%rip), %rsi      # 0x110b9
callq 0x42d0
movq %r14, %rdi
callq 0x4120
jmp 0xa65b
movq %r15, -0x50(%rbp)
movq %rbx, %rdi
leaq 0x6c2d(%rip), %rsi      # 0x1173d
leaq 0x6c30(%rip), %rdx      # 0x11747
callq 0x78c0
movq -0x48(%rbp), %rdx
cmpq -0x78(%rbp), %rdx
jne 0xab43
movq -0x50(%rbp), %r14
testq %rdx, %rdx
je 0xab4c
movq -0x80(%rbp), %rsi
movq %r14, %rdi
callq 0x42a0
testl %eax, %eax
sete %r13b
jmp 0xab4f
movq -0x50(%rbp), %r14
xorl %r13d, %r13d
jmp 0xab4f
movb $0x1, %r13b
cmpq %r15, %r14
je 0xab63
movq -0x40(%rbp), %rsi
incq %rsi
movq %r14, %rdi
callq 0x4280
testb %r13b, %r13b
je 0xa654
xorpd %xmm0, %xmm0
movapd %xmm0, -0x50(%rbp)
leaq -0x348(%rbp), %rdi
movq %rbx, %rsi
callq 0x4290
movq 0xd43d(%rip), %r13      # 0x17fc8
movq $0x0, -0x48(%rbp)
movq -0x60(%rbp), %rdi
movq (%rdi), %rax
movq %rbx, %rsi
callq *0x10(%rax)
jmp 0xa65b
movq %r15, -0x50(%rbp)
movq %rbx, %rdi
leaq 0x6b95(%rip), %rsi      # 0x11748
leaq 0x6b99(%rip), %rdx      # 0x11753
callq 0x78c0
movq -0x48(%rbp), %rdx
cmpq -0x78(%rbp), %rdx
jne 0xabf8
movq -0x50(%rbp), %r14
testq %rdx, %rdx
je 0xac01
movq -0x80(%rbp), %rsi
movq %r14, %rdi
callq 0x42a0
testl %eax, %eax
sete %r13b
jmp 0xac04
movq -0x58(%rbp), %rdi
testq %rdi, %rdi
je 0x9dba
jmp 0x9db5
movq -0x50(%rbp), %r14
xorl %r13d, %r13d
jmp 0xac04
movb $0x1, %r13b
cmpq %r15, %r14
je 0xac18
movq -0x40(%rbp), %rsi
incq %rsi
movq %r14, %rdi
callq 0x4280
testb %r13b, %r13b
je 0xadda
xorpd %xmm0, %xmm0
movapd %xmm0, -0x90(%rbp)
leaq -0x348(%rbp), %rdi
leaq -0xac(%rbp), %rsi
callq 0x4150
movq %rax, %rdi
leaq -0xa8(%rbp), %rsi
callq 0x4150
movq %rax, %rdi
leaq -0xa4(%rbp), %rsi
callq 0x4150
movq %rbx, %rdi
xorl %esi, %esi
callq 0x4380
leaq -0x60(%rbp), %rdi
xorl %esi, %esi
callq 0x4380
movl $0xd, %edx
movq 0xd349(%rip), %rdi      # 0x17fc8
leaq 0x6ace(%rip), %rsi      # 0x11754
callq 0x42d0
movl -0xac(%rbp), %esi
movq 0xd330(%rip), %rdi      # 0x17fc8
callq 0x43f0
movq %rax, %r14
movl $0x9, %edx
movq %rax, %rdi
leaq 0x6ab3(%rip), %rsi      # 0x11762
callq 0x42d0
movl -0xa8(%rbp), %esi
movq %r14, %rdi
callq 0x43f0
movq %rax, %r14
movl $0x5, %edx
movq %rax, %rdi
leaq 0x6a98(%rip), %rsi      # 0x1176c
callq 0x42d0
movl -0xa4(%rbp), %esi
movq %r14, %rdi
callq 0x43f0
movq %rax, %r14
movl $0xa, %edx
movq %rax, %rdi
leaq 0x6a79(%rip), %rsi      # 0x11772
callq 0x42d0
movq (%r14), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x4250
movsbl %al, %esi
movq %r14, %rdi
callq 0x4030
movq %rax, %rdi
callq 0x4190
xorl %r13d, %r13d
movq %rbx, %rdi
leaq -0x60(%rbp), %rsi
callq 0xfce8
imull $0x3e8, -0xac(%rbp), %eax # imm = 0x3E8
xorps %xmm1, %xmm1
cvtsi2sd %eax, %xmm1
ucomisd %xmm0, %xmm1
jbe 0xae26
leaq -0xd0(%rbp), %rdi
movq -0xa0(%rbp), %rsi
callq 0xc67e
callq 0x4070
cltd
idivl -0xa8(%rbp)
movslq %edx, %rax
movq %rax, -0x90(%rbp)
movq -0xd0(%rbp), %rdi
movq (%rdi), %rax
leaq -0x90(%rbp), %rsi
callq *0x10(%rax)
cmpl $0x0, -0xa4(%rbp)
jle 0xadb6
movq -0xd0(%rbp), %rdi
movq (%rdi), %rax
callq *0x8(%rax)
movl -0xa4(%rbp), %eax
leal -0x1(%rax), %ecx
movl %ecx, -0xa4(%rbp)
cmpl $0x1, %eax
jg 0xad95
leaq -0x60(%rbp), %rdi
xorl %esi, %esi
callq 0x4380
movq -0xc8(%rbp), %rdi
testq %rdi, %rdi
je 0xadd2
callq 0x65c2
incq %r13
jmp 0xad28
movq %r15, -0x50(%rbp)
movq %rbx, %rdi
leaq 0x69c2(%rip), %rsi      # 0x117aa
leaq 0x69c0(%rip), %rdx      # 0x117af
callq 0x78c0
movq -0x48(%rbp), %rdx
cmpq -0x78(%rbp), %rdx
jne 0xaf40
movq -0x50(%rbp), %r14
testq %rdx, %rdx
je 0xaf49
movq -0x80(%rbp), %rsi
movq %r14, %rdi
callq 0x42a0
testl %eax, %eax
sete %r13b
jmp 0xaf4c
movl $0xd, %edx
movq 0xd196(%rip), %rdi      # 0x17fc8
leaq 0x6944(%rip), %rsi      # 0x1177d
callq 0x42d0
movq 0xd183(%rip), %rdi      # 0x17fc8
movq %r13, %rsi
callq 0x4230
movq %rax, %r14
movl $0xc, %edx
movq %rax, %rdi
leaq 0x692c(%rip), %rsi      # 0x1178b
callq 0x42d0
movq %rbx, %rdi
leaq -0x60(%rbp), %rsi
callq 0xfce8
divsd 0x6190(%rip), %xmm0     # 0x11008
movq %r14, %rdi
callq 0x4360
movq %rax, %r14
movl $0x2, %edx
movq %rax, %rdi
leaq 0x6776(%rip), %rsi      # 0x11608
callq 0x42d0
movq (%r14), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x4250
movsbl %al, %esi
movq %r14, %rdi
callq 0x4030
movq %rax, %rdi
callq 0x4190
movq %rax, %r14
movl $0x6, %edx
movq %rax, %rdi
leaq 0x68c8(%rip), %rsi      # 0x11798
callq 0x42d0
movq %rbx, %rdi
leaq -0x60(%rbp), %rsi
callq 0xfce8
imulq $0xf4240, %r13, %rax    # imm = 0xF4240
cvtsi2sd %rax, %xmm1
divsd %xmm0, %xmm1
movq %r14, %rdi
movapd %xmm1, %xmm0
callq 0x4360
movq %rax, %r14
movl $0xa, %edx
movq %rax, %rdi
leaq 0x6890(%rip), %rsi      # 0x1179f
callq 0x42d0
movq (%r14), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x4250
movsbl %al, %esi
movq %r14, %rdi
callq 0x4030
movq %rax, %rdi
callq 0x4190
jmp 0x98fe
movq -0x50(%rbp), %r14
xorl %r13d, %r13d
jmp 0xaf4c
movb $0x1, %r13b
cmpq %r15, %r14
je 0xaf60
movq -0x40(%rbp), %rsi
incq %rsi
movq %r14, %rdi
callq 0x4280
testb %r13b, %r13b
je 0xafc6
movq %r15, -0x50(%rbp)
movq $0x0, -0x48(%rbp)
movb $0x0, -0x40(%rbp)
leaq -0x348(%rbp), %rdi
movq %rbx, %rsi
callq 0x4300
movq 0xd03d(%rip), %r13      # 0x17fc8
movq -0xa0(%rbp), %rax
movq %rax, -0x60(%rbp)
movl $0x0, -0x90(%rbp)
leaq -0x100(%rbp), %rdi
leaq -0x19eb(%rip), %rsi     # 0x95c3
leaq -0x60(%rbp), %rdx
movq %rbx, %rcx
leaq -0x90(%rbp), %r8
callq 0xc75a
jmp 0xb08d
movq %r15, -0x50(%rbp)
movq %rbx, %rdi
leaq 0x67dc(%rip), %rsi      # 0x117b0
leaq 0x67df(%rip), %rdx      # 0x117ba
callq 0x78c0
movq -0x48(%rbp), %rdx
cmpq -0x78(%rbp), %rdx
jne 0xb007
movq -0x50(%rbp), %r14
testq %rdx, %rdx
je 0xb010
movq -0x80(%rbp), %rsi
movq %r14, %rdi
callq 0x42a0
testl %eax, %eax
sete %r13b
jmp 0xb013
movq -0x50(%rbp), %r14
xorl %r13d, %r13d
jmp 0xb013
movb $0x1, %r13b
cmpq %r15, %r14
je 0xb027
movq -0x40(%rbp), %rsi
incq %rsi
movq %r14, %rdi
callq 0x4280
testb %r13b, %r13b
je 0xb0ab
movq %r15, -0x50(%rbp)
movq $0x0, -0x48(%rbp)
movb $0x0, -0x40(%rbp)
leaq -0x348(%rbp), %rdi
leaq -0x90(%rbp), %rsi
callq 0x4150
movq 0xcf72(%rip), %r13      # 0x17fc8
movq %rax, %rdi
movq %rbx, %rsi
callq 0x4300
movq -0xa0(%rbp), %rax
movq %rax, -0x60(%rbp)
leaq -0x100(%rbp), %rdi
leaq -0x1ab7(%rip), %rsi     # 0x95c3
leaq -0x60(%rbp), %rdx
movq %rbx, %rcx
leaq -0x90(%rbp), %r8
callq 0xc7a8
movq -0x50(%rbp), %rdi
cmpq %r15, %rdi
je 0x9dba
movq -0x40(%rbp), %rsi
incq %rsi
callq 0x4280
jmp 0x9dba
movq %r15, -0x50(%rbp)
movq %rbx, %rdi
leaq 0x6702(%rip), %rsi      # 0x117bb
leaq 0x6708(%rip), %rdx      # 0x117c8
callq 0x78c0
movq -0x48(%rbp), %rdx
cmpq -0x78(%rbp), %rdx
jne 0xb0ec
movq -0x50(%rbp), %r14
testq %rdx, %rdx
je 0xb0f5
movq -0x80(%rbp), %rsi
movq %r14, %rdi
callq 0x42a0
testl %eax, %eax
sete %r13b
jmp 0xb0f8
movq -0x50(%rbp), %r14
xorl %r13d, %r13d
jmp 0xb0f8
movb $0x1, %r13b
cmpq %r15, %r14
je 0xb10c
movq -0x40(%rbp), %rsi
incq %rsi
movq %r14, %rdi
callq 0x4280
testb %r13b, %r13b
je 0xb1dc
movl $0x2a, -0xa8(%rbp)
leaq -0x348(%rbp), %rdi
movq %rbx, %rsi
callq 0x4290
movq 0xce93(%rip), %r13      # 0x17fc8
movq %rax, %rdi
leaq -0xac(%rbp), %rsi
callq 0x4150
movq %rax, %rdi
leaq -0x60(%rbp), %rsi
callq 0x4290
movq %rax, %rdi
leaq -0x90(%rbp), %rsi
callq 0x4290
movq %rax, %rdi
leaq -0xa4(%rbp), %rsi
callq 0x4150
movq %rax, %rdi
leaq -0xe0(%rbp), %rsi
callq 0x4150
movq -0xa0(%rbp), %rax
movq %rax, -0xd0(%rbp)
leaq -0x100(%rbp), %rdi
leaq -0x20dd(%rip), %rsi     # 0x90bc
leaq -0xd0(%rbp), %rdx
movq %rbx, %rcx
leaq -0xac(%rbp), %r8
leaq -0x60(%rbp), %r9
leaq -0xe0(%rbp), %rax
pushq %rax
leaq -0xa4(%rbp), %rax
pushq %rax
leaq -0xa8(%rbp), %rax
pushq %rax
leaq -0x90(%rbp), %rax
pushq %rax
callq 0xc7f6
addq $0x20, %rsp
jmp 0x9dba
movq %r15, -0x50(%rbp)
movq %rbx, %rdi
leaq 0x65df(%rip), %rsi      # 0x117c9
leaq 0x65db(%rip), %rdx      # 0x117cc
callq 0x78c0
movq -0x48(%rbp), %rdx
cmpq -0x78(%rbp), %rdx
jne 0xb21d
movq -0x50(%rbp), %r14
testq %rdx, %rdx
je 0xb226
movq -0x80(%rbp), %rsi
movq %r14, %rdi
callq 0x42a0
testl %eax, %eax
sete %r13b
jmp 0xb229
movq -0x50(%rbp), %r14
xorl %r13d, %r13d
jmp 0xb229
movb $0x1, %r13b
cmpq %r15, %r14
je 0xb23d
movq -0x40(%rbp), %rsi
incq %rsi
movq %r14, %rdi
callq 0x4280
testb %r13b, %r13b
je 0xb2d4
movq %r15, -0x50(%rbp)
movq $0x0, -0x48(%rbp)
movb $0x0, -0x40(%rbp)
leaq -0x348(%rbp), %rdi
movq %rbx, %rsi
callq 0x4300
movq 0xcd5c(%rip), %r13      # 0x17fc8
leaq -0x170(%rbp), %r14
leaq -0x160(%rbp), %rax
movq %rax, -0x170(%rbp)
movq -0x50(%rbp), %rsi
movq -0x48(%rbp), %rdx
addq %rsi, %rdx
movq %r14, %rdi
callq 0xcb30
movq -0xa0(%rbp), %rdi
movq %r14, %rsi
movl -0xb8(%rbp), %edx
callq 0x95c3
movq -0x170(%rbp), %rdi
leaq -0x160(%rbp), %rax
cmpq %rax, %rdi
je 0xb08d
movq -0x160(%rbp), %rsi
incq %rsi
callq 0x4280
jmp 0xb08d
movq %r15, -0x50(%rbp)
movq %rbx, %rdi
leaq 0x64eb(%rip), %rsi      # 0x117cd
leaq 0x64e8(%rip), %rdx      # 0x117d1
callq 0x78c0
movq -0x48(%rbp), %rdx
cmpq -0x78(%rbp), %rdx
jne 0xb315
movq -0x50(%rbp), %r14
testq %rdx, %rdx
je 0xb31e
movq -0x80(%rbp), %rsi
movq %r14, %rdi
callq 0x42a0
testl %eax, %eax
sete %r13b
jmp 0xb321
movq -0x50(%rbp), %r14
xorl %r13d, %r13d
jmp 0xb321
movb $0x1, %r13b
cmpq %r15, %r14
je 0xb335
movq -0x40(%rbp), %rsi
incq %rsi
movq %r14, %rdi
callq 0x4280
testb %r13b, %r13b
je 0xb38b
movq %rbx, %rdi
xorl %esi, %esi
callq 0x4380
movl $0xa, %edx
movq 0xcc78(%rip), %r13      # 0x17fc8
movq %r13, %rdi
leaq 0x6478(%rip), %rsi      # 0x117d2
callq 0x42d0
leaq -0x1b8(%rbp), %rdi
movq %rbx, %rsi
callq 0xfce8
divsd 0x5c92(%rip), %xmm0     # 0x11008
movq %r13, %rdi
callq 0x4360
movq %rax, %rdi
callq 0x4120
jmp 0x9dba
movq %r15, -0x50(%rbp)
movq %rbx, %rdi
leaq 0x6444(%rip), %rsi      # 0x117dd
leaq 0x6442(%rip), %rdx      # 0x117e2
callq 0x78c0
movq -0x48(%rbp), %rdx
cmpq -0x78(%rbp), %rdx
jne 0xb3cc
movq -0x50(%rbp), %r14
testq %rdx, %rdx
je 0xb3d5
movq -0x80(%rbp), %rsi
movq %r14, %rdi
callq 0x42a0
testl %eax, %eax
sete %r13b
jmp 0xb3d8
movq -0x50(%rbp), %r14
xorl %r13d, %r13d
jmp 0xb3d8
movb $0x1, %r13b
cmpq %r15, %r14
je 0xb3ec
movq -0x40(%rbp), %rsi
incq %rsi
movq %r14, %rdi
callq 0x4280
testb %r13b, %r13b
je 0xb41d
leaq -0x348(%rbp), %rdi
leaq -0x60(%rbp), %rsi
callq 0x4150
movq 0xcbc0(%rip), %r13      # 0x17fc8
movslq -0x60(%rbp), %rax
movq %rax, -0x50(%rbp)
movq %rbx, %rdi
callq 0xbf6f
jmp 0x9dba
movq %r15, -0x50(%rbp)
movq %rbx, %rdi
leaq 0x5c35(%rip), %rsi      # 0x11060
leaq 0x5c32(%rip), %rdx      # 0x11064
callq 0x78c0
movq -0x48(%rbp), %rdx
cmpq -0x78(%rbp), %rdx
jne 0xb45e
movq -0x50(%rbp), %r14
testq %rdx, %rdx
je 0xb467
movq -0x80(%rbp), %rsi
movq %r14, %rdi
callq 0x42a0
testl %eax, %eax
sete %r13b
jmp 0xb46a
movq -0x50(%rbp), %r14
xorl %r13d, %r13d
jmp 0xb46a
movb $0x1, %r13b
cmpq %r15, %r14
je 0xb47e
movq -0x40(%rbp), %rsi
incq %rsi
movq %r14, %rdi
callq 0x4280
testb %r13b, %r13b
je 0xb4c4
movq -0xa0(%rbp), %rdi
callq 0xc87a
movq 0xcb32(%rip), %r13      # 0x17fc8
movq %r13, %rdi
movl %eax, %esi
callq 0x43f0
movq %rax, %r14
movl $0x8, %edx
movq %rax, %rdi
leaq 0x5bba(%rip), %rsi      # 0x1106c
callq 0x42d0
movq %r14, %rdi
callq 0x4120
jmp 0x9dba
movq %r15, -0x50(%rbp)
movq %rbx, %rdi
leaq 0x5ba3(%rip), %rsi      # 0x11075
leaq 0x5ba0(%rip), %rdx      # 0x11079
callq 0x78c0
movq -0x48(%rbp), %rdx
cmpq -0x78(%rbp), %rdx
jne 0xb505
movq -0x50(%rbp), %r14
testq %rdx, %rdx
je 0xb50e
movq -0x80(%rbp), %rsi
movq %r14, %rdi
callq 0x42a0
testl %eax, %eax
sete %r13b
jmp 0xb511
movq -0x50(%rbp), %r14
xorl %r13d, %r13d
jmp 0xb511
movb $0x1, %r13b
cmpq %r15, %r14
je 0xb525
movq -0x40(%rbp), %rsi
incq %rsi
movq %r14, %rdi
callq 0x4280
testb %r13b, %r13b
je 0xb61f
movq -0xa0(%rbp), %rdi
callq 0xc94e
movq 0xca87(%rip), %r13      # 0x17fc8
jmp 0x9dba
leaq -0x1c8(%rbp), %rdi
xorl %esi, %esi
callq 0x4380
movq -0x100(%rbp), %rbx
cmpq -0xf8(%rbp), %rbx
jae 0xb572
movq %rbx, %rdi
callq 0x43e0
addq $0x8, %rbx
jmp 0xb55b
leaq -0x1b8(%rbp), %rdi
leaq -0x1c8(%rbp), %rsi
callq 0xfce8
movsd %xmm0, -0xb8(%rbp)
leaq -0x100(%rbp), %rdi
callq 0xcaf2
movq -0x190(%rbp), %rdi
leaq -0x180(%rbp), %rax
cmpq %rax, %rdi
je 0xb5bb
movq -0x180(%rbp), %rsi
incq %rsi
callq 0x4280
movsd -0xb8(%rbp), %xmm0
divsd 0x5a3d(%rip), %xmm0     # 0x11008
cvttsd2si %xmm0, %eax
addq $0x328, %rsp            # imm = 0x328
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq 0xca08(%rip), %rdi      # 0x17ff0
leaq 0x60a8(%rip), %rsi      # 0x11697
movl $0xf, %edx
callq 0x42d0
movq -0x80(%rbp), %rsi
movq -0x78(%rbp), %rdx
movq 0xc9e8(%rip), %rdi      # 0x17ff0
callq 0x42d0
movq %rax, %rdi
callq 0x4120
movl $0xffffffff, %edi       # imm = 0xFFFFFFFF
callq 0x42f0
movq 0xc9ca(%rip), %rdi      # 0x17ff0
leaq 0x5a9e(%rip), %rsi      # 0x110cb
movl $0x18, %edx
callq 0x42d0
movq -0x80(%rbp), %rsi
movq -0x78(%rbp), %rdx
movq 0xc9aa(%rip), %rdi      # 0x17ff0
callq 0x42d0
movq %rax, %rdi
callq 0x4120
jmp 0xb615
jmp 0xb8a1
jmp 0xb8a1
jmp 0xb8a1
jmp 0xb8a1
jmp 0xb8a1
jmp 0xb8a1
movq %rax, %rbx
movq -0x170(%rbp), %rdi
leaq -0x160(%rbp), %rax
cmpq %rax, %rdi
je 0xb6cd
movq -0x160(%rbp), %rsi
incq %rsi
callq 0x4280
jmp 0xb6cd
jmp 0xb8a1
jmp 0xb8a1
jmp 0xb8a1
jmp 0xb6ca
jmp 0xb6ca
jmp 0xb850
jmp 0xb850
jmp 0xb8a1
jmp 0xb6ca
jmp 0xb8a1
jmp 0xb6ca
jmp 0xb850
movq %rax, %rbx
movq -0x50(%rbp), %rdi
leaq -0x40(%rbp), %rax
cmpq %rax, %rdi
je 0xb8a4
movq -0x40(%rbp), %rsi
incq %rsi
callq 0x4280
jmp 0xb8a4
jmp 0xb850
jmp 0xb8a1
jmp 0xb850
jmp 0xb850
jmp 0xb8a1
jmp 0xb850
jmp 0xb850
jmp 0xb8a1
jmp 0xb8a1
jmp 0xb850
jmp 0xb8a1
jmp 0xb850
jmp 0xb8a1
jmp 0xb850
jmp 0xb850
jmp 0xb850
jmp 0xb8a1
jmp 0xb8a1
jmp 0xb797
jmp 0xb8a1
jmp 0xb8a1
jmp 0xb8a1
jmp 0xb85e
jmp 0xb8a1
jmp 0xb8a1
jmp 0xb8a1
movq %rax, %rbx
movq -0x110(%rbp), %rax
testq %rax, %rax
je 0xb8a4
leaq -0x120(%rbp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
jmp 0xb8a4
movq %rax, %rdi
callq 0x4acd
jmp 0xb8a1
jmp 0xb89c
jmp 0xb89c
jmp 0xb8a1
jmp 0xb850
jmp 0xb850
jmp 0xb850
movq %rax, %rbx
movq -0x128(%rbp), %rdi
testq %rdi, %rdi
je 0xb83a
callq 0x65c2
jmp 0xb83a
jmp 0xb8a1
jmp 0xb8a1
jmp 0xb8a1
jmp 0xb850
movq %rax, %rbx
movq -0x138(%rbp), %rdi
testq %rdi, %rdi
je 0xb872
callq 0x65c2
jmp 0xb872
jmp 0xb8a1
jmp 0xb8a1
jmp 0xb8a1
jmp 0xb8a1
jmp 0xb8a1
jmp 0xb8a1
movq %rax, %rbx
movq -0x148(%rbp), %rdi
testq %rdi, %rdi
je 0xb887
callq 0x65c2
jmp 0xb887
jmp 0xb8a1
jmp 0xb8a1
movq %rax, %rbx
movq -0x88(%rbp), %rdi
testq %rdi, %rdi
je 0xb8a4
jmp 0xb893
jmp 0xb850
jmp 0xb850
jmp 0xb8a1
jmp 0xb89c
movq %rax, %rbx
movq -0x58(%rbp), %rdi
testq %rdi, %rdi
je 0xb8a4
jmp 0xb893
movq %rax, %rbx
movq -0xc8(%rbp), %rdi
testq %rdi, %rdi
je 0xb8a4
jmp 0xb893
movq %rax, %rbx
movq -0x88(%rbp), %rdi
testq %rdi, %rdi
je 0xb8a4
jmp 0xb893
jmp 0xb89c
jmp 0xb8a1
movq %rax, %rbx
movq -0x88(%rbp), %rdi
testq %rdi, %rdi
je 0xb8a4
callq 0x65c2
jmp 0xb8a4
jmp 0xb8a1
movq %rax, %rbx
jmp 0xb8dc
movq %rax, %rbx
movq -0x80(%rbp), %rdi
leaq -0x70(%rbp), %rax
cmpq %rax, %rdi
je 0xb8bd
movq -0x70(%rbp), %rsi
incq %rsi
callq 0x4280
movq 0xc6f4(%rip), %rsi      # 0x17fb8
leaq -0x348(%rbp), %rdi
callq 0x4310
leaq -0x2d0(%rbp), %rdi
callq 0x40b0
leaq -0x100(%rbp), %rdi
callq 0xcaf2
movq -0x190(%rbp), %rdi
leaq -0x180(%rbp), %rax
cmpq %rax, %rdi
je 0xb90a
movq -0x180(%rbp), %rsi
incq %rsi
callq 0x4280
movq %rbx, %rdi
callq 0x4400