Forkchoice Ethereum Mainnet

Address Contract Partially Verified

Address 0x4633bb67311Aa60b80D8d989A1487240a00a1a38
Balance 0 ETH
Nonce 1
Code Size 12059 bytes
Indexed Transactions 0 (1 on-chain, 1.3% indexed)
External Etherscan · Sourcify

Contract Bytecode

12059 bytes
0x60806040526004361061039f575f3560e01c80637bce5a04116101de578063aacebbe311610108578063d621e8131161009d578063ec1d27a41161006d578063ec1d27a414610a94578063f11a24d314610ab3578063f2fde38b14610ac8578063f637434214610ae7575f80fd5b8063d621e81314610a09578063d85ba06314610a27578063dd62ed3e14610a3c578063e884f26014610a80575f80fd5b8063c17b5b8c116100d8578063c17b5b8c146109a7578063c876d0b9146109c6578063c8c8ebe4146109df578063cef85139146109f4575f80fd5b8063aacebbe31461090e578063b62496f51461092d578063bfd792841461095a578063c024666814610988575f80fd5b806395d89b411161017e578063a0d82dc51161014e578063a0d82dc51461089c578063a12e3013146108b1578063a457c2d7146108d0578063a9059cbb146108ef575f80fd5b806395d89b411461083f5780639a7a23d6146108535780639c3b4fdc146108725780639fccce3214610887575f80fd5b80638ea5220f116101b95780638ea5220f146107d75780638f3fa860146107f6578063921369131461080b578063924de9b714610820575f80fd5b80637bce5a04146107865780638095d5641461079b5780638da5cb5b146107ba575f80fd5b8063293230b8116102ca5780636a486a8e1161025f578063751039fc1161022f578063751039fc146107155780637571336a1461072957806375f0a8741461074857806379d28eff14610767575f80fd5b80636a486a8e146106995780636ddd1713146106ae57806370a08231146106cd578063715018a614610701575f80fd5b80634a62bb651161029a5780634a62bb65146106205780634fbee1931461063957806351bc3c85146106705780635663ee3d14610684575f80fd5b8063293230b81461059f578063313ce567146105b357806339509351146105ce57806349bd5a5e146105ed575f80fd5b8063180b0d7e116103405780631f3fed8f116103105780631f3fed8f14610537578063203e727e1461054c57806323b872dd1461056b57806327c8f8351461058a575f80fd5b8063180b0d7e146104da57806318160ddd146104ef5780631816467f146105035780631a8145bb14610522575f80fd5b80630dbd397c1161037b5780630dbd397c146104245780630ee092fd1461044257806310d5de53146104615780631694505e1461048f575f80fd5b8062f1dfc5146103aa57806306fdde03146103cb578063095ea7b3146103f5575f80fd5b366103a657005b5f80fd5b3480156103b5575f80fd5b506103c96103c43660046129ce565b610afc565b005b3480156103d6575f80fd5b506103df610bdb565b6040516103ec91906129e5565b60405180910390f35b348015610400575f80fd5b5061041461040f366004612a44565b610c6b565b60405190151581526020016103ec565b34801561042f575f80fd5b50601d545b6040519081526020016103ec565b34801561044d575f80fd5b506103c961045c366004612a6e565b610c81565b34801561046c575f80fd5b5061041461047b366004612a6e565b601f6020525f908152604090205460ff1681565b34801561049a575f80fd5b506104c27f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b0390911681526020016103ec565b3480156104e5575f80fd5b5061043460195481565b3480156104fa575f80fd5b50600254610434565b34801561050e575f80fd5b506103c961051d366004612a6e565b610df5565b34801561052d575f80fd5b50610434601b5481565b348015610542575f80fd5b50610434601a5481565b348015610557575f80fd5b506103c96105663660046129ce565b610e7b565b348015610576575f80fd5b50610414610585366004612a89565b610f58565b348015610595575f80fd5b506104c261dead81565b3480156105aa575f80fd5b506103c9610fbf565b3480156105be575f80fd5b50604051601281526020016103ec565b3480156105d9575f80fd5b506104146105e8366004612a44565b611000565b3480156105f8575f80fd5b506104c27f00000000000000000000000029b69ddf521ddf7ff5bc32069ea9668f66f3123c81565b34801561062b575f80fd5b50600c546104149060ff1681565b348015610644575f80fd5b50610414610653366004612a6e565b6001600160a01b03165f908152601e602052604090205460ff1690565b34801561067b575f80fd5b506103c9611035565b34801561068f575f80fd5b50610434600a5481565b3480156106a4575f80fd5b5061043460155481565b3480156106b9575f80fd5b50600c546104149062010000900460ff1681565b3480156106d8575f80fd5b506104346106e7366004612a6e565b6001600160a01b03165f9081526020819052604090205490565b34801561070c575f80fd5b506103c961108b565b348015610720575f80fd5b506104146110fe565b348015610734575f80fd5b506103c9610743366004612ad4565b61113a565b348015610753575f80fd5b506006546104c2906001600160a01b031681565b348015610772575f80fd5b506104146107813660046129ce565b61118e565b348015610791575f80fd5b5061043460125481565b3480156107a6575f80fd5b506103c96107b5366004612b0b565b6111c3565b3480156107c5575f80fd5b506005546001600160a01b03166104c2565b3480156107e2575f80fd5b506007546104c2906001600160a01b031681565b348015610801575f80fd5b50610434600b5481565b348015610816575f80fd5b5061043460165481565b34801561082b575f80fd5b506103c961083a366004612b34565b611219565b34801561084a575f80fd5b506103df61125f565b34801561085e575f80fd5b506103c961086d366004612ad4565b61126e565b34801561087d575f80fd5b5061043460145481565b348015610892575f80fd5b50610434601c5481565b3480156108a7575f80fd5b5061043460185481565b3480156108bc575f80fd5b506104146108cb3660046129ce565b611349565b3480156108db575f80fd5b506104146108ea366004612a44565b61149a565b3480156108fa575f80fd5b50610414610909366004612a44565b6114e7565b348015610919575f80fd5b506103c9610928366004612a6e565b6114f3565b348015610938575f80fd5b50610414610947366004612a6e565b602080525f908152604090205460ff1681565b348015610965575f80fd5b50610414610974366004612a6e565b600f6020525f908152604090205460ff1681565b348015610993575f80fd5b506103c96109a2366004612ad4565b611579565b3480156109b2575f80fd5b506103c96109c1366004612b0b565b611601565b3480156109d1575f80fd5b506010546104149060ff1681565b3480156109ea575f80fd5b5061043460085481565b3480156109ff575f80fd5b5061043460095481565b348015610a14575f80fd5b50600c5461041490610100900460ff1681565b348015610a32575f80fd5b5061043460115481565b348015610a47575f80fd5b50610434610a56366004612b4f565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b348015610a8b575f80fd5b50610414611657565b348015610a9f575f80fd5b506103c9610aae366004612b7b565b611693565b348015610abe575f80fd5b5061043460135481565b348015610ad3575f80fd5b506103c9610ae2366004612a6e565b61172b565b348015610af2575f80fd5b5061043460175481565b6005546001600160a01b03163314610b2f5760405162461bcd60e51b8152600401610b2690612bfa565b60405180910390fd5b670de0b6b3a76400006103e8610b4460025490565b610b4f90600f612c43565b610b599190612c5a565b610b639190612c5a565b811015610bc35760405162461bcd60e51b815260206004820152602860248201527f43616e6e6f7420736574206d617857616c6c657453697a65206c6f776572207460448201526768616e20312e352560c01b6064820152608401610b26565b610bd581670de0b6b3a7640000612c43565b600b5550565b606060038054610bea90612c79565b80601f0160208091040260200160405190810160405280929190818152602001828054610c1690612c79565b8015610c615780601f10610c3857610100808354040283529160200191610c61565b820191905f5260205f20905b815481529060010190602001808311610c4457829003601f168201915b5050505050905090565b5f610c77338484611815565b5060015b92915050565b6005546001600160a01b03163314610cab5760405162461bcd60e51b8152600401610b2690612bfa565b6001600160a01b038116610cf3576005546040516001600160a01b03909116904780156108fc02915f818181858888f19350505050158015610cef573d5f803e3d5ffd5b5050565b6040516370a0823160e01b815230600482015281905f906001600160a01b038316906370a0823190602401602060405180830381865afa158015610d39573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d5d9190612cb1565b9050816001600160a01b031663a9059cbb610d806005546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018490526044016020604051808303815f875af1158015610dca573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dee9190612cc8565b5050505b50565b6005546001600160a01b03163314610e1f5760405162461bcd60e51b8152600401610b2690612bfa565b6007546040516001600160a01b03918216918316907f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e743905f90a3600780546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610ea55760405162461bcd60e51b8152600401610b2690612bfa565b670de0b6b3a76400006103e8610eba60025490565b610ec5906005612c43565b610ecf9190612c5a565b610ed99190612c5a565b811015610f405760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526e6c6f776572207468616e20302e352560881b6064820152608401610b26565b610f5281670de0b6b3a7640000612c43565b60085550565b5f610f64848484611939565b610fb58433610fb085604051806060016040528060288152602001612e99602891396001600160a01b038a165f90815260016020908152604080832033845290915290205491906121f0565b611815565b5060019392505050565b6005546001600160a01b03163314610fe95760405162461bcd60e51b8152600401610b2690612bfa565b600c805462ffff0019166201010017905543601d55565b335f8181526001602090815260408083206001600160a01b03871684529091528120549091610c77918590610fb09086612228565b6005546001600160a01b0316331461105f5760405162461bcd60e51b8152600401610b2690612bfa565b6005805460ff60a01b1916600160a01b17905561107c600161228d565b6005805460ff60a01b19169055565b6005546001600160a01b031633146110b55760405162461bcd60e51b8152600401610b2690612bfa565b6005546040515f916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005545f906001600160a01b0316331461112a5760405162461bcd60e51b8152600401610b2690612bfa565b50600c805460ff19169055600190565b6005546001600160a01b031633146111645760405162461bcd60e51b8152600401610b2690612bfa565b6001600160a01b03919091165f908152601f60205260409020805460ff1916911515919091179055565b6005545f906001600160a01b031633146111ba5760405162461bcd60e51b8152600401610b2690612bfa565b50600a55600190565b6005546001600160a01b031633146111ed5760405162461bcd60e51b8152600401610b2690612bfa565b601283905560138290556014819055806112078385612ce3565b6112119190612ce3565b601155505050565b6005546001600160a01b031633146112435760405162461bcd60e51b8152600401610b2690612bfa565b600c8054911515620100000262ff000019909216919091179055565b606060048054610bea90612c79565b6005546001600160a01b031633146112985760405162461bcd60e51b8152600401610b2690612bfa565b7f00000000000000000000000029b69ddf521ddf7ff5bc32069ea9668f66f3123c6001600160a01b0316826001600160a01b03160361133f5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610b26565b610cef82826124b6565b6005545f906001600160a01b031633146113755760405162461bcd60e51b8152600401610b2690612bfa565b620186a061138260025490565b61138d906001612c43565b6113979190612c5a565b8210156114045760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610b26565b6103e861141060025490565b61141b906005612c43565b6114259190612c5a565b8211156114915760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610b26565b50600955600190565b5f610c773384610fb085604051806060016040528060258152602001612ec160259139335f9081526001602090815260408083206001600160a01b038d16845290915290205491906121f0565b5f610c77338484611939565b6005546001600160a01b0316331461151d5760405162461bcd60e51b8152600401610b2690612bfa565b6006546040516001600160a01b03918216918316907fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b05674905f90a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146115a35760405162461bcd60e51b8152600401610b2690612bfa565b6001600160a01b0382165f818152601e6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b0316331461162b5760405162461bcd60e51b8152600401610b2690612bfa565b601683905560178290556018819055806116458385612ce3565b61164f9190612ce3565b601555505050565b6005545f906001600160a01b031633146116835760405162461bcd60e51b8152600401610b2690612bfa565b506010805460ff19169055600190565b6005546001600160a01b031633146116bd5760405162461bcd60e51b8152600401610b2690612bfa565b5f5b82811015610dee5781600f5f8686858181106116dd576116dd612cf6565b90506020020160208101906116f29190612a6e565b6001600160a01b0316815260208101919091526040015f20805460ff19169115159190911790558061172381612d0a565b9150506116bf565b6005546001600160a01b031633146117555760405162461bcd60e51b8152600401610b2690612bfa565b6001600160a01b0381166117ba5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b26565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166118775760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b26565b6001600160a01b0382166118d85760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b26565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b03831661195f5760405162461bcd60e51b8152600401610b2690612d22565b6001600160a01b0382166119855760405162461bcd60e51b8152600401610b2690612d67565b6001600160a01b0383165f908152600f602052604090205460ff161580156119c557506001600160a01b0382165f908152600f602052604090205460ff16155b611a075760405162461bcd60e51b8152602060048201526013602482015272165bdd48185c9948189b1858dadb1a5cdd1959606a1b6044820152606401610b26565b805f03611a1e57611a1983835f612508565b505050565b600c5460ff1615611ecd576005546001600160a01b03848116911614801590611a5557506005546001600160a01b03838116911614155b8015611a6957506001600160a01b03821615155b8015611a8057506001600160a01b03821661dead14155b8015611a965750600554600160a01b900460ff16155b15611ecd57600c54610100900460ff16611b2c576001600160a01b0383165f908152601e602052604090205460ff1680611ae757506001600160a01b0382165f908152601e602052604090205460ff165b611b2c5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610b26565b60105460ff1615611c70576005546001600160a01b03838116911614801590611b8757507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316826001600160a01b031614155b8015611bc557507f00000000000000000000000029b69ddf521ddf7ff5bc32069ea9668f66f3123c6001600160a01b0316826001600160a01b031614155b15611c7057325f908152600d60205260409020544311611c5e5760405162461bcd60e51b815260206004820152604860248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e204f6e6c79206f6e652070757263686173652070657220626c6f636b2060648201526730b63637bbb2b21760c11b608482015260a401610b26565b325f908152600d602052604090204390555b6001600160a01b0383165f90815260208052604090205460ff168015611cae57506001600160a01b0382165f908152601f602052604090205460ff16155b15611d9157600854811115611d235760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610b26565b600b546001600160a01b0383165f90815260208190526040902054611d489083612ce3565b1115611d8c5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610b26565b611ecd565b6001600160a01b0382165f90815260208052604090205460ff168015611dcf57506001600160a01b0383165f908152601f602052604090205460ff16155b15611e4557600854811115611d8c5760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610b26565b6001600160a01b0382165f908152601f602052604090205460ff16611ecd57600b546001600160a01b0383165f90815260208190526040902054611e899083612ce3565b1115611ecd5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610b26565b305f9081526020819052604090205460095481108015908190611ef85750600c5462010000900460ff165b8015611f0e5750600554600160a01b900460ff16155b8015611f3157506001600160a01b0385165f90815260208052604090205460ff16155b8015611f5557506001600160a01b0385165f908152601e602052604090205460ff16155b8015611f7957506001600160a01b0384165f908152601e602052604090205460ff16155b15611fa8576005805460ff60a01b1916600160a01b179055611f9a5f61228d565b6005805460ff60a01b191690555b6005546001600160a01b0386165f908152601e602052604090205460ff600160a01b909204821615911680611ff457506001600160a01b0385165f908152601e602052604090205460ff165b15611ffc57505f5b5f81156121dc576001600160a01b0386165f90815260208052604090205460ff16801561202a57505f601554115b156120e65761205060195461204a6015548861260e90919063ffffffff16565b9061268c565b9050601554601754826120639190612c43565b61206d9190612c5a565b601b5f82825461207d9190612ce3565b90915550506015546018546120929083612c43565b61209c9190612c5a565b601c5f8282546120ac9190612ce3565b90915550506015546016546120c19083612c43565b6120cb9190612c5a565b601a5f8282546120db9190612ce3565b909155506121be9050565b6001600160a01b0387165f90815260208052604090205460ff16801561210d57505f601154115b156121be5761212d60195461204a6011548861260e90919063ffffffff16565b9050601154601354826121409190612c43565b61214a9190612c5a565b601b5f82825461215a9190612ce3565b909155505060115460145461216f9083612c43565b6121799190612c5a565b601c5f8282546121899190612ce3565b909155505060115460125461219e9083612c43565b6121a89190612c5a565b601a5f8282546121b89190612ce3565b90915550505b80156121cf576121cf873083612508565b6121d98186612daa565b94505b6121e7878787612508565b50505050505050565b5f81848411156122135760405162461bcd60e51b8152600401610b2691906129e5565b505f61221f8486612daa565b95945050505050565b5f806122348385612ce3565b9050838110156122865760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610b26565b9392505050565b305f9081526020819052604081205490505f601c54601a54601b546122b29190612ce3565b6122bc9190612ce3565b90505f831580156122d357508215806122d3575081155b156122de5750505050565b831580156122ed5750600a5483115b156122f857600a5492505b5f600283601b548661230a9190612c43565b6123149190612c5a565b61231e9190612c5a565b90505f61232b85836126cd565b9050476123378261270e565b5f61234247836126cd565b90505f61235e8761204a601a548561260e90919063ffffffff16565b90505f61237a8861204a601c548661260e90919063ffffffff16565b90505f816123888486612daa565b6123929190612daa565b5f601b819055601a819055601c8190556007546040519293506001600160a01b031691849181818185875af1925050503d805f81146123ec576040519150601f19603f3d011682016040523d82523d5f602084013e6123f1565b606091505b5090985050861580159061240457505f81115b156124575761241387826128c4565b601b54604080518881526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b6006546040516001600160a01b039091169047905f81818185875af1925050503d805f81146124a1576040519150601f19603f3d011682016040523d82523d5f602084013e6124a6565b606091505b5050505050505050505050505050565b6001600160a01b0382165f818152602080526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b03831661252e5760405162461bcd60e51b8152600401610b2690612d22565b6001600160a01b0382166125545760405162461bcd60e51b8152600401610b2690612d67565b61259081604051806060016040528060268152602001612e73602691396001600160a01b0386165f9081526020819052604090205491906121f0565b6001600160a01b038085165f9081526020819052604080822093909355908416815220546125be9082612228565b6001600160a01b038381165f818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910161192c565b5f825f0361261d57505f610c7b565b5f6126288385612c43565b9050826126358583612c5a565b146122865760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610b26565b5f61228683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506129a2565b5f61228683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506121f0565b6040805160028082526060820183525f9260208301908036833701905050905030815f8151811061274157612741612cf6565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127bd573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127e19190612dbd565b816001815181106127f4576127f4612cf6565b60200260200101906001600160a01b031690816001600160a01b03168152505061283f307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611815565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac947906128939085905f90869030904290600401612dd8565b5f604051808303815f87803b1580156128aa575f80fd5b505af11580156128bc573d5f803e3d5ffd5b505050505050565b6128ef307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611815565b60405163f305d71960e01b8152306004820152602481018390525f60448201819052606482015261dead60848201524260a48201527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03169063f305d71990839060c40160606040518083038185885af1158015612976573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061299b9190612e47565b5050505050565b5f81836129c25760405162461bcd60e51b8152600401610b2691906129e5565b505f61221f8486612c5a565b5f602082840312156129de575f80fd5b5035919050565b5f6020808352835180828501525f5b81811015612a10578581018301518582016040015282016129f4565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610df2575f80fd5b5f8060408385031215612a55575f80fd5b8235612a6081612a30565b946020939093013593505050565b5f60208284031215612a7e575f80fd5b813561228681612a30565b5f805f60608486031215612a9b575f80fd5b8335612aa681612a30565b92506020840135612ab681612a30565b929592945050506040919091013590565b8015158114610df2575f80fd5b5f8060408385031215612ae5575f80fd5b8235612af081612a30565b91506020830135612b0081612ac7565b809150509250929050565b5f805f60608486031215612b1d575f80fd5b505081359360208301359350604090920135919050565b5f60208284031215612b44575f80fd5b813561228681612ac7565b5f8060408385031215612b60575f80fd5b8235612b6b81612a30565b91506020830135612b0081612a30565b5f805f60408486031215612b8d575f80fd5b833567ffffffffffffffff80821115612ba4575f80fd5b818601915086601f830112612bb7575f80fd5b813581811115612bc5575f80fd5b8760208260051b8501011115612bd9575f80fd5b60209283019550935050840135612bef81612ac7565b809150509250925092565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417610c7b57610c7b612c2f565b5f82612c7457634e487b7160e01b5f52601260045260245ffd5b500490565b600181811c90821680612c8d57607f821691505b602082108103612cab57634e487b7160e01b5f52602260045260245ffd5b50919050565b5f60208284031215612cc1575f80fd5b5051919050565b5f60208284031215612cd8575f80fd5b815161228681612ac7565b80820180821115610c7b57610c7b612c2f565b634e487b7160e01b5f52603260045260245ffd5b5f60018201612d1b57612d1b612c2f565b5060010190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610c7b57610c7b612c2f565b5f60208284031215612dcd575f80fd5b815161228681612a30565b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b81811015612e265784516001600160a01b031683529383019391830191600101612e01565b50506001600160a01b03969096166060850152505050608001529392505050565b5f805f60608486031215612e59575f80fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122088e11c52a741a7b9f01b31f1a1c4aef700269a70a6b5e21dd3e0000bfd959c4464736f6c63430008150033

Verified Source Code Partial Match

Compiler: v0.8.21+commit.d9974bed EVM: shanghai Optimization: Yes (200 runs)
KANBE.sol 1145 lines
/*

KANBE ($KANBE)

Daisuke is a scion of the billionaire KANBE family. 
Utilizing abundant financial resources and the latest technology, he solves various cases in a semi-aggressive manner. 
He becomes a member of the Metropolitan Police Department's Modern Crime Prevention Task Force.

Socials : 
https://twitter.com/kanbecoinpage
http://t.me/KANBEPORTAL
https://kanbecoin.com

*/
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.19;
 
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }
 
    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);
 
    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);
 
    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);
 
    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);
 
    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
 
    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);
 
    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);
 
    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;
 
    function initialize(address, address) external;
}
 
interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);
 
    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);
 
    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);
 
    function createPair(address tokenA, address tokenB) external returns (address pair);
 
    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}
 
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);
 
    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);
 
    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);
 
    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);
 
    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);
 
    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);
 
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);
 
    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}
 
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);
 
    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);
 
    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}
 
 
contract ERC20 is Context, IERC20, IERC20Metadata {
    using SafeMath for uint256;
 
    mapping(address => uint256) private _balances;
 
    mapping(address => mapping(address => uint256)) private _allowances;
 
    uint256 private _totalSupply;
 
    string private _name;
    string private _symbol;
 
    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }
 
    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }
 
    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }
 
    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5,05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }
 
    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }
 
    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }
 
    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }
 
    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }
 
    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }
 
    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }
 
    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }
 
    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }
 
    /**
     * @dev Moves tokens `amount` from `sender` to `recipient`.
     *
     * This is internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
 
        _beforeTokenTransfer(sender, recipient, amount);
 
        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }
 
    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");
 
        _beforeTokenTransfer(address(0), account, amount);
 
        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }
 
    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");
 
        _beforeTokenTransfer(account, address(0), amount);
 
        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }
 
    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");
 
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }
 
    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be to transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}
 
library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");
 
        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;
 
        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }
 
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
 
        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;

        return c;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}
 
contract Ownable is Context {
    address private _owner;
 
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
 
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    function owner() public view returns (address) {
        return _owner;
    }
 
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
 
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}
 
library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);
 
    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;
 
        // Detect overflow when multiplying MIN_INT256 with -1
        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }
 
    function div(int256 a, int256 b) internal pure returns (int256) {
        // Prevent overflow when dividing MIN_INT256 by -1
        require(b != -1 || a != MIN_INT256);
 
        // Solidity already throws when dividing by 0.
        return a / b;
    }
 
    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }
 
    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }
 
    function abs(int256 a) internal pure returns (int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }
 
 
    function toUint256Safe(int256 a) internal pure returns (uint256) {
        require(a >= 0);
        return uint256(a);
    }
}
 
library SafeMathUint {
  function toInt256Safe(uint256 a) internal pure returns (int256) {
    int256 b = int256(a);
    require(b >= 0);
    return b;
  }
}
 
 
interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
 
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
 
    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}
 
interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);
 
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

contract KANBE is ERC20, Ownable {

    using SafeMath for uint256;
    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public constant deadAddress = address(0x000000000000000000000000000000000000dEaD);
    bool private isSwapping;
    address public marketingWallet;
    address public devWallet;
    uint256 public maxTransactionAmount;
    uint256 public swapTokensThreshold;
    uint256 public swapTokensMaxAmount;
    uint256 public maxWalletSize;
    bool public limitsInEffect = true;
    bool public tradeEnabled = false;
    bool public swapEnabled = false;
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
    mapping (address => uint256) private _holderFirstBuyTimestamp;
    mapping(address => bool) public bots;
    bool public transferDelayEnabled = true;
    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;
    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevFee;
    uint256 public feeDenominator;
    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;
    uint256 launchedBlock;
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) public _isExcludedMaxTransactionAmount;
    mapping (address => bool) public automatedMarketMakerPairs;
    event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress);
    event ExcludeFromFees(address indexed account, bool isExcluded);
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event marketingWalletUpdated(address indexed newWallet, address indexed oldWallet);
    event devWalletUpdated(address indexed newWallet, address indexed oldWallet);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );
 
    constructor() ERC20("KANBE", "KANBE") {
 
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
        
        uint256 totalSupply = 100000000000 * 1e18;
 
        uint256 _buyMarketingFee = 1;
        uint256 _buyLiquidityFee = 0;
        uint256 _buyDevFee = 1;
        uint256 _sellMarketingFee = 1;
        uint256 _sellLiquidityFee = 0;
        uint256 _sellDevFee = 1;

        uint256 _feeDenominator = 100;
 
        maxTransactionAmount = totalSupply * 5 / 1000; // 5 = 0.5%
        maxWalletSize = totalSupply * 2 / 100; // 2 = 2%
        swapTokensThreshold = totalSupply * 3 / 10000; // 3 = 0.03%
        swapTokensMaxAmount = totalSupply * 1 / 100; // 1 = 1%

        feeDenominator = _feeDenominator;
 
        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyDevFee = _buyDevFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
 
        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellDevFee = _sellDevFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
 
        marketingWallet = address(0x5Ffc3853153585C8a65E38F73cFbeBE027DeA922);
        devWallet = address(0xeE95472d8A2D416Abdb8a3E876Cb4FF1D676D0B1);
 
        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(devWallet, true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
 
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(devWallet, true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
 
        _mint(msg.sender, totalSupply);
    }
 
    receive() external payable {
 
  	}
 
    // once enabled, can never be turned off
    function startTrading() external onlyOwner {
        tradeEnabled = true;
        swapEnabled = true;
        launchedBlock = block.number;
    }

    function getLaunchedBlockNumber() public view returns (uint256) {
        return launchedBlock;
    }
 
    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool){
        limitsInEffect = false;
        return true;
    }
 
    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner returns (bool){
        transferDelayEnabled = false;
        return true;
    }
 
     // change the minimum amount of tokens to sell from fees
    function updateswapTokensThreshold(uint256 newAmount) external onlyOwner returns (bool){
  	    require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply.");
  	    require(newAmount <= totalSupply() * 5 / 1000, "Swap amount cannot be higher than 0.5% total supply.");
  	    swapTokensThreshold = newAmount;
  	    return true;
  	}
 
     // change the maximum amount of tokens to sell from fees
    function updateSwapTokensMaxAmount(uint256 newAmount) external onlyOwner returns (bool){
  	    swapTokensMaxAmount = newAmount;
  	    return true;
  	}
 
    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 5 / 1000)/1e18, "Cannot set maxTransactionAmount lower than 0.5%");
        maxTransactionAmount = newNum * (10**18);
    }
 
    function updatemaxWalletSizeAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 15 / 1000)/1e18, "Cannot set maxWalletSize lower than 1.5%");
        maxWalletSize = newNum * (10**18);
    }
 
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }
 
    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner(){
        swapEnabled = enabled;
    }
 
    function updateBuyFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _devFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
    }
 
    function updateSellFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _devFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
    }
 
    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }
 
    function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner {
        require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs");
 
        _setAutomatedMarketMakerPair(pair, value);
    }
 
    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;
 
        emit SetAutomatedMarketMakerPair(pair, value);
    }
 
    function updateMarketingWallet(address newMarketingWallet) external onlyOwner {
        emit marketingWalletUpdated(newMarketingWallet, marketingWallet);
        marketingWallet = newMarketingWallet;
    }
 
    function updateDevWallet(address newWallet) external onlyOwner {
        emit devWalletUpdated(newWallet, devWallet);
        devWallet = newWallet;
    }

    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(!bots[from] && !bots[to], "You are blacklisted");

        if(amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
 
        if(limitsInEffect){
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !isSwapping
            ){
                if(!tradeEnabled){
                    require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
                }
 
                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.  
                if (transferDelayEnabled) {
                    if (to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair)){
                        require(_holderLastTransferTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled. Only one purchase per block allowed.");
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }
 
                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                        require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount.");
                        require(amount + balanceOf(to) <= maxWalletSize, "Max wallet exceeded");
                }
 
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                        require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount.");
                }
                else if(!_isExcludedMaxTransactionAmount[to]){
                    require(amount + balanceOf(to) <= maxWalletSize, "Max wallet exceeded");
                }
            }
        }
 
		uint256 contractTokenBalance = balanceOf(address(this));
 
        bool canSwap = contractTokenBalance >= swapTokensThreshold;
 
        if( 
            canSwap &&
            swapEnabled &&
            !isSwapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            isSwapping = true;
            swapBack(false);
            isSwapping = false;
        }
 
        bool takeFee = !isSwapping;
 
        // if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
 
        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if(takeFee){
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0){
                fees = amount.mul(sellTotalFees).div(feeDenominator);
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForDev += fees * sellDevFee / sellTotalFees;
                tokensForMarketing += fees * sellMarketingFee / sellTotalFees;
            }
            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
        	    fees = amount.mul(buyTotalFees).div(feeDenominator);
        	    tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForDev += fees * buyDevFee / buyTotalFees;
                tokensForMarketing += fees * buyMarketingFee / buyTotalFees;
            }
 
            if(fees > 0){    
                super._transfer(from, address(this), fees);
            }
 
        	amount -= fees;
        }
 
        super._transfer(from, to, amount);
    }

    /// @notice Block address from transfer
    function blockMultipleBots(address[] calldata _bots, bool status) public onlyOwner {
        for(uint256 i = 0; i < _bots.length; i++) {
            bots[_bots[i]] = status;
        }
    }
 
    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
 
        _approve(address(this), address(uniswapV2Router), tokenAmount);
 
        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }
 
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);
 
        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            deadAddress,
            block.timestamp
        );
    }

    function manualSwap() external onlyOwner {
        isSwapping = true;
        swapBack(true);
        isSwapping = false;
    }
 
    function swapBack(bool _swapAll) private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing + tokensForDev;
        bool success;
 
        if(!_swapAll && (contractBalance == 0 || totalTokensToSwap == 0)) {return;}
 
        if(!_swapAll && contractBalance > swapTokensMaxAmount){
          contractBalance = swapTokensMaxAmount;
        }
 
        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);
 
        uint256 initialETHBalance = address(this).balance;
 
        swapTokensForEth(amountToSwapForETH); 
 
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
 
        uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(totalTokensToSwap);
        uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap);
 
        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev;
 
        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDev = 0;
 
        (success,) = address(devWallet).call{value: ethForDev}("");
 
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity);
        }
 
        (success,) = address(marketingWallet).call{value: address(this).balance}("");
    }

    function removeStuckTokens(address _token) external onlyOwner {
        if (_token == address(0x0)) {
            payable(owner()).transfer(address(this).balance);
            return;
        }
        IERC20 erc20token = IERC20(_token);
        uint256 balance = erc20token.balanceOf(address(this));
        erc20token.transfer(owner(), balance);
    }
}

Read Contract

_isExcludedMaxTransactionAmount 0x10d5de53 → bool
allowance 0xdd62ed3e → uint256
automatedMarketMakerPairs 0xb62496f5 → bool
balanceOf 0x70a08231 → uint256
bots 0xbfd79284 → bool
buyDevFee 0x9c3b4fdc → uint256
buyLiquidityFee 0xf11a24d3 → uint256
buyMarketingFee 0x7bce5a04 → uint256
buyTotalFees 0xd85ba063 → uint256
deadAddress 0x27c8f835 → address
decimals 0x313ce567 → uint8
devWallet 0x8ea5220f → address
feeDenominator 0x180b0d7e → uint256
getLaunchedBlockNumber 0x0dbd397c → uint256
isExcludedFromFees 0x4fbee193 → bool
limitsInEffect 0x4a62bb65 → bool
marketingWallet 0x75f0a874 → address
maxTransactionAmount 0xc8c8ebe4 → uint256
maxWalletSize 0x8f3fa860 → uint256
name 0x06fdde03 → string
owner 0x8da5cb5b → address
sellDevFee 0xa0d82dc5 → uint256
sellLiquidityFee 0xf6374342 → uint256
sellMarketingFee 0x92136913 → uint256
sellTotalFees 0x6a486a8e → uint256
swapEnabled 0x6ddd1713 → bool
swapTokensMaxAmount 0x5663ee3d → uint256
swapTokensThreshold 0xcef85139 → uint256
symbol 0x95d89b41 → string
tokensForDev 0x9fccce32 → uint256
tokensForLiquidity 0x1a8145bb → uint256
tokensForMarketing 0x1f3fed8f → uint256
totalSupply 0x18160ddd → uint256
tradeEnabled 0xd621e813 → bool
transferDelayEnabled 0xc876d0b9 → bool
uniswapV2Pair 0x49bd5a5e → address
uniswapV2Router 0x1694505e → address

Write Contract 25 functions

These functions modify contract state and require a wallet transaction to execute.

approve 0x095ea7b3
address spender
uint256 amount
returns: bool
blockMultipleBots 0xec1d27a4
address[] _bots
bool status
decreaseAllowance 0xa457c2d7
address spender
uint256 subtractedValue
returns: bool
disableTransferDelay 0xe884f260
No parameters
returns: bool
excludeFromFees 0xc0246668
address account
bool excluded
excludeFromMaxTransaction 0x7571336a
address updAds
bool isEx
increaseAllowance 0x39509351
address spender
uint256 addedValue
returns: bool
manualSwap 0x51bc3c85
No parameters
removeLimits 0x751039fc
No parameters
returns: bool
removeStuckTokens 0x0ee092fd
address _token
renounceOwnership 0x715018a6
No parameters
setAutomatedMarketMakerPair 0x9a7a23d6
address pair
bool value
startTrading 0x293230b8
No parameters
transfer 0xa9059cbb
address recipient
uint256 amount
returns: bool
transferFrom 0x23b872dd
address sender
address recipient
uint256 amount
returns: bool
transferOwnership 0xf2fde38b
address newOwner
updateBuyFees 0x8095d564
uint256 _marketingFee
uint256 _liquidityFee
uint256 _devFee
updateDevWallet 0x1816467f
address newWallet
updateMarketingWallet 0xaacebbe3
address newMarketingWallet
updateMaxTxnAmount 0x203e727e
uint256 newNum
updateSellFees 0xc17b5b8c
uint256 _marketingFee
uint256 _liquidityFee
uint256 _devFee
updateSwapEnabled 0x924de9b7
bool enabled
updateSwapTokensMaxAmount 0x79d28eff
uint256 newAmount
returns: bool
updatemaxWalletSizeAmount 0x00f1dfc5
uint256 newNum
updateswapTokensThreshold 0xa12e3013
uint256 newAmount
returns: bool

Recent Transactions

This address has 1 on-chain transactions, but only 1.3% of the chain is indexed. Transactions will appear as indexing progresses. View on Etherscan →