// File: 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:
subq $0x4588, %rsp           # imm = 0x4588
movq %rdi, 0x4578(%rsp)
movq %rsi, 0x4570(%rsp)
movq %rdx, 0x4568(%rsp)
movq 0x4578(%rsp), %rax
movq %rax, 0x460(%rsp)
leaq 0x158623(%rip), %rax    # 0x18f1d9
movq %rax, 0x4560(%rsp)
leaq 0x4558(%rsp), %rdi
callq 0x49500
leaq 0x4550(%rsp), %rdi
callq 0x49510
jmp 0x36bda
cmpq $0x0, 0x4568(%rsp)
jne 0x36c13
movq 0x460(%rsp), %rax
movq (%rax), %rax
movq %rax, 0x4568(%rsp)
jmp 0x36c13
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x4548(%rsp)
movl %eax, 0x4544(%rsp)
jmp 0x39fbe
movq 0x4570(%rsp), %rdi
leaq 0x1585bd(%rip), %rsi    # 0x18f1df
callq 0x22c10
movq %rax, 0x458(%rsp)
jmp 0x36c31
movq 0x458(%rsp), %rax
movq %rax, 0x4538(%rsp)
cmpq $0x0, 0x4538(%rsp)
jne 0x36c98
movq 0x4570(%rsp), %rsi
leaq 0x158587(%rip), %rdi    # 0x18f1e2
xorl %eax, %eax
callq 0xf3b00
jmp 0x36c64
movl $0x0, 0x4584(%rsp)
movl $0x1, 0x4534(%rsp)
jmp 0x39f88
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x4548(%rsp)
movl %eax, 0x4544(%rsp)
jmp 0x39fb1
leaq 0x4510(%rsp), %rdi
callq 0x22eb0
movq 0x4538(%rsp), %rdi
xorl %eax, %eax
movl %eax, %esi
movl $0x2, %edx
callq 0x22b20
jmp 0x36cbd
movq 0x4538(%rsp), %rdi
callq 0x22030
movq %rax, 0x450(%rsp)
jmp 0x36cd4
movq 0x450(%rsp), %rax
movq %rax, 0x4508(%rsp)
movq 0x4538(%rsp), %rdi
xorl %edx, %edx
movl %edx, %esi
callq 0x22b20
jmp 0x36cf7
movq 0x4508(%rsp), %rdi
incq %rdi
callq 0x22040
movq %rax, 0x448(%rsp)
jmp 0x36d11
movq 0x448(%rsp), %rax
movq %rax, 0x4500(%rsp)
movq 0x4508(%rsp), %rax
movq %rax, 0x44f8(%rsp)
movq 0x4500(%rsp), %rdi
movq 0x44f8(%rsp), %rdx
movq 0x4538(%rsp), %rcx
movl $0x1, %esi
callq 0x22ff0
movq %rax, 0x440(%rsp)
jmp 0x36d5d
movq 0x440(%rsp), %rax
cmpq 0x44f8(%rsp), %rax
je 0x36dbb
movq 0x4570(%rsp), %rsi
leaq 0x158482(%rip), %rdi    # 0x18f200
xorl %eax, %eax
callq 0xf3b00
jmp 0x36d87
movl $0x0, 0x4584(%rsp)
movl $0x1, 0x4534(%rsp)
jmp 0x39f6a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x4548(%rsp)
movl %eax, 0x4544(%rsp)
jmp 0x39f79
movq 0x4500(%rsp), %rax
movq 0x4508(%rsp), %rcx
movb $0x0, (%rax,%rcx)
movq 0x4500(%rsp), %rsi
leaq 0x4510(%rsp), %rdi
callq 0x22e30
jmp 0x36de6
jmp 0x36de8
movq 0x4500(%rsp), %rax
movq %rax, 0x438(%rsp)
cmpq $0x0, %rax
je 0x36e0b
movq 0x438(%rsp), %rdi
callq 0x22da0
movq 0x4538(%rsp), %rdi
callq 0x229d0
jmp 0x36e1a
leaq 0x44d0(%rsp), %rdi
xorl %esi, %esi
callq 0x100d90
jmp 0x36e2b
leaq 0x43c0(%rsp), %rdi
callq 0xf3d40
jmp 0x36e3a
leaq 0x43c0(%rsp), %rdi
leaq 0x4510(%rsp), %rsi
leaq 0x44d0(%rsp), %rdx
xorl %ecx, %ecx
callq 0xf3f70
movb %al, 0x437(%rsp)
jmp 0x36e62
movb 0x437(%rsp), %al
testb $0x1, %al
jne 0x36ed4
jmp 0x36e6f
movq 0x4570(%rsp), %rsi
leaq 0x158395(%rip), %rdi    # 0x18f213
xorl %eax, %eax
callq 0xf3b00
jmp 0x36e87
movl $0x0, 0x4584(%rsp)
movl $0x1, 0x4534(%rsp)
jmp 0x39f32
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x4548(%rsp)
movl %eax, 0x4544(%rsp)
jmp 0x39f5b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x4548(%rsp)
movl %eax, 0x4544(%rsp)
jmp 0x39f4e
leaq 0x15834c(%rip), %rsi    # 0x18f227
leaq 0x3fa0(%rsp), %rdi
movl $0x3ff, %edx            # imm = 0x3FF
callq 0x224b0
leaq 0x164d53(%rip), %rdx    # 0x19bc47
leaq 0x43a8(%rsp), %rdi
leaq 0x44d0(%rsp), %rsi
movl $0x4, %ecx
callq 0x3e6f0
movl %eax, 0x430(%rsp)
jmp 0x36f17
movl 0x430(%rsp), %eax
cmpl $0x0, %eax
je 0x36fd8
leaq 0x3fa0(%rsp), %rax
movq %rax, 0x428(%rsp)
movq 0x43a8(%rsp), %rsi
leaq 0x3f80(%rsp), %rdi
callq 0xf7000
jmp 0x36f4e
leaq 0x3f80(%rsp), %rdi
callq 0x223a0
movq 0x428(%rsp), %rdi
movq %rax, %rsi
movl $0x3ff, %edx            # imm = 0x3FF
callq 0x224b0
leaq 0x3f80(%rsp), %rdi
callq 0x22610
leaq 0x3fa0(%rsp), %rdi
leaq 0x1582a7(%rip), %rsi    # 0x18f233
movl $0x5, %edx
callq 0x22450
cmpl $0x0, %eax
je 0x36fd6
movq 0x4570(%rsp), %rdx
leaq 0x15828f(%rip), %rdi    # 0x18f239
xorl %eax, %eax
leaq 0x3fa0(%rsp), %rsi
callq 0xf3b00
jmp 0x36fbb
movl $0x0, 0x4584(%rsp)
movl $0x1, 0x4534(%rsp)
jmp 0x39f32
jmp 0x36fd8
leaq 0x157261(%rip), %rsi    # 0x18e240
leaq 0x3b80(%rsp), %rdi
movl $0x3ff, %edx            # imm = 0x3FF
callq 0x224b0
leaq 0x158fd3(%rip), %rdx    # 0x18ffcb
leaq 0x43a8(%rsp), %rdi
leaq 0x44d0(%rsp), %rsi
movl $0x4, %ecx
callq 0x3e6f0
movl %eax, 0x424(%rsp)
jmp 0x3701b
movl 0x424(%rsp), %eax
cmpl $0x0, %eax
je 0x3707d
leaq 0x3b80(%rsp), %rax
movq %rax, 0x418(%rsp)
movq 0x43a8(%rsp), %rsi
leaq 0x3b60(%rsp), %rdi
callq 0xf7000
jmp 0x3704e
leaq 0x3b60(%rsp), %rdi
callq 0x223a0
movq 0x418(%rsp), %rdi
movq %rax, %rsi
movl $0x3ff, %edx            # imm = 0x3FF
callq 0x224b0
leaq 0x3b60(%rsp), %rdi
callq 0x22610
leaq 0x3b48(%rsp), %rdi
movsd 0x156f83(%rip), %xmm1   # 0x18e010
xorps %xmm2, %xmm2
movaps %xmm2, %xmm0
callq 0xcd9d0
jmp 0x3709a
leaq 0x15dc02(%rip), %rdx    # 0x194ca3
leaq 0x43b8(%rsp), %rdi
leaq 0x44d0(%rsp), %rsi
movl $0x6, %ecx
callq 0x3e6f0
movl %eax, 0x414(%rsp)
jmp 0x370c4
movl 0x414(%rsp), %eax
cmpl $0x0, %eax
je 0x3727e
movq 0x43b8(%rsp), %rdi
callq 0xff4b0
movl %eax, 0x410(%rsp)
jmp 0x370ea
movl 0x410(%rsp), %eax
cmpl $0x3, %eax
jb 0x3727c
movq 0x43b8(%rsp), %rsi
leaq 0x43b0(%rsp), %rdi
xorl %edx, %edx
movl $0xffffffff, %ecx       # imm = 0xFFFFFFFF
callq 0x3e810
movl %eax, 0x40c(%rsp)
jmp 0x3711f
movl 0x40c(%rsp), %eax
cmpl $0x0, %eax
je 0x37171
movq 0x43b0(%rsp), %rdi
callq 0x1031d0
movsd %xmm0, 0x400(%rsp)
jmp 0x37143
leaq 0x3b48(%rsp), %rdi
xorl %esi, %esi
callq 0x49350
movq %rax, 0x3f8(%rsp)
jmp 0x3715c
movq 0x3f8(%rsp), %rax
movsd 0x400(%rsp), %xmm0
movsd %xmm0, (%rax)
movq 0x43b8(%rsp), %rsi
leaq 0x43b0(%rsp), %rdi
movl $0x1, %edx
movl $0xffffffff, %ecx       # imm = 0xFFFFFFFF
callq 0x3e810
movl %eax, 0x3f4(%rsp)
jmp 0x37199
movl 0x3f4(%rsp), %eax
cmpl $0x0, %eax
je 0x371ee
movq 0x43b0(%rsp), %rdi
callq 0x1031d0
movsd %xmm0, 0x3e8(%rsp)
jmp 0x371bd
leaq 0x3b48(%rsp), %rdi
movl $0x1, %esi
callq 0x49350
movq %rax, 0x3e0(%rsp)
jmp 0x371d9
movq 0x3e0(%rsp), %rax
movsd 0x3e8(%rsp), %xmm0
movsd %xmm0, (%rax)
movq 0x43b8(%rsp), %rsi
leaq 0x43b0(%rsp), %rdi
movl $0x2, %edx
movl $0xffffffff, %ecx       # imm = 0xFFFFFFFF
callq 0x3e810
movl %eax, 0x3dc(%rsp)
jmp 0x37216
movl 0x3dc(%rsp), %eax
cmpl $0x0, %eax
je 0x3726b
movq 0x43b0(%rsp), %rdi
callq 0x1031d0
movsd %xmm0, 0x3d0(%rsp)
jmp 0x3723a
leaq 0x3b48(%rsp), %rdi
movl $0x2, %esi
callq 0x49350
movq %rax, 0x3c8(%rsp)
jmp 0x37256
movq 0x3c8(%rsp), %rax
movsd 0x3d0(%rsp), %xmm0
movsd %xmm0, (%rax)
leaq 0x3b48(%rsp), %rdi
callq 0xce130
jmp 0x3727a
jmp 0x3727c
jmp 0x3727e
leaq 0x3b30(%rsp), %rdi
xorps %xmm1, %xmm1
movsd 0x156d7f(%rip), %xmm2   # 0x18e010
movaps %xmm1, %xmm0
callq 0xcd9d0
jmp 0x3729b
leaq 0x157fc1(%rip), %rdx    # 0x18f263
leaq 0x43b8(%rsp), %rdi
leaq 0x44d0(%rsp), %rsi
movl $0x6, %ecx
callq 0x3e6f0
movl %eax, 0x3c4(%rsp)
jmp 0x372c5
movl 0x3c4(%rsp), %eax
cmpl $0x0, %eax
je 0x3747f
movq 0x43b8(%rsp), %rdi
callq 0xff4b0
movl %eax, 0x3c0(%rsp)
jmp 0x372eb
movl 0x3c0(%rsp), %eax
cmpl $0x3, %eax
jb 0x3747d
movq 0x43b8(%rsp), %rsi
leaq 0x43b0(%rsp), %rdi
xorl %edx, %edx
movl $0xffffffff, %ecx       # imm = 0xFFFFFFFF
callq 0x3e810
movl %eax, 0x3bc(%rsp)
jmp 0x37320
movl 0x3bc(%rsp), %eax
cmpl $0x0, %eax
je 0x37372
movq 0x43b0(%rsp), %rdi
callq 0x1031d0
movsd %xmm0, 0x3b0(%rsp)
jmp 0x37344
leaq 0x3b30(%rsp), %rdi
xorl %esi, %esi
callq 0x49350
movq %rax, 0x3a8(%rsp)
jmp 0x3735d
movq 0x3a8(%rsp), %rax
movsd 0x3b0(%rsp), %xmm0
movsd %xmm0, (%rax)
movq 0x43b8(%rsp), %rsi
leaq 0x43b0(%rsp), %rdi
movl $0x1, %edx
movl $0xffffffff, %ecx       # imm = 0xFFFFFFFF
callq 0x3e810
movl %eax, 0x3a4(%rsp)
jmp 0x3739a
movl 0x3a4(%rsp), %eax
cmpl $0x0, %eax
je 0x373ef
movq 0x43b0(%rsp), %rdi
callq 0x1031d0
movsd %xmm0, 0x398(%rsp)
jmp 0x373be
leaq 0x3b30(%rsp), %rdi
movl $0x1, %esi
callq 0x49350
movq %rax, 0x390(%rsp)
jmp 0x373da
movq 0x390(%rsp), %rax
movsd 0x398(%rsp), %xmm0
movsd %xmm0, (%rax)
movq 0x43b8(%rsp), %rsi
leaq 0x43b0(%rsp), %rdi
movl $0x2, %edx
movl $0xffffffff, %ecx       # imm = 0xFFFFFFFF
callq 0x3e810
movl %eax, 0x38c(%rsp)
jmp 0x37417
movl 0x38c(%rsp), %eax
cmpl $0x0, %eax
je 0x3746c
movq 0x43b0(%rsp), %rdi
callq 0x1031d0
movsd %xmm0, 0x380(%rsp)
jmp 0x3743b
leaq 0x3b30(%rsp), %rdi
movl $0x2, %esi
callq 0x49350
movq %rax, 0x378(%rsp)
jmp 0x37457
movq 0x378(%rsp), %rax
movsd 0x380(%rsp), %xmm0
movsd %xmm0, (%rax)
leaq 0x3b30(%rsp), %rdi
callq 0xce130
jmp 0x3747b
jmp 0x3747d
jmp 0x3747f
movabsq $0x3ff0000000000000, %rax # imm = 0x3FF0000000000000
movq %rax, 0x3b28(%rsp)
leaq 0x157dd1(%rip), %rdx    # 0x18f269
leaq 0x43a8(%rsp), %rdi
leaq 0x44d0(%rsp), %rsi
xorl %ecx, %ecx
callq 0x3e6f0
movl %eax, 0x374(%rsp)
jmp 0x374b8
movl 0x374(%rsp), %eax
cmpl $0x0, %eax
je 0x374ee
movq 0x43a8(%rsp), %rdi
callq 0x1031d0
movsd %xmm0, 0x368(%rsp)
jmp 0x374dc
movsd 0x368(%rsp), %xmm0
movsd %xmm0, 0x3b28(%rsp)
movq 0x4568(%rsp), %rax
movq %rax, 0x3b20(%rsp)
movq 0x3b20(%rsp), %rdi
leaq 0x3b80(%rsp), %rsi
callq 0x57850
jmp 0x37515
leaq 0x1c74b4(%rip), %rsi    # 0x1fe9d0
leaq 0x3a10(%rsp), %rdi
callq 0x48c80
jmp 0x3752b
movsd 0x3b28(%rsp), %xmm0
leaq 0x3a10(%rsp), %rdi
callq 0x49520
jmp 0x37543
movq 0x3b20(%rsp), %rdi
leaq 0x3a10(%rsp), %rsi
callq 0x577d0
jmp 0x3755a
leaq 0x157d16(%rip), %rdx    # 0x18f277
leaq 0x3a08(%rsp), %rdi
leaq 0x44d0(%rsp), %rsi
movl $0x6, %ecx
callq 0x3e6f0
movl %eax, 0x364(%rsp)
jmp 0x37584
movl 0x364(%rsp), %eax
cmpl $0x0, %eax
jne 0x375c4
movl $0x0, 0x4584(%rsp)
movl $0x1, 0x4534(%rsp)
jmp 0x39f14
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x4548(%rsp)
movl %eax, 0x4544(%rsp)
jmp 0x39f23
movl $0x0, 0x39fc(%rsp)
movl 0x39fc(%rsp), %eax
movl %eax, 0x35c(%rsp)
movq 0x3a08(%rsp), %rdi
callq 0xff4b0
movl %eax, 0x360(%rsp)
jmp 0x375f3
movl 0x35c(%rsp), %eax
movl 0x360(%rsp), %ecx
cmpl %ecx, %eax
jae 0x39efe
movq 0x3a08(%rsp), %rsi
movl 0x39fc(%rsp), %edx
leaq 0x3a00(%rsp), %rdi
movl $0xffffffff, %ecx       # imm = 0xFFFFFFFF
callq 0x3e810
movl %eax, 0x358(%rsp)
jmp 0x37633
movl 0x358(%rsp), %eax
cmpl $0x0, %eax
jne 0x3765a
movl $0x0, 0x4584(%rsp)
movl $0x1, 0x4534(%rsp)
jmp 0x39f14
movq 0x3a00(%rsp), %rdi
callq 0x101940
movl %eax, 0x354(%rsp)
jmp 0x37670
movl 0x354(%rsp), %eax
cmpl $0x7, %eax
je 0x37681
jmp 0x39ee8
movl 0x39fc(%rsp), %eax
movl %eax, 0x39f8(%rsp)
movq 0x3a00(%rsp), %rsi
leaq 0x158594(%rip), %rdx    # 0x18fc32
leaq 0x43a8(%rsp), %rdi
xorl %ecx, %ecx
callq 0x3e6f0
movl %eax, 0x350(%rsp)
jmp 0x376b6
movl 0x350(%rsp), %eax
cmpl $0x0, %eax
je 0x3779a
movq 0x43a8(%rsp), %rsi
leaq 0x39d8(%rsp), %rdi
callq 0xf7000
jmp 0x376dd
leaq 0x39b7(%rsp), %rdi
movq %rdi, 0x348(%rsp)
callq 0x232a0
movq 0x348(%rsp), %rdx
leaq 0x15e9a6(%rip), %rsi    # 0x1960a7
leaq 0x39b8(%rsp), %rdi
callq 0x485b0
jmp 0x37710
leaq 0x39d8(%rsp), %rdi
leaq 0x39b8(%rsp), %rsi
callq 0x49560
movb %al, 0x347(%rsp)
leaq 0x39b8(%rsp), %rdi
callq 0x22610
leaq 0x39b7(%rsp), %rdi
callq 0x22ab0
leaq 0x39d8(%rsp), %rdi
callq 0x22610
movb 0x347(%rsp), %al
testb $0x1, %al
jne 0x37760
jmp 0x37798
jmp 0x39ee8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x4548(%rsp)
movl %eax, 0x4544(%rsp)
leaq 0x39b7(%rsp), %rdi
callq 0x22ab0
leaq 0x39d8(%rsp), %rdi
callq 0x22610
jmp 0x39f23
jmp 0x3779a
movq 0x3a00(%rsp), %rsi
leaq 0x158822(%rip), %rdx    # 0x18ffcb
leaq 0x43a8(%rsp), %rdi
xorl %ecx, %ecx
callq 0x3e6f0
movl %eax, 0x340(%rsp)
jmp 0x377c1
movl 0x340(%rsp), %eax
cmpl $0x0, %eax
je 0x3780d
movq 0x43a8(%rsp), %rsi
leaq 0x3990(%rsp), %rdi
callq 0xf7000
jmp 0x377e4
leaq 0x3990(%rsp), %rdi
callq 0x223a0
movq %rax, %rdi
callq 0x23090
movl %eax, 0x39f8(%rsp)
leaq 0x3990(%rsp), %rdi
callq 0x22610
movl 0x39f8(%rsp), %edx
leaq 0x157a63(%rip), %rsi    # 0x18f27e
xorl %eax, %eax
leaq 0x3590(%rsp), %rdi
callq 0x22160
movl $0x1b0, %edi            # imm = 0x1B0
callq 0x229e0
movq %rax, 0x338(%rsp)
jmp 0x3783e
movq 0x460(%rsp), %rsi
movq 0x338(%rsp), %rdi
callq 0x555e0
jmp 0x37855
movq 0x338(%rsp), %rax
movq %rax, 0x3588(%rsp)
movq 0x3588(%rsp), %rdi
leaq 0x3590(%rsp), %rsi
callq 0x57850
jmp 0x3787c
movq 0x3b20(%rsp), %rdi
movq 0x3588(%rsp), %rsi
callq 0x57450
jmp 0x37893
movq 0x3a00(%rsp), %rsi
leaq 0x1579e5(%rip), %rdx    # 0x18f287
leaq 0x3580(%rsp), %rdi
movl $0x6, %ecx
callq 0x3e6f0
movl %eax, 0x334(%rsp)
jmp 0x378bd
movl 0x334(%rsp), %eax
cmpl $0x0, %eax
je 0x39ee6
movq 0x3580(%rsp), %rdi
callq 0xff4b0
movl %eax, 0x330(%rsp)
jmp 0x378e3
movl 0x330(%rsp), %eax
cmpl $0x0, %eax
jne 0x3791f
jmp 0x39ee8
movq 0x338(%rsp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x4548(%rsp)
movl %eax, 0x4544(%rsp)
movl $0x1b0, %esi            # imm = 0x1B0
callq 0x22a00
jmp 0x39f23
movq 0x3580(%rsp), %rdi
callq 0xff4b0
movl %eax, 0x32c(%rsp)
jmp 0x37935
movl 0x32c(%rsp), %eax
movl %eax, %eax
movl %eax, %edi
shlq $0x3, %rdi
callq 0x22040
movq %rax, 0x320(%rsp)
jmp 0x37953
movq 0x320(%rsp), %rax
movq %rax, 0x3568(%rsp)
movl $0x0, 0x3564(%rsp)
movl 0x3564(%rsp), %eax
movl %eax, 0x318(%rsp)
movq 0x3580(%rsp), %rdi
callq 0xff4b0
movl %eax, 0x31c(%rsp)
jmp 0x37992
movl 0x318(%rsp), %eax
movl 0x31c(%rsp), %ecx
cmpl %ecx, %eax
jae 0x379ce
movq 0x3568(%rsp), %rax
movl 0x3564(%rsp), %ecx
movq $0x0, (%rax,%rcx,8)
movl 0x3564(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x3564(%rsp)
jmp 0x3796e
movl $0x0, 0x3560(%rsp)
movl 0x3560(%rsp), %eax
movl %eax, 0x310(%rsp)
movq 0x3580(%rsp), %rdi
callq 0xff4b0
movl %eax, 0x314(%rsp)
jmp 0x379fd
movl 0x310(%rsp), %eax
movl 0x314(%rsp), %ecx
cmpl %ecx, %eax
jae 0x39bf8
movq 0x3580(%rsp), %rsi
movl 0x3560(%rsp), %edx
leaq 0x3578(%rsp), %rdi
movl $0xffffffff, %ecx       # imm = 0xFFFFFFFF
callq 0x3e810
movl %eax, 0x30c(%rsp)
jmp 0x37a3d
movl 0x30c(%rsp), %eax
cmpl $0x0, %eax
jne 0x37a4e
jmp 0x39bd0
movq 0x3578(%rsp), %rdi
callq 0x101940
movl %eax, 0x308(%rsp)
jmp 0x37a64
movl 0x308(%rsp), %eax
cmpl $0x7, %eax
je 0x37a75
jmp 0x39bd0
leaq 0x3160(%rsp), %rdi
xorl %esi, %esi
movl %esi, 0x300(%rsp)
movl $0x400, %edx            # imm = 0x400
movq %rdx, 0x2f8(%rsp)
callq 0x224f0
movq 0x2f8(%rsp), %rdx
movl 0x300(%rsp), %esi
leaq 0x2d60(%rsp), %rdi
callq 0x224f0
movq 0x2f8(%rsp), %rdx
movl 0x300(%rsp), %esi
leaq 0x2960(%rsp), %rdi
callq 0x224f0
movl 0x300(%rsp), %ecx
movl $0x0, 0x295c(%rsp)
movl $0x0, 0x2958(%rsp)
movl $0x0, 0x2954(%rsp)
movl $0x0, 0x2950(%rsp)
movl $0x0, 0x294c(%rsp)
movq 0x3578(%rsp), %rsi
leaq 0x158115(%rip), %rdx    # 0x18fc32
leaq 0x43a8(%rsp), %rdi
callq 0x3e6f0
movl %eax, 0x304(%rsp)
jmp 0x37b33
movl 0x304(%rsp), %eax
cmpl $0x0, %eax
je 0x37c17
movq 0x43a8(%rsp), %rsi
leaq 0x2928(%rsp), %rdi
callq 0xf7000
jmp 0x37b5a
leaq 0x2907(%rsp), %rdi
movq %rdi, 0x2f0(%rsp)
callq 0x232a0
movq 0x2f0(%rsp), %rdx
leaq 0x15e529(%rip), %rsi    # 0x1960a7
leaq 0x2908(%rsp), %rdi
callq 0x485b0
jmp 0x37b8d
leaq 0x2928(%rsp), %rdi
leaq 0x2908(%rsp), %rsi
callq 0x49560
movb %al, 0x2ef(%rsp)
leaq 0x2908(%rsp), %rdi
callq 0x22610
leaq 0x2907(%rsp), %rdi
callq 0x22ab0
leaq 0x2928(%rsp), %rdi
callq 0x22610
movb 0x2ef(%rsp), %al
testb $0x1, %al
jne 0x37bdd
jmp 0x37c15
jmp 0x39bd0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x4548(%rsp)
movl %eax, 0x4544(%rsp)
leaq 0x2907(%rsp), %rdi
callq 0x22ab0
leaq 0x2928(%rsp), %rdi
callq 0x22610
jmp 0x39f23
jmp 0x37c17
movq 0x3578(%rsp), %rsi
leaq 0x1583a5(%rip), %rdx    # 0x18ffcb
leaq 0x43a8(%rsp), %rdi
xorl %ecx, %ecx
callq 0x3e6f0
movl %eax, 0x2e8(%rsp)
jmp 0x37c3e
movl 0x2e8(%rsp), %eax
cmpl $0x0, %eax
je 0x37ca0
leaq 0x3160(%rsp), %rax
movq %rax, 0x2e0(%rsp)
movq 0x43a8(%rsp), %rsi
leaq 0x28e0(%rsp), %rdi
callq 0xf7000
jmp 0x37c71
leaq 0x28e0(%rsp), %rdi
callq 0x223a0
movq 0x2e0(%rsp), %rdi
movq %rax, %rsi
movl $0x3ff, %edx            # imm = 0x3FF
callq 0x224b0
leaq 0x28e0(%rsp), %rdi
callq 0x22610
movq 0x3578(%rsp), %rsi
leaq 0x163252(%rip), %rdx    # 0x19af01
leaq 0x43a8(%rsp), %rdi
xorl %ecx, %ecx
callq 0x3e6f0
movl %eax, 0x2dc(%rsp)
jmp 0x37cc7
movl 0x2dc(%rsp), %eax
cmpl $0x0, %eax
je 0x37d29
leaq 0x2960(%rsp), %rax
movq %rax, 0x2d0(%rsp)
movq 0x43a8(%rsp), %rsi
leaq 0x28c0(%rsp), %rdi
callq 0xf7000
jmp 0x37cfa
leaq 0x28c0(%rsp), %rdi
callq 0x223a0
movq 0x2d0(%rsp), %rdi
movq %rax, %rsi
movl $0x3ff, %edx            # imm = 0x3FF
callq 0x224b0
leaq 0x28c0(%rsp), %rdi
callq 0x22610
movq 0x3578(%rsp), %rsi
leaq 0x157555(%rip), %rdx    # 0x18f28d
leaq 0x43a8(%rsp), %rdi
xorl %ecx, %ecx
callq 0x3e6f0
movl %eax, 0x2cc(%rsp)
jmp 0x37d50
movl 0x2cc(%rsp), %eax
cmpl $0x0, %eax
je 0x37db2
leaq 0x2d60(%rsp), %rax
movq %rax, 0x2c0(%rsp)
movq 0x43a8(%rsp), %rsi
leaq 0x28a0(%rsp), %rdi
callq 0xf7000
jmp 0x37d83
leaq 0x28a0(%rsp), %rdi
callq 0x223a0
movq 0x2c0(%rsp), %rdi
movq %rax, %rsi
movl $0x3ff, %edx            # imm = 0x3FF
callq 0x224b0
leaq 0x28a0(%rsp), %rdi
callq 0x22610
movq 0x3578(%rsp), %rsi
leaq 0x1574d4(%rip), %rdx    # 0x18f295
leaq 0x43a8(%rsp), %rdi
xorl %ecx, %ecx
callq 0x3e6f0
movl %eax, 0x2bc(%rsp)
jmp 0x37dd9
movl 0x2bc(%rsp), %eax
cmpl $0x0, %eax
je 0x37ec5
movq 0x43a8(%rsp), %rsi
leaq 0x2880(%rsp), %rdi
callq 0xf7000
jmp 0x37e00
leaq 0x285f(%rsp), %rdi
movq %rdi, 0x2b0(%rsp)
callq 0x232a0
movq 0x2b0(%rsp), %rdx
leaq 0x165f9e(%rip), %rsi    # 0x19ddc2
leaq 0x2860(%rsp), %rdi
callq 0x485b0
jmp 0x37e33
leaq 0x2880(%rsp), %rdi
leaq 0x2860(%rsp), %rsi
callq 0x49560
movb %al, 0x2af(%rsp)
leaq 0x2860(%rsp), %rdi
callq 0x22610
leaq 0x285f(%rsp), %rdi
callq 0x22ab0
leaq 0x2880(%rsp), %rdi
callq 0x22610
movb 0x2af(%rsp), %al
testb $0x1, %al
jne 0x37e83
jmp 0x37ec3
movl $0x1, 0x295c(%rsp)
jmp 0x37ec3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x4548(%rsp)
movl %eax, 0x4544(%rsp)
leaq 0x285f(%rsp), %rdi
callq 0x22ab0
leaq 0x2880(%rsp), %rdi
callq 0x22610
jmp 0x39f23
jmp 0x37ec5
movq 0x3578(%rsp), %rsi
leaq 0x1573cd(%rip), %rdx    # 0x18f2a1
leaq 0x43a8(%rsp), %rdi
xorl %ecx, %ecx
callq 0x3e6f0
movl %eax, 0x2a8(%rsp)
jmp 0x37eec
movl 0x2a8(%rsp), %eax
cmpl $0x0, %eax
je 0x37fd8
movq 0x43a8(%rsp), %rsi
leaq 0x2838(%rsp), %rdi
callq 0xf7000
jmp 0x37f13
leaq 0x2817(%rsp), %rdi
movq %rdi, 0x2a0(%rsp)
callq 0x232a0
movq 0x2a0(%rsp), %rdx
leaq 0x165e8b(%rip), %rsi    # 0x19ddc2
leaq 0x2818(%rsp), %rdi
callq 0x485b0
jmp 0x37f46
leaq 0x2838(%rsp), %rdi
leaq 0x2818(%rsp), %rsi
callq 0x49560
movb %al, 0x29f(%rsp)
leaq 0x2818(%rsp), %rdi
callq 0x22610
leaq 0x2817(%rsp), %rdi
callq 0x22ab0
leaq 0x2838(%rsp), %rdi
callq 0x22610
movb 0x29f(%rsp), %al
testb $0x1, %al
jne 0x37f96
jmp 0x37fd6
movl $0x1, 0x2958(%rsp)
jmp 0x37fd6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x4548(%rsp)
movl %eax, 0x4544(%rsp)
leaq 0x2817(%rsp), %rdi
callq 0x22ab0
leaq 0x2838(%rsp), %rdi
callq 0x22610
jmp 0x39f23
jmp 0x37fd8
movq 0x3578(%rsp), %rsi
leaq 0x1572c4(%rip), %rdx    # 0x18f2ab
leaq 0x43a8(%rsp), %rdi
xorl %ecx, %ecx
callq 0x3e6f0
movl %eax, 0x298(%rsp)
jmp 0x37fff
movl 0x298(%rsp), %eax
cmpl $0x0, %eax
je 0x380eb
movq 0x43a8(%rsp), %rsi
leaq 0x27f0(%rsp), %rdi
callq 0xf7000
jmp 0x38026
leaq 0x27cf(%rsp), %rdi
movq %rdi, 0x290(%rsp)
callq 0x232a0
movq 0x290(%rsp), %rdx
leaq 0x165d78(%rip), %rsi    # 0x19ddc2
leaq 0x27d0(%rsp), %rdi
callq 0x485b0
jmp 0x38059
leaq 0x27f0(%rsp), %rdi
leaq 0x27d0(%rsp), %rsi
callq 0x49560
movb %al, 0x28f(%rsp)
leaq 0x27d0(%rsp), %rdi
callq 0x22610
leaq 0x27cf(%rsp), %rdi
callq 0x22ab0
leaq 0x27f0(%rsp), %rdi
callq 0x22610
movb 0x28f(%rsp), %al
testb $0x1, %al
jne 0x380a9
jmp 0x380e9
movl $0x1, 0x2954(%rsp)
jmp 0x380e9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x4548(%rsp)
movl %eax, 0x4544(%rsp)
leaq 0x27cf(%rsp), %rdi
callq 0x22ab0
leaq 0x27f0(%rsp), %rdi
callq 0x22610
jmp 0x39f23
jmp 0x380eb
movq 0x3578(%rsp), %rsi
leaq 0x1571bb(%rip), %rdx    # 0x18f2b5
leaq 0x43a8(%rsp), %rdi
xorl %ecx, %ecx
callq 0x3e6f0
movl %eax, 0x288(%rsp)
jmp 0x38112
movl 0x288(%rsp), %eax
cmpl $0x0, %eax
je 0x381fe
movq 0x43a8(%rsp), %rsi
leaq 0x27a8(%rsp), %rdi
callq 0xf7000
jmp 0x38139
leaq 0x2787(%rsp), %rdi
movq %rdi, 0x280(%rsp)
callq 0x232a0
movq 0x280(%rsp), %rdx
leaq 0x165c65(%rip), %rsi    # 0x19ddc2
leaq 0x2788(%rsp), %rdi
callq 0x485b0
jmp 0x3816c
leaq 0x27a8(%rsp), %rdi
leaq 0x2788(%rsp), %rsi
callq 0x49560
movb %al, 0x27f(%rsp)
leaq 0x2788(%rsp), %rdi
callq 0x22610
leaq 0x2787(%rsp), %rdi
callq 0x22ab0
leaq 0x27a8(%rsp), %rdi
callq 0x22610
movb 0x27f(%rsp), %al
testb $0x1, %al
jne 0x381bc
jmp 0x381fc
movl $0x1, 0x2950(%rsp)
jmp 0x381fc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x4548(%rsp)
movl %eax, 0x4544(%rsp)
leaq 0x2787(%rsp), %rdi
callq 0x22ab0
leaq 0x27a8(%rsp), %rdi
callq 0x22610
jmp 0x39f23
jmp 0x381fe
movq 0x3578(%rsp), %rsi
leaq 0x1570b3(%rip), %rdx    # 0x18f2c0
leaq 0x43a8(%rsp), %rdi
xorl %ecx, %ecx
callq 0x3e6f0
movl %eax, 0x278(%rsp)
jmp 0x38225
movl 0x278(%rsp), %eax
cmpl $0x0, %eax
je 0x38311
movq 0x43a8(%rsp), %rsi
leaq 0x2760(%rsp), %rdi
callq 0xf7000
jmp 0x3824c
leaq 0x273f(%rsp), %rdi
movq %rdi, 0x270(%rsp)
callq 0x232a0
movq 0x270(%rsp), %rdx
leaq 0x165b52(%rip), %rsi    # 0x19ddc2
leaq 0x2740(%rsp), %rdi
callq 0x485b0
jmp 0x3827f
leaq 0x2760(%rsp), %rdi
leaq 0x2740(%rsp), %rsi
callq 0x49560
movb %al, 0x26f(%rsp)
leaq 0x2740(%rsp), %rdi
callq 0x22610
leaq 0x273f(%rsp), %rdi
callq 0x22ab0
leaq 0x2760(%rsp), %rdi
callq 0x22610
movb 0x26f(%rsp), %al
testb $0x1, %al
jne 0x382cf
jmp 0x3830f
movl $0x1, 0x294c(%rsp)
jmp 0x3830f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x4548(%rsp)
movl %eax, 0x4544(%rsp)
leaq 0x273f(%rsp), %rdi
callq 0x22ab0
leaq 0x2760(%rsp), %rdi
callq 0x22610
jmp 0x39f23
jmp 0x38311
leaq 0x1c66b8(%rip), %rsi    # 0x1fe9d0
leaq 0x2628(%rsp), %rdi
callq 0x48c80
jmp 0x38327
movq 0x3578(%rsp), %rsi
leaq 0x156c15(%rip), %rdx    # 0x18ef4b
leaq 0x43b8(%rsp), %rdi
movl $0x6, %ecx
callq 0x3e6f0
movl %eax, 0x268(%rsp)
jmp 0x38351
movl 0x268(%rsp), %eax
cmpl $0x0, %eax
je 0x384c6
movq 0x43b8(%rsp), %rdi
callq 0xff4b0
movl %eax, 0x264(%rsp)
jmp 0x38377
movl 0x264(%rsp), %eax
cmpl $0x10, %eax
jb 0x384c4
leaq 0x1c6922(%rip), %rsi    # 0x1fecb0
leaq 0x25a8(%rsp), %rdi
callq 0xc6120
jmp 0x3839d
movl $0x0, 0x25a4(%rsp)
movl 0x25a4(%rsp), %eax
movl %eax, 0x25c(%rsp)
movq 0x43b8(%rsp), %rdi
callq 0xff4b0
movl %eax, 0x260(%rsp)
jmp 0x383cc
movl 0x25c(%rsp), %eax
movl 0x260(%rsp), %ecx
cmpl %ecx, %eax
jae 0x384a4
movq 0x43b8(%rsp), %rsi
movl 0x25a4(%rsp), %edx
leaq 0x43b0(%rsp), %rdi
movl $0xffffffff, %ecx       # imm = 0xFFFFFFFF
callq 0x3e810
movl %eax, 0x258(%rsp)
jmp 0x3840c
movl 0x258(%rsp), %eax
cmpl $0x0, %eax
jne 0x38433
jmp 0x3848e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x4548(%rsp)
movl %eax, 0x4544(%rsp)
jmp 0x39be6
movq 0x43b0(%rsp), %rdi
callq 0x1031d0
movsd %xmm0, 0x250(%rsp)
jmp 0x3844b
movl 0x25a4(%rsp), %esi
andl $0x3, %esi
leaq 0x25a8(%rsp), %rdi
callq 0x49600
movq %rax, 0x248(%rsp)
jmp 0x3846c
movq 0x248(%rsp), %rax
movsd 0x250(%rsp), %xmm0
movl 0x25a4(%rsp), %ecx
shrl $0x2, %ecx
movl %ecx, %ecx
movsd %xmm0, (%rax,%rcx,8)
movl 0x25a4(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x25a4(%rsp)
jmp 0x383a8
movl 0x2950(%rsp), %edx
leaq 0x2628(%rsp), %rdi
leaq 0x25a8(%rsp), %rsi
callq 0xc2890
jmp 0x384c2
jmp 0x384c4
jmp 0x384c6
leaq 0x2960(%rsp), %rdi
leaq 0x156df1(%rip), %rsi    # 0x18f2c6
callq 0x22ec0
cmpl $0x0, %eax
jne 0x38802
leaq 0x15a0(%rsp), %rdi
movq 0x4560(%rsp), %rdx
leaq 0x3b80(%rsp), %rcx
leaq 0x2d60(%rsp), %r8
leaq 0x156dc3(%rip), %rsi    # 0x18f2cd
movb $0x0, %al
callq 0x22160
cmpl $0x0, 0x2958(%rsp)
jne 0x387fd
leaq 0x15a0(%rsp), %rdi
callq 0xf28e0
movl %eax, 0x244(%rsp)
jmp 0x38535
movl 0x244(%rsp), %eax
cmpl $0x0, %eax
je 0x387fd
movl $0x160, %edi            # imm = 0x160
callq 0x229e0
movq %rax, 0x238(%rsp)
jmp 0x38559
movq 0x238(%rsp), %rdi
callq 0x2c260
jmp 0x38568
movq 0x238(%rsp), %rax
movq %rax, 0x598(%rsp)
movq 0x598(%rsp), %rdi
movq %rdi, 0x228(%rsp)
callq 0x2b510
movq %rax, 0x230(%rsp)
jmp 0x38597
movq 0x230(%rsp), %rsi
movq 0x228(%rsp), %rdi
xorl %eax, %eax
movl %eax, %ecx
leaq 0x15a0(%rsp), %rdx
callq 0x3a9e0
movl %eax, 0x224(%rsp)
jmp 0x385c1
movl 0x224(%rsp), %eax
cmpl $0x0, %eax
jne 0x38613
movl $0x0, 0x4584(%rsp)
movl $0x1, 0x4534(%rsp)
jmp 0x39bb0
movq 0x238(%rsp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x4548(%rsp)
movl %eax, 0x4544(%rsp)
movl $0x160, %esi            # imm = 0x160
callq 0x22a00
jmp 0x39be6
leaq 0x156cc6(%rip), %rsi    # 0x18f2e0
xorl %eax, %eax
leaq 0x5a0(%rsp), %rdi
movq %rdi, 0x218(%rsp)
leaq 0x3160(%rsp), %rdx
callq 0x22160
movq 0x218(%rsp), %rsi
movq 0x598(%rsp), %rdi
callq 0x2d200
jmp 0x38650
movq 0x598(%rsp), %rdi
callq 0x2b510
movq %rax, 0x210(%rsp)
jmp 0x38667
movq 0x210(%rsp), %rdi
leaq 0x5a0(%rsp), %rsi
callq 0x57850
jmp 0x3867e
movq 0x598(%rsp), %rdi
leaq 0x15a0(%rsp), %rsi
callq 0x48830
jmp 0x38695
movq 0x460(%rsp), %rdi
movq 0x598(%rsp), %rsi
callq 0x2ced0
jmp 0x386ac
movl $0x1b0, %edi            # imm = 0x1B0
callq 0x229e0
movq %rax, 0x208(%rsp)
jmp 0x386c0
movq 0x460(%rsp), %rsi
movq 0x208(%rsp), %rdi
callq 0x555e0
jmp 0x386d7
movq 0x208(%rsp), %rax
movq %rax, 0x590(%rsp)
movq 0x590(%rsp), %rax
movq %rax, 0x1f8(%rsp)
movl $0x30, %edi
callq 0x229e0
movq %rax, 0x200(%rsp)
jmp 0x3870b
movq 0x200(%rsp), %rdi
movq 0x460(%rsp), %rdx
movq 0x598(%rsp), %rsi
addq $0x28, %rdx
callq 0x59c30
jmp 0x3872e
movq 0x200(%rsp), %rsi
movq 0x1f8(%rsp), %rdi
callq 0x57550
jmp 0x38745
movq 0x590(%rsp), %rdi
leaq 0x5a0(%rsp), %rsi
callq 0x57850
jmp 0x3875c
movq 0x590(%rsp), %rdi
leaq 0x2628(%rsp), %rsi
callq 0x577d0
jmp 0x38773
movq 0x3588(%rsp), %rdi
movq 0x590(%rsp), %rsi
callq 0x57450
jmp 0x3878a
movq 0x590(%rsp), %rdx
movq 0x3568(%rsp), %rax
movl 0x3560(%rsp), %ecx
movq %rdx, (%rax,%rcx,8)
jmp 0x387fd
movq 0x208(%rsp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x4548(%rsp)
movl %eax, 0x4544(%rsp)
movl $0x1b0, %esi            # imm = 0x1B0
callq 0x22a00
jmp 0x39be6
movq 0x200(%rsp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x4548(%rsp)
movl %eax, 0x4544(%rsp)
movl $0x30, %esi
callq 0x22a00
jmp 0x39be6
jmp 0x39ba5
leaq 0x2960(%rsp), %rdi
leaq 0x156ad9(%rip), %rsi    # 0x18f2ea
callq 0x22ec0
cmpl $0x0, %eax
jne 0x39206
movl $0x1b0, %edi            # imm = 0x1B0
callq 0x229e0
movq %rax, 0x1f0(%rsp)
jmp 0x38833
movq 0x460(%rsp), %rsi
movq 0x1f0(%rsp), %rdi
callq 0x555e0
jmp 0x3884a
movq 0x1f0(%rsp), %rax
movq %rax, 0x588(%rsp)
leaq 0x156a8e(%rip), %rsi    # 0x18f2ef
xorl %eax, %eax
leaq 0x5a0(%rsp), %rdi
movq %rdi, 0x1e8(%rsp)
leaq 0x3160(%rsp), %rdx
callq 0x22160
movq 0x1e8(%rsp), %rsi
movq 0x588(%rsp), %rdi
callq 0x57850
jmp 0x38897
movq 0x3588(%rsp), %rdi
movq 0x588(%rsp), %rsi
callq 0x57450
jmp 0x388ae
movq 0x588(%rsp), %rdx
movq 0x3568(%rsp), %rax
movl 0x3560(%rsp), %ecx
movq %rdx, (%rax,%rcx,8)
leaq 0x578(%rsp), %rdi
callq 0x48160
jmp 0x388d8
leaq 0x15a0(%rsp), %rdi
movq 0x4560(%rsp), %rdx
leaq 0x3b80(%rsp), %rcx
leaq 0x2d60(%rsp), %r8
leaq 0x1569ce(%rip), %rsi    # 0x18f2cd
movb $0x0, %al
callq 0x22160
cmpl $0x0, 0x2958(%rsp)
jne 0x38c04
leaq 0x15a0(%rsp), %rdi
callq 0xf28e0
movl %eax, 0x1e4(%rsp)
jmp 0x3892a
movl 0x1e4(%rsp), %eax
cmpl $0x0, %eax
je 0x38c04
movl $0x160, %edi            # imm = 0x160
callq 0x229e0
movq %rax, 0x1d8(%rsp)
jmp 0x3894e
movq 0x1d8(%rsp), %rdi
callq 0x2c260
jmp 0x3895d
movq 0x1d8(%rsp), %rax
movq %rax, 0x570(%rsp)
movq 0x570(%rsp), %rdi
movq %rdi, 0x1c8(%rsp)
callq 0x2b510
movq %rax, 0x1d0(%rsp)
jmp 0x3898c
movq 0x1d0(%rsp), %rsi
movq 0x1c8(%rsp), %rdi
xorl %eax, %eax
movl %eax, %ecx
leaq 0x15a0(%rsp), %rdx
callq 0x3a9e0
movl %eax, 0x1c4(%rsp)
jmp 0x389b6
movl 0x1c4(%rsp), %eax
cmpl $0x0, %eax
jne 0x38a50
movl $0x0, 0x4584(%rsp)
movl $0x1, 0x4534(%rsp)
jmp 0x391d1
movq 0x1f0(%rsp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x4548(%rsp)
movl %eax, 0x4544(%rsp)
movl $0x1b0, %esi            # imm = 0x1B0
callq 0x22a00
jmp 0x39be6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x4548(%rsp)
movl %eax, 0x4544(%rsp)
jmp 0x391f4
movq 0x1d8(%rsp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x4548(%rsp)
movl %eax, 0x4544(%rsp)
movl $0x160, %esi            # imm = 0x160
callq 0x22a00
jmp 0x391f4
leaq 0x1568a0(%rip), %rsi    # 0x18f2f7
xorl %eax, %eax
leaq 0x5a0(%rsp), %rdi
movq %rdi, 0x1b8(%rsp)
leaq 0x3160(%rsp), %rdx
callq 0x22160
movq 0x1b8(%rsp), %rsi
movq 0x570(%rsp), %rdi
callq 0x2d200
jmp 0x38a8d
movq 0x570(%rsp), %rdi
callq 0x2b510
movq %rax, 0x1b0(%rsp)
jmp 0x38aa4
movq 0x1b0(%rsp), %rdi
leaq 0x5a0(%rsp), %rsi
callq 0x57850
jmp 0x38abb
movq 0x570(%rsp), %rdi
leaq 0x15a0(%rsp), %rsi
callq 0x48830
jmp 0x38ad2
movq 0x460(%rsp), %rdi
movq 0x570(%rsp), %rsi
callq 0x2ced0
jmp 0x38ae9
movl $0x1b0, %edi            # imm = 0x1B0
callq 0x229e0
movq %rax, 0x1a8(%rsp)
jmp 0x38afd
movq 0x460(%rsp), %rsi
movq 0x1a8(%rsp), %rdi
callq 0x555e0
jmp 0x38b14
movq 0x1a8(%rsp), %rax
movq %rax, 0x568(%rsp)
movq 0x568(%rsp), %rax
movq %rax, 0x198(%rsp)
movl $0x30, %edi
callq 0x229e0
movq %rax, 0x1a0(%rsp)
jmp 0x38b48
movq 0x1a0(%rsp), %rdi
movq 0x570(%rsp), %rsi
leaq 0x578(%rsp), %rdx
callq 0x59c30
jmp 0x38b67
movq 0x1a0(%rsp), %rsi
movq 0x198(%rsp), %rdi
callq 0x57550
jmp 0x38b7e
movq 0x568(%rsp), %rdi
leaq 0x5a0(%rsp), %rsi
callq 0x57850
jmp 0x38b95
movq 0x588(%rsp), %rdi
movq 0x568(%rsp), %rsi
callq 0x57450
jmp 0x38bac
jmp 0x38c04
movq 0x1a8(%rsp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x4548(%rsp)
movl %eax, 0x4544(%rsp)
movl $0x1b0, %esi            # imm = 0x1B0
callq 0x22a00
jmp 0x391f4
movq 0x1a0(%rsp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x4548(%rsp)
movl %eax, 0x4544(%rsp)
movl $0x30, %esi
callq 0x22a00
jmp 0x391f4
leaq 0x15a0(%rsp), %rdi
movq 0x4560(%rsp), %rdx
leaq 0x3b80(%rsp), %rcx
leaq 0x2d60(%rsp), %r8
leaq 0x1566d5(%rip), %rsi    # 0x18f300
movb $0x0, %al
callq 0x22160
cmpl $0x0, 0x295c(%rsp)
jne 0x38ee8
leaq 0x15a0(%rsp), %rdi
callq 0xf28e0
movl %eax, 0x194(%rsp)
jmp 0x38c56
movl 0x194(%rsp), %eax
cmpl $0x0, %eax
je 0x38ee8
movl $0x160, %edi            # imm = 0x160
callq 0x229e0
movq %rax, 0x188(%rsp)
jmp 0x38c7a
movq 0x188(%rsp), %rdi
callq 0x2c260
jmp 0x38c89
movq 0x188(%rsp), %rax
movq %rax, 0x560(%rsp)
movq 0x560(%rsp), %rdi
movq %rdi, 0x178(%rsp)
callq 0x2b510
movq %rax, 0x180(%rsp)
jmp 0x38cb8
movq 0x180(%rsp), %rsi
movq 0x178(%rsp), %rdi
xorl %eax, %eax
movl %eax, %ecx
leaq 0x15a0(%rsp), %rdx
callq 0x3a9e0
movl %eax, 0x174(%rsp)
jmp 0x38ce2
movl 0x174(%rsp), %eax
cmpl $0x0, %eax
jne 0x38d34
movl $0x0, 0x4584(%rsp)
movl $0x1, 0x4534(%rsp)
jmp 0x391d1
movq 0x188(%rsp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x4548(%rsp)
movl %eax, 0x4544(%rsp)
movl $0x160, %esi            # imm = 0x160
callq 0x22a00
jmp 0x391f4
leaq 0x1565d8(%rip), %rsi    # 0x18f313
xorl %eax, %eax
leaq 0x5a0(%rsp), %rdi
movq %rdi, 0x168(%rsp)
leaq 0x3160(%rsp), %rdx
callq 0x22160
movq 0x168(%rsp), %rsi
movq 0x560(%rsp), %rdi
callq 0x2d200
jmp 0x38d71
movq 0x560(%rsp), %rdi
callq 0x2b510
movq %rax, 0x160(%rsp)
jmp 0x38d88
movq 0x160(%rsp), %rdi
leaq 0x5a0(%rsp), %rsi
callq 0x57850
jmp 0x38d9f
movq 0x560(%rsp), %rdi
leaq 0x15a0(%rsp), %rsi
callq 0x48830
jmp 0x38db6
movq 0x460(%rsp), %rdi
movq 0x560(%rsp), %rsi
callq 0x2ced0
jmp 0x38dcd
movl $0x1b0, %edi            # imm = 0x1B0
callq 0x229e0
movq %rax, 0x158(%rsp)
jmp 0x38de1
movq 0x460(%rsp), %rsi
movq 0x158(%rsp), %rdi
callq 0x555e0
jmp 0x38df8
movq 0x158(%rsp), %rax
movq %rax, 0x558(%rsp)
movq 0x558(%rsp), %rax
movq %rax, 0x148(%rsp)
movl $0x30, %edi
callq 0x229e0
movq %rax, 0x150(%rsp)
jmp 0x38e2c
movq 0x150(%rsp), %rdi
movq 0x560(%rsp), %rsi
leaq 0x578(%rsp), %rdx
callq 0x59c30
jmp 0x38e4b
movq 0x150(%rsp), %rsi
movq 0x148(%rsp), %rdi
callq 0x57550
jmp 0x38e62
movq 0x558(%rsp), %rdi
leaq 0x5a0(%rsp), %rsi
callq 0x57850
jmp 0x38e79
movq 0x588(%rsp), %rdi
movq 0x558(%rsp), %rsi
callq 0x57450
jmp 0x38e90
jmp 0x38ee8
movq 0x158(%rsp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x4548(%rsp)
movl %eax, 0x4544(%rsp)
movl $0x1b0, %esi            # imm = 0x1B0
callq 0x22a00
jmp 0x391f4
movq 0x150(%rsp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x4548(%rsp)
movl %eax, 0x4544(%rsp)
movl $0x30, %esi
callq 0x22a00
jmp 0x391f4
leaq 0x15a0(%rsp), %rdi
movq 0x4560(%rsp), %rdx
leaq 0x3b80(%rsp), %rcx
leaq 0x2d60(%rsp), %r8
leaq 0x15640f(%rip), %rsi    # 0x18f31e
movb $0x0, %al
callq 0x22160
cmpl $0x0, 0x2954(%rsp)
jne 0x391c6
leaq 0x15a0(%rsp), %rdi
callq 0xf28e0
movl %eax, 0x144(%rsp)
jmp 0x38f3a
movl 0x144(%rsp), %eax
cmpl $0x0, %eax
je 0x391c6
movl $0x160, %edi            # imm = 0x160
callq 0x229e0
movq %rax, 0x138(%rsp)
jmp 0x38f5e
movq 0x138(%rsp), %rdi
callq 0x2c260
jmp 0x38f6d
movq 0x138(%rsp), %rax
movq %rax, 0x550(%rsp)
movq 0x550(%rsp), %rdi
movq %rdi, 0x128(%rsp)
callq 0x2b510
movq %rax, 0x130(%rsp)
jmp 0x38f9c
movq 0x130(%rsp), %rsi
movq 0x128(%rsp), %rdi
xorl %eax, %eax
movl %eax, %ecx
leaq 0x15a0(%rsp), %rdx
callq 0x3a9e0
movl %eax, 0x124(%rsp)
jmp 0x38fc6
movl 0x124(%rsp), %eax
cmpl $0x0, %eax
jne 0x39018
movl $0x0, 0x4584(%rsp)
movl $0x1, 0x4534(%rsp)
jmp 0x391d1
movq 0x138(%rsp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x4548(%rsp)
movl %eax, 0x4544(%rsp)
movl $0x160, %esi            # imm = 0x160
callq 0x22a00
jmp 0x391f4
leaq 0x156312(%rip), %rsi    # 0x18f331
xorl %eax, %eax
leaq 0x5a0(%rsp), %rdi
movq %rdi, 0x118(%rsp)
leaq 0x3160(%rsp), %rdx
callq 0x22160
movq 0x118(%rsp), %rsi
movq 0x550(%rsp), %rdi
callq 0x2d200
jmp 0x39055
movq 0x550(%rsp), %rdi
callq 0x2b510
movq %rax, 0x110(%rsp)
jmp 0x3906c
movq 0x110(%rsp), %rdi
leaq 0x5a0(%rsp), %rsi
callq 0x57850
jmp 0x39083
movq 0x550(%rsp), %rdi
leaq 0x15a0(%rsp), %rsi
callq 0x48830
jmp 0x3909a
movq 0x460(%rsp), %rdi
movq 0x550(%rsp), %rsi
callq 0x2ced0
jmp 0x390b1
movl $0x1b0, %edi            # imm = 0x1B0
callq 0x229e0
movq %rax, 0x108(%rsp)
jmp 0x390c5
movq 0x460(%rsp), %rsi
movq 0x108(%rsp), %rdi
callq 0x555e0
jmp 0x390dc
movq 0x108(%rsp), %rax
movq %rax, 0x548(%rsp)
movq 0x548(%rsp), %rax
movq %rax, 0xf8(%rsp)
movl $0x30, %edi
callq 0x229e0
movq %rax, 0x100(%rsp)
jmp 0x39110
movq 0x100(%rsp), %rdi
movq 0x550(%rsp), %rsi
leaq 0x578(%rsp), %rdx
callq 0x59c30
jmp 0x3912f
movq 0x100(%rsp), %rsi
movq 0xf8(%rsp), %rdi
callq 0x57550
jmp 0x39146
movq 0x548(%rsp), %rdi
leaq 0x5a0(%rsp), %rsi
callq 0x57850
jmp 0x3915d
movq 0x588(%rsp), %rdi
movq 0x548(%rsp), %rsi
callq 0x57450
jmp 0x39174
jmp 0x391c6
movq 0x108(%rsp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x4548(%rsp)
movl %eax, 0x4544(%rsp)
movl $0x1b0, %esi            # imm = 0x1B0
callq 0x22a00
jmp 0x391f4
movq 0x100(%rsp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x4548(%rsp)
movl %eax, 0x4544(%rsp)
movl $0x30, %esi
callq 0x22a00
jmp 0x391f4
movl $0x0, 0x4534(%rsp)
leaq 0x578(%rsp), %rdi
callq 0x481f0
movl 0x4534(%rsp), %eax
testl %eax, %eax
jne 0x39bb0
jmp 0x391ef
jmp 0x39ba3
leaq 0x578(%rsp), %rdi
callq 0x481f0
jmp 0x39be6
leaq 0x2960(%rsp), %rdi
leaq 0x156124(%rip), %rsi    # 0x18f339
callq 0x22ec0
cmpl $0x0, %eax
jne 0x397ff
movq $0x0, 0x540(%rsp)
cmpl $0x0, 0x294c(%rsp)
je 0x39269
leaq 0x15a0(%rsp), %rdi
movq 0x4560(%rsp), %rdx
leaq 0x2d60(%rsp), %rcx
leaq 0x2d60(%rsp), %r8
leaq 0x1560e0(%rip), %rsi    # 0x18f340
movb $0x0, %al
callq 0x22160
jmp 0x39297
leaq 0x15a0(%rsp), %rdi
movq 0x4560(%rsp), %rdx
leaq 0x2d60(%rsp), %rcx
leaq 0x2d60(%rsp), %r8
leaq 0x1560c6(%rip), %rsi    # 0x18f356
movb $0x0, %al
callq 0x22160
leaq 0x51f(%rsp), %rdi
movq %rdi, 0xf0(%rsp)
callq 0x232a0
movq 0xf0(%rsp), %rdx
leaq 0x520(%rsp), %rdi
leaq 0x15a0(%rsp), %rsi
callq 0x485b0
jmp 0x392cb
leaq 0x4550(%rsp), %rdi
leaq 0x520(%rsp), %rsi
leaq 0x540(%rsp), %rdx
callq 0x49620
movl %eax, 0xec(%rsp)
jmp 0x392f1
movl 0xec(%rsp), %eax
cmpl $0x0, %eax
setne %al
xorb $-0x1, %al
movb %al, 0xeb(%rsp)
leaq 0x520(%rsp), %rdi
callq 0x22610
leaq 0x51f(%rsp), %rdi
callq 0x22ab0
movb 0xeb(%rsp), %al
testb $0x1, %al
jne 0x39331
jmp 0x3959d
movl $0x160, %edi            # imm = 0x160
callq 0x229e0
movq %rax, 0xe0(%rsp)
jmp 0x39345
movq 0xe0(%rsp), %rdi
callq 0x2c260
jmp 0x39354
movq 0xe0(%rsp), %rax
movq %rax, 0x540(%rsp)
movq 0x540(%rsp), %rdi
movq %rdi, 0xd0(%rsp)
callq 0x2b510
movq %rax, 0xd8(%rsp)
jmp 0x39383
movq 0xd8(%rsp), %rsi
movq 0xd0(%rsp), %rdi
xorl %eax, %eax
movl %eax, %ecx
leaq 0x15a0(%rsp), %rdx
callq 0x3a9e0
movl %eax, 0xcc(%rsp)
jmp 0x393ad
movl 0xcc(%rsp), %eax
cmpl $0x0, %eax
jne 0x3944c
movl $0x0, 0x4584(%rsp)
movl $0x1, 0x4534(%rsp)
jmp 0x39bb0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x4548(%rsp)
movl %eax, 0x4544(%rsp)
jmp 0x3940f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x4548(%rsp)
movl %eax, 0x4544(%rsp)
leaq 0x520(%rsp), %rdi
callq 0x22610
leaq 0x51f(%rsp), %rdi
callq 0x22ab0
jmp 0x39be6
movq 0xe0(%rsp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x4548(%rsp)
movl %eax, 0x4544(%rsp)
movl $0x160, %esi            # imm = 0x160
callq 0x22a00
jmp 0x39be6
leaq 0x155f17(%rip), %rsi    # 0x18f36a
xorl %eax, %eax
leaq 0x5a0(%rsp), %rdi
leaq 0x2d60(%rsp), %rdx
movq %rdx, 0xc0(%rsp)
callq 0x22160
movq 0xc0(%rsp), %rsi
movq 0x540(%rsp), %rdi
callq 0x2d200
jmp 0x39489
movq 0x540(%rsp), %rdi
callq 0x2b510
movq %rax, 0xb8(%rsp)
jmp 0x394a0
movq 0xb8(%rsp), %rdi
leaq 0x5a0(%rsp), %rsi
callq 0x57850
jmp 0x394b7
movq 0x540(%rsp), %rdi
leaq 0x15a0(%rsp), %rsi
callq 0x48830
jmp 0x394ce
movq 0x460(%rsp), %rdi
movq 0x540(%rsp), %rsi
callq 0x2ced0
jmp 0x394e5
leaq 0x4f7(%rsp), %rdi
movq %rdi, 0xb0(%rsp)
callq 0x232a0
movq 0xb0(%rsp), %rdx
leaq 0x4f8(%rsp), %rdi
leaq 0x15a0(%rsp), %rsi
callq 0x485b0
jmp 0x39519
movq 0x540(%rsp), %rdx
leaq 0x4550(%rsp), %rdi
leaq 0x4f8(%rsp), %rsi
callq 0x496b0
jmp 0x39538
leaq 0x4f8(%rsp), %rdi
callq 0x22610
leaq 0x4f7(%rsp), %rdi
callq 0x22ab0
jmp 0x3959d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x4548(%rsp)
movl %eax, 0x4544(%rsp)
jmp 0x3958b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x4548(%rsp)
movl %eax, 0x4544(%rsp)
leaq 0x4f8(%rsp), %rdi
callq 0x22610
leaq 0x4f7(%rsp), %rdi
callq 0x22ab0
jmp 0x39be6
leaq 0x4e0(%rsp), %rdi
callq 0x48160
jmp 0x395ac
movq 0x3578(%rsp), %rsi
leaq 0x154d26(%rip), %rdx    # 0x18e2e1
leaq 0x3570(%rsp), %rdi
movl $0x6, %ecx
callq 0x3e6f0
movl %eax, 0xac(%rsp)
jmp 0x395d6
movl 0xac(%rsp), %eax
cmpl $0x0, %eax
je 0x3965e
movq 0x460(%rsp), %rdi
movq 0x540(%rsp), %rdx
addq $0x28, %rdx
movq 0x3570(%rsp), %r8
leaq 0x4558(%rsp), %rsi
leaq 0x4e0(%rsp), %rcx
callq 0x3e8e0
movl %eax, 0xa8(%rsp)
jmp 0x3961c
movl 0xa8(%rsp), %eax
cmpl $0x0, %eax
jne 0x3965c
movl $0x0, 0x4584(%rsp)
movl $0x1, 0x4534(%rsp)
jmp 0x3977c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x4548(%rsp)
movl %eax, 0x4544(%rsp)
jmp 0x397ed
jmp 0x3965e
movl $0x1b0, %edi            # imm = 0x1B0
callq 0x229e0
movq %rax, 0xa0(%rsp)
jmp 0x39672
movq 0x460(%rsp), %rsi
movq 0xa0(%rsp), %rdi
callq 0x555e0
jmp 0x39689
movq 0xa0(%rsp), %rax
movq %rax, 0x4d8(%rsp)
leaq 0x155cd3(%rip), %rsi    # 0x18f373
xorl %eax, %eax
leaq 0x5a0(%rsp), %rdi
leaq 0x3160(%rsp), %rdx
callq 0x22160
movq 0x4d8(%rsp), %rax
movq %rax, 0x90(%rsp)
movl $0x30, %edi
callq 0x229e0
movq %rax, 0x98(%rsp)
jmp 0x396db
movq 0x98(%rsp), %rdi
movq 0x540(%rsp), %rsi
leaq 0x4e0(%rsp), %rdx
callq 0x59c30
jmp 0x396fa
movq 0x98(%rsp), %rsi
movq 0x90(%rsp), %rdi
callq 0x57550
jmp 0x39711
movq 0x4d8(%rsp), %rdi
leaq 0x5a0(%rsp), %rsi
callq 0x57850
jmp 0x39728
movq 0x4d8(%rsp), %rdi
leaq 0x2628(%rsp), %rsi
callq 0x577d0
jmp 0x3973f
movq 0x3588(%rsp), %rdi
movq 0x4d8(%rsp), %rsi
callq 0x57450
jmp 0x39756
movq 0x4d8(%rsp), %rdx
movq 0x3568(%rsp), %rax
movl 0x3560(%rsp), %ecx
movq %rdx, (%rax,%rcx,8)
movl $0x0, 0x4534(%rsp)
leaq 0x4e0(%rsp), %rdi
callq 0x481f0
movl 0x4534(%rsp), %eax
testl %eax, %eax
jne 0x39bb0
jmp 0x3979a
jmp 0x39ba1
movq 0xa0(%rsp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x4548(%rsp)
movl %eax, 0x4544(%rsp)
movl $0x1b0, %esi            # imm = 0x1B0
callq 0x22a00
jmp 0x397ed
movq 0x98(%rsp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x4548(%rsp)
movl %eax, 0x4544(%rsp)
movl $0x30, %esi
callq 0x22a00
leaq 0x4e0(%rsp), %rdi
callq 0x481f0
jmp 0x39be6
leaq 0x2960(%rsp), %rdi
leaq 0x157252(%rip), %rsi    # 0x190a60
callq 0x22ec0
cmpl $0x0, %eax
jne 0x39b9f
movaps 0x15641d(%rip), %xmm0   # 0x18fc40
movaps %xmm0, 0x4c0(%rsp)
movabsq $0x3ff0000000000000, %rax # imm = 0x3FF0000000000000
movq %rax, 0x4d0(%rsp)
movq 0x3578(%rsp), %rsi
leaq 0x155b31(%rip), %rdx    # 0x18f37d
leaq 0x43b8(%rsp), %rdi
movl $0x6, %ecx
callq 0x3e6f0
movl %eax, 0x8c(%rsp)
jmp 0x39867
movl 0x8c(%rsp), %eax
cmpl $0x0, %eax
je 0x3999a
movq 0x43b8(%rsp), %rdi
callq 0xff4b0
movl %eax, 0x88(%rsp)
jmp 0x3988d
movl 0x88(%rsp), %eax
cmpl $0x3, %eax
jb 0x39998
movq 0x43b8(%rsp), %rsi
leaq 0x43b0(%rsp), %rdi
xorl %edx, %edx
movl $0xffffffff, %ecx       # imm = 0xFFFFFFFF
callq 0x3e810
movl %eax, 0x84(%rsp)
jmp 0x398c2
movl 0x84(%rsp), %eax
cmpl $0x0, %eax
je 0x398f2
movq 0x43b0(%rsp), %rdi
callq 0x1031d0
movsd %xmm0, 0x78(%rsp)
jmp 0x398e3
movsd 0x78(%rsp), %xmm0
movsd %xmm0, 0x4c0(%rsp)
movq 0x43b8(%rsp), %rsi
leaq 0x43b0(%rsp), %rdi
movl $0x1, %edx
movl $0xffffffff, %ecx       # imm = 0xFFFFFFFF
callq 0x3e810
movl %eax, 0x74(%rsp)
jmp 0x39917
movl 0x74(%rsp), %eax
cmpl $0x0, %eax
je 0x39944
movq 0x43b0(%rsp), %rdi
callq 0x1031d0
movsd %xmm0, 0x68(%rsp)
jmp 0x39935
movsd 0x68(%rsp), %xmm0
movsd %xmm0, 0x4c8(%rsp)
movq 0x43b8(%rsp), %rsi
leaq 0x43b0(%rsp), %rdi
movl $0x2, %edx
movl $0xffffffff, %ecx       # imm = 0xFFFFFFFF
callq 0x3e810
movl %eax, 0x64(%rsp)
jmp 0x39969
movl 0x64(%rsp), %eax
cmpl $0x0, %eax
je 0x39996
movq 0x43b0(%rsp), %rdi
callq 0x1031d0
movsd %xmm0, 0x58(%rsp)
jmp 0x39987
movsd 0x58(%rsp), %xmm0
movsd %xmm0, 0x4d0(%rsp)
jmp 0x39998
jmp 0x3999a
leaq 0x4b0(%rsp), %rdi
callq 0x48160
jmp 0x399a9
movq 0x3578(%rsp), %rsi
leaq 0x154929(%rip), %rdx    # 0x18e2e1
leaq 0x3570(%rsp), %rdi
movl $0x6, %ecx
callq 0x3e6f0
movl %eax, 0x54(%rsp)
jmp 0x399d0
movl 0x54(%rsp), %eax
cmpl $0x0, %eax
je 0x39a46
movq 0x460(%rsp), %rdi
movq 0x3570(%rsp), %r8
leaq 0x4558(%rsp), %rsi
leaq 0x4b0(%rsp), %rcx
movq %rcx, %rdx
callq 0x3e8e0
movl %eax, 0x50(%rsp)
jmp 0x39a07
movl 0x50(%rsp), %eax
cmpl $0x0, %eax
jne 0x39a44
movl $0x0, 0x4584(%rsp)
movl $0x1, 0x4534(%rsp)
jmp 0x39b74
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x4548(%rsp)
movl %eax, 0x4544(%rsp)
jmp 0x39b90
jmp 0x39a46
movl $0x1b0, %edi            # imm = 0x1B0
callq 0x229e0
movq %rax, 0x48(%rsp)
jmp 0x39a57
movq 0x460(%rsp), %rsi
movq 0x48(%rsp), %rdi
callq 0x555e0
jmp 0x39a6b
movq 0x48(%rsp), %rax
movq %rax, 0x4a8(%rsp)
leaq 0x155909(%rip), %rsi    # 0x18f388
xorl %eax, %eax
leaq 0x5a0(%rsp), %rdi
movq %rdi, 0x40(%rsp)
leaq 0x3160(%rsp), %rdx
callq 0x22160
movq 0x40(%rsp), %rsi
movq 0x4a8(%rsp), %rdi
callq 0x57850
jmp 0x39aaf
movq 0x4a8(%rsp), %rdi
leaq 0x2628(%rsp), %rsi
callq 0x577d0
jmp 0x39ac6
movq 0x460(%rsp), %rdi
movq 0x4a8(%rsp), %rsi
leaq 0x4c0(%rsp), %rdx
leaq 0x4b0(%rsp), %rcx
callq 0x3f510
movl %eax, 0x3c(%rsp)
jmp 0x39af1
movl 0x3c(%rsp), %eax
cmpl $0x0, %eax
jne 0x39b37
movl $0x0, 0x4584(%rsp)
movl $0x1, 0x4534(%rsp)
jmp 0x39b74
movq 0x48(%rsp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x4548(%rsp)
movl %eax, 0x4544(%rsp)
movl $0x1b0, %esi            # imm = 0x1B0
callq 0x22a00
jmp 0x39b90
movq 0x3588(%rsp), %rdi
movq 0x4a8(%rsp), %rsi
callq 0x57450
jmp 0x39b4e
movq 0x4a8(%rsp), %rdx
movq 0x3568(%rsp), %rax
movl 0x3560(%rsp), %ecx
movq %rdx, (%rax,%rcx,8)
movl $0x0, 0x4534(%rsp)
leaq 0x4b0(%rsp), %rdi
callq 0x481f0
movl 0x4534(%rsp), %eax
testl %eax, %eax
jne 0x39bb0
jmp 0x39b8e
jmp 0x39b9f
leaq 0x4b0(%rsp), %rdi
callq 0x481f0
jmp 0x39be6
jmp 0x39ba1
jmp 0x39ba3
jmp 0x39ba5
movl $0x0, 0x4534(%rsp)
leaq 0x2628(%rsp), %rdi
callq 0xc1b00
movl 0x4534(%rsp), %eax
testl %eax, %eax
jne 0x39f14
jmp 0x39bce
jmp 0x39bd0
movl 0x3560(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x3560(%rsp)
jmp 0x379d9
leaq 0x2628(%rsp), %rdi
callq 0xc1b00
jmp 0x39f23
movl $0x0, 0x4a4(%rsp)
movl 0x4a4(%rsp), %eax
movl %eax, 0x34(%rsp)
movq 0x3580(%rsp), %rdi
callq 0xff4b0
movl %eax, 0x38(%rsp)
jmp 0x39c21
movl 0x34(%rsp), %eax
movl 0x38(%rsp), %ecx
cmpl %ecx, %eax
jae 0x39ec9
movq 0x3580(%rsp), %rsi
movl 0x4a4(%rsp), %edx
leaq 0x3578(%rsp), %rdi
movl $0xffffffff, %ecx       # imm = 0xFFFFFFFF
callq 0x3e810
movl %eax, 0x30(%rsp)
jmp 0x39c58
movl 0x30(%rsp), %eax
cmpl $0x0, %eax
jne 0x39c66
jmp 0x39eb3
movq 0x3578(%rsp), %rdi
callq 0x101940
movl %eax, 0x2c(%rsp)
jmp 0x39c79
movl 0x2c(%rsp), %eax
cmpl $0x7, %eax
je 0x39c87
jmp 0x39eb3
movq 0x3578(%rsp), %rsi
leaq 0x16126b(%rip), %rdx    # 0x19af01
leaq 0x43a8(%rsp), %rdi
xorl %ecx, %ecx
callq 0x3e6f0
movl %eax, 0x28(%rsp)
jmp 0x39cab
movl 0x28(%rsp), %eax
cmpl $0x0, %eax
jne 0x39cb9
jmp 0x39eb3
movq 0x43a8(%rsp), %rsi
leaq 0x480(%rsp), %rdi
callq 0xf7000
jmp 0x39cd0
leaq 0x480(%rsp), %rdi
callq 0x223a0
movq %rax, %rdi
leaq 0x155603(%rip), %rsi    # 0x18f2ea
callq 0x22ec0
movl %eax, 0x24(%rsp)
leaq 0x480(%rsp), %rdi
callq 0x22610
movl 0x24(%rsp), %eax
cmpl $0x0, %eax
je 0x39d0b
jmp 0x39eb3
movq 0x3568(%rsp), %rax
movl 0x4a4(%rsp), %ecx
movq (%rax,%rcx,8), %rax
movq %rax, 0x478(%rsp)
cmpq $0x0, 0x478(%rsp)
jne 0x39d36
jmp 0x39eb3
movq 0x3578(%rsp), %rsi
leaq 0x15564a(%rip), %rdx    # 0x18f38f
leaq 0x43b8(%rsp), %rdi
movl $0x6, %ecx
callq 0x3e6f0
movl %eax, 0x20(%rsp)
jmp 0x39d5d
movl 0x20(%rsp), %eax
cmpl $0x0, %eax
je 0x39eb1
movl $0x0, 0x474(%rsp)
movl 0x474(%rsp), %eax
movl %eax, 0x18(%rsp)
movq 0x43b8(%rsp), %rdi
callq 0xff4b0
movl %eax, 0x1c(%rsp)
jmp 0x39d93
movl 0x18(%rsp), %eax
movl 0x1c(%rsp), %ecx
cmpl %ecx, %eax
jae 0x39eaf
movq 0x43b8(%rsp), %rsi
movl 0x474(%rsp), %edx
leaq 0x43b0(%rsp), %rdi
movl $0xffffffff, %ecx       # imm = 0xFFFFFFFF
callq 0x3e810
jmp 0x39dc6
movq 0x43b0(%rsp), %rdi
callq 0x103a00
movb %al, 0x17(%rsp)
jmp 0x39dd9
movb 0x17(%rsp), %al
testb $0x1, %al
jne 0x39de6
jmp 0x39e97
movq 0x43b0(%rsp), %rdi
callq 0xfe210
movl %eax, 0x10(%rsp)
jmp 0x39df9
movl 0x10(%rsp), %eax
movl %eax, 0x470(%rsp)
cmpl $0x0, 0x470(%rsp)
jl 0x39e95
movl 0x470(%rsp), %eax
movl %eax, 0x8(%rsp)
movq 0x3580(%rsp), %rdi
callq 0xff4b0
movl %eax, 0xc(%rsp)
jmp 0x39e30
movl 0x8(%rsp), %eax
movl 0xc(%rsp), %ecx
cmpl %ecx, %eax
jae 0x39e95
movq 0x3568(%rsp), %rax
movslq 0x470(%rsp), %rcx
movq (%rax,%rcx,8), %rax
movq %rax, 0x468(%rsp)
cmpq $0x0, 0x468(%rsp)
je 0x39e93
movq 0x3588(%rsp), %rdi
movq 0x468(%rsp), %rsi
callq 0x55d10
jmp 0x39e7a
movq 0x478(%rsp), %rdi
movq 0x468(%rsp), %rsi
callq 0x57450
jmp 0x39e91
jmp 0x39e93
jmp 0x39e95
jmp 0x39e97
jmp 0x39e99
movl 0x474(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x474(%rsp)
jmp 0x39d75
jmp 0x39eb1
jmp 0x39eb3
movl 0x4a4(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x4a4(%rsp)
jmp 0x39c03
movq 0x3568(%rsp), %rax
movq %rax, (%rsp)
cmpq $0x0, %rax
je 0x39ee4
movq (%rsp), %rdi
callq 0x22da0
jmp 0x39ee6
jmp 0x39ee8
movl 0x39fc(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x39fc(%rsp)
jmp 0x375cf
movl $0x1, 0x4584(%rsp)
movl $0x1, 0x4534(%rsp)
leaq 0x3a10(%rsp), %rdi
callq 0xc1b00
jmp 0x39f32
leaq 0x3a10(%rsp), %rdi
callq 0xc1b00
jmp 0x39f4e
leaq 0x43c0(%rsp), %rdi
callq 0x496f0
leaq 0x44d0(%rsp), %rdi
callq 0x1017f0
jmp 0x39f6a
leaq 0x43c0(%rsp), %rdi
callq 0x496f0
leaq 0x44d0(%rsp), %rdi
callq 0x1017f0
jmp 0x39f79
leaq 0x4510(%rsp), %rdi
callq 0x22610
jmp 0x39f88
leaq 0x4510(%rsp), %rdi
callq 0x22610
jmp 0x39fb1
leaq 0x4550(%rsp), %rdi
callq 0x49740
leaq 0x4558(%rsp), %rdi
callq 0x49750
movl 0x4584(%rsp), %eax
addq $0x4588, %rsp           # imm = 0x4588
retq
leaq 0x4550(%rsp), %rdi
callq 0x49740
leaq 0x4558(%rsp), %rdi
callq 0x49750
movq 0x4548(%rsp), %rdi
callq 0x23290
nopl (%rax,%rax)