// File: /workspace/github_cpp_makefile_star2_O3/tomfunkhouser[P]gaps/pkgs/R3Graphics/R3Scene.cpp
// Function: gaps::R3Scene::ReadSUNCGFile(char const*, gaps::R3SceneNode*)
int R3Scene::
ReadSUNCGFile(const char *filename, R3SceneNode *parent_node)
{
  // Useful variables
  const char *input_data_directory = "../..";
  RNSymbolTable<R2Texture *> texture_symbol_table;
  RNSymbolTable<R3Scene *> model_symbol_table;
  if (!parent_node) parent_node = root;
  
  // Open file
  FILE* fp = fopen(filename, "rb");
  if (!fp) {
    RNFail("Unable to open SUNCG file %s\n", filename);
    return 0;
  }

  // Read file 
  std::string text;
  fseek(fp, 0, SEEK_END);
  long const size = ftell(fp);
  fseek(fp, 0, SEEK_SET);
  char* buffer = new char[size + 1];
  unsigned long const usize = static_cast<unsigned long const>(size);
  if (fread(buffer, 1, usize, fp) != usize) { RNFail("Unable to read %s\n", filename); return 0; }
  else { buffer[size] = 0; text = buffer; }
  delete[] buffer;

  // Close file
  fclose(fp);

  // Digest file
  Json::Value json_root;
  Json::Reader json_reader;
  Json::Value *json_items, *json_item, *json_value;
  if (!json_reader.parse(text, json_root, false)) {
    RNFail("Unable to parse %s\n", filename);
    return 0;
  }

  // Get/check version
  char version[1024];
  strncpy(version, "suncg@1.0.0", 1023);
  if (GetJsonObjectMember(json_value, &json_root, "version", Json::stringValue)) {
    strncpy(version, json_value->asString().c_str(), 1023);
    if (strncmp(version, "suncg", 5)) {
      RNFail("Unrecognized version %s in SUNCG file %s\n", version, filename);
      return 0;
    }
  }
  
  // Get scene id
  char scene_id[1024];
  strncpy(scene_id, "NoName", 1023);
  if (GetJsonObjectMember(json_value, &json_root, "id", Json::stringValue)) {
    strncpy(scene_id, json_value->asString().c_str(), 1023);
  }
  
  // Get scene up direction
  R3Vector scene_up(0, 1, 0);
  if (GetJsonObjectMember(json_items, &json_root, "up", Json::arrayValue)) {
    if (json_items->size() >= 3) {
      if (GetJsonArrayEntry(json_item, json_items, 0))
        scene_up[0] = json_item->asDouble();
      if (GetJsonArrayEntry(json_item, json_items, 1))
        scene_up[1] = json_item->asDouble();
      if (GetJsonArrayEntry(json_item, json_items, 2))
        scene_up[2] = json_item->asDouble();
      scene_up.Normalize();
    }
  }

  // Get scene front direction
  R3Vector scene_front(0, 0, 1);
  if (GetJsonObjectMember(json_items, &json_root, "front", Json::arrayValue)) {
    if (json_items->size() >= 3) {
      if (GetJsonArrayEntry(json_item, json_items, 0))
        scene_front[0] = json_item->asDouble();
      if (GetJsonArrayEntry(json_item, json_items, 1))
        scene_front[1] = json_item->asDouble();
      if (GetJsonArrayEntry(json_item, json_items, 2))
        scene_front[2] = json_item->asDouble();
      scene_front.Normalize();
    }
  }

  // Get scene scale factor (to convert to meters)
  double scaleToMeters = 1.0;
  if (GetJsonObjectMember(json_value, &json_root, "scaleToMeters")) {
    scaleToMeters = json_value->asDouble();
  }
  
  // Create scene node 
  R3SceneNode *scene_node = parent_node;
  scene_node->SetName(scene_id);

  // Set scene transformation
  R3Affine scene_transformation = R3identity_affine;
  // Set up and front directions
  scene_transformation.Scale(scaleToMeters);
  scene_node->SetTransformation(scene_transformation);

  // Parse levels
  Json::Value *json_levels, *json_level;
  if (!GetJsonObjectMember(json_levels, &json_root, "levels", Json::arrayValue)) return 0;
  for (Json::ArrayIndex index = 0; index < json_levels->size(); index++) {
    if (!GetJsonArrayEntry(json_level, json_levels, index)) return 0;
    if (json_level->type() != Json::objectValue) continue;
           
    // Parse level attributes
    int level_id = index;
    if (GetJsonObjectMember(json_value, json_level, "valid"))
      if (json_value->asString() == std::string("0"))  continue;
    if (GetJsonObjectMember(json_value, json_level, "id"))
      level_id = atoi(json_value->asString().c_str());

    // Create level node
    char level_name[1024];
    sprintf(level_name, "Level#%d", level_id);
    R3SceneNode *level_node = new R3SceneNode(this);
    level_node->SetName(level_name);
    scene_node->InsertChild(level_node);

    // Parse nodes
    Json::Value *json_nodes, *json_node, *json_materials;
    if (GetJsonObjectMember(json_nodes, json_level, "nodes", Json::arrayValue)) {
      if (json_nodes->size() == 0) continue;
      R3SceneNode **created_nodes = new R3SceneNode * [ json_nodes->size() ];
      for (unsigned int i = 0; i < json_nodes->size(); i++) created_nodes[i] = NULL;
      for (Json::ArrayIndex index = 0; index < json_nodes->size(); index++) {
        if (!GetJsonArrayEntry(json_node, json_nodes, index)) continue; 
        if (json_node->type() != Json::objectValue) continue;
 
        // Parse node attributes
        char node_id[1024] = { '\0' };;
        char modelId[1024] = { '\0' };;
        char node_type[1024] = { '\0' };
        int hideCeiling = 0, hideFloor = 0, hideWalls = 0;
        int isMirrored = 0, state = 0;
        if (GetJsonObjectMember(json_value, json_node, "valid"))
          if (json_value->asString() == std::string("0"))  continue;
        if (GetJsonObjectMember(json_value, json_node, "id"))
          strncpy(node_id, json_value->asString().c_str(), 1023);
        if (GetJsonObjectMember(json_value, json_node, "type")) 
          strncpy(node_type, json_value->asString().c_str(), 1023);
        if (GetJsonObjectMember(json_value, json_node, "modelId"))
          strncpy(modelId, json_value->asString().c_str(), 1023);
        if (GetJsonObjectMember(json_value, json_node, "hideCeiling")) 
          if (json_value->asString() == std::string("1")) hideCeiling = 1;
        if (GetJsonObjectMember(json_value, json_node, "hideFloor")) 
          if (json_value->asString() == std::string("1")) hideFloor = 1;
        if (GetJsonObjectMember(json_value, json_node, "hideWalls")) 
          if (json_value->asString() == std::string("1")) hideWalls = 1;
        if (GetJsonObjectMember(json_value, json_node, "isMirrored")) 
          if (json_value->asString() == std::string("1")) isMirrored = 1;
        if (GetJsonObjectMember(json_value, json_node, "state")) 
          if (json_value->asString() == std::string("1")) state = 1;

        // Parse node transformation
        R3Affine transformation = R3identity_affine;
        if (GetJsonObjectMember(json_items, json_node, "transform", Json::arrayValue)) {
          if (json_items->size() >= 16) {
            R4Matrix matrix = R4identity_matrix;
            for (Json::ArrayIndex index = 0; index < json_items->size(); index++) {
              if (!GetJsonArrayEntry(json_item, json_items, index)) continue;
              matrix[index%4][index/4] = json_item->asDouble();
            }
            transformation.Reset(matrix, isMirrored);
          }
        }

        // Create scene node(s) based on type
        char obj_name[4096], node_name[4096];
        if (!strcmp(node_type, "Ground")) {
          // Create node for ground
          sprintf(obj_name, "%s/room/%s/%sf.obj", input_data_directory, scene_id, modelId); 
          if (!hideFloor && RNFileExists(obj_name)) {
            R3Scene *model = new R3Scene();
            if (!ReadObj(model, model->Root(), obj_name)) return 0;
            sprintf(node_name, "Ground#%s", node_id);
            model->SetName(node_name);
            model->Root()->SetName(node_name);
            model->SetFilename(obj_name);
            InsertReferencedScene(model);
            R3SceneNode *node = new R3SceneNode(this);
            node->InsertReference(new R3SceneReference(model, materials));
            node->SetName(node_name);
            node->SetTransformation(transformation);
            level_node->InsertChild(node);
            // R3SceneNode *node = new R3SceneNode(this);
            // sprintf(node_name, "Ground#%s", node_id);
            // node->SetName(node_name);
            // if (!ReadObj(this, node, obj_name)) return 0;
            // level_node->InsertChild(node);
            created_nodes[index] = node;
          }
        }
        else if (!strcmp(node_type, "Room")) {
          // Create room node
          R3SceneNode *room_node = new R3SceneNode(this);
          sprintf(node_name, "Room#%s", node_id);
          room_node->SetName(node_name);
          // room_node->SetTransformation(transformation);
          level_node->InsertChild(room_node);
          created_nodes[index] = room_node;
          RNArray<R3Material *> materials;
          
           // Create node for floor
          sprintf(obj_name, "%s/room/%s/%sf.obj", input_data_directory, scene_id, modelId); 
          if (!hideFloor && RNFileExists(obj_name)) {
            R3Scene *model = new R3Scene();
            if (!ReadObj(model, model->Root(), obj_name)) return 0;
            sprintf(node_name, "Floor#%s", node_id);
            model->SetName(node_name);
            model->Root()->SetName(node_name);
            model->SetFilename(obj_name);
            InsertReferencedScene(model);
            R3SceneNode *node = new R3SceneNode(this);
            node->InsertReference(new R3SceneReference(model, materials));
            node->SetName(node_name);
            room_node->InsertChild(node);
            // R3SceneNode *node = new R3SceneNode(this);
            // sprintf(node_name, "Floor#%s", node_id);
            // node->SetName(node_name);
            // if (!ReadObj(this, node, obj_name)) return 0;
            // room_node->InsertChild(node);
          }

          // Create node for ceiling
          sprintf(obj_name, "%s/room/%s/%sc.obj", input_data_directory, scene_id, modelId); 
          if (!hideCeiling && RNFileExists(obj_name)) {
            R3Scene *model = new R3Scene();
            if (!ReadObj(model, model->Root(), obj_name)) return 0;
            sprintf(node_name, "Ceiling#%s", node_id);
            model->SetName(node_name);
            model->Root()->SetName(node_name);
            model->SetFilename(obj_name);
            InsertReferencedScene(model);
            R3SceneNode *node = new R3SceneNode(this);
            node->InsertReference(new R3SceneReference(model, materials));
            node->SetName(node_name);
            room_node->InsertChild(node);
            // R3SceneNode *node = new R3SceneNode(this);
            // sprintf(node_name, "Ceiling#%s", node_id);
            // node->SetName(node_name);
            // if (!ReadObj(this, node, obj_name)) return 0;
            // room_node->InsertChild(node);
          }
          
          // Create node for walls
          sprintf(obj_name, "%s/room/%s/%sw.obj", input_data_directory, scene_id, modelId); 
          if (!hideWalls && RNFileExists(obj_name)) {
            R3Scene *model = new R3Scene();
            if (!ReadObj(model, model->Root(), obj_name)) return 0;
            sprintf(node_name, "Wall#%s", node_id);
            model->SetName(node_name);
            model->Root()->SetName(node_name);
            model->SetFilename(obj_name);
            InsertReferencedScene(model);
            R3SceneNode *node = new R3SceneNode(this);
            node->InsertReference(new R3SceneReference(model, materials));
            node->SetName(node_name);
            room_node->InsertChild(node);
            // R3SceneNode *node = new R3SceneNode(this);
            // sprintf(node_name, "Wall#%s", node_id);
            // node->SetName(node_name);
            // if (!ReadObj(this, node, obj_name)) return 0;
            // room_node->InsertChild(node);
          }        
        }
        else if (!strcmp(node_type, "Object")) {
          // Read/get model 
          R3Scene *model = NULL;
          if (state) sprintf(obj_name, "%s/object/%s/%s_0.obj", input_data_directory, modelId, modelId); 
          else sprintf(obj_name, "%s/object/%s/%s.obj", input_data_directory, modelId, modelId); 
          if (!model_symbol_table.Find(obj_name, &model)) {
            model = new R3Scene();
            if (!ReadObj(model, model->Root(), obj_name)) return 0;
            sprintf(node_name, "Model#%s", modelId);
            model->SetName(modelId);
            model->Root()->SetName(node_name);
            model->SetFilename(obj_name);
            InsertReferencedScene(model);
            model_symbol_table.Insert(obj_name, model);
          }

          // Read materials
          RNArray<R3Material *> materials;
          if (GetJsonObjectMember(json_materials, json_node, "materials", Json::arrayValue)) {
            if (!ParseSUNCGMaterials(this, texture_symbol_table, model->materials, materials, json_materials)) return 0;
          }

          // Create node with reference to model
          R3SceneNode *node = new R3SceneNode(this);
          sprintf(node_name, "Object#%s", node_id);
          node->InsertReference(new R3SceneReference(model, materials));
          node->SetName(node_name);
          node->SetTransformation(transformation);
          level_node->InsertChild(node);
          created_nodes[index] = node;
        }
        else if (!strcmp(node_type, "Box")) {
          // Parse box dimensions
          RNScalar box_dimensions[3] = { 1, 1, 1 };
          if (GetJsonObjectMember(json_items, json_node, "dimensions", Json::arrayValue)) {
            if (json_items->size() >= 3) {
              if (GetJsonArrayEntry(json_item, json_items, 0))
                box_dimensions[0] = json_item->asDouble();
              if (GetJsonArrayEntry(json_item, json_items, 1))
                box_dimensions[1] = json_item->asDouble();
              if (GetJsonArrayEntry(json_item, json_items, 2))
                box_dimensions[2] = json_item->asDouble();
            }
          }

          // Read materials
          RNArray<R3Material *> materials;
          if (GetJsonObjectMember(json_materials, json_node, "materials", Json::arrayValue)) {
            if (!ParseSUNCGMaterials(this, texture_symbol_table, materials, materials, json_materials)) return 0;
          }

          // Create node for box
          R3SceneNode *node = new R3SceneNode(this);
          sprintf(node_name, "Box#%s", node_id);
          node->SetName(node_name);
          node->SetTransformation(transformation);
          if (!CreateBox(this, node, box_dimensions, materials)) return 0;
          level_node->InsertChild(node);
          created_nodes[index] = node;
        }
      }

      // Move created nodes to be children of room nodes
      for (Json::ArrayIndex index = 0; index < json_nodes->size(); index++) {
        if (!GetJsonArrayEntry(json_node, json_nodes, index)) continue; 
        if (json_node->type() != Json::objectValue) continue;
        if (!GetJsonObjectMember(json_value, json_node, "type")) continue;
        if (strcmp(json_value->asString().c_str(), "Room")) continue;
        R3SceneNode *room_node = created_nodes[index];
        if (!room_node) continue;
        if (GetJsonObjectMember(json_items, json_node, "nodeIndices", Json::arrayValue)) {
          for (Json::ArrayIndex room_index = 0; room_index < json_items->size(); room_index++) {
            GetJsonArrayEntry(json_item, json_items, room_index);
            if (json_item->isNumeric()) {
              int node_index = json_item->asInt();
              if ((node_index >= 0) && ((unsigned int) node_index < json_nodes->size())) {
                R3SceneNode *node = created_nodes[node_index];
                if (node) {
                  level_node->RemoveChild(node);
                  room_node->InsertChild(node); 
                }
              }
            }
          }
        }
      }
      
      // Delete array of created nodes
      delete [] created_nodes;
    }
  }
    
  // Return success
  return 1;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x3e48, %rsp           # imm = 0x3E48
movq %rdx, %r14
movq %rsi, %rbx
movq %rdi, 0x18(%rsp)
movl $0x30, %edi
callq 0x218c0
leaq 0x8(%rax), %rcx
xorpd %xmm0, %xmm0
movupd %xmm0, (%rax)
xorl %edx, %edx
movq %rdx, 0x10(%rax)
movq %rcx, 0x18(%rax)
movq %rcx, 0x20(%rax)
movq %rdx, 0x28(%rax)
movq %rax, 0x90(%rsp)
movl $0x30, %edi
callq 0x218c0
movq %rax, %rcx
addq $0x8, %rcx
xorpd %xmm0, %xmm0
movupd %xmm0, (%rax)
xorl %edx, %edx
movq %rdx, 0x10(%rax)
movq %rcx, 0x18(%rax)
movq %rcx, 0x20(%rax)
movq %rdx, 0x28(%rax)
movq %rax, 0x58(%rsp)
testq %r14, %r14
jne 0x2dd59
movq 0x18(%rsp), %rax
movq (%rax), %r14
movq %r14, 0x98(%rsp)
leaq 0xad3c6(%rip), %rsi     # 0xdb12e
movq %rbx, %rdi
callq 0x21ab0
testq %rax, %rax
je 0x2df27
movq %rax, %r14
leaq 0x160(%rsp), %rax
movq %rax, -0x10(%rax)
movq $0x0, -0x8(%rax)
movb $0x0, (%rax)
movq %r14, %rdi
xorl %esi, %esi
movl $0x2, %edx
callq 0x219c0
movq %r14, %rdi
callq 0x21030
movq %rax, %r12
movq %r14, %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0x219c0
leaq 0x1(%r12), %rdi
callq 0x21040
movq %rax, %r15
movl $0x1, %esi
movq %rax, %rdi
movq %r12, %rdx
movq %r14, %rcx
callq 0x21e40
cmpq %r12, %rax
jne 0x2df3f
movb $0x0, (%r15,%r12)
leaq 0x150(%rsp), %r12
movq 0x8(%r12), %r13
movq %r15, %rdi
callq 0x21380
movq %r12, %rdi
xorl %esi, %esi
movq %r13, %rdx
movq %r15, %rcx
movq %rax, %r8
callq 0x21eb0
movq %r15, %rdi
callq 0x21c20
movq %r14, %rdi
callq 0x218b0
leaq 0x1c0(%rsp), %rdi
xorl %esi, %esi
callq 0x923b4
leaq 0x420(%rsp), %rdi
callq 0x8a28c
leaq 0x420(%rsp), %rdi
leaq 0x150(%rsp), %rsi
leaq 0x1c0(%rsp), %rdx
xorl %ecx, %ecx
callq 0x8a41e
testb %al, %al
je 0x2df57
leaq 0xad30d(%rip), %rsi     # 0xdb176
leaq 0x3640(%rsp), %rdi
movl $0x3ff, %edx            # imm = 0x3FF
callq 0x21430
leaq 0xb9bd5(%rip), %rdx     # 0xe7a57
leaq 0x8(%rsp), %rdi
leaq 0x1c0(%rsp), %rsi
movl $0x4, %ecx
callq 0x34828
testl %eax, %eax
je 0x2df6f
movq 0x8(%rsp), %rsi
leaq 0x530(%rsp), %rdi
callq 0x8c0b8
leaq 0x540(%rsp), %r15
movq -0x10(%r15), %r14
leaq 0x3640(%rsp), %rdi
movl $0x3ff, %edx            # imm = 0x3FF
movq %r14, %rsi
callq 0x21430
cmpq %r15, %r14
je 0x2deec
movq 0x540(%rsp), %rsi
incq %rsi
movq %r14, %rdi
callq 0x218e0
movl $0x636e7573, %eax       # imm = 0x636E7573
xorl 0x3640(%rsp), %eax
movzbl 0x3644(%rsp), %ecx
xorl $0x67, %ecx
orl %eax, %ecx
je 0x2df6f
xorl %ebp, %ebp
leaq 0xad278(%rip), %rdi     # 0xdb188
leaq 0x3640(%rsp), %rsi
movq %rbx, %rdx
xorl %eax, %eax
callq 0x8a0fe
jmp 0x2ff4c
xorl %ebp, %ebp
leaq 0xad201(%rip), %rdi     # 0xdb131
movq %rbx, %rsi
xorl %eax, %eax
callq 0x8a0fe
jmp 0x2ffda
xorl %ebp, %ebp
leaq 0xad207(%rip), %rdi     # 0xdb14f
movq %rbx, %rsi
xorl %eax, %eax
callq 0x8a0fe
jmp 0x2ffb5
xorl %ebp, %ebp
leaq 0xad202(%rip), %rdi     # 0xdb162
movq %rbx, %rsi
xorl %eax, %eax
callq 0x8a0fe
jmp 0x2ff4c
leaq 0xac22e(%rip), %rsi     # 0xda1a4
leaq 0x3240(%rsp), %rdi
movl $0x3ff, %edx            # imm = 0x3FF
callq 0x21430
leaq 0xae13c(%rip), %rdx     # 0xdc0cb
leaq 0x8(%rsp), %rdi
leaq 0x1c0(%rsp), %rsi
movl $0x4, %ecx
callq 0x34828
testl %eax, %eax
je 0x2dff5
movq 0x8(%rsp), %rsi
leaq 0x530(%rsp), %rdi
callq 0x8c0b8
leaq 0x540(%rsp), %r14
movq -0x10(%r14), %rbx
leaq 0x3240(%rsp), %rdi
movl $0x3ff, %edx            # imm = 0x3FF
movq %rbx, %rsi
callq 0x21430
cmpq %r14, %rbx
je 0x2dff5
movq 0x540(%rsp), %rsi
incq %rsi
movq %rbx, %rdi
callq 0x218e0
leaq 0x248(%rsp), %rdi
movsd 0xac013(%rip), %xmm1    # 0xda018
xorpd %xmm0, %xmm0
xorps %xmm2, %xmm2
callq 0x75e5e
leaq 0xb2a6b(%rip), %rdx     # 0xe0a83
leaq 0x20(%rsp), %rdi
leaq 0x1c0(%rsp), %rsi
movl $0x6, %ecx
callq 0x34828
testl %eax, %eax
je 0x2e0d2
movq 0x20(%rsp), %rbx
movq %rbx, %rdi
callq 0x91428
cmpl $0x3, %eax
jb 0x2e0d2
leaq 0x10(%rsp), %rdi
movq %rbx, %rsi
xorl %edx, %edx
callq 0x348d9
testl %eax, %eax
je 0x2e073
movq 0x10(%rsp), %rdi
callq 0x934d8
movsd %xmm0, 0x248(%rsp)
leaq 0x10(%rsp), %rdi
movq %rbx, %rsi
movl $0x1, %edx
callq 0x348d9
testl %eax, %eax
je 0x2e09c
movq 0x10(%rsp), %rdi
callq 0x934d8
movsd %xmm0, 0x250(%rsp)
leaq 0x10(%rsp), %rdi
movq %rbx, %rsi
movl $0x2, %edx
callq 0x348d9
testl %eax, %eax
je 0x2e0c5
movq 0x10(%rsp), %rdi
callq 0x934d8
movsd %xmm0, 0x258(%rsp)
leaq 0x248(%rsp), %rdi
callq 0x76174
leaq 0x230(%rsp), %rdi
movsd 0xabf36(%rip), %xmm2    # 0xda018
xorpd %xmm0, %xmm0
xorpd %xmm1, %xmm1
movsd %xmm2, 0x30(%rsp)
callq 0x75e5e
leaq 0xad0b6(%rip), %rdx     # 0xdb1b2
leaq 0x20(%rsp), %rdi
leaq 0x1c0(%rsp), %rsi
movl $0x6, %ecx
callq 0x34828
testl %eax, %eax
je 0x2e1b6
movq 0x20(%rsp), %rbx
movq %rbx, %rdi
callq 0x91428
cmpl $0x3, %eax
jb 0x2e1b6
leaq 0x10(%rsp), %rdi
movq %rbx, %rsi
xorl %edx, %edx
callq 0x348d9
testl %eax, %eax
je 0x2e157
movq 0x10(%rsp), %rdi
callq 0x934d8
movsd %xmm0, 0x230(%rsp)
leaq 0x10(%rsp), %rdi
movq %rbx, %rsi
movl $0x1, %edx
callq 0x348d9
testl %eax, %eax
je 0x2e180
movq 0x10(%rsp), %rdi
callq 0x934d8
movsd %xmm0, 0x238(%rsp)
leaq 0x10(%rsp), %rdi
movq %rbx, %rsi
movl $0x2, %edx
callq 0x348d9
testl %eax, %eax
je 0x2e1a9
movq 0x10(%rsp), %rdi
callq 0x934d8
movsd %xmm0, 0x240(%rsp)
leaq 0x230(%rsp), %rdi
callq 0x76174
leaq 0xacffb(%rip), %rdx     # 0xdb1b8
leaq 0x8(%rsp), %rdi
leaq 0x1c0(%rsp), %rsi
xorl %ecx, %ecx
callq 0x34828
testl %eax, %eax
je 0x2e1e5
movq 0x8(%rsp), %rdi
callq 0x934d8
movsd %xmm0, 0x30(%rsp)
leaq 0x3240(%rsp), %rsi
movq 0x98(%rsp), %rdi
callq 0x3cc1a
leaq 0x10af47(%rip), %rax    # 0x139148
addq $0x10, %rax
leaq 0x1538(%rsp), %rbx
movq %rax, 0x188(%rsp)
movq %rax, -0x8(%rbx)
leaq 0x117460(%rip), %rax    # 0x145680
leaq 0x8(%rax), %rsi
movq %rbx, %rdi
movq %rsi, 0x180(%rsp)
callq 0x71cc6
movl $0x88, %esi
leaq 0x1530(%rsp), %rdi
addq %rsi, %rdi
addq 0x10ed8d(%rip), %rsi    # 0x13cfd8
callq 0x71cc6
leaq 0x117429(%rip), %rax    # 0x145680
movq 0x108(%rax), %rax
movq %rax, 0x1638(%rsp)
movq %rbx, %rdi
movsd 0x30(%rsp), %xmm0
callq 0x72fae
leaq 0x1530(%rsp), %rsi
andb $-0x3, 0x108(%rsi)
movq 0x98(%rsp), %rdi
callq 0x3cb96
leaq 0xacf2f(%rip), %rdx     # 0xdb1c6
leaq 0x1b8(%rsp), %rdi
leaq 0x1c0(%rsp), %rsi
movl $0x6, %ecx
callq 0x34828
testl %eax, %eax
je 0x2ff3d
movq 0x18(%rsp), %rax
leaq 0x58(%rax), %rcx
movq %rcx, 0x48(%rsp)
addq $0x28, %rax
movq %rax, 0x170(%rsp)
movl $0x88, %eax
leaq 0x1173a1(%rip), %rcx    # 0x145680
addq %rax, %rcx
movq %rcx, 0x178(%rsp)
movl $0x0, 0x3c(%rsp)
movq 0x1b8(%rsp), %rbx
movq %rbx, %rdi
callq 0x91428
movl 0x3c(%rsp), %edx
cmpl %eax, %edx
jae 0x2ff1f
leaq 0x1b0(%rsp), %rdi
movq %rbx, %rsi
callq 0x348d9
testl %eax, %eax
je 0x2ff3d
movq 0x1b0(%rsp), %rbx
movq %rbx, %rdi
callq 0x92988
cmpl $0x7, %eax
jne 0x2ff16
leaq 0x8(%rsp), %rdi
movq %rbx, %rsi
leaq 0xad811(%rip), %rdx     # 0xdbb5f
xorl %ecx, %ecx
callq 0x34828
testl %eax, %eax
je 0x2e42e
movq 0x8(%rsp), %rsi
leaq 0x530(%rsp), %rdi
callq 0x8c0b8
leaq 0x1650(%rsp), %rax
movq %rax, 0x1640(%rsp)
leaq 0x1640(%rsp), %rdi
leaq 0xb3b29(%rip), %rsi     # 0xe1eb7
leaq 0xb3b23(%rip), %rdx     # 0xe1eb8
callq 0x39150
movq 0x538(%rsp), %rdx
cmpq 0x1648(%rsp), %rdx
jne 0x2e3d1
movq 0x1640(%rsp), %r14
testq %rdx, %rdx
je 0x2e3dd
movq 0x530(%rsp), %rdi
movq %r14, %rsi
callq 0x21910
testl %eax, %eax
sete %bpl
jmp 0x2e3e0
movq 0x1640(%rsp), %r14
xorl %ebp, %ebp
jmp 0x2e3e0
movb $0x1, %bpl
leaq 0x1650(%rsp), %rax
cmpq %rax, %r14
je 0x2e400
movq 0x1650(%rsp), %rsi
incq %rsi
movq %r14, %rdi
callq 0x218e0
movq 0x530(%rsp), %rdi
leaq 0x540(%rsp), %rax
cmpq %rax, %rdi
je 0x2e425
movq 0x540(%rsp), %rsi
incq %rsi
callq 0x218e0
testb %bpl, %bpl
jne 0x2ff16
leaq 0x8(%rsp), %rdi
movq %rbx, %rsi
leaq 0xadc8e(%rip), %rdx     # 0xdc0cb
xorl %ecx, %ecx
callq 0x34828
movl 0x3c(%rsp), %ebp
testl %eax, %eax
je 0x2e490
movq 0x8(%rsp), %rsi
leaq 0x530(%rsp), %rdi
callq 0x8c0b8
movq 0x530(%rsp), %r14
movq %r14, %rdi
callq 0x21ee0
movl %eax, %ebp
leaq 0x540(%rsp), %rax
cmpq %rax, %r14
je 0x2e490
movq 0x540(%rsp), %rsi
incq %rsi
movq %r14, %rdi
callq 0x218e0
leaq 0x3a40(%rsp), %rdi
leaq 0xacd2e(%rip), %rsi     # 0xdb1cd
movl %ebp, %edx
xorl %eax, %eax
callq 0x21140
movl $0x1b0, %edi            # imm = 0x1B0
callq 0x218c0
movq %rax, %r14
movq %rax, %rdi
movq 0x18(%rsp), %rsi
callq 0x3b560
movq %r14, %rdi
leaq 0x3a40(%rsp), %rsi
callq 0x3cc1a
movq 0x98(%rsp), %rdi
movq %r14, %rsi
callq 0x3c97e
movq %r14, 0x50(%rsp)
leaq 0xe8(%rsp), %rdi
movq %rbx, %rsi
leaq 0xaccdd(%rip), %rdx     # 0xdb1d6
movl $0x6, %ecx
callq 0x34828
testl %eax, %eax
je 0x2ff16
movq 0xe8(%rsp), %rbx
movq %rbx, %rdi
callq 0x91428
testl %eax, %eax
je 0x2ff16
movq %rbx, %rdi
callq 0x91428
movl %eax, %edi
shlq $0x3, %rdi
callq 0x21040
movq %rax, 0x28(%rsp)
xorl %r14d, %r14d
movq %rbx, %rdi
callq 0x91428
movl %eax, %eax
cmpq %rax, %r14
jae 0x2e55f
movq 0x28(%rsp), %rax
movq $0x0, (%rax,%r14,8)
incq %r14
jmp 0x2e53e
movq $0x0, 0x40(%rsp)
movq 0xe8(%rsp), %rbx
movq %rbx, %rdi
callq 0x91428
movl %eax, %eax
movq 0x40(%rsp), %rdx
cmpq %rax, %rdx
jae 0x2fdb2
leaq 0xb0(%rsp), %rdi
movq %rbx, %rsi
callq 0x348d9
testl %eax, %eax
je 0x2fda8
movq 0xb0(%rsp), %r13
movq %r13, %rdi
callq 0x92988
cmpl $0x7, %eax
jne 0x2fda8
movl $0x400, %edx            # imm = 0x400
leaq 0x2a40(%rsp), %rdi
xorl %esi, %esi
callq 0x21490
movl $0x400, %edx            # imm = 0x400
leaq 0x2e40(%rsp), %rdi
xorl %esi, %esi
callq 0x21490
movl $0x400, %edx            # imm = 0x400
leaq 0x2640(%rsp), %rdi
xorl %esi, %esi
callq 0x21490
leaq 0x8(%rsp), %rdi
movq %r13, %rsi
leaq 0xad55b(%rip), %rdx     # 0xdbb5f
xorl %ecx, %ecx
callq 0x34828
testl %eax, %eax
je 0x2e6e4
movq 0x8(%rsp), %rsi
leaq 0x530(%rsp), %rdi
callq 0x8c0b8
leaq 0x1650(%rsp), %rax
movq %rax, 0x1640(%rsp)
leaq 0x1640(%rsp), %rdi
leaq 0xb3873(%rip), %rsi     # 0xe1eb7
leaq 0xb386d(%rip), %rdx     # 0xe1eb8
callq 0x39150
movq 0x538(%rsp), %rdx
cmpq 0x1648(%rsp), %rdx
jne 0x2e687
movq 0x1640(%rsp), %rbx
testq %rdx, %rdx
je 0x2e693
movq 0x530(%rsp), %rdi
movq %rbx, %rsi
callq 0x21910
testl %eax, %eax
sete %bpl
jmp 0x2e696
movq 0x1640(%rsp), %rbx
xorl %ebp, %ebp
jmp 0x2e696
movb $0x1, %bpl
leaq 0x1650(%rsp), %rax
cmpq %rax, %rbx
je 0x2e6b6
movq 0x1650(%rsp), %rsi
incq %rsi
movq %rbx, %rdi
callq 0x218e0
movq 0x530(%rsp), %rdi
leaq 0x540(%rsp), %rax
cmpq %rax, %rdi
je 0x2e6db
movq 0x540(%rsp), %rsi
incq %rsi
callq 0x218e0
testb %bpl, %bpl
jne 0x2fda8
leaq 0x8(%rsp), %rdi
movq %r13, %rsi
leaq 0xad9d8(%rip), %rdx     # 0xdc0cb
xorl %ecx, %ecx
callq 0x34828
testl %eax, %eax
je 0x2e74d
movq 0x8(%rsp), %rsi
leaq 0x530(%rsp), %rdi
callq 0x8c0b8
movq 0x530(%rsp), %rbx
movl $0x3ff, %edx            # imm = 0x3FF
leaq 0x2a40(%rsp), %rdi
movq %rbx, %rsi
callq 0x21430
leaq 0x540(%rsp), %rax
cmpq %rax, %rbx
je 0x2e74d
movq 0x540(%rsp), %rsi
incq %rsi
movq %rbx, %rdi
callq 0x218e0
leaq 0x8(%rsp), %rdi
movq %r13, %rsi
leaq 0xb8585(%rip), %rdx     # 0xe6ce1
xorl %ecx, %ecx
callq 0x34828
testl %eax, %eax
je 0x2e7b6
movq 0x8(%rsp), %rsi
leaq 0x530(%rsp), %rdi
callq 0x8c0b8
movq 0x530(%rsp), %rbx
movl $0x3ff, %edx            # imm = 0x3FF
leaq 0x2640(%rsp), %rdi
movq %rbx, %rsi
callq 0x21430
leaq 0x540(%rsp), %rax
cmpq %rax, %rbx
je 0x2e7b6
movq 0x540(%rsp), %rsi
incq %rsi
movq %rbx, %rdi
callq 0x218e0
leaq 0x8(%rsp), %rdi
movq %r13, %rsi
leaq 0xaca17(%rip), %rdx     # 0xdb1dc
xorl %ecx, %ecx
callq 0x34828
testl %eax, %eax
je 0x2e81f
movq 0x8(%rsp), %rsi
leaq 0x530(%rsp), %rdi
callq 0x8c0b8
movq 0x530(%rsp), %rbx
movl $0x3ff, %edx            # imm = 0x3FF
leaq 0x2e40(%rsp), %rdi
movq %rbx, %rsi
callq 0x21430
leaq 0x540(%rsp), %rax
cmpq %rax, %rbx
je 0x2e81f
movq 0x540(%rsp), %rsi
incq %rsi
movq %rbx, %rdi
callq 0x218e0
leaq 0x8(%rsp), %rdi
movq %r13, %rsi
leaq 0xac9b6(%rip), %rdx     # 0xdb1e4
xorl %ecx, %ecx
callq 0x34828
testl %eax, %eax
je 0x2e8ad
movq 0x8(%rsp), %rsi
leaq 0x530(%rsp), %rdi
callq 0x8c0b8
leaq 0x1650(%rsp), %rax
movq %rax, 0x1640(%rsp)
leaq 0x1640(%rsp), %rdi
leaq 0xbb23c(%rip), %rsi     # 0xe9aa6
leaq 0xbb236(%rip), %rdx     # 0xe9aa7
callq 0x39150
movq 0x538(%rsp), %rdx
cmpq 0x1648(%rsp), %rdx
jne 0x2e8b2
movq 0x1640(%rsp), %rbx
testq %rdx, %rdx
je 0x2e8bf
movq 0x530(%rsp), %rdi
movq %rbx, %rsi
callq 0x21910
testl %eax, %eax
setne %bpl
jmp 0x2e8c1
movb $0x1, %bpl
jmp 0x2e906
movb $0x1, %bpl
movq 0x1640(%rsp), %rbx
jmp 0x2e8c1
xorl %ebp, %ebp
leaq 0x1650(%rsp), %rax
cmpq %rax, %rbx
je 0x2e8e1
movq 0x1650(%rsp), %rsi
incq %rsi
movq %rbx, %rdi
callq 0x218e0
movq 0x530(%rsp), %rdi
leaq 0x540(%rsp), %rax
cmpq %rax, %rdi
je 0x2e906
movq 0x540(%rsp), %rsi
incq %rsi
callq 0x218e0
leaq 0x8(%rsp), %rdi
movq %r13, %rsi
leaq 0xac8db(%rip), %rdx     # 0xdb1f0
xorl %ecx, %ecx
callq 0x34828
testl %eax, %eax
je 0x2e994
movq 0x8(%rsp), %rsi
leaq 0x530(%rsp), %rdi
callq 0x8c0b8
leaq 0x1650(%rsp), %rax
movq %rax, 0x1640(%rsp)
leaq 0x1640(%rsp), %rdi
leaq 0xbb155(%rip), %rsi     # 0xe9aa6
leaq 0xbb14f(%rip), %rdx     # 0xe9aa7
callq 0x39150
movq 0x538(%rsp), %rdx
cmpq 0x1648(%rsp), %rdx
jne 0x2e999
movq 0x1640(%rsp), %rbx
testq %rdx, %rdx
je 0x2e9a6
movq 0x530(%rsp), %rdi
movq %rbx, %rsi
callq 0x21910
testl %eax, %eax
setne %r15b
jmp 0x2e9a9
movb $0x1, %r15b
jmp 0x2e9ee
movb $0x1, %r15b
movq 0x1640(%rsp), %rbx
jmp 0x2e9a9
xorl %r15d, %r15d
leaq 0x1650(%rsp), %rax
cmpq %rax, %rbx
je 0x2e9c9
movq 0x1650(%rsp), %rsi
incq %rsi
movq %rbx, %rdi
callq 0x218e0
movq 0x530(%rsp), %rdi
leaq 0x540(%rsp), %rax
cmpq %rax, %rdi
je 0x2e9ee
movq 0x540(%rsp), %rsi
incq %rsi
callq 0x218e0
leaq 0x8(%rsp), %rdi
movq %r13, %rsi
leaq 0xac7fd(%rip), %rdx     # 0xdb1fa
xorl %ecx, %ecx
callq 0x34828
testl %eax, %eax
je 0x2ea7c
movq 0x8(%rsp), %rsi
leaq 0x530(%rsp), %rdi
callq 0x8c0b8
leaq 0x1650(%rsp), %rax
movq %rax, 0x1640(%rsp)
leaq 0x1640(%rsp), %rdi
leaq 0xbb06d(%rip), %rsi     # 0xe9aa6
leaq 0xbb067(%rip), %rdx     # 0xe9aa7
callq 0x39150
movq 0x538(%rsp), %rdx
cmpq 0x1648(%rsp), %rdx
jne 0x2ea81
movq 0x1640(%rsp), %rbx
testq %rdx, %rdx
je 0x2ea8e
movq 0x530(%rsp), %rdi
movq %rbx, %rsi
callq 0x21910
testl %eax, %eax
setne %r12b
jmp 0x2ea91
movb $0x1, %r12b
jmp 0x2ead6
movb $0x1, %r12b
movq 0x1640(%rsp), %rbx
jmp 0x2ea91
xorl %r12d, %r12d
leaq 0x1650(%rsp), %rax
cmpq %rax, %rbx
je 0x2eab1
movq 0x1650(%rsp), %rsi
incq %rsi
movq %rbx, %rdi
callq 0x218e0
movq 0x530(%rsp), %rdi
leaq 0x540(%rsp), %rax
cmpq %rax, %rdi
je 0x2ead6
movq 0x540(%rsp), %rsi
incq %rsi
callq 0x218e0
leaq 0x8(%rsp), %rdi
movq %r13, %rsi
leaq 0xac71f(%rip), %rdx     # 0xdb204
xorl %ecx, %ecx
callq 0x34828
testl %eax, %eax
je 0x2eb65
movq 0x8(%rsp), %rsi
leaq 0x530(%rsp), %rdi
callq 0x8c0b8
leaq 0x1650(%rsp), %rax
movq %rax, 0x1640(%rsp)
leaq 0x1640(%rsp), %rdi
leaq 0xbaf85(%rip), %rsi     # 0xe9aa6
leaq 0xbaf7f(%rip), %rdx     # 0xe9aa7
callq 0x39150
movq 0x538(%rsp), %rdx
cmpq 0x1648(%rsp), %rdx
jne 0x2eb69
movq 0x1640(%rsp), %r14
testq %rdx, %rdx
je 0x2eb75
movq 0x530(%rsp), %rdi
movq %r14, %rsi
callq 0x21910
xorl %ebx, %ebx
testl %eax, %eax
sete %bl
jmp 0x2eb7a
xorl %ebx, %ebx
jmp 0x2ebbf
xorl %ebx, %ebx
movq 0x1640(%rsp), %r14
jmp 0x2eb7a
movl $0x1, %ebx
leaq 0x1650(%rsp), %rax
cmpq %rax, %r14
je 0x2eb9a
movq 0x1650(%rsp), %rsi
incq %rsi
movq %r14, %rdi
callq 0x218e0
movq 0x530(%rsp), %rdi
leaq 0x540(%rsp), %rax
cmpq %rax, %rdi
je 0x2ebbf
movq 0x540(%rsp), %rsi
incq %rsi
callq 0x218e0
leaq 0x8(%rsp), %rdi
movq %r13, %rsi
leaq 0xac641(%rip), %rdx     # 0xdb20f
xorl %ecx, %ecx
callq 0x34828
movl %r12d, 0x88(%rsp)
movl %ebp, 0x30(%rsp)
leaq 0xac6bd(%rip), %r12     # 0xdb2a5
testl %eax, %eax
je 0x2eccf
movq 0x8(%rsp), %rsi
leaq 0x530(%rsp), %rdi
callq 0x8c0b8
leaq 0x1650(%rsp), %rax
movq %rax, 0x1640(%rsp)
leaq 0x1640(%rsp), %rdi
leaq 0xbae85(%rip), %rsi     # 0xe9aa6
leaq 0xbae7f(%rip), %rdx     # 0xe9aa7
callq 0x39150
movq 0x538(%rsp), %rdx
cmpq 0x1648(%rsp), %rdx
jne 0x2ec72
movq 0x1640(%rsp), %r14
testq %rdx, %rdx
je 0x2ec83
movq 0x530(%rsp), %rdi
movq %r14, %rsi
callq 0x21910
testl %eax, %eax
leaq 0xac640(%rip), %r12     # 0xdb2a5
leaq 0xac623(%rip), %rax     # 0xdb28f
cmoveq %rax, %r12
jmp 0x2ec8a
movq 0x1640(%rsp), %r14
leaq 0xac624(%rip), %r12     # 0xdb2a5
jmp 0x2ec8a
leaq 0xac605(%rip), %r12     # 0xdb28f
leaq 0x1650(%rsp), %rax
cmpq %rax, %r14
je 0x2ecaa
movq 0x1650(%rsp), %rsi
incq %rsi
movq %r14, %rdi
callq 0x218e0
movq 0x530(%rsp), %rdi
leaq 0x540(%rsp), %rax
cmpq %rax, %rdi
je 0x2eccf
movq 0x540(%rsp), %rsi
incq %rsi
callq 0x218e0
movq 0x188(%rsp), %rax
movq %rax, 0x310(%rsp)
leaq 0x318(%rsp), %rdi
movq 0x180(%rsp), %rsi
callq 0x71cc6
leaq 0x398(%rsp), %rdi
movq 0x178(%rsp), %rsi
callq 0x71cc6
leaq 0x116970(%rip), %rax    # 0x145680
movq 0x108(%rax), %rax
movq %rax, 0x418(%rsp)
leaq 0x20(%rsp), %rdi
movq %r13, %rsi
leaq 0xac170(%rip), %rdx     # 0xdae9e
movl $0x6, %ecx
callq 0x34828
testl %eax, %eax
je 0x2edc7
movq 0x20(%rsp), %r14
movq %r14, %rdi
callq 0x91428
cmpl $0x10, %eax
jb 0x2edc7
leaq 0x530(%rsp), %rdi
leaq 0xadec7(%rip), %rsi     # 0xdcc28
callq 0x71cc6
xorl %ebp, %ebp
movq %r14, %rdi
callq 0x91428
cmpl %eax, %ebp
jae 0x2edb0
leaq 0x10(%rsp), %rdi
movq %r14, %rsi
movl %ebp, %edx
callq 0x348d9
testl %eax, %eax
je 0x2edac
movq 0x10(%rsp), %rdi
callq 0x934d8
movl %ebp, %eax
andl $0x3, %eax
shll $0x5, %eax
addq %rsp, %rax
addq $0x530, %rax            # imm = 0x530
movl %ebp, %ecx
shrl $0x2, %ecx
movsd %xmm0, (%rax,%rcx,8)
incl %ebp
jmp 0x2ed68
leaq 0x310(%rsp), %rdi
leaq 0x530(%rsp), %rsi
movl %ebx, %edx
callq 0x70094
movl 0x2640(%rsp), %eax
movl $0x756f7247, %ecx       # imm = 0x756F7247
xorl %ecx, %eax
movl 0x2643(%rsp), %ecx
movl $0x646e75, %edx         # imm = 0x646E75
xorl %edx, %ecx
orl %eax, %ecx
je 0x2f50f
movl 0x2640(%rsp), %eax
movl $0x6d6f6f52, %ecx       # imm = 0x6D6F6F52
xorl %ecx, %eax
movzbl 0x2644(%rsp), %ecx
orl %eax, %ecx
je 0x2f685
movl 0x2640(%rsp), %eax
movl $0x656a624f, %ecx       # imm = 0x656A624F
xorl %ecx, %eax
movl 0x2643(%rsp), %ecx
movl $0x746365, %edx         # imm = 0x746365
xorl %edx, %ecx
orl %eax, %ecx
je 0x2fad1
cmpl $0x786f42, 0x2640(%rsp) # imm = 0x786F42
jne 0x2fd9b
movapd 0xacd2a(%rip), %xmm0    # 0xdbb70
movapd %xmm0, 0xf0(%rsp)
movabsq $0x3ff0000000000000, %rax # imm = 0x3FF0000000000000
movq %rax, 0x100(%rsp)
leaq 0x20(%rsp), %rdi
movq %r13, %rsi
leaq 0xac45c(%rip), %rdx     # 0xdb2cc
movl $0x6, %ecx
callq 0x34828
testl %eax, %eax
je 0x2ef0c
movq 0x20(%rsp), %rbx
movq %rbx, %rdi
callq 0x91428
cmpl $0x3, %eax
jb 0x2ef0c
leaq 0x10(%rsp), %rdi
movq %rbx, %rsi
xorl %edx, %edx
callq 0x348d9
testl %eax, %eax
je 0x2eeba
movq 0x10(%rsp), %rdi
callq 0x934d8
movsd %xmm0, 0xf0(%rsp)
leaq 0x10(%rsp), %rdi
movq %rbx, %rsi
movl $0x1, %edx
callq 0x348d9
testl %eax, %eax
je 0x2eee3
movq 0x10(%rsp), %rdi
callq 0x934d8
movsd %xmm0, 0xf8(%rsp)
leaq 0x10(%rsp), %rdi
movq %rbx, %rsi
movl $0x2, %edx
callq 0x348d9
testl %eax, %eax
je 0x2ef0c
movq 0x10(%rsp), %rdi
callq 0x934d8
movsd %xmm0, 0x100(%rsp)
leaq 0xd0(%rsp), %rdi
callq 0x8758c
leaq 0xa8(%rsp), %rdi
movq %r13, %rsi
leaq 0xab317(%rip), %rdx     # 0xda242
movl $0x6, %ecx
callq 0x34828
testl %eax, %eax
je 0x2ef66
movq 0xa8(%rsp), %r8
movq 0x18(%rsp), %rdi
leaq 0x90(%rsp), %rsi
leaq 0xd0(%rsp), %rcx
movq %rcx, %rdx
callq 0x34943
testl %eax, %eax
je 0x30005
movl $0x1b0, %edi            # imm = 0x1B0
callq 0x218c0
movq %rax, %r14
movq %rax, %rdi
movq 0x18(%rsp), %rsi
callq 0x3b560
leaq 0x1640(%rsp), %rbx
movq %rbx, %rdi
leaq 0xac345(%rip), %rsi     # 0xdb2d7
leaq 0x2a40(%rsp), %rdx
xorl %eax, %eax
callq 0x21140
movq %r14, %rdi
movq %rbx, %rsi
callq 0x3cc1a
movq %r14, %rdi
leaq 0x310(%rsp), %rsi
callq 0x3cb96
movq %r14, 0xe0(%rsp)
movb $0x1, %cl
xorl %eax, %eax
movsd 0xab538(%rip), %xmm0    # 0xda508
movsd %xmm0, 0xa0(%rsp)
movl %ecx, 0xcc(%rsp)
testb $0x1, %cl
jne 0x2eff6
movsd 0xab033(%rip), %xmm0    # 0xda020
movsd %xmm0, 0xa0(%rsp)
shlq $0x2, %rax
leaq (%rax,%rax,2), %rax
movq %rax, 0x190(%rsp)
leaq 0x11682b(%rip), %rsi    # 0x145838
xorl %ebx, %ebx
leaq 0x1(%rbx), %rcx
movq %rbx, %r14
subq $0x1, %r14
movl $0x2, %eax
cmovbl %eax, %r14d
cmpq $0x2, %rbx
movl $0x0, %r15d
movq %rcx, 0x198(%rsp)
cmovneq %rcx, %r15
movsd 0xf0(%rsp,%r15,8), %xmm0
movsd %xmm0, 0x30(%rsp)
movsd 0xf0(%rsp,%r14,8), %xmm1
movsd 0xf0(%rsp,%rbx,8), %xmm0
mulsd 0xa0(%rsp), %xmm0
movsd %xmm1, 0x88(%rsp)
mulsd 0xaafaa(%rip), %xmm1    # 0xda020
movsd %xmm1, 0x1a8(%rsp)
leaq 0x70(%rsp), %rdi
movq %rsi, 0x1a0(%rsp)
callq 0x767fa
movsd 0xa0(%rsp), %xmm0
mulsd 0x30(%rsp), %xmm0
leaq (%r15,%r15,2), %rsi
shlq $0x3, %rsi
addq 0x10def1(%rip), %rsi    # 0x13cfa0
leaq 0x290(%rsp), %rdi
callq 0x767fa
movslq %r14d, %rax
leaq (%rax,%rax,2), %rsi
shlq $0x3, %rsi
addq 0x10ded2(%rip), %rsi    # 0x13cfa0
leaq 0x278(%rsp), %rdi
movsd 0x1a8(%rsp), %xmm0
callq 0x767fa
xorpd %xmm0, %xmm0
xorpd %xmm1, %xmm1
xorps %xmm2, %xmm2
leaq 0x260(%rsp), %rdi
callq 0x753ca
leaq 0x218(%rsp), %rdi
leaq 0x260(%rsp), %rsi
leaq 0x70(%rsp), %rdx
callq 0x7570f
leaq 0x2c0(%rsp), %rdi
leaq 0x218(%rsp), %rsi
leaq 0x290(%rsp), %rdx
callq 0x75deb
leaq 0x2f8(%rsp), %rdi
leaq 0x2c0(%rsp), %rsi
leaq 0x278(%rsp), %rdx
callq 0x75deb
leaq 0x200(%rsp), %rdi
leaq 0x260(%rsp), %rsi
leaq 0x70(%rsp), %rdx
callq 0x7570f
leaq 0x218(%rsp), %rdi
leaq 0x200(%rsp), %rsi
leaq 0x290(%rsp), %rdx
callq 0x7570f
leaq 0x2c0(%rsp), %rdi
leaq 0x218(%rsp), %rsi
leaq 0x278(%rsp), %rdx
callq 0x75deb
leaq 0x1e8(%rsp), %rdi
leaq 0x260(%rsp), %rsi
leaq 0x70(%rsp), %rdx
callq 0x7570f
leaq 0x200(%rsp), %rdi
leaq 0x1e8(%rsp), %rsi
leaq 0x290(%rsp), %rdx
callq 0x7570f
leaq 0x218(%rsp), %rdi
leaq 0x200(%rsp), %rsi
leaq 0x278(%rsp), %rdx
callq 0x7570f
leaq 0x2a8(%rsp), %rdi
leaq 0x260(%rsp), %rsi
leaq 0x70(%rsp), %rdx
callq 0x7570f
leaq 0x1e8(%rsp), %rdi
leaq 0x2a8(%rsp), %rsi
leaq 0x290(%rsp), %rdx
callq 0x75deb
leaq 0x200(%rsp), %rdi
leaq 0x1e8(%rsp), %rsi
leaq 0x278(%rsp), %rdx
callq 0x7570f
xorpd %xmm0, %xmm0
xorpd %xmm1, %xmm1
leaq 0x1e8(%rsp), %rdi
callq 0x819be
xorpd %xmm1, %xmm1
leaq 0x2a8(%rsp), %rdi
movsd 0x30(%rsp), %xmm0
callq 0x819be
leaq 0x2e8(%rsp), %rdi
movsd 0x30(%rsp), %xmm0
movsd 0x88(%rsp), %xmm1
callq 0x819be
xorpd %xmm0, %xmm0
leaq 0x2d8(%rsp), %rdi
movsd 0x88(%rsp), %xmm1
callq 0x819be
leaq 0x60(%rsp), %rdi
callq 0x8758c
movl $0x68, %edi
callq 0x218c0
movq %rax, %r15
movq %rax, %rdi
leaq 0x2f8(%rsp), %rsi
leaq 0x1e8(%rsp), %rdx
callq 0x69654
movl 0x6c(%rsp), %edx
leaq 0x60(%rsp), %rdi
movq %r15, %rsi
callq 0x87622
movl $0x68, %edi
callq 0x218c0
movq %rax, %rbp
movq %rax, %rdi
leaq 0x2c0(%rsp), %rsi
leaq 0x2a8(%rsp), %rdx
callq 0x69654
movl 0x6c(%rsp), %edx
leaq 0x60(%rsp), %rdi
movq %rbp, %rsi
callq 0x87622
movl $0x68, %edi
callq 0x218c0
movq %rax, %r13
movq %rax, %rdi
leaq 0x218(%rsp), %rsi
leaq 0x2e8(%rsp), %rdx
callq 0x69654
movl 0x6c(%rsp), %edx
leaq 0x60(%rsp), %rdi
movq %r13, %rsi
callq 0x87622
movl $0x68, %edi
callq 0x218c0
movq %rax, %r14
movq %rax, %rdi
leaq 0x200(%rsp), %rsi
leaq 0x2d8(%rsp), %rdx
callq 0x69654
movl 0x6c(%rsp), %edx
leaq 0x60(%rsp), %rdi
movq %r14, %rsi
callq 0x87622
leaq 0xb8(%rsp), %rdi
callq 0x8758c
movl $0x88, %edi
callq 0x218c0
movq %rax, %r12
movq %rax, %rdi
movq %r15, %rsi
movq %rbp, %rdx
movq %r13, %rcx
callq 0x69a40
movl 0xc4(%rsp), %edx
leaq 0xb8(%rsp), %rdi
movq %r12, %rsi
callq 0x87622
movl $0x88, %edi
callq 0x218c0
movq %rax, %r12
movq %rax, %rdi
movq %r15, %rsi
movq %r13, %rdx
movq %r14, %rcx
callq 0x69a40
movl 0xc4(%rsp), %edx
leaq 0xb8(%rsp), %rdi
movq %r12, %rsi
callq 0x87622
movl $0x70, %edi
callq 0x218c0
movq %rax, %r14
movq %rax, %rdi
leaq 0x60(%rsp), %rsi
leaq 0xb8(%rsp), %rdx
callq 0x67b88
movq 0x190(%rsp), %rax
leaq (%rax,%rbx,4), %rax
leaq 0xac754(%rip), %rcx     # 0xdbb90
movslq (%rcx,%rax), %rax
leaq 0x113d69(%rip), %r12    # 0x1431b0
cmpl %eax, 0xdc(%rsp)
jle 0x2f45c
movq 0xd0(%rsp), %rcx
movq (%rcx,%rax,8), %r12
movl $0x60, %edi
callq 0x218c0
movq %rax, %r15
movq %rax, %rdi
movq %r12, %rsi
callq 0x3d514
movq %r15, %rdi
movq %r14, %rsi
callq 0x3d7bc
movq 0xe0(%rsp), %rdi
movq %r15, %rsi
callq 0x3c9ce
leaq 0xb8(%rsp), %rdi
callq 0x875f6
leaq 0x60(%rsp), %rdi
callq 0x875f6
movq 0x1a0(%rsp), %rsi
addq $0x18, %rsi
movq 0x198(%rsp), %rax
movq %rax, %rbx
cmpq $0x3, %rax
jne 0x2f00f
movl $0x1, %eax
testb $0x1, 0xcc(%rsp)
movl $0x0, %ecx
jne 0x2efc8
movq 0x50(%rsp), %rdi
movq 0xe0(%rsp), %rbx
movq %rbx, %rsi
callq 0x3c97e
movq 0x28(%rsp), %rax
movq 0x40(%rsp), %rcx
movq %rbx, (%rax,%rcx,8)
leaq 0xd0(%rsp), %rdi
jmp 0x2fd96
leaq 0x530(%rsp), %rdi
leaq 0xabcfe(%rip), %rsi     # 0xdb21c
leaq 0xabc03(%rip), %rdx     # 0xdb128
leaq 0x3240(%rsp), %rcx
leaq 0x2e40(%rsp), %r8
xorl %eax, %eax
callq 0x21140
testb %r15b, %r15b
je 0x2fd9b
leaq 0x530(%rsp), %rdi
callq 0x894d0
testl %eax, %eax
je 0x2fd9b
movl $0x160, %edi            # imm = 0x160
callq 0x218c0
movq %rax, %r15
movq %rax, %rdi
callq 0x28270
movq (%r15), %rsi
movq %r15, %rdi
leaq 0x530(%rsp), %rdx
callq 0x30c77
testl %eax, %eax
je 0x2ff30
leaq 0x1640(%rsp), %rbx
movq %rbx, %rdi
leaq 0xabc93(%rip), %rsi     # 0xdb22f
leaq 0x2a40(%rsp), %rdx
xorl %eax, %eax
callq 0x21140
movq %r15, %rdi
movq %rbx, %rsi
callq 0x289f2
movq (%r15), %rdi
leaq 0x1640(%rsp), %rsi
callq 0x3cc1a
movq 0x148(%r15), %rdi
testq %rdi, %rdi
je 0x2f5d7
callq 0x21ad0
leaq 0x530(%rsp), %rdi
callq 0x89f5f
movq %rax, 0x148(%r15)
movq 0x18(%rsp), %rax
movl 0x64(%rax), %edx
movq 0x48(%rsp), %rdi
movq %r15, %rsi
callq 0x87622
movl $0x1b0, %edi            # imm = 0x1B0
callq 0x218c0
movq %rax, %r14
movq %rax, %rdi
movq 0x18(%rsp), %rsi
callq 0x3b560
movl $0x30, %edi
callq 0x218c0
movq %rax, %r12
movq %rax, %rdi
movq %r15, %rsi
movq 0x170(%rsp), %rdx
callq 0x3dd56
movq %r14, %rdi
movq %r12, %rsi
callq 0x3c9fe
movq %r14, %rdi
leaq 0x1640(%rsp), %rsi
callq 0x3cc1a
movq %r14, %rdi
leaq 0x310(%rsp), %rsi
callq 0x3cb96
movq 0x50(%rsp), %rdi
movq %r14, %rsi
callq 0x3c97e
movq 0x28(%rsp), %rax
movq 0x40(%rsp), %rcx
movq %r14, (%rax,%rcx,8)
jmp 0x2fd9b
movl $0x1b0, %edi            # imm = 0x1B0
callq 0x218c0
movq %rax, %r12
movq %rax, %rdi
movq 0x18(%rsp), %rsi
callq 0x3b560
leaq 0x1640(%rsp), %rbx
movq %rbx, %rdi
leaq 0xabb8d(%rip), %rsi     # 0xdb23e
leaq 0x2a40(%rsp), %rdx
xorl %eax, %eax
callq 0x21140
movq %r12, %rdi
movq %rbx, %rsi
callq 0x3cc1a
movq 0x50(%rsp), %rdi
movq %r12, %rsi
callq 0x3c97e
movq 0x28(%rsp), %rax
movq 0x40(%rsp), %rcx
movq %r12, (%rax,%rcx,8)
leaq 0x70(%rsp), %rdi
callq 0x8758c
leaq 0x530(%rsp), %rdi
leaq 0xabb1d(%rip), %rsi     # 0xdb21c
leaq 0xaba22(%rip), %rdx     # 0xdb128
leaq 0x3240(%rsp), %rcx
leaq 0x2e40(%rsp), %r8
xorl %eax, %eax
callq 0x21140
testb %r15b, %r15b
je 0x2f83e
leaq 0x530(%rsp), %rdi
callq 0x894d0
testl %eax, %eax
je 0x2f83e
movl $0x160, %edi            # imm = 0x160
callq 0x218c0
movq %rax, %r15
movq %rax, %rdi
callq 0x28270
movq (%r15), %rsi
movq %r15, %rdi
leaq 0x530(%rsp), %rdx
callq 0x30c77
testl %eax, %eax
je 0x2ff26
leaq 0x1640(%rsp), %rbx
movq %rbx, %rdi
leaq 0xabac9(%rip), %rsi     # 0xdb246
leaq 0x2a40(%rsp), %rdx
xorl %eax, %eax
callq 0x21140
movq %r15, %rdi
movq %rbx, %rsi
callq 0x289f2
movq (%r15), %rdi
leaq 0x1640(%rsp), %rsi
callq 0x3cc1a
movq 0x148(%r15), %rdi
testq %rdi, %rdi
je 0x2f7b8
callq 0x21ad0
leaq 0x530(%rsp), %rdi
callq 0x89f5f
movq %rax, 0x148(%r15)
movq 0x18(%rsp), %rax
movl 0x64(%rax), %edx
movq 0x48(%rsp), %rdi
movq %r15, %rsi
callq 0x87622
movl $0x1b0, %edi            # imm = 0x1B0
callq 0x218c0
movq %rax, %r14
movq %rax, %rdi
movq 0x18(%rsp), %rsi
callq 0x3b560
movl $0x30, %edi
callq 0x218c0
movq %rax, %r13
movq %rax, %rdi
movq %r15, %rsi
leaq 0x70(%rsp), %rdx
callq 0x3dd56
movq %r14, %rdi
movq %r13, %rsi
callq 0x3c9fe
movq %r14, %rdi
leaq 0x1640(%rsp), %rsi
callq 0x3cc1a
movq %r12, %rdi
movq %r14, %rsi
callq 0x3c97e
leaq 0x530(%rsp), %rdi
leaq 0xaba02(%rip), %rsi     # 0xdb24f
leaq 0xab8d4(%rip), %rdx     # 0xdb128
leaq 0x3240(%rsp), %rcx
leaq 0x2e40(%rsp), %r8
xorl %eax, %eax
callq 0x21140
cmpb $0x0, 0x30(%rsp)
je 0x2f98e
leaq 0x530(%rsp), %rdi
callq 0x894d0
testl %eax, %eax
je 0x2f98e
movl $0x160, %edi            # imm = 0x160
callq 0x218c0
movq %rax, %r15
movq %rax, %rdi
callq 0x28270
movq (%r15), %rsi
movq %r15, %rdi
leaq 0x530(%rsp), %rdx
callq 0x30c77
testl %eax, %eax
je 0x2ff26
leaq 0x1640(%rsp), %rbx
movq %rbx, %rdi
leaq 0xab995(%rip), %rsi     # 0xdb262
leaq 0x2a40(%rsp), %rdx
xorl %eax, %eax
callq 0x21140
movq %r15, %rdi
movq %rbx, %rsi
callq 0x289f2
movq (%r15), %rdi
leaq 0x1640(%rsp), %rsi
callq 0x3cc1a
movq 0x148(%r15), %rdi
testq %rdi, %rdi
je 0x2f908
callq 0x21ad0
leaq 0x530(%rsp), %rdi
callq 0x89f5f
movq %rax, 0x148(%r15)
movq 0x18(%rsp), %rax
movl 0x64(%rax), %edx
movq 0x48(%rsp), %rdi
movq %r15, %rsi
callq 0x87622
movl $0x1b0, %edi            # imm = 0x1B0
callq 0x218c0
movq %rax, %r14
movq %rax, %rdi
movq 0x18(%rsp), %rsi
callq 0x3b560
movl $0x30, %edi
callq 0x218c0
movq %rax, %r13
movq %rax, %rdi
movq %r15, %rsi
leaq 0x70(%rsp), %rdx
callq 0x3dd56
movq %r14, %rdi
movq %r13, %rsi
callq 0x3c9fe
movq %r14, %rdi
leaq 0x1640(%rsp), %rsi
callq 0x3cc1a
movq %r12, %rdi
movq %r14, %rsi
callq 0x3c97e
leaq 0x530(%rsp), %rdi
leaq 0xab8d0(%rip), %rsi     # 0xdb26d
leaq 0xab784(%rip), %rdx     # 0xdb128
leaq 0x3240(%rsp), %rcx
leaq 0x2e40(%rsp), %r8
xorl %eax, %eax
callq 0x21140
cmpb $0x0, 0x88(%rsp)
je 0x2fd91
leaq 0x530(%rsp), %rdi
callq 0x894d0
testl %eax, %eax
je 0x2fd91
movl $0x160, %edi            # imm = 0x160
callq 0x218c0
movq %rax, %r15
movq %rax, %rdi
callq 0x28270
movq (%r15), %rsi
movq %r15, %rdi
leaq 0x530(%rsp), %rdx
callq 0x30c77
testl %eax, %eax
je 0x2ff26
leaq 0x1640(%rsp), %rbx
movq %rbx, %rdi
leaq 0xab860(%rip), %rsi     # 0xdb280
leaq 0x2a40(%rsp), %rdx
xorl %eax, %eax
callq 0x21140
movq %r15, %rdi
movq %rbx, %rsi
callq 0x289f2
movq (%r15), %rdi
leaq 0x1640(%rsp), %rsi
callq 0x3cc1a
movq %r15, %rdi
leaq 0x530(%rsp), %rsi
callq 0x36f12
movq 0x18(%rsp), %rax
movl 0x64(%rax), %edx
movq 0x48(%rsp), %rdi
movq %r15, %rsi
callq 0x87622
movl $0x1b0, %edi            # imm = 0x1B0
callq 0x218c0
movq %rax, %r14
movq %rax, %rdi
movq 0x18(%rsp), %rsi
callq 0x3b560
movl $0x30, %edi
callq 0x218c0
movq %rax, %r13
movq %rax, %rdi
movq %r15, %rsi
leaq 0x70(%rsp), %rdx
callq 0x3dd56
movq %r14, %rdi
movq %r13, %rsi
callq 0x3c9fe
movq %r14, %rdi
leaq 0x1640(%rsp), %rsi
callq 0x3cc1a
movq %r12, %rdi
movq %r14, %rsi
callq 0x3c97e
jmp 0x2fd91
leaq 0x530(%rsp), %rbx
movq %rbx, %rdi
movq %r12, %rsi
leaq 0xab642(%rip), %rdx     # 0xdb128
leaq 0x2e40(%rsp), %rcx
movq %rcx, %r8
xorl %eax, %eax
callq 0x21140
leaq 0x140(%rsp), %rax
movq %rax, 0x130(%rsp)
movq %rbx, %rdi
callq 0x21380
leaq (%rsp,%rax), %rdx
addq $0x530, %rdx            # imm = 0x530
leaq 0x130(%rsp), %r14
movq %r14, %rdi
movq %rbx, %rsi
callq 0x39150
movq 0x58(%rsp), %rdi
movq %r14, %rsi
callq 0x3a8e2
movq %rax, %rbx
movq 0x58(%rsp), %r14
addq $0x8, %r14
cmpq %r14, %rax
je 0x2fb52
movq 0x40(%rbx), %r12
jmp 0x2fb55
xorl %r12d, %r12d
movq 0x130(%rsp), %rdi
leaq 0x140(%rsp), %rax
cmpq %rax, %rdi
je 0x2fb7a
movq 0x140(%rsp), %rsi
incq %rsi
callq 0x218e0
cmpq %r14, %rbx
jne 0x2fca0
movl $0x160, %edi            # imm = 0x160
callq 0x218c0
movq %rax, %r12
movq %rax, %rdi
callq 0x28270
movq (%r12), %rsi
movq %r12, %rdi
leaq 0x530(%rsp), %rdx
callq 0x30c77
testl %eax, %eax
je 0x2ff30
leaq 0x1640(%rsp), %rdi
leaq 0xab6f6(%rip), %rsi     # 0xdb2b9
leaq 0x2e40(%rsp), %rbx
movq %rbx, %rdx
xorl %eax, %eax
callq 0x21140
movq %r12, %rdi
movq %rbx, %rsi
callq 0x289f2
movq (%r12), %rdi
leaq 0x1640(%rsp), %rsi
callq 0x3cc1a
movq 0x148(%r12), %rdi
testq %rdi, %rdi
je 0x2fc03
callq 0x21ad0
leaq 0x530(%rsp), %rdi
callq 0x89f5f
movq %rax, 0x148(%r12)
movq 0x18(%rsp), %rax
movl 0x64(%rax), %edx
movq 0x48(%rsp), %rdi
movq %r12, %rsi
callq 0x87622
leaq 0x120(%rsp), %rax
movq %rax, 0x110(%rsp)
leaq 0x530(%rsp), %rbx
movq %rbx, %rdi
callq 0x21380
leaq (%rsp,%rax), %rdx
addq $0x530, %rdx            # imm = 0x530
leaq 0x110(%rsp), %r14
movq %r14, %rdi
movq %rbx, %rsi
callq 0x39150
movq 0x58(%rsp), %rdi
movq %r14, %rsi
callq 0x3ab08
movq %r12, (%rax)
movq 0x110(%rsp), %rdi
leaq 0x120(%rsp), %rax
cmpq %rax, %rdi
je 0x2fca0
movq 0x120(%rsp), %rsi
incq %rsi
callq 0x218e0
leaq 0x70(%rsp), %rdi
callq 0x8758c
leaq 0xa8(%rsp), %rdi
movq %r13, %rsi
leaq 0xaa586(%rip), %rdx     # 0xda242
movl $0x6, %ecx
callq 0x34828
testl %eax, %eax
je 0x2fcf6
leaq 0x28(%r12), %rdx
movq 0xa8(%rsp), %r8
movq 0x18(%rsp), %rdi
leaq 0x90(%rsp), %rsi
leaq 0x70(%rsp), %rcx
callq 0x34943
testl %eax, %eax
je 0x2ff26
movl $0x1b0, %edi            # imm = 0x1B0
callq 0x218c0
movq %rax, %r14
movq %rax, %rdi
movq 0x18(%rsp), %rsi
callq 0x3b560
leaq 0x1640(%rsp), %rdi
leaq 0xab5a3(%rip), %rsi     # 0xdb2c2
leaq 0x2a40(%rsp), %rdx
xorl %eax, %eax
callq 0x21140
movl $0x30, %edi
callq 0x218c0
movq %rax, %r15
movq %rax, %rdi
movq %r12, %rsi
leaq 0x70(%rsp), %rdx
callq 0x3dd56
movq %r14, %rdi
movq %r15, %rsi
callq 0x3c9fe
movq %r14, %rdi
leaq 0x1640(%rsp), %rsi
callq 0x3cc1a
movq %r14, %rdi
leaq 0x310(%rsp), %rsi
callq 0x3cb96
movq 0x50(%rsp), %rdi
movq %r14, %rsi
callq 0x3c97e
movq 0x28(%rsp), %rax
movq 0x40(%rsp), %rcx
movq %r14, (%rax,%rcx,8)
leaq 0x70(%rsp), %rdi
callq 0x875f6
leaq 0x310(%rsp), %rdi
callq 0x6fa30
incq 0x40(%rsp)
jmp 0x2e568
xorl %r12d, %r12d
movq %rbx, %rdi
callq 0x91428
movl %eax, %eax
cmpq %rax, %r12
jae 0x2ff0c
leaq 0xb0(%rsp), %rdi
movq %rbx, %rsi
movl %r12d, %edx
callq 0x348d9
testl %eax, %eax
je 0x2fe5d
movq 0xb0(%rsp), %r14
movq %r14, %rdi
callq 0x92988
cmpl $0x7, %eax
jne 0x2fe5d
leaq 0x8(%rsp), %rdi
movq %r14, %rsi
leaq 0xb6ede(%rip), %rdx     # 0xe6ce1
xorl %ecx, %ecx
callq 0x34828
testl %eax, %eax
je 0x2fe5d
movq 0x8(%rsp), %rsi
leaq 0x530(%rsp), %rdi
callq 0x8c0b8
movq 0x530(%rsp), %r15
movq %r15, %rdi
leaq 0xab407(%rip), %rsi     # 0xdb239
callq 0x21d00
movl %eax, %ebp
leaq 0x540(%rsp), %rax
cmpq %rax, %r15
je 0x2fe59
movq 0x540(%rsp), %rsi
incq %rsi
movq %r15, %rdi
callq 0x218e0
testl %ebp, %ebp
je 0x2fe65
incq %r12
jmp 0x2fdb5
movq 0x28(%rsp), %rax
movq (%rax,%r12,8), %r15
testq %r15, %r15
je 0x2fe5d
leaq 0x20(%rsp), %rdi
movq %r14, %rsi
leaq 0xab45c(%rip), %rdx     # 0xdb2de
movl $0x6, %ecx
callq 0x34828
testl %eax, %eax
je 0x2fe5d
xorl %ebp, %ebp
movq 0x20(%rsp), %r13
movq %r13, %rdi
callq 0x91428
cmpl %eax, %ebp
jae 0x2fe5d
leaq 0x10(%rsp), %rdi
movq %r13, %rsi
movl %ebp, %edx
callq 0x348d9
movq 0x10(%rsp), %r14
movq %r14, %rdi
callq 0x938a2
testb %al, %al
je 0x2ff08
movq %r14, %rdi
callq 0x90b46
movl %eax, %r14d
testl %eax, %eax
js 0x2ff08
movq %rbx, %rdi
callq 0x91428
cmpl %eax, %r14d
jae 0x2ff08
movl %r14d, %eax
movq 0x28(%rsp), %rcx
movq (%rcx,%rax,8), %r14
testq %r14, %r14
je 0x2ff08
movq 0x50(%rsp), %rdi
movq %r14, %rsi
callq 0x3ba02
movq %r15, %rdi
movq %r14, %rsi
callq 0x3c97e
incl %ebp
jmp 0x2fe97
movq 0x28(%rsp), %rdi
callq 0x21c20
incl 0x3c(%rsp)
jmp 0x2e2f2
movl $0x1, %ebp
jmp 0x2ff3f
leaq 0x70(%rsp), %rdi
callq 0x875f6
leaq 0x310(%rsp), %rdi
callq 0x6fa30
xorl %ebp, %ebp
leaq 0x1530(%rsp), %rdi
callq 0x6fa30
leaq 0x518(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x2ff6d
movq 0x518(%rsp), %rsi
incq %rsi
callq 0x218e0
leaq 0x4d0(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x2ff8e
movq 0x4d0(%rsp), %rsi
incq %rsi
callq 0x218e0
leaq 0x470(%rsp), %rdi
callq 0x38bca
leaq 0x420(%rsp), %rdi
callq 0x38d76
leaq 0x1c0(%rsp), %rdi
callq 0x928f2
movq 0x150(%rsp), %rdi
leaq 0x160(%rsp), %rax
cmpq %rax, %rdi
je 0x2ffda
movq 0x160(%rsp), %rsi
incq %rsi
callq 0x218e0
leaq 0x58(%rsp), %rdi
callq 0x36fc0
leaq 0x90(%rsp), %rdi
callq 0x36fe0
movl %ebp, %eax
addq $0x3e48, %rsp           # imm = 0x3E48
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0xd0(%rsp), %rdi
jmp 0x2ff2b
movq %rax, %rbx
movq 0x110(%rsp), %rdi
leaq 0x120(%rsp), %rax
cmpq %rax, %rdi
je 0x30371
movq 0x120(%rsp), %rsi
jmp 0x30109
jmp 0x302c3
movq %rax, %rbx
movl $0x160, %esi            # imm = 0x160
jmp 0x3013e
jmp 0x30055
jmp 0x300cb
jmp 0x30055
jmp 0x300cb
movq %rax, %rbx
movl $0x30, %esi
movq %r13, %rdi
jmp 0x300d6
jmp 0x300cb
jmp 0x30068
jmp 0x30068
movq %rax, %rbx
movl $0x160, %esi            # imm = 0x160
jmp 0x300c6
jmp 0x30238
movq %rax, %rbx
movl $0x30, %esi
jmp 0x3013e
movq %rax, %rbx
movl $0x1b0, %esi            # imm = 0x1B0
movq %r14, %rdi
jmp 0x30141
movq %rax, %rbx
movl $0x160, %esi            # imm = 0x160
movq %r15, %rdi
jmp 0x30141
movq %rax, %rbx
movl $0x1b0, %esi            # imm = 0x1B0
movq %r14, %rdi
callq 0x218e0
jmp 0x30364
jmp 0x302c3
movq %rax, %rbx
movl $0x30, %esi
movq %r15, %rdi
jmp 0x300d6
movq %rax, %rbx
movl $0x1b0, %esi            # imm = 0x1B0
movq %r14, %rdi
callq 0x218e0
jmp 0x30243
jmp 0x302c3
movq %rax, %rbx
movq 0x130(%rsp), %rdi
leaq 0x140(%rsp), %rax
cmpq %rax, %rdi
je 0x30371
movq 0x140(%rsp), %rsi
incq %rsi
jmp 0x30141
jmp 0x302c3
jmp 0x302bb
jmp 0x30238
jmp 0x30238
jmp 0x30238
jmp 0x302c3
jmp 0x30361
jmp 0x302bb
movq %rax, %rbx
movl $0x1b0, %esi            # imm = 0x1B0
movq %r12, %rdi
callq 0x218e0
jmp 0x30371
jmp 0x302c3
jmp 0x30240
jmp 0x302bb
jmp 0x30238
jmp 0x302c3
jmp 0x302bb
movq %rax, %rbx
leaq 0x1530(%rsp), %rdi
callq 0x700c4
jmp 0x3038b
jmp 0x302bb
jmp 0x30240
jmp 0x30240
jmp 0x30240
jmp 0x30240
jmp 0x302c3
jmp 0x30238
jmp 0x30251
jmp 0x302bb
jmp 0x30240
jmp 0x30240
jmp 0x30240
movq %rax, %rbx
movl $0x1b0, %esi            # imm = 0x1B0
movq %r14, %rdi
jmp 0x30278
jmp 0x30361
movq %rax, %rbx
jmp 0x30398
jmp 0x30286
jmp 0x30251
jmp 0x302bb
jmp 0x30251
jmp 0x30251
jmp 0x302bb
jmp 0x302bb
jmp 0x30251
jmp 0x302bb
jmp 0x302bb
jmp 0x302bb
jmp 0x30251
jmp 0x302bb
jmp 0x302c3
jmp 0x302bb
movq %rax, %rbx
jmp 0x303ca
jmp 0x302c3
jmp 0x302c3
jmp 0x302c3
jmp 0x302bb
jmp 0x30238
jmp 0x30238
jmp 0x302bb
movq %rax, %rbx
jmp 0x3038b
movq %rax, %rbx
leaq 0x70(%rsp), %rdi
jmp 0x3036c
jmp 0x302bb
jmp 0x302bb
movq %rax, %rbx
movq 0x530(%rsp), %rdi
leaq 0x540(%rsp), %rax
cmpq %rax, %rdi
je 0x3037e
movq 0x540(%rsp), %rsi
incq %rsi
callq 0x218e0
jmp 0x3037e
jmp 0x302bb
jmp 0x30286
movq %rax, %rbx
jmp 0x303a5
jmp 0x302bb
jmp 0x302c3
movq %rax, %rbx
jmp 0x303d4
movq %rax, %rbx
leaq 0x310(%rsp), %rdi
callq 0x700c4
jmp 0x3037e
jmp 0x302bb
jmp 0x302bb
jmp 0x302bb
jmp 0x302bb
jmp 0x302bb
jmp 0x302bb
movq %rax, %rbx
jmp 0x3037e
movq %rax, %rbx
jmp 0x30371
movq %rax, %rbx
movl $0x68, %esi
movq %r15, %rdi
jmp 0x3031d
jmp 0x30345
movq %rax, %rbx
movl $0x60, %esi
movq %r15, %rdi
jmp 0x3032f
movq %rax, %rbx
movl $0x68, %esi
movq %r14, %rdi
jmp 0x3031d
jmp 0x30324
movq %rax, %rbx
movl $0x68, %esi
movq %r13, %rdi
jmp 0x3031d
movq %rax, %rbx
movl $0x70, %esi
movq %r14, %rdi
jmp 0x3032f
jmp 0x30340
movq %rax, %rbx
movl $0x68, %esi
movq %rbp, %rdi
callq 0x218e0
jmp 0x30355
movq %rax, %rbx
movl $0x88, %esi
movq %r12, %rdi
callq 0x218e0
jmp 0x30348
jmp 0x30340
jmp 0x30340
jmp 0x30345
jmp 0x30345
jmp 0x30340
movq %rax, %rbx
jmp 0x30355
movq %rax, %rbx
leaq 0xb8(%rsp), %rdi
callq 0x875f6
leaq 0x60(%rsp), %rdi
callq 0x875f6
jmp 0x30364
movq %rax, %rbx
leaq 0xd0(%rsp), %rdi
callq 0x875f6
leaq 0x310(%rsp), %rdi
callq 0x6fa30
leaq 0x1530(%rsp), %rdi
callq 0x6fa30
leaq 0x420(%rsp), %rdi
callq 0x36f6e
leaq 0x1c0(%rsp), %rdi
callq 0x928f2
movq 0x150(%rsp), %rdi
leaq 0x160(%rsp), %rax
cmpq %rax, %rdi
je 0x303ca
movq 0x160(%rsp), %rsi
incq %rsi
callq 0x218e0
leaq 0x58(%rsp), %rdi
callq 0x36fc0
leaq 0x90(%rsp), %rdi
callq 0x36fe0
movq %rbx, %rdi
callq 0x220c0
nop