ETH Price: $3,486.45 (-0.05%)
Gas: 2 Gwei

Contract

0x905069B34B9011D5D436538C2cd1E6512A105589
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

More Info

Private Name Tags

TokenTracker

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
List For Sale187440852023-12-08 21:01:59225 days ago1702069319IN
0x905069B3...12A105589
0 ETH0.0029644241.11085027
Withdraw187436282023-12-08 19:29:59225 days ago1702063799IN
0x905069B3...12A105589
0 ETH0.0011829141.57158201
Transfer Ownersh...187436282023-12-08 19:29:59225 days ago1702063799IN
0x905069B3...12A105589
0 ETH0.0012513441.57158201
Accept Bid187436012023-12-08 19:24:23225 days ago1702063463IN
0x905069B3...12A105589
0 ETH0.0025769439.72535952
Withdraw187435992023-12-08 19:23:59225 days ago1702063439IN
0x905069B3...12A105589
0 ETH0.0011689141.07925457
Withdraw187435272023-12-08 19:09:11225 days ago1702062551IN
0x905069B3...12A105589
0 ETH0.0012142542.67275597
Place Bid187435232023-12-08 19:08:23225 days ago1702062503IN
0x905069B3...12A105589
1.251 ETH0.002575844.65601292
Place Bid187435012023-12-08 19:03:59225 days ago1702062239IN
0x905069B3...12A105589
1.25 ETH0.0018956246.71207489
Withdraw187434982023-12-08 19:03:23225 days ago1702062203IN
0x905069B3...12A105589
0 ETH0.0013536447.5713123
Place Bid187434782023-12-08 18:59:11225 days ago1702061951IN
0x905069B3...12A105589
1.101 ETH0.0024531942.53045773
Place Bid187434482023-12-08 18:53:11225 days ago1702061591IN
0x905069B3...12A105589
1.1 ETH0.0016734341.236819
Withdraw187434252023-12-08 18:48:35225 days ago1702061315IN
0x905069B3...12A105589
0 ETH0.0012003742.18499527
Place Bid187432712023-12-08 18:17:11225 days ago1702059431IN
0x905069B3...12A105589
1.01 ETH0.002341140.58702997
Withdraw187426702023-12-08 16:15:47225 days ago1702052147IN
0x905069B3...12A105589
0 ETH0.0016814359.09089634
Withdraw187424372023-12-08 15:28:59225 days ago1702049339IN
0x905069B3...12A105589
0 ETH0.0013739348.28462086
Place Bid187424132023-12-08 15:24:11225 days ago1702049051IN
0x905069B3...12A105589
1 ETH0.0028811449.94959583
Place Bid187423412023-12-08 15:09:23225 days ago1702048163IN
0x905069B3...12A105589
0.23 ETH0.0030195452.34900121
Place Bid187384242023-12-08 1:59:59226 days ago1702000799IN
0x905069B3...12A105589
0.22 ETH0.0023226640.26744571
Withdraw187384192023-12-08 1:58:59226 days ago1702000739IN
0x905069B3...12A105589
0 ETH0.0012241143.01933784
Place Bid187323202023-12-07 5:25:23227 days ago1701926723IN
0x905069B3...12A105589
0.12345 ETH0.0019716734.18239885
Place Bid186979282023-12-02 9:49:23231 days ago1701510563IN
0x905069B3...12A105589
0.1234 ETH0.003946844.20262034
0x60806040186966452023-12-02 5:31:23232 days ago1701495083IN
 Create: Wanderer
0 ETH0.0978484728.4893777

Latest 8 internal transactions

Advanced mode:
Parent Transaction Hash Block From To
187436282023-12-08 19:29:59225 days ago1702063799
0x905069B3...12A105589
1.251 ETH
187435992023-12-08 19:23:59225 days ago1702063439
0x905069B3...12A105589
2.23445 ETH
187435272023-12-08 19:09:11225 days ago1702062551
0x905069B3...12A105589
1.25 ETH
187434982023-12-08 19:03:23225 days ago1702062203
0x905069B3...12A105589
1.1 ETH
187434252023-12-08 18:48:35225 days ago1702061315
0x905069B3...12A105589
1 ETH
187426702023-12-08 16:15:47225 days ago1702052147
0x905069B3...12A105589
0.23 ETH
187424372023-12-08 15:28:59225 days ago1702049339
0x905069B3...12A105589
0.22 ETH
187384192023-12-08 1:58:59226 days ago1702000739
0x905069B3...12A105589
0.1234 ETH
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Wanderer

Compiler Version
v0.8.21+commit.d9974bed

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
/**
 *Submitted for verification at Etherscan.io on 2023-12-02
*/

// ,.   ,   ,.         .                 
// `|  /|  / ,-. ,-. ,-| ,-. ,-. ,-. ,-. 
//  | / | /  ,-| | | | | |-' |   |-' |   
//  `'  `'   `-^ ' ' `-' `-' '   `-' '  
//
// SPDX-License-Identifier: MIT
// Copyright Han, 2023

pragma solidity ^0.8.21;

contract Wanderer {
    event ArtpieceCreated(address indexed creator);
    event ArtpieceTransferred(address indexed oldOwner, address indexed newOwner);
    event BidAccepted(uint256 value, address indexed fromAddress, address indexed toAddress);
    event BidPlaced(uint256 value, address indexed fromAddress);
    event BidWithdrawn(uint256 value, address indexed fromAddress);
    event ListedForSale(uint256 value, address indexed fromAddress, address indexed toAddress);
    event SaleCanceled(uint256 value, address indexed fromAddress, address indexed toAddress);
    event SaleCompleted(uint256 value, address indexed fromAddress, address indexed toAddress);

    error FundsTransfer();
    error InsufficientFunds();
    error ListedForSaleToSpecificAddress();
    error NoBid();
    error NotForSale();
    error NotOwner();
    error NotRoyaltyRecipient();
    error NotYourBid();
    error NullAddress();
    error RoyaltyTooHigh();

    string public constant MANIFEST = (
        'You are.' '\n'
    );

    string public constant CORE = (
        'const DIRECTIVES=["#ifdef GL_ES","precision highp float;","#endif","#define AA 2","#define R(a)mat2(cos(a),sin(a),-sin(a),cos(a))"].map((e=>`${e}${String.fromCharCode(10)}`)).join("");let frag_piece=`${DIRECTIVES}uniform vec2 u_resolution,u_mouse;uniform float u_time;float v,r;vec3 t(vec3 v){v=vec3(dot(v,vec3(127.1,311.7,74.7)),dot(v,vec3(269.5,183.3,246.1)),dot(v,vec3(113.5,271.9,124.6)));return-1.+2.*fract(sin(v)*43758.5453123);}vec3 f(vec3 v){return clamp(v*(2.51*v+.03)/(v*(2.43*v+.59)+.14),0.,1.);}float n(vec3 v){return fract(sin(dot(v,vec3(12.9898,78.233,128.852)))*43758.5453)*2.-1.;}float e(vec3 v){float f=(v.x+v.y+v.z)*(1./3.),r,i,s,x,y,d,A,z,a,p,u,c,m,e,g,l,C,E,t,b,B,k;int G=int(floor(v.x+f)),D=int(floor(v.y+f)),F=int(floor(v.z+f)),H,I,J,K,L,M;r=1./6.;i=float(G+D+F)*r;s=float(G)-i;x=float(D)-i;y=float(F)-i;s=v.x-s;x=v.y-x;y=v.z-y;M=s>=x?x>=y?(H=1,I=0,J=0,K=1,L=1,0):s>=y?(H=1,I=0,J=0,K=1,L=0,1):(H=0,I=0,J=1,K=1,L=0,1):x<y?(H=0,I=0,J=1,K=0,L=1,1):s<y?(H=0,I=1,J=0,K=0,L=1,1):(H=0,I=1,J=0,K=1,L=1,0);d=s-float(H)+r;A=x-float(I)+r;z=y-float(J)+r;a=s-float(K)+2.*r;p=x-float(L)+2.*r;u=y-float(M)+2.*r;c=s-1.+3.*r;m=x-1.+3.*r;e=y-1.+3.*r;vec3 h=vec3(G,D,F),O=vec3(G+H,D+I,F+J),P=vec3(G+K,D+L,F+M),Q=vec3(G+1,D+1,F+1),S=normalize(vec3(n(h),n(h*2.01),n(h*2.02))),T=normalize(vec3(n(O),n(O*2.01),n(O*2.02))),U=normalize(vec3(n(P),n(P*2.01),n(P*2.02))),V=normalize(vec3(n(Q),n(Q*2.01),n(Q*2.02)));g=0.;l=0.;C=0.;E=0.;t=.5-s*s-x*x-y*y;if(t>=0.)t*=t,g=t*t*dot(S,vec3(s,x,y));b=.5-d*d-A*A-z*z;if(b>=0.)b*=b,l=b*b*dot(T,vec3(d,A,z));B=.5-a*a-p*p-u*u;if(B>=0.)B*=B,C=B*B*dot(U,vec3(a,p,u));k=.5-c*c-m*m-e*e;if(k>=0.)k*=k,E=k*k*dot(V,vec3(c,m,e));return 96.*(g+l+C+E);}float t(vec2 v){vec3 r=fract(vec3(v.xyx)*.13);r+=dot(r,r.yzx+3.333);return fract((r.x+r.y)*r.z);}float p(vec2 v){vec2 x=floor(v),y=fract(v),r;float f=t(x),L=t(x+vec2(1,0)),n=t(x+vec2(0,1)),s=t(x+vec2(1));r=y*y*(3.-2.*y);return mix(f,L,r.x)+(n-f)*r.y*(1.-r.x)+(s-L)*r.x*r.y;}float m(vec2 v){float r=-7.,y=1.7;vec2 f=vec2(1.5,5),s=vec2(.13,5),L=vec2(-u_time)*-s.x;L.x*=-1.;mat2 m=mat2(cos(.5),sin(.5),-sin(.5),cos(.5));for(int x=0;x<2;++x)r+=y*p(v),v=m*v*.5+f+L*s.y,y*=2.8;return r;}vec2 s(vec3 v){float y=0.,x=1e2,r=v.y+1.,L=m(v.xz*1.5);r+=L*.125;if(x>r)x=r*.8,y=2.;return vec2(x,y);}vec3 c(vec3 v){vec2 r=vec2(.002,0);float x=s(v).x;return normalize(vec3(x-s(v-r.xyy).x,x-s(v-r.yxy).x,x-s(v-r.yyx).x));}vec2 c(vec3 v,vec3 f){float r=0.;vec2 x;for(int y=0;y<128;y++){vec3 L=v+f*r;x=s(L);r+=x.x;if(r>1e2||abs(x.x)<.001)break;}r=min(r,1e2);return vec2(r,x.y);}float e(vec3 v,vec3 f){float x=1.,L=(.8-v.y)/f.y,r,y;if(L>0.)x=min(x,L);r=1.;y=.01;for(int i=0;i<16;i++){float d=s(v+f*y).x,z=clamp(.5*d/y,0.,1.);r=min(r,z*z*(3.-2.*z));y+=clamp(d,.002,.05);if(r<.005||y>x)break;}return clamp(r,0.,1.);}vec4 f(vec3 v,vec3 x){vec3 y=c(v),r=vec3(2,5,-10),L;r=normalize(v-r);float f=clamp(dot(r,y),0.,1.),n=clamp(1.+dot(x,y),0.,1.),s=clamp(dot(reflect(-r,y),-x),0.,1.),i;L=mix(vec3(.6235),vec3(1),f)*2.;L+=vec3(1)*pow(n,7.);L+=vec3(1)*pow(s,2.)*.75;i=e(v,v+vec3(0));L=mix(L*vec3(.6941),L,i);return vec4(L,n);}vec4 m(vec2 x,vec2 r){v=fract(v);vec2 L=(x-.5*r)/r.y,y;vec3 s=vec3(0,3,-10),n=normalize(vec3(0)-s),z=normalize(vec3(n.z,0,-n.x)),F=normalize(L.x*z+L.y*cross(n,z)+n/.43),i,a;y=c(s,F);i=s+F*y.x;a=vec3(0);if(y.x<50.){a=f(i,F).xyz;if(y.y==1.)a=mix(vec3(.0667,.1176,.1686),vec3(.4039),pow(a,vec3(3)));}float d=e(vec3(L*5e2,i.z))*.5+.5,A=smoothstep(.15,.1,d),u;d=(d+A)*.1;d=clamp(d,0.,.5);u=smoothstep(0.,15.,length(i));a=mix(a,mix(vec3(1),vec3(.4431,.4235,.451),L.y+.5)*1.75,u);a=f(a);return vec4(a,u);}vec4 n(vec2 x,vec2 y){vec4 f=vec4(0,0,0,1);for(int L=0;L<AA;L++)for(int i=0;i<AA;i++){float s=u_time-.05*(.5+.5*sin(x.x*147.)*sin(x.y*131.)+float(L*AA+i))/float(AA*AA);v=s/0.;r=2.*acos(-1.)*v;f+=m(x+vec2(i,L)/float(AA),y);}f/=float(AA*AA);return f;}void main(){vec4 v=n(gl_FragCoord.xy,u_resolution);gl_FragColor=vec4(v.xyz+fract(555.*sin(777.*t(gl_FragCoord.xy.xyy)))/256.,1);}`,vert_shader="attribute vec2 p;void main(){gl_Position=vec4(p,1.0,1.0);}",w=window,d=document,device_ratio=window.devicePixelRatio,pixel=new Uint8Array(4),is_mobile=/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent),canvas=d.querySelector("canvas");if(document.body.style.touchAction="none",document.body.style.userSelect="none",!canvas){canvas=d.createElement("canvas"),canvas.style.display="block";var body=d.body;body||(body=d.createElement("body")),body.appendChild(canvas),d.documentElement.appendChild(body)}let webglOptions={};is_mobile||(webglOptions={powerPreference:"high-performance"});let webgl=canvas.getContext("webgl",webglOptions);webgl.program=null,webgl.uniform=(e,r)=>{let t=Array.isArray(r)?r.length-1:0,M=[["uniform1f",0,"float"],["uniform2fv",[0,0],"vec2"]],i={};return i.name=e,i.type=M[t][0],i.value=r||M[t][1],i.inner_type=M[t][2],i.location="",i.dirty=!1,i},webgl.uniforms=[["u_resolution",[0,0]],["u_time",.001*performance.now()],["u_mouse",[0,0]]],webgl.uniforms.forEach(((e,r)=>webgl.uniforms[r]=webgl.uniform(e[0],e[1]))),webgl.create_shader=(e,r,t)=>{let M=e.createShader(r);return webgl.shaderSource(M,t),webgl.compileShader(M),M},webgl.resize=()=>{canvas.width=w.innerWidth*device_ratio,canvas.height=w.innerHeight*device_ratio,canvas.style.width="100%",canvas.style.height="100%";let e=webgl.uniforms[0];e.value=[canvas.width,canvas.height],e.dirty=!0},webgl.render=()=>{webgl.viewport(0,0,canvas.width,canvas.height);let e=webgl.uniforms[1];e.value=.001*performance.now(),e.dirty=!0;let r=webgl.uniforms.filter((e=>1==e.dirty));for(let e in r)webgl[r[e].type](r[e].location,r[e].value),r[e].dirty=!1;webgl.drawArrays(webgl.TRIANGLE_STRIP,0,4),webgl.readPixels(0,0,1,1,webgl.RGBA,webgl.UNSIGNED_BYTE,pixel)},webgl.is_valid=()=>null!=webgl.program,webgl.start_update=()=>{webgl.render(),webgl.frame=requestAnimationFrame(webgl.start_update)},webgl.stop_update=()=>{webgl.frame&&cancelAnimationFrame(webgl.frame)},webgl.change_aa=e=>{frag_piece=frag_piece.replace("#define AA 2",`#define AA ${e}`)};let pointer,load_shader=(e,r)=>{null==r&&(r=vert_shader);let t=webgl;t.stop_update(),t.deleteProgram(t.program),t.program=t.createProgram();const M=webgl.create_shader(t,t.VERTEX_SHADER,r),i=webgl.create_shader(t,t.FRAGMENT_SHADER,e);t.attachShader(t.program,M),t.attachShader(t.program,i),t.linkProgram(t.program);for(let e in webgl.uniforms){let r=webgl.uniforms[e];r.location=t.getUniformLocation(t.program,r.name),r.dirty=!0}let a=Float32Array.of(-1,1,-1,-1,1,1,1,-1),o=t.createBuffer(),n=t.getAttribLocation(t.program,"p");t.bindBuffer(t.ARRAY_BUFFER,o),t.bufferData(t.ARRAY_BUFFER,a,t.STATIC_DRAW),t.enableVertexAttribArray(n),t.vertexAttribPointer(n,2,t.FLOAT,!1,0,0),t.useProgram(t.program),t.resize()},start_shader=(e,r)=>{is_mobile&&webgl.change_aa(1),load_shader(e,r),webgl.start_update()};pointer=w.PointerEvent?{start:["pointerdown"],move:["pointermove"],end:["pointerup"]}:{start:["mousedown","touchstart"],move:["mousemove","touchmove"],end:["mouseup","touchend"]};let drag={update_uniform:e=>{let r=webgl.uniforms[0].value,t=webgl.uniforms[2];t.value=[e.clientX,r[1]-e.clientY],t.dirty=!0},update:e=>{drag.update_uniform(e)},start:e=>{webgl.is_valid&&(drag.update_uniform(e),pointer.move.forEach((e=>{document.addEventListener(e,drag.update)})))},stop:e=>{webgl.is_valid&&(drag.update_uniform(e),pointer.move.forEach((e=>{document.removeEventListener(e,drag.update)})))}},resize=()=>{if(!webgl.is_valid)return;let e=webgl.uniforms[0].value;webgl.resize();let r=webgl.uniforms[0].value,t=[r[0]/e[0],r[1]/e[1]],M=webgl.uniforms[2];M.value=[M.value[0]*t[0],M.value[1]*t[1]],M.dirty=!0};const SIGNATURE_SVG="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjIiIGhlaWdodD0iMjIiIHZpZXdCb3g9IjAgMCAyMiAyMiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0yMS42Mzg2IDIwLjU0NTZDMjEuNjUxNiAyMC40Njc3IDIxLjY1MDUgMjAuMzg2IDIxLjYzNTQgMjAuMzA1MUMyMS4xMTEzIDE3LjYwMDggMjEuMDc5OSAxNC44NTYxIDIxLjA0ODIgMTIuMTFDMjEuMDI1MyAxMC4xMTYyIDIxLjAwMjYgOC4xMjIwMSAyMC43OTEyIDYuMTQyNjVDMjAuNjQ4MiA0LjgwMzkxIDIwLjQyNDggMy40NzQwMSAyMC4wNjc0IDIuMTczMzNDMjAuMDAyNyAxLjk0MDUxIDE5Ljc3MjYgMS43NTkxMyAxOS41Mjg5IDEuNzYxNkMxNy45NjQ0IDEuNzg3NjYgMTYuNDc0MiAxLjM0ODgxIDE0Ljk4NDQgMC45MTAzMjFDMTQuMTgzNSAwLjY3NDM0NiAxMy4zODI2IDAuNDM4MzcxIDEyLjU3MDQgMC4yNzQ5NDlDMTAuMDgwNCAtMC4yMjcyOTIgNy41NjM1IDAuMDU4Njk2MyA1LjA2Njc0IDAuMzQyMjE5TDUuMDQ0NTYgMC4zNDQzMzJDNC4zNzM5NiAwLjQyMDQwOSAzLjcwMzAxIDAuNDk0MDE5IDMuMDMwNjYgMC41NDg5NjNDMi4yNzYyNCAwLjYxMDI0NSAxLjUyMDQyIDAuNjQ4MjgzIDAuNzYyMTI2IDAuNjM5ODNDMC4zNjAyNjQgMC42MzUyNTEgMC4xNzcxMTggMC45OTgwMiAwLjIyMzk2MiAxLjM0NzRDMC45MTYzOTEgNi40MzM1NyAwLjg0NDg5NSAxMS42MDc0IDAuNDMzODc0IDE2LjcxNEMwLjMxNzY0NyAxOC4xNjQ4IDAuMTcwNDI2IDE5LjYxNTUgMC4wMDI3Nzc3MyAyMS4wNjE2Qy0wLjAzMzE0NjkgMjEuMzYzOCAwLjI4NjMwMSAyMS42MjEzIDAuNTYxMDE5IDIxLjYyMTNMOC4xMjQyMSAyMS42MjY1QzExLjAzMzggMjEuNjI4MyAxMy45NDMzIDIxLjYzMDEgMTYuODUyOCAyMS42MzI1QzE4LjM4MzEgMjEuNjM5MSAxOS45MjIyIDIxLjYzOTEgMjEuNDYxMyAyMS42MzkxQzIyLjExMzggMjEuNjM5MSAyMi4xNzQ0IDIwLjcxMyAyMS42Mzg2IDIwLjU0NTZaTTIwLjU0MDggMjAuNTE5MUMyMC4yOTM1IDE5LjIxODggMjAuMTQ2IDE3LjkwMTMgMjAuMDYyOSAxNi41Nzk4QzE5Ljk3MDkgMTUuMTI1OSAxOS45NTM2IDEzLjY2MjIgMTkuOTM2MyAxMi4xOTc3QzE5Ljg5OTMgOS4wNjQxNyAxOS44NjI0IDUuOTI3MSAxOS4wOTU2IDIuODc5NDlDMTcuODc5NSAyLjg0MDAzIDE2LjY4MzggMi41NTk2OCAxNS41MTY5IDIuMjI5MzJDMTQuMzU3NSAxLjkwMDM3IDEzLjIyNzMgMS41MzA5IDEyLjAyMzEgMS4zMDkzN0MxMC44MTkzIDEuMDg3NDggOS41ODE2MiAxLjA3NjU2IDguMzYxOTYgMS4xNDU5NEM3LjMzIDEuMjAzMzUgNi4zMDIyNyAxLjMxOTU4IDUuMjc0ODkgMS40MzYxNkMzLjk4MTk2IDEuNTgyNjggMi42ODkwMyAxLjcyOTE5IDEuMzg3NjQgMS43NTc3MkMxLjQ3MDQxIDIuNDIxNjIgMS41NDIyNSAzLjA4NjI0IDEuNjAyNDggMy43NTI2QzEuNjU0OTYgNC4zMzI2OCAxLjY5ODk4IDQuOTEzNDYgMS43MzM4NSA1LjQ5NTY1QzIuMDM1MzQgMTAuNTA0MyAxLjczMjggMTUuNTI3NCAxLjE3NjMyIDIwLjUwNzJDMi41MDc2NCAyMC41MDg3IDMuODM3OTEgMjAuNTA4NyA1LjE2OTU4IDIwLjUwODdDOS4wNjUzMSAyMC41MTE3IDEyLjk2MSAyMC41MTM5IDE2Ljg1NjcgMjAuNTE2NEwyMC41NDA4IDIwLjUxOTFaTTEwLjc0NiAxMi4yMzAxQzEwLjQxOTIgMTIuMjA3OSAxMC4xMzk5IDEyLjE4OTMgMTAuMDE5OCAxMi4yMjk4QzkuNDc0MiAxMi4yNjc0IDkuNTQwMDcgMTEuMjkzNiA5LjU4OTc0IDEwLjU2MjFDOS42MTE1NyAxMC4yMzY2IDkuNjMwMjQgOS45NTkxIDkuNTkwNDQgOS44MzkzNkM5LjU1Mjc1IDkuMjkzNDQgMTAuNTI2MiA5LjM1OTMxIDExLjI1NzggOS40MDg5OEMxMS41ODI4IDkuNDMwODEgMTEuODYwNCA5LjQ0OTgyIDExLjk4MDEgOS40MTAwMkMxMi41MjU3IDkuMzcyMzMgMTIuNDU5OCAxMC4zNDYyIDEyLjQxMDIgMTEuMDc3N0MxMi4zODgzIDExLjQwMzEgMTIuMzY5NyAxMS42ODA3IDEyLjQwOTUgMTEuODAwNEMxMi40NDU0IDEyLjM0NTMgMTEuNDc2NSAxMi4yNzk0IDEwLjc0NiAxMi4yMzAxWiIgZmlsbD0id2hpdGUiLz4KPC9zdmc+Cg==",appendSignature=()=>{const e=document.createElement("img");e.src=SIGNATURE_SVG.trim(),e.style.cssText="width:40px;z-index:50;position:fixed;bottom:20px;right:20px;",body.appendChild(e)};if(webgl)start_shader(frag_piece),resize(),pointer.start.forEach((e=>{document.addEventListener(e,drag.start)})),pointer.end.forEach((e=>{document.addEventListener(e,drag.stop)})),window.addEventListener("resize",resize),appendSignature();else{const e=document.createElement("div");e.style.cssText="align-items:center;background:#969696;color:#fff;display:flex;font-family:monospace;font-size:20px;height:100vh;justify-content:center;left:0;position:fixed;top:0;width:100vw;",e.innerHTML="NOT SUPPORTED",document.body.append(e)}'
    );

    modifier onlyOwner() {
        if (owner != msg.sender) {
            revert NotOwner();
        }

        _;
    }

    modifier onlyRoyaltyRecipient() {
        if (royaltyRecipient != msg.sender) {
            revert NotRoyaltyRecipient();
        }

        _;
    }

    struct Offer {
        bool active;
        uint256 value;
        address toAddress;
    }

    struct Bid {
        bool active;
        uint256 value;
        address fromAddress;
    }

    address public owner;

    Offer public currentOffer;

    Bid public currentBid;

    address public royaltyRecipient;

    uint256 public royaltyPercentage;

    mapping (address => uint256) public pendingWithdrawals;

    constructor(uint256 _royaltyPercentage) {
        if (_royaltyPercentage >= 100) {
            revert RoyaltyTooHigh();
        }

        owner = msg.sender;
        royaltyRecipient = msg.sender;
        royaltyPercentage = _royaltyPercentage;

        emit ArtpieceCreated(msg.sender);
    }

    function name() public view virtual returns (string memory) {
        return 'Wanderer';
    }

    function symbol() public view virtual returns (string memory) {
        return 'W';
    }

    function artpiece() public view virtual returns (string memory) {
        return string.concat(
            '<!DOCTYPE html>'
            '<html>'
                '<head>'
                    '<title>', 'Wanderer', '</title>'

                    '<meta name="viewport" content="width=device-width, initial-scale=1" />'

                    '<style>html,body{background:#969696;margin:0;padding:0;overflow:hidden;}</style>'
                '</head>'

                '<body>'
                    '<script type="text/javascript">',
                        CORE,
                    '</script>'
                '</body>'
            '</html>'
        );
    }

    function withdraw() public {
        uint256 amount = pendingWithdrawals[msg.sender];

        pendingWithdrawals[msg.sender] = 0;

        _sendFunds(amount);
    }

    function transferOwnership(address newOwner) public onlyOwner {
        if (newOwner == address(0)) {
            revert NullAddress();
        }

        _transferOwnership(newOwner);

        if (currentBid.fromAddress == newOwner) {
            uint256 amount = currentBid.value;

            currentBid = Bid({ active: false, value: 0, fromAddress: address(0) });

            pendingWithdrawals[newOwner] += amount;
        }

        if (currentOffer.active) {
            currentOffer = Offer({ active: false, value: 0, toAddress: address(0) });
        }
    }

    function listForSale(uint256 salePriceInWei) public onlyOwner {
        currentOffer = Offer({ active: true, value: salePriceInWei, toAddress: address(0) });

        emit ListedForSale(salePriceInWei, msg.sender, address(0));
    }

    function listForSaleToAddress(uint256 salePriceInWei, address toAddress) public onlyOwner {
        currentOffer = Offer({ active: true, value: salePriceInWei, toAddress: toAddress });

        emit ListedForSale(salePriceInWei, msg.sender, toAddress);
    }

    function cancelFromSale() public onlyOwner {
        Offer memory oldOffer = currentOffer;

        currentOffer = Offer({ active: false, value: 0, toAddress: address(0) });

        emit SaleCanceled(oldOffer.value, msg.sender, oldOffer.toAddress);
    }

    function buyNow() public payable {
        if (!currentOffer.active) {
            revert NotForSale();
        }

        if (currentOffer.toAddress != address(0) && currentOffer.toAddress != msg.sender) {
            revert ListedForSaleToSpecificAddress();
        }

        if (msg.value != currentOffer.value) {
            revert InsufficientFunds();
        }

        currentOffer = Offer({ active: false, value: 0, toAddress: address(0) });

        uint256 royaltyAmount = _calcRoyalty(msg.value);

        pendingWithdrawals[owner] += msg.value - royaltyAmount;
        pendingWithdrawals[royaltyRecipient] += royaltyAmount;

        emit SaleCompleted(msg.value, owner, msg.sender);

        _transferOwnership(msg.sender);
    }

    function placeBid() public payable {
        if (msg.value <= currentBid.value) {
            revert InsufficientFunds();
        }

        if (currentBid.value > 0) {
            pendingWithdrawals[currentBid.fromAddress] += currentBid.value;
        }

        currentBid = Bid({ active: true, value: msg.value, fromAddress: msg.sender });

        emit BidPlaced(msg.value, msg.sender);
    }

    function acceptBid() public onlyOwner {
        if (!currentBid.active) {
            revert NoBid();
        }

        uint256 amount = currentBid.value;
        address bidder = currentBid.fromAddress;

        currentOffer = Offer({ active: false, value: 0, toAddress: address(0) });
        currentBid = Bid({ active: false, value: 0, fromAddress: address(0) });

        uint256 royaltyAmount = _calcRoyalty(amount);

        pendingWithdrawals[owner] += amount - royaltyAmount;
        pendingWithdrawals[royaltyRecipient] += royaltyAmount;

        emit BidAccepted(amount, owner, bidder);

        _transferOwnership(bidder);
    }

    function withdrawBid() public {
        if (msg.sender != currentBid.fromAddress) {
            revert NotYourBid();
        }

        uint256 amount = currentBid.value;

        currentBid = Bid({ active: false, value: 0, fromAddress: address(0) });

        _sendFunds(amount);

        emit BidWithdrawn(amount, msg.sender);
    }

    function setRoyaltyRecipient(address newRoyaltyRecipient) public onlyRoyaltyRecipient {
        if (newRoyaltyRecipient == address(0)) {
            revert NullAddress();
        }

        royaltyRecipient = newRoyaltyRecipient;
    }

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = owner;

        owner = newOwner;

        emit ArtpieceTransferred(oldOwner, newOwner);
    }

    function _sendFunds(uint256 amount) internal virtual {
        (bool success, ) = msg.sender.call{value: amount}('');

        if (!success) {
            revert FundsTransfer();
        }
    }

    function _calcRoyalty(uint256 amount) internal virtual returns (uint256) {
        return (amount * royaltyPercentage) / 100;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"uint256","name":"_royaltyPercentage","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"FundsTransfer","type":"error"},{"inputs":[],"name":"InsufficientFunds","type":"error"},{"inputs":[],"name":"ListedForSaleToSpecificAddress","type":"error"},{"inputs":[],"name":"NoBid","type":"error"},{"inputs":[],"name":"NotForSale","type":"error"},{"inputs":[],"name":"NotOwner","type":"error"},{"inputs":[],"name":"NotRoyaltyRecipient","type":"error"},{"inputs":[],"name":"NotYourBid","type":"error"},{"inputs":[],"name":"NullAddress","type":"error"},{"inputs":[],"name":"RoyaltyTooHigh","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"creator","type":"address"}],"name":"ArtpieceCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"ArtpieceTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":true,"internalType":"address","name":"fromAddress","type":"address"},{"indexed":true,"internalType":"address","name":"toAddress","type":"address"}],"name":"BidAccepted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":true,"internalType":"address","name":"fromAddress","type":"address"}],"name":"BidPlaced","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":true,"internalType":"address","name":"fromAddress","type":"address"}],"name":"BidWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":true,"internalType":"address","name":"fromAddress","type":"address"},{"indexed":true,"internalType":"address","name":"toAddress","type":"address"}],"name":"ListedForSale","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":true,"internalType":"address","name":"fromAddress","type":"address"},{"indexed":true,"internalType":"address","name":"toAddress","type":"address"}],"name":"SaleCanceled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":true,"internalType":"address","name":"fromAddress","type":"address"},{"indexed":true,"internalType":"address","name":"toAddress","type":"address"}],"name":"SaleCompleted","type":"event"},{"inputs":[],"name":"CORE","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MANIFEST","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acceptBid","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"artpiece","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyNow","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"cancelFromSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"currentBid","outputs":[{"internalType":"bool","name":"active","type":"bool"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"address","name":"fromAddress","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentOffer","outputs":[{"internalType":"bool","name":"active","type":"bool"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"address","name":"toAddress","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"salePriceInWei","type":"uint256"}],"name":"listForSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"salePriceInWei","type":"uint256"},{"internalType":"address","name":"toAddress","type":"address"}],"name":"listForSaleToAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"pendingWithdrawals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"placeBid","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"royaltyPercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"royaltyRecipient","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newRoyaltyRecipient","type":"address"}],"name":"setRoyaltyRecipient","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawBid","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405234801561000f575f80fd5b50604051613cee380380613cee83398101604081905261002e916100a2565b6064811061004f5760405163c2b03beb60e01b815260040160405180910390fd5b5f8054336001600160a01b031991821681178355600780549092168117909155600883905560405190917fcaea53471edbf6ace3d253c1bdecf4553374dd40c18148776b57bf5af0f7f02f91a2506100b9565b5f602082840312156100b2575f80fd5b5051919050565b613c28806100c65f395ff3fe608060405260043610610126575f3560e01c80638a71bb2d116100a8578063def181011161006d578063def181011461030c578063e52a78741461035c578063ecfc7ecc14610370578063f2fde38b14610378578063f3f4370314610397578063fa4e28f6146103c2575f80fd5b80638a71bb2d1461027b5780638da5cb5b1461029e57806395d89b41146102bc5780639c3962f0146102e5578063c7857fb5146102ed575f80fd5b80633ccfd60b116100ee5780633ccfd60b146101e957806341e42f30146101fd57806342c472171461021c5780634c00de82146102305780636b6c077414610267575f80fd5b806306fdde031461012a5780630dca550e1461016c57806337271cc71461018d57806337a908fc146101a157806338739dad146101b5575b5f80fd5b348015610135575f80fd5b506040805180820190915260088152672bb0b73232b932b960c11b60208201525b6040516101639190610d9d565b60405180910390f35b348015610177575f80fd5b5061018b610186366004610dea565b6103ec565b005b348015610198575f80fd5b5061018b61049c565b3480156101ac575f80fd5b50610156610543565b3480156101c0575f80fd5b50610156604051806040016040528060098152602001682cb7ba9030b932970560b91b81525081565b3480156101f4575f80fd5b5061018b610585565b348015610208575f80fd5b5061018b610217366004610e14565b6105a4565b348015610227575f80fd5b5061018b610618565b34801561023b575f80fd5b5060075461024f906001600160a01b031681565b6040516001600160a01b039091168152602001610163565b348015610272575f80fd5b506101566106f0565b348015610286575f80fd5b5061029060085481565b604051908152602001610163565b3480156102a9575f80fd5b505f5461024f906001600160a01b031681565b3480156102c7575f80fd5b506040805180820190915260018152605760f81b6020820152610156565b61018b61070f565b3480156102f8575f80fd5b5061018b610307366004610e34565b610889565b348015610317575f80fd5b506004546005546006546103369260ff1691906001600160a01b031683565b60408051931515845260208401929092526001600160a01b031690820152606001610163565b348015610367575f80fd5b5061018b610922565b61018b610ab1565b348015610383575f80fd5b5061018b610392366004610e14565b610b85565b3480156103a2575f80fd5b506102906103b1366004610e14565b60096020525f908152604090205481565b3480156103cd575f80fd5b506001546002546003546103369260ff1691906001600160a01b031683565b5f546001600160a01b03163314610416576040516330cd747160e01b815260040160405180910390fd5b604080516060810182526001808252602082018590526001600160a01b038416918301829052805460ff1916811790556002849055600380546001600160a01b03191682179055905133907f812dc3f3c55b5006c05a0b308b2cb2eee57e2b53135f8b53ff5728c329b480a0906104909086815260200190565b60405180910390a35050565b6006546001600160a01b031633146104c75760405163173f0e6f60e21b815260040160405180910390fd5b60058054604080516060810182525f8082526020820181905291018190526004805460ff19169055909155600680546001600160a01b031916905561050b81610ca1565b60405181815233907f5e9c7ae3229b2cda5065d7058fcc05765c695c29ce05313fbe96cb2ca639231a9060200160405180910390a250565b606060405180612be00160405280612bb4815260200161103f612bb491396040516020016105719190610e4b565b604051602081830303815290604052905090565b335f90815260096020526040812080549190556105a181610ca1565b50565b6007546001600160a01b031633146105cf57604051631229bf3760e11b815260040160405180910390fd5b6001600160a01b0381166105f65760405163e99d5ac560e01b815260040160405180910390fd5b600780546001600160a01b0319166001600160a01b0392909216919091179055565b5f546001600160a01b03163314610642576040516330cd747160e01b815260040160405180910390fd5b60408051606080820183526001805460ff811615158452600280546020808701918252600380546001600160a01b038082168a8c019081528b51998a018c525f808b52948a01859052988b0184905260ff1990961690965592556001600160a01b03199093169055915190519351929391169133917ff1f48fe426adbd884772d4c165015a460df54458ff7e238dff36fe3c5d341ccf916106e591815260200190565b60405180910390a350565b60405180612be00160405280612bb4815260200161103f612bb4913981565b60015460ff1661073257604051631d99ddbf60e01b815260040160405180910390fd5b6003546001600160a01b03161580159061075757506003546001600160a01b03163314155b156107755760405163d6da33db60e01b815260040160405180910390fd5b60025434146107975760405163356680b760e01b815260040160405180910390fd5b604080516060810182525f8082526020820181905291018190526001805460ff191690556002819055600380546001600160a01b03191690556107d934610d0b565b90506107e58134610fe2565b5f80546001600160a01b03168152600960205260408120805490919061080c908490610ff5565b90915550506007546001600160a01b03165f908152600960205260408120805483929061083a908490610ff5565b90915550505f5460405134815233916001600160a01b0316907fdb87be53c711a1eb193f5fffddcfd85425990853a8423fa2bfd4a8620c218ed49060200160405180910390a36105a133610d2c565b5f546001600160a01b031633146108b3576040516330cd747160e01b815260040160405180910390fd5b604080516060810182526001808252602082018490525f918301829052805460ff1916811790556002839055600380546001600160a01b0319169055905133907f812dc3f3c55b5006c05a0b308b2cb2eee57e2b53135f8b53ff5728c329b480a0906106e59085815260200190565b5f546001600160a01b0316331461094c576040516330cd747160e01b815260040160405180910390fd5b60045460ff1661096f576040516313650ef160e11b815260040160405180910390fd5b600580546006805460408051606080820183525f80835260208084018290529284018190526001805460ff199081169091556002829055600380546001600160a01b031990811690915585519384018652828452938301829052919093018390526004805490911690559481905593811690915590916001600160a01b03909116906109fa83610d0b565b9050610a068184610fe2565b5f80546001600160a01b031681526009602052604081208054909190610a2d908490610ff5565b90915550506007546001600160a01b03165f9081526009602052604081208054839290610a5b908490610ff5565b90915550505f546040518481526001600160a01b038481169216907fd32f7ef8c20232133e4dbd098b49d6b86ab580eee8a90a815925e900584749639060200160405180910390a3610aac82610d2c565b505050565b6005543411610ad35760405163356680b760e01b815260040160405180910390fd5b60055415610b0d576005546006546001600160a01b03165f9081526009602052604081208054909190610b07908490610ff5565b90915550505b604080516060810182526001808252346020808401829052339385018490526004805460ff19169093179092556005819055600680546001600160a01b03191684179055925192835290917f5445de3f4fe13efb115ec05c57e09cc0e277801d0cd2ae780457ebcd8688c391910160405180910390a2565b5f546001600160a01b03163314610baf576040516330cd747160e01b815260040160405180910390fd5b6001600160a01b038116610bd65760405163e99d5ac560e01b815260040160405180910390fd5b610bdf81610d2c565b6006546001600160a01b03808316911603610c5c5760058054604080516060810182525f80825260208083018290529183018190526004805460ff1916905593849055600680546001600160a01b03191690556001600160a01b0385168452600990528220805491928392610c55908490610ff5565b9091555050505b60015460ff16156105a157604080516060810182525f8082526020820181905291018190526001805460ff19169055600255600380546001600160a01b031916905550565b6040515f90339083908381818185875af1925050503d805f8114610ce0576040519150601f19603f3d011682016040523d82523d5f602084013e610ce5565b606091505b5050905080610d07576040516342bb570960e01b815260040160405180910390fd5b5050565b5f606460085483610d1c9190611008565b610d26919061101f565b92915050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917fb0594827696749bdc48b310d4a5cfee5e9a89491f1c6bea2b928c2c33db414de9190a35050565b5f5b83811015610d95578181015183820152602001610d7d565b50505f910152565b602081525f8251806020840152610dbb816040850160208701610d7b565b601f01601f19169190910160400192915050565b80356001600160a01b0381168114610de5575f80fd5b919050565b5f8060408385031215610dfb575f80fd5b82359150610e0b60208401610dcf565b90509250929050565b5f60208284031215610e24575f80fd5b610e2d82610dcf565b9392505050565b5f60208284031215610e44575f80fd5b5035919050565b7f3c21444f43545950452068746d6c3e3c68746d6c3e3c686561643e3c7469746c815261329f60f11b6020820152672bb0b73232b932b960c11b60228201527f3c2f7469746c653e3c6d657461206e616d653d2276696577706f72742220636f602a8201527f6e74656e743d2277696474683d6465766963652d77696474682c20696e697469604a8201527f616c2d7363616c653d3122202f3e3c7374796c653e68746d6c2c626f64797b62606a8201527f61636b67726f756e643a233936393639363b6d617267696e3a303b7061646469608a8201527f6e673a303b6f766572666c6f773a68696464656e3b7d3c2f7374796c653e3c2f60aa8201527f686561643e3c626f64793e3c73637269707420747970653d22746578742f6a6160ca820152693b30b9b1b934b83a111f60b11b60ea8201525f8251610f958160f4850160208701610d7b565b8201610fc360f482017f3c2f7363726970743e3c2f626f64793e3c2f68746d6c3e0000000000000000009052565b61010b019392505050565b634e487b7160e01b5f52601160045260245ffd5b81810381811115610d2657610d26610fce565b80820180821115610d2657610d26610fce565b8082028115828204841417610d2657610d26610fce565b5f8261103957634e487b7160e01b5f52601260045260245ffd5b50049056fe636f6e737420444952454354495645533d5b2223696664656620474c5f4553222c22707265636973696f6e20686967687020666c6f61743b222c2223656e646966222c2223646566696e652041412032222c2223646566696e6520522861296d61743228636f732861292c73696e2861292c2d73696e2861292c636f7328612929225d2e6d61702828653d3e60247b657d247b537472696e672e66726f6d43686172436f6465283130297d6029292e6a6f696e282222293b6c657420667261675f70696563653d60247b444952454354495645537d756e69666f726d207665633220755f7265736f6c7574696f6e2c755f6d6f7573653b756e69666f726d20666c6f617420755f74696d653b666c6f617420762c723b76656333207428766563332076297b763d7665633328646f7428762c76656333283132372e312c3331312e372c37342e3729292c646f7428762c76656333283236392e352c3138332e332c3234362e3129292c646f7428762c76656333283131332e352c3237312e392c3132342e362929293b72657475726e2d312e2b322e2a66726163742873696e2876292a34333735382e35343533313233293b7d76656333206628766563332076297b72657475726e20636c616d7028762a28322e35312a762b2e3033292f28762a28322e34332a762b2e3539292b2e3134292c302e2c312e293b7d666c6f6174206e28766563332076297b72657475726e2066726163742873696e28646f7428762c766563332831322e393839382c37382e3233332c3132382e3835322929292a34333735382e35343533292a322e2d312e3b7d666c6f6174206528766563332076297b666c6f617420663d28762e782b762e792b762e7a292a28312e2f332e292c722c692c732c782c792c642c412c7a2c612c702c752c632c6d2c652c672c6c2c432c452c742c622c422c6b3b696e7420473d696e7428666c6f6f7228762e782b6629292c443d696e7428666c6f6f7228762e792b6629292c463d696e7428666c6f6f7228762e7a2b6629292c482c492c4a2c4b2c4c2c4d3b723d312e2f362e3b693d666c6f617428472b442b46292a723b733d666c6f61742847292d693b783d666c6f61742844292d693b793d666c6f61742846292d693b733d762e782d733b783d762e792d783b793d762e7a2d793b4d3d733e3d783f783e3d793f28483d312c493d302c4a3d302c4b3d312c4c3d312c30293a733e3d793f28483d312c493d302c4a3d302c4b3d312c4c3d302c31293a28483d302c493d302c4a3d312c4b3d312c4c3d302c31293a783c793f28483d302c493d302c4a3d312c4b3d302c4c3d312c31293a733c793f28483d302c493d312c4a3d302c4b3d302c4c3d312c31293a28483d302c493d312c4a3d302c4b3d312c4c3d312c30293b643d732d666c6f61742848292b723b413d782d666c6f61742849292b723b7a3d792d666c6f6174284a292b723b613d732d666c6f6174284b292b322e2a723b703d782d666c6f6174284c292b322e2a723b753d792d666c6f6174284d292b322e2a723b633d732d312e2b332e2a723b6d3d782d312e2b332e2a723b653d792d312e2b332e2a723b7665633320683d7665633328472c442c46292c4f3d7665633328472b482c442b492c462b4a292c503d7665633328472b4b2c442b4c2c462b4d292c513d7665633328472b312c442b312c462b31292c533d6e6f726d616c697a652876656333286e2868292c6e28682a322e3031292c6e28682a322e30322929292c543d6e6f726d616c697a652876656333286e284f292c6e284f2a322e3031292c6e284f2a322e30322929292c553d6e6f726d616c697a652876656333286e2850292c6e28502a322e3031292c6e28502a322e30322929292c563d6e6f726d616c697a652876656333286e2851292c6e28512a322e3031292c6e28512a322e30322929293b673d302e3b6c3d302e3b433d302e3b453d302e3b743d2e352d732a732d782a782d792a793b696628743e3d302e29742a3d742c673d742a742a646f7428532c7665633328732c782c7929293b623d2e352d642a642d412a412d7a2a7a3b696628623e3d302e29622a3d622c6c3d622a622a646f7428542c7665633328642c412c7a29293b423d2e352d612a612d702a702d752a753b696628423e3d302e29422a3d422c433d422a422a646f7428552c7665633328612c702c7529293b6b3d2e352d632a632d6d2a6d2d652a653b6966286b3e3d302e296b2a3d6b2c453d6b2a6b2a646f7428562c7665633328632c6d2c6529293b72657475726e2039362e2a28672b6c2b432b45293b7d666c6f6174207428766563322076297b7665633320723d6672616374287665633328762e787978292a2e3133293b722b3d646f7428722c722e797a782b332e333333293b72657475726e2066726163742828722e782b722e79292a722e7a293b7d666c6f6174207028766563322076297b7665633220783d666c6f6f722876292c793d66726163742876292c723b666c6f617420663d742878292c4c3d7428782b7665633228312c3029292c6e3d7428782b7665633228302c3129292c733d7428782b76656332283129293b723d792a792a28332e2d322e2a79293b72657475726e206d697828662c4c2c722e78292b286e2d66292a722e792a28312e2d722e78292b28732d4c292a722e782a722e793b7d666c6f6174206d28766563322076297b666c6f617420723d2d372e2c793d312e373b7665633220663d7665633228312e352c35292c733d76656332282e31332c35292c4c3d76656332282d755f74696d65292a2d732e783b4c2e782a3d2d312e3b6d617432206d3d6d61743228636f73282e35292c73696e282e35292c2d73696e282e35292c636f73282e3529293b666f7228696e7420783d303b783c323b2b2b7829722b3d792a702876292c763d6d2a762a2e352b662b4c2a732e792c792a3d322e383b72657475726e20723b7d76656332207328766563332076297b666c6f617420793d302e2c783d3165322c723d762e792b312e2c4c3d6d28762e787a2a312e35293b722b3d4c2a2e3132353b696628783e7229783d722a2e382c793d322e3b72657475726e207665633228782c79293b7d76656333206328766563332076297b7665633220723d76656332282e3030322c30293b666c6f617420783d732876292e783b72657475726e206e6f726d616c697a65287665633328782d7328762d722e787979292e782c782d7328762d722e797879292e782c782d7328762d722e797978292e7829293b7d766563322063287665633320762c766563332066297b666c6f617420723d302e3b7665633220783b666f7228696e7420793d303b793c3132383b792b2b297b76656333204c3d762b662a723b783d73284c293b722b3d782e783b696628723e3165327c7c61627328782e78293c2e30303129627265616b3b7d723d6d696e28722c316532293b72657475726e207665633228722c782e79293b7d666c6f61742065287665633320762c766563332066297b666c6f617420783d312e2c4c3d282e382d762e79292f662e792c722c793b6966284c3e302e29783d6d696e28782c4c293b723d312e3b793d2e30313b666f7228696e7420693d303b693c31363b692b2b297b666c6f617420643d7328762b662a79292e782c7a3d636c616d70282e352a642f792c302e2c312e293b723d6d696e28722c7a2a7a2a28332e2d322e2a7a29293b792b3d636c616d7028642c2e3030322c2e3035293b696628723c2e3030357c7c793e7829627265616b3b7d72657475726e20636c616d7028722c302e2c312e293b7d766563342066287665633320762c766563332078297b7665633320793d632876292c723d7665633328322c352c2d3130292c4c3b723d6e6f726d616c697a6528762d72293b666c6f617420663d636c616d7028646f7428722c79292c302e2c312e292c6e3d636c616d7028312e2b646f7428782c79292c302e2c312e292c733d636c616d7028646f74287265666c656374282d722c79292c2d78292c302e2c312e292c693b4c3d6d69782876656333282e36323335292c766563332831292c66292a322e3b4c2b3d766563332831292a706f77286e2c372e293b4c2b3d766563332831292a706f7728732c322e292a2e37353b693d6528762c762b76656333283029293b4c3d6d6978284c2a76656333282e36393431292c4c2c69293b72657475726e2076656334284c2c6e293b7d76656334206d287665633220782c766563322072297b763d66726163742876293b76656332204c3d28782d2e352a72292f722e792c793b7665633320733d7665633328302c332c2d3130292c6e3d6e6f726d616c697a6528766563332830292d73292c7a3d6e6f726d616c697a652876656333286e2e7a2c302c2d6e2e7829292c463d6e6f726d616c697a65284c2e782a7a2b4c2e792a63726f7373286e2c7a292b6e2f2e3433292c692c613b793d6328732c46293b693d732b462a792e783b613d766563332830293b696628792e783c35302e297b613d6628692c46292e78797a3b696628792e793d3d312e29613d6d69782876656333282e303636372c2e313137362c2e31363836292c76656333282e34303339292c706f7728612c7665633328332929293b7d666c6f617420643d652876656333284c2a3565322c692e7a29292a2e352b2e352c413d736d6f6f746873746570282e31352c2e312c64292c753b643d28642b41292a2e313b643d636c616d7028642c302e2c2e35293b753d736d6f6f74687374657028302e2c31352e2c6c656e677468286929293b613d6d697828612c6d697828766563332831292c76656333282e343433312c2e343233352c2e343531292c4c2e792b2e35292a312e37352c75293b613d662861293b72657475726e207665633428612c75293b7d76656334206e287665633220782c766563322079297b7665633420663d7665633428302c302c302c31293b666f7228696e74204c3d303b4c3c41413b4c2b2b29666f7228696e7420693d303b693c41413b692b2b297b666c6f617420733d755f74696d652d2e30352a282e352b2e352a73696e28782e782a3134372e292a73696e28782e792a3133312e292b666c6f6174284c2a41412b6929292f666c6f61742841412a4141293b763d732f302e3b723d322e2a61636f73282d312e292a763b662b3d6d28782b7665633228692c4c292f666c6f6174284141292c79293b7d662f3d666c6f61742841412a4141293b72657475726e20663b7d766f6964206d61696e28297b7665633420763d6e28676c5f46726167436f6f72642e78792c755f7265736f6c7574696f6e293b676c5f46726167436f6c6f723d7665633428762e78797a2b6672616374283535352e2a73696e283737372e2a7428676c5f46726167436f6f72642e78792e7879792929292f3235362e2c31293b7d602c766572745f7368616465723d22617474726962757465207665633220703b766f6964206d61696e28297b676c5f506f736974696f6e3d7665633428702c312e302c312e30293b7d222c773d77696e646f772c643d646f63756d656e742c6465766963655f726174696f3d77696e646f772e646576696365506978656c526174696f2c706978656c3d6e65772055696e743841727261792834292c69735f6d6f62696c653d2f416e64726f69647c7765624f537c6950686f6e657c695061647c69506f647c426c61636b42657272797c49454d6f62696c657c4f70657261204d696e692f692e74657374286e6176696761746f722e757365724167656e74292c63616e7661733d642e717565727953656c6563746f72282263616e76617322293b696628646f63756d656e742e626f64792e7374796c652e746f756368416374696f6e3d226e6f6e65222c646f63756d656e742e626f64792e7374796c652e7573657253656c6563743d226e6f6e65222c2163616e766173297b63616e7661733d642e637265617465456c656d656e74282263616e76617322292c63616e7661732e7374796c652e646973706c61793d22626c6f636b223b76617220626f64793d642e626f64793b626f64797c7c28626f64793d642e637265617465456c656d656e742822626f64792229292c626f64792e617070656e644368696c642863616e766173292c642e646f63756d656e74456c656d656e742e617070656e644368696c6428626f6479297d6c657420776562676c4f7074696f6e733d7b7d3b69735f6d6f62696c657c7c28776562676c4f7074696f6e733d7b706f776572507265666572656e63653a22686967682d706572666f726d616e6365227d293b6c657420776562676c3d63616e7661732e676574436f6e746578742822776562676c222c776562676c4f7074696f6e73293b776562676c2e70726f6772616d3d6e756c6c2c776562676c2e756e69666f726d3d28652c72293d3e7b6c657420743d41727261792e697341727261792872293f722e6c656e6774682d313a302c4d3d5b5b22756e69666f726d3166222c302c22666c6f6174225d2c5b22756e69666f726d326676222c5b302c305d2c2276656332225d5d2c693d7b7d3b72657475726e20692e6e616d653d652c692e747970653d4d5b745d5b305d2c692e76616c75653d727c7c4d5b745d5b315d2c692e696e6e65725f747970653d4d5b745d5b325d2c692e6c6f636174696f6e3d22222c692e64697274793d21312c697d2c776562676c2e756e69666f726d733d5b5b22755f7265736f6c7574696f6e222c5b302c305d5d2c5b22755f74696d65222c2e3030312a706572666f726d616e63652e6e6f7728295d2c5b22755f6d6f757365222c5b302c305d5d5d2c776562676c2e756e69666f726d732e666f7245616368282828652c72293d3e776562676c2e756e69666f726d735b725d3d776562676c2e756e69666f726d28655b305d2c655b315d2929292c776562676c2e6372656174655f7368616465723d28652c722c74293d3e7b6c6574204d3d652e6372656174655368616465722872293b72657475726e20776562676c2e736861646572536f75726365284d2c74292c776562676c2e636f6d70696c65536861646572284d292c4d7d2c776562676c2e726573697a653d28293d3e7b63616e7661732e77696474683d772e696e6e657257696474682a6465766963655f726174696f2c63616e7661732e6865696768743d772e696e6e65724865696768742a6465766963655f726174696f2c63616e7661732e7374796c652e77696474683d2231303025222c63616e7661732e7374796c652e6865696768743d2231303025223b6c657420653d776562676c2e756e69666f726d735b305d3b652e76616c75653d5b63616e7661732e77696474682c63616e7661732e6865696768745d2c652e64697274793d21307d2c776562676c2e72656e6465723d28293d3e7b776562676c2e76696577706f727428302c302c63616e7661732e77696474682c63616e7661732e686569676874293b6c657420653d776562676c2e756e69666f726d735b315d3b652e76616c75653d2e3030312a706572666f726d616e63652e6e6f7728292c652e64697274793d21303b6c657420723d776562676c2e756e69666f726d732e66696c7465722828653d3e313d3d652e646972747929293b666f72286c6574206520696e207229776562676c5b725b655d2e747970655d28725b655d2e6c6f636174696f6e2c725b655d2e76616c7565292c725b655d2e64697274793d21313b776562676c2e6472617741727261797328776562676c2e545249414e474c455f53545249502c302c34292c776562676c2e72656164506978656c7328302c302c312c312c776562676c2e524742412c776562676c2e554e5349474e45445f425954452c706978656c297d2c776562676c2e69735f76616c69643d28293d3e6e756c6c213d776562676c2e70726f6772616d2c776562676c2e73746172745f7570646174653d28293d3e7b776562676c2e72656e64657228292c776562676c2e6672616d653d72657175657374416e696d6174696f6e4672616d6528776562676c2e73746172745f757064617465297d2c776562676c2e73746f705f7570646174653d28293d3e7b776562676c2e6672616d65262663616e63656c416e696d6174696f6e4672616d6528776562676c2e6672616d65297d2c776562676c2e6368616e67655f61613d653d3e7b667261675f70696563653d667261675f70696563652e7265706c616365282223646566696e652041412032222c6023646566696e6520414120247b657d60297d3b6c657420706f696e7465722c6c6f61645f7368616465723d28652c72293d3e7b6e756c6c3d3d72262628723d766572745f736861646572293b6c657420743d776562676c3b742e73746f705f75706461746528292c742e64656c65746550726f6772616d28742e70726f6772616d292c742e70726f6772616d3d742e63726561746550726f6772616d28293b636f6e7374204d3d776562676c2e6372656174655f73686164657228742c742e5645525445585f5348414445522c72292c693d776562676c2e6372656174655f73686164657228742c742e465241474d454e545f5348414445522c65293b742e61747461636853686164657228742e70726f6772616d2c4d292c742e61747461636853686164657228742e70726f6772616d2c69292c742e6c696e6b50726f6772616d28742e70726f6772616d293b666f72286c6574206520696e20776562676c2e756e69666f726d73297b6c657420723d776562676c2e756e69666f726d735b655d3b722e6c6f636174696f6e3d742e676574556e69666f726d4c6f636174696f6e28742e70726f6772616d2c722e6e616d65292c722e64697274793d21307d6c657420613d466c6f6174333241727261792e6f66282d312c312c2d312c2d312c312c312c312c2d31292c6f3d742e63726561746542756666657228292c6e3d742e6765744174747269624c6f636174696f6e28742e70726f6772616d2c227022293b742e62696e6442756666657228742e41525241595f4255464645522c6f292c742e6275666665724461746128742e41525241595f4255464645522c612c742e5354415449435f44524157292c742e656e61626c655665727465784174747269624172726179286e292c742e766572746578417474726962506f696e746572286e2c322c742e464c4f41542c21312c302c30292c742e75736550726f6772616d28742e70726f6772616d292c742e726573697a6528297d2c73746172745f7368616465723d28652c72293d3e7b69735f6d6f62696c652626776562676c2e6368616e67655f61612831292c6c6f61645f73686164657228652c72292c776562676c2e73746172745f75706461746528297d3b706f696e7465723d772e506f696e7465724576656e743f7b73746172743a5b22706f696e746572646f776e225d2c6d6f76653a5b22706f696e7465726d6f7665225d2c656e643a5b22706f696e7465727570225d7d3a7b73746172743a5b226d6f757365646f776e222c22746f7563687374617274225d2c6d6f76653a5b226d6f7573656d6f7665222c22746f7563686d6f7665225d2c656e643a5b226d6f7573657570222c22746f756368656e64225d7d3b6c657420647261673d7b7570646174655f756e69666f726d3a653d3e7b6c657420723d776562676c2e756e69666f726d735b305d2e76616c75652c743d776562676c2e756e69666f726d735b325d3b742e76616c75653d5b652e636c69656e74582c725b315d2d652e636c69656e74595d2c742e64697274793d21307d2c7570646174653a653d3e7b647261672e7570646174655f756e69666f726d2865297d2c73746172743a653d3e7b776562676c2e69735f76616c6964262628647261672e7570646174655f756e69666f726d2865292c706f696e7465722e6d6f76652e666f72456163682828653d3e7b646f63756d656e742e6164644576656e744c697374656e657228652c647261672e757064617465297d2929297d2c73746f703a653d3e7b776562676c2e69735f76616c6964262628647261672e7570646174655f756e69666f726d2865292c706f696e7465722e6d6f76652e666f72456163682828653d3e7b646f63756d656e742e72656d6f76654576656e744c697374656e657228652c647261672e757064617465297d2929297d7d2c726573697a653d28293d3e7b69662821776562676c2e69735f76616c69642972657475726e3b6c657420653d776562676c2e756e69666f726d735b305d2e76616c75653b776562676c2e726573697a6528293b6c657420723d776562676c2e756e69666f726d735b305d2e76616c75652c743d5b725b305d2f655b305d2c725b315d2f655b315d5d2c4d3d776562676c2e756e69666f726d735b325d3b4d2e76616c75653d5b4d2e76616c75655b305d2a745b305d2c4d2e76616c75655b315d2a745b315d5d2c4d2e64697274793d21307d3b636f6e7374205349474e41545552455f5356473d22646174613a696d6167652f7376672b786d6c3b6261736536342c50484e325a79423361575230614430694d6a49694947686c6157646f644430694d6a496949485a705a58644362336739496a41674d4341794d6941794d6949675a6d6c7362443069626d39755a53496765473173626e4d39496d6830644841364c79393364336375647a4d7562334a6e4c7a49774d44417663335a6e496a344b50484268644767675a6d6c73624331796457786c50534a6c646d56756232526b4969426a62476c774c584a3162475539496d56325a5735765a47516949475139496b30794d5334324d7a6732494449774c6a55304e545a444d6a45754e6a55784e6941794d4334304e6a6333494449784c6a59314d4455674d6a41754d7a6732494449784c6a597a4e5451674d6a41754d7a41314d554d794d5334784d54457a494445334c6a59774d4467674d6a45754d4463354f5341784e4334344e545978494449784c6a41304f4449674d5449754d5446444d6a45754d4449314d7941784d4334784d545979494449784c6a41774d6a59674f4334784d6a49774d5341794d4334334f544579494459754d5451794e6a56444d6a41754e6a51344d6941304c6a67774d7a6b78494449774c6a51794e4467674d7934304e7a51774d5341794d4334774e6a6330494449754d54637a4d7a4e444d6a41754d4441794e7941784c6a6b304d445578494445354c6a63334d6a59674d5334334e546b784d7941784f5334314d6a6735494445754e7a59784e6b4d784e7934354e6a5130494445754e7a67334e6a59674d5459754e4463304d6941784c6a4d304f446778494445304c6a6b344e4451674d4334354d54417a4d6a46444d5451754d54677a4e5341774c6a59334e444d304e6941784d79347a4f444932494441754e444d344d7a6378494445794c6a55334d4451674d4334794e7a51354e446c444d5441754d4467774e4341744d4334794d6a63794f5449674e7934314e6a4d31494441754d4455344e6a6b324d7941314c6a41324e6a6330494441754d7a51794d6a4535544455754d4451304e5459674d43347a4e44517a4d7a4a444e43347a4e7a4d354e6941774c6a51794d4451774f53417a4c6a63774d7a4178494441754e446b304d44453549444d754d444d774e6a59674d4334314e4467354e6a4e444d6934794e7a59794e4341774c6a59784d4449304e5341784c6a55794d445179494441754e6a51344d6a677a494441754e7a59794d544932494441754e6a4d354f444e444d43347a4e6a41794e6a51674d4334324d7a55794e5445674d4334784e7a63784d5467674d4334354f5467774d6941774c6a49794d7a6b324d6941784c6a4d304e7a52444d4334354d54597a4f5445674e6934304d7a4d314e7941774c6a67304e4467354e5341784d5334324d446330494441754e444d7a4f446330494445324c6a63784e454d774c6a4d784e7a59304e7941784f4334784e6a5134494441754d5463774e444932494445354c6a59784e5455674d4334774d4449334e7a63334d7941794d5334774e6a4532517930774c6a417a4d7a45304e6a6b674d6a45754d7a597a4f4341774c6a49344e6a4d774d5341794d5334324d6a457a494441754e5459784d444535494449784c6a59794d544e4d4f4334784d6a51794d5341794d5334324d6a5931517a45784c6a417a4d7a67674d6a45754e6a49344d7941784d7934354e444d7a494449784c6a597a4d4445674d5459754f4455794f4341794d5334324d7a4931517a45344c6a4d344d7a45674d6a45754e6a4d354d5341784f5334354d6a4979494449784c6a597a4f5445674d6a45754e4459784d7941794d5334324d7a6b78517a49794c6a45784d7a67674d6a45754e6a4d354d5341794d6934784e7a5130494449774c6a63784d7941794d5334324d7a6732494449774c6a55304e545a61545449774c6a55304d4467674d6a41754e5445354d554d794d4334794f544d31494445354c6a49784f4467674d6a41754d545132494445334c6a6b774d544d674d6a41754d4459794f5341784e6934314e7a6b34517a45354c6a6b334d446b674d5455754d5449314f5341784f5334354e544d324944457a4c6a59324d6a49674d546b754f544d324d7941784d6934784f546333517a45354c6a67354f544d674f5334774e6a51784e7941784f5334344e6a4930494455754f5449334d5341784f5334774f545532494449754f4463354e446c444d5463754f4463354e5341794c6a67304d44417a494445324c6a59344d7a67674d6934314e546b324f4341784e5334314d545935494449754d6a49354d7a4a444d5451754d7a55334e5341784c6a6b774d444d334944457a4c6a49794e7a4d674d5334314d7a4135494445794c6a41794d7a45674d53347a4d446b7a4e304d784d4334344d546b7a494445754d4467334e4467674f5334314f4445324d6941784c6a41334e6a5532494467754d7a59784f5459674d5334784e4455354e454d334c6a4d7a494445754d6a417a4d7a55674e69347a4d4449794e7941784c6a4d784f545534494455754d6a63304f446b674d5334304d7a59784e6b4d7a4c6a6b344d546b32494445754e5467794e6a67674d6934324f446b774d7941784c6a63794f544535494445754d7a67334e6a51674d5334334e5463334d6b4d784c6a51334d445178494449754e4449784e6a49674d5334314e4449794e53417a4c6a41344e6a4930494445754e6a41794e4467674d7934334e544932517a45754e6a55304f5459674e43347a4d7a49324f4341784c6a59354f446b34494451754f54457a4e4459674d5334334d7a4d344e5341314c6a51354e545931517a49754d444d314d7a51674d5441754e5441304d7941784c6a637a4d6a67674d5455754e5449334e4341784c6a45334e6a4d79494449774c6a55774e7a4a444d6934314d4463324e4341794d4334314d44673349444d754f444d334f5445674d6a41754e5441344e7941314c6a45324f545534494449774c6a55774f4464444f5334774e6a557a4d5341794d4334314d544533494445794c6a6b324d5341794d4334314d544d35494445324c6a67314e6a63674d6a41754e5445324e4577794d4334314e444134494449774c6a55784f544661545445774c6a63304e6941784d6934794d7a4178517a45774c6a51784f5449674d5449754d6a41334f5341784d4334784d7a6b35494445794c6a45344f544d674d5441754d4445354f4341784d6934794d6a6b34517a6b754e4463304d6941784d6934794e6a633049446b754e5451774d4463674d5445754d6a6b7a4e6941354c6a55344f546330494445774c6a55324d6a46444f5334324d5445314e7941784d4334794d7a593249446b754e6a4d774d6a51674f5334354e546b7849446b754e546b774e4451674f5334344d7a6b7a4e6b4d354c6a55314d6a633149446b754d6a6b7a4e4451674d5441754e5449324d6941354c6a4d314f544d78494445784c6a49314e7a67674f5334304d4467354f454d784d5334314f44493449446b754e444d774f4445674d5445754f4459774e4341354c6a51304f546779494445784c6a6b344d4445674f5334304d5441774d6b4d784d6934314d6a553349446b754d7a63794d7a4d674d5449754e4455354f4341784d43347a4e445979494445794c6a51784d4449674d5445754d4463334e304d784d69347a4f44677a494445784c6a51774d7a45674d5449754d7a59354e7941784d5334324f444133494445794c6a51774f5455674d5445754f4441774e454d784d6934304e445530494445794c6a4d304e544d674d5445754e4463324e5341784d6934794e7a6b30494445774c6a63304e6941784d6934794d7a4178576949675a6d6c736244306964326870644755694c7a344b5043397a646d632b43673d3d222c617070656e645369676e61747572653d28293d3e7b636f6e737420653d646f63756d656e742e637265617465456c656d656e742822696d6722293b652e7372633d5349474e41545552455f5356472e7472696d28292c652e7374796c652e637373546578743d2277696474683a343070783b7a2d696e6465783a35303b706f736974696f6e3a66697865643b626f74746f6d3a323070783b72696768743a323070783b222c626f64792e617070656e644368696c642865297d3b696628776562676c2973746172745f73686164657228667261675f7069656365292c726573697a6528292c706f696e7465722e73746172742e666f72456163682828653d3e7b646f63756d656e742e6164644576656e744c697374656e657228652c647261672e7374617274297d29292c706f696e7465722e656e642e666f72456163682828653d3e7b646f63756d656e742e6164644576656e744c697374656e657228652c647261672e73746f70297d29292c77696e646f772e6164644576656e744c697374656e65722822726573697a65222c726573697a65292c617070656e645369676e617475726528293b656c73657b636f6e737420653d646f63756d656e742e637265617465456c656d656e74282264697622293b652e7374796c652e637373546578743d22616c69676e2d6974656d733a63656e7465723b6261636b67726f756e643a233936393639363b636f6c6f723a236666663b646973706c61793a666c65783b666f6e742d66616d696c793a6d6f6e6f73706163653b666f6e742d73697a653a323070783b6865696768743a31303076683b6a7573746966792d636f6e74656e743a63656e7465723b6c6566743a303b706f736974696f6e3a66697865643b746f703a303b77696474683a31303076773b222c652e696e6e657248544d4c3d224e4f5420535550504f52544544222c646f63756d656e742e626f64792e617070656e642865297da2646970667358221220ae880198ee95168f58c36763f19487badde69772f6a14979869aa72e1ec1360d64736f6c634300081500330000000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x608060405260043610610126575f3560e01c80638a71bb2d116100a8578063def181011161006d578063def181011461030c578063e52a78741461035c578063ecfc7ecc14610370578063f2fde38b14610378578063f3f4370314610397578063fa4e28f6146103c2575f80fd5b80638a71bb2d1461027b5780638da5cb5b1461029e57806395d89b41146102bc5780639c3962f0146102e5578063c7857fb5146102ed575f80fd5b80633ccfd60b116100ee5780633ccfd60b146101e957806341e42f30146101fd57806342c472171461021c5780634c00de82146102305780636b6c077414610267575f80fd5b806306fdde031461012a5780630dca550e1461016c57806337271cc71461018d57806337a908fc146101a157806338739dad146101b5575b5f80fd5b348015610135575f80fd5b506040805180820190915260088152672bb0b73232b932b960c11b60208201525b6040516101639190610d9d565b60405180910390f35b348015610177575f80fd5b5061018b610186366004610dea565b6103ec565b005b348015610198575f80fd5b5061018b61049c565b3480156101ac575f80fd5b50610156610543565b3480156101c0575f80fd5b50610156604051806040016040528060098152602001682cb7ba9030b932970560b91b81525081565b3480156101f4575f80fd5b5061018b610585565b348015610208575f80fd5b5061018b610217366004610e14565b6105a4565b348015610227575f80fd5b5061018b610618565b34801561023b575f80fd5b5060075461024f906001600160a01b031681565b6040516001600160a01b039091168152602001610163565b348015610272575f80fd5b506101566106f0565b348015610286575f80fd5b5061029060085481565b604051908152602001610163565b3480156102a9575f80fd5b505f5461024f906001600160a01b031681565b3480156102c7575f80fd5b506040805180820190915260018152605760f81b6020820152610156565b61018b61070f565b3480156102f8575f80fd5b5061018b610307366004610e34565b610889565b348015610317575f80fd5b506004546005546006546103369260ff1691906001600160a01b031683565b60408051931515845260208401929092526001600160a01b031690820152606001610163565b348015610367575f80fd5b5061018b610922565b61018b610ab1565b348015610383575f80fd5b5061018b610392366004610e14565b610b85565b3480156103a2575f80fd5b506102906103b1366004610e14565b60096020525f908152604090205481565b3480156103cd575f80fd5b506001546002546003546103369260ff1691906001600160a01b031683565b5f546001600160a01b03163314610416576040516330cd747160e01b815260040160405180910390fd5b604080516060810182526001808252602082018590526001600160a01b038416918301829052805460ff1916811790556002849055600380546001600160a01b03191682179055905133907f812dc3f3c55b5006c05a0b308b2cb2eee57e2b53135f8b53ff5728c329b480a0906104909086815260200190565b60405180910390a35050565b6006546001600160a01b031633146104c75760405163173f0e6f60e21b815260040160405180910390fd5b60058054604080516060810182525f8082526020820181905291018190526004805460ff19169055909155600680546001600160a01b031916905561050b81610ca1565b60405181815233907f5e9c7ae3229b2cda5065d7058fcc05765c695c29ce05313fbe96cb2ca639231a9060200160405180910390a250565b606060405180612be00160405280612bb4815260200161103f612bb491396040516020016105719190610e4b565b604051602081830303815290604052905090565b335f90815260096020526040812080549190556105a181610ca1565b50565b6007546001600160a01b031633146105cf57604051631229bf3760e11b815260040160405180910390fd5b6001600160a01b0381166105f65760405163e99d5ac560e01b815260040160405180910390fd5b600780546001600160a01b0319166001600160a01b0392909216919091179055565b5f546001600160a01b03163314610642576040516330cd747160e01b815260040160405180910390fd5b60408051606080820183526001805460ff811615158452600280546020808701918252600380546001600160a01b038082168a8c019081528b51998a018c525f808b52948a01859052988b0184905260ff1990961690965592556001600160a01b03199093169055915190519351929391169133917ff1f48fe426adbd884772d4c165015a460df54458ff7e238dff36fe3c5d341ccf916106e591815260200190565b60405180910390a350565b60405180612be00160405280612bb4815260200161103f612bb4913981565b60015460ff1661073257604051631d99ddbf60e01b815260040160405180910390fd5b6003546001600160a01b03161580159061075757506003546001600160a01b03163314155b156107755760405163d6da33db60e01b815260040160405180910390fd5b60025434146107975760405163356680b760e01b815260040160405180910390fd5b604080516060810182525f8082526020820181905291018190526001805460ff191690556002819055600380546001600160a01b03191690556107d934610d0b565b90506107e58134610fe2565b5f80546001600160a01b03168152600960205260408120805490919061080c908490610ff5565b90915550506007546001600160a01b03165f908152600960205260408120805483929061083a908490610ff5565b90915550505f5460405134815233916001600160a01b0316907fdb87be53c711a1eb193f5fffddcfd85425990853a8423fa2bfd4a8620c218ed49060200160405180910390a36105a133610d2c565b5f546001600160a01b031633146108b3576040516330cd747160e01b815260040160405180910390fd5b604080516060810182526001808252602082018490525f918301829052805460ff1916811790556002839055600380546001600160a01b0319169055905133907f812dc3f3c55b5006c05a0b308b2cb2eee57e2b53135f8b53ff5728c329b480a0906106e59085815260200190565b5f546001600160a01b0316331461094c576040516330cd747160e01b815260040160405180910390fd5b60045460ff1661096f576040516313650ef160e11b815260040160405180910390fd5b600580546006805460408051606080820183525f80835260208084018290529284018190526001805460ff199081169091556002829055600380546001600160a01b031990811690915585519384018652828452938301829052919093018390526004805490911690559481905593811690915590916001600160a01b03909116906109fa83610d0b565b9050610a068184610fe2565b5f80546001600160a01b031681526009602052604081208054909190610a2d908490610ff5565b90915550506007546001600160a01b03165f9081526009602052604081208054839290610a5b908490610ff5565b90915550505f546040518481526001600160a01b038481169216907fd32f7ef8c20232133e4dbd098b49d6b86ab580eee8a90a815925e900584749639060200160405180910390a3610aac82610d2c565b505050565b6005543411610ad35760405163356680b760e01b815260040160405180910390fd5b60055415610b0d576005546006546001600160a01b03165f9081526009602052604081208054909190610b07908490610ff5565b90915550505b604080516060810182526001808252346020808401829052339385018490526004805460ff19169093179092556005819055600680546001600160a01b03191684179055925192835290917f5445de3f4fe13efb115ec05c57e09cc0e277801d0cd2ae780457ebcd8688c391910160405180910390a2565b5f546001600160a01b03163314610baf576040516330cd747160e01b815260040160405180910390fd5b6001600160a01b038116610bd65760405163e99d5ac560e01b815260040160405180910390fd5b610bdf81610d2c565b6006546001600160a01b03808316911603610c5c5760058054604080516060810182525f80825260208083018290529183018190526004805460ff1916905593849055600680546001600160a01b03191690556001600160a01b0385168452600990528220805491928392610c55908490610ff5565b9091555050505b60015460ff16156105a157604080516060810182525f8082526020820181905291018190526001805460ff19169055600255600380546001600160a01b031916905550565b6040515f90339083908381818185875af1925050503d805f8114610ce0576040519150601f19603f3d011682016040523d82523d5f602084013e610ce5565b606091505b5050905080610d07576040516342bb570960e01b815260040160405180910390fd5b5050565b5f606460085483610d1c9190611008565b610d26919061101f565b92915050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917fb0594827696749bdc48b310d4a5cfee5e9a89491f1c6bea2b928c2c33db414de9190a35050565b5f5b83811015610d95578181015183820152602001610d7d565b50505f910152565b602081525f8251806020840152610dbb816040850160208701610d7b565b601f01601f19169190910160400192915050565b80356001600160a01b0381168114610de5575f80fd5b919050565b5f8060408385031215610dfb575f80fd5b82359150610e0b60208401610dcf565b90509250929050565b5f60208284031215610e24575f80fd5b610e2d82610dcf565b9392505050565b5f60208284031215610e44575f80fd5b5035919050565b7f3c21444f43545950452068746d6c3e3c68746d6c3e3c686561643e3c7469746c815261329f60f11b6020820152672bb0b73232b932b960c11b60228201527f3c2f7469746c653e3c6d657461206e616d653d2276696577706f72742220636f602a8201527f6e74656e743d2277696474683d6465766963652d77696474682c20696e697469604a8201527f616c2d7363616c653d3122202f3e3c7374796c653e68746d6c2c626f64797b62606a8201527f61636b67726f756e643a233936393639363b6d617267696e3a303b7061646469608a8201527f6e673a303b6f766572666c6f773a68696464656e3b7d3c2f7374796c653e3c2f60aa8201527f686561643e3c626f64793e3c73637269707420747970653d22746578742f6a6160ca820152693b30b9b1b934b83a111f60b11b60ea8201525f8251610f958160f4850160208701610d7b565b8201610fc360f482017f3c2f7363726970743e3c2f626f64793e3c2f68746d6c3e0000000000000000009052565b61010b019392505050565b634e487b7160e01b5f52601160045260245ffd5b81810381811115610d2657610d26610fce565b80820180821115610d2657610d26610fce565b8082028115828204841417610d2657610d26610fce565b5f8261103957634e487b7160e01b5f52601260045260245ffd5b50049056fe636f6e737420444952454354495645533d5b2223696664656620474c5f4553222c22707265636973696f6e20686967687020666c6f61743b222c2223656e646966222c2223646566696e652041412032222c2223646566696e6520522861296d61743228636f732861292c73696e2861292c2d73696e2861292c636f7328612929225d2e6d61702828653d3e60247b657d247b537472696e672e66726f6d43686172436f6465283130297d6029292e6a6f696e282222293b6c657420667261675f70696563653d60247b444952454354495645537d756e69666f726d207665633220755f7265736f6c7574696f6e2c755f6d6f7573653b756e69666f726d20666c6f617420755f74696d653b666c6f617420762c723b76656333207428766563332076297b763d7665633328646f7428762c76656333283132372e312c3331312e372c37342e3729292c646f7428762c76656333283236392e352c3138332e332c3234362e3129292c646f7428762c76656333283131332e352c3237312e392c3132342e362929293b72657475726e2d312e2b322e2a66726163742873696e2876292a34333735382e35343533313233293b7d76656333206628766563332076297b72657475726e20636c616d7028762a28322e35312a762b2e3033292f28762a28322e34332a762b2e3539292b2e3134292c302e2c312e293b7d666c6f6174206e28766563332076297b72657475726e2066726163742873696e28646f7428762c766563332831322e393839382c37382e3233332c3132382e3835322929292a34333735382e35343533292a322e2d312e3b7d666c6f6174206528766563332076297b666c6f617420663d28762e782b762e792b762e7a292a28312e2f332e292c722c692c732c782c792c642c412c7a2c612c702c752c632c6d2c652c672c6c2c432c452c742c622c422c6b3b696e7420473d696e7428666c6f6f7228762e782b6629292c443d696e7428666c6f6f7228762e792b6629292c463d696e7428666c6f6f7228762e7a2b6629292c482c492c4a2c4b2c4c2c4d3b723d312e2f362e3b693d666c6f617428472b442b46292a723b733d666c6f61742847292d693b783d666c6f61742844292d693b793d666c6f61742846292d693b733d762e782d733b783d762e792d783b793d762e7a2d793b4d3d733e3d783f783e3d793f28483d312c493d302c4a3d302c4b3d312c4c3d312c30293a733e3d793f28483d312c493d302c4a3d302c4b3d312c4c3d302c31293a28483d302c493d302c4a3d312c4b3d312c4c3d302c31293a783c793f28483d302c493d302c4a3d312c4b3d302c4c3d312c31293a733c793f28483d302c493d312c4a3d302c4b3d302c4c3d312c31293a28483d302c493d312c4a3d302c4b3d312c4c3d312c30293b643d732d666c6f61742848292b723b413d782d666c6f61742849292b723b7a3d792d666c6f6174284a292b723b613d732d666c6f6174284b292b322e2a723b703d782d666c6f6174284c292b322e2a723b753d792d666c6f6174284d292b322e2a723b633d732d312e2b332e2a723b6d3d782d312e2b332e2a723b653d792d312e2b332e2a723b7665633320683d7665633328472c442c46292c4f3d7665633328472b482c442b492c462b4a292c503d7665633328472b4b2c442b4c2c462b4d292c513d7665633328472b312c442b312c462b31292c533d6e6f726d616c697a652876656333286e2868292c6e28682a322e3031292c6e28682a322e30322929292c543d6e6f726d616c697a652876656333286e284f292c6e284f2a322e3031292c6e284f2a322e30322929292c553d6e6f726d616c697a652876656333286e2850292c6e28502a322e3031292c6e28502a322e30322929292c563d6e6f726d616c697a652876656333286e2851292c6e28512a322e3031292c6e28512a322e30322929293b673d302e3b6c3d302e3b433d302e3b453d302e3b743d2e352d732a732d782a782d792a793b696628743e3d302e29742a3d742c673d742a742a646f7428532c7665633328732c782c7929293b623d2e352d642a642d412a412d7a2a7a3b696628623e3d302e29622a3d622c6c3d622a622a646f7428542c7665633328642c412c7a29293b423d2e352d612a612d702a702d752a753b696628423e3d302e29422a3d422c433d422a422a646f7428552c7665633328612c702c7529293b6b3d2e352d632a632d6d2a6d2d652a653b6966286b3e3d302e296b2a3d6b2c453d6b2a6b2a646f7428562c7665633328632c6d2c6529293b72657475726e2039362e2a28672b6c2b432b45293b7d666c6f6174207428766563322076297b7665633320723d6672616374287665633328762e787978292a2e3133293b722b3d646f7428722c722e797a782b332e333333293b72657475726e2066726163742828722e782b722e79292a722e7a293b7d666c6f6174207028766563322076297b7665633220783d666c6f6f722876292c793d66726163742876292c723b666c6f617420663d742878292c4c3d7428782b7665633228312c3029292c6e3d7428782b7665633228302c3129292c733d7428782b76656332283129293b723d792a792a28332e2d322e2a79293b72657475726e206d697828662c4c2c722e78292b286e2d66292a722e792a28312e2d722e78292b28732d4c292a722e782a722e793b7d666c6f6174206d28766563322076297b666c6f617420723d2d372e2c793d312e373b7665633220663d7665633228312e352c35292c733d76656332282e31332c35292c4c3d76656332282d755f74696d65292a2d732e783b4c2e782a3d2d312e3b6d617432206d3d6d61743228636f73282e35292c73696e282e35292c2d73696e282e35292c636f73282e3529293b666f7228696e7420783d303b783c323b2b2b7829722b3d792a702876292c763d6d2a762a2e352b662b4c2a732e792c792a3d322e383b72657475726e20723b7d76656332207328766563332076297b666c6f617420793d302e2c783d3165322c723d762e792b312e2c4c3d6d28762e787a2a312e35293b722b3d4c2a2e3132353b696628783e7229783d722a2e382c793d322e3b72657475726e207665633228782c79293b7d76656333206328766563332076297b7665633220723d76656332282e3030322c30293b666c6f617420783d732876292e783b72657475726e206e6f726d616c697a65287665633328782d7328762d722e787979292e782c782d7328762d722e797879292e782c782d7328762d722e797978292e7829293b7d766563322063287665633320762c766563332066297b666c6f617420723d302e3b7665633220783b666f7228696e7420793d303b793c3132383b792b2b297b76656333204c3d762b662a723b783d73284c293b722b3d782e783b696628723e3165327c7c61627328782e78293c2e30303129627265616b3b7d723d6d696e28722c316532293b72657475726e207665633228722c782e79293b7d666c6f61742065287665633320762c766563332066297b666c6f617420783d312e2c4c3d282e382d762e79292f662e792c722c793b6966284c3e302e29783d6d696e28782c4c293b723d312e3b793d2e30313b666f7228696e7420693d303b693c31363b692b2b297b666c6f617420643d7328762b662a79292e782c7a3d636c616d70282e352a642f792c302e2c312e293b723d6d696e28722c7a2a7a2a28332e2d322e2a7a29293b792b3d636c616d7028642c2e3030322c2e3035293b696628723c2e3030357c7c793e7829627265616b3b7d72657475726e20636c616d7028722c302e2c312e293b7d766563342066287665633320762c766563332078297b7665633320793d632876292c723d7665633328322c352c2d3130292c4c3b723d6e6f726d616c697a6528762d72293b666c6f617420663d636c616d7028646f7428722c79292c302e2c312e292c6e3d636c616d7028312e2b646f7428782c79292c302e2c312e292c733d636c616d7028646f74287265666c656374282d722c79292c2d78292c302e2c312e292c693b4c3d6d69782876656333282e36323335292c766563332831292c66292a322e3b4c2b3d766563332831292a706f77286e2c372e293b4c2b3d766563332831292a706f7728732c322e292a2e37353b693d6528762c762b76656333283029293b4c3d6d6978284c2a76656333282e36393431292c4c2c69293b72657475726e2076656334284c2c6e293b7d76656334206d287665633220782c766563322072297b763d66726163742876293b76656332204c3d28782d2e352a72292f722e792c793b7665633320733d7665633328302c332c2d3130292c6e3d6e6f726d616c697a6528766563332830292d73292c7a3d6e6f726d616c697a652876656333286e2e7a2c302c2d6e2e7829292c463d6e6f726d616c697a65284c2e782a7a2b4c2e792a63726f7373286e2c7a292b6e2f2e3433292c692c613b793d6328732c46293b693d732b462a792e783b613d766563332830293b696628792e783c35302e297b613d6628692c46292e78797a3b696628792e793d3d312e29613d6d69782876656333282e303636372c2e313137362c2e31363836292c76656333282e34303339292c706f7728612c7665633328332929293b7d666c6f617420643d652876656333284c2a3565322c692e7a29292a2e352b2e352c413d736d6f6f746873746570282e31352c2e312c64292c753b643d28642b41292a2e313b643d636c616d7028642c302e2c2e35293b753d736d6f6f74687374657028302e2c31352e2c6c656e677468286929293b613d6d697828612c6d697828766563332831292c76656333282e343433312c2e343233352c2e343531292c4c2e792b2e35292a312e37352c75293b613d662861293b72657475726e207665633428612c75293b7d76656334206e287665633220782c766563322079297b7665633420663d7665633428302c302c302c31293b666f7228696e74204c3d303b4c3c41413b4c2b2b29666f7228696e7420693d303b693c41413b692b2b297b666c6f617420733d755f74696d652d2e30352a282e352b2e352a73696e28782e782a3134372e292a73696e28782e792a3133312e292b666c6f6174284c2a41412b6929292f666c6f61742841412a4141293b763d732f302e3b723d322e2a61636f73282d312e292a763b662b3d6d28782b7665633228692c4c292f666c6f6174284141292c79293b7d662f3d666c6f61742841412a4141293b72657475726e20663b7d766f6964206d61696e28297b7665633420763d6e28676c5f46726167436f6f72642e78792c755f7265736f6c7574696f6e293b676c5f46726167436f6c6f723d7665633428762e78797a2b6672616374283535352e2a73696e283737372e2a7428676c5f46726167436f6f72642e78792e7879792929292f3235362e2c31293b7d602c766572745f7368616465723d22617474726962757465207665633220703b766f6964206d61696e28297b676c5f506f736974696f6e3d7665633428702c312e302c312e30293b7d222c773d77696e646f772c643d646f63756d656e742c6465766963655f726174696f3d77696e646f772e646576696365506978656c526174696f2c706978656c3d6e65772055696e743841727261792834292c69735f6d6f62696c653d2f416e64726f69647c7765624f537c6950686f6e657c695061647c69506f647c426c61636b42657272797c49454d6f62696c657c4f70657261204d696e692f692e74657374286e6176696761746f722e757365724167656e74292c63616e7661733d642e717565727953656c6563746f72282263616e76617322293b696628646f63756d656e742e626f64792e7374796c652e746f756368416374696f6e3d226e6f6e65222c646f63756d656e742e626f64792e7374796c652e7573657253656c6563743d226e6f6e65222c2163616e766173297b63616e7661733d642e637265617465456c656d656e74282263616e76617322292c63616e7661732e7374796c652e646973706c61793d22626c6f636b223b76617220626f64793d642e626f64793b626f64797c7c28626f64793d642e637265617465456c656d656e742822626f64792229292c626f64792e617070656e644368696c642863616e766173292c642e646f63756d656e74456c656d656e742e617070656e644368696c6428626f6479297d6c657420776562676c4f7074696f6e733d7b7d3b69735f6d6f62696c657c7c28776562676c4f7074696f6e733d7b706f776572507265666572656e63653a22686967682d706572666f726d616e6365227d293b6c657420776562676c3d63616e7661732e676574436f6e746578742822776562676c222c776562676c4f7074696f6e73293b776562676c2e70726f6772616d3d6e756c6c2c776562676c2e756e69666f726d3d28652c72293d3e7b6c657420743d41727261792e697341727261792872293f722e6c656e6774682d313a302c4d3d5b5b22756e69666f726d3166222c302c22666c6f6174225d2c5b22756e69666f726d326676222c5b302c305d2c2276656332225d5d2c693d7b7d3b72657475726e20692e6e616d653d652c692e747970653d4d5b745d5b305d2c692e76616c75653d727c7c4d5b745d5b315d2c692e696e6e65725f747970653d4d5b745d5b325d2c692e6c6f636174696f6e3d22222c692e64697274793d21312c697d2c776562676c2e756e69666f726d733d5b5b22755f7265736f6c7574696f6e222c5b302c305d5d2c5b22755f74696d65222c2e3030312a706572666f726d616e63652e6e6f7728295d2c5b22755f6d6f757365222c5b302c305d5d5d2c776562676c2e756e69666f726d732e666f7245616368282828652c72293d3e776562676c2e756e69666f726d735b725d3d776562676c2e756e69666f726d28655b305d2c655b315d2929292c776562676c2e6372656174655f7368616465723d28652c722c74293d3e7b6c6574204d3d652e6372656174655368616465722872293b72657475726e20776562676c2e736861646572536f75726365284d2c74292c776562676c2e636f6d70696c65536861646572284d292c4d7d2c776562676c2e726573697a653d28293d3e7b63616e7661732e77696474683d772e696e6e657257696474682a6465766963655f726174696f2c63616e7661732e6865696768743d772e696e6e65724865696768742a6465766963655f726174696f2c63616e7661732e7374796c652e77696474683d2231303025222c63616e7661732e7374796c652e6865696768743d2231303025223b6c657420653d776562676c2e756e69666f726d735b305d3b652e76616c75653d5b63616e7661732e77696474682c63616e7661732e6865696768745d2c652e64697274793d21307d2c776562676c2e72656e6465723d28293d3e7b776562676c2e76696577706f727428302c302c63616e7661732e77696474682c63616e7661732e686569676874293b6c657420653d776562676c2e756e69666f726d735b315d3b652e76616c75653d2e3030312a706572666f726d616e63652e6e6f7728292c652e64697274793d21303b6c657420723d776562676c2e756e69666f726d732e66696c7465722828653d3e313d3d652e646972747929293b666f72286c6574206520696e207229776562676c5b725b655d2e747970655d28725b655d2e6c6f636174696f6e2c725b655d2e76616c7565292c725b655d2e64697274793d21313b776562676c2e6472617741727261797328776562676c2e545249414e474c455f53545249502c302c34292c776562676c2e72656164506978656c7328302c302c312c312c776562676c2e524742412c776562676c2e554e5349474e45445f425954452c706978656c297d2c776562676c2e69735f76616c69643d28293d3e6e756c6c213d776562676c2e70726f6772616d2c776562676c2e73746172745f7570646174653d28293d3e7b776562676c2e72656e64657228292c776562676c2e6672616d653d72657175657374416e696d6174696f6e4672616d6528776562676c2e73746172745f757064617465297d2c776562676c2e73746f705f7570646174653d28293d3e7b776562676c2e6672616d65262663616e63656c416e696d6174696f6e4672616d6528776562676c2e6672616d65297d2c776562676c2e6368616e67655f61613d653d3e7b667261675f70696563653d667261675f70696563652e7265706c616365282223646566696e652041412032222c6023646566696e6520414120247b657d60297d3b6c657420706f696e7465722c6c6f61645f7368616465723d28652c72293d3e7b6e756c6c3d3d72262628723d766572745f736861646572293b6c657420743d776562676c3b742e73746f705f75706461746528292c742e64656c65746550726f6772616d28742e70726f6772616d292c742e70726f6772616d3d742e63726561746550726f6772616d28293b636f6e7374204d3d776562676c2e6372656174655f73686164657228742c742e5645525445585f5348414445522c72292c693d776562676c2e6372656174655f73686164657228742c742e465241474d454e545f5348414445522c65293b742e61747461636853686164657228742e70726f6772616d2c4d292c742e61747461636853686164657228742e70726f6772616d2c69292c742e6c696e6b50726f6772616d28742e70726f6772616d293b666f72286c6574206520696e20776562676c2e756e69666f726d73297b6c657420723d776562676c2e756e69666f726d735b655d3b722e6c6f636174696f6e3d742e676574556e69666f726d4c6f636174696f6e28742e70726f6772616d2c722e6e616d65292c722e64697274793d21307d6c657420613d466c6f6174333241727261792e6f66282d312c312c2d312c2d312c312c312c312c2d31292c6f3d742e63726561746542756666657228292c6e3d742e6765744174747269624c6f636174696f6e28742e70726f6772616d2c227022293b742e62696e6442756666657228742e41525241595f4255464645522c6f292c742e6275666665724461746128742e41525241595f4255464645522c612c742e5354415449435f44524157292c742e656e61626c655665727465784174747269624172726179286e292c742e766572746578417474726962506f696e746572286e2c322c742e464c4f41542c21312c302c30292c742e75736550726f6772616d28742e70726f6772616d292c742e726573697a6528297d2c73746172745f7368616465723d28652c72293d3e7b69735f6d6f62696c652626776562676c2e6368616e67655f61612831292c6c6f61645f73686164657228652c72292c776562676c2e73746172745f75706461746528297d3b706f696e7465723d772e506f696e7465724576656e743f7b73746172743a5b22706f696e746572646f776e225d2c6d6f76653a5b22706f696e7465726d6f7665225d2c656e643a5b22706f696e7465727570225d7d3a7b73746172743a5b226d6f757365646f776e222c22746f7563687374617274225d2c6d6f76653a5b226d6f7573656d6f7665222c22746f7563686d6f7665225d2c656e643a5b226d6f7573657570222c22746f756368656e64225d7d3b6c657420647261673d7b7570646174655f756e69666f726d3a653d3e7b6c657420723d776562676c2e756e69666f726d735b305d2e76616c75652c743d776562676c2e756e69666f726d735b325d3b742e76616c75653d5b652e636c69656e74582c725b315d2d652e636c69656e74595d2c742e64697274793d21307d2c7570646174653a653d3e7b647261672e7570646174655f756e69666f726d2865297d2c73746172743a653d3e7b776562676c2e69735f76616c6964262628647261672e7570646174655f756e69666f726d2865292c706f696e7465722e6d6f76652e666f72456163682828653d3e7b646f63756d656e742e6164644576656e744c697374656e657228652c647261672e757064617465297d2929297d2c73746f703a653d3e7b776562676c2e69735f76616c6964262628647261672e7570646174655f756e69666f726d2865292c706f696e7465722e6d6f76652e666f72456163682828653d3e7b646f63756d656e742e72656d6f76654576656e744c697374656e657228652c647261672e757064617465297d2929297d7d2c726573697a653d28293d3e7b69662821776562676c2e69735f76616c69642972657475726e3b6c657420653d776562676c2e756e69666f726d735b305d2e76616c75653b776562676c2e726573697a6528293b6c657420723d776562676c2e756e69666f726d735b305d2e76616c75652c743d5b725b305d2f655b305d2c725b315d2f655b315d5d2c4d3d776562676c2e756e69666f726d735b325d3b4d2e76616c75653d5b4d2e76616c75655b305d2a745b305d2c4d2e76616c75655b315d2a745b315d5d2c4d2e64697274793d21307d3b636f6e7374205349474e41545552455f5356473d22646174613a696d6167652f7376672b786d6c3b6261736536342c50484e325a79423361575230614430694d6a49694947686c6157646f644430694d6a496949485a705a58644362336739496a41674d4341794d6941794d6949675a6d6c7362443069626d39755a53496765473173626e4d39496d6830644841364c79393364336375647a4d7562334a6e4c7a49774d44417663335a6e496a344b50484268644767675a6d6c73624331796457786c50534a6c646d56756232526b4969426a62476c774c584a3162475539496d56325a5735765a47516949475139496b30794d5334324d7a6732494449774c6a55304e545a444d6a45754e6a55784e6941794d4334304e6a6333494449784c6a59314d4455674d6a41754d7a6732494449784c6a597a4e5451674d6a41754d7a41314d554d794d5334784d54457a494445334c6a59774d4467674d6a45754d4463354f5341784e4334344e545978494449784c6a41304f4449674d5449754d5446444d6a45754d4449314d7941784d4334784d545979494449784c6a41774d6a59674f4334784d6a49774d5341794d4334334f544579494459754d5451794e6a56444d6a41754e6a51344d6941304c6a67774d7a6b78494449774c6a51794e4467674d7934304e7a51774d5341794d4334774e6a6330494449754d54637a4d7a4e444d6a41754d4441794e7941784c6a6b304d445578494445354c6a63334d6a59674d5334334e546b784d7941784f5334314d6a6735494445754e7a59784e6b4d784e7934354e6a5130494445754e7a67334e6a59674d5459754e4463304d6941784c6a4d304f446778494445304c6a6b344e4451674d4334354d54417a4d6a46444d5451754d54677a4e5341774c6a59334e444d304e6941784d79347a4f444932494441754e444d344d7a6378494445794c6a55334d4451674d4334794e7a51354e446c444d5441754d4467774e4341744d4334794d6a63794f5449674e7934314e6a4d31494441754d4455344e6a6b324d7941314c6a41324e6a6330494441754d7a51794d6a4535544455754d4451304e5459674d43347a4e44517a4d7a4a444e43347a4e7a4d354e6941774c6a51794d4451774f53417a4c6a63774d7a4178494441754e446b304d44453549444d754d444d774e6a59674d4334314e4467354e6a4e444d6934794e7a59794e4341774c6a59784d4449304e5341784c6a55794d445179494441754e6a51344d6a677a494441754e7a59794d544932494441754e6a4d354f444e444d43347a4e6a41794e6a51674d4334324d7a55794e5445674d4334784e7a63784d5467674d4334354f5467774d6941774c6a49794d7a6b324d6941784c6a4d304e7a52444d4334354d54597a4f5445674e6934304d7a4d314e7941774c6a67304e4467354e5341784d5334324d446330494441754e444d7a4f446330494445324c6a63784e454d774c6a4d784e7a59304e7941784f4334784e6a5134494441754d5463774e444932494445354c6a59784e5455674d4334774d4449334e7a63334d7941794d5334774e6a4532517930774c6a417a4d7a45304e6a6b674d6a45754d7a597a4f4341774c6a49344e6a4d774d5341794d5334324d6a457a494441754e5459784d444535494449784c6a59794d544e4d4f4334784d6a51794d5341794d5334324d6a5931517a45784c6a417a4d7a67674d6a45754e6a49344d7941784d7934354e444d7a494449784c6a597a4d4445674d5459754f4455794f4341794d5334324d7a4931517a45344c6a4d344d7a45674d6a45754e6a4d354d5341784f5334354d6a4979494449784c6a597a4f5445674d6a45754e4459784d7941794d5334324d7a6b78517a49794c6a45784d7a67674d6a45754e6a4d354d5341794d6934784e7a5130494449774c6a63784d7941794d5334324d7a6732494449774c6a55304e545a61545449774c6a55304d4467674d6a41754e5445354d554d794d4334794f544d31494445354c6a49784f4467674d6a41754d545132494445334c6a6b774d544d674d6a41754d4459794f5341784e6934314e7a6b34517a45354c6a6b334d446b674d5455754d5449314f5341784f5334354e544d324944457a4c6a59324d6a49674d546b754f544d324d7941784d6934784f546333517a45354c6a67354f544d674f5334774e6a51784e7941784f5334344e6a4930494455754f5449334d5341784f5334774f545532494449754f4463354e446c444d5463754f4463354e5341794c6a67304d44417a494445324c6a59344d7a67674d6934314e546b324f4341784e5334314d545935494449754d6a49354d7a4a444d5451754d7a55334e5341784c6a6b774d444d334944457a4c6a49794e7a4d674d5334314d7a4135494445794c6a41794d7a45674d53347a4d446b7a4e304d784d4334344d546b7a494445754d4467334e4467674f5334314f4445324d6941784c6a41334e6a5532494467754d7a59784f5459674d5334784e4455354e454d334c6a4d7a494445754d6a417a4d7a55674e69347a4d4449794e7941784c6a4d784f545534494455754d6a63304f446b674d5334304d7a59784e6b4d7a4c6a6b344d546b32494445754e5467794e6a67674d6934324f446b774d7941784c6a63794f544535494445754d7a67334e6a51674d5334334e5463334d6b4d784c6a51334d445178494449754e4449784e6a49674d5334314e4449794e53417a4c6a41344e6a4930494445754e6a41794e4467674d7934334e544932517a45754e6a55304f5459674e43347a4d7a49324f4341784c6a59354f446b34494451754f54457a4e4459674d5334334d7a4d344e5341314c6a51354e545931517a49754d444d314d7a51674d5441754e5441304d7941784c6a637a4d6a67674d5455754e5449334e4341784c6a45334e6a4d79494449774c6a55774e7a4a444d6934314d4463324e4341794d4334314d44673349444d754f444d334f5445674d6a41754e5441344e7941314c6a45324f545534494449774c6a55774f4464444f5334774e6a557a4d5341794d4334314d544533494445794c6a6b324d5341794d4334314d544d35494445324c6a67314e6a63674d6a41754e5445324e4577794d4334314e444134494449774c6a55784f544661545445774c6a63304e6941784d6934794d7a4178517a45774c6a51784f5449674d5449754d6a41334f5341784d4334784d7a6b35494445794c6a45344f544d674d5441754d4445354f4341784d6934794d6a6b34517a6b754e4463304d6941784d6934794e6a633049446b754e5451774d4463674d5445754d6a6b7a4e6941354c6a55344f546330494445774c6a55324d6a46444f5334324d5445314e7941784d4334794d7a593249446b754e6a4d774d6a51674f5334354e546b7849446b754e546b774e4451674f5334344d7a6b7a4e6b4d354c6a55314d6a633149446b754d6a6b7a4e4451674d5441754e5449324d6941354c6a4d314f544d78494445784c6a49314e7a67674f5334304d4467354f454d784d5334314f44493449446b754e444d774f4445674d5445754f4459774e4341354c6a51304f546779494445784c6a6b344d4445674f5334304d5441774d6b4d784d6934314d6a553349446b754d7a63794d7a4d674d5449754e4455354f4341784d43347a4e445979494445794c6a51784d4449674d5445754d4463334e304d784d69347a4f44677a494445784c6a51774d7a45674d5449754d7a59354e7941784d5334324f444133494445794c6a51774f5455674d5445754f4441774e454d784d6934304e445530494445794c6a4d304e544d674d5445754e4463324e5341784d6934794e7a6b30494445774c6a63304e6941784d6934794d7a4178576949675a6d6c736244306964326870644755694c7a344b5043397a646d632b43673d3d222c617070656e645369676e61747572653d28293d3e7b636f6e737420653d646f63756d656e742e637265617465456c656d656e742822696d6722293b652e7372633d5349474e41545552455f5356472e7472696d28292c652e7374796c652e637373546578743d2277696474683a343070783b7a2d696e6465783a35303b706f736974696f6e3a66697865643b626f74746f6d3a323070783b72696768743a323070783b222c626f64792e617070656e644368696c642865297d3b696628776562676c2973746172745f73686164657228667261675f7069656365292c726573697a6528292c706f696e7465722e73746172742e666f72456163682828653d3e7b646f63756d656e742e6164644576656e744c697374656e657228652c647261672e7374617274297d29292c706f696e7465722e656e642e666f72456163682828653d3e7b646f63756d656e742e6164644576656e744c697374656e657228652c647261672e73746f70297d29292c77696e646f772e6164644576656e744c697374656e65722822726573697a65222c726573697a65292c617070656e645369676e617475726528293b656c73657b636f6e737420653d646f63756d656e742e637265617465456c656d656e74282264697622293b652e7374796c652e637373546578743d22616c69676e2d6974656d733a63656e7465723b6261636b67726f756e643a233936393639363b636f6c6f723a236666663b646973706c61793a666c65783b666f6e742d66616d696c793a6d6f6e6f73706163653b666f6e742d73697a653a323070783b6865696768743a31303076683b6a7573746966792d636f6e74656e743a63656e7465723b6c6566743a303b706f736974696f6e3a66697865643b746f703a303b77696474683a31303076773b222c652e696e6e657248544d4c3d224e4f5420535550504f52544544222c646f63756d656e742e626f64792e617070656e642865297da2646970667358221220ae880198ee95168f58c36763f19487badde69772f6a14979869aa72e1ec1360d64736f6c63430008150033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _royaltyPercentage (uint256): 0

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000000


Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.