
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;
}
bool test_comma_b() {
    mat2 x;
    mat2 y;
    return ((x = mat2(1.0, 2.0, 3.0, 4.0) , y = 0.5 * mat2(2.0, 4.0, 6.0, 8.0)) , x == y);
}
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()) && test_comma_b() ? colorGreen : colorRed;
}
