#version 100
precision mediump float;
uniform sampler2D uSampler0_Stage0;
uniform sampler2D uSampler0_Stage1;
uniform vec4 uTexDom_Stage1;
varying vec4 vColor;
varying vec2 vMatrixCoord_Stage0;
varying vec2 vMatrixCoord_Stage1;

void main()
{
  vec4 output_Stage0;
  {
    // Stage 0: Texture
    output_Stage0 =
        (vColor * texture2D(uSampler0_Stage0, vMatrixCoord_Stage0).aaaa);
  }
  vec4 output_Stage1;
  {
    // Stage 1: TextureDomain
    {
      bvec4 outside;
      outside.xy = lessThan(vMatrixCoord_Stage1, uTexDom_Stage1.xy);
      outside.zw = greaterThan(vMatrixCoord_Stage1, uTexDom_Stage1.zw);
      output_Stage1 =
          any(outside) ?
              vec4(0.0, 0.0, 0.0, 0.0) :
              (output_Stage0 * texture2D(uSampler0_Stage1,
                                         vMatrixCoord_Stage1));
    }
  }
  gl_FragColor = output_Stage1;
}
