void FUN_00404900(undefined *param_1)

{
  undefined *puVar1;
  int iVar2;
  int *piVar3;
  undefined **ppuVar4;
  undefined **ppuVar5;
  int *piVar6;
  
  while (piVar6 = *(int **)(param_1 + 0x10), piVar6 != (int *)(param_1 + 0x10)) {
    piVar3 = (int *)piVar6[1];
    iVar2 = *piVar6;
    *piVar3 = iVar2;
    *(int **)(iVar2 + 4) = piVar3;
    *piVar6 = 0;
    piVar6[1] = 0;
    FUN_0040486c(piVar6);
  }
  while (piVar6 = *(int **)(param_1 + 8), piVar6 != (int *)(param_1 + 8)) {
    piVar3 = (int *)piVar6[1];
    iVar2 = *piVar6;
    *piVar3 = iVar2;
    *(int **)(iVar2 + 4) = piVar3;
    *piVar6 = 0;
    piVar6[1] = 0;
    FUN_00404900(piVar6);
  }
  if (*(void **)(param_1 + 0x1c) != (void *)0x0) {
    free(*(void **)(param_1 + 0x1c));
  }
  if (*(void **)(param_1 + 0x20) != (void *)0x0) {
    free(*(void **)(param_1 + 0x20));
  }
  puVar1 = PTR_LOOP_00433590;
  ppuVar4 = (undefined **)0x0;
  while( true ) {
    ppuVar5 = (undefined **)puVar1;
    if (ppuVar4 != (undefined **)0x0) {
      ppuVar5 = (undefined **)*ppuVar4;
    }
    if ((ppuVar5 == &PTR_LOOP_00433590) || (ppuVar5 == (undefined **)0x0)) break;
    ppuVar4 = ppuVar5;
    if (ppuVar5[2] == param_1) {
      ppuVar5[2] = (undefined *)0x0;
    }
  }
  free(param_1);
  return;
}