{"vertex":"#version 300 es\nprecision highp float;uniform vec4 uSky;uniform vec3 uSun;flat out vec3 vLight;flat out vec3 vHaze;\n#define uAtmosphere 1.0\n\n#define uGround 1.0\n\n#define uPhysicalSky 0.0\nfloat lightDomeGain(vec3 dir,float bortle){return 1.0;}float eclipseRing(){return 0.0;}vec3 physicalSkyRelative(vec3 dir,vec3 sunDir,float sinSunAlt){return vec3(0.0);}vec3 sunRayLight(vec3 dir,vec3 sunDir){return vec3(1.0);}float moonlightNanolamberts(vec3 dir,vec4 moon){return 0.0;}float airmass(float sinAlt){float s=max(sinAlt,-0.02);return 1.0/(s + 0.025*exp(-11.0*s));}vec3 atmosphericTransmission(float sinAlt){const vec3 k=vec3(0.20,0.28,0.45);float s=mix(sinAlt,abs(sinAlt),1.0 - uGround);return mix(vec3(1.0),exp(-0.921*k*airmass(s)),uAtmosphere);}float daylightMagnitudeLoss(float sinSunAlt){float sunAltDeg=degrees(asin(clamp(sinSunAlt,-1.0,1.0)));float twilight=smoothstep(-18.0,-6.0,sunAltDeg)*3.0;float day=smoothstep(-6.0,1.0,sunAltDeg)*12.0;return(twilight + day)*uAtmosphere;}float bortleSkyMag(float bortle){const float MAG[9]=float[9](21.7,21.6,21.4,21.0,20.0,19.2,18.7,18.2,17.5);float b=clamp(bortle,1.0,9.0)- 1.0;int i=int(min(floor(b),7.0));return mix(MAG[i],MAG[i + 1],b - float(i));}float bortleSkyExcess(float bortle){return pow(10.0,0.4*(21.7 - bortleSkyMag(bortle)))- 1.0;}vec3 nightVision(vec3 rgb,float amount){return mix(rgb,vec3(dot(rgb,vec3(0.299,0.587,0.114)),0.0,0.0),amount);}float moonlightDisplay(float nanolamberts){float lum=0.0016*pow(nanolamberts/71.2,0.68);return lum/(1.0 + lum/0.15);}vec3 modelSolar(vec3 dir,float sinSunAlt,vec3 sunDir,float aureoles){float sunAltDeg=degrees(asin(clamp(sinSunAlt,-1.0,1.0)));if(sunAltDeg<=-18.0)return vec3(0.0);float day=smoothstep(-6.0,3.0,sunAltDeg);float dusk=smoothstep(-18.0,-2.0,sunAltDeg);float cosGamma=dot(dir,sunDir);float rayleigh=0.75*(1.0 + cosGamma*cosGamma);float gammaDeg=degrees(acos(clamp(cosGamma,-1.0,1.0)));float aureole=exp(-gammaDeg/5.0)*0.22*aureoles;vec2 sunBearing=normalize(vec2(sunDir.x,sunDir.z)+ vec2(1e-6));vec2 viewBearing=normalize(vec2(dir.x,dir.z)+ vec2(1e-6));float towardSun=mix(max(dot(sunBearing,viewBearing),0.0),1.0,eclipseRing());vec3 zenithBlue=vec3(0.10,0.22,0.48);vec3 horizonPale=vec3(0.34,0.42,0.56);vec3 daySky=mix(zenithBlue,horizonPale,smoothstep(0.75,0.0,dir.y))*(0.55 + 0.45*rayleigh)+ vec3(0.95,0.80,0.55)*aureole;float band=pow(towardSun,3.0)*smoothstep(0.42,-0.02,dir.y);vec3 twilight=mix(vec3(0.030,0.045,0.105),vec3(0.46,0.21,0.07),band);vec3 solar=daySky*day + twilight*dusk*(1.0 - day)*0.9;float altDeg=degrees(asin(clamp(dir.y,-1.0,1.0)));float awayFromSun=max(-dot(sunBearing,viewBearing),0.0);float antiSolar=awayFromSun*awayFromSun;float shadowShow=smoothstep(2.0,-0.5,degrees(asin(clamp(sunDir.y,-1.0,1.0))))*smoothstep(-8.5,-3.5,sunAltDeg);float shadowTop=max(-sunAltDeg,0.0)+ 0.8;float inShadow=smoothstep(shadowTop + 1.5,shadowTop - 1.5,altDeg)*antiSolar*shadowShow;float beltZ=(altDeg - shadowTop - 5.5)/5.0;float belt=exp(-beltZ*beltZ)*antiSolar*shadowShow;solar=solar*(1.0 - 0.5*inShadow)+ vec3(0.010,0.014,0.030)*inShadow + vec3(0.30,0.13,0.16)*belt*(0.25 + day);return solar;}vec3 skyHazeTint(float X){const vec3 A=vec3(0.0016,0.0024,0.0048);const vec3 L=vec3(0.2126,0.7152,0.0722);vec3 rel=exp(-0.4605*vec3(0.20,0.28,0.45)*(X - 1.0));return rel*(dot(A,L)/dot(rel*A,L));}vec3 skyAirglow(float y){float X=min(airmass(y),6.0);return vec3(0.0016,0.0024,0.0048)*X*skyHazeTint(X);}vec3 airglowGreenLine(float y,float bortle,float sinSunAlt){float s=clamp(y,0.0,1.0);const float Q=0.9850030921459493;const float K=-0.1289447652076666;float seen=exp(K*airmass(s))/sqrt(1.0 - Q*Q*(1.0 - s*s));float excess=max(seen/exp(K*airmass(1.0))- 1.0,0.0);float share=(1.0 - smoothstep(3.0,4.0,bortle))*(1.0 - smoothstep(-0.3090169943749474,-0.20791169081775931,sinSunAlt));return vec3(0.2,1.0,0.0)*(0.0006*excess*share);}vec3 townGlowZenith(float bortle,float sinSunAlt){return vec3(1.71875,1.0,0.4375)*(0.0024*bortleSkyExcess(bortle))*(1.0 - smoothstep(-0.10452846326765346,0.0,sinSunAlt));}vec3 skyRadianceAt(vec3 dir,float bortle,float sinSunAlt,vec3 sunDir,vec4 moon,float aureoles,vec3 zenithSolar){vec3 airglow=skyAirglow(dir.y)+ airglowGreenLine(dir.y,bortle,sinSunAlt);vec3 glow=townGlowZenith(bortle,sinSunAlt)*(0.22 + 0.78*smoothstep(0.55,0.0,dir.y)*lightDomeGain(dir,bortle))/0.22;vec3 solar=modelSolar(dir,sinSunAlt,sunDir,aureoles);float physical=uPhysicalSky*(1.0 - smoothstep(12.0,25.0,degrees(asin(clamp(sunDir.y,-1.0,1.0)))))*(1.0 - eclipseRing());if(physical>0.0&&max(zenithSolar.r,max(zenithSolar.g,zenithSolar.b))>0.0){solar=mix(solar,physicalSkyRelative(dir,sunDir,sunDir.y)*zenithSolar,physical);}solar*=sunRayLight(dir,sunDir);float moonLum=moonlightDisplay(moonlightNanolamberts(dir,moon));float moonNear=smoothstep(0.966,0.9994,dot(dir,moon.xyz));vec3 moonTint=mix(vec3(0.55,0.72,1.0),vec3(1.0,0.96,0.88),moonNear);solar +=moonTint*moonLum;return airglow + glow + solar;}vec3 skyRadiance(vec3 dir,float bortle,float sinSunAlt,vec3 sunDir,vec4 moon,float aureoles){return skyRadianceAt(dir,bortle,sinSunAlt,sunDir,moon,aureoles,modelSolar(vec3(0.0,1.0,0.0),sinSunAlt,sunDir,0.0));}vec3 groundLight(float bortle,float sinSunAlt,vec3 sunDir,vec4 moon){const float TAU=6.28318530718;vec4 noMoon=vec4(moon.xyz,0.0);vec3 low=vec3(0.0),mid=vec3(0.0),high=vec3(0.0);vec3 zenith=modelSolar(vec3(0.0,1.0,0.0),sinSunAlt,sunDir,0.0);for(int i=0;i<8;i++){float az=(float(i)+ 0.5)*TAU/8.0;vec2 h=vec2(-sin(az),cos(az));low +=skyRadianceAt(vec3(h.x*0.9659,0.2588,h.y*0.9659),bortle,sinSunAlt,sunDir,noMoon,0.0,zenith);mid +=skyRadianceAt(vec3(h.x*0.7071,0.7071,h.y*0.7071),bortle,sinSunAlt,sunDir,noMoon,0.0,zenith);high +=skyRadianceAt(vec3(h.x*0.2588,0.9659,h.y*0.2588),bortle,sinSunAlt,sunDir,noMoon,0.0,zenith);}vec3 skyMean=(low + 2.0*mid + high)/32.0;const vec3 albedo=vec3(0.15,0.14,0.11);const float albedoV=0.14;vec3 sun=vec3(1.0,0.93,0.82)*atmosphericTransmission(max(sinSunAlt,0.02))*2.5*max(sinSunAlt,0.0);float moonNL=albedoV*1.0764e6*moon.w*max(moon.y,0.0);vec3 moonDirect=vec3(0.80,0.86,1.0)*moonlightDisplay(moonNL);return albedo*(skyMean*uAtmosphere + sun)+ moonDirect;}void main(){vLight=groundLight(uSky.x,uSky.y,uSun,vec4(0.0));vec3 horizon=normalize(vec3(0.0,0.03,1.0));vec3 unlit=skyRadianceAt(horizon,uSky.x,-1.0,uSun,vec4(0.0),0.0,vec3(0.0));vHaze=max(unlit - skyAirglow(horizon.y)- airglowGreenLine(horizon.y,uSky.x,-1.0),0.0)*uAtmosphere;gl_Position=vec4(vec2(gl_VertexID % 2,gl_VertexID/2)*4.0 - 1.0,0.0,1.0);}","fragment":"#version 300 es\nprecision highp float;uniform vec4 uSky;uniform vec3 uSun;uniform mat3 uCam;uniform vec4 uLens;uniform vec4 uFrame;uniform mat3 uStars;uniform sampler2D uMilkyWay;flat in vec3 vLight;flat in vec3 vHaze;out vec4 fragColor;\n#define uAtmosphere 1.0\n\n#define uGround 1.0\n\n#define uPhysicalSky 0.0\nfloat lightDomeGain(vec3 dir,float bortle){return 1.0;}float eclipseRing(){return 0.0;}vec3 physicalSkyRelative(vec3 dir,vec3 sunDir,float sinSunAlt){return vec3(0.0);}vec3 sunRayLight(vec3 dir,vec3 sunDir){return vec3(1.0);}float moonlightNanolamberts(vec3 dir,vec4 moon){return 0.0;}float airmass(float sinAlt){float s=max(sinAlt,-0.02);return 1.0/(s + 0.025*exp(-11.0*s));}vec3 atmosphericTransmission(float sinAlt){const vec3 k=vec3(0.20,0.28,0.45);float s=mix(sinAlt,abs(sinAlt),1.0 - uGround);return mix(vec3(1.0),exp(-0.921*k*airmass(s)),uAtmosphere);}float daylightMagnitudeLoss(float sinSunAlt){float sunAltDeg=degrees(asin(clamp(sinSunAlt,-1.0,1.0)));float twilight=smoothstep(-18.0,-6.0,sunAltDeg)*3.0;float day=smoothstep(-6.0,1.0,sunAltDeg)*12.0;return(twilight + day)*uAtmosphere;}float bortleSkyMag(float bortle){const float MAG[9]=float[9](21.7,21.6,21.4,21.0,20.0,19.2,18.7,18.2,17.5);float b=clamp(bortle,1.0,9.0)- 1.0;int i=int(min(floor(b),7.0));return mix(MAG[i],MAG[i + 1],b - float(i));}float bortleSkyExcess(float bortle){return pow(10.0,0.4*(21.7 - bortleSkyMag(bortle)))- 1.0;}vec3 nightVision(vec3 rgb,float amount){return mix(rgb,vec3(dot(rgb,vec3(0.299,0.587,0.114)),0.0,0.0),amount);}float moonlightDisplay(float nanolamberts){float lum=0.0016*pow(nanolamberts/71.2,0.68);return lum/(1.0 + lum/0.15);}vec3 modelSolar(vec3 dir,float sinSunAlt,vec3 sunDir,float aureoles){float sunAltDeg=degrees(asin(clamp(sinSunAlt,-1.0,1.0)));if(sunAltDeg<=-18.0)return vec3(0.0);float day=smoothstep(-6.0,3.0,sunAltDeg);float dusk=smoothstep(-18.0,-2.0,sunAltDeg);float cosGamma=dot(dir,sunDir);float rayleigh=0.75*(1.0 + cosGamma*cosGamma);float gammaDeg=degrees(acos(clamp(cosGamma,-1.0,1.0)));float aureole=exp(-gammaDeg/5.0)*0.22*aureoles;vec2 sunBearing=normalize(vec2(sunDir.x,sunDir.z)+ vec2(1e-6));vec2 viewBearing=normalize(vec2(dir.x,dir.z)+ vec2(1e-6));float towardSun=mix(max(dot(sunBearing,viewBearing),0.0),1.0,eclipseRing());vec3 zenithBlue=vec3(0.10,0.22,0.48);vec3 horizonPale=vec3(0.34,0.42,0.56);vec3 daySky=mix(zenithBlue,horizonPale,smoothstep(0.75,0.0,dir.y))*(0.55 + 0.45*rayleigh)+ vec3(0.95,0.80,0.55)*aureole;float band=pow(towardSun,3.0)*smoothstep(0.42,-0.02,dir.y);vec3 twilight=mix(vec3(0.030,0.045,0.105),vec3(0.46,0.21,0.07),band);vec3 solar=daySky*day + twilight*dusk*(1.0 - day)*0.9;float altDeg=degrees(asin(clamp(dir.y,-1.0,1.0)));float awayFromSun=max(-dot(sunBearing,viewBearing),0.0);float antiSolar=awayFromSun*awayFromSun;float shadowShow=smoothstep(2.0,-0.5,degrees(asin(clamp(sunDir.y,-1.0,1.0))))*smoothstep(-8.5,-3.5,sunAltDeg);float shadowTop=max(-sunAltDeg,0.0)+ 0.8;float inShadow=smoothstep(shadowTop + 1.5,shadowTop - 1.5,altDeg)*antiSolar*shadowShow;float beltZ=(altDeg - shadowTop - 5.5)/5.0;float belt=exp(-beltZ*beltZ)*antiSolar*shadowShow;solar=solar*(1.0 - 0.5*inShadow)+ vec3(0.010,0.014,0.030)*inShadow + vec3(0.30,0.13,0.16)*belt*(0.25 + day);return solar;}vec3 skyHazeTint(float X){const vec3 A=vec3(0.0016,0.0024,0.0048);const vec3 L=vec3(0.2126,0.7152,0.0722);vec3 rel=exp(-0.4605*vec3(0.20,0.28,0.45)*(X - 1.0));return rel*(dot(A,L)/dot(rel*A,L));}vec3 skyAirglow(float y){float X=min(airmass(y),6.0);return vec3(0.0016,0.0024,0.0048)*X*skyHazeTint(X);}vec3 airglowGreenLine(float y,float bortle,float sinSunAlt){float s=clamp(y,0.0,1.0);const float Q=0.9850030921459493;const float K=-0.1289447652076666;float seen=exp(K*airmass(s))/sqrt(1.0 - Q*Q*(1.0 - s*s));float excess=max(seen/exp(K*airmass(1.0))- 1.0,0.0);float share=(1.0 - smoothstep(3.0,4.0,bortle))*(1.0 - smoothstep(-0.3090169943749474,-0.20791169081775931,sinSunAlt));return vec3(0.2,1.0,0.0)*(0.0006*excess*share);}vec3 townGlowZenith(float bortle,float sinSunAlt){return vec3(1.71875,1.0,0.4375)*(0.0024*bortleSkyExcess(bortle))*(1.0 - smoothstep(-0.10452846326765346,0.0,sinSunAlt));}vec3 skyRadianceAt(vec3 dir,float bortle,float sinSunAlt,vec3 sunDir,vec4 moon,float aureoles,vec3 zenithSolar){vec3 airglow=skyAirglow(dir.y)+ airglowGreenLine(dir.y,bortle,sinSunAlt);vec3 glow=townGlowZenith(bortle,sinSunAlt)*(0.22 + 0.78*smoothstep(0.55,0.0,dir.y)*lightDomeGain(dir,bortle))/0.22;vec3 solar=modelSolar(dir,sinSunAlt,sunDir,aureoles);float physical=uPhysicalSky*(1.0 - smoothstep(12.0,25.0,degrees(asin(clamp(sunDir.y,-1.0,1.0)))))*(1.0 - eclipseRing());if(physical>0.0&&max(zenithSolar.r,max(zenithSolar.g,zenithSolar.b))>0.0){solar=mix(solar,physicalSkyRelative(dir,sunDir,sunDir.y)*zenithSolar,physical);}solar*=sunRayLight(dir,sunDir);float moonLum=moonlightDisplay(moonlightNanolamberts(dir,moon));float moonNear=smoothstep(0.966,0.9994,dot(dir,moon.xyz));vec3 moonTint=mix(vec3(0.55,0.72,1.0),vec3(1.0,0.96,0.88),moonNear);solar +=moonTint*moonLum;return airglow + glow + solar;}vec3 skyRadiance(vec3 dir,float bortle,float sinSunAlt,vec3 sunDir,vec4 moon,float aureoles){return skyRadianceAt(dir,bortle,sinSunAlt,sunDir,moon,aureoles,modelSolar(vec3(0.0,1.0,0.0),sinSunAlt,sunDir,0.0));}vec3 groundLight(float bortle,float sinSunAlt,vec3 sunDir,vec4 moon){const float TAU=6.28318530718;vec4 noMoon=vec4(moon.xyz,0.0);vec3 low=vec3(0.0),mid=vec3(0.0),high=vec3(0.0);vec3 zenith=modelSolar(vec3(0.0,1.0,0.0),sinSunAlt,sunDir,0.0);for(int i=0;i<8;i++){float az=(float(i)+ 0.5)*TAU/8.0;vec2 h=vec2(-sin(az),cos(az));low +=skyRadianceAt(vec3(h.x*0.9659,0.2588,h.y*0.9659),bortle,sinSunAlt,sunDir,noMoon,0.0,zenith);mid +=skyRadianceAt(vec3(h.x*0.7071,0.7071,h.y*0.7071),bortle,sinSunAlt,sunDir,noMoon,0.0,zenith);high +=skyRadianceAt(vec3(h.x*0.2588,0.9659,h.y*0.2588),bortle,sinSunAlt,sunDir,noMoon,0.0,zenith);}vec3 skyMean=(low + 2.0*mid + high)/32.0;const vec3 albedo=vec3(0.15,0.14,0.11);const float albedoV=0.14;vec3 sun=vec3(1.0,0.93,0.82)*atmosphericTransmission(max(sinSunAlt,0.02))*2.5*max(sinSunAlt,0.0);float moonNL=albedoV*1.0764e6*moon.w*max(moon.y,0.0);vec3 moonDirect=vec3(0.80,0.86,1.0)*moonlightDisplay(moonNL);return albedo*(skyMean*uAtmosphere + sun)+ moonDirect;}vec3 bootTone(vec3 c,float night){float top=mix(1.0,0.5,night);float m=max(c.r,max(c.g,c.b));float knee=0.6*top;if(m<=knee)return c;float span=top - knee;return c*((knee + span*(1.0 - exp(-(m - knee)/span)))/m);}vec3 bootMilkyWay(vec3 world){vec3 d=world*uStars;vec2 at=vec2(mod(0.5 - atan(-d.z,d.x)/6.283185307179586,1.0),0.5 - asin(clamp(d.y,-1.0,1.0))/3.141592653589793);vec3 col=max(texture(uMilkyWay,at).rgb - 0.0051,0.0);float plate=dot(col,vec3(0.2126,0.7152,0.0722));col=max(mix(vec3(plate),col,0.25),0.0)*0.39788079470198673;float contrast=plate*24.172185430463575/(1.0 + bortleSkyExcess(uSky.x));col*=max(smoothstep(0.3,0.42,contrast),0.02);col*=atmosphericTransmission(world.y)*smoothstep(-0.02,0.05,world.y);return col*clamp(1.0 - daylightMagnitudeLoss(uSky.y)/2.5,0.0,1.0);}float skyline(float a){return max(0.25,1.5 + 1.15*sin(a*2.0 + 1.2)+ 0.7*sin(a*4.0 + 0.4)+ 0.45*sin(a*7.0 + 2.1)+ 0.25*sin(a*13.0 + 2.8)+ 0.12*sin(a*23.0 + 4.1));}void main(){vec2 p=(gl_FragCoord.xy - 0.5*uFrame.xy)/uLens.x;float t=length(p);float theta=uLens.y>0.5?2.0*atan(t*uLens.z):atan(t);vec3 dir=vec3(t>0.0?p/t*sin(theta):vec2(0.0),-cos(theta))*uCam;float y=dir.y;float px=length(vec2(dFdx(y),dFdy(y)));float css=px*uLens.w;float alt=degrees(asin(clamp(y,-1.0,1.0)));float land=clamp((mod(uFrame.w,2.0)>0.5?skyline(atan(dir.x,dir.z))- alt:-alt)/degrees(px)+ 0.5,0.0,1.0);float through=exp(-1.2*(1.0 - smoothstep(0.0,0.02,-y))*uAtmosphere);vec3 ground=vLight*through + vHaze*(1.0 - through);float az=atan(-dir.x,dir.z);float n=floor(az/0.39269908169872414 + 0.5);float q=n*0.39269908169872414;bool cardinal=mod(n,4.0)<0.5;float drop=radians((cardinal?0.03:0.015)*uFrame.z);float tick=(cardinal?0.8:0.55)*clamp(1.1 - abs(dir.x*cos(q)+ dir.z*sin(q))/css,0.0,1.0)*step(-drop,radians(alt))*step(y,0.0);float ink=step(1.5,uFrame.w)*max(0.5*clamp(1.1 - abs(y)/css,0.0,1.0),tick);vec3 over=vec3(0.3049873140591091,0.6795424696265424,0.3139887133649649)*ink + ground*land*(1.0 - ink);float cover=ink + land*(1.0 - ink);if(uSky.w>0.5&&cover<=0.0)discard;vec3 rgb=uSky.w>0.5?over/cover:over +(skyRadiance(dir,uSky.x,uSky.y,uSun,vec4(0.0),1.0)*uAtmosphere + bootMilkyWay(dir))*(1.0 - cover);rgb=clamp(bootTone(nightVision(rgb,uSky.z),uSky.z),0.0,1.0);vec3 srgb=mix(rgb*12.92,1.055*pow(rgb,vec3(1.0/2.4))- 0.055,step(0.0031308,rgb));fragColor=uSky.w>0.5?vec4(srgb*cover,cover):vec4(srgb,1.0);}","ink":[1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,0.5,0.5,0.5,0.5,0.5,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1,1,1,1,1,1,1,1,1,1,1,1,1,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1.5625,1.5625,1.5625,1.5625,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.5,0.5,0.5,0.5,0.5,0.5,0.5,1,1,1,1,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,1,1,1,1,1,1,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,1.5625,1.5625,0.5,0.5,0.5,0.5,0.5,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1,1,1,1,1,0.5,0.5,0.5,0.5,0.5,0.5,0.5,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.5,0.5,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.5,0.5,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.5,0.5,0.5,0.5,0.5,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.5,0.5,0.5,0.5,0.5,0.5,0.5,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.5,0.5,0.5,0.5,0.5,0.5,0.5,1,1,1,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,0.5,0.5,0.5,0.5,1,1,1,1,1,1,1,1,1,1,1,1,1,0.5,0.5,0.5,0.5,0.5,0.5,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,0.5,0.5,1,1,1,1,1,1,1,0.5,0.5,0.5,0.5,0.5,0.5,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1.5625,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.5,0.5,0.5,0.5,0.5,0.5,0.5]}