uniform half4 colorGreen, colorRed;
uniform half unknownInput; // = 1

bool simple() {
    return true;
}

bool return_on_both_sides() {
    if (unknownInput == 1) return true; else return true;
}

bool for_inside_body() {
    for (int x=0; x<=10; ++x) { return true; }
}

bool after_for_body() {
    for (int x=0; x<=10; ++x) { simple(); }
    return true;
}

bool for_with_double_sided_conditional_return() {
    for (int x=0; x<=10; ++x) {
        if (unknownInput == 1) return true; else return true;
    }
}

bool if_else_chain() {
    if (unknownInput == 1)
        return true;
    else if (unknownInput == 2)
        return false;
    else if (unknownInput == 3)
        return true;
    else if (unknownInput == 4)
        return false;
    else
        return true;
}

half4 main(float2 coords) {
    return  simple() &&
            return_on_both_sides() &&
            for_inside_body() &&
            after_for_body() &&
            for_with_double_sided_conditional_return() &&
            if_else_chain() ? colorGreen : colorRed;
}
