#define rot(a) mat2(cos(a),-sin(a),sin(a),cos(a))

void mainImage(out vec4 c,in vec2 o)
{
    vec2 O=o;
    c=vec4(0);
    float minR=min(iResolution.y,iResolution.x);

    o-=iResolution.xy/2.0;
    o*=rot(mod(o.x,3.0)+0.0708);

    float r=minR/3.2;
    for(float i=radians(90.0);i<=radians(180.0);i+=radians(10.0)){
        float j=sin(mod(iTime/4.0,0.18));
        c+=vec4(int(ceil(length(vec2(o.x,(o.y)*sin(o.x>0.0?i-j:i+j)))))==int(r*sin(o.x>0.0?i-j:i+j)));
        if(mod((iTime)/4.0,0.18)>0.160)c+=vec4(abs(o.x)<0.5&&length(o.xy)<r);
    }

    O-=iResolution.xy/2.0-vec2(minR/2.0*sin(iTime),minR/6.0*cos(iTime))*rot(radians(30.0));
    O*=rot(mod(O.x,3.0)+0.0708);
    float R=minR/(16.0-cos(iTime)*4.0);
    if(cos(iTime)>0.0||length(o)>r){
        if(length(O)<R)c=vec4(0);
        for(float i=radians(90.0);i<=radians(180.0);i+=radians(20.0)){
            float j=sin(mod(iTime/10.0,0.18));
            c+=vec4(int(ceil(length(vec2(O.x,(O.y)*sin(O.x>0.0?i-j:i+j)))))==int(R*sin(O.x>0.0?i-j:i+j)))*vec4(1,0,0,1);
            if(mod((iTime)/10.0,0.18)>0.16)c+=vec4(abs(O.x)<0.5&&length(O.xy)<R)*vec4(1,0,0,1);;
        }
    }
}
