// File: Luthaf[P]zeopp/networkstorage.cc
// Function: check_for_collision(ATOM_NETWORK*, std::vector<MOLECULE, std::allocator<MOLECULE>>*, std::vector<CONNECTION, std::allocator<CONNECTION>>*)
bool check_for_collision(ATOM_NETWORK *framework, vector<MOLECULE> *assembled_molecules, vector<CONNECTION> *two_way_connections) {
  bool verbose = false;
if(verbose) printf("DEBUG: checking for collisions...\n");
  XYZ centre_abc(0.5,0.5,0.5);
  XYZ centre_xyz = framework->abc_to_xyz_returning_XYZ(centre_abc);
  bool collision = false;
  int num_assembled_molecules = assembled_molecules->size();
  int num_c = two_way_connections->size();
  //is it possible to have more than one periodic bond between atoms? depends on unit cell - we need to check all x,y,z in the range -1 to 1, except for redundant combinations, handled below
  bool multiple_periodic_connections_possible = false;
  for(int z=-1; z<2 && !multiple_periodic_connections_possible; z++) {
    for(int y=-1; y<2 && !multiple_periodic_connections_possible; y++) {
      for(int x=0; x<2 && !multiple_periodic_connections_possible; x++) { //x cannot be -1
        if((x==0 && y==0 && z==1) || (x==0 && y==1) || (x==1)) {
          XYZ image_abc(x,y,z);
          double self_distance = framework->abc_to_xyz_returning_XYZ(image_abc).magnitude();
          if(self_distance<=GENERAL_BOND_DISTANCE*2.0) multiple_periodic_connections_possible = true;
        }
      }
    }
  }

  //new and much faster system - build a set of vectors storing the info we need and just query it according to the basic collision rules - and don't include sites or H atoms
  vector <int> atom_molecule_id_vector;
  vector <int> atom_position_id_vector;
  vector <XYZ> atom_abc_vector;
  vector <bool> atom_is_close_to_site_vector;
/*
int debug1=198, debug2=730;
*/
  for(int i=0; i<num_assembled_molecules; i++) { //for each molecule
    int num_at_i = assembled_molecules->at(i).atoms_xyz.size();
    int num_sites_i = assembled_molecules->at(i).sites.size();
    int num_dummy_sites_i = assembled_molecules->at(i).dummy_sites.size();
    vector <XYZ> local_atom_abc_vector;
    vector <XYZ> local_site_abc_vector;
    for(int j=0; j<num_at_i; j++) { //for each atom
      if(assembled_molecules->at(i).atoms_type.at(j)!="H") { //if not H
        XYZ xyz_j = assembled_molecules->at(i).atoms_xyz.at(j);
        XYZ abc_j = framework->xyz_to_abc_returning_XYZ(xyz_j);
        bool is_site_j = false;
        bool is_dummy_site_j = false;
        for(int s=0; s<num_sites_i && !is_site_j; s++) { //find if site
          is_site_j = (j == assembled_molecules->at(i).sites.at(s));
        }
        for(int s=0; s<num_dummy_sites_i && !is_dummy_site_j && !is_site_j; s++) { //find if dummy site
          is_dummy_site_j = (j == assembled_molecules->at(i).dummy_sites.at(s));
        }
        if(is_site_j) {
          local_site_abc_vector.push_back(abc_j);
        } else if(is_dummy_site_j) { //do nothing - don't want to write this one out, and don't want to bypass collision detection near to dummy sites
        } else {
          local_atom_abc_vector.push_back(abc_j);
          atom_abc_vector.push_back(abc_j);
          atom_molecule_id_vector.push_back(i);
          atom_position_id_vector.push_back(j);
        }
      }
    }
    int num_actual_at_i = local_atom_abc_vector.size();
    for(int j=0; j<num_actual_at_i; j++) {
      bool is_close_to_site = false;
      for(int k=0; k<num_sites_i && !is_close_to_site; k++) {
        is_close_to_site = is_part_of_site_abc(local_atom_abc_vector.at(j), local_site_abc_vector.at(k), framework);
/*
if(atom_is_close_to_site_vector.size()==debug1 || atom_is_close_to_site_vector.size()==debug2) {
  if(is_close_to_site) printf("DEBYG: overall atom index %d (fractional %.3f/%.3f/%.3f) is close to site index %d (fractional %.3f/%.3f/%.3f) in molecule index %d\n", (int)(atom_is_close_to_site_vector.size()), local_atom_abc_vector.at(j).x, local_atom_abc_vector.at(j).y, local_atom_abc_vector.at(j).z, k, local_site_abc_vector.at(k).x, local_site_abc_vector.at(k).y, local_site_abc_vector.at(k).z, i);
  else printf("DEBYG: overall atom index %d (fractional %.3f/%.3f/%.3f) is NOT close to site index %d (fractional %.3f/%.3f/%.3f) in molecule index %d (distance = %.3f)\n", (int)(atom_is_close_to_site_vector.size()), local_atom_abc_vector.at(j).x, local_atom_abc_vector.at(j).y, local_atom_abc_vector.at(j).z, k, local_site_abc_vector.at(k).x, local_site_abc_vector.at(k).y, local_site_abc_vector.at(k).z, i, framework->getDistCalc().minimum_periodic_distance(local_atom_abc_vector.at(j).x, local_atom_abc_vector.at(j).y, local_atom_abc_vector.at(j).z, local_site_abc_vector.at(k).x, local_site_abc_vector.at(k).y, local_site_abc_vector.at(k).z));
}
*/
      }
      atom_is_close_to_site_vector.push_back(is_close_to_site);
    }
  }
  int num_total_atoms = atom_abc_vector.size();
  for(int i=0; i<num_total_atoms && !collision; i++) {
    for(int j=i+1; j<num_total_atoms && !collision; j++) {
      if(atom_molecule_id_vector.at(i)==atom_molecule_id_vector.at(j)) { //atoms are in the same molecule
        if(!bonded_xyz(assembled_molecules->at(atom_molecule_id_vector.at(i)).atoms_xyz.at(atom_position_id_vector.at(i)), assembled_molecules->at(atom_molecule_id_vector.at(j)).atoms_xyz.at(atom_position_id_vector.at(j)))) { //if they are not supposed to be bonded
          if(bonded_abc(atom_abc_vector.at(i), atom_abc_vector.at(j), framework)) {
            if(verbose) printf("NOTICE: non-bonded atoms in building block %d are bonded periodically, constituting a collision\n", atom_molecule_id_vector.at(i));
            collision = true; //collision if they are bonded
          }
        } else if(multiple_periodic_connections_possible) { //else they are supposed to be bonded - so we need to make sure that they are not bonded more than once periodically, if that is a possibility given the unit cell parameters
          XYZ shift_i_to_centre = centre_abc - trans_to_origuc(atom_abc_vector.at(i));
          XYZ uc_j = trans_to_origuc(atom_abc_vector.at(j)+shift_i_to_centre);
          int num_periodic_bonds = 0;
          for(int da=-1; da<2 && num_periodic_bonds<2; da++) {
            for(int db=-1; db<2 && num_periodic_bonds<2; db++) {
              for(int dc=-1; dc<2 && num_periodic_bonds<2; dc++) {
                XYZ image(da,db,dc);
                XYZ image_j_xyz = framework->abc_to_xyz_returning_XYZ(uc_j+image);
                if(bonded_xyz(image_j_xyz, centre_xyz)) num_periodic_bonds++;
              }
            }
          }
          if(num_periodic_bonds>1) {
            if(verbose) printf("NOTICE: more than one (%d) bonds were detected between atoms in building block %d, constituting a collision\n", num_periodic_bonds, atom_molecule_id_vector.at(i));
            collision = true;
          }
        }
      } else if(bonded_abc(atom_abc_vector.at(i), atom_abc_vector.at(j), framework)) { //atoms are in different molecules, and they are bonded
        if(!atom_is_close_to_site_vector.at(i) || !atom_is_close_to_site_vector.at(j)) {
          if(verbose) printf("NOTICE: a bond was detected between atoms that are not both part of a site: %s (fractional %.3f/%.3f/%.3f) and %s (fractional %.3f/%.3f/%.3f) in building blocks %d and %d respectively (overall indices %d and %d), constituting a collision (distance = %.3f)\n", assembled_molecules->at(atom_molecule_id_vector.at(i)).atoms_type.at(atom_position_id_vector.at(i)).c_str(), atom_abc_vector.at(i).x, atom_abc_vector.at(i).y, atom_abc_vector.at(i).z, assembled_molecules->at(atom_molecule_id_vector.at(j)).atoms_type.at(atom_position_id_vector.at(j)).c_str(), atom_abc_vector.at(j).x, atom_abc_vector.at(j).y, atom_abc_vector.at(j).z, atom_molecule_id_vector.at(i), atom_molecule_id_vector.at(j), i, j, framework->getDistCalc().minimum_periodic_distance(atom_abc_vector.at(i).x, atom_abc_vector.at(i).y, atom_abc_vector.at(i).z, atom_abc_vector.at(j).x, atom_abc_vector.at(j).y, atom_abc_vector.at(j).z));

          collision = true; //if either atom is not part of a site, this is a collision
        } else { //else they are both part of sites - so we need to check whether these molecules are supposed to be connected
          bool mols_connected = false;
          for(int k=0; k<num_c && !mols_connected; k++) {
            CONNECTION c = two_way_connections->at(k);
            int v1 = c.v1;
            int v2 = c.v2;
            if((v1==atom_molecule_id_vector.at(i) && v2==atom_molecule_id_vector.at(j)) || (v2==atom_molecule_id_vector.at(i) && v1==atom_molecule_id_vector.at(j))) {
              mols_connected = true;
            }
          }
          if(!mols_connected) {
            if(verbose) printf("NOTICE: a bond was detected between disconnected building blocks %d and %d, constituting a collision\n", atom_molecule_id_vector.at(i), atom_molecule_id_vector.at(j));
            collision = true;
          }
        }
      }
    }
  }
  return collision;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x850, %rsp            # imm = 0x850
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movb $0x0, -0x19(%rbp)
testb $0x1, -0x19(%rbp)
je 0xa52cf
leaq 0x1540d3(%rip), %rdi    # 0x1f939b
movb $0x0, %al
callq 0x5070
leaq -0x38(%rbp), %rdi
movsd 0x14cd9d(%rip), %xmm2   # 0x1f2078
movaps %xmm2, %xmm0
movaps %xmm2, %xmm1
callq 0xea8e0
movq -0x8(%rbp), %rsi
leaq -0x50(%rbp), %rdi
leaq -0x38(%rbp), %rdx
callq 0x97310
movb $0x0, -0x51(%rbp)
movq -0x10(%rbp), %rdi
callq 0xaf3f0
movl %eax, -0x58(%rbp)
movq -0x18(%rbp), %rdi
callq 0xaf420
movl %eax, -0x5c(%rbp)
movb $0x0, -0x5d(%rbp)
movl $0xffffffff, -0x64(%rbp) # imm = 0xFFFFFFFF
xorl %eax, %eax
cmpl $0x2, -0x64(%rbp)
movb %al, -0x4a9(%rbp)
jge 0xa5337
movb -0x5d(%rbp), %al
xorb $-0x1, %al
movb %al, -0x4a9(%rbp)
movb -0x4a9(%rbp), %al
testb $0x1, %al
jne 0xa5346
jmp 0xa5456
movl $0xffffffff, -0x68(%rbp) # imm = 0xFFFFFFFF
xorl %eax, %eax
cmpl $0x2, -0x68(%rbp)
movb %al, -0x4aa(%rbp)
jge 0xa5366
movb -0x5d(%rbp), %al
xorb $-0x1, %al
movb %al, -0x4aa(%rbp)
movb -0x4aa(%rbp), %al
testb $0x1, %al
jne 0xa5375
jmp 0xa5446
movl $0x0, -0x6c(%rbp)
xorl %eax, %eax
cmpl $0x2, -0x6c(%rbp)
movb %al, -0x4ab(%rbp)
jge 0xa5395
movb -0x5d(%rbp), %al
xorb $-0x1, %al
movb %al, -0x4ab(%rbp)
movb -0x4ab(%rbp), %al
testb $0x1, %al
jne 0xa53a4
jmp 0xa5436
cmpl $0x0, -0x6c(%rbp)
jne 0xa53b6
cmpl $0x0, -0x68(%rbp)
jne 0xa53b6
cmpl $0x1, -0x64(%rbp)
je 0xa53c8
cmpl $0x0, -0x6c(%rbp)
jne 0xa53c2
cmpl $0x1, -0x68(%rbp)
je 0xa53c8
cmpl $0x1, -0x6c(%rbp)
jne 0xa5426
cvtsi2sdl -0x6c(%rbp), %xmm0
cvtsi2sdl -0x68(%rbp), %xmm1
cvtsi2sdl -0x64(%rbp), %xmm2
leaq -0x88(%rbp), %rdi
callq 0xea8e0
movq -0x8(%rbp), %rsi
leaq -0xa8(%rbp), %rdi
leaq -0x88(%rbp), %rdx
callq 0x97310
leaq -0xa8(%rbp), %rdi
callq 0xe9240
movsd %xmm0, -0x90(%rbp)
movsd 0x15248a(%rip), %xmm0   # 0x1f78a0
ucomisd -0x90(%rbp), %xmm0
jb 0xa5424
movb $0x1, -0x5d(%rbp)
jmp 0xa5426
jmp 0xa5428
movl -0x6c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x6c(%rbp)
jmp 0xa537c
jmp 0xa5438
movl -0x68(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x68(%rbp)
jmp 0xa534d
jmp 0xa5448
movl -0x64(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x64(%rbp)
jmp 0xa531e
leaq -0xc0(%rbp), %rdi
callq 0xd0d0
leaq -0xd8(%rbp), %rdi
callq 0xd0d0
leaq -0xf0(%rbp), %rdi
callq 0xada60
leaq -0x118(%rbp), %rdi
callq 0xf670
movl $0x0, -0x11c(%rbp)
movl -0x11c(%rbp), %eax
cmpl -0x58(%rbp), %eax
jge 0xa5a23
movq -0x10(%rbp), %rdi
movslq -0x11c(%rbp), %rsi
callq 0xaf120
movq %rax, -0x4b8(%rbp)
jmp 0xa54b8
movq -0x4b8(%rbp), %rdi
callq 0xae590
movl %eax, -0x120(%rbp)
movq -0x10(%rbp), %rdi
movslq -0x11c(%rbp), %rsi
callq 0xaf120
movq %rax, -0x4c0(%rbp)
jmp 0xa54e3
movq -0x4c0(%rbp), %rdi
addq $0x48, %rdi
callq 0x10090
movl %eax, -0x130(%rbp)
movq -0x10(%rbp), %rdi
movslq -0x11c(%rbp), %rsi
callq 0xaf120
movq %rax, -0x4c8(%rbp)
jmp 0xa5512
movq -0x4c8(%rbp), %rdi
addq $0x60, %rdi
callq 0x10090
movl %eax, -0x134(%rbp)
leaq -0x150(%rbp), %rdi
callq 0xada60
leaq -0x168(%rbp), %rdi
callq 0xada60
movl $0x0, -0x16c(%rbp)
movl -0x16c(%rbp), %eax
cmpl -0x120(%rbp), %eax
jge 0xa5886
movq -0x10(%rbp), %rdi
movslq -0x11c(%rbp), %rsi
callq 0xaf120
movq %rax, -0x4d0(%rbp)
jmp 0xa5575
movq -0x4d0(%rbp), %rdi
addq $0x18, %rdi
movslq -0x16c(%rbp), %rsi
callq 0xaf450
movq %rax, -0x4d8(%rbp)
jmp 0xa5595
movq -0x4d8(%rbp), %rdi
leaq 0x159b19(%rip), %rsi    # 0x1ff0bc
callq 0x8aca0
movb %al, -0x4d9(%rbp)
jmp 0xa55b0
movb -0x4d9(%rbp), %al
testb $0x1, %al
jne 0xa55bf
jmp 0xa5870
movq -0x10(%rbp), %rdi
movslq -0x11c(%rbp), %rsi
callq 0xaf120
movq %rax, -0x4e8(%rbp)
jmp 0xa55d8
movq -0x4e8(%rbp), %rdi
movslq -0x16c(%rbp), %rsi
callq 0xae5c0
movq %rax, -0x4f0(%rbp)
jmp 0xa55f4
movq -0x4f0(%rbp), %rax
movq 0x10(%rax), %rcx
movq %rcx, -0x180(%rbp)
movups (%rax), %xmm0
movaps %xmm0, -0x190(%rbp)
movq -0x8(%rbp), %rsi
leaq -0x1a8(%rbp), %rdi
leaq -0x190(%rbp), %rdx
callq 0x95a40
jmp 0xa5629
movb $0x0, -0x1a9(%rbp)
movb $0x0, -0x1aa(%rbp)
movl $0x0, -0x1b0(%rbp)
movl -0x1b0(%rbp), %ecx
xorl %eax, %eax
cmpl -0x130(%rbp), %ecx
movb %al, -0x4f1(%rbp)
jge 0xa5665
movb -0x1a9(%rbp), %al
xorb $-0x1, %al
movb %al, -0x4f1(%rbp)
movb -0x4f1(%rbp), %al
testb $0x1, %al
jne 0xa5674
jmp 0xa572d
movl -0x16c(%rbp), %eax
movl %eax, -0x504(%rbp)
movq -0x10(%rbp), %rdi
movslq -0x11c(%rbp), %rsi
callq 0xaf120
movq %rax, -0x500(%rbp)
jmp 0xa5699
movq -0x500(%rbp), %rdi
addq $0x48, %rdi
movslq -0x1b0(%rbp), %rsi
callq 0x101d0
movq %rax, -0x510(%rbp)
jmp 0xa56b9
movl -0x504(%rbp), %eax
movq -0x510(%rbp), %rcx
cmpl (%rcx), %eax
sete %al
andb $0x1, %al
movb %al, -0x1a9(%rbp)
movl -0x1b0(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x1b0(%rbp)
jmp 0xa5641
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x128(%rbp)
movl %eax, -0x12c(%rbp)
jmp 0xa69d4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x128(%rbp)
movl %eax, -0x12c(%rbp)
leaq -0x168(%rbp), %rdi
callq 0x12210
leaq -0x150(%rbp), %rdi
callq 0x12210
jmp 0xa69d4
movl $0x0, -0x1b4(%rbp)
movl -0x1b4(%rbp), %ecx
xorl %eax, %eax
cmpl -0x134(%rbp), %ecx
movb %al, -0x511(%rbp)
jge 0xa576c
xorl %eax, %eax
testb $0x1, -0x1aa(%rbp)
movb %al, -0x511(%rbp)
jne 0xa576c
movb -0x1a9(%rbp), %al
xorb $-0x1, %al
movb %al, -0x511(%rbp)
movb -0x511(%rbp), %al
testb $0x1, %al
jne 0xa5778
jmp 0xa57eb
movl -0x16c(%rbp), %eax
movl %eax, -0x524(%rbp)
movq -0x10(%rbp), %rdi
movslq -0x11c(%rbp), %rsi
callq 0xaf120
movq %rax, -0x520(%rbp)
jmp 0xa579d
movq -0x520(%rbp), %rdi
addq $0x60, %rdi
movslq -0x1b4(%rbp), %rsi
callq 0x101d0
movq %rax, -0x530(%rbp)
jmp 0xa57bd
movl -0x524(%rbp), %eax
movq -0x530(%rbp), %rcx
cmpl (%rcx), %eax
sete %al
andb $0x1, %al
movb %al, -0x1aa(%rbp)
movl -0x1b4(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x1b4(%rbp)
jmp 0xa5737
testb $0x1, -0x1a9(%rbp)
je 0xa580b
leaq -0x168(%rbp), %rdi
leaq -0x1a8(%rbp), %rsi
callq 0xafc20
jmp 0xa5809
jmp 0xa586e
testb $0x1, -0x1aa(%rbp)
je 0xa5816
jmp 0xa586c
leaq -0x150(%rbp), %rdi
leaq -0x1a8(%rbp), %rsi
callq 0xafc20
jmp 0xa582b
leaq -0xf0(%rbp), %rdi
leaq -0x1a8(%rbp), %rsi
callq 0xafc20
jmp 0xa5840
leaq -0xc0(%rbp), %rdi
leaq -0x11c(%rbp), %rsi
callq 0xd1b0
jmp 0xa5855
leaq -0xd8(%rbp), %rdi
leaq -0x16c(%rbp), %rsi
callq 0xd1b0
jmp 0xa586a
jmp 0xa586c
jmp 0xa586e
jmp 0xa5870
jmp 0xa5872
movl -0x16c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x16c(%rbp)
jmp 0xa554a
leaq -0x150(%rbp), %rdi
callq 0xae590
movl %eax, -0x1b8(%rbp)
movl $0x0, -0x1bc(%rbp)
movl -0x1bc(%rbp), %eax
cmpl -0x1b8(%rbp), %eax
jge 0xa59f7
movb $0x0, -0x1bd(%rbp)
movl $0x0, -0x1c4(%rbp)
movl -0x1c4(%rbp), %ecx
xorl %eax, %eax
cmpl -0x130(%rbp), %ecx
movb %al, -0x531(%rbp)
jge 0xa58e9
movb -0x1bd(%rbp), %al
xorb $-0x1, %al
movb %al, -0x531(%rbp)
movb -0x531(%rbp), %al
testb $0x1, %al
jne 0xa58f8
jmp 0xa59c9
movslq -0x1bc(%rbp), %rsi
leaq -0x150(%rbp), %rdi
callq 0xae5c0
movq %rax, -0x540(%rbp)
jmp 0xa5914
movq -0x540(%rbp), %rax
movq 0x10(%rax), %rcx
movq %rcx, -0x1d0(%rbp)
movups (%rax), %xmm0
movaps %xmm0, -0x1e0(%rbp)
movslq -0x1c4(%rbp), %rsi
leaq -0x168(%rbp), %rdi
callq 0xae5c0
movq %rax, -0x548(%rbp)
jmp 0xa594c
movq -0x548(%rbp), %rax
movq 0x10(%rax), %rcx
movq %rcx, -0x1f0(%rbp)
movups (%rax), %xmm0
movaps %xmm0, -0x200(%rbp)
movq -0x8(%rbp), %rdi
movq -0x1f0(%rbp), %rcx
movq %rsp, %rax
movq %rcx, 0x28(%rax)
movaps -0x200(%rbp), %xmm0
movups %xmm0, 0x18(%rax)
movq -0x1d0(%rbp), %rcx
movq %rcx, 0x10(%rax)
movaps -0x1e0(%rbp), %xmm0
movups %xmm0, (%rax)
callq 0x9f920
movb %al, -0x549(%rbp)
jmp 0xa59a7
movb -0x549(%rbp), %al
andb $0x1, %al
movb %al, -0x1bd(%rbp)
movl -0x1c4(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x1c4(%rbp)
jmp 0xa58c5
movzbl -0x1bd(%rbp), %esi
andl $0x1, %esi
leaq -0x118(%rbp), %rdi
callq 0xf700
jmp 0xa59e1
jmp 0xa59e3
movl -0x1bc(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x1bc(%rbp)
jmp 0xa58a2
leaq -0x168(%rbp), %rdi
callq 0x12210
leaq -0x150(%rbp), %rdi
callq 0x12210
movl -0x11c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x11c(%rbp)
jmp 0xa5490
leaq -0xf0(%rbp), %rdi
callq 0xae590
movl %eax, -0x204(%rbp)
movl $0x0, -0x208(%rbp)
movl -0x208(%rbp), %ecx
xorl %eax, %eax
cmpl -0x204(%rbp), %ecx
movb %al, -0x54a(%rbp)
jge 0xa5a60
movb -0x51(%rbp), %al
xorb $-0x1, %al
movb %al, -0x54a(%rbp)
movb -0x54a(%rbp), %al
testb $0x1, %al
jne 0xa5a6f
jmp 0xa698a
movl -0x208(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x20c(%rbp)
movl -0x20c(%rbp), %ecx
xorl %eax, %eax
cmpl -0x204(%rbp), %ecx
movb %al, -0x54b(%rbp)
jge 0xa5a9f
movb -0x51(%rbp), %al
xorb $-0x1, %al
movb %al, -0x54b(%rbp)
movb -0x54b(%rbp), %al
testb $0x1, %al
jne 0xa5aae
jmp 0xa6974
movslq -0x208(%rbp), %rsi
leaq -0xc0(%rbp), %rdi
callq 0x101d0
movq %rax, -0x558(%rbp)
jmp 0xa5aca
movq -0x558(%rbp), %rax
movl (%rax), %eax
movl %eax, -0x564(%rbp)
movslq -0x20c(%rbp), %rsi
leaq -0xc0(%rbp), %rdi
callq 0x101d0
movq %rax, -0x560(%rbp)
jmp 0xa5af5
movl -0x564(%rbp), %eax
movq -0x560(%rbp), %rcx
cmpl (%rcx), %eax
jne 0xa60db
movq -0x10(%rbp), %rax
movq %rax, -0x578(%rbp)
movslq -0x208(%rbp), %rsi
leaq -0xc0(%rbp), %rdi
callq 0x101d0
movq %rax, -0x570(%rbp)
jmp 0xa5b31
movq -0x578(%rbp), %rdi
movq -0x570(%rbp), %rax
movslq (%rax), %rsi
callq 0xaf120
movq %rax, -0x580(%rbp)
jmp 0xa5b50
movq -0x580(%rbp), %rax
movq %rax, -0x590(%rbp)
movslq -0x208(%rbp), %rsi
leaq -0xd8(%rbp), %rdi
callq 0x101d0
movq %rax, -0x588(%rbp)
jmp 0xa5b7a
movq -0x590(%rbp), %rdi
movq -0x588(%rbp), %rax
movslq (%rax), %rsi
callq 0xae5c0
movq %rax, -0x598(%rbp)
jmp 0xa5b99
movq -0x598(%rbp), %rax
movq 0x10(%rax), %rcx
movq %rcx, -0x220(%rbp)
movups (%rax), %xmm0
movaps %xmm0, -0x230(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x5a8(%rbp)
movslq -0x20c(%rbp), %rsi
leaq -0xc0(%rbp), %rdi
callq 0x101d0
movq %rax, -0x5a0(%rbp)
jmp 0xa5bdc
movq -0x5a8(%rbp), %rdi
movq -0x5a0(%rbp), %rax
movslq (%rax), %rsi
callq 0xaf120
movq %rax, -0x5b0(%rbp)
jmp 0xa5bfb
movq -0x5b0(%rbp), %rax
movq %rax, -0x5c0(%rbp)
movslq -0x20c(%rbp), %rsi
leaq -0xd8(%rbp), %rdi
callq 0x101d0
movq %rax, -0x5b8(%rbp)
jmp 0xa5c25
movq -0x5c0(%rbp), %rdi
movq -0x5b8(%rbp), %rax
movslq (%rax), %rsi
callq 0xae5c0
movq %rax, -0x5c8(%rbp)
jmp 0xa5c44
movq -0x5c8(%rbp), %rax
movq 0x10(%rax), %rcx
movq %rcx, -0x240(%rbp)
movups (%rax), %xmm0
movaps %xmm0, -0x250(%rbp)
movq -0x240(%rbp), %rcx
movq %rsp, %rax
movq %rcx, 0x28(%rax)
movaps -0x250(%rbp), %xmm0
movups %xmm0, 0x18(%rax)
movq -0x220(%rbp), %rcx
movq %rcx, 0x10(%rax)
movaps -0x230(%rbp), %xmm0
movups %xmm0, (%rax)
callq 0x110dd0
movb %al, -0x5c9(%rbp)
jmp 0xa5c9b
movb -0x5c9(%rbp), %al
testb $0x1, %al
jne 0xa5dac
jmp 0xa5cab
movslq -0x208(%rbp), %rsi
leaq -0xf0(%rbp), %rdi
callq 0xae5c0
movq %rax, -0x5d8(%rbp)
jmp 0xa5cc7
movq -0x5d8(%rbp), %rax
movq 0x10(%rax), %rcx
movq %rcx, -0x260(%rbp)
movups (%rax), %xmm0
movaps %xmm0, -0x270(%rbp)
movslq -0x20c(%rbp), %rsi
leaq -0xf0(%rbp), %rdi
callq 0xae5c0
movq %rax, -0x5e0(%rbp)
jmp 0xa5cff
movq -0x5e0(%rbp), %rax
movq 0x10(%rax), %rcx
movq %rcx, -0x280(%rbp)
movups (%rax), %xmm0
movaps %xmm0, -0x290(%rbp)
movq -0x8(%rbp), %rdi
movq -0x280(%rbp), %rcx
movq %rsp, %rax
movq %rcx, 0x28(%rax)
movaps -0x290(%rbp), %xmm0
movups %xmm0, 0x18(%rax)
movq -0x260(%rbp), %rcx
movq %rcx, 0x10(%rax)
movaps -0x270(%rbp), %xmm0
movups %xmm0, (%rax)
callq 0x9f760
movb %al, -0x5e1(%rbp)
jmp 0xa5d5a
movb -0x5e1(%rbp), %al
testb $0x1, %al
jne 0xa5d66
jmp 0xa5da7
testb $0x1, -0x19(%rbp)
je 0xa5da3
movslq -0x208(%rbp), %rsi
leaq -0xc0(%rbp), %rdi
callq 0x101d0
movq %rax, -0x5f0(%rbp)
jmp 0xa5d88
movq -0x5f0(%rbp), %rax
movl (%rax), %esi
leaq 0x153626(%rip), %rdi    # 0x1f93be
xorl %eax, %eax
callq 0x5070
jmp 0xa5da1
jmp 0xa5da3
movb $0x1, -0x51(%rbp)
jmp 0xa60d6
testb $0x1, -0x5d(%rbp)
je 0xa60d4
movslq -0x208(%rbp), %rsi
leaq -0xf0(%rbp), %rdi
callq 0xae5c0
movq %rax, -0x5f8(%rbp)
jmp 0xa5dd2
movq -0x5f8(%rbp), %rax
movq 0x10(%rax), %rcx
movq %rcx, -0x2d0(%rbp)
movups (%rax), %xmm0
movaps %xmm0, -0x2e0(%rbp)
movq -0x2d0(%rbp), %rcx
movq %rsp, %rax
movq %rcx, 0x10(%rax)
movaps -0x2e0(%rbp), %xmm0
movups %xmm0, (%rax)
leaq -0x2c0(%rbp), %rdi
callq 0xe9320
jmp 0xa5e14
leaq -0x2a8(%rbp), %rdi
leaq -0x38(%rbp), %rsi
leaq -0x2c0(%rbp), %rdx
callq 0xeadf0
jmp 0xa5e2d
movslq -0x20c(%rbp), %rsi
leaq -0xf0(%rbp), %rdi
callq 0xae5c0
movq %rax, -0x600(%rbp)
jmp 0xa5e49
movq -0x600(%rbp), %rsi
leaq -0x310(%rbp), %rdi
leaq -0x2a8(%rbp), %rdx
callq 0xeae50
jmp 0xa5e65
movq -0x300(%rbp), %rcx
movq %rsp, %rax
movq %rcx, 0x10(%rax)
movups -0x310(%rbp), %xmm0
movups %xmm0, (%rax)
leaq -0x2f8(%rbp), %rdi
callq 0xe9320
jmp 0xa5e8b
movl $0x0, -0x314(%rbp)
movl $0xffffffff, -0x318(%rbp) # imm = 0xFFFFFFFF
xorl %eax, %eax
cmpl $0x2, -0x318(%rbp)
movb %al, -0x601(%rbp)
jge 0xa5ec0
cmpl $0x2, -0x314(%rbp)
setl %al
movb %al, -0x601(%rbp)
movb -0x601(%rbp), %al
testb $0x1, %al
jne 0xa5ecf
jmp 0xa6076
movl $0xffffffff, -0x31c(%rbp) # imm = 0xFFFFFFFF
xorl %eax, %eax
cmpl $0x2, -0x31c(%rbp)
movb %al, -0x602(%rbp)
jge 0xa5efa
cmpl $0x2, -0x314(%rbp)
setl %al
movb %al, -0x602(%rbp)
movb -0x602(%rbp), %al
testb $0x1, %al
jne 0xa5f09
jmp 0xa6060
movl $0xffffffff, -0x320(%rbp) # imm = 0xFFFFFFFF
xorl %eax, %eax
cmpl $0x2, -0x320(%rbp)
movb %al, -0x603(%rbp)
jge 0xa5f34
cmpl $0x2, -0x314(%rbp)
setl %al
movb %al, -0x603(%rbp)
movb -0x603(%rbp), %al
testb $0x1, %al
jne 0xa5f43
jmp 0xa604a
cvtsi2sdl -0x318(%rbp), %xmm0
cvtsi2sdl -0x31c(%rbp), %xmm1
cvtsi2sdl -0x320(%rbp), %xmm2
leaq -0x338(%rbp), %rdi
callq 0xea8e0
jmp 0xa5f69
movq -0x8(%rbp), %rax
movq %rax, -0x610(%rbp)
leaq -0x368(%rbp), %rdi
leaq -0x2f8(%rbp), %rsi
leaq -0x338(%rbp), %rdx
callq 0xeae50
jmp 0xa5f90
movq -0x610(%rbp), %rsi
leaq -0x350(%rbp), %rdi
leaq -0x368(%rbp), %rdx
callq 0x97310
jmp 0xa5fac
movq -0x340(%rbp), %rax
movq %rax, -0x370(%rbp)
movups -0x350(%rbp), %xmm0
movaps %xmm0, -0x380(%rbp)
movq -0x40(%rbp), %rax
movq %rax, -0x390(%rbp)
movups -0x50(%rbp), %xmm0
movaps %xmm0, -0x3a0(%rbp)
movq -0x390(%rbp), %rcx
movq %rsp, %rax
movq %rcx, 0x28(%rax)
movaps -0x3a0(%rbp), %xmm0
movups %xmm0, 0x18(%rax)
movq -0x370(%rbp), %rcx
movq %rcx, 0x10(%rax)
movaps -0x380(%rbp), %xmm0
movups %xmm0, (%rax)
callq 0x110dd0
movb %al, -0x611(%rbp)
jmp 0xa6019
movb -0x611(%rbp), %al
testb $0x1, %al
jne 0xa6025
jmp 0xa6034
movl -0x314(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x314(%rbp)
jmp 0xa6036
movl -0x320(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x320(%rbp)
jmp 0xa5f13
jmp 0xa604c
movl -0x31c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x31c(%rbp)
jmp 0xa5ed9
jmp 0xa6062
movl -0x318(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x318(%rbp)
jmp 0xa5e9f
cmpl $0x1, -0x314(%rbp)
jle 0xa60d2
testb $0x1, -0x19(%rbp)
je 0xa60ce
movl -0x314(%rbp), %eax
movl %eax, -0x624(%rbp)
movslq -0x208(%rbp), %rsi
leaq -0xc0(%rbp), %rdi
callq 0x101d0
movq %rax, -0x620(%rbp)
jmp 0xa60ad
movl -0x624(%rbp), %esi
movq -0x620(%rbp), %rax
movl (%rax), %edx
leaq 0x15335c(%rip), %rdi    # 0x1f941f
xorl %eax, %eax
callq 0x5070
jmp 0xa60cc
jmp 0xa60ce
movb $0x1, -0x51(%rbp)
jmp 0xa60d4
jmp 0xa60d6
jmp 0xa695e
movslq -0x208(%rbp), %rsi
leaq -0xf0(%rbp), %rdi
callq 0xae5c0
movq %rax, -0x630(%rbp)
jmp 0xa60f7
movq -0x630(%rbp), %rax
movq 0x10(%rax), %rcx
movq %rcx, -0x3b0(%rbp)
movups (%rax), %xmm0
movaps %xmm0, -0x3c0(%rbp)
movslq -0x20c(%rbp), %rsi
leaq -0xf0(%rbp), %rdi
callq 0xae5c0
movq %rax, -0x638(%rbp)
jmp 0xa612f
movq -0x638(%rbp), %rax
movq 0x10(%rax), %rcx
movq %rcx, -0x3d0(%rbp)
movups (%rax), %xmm0
movaps %xmm0, -0x3e0(%rbp)
movq -0x8(%rbp), %rdi
movq -0x3d0(%rbp), %rcx
movq %rsp, %rax
movq %rcx, 0x28(%rax)
movaps -0x3e0(%rbp), %xmm0
movups %xmm0, 0x18(%rax)
movq -0x3b0(%rbp), %rcx
movq %rcx, 0x10(%rax)
movaps -0x3c0(%rbp), %xmm0
movups %xmm0, (%rax)
callq 0x9f760
movb %al, -0x639(%rbp)
jmp 0xa618a
movb -0x639(%rbp), %al
testb $0x1, %al
jne 0xa6199
jmp 0xa695c
movslq -0x208(%rbp), %rsi
leaq -0x118(%rbp), %rdi
callq 0xfff0
movq %rdx, -0x650(%rbp)
movq %rax, -0x648(%rbp)
jmp 0xa61bc
movq -0x650(%rbp), %rax
movq -0x648(%rbp), %rcx
movq %rcx, -0x3f0(%rbp)
movq %rax, -0x3e8(%rbp)
leaq -0x3f0(%rbp), %rdi
callq 0x101a0
movb %al, %cl
movb $0x1, %al
testb $0x1, %cl
movb %al, -0x651(%rbp)
jne 0xa61f5
jmp 0xa6248
movslq -0x20c(%rbp), %rsi
leaq -0x118(%rbp), %rdi
callq 0xfff0
movq %rdx, -0x668(%rbp)
movq %rax, -0x660(%rbp)
jmp 0xa6218
movq -0x668(%rbp), %rax
movq -0x660(%rbp), %rcx
movq %rcx, -0x400(%rbp)
movq %rax, -0x3f8(%rbp)
leaq -0x400(%rbp), %rdi
callq 0x101a0
xorb $-0x1, %al
movb %al, -0x651(%rbp)
movb -0x651(%rbp), %al
testb $0x1, %al
jne 0xa6257
jmp 0xa674e
testb $0x1, -0x19(%rbp)
je 0xa6745
movq -0x10(%rbp), %rax
movq %rax, -0x678(%rbp)
movslq -0x208(%rbp), %rsi
leaq -0xc0(%rbp), %rdi
callq 0x101d0
movq %rax, -0x670(%rbp)
jmp 0xa6288
movq -0x678(%rbp), %rdi
movq -0x670(%rbp), %rax
movslq (%rax), %rsi
callq 0xaf120
movq %rax, -0x680(%rbp)
jmp 0xa62a7
movq -0x680(%rbp), %rax
addq $0x18, %rax
movq %rax, -0x690(%rbp)
movslq -0x208(%rbp), %rsi
leaq -0xd8(%rbp), %rdi
callq 0x101d0
movq %rax, -0x688(%rbp)
jmp 0xa62d5
movq -0x690(%rbp), %rdi
movq -0x688(%rbp), %rax
movslq (%rax), %rsi
callq 0xaf450
movq %rax, -0x698(%rbp)
jmp 0xa62f4
movq -0x698(%rbp), %rdi
callq 0x5200
movq %rax, -0x6a8(%rbp)
movslq -0x208(%rbp), %rsi
leaq -0xf0(%rbp), %rdi
callq 0xae5c0
movq %rax, -0x6a0(%rbp)
jmp 0xa6323
movq -0x6a0(%rbp), %rax
movsd (%rax), %xmm0
movsd %xmm0, -0x6b8(%rbp)
movslq -0x208(%rbp), %rsi
leaq -0xf0(%rbp), %rdi
callq 0xae5c0
movq %rax, -0x6b0(%rbp)
jmp 0xa6352
movq -0x6b0(%rbp), %rax
movsd 0x8(%rax), %xmm0
movsd %xmm0, -0x6c8(%rbp)
movslq -0x208(%rbp), %rsi
leaq -0xf0(%rbp), %rdi
callq 0xae5c0
movq %rax, -0x6c0(%rbp)
jmp 0xa6382
movq -0x6c0(%rbp), %rax
movsd 0x10(%rax), %xmm0
movsd %xmm0, -0x6e0(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x6d8(%rbp)
movslq -0x20c(%rbp), %rsi
leaq -0xc0(%rbp), %rdi
callq 0x101d0
movq %rax, -0x6d0(%rbp)
jmp 0xa63bd
movq -0x6d8(%rbp), %rdi
movq -0x6d0(%rbp), %rax
movslq (%rax), %rsi
callq 0xaf120
movq %rax, -0x6e8(%rbp)
jmp 0xa63dc
movq -0x6e8(%rbp), %rax
addq $0x18, %rax
movq %rax, -0x6f8(%rbp)
movslq -0x20c(%rbp), %rsi
leaq -0xd8(%rbp), %rdi
callq 0x101d0
movq %rax, -0x6f0(%rbp)
jmp 0xa640a
movq -0x6f8(%rbp), %rdi
movq -0x6f0(%rbp), %rax
movslq (%rax), %rsi
callq 0xaf450
movq %rax, -0x700(%rbp)
jmp 0xa6429
movq -0x700(%rbp), %rdi
callq 0x5200
movq %rax, -0x710(%rbp)
movslq -0x20c(%rbp), %rsi
leaq -0xf0(%rbp), %rdi
callq 0xae5c0
movq %rax, -0x708(%rbp)
jmp 0xa6458
movq -0x708(%rbp), %rax
movsd (%rax), %xmm0
movsd %xmm0, -0x720(%rbp)
movslq -0x20c(%rbp), %rsi
leaq -0xf0(%rbp), %rdi
callq 0xae5c0
movq %rax, -0x718(%rbp)
jmp 0xa6487
movq -0x718(%rbp), %rax
movsd 0x8(%rax), %xmm0
movsd %xmm0, -0x730(%rbp)
movslq -0x20c(%rbp), %rsi
leaq -0xf0(%rbp), %rdi
callq 0xae5c0
movq %rax, -0x728(%rbp)
jmp 0xa64b7
movq -0x728(%rbp), %rax
movsd 0x10(%rax), %xmm0
movsd %xmm0, -0x740(%rbp)
movslq -0x208(%rbp), %rsi
leaq -0xc0(%rbp), %rdi
callq 0x101d0
movq %rax, -0x738(%rbp)
jmp 0xa64e7
movq -0x738(%rbp), %rax
movl (%rax), %eax
movl %eax, -0x74c(%rbp)
movslq -0x20c(%rbp), %rsi
leaq -0xc0(%rbp), %rdi
callq 0x101d0
movq %rax, -0x748(%rbp)
jmp 0xa6512
movq -0x748(%rbp), %rax
movl (%rax), %eax
movl %eax, -0x758(%rbp)
movl -0x208(%rbp), %eax
movl %eax, -0x754(%rbp)
movl -0x20c(%rbp), %eax
movl %eax, -0x750(%rbp)
movq -0x8(%rbp), %rsi
leaq -0x478(%rbp), %rdi
callq 0x96bf0
jmp 0xa654b
movslq -0x208(%rbp), %rsi
leaq -0xf0(%rbp), %rdi
callq 0xae5c0
movq %rax, -0x760(%rbp)
jmp 0xa6567
movq -0x760(%rbp), %rax
movsd (%rax), %xmm0
movsd %xmm0, -0x770(%rbp)
movslq -0x208(%rbp), %rsi
leaq -0xf0(%rbp), %rdi
callq 0xae5c0
movq %rax, -0x768(%rbp)
jmp 0xa6596
movq -0x768(%rbp), %rax
movsd 0x8(%rax), %xmm0
movsd %xmm0, -0x780(%rbp)
movslq -0x208(%rbp), %rsi
leaq -0xf0(%rbp), %rdi
callq 0xae5c0
movq %rax, -0x778(%rbp)
jmp 0xa65c6
movq -0x778(%rbp), %rax
movsd 0x10(%rax), %xmm0
movsd %xmm0, -0x790(%rbp)
movslq -0x20c(%rbp), %rsi
leaq -0xf0(%rbp), %rdi
callq 0xae5c0
movq %rax, -0x788(%rbp)
jmp 0xa65f6
movq -0x788(%rbp), %rax
movsd (%rax), %xmm0
movsd %xmm0, -0x7a0(%rbp)
movslq -0x20c(%rbp), %rsi
leaq -0xf0(%rbp), %rdi
callq 0xae5c0
movq %rax, -0x798(%rbp)
jmp 0xa6625
movq -0x798(%rbp), %rax
movsd 0x8(%rax), %xmm0
movsd %xmm0, -0x7b0(%rbp)
movslq -0x20c(%rbp), %rsi
leaq -0xf0(%rbp), %rdi
callq 0xae5c0
movq %rax, -0x7a8(%rbp)
jmp 0xa6655
movsd -0x7b0(%rbp), %xmm4
movsd -0x7a0(%rbp), %xmm3
movsd -0x790(%rbp), %xmm2
movsd -0x780(%rbp), %xmm1
movsd -0x770(%rbp), %xmm0
movq -0x7a8(%rbp), %rax
movsd 0x10(%rax), %xmm5
leaq -0x478(%rbp), %rdi
callq 0xd7d80
movsd %xmm0, -0x7b8(%rbp)
jmp 0xa669f
movsd -0x7b8(%rbp), %xmm6
movl -0x754(%rbp), %r9d
movl -0x758(%rbp), %r8d
movl -0x74c(%rbp), %ecx
movsd -0x740(%rbp), %xmm5
movsd -0x730(%rbp), %xmm4
movsd -0x720(%rbp), %xmm3
movq -0x710(%rbp), %rdx
movsd -0x6e0(%rbp), %xmm2
movsd -0x6c8(%rbp), %xmm1
movsd -0x6b8(%rbp), %xmm0
movq -0x6a8(%rbp), %rsi
movl -0x750(%rbp), %edi
movq %rsp, %rax
movl %edi, (%rax)
leaq 0x152d81(%rip), %rdi    # 0x1f948c
movb $0x7, %al
callq 0x5070
jmp 0xa6714
leaq -0x478(%rbp), %rdi
callq 0x122d0
jmp 0xa6745
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x128(%rbp)
movl %eax, -0x12c(%rbp)
leaq -0x478(%rbp), %rdi
callq 0x122d0
jmp 0xa69d4
movb $0x1, -0x51(%rbp)
jmp 0xa695a
movb $0x0, -0x479(%rbp)
movl $0x0, -0x480(%rbp)
movl -0x480(%rbp), %ecx
xorl %eax, %eax
cmpl -0x5c(%rbp), %ecx
movb %al, -0x7b9(%rbp)
jge 0xa6780
movb -0x479(%rbp), %al
xorb $-0x1, %al
movb %al, -0x7b9(%rbp)
movb -0x7b9(%rbp), %al
testb $0x1, %al
jne 0xa678f
jmp 0xa68dd
movq -0x18(%rbp), %rdi
movslq -0x480(%rbp), %rsi
callq 0xaf0e0
movq %rax, -0x7c8(%rbp)
jmp 0xa67a8
movq -0x7c8(%rbp), %rax
movups (%rax), %xmm0
movups 0xc(%rax), %xmm1
movups %xmm1, -0x494(%rbp)
movaps %xmm0, -0x4a0(%rbp)
movl -0x4a0(%rbp), %eax
movl %eax, -0x4a4(%rbp)
movl -0x49c(%rbp), %eax
movl %eax, -0x4a8(%rbp)
movl -0x4a4(%rbp), %eax
movl %eax, -0x7d4(%rbp)
movslq -0x208(%rbp), %rsi
leaq -0xc0(%rbp), %rdi
callq 0x101d0
movq %rax, -0x7d0(%rbp)
jmp 0xa6804
movl -0x7d4(%rbp), %eax
movq -0x7d0(%rbp), %rcx
cmpl (%rcx), %eax
jne 0xa684e
movl -0x4a8(%rbp), %eax
movl %eax, -0x7e4(%rbp)
movslq -0x20c(%rbp), %rsi
leaq -0xc0(%rbp), %rdi
callq 0x101d0
movq %rax, -0x7e0(%rbp)
jmp 0xa683d
movl -0x7e4(%rbp), %eax
movq -0x7e0(%rbp), %rcx
cmpl (%rcx), %eax
je 0xa68c0
movl -0x4a8(%rbp), %eax
movl %eax, -0x7f4(%rbp)
movslq -0x208(%rbp), %rsi
leaq -0xc0(%rbp), %rdi
callq 0x101d0
movq %rax, -0x7f0(%rbp)
jmp 0xa6876
movl -0x7f4(%rbp), %eax
movq -0x7f0(%rbp), %rcx
cmpl (%rcx), %eax
jne 0xa68c7
movl -0x4a4(%rbp), %eax
movl %eax, -0x804(%rbp)
movslq -0x20c(%rbp), %rsi
leaq -0xc0(%rbp), %rdi
callq 0x101d0
movq %rax, -0x800(%rbp)
jmp 0xa68af
movl -0x804(%rbp), %eax
movq -0x800(%rbp), %rcx
cmpl (%rcx), %eax
jne 0xa68c7
movb $0x1, -0x479(%rbp)
jmp 0xa68c9
movl -0x480(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x480(%rbp)
jmp 0xa675f
testb $0x1, -0x479(%rbp)
jne 0xa6958
testb $0x1, -0x19(%rbp)
je 0xa6954
movslq -0x208(%rbp), %rsi
leaq -0xc0(%rbp), %rdi
callq 0x101d0
movq %rax, -0x810(%rbp)
jmp 0xa6908
movq -0x810(%rbp), %rax
movl (%rax), %eax
movl %eax, -0x81c(%rbp)
movslq -0x20c(%rbp), %rsi
leaq -0xc0(%rbp), %rdi
callq 0x101d0
movq %rax, -0x818(%rbp)
jmp 0xa6933
movl -0x81c(%rbp), %esi
movq -0x818(%rbp), %rax
movl (%rax), %edx
leaq 0x152c44(%rip), %rdi    # 0x1f958d
xorl %eax, %eax
callq 0x5070
jmp 0xa6952
jmp 0xa6954
movb $0x1, -0x51(%rbp)
jmp 0xa695a
jmp 0xa695c
jmp 0xa695e
jmp 0xa6960
movl -0x20c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x20c(%rbp)
jmp 0xa5a7e
jmp 0xa6976
movl -0x208(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x208(%rbp)
jmp 0xa5a3f
movb -0x51(%rbp), %al
movb %al, -0x81d(%rbp)
leaq -0x118(%rbp), %rdi
callq 0xf9b0
leaq -0xf0(%rbp), %rdi
callq 0x12210
leaq -0xd8(%rbp), %rdi
callq 0xec80
leaq -0xc0(%rbp), %rdi
callq 0xec80
movb -0x81d(%rbp), %al
andb $0x1, %al
addq $0x850, %rsp            # imm = 0x850
popq %rbp
retq
leaq -0x118(%rbp), %rdi
callq 0xf9b0
leaq -0xf0(%rbp), %rdi
callq 0x12210
leaq -0xd8(%rbp), %rdi
callq 0xec80
leaq -0xc0(%rbp), %rdi
callq 0xec80
movq -0x128(%rbp), %rdi
callq 0x58f0