/*
 * Copyright 2014 The Emscripten Authors.  All rights reserved.
 * Emscripten is available under two separate licenses, the MIT license and the
 * University of Illinois/NCSA Open Source License.  Both these licenses can be
 * found in the LICENSE file.
 */

/*
 * This is a RANDOMLY GENERATED PROGRAM.
 *
 * Generator: csmith 2.2.0
 * Git version: bf42ffd
 * Options:   --no-volatiles --no-packed-struct --no-math64
 * Seed:      3993158628
 */

#include "csmith.h"


static long __undefined;

/* --- Struct/Union Declarations --- */
struct S0 {
   signed f0 : 2;
   signed f1 : 30;
   const unsigned f2 : 2;
   signed f3 : 15;
   unsigned f4 : 13;
   unsigned f5 : 2;
   signed f6 : 6;
   signed f7 : 19;
   signed f8 : 5;
};

union U1 {
   const int8_t  f0;
};

/* --- GLOBAL VARIABLES --- */
static int32_t g_2 = 0xDBC37078L;
static uint32_t g_24 = 1UL;
static int16_t g_36 = 1L;
static int32_t g_52 = 0L;
static int32_t g_53 = 0xB92BB776L;
static int32_t g_55 = 0xD870105CL;
static uint16_t g_72 = 0xB820L;
static int32_t *g_86 = &g_52;
static struct S0 g_109 = {1,-3768,1,145,49,0,-1,-585,0};
static uint8_t g_113 = 0xB8L;
static uint8_t g_114 = 0xE1L;
static int16_t g_126[4][6] = {{0x5BB1L,0x13A7L,0x5786L,0x89D4L,0x5786L,0x13A7L},{0xD5BCL,0x5BB1L,0x5786L,2L,0x8967L,0x89D4L},{0x4E36L,2L,0x13A7L,0x13A7L,2L,0x4E36L},{0x13A7L,2L,0x4E36L,0xF1A0L,0x8967L,0x5786L}};
static uint32_t g_141[2] = {1UL,1UL};
static int8_t g_143 = 1L;
static uint8_t g_144 = 0x18L;
static uint16_t *g_194[1] = {&g_72};
static int32_t g_215 = 3L;
static int32_t *g_214 = &g_215;
static int16_t g_217 = 0x0B9EL;
static int16_t *g_216 = &g_217;
static uint32_t g_234[6][6][7] = {{{4294967295UL,1UL,0xE50A6E4DL,0x7CBB9599L,0x4038AB73L,1UL,0x30275B19L},{0xEF103696L,4294967288UL,0xF9FCF56DL,4294967288UL,0xEF103696L,0UL,4UL},{0x4038AB73L,0x7CBB9599L,0xE50A6E4DL,1UL,4294967295UL,7UL,0xE50A6E4DL},{0UL,0xEF4BBCF4L,0UL,9UL,0UL,0xF9FCF56DL,0xF9FCF56DL},{0x30275B19L,0UL,0x7A5E963CL,0UL,0x30275B19L,0UL,0xE50A6E4DL},{0UL,9UL,0UL,0xEF4BBCF4L,0UL,0xF9FCF56DL,0xF01C7FA8L}},{{0xEEABF480L,0UL,0xB0A03C78L,0x3D45A5B2L,0x30275B19L,7UL,0xD95DDA20L},{0UL,0xEF4BBCF4L,1UL,0xEF4BBCF4L,0UL,0x9CA25930L,0xF01C7FA8L},{0x30275B19L,0x3D45A5B2L,0xB0A03C78L,0UL,0xEEABF480L,7UL,0xE50A6E4DL},{0UL,0xEF4BBCF4L,0UL,9UL,0UL,0xF9FCF56DL,0xF9FCF56DL},{0x30275B19L,0UL,0x7A5E963CL,0UL,0x30275B19L,0UL,0xE50A6E4DL},{0UL,9UL,0UL,0xEF4BBCF4L,0UL,0xF9FCF56DL,0xF01C7FA8L}},{{0xEEABF480L,0UL,0xB0A03C78L,0x3D45A5B2L,0x30275B19L,7UL,0xD95DDA20L},{0UL,0xEF4BBCF4L,1UL,0xEF4BBCF4L,0UL,0x9CA25930L,0xF01C7FA8L},{0x30275B19L,0x3D45A5B2L,0xB0A03C78L,0UL,0xEEABF480L,7UL,0xE50A6E4DL},{0UL,0xEF4BBCF4L,0UL,9UL,0UL,0xF9FCF56DL,0xF9FCF56DL},{0x30275B19L,0UL,0x7A5E963CL,0UL,0x30275B19L,0UL,0xE50A6E4DL},{0UL,9UL,0UL,0xEF4BBCF4L,0UL,0xF9FCF56DL,0xF01C7FA8L}},{{0xEEABF480L,0UL,0xB0A03C78L,0x3D45A5B2L,0x30275B19L,7UL,0xD95DDA20L},{0UL,0xEF4BBCF4L,1UL,0xEF4BBCF4L,0UL,0x9CA25930L,0xF01C7FA8L},{0x30275B19L,0x3D45A5B2L,0xB0A03C78L,0UL,0xEEABF480L,7UL,0xE50A6E4DL},{0UL,0xEF4BBCF4L,0UL,9UL,0UL,0xF9FCF56DL,0xF9FCF56DL},{0x30275B19L,0UL,0x7A5E963CL,0UL,0x30275B19L,0UL,0xE50A6E4DL},{0UL,9UL,0UL,0xEF4BBCF4L,0UL,0xF9FCF56DL,0xF01C7FA8L}},{{0xEEABF480L,0UL,0xB0A03C78L,0x3D45A5B2L,0x30275B19L,7UL,0xD95DDA20L},{0UL,0xEF4BBCF4L,1UL,0xEF4BBCF4L,0UL,0x9CA25930L,0xF01C7FA8L},{0x30275B19L,0x3D45A5B2L,0xB0A03C78L,0UL,0xEEABF480L,7UL,0xE50A6E4DL},{0UL,0xEF4BBCF4L,0UL,9UL,0UL,0xF9FCF56DL,0xF9FCF56DL},{0x30275B19L,0UL,0x7A5E963CL,0UL,0x30275B19L,0UL,0xE50A6E4DL},{0UL,9UL,0UL,0xEF4BBCF4L,0UL,0xF9FCF56DL,0xF01C7FA8L}},{{0x28C0AEB2L,0UL,0xFD89EE91L,0x495489C1L,0xD95DDA20L,0x177A3353L,0x7A5E963CL},{0xF9FCF56DL,4294967294UL,0x3E2A85B4L,4294967294UL,0xF9FCF56DL,4UL,0UL},{0xD95DDA20L,0x495489C1L,0xFD89EE91L,0UL,0x28C0AEB2L,0x177A3353L,0xB0A03C78L},{0x9CA25930L,4294967294UL,1UL,0xEF103696L,0xF9FCF56DL,1UL,1UL},{0xD95DDA20L,0UL,1UL,0UL,0xD95DDA20L,4294967295UL,0xB0A03C78L},{0xF9FCF56DL,0xEF103696L,1UL,4294967294UL,0x9CA25930L,1UL,0UL}}};
static uint32_t *g_252[2][6] = {{&g_141[1],(void*)0,&g_141[1],(void*)0,&g_141[1],(void*)0},{&g_141[1],(void*)0,&g_141[1],(void*)0,&g_141[1],(void*)0}};
static uint32_t g_312[2] = {0x15E444CFL,0x15E444CFL};
static const union U1 g_331 = {-8L};
static struct S0 g_350[9][8] = {{{-1,20557,0,-138,48,0,7,-279,4},{-0,-27047,1,59,12,0,3,510,2},{0,24814,0,172,41,1,5,583,-3},{1,12364,1,154,28,0,-0,-107,1},{0,24814,0,172,41,1,5,583,-3},{-0,-27047,1,59,12,0,3,510,2},{-1,20557,0,-138,48,0,7,-279,4},{-0,19189,1,60,64,1,1,97,2}},{{1,-6931,1,81,81,1,-2,483,0},{-1,-26584,0,-110,24,0,0,-318,3},{1,-10097,1,114,10,1,-4,152,3},{1,12364,1,154,28,0,-0,-107,1},{-1,20557,0,-138,48,0,7,-279,4},{-0,-28474,1,81,7,1,-7,16,2},{-1,32727,1,-65,83,1,4,-198,-0},{1,-10897,1,12,62,1,3,-592,2}},{{0,4827,1,-65,66,1,-3,-196,-3},{1,12364,1,154,28,0,-0,-107,1},{1,23006,1,51,25,1,-4,439,-4},{1,17086,1,-44,2,0,0,411,-4},{-1,20557,0,-138,48,0,7,-279,4},{1,17086,1,-44,2,0,0,411,-4},{1,23006,1,51,25,1,-4,439,-4},{1,12364,1,154,28,0,-0,-107,1}},{{1,-6931,1,81,81,1,-2,483,0},{-0,-27047,1,59,12,0,3,510,2},{0,4827,1,-65,66,1,-3,-196,-3},{1,-10897,1,12,62,1,3,-592,2},{0,24814,0,172,41,1,5,583,-3},{1,17086,1,-44,2,0,0,411,-4},{1,-6931,1,81,81,1,-2,483,0},{-0,19189,1,60,64,1,1,97,2}},{{-1,20557,0,-138,48,0,7,-279,4},{1,12364,1,154,28,0,-0,-107,1},{1,-10097,1,114,10,1,-4,152,3},{-1,-26584,0,-110,24,0,0,-318,3},{1,-6931,1,81,81,1,-2,483,0},{-0,-28474,1,81,7,1,-7,16,2},{1,-6931,1,81,81,1,-2,483,0},{-1,-26584,0,-110,24,0,0,-318,3}},{{0,4827,1,-65,66,1,-3,-196,-3},{-1,-26584,0,-110,24,0,0,-318,3},{0,4827,1,-65,66,1,-3,-196,-3},{1,17086,1,-44,2,0,0,411,-4},{-1,32727,1,-65,83,1,4,-198,-0},{-0,-27047,1,59,12,0,3,510,2},{1,23006,1,51,25,1,-4,439,-4},{-1,-26584,0,-110,24,0,0,-318,3}},{{-1,32727,1,-65,83,1,4,-198,-0},{-0,-27047,1,59,12,0,3,510,2},{1,23006,1,51,25,1,-4,439,-4},{-1,-26584,0,-110,24,0,0,-318,3},{0,24814,0,172,41,1,5,583,-3},{-0,19189,1,60,64,1,1,97,2},{-1,32727,1,-65,83,1,4,-198,-0},{-0,19189,1,60,64,1,1,97,2}},{{-1,32727,1,-65,83,1,4,-198,-0},{1,-10897,1,12,62,1,3,-592,2},{1,-10097,1,114,10,1,-4,152,3},{1,-10897,1,12,62,1,3,-592,2},{-1,32727,1,-65,83,1,4,-198,-0},{-0,-28474,1,81,7,1,-7,16,2},{-1,20557,0,-138,48,0,7,-279,4},{1,12364,1,154,28,0,-0,-107,1}},{{0,4827,1,-65,66,1,-3,-196,-3},{1,-10897,1,12,62,1,3,-592,2},{0,24814,0,172,41,1,5,583,-3},{1,17086,1,-44,2,0,0,411,-4},{1,-6931,1,81,81,1,-2,483,0},{-0,19189,1,60,64,1,1,97,2},{1,23006,1,51,25,1,-4,439,-4},{1,-10897,1,12,62,1,3,-592,2}}};
static uint16_t *g_351 = (void*)0;
static int16_t g_408 = 0x7620L;
static union U1 g_477 = {1L};
static int8_t *g_487 = &g_143;
static int8_t **g_486 = &g_487;
static const int32_t g_493 = 1L;
static int8_t g_543 = (-9L);
static uint8_t *g_555 = &g_144;
static uint8_t **g_554 = &g_555;
static uint16_t g_626 = 65526UL;
static const uint32_t g_664 = 1UL;
static const uint32_t g_666[1][9][4] = {{{4294967295UL,4294967293UL,4294967295UL,4294967293UL},{4294967295UL,4294967293UL,4294967295UL,4294967293UL},{4294967295UL,4294967293UL,4294967295UL,4294967293UL},{4294967295UL,4294967293UL,4294967295UL,4294967293UL},{4294967295UL,4294967293UL,4294967295UL,4294967293UL},{4294967295UL,4294967293UL,4294967295UL,4294967293UL},{4294967295UL,4294967293UL,4294967295UL,4294967293UL},{4294967295UL,4294967293UL,4294967295UL,4294967293UL},{4294967295UL,4294967293UL,4294967295UL,4294967293UL}}};
static uint8_t g_733 = 0UL;
static uint32_t g_776 = 4294967291UL;
static int32_t ** const g_786 = &g_214;
static int32_t ** const *g_785 = &g_786;
static int32_t ** const **g_784[2] = {&g_785,&g_785};
static uint16_t g_807 = 65535UL;
static int32_t *g_808 = (void*)0;
static int32_t g_812 = 0xAE392FB2L;
static union U1 g_824 = {0xC0L};
static int32_t g_825 = (-1L);
static int16_t g_891 = (-1L);
static uint32_t *g_967[10][9] = {{&g_234[2][0][1],&g_234[2][0][1],&g_141[0],&g_141[1],&g_141[0],&g_141[0],&g_141[1],&g_141[0],&g_234[2][0][1]},{&g_141[0],&g_234[4][3][3],&g_141[1],&g_234[3][1][4],&g_24,&g_141[0],&g_141[1],&g_234[2][0][1],&g_141[0]},{&g_24,&g_234[2][0][1],&g_234[2][0][1],&g_234[2][0][1],(void*)0,&g_234[2][0][1],&g_141[0],(void*)0,&g_234[4][3][3]},{&g_776,&g_234[3][1][4],&g_141[0],&g_141[1],&g_24,&g_234[2][0][1],&g_234[2][0][1],&g_234[2][0][1],(void*)0},{&g_234[3][1][4],&g_234[2][0][1],&g_24,&g_234[3][1][1],&g_234[3][1][1],&g_24,&g_234[2][0][1],&g_234[3][1][4],&g_141[0]},{&g_776,&g_24,&g_234[2][0][1],&g_24,&g_234[3][1][1],&g_141[0],&g_141[1],&g_141[1],&g_141[1]},{&g_234[4][3][3],&g_141[0],&g_24,&g_234[3][1][4],&g_24,&g_141[0],&g_234[4][3][3],&g_141[0],&g_141[0]},{&g_141[0],&g_234[2][0][1],&g_234[4][3][3],&g_234[3][1][4],&g_141[1],&g_234[3][1][1],(void*)0,&g_24,(void*)0},{(void*)0,&g_776,&g_24,&g_24,&g_776,(void*)0,&g_141[0],&g_141[0],&g_234[4][3][3]},{&g_24,&g_234[2][0][1],&g_24,&g_234[3][1][1],&g_141[0],&g_141[1],&g_141[1],&g_141[1],&g_141[1]}};
static int32_t * const *g_1021 = &g_214;
static int32_t * const **g_1020 = &g_1021;
static union U1 **g_1028 = (void*)0;
static int8_t g_1058 = 0x12L;
static int32_t ***g_1078 = (void*)0;
static int8_t ** const g_1095 = (void*)0;
static int8_t ** const *g_1094 = &g_1095;
static const union U1 g_1177 = {-3L};
static const int8_t *g_1218 = &g_1177.f0;
static const int8_t **g_1217 = &g_1218;


/* --- FORWARD DECLARATIONS --- */
static int16_t  func_1(void);
static int32_t  func_11(int32_t * p_12, uint32_t  p_13, const int32_t  p_14, int32_t  p_15, int32_t * p_16);
static uint32_t  func_20(uint32_t  p_21);
static const uint8_t  func_31(uint8_t  p_32);
static int32_t * func_40(uint32_t  p_41, int32_t * p_42, int16_t * p_43, int32_t  p_44, uint32_t * p_45);
static union U1  func_46(int8_t  p_47);
static int32_t  func_48(int32_t * p_49);
static uint16_t  func_97(uint32_t  p_98);
static int32_t * func_99(uint32_t * const  p_100, uint8_t  p_101, uint8_t  p_102, const int8_t  p_103);
static uint8_t  func_104(const struct S0  p_105, int16_t  p_106, int32_t  p_107);


/* --- FUNCTIONS --- */
/* ------------------------------------------ */
/* 
 * reads : g_2 g_24 g_36 g_53 g_86 g_52 g_109 g_114 g_72 g_144 g_55 g_126 g_141 g_214 g_216 g_215 g_217 g_234 g_312 g_331 g_350 g_351 g_143 g_408 g_486 g_493 g_487 g_543 g_113 g_554 g_555 g_477 g_626 g_784 g_666 g_824 g_825 g_785 g_786 g_891 g_733 g_967 g_1020 g_1028 g_807 g_1058 g_1078 g_1021
 * writes: g_2 g_24 g_36 g_52 g_53 g_55 g_86 g_113 g_126 g_109.f3 g_114 g_141 g_143 g_144 g_72 g_194 g_215 g_252 g_217 g_312 g_234 g_486 g_350.f8 g_214 g_351 g_626 g_776 g_808 g_408 g_733 g_1020 g_807 g_825 g_1078 g_1094 g_1058 g_967 g_543
 */
static int16_t  func_1(void)
{ /* block id: 0 */
    int32_t l_8 = (-1L);
    int32_t *l_19 = (void*)0;
    uint32_t l_39 = 18446744073709551615UL;
    if (g_2)
    { /* block id: 1 */
        uint8_t l_3 = 0UL;
        int32_t l_22 = 0xB0420410L;
        uint32_t *l_23 = &g_24;
        int16_t *l_35 = &g_36;
        int32_t *l_1232 = &g_52;
        l_3--;
        for (l_3 = 2; (l_3 <= 56); l_3 = safe_add_func_int8_t_s_s(l_3, 1))
        { /* block id: 5 */
            int16_t l_9[2][5][10] = {{{0x4E76L,0xFA83L,0x1F6FL,0xCA36L,0xCA36L,0x1F6FL,0xFA83L,0x4E76L,(-1L),0xC1D1L},{0x2278L,0xF72BL,0L,0xDB82L,8L,0x1F6FL,0xEE5AL,0x2278L,0xDB82L,0xCA36L},{0x4E76L,0x80DBL,0L,8L,0x391CL,0x2278L,2L,0x4E76L,1L,0xCA36L},{0L,0xD2B5L,0x1F6FL,0xC1D1L,8L,0L,2L,0L,8L,0xC1D1L},{0x9F7CL,0x80DBL,0x9F7CL,0xC1D1L,0xCA36L,0L,0xEE5AL,0x9F7CL,1L,(-1L)}},{{0x9F7CL,0xF72BL,0x4E76L,8L,1L,0L,0xFA83L,0x9F7CL,0xDB82L,1L},{0L,0xFA83L,0x9F7CL,0xDB82L,1L,0x2278L,0x80DBL,0L,(-1L),(-1L)},{0x4E76L,0xFA83L,0x1F6FL,0xCA36L,0xCA36L,0x1F6FL,0xFA83L,0x4E76L,(-1L),0xC1D1L},{0x2278L,0xF72BL,0L,0xDB82L,8L,0x1F6FL,0xEE5AL,0x2278L,0xDB82L,0xCA36L},{0x4E76L,0x80DBL,0L,8L,0x391CL,0x2278L,2L,0x4E76L,1L,0xCA36L}}};
            int32_t *l_10 = &g_2;
            int i, j, k;
            (*l_10) |= (l_9[0][1][8] = l_8);
        }
        (*l_1232) = func_11(&l_8, (safe_rshift_func_uint16_t_u_s((((void*)0 == l_19) , (func_20((++(*l_23))) , (safe_rshift_func_uint8_t_u_s(func_31(((safe_rshift_func_uint16_t_u_s((0xFA3CL & g_2), (((!((*l_35) ^= g_24)) <= g_24) || (safe_sub_func_int32_t_s_s((l_22 <= l_39), 0xE948ECA1L))))) , 1UL)), g_109.f2)))), g_666[0][0][3])), l_22, l_22, &l_22);
    }
    else
    { /* block id: 556 */
        int16_t l_1233 = 0x9A09L;
        int8_t *l_1240 = &g_1058;
        const uint8_t l_1241 = 1UL;
        union U1 l_1242 = {9L};
        (*g_214) = ((g_477 , l_1233) ^ (((safe_add_func_int16_t_s_s((safe_sub_func_uint8_t_u_u((((((!((safe_mul_func_int8_t_s_s(((*l_1240) = ((*g_487) = 4L)), ((-1L) & (-7L)))) & ((((l_1241 < (l_1241 | l_1241)) , (((l_1242 , l_1233) < l_1241) & l_39)) > l_1242.f0) | 6UL))) , l_1233) != (*g_86)) == 0x7FL) != (*g_555)), (*g_555))), (-1L))) , l_39) <= (**g_1021)));
        (**g_786) &= 0x557529FFL;
    }
    return (*g_216);
}


/* ------------------------------------------ */
/* 
 * reads : g_216 g_52 g_824 g_555 g_144 g_141 g_825 g_487 g_217 g_785 g_786 g_214 g_331 g_554 g_143 g_234 g_626 g_891 g_733 g_114 g_486 g_312 g_967 g_55 g_477 g_1020 g_1028 g_807 g_1058 g_408 g_1078 g_215 g_350.f6 g_72 g_113
 * writes: g_72 g_52 g_114 g_217 g_808 g_126 g_143 g_214 g_408 g_234 g_144 g_626 g_733 g_351 g_141 g_252 g_113 g_1020 g_807 g_776 g_55 g_24 g_825 g_1078 g_1094 g_1058 g_215 g_2 g_967 g_543
 */
static int32_t  func_11(int32_t * p_12, uint32_t  p_13, const int32_t  p_14, int32_t  p_15, int32_t * p_16)
{ /* block id: 328 */
    int32_t *l_794 = &g_55;
    uint32_t l_821 = 0UL;
    const uint32_t *l_910 = (void*)0;
    const int8_t *l_915 = &g_477.f0;
    uint32_t **l_968 = &g_252[0][5];
    int16_t l_969 = 0L;
    struct S0 l_988[8] = {{-1,2956,0,-52,85,0,1,513,4},{-1,747,0,116,79,1,2,-456,1},{-1,2956,0,-52,85,0,1,513,4},{-1,747,0,116,79,1,2,-456,1},{-1,2956,0,-52,85,0,1,513,4},{-1,747,0,116,79,1,2,-456,1},{-1,2956,0,-52,85,0,1,513,4},{-1,747,0,116,79,1,2,-456,1}};
    uint8_t **l_992[6] = {&g_555,&g_555,&g_555,&g_555,&g_555,&g_555};
    uint32_t l_1018 = 1UL;
    int32_t l_1033[10] = {(-5L),0x05CEC50EL,(-5L),0x05CEC50EL,(-5L),0x05CEC50EL,(-5L),0x05CEC50EL,(-5L),0x05CEC50EL};
    int32_t l_1163[10];
    int32_t l_1220 = 9L;
    int32_t l_1229 = 0x0A906A68L;
    uint32_t l_1230[8][4] = {{0x1199E2CDL,0xCCF4C89AL,5UL,0UL},{0x1199E2CDL,0xE2EEF004L,0UL,0UL},{0xCCF4C89AL,0xCCF4C89AL,0x4DCCF4F6L,0xE2EEF004L},{0xE2EEF004L,0x1199E2CDL,0x4DCCF4F6L,0x1199E2CDL},{0xCCF4C89AL,5UL,0UL,0x4DCCF4F6L},{0x1199E2CDL,5UL,5UL,0x1199E2CDL},{5UL,0x1199E2CDL,0xCCF4C89AL,0xE2EEF004L},{5UL,0xCCF4C89AL,5UL,0UL}};
    uint16_t **l_1231[2];
    int i, j;
    for (i = 0; i < 10; i++)
        l_1163[i] = 0x1BA9B6D4L;
    for (i = 0; i < 2; i++)
        l_1231[i] = &g_194[0];
lbl_1113:
    for (g_72 = (-30); (g_72 < 11); g_72 = safe_add_func_uint16_t_u_u(g_72, 8))
    { /* block id: 331 */
        int32_t *l_793 = &g_52;
        int32_t *l_815 = &g_812;
        uint32_t l_889 = 18446744073709551615UL;
        uint16_t *l_928 = &g_626;
        int32_t l_956 = 0x322A5631L;
        uint32_t l_957 = 0x0E4C1742L;
        for (g_52 = 0; (g_52 == (-15)); --g_52)
        { /* block id: 334 */
            int32_t l_792 = 0x51FDD8C4L;
            (*p_12) &= l_792;
        }
        l_794 = l_793;
        for (g_114 = 0; (g_114 == 36); ++g_114)
        { /* block id: 340 */
            uint16_t * const l_806 = &g_807;
            uint16_t * const *l_805 = &l_806;
            int32_t l_816 = 1L;
            uint32_t **l_831 = &g_252[1][0];
            for (g_52 = (-18); (g_52 == (-27)); g_52 = safe_sub_func_int16_t_s_s(g_52, 7))
            { /* block id: 343 */
                uint16_t **l_803 = &g_351;
                uint16_t * const **l_804 = (void*)0;
                int32_t **l_809 = (void*)0;
                int32_t *l_811 = &g_812;
                int32_t **l_810 = &l_811;
                int32_t *l_814 = &g_812;
                int32_t **l_813[9][9][3] = {{{&l_814,(void*)0,&l_814},{&l_814,&l_814,&l_814},{&l_814,&l_814,(void*)0},{&l_814,&l_814,&l_814},{&l_814,&l_814,&l_814},{&l_814,&l_814,&l_814},{&l_814,&l_814,(void*)0},{&l_814,&l_814,&l_814},{&l_814,&l_814,(void*)0}},{{&l_814,&l_814,&l_814},{&l_814,&l_814,&l_814},{(void*)0,&l_814,&l_814},{(void*)0,&l_814,&l_814},{&l_814,&l_814,&l_814},{(void*)0,(void*)0,&l_814},{(void*)0,&l_814,&l_814},{&l_814,&l_814,&l_814},{&l_814,&l_814,&l_814}},{{&l_814,&l_814,(void*)0},{&l_814,&l_814,&l_814},{&l_814,&l_814,(void*)0},{&l_814,(void*)0,&l_814},{&l_814,&l_814,&l_814},{&l_814,(void*)0,&l_814},{&l_814,&l_814,(void*)0},{(void*)0,&l_814,&l_814},{(void*)0,&l_814,&l_814}},{{&l_814,&l_814,&l_814},{(void*)0,&l_814,&l_814},{(void*)0,(void*)0,(void*)0},{&l_814,&l_814,&l_814},{&l_814,(void*)0,&l_814},{&l_814,&l_814,&l_814},{&l_814,&l_814,&l_814},{&l_814,&l_814,&l_814},{&l_814,&l_814,(void*)0}},{{&l_814,&l_814,&l_814},{&l_814,&l_814,&l_814},{&l_814,(void*)0,&l_814},{&l_814,&l_814,&l_814},{&l_814,&l_814,(void*)0},{&l_814,&l_814,&l_814},{&l_814,&l_814,&l_814},{&l_814,&l_814,&l_814},{&l_814,&l_814,(void*)0}},{{&l_814,&l_814,&l_814},{&l_814,&l_814,(void*)0},{&l_814,&l_814,&l_814},{&l_814,&l_814,&l_814},{(void*)0,&l_814,&l_814},{(void*)0,&l_814,&l_814},{&l_814,&l_814,&l_814},{(void*)0,(void*)0,&l_814},{(void*)0,(void*)0,&l_814}},{{&l_814,&l_814,&l_814},{(void*)0,&l_814,&l_814},{&l_814,&l_814,&l_814},{&l_814,&l_814,&l_814},{&l_814,&l_814,&l_814},{&l_814,&l_814,&l_814},{&l_814,&l_814,&l_814},{(void*)0,(void*)0,(void*)0},{&l_814,&l_814,(void*)0}},{{&l_814,(void*)0,&l_814},{&l_814,&l_814,(void*)0},{&l_814,(void*)0,(void*)0},{&l_814,&l_814,&l_814},{(void*)0,(void*)0,&l_814},{&l_814,&l_814,&l_814},{&l_814,&l_814,&l_814},{&l_814,&l_814,&l_814},{&l_814,&l_814,&l_814}},{{&l_814,&l_814,&l_814},{(void*)0,&l_814,&l_814},{&l_814,&l_814,&l_814},{&l_814,(void*)0,(void*)0},{&l_814,&l_814,(void*)0},{&l_814,(void*)0,&l_814},{&l_814,&l_814,(void*)0},{&l_814,&l_814,(void*)0},{&l_814,&l_814,&l_814}}};
                int16_t *l_822 = (void*)0;
                int16_t *l_823[3][4] = {{(void*)0,(void*)0,(void*)0,(void*)0},{(void*)0,(void*)0,(void*)0,(void*)0},{(void*)0,(void*)0,(void*)0,(void*)0}};
                int32_t l_826[6][10][1] = {{{7L},{0x94DFE73AL},{1L},{(-1L)},{2L},{0x0C09348AL},{2L},{(-1L)},{1L},{0x94DFE73AL}},{{7L},{0xCD063AC6L},{0x9A614DC4L},{0xCD063AC6L},{7L},{0x94DFE73AL},{1L},{(-1L)},{2L},{0x0C09348AL}},{{2L},{(-1L)},{1L},{0x94DFE73AL},{7L},{0xCD063AC6L},{0x9A614DC4L},{0xCD063AC6L},{7L},{0x94DFE73AL}},{{1L},{(-1L)},{2L},{0x0C09348AL},{2L},{(-1L)},{1L},{0x94DFE73AL},{7L},{0xCD063AC6L}},{{0x9A614DC4L},{0xCD063AC6L},{7L},{0x94DFE73AL},{1L},{(-1L)},{2L},{0x0C09348AL},{2L},{(-1L)}},{{1L},{0x94DFE73AL},{7L},{0xCD063AC6L},{0x9A614DC4L},{0xCD063AC6L},{7L},{0x94DFE73AL},{1L},{(-1L)}}};
                int i, j, k;
                (*p_16) &= (((*g_487) = (safe_sub_func_int8_t_s_s((p_15 , (((((safe_add_func_int16_t_s_s(((*g_216) = (l_803 != (l_805 = (void*)0))), ((((g_126[2][2] = ((((!(((l_815 = ((*l_810) = (g_808 = (void*)0))) != (void*)0) == (~1L))) != l_816) | (safe_add_func_int8_t_s_s(((safe_sub_func_int32_t_s_s((((p_15 == 1L) == (*l_793)) >= (*l_793)), l_821)) >= l_816), p_14))) | p_14)) , g_824) , (*g_555)) != (*l_793)))) , 0x04B39DE0L) ^ p_15) ^ g_141[1]) || g_825)), (*l_794)))) > l_826[1][1][0]);
            }
            (*l_793) = (safe_rshift_func_int16_t_s_u((*g_216), (safe_mod_func_uint8_t_u_u(((void*)0 != l_831), ((*l_794) & p_13)))));
            if ((*p_16))
            { /* block id: 354 */
                int32_t **l_832 = (void*)0;
                int32_t **l_833[1][10][2] = {{{&g_86,&g_86},{&l_794,&g_86},{&g_86,&l_794},{&l_793,&l_793},{&l_794,&l_793},{&l_793,&l_794},{&l_793,&l_793},{&l_794,&l_793},{&l_793,&l_794},{&g_86,&g_86}}};
                int i, j, k;
                (*g_786) = (**g_785);
                p_12 = ((**g_785) = &p_15);
            }
            else
            { /* block id: 358 */
                uint32_t l_834 = 0x597229EDL;
                ++l_834;
                (**g_785) = l_793;
                if ((*l_794))
                    continue;
            }
        }
        for (g_143 = 20; (g_143 >= 19); g_143 = safe_sub_func_int8_t_s_s(g_143, 3))
        { /* block id: 366 */
            int8_t *l_858[7] = {&g_543,&g_543,&g_543,&g_543,&g_543,&g_543,&g_543};
            const int32_t l_859 = 0x8F3A324DL;
            int8_t l_860 = 3L;
            union U1 *l_863 = (void*)0;
            int32_t l_868 = 0x4157F9B0L;
            int16_t *l_919[10];
            uint32_t *l_962 = &g_141[1];
            int i;
            for (i = 0; i < 10; i++)
                l_919[i] = &g_126[1][4];
            (**g_785) = (void*)0;
            if (((safe_div_func_int8_t_s_s((safe_mod_func_uint32_t_u_u((((((*g_216) <= (safe_mul_func_uint8_t_u_u(((g_331 , (**g_554)) , (safe_sub_func_int8_t_s_s((safe_unary_minus_func_int8_t_s(((safe_sub_func_uint32_t_u_u((safe_mod_func_uint32_t_u_u((+p_15), ((0L > (safe_sub_func_int8_t_s_s(((*l_793) = (safe_sub_func_uint8_t_u_u((safe_add_func_int16_t_s_s((g_408 = (*g_216)), (&g_808 != &g_808))), p_14))), p_14))) ^ (-1L)))), l_859)) == p_15))), (*g_487)))), p_15))) , 2L) == l_859) >= l_860), p_13)), 0x22L)) & (*g_216)))
            { /* block id: 370 */
                union U1 *l_862 = &g_477;
                union U1 **l_861 = &l_862;
                uint32_t *l_869 = &g_234[2][0][1];
                int32_t l_876 = (-1L);
                uint32_t *l_888[4][6] = {{&g_141[1],&g_141[1],(void*)0,&g_141[1],&g_141[1],(void*)0},{&g_141[1],&g_141[1],(void*)0,&g_141[1],&g_141[1],&g_141[1]},{&g_141[1],&g_141[1],&g_141[1],&g_141[1],&g_141[1],&g_141[1]},{&g_141[1],&g_141[1],&g_141[1],&g_141[1],&g_141[1],&g_141[1]}};
                uint16_t *l_890 = &g_626;
                uint32_t l_896 = 0x1B4D8A09L;
                uint8_t *l_899 = &g_733;
                uint8_t *l_904 = (void*)0;
                uint8_t *l_905 = &g_114;
                const uint32_t *l_909 = &g_666[0][5][1];
                const uint32_t **l_908[2];
                const int8_t **l_916 = &l_915;
                const int8_t *l_918 = &g_477.f0;
                const int8_t **l_917 = &l_918;
                int i, j;
                for (i = 0; i < 2; i++)
                    l_908[i] = &l_909;
                (*l_794) = ((((l_863 = ((*l_861) = (void*)0)) == ((((safe_rshift_func_uint8_t_u_u((((*l_794) || (safe_unary_minus_func_uint8_t_u(((safe_unary_minus_func_int32_t_s((-1L))) <= 0xC8L)))) != (((*l_890) |= ((((++(*l_869)) >= ((safe_div_func_int32_t_s_s((safe_lshift_func_int8_t_s_u((l_876 || (((safe_add_func_uint8_t_u_u((safe_mul_func_uint8_t_u_u(((**g_554) = (*g_555)), (*g_487))), ((safe_mul_func_uint8_t_u_u(((safe_unary_minus_func_uint32_t_u((safe_add_func_uint32_t_u_u((safe_mod_func_uint8_t_u_u(l_876, (((((l_889 = (0xEDF1L != 0xC34DL)) , (void*)0) != (void*)0) >= (*p_16)) , p_14))), p_15)))) , (*l_794)), 0xE3L)) < 0x71L))) ^ l_876) != (*l_793))), (*l_794))), (*p_12))) > 0x7A44L)) > (*g_216)) != 3UL)) , p_13)), 6)) > g_891) , 0x39L) , (void*)0)) , p_15) ^ 65534UL);
                (*p_12) |= (((*l_861) != (((l_868 ^= ((safe_sub_func_uint8_t_u_u(((*g_555) = (l_896 == 0L)), (safe_mul_func_int16_t_s_s((0xC16CF829L != (((*l_899)--) < (safe_div_func_uint16_t_u_u((((((*l_869) = p_14) > (*p_16)) == ((((*g_487) > ((*l_905)--)) , &l_896) != (l_910 = p_16))) && (-1L)), (*g_216))))), (*g_216))))) , p_14)) && p_13) , &g_331)) || 0xAD58L);
                if ((*l_793))
                    break;
                (*p_16) &= ((p_13 >= (safe_mod_func_int32_t_s_s((0xCBE4L >= ((*g_555) , (*g_216))), 1UL))) >= (safe_sub_func_int32_t_s_s((*p_12), ((((((*l_917) = ((*l_916) = l_915)) != (void*)0) , l_919[1]) != l_890) == p_14))));
            }
            else
            { /* block id: 389 */
                uint16_t **l_929 = &g_351;
                int32_t l_930 = 0x94F847F7L;
                struct S0 l_954 = {0,-17641,1,-5,1,1,-0,-701,-1};
                int32_t l_955[6][2] = {{2L,2L},{0xABC97F79L,2L},{2L,0xABC97F79L},{2L,2L},{0xABC97F79L,2L},{2L,0xABC97F79L}};
                int i, j;
                l_868 ^= ((safe_div_func_uint16_t_u_u((((*l_793) = (((-1L) || (safe_rshift_func_uint8_t_u_u((safe_sub_func_int16_t_s_s((safe_div_func_int16_t_s_s((((*l_929) = l_928) == ((((l_930 == ((safe_rshift_func_int16_t_s_s((safe_unary_minus_func_uint16_t_u((safe_mod_func_int8_t_s_s((((*g_216) = ((void*)0 == &g_626)) & ((!((((l_930 >= (safe_add_func_uint16_t_u_u(((safe_sub_func_uint32_t_u_u((safe_mul_func_int8_t_s_s((safe_sub_func_uint8_t_u_u((((*l_794) < ((safe_div_func_uint16_t_u_u(((safe_div_func_uint32_t_u_u((safe_lshift_func_int8_t_s_s((((l_957 |= ((*p_12) |= ((l_954.f6 = (l_956 |= (l_955[5][0] ^= (safe_add_func_int32_t_s_s((safe_mod_func_int32_t_s_s(((l_954 , 65527UL) < 0x3CB0L), l_954.f7)), 0x40492926L))))) | 0x30L))) >= 0x67C755EDL) < (*l_794)), 5)), (*p_16))) , p_13), 0xE718L)) , l_859)) && (*g_555)), 0x15L)), (**g_486))), 0xF838E5DEL)) && 0x0FL), 0xA8E8L))) != 0x32L) == 1UL) & p_14)) == p_14)), (*g_487))))), 6)) ^ (*g_487))) | p_13) < 1L) , &g_72)), 0x370CL)), (-1L))), l_954.f1))) <= l_859)) , p_14), g_312[1])) && 0x4B9B8319L);
                if ((*p_12))
                    continue;
            }
            (*p_12) ^= ((**g_486) || (((safe_mod_func_int32_t_s_s((*p_16), (--(*l_962)))) == ((**g_554) ^ 0xB0L)) == p_14));
            if ((*l_794))
                continue;
        }
    }
    if ((((safe_add_func_int16_t_s_s((((*l_968) = g_967[4][1]) == p_16), (0x5FL >= ((((+(l_969 && (+((**g_486) &= ((*l_794) & (safe_rshift_func_int8_t_s_s((p_13 < (safe_rshift_func_int16_t_s_s(0x58D4L, 9))), 2))))))) > ((-6L) && ((*l_794) , 0x3108L))) < (*l_794)) && 0x9B63F63FL)))) , g_477) , 0xF4F5C698L))
    { /* block id: 408 */
        int32_t l_993[7][4][7] = {{{(-1L),0x669ADB8DL,(-1L),0x768A8FF2L,(-9L),0x5618A3D9L,(-1L)},{(-1L),1L,1L,(-1L),0L,0x0CE0602CL,(-8L)},{0xBDF91091L,(-9L),0L,0L,(-9L),0xBDF91091L,(-1L)},{(-3L),0x65E176B1L,0xD0E18EF1L,(-1L),7L,0xD0E18EF1L,(-1L)}},{{(-9L),(-1L),0x63B56E82L,(-9L),0L,0xA0C6014DL,(-9L)},{0x0CE0602CL,0x65E176B1L,0x8B067229L,0L,(-8L),1L,1L},{5L,(-9L),0x5618A3D9L,(-9L),5L,(-1L),(-1L)},{0x3CB930F8L,1L,0L,7L,(-3L),1L,0x3CB930F8L}},{{0L,0x669ADB8DL,(-1L),0L,(-1L),0xDDF01AC2L,0x6F8CD22DL},{0x3CB930F8L,7L,(-1L),(-8L),0x32492198L,0xD0E18EF1L,0x32492198L},{5L,0x6F8CD22DL,0x6F8CD22DL,5L,0xDDF01AC2L,0L,0x768A8FF2L},{0x0CE0602CL,0x45BD0F4FL,0xBCF91C2CL,(-3L),0x45BD0F4FL,(-8L),1L}},{{(-9L),0xF839E9FAL,0x5618A3D9L,(-1L),0L,0x5618A3D9L,0x768A8FF2L},{(-3L),1L,0x0CE0602CL,0x32492198L,(-3L),(-3L),0x32492198L},{0xBDF91091L,5L,0xBDF91091L,0xDDF01AC2L,0xF839E9FAL,6L,0x6F8CD22DL},{(-1L),(-3L),0xD0E18EF1L,0x45BD0F4FL,0x65E176B1L,(-1L),0x3CB930F8L}},{{(-1L),0x6F8CD22DL,0xA0C6014DL,0L,0L,6L,(-1L)},{0x8B067229L,(-1L),1L,(-3L),0x3CB930F8L,(-3L),1L},{0L,0L,(-1L),0xF839E9FAL,(-1L),0x5618A3D9L,(-9L)},{0x65E176B1L,1L,1L,0x65E176B1L,0L,(-8L),(-1L)}},{{0xBDF91091L,(-1L),0xDDF01AC2L,0L,(-1L),0L,(-1L)},{0x45BD0F4FL,(-8L),0xD0E18EF1L,0x3CB930F8L,0x3CB930F8L,0xD0E18EF1L,(-8L)},{(-9L),(-1L),0L,(-1L),0L,0xDDF01AC2L,(-1L)},{0x0CE0602CL,(-1L),0L,1L,1L,0xD0E18EF1L,1L}},{{(-1L),0L,(-1L),0xDDF01AC2L,0x6F8CD22DL,0x669ADB8DL,0x63B56E82L},{(-8L),1L,0x9EE64B86L,0x8B067229L,0x9EE64B86L,1L,(-8L)},{0L,0xBDF91091L,(-1L),0L,0x63B56E82L,6L,0x2F367A28L},{0x0CE0602CL,0x8B067229L,0x3CB930F8L,1L,(-3L),7L,0L}}};
        int8_t l_1011 = (-1L);
        int32_t l_1019 = 0L;
        int32_t ***l_1023 = (void*)0;
        union U1 *l_1027 = &g_824;
        union U1 ** const l_1026 = &l_1027;
        int i, j, k;
        for (g_113 = 0; (g_113 >= 15); g_113++)
        { /* block id: 411 */
            uint8_t **l_983 = &g_555;
            int32_t l_987 = (-9L);
        }
        (*p_16) = (((safe_rshift_func_uint16_t_u_u(((safe_div_func_int32_t_s_s((*l_794), (((*g_555) = (safe_sub_func_int32_t_s_s(0x9FC66077L, 1UL))) , ((*p_12) = l_1011)))) == ((safe_mul_func_int16_t_s_s((*g_216), (((*l_794) ^ 4294967295UL) & ((**g_486) = (((0xFFF2L == ((l_993[0][1][0] = (safe_mul_func_uint8_t_u_u((safe_lshift_func_int8_t_s_s(l_993[0][1][0], 1)), l_1018))) && (-9L))) > 0UL) , p_14))))) <= p_14)), 13)) < (-8L)) , (*l_794));
        for (l_1011 = 0; (l_1011 <= 1); l_1011 += 1)
        { /* block id: 437 */
            int32_t * const ***l_1022 = &g_1020;
            int i;
            if (l_1019)
                break;
            (*p_16) |= (((*l_794) , l_993[6][1][0]) && (1L || (((*g_555) = ((((*l_1022) = g_1020) == l_1023) ^ (safe_lshift_func_uint16_t_u_u(((((*l_794) , l_1026) != g_1028) ^ p_14), 0)))) < p_15)));
            l_1033[5] = (safe_mod_func_int8_t_s_s((-6L), (++(*g_555))));
            for (g_114 = 0; (g_114 <= 1); g_114 += 1)
            { /* block id: 446 */
                for (l_821 = 0; (l_821 <= 1); l_821 += 1)
                { /* block id: 449 */
                    uint16_t *l_1036 = (void*)0;
                    uint16_t *l_1037 = &g_807;
                    int32_t l_1040[3][4];
                    int i, j;
                    for (i = 0; i < 3; i++)
                    {
                        for (j = 0; j < 4; j++)
                            l_1040[i][j] = 0x5DAFB0C6L;
                    }
                    (*p_16) = ((safe_mul_func_int16_t_s_s(0xA4FBL, (*g_216))) , (((++(*l_1037)) | l_1040[0][1]) , (*p_12)));
                    if ((*p_16))
                        continue;
                }
            }
        }
    }
    else
    { /* block id: 456 */
        int16_t l_1043 = 0x49EFL;
        uint32_t *l_1048 = &g_776;
        uint32_t *l_1057 = &g_24;
        int32_t l_1059 = 0x6FF24338L;
        int32_t l_1068 = 0x5AC0A6A1L;
        int8_t l_1069[9];
        int32_t l_1070[8][1][4] = {{{0x7F392DC0L,0x199421BFL,0xC16261B1L,1L}},{{0xC16261B1L,1L,0xC16261B1L,0x199421BFL}},{{0x7F392DC0L,1L,0xD4EC7BF7L,1L}},{{0x7F392DC0L,0x199421BFL,0xC16261B1L,1L}},{{0xC16261B1L,1L,0xC16261B1L,0x199421BFL}},{{0x7F392DC0L,1L,0xD4EC7BF7L,1L}},{{0x7F392DC0L,0x199421BFL,0xC16261B1L,1L}},{{0xC16261B1L,1L,0xC16261B1L,0x199421BFL}}};
        uint32_t l_1071 = 1UL;
        const union U1 *l_1176 = &g_1177;
        union U1 *l_1179[8][7] = {{&g_824,&g_477,(void*)0,&g_477,&g_824,&g_477,(void*)0},{&g_477,&g_477,(void*)0,&g_824,(void*)0,(void*)0,&g_824},{(void*)0,&g_824,(void*)0,&g_477,(void*)0,&g_824,(void*)0},{&g_477,&g_824,&g_824,&g_477,(void*)0,(void*)0,(void*)0},{&g_824,&g_824,(void*)0,&g_824,&g_824,&g_824,(void*)0},{(void*)0,&g_477,&g_824,&g_824,&g_477,(void*)0,(void*)0},{(void*)0,&g_477,(void*)0,&g_824,(void*)0,&g_477,(void*)0},{(void*)0,&g_824,(void*)0,&g_477,&g_477,(void*)0,&g_824}};
        uint16_t **l_1182 = &g_351;
        uint16_t ***l_1181 = &l_1182;
        struct S0 l_1185 = {-0,1627,0,19,60,1,5,363,-1};
        int i, j, k;
        for (i = 0; i < 9; i++)
            l_1069[i] = (-8L);
        l_1059 |= (((safe_lshift_func_int8_t_s_s((((p_15 ^ ((*g_487) = (l_1043 ^ ((*l_794) = ((p_13 | (*l_794)) || ((*l_1048) = (((*g_555)--) , ((safe_rshift_func_int16_t_s_s((*l_794), 4)) > (*l_794))))))))) ^ (safe_add_func_int32_t_s_s(((*p_16) = l_1033[5]), ((*l_1057) = (!(safe_mul_func_int16_t_s_s(((((safe_sub_func_int16_t_s_s(l_1043, (safe_add_func_int8_t_s_s(p_13, p_14)))) && p_15) > p_14) , (*g_216)), p_14))))))) == l_1043), g_1058)) >= l_1043) & (*g_216));
        for (g_825 = 22; (g_825 > (-1)); g_825 = safe_sub_func_uint8_t_u_u(g_825, 7))
        { /* block id: 466 */
            int32_t *l_1062 = &g_2;
            int32_t *l_1063 = &g_215;
            int32_t l_1064 = 0x85D314CCL;
            int32_t *l_1065 = &g_2;
            int32_t *l_1066 = &l_1059;
            int32_t *l_1067[1][1][1];
            int32_t **l_1087 = &g_214;
            int32_t *** const l_1086 = &l_1087;
            uint32_t l_1170 = 0x1133297AL;
            const union U1 *l_1175 = &g_331;
            int i, j, k;
            for (i = 0; i < 1; i++)
            {
                for (j = 0; j < 1; j++)
                {
                    for (k = 0; k < 1; k++)
                        l_1067[i][j][k] = &g_2;
                }
            }
            --l_1071;
            for (g_408 = 1; (g_408 >= 0); g_408 -= 1)
            { /* block id: 470 */
                const int32_t l_1099 = 0x5235A3F0L;
                int32_t l_1134 = 8L;
                int16_t **l_1153 = &g_216;
                int32_t l_1162[6];
                int32_t l_1164 = 8L;
                int i;
                for (i = 0; i < 6; i++)
                    l_1162[i] = 0x6B185421L;
                if ((safe_mod_func_uint32_t_u_u(1UL, g_141[g_408])))
                { /* block id: 471 */
                    uint16_t l_1096 = 65535UL;
                    for (g_733 = 0; (g_733 <= 1); g_733 += 1)
                    { /* block id: 474 */
                        int32_t ****l_1079 = &g_1078;
                        int8_t ** const *l_1093 = &g_486;
                        int i, j;
                        (*l_1066) = (safe_sub_func_uint8_t_u_u((((*l_1079) = g_1078) != (((safe_mod_func_uint32_t_u_u(4294967292UL, (safe_lshift_func_uint16_t_u_s(p_14, (*l_794))))) > (safe_mod_func_int16_t_s_s((*g_216), 1L))) , l_1086)), ((((safe_rshift_func_int8_t_s_u((safe_unary_minus_func_uint32_t_u(((0x73L <= (safe_rshift_func_uint8_t_u_s(((g_1094 = l_1093) == (void*)0), g_141[g_408]))) , (*l_794)))), p_15)) , (void*)0) == &g_486) , (*g_555))));
                        l_1096 = (*l_794);
                        if ((*l_794))
                            break;
                    }
                    for (p_13 = 0; (p_13 <= 8); p_13 += 1)
                    { /* block id: 483 */
                        uint32_t l_1100 = 0xD370DA3EL;
                        const uint8_t *l_1112 = &g_733;
                        const uint8_t **l_1111 = &l_1112;
                        (*l_1062) = (((*l_1063) ^= (((p_14 | (*g_216)) > ((safe_add_func_uint16_t_u_u(l_1099, l_1100)) ^ p_15)) >= ((**g_486) && (g_733 &= (safe_lshift_func_int8_t_s_s((safe_mod_func_int16_t_s_s((safe_rshift_func_uint16_t_u_s(((safe_lshift_func_int8_t_s_s((safe_mod_func_int8_t_s_s((!(g_1058 &= ((*g_487) = (((g_141[g_408] ^ ((((65535UL ^ (l_1111 != l_992[1])) , 0x1CL) , (*g_216)) == l_1096)) | l_1100) | 0xDDF6L)))), (*g_555))), (*l_794))) | p_14), p_13)), l_1100)), p_15)))))) < 0x24L);
                        if (l_1100)
                            goto lbl_1113;
                        (*l_794) ^= (*l_1066);
                    }
                }
                else
                { /* block id: 492 */
                    int32_t l_1126 = 0xCFC1EBE5L;
                    uint16_t l_1137 = 0x946EL;
                    const int32_t *l_1158 = &g_55;
                    int32_t l_1159 = 3L;
                    int32_t l_1160 = (-1L);
                    int32_t l_1161[2];
                    uint32_t l_1165[10][1] = {{0xE54AEF6EL},{0x293B7BE6L},{0xE54AEF6EL},{0x293B7BE6L},{0xE54AEF6EL},{0x293B7BE6L},{0xE54AEF6EL},{0x293B7BE6L},{0xE54AEF6EL},{0x293B7BE6L}};
                    int i, j;
                    for (i = 0; i < 2; i++)
                        l_1161[i] = 1L;
                    for (g_215 = 2; (g_215 <= 8); g_215 += 1)
                    { /* block id: 495 */
                        uint32_t *l_1129 = &g_234[2][5][1];
                        uint16_t ***l_1144 = (void*)0;
                        uint16_t ****l_1145 = &l_1144;
                        int8_t *l_1148[7][6][4] = {{{(void*)0,&l_1069[3],&l_1069[4],(void*)0},{&l_1069[3],&g_1058,&l_1069[4],&l_1069[5]},{(void*)0,&g_1058,&g_1058,&l_1069[3]},{&l_1069[5],&g_543,&l_1069[3],(void*)0},{&l_1069[3],(void*)0,&l_1069[1],&g_1058},{&g_543,&l_1069[5],&l_1069[5],&g_543}},{{(void*)0,&l_1069[3],&l_1069[5],&g_1058},{&g_543,&l_1069[1],&g_543,&g_543},{&l_1069[3],&g_543,(void*)0,&g_543},{&l_1069[3],&l_1069[1],&l_1069[3],&g_1058},{&l_1069[5],&l_1069[3],&l_1069[3],&g_543},{(void*)0,&l_1069[5],&g_1058,&g_1058}},{{&g_1058,(void*)0,(void*)0,(void*)0},{(void*)0,&g_543,&g_543,&l_1069[3]},{&l_1069[3],&g_1058,&l_1069[3],&l_1069[5]},{&g_1058,&l_1069[5],&l_1069[3],&g_543},{&g_1058,(void*)0,&g_543,&l_1069[5]},{&l_1069[5],&g_543,(void*)0,&g_1058}},{{&g_543,&g_1058,&l_1069[3],&l_1069[4]},{&l_1069[5],&l_1069[3],(void*)0,(void*)0},{&g_1058,&g_1058,&g_1058,&l_1069[3]},{&g_1058,(void*)0,&g_543,&l_1069[3]},{&g_1058,&l_1069[3],&l_1069[3],&g_543},{(void*)0,&l_1069[3],&l_1069[1],&l_1069[3]}},{{&l_1069[3],(void*)0,&l_1069[4],&l_1069[3]},{&l_1069[3],&g_1058,&g_1058,(void*)0},{&l_1069[1],&l_1069[3],&g_543,&l_1069[4]},{(void*)0,&g_1058,(void*)0,&g_1058},{&l_1069[4],&g_543,&l_1069[5],&l_1069[5]},{&l_1069[3],(void*)0,&l_1069[3],&g_543}},{{(void*)0,&l_1069[5],&l_1069[3],&g_1058},{&l_1069[3],&l_1069[3],&l_1069[5],&g_543},{&l_1069[4],&l_1069[3],(void*)0,&l_1069[3]},{(void*)0,&l_1069[3],&g_543,&g_1058},{&l_1069[1],&g_1058,&g_1058,&l_1069[1]},{&l_1069[3],&l_1069[3],&l_1069[4],&l_1069[3]}},{{&l_1069[3],&g_543,&l_1069[1],&l_1069[3]},{(void*)0,(void*)0,&l_1069[3],&l_1069[3]},{&g_1058,&g_543,&g_543,&l_1069[3]},{&g_1058,&l_1069[3],&g_1058,&l_1069[1]},{&g_1058,&g_1058,(void*)0,&g_1058},{&l_1069[5],&l_1069[3],&l_1069[3],&l_1069[3]}}};
                        int8_t *l_1154[2];
                        int8_t *l_1155 = &g_543;
                        const int32_t *l_1157 = &g_493;
                        const int32_t **l_1156[6];
                        int i, j, k;
                        for (i = 0; i < 2; i++)
                            l_1154[i] = &l_1069[3];
                        for (i = 0; i < 6; i++)
                            l_1156[i] = &l_1157;
                        l_1134 &= (safe_mul_func_int16_t_s_s((p_14 & (g_141[g_408] |= (((safe_lshift_func_uint8_t_u_s((safe_mul_func_int8_t_s_s((safe_rshift_func_int8_t_s_u((safe_rshift_func_uint16_t_u_s(p_15, 4)), 3)), ((safe_mul_func_uint16_t_u_u(l_1126, (((*g_555) = (safe_add_func_uint8_t_u_u(((g_967[g_215][g_215] = l_1129) == ((*l_968) = (void*)0)), (*g_555)))) >= (safe_rshift_func_uint16_t_u_s(((0x17L && (g_350[4][2].f6 || (&g_216 == (void*)0))) , 0xABBCL), (*g_216)))))) >= l_1126))), 6)) <= l_1126) ^ l_1069[3]))), (*l_794)));
                        l_1070[0][0][0] = ((((*p_16) = (g_141[g_408] || (((safe_add_func_int32_t_s_s((((**g_486) = l_1137) | p_14), ((safe_lshift_func_uint16_t_u_u((safe_div_func_int16_t_s_s((((((0xB1L < 0xF5L) | ((safe_add_func_uint32_t_u_u((((*l_1145) = l_1144) != (((l_1059 = (safe_mod_func_uint8_t_u_u(1UL, 1L))) || ((safe_add_func_uint8_t_u_u(((((safe_mul_func_int8_t_s_s((g_543 = (-1L)), p_15)) < l_1134) ^ 254UL) , (**g_554)), p_13)) >= p_15)) , (void*)0)), (*p_12))) , p_14)) || l_1137) >= g_141[g_408]) && 0xE81EF0E4L), l_1137)), 14)) == (*l_794)))) && (*p_12)) , p_15))) , 0xF2D2L) | g_141[g_408]);
                        if (l_1137)
                            continue;
                        l_1158 = l_910;
                    }
                    l_1165[3][0]++;
                }
            }
            (**l_1086) = (**g_785);
            for (g_144 = 0; (g_144 == 50); g_144 = safe_add_func_uint8_t_u_u(g_144, 8))
            { /* block id: 518 */
                uint16_t **l_1174[9][1][8] = {{{&g_194[0],&g_351,&g_194[0],&g_194[0],&g_351,&g_194[0],&g_194[0],&g_194[0]}},{{&g_351,&g_194[0],&g_194[0],&g_194[0],&g_351,&g_194[0],&g_194[0],&g_351}},{{&g_194[0],&g_194[0],&g_194[0],&g_194[0],&g_194[0],&g_351,&g_194[0],&g_194[0]}},{{&g_194[0],&g_194[0],&g_194[0],&g_194[0],&g_194[0],&g_194[0],&g_194[0],&g_194[0]}},{{&g_194[0],&g_194[0],&g_194[0],&g_351,&g_351,&g_351,&g_194[0],&g_194[0]}},{{&g_194[0],&g_194[0],&g_194[0],&g_194[0],&g_194[0],&g_194[0],&g_194[0],&g_194[0]}},{{&g_194[0],&g_194[0],&g_194[0],&g_351,&g_194[0],&g_194[0],&g_194[0],&g_194[0]}},{{&g_194[0],&g_351,&g_194[0],&g_194[0],&g_351,&g_194[0],&g_194[0],&g_194[0]}},{{&g_351,&g_194[0],&g_194[0],&g_194[0],&g_351,&g_194[0],&g_194[0],&g_351}}};
                uint16_t ***l_1173[7];
                const union U1 **l_1178[1];
                union U1 **l_1180 = &l_1179[0][0];
                int32_t l_1202 = 6L;
                int i, j, k;
                for (i = 0; i < 7; i++)
                    l_1173[i] = &l_1174[7][0][7];
                for (i = 0; i < 1; i++)
                    l_1178[i] = (void*)0;
                --l_1170;
                if ((l_1173[5] != (((l_1175 = (l_1176 = l_1175)) == ((*l_1180) = l_1179[6][2])) , l_1181)))
                { /* block id: 523 */
                    struct S0 *l_1183 = &l_988[7];
                    struct S0 **l_1184 = &l_1183;
                    (*l_1184) = l_1183;
                }
                else
                { /* block id: 525 */
                    (*p_12) = ((&g_109 != &g_350[7][3]) || 0xC1D9L);
                }
                (*p_16) = (l_1185 , (safe_lshift_func_int8_t_s_s((((safe_unary_minus_func_uint16_t_u((safe_mod_func_uint16_t_u_u((safe_add_func_uint32_t_u_u((0x13L > (safe_add_func_int16_t_s_s((((*p_12) = (safe_sub_func_int32_t_s_s((*l_794), ((safe_unary_minus_func_int32_t_s((*p_16))) && (safe_add_func_int32_t_s_s(((((*g_216) = (safe_add_func_int8_t_s_s((0x3D58L != l_1202), p_13))) ^ ((safe_div_func_int32_t_s_s((((((*l_1065) = (-1L)) ^ 0xEDBC3F46L) < (*p_12)) < l_1202), 0x6FEA2B67L)) ^ (*p_12))) & l_1185.f5), 1UL)))))) >= l_1185.f4), (*l_794)))), p_13)), (*l_794))))) & (*l_1063)) == p_13), p_13)));
                for (l_969 = 29; (l_969 == (-2)); l_969 = safe_sub_func_uint32_t_u_u(l_969, 1))
                { /* block id: 534 */
                }
            }
        }
    }
    (*p_12) = ((((safe_unary_minus_func_uint8_t_u((l_1220 ^ (((safe_sub_func_uint32_t_u_u(((safe_div_func_uint8_t_u_u((safe_mod_func_int8_t_s_s((safe_div_func_uint16_t_u_u(((l_1229 = ((l_988[7] , (((((((-1L) & ((*g_487) |= (*l_794))) >= (*l_794)) , (*l_794)) & p_15) || (-3L)) > (((0x3940D9DAL <= 4294967289UL) == (*l_794)) | (*l_794)))) <= (*l_794))) ^ l_1230[3][0]), 0xDA9EL)), p_13)), (*l_794))) , 0x099334B0L), (*l_794))) > (*l_794)) > 0x30ABL)))) , &g_194[0]) == l_1231[0]) , (*p_12));
    return (*l_794);
}


/* ------------------------------------------ */
/* 
 * reads : g_2
 * writes: g_2
 */
static uint32_t  func_20(uint32_t  p_21)
{ /* block id: 10 */
    const int32_t l_27[8][7][4] = {{{0x213633E7L,1L,(-7L),1L},{0xBFCF419CL,(-3L),(-7L),1L},{0x213633E7L,0xB19D88C8L,0xBFCF419CL,(-3L)},{(-7L),0xB19D88C8L,(-7L),0xE89405DBL},{(-7L),0xE89405DBL,1L,1L},{0xBFCF419CL,0xE89405DBL,9L,0xE89405DBL},{1L,0xB19D88C8L,9L,(-3L)}},{{0xBFCF419CL,1L,1L,(-3L)},{(-7L),0xB19D88C8L,(-7L),0xE89405DBL},{(-7L),0xE89405DBL,1L,1L},{0xBFCF419CL,0xE89405DBL,9L,0xE89405DBL},{1L,0xB19D88C8L,9L,(-3L)},{0xBFCF419CL,1L,1L,(-3L)},{(-7L),0xB19D88C8L,(-7L),0xE89405DBL}},{{(-7L),0xE89405DBL,1L,1L},{0xBFCF419CL,0xE89405DBL,9L,0xE89405DBL},{1L,0xB19D88C8L,9L,(-3L)},{0xBFCF419CL,1L,1L,(-3L)},{(-7L),0xB19D88C8L,(-7L),0xE89405DBL},{(-7L),0xE89405DBL,1L,1L},{0xBFCF419CL,0xE89405DBL,9L,0xE89405DBL}},{{1L,0xB19D88C8L,9L,(-3L)},{0xBFCF419CL,1L,1L,(-3L)},{(-7L),0xB19D88C8L,(-7L),0xE89405DBL},{(-7L),0xE89405DBL,1L,1L},{0xBFCF419CL,0xE89405DBL,9L,0xE89405DBL},{1L,0xB19D88C8L,9L,(-3L)},{0xBFCF419CL,1L,1L,(-3L)}},{{(-7L),0xB19D88C8L,(-7L),0xE89405DBL},{(-7L),0xE89405DBL,1L,1L},{0xBFCF419CL,0xE89405DBL,9L,0xE89405DBL},{1L,0xB19D88C8L,9L,(-3L)},{0xBFCF419CL,1L,1L,(-3L)},{(-7L),0xB19D88C8L,(-7L),0xE89405DBL},{(-7L),0xE89405DBL,1L,1L}},{{0xBFCF419CL,0xE89405DBL,9L,0xE89405DBL},{1L,0xB19D88C8L,9L,(-3L)},{0xBFCF419CL,1L,1L,(-3L)},{(-7L),0xB19D88C8L,(-7L),0xE89405DBL},{(-7L),0xE89405DBL,1L,1L},{0xBFCF419CL,0xE89405DBL,9L,0xE89405DBL},{1L,0xB19D88C8L,9L,(-3L)}},{{0xBFCF419CL,1L,1L,(-3L)},{(-7L),0xB19D88C8L,(-7L),0xE89405DBL},{(-7L),0xE89405DBL,1L,1L},{0xBFCF419CL,0xE89405DBL,9L,0xE89405DBL},{1L,0xB19D88C8L,9L,(-3L)},{0xBFCF419CL,1L,1L,(-3L)},{(-7L),0xB19D88C8L,(-7L),0xE89405DBL}},{{(-7L),0xE89405DBL,1L,1L},{0xBFCF419CL,1L,0x213633E7L,1L},{(-7L),1L,0x213633E7L,0xB19D88C8L},{1L,0xE89405DBL,(-7L),0xB19D88C8L},{9L,1L,9L,1L},{9L,1L,(-7L),(-3L)},{1L,1L,0x213633E7L,1L}}};
    int32_t *l_28 = &g_2;
    int i, j, k;
    (*l_28) &= l_27[0][2][2];
    return p_21;
}


/* ------------------------------------------ */
/* 
 * reads : g_24 g_53 g_2 g_36 g_86 g_52 g_109 g_114 g_72 g_144 g_55 g_126 g_141 g_214 g_216 g_215 g_217 g_234 g_312 g_331 g_350 g_351 g_143 g_408 g_486 g_493 g_487 g_543 g_113 g_554 g_555 g_477 g_626 g_784
 * writes: g_24 g_2 g_36 g_52 g_53 g_55 g_86 g_113 g_126 g_109.f3 g_114 g_141 g_143 g_144 g_72 g_194 g_215 g_252 g_217 g_312 g_234 g_486 g_350.f8 g_214 g_351 g_626 g_776
 */
static const uint8_t  func_31(uint8_t  p_32)
{ /* block id: 14 */
    uint16_t l_213[5][7][7] = {{{0xE217L,65535UL,0x056FL,0xE217L,65532UL,0x5C96L,8UL},{65526UL,0x85C2L,0UL,65532UL,65532UL,0UL,0x85C2L},{65532UL,0x9171L,0x0C94L,1UL,0x056FL,8UL,65533UL},{0x0C94L,65526UL,0x4E03L,0x9171L,0x3561L,65535UL,0x056FL},{0x72F8L,0x85C2L,1UL,1UL,0xA3E3L,0x9D98L,65526UL},{65535UL,0x056FL,0xE217L,65532UL,0x5C96L,8UL,0x72F8L},{0x941BL,1UL,0xE217L,0xE217L,1UL,0x941BL,0UL}},{{0x3561L,1UL,1UL,0xA3E3L,0x85C2L,0x208BL,0xA3E3L},{65532UL,0x7E30L,0x4E03L,65533UL,0UL,0x0C94L,0x72F8L},{0x9171L,1UL,0x0C94L,8UL,0x3561L,0xE217L,0x9171L},{1UL,1UL,0UL,0xA3E3L,65535UL,2UL,65535UL},{1UL,0x056FL,0x056FL,1UL,0x4E03L,0x5C96L,65533UL},{0x9171L,0x85C2L,0x941BL,0x4E03L,65532UL,0x941BL,0x5C96L},{65532UL,65526UL,2UL,1UL,65535UL,1UL,65533UL}},{{0x3561L,0x9171L,0x4E03L,65526UL,0x0C94L,65535UL,65535UL},{0x941BL,0x85C2L,0x9171L,65535UL,0xA3E3L,65535UL,0x9171L},{65535UL,65535UL,65526UL,65532UL,0x85C2L,1UL,0x72F8L},{0x72F8L,65535UL,0xE217L,1UL,65535UL,0x941BL,0xA3E3L},{0x0C94L,1UL,0x9171L,0UL,0x85C2L,0x5C96L,0UL},{65532UL,0x60CBL,0x6E77L,65533UL,0xA3E3L,2UL,0x72F8L},{65526UL,0xE217L,0x0C94L,65533UL,0x0C94L,0xE217L,65526UL}},{{0xE217L,1UL,0x941BL,0UL,65535UL,0x0C94L,0x056FL},{1UL,65535UL,6UL,1UL,65532UL,0x208BL,65533UL},{65526UL,0x5C96L,0x941BL,65532UL,0x4E03L,0x941BL,0x85C2L},{0x9D98L,0x7E30L,0UL,65526UL,8UL,1UL,1UL},{0x941BL,0x7E30L,1UL,0x7E30L,0x941BL,1UL,8UL},{0x4E03L,2UL,65535UL,0xE217L,0x208BL,65526UL,0x7E30L},{1UL,8UL,6UL,0x9D98L,0x0C94L,1UL,0x6E77L}},{{0x4E03L,0xE217L,65535UL,0x056FL,0xE217L,65532UL,0x5C96L},{0x941BL,6UL,65535UL,0x5C96L,2UL,2UL,0x5C96L},{0x9D98L,0UL,0x9D98L,1UL,0x5C96L,0UL,0x6E77L},{0x7E30L,0x056FL,0x72F8L,0x9171L,0x941BL,65535UL,0x7E30L},{0x056FL,65526UL,0x6E77L,0x5C96L,1UL,0UL,8UL},{6UL,8UL,1UL,6UL,65535UL,2UL,1UL},{0x7E30L,0x0C94L,65532UL,65535UL,65535UL,65532UL,0x0C94L}}};
    int32_t l_222[3][10] = {{(-1L),(-1L),(-1L),(-1L),0x2D656744L,5L,0x2D656744L,(-1L),(-1L),(-1L)},{0x2D656744L,(-1L),0x83BE1114L,1L,1L,0x83BE1114L,(-1L),0x2D656744L,(-1L),0x83BE1114L},{5L,(-1L),1L,(-1L),5L,0x83BE1114L,0x83BE1114L,5L,(-1L),1L}};
    uint32_t *l_233[3][2];
    int32_t **l_236 = &g_86;
    int8_t *l_250 = &g_143;
    int16_t l_251 = 0x6775L;
    int32_t *l_253 = (void*)0;
    uint8_t *l_256 = &g_114;
    union U1 l_263 = {0xD8L};
    const int16_t l_288 = 0L;
    int32_t l_289 = 0L;
    uint16_t l_299 = 0xB300L;
    int32_t l_311 = 1L;
    int32_t l_326 = 1L;
    uint32_t l_359 = 0x854B9D9CL;
    struct S0 l_375 = {-0,-610,1,170,32,1,-2,576,1};
    int32_t l_440 = (-1L);
    int32_t l_443 = 0xC3336E55L;
    union U1 *l_476[1];
    int8_t l_522 = 0x0AL;
    uint8_t l_530 = 0xC0L;
    int8_t **l_696 = &g_487;
    int16_t l_724 = 0x0842L;
    uint32_t * const l_775 = &g_776;
    uint32_t * const *l_774 = &l_775;
    int i, j, k;
    for (i = 0; i < 3; i++)
    {
        for (j = 0; j < 2; j++)
            l_233[i][j] = &g_234[2][0][1];
    }
    for (i = 0; i < 1; i++)
        l_476[i] = &g_477;
    (*l_236) = func_40((func_46(p_32) , l_213[2][6][1]), g_214, g_216, (+(safe_sub_func_int32_t_s_s(((safe_lshift_func_uint8_t_u_u(g_109.f7, 7)) == l_222[0][6]), (safe_mul_func_int16_t_s_s((((safe_lshift_func_uint8_t_u_s(((((l_222[0][7] == (safe_lshift_func_int8_t_s_u((safe_rshift_func_uint8_t_u_s((safe_sub_func_uint32_t_u_u(g_109.f8, (*g_214))), 0)), g_109.f4))) < 0x97C0L) <= p_32) , g_109.f0), p_32)) ^ l_213[3][0][1]) & 0x3BD0L), p_32))))), l_233[2][1]);
lbl_787:
    g_2 |= (((safe_mod_func_int8_t_s_s(((g_252[1][3] = func_99(l_233[1][0], (((((*g_216) , (safe_unary_minus_func_uint16_t_u((safe_lshift_func_int16_t_s_u(6L, (**l_236)))))) < ((*g_214) |= (safe_add_func_int16_t_s_s(((g_109 , ((**l_236) >= (((safe_lshift_func_uint8_t_u_s(((safe_rshift_func_int8_t_s_s((((*l_250) = (g_234[2][0][1] != (p_32 == (((safe_div_func_int16_t_s_s((*g_216), (*g_216))) ^ 1UL) & (**l_236))))) & (**l_236)), 3)) | p_32), 5)) | p_32) ^ g_141[1]))) ^ 0xC824L), 1UL)))) && l_251) & (*g_86)), (**l_236), p_32)) == &g_24), p_32)) != 0x33L) == (*g_86));
    (*g_214) = ((safe_sub_func_int8_t_s_s(0x67L, ((**l_236) , ((*l_256) = (**l_236))))) == ((((**l_236) & (safe_div_func_uint8_t_u_u(((safe_add_func_uint8_t_u_u(((safe_sub_func_uint16_t_u_u(((((*g_216) |= p_32) , ((l_263 , (void*)0) == &l_251)) & ((safe_div_func_int16_t_s_s(p_32, 65527UL)) & 6UL)), 0x9836L)) , g_109.f4), p_32)) < p_32), (**l_236)))) & (**l_236)) == 253UL));
    if (((p_32 ^ ((p_32 ^ (~((((*g_214) |= (safe_sub_func_int16_t_s_s((safe_sub_func_uint8_t_u_u((**l_236), (safe_div_func_uint32_t_u_u((l_289 = (((*g_216) = (0xB485L > ((safe_lshift_func_uint8_t_u_u((safe_sub_func_int16_t_s_s((safe_div_func_int16_t_s_s((safe_mod_func_int32_t_s_s(((((safe_sub_func_uint32_t_u_u((g_109.f8 , ((g_141[0] || ((0x2F8BL || (safe_sub_func_int16_t_s_s((safe_sub_func_int8_t_s_s((p_32 | (p_32 > 0xF1L)), 0xF4L)), p_32))) != 0xDE6FF466L)) || p_32)), (**l_236))) > (-1L)) && g_72) || (**l_236)), p_32)), (**l_236))), 65528UL)), 7)) < l_288))) > (**l_236))), (*g_86))))), p_32))) , p_32) < 0x883BL))) >= 0xB94D1ED4L)) != 0x6E74L))
    { /* block id: 111 */
        struct S0 l_292 = {1,868,0,-167,63,0,6,185,-4};
        int16_t *l_293 = &l_251;
        int16_t **l_294 = &l_293;
        int8_t *l_426 = (void*)0;
        int16_t l_436 = 0L;
        int32_t l_439 = 0x78F69DFEL;
        int32_t l_441 = 6L;
        int32_t l_442 = 0x2B99C833L;
        uint32_t l_454 = 18446744073709551615UL;
        uint32_t l_466 = 1UL;
        union U1 l_471 = {0x2BL};
        int8_t l_490[6];
        int32_t *l_495 = &g_2;
        int16_t l_527 = 0x2489L;
        uint16_t l_542 = 0UL;
        const uint32_t *l_663[9] = {&g_664,&g_664,&g_664,&g_664,&g_664,&g_664,&g_664,&g_664,&g_664};
        const uint32_t **l_662[6] = {&l_663[8],&l_663[4],&l_663[4],&l_663[8],&l_663[4],&l_663[4]};
        const uint32_t *l_665 = &g_666[0][5][1];
        int i;
        for (i = 0; i < 6; i++)
            l_490[i] = 0x8DL;
        if ((safe_lshift_func_int8_t_s_u(g_109.f5, ((l_292 , &l_251) != ((*l_294) = l_293)))))
        { /* block id: 113 */
lbl_399:
            (*l_236) = &g_55;
        }
        else
        { /* block id: 115 */
            int32_t l_300[7][3] = {{0xDEA12953L,0xA39915C5L,0xA39915C5L},{0xDEA12953L,0xA39915C5L,0xA39915C5L},{0xDEA12953L,0xA39915C5L,0xA39915C5L},{0xDEA12953L,0xA39915C5L,0xA39915C5L},{0xDEA12953L,0xA39915C5L,0xA39915C5L},{0xDEA12953L,0xA39915C5L,0xA39915C5L},{0xDEA12953L,0xA39915C5L,0xA39915C5L}};
            int16_t *l_301 = &l_251;
            int32_t l_388 = 0x600FA4EEL;
            uint8_t **l_422 = &l_256;
            int8_t *l_423[2];
            int8_t **l_424 = (void*)0;
            int8_t **l_425 = &l_423[1];
            uint8_t l_427 = 3UL;
            union U1 *l_475 = &l_471;
            uint32_t l_489 = 0UL;
            int32_t **l_496 = &g_214;
            int32_t l_513 = 0xF8A528CBL;
            int32_t l_517 = (-1L);
            uint16_t l_541 = 5UL;
            uint8_t *l_544 = (void*)0;
            uint8_t *l_545 = &g_114;
            uint8_t *l_546 = &g_113;
            int16_t l_589 = (-2L);
            int32_t l_595[3];
            int32_t l_605 = (-10L);
            struct S0 l_606 = {0,19573,1,121,89,0,5,169,-3};
            int16_t l_621 = 1L;
            uint8_t l_623 = 255UL;
            uint8_t l_632 = 248UL;
            int8_t l_633 = (-1L);
            uint8_t l_634 = 1UL;
            uint32_t l_635 = 0x54A42BA3L;
            int32_t l_639 = 0L;
            uint16_t l_645 = 0xDE68L;
            int16_t l_648 = (-1L);
            int8_t l_655 = 0x79L;
            int16_t l_656 = (-1L);
            int32_t *l_657 = &g_215;
            int i, j;
            for (i = 0; i < 2; i++)
                l_423[i] = &g_143;
            for (i = 0; i < 3; i++)
                l_595[i] = (-7L);
            if ((safe_add_func_uint32_t_u_u((safe_mul_func_uint16_t_u_u(((l_292 , ((l_299 >= l_300[4][1]) , l_301)) == ((((safe_rshift_func_int16_t_s_u(l_292.f3, ((g_144 < (l_292.f8 < (((65527UL <= (((((void*)0 != l_301) & (*g_214)) ^ p_32) , l_292.f4)) < g_109.f5) > g_53))) || 0x91L))) ^ l_292.f7) >= l_300[3][2]) , &l_251)), p_32)), (*g_86))))
            { /* block id: 116 */
                int32_t *l_304 = &l_300[5][1];
                int32_t *l_305 = (void*)0;
                int32_t l_306 = (-1L);
                int32_t *l_307 = &l_300[4][1];
                int32_t *l_308 = &g_53;
                int32_t *l_309[2];
                int32_t l_310 = 0x9A6A31B5L;
                int8_t *l_321 = &g_143;
                int i;
                for (i = 0; i < 2; i++)
                    l_309[i] = (void*)0;
                ++g_312[0];
                if (((safe_mul_func_int8_t_s_s((p_32 == ((safe_mul_func_uint8_t_u_u(((**l_236) = 0xC4L), (safe_div_func_int32_t_s_s((((p_32 ^ 0xE6BD7F7FL) , l_321) != &g_143), (safe_rshift_func_uint8_t_u_s(3UL, 5)))))) > ((safe_lshift_func_int16_t_s_u(((((p_32 <= (l_292.f1 = p_32)) , l_326) > p_32) == p_32), p_32)) , 0x79L))), g_109.f2)) == (-1L)))
                { /* block id: 120 */
                    (*l_307) = (safe_lshift_func_int16_t_s_s(4L, 8));
                    (*l_308) |= (*g_214);
                    (*g_86) = (safe_lshift_func_uint16_t_u_u((*l_307), (((g_331 , p_32) , (-5L)) && 0xA58AL)));
                    (*g_86) ^= (safe_div_func_int32_t_s_s((-1L), 0xEDDE48FAL));
                }
                else
                { /* block id: 125 */
                    uint32_t l_353 = 4294967291UL;
                    int32_t l_354 = 0x8D8C0522L;
                    for (g_114 = 0; (g_114 == 45); g_114 = safe_add_func_int32_t_s_s(g_114, 4))
                    { /* block id: 128 */
                        int32_t *l_336 = &g_215;
                        uint16_t *l_345 = &g_72;
                        int32_t l_352 = 0x8A444AF9L;
                        (*l_236) = l_336;
                        (*l_236) = &g_215;
                        l_354 = (safe_rshift_func_uint16_t_u_s((safe_sub_func_uint8_t_u_u(g_109.f6, ((+(safe_div_func_int32_t_s_s(p_32, (safe_add_func_uint8_t_u_u(((((void*)0 == l_345) , (safe_mod_func_uint16_t_u_u((((*l_336) ^= p_32) ^ (l_300[5][0] , (safe_add_func_int32_t_s_s(((((((((g_126[2][2] || (l_263 , ((*l_321) |= (((g_350[4][2] , (-1L)) , &g_72) == g_351)))) & 6L) == p_32) , p_32) > l_352) > g_114) > l_353) , p_32), p_32)))), (*l_307)))) , p_32), 0x31L))))) < (*l_308)))), 14));
                    }
                    if (g_109.f7)
                        goto lbl_494;
                }
                for (g_2 = 25; (g_2 < (-5)); g_2 = safe_sub_func_uint8_t_u_u(g_2, 5))
                { /* block id: 138 */
                    for (g_113 = 0; (g_113 < 55); g_113 = safe_add_func_uint16_t_u_u(g_113, 8))
                    { /* block id: 141 */
                        (*l_236) = (void*)0;
                    }
                    for (l_251 = 2; (l_251 >= 0); l_251 -= 1)
                    { /* block id: 146 */
                        int i, j;
                        return l_300[l_251][l_251];
                    }
                }
                l_359--;
            }
            else
            { /* block id: 151 */
                int16_t l_392 = (-1L);
                int32_t l_393 = 0x4FE45244L;
                int32_t *l_421 = &g_2;
                for (g_217 = (-10); (g_217 == 12); g_217 = safe_add_func_uint32_t_u_u(g_217, 1))
                { /* block id: 154 */
                    int16_t l_370 = (-1L);
                    int16_t l_398 = 0x1CFDL;
                    if (((safe_add_func_uint32_t_u_u(((l_300[4][2] == (safe_lshift_func_int8_t_s_u((g_331 , (safe_div_func_uint8_t_u_u(0xCFL, (-1L)))), l_292.f2))) ^ (g_109 , l_300[4][1])), l_370)) , ((safe_rshift_func_int16_t_s_u((safe_div_func_uint8_t_u_u((&p_32 == &g_113), p_32)), p_32)) <= g_350[4][2].f7)))
                    { /* block id: 155 */
                        int16_t l_381 = (-1L);
                        const int32_t l_391 = 0L;
                        l_381 ^= (l_375 , ((g_215 , (**l_236)) > ((((safe_sub_func_uint16_t_u_u(((((!(**l_236)) & (1L >= p_32)) , ((((safe_unary_minus_func_int8_t_s((**l_236))) < 0x3DA1L) >= (((p_32 ^ (**l_236)) | l_300[4][1]) && (*g_86))) <= p_32)) == l_300[4][1]), l_300[0][2])) | l_292.f4) , (void*)0) == l_250)));
                        l_393 &= (((safe_div_func_int8_t_s_s((safe_lshift_func_int8_t_s_u((((*g_216) & (0x61DE9766L != 0xD43EE1FDL)) , (p_32 < ((!(((((((safe_add_func_uint16_t_u_u(((l_388 == (248UL ^ ((*l_250) |= (safe_div_func_uint8_t_u_u(0x83L, (l_292.f1 && (*g_216))))))) , l_391), l_392)) , l_292.f1) && p_32) , 65532UL) | l_292.f4) , p_32) == p_32)) || 6UL))), g_350[4][2].f3)), g_24)) != p_32) , 0x6C8538B0L);
                    }
                    else
                    { /* block id: 159 */
                        return p_32;
                    }
                    (*g_86) = (safe_lshift_func_int8_t_s_u((0x40C17C14L >= (g_350[4][2].f4 , (safe_lshift_func_uint8_t_u_u(l_398, 0)))), 3));
                }
                if (l_251)
                    goto lbl_399;
                (*g_86) = ((*g_214) & (((l_393 < 5UL) >= (-1L)) || ((**l_236) && (0x29C54269L != 0x3CAA9559L))));
                l_393 = (safe_mul_func_uint16_t_u_u((safe_sub_func_uint16_t_u_u((safe_sub_func_uint32_t_u_u((((safe_rshift_func_uint8_t_u_s(((g_408 && (*g_86)) >= p_32), 1)) , 4294967288UL) & (*g_214)), ((*l_421) = (safe_div_func_int32_t_s_s(0xEC54B450L, ((safe_add_func_uint8_t_u_u((safe_mod_func_int8_t_s_s((safe_sub_func_int32_t_s_s((-7L), (safe_mod_func_uint8_t_u_u(p_32, (safe_mod_func_int32_t_s_s((&g_214 == &l_253), l_392)))))), 0x60L)), g_109.f8)) , l_388)))))), p_32)), l_292.f3));
            }
            if (((g_109.f2 | (((*l_422) = (void*)0) != ((((*l_425) = (l_292 , l_423[1])) != l_426) , (((0x82AE79FEL || (l_427 = p_32)) & ((safe_mul_func_int16_t_s_s((p_32 > (safe_mul_func_int8_t_s_s((safe_div_func_uint32_t_u_u(((l_292.f2 > (-9L)) ^ l_300[5][1]), 0xCB376623L)), 1UL))), 0L)) & p_32)) , &g_113)))) , p_32))
            { /* block id: 172 */
                int32_t *l_434[8][4][6] = {{{&l_311,&g_215,&g_215,&g_215,&l_289,(void*)0},{&g_215,&g_215,&l_388,&l_388,&g_215,&g_215},{&l_388,&g_215,&g_215,(void*)0,&l_289,&g_215},{&g_215,&g_215,&l_311,&g_215,&g_215,&g_215}},{{&g_215,&l_388,&g_215,(void*)0,&l_300[0][1],&l_300[0][1]},{&l_388,&l_289,&l_289,&l_388,&l_311,&l_300[0][1]},{&g_215,&l_300[0][1],&g_215,&g_215,(void*)0,&g_215},{&l_311,&l_388,&l_311,(void*)0,(void*)0,&g_215}},{{&l_388,&g_215,&l_311,&g_215,&g_215,&l_311},{(void*)0,(void*)0,&l_289,&g_215,&g_215,&g_215},{&l_388,&l_289,&g_215,&g_215,&g_215,&l_289},{&g_215,&l_388,&g_215,&l_388,(void*)0,&g_215}},{{&l_311,&l_388,&l_289,&l_289,&l_388,&l_311},{&l_289,&l_388,&l_311,&l_300[0][1],(void*)0,&g_215},{&g_215,&l_388,&g_215,&l_388,&g_215,&l_388},{&g_215,&l_289,&l_388,&l_300[0][1],&g_215,&g_215}},{{&l_289,(void*)0,(void*)0,&l_289,&g_215,&g_215},{&l_311,&g_215,&l_388,&l_388,&l_300[0][1],&l_388},{&g_215,(void*)0,&g_215,&g_215,&l_300[0][1],&g_215},{&l_388,&g_215,&l_311,&g_215,&g_215,&l_311}},{{(void*)0,(void*)0,&l_289,&g_215,&g_215,&g_215},{&l_388,&l_289,&g_215,&g_215,&g_215,&l_289},{&g_215,&l_388,&g_215,&l_388,(void*)0,&g_215},{&l_311,&l_388,&l_289,&l_289,&l_388,&l_311}},{{&l_289,&l_388,&l_311,&l_300[0][1],(void*)0,&g_215},{&g_215,&l_388,&g_215,&l_388,&g_215,&l_388},{&g_215,&l_289,&l_388,&l_300[0][1],&g_215,&g_215},{&l_289,(void*)0,(void*)0,&l_289,&g_215,&g_215}},{{&l_311,&g_215,&l_388,&l_388,&l_300[0][1],&l_388},{&g_215,(void*)0,&g_215,&g_215,&l_300[0][1],&g_215},{&l_388,&g_215,&l_311,&g_215,&g_215,&l_311},{(void*)0,(void*)0,&l_289,&g_215,&g_215,&g_215}}};
                int32_t l_435 = 3L;
                int32_t l_437 = 5L;
                int32_t l_438[2];
                uint32_t l_444 = 0xDB1A413FL;
                uint8_t *l_453 = &g_113;
                struct S0 l_455 = {1,6823,0,-72,14,1,-4,-531,-1};
                const int8_t *l_457 = &l_263.f0;
                const int8_t **l_456 = &l_457;
                int i, j, k;
                for (i = 0; i < 2; i++)
                    l_438[i] = 0L;
                l_444++;
                (*g_214) &= (safe_mod_func_uint32_t_u_u((l_454 = (((safe_lshift_func_int8_t_s_s(((safe_mod_func_int16_t_s_s((l_250 == l_426), p_32)) ^ (((*l_250) = 0xDAL) | (g_331 , p_32))), (((g_2 & ((g_126[1][2] & (l_453 != &g_144)) , g_350[4][2].f3)) , l_292.f3) | p_32))) & 7L) != 6L)), l_439));
                for (l_299 = 0; l_299 < 2; l_299 += 1)
                {
                    for (l_289 = 0; l_289 < 6; l_289 += 1)
                    {
                        g_252[l_299][l_289] = &g_141[0];
                    }
                }
                if (((*g_214) |= (&g_143 == (l_455 , ((*l_456) = l_453)))))
                { /* block id: 180 */
                    int16_t l_462 = 0xFFE7L;
                    int32_t l_464 = 1L;
                    int32_t l_465 = (-8L);
                    uint8_t l_472[4][10][6] = {{{0x44L,0x78L,7UL,1UL,0UL,7UL},{0x09L,0x2AL,0UL,255UL,0UL,0x2AL},{1UL,0x78L,0xF6L,255UL,0x78L,0UL},{0x09L,0UL,0xF6L,1UL,0x2AL,0x2AL},{0x44L,0UL,0UL,0x44L,0x78L,7UL},{0x44L,0x78L,7UL,1UL,0UL,7UL},{0x09L,0x2AL,0UL,255UL,0UL,0x2AL},{1UL,0x78L,0xF6L,255UL,0x7FL,0xE7L},{0UL,0xE7L,0UL,7UL,0xBEL,0xBEL},{0xF6L,0xE7L,0xE7L,0xF6L,0x7FL,0x13L}},{{0xF6L,0x7FL,0x13L,7UL,0xE7L,0x13L},{0UL,0xBEL,0xE7L,0x78L,0xE7L,0xBEL},{7UL,0x7FL,0UL,0x78L,0x7FL,0xE7L},{0UL,0xE7L,0UL,7UL,0xBEL,0xBEL},{0xF6L,0xE7L,0xE7L,0xF6L,0x7FL,0x13L},{0xF6L,0x7FL,0x13L,7UL,0xE7L,0x13L},{0UL,0xBEL,0xE7L,0x78L,0xE7L,0xBEL},{7UL,0x7FL,0UL,0x78L,0x7FL,0xE7L},{0UL,0xE7L,0UL,7UL,0xBEL,0xBEL},{0xF6L,0xE7L,0xE7L,0xF6L,0x7FL,0x13L}},{{0xF6L,0x7FL,0x13L,7UL,0xE7L,0x13L},{0UL,0xBEL,0xE7L,0x78L,0xE7L,0xBEL},{7UL,0x7FL,0UL,0x78L,0x7FL,0xE7L},{0UL,0xE7L,0UL,7UL,0xBEL,0xBEL},{0xF6L,0xE7L,0xE7L,0xF6L,0x7FL,0x13L},{0xF6L,0x7FL,0x13L,7UL,0xE7L,0x13L},{0UL,0xBEL,0xE7L,0x78L,0xE7L,0xBEL},{7UL,0x7FL,0UL,0x78L,0x7FL,0xE7L},{0UL,0xE7L,0UL,7UL,0xBEL,0xBEL},{0xF6L,0xE7L,0xE7L,0xF6L,0x7FL,0x13L}},{{0xF6L,0x7FL,0x13L,7UL,0xE7L,0x13L},{0UL,0xBEL,0xE7L,0x78L,0xE7L,0xBEL},{7UL,0x7FL,0UL,0x78L,0x7FL,0xE7L},{0UL,0xE7L,0UL,7UL,0xBEL,0xBEL},{0xF6L,0xE7L,0xE7L,0xF6L,0x7FL,0x13L},{0xF6L,0x7FL,0x13L,7UL,0xE7L,0x13L},{0UL,0xBEL,0xE7L,0x78L,0xE7L,0xBEL},{7UL,0x7FL,0UL,0x78L,0x7FL,0xE7L},{0UL,0xE7L,0UL,7UL,0xBEL,0xBEL},{0xF6L,0xE7L,0xE7L,0UL,1UL,0xD6L}}};
                    int8_t ***l_488 = &g_486;
                    int i, j, k;
                    for (l_436 = 0; (l_436 == (-20)); l_436--)
                    { /* block id: 183 */
                        int16_t l_460 = 0x8D84L;
                        int32_t l_461 = 0L;
                        int32_t l_463[3][1][7] = {{{5L,0x4FEAE600L,5L,0x2AF12338L,0x70CB83D5L,0x70CB83D5L,0x2AF12338L}},{{5L,0x4FEAE600L,5L,0x2AF12338L,0x70CB83D5L,0x70CB83D5L,0x2AF12338L}},{{5L,0x4FEAE600L,5L,0x2AF12338L,0x70CB83D5L,0x70CB83D5L,0x2AF12338L}}};
                        int i, j, k;
                        l_466--;
                        (*g_214) = (safe_rshift_func_uint8_t_u_u(l_436, 0));
                        (*g_214) = (0UL >= (((p_32 | l_436) , &l_465) != (l_471 , &g_52)));
                        l_472[2][3][2]++;
                    }
                    l_476[0] = l_475;
                    (*g_214) = (safe_mul_func_int16_t_s_s((-1L), (safe_add_func_int16_t_s_s((((*g_214) & ((((safe_div_func_int32_t_s_s((65534UL >= ((!((l_465 &= (((*l_488) = g_486) == &l_457)) != (g_350[4][2].f8 = (*g_214)))) >= l_489)), p_32)) < (0x270A4E95L != 1L)) > l_490[5]) | 1L)) & l_300[3][0]), 0xE47FL))));
                    l_292.f0 |= (&g_216 != (void*)0);
                }
                else
                { /* block id: 195 */
                    for (l_311 = 0; (l_311 > 18); l_311 = safe_add_func_int32_t_s_s(l_311, 1))
                    { /* block id: 198 */
                        return g_493;
                    }
                }
            }
            else
            { /* block id: 202 */
lbl_494:
                (*g_214) ^= 9L;
                for (l_439 = 2; (l_439 >= 0); l_439 -= 1)
                { /* block id: 207 */
                    int32_t ***l_497 = &l_236;
                    uint16_t *l_506 = &l_213[2][2][2];
                    uint32_t l_514 = 0UL;
                    int32_t *l_515 = &l_222[0][4];
                    int32_t *l_516[2];
                    int i;
                    for (i = 0; i < 2; i++)
                        l_516[i] = (void*)0;
                    g_86 = l_495;
                    (*l_497) = l_496;
                }
                if ((l_375 , (((**l_294) = (((safe_add_func_uint32_t_u_u((l_530 |= 4294967295UL), 0xE1E4D1B6L)) & (*g_487)) <= (((*l_546) = (g_143 , ((*l_545) |= ((safe_sub_func_uint8_t_u_u((safe_mod_func_int16_t_s_s(p_32, (safe_sub_func_uint32_t_u_u((safe_div_func_uint32_t_u_u((safe_sub_func_int32_t_s_s((((((*l_495) & ((l_541 &= 0x15239216L) ^ (&g_216 == &g_216))) , 0xD1FAFE0AL) > (**l_496)) , p_32), 0x11CB596BL)), l_542)), g_543)))), (*l_495))) != (*l_495))))) > p_32))) <= (*g_216))))
                { /* block id: 233 */
                    int32_t l_562 = 0L;
                    uint16_t *l_573 = &g_72;
                    uint16_t *l_578 = &l_213[2][6][1];
                    uint16_t *l_579 = &l_542;
                    int32_t l_580[8][1][3] = {{{0L,0L,0L}},{{0xED1E47A8L,0xED1E47A8L,0xED1E47A8L}},{{0L,0L,0L}},{{0xED1E47A8L,0xED1E47A8L,0xED1E47A8L}},{{0L,0L,0L}},{{0xED1E47A8L,0xED1E47A8L,0xED1E47A8L}},{{0L,0L,0L}},{{0xED1E47A8L,0xED1E47A8L,0xED1E47A8L}}};
                    uint8_t l_596 = 246UL;
                    union U1 **l_597 = &l_476[0];
                    union U1 ***l_598 = &l_597;
                    int i, j, k;
                    (*l_495) = ((p_32 ^ (((*l_546) &= p_32) & (safe_sub_func_uint8_t_u_u(((safe_unary_minus_func_uint8_t_u((safe_mul_func_int16_t_s_s((+(((((p_32 != p_32) , (void*)0) == (void*)0) & ((void*)0 == g_554)) > 1L)), 0xE42FL)))) , (*g_555)), (*g_555))))) >= (**l_496));
                    l_517 |= (p_32 ^ ((**l_496) || ((safe_lshift_func_int16_t_s_u((safe_lshift_func_uint8_t_u_s((p_32 > (safe_sub_func_uint16_t_u_u((l_562 & (l_580[2][0][0] |= (safe_sub_func_int32_t_s_s(((*g_214) = (((safe_mul_func_uint16_t_u_u(((*l_579) = (+((safe_add_func_uint32_t_u_u((safe_add_func_int8_t_s_s((-9L), (((((safe_sub_func_int32_t_s_s((*l_495), (((((*l_578) = ((++(*l_573)) , (((safe_div_func_uint8_t_u_u((&l_496 == &l_496), (*g_487))) ^ (*l_495)) != 0UL))) ^ p_32) && 0x6B6A2B71L) != (**g_486)))) , (void*)0) != &g_331) ^ 0x78B73E53L) | 0xD9BBL))), p_32)) , p_32))), (*g_216))) , (*l_495)) , p_32)), 0L)))), p_32))), p_32)), 0)) & p_32)));
                    l_596 |= ((+(p_32 , ((+2UL) != (safe_div_func_uint32_t_u_u(((safe_lshift_func_uint8_t_u_u((l_471 , (safe_mul_func_uint16_t_u_u((safe_sub_func_int16_t_s_s((*l_495), l_589)), (((**l_496) &= (safe_unary_minus_func_int8_t_s((-3L)))) | (safe_mod_func_int16_t_s_s((((*l_495) <= ((safe_div_func_uint32_t_u_u(p_32, 1L)) | 0L)) <= g_408), p_32)))))), 4)) > (*g_487)), 0x8438359BL))))) <= l_595[1]);
                    (*l_598) = l_597;
                }
                else
                { /* block id: 245 */
                    int32_t l_622 = 0xFB315905L;
                    uint16_t *l_627 = (void*)0;
                    uint16_t *l_628 = &l_542;
                    uint8_t l_629[8][8][2] = {{{248UL,248UL},{7UL,255UL},{254UL,0UL},{4UL,0UL},{247UL,4UL},{255UL,0x46L},{255UL,4UL},{247UL,0UL}},{{4UL,0UL},{254UL,255UL},{7UL,248UL},{248UL,6UL},{1UL,0x4EL},{0x5DL,0UL},{6UL,6UL},{0xAAL,254UL}},{{0x8AL,247UL},{6UL,0x5DL},{0x22L,249UL},{0xFBL,2UL},{6UL,0xFEL},{0x4EL,0xFEL},{6UL,2UL},{0xFBL,249UL}},{{0x22L,0x5DL},{6UL,247UL},{0x8AL,254UL},{0xAAL,6UL},{6UL,0UL},{0x5DL,0x4EL},{1UL,6UL},{248UL,248UL}},{{7UL,255UL},{254UL,0UL},{4UL,0UL},{247UL,4UL},{255UL,0x46L},{255UL,4UL},{247UL,0UL},{4UL,0UL}},{{254UL,255UL},{7UL,248UL},{248UL,6UL},{1UL,0x4EL},{0x5DL,0UL},{6UL,6UL},{0xAAL,254UL},{0x8AL,247UL}},{{6UL,0x5DL},{0x22L,249UL},{0xFBL,2UL},{6UL,0xFEL},{0x4EL,0xFEL},{6UL,2UL},{0xFBL,249UL},{0x22L,0x5DL}},{{6UL,247UL},{0x8AL,254UL},{0xAAL,6UL},{6UL,0UL},{0x5DL,0x4EL},{1UL,6UL},{248UL,248UL},{7UL,255UL}}};
                    const int32_t ** const *l_631 = (void*)0;
                    const int32_t ** const **l_630 = &l_631;
                    int32_t l_640 = 7L;
                    int32_t l_641 = (-1L);
                    int8_t l_642 = (-1L);
                    int32_t l_643 = (-1L);
                    int32_t l_644 = 0x8BDF11AEL;
                    int i, j, k;
                    if ((safe_rshift_func_int8_t_s_s(((safe_rshift_func_uint16_t_u_u((((l_605 | p_32) ^ (((l_606 , ((l_375 , ((safe_mul_func_int8_t_s_s((((safe_mul_func_uint16_t_u_u((g_477 , l_632), p_32)) && p_32) ^ p_32), p_32)) & p_32)) < l_633)) || (**g_486)) <= p_32)) < l_634), 9)) , l_635), 2)))
                    { /* block id: 249 */
                        int32_t *l_636 = &l_595[1];
                        int32_t *l_637 = &l_326;
                        int32_t *l_638[10][10] = {{&l_440,&l_300[2][2],&l_440,&l_441,&g_215,&l_595[1],&l_443,&g_53,&g_215,&g_215},{&l_300[2][2],&g_215,(void*)0,&l_595[2],&l_443,&g_53,&g_215,&g_55,&g_55,&g_215},{&l_440,(void*)0,&g_215,&g_215,(void*)0,&l_440,&g_55,&l_388,&l_443,(void*)0},{&l_595[1],&l_622,&g_55,&l_311,&l_388,(void*)0,&g_53,&g_52,&l_326,&l_441},{&l_595[1],&g_215,&l_441,&l_440,&l_300[2][2],&l_440,&l_441,&g_215,&l_595[1],&l_443},{&l_440,&l_441,&g_215,&l_595[1],&l_443,&g_53,&g_215,&g_215,&l_517,&g_52},{&l_311,&g_55,&l_622,&l_595[1],&l_517,&l_595[2],&l_595[2],&l_517,&l_595[1],&l_622},{&g_215,&g_215,(void*)0,&l_440,&g_55,&l_388,&l_443,(void*)0,&l_326,&l_289},{&l_441,(void*)0,&g_215,&l_311,&l_595[2],&l_326,&l_443,&l_440,&l_443,&l_326},{&l_289,&g_215,&l_311,&g_215,&l_289,&g_215,&l_595[2],&l_300[4][1],&g_55,(void*)0}};
                        int i, j;
                        ++l_645;
                    }
                    else
                    { /* block id: 251 */
                        uint16_t **l_649 = &g_351;
                        struct S0 l_652 = {1,-1595,1,-114,32,1,3,-572,3};
                        l_648 &= (*g_214);
                        (*l_496) = (*l_236);
                        l_656 = (p_32 , (((+(*l_495)) <= (((*l_649) = &g_72) != &g_72)) , ((((((--(**l_649)) , (((l_652 , (safe_sub_func_uint32_t_u_u((((*g_351) = (*g_351)) >= p_32), ((*l_495) = p_32)))) != (((*l_475) , (**g_486)) >= (**g_486))) | p_32)) > l_655) >= p_32) >= 3UL) & (*g_216))));
                    }
                }
                (*l_657) |= (*l_495);
            }
            return (**g_554);
        }
        (*g_86) = (safe_add_func_uint32_t_u_u(p_32, (safe_div_func_uint16_t_u_u(0UL, (l_471 , (((**l_236) | ((&g_24 != (l_665 = l_253)) ^ (**l_236))) && (*l_495)))))));
    }
    else
    { /* block id: 267 */
        int32_t *l_667 = &l_311;
        const int8_t **l_779 = (void*)0;
        int32_t ***l_783 = &l_236;
        int32_t ****l_782 = &l_783;
        for (g_52 = 0; (g_52 <= 1); g_52 += 1)
        { /* block id: 270 */
            int32_t *l_674 = &g_2;
            int i;
            if (g_312[g_52])
                break;
            (**l_236) = g_141[g_52];
            l_667 = l_667;
            (*l_674) ^= (!((~((safe_add_func_uint8_t_u_u(((safe_mul_func_uint16_t_u_u(((((*g_214) = ((**l_236) = (safe_sub_func_uint16_t_u_u(((~p_32) >= (*l_667)), (0xFCA0L || (*g_216)))))) < (p_32 || ((!9L) != (0xEAD7L || p_32)))) | 2UL), (*l_667))) | 0xD8E940E8L), 0UL)) < p_32)) | 3UL));
        }
        (*g_86) = (safe_mul_func_int8_t_s_s((((*g_487) = (0xEDL && 2UL)) >= ((void*)0 == &g_486)), p_32));
        for (g_53 = 0; (g_53 <= 0); g_53 += 1)
        { /* block id: 282 */
            union U1 **l_690 = &l_476[0];
            union U1 ***l_689 = &l_690;
            int32_t l_697 = 5L;
            int32_t l_698 = 0x4E770919L;
            uint32_t **l_713[2];
            int16_t l_728 = 0x06BDL;
            struct S0 l_738[4] = {{-1,-28471,1,52,85,1,-3,153,2},{-1,-28471,1,52,85,1,-3,153,2},{-1,-28471,1,52,85,1,-3,153,2},{-1,-28471,1,52,85,1,-3,153,2}};
            int16_t **l_739 = &g_216;
            const int8_t *l_781 = (void*)0;
            const int8_t **l_780 = &l_781;
            int i;
            for (i = 0; i < 2; i++)
                l_713[i] = &l_233[2][1];
            for (g_626 = 0; (g_626 <= 1); g_626 += 1)
            { /* block id: 285 */
                int32_t ***l_686 = &l_236;
                int32_t **** const l_685[1][6][8] = {{{&l_686,&l_686,&l_686,&l_686,&l_686,&l_686,&l_686,&l_686},{&l_686,&l_686,&l_686,&l_686,&l_686,&l_686,&l_686,&l_686},{&l_686,&l_686,&l_686,&l_686,&l_686,&l_686,&l_686,&l_686},{&l_686,&l_686,&l_686,&l_686,&l_686,&l_686,&l_686,&l_686},{&l_686,&l_686,&l_686,&l_686,&l_686,&l_686,&l_686,&l_686},{&l_686,&l_686,&l_686,&l_686,&l_686,&l_686,&l_686,&l_686}}};
                int8_t ***l_693 = (void*)0;
                int8_t ***l_694 = (void*)0;
                int8_t ***l_695[1];
                uint32_t **l_715 = &g_252[0][3];
                union U1 *l_722 = &g_477;
                uint32_t * const *l_773 = (void*)0;
                uint32_t * const **l_772[4];
                int i, j, k;
                for (i = 0; i < 1; i++)
                    l_695[i] = (void*)0;
                for (i = 0; i < 4; i++)
                    l_772[i] = &l_773;
            }
            (**l_236) ^= ((safe_sub_func_uint32_t_u_u(((*l_775) = p_32), ((l_738[3] , l_779) == l_780))) , (0xC66D43EFL & ((1L && ((g_350[4][2].f4 , l_782) == g_784[1])) | 65535UL)));
            if (g_55)
                goto lbl_787;
        }
    }
    return p_32;
}


/* ------------------------------------------ */
/* 
 * reads : g_141 g_53 g_2 g_36 g_86 g_52 g_109 g_114 g_72 g_144 g_24 g_55 g_126 g_214 g_215
 * writes: g_24 g_2 g_36 g_52 g_53 g_55 g_86 g_113 g_126 g_109.f3 g_114 g_141 g_143 g_144 g_72 g_194 g_215
 */
static int32_t * func_40(uint32_t  p_41, int32_t * p_42, int16_t * p_43, int32_t  p_44, uint32_t * p_45)
{ /* block id: 97 */
    uint32_t l_235 = 1UL;
    (*g_214) |= ((func_46(g_141[1]) , l_235) , 0xCE81F14CL);
    return p_45;
}


/* ------------------------------------------ */
/* 
 * reads : g_24 g_53 g_2 g_36 g_86 g_52 g_109 g_114 g_72 g_144 g_55 g_126 g_141
 * writes: g_24 g_2 g_36 g_52 g_53 g_55 g_86 g_113 g_126 g_109.f3 g_114 g_141 g_143 g_144 g_72 g_194
 */
static union U1  func_46(int8_t  p_47)
{ /* block id: 15 */
    int32_t *l_50 = &g_2;
    int32_t l_211[7][2][7] = {{{6L,(-5L),6L,(-5L),6L,(-5L),6L},{0xD1FBBA7CL,0xBCAAB667L,0xBCAAB667L,0xD1FBBA7CL,0xD1FBBA7CL,0xBCAAB667L,0xBCAAB667L}},{{0x225E0FD6L,(-5L),0x225E0FD6L,(-5L),0x225E0FD6L,(-5L),0x225E0FD6L},{0xD1FBBA7CL,0xD1FBBA7CL,0xBCAAB667L,0xBCAAB667L,0xD1FBBA7CL,0xD1FBBA7CL,0xBCAAB667L}},{{6L,(-5L),6L,(-5L),6L,(-5L),6L},{0xD1FBBA7CL,0xBCAAB667L,0xBCAAB667L,0xD1FBBA7CL,0xD1FBBA7CL,0xBCAAB667L,0xBCAAB667L}},{{0x225E0FD6L,(-5L),0x225E0FD6L,(-5L),0x225E0FD6L,(-5L),0x225E0FD6L},{0xD1FBBA7CL,0xD1FBBA7CL,0xBCAAB667L,0xBCAAB667L,0xD1FBBA7CL,0xD1FBBA7CL,0xBCAAB667L}},{{6L,(-5L),6L,(-5L),6L,(-5L),6L},{0xD1FBBA7CL,0xBCAAB667L,0xBCAAB667L,0xD1FBBA7CL,0xD1FBBA7CL,0xBCAAB667L,0xBCAAB667L}},{{0x225E0FD6L,(-5L),0x225E0FD6L,(-5L),0x225E0FD6L,(-5L),0x225E0FD6L},{0xD1FBBA7CL,0xD1FBBA7CL,0xBCAAB667L,0xBCAAB667L,0xD1FBBA7CL,0xD1FBBA7CL,0xBCAAB667L}},{{6L,(-5L),6L,(-5L),6L,(-5L),6L},{0xD1FBBA7CL,0xBCAAB667L,0xBCAAB667L,0xD1FBBA7CL,0xD1FBBA7CL,0xBCAAB667L,0xBCAAB667L}}};
    union U1 l_212 = {0L};
    int i, j, k;
    l_211[2][1][3] &= func_48(l_50);
    return l_212;
}


/* ------------------------------------------ */
/* 
 * reads : g_24 g_53 g_2 g_36 g_86 g_52 g_109 g_114 g_72 g_144 g_55 g_126 g_141
 * writes: g_24 g_2 g_36 g_52 g_53 g_55 g_86 g_113 g_126 g_109.f3 g_114 g_141 g_143 g_144 g_72 g_194
 */
static int32_t  func_48(int32_t * p_49)
{ /* block id: 16 */
    uint32_t l_51[1];
    uint16_t *l_193 = &g_72;
    int8_t *l_195 = &g_143;
    int16_t *l_207 = (void*)0;
    int16_t *l_208 = &g_36;
    int32_t l_209[7][1];
    int32_t l_210 = 0xA774E767L;
    int i, j;
    for (i = 0; i < 1; i++)
        l_51[i] = 2UL;
    for (i = 0; i < 7; i++)
    {
        for (j = 0; j < 1; j++)
            l_209[i][j] = 9L;
    }
    for (g_24 = 0; (g_24 <= 0); g_24 += 1)
    { /* block id: 19 */
        uint32_t l_57 = 4294967293UL;
        int32_t l_85 = 0L;
        for (g_2 = 0; (g_2 >= 0); g_2 -= 1)
        { /* block id: 22 */
            int32_t l_88[7];
            const uint32_t l_173[9] = {0xBCAD55B1L,0xBCAD55B1L,0xBCAD55B1L,0xBCAD55B1L,0xBCAD55B1L,0xBCAD55B1L,0xBCAD55B1L,0xBCAD55B1L,0xBCAD55B1L};
            int32_t l_183 = 0x181DA4DAL;
            int i;
            for (i = 0; i < 7; i++)
                l_88[i] = 0xFA934127L;
            for (g_36 = 0; (g_36 <= 0); g_36 += 1)
            { /* block id: 25 */
                uint32_t l_67 = 1UL;
                int32_t l_73 = 0xAC9C4BD7L;
                for (g_52 = 0; (g_52 >= 0); g_52 -= 1)
                { /* block id: 28 */
                    uint8_t l_68 = 251UL;
                    for (g_53 = 0; g_53 < 1; g_53 += 1)
                    {
                        l_51[g_53] = 4294967287UL;
                    }
                    for (g_53 = 0; (g_53 >= 0); g_53 -= 1)
                    { /* block id: 32 */
                        int32_t *l_54 = &g_55;
                        int32_t *l_56 = &g_55;
                        int32_t **l_60[5][2][1] = {{{&l_54},{(void*)0}},{{&l_54},{(void*)0}},{{&l_54},{(void*)0}},{{&l_54},{(void*)0}},{{&l_54},{(void*)0}}};
                        uint16_t *l_71[4][9] = {{(void*)0,&g_72,(void*)0,(void*)0,&g_72,(void*)0,(void*)0,&g_72,(void*)0},{(void*)0,&g_72,(void*)0,(void*)0,&g_72,(void*)0,(void*)0,&g_72,(void*)0},{(void*)0,&g_72,(void*)0,(void*)0,&g_72,(void*)0,(void*)0,&g_72,(void*)0},{(void*)0,&g_72,(void*)0,(void*)0,&g_72,(void*)0,(void*)0,&g_72,(void*)0}};
                        int i, j, k;
                        l_57++;
                        if (l_51[g_53])
                            break;
                        p_49 = (void*)0;
                        (*l_54) = (safe_add_func_uint16_t_u_u(((safe_mod_func_uint16_t_u_u(0x021BL, (safe_lshift_func_int8_t_s_s((l_57 <= ((l_67 ^ (l_68 > (safe_lshift_func_uint16_t_u_s((l_73 = g_2), 10)))) == 0UL)), (safe_unary_minus_func_uint8_t_u((!l_67))))))) | l_68), (safe_add_func_uint32_t_u_u((safe_lshift_func_int16_t_s_u(g_36, 7)), 0L))));
                    }
                    l_85 &= (safe_mul_func_uint8_t_u_u((safe_sub_func_uint8_t_u_u((safe_lshift_func_uint8_t_u_u(l_68, 2)), l_67)), g_2));
                    for (g_53 = 0; (g_53 <= 0); g_53 += 1)
                    { /* block id: 42 */
                        return l_51[0];
                    }
                }
                for (l_67 = 0; (l_67 <= 0); l_67 += 1)
                { /* block id: 48 */
                    const int16_t *l_87 = (void*)0;
                    int16_t l_172 = (-1L);
                    int32_t *l_174 = &l_85;
                    uint16_t *l_184[7] = {(void*)0,&g_72,(void*)0,(void*)0,&g_72,(void*)0,(void*)0};
                    int32_t *l_190 = &g_53;
                    int i;
                    g_86 = &g_2;
                    if ((~((&g_36 != l_87) <= (l_88[5] <= (safe_mod_func_int32_t_s_s((*g_86), ((*l_174) &= (((safe_mod_func_int32_t_s_s((safe_div_func_int32_t_s_s((((safe_sub_func_uint16_t_u_u(func_97(g_52), (((safe_mod_func_int16_t_s_s(l_88[3], (safe_mod_func_int16_t_s_s((safe_rshift_func_uint16_t_u_s(g_109.f6, (0L == g_109.f0))), l_51[0])))) , l_88[5]) | l_88[3]))) == l_88[5]) < l_172), (*g_86))), l_173[0])) <= (-1L)) , 1L))))))))
                    { /* block id: 75 */
                        (*l_174) = 0xA3D40197L;
                        return (*g_86);
                    }
                    else
                    { /* block id: 78 */
                        if (l_51[0])
                            break;
                    }
                    (*l_190) &= ((l_51[g_24] = (l_51[0] || ((~(l_51[0] || l_67)) > (safe_mod_func_uint16_t_u_u(0x7F8CL, (safe_div_func_int16_t_s_s((safe_lshift_func_uint16_t_u_u(((((((l_173[0] ^ (safe_mod_func_int16_t_s_s(g_55, (g_72 = l_183)))) || ((+(safe_mul_func_uint16_t_u_u((safe_lshift_func_uint16_t_u_s(l_73, 1)), (((safe_unary_minus_func_uint32_t_u(l_183)) != (-1L)) != l_51[0])))) ^ g_109.f4)) , g_109.f3) , g_126[2][2]) < 0x684FL) , l_51[0]), g_109.f2)), l_51[0]))))))) && (*l_174));
                }
                if (l_51[0])
                    continue;
                return l_173[2];
            }
        }
    }
    l_210 &= (safe_add_func_uint32_t_u_u(((~(((((*l_195) = ((g_194[0] = l_193) == l_193)) >= (safe_sub_func_uint32_t_u_u(((((safe_unary_minus_func_uint16_t_u(((((safe_add_func_uint16_t_u_u((l_195 != ((*g_86) , l_195)), (safe_sub_func_int8_t_s_s((safe_rshift_func_int16_t_s_u((((8L < (l_51[0] > (~(((((safe_mul_func_int16_t_s_s(((*l_208) &= (-1L)), 0xAB67L)) > l_51[0]) != g_126[0][1]) , 0xBED7L) <= l_51[0])))) && (-5L)) & g_141[0]), g_109.f1)), g_126[2][0])))) > g_72) & 0UL) && 0L))) == 0x986FCF50L) > l_209[2][0]) < l_209[5][0]), l_51[0]))) , l_195) == l_195)) > 0x199EL), 0xF422AACBL));
    return l_51[0];
}


/* ------------------------------------------ */
/* 
 * reads : g_109 g_114 g_72 g_53 g_52 g_86 g_2 g_144 g_24 g_36
 * writes: g_113 g_126 g_109.f3 g_52 g_114 g_53 g_141 g_143 g_144 g_55
 */
static uint16_t  func_97(uint32_t  p_98)
{ /* block id: 50 */
    const struct S0 l_108[9][4] = {{{0,-21199,1,135,86,0,1,-402,3},{-1,23252,1,149,26,1,-4,-424,-2},{0,-21199,1,135,86,0,1,-402,3},{-0,-7293,0,111,28,1,7,-518,-3}},{{0,-21199,1,135,86,0,1,-402,3},{-0,-7293,0,111,28,1,7,-518,-3},{-0,-7293,0,111,28,1,7,-518,-3},{0,-21199,1,135,86,0,1,-402,3}},{{1,3929,0,-39,34,0,-6,-396,2},{-0,-7293,0,111,28,1,7,-518,-3},{-0,-26147,1,-163,61,0,7,427,2},{-0,-7293,0,111,28,1,7,-518,-3}},{{-0,-7293,0,111,28,1,7,-518,-3},{-1,23252,1,149,26,1,-4,-424,-2},{-0,-26147,1,-163,61,0,7,427,2},{-0,-26147,1,-163,61,0,7,427,2}},{{1,3929,0,-39,34,0,-6,-396,2},{1,3929,0,-39,34,0,-6,-396,2},{-0,-7293,0,111,28,1,7,-518,-3},{-0,-26147,1,-163,61,0,7,427,2}},{{0,-21199,1,135,86,0,1,-402,3},{-1,23252,1,149,26,1,-4,-424,-2},{0,-21199,1,135,86,0,1,-402,3},{-0,-7293,0,111,28,1,7,-518,-3}},{{0,-21199,1,135,86,0,1,-402,3},{-0,-7293,0,111,28,1,7,-518,-3},{-0,-7293,0,111,28,1,7,-518,-3},{0,-21199,1,135,86,0,1,-402,3}},{{1,3929,0,-39,34,0,-6,-396,2},{-0,-7293,0,111,28,1,7,-518,-3},{-0,-26147,1,-163,61,0,7,427,2},{-0,-7293,0,111,28,1,7,-518,-3}},{{-0,-7293,0,111,28,1,7,-518,-3},{-1,23252,1,149,26,1,-4,-424,-2},{-0,-26147,1,-163,61,0,7,427,2},{-0,-26147,1,-163,61,0,7,427,2}}};
    const union U1 l_110[3][7][3] = {{{{0L},{0L},{0L}},{{0xE3L},{-1L},{-1L}},{{0L},{0L},{0x97L}},{{0xE3L},{7L},{0xE3L}},{{0L},{0L},{0x97L}},{{-9L},{-9L},{-1L}},{{0xB4L},{0L},{0L}}},{{{-1L},{7L},{0x16L}},{{0xB4L},{0L},{0xB4L}},{{-9L},{-1L},{0x16L}},{{0L},{0L},{0L}},{{0xE3L},{-1L},{-1L}},{{0L},{0L},{0x97L}},{{0xE3L},{7L},{0xE3L}}},{{{0L},{0L},{0x97L}},{{-9L},{-9L},{-1L}},{{0x97L},{0xB4L},{0xB4L}},{{0xE3L},{-9L},{7L}},{{0x97L},{0L},{0x97L}},{{-1L},{0xE3L},{7L}},{{0L},{0L},{0xB4L}}}};
    int32_t *l_111 = (void*)0;
    uint8_t *l_112 = &g_113;
    int32_t **l_164 = &l_111;
    uint32_t l_165 = 0xE251D069L;
    int i, j, k;
    (*l_164) = func_99(&g_24, func_104(l_108[1][0], ((l_108[1][0].f4 , g_109) , ((l_110[0][2][1] , (((void*)0 != l_111) <= ((l_110[0][2][1] , ((*l_112) = (p_98 > p_98))) ^ g_109.f5))) | 0x4A07L)), g_114), g_109.f6, g_109.f7);
    return l_165;
}


/* ------------------------------------------ */
/* 
 * reads : g_52 g_109.f1 g_109.f0 g_86 g_2 g_144 g_24 g_36 g_234
 * writes: g_52 g_114 g_53 g_141 g_143 g_144 g_55
 */
static int32_t * func_99(uint32_t * const  p_100, uint8_t  p_101, uint8_t  p_102, const int8_t  p_103)
{ /* block id: 57 */
    uint8_t l_151[6][9][4] = {{{255UL,0x6EL,0x5DL,0xA6L},{1UL,0UL,0UL,1UL},{1UL,0xC0L,0x5DL,0xD0L},{255UL,1UL,0xFCL,0x27L},{0xA6L,6UL,0xA6L,0x27L},{0xFCL,1UL,255UL,0xD0L},{0x5DL,0xC0L,1UL,1UL},{0UL,0UL,1UL,0xA6L},{0x5DL,0x6EL,255UL,0xC0L}},{{0xFCL,255UL,0xA6L,255UL},{0xA6L,255UL,0xFCL,0xC0L},{255UL,0x6EL,0x5DL,0xA6L},{1UL,0UL,0UL,1UL},{1UL,0xC0L,0x5DL,0xD0L},{255UL,1UL,0xFCL,0x27L},{0xA6L,6UL,0xA6L,0x27L},{0xFCL,1UL,255UL,0xD0L},{0x5DL,0xC0L,1UL,1UL}},{{0UL,0UL,1UL,0xA6L},{0x5DL,0x6EL,255UL,0xC0L},{0xFCL,255UL,0xA6L,255UL},{0xA6L,255UL,0xFCL,0xC0L},{255UL,0x6EL,0x5DL,0xA6L},{1UL,0UL,0UL,1UL},{1UL,0xC0L,0x5DL,0xD0L},{255UL,1UL,0xFCL,0x27L},{0xA6L,6UL,0xA6L,0x27L}},{{0xFCL,1UL,255UL,0xD0L},{0x5DL,0xC0L,1UL,1UL},{0UL,0UL,1UL,0xA6L},{0x5DL,0x6EL,255UL,0xC0L},{0xFCL,255UL,0xA6L,255UL},{0xA6L,255UL,0xFCL,0xC0L},{255UL,0x6EL,0x5DL,0xA6L},{1UL,0UL,0UL,1UL},{1UL,0xC0L,0x5DL,0xD0L}},{{255UL,1UL,0xFCL,0x27L},{0xA6L,6UL,0xA6L,0x27L},{0xFCL,1UL,255UL,0xD0L},{0x5DL,0xC0L,1UL,1UL},{0UL,0UL,1UL,0xA6L},{0x5DL,0x6EL,255UL,0xC0L},{0xFCL,255UL,0xA6L,255UL},{0xA6L,255UL,0xFCL,0xC0L},{6UL,0xFCL,0xA6L,0xC0L}},{{0UL,0x27L,0x27L,0UL},{0UL,1UL,0xA6L,0x6EL},{6UL,0UL,0x5DL,255UL},{0xC0L,0xD0L,0xC0L,255UL},{0x5DL,0UL,6UL,0x6EL},{0xA6L,1UL,0UL,0UL},{0x27L,0x27L,0UL,0xC0L},{0xA6L,0xFCL,6UL,1UL},{0x5DL,6UL,0xC0L,6UL}}};
    int32_t *l_155 = &g_55;
    int32_t l_156 = 0x20075B0AL;
    int32_t *l_157 = (void*)0;
    int32_t *l_158 = &g_52;
    int32_t *l_159 = (void*)0;
    uint16_t l_160 = 0xAE7EL;
    int32_t *l_163 = (void*)0;
    int i, j, k;
    for (g_52 = 0; (g_52 < 13); g_52 = safe_add_func_int8_t_s_s(g_52, 1))
    { /* block id: 60 */
        int16_t l_132[8] = {0x8A8DL,0x8A8DL,1L,0x8A8DL,0x8A8DL,1L,0x8A8DL,0x8A8DL};
        uint8_t *l_135[2][9] = {{&g_114,(void*)0,&g_113,&g_113,&g_113,(void*)0,&g_114,&g_114,(void*)0},{&g_113,(void*)0,&g_114,(void*)0,&g_113,(void*)0,(void*)0,&g_113,(void*)0}};
        int32_t *l_136 = &g_53;
        int32_t **l_137 = &l_136;
        uint32_t *l_138 = (void*)0;
        uint32_t *l_139 = (void*)0;
        uint32_t *l_140 = &g_141[1];
        int8_t *l_142 = &g_143;
        int32_t *l_152 = &g_55;
        int32_t **l_153 = (void*)0;
        int32_t **l_154[5][5] = {{&l_152,&l_136,&l_152,&g_86,&g_86},{&l_152,&l_152,&g_86,&l_152,&l_152},{&l_152,&l_152,&l_136,&l_152,&l_136},{&l_136,&l_136,&g_86,&l_152,&l_152},{&l_152,&l_152,&l_152,&l_152,&l_136}};
        int i, j;
        (*l_136) = (l_132[7] | (g_114 = (safe_div_func_int8_t_s_s(l_132[7], g_109.f1))));
        (*l_137) = p_100;
        (*l_152) = (0x47L != ((g_109.f0 >= ((*l_142) = (((*l_140) = ((void*)0 != &g_114)) >= (*g_86)))) > ((0xACL >= (g_144 |= 7L)) | (((safe_rshift_func_int16_t_s_s((((safe_rshift_func_int16_t_s_u(0x722AL, ((safe_add_func_uint8_t_u_u(((*g_86) != (*p_100)), l_151[4][2][3])) || l_151[5][1][2]))) & (*g_86)) == p_102), 6)) , g_36) ^ l_151[4][2][3]))));
        l_155 = p_100;
    }
    l_160++;
    return l_163;
}


/* ------------------------------------------ */
/* 
 * reads : g_72 g_53 g_109.f6 g_52 g_109.f3
 * writes: g_126 g_109.f3
 */
static uint8_t  func_104(const struct S0  p_105, int16_t  p_106, int32_t  p_107)
{ /* block id: 52 */
    uint8_t l_121 = 0xD5L;
    uint32_t l_124[7];
    int16_t *l_125 = &g_126[2][2];
    int32_t *l_127[9][9] = {{&g_53,&g_52,(void*)0,&g_52,&g_53,&g_55,&g_52,(void*)0,(void*)0},{&g_2,&g_2,(void*)0,&g_2,(void*)0,&g_2,&g_2,&g_53,&g_2},{&g_2,&g_53,&g_52,&g_55,&g_52,&g_55,&g_52,&g_53,&g_2},{&g_2,&g_52,(void*)0,&g_53,&g_55,(void*)0,&g_55,&g_53,(void*)0},{&g_52,&g_52,&g_55,(void*)0,&g_53,(void*)0,&g_2,(void*)0,&g_53},{&g_2,&g_55,&g_55,&g_2,&g_2,&g_2,&g_2,(void*)0,&g_2},{&g_2,&g_55,&g_55,&g_55,&g_55,&g_2,&g_52,&g_52,&g_53},{&g_2,&g_2,(void*)0,&g_2,&g_2,(void*)0,&g_2,&g_2,&g_52},{&g_53,&g_55,&g_52,&g_52,&g_53,&g_53,&g_52,&g_52,&g_55}};
    int32_t *l_128[3];
    int16_t l_129 = (-1L);
    int i, j;
    for (i = 0; i < 7; i++)
        l_124[i] = 18446744073709551615UL;
    for (i = 0; i < 3; i++)
        l_128[i] = &g_52;
    g_109.f3 |= (safe_add_func_uint16_t_u_u((((((safe_div_func_uint16_t_u_u((safe_mod_func_int8_t_s_s((((((p_105.f0 <= (l_121 ^ p_106)) > (~(((*l_125) = (p_105.f5 <= (safe_rshift_func_int8_t_s_u(l_124[0], 0)))) > (((l_124[0] && l_124[2]) != ((l_128[2] = l_127[6][6]) == (void*)0)) & p_105.f5)))) >= 0xF23EL) < g_72) | 0L), p_107)), (-8L))) | g_53) , g_109.f6) | p_105.f8) , 0xEFFEL), g_52));
    return l_129;
}




/* ---------------------------------------- */
int main (int argc, char* argv[])
{
    int i, j, k;
    int print_hash_value = 0;
    if (argc == 2 && strcmp(argv[1], "1") == 0) print_hash_value = 1;
    platform_main_begin();
    crc32_gentab();
    func_1();
    transparent_crc(g_2, "g_2", print_hash_value);
    transparent_crc(g_24, "g_24", print_hash_value);
    transparent_crc(g_36, "g_36", print_hash_value);
    transparent_crc(g_52, "g_52", print_hash_value);
    transparent_crc(g_53, "g_53", print_hash_value);
    transparent_crc(g_55, "g_55", print_hash_value);
    transparent_crc(g_72, "g_72", print_hash_value);
    transparent_crc(g_109.f0, "g_109.f0", print_hash_value);
    transparent_crc(g_109.f1, "g_109.f1", print_hash_value);
    transparent_crc(g_109.f2, "g_109.f2", print_hash_value);
    transparent_crc(g_109.f3, "g_109.f3", print_hash_value);
    transparent_crc(g_109.f4, "g_109.f4", print_hash_value);
    transparent_crc(g_109.f5, "g_109.f5", print_hash_value);
    transparent_crc(g_109.f6, "g_109.f6", print_hash_value);
    transparent_crc(g_109.f7, "g_109.f7", print_hash_value);
    transparent_crc(g_109.f8, "g_109.f8", print_hash_value);
    transparent_crc(g_113, "g_113", print_hash_value);
    transparent_crc(g_114, "g_114", print_hash_value);
    for (i = 0; i < 4; i++)
    {
        for (j = 0; j < 6; j++)
        {
            transparent_crc(g_126[i][j], "g_126[i][j]", print_hash_value);
            if (print_hash_value) printf("index = [%d][%d]\n", i, j);

        }
    }
    for (i = 0; i < 2; i++)
    {
        transparent_crc(g_141[i], "g_141[i]", print_hash_value);
        if (print_hash_value) printf("index = [%d]\n", i);

    }
    transparent_crc(g_143, "g_143", print_hash_value);
    transparent_crc(g_144, "g_144", print_hash_value);
    transparent_crc(g_215, "g_215", print_hash_value);
    transparent_crc(g_217, "g_217", print_hash_value);
    for (i = 0; i < 6; i++)
    {
        for (j = 0; j < 6; j++)
        {
            for (k = 0; k < 7; k++)
            {
                transparent_crc(g_234[i][j][k], "g_234[i][j][k]", print_hash_value);
                if (print_hash_value) printf("index = [%d][%d][%d]\n", i, j, k);

            }
        }
    }
    for (i = 0; i < 2; i++)
    {
        transparent_crc(g_312[i], "g_312[i]", print_hash_value);
        if (print_hash_value) printf("index = [%d]\n", i);

    }
    transparent_crc(g_331.f0, "g_331.f0", print_hash_value);
    for (i = 0; i < 9; i++)
    {
        for (j = 0; j < 8; j++)
        {
            transparent_crc(g_350[i][j].f0, "g_350[i][j].f0", print_hash_value);
            transparent_crc(g_350[i][j].f1, "g_350[i][j].f1", print_hash_value);
            transparent_crc(g_350[i][j].f2, "g_350[i][j].f2", print_hash_value);
            transparent_crc(g_350[i][j].f3, "g_350[i][j].f3", print_hash_value);
            transparent_crc(g_350[i][j].f4, "g_350[i][j].f4", print_hash_value);
            transparent_crc(g_350[i][j].f5, "g_350[i][j].f5", print_hash_value);
            transparent_crc(g_350[i][j].f6, "g_350[i][j].f6", print_hash_value);
            transparent_crc(g_350[i][j].f7, "g_350[i][j].f7", print_hash_value);
            transparent_crc(g_350[i][j].f8, "g_350[i][j].f8", print_hash_value);
            if (print_hash_value) printf("index = [%d][%d]\n", i, j);

        }
    }
    transparent_crc(g_408, "g_408", print_hash_value);
    transparent_crc(g_477.f0, "g_477.f0", print_hash_value);
    transparent_crc(g_493, "g_493", print_hash_value);
    transparent_crc(g_543, "g_543", print_hash_value);
    transparent_crc(g_626, "g_626", print_hash_value);
    transparent_crc(g_664, "g_664", print_hash_value);
    for (i = 0; i < 1; i++)
    {
        for (j = 0; j < 9; j++)
        {
            for (k = 0; k < 4; k++)
            {
                transparent_crc(g_666[i][j][k], "g_666[i][j][k]", print_hash_value);
                if (print_hash_value) printf("index = [%d][%d][%d]\n", i, j, k);

            }
        }
    }
    transparent_crc(g_733, "g_733", print_hash_value);
    transparent_crc(g_776, "g_776", print_hash_value);
    transparent_crc(g_807, "g_807", print_hash_value);
    transparent_crc(g_812, "g_812", print_hash_value);
    transparent_crc(g_824.f0, "g_824.f0", print_hash_value);
    transparent_crc(g_825, "g_825", print_hash_value);
    transparent_crc(g_891, "g_891", print_hash_value);
    transparent_crc(g_1058, "g_1058", print_hash_value);
    transparent_crc(g_1177.f0, "g_1177.f0", print_hash_value);
    platform_main_end(crc32_context ^ 0xFFFFFFFFUL, print_hash_value);
    return 0;
}

/************************ statistics *************************
XXX max struct depth: 1
breakdown:
   depth: 0, occurrence: 261
   depth: 1, occurrence: 12
XXX total union variables: 7

XXX non-zero bitfields defined in structs: 9
XXX zero bitfields defined in structs: 0
XXX const bitfields defined in structs: 1
XXX volatile bitfields defined in structs: 0
XXX structs with bitfields in the program: 13
breakdown:
   indirect level: 0, occurrence: 12
   indirect level: 1, occurrence: 1
XXX full-bitfields structs in the program: 12
breakdown:
   indirect level: 0, occurrence: 12
XXX times a bitfields struct's address is taken: 3
XXX times a bitfields struct on LHS: 0
XXX times a bitfields struct on RHS: 25
XXX times a single bitfield on LHS: 5
XXX times a single bitfield on RHS: 59

XXX max expression depth: 51
breakdown:
   depth: 1, occurrence: 185
   depth: 2, occurrence: 44
   depth: 3, occurrence: 2
   depth: 4, occurrence: 3
   depth: 5, occurrence: 5
   depth: 6, occurrence: 3
   depth: 7, occurrence: 3
   depth: 9, occurrence: 1
   depth: 11, occurrence: 1
   depth: 13, occurrence: 4
   depth: 14, occurrence: 1
   depth: 16, occurrence: 1
   depth: 17, occurrence: 2
   depth: 18, occurrence: 7
   depth: 19, occurrence: 1
   depth: 20, occurrence: 4
   depth: 21, occurrence: 2
   depth: 22, occurrence: 4
   depth: 23, occurrence: 4
   depth: 24, occurrence: 2
   depth: 25, occurrence: 2
   depth: 26, occurrence: 3
   depth: 27, occurrence: 1
   depth: 31, occurrence: 2
   depth: 32, occurrence: 1
   depth: 33, occurrence: 2
   depth: 34, occurrence: 1
   depth: 39, occurrence: 1
   depth: 51, occurrence: 1

XXX total number of pointers: 243

XXX times a variable address is taken: 502
XXX times a pointer is dereferenced on RHS: 249
breakdown:
   depth: 1, occurrence: 194
   depth: 2, occurrence: 53
   depth: 3, occurrence: 2
XXX times a pointer is dereferenced on LHS: 190
breakdown:
   depth: 1, occurrence: 170
   depth: 2, occurrence: 19
   depth: 3, occurrence: 1
XXX times a pointer is compared with null: 15
XXX times a pointer is compared with address of another variable: 3
XXX times a pointer is compared with another pointer: 9
XXX times a pointer is qualified to be dereferenced: 3325

XXX max dereference level: 4
breakdown:
   level: 0, occurrence: 0
   level: 1, occurrence: 943
   level: 2, occurrence: 212
   level: 3, occurrence: 39
   level: 4, occurrence: 2
XXX number of pointers point to pointers: 94
XXX number of pointers point to scalars: 139
XXX number of pointers point to structs: 1
XXX percent of pointers has null in alias set: 29.6
XXX average alias set size: 1.43

XXX times a non-volatile is read: 1247
XXX times a non-volatile is write: 551
XXX times a volatile is read: 0
XXX    times read thru a pointer: 0
XXX times a volatile is write: 0
XXX    times written thru a pointer: 0
XXX times a volatile is available for access: 0
XXX percentage of non-volatile access: 100

XXX forward jumps: 1
XXX backward jumps: 3

XXX stmts: 190
XXX max block depth: 5
breakdown:
   depth: 0, occurrence: 27
   depth: 1, occurrence: 24
   depth: 2, occurrence: 29
   depth: 3, occurrence: 38
   depth: 4, occurrence: 37
   depth: 5, occurrence: 35

XXX percentage a fresh-made variable is used: 15.1
XXX percentage an existing variable is used: 84.9
FYI: the random generator makes assumptions about the integer size. See platform.info for more details.
********************* end of statistics **********************/

