Cryo Explorer Ethereum Mainnet

Address Contract Partially Verified

Address 0xa8d8B65629653471cE7Fa9dC8Efc1Bfb47b5c8Ae
Balance 0.000000000 ETH
Nonce 2
Code Size 21317 bytes
Indexed Transactions 0
External Etherscan · Sourcify

Contract Bytecode

21317 bytes
0x608060405260043610620003df5760003560e01c80636ddd171311620001ff578063ad5c4648116200011b578063dd62ed3e11620000af578063f2fde38b1162000079578063f2fde38b1462000b0c578063f708a64f1462000b31578063f887ea401462000b56578063fbfa77cf1462000b6e57620003e7565b8063dd62ed3e1462000a78578063df20fd491462000a9d578063e0f8e2431462000ac2578063f1f3bca31462000ae757620003e7565b8063b62496f511620000f1578063b62496f514620009f1578063ca33e64c1462000a16578063cd806f431462000a2e578063d7c010321462000a5357620003e7565b8063ad5c4648146200098f578063add5df6614620009a7578063af06795a14620009cc57620003e7565b80639571a07d11620001935780639d64bf9311620001695780639d64bf931462000922578063a51af4c5146200093a578063a8aa1b311462000952578063a9059cbb146200096a57620003e7565b80639571a07d14620008c057806395d89b4114620008e55780639a7a23d614620008fd57620003e7565b80638366e79a11620001d55780638366e79a14620008535780638523db641462000878578063893d20e8146200089057806391950f3014620008a857620003e7565b80636ddd171314620007fe57806370a08231146200081657806382247ec0146200083b57620003e7565b806335faa41611620002fb5780634ada218b116200028f57806360733e8f116200025957806360733e8f146200076a57806360e232a9146200078f578063658d4b7f14620007b45780636d92e1a514620007d957620003e7565b80634ada218b14620006e3578063571ac8b014620006fb5780635881f3ef14620007205780635d0044ca146200074557620003e7565b80633b10e54011620002d15780633b10e540146200065c5780633f4218e01462000681578063430bf08a14620006a65780634355855a14620006be57620003e7565b806335faa41614620005fa578063379fad9a146200061257806338e99144146200063757620003e7565b806326560be711620003735780632af10fac11620003495780632af10fac146200057e5780632b112e4914620005965780632f54bf6e14620005ae578063313ce56714620005d357620003e7565b806326560be7146200050f57806326c081fc1462000534578063296020e7146200055957620003e7565b8063095ea7b311620003b5578063095ea7b3146200047757806315d61a82146200049c57806318160ddd14620004c357806323b872dd14620004ea57620003e7565b806303382cbb14620003ec57806306fdde03146200041c57806307c89fe8146200044357620003e7565b36620003e757005b600080fd5b348015620003f957600080fd5b506200040462000b86565b60405162000413919062002e7a565b60405180910390f35b3480156200042957600080fd5b506200043462000b95565b60405162000413919062002f07565b3480156200045057600080fd5b50620004686200046236600462002bec565b62000bbc565b60405162000413919062002efc565b3480156200048457600080fd5b50620004686200049636600462002d2f565b62000c10565b348015620004a957600080fd5b50620004c1620004bb36600462002dbb565b62000c7d565b005b348015620004d057600080fd5b50620004db62000cac565b60405162000413919062003022565b348015620004f757600080fd5b50620004686200050936600462002cb8565b62000cb2565b3480156200051c57600080fd5b50620004c16200052e36600462002d5d565b62000d7b565b3480156200054157600080fd5b50620004c16200055336600462002cfd565b62000db8565b3480156200056657600080fd5b50620004686200057836600462002bec565b62000e0d565b3480156200058b57600080fd5b506200040462000e22565b348015620005a357600080fd5b50620004db62000e31565b348015620005bb57600080fd5b5062000468620005cd36600462002bec565b62000e82565b348015620005e057600080fd5b50620005eb62000e96565b6040516200041391906200309d565b3480156200060757600080fd5b50620004c162000e9b565b3480156200061f57600080fd5b50620004c16200063136600462002d5d565b62000ef5565b3480156200064457600080fd5b50620004686200065636600462002bec565b62000f32565b3480156200066957600080fd5b50620004c16200067b36600462002d5d565b62000f50565b3480156200068e57600080fd5b5062000468620006a036600462002bec565b62000f94565b348015620006b357600080fd5b506200040462000fa9565b348015620006cb57600080fd5b5062000468620006dd36600462002bec565b62000fb8565b348015620006f057600080fd5b506200046862000fcd565b3480156200070857600080fd5b50620004686200071a36600462002bec565b62000fd6565b3480156200072d57600080fd5b50620004046200073f36600462002bec565b62000fe6565b3480156200075257600080fd5b50620004c16200076436600462002dbb565b6200135e565b3480156200077757600080fd5b50620004686200078936600462002bec565b6200138d565b3480156200079c57600080fd5b50620004c1620007ae36600462002bec565b620013ab565b348015620007c157600080fd5b50620004c1620007d336600462002cfd565b62001401565b348015620007e657600080fd5b5062000468620007f836600462002bec565b62001456565b3480156200080b57600080fd5b506200046862001474565b3480156200082357600080fd5b50620004db6200083536600462002bec565b62001484565b3480156200084857600080fd5b50620004db6200149f565b3480156200086057600080fd5b50620004c16200087236600462002c2a565b620014a5565b3480156200088557600080fd5b506200046862001601565b3480156200089d57600080fd5b50620004046200160f565b348015620008b557600080fd5b50620004686200161e565b348015620008cd57600080fd5b5062000468620008df36600462002bec565b62001627565b348015620008f257600080fd5b50620004346200163c565b3480156200090a57600080fd5b50620004c16200091c36600462002cfd565b6200165a565b3480156200092f57600080fd5b50620004db62001694565b3480156200094757600080fd5b50620004046200169a565b3480156200095f57600080fd5b5062000404620016a9565b3480156200097757600080fd5b50620004686200098936600462002d2f565b620016b8565b3480156200099c57600080fd5b5062000404620016c7565b348015620009b457600080fd5b50620004c1620009c636600462002e1b565b620016d6565b348015620009d957600080fd5b50620004c1620009eb36600462002cfd565b62001768565b348015620009fe57600080fd5b506200046862000a1036600462002bec565b620017bd565b34801562000a2357600080fd5b5062000404620017d2565b34801562000a3b57600080fd5b50620004c162000a4d36600462002cfd565b620017e1565b34801562000a6057600080fd5b50620004c162000a7236600462002c67565b62001a8d565b34801562000a8557600080fd5b50620004db62000a9736600462002c2a565b62001af6565b34801562000aaa57600080fd5b50620004c162000abc36600462002d9b565b62001b21565b34801562000acf57600080fd5b50620004c162000ae136600462002bec565b62001b6d565b34801562000af457600080fd5b50620004db62000b0636600462002d5d565b62001bb9565b34801562000b1957600080fd5b50620004c162000b2b36600462002bec565b62001bd2565b34801562000b3e57600080fd5b50620004c162000b5036600462002cfd565b62001c54565b34801562000b6357600080fd5b506200040462001d95565b34801562000b7b57600080fd5b506200040462001da4565b601f546001600160a01b031681565b60408051808201909152600d81526c476f696e6720746f205a65726f60981b602082015290565b600062000bc93362000e82565b62000bf15760405162461bcd60e51b815260040162000be89062002fcb565b60405180910390fd5b506001600160a01b03166000908152600c602052604090205460ff1690565b3360008181526008602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259062000c6b90869062003022565b60405180910390a35060015b92915050565b62000c883362000e82565b62000ca75760405162461bcd60e51b815260040162000be89062002fcb565b600655565b60045490565b6004546001600160a01b038416600090815260086020908152604080832033845290915281205490911462000d64576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b038716600090815260088252838120338252909152919091205462000d3f91849062001dc1565b6001600160a01b03851660009081526008602090815260408083203384529091529020555b62000d7184848462001df0565b90505b9392505050565b62000d863362000e82565b62000da55760405162461bcd60e51b815260040162000be89062002fcb565b6028805460ff1916911515919091179055565b62000dc33362000e82565b62000de25760405162461bcd60e51b815260040162000be89062002fcb565b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b600c6020526000908152604090205460ff1681565b6020546001600160a01b031681565b60035460009062000e7d9062000e50906001600160a01b031662001484565b60025462000e769062000e6c906001600160a01b031662001484565b60045490620021a5565b90620021a5565b905090565b6000546001600160a01b0390811691161490565b600990565b62000ea63362000e82565b62000ec55760405162461bcd60e51b815260040162000be89062002fcb565b60405133904780156108fc02916000818181858888f1935050505015801562000ef2573d6000803e3d6000fd5b50565b62000f003362000e82565b62000f1f5760405162461bcd60e51b815260040162000be89062002fcb565b600d805460ff1916911515919091179055565b6001600160a01b031660009081526009602052604090205460ff1690565b62000f5b3362000e82565b62000f7a5760405162461bcd60e51b815260040162000be89062002fcb565b602880549115156101000261ff0019909216919091179055565b600a6020526000908152604090205460ff1681565b6021546001600160a01b031681565b600b6020526000908152604090205460ff1681565b60285460ff1681565b600062000c778260045462000c10565b600062000ff33362000e82565b620010125760405162461bcd60e51b815260040162000be89062002fcb565b6000829050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200105157600080fd5b505afa15801562001066573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200108c919062002c0b565b6001600160a01b031663e6a4390530836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620010d557600080fd5b505afa158015620010ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001110919062002c0b565b6040518363ffffffff1660e01b81526004016200112f92919062002e8e565b60206040518083038186803b1580156200114857600080fd5b505afa1580156200115d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001183919062002c0b565b91506001600160a01b0382166200130557806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620011ce57600080fd5b505afa158015620011e3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001209919062002c0b565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200125257600080fd5b505afa15801562001267573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200128d919062002c0b565b6040518363ffffffff1660e01b8152600401620012ac92919062002e8e565b602060405180830381600087803b158015620012c757600080fd5b505af1158015620012dc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001302919062002c0b565b91505b602480546001600160a01b038085166001600160a01b0319928316179092556023805493831693909116929092179182905560045430600090815260086020908152604080832095909416825293909352912055919050565b620013693362000e82565b620013885760405162461bcd60e51b815260040162000be89062002fcb565b600555565b6001600160a01b03166000908152600a602052604090205460ff1690565b620013b63362000e82565b620013d55760405162461bcd60e51b815260040162000be89062002fcb565b602180546001600160a01b039092166001600160a01b0319928316811790915560228054909216179055565b6200140c3362000e82565b6200142b5760405162461bcd60e51b815260040162000be89062002fcb565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b6001600160a01b03166000908152600b602052604090205460ff1690565b602654600160a01b900460ff1681565b6001600160a01b031660009081526007602052604090205490565b60055481565b620014b03362000e82565b620014cf5760405162461bcd60e51b815260040162000be89062002fcb565b6001600160a01b038216301415620014fb5760405162461bcd60e51b815260040162000be89062002f5d565b6040516370a0823160e01b81526001600160a01b0383169063a9059cbb90839083906370a08231906200153390309060040162002e7a565b60206040518083038186803b1580156200154c57600080fd5b505afa15801562001561573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001587919062002dd4565b6040518363ffffffff1660e01b8152600401620015a692919062002ea8565b602060405180830381600087803b158015620015c157600080fd5b505af1158015620015d6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620015fc919062002d7c565b505050565b602854610100900460ff1681565b6000546001600160a01b031690565b600d5460ff1681565b60096020526000908152604090205460ff1681565b6040805180820190915260048152635a45524f60e01b602082015290565b620016653362000e82565b620016845760405162461bcd60e51b815260040162000be89062002fcb565b620016908282620021b3565b5050565b60065481565b6026546001600160a01b031681565b6024546001600160a01b031681565b600062000d7433848462001df0565b6001546001600160a01b031681565b620016e13362000e82565b620017005760405162461bcd60e51b815260040162000be89062002fcb565b600f8990556010889055601187905560128690556200172e866200172789818d8d620021f1565b90620021f1565b601355601485905560158490556016839055601782905562001758826200172785818989620021f1565b6018556019555050505050505050565b620017733362000e82565b620017925760405162461bcd60e51b815260040162000be89062002fcb565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b600e6020526000908152604090205460ff1681565b601e546001600160a01b031681565b620017ec3362000e82565b6200180b5760405162461bcd60e51b815260040162000be89062002fcb565b602380546001600160a01b0319166001600160a01b0384811691909117918290556040805163c45a015560e01b81529051929091169163c45a015591600480820192602092909190829003018186803b1580156200186857600080fd5b505afa1580156200187d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620018a3919062002c0b565b6001546040516364e329cb60e11b81526001600160a01b039283169263c9c6539692620018d892911690309060040162002e8e565b602060405180830381600087803b158015620018f357600080fd5b505af115801562001908573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200192e919062002c0b565b602480546001600160a01b0319166001600160a01b0392831617905560045430600090815260086020908152604080832060235490951683529390529190912055801562001a2157602360009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620019c557600080fd5b505afa158015620019da573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001a00919062002c0b565b600180546001600160a01b0319166001600160a01b03929092169190911790555b813360405162001a319062002bde565b62001a3e92919062002e8e565b604051809103906000f08015801562001a5b573d6000803e3d6000fd5b50602580546001600160a01b03199081166001600160a01b039384161791829055602680549290931691161790555050565b62001a983362000e82565b62001ab75760405162461bcd60e51b815260040162000be89062002fcb565b601e80546001600160a01b039485166001600160a01b031991821617909155601f80549385169382169390931790925560208054919093169116179055565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b62001b2c3362000e82565b62001b4b5760405162461bcd60e51b815260040162000be89062002fcb565b60268054921515600160a01b0260ff60a01b1990931692909217909155602755565b62001b783362000e82565b62001b975760405162461bcd60e51b815260040162000be89062002fcb565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b60008162001bca5760135462000c77565b505060185490565b62001bdd3362000e82565b62001bfc5760405162461bcd60e51b815260040162000be89062002fcb565b600080546001600160a01b0319166001600160a01b0383161790556040517f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639062001c4990839062002e7a565b60405180910390a150565b62001c5f3362000e82565b62001c7e5760405162461bcd60e51b815260040162000be89062002fcb565b6001600160a01b0382166000908152600b60205260409020805460ff19168215151790558062001d28576025546001600160a01b0383811660009081526007602052604090819020549051630a5b654b60e11b815291909216916314b6ca969162001cee91869160040162002ea8565b600060405180830381600087803b15801562001d0957600080fd5b505af115801562001d1e573d6000803e3d6000fd5b5050505062001690565b602554604051630a5b654b60e11b81526001600160a01b03909116906314b6ca969062001d5d90859060009060040162002ea8565b600060405180830381600087803b15801562001d7857600080fd5b505af115801562001d8d573d6000803e3d6000fd5b505050505050565b6023546001600160a01b031681565b6022546001600160a01b031681565b600062000d748284620030c6565b6000818484111562001de85760405162461bcd60e51b815260040162000be8919062002f07565b505050900390565b60285460009062010000900460ff161562001e1a5762001e12848484620021ff565b905062000d74565b60285460ff168062001e4457506001600160a01b03841660009081526009602052604090205460ff165b62001e635760405162461bcd60e51b815260040162000be89062002feb565b6023546001600160a01b038481166000908152600e602052604081205491909216919060ff168062001ea65750816001600160a01b0316856001600160a01b0316145b90508015801562001ed057506001600160a01b0385166000908152600c602052604090205460ff16155b1562001f1f576005546001600160a01b03861660009081526007602052604090205462001eff908690620030ab565b1062001f1f5760405162461bcd60e51b815260040162000be89062002f94565b80801562001f2f57506006548410155b1562001f4f5762001f3f620022a6565b1562001f4f5762001f4f62002307565b6040805180820182526014815273496e73756666696369656e742062616c616e636560601b6020808301919091526001600160a01b03891660009081526007909152919091205462001fa391869062001dc1565b6001600160a01b03871660009081526007602052604081209190915562001fcb87876200278d565b62001fd7578462001fe4565b62001fe4878787620028c0565b6001600160a01b0387166000908152600760205260409020549091506200200c9082620021f1565b6001600160a01b03808816600090815260076020908152604080832094909455918a168152600b909152205460ff16620020b5576025546001600160a01b0388811660009081526007602052604090819020549051630a5b654b60e11b815291909216916314b6ca969162002086918b9160040162002ea8565b600060405180830381600087803b158015620020a157600080fd5b505af1925050508015620020b3575060015b505b6001600160a01b0386166000908152600b602052604090205460ff166200214b576025546001600160a01b0387811660009081526007602052604090819020549051630a5b654b60e11b815291909216916314b6ca96916200211c918a9160040162002ea8565b600060405180830381600087803b1580156200213757600080fd5b505af192505050801562002149575060015b505b856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162002190919062003022565b60405180910390a35060019695505050505050565b600062000d74828462003109565b6001600160a01b039091166000908152600e60209081526040808320805494151560ff199586168117909155600b9092529091208054909216179055565b600062000d748284620030ab565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b03861660009081526007909152918220546200225291849062001dc1565b6001600160a01b038086166000908152600760205260408082209390935590851681522054620022839083620021f1565b6001600160a01b0384166000908152600760205260409020555060019392505050565b336000908152600e602052604081205460ff16158015620022d0575060285462010000900460ff16155b8015620022e65750602654600160a01b900460ff165b801562000e7d57505060275430600090815260076020526040902054101590565b6028805462ff00001916620100001790556000620023253062001484565b9050600062002350601d5462001727601b5462001727601c54601a54620021f190919063ffffffff16565b905060006200236c6002601a5462001db390919063ffffffff16565b905060006200237c8483620021a5565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110620023c557634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260018054835192169183919081106200240457634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260235460405163791ac94760e01b81524792919091169063791ac94790620024509086906000908790309042906004016200302b565b600060405180830381600087803b1580156200246b57600080fd5b505af115801562002480573d6000803e3d6000fd5b5050505060006200249b8247620021a590919063ffffffff16565b90506000620024c86002620024c189620024c1601a548762002bd090919063ffffffff16565b9062001db3565b90506000620024e888620024c1601b548662002bd090919063ffffffff16565b905060006200250889620024c1601c548762002bd090919063ffffffff16565b90506000620025288a620024c1601d548862002bd090919063ffffffff16565b6000601a819055601c819055601b819055601d5590508215620025ab57602560009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0846040518263ffffffff1660e01b81526004016000604051808303818588803b1580156200259657600080fd5b505af193505050508015620025a9575060015b505b81156200266b57602854610100900460ff16156200262e57602260009054906101000a90046001600160a01b03166001600160a01b03166317f524e3836040518263ffffffff1660e01b81526004016000604051808303818588803b1580156200261457600080fd5b505af19350505050801562002627575060015b506200266b565b601f546040516001600160a01b039091169083156108fc029084906000818181858888f1935050505015801562002669573d6000803e3d6000fd5b505b8015620026af576020546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015620026ad573d6000803e3d6000fd5b505b88156200277457602360009054906101000a90046001600160a01b03166001600160a01b031663f305d71985308c600080601e60009054906101000a90046001600160a01b0316426040518863ffffffff1660e01b81526004016200271a9695949392919062002ec1565b6060604051808303818588803b1580156200273457600080fd5b505af115801562002749573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019062002770919062002ded565b5050505b50506028805462ff000019169055505050505050505050565b600d5460009060ff1615620027e7576001600160a01b0383166000908152600a602052604090205460ff16158015620027df57506001600160a01b0382166000908152600a602052604090205460ff16155b905062000c77565b6023546001600160a01b038481166000908152600e602052604090205491169060ff1680620028275750806001600160a01b0316846001600160a01b0316145b806200286757506001600160a01b0383166000908152600e602052604090205460ff1680620028675750806001600160a01b0316836001600160a01b0316145b62002874576000620028b7565b6001600160a01b0384166000908152600a602052604090205460ff16158015620028b757506001600160a01b0383166000908152600a602052604090205460ff16155b91505062000c77565b6023546001600160a01b038381166000908152600e602052604081205490929190911690829060ff1680620029065750816001600160a01b0316856001600160a01b0316145b90506000620029158262001bb9565b9050600062002935601954620024c1848962002bd090919063ffffffff16565b9050811562002b4357821562002a475760145415620029845781601454826200295f9190620030e7565b6200296b9190620030c6565b601a60008282546200297e9190620030ab565b90915550505b60165415620029c35781601654826200299e9190620030e7565b620029aa9190620030c6565b601c6000828254620029bd9190620030ab565b90915550505b6015541562002a02578160155482620029dd9190620030e7565b620029e99190620030c6565b601b6000828254620029fc9190620030ab565b90915550505b6017541562002a4157816017548262002a1c9190620030e7565b62002a289190620030c6565b601d600082825462002a3b9190620030ab565b90915550505b62002b43565b600f541562002a865781600f548262002a619190620030e7565b62002a6d9190620030c6565b601a600082825462002a809190620030ab565b90915550505b6011541562002ac557816011548262002aa09190620030e7565b62002aac9190620030c6565b601c600082825462002abf9190620030ab565b90915550505b6010541562002b0457816010548262002adf9190620030e7565b62002aeb9190620030c6565b601b600082825462002afe9190620030ab565b90915550505b6012541562002b4357816012548262002b1e9190620030e7565b62002b2a9190620030c6565b601d600082825462002b3d9190620030ab565b90915550505b3060009081526007602052604090205462002b5f9082620021f1565b30600081815260076020526040908190209290925590516001600160a01b038a16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9062002bb090859062003022565b60405180910390a362002bc48682620021a5565b98975050505050505050565b600062000d748284620030e7565b6121b1806200315f83390190565b60006020828403121562002bfe578081fd5b813562000d748162003139565b60006020828403121562002c1d578081fd5b815162000d748162003139565b6000806040838503121562002c3d578081fd5b823562002c4a8162003139565b9150602083013562002c5c8162003139565b809150509250929050565b60008060006060848603121562002c7c578081fd5b833562002c898162003139565b9250602084013562002c9b8162003139565b9150604084013562002cad8162003139565b809150509250925092565b60008060006060848603121562002ccd578283fd5b833562002cda8162003139565b9250602084013562002cec8162003139565b929592945050506040919091013590565b6000806040838503121562002d10578182fd5b823562002d1d8162003139565b9150602083013562002c5c816200314f565b6000806040838503121562002d42578182fd5b823562002d4f8162003139565b946020939093013593505050565b60006020828403121562002d6f578081fd5b813562000d74816200314f565b60006020828403121562002d8e578081fd5b815162000d74816200314f565b6000806040838503121562002dae578182fd5b823562002d4f816200314f565b60006020828403121562002dcd578081fd5b5035919050565b60006020828403121562002de6578081fd5b5051919050565b60008060006060848603121562002e02578283fd5b8351925060208401519150604084015190509250925092565b60008060008060008060008060006101208a8c03121562002e3a578485fd5b505087359960208901359950604089013598606081013598506080810135975060a0810135965060c0810135955060e08101359450610100013592509050565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b901515815260200190565b6000602080835283518082850152825b8181101562002f355785810183015185820160400152820162002f17565b8181111562002f475783604083870101525b50601f01601f1916929092016040019392505050565b6020808252601c908201527f43616e2774207769746864726177206e617469766520746f6b656e7300000000604082015260600190565b6020808252601d908201527f4d61782077616c6c657420686173206265656e20747269676765726564000000604082015260600190565b60208082526006908201526510a7aba722a960d11b604082015260600190565b6020808252601d908201527f54726164696e672069732063757272656e746c792064697361626c6564000000604082015260600190565b90815260200190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b818110156200307c5784516001600160a01b03168352938301939183019160010162003055565b50506001600160a01b03969096166060850152505050608001529392505050565b60ff91909116815260200190565b60008219821115620030c157620030c162003123565b500190565b600082620030e257634e487b7160e01b81526012600452602481fd5b500490565b600081600019048311821515161562003104576200310462003123565b500290565b6000828210156200311e576200311e62003123565b500390565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b038116811462000ef257600080fd5b801515811462000ef257600080fdfe6080604052600480546001600160a01b031990811673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc29081179092556005805482169092179091556012805490911673dac17f958d2ee523a2206206994597c13d831ec71790556ec097ce7bc90715b34b9f10000000006017553480156200007a57600080fd5b50604051620021b1380380620021b18339810160408190526200009d916200026c565b600080546001600160a01b0319166001600160a01b03838116919091179091558216620000df57737a250d5630b4cf539739df2c5dacb4c659f2488d620000e1565b815b600680546001600160a01b039283166001600160a01b03199182161790915560018054821633178155600280548316737f62ffc4730887561320d5bc5fd8651f739c207e908117909155600380549093161790915560125482166000908152600f6020526040808220805460ff1990811685179091557fdf82e8e0ca2e8ef371057fa5118f2005d1fe0db2f7f1913ccbb77b1c43aa57258054821685179055736b175474e89094c44da98b954eedeac495271d0f9092527f907804fb4f4f34039c621b1a41008798cef5775ce10837f2769fb81032e4d8388054909216909217905560048054915163095ea7b360e01b8152919092169163095ea7b391620001f09186916000199101620002cc565b602060405180830381600087803b1580156200020b57600080fd5b505af115801562000220573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002469190620002a3565b505050620002e5565b80516001600160a01b03811681146200026757600080fd5b919050565b600080604083850312156200027f578182fd5b6200028a836200024f565b91506200029a602084016200024f565b90509250929050565b600060208284031215620002b5578081fd5b81518015158114620002c5578182fd5b9392505050565b6001600160a01b03929092168252602082015260400190565b611ebc80620002f56000396000f3fe60806040526004361061026b5760003560e01c806383e8450011610144578063c238efd5116100b6578063e0bab4c41161007a578063e0bab4c414610706578063e0f8e2431461071b578063e2d2e2191461073b578063efca2eed14610750578063f2fde38b14610765578063f854a27f1461078557610272565b8063c238efd51461066f578063ca89b8991461068f578063ce7c2ac2146106af578063d0e30db0146106de578063d63a8e11146106e657610272565b8063929925db11610108578063929925db146105ba578063997664d7146105da578063a70bf8bb146105ef578063a995bb141461060f578063bcd259a81461062f578063c161357a1461064f57610272565b806383e8450014610525578063845610ee1461054557806387f681d81461056557806389a30271146105855780638e4241751461059a57610272565b80632bcf161c116101dd5780633a98ef39116101a15780633a98ef39146104885780635881f3ef1461049d578063610035a4146104bd57806363eabae9146104dd5780636c9382cd146104fd5780638366e79a1461050557610272565b80632bcf161c146103e65780632f54bf6e146104065780633041d503146104335780633333cfc31461045357806335faa4161461047357610272565b806314b6ca961161022f57806314b6ca961461032457806315f7e05e146103465780631b386a4214610366578063264fff5b146103865780632870e95d146103a657806328fd3198146103c657610272565b806302c4aede146102775780630300f925146102ad578063061ad62a146102da5780630a25dea9146102fa57806311ce023d1461030f57610272565b3661027257005b600080fd5b34801561028357600080fd5b50610297610292366004611b46565b6107a5565b6040516102a49190611c66565b60405180910390f35b3480156102b957600080fd5b506102cd6102c8366004611b62565b6107c0565b6040516102a49190611dc0565b3480156102e657600080fd5b506102976102f5366004611b46565b6107dd565b34801561030657600080fd5b506102976107f8565b34801561031b57600080fd5b506102cd610807565b34801561033057600080fd5b5061034461033f366004611c07565b61080d565b005b34801561035257600080fd5b50610344610361366004611b46565b6109c5565b34801561037257600080fd5b506102cd610381366004611b62565b6109d2565b34801561039257600080fd5b506103446103a1366004611b46565b6109fd565b3480156103b257600080fd5b506103446103c1366004611b46565b610a4d565b3480156103d257600080fd5b506102cd6103e1366004611b46565b610aa1565b3480156103f257600080fd5b506102cd610401366004611b46565b610b2d565b34801561041257600080fd5b50610426610421366004611b46565b610b48565b6040516102a49190611c93565b34801561043f57600080fd5b5061034461044e366004611b46565b610b5c565b34801561045f57600080fd5b5061034461046e366004611bda565b610ba3565b34801561047f57600080fd5b50610344610bf3565b34801561049457600080fd5b506102cd610c44565b3480156104a957600080fd5b506103446104b8366004611b46565b610c4a565b3480156104c957600080fd5b506104266104d8366004611b46565b610c91565b3480156104e957600080fd5b506103446104f8366004611bda565b610caf565b610344610ce7565b34801561051157600080fd5b50610344610520366004611b62565b610d52565b34801561053157600080fd5b50610344610540366004611b62565b610e9a565b34801561055157600080fd5b50610344610560366004611b46565b610eed565b34801561057157600080fd5b50610344610580366004611b46565b610f34565b34801561059157600080fd5b50610297610f82565b3480156105a657600080fd5b506104266105b5366004611b62565b610f9a565b3480156105c657600080fd5b506104266105d5366004611b62565b610fc8565b3480156105e657600080fd5b506102cd610fe8565b3480156105fb57600080fd5b5061034461060a366004611b46565b610fee565b34801561061b57600080fd5b5061034461062a366004611b62565b611035565b34801561063b57600080fd5b5061034461064a366004611b62565b61108a565b34801561065b57600080fd5b5061034461066a366004611b9a565b6110db565b34801561067b57600080fd5b5061029761068a366004611b46565b611186565b34801561069b57600080fd5b506102cd6106aa366004611b46565b6111a4565b3480156106bb57600080fd5b506106cf6106ca366004611b46565b6111b6565b6040516102a493929190611dc9565b6103446111d7565b3480156106f257600080fd5b50610426610701366004611b46565b611227565b34801561071257600080fd5b5061029761123c565b34801561072757600080fd5b50610344610736366004611b46565b611254565b34801561074757600080fd5b506102cd61129b565b34801561075c57600080fd5b506102cd6112a1565b34801561077157600080fd5b50610344610780366004611b46565b6112a7565b34801561079157600080fd5b506104266107a0366004611b46565b611322565b600e602052600090815260409020546001600160a01b031681565b600b60209081526000928352604080842090915290825290205481565b6010602052600090815260409020546001600160a01b031681565b6012546001600160a01b031681565b60175481565b6001546001600160a01b031633148061083057506002546001600160a01b031633145b8061084557506003546001600160a01b031633145b61084e57600080fd5b6001600160a01b038216600090815260116020526040902054156108de576001600160a01b038083166000908152601060209081526040808320549093168252600f9052205460ff16156108c7576001600160a01b038083166000908152601060205260409020546108c291849116611337565b6108de565b6012546108de9083906001600160a01b0316611337565b60008111801561090457506001600160a01b038216600090815260116020526040902054155b15610917576109128261193e565b61094a565b8015801561093c57506001600160a01b03821660009081526011602052604090205415155b1561094a5761094a8261199f565b6001600160a01b03821660009081526011602052604090205460135461097b91839161097591611aec565b90611aff565b6013556001600160a01b03821660009081526011602052604090208190556109a281611b0b565b6001600160a01b0390921660009081526011602052604090206001019190915550565b6109cf3382611337565b50565b6001600160a01b039182166000908152600b6020908152604080832093909416825291909152205490565b610a0633610b48565b610a2b5760405162461bcd60e51b8152600401610a2290611da0565b60405180910390fd5b601280546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0381166000908152600f602052604090205460ff16610a7257600080fd5b33600090815260106020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038116600090815260116020526040812054610ac657506000610b28565b6001600160a01b038216600090815260116020526040812054610ae890611b0b565b6001600160a01b038416600090815260116020526040902060010154909150808211610b1957600092505050610b28565b610b238282611aec565b925050505b919050565b6001600160a01b03166000908152600a602052604090205490565b6000546001600160a01b0390811691161490565b610b6533610b48565b610b815760405162461bcd60e51b8152600401610a2290611da0565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b610bac33610b48565b610bc85760405162461bcd60e51b8152600401610a2290611da0565b6001600160a01b03919091166000908152600d60205260409020805460ff1916911515919091179055565b610bfc33610b48565b610c185760405162461bcd60e51b8152600401610a2290611da0565b60405133904780156108fc02916000818181858888f193505050501580156109cf573d6000803e3d6000fd5b60135481565b610c5333610b48565b610c6f5760405162461bcd60e51b8152600401610a2290611da0565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03166000908152600f602052604090205460ff1690565b336000908152600c602090815260408083206001600160a01b0395909516835293905291909120805460ff1916911515919091179055565b610cf033610b48565b610d0c5760405162461bcd60e51b8152600401610a2290611da0565b3415610d50576014543490610d219082611aff565b601455601354601754610d4b91610d4291610d3c9085611b2e565b90611b3a565b60165490611aff565b601655505b565b610d5b33610b48565b610d775760405162461bcd60e51b8152600401610a2290611da0565b6001600160a01b038216301415610da05760405162461bcd60e51b8152600401610a2290611d07565b6040516370a0823160e01b81526001600160a01b0383169063a9059cbb90839083906370a0823190610dd6903090600401611c66565b60206040518083038186803b158015610dee57600080fd5b505afa158015610e02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e269190611c4e565b6040518363ffffffff1660e01b8152600401610e43929190611c7a565b602060405180830381600087803b158015610e5d57600080fd5b505af1158015610e71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e959190611c32565b505050565b610ea333610b48565b610ebf5760405162461bcd60e51b8152600401610a2290611da0565b6001600160a01b039182166000908152600e6020526040902080546001600160a01b03191691909216179055565b610ef633610b48565b610f125760405162461bcd60e51b8152600401610a2290611da0565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b610f3d33610b48565b610f595760405162461bcd60e51b8152600401610a2290611da0565b6001600160a01b03166000908152600f60205260409020805460ff19811660ff90911615179055565b73a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4881565b6001600160a01b039182166000908152600c6020908152604080832093909416825291909152205460ff1690565b600c60209081526000928352604080842090915290825290205460ff1681565b60145481565b610ff733610b48565b6110135760405162461bcd60e51b8152600401610a2290611da0565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b61103e33610b48565b61105a5760405162461bcd60e51b8152600401610a2290611da0565b60405163095ea7b360e01b81526001600160a01b0383169063095ea7b390610e4390849060001990600401611c7a565b6001600160a01b0382166000908152600c6020908152604080832033845290915290205460ff166110cd5760405162461bcd60e51b8152600401610a2290611d75565b6110d78282611337565b5050565b6110e433610b48565b6111005760405162461bcd60e51b8152600401610a2290611da0565b60405163095ea7b360e01b81526001600160a01b0384169063095ea7b39061112e9085908590600401611c7a565b602060405180830381600087803b15801561114857600080fd5b505af115801561115c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111809190611c32565b50505050565b6001600160a01b039081166000908152600e60205260409020541690565b600a6020526000908152604090205481565b60116020526000908152604090208054600182015460029092015490919083565b6001546001600160a01b03163314806111fa57506002546001600160a01b031633145b8061120f57506003546001600160a01b031633145b61121857600080fd5b6014543490610d219082611aff565b600f6020526000908152604090205460ff1681565b736b175474e89094c44da98b954eedeac495271d0f81565b61125d33610b48565b6112795760405162461bcd60e51b8152600401610a2290611da0565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b60165481565b60155481565b6112b033610b48565b6112cc5760405162461bcd60e51b8152600401610a2290611da0565b600080546001600160a01b0319166001600160a01b0383161790556040517f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc68616390611317908390611c66565b60405180910390a150565b600d6020526000908152604090205460ff1681565b6001600160a01b0381166000908152600f602052604090205460ff1661136f5760405162461bcd60e51b8152600401610a2290611d3e565b6001600160a01b038216600090815260116020526040902054611391576110d7565b600061139c83610aa1565b90508015610e95576015546113b19082611aff565b6015556001600160a01b038316600090815260096020908152604080832042905560119091529020600201546113e79082611aff565b6001600160a01b038416600090815260116020526040902060028101919091555461141190611b0b565b6001600160a01b0380851660009081526011602052604090206001019190915560045483821691161415611500576040516001600160a01b0384169082156108fc029083906000818181858888f19350505050158015611475573d6000803e3d6000fd5b506001600160a01b0382166000908152600a60205260409020546114999082611aff565b6001600160a01b038084166000908152600a6020908152604080832094909455600b815283822092871682529190915220546114d59082611aff565b6001600160a01b038084166000908152600b6020908152604080832093881683529290522055610e95565b6040516370a0823160e01b815282906000906001600160a01b038316906370a0823190611531908890600401611c66565b60206040518083038186803b15801561154957600080fd5b505afa15801561155d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115819190611c4e565b6001600160a01b038581166000908152600e6020526040902054919250166116b257604080516002808252606082018352600092602083019080368337505060045482519293506001600160a01b0316918391506000906115f257634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b031681525050848160018151811061163457634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260065460405163b6f9de9560e01b815291169063b6f9de9590869061167a9060009086908c904290600401611c9e565b6000604051808303818588803b15801561169357600080fd5b505af11580156116a7573d6000803e3d6000fd5b505050505050611811565b6040805160038082526080820190925260009160208201606080368337505060045482519293506001600160a01b03169183915060009061170357634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092018101919091528682166000908152600e909152604090205482519116908290600190811061175557634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b031681525050848160028151811061179757634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260065460405163b6f9de9560e01b815291169063b6f9de959086906117dd9060009086908c904290600401611c9e565b6000604051808303818588803b1580156117f657600080fd5b505af115801561180a573d6000803e3d6000fd5b5050505050505b6040516370a0823160e01b81526000906001600160a01b038416906370a0823190611840908990600401611c66565b60206040518083038186803b15801561185857600080fd5b505afa15801561186c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118909190611c4e565b90506118be61189f8284611aec565b6001600160a01b0387166000908152600a602052604090205490611aff565b6001600160a01b0386166000908152600a60205260409020556119106118e48284611aec565b6001600160a01b038088166000908152600b60209081526040808320938c168352929052205490611aff565b6001600160a01b038087166000908152600b60209081526040808320938b1683529290522055505050505050565b600780546001600160a01b039092166000818152600860205260408120849055600184018355919091527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68890910180546001600160a01b0319169091179055565b600780546119af90600190611e36565b815481106119cd57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0384811684526008909252604090922054600780549290931692918110611a1957634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b03948516179055918316815260089182905260408120546007805491939291611a6590600190611e36565b81548110611a8357634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020556007805480611ac757634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b031916905501905550565b6000611af88284611e36565b9392505050565b6000611af88284611ddf565b6000611b28601754610d3c60165485611b2e90919063ffffffff16565b92915050565b6000611af88284611e17565b6000611af88284611df7565b600060208284031215611b57578081fd5b8135611af881611e63565b60008060408385031215611b74578081fd5b8235611b7f81611e63565b91506020830135611b8f81611e63565b809150509250929050565b600080600060608486031215611bae578081fd5b8335611bb981611e63565b92506020840135611bc981611e63565b929592945050506040919091013590565b60008060408385031215611bec578182fd5b8235611bf781611e63565b91506020830135611b8f81611e78565b60008060408385031215611c19578182fd5b8235611c2481611e63565b946020939093013593505050565b600060208284031215611c43578081fd5b8151611af881611e78565b600060208284031215611c5f578081fd5b5051919050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b600060808201868352602060808185015281875180845260a0860191508289019350845b81811015611ce75784516001600160a01b031683529383019391830191600101611cc2565b50506001600160a01b039690961660408501525050506060015292915050565b6020808252601c908201527f43616e2774207769746864726177206e617469766520746f6b656e7300000000604082015260600190565b60208082526017908201527f496e76616c696420726577617264206164647265737321000000000000000000604082015260600190565b602080825260119082015270165bdd4818d85b89dd08191bc81d1a185d607a1b604082015260600190565b60208082526006908201526510a7aba722a960d11b604082015260600190565b90815260200190565b9283526020830191909152604082015260600190565b60008219821115611df257611df2611e4d565b500190565b600082611e1257634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615611e3157611e31611e4d565b500290565b600082821015611e4857611e48611e4d565b500390565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b03811681146109cf57600080fd5b80151581146109cf57600080fdfea26469706673582212202cf2c31eea525bfeb07fa875245bc6f8c9963876bcfd75fac0e2d1fee669cd1764736f6c63430008000033a2646970667358221220d155ef50f68039377c2eb85478e0a15fdbb944b5a5af93523a43ee1b384f026864736f6c63430008000033

Verified Source Code Partial Match

Compiler: v0.8.0+commit.c7dfd78e EVM: istanbul Optimization: Yes (200 runs)
Zero.sol 933 lines
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

library SafeMath {
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function decimals() external view returns (uint8);
    function symbol() external view returns (string memory);
    function name() external view returns (string memory);
    function getOwner() external view returns (address);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address _owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

abstract contract Auth {
    address internal owner;
    constructor(address _owner) {
        owner = _owner;
    }
    modifier onlyOwner() {
        require(isOwner(msg.sender), "!OWNER"); _;
    }
    function isOwner(address account) public view returns (bool) {
        return account == owner;
    }
    function transferOwnership(address payable adr) public onlyOwner {
        owner = adr;
        emit OwnershipTransferred(adr);
    }
    event OwnershipTransferred(address owner);
}

interface IDEXFactory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
    function getPair(address tokenA, address tokenB) external view returns (address pair);
}

interface IDEXRouter {
    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 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;
}

interface IDividendDistributor {
    function setShare(address shareholder, uint256 amount) external;
    function deposit() external payable;
}

interface IVault {
    function sendToDevWallet() external payable;
}

contract DividendDistributor is IDividendDistributor, Auth {
    using SafeMath for uint256;

    address _token;
    address _depositorOne;
    address _depositorTwo;

    struct Share {
        uint256 amount;
        uint256 totalExcluded;
        uint256 totalRealised;
    }

    IERC20 BASE = IERC20(0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2);
    address WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
    IDEXRouter router;

    address[] shareholders;
    mapping (address => uint256) shareholderIndexes;
    mapping (address => uint256) shareholderClaims;

    mapping (address => uint256) public totalRewardsDistributed;
    mapping (address => mapping (address => uint256)) public totalRewardsToUser;

    mapping (address => mapping (address => bool)) public canClaimDividendOfUser;

    mapping (address => bool) public availableRewards;
    mapping (address => address) public pathRewards;

    mapping (address => bool) public allowed;
    mapping (address => address) public choice;

    mapping (address => Share) public shares;

    address public DEFAULT = 0xdAC17F958D2ee523a2206206994597C13D831ec7; // USDT (Default)
    address public constant USDC = 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48;
    address public constant DAI = 0x6B175474E89094C44Da98b954EedeAC495271d0F;

    uint256 public totalShares;
    uint256 public totalDividends;
    uint256 public totalDistributed;
    uint256 public dividendsPerShare;
    uint256 public dividendsPerShareAccuracyFactor = 10 ** 36;

    modifier onlyToken() {
        require(msg.sender == _token || msg.sender == _depositorOne || msg.sender == _depositorTwo);
        _;
    }

    constructor (
        address _router,
        address _owner
    ) Auth(_owner) {
        router = _router != address(0) ? IDEXRouter(_router) : IDEXRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        _token = msg.sender;
        _depositorOne = 0x7f62FFC4730887561320D5bc5fd8651F739C207e;
        _depositorTwo = 0x7f62FFC4730887561320D5bc5fd8651F739C207e;
        allowed[DEFAULT] = true;
        allowed[USDC] = true;
        allowed[DAI] = true;
        IERC20(BASE).approve(_router, 2**256 - 1);
    }

    receive() external payable {}

    function getTotalRewards(address token) public view returns (uint256) {
        return totalRewardsDistributed[token];
    }

    function getTotalRewardsToUser(address token, address user) public view returns (uint256) {
        return totalRewardsToUser[token][user];
    }

    function checkCanClaimDividendOfUser(address user, address claimer) public view returns (bool) {
        return canClaimDividendOfUser[user][claimer];
    }

    function setReward(
        address _reward,
        bool status
    ) public onlyOwner {
        availableRewards[_reward] = status;
    }

    function setPathReward(
        address _reward,
        address _path
    ) public onlyOwner {
        pathRewards[_reward] = _path;
    }

    function getPathReward(
        address _reward
    ) public view returns (address) {
        return pathRewards[_reward];
    }

    function changeRouterVersion(
        address _router
    ) external onlyOwner {
        IDEXRouter _uniswapV2Router = IDEXRouter(_router);
        router = _uniswapV2Router;
    }

    function setShare(
        address shareholder,
        uint256 amount
    ) external override onlyToken {
        if (shares[shareholder].amount > 0) {
            if (allowed[choice[shareholder]]) {
                distributeDividend(shareholder, choice[shareholder]);
            } else {
                distributeDividend(shareholder, DEFAULT);
            }
        }
        if (amount > 0 && shares[shareholder].amount == 0) {
            addShareholder(shareholder);
        } else if (amount == 0 && shares[shareholder].amount > 0) {
            removeShareholder(shareholder);
        }
        totalShares = totalShares.sub(shares[shareholder].amount).add(amount);
        shares[shareholder].amount = amount;
        shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);
    }

    function deposit() external payable override onlyToken {
        uint256 amount = msg.value;
        totalDividends = totalDividends.add(amount);
        dividendsPerShare = dividendsPerShare.add(dividendsPerShareAccuracyFactor.mul(amount).div(totalShares));
    }

    function depositOwner() external payable onlyOwner {
        if (msg.value > 0) {
            uint256 amount = msg.value;
            totalDividends = totalDividends.add(amount);
            dividendsPerShare = dividendsPerShare.add(dividendsPerShareAccuracyFactor.mul(amount).div(totalShares));
        }
    }

    function distributeDividend(
        address shareholder,
        address rewardAddress
    ) internal {
        require(allowed[rewardAddress], "Invalid reward address!");
        if (shares[shareholder].amount == 0) return;
        uint256 amount = getUnpaidEarnings(shareholder);
        if (amount > 0) {
            totalDistributed = totalDistributed.add(amount);
            shareholderClaims[shareholder] = block.timestamp;
            shares[shareholder].totalRealised = shares[shareholder].totalRealised.add(amount);
            shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);
            if (rewardAddress == address(BASE)) {
                payable(shareholder).transfer(amount);
                totalRewardsDistributed[rewardAddress] = totalRewardsDistributed[rewardAddress].add(amount);  
                totalRewardsToUser[rewardAddress][shareholder] = totalRewardsToUser[rewardAddress][shareholder].add(amount);
            } else {
                IERC20 rewardToken = IERC20(rewardAddress);
                uint256 beforeBalance = rewardToken.balanceOf(shareholder);
                if (pathRewards[rewardAddress] == address(0)) {
                    address[] memory path = new address[](2);
                    path[0] = address(BASE);
                    path[1] = rewardAddress;
                    router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0, path, shareholder, block.timestamp);                 
                } else {
                    address[] memory path = new address[](3);
                    path[0] = address(BASE);
                    path[1] = pathRewards[rewardAddress];
                    path[2] = rewardAddress;
                    router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0, path, shareholder, block.timestamp);
                }
                uint256 afterBalance = rewardToken.balanceOf(shareholder);
                totalRewardsDistributed[rewardAddress] = totalRewardsDistributed[rewardAddress].add(afterBalance.sub(beforeBalance));
                totalRewardsToUser[rewardAddress][shareholder] = totalRewardsToUser[rewardAddress][shareholder].add(afterBalance.sub(beforeBalance));
            }
        }
    }

    function makeApprove(
        address token,
        address spender,
        uint256 amount
    ) public onlyOwner {
        IERC20(token).approve(spender, amount);
    }

    function claimDividend(
        address rewardAddress
    ) external {
        distributeDividend(msg.sender, rewardAddress);
    }

    function setChoice(
        address _choice
    ) external {
        require(allowed[_choice]);
        choice[msg.sender] = _choice;
    }

    function toggleChoice(
        address _choice
    ) public onlyOwner {
        allowed[_choice] = !allowed[_choice];
    }

    function getChoice(
        address _choice
    ) public view returns (bool) {
        return allowed[_choice];
    }

    function claimDividendOfUser(
        address user,
        address rewardAddress
    ) external {
        require(canClaimDividendOfUser[user][msg.sender], "You can't do that");
        distributeDividend(user, rewardAddress);
    }

    function setClaimDividendOfUser(
        address claimer,
        bool status
    ) external {
        canClaimDividendOfUser[msg.sender][claimer] = status;
    }

    function getUnpaidEarnings(
        address shareholder
    ) public view returns (uint256) {
        if (shares[shareholder].amount == 0) return 0;
        uint256 shareholderTotalDividends = getCumulativeDividends(shares[shareholder].amount);
        uint256 shareholderTotalExcluded = shares[shareholder].totalExcluded;
        if (shareholderTotalDividends <= shareholderTotalExcluded) return 0;
        return shareholderTotalDividends.sub(shareholderTotalExcluded);
    }

    function getCumulativeDividends(
        uint256 share
    ) internal view returns (uint256) {
        return share.mul(dividendsPerShare).div(dividendsPerShareAccuracyFactor);
    }

    function addShareholder(
        address shareholder
    ) internal {
        shareholderIndexes[shareholder] = shareholders.length;
        shareholders.push(shareholder);
    }

    function removeShareholder(
        address shareholder
    ) internal {
        shareholders[shareholderIndexes[shareholder]] = shareholders[shareholders.length - 1];
        shareholderIndexes[shareholders[shareholders.length - 1]] = shareholderIndexes[shareholder];
        shareholders.pop();
    }

    function sweep() external onlyOwner {
        payable(msg.sender).transfer(address(this).balance);
    }

    function changeBASE(
        address _BASE
    ) external onlyOwner {
        BASE = IERC20(_BASE);
    }

    function changeWETH(
        address _WETH
    ) external onlyOwner {
        WETH = _WETH;
    }

    function changeDEFAULT(
        address _DEFAULT
    ) external onlyOwner {
        DEFAULT = _DEFAULT;
    }

    function changeDepositorOne(
        address depositor
    ) external onlyOwner {
        _depositorOne = depositor;
    }

    function changeDepositorTwo(
        address depositor
    ) external onlyOwner {
        _depositorTwo = depositor;
    }

    function newApproval(
        address token,
        address _contract
    ) external onlyOwner {
        IERC20(token).approve(_contract, 2**256 - 1);
    }

    function transferForeignToken(
        address token,
        address _to
    ) external onlyOwner {
        require(token != address(this), "Can't withdraw native tokens");
        IERC20(token).transfer(_to, IERC20(token).balanceOf(address(this)));
    }
}

contract Zero is IERC20, Auth {
    using SafeMath for uint256;

    address public WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
    address DEAD = 0x000000000000000000000000000000000000dEaD;
    address ZERO = 0x0000000000000000000000000000000000000000;

    string constant _name = "Going to Zero";
    string constant _symbol = "ZERO";
    uint8 constant _decimals = 9;

    uint256 _totalSupply = 1000000000 * (10 ** _decimals);
    uint256 public _maxWallet = _totalSupply.div(50);

    uint256 public minAmountToTriggerSwap = 0;

    mapping (address => uint256) _balances;
    mapping (address => mapping (address => uint256)) _allowances;

    mapping (address => bool) public isDisabledExempt;
    mapping (address => bool) public isFeeExempt;
    mapping (address => bool) public isDividendExempt;
    mapping (address => bool) public _isFree;

    bool public isFeeOnTransferEnabled = false;

    mapping (address => bool) public automatedMarketMakerPairs;

    uint256 buyLiquidityFee = 0;
    uint256 buyReflectionFee = 500;
    uint256 buyOperationsFee = 500;
    uint256 buyTreasuryFee = 0;
    uint256 buyTotalFee = 1000;

    uint256 sellLiquidityFee = 250;
    uint256 sellReflectionFee = 0;
    uint256 sellOperationsFee = 500;
    uint256 sellTreasuryFee = 750;
    uint256 sellTotalFee = 1500;

    uint256 feeDenominator = 10000;

    uint256 _liquidityTokensToSwap;
    uint256 _reflectionTokensToSwap;
    uint256 _operationsTokensToSwap;
    uint256 _treasuryTokensToSwap;

    address public autoLiquidityReceiver = 0x1344974f45eff7b975AE85B69A7067bE7f2D231d;
    address public operationsFeeReceiver = msg.sender;
    address public treasuryFeeReceiver = 0x1344974f45eff7b975AE85B69A7067bE7f2D231d;

    address public vaultAddress = 0x7618C6ED407EE083DDEcBc013a33218B7453932F;
    IVault public vault = IVault(vaultAddress);

    IDEXRouter public router;
    address public pair;

    DividendDistributor distributor;
    address public distributorAddress;

    bool public swapEnabled = true;
    uint256 private swapMinimumTokens = _totalSupply / 5000;

    bool public tradingEnabled = false;
    bool public vaultEnabled = true;

    bool inSwap;
    modifier swapping() {
        inSwap = true;
        _;
        inSwap = false;
    }

    constructor () Auth(msg.sender) {
        address _router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
        router = IDEXRouter(_router);
        pair = IDEXFactory(router.factory()).createPair(WETH, address(this));
        _allowances[address(this)][address(router)] = _totalSupply;
        WETH = router.WETH();
        distributor = new DividendDistributor(_router, msg.sender);
        distributorAddress = address(distributor);

        isDisabledExempt[msg.sender] = true;
        isFeeExempt[msg.sender] = true;
        isDividendExempt[pair] = true;
        isDividendExempt[address(this)] = true;
        isDividendExempt[DEAD] = true;

        autoLiquidityReceiver = msg.sender;

        _setAutomatedMarketMakerPair(pair, true);

        approve(_router, _totalSupply);
        approve(address(pair), _totalSupply);
        _balances[msg.sender] = _totalSupply;
        emit Transfer(address(0), msg.sender, _totalSupply);
    }

    receive() external payable {}

    function totalSupply() external view override returns (uint256) { return _totalSupply; }
    function decimals() external pure override returns (uint8) { return _decimals; }
    function symbol() external pure override returns (string memory) { return _symbol; }
    function name() external pure override returns (string memory) { return _name; }
    function getOwner() external view override returns (address) { return owner; }
    function balanceOf(address account) public view override returns (uint256) { return _balances[account]; }
    function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; }

    function approve(
        address spender,
        uint256 amount
    ) public override returns (bool) {
        _allowances[msg.sender][spender] = amount;
        emit Approval(msg.sender, spender, amount);
        return true;
    }

    function approveMax(
        address spender
    ) external returns (bool) {
        return approve(spender, _totalSupply);
    }

    function transfer(
        address recipient,
        uint256 amount
    ) external override returns (bool) {
        return _transferFrom(msg.sender, recipient, amount);
    }

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external override returns (bool) {
        if (_allowances[sender][msg.sender] != _totalSupply) _allowances[sender][msg.sender] = _allowances[sender][msg.sender].sub(amount, "Insufficient Allowance");

        return _transferFrom(sender, recipient, amount);
    }

    function _transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) internal returns (bool) {
        if (inSwap) return _basicTransfer(sender, recipient, amount);

        require(tradingEnabled || isDisabledExempt[sender], "Trading is currently disabled");

        address routerAddress = address(router);
        bool isSell = automatedMarketMakerPairs[recipient] || recipient == routerAddress;

        if (!isSell && !_isFree[recipient]) require((_balances[recipient] + amount) < _maxWallet, "Max wallet has been triggered");

        if (isSell && amount >= minAmountToTriggerSwap) {
            if (shouldSwapBack()) swapBack();
        }

        _balances[sender] = _balances[sender].sub(amount, "Insufficient balance");

        uint256 amountReceived = shouldTakeFee(sender, recipient) ? takeFee(sender, recipient, amount) : amount;

        _balances[recipient] = _balances[recipient].add(amountReceived);

        if (!isDividendExempt[sender]) {
            try distributor.setShare(sender, _balances[sender]) {} catch {}
        }
        if (!isDividendExempt[recipient]) {
            try distributor.setShare(recipient, _balances[recipient]) {} catch {}
        }

        emit Transfer(sender, recipient, amountReceived);
        return true;
    }

    function _basicTransfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal returns (bool) {
        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");
        _balances[recipient] = _balances[recipient].add(amount);
        return true;
    }

    function shouldTakeFee(
        address sender,
        address recipient
    ) internal view returns (bool) {
        if (isFeeOnTransferEnabled) {
            return !isFeeExempt[sender] && !isFeeExempt[recipient];
        } else {
            address routerAddress = address(router);
            return ((automatedMarketMakerPairs[sender] || sender == routerAddress) || (automatedMarketMakerPairs[recipient] || recipient == routerAddress)) ? !isFeeExempt[sender] && !isFeeExempt[recipient] : false;
        }
    }

    function getTotalFee(
        bool selling
    ) public view returns (uint256) {
        return selling ? sellTotalFee : buyTotalFee;
    }

    function takeFee(
        address sender,
        address receiver,
        uint256 amount
    ) internal returns (uint256) {
        address routerAddress = address(router);
        bool isSell = automatedMarketMakerPairs[receiver] || receiver == routerAddress;

        uint256 totalFee = getTotalFee(isSell);
        uint256 feeAmount = amount.mul(totalFee).div(feeDenominator);

        if (totalFee > 0) {
            if (isSell) {
                if (sellLiquidityFee > 0) {
                    _liquidityTokensToSwap += feeAmount * sellLiquidityFee / totalFee;
                }
                if (sellOperationsFee > 0) {
                    _operationsTokensToSwap += feeAmount * sellOperationsFee / totalFee;
                }
                if (sellReflectionFee > 0) {
                    _reflectionTokensToSwap += feeAmount * sellReflectionFee / totalFee;
                }
                if (sellTreasuryFee > 0) {
                    _treasuryTokensToSwap += feeAmount * sellTreasuryFee / totalFee;
                }
            } else {
                if (buyLiquidityFee > 0) {
                    _liquidityTokensToSwap += feeAmount * buyLiquidityFee / totalFee;
                }
                if (buyOperationsFee > 0) {
                    _operationsTokensToSwap += feeAmount * buyOperationsFee / totalFee;
                }
                if (buyReflectionFee > 0) {
                    _reflectionTokensToSwap += feeAmount * buyReflectionFee / totalFee;
                }
                if (buyTreasuryFee > 0) {
                    _treasuryTokensToSwap += feeAmount * buyTreasuryFee / totalFee;
                }
            }
        }

        _balances[address(this)] = _balances[address(this)].add(feeAmount);
        emit Transfer(sender, address(this), feeAmount);

        return amount.sub(feeAmount);
    }

    function shouldSwapBack() internal view returns (bool) {
        return !automatedMarketMakerPairs[msg.sender] && !inSwap && swapEnabled && _balances[address(this)] >= swapMinimumTokens;
    }

    function setAutomatedMarketMakerPair(
        address _pair,
        bool value
    ) public onlyOwner {
        _setAutomatedMarketMakerPair(_pair, value);
    }

    function _setAutomatedMarketMakerPair(
        address _pair,
        bool value
    ) private {
        automatedMarketMakerPairs[_pair] = value;
        isDividendExempt[_pair] = value;
    }

    function swapBack() internal swapping {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = _liquidityTokensToSwap.add(_operationsTokensToSwap).add(_reflectionTokensToSwap).add(_treasuryTokensToSwap);
        
        uint256 tokensForLiquidity = _liquidityTokensToSwap.div(2);
        uint256 amountToSwap = contractBalance.sub(tokensForLiquidity);

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = WETH;
        uint256 balanceBefore = address(this).balance;

        router.swapExactTokensForETHSupportingFeeOnTransferTokens(amountToSwap, 0, path, address(this), block.timestamp);

        uint256 amountETH = address(this).balance.sub(balanceBefore);

        uint256 amountETHLiquidity = amountETH.mul(_liquidityTokensToSwap).div(totalTokensToSwap).div(2);
        uint256 amountETHReflection = amountETH.mul(_reflectionTokensToSwap).div(totalTokensToSwap);
        uint256 amountETHOperations = amountETH.mul(_operationsTokensToSwap).div(totalTokensToSwap);
        uint256 amountETHTreasury = amountETH.mul(_treasuryTokensToSwap).div(totalTokensToSwap);
        
        _liquidityTokensToSwap = 0;
        _operationsTokensToSwap = 0;
        _reflectionTokensToSwap = 0;
        _treasuryTokensToSwap = 0;

        if (amountETHReflection > 0) try distributor.deposit{value: amountETHReflection}() {} catch {}
        if (amountETHOperations > 0) {
            if (vaultEnabled) {
                try vault.sendToDevWallet{value: amountETHOperations}() {} catch {}
            } else {
                payable(operationsFeeReceiver).transfer(amountETHOperations);
            }
        }
        if (amountETHTreasury > 0) payable(treasuryFeeReceiver).transfer(amountETHTreasury);
        if (tokensForLiquidity > 0) router.addLiquidityETH{value: amountETHLiquidity}(address(this), tokensForLiquidity, 0, 0, autoLiquidityReceiver, block.timestamp);
    }

    function buyTokens(
        uint256 amount,
        address to
    ) internal swapping {
        address[] memory path = new address[](2);
        path[0] = WETH;
        path[1] = address(this);
        router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0, path, to, block.timestamp);
    }
    
    function sweep() external onlyOwner {
        payable(msg.sender).transfer(address(this).balance);
    }

    function changeWETH(
        address _WETH
    ) external onlyOwner {
        WETH = _WETH;
    }

    function changeRouterPairDistributor(
        address _router,
        bool _setWETH
    ) external onlyOwner {
        router = IDEXRouter(_router);
        pair = IDEXFactory(router.factory()).createPair(WETH, address(this));
        _allowances[address(this)][address(router)] = _totalSupply;
        if (_setWETH) {
            WETH = router.WETH();
        }
        distributor = new DividendDistributor(_router, msg.sender);
        distributorAddress = address(distributor);
    }

    function transferForeignToken(
        address _token,
        address _to
    ) external onlyOwner {
        require(_token != address(this), "Can't withdraw native tokens");
        IERC20(_token).transfer(_to, IERC20(_token).balanceOf(address(this)));
    }

    function setMaxWallet(
        uint256 amount
    ) external onlyOwner {
        _maxWallet = amount;
    }

    function setMinAmountToTriggerSwap(
        uint256 amount
    ) external onlyOwner {
        minAmountToTriggerSwap = amount;
    }

    function setIsFeeOnTransferEnabled(
        bool status
    ) external onlyOwner {
        isFeeOnTransferEnabled = status;
    }

    function setIsDividendExempt(
        address holder,
        bool exempt
    ) external onlyOwner {
        isDividendExempt[holder] = exempt;
        exempt ? distributor.setShare(holder, 0) : distributor.setShare(holder, _balances[holder]);
    }

    function checkIsDividendExempt(
        address holder
    ) public view returns (bool) {
        return isDividendExempt[holder];
    }

    function setIsDisabledExempt(
        address holder,
        bool exempt
    ) external onlyOwner {
        isDisabledExempt[holder] = exempt;
    }

    function checkIsDisabledExempt(
        address holder
    ) public view returns (bool) {
        return isDisabledExempt[holder];
    }

    function setIsFeeExempt(
        address holder,
        bool exempt
    ) external onlyOwner {
        isFeeExempt[holder] = exempt;
    }

    function checkIsFeeExempt(
        address holder
    ) public view returns (bool) {
        return isFeeExempt[holder];
    }

    function setFree(
        address holder,
        bool exempt
    ) public onlyOwner {
        _isFree[holder] = exempt;
    }

    function checkFree(
        address holder
    ) public view onlyOwner returns (bool) {
        return _isFree[holder];
    }

    function setFees(
        uint256 _buyLiquidityFee,
        uint256 _buyReflectionFee,
        uint256 _buyOperationsFee,
        uint256 _buyTreasuryFee,
        uint256 _sellLiquidityFee,
        uint256 _sellReflectionFee,
        uint256 _sellOperationsFee,
        uint256 _sellTreasuryFee,
        uint256 _feeDenominator
    ) external onlyOwner {
        buyLiquidityFee = _buyLiquidityFee;
        buyReflectionFee = _buyReflectionFee;
        buyOperationsFee = _buyOperationsFee;
        buyTreasuryFee = _buyTreasuryFee;
        buyTotalFee = _buyLiquidityFee.add(_buyReflectionFee).add(_buyOperationsFee).add(_buyTreasuryFee);

        sellLiquidityFee = _sellLiquidityFee;
        sellReflectionFee = _sellReflectionFee;
        sellOperationsFee = _sellOperationsFee;
        sellTreasuryFee = _sellTreasuryFee;
        sellTotalFee = _sellLiquidityFee.add(_sellReflectionFee).add(_sellOperationsFee).add(_sellTreasuryFee);

        feeDenominator = _feeDenominator;
    }

    function setFeeReceivers(
        address _autoLiquidityReceiver,
        address _operationsFeeReceiver,
        address _treasuryFeeReceiver
    ) external onlyOwner {
        autoLiquidityReceiver = _autoLiquidityReceiver;
        operationsFeeReceiver = _operationsFeeReceiver;
        treasuryFeeReceiver = _treasuryFeeReceiver;
    }

    function changeVault(
        address _vaultAddress
    ) external onlyOwner {
        vaultAddress = _vaultAddress;
        vault = IVault(_vaultAddress);
    }

    function toggleVault(
        bool _enabled
    ) external onlyOwner {
        vaultEnabled = _enabled;
    }

    function toggleTrading(
        bool _enabled
    ) external onlyOwner {
        tradingEnabled = _enabled;
    }

    function setSwapBackSettings(
        bool _enabled,
        uint256 _amount
    ) external onlyOwner {
        swapEnabled = _enabled;
        swapMinimumTokens = _amount;
    }

    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(ZERO));
    }
    
    function changeRouterVersion(
        address _router
    ) external onlyOwner returns (address _pair) {
        IDEXRouter _uniswapV2Router = IDEXRouter(_router);
        _pair = IDEXFactory(_uniswapV2Router.factory()).getPair(address(this), _uniswapV2Router.WETH());
        if (_pair == address(0)) _pair = IDEXFactory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        pair = _pair;
        router = _uniswapV2Router;
        _allowances[address(this)][address(router)] = _totalSupply;
    }
}

Read Contract

WETH 0xad5c4648 → address
_isFree 0x296020e7 → bool
_maxWallet 0x82247ec0 → uint256
allowance 0xdd62ed3e → uint256
autoLiquidityReceiver 0xca33e64c → address
automatedMarketMakerPairs 0xb62496f5 → bool
balanceOf 0x70a08231 → uint256
checkFree 0x07c89fe8 → bool
checkIsDisabledExempt 0x38e99144 → bool
checkIsDividendExempt 0x6d92e1a5 → bool
checkIsFeeExempt 0x60733e8f → bool
decimals 0x313ce567 → uint8
distributorAddress 0xa51af4c5 → address
getCirculatingSupply 0x2b112e49 → uint256
getOwner 0x893d20e8 → address
getTotalFee 0xf1f3bca3 → uint256
isDisabledExempt 0x9571a07d → bool
isDividendExempt 0x4355855a → bool
isFeeExempt 0x3f4218e0 → bool
isFeeOnTransferEnabled 0x91950f30 → bool
isOwner 0x2f54bf6e → bool
minAmountToTriggerSwap 0x9d64bf93 → uint256
name 0x06fdde03 → string
operationsFeeReceiver 0x03382cbb → address
pair 0xa8aa1b31 → address
router 0xf887ea40 → address
swapEnabled 0x6ddd1713 → bool
symbol 0x95d89b41 → string
totalSupply 0x18160ddd → uint256
tradingEnabled 0x4ada218b → bool
treasuryFeeReceiver 0x2af10fac → address
vault 0xfbfa77cf → address
vaultAddress 0x430bf08a → address
vaultEnabled 0x8523db64 → bool

Write Contract 24 functions

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

approve 0x095ea7b3
address spender
uint256 amount
returns: bool
approveMax 0x571ac8b0
address spender
returns: bool
changeRouterPairDistributor 0xcd806f43
address _router
bool _setWETH
changeRouterVersion 0x5881f3ef
address _router
returns: address
changeVault 0x60e232a9
address _vaultAddress
changeWETH 0xe0f8e243
address _WETH
setAutomatedMarketMakerPair 0x9a7a23d6
address _pair
bool value
setFeeReceivers 0xd7c01032
address _autoLiquidityReceiver
address _operationsFeeReceiver
address _treasuryFeeReceiver
setFees 0xadd5df66
uint256 _buyLiquidityFee
uint256 _buyReflectionFee
uint256 _buyOperationsFee
uint256 _buyTreasuryFee
uint256 _sellLiquidityFee
uint256 _sellReflectionFee
uint256 _sellOperationsFee
uint256 _sellTreasuryFee
uint256 _feeDenominator
setFree 0x26c081fc
address holder
bool exempt
setIsDisabledExempt 0xaf06795a
address holder
bool exempt
setIsDividendExempt 0xf708a64f
address holder
bool exempt
setIsFeeExempt 0x658d4b7f
address holder
bool exempt
setIsFeeOnTransferEnabled 0x379fad9a
bool status
setMaxWallet 0x5d0044ca
uint256 amount
setMinAmountToTriggerSwap 0x15d61a82
uint256 amount
setSwapBackSettings 0xdf20fd49
bool _enabled
uint256 _amount
sweep 0x35faa416
No parameters
toggleTrading 0x26560be7
bool _enabled
toggleVault 0x3b10e540
bool _enabled
transfer 0xa9059cbb
address recipient
uint256 amount
returns: bool
transferForeignToken 0x8366e79a
address _token
address _to
transferFrom 0x23b872dd
address sender
address recipient
uint256 amount
returns: bool
transferOwnership 0xf2fde38b
address adr

Recent Transactions

No transactions found for this address