
out vec4 sk_FragColor;
uniform vec4 colorGreen;
uniform vec4 colorRed;
bool test_half_b() {
    bool ok = true;
    mat2 m1 = mat2(1.0, 2.0, 3.0, 4.0);
    ok = ok && m1 == mat2(1.0, 2.0, 3.0, 4.0);
    mat2 m3 = m1;
    ok = ok && m3 == mat2(1.0, 2.0, 3.0, 4.0);
    mat2 m4 = mat2(6.0);
    ok = ok && m4 == mat2(6.0, 0.0, 0.0, 6.0);
    m3 *= m4;
    ok = ok && m3 == mat2(6.0, 12.0, 18.0, 24.0);
    mat2 m5 = mat2(m1[1].y);
    ok = ok && m5 == mat2(4.0, 0.0, 0.0, 4.0);
    m1 += m5;
    ok = ok && m1 == mat2(5.0, 2.0, 3.0, 8.0);
    mat2 m7 = mat2(5.0, 6.0, 7.0, 8.0);
    ok = ok && m7 == mat2(5.0, 6.0, 7.0, 8.0);
    mat3 m9 = mat3(9.0);
    ok = ok && m9 == mat3(9.0, 0.0, 0.0, 0.0, 9.0, 0.0, 0.0, 0.0, 9.0);
    mat4 m10 = mat4(11.0);
    ok = ok && m10 == mat4(11.0, 0.0, 0.0, 0.0, 0.0, 11.0, 0.0, 0.0, 0.0, 0.0, 11.0, 0.0, 0.0, 0.0, 0.0, 11.0);
    mat4 m11 = mat4(20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0);
    m11 -= m10;
    ok = ok && m11 == mat4(9.0, 20.0, 20.0, 20.0, 20.0, 9.0, 20.0, 20.0, 20.0, 20.0, 9.0, 20.0, 20.0, 20.0, 20.0, 9.0);
    return ok;
}
vec4 main() {
    bool _0_ok = true;
    mat2 _1_m1 = mat2(1.0, 2.0, 3.0, 4.0);
    _0_ok = _0_ok && _1_m1 == mat2(1.0, 2.0, 3.0, 4.0);
    mat2 _2_m3 = _1_m1;
    _0_ok = _0_ok && _2_m3 == mat2(1.0, 2.0, 3.0, 4.0);
    mat2 _3_m4 = mat2(6.0);
    _0_ok = _0_ok && _3_m4 == mat2(6.0, 0.0, 0.0, 6.0);
    _2_m3 *= _3_m4;
    _0_ok = _0_ok && _2_m3 == mat2(6.0, 12.0, 18.0, 24.0);
    mat2 _4_m5 = mat2(_1_m1[1].y);
    _0_ok = _0_ok && _4_m5 == mat2(4.0, 0.0, 0.0, 4.0);
    _1_m1 += _4_m5;
    _0_ok = _0_ok && _1_m1 == mat2(5.0, 2.0, 3.0, 8.0);
    mat2 _5_m7 = mat2(5.0, 6.0, 7.0, 8.0);
    _0_ok = _0_ok && _5_m7 == mat2(5.0, 6.0, 7.0, 8.0);
    mat3 _6_m9 = mat3(9.0);
    _0_ok = _0_ok && _6_m9 == mat3(9.0, 0.0, 0.0, 0.0, 9.0, 0.0, 0.0, 0.0, 9.0);
    mat4 _7_m10 = mat4(11.0);
    _0_ok = _0_ok && _7_m10 == mat4(11.0, 0.0, 0.0, 0.0, 0.0, 11.0, 0.0, 0.0, 0.0, 0.0, 11.0, 0.0, 0.0, 0.0, 0.0, 11.0);
    mat4 _8_m11 = mat4(20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0);
    _8_m11 -= _7_m10;
    _0_ok = _0_ok && _8_m11 == mat4(9.0, 20.0, 20.0, 20.0, 20.0, 9.0, 20.0, 20.0, 20.0, 20.0, 9.0, 20.0, 20.0, 20.0, 20.0, 9.0);
    return _0_ok && test_half_b() ? colorGreen : colorRed;
}
