Address Contract Partially Verified
Address
0x48D753bFc1874bbC4b45CF8d8704332E2aa2b80E
Balance
0 ETH
Nonce
1
Code Size
23519 bytes
Creator
0xe1Dd70CD...aB8f at tx 0x03ae1637...5ab998
Indexed Transactions
Index loading...
Contract Bytecode
23519 bytes
0x6080604052600436106102cd5760003560e01c80638366e79a11610175578063b8eb3546116100dc578063e2f4560511610095578063f5648a4f1161006f578063f5648a4f14610b05578063f637434214610b1c578063f8b45b0514610b47578063fb002c9714610b72576102d4565b8063e2f4560514610a86578063f11a24d314610ab1578063f2fde38b14610adc576102d4565b8063b8eb354614610976578063bbc0c742146109a1578063c0246668146109cc578063c17b5b8c146109f5578063d85ba06314610a1e578063dd62ed3e14610a49576102d4565b80639fccce321161012e5780639fccce3214610840578063a0d82dc51461086b578063a457c2d714610896578063a9059cbb146108d3578063a9d3cd8a14610910578063b62496f514610939576102d4565b80638366e79a146107305780638da5cb5b1461076d578063906e9dd0146107985780639164f9db146107c157806395d89b41146107ea5780639c3b4fdc14610815576102d4565b806339509351116102345780636a486a8e116101ed57806370a08231116101c757806370a082311461068857806370db69d6146106c5578063715018a6146106f05780638095d56414610707576102d4565b80636a486a8e146106095780636ddd171314610634578063707789c51461065f576102d4565b806339509351146104f9578063452ed4f11461053657806346f1f5de146105615780634f77f6c01461058a57806358881304146105b55780635a139dd4146105de576102d4565b80631a8145bb116102865780631a8145bb146103fd5780631c499ab0146104285780631e146da81461045157806323b872dd14610468578063249ec2bb146104a5578063313ce567146104ce576102d4565b8063053f9040146102d957806306fdde03146103025780630758d9241461032d578063095ea7b31461035857806310d5de531461039557806318160ddd146103d2576102d4565b366102d457005b600080fd5b3480156102e557600080fd5b5061030060048036038101906102fb9190614253565b610b9d565b005b34801561030e57600080fd5b50610317610ecd565b6040516103249190614319565b60405180910390f35b34801561033957600080fd5b50610342610f5f565b60405161034f91906143ba565b60405180910390f35b34801561036457600080fd5b5061037f600480360381019061037a9190614413565b610f85565b60405161038c919061446e565b60405180910390f35b3480156103a157600080fd5b506103bc60048036038101906103b79190614489565b610fa3565b6040516103c9919061446e565b60405180910390f35b3480156103de57600080fd5b506103e7610fc3565b6040516103f491906144c5565b60405180910390f35b34801561040957600080fd5b50610412610fcd565b60405161041f91906144c5565b60405180910390f35b34801561043457600080fd5b5061044f600480360381019061044a9190614253565b610fd3565b005b34801561045d57600080fd5b50610466611136565b005b34801561047457600080fd5b5061048f600480360381019061048a91906144e0565b611281565b60405161049c919061446e565b60405180910390f35b3480156104b157600080fd5b506104cc60048036038101906104c7919061455f565b611379565b005b3480156104da57600080fd5b506104e3611501565b6040516104f091906145bb565b60405180910390f35b34801561050557600080fd5b50610520600480360381019061051b9190614413565b61150a565b60405161052d919061446e565b60405180910390f35b34801561054257600080fd5b5061054b6115b6565b60405161055891906145e5565b60405180910390f35b34801561056d57600080fd5b5061058860048036038101906105839190614253565b6115dc565b005b34801561059657600080fd5b5061059f611744565b6040516105ac91906144c5565b60405180910390f35b3480156105c157600080fd5b506105dc60048036038101906105d79190614253565b61174a565b005b3480156105ea57600080fd5b506105f36118ad565b60405161060091906144c5565b60405180910390f35b34801561061557600080fd5b5061061e6118b3565b60405161062b91906144c5565b60405180910390f35b34801561064057600080fd5b506106496118b9565b604051610656919061446e565b60405180910390f35b34801561066b57600080fd5b5061068660048036038101906106819190614489565b6118cc565b005b34801561069457600080fd5b506106af60048036038101906106aa9190614489565b611a16565b6040516106bc91906144c5565b60405180910390f35b3480156106d157600080fd5b506106da611a5e565b6040516106e791906144c5565b60405180910390f35b3480156106fc57600080fd5b50610705611a64565b005b34801561071357600080fd5b5061072e60048036038101906107299190614600565b611bbc565b005b34801561073c57600080fd5b5061075760048036038101906107529190614653565b611cd6565b604051610764919061446e565b60405180910390f35b34801561077957600080fd5b50610782611f8a565b60405161078f91906145e5565b60405180910390f35b3480156107a457600080fd5b506107bf60048036038101906107ba9190614489565b611fb4565b005b3480156107cd57600080fd5b506107e860048036038101906107e39190614253565b6120fe565b005b3480156107f657600080fd5b506107ff612261565b60405161080c9190614319565b60405180910390f35b34801561082157600080fd5b5061082a6122f3565b60405161083791906144c5565b60405180910390f35b34801561084c57600080fd5b506108556122f9565b60405161086291906144c5565b60405180910390f35b34801561087757600080fd5b506108806122ff565b60405161088d91906144c5565b60405180910390f35b3480156108a257600080fd5b506108bd60048036038101906108b89190614413565b612305565b6040516108ca919061446e565b60405180910390f35b3480156108df57600080fd5b506108fa60048036038101906108f59190614413565b6123f0565b604051610907919061446e565b60405180910390f35b34801561091c57600080fd5b506109376004803603810190610932919061455f565b61240e565b005b34801561094557600080fd5b50610960600480360381019061095b9190614489565b612589565b60405161096d919061446e565b60405180910390f35b34801561098257600080fd5b5061098b6125a9565b60405161099891906144c5565b60405180910390f35b3480156109ad57600080fd5b506109b66125af565b6040516109c3919061446e565b60405180910390f35b3480156109d857600080fd5b506109f360048036038101906109ee919061455f565b6125c2565b005b348015610a0157600080fd5b50610a1c6004803603810190610a179190614600565b612702565b005b348015610a2a57600080fd5b50610a3361281c565b604051610a4091906144c5565b60405180910390f35b348015610a5557600080fd5b50610a706004803603810190610a6b9190614653565b612822565b604051610a7d91906144c5565b60405180910390f35b348015610a9257600080fd5b50610a9b6128a9565b604051610aa891906144c5565b60405180910390f35b348015610abd57600080fd5b50610ac66128af565b604051610ad391906144c5565b60405180910390f35b348015610ae857600080fd5b50610b036004803603810190610afe9190614489565b6128b5565b005b348015610b1157600080fd5b50610b1a612a7b565b005b348015610b2857600080fd5b50610b31612b83565b604051610b3e91906144c5565b60405180910390f35b348015610b5357600080fd5b50610b5c612b89565b604051610b6991906144c5565b60405180910390f35b348015610b7e57600080fd5b50610b87612b8f565b604051610b9491906144c5565b60405180910390f35b610ba5612b95565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2b906146df565b60405180910390fd5b678ac7230489e80000811115610c7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7690614797565b60405180910390fd5b6000600267ffffffffffffffff811115610c9c57610c9b6147b7565b5b604051908082528060200260200182016040528015610cca5781602001602082028036833780820191505090505b509050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5e91906147fb565b81600081518110610d7257610d71614828565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250503081600181518110610dc157610dc0614828565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de958360008461dead426040518663ffffffff1660e01b8152600401610e609493929190614950565b6000604051808303818588803b158015610e7957600080fd5b505af1158015610e8d573d6000803e3d6000fd5b50505050507fa017c1567cfcdd2d750a8c01e39fe2a846bcebc293c7d078477014d68482056882604051610ec191906144c5565b60405180910390a15050565b606060038054610edc906149cb565b80601f0160208091040260200160405190810160405280929190818152602001828054610f08906149cb565b8015610f555780601f10610f2a57610100808354040283529160200191610f55565b820191906000526020600020905b815481529060010190602001808311610f3857829003601f168201915b5050505050905090565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610f99610f92612b95565b8484612b9d565b6001905092915050565b601a6020528060005260406000206000915054906101000a900460ff1681565b6000600254905090565b60175481565b610fdb612b95565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461106a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611061906146df565b60405180910390fd5b670de0b6b3a76400006103e86003611080610fc3565b61108a9190614a2b565b6110949190614ab4565b61109e9190614ab4565b8110156110e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d790614b57565b60405180910390fd5b670de0b6b3a7640000816110f49190614a2b565b6008819055507fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc60085460405161112b91906144c5565b60405180910390a150565b61113e612b95565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c4906146df565b60405180910390fd5b600d60149054906101000a900460ff161561121d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121490614bc3565b60405180910390fd5b6001600d60146101000a81548160ff0219169083151502179055506001600d60156101000a81548160ff0219169083151502179055507fba61a96074b3d636edeee92caddc86293c917d5b6818b7d3698bb52e02ec86c860405160405180910390a1565b600061128e848484612d66565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006112d9612b95565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611359576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135090614c55565b60405180910390fd5b61136d85611365612b95565b858403612b9d565b60019150509392505050565b611381612b95565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611410576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611407906146df565b60405180910390fd5b806114a657600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036114a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149c90614ce7565b60405180910390fd5b5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006012905090565b60006115ac611517612b95565b848460016000611525612b95565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546115a79190614d07565b612b9d565b6001905092915050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6115e4612b95565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611673576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166a906146df565b60405180910390fd5b620186a06001611681610fc3565b61168b9190614a2b565b6116959190614ab4565b8110156116d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ce90614dcf565b60405180910390fd5b6103e860016116e4610fc3565b6116ee9190614a2b565b6116f89190614ab4565b81111561173a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173190614e61565b60405180910390fd5b80600b8190555050565b60135481565b611752612b95565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d8906146df565b60405180910390fd5b670de0b6b3a76400006103e860026117f7610fc3565b6118019190614a2b565b61180b9190614ab4565b6118159190614ab4565b811015611857576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184e90614ef3565b60405180910390fd5b670de0b6b3a76400008161186b9190614a2b565b6006819055507ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de410096006546040516118a291906144c5565b60405180910390a150565b600f5481565b60125481565b600d60159054906101000a900460ff1681565b6118d4612b95565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611963576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195a906146df565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036119d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c990614f85565b60405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60065481565b611a6c612b95565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611afb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af2906146df565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611bc4612b95565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4a906146df565b60405180910390fd5b82600f819055508160108190555080601181905550601154601054600f54611c7b9190614d07565b611c859190614d07565b600e819055506014600e541115611cd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc890614ff1565b60405180910390fd5b505050565b6000611ce0612b95565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d66906146df565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611dde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd59061505d565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611e4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e43906150c9565b60405180910390fd5b60008373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611e8791906145e5565b602060405180830381865afa158015611ea4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ec891906150fe565b90508373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84836040518363ffffffff1660e01b8152600401611f0592919061512b565b6020604051808303816000875af1158015611f24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f489190615169565b91507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e4388482604051611f7b92919061512b565b60405180910390a15092915050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611fbc612b95565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461204b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612042906146df565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036120ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b190615208565b60405180910390fd5b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612106612b95565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612195576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218c906146df565b60405180910390fd5b670de0b6b3a76400006103e860026121ab610fc3565b6121b59190614a2b565b6121bf9190614ab4565b6121c99190614ab4565b81101561220b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122029061529a565b60405180910390fd5b670de0b6b3a76400008161221f9190614a2b565b6007819055507f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e60075460405161225691906144c5565b60405180910390a150565b606060048054612270906149cb565b80601f016020809104026020016040519081016040528092919081815260200182805461229c906149cb565b80156122e95780601f106122be576101008083540402835291602001916122e9565b820191906000526020600020905b8154815290600101906020018083116122cc57829003601f168201915b5050505050905090565b60115481565b60185481565b60155481565b60008060016000612314612b95565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156123d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123c89061532c565b60405180910390fd5b6123e56123dc612b95565b85858403612b9d565b600191505092915050565b60006124046123fd612b95565b8484612d66565b6001905092915050565b612416612b95565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249c906146df565b60405180910390fd5b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252c90615398565b60405180910390fd5b61253f82826138b0565b8015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b601b6020528060005260406000206000915054906101000a900460ff1681565b60075481565b600d60149054906101000a900460ff1681565b6125ca612b95565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612659576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612650906146df565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516126f6919061446e565b60405180910390a25050565b61270a612b95565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612799576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612790906146df565b60405180910390fd5b8260138190555081601481905550806015819055506015546014546013546127c19190614d07565b6127cb9190614d07565b60128190555060196012541115612817576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280e90615404565b60405180910390fd5b505050565b600e5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600b5481565b60105481565b6128bd612b95565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461294c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612943906146df565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036129bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129b290615496565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612a83612b95565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612b12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b09906146df565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff1647604051612b38906154e7565b60006040518083038185875af1925050503d8060008114612b75576040519150601f19603f3d011682016040523d82523d6000602084013e612b7a565b606091505b50508091505050565b60145481565b60085481565b60165481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612c0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c039061556e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612c7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c7290615600565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612d5991906144c5565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612dd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dcc90615692565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612e44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e3b90615724565b60405180910390fd5b60008111612e87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e7e90615790565b60405180910390fd5b600d60149054906101000a900460ff16612f7c57601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612f3c5750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612f7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f72906157fc565b60405180910390fd5b5b612f84611f8a565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612ff25750612fc2611f8a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561302b5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015613065575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156130bb5750601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156131115750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156133ff57601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131b95750601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561326057600654811115613203576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131fa9061588e565b60405180910390fd5b60085461320f83611a16565b8261321a9190614d07565b111561325b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613252906158fa565b60405180910390fd5b6133fe565b601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156133035750601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156133525760075481111561334d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133449061598c565b60405180910390fd5b6133fd565b601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166133fc576008546133af83611a16565b826133ba9190614d07565b11156133fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133f2906158fa565b60405180910390fd5b5b5b5b5b600061340a30611a16565b90506000600b54821015905080801561342f5750600d60159054906101000a900460ff165b80156134485750600a60149054906101000a900460ff16155b801561349e5750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156134f45750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561354a5750601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561358e576001600a60146101000a81548160ff02191690831515021790555061357261395b565b6000600a60146101000a81548160ff0219169083151502179055505b600060019050601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806136355750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561363f57600090505b6000811561389c57601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156136a257506000601254115b15613761576064601254866136b79190614a2b565b6136c19190614ab4565b9050601254601454826136d49190614a2b565b6136de9190614ab4565b601760008282546136ef9190614d07565b92505081905550601254601354826137079190614a2b565b6137119190614ab4565b601660008282546137229190614d07565b925050819055506012546015548261373a9190614a2b565b6137449190614ab4565b601860008282546137559190614d07565b92505081905550613878565b601b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156137bc57506000600e54115b15613877576064600e54866137d19190614a2b565b6137db9190614ab4565b9050600e54601054826137ee9190614a2b565b6137f89190614ab4565b601760008282546138099190614d07565b92505081905550600e54600f54826138219190614a2b565b61382b9190614ab4565b6016600082825461383c9190614d07565b92505081905550600e54601154826138549190614a2b565b61385e9190614ab4565b6018600082825461386f9190614d07565b925050819055505b5b600081111561388d5761388c873083613bf8565b5b808561389991906159ac565b94505b6138a7878787613bf8565b50505050505050565b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506139118282613e61565b8015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600061396630611a16565b9050600060185460165460175461397d9190614d07565b6139879190614d07565b905060008214806139985750600081145b156139a4575050613bf6565b6014600b546139b39190614a2b565b8211156139cc576014600b546139c99190614a2b565b91505b600080600283601754866139e09190614a2b565b6139ea9190614ab4565b6139f49190614ab4565b9050613a0a8185613a0591906159ac565b613ef5565b6000479050600081905060006002601754613a259190614ab4565b86613a3091906159ac565b60165484613a3e9190614a2b565b613a489190614ab4565b905060006002601754613a5b9190614ab4565b87613a6691906159ac565b60185485613a749190614a2b565b613a7e9190614ab4565b90508082613a8c9190614d07565b83613a9791906159ac565b9250600060178190555060006016819055506000601881905550600085118015613ac15750600083115b15613ad157613ad08584614138565b5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681604051613b17906154e7565b60006040518083038185875af1925050503d8060008114613b54576040519150601f19603f3d011682016040523d82523d6000602084013e613b59565b606091505b505080965050600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613ba5906154e7565b60006040518083038185875af1925050503d8060008114613be2576040519150601f19603f3d011682016040523d82523d6000602084013e613be7565b606091505b50508096505050505050505050505b565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613c67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c5e90615692565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613cd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ccd90615724565b60405180910390fd5b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613d5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d5390615a52565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613def9190614d07565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613e5391906144c5565b60405180910390a350505050565b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd67468282604051613ee9929190615a72565b60405180910390a15050565b6000600267ffffffffffffffff811115613f1257613f116147b7565b5b604051908082528060200260200182016040528015613f405781602001602082028036833780820191505090505b5090503081600081518110613f5857613f57614828565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613fff573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061402391906147fb565b8160018151811061403757614036614828565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061409e30600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612b9d565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401614102959493929190615a9b565b600060405180830381600087803b15801561411c57600080fd5b505af1158015614130573d6000803e3d6000fd5b505050505050565b61416530600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612b9d565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b81526004016141ce96959493929190615af5565b60606040518083038185885af11580156141ec573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906142119190615b56565b5050505050565b600080fd5b6000819050919050565b6142308161421d565b811461423b57600080fd5b50565b60008135905061424d81614227565b92915050565b60006020828403121561426957614268614218565b5b60006142778482850161423e565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156142ba57808201518184015260208101905061429f565b838111156142c9576000848401525b50505050565b6000601f19601f8301169050919050565b60006142eb82614280565b6142f5818561428b565b935061430581856020860161429c565b61430e816142cf565b840191505092915050565b6000602082019050818103600083015261433381846142e0565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061438061437b6143768461433b565b61435b565b61433b565b9050919050565b600061439282614365565b9050919050565b60006143a482614387565b9050919050565b6143b481614399565b82525050565b60006020820190506143cf60008301846143ab565b92915050565b60006143e08261433b565b9050919050565b6143f0816143d5565b81146143fb57600080fd5b50565b60008135905061440d816143e7565b92915050565b6000806040838503121561442a57614429614218565b5b6000614438858286016143fe565b92505060206144498582860161423e565b9150509250929050565b60008115159050919050565b61446881614453565b82525050565b6000602082019050614483600083018461445f565b92915050565b60006020828403121561449f5761449e614218565b5b60006144ad848285016143fe565b91505092915050565b6144bf8161421d565b82525050565b60006020820190506144da60008301846144b6565b92915050565b6000806000606084860312156144f9576144f8614218565b5b6000614507868287016143fe565b9350506020614518868287016143fe565b92505060406145298682870161423e565b9150509250925092565b61453c81614453565b811461454757600080fd5b50565b60008135905061455981614533565b92915050565b6000806040838503121561457657614575614218565b5b6000614584858286016143fe565b92505060206145958582860161454a565b9150509250929050565b600060ff82169050919050565b6145b58161459f565b82525050565b60006020820190506145d060008301846145ac565b92915050565b6145df816143d5565b82525050565b60006020820190506145fa60008301846145d6565b92915050565b60008060006060848603121561461957614618614218565b5b60006146278682870161423e565b93505060206146388682870161423e565b92505060406146498682870161423e565b9150509250925092565b6000806040838503121561466a57614669614218565b5b6000614678858286016143fe565b9250506020614689858286016143fe565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006146c960208361428b565b91506146d482614693565b602082019050919050565b600060208201905081810360008301526146f8816146bc565b9050919050565b7f4d6179206e6f7420627579206d6f7265207468616e2031302045544820696e2060008201527f612073696e676c652062757920746f207265647563652073616e64776963682060208201527f61747461636b7300000000000000000000000000000000000000000000000000604082015250565b600061478160478361428b565b915061478c826146ff565b606082019050919050565b600060208201905081810360008301526147b081614774565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000815190506147f5816143e7565b92915050565b60006020828403121561481157614810614218565b5b600061481f848285016147e6565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b600061487c61487761487284614857565b61435b565b61421d565b9050919050565b61488c81614861565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6148c7816143d5565b82525050565b60006148d983836148be565b60208301905092915050565b6000602082019050919050565b60006148fd82614892565b614907818561489d565b9350614912836148ae565b8060005b8381101561494357815161492a88826148cd565b9750614935836148e5565b925050600181019050614916565b5085935050505092915050565b60006080820190506149656000830187614883565b818103602083015261497781866148f2565b905061498660408301856145d6565b61499360608301846144b6565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806149e357607f821691505b6020821081036149f6576149f561499c565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614a368261421d565b9150614a418361421d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614a7a57614a796149fc565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614abf8261421d565b9150614aca8361421d565b925082614ada57614ad9614a85565b5b828204905092915050565b7f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760008201527f6572207468616e20302e33250000000000000000000000000000000000000000602082015250565b6000614b41602c8361428b565b9150614b4c82614ae5565b604082019050919050565b60006020820190508181036000830152614b7081614b34565b9050919050565b7f43616e6e6f74207265656e61626c652074726164696e67000000000000000000600082015250565b6000614bad60178361428b565b9150614bb882614b77565b602082019050919050565b60006020820190508181036000830152614bdc81614ba0565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000614c3f60288361428b565b9150614c4a82614be3565b604082019050919050565b60006020820190508181036000830152614c6e81614c32565b9050919050565b7f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060008201527f6d61782074786e00000000000000000000000000000000000000000000000000602082015250565b6000614cd160278361428b565b9150614cdc82614c75565b604082019050919050565b60006020820190508181036000830152614d0081614cc4565b9050919050565b6000614d128261421d565b9150614d1d8361421d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614d5257614d516149fc565b5b828201905092915050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614db960358361428b565b9150614dc482614d5d565b604082019050919050565b60006020820190508181036000830152614de881614dac565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e312520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614e4b60348361428b565b9150614e5682614def565b604082019050919050565b60006020820190508181036000830152614e7a81614e3e565b9050919050565b7f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f7765722060008201527f7468616e20302e32250000000000000000000000000000000000000000000000602082015250565b6000614edd60298361428b565b9150614ee882614e81565b604082019050919050565b60006020820190508181036000830152614f0c81614ed0565b9050919050565b7f5f6f7065726174696f6e734164647265737320616464726573732063616e6e6f60008201527f7420626520300000000000000000000000000000000000000000000000000000602082015250565b6000614f6f60268361428b565b9150614f7a82614f13565b604082019050919050565b60006020820190508181036000830152614f9e81614f62565b9050919050565b7f4d757374206b656570206665657320617420323025206f72206c657373000000600082015250565b6000614fdb601d8361428b565b9150614fe682614fa5565b602082019050919050565b6000602082019050818103600083015261500a81614fce565b9050919050565b7f5f746f6b656e20616464726573732063616e6e6f742062652030000000000000600082015250565b6000615047601a8361428b565b915061505282615011565b602082019050919050565b600060208201905081810360008301526150768161503a565b9050919050565b7f43616e2774207769746864726177206e617469766520746f6b656e7300000000600082015250565b60006150b3601c8361428b565b91506150be8261507d565b602082019050919050565b600060208201905081810360008301526150e2816150a6565b9050919050565b6000815190506150f881614227565b92915050565b60006020828403121561511457615113614218565b5b6000615122848285016150e9565b91505092915050565b600060408201905061514060008301856145d6565b61514d60208301846144b6565b9392505050565b60008151905061516381614533565b92915050565b60006020828403121561517f5761517e614218565b5b600061518d84828501615154565b91505092915050565b7f5f6d61726b6574696e674164647265737320616464726573732063616e6e6f7460008201527f2062652030000000000000000000000000000000000000000000000000000000602082015250565b60006151f260258361428b565b91506151fd82615196565b604082019050919050565b60006020820190508181036000830152615221816151e5565b9050919050565b7f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f77657260008201527f207468616e20302e322500000000000000000000000000000000000000000000602082015250565b6000615284602a8361428b565b915061528f82615228565b604082019050919050565b600060208201905081810360008301526152b381615277565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061531660258361428b565b9150615321826152ba565b604082019050919050565b6000602082019050818103600083015261534581615309565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f766564000000000000600082015250565b6000615382601a8361428b565b915061538d8261534c565b602082019050919050565b600060208201905081810360008301526153b181615375565b9050919050565b7f4d757374206b656570206665657320617420323525206f72206c657373000000600082015250565b60006153ee601d8361428b565b91506153f9826153b8565b602082019050919050565b6000602082019050818103600083015261541d816153e1565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061548060268361428b565b915061548b82615424565b604082019050919050565b600060208201905081810360008301526154af81615473565b9050919050565b600081905092915050565b50565b60006154d16000836154b6565b91506154dc826154c1565b600082019050919050565b60006154f2826154c4565b9150819050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061555860248361428b565b9150615563826154fc565b604082019050919050565b600060208201905081810360008301526155878161554b565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006155ea60228361428b565b91506155f58261558e565b604082019050919050565b60006020820190508181036000830152615619816155dd565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061567c60258361428b565b915061568782615620565b604082019050919050565b600060208201905081810360008301526156ab8161566f565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061570e60238361428b565b9150615719826156b2565b604082019050919050565b6000602082019050818103600083015261573d81615701565b9050919050565b7f616d6f756e74206d7573742062652067726561746572207468616e2030000000600082015250565b600061577a601d8361428b565b915061578582615744565b602082019050919050565b600060208201905081810360008301526157a98161576d565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006157e660168361428b565b91506157f1826157b0565b602082019050919050565b60006020820190508181036000830152615815816157d9565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d6178206275792e000000000000000000000000000000000000000000000000602082015250565b600061587860288361428b565b91506158838261581c565b604082019050919050565b600060208201905081810360008301526158a78161586b565b9050919050565b7f43616e6e6f7420457863656564206d61782077616c6c65740000000000000000600082015250565b60006158e460188361428b565b91506158ef826158ae565b602082019050919050565b60006020820190508181036000830152615913816158d7565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61782073656c6c2e00000000000000000000000000000000000000000000602082015250565b6000615976602a8361428b565b91506159818261591a565b604082019050919050565b600060208201905081810360008301526159a581615969565b9050919050565b60006159b78261421d565b91506159c28361421d565b9250828210156159d5576159d46149fc565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000615a3c60268361428b565b9150615a47826159e0565b604082019050919050565b60006020820190508181036000830152615a6b81615a2f565b9050919050565b6000604082019050615a8760008301856145d6565b615a94602083018461445f565b9392505050565b600060a082019050615ab060008301886144b6565b615abd6020830187614883565b8181036040830152615acf81866148f2565b9050615ade60608301856145d6565b615aeb60808301846144b6565b9695505050505050565b600060c082019050615b0a60008301896145d6565b615b1760208301886144b6565b615b246040830187614883565b615b316060830186614883565b615b3e60808301856145d6565b615b4b60a08301846144b6565b979650505050505050565b600080600060608486031215615b6f57615b6e614218565b5b6000615b7d868287016150e9565b9350506020615b8e868287016150e9565b9250506040615b9f868287016150e9565b915050925092509256fea2646970667358221220d4ff44ec4824c7a6c2bf3d1c817cf8ef27d738d8fda7390bfc6ff58d07723ba264736f6c634300080f0033
Verified Source Code Partial Match
Compiler: v0.8.15+commit.e14f2714
EVM: london
Optimization: No
token.sol 639 lines
/**
Website: http://token.trend.app
https://t.me/trendappofficial
Twitter : https://twitter.com/trenddotapp
**/
// SPDX-License-Identifier: MIT
pragma solidity 0.8.15;
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 IERC20 {
function totalSupply() external view returns (uint256);
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);
}
interface IERC20Metadata is IERC20 {
function name() external view returns (string memory);
function symbol() external view returns (string memory);
function decimals() external view returns (uint8);
}
contract ERC20 is Context, IERC20, IERC20Metadata {
mapping(address => uint256) private _balances;
mapping(address => mapping(address => uint256)) private _allowances;
uint256 private _totalSupply;
string private _name;
string private _symbol;
constructor(string memory name_, string memory symbol_) {
_name = name_;
_symbol = symbol_;
}
function name() public view virtual override returns (string memory) {
return _name;
}
function symbol() public view virtual override returns (string memory) {
return _symbol;
}
function decimals() public view virtual override returns (uint8) {
return 18;
}
function totalSupply() public view virtual override returns (uint256) {
return _totalSupply;
}
function balanceOf(address account) public view virtual override returns (uint256) {
return _balances[account];
}
function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
_transfer(_msgSender(), recipient, amount);
return true;
}
function allowance(address owner, address spender) public view virtual override returns (uint256) {
return _allowances[owner][spender];
}
function approve(address spender, uint256 amount) public virtual override returns (bool) {
_approve(_msgSender(), spender, amount);
return true;
}
function transferFrom(
address sender,
address recipient,
uint256 amount
) public virtual override returns (bool) {
_transfer(sender, recipient, amount);
uint256 currentAllowance = _allowances[sender][_msgSender()];
require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
unchecked {
_approve(sender, _msgSender(), currentAllowance - amount);
}
return true;
}
function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
_approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
return true;
}
function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
uint256 currentAllowance = _allowances[_msgSender()][spender];
require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
unchecked {
_approve(_msgSender(), spender, currentAllowance - subtractedValue);
}
return true;
}
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");
uint256 senderBalance = _balances[sender];
require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
unchecked {
_balances[sender] = senderBalance - amount;
}
_balances[recipient] += amount;
emit Transfer(sender, recipient, amount);
}
function _createInitialSupply(address account, uint256 amount) internal virtual {
require(account != address(0), "ERC20: mint to the zero address");
_totalSupply += amount;
_balances[account] += amount;
emit Transfer(address(0), account, amount);
}
function _burn(address account, uint256 amount) internal virtual {
require(account != address(0), "ERC20: burn from the zero address");
uint256 accountBalance = _balances[account];
require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
unchecked {
_balances[account] = accountBalance - amount;
// Overflow not possible: amount <= accountBalance <= totalSupply.
_totalSupply -= amount;
}
emit Transfer(account, address(0), amount);
}
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);
}
}
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() external 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;
}
}
interface IDexRouter {
function factory() external pure returns (address);
function WETH() external pure returns (address);
function swapExactTokensForETHSupportingFeeOnTransferTokens(
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 addLiquidityETH(
address token,
uint256 amountTokenDesired,
uint256 amountTokenMin,
uint256 amountETHMin,
address to,
uint256 deadline
)
external
payable
returns (
uint256 amountToken,
uint256 amountETH,
uint256 liquidity
);
}
interface IDexFactory {
function createPair(address tokenA, address tokenB)
external
returns (address pair);
}
contract token is ERC20, Ownable {
uint256 public maxBuy;
uint256 public maxSell;
uint256 public maxWallet;
IDexRouter public dexRouter;
address public lpPair;
bool private swapping;
uint256 public swapTokensAtAmount;
address operationsAddress;
address devAddress;
bool public tradingActive = false;
bool public swapEnabled = false;
uint256 public buyTotalFees;
uint256 public buyOperationsFee;
uint256 public buyLiquidityFee;
uint256 public buyDevFee;
uint256 public sellTotalFees;
uint256 public sellOperationsFee;
uint256 public sellLiquidityFee;
uint256 public sellDevFee;
uint256 public tokensForOperations;
uint256 public tokensForLiquidity;
uint256 public tokensForDev;
/******************/
// exlcude from fees and max transaction amount
mapping (address => bool) private _isExcludedFromFees;
mapping (address => bool) public _isExcludedMaxTransactionAmount;
// store addresses that a automatic market maker pairs. Any transfer *to* these addresses
// could be subject to a maximum transfer amount
mapping (address => bool) public automatedMarketMakerPairs;
event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
event Launched();
event ExcludeFromFees(address indexed account, bool isExcluded);
event UpdatedMaxBuyAmount(uint256 newAmount);
event UpdatedMaxSellAmount(uint256 newAmount);
event UpdatedMaxWalletAmount(uint256 newAmount);
event UpdatedOperationsAddress(address indexed newWallet);
event MaxTransactionExclusion(address _address, bool excluded);
event BuyBackTriggered(uint256 amount);
event SwapAndLiquify(
uint256 tokensSwapped,
uint256 ethReceived,
uint256 tokensIntoLiquidity
);
event TransferForeignToken(address token, uint256 amount);
constructor() ERC20("TrendApp", "TREND") {
address newOwner = msg.sender;
IDexRouter _dexRouter = IDexRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
dexRouter = _dexRouter;
// create pair
lpPair = IDexFactory(_dexRouter.factory()).createPair(address(this), _dexRouter.WETH());
_excludeFromMaxTransaction(address(lpPair), true);
_setAutomatedMarketMakerPair(address(lpPair), true);
uint256 totalSupply = 1 * 1e9 * 1e18;
maxBuy = totalSupply * 1 / 100;
maxSell = totalSupply * 1 / 100;
maxWallet = totalSupply * 1 / 100;
swapTokensAtAmount = totalSupply * 5 / 10000;
buyOperationsFee = 10;
buyLiquidityFee = 0;
buyDevFee = 0;
buyTotalFees = buyOperationsFee + buyLiquidityFee + buyDevFee;
sellOperationsFee = 25;
sellLiquidityFee = 0;
sellDevFee = 0;
sellTotalFees = sellOperationsFee + sellLiquidityFee + sellDevFee;
_excludeFromMaxTransaction(newOwner, true);
_excludeFromMaxTransaction(address(this), true);
_excludeFromMaxTransaction(address(0xdead), true);
excludeFromFees(newOwner, true);
excludeFromFees(address(this), true);
excludeFromFees(address(0xdead), true);
operationsAddress = address(newOwner);
devAddress = address(newOwner);
_createInitialSupply(newOwner, totalSupply);
transferOwnership(newOwner);
}
receive() external payable {}
// only enable if no plan to airdrop
function golive() external onlyOwner {
require(!tradingActive, "Cannot reenable trading");
tradingActive = true;
swapEnabled = true;
emit Launched();
}
function updateMaxBuy(uint256 newNum) external onlyOwner {
require(newNum >= (totalSupply() * 2 / 1000)/1e18, "Cannot set max buy amount lower than 0.2%");
maxBuy = newNum * (10**18);
emit UpdatedMaxBuyAmount(maxBuy);
}
function updateMaxSell(uint256 newNum) external onlyOwner {
require(newNum >= (totalSupply() * 2 / 1000)/1e18, "Cannot set max sell amount lower than 0.2%");
maxSell = newNum * (10**18);
emit UpdatedMaxSellAmount(maxSell);
}
function updateMaxWallet(uint256 newNum) external onlyOwner {
require(newNum >= (totalSupply() * 3 / 1000)/1e18, "Cannot set max wallet amount lower than 0.3%");
maxWallet = newNum * (10**18);
emit UpdatedMaxWalletAmount(maxWallet);
}
function updateSwapTokens(uint256 newAmount) external onlyOwner {
require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply.");
require(newAmount <= totalSupply() * 1 / 1000, "Swap amount cannot be higher than 0.1% total supply.");
swapTokensAtAmount = newAmount;
}
function _excludeFromMaxTransaction(address updAds, bool isExcluded) private {
_isExcludedMaxTransactionAmount[updAds] = isExcluded;
emit MaxTransactionExclusion(updAds, isExcluded);
}
function excludeFromMax(address updAds, bool isEx) external onlyOwner {
if(!isEx){
require(updAds != lpPair, "Cannot remove uniswap pair from max txn");
}
_isExcludedMaxTransactionAmount[updAds] = isEx;
}
function setAMM(address pair, bool value) external onlyOwner {
require(pair != lpPair, "The pair cannot be removed");
_setAutomatedMarketMakerPair(pair, value);
emit SetAutomatedMarketMakerPair(pair, value);
}
function _setAutomatedMarketMakerPair(address pair, bool value) private {
automatedMarketMakerPairs[pair] = value;
_excludeFromMaxTransaction(pair, value);
emit SetAutomatedMarketMakerPair(pair, value);
}
function updateBuyFees(uint256 _operationsFee, uint256 _liquidityFee, uint256 _DevFee) external onlyOwner {
buyOperationsFee = _operationsFee;
buyLiquidityFee = _liquidityFee;
buyDevFee = _DevFee;
buyTotalFees = buyOperationsFee + buyLiquidityFee + buyDevFee;
require(buyTotalFees <= 20, "Must keep fees at 20% or less");
}
function updateSellFees(uint256 _operationsFee, uint256 _liquidityFee, uint256 _DevFee) external onlyOwner {
sellOperationsFee = _operationsFee;
sellLiquidityFee = _liquidityFee;
sellDevFee = _DevFee;
sellTotalFees = sellOperationsFee + sellLiquidityFee + sellDevFee;
require(sellTotalFees <= 25, "Must keep fees at 25% or less");
}
function excludeFromFees(address account, bool excluded) public onlyOwner {
_isExcludedFromFees[account] = excluded;
emit ExcludeFromFees(account, excluded);
}
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(amount > 0, "amount must be greater than 0");
if(!tradingActive){
require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
}
if (from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]){
//when buy
if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
require(amount <= maxBuy, "Buy transfer amount exceeds the max buy.");
require(amount + balanceOf(to) <= maxWallet, "Cannot Exceed max wallet");
}
//when sell
else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
require(amount <= maxSell, "Sell transfer amount exceeds the max sell.");
}
else if (!_isExcludedMaxTransactionAmount[to]){
require(amount + balanceOf(to) <= maxWallet, "Cannot Exceed max wallet");
}
}
uint256 contractTokenBalance = balanceOf(address(this));
bool canSwap = contractTokenBalance >= swapTokensAtAmount;
if(canSwap && swapEnabled && !swapping && !automatedMarketMakerPairs[from] && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]) {
swapping = true;
swapBack();
swapping = false;
}
bool takeFee = true;
// 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){
if (automatedMarketMakerPairs[to] && sellTotalFees > 0){
fees = amount * sellTotalFees / 100;
tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
tokensForOperations += fees * sellOperationsFee / sellTotalFees;
tokensForDev += fees * sellDevFee / sellTotalFees;
}
// on buy
else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
fees = amount * buyTotalFees / 100;
tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
tokensForOperations += fees * buyOperationsFee / buyTotalFees;
tokensForDev += fees * buyDevFee / buyTotalFees;
}
if(fees > 0){
super._transfer(from, address(this), fees);
}
amount -= fees;
}
super._transfer(from, to, amount);
}
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] = dexRouter.WETH();
_approve(address(this), address(dexRouter), tokenAmount);
// make the swap
dexRouter.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(dexRouter), tokenAmount);
// add the liquidity
dexRouter.addLiquidityETH{value: ethAmount}(
address(this),
tokenAmount,
0, // slippage is unavoidable
0, // slippage is unavoidable
address(0xdead),
block.timestamp
);
}
function swapBack() private {
uint256 contractBalance = balanceOf(address(this));
uint256 totalTokensToSwap = tokensForLiquidity + tokensForOperations + tokensForDev;
if(contractBalance == 0 || totalTokensToSwap == 0) {return;}
if(contractBalance > swapTokensAtAmount * 20){
contractBalance = swapTokensAtAmount * 20;
}
bool success;
// Halve the amount of liquidity tokens
uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2;
swapTokensForEth(contractBalance - liquidityTokens);
uint256 ethBalance = address(this).balance;
uint256 ethForLiquidity = ethBalance;
uint256 ethForOperations = ethBalance * tokensForOperations / (totalTokensToSwap - (tokensForLiquidity/2));
uint256 ethForDev = ethBalance * tokensForDev / (totalTokensToSwap - (tokensForLiquidity/2));
ethForLiquidity -= ethForOperations + ethForDev;
tokensForLiquidity = 0;
tokensForOperations = 0;
tokensForDev = 0;
if(liquidityTokens > 0 && ethForLiquidity > 0){
addLiquidity(liquidityTokens, ethForLiquidity);
}
(success,) = address(devAddress).call{value: ethForDev}("");
(success,) = address(operationsAddress).call{value: address(this).balance}("");
}
function transferForeignToken(address _token, address _to) external onlyOwner returns (bool _sent) {
require(_token != address(0), "_token address cannot be 0");
require(_token != address(this), "Can't withdraw native tokens");
uint256 _contractBalance = IERC20(_token).balanceOf(address(this));
_sent = IERC20(_token).transfer(_to, _contractBalance);
emit TransferForeignToken(_token, _contractBalance);
}
function withdrawStuckETH() external onlyOwner {
bool success;
(success,) = address(msg.sender).call{value: address(this).balance}("");
}
function setOpsAddress(address _operationsAddress) external onlyOwner {
require(_operationsAddress != address(0), "_operationsAddress address cannot be 0");
operationsAddress = payable(_operationsAddress);
}
function setMarketingAddress(address _devAddress) external onlyOwner {
require(_devAddress != address(0), "_marketingAddress address cannot be 0");
devAddress = payable(_devAddress);
}
// useful for buybacks or to reclaim any ETH on the contract in a way that helps holders.
function buyBack(uint256 amountInWei) external onlyOwner {
require(amountInWei <= 10 ether, "May not buy more than 10 ETH in a single buy to reduce sandwich attacks");
address[] memory path = new address[](2);
path[0] = dexRouter.WETH();
path[1] = address(this);
// make the swap
dexRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amountInWei}(
0, // accept any amount of Ethereum
path,
address(0xdead),
block.timestamp
);
emit BuyBackTriggered(amountInWei);
}
}
Read Contract
_isExcludedMaxTransactionAmount 0x10d5de53 → bool
allowance 0xdd62ed3e → uint256
automatedMarketMakerPairs 0xb62496f5 → bool
balanceOf 0x70a08231 → uint256
buyDevFee 0x9c3b4fdc → uint256
buyLiquidityFee 0xf11a24d3 → uint256
buyOperationsFee 0x5a139dd4 → uint256
buyTotalFees 0xd85ba063 → uint256
decimals 0x313ce567 → uint8
dexRouter 0x0758d924 → address
lpPair 0x452ed4f1 → address
maxBuy 0x70db69d6 → uint256
maxSell 0xb8eb3546 → uint256
maxWallet 0xf8b45b05 → uint256
name 0x06fdde03 → string
owner 0x8da5cb5b → address
sellDevFee 0xa0d82dc5 → uint256
sellLiquidityFee 0xf6374342 → uint256
sellOperationsFee 0x4f77f6c0 → uint256
sellTotalFees 0x6a486a8e → uint256
swapEnabled 0x6ddd1713 → bool
swapTokensAtAmount 0xe2f45605 → uint256
symbol 0x95d89b41 → string
tokensForDev 0x9fccce32 → uint256
tokensForLiquidity 0x1a8145bb → uint256
tokensForOperations 0xfb002c97 → uint256
totalSupply 0x18160ddd → uint256
tradingActive 0xbbc0c742 → bool
Write Contract 22 functions
These functions modify contract state and require a wallet transaction to execute.
approve 0x095ea7b3
address spender
uint256 amount
returns: bool
buyBack 0x053f9040
uint256 amountInWei
decreaseAllowance 0xa457c2d7
address spender
uint256 subtractedValue
returns: bool
excludeFromFees 0xc0246668
address account
bool excluded
excludeFromMax 0x249ec2bb
address updAds
bool isEx
golive 0x1e146da8
No parameters
increaseAllowance 0x39509351
address spender
uint256 addedValue
returns: bool
renounceOwnership 0x715018a6
No parameters
setAMM 0xa9d3cd8a
address pair
bool value
setMarketingAddress 0x906e9dd0
address _devAddress
setOpsAddress 0x707789c5
address _operationsAddress
transfer 0xa9059cbb
address recipient
uint256 amount
returns: bool
transferForeignToken 0x8366e79a
address _token
address _to
returns: bool
transferFrom 0x23b872dd
address sender
address recipient
uint256 amount
returns: bool
transferOwnership 0xf2fde38b
address newOwner
updateBuyFees 0x8095d564
uint256 _operationsFee
uint256 _liquidityFee
uint256 _DevFee
updateMaxBuy 0x58881304
uint256 newNum
updateMaxSell 0x9164f9db
uint256 newNum
updateMaxWallet 0x1c499ab0
uint256 newNum
updateSellFees 0xc17b5b8c
uint256 _operationsFee
uint256 _liquidityFee
uint256 _DevFee
updateSwapTokens 0x46f1f5de
uint256 newAmount
withdrawStuckETH 0xf5648a4f
No parameters
Recent Transactions
Transaction index is loading. Only unfinalized transactions are shown while the index starts up.