请仔细阅读和深度思考分析下面函数,绝对保持原始代码的处理流程和步骤不变,
绝对不要遗漏各种条件判断和标志位管理的处理和各种逻辑功能处理,
采用C/C++11标准,
绝对不要输出简化代码和处理流程和步骤,推导并重构完整的可编译的所有函数的全部代码
特别要求如下:
1.保持所有原始功能不变,不要遗漏逻辑细节
2.提高执行效率,降低计算复杂度
3.已经给定的结构体名字和元素不要更改,详细的中文注释
4.自动添加中文注释说明功能逻辑
5.不使用 auto,使用显式 for 循环
6.结构体采用32位定义
7.不要使用小函数,保持原始的函数定义
8.严格保持protobuf字段映射关系
特别注意如下:
1.函数中有关位操作不变,函数间的位操作一致
__int64 __fastcall HDDMDevice::readdevice(HDDMDevice *this, const std::string *stdArchFile)
{
_QWORD *qword28; // rsi
size_t n; // rdx
void *exception; // rbx
void *v5; // r13
const char *v6; // rcx
int v7; // ebx
HDDMChipDesc *v8; // r13
HDDMChipDesc *v9; // r14
unsigned __int64 v10; // rax
HDDMChipDesc *v11; // rbp
HDDMChipDesc *v12; // r12
HDDMChipDesc *v13; // r15
__int64 v14; // r14
__int64 v15; // rbp
HDDMChipDesc *v16; // rbx
__int64 v17; // rbx
int v18; // r13d
char *v19; // r14
char v20; // dl
boost::filesystem::path *v21; // rdi
unsigned __int64 v22; // r8
HDDMChipDesc *v23; // r14
HDDMChipDesc *v24; // rbp
int v25; // r13d
int v26; // r12d
_DWORD *v27; // rbx
unsigned __int16 v28; // bx
unsigned __int16 v29; // bp
HDDMTile *TileAtGridXY; // rax
unsigned __int64 v31; // rcx
__int64 word4; // rsi
unsigned int v33; // ebp
unsigned __int16 v34; // r12
HDDMSite *SiteAtRpmGridPoint; // rax
unsigned __int64 v36; // rcx
int v37; // ebx
char *v38; // rbp
unsigned __int64 v39; // rax
char *v40; // r14
char *v41; // r12
signed __int64 v42; // rax
void *v43; // rdi
void *v44; // rdi
__int64 v45; // rax
std::string *v46; // rbx
unsigned __int64 SiteType; // rbx
HSTString *insert_hint_unique_pos_3; // rdx
HSTString *insert_hint_unique_pos_2; // r14
HSTString *insert_hint_unique_pos_5; // rax
__int64 insert_hint_unique_pos; // rax
__int64 v52; // rdx
_BOOL8 v53; // rdi
__int64 wordA; // rsi
__int64 qwordB8_1; // rax
__int64 qwordC0_1; // rax
int word4_1; // r8d
int word6; // edi
_QWORD *v59; // rdx
unsigned __int64 v60; // rbp
unsigned __int64 v61; // rsi
__int64 v62; // r9
__int64 v63; // r13
HUBSimpleScanner *v64; // rax
__int64 v65; // rbx
__int64 v66; // rbx
HDDMTile *v67; // r14
__int64 v68; // rcx
unsigned int v69; // edx
unsigned __int16 v70; // ax
unsigned int v71; // edi
_QWORD *v72; // rdx
unsigned __int64 v73; // rbp
unsigned __int64 v74; // rsi
__int64 v75; // r8
__int64 v76; // r13
unsigned __int64 v77; // r14
unsigned __int64 v78; // r12
HSTString *insert_hint_unique_posESt23_Rb_tree_const_iteratorIS8_ERS4__2; // r8
__int64 v80; // rdx
unsigned __int64 v81; // rbx
HSTString *insert_hint_unique_posESt23_Rb_tree_const_iteratorIS8_ERS4__3; // rdx
HSTString *insert_hint_unique_posESt23_Rb_tree_const_iteratorIS8_ERS4__6; // rax
__int64 insert_hint_unique_posESt23_Rb_tree_const_iteratorIS8_ERS4_; // rax
__int64 v85; // rdx
HSTString *insert_hint_unique_posESt23_Rb_tree_const_iteratorIS8_ERS4__1; // rbx
_BOOL8 v87; // rdi
const std::string *v88; // rsi
__int64 v89; // rdx
int v90; // r14d
__int64 v91; // rdx
int v92; // ebx
__int64 v93; // r14
boost::filesystem::path *v94; // rax
__int64 v95; // rbx
__int64 v96; // rbx
unsigned int v97; // ebx
__int64 i; // rdx
__int64 qwordC0; // rdi
__int64 v100; // rbp
_DWORD *v101; // rax
__int64 v102; // rdx
unsigned int v103; // ebx
__int64 qwordB8; // rdi
__int64 v105; // rbp
_DWORD *v106; // rax
void *v108; // r12
char *v109; // r13
HEXDataException *v110; // rbp
void *v111; // r13
int v112; // ecx
void *v113; // rbx
__int64 v114; // r12
HSTString *v116; // [rsp+10h] [rbp-5A8h]
HSTString *v117; // [rsp+10h] [rbp-5A8h]
HSTString *insert_hint_unique_posESt23_Rb_tree_const_iteratorIS8_ERS4__4; // [rsp+10h] [rbp-5A8h]
HSTString *insert_hint_unique_pos_4; // [rsp+18h] [rbp-5A0h]
HSTString *insert_hint_unique_pos_1; // [rsp+18h] [rbp-5A0h]
HSTString *insert_hint_unique_posESt23_Rb_tree_const_iteratorIS8_ERS4__5; // [rsp+18h] [rbp-5A0h]
int v123; // [rsp+40h] [rbp-578h]
HUBSimpleScanner *v124; // [rsp+40h] [rbp-578h]
unsigned int v125; // [rsp+40h] [rbp-578h]
HUBSimpleScanner *v126; // [rsp+48h] [rbp-570h]
unsigned int v127; // [rsp+48h] [rbp-570h]
unsigned int v128; // [rsp+48h] [rbp-570h]
HUBSimpleScanner *v129; // [rsp+50h] [rbp-568h]
unsigned int v130; // [rsp+50h] [rbp-568h]
boost::filesystem::path *v131; // [rsp+58h] [rbp-560h]
_QWORD v132[2]; // [rsp+90h] [rbp-528h] BYREF
_QWORD v133[2]; // [rsp+A0h] [rbp-518h] BYREF
_QWORD v134[2]; // [rsp+B0h] [rbp-508h] BYREF
_QWORD v135[2]; // [rsp+C0h] [rbp-4F8h] BYREF
_QWORD v136[2]; // [rsp+D0h] [rbp-4E8h] BYREF
_QWORD v137[2]; // [rsp+E0h] [rbp-4D8h] BYREF
__int64 v138; // [rsp+F0h] [rbp-4C8h] BYREF
_QWORD v139[2]; // [rsp+100h] [rbp-4B8h] BYREF
const char *v140[2]; // [rsp+110h] [rbp-4A8h] BYREF
const char *v141[2]; // [rsp+120h] [rbp-498h] BYREF
_QWORD v142[2]; // [rsp+130h] [rbp-488h] BYREF
__int64 v143; // [rsp+140h] [rbp-478h] BYREF
__int64 v144; // [rsp+150h] [rbp-468h] BYREF
_QWORD v145[2]; // [rsp+160h] [rbp-458h] BYREF
_QWORD v146[2]; // [rsp+170h] [rbp-448h] BYREF
_QWORD v147[2]; // [rsp+180h] [rbp-438h] BYREF
_QWORD v148[2]; // [rsp+190h] [rbp-428h] BYREF
unsigned __int16 v149[8]; // [rsp+1A0h] [rbp-418h] BYREF
unsigned __int16 v150[8]; // [rsp+1B0h] [rbp-408h] BYREF
void *s1[2]; // [rsp+1C0h] [rbp-3F8h] BYREF
char *v152[2]; // [rsp+1D0h] [rbp-3E8h] BYREF
HDDMChipDesc *v153; // [rsp+1E0h] [rbp-3D8h] BYREF
HDDMChipDesc *v154; // [rsp+1E8h] [rbp-3D0h]
__int64 v155; // [rsp+1F0h] [rbp-3C8h]
void *v156; // [rsp+200h] [rbp-3B8h] BYREF
_BYTE *v157; // [rsp+208h] [rbp-3B0h]
__int64 v158; // [rsp+210h] [rbp-3A8h]
void *v159; // [rsp+220h] [rbp-398h] BYREF
__int64 v160; // [rsp+228h] [rbp-390h]
__int64 v161; // [rsp+230h] [rbp-388h]
__int64 v162; // [rsp+240h] [rbp-378h] BYREF
char *v163; // [rsp+248h] [rbp-370h]
__int64 v164; // [rsp+250h] [rbp-368h]
void *v165; // [rsp+260h] [rbp-358h] BYREF
unsigned int v166; // [rsp+268h] [rbp-350h]
__int64 v167; // [rsp+270h] [rbp-348h]
unsigned int v168; // [rsp+278h] [rbp-340h]
__int64 v169; // [rsp+280h] [rbp-338h]
void *v170; // [rsp+290h] [rbp-328h] BYREF
unsigned int v171; // [rsp+298h] [rbp-320h]
__int64 v172; // [rsp+2A0h] [rbp-318h]
unsigned int v173; // [rsp+2A8h] [rbp-310h]
__int64 v174; // [rsp+2B0h] [rbp-308h]
char v175[8]; // [rsp+2C0h] [rbp-2F8h] BYREF
int v176; // [rsp+2C8h] [rbp-2F0h] BYREF
HSTString *insert_hint_unique_pos_6; // [rsp+2D0h] [rbp-2E8h]
int *v178; // [rsp+2D8h] [rbp-2E0h]
int *v179; // [rsp+2E0h] [rbp-2D8h]
__int64 v180; // [rsp+2E8h] [rbp-2D0h]
char *v181; // [rsp+2F0h] [rbp-2C8h] BYREF
int v182; // [rsp+2F8h] [rbp-2C0h] BYREF
__int64 v183; // [rsp+300h] [rbp-2B8h]
int *v184; // [rsp+308h] [rbp-2B0h]
int *v185; // [rsp+310h] [rbp-2A8h]
__int64 v186; // [rsp+318h] [rbp-2A0h]
bool v187[8]; // [rsp+320h] [rbp-298h] BYREF
char *v188; // [rsp+328h] [rbp-290h] BYREF
__int64 v189; // [rsp+330h] [rbp-288h]
__int64 v190; // [rsp+338h] [rbp-280h]
__int64 v191; // [rsp+340h] [rbp-278h]
__int64 v192; // [rsp+348h] [rbp-270h]
__int64 v193; // [rsp+350h] [rbp-268h]
__int64 v194; // [rsp+358h] [rbp-260h]
__int64 v195; // [rsp+360h] [rbp-258h] BYREF
int n16; // [rsp+368h] [rbp-250h]
char *v197; // [rsp+370h] [rbp-248h]
_QWORD v198[27]; // [rsp+378h] [rbp-240h] BYREF
__int64 v199; // [rsp+450h] [rbp-168h]
char v200; // [rsp+458h] [rbp-160h]
char v201; // [rsp+459h] [rbp-15Fh]
__int64 v202; // [rsp+460h] [rbp-158h]
__int64 v203; // [rsp+468h] [rbp-150h]
__int64 v204; // [rsp+470h] [rbp-148h]
__int64 v205; // [rsp+478h] [rbp-140h]
v153 = 0;
v154 = 0;
v155 = 0;
v165 = 0;
v166 = 0;
v167 = 0;
v168 = 0;
v169 = 0;
v156 = 0;
v157 = 0;
v158 = 0;
v159 = 0;
v160 = 0;
v161 = 0;
v170 = 0;
v171 = 0;
v172 = 0;
v173 = 0;
v174 = 0;
v162 = 0;
v163 = 0;
v164 = 0;
v176 = 0;
insert_hint_unique_pos_6 = 0;
v180 = 0;
v178 = &v176;
v179 = &v176;
std::string::string((std::string *)v132, stdArchFile);
HUBSimpleScanner::HUBSimpleScanner(v187, v132);
std::string::_Rep::_M_dispose(v132[0] - 24LL, &v181);
HUBSimpleScanner::readTargetWord((HUBSimpleScanner *)v187, "xngd", 1);
HUBSimpleScanner::scanInt((HUBSimpleScanner *)v187, 1, "version number");
HUBSimpleScanner::scanWord((HUBSimpleScanner *)s1, (bool)v187, (const char *)&dword_0 + 1);
qword28 = (_QWORD *)this->qword28;
n = *((_QWORD *)s1[0] - 3);
if ( n != *(qword28 - 3) || memcmp(s1[0], qword28, n) )
{
exception = __cxa_allocate_exception(0x10u);
v5 = s1[0];
std::string::string(v133, "Mismatched arch name '%s', expected '%s'", (const char *)v152, v6);
HUBSimpleScanner::buildException(exception, v187, v133, v5);
std::string::_Rep::_M_dispose(v133[0] - 24LL, &v181);
__cxa_throw(
exception,
(struct type_info *)&`typeinfo for'HUBSimpleScanner::ScanException,
(void (*)(void *))HUBSimpleScanner::ScanException::~ScanException);
}
HUBSimpleScanner::scanWord((HUBSimpleScanner *)v134, (bool)v187, (const char *)&dword_0 + 1);
std::string::swap((std::string *)&this->qword30, (std::string *)v134);
std::string::_Rep::_M_dispose(v134[0] - 24LL, &v181);
HUBSimpleScanner::scanTargetChar((HUBSimpleScanner *)v187, 59, 1);
HUBSimpleScanner::scanTargetWord((HUBSimpleScanner *)v187, "NumSites", 1);
*(_DWORD *)&this->byte0 = (16 * (HUBSimpleScanner::scanInt((HUBSimpleScanner *)v187, 1, "site count") & 0x3FFFFF))
| *(_DWORD *)&this->byte0 & 0xFC00000F;
HUBSimpleScanner::scanTargetChar((HUBSimpleScanner *)v187, 59, 1);
HDDMDevice::allocatesites(this);
HUBSimpleScanner::scanTargetWord((HUBSimpleScanner *)v187, "TileGridExtent", 1);
this->word6 = HUBSimpleScanner::scanInt((HUBSimpleScanner *)v187, 1, "tile grid x");
this->word4 = HUBSimpleScanner::scanInt((HUBSimpleScanner *)v187, 1, "tile grid y");
HUBSimpleScanner::scanTargetChar((HUBSimpleScanner *)v187, 59, 1);
HDDMDevice::allocatesupersites(this);
HUBSimpleScanner::scanTargetWord((HUBSimpleScanner *)v187, "RpmGridExtent", 1);
this->word8 = HUBSimpleScanner::scanInt((HUBSimpleScanner *)v187, 1, "rpm grid x");
this->wordA = HUBSimpleScanner::scanInt((HUBSimpleScanner *)v187, 1, "rpm grid y");
HUBSimpleScanner::scanTargetChar((HUBSimpleScanner *)v187, 59, 1);
HUBSimpleScanner::scanTargetWord((HUBSimpleScanner *)v187, "NumChips", 1);
v7 = HUBSimpleScanner::scanInt((HUBSimpleScanner *)v187, 1, "chip count");
v123 = v7;
HUBSimpleScanner::scanTargetChar((HUBSimpleScanner *)v187, 59, 1);
v8 = v154;
v9 = v153;
v10 = 0x8E38E38E38E38E39LL * ((v154 - v153) >> 3);
if ( v7 > v10 )
{
std::vector<HDDMChipDesc>::_M_default_append(&v153, v7 - v10);
v9 = v153;
}
else if ( v7 < v10 )
{
v11 = (HDDMChipDesc *)((char *)v153 + 72 * v7);
if ( v154 != v11 )
{
v12 = (HDDMChipDesc *)((char *)v153 + 72 * v7);
v13 = v12;
v14 = (__int64)v11 + 32;
v15 = (__int64)v11 + 8;
do
{
v16 = v12;
v12 = (HDDMChipDesc *)((char *)v12 + 72);
v17 = v16 - v13;
std::string::_Rep::_M_dispose(*(_QWORD *)(v17 + v14) - 24LL, &v181);
std::string::_Rep::_M_dispose(*(_QWORD *)(v17 + v15) - 24LL, &v181);
std::string::_Rep::_M_dispose(*((_QWORD *)v12 - 9) - 24LL, &v181);
}
while ( v8 != v12 );
v11 = v13;
v9 = v153;
}
v154 = v11;
}
v182 = 0;
v183 = 0;
v186 = 0;
v184 = &v182;
v185 = &v182;
if ( v123 > 0 )
{
v116 = 0;
v18 = 0;
do
{
v19 = (char *)v9 + (_QWORD)v116;
*((_DWORD *)v19 + 16) = v18;
HUBSimpleScanner::scanTargetWord((HUBSimpleScanner *)v187, "Chip", 1);
HUBSimpleScanner::scanWord((HUBSimpleScanner *)v135, (bool)v187, (const char *)&dword_0 + 1);
std::string::swap((std::string *)v19, (std::string *)v135);
std::string::_Rep::_M_dispose(v135[0] - 24LL, v152);
HUBSimpleScanner::scanWord((HUBSimpleScanner *)v136, (bool)v187, (const char *)&dword_0 + 1);
std::string::swap((std::string *)(v19 + 8), (std::string *)v136);
std::string::_Rep::_M_dispose(v136[0] - 24LL, v152);
HUBSimpleScanner::scanTargetChar((HUBSimpleScanner *)v187, 123, 1);
std::_Rb_tree<std::string,std::string,std::_Identity<std::string>,std::less<std::string>,std::allocator<std::string>>::_M_insert_unique<std::string const&>(
&v181,
v19 + 8);
if ( !v20 )
{
v113 = __cxa_allocate_exception(0x10u);
v114 = *((_QWORD *)v19 + 1);
std::string::string(v137, "Chip name '%s' not unique", (const char *)v150);
HUBSimpleScanner::buildException(v113, v187, v137, v114);
std::string::_Rep::_M_dispose(v137[0] - 24LL, v152);
__cxa_throw(
v113,
(struct type_info *)&`typeinfo for'HUBSimpleScanner::ScanException,
(void (*)(void *))HUBSimpleScanner::ScanException::~ScanException);
}
std::string::string((std::string *)v152, stdArchFile);
boost::filesystem::path::parent_path((boost::filesystem::path *)&v138);
boost::filesystem::path::parent_path((boost::filesystem::path *)v139);
std::string::assign((std::string *)v152, (const std::string *)v139);
std::string::_Rep::_M_dispose(v139[0] - 24LL, v150);
v21 = (boost::filesystem::path *)(v138 - 24);
std::string::_Rep::_M_dispose(v138 - 24, v150);
boost::filesystem::path::codecvt(v21);
sub_A8D730((std::string *)v152, (const char **)v19);
std::string::string((std::string *)v140, (const std::string *)v19);
std::string::append((std::string *)v140, ".xng", 4u);
boost::filesystem::path::codecvt((boost::filesystem::path *)v140);
sub_A8D730((std::string *)v152, v140);
std::string::_Rep::_M_dispose(v140[0] - 24, v150);
if ( (unsigned int)boost::filesystem::detail::status(v152, 0) <= 1 )
{
std::string::_M_mutate((std::string *)v152, 0, *((_QWORD *)v152[0] - 3), 0);
boost::filesystem::path::codecvt((boost::filesystem::path *)v152);
v22 = *(_QWORD *)(*(_QWORD *)stdArchFile - 24LL);
if ( v22 )
std::string::replace((std::string *)v152, *((_QWORD *)v152[0] - 3), 0, *(const char **)stdArchFile, v22);
boost::filesystem::path::remove_filename((boost::filesystem::path *)v152);
std::string::string((std::string *)v141, (const std::string *)v19);
std::string::append((std::string *)v141, ".xng", 4u);
boost::filesystem::path::codecvt((boost::filesystem::path *)v141);
sub_A8D730((std::string *)v152, v141);
std::string::_Rep::_M_dispose(v141[0] - 24, v150);
}
std::string::assign((std::string *)(v19 + 32), (const std::string *)v152);
v150[0] = 0;
v149[0] = 0;
std::string::string((std::string *)v142, (const std::string *)(v19 + 32));
HDDMDeviceCache::getFileTypeAndVersion(
(HDDMDeviceCache *)HDDMDeviceCache::m_devcache,
(const HSTString *)v142,
v149,
v150);
std::string::_Rep::_M_dispose(v142[0] - 24LL, v148);
if ( v149[0] != 2 )
{
v110 = (HEXDataException *)__cxa_allocate_exception(0x18u);
std::string::string((std::string *)&v144, (const std::string *)(v19 + 32));
std::string::string(&v143, "File is not a chip XNG:", v147);
sub_8287CE(v110, (int)v152, (__int64)this);
std::string::_Rep::_M_dispose(v143 - 24, v148);
std::string::_Rep::_M_dispose(v144 - 24, v148);
__cxa_throw(
v110,
(struct type_info *)&`typeinfo for'HEXDataException,
(void (*)(void *))HEXDataException::~HEXDataException);
}
HUBSimpleScanner::scanTargetWord((HUBSimpleScanner *)v187, "TileGridOrigin", 1);
*((_WORD *)v19 + 10) = HUBSimpleScanner::scanInt((HUBSimpleScanner *)v187, 1, "tile grid x");
*((_WORD *)v19 + 11) = HUBSimpleScanner::scanInt((HUBSimpleScanner *)v187, 1, "tile grid y");
HUBSimpleScanner::scanTargetChar((HUBSimpleScanner *)v187, 59, 1);
HUBSimpleScanner::scanTargetWord((HUBSimpleScanner *)v187, "RpmGridOrigin", 1);
*((_WORD *)v19 + 8) = HUBSimpleScanner::scanInt((HUBSimpleScanner *)v187, 1, "rpm grid x");
*((_WORD *)v19 + 9) = HUBSimpleScanner::scanInt((HUBSimpleScanner *)v187, 1, "rpm grid y");
HUBSimpleScanner::scanTargetChar((HUBSimpleScanner *)v187, 59, 1);
HUBSimpleScanner::scanTargetWord((HUBSimpleScanner *)v187, "GraphicsOrigin", 1);
*((_WORD *)v19 + 12) = HUBSimpleScanner::scanInt((HUBSimpleScanner *)v187, 1, "graphics x");
*((_WORD *)v19 + 13) = HUBSimpleScanner::scanInt((HUBSimpleScanner *)v187, 1, "graphics y");
HUBSimpleScanner::scanTargetChar((HUBSimpleScanner *)v187, 59, 1);
HUBSimpleScanner::scanTargetChar((HUBSimpleScanner *)v187, 125, 1);
++v18;
std::string::_Rep::_M_dispose(v152[0] - 24, v148);
v116 = (HSTString *)((char *)v116 + 72);
v9 = v153;
}
while ( v18 != v123 );
}
v152[0] = 0;
std::vector<HDDMChip *>::_M_fill_assign(&this->qword318, 0x8E38E38E38E38E39LL * ((v154 - v9) >> 3), v152);
v23 = v153;
if ( v154 != v153 )
{
v24 = (HDDMChipDesc *)((char *)v154 - 72);
v25 = 0;
v26 = 0;
v27 = (_DWORD *)((char *)v154 - 16);
while ( 1 )
{
*v27 = v26;
v27[1] = v25;
HDDMDevice::readchip_pb(this, v24);
v26 += HDDMChipType::getNumTiles(*((HDDMChipType **)v27 - 2));
v25 += HDDMChipType::getNumSites(*((HDDMChipType **)v27 - 2));
v27 -= 18;
if ( v23 == v24 )
break;
v24 = (HDDMChipDesc *)((char *)v24 - 72);
}
}
HDDMDevice::setrecursivedeviceid(this, this->byte0 & 0xF);
HDDMDevice::createRPMGrid(this);
std::vector<bool>::resize(&v165, (unsigned __int16)this->word6 * (unsigned __int16)this->word4, 0);
if ( (unsigned __int8)HUBSimpleScanner::scanTargetWord((HUBSimpleScanner *)v187, "ExplicitTileNames", 0) )
{
HUBSimpleScanner::scanTargetChar((HUBSimpleScanner *)v187, 123, 1);
while ( !(unsigned __int8)HUBSimpleScanner::scanTargetChar((HUBSimpleScanner *)v187, 125, 0) )
{
v28 = HUBSimpleScanner::scanInt((HUBSimpleScanner *)v187, 1, "tile grid x");
v29 = HUBSimpleScanner::scanInt((HUBSimpleScanner *)v187, 1, "tile grid y");
HUBSimpleScanner::scanWord((HUBSimpleScanner *)v152, (bool)v187, (const char *)&dword_0 + 1);
TileAtGridXY = (HDDMTile *)HDDMDevice::getTileAtGridXY(this, v28, v29);
v31 = -858993459
* (unsigned int)(((__int64)TileAtGridXY
- *(_QWORD *)(HDDMDeviceCache::m_devcache[(*((_BYTE *)TileAtGridXY + 3) >> 4) & 0xF] + 200LL)) >> 3);
if ( v31 >= v168 + 8 * (v167 - (_QWORD)v165) - (unsigned __int64)v166 )
std::__throw_out_of_range("vector<bool>::_M_range_check");
*((_QWORD *)v165 + (v31 >> 6)) |= 1LL << v31;
HDDMTile::setname(TileAtGridXY, v152[0]);
std::string::_Rep::_M_dispose(v152[0] - 24, v150);
}
}
if ( (unsigned __int8)HUBSimpleScanner::scanTargetWord((HUBSimpleScanner *)v187, "ImplicitTileNameMap", 0) )
{
LODWORD(v152[0]) = -1;
std::vector<int>::resize(&v156, (unsigned __int16)this->word6, v152);
word4 = (unsigned __int16)this->word4;
LODWORD(v152[0]) = -1;
std::vector<int>::resize(&v159, word4, v152);
HUBSimpleScanner::scanTargetChar((HUBSimpleScanner *)v187, 123, 1);
HUBSimpleScanner::scanTargetWord((HUBSimpleScanner *)v187, "X", 1);
sub_A973A0(v187, &v156, "tile name x coordinate");
HUBSimpleScanner::scanTargetWord((HUBSimpleScanner *)v187, "Y", 1);
sub_A973A0(v187, &v159, "tile name y coordinate");
HUBSimpleScanner::scanTargetChar((HUBSimpleScanner *)v187, 125, 1);
}
std::vector<bool>::resize(&v170, (*(_DWORD *)&this->byte0 >> 4) & 0x3FFFFF, 0);
if ( (unsigned __int8)HUBSimpleScanner::scanTargetWord((HUBSimpleScanner *)v187, "ExplicitSiteNames", 0) )
{
HUBSimpleScanner::scanTargetChar((HUBSimpleScanner *)v187, 123, 1);
while ( !(unsigned __int8)HUBSimpleScanner::scanTargetChar((HUBSimpleScanner *)v187, 125, 0) )
{
v33 = HUBSimpleScanner::scanInt((HUBSimpleScanner *)v187, 1, "rpm grid x");
v34 = HUBSimpleScanner::scanInt((HUBSimpleScanner *)v187, 1, "rpm grid y");
HUBSimpleScanner::scanWord((HUBSimpleScanner *)v152, (bool)v187, (const char *)&dword_0 + 1);
v150[0] = v33;
v150[1] = v34;
SiteAtRpmGridPoint = (HDDMSite *)HDDMDevice::getSiteAtRpmGridPoint(this, v150);
if ( !SiteAtRpmGridPoint )
{
v111 = __cxa_allocate_exception(0x10u);
std::string::string(v145, "Empty RPM grid location %d,%d referenced", (unsigned int)v149, v112);
HUBSimpleScanner::buildException(v111, v187, v145, v33);
std::string::_Rep::_M_dispose(v145[0] - 24LL, v150);
__cxa_throw(
v111,
(struct type_info *)&`typeinfo for'HUBSimpleScanner::ScanException,
(void (*)(void *))HUBSimpleScanner::ScanException::~ScanException);
}
v36 = -1431655765
* (unsigned int)(((__int64)SiteAtRpmGridPoint
- *(_QWORD *)(HDDMDeviceCache::m_devcache[(*((_BYTE *)SiteAtRpmGridPoint + 8) >> 2) & 0xF]
+ 208LL)) >> 3);
if ( v36 >= v173 + 8 * (v172 - (_QWORD)v170) - (unsigned __int64)v171 )
std::__throw_out_of_range("vector<bool>::_M_range_check");
*((_QWORD *)v170 + (v36 >> 6)) |= 1LL << v36;
HDDMSite::setname(SiteAtRpmGridPoint, v152[0]);
std::string::_Rep::_M_dispose(v152[0] - 24, v150);
}
}
if ( (unsigned __int8)HUBSimpleScanner::scanTargetWord((HUBSimpleScanner *)v187, "ImplicitSiteNameMap", 0) )
{
HUBSimpleScanner::scanTargetChar((HUBSimpleScanner *)v187, 123, 1);
HUBSimpleScanner::scanTargetWord((HUBSimpleScanner *)v187, "NumSiteTypeGroups", 1);
v37 = HUBSimpleScanner::scanInt((HUBSimpleScanner *)v187, 1, "group count");
HUBSimpleScanner::scanTargetChar((HUBSimpleScanner *)v187, 59, 1);
v38 = v163;
v39 = 0x6DB6DB6DB6DB6DB7LL * ((__int64)&v163[-v162] >> 3);
if ( v37 > v39 )
{
std::vector<HDDMSiteTypeGroup>::_M_default_append(&v162, v37 - v39);
}
else if ( v37 < v39 )
{
v40 = (char *)(56LL * v37 + v162);
v41 = v40;
if ( v163 != v40 )
{
do
{
v42 = v41 - v40;
v43 = (void *)*((_QWORD *)v41 + 4);
if ( v43 )
{
operator delete(v43);
v42 = v41 - v40;
}
v44 = *(void **)&v40[v42 + 8];
if ( v44 )
operator delete(v44);
v45 = *(_QWORD *)v41;
v41 += 56;
std::string::_Rep::_M_dispose(v45 - 24, v152);
}
while ( v38 != v41 );
}
v163 = v40;
}
if ( v37 > 0 )
{
v124 = 0;
v126 = (HUBSimpleScanner *)(56 * ((unsigned int)(v37 - 1) + 1LL));
do
{
v46 = (HUBSimpleScanner *)((char *)v124 + v162);
v117 = (HUBSimpleScanner *)((char *)v124 + v162);
HUBSimpleScanner::scanTargetWord((HUBSimpleScanner *)v187, "SiteTypeGroup", 1);
HUBSimpleScanner::scanWord((HUBSimpleScanner *)v146, (bool)v187, (const char *)&dword_0 + 1);
std::string::swap(v46, (std::string *)v146);
std::string::_Rep::_M_dispose(v146[0] - 24LL, v152);
HUBSimpleScanner::scanTargetChar((HUBSimpleScanner *)v187, 40, 1);
while ( !(unsigned __int8)HUBSimpleScanner::scanTargetChar((HUBSimpleScanner *)v187, 41, 0) )
{
HUBSimpleScanner::scanWord((HUBSimpleScanner *)v152, (bool)v187, (const char *)&dword_0 + 1);
std::string::string((std::string *)v147, (const std::string *)v152);
SiteType = HDDMDevice::getSiteType(this, (const HSTString *)v147);
std::string::_Rep::_M_dispose(v147[0] - 24LL, v150);
if ( !SiteType )
{
v108 = __cxa_allocate_exception(0x10u);
v109 = v152[0];
std::string::string(v148, "No such siteType '%s'", (const char *)v149);
HUBSimpleScanner::buildException(v108, v187, v148, v109);
std::string::_Rep::_M_dispose(v148[0] - 24LL, v150);
__cxa_throw(
v108,
(struct type_info *)&`typeinfo for'HUBSimpleScanner::ScanException,
(void (*)(void *))HUBSimpleScanner::ScanException::~ScanException);
}
insert_hint_unique_pos_3 = insert_hint_unique_pos_6;
insert_hint_unique_pos_2 = (HSTString *)&v176;
if ( !insert_hint_unique_pos_6 )
goto LABEL_59;
do
{
while ( SiteType <= *((_QWORD *)insert_hint_unique_pos_3 + 4) )
{
insert_hint_unique_pos_2 = insert_hint_unique_pos_3;
insert_hint_unique_pos_3 = (HSTString *)*((_QWORD *)insert_hint_unique_pos_3 + 2);
if ( !insert_hint_unique_pos_3 )
goto LABEL_57;
}
insert_hint_unique_pos_3 = (HSTString *)*((_QWORD *)insert_hint_unique_pos_3 + 3);
}
while ( insert_hint_unique_pos_3 );
LABEL_57:
if ( insert_hint_unique_pos_2 == (HSTString *)&v176 || SiteType < *((_QWORD *)insert_hint_unique_pos_2 + 4) )
{
LABEL_59:
insert_hint_unique_pos_4 = insert_hint_unique_pos_2;
insert_hint_unique_pos_5 = (HSTString *)operator new(0x30u);
insert_hint_unique_pos_2 = insert_hint_unique_pos_5;
if ( insert_hint_unique_pos_5 )
{
*(_DWORD *)insert_hint_unique_pos_5 = 0;
*((_QWORD *)insert_hint_unique_pos_5 + 1) = 0;
*((_QWORD *)insert_hint_unique_pos_5 + 2) = 0;
*((_QWORD *)insert_hint_unique_pos_5 + 3) = 0;
*((_QWORD *)insert_hint_unique_pos_5 + 4) = SiteType;
*((_QWORD *)insert_hint_unique_pos_5 + 5) = 0;
}
insert_hint_unique_pos = std::_Rb_tree<HDDMSiteType const*,std::pair<HDDMSiteType const* const,HDDMSiteTypeGroup const*>,std::_Select1st<std::pair<HDDMSiteType const* const,HDDMSiteTypeGroup const*>>,std::less<HDDMSiteType const*>,std::allocator<std::pair<HDDMSiteType const* const,HDDMSiteTypeGroup const*>>>::_M_get_insert_hint_unique_pos(
v175,
insert_hint_unique_pos_4,
(char *)insert_hint_unique_pos_5 + 32);
if ( v52 )
{
v53 = 1;
if ( !insert_hint_unique_pos && (int *)v52 != &v176 )
v53 = *((_QWORD *)insert_hint_unique_pos_2 + 4) < *(_QWORD *)(v52 + 32);
std::_Rb_tree_insert_and_rebalance(v53, insert_hint_unique_pos_2, v52, &v176);
++v180;
}
else
{
insert_hint_unique_pos_1 = (HSTString *)insert_hint_unique_pos;
operator delete(insert_hint_unique_pos_2);
insert_hint_unique_pos_2 = insert_hint_unique_pos_1;
}
}
*((_QWORD *)insert_hint_unique_pos_2 + 5) = v117;
std::string::_Rep::_M_dispose(v152[0] - 24, v150);
}
LODWORD(v152[0]) = -1;
std::vector<int>::resize((char *)v117 + 8, (unsigned __int16)this->word8, v152);
wordA = (unsigned __int16)this->wordA;
LODWORD(v152[0]) = -1;
std::vector<int>::resize((char *)v117 + 32, wordA, v152);
HUBSimpleScanner::scanTargetChar((HUBSimpleScanner *)v187, 123, 1);
HUBSimpleScanner::scanTargetWord((HUBSimpleScanner *)v187, "X", 1);
sub_A8D650(v187, (char *)v117 + 8, "rpm x coordinate", "name x coordinate");
HUBSimpleScanner::scanTargetWord((HUBSimpleScanner *)v187, "Y", 1);
sub_A8D650(v187, (char *)v117 + 32, "rpm y coordinate", "name y coordinate");
HUBSimpleScanner::scanTargetChar((HUBSimpleScanner *)v187, 125, 1);
v124 = (HUBSimpleScanner *)((char *)v124 + 56);
}
while ( v124 != v126 );
}
HUBSimpleScanner::scanTargetChar((HUBSimpleScanner *)v187, 125, 1);
}
HUBSimpleScanner::scanTargetWord((HUBSimpleScanner *)v187, "End", 1);
HUBSimpleScanner::scanTargetChar((HUBSimpleScanner *)v187, 59, 1);
std::_Rb_tree<std::string,std::string,std::_Identity<std::string>,std::less<std::string>,std::allocator<std::string>>::_M_erase(
&v181,
v183);
std::string::_Rep::_M_dispose((char *)s1[0] - 24, v152);
HUBSimpleScanner::~HUBSimpleScanner((HUBSimpleScanner *)v187);
qwordB8_1 = operator new(0x30u);
*(_DWORD *)(qwordB8_1 + 8) = 0;
*(_QWORD *)(qwordB8_1 + 16) = 0;
*(_QWORD *)(qwordB8_1 + 40) = 0;
*(_QWORD *)(qwordB8_1 + 24) = qwordB8_1 + 8;
*(_QWORD *)(qwordB8_1 + 32) = qwordB8_1 + 8;
this->qwordB8 = qwordB8_1;
qwordC0_1 = operator new(0x30u);
*(_DWORD *)(qwordC0_1 + 8) = 0;
*(_QWORD *)(qwordC0_1 + 16) = 0;
*(_QWORD *)(qwordC0_1 + 40) = 0;
*(_QWORD *)(qwordC0_1 + 24) = qwordC0_1 + 8;
*(_QWORD *)(qwordC0_1 + 32) = qwordC0_1 + 8;
word4_1 = (unsigned __int16)this->word4;
word6 = (unsigned __int16)this->word6;
this->qwordC0 = qwordC0_1;
if ( word6 * word4_1 )
{
v59 = v165;
if ( v166 == v168 + 8 * (v167 - (_QWORD)v165) )
LABEL_135:
std::__throw_out_of_range("vector<bool>::_M_range_check");
v60 = 1;
v61 = 0;
v62 = 0;
while ( 1 )
{
if ( ((1LL << v61) & v59[v61 >> 6]) == 0 )
{
v67 = (HDDMTile *)(this->qwordC8 + 40 * v62);
v68 = HDDMDeviceCache::m_devcache[(*((_BYTE *)v67 + 3) >> 4) & 0xF];
v69 = -858993459 * (unsigned int)(((__int64)v67 - *(_QWORD *)(v68 + 200)) >> 3) % *(unsigned __int16 *)(v68 + 6);
v70 = *(_WORD *)(v68 + 4)
+ ~(unsigned __int16)(-858993459
* (unsigned int)(((__int64)v67 - *(_QWORD *)(v68 + 200)) >> 3)
/ *(unsigned __int16 *)(v68 + 6));
if ( v157 == v156 )
{
v125 = (unsigned __int16)v69;
v127 = v70;
}
else
{
if ( (unsigned __int16)v69 >= (unsigned __int64)((v157 - (_BYTE *)v156) >> 2) )
std::__throw_out_of_range("vector::_M_range_check");
v125 = *((_DWORD *)v156 + (unsigned __int16)v69);
if ( v70 >= (unsigned __int64)((v160 - (__int64)v159) >> 2) )
std::__throw_out_of_range("vector::_M_range_check");
v127 = *((_DWORD *)v159 + v70);
}
std::ios_base::ios_base((std::ios_base *)v198);
v199 = 0;
v200 = 0;
v201 = 0;
v202 = 0;
v203 = 0;
v204 = 0;
v198[0] = (char *)&`vtable for'std::ios + 16;
v205 = 0;
v63 = `VTT for'std::ostringstream[1];
v64 = (HUBSimpleScanner *)`VTT for'std::ostringstream[2];
*(_QWORD *)v187 = v63;
v129 = v64;
*(_QWORD *)&v187[*(_QWORD *)(v63 - 24)] = v64;
std::ios::init(&v187[*(_QWORD *)(*(_QWORD *)v187 - 24LL)], 0);
v189 = 0;
v190 = 0;
v191 = 0;
v192 = 0;
v193 = 0;
v194 = 0;
*(_QWORD *)v187 = (char *)&`vtable for'std::ostringstream + 24;
v198[0] = (char *)&`vtable for'std::ostringstream + 64;
v188 = (char *)&`vtable for'std::streambuf + 16;
std::locale::locale((std::locale *)&v195);
n16 = 16;
v188 = (char *)&`vtable for'std::stringbuf + 16;
v197 = (char *)&std::string::_Rep::_S_empty_rep_storage + 24;
std::ios::init(v198, &v188);
HDDMTileType::getName((HDDMTileType *)s1);
v65 = std::__ostream_insert<char,std::char_traits<char>>(v187, s1[0], *((_QWORD *)s1[0] - 3));
std::__ostream_insert<char,std::char_traits<char>>(v65, "_X", 2);
v66 = std::ostream::operator<<(v65, v125);
std::__ostream_insert<char,std::char_traits<char>>(v66, "Y", 1);
std::ostream::operator<<(v66, v127);
std::string::_Rep::_M_dispose((char *)s1[0] - 24, &v181);
std::stringbuf::str(v152, &v188);
HDDMTile::setname(v67, v152[0]);
std::string::_Rep::_M_dispose(v152[0] - 24, &v181);
*(_QWORD *)v187 = (char *)&`vtable for'std::ostringstream + 24;
v198[0] = (char *)&`vtable for'std::ostringstream + 64;
v188 = (char *)&`vtable for'std::stringbuf + 16;
std::string::_Rep::_M_dispose(v197 - 24, &v181);
v188 = (char *)&`vtable for'std::streambuf + 16;
std::locale::~locale((std::locale *)&v195);
*(_QWORD *)v187 = v63;
*(_QWORD *)&v187[*(_QWORD *)(v63 - 24)] = v129;
v198[0] = (char *)&`vtable for'std::ios + 16;
std::ios_base::~ios_base((std::ios_base *)v198);
word4_1 = (unsigned __int16)this->word4;
word6 = (unsigned __int16)this->word6;
}
v62 = (unsigned int)v60;
if ( (unsigned int)v60 >= word6 * word4_1 )
break;
v59 = v165;
if ( v60 >= v168 + 8 * (v167 - (_QWORD)v165) - (unsigned __int64)v166 )
goto LABEL_135;
v61 = v60++;
}
}
v71 = *(_DWORD *)&this->byte0;
if ( (*(_DWORD *)&this->byte0 & 0x3FFFFF0) != 0 )
{
v72 = v170;
if ( v173 + 8 * (v172 - (_QWORD)v170) == v171 )
LABEL_129:
std::__throw_out_of_range("vector<bool>::_M_range_check");
v73 = 1;
v74 = 0;
v75 = 0;
while ( 1 )
{
if ( ((1LL << v74) & v72[v74 >> 6]) == 0 )
{
v76 = this->qwordD0 + 24 * v75;
if ( (*(_BYTE *)(v76 + 8) & 0x40) != 0 )
{
v130 = -1;
v77 = -1;
v128 = -1;
v78 = -1;
}
else
{
v77 = *(__int16 *)(v76 + 4);
v78 = *(__int16 *)(v76 + 6);
v128 = (__int16)v77;
v130 = (__int16)v78;
}
HDDMTileType::getName((HDDMTileType *)v187);
v152[0] = *(char **)v187;
*(_QWORD *)v187 = (char *)&std::string::_Rep::_S_empty_rep_storage + 24;
std::string::_Rep::_M_dispose(&std::string::_Rep::_S_empty_rep_storage, &v181);
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS8_ERS4__2 = (HSTString *)&v176;
v80 = *(_QWORD *)(HDDMDeviceCache::m_devcache[(*(_BYTE *)(v76 + 8) >> 2) & 0xF] + 200LL)
+ 40LL * ((*(_DWORD *)v76 >> 2) & 0x3FFFFF);
v81 = *(_QWORD *)(*(_QWORD *)(*(_QWORD *)(*(_QWORD *)(HDDMDeviceCache::m_devcache[(*(_BYTE *)(v80 + 3) >> 4)
& 0xF]
+ 160LL)
+ 8LL * (*(_WORD *)(v80 + 6) >> 6))
+ 120LL)
+ 8LL * *(unsigned __int8 *)(v76 + 3));
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS8_ERS4__3 = insert_hint_unique_pos_6;
if ( !insert_hint_unique_pos_6 )
goto LABEL_96;
do
{
while ( v81 <= *((_QWORD *)insert_hint_unique_posESt23_Rb_tree_const_iteratorIS8_ERS4__3 + 4) )
{
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS8_ERS4__2 = insert_hint_unique_posESt23_Rb_tree_const_iteratorIS8_ERS4__3;
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS8_ERS4__3 = (HSTString *)*((_QWORD *)insert_hint_unique_posESt23_Rb_tree_const_iteratorIS8_ERS4__3
+ 2);
if ( !insert_hint_unique_posESt23_Rb_tree_const_iteratorIS8_ERS4__3 )
goto LABEL_94;
}
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS8_ERS4__3 = (HSTString *)*((_QWORD *)insert_hint_unique_posESt23_Rb_tree_const_iteratorIS8_ERS4__3
+ 3);
}
while ( insert_hint_unique_posESt23_Rb_tree_const_iteratorIS8_ERS4__3 );
LABEL_94:
if ( insert_hint_unique_posESt23_Rb_tree_const_iteratorIS8_ERS4__2 == (HSTString *)&v176
|| v81 < *((_QWORD *)insert_hint_unique_posESt23_Rb_tree_const_iteratorIS8_ERS4__2 + 4) )
{
LABEL_96:
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS8_ERS4__4 = insert_hint_unique_posESt23_Rb_tree_const_iteratorIS8_ERS4__2;
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS8_ERS4__6 = (HSTString *)operator new(0x30u);
if ( insert_hint_unique_posESt23_Rb_tree_const_iteratorIS8_ERS4__6 )
{
*(_DWORD *)insert_hint_unique_posESt23_Rb_tree_const_iteratorIS8_ERS4__6 = 0;
*((_QWORD *)insert_hint_unique_posESt23_Rb_tree_const_iteratorIS8_ERS4__6 + 1) = 0;
*((_QWORD *)insert_hint_unique_posESt23_Rb_tree_const_iteratorIS8_ERS4__6 + 2) = 0;
*((_QWORD *)insert_hint_unique_posESt23_Rb_tree_const_iteratorIS8_ERS4__6 + 3) = 0;
*((_QWORD *)insert_hint_unique_posESt23_Rb_tree_const_iteratorIS8_ERS4__6 + 4) = v81;
*((_QWORD *)insert_hint_unique_posESt23_Rb_tree_const_iteratorIS8_ERS4__6 + 5) = 0;
}
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS8_ERS4__5 = insert_hint_unique_posESt23_Rb_tree_const_iteratorIS8_ERS4__6;
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS8_ERS4_ = std::_Rb_tree<HDDMSiteType const*,std::pair<HDDMSiteType const* const,HDDMSiteTypeGroup const*>,std::_Select1st<std::pair<HDDMSiteType const* const,HDDMSiteTypeGroup const*>>,std::less<HDDMSiteType const*>,std::allocator<std::pair<HDDMSiteType const* const,HDDMSiteTypeGroup const*>>>::_M_get_insert_hint_unique_pos(
v175,
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS8_ERS4__4,
(char *)insert_hint_unique_posESt23_Rb_tree_const_iteratorIS8_ERS4__6
+ 32);
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS8_ERS4__1 = (HSTString *)insert_hint_unique_posESt23_Rb_tree_const_iteratorIS8_ERS4_;
if ( v85 )
{
v87 = 1;
if ( !insert_hint_unique_posESt23_Rb_tree_const_iteratorIS8_ERS4_ && (int *)v85 != &v176 )
v87 = *((_QWORD *)insert_hint_unique_posESt23_Rb_tree_const_iteratorIS8_ERS4__5 + 4) < *(_QWORD *)(v85 + 32);
std::_Rb_tree_insert_and_rebalance(
v87,
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS8_ERS4__5,
v85,
&v176);
++v180;
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS8_ERS4__2 = insert_hint_unique_posESt23_Rb_tree_const_iteratorIS8_ERS4__5;
}
else
{
operator delete(insert_hint_unique_posESt23_Rb_tree_const_iteratorIS8_ERS4__5);
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS8_ERS4__2 = insert_hint_unique_posESt23_Rb_tree_const_iteratorIS8_ERS4__1;
}
}
v88 = (const std::string *)*((_QWORD *)insert_hint_unique_posESt23_Rb_tree_const_iteratorIS8_ERS4__2 + 5);
if ( v88 )
{
v89 = *((_QWORD *)v88 + 1);
if ( v77 >= (*((_QWORD *)v88 + 2) - v89) >> 2 )
std::__throw_out_of_range("vector::_M_range_check");
v90 = *(_DWORD *)(v89 + 4 * v77);
v91 = *((_QWORD *)v88 + 4);
if ( v78 >= (*((_QWORD *)v88 + 5) - v91) >> 2 )
std::__throw_out_of_range("vector::_M_range_check");
v92 = *(_DWORD *)(v91 + 4 * v78);
if ( v92 >= 0 && v90 >= 0 )
{
std::string::assign((std::string *)v152, v88);
v130 = v92;
v128 = v90;
}
}
std::ios_base::ios_base((std::ios_base *)v198);
v199 = 0;
v200 = 0;
v201 = 0;
v202 = 0;
v203 = 0;
v204 = 0;
v198[0] = (char *)&`vtable for'std::ios + 16;
v205 = 0;
v93 = `VTT for'std::ostringstream[1];
v94 = (boost::filesystem::path *)`VTT for'std::ostringstream[2];
*(_QWORD *)v187 = v93;
v131 = v94;
*(_QWORD *)&v187[*(_QWORD *)(v93 - 24)] = v94;
std::ios::init(&v187[*(_QWORD *)(*(_QWORD *)v187 - 24LL)], 0);
v189 = 0;
v190 = 0;
v191 = 0;
v192 = 0;
v193 = 0;
v194 = 0;
*(_QWORD *)v187 = (char *)&`vtable for'std::ostringstream + 24;
v198[0] = (char *)&`vtable for'std::ostringstream + 64;
v188 = (char *)&`vtable for'std::streambuf + 16;
std::locale::locale((std::locale *)&v195);
n16 = 16;
v188 = (char *)&`vtable for'std::stringbuf + 16;
v197 = (char *)&std::string::_Rep::_S_empty_rep_storage + 24;
std::ios::init(v198, &v188);
v95 = std::__ostream_insert<char,std::char_traits<char>>(v187, v152[0], *((_QWORD *)v152[0] - 3));
std::__ostream_insert<char,std::char_traits<char>>(v95, "_X", 2);
v96 = std::ostream::operator<<(v95, v128);
std::__ostream_insert<char,std::char_traits<char>>(v96, "Y", 1);
std::ostream::operator<<(v96, v130);
std::stringbuf::str(&v181, &v188);
HDDMSite::setname((HDDMSite *)v76, v181);
std::string::_Rep::_M_dispose(v181 - 24, s1);
*(_QWORD *)v187 = (char *)&`vtable for'std::ostringstream + 24;
v198[0] = (char *)&`vtable for'std::ostringstream + 64;
v188 = (char *)&`vtable for'std::stringbuf + 16;
std::string::_Rep::_M_dispose(v197 - 24, &v181);
v188 = (char *)&`vtable for'std::streambuf + 16;
std::locale::~locale((std::locale *)&v195);
*(_QWORD *)v187 = v93;
*(_QWORD *)&v187[*(_QWORD *)(v93 - 24)] = v131;
v198[0] = (char *)&`vtable for'std::ios + 16;
std::ios_base::~ios_base((std::ios_base *)v198);
std::string::_Rep::_M_dispose(v152[0] - 24, &v181);
v71 = *(_DWORD *)&this->byte0;
}
v75 = (unsigned int)v73;
if ( (unsigned int)v73 >= ((v71 >> 4) & 0x3FFFFF) )
break;
v72 = v170;
if ( v73 >= v173 + 8 * (v172 - (_QWORD)v170) - (unsigned __int64)v171 )
goto LABEL_129;
v74 = v73++;
}
}
if ( (unsigned int)HDDMDevice::getNumChips(this) > 1 )
{
v97 = 0;
for ( i = 0;
v97 < (unsigned __int16)this->word6 * (unsigned int)(unsigned __int16)this->word4;
*v101 = -858993459
* ((v100 - *(_QWORD *)(HDDMDeviceCache::m_devcache[(*(_BYTE *)(v100 + 3) >> 4) & 0xF] + 200LL)) >> 3) )
{
qwordC0 = this->qwordC0;
v100 = this->qwordC8 + 40 * i;
*(_QWORD *)v187 = v100 + 16;
v101 = (_DWORD *)std::map<std::string const*,unsigned int,HDDMChipType::_DerefStringPtrLessThan,std::allocator<std::pair<std::string const* const,unsigned int>>>::operator[](
qwordC0,
v187);
i = ++v97;
}
v102 = 0;
v103 = 0;
if ( (*(_DWORD *)&this->byte0 & 0x3FFFFF0) != 0 )
{
do
{
qwordB8 = this->qwordB8;
v105 = this->qwordD0 + 24 * v102;
*(_QWORD *)v187 = v105 + 16;
v106 = (_DWORD *)std::map<std::string const*,unsigned int,HDDMChipType::_DerefStringPtrLessThan,std::allocator<std::pair<std::string const* const,unsigned int>>>::operator[](
qwordB8,
v187);
v102 = ++v103;
*v106 = -1431655765
* ((v105 - *(_QWORD *)(HDDMDeviceCache::m_devcache[(*(_BYTE *)(v105 + 8) >> 2) & 0xF] + 208LL)) >> 3);
}
while ( v103 < ((*(_DWORD *)&this->byte0 >> 4) & 0x3FFFFFu) );
}
}
std::_Rb_tree<HDDMSiteType const*,std::pair<HDDMSiteType const* const,HDDMSiteTypeGroup const*>,std::_Select1st<std::pair<HDDMSiteType const* const,HDDMSiteTypeGroup const*>>,std::less<HDDMSiteType const*>,std::allocator<std::pair<HDDMSiteType const* const,HDDMSiteTypeGroup const*>>>::_M_erase(
v175,
insert_hint_unique_pos_6);
std::vector<HDDMSiteTypeGroup>::~vector(&v162);
if ( v170 )
operator delete(v170);
if ( v159 )
operator delete(v159);
if ( v156 )
operator delete(v156);
if ( v165 )
operator delete(v165);
return std::vector<HDDMChipDesc>::~vector(&v153);
}
最新发布