precision highp float;
#define iChannel0 inputImageTexture
#define texture(a,b) texture2D(a,fract(b))
#define fragColor gl_FragColor
varying highp vec2 textureCoordinate;
varying highp vec2 textureCoordinate2;

uniform sampler2D inputImageTexture;
uniform sampler2D inputImageTexture2;

uniform float iTime;

uniform highp vec2 iResolution;

uniform float div;
uniform float update;
uniform float input2;

void main()
{
    highp vec2 uv = textureCoordinate;

    vec2 ouv = uv;

    uv *= div;

    float c = floor(uv.y) * div + floor(uv.x);
    c -= 1.0;
    uv.y = floor(c / div) + fract(uv.y);
    uv.x = mod(c, div) + fract(uv.x);
    uv /= div;

    fragColor = mix(texture(iChannel0, ouv * div), texture(iChannel1, mix(ouv, uv ,update)), step(0., uv.y) * input2);
}