0x1808…0434

All memos sent from and to 0x1808…0434.

"'+r+'mm" viewBox="0 0 '+P+" "+V+'">'+a.join("")+"</svg>",c=new Blob([s],{type:"image@!+xml;charset=utf-8"}),f=URL.crea("a");u.href=f,u.download="zig-zag-plotter-"+tokenData.hash+". body.appendChild(u wSVG export saved.")}function nn(e){return Number(e.toFixed(2)Canvas(L,W),redraw()}
!function(){if("undefined"==typeof document)return;const e=("style");e.textCont <="html,body{width:100%;heightmargin:0;padding display:flex;justify +`s:c x er;align-itemshead.appendChild(e)}() lowp float;\r\nattribute vec3 auniform sampler2D geometryBuff!(12.9898, 4.1414))@warpDetailLevel ## stK: (i(t,r),-1,2 (!Number.isFin<*l=TWO_PI/a,s=atan2 f o?0:i/o,b:o,a:r" e=/^0x[0-9a-fA-F]{64}$/>? URLSearchParams(e.test(t||"")?t:nfined"!=typeof tokenD$0)/4294967296};+S10,20,50],diro0scent",2:"confetti",3&R ,f?(h+=i*l/s,m@e,re,oe,ie,ae,le,se,ce,fe,ue,de,0bf : ;u*u+d*d<=a [!& n^=t.charCodeA@=%p5||p5.VERSION!==Ke=AB_CONFIG.rSeed,sortOrder","backToFroKs let s='<svg xmlns="http://www.w3 .org/2000/ !
This project is an evolution on, and merging of a few of my prior works. With *Comets at Dawn* I used attracting and repelling forces to shape a vector field, then let many thousands of particles move through that field, and leave marks as they went. Separately, for *Eucalyptus and Sagebrush*, *Sunset from the Bluffs*, and *Hello Modulo* I developed a rendering style that mimics some aspects of crayons/pencils/etc. I brought those two things together for this work, and iterated further. Bringing in the concept of shape packing, I limited how far any particle can travel in the vector field depending on whether other particles had already been there. As the particles move, they draw paths formed of many small rectangles attached end to end. Interestingly, as I looked through hundreds of outputs, I started seeing recognizable scenes and objects emerging from the abstract marks. A bit like a Rorschach test, different people looking at the images saw different things. I hope you enjoy *In the Current*, and be sure to look deeper than the surface to see what forms appear to you. Nat Sarkissian
Segments;_++){let $=map(_,0,e.xSegments,e.xMinExtent,e.xMaxExtent),i=map(_+1,0,e.xSegments,e.xMinExtent,e.xMaxExtent);for(let n=0;n<e.ySegments;n++){let a=map(n,0,e.ySegments,e.yMinExtent,e.yMaxExtent),r=map(n+1,0,e.ySegments,e.yMinExtent,e.yMaxExtent),s=t(a,-0,1.01),l=t(r,-0,1.01),o=dist($*s,a-.5,0,0),h=dist($*l,r-.5,0,0),p=dist(i*l,r-.5,0,0),f=dist(i*s,a-.5,0,0),u=-t(o,-.775,.775),d=-t(h,-.775,.775),c=-t(p,-.775,.775),g=-t(f,-.775,.775),m=_createV($*s,-a,u+.8),v=_createV($*l,-r,d+.8),x=_createV(i*l,-r,c+.8),b=_createV(i*s,-a,g+.8),S=_copyV(m),y=_copyV(v),w=_copyV(x),z=_copyV(b);for(let k=0;k<e.transforms.length;k++){let P=e.transforms[k];"t"==P.type?(S=_add(S,P.val),y=_add(y,P.val),w=_add(w,P.val),z=_add(z,P.val)):"s"==P.type?(S=_mult(S,P.val),y=_mult(y,P.val),w=_mult(w,P.val),z=_mult(z,P.val)):"r"==P.type&&(S=_rotate(S,P.val.x,P.val.y,P.val.z),y=_rotate(y,P.val.x,P.val.y,P.val.z),w=_rotate(w,P.val.x,P.val.y,P.val.z),z=_rotate(z,P.val.x,P.val.y,P.val.z))}let B=[_3dTo2d(S),_3dTo2d(y),_3dTo2d(w),_3dTo2d(z),],V=_normalize(triNorm(S,w,z)),M=-_dot(V,lightDir),T=norm(M,-1,1),W=new _Shape(!0);W.setPoints(B),W.zIndex=min(min(min(S.z,z.z),w.z),y.z),W.fill=paletteLerp(e.palette,doubleExponentialSigmoid(lerp(T,e.br,e.brLerp),e.constrast),!0),e.drawPolygonLines&&(W.stroke=paletteLerp(e.palette,0,!0)),W.strokeWeight=1,W.nHashesMult=.8,W.nSegments=4,W.hashWeight=1.5,W.occlude=!0,W.scaleAmt=0,W.wobbleAmt=0,booleanShapes.push(W)}}}function grassShape(e){let t=_3dTo2d(e.pos),_=[],$=(2*fractalNoise({x:.005*e.pos.x,y:0,z:.02*e.pos.z,nOctaves:3,scaleFallout:2,weightFallout:.8})-1)*PI/3+random(-1,1)*PI/32;_.push(_add(_rotate(_mult(_createV(-1,0),e.scale),0,0,$),t)),_.push(_add(_rotate(_mult(_createV(0,-1),e.scale),0,0,$),t)),_.push(_add(_rotate(_mult(_createV(1,0),e.scale),0,0,$),t));let i=map(fractalNoise({x:.005*e.pos.x+532,y:0,z:.01*e.pos.z-54323,nOctaves:3,scaleFallout:2,weightFallout:.5}),0,1,3,6),n=new _Shape(!0);n.setPoints(_),n.zIndex=e.pos.z,n.fill=paletteLerp(e.palette,e.br,!1),n.strokeWeight=1,n.nHashesMult=.5,n.hashWeight=1.5,n.occlude=!0,n.scaleAmt=i,n.wobbleAmt=2,booleanShapes.push(n)}let shapeIndex=0,hashIndex=0,bgHashIndex=0,layerCount=0;function draw(){if(saving)++saveTime>80&&(shapes=null,window.location.reload(),noLoop());else{if(background(200),"texture"==renderMode&&geometryBuffer.clear(),geometryBuffer.push(),geometryBuffer.scale(sizeAdjust,sizeAdjust),geometryBuffer.translate(targetSzX/2,targetSzY/2),geometryBuffer.fill(255,0,0),bgHashes&&bgHashIndex<bgHashes.length){blendShader.setUniform("u1",.5),crayonShader.setUniform("u2",.4);let e=0;for(let t=bgHashIndex;t<min(bgHashIndex+200,bgHashes.length);t++){for(geometryBuffer.noStroke();bgHashes[t].hidden;)e++;geometryBuffer.fill(bgHashes[t].fill),"texture"==renderMode&&bgHashes[t].wobbleAndScale(10,0),drawStroke(bgHashes[t],bgHashes[t].hashWeight,geometryBuffer,!0),e++}bgHashIndex+=e,geometryBuffer.colorMode(RGB,255)}else if(booleanShapes&&shapeIndex<booleanShapes.length){bgHashes=null;let _=0;for(let $=shapeIndex;$<min(shapeIndex+500,booleanShapes.length);$++){for(;booleanShapes[$].points.length<=1;)_++;booleanShapes[$].hidden||(geometryBuffer.noStroke(),void 0!=booleanShapes[$].stroke&&(geometryBuffer.fill(booleanShapes[$].stroke),-1e13==booleanShapes[$].zIndex&&print(booleanShapes[$]),drawStroke(booleanShapes[$],booleanShapes[$].strokeWeight,geometryBuffer))),_++}shapeIndex+=_}else if(hashes&&hashIndex<hashes.length){booleanShapes=null;let i=0;for(let n=hashIndex;n<min(hashIndex+1e3,hashes.length);n++){geometryBuffer.noStroke();for(let a=0;a<hashes[n].length;a++){geometryBuffer.fill(hashes[n][a].fill);let r=hashes[n].scaleAmt,s=hashes[n].wobbleAmt;hashes[n][a].wobbleAndScale(s,r),drawStroke(hashes[n][a],hashes[n][a].strokeWeight,geometryBuffer,!0)}i++}hashIndex+=i,geometryBuffer.colorMode(RGB,255)}else layerCount<2&&"texture"==renderMode?(hashIndex=0,layerCount++):(hashes=null,print("done"),saveMode?(doDownload=!0,saving=!0):noLoop());geometryBuffer.pop(),crayonBuffer.clear(),crayonBuffer.shader(crayonShader),crayonShader.setUniform("u3",geometryBuffer),crayonShader.setUniform("u4",[frameCount*(frameCount%20==0?0:1),(frameCount+5)*((frameCount+5)%20==0?0:1)]),crayonShader.setUniform("u5",[width,height]),crayonBuffer.rect(-crayonBuffer.width/2,-crayonBuffer.height/2,crayonBuffer.width,crayonBuffer.height),drawnBuffer.shader(blendShader),blendShader.setUniform("u6",drawnBuffer),blendShader.setUniform("u7",crayonBuffer),drawnBuffer.rect(-drawnBuffer.width/2,-drawnBuffer.height/2,drawnBuffer.width,drawnBuffer.height),bgHashes&&bgHashIndex>=bgHashes.length&&(blendShader.setUniform("u1",.9),crayonShader.setUniform("u2",.3)),background(200),"texture"==renderMode?image(drawnBuffer,0,0):image(geometryBuffer,0,0),doDownload&&(print("Saving"),saveCanvas(rSeed+"_"+nSeed,"png"),doDownload=!1)}}function ball(e){for(let t=0;t<e.nPetals;t++)cupShape({xSegments:5,ySegments:5,transforms:[{type:"t",val:_createV(0,0,-.04)},{type:"s",val:_createV(e.scl,e.scl,e.scl)},{type:"s",val:_scalarMult(e.flowerProportions,e.flowerScale)},{type:"r",val:_createV(0,map(t,0,e.nPetals,0,TAU),0)},{type:"r",val:e.flowerRotation},{type:"t",val:e.flowerTranslation}],xMinExtent:-e.xExtents,xMaxExtent:e.xExtents,yMinExtent:0,yMaxExtent:1,palette:e.palette,br:e.br,brLerp:.5,contrast:0,drawPolygonLines:!0})}
let f=_rotate(_createV(0,map(p,0,this.hPoints,this.h,0)),0,0,n);f.x+=this.x,f.y+=this.y,this.points.push(f),this.lineSegVis.push(!0)}this.calculateBoundingBox()}}function sqr(e){return e*e}function dist2(e,t){return sqr(e.x-t.x)+sqr(e.y-t.y)}function distToSegmentSquared(e,t,_){var $=dist2(t,_);if(0==$)return dist2(e,t);var i=((e.x-t.x)*(_.x-t.x)+(e.y-t.y)*(_.y-t.y))/$;return i=Math.max(0,Math.min(1,i)),dist2(e,{x:t.x+i*(_.x-t.x),y:t.y+i*(_.y-t.y)})}function distToSegment(e,t,_){return Math.sqrt(distToSegmentSquared(e,t,_))}class _WeightedLine extends _Rect{constructor(e,t,_,$,i,n){let a;super(e,t,dist(e,t,_,$),i,n,atan2($-t,_-e)),this.a=_createV(e,t),this.b=_createV(_,$),this.dir=_sub(this.b,this.a),this.centerOffset=_rotate(_setMag(this.dir,i/2),0,0,PI/2),this.lengthOffset=_setMag(this.dir,10),this.a=_add(this.a,this.centerOffset),this.b=_add(this.b,this.centerOffset),this.wt=i}pointInside(e){return distToSegment(e,_sub(this.a,this.lengthOffset),_add(this.b,this.lengthOffset))<.5*this.wt}}class _Ellipse extends _Shape{constructor(e,t,_,$,i,n){super(!0),this.x=e,this.y=t,this.w=_,this.h=$,this.nPoints=n;for(let a=0;a<this.nPoints;a++){let r=map(a,0,this.nPoints,0,TAU),s=this.w*cos(r),l=this.h*sin(r),o=_rotate(_createV(s,l),0,0,i);o.x+=this.x,o.y+=this.y,this.points.push(o),this.lineSegVis.push(!0)}this.calculateBoundingBox()}}let petalPalette,stemPalette,leafPalette,grassPalette,petalColor,lightPalette;function pickPalette(e){if(print("palette",e),1==e){petalPalette=[[color("#386270"),color("#7d8cb5"),color("#cda7e4"),color("#ec8880"),color("#f79c66"),color("#f8efaf"),],[color("#386270"),color("#799f89"),color("#cda7e4"),color("#fde6d7"),color("#e1f4fd"),]],stemPalette=[color("#354e6f"),color("#4a887a"),color("#799f89"),color("#f8efaf"),];let t=color("#223f6a"),_=color("#3e6d95"),$=color("#99bfbf"),i=color("#e2dd7a");leafPalette=[t,t,_,_,_,$,$,i,i,color("#ffdf5e"),],grassPalette=[color("#354e6f"),color("#7d8cb5"),color("#799f89"),color("#ca830b"),color("#ec8880"),color("#f7c066"),color("#efdb50"),color("#efc9d7"),color("#f8efaf"),],lightPalette=[color("#1a172f"),color("#29264E"),color("#354e6f"),color("#efdb50"),color("#efc9d7"),color("#f8efaf"),]}else if(2==e){petalPalette=[[color("#47448a"),color("#f7ae06"),color("#f5c607"),color("#fadf47"),color("#fbe773"),]],stemPalette=[color("#624835"),color("#926b50"),color("#ab8263"),color("#b997b6"),color("#d5b67b"),];let n=color("#547666"),a=color("#577769"),r=color("#7ba488"),s=color("#ece980");leafPalette=[n,n,n,a,a,r,r,r,s,s,],grassPalette=[color("#577769"),color("#4b837a"),color("#4b837a"),color("#5277cf"),color("#92bc63"),color("#91d2a6"),color("#d6dd42"),color("#d6dd42"),color("#ece980"),color("#ece980"),]}else if(4==e){petalPalette=[[color("#300a0d"),color("#f2520d"),color("#f1960e"),color("#f3cc54"),color("#f8de8f"),color("#faeab8"),],[color("#324578"),color("#dcc1ff"),color("#fdd9fa"),color("#feffe1"),color("#fdf7e1"),]],stemPalette=[color("#1f3630"),color("#839f63"),color("#9ea859"),];let l=color("#4f7442"),o=color("#9fca75"),h=color("#efdd61");leafPalette=[color("#1f3630"),color("#1f3630"),l,l,o,o,color("#bad06f"),h,h,];let p=color("#f3d354");grassPalette=[color("#3e446c"),color("#4b7a67"),color("#406cbf"),color("#d6967c"),color("#f1ad0e"),p,p,p,color("#ece3bb"),]}}function paletteLerp(e,t,_){if(_){let $=floor(map(t,0,1,0,e.length-1)),i;i=$+1;let n=e[constrain($,0,e.length-1)],a=e[constrain(i,0,e.length-1)];return lerpColor(n,a,t*(e.length-1)-$)}{let r=floor(map(t,0,1,0,e.length-1));return e[constrain(r,0,e.length-1)]}}function prepHeightmap(){noiseDetail(1,.25);let e=.006*1.5*(targetSzX/600);for(let t=0;t<mapW;t++){let _=[];for(let $=0;$<mapH;$++){let i=pow(map($,0,mapH,0,1),2)*map(pow(1*fractalNoise({x:t*e*2.5,y:0,z:$*e*5,nOctaves:2,scaleFallout:2,weightFallout:.5}),1),0,1,0,1);_.push(doubleExponentialSigmoid(i,0))}terrainHt.push(_)}for(let n=0;n<mapW-1;n++){let a=[],r=[];for(let s=0;s<mapH-1;s++){let l=_normalize(_createV(terrainHt[n+1][s]-terrainHt[n][s],0,terrainHt[n][s+1]-terrainHt[n][s]));r.push(l),a.push(map(-_dot(l,lightDir),-1,1,.9,1))}lightMap.push(a),terrainNorm.push(r)}noiseDetail(3,.5)}function heightMap(e,t){let _=constrain(floor(map(e,-(1.2*targetSzX)/2,1.2*targetSzX/2,0,mapW)),0,mapW-1),$=constrain(floor(map(t,-maxZ,maxZ,0,mapH)),0,mapH-1);return -500*terrainHt[_][$]}function terrainLight(e,t){let _=floor(map(e,-(1.2*targetSzX)/2,1.2*targetSzX/2,0,mapW)),$=floor(map(t,-maxZ,maxZ,0,mapH));return _>=0&&_<=mapW-2&&$>=0&&$<=mapH-2?lightMap[_][$]:1}function setTerrainLight(e,t,_){let $=floor(map(e,-(1.2*targetSzX)/2,1.2*targetSzX/2,0,mapW)),i=floor(map(t,-maxZ,maxZ,0,mapH));$>=0&&$<=mapW-2&&i>=0&&i<=mapH-2&&(lightMap[$][i]=_)}function placeShadow(e,t,_,$){for(let i=-_;i<=_;i++)for(let n=-(1*_);n<=1*_;n++){let a=sq(i)+sq(n/1),r=sq(_);a<r&&setTerrainLight(i+e,n+t,max(0,terrainLight(i+e,n+t)-map(a,0,r,$,0)))}}let saveMode=!1,saving=!1,saveTime=0,doDownload=!1,canv,targetSzX,targetSzY,heightToWidth=.8,sizeAdjust,mag=1,canvSzX,canvSzY,margin=0,booleanShapes=[],hashes=[],bgHashes=[],maxZ=2e3,terrainHt=[],lightMap=[],terrainNorm=[],mapW=100,mapH=175,slopeDir,lightAngle,lightDir,lightLeftRight,toEye,crayonShader,blendShader,geometryBuffer,crayonBuffer,drawnBuffer,renderMode="texture",unionBuffer=[],unionBufferW,unionBufferH,bgColor,vertShader="precision lowp float;varying vec2 var;attribute vec3 aPosition;attribute vec2 aTexCoord;void main(){var=aTexCoord;vec4 v=vec4(aPosition,1);v.xy=v.xy*2.-1.;gl_Position=v;}",crayonFragShader="precision highp float;varying vec2 var;uniform sampler2D u3;uniform vec2 u4,u5;uniform float u2;float v(float v,float u){return u+v*(1.-u);}float v(vec2 u){return fract(sin(dot(u,vec2(12.9898,4.1414)))*43758.5453);}float u(vec2 u){u*=vec2(1,u5.y/u5.x);vec2 w=floor(u+u4);u=fract(u+u4);u=u*u*(3.-2.*u);float f=mix(mix(v(w),v(w+vec2(1,0)),u.x),mix(v(w+vec2(0,1)),v(w+vec2(1)),u.x),u.y);return f*f;}void main(){vec2 w=vec2(v(var.x,-1.),v(var.y,-1.));vec3 f=vec3(5e-4,.00025,0);float z=(v(u(w*4e2),0.)+v(u(w*8e2),0.)*.5+v(u(w*1600.),0.)*.25)/1.75,x=u(w*50.)*3.14159*2.;vec4 m=texture2D(u3,var+vec2(cos(x),sin(x))*5e-4),r;if(m.w==0.)r=vec4(0);else r.xyz=m.xyz,r.w=m.w,r.w*=step(.6,v(1.-z,u2));r.w*=v(pow((texture2D(u3,var+f.xz).w+texture2D(u3,var-f.xz).w+texture2D(u3,var+f.zy).w+texture2D(u3,var-f.zy).w)/4.,.2),.8);gl_FragColor=r;}",blendFragShader=`precision highp float;varying vec2 var;uniform sampler2D u6,u7;uniform float u1; #ifndef SPECTRAL #define SPECTRAL float v(float v){return v<.04045?v/12.92:pow((v+.055)/1.055,2.4);}float f(float v){return v<.0031308?v*12.92:1.055*pow(v,1./2.4)-.055;}vec3 w(vec3 f){return vec3(v(f[0]+.01),v(f[1]+.01),v(f[2]+.01));}vec3 t(vec3 v){return clamp(vec3(f(v[0]-.01),f(v[1]-.01),f(v[2]-.01)),0.,1.);}void f(vec3 v,inout float f[7]){f[0]=0.;f[1]=0.;f[2]=0.;f[3]=0.;f[4]=0.;f[5]=0.;f[6]=0.;if(v[0]<=v[1]&&v[0]<=v[2]){f[0]=v[0];if(v[1]<=v[2])f[1]=v[1]-v[0],f[6]=v[2]-v[1];else f[1]=v[2]-v[0],f[5]=v[1]-v[2];}else if(v[1]<=v[0]&&v[1]<=v[2]){f[0]=v[1];if(v[0]<=v[2])f[2]=v[0]-v[1],f[6]=v[2]-v[0];else f[2]=v[2]-v[1],f[4]=v[0]-v[2];}else if(v[2]<=v[0]&&v[2]<=v[1]){f[0]=v[2];if(v[0]<=v[1])f[3]=v[0]-v[2],f[5]=v[1]-v[0];else f[3]=v[1]-v[2],f[4]=v[0]-v[1];}}void t(vec3 v,inout float i[38]){float p[7];f(v,p);i[0]=p[0]+p[1]*.96853629+p[2]*.51567122+p[3]*.02055257+p[4]*.03147571+p[5]*.49108579+p[6]*.97901834;i[1]=p[0]+p[1]*.96855103+p[2]*.5401552+p[3]*.02059936+p[4]*.03146636+p[5]*.46944057+p[6]*.97901649;i[2]=p[0]+p[1]*.96859338+p[2]*.62645502+p[3]*.02062723+p[4]*.03140624+p[5]*.4016578+p[6]*.97901118;i[3]=p[0]+p[1]*.96877345+p[2]*.75595012+p[3]*.02073387+p[4]*.03119611+p[5]*.2449042+p[6]*.97892146;i[4]=p[0]+p[1]*.96942204+p[2]*.92826996+p[3]*.02114202+p[4]*.03053888+p[5]*.0682688+p[6]*.97858555;i[5]=p[0]+p[1]*.97143709+p[2]*.97223624+p[3]*.02233154+p[4]*.02856855+p[5]*.02732883+p[6]*.97743705;i[6]=p[0]+p[1]*.97541862+p[2]*.98616174+p[3]*.02556857+p[4]*.02459485+p[5]*.013606+p[6]*.97428075;i[7]=p[0]+p[1]*.98074186+p[2]*.98955255+p[3]*.03330189+p[4]*.0192952+p[5]*.01000187+p[6]*.96663223;i[8]=p[0]+p[1]*.98580992+p[2]*.98676237+p[3]*.05185294+p[4]*.01423112+p[5]*.01284127+p[6]*.94822893;i[9]=p[0]+p[1]*.98971194+p[2]*.97312575+p[3]*.10087639+p[4]*.01033111+p[5]*.02636635+p[6]*.89937713;i[10]=p[0]+p[1]*.99238027+p[2]*.91944277+p[3]*.24000413+p[4]*.00765876+p[5]*.07058713+p[6]*.76070164;i[11]=p[0]+p[1]*.99409844+p[2]*.32564851+p[3]*.53589066+p[4]*.00593693+p[5]*.70421692+p[6]*.4642044;i[12]=p[0]+p[1]*.995172+p[2]*.13820628+p[3]*.79874659+p[4]*.00485616+p[5]*.85473994+p[6]*.20123039;i[13]=p[0]+p[1]*.99576545+p[2]*.05015143+p[3]*.91186529+p[4]*.00426186+p[5]*.95081565+p[6]*.08808402;i[14]=p[0]+p[1]*.99593552+p[2]*.02912336+p[3]*.95399623+p[4]*.00409039+p[5]*.9717037+p[6]*.04592894;i[15]=p[0]+p[1]*.99564041+p[2]*.02421691+p[3]*.97137099+p[4]*.00438375+p[5]*.97651888+p[6]*.02860373;i[16]=p[0]+p[1]*.99464769+p[2]*.02660696+p[3]*.97939505+p[4]*.00537525+p[5]*.97429245+p[6]*.02060067;i[17]=p[0]+p[1]*.99229579+p[2]*.03407586+p[3]*.98345207+p[4]*.00772962+p[5]*.97012917+p[6]*.01656701;i[18]=p[0]+p[1]*.98638762+p[2]*.04835936+p[3]*.98553736+p[4]*.0136612+p[5]*.9425863+p[6]*.01451549;i[19]=p[0]+p[1]*.96829712+p[2]*.0001172+p[3]*.98648905+p[4]*.03181352+p[5]*.99989207+p[6]*.01357964;i[20]=p[0]+p[1]*.89228016+p[2]*8.554e-5+p[3]*.98674535+p[4]*.10791525+p[5]*.99989891+p[6]*.01331243;i[21]=p[0]+p[1]*.53740239+p[2]*.85267882+p[3]*.98657555+p[4]*.46249516+p[5]*.13823139+p[6]*.01347661;i[22]=p[0]+p[1]*.15360445+p[2]*.93188793+p[3]*.98611877+p[4]*.84604333+p[5]*.06968113+p[6]*.01387181;i[23]=p[0]+p[1]*.05705719+p[2]*.94810268+p[3]*.98559942+p[4]*.94275572+p[5]*.05628787+p[6]*.01435472;i[24]=p[0]+p[1]*.03126539+p[2]*.94200977+p[3]*.98507063+p[4]*.96860996+p[5]*.06111561+p[6]*.01479836;i[25]=p[0]+p[1]*.02205445+p[2]*.91478045+p[3]*.98460039+p[4]*.97783966+p[5]*.08987709+p[6]*.0151525;i[26]=p[0]+p[1]*.01802271+p[2]*.87065445+p[3]*.98425301+p[4]*.98187757+p[5]*.13656016+p[6]*.01540513;i[27]=p[0]+p[1]*.0161346+p[2]*.78827548+p[3]*.98403909+p[4]*.98377315+p[5]*.22169624+p[6]*.01557233;i[28]=p[0]+p[1]*.01520947+p[2]*.65738359+p[3]*.98388535+p[4]*.98470202+p[5]*.32176956+p[6]*.0156571;i[29]=p[0]+p[1]*.01475977+p[2]*.59909403+p[3]*.98376116+p[4]*.98515481+p[5]*.36157329+p[6]*.01571025;i[30]=p[0]+p[1]*.01454263+p[2]*.56817268+p[3]*.98368246+p[4]*.98537114+p[5]*.4836192+p[6]*.01571916;i[31]=p[0]+p[1]*.01444459+p[2]*.54031997+p[3]*.98365023+p[4]*.98546685+p[5]*.46488579+p[6]*.01572133;i[32]=p[0]+p[1]*.01439897+p[2]*.52110241+p[3]*.98361309+p[4]*.98550011+p[5]*.47440306+p[6]*.01572502;i[33]=p[0]+p[1]*.0143762+p[2]*.51041094+p[3]*.98357259+p[4]*.98551031+p[5]*.4857699+p[6]*.01571717;i[34]=p[0]+p[1]*.01436343+p[2]*.50526577+p[3]*.98353856+p[4]*.98550741+p[5]*.49267971+p[6]*.01571905;i[35]=p[0]+p[1]*.01435687+p[2]*.5025508+p[3]*.98351247+p[4]*.98551323+p[5]*.49625685+p[6]*.01571059;i[36]=p[0]+p[1]*.0143537+p[2]*.50126452+p[3]*.98350101+p[4]*.98551563+p[5]*.49807754+p[6]*.01569728;i[37]=p[0]+p[1]*.01435408+p[2]*.50083021+p[3]*.98350852+p[4]*.98551547+p[5]*.49889859+p[6]*.0157002;}vec3 x(vec3 f){mat3 p;p[0]=vec3(3.24306333,-1.53837619,-.49893282);p[1]=vec3(-.96896309,1.87542451,.04154303);p[2]=vec3(.05568392,-.20417438,1.05799454);float v=dot(p[0],f),i=dot(p[1],f),r=dot(p[2],f);return t(vec3(v,i,r));}vec3 p(float p[38]){return vec3(0)+p[0]*vec3(6.469e-5,1.84e-6,.00030502)+p[1]*vec3(.00021941,6.21e-6,.00103681)+p[2]*vec3(.00112057,3.101e-5,.00531314)+p[3]*vec3(.00376661,.00010475,.01795439)+p[4]*vec3(.01188055,.00035364,.05707758)+p[5]*vec3(.02328644,.00095147,.11365162)+p[6]*vec3(.03455942,.00228226,.17335873)+p[7]*vec3(.03722379,.00420733,.19620658)+p[8]*vec3(.03241838,.0066888,.18608237)+p[9]*vec3(.02123321,.0098884,.13995048)+p[10]*vec3(.01049099,.01524945,.08917453)+p[11]*vec3(.00329584,.02141831,.04789621)+p[12]*vec3(.00050704,.03342293,.02814563)+p[13]*vec3(.00094867,.05131001,.01613766)+p[14]*vec3(.00627372,.07040208,.0077591)+p[15]*vec3(.01686462,.08783871,.00429615)+p[16]*vec3(.02868965,.09424905,.00200551)+p[17]*vec3(.04267481,.09795667,.00086147)+p[18]*vec3(.05625475,.09415219,.00036904)+p[19]*vec3(.0694704,.08678102,.00019143)+p[20]*vec3(.08305315,.07885653,.00014956)+p[21]*vec3(.0861261,.0635267,9.231e-5)+p[22]*vec3(.09046614,.05374142,6.813e-5)+p[23]*vec3(.08500387,.04264606,2.883e-5)+p[24]*vec3(.07090667,.03161735,1.577e-5)+p[25]*vec3(.05062889,.02088521,3.94e-6)+p[26]*vec3(.03547396,.01386011,1.58e-6)+p[27]*vec3(.02146821,.00810264,0)+p[28]*vec3(.01251646,.0046301,0)+p[29]*vec3(.00680458,.00249138,0)+p[30]*vec3(.00346457,.0012593,0)+p[31]*vec3(.00149761,.00054165,0)+p[32]*vec3(.0007697,.00027795,0)+p[33]*vec3(.00040737,.00014711,0)+p[34]*vec3(.00016901,6.103e-5,0)+p[35]*vec3(9.522e-5,3.439e-5,0)+p[36]*vec3(4.903e-5,1.771e-5,0)+p[37]*vec3(2e-5,7.22e-6,0);}float f(float v,float p,float f){p*=pow(f,2.);return p/(v*pow(1.-f,2.)+p);}vec3 p(vec3 v,vec3 i,float r){float u[38],m[38];t(w(v),u);t(w(i),m);float S=p(u)[1],z=p(m)[1];r=f(S,z,r);float e[38];for(int i=0;i<38;i++){float p=(1.-r)*(pow(1.-u[i],2.)/(2.*u[i]))+r*(pow(1.-m[i],2.)/(2.*m[i]));e[i]=1.+p-sqrt(pow(p,2.)+2.*p);}return x(p(e));}vec4 p(vec4 v,vec4 f,float i){return vec4(p(v.xyz,f.xyz,i),mix(v.w,f.w,i));} #endif void main(){vec4 v=texture2D(u6,vec2(var.x,1.+var.y*-1.)),f=texture2D(u7,var),i,r=p(v,f,f.w);i=mix(v*mix(vec4(1),f,u1),r,.2);gl_FragColor=i;}`,rSeed,nSeed,sNoise;function setup(){rSeed=round(random(1e7)),nSeed=round(random(1e7));let e,t=[{rSeed:8077733,nSeed:4239393},{rSeed:6335389,nSeed:7709717},{rSeed:6711193,nSeed:8046416,paletteOverride:2},{rSeed:6862698,nSeed:8114669},{rSeed:7897312,nSeed:3981128},{rSeed:9340939,nSeed:9852448,paletteOverride:2},{rSeed:7589951,nSeed:9385453},{rSeed:4526625,nSeed:6452396},{rSeed:7838216,nSeed:8818273},{rSeed:7882561,nSeed:1244},{rSeed:7732610,nSeed:8393707}][parseInt(tokenData.tokenId)%1e6];rSeed=t.rSeed,nSeed=t.nSeed;let _=t.paletteOverride;sNoise=new openSimplexNoise(nSeed),print(rSeed,nSeed),randomSeed(rSeed),noiseSeed(nSeed),prepareCanvas(1e3),background(200),geometryBuffer=createGraphics(canvSzX,canvSzY),drawnBuffer=createGraphics(canvSzX,canvSzY,WEBGL),crayonBuffer=createGraphics(canvSzX,canvSzY,WEBGL),geometryBuffer.background(color("#d0c6b9")),drawnBuffer.background(color("#b0a394")),crayonBuffer.background(0),geometryBuffer.noSmooth(),crayonShader=crayonBuffer.createShader(vertShader,crayonFragShader),blendShader=drawnBuffer.createShader(vertShader,blendFragShader),unionBufferW=targetSzX,unionBufferH=targetSzY;for(let $=0;$<unionBufferW*unionBufferH;$++)unionBuffer.push(!1);slopeDir=random([-1,1]),lightAngle=random([PI/2+PI/4,-PI/4]),print(degrees(lightAngle)),toEye=createVector(0,1,-1).normalize(),lightDir=_normalize(_createV(cos(lightAngle),-.8,sin(lightAngle))),prepHeightmap(),print("perspectiveType",perspectiveType),print("perspectivePower",perspectivePower),print("perspectiveShift",perspectiveShift),booleanShapes=[],hashes=[],pickPalette(random([1,2,4])),_&&pickPalette(_),bgColor=color("#f4eaea"),random(1),random(1);let i,n,a=random(100,120);for(let r=0;r<2;r++)for(let s=0;s<1;s++){let l=_rotate(_createV(map(r,0,max(1,1),-1,1)*a*2,0,100*map(r,0,max(1,1),-1,1)),0,0,0);l.z+=350,l.y=heightMap(l.x,l.z);let o;print("nSegs",20),o=stem({basePos:l,nSegs:20,branchNSegsFunc:function(e,t,_,$){let i;return max(ceil((e-t)*(i=_==$?.5:1==_?.1:2.7)),1)},branchPlacementFunc:function(){return 0},pitch:0,roll:PI,weightFunc:function(e,t){return e==t?.8:.3},weight:12,baseDepth:4,depth:4,trunk:!0,_basePos:l,branchProbLerpVal:0,baseBranchProb:-.15,tipBranchProb:2.5,fruitProb:.1,type:"fruit tree",trunkTwistAngle:PI/1.5,leafMultiplier:1,nChildBranchesMin:1,nChildBranchesMax:1,leafProbTip:2,petalPalette:petalPalette[0],trunkWonkNoiseScale:.1,branchWonkNoiseScale:.1,branchWindStrength:1,minTrunkWindStrength:0,maxTrunkWindStrength:1,minChildBranchAngle:PI/5,maxChildBranchAngle:PI/2.5,stemPalette:stemPalette,nTrunkGrowthDirections:2,straightTrunkStrengthBase:.025,straightTrunkStrengthTip:.0125,straightBaseExp:1});for(let h=0;h<o.length;h++){let p=o[h];if(p.fruit&&(n=i,i=p.tipPos,ball({flowerRotation:_createV(p.pitch,0,p.roll+PI),flowerTranslation:p.tipPos,flowerProportions:_createV(100,100,200),flowerScale:1.1*random(.35,.35),xExtents:.5,nPetals:2,scl:p.flowerScale,stem:p,palette:p.petalPalette,br:doubleExponentialSigmoid(pow(norm(_dot(_normalize(p.normal),_scalarMult(lightDir,1)),-1,1),1),.5)}),.3>random(1))){let f=_add(_createV(p.tipPos.x,heightMap(p.tipPos.x,p.tipPos.z)+3,p.tipPos.z),_rotate(_createV(random(100),0,0),0,random(TAU),0));ball({flowerRotation:_createV(p.pitch,0,p.roll+PI),flowerTranslation:f,flowerProportions:_createV(100,100,200),flowerScale:1.1*random(.35,.35),xExtents:.5,nPetals:2,scl:p.flowerScale,stem:p,palette:p.petalPalette,br:constrain(pow(terrainLight(f.x,f.z),1)+.1*random(-1,1),0,1)}),placeShadow(f.x,f.z,3,1)}for(let u=0;u<p.leaves.length;u++){let d=p.leaves[u],c=_createV(0,random(-1,1)*PI/4,p.roll+PI),g=_createV(120,100,20),m=1*random(.25,.3),v=pow(doubleExponentialSigmoid(norm(_dot(_normalize(d.normal),_scalarMult(lightDir,1)),-1,1),0),1),x=pow(doubleExponentialSigmoid(norm(_dot(_normalize(p.normal),_scalarMult(lightDir,1)),-1,1),.8),2),b=lerp(v,x,.7);if(cupShape({xSegments:4,ySegments:4,transforms:[{type:"s",val:_scalarMult(g,m)},{type:"r",val:c},{type:"t",val:d}],xMinExtent:-.3,xMaxExtent:.3,yMinExtent:0,yMaxExtent:1,palette:leafPalette,br:b,brLerp:.4,contrast:0,drawPolygonLines:!0}),.05>random(1)){let S=_createV(d.x,heightMap(d.x,d.z)-13,d.z);cupShape({xSegments:4,ySegments:4,transforms:[{type:"s",val:_scalarMult(g,m)},{type:"r",val:_createV(PI/2,0,0)},{type:"r",val:_createV(0,random(TAU),0)},{type:"t",val:S}],xMinExtent:-.3,xMaxExtent:.3,yMinExtent:0,yMaxExtent:1,palette:leafPalette,br:constrain(pow(terrainLight(d.x,d.z),1)+.2*random(-1,1),0,1),brLerp:.8,contrast:0,drawPolygonLines:!1})}}}}for(let y=0;y<15e3;y++){let w=1200*random(1),z=_createV(map(w,0,1200,1,1.03)*random(-1,1)*targetSzX*1.2/2,0,w);z.y=heightMap(z.x,z.z);let k=pow(terrainLight(z.x,z.z),1)+.2*random(-1,1);grassShape({pos:z,scale:_createV(10,random(5,20),0),palette:grassPalette,br:k})}addHashes(),booleanShapes.sort(function(e,t){return t.zIndex-e.zIndex});var P=performance.now();occlude();var B=performance.now();print("occluding time:",B-P),P=performance.now(),hashes.sort(function(e,t){return t.zIndex-e.zIndex}),print("sorting time:",(B=performance.now())-P)}function stem(e){let t=_copyV(e.basePos),_=_rotate(_createV(0,25,0),e.pitch,0,e.roll),$=[_3dTo2d(e.basePos)];$[0].weightAdjust=1;let i=e.pitch,n=0,a=e.roll,r=[],s=[],l=[],o=e.nTrunkGrowthDirections,h=[];if(e.trunk)for(let p=0;p<o;p++)if(p==o-1)l.push({targetOffset:PI+random([-1,1])*random(.5,1)*PI/2,turnStep:.3});else if(0==p)l.push({targetOffset:PI,turnStep:.8});else{let f=sNoise.noise3D(.01*t.x+p*e.trunkWonkNoiseScale+1213,.01*t.y+p*e.trunkWonkNoiseScale+12213,.01*t.z+p*e.trunkWonkNoiseScale+12421)*e.trunkTwistAngle+PI;l.push({targetOffset:f,turnStep:.5})}else for(let u=0;u<2;u++)if(0==u)h.push({targetOffset:-PI,turnStep:.2});else if(1==u){if(0==e.depth)h.push({targetOffset:0,turnStep:random(.5,.8)});else{let d=sNoise.noise3D(.001*t.x+u*e.branchWonkNoiseScale+1321213,.001*t.y+u*e.branchWonkNoiseScale+122153,.001*t.z+u*e.branchWonkNoiseScale+1242211)*PI/16+PI;h.push({targetOffset:d,turnStep:.2})}}else{let c=random([-1,1])*random(0,1)*PI;h.push({targetOffset:c,turnStep:.2})}let g=1;for(let m=0;m<e.nSegs;m++){let v=!1;if(e.depth>0){let x=round(map(m,0,e.nSegs,e.nChildBranchesMin,e.nChildBranchesMax));for(let b=0;b<x;b++)if(e.trunk&&m==e.nSegs-1||random(1)<map(m,0,e.nSegs-1,e.baseBranchProb,(e.trunk?.85:1)*e.tipBranchProb)){let S=_add(t,_lerp(_createV(),_,e.branchPlacementFunc())),y=sNoise.noise3D(.8*S.x,.8*S.z,b);y=map(m,e.nSegs,0,e.minChildBranchAngle,e.maxChildBranchAngle)*(y>0?1:-1);let w=stem({basePos:S,nSegs:e.branchNSegsFunc(e.nSegs,m,e.depth,e.baseDepth),branchNSegsFunc:e.branchNSegsFunc,branchPlacementFunc:e.branchPlacementFunc,pitch:i+random([-1,1])*random(PI/5,PI/3)*1,roll:a+1*y,weightFunc:e.weightFunc,weight:e.weight*e.weightFunc(e.depth,e.baseDepth),baseDepth:e.baseDepth,depth:max(0,e.depth-round(random(1,map(m,0,e.nSegs,1,e.depth)))),trunk:!1,_basePos:e._basePos,branchProbLerpVal:e.branchProbLerpVal,baseBranchProb:e.baseBranchProb,baseBranchProb:lerp(e.baseBranchProb,e.tipBranchProb,e.branchProbLerpVal),tipBranchProb:e.tipBranchProb,fruitProb:e.fruitProb,type:e.type,trunkTwistAngle:e.trunkTwistAngle,leafMultiplier:e.leafMultiplier,nChildBranchesMin:e.nChildBranchesMin,nChildBranchesMax:e.nChildBranchesMax,leafProbTip:e.leafProbTip,petalPalette:e.petalPalette,trunkWonkNoiseScale:e.trunkWonkNoiseScale,branchWonkNoiseScale:e.branchWonkNoiseScale,trunkBranchAngleExp:e.trunkBranchAngleExp,branchWindStrength:e.branchWindStrength,minTrunkWindStrength:e.minTrunkWindStrength,maxTrunkWindStrength:e.maxTrunkWindStrength,minChildBranchAngle:e.minChildBranchAngle,maxChildBranchAngle:e.maxChildBranchAngle,stemPalette:e.stemPalette,nTrunkGrowthDirections:e.nTrunkGrowthDirections,straightTrunkStrengthBase:e.straightTrunkStrengthBase,straightTrunkStrengthTip:e.straightTrunkStrengthTip,straightBaseExp:e.straightBaseExp});for(let z=0;z<w.length;z++)r.push(w[z]);v=!0}}let k,P;if(e.trunk){let B=floor(pow(map(m,0,e.nSegs,0,1),.5)*l.length);k=l[B].targetOffset,k+=lerpAngle(k,PI,expSkewMap(m,0,e.nSegs,e.straightTrunkStrengthBase,e.straightTrunkStrengthTip,e.straightBaseExp)),P=l[B].turnStep}else{let V=floor(map(m,0,e.nSegs,0,h.length));k=h[V].targetOffset,P=h[V].turnStep}let M=sNoise.noise3D(.004*t.x+124213,.004*t.y+124213,.012*t.z+124213)*map(m,0,e.nSegs,PI/16,PI/32),T=lerpAngle(i,n=sNoise.noise2D(.03*t.x+14213,.03*t.z+12423)*PI/2,e.trunk?0:.2)+M;i+=T,_=_rotate(_,T,0,0);let W=lerpAngle(a,0+k,P)+M*(e.trunk?map(m,0,e.nSegs,e.minTrunkWindStrength,e.maxTrunkWindStrength):e.branchWindStrength)+(v?e.depth/3*PI/16:0)*random([-1,1]);a+=W,_=_rotate(_,0,0,W);let A=max(1,ceil(.1*_mag(_)));for(let q=0;q<A;q++){let j=map(q,0,A,0,1),H=_add(t,_scalarMult(_,j)),X=_add(_scalarMult(_createV(cos(lightAngle),sin(lightAngle)),(H.y-heightMap(H.x,H.z))*.25),_rotate(_createV(40*pow((e._basePos.y-H.y)*.001,2)+1,0),0,0,random(TAU)));placeShadow(H.x+X.x,H.z+X.y,3,max(0,.1*pow((1-(e._basePos.y-H.y)*.001)*2-1,2)))}t=_add(t,_),g*=v?.95:1;let D=_3dTo2d(t);if(D.weightAdjust=g,D.weight=e.weight*g,$.push(D),random(1)<pow(map(m,-1,e.nSegs,0,e.leafProbTip),1)*(e.trunk?.5:1)){let Y=.05*_mag(_)*e.leafMultiplier;for(let F=0;F<Y;F++){let I;I=0==e.depth?random(.25):random(1);let E=_add(_add(t,_scalarMult(_,I)),_createV(0,0,0*random(-1,1)));E.normal=_normalize(_),s.push(E)}}}let L=[],N=[],C,O=0;for(let R=0;R<$.length;R++){let U,Z,J,G,K;if(R<$.length-1){J=$[R];let Q=_sub(G=$[R+1],J);C=O,O=atan2(Q.y,Q.x),K=C+lerpAngle(C,O,.5)}else J=$[R],K=O=C;0==R&&(K=e.roll+PI/2);let ee=max(1.5,e.weight*$[R].weightAdjust);U=_rotate(_createV(0,-ee,0),0,0,K),Z=_rotate(_createV(0,ee,0),0,0,K);let et=_add(U,J),e_=_add(Z,J);et.hashAngle=O,e_.hashAngle=O,L.push(et),N.push(e_)}for(let e$=0;e$<L.length-1;e$++){let e0=max(2,round(.23*$[e$].weight));for(let ei=0;ei<e0;ei++){let en=map(ei,0,e0,0,1),ea=map(ei+1,0,e0,0,1),er=_scalarMult(_normalize(_rotate(_sub($[e$+1],$[e$]),0,0,PI/2)),map(ei,0,e0-1,-1,1)),es=doubleExponentialSigmoid(pow(norm(_dot(er,lightDir),-1,1),1),.8),el=new _Shape(!0);el.setPoints([_lerp(L[e$],N[e$],en),_lerp(L[e$+1],N[e$+1],en),_lerp(L[e$+1],N[e$+1],ea),_lerp(L[e$],N[e$],ea),]);let eo=constrain(map($[e$].y,_3dTo2d(e.basePos).y,_3dTo2d(e.basePos).y-200,0,1),0,1),eh=lerp(es,eo,.5);el.fill=paletteLerp(e.stemPalette,eh,!0),el.zIndex=e.basePos.z,el.occlude=!0,el.hashWeight=1.5,el.nHashesMult=.9,el.scaleAmt=3,el.hashAngle=L[e$].hashAngle,el.nSegments=1,booleanShapes.push(el)}}let ep={tipDir:_,tipPos:t,pitch:i,roll:a,flowerScale:random(.5,1),normal:_sub(t,_add(e._basePos,_createV(0,-350,0))),leaves:s,basePos:e._basePos,fruit:random(1)<e.fruitProb,petalPalette:e.petalPalette};return 0==e.depth?[ep]:(r.push(ep),r)}function cupShape(e){var t=function(e,t,_){return sqrt(1-sq(map(e,t,_,-1,1)))};for(let _=0;_<e.x
function openSimplexNoise(e){"use strict";let t=e=>e.split(",").map(e=>new Uint8Array(e.split("").map(e=>Number(e)))),_=(e,t,_)=>new Int8Array(_.split("").map(_=>parseInt(_,t)+e)),$=e=>e.split(",").map(e=>parseInt(e,32)),i=1/47,n=1/103,a=1/30,r=.7320508075688772/2,s=1/3,l=1.2360679774997898/4,o=(.5773502691896258-1)/2,h=-.5/3,p=(.4472135954999579-1)/4;var f=t("110101000,110101211"),u=t("0000110010101001,2110210120113111,110010101001211021012011"),d=t("0000011000101001001010001,3111031101310113011141111,11000101001001010001211002101021001201102010120011,31110311013101130111211002101021001201102010120011");let c=_(-5,11,"a77a073aa3700330"),g=_(-11,23,"0ff7mf7fmmfffmfffm07f70f77mm7ff0ff7m0f77m77f0mf7fm7ff0077707770m77f07f70"),m=_(-3,7,"6444464444644446044426442464244662444044426442460244204422642246642446244404442604242624240424266224402442044226022420242204222664424642446244400442264224622440624240424262424002422042226222406422462244024420042226222402242062224022420242200222202222022220");var v=()=>new Uint8Array([0,1,1,0,4,1,17,0,20,2,21,2,22,5,23,5,26,4,39,3,42,4,43,3]),x=()=>new Uint16Array($("0,2,1,1,2,2,5,1,6,0,7,0,10,2,12,2,41,1,45,1,50,5,51,5,g6,0,g7,0,h2,4,h6,4,k5,3,k7,3,l0,5,l1,5,l2,4,l5,3,l6,4,l7,3,l8,d,l9,d,la,c,ld,e,le,c,lf,e,m8,k,ma,i,p9,l,pd,n,q8,k,q9,l,15e,j,15f,m,16a,i,16e,j,19d,n,19f,m,1a8,f,1a9,h,1aa,f,1ad,h,1ae,g,1af,g,1ag,b,1ah,a,1ai,b,1al,a,1am,9,1an,9,1bg,b,1bi,b,1eh,a,1el,a,1fg,8,1fh,8,1qm,9,1qn,9,1ri,7,1rm,7,1ul,6,1un,6,1vg,8,1vh,8,1vi,7,1vl,6,1vm,7,1vn,6")),b=()=>new Uint32Array($("0,3,1,2,2,3,5,2,6,1,7,1,8,3,9,2,a,3,d,2,g,3,i,3,m,1,n,1,o,3,q,3,11,2,15,2,16,1,17,1,19,2,1d,2,1m,1,1n,1,1o,0,1p,0,1q,0,1r,0,1s,0,1t,0,1u,0,1v,0,80,3,82,3,88,3,8a,3,8g,3,8i,3,8o,3,8q,3,201,2,205,2,209,2,20d,2,211,2,215,2,219,2,21d,2,280,9,281,9,288,9,289,9,g06,1,g07,1,g0m,1,g0n,1,g16,1,g17,1,g1m,1,g1n,1,g82,8,g86,8,g8i,8,g8m,8,i05,6,i07,6,i15,6,i17,6,i80,9,i81,9,i82,8,i85,6,i86,8,i87,6,i88,9,i89,9,i8i,8,i8m,8,i95,6,i97,6,401o,0,401p,0,401q,0,401r,0,401s,0,401t,0,401u,0,401v,0,408o,7,408q,7,409o,7,409q,7,4219,5,421d,5,421p,5,421t,5,4280,9,4281,9,4288,9,4289,9,428o,7,428q,7,4299,5,429d,5,429o,7,429p,5,429q,7,429t,5,4g1m,4,4g1n,4,4g1u,4,4g1v,4,4g82,8,4g86,8,4g8i,8,4g8m,8,4g8o,7,4g8q,7,4g9m,4,4g9n,4,4g9o,7,4g9q,7,4g9u,4,4g9v,4,4i05,6,4i07,6,4i15,6,4i17,6,4i19,5,4i1d,5,4i1m,4,4i1n,4,4i1p,5,4i1t,5,4i1u,4,4i1v,4,4i80,9,4i81,9,4i82,8,4i85,6,4i86,8,4i87,6,4i88,9,4i89,9,4i8i,8,4i8m,8,4i8o,7,4i8q,7,4i95,6,4i97,6,4i99,5,4i9d,5,4i9m,4,4i9n,4,4i9o,7,4i9p,5,4i9q,7,4i9t,5,4i9u,4,4i9v,4,4ia0,15,4ia1,15,4ia2,14,4ia5,12,4ia6,14,4ia7,12,4ia8,15,4ia9,15,4iai,14,4iam,14,4iao,13,4iaq,13,4ib5,12,4ib7,12,4ib9,11,4ibd,11,4ibm,10,4ibn,10,4ibo,13,4ibp,11,4ibq,13,4ibt,11,4ibu,10,4ibv,10,4ii0,1h,4ii2,1g,4ii8,1h,4iii,1g,4iio,1f,4iiq,1f,4ka1,1e,4ka5,1d,4ka9,1e,4kb5,1d,4kb9,1c,4kbd,1c,4ki0,1h,4ki1,1e,4ki8,1h,4ki9,1e,52a6,1b,52a7,1a,52am,1b,52b7,1a,52bm,19,52bn,19,52i2,1g,52i6,1b,52ii,1g,52im,1b,54a5,1d,54a7,1a,54b5,1d,54b7,1a,54i0,v,54i1,s,54i2,v,54i5,s,54i6,p,54i7,p,8ibo,18,8ibp,17,8ibq,18,8ibt,17,8ibu,16,8ibv,16,8iio,1f,8iiq,1f,8ijo,18,8ijq,18,8kb9,1c,8kbd,1c,8kbp,17,8kbt,17,8ki8,u,8ki9,r,8kio,u,8kj9,r,8kjo,m,8kjp,m,92bm,19,92bn,19,92bu,16,92bv,16,92ii,t,92im,o,92iq,t,92jm,o,92jq,l,92ju,l,94b5,q,94b7,n,94bd,q,94bn,n,94bt,k,94bv,k,94i0,v,94i1,s,94i2,v,94i5,s,94i6,p,94i7,p,94i8,u,94i9,r,94ii,t,94im,o,94io,u,94iq,t,94j5,q,94j7,n,94j9,r,94jd,q,94jm,o,94jn,n,94jo,m,94jp,m,94jq,l,94jt,k,94ju,l,94jv,k,94k0,1t,94k1,1s,94k2,1t,94k5,1s,94k6,1r,94k7,1r,94k8,1q,94k9,1p,94ki,1n,94km,1m,94ko,1q,94kq,1n,94l5,1k,94l7,1j,94l9,1p,94ld,1k,94lm,1m,94ln,1j,94lo,1o,94lp,1o,94lq,1l,94lt,1i,94lu,1l,94lv,1i,94s0,1t,94s2,1t,94s8,1q,94si,1n,94so,1q,94sq,1n,96k1,1s,96k5,1s,96k9,1p,96l5,1k,96l9,1p,96ld,1k,96s0,2f,96s1,2f,96s8,2c,96s9,2c,9kk6,1r,9kk7,1r,9kkm,1m,9kl7,1j,9klm,1m,9kln,1j,9ks2,2e,9ks6,2e,9ksi,29,9ksm,29,9mk5,2d,9mk7,2d,9ml5,26,9ml7,26,9ms0,2f,9ms1,2f,9ms2,2e,9ms5,2d,9ms6,2e,9ms7,2d,d4lo,1o,d4lp,1o,d4lq,1l,d4lt,1i,d4lu,1l,d4lv,1i,d4so,2b,d4sq,28,d4to,2b,d4tq,28,d6l9,2a,d6ld,25,d6lp,2a,d6lt,25,d6s8,2c,d6s9,2c,d6so,2b,d6t9,2a,d6to,2b,d6tp,2a,dklm,27,dkln,24,dklu,27,dklv,24,dksi,29,dksm,29,dksq,28,dktm,27,dktq,28,dktu,27,dml5,26,dml7,26,dmld,25,dmln,24,dmlt,25,dmlv,24,dms0,23,dms1,23,dms2,22,dms5,20,dms6,22,dms7,20,dms8,23,dms9,23,dmsi,22,dmsm,22,dmso,21,dmsq,21,dmt5,20,dmt7,20,dmt9,1v,dmtd,1v,dmtm,1u,dmtn,1u,dmto,21,dmtp,1v,dmtq,21,dmtt,1v,dmtu,1u,dmtv,1u,dmu0,j,dmu1,j,dmu2,i,dmu5,g,dmu6,i,dmu7,g,dmu8,j,dmu9,j,dmui,i,dmum,i,dmuo,h,dmuq,h,dmv5,g,dmv7,g,dmv9,f,dmvd,f,dmvm,e,dmvn,e,dmvo,h,dmvp,f,dmvq,h,dmvt,f,dmvu,e,dmvv,e,dn60,j,dn61,j,dn62,i,dn66,i,dn68,j,dn69,j,dn6i,i,dn6m,i,dn6o,h,dn6q,h,dn7o,h,dn7q,h,dou0,j,dou1,j,dou5,g,dou7,g,dou8,j,dou9,j,dov5,g,dov7,g,dov9,f,dovd,f,dovp,f,dovt,f,dp60,j,dp61,j,dp68,j,dp69,j,e6u2,i,e6u5,g,e6u6,i,e6u7,g,e6ui,i,e6um,i,e6v5,g,e6v7,g,e6vm,e,e6vn,e,e6vu,e,e6vv,e,e762,i,e766,i,e76i,i,e76m,i,e8u5,g,e8u7,g,e8v5,g,e8v7,g,e960,d,e961,d,e962,d,e963,d,e964,d,e965,d,e966,d,e967,d,hmuo,h,hmuq,h,hmv9,f,hmvd,f,hmvm,e,hmvn,e,hmvo,h,hmvp,f,hmvq,h,hmvt,f,hmvu,e,hmvv,e,hn6o,h,hn6q,h,hn7o,h,hn7q,h,hov9,f,hovd,f,hovp,f,hovt,f,hp68,c,hp69,c,hp6o,c,hp6p,c,hp78,c,hp79,c,hp7o,c,hp7p,c,i6vm,e,i6vn,e,i6vu,e,i6vv,e,i76i,b,i76m,b,i76q,b,i76u,b,i77i,b,i77m,b,i77q,b,i77u,b,i8v5,a,i8v7,a,i8vd,a,i8vf,a,i8vl,a,i8vn,a,i8vt,a,i8vv,a,i960,d,i961,d,i962,d,i963,d,i964,d,i965,d,i966,d,i967,d,i968,c,i969,c,i96i,b,i96m,b,i96o,c,i96p,c,i96q,b,i96u,b,i975,a,i977,a,i978,c,i979,c,i97d,a,i97f,a,i97i,b,i97l,a,i97m,b,i97n,a,i97o,c,i97p,c,i97q,b,i97t,a,i97u,b,i97v,a")),S=_(-1,4,"112011021322233123132111"),y=_(-1,5,"112011210110211120110121102132212220132122202131222022243214231243124213241324123222113311221213131221123113311112202311112022311112220342223113342223311342223131322023113322023311320223113320223131322203311322203131"),w=_(-1,6,"11201112101121101102111120111210110121110211112011011211012111021322112220122210132121220212212013122120221212201321122201222102131212202122120213112220122210222532215232152231253212523125221325312252132521232513225123251223232211432114231123212143121421312312214132141231232112431124211323121241312412132311224113241123342221322203311134221232202331113421223202233111342221322203131134221232202313113412223022231311342221322203113134212232022311313412223022231131342212322023111334212232022311133412223022231113322201222101111132202122120111113202212122011111322012221021111132021221202111113201222102211111322201222103311132202122120331113220122210233111322201222103131132022121220313113202122120231311322021221203113132022121220311313201222102231131322012221023111332021221202311133201222102231113422111331113222042121131311322204211213113132220422111331113220242121131311322024211123111332202422111331113202242112131131320224211123111332022421211313113022242112131131302224211123111330222443211423115222244312142131522224413214123152222443112421135222244131241213522224411324112352222443211423113222044312142131322204413214123132220443211423113220244311242113322024413124121332202443121421313202244311242113320224411324112332022441321412313022244131241213302224411324112330222");let z=(e,t=e=>e)=>{for(var _=[],$=0;$<e;)_.push(t($++));return _};function k(e,t=1){return e=1664525*e+1013904223|0,(t-=1)>0?k(e,t):e}let P={_2D:{base:f,squish:r,dimensions:2,pD:S,lookup:v},_3D:{base:u,squish:s,dimensions:3,pD:y,lookup:x},_4D:{base:d,squish:l,dimensions:4,pD:w,lookup:b}};function B(e,t,_){var $=0;let i=t[_++],n={next:void 0};for(;$<e.dimensions;){let a="xyzw"[$];n[a+"sb"]=t[_+$],n["d"+a]=-t[_+$++]-i*e.squish}return n}function V(e){let t=[],_=e.dimensions,$=_*_;for(var i,n=0;n<e.pD.length;){let a=e.base[e.pD[n]],r,s;i=0;do s=B(e,a,i),r?r.next=s:t[n/$]=s,r=s,i+=_+1;while(i<a.length);s.next=B(e,e.pD,n+1),_>=3&&(s.next.next=B(e,e.pD,n+_+2)),4===_&&(s.next.next.next=B(e,e.pD,n+11)),n+=$}let l=[t,function e(t,_){var $;let i=t(),n=new Map;for($=0;$<i.length;$+=2)n.set(i[$],_[i[$+1]]);return n}(e.lookup,t)];return e.base=void 0,e.lookup=void 0,l}let[M,T]=V(P._2D),[W,A]=V(P._3D),[q,j]=V(P._4D),H=new Uint8Array(256),X=new Uint8Array(256),D=new Uint8Array(256),Y=new Uint8Array(256),F=new Uint8Array(z(256,e=>e));var I=k(e,3);return((e,t)=>{for(var _=0;_<256&&!0!==t(_++););})(256,e=>{e=255-e;var t=((I=k(I))+31)%(e+1);t+=t<0?e+1:0,H[e]=F[t],X[e]=14&H[e],D[e]=H[e]%24*3,Y[e]=252&H[e],F[t]=F[e]}),f=u=d=void 0,v=x=b=void 0,S=y=w=void 0,{noise2D(e,t){let _=X,$=H,n=c,a=(e+t)*o,s=e+a,l=t+a,h=Math.floor(s),p=Math.floor(l),f=(h+p)*r,u=e-(h+f),d=t-(p+f);for(var g,m=(()=>{let e=s-h,t=l-p,_=e+t;return T.get(e-t+1|_<<1|_+t<<2|_+e<<4)})(),v=0;void 0!==m;){let x=u+m.dx,b=d+m.dy,S=2-x*x-b*b;S>0&&(g=_[$[h+m.xsb&255]+(p+m.ysb)&255],S*=S,v+=S*S*(n[g++]*x+n[g]*b)),m=m.next}return v*i},noise3D(e,t,_){let $=D,i=H,a=g,r=(e+t+_)*h,l=e+r,o=t+r,p=_+r,f=Math.floor(l),u=Math.floor(o),d=Math.floor(p),c=(f+u+d)*s,m=e-(f+c),v=t-(u+c),x=_-(d+c);for(var b,S=(()=>{let e=l-f,t=o-u,_=p-d,$=e+t+_;return A.get(t-_+1|e-t+1<<1|e-_+1<<2|$<<3|$+_<<5|$+t<<7|$+e<<9)})(),y=0;void 0!==S;){let w=m+S.dx,z=v+S.dy,k=x+S.dz,P=2-w*w-z*z-k*k;P>0&&(b=$[(i[f+S.xsb&255]+(u+S.ysb)&255)+(d+S.zsb)&255],P*=P,y+=P*P*(a[b++]*w+a[b++]*z+a[b]*k)),S=S.next}return y*n},noise4D(e,t,_,$){let i=Y,n=H,r=m,s=(e+t+_+$)*p,o=e+s,h=t+s,f=_+s,u=$+s,d=Math.floor(o),c=Math.floor(h),g=Math.floor(f),v=Math.floor(u),x=(d+c+g+v)*l,b=e-(d+x),S=t-(c+x),y=_-(g+x),w=$-(v+x);for(var z,k=(()=>{let e=o-d,t=h-c,_=f-g,$=u-v,i=e+t+_+$;return j.get(_-$+1|t-_+1<<1|t-$+1<<2|e-t+1<<3|e-_+1<<4|e-$+1<<5|i<<6|i+$<<8|i+_<<11|i+t<<14|i+e<<17)})(),P=0;void 0!==k;){let B=b+k.dx,V=S+k.dy,M=y+k.dz,T=w+k.dw,W=2-B*B-V*V-M*M-T*T;W>0&&(z=i[((n[d+k.xsb&255]+(c+k.ysb)&255)+(g+k.zsb)&255)+(v+k.wsb)&255],W*=W,P+=W*W*(r[z++]*B+r[z++]*V+r[z++]*M+r[z]*T)),k=k.next}return P*a}}}function _createV(e,t,_){let $=_;void 0==$&&($=0);let i=t;void 0==i&&(i=0);let n=e;return void 0==n&&(n=0),{x:n,y:i,z:$}}function _copyV(e){return _createV(e.x,e.y,e.z)}function _normalize(e){let t=_mag(e);return 0==t?e:_scalarMult(e,1/t)}function _setMag(e,t){return _scalarMult(_normalize(e),t)}function _add(e,t){return _createV(e.x+t.x,e.y+t.y,e.z+t.z)}function _sub(e,t){return _createV(e.x-t.x,e.y-t.y,e.z-t.z)}function _mult(e,t){return _createV(e.x*t.x,e.y*t.y,e.z*t.z)}function _scalarMult(e,t){return _createV(e.x*t,e.y*t,e.z*t)}function _mag(e){return sqrt(sq(e.x)+sq(e.y)+sq(e.z))}function _dot(e,t){return e.x*t.x+e.y*t.y+e.z*t.z}function _cross(e,t){return _createV(e.y*t.z-e.z*t.y,e.z*t.x-e.x*t.z,e.x*t.y-e.y*t.x)}function _lerp(e,t,_){return _createV(lerp(e.x,t.x,_),lerp(e.y,t.y,_),lerp(e.z,t.z,_))}function _rotate(e,t,_,$){let i=cos($),n=cos(_),a=cos(t),r=sin($),s=sin(_),l=sin(t),o=_createV(e.x,e.y,e.z),h=i,p=r,f=0,u=-r,d=i,c=0,g=0,m=0,v=1;return o=_createV(o.x*h+o.y*u+o.z*g,o.x*p+o.y*d+o.z*m,o.x*f+o.y*c+o.z*v),h=n,p=0,f=s,u=0,d=1,c=0,g=-s,m=0,v=n,o=_createV(o.x*h+o.y*u+o.z*g,o.x*p+o.y*d+o.z*m,o.x*f+o.y*c+o.z*v),h=1,p=0,f=0,u=0,d=a,c=l,g=0,m=-l,v=a,o=_createV(o.x*h+o.y*u+o.z*g,o.x*p+o.y*d+o.z*m,o.x*f+o.y*c+o.z*v)}function fractalNoise(e){let t=e.x,_=e.y,$=e.z,i=e.nOctaves,n=e.scaleFallout,a=e.weightFallout,r=0,s=1,l=0,o=1;for(let h=0;h<i;h++)l+=s,r+=norm(sNoise.noise3D(t*o,_*o,$*o),-1,1)*s,o*=n,s*=a;return map(r,0,l,0,1)}function triNorm(e,t,_){let $=_sub(t,e),i=_sub(_,e);return _cross($,i)}let perspectiveType="perspective",perspectivePower=2,perspectiveShift=0,lowPerspective=!1;function _3dTo2d(e){let t;t=lowPerspective?_rotate(_add(e,_createV(0,0,0)),PI/8,0,0):_rotate(_add(e,_createV(0,0,0)),PI/4,0,0);let _;_="perspective"==perspectiveType?1.5*map(pow(constrain(map(t.z,-maxZ,maxZ,0,1),0,1),perspectivePower),0,1,lowPerspective?.25:.7,lowPerspective?1.5:1):1;let $=_createV(t.x/_,(t.y-0)/_+450+0);return(isNaN($.x)||isNaN($.y)||isNaN($.z))&&print("NAN!",$.x,$.y,$.z,perspectivePower,t.z),$}function intersectPoint(e,t,_,$){let i=e.x,n=e.y,a=t.x,r=t.y,s=_.x,l=_.y,o=$.x,h=$.y;if(i===a&&n===r||s===o&&l===h||0==(denominator=(h-l)*(a-i)-(o-s)*(r-n)))return!1;let p=((o-s)*(n-l)-(h-l)*(i-s))/denominator,f=((a-i)*(n-l)-(r-n)*(i-s))/denominator;return!(p<0)&&!(p>1)&&!(f<0)&&!(f>1)&&{x:i+p*(a-i),y:n+p*(r-n)}}function linesIntersect(e,t,_,$){let i=e.x,n=e.y,a=t.x,r=t.y,s=_.x,l=_.y,o=$.x,h=$.y;if(i==a&&n==r||s==o&&l==h)return!1;let p=a-i,f=r-n,u=s-o,d=l-h,c=i-s,g=n-l,m=d*c-u*g,v=f*u-p*d;if(v>0){if(m<0||m>v)return!1}else if(v<0&&(m>0||m<v))return!1;let x=p*g-f*c;if(v>0){if(x<0||x>v)return!1}else if(v<0&&(x>0||x<v))return!1;return 0!=v||0==i*(r-l)+a*(l-n)+s*(n-r)&&(!!(i>=s)&&!!(i<=o)||!!(i<=s)&&!!(i>=o)||!!(a>=s)&&!!(a<=o)||!!(a<=s)&&!!(a>=o)||!!(s>=i)&&!!(s<=a)||!!(s<=i)&&!!(s>=a))&&(!!(n>=l)&&!!(n<=h)||!!(n<=l)&&!!(n>=h)||!!(r>=l)&&!!(r<=h)||!!(r<=l)&&!!(r>=h)||!!(l>=n)&&!!(l<=r)||!!(l<=n)&&!!(l>=r))}function sign(e,t,_){return(e.x-_.x)*(t.y-_.y)-(t.x-_.x)*(e.y-_.y)}function pointInTriangle(e,t,_,$){let i,n,a,r,s;return i=sign(e,t,_),n=sign(e,_,$),a=sign(e,$,t),r=i<0||n<0||a<0,s=i>0||n>0||a>0,!(r&&s)}function drawTriangleToBuffer(e,t,_,$){let i=_createV(map(e.x,-targetSzX/2,targetSzX/2,0,unionBufferW),map(e.y,-targetSzY/2,targetSzY/2,0,unionBufferH)),n=_createV(map(t.x,-targetSzX/2,targetSzX/2,0,unionBufferW),map(t.y,-targetSzY/2,targetSzY/2,0,unionBufferH)),a=_createV(map(_.x,-targetSzX/2,targetSzX/2,0,unionBufferW),map(_.y,-targetSzY/2,targetSzY/2,0,unionBufferH)),r=min(e.x,min(t.x,_.x)),s=max(e.x,max(t.x,_.x)),l=min(e.y,min(t.y,_.y)),o=max(e.y,max(t.y,_.y));for(let h=r;h<=s;h++)for(let p=l;p<=o;p++){let f=_createV(h,p);pointInTriangle(f,i,n,a)&&setBufferIJ(h,p,!0,$)}}function setBufferIJ(e,t,_,$){e>=0&&e<unionBufferW&&t>=0&&t<unionBufferH&&($[e+t*unionBufferW]=_)}function getBufferIJ(e,t,_){return e>=0&&e<unionBufferW&&t>=0&&t<unionBufferH?_[e+t*unionBufferW]:null}function setBufferPoint(e,t,_){let $=_xyToij(e.x,e.y);setBufferIJ($.i,$.j,t,_)}function getBufferPoint(e,t){let _=_xyToij(e.x,e.y);return null==_||getBufferIJ(_.i,_.j,t)}function _xyToij(e,t){let _=floor(map(e,-targetSzX/2,targetSzX/2,0,unionBufferW)),$=floor(map(t,-targetSzY/2,targetSzY/2,0,unionBufferH));return _>=0&&_<unionBufferW&&$>=0&&$<unionBufferH?{i:_,j:$}:null}function lerpAngle(e,t,_){let $=t-e;return $>PI?$-=TAU:$<-PI&&($+=TAU),$*_}function doubleExponentialSigmoid(e,t){t=1-(t=min(.99999,max(1e-5,t)));let _=0;return e<=.5?pow(2*e,1/t)/2:1-pow(2*(1-e),1/t)/2}function drawStroke(e,t,_){let $=[],i=!1;for(let n=0;n<e.points.length;n++)!0==e.lineSegVis[n]?i?$[$.length-1].push(e.points[n]):($.push([e.points[n]]),i=!0):(i&&$[$.length-1].push(e.points[n]),i=!1);if(e.closed&&e.lineSegVis[e.lineSegVis.length-1]&&$[$.length-1].push(e.points[0]),$.length>0)for(let a of $){let r=1,s=[],l=[];for(let o=0;o<a.length-1;o++){r=map(abs(a.length/2-o),0,a.length-1,1,1)*t*.6;let h=_rotate(_scalarMult(_normalize(_sub(a[o+1],a[o])),r),0,0,PI/2);s.push(_add(a[o],h)),h=_rotate(_scalarMult(_normalize(_sub(a[o+1],a[o])),r),0,0,-PI/2),l.push(_add(a[o],h))}r=map(abs(a.length/2-a.length-1),0,a.length-1,1,1)*t*.6;let p=_rotate(_scalarMult(_normalize(_sub(a[0],a[a.length-1])),r),0,0,-PI/2);s.push(_add(a[a.length-1],p)),p=_rotate(_scalarMult(_normalize(_sub(a[0],a[a.length-1])),r),0,0,PI/2),l.push(_add(a[a.length-1],p)),_.noStroke(),_.beginShape();for(let f=0;f<s.length;f++)_.vertex(s[f].x,s[f].y);for(let u=l.length-1;u>=0;u--)_.vertex(l[u].x,l[u].y);_.endShape(CLOSE),s=null,l=null}$=null}function prepareCanvas(e){targetSzY=floor((targetSzX=e)*heightToWidth),print(targetSzX,targetSzY),windowHeight/windowWidth>heightToWidth?(canvSzX=windowWidth*mag,canvSzY=round(windowWidth*heightToWidth*mag)):(canvSzY=windowHeight*mag,canvSzX=round(windowHeight/heightToWidth*mag)),sizeAdjust=canvSzX/targetSzX,print(canvSzX,canvSzY),createCanvas(canvSzX,canvSzY)}function addHashes(){print("adding hashes");let e=round(targetSzY/2);for(let t=0;t<15;t++){for(let _=0;_<e;_++){let $=map(_,0,e-1,-targetSzY/2,targetSzY/2),i=_createV(-targetSzX/2,$),n=_createV(targetSzX/2,$),a=new _Line(i.x,i.y,n.x,n.y,2);a.zIndex=booleanShapes[0].zIndex+1e4,a.fill=bgColor,a.hashWeight=2,a.bg=!0,bgHashes.push(a)}for(let r=0;r<e;r++){let s=map(r,0,e-1,-targetSzX/2,targetSzX/2),l=_createV(s,-targetSzY/2),o=_createV(s,targetSzY/2),h=new _Line(l.x,l.y,o.x,o.y,2);h.zIndex=booleanShapes[0].zIndex+1e4,h.fill=bgColor,h.hashWeight=2,h.bg=!0,bgHashes.push(h)}}bgHashes.sort(function(e,t){return random(1)})}function occlude(){print("occluding");for(let e=booleanShapes.length-1;e>=0;e--)if(booleanShapes[e].checkOnScreen()&&!booleanShapes[e].hidden){if(booleanShapes[e].subtractBuffer(unionBuffer,!0),void 0!=booleanShapes[e].fill&&booleanShapes[e].closed){let t=[],_=max(booleanShapes[e].maxY-booleanShapes[e].minY,booleanShapes[e].maxX-booleanShapes[e].minX),$=ceil(_*(void 0==booleanShapes[e].nHashesMult?.9:booleanShapes[e].nHashesMult)),i=booleanShapes[e].points[floor(booleanShapes[e].points.length/2)],n=void 0==booleanShapes[e].hashAngle?atan2(booleanShapes[e].center.y-i.y,booleanShapes[e].center.x-i.x):booleanShapes[e].hashAngle;for(let a=0;a<$;a++){let r=_rotate(_createV(2*_/1.7,0),0,0,n),s=_rotate(r,0,0,PI/2),l=.5*map(a,0,$,-1,1),o=_add(_add(booleanShapes[e].center,r),_scalarMult(s,l)),h=_add(_sub(booleanShapes[e].center,r),_scalarMult(s,l)),p,f=(p=new _Line(o.x,o.y,h.x,h.y,2)).intersectShape(booleanShapes[e]);for(let u=0;u<f.length;u++)if(booleanShapes[e].occlude){let d=f[u].subtractBuffer(unionBuffer);for(let c=0;c<d.length;c++){let g=d[c];g.drawLastSegment=!0,g.fill=booleanShapes[e].fill,g.strokeWeight=void 0==booleanShapes[e].hashWeight?1.5:booleanShapes[e].hashWeight,g.hidden||t.push(g)}}else f[u].drawLastSegment=!0,f[u].fill=booleanShapes[e].fill,f[u].strokeWeight=void 0==booleanShapes[e].hashWeight?1.5:booleanShapes[e].hashWeight,f[u].hidden||t.push(f[u])}t.zIndex=booleanShapes[e].zIndex,t.scaleAmt=void 0==booleanShapes[e].scaleAmt?1:booleanShapes[e].scaleAmt,t.wobbleAmt=void 0==booleanShapes[e].wobbleAmt?0:booleanShapes[e].wobbleAmt,hashes.push(t)}booleanShapes[e].drawToBuffer(unionBuffer)}}function expSkewRandom(e,t,_){return map(pow(random(1),_),0,1,e,t)}function expSkewNorm(e,t,_,$){return pow(norm(e,t,_),$)}function expSkewMap(e,t,_,$,i,n){return map(expSkewNorm(e,t,_,n),0,1,$,i)}let firstFalse=0,firstTrue=0;class _Shape{constructor(e){this.points=[],this.lineSegVis=[],this.closed=e,this.perimeter=0,this.hidden=!1}setPoints(e){this.points=[];let t=null;for(let _=0;_<e.length;_++)this.points.push(_copyV(e[_])),null!=t&&(this.perimeter+=dist(t.x,t.y,e[_].x,e[_].y)),t=this.points[_];this.setSegVis(),this.calculateBoundingBox()}checkOnScreen(){return!(this.maxX<-targetSzX/2||this.minX>targetSzX/2||this.maxY<-targetSzY/2||this.minY>targetSzY/2)}setSegVis(){for(let e=0;e<this.points.length;e++)this.lineSegVis[e]=!0}calculateBoundingBox(){if(this.points.length>0){if(this.minX=this.points[0].x,this.minY=this.points[0].y,this.maxX=this.points[0].x,this.maxY=this.points[0].y,this.points.length>1)for(let e=1;e<this.points.length;e++)this.minX=min(this.minX,this.points[e].x),this.minY=min(this.minY,this.points[e].y),this.maxX=max(this.maxX,this.points[e].x),this.maxY=max(this.maxY,this.points[e].y);this.center=_createV((this.minX+this.maxX)/2,(this.minY+this.maxY)/2)}}intersectShape(e){let t=0,_;!(_=this.points[0].x>=e.minX&&this.points[0].x<=e.maxX&&this.points[0].y>=e.minY&&this.points[0].y<=e.maxY&&e.pointInside(this.points[0]))&&(this.lineSegVis[0]=!1,t++);for(let $=1;$<this.points.length;$+=1){let i;i=this.points[$].x>=e.minX&&this.points[$].x<=e.maxX&&this.points[$].y>=e.minY&&this.points[$].y<=e.maxY&&e.pointInside(this.points[$]),(!_||!i)&&(this.lineSegVis[$]=!1,t++),_=i}1>abs(t-this.points.length)&&(this.hidden=!0)}subtractBuffer(e){let t=0,_=getBufferPoint(this.points[0],e);this.closed?this.lineSegVis[0]=!_:this.lineSegVis[0]=!!this.drawLastSegment&&!_;for(let $=1;$<this.points.length;$++){let i=getBufferPoint(this.points[$],e);(_||i)&&(this.lineSegVis[$]=!1,t++),_=i}t==this.points.length&&(this.hidden=!0)}pointInside(e){if(!this.closed||!(e.x>this.minX)||!(e.x<this.maxX)||!(e.y>this.minY)||!(e.y<this.maxY))return!1;{let t=_createV(e.x-1e3*random(1,10),e.y-1e3*random(1,10)),_=0;for(let $=0;$<this.points.length;$+=1)linesIntersect(t,e,this.points[$],this.points[($+1)%this.points.length])&&_++;return _%2==1}}draw(){let e=!1;push(),beginShape();for(let t=0;t<this.points.length;t++)!0==this.lineSegVis[t]||(e=!0,endShape(),beginShape()),vertex(this.points[t].x,this.points[t].y);this.closed?e?(this.lineSegVis[this.lineSegVis.length-1]&&vertex(this.points[0].x,this.points[0].y),endShape()):endShape(CLOSE):(noFill(),endShape()),pop()}drawToBuffer(e){for(let t=this.minX;t<=this.maxX;t++)for(let _=this.minY;_<=this.maxY;_++)if(this.pointInside(_createV(t,_))){let $=_xyToij(t,_);null!=$&&setBufferIJ($.i,$.j,!0,e)}}}class _Line extends _Shape{constructor(e,t,_,$,i){super(!1),this._x1=e,this._y1=t,this._x2=_,this._y2=$,this.x1=this._x1,this.y1=this._y1,this.x2=this._x2,this.y2=this._y2,this.axis=_normalize(_createV(this._x2-this._x1,this._y2-this._y1)),this.nPoints=i;for(let n=0;n<this.nPoints;n++){let a=map(n,0,this.nPoints-1,0,1);this.points.push(_createV(lerp(this.x1,this.x2,a),lerp(this.y1,this.y2,a))),this.lineSegVis.push(!0)}i<=1&&print("not enought points",i),this.setSegVis(),this.calculateBoundingBox()}wobbleAndScale(e,t){let _=_scalarMult(this.axis,t),$=_scalarMult(_rotate(this.axis,0,0,PI/2),random(-1,1)*e);this.x1=this._x1+$.x-_.x,this.y1=this._y1+$.y-_.y,$=_scalarMult(_rotate(this.axis,0,0,-PI/2),random(-1,1)*e),this.x2=this._x2+$.x+_.x,this.y2=this._y2+$.y+_.y,this.updatePoints()}updatePoints(){for(let e=0;e<this.nPoints;e++){let t=map(e,0,this.nPoints-1,0,1);this.points[e].x=lerp(this.x1,this.x2,t),this.points[e].y=lerp(this.y1,this.y2,t)}}subtractBuffer(e,t){if(t)super.subtractBuffer(e);else{let _=max(60,round(.1*dist(this._x1,this._y1,this._x2,this._y2))),$=null,i=null,n=null,a=null,r=[];for(let s=0;s<_;s++){let l=map(s,0,_-1,0,1),o=_lerp(_createV(this._x1,this._y1),_createV(this._x2,this._y2),l);if(i=$,$=getBufferPoint(o,e),null==n)$||(n=o);else if(i)$||($?print("check is null 1"):n=o);else if(i)print("_check is null");else if($){if(a){let h=new _Line(n.x,n.y,a.x,a.y,2);h.stroke=this.stroke,h.fill=this.fill,h.strokeWeight=this.strokeWeight,h.scaleAmt=this.scaleAmt,h.wobbleAmt=this.wobbleAmt,r.push(h)}n=null,a=null}else $?print("check is null 2"):a=o}if(n&&a){let p=new _Line(n.x,n.y,a.x,a.y,2);p.stroke=this.stroke,p.fill=this.fill,p.strokeWeight=this.strokeWeight,p.scaleAmt=this.scaleAmt,p.wobbleAmt=this.wobbleAmt,r.push(p)}return r}}intersectShape(e){let t=this.points[0],_=this.points[this.points.length-1],$=[];for(let i=0;i<e.points.length;i++){let n=e.points[i],a=e.points[(i+1)%e.points.length],r=intersectPoint(t,_,n,a);r&&(r.outside=_dot(_createV(t,_),_createV(n,a))>0,$.push(r))}if($.length%2!=0)return[];{let s=[];for(let l=0;l<$.length;l+=2){let o=$[l],h=$[l+1],p=new _Line(o.x,o.y,h.x,h.y,2);p.stroke=this.stroke,p.fill=this.fill,p.strokeWeight=this.strokeWeight,p.scaleAmt=this.scaleAmt,p.wobbleAmt=this.wobbleAmt,s.push(p)}return s}}}class _FlowLine extends _Shape{constructor(e,t,_,$,i){super(!1);let n=_createV(e,t),a=_createV(_,0);this.points.push(_copyV(n));let r=.01,s=7,l=random([-1,1]);for(let o=0;o<$;o++){let h=round(map(noise(n.x*r,n.y*r,i),0,1,-s,s))/s*PI/2;a=_rotate(_createV(l*_,0),0,0,h),n=_add(n,a),this.points.push(_copyV(n)),this.lineSegVis.push(!0)}}}class _Rect extends _Shape{constructor(e,t,_,$,i,n){super(!0),this.x=e,this.y=t,this.w=_,this.h=$,this.nPoints=i,this.w>this.h?(this.wPoints=this.nPoints,this.hPoints=this.h/this.w*this.nPoints):(this.wPoints=this.w/this.h*this.nPoints,this.hPoints=this.nPoints);for(let a=0;a<this.wPoints;a++){let r=_rotate(_createV(map(a,0,this.wPoints,0,this.w),0),0,0,n);r.x+=this.x,r.y+=this.y,this.points.push(r),this.lineSegVis.push(!0)}for(let s=0;s<this.hPoints;s++){let l=_rotate(_createV(this.w,map(s,0,this.hPoints,0,this.h)),0,0,n);l.x+=this.x,l.y+=this.y,this.points.push(l),this.lineSegVis.push(!0)}for(let o=0;o<this.wPoints;o++){let h=_rotate(_createV(map(o,0,this.wPoints,this.w,0),this.h),0,0,n);h.x+=this.x,h.y+=this.y,this.points.push(h),this.lineSegVis.push(!0)}for(let p=0;p<this.hPoints;p++){
0x1808bbab…0434·#20,630,370·0xa9358e86…bb3160
Invalid edition size for auction`D[PPPPPPPPP[PPPPPPPPPbAddress: call to non-contractAddress: call to non-contractAddress: low-level delegate call failedAddress: low-level delegate call failedhttps://arweave.net/HFzPAlpcqvmS_allRpx17oZzozmG1PVuL6ZEJ7zUWFkArmenian Poppieshttps://arweave.net/OZ_APXiBUD5AKnJ0Qf83rMtlBuGUP2NJBepgsgpIPhMUY66cfb2923d62411ec92fc0ec
0x1808bbab…0434·#20,630,350·0x844359d5…ce5025
Invalid edition size for auction`D[PPPPPPPPP[PPPPPPPPPbAddress: call to non-contractAddress: call to non-contractAddress: low-level delegate call failedAddress: low-level delegate call failedhttps://arweave.net/txIAXOwI1oM6XfgTDy3r25ZT4jSYOlvUI19uFD0xeiUhttps://arweave.net/MGBfc2acYKdyW0hUDvtjXFwVNvTbo8iyXGlokMvPU9UUY66cfb19e6fc3a26efbae007e
iform("U3",3),shaderBuffer.rect(-targetSzX/2,-targetSzY/2,targetSzX,targetSzY),shaderBuffer.pop(),materialBuffer.image(shaderBuffer,0,0),materialBuffer.loadPixels();let e=ceil(random(cloudTimeOffset-1e5*floor(cloudTimeOffset/1e5))/1e3);print("count",e);for(let a=0;a<e;a++)random(1)}else{if(push(),scale(sizeAdjust,sizeAdjust),packingHouse){for(let $=0;$<1e3;$++)if(FG())fail=0;else if(++fail>4e5||0==el_pts.length&&$>10){print("done packing",packedPoints.length),packingHouse=!1,packingLand=!0;for(let t=0;t<8e3;t++)el_pts.push(Fa(random(targetSzX),random(targetSzY)));break}}else if(packingLand){for(let _=0;_<1e3;_++)if(FE([0,1,4]))fail=0;else if(++fail>6e5||0==el_pts.length&&_>10){print("done packing",packedPoints.length),packingLand=!1,packingSky=!0;for(let r=0;r<2e3;r++)el_pts.push(Fa(random(targetSzX),random(targetSzY)));break}}else if(packingSky){let l=0==skyType?FD:FE;for(let i=0;i<1e3;i++)if(l([2],1))fail=0;else if(++fail>4e6||0==el_pts.length&&i>10){print("done packing",packedPoints.length),packingSky=!1,packingClouds=!0;for(let f=0;f<8e3;f++)el_pts.push(Fa(random(targetSzX),random(.4*targetSzY)));print("drawingFills"),background(color("#dfd8ce"));break}}else if(packingClouds){for(let n=0;n<1e3;n++)if(FE([2],0))fail=0;else if(++fail>4e6||0==el_pts.length&&n>10){print("done packing",packedPoints.length),packingClouds=!1,packedPoints.sort(function(e,a){return-(e.xyz.z-a.xyz.z)}),background(color("#dfd8ce"));break}}else for(let o=0;o<1e3;o++)if(strokeWeight(1),drawInd<packedPoints.length){let s=packedPoints[drawInd],u=s.center.x,c=s.center.y;if(stroke(inkColor),"grass"==s.type){let p=Fi(Fc(Fa(1,-1,1)),s.nrm),d=map(atan2(p.x,p.y),-PI,PI,s.amin,s.amax),F=round(map(pow(1.1*Fl({x:15*s.xyz.x+100,y:15*s.xyz.z+1023,z:0,nOctaves:3,scaleFallout:2.5,weightFallout:.5}),3),0,1,5,15)),m=map(pow(1*Fl({x:.3*s.xyz.x-100,y:.3*s.xyz.z-2023,z:0,nOctaves:3,scaleFallout:2.5,weightFallout:.5}),1),0,1,-1,1)*PI/3;if(s.burned)line(u-.8*F*cos(d+=random(-1,1)*PI/8+(1-s.burnedAmt)*PI/2),c-.8*F*sin(d),u+.8*F*cos(d),c+.8*F*sin(d));else{let x=noise(10*s.xyz.x+1020,10*s.xyz.z+1231);if(x<.25*random(1)){let h=5/(s.xyz.z+2),y=-(2*F)*(x+1)/(s.xyz.z+2);push(),translate(u,c),rotate(d+random(-1,1)*PI/8),line(0,y,0,0),push(),translate(0,y),rotate(random(PI));let g=ceil(random(2,3));for(let z=0;z<g;z++)rotate(PI/g+random(-1,1)*PI/8),line(-h,0,h,0);pop(),pop()}FH(u,c,F,d,m)}}else if("leaves"==s.type){let v=noise(.1*s.xyz.x+1e3,.1*s.xyz.z+-1023),b=sunPosX<0?1:-1,S=map(1.1*Fl({x:5*s.xyz.x+-1500,y:5*s.xyz.z+9082,z:0,nOctaves:1,scaleFallout:2.5,weightFallout:.5}),0,1,-1,1),U=Fi(Fc(Fa(b,-1,1)),Fd(Fe(s.nrm,Fa(1,1,S)),Fa(0,.7,map(v,0,1,-.4,-1)))),k=map(atan2(U.x,U.y),-PI,PI,s.amin,s.amax)-PI/6+random(-1,1)*PI/8,D=1.5*round(map(pow(1.1*Fl({x:10*s.xyz.x+100,y:10*s.xyz.z+1023,z:0,nOctaves:3,scaleFallout:2.5,weightFallout:.5}),3),0,1,3,10));flameFactor>0&&s.lightR>100&&0==s.lightB&&stroke(255,0,0),line(u-D*cos(k),c-D*sin(k),u,c)}else if("house"==s.type){let B=dist(s.p1.x,s.p1.y,s.p2.x,s.p2.y),q=ceil(1*B);if(B<=2)flameFactor>0&&s.lightR>100&&0==s.lightB&&stroke(255,0,0),line(s.p1.x,s.p1.y,s.p2.x,s.p2.y);else for(let M=0;M<q;M++){let P=map(M,0,q-1,0,1),w=map(M+1,0,q-1,0,1);flameFactor>0&&s.lightR>100&&0==s.lightB&&stroke(255,0,0),line(lerp(s.p1.x,s.p2.x,P),lerp(s.p1.y,s.p2.y,P),lerp(s.p1.x,s.p2.x,w),lerp(s.p1.y,s.p2.y,w))}}else if("fire"==s.type){if(flameFactor>0){let X=Fi(Fc(Fa(1,-1,1)),Fd(s.nrm,Fa(0,0,0))),Y=-map(atan2(X.x,X.y),-PI,PI,s.amin,s.amax),W=map(noise(10*s.xyz.x,10*s.xyz.y,10*s.xyz.z),0,1,0,1),A=map(pow(noise(20*s.xyz.x,0,20*s.xyz.z),1),0,1,0,1);stroke(255,150*A,0);let H=map(W,0,1,1,2.5);line(u-cos(Y)*s.radius*H*.5,c-sin(Y)*s.radius*H*.5,u+cos(Y)*s.radius*.5,c+sin(Y)*s.radius*.5)}}else if(void 0==s.pts)strokeWeight(1.5),point(u,c);else{strokeWeight(.5);for(let I=0;I<s.pts.length-1;I++)line(s.pts[I].p.x,s.pts[I].p.y,s.pts[I+1].p.x,s.pts[I+1].p.y)}drawInd++}else{print("done rendering"),noLoop();break}pop()}}function FD(){let e=16,a=null;for(;el_pts.length>0&&null==a;)Fx(a=el_pts.pop(),packingBuffer)&&(a=null);null==a&&(a=Fa(random(targetSzX),random(targetSzY)));let $,t,_=0;if(!Fx(a,packingBuffer)){let r=FF(a);if(2!=(t=r.materialId))return;_++,$=r.lightG,e=map(a.y,0,targetSzY,8,32);let l=function(e,a){let $=Fl({x:(targetSzX/2-e)*.0016*map(a,0,targetSzY*map(skyAngle,-.3,-.2,.2,.5),.8,1)+13200,y:.0016*a+10216323,z:0,nOctaves:2,scaleFallout:3,weightFallout:.8});$=map($,0,1,-1,1)*TAU;let t=e-targetSzX/2+map(sunPosX,-8,8,1,-1)*targetSzX*.4,_=a-targetSzY/2+map(skyAngle,-.3,-.2,.2,0)*targetSzX,r=pow(map(sqrt(sq(t)+sq(_)),0,targetSzX/2,0,1),1);return atan2(_,t)+PI/2+$*map(r,0,1,0,.5)},i=l(a.x,a.y),f=random([-1,1]),n=Fk(Fa(f,0),i,0,0),o=Fd(a,n),s=[{p:a,r:e}],u=null;for(let c=0;c<200;c++){u=Fb(o),o=Fd(o,n),cloudNs=Fw(o.x,o.y),i=l(o.x,o.y),n=Fk(Fa(f,0),i,0,0);let p=FF(o).materialId;e=map(o.y,0,targetSzY,8,32);if(2==p&&!Fx(o,packingBuffer)&&cloudNs<.25)_++,FC(o,1*e),s.push({p:Fb(o),r:e});else{if(null!=u){for(let d=0;d<s.length-1;d++)line(s[d].p.x,s[d].p.y,s[d+1].p.x,s[d+1].p.y),FB(s[d].p,s[d+1].p,max(1*s[d].r,.5),packingBuffer);packedPoints.push({center:Fb(a),radius:e,type:"sky",pts:s,xyz:r.xyz})}return}}a=null}}function FE(e,a){let $=8,t=null;for(;el_pts.length>0&&null==t;)Fx(t=el_pts.pop(),packingBuffer)&&(t=null);if(null==t&&(t=Fa(random(targetSzX),random(targetSzY))),!Fx(t,packingBuffer)){let _=FF(t),r=_.materialId,l=_.lightG;if(2==r){let i=Fw(t.x,t.y);if(0==a){let f=Fw(t.x+map(sunPosX,-8,8,1,-1),t.y+1);$=f<i&&i<.4?map(i-f,0,.008,3,15):15}else if(1==a&&($=4*map(l,0,255,materials[r].rmin,materials[r].rmax)*random(.98,1.02),i>.25))return}let n=!1;for(let o=0;o<e.length;o++)if(r==e[o]){n=!0;break}if(!n)return;2!=r&&(_.burned?$*=map(pow(map(l,0,255,0,1),2),0,1,materials[r].rmin,lerp(materials[r].rmax,materials[r].rmin,_.burnedAmt))*map(noise(5*_.xyz.x,5*_.xyz.z),0,1,1,2)*map(l,0,255,.6,1):$*=map(l,0,255,materials[r].rmin,materials[r].rmax)),FA(t.x,t.y,$,$,packingBuffer),square(t.x,t.y,.5*$),packedPoints.push({center:Fb(t),radius:$,type:["grass","leaves","sky","house","fire"][r],amin:materials[r].amin,amax:materials[r].amax,nrm:_.nrm,xyz:_.xyz,lightR:_.lightR,lightG:_.lightG,lightB:_.lightB,burned:_.burned,burnedAmt:_.burnedAmt}),FC(t,$),t=null}}function FF(e){let a=floor(map(e.x,0,targetSzX,0,bufferWidth)),$=floor(map(e.y,0,targetSzY,0,bufferHeight)),t=(a+$*lightBuffer.width)*4,_=materialBuffer.pixels[t+0]>128?1:0,r=materialBuffer.pixels[t+1]>128?1:0,l=materialBuffer.pixels[t+2]>128?1:0,i=!1,f=0,n=0;1==_&&1==l?n=3:1==_&&1==r?n=4:materialBuffer.pixels[t+1]>0&&materialBuffer.pixels[t+2]>0?(n=0,i=!0,f=materialBuffer.pixels[t+2]/255):1==_?n=0:1==r?n=1:1==l&&(n=2);let o=lightBuffer.pixels[t+0],s=lightBuffer.pixels[t+1],u=lightBuffer.pixels[t+2],c=map(normalBuffer.pixels[t+0],0,255,-1,1),p=map(normalBuffer.pixels[t+1],0,255,-1,1),d=map(normalBuffer.pixels[t+2],0,255,-1,1),F=Fa(c,p,d),m=map(xyzBuffer.pixels[t+0],0,255,-1,1),x=map(xyzBuffer.pixels[t+1],0,255,-1,1),h=map(xyzBuffer.pixels[t+2],0,255,-1,1);return{materialId:n,lightR:o,lightG:s,lightB:u,nrm:F,xyz:Fa(m,x,h),burned:i,burnedAmt:f}}function FG(){let e=8,a=null;for(;el_pts.length>0&&null==a;)Fx(a=el_pts.pop(),packingBuffer)&&(a=null);null==a&&(a=Fa(random(targetSzX),random(targetSzY)));let $,t,_=0;if(!Fx(a,packingBuffer)){let r=FF(a);if(3!=(t=r.materialId))return;_++,e*=map($=r.lightG,0,255,materials[t].rmin,materials[t].rmax);let l=r.nrm,i=Fk(l,0,-houseAngle,0),f=2*map(i.x/i.z,-1,1,-TAU,TAU)+PI/2,n=Fk(Fa(random([-1,1]),0),f,0,0),o=Fd(a,n),s=null;for(let u=0;u<1e3;u++){s=Fb(o),o=Fd(o,n);let c=FF(o),p=c.materialId,d=c.lightG,F=c.nrm;if(3==p&&!Fx(o,packingBuffer)&&Fh(l,F)/(Fg(l)*Fg(F))>.5&&5>abs($-d))_++,FC(o,1*e);else{if(null!=s){Fy(a.x,a.y,.25,packingBuffer),FB(a,s,max(1*e,.5),packingBuffer),line(a.x,a.y,s.x,s.y);let m=FF(s);packedPoints.push({center:Fb(a),radius:e,type:"house",amin:materials[t].amin,amax:materials[t].amax,nrm:l,p1:a,p2:s,xyz:c.xyz,lightR:c.lightR,lightG:c.lightG,lightB:c.lightB,lightR2:m.lightR,lightG2:m.lightG,lightB2:m.lightB})}return}}a=null}}function FH(e,a,$,t,_){let r=Fa(e,a),l=Fk(Fa(0,-1),t,0,0);for(let i=0;i<$;i++){let f=map(i,0,$,1,0),n=Fb(r);r=Fd(r,l);let o=map(noise(.01*e,.01*a,2*i),0,1,-1,1)*_*f;l=Fk(l,o,0,0),line(n.x,n.y,r.x,r.y)}}function FI(){targetSzX=floor((targetSzY=1e3)/heightToWidth),print("here 2"),print("targetSzX",targetSzX),print("targetSzY",targetSzY),windowHeight/windowWidth>heightToWidth?(canvSzX=windowWidth*mag,canvSzY=round(windowWidth*heightToWidth*mag)):(canvSzY=windowHeight*mag,canvSzX=round(windowHeight/heightToWidth*mag))}function FJ(){houseX=random(-2,2),houseZ=random(-6,6);for(let e=0;e<2e4;e++){let a=floor(map(houseX,-10,10,0,mapW)),$=floor(map(houseZ,-10,10,mapH,0)),t=Fs(a,$,terrainNoiseScale,terrainHt),_=Ft(a,$,terrainNoiseScale,terrainHt),r=Fr(a,$,terrainNoiseScale,1),l=Fr(a,$-25,terrainNoiseScale,1),i=Fr(a,$-10,terrainNoiseScale,1);if(sq(t)+sq(_)<1e-5&&r>i&&r>l&&_<0){print("done",e);break}houseX=random(1,3)*random([-1,1]),houseZ=random(-6,6)}houseScale=map(houseZ,-6,7,.8,.7),houseW=.5,houseH=map(houseZ,-6,7,.42,.5),houseD=.2,houseAngle=map(abs(houseX),2,5,PI/8,PI/3)*(houseX<0?1:-1)}function FK(){burnStart=round(random(289,319)),burnDuration=round(random(10,15)),print("burnStart",burnStart),print("burnDuration",burnDuration);let e=new Date,a=new Date(e.getFullYear(),0,0),$=Math.floor((e-a)/864e5)-burnStart;console.log("Day's since burning:",$),cloudTimeOffset=Date.now(),timeOffset=Date.now()/1e7,(flameFactor=max(map($,0,burnDuration,0,flameFactorMax),0))>flameFactorMax&&(flameFactor=0,print("fire is done"))}function FL(){materials.push({rmin:.55,rmax:1.4,amin:-PI/1.5+PI/4,amax:PI/1.5+PI/4}),materials.push({rmin:.43,rmax:.7,amin:0+PI/4,amax:TAU+PI/4}),materials.push({rmin:4,rmax:1,amin:0,amax:0}),materials.push({rmin:.2,rmax:.45,amin:0,amax:TAU}),materials.push({rmin:.4,rmax:.8,amin:-TAU,amax:TAU})}function FM(){bufferWidth=floor(2*targetSzX),bufferHeight=floor(2*targetSzY),print("here 3"),print("bufferWidth",bufferWidth),print("bufferHeight",bufferHeight);for(let e=0;e<bufferWidth;e++){let a=new Uint8Array(bufferHeight);for(let $=0;$<bufferHeight;$++)a[$]=1;packingBuffer.push(a)}for(let t=0;t<2e3;t++)el_pts.push(Fa(map(houseX,-3,3,.22,.78)*targetSzX+random(-1,1)*targetSzX*.1,map(houseZ,6,-6,.4,.78)*targetSzY+random(-1,1)*targetSzY*.15));lightBuffer=createGraphics(bufferWidth,bufferHeight),normalBuffer=createGraphics(bufferWidth,bufferHeight),xyzBuffer=createGraphics(bufferWidth,bufferHeight),materialBuffer=createGraphics(bufferWidth,bufferHeight),myShader=(shaderBuffer=createGraphics(bufferWidth,bufferHeight,WEBGL)).createShader(vertShader,fragShader)}
function handleUrlParams(){let e=window.location.search,a=new URLSearchParams(e),$=a.get("mag");mag=null==$?1:float($)>0?max(float($),1):1}function openSimplexNoise(e){"use strict";let a=e=>e.split(",").map(e=>new Uint8Array(e.split("").map(e=>Number(e)))),$=(e,a,$)=>new Int8Array($.split("").map($=>parseInt($,a)+e)),t=e=>e.split(",").map(e=>parseInt(e,32)),_=1/103,r=1/3,l=-.5/3;var i=a("0000110010101001,2110210120113111,110010101001211021012011");let f=$(-11,23,"0ff7mf7fmmfffmfffm07f70f77mm7ff0ff7m0f77m77f0mf7fm7ff0077707770m77f07f70");var n=()=>new Uint16Array(t("0,2,1,1,2,2,5,1,6,0,7,0,10,2,12,2,41,1,45,1,50,5,51,5,g6,0,g7,0,h2,4,h6,4,k5,3,k7,3,l0,5,l1,5,l2,4,l5,3,l6,4,l7,3,l8,d,l9,d,la,c,ld,e,le,c,lf,e,m8,k,ma,i,p9,l,pd,n,q8,k,q9,l,15e,j,15f,m,16a,i,16e,j,19d,n,19f,m,1a8,f,1a9,h,1aa,f,1ad,h,1ae,g,1af,g,1ag,b,1ah,a,1ai,b,1al,a,1am,9,1an,9,1bg,b,1bi,b,1eh,a,1el,a,1fg,8,1fh,8,1qm,9,1qn,9,1ri,7,1rm,7,1ul,6,1un,6,1vg,8,1vh,8,1vi,7,1vl,6,1vm,7,1vn,6")),o=$(-1,5,"112011210110211120110121102132212220132122202131222022243214231243124213241324123222113311221213131221123113311112202311112022311112220342223113342223311342223131322023113322023311320223113320223131322203311322203131");let s=(e,a=e=>e)=>{for(var $=[],t=0;t<e;)$.push(a(t++));return $};function u(e,a=1){return e=1664525*e+1013904223|0,(a-=1)>0?u(e,a):e}let c={_3D:{base:i,squish:r,dimensions:3,pD:o,lookup:n}};function p(e,a,$){var t=0;let _=a[$++],r={next:void 0};for(;t<e.dimensions;){let l="xyzw"[t];r[l+"sb"]=a[$+t],r["d"+l]=-a[$+t++]-_*e.squish}return r}let[d,F]=function e(a){let $=[],t=a.dimensions,_=t*t;for(var r,l=0;l<a.pD.length;){let i=a.base[a.pD[l]],f,n;r=0;do n=p(a,i,r),f?f.next=n:$[l/_]=n,f=n,r+=t+1;while(r<i.length);n.next=p(a,a.pD,l+1),t>=3&&(n.next.next=p(a,a.pD,l+t+2)),4===t&&(n.next.next.next=p(a,a.pD,l+11)),l+=_}let o=[$,function e(a,$){var t;let _=a(),r=new Map;for(t=0;t<_.length;t+=2)r.set(_[t],$[_[t+1]]);return r}(a.lookup,$)];return a.base=void 0,a.lookup=void 0,o}(c._3D),m=new Uint8Array(256),x=new Uint8Array(256),h=new Uint8Array(s(256,e=>e));var y=u(e,3);return((e,a)=>{for(var $=0;$<256&&!0!==a($++););})(256,e=>{e=255-e;var a=((y=u(y))+31)%(e+1);a+=a<0?e+1:0,m[e]=h[a],x[e]=m[e]%24*3,h[a]=h[e]}),i=void 0,n=void 0,o=void 0,{noise3D(e,a,$){let t=x,i=m,n=f,o=(e+a+$)*l,s=e+o,u=a+o,c=$+o,p=Math.floor(s),d=Math.floor(u),h=Math.floor(c),y=(p+d+h)*r,g=e-(p+y),z=a-(d+y),v=$-(h+y);for(var b,S=(()=>{let e=s-p,a=u-d,$=c-h,t=e+a+$;return F.get(a-$+1|e-a+1<<1|e-$+1<<2|t<<3|t+$<<5|t+a<<7|t+e<<9)})(),U=0;void 0!==S;){let k=g+S.dx,D=z+S.dy,B=v+S.dz,q=2-k*k-D*D-B*B;q>0&&(b=t[(i[p+S.xsb&255]+(d+S.ysb)&255)+(h+S.zsb)&255],q*=q,U+=q*q*(n[b++]*k+n[b++]*D+n[b]*B)),S=S.next}return U*_}}}function Fa(e,a,$){let t=$;return void 0==t&&(t=0),{x:e,y:a,z:t}}function Fb(e){return Fa(e.x,e.y,e.z)}function Fc(e){let a=Fg(e);return 0==a?e:Ff(e,1/a)}function Fd(e,a){return Fa(e.x+a.x,e.y+a.y,e.z+a.z)}function Fe(e,a){return Fa(e.x*a.x,e.y*a.y,e.z*a.z)}function Ff(e,a){return Fa(e.x*a,e.y*a,e.z*a)}function Fg(e){return sqrt(sq(e.x)+sq(e.y)+sq(e.z))}function Fh(e,a){return e.x*a.x+e.y*a.y+e.z*a.z}function Fi(e,a){return Fa(e.y*a.z-e.z*a.y,e.z*a.x-e.x*a.z,e.x*a.y-e.y*a.x)}function Fj(e,a,$){return Fa(lerp(e.x,a.x,$),lerp(e.y,a.y,$),lerp(e.z,a.z,$))}function Fk(e,a,$,t){let _=cos(a),r=cos($),l=cos(t),i=sin(a),f=sin($),n=sin(t),o=Fa(e.x,e.y,e.z),s=_,u=i,c=0,p=-i,d=_,F=0,m=0,x=0,h=1;return o=Fa(o.x*s+o.y*p+o.z*m,o.x*u+o.y*d+o.z*x,o.x*c+o.y*F+o.z*h),s=r,u=0,c=f,p=0,d=1,F=0,m=-f,x=0,h=r,o=Fa(o.x*s+o.y*p+o.z*m,o.x*u+o.y*d+o.z*x,o.x*c+o.y*F+o.z*h),s=1,u=0,c=0,p=0,d=l,F=n,m=0,x=-n,h=l,o=Fa(o.x*s+o.y*p+o.z*m,o.x*u+o.y*d+o.z*x,o.x*c+o.y*F+o.z*h)}function Fl(e){let a=e.x,$=e.y,t=e.z,_=e.nOctaves,r=e.scaleFallout,l=e.weightFallout,i=0,f=1,n=0,o=1;for(let s=0;s<_;s++)n+=f,i+=norm(sNoise.noise3D(a*o,$*o,t*o),-1,1)*f,o*=r,f*=l;return map(i,0,n,0,1)}function Fm(e,a,$){let t=floor(a),_=floor($),r=a-t,l=$-_,i=e[t][_],f=e[t+1][_],n=e[t][_+1],o;return i*(1-r)*(1-l)+f*r*(1-l)+n*(1-r)*l+e[t+1][_+1]*r*l}function Fn(e){let a=e;e>16843008&&(a=16843008);let $=a,t=0;for(;$>=0;)t++,$-=65536;t--,$+=65536;let _=0;for(;$>=0;)_++,$-=256;_--,$+=256;let r=0;for(;$>=0;)r++,$-=1;return[--r,_,t]}function Fo(){let e=16843008;terrainMap.loadPixels();for(let a=0;a<terrainMap.width;a++)for(let $=0;$<terrainMap.height;$++){let t=(floor(a)+floor($)*mapW)*4,_=Fr(a,$,terrainNoiseScale,e)*constrain(pow(map($,.1*terrainMap.height,terrainMap.height,0,1),1),0,1),r=Fn(_);terrainMap.pixels[t+0]=r[2],terrainMap.pixels[t+1]=r[1],terrainMap.pixels[t+2]=r[0]}terrainMap.updatePixels()}function Fp(e){let a=e*e;return a/(2*(a-e)+1)}function Fq(){let e=16843008;fireMap.loadPixels();for(let a=0;a<fireMap.width;a++)for(let $=0;$<fireMap.height;$++){let t=(floor(a)+floor($)*mapW)*4,_=dist(houseX,houseZ,map(a,0,mapW,-14,14),map($,0,mapH,-18,18)),r=noise(.05*a,.05*$),l=constrain(constrain(map(_,0,40,0,1),0,1)+map(r,0,1,-1,1)*map(flameFactor,0,flameFactorMax,.2,0),0,1),i,f,n=constrain(map(flameFactor,0,flameFactorMax,0,1),0,1),o=.55*Fp(1-constrain(map(flameFactor,0,.5*flameFactorMax,0,1),0,1)),s=o+Fp(1-n);if(l>o&&l<s){f=constrain(pow(map(abs(lerp(o,s,.5)-l),0,(s-o)/2,1,.2),.5),0,1);let u=Fr(a,$,terrainNoiseScale,e),c=Fr(a,$+1,terrainNoiseScale,e);i=constrain(map(abs(c-u),0,1e5,constrain(map(flameFactor,0,flameFactorMax,0,.7),0,1),1),0,1)*(.9*e)*f+.1*e;let p=Fn(i);fireMap.pixels[t+0]=p[2],fireMap.pixels[t+1]=p[1],fireMap.pixels[t+2]=p[0]}else if(l>s){let d=Fn(constrain(map(l,s,s+.1*map(flameFactor,0,flameFactorMax,1,0),.1*e,0),0,.1*e));fireMap.pixels[t+0]=d[2],fireMap.pixels[t+1]=d[1],fireMap.pixels[t+2]=d[0]}else{let F=Fn(.1*e);fireMap.pixels[t+0]=F[2],fireMap.pixels[t+1]=F[1],fireMap.pixels[t+2]=F[0]}}fireMap.updatePixels()}function Fr(e,a,$,t){return pow(Fl({x:(mapW/2-e)*$*pow(map(a,0,mapH,terrainPerspectiveFactor,1),3)+1e3,y:a*$*.9*pow(map(a,0,mapH,.7,1),3)+1e3,z:0,nOctaves:4,scaleFallout:2,weightFallout:.35}),1.5)*t}function Fs(e,a,$,t){return Fr(e+1,a,$,t)-Fr(e,a,$,t)}function Ft(e,a,$,t){return Fr(e,a+1,$,t)-Fr(e,a,$,t)}function Fu(e,a){let $,t=1,_,r=1;e==mapW-1?($=e-1,t=-1):$=e+1,a==mapH-1?(_=a-1,r=-1):_=a+1;let l=Fm(terrainHeightMap,$,a)-Fm(terrainHeightMap,e,a),i=Fm(terrainHeightMap,e,_)-Fm(terrainHeightMap,e,a);return Fa(l*t,i*r)}function Fv(e,a){let $,t=1,_,r=1;return e==mapW-1?($=e-1,t=-1):$=e+1,a==mapH-1?(_=a-1,r=-1):_=a+1,Fa((Fu($,a).x-Fu(e,a).x)*t,(Fu(e,_).y-Fu(e,a).y)*r)}function Fw(e,a){let $=1e-9*cloudTimeOffset;return Fl({x:(targetSzX/2-e)*.008*map(a,0,targetSzY*map(skyAngle,-.3,-.2,.2,.5),.8,1)+13200+$,y:.008*a+10216323+$,z:$,nOctaves:4,scaleFallout:2.9,weightFallout:.3})*map(a,0,targetSzY*map(skyAngle,-.3,-.2,.2,.5),.3,1)*map(Fl({x:(targetSzX/2-e)*.004*map(a,0,targetSzY*map(skyAngle,-.3,-.2,.2,.5),.8,1)+13200+$,y:$,z:$,nOctaves:2,scaleFallout:3,weightFallout:.8}),0,1,.4,1)}function Fx(e,a){let $=Fa(floor(map(e.x,0,targetSzX,0,bufferWidth)),floor(map(e.y,0,targetSzY,0,bufferHeight)));return!!($.x<0)||!!($.x>=bufferWidth)||!!($.y<0)||!!($.y>=bufferHeight)||0==a[$.x][$.y]}function Fy(e,a,$,t){let _=map(e,0,targetSzX,0,bufferWidth),r=map(a,0,targetSzY,0,bufferHeight);if(_<0||_>=bufferWidth||r<0||r>=bufferHeight)return;let l=$*$;for(let i=-$;i<=$;i++){let f=floor(_+i);if(f>=0&&f<bufferWidth)for(let n=-$;n<=$;n++){let o=floor(r+n);o>=0&&o<bufferHeight&&sq(_-f)+sq(r-o)<l&&(t[f][o]=0)}}}function Fz(e,a,$,t,_){return sq(a-e.x)/sq(t)+sq($-e.y)/sq(_)<=1}function FA(e,a,$,t,_){let r=map(e,0,targetSzX,0,bufferWidth),l=map(a,0,targetSzY,0,bufferHeight);if(!(r<0)&&!(r>=bufferWidth)&&!(l<0)&&!(l>=bufferHeight))for(let i=-$;i<=$;i++){let f=floor(r+i);if(f>=0&&f<bufferWidth)for(let n=-t;n<=t;n++){let o=floor(l+n);o>=0&&o<bufferHeight&&Fz(Fa(f,o),r,l,$,t)&&(_[f][o]=0)}}}function FB(e,a,$,t){let _=2*max(ceil(dist(e.x,e.y,a.x,a.y)),1);for(let r=0;r<_;r++){let l=map(r,0,_-1,0,1),i=Fj(e,a,l);Fy(i.x,i.y,$,t)}}function FC(e,a){let $=20,t=random(-TAU,TAU);for(let _=0;_<$;_++){let r=map(_,0,$,0,TAU)+t,l;l=Fd(e,Fk(Fa(1.1*a,0),r,0,0)),Fx(l,packingBuffer)||el_pts.push(l)}}class Random{constructor(){this.useA=!1;let e=function(e){let a=parseInt(e.substr(0,8),16),$=parseInt(e.substr(8,8),16),t=parseInt(e.substr(16,8),16),_=parseInt(e.substr(24,8),16);return function(){t|=0;let e=((a|=0)+($|=0)|0)+(_|=0)|0;return _=_+1|0,a=$^$>>>9,$=t+(t<<3)|0,t=(t=t<<21|t>>>11)+e|0,(e>>>0)/4294967296}};this.prngA=new e(tokenData.hash.substr(2,32)),this.prngB=new e(tokenData.hash.substr(34,32));for(let a=0;a<1e6;a+=2)this.prngA(),this.prngB()}random_dec(){return this.useA=!this.useA,this.useA?this.prngA():this.prngB()}}let R=new Random,targetSzX,targetSzY,heightToWidth=.75,sizeAdjust,mag=1,canvSzX,canvSzY,drawInd=0,packingBuffer=[],bufferWidth,bufferHeight,el_pts=[],packedPoints=[],bufferGfx,fireMap,terrainMap,mapW=mapH=400,terrainNoiseScale=.021,terrainHt=8,terrainPerspectiveFactor,houseX,houseZ,houseW,houseH,houseD,houseScale,houseAngle,sunPosX,sunPosY,sunPosZ,vegetationDir,flameFactor,flameFactorMax=4,cloudTimeOffset,skyType,skyAngle,timeOffset,burnStart,burnDuration,inkColor,materials=[],lightBuffer,materialBuffer,normalBuffer,xyzBuffer,shaderBuffer,myShader,fragShader=`precision highp float;uniform float U0,U8,U9,U10,U11,U12;uniform sampler2D U1,U2;uniform vec3 U5,U7;uniform vec2 U6,U4;uniform int U3;varying vec2 vTexCoord; #define DMS 100 #define DMD 100. #define DSD 0.005 #define DZ 8.0 #define DTH 4.0 #define PI 3.14159265359 #define E 2.7182818284590452353602874713527 float F0(float a1,float a2,float a3,float a4,float a5){return a4+(a1-a2)*(a5-a4)/(a3-a2);}float F1(vec2 a1,sampler2D a2){vec4 a3=texture2D(a2,a1*.03+vec2(.5));return(a3.x*16777216.+a3.y*65536.+a3.z*256.)/16843008.;}vec2 F2(vec2 a1,sampler2D a2){float d=F1(a1,a2);vec2 e=vec2(1,0),n=d-vec2(F1(a1-e.xy,a2),F1(a1-e.yx,a2));return n;}vec3 F3(vec3 p,vec3 t){return p-t;}vec3 F4(vec3 p,vec3 r){vec3 q=p;float qx=q.x,qy=q.y*cos(r.x)-q.z*sin(r.x),qz=q.y*sin(r.x)+q.z*cos(r.x);q.x=qx;q.y=qy;q.z=qz;qx=q.x*cos(r.y)+q.z*sin(r.y);qy=q.y;qz=q.z*cos(r.y)-q.x*sin(r.y);q.x=qx;q.y=qy;q.z=qz;qx=q.x*cos(r.z)-q.y*sin(r.z);qy=q.x*sin(r.z)+q.y*cos(r.z);qz=q.z;q.x=qx;q.y=qy;q.z=qz;return q;}float F5(vec3 p,vec3 b){vec3 q=abs(p)-b;return length(max(q,0.))+min(max(q.x,max(q.y,q.z)),0.);}float F6(vec3 p,float h,float r){float a=clamp(F0(p.y,0.,h,0.,1.),0.,1.),b=F0(sin(a*PI*4.),-1.,1.,1.-a,1.);p.y-=clamp(p.y,0.,h);return length(p)-r*b*pow(1.-a,1.5);}float F7(float d1,float d2){return max(d1,-d2);}float F8(vec3 p,vec3 b){float a1=F5(p,b),a2=F5(p+vec3(0,.08,0),vec3(b.x*.9,(b.y-.08)*.9,b.z*.9)),a3=F7(a1,a2),a4=F5(F3(F4(p,vec3(0,0,PI*.025/b.x)),vec3(0,b.y,0)),vec3(b.x*2.,.1,b.z*2.)),a5=F5(p+vec3(-.6*b.x,-b.y+.1,.2*b.z),vec3(.05,.1,.05)),a6=min(F7(a3,a4),a5),a7=F5(p+vec3(b.x-.3,b.y-.25,b.z),vec3(.1,.25,.1)),a8=F7(a6,a7),a9=F5(p+vec3(b.x-.55,b.y-.4,b.z),vec3(.1)),a10=F5(p+vec3(b.x-.8,b.y-.4,b.z),vec3(.1)),a11=F5(p+vec3(-b.x,b.y-.4,0),vec3(1,.1,.1)),a12=F7(F7(F7(a8,a9),a10),a11),a13=F5(F3(F4(p,vec3(0,0,PI*.025/b.x)),vec3(0,b.y-.11,0)),vec3(b.x+.1,.01,b.z+.1));return min(a13,a12);}float F9(vec3 p,float a1){float a2=0.;if(p.x>=-10.&&p.x<=10.&&p.z>=-10.&&p.z<=10.)a2=F1(p.xz,U1)*a1;else{if(p.z>10.)return DMD;a2=0.;}return p.y-a2;}float F10(vec3 p,float a1,float a2,vec2 a3){vec3 _p=F4(p,vec3(0,a2,0)),w;_p=F3(_p,vec3(a3.x,0,a3.y));vec2 m=floor(_p.xz/a1),a4,c,a5,a6;float n=107.*m.x+113.*m.y+131.,a7,a8,dx,dz;a4=fract(n*fract(n/vec2(PI,E)))*2.-1.;c=a1*m+a1/2.+a4*a1*.25;a5=F4(F3(vec3(c.x,0,c.y),vec3(-a3.x,0,-a3.y)),vec3(0,-a2,0)).xz;w=vec3(_p.x-c.x,_p.y-F1(a5,U1)*DTH,_p.z-c.y);a6=F2(a5,U1);a7=0.;a8=dot(a6,U4);a7=clamp(a8*70.,0.,1.)*a1*.25;dx=p.x-U6.x;dz=p.z-U6.y;a7*=min(F0(pow(max(dx*dx+dz*dz,0.),.5),0.,.5,0.,1.),1.);a7*=step(.05,a7)*step(0.,a8);return mix(length(w)-a7,DMD,p.x>=-10.&&p.x<=10.&&p.z>=-10.&&p.z<=9.7?0.:1.);}struct S0{float d;bool burned;float burnAmt;};S0 F11(vec3 p,float a1,float a2,vec2 a3){vec3 _p=F4(p,vec3(0,a2,0)),w;_p=F3(_p,vec3(a3.x,0,a3.y));vec2 m=floor(_p.xz/a1),a4,c,a5;float n=107.*m.x+113.*m.y+131.,a6,a7,a8,a9;a4=fract(n*fract(n/vec2(PI,E)))*2.-1.;c=a1*m+a1/2.+a4*a1*.125;a5=F4(F3(vec3(c.x,0,c.y),vec3(-a3.x,0,-a3.y)),vec3(0,-a2,0)).xz;w=vec3(_p.x-c.x,_p.y-F1(a5,U1)*DTH,_p.z-c.y);a6=a1*.65;a7=F1(p.xz,U2);a8=1.-step(.1,a7);a6*=mix(F0(a7,.1,1.,0.,2.5),1.,a8);a9=(a4.x-sin((w.y+(a4.x+20.)*PI+w.x+(a4.y+20.)*PI)*(10./min(a1,1.))-U11*(a4.y+21.)))*.05;return S0(mix(mix(F6(w+vec3(a9,0,0),a6,a6*.115),F5(F4(w,vec3(PI*.25*a4.x,0,PI*.25*a4.y)),vec3((a4.y*.5+.5)*.5+.1,2,(a4.x*.5+.5)*.5+.1)),a8),DMD,p.x>=-10.&&p.x<=10.&&p.z>=-10.&&p.z<=10.?0.:1.),a8==1.,clamp(.1-a7,0.,.1));}struct DM{float d;int m;float f;};DM min(DM a,DM b){bool ab=step(b.d,a.d)==0.;return DM(ab?a.d:b.d,ab?a.m:b.m,ab?a.f:b.f);}DM F12(vec3 p,bool a1){float a2=F10(p,.9,PI/1.9,vec2(1312.231124,120)),a3=F10(p,.8,PI/5.,vec2(.1,0)),a4=F10(p,.7,PI/1.2,vec2(0)),a5=F10(p,.5,PI/3.,vec2(.1,1.1231)),a6=F10(p,.35,PI/7.,vec2(-.3111,1.31421)),a7,a8,a9,a10,a11,a14,a17,a19;S0 f1=F11(p,.5,PI/1.123,vec2(1312.231124,120.1)),f2=F11(p,1.,PI/8.9,vec2(-12.1124,10.2)),f3=F11(p,1.5,-PI/2.9,vec2(112.2324,20.3)),f4=F11(p,1.4,-PI/132.21319,vec2(198.534212324,22.8931218));a7=mix(f1.d,DMD,a1||f1.burned?1.:0.);a8=mix(f2.d,DMD,a1||f2.burned?1.:0.);a9=mix(f3.d,DMD,a1||f3.burned?1.:0.);a10=mix(f4.d,DMD,a1||f4.burned?1.:0.);a11=min(min(min(a7,a8),a9),a10);DM a12=DM(a11,4,1.),a16,a18,a20,d;vec3 a13=F4(vec3(U7.x,0,U7.z),vec3(0,U9,0)),a15;a14=min(F1(U6+vec2(-a13.x,a13.z),U1),F1(U6+vec2(-a13.x,-a13.z),U1));a14=min(a14,F1(U6+vec2(a13.xz),U1));a14=min(a14,F1(U6+vec2(a13.x,-a13.z),U1));a15=F4(F3(p,vec3(U6.x,a14*DTH+U7.y*.95*U8,U6.y)),vec3(0,U9,0));a16=DM(F8(a15/U8,U7)*U8,3,1.);a17=F5(a15/U8,U7)*U8;a18=DM(min(min(min(min(a2,a3),a4),a5),a6),1,1.);if(f1.burned)a18.d=F7(a18.d,f1.d),a16.d=F7(a16.d,f1.d),a17=F7(a17,f1.d);if(f2.burned)a18.d=F7(a18.d,f2.d),a16.d=F7(a16.d,f2.d),a17=F7(a17,f2.d);if(f3.burned)a18.d=F7(a18.d,f3.d),a16.d=F7(a16.d,f3.d),a17=F7(a17,f3.d);if(f4.burned)a18.d=F7(a18.d,f4.d),a16.d=F7(a16.d,f4.d),a17=F7(a17,f4.d);a18.d=F7(a18.d,a17);a19=F1(p.xz,U2);a20=DM(F7(F9(p,DTH),a17),int(1.-step(.1,a19))*5,(f1.burnAmt+f2.burnAmt+f3.burnAmt+f4.burnAmt)*2.5);d=min(a18,a20);d=min(a16,d);return min(d,a12);}DM F13(vec3 ro,vec3 rd,bool a1){float dO=0.,f,dS;int m=-1;f=-1.;dS=1.;bool a2=dO>DMD||dS<DSD;for(int i=0;i<DMS;i++){vec3 p=ro+rd*dO;DM dm=F12(p,a1);m=a2?m:dm.m;f=a2?f:dm.f;dS=a2?dS:dm.d;dO+=a2?0.:dS;a2=dO>DMD||dS<DSD;}return DM(dO,m,f);}vec3 F14(vec3 p){float d=F12(p,false).d;vec2 e=vec2(.005,0);vec3 n=vec3(d)-vec3(F12(p-e.xyy,false).d,F12(p-e.yxy,false).d,F12(p-e.yyx,false).d);return normalize(n);}vec3 F15(vec3 p,vec3 a1,float a2,float a3){vec3 a4=a1-p,l=normalize(a4),n;float a5=length(a4),a6,d,a7;n=F14(p);a6=clamp(dot(n,l)/max(pow(a5*a2,a3),1e-5),0.,1.);d=F13(p+n*DSD,l,true).d;a7=min(step(a5,d)+.1,1.);a6*=a7;return vec3(a6);}float F16(vec2 st){return fract(sin(dot(st.xy,vec2(12.9898,78.233)))*43758.5453123);}vec3 F17(vec3 p){vec3 a1=F14(p),a2=p+a1*DSD*2.;float res=1.,t=0.;for(int i=1;i<256;i++){float a3=step(1e4,t),h;vec3 a4=a2+a1*t,a5=vec3(F16(vec2(a4)),F16(vec2(a4.x+float(i),a4.y)),F16(vec2(a4.x+float(i+1),a4.y)));a4+=(a5*2.-1.)*.05;DM dm=F12(a4,false);h=dm.d;res=mix(mix(min(res,h),res,a3),res,dm.m==4?0.:1.);t+=mix(h,0.,a3);}return vec3(.1/max(1e-4,res),0,0);}void main(){vec2 uv=vec2(F0(vTexCoord.x,0.,1.,-(U0<=1.?1./U0:1.),U0<=1.?1./U0:1.),F0(vTexCoord.y,0.,1.,-1.,U0>1.?U0*1.5:1.));vec3 col=vec3(0),ro=vec3(0,4.4,-10)+vec3(uv*4.,0),rd=normalize(vec3(0,U12,1)),p;DM dm=F13(ro,rd,false);float d=dm.d;p=ro+rd*d;if(U3==0){vec3 a1=F15(p,U5,2e-4,.2),a2=F15(p,vec3(U6.x,F1(U6,U1)*DTH+U7.y*.5*U8,U6.y)-vec3(cos(U9),0,sin(U9))*.3*U8,1.,2.),a3=vec3(1,0,0),a4,a5;if(dm.m!=4)a3=F17(p)*.25*step(.15,U10);a3*=dm.m==0?4.:1.;a4=a1;a4+=a2*(1.-step(.95,U10));a4+=a3;a5=vec3(clamp(a4.x,0.,1.),clamp(a4.y,0.,1.),clamp(a4.z,0.,1.));col=mix(a5,vec3(F0(uv.y,-1.,1.,0.,1.)),step(DMD,d));}else if(U3==1){vec3 nrm=F14(p);col=vec3(F0(nrm.x,-1.,1.,0.,1.),F0(nrm.y,-1.,1.,0.,1.),F0(nrm.z,-1.,1.,0.,1.));}else if(U3==2)col=vec3(F0(p.x,-10.,10.,0.,1.),F0(p.y,0.,2.,0.,1.),F0(p.z,-10.,10.,0.,1.));else if(U3==3){if(dm.m==0)col=vec3(1,0,0);else if(dm.m==1)col=vec3(0,1,0);else if(dm.m==2)col=vec3(0,0,1);else if(dm.m==3)col=vec3(1,0,1);else if(dm.m==4)col=vec3(1,1,0);else if(dm.m==5)col=vec3(0,dm.f,dm.f);if(d>=DMD)col=vec3(0,0,1);}gl_FragColor=vec4(col,1);}`,vertShader=` precision lowp float; attribute vec3 aPosition; attribute vec2 aTexCoord; varying vec2 vTexCoord; void main() { vTexCoord = aTexCoord;// * vec2(0.5, 0.5); vec4 positionVec4 = vec4(aPosition, 1.0); positionVec4.xy = positionVec4.xy * 2.0 - 1.0; gl_Position = positionVec4; }`,sNoise,rSeed,nSeed;function setup(){handleUrlParams();let e="#dfd8ce";document.querySelector("html").style.width="100%",document.querySelector("html").style.height="100%",document.querySelector("html").style.margin=0,document.querySelector("html").style.padding=0,document.querySelector("html").style.backgroundColor=e,document.querySelector("html").style.display="flex",document.querySelector("html").style.justifyContent="center",document.querySelector("html").style.alignItems="center",document.querySelector("body").style.width="100%",document.querySelector("body").style.height="100%",document.querySelector("body").style.margin=0,document.querySelector("body").style.padding=0,document.querySelector("body").style.backgroundColor=e,document.querySelector("body").style.display="flex",document.querySelector("body").style.justifyContent="center",document.querySelector("body").style.alignItems="center",print(tokenData),rSeed=floor(1e8*R.random_dec()),nSeed=floor(1e8*R.random_dec()),randomSeed(rSeed),noiseSeed(nSeed),sNoise=new openSimplexNoise(nSeed),FI(),print("sizeAdjust",sizeAdjust=canvSzX/targetSzX),createCanvas(canvSzX,canvSzY),background(e),pixelDensity(1);inkColor=random([color("#01111f"),color("#011f01"),color("#510000"),color("#000"),color("#000"),color("#000"),color("#000"),color("#000"),color("#000"),color("#000")]),sunPosX=8*random(-1,1),sunPosY=7,sunPosZ=20,terrainPerspectiveFactor=random(.65,1),print("terrainPerspectiveFactor",terrainPerspectiveFactor),vegetationDir=random(0,PI),FK(),print("cloudTimeOffset",cloudTimeOffset),print("U11",timeOffset),print("U10",flameFactor),skyType=random([0,1]),skyAngle=-random(.2,.3),print("skyType",skyType),print("U12",skyAngle),FJ(),FM(),(terrainMap=createGraphics(mapW,mapH)).background(0),Fo(),(fireMap=createGraphics(mapW,mapH)).background(0),Fq(),FL(),print("packing")}let packingHouse=!0,packingLand=!1,packingSky=!1,packingClouds=!1,fail=0;function draw(){if(1==frameCount)print("rendering light map",frameCount),shaderBuffer.push(),shaderBuffer.shader(myShader),myShader.setUniform("U0",heightToWidth),myShader.setUniform("U1",terrainMap),myShader.setUniform("U2",fireMap),myShader.setUniform("U3",0),myShader.setUniform("U4",[cos(vegetationDir),sin(vegetationDir)]),myShader.setUniform("U5",[sunPosX,sunPosY,sunPosZ]),myShader.setUniform("U6",[houseX,houseZ]),myShader.setUniform("U7",[houseW,houseH,houseD]),myShader.setUniform("U8",houseScale),myShader.setUniform("U9",houseAngle),myShader.setUniform("U10",min(flameFactor,flameFactorMax)),myShader.setUniform("U11",timeOffset),myShader.setUniform("U12",skyAngle),shaderBuffer.rect(-targetSzX/2,-targetSzY/2,targetSzX,targetSzY),shaderBuffer.pop(),lightBuffer.image(shaderBuffer,0,0),image(lightBuffer,0,0,width,height),lightBuffer.loadPixels();else if(2==frameCount)print("rendering normal map",frameCount),shaderBuffer.push(),shaderBuffer.shader(myShader),myShader.setUniform("U3",1),shaderBuffer.rect(-targetSzX/2,-targetSzY/2,targetSzX,targetSzY),shaderBuffer.pop(),normalBuffer.image(shaderBuffer,0,0),normalBuffer.loadPixels();else if(3==frameCount)print("rendering xyz map",frameCount),shaderBuffer.push(),shaderBuffer.shader(myShader),myShader.setUniform("U3",2),shaderBuffer.rect(-targetSzX/2,-targetSzY/2,targetSzX,targetSzY),shaderBuffer.pop(),xyzBuffer.image(shaderBuffer,0,0),xyzBuffer.loadPixels();else if(4==frameCount){print("rendering material map",frameCount),shaderBuffer.push(),shaderBuffer.shader(myShader),myShader.setUn
*Life and Love and Nothing is released as part of reGEN, a special charitable auction of generative art to raise funds for Cure Alzheimer’s Fund, curated by Alex Estorick and Foteini Valeonti in collaboration with The Giving Block.* This is an illustration of a wildfire burning through a cabin and the surrounding hillside, rendered stylistically with pen and paper in mind. Once a year, the fire will ignite and burn until the cabin and the hillside are consumed. After burning, the cabin and the hillside will regenerate, and the cycle will start again. The cabin represents a person, and the surrounding hillside their mind and memories. The fire represents disease, burning through the person’s memories from the most recent and least established, through to the oldest and most ingrained. My hope is that this can illustrate both the pain caused by disease and the beauty of the time we have to hold onto memories and loved ones. Life is short, bodies degrade, houses burn. But, before that, there is life; there is love; there is creation – these things are beautiful. Consider where you are placing your efforts. Pursue what is important. Take the time to see someone you love. Take the time to do something you love. There’s only so much time.
r(let ec=0;ec<800*(targetSzW/targetSz)*.30000000000000004;ec++){let em=eh-20,ed=targetSzW+eh+20,eu=_random(em,ed),ef=_random(targetSz-r)+r,ey=ef+10+1e3,eg=map(ef,0,targetSz,0,mapW*$),e8=map(ef,0,targetSz,mapW-1,mapW*a),e3=constrain(floor(map(eu,em,ed,mapTrim+eg,e8-mapTrim)),0,mapW-1),ex=constrain(floor(map(ef,r,targetSz,floor(.7*mapH),mapH-1-mapTrim)),0,mapH-1),eS=hMap[e3][ex];eu+=cos(eS)*warpSz,ef+=sin(eS)*warpSz,ef+=map(eS,0,2*TAU,0,1)*terrainHt*1.5;let e1=_normalize(hMapNormal(e3,ex)),e2=_dot(e1,lgt);if(0!=eS){let e7=_random(4,4),eb=_createV(1,0);eb=_rotate(eb,2*noise(eu*noiseScale,ef*noiseScale,.1*_random(TAU))*TAU,0,0),eb=_scalarMult(eb,_random(e7));let ez=constrain(1.1*norm(e2,-1,1),0,1),e4=noise(e3*noiseScale*4+1e3,ex*noiseScale*4+1e3);if(.5>_random(1)){let e5=new SketchyEllipse(eu+eb.x,ef+eb.y,e7,e7,1,!1);e5.z=ey,e5.setWeight(2.5),e5.setMaxV(.3),e5.setAcc(.01),e5.setDensity(1),e5.setWobble(.1),e5.setAngle(_random(TAU));let e6=paletteColor(lerp(e4,ez,constrain(2*abs(ez-.5)+.1*_random(-1,1),0,1)));e5.setColor(color(red(e6),green(e6),blue(e6),64)),shapes.push(e5)}let eW=noise(e3*noiseScale*2+143283,ex*noiseScale*2+12739);if(eS<1.5*PI&&ex>4&&abs(e1.x)<3*plantThresh){let eP=noise(e3*noiseScale*9+1009,ex*noiseScale*9+1239);if(_random(1)<.2*map(abs(e3-mapW/2),0,mapW/2,.5,1)){if(eW>.15){if(_random(1)<.1*map(abs(e3-mapW/2),0,mapW/2,.8,1)&&e3>12&&e3<mapH-1-12&&ex>floor(.7*mapH)+2){let eC=-PI/2+_random(-1,1)*PI/8,eM=map(eP,0,1,5,12)*map(ef,l,targetSz,2,2.5);addCactus(eu+cos(eC)*eM*2,ef+sin(eC)*eM*2,eu+cos(eC)*eM*2,ef+sin(eC)*eM*2,ey-10,ez,eM,round(_random(1,3)),eC)}}else if(10.5>_random(1)&&e3>11&&e3<mapH-1-11)for(let ew=0;ew<2;ew++)addFlowerClump(eu+_random(-1,1)+.1,ef+_random(-1,1)+.1,ey-5,ez,map(eP,0,1,6,15)),addBush(eu,ef,ey-4,ez,map(eP,0,1,10,20)*map(ef,l,targetSz,4,8),e3,ex);addBush(eu,ef,ey-10,ez,map(eP,0,1,10,100)*map(ef,l,targetSz,4,8),e3,ex)}let eA=map(eP,0,1,2,3),eF=map(eP,0,1,1,2);for(let eV=-eA;eV<=eA;eV++)for(let ek=-eF;ek<=eF;ek++){let eH=floor(e3+eV+cos(lightAngle)*eA*.5),eD=floor(ex+ek+sin(lightAngle)*eF*.5);eH<0||eH>=mapW||eD<0||eD>=mapH||(lMap[eH][eD]=lerp(lMap[eH][eD],-1,.7))}}}}for(let ev=0;ev<1500.0000000000002;ev++){let eT=-eh-20,eq=targetSzW+eh+20,eE=_random(eT,eq),eN=_random(targetSz-r)+r,eL=eN+1e3,eB=map(eN,0,targetSz,0,mapW*$),eX=map(eN,0,targetSz,mapW-1,mapW*a),eY=constrain(floor(map(eE,eT,eq,mapTrim+eB,eX-mapTrim)),0,mapW-1),eI=constrain(floor(map(eN,r,targetSz,floor(.7*mapH),mapH-1-mapTrim)),0,mapH-1),eR=hMap[eY][eI];eE+=cos(eR)*warpSz,eN+=sin(eR)*warpSz,eN+=map(eR,0,2*TAU,0,1)*terrainHt*1.5;let ej=_normalize(hMapNormal(eY,eI)),eG=lMap[eY][eI],eQ=_magSq(hMapNormal2(eY,eI)),eU=max(1,floor(map(pow(abs(eN-eL+1e3),1),0,pow(abs(terrainHt)+abs(warpSz),1),1,_random(1,3))));for(let eJ=0;eJ<eU;eJ++){let eK=constrain(map(eQ,1e-4,8e-4,24,15),15,24),eO=new SketchyEllipse(eE,eN,5,eK*_random(.9,1.1),_random(1,2));eO.z=eL,eO.setWeight(3.5),eO.setMaxV(1),eO.setAcc(.02),eO.setDensity(2.5),eO.setWobble(.2),eO.setAngle(map(ej.x,1,-1,0,PI/2)+PI/4+(2*round(_random(1))-1)*PI+map(noise(eE*noiseScale,eN*noiseScale),0,1,-1,1)*PI/8*0);for(let eZ=0;eZ<eO.points.length;eZ++){let e9=eO.points[eZ],te=(2*noise(e9.x*noiseScale*4+100,e9.y*noiseScale*4+100)-1)*2*TAU;e9.x+=2*cos(te),e9.y+=2*sin(te)}let tt=1*norm(eG,-1,1),t$=noise(eY*noiseScale*4+1e3,eI*noiseScale*4+1e3),ta=paletteColor(lerp(t$,tt,map(abs(tt-.5),-.5,.5,.5,1)));eO.setColor(color(red(ta),green(ta),blue(ta),_random(64,100))),shapes.push(eO)}}for(let t_=0;t_<5e3;t_++){let ts=targetSzW+20,tl=_random(-20,ts),tr=_random(targetSz),tn=-1e4+tr,to=constrain(floor(map(tl,-20,ts,mapTrim,mapW-1-mapTrim)),0,mapW-1),ti=constrain(floor(map(tr,0,targetSz,mapTrim,mapH-1-mapTrim)),0,mapH-1);noise(to*noiseScale*3,ti*noiseScale*3);let tp=new SketchyEllipse(tl,tr,6,21*_random(.9,1.2),_random(1,1.5));tp.z=tn,tp.setWeight(3),tp.setMaxV(1),tp.setAcc(.02),tp.setDensity(2.5),tp.setWobble(.2);for(let t0=0;t0<tp.points.length;t0++){let th=tp.points[t0],tc=(2*noise(th.x*noiseScale*4+100,th.y*noiseScale*4+100)-1)*2*TAU;th.x+=2*cos(tc),th.y+=2*sin(tc)}let tm=noise(to*noiseScale*2-132,ti*noiseScale*2-132)*TAU,td=noise(to*noiseScale*5+0*cos(tm),ti*noiseScale*5+0*sin(tm)),tu,tf,ty=to-skyCenterX,tg=ti-skyCenterY,t8=sqrt(sq(ty)+sq(tg));if(ti<mapH*_){tu=skyPaletteColor(constrain(pow(map(t8,0,mapW/1.2,1,0),3)+.2*_random(-1,1),0,1));let t3=_rotate(_createV(1,0),atan2(tg,ty)-PI,0,0),tx=_rotate(_createV(1,0),td*PI,0,0),tS=map(t8,0,mapW/2,0,1),t1=_createV(lerp(t3.x,tx.x,tS),lerp(t3.y,tx.y,tS));tf=atan2(t1.y,t1.x)}else{let t2=ti-(mapH*_+(mapH*_-skyCenterY)),t7=sqrt(sq(to-skyCenterX)+sq(t2));tu=oceanPaletteColor(constrain(lerp(pow(map(t7,0,mapW/1.2,1,0),2),map(ti,.4*mapH,mapH,.8,0),.2)+.1*_random(-1,1),0,1)),tf=map(td,0,1,-1,1)*PI/4+PI/2+PI/8}let tb=norm(tf,0,TAU);tb=round(100*tb)/100,tb*=TAU,tf=lerp(tf,tb,.3),tp.setAngle(tf),tp.setColor(color(red(tu),green(tu),blue(tu),64)),shapes.push(tp)}shapes.sort(function(e,t){return-(e.z-t.z)})}let renderingIndex=0;function draw(){if(saving)++saveTime>80&&(hMap=null,shapes=null,window.location.reload(),noLoop());else{push(),translate(.5*width*(1-scl),.5*height*(1-scl)),scale(scl*sizeAdj,scl*sizeAdj),translate(0,-minY+(targetSz-(maxY-minY))/2),translate(-minX+(targetSzW-(maxX-minX))/2,0);for(let e=0;e<1e3;e++)if("done"==shapes[shapes.length-1].update()&&(renderingIndex++,shapes.pop(),0==shapes.length)){saveMode?(doDownload=!0,saving=!0):noLoop();break}pop(),doDownload&&(saveCanvas(canv,tokenData.hash,"png"),doDownload=!1)}}function addFlowerClump(e,t,$,a,_){let s=floor(_random(2,3));for(let l=0;l<s;l++){let r=_rotate(_createV(_random(5),0),_random(TAU),0,0);addFlower(e+r.x,t+.5*r.y,$,a,_,l)}}function addFlower(e,t,$,a,_,s){let l=_createV(e,t),r=sNoise.noise3D(e*noiseScale,t*noiseScale,2*s),n=_rotate(_createV(0,-5),r*PI/6,0,0),o=2*floor(_random(2,_));for(let i=0;i<o;i++){let p=new SketchyWeightedLine(l.x,l.y,l.x+1.5*n.x,l.y+1.5*n.y,.4,.1);p.setWeight(1),p.setMaxV(.1),p.setAcc(.01),p.setDensity(1),p.setWobble(.05),p.z=$;let h=treePaletteColor(map(i,0,o-1,0,.4));if(p.setColor(color(red(h),green(h),blue(h),64)),shapes.push(p),_random(1)<map(i,0,o-1,1,0)){let c=_rotate(n,PI/2,0,0),m=.8*_random(4,6),d=new SketchyEllipse(l.x+.5*c.x,l.y+.5*c.y,m*map(i,0,o-1,2,1),.8*m,.5,!1);d.z=$+.001,d.setWeight(2.5),d.setMaxV(.2),d.setAcc(.02),d.setDensity(2),d.setWobble(.1),d.setAngle(_random(TAU)),h=treePaletteColor(_random(.5)),d.setColor(color(red(h),green(h),blue(h),64)),shapes.push(d)}l=_add(l,n);let u=2*s+6*i;n=_rotate(n,-(r=sNoise.noise3D(e*noiseScale,t*noiseScale,u))*PI/4,0,0)}let f=floor(_random(5,7)),y=_random(TAU),g=a;for(let x=0;x<f;x++){if(.2>_random(1))continue;let S=1.2*_random(4,6),b=map(x,0,f,0,TAU)+_random(-1,1)*(TAU/f)*.4+y,z=_rotate(_createV(.8*S,0),b,0,0),W=new SketchyEllipse(l.x+.5*n.x+z.x,l.y+.5*n.y+z.y,.5*S,S,.5,!1);W.z=$+.001,W.setWeight(2.5),W.setMaxV(.2),W.setAcc(.02),W.setDensity(2),W.setWobble(.1),W.setAngle(b+PI/2);let P=petalPaletteColor(constrain(g+.2*_random(-1,1),0,1));W.setColor(color(red(P),green(P),blue(P),64)),shapes.push(W);let C=new SketchyEllipse(l.x+.5*n.x+z.x,l.y+.5*n.y+z.y,.505*S,1.01*S,.5,!1);C.z=$+1e-4,C.setWeight(2.5),C.setMaxV(.2),C.setAcc(.02),C.setDensity(2),C.setWobble(.1),C.setAngle(b+PI/2),P=petalPaletteColor(0),C.setColor(color(red(P),green(P),blue(P),64)),shapes.push(C)}let M=.8*_random(4,6),w=new SketchyEllipse(l.x+.5*n.x,l.y+.5*n.y,.6*M,M,.5,!1);w.z=$+.002,w.setWeight(2.5),w.setMaxV(.2),w.setAcc(.02),w.setDensity(2),w.setWobble(.1),w.setAngle(_random(TAU));let A=treePaletteColor(0);w.setColor(color(red(A),green(A),blue(A),64)),shapes.push(w)}function addTree(e,t,$,a,_){let s=new SketchyWeightedLine(e+2*_random(-1,1),t+2*_random(-1,1),e+2*_random(-1,1),t-_+2*_random(-1,1),map(_,23,160,.5,4),.15);s.setWeight(1.5),s.setMaxV(.25),s.setAcc(.02),s.setDensity(1),s.setWobble(.3),s.setAngle(0),s.z=$;let l=treePaletteColor(_random(map(a,0,1,0,.1)));s.setColor(color(red(l),green(l),blue(l),64)),shapes.push(s);let r,n=round(_random(12,15));for(let o=0;o<n;o++){let i=_random(.51,1),p=lerp(t,t-_,i);r=_createV(0,_random(-30)*constrain(map(i,.51,1,1.1,.3),.3,.8)*map(o,0,n,1,.5)),r=_rotate(r,_random(.5,1)*(.5>_random(1)?-1:1)*map(i,.51,1,PI/2,PI/3),0,0),r.y*=_random(1,map(i,.51,1,1,1));let h=new SketchyWeightedLine(e,p,e+r.x,p+r.y,.25,.1);h.setWeight(1.5),h.setMaxV(.3),h.setAcc(.02),h.setDensity(1),h.setWobble(.2),h.z=$;let c=treePaletteColor(0);h.setColor(color(red(c),green(c),blue(c),_random(64,128))),shapes.push(h);let m,d=round(_random(5,10));for(let u=0;u<d;u++){let f=_random(2,3)*map(u,0,d,1.5,1);m=_createV(_random(1.8*f),0),m=_rotate(m,_random(TAU),0,0);let y=new SketchyEllipse(e+m.x+r.x,p+r.y+m.y,4,1*f,_random(1,1.1),!1);y.z=$+map(u,0,d-1,-1,1),y.setWeight(2.5),y.setMaxV(1),y.setAcc(.02),y.setDensity(2),y.setWobble(.2),y.setAngle(map(noise(y.x*noiseScale*3,y.y*noiseScale*3),0,1,-1,1)*PI/6);let g=_normalize(_createV(-(.3*r.x)-m.x,.3*r.y+m.y+6)),x=pow(norm(_dot(g,lgt),-1,1),map(a,0,1,8,1))+map(a,0,1,0,.4);x=constrain(pow(x,2)+.2*_random(-1,1),0,1);let S=map(i,.51,1,.5,2.5),b=treePaletteColor(pow(x*S*1,1));y.setColor(color(red(b),green(b),blue(b),64)),shapes.push(y)}}}function addCactus(e,t,$,a,_,s,l,r,n){let o=l,i=round(_random(2,3));for(let p=0;p<i;p++){let h=o*constrain(map(p,0,max(1,i-1),.9,1)+.1*_random(-1),0,1),c=_rotate(_createV(map(p,0,max(1,i-1),0,.1)*h/2,0),_random(TAU),0,0),m,d;if(-1==r){(m=new SketchyEllipse($+c.x,a+c.y,h,h,.25,!1)).z=_+1e-7*p,m.setWobble(.1),m.setWeight(.8);let u=_normalize(_createV($+c.x-e,a+c.y-t)),f=_normalize(_createV(c.x,c.y)),y=1*norm(_dot(u,lgt),-1,1),g=1*norm(_dot(f,lgt),-1,1);d=pow(lerp(y,g,.5),2);let x=cactusFruitPaletteColor(d);m.setColor(color(red(x),green(x),blue(x),64))}else{(m=new SketchyEllipse($+c.x,a+c.y,h,h*_random(.8,1)*.9,.25,!1)).z=_-1e-4*p,m.setWobble(.2),m.setWeight(.8);let S=_normalize(_createV($+c.x-e,a+c.y-t)),b=_normalize(_createV(c.x,c.y)),z=1*norm(_dot(S,lgt),-1,1),W=1*norm(_dot(b,lgt),-1,1);d=constrain(pow(lerp(z,W,.5),2)+.3*_random(-1,1),0,1);let P=cactusPaletteColor(d);m.setColor(color(red(P),green(P),blue(P),64))}m.setWeight(1.5),m.setMaxV(1),m.setAcc(.02),m.setDensity(2),m.setAngle(n),shapes.push(m);let C=floor(.04*sq(o));o<3&&(C=0);for(let M=0;M<C;M++){let w=_rotate(_createV(sqrt(_random(1)),0),_random(TAU),0,0),A=_rotate(_setMag(_createV(w.x,w.y),_random(3,5)),n+PI/2+_random(-1,1)*PI/8,0,0);w.x*=.55*h*.95,w.y*=.95*h,w=_rotate(w,n+PI/2,0,0);let F=new SketchyWeightedLine($+w.x,a+w.y,$+w.x+A.x,a+w.y+A.y,1,.2);F.setWeight(1.5),F.setMaxV(.25),F.setAcc(.01),F.setDensity(1),F.setWobble(.05),F.z=_+.001;let V,k=cactusPaletteColor((V=d<.5?.8:.2)+.1*_random(-1,1));F.setColor(color(red(k),green(k),blue(k),64)),shapes.push(F)}}if(r>0){let H=_random([1,1,2]);for(let D=0;D<H;D++){let v=-PI/2+_random(-1,1)*PI/2.5,T=l*_random(.8,.9),q=$+cos(v)*(o+T)*.9,E=a+sin(v)*(o+T)*.9;addCactus(e,t,q,E,_,s,T,r-1,v)}}else if(0==r){let N=_random([0,1,2]);for(let L=0;L<N;L++){let B=-PI/2+_random(-1,1)*PI/3,X=max(.5*l,3),Y=$+cos(B)*(o+X)*.9,I=a+sin(B)*(o+X)*.9;addCactus(e,t,Y,I,_,s,X,r-1,B)}}}function addBush(e,t,$,a,_,s,l){let r,n=round(_random(4,5)*map(_,10,80,1,2)*max(1,.01*_));for(let o=0;o<n;o++){r=_createV(0,-_random(.1*_)),(r=_rotate(r,_random(-1,1)*PI/2,0,0)).y=-abs(r.y);let i=_normalize(hMapNormal(s,o)),p,h=round(.3*_random(10,20));for(let c=0;c<h;c++){let m=_random(2,3)*map(c,0,h,1.5,1);p=_createV(_random(1.5*m),0),(p=_rotate(p,_random(TAU),0,0)).y=-abs(p.y);let d=new SketchyEllipse(e+p.x+r.x,t+p.y+r.y,2*m,4,_random(1,1.1),!1);d.z=$,d.setWeight(1.5),d.setMaxV(1),d.setAcc(.02),d.setDensity(2),d.setWobble(.2);let u=_normalize(_createV(-(.3*r.x)-p.x,.3*r.y+p.y+6)),f=pow(norm(_dot(u,lgt),-1,1),map(a,0,1,8,1));f+=.4*_random(-1,1),f=constrain(f,0,1);let y=bushPaletteColor(constrain(f,0,1));d.setColor(color(red(y),green(y),blue(y),64)),d.setAngle(map(i.x,1,-1,0,PI/2)+PI/4+(2*round(_random(1))-1)*PI+PI/2+map(u.x,-1,1,1,-1)*_random(PI/4,PI/8)),shapes.push(d)}}}function _random(e,t){return void 0!=t?R.random_num(e,t):Array.isArray(e)?(0,e[floor(R.random_num(0,e.length))]):R.random_num(0,e)}
new Uint16Array(a("0,2,1,1,2,2,5,1,6,0,7,0,10,2,12,2,41,1,45,1,50,5,51,5,g6,0,g7,0,h2,4,h6,4,k5,3,k7,3,l0,5,l1,5,l2,4,l5,3,l6,4,l7,3,l8,d,l9,d,la,c,ld,e,le,c,lf,e,m8,k,ma,i,p9,l,pd,n,q8,k,q9,l,15e,j,15f,m,16a,i,16e,j,19d,n,19f,m,1a8,f,1a9,h,1aa,f,1ad,h,1ae,g,1af,g,1ag,b,1ah,a,1ai,b,1al,a,1am,9,1an,9,1bg,b,1bi,b,1eh,a,1el,a,1fg,8,1fh,8,1qm,9,1qn,9,1ri,7,1rm,7,1ul,6,1un,6,1vg,8,1vh,8,1vi,7,1vl,6,1vm,7,1vn,6")),u=$(-1,4,"112011021322233123132111"),f=$(-1,5,"112011210110211120110121102132212220132122202131222022243214231243124213241324123222113311221213131221123113311112202311112022311112220342223113342223311342223131322023113322023311320223113320223131322203311322203131");let y=(e,t=e=>e)=>{for(var $=[],a=0;a<e;)$.push(t(a++));return $};function g(e,t=1){return e=1664525*e+1013904223|0,(t-=1)>0?g(e,t):e}let x={_2D:{base:i,squish:l,dimensions:2,pD:u,lookup:m},_3D:{base:p,squish:r,dimensions:3,pD:f,lookup:d}};function S(e,t,$){var a=0;let _=t[$++],s={next:void 0};for(;a<e.dimensions;){let l="xyzw"[a];s[l+"sb"]=t[$+a],s["d"+l]=-t[$+a++]-_*e.squish}return s}function b(e){let t=[],$=e.dimensions,a=$*$;for(var _,s=0;s<e.pD.length;){let l=e.base[e.pD[s]],r,n;_=0;do n=S(e,l,_),r?r.next=n:t[s/a]=n,r=n,_+=$+1;while(_<l.length);n.next=S(e,e.pD,s+1),$>=3&&(n.next.next=S(e,e.pD,s+$+2)),4===$&&(n.next.next.next=S(e,e.pD,s+11)),s+=a}let o=[t,function e(t,$){var a;let _=t(),s=new Map;for(a=0;a<_.length;a+=2)s.set(_[a],$[_[a+1]]);return s}(e.lookup,t)];return e.base=void 0,e.lookup=void 0,o}let[z,W]=b(x._2D),[P,C]=b(x._3D),M=new Uint8Array(256),w=new Uint8Array(256),A=new Uint8Array(256),F=new Uint8Array(y(256,e=>e));var V=g(e,3);return((e,t)=>{for(var $=0;$<256&&!0!==t($++););})(256,e=>{e=255-e;var t=((V=g(V))+31)%(e+1);t+=t<0?e+1:0,M[e]=F[t],w[e]=14&M[e],A[e]=M[e]%24*3,F[t]=F[e]}),i=p=void 0,m=d=void 0,u=f=void 0,{noise2D(e,t){let $=w,a=M,s=h,r=(e+t)*n,o=e+r,i=t+r,p=Math.floor(o),c=Math.floor(i),m=(p+c)*l,d=e-(p+m),u=t-(c+m);for(var f,y=(()=>{let e=o-p,t=i-c,$=e+t;return W.get(e-t+1|$<<1|$+t<<2|$+e<<4)})(),g=0;void 0!==y;){let x=d+y.dx,S=u+y.dy,b=2-x*x-S*S;b>0&&(f=$[a[p+y.xsb&255]+(c+y.ysb)&255],b*=b,g+=b*b*(s[f++]*x+s[f]*S)),y=y.next}return g*_},noise3D(e,t,$){let a=A,_=M,l=c,n=(e+t+$)*o,i=e+n,p=t+n,h=$+n,m=Math.floor(i),d=Math.floor(p),u=Math.floor(h),f=(m+d+u)*r,y=e-(m+f),g=t-(d+f),x=$-(u+f);for(var S,b=(()=>{let e=i-m,t=p-d,$=h-u,a=e+t+$;return C.get(t-$+1|e-t+1<<1|e-$+1<<2|a<<3|a+$<<5|a+t<<7|a+e<<9)})(),z=0;void 0!==b;){let W=y+b.dx,P=g+b.dy,w=x+b.dz,F=2-W*W-P*P-w*w;F>0&&(S=a[(_[m+b.xsb&255]+(d+b.ysb)&255)+(u+b.zsb)&255],F*=F,z+=F*F*(l[S++]*W+l[S++]*P+l[S]*w)),b=b.next}return z*s}}}class SketchyShape{constructor(){this.wt=1,this.maxV=3,this.acc=.005,this.c=color(0,64),this.density=1,this.wobble=0,this.angle=0,this.lineLen=0,this.age=0,this.pathLen=0}update(){if(this.age++,this.age>2*this.pathLen)return"done";push(),translate(this.x,this.y),rotate(this.angle),0==this.lineLen&&void 0!=this.drawBg&&this.drawBg();let e=this.points[this.penTargetIndex],t=e.x-this.pen.x,$=e.y-this.pen.y,a=t*this.acc,_=$*this.acc;this.penV.x+=a,this.penV.y+=_;let s=_rotate({x:this.wobble,y:0,z:0},_random(TAU),0,0);this.penV.x+=s.x,this.penV.y+=s.y,this.penV.x*=.8,this.penV.y*=.8;let l=_mag(this.penV);l>this.maxV&&(this.penV=_setMag(this.penV,this.maxV)),this.lineLen+=l,this._pen.x=this.pen.x,this._pen.y=this.pen.y,this.pen.x+=this.penV.x,this.pen.y+=this.penV.y;if(sq(e.x-this.pen.x)+sq(e.y-this.pen.y)<9&&(this.penTargetIndex++,this.penTargetIndex>=this.points.length))return pop(),this.points=null,"done";noStroke(),fill(this.c);let r=round(this.density),n={x:0,y:0,z:0};for(let o=0;o<r;o++)n.x=sqrt(_random(1))*map(noise(.001*this.lineLen),0,1,.5,1)*this.wt/2,n.y=0,n=_rotate(n,_random(TAU),0,0),circle(this.pen.x+n.x,this.pen.y+n.y,1);pop()}setWeight(e){this.wt=e}setMaxV(e){this.maxV=e}setAcc(e){this.acc=e}setColor(e){this.c=e}setDensity(e){this.density=e}setWobble(e){this.wobble=e}setAngle(e){this.angle=e}}class SketchyEllipse extends SketchyShape{constructor(e,t,$,a,_,s){if(super(),this.x=e,this.y=t,this.w=$,this.h=a,this.points=[],s){let l=max(3,10*round($/_));for(let r=0;r<l;r++){let n=map(r,0,l-2,0,1.5*TAU),o=map(noise(.1*r),0,1,.5,1),i=o*$*cos(n),p=o*a*sin(n);this.points.push({x:i,y:p})}}else{let h=max(2,round($/_));for(let c=0;c<h;c++){let m=map(c,0,h-1,-$,$),d=a*sqrt(1-sq(m)/sq($));!(isNaN(m)||isNaN(d))&&(this.points.push({x:m,y:d}),this.points.push({x:m,y:-d}))}}this.pen=_createV(this.points[0].x,this.points[0].y),this._pen={x:this.pen.x,y:this.pen.y},this.penTargetIndex=1,this.penV=_createV(0,0);for(let u=0;u<this.points.length-1;u++){let f=this.points[u],y=this.points[u+1];this.pathLen+=dist(f.x,f.y,y.x,y.y)}}}class SketchyQuad extends SketchyShape{constructor(e,t,$,a,_,s,l,r,n){super(),this.x=(e+$+_+l)/4,this.y=(t+a+s+r)/4,this.x1=e-this.x,this.y1=t-this.y,this.x2=$-this.x,this.y2=a-this.y,this.x3=_-this.x,this.y3=s-this.y,this.x4=l-this.x,this.y4=r-this.y;let o=dist(this.x1,this.y1,this.x2,this.y2),i=dist(this.x3,this.y3,this.x4,this.y4);this.points=[];let p,h,c=max(2,round(max(o,i)/n));for(let m=0;m<c;m++){let d=map(m,0,c-1,0,1);p=lerp(this.x1,this.x2,d),h=lerp(this.y1,this.y2,d);let u=p,f=h,y=noise(.08*p,.08*h)*TAU;p+=1*cos(y),h+=1*sin(y),this.points.push({x:p,y:h}),!isNaN(p)&&(p=lerp(this.x4,this.x3,d),h=lerp(this.y4,this.y3,d),y=noise(.08*p,.08*h)*TAU,p+=1*cos(y),h+=1*sin(y),this.points.push({x:p,y:h}))}this.pen=_createV(this.points[0].x,this.points[0].y),this._pen={x:this.pen.x,y:this.pen.y},this.penTargetIndex=1,this.penV=_createV(0,0);for(let g=0;g<this.points.length-1;g++){let x=this.points[g],S=this.points[g+1];this.pathLen+=dist(x.x,x.y,S.x,S.y)}}}class SketchyRect extends SketchyQuad{constructor(e,t,$,a,_){let s=e-$/2,l=t-a/2,r=e+$/2,n=t-a/2,o,i;super(s,l,r,n,e+$/2,t+a/2,e-$/2,t+a/2,_)}}class SketchyWeightedLine extends SketchyRect{constructor(e,t,$,a,_,s){let l=dist(e,t,$,a),r=atan2(a-t,$-e),n;super(lerp(e,$,.5),lerp(t,a,.5),_,l,s),this.angle=r+PI/2}}class SketchyLine extends SketchyShape{constructor(e,t,$,a){super(),this.x=0,this.y=0,this.points=[],this.points.push({x:e,y:t}),this.points.push({x:$,y:a}),this.pen=_createV(this.points[0].x,this.points[0].y),this._pen={x:this.pen.x,y:this.pen.y},this.penTargetIndex=1,this.penV=_createV(0,0)}}let R=new Random,saveMode=!1,saving=!1,saveTime=0,doDownload=!1,canv,shapes=[],paperColor,palettes=[],palette,treePalettes=[],treePalette,bushPalettes=[],bushPalette,skyPalettes=[],skyPalette,oceanPalettes=[],oceanPalette,cactusPalettes=[],cactusPalette,cactusFruitPalettes=[],cactusFruitPalette,petalPalettes=[],petalPalette,noiseScale=.01,hMap=[],lMap=[],erodeMap=[],depositMap=[],mapW,mapH,mapScale,mapTrim=8,minX=1e13,maxX=-1e13,minY=1e13,maxY=-1e13,terrainHt,warpSz,landscapeShape,targetSz=400,targetSzW=600,sizeAdj,scl=.8,mag,lightAngle,lgt,skyCenterX,skyCenterY,plantThresh,sNoise,nSeed,rSeed;function setup(){rSeed=Math.floor(_random(1e8)),nSeed=Math.floor(_random(1e8)),randomSeed(rSeed),noiseSeed(nSeed),sNoise=new openSimplexNoise(nSeed),handleUrlParams();let e;windowHeight>floor(windowWidth*(targetSz/targetSzW))?(e=floor(windowWidth*mag),sizeAdj=floor(mag*windowWidth*(targetSz/targetSzW))/targetSz,canv=createCanvas(e,floor(e*(targetSz/targetSzW)))):(e=floor(mag*windowHeight*targetSzW/targetSz),sizeAdj=floor(e*(targetSz/targetSzW))/targetSz,canv=createCanvas(e,floor(windowHeight*mag))),background(paperColor=color("#dfd8ce")),document.querySelector("html").style.width="100%",document.querySelector("html").style.height="100%",document.querySelector("html").style.margin=0,document.querySelector("html").style.padding=0,document.querySelector("html").style.backgroundColor=paperColor,document.querySelector("html").style.display="flex",document.querySelector("html").style.justifyContent="center",document.querySelector("html").style.alignItems="center",document.querySelector("body").style.width="100%",document.querySelector("body").style.height="100%",document.querySelector("body").style.margin=0,document.querySelector("body").style.padding=0,document.querySelector("body").style.backgroundColor=paperColor,document.querySelector("body").style.display="flex",document.querySelector("body").style.justifyContent="center",document.querySelector("body").style.alignItems="center",canv.style.display="block",paletteIndex=_random([0,0,0,1,1,1,2,3,3,3]),preparePalette(paletteIndex),lightAngle=-PI/2+_random(-1,1)*PI/6,lgt=_normalize(_createV(cos(lightAngle),sin(lightAngle),0)),terrainHt=-.6*targetSz,warpSz=0,prepareHeightMap(),prepareLigthMap(),skyCenterX=mapW*map(lightAngle,-PI/2-PI/6,-PI/2+PI/6,.8,.2),skyCenterY=mapH*_random(.2,.5);let t=_random(.2,.25);plantThresh=_random(.51,.52);let $=.2,a=.8,_=_random(.35,.4),s=_random(.1,.6),l=targetSz*s,r=.5*targetSz,n=-(0*targetSz);for(let o=0;o<900*(targetSzW/targetSz)*.7;o++){let i=-n-20,p=targetSzW+n+20,h=_random(i,p),c=_random(targetSz-r-.2*targetSz)+r,m=c+10,d=map(c,0,targetSzW,0,mapW*$),u=map(c,0,targetSz,mapW-1,mapW*a),f=constrain(floor(map(h,i,p,mapTrim+d,u-mapTrim)),0,mapW-1),y=constrain(floor(map(c,r,targetSz-.2*targetSz,mapTrim,floor(.7*mapH))),0,mapH-1),g=hMap[f][y];h+=cos(g)*warpSz,c+=sin(g)*warpSz,c+=map(g,0,2*TAU,0,1)*terrainHt*map(c,l,targetSz,1,0);let x=_normalize(hMapNormal(f,y)),S=_dot(x,lgt),b=floor(_random(1e3)),z=floor(_random(1e3));if(0!=g){let W=.01*targetSz,P=_createV(1,0);P=_rotate(P,2*noise(h*noiseScale,c*noiseScale,.1*_random(TAU))*TAU,0,0),P=_scalarMult(P,_random(W));let C=constrain(1.1*norm(S,-1,1)+.1*_random(-1,1),0,1),M=noise(f*noiseScale*4+1e3,y*noiseScale*4+1e3);if(20>floor(_random(100))){let w=new SketchyEllipse(h+P.x,c+P.y,W,W,1,!1);w.z=m,w.setWeight(2.5),w.setMaxV(.3),w.setAcc(.01),w.setDensity(1),w.setWobble(.1),w.setAngle(_random(TAU));let A=paletteColor(lerp(M,C,constrain(2*abs(C-.5)+.1*_random(-1,1),0,1)));w.setColor(color(red(A),green(A),blue(A),64)),shapes.push(w)}if(g<1.6*PI&&y>12){let F=noise(f*noiseScale*3+1234,y*noiseScale*3+1234);if(abs(x.x)<plantThresh){let V=noise(f*noiseScale*4+100,y*noiseScale*4+123);if(F>t)y>21&&f>22&&f<mapW-1-22&&(b<map(t,.2,.4,200,400)+0&&addTree(h,c,m-11,C,map(V,0,1,23,55)*map(c,l,targetSz,1,1.9)*_random(.65,1.2)),addBush(h,c,m-10,C,map(V,0,1,10,100),f,y));else{if(z<50){let k=map(V,0,1,1,12);addCactus(h,c,h,c,m-10,C,k,round(_random(1,4)),0)}50>_random(100)&&addBush(h,c,m-10,C,map(V,0,1,10,160),f,y)}let H=map(V,0,1,2,5),D=map(V,0,1,1,3);for(let v=-H;v<=H;v++)for(let T=-D;T<=D;T++){let q=floor(f+v+cos(lightAngle)*H*.5),E=floor(y+T+sin(lightAngle)*D*.5);q<0||q>=mapW||E<0||E>=mapH||(lMap[q][E]=lerp(lMap[q][E],-1,.7))}}}}}for(let N=0;N<1924.9999999999998;N++){let L=-n-20,B=targetSzW+n+20,X=_random(L,B),Y=_random(targetSz-r-.2*targetSz)+r,I=Y,j=map(Y,0,targetSz,0,mapW*$),G=map(Y,0,targetSz,mapW-1,mapW*a),Q=constrain(floor(map(X,L,B,mapTrim+j,G-mapTrim)),0,mapW-1),U=constrain(floor(map(Y,r,targetSz-.2*targetSz,mapTrim,floor(.7*mapH))),0,mapH-1),J=hMap[Q][U];X+=cos(J)*warpSz,Y+=sin(J)*warpSz,Y+=map(J,0,2*TAU,0,1)*terrainHt*map(Y,l,targetSz,1,0);let K=_normalize(hMapNormal(Q,U)),O=lMap[Q][U],Z=_magSq(hMapNormal2(Q,U)),ee=.0375*targetSz,et=.075*targetSz*.8,e$=max(1,floor(map(pow(abs(Y-I),1),0,pow(abs(terrainHt)+abs(warpSz),1),1,_random(3,8))));for(let ea=0;ea<e$;ea++){let e_=constrain(map(Z,1e-4,8e-4,et,ee),ee,et),es=_createV(0,.15*abs(_random(Y-I)));es=_rotate(es,0,0,_random(-1,1)*PI/8);let el=new SketchyEllipse(X+es.x,Y+es.y,.0125*targetSz,e_*_random(.9,1.1),_random(1,1.5));el.z=I,el.setWeight(3),el.setMaxV(1),el.setAcc(.02),el.setDensity(2.5),el.setWobble(.2),el.setAngle(map(K.x,1,-1,0,PI/2)+PI/4+(2*round(_random(1))-1)*PI+map(noise(X*noiseScale,Y*noiseScale),0,1,-1,1)*PI/8*0);for(let er=0;er<el.points.length;er++){let en=el.points[er],eo=(2*noise(en.x*noiseScale*4+100,en.y*noiseScale*4+100)-1)*2*TAU;en.x+=2*cos(eo),en.y+=2*sin(eo)}let ei=constrain(1.1*norm(O,-1,1),0,1),ep=noise(Q*noiseScale*4+1e3,U*noiseScale*4+1e3),e0=paletteColor(lerp(ep,ei,2*abs(ei-.5)));el.setColor(color(red(e0),green(e0),blue(e0),_random(64,100))),shapes.push(el)}}l=targetSz*s,r=.8*targetSz,$=0,a=1;let eh=0*targetSz;fo
let mintNumber=parseInt(tokenData.tokenId)%1e6;0===mintNumber&&(tokenData.hash="0x90ced9ecdb0fd1f5c27351492835551f1bdd7612ec59f92a083dc37020af1858");class Random{constructor(){this.useA=!1;let e=function(e){let t=parseInt(e.substr(0,8),16),$=parseInt(e.substr(8,8),16),a=parseInt(e.substr(16,8),16),_=parseInt(e.substr(24,8),16);return function(){a|=0;let e=((t|=0)+($|=0)|0)+(_|=0)|0;return _=_+1|0,t=$^$>>>9,$=a+(a<<3)|0,a=(a=a<<21|a>>>11)+e|0,(e>>>0)/4294967296}};this.prngA=new e(tokenData.hash.substr(2,32)),this.prngB=new e(tokenData.hash.substr(34,32));for(let t=0;t<1e6;t+=2)this.prngA(),this.prngB()}random_dec(){return this.useA=!this.useA,this.useA?this.prngA():this.prngB()}random_num(e,t){return e+(t-e)*this.random_dec()}random_int(e,t){return Math.floor(this.random_num(e,t+1))}random_bool(e){return this.random_dec()<e}random_choice(e){return e[this.random_int(0,e.length-1)]}}function _createV(e,t,$){let a=$;return void 0==a&&(a=0),{x:e,y:t,z:a}}function _dot(e,t){return e.x*t.x+e.y*t.y+e.z*t.z}function _setMag(e,t){let $=_normalize(e);return _scalarMult($,t)}function _normalize(e){let t=_mag(e);return 0==t?e:_scalarMult(e,1/t)}function _scalarMult(e,t){return _createV(e.x*t,e.y*t,e.z*t)}function _add(e,t){return _createV(e.x+t.x,e.y+t.y,e.z+t.z)}function _mag(e){return sqrt(sq(e.x)+sq(e.y)+sq(e.z))}function _magSq(e){return sq(e.x)+sq(e.y)+sq(e.z)}function _rotate(e,t,$,a){let _=cos(t),s=cos($),l=cos(a),r=sin(t),n=sin($),o=sin(a),i={x:e.x,y:e.y,z:e.z},p=_,h=r,c=0,m=-r,d=_,u=0,f=0,y=0,g=1;return i={x:i.x*p+i.y*m+i.z*f,y:i.x*h+i.y*d+i.z*y,z:i.x*c+i.y*u+i.z*g},p=s,h=0,c=n,m=0,d=1,u=0,f=-n,y=0,g=s,i={x:i.x*p+i.y*m+i.z*f,y:i.x*h+i.y*d+i.z*y,z:i.x*c+i.y*u+i.z*g},p=1,h=0,c=0,m=0,d=l,u=o,f=0,y=-o,g=l,i={x:i.x*p+i.y*m+i.z*f,y:i.x*h+i.y*d+i.z*y,z:i.x*c+i.y*u+i.z*g}}function blurMap(e,t,$){let a,_,s,l,r;for(s=0;s<t;s++)for(a=0;a<e.length;a++)for(_=0;_<e[0].length;_++)l=0,r=0,a>0&&(r++,l+=e[a-1][_],_>0&&(r++,l+=e[a-1][_-1]),_<e[0].length-1&&(r++,l+=e[a-1][_+1])),a<e.length-1&&(r++,l+=e[a+1][_],_>0&&(r++,l+=e[a+1][_-1]),_<e[0].length-1&&(r++,l+=e[a+1][_+1])),l+=e[a][_],r++,e[a][_]=lerp(e[a][_],l/r,$)}function handleUrlParams(){let e=window.location.search,t=new URLSearchParams(e),$=t.get("mag");mag=null==$?1:float($)>0?max(float($),1):1}function erode(e,t,$,a){let _=_random(.5,2),s=60*_,l=4*$*10,r=.6*$,n=.6*$,o=.1/_;for(let i=0;i<t;i++){let p=_random(1),h=_random(1),c=createVector(_random(mapW-1),_random(mapH-1)),m=createVector(0,0),d=0,u=1,f=0;for(let y=0;y<s;++y){let g=round(c.x),x=round(c.y);if(g<0||x<0||g>=mapW-1||x>=mapH-1)break;let S,b;S=c.x>g?c.x-g:g-c.x,b=c.y>x?c.y-x:x-c.y;let z=calculateHeightAndGradient(e,g,x);if(isNaN(z[0])||isNaN(z[1])||isNaN(z[2])||(m.x=.5*m.x-.5*z[0],m.y=.5*m.y-.5*z[1],m.normalize(),c.add(m),0==m.x&&0==m.y||c.x<0||c.x>=mapW-1||c.y<0||c.y>=mapH-1))break;let W=calculateHeightAndGradient(e,c.x,c.y)[2];if(isNaN(W))break;let P=W-z[2],C=max(-P*d*u*l,.01);if(f>C||P>0){let M=g,w=x,A=P>0?min(P,f):(f-C)*r*depositMap[M][w];f-=A;let F=(1-S)*(1-b),V=S*(1-b),k=(1-S)*b,H=S*b;e[M][w]+=A*F,e[M+1][w]+=A*V,e[M][w+1]+=A*k,e[M+1][w+1]+=A*H}else for(let D=0;D<=a;D++)for(let v=0;v<=a;v++){let T;T=1/sq(a+1);let q=g+D,E=x+v;if(p<.5&&(q=g-D),h<.5&&(E=x-v),q<0||E<0||q>=mapW-1||E>=mapH-1)break;let N=1*(min((C-f)*n,-P)*erodeMap[q][E]*T),L=e[q][E]<N?e[q][E]:N;e[q][E]-=L,f+=L}if(d=sqrt(d*d+4*abs(P)),(u*=1-o)<1e-4)break}}}function calculateHeightAndGradient(e,t,$){if(t<0||t>=e.length-1||$<0||$>=e[0].length-1)return[0,0,0];let a=floor(t),_=floor($),s=t-a,l=$-_,r=e[a][_],n=e[a+1][_],o=e[a][_+1],i=e[a+1][_+1];return[(n-r)*(1-l)+(i-o)*l,(o-r)*(1-s)+(i-n)*s,r*(1-s)*(1-l)+n*s*(1-l)+o*(1-s)*l+i*s*l]}function preparePalette(e){palettes.push([color("#1a1d28"),color("#377D71"),color("#8879B0"),color("#FBA1A1"),color("#FBC5C5"),]),treePalettes.push([color("#1a1d28"),color("#2d3351"),color("#214942"),color("#214942"),color("#6dad9f"),color("#6dad9f"),color("#f99d9d"),color("#f8b861"),]),bushPalettes.push([color("#1a1d28"),color("#2d3351"),color("#214942"),color("#214942"),color("#6dad9f"),color("#6dad9f"),color("#f99d9d"),color("#f8b861"),]),skyPalettes.push([color("#f99d9d"),color("#f8b861"),color("#f8b861"),color("#f8b861"),color("#FBC5C5"),color("#FBC5C5"),]),oceanPalettes.push([color("#1a1d28"),color("#1a1d28"),color("#304750"),color("#304750"),color("#668099"),color("#f99d9d"),color("#f8b861"),]),cactusPalettes.push([color("#1a1d28"),color("#2d3351"),color("#8879B0"),color("#f99d9d"),color("#f8b861"),]),cactusFruitPalettes.push([color("#440404"),color("#890a0a"),color("#e30f0f"),color("#f45959"),]),petalPalettes.push([color("#f45959"),color("#f99d9d"),color("#f8b861"),]),palettes.push([color("#1a172f"),color("#29264E"),lerpColor(color("#29264E"),color("#9881F5"),.5),color("#9881F5"),lerpColor(color("#9881F5"),color("#82AFF9"),.5),color("#F97D81"),lerpColor(color("#F97D81"),color("#fcbcbe"),.5),color("#fcbcbe"),color("#f7c066"),]),treePalettes.push([color("#1a172f"),color("#29264E"),color("#354e6f"),color("#7d8cb5"),color("#799f89"),color("#efc9d7"),color("#f7c066"),]),bushPalettes.push([color("#1a172f"),color("#29264E"),color("#354e6f"),color("#7d8cb5"),color("#799f89"),color("#efc9d7"),color("#f7c066"),]),skyPalettes.push([color("#9881F5"),lerpColor(color("#9881F5"),color("#82AFF9"),.5),color("#F97D81"),lerpColor(color("#F97D81"),color("#fcbcbe"),.5),color("#fcbcbe"),color("#f7c066"),]),oceanPalettes.push([color("#29264E"),color("#29264E"),lerpColor(color("#29264E"),color("#4d75b3"),.1),lerpColor(color("#29264E"),color("#4d75b3"),.2),lerpColor(color("#29264E"),color("#4d75b3"),.3),color("#4d75b3"),lerpColor(color("#4d75b3"),color("#82AFF9"),.5),color("#F97D81"),lerpColor(color("#F97D81"),color("#fcbcbe"),.5),color("#fcbcbe"),color("#f7c066"),]),cactusPalettes.push([color("#1a172f"),color("#29264E"),color("#F97D81"),color("#efc9d7"),color("#f7c066"),]),cactusFruitPalettes.push([color("#440404"),color("#890a0a"),color("#e30f0f"),color("#f45959"),]),petalPalettes.push([color("#F97D81"),color("#efc9d7"),color("#f7c066"),]),palettes.push([color("#0b0b62"),color("#2f2fd2"),color("#4649FF"),color("#7978FF"),color("#C47AFF"),color("#baaef9"),]),treePalettes.push([color("#0b0b62"),color("#1c4fe6"),color("#4679ff"),color("#7799ff"),color("#C47AFF"),color("#aed3f9"),]),bushPalettes.push([color("#0b0b62"),color("#1c4fe6"),color("#4679ff"),color("#7799ff"),color("#C47AFF"),color("#aed3f9"),]),skyPalettes.push([color("#0b0b62"),color("#2f2fd2"),color("#4649FF"),color("#7978FF"),color("#baaef9"),color("#d1c5e2"),]),oceanPalettes.push([color("#0b0b62"),color("#2f2fd2"),color("#4649FF"),color("#7978FF"),color("#baaef9"),color("#d1c5e2"),]),cactusPalettes.push([color("#0b0b62"),color("#7799ff"),color("#aed3f9"),]),cactusFruitPalettes.push([color("#360062"),color("#530097"),color("#9717ff"),color("#C47AFF"),]),petalPalettes.push([color("#4679ff"),color("#7799ff"),color("#baaef9"),color("#d1c5e2"),]),palettes.push([color("#232601"),color("#4a69fe"),color("#ef412f"),color("#efac25"),color("#eeefd0"),]),treePalettes.push([color("#232601"),color("#232601"),color("#232601"),color("#4a69fe"),color("#226330"),color("#efac25"),color("#efac25"),color("#eeefd0"),color("#eeefd0"),]),bushPalettes.push([color("#232601"),color("#226330"),color("#efac25"),color("#eeefd0"),]),skyPalettes.push([color("#011ea5"),color("#4a69fe"),color("#ef412f"),color("#efac25"),color("#eeefd0"),]),oceanPalettes.push([color("#011ea5"),color("#4a69fe"),color("#ef412f"),color("#efac25"),]),cactusPalettes.push([color("#232601"),color("#226330"),color("#efac25"),color("#eeefd0"),]),cactusFruitPalettes.push([color("#550e06"),color("#941a0c"),color("#ef412f"),color("#f47a6c"),]),petalPalettes.push([color("#efac25"),color("#eeefd0"),]),palette=palettes[e],treePalette=treePalettes[e],bushPalette=bushPalettes[e],skyPalette=skyPalettes[e],oceanPalette=oceanPalettes[e],cactusPalette=cactusPalettes[e],cactusFruitPalette=cactusFruitPalettes[e],petalPalette=petalPalettes[e]}function paletteColor(e){return palette[constrain(floor(e*palette.length),0,palette.length-1)]}function treePaletteColor(e){return treePalette[constrain(floor(e*treePalette.length),0,treePalette.length-1)]}function bushPaletteColor(e){return bushPalette[constrain(floor(e*bushPalette.length),0,bushPalette.length-1)]}function skyPaletteColor(e){return skyPalette[constrain(floor(e*skyPalette.length),0,skyPalette.length-1)]}function oceanPaletteColor(e){return oceanPalette[constrain(floor(e*oceanPalette.length),0,oceanPalette.length-1)]}function cactusPaletteColor(e){return cactusPalette[constrain(floor(e*cactusPalette.length),0,cactusPalette.length-1)]}function cactusFruitPaletteColor(e){return cactusFruitPalette[constrain(floor(e*cactusFruitPalette.length),0,cactusFruitPalette.length-1)]}function petalPaletteColor(e){return petalPalette[constrain(floor(e*petalPalette.length),0,petalPalette.length-1)]}function landscapeColor(e,t){return paletteColor(map(hMap[e][t],0,2*TWO_PI,0,noise(e*noiseScale*4+1e3,t*noiseScale*4+1e3)))}function lightColor(e){return paletteColor(e)}function prepareHeightMap(){let e=(mapW=100*floor(targetSzW/targetSz)+2*mapTrim)*(mapH=100+2*mapTrim)/1e4;landscapeShape=_random(["valleyAbs","valleyCos","valleyCos","mountainAbs","mountainAbs","updownLeft","updownLeft","updownRight","updownRight"]),noiseDetail(1,1),mapScale=_random(.3,.7);let t=map(mapScale,.1,1,.6,.2),$=[[1,1*mapScale],[t,2*mapScale],[pow(t,2),4*mapScale],],a=0;for(let _=0;_<$.length;_++)a+=$[_][0];for(let s=0;s<mapW;s++){let l=[],r=[],n=[];for(let o=0;o<mapH;o++){let i=0;for(let p=0;p<$.length;p++)i+=norm(sNoise.noise2D(s*noiseScale*$[p][1]*2,o*noiseScale*$[p][1]*1),-1,1)*$[p][0];let h=constrain(pow(map(i,0,a,0,1),1),0,1);h*=map(o,0,mapH,1,0),"valleyAbs"==landscapeShape?h*=pow(map(abs(s-mapW/2),0,mapW/2+mapTrim,0,1),1):"valleyCos"==landscapeShape?(h*=pow(map(cos(map(s,0,mapW,0,TAU)),-1,1,0,.8),.53),h*=map(o,0,mapH,.9,1)):"updownLeft"==landscapeShape?(h*=map(sin(map(s+map(noise(o*noiseScale*4),0,1,-1,1)*mapW*0,mapTrim,mapW-mapTrim,0,TAU)),-1,1,0,.65),h*=map(o,0,mapH,.7,1)):"updownRight"==landscapeShape?(h*=map(sin(map(mapW-s+map(noise(o*noiseScale*4),0,1,-1,1)*mapW*.1,mapTrim,mapW-mapTrim,0,TAU)),-1,1,0,.65),h*=map(o,0,mapH,.7,1)):"mountainAbs"==landscapeShape&&(h*=pow(map(abs(s-mapW/2+map(noise(o*noiseScale*4),0,1,-1,1)*mapW*.15),0,mapW/2,.8,0),1),h*=map(o,0,mapH,.8,1)),h=floor(1e5*h)/1e5,h*=2*TAU;let c=map(s,0,mapW,0,targetSzW);c+=cos(h)*warpSz;let m=map(o,0,mapH,0,targetSz);m+=sin(h)*warpSz,minX=min(c,minX),maxX=max(c,maxX),minY=min(m,minY),maxY=max(m,maxY),l.push(h),r.push(.1),n.push(.001)}hMap.push(l),erodeMap.push(r),depositMap.push(n)}erode(hMap,1e4*e,1,4),erode(hMap,1e4*e,1,4),erode(hMap,1e4*e,1,4),erode(hMap,1e4*e,1,2),erode(hMap,1e4*e,1,1),blurMap(hMap,1,.4)}function prepareLigthMap(){for(let e=0;e<mapW;e++){let t=[];for(let $=0;$<mapH;$++){let a=_normalize(hMapNormal(e,$)),_=_dot(a,lgt);t.push(_)}lMap.push(t)}}function hMapNormal(e,t){let $,a=1,_,s=1;return e==mapW-1?($=e-1,a=-1):$=e+1,t==mapH-1?(_=t-1,s=-1):_=t+1,_createV((hMap[$][t]-hMap[e][t])*a,(hMap[e][_]-hMap[e][t])*s)}function hMapNormal2(e,t){let $,a=1,_,s=1;return e==mapW-1?($=e-1,a=-1):$=e+1,t==mapH-1?(_=t-1,s=-1):_=t+1,_createV((hMapNormal($,t).x-hMapNormal(e,t).x)*a,(hMapNormal(e,_).y-hMapNormal(e,t).y)*s)}function openSimplexNoise(e){"use strict";let t=e=>e.split(",").map(e=>new Uint8Array(e.split("").map(e=>Number(e)))),$=(e,t,$)=>new Int8Array($.split("").map($=>parseInt($,t)+e)),a=e=>e.split(",").map(e=>parseInt(e,32)),_=1/47,s=1/103,l=.7320508075688772/2,r=1/3,n=(.5773502691896258-1)/2,o=-.5/3;var i=t("110101000,110101211"),p=t("0000110010101001,2110210120113111,110010101001211021012011");t("0000011000101001001010001,3111031101310113011141111,11000101001001010001211002101021001201102010120011,31110311013101130111211002101021001201102010120011");let h=$(-5,11,"a77a073aa3700330"),c=$(-11,23,"0ff7mf7fmmfffmfffm07f70f77mm7ff0ff7m0f77m77f0mf7fm7ff0077707770m77f07f70");var m=()=>new Uint8Array([0,1,1,0,4,1,17,0,20,2,21,2,22,5,23,5,26,4,39,3,42,4,43,3]),d=()=>
Cool air, warm dirt, lemonade berry perfume. An amphitheater vignetted by the closing day. The sun is the star of the show, and the ocean is the stage. Immense beauty tinged by a deep sense of uncertain anticipation for what is to come. This is how my first days of adulthood closed. A mix of comfort and discomfort, peace and turmoil. My intention with this work is to capture my memories of those nights, rendered in simulated oil pastels.