0 txs
18.6k calls
constructor
constructor()
functions
aggregator
viewfunction aggregator() view returns (address)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
finalizationBlockNumberDelta
viewfunction finalizationBlockNumberDelta() view returns (uint256)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
getRoleMember
viewfunction getRoleMember(bytes32 role, uint256 index) view returns (address)
getRoleMemberCount
viewfunction getRoleMemberCount(bytes32 role) view returns (uint256)
hasPendingUpdate
viewfunction hasPendingUpdate() view returns (bool)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
latestRecord
viewfunction latestRecord() view returns (tuple)
maxConsensusLayerGainPerBlockPPT
viewfunction maxConsensusLayerGainPerBlockPPT() view returns (uint40)
maxConsensusLayerLossPPM
viewfunction maxConsensusLayerLossPPM() view returns (uint24)
maxDepositPerValidator
viewfunction maxDepositPerValidator() view returns (uint256)
minConsensusLayerGainPerBlockPPT
viewfunction minConsensusLayerGainPerBlockPPT() view returns (uint40)
minDepositPerValidator
viewfunction minDepositPerValidator() view returns (uint256)
minReportSizeBlocks
viewfunction minReportSizeBlocks() view returns (uint16)
numRecords
viewfunction numRecords() view returns (uint256)
ORACLE_MANAGER_ROLE
viewfunction ORACLE_MANAGER_ROLE() view returns (bytes32)
ORACLE_MODIFIER_ROLE
viewfunction ORACLE_MODIFIER_ROLE() view returns (bytes32)
ORACLE_PENDING_UPDATE_RESOLVER_ROLE
viewfunction ORACLE_PENDING_UPDATE_RESOLVER_ROLE() view returns (bytes32)
oracleUpdater
viewfunction oracleUpdater() view returns (address)
pauser
viewfunction pauser() view returns (address)
pendingUpdate
viewfunction pendingUpdate() view returns (tuple)
recordAt
viewfunction recordAt(uint256 idx) view returns (tuple)
sanityCheckUpdate
viewfunction sanityCheckUpdate(tuple prevRecord, tuple newRecord) view returns (string, uint256, uint256)
staking
viewfunction staking() view returns (address)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
validateUpdate
viewfunction validateUpdate(uint256 prevRecordIndex, tuple newRecord) view
acceptPendingUpdate
nonpayablefunction acceptPendingUpdate()
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
initialize
nonpayablefunction initialize(tuple init)
modifyExistingRecord
nonpayablefunction modifyExistingRecord(uint256 idx, tuple record)
receiveRecord
nonpayablefunction receiveRecord(tuple newRecord)
rejectPendingUpdate
nonpayablefunction rejectPendingUpdate()
renounceRole
nonpayablefunction renounceRole(bytes32 role, address account)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
setFinalizationBlockNumberDelta
nonpayablefunction setFinalizationBlockNumberDelta(uint256 finalizationBlockNumberDelta_)
setMaxConsensusLayerGainPerBlockPPT
nonpayablefunction setMaxConsensusLayerGainPerBlockPPT(uint40 maxConsensusLayerGainPerBlockPPT_)
setMaxConsensusLayerLossPPM
nonpayablefunction setMaxConsensusLayerLossPPM(uint24 maxConsensusLayerLossPPM_)
setMaxDepositPerValidator
nonpayablefunction setMaxDepositPerValidator(uint256 maxDepositPerValidator_)
setMinConsensusLayerGainPerBlockPPT
nonpayablefunction setMinConsensusLayerGainPerBlockPPT(uint40 minConsensusLayerGainPerBlockPPT_)
setMinDepositPerValidator
nonpayablefunction setMinDepositPerValidator(uint256 minDepositPerValidator_)
setMinReportSizeBlocks
nonpayablefunction setMinReportSizeBlocks(uint16 minReportSizeBlocks_)
setOracleUpdater
nonpayablefunction setOracleUpdater(address newUpdater)
events
Initialized
event Initialized(uint8 version)
OraclePendingUpdateRejected
event OraclePendingUpdateRejected((uint64 updateStartBlock, uint64 updateEndBlock, uint64 currentNumValidatorsNotWithdrawable, uint64 cumulativeNumValidatorsWithdrawable, uint128 windowWithdrawnPrincipalAmount, uint128 windowWithdrawnRewardAmount, uint128 currentTotalValidatorBalance, uint128 cumulativeProcessedDepositAmount) pendingUpdate)
OracleRecordAdded
event OracleRecordAdded(uint256 indexed index, (uint64 updateStartBlock, uint64 updateEndBlock, uint64 currentNumValidatorsNotWithdrawable, uint64 cumulativeNumValidatorsWithdrawable, uint128 windowWithdrawnPrincipalAmount, uint128 windowWithdrawnRewardAmount, uint128 currentTotalValidatorBalance, uint128 cumulativeProcessedDepositAmount) record)
OracleRecordFailedSanityCheck
event OracleRecordFailedSanityCheck(bytes32 indexed reasonHash, string reason, (uint64 updateStartBlock, uint64 updateEndBlock, uint64 currentNumValidatorsNotWithdrawable, uint64 cumulativeNumValidatorsWithdrawable, uint128 windowWithdrawnPrincipalAmount, uint128 windowWithdrawnRewardAmount, uint128 currentTotalValidatorBalance, uint128 cumulativeProcessedDepositAmount) record, uint256 value, uint256 bound)
OracleRecordModified
event OracleRecordModified(uint256 indexed index, (uint64 updateStartBlock, uint64 updateEndBlock, uint64 currentNumValidatorsNotWithdrawable, uint64 cumulativeNumValidatorsWithdrawable, uint128 windowWithdrawnPrincipalAmount, uint128 windowWithdrawnRewardAmount, uint128 currentTotalValidatorBalance, uint128 cumulativeProcessedDepositAmount) record)
ProtocolConfigChanged
event ProtocolConfigChanged(bytes4 indexed setterSelector, string setterSignature, bytes value)
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)
errors
CannotModifyInitialRecord
error CannotModifyInitialRecord()
CannotUpdateWhileUpdatePending
error CannotUpdateWhileUpdatePending()
InvalidConfiguration
error InvalidConfiguration()
InvalidRecordModification
error InvalidRecordModification()
InvalidUpdateEndBeforeStartBlock
error InvalidUpdateEndBeforeStartBlock(uint256 end, uint256 start)
InvalidUpdateMoreDepositsProcessedThanSent
error InvalidUpdateMoreDepositsProcessedThanSent(uint256 processed, uint256 sent)
InvalidUpdateMoreValidatorsThanInitiated
error InvalidUpdateMoreValidatorsThanInitiated(uint256 numValidatorsOnRecord, uint256 numInitiatedValidators)
InvalidUpdateStartBlock
error InvalidUpdateStartBlock(uint256 wantUpdateStartBlock, uint256 gotUpdateStartBlock)
NoUpdatePending
error NoUpdatePending()
Paused
error Paused()
RecordDoesNotExist
error RecordDoesNotExist(uint256 idx)
UnauthorizedOracleUpdater
error UnauthorizedOracleUpdater(address sender, address oracleUpdater)
UpdateEndBlockNumberNotFinal
error UpdateEndBlockNumberNotFinal(uint256 updateFinalizingBlock)
ZeroAddress
error ZeroAddress()
creation bytecode
0x60806040523480156200001157600080fd5b506200001c62000022565b620000e3565b600054610100900460ff16156200008f5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811614620000e1576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b61485980620000f36000396000f3fe608060405234801561001057600080fd5b50600436106102e85760003560e01c806391d1485411610191578063c6b861b9116100e3578063e69e47df11610097578063fb483fb111610071578063fb483fb1146106e0578063fb961583146106f3578063fdc482e81461071a57600080fd5b8063e69e47df146106b2578063f0402cbf146106c5578063f3a009a0146106d857600080fd5b8063cec5afe7116100c8578063cec5afe714610679578063d547741f1461068c578063e41beeda1461069f57600080fd5b8063c6b861b914610653578063ca15c8731461066657600080fd5b8063aa5180e811610145578063b5d1990d1161011f578063b5d1990d1461061b578063bf3b91ab14610623578063bfc69e1c1461062c57600080fd5b8063aa5180e8146105c9578063ac43459d146105d6578063b553cad7146105e957600080fd5b80639fd0506d116101765780639fd0506d14610598578063a217fddf146105b8578063a78dce76146105c057600080fd5b806391d148541461054a5780639f407aaa1461059057600080fd5b8063491e0bd11161024a57806367d5f337116101fe578063805d64a0116101d8578063805d64a0146104fd5780638543d1a71461051d5780639010d07c1461053757600080fd5b806367d5f337146104b55780636e710e05146104c8578063771eb104146104ea57600080fd5b80634cf088d91161022f5780634cf088d91461045b57806357ab17031461047b57806359d3005d1461048e57600080fd5b8063491e0bd11461044a5780634c62d42e1461045357600080fd5b806328e8f400116102a1578063303929171161028657806330392917146103f357806336568abe146104065780634253e0c01461041957600080fd5b806328e8f400146103cb5780632f2ff15d146103e057600080fd5b806315afe1f6116102d257806315afe1f61461032e578063245a7bfc14610363578063248a9ca3146103a857600080fd5b8062a4dcac146102ed57806301ffc9a71461030b575b600080fd5b6102f561072d565b604051610302919061373b565b60405180910390f35b61031e6103193660046137ff565b61085c565b6040519015158152602001610302565b6103557fb8921042efede08ea4fb87c7cd34c42ab1e134df6d8ef481f71c91910346d83581565b604051908152602001610302565b60d2546103839073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610302565b6103556103b6366004613841565b60009081526065602052604090206001015490565b6103de6103d9366004613873565b6108b8565b005b6103de6103ee3660046138c3565b610dbd565b6103de6104013660046138f3565b610de2565b6103de6104143660046138c3565b610f29565b60d554610436906a0100000000000000000000900462ffffff1681565b60405162ffffff9091168152602001610302565b61035560d45481565b6103de610fdc565b60d1546103839073ffffffffffffffffffffffffffffffffffffffff1681565b6103de610489366004613841565b6110b9565b60d55461049f9064ffffffffff1681565b60405164ffffffffff9091168152602001610302565b6103de6104c3366004613957565b61117c565b6104db6104d6366004613b74565b611515565b60405161030293929190613c10565b6103de6104f8366004613c35565b611a57565b60cf546103839073ffffffffffffffffffffffffffffffffffffffff1681565b60d55461049f9065010000000000900464ffffffffff1681565b610383610545366004613c59565b611b4e565b61031e6105583660046138c3565b600091825260656020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6103de611b6d565b60d0546103839073ffffffffffffffffffffffffffffffffffffffff1681565b610355600081565b61035560d35481565b60ca5461031e9060ff1681565b6103de6105e4366004613c7b565b611cc6565b60d554610608906d0100000000000000000000000000900461ffff1681565b60405161ffff9091168152602001610302565b60c954610355565b61035560ce5481565b6103557fced6982f480260bdd8ad5cb18ff2854f0306d78d904ad6cc107e8f3a0f526c1881565b6103de610661366004613ca2565b611df5565b610355610674366004613841565b61213b565b6103de610687366004613cbf565b612152565b6103de61069a3660046138c3565b6122a3565b6103de6106ad366004613841565b6122c8565b6103de6106c0366004613873565b6123c4565b6103de6106d3366004613841565b61277b565b6102f5612832565b6102f56106ee366004613841565b61295d565b6103557ffdd95c635b6fde1e24676722ae45d4e9072f4947c3c68d69c7de01654c84050981565b6103de610728366004613c7b565b612a7c565b6040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081019190915260ca5460ff166107aa576040517fe8907a5500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50604080516101008101825260cb5467ffffffffffffffff808216835268010000000000000000820481166020840152700100000000000000000000000000000000808304821694840194909452780100000000000000000000000000000000000000000000000090910416606082015260cc546fffffffffffffffffffffffffffffffff808216608084015290839004811660a083015260cd5480821660c08401529290920490911660e082015290565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f5a05180f0000000000000000000000000000000000000000000000000000000014806108b257506108b282612bb6565b92915050565b600060c983815481106108cd576108cd613cdc565b600091825260209182902060039091020191506108ec90830183613d0b565b67ffffffffffffffff166109066040840160208501613d0b565b67ffffffffffffffff161161097d576109256040830160208401613d0b565b6109326020840184613d0b565b6040517f999e007a00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff9283166004820152911660248201526044015b60405180910390fd5b80546109a09068010000000000000000900467ffffffffffffffff166001613d57565b67ffffffffffffffff166109b76020840184613d0b565b67ffffffffffffffff1614610a3c5780546109e99068010000000000000000900467ffffffffffffffff166001613d57565b6109f66020840184613d0b565b6040517f56ae644300000000000000000000000000000000000000000000000000000000815267ffffffffffffffff928316600482015291166024820152604401610974565b60d160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166360a0f6286040518163ffffffff1660e01b8152600401602060405180830381865afa158015610aa9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610acd9190613d78565b610ade610100840160e08501613d91565b6fffffffffffffffffffffffffffffffff161115610be457610b07610100830160e08401613d91565b60d160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166360a0f6286040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b74573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b989190613d78565b6040517f8cf753bf0000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff90921660048301526024820152604401610974565b60d160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bb635c656040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c759190613d78565b610c856080840160608501613d0b565b67ffffffffffffffff16610c9f6060850160408601613d0b565b67ffffffffffffffff16610cb39190613dae565b1115610db857610cc96080830160608401613d0b565b610cd96060840160408501613d0b565b610ce39190613d57565b60d160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bb635c656040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d749190613d78565b6040517fbb5daf3a00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff90921660048301526024820152604401610974565b505050565b600082815260656020526040902060010154610dd881612c4d565b610db88383612c57565b7fced6982f480260bdd8ad5cb18ff2854f0306d78d904ad6cc107e8f3a0f526c18610e0c81612c4d565b62ffffff8216620f424080821115610e50576040517fc52a9bd300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60d580547fffffffffffffffffffffffffffffffffffffff000000ffffffffffffffffffff166a010000000000000000000062ffffff8716908102919091179091556040805160208101929092527f3039291700000000000000000000000000000000000000000000000000000000917f01d854e8dde9402801a4c6f2840193465752abfad61e0bb7c4258d526ae42e749101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052610f1b91613dc1565b60405180910390a250505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610fce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c6600000000000000000000000000000000006064820152608401610974565b610fd88282612c79565b5050565b7fb8921042efede08ea4fb87c7cd34c42ab1e134df6d8ef481f71c91910346d83561100681612c4d565b60ca5460ff16611042576040517fe8907a5500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f4b640a37d59363bc1349d416626728534e5c58049e5f64f50f1090cabf152ab160cb6040516110729190613e2e565b60405180910390a16110b6600060cb81905560cc81905560cd5560ca80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b50565b7fced6982f480260bdd8ad5cb18ff2854f0306d78d904ad6cc107e8f3a0f526c186110e381612c4d565b60d382905560408051602081018490527f57ab170300000000000000000000000000000000000000000000000000000000917f01d854e8dde9402801a4c6f2840193465752abfad61e0bb7c4258d526ae42e749101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261117091613ea7565b60405180910390a25050565b600054610100900460ff161580801561119c5750600054600160ff909116105b806111b65750303b1580156111b6575060005460ff166001145b611242576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610974565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156112a057600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6112a8612c9b565b81516112b690600090612c57565b6112e47fced6982f480260bdd8ad5cb18ff2854f0306d78d904ad6cc107e8f3a0f526c188360200151612c57565b6113127fb8921042efede08ea4fb87c7cd34c42ab1e134df6d8ef481f71c91910346d8358360600151612c57565b608082015160d280547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff9384161790915560408085015160cf8054841691851691909117905560a085015160d08054841691851691909117905560c085015160d18054909316931692831790915560ce81905560d580546801bc16d674ec80000060d381905560d4557fffffffffffffffffffffffffffffffffff000000000000000000000000000000166d640003e8000002e72a000000076f1790558051610100810182526000815281517fb91590b200000000000000000000000000000000000000000000000000000000815291516114af9391926020808501939263b91590b29260048181019392918290030181865afa15801561144f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114739190613d78565b67ffffffffffffffff16815260006020820181905260408201819052606082018190526080820181905260a0820181905260c090910152612d34565b8015610fd857600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b6060600080806115286020860186613d0b565b6115386040870160208801613d0b565b6115429190613f14565b61154d906001613d57565b60d5549091506d0100000000000000000000000000900461ffff1667ffffffffffffffff821610156115c1578060d5600d9054906101000a900461ffff1660405180606001604052806021815260200161470560219139955067ffffffffffffffff909116935061ffff169150611a509050565b856060015167ffffffffffffffff168560600160208101906115e39190613d0b565b67ffffffffffffffff16101561163b576116036080860160608701613d0b565b866060015160405180606001604052806036815260200161472660369139955067ffffffffffffffff9182169450169150611a509050565b6000866060015187604001516116519190613d57565b67ffffffffffffffff169050600061166f6080880160608901613d0b565b61167f6060890160408a01613d0b565b6116899190613d57565b67ffffffffffffffff169050818110156116c8578082604051806060016040528060248152602001614800602491399190955095509550505050611a50565b50508560e001516fffffffffffffffffffffffffffffffff168560e00160208101906116f49190613d91565b6fffffffffffffffffffffffffffffffff16101561175d5761171d610100860160e08701613d91565b8660e001516040518060600160405280602281526020016147b26022913995506fffffffffffffffffffffffffffffffff9182169450169150611a509050565b60008660e001518660e00160208101906117779190613d91565b6117819190613f35565b6fffffffffffffffffffffffffffffffff1690506000876060015188604001518860600160208101906117b49190613d0b565b6117c460608b0160408c01613d0b565b6117ce9190613d57565b6117d89190613f14565b6117e29190613f14565b67ffffffffffffffff16905060d354816117fc9190613f5e565b82101561183b578160d354826118129190613f5e565b6040518060600160405280602c81526020016147d4602c91399190955095509550505050611a50565b60d4546118489082613f5e565b821115611887578160d4548261185e9190613f5e565b6040518060600160405280602c81526020016146d9602c91399190955095509550505050611a50565b505060008660e001518660e00160208101906118a39190613d91565b6118ad9190613f35565b8760c001516118bc9190613f75565b6fffffffffffffffffffffffffffffffff16905060006118e260c0880160a08901613d91565b6118f260a0890160808a01613d91565b61190260e08a0160c08b01613d91565b61190c9190613f75565b6119169190613f75565b60d5546fffffffffffffffffffffffffffffffff91909116915060009061195f9061194990869064ffffffffff16613f9e565b67ffffffffffffffff168464e8d4a51000612f7a565b60d554611983906a0100000000000000000000900462ffffff1685620f4240612f7a565b61198d9085613fca565b6119979190613dae565b9050808210156119cd57818160405180606001604052806031815260200161478160319139919096509650965050505050611a50565b5060d5546000906119f39061194990869065010000000000900464ffffffffff16613f9e565b6119fd9084613dae565b905080821115611a3357818160405180606001604052806025815260200161475c60259139919096509650965050505050611a50565b505060408051602081019091526000808252909550935083925050505b9250925092565b7fced6982f480260bdd8ad5cb18ff2854f0306d78d904ad6cc107e8f3a0f526c18611a8181612c4d565b60d580547fffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffff166d010000000000000000000000000061ffff8516908102919091179091556040805160208101929092527f771eb10400000000000000000000000000000000000000000000000000000000917f01d854e8dde9402801a4c6f2840193465752abfad61e0bb7c4258d526ae42e749101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261117091613fdd565b6000828152609760205260408120611b6690836130a3565b9392505050565b7fb8921042efede08ea4fb87c7cd34c42ab1e134df6d8ef481f71c91910346d835611b9781612c4d565b60ca5460ff16611bd3576040517fe8907a5500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516101008101825260cb5467ffffffffffffffff808216835268010000000000000000820481166020840152700100000000000000000000000000000000808304821694840194909452780100000000000000000000000000000000000000000000000090910416606082015260cc546fffffffffffffffffffffffffffffffff808216608084015290839004811660a083015260cd5480821660c08401529290920490911660e0820152611c8a90612d34565b6110b6600060cb81905560cc81905560cd5560ca80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b7fced6982f480260bdd8ad5cb18ff2854f0306d78d904ad6cc107e8f3a0f526c18611cf081612c4d565b64ffffffffff821664e8d4a5100080821115611d38576040517fc52a9bd300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60d580547fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000001664ffffffffff86169081179091556040805160208101929092527fac43459d00000000000000000000000000000000000000000000000000000000917f01d854e8dde9402801a4c6f2840193465752abfad61e0bb7c4258d526ae42e749101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052610f1b91614024565b60d060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b4a550376040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e869190614091565b15611ebd576040517f9e87fac800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60cf5473ffffffffffffffffffffffffffffffffffffffff163314611f305760cf546040517f612c001a00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091166024820152604401610974565b60ca5460ff1615611f6d576040517f452d764900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60c954611f8690611f8090600190613fca565b826108b8565b60ce54600090611f9c6040840160208501613d0b565b67ffffffffffffffff16611fb09190613dae565b905080431015611fef576040517f1fc3452800000000000000000000000000000000000000000000000000000000815260048101829052602401610974565b6000806000612005611fff612832565b86611515565b92509250925060008351111561211d578460cb61202282826140cd565b505060ca80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055825160208401206040517fc51d8bb32a3937963ee762598769c0e402bdbed204707576884f84040cf542cf9061208c9086908990879087906143bf565b60405180910390a260d060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663595c6a676040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156120fe57600080fd5b505af1158015612112573d6000803e3d6000fd5b505050505050505050565b61213461212f368790038701876143f7565b612d34565b5050505050565b60008181526097602052604081206108b2906130af565b7fced6982f480260bdd8ad5cb18ff2854f0306d78d904ad6cc107e8f3a0f526c1861217c81612c4d565b8173ffffffffffffffffffffffffffffffffffffffff81166121ca576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60cf80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091556040805160208101929092527fcec5afe700000000000000000000000000000000000000000000000000000000917f01d854e8dde9402801a4c6f2840193465752abfad61e0bb7c4258d526ae42e749101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261229691614414565b60405180910390a2505050565b6000828152606560205260409020600101546122be81612c4d565b610db88383612c79565b7fced6982f480260bdd8ad5cb18ff2854f0306d78d904ad6cc107e8f3a0f526c186122f281612c4d565b811580612300575061080082115b15612337576040517fc52a9bd300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60ce82905560408051602081018490527fe41beeda00000000000000000000000000000000000000000000000000000000917f01d854e8dde9402801a4c6f2840193465752abfad61e0bb7c4258d526ae42e749101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526111709161445b565b7ffdd95c635b6fde1e24676722ae45d4e9072f4947c3c68d69c7de01654c8405096123ee81612c4d565b82600003612428576040517fcab1c3df00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60c9548310612466576040517fa2720e8300000000000000000000000000000000000000000000000000000000815260048101849052602401610974565b600060c9848154811061247b5761247b613cdc565b6000918252602091829020600390910201915061249a90840184613d0b565b815467ffffffffffffffff90811691161415806124e157506124c26040840160208501613d0b565b815468010000000000000000900467ffffffffffffffff908116911614155b15612518576040517f30af5f6100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61252c612526600186613fca565b846108b8565b6001810154600090819070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1661256c60c0870160a08801613d91565b6fffffffffffffffffffffffffffffffff1611156125de57600183015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff166125bf60c0870160a08801613d91565b6125c99190613f35565b6fffffffffffffffffffffffffffffffff1691505b60018301546fffffffffffffffffffffffffffffffff1661260560a0870160808801613d91565b6fffffffffffffffffffffffffffffffff1611156126635760018301546fffffffffffffffffffffffffffffffff1661264460a0870160808801613d91565b61264e9190613f35565b6fffffffffffffffffffffffffffffffff1690505b8460c9878154811061267757612677613cdc565b9060005260206000209060030201818161269191906140cd565b905050857fbf4fd4e67b3409061e5be46d3e4b2b7c8edfad56ccfc8131e0cc7ffd79e104a5866040516126c491906144c8565b60405180910390a260008211806126db5750600081115b156127735760d2546040517f8846405d00000000000000000000000000000000000000000000000000000000815260048101849052602481018390526000604482015273ffffffffffffffffffffffffffffffffffffffff90911690638846405d90606401600060405180830381600087803b15801561275a57600080fd5b505af115801561276e573d6000803e3d6000fd5b505050505b505050505050565b7fced6982f480260bdd8ad5cb18ff2854f0306d78d904ad6cc107e8f3a0f526c186127a581612c4d565b60d482905560408051602081018490527ff0402cbf00000000000000000000000000000000000000000000000000000000917f01d854e8dde9402801a4c6f2840193465752abfad61e0bb7c4258d526ae42e749101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052611170916144d7565b6040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081019190915260c9805461288390600190613fca565b8154811061289357612893613cdc565b600091825260209182902060408051610100810182526003909302909101805467ffffffffffffffff808216855268010000000000000000820481169585019590955270010000000000000000000000000000000080820486169385019390935278010000000000000000000000000000000000000000000000009004909316606083015260018301546fffffffffffffffffffffffffffffffff808216608085015290829004811660a084015260029093015480841660c08401520490911660e0820152919050565b6040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081019190915260c982815481106129b1576129b1613cdc565b600091825260209182902060408051610100810182526003909302909101805467ffffffffffffffff808216855268010000000000000000820481169585019590955270010000000000000000000000000000000080820486169385019390935278010000000000000000000000000000000000000000000000009004909316606083015260018301546fffffffffffffffffffffffffffffffff808216608085015290829004811660a084015260029093015480841660c08401520490911660e082015292915050565b7fced6982f480260bdd8ad5cb18ff2854f0306d78d904ad6cc107e8f3a0f526c18612aa681612c4d565b64ffffffffff821664e8d4a5100080821115612aee576040517fc52a9bd300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60d580547fffffffffffffffffffffffffffffffffffffffffffff0000000000ffffffffff166501000000000064ffffffffff8716908102919091179091556040805160208101929092527ffdc482e800000000000000000000000000000000000000000000000000000000917f01d854e8dde9402801a4c6f2840193465752abfad61e0bb7c4258d526ae42e749101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052610f1b91614544565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806108b257507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316146108b2565b6110b681336130b9565b612c618282613173565b6000828152609760205260409020610db89082613267565b612c838282613289565b6000828152609760205260409020610db89082613344565b600054610100900460ff16612d32576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610974565b565b60c9546040517f3c2dada747e62514e16b7263ff08ee5566260a1a36eb50e2752f577f8f29974f90612d6790849061373b565b60405180910390a260c980546001808201835560009290925282517f66be4f155c5ef2ebd3772b228f2f00681e4ed5826cdb3b1943cc11ad15ad1d28600390920291820180546020860151604080880151606089015167ffffffffffffffff9687167fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516949094176801000000000000000093871693909302929092176fffffffffffffffffffffffffffffffff908116700100000000000000000000000000000000938716840277ffffffffffffffffffffffffffffffffffffffffffffffff16177801000000000000000000000000000000000000000000000000969094169590950292909217909255608086015160a087015190841690841680840282177f66be4f155c5ef2ebd3772b228f2f00681e4ed5826cdb3b1943cc11ad15ad1d2987015560c088015160e08901519086169516909302939093177f66be4f155c5ef2ebd3772b228f2f00681e4ed5826cdb3b1943cc11ad15ad1d2a9094019390935560d25492517f8846405d00000000000000000000000000000000000000000000000000000000815260048101919091526024810191909152604481019290925273ffffffffffffffffffffffffffffffffffffffff1690638846405d90606401600060405180830381600087803b158015612f6657600080fd5b505af1158015612134573d6000803e3d6000fd5b600080807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff85870985870292508281108382030391505080600003612fd257838281612fc857612fc86145b1565b0492505050611b66565b80841161303b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d6174683a206d756c446976206f766572666c6f7700000000000000000000006044820152606401610974565b600084868809600260036001881981018916988990049182028318808302840302808302840302808302840302808302840302808302840302918202909203026000889003889004909101858311909403939093029303949094049190911702949350505050565b6000611b668383613366565b60006108b2825490565b600082815260656020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610fd8576130f981613390565b6131048360206133af565b6040516020016131159291906145e0565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527f08c379a000000000000000000000000000000000000000000000000000000000825261097491600401614661565b600082815260656020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610fd857600082815260656020908152604080832073ffffffffffffffffffffffffffffffffffffffff85168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556132093390565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000611b668373ffffffffffffffffffffffffffffffffffffffff84166135f2565b600082815260656020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff1615610fd857600082815260656020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000611b668373ffffffffffffffffffffffffffffffffffffffff8416613641565b600082600001828154811061337d5761337d613cdc565b9060005260206000200154905092915050565b60606108b273ffffffffffffffffffffffffffffffffffffffff831660145b606060006133be836002613f5e565b6133c9906002613dae565b67ffffffffffffffff8111156133e1576133e1613918565b6040519080825280601f01601f19166020018201604052801561340b576020820181803683370190505b5090507f30000000000000000000000000000000000000000000000000000000000000008160008151811061344257613442613cdc565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f7800000000000000000000000000000000000000000000000000000000000000816001815181106134a5576134a5613cdc565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060006134e1846002613f5e565b6134ec906001613dae565b90505b6001811115613589577f303132333435363738396162636465660000000000000000000000000000000085600f166010811061352d5761352d613cdc565b1a60f81b82828151811061354357613543613cdc565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060049490941c9361358281614674565b90506134ef565b508315611b66576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610974565b6000818152600183016020526040812054613639575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556108b2565b5060006108b2565b6000818152600183016020526040812054801561372a576000613665600183613fca565b855490915060009061367990600190613fca565b90508181146136de57600086600001828154811061369957613699613cdc565b90600052602060002001549050808760000184815481106136bc576136bc613cdc565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806136ef576136ef6146a9565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506108b2565b60009150506108b2565b5092915050565b60006101008201905067ffffffffffffffff808451168352806020850151166020840152806040850151166040840152806060850151166060840152506fffffffffffffffffffffffffffffffff608084015116608083015260a08301516137b760a08401826fffffffffffffffffffffffffffffffff169052565b5060c08301516137db60c08401826fffffffffffffffffffffffffffffffff169052565b5060e083015161373460e08401826fffffffffffffffffffffffffffffffff169052565b60006020828403121561381157600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611b6657600080fd5b60006020828403121561385357600080fd5b5035919050565b6000610100828403121561386d57600080fd5b50919050565b600080610120838503121561388757600080fd5b82359150613898846020850161385a565b90509250929050565b73ffffffffffffffffffffffffffffffffffffffff811681146110b657600080fd5b600080604083850312156138d657600080fd5b8235915060208301356138e8816138a1565b809150509250929050565b60006020828403121561390557600080fd5b813562ffffff81168114611b6657600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b8035613952816138a1565b919050565b600060e0828403121561396957600080fd5b60405160e0810181811067ffffffffffffffff821117156139b3577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405282356139c1816138a1565b815260208301356139d1816138a1565b602082015260408301356139e4816138a1565b604082015260608301356139f7816138a1565b6060820152613a0860808401613947565b6080820152613a1960a08401613947565b60a0820152613a2a60c08401613947565b60c08201529392505050565b67ffffffffffffffff811681146110b657600080fd5b803561395281613a36565b6fffffffffffffffffffffffffffffffff811681146110b657600080fd5b803561395281613a57565b6000610100808385031215613a9457600080fd5b6040519081019067ffffffffffffffff82118183101715613ade577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b8160405280925083359150613af282613a36565b818152613b0160208501613a4c565b6020820152613b1260408501613a4c565b6040820152613b2360608501613a4c565b6060820152613b3460808501613a75565b6080820152613b4560a08501613a75565b60a0820152613b5660c08501613a75565b60c0820152613b6760e08501613a75565b60e0820152505092915050565b6000806102008385031215613b8857600080fd5b613b928484613a80565b915061389884610100850161385a565b60005b83811015613bbd578181015183820152602001613ba5565b50506000910152565b60008151808452613bde816020860160208601613ba2565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b606081526000613c236060830186613bc6565b60208301949094525060400152919050565b600060208284031215613c4757600080fd5b813561ffff81168114611b6657600080fd5b60008060408385031215613c6c57600080fd5b50508035926020909101359150565b600060208284031215613c8d57600080fd5b813564ffffffffff81168114611b6657600080fd5b60006101008284031215613cb557600080fd5b611b66838361385a565b600060208284031215613cd157600080fd5b8135611b66816138a1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060208284031215613d1d57600080fd5b8135611b6681613a36565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b67ffffffffffffffff81811683821601908082111561373457613734613d28565b600060208284031215613d8a57600080fd5b5051919050565b600060208284031215613da357600080fd5b8135611b6681613a57565b808201808211156108b2576108b2613d28565b60408152602360408201527f7365744d6178436f6e73656e7375734c617965724c6f737350504d2875696e7460608201527f3234290000000000000000000000000000000000000000000000000000000000608082015260a060208201526000611b6660a0830184613bc6565b815467ffffffffffffffff8082168352604082811c82166020850152608083811c9092169084015260c091821c606084015260018401546fffffffffffffffffffffffffffffffff8082168386015290821c60a085015260028501549081169284019290925281901c60e0830152610100820190613734565b60408152602260408201527f7365744d696e4465706f73697450657256616c696461746f722875696e74323560608201527f3629000000000000000000000000000000000000000000000000000000000000608082015260a060208201526000611b6660a0830184613bc6565b67ffffffffffffffff82811682821603908082111561373457613734613d28565b6fffffffffffffffffffffffffffffffff82811682821603908082111561373457613734613d28565b80820281158282048414176108b2576108b2613d28565b6fffffffffffffffffffffffffffffffff81811683821601908082111561373457613734613d28565b67ffffffffffffffff818116838216028082169190828114613fc257613fc2613d28565b505092915050565b818103818111156108b2576108b2613d28565b60408152601e60408201527f7365744d696e5265706f727453697a65426c6f636b732875696e7431362900006060820152608060208201526000611b666080830184613bc6565b60408152602b60408201527f7365744d696e436f6e73656e7375734c617965724761696e506572426c6f636b60608201527f5050542875696e74343029000000000000000000000000000000000000000000608082015260a060208201526000611b6660a0830184613bc6565b6000602082840312156140a357600080fd5b81518015158114611b6657600080fd5b600081356108b281613a36565b600081356108b281613a57565b81356140d881613a36565b67ffffffffffffffff811690508154817fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000008216178355602084013561411c81613a36565b6fffffffffffffffff00000000000000008160401b16837fffffffffffffffffffffffffffffffff000000000000000000000000000000008416171784555050506141b561416c604084016140b3565b82547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1660809190911b77ffffffffffffffff0000000000000000000000000000000016178255565b61420d6141c4606084016140b3565b825477ffffffffffffffffffffffffffffffffffffffffffffffff1660c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016178255565b6001810161425e614220608085016140c0565b82547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff91909116178255565b6142ae61426d60a085016140c0565b82546fffffffffffffffffffffffffffffffff1660809190911b7fffffffffffffffffffffffffffffffff0000000000000000000000000000000016178255565b50600281016142c261422060c085016140c0565b610db861426d60e085016140c0565b80356142dc81613a36565b67ffffffffffffffff90811683526020820135906142f982613a36565b908116602084015260408201359061431082613a36565b908116604084015260608201359061432782613a36565b16606083015261433960808201613a75565b6fffffffffffffffffffffffffffffffff16608083015261435c60a08201613a75565b6fffffffffffffffffffffffffffffffff1660a083015261437f60c08201613a75565b6fffffffffffffffffffffffffffffffff1660c08301526143a260e08201613a75565b6fffffffffffffffffffffffffffffffff811660e0840152505050565b60006101608083526143d381840188613bc6565b9150506143e360208301866142d1565b610120820193909352610140015292915050565b6000610100828403121561440a57600080fd5b611b668383613a80565b60408152601960408201527f7365744f7261636c6555706461746572286164647265737329000000000000006060820152608060208201526000611b666080830184613bc6565b60408152602860408201527f73657446696e616c697a6174696f6e426c6f636b4e756d62657244656c74612860608201527f75696e7432353629000000000000000000000000000000000000000000000000608082015260a060208201526000611b6660a0830184613bc6565b61010081016108b282846142d1565b60408152602260408201527f7365744d61784465706f73697450657256616c696461746f722875696e74323560608201527f3629000000000000000000000000000000000000000000000000000000000000608082015260a060208201526000611b6660a0830184613bc6565b60408152602b60408201527f7365744d6178436f6e73656e7375734c617965724761696e506572426c6f636b60608201527f5050542875696e74343029000000000000000000000000000000000000000000608082015260a060208201526000611b6660a0830184613bc6565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351614618816017850160208801613ba2565b7f206973206d697373696e6720726f6c65200000000000000000000000000000006017918401918201528351614655816028840160208801613ba2565b01602801949350505050565b602081526000611b666020830184613bc6565b60008161468357614683613d28565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfe4e6577206465706f736974732061626f7665206d6178206465706f736974207065722076616c696461746f725265706f727420626c6f636b732062656c6f77206d696e696d756d20626f756e6443756d756c6174697665206e756d626572206f6620776974686472617761626c652076616c696461746f727320646563726561736564436f6e73656e737573206c61796572206368616e67652061626f7665206d6178206761696e436f6e73656e737573206c61796572206368616e67652062656c6f77206d696e206761696e206f72206d6178206c6f737350726f636573736564206465706f73697420616d6f756e74206465637265617365644e6577206465706f736974732062656c6f77206d696e206465706f736974207065722076616c696461746f72546f74616c206e756d626572206f662076616c696461746f727320646563726561736564a264697066735822122002845a4478c76356a45bf685ea34fff773bdbda80424704dbf5973168737016264736f6c63430008140033