anchor.diff:  }
   
   void main( void ) {
  -	vec4 lch = rgb_to_lch(texture2D(u_tex0, v_uv));
  +	vec4 lch = fwd_rgb2jch(texture2D(u_tex0, v_uv));
  +
   	if (u_numEdges > 9.0) {					// u_numEdges 0 = no edges, 10 = 1 edge, 20 = 2 edges, 30 = 3 edges, etc.
   		float dx = 1000.0 / (u_numEdges);		// dx is width of grey bands 100 for 1 edge, 50 for 2 edges, 33 for 3 edges, 25 for 4 edges, etc
   		float lx = max(lch.x, dx * u_maskDark / 10.0);				// clamp out n dark bands eg 0 = show all, 10 = no blacks, 20=no blacks or darks
  
positive.code: 
  	lch.y = lch.y * (1.0 + u_maxContrast/50.0);														// optionally amp the chroma
  	lch.y = lch.y * u_showColors / 100.0;
  	gl_FragColor = lch_to_rgb(lch);
  }
negative.code: 
  vec3 D65 = vec3(95.047, 100.000, 108.883);
  
  // linear transform matrix for lms = xyz * MCAT02
  mat3 MCAT02 = mat3(0.7328,0.4296,-0.1624,         -0.7036,1.6975,0.0061,         0.0030,0.0136,0.9834);
  mat3 MCAT02INV = mat3(1.096124,-0.278869,0.182745, 0.454369,0.473533,0.072098,  -0.009628,-0.005698,1.015326);
  
  // linear transform matrix for rgb = xyz * MsRGB
  mat3 MsRGB = mat3(3.2406,-1.5372,-0.4986,         -0.9689,1.8758,0.0415,         0.0557,-0.2040,1.0570);
  mat3 MsRGBINV = mat3(0.4124,0.3576,0.1805,         0.2126,0.7152,0.0722,         0.0193,0.1192,0.9505);
  
  // linear tranform matrix for lms_p = lms_c * MHPE = lms_c * (MH * MCAT02INV) 
  mat3 MHPE = mat3(0.740979,0.218025,0.04101,        0.285353,0.624202,0.090445,  -0.0096276,-0.005698,1.015326);
  mat3 MHPEINV = mat3(1.55915,-0.544723,-0.014445,  -0.71433,1.85031,-0.13598,     0.010776,0.0052188,0.984006);
  
  // linear tranform matrix for p2ab = lms_p * MP2AB 
  mat3 MP2AB = mat3(2.0000,1.0000,0.05000,           1.0000,-1.0909,0.090909,     0.111111,0.111111,-0.222222);
  mat3 MP2ABINV = mat3(0.32787,0.32145,0.20527,      0.32787,-0.63507,-0.18603,   0.327869,-0.15681,-4.490378);
  
  
  ///////////////////////// sRGB /////////////////////////////////////////
  // fwd XYZ [0..100] -> RGB [0..1] 
  // rev RGB [0..1] -> // XYZ [0..100] normalised to Y=100
  
  // compand a linear RGB component c into a nonlinear space
  float fwd_sRGB(float c) {
  	return (float(c > 0.0031308) * 1.055 * pow(c, (1.0 / 2.4)) - 0.055 
  