/* <-- make the slash a double slash, good luck

/// COSH Function (Hyperbolic Cosine)
float cosh(float val)
{
    float tmp = exp(val);
    float cosH = (tmp + 1.0 / tmp) / 2.0;
    return cosH;
}
 
// TANH Function (Hyperbolic Tangent)
float tanh(float val)
{
    float tmp = exp(val);
    float tanH = (tmp - 1.0 / tmp) / (tmp + 1.0 / tmp);
    return tanH;
}
 
// SINH Function (Hyperbolic Sine)
float sinh(float val)
{
    float tmp = exp(val);
    float sinH = (tmp - 1.0 / tmp) / 2.0;
    return sinH;
}
//*/

float hue2rgb(float p, float q, float t) {
	if(t < 0.0) t += 1.0;
	if(t > 1.0) t -= 1.0;
	if(t < 1.0/6.0) return p + (q - p) * 6.0 * t;
	if(t < 1.0/2.0) return q;
	if(t < 2.0/3.0) return p + (q - p) * (2.0/3.0 - t) * 6.0;
	return p;
}
void HSL2RGB(out float r, out float g, out float b, float h, float s, float l) {
	if (abs(s) <= 0.0000001) {
		r = g = b = l; // achromatic
	} else {
		float q = (l < 0.5) ? l * (1.0 + s) : l + s - l * s;
		float p = 2.0 * l - q;
		r = hue2rgb(p, q, h + 1.0/3.0);
		g = hue2rgb(p, q, h);
		b = hue2rgb(p, q, h - 1.0/3.0);
	}
}
void mainImage2( out vec4 fragColor, in vec2 fragCoord )
{
	vec2 uv = fragCoord.xy / iResolution.xy;
    float sec = iTime;
    float M_PI = 3.15159;
    float sca = 1.0 + sin(iTime * 0.25) * 0.25;
    float in_real = sca * (uv.x * 3.0 - 1.5) * iResolution.x / 640.0;
	float in_imag = sca * (uv.y * 3.0 - 1.5) * iResolution.y / 480.0;
	float out_real = sin(in_real) * cosh(in_imag);
	float out_imag = cos(in_real) * sinh(in_imag);
				float h = atan(out_imag, out_real) / (2.0 * M_PI);
				float s = abs(sin(2.0*M_PI*length(vec2(out_real,out_imag))));
    float t2 = iTime * 0.2;
    vec2 rm = vec2(t2*sin(t2)+cos(t2), t2*cos(t2)-sin(t2)) / 10.0;
				float l = sqrt(sqrt(abs(
					sin(2.0*M_PI*out_imag+rm.x)*
					sin(2.0*M_PI*out_real+rm.y)
				)));
				float omg = 1.0 / exp(l);
				float l1 = 0.5 * ((1.0 - s) + l + sqrt((1.0 - s - l)*(1.0 - s - l) + 0.01));
				l = 1.0 / (1.0 + l);
				
				float nl = (2.0 - s) * l;
				s *= l;
				s /= (l <= 1.0) ? l : (2.0 - l);
				l = nl / 2.0;
    float fack = pow(sin(iTime) * 0.5 + 0.5, 5.0);
		 s = 0.75 + fack;
			
				if (h < 0.0) h += 1.0 + ceil(-h);
				h = mod(h, 1.0);
				float r=0.0, g=0.0, b=0.0;
				float r1=0.0, g1=0.0, b1=0.0;
				float r2=0.0, g2=0.0, b2=0.0;
				HSL2RGB(r,g,b,h,s,l);
    float t3 = sin(iTime * 0.383)* 5.0 + 5.0;
				h = mod(0.0 / 360.0, 1.0);
				HSL2RGB(r1,g1,b1,h,s,l);
				h = mod(195.0 / 360.0, 1.0);
				HSL2RGB(r2,g2,b2,h,s,l);

				float t = omg - 0.5;
				
				r += (r1 + r2 + t * (r2 - r1));// / 2.0;
				g += (g1 + g2 + t * (g2 - g1));// / 2.0;
				b += (b1 + b2 + t * (b2 - b1));// / 2.0;
    r/=3.0;g/=3.0;b/=3.0;
				omg *= mix(0.5, pow(sin(iTime * 0.5) * 0.5 + 0.5, 20.0), fack) * 0.25;
				r += r2 * omg;
				g += g2 * omg;
				b += b2 * omg;

	fragColor = vec4(b,g,r,1);
}
void mainImage( out vec4 fragColor, in vec2 fragCoord ) {
    mainImage2(fragColor, fragCoord);

    //return; // UN-COMMENT THIS TO DISABLE AA
   
    float sp = 0.333;
    vec4 aa1 = vec4(0.0);
    vec2 fc2 = fragCoord + vec2(sp, sp);
    mainImage2(aa1, fc2);
    fragColor += aa1;
    
    //fragColor /= 2.0;return; // UN-COMMENT THIS USE 2x AA (Default = 5x)
    
    fc2 = fragCoord + vec2(sp, -sp);
    mainImage2(aa1, fc2);
    fragColor += aa1;
    
    fc2 = fragCoord + vec2(-sp, sp);
    mainImage2(aa1, fc2);
    fragColor += aa1;
    
    fc2 = fragCoord + vec2(-sp, -sp);
    mainImage2(aa1, fc2);
    fragColor += aa1;

    fragColor /= 5.0;
}
