sub_140A0C0FC
INT64 __fastcall sub_140A0C0FC(INT64 *a1, INT64 a2, INT64 a3){
INT64 v3;
__int64 v4;
int *v5;
INT64 result;
int v7;
int *v8;
unsigned __int64 v9;
_BYTE *v10;
unsigned int v11;
unsigned int v12;
INT64 v13;
int v14;
unsigned int v15;
unsigned int v16;
int v17;
unsigned int v18;
INT64 v19;
__int64 v20;
int v21;
int v22;
int v23;
int v24;
__int64 v25;
int v26;
__int64 v27;
unsigned int v28;
CHAR v29;
__int64(__fastcall *v30)(INT64, char *, _QWORD, unsigned __int64);
UINT64 *v31;
int v32;
int v33;
int v34;
int *v35;
unsigned int v36;
unsigned int v37;
_BYTE *v38;
unsigned int v39;
unsigned int v40;
int v41;
_BYTE *v42;
unsigned int v43;
UINT64 **v44;
__int64 v45;
int v46;
int v47;
int v48;
int v49;
__int64 v50;
int v51;
unsigned __int64 v52;
__int64 v53;
int v54;
__int64 v55;
int v56;
ULONG_PTR v57;
__int64(__fastcall *v58)(ULONG_PTR, __int64, _QWORD, int *);
__int64 v59;
__int64(__fastcall *v60)(ULONG_PTR, __int64, __int64, int *);
INT64 v61;
INT64 v62;
__int64(__fastcall *v63)(ULONG_PTR, INT64, __int64, int *);
__int64(__fastcall *v64)(ULONG_PTR);
__int64 v65;
__int64 v66;
INT64 v67;
__int64 v68;
int v69;
unsigned int v70;
INT64 v71;
int v72;
unsigned int v73;
__int64 v74;
int v75;
unsigned __int64 v76;
int v77;
int v78;
__int64 *v79;
int *v80;
int *v81;
int *v82;
__int64 v83;
__int64 v84;
_QWORD *v85;
int v86;
_QWORD *v87;
char *v88;
int v89;
__int64 v90;
unsigned __int64 v91;
unsigned int v92;
__int64 v93;
__int64 v94;
unsigned __int128 v95;
unsigned int v96;
unsigned __int64 v97;
__int64 v98;
unsigned __int64 i;
bool v100;
_DWORD *v101;
ULONG_PTR v102;
int v103;
CHAR v104;
__int64 v105;
_BYTE *v106;
_DWORD *v107;
unsigned int v108;
int v109;
_QWORD *v110;
_DWORD *v111;
_QWORD *v112;
_QWORD *v113;
char *v114;
int v115;
__int64 v116;
unsigned __int64 v117;
ULONG_PTR v118;
unsigned int v119;
__int64 v120;
ULONG_PTR v121;
__int64 v122;
unsigned __int64 v123;
unsigned int v124;
unsigned __int64 v125;
__int64 v126;
ULONG_PTR j;
__int64 v128;
__int64 v129;
int v130;
int v131;
__int64 v132;
unsigned int v133;
_BYTE *v134;
int v135;
unsigned int v136;
__int64 v137;
int v138;
unsigned __int64 v139;
int v140;
int v141;
int v142;
__int64 v143;
_QWORD *v144;
unsigned __int64 v145;
_QWORD *v146;
unsigned int v147;
int v148;
__int64 v149;
char *v150;
unsigned int v151;
__int64 v152;
__int64 v153;
unsigned __int128 v154;
unsigned __int64 v155;
__int64 v156;
ULONG_PTR k;
__int64 v158;
ULONG_PTR v159;
BOOL v160;
unsigned int v161;
bool v162;
__int64 v163;
__int64 v164;
int v165;
_QWORD *v166;
_QWORD *v167;
_DWORD *v168;
unsigned __int16 v169;
unsigned int v170;
unsigned int v171;
UINT64 *v172;
char *v173;
unsigned int *v174;
__int64 v175;
unsigned int v176;
unsigned int v177;
unsigned int v178;
unsigned int v179;
__int64 v180;
unsigned int v181;
unsigned int v182;
unsigned int v183;
unsigned int *v184;
unsigned int *v185;
ULONG_PTR v186;
unsigned int *v187;
unsigned int v188;
int v189;
_DWORD *v190;
__int64 v191;
_BYTE *v192;
int v193;
__int64 v194;
unsigned int v195;
INT64 v196;
int v197;
unsigned int v198;
__int64 v199;
int v200;
unsigned __int64 v201;
int v202;
int v203;
INT64 v204;
_QWORD *v205;
__int64 v206;
int v207;
unsigned __int64 v208;
unsigned __int64 m;
ULONG_PTR v210;
_DWORD *v211;
__int64 v212;
UINT64 *v213;
__int64 v214;
_DWORD *v215;
__int64 v216;
_DWORD *v217;
__int64 v218;
int v219;
int v220;
__int16 v221;
char *v222;
int v223;
__int64 v224;
char v225;
char v226;
char *v227;
unsigned int v228;
char *v229;
__int64 v230;
__int64 v231;
char v232;
char v233;
char *v234;
int v235;
char v236;
char v237;
char *v238;
int v239;
char v240;
char v241;
int v242;
unsigned int v243;
__int64 v244;
INT64 v245;
unsigned int v246;
unsigned int v247;
unsigned int v248;
unsigned int v249;
int *v250;
ULONG_PTR v251;
unsigned int v252;
unsigned int v253;
__int64 *v254;
unsigned __int64 v255;
ULONG_PTR v256;
_QWORD *v257;
int v258;
char *v259;
__int64 v260;
unsigned int v261;
unsigned __int64 v262;
__int64 v263;
__int64 v264;
unsigned __int64 v265;
unsigned int v266;
unsigned __int64 v267;
__int64 v268;
unsigned __int64 n;
bool v270;
int v271;
unsigned int v272;
_BYTE *v273;
char v274;
__int64 v275;
unsigned __int64 v276;
unsigned int v277;
int *v278;
unsigned int v279;
unsigned __int64 v280;
__int64 *v281;
_QWORD *v282;
int v283;
char *v284;
__int64 v285;
unsigned int v286;
unsigned __int64 v287;
__int64 v288;
__int64 v289;
unsigned __int64 v290;
unsigned int v291;
unsigned __int64 v292;
__int64 v293;
unsigned __int64 ii;
unsigned __int64 v295;
unsigned __int64 v296;
unsigned int v297;
__int64 v298;
int *v299;
unsigned int v300;
unsigned __int64 v301;
__int64 *v302;
_QWORD *v303;
int v304;
char *v305;
__int64 v306;
unsigned int v307;
unsigned __int64 v308;
__int64 v309;
__int64 v310;
_QWORD *v311;
__int64 v312;
unsigned __int64 v313;
unsigned int v314;
unsigned __int64 v315;
__int64 v316;
unsigned __int64 jj;
INT64 v318;
unsigned int v319;
unsigned int v320;
__int64 v321;
__int64 v322;
__int64 v323;
__int64 v324;
__int64 v325;
__int64 kk;
__int64 v327;
INT64 v328;
ULONG_PTR BugCheckParameter4;
unsigned int v330;
int v331;
ULONG_PTR BugCheckParameter2;
_DWORD *v333;
UINT64 *a2a;
INT64 a5;
unsigned int v336;
unsigned int v337;
unsigned __int64 v338;
INT64 a1a;
INT64 v340;
_DWORD *v341;
INT64 v342;
INT64 v343;
INT64 a7;
__int64 v345;
unsigned int v346;
__int64 v347;
unsigned int v348;
UINT64 a8;
int v350;
int v351;
int v352;
int v353;
int v354;
int v355;
__int64 v356;
int v357[6];
int *v358;
__int64 v359;
int v360;
_DWORD *v361;
int *v362;
char *v363;
char *v364;
char *v365;
char *v366;
ULONG_PTR v367;
__int64 v368;
INT64 v369;
__int64 v370;
__int64 v371;
__int64 v372;
char v373[8];
__int64 v374;
int v375;
__int64 v376;
__int64 v377;
__int64 v378;
__int64 v379;
__int64 v380;
__int64 v381;
__int64 v382;
__int64 v383;
char v384[8];
ULONG_PTR v385;
int v386;
__int64 v387;
int v390;
CHAR a3a;
unsigned __int16 a3b;
int a3c;
v390 = a3;
v3 = a2;
a1a = *a1;
v4 = (*(__int64(__fastcall **)(INT64, char *))(a1a + 512))(a2, v373);
v5 = 0i64;
v359 = v374;
if( !v374 )
return 3221225595i64;
v7 = 4;
v347 = 0i64;
v8 = (int *)&v348;
v9 = 1i64;
do
{
*(_BYTE *)v8 = 0;
v8 = (int *)((char *)v8 + 1);
--v7;
}
while( v7 );
v10 = (_BYTE *)a1a;
v11 = 0;
v12 = *(_DWORD *)(a1a + 2060);
if( v12 )
{
v13 = *(_QWORD *)(a1a + 2680);
v14 = v375;
v15 = v348;
v16 = HIDWORD(v347);
v17 = v347;
while( 1 )
{
v18 = 0;
v19 = v13;
if( !v13 )
v19 = a1a;
v5 = (int *)(v19 + *(unsigned int *)(v19 + 2056));
if( v17 && v16 <= v11 )
{
v18 = v16;
v5 = (int *)(v19 + v15);
}
if( v18 != v11 )
break;
LABEL_36:
v16 = v18;
LODWORD(v347) = 1;
v9 = *v5;
v15 = (_DWORD)v5 - v19;
HIDWORD(v347) = v16;
v348 = (_DWORD)v5 - v19;
v17 = 1;
if( (unsigned int)v9 > 0x2B
|| (v27 = 0x80000001002i64, !_bittest64(&v27, v9))
|| *((_QWORD *)v5 + 1) != v4
|| v5[4] != v14 )
{
v28 = v9 - 33;
v9 = 1i64;
if( v28 > 1 || *((_QWORD *)v5 + 4) != v359 )
{
++v11;
v5 = 0i64;
if( v11 < v12 )
continue;
}
}
goto LABEL_43;
}
v20 = v11 - v18;
v18 = v11;
while( 1 )
{
v21 = *v5;
if( *v5 > 12 )
break;
if( v21 == 12 )
goto LABEL_28;
v22 = v21 - 1;
if( !v22 )
goto LABEL_28;
v23 = v22 - 6;
if( v23 )
{
v24 = v23 - 1;
if( !v24 )
{
v26 = *((unsigned __int16 *)v5 + 16);
LABEL_33:
v25 = (v26 + 55) & 0xFFFFFFF8;
goto LABEL_34;
}
if( v24 != 2 )
goto LABEL_30;
v25 = (unsigned int)(16 * (v5[7] + 3));
}
else
{
v25 = (unsigned int)(24 * (v5[6] + 2));
}
LABEL_34:
v5 = (int *)((char *)v5 + v25);
if( !--v20 )
{
v14 = v375;
v3 = a2;
goto LABEL_36;
}
}
if( v21 == 28 )
{
v26 = *((unsigned __int16 *)v5 + 20);
goto LABEL_33;
}
if( v21 == 30 )
{
v25 = (((v5[9] != 0 ? v5[9] - 1 : 0) / 0xCu + 7) & 0xFFFFFFF8) + 24 * (*((unsigned __int16 *)v5 + 20) + 2);
goto LABEL_34;
}
if( v21 <= 32 )
{
LABEL_30:
v25 = 48i64;
goto LABEL_34;
}
if( v21 <= 34 )
{
v25 = 20 * (unsigned int)(((v5[8] & 0xFFF) + (unsigned __int64)(unsigned int)v5[10] + 4095) >> 12) + 48;
goto LABEL_34;
}
if( v21 != 43 )
goto LABEL_30;
LABEL_28:
v25 = 4 * (v5[4] / 0xCu) + 48;
goto LABEL_34;
}
LABEL_43:
if( v5 )
return 3221225742i64;
v29 = v390;
v30 = *(__int64(__fastcall **)(INT64, char *, _QWORD, unsigned __int64))(a1a + 512);
a3a = v390;
v343 = a1a;
v31 = (UINT64 *)v30(v3, v384, 0i64, v9);
v32 = v386;
a2a = v31;
v331 = v386;
BugCheckParameter2 = v385;
if( !v385 )
goto LABEL_46;
v34 = 4;
v345 = 0i64;
v35 = (int *)&v346;
do
{
*(_BYTE *)v35 = 0;
v35 = (int *)((char *)v35 + 1);
--v34;
}
while( v34 );
v36 = *((_DWORD *)v10 + 515);
v37 = 0;
if( v36 )
{
v38 = (_BYTE *)*((_QWORD *)v10 + 335);
v39 = v346;
v40 = HIDWORD(v345);
v41 = v345;
while( 1 )
{
v42 = v38;
v43 = 0;
if( !v38 )
v42 = v10;
v44 = (UINT64 **)&v42[*((unsigned int *)v42 + 514)];
if( v41 && v40 <= v37 )
{
v43 = v40;
v44 = (UINT64 **)&v42[v39];
}
if( v43 != v37 )
break;
LABEL_80:
v40 = v43;
LODWORD(v345) = 1;
v52 = *(int *)v44;
v39 = (_DWORD)v44 - (_DWORD)v42;
HIDWORD(v345) = v40;
v346 = (_DWORD)v44 - (_DWORD)v42;
v41 = 1;
if( (unsigned int)v52 <= 0x2B )
{
v53 = 0x80000001002i64;
if( _bittest64(&v53, v52) )
{
if( v44[1] == a2a && *((_DWORD *)v44 + 4) == v32 )
goto LABEL_88;
}
}
if( (unsigned int)(v52 - 33) <= 1 && v44[4] == (UINT64 *)BugCheckParameter2 )
goto LABEL_88;
if( ++v37 >= v36 )
goto LABEL_87;
}
v45 = v37 - v43;
v43 = v37;
while( 1 )
{
v46 = *(_DWORD *)v44;
if( *(int *)v44 > 12 )
break;
if( v46 == 12 )
goto LABEL_72;
v47 = v46 - 1;
if( !v47 )
goto LABEL_72;
v48 = v47 - 6;
if( v48 )
{
v49 = v48 - 1;
if( !v49 )
{
v51 = *((unsigned __int16 *)v44 + 16);
LABEL_77:
v50 = (v51 + 55) & 0xFFFFFFF8;
goto LABEL_78;
}
if( v49 != 2 )
goto LABEL_74;
v50 = (unsigned int)(16 * (*((_DWORD *)v44 + 7) + 3));
}
else
{
v50 = (unsigned int)(24 * (*((_DWORD *)v44 + 6) + 2));
}
LABEL_78:
v44 = (UINT64 **)((char *)v44 + v50);
if( !--v45 )
{
v3 = a2;
v29 = v390;
goto LABEL_80;
}
}
if( v46 == 28 )
{
v51 = *((unsigned __int16 *)v44 + 20);
goto LABEL_77;
}
if( v46 == 30 )
{
v50 = (((*((_DWORD *)v44 + 9) != 0 ? *((_DWORD *)v44 + 9) - 1 : 0) / 0xCu + 7) & 0xFFFFFFF8)
+ 24 * (*((unsigned __int16 *)v44 + 20) + 2);
goto LABEL_78;
}
if( v46 <= 32 )
{
LABEL_74:
v50 = 48i64;
goto LABEL_78;
}
if( v46 <= 34 )
{
v50 = 20 * (unsigned int)((((_DWORD)v44[4] & 0xFFF) + (unsigned __int64)*((unsigned int *)v44 + 10) + 4095) >> 12)
+ 48;
goto LABEL_78;
}
if( v46 != 43 )
goto LABEL_74;
LABEL_72:
v50 = 4 * (*((_DWORD *)v44 + 4) / 0xCu) + 48;
goto LABEL_78;
}
LABEL_87:
v44 = 0i64;
LABEL_88:
v358 = (int *)v44;
if( v44 )
{
v33 = -1073741554;
goto LABEL_476;
}
v54 = v390;
v56 = (*((__int64(__fastcall **)(INT64))v10 + 85))(v3);
LODWORD(a5) = v56;
v337 = v331;
if( (v390 & 0x10) != 0 && (*((_DWORD *)v10 + 613) & 0x400) == 0 )
{
v29 = v390 & 0xEF;
a3a = v390 & 0xEF;
}
v57 = BugCheckParameter2;
if( (v29 & 0x10) != 0 && !(unsigned int)sub_140A0FC50((INT64)v10, BugCheckParameter2) )
{
v29 &= ~0x10u;
a3a = v29;
}
if( (v29 & 2) == 0 || v56 )
{
if( (*((_DWORD *)v10 + 612) & 0x40000000) != 0 )
{
v33 = sub_140A1BFE4((INT64)&a1a, BugCheckParameter2, v29);
goto LABEL_477;
}
v58 = (__int64(__fastcall *)(ULONG_PTR, __int64, _QWORD, int *))*((_QWORD *)v10 + 62);
v371 = 0i64;
v357[4] = 0;
LOBYTE(v55) = 1;
v368 = v58(BugCheckParameter2, v55, 0i64, &v331);
v59 = v331 & (unsigned int)-(v368 != 0);
v331 = v59;
v60 = (__int64(__fastcall *)(ULONG_PTR, __int64, __int64, int *))*((_QWORD *)v10 + 62);
v357[1] = v59;
LOBYTE(v59) = 1;
v61 = v60(v57, v59, 12i64, &v331);
v62 = v61;
v340 = v61;
v369 = v61;
LOBYTE(v62) = 1;
v331 &= -(v61 != 0);
v63 = (__int64(__fastcall *)(ULONG_PTR, INT64, __int64, int *))*((_QWORD *)v10 + 62);
v330 = v331;
v357[2] = v331;
v370 = v63(v57, v62, 10i64, &v331);
v331 &= -(v370 != 0);
v64 = (__int64(__fastcall *)(ULONG_PTR))*((_QWORD *)v10 + 63);
v357[3] = v331;
v65 = v64(v57);
if( !v65 )
{
v33 = -1073741701;
goto LABEL_477;
}
v66 = (*((__int64(__fastcall **)(ULONG_PTR, int *))v10 + 147))(v57, &v360);
v67 = *((unsigned int *)v10 + 585);
v372 = v66;
v357[5] = v360;
v357[0] = *(_DWORD *)(v65 + 84);
LODWORD(v66) = v56;
v68 = *((unsigned int *)v10 + 505);
v367 = v57;
v69 = (_DWORD)v66 != 0 ? 0xB : 0;
v70 = v68 + 288;
LODWORD(v333) = v69;
if( (unsigned int)(v68 + 288) <= *((_DWORD *)v10 + 647) )
{
v71 = (INT64)v10;
v342 = (INT64)v10;
*((_DWORD *)v10 + 505) = v70;
}
else
{
v342 = sub_140A0EB30(v10, v70, v67);
v71 = v342;
if( !v342 )
{
v33 = -1073741670;
goto LABEL_477;
}
v72 = *((_DWORD *)v10 + 612);
if( (v72 & 4) == 0 )
{
v73 = *((_DWORD *)v10 + 505);
v74 = *((_QWORD *)v10 + 249);
v75 = (v72 & 0x20000000) != 0 ? *((_DWORD *)v10 + 585) : 0;
if( v73 >= 8 )
{
v76 = (unsigned __int64)v73 >> 3;
do
{
*(_QWORD *)v10 = 0i64;
v73 -= 8;
v10 += 8;
--v76;
}
while( v76 );
}
for( ; v73; --v73 )
*v10++ = 0;
v77 = *(_DWORD *)(v71 + 2340);
*(_DWORD *)(v71 + 2340) = v75;
if( v75 == 3 )
{
(*(void(__fastcall **)(__int64))(v71 + 872))(v74);
}
else
{
v78 = 0;
if( (*(_DWORD *)(v71 + 2448) & 0x10000000) == 0 )
v78 = v75;
if( v78 )
(*(void(__fastcall **)(__int64, _QWORD))(v71 + 552))(v74 - 8, *(_QWORD *)(v74 - 8));
else(*(void(__fastcall **)(__int64))(v71 + 256))(v74);
}
*(_DWORD *)(v71 + 2340) = v77;
}
*(_DWORD *)(v71 + 2448) &= ~4u;
v69 = (int)v333;
}
*(_DWORD *)(v71 + 2060) += 6;
v79 = (__int64 *)&v367;
v80 = (int *)(v71 + v68);
v341 = v80;
v362 = v80;
v358 = v80;
v81 = v80;
v82 = v357;
v338 = 6i64;
do
{
v83 = (unsigned int)*v82;
v84 = 6i64;
v85 = (_QWORD *)*v79;
v86 = 48;
do
{
*(_QWORD *)v81 = 0i64;
v86 -= 8;
v81 += 2;
--v84;
}
while( v84 );
for( ; v86; --v86 )
{
*(_BYTE *)v81 = 0;
v81 = (int *)((char *)v81 + 1);
}
*v80 = v69;
*((_QWORD *)v80 + 1) = v85;
v87 = v85;
v80[4] = v83;
v88 = (char *)v85;
*(_DWORD *)(v71 + 2088) += v83;
v89 = *(_DWORD *)(v71 + 2068);
v90 = *(_QWORD *)(v71 + 2072);
if( v85 < (_QWORD *)((char *)v85 + v83) )
{
do
{
_mm_prefetchnta(v88);
v88 += 64;
}
while( v88 < (char *)v85 + v83 );
}
v91 = *(_QWORD *)(v71 + 2072);
v92 = (unsigned int)v83 >> 7;
if( (unsigned int)v83 >> 7 )
{
do
{
v93 = 8i64;
do
{
v94 = v87[1] ^ __ROL8__(*v87 ^ v91, v89);
v87 += 2;
v91 = __ROL8__(v94, v89);
--v93;
}
while( v93 );
v95 = (__ROL8__(v90 ^ ((char *)v87 - (char *)v85), 17) ^ v90 ^ (unsigned __int64)((char *)v87 - (char *)v85))
* (unsigned __int128)0x7010008004002001ui64;
v376 = *((_QWORD *)&v95 + 1);
v89 = (BYTE8(v95) ^ (unsigned __int8)(v95 ^ v89)) & 0x3F;
if( !v89 )
LOBYTE(v89) = 1;
--v92;
}
while( v92 );
v71 = v342;
}
v96 = v83 & 0x7F;
if( v96 >= 8 )
{
v97 = (unsigned __int64)(v83 & 0x7F) >> 3;
do
{
v91 = __ROL8__(*v87++ ^ v91, v89);
v96 -= 8;
--v97;
}
while( v97 );
}
for( ; v96; --v96 )
{
v98 = *(unsigned __int8 *)v87;
v87 = (_QWORD *)((char *)v87 + 1);
v91 = __ROL8__(v98 ^ v91, v89);
}
for( i = v91; ; LODWORD(v91) = i ^ v91 )
{
i >>= 31;
if( !i )
break;
}
v69 = (int)v333;
++v82;
v80[5] = v91 & 0x7FFFFFFF;
++v79;
*(_DWORD *)(v71 + 2088) += v83;
v80 += 12;
v100 = v338-- == 1;
v81 = v80;
v362 = v80;
}
while( !v100 );
v101 = v341;
v102 = BugCheckParameter2;
v103 = a5;
*v341 = 44;
*((_QWORD *)v101 + 3) = v102;
if( (*(_DWORD *)(v71 + 2448) & 0x10200000) == 0 )
{
if( v103 )
{
LABEL_151:
v101[8] |= 2u;
goto LABEL_152;
}
if( (*(_DWORD *)(v71 + 2452) & 0x8000) == 0 || (v101[8] |= 1u, !(unsigned int)sub_140A0FC50(v71, v102)) )
{
LABEL_152:
v104 = a3a;
LODWORD(BugCheckParameter4) = v103;
v343 = v71;
a1a = v71;
v33 = sub_140A0E098((INT64)&v343, a2a, v337, v102, BugCheckParameter4, a3a, &a7, &a8);
if( v33 < 0 )
goto LABEL_476;
v105 = 6i64;
v106 = (_BYTE *)v343;
v107 = (_DWORD *)((char *)v101 + v343 - a1a);
v108 = a8 - a7;
v109 = 48;
v341 = v107;
v110 = (_QWORD *)(v102 + (unsigned int)a7);
v111 = v107 + 48;
v358 = v107;
v112 = v107 + 48;
a1a = v343;
do
{
*v112 = 0i64;
v109 -= 8;
++v112;
--v105;
}
while( v105 );
for( ; v109; --v109 )
{
*(_BYTE *)v112 = 0;
v112 = (_QWORD *)((char *)v112 + 1);
}
v113 = v110;
*v111 = (_DWORD)v333;
v114 = (char *)v110;
*((_QWORD *)v107 + 25) = v110;
v107[52] = v108;
*((_DWORD *)v106 + 522) += v108;
v115 = *((_DWORD *)v106 + 517);
v116 = *((_QWORD *)v106 + 259);
v117 = (unsigned __int64)v110 + v108;
if( (unsigned __int64)v110 < v117 )
{
do
{
_mm_prefetchnta(v114);
v114 += 64;
}
while( (unsigned __int64)v114 < v117 );
}
v118 = *((_QWORD *)v106 + 259);
v119 = v108 >> 7;
if( v108 >> 7 )
{
do
{
v120 = 8i64;
do
{
v121 = v118 ^ *v113;
v122 = v113[1];
v113 += 2;
v118 = __ROL8__(__ROL8__(v121, v115) ^ v122, v115);
--v120;
}
while( v120 );
v123 = __ROL8__(v116 ^ ((char *)v113 - (char *)v110), 17) ^ v116 ^ ((char *)v113 - (char *)v110);
v377 = (v123 * (unsigned __int128)0x7010008004002001ui64) >> 64;
v115 = ((unsigned __int8)(v377 ^ v123) ^ (unsigned __int8)v115) & 0x3F;
if( !v115 )
LOBYTE(v115) = 1;
--v119;
}
while( v119 );
v104 = a3a;
v111 = v107 + 48;
}
v124 = v108 & 0x7F;
if( v124 >= 8 )
{
v125 = (unsigned __int64)v124 >> 3;
do
{
v118 = __ROL8__(*v113++ ^ v118, v115);
v124 -= 8;
--v125;
}
while( v125 );
v104 = a3a;
}
for( ; v124; --v124 )
{
v126 = *(unsigned __int8 *)v113;
v113 = (_QWORD *)((char *)v113 + 1);
v118 = __ROL8__(v126 ^ v118, v115);
}
for( j = v118; ; v118 = (unsigned int)j ^ (unsigned int)v118 )
{
j >>= 31;
if( !j )
break;
}
v128 = (unsigned int)a5;
LODWORD(v118) = v118 & 0x7FFFFFFF;
v111[5] = v118;
v107[60] = 48;
if( v107[64] )
v107[66] = v107[66] & 0xFFFFFFFE | ((_DWORD)v128 != 0);
v129 = (__int64)(v107 + 24);
a1a = (INT64)v106;
v361 = v107 + 24;
v130 = v104 & 1;
v131 = ((_DWORD)v128 != 0) + 13;
if( v107 == (_DWORD *)-96i64 )
{
v132 = *((unsigned int *)v106 + 505);
v133 = v132 + 48;
if( (unsigned int)(v132 + 48) <= *((_DWORD *)v106 + 647) )
{
v134 = v106;
*((_DWORD *)v106 + 505) = v133;
}
else
{
v134 = (_BYTE *)sub_140A0EB30(v106, v133, *((unsigned int *)v106 + 585));
if( !v134 )
goto LABEL_195;
v135 = *((_DWORD *)v106 + 612);
if( (v135 & 4) == 0 )
{
v136 = *((_DWORD *)v106 + 505);
v137 = *((_QWORD *)v106 + 249);
v138 = (v135 & 0x20000000) != 0 ? *((_DWORD *)v106 + 585) : 0;
if( v136 >= 8 )
{
v139 = (unsigned __int64)v136 >> 3;
do
{
*(_QWORD *)v106 = 0i64;
v136 -= 8;
v106 += 8;
--v139;
}
while( v139 );
}
for( ; v136; --v136 )
*v106++ = 0;
v140 = *((_DWORD *)v134 + 585);
*((_DWORD *)v134 + 585) = v138;
if( v138 == 3 )
{
(*((void(__fastcall **)(__int64))v134 + 109))(v137);
}
else
{
v141 = 0;
if( (*((_DWORD *)v134 + 612) & 0x10000000) == 0 )
v141 = v138;
if( v141 )
(*((void(__fastcall **)(__int64, _QWORD))v134 + 69))(v137 - 8, *(_QWORD *)(v137 - 8));
else(*((void(__fastcall **)(__int64))v134 + 32))(v137);
}
*((_DWORD *)v134 + 585) = v140;
}
*((_DWORD *)v134 + 612) &= ~4u;
}
++*((_DWORD *)v134 + 515);
v142 = 48;
v129 = (__int64)&v134[v132];
v143 = 6i64;
v378 = v129;
v144 = (_QWORD *)v129;
do
{
*v144 = 0i64;
v142 -= 8;
++v144;
--v143;
}
while( v143 );
for( ; v142; --v142 )
{
*(_BYTE *)v144 = 0;
v144 = (_QWORD *)((char *)v144 + 1);
}
v145 = v340;
*(_DWORD *)v129 = v131;
v146 = (_QWORD *)v145;
v147 = v330;
*(_QWORD *)(v129 + 8) = v145;
*(_DWORD *)(v129 + 16) = v330;
*((_DWORD *)v134 + 522) += v330;
v148 = *((_DWORD *)v134 + 517);
v149 = *((_QWORD *)v134 + 259);
if( v145 < v145 + v330 )
{
v150 = (char *)v145;
do
{
_mm_prefetchnta(v150);
v150 += 64;
}
while( (unsigned __int64)v150 < v145 + v330 );
}
v118 = *((_QWORD *)v134 + 259);
v151 = v330 >> 7;
if( v330 >> 7 )
{
do
{
v152 = 8i64;
do
{
v153 = v146[1] ^ __ROL8__(*v146 ^ v118, v148);
v146 += 2;
v118 = __ROL8__(v153, v148);
--v152;
}
while( v152 );
v154 = (__ROL8__(v149 ^ ((unsigned __int64)v146 - v145), 17) ^ v149 ^ ((unsigned __int64)v146 - v145))
* (unsigned __int128)0x7010008004002001ui64;
v379 = *((_QWORD *)&v154 + 1);
v148 = (BYTE8(v154) ^ (unsigned __int8)(v154 ^ v148)) & 0x3F;
if( !v148 )
LOBYTE(v148) = 1;
--v151;
}
while( v151 );
v107 = v341;
v147 = v330;
}
v128 = v147 & 0x7F;
if( (unsigned int)v128 >= 8 )
{
v155 = (unsigned __int64)(v147 & 0x7F) >> 3;
do
{
v118 = __ROL8__(*v146++ ^ v118, v148);
v128 = (unsigned int)(v128 - 8);
--v155;
}
while( v155 );
}
if( (_DWORD)v128 )
{
do
{
v156 = *(unsigned __int8 *)v146;
v146 = (_QWORD *)((char *)v146 + 1);
v118 = __ROL8__(v156 ^ v118, v148);
v100 = (_DWORD)v128 == 1;
v128 = (unsigned int)(v128 - 1);
}
while( !v100 );
}
for( k = v118 >> 31; k; k >>= 31 )
v118 = (unsigned int)k ^ (unsigned int)v118;
LODWORD(v118) = v118 & 0x7FFFFFFF;
v361 = (_DWORD *)v129;
*(_DWORD *)(v129 + 20) = v118;
*((_DWORD *)v134 + 522) += v147;
}
else
{
v145 = v340;
v134 = v106;
*(_DWORD *)v129 = v131;
v147 = v330;
}
v158 = v129;
if( (*((_DWORD *)v134 + 612) & 0x40000000) != 0 && v147 )
sub_1403E92DC((INT64)v134, v145, v147, v129 + 28);
*(_DWORD *)(v129 + 24) = 0;
if( v130 )
*(_DWORD *)(v129 + 24) = 1;
v159 = BugCheckParameter2;
a1a = (INT64)v134;
v160 = a5 != 0;
v161 = v107[46] & 0xFFFFFFFE;
v107[36] = 35;
v162 = v107[40] < 0x94u;
v107[46] = v161 | v160;
if( v162 )
{
LABEL_234:
v100 = (*((_DWORD *)v134 + 612) & 0x400000) == 0;
v343 = (INT64)v134;
if( !v100 )
{
v168 = (_DWORD *)(*((__int64(__fastcall **)(ULONG_PTR, __int64, ULONG_PTR, __int64))v134 + 63))(
v159,
v128,
v118,
v158);
v341 = v168;
if( !v168 )
{
LABEL_46:
v33 = -1073741701;
LABEL_476:
v54 = v390;
goto LABEL_477;
}
v169 = *((_WORD *)v168 + 3);
a3b = v169;
v338 = v337 / 0xCui64;
if( !v169 )
{
if( (*((_DWORD *)v134 + 612) & 0x200000) == 0 )
{
HIDWORD(a8) = -805294751;
KeBugCheckEx(__ROR4__(-805306349, 92), 0xAui64, v159, 0i64, 0i64);
}
if( !*((_DWORD *)v134 + 574) )
{
*((_DWORD *)v134 + 574) = 1;
LABEL_240:
*((_QWORD *)v134 + 288) = v134 - 0x5C5FC0A76E374B18i64;
LABEL_241:
*((_QWORD *)v134 + 289) = 0i64;
*((_QWORD *)v134 + 290) = 271i64;
*((_QWORD *)v134 + 291) = v159;
__b8((__int64)v134, 0i64);
}
goto LABEL_46;
}
v170 = 0;
v171 = v169;
v172 = a2a;
v330 = 0;
LODWORD(v333) = v169;
v356 = 12i64 * (v337 / 0xC);
v340 = (INT64)a2a + v356;
v342 = (INT64)v168 + *((unsigned __int16 *)v168 + 10) + 24;
v173 = (char *)v342;
v174 = (unsigned int *)(v342 + 8);
v175 = 1i64;
do
{
v176 = v174[2];
v177 = v174[1];
if( v176 <= *v174 )
v176 = *v174;
v336 = v174[1];
v178 = v177 + v176;
if( v170 )
{
if( v178 < *(_DWORD *)&v173[40 * v170 - 28] )
{
if( (*((_DWORD *)v134 + 612) & 0x200000) == 0 )
{
v350 = -805294751;
KeBugCheckEx(__ROR4__(-805306349, 92), 0xAui64, v159, 1ui64, 0i64);
}
if( !*((_DWORD *)v134 + 574) )
{
*((_DWORD *)v134 + 574) = 1;
goto LABEL_240;
}
goto LABEL_46;
}
v170 = v330;
}
if( v172 != (UINT64 *)v340 )
{
while( 1 )
{
v179 = *((_DWORD *)v172 + 1);
if( *(_DWORD *)v172 >= v178 || v179 <= v177 )
{
LABEL_270:
v170 = v330;
v175 = 1i64;
v171 = (unsigned int)v333;
v173 = (char *)v342;
goto LABEL_271;
}
if( *(_DWORD *)v172 < v177 || v179 > v178 )
break;
v180 = *((unsigned int *)v172 + 2);
if( (v180 & 1) != 0 || (*(_BYTE *)(v180 + v159) & 0x20) != 0 )
{
v181 = v174[2];
v182 = v174[1];
if( v181 <= *v174 )
v181 = *v174;
v183 = v182 + v181;
v184 = (unsigned int *)(*((__int64(__fastcall **)(UINT64 *, ULONG_PTR, __int64))v134 + 131))(
v172,
BugCheckParameter2,
v175);
v185 = v184;
if( *v184 < v182 || v184[1] > v183 )
{
v186 = BugCheckParameter2;
if( (*((_DWORD *)v134 + 612) & 0x200000) == 0 )
{
v352 = -805294751;
KeBugCheckEx(
__ROR4__(-805306349, 92),
0xAui64,
BugCheckParameter2,
((_DWORD)v184 - (_DWORD)BugCheckParameter2) | 0x80000000,
0i64);
}
if( !*((_DWORD *)v134 + 574) )
{
*((_QWORD *)v134 + 289) = 0i64;
*((_QWORD *)v134 + 290) = 271i64;
*((_QWORD *)v134 + 288) = v134 - 0x5C5FC0A76E374B18i64;
*((_QWORD *)v134 + 291) = v186;
*((_DWORD *)v134 + 574) = 1;
__b8((__int64)v134, 0i64);
}
}
v187 = (unsigned int *)(*((__int64(__fastcall **)(unsigned int *, ULONG_PTR, ULONG_PTR))v134 + 132))(
v185,
BugCheckParameter2,
BugCheckParameter2 + *v185);
if( *v187 >= v182 && v187[1] <= v183 )
{
v159 = BugCheckParameter2;
}
else
{
v159 = BugCheckParameter2;
v188 = ((_DWORD)v187 - BugCheckParameter2) | 0x80000000;
if( (*((_DWORD *)v134 + 612) & 0x200000) == 0 )
{
v351 = -805294751;
KeBugCheckEx(__ROR4__(-805306349, 92), 0xAui64, BugCheckParameter2, v188, 0i64);
}
if( !*((_DWORD *)v134 + 574) )
{
*((_QWORD *)v134 + 289) = 0i64;
*((_QWORD *)v134 + 290) = 271i64;
*((_QWORD *)v134 + 288) = v134 - 0x5C5FC0A76E374B18i64;
*((_QWORD *)v134 + 291) = v159;
*((_DWORD *)v134 + 574) = 1;
__b8((__int64)v134, 0i64);
}
}
v177 = v336;
}
v172 = (UINT64 *)((char *)v172 + 12);
if( v172 == (UINT64 *)v340 )
goto LABEL_270;
}
if( (*((_DWORD *)v134 + 612) & 0x200000) == 0 )
{
v353 = -805294751;
KeBugCheckEx(__ROR4__(-805306349, 92), 0xAui64, v159, 2ui64, 0i64);
}
if( !*((_DWORD *)v134 + 574) )
{
v192 = v134 - 0x5C5FC0A76E374B18i64;
LABEL_281:
*((_QWORD *)v134 + 288) = v192;
*((_DWORD *)v134 + 574) = 1;
goto LABEL_241;
}
goto LABEL_46;
}
LABEL_271:
++v170;
v174 += 10;
v330 = v170;
}
while( v170 < v171 );
v189 = v338;
v190 = v341;
v191 = v356;
if( v172 != (UINT64 *)v340 )
{
if( (*((_DWORD *)v134 + 612) & 0x200000) == 0 )
{
v354 = -805294751;
KeBugCheckEx(__ROR4__(-805306349, 92), 0xAui64, v159, 3ui64, 0i64);
}
if( !*((_DWORD *)v134 + 574) )
{
v192 = v134 - 0x5C5FC0A76E374B18i64;
goto LABEL_281;
}
goto LABEL_46;
}
if( (_DWORD)v338 )
v193 = (v338 + 6) & 0xFFFFFFF8;
else
v193 = 0;
v194 = *((unsigned int *)v134 + 505);
v195 = v193 + 24 * v171 + v194 + 48;
if( v195 <= *((_DWORD *)v134 + 647) )
{
v196 = (INT64)v134;
v341 = v134;
*((_DWORD *)v134 + 505) = v195;
}
else
{
v341 = (_DWORD *)sub_140A0EB30(v134, v195, *((unsigned int *)v134 + 585));
v196 = (INT64)v341;
if( !v341 )
goto LABEL_195;
v197 = *((_DWORD *)v134 + 612);
if( (v197 & 4) == 0 )
{
v198 = *((_DWORD *)v134 + 505);
v199 = *((_QWORD *)v134 + 249);
v200 = (v197 & 0x20000000) != 0 ? *((_DWORD *)v134 + 585) : 0;
if( v198 >= 8 )
{
v201 = (unsigned __int64)v198 >> 3;
do
{
*(_QWORD *)v134 = 0i64;
v198 -= 8;
v134 += 8;
--v201;
}
while( v201 );
}
for( ; v198; --v198 )
*v134++ = 0;
v202 = *(_DWORD *)(v196 + 2340);
*(_DWORD *)(v196 + 2340) = v200;
if( v200 == 3 )
{
(*(void(__fastcall **)(__int64, __int64))(v196 + 872))(v199, 1i64);
}
else
{
v203 = 0;
if( (*(_DWORD *)(v196 + 2448) & 0x10000000) == 0 )
v203 = v200;
if( v203 )
(*(void(__fastcall **)(__int64, _QWORD))(v196 + 552))(v199 - 8, *(_QWORD *)(v199 - 8));
else(*(void(__fastcall **)(__int64, __int64))(v196 + 256))(v199, 1i64);
}
*(_DWORD *)(v196 + 2340) = v202;
}
*(_DWORD *)(v196 + 2448) &= ~4u;
v189 = v338;
v171 = (unsigned int)v333;
}
v204 = v196 + v194;
++*(_DWORD *)(v196 + 2060);
v205 = (_QWORD *)(v196 + v194);
v380 = v196 + v194;
v206 = 6i64;
v207 = 48;
do
{
*v205 = 0i64;
v207 -= 8;
++v205;
--v206;
}
while( v206 );
for( ; v207; --v207 )
{
*(_BYTE *)v205 = 0;
v205 = (_QWORD *)((char *)v205 + 1);
}
*(_QWORD *)(v204 + 8) = a2a;
*(_DWORD *)v204 = 30;
*(_DWORD *)(v204 + 16) = 0;
v208 = *(_QWORD *)(v196 + 2072);
for( m = v208; ; LODWORD(v208) = m ^ v208 )
{
m >>= 31;
if( !m )
break;
}
v210 = BugCheckParameter2;
v100 = (_DWORD)a5 == 0;
*(_DWORD *)(v204 + 20) = v208 & 0x7FFFFFFF;
v134 = (_BYTE *)v196;
*(_QWORD *)(v204 + 24) = v210;
*(_DWORD *)(v204 + 32) = v190[20];
*(_DWORD *)(v204 + 36) = v337;
*(_WORD *)(v204 + 40) = a3b;
LOWORD(v210) = *(_WORD *)(v204 + 42) & 0xFFFE;
v387 = v196 + v194;
v343 = v196;
*(_WORD *)(v204 + 42) = v210 | !v100;
a5 = v204 + 48;
if( v189 )
v211 = (_DWORD *)(v204 + 48 + (((unsigned int)(v189 - 1) + 7i64) & 0xFFFFFFFFFFFFFFF8ui64));
else
v211 = (_DWORD *)(v204 + 48);
v212 = *(unsigned __int16 *)(v204 + 40);
LODWORD(v204) = 0;
v100 = v189 == 0;
v338 = (unsigned __int64)v211;
v213 = a2a;
v214 = 12i64;
if( v100 )
v214 = v191;
v215 = (_DWORD *)((char *)a2a + v214);
v216 = (__int64)&v211[6 * v212];
v356 = v216;
v333 = v215;
if( v171 )
{
v204 = v171;
v217 = v211 + 2;
do
{
v218 = 2i64;
do
{
*((_QWORD *)v217 - 1) = 0i64;
*v217 = 0x80000000;
v217 += 3;
--v218;
}
while( v218 );
--v204;
}
while( v204 );
}
if( v211 != (_DWORD *)v216 )
{
do
{
v219 = v204;
if( (*((_DWORD *)v173 + 9) & 0x2000000) != 0
|| (v220 = *(_DWORD *)v173, *(_DWORD *)v173 == 1414090313) && *((_DWORD *)v173 + 1) == 1195525195
|| v220 == 1162297680
&& ((v221 = *((_WORD *)v173 + 2), v221 == 30839) || v221 == 29303 || v221 == 30583)
|| v220 == 1095914053 && *((_WORD *)v173 + 2) == 16724 )
{
v219 = 1;
}
else
{
v222 = *(char **)(v196 + 2352);
v223 = 7;
v364 = *(char **)(v196 + 2360);
v224 = v173 - v222;
v365 = *(char **)(v196 + 2368);
v366 = *(char **)(v196 + 2376);
v363 = v222;
while( 1 )
{
v225 = v222[v224];
v226 = *v222++;
if( v225 != v226 )
break;
if( !--v223 )
{
LABEL_350:
v219 = 1;
goto LABEL_351;
}
}
v227 = v364;
v228 = 8;
v229 = v173;
while( 1 )
{
v230 = *(_QWORD *)v229;
v229 += 8;
v231 = *(_QWORD *)v227;
v227 += 8;
if( v230 != v231 )
break;
v228 -= 8;
if( v228 < 8 )
{
if( !v228 )
goto LABEL_350;
while( 1 )
{
v232 = *v229++;
v233 = *v227++;
if( v232 != v233 )
goto LABEL_343;
if( !--v228 )
goto LABEL_350;
}
}
}
LABEL_343:
v234 = v365;
v235 = 4;
while( 1 )
{
v236 = v234[v173 - v365];
v237 = *v234++;
if( v236 != v237 )
break;
if( !--v235 )
goto LABEL_350;
}
v238 = v366;
v239 = 6;
while( 1 )
{
v240 = v238[v173 - v366];
v241 = *v238++;
if( v240 != v241 )
break;
if( !--v239 )
goto LABEL_350;
}
LABEL_351:
v213 = a2a;
}
v242 = *((_DWORD *)v173 + 9);
LODWORD(v204) = 0;
if( v242 < 0 )
v219 = 1;
a3c = v219;
if( v219 && *(_DWORD *)v173 == 1414090313 && *((_DWORD *)v173 + 1) == 1195525195 )
{
if( (*(_DWORD *)(v196 + 2452) & 0x2000) != 0 )
v219 = 0;
a3c = v219;
}
if( (*(_DWORD *)(v196 + 2452) & 0x4000) != 0
&& (v242 & 0x20000000) != 0
&& (BugCheckParameter2 == *(_QWORD *)(v196 + 1512) || BugCheckParameter2 == *(_QWORD *)(v196 + 1520)) )
{
v219 = 1;
a3c = 1;
}
v243 = *((_DWORD *)v173 + 4);
v244 = *((unsigned int *)v173 + 3);
v245 = v340;
if( v243 <= *((_DWORD *)v173 + 2) )
v243 = *((_DWORD *)v173 + 2);
v246 = v244 + v243;
v336 = *((_DWORD *)v173 + 3);
v330 = v246;
if( v213 == (UINT64 *)v340 )
{
v247 = 0;
v248 = 0;
}
else
{
v247 = *(_DWORD *)v213;
v248 = *((_DWORD *)v213 + 1);
}
v337 = v248;
v249 = v244;
if( v213 != (UINT64 *)v340 && v247 > (unsigned int)v244 && v248 <= v246 && !v219 )
{
*v211 = v244;
v250 = v357;
v211[1] = v247;
v251 = BugCheckParameter2;
v252 = v247 - v244;
v253 = 0;
v249 = v247;
v254 = (__int64 *)&v367;
v255 = BugCheckParameter2 + v244;
v256 = BugCheckParameter2 + v244 + v247 - (unsigned int)v244;
do
{
if( v255 < *v254 + (unsigned __int64)(unsigned int)*v250 && v256 > *v254 )
{
v246 = v330;
LODWORD(v204) = 0;
v215 = v333;
v245 = v340;
v213 = a2a;
goto LABEL_398;
}
++v253;
++v254;
++v250;
}
while( v253 < 6 );
*(_DWORD *)(v196 + 2088) += v252;
v257 = (_QWORD *)v255;
v258 = *(_DWORD *)(v196 + 2068);
v259 = (char *)v255;
v260 = *(_QWORD *)(v196 + 2072);
if( v255 < v256 )
{
do
{
_mm_prefetchnta(v259);
v259 += 64;
}
while( (unsigned __int64)v259 < v256 );
}
LODWORD(v204) = 0;
v261 = v252 >> 7;
v262 = *(_QWORD *)(v196 + 2072);
if( v252 >> 7 )
{
do
{
v263 = 8i64;
do
{
v264 = v257[1] ^ __ROL8__(*v257 ^ v262, v258);
v257 += 2;
v262 = __ROL8__(v264, v258);
--v263;
}
while( v263 );
v265 = __ROL8__(v260 ^ ((unsigned __int64)v257 - v255), 17) ^ v260 ^ ((unsigned __int64)v257 - v255);
v381 = (v265 * (unsigned __int128)0x7010008004002001ui64) >> 64;
v258 = ((unsigned __int8)(v381 ^ v265) ^ (unsigned __int8)v258) & 0x3F;
if( !v258 )
LOBYTE(v258) = 1;
--v261;
}
while( v261 );
v196 = (INT64)v341;
LODWORD(v204) = 0;
v248 = v337;
}
v266 = v252 & 0x7F;
if( v266 >= 8 )
{
v267 = (unsigned __int64)v266 >> 3;
do
{
v262 = __ROL8__(*v257++ ^ v262, v258);
v266 -= 8;
--v267;
}
while( v267 );
}
for( ; v266; --v266 )
{
v268 = *(unsigned __int8 *)v257;
v257 = (_QWORD *)((char *)v257 + 1);
v262 = __ROL8__(v268 ^ v262, v258);
}
for( n = v262; ; LODWORD(v262) = n ^ v262 )
{
n >>= 31;
if( !n )
break;
}
v246 = v330;
LODWORD(v244) = v336;
v215 = v333;
v213 = a2a;
*(_DWORD *)(v338 + 8) = v262 & 0x7FFFFFFF;
v245 = v340;
}
v251 = BugCheckParameter2;
LABEL_398:
if( v247 < (unsigned int)v244 )
{
v271 = a3c;
}
else
{
v270 = v248 <= v246;
v271 = a3c;
if( v270 && v213 != (UINT64 *)v245 )
{
v272 = v215[1];
if( v272 <= v246 )
{
v273 = (_BYTE *)a5;
do
{
if( v215 == (_DWORD *)v245 )
break;
if( v271 )
{
v274 = 0x80;
}
else
{
v275 = *((unsigned int *)v213 + 1);
v249 = *v215;
if( *v215 < (unsigned int)v275 )
{
if( (*(_DWORD *)(v196 + 2448) & 0x200000) == 0 )
{
v355 = -805294751;
KeBugCheckEx(__ROR4__(-805306349, 92), 0xAui64, v251, 6ui64, 0i64);
}
if( !*(_DWORD *)(v196 + 2296) )
{
*(_QWORD *)(v196 + 2312) = 0i64;
*(_QWORD *)(v196 + 2320) = 271i64;
*(_QWORD *)(v196 + 2304) = v196 - 0x5C5FC0A76E374B18i64;
*(_QWORD *)(v196 + 2328) = v251;
*(_DWORD *)(v196 + 2296) = 1;
__b8(v196, 0i64);
}
}
v276 = v251 + v275;
v277 = v249 - v275;
v278 = v357;
v279 = 0;
v280 = v251 + v275 + v249 - (unsigned int)v275;
v281 = (__int64 *)&v367;
do
{
if( v276 < *v281 + (unsigned __int64)(unsigned int)*v278 && v280 > *v281 )
goto LABEL_434;
++v279;
++v281;
++v278;
}
while( v279 < 6 );
if( v277 < 4 )
{
LABEL_434:
LODWORD(v204) = 0;
v274 = 0x80;
goto LABEL_435;
}
*(_DWORD *)(v196 + 2088) += v277;
v282 = (_QWORD *)v276;
v283 = *(_DWORD *)(v196 + 2068);
v284 = (char *)v276;
v285 = *(_QWORD *)(v196 + 2072);
if( v276 < v280 )
{
do
{
_mm_prefetchnta(v284);
v284 += 64;
}
while( (unsigned __int64)v284 < v280 );
}
LODWORD(v204) = 0;
v286 = v277 >> 7;
v287 = *(_QWORD *)(v196 + 2072);
if( v277 >> 7 )
{
do
{
v288 = 8i64;
do
{
v289 = v282[1] ^ __ROL8__(*v282 ^ v287, v283);
v282 += 2;
v287 = __ROL8__(v289, v283);
--v288;
}
while( v288 );
v290 = __ROL8__(v285 ^ ((unsigned __int64)v282 - v276), 17) ^ v285 ^ ((unsigned __int64)v282
- v276);
v382 = (v290 * (unsigned __int128)0x7010008004002001ui64) >> 64;
v283 = ((unsigned __int8)(v382 ^ v290) ^ (unsigned __int8)v283) & 0x3F;
if( !v283 )
LOBYTE(v283) = 1;
--v286;
}
while( v286 );
v196 = (INT64)v341;
LODWORD(v204) = 0;
v271 = a3c;
}
v291 = v277 & 0x7F;
if( v291 >= 8 )
{
v292 = (unsigned __int64)v291 >> 3;
do
{
v287 = __ROL8__(*v282++ ^ v287, v283);
v291 -= 8;
--v292;
}
while( v292 );
}
for( ; v291; --v291 )
{
v293 = *(unsigned __int8 *)v282;
v282 = (_QWORD *)((char *)v282 + 1);
v287 = __ROL8__(v293 ^ v287, v283);
}
for( ii = v287; ; LOBYTE(v287) = ii ^ v287 )
{
ii >>= 7;
if( !ii )
break;
}
v251 = BugCheckParameter2;
v274 = v287 & 0x7F;
LABEL_435:
v213 = a2a;
v215 = v333;
v246 = v330;
v273 = (_BYTE *)a5;
}
*v273 = v274;
v213 = (UINT64 *)((char *)v213 + 12);
v215 += 3;
v245 = v340;
v273 = (_BYTE *)(a5 + 1);
a2a = v213;
++a5;
v333 = v215;
if( v215 != (_DWORD *)v340 )
v272 = v215[1];
}
while( v272 <= v246 );
}
}
}
v295 = v338;
if( !v271 && v249 != v246 )
{
v296 = BugCheckParameter2 + v249;
v297 = v246 - v249;
*(_DWORD *)(v338 + 16) = v246;
v298 = v246 - v249;
v299 = v357;
v300 = 0;
*(_DWORD *)(v295 + 12) = v249;
v301 = v296 + v298;
v302 = (__int64 *)&v367;
do
{
if( v296 < *v302 + (unsigned __int64)(unsigned int)*v299 && v301 > *v302 )
{
LODWORD(v204) = 0;
goto LABEL_466;
}
++v300;
++v302;
++v299;
}
while( v300 < 6 );
*(_DWORD *)(v196 + 2088) += v297;
v303 = (_QWORD *)v296;
v304 = *(_DWORD *)(v196 + 2068);
v305 = (char *)v296;
v306 = *(_QWORD *)(v196 + 2072);
if( v296 < v301 )
{
do
{
_mm_prefetchnta(v305);
v305 += 64;
}
while( (unsigned __int64)v305 < v301 );
}
LODWORD(v204) = 0;
v307 = v297 >> 7;
v308 = *(_QWORD *)(v196 + 2072);
if( v297 >> 7 )
{
do
{
v309 = 8i64;
do
{
v310 = *v303 ^ v308;
v311 = v303 + 1;
v312 = *v311 ^ __ROL8__(v310, v304);
v303 = v311 + 1;
v308 = __ROL8__(v312, v304);
--v309;
}
while( v309 );
v313 = __ROL8__(v306 ^ ((unsigned __int64)v303 - v296), 17) ^ v306 ^ ((unsigned __int64)v303 - v296);
v383 = (v313 * (unsigned __int128)0x7010008004002001ui64) >> 64;
v304 = ((unsigned __int8)(v383 ^ v313) ^ (unsigned __int8)v304) & 0x3F;
if( !v304 )
LOBYTE(v304) = 1;
--v307;
}
while( v307 );
v196 = (INT64)v341;
LODWORD(v204) = 0;
}
v314 = v297 & 0x7F;
if( v314 >= 8 )
{
v315 = (unsigned __int64)v314 >> 3;
do
{
v308 = __ROL8__(*v303++ ^ v308, v304);
v314 -= 8;
--v315;
}
while( v315 );
}
for( ; v314; --v314 )
{
v316 = *(unsigned __int8 *)v303;
v303 = (_QWORD *)((char *)v303 + 1);
v308 = __ROL8__(v316 ^ v308, v304);
}
for( jj = v308; ; LODWORD(v308) = jj ^ v308 )
{
jj >>= 31;
if( !jj )
break;
}
v295 = v338;
*(_DWORD *)(v338 + 20) = v308 & 0x7FFFFFFF;
LABEL_466:
v213 = a2a;
}
v215 = v333;
if( v213 != (UINT64 *)v340 && *(_DWORD *)v213 >= v336 && *((_DWORD *)v213 + 1) <= v330 )
{
if( v333 != (_DWORD *)v340 )
{
v318 = a5;
*(_BYTE *)a5 = 0x80;
v215 += 3;
a5 = v318 + 1;
v333 = v215;
}
v213 = (UINT64 *)((char *)v213 + 12);
a2a = v213;
}
v211 = (_DWORD *)(v295 + 24);
v173 = (char *)(v342 + 40);
v338 = (unsigned __int64)v211;
v342 += 40i64;
}
while( v211 != (_DWORD *)v356 );
v134 = (_BYTE *)v343;
}
}
a1a = (INT64)v134;
v33 = 0;
goto LABEL_476;
}
v163 = *((_QWORD *)v107 + 19);
v164 = (*((__int64(__fastcall **)(ULONG_PTR, __int64, ULONG_PTR, __int64))v134 + 63))(v159, v128, v118, v158);
if( v164 )
{
v118 = v159 + *(unsigned int *)(v164 + 80);
v128 = v107[46] | 2u;
v107[46] = v128;
v165 = v128;
v166 = *(_QWORD **)(v163 + 112);
if( (unsigned __int64)v166 >= v159 && (unsigned __int64)v166 < v118 )
{
v165 = v128 | 4;
*((_QWORD *)v107 + 21) = *v166;
v107[46] = v128 | 4;
}
v167 = *(_QWORD **)(v163 + 120);
if( (unsigned __int64)v167 >= v159 && (unsigned __int64)v167 < v118 )
{
*((_QWORD *)v107 + 22) = *v167;
v107[46] = v165 | 8;
}
goto LABEL_234;
}
LABEL_195:
v33 = -1073741670;
goto LABEL_476;
}
v101[8] |= 4u;
}
if( !v103 )
goto LABEL_152;
goto LABEL_151;
}
v33 = 0;
LABEL_477:
*a1 = a1a;
if( (int)(v33 + 0x80000000) >= 0 && v33 != -1073741554 )
return(unsigned int)v33;
v319 = v54 & 0xFFFFFFEF;
if( (v319 & 0x80000004) != -2147483644 )
{
v320 = v319 | 0x80000000;
v321 = v359;
v322 = (*(__int64(__fastcall **)(__int64))(a1a + 504))(v359);
v323 = *(unsigned int *)(v322 + 148);
if( (unsigned int)v323 >= 0x14 )
{
v324 = *(unsigned int *)(v322 + 144);
v325 = v321 + v324 + v323;
for( kk = v324 + v321; kk != v325; kk += 20i64 )
{
if( !*(_DWORD *)(kk + 12) )
break;
v327 = *(unsigned int *)(kk + 16);
if( !(_DWORD)v327 )
break;
v328 = *(_QWORD *)(v327 + v321);
if( v328 )
{
result = sub_140A0C0FC(&a1a, v328, v320);
*a1 = a1a;
if( (((_DWORD)result + 0x80000000) & 0x80000000) == 0 && (_DWORD)result != -1073741554 )
return result;
}
}
}
}
return 0i64;
}Referenced by:
sub_140A0C0FC