Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void __fastcall sub_14066D610(__int64 a1, unsigned int **a2)
- {
- unsigned int **v2; // r14
- __int64 v3; // r12
- unsigned int *v4; // rdi
- unsigned int v5; // ebx
- int v6; // ebx
- unsigned int v7; // eax
- int v8; // ebx
- void *v9; // r15
- char *v10; // rax
- __int64 *v11; // rdi
- __int64 v12; // rax
- signed int v13; // eax
- __int64 v14; // rsi
- __int64 v15; // rax
- __int64 v16; // rax
- void *v17; // rsi
- unsigned int *v18; // rbx
- __int64 v19; // rdi
- __int64 v20; // rax
- unsigned int v21; // er15
- void *v22; // rbx
- int i; // edi
- __int64 v24; // rax
- __int64 v25; // rax
- void *v26; // rax
- int v27; // er13
- void *v28; // rax
- __int64 v29; // rdi
- char *v30; // rax
- __int64 *v31; // r12
- __int64 v32; // rax
- signed int v33; // eax
- unsigned int *v34; // rsi
- unsigned int j; // edi
- __int64 v36; // rax
- signed int v37; // edi
- __int64 v38; // rax
- __int64 v39; // rax
- int v40; // edi
- signed __int64 v41; // r13
- __int64 v42; // rax
- __int64 v43; // rax
- void *v44; // rax
- char *v45; // rsi
- char *v46; // rdi
- char *k; // r12
- unsigned __int64 v48; // rdx
- char *v49; // rax
- unsigned __int64 v50; // rsi
- int v51; // esi
- __int64 v52; // r12
- __int64 v53; // rax
- BOOL v54; // edi
- __int64 v55; // rdx
- void (__fastcall ***v56)(_QWORD, signed __int64); // rdi
- unsigned int *v57; // rbx
- signed int v58; // esi
- __int64 v59; // rax
- __int64 v60; // rax
- int v61; // [rsp+30h] [rbp-D0h]
- int v62; // [rsp+34h] [rbp-CCh]
- unsigned __int64 v63; // [rsp+38h] [rbp-C8h]
- int v64; // [rsp+40h] [rbp-C0h]
- int v65; // [rsp+44h] [rbp-BCh]
- char *v66; // [rsp+48h] [rbp-B8h]
- int v67; // [rsp+50h] [rbp-B0h]
- int v68; // [rsp+54h] [rbp-ACh]
- __int64 v69; // [rsp+58h] [rbp-A8h]
- __int128 v70; // [rsp+60h] [rbp-A0h]
- __int64 v71; // [rsp+70h] [rbp-90h]
- __int64 v72; // [rsp+78h] [rbp-88h]
- __int64 v73; // [rsp+80h] [rbp-80h]
- __int64 v74; // [rsp+88h] [rbp-78h]
- __int128 v75; // [rsp+90h] [rbp-70h]
- LPVOID lpMem[2]; // [rsp+A0h] [rbp-60h]
- __int64 v77; // [rsp+B0h] [rbp-50h]
- __int128 v78; // [rsp+B8h] [rbp-48h]
- char v79; // [rsp+C8h] [rbp-38h]
- char v80; // [rsp+D8h] [rbp-28h]
- BOOL v81; // [rsp+E8h] [rbp-18h]
- __int64 v82; // [rsp+F0h] [rbp-10h]
- char v83; // [rsp+F8h] [rbp-8h]
- char v84; // [rsp+108h] [rbp+8h]
- __int64 v85; // [rsp+118h] [rbp+18h]
- __int128 v86; // [rsp+130h] [rbp+30h]
- char v87; // [rsp+140h] [rbp+40h]
- char v88; // [rsp+150h] [rbp+50h]
- char v89; // [rsp+160h] [rbp+60h]
- char v90; // [rsp+180h] [rbp+80h]
- char v91; // [rsp+190h] [rbp+90h]
- char v92; // [rsp+1B8h] [rbp+B8h]
- __int64 v93; // [rsp+220h] [rbp+120h]
- char v94; // [rsp+230h] [rbp+130h]
- unsigned __int64 v95; // [rsp+238h] [rbp+138h]
- v93 = a1;
- v82 = -2i64;
- v2 = a2;
- v3 = a1;
- sub_14065C410("[archive] Loading headers...");
- v67 = 0;
- v64 = 0;
- v65 = 0;
- HIDWORD(v63) = 0;
- v61 = 0;
- (*(void (__fastcall **)(unsigned int *, int *, signed __int64))(*(_QWORD *)v2[1] + 16i64))(v2[1], &v67, 4i64);
- sub_1406567A0(&v79, &v67, 4i64);
- if ( (unsigned __int8)sub_140656BC0(&v79, "AGAR") )
- {
- v64 = 1;
- v65 = 0;
- HIDWORD(v63) = 0;
- }
- else
- {
- (*(void (__fastcall **)(unsigned int *, int *, signed __int64))(*(_QWORD *)v2[1] + 16i64))(v2[1], &v64, 4i64);
- (*(void (__fastcall **)(unsigned int *, int *, signed __int64))(*(_QWORD *)v2[1] + 16i64))(v2[1], &v65, 4i64);
- (*(void (__fastcall **)(unsigned int *, char *, signed __int64))(*(_QWORD *)v2[1] + 16i64))(
- v2[1],
- (char *)&v63 + 4,
- 4i64);
- }
- _mm_storeu_si128((__m128i *)&v70, (__m128i)0i64);
- v4 = *v2;
- if ( *v2 )
- {
- v5 = *v4;
- if ( *v4 )
- {
- while ( (unsigned int)sub_140657680(v4, v5, v5 + 1) != v5 )
- {
- v5 = *v4;
- if ( !*v4 )
- goto LABEL_11;
- }
- if ( v5 != -1 )
- v70 = *(_OWORD *)v2;
- }
- }
- LABEL_11:
- if ( v64 > 1 || v64 == 1 && v65 >= 1 )
- {
- (*(void (__fastcall **)(unsigned int *, int *, signed __int64))(*(_QWORD *)v2[1] + 16i64))(v2[1], &v61, 4i64);
- v6 = v61;
- v7 = v61 & 0x80000000;
- *(_DWORD *)(v3 + 344) = v61 & 0x80000000;
- v8 = v6 & 0x7FFFFFFF;
- v61 = v8;
- if ( v7 )
- {
- v9 = operator new(v8);
- (*(void (__fastcall **)(unsigned int *, void *, _QWORD))(*(_QWORD *)v2[1] + 16i64))(v2[1], v9, (unsigned int)v8);
- *(_QWORD *)(v93 + 360) = (*(__int64 (**)(void))(*(_QWORD *)v2[1] + 48i64))();
- v10 = (char *)operator new(0x1050ui64);
- v66 = v10;
- if ( v10 )
- v11 = (__int64 *)sub_14068FB10(v10, &unk_140868188, 56i64);
- else
- v11 = 0i64;
- _mm_storeu_si128((__m128i *)&v78, (__m128i)0i64);
- if ( v11 )
- {
- if ( *v11 )
- {
- v13 = 0;
- }
- else
- {
- v12 = sub_140657390(16i64);
- v66 = (char *)v12;
- if ( v12 )
- {
- *(_DWORD *)v12 = 1;
- *(_DWORD *)(v12 + 4) = 1;
- *(_QWORD *)(v12 + 8) = v11;
- }
- else
- {
- v12 = 0i64;
- }
- *v11 = v12;
- v13 = 1;
- }
- v14 = *v11;
- if ( !v13 )
- sub_140039200(*v11);
- *(_QWORD *)&v78 = v14;
- *((_QWORD *)&v78 + 1) = v11;
- }
- else
- {
- v11 = (__int64 *)*((_QWORD *)&v78 + 1);
- }
- sub_14068FB30(v11, v9, (unsigned int)v8);
- v15 = sub_140051010(&qword_140A29370);
- v66 = (char *)v15;
- if ( v15 )
- v16 = sub_14065C4F0(v15, v9, v8, 1i64);
- else
- v16 = 0i64;
- sub_14066CDF0(v2, v16);
- (*(void (__fastcall **)(unsigned int *, int *, signed __int64))(*(_QWORD *)v2[1] + 16i64))(v2[1], &v61, 4i64);
- sub_14066C6E0(&v78);
- v3 = v93;
- }
- }
- else
- {
- v61 = v67;
- }
- if ( SHIDWORD(v63) > 0 )
- {
- v17 = operator new(SHIDWORD(v63));
- v18 = v2[1];
- v19 = *(_QWORD *)v18;
- v20 = (*(__int64 (__fastcall **)(unsigned int *))(*(_QWORD *)v18 + 48i64))(v2[1]);
- (*(void (__fastcall **)(unsigned int *, __int64))(v19 + 40))(v18, v20 + SHIDWORD(v63));
- j_j_j__free_base(v17);
- }
- sub_14065C410("[archive] Contains %i files");
- v21 = 256;
- v22 = operator new(0x100ui64);
- for ( i = 0; i < v61; ++i )
- {
- LODWORD(v63) = 0;
- (*(void (__fastcall **)(unsigned int *, unsigned __int64 *, signed __int64))(*(_QWORD *)v2[1] + 16i64))(
- v2[1],
- &v63,
- 4i64);
- if ( (unsigned int)v63 > v21 )
- {
- j_j_j__free_base(v22);
- v21 = v63;
- v22 = operator new((unsigned int)v63);
- }
- (*(void (__fastcall **)(unsigned int *, void *))(*(_QWORD *)v2[1] + 16i64))(v2[1], v22);
- *((_BYTE *)v22 + (unsigned int)v63) = 0;
- sub_1400FE240(&v71);
- v71 = 0i64;
- v72 = 0i64;
- v73 = 0i64;
- v74 = 0i64;
- v24 = sub_1406567A0(&v83, v22, 0xFFFFFFFFi64);
- sub_1406569D0(&v71, v24);
- sub_140656EF0(&v83);
- (*(void (__fastcall **)(unsigned int *, __int64 *, signed __int64))(*(_QWORD *)v2[1] + 16i64))(v2[1], &v74, 8i64);
- (*(void (__fastcall **)(unsigned int *, __int64 *, signed __int64))(*(_QWORD *)v2[1] + 16i64))(v2[1], &v73, 8i64);
- v25 = sub_14066C150(&v88, &v71, &v71);
- v26 = (void *)sub_14066B580(v3 + 312, v25);
- sub_14066BC20(v3 + 312, v26);
- v66 = &v89;
- sub_140656EF0(&v89);
- sub_140656EF0(&v88);
- sub_140656EF0(&v71);
- }
- if ( v64 > 1 || v64 == 1 && v65 >= 1 )
- {
- sub_14066CCD0(v2, &v70);
- v62 = 0;
- (*(void (__fastcall **)(unsigned int *, int *, signed __int64))(*(_QWORD *)v2[1] + 16i64))(v2[1], &v62, 4i64);
- v27 = v62 & 0x7FFFFFFF;
- v62 &= 0x7FFFFFFFu;
- if ( *(_DWORD *)(v3 + 344) )
- {
- v28 = operator new(v27);
- v29 = (__int64)v28;
- v69 = (__int64)v28;
- (*(void (__fastcall **)(unsigned int *, void *, _QWORD))(*(_QWORD *)v2[1] + 16i64))(v2[1], v28, (unsigned int)v27);
- *(_QWORD *)(v3 + 360) = (*(__int64 (**)(void))(*(_QWORD *)v2[1] + 48i64))();
- v30 = (char *)operator new(0x1050ui64);
- v66 = v30;
- if ( v30 )
- v31 = (__int64 *)sub_14068FB10(v30, &unk_1408681C0, 56i64);
- else
- v31 = 0i64;
- _mm_storeu_si128((__m128i *)&v75, (__m128i)0i64);
- if ( v31 )
- {
- if ( *v31 )
- {
- v33 = 0;
- }
- else
- {
- v32 = sub_140657390(16i64);
- v66 = (char *)v32;
- if ( v32 )
- {
- *(_DWORD *)v32 = 1;
- *(_DWORD *)(v32 + 4) = 1;
- *(_QWORD *)(v32 + 8) = v31;
- }
- *v31 = v32;
- v33 = 1;
- }
- v34 = (unsigned int *)*v31;
- if ( !v33 )
- {
- for ( j = *v34; *v34; j = *v34 )
- {
- if ( (unsigned int)sub_140657680(v34, j, j + 1) == j )
- break;
- }
- v29 = v69;
- }
- *(_QWORD *)&v75 = v34;
- *((_QWORD *)&v75 + 1) = v31;
- }
- else
- {
- v31 = (__int64 *)*((_QWORD *)&v75 + 1);
- v34 = (unsigned int *)v75;
- }
- sub_14068FB30(v31, v29, (unsigned int)v27);
- v36 = sub_140051010(&qword_140A29370);
- v66 = (char *)v36;
- if ( v36 )
- v36 = sub_14065C4F0(v36, v29, v27, 1i64);
- sub_14066CDF0(v2, v36);
- (*(void (__fastcall **)(unsigned int *, int *, signed __int64))(*(_QWORD *)v2[1] + 16i64))(v2[1], &v62, 4i64);
- *((_QWORD *)&v75 + 1) = 0i64;
- if ( v34 )
- {
- *(_QWORD *)&v75 = 0i64;
- v37 = 0;
- if ( (unsigned int)sub_140657690(v34) )
- {
- v39 = *v34;
- }
- else
- {
- if ( (unsigned int)sub_140657690(v34 + 1) )
- v38 = v34[1];
- else
- v37 = 1;
- *((_QWORD *)v34 + 1) = 0i64;
- j_j_j__free_base(v31);
- if ( v37 )
- sub_1406574C0(v34);
- }
- }
- v27 = v62;
- v3 = v93;
- }
- v40 = 0;
- LODWORD(v69) = 0;
- if ( v27 > 0 )
- {
- v41 = v3 + 328;
- do
- {
- LODWORD(v95) = 0;
- (*(void (__fastcall **)(unsigned int *, unsigned __int64 *, signed __int64))(*(_QWORD *)v2[1] + 16i64))(
- v2[1],
- &v95,
- 4i64);
- if ( (unsigned int)v95 > v21 )
- {
- j_j_j__free_base(v22);
- v21 = v95;
- v22 = operator new((unsigned int)v95);
- }
- (*(void (__fastcall **)(unsigned int *, void *))(*(_QWORD *)v2[1] + 16i64))(v2[1], v22);
- *((_BYTE *)v22 + (unsigned int)v95) = 0;
- v68 = 0;
- (*(void (__fastcall **)(unsigned int *, int *, signed __int64))(*(_QWORD *)v2[1] + 16i64))(v2[1], &v68, 4i64);
- _mm_storeu_si128((__m128i *)lpMem, (__m128i)0i64);
- v77 = 0i64;
- v42 = sub_1406567A0(&v84, v22, 0xFFFFFFFFi64);
- v43 = sub_14066C1D0(&v90, v42, lpMem);
- v44 = (void *)sub_14066B5E0(v41, v43);
- sub_14066BE50(v41, v44);
- sub_14066D570(&v91);
- sub_140656EF0(&v90);
- sub_140656EF0(&v84);
- v45 = (char *)lpMem[0];
- if ( lpMem[0] )
- {
- v46 = (char *)lpMem[0];
- v66 = (char *)lpMem[0];
- for ( k = (char *)lpMem[1]; v46 != k; v66 = v46 )
- {
- sub_140656EF0(v46);
- v46 += 24;
- }
- v48 = ((unsigned __int64)((unsigned __int128)((v77 - (signed __int64)v45)
- * (signed __int128)3074457345618258603i64) >> 64) >> 63)
- + ((signed __int64)((unsigned __int128)((v77 - (signed __int64)v45)
- * (signed __int128)3074457345618258603i64) >> 64) >> 2);
- if ( v48 > 0xAAAAAAAAAAAAAAAi64 )
- invalid_parameter_noinfo_noreturn();
- if ( 24 * v48 >= 0x1000 )
- {
- if ( (unsigned __int8)v45 & 0x1F )
- invalid_parameter_noinfo_noreturn();
- v49 = (char *)*((_QWORD *)v45 - 1);
- if ( v49 >= v45 )
- invalid_parameter_noinfo_noreturn();
- v50 = v45 - v49;
- if ( v50 < 8 )
- invalid_parameter_noinfo_noreturn();
- if ( v50 > 0x27 )
- invalid_parameter_noinfo_noreturn();
- v45 = v49;
- }
- j_j__free_base(v45);
- _mm_storeu_si128((__m128i *)lpMem, (__m128i)0i64);
- v77 = 0i64;
- v40 = v69;
- }
- v51 = 0;
- if ( v68 > 0 )
- {
- v52 = v85;
- do
- {
- LODWORD(v95) = 0;
- (*(void (__fastcall **)(unsigned int *, unsigned __int64 *, signed __int64))(*(_QWORD *)v2[1] + 16i64))(
- v2[1],
- &v95,
- 4i64);
- if ( (unsigned int)v95 > v21 )
- {
- j_j_j__free_base(v22);
- v21 = v95;
- v22 = operator new((unsigned int)v95);
- }
- (*(void (__fastcall **)(unsigned int *, void *))(*(_QWORD *)v2[1] + 16i64))(v2[1], v22);
- *((_BYTE *)v22 + (unsigned int)v95) = 0;
- (*(void (__fastcall **)(unsigned int *, char *, signed __int64))(*(_QWORD *)v2[1] + 16i64))(
- v2[1],
- &v94,
- 1i64);
- v53 = sub_1406567A0(&v87, v22, 0xFFFFFFFFi64);
- v86 = *(_OWORD *)sub_14065F1C0(&v92, v53);
- v54 = v94 != 0;
- sub_1406565F0(&v80, &v86);
- v81 = v54;
- sub_14066F480(v52 + 48, &v80);
- sub_140656EF0(&v80);
- sub_140656EF0(&v87);
- ++v51;
- }
- while ( v51 < v68 );
- v40 = v69;
- }
- LODWORD(v69) = ++v40;
- }
- while ( v40 < v62 );
- }
- }
- j_j_j__free_base(v22);
- if ( !*(_DWORD *)(v93 + 344) )
- *(_QWORD *)(v93 + 360) = (*(__int64 (**)(void))(*(_QWORD *)v2[1] + 48i64))();
- v55 = *(_QWORD *)(v93 + 360);
- sub_14065C410("[archive] Current data offset: %ul bytes");
- v56 = (void (__fastcall ***)(_QWORD, signed __int64))*((_QWORD *)&v70 + 1);
- *((_QWORD *)&v70 + 1) = 0i64;
- v57 = (unsigned int *)v70;
- if ( (_QWORD)v70 )
- {
- *(_QWORD *)&v70 = 0i64;
- v58 = 0;
- if ( (unsigned int)sub_140657690(v57) )
- {
- v60 = *v57;
- }
- else
- {
- if ( (unsigned int)sub_140657690(v57 + 1) )
- v59 = v57[1];
- else
- v58 = 1;
- *((_QWORD *)v57 + 1) = 0i64;
- if ( v56 )
- (**v56)(v56, 1i64);
- if ( v58 )
- sub_1406574C0(v57);
- }
- }
- sub_140656EF0(&v79);
- sub_14002F6B0(v2);
- }
Advertisement
Add Comment
Please, Sign In to add comment