function sub_45() public payable {
uint256 v0 = sub_9C();
v0 = sub_1BA(*0x40, v0);
return(*0x40, v0 - *0x40);
}
function sub_9C() private view returns (uint256) {
address v0;
uint256 v1, v2, v3, v4;
v0 = v9;
*(address*)0x0 = v0;
*0x20 = 0x0;
v0 = keccak256(0x0, 0x40);
v0 = storage[v0];
if(!(v0 & 0xFF)) {
revert(0x0, 0x0);
}
v1 = storage[0x1];
v1 = sub_208(v1);
uint256 result = *0x40;
*0x40 = (v1 + 0x1F) / 0x20 * 0x20 + result + 0x20;
*(uint256*)result = v1;
v2 = storage[0x1];
v2 = sub_208(v2);
if(v2 != 0x0 && v2 <= 0x1F) {
v3 = storage[0x1];
*(uint256*)(result + 0x20) = v3 / 0x100 * 0x100;
}
else if(v2 != 0x0) {
uint256 v5 = result + v2 + 0x20;
*0x0 = 0x1;
v2 = keccak256(0x0, 0x20);
uint256 v6 = v2;
v2 = result + 0x20;
uint256 v7 = v6;
do {
v4 = storage[v7];
*(uint256*)v2 = v4;
++v7;
v2 += 0x20;
}
while(v5 > v2);
}
uint256 v8 = 0x0;
while(*(uint256*)result > v8) {
if(*(uint256*)result > v8) {
v1 = ((*(int256*)(v8 + result + 0x20) >>> 0xF8) << 0xF8) ^ 0xAB00000000000000000000000000000000000000000000000000000000000000;
if(*(uint256*)result > v8) {
*(char*)(v8 + result + 0x20) = (unsigned char)((v1 & 0xFF00000000000000000000000000000000000000000000000000000000000000) >>> 0xF8);
v8 = sub_252(v8);
continue;
}
}
*0x0 = 0x4E487B7100000000000000000000000000000000000000000000000000000000;
*0x4 = 0x32;
revert(0x0, 0x24);
}
return result;
}
function sub_1BA(uint256* param0, int256* param1) private pure returns (uint256) {
*param1 = 0x20;
uint256 max = *param0;
*(uint256*)(param1 + 1) = *param0;
for(uint256 i = 0x0; i < max; i += 0x20) {
*((int256*)((int256)param1 + i) + &loc_2) = *((int256*)((int256)param0 + i) + 1);
}
*((int256*)((int256)param1 + max) + &loc_2) = 0x0;
return (uint256)((int256*)(((max + 0x1F) & 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0) + (int256)param1) + &loc_2);
}