// File: Neurochrom[P]hours_calc/hours_calc.cpp
// Function: main
int main(int argc, char* argv[])
{
   try {
      string filename = "hours.txt";
      if (argc > 1)
      {
         if (argv[1][0] == '-' || argv[1][0] == '/')
         {
            cout << "Usage:\n"
                    " hours_calc [input_filename [main_txt_stats_output_filename [csv_stats_output_filename [cutoff_year]]]]\n"
                    " By default:\n"
                    "  input_filename = hours.txt\n"
                    "  main_txt_stats_output_filename = hour_stats.txt\n"
                    "  csv_stats_output_filename = hour_stats.csv\n"
                    "  cutoff_year = 2010" << endl;
            return 0;
         }
         filename = argv[1];
      }
      ifstream ifs(filename.c_str());
      if (!ifs.is_open())
         ERROR("Unable to open file \"" << filename << "\"");

      skipUTF8BOM(&ifs);

      string ofilename = "hour_stats.txt";   // Also a default.
      if (argc > 2)
         ofilename = argv[2];
      ofstream ofs(ofilename.c_str());
      if (!ofs.is_open())
         ERROR("Unable to open file \"" << ofilename << "\"");

      string ofilename2 = "hour_stats.csv";   // Also a default.
      if (argc > 3)
         ofilename2 = argv[3];
      ofstream ofs2;
      if(ofilename2 != ofilename)
      {
         ofs2.open(ofilename2.c_str());
         if (!ofs2.is_open())
            ERROR("Unable to open file \"" << ofilename2 << "\"");
      }

      unsigned cutoffYear = 2010;
      if (argc > 4)
         cutoffYear = stoi(string(argv[4]));

      std::ostream& oss = ofs;
      std::ostream& oss2 = ofilename2 != ofilename ? ofs2 : ofs;

      oss << "Hours calculator" << endl;
      oss << "   Calculating only from year " << cutoffYear << endl;

      MinutesMap minutesMap;

      typedef map<pair<string, string>, unsigned> DMap;  // <person, day> - minutes
      DMap dayMinutes;

      unsigned numLines = 0;
      bool expectsNewDate = true;
      bool expectsHourLines = false;
      YearMon curYearMon;
      unsigned curDay = 0;
      string curDayStr;
      while (!ifs.eof() && ifs.peek() != std::ifstream::traits_type::eof())
      {
         string line = loadStrLine(ifs);
         ++numLines;

         if (isEmptyOrWhitespace(line))
         {
            // Empty lines separate dates.
            expectsNewDate = true;
            expectsHourLines = false;
            continue;
         }

         assert(!(expectsNewDate & expectsHourLines));

         if (expectsNewDate)
         {
            vector<string> ss = splitIntoTokens(line, ".:- \t");

            if (ss.size() >= 3)
            {
               unsigned year,mon,day;
               try
               {
                  year = stoi(ss[0]);
                  mon = stoi(ss[1]);
                  day = stoi(ss[2]);
               }
               catch (exception)
               {
                  continue;
               }

               expectsNewDate = false;
               expectsHourLines = true;

               curYearMon = YearMon(year, mon);
               curDay = day;
               curDayStr = line;
               while (isspace(curDayStr.back()))
                  curDayStr.pop_back();

               if (year < 2010)
                  break;
            }

            continue;
         }

         if (expectsHourLines)
         {
            vector<string> ss = splitIntoTokens(line, " \t", "[/");

            // something without a name and 2 hour:minute entries can only be a comment
            if (ss.size() < 3)
               continue;

            string person = ss[0];

            // Something starting with punctuation or a number etc. is not a name - assume a comment line
            if ( person[0] > ' ' && person[0] < 'A')
               continue;

            // Remove the recommended but optional : behind the name
            if (person[person.size() - 1] == ':')
               person = person.substr(0, person.size() - 1);
            person = upperCase(person);

            vector<HourMin> hms;
            size_t i = 1;
            while (i < ss.size())
            {
               if(!isdigit(ss[i][0]))
               {
                  if (ss[i][0] == '[' ||
                      ss[i][0] == '#' ||
                      (ss[i][0]=='/' && ss[i].size()>=2 && ss[i][1]=='/')  // //
                     )
                  {
                     // A comment or category from here on.
                     break;
                  }
                  else
                  {
                     ++i;
                     continue;
                  }
               }
               HourMin hm;
               if (!parseHourMin(&hm, ss[i]))
                  break;
               hms.push_back(hm);
               ++i;
            }

            // Skip the lines with 0 valid time entries.
            if (!hms.size())
               continue;

            unsigned totalMinutesForLine = 0;

            for (size_t j = 0; j + 1 < hms.size(); j += 2)
            {
               HourMin hm1 = hms[j];
               HourMin hm2 = hms[j + 1];
               unsigned minutes = hm2 - hm1;
               totalMinutesForLine += minutes;
            }
            if ((hms.size() % 2) != 0)
            {
               oss << "WARNING: Uneven number of time entries for " << curYearMon << "-" << curDay << " in line " << numLines << ": \"" << line << "\"" << endl;
               continue;
            }

            string typeOfWork;
            if (i != ss.size())
            {
               if ((ss[i][0] == '[') && (ss[i][ ss[i].size() - 1 ] == ']'))
                  typeOfWork = upperCase( ss[i].substr(1, ss[i].size() - 2) );
            }
            vector<string> typesOfWork = splitIntoTokens(typeOfWork, "\\/,");
            if (typesOfWork.empty())
               typesOfWork.push_back("UNASSIGNED");
            typeOfWork.clear();

#ifdef DO_NOT_SPLIT_TYPES_OF_WORK
            sort(typesOfWork.begin(), typesOfWork.end());
            for (size_t k = 0; k < typesOfWork.size(); ++k)
            {
               if (!typeOfWork.empty())
                  typeOfWork.push_back('/');
               typeOfWork += typesOfWork[k];
            }
            minutesMap.update(person, curYearMon, typeOfWork, totalMinutesForLine);
#else
            double iTypesOfWorkSize;
            iTypesOfWorkSize = 1.0 / typesOfWork.size();
            for (auto& tow : typesOfWork)
                minutesMap.update(person, curYearMon, tow, unsigned(totalMinutesForLine * iTypesOfWorkSize));
#endif
            if (dayMinutes.find(make_pair(person, curDayStr)) == dayMinutes.end())
               dayMinutes[make_pair(person, curDayStr)] = totalMinutesForLine;
            else
               dayMinutes[make_pair(person, curDayStr)] += totalMinutesForLine;
         }
      }

      oss << "number of lines: " << numLines << endl;

      // All people.
      for (auto pi = minutesMap.s.cbegin(); pi != minutesMap.s.cend(); ++pi)
      {
         oss << endl;
         oss << pi->first << ":" << endl;

         // All months per person.
         for (auto pmi = pi->second.s.cbegin(); pmi != pi->second.s.cend(); ++pmi)
         {
            // All work types per month (per person).
            oss << "   " << pmi->first << ":" << endl;
            for (auto mi = pmi->second.s.begin(); mi != pmi->second.s.end(); ++mi)
               oss << "      " << expandStr(mi->first + ':', 12) << " " << hoursMinsStr(mi->second, 12) << "   ( " << mi->second << " m )" << endl;
            unsigned total = pmi->second.calcTotal();
            oss << "      " << expandStr("*:", 12) << " " << hoursMinsStr(total, 12) << "   ( " << total << " m )" << endl;
         }

         {
            // All work types for all months.
            oss << "   all time sum:" << endl;
            for (auto mi = pi->second.workTypesForAll.s.cbegin(); mi != pi->second.workTypesForAll.s.cend(); ++mi)
               oss << "      " << expandStr(mi->first + ':', 12) << " " << hoursMinsStr(mi->second, 12) << "   ( " << mi->second << " m )" << endl;
            unsigned total = pi->second.workTypesForAll.calcTotal();
            oss << "      " << expandStr("*:", 12) << " " << hoursMinsStr(total, 12) << "   ( " << total << " m )" << endl;
         }
      }

      /// For all people combined.
      {
         oss << endl;
         oss << "The whole crew combined" << ":" << endl;

         // All months per person.
         for (auto pmi = minutesMap.statsForWorkTypesForAll.s.begin(); pmi != minutesMap.statsForWorkTypesForAll.s.end(); ++pmi)
         {
            // All work types per month (per person).
            oss << "   " << pmi->first << ":" << endl;
            for (auto mi = pmi->second.s.begin(); mi != pmi->second.s.end(); ++mi)
               oss << "      " << expandStr(mi->first + ':', 12) << " " << hoursMinsStr(mi->second, 12) << "   ( " << mi->second << " m )" << endl;
            unsigned total = pmi->second.calcTotal();
            oss << "      " << expandStr("*:", 12) << " " << hoursMinsStr(total, 12) << "   ( " << total << " m )" << endl;
         }

         {
            // All work types for all months.
            oss << "   all time sum:" << endl;
            for (auto mi = minutesMap.statsForWorkTypesForAll.workTypesForAll.s.begin();
                 mi != minutesMap.statsForWorkTypesForAll.workTypesForAll.s.end(); ++mi)
               oss << "      " << expandStr(mi->first + ':', 12) << " " << hoursMinsStr(mi->second, 12) << "   ( " << mi->second << " m )" << endl;
            unsigned total = minutesMap.statsForWorkTypesForAll.workTypesForAll.calcTotal();
            oss << "      " << expandStr("*:", 12) << " " << hoursMinsStr(total, 12) << "   ( " << total << " m )" << endl;
         }
      }

      oss << endl;

      oss2 << "Person\tDay\tHours\n";
      for (auto it = dayMinutes.begin(); it!=dayMinutes.end(); ++it)
      {
         oss2 <<it->first.first<<"\t" << it->first.second << "\t" << fixed << setprecision(9)<< it->second / 60.0 << endl;
      }

      return 0;
   }
   catch (std::exception& e)
   {
      ERROR(e.what());
   }
   catch (...)
   {
      ERROR("Unknown exception");
   }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x1370, %rsp           # imm = 0x1370
movl $0x0, -0x4(%rbp)
movl %edi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
leaq -0x31(%rbp), %rdi
movq %rdi, -0xe68(%rbp)
callq 0x3490
movq -0xe68(%rbp), %rdx
leaq 0xaeff(%rip), %rsi      # 0xf0e6
leaq -0x30(%rbp), %rdi
callq 0x33b0
jmp 0x41f2
leaq -0x31(%rbp), %rdi
callq 0x32c0
cmpl $0x1, -0x8(%rbp)
jle 0x42a9
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
movsbl (%rax), %eax
cmpl $0x2d, %eax
je 0x4225
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
movsbl (%rax), %eax
cmpl $0x2f, %eax
jne 0x4294
movq 0x11d9c(%rip), %rdi     # 0x15fc8
leaq 0xaebd(%rip), %rsi      # 0xf0f0
callq 0x3250
movq %rax, -0xe70(%rbp)
jmp 0x4241
movq -0xe70(%rbp), %rdi
movq 0x11d61(%rip), %rsi     # 0x15fb0
callq 0x32a0
jmp 0x4256
movl $0x0, -0x4(%rbp)
movl $0x1, -0x48(%rbp)
jmp 0x6eaf
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x31(%rbp), %rdi
callq 0x32c0
jmp 0x6ec6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x6ebd
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rsi
leaq -0x30(%rbp), %rdi
callq 0x33a0
jmp 0x42a7
jmp 0x42a9
leaq -0x30(%rbp), %rdi
callq 0x3110
movq %rax, %rsi
leaq -0x250(%rbp), %rdi
movl $0x8, %edx
callq 0x34b0
jmp 0x42c8
leaq -0x250(%rbp), %rdi
callq 0x3440
movb %al, -0xe71(%rbp)
jmp 0x42dc
movb -0xe71(%rbp), %al
testb $0x1, %al
jne 0x4392
jmp 0x42ec
movq 0x11cfd(%rip), %rdi     # 0x15ff0
leaq 0xaf03(%rip), %rsi      # 0xf1fd
callq 0x3250
movq %rax, -0xe80(%rbp)
jmp 0x4308
movq -0xe80(%rbp), %rdi
leaq 0xaeef(%rip), %rsi      # 0xf205
callq 0x3250
movq %rax, -0xe88(%rbp)
jmp 0x4324
movq -0xe88(%rbp), %rdi
leaq -0x30(%rbp), %rsi
callq 0x3220
movq %rax, -0xe90(%rbp)
jmp 0x433d
movq -0xe90(%rbp), %rdi
leaq 0xaf9d(%rip), %rsi      # 0xf2e8
callq 0x3250
movq %rax, -0xe98(%rbp)
jmp 0x4359
movq -0xe98(%rbp), %rdi
movq 0x11c49(%rip), %rsi     # 0x15fb0
callq 0x32a0
jmp 0x436e
movl $0xffffffff, -0x4(%rbp) # imm = 0xFFFFFFFF
movl $0x1, -0x48(%rbp)
jmp 0x6e93
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x6ea1
leaq -0x250(%rbp), %rdi
callq 0x4130
jmp 0x43a0
leaq -0x271(%rbp), %rdi
movq %rdi, -0xea0(%rbp)
callq 0x3490
movq -0xea0(%rbp), %rdx
leaq 0xae5a(%rip), %rsi      # 0xf21b
leaq -0x270(%rbp), %rdi
callq 0x33b0
jmp 0x43cf
leaq -0x271(%rbp), %rdi
callq 0x32c0
cmpl $0x2, -0x8(%rbp)
jle 0x4427
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rsi
leaq -0x270(%rbp), %rdi
callq 0x33a0
jmp 0x43f7
jmp 0x4427
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x271(%rbp), %rdi
callq 0x32c0
jmp 0x6ea1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x6e85
leaq -0x270(%rbp), %rdi
callq 0x3110
movq %rax, %rsi
leaq -0x478(%rbp), %rdi
movl $0x10, %edx
callq 0x32d0
jmp 0x4449
leaq -0x478(%rbp), %rdi
callq 0x31f0
movb %al, -0xea1(%rbp)
jmp 0x445d
movb -0xea1(%rbp), %al
testb $0x1, %al
jne 0x4516
jmp 0x446d
movq 0x11b7c(%rip), %rdi     # 0x15ff0
leaq 0xad82(%rip), %rsi      # 0xf1fd
callq 0x3250
movq %rax, -0xeb0(%rbp)
jmp 0x4489
movq -0xeb0(%rbp), %rdi
leaq 0xad6e(%rip), %rsi      # 0xf205
callq 0x3250
movq %rax, -0xeb8(%rbp)
jmp 0x44a5
movq -0xeb8(%rbp), %rdi
leaq -0x270(%rbp), %rsi
callq 0x3220
movq %rax, -0xec0(%rbp)
jmp 0x44c1
movq -0xec0(%rbp), %rdi
leaq 0xae19(%rip), %rsi      # 0xf2e8
callq 0x3250
movq %rax, -0xec8(%rbp)
jmp 0x44dd
movq -0xec8(%rbp), %rdi
movq 0x11ac5(%rip), %rsi     # 0x15fb0
callq 0x32a0
jmp 0x44f2
movl $0xffffffff, -0x4(%rbp) # imm = 0xFFFFFFFF
movl $0x1, -0x48(%rbp)
jmp 0x6e5f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x6e79
leaq -0x499(%rbp), %rdi
movq %rdi, -0xed0(%rbp)
callq 0x3490
movq -0xed0(%rbp), %rdx
leaq 0xacf3(%rip), %rsi      # 0xf22a
leaq -0x498(%rbp), %rdi
callq 0x33b0
jmp 0x4545
leaq -0x499(%rbp), %rdi
callq 0x32c0
cmpl $0x3, -0x8(%rbp)
jle 0x459d
movq -0x10(%rbp), %rax
movq 0x18(%rax), %rsi
leaq -0x498(%rbp), %rdi
callq 0x33a0
jmp 0x456d
jmp 0x459d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x499(%rbp), %rdi
callq 0x32c0
jmp 0x6e79
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x6e51
leaq -0x6a0(%rbp), %rdi
callq 0x3470
jmp 0x45ab
leaq -0x498(%rbp), %rdi
leaq -0x270(%rbp), %rsi
callq 0x72f0
testb $0x1, %al
jne 0x45c7
jmp 0x46b8
leaq -0x498(%rbp), %rdi
callq 0x3110
movq %rax, %rsi
leaq -0x6a0(%rbp), %rdi
movl $0x10, %edx
callq 0x3060
jmp 0x45e9
leaq -0x6a0(%rbp), %rdi
callq 0x31f0
movb %al, -0xed1(%rbp)
jmp 0x45fd
movb -0xed1(%rbp), %al
testb $0x1, %al
jne 0x46b6
jmp 0x460d
movq 0x119dc(%rip), %rdi     # 0x15ff0
leaq 0xabe2(%rip), %rsi      # 0xf1fd
callq 0x3250
movq %rax, -0xee0(%rbp)
jmp 0x4629
movq -0xee0(%rbp), %rdi
leaq 0xabce(%rip), %rsi      # 0xf205
callq 0x3250
movq %rax, -0xee8(%rbp)
jmp 0x4645
movq -0xee8(%rbp), %rdi
leaq -0x498(%rbp), %rsi
callq 0x3220
movq %rax, -0xef0(%rbp)
jmp 0x4661
movq -0xef0(%rbp), %rdi
leaq 0xac79(%rip), %rsi      # 0xf2e8
callq 0x3250
movq %rax, -0xef8(%rbp)
jmp 0x467d
movq -0xef8(%rbp), %rdi
movq 0x11925(%rip), %rsi     # 0x15fb0
callq 0x32a0
jmp 0x4692
movl $0xffffffff, -0x4(%rbp) # imm = 0xFFFFFFFF
movl $0x1, -0x48(%rbp)
jmp 0x6e2b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x6e45
jmp 0x46b8
movl $0x7da, -0x6a4(%rbp)    # imm = 0x7DA
cmpl $0x4, -0x8(%rbp)
jle 0x4784
movq -0x10(%rbp), %rax
movq 0x20(%rax), %rax
movq %rax, -0xf08(%rbp)
leaq -0x6c9(%rbp), %rdi
movq %rdi, -0xf00(%rbp)
callq 0x3490
movq -0xf08(%rbp), %rsi
movq -0xf00(%rbp), %rdx
leaq -0x6c8(%rbp), %rdi
callq 0x33b0
jmp 0x470a
xorl %eax, %eax
movl %eax, %esi
leaq -0x6c8(%rbp), %rdi
movl $0xa, %edx
callq 0x7230
movl %eax, -0xf0c(%rbp)
jmp 0x4727
movl -0xf0c(%rbp), %eax
movl %eax, -0x6a4(%rbp)
leaq -0x6c8(%rbp), %rdi
callq 0x3190
leaq -0x6c9(%rbp), %rdi
callq 0x32c0
jmp 0x4784
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x4773
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x6c8(%rbp), %rdi
callq 0x3190
leaq -0x6c9(%rbp), %rdi
callq 0x32c0
jmp 0x6e45
leaq -0x478(%rbp), %rax
movq %rax, -0x6d8(%rbp)
leaq -0x498(%rbp), %rdi
leaq -0x270(%rbp), %rsi
callq 0x72f0
testb $0x1, %al
jne 0x47ab
jmp 0x47bb
leaq -0x6a0(%rbp), %rax
movq %rax, -0xf18(%rbp)
jmp 0x47cb
leaq -0x478(%rbp), %rax
movq %rax, -0xf18(%rbp)
jmp 0x47cb
movq -0xf18(%rbp), %rax
movq %rax, -0x6e0(%rbp)
movq -0x6d8(%rbp), %rdi
leaq 0xaa52(%rip), %rsi      # 0xf239
callq 0x3250
movq %rax, -0xf20(%rbp)
jmp 0x47f5
movq -0xf20(%rbp), %rdi
movq 0x117ad(%rip), %rsi     # 0x15fb0
callq 0x32a0
jmp 0x480a
movq -0x6d8(%rbp), %rdi
leaq 0xaa32(%rip), %rsi      # 0xf24a
callq 0x3250
movq %rax, -0xf28(%rbp)
jmp 0x4826
movq -0xf28(%rbp), %rdi
movl -0x6a4(%rbp), %esi
callq 0x3380
movq %rax, -0xf30(%rbp)
jmp 0x4841
movq -0xf30(%rbp), %rdi
movq 0x11761(%rip), %rsi     # 0x15fb0
callq 0x32a0
jmp 0x4856
leaq -0x770(%rbp), %rdi
callq 0x7320
leaq -0x7a0(%rbp), %rdi
callq 0x7350
movl $0x0, -0x7a4(%rbp)
movb $0x1, -0x7a5(%rbp)
movb $0x0, -0x7a6(%rbp)
leaq -0x7b0(%rbp), %rdi
callq 0x7370
jmp 0x4894
movl $0x0, -0x7b4(%rbp)
leaq -0x7d8(%rbp), %rdi
callq 0x33c0
movq -0x250(%rbp), %rax
movq -0x18(%rax), %rax
leaq -0x250(%rbp,%rax), %rdi
callq 0x34c0
movb %al, -0xf31(%rbp)
jmp 0x48ca
movb -0xf31(%rbp), %cl
xorl %eax, %eax
testb $0x1, %cl
movb %al, -0xf32(%rbp)
jne 0x490b
jmp 0x48df
leaq -0x250(%rbp), %rdi
callq 0x30f0
movl %eax, -0xf38(%rbp)
jmp 0x48f3
callq 0x7380
movl %eax, %ecx
movl -0xf38(%rbp), %eax
cmpl %ecx, %eax
setne %al
movb %al, -0xf32(%rbp)
movb -0xf32(%rbp), %al
testb $0x1, %al
jne 0x491a
jmp 0x582d
leaq -0x7f8(%rbp), %rdi
leaq -0x250(%rbp), %rsi
callq 0x3750
jmp 0x492f
movl -0x7a4(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x7a4(%rbp)
leaq -0x7f8(%rbp), %rdi
callq 0x37d0
testb $0x1, %al
jne 0x4950
jmp 0x498c
movb $0x1, -0x7a5(%rbp)
movb $0x0, -0x7a6(%rbp)
movl $0x2, -0x48(%rbp)
jmp 0x57e9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x6e11
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x6e05
movb -0x7a5(%rbp), %al
andb $0x1, %al
movzbl %al, %eax
movb -0x7a6(%rbp), %cl
andb $0x1, %cl
movzbl %cl, %ecx
andl %ecx, %eax
cmpl $0x0, %eax
setne %al
xorb $-0x1, %al
testb $0x1, %al
jne 0x49b3
jmp 0x49b5
jmp 0x49d4
leaq 0xa8ad(%rip), %rdi      # 0xf269
leaq 0xa6a1(%rip), %rsi      # 0xf064
movl $0x13c, %edx            # imm = 0x13C
leaq 0xa8bf(%rip), %rcx      # 0xf28e
callq 0x31a0
testb $0x1, -0x7a5(%rbp)
je 0x4c19
leaq 0xa8bd(%rip), %rdx      # 0xf2a5
leaq 0xa8bb(%rip), %rcx      # 0xf2aa
leaq -0x810(%rbp), %rdi
leaq -0x7f8(%rbp), %rsi
callq 0x3cd0
jmp 0x4a04
leaq -0x810(%rbp), %rdi
callq 0x7210
cmpq $0x3, %rax
jb 0x4bf0
xorl %eax, %eax
movl %eax, %esi
movq %rsi, -0xf48(%rbp)
leaq -0x810(%rbp), %rdi
callq 0x7270
movq -0xf48(%rbp), %rsi
movq %rax, %rdi
movl $0xa, %edx
callq 0x7230
movl %eax, -0xf3c(%rbp)
jmp 0x4a4d
movl -0xf3c(%rbp), %eax
movl %eax, -0x814(%rbp)
leaq -0x810(%rbp), %rdi
movl $0x1, %esi
callq 0x7270
movq %rax, %rdi
xorl %eax, %eax
movl %eax, %esi
movl $0xa, %edx
callq 0x7230
movl %eax, -0xf4c(%rbp)
jmp 0x4a83
movl -0xf4c(%rbp), %eax
movl %eax, -0x818(%rbp)
leaq -0x810(%rbp), %rdi
movl $0x2, %esi
callq 0x7270
movq %rax, %rdi
xorl %eax, %eax
movl %eax, %esi
movl $0xa, %edx
callq 0x7230
movl %eax, -0xf50(%rbp)
jmp 0x4ab9
movl -0xf50(%rbp), %eax
movl %eax, -0x81c(%rbp)
jmp 0x4b59
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x581c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
movl -0x44(%rbp), %eax
movl $0x2, %ecx
cmpl %ecx, %eax
jne 0x4c08
movq -0x40(%rbp), %rdi
movq %rdi, -0xf60(%rbp)
callq 0x3330
movq %rax, %rsi
leaq -0x828(%rbp), %rdi
movq %rdi, -0xf58(%rbp)
callq 0x7390
movq -0xf60(%rbp), %rdi
callq 0x3100
movq -0xf58(%rbp), %rdi
movl $0x2, -0x48(%rbp)
callq 0x34e0
callq 0x3450
jmp 0x4b43
jmp 0x4bf7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x4c08
movb $0x0, -0x7a5(%rbp)
movb $0x1, -0x7a6(%rbp)
movl -0x814(%rbp), %esi
movl -0x818(%rbp), %edx
leaq -0x830(%rbp), %rdi
callq 0x73b0
jmp 0x4b81
movq -0x830(%rbp), %rax
movq %rax, -0x7b0(%rbp)
movl -0x81c(%rbp), %eax
movl %eax, -0x7b4(%rbp)
leaq -0x7d8(%rbp), %rdi
leaq -0x7f8(%rbp), %rsi
callq 0x3040
jmp 0x4bb0
jmp 0x4bb2
leaq -0x7d8(%rbp), %rdi
callq 0x31e0
movsbl (%rax), %edi
callq 0x3070
cmpl $0x0, %eax
je 0x4bd9
leaq -0x7d8(%rbp), %rdi
callq 0x3310
jmp 0x4bb2
cmpl $0x7da, -0x814(%rbp)    # imm = 0x7DA
jae 0x4bee
movl $0x3, -0x48(%rbp)
jmp 0x4bf7
jmp 0x4bf0
movl $0x2, -0x48(%rbp)
leaq -0x810(%rbp), %rdi
callq 0x71b0
jmp 0x57e9
leaq -0x810(%rbp), %rdi
callq 0x71b0
jmp 0x581c
testb $0x1, -0x7a6(%rbp)
je 0x57e2
leaq 0xa67b(%rip), %rdx      # 0xf2a8
leaq 0xa677(%rip), %rcx      # 0xf2ab
leaq -0x848(%rbp), %rdi
leaq -0x7f8(%rbp), %rsi
callq 0x3cd0
jmp 0x4c49
leaq -0x848(%rbp), %rdi
callq 0x7210
cmpq $0x3, %rax
jae 0x4c67
movl $0x2, -0x48(%rbp)
jmp 0x578d
xorl %eax, %eax
movl %eax, %esi
leaq -0x848(%rbp), %rdi
callq 0x7270
movq %rax, %rsi
leaq -0x868(%rbp), %rdi
callq 0x3120
jmp 0x4c88
xorl %eax, %eax
movl %eax, %esi
leaq -0x868(%rbp), %rdi
callq 0x34f0
movq %rax, -0xf68(%rbp)
jmp 0x4ca1
movq -0xf68(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x20, %eax
jle 0x4d06
xorl %eax, %eax
movl %eax, %esi
leaq -0x868(%rbp), %rdi
callq 0x34f0
movq %rax, -0xf70(%rbp)
jmp 0x4cc9
movq -0xf70(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x41, %eax
jge 0x4d06
movl $0x2, -0x48(%rbp)
jmp 0x5781
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x57d4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x57c8
leaq -0x868(%rbp), %rdi
movq %rdi, -0xf80(%rbp)
callq 0x31d0
movq -0xf80(%rbp), %rdi
movq %rax, %rsi
decq %rsi
callq 0x34f0
movq %rax, -0xf78(%rbp)
jmp 0x4d34
movq -0xf78(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x3a, %eax
jne 0x4d94
leaq -0x868(%rbp), %rdi
movq %rdi, -0xf88(%rbp)
callq 0x31d0
movq -0xf88(%rbp), %rsi
movq %rax, %rcx
decq %rcx
xorl %eax, %eax
movl %eax, %edx
leaq -0x888(%rbp), %rdi
callq 0x3280
jmp 0x4d75
leaq -0x868(%rbp), %rdi
leaq -0x888(%rbp), %rsi
callq 0x3320
leaq -0x888(%rbp), %rdi
callq 0x3190
leaq -0x8a8(%rbp), %rdi
leaq -0x868(%rbp), %rsi
callq 0x3960
jmp 0x4da9
leaq -0x868(%rbp), %rdi
leaq -0x8a8(%rbp), %rsi
callq 0x3320
leaq -0x8a8(%rbp), %rdi
callq 0x3190
leaq -0x8c0(%rbp), %rdi
callq 0x73d0
movq $0x1, -0x8c8(%rbp)
movq -0x8c8(%rbp), %rax
movq %rax, -0xf90(%rbp)
leaq -0x848(%rbp), %rdi
callq 0x7210
movq %rax, %rcx
movq -0xf90(%rbp), %rax
cmpq %rcx, %rax
jae 0x4ff1
movq -0x8c8(%rbp), %rsi
leaq -0x848(%rbp), %rdi
callq 0x7270
movq %rax, %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x34f0
movq %rax, -0xf98(%rbp)
jmp 0x4e34
movq -0xf98(%rbp), %rax
movsbl (%rax), %edi
callq 0x3230
cmpl $0x0, %eax
jne 0x4f7f
movq -0x8c8(%rbp), %rsi
leaq -0x848(%rbp), %rdi
callq 0x7270
movq %rax, %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x34f0
movq %rax, -0xfa0(%rbp)
jmp 0x4e74
movq -0xfa0(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x5b, %eax
je 0x4f52
movq -0x8c8(%rbp), %rsi
leaq -0x848(%rbp), %rdi
callq 0x7270
movq %rax, %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x34f0
movq %rax, -0xfa8(%rbp)
jmp 0x4eaf
movq -0xfa8(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x23, %eax
je 0x4f52
movq -0x8c8(%rbp), %rsi
leaq -0x848(%rbp), %rdi
callq 0x7270
movq %rax, %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x34f0
movq %rax, -0xfb0(%rbp)
jmp 0x4eea
movq -0xfb0(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x2f, %eax
jne 0x4f68
movq -0x8c8(%rbp), %rsi
leaq -0x848(%rbp), %rdi
callq 0x7270
movq %rax, %rdi
callq 0x31d0
cmpq $0x2, %rax
jb 0x4f68
movq -0x8c8(%rbp), %rsi
leaq -0x848(%rbp), %rdi
callq 0x7270
movq %rax, %rdi
movl $0x1, %esi
callq 0x34f0
movq %rax, -0xfb8(%rbp)
jmp 0x4f43
movq -0xfb8(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x2f, %eax
jne 0x4f68
jmp 0x4ff1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x57bc
movq -0x8c8(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x8c8(%rbp)
jmp 0x4ddf
leaq -0x8d0(%rbp), %rdi
callq 0x73f0
jmp 0x4f8d
movq -0x8c8(%rbp), %rsi
leaq -0x848(%rbp), %rdi
callq 0x7270
movq %rax, %rsi
leaq -0x8d0(%rbp), %rdi
callq 0x3fc0
movb %al, -0xfb9(%rbp)
jmp 0x4fb7
movb -0xfb9(%rbp), %al
testb $0x1, %al
jne 0x4fc5
jmp 0x4fc3
jmp 0x4ff1
leaq -0x8c0(%rbp), %rdi
leaq -0x8d0(%rbp), %rsi
callq 0x7400
jmp 0x4fda
movq -0x8c8(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x8c8(%rbp)
jmp 0x4ddf
leaq -0x8c0(%rbp), %rdi
callq 0x7470
cmpq $0x0, %rax
jne 0x500f
movl $0x2, -0x48(%rbp)
jmp 0x5775
movl $0x0, -0x8d4(%rbp)
movq $0x0, -0x8e0(%rbp)
movq -0x8e0(%rbp), %rax
addq $0x1, %rax
movq %rax, -0xfc8(%rbp)
leaq -0x8c0(%rbp), %rdi
callq 0x7470
movq %rax, %rcx
movq -0xfc8(%rbp), %rax
cmpq %rcx, %rax
jae 0x50e9
movq -0x8e0(%rbp), %rsi
leaq -0x8c0(%rbp), %rdi
movq %rdi, -0xfd8(%rbp)
callq 0x7490
movq -0xfd8(%rbp), %rdi
movq (%rax), %rax
movq %rax, -0x8e8(%rbp)
movq -0x8e0(%rbp), %rsi
incq %rsi
callq 0x7490
movq (%rax), %rax
movq %rax, -0x8f0(%rbp)
leaq -0x8f0(%rbp), %rdi
leaq -0x8e8(%rbp), %rsi
callq 0x3640
movl %eax, -0xfcc(%rbp)
jmp 0x50b4
movl -0xfcc(%rbp), %eax
movl %eax, -0x8f4(%rbp)
movl -0x8f4(%rbp), %eax
addl -0x8d4(%rbp), %eax
movl %eax, -0x8d4(%rbp)
movq -0x8e0(%rbp), %rax
addq $0x2, %rax
movq %rax, -0x8e0(%rbp)
jmp 0x5024
leaq -0x8c0(%rbp), %rdi
callq 0x7470
andq $0x1, %rax
cmpq $0x0, %rax
je 0x521e
movq -0x6d8(%rbp), %rdi
leaq 0xa19d(%rip), %rsi      # 0xf2ae
callq 0x3250
movq %rax, -0xfe0(%rbp)
jmp 0x511f
movq -0xfe0(%rbp), %rdi
leaq -0x7b0(%rbp), %rsi
callq 0x36c0
movq %rax, -0xfe8(%rbp)
jmp 0x513b
movq -0xfe8(%rbp), %rdi
leaq 0xa191(%rip), %rsi      # 0xf2da
callq 0x3250
movq %rax, -0xff0(%rbp)
jmp 0x5157
movq -0xff0(%rbp), %rdi
movl -0x7b4(%rbp), %esi
callq 0x3380
movq %rax, -0xff8(%rbp)
jmp 0x5172
movq -0xff8(%rbp), %rdi
leaq 0xa15c(%rip), %rsi      # 0xf2dc
callq 0x3250
movq %rax, -0x1000(%rbp)
jmp 0x518e
movq -0x1000(%rbp), %rdi
movl -0x7a4(%rbp), %esi
callq 0x3380
movq %rax, -0x1008(%rbp)
jmp 0x51a9
movq -0x1008(%rbp), %rdi
leaq 0xa12f(%rip), %rsi      # 0xf2e6
callq 0x3250
movq %rax, -0x1010(%rbp)
jmp 0x51c5
movq -0x1010(%rbp), %rdi
leaq -0x7f8(%rbp), %rsi
callq 0x3220
movq %rax, -0x1018(%rbp)
jmp 0x51e1
movq -0x1018(%rbp), %rdi
leaq 0xa0f9(%rip), %rsi      # 0xf2e8
callq 0x3250
movq %rax, -0x1020(%rbp)
jmp 0x51fd
movq -0x1020(%rbp), %rdi
movq 0x10da5(%rip), %rsi     # 0x15fb0
callq 0x32a0
jmp 0x5212
movl $0x2, -0x48(%rbp)
jmp 0x5775
leaq -0x918(%rbp), %rdi
callq 0x33c0
movq -0x8c8(%rbp), %rax
movq %rax, -0x1028(%rbp)
leaq -0x848(%rbp), %rdi
callq 0x7210
movq %rax, %rcx
movq -0x1028(%rbp), %rax
cmpq %rcx, %rax
je 0x53cb
movq -0x8c8(%rbp), %rsi
leaq -0x848(%rbp), %rdi
callq 0x7270
movq %rax, %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x34f0
movq %rax, -0x1030(%rbp)
jmp 0x527f
movq -0x1030(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x5b, %eax
jne 0x53c9
movq -0x8c8(%rbp), %rsi
leaq -0x848(%rbp), %rdi
movq %rdi, -0x1048(%rbp)
callq 0x7270
movq -0x1048(%rbp), %rdi
movq %rax, -0x1040(%rbp)
movq -0x8c8(%rbp), %rsi
callq 0x7270
movq %rax, %rdi
callq 0x31d0
movq -0x1040(%rbp), %rdi
movq %rax, %rsi
decq %rsi
callq 0x34f0
movq %rax, -0x1038(%rbp)
jmp 0x52e9
movq -0x1038(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x5d, %eax
jne 0x53c9
movq -0x8c8(%rbp), %rsi
leaq -0x848(%rbp), %rdi
movq %rdi, -0x1058(%rbp)
callq 0x7270
movq -0x1058(%rbp), %rdi
movq %rax, -0x1050(%rbp)
movq -0x8c8(%rbp), %rsi
callq 0x7270
movq %rax, %rdi
callq 0x31d0
movq -0x1050(%rbp), %rsi
movq %rax, %rcx
addq $-0x2, %rcx
leaq -0x958(%rbp), %rdi
movl $0x1, %edx
callq 0x3280
jmp 0x5359
leaq -0x938(%rbp), %rdi
leaq -0x958(%rbp), %rsi
callq 0x3960
jmp 0x536e
leaq -0x918(%rbp), %rdi
leaq -0x938(%rbp), %rsi
callq 0x3320
leaq -0x938(%rbp), %rdi
callq 0x3190
leaq -0x958(%rbp), %rdi
callq 0x3190
jmp 0x53c9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x57b0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x958(%rbp), %rdi
callq 0x3190
jmp 0x57b0
jmp 0x53cb
leaq 0x9f18(%rip), %rdx      # 0xf2ea
leaq 0x9ed1(%rip), %rcx      # 0xf2aa
leaq -0x970(%rbp), %rdi
leaq -0x918(%rbp), %rsi
callq 0x3cd0
jmp 0x53ee
leaq -0x970(%rbp), %rdi
callq 0x74b0
testb $0x1, %al
jne 0x5403
jmp 0x5498
leaq -0x991(%rbp), %rdi
movq %rdi, -0x1060(%rbp)
callq 0x3490
movq -0x1060(%rbp), %rdx
leaq 0x9eca(%rip), %rsi      # 0xf2ee
leaq -0x990(%rbp), %rdi
callq 0x33b0
jmp 0x5432
leaq -0x970(%rbp), %rdi
leaq -0x990(%rbp), %rsi
callq 0x74f0
jmp 0x5447
leaq -0x990(%rbp), %rdi
callq 0x3190
leaq -0x991(%rbp), %rdi
callq 0x32c0
jmp 0x5498
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x5487
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x990(%rbp), %rdi
callq 0x3190
leaq -0x991(%rbp), %rdi
callq 0x32c0
jmp 0x57a4
leaq -0x918(%rbp), %rdi
callq 0x3370
leaq -0x970(%rbp), %rdi
callq 0x7210
movq %rax, %xmm1
movaps 0x9b64(%rip), %xmm0     # 0xf020
punpckldq %xmm0, %xmm1    # xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
movapd 0x9b68(%rip), %xmm0     # 0xf030
subpd %xmm0, %xmm1
movaps %xmm1, %xmm0
unpckhpd %xmm1, %xmm1            # xmm1 = xmm1[1,1]
addsd %xmm0, %xmm1
movsd 0x9b31(%rip), %xmm0     # 0xf010
divsd %xmm1, %xmm0
movsd %xmm0, -0x9a0(%rbp)
leaq -0x970(%rbp), %rax
movq %rax, -0x9a8(%rbp)
movq -0x9a8(%rbp), %rdi
callq 0x7520
movq %rax, -0x9b0(%rbp)
movq -0x9a8(%rbp), %rdi
callq 0x7550
movq %rax, -0x9b8(%rbp)
leaq -0x9b0(%rbp), %rdi
leaq -0x9b8(%rbp), %rsi
callq 0x7580
testb $0x1, %al
jne 0x5538
jmp 0x55ae
leaq -0x9b0(%rbp), %rdi
callq 0x75c0
movq %rax, -0x9c0(%rbp)
movq -0x9c0(%rbp), %rcx
movl -0x8d4(%rbp), %eax
cvtsi2sd %rax, %xmm0
movsd -0x9a0(%rbp), %xmm1
mulsd %xmm1, %xmm0
cvttsd2si %xmm0, %rax
movl %eax, %r8d
leaq -0x770(%rbp), %rdi
leaq -0x868(%rbp), %rsi
leaq -0x7b0(%rbp), %rdx
callq 0x75e0
jmp 0x558d
jmp 0x558f
leaq -0x9b0(%rbp), %rdi
callq 0x7640
jmp 0x551f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x57a4
leaq -0xa08(%rbp), %rdi
leaq -0x868(%rbp), %rsi
leaq -0x7d8(%rbp), %rdx
callq 0x76c0
jmp 0x55ca
leaq -0x7a0(%rbp), %rdi
leaq -0xa08(%rbp), %rsi
callq 0x7690
movq %rax, -0x1068(%rbp)
jmp 0x55e6
movq -0x1068(%rbp), %rax
movq %rax, -0x9c8(%rbp)
leaq -0x7a0(%rbp), %rdi
callq 0x7700
movq %rax, -0xa10(%rbp)
leaq -0x9c8(%rbp), %rdi
leaq -0xa10(%rbp), %rsi
callq 0x7660
movb %al, -0x1069(%rbp)
leaq -0xa08(%rbp), %rdi
callq 0x7730
movb -0x1069(%rbp), %al
testb $0x1, %al
jne 0x563b
jmp 0x56d9
movl -0x8d4(%rbp), %eax
movl %eax, -0x1070(%rbp)
leaq -0xa50(%rbp), %rdi
leaq -0x868(%rbp), %rsi
leaq -0x7d8(%rbp), %rdx
callq 0x76c0
jmp 0x5663
leaq -0x7a0(%rbp), %rdi
leaq -0xa50(%rbp), %rsi
callq 0x7760
movq %rax, -0x1078(%rbp)
jmp 0x567f
movq -0x1078(%rbp), %rax
movl -0x1070(%rbp), %ecx
movl %ecx, (%rax)
leaq -0xa50(%rbp), %rdi
callq 0x7730
jmp 0x5756
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0xa08(%rbp), %rdi
callq 0x7730
jmp 0x57a4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0xa50(%rbp), %rdi
callq 0x7730
jmp 0x57a4
movl -0x8d4(%rbp), %eax
movl %eax, -0x107c(%rbp)
leaq -0xa90(%rbp), %rdi
leaq -0x868(%rbp), %rsi
leaq -0x7d8(%rbp), %rdx
callq 0x76c0
jmp 0x5701
leaq -0x7a0(%rbp), %rdi
leaq -0xa90(%rbp), %rsi
callq 0x7760
movq %rax, -0x1088(%rbp)
jmp 0x571d
movq -0x1088(%rbp), %rax
movl -0x107c(%rbp), %ecx
addl (%rax), %ecx
movl %ecx, (%rax)
leaq -0xa90(%rbp), %rdi
callq 0x7730
jmp 0x5756
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0xa90(%rbp), %rdi
callq 0x7730
jmp 0x57a4
leaq -0x970(%rbp), %rdi
callq 0x71b0
leaq -0x918(%rbp), %rdi
callq 0x3190
movl $0x0, -0x48(%rbp)
leaq -0x8c0(%rbp), %rdi
callq 0x7840
leaq -0x868(%rbp), %rdi
callq 0x3190
leaq -0x848(%rbp), %rdi
callq 0x71b0
movl -0x48(%rbp), %eax
testl %eax, %eax
jne 0x57e9
jmp 0x57a2
jmp 0x57e2
leaq -0x970(%rbp), %rdi
callq 0x71b0
leaq -0x918(%rbp), %rdi
callq 0x3190
leaq -0x8c0(%rbp), %rdi
callq 0x7840
leaq -0x868(%rbp), %rdi
callq 0x3190
leaq -0x848(%rbp), %rdi
callq 0x71b0
jmp 0x581c
movl $0x0, -0x48(%rbp)
leaq -0x7f8(%rbp), %rdi
callq 0x3190
movl -0x48(%rbp), %eax
movl %eax, -0x108c(%rbp)
testl %eax, %eax
je 0x5817
jmp 0x5804
movl -0x108c(%rbp), %eax
subl $0x2, %eax
je 0x48aa
jmp 0x5815
jmp 0x582d
jmp 0x48aa
leaq -0x7f8(%rbp), %rdi
callq 0x3190
jmp 0x6e05
movq -0x6d8(%rbp), %rdi
leaq 0x9abe(%rip), %rsi      # 0xf2f9
callq 0x3250
movq %rax, -0x1098(%rbp)
jmp 0x5849
movq -0x1098(%rbp), %rdi
movl -0x7a4(%rbp), %esi
callq 0x3380
movq %rax, -0x10a0(%rbp)
jmp 0x5864
movq -0x10a0(%rbp), %rdi
movq 0x1073e(%rip), %rsi     # 0x15fb0
callq 0x32a0
jmp 0x5879
leaq -0x770(%rbp), %rdi
callq 0x78a0
movq %rax, -0xa98(%rbp)
leaq -0x770(%rbp), %rdi
callq 0x7900
movq %rax, -0xaa0(%rbp)
leaq -0xa98(%rbp), %rdi
leaq -0xaa0(%rbp), %rsi
callq 0x78d0
testb $0x1, %al
jne 0x58bb
jmp 0x6299
movq -0x6d8(%rbp), %rdi
movq 0x106e7(%rip), %rsi     # 0x15fb0
callq 0x32a0
jmp 0x58d0
movq -0x6d8(%rbp), %rax
movq %rax, -0x10b0(%rbp)
leaq -0xa98(%rbp), %rdi
callq 0x7930
movq -0x10b0(%rbp), %rdi
movq %rax, %rsi
callq 0x3220
movq %rax, -0x10a8(%rbp)
jmp 0x5902
movq -0x10a8(%rbp), %rdi
leaq 0x9a0e(%rip), %rsi      # 0xf31e
callq 0x3250
movq %rax, -0x10b8(%rbp)
jmp 0x591e
movq -0x10b8(%rbp), %rdi
movq 0x10684(%rip), %rsi     # 0x15fb0
callq 0x32a0
jmp 0x5933
leaq -0xa98(%rbp), %rdi
callq 0x7930
movq %rax, %rdi
addq $0x20, %rdi
callq 0x7950
movq %rax, -0xaa8(%rbp)
leaq -0xa98(%rbp), %rdi
callq 0x7930
movq %rax, %rdi
addq $0x20, %rdi
callq 0x79b0
movq %rax, -0xab0(%rbp)
leaq -0xaa8(%rbp), %rdi
leaq -0xab0(%rbp), %rsi
callq 0x7980
testb $0x1, %al
jne 0x598d
jmp 0x5e2f
movq -0x6d8(%rbp), %rdi
leaq 0x9973(%rip), %rsi      # 0xf30e
callq 0x3250
movq %rax, -0x10c0(%rbp)
jmp 0x59a9
leaq -0xaa8(%rbp), %rdi
callq 0x79e0
movq -0x10c0(%rbp), %rdi
movq %rax, %rsi
callq 0x36c0
movq %rax, -0x10c8(%rbp)
jmp 0x59cd
movq -0x10c8(%rbp), %rdi
leaq 0x9943(%rip), %rsi      # 0xf31e
callq 0x3250
movq %rax, -0x10d0(%rbp)
jmp 0x59e9
movq -0x10d0(%rbp), %rdi
movq 0x105b9(%rip), %rsi     # 0x15fb0
callq 0x32a0
jmp 0x59fe
leaq -0xaa8(%rbp), %rdi
callq 0x79e0
movq %rax, %rdi
addq $0x8, %rdi
callq 0x7a00
movq %rax, -0xab8(%rbp)
leaq -0xaa8(%rbp), %rdi
callq 0x79e0
movq %rax, %rdi
addq $0x8, %rdi
callq 0x7a60
movq %rax, -0xac0(%rbp)
leaq -0xab8(%rbp), %rdi
leaq -0xac0(%rbp), %rsi
callq 0x7a30
testb $0x1, %al
jne 0x5a58
jmp 0x5c1d
movq -0x6d8(%rbp), %rdi
leaq 0x98a5(%rip), %rsi      # 0xf30b
callq 0x3250
movq %rax, -0x10d8(%rbp)
jmp 0x5a74
leaq -0xab8(%rbp), %rdi
callq 0x7b10
movq %rax, %rsi
leaq -0xb00(%rbp), %rdi
movl $0x3a, %edx
callq 0x7a90
jmp 0x5a96
leaq -0xae0(%rbp), %rdi
leaq -0xb00(%rbp), %rsi
movl $0xc, %edx
callq 0x3a80
jmp 0x5ab0
movq -0x10d8(%rbp), %rdi
leaq -0xae0(%rbp), %rsi
callq 0x3220
movq %rax, -0x10e0(%rbp)
jmp 0x5acc
movq -0x10e0(%rbp), %rdi
leaq 0x9836(%rip), %rsi      # 0xf310
callq 0x3250
movq %rax, -0x10e8(%rbp)
jmp 0x5ae8
leaq -0xab8(%rbp), %rdi
callq 0x7b10
movl 0x20(%rax), %esi
leaq -0xb20(%rbp), %rdi
movl $0xc, %edx
callq 0x3b80
jmp 0x5b0a
movq -0x10e8(%rbp), %rdi
leaq -0xb20(%rbp), %rsi
callq 0x3220
movq %rax, -0x10f0(%rbp)
jmp 0x5b26
movq -0x10f0(%rbp), %rdi
leaq 0x97de(%rip), %rsi      # 0xf312
callq 0x3250
movq %rax, -0x10f8(%rbp)
jmp 0x5b42
leaq -0xab8(%rbp), %rdi
callq 0x7b10
movq -0x10f8(%rbp), %rdi
movl 0x20(%rax), %esi
callq 0x3380
movq %rax, -0x1100(%rbp)
jmp 0x5b66
movq -0x1100(%rbp), %rdi
leaq 0x97a4(%rip), %rsi      # 0xf318
callq 0x3250
movq %rax, -0x1108(%rbp)
jmp 0x5b82
movq -0x1108(%rbp), %rdi
movq 0x10420(%rip), %rsi     # 0x15fb0
callq 0x32a0
jmp 0x5b97
leaq -0xb20(%rbp), %rdi
callq 0x3190
leaq -0xae0(%rbp), %rdi
callq 0x3190
leaq -0xb00(%rbp), %rdi
callq 0x3190
leaq -0xab8(%rbp), %rdi
callq 0x7b30
jmp 0x5a1d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x5c0c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x5c00
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0xb20(%rbp), %rdi
callq 0x3190
leaq -0xae0(%rbp), %rdi
callq 0x3190
leaq -0xb00(%rbp), %rdi
callq 0x3190
jmp 0x6e05
leaq -0xaa8(%rbp), %rdi
callq 0x79e0
movq %rax, %rdi
addq $0x8, %rdi
callq 0x7b60
movl %eax, -0x110c(%rbp)
jmp 0x5c3d
movl -0x110c(%rbp), %eax
movl %eax, -0xb24(%rbp)
movq -0x6d8(%rbp), %rdi
leaq 0x96b4(%rip), %rsi      # 0xf30b
callq 0x3250
movq %rax, -0x1118(%rbp)
jmp 0x5c65
leaq -0xb69(%rbp), %rdi
movq %rdi, -0x1120(%rbp)
callq 0x3490
movq -0x1120(%rbp), %rdx
leaq 0x9697(%rip), %rsi      # 0xf31d
leaq -0xb68(%rbp), %rdi
callq 0x33b0
jmp 0x5c94
leaq -0xb48(%rbp), %rdi
leaq -0xb68(%rbp), %rsi
movl $0xc, %edx
callq 0x3a80
jmp 0x5cae
movq -0x1118(%rbp), %rdi
leaq -0xb48(%rbp), %rsi
callq 0x3220
movq %rax, -0x1128(%rbp)
jmp 0x5cca
movq -0x1128(%rbp), %rdi
leaq 0x9638(%rip), %rsi      # 0xf310
callq 0x3250
movq %rax, -0x1130(%rbp)
jmp 0x5ce6
movl -0xb24(%rbp), %esi
leaq -0xb90(%rbp), %rdi
movl $0xc, %edx
callq 0x3b80
jmp 0x5cff
movq -0x1130(%rbp), %rdi
leaq -0xb90(%rbp), %rsi
callq 0x3220
movq %rax, -0x1138(%rbp)
jmp 0x5d1b
movq -0x1138(%rbp), %rdi
leaq 0x95e9(%rip), %rsi      # 0xf312
callq 0x3250
movq %rax, -0x1140(%rbp)
jmp 0x5d37
movq -0x1140(%rbp), %rdi
movl -0xb24(%rbp), %esi
callq 0x3380
movq %rax, -0x1148(%rbp)
jmp 0x5d52
movq -0x1148(%rbp), %rdi
leaq 0x95b8(%rip), %rsi      # 0xf318
callq 0x3250
movq %rax, -0x1150(%rbp)
jmp 0x5d6e
movq -0x1150(%rbp), %rdi
movq 0x10234(%rip), %rsi     # 0x15fb0
callq 0x32a0
jmp 0x5d83
leaq -0xb90(%rbp), %rdi
callq 0x3190
leaq -0xb48(%rbp), %rdi
callq 0x3190
leaq -0xb68(%rbp), %rdi
callq 0x3190
leaq -0xb69(%rbp), %rdi
callq 0x32c0
leaq -0xaa8(%rbp), %rdi
callq 0x7be0
jmp 0x5952
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x5e1e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x5e12
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x5e06
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0xb90(%rbp), %rdi
callq 0x3190
leaq -0xb48(%rbp), %rdi
callq 0x3190
leaq -0xb68(%rbp), %rdi
callq 0x3190
leaq -0xb69(%rbp), %rdi
callq 0x32c0
jmp 0x6e05
movq -0x6d8(%rbp), %rdi
leaq 0x94e3(%rip), %rsi      # 0xf320
callq 0x3250
movq %rax, -0x1158(%rbp)
jmp 0x5e4b
movq -0x1158(%rbp), %rdi
movq 0x10157(%rip), %rsi     # 0x15fb0
callq 0x32a0
jmp 0x5e60
leaq -0xa98(%rbp), %rdi
callq 0x7930
movq %rax, %rdi
addq $0x20, %rdi
addq $0x30, %rdi
callq 0x7c10
movq %rax, -0xb98(%rbp)
leaq -0xa98(%rbp), %rdi
callq 0x7930
movq %rax, %rdi
addq $0x20, %rdi
addq $0x30, %rdi
callq 0x7c40
movq %rax, -0xba0(%rbp)
leaq -0xb98(%rbp), %rdi
leaq -0xba0(%rbp), %rsi
callq 0x7a30
testb $0x1, %al
jne 0x5ec2
jmp 0x6087
movq -0x6d8(%rbp), %rdi
leaq 0x943b(%rip), %rsi      # 0xf30b
callq 0x3250
movq %rax, -0x1160(%rbp)
jmp 0x5ede
leaq -0xb98(%rbp), %rdi
callq 0x7b10
movq %rax, %rsi
leaq -0xbe0(%rbp), %rdi
movl $0x3a, %edx
callq 0x7a90
jmp 0x5f00
leaq -0xbc0(%rbp), %rdi
leaq -0xbe0(%rbp), %rsi
movl $0xc, %edx
callq 0x3a80
jmp 0x5f1a
movq -0x1160(%rbp), %rdi
leaq -0xbc0(%rbp), %rsi
callq 0x3220
movq %rax, -0x1168(%rbp)
jmp 0x5f36
movq -0x1168(%rbp), %rdi
leaq 0x93cc(%rip), %rsi      # 0xf310
callq 0x3250
movq %rax, -0x1170(%rbp)
jmp 0x5f52
leaq -0xb98(%rbp), %rdi
callq 0x7b10
movl 0x20(%rax), %esi
leaq -0xc00(%rbp), %rdi
movl $0xc, %edx
callq 0x3b80
jmp 0x5f74
movq -0x1170(%rbp), %rdi
leaq -0xc00(%rbp), %rsi
callq 0x3220
movq %rax, -0x1178(%rbp)
jmp 0x5f90
movq -0x1178(%rbp), %rdi
leaq 0x9374(%rip), %rsi      # 0xf312
callq 0x3250
movq %rax, -0x1180(%rbp)
jmp 0x5fac
leaq -0xb98(%rbp), %rdi
callq 0x7b10
movq -0x1180(%rbp), %rdi
movl 0x20(%rax), %esi
callq 0x3380
movq %rax, -0x1188(%rbp)
jmp 0x5fd0
movq -0x1188(%rbp), %rdi
leaq 0x933a(%rip), %rsi      # 0xf318
callq 0x3250
movq %rax, -0x1190(%rbp)
jmp 0x5fec
movq -0x1190(%rbp), %rdi
movq 0xffb6(%rip), %rsi      # 0x15fb0
callq 0x32a0
jmp 0x6001
leaq -0xc00(%rbp), %rdi
callq 0x3190
leaq -0xbc0(%rbp), %rdi
callq 0x3190
leaq -0xbe0(%rbp), %rdi
callq 0x3190
leaq -0xb98(%rbp), %rdi
callq 0x7b30
jmp 0x5e83
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x6076
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x606a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0xc00(%rbp), %rdi
callq 0x3190
leaq -0xbc0(%rbp), %rdi
callq 0x3190
leaq -0xbe0(%rbp), %rdi
callq 0x3190
jmp 0x6e05
leaq -0xa98(%rbp), %rdi
callq 0x7930
movq %rax, %rdi
addq $0x50, %rdi
callq 0x7b60
movl %eax, -0x1194(%rbp)
jmp 0x60a7
movl -0x1194(%rbp), %eax
movl %eax, -0xc04(%rbp)
movq -0x6d8(%rbp), %rdi
leaq 0x924a(%rip), %rsi      # 0xf30b
callq 0x3250
movq %rax, -0x11a0(%rbp)
jmp 0x60cf
leaq -0xc49(%rbp), %rdi
movq %rdi, -0x11a8(%rbp)
callq 0x3490
movq -0x11a8(%rbp), %rdx
leaq 0x922d(%rip), %rsi      # 0xf31d
leaq -0xc48(%rbp), %rdi
callq 0x33b0
jmp 0x60fe
leaq -0xc28(%rbp), %rdi
leaq -0xc48(%rbp), %rsi
movl $0xc, %edx
callq 0x3a80
jmp 0x6118
movq -0x11a0(%rbp), %rdi
leaq -0xc28(%rbp), %rsi
callq 0x3220
movq %rax, -0x11b0(%rbp)
jmp 0x6134
movq -0x11b0(%rbp), %rdi
leaq 0x91ce(%rip), %rsi      # 0xf310
callq 0x3250
movq %rax, -0x11b8(%rbp)
jmp 0x6150
movl -0xc04(%rbp), %esi
leaq -0xc70(%rbp), %rdi
movl $0xc, %edx
callq 0x3b80
jmp 0x6169
movq -0x11b8(%rbp), %rdi
leaq -0xc70(%rbp), %rsi
callq 0x3220
movq %rax, -0x11c0(%rbp)
jmp 0x6185
movq -0x11c0(%rbp), %rdi
leaq 0x917f(%rip), %rsi      # 0xf312
callq 0x3250
movq %rax, -0x11c8(%rbp)
jmp 0x61a1
movq -0x11c8(%rbp), %rdi
movl -0xc04(%rbp), %esi
callq 0x3380
movq %rax, -0x11d0(%rbp)
jmp 0x61bc
movq -0x11d0(%rbp), %rdi
leaq 0x914e(%rip), %rsi      # 0xf318
callq 0x3250
movq %rax, -0x11d8(%rbp)
jmp 0x61d8
movq -0x11d8(%rbp), %rdi
movq 0xfdca(%rip), %rsi      # 0x15fb0
callq 0x32a0
jmp 0x61ed
leaq -0xc70(%rbp), %rdi
callq 0x3190
leaq -0xc28(%rbp), %rdi
callq 0x3190
leaq -0xc48(%rbp), %rdi
callq 0x3190
leaq -0xc49(%rbp), %rdi
callq 0x32c0
leaq -0xa98(%rbp), %rdi
callq 0x7c70
jmp 0x588c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x6288
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x627c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x6270
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0xc70(%rbp), %rdi
callq 0x3190
leaq -0xc28(%rbp), %rdi
callq 0x3190
leaq -0xc48(%rbp), %rdi
callq 0x3190
leaq -0xc49(%rbp), %rdi
callq 0x32c0
jmp 0x6e05
movq -0x6d8(%rbp), %rdi
movq 0xfd09(%rip), %rsi      # 0x15fb0
callq 0x32a0
jmp 0x62ae
movq -0x6d8(%rbp), %rdi
leaq 0x9075(%rip), %rsi      # 0xf331
callq 0x3250
movq %rax, -0x11e0(%rbp)
jmp 0x62ca
movq -0x11e0(%rbp), %rdi
leaq 0x9046(%rip), %rsi      # 0xf31e
callq 0x3250
movq %rax, -0x11e8(%rbp)
jmp 0x62e6
movq -0x11e8(%rbp), %rdi
movq 0xfcbc(%rip), %rsi      # 0x15fb0
callq 0x32a0
jmp 0x62fb
leaq -0x770(%rbp), %rdi
addq $0x30, %rdi
callq 0x7ca0
movq %rax, -0xc78(%rbp)
leaq -0x770(%rbp), %rdi
addq $0x30, %rdi
callq 0x7d00
movq %rax, -0xc80(%rbp)
leaq -0xc78(%rbp), %rdi
leaq -0xc80(%rbp), %rsi
callq 0x7cd0
testb $0x1, %al
jne 0x6345
jmp 0x67e7
movq -0x6d8(%rbp), %rdi
leaq 0x8fbb(%rip), %rsi      # 0xf30e
callq 0x3250
movq %rax, -0x11f0(%rbp)
jmp 0x6361
leaq -0xc78(%rbp), %rdi
callq 0x7d30
movq -0x11f0(%rbp), %rdi
movq %rax, %rsi
callq 0x36c0
movq %rax, -0x11f8(%rbp)
jmp 0x6385
movq -0x11f8(%rbp), %rdi
leaq 0x8f8b(%rip), %rsi      # 0xf31e
callq 0x3250
movq %rax, -0x1200(%rbp)
jmp 0x63a1
movq -0x1200(%rbp), %rdi
movq 0xfc01(%rip), %rsi      # 0x15fb0
callq 0x32a0
jmp 0x63b6
leaq -0xc78(%rbp), %rdi
callq 0x7d30
movq %rax, %rdi
addq $0x8, %rdi
callq 0x7d50
movq %rax, -0xc88(%rbp)
leaq -0xc78(%rbp), %rdi
callq 0x7d30
movq %rax, %rdi
addq $0x8, %rdi
callq 0x7db0
movq %rax, -0xc90(%rbp)
leaq -0xc88(%rbp), %rdi
leaq -0xc90(%rbp), %rsi
callq 0x7d80
testb $0x1, %al
jne 0x6410
jmp 0x65d5
movq -0x6d8(%rbp), %rdi
leaq 0x8eed(%rip), %rsi      # 0xf30b
callq 0x3250
movq %rax, -0x1208(%rbp)
jmp 0x642c
leaq -0xc88(%rbp), %rdi
callq 0x7de0
movq %rax, %rsi
leaq -0xcd0(%rbp), %rdi
movl $0x3a, %edx
callq 0x7a90
jmp 0x644e
leaq -0xcb0(%rbp), %rdi
leaq -0xcd0(%rbp), %rsi
movl $0xc, %edx
callq 0x3a80
jmp 0x6468
movq -0x1208(%rbp), %rdi
leaq -0xcb0(%rbp), %rsi
callq 0x3220
movq %rax, -0x1210(%rbp)
jmp 0x6484
movq -0x1210(%rbp), %rdi
leaq 0x8e7e(%rip), %rsi      # 0xf310
callq 0x3250
movq %rax, -0x1218(%rbp)
jmp 0x64a0
leaq -0xc88(%rbp), %rdi
callq 0x7de0
movl 0x20(%rax), %esi
leaq -0xcf0(%rbp), %rdi
movl $0xc, %edx
callq 0x3b80
jmp 0x64c2
movq -0x1218(%rbp), %rdi
leaq -0xcf0(%rbp), %rsi
callq 0x3220
movq %rax, -0x1220(%rbp)
jmp 0x64de
movq -0x1220(%rbp), %rdi
leaq 0x8e26(%rip), %rsi      # 0xf312
callq 0x3250
movq %rax, -0x1228(%rbp)
jmp 0x64fa
leaq -0xc88(%rbp), %rdi
callq 0x7de0
movq -0x1228(%rbp), %rdi
movl 0x20(%rax), %esi
callq 0x3380
movq %rax, -0x1230(%rbp)
jmp 0x651e
movq -0x1230(%rbp), %rdi
leaq 0x8dec(%rip), %rsi      # 0xf318
callq 0x3250
movq %rax, -0x1238(%rbp)
jmp 0x653a
movq -0x1238(%rbp), %rdi
movq 0xfa68(%rip), %rsi      # 0x15fb0
callq 0x32a0
jmp 0x654f
leaq -0xcf0(%rbp), %rdi
callq 0x3190
leaq -0xcb0(%rbp), %rdi
callq 0x3190
leaq -0xcd0(%rbp), %rdi
callq 0x3190
leaq -0xc88(%rbp), %rdi
callq 0x7e00
jmp 0x63d5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x65c4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x65b8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0xcf0(%rbp), %rdi
callq 0x3190
leaq -0xcb0(%rbp), %rdi
callq 0x3190
leaq -0xcd0(%rbp), %rdi
callq 0x3190
jmp 0x6e05
leaq -0xc78(%rbp), %rdi
callq 0x7d30
movq %rax, %rdi
addq $0x8, %rdi
callq 0x7b60
movl %eax, -0x123c(%rbp)
jmp 0x65f5
movl -0x123c(%rbp), %eax
movl %eax, -0xcf4(%rbp)
movq -0x6d8(%rbp), %rdi
leaq 0x8cfc(%rip), %rsi      # 0xf30b
callq 0x3250
movq %rax, -0x1248(%rbp)
jmp 0x661d
leaq -0xd39(%rbp), %rdi
movq %rdi, -0x1250(%rbp)
callq 0x3490
movq -0x1250(%rbp), %rdx
leaq 0x8cdf(%rip), %rsi      # 0xf31d
leaq -0xd38(%rbp), %rdi
callq 0x33b0
jmp 0x664c
leaq -0xd18(%rbp), %rdi
leaq -0xd38(%rbp), %rsi
movl $0xc, %edx
callq 0x3a80
jmp 0x6666
movq -0x1248(%rbp), %rdi
leaq -0xd18(%rbp), %rsi
callq 0x3220
movq %rax, -0x1258(%rbp)
jmp 0x6682
movq -0x1258(%rbp), %rdi
leaq 0x8c80(%rip), %rsi      # 0xf310
callq 0x3250
movq %rax, -0x1260(%rbp)
jmp 0x669e
movl -0xcf4(%rbp), %esi
leaq -0xd60(%rbp), %rdi
movl $0xc, %edx
callq 0x3b80
jmp 0x66b7
movq -0x1260(%rbp), %rdi
leaq -0xd60(%rbp), %rsi
callq 0x3220
movq %rax, -0x1268(%rbp)
jmp 0x66d3
movq -0x1268(%rbp), %rdi
leaq 0x8c31(%rip), %rsi      # 0xf312
callq 0x3250
movq %rax, -0x1270(%rbp)
jmp 0x66ef
movq -0x1270(%rbp), %rdi
movl -0xcf4(%rbp), %esi
callq 0x3380
movq %rax, -0x1278(%rbp)
jmp 0x670a
movq -0x1278(%rbp), %rdi
leaq 0x8c00(%rip), %rsi      # 0xf318
callq 0x3250
movq %rax, -0x1280(%rbp)
jmp 0x6726
movq -0x1280(%rbp), %rdi
movq 0xf87c(%rip), %rsi      # 0x15fb0
callq 0x32a0
jmp 0x673b
leaq -0xd60(%rbp), %rdi
callq 0x3190
leaq -0xd18(%rbp), %rdi
callq 0x3190
leaq -0xd38(%rbp), %rdi
callq 0x3190
leaq -0xd39(%rbp), %rdi
callq 0x32c0
leaq -0xc78(%rbp), %rdi
callq 0x7e30
jmp 0x6312
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x67d6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x67ca
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x67be
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0xd60(%rbp), %rdi
callq 0x3190
leaq -0xd18(%rbp), %rdi
callq 0x3190
leaq -0xd38(%rbp), %rdi
callq 0x3190
leaq -0xd39(%rbp), %rdi
callq 0x32c0
jmp 0x6e05
movq -0x6d8(%rbp), %rdi
leaq 0x8b2b(%rip), %rsi      # 0xf320
callq 0x3250
movq %rax, -0x1288(%rbp)
jmp 0x6803
movq -0x1288(%rbp), %rdi
movq 0xf79f(%rip), %rsi      # 0x15fb0
callq 0x32a0
jmp 0x6818
leaq -0x770(%rbp), %rdi
addq $0x30, %rdi
addq $0x30, %rdi
callq 0x7d50
movq %rax, -0xd68(%rbp)
leaq -0x770(%rbp), %rdi
addq $0x30, %rdi
addq $0x30, %rdi
callq 0x7db0
movq %rax, -0xd70(%rbp)
leaq -0xd68(%rbp), %rdi
leaq -0xd70(%rbp), %rsi
callq 0x7d80
testb $0x1, %al
jne 0x686a
jmp 0x6a2f
movq -0x6d8(%rbp), %rdi
leaq 0x8a93(%rip), %rsi      # 0xf30b
callq 0x3250
movq %rax, -0x1290(%rbp)
jmp 0x6886
leaq -0xd68(%rbp), %rdi
callq 0x7de0
movq %rax, %rsi
leaq -0xdb0(%rbp), %rdi
movl $0x3a, %edx
callq 0x7a90
jmp 0x68a8
leaq -0xd90(%rbp), %rdi
leaq -0xdb0(%rbp), %rsi
movl $0xc, %edx
callq 0x3a80
jmp 0x68c2
movq -0x1290(%rbp), %rdi
leaq -0xd90(%rbp), %rsi
callq 0x3220
movq %rax, -0x1298(%rbp)
jmp 0x68de
movq -0x1298(%rbp), %rdi
leaq 0x8a24(%rip), %rsi      # 0xf310
callq 0x3250
movq %rax, -0x12a0(%rbp)
jmp 0x68fa
leaq -0xd68(%rbp), %rdi
callq 0x7de0
movl 0x20(%rax), %esi
leaq -0xdd0(%rbp), %rdi
movl $0xc, %edx
callq 0x3b80
jmp 0x691c
movq -0x12a0(%rbp), %rdi
leaq -0xdd0(%rbp), %rsi
callq 0x3220
movq %rax, -0x12a8(%rbp)
jmp 0x6938
movq -0x12a8(%rbp), %rdi
leaq 0x89cc(%rip), %rsi      # 0xf312
callq 0x3250
movq %rax, -0x12b0(%rbp)
jmp 0x6954
leaq -0xd68(%rbp), %rdi
callq 0x7de0
movq -0x12b0(%rbp), %rdi
movl 0x20(%rax), %esi
callq 0x3380
movq %rax, -0x12b8(%rbp)
jmp 0x6978
movq -0x12b8(%rbp), %rdi
leaq 0x8992(%rip), %rsi      # 0xf318
callq 0x3250
movq %rax, -0x12c0(%rbp)
jmp 0x6994
movq -0x12c0(%rbp), %rdi
movq 0xf60e(%rip), %rsi      # 0x15fb0
callq 0x32a0
jmp 0x69a9
leaq -0xdd0(%rbp), %rdi
callq 0x3190
leaq -0xd90(%rbp), %rdi
callq 0x3190
leaq -0xdb0(%rbp), %rdi
callq 0x3190
leaq -0xd68(%rbp), %rdi
callq 0x7e00
jmp 0x6833
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x6a1e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x6a12
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0xdd0(%rbp), %rdi
callq 0x3190
leaq -0xd90(%rbp), %rdi
callq 0x3190
leaq -0xdb0(%rbp), %rdi
callq 0x3190
jmp 0x6e05
leaq -0x710(%rbp), %rdi
callq 0x7b60
movl %eax, -0x12c4(%rbp)
jmp 0x6a43
movl -0x12c4(%rbp), %eax
movl %eax, -0xdd4(%rbp)
movq -0x6d8(%rbp), %rdi
leaq 0x88ae(%rip), %rsi      # 0xf30b
callq 0x3250
movq %rax, -0x12d0(%rbp)
jmp 0x6a6b
leaq -0xe19(%rbp), %rdi
movq %rdi, -0x12d8(%rbp)
callq 0x3490
movq -0x12d8(%rbp), %rdx
leaq 0x8891(%rip), %rsi      # 0xf31d
leaq -0xe18(%rbp), %rdi
callq 0x33b0
jmp 0x6a9a
leaq -0xdf8(%rbp), %rdi
leaq -0xe18(%rbp), %rsi
movl $0xc, %edx
callq 0x3a80
jmp 0x6ab4
movq -0x12d0(%rbp), %rdi
leaq -0xdf8(%rbp), %rsi
callq 0x3220
movq %rax, -0x12e0(%rbp)
jmp 0x6ad0
movq -0x12e0(%rbp), %rdi
leaq 0x8832(%rip), %rsi      # 0xf310
callq 0x3250
movq %rax, -0x12e8(%rbp)
jmp 0x6aec
movl -0xdd4(%rbp), %esi
leaq -0xe40(%rbp), %rdi
movl $0xc, %edx
callq 0x3b80
jmp 0x6b05
movq -0x12e8(%rbp), %rdi
leaq -0xe40(%rbp), %rsi
callq 0x3220
movq %rax, -0x12f0(%rbp)
jmp 0x6b21
movq -0x12f0(%rbp), %rdi
leaq 0x87e3(%rip), %rsi      # 0xf312
callq 0x3250
movq %rax, -0x12f8(%rbp)
jmp 0x6b3d
movq -0x12f8(%rbp), %rdi
movl -0xdd4(%rbp), %esi
callq 0x3380
movq %rax, -0x1300(%rbp)
jmp 0x6b58
movq -0x1300(%rbp), %rdi
leaq 0x87b2(%rip), %rsi      # 0xf318
callq 0x3250
movq %rax, -0x1308(%rbp)
jmp 0x6b74
movq -0x1308(%rbp), %rdi
movq 0xf42e(%rip), %rsi      # 0x15fb0
callq 0x32a0
jmp 0x6b89
leaq -0xe40(%rbp), %rdi
callq 0x3190
leaq -0xdf8(%rbp), %rdi
callq 0x3190
leaq -0xe18(%rbp), %rdi
callq 0x3190
leaq -0xe19(%rbp), %rdi
callq 0x32c0
movq -0x6d8(%rbp), %rdi
movq 0xf3e9(%rip), %rsi      # 0x15fb0
callq 0x32a0
jmp 0x6bce
movq -0x6e0(%rbp), %rdi
leaq 0x876d(%rip), %rsi      # 0xf349
callq 0x3250
jmp 0x6be3
leaq -0x7a0(%rbp), %rdi
callq 0x7e60
movq %rax, -0xe48(%rbp)
leaq -0x7a0(%rbp), %rdi
callq 0x7700
movq %rax, -0xe50(%rbp)
leaq -0xe48(%rbp), %rdi
leaq -0xe50(%rbp), %rsi
callq 0x7e90
testb $0x1, %al
jne 0x6c25
jmp 0x6dd1
movq -0x6e0(%rbp), %rax
movq %rax, -0x1318(%rbp)
leaq -0xe48(%rbp), %rdi
callq 0x7ec0
movq -0x1318(%rbp), %rdi
movq %rax, %rsi
callq 0x3220
movq %rax, -0x1310(%rbp)
jmp 0x6c57
movq -0x1310(%rbp), %rdi
leaq 0x8644(%rip), %rsi      # 0xf2a9
callq 0x3250
movq %rax, -0x1320(%rbp)
jmp 0x6c73
leaq -0xe48(%rbp), %rdi
callq 0x7ec0
movq -0x1320(%rbp), %rdi
movq %rax, %rsi
addq $0x20, %rsi
callq 0x3220
movq %rax, -0x1328(%rbp)
jmp 0x6c9b
movq -0x1328(%rbp), %rdi
leaq 0x8600(%rip), %rsi      # 0xf2a9
callq 0x3250
movq %rax, -0x1330(%rbp)
jmp 0x6cb7
movq -0x1330(%rbp), %rdi
leaq 0x42b(%rip), %rsi       # 0x70f0
callq 0x30d0
movq %rax, -0x1338(%rbp)
jmp 0x6cd3
movl $0x9, %edi
callq 0x7ee0
movl %eax, -0x133c(%rbp)
jmp 0x6ce5
movq -0x1338(%rbp), %rdi
movl -0x133c(%rbp), %eax
movl %eax, -0xe54(%rbp)
movl -0xe54(%rbp), %esi
callq 0x3420
movq %rax, -0x1348(%rbp)
jmp 0x6d0c
leaq -0xe48(%rbp), %rdi
callq 0x7ec0
movq -0x1348(%rbp), %rdi
movl 0x40(%rax), %eax
cvtsi2sd %rax, %xmm0
movsd 0x82d9(%rip), %xmm1     # 0xf008
divsd %xmm1, %xmm0
callq 0x34d0
movq %rax, -0x1350(%rbp)
jmp 0x6d41
movq -0x1350(%rbp), %rdi
movq 0xf261(%rip), %rsi      # 0x15fb0
callq 0x32a0
jmp 0x6d56
jmp 0x6d58
leaq -0xe48(%rbp), %rdi
callq 0x7f00
jmp 0x6bf6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x6dc3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x6db7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x6dab
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0xe40(%rbp), %rdi
callq 0x3190
leaq -0xdf8(%rbp), %rdi
callq 0x3190
leaq -0xe18(%rbp), %rdi
callq 0x3190
leaq -0xe19(%rbp), %rdi
callq 0x32c0
jmp 0x6e05
movl $0x0, -0x4(%rbp)
movl $0x1, -0x48(%rbp)
leaq -0x7d8(%rbp), %rdi
callq 0x3190
leaq -0x7a0(%rbp), %rdi
callq 0x7f30
leaq -0x770(%rbp), %rdi
callq 0x7f50
jmp 0x6e2b
leaq -0x7d8(%rbp), %rdi
callq 0x3190
leaq -0x7a0(%rbp), %rdi
callq 0x7f30
leaq -0x770(%rbp), %rdi
callq 0x7f50
jmp 0x6e45
leaq -0x6a0(%rbp), %rdi
callq 0x33f0
leaq -0x498(%rbp), %rdi
callq 0x3190
jmp 0x6e5f
leaq -0x6a0(%rbp), %rdi
callq 0x33f0
leaq -0x498(%rbp), %rdi
callq 0x3190
jmp 0x6e79
leaq -0x478(%rbp), %rdi
callq 0x33f0
leaq -0x270(%rbp), %rdi
callq 0x3190
jmp 0x6e93
leaq -0x478(%rbp), %rdi
callq 0x33f0
leaq -0x270(%rbp), %rdi
callq 0x3190
jmp 0x6ea1
leaq -0x250(%rbp), %rdi
callq 0x30b0
jmp 0x6eaf
leaq -0x250(%rbp), %rdi
callq 0x30b0
jmp 0x6ebd
leaq -0x30(%rbp), %rdi
callq 0x3190
jmp 0x6fec
leaq -0x30(%rbp), %rdi
callq 0x3190
movl -0x44(%rbp), %eax
movl $0x2, %ecx
cmpl %ecx, %eax
jne 0x6f57
movq -0x40(%rbp), %rdi
callq 0x3100
movq %rax, -0xe60(%rbp)
movq 0xf103(%rip), %rdi      # 0x15ff0
leaq 0x8309(%rip), %rsi      # 0xf1fd
callq 0x3250
movq %rax, -0x1358(%rbp)
jmp 0x6f02
movq -0xe60(%rbp), %rdi
movq (%rdi), %rax
movq 0x10(%rax), %rax
callq *%rax
movq -0x1358(%rbp), %rdi
movq %rax, %rsi
callq 0x3250
movq %rax, -0x1360(%rbp)
jmp 0x6f2a
movq -0x1360(%rbp), %rdi
movq 0xf078(%rip), %rsi      # 0x15fb0
callq 0x32a0
jmp 0x6f3f
movl $0xffffffff, -0x4(%rbp) # imm = 0xFFFFFFFF
movl $0x1, -0x48(%rbp)
callq 0x3450
jmp 0x6fec
movq -0x40(%rbp), %rdi
callq 0x3100
movq 0xf089(%rip), %rdi      # 0x15ff0
leaq 0x828f(%rip), %rsi      # 0xf1fd
callq 0x3250
movq %rax, -0x1368(%rbp)
jmp 0x6f7c
movq -0x1368(%rbp), %rdi
leaq 0x83d1(%rip), %rsi      # 0xf35b
callq 0x3250
movq %rax, -0x1370(%rbp)
jmp 0x6f98
movq -0x1370(%rbp), %rdi
movq 0xf00a(%rip), %rsi      # 0x15fb0
callq 0x32a0
jmp 0x6fad
movl $0xffffffff, -0x4(%rbp) # imm = 0xFFFFFFFF
movl $0x1, -0x48(%rbp)
callq 0x3450
jmp 0x6fec
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
callq 0x3450
jmp 0x6fd5
jmp 0x6ff8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
callq 0x3450
jmp 0x6fea
jmp 0x6ff8
movl -0x4(%rbp), %eax
addq $0x1370, %rsp           # imm = 0x1370
popq %rbp
retq
movq -0x40(%rbp), %rdi
callq 0x3480
movq %rax, %rdi
callq 0x7f80
nopl (%rax)