102 txs
1.7k calls
constructor
constructor(string _name, string _symbol, address _curator)
functions
allowance
viewfunction allowance(address owner, address spender) view returns (uint256)
balanceOf
viewfunction balanceOf(address account) view returns (uint256)
checkCurator
viewfunction checkCurator(address account) view returns (bool)
checkCuratorOrGuardian
viewfunction checkCuratorOrGuardian(address account) view returns (bool)
checkGuardian
viewfunction checkGuardian(address account) view returns (bool)
checkModule
viewfunction checkModule(address account) view returns (bool)
checkValidModule
viewfunction checkValidModule(address account) view returns (bool)
curator
viewfunction curator() view returns (address)
decimals
viewfunction decimals() view returns (uint8)
DOMAIN_SEPARATOR
viewfunction DOMAIN_SEPARATOR() view returns (bytes32)
eip712Domain
viewfunction eip712Domain() view returns (bytes1 fields, string name, string version, uint256 chainId, address verifyingContract, bytes32 salt, uint256[] extensions)
guardian
viewfunction guardian() view returns (address)
modules
viewfunction modules(address module) view returns (uint256)
name
viewfunction name() view returns (string)
nonces
viewfunction nonces(address owner) view returns (uint256)
pendingCurator
viewfunction pendingCurator() view returns (address value, uint64 validAt)
pendingGuardian
viewfunction pendingGuardian() view returns (address value, uint64 validAt)
pendingModules
viewfunction pendingModules(address module) view returns (uint192 value, uint64 validAt)
pendingTimelock
viewfunction pendingTimelock() view returns (uint192 value, uint64 validAt)
pendingUnfreeze
viewfunction pendingUnfreeze(address account) view returns (uint192 value, uint64 validAt)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
symbol
viewfunction symbol() view returns (string)
timelock
viewfunction timelock() view returns (uint256)
totalSupply
viewfunction totalSupply() view returns (uint256)
unfreeze
viewfunction unfreeze(address account) view returns (uint256)
verifyCurator
viewfunction verifyCurator(address account) view
verifyCuratorOrGuardian
viewfunction verifyCuratorOrGuardian(address account) view
verifyGuardian
viewfunction verifyGuardian(address account) view
verifyModule
viewfunction verifyModule(address account) view
verifyValidModule
viewfunction verifyValidModule(address account) view
acceptCurator
nonpayablefunction acceptCurator()
acceptGuardian
nonpayablefunction acceptGuardian()
acceptModule
nonpayablefunction acceptModule(address module)
acceptTimelock
nonpayablefunction acceptTimelock()
acceptUnfreeze
nonpayablefunction acceptUnfreeze(address account)
approve
nonpayablefunction approve(address spender, uint256 value) returns (bool)
approveAndCall
nonpayablefunction approveAndCall(address spender, uint256 value, bytes data) returns (bool)
approveAndCall
nonpayablefunction approveAndCall(address spender, uint256 value) returns (bool)
burn
nonpayablefunction burn(uint256 amount)
burnModule
nonpayablefunction burnModule(address from, uint256 amount)
mintModule
nonpayablefunction mintModule(address to, uint256 value)
permit
nonpayablefunction permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s)
revokePendingCurator
nonpayablefunction revokePendingCurator()
revokePendingGuardian
nonpayablefunction revokePendingGuardian()
revokePendingModule
nonpayablefunction revokePendingModule(address module, string message)
revokePendingTimelock
nonpayablefunction revokePendingTimelock()
revokePendingUnfreeze
nonpayablefunction revokePendingUnfreeze(address account, string message)
setCurator
nonpayablefunction setCurator(address newCurator)
setCuratorPublic
nonpayablefunction setCuratorPublic(address newCurator, uint256 fee)
setFreeze
nonpayablefunction setFreeze(address account, string message)
setGuardian
nonpayablefunction setGuardian(address newGuardian)
setModule
nonpayablefunction setModule(address module, uint256 expiredAt, string message)
setModulePublic
nonpayablefunction setModulePublic(address module, uint256 expiredAt, string message, uint256 fee)
setTimelock
nonpayablefunction setTimelock(uint256 newTimelock)
setUnfreeze
nonpayablefunction setUnfreeze(address account, string message)
transfer
nonpayablefunction transfer(address to, uint256 value) returns (bool)
transferAndCall
nonpayablefunction transferAndCall(address to, uint256 value, bytes data) returns (bool)
transferAndCall
nonpayablefunction transferAndCall(address to, uint256 value) returns (bool)
transferFrom
nonpayablefunction transferFrom(address from, address to, uint256 value) returns (bool)
transferFromAndCall
nonpayablefunction transferFromAndCall(address from, address to, uint256 value, bytes data) returns (bool)
transferFromAndCall
nonpayablefunction transferFromAndCall(address from, address to, uint256 value) returns (bool)
events
Approval
event Approval(address indexed owner, address indexed spender, uint256 value)
EIP712DomainChanged
event EIP712DomainChanged()
RevokePendingCurator
event RevokePendingCurator(address indexed caller, address indexed pendingGuardian)
RevokePendingGuardian
event RevokePendingGuardian(address indexed caller, address indexed pendingGuardian)
RevokePendingModule
event RevokePendingModule(address indexed caller, address indexed module, string message)
RevokePendingTimelock
event RevokePendingTimelock(address indexed caller, uint256 pendingTimelock)
RevokeUnfreeze
event RevokeUnfreeze(address indexed caller, address indexed account, string message)
SetCurator
event SetCurator(address indexed caller, address indexed guardian)
SetFreeze
event SetFreeze(address indexed caller, address indexed account, string message)
SetGuardian
event SetGuardian(address indexed caller, address indexed guardian)
SetModule
event SetModule(address indexed caller, address indexed newModule)
SetTimelock
event SetTimelock(address indexed caller, uint256 newTimelock)
SetUnfreeze
event SetUnfreeze(address indexed caller, address indexed account)
SubmitCurator
event SubmitCurator(address indexed caller, address indexed newCurator, uint256 timelock)
SubmitGuardian
event SubmitGuardian(address indexed caller, address indexed newGuardian, uint256 timelock)
SubmitModule
event SubmitModule(address indexed caller, address indexed newModule, uint256 expiredAt, string message, uint256 timelock)
SubmitTimelock
event SubmitTimelock(address indexed caller, uint256 newTimelock, uint256 timelock)
SubmitUnfreeze
event SubmitUnfreeze(address indexed caller, address indexed account, string message, uint256 timelock)
Transfer
event Transfer(address indexed from, address indexed to, uint256 value)
errors
AboveMaxTimelock
error AboveMaxTimelock()
AccountFreezed
error AccountFreezed(address account, uint256 since)
AlreadyPending
error AlreadyPending()
AlreadySet
error AlreadySet()
BelowMinTimelock
error BelowMinTimelock()
ECDSAInvalidSignature
error ECDSAInvalidSignature()
ECDSAInvalidSignatureLength
error ECDSAInvalidSignatureLength(uint256 length)
ECDSAInvalidSignatureS
error ECDSAInvalidSignatureS(bytes32 s)
ERC1363ApproveFailed
error ERC1363ApproveFailed(address spender, uint256 value)
ERC1363InvalidReceiver
error ERC1363InvalidReceiver(address receiver)
ERC1363InvalidSpender
error ERC1363InvalidSpender(address spender)
ERC1363TransferFailed
error ERC1363TransferFailed(address receiver, uint256 value)
ERC1363TransferFromFailed
error ERC1363TransferFromFailed(address sender, address receiver, uint256 value)
ERC20InsufficientAllowance
error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed)
ERC20InsufficientBalance
error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed)
ERC20InvalidApprover
error ERC20InvalidApprover(address approver)
ERC20InvalidReceiver
error ERC20InvalidReceiver(address receiver)
ERC20InvalidSender
error ERC20InvalidSender(address sender)
ERC20InvalidSpender
error ERC20InvalidSpender(address spender)
ERC2612ExpiredSignature
error ERC2612ExpiredSignature(uint256 deadline)
ERC2612InvalidSigner
error ERC2612InvalidSigner(address signer, address owner)
InvalidAccountNonce
error InvalidAccountNonce(address account, uint256 currentNonce)
InvalidShortString
error InvalidShortString()
NoPendingValue
error NoPendingValue()
NotCuratorNorGuardianRole
error NotCuratorNorGuardianRole(address account)
NotCuratorRole
error NotCuratorRole(address account)
NotGuardianRole
error NotGuardianRole(address account)
NotModuleRole
error NotModuleRole(address account)
NotValidModuleRole
error NotValidModuleRole(address account)
ProposalFeeToLow
error ProposalFeeToLow(uint256 minimum)
StringTooLong
error StringTooLong(string str)
TimelockNotElapsed
error TimelockNotElapsed()
creation bytecode
0x6101606040523480156200001257600080fd5b5060405162003656380380620036568339810160408190526200003591620002a6565b6040805180820190915260018152603160f81b60208201528390819081856003620000618382620003c2565b506004620000708282620003c2565b50620000829150839050600562000154565b610120526200009381600662000154565b61014052815160208084019190912060e052815190820120610100524660a0526200012160e05161010051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60805250503060c05250600880546001600160a01b0319166001600160a01b039290921691909117905550620004e89050565b600060208351101562000174576200016c836200018d565b905062000187565b81620001818482620003c2565b5060ff90505b92915050565b600080829050601f81511115620001c4578260405163305a27a960e01b8152600401620001bb91906200048e565b60405180910390fd5b8051620001d182620004c3565b179392505050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200020c578181015183820152602001620001f2565b50506000910152565b600082601f8301126200022757600080fd5b81516001600160401b0380821115620002445762000244620001d9565b604051601f8301601f19908116603f011681019082821181831017156200026f576200026f620001d9565b816040528381528660208588010111156200028957600080fd5b6200029c846020830160208901620001ef565b9695505050505050565b600080600060608486031215620002bc57600080fd5b83516001600160401b0380821115620002d457600080fd5b620002e28783880162000215565b94506020860151915080821115620002f957600080fd5b50620003088682870162000215565b604086015190935090506001600160a01b03811681146200032857600080fd5b809150509250925092565b600181811c908216806200034857607f821691505b6020821081036200036957634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bd57600081815260208120601f850160051c81016020861015620003985750805b601f850160051c820191505b81811015620003b957828155600101620003a4565b5050505b505050565b81516001600160401b03811115620003de57620003de620001d9565b620003f681620003ef845462000333565b846200036f565b602080601f8311600181146200042e5760008415620004155750858301515b600019600386901b1c1916600185901b178555620003b9565b600085815260208120601f198616915b828110156200045f578886015182559484019460019091019084016200043e565b50858210156200047e5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6020815260008251806020840152620004af816040850160208701620001ef565b601f01601f19169190910160400192915050565b80516020808301519190811015620003695760001960209190910360031b1b16919050565b60805160a05160c05160e0516101005161012051610140516131136200054360003960006122bb0152600061228e0152600061201c01526000611ff401526000611f4f01526000611f7901526000611fa301526131136000f3fe608060405234801561001057600080fd5b50600436106103af5760003560e01c80638595cda3116101f4578063c9649aa91161011a578063e1487a8c116100ad578063f78afb891161007c578063f78afb89146108eb578063f995a9c7146108fe578063fc01515614610939578063fe76544e1461094c57600080fd5b8063e1487a8c1461089f578063e559e2b2146108b2578063e66f53b7146108c5578063e90956cf146108d857600080fd5b8063d505accf116100e9578063d505accf14610853578063d6900a5414610866578063d8fbe99414610879578063dd62ed3e1461088c57600080fd5b8063c9649aa91461080d578063cae9ca5114610815578063d33219b414610828578063d46932a91461083157600080fd5b8063a2c3a5d511610192578063a9059cbb11610161578063a9059cbb14610799578063abeeaa46146107ac578063b28fb5c0146107bf578063c1d34b89146107fa57600080fd5b8063a2c3a5d51461073c578063a428b3621461074f578063a5f31d6114610771578063a8ee49fe1461077957600080fd5b80638a32a01c116101ce5780638a32a01c146106f45780639009e7dd146106fc57806395d89b41146107215780639fe3d2451461072957600080fd5b80638595cda3146106d15780638a0dac4a146106d95780638a2c7b39146106ec57600080fd5b806337f1244e116102d95780634fa01dff11610277578063762c31ba11610246578063762c31ba1461060b5780637cc4d9a1146106575780637ecebe00146106a357806384b0196e146106b657600080fd5b80634fa01dff146105a95780635ab1998a146105bc5780636d2cb539146105cf57806370a08231146105e257600080fd5b806340958ca8116102b357806340958ca81461053857806342966c681461054b578063452a93201461055e57806345c8b1a61461058957600080fd5b806337f1244e146104ff5780633e6cdb2d146105125780634000aea01461052557600080fd5b80631ecca77c116103515780633177029f116103205780633177029f1461048e57806331eec027146104a15780633644e515146104cc57806336620c0a146104d457600080fd5b80631ecca77c1461045157806323b872dd1461045957806330d88e1d1461046c578063313ce5671461047f57600080fd5b8063095ea7b31161038d578063095ea7b3146104065780631296ee621461041957806318160ddd1461042c5780631e891c0a1461043e57600080fd5b806301ffc9a7146103b457806303e6d0bb146103dc57806306fdde03146103f1575b600080fd5b6103c76103c2366004612a1c565b61095f565b60405190151581526020015b60405180910390f35b6103ef6103ea366004612a9d565b6109c0565b005b6103f9610a7a565b6040516103d39190612b35565b6103c7610414366004612b48565b610b0c565b6103c7610427366004612b48565b610b24565b6002545b6040519081526020016103d3565b6103ef61044c366004612b72565b610b47565b6103ef610c15565b6103c7610467366004612b8b565b610c9d565b6103ef61047a366004612bc7565b610cc1565b604051601281526020016103d3565b6103c761049c366004612b48565b610d0b565b6103c76104af366004612bc7565b6001600160a01b03166000908152600e6020526040902054421090565b610430610d27565b6103c76104e2366004612bc7565b6001600160a01b03166000908152600e6020526040902054151590565b6103ef61050d366004612b48565b610d36565b6103ef610520366004612bc7565b610d4d565b6103c7610533366004612c84565b610d89565b6103ef610546366004612bc7565b610dd1565b6103ef610559366004612b72565b610e69565b600a54610571906001600160a01b031681565b6040516001600160a01b0390911681526020016103d3565b610430610597366004612bc7565b60106020526000908152604090205481565b6103ef6105b7366004612b48565b610e73565b6103ef6105ca366004612bc7565b610e86565b6103c76105dd366004612bc7565b610f4e565b6104306105f0366004612bc7565b6001600160a01b031660009081526020819052604090205490565b600b54610630906001600160a01b03811690600160a01b90046001600160401b031682565b604080516001600160a01b0390931683526001600160401b039091166020830152016103d3565b600d5461067c906001600160c01b03811690600160c01b90046001600160401b031682565b604080516001600160c01b0390931683526001600160401b039091166020830152016103d3565b6104306106b1366004612bc7565b610f7d565b6106be610f9b565b6040516103d39796959493929190612cda565b6103ef610fe1565b6103ef6106e7366004612bc7565b611069565b6103ef61114d565b6103ef6111b8565b600954610630906001600160a01b03811690600160a01b90046001600160401b031682565b6103f96112aa565b6103ef610737366004612d70565b6112b9565b6103ef61074a366004612dc9565b6113db565b6103c761075d366004612bc7565b600a546001600160a01b0391821691161490565b6103ef61153c565b610430610787366004612bc7565b600e6020526000908152604090205481565b6103c76107a7366004612b48565b6115a7565b6103ef6107ba366004612a9d565b6115b5565b61067c6107cd366004612bc7565b6011602052600090815260409020546001600160c01b03811690600160c01b90046001600160401b031682565b6103c7610808366004612e2a565b61166f565b6103ef6116c0565b6103c7610823366004612c84565b611745565b610430600c5481565b6103c761083f366004612bc7565b6008546001600160a01b0391821691161490565b6103ef610861366004612e91565b61178c565b6103ef610874366004612bc7565b6118c6565b6103c7610887366004612b8b565b6118fc565b61043061089a366004612f04565b611921565b6103ef6108ad366004612bc7565b611965565b6103ef6108c0366004612a9d565b6119a0565b600854610571906001600160a01b031681565b6103ef6108e6366004612bc7565b611abd565b6103ef6108f9366004612a9d565b611b7d565b61067c61090c366004612bc7565b600f602052600090815260409020546001600160c01b03811690600160c01b90046001600160401b031682565b6103ef610947366004612bc7565b611c13565b6103ef61095a366004612b48565b611c58565b60006001600160e01b031982166336372b0760e01b148061099057506001600160e01b03198216634ec7fbed60e11b145b806109ab57506001600160e01b03198216630cbf5c3f60e01b145b806109ba57506109ba82611d68565b92915050565b6109c9336118c6565b6001600160a01b0383166000908152600f6020526040812054600160c01b90046001600160401b03169003610a115760405163e5f408a560e01b815260040160405180910390fd5b6001600160a01b038316336001600160a01b03167f2999b4c328195b243f3b1dc8f84974b9d8d755b3f669ff14547f3d32009f7dfe8484604051610a56929190612f60565b60405180910390a350506001600160a01b03166000908152600f6020526040812055565b606060038054610a8990612f74565b80601f0160208091040260200160405190810160405280929190818152602001828054610ab590612f74565b8015610b025780601f10610ad757610100808354040283529160200191610b02565b820191906000526020600020905b815481529060010190602001808311610ae557829003601f168201915b5050505050905090565b600033610b1a818585611d9d565b5060019392505050565b6000610b40838360405180602001604052806000815250610d89565b9392505050565b610b5033611965565b80600c5403610b725760405163a741a04560e01b815260040160405180910390fd5b600d54600160c01b90046001600160401b031615610ba3576040516324d9026760e11b815260040160405180910390fd5b610bac81611daf565b600c54811115610bc257610bbf81611df7565b50565b600c54610bd390600d908390611e39565b600c5460408051838152602081019290925233917ffaae553643b1cc1b16a69bcde63599765e400c7bfd9fdbfa2722f95ec804555b910160405180910390a250565b610c1e336118c6565b600b54600160a01b90046001600160401b0316600003610c515760405163e5f408a560e01b815260040160405180910390fd5b600b546040516001600160a01b039091169033907ff02b50461b903ffa43cd199e46b064c6716ab2649fc693f571289ac90ba401af90600090a3600b80546001600160e01b0319169055565b600033610cab858285611e83565b610cb6858585611ee3565b506001949350505050565b6001600160a01b0381166000908152600e602052604081205415159003610bbf5760405163599bb75760e01b81526001600160a01b03821660048201526024015b60405180910390fd5b6000610b40838360405180602001604052806000815250611745565b6000610d31611f42565b905090565b610d3f33611c13565b610d49828261206d565b5050565b600a546001600160a01b03828116911614600003610bbf5760405163d5b9033160e01b81526001600160a01b0382166004820152602401610d02565b6000610d9584846115a7565b610dc45760405163118d81d760e11b81526001600160a01b038516600482015260248101849052604401610d02565b610b1a33338686866120a3565b6001600160a01b0381166000908152600f6020526040812054600160c01b90046001600160401b031690819003610e1b5760405163e5f408a560e01b815260040160405180910390fd5b80421015610e3c5760405163333bd2cb60e11b815260040160405180910390fd5b6001600160a01b0382166000908152600f6020526040902054610d499083906001600160c01b03166121f4565b610bbf3382612251565b610e7c33610cc1565b610d498282612251565b6001600160a01b038116600090815260116020526040812054600160c01b90046001600160401b031690819003610ed05760405163e5f408a560e01b815260040160405180910390fd5b80421015610ef15760405163333bd2cb60e11b815260040160405180910390fd5b6001600160a01b0382166000818152601060205260408082208290555133917f23b5b2a6ac166a57cb93f0cd11ce36af73cf17625a5cfc64302331cd5d47416291a3506001600160a01b0316600090815260116020526040812055565b6008546000906001600160a01b03838116911614806109ba575050600a546001600160a01b0390811691161490565b6001600160a01b0381166000908152600760205260408120546109ba565b600060608060008060006060610faf612287565b610fb76122b4565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b610fea336118c6565b600954600160a01b90046001600160401b031660000361101d5760405163e5f408a560e01b815260040160405180910390fd5b6009546040516001600160a01b039091169033907fc476f72c522b1586004b15ca38a188ddd0928c0e148be10bb0e0ecea10e7146490600090a3600980546001600160e01b0319169055565b61107233611965565b600a546001600160a01b038083169116036110a05760405163a741a04560e01b815260040160405180910390fd5b600b54600160a01b90046001600160401b0316156110d1576040516324d9026760e11b815260040160405180910390fd5b600a546001600160a01b03166110ea57610bbf816122e1565b600c546110fb90600b90839061233d565b6001600160a01b038116336001600160a01b03167fff2ff88a0db9b95fb9bae2654cae5e65324aab1c0dd7bb743f18ee8c1ecc4c70600c5460405161114291815260200190565b60405180910390a350565b600d54600160c01b90046001600160401b031660008190036111825760405163e5f408a560e01b815260040160405180910390fd5b804210156111a35760405163333bd2cb60e11b815260040160405180910390fd5b600d54610bbf906001600160c01b0316611df7565b600954600160a01b90046001600160401b031660008190036111ed5760405163e5f408a560e01b815260040160405180910390fd5b8042101561120e5760405163333bd2cb60e11b815260040160405180910390fd5b6009546001600160a01b0316331461123a5760405162a51bf960e81b8152336004820152602401610d02565b600954600880546001600160a01b0319166001600160a01b0390921691821790556112623390565b6001600160a01b03167fcc0b3569ddaeda670da96a55159fea760f507428e58b42a8511820497e56d1a060405160405180910390a350600980546001600160e01b0319169055565b606060048054610a8990612f74565b6112c233611965565b6001600160a01b0384166000908152600e60205260409020548390036112fb5760405163a741a04560e01b815260040160405180910390fd5b6001600160a01b0384166000908152600f6020526040902054600160c01b90046001600160401b031615611342576040516324d9026760e11b815260040160405180910390fd5b60025460000361135b5761135684846121f4565b6113d5565b600c546001600160a01b0385166000908152600f60205260409020611381918590611e39565b6001600160a01b038416336001600160a01b03167f80f25e2e372889419ec9dbf235a04496b7f10352cd9b13c35baf18c28473feca858585600c546040516113cc9493929190612fae565b60405180910390a35b50505050565b8069021e19e0c9bab24000008082101561140b5760405163e80852d560e01b815260048101829052602401610d02565b611422335b6008546001600160a01b031684611ee3565b6001600160a01b0387166000908152600e602052604090205486900361145b5760405163a741a04560e01b815260040160405180910390fd5b6001600160a01b0387166000908152600f6020526040902054600160c01b90046001600160401b0316156114a2576040516324d9026760e11b815260040160405180910390fd5b6114d486600c5460026114b59190612fef565b6001600160a01b038a166000908152600f602052604090209190611e39565b6001600160a01b038716336001600160a01b03167f80f25e2e372889419ec9dbf235a04496b7f10352cd9b13c35baf18c28473feca888888600c54600261151b9190612fef565b60405161152b9493929190612fae565b60405180910390a350505050505050565b600b54600160a01b90046001600160401b031660008190036115715760405163e5f408a560e01b815260040160405180910390fd5b804210156115925760405163333bd2cb60e11b815260040160405180910390fd5b600b54610bbf906001600160a01b03166122e1565b600033610b1a818585611ee3565b6115be336118c6565b6001600160a01b038316600090815260116020526040812054600160c01b90046001600160401b031690036116065760405163e5f408a560e01b815260040160405180910390fd5b6001600160a01b038316336001600160a01b03167f74b6ffc86387acb63b9ae91a320007b6bdc6b9e2f15c06ce31b0e7bbc58e4d30848460405161164b929190612f60565b60405180910390a350506001600160a01b0316600090815260116020526040812055565b600061167c858585610c9d565b6116b357604051635ab42af360e11b81526001600160a01b0380871660048301528516602482015260448101849052606401610d02565b610cb633868686866120a3565b6116c9336118c6565b600d54600160c01b90046001600160401b03166000036116fc5760405163e5f408a560e01b815260040160405180910390fd5b600d54604080516001600160c01b0390921682525133917f345ed53c9fde8891cfdb148a5ea7b68a808b553625377a8495a84bf996b9225e919081900360200190a26000600d55565b60006117518484610b0c565b61178057604051631439557160e21b81526001600160a01b038516600482015260248101849052604401610d02565b610b1a3385858561238c565b834211156117b05760405163313c898160e11b815260048101859052602401610d02565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886117fd8c6001600160a01b0316600090815260076020526040902080546001810190915590565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090506000611858826124ca565b90506000611868828787876124f7565b9050896001600160a01b0316816001600160a01b0316146118af576040516325c0072360e11b81526001600160a01b0380831660048301528b166024820152604401610d02565b6118ba8a8a8a611d9d565b50505050505050505050565b6118cf81610f4e565b1515600003610bbf57604051631f75712b60e31b81526001600160a01b0382166004820152602401610d02565b60006119198484846040518060200160405280600081525061166f565b949350505050565b600061192c336104af565b1561193a57506000196109ba565b6001600160a01b03808416600090815260016020908152604080832093861683529290522054610b40565b6008546001600160a01b03828116911614600003610bbf5760405162a51bf960e81b81526001600160a01b0382166004820152602401610d02565b6119a9336118c6565b6001600160a01b03831660009081526010602052604081205490036119e15760405163a741a04560e01b815260040160405180910390fd5b6001600160a01b038316600090815260116020526040902054600160c01b90046001600160401b031615611a28576040516324d9026760e11b815260040160405180910390fd5b611a5b6000600c546002611a3c9190612fef565b6001600160a01b03861660009081526011602052604090209190611e39565b6001600160a01b038316336001600160a01b03167f2f82bf9e1b80be49cb92c8a25db963678c089ce5f000d0b55d87b62db2df5fa18484600c546002611aa19190612fef565b604051611ab093929190613006565b60405180910390a3505050565b611ac633611965565b6008546001600160a01b03808316911603611af45760405163a741a04560e01b815260040160405180910390fd5b600954600160a01b90046001600160401b031615611b25576040516324d9026760e11b815260040160405180910390fd5b600c54611b3690600990839061233d565b6001600160a01b038116336001600160a01b03167fd55faf691d527a117fe9c285cc7d8f90cb654f4a387e51ec45bd05e1765d24f6600c5460405161114291815260200190565b611b8633611965565b6001600160a01b03831660009081526010602052604090205415611bbd5760405163a741a04560e01b815260040160405180910390fd5b6001600160a01b0383166000818152601060205260409020429055336001600160a01b03167fbd7dc0cb3c28313a8945e52bfc1f76b395ba07fefd5042a44e6f0651ed376a418484604051611ab0929190612f60565b6001600160a01b0381166000908152600e602052604081205442109003610bbf576040516386042bf360e01b81526001600160a01b0382166004820152602401610d02565b80611c6e69021e19e0c9bab2400000600a612fef565b80821015611c925760405163e80852d560e01b815260048101829052602401610d02565b611c9b33611410565b6008546001600160a01b03808616911603611cc95760405163a741a04560e01b815260040160405180910390fd5b600954600160a01b90046001600160401b031615611cfa576040516324d9026760e11b815260040160405180910390fd5b611d1684600c546002611d0d9190612fef565b6009919061233d565b6001600160a01b038416336001600160a01b03167fd55faf691d527a117fe9c285cc7d8f90cb654f4a387e51ec45bd05e1765d24f6600c546002611d5a9190612fef565b6040519081526020016113cc565b60006001600160e01b0319821663b0202a1160e01b14806109ba57506301ffc9a760e01b6001600160e01b03198316146109ba565b611daa8383836001612525565b505050565b6224ea00811115611dd3576040516346fedb5760e01b815260040160405180910390fd5b62093a80811015610bbf57604051631a1593df60e11b815260040160405180910390fd5b600c81905560405181815233907fd28e9b90ee9b37c5936ff84392d71f29ff18117d7e76bcee60615262a90a3f759060200160405180910390a2506000600d55565b82546001600160c01b0319166001600160b81b038316178355611e5c814261302a565b83546001600160401b0391909116600160c01b026001600160c01b03909116179092555050565b6000611e8f8484611921565b905060001981146113d55781811015611ed457604051637dc7a0d960e11b81526001600160a01b03841660048201526024810182905260448101839052606401610d02565b6113d584848484036000612525565b6001600160a01b038316611f0d57604051634b637e8f60e11b815260006004820152602401610d02565b6001600160a01b038216611f375760405163ec442f0560e01b815260006004820152602401610d02565b611daa8383836125ec565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015611f9b57507f000000000000000000000000000000000000000000000000000000000000000046145b15611fc557507f000000000000000000000000000000000000000000000000000000000000000090565b610d31604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b6001600160a01b0382166120975760405163ec442f0560e01b815260006004820152602401610d02565b610d49600083836125ec565b826001600160a01b03163b6000036120d9576040516322a5b36760e21b81526001600160a01b0384166004820152602401610d02565b604051632229f29760e21b81526001600160a01b038416906388a7ca5c9061210b90889088908790879060040161303d565b6020604051808303816000875af1925050508015612146575060408051601f3d908101601f191682019092526121439181019061307a565b60015b6121af573d808015612174576040519150601f19603f3d011682016040523d82523d6000602084013e612179565b606091505b5080516000036121a7576040516322a5b36760e21b81526001600160a01b0385166004820152602401610d02565b805181602001fd5b6001600160e01b03198116632229f29760e21b146121eb576040516322a5b36760e21b81526001600160a01b0385166004820152602401610d02565b505b5050505050565b6001600160a01b0382166000818152600e60205260408082208490555133917f970e69884fc7a611c49fbc464f324ccf6be60b3c21d527a09f3e78cab095222991a3506001600160a01b03166000908152600f6020526040812055565b6001600160a01b03821661227b57604051634b637e8f60e11b815260006004820152602401610d02565b610d49826000836125ec565b6060610d317f0000000000000000000000000000000000000000000000000000000000000000600561264f565b6060610d317f0000000000000000000000000000000000000000000000000000000000000000600661264f565b600a80546001600160a01b0319166001600160a01b03831690811790915560405133907fcb11cc8aade2f5a556749d1b2380d108a16fac3431e6a5d5ce12ef9de0bd76e390600090a350600b80546001600160e01b0319169055565b82546001600160a01b0319166001600160a01b038316178355612360814261302a565b83546001600160401b0391909116600160a01b0267ffffffffffffffff60a01b19909116179092555050565b826001600160a01b03163b6000036123c25760405163deb6d3ed60e01b81526001600160a01b0384166004820152602401610d02565b6040516307b04a2d60e41b81526001600160a01b03841690637b04a2d0906123f290879086908690600401613097565b6020604051808303816000875af192505050801561242d575060408051601f3d908101601f1916820190925261242a9181019061307a565b60015b61248e573d80801561245b576040519150601f19603f3d011682016040523d82523d6000602084013e612460565b606091505b5080516000036121a75760405163deb6d3ed60e01b81526001600160a01b0385166004820152602401610d02565b6001600160e01b031981166307b04a2d60e41b146121ed5760405163deb6d3ed60e01b81526001600160a01b0385166004820152602401610d02565b60006109ba6124d7611f42565b8360405161190160f01b8152600281019290925260228201526042902090565b600080600080612509888888886126fa565b92509250925061251982826127c9565b50909695505050505050565b6001600160a01b03841661254f5760405163e602df0560e01b815260006004820152602401610d02565b6001600160a01b03831661257957604051634a1406b160e11b815260006004820152602401610d02565b6001600160a01b03808516600090815260016020908152604080832093871683529290522082905580156113d557826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516113cc91815260200190565b6001600160a01b03831660009081526010602052604090205480158015906126145750428111155b156126445760405163b1825fd560e01b81526001600160a01b038516600482015260248101829052604401610d02565b6113d5848484612882565b606060ff8314612669576126628361299f565b90506109ba565b81805461267590612f74565b80601f01602080910402602001604051908101604052809291908181526020018280546126a190612f74565b80156126ee5780601f106126c3576101008083540402835291602001916126ee565b820191906000526020600020905b8154815290600101906020018083116126d157829003601f168201915b505050505090506109ba565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561273557506000915060039050826127bf565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015612789573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166127b5575060009250600191508290506127bf565b9250600091508190505b9450945094915050565b60008260038111156127dd576127dd6130c7565b036127e6575050565b60018260038111156127fa576127fa6130c7565b036128185760405163f645eedf60e01b815260040160405180910390fd5b600282600381111561282c5761282c6130c7565b0361284d5760405163fce698f760e01b815260048101829052602401610d02565b6003826003811115612861576128616130c7565b03610d49576040516335e2f38360e21b815260048101829052602401610d02565b6001600160a01b0383166128ad5780600260008282546128a2919061302a565b9091555061291f9050565b6001600160a01b038316600090815260208190526040902054818110156129005760405163391434e360e21b81526001600160a01b03851660048201526024810182905260448101839052606401610d02565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b03821661293b5760028054829003905561295a565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611ab091815260200190565b606060006129ac836129de565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b600060ff8216601f8111156109ba57604051632cd44ac360e21b815260040160405180910390fd5b6001600160e01b031981168114610bbf57600080fd5b600060208284031215612a2e57600080fd5b8135610b4081612a06565b80356001600160a01b0381168114612a5057600080fd5b919050565b60008083601f840112612a6757600080fd5b5081356001600160401b03811115612a7e57600080fd5b602083019150836020828501011115612a9657600080fd5b9250929050565b600080600060408486031215612ab257600080fd5b612abb84612a39565b925060208401356001600160401b03811115612ad657600080fd5b612ae286828701612a55565b9497909650939450505050565b6000815180845260005b81811015612b1557602081850181015186830182015201612af9565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000610b406020830184612aef565b60008060408385031215612b5b57600080fd5b612b6483612a39565b946020939093013593505050565b600060208284031215612b8457600080fd5b5035919050565b600080600060608486031215612ba057600080fd5b612ba984612a39565b9250612bb760208501612a39565b9150604084013590509250925092565b600060208284031215612bd957600080fd5b610b4082612a39565b634e487b7160e01b600052604160045260246000fd5b600082601f830112612c0957600080fd5b81356001600160401b0380821115612c2357612c23612be2565b604051601f8301601f19908116603f01168101908282118183101715612c4b57612c4b612be2565b81604052838152866020858801011115612c6457600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600060608486031215612c9957600080fd5b612ca284612a39565b92506020840135915060408401356001600160401b03811115612cc457600080fd5b612cd086828701612bf8565b9150509250925092565b60ff60f81b881681526000602060e081840152612cfa60e084018a612aef565b8381036040850152612d0c818a612aef565b606085018990526001600160a01b038816608086015260a0850187905284810360c0860152855180825283870192509083019060005b81811015612d5e57835183529284019291840191600101612d42565b50909c9b505050505050505050505050565b60008060008060608587031215612d8657600080fd5b612d8f85612a39565b93506020850135925060408501356001600160401b03811115612db157600080fd5b612dbd87828801612a55565b95989497509550505050565b600080600080600060808688031215612de157600080fd5b612dea86612a39565b94506020860135935060408601356001600160401b03811115612e0c57600080fd5b612e1888828901612a55565b96999598509660600135949350505050565b60008060008060808587031215612e4057600080fd5b612e4985612a39565b9350612e5760208601612a39565b92506040850135915060608501356001600160401b03811115612e7957600080fd5b612e8587828801612bf8565b91505092959194509250565b600080600080600080600060e0888a031215612eac57600080fd5b612eb588612a39565b9650612ec360208901612a39565b95506040880135945060608801359350608088013560ff81168114612ee757600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215612f1757600080fd5b612f2083612a39565b9150612f2e60208401612a39565b90509250929050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b602081526000611919602083018486612f37565b600181811c90821680612f8857607f821691505b602082108103612fa857634e487b7160e01b600052602260045260246000fd5b50919050565b848152606060208201526000612fc8606083018587612f37565b905082604083015295945050505050565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176109ba576109ba612fd9565b60408152600061301a604083018587612f37565b9050826020830152949350505050565b808201808211156109ba576109ba612fd9565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061307090830184612aef565b9695505050505050565b60006020828403121561308c57600080fd5b8151610b4081612a06565b60018060a01b03841681528260208201526060604082015260006130be6060830184612aef565b95945050505050565b634e487b7160e01b600052602160045260246000fdfea26469706673582212202eb21d5232edd53634b3cf2de5e789acd5594d12c26fa8545dd9549f3182045864736f6c63430008140033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000745211a1e1a58b2b11b932855b30d411c31e25d50000000000000000000000000000000000000000000000000000000000000004555344550000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045553445500000000000000000000000000000000000000000000000000000000