0 txs
64 calls
constructor
constructor(address _bn254CertificateVerifier, address _ecdsaCertificateVerifier, address _pauserRegistry, string _version)
functions
bn254CertificateVerifier
viewfunction bn254CertificateVerifier() view returns (address)
calculateOperatorInfoLeaf
purefunction calculateOperatorInfoLeaf(tuple operatorInfo) pure returns (bytes32)
calculateOperatorTableLeaf
purefunction calculateOperatorTableLeaf(bytes operatorTableBytes) pure returns (bytes32)
ecdsaCertificateVerifier
viewfunction ecdsaCertificateVerifier() view returns (address)
GENERATOR_GLOBAL_TABLE_ROOT
viewfunction GENERATOR_GLOBAL_TABLE_ROOT() view returns (bytes32)
GENERATOR_MAX_STALENESS_PERIOD
viewfunction GENERATOR_MAX_STALENESS_PERIOD() view returns (uint32)
GENERATOR_REFERENCE_TIMESTAMP
viewfunction GENERATOR_REFERENCE_TIMESTAMP() view returns (uint32)
getCertificateVerifier
viewfunction getCertificateVerifier(uint8 curveType) view returns (address)
getCurrentGlobalTableRoot
viewfunction getCurrentGlobalTableRoot() view returns (bytes32)
getGenerator
viewfunction getGenerator() view returns (tuple)
getGeneratorConfig
viewfunction getGeneratorConfig() view returns (tuple)
getGeneratorReferenceTimestamp
viewfunction getGeneratorReferenceTimestamp() view returns (uint32)
getGlobalTableRootByTimestamp
viewfunction getGlobalTableRootByTimestamp(uint32 referenceTimestamp) view returns (bytes32)
getGlobalTableUpdateMessageHash
purefunction getGlobalTableUpdateMessageHash(bytes32 globalTableRoot, uint32 referenceTimestamp, uint32 referenceBlockNumber) pure returns (bytes32)
getGlobalTableUpdateSignableDigest
viewfunction getGlobalTableUpdateSignableDigest(bytes32 globalTableRoot, uint32 referenceTimestamp, uint32 referenceBlockNumber) view returns (bytes32)
getLatestReferenceBlockNumber
viewfunction getLatestReferenceBlockNumber() view returns (uint32)
getLatestReferenceTimestamp
viewfunction getLatestReferenceTimestamp() view returns (uint32)
getReferenceBlockNumberByTimestamp
viewfunction getReferenceBlockNumberByTimestamp(uint32 referenceTimestamp) view returns (uint32)
getReferenceTimestampByBlockNumber
viewfunction getReferenceTimestampByBlockNumber(uint32 referenceBlockNumber) view returns (uint32)
GLOBAL_TABLE_ROOT_CERT_TYPEHASH
viewfunction GLOBAL_TABLE_ROOT_CERT_TYPEHASH() view returns (bytes32)
globalRootConfirmationThreshold
viewfunction globalRootConfirmationThreshold() view returns (uint16)
isRootValid
viewfunction isRootValid(bytes32 globalTableRoot) view returns (bool)
isRootValidByTimestamp
viewfunction isRootValidByTimestamp(uint32 referenceTimestamp) view returns (bool)
MAX_BPS
viewfunction MAX_BPS() view returns (uint16)
OPERATOR_INFO_LEAF_SALT
viewfunction OPERATOR_INFO_LEAF_SALT() view returns (uint8)
OPERATOR_TABLE_LEAF_SALT
viewfunction OPERATOR_TABLE_LEAF_SALT() view returns (uint8)
owner
viewfunction owner() view returns (address)
paused
viewfunction paused() view returns (uint256)
paused
viewfunction paused(uint8 index) view returns (bool)
pauserRegistry
viewfunction pauserRegistry() view returns (address)
version
viewfunction version() view returns (string)
confirmGlobalTableRoot
nonpayablefunction confirmGlobalTableRoot(tuple globalTableRootCert, bytes32 globalTableRoot, uint32 referenceTimestamp, uint32 referenceBlockNumber)
disableRoot
nonpayablefunction disableRoot(bytes32 globalTableRoot)
initialize
nonpayablefunction initialize(address _owner, uint256 initialPausedStatus, tuple _initialGenerator, uint16 _globalRootConfirmationThreshold, tuple generatorInfo)
pause
nonpayablefunction pause(uint256 newPausedStatus)
pauseAll
nonpayablefunction pauseAll()
renounceOwnership
nonpayablefunction renounceOwnership()
setGlobalRootConfirmationThreshold
nonpayablefunction setGlobalRootConfirmationThreshold(uint16 bps)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
unpause
nonpayablefunction unpause(uint256 newPausedStatus)
updateGenerator
nonpayablefunction updateGenerator(tuple generator, tuple generatorInfo)
updateOperatorTable
nonpayablefunction updateOperatorTable(uint32 referenceTimestamp, bytes32 globalTableRoot, uint32 operatorSetIndex, bytes proof, bytes operatorTableBytes)
events
GeneratorUpdated
event GeneratorUpdated((address avs, uint32 id) operatorSet)
GlobalRootConfirmationThresholdUpdated
event GlobalRootConfirmationThresholdUpdated(uint16 bps)
GlobalRootDisabled
event GlobalRootDisabled(bytes32 indexed globalTableRoot)
Initialized
event Initialized(uint8 version)
NewGlobalTableRoot
event NewGlobalTableRoot(uint32 indexed referenceTimestamp, bytes32 indexed globalTableRoot)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
Paused
event Paused(address indexed account, uint256 newPausedStatus)
Unpaused
event Unpaused(address indexed account, uint256 newPausedStatus)
errors
CannotDisableGeneratorRoot
error CannotDisableGeneratorRoot()
CertificateInvalid
error CertificateInvalid()
CurrentlyPaused
error CurrentlyPaused()
EmptyRoot
error EmptyRoot()
GlobalTableRootInFuture
error GlobalTableRootInFuture()
GlobalTableRootStale
error GlobalTableRootStale()
InputAddressZero
error InputAddressZero()
InvalidConfirmationThreshold
error InvalidConfirmationThreshold()
InvalidCurveType
error InvalidCurveType()
InvalidGenerator
error InvalidGenerator()
InvalidGlobalTableRoot
error InvalidGlobalTableRoot()
InvalidIndex
error InvalidIndex()
InvalidMessageHash
error InvalidMessageHash()
InvalidNewPausedStatus
error InvalidNewPausedStatus()
InvalidOperatorSet
error InvalidOperatorSet()
InvalidOperatorSetProof
error InvalidOperatorSetProof()
InvalidProofLength
error InvalidProofLength()
InvalidRoot
error InvalidRoot()
InvalidShortString
error InvalidShortString()
OnlyPauser
error OnlyPauser()
OnlyUnpauser
error OnlyUnpauser()
StringTooLong
error StringTooLong(string str)
TableUpdateForPastTimestamp
error TableUpdateForPastTimestamp()
creation bytecode
0x610100604052348015610010575f5ffd5b50604051612e6a380380612e6a83398101604081905261002f916101b9565b808484846001600160a01b03811661005a576040516339b190bb60e11b815260040160405180910390fd5b6001600160a01b0390811660805291821660a0521660c05261007b81610090565b60e052506100876100d6565b505050506102fe565b5f5f829050601f815111156100c3578260405163305a27a960e01b81526004016100ba91906102a3565b60405180910390fd5b80516100ce826102d8565b179392505050565b5f54610100900460ff161561013d5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b60648201526084016100ba565b5f5460ff9081161461018c575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b03811681146101a2575f5ffd5b50565b634e487b7160e01b5f52604160045260245ffd5b5f5f5f5f608085870312156101cc575f5ffd5b84516101d78161018e565b60208601519094506101e88161018e565b60408601519093506101f98161018e565b60608601519092506001600160401b03811115610214575f5ffd5b8501601f81018713610224575f5ffd5b80516001600160401b0381111561023d5761023d6101a5565b604051601f8201601f19908116603f011681016001600160401b038111828210171561026b5761026b6101a5565b604052818152828201602001891015610282575f5ffd5b8160208401602083015e5f6020838301015280935050505092959194509250565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b805160208083015191908110156102f8575f198160200360031b1b821691505b50919050565b60805160a05160c05160e051612aec61037e5f395f610a1301525f81816105b501528181610aad0152610e6d01525f818161061c0152818161094101528181610a6d01528181610b1901528181610dc8015281816111420152818161142b01526114dd01525f818161053c0152818161160901526118f50152612aec5ff3fe608060405234801561000f575f5ffd5b5060043610610255575f3560e01c80636f728c5011610140578063ad0f9582116100bf578063c3be1e3311610084578063c3be1e3314610672578063c5916a3914610685578063eaaed9d5146106aa578063f2fde38b146106bd578063fabc1cbc146106d0578063fd967f47146106e3575f5ffd5b8063ad0f9582146105b0578063b0cb3a24146105d7578063b8c1430614610617578063c252aa221461063e578063c3621f0a1461065f575f5ffd5b80638da5cb5b116101055780638da5cb5b1461055e5780639ea947781461056f5780639f7e206f14610582578063a2c902f514610595578063a2f2e24d1461059d575f5ffd5b80636f728c50146104f5578063715018a6146105205780637551ba3414610528578063790961ea14610530578063886f119514610537575f5ffd5b806331a599d2116101d757806354fd4d501161019c57806354fd4d5014610470578063595c6a67146104855780635ac86ab71461048d5780635c975abb146104b0578063612abcb0146104b857806364e1df84146104c0575f5ffd5b806331a599d2146103ea5780633ef6cd7a1461040f578063401c370f146104365780634624e6a314610449578063538a37901461045d575f5ffd5b80631e2ca2601161021d5780631e2ca260146103125780632370356c1461035b57806323b7b5b21461036e57806328522d791461039657806330ef41b4146103b8575f5ffd5b806306f5187514610259578063121409ea1461026e578063136439dd1461028d578063193b79f3146102a05780631bdc0deb146102dd575b5f5ffd5b61026c610267366004611b4f565b6106ec565b005b610276608e81565b60405160ff90911681526020015b60405180910390f35b61026c61029b366004611bc5565b6108c6565b6102c86102ae366004611bed565b63ffffffff9081165f908152609b60205260409020541690565b60405163ffffffff9091168152602001610284565b6103047fcefe99cb2e240b5f07de5cd472a75fc6e345370b73588ab161cb25c4a259a86981565b604051908152602001610284565b6040805180820182525f80825260209182015281518083019092526098546001600160a01b0381168352600160a01b900463ffffffff16908201525b6040516102849190611c26565b61026c610369366004611c34565b610900565b6102c861037c366004611bed565b63ffffffff9081165f908152609a60205260409020541690565b60975462010000900463ffffffff165f90815260996020526040902054610304565b6103da6103c6366004611bc5565b5f908152609c602052604090205460ff1690565b6040519015158152602001610284565b60975462010000900463ffffffff9081165f908152609a6020526040902054166102c8565b6103047f4491f5ee91595f938885ef73c9a1fa8a6d14ff9b9dab4aa24b8802bbb9bfc1cc81565b610304610444366004611c4d565b610914565b60975462010000900463ffffffff166102c8565b61030461046b366004611d3c565b6109bd565b610478610a0c565b6040516102849190611e34565b61026c610a3c565b6103da61049b366004611e69565b606654600160ff9092169190911b9081161490565b606654610304565b6102c8600181565b6103da6104ce366004611bed565b63ffffffff165f908152609960209081526040808320548352609c90915290205460ff1690565b610508610503366004611e97565b610a50565b6040516001600160a01b039091168152602001610284565b61026c610aef565b6102c8610b00565b6102c85f81565b6105087f000000000000000000000000000000000000000000000000000000000000000081565b6033546001600160a01b0316610508565b61026c61057d366004611ef4565b610b8e565b61026c610590366004611f8f565b610ede565b610276607581565b6103046105ab366004611fda565b610ef0565b6105087f000000000000000000000000000000000000000000000000000000000000000081565b6040805180820182525f8082526020918201528151808301909252609d546001600160a01b0381168352600160a01b900463ffffffff169082015261034e565b6105087f000000000000000000000000000000000000000000000000000000000000000081565b60975461064c9061ffff1681565b60405161ffff9091168152602001610284565b61026c61066d366004611bc5565b610f26565b610304610680366004611c4d565b610fdb565b610304610693366004611bed565b63ffffffff165f9081526099602052604090205490565b61026c6106b8366004612018565b611043565b61026c6106cb366004612084565b611292565b61026c6106de366004611bc5565b611308565b61064c61271081565b5f54610100900460ff161580801561070a57505f54600160ff909116105b806107235750303b15801561072357505f5460ff166001145b61078b5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff1916600117905580156107ac575f805461ff0019166101001790555b6107b586611375565b6107be856113c6565b609d80546001600160c01b031916301790556107da8483611403565b6107e383611583565b7fcefe99cb2e240b5f07de5cd472a75fc6e345370b73588ab161cb25c4a259a8697fbb86fbc034f4e382929974bcd8419ed626b0ea647f962d89ba2fb6bd28785ab98190555f52609c6020527f38353ab40115e4013d688e07cff5857dde443bd05e72c49fcb5e684a9bb9efc4805460ff19166001179055609780544263ffffffff16620100000265ffffffff00001990911617905580156108be575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b6108ce6115f4565b60665481811681146108f35760405163c61dca5d60e01b815260040160405180910390fd5b6108fc826113c6565b5050565b610908611697565b61091181611583565b50565b5f5f610921858585610fdb565b6040516306119d0d60e21b815260016004820152602481018290529091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690631846743490604401602060405180830381865afa15801561098e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109b2919061209f565b9150505b9392505050565b5f6075826040516020016109d191906120f0565b60408051601f19818403018152908290526109ef929160200161211d565b604051602081830303815290604052805190602001209050919050565b6060610a377f00000000000000000000000000000000000000000000000000000000000000006116f1565b905090565b610a446115f4565b610a4e5f196113c6565b565b5f6002826002811115610a6557610a65612146565b03610a9157507f0000000000000000000000000000000000000000000000000000000000000000919050565b6001826002811115610aa557610aa5612146565b03610ad157507f0000000000000000000000000000000000000000000000000000000000000000919050565b60405163fdea7c0960e01b815260040160405180910390fd5b919050565b610af7611697565b610a4e5f611375565b604051635ddb9b5b60e01b81525f906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635ddb9b5b90610b4f9060989060040161215a565b602060405180830381865afa158015610b6a573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a379190612181565b6001610b998161172e565b610ba1611759565b5f5f5f5f610baf87876117b2565b5f8f8152609c60205260409020549397509195509350915060ff16610be75760405163504570e360e01b815260040160405180910390fd5b604080518082019091526098546001600160a01b0381168252600160a01b900463ffffffff166020820152610c1b906117f9565b610c24856117f9565b03610c4257604051631fb1705560e21b815260040160405180910390fd5b610c4b83610a50565b6001600160a01b031663cd83a72b858e6040518363ffffffff1660e01b8152600401610c7892919061219c565b602060405180830381865afa158015610c93573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cb791906121bd565b15610cc55750505050610eca565b610cce83610a50565b6001600160a01b0316635ddb9b5b856040518263ffffffff1660e01b8152600401610cf99190611c26565b602060405180830381865afa158015610d14573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d389190612181565b63ffffffff168c63ffffffff1611610d635760405163207617df60e01b815260040160405180910390fd5b63ffffffff8c165f908152609960205260409020548b14610d975760405163639d09b560e11b815260040160405180910390fd5b610dad8b8b8b8b610da88c8c610ef0565b61185c565b6002836002811115610dc157610dc1612146565b03610e52577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636738c40b858e610e00856118c1565b866040518563ffffffff1660e01b8152600401610e2094939291906121dc565b5f604051808303815f87803b158015610e37575f5ffd5b505af1158015610e49573d5f5f3e3d5ffd5b50505050610ec5565b6001836002811115610e6657610e66612146565b03610ad1577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166356d482f5858e610ea5856118dd565b866040518563ffffffff1660e01b8152600401610e20949392919061225d565b505050505b610ed4600160c955565b5050505050505050565b610ee6611697565b6108fc8282611403565b5f608e8383604051602001610f0793929190612302565b6040516020818303038152906040528051906020012090505b92915050565b610f2e6115f4565b5f818152609c602052604090205460ff16610f5c5760405163504570e360e01b815260040160405180910390fd5b7fcefe99cb2e240b5f07de5cd472a75fc6e345370b73588ab161cb25c4a259a8698103610f9c576040516319920afd60e11b815260040160405180910390fd5b5f818152609c6020526040808220805460ff191690555182917f8bd43de1250f58fe6ec9a78671a8b78dba70f0018656d157a3aeaabec389df3491a250565b604080517f4491f5ee91595f938885ef73c9a1fa8a6d14ff9b9dab4aa24b8802bbb9bfc1cc602082015290810184905263ffffffff8084166060830152821660808201525f9060a0016040516020818303038152906040528051906020012090509392505050565b5f61104d8161172e565b611055611759565b428363ffffffff16111561107c57604051635a119db560e11b815260040160405180910390fd5b60975463ffffffff620100009091048116908416116110ae5760405163037fa86b60e31b815260040160405180910390fd5b6110b9848484610fdb565b8560200135146110dc57604051638b56642d60e01b815260040160405180910390fd5b6040805160018082528183019092525f91602080830190803683375050609754825192935061ffff16918391505f9061111757611117612329565b61ffff90921660209283029190910190910152604051625f5e5d60e21b81525f906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063017d79749061117c906098908b90879060040161245b565b6020604051808303815f875af1158015611198573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111bc91906121bd565b9050806111dc57604051633042041f60e21b815260040160405180910390fd5b6097805463ffffffff80881662010000810265ffffffff000019909316929092179092555f818152609a602090815260408083208054958a1663ffffffff1996871681179091558352609b825280832080549095168417909455828252609981528382208a9055898252609c9052828120805460ff19166001179055915188927f010dcbe0d1e019c93357711f7bb6287d543b7ff7de74f29df3fb5ecceec8d36991a3505061128b600160c955565b5050505050565b61129a611697565b6001600160a01b0381166112ff5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610782565b61091181611375565b6113106118f3565b606654801982198116146113375760405163c61dca5d60e01b815260040160405180910390fd5b606682905560405182815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200160405180910390a25050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a250565b81609861141082826125e8565b5050604051635ddb9b5b60e01b81525f906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635ddb9b5b90611460908690600401612679565b602060405180830381865afa15801561147b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061149f9190612181565b905063ffffffff8116156114c657604051636446f91760e01b815260040160405180910390fd5b604051636738c40b60e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636738c40b9061151a9086906001908790609d90600401612687565b5f604051808303815f87803b158015611531575f5ffd5b505af1158015611543573d5f5f3e3d5ffd5b505050507f3463431b09dfd43dec7349f8f24acfa753fe4cf40a26235402d213373df15856836040516115769190612679565b60405180910390a1505050565b61271061ffff821611156115aa576040516307336f0360e11b815260040160405180910390fd5b6097805461ffff191661ffff83169081179091556040519081527ff5d1836df8fcd7c1e54047e94ac8773d2855395603e2ef9ba5f5f16905f225929060200160405180910390a150565b60405163237dfb4760e11b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906346fbf68e90602401602060405180830381865afa158015611656573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061167a91906121bd565b610a4e57604051631d77d47760e21b815260040160405180910390fd5b6033546001600160a01b03163314610a4e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610782565b60605f6116fd836119a4565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b606654600160ff83161b908116036109115760405163840a48d560e01b815260040160405180910390fd5b600260c954036117ab5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610782565b600260c955565b604080518082019091525f8082526020820152604080518082019091525f808252602082018190529060606117e985870187612760565b9299919850965090945092505050565b5f815f0151826020015163ffffffff1660405160200161184492919060609290921b6bffffffffffffffffffffffff1916825260a01b6001600160a01b031916601482015260200190565b604051602081830303815290604052610f2090612825565b6118a483838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508992508591505063ffffffff88166119cb565b61128b5760405163afa42ca760e01b815260040160405180910390fd5b6118c9611ac5565b81806020019051810190610f2091906128ad565b606081806020019051810190610f20919061295c565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561194f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119739190612a5d565b6001600160a01b0316336001600160a01b031614610a4e5760405163794821ff60e01b815260040160405180910390fd5b5f60ff8216601f811115610f2057604051632cd44ac360e21b815260040160405180910390fd5b5f836119ea576040516329e7276760e11b815260040160405180910390fd5b836119f6868585611a00565b1495945050505050565b5f83515f03611a105750816109b6565b60208451611a1e9190612a78565b15611a3c576040516313717da960e21b815260040160405180910390fd5b8260205b85518111611a9d57611a53600285612a78565b5f03611a7457815f528086015160205260405f209150600284049350611a8b565b808601515f528160205260405f2091506002840493505b611a96602082612a97565b9050611a40565b508215611abd576040516363df817160e01b815260040160405180910390fd5b949350505050565b60405180608001604052805f81526020015f8152602001611af760405180604001604052805f81526020015f81525090565b8152602001606081525090565b6001600160a01b0381168114610911575f5ffd5b5f60408284031215611b28575f5ffd5b50919050565b803561ffff81168114610aea575f5ffd5b5f60a08284031215611b28575f5ffd5b5f5f5f5f5f60c08688031215611b63575f5ffd5b8535611b6e81611b04565b945060208601359350611b848760408801611b18565b9250611b9260808701611b2e565b915060a08601356001600160401b03811115611bac575f5ffd5b611bb888828901611b3f565b9150509295509295909350565b5f60208284031215611bd5575f5ffd5b5035919050565b63ffffffff81168114610911575f5ffd5b5f60208284031215611bfd575f5ffd5b81356109b681611bdc565b80516001600160a01b0316825260209081015163ffffffff16910152565b60408101610f208284611c08565b5f60208284031215611c44575f5ffd5b6109b682611b2e565b5f5f5f60608486031215611c5f575f5ffd5b833592506020840135611c7181611bdc565b91506040840135611c8181611bdc565b809150509250925092565b634e487b7160e01b5f52604160045260245ffd5b604080519081016001600160401b0381118282101715611cc257611cc2611c8c565b60405290565b604051608081016001600160401b0381118282101715611cc257611cc2611c8c565b604051601f8201601f191681016001600160401b0381118282101715611d1257611d12611c8c565b604052919050565b5f6001600160401b03821115611d3257611d32611c8c565b5060051b60200190565b5f60208284031215611d4c575f5ffd5b81356001600160401b03811115611d61575f5ffd5b82018084036060811215611d73575f5ffd5b611d7b611ca0565b6040821215611d88575f5ffd5b611d90611ca0565b83358152602080850135908201528152604083013591506001600160401b03821115611dba575f5ffd5b818301925085601f840112611dcd575f5ffd5b82359150611de2611ddd83611d1a565b611cea565b8083825260208201915060208460051b860101935087841115611e03575f5ffd5b6020850194505b83851015611e25578435825260209485019490910190611e0a565b60208301525095945050505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f60208284031215611e79575f5ffd5b813560ff811681146109b6575f5ffd5b803560038110610aea575f5ffd5b5f60208284031215611ea7575f5ffd5b6109b682611e89565b5f5f83601f840112611ec0575f5ffd5b5081356001600160401b03811115611ed6575f5ffd5b602083019150836020828501011115611eed575f5ffd5b9250929050565b5f5f5f5f5f5f5f60a0888a031215611f0a575f5ffd5b8735611f1581611bdc565b9650602088013595506040880135611f2c81611bdc565b945060608801356001600160401b03811115611f46575f5ffd5b611f528a828b01611eb0565b90955093505060808801356001600160401b03811115611f70575f5ffd5b611f7c8a828b01611eb0565b989b979a50959850939692959293505050565b5f5f60608385031215611fa0575f5ffd5b611faa8484611b18565b915060408301356001600160401b03811115611fc4575f5ffd5b611fd085828601611b3f565b9150509250929050565b5f5f60208385031215611feb575f5ffd5b82356001600160401b03811115612000575f5ffd5b61200c85828601611eb0565b90969095509350505050565b5f5f5f5f6080858703121561202b575f5ffd5b84356001600160401b03811115612040575f5ffd5b85016101208188031215612052575f5ffd5b935060208501359250604085013561206981611bdc565b9150606085013561207981611bdc565b939692955090935050565b5f60208284031215612094575f5ffd5b81356109b681611b04565b5f602082840312156120af575f5ffd5b5051919050565b5f8151808452602084019350602083015f5b828110156120e65781518652602095860195909101906001016120c8565b5093949350505050565b60208082528251805183830152015160408201525f6020830151606080840152611abd60808401826120b6565b60ff60f81b8360f81b1681525f82518060208501600185015e5f92016001019182525092915050565b634e487b7160e01b5f52602160045260245ffd5b60408101610f208284546001600160a01b038116825260a01c63ffffffff16602090910152565b5f60208284031215612191575f5ffd5b81516109b681611bdc565b606081016121aa8285611c08565b63ffffffff831660408301529392505050565b5f602082840312156121cd575f5ffd5b815180151581146109b6575f5ffd5b6121e68186611c08565b63ffffffff8416604082015260c06060820152825160c0820152602083015160e08201525f604084015161222861010084018280518252602090810151910152565b50606084015160a06101408401526122446101608401826120b6565b9150506122546080830184611c08565b95945050505050565b5f60c0820161226c8388611c08565b63ffffffff8616604084015260c0606084015280855180835260e08501915060e08160051b8601019250602087015f5b828110156122ed5786850360df19018452815180516001600160a01b031686526020908101516040918701829052906122d7908701826120b6565b955050602093840193919091019060010161229c565b50505050809150506122546080830184611c08565b60f884901b6001600160f81b0319168152818360018301375f910160010190815292915050565b634e487b7160e01b5f52603260045260245ffd5b5f5f8335601e19843603018112612352575f5ffd5b83016020810192503590506001600160401b03811115612370575f5ffd5b8060051b3603821315611eed575f5ffd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8235605e198336030181126123bd575f5ffd5b90910192915050565b8183525f6001600160fb1b038311156123dd575f5ffd5b8260051b80836020870137939093016020019392505050565b80358252602080820135908301525f612412604083018361233d565b606060408601526122546060860182846123c6565b5f8151808452602084019350602083015f5b828110156120e657815161ffff16865260209586019590910190600101612439565b61247e8185546001600160a01b038116825260a01c63ffffffff16602090910152565b608060408201525f6101a08201843561249681611bdc565b63ffffffff166080840152602085013560a0840152604085013560c0840152606085013560e0840152604060808601610100850137604060c086016101408501376124e561010086018661233d565b610120610180860152828184526101c0860190506101c08260051b8701019350825f5b838110156125c7578786036101bf1901835261252482866123a9565b803561252f81611bdc565b63ffffffff168752602081013536829003601e1901811261254e575f5ffd5b81016020810190356001600160401b03811115612569575f5ffd5b803603821315612577575f5ffd5b606060208a015261258c60608a018284612381565b91505061259c60408301836123a9565b915087810360408901526125b081836123f6565b975050506020928301929190910190600101612508565b505050505082810360608401526125de8185612427565b9695505050505050565b81356125f381611b04565b81546001600160a01b031981166001600160a01b03929092169182178355602084013561261f81611bdc565b6001600160c01b03199190911690911760a09190911b63ffffffff60a01b1617905550565b803561264f81611b04565b6001600160a01b03168252602081013561266881611bdc565b63ffffffff81166020840152505050565b60408101610f208284612644565b6126918186612644565b63ffffffff841660408281019190915260c06060808401829052853591840191909152602085013560e0840152908401356101008301528301356101208201525f6126df608085018561233d565b60a06101408501526126f6610160850182846123c6565b925050506122546080830184546001600160a01b038116825260a01c63ffffffff16602090910152565b5f60408284031215612730575f5ffd5b612738611ca0565b9050813561274581611b04565b8152602082013561275581611bdc565b602082015292915050565b5f5f5f5f60c08587031215612773575f5ffd5b61277d8686612720565b935061278b60408601611e89565b925061279a8660608701612720565b915060a08501356001600160401b038111156127b4575f5ffd5b8501601f810187136127c4575f5ffd5b80356001600160401b038111156127dd576127dd611c8c565b6127f0601f8201601f1916602001611cea565b818152886020838501011115612804575f5ffd5b816020840160208301375f6020838301015280935050505092959194509250565b80516020808301519190811015611b28575f1960209190910360031b1b16919050565b5f82601f830112612857575f5ffd5b8151612865611ddd82611d1a565b8082825260208201915060208360051b860101925085831115612886575f5ffd5b602085015b838110156128a357805183526020928301920161288b565b5095945050505050565b5f602082840312156128bd575f5ffd5b81516001600160401b038111156128d2575f5ffd5b820180840360a08112156128e4575f5ffd5b6128ec611cc8565b82518152602080840151908201526040603f198301121561290b575f5ffd5b612913611ca0565b604084810151825260608501516020830152820152608083015191506001600160401b03821115612942575f5ffd5b61294e86838501612848565b606082015295945050505050565b5f6020828403121561296c575f5ffd5b81516001600160401b03811115612981575f5ffd5b8201601f81018413612991575f5ffd5b805161299f611ddd82611d1a565b8082825260208201915060208360051b8501019250868311156129c0575f5ffd5b602084015b83811015612a525780516001600160401b038111156129e2575f5ffd5b85016040818a03601f190112156129f7575f5ffd5b6129ff611ca0565b6020820151612a0d81611b04565b815260408201516001600160401b03811115612a27575f5ffd5b612a368b602083860101612848565b60208301525080855250506020830192506020810190506129c5565b509695505050505050565b5f60208284031215612a6d575f5ffd5b81516109b681611b04565b5f82612a9257634e487b7160e01b5f52601260045260245ffd5b500690565b80820180821115610f2057634e487b7160e01b5f52601160045260245ffdfea2646970667358221220383df0454ad9496b57e13a357e8f29ef958ab90c31374b06e0030e1fc9f1834164736f6c634300081b00330000000000000000000000003f55654b2b2b86bb11be2f72657f9c33bf88120a000000000000000000000000d0930ee96d07de4f9d493c259232222e46b6ec25000000000000000000000000b1754226917e866c1701f1d9f9e135d88f2e86ea00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000005312e382e31000000000000000000000000000000000000000000000000000000