0 txs
0 calls
constructor
constructor(address registrar_, address voter_, address rewardsDistributor_)
functions
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
FACTORY_MANAGER_ROLE
viewfunction FACTORY_MANAGER_ROLE() view returns (bytes32)
getMinimumFunds
viewfunction getMinimumFunds(bytes1 operations, uint256 poolLength) view returns (uint96)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
getUserAutomations
viewfunction getUserAutomations(address user) view returns (address[])
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
isAutomation
viewfunction isAutomation(address) view returns (bool)
registrar
viewfunction registrar() view returns (address)
rewardsDistributor
viewfunction rewardsDistributor() view returns (address)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
tokenIdToAutomation
viewfunction tokenIdToAutomation(uint256) view returns (address)
voter
viewfunction voter() view returns (address)
createAutomation
nonpayablefunction createAutomation(uint256 tokenId, uint256 startTimestamp, bytes1 operations, address[] pools, uint256[] weights) returns (address automation)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
renounceRole
nonpayablefunction renounceRole(bytes32 role, address callerConfirmation)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
setChainlinkRegistrar
nonpayablefunction setChainlinkRegistrar(address registrar_)
setRewardsDistributor
nonpayablefunction setRewardsDistributor(address rewardsDistributor_)
setVoter
nonpayablefunction setVoter(address voter_)
events
CreateAutomation
event CreateAutomation(address indexed user, uint256 indexed tokenId, address indexed automation, bytes1 operations, uint256 startTimestamp, address[] pools, uint256[] weights)
RegistrarUpdated
event RegistrarUpdated(address registrar)
RewardsDistributorUpdated
event RewardsDistributorUpdated(address rewardsDistributor)
RoleAdminChanged
event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole)
RoleGranted
event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender)
RoleRevoked
event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender)
VoterUpdated
event VoterUpdated(address voter)
errors
AccessControlBadConfirmation
error AccessControlBadConfirmation()
AccessControlUnauthorizedAccount
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole)
AutomationExist
error AutomationExist()
DiffLength
error DiffLength()
NoOperations
error NoOperations()
NotOwnerNorApproved
error NotOwnerNorApproved()
PastTime
error PastTime()
ZeroAddress
error ZeroAddress()
ZeroPoolLength
error ZeroPoolLength()
creation bytecode
0x60806040523480156200001157600080fd5b5060405162004fcb38038062004fcb833981016040819052620000349162000154565b600180546001600160a01b038086166001600160a01b0319928316179092556002805485841690831617905560038054928416929091169190911790556200007e60003362000088565b505050506200019e565b6000828152602081815260408083206001600160a01b038516845290915281205460ff166200012d576000838152602081815260408083206001600160a01b03861684529091529020805460ff19166001179055620000e43390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600162000131565b5060005b92915050565b80516001600160a01b03811681146200014f57600080fd5b919050565b6000806000606084860312156200016a57600080fd5b620001758462000137565b9250620001856020850162000137565b9150620001956040850162000137565b90509250925092565b614e1d80620001ae6000396000f3fe60806040523480156200001157600080fd5b50600436106200016b5760003560e01c8063645acf3f11620000dd578063c5e6115a116200008b578063d09581bf116200006e578063d09581bf1462000387578063d1f5c33b14620003b3578063d547741f14620003ca57600080fd5b8063c5e6115a146200033b578063cf175ddb146200037057600080fd5b806391d1485411620000c057806391d1485414620002d25780639c47e361146200030c578063a217fddf146200033257600080fd5b8063645acf3f14620002935780637929098414620002aa57600080fd5b80632f2ff15d116200013b5780633f2a5540116200011e5780633f2a5540146200025457806346c96aac14620002685780634bc2a657146200027c57600080fd5b80632f2ff15d146200022457806336568abe146200023d57600080fd5b8062504957146200017057806301ffc9a714620001ab578063248a9ca314620001c25780632b20e39714620001f7575b600080fd5b620001966200018136600462000ee3565b60056020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b62000196620001bc36600462000f0a565b620003e1565b620001e8620001d336600462000f36565b60009081526020819052604090206001015490565b604051908152602001620001a2565b6001546200020b906001600160a01b031681565b6040516001600160a01b039091168152602001620001a2565b6200023b6200023536600462000f50565b62000419565b005b6200023b6200024e36600462000f50565b62000448565b6003546200020b906001600160a01b031681565b6002546200020b906001600160a01b031681565b6200023b6200028d36600462000ee3565b62000483565b6200023b620002a436600462000ee3565b6200052d565b620001e87f9b2f137bc88b700af79ecf553ccb8185253aaa5c3a036210590647de1f4528b981565b62000196620002e336600462000f50565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b620003236200031d36600462000ee3565b620005d0565b604051620001a2919062000f83565b620001e8600081565b620003526200034c36600462001008565b62000794565b6040516bffffffffffffffffffffffff9091168152602001620001a2565b6200020b6200038136600462001084565b620008d9565b6200020b6200039836600462000f36565b6004602052600090815260409020546001600160a01b031681565b6200023b620003c436600462000ee3565b62000bb9565b6200023b620003db36600462000f50565b62000c5c565b60006001600160e01b03198216637965db0b60e01b14806200041357506301ffc9a760e01b6001600160e01b03198316145b92915050565b600082815260208190526040902060010154620004368162000c85565b62000442838362000c94565b50505050565b6001600160a01b0381163314620004725760405163334bd91960e11b815260040160405180910390fd5b6200047e828262000d42565b505050565b7f9b2f137bc88b700af79ecf553ccb8185253aaa5c3a036210590647de1f4528b9620004af8162000c85565b6001600160a01b038216620004d75760405163d92e233d60e01b815260040160405180910390fd5b600280546001600160a01b0319166001600160a01b0384169081179091556040519081527f452a1bea58b8e4d443d5b0865906cc360f45aae2ee5103ee1cadec26965bc073906020015b60405180910390a15050565b7f9b2f137bc88b700af79ecf553ccb8185253aaa5c3a036210590647de1f4528b9620005598162000c85565b6001600160a01b038216620005815760405163d92e233d60e01b815260040160405180910390fd5b600180546001600160a01b0319166001600160a01b0384169081179091556040519081527fe696533f02cb3abcaaf5e85cd893de5abf147a82fd1496ddd3e5219da0a664379060200162000521565b6040516370a0823160e01b81526001600160a01b038216600482015260609060009073fbbf371c9b0b994eebfcc977cef603f7f31c070d906370a0823190602401602060405180830381865afa1580156200062f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000655919062001121565b905060008167ffffffffffffffff8111156200067557620006756200113b565b6040519080825280602002602001820160405280156200069f578160200160208202803683370190505b50905060005b828110156200078c57604051632f745c5960e01b81526001600160a01b03861660048201526024810182905260009073fbbf371c9b0b994eebfcc977cef603f7f31c070d90632f745c5990604401602060405180830381865afa15801562000711573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000737919062001121565b60008181526004602052604090205484519192506001600160a01b0316908490849081106200076a576200076a62001151565b6001600160a01b039092166020928302919091019091015250600101620006a5565b509392505050565b6000600160fa1b831615801590620007aa575081155b15620007c95760405163502e0c8160e11b815260040160405180910390fd5b6000620007d7848462000dc7565b90506000600160009054906101000a90046001600160a01b03166001600160a01b031663c3f909d46040518163ffffffff1660e01b81526004016040805180830381865afa1580156200082e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000854919062001167565b506040516316daa9c760e21b81526000600482015263ffffffff841660248201529091506001600160a01b03821690635b6aa71c90604401602060405180830381865afa158015620008aa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008d0919062001198565b95945050505050565b60405163430c208160e01b81523360048201526024810188905260009073fbbf371c9b0b994eebfcc977cef603f7f31c070d9063430c208190604401602060405180830381865afa15801562000933573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620009599190620011c8565b620009775760405163096dcfe360e31b815260040160405180910390fd5b506000878152600460205260409020546001600160a01b0316801562000a2057806001600160a01b031663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa158015620009d6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620009fc9190620011ec565b60ff1660031462000a205760405163fee42c9160e01b815260040160405180910390fd5b600160fa1b86161580159062000a34575083155b1562000a535760405163502e0c8160e11b815260040160405180910390fd5b83821462000a745760405163b9f2e73960e01b815260040160405180910390fd5b7fff00000000000000000000000000000000000000000000000000000000000000861660000362000ab857604051631216510560e31b815260040160405180910390fd5b4287101562000ada576040516321282cc360e21b815260040160405180910390fd5b8787878787878760405162000aef9062000ebf565b62000b019796959493929190620012aa565b604051809103906000f08015801562000b1e573d6000803e3d6000fd5b50600089815260046020908152604080832080546001600160a01b0319166001600160a01b038616908117909155808452600590925291829020805460ff19166001179055905191925090899033907f145a34339f13c420a47291c4902cd3a05e2ec340bdf99714f6add3eb4d3dceae9062000ba6908b908d908c908c908c908c90620012fb565b60405180910390a4979650505050505050565b7f9b2f137bc88b700af79ecf553ccb8185253aaa5c3a036210590647de1f4528b962000be58162000c85565b6001600160a01b03821662000c0d5760405163d92e233d60e01b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0384169081179091556040519081527f1cc0d0fcd88df90cde5f20b27b655722f28afe56a6384c3c7a339ec18564c4399060200162000521565b60008281526020819052604090206001015462000c798162000c85565b62000442838362000d42565b62000c91813362000e63565b50565b6000828152602081815260408083206001600160a01b038516845290915281205460ff1662000d39576000838152602081815260408083206001600160a01b03861684529091529020805460ff1916600117905562000cf03390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600162000413565b50600062000413565b6000828152602081815260408083206001600160a01b038516845290915281205460ff161562000d39576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600162000413565b600080600160f81b84161562000de95762000de66206ddd0826200135b565b90505b600160f91b84161562000e085762000e0562027100826200135b565b90505b600160fa1b84161562000e425762000e24836201fbd062001382565b62000e3390620271006200135b565b62000e3f90826200135b565b90505b62000e4f600a82620013ad565b62000e5b90826200135b565b949350505050565b6000828152602081815260408083206001600160a01b038516845290915290205460ff1662000ebb5760405163e2517d3f60e01b81526001600160a01b03821660048201526024810183905260440160405180910390fd5b5050565b613a0880620013e083390190565b6001600160a01b038116811462000c9157600080fd5b60006020828403121562000ef657600080fd5b813562000f038162000ecd565b9392505050565b60006020828403121562000f1d57600080fd5b81356001600160e01b03198116811462000f0357600080fd5b60006020828403121562000f4957600080fd5b5035919050565b6000806040838503121562000f6457600080fd5b82359150602083013562000f788162000ecd565b809150509250929050565b6020808252825182820181905260009190848201906040850190845b8181101562000fc65783516001600160a01b03168352928401929184019160010162000f9f565b50909695505050505050565b80357fff00000000000000000000000000000000000000000000000000000000000000811681146200100357600080fd5b919050565b600080604083850312156200101c57600080fd5b620010278362000fd2565b946020939093013593505050565b60008083601f8401126200104857600080fd5b50813567ffffffffffffffff8111156200106157600080fd5b6020830191508360208260051b85010111156200107d57600080fd5b9250929050565b600080600080600080600060a0888a031215620010a057600080fd5b8735965060208801359550620010b96040890162000fd2565b9450606088013567ffffffffffffffff80821115620010d757600080fd5b620010e58b838c0162001035565b909650945060808a0135915080821115620010ff57600080fd5b506200110e8a828b0162001035565b989b979a50959850939692959293505050565b6000602082840312156200113457600080fd5b5051919050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600080604083850312156200117b57600080fd5b8251620011888162000ecd565b6020939093015192949293505050565b600060208284031215620011ab57600080fd5b81516bffffffffffffffffffffffff8116811462000f0357600080fd5b600060208284031215620011db57600080fd5b8151801515811462000f0357600080fd5b600060208284031215620011ff57600080fd5b815160ff8116811462000f0357600080fd5b8183526000602080850194508260005b8581101562001253578135620012378162000ecd565b6001600160a01b03168752958201959082019060010162001221565b509495945050505050565b81835260007f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8311156200129157600080fd5b8260051b80836020870137939093016020019392505050565b87815286602082015260ff60f81b8616604082015260a060608201526000620012d860a08301868862001211565b8281036080840152620012ed8185876200125e565b9a9950505050505050505050565b60ff60f81b871681528560208201526080604082015260006200132360808301868862001211565b8281036060840152620013388185876200125e565b9998505050505050505050565b634e487b7160e01b600052601160045260246000fd5b63ffffffff8181168382160190808211156200137b576200137b62001345565b5092915050565b63ffffffff818116838216028082169190828114620013a557620013a562001345565b505092915050565b600063ffffffff80841680620013d357634e487b7160e01b600052601260045260246000fd5b9216919091049291505056fe60c06040526311e1a3006007556008805463ffffffff1916620f42401790553480156200002b57600080fd5b5060405162003a0838038062003a088339810160408190526200004e9162000326565b60016000553360805260a08590526200006b62093a80856200044b565b6003556004805460ff191660f885901c17905581516200009390600590602085019062000181565b508051620000a9906006906020840190620001eb565b50620000bd838351620000e360201b60201c565b6008805463ffffffff191663ffffffff9290921691909117905550620004e59350505050565b600080600160f81b8416156200010557620001026206ddd08262000461565b90505b600160f91b841615620001245762000121620271008262000461565b90505b600160fa1b8416156200015e5762000140836201fbd062000488565b6200014f906202710062000461565b6200015b908262000461565b90505b6200016b600a82620004b3565b62000177908262000461565b9150505b92915050565b828054828255906000526020600020908101928215620001d9579160200282015b82811115620001d957825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190620001a2565b50620001e792915062000229565b5090565b828054828255906000526020600020908101928215620001d9579160200282015b82811115620001d95782518255916020019190600101906200020c565b5b80821115620001e757600081556001016200022a565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171562000281576200028162000240565b604052919050565b60006001600160401b03821115620002a557620002a562000240565b5060051b60200190565b600082601f830112620002c157600080fd5b81516020620002da620002d48362000289565b62000256565b8083825260208201915060208460051b870101935086841115620002fd57600080fd5b602086015b848110156200031b578051835291830191830162000302565b509695505050505050565b600080600080600060a086880312156200033f57600080fd5b855194506020808701519450604087015160ff60f81b811681146200036357600080fd5b60608801519094506001600160401b03808211156200038157600080fd5b818901915089601f8301126200039657600080fd5b8151620003a7620002d48262000289565b81815260059190911b8301840190848101908c831115620003c757600080fd5b938501935b82851015620003fe5784516001600160a01b0381168114620003ee5760008081fd5b82529385019390850190620003cc565b60808c015190975094505050808311156200041857600080fd5b50506200042888828901620002af565b9150509295509295909350565b634e487b7160e01b600052601160045260246000fd5b818103818111156200017b576200017b62000435565b63ffffffff81811683821601908082111562000481576200048162000435565b5092915050565b63ffffffff818116838216028082169190828114620004ab57620004ab62000435565b505092915050565b600063ffffffff80841680620004d957634e487b7160e01b600052601260045260246000fd5b92169190910492915050565b60805160a05161348d6200057b600039600081816102890152818161077e0152818161088101528181610af201528181610d0a015281816113730152818161159501528181611952015281816119c301528181611a9b01528181611d4801528181611ddc01528181611e7d015261221d015260008181610465015281816123950152818161249501526124f5015261348d6000f3fe608060405234801561001057600080fd5b50600436106102415760003560e01c80638456cb5911610145578063d2aa789f116100bd578063ea8a1af01161008c578063f645d4f911610071578063f645d4f9146104ec578063f7b8a51f14610504578063f909d60d1461050c57600080fd5b8063ea8a1af0146104d1578063ee19b5ba146104d957600080fd5b8063d2aa789f1461049a578063d2fa635e146104a3578063df6824cd146104b6578063e4fae4e4146104c957600080fd5b8063ac4afa3811610114578063b9998a24116100f9578063b9998a241461044d578063c45a015514610460578063cd3cdd521461048757600080fd5b8063ac4afa3814610427578063b5f163ff1461043a57600080fd5b80638456cb59146103df57806389facb20146103e75780638b33b4b2146103f1578063a9ea1f801461041757600080fd5b80633f4ba83a116101d85780636e04ff0d116101a7578063762187a61161018c578063762187a61461038a5780637b103999146103925780637e9ffc9e146103b257600080fd5b80636e04ff0d1461036057806373b379bd1461038157600080fd5b80633f4ba83a1461031f5780634585e33b1461032757806362b8d6931461033a57806368742da61461034d57600080fd5b8063200d2ed211610214578063200d2ed2146102d157806330e7c992146102eb5780633cd90518146103005780633de39c111461031657600080fd5b806306fdde031461024657806312065fe01461026457806317d70f7c1461028457806319d40b08146102b9575b600080fd5b61024e610514565b60405161025b9190612c0a565b60405180910390f35b61026c610523565b6040516001600160601b03909116815260200161025b565b6102ab7f000000000000000000000000000000000000000000000000000000000000000081565b60405190815260200161025b565b6102c16105ad565b604051901515815260200161025b565b6102d96105b8565b60405160ff909116815260200161025b565b6102fe6102f9366004612c1d565b6105d2565b005b610308610637565b60405161025b929190612c43565b6102ab60075481565b6102fe6106f4565b6102fe610335366004612cc7565b6107e2565b6102fe610348366004612d39565b6108d5565b6102fe61035b366004612d67565b610945565b61037361036e366004612cc7565b610bf5565b60405161025b929190612d84565b6102ab60035481565b6102ab603281565b61039a610c75565b6040516001600160a01b03909116815260200161025b565b6008546103ca90640100000000900463ffffffff1681565b60405163ffffffff909116815260200161025b565b6102fe610c7f565b6102ab62093a8081565b6004546103fe9060f81b81565b6040516001600160f81b0319909116815260200161025b565b6008546103ca9063ffffffff1681565b61039a610435366004612d39565b610d64565b6102ab610448366004612d39565b610d8e565b6102fe61045b366004612d67565b610daf565b61039a7f000000000000000000000000000000000000000000000000000000000000000081565b6102fe610495366004612deb565b610e4b565b6102ab60025481565b6102fe6104b1366004612d39565b610f7a565b6102ab6104c4366004612e90565b611067565b61026c6113f4565b6102fe6114c0565b6102fe6104e7366004612e90565b6115e0565b60015461039a9061010090046001600160a01b031681565b6102fe6118da565b6103ca6119a3565b606061051e6119bc565b905090565b60006002546000036105355750600090565b61053d611a0b565b6001600160a01b0316631e0104396002546040518263ffffffff1660e01b815260040161056c91815260200190565b602060405180830381865afa158015610589573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061051e9190612ec9565b600061051e30611a7d565b60015460009060ff16600381111561051e5761051e612ee6565b6105da611b22565b6105e2611b4a565b6004546005546000916105fb9160f89190911b90611b81565b90508063ffffffff168263ffffffff16101561062a576040516360ee124760e01b815260040160405180910390fd5b61063382611c0c565b5050565b606080600560068180548060200260200160405190810160405280929190818152602001828054801561069357602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610675575b50505050509150808054806020026020016040519081016040528092919081815260200182805480156106e557602002820191906000526020600020905b8154815260200190600101908083116106d1575b50505050509050915091509091565b6106fc611b22565b610704611b4a565b6001805460ff191681179055610718611a0b565b6001600160a01b0316635165f2f56002546040518263ffffffff1660e01b815260040161074791815260200190565b600060405180830381600087803b15801561076157600080fd5b505af1158015610775573d6000803e3d6000fd5b505050506002547f0000000000000000000000000000000000000000000000000000000000000000306001600160a01b03167fb5b81be9e944298e73e62c67cba040cfa86ba29f350fc5caed11ad4dcd7e30de426040516107d891815260200190565b60405180910390a4565b60015461010090046001600160a01b031633146108125760405163183d164560e21b815260040160405180910390fd5b61081a611cd4565b6108375760405163fdee5cb560e01b815260040160405180910390fd5b60008061084683850185612efc565b600454919350915060f81b61085b8382611d25565b6003805462093a808402019055604080516001600160f81b0319831681524260208201527f00000000000000000000000000000000000000000000000000000000000000009130917ffbaef28b82d3e37d66149afc0482a3514ce41cae084ab7f44f581deb6f9494fd910160405180910390a35050505050565b6108dd611b22565b428110156108fe576040516321282cc360e21b815260040160405180910390fd5b61090b62093a8082612f34565b6003556040518181527f99010f0b135ff600813261bb46eb4e2cf4baea5bfe138dd39a31980be6b9ff7b906020015b60405180910390a150565b61094d611ef4565b610955611b22565b61095d611b4a565b61096681611f1e565b6109835760405163bd6ff75b60e01b815260040160405180910390fd5b600360015460ff16600381111561099c5761099c612ee6565b146109ba576040516376f1a00360e01b815260040160405180910390fd5b60085463ffffffff64010000000090910481164390911610156109f05760405163e6b2998360e01b815260040160405180910390fd5b6109f8611a0b565b60025460405163744bfe6160e01b815260048101919091523060248201526001600160a01b03919091169063744bfe6190604401600060405180830381600087803b158015610a4657600080fd5b505af1158015610a5a573d6000803e3d6000fd5b505050506000610a68611f78565b6040516370a0823160e01b81523060048201529091506000906001600160a01b038316906370a0823190602401602060405180830381865afa158015610ab2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ad69190612f47565b9050610ae3828483611fe3565b6040516331a9108f60e11b81527f0000000000000000000000000000000000000000000000000000000000000000600482015260009073fbbf371c9b0b994eebfcc977cef603f7f31c070d90636352211e90602401602060405180830381865afa158015610b55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b799190612f60565b9050610b986001600160a01b038516826001600160601b03851661219a565b6002546040516001600160601b03841681526001600160a01b038616919033907f62aa87e2fb76c553f1e5c0c7d479446974609c79292b00f40eb58d2031a8f9f39060200160405180910390a4505050610bf26001600055565b50565b60006060816001610c04611cd4565b93508315610c475760045460f81b600160f91b1615610c2857610c2561220e565b91505b62093a8060035442610c3a9190612f34565b610c449190612f93565b90505b6040805160208101849052908101829052606001604051602081830303815290604052925050509250929050565b600061051e611a0b565b610c87611b22565b610c8f611b4a565b6001805460ff19166002179055610ca4611a0b565b6001600160a01b0316638765ecbe6002546040518263ffffffff1660e01b8152600401610cd391815260200190565b600060405180830381600087803b158015610ced57600080fd5b505af1158015610d01573d6000803e3d6000fd5b505050506002547f0000000000000000000000000000000000000000000000000000000000000000306001600160a01b03167f1439651d0395c17168f43b357300e12c8ce9474aaf0aab848dd1f807ea788be9426040516107d891815260200190565b60058181548110610d7457600080fd5b6000918252602090912001546001600160a01b0316905081565b60068181548110610d9e57600080fd5b600091825260209091200154905081565b610db7611b22565b6001600160a01b038116610dde5760405163d92e233d60e01b815260040160405180910390fd5b600180547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b038416908102919091179091556040519081527f9d90a82ec1d038d4e13317a0eb136f9c65b7ed42156fc204ec4b7c4731e739509060200161093a565b610e53611b22565b6001600160f81b03198516600003610e7e57604051631216510560e31b815260040160405180910390fd5b6004805460ff191660f887901c179055600160fa1b851615801590610ea1575082155b15610ebf5760405163bf55749760e01b815260040160405180910390fd5b828114610edf5760405163b9f2e73960e01b815260040160405180910390fd5b610eeb60058585612abe565b50610ef860068383612b35565b506000610f058685611b81565b9050600254600014610f1f57610f1a81611c0c565b610f35565b6008805463ffffffff191663ffffffff83161790555b7fd1d684891f47a9e8baa681975524beb90bc9cd66ba619de5c2e4248d4f98a9e48660056006604051610f6a93929190613027565b60405180910390a1505050505050565b610f82611b22565b610f8a611b4a565b80600003610fab57604051631f2a200560e01b815260040160405180910390fd5b60078190556000610fbb826122ec565b9050610fc5611a0b565b6001600160a01b0316638dcf0fe7600254836040518363ffffffff1660e01b8152600401610ff4929190613062565b600060405180830381600087803b15801561100e57600080fd5b505af1158015611022573d6000803e3d6000fd5b505060025460408051918252602082018690527fb1daf6a9ad2299bf65e68bf739b901d006349eb874677e4b9ce28e208bd41c27935001905060405180910390a15050565b6000611071611ef4565b611079611b22565b600060015460ff16600381111561109257611092612ee6565b146110b057604051630ea075bf60e21b815260040160405180910390fd5b6110b983611f1e565b6110d65760405163bd6ff75b60e01b815260040160405180910390fd5b60006110e36007546122ec565b905060006040518061014001604052806110fb6119bc565b815260408051602081810183526000808352818501929092523083850181905260085463ffffffff166060860152608085015260a084018290528251808201845282815260c0850152825190810190925280825260e083019190915261010082018590526001600160601b0387166101209092019190915290915061117e611f78565b905061119e6001600160a01b03871633306001600160601b038916612358565b6111a9868287611fe3565b60006111b3612391565b60405163095ea7b360e01b81526001600160a01b0380831660048301526001600160601b03891660248301529192509083169063095ea7b3906044016020604051808303816000875af115801561120e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611232919061307b565b50604051633f678e1160e01b81526001600160a01b03821690633f678e119061125f90869060040161309d565b6020604051808303816000875af115801561127e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a29190612f47565b945084156113c7576112b2611a0b565b6001600160a01b03166379ea9943866040518263ffffffff1660e01b81526004016112df91815260200190565b602060405180830381865afa1580156112fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113209190612f60565b6001805460028890556001600160a01b03929092166101000260ff19167fffffffffffffffffffffff000000000000000000000000000000000000000000909216919091178117905560405142815285907f00000000000000000000000000000000000000000000000000000000000000009030907f9ee6116ec422a4178814ec583f3f441babcd33d18c44a08885c05ea48c984c379060200160405180910390a46113e0565b6040516365bcbc0960e01b815260040160405180910390fd5b505050506113ee6001600055565b92915050565b6000806113ff611a0b565b905060025460000361148b576008546040516316daa9c760e21b81526000600482015263ffffffff90911660248201526001600160a01b03821690635b6aa71c906044015b602060405180830381865afa158015611461573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114859190612ec9565b91505090565b600254604051631aec64c960e31b815260048101919091526001600160a01b0382169063d763264890602401611444565b5090565b6114c8611b22565b6114d0611b4a565b6001805460ff191660031790556114e86032436131b2565b600860046101000a81548163ffffffff021916908363ffffffff160217905550611510611a0b565b6001600160a01b031663c80480226002546040518263ffffffff1660e01b815260040161153f91815260200190565b600060405180830381600087803b15801561155957600080fd5b505af115801561156d573d6000803e3d6000fd5b50506002546008546040805142815264010000000090920463ffffffff1660208301529193507f0000000000000000000000000000000000000000000000000000000000000000925030917f93b0a62b4fc2e4f1e6ac8dafd337d62ad0a77cf8fa92cb1fd595bc0959b8240691016107d8565b6115e8611ef4565b6115f0611b4a565b6115f982611f1e565b6116165760405163bd6ff75b60e01b815260040160405180910390fd5b806001600160601b031660000361164057604051631f2a200560e01b815260040160405180910390fd5b61165e6001600160a01b03831633306001600160601b038516612358565b6000611668611f78565b9050611675838284611fe3565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa1580156116bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116e09190612f47565b9050826001600160601b0316816001600160601b0316101561171557604051630826b34d60e01b815260040160405180910390fd5b600061171f611a0b565b60405163095ea7b360e01b81526001600160a01b0380831660048301526001600160601b03851660248301529192509084169063095ea7b3906044016020604051808303816000875af115801561177a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061179e919061307b565b5060025460405163948108f760e01b815260048101919091526001600160601b03831660248201526001600160a01b0382169063948108f790604401600060405180830381600087803b1580156117f457600080fd5b505af1158015611808573d6000803e3d6000fd5b505060405163095ea7b360e01b81526001600160a01b038481166004830152600060248301528616925063095ea7b391506044016020604051808303816000875af115801561185b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061187f919061307b565b506002546040516001600160601b03841681526001600160a01b038716919033907f4155cdc2583f36b6761ad262c97c8327cf7f9cfea1542f22a27b574d850c910a9060200160405180910390a45050506106336001600055565b6118e2611b22565b6118eb30611a7d565b6119085760405163c19f17a960e01b815260040160405180910390fd5b60045460f81b6000600160f91b8216156119275761192461220e565b90505b6119318183611d25565b426003819055604080516001600160f81b03198516815260208101929092527f00000000000000000000000000000000000000000000000000000000000000009130917fe58c95fb8dd238fcb2153cf595921db2afc53525a43cedc645966e5a850764f5910160405180910390a35050565b60045460055460009161051e9160f89190911b90611b81565b60606119e77f00000000000000000000000000000000000000000000000000000000000000006123f1565b6040516020016119f791906131c5565b604051602081830303815290604052905090565b600080611a16612391565b6001600160a01b031663c3f909d46040518163ffffffff1660e01b81526004016040805180830381865afa158015611a52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a76919061320a565b5092915050565b60405163430c208160e01b81526001600160a01b03821660048201527f0000000000000000000000000000000000000000000000000000000000000000602482015260009073fbbf371c9b0b994eebfcc977cef603f7f31c070d9063430c208190604401602060405180830381865afa158015611afe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113ee919061307b565b611b2b33611a7d565b611b485760405163096dcfe360e31b815260040160405180910390fd5b565b600060015460ff166003811115611b6357611b63612ee6565b03611b485760405163aba4733960e01b815260040160405180910390fd5b600080600160f81b841615611ba057611b9d6206ddd082613238565b90505b600160f91b841615611bbc57611bb96202710082613238565b90505b600160fa1b841615611bef57611bd5836201fbd0613255565b611be29062027100613238565b611bec9082613238565b90505b611bfa600a8261327d565b611c049082613238565b949350505050565b6008805463ffffffff191663ffffffff8316179055611c29611a0b565b600254604051635395513f60e11b8152600481019190915263ffffffff831660248201526001600160a01b03919091169063a72aa27e90604401600060405180830381600087803b158015611c7d57600080fd5b505af1158015611c91573d6000803e3d6000fd5b50506002546040805191825263ffffffff851660208301527f49119538764910f83095b939a2f565f65c3da759c9053ed691f54f9a1fd81e11935001905061093a565b6000611cdf30611a7d565b1580611d0157506001805460ff166003811115611cfe57611cfe612ee6565b14155b15611d0c5750600090565b62093a8060035442611d1e9190612f34565b1015905090565b600160f81b811615611dc757611d39612491565b60405163379607f560e01b81527f000000000000000000000000000000000000000000000000000000000000000060048201526001600160a01b03919091169063379607f5906024016020604051808303816000875af1158015611da1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dc59190612f47565b505b8115611e595760405163a4d855df60e01b81527f000000000000000000000000000000000000000000000000000000000000000060048201526024810183905273fbbf371c9b0b994eebfcc977cef603f7f31c070d9063a4d855df90604401600060405180830381600087803b158015611e4057600080fd5b505af1158015611e54573d6000803e3d6000fd5b505050505b600160fa1b81161561063357611e6d6124f1565b6001600160a01b0316637ac09bf77f0000000000000000000000000000000000000000000000000000000000000000600560066040518463ffffffff1660e01b8152600401611ebe939291906132a0565b600060405180830381600087803b158015611ed857600080fd5b505af1158015611eec573d6000803e3d6000fd5b505050505050565b600260005403611f1757604051633ee5aeb560e01b815260040160405180910390fd5b6002600055565b6000611f28611f78565b6001600160a01b0316826001600160a01b03161480611f6357506001600160a01b03821673f8a0bf9cf54bb92f17374d9e9a321e6a111a51bd145b15611f7057506001919050565b506000919050565b6000611f82611a0b565b6001600160a01b031663ca30e6036040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fbf573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061051e9190612f60565b816001600160a01b0316836001600160a01b0316146121955760405163095ea7b360e01b8152731fcc3b22955e76ca48bf025f1a6993685975bb9e60048201526001600160601b03821660248201526001600160a01b0384169063095ea7b3906044016020604051808303816000875af1158015612065573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612089919061307b565b50604051632b7f092360e01b81526001600160601b03821660048201526001600160a01b03808516602483015283166044820152731fcc3b22955e76ca48bf025f1a6993685975bb9e90632b7f092390606401600060405180830381600087803b1580156120f657600080fd5b505af115801561210a573d6000803e3d6000fd5b505060405163095ea7b360e01b8152731fcc3b22955e76ca48bf025f1a6993685975bb9e6004820152600060248201526001600160a01b038616925063095ea7b391506044016020604051808303816000875af115801561216f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612193919061307b565b505b505050565b6040516001600160a01b0383811660248301526044820183905261219591859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612551565b604051635a2d1e0760e11b81527f00000000000000000000000000000000000000000000000000000000000000006004820152600090819073fbbf371c9b0b994eebfcc977cef603f7f31c070d9063b45a3c0e906024016040805180830381865afa158015612281573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122a591906132cf565b9050600062093a8082602001516122bc91906131b2565b90506122cc6303c26700426131b2565b81116122e3576122dc4282612f34565b9250505090565b60009250505090565b6060602060006122fb826125c6565b90506123456040518060400160405280600b81526020017f6d61784761735072696365000000000000000000000000000000000000000000815250826125e790919063ffffffff16565b61234f8185612600565b51519392505050565b6040516001600160a01b0384811660248301528381166044830152606482018390526121939186918216906323b872dd906084016121c7565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632b20e3976040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fbf573d6000803e3d6000fd5b606060006123fe83612639565b600101905060008167ffffffffffffffff81111561241e5761241e6132b9565b6040519080825280601f01601f191660200182016040528015612448576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461245257509392505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633f2a55406040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fbf573d6000803e3d6000fd5b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166346c96aac6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fbf573d6000803e3d6000fd5b600080602060008451602086016000885af180612574576040513d6000823e3d81fd5b50506000513d9150811561258c578060011415612599565b6001600160a01b0384163b155b1561219357604051635274afe760e01b81526001600160a01b038516600482015260240160405180910390fd5b6125ce612b70565b80516125da908361271b565b5060006020820152919050565b6125f48260038351612792565b815161219590826128b3565b815161260d9060c26128db565b50610633828260405160200161262591815260200190565b604051602081830303815290604052612944565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310612682577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106126ae576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106126cc57662386f26fc10000830492506010015b6305f5e10083106126e4576305f5e100830492506008015b61271083106126f857612710830492506004015b6064831061270a576064830492506002015b600a83106113ee5760010192915050565b60408051808201909152606081526000602082015261273b60208361333c565b156127635761274b60208361333c565b612756906020612f34565b61276090836131b2565b91505b60208084018390526040518085526000815290818401018181101561278757600080fd5b604052509192915050565b60178167ffffffffffffffff16116127b95782516121939060e0600585901b1683176128db565b60ff8167ffffffffffffffff16116127fb5782516127e2906018611fe0600586901b16176128db565b5082516121939067ffffffffffffffff83166001612951565b61ffff8167ffffffffffffffff161161283e578251612825906019611fe0600586901b16176128db565b5082516121939067ffffffffffffffff83166002612951565b63ffffffff8167ffffffffffffffff161161288357825161286a90601a611fe0600586901b16176128db565b5082516121939067ffffffffffffffff83166004612951565b825161289a90601b611fe0600586901b16176128db565b5082516121939067ffffffffffffffff83166008612951565b6040805180820190915260608152600060208201526128d4838384516129d6565b9392505050565b60408051808201909152606081526000602082015282515160006129008260016131b2565b905084602001518210612921576129218561291c836002613350565b612aa7565b845160208382010185815350805182111561293a578181525b5093949350505050565b6125f48260028351612792565b604080518082019091526060815260006020820152835151600061297582856131b2565b90508560200151811115612992576129928661291c836002613350565b600060016129a28661010061344b565b6129ac9190612f34565b905086518281018783198251161781525080518311156129ca578281525b50959695505050505050565b60408051808201909152606081526000602082015282518211156129f957600080fd5b8351516000612a0884836131b2565b90508560200151811115612a2557612a258661291c836002613350565b855180518382016020019160009180851115612a3f578482525b505050602086015b60208610612a7f5780518252612a5e6020836131b2565b9150612a6b6020826131b2565b9050612a78602087612f34565b9550612a47565b51815160001960208890036101000a0190811690199190911617905250849150509392505050565b8151612ab3838361271b565b5061219383826128b3565b828054828255906000526020600020908101928215612b29579160200282015b82811115612b295781547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03843516178255602090920191600190910190612ade565b506114bc929150612ba5565b828054828255906000526020600020908101928215612b29579160200282015b82811115612b29578235825591602001919060010190612b55565b6040518060400160405280612b98604051806040016040528060608152602001600081525090565b8152602001600081525090565b5b808211156114bc5760008155600101612ba6565b60005b83811015612bd5578181015183820152602001612bbd565b50506000910152565b60008151808452612bf6816020860160208601612bba565b601f01601f19169290920160200192915050565b6020815260006128d46020830184612bde565b600060208284031215612c2f57600080fd5b813563ffffffff811681146128d457600080fd5b604080825283519082018190526000906020906060840190828701845b82811015612c855781516001600160a01b031684529284019290840190600101612c60565b5050508381038285015284518082528583019183019060005b81811015612cba57835183529284019291840191600101612c9e565b5090979650505050505050565b60008060208385031215612cda57600080fd5b823567ffffffffffffffff80821115612cf257600080fd5b818501915085601f830112612d0657600080fd5b813581811115612d1557600080fd5b866020828501011115612d2757600080fd5b60209290920196919550909350505050565b600060208284031215612d4b57600080fd5b5035919050565b6001600160a01b0381168114610bf257600080fd5b600060208284031215612d7957600080fd5b81356128d481612d52565b8215158152604060208201526000611c046040830184612bde565b60008083601f840112612db157600080fd5b50813567ffffffffffffffff811115612dc957600080fd5b6020830191508360208260051b8501011115612de457600080fd5b9250929050565b600080600080600060608688031215612e0357600080fd5b85356001600160f81b031981168114612e1b57600080fd5b9450602086013567ffffffffffffffff80821115612e3857600080fd5b612e4489838a01612d9f565b90965094506040880135915080821115612e5d57600080fd5b50612e6a88828901612d9f565b969995985093965092949392505050565b6001600160601b0381168114610bf257600080fd5b60008060408385031215612ea357600080fd5b8235612eae81612d52565b91506020830135612ebe81612e7b565b809150509250929050565b600060208284031215612edb57600080fd5b81516128d481612e7b565b634e487b7160e01b600052602160045260246000fd5b60008060408385031215612f0f57600080fd5b50508035926020909101359150565b634e487b7160e01b600052601160045260246000fd5b818103818111156113ee576113ee612f1e565b600060208284031215612f5957600080fd5b5051919050565b600060208284031215612f7257600080fd5b81516128d481612d52565b634e487b7160e01b600052601260045260246000fd5b600082612fa257612fa2612f7d565b500490565b600081548084526020808501945083600052602060002060005b83811015612fe65781546001600160a01b031687529582019560019182019101612fc1565b509495945050505050565b600081548084526020808501945083600052602060002060005b83811015612fe65781548752958201956001918201910161300b565b60ff60f81b841681526060602082015260006130466060830185612fa7565b82810360408401526130588185612ff1565b9695505050505050565b828152604060208201526000611c046040830184612bde565b60006020828403121561308d57600080fd5b815180151581146128d457600080fd5b60208152600082516101408060208501526130bc610160850183612bde565b91506020850151601f19808685030160408701526130da8483612bde565b9350604087015191506130f860608701836001600160a01b03169052565b606087015163ffffffff81166080880152915060808701516001600160a01b03811660a0880152915060a087015160ff811660c0880152915060c08701519150808685030160e087015261314c8483612bde565b935060e0870151915061010081878603018188015261316b8584612bde565b94508088015192505061012081878603018188015261318a8584612bde565b945080880151925050506131a8828601826001600160601b03169052565b5090949350505050565b808201808211156113ee576113ee612f1e565b7f7665544845204175746f6d6174696f6e202d20494420000000000000000000008152600082516131fd816016850160208701612bba565b9190910160160192915050565b6000806040838503121561321d57600080fd5b825161322881612d52565b6020939093015192949293505050565b63ffffffff818116838216019080821115611a7657611a76612f1e565b63ffffffff81811683821602808216919082811461327557613275612f1e565b505092915050565b600063ffffffff8084168061329457613294612f7d565b92169190910492915050565b8381526060602082015260006130466060830185612fa7565b634e487b7160e01b600052604160045260246000fd5b6000604082840312156132e157600080fd5b6040516040810181811067ffffffffffffffff8211171561331257634e487b7160e01b600052604160045260246000fd5b6040528251600f81900b811461332757600080fd5b81526020928301519281019290925250919050565b60008261334b5761334b612f7d565b500690565b80820281158282048414176113ee576113ee612f1e565b600181815b808511156133a257816000190482111561338857613388612f1e565b8085161561339557918102915b93841c939080029061336c565b509250929050565b6000826133b9575060016113ee565b816133c6575060006113ee565b81600181146133dc57600281146133e657613402565b60019150506113ee565b60ff8411156133f7576133f7612f1e565b50506001821b6113ee565b5060208310610133831016604e8410600b8410161715613425575081810a6113ee565b61342f8383613367565b806000190482111561344357613443612f1e565b029392505050565b60006128d483836133aa56fea2646970667358221220204b5c8cefd9fa122d436d667aafd67b7325d33e6273c97a482fedfb7191300764736f6c63430008160033a26469706673582212204a55594d9f8a755df6394d5ba2734a0b5b8ca63351a8db4b2fcbb6b01955ce6b64736f6c63430008160033000000000000000000000000f671f60bcc964b309d22424886ff202807381b320000000000000000000000008fbb1ecebb9e9839bc0de00b9c4c585cabdd0462000000000000000000000000a6e0e731cb1e99aede0f9c9128d04f948e18727d