0 txs
416.5k calls
constructor
constructor()
functions
combineRandomValues
purefunction combineRandomValues(bytes32 userRandomness, bytes32 providerRandomness, bytes32 blockHash) pure returns (bytes32 combinedRandomness)
constructUserCommitment
purefunction constructUserCommitment(bytes32 userRandomness) pure returns (bytes32 userCommitment)
entropyUpgradableMagic
purefunction entropyUpgradableMagic() pure returns (uint32)
getAccruedPythFees
viewfunction getAccruedPythFees() view returns (uint128 accruedPythFeesInWei)
getAdmin
viewfunction getAdmin() view returns (address)
getDefaultProvider
viewfunction getDefaultProvider() view returns (address provider)
getFee
viewfunction getFee(address provider) view returns (uint128 feeAmount)
getFeeV2
viewfunction getFeeV2() view returns (uint128 feeAmount)
getFeeV2
viewfunction getFeeV2(address provider, uint32 gasLimit) view returns (uint128 feeAmount)
getFeeV2
viewfunction getFeeV2(uint32 gasLimit) view returns (uint128 feeAmount)
getProviderInfo
viewfunction getProviderInfo(address provider) view returns (tuple info)
getProviderInfoV2
viewfunction getProviderInfoV2(address provider) view returns (tuple info)
getPythFee
viewfunction getPythFee() view returns (uint128 feeAmount)
getRequest
viewfunction getRequest(address provider, uint64 sequenceNumber) view returns (tuple req)
getRequestV2
viewfunction getRequestV2(address provider, uint64 sequenceNumber) view returns (tuple req)
MAX_GAS_LIMIT
viewfunction MAX_GAS_LIMIT() view returns (uint32)
NUM_REQUESTS_MASK
viewfunction NUM_REQUESTS_MASK() view returns (bytes1)
NUM_REQUESTS
viewfunction NUM_REQUESTS() view returns (uint8)
owner
viewfunction owner() view returns (address)
pendingOwner
viewfunction pendingOwner() view returns (address)
proposedAdmin
viewfunction proposedAdmin() view returns (address)
proxiableUUID
viewfunction proxiableUUID() view returns (bytes32)
TEN_THOUSAND
viewfunction TEN_THOUSAND() view returns (uint32)
version
purefunction version() pure returns (string)
acceptAdmin
nonpayablefunction acceptAdmin()
acceptOwnership
nonpayablefunction acceptOwnership()
advanceProviderCommitment
nonpayablefunction advanceProviderCommitment(address provider, uint64 advancedSequenceNumber, bytes32 providerContribution)
initialize
nonpayablefunction initialize(address owner, address admin, uint128 pythFeeInWei, address defaultProvider, bool prefillRequestStorage)
proposeAdmin
nonpayablefunction proposeAdmin(address newAdmin)
register
nonpayablefunction register(uint128 feeInWei, bytes32 commitment, bytes commitmentMetadata, uint64 chainLength, bytes uri)
renounceOwnership
nonpayablefunction renounceOwnership()
request
payablefunction request(address provider, bytes32 userCommitment, bool useBlockHash) payable returns (uint64 assignedSequenceNumber)
requestV2
payablefunction requestV2() payable returns (uint64 assignedSequenceNumber)
requestV2
payablefunction requestV2(address provider, bytes32 userContribution, uint32 gasLimit) payable returns (uint64)
requestV2
payablefunction requestV2(address provider, uint32 gasLimit) payable returns (uint64 assignedSequenceNumber)
requestV2
payablefunction requestV2(uint32 gasLimit) payable returns (uint64 assignedSequenceNumber)
requestWithCallback
payablefunction requestWithCallback(address provider, bytes32 userContribution) payable returns (uint64)
reveal
nonpayablefunction reveal(address provider, uint64 sequenceNumber, bytes32 userContribution, bytes32 providerContribution) returns (bytes32 randomNumber)
revealWithCallback
nonpayablefunction revealWithCallback(address provider, uint64 sequenceNumber, bytes32 userContribution, bytes32 providerContribution)
setDefaultGasLimit
nonpayablefunction setDefaultGasLimit(uint32 gasLimit)
setDefaultProvider
nonpayablefunction setDefaultProvider(address newDefaultProvider)
setFeeManager
nonpayablefunction setFeeManager(address manager)
setMaxNumHashes
nonpayablefunction setMaxNumHashes(uint32 maxNumHashes)
setProviderFee
nonpayablefunction setProviderFee(uint128 newFeeInWei)
setProviderFeeAsFeeManager
nonpayablefunction setProviderFeeAsFeeManager(address provider, uint128 newFeeInWei)
setProviderUri
nonpayablefunction setProviderUri(bytes newUri)
setPythFee
nonpayablefunction setPythFee(uint128 newPythFee)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
upgradeTo
nonpayablefunction upgradeTo(address newImplementation)
upgradeToAndCall
payablefunction upgradeToAndCall(address newImplementation, bytes data) payable
withdraw
nonpayablefunction withdraw(uint128 amount)
withdrawAsFeeManager
nonpayablefunction withdrawAsFeeManager(address provider, uint128 amount)
withdrawFee
nonpayablefunction withdrawFee(address targetAddress, uint128 amount)
events
AdminChanged
event AdminChanged(address previousAdmin, address newAdmin)
BeaconUpgraded
event BeaconUpgraded(address indexed beacon)
CallbackFailed
event CallbackFailed(address indexed provider, address indexed requestor, uint64 indexed sequenceNumber, bytes32 userRandomNumber, bytes32 providerRevelation, bytes32 randomNumber, bytes errorCode)
ContractUpgraded
event ContractUpgraded(address oldImplementation, address newImplementation)
DefaultProviderSet
event DefaultProviderSet(address oldDefaultProvider, address newDefaultProvider)
FeeWithdrawn
event FeeWithdrawn(address targetAddress, uint256 amount)
Initialized
event Initialized(uint8 version)
NewAdminAccepted
event NewAdminAccepted(address oldAdmin, address newAdmin)
NewAdminProposed
event NewAdminProposed(address oldAdmin, address newAdmin)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
OwnershipTransferStarted
event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner)
ProviderDefaultGasLimitUpdated
event ProviderDefaultGasLimitUpdated(address indexed provider, uint32 oldDefaultGasLimit, uint32 newDefaultGasLimit, bytes extraArgs)
ProviderDefaultGasLimitUpdated
event ProviderDefaultGasLimitUpdated(address indexed provider, uint32 oldDefaultGasLimit, uint32 newDefaultGasLimit)
ProviderFeeManagerUpdated
event ProviderFeeManagerUpdated(address indexed provider, address oldFeeManager, address newFeeManager, bytes extraArgs)
ProviderFeeManagerUpdated
event ProviderFeeManagerUpdated(address provider, address oldFeeManager, address newFeeManager)
ProviderFeeUpdated
event ProviderFeeUpdated(address indexed provider, uint128 oldFee, uint128 newFee, bytes extraArgs)
ProviderFeeUpdated
event ProviderFeeUpdated(address provider, uint128 oldFee, uint128 newFee)
ProviderMaxNumHashesAdvanced
event ProviderMaxNumHashesAdvanced(address indexed provider, uint32 oldMaxNumHashes, uint32 newMaxNumHashes, bytes extraArgs)
ProviderMaxNumHashesAdvanced
event ProviderMaxNumHashesAdvanced(address provider, uint32 oldMaxNumHashes, uint32 newMaxNumHashes)
ProviderUriUpdated
event ProviderUriUpdated(address indexed provider, bytes oldUri, bytes newUri, bytes extraArgs)
ProviderUriUpdated
event ProviderUriUpdated(address provider, bytes oldUri, bytes newUri)
PythFeeSet
event PythFeeSet(uint256 oldPythFee, uint256 newPythFee)
Registered
event Registered((uint128 feeInWei, uint128 accruedFeesInWei, bytes32 originalCommitment, uint64 originalCommitmentSequenceNumber, bytes commitmentMetadata, bytes uri, uint64 endSequenceNumber, uint64 sequenceNumber, bytes32 currentCommitment, uint64 currentCommitmentSequenceNumber, address feeManager, uint32 maxNumHashes) provider)
Registered
event Registered(address indexed provider, bytes extraArgs)
Requested
event Requested((address provider, uint64 sequenceNumber, uint32 numHashes, bytes32 commitment, uint64 blockNumber, address requester, bool useBlockhash, bool isRequestWithCallback) request)
Requested
event Requested(address indexed provider, address indexed caller, uint64 indexed sequenceNumber, bytes32 userContribution, uint32 gasLimit, bytes extraArgs)
RequestedWithCallback
event RequestedWithCallback(address indexed provider, address indexed requestor, uint64 indexed sequenceNumber, bytes32 userRandomNumber, (address provider, uint64 sequenceNumber, uint32 numHashes, bytes32 commitment, uint64 blockNumber, address requester, bool useBlockhash, bool isRequestWithCallback) request)
Revealed
event Revealed((address provider, uint64 sequenceNumber, uint32 numHashes, bytes32 commitment, uint64 blockNumber, address requester, bool useBlockhash, bool isRequestWithCallback) request, bytes32 userRevelation, bytes32 providerRevelation, bytes32 blockHash, bytes32 randomNumber)
Revealed
event Revealed(address indexed provider, address indexed caller, uint64 indexed sequenceNumber, bytes32 randomNumber, bytes32 userContribution, bytes32 providerContribution, bool callbackFailed, bytes callbackReturnValue, uint32 callbackGasUsed, bytes extraArgs)
RevealedWithCallback
event RevealedWithCallback((address provider, uint64 sequenceNumber, uint32 numHashes, bytes32 commitment, uint64 blockNumber, address requester, bool useBlockhash, bool isRequestWithCallback) request, bytes32 userRandomNumber, bytes32 providerRevelation, bytes32 randomNumber)
Upgraded
event Upgraded(address indexed implementation)
Withdrawal
event Withdrawal(address indexed provider, address indexed recipient, uint128 withdrawnAmount, bytes extraArgs)
Withdrawal
event Withdrawal(address provider, address recipient, uint128 withdrawnAmount)
errors
AssertionFailure
error AssertionFailure()
BlockhashUnavailable
error BlockhashUnavailable()
IncorrectRevelation
error IncorrectRevelation()
InsufficientFee
error InsufficientFee()
InsufficientGas
error InsufficientGas()
InvalidRevealCall
error InvalidRevealCall()
InvalidUpgradeMagic
error InvalidUpgradeMagic()
LastRevealedTooOld
error LastRevealedTooOld()
MaxGasLimitExceeded
error MaxGasLimitExceeded()
NoSuchProvider
error NoSuchProvider()
NoSuchRequest
error NoSuchRequest()
OutOfRandomness
error OutOfRandomness()
Unauthorized
error Unauthorized()
UpdateTooOld
error UpdateTooOld()
creation bytecode
0x60a06040523060805234801561001457600080fd5b50600054610100900460ff16158080156100355750600054600160ff909116105b8061004f5750303b15801561004f575060005460ff166001145b6100b65760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff1916600117905580156100d9576000805461ff0019166101001790555b801561011f576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50608051615d75610157600039600081816114b2015281816114f20152818161210c0152818161214c01526123190152615d756000f3fe60806040526004361061031a5760003560e01c80637ab2ac36116101ab578063b88c9148116100f7578063de4478ec11610095578063e3f5aa511161006f578063e3f5aa5114610992578063f1ef21c3146109a7578063f2fde38b146109c7578063f77b45e1146109e757600080fd5b8063de4478ec14610934578063e15dbddc14610954578063e30c39781461097457600080fd5b8063c970835c116100d1578063c970835c146108b1578063ca1642e1146108d6578063cd3474d7146108f6578063ce1aad231461091e57600080fd5b8063b88c914814610851578063c03c035d14610871578063c715aa2e1461089157600080fd5b80638da5cb5b1161016457806393cbf2171161013e57806393cbf217146107de57806396f0d6e4146107f1578063ace63a7e14610811578063b469f1c91461083157600080fd5b80638da5cb5b146107795780639017cd46146107975780639371df51146107be57600080fd5b80637ab2ac36146106c85780637b43155d146107005780637e0020af146107085780638204b67a1461072657806382ee990c1461073b57806384a96f7e1461075957600080fd5b806338b049c61161026a57806354fd4d5011610223578063715018a6116101fd578063715018a614610644578063754a3600146106595780637583902f1461068657806379ba5097146106b357600080fd5b806354fd4d50146105c55780636151ab1f146105f95780636e9960c31461062657600080fd5b806338b049c61461051d5780633d30bc0e1461053d578063472d35b91461055d5780634f1ef2861461057d578063524b6f701461059057806352d1902d146105b057600080fd5b806314e82e8c116102d75780632f9b787b116102b15780632f9b787b1461047d578063308fe218146104aa57806332f751ec146104ca5780633659cfe6146104fd57600080fd5b806314e82e8c146103d957806319cb825f14610439578063229ecacd1461044c57600080fd5b806302387a7b1461031f578063092c1c99146103415780630bed189f146103615780630e18b681146103915780630e33da29146103a6578063147bf6c4146103b9575b600080fd5b34801561032b57600080fd5b5061033f61033a366004614d14565b6109fa565b005b34801561034d57600080fd5b5061033f61035c366004614d56565b610bf4565b61037461036f366004614dcd565b610e19565b6040516001600160401b0390911681526020015b60405180910390f35b34801561039d57600080fd5b5061033f610e44565b6103746103b4366004614dea565b610ed9565b3480156103c557600080fd5b5061033f6103d4366004614e21565b610eee565b3480156103e557600080fd5b5061042b6103f4366004614e3c565b6040805160208082019590955280820193909352606080840192909252805180840390920182526080909201909152805191012090565b604051908152602001610388565b610374610447366004614e68565b610fa9565b34801561045857600080fd5b50610464601f60f81b81565b6040516001600160f81b03199091168152602001610388565b34801561048957600080fd5b5061049d610498366004614e21565b610fb7565b6040516103889190614ee2565b3480156104b657600080fd5b5061033f6104c536600461501a565b611224565b3480156104d657600080fd5b50610160546001600160a01b03165b6040516001600160a01b039091168152602001610388565b34801561050957600080fd5b5061033f610518366004614e21565b6114a8565b34801561052957600080fd5b5061033f6105383660046150ac565b6115d3565b34801561054957600080fd5b5061033f61055836600461514b565b611985565b34801561056957600080fd5b5061033f610578366004614e21565b611ffa565b61033f61058b3660046151a3565b612102565b34801561059c57600080fd5b5061033f6105ab366004614dcd565b61221e565b3480156105bc57600080fd5b5061042b61230c565b3480156105d157600080fd5b5060408051808201825260058152640322e302e360dc1b60208201529051610388919061526a565b34801561060557600080fd5b5061061961061436600461527d565b6123bf565b604051610388919061533d565b34801561063257600080fd5b5060fb546001600160a01b03166104e5565b34801561065057600080fd5b5061033f612474565b34801561066557600080fd5b5061067961067436600461527d565b612488565b604051610388919061534c565b34801561069257600080fd5b506106a66106a1366004614e21565b61257d565b604051610388919061540a565b3480156106bf57600080fd5b5061033f612602565b3480156106d457600080fd5b506106e86106e3366004614dea565b61267c565b6040516001600160801b039091168152602001610388565b61037461269f565b34801561071457600080fd5b5060fc546001600160801b03166106e8565b34801561073257600080fd5b506106e86126ca565b34801561074757600080fd5b5060fd546001600160a01b03166104e5565b34801561076557600080fd5b5061033f610774366004614dcd565b6126e8565b34801561078557600080fd5b506033546001600160a01b03166104e5565b3480156107a357600080fd5b506107ac602081565b60405160ff9091168152602001610388565b3480156107ca57600080fd5b5061042b6107d936600461514b565b6127dc565b6103746107ec36600461552a565b612952565b3480156107fd57600080fd5b5061033f61080c366004615566565b612a4d565b34801561081d57600080fd5b5061033f61082c366004614d14565b612bb5565b34801561083d57600080fd5b5061033f61084c3660046155a3565b612c9d565b34801561085d57600080fd5b506106e861086c366004614e21565b612e17565b34801561087d57600080fd5b5061033f61088c36600461501a565b612e24565b34801561089d57600080fd5b5061042b6108ac3660046155e4565b612f5b565b3480156108bd57600080fd5b5060fc54600160801b90046001600160801b03166106e8565b3480156108e257600080fd5b506106e86108f1366004614dcd565b612f8d565b34801561090257600080fd5b5063666972655b60405163ffffffff9091168152602001610388565b34801561092a57600080fd5b5061090961271081565b34801561094057600080fd5b5061033f61094f366004614e21565b612faa565b34801561096057600080fd5b5061033f61096f366004614d14565b61306d565b34801561098057600080fd5b506065546001600160a01b03166104e5565b34801561099e57600080fd5b506109096130cf565b3480156109b357600080fd5b5061033f6109c236600461501a565b6130e0565b3480156109d357600080fd5b5061033f6109e2366004614e21565b6132b0565b6103746109f53660046155fd565b613321565b33600090815261015f6020526040902080546001600160801b03808416600160801b909204161015610a6a5760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b60448201526064015b60405180910390fd5b805482908290601090610a8e908490600160801b90046001600160801b0316615653565b92506101000a8154816001600160801b0302191690836001600160801b031602179055506000336001600160a01b0316836001600160801b031660405160006040518083038185875af1925050503d8060008114610b08576040519150601f19603f3d011682016040523d82523d6000602084013e610b0d565b606091505b5050905080610b5e5760405162461bcd60e51b815260206004820152601f60248201527f7769746864726177616c20746f206d73672e73656e646572206661696c6564006044820152606401610a61565b604080513380825260208201526001600160801b0385168183015290517f02128911bc7070fd6c100b116c2dd9a3bb6bf132d5259a65ca8d0c86ccd78f499181900360600190a160408051602081018252600081529051339182917f1df589989558acb66e48be55ae76b555f1075333b1ced9e827a685ae2821967f91610be791889190615672565b60405180910390a3505050565b600054610100900460ff1615808015610c145750600054600160ff909116105b80610c2e5750303b158015610c2e575060005460ff166001145b610c915760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610a61565b6000805460ff191660011790558015610cb4576000805461ff0019166101001790555b6001600160a01b038616610d025760405162461bcd60e51b81526020600482015260156024820152746f776e6572206973207a65726f206164647265737360581b6044820152606401610a61565b6001600160a01b038516610d505760405162461bcd60e51b815260206004820152601560248201527461646d696e206973207a65726f206164647265737360581b6044820152606401610a61565b6001600160a01b038316610da65760405162461bcd60e51b815260206004820152601f60248201527f64656661756c7450726f7669646572206973207a65726f2061646472657373006044820152606401610a61565b610dae6134cd565b610db66134fc565b610dc285858585613523565b610dcb8661367f565b8015610e11576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b6000610e3e610e3060fd546001600160a01b031690565b610e38613698565b84613321565b92915050565b610160546001600160a01b03163314610e6f576040516282b42960e81b815260040160405180910390fd5b60fb8054336001600160a01b031980831682179093556101608054909316909255604080516001600160a01b0390921680835260208301939093527f30aa44298c9615f6e2b6a1ca5e3802ca71d535856c686bb638c161636da6fde791015b60405180910390a150565b6000610ee783610e38613698565b9392505050565b6001600160a01b038116610f445760405162461bcd60e51b815260206004820152601860248201527f6e657741646d696e206973207a65726f206164647265737300000000000000006044820152606401610a61565b610f4c613700565b61016080546001600160a01b0319166001600160a01b0383811691821790925560fb546040805191909316815260208101919091527fed2d93e7985747cd1a4a093c2cc3bb73d0f177b81bdfd26020e8f20a97e8112e9101610ece565b6000610ee783836000613321565b604080516101a08101825260008082526020820181905291810182905260608082018390526080820181905260a082015260c0810182905260e0810182905261010081018290526101208101829052610140810182905261016081018290526101808101919091526001600160a01b038216600090815261015f602090815260409182902082516101a08101845281546001600160801b038082168352600160801b909104169281019290925260018101549282019290925260028201546001600160401b0316606082015260038201805491929160808401919061109b9061569c565b80601f01602080910402602001604051908101604052809291908181526020018280546110c79061569c565b80156111145780601f106110e957610100808354040283529160200191611114565b820191906000526020600020905b8154815290600101906020018083116110f757829003601f168201915b5050505050815260200160048201805461112d9061569c565b80601f01602080910402602001604051908101604052809291908181526020018280546111599061569c565b80156111a65780601f1061117b576101008083540402835291602001916111a6565b820191906000526020600020905b81548152906001019060200180831161118957829003601f168201915b505050918352505060058201546001600160401b038082166020840152600160401b918290048116604084015260068401546060840152600784015490811660808401529081046001600160a01b031660a0830152600160e01b900463ffffffff90811660c083015260089092015490911660e09091015292915050565b6001600160a01b038216600090815261015f6020526040812060058101549091600160401b9091046001600160401b031690036112745760405163df51c43160e01b815260040160405180910390fd5b6007810154600160401b90046001600160a01b031633146112a7576040516282b42960e81b815260040160405180910390fd5b80546001600160801b03808416600160801b9092041610156113025760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b6044820152606401610a61565b805482908290601090611326908490600160801b90046001600160801b0316615653565b92506101000a8154816001600160801b0302191690836001600160801b031602179055506000336001600160a01b0316836001600160801b031660405160006040518083038185875af1925050503d80600081146113a0576040519150601f19603f3d011682016040523d82523d6000602084013e6113a5565b606091505b50509050806113f65760405162461bcd60e51b815260206004820152601f60248201527f7769746864726177616c20746f206d73672e73656e646572206661696c6564006044820152606401610a61565b604080516001600160a01b03861681523360208201526001600160801b0385168183015290517f02128911bc7070fd6c100b116c2dd9a3bb6bf132d5259a65ca8d0c86ccd78f499181900360600190a1336001600160a01b0316846001600160a01b03167f1df589989558acb66e48be55ae76b555f1075333b1ced9e827a685ae2821967f856040518060200160405280600081525060405161149a929190615672565b60405180910390a350505050565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036114f05760405162461bcd60e51b8152600401610a61906156d6565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611522613743565b6001600160a01b0316146115485760405162461bcd60e51b8152600401610a6190615722565b6000611552613743565b905061155d8261375f565b6040805160008082526020820190925261157991849190613767565b6115816138d7565b7f2e4cc16c100f0b55e2df82ab0b1a7e294aa9cbd01b48fbaf622683fbc0507a49816115ab613743565b604080516001600160a01b039384168152929091166020830152015b60405180910390a15050565b826001600160401b03166000036115fd57604051636c16ecb360e11b815260040160405180910390fd5b33600090815261015f6020526040902080546001600160801b0319166001600160801b038916178155600181018790556005810154600282018054600160401b9092046001600160401b031667ffffffffffffffff199283168117909155600683018990556007830180549092161790556003810161167d8688836157b5565b50600581015461169e908590600160401b90046001600160401b0316615874565b60058201805467ffffffffffffffff19166001600160401b0392909216919091179055600481016116d08385836157b5565b5060018160050160088282829054906101000a90046001600160401b03166116f89190615874565b82546101009290920a6001600160401b03818102199093169183160217909155604080516101a08101825284546001600160801b038082168352600160801b909104166020820152600185015491810191909152600284015490911660608201526003830180547f641f45ac488304746c653e2635855e73663a6e524de1194447d678a58f0840129350611920929185916080840191906117989061569c565b80601f01602080910402602001604051908101604052809291908181526020018280546117c49061569c565b80156118115780601f106117e657610100808354040283529160200191611811565b820191906000526020600020905b8154815290600101906020018083116117f457829003601f168201915b5050505050815260200160048201805461182a9061569c565b80601f01602080910402602001604051908101604052809291908181526020018280546118569061569c565b80156118a35780601f10611878576101008083540402835291602001916118a3565b820191906000526020600020905b81548152906001019060200180831161188657829003601f168201915b505050918352505060058201546001600160401b038082166020840152600160401b918290048116604084015260068401546060840152600784015490811660808401529081046001600160a01b031660a0830152600160e01b900463ffffffff90811660c083015260089092015490911660e090910152613962565b60405161192d919061540a565b60405180910390a16040805160208101825260008152905133917fb5ca2dfb0bd25603299b76fefa9fbe3abdc9f951bdfb7ffd208f93ab7f8e203c91611973919061526a565b60405180910390a25050505050505050565b60006119918585613a3c565b6002810154909150600160e81b900460ff16600114806119bf57506002810154600160e81b900460ff166003145b6119dc576040516328786e4960e11b815260040160405180910390fd5b60006119e9828585613ab3565b506002830154909150600160f01b900461ffff1615801590611a1957506002820154600160e81b900460ff166001145b15611de95760028201805460ff60e81b1916600160e91b17905560006060815a6002860154909150611ace90611a5d9061271090600160f01b900461ffff16615893565b604080516001600160401b038c1660248201526001600160a01b038d8116604483015260648083018a90528351808403909101815260849092019092526020810180516001600160e01b0316630a54be3f60e31b1790526002890154600160401b9004909116919061010090613c2d565b90935091506000611ae85a611ae390846158aa565b613cb7565b60028701805460ff60e81b1916600160e81b17905590508315611c7e57604080516101208101825287546001600160a01b038082168352600160a01b82046001600160401b039081166020850152600160e01b9283900463ffffffff169484019490945260018a0154606084015260028a01549384166080840152600160401b84041660a0830152820460ff908116151560c0830152600160e81b83041660e0820152600160f01b90910461ffff166101008201527f40be225f151772416d8785647e5641a0b53507623d0ee3fb88802b7d6bdbf72890611bc890613d20565b898988604051611bdb94939291906158bd565b60405180910390a185546002870154600160a01b9091046001600160401b031690600160401b90046001600160a01b03908116908c167f2231996cc9de260d163cd345089fea7819252b40215c738556aa144a0a11ed47888c8c60008a611c4763ffffffff8b16613cb7565b60408051602081018252600081529051611c6797969594939291906158ea565b60405180910390a4611c798a8a613dbd565b611de0565b6002860154611c9b9061271090600160f01b900461ffff16615893565b6020611ca884601f615893565b611cb29190615959565b1115611dc757886001600160401b03168660020160089054906101000a90046001600160a01b03166001600160a01b03168b6001600160a01b03167fc73c4cbf6f2bace8893b1283ee0e044c059ef9b80765820f4cc22b5ace139b5b8b8b8a89604051611d22949392919061596d565b60405180910390a460028601546001600160401b038a16906001600160a01b03600160401b9091048116908c167f2231996cc9de260d163cd345089fea7819252b40215c738556aa144a0a11ed47888c8c60018a611d8563ffffffff8b16613cb7565b60408051602081018252600081529051611da597969594939291906158ea565b60405180910390a460028601805460ff60e81b1916600360e81b179055611de0565b6040516307099c5360e21b815260040160405180910390fd5b50505050610e11565b6002820154604080516101208101825284546001600160a01b038082168352600160a01b82046001600160401b039081166020850152600160e01b9283900463ffffffff1694840194909452600187015460608401529284166080830152600160401b840490921660a0820181905291830460ff908116151560c0830152600160e81b84041660e0820152600160f01b90920461ffff1661010083015290600090611e9390613d20565b9050611e9f8888613dbd565b813b60005a90508115611f1e57604051630a54be3f60e31b81526001600160401b038a1660048201526001600160a01b038b81166024830152604482018790528516906352a5f1f890606401600060405180830381600087803b158015611f0557600080fd5b505af1158015611f19573d6000803e3d6000fd5b505050505b6000611f2e5a611ae390846158aa565b90507f40be225f151772416d8785647e5641a0b53507623d0ee3fb88802b7d6bdbf728848a8a89604051611f6594939291906158bd565b60405180910390a1896001600160401b0316856001600160a01b03168c6001600160a01b03167f2231996cc9de260d163cd345089fea7819252b40215c738556aa144a0a11ed47898d8d6000604051806020016040528060008152508960405180602001604052806000815250604051611fe597969594939291906158ea565b60405180910390a45050505050505050505050565b33600090815261015f6020526040812060058101549091600160401b9091046001600160401b031690036120415760405163df51c43160e01b815260040160405180910390fd5b6007810180546001600160a01b03848116600160401b818102600160401b600160e01b031985161790945560408051338152949093049091166020840181905291830152907f2c0fa560a1e6d11854f3f965d262e756c1b6d23d2bfe8f0e54b7807dd79b946b9060600160405180910390a16040805160208101825260008152905133917fbdb4fa4c43ffef3ac259c0c209d3cecacc9579c559ec0273193f24d416c64377916120f591859188919061599c565b60405180910390a2505050565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016300361214a5760405162461bcd60e51b8152600401610a61906156d6565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661217c613743565b6001600160a01b0316146121a25760405162461bcd60e51b8152600401610a6190615722565b60006121ac613743565b90506121b78361375f565b6121c383836001613767565b6121cb6138d7565b7f2e4cc16c100f0b55e2df82ab0b1a7e294aa9cbd01b48fbaf622683fbc0507a49816121f5613743565b604080516001600160a01b039384168152929091166020830152015b60405180910390a1505050565b33600090815261015f6020526040812060058101549091600160401b9091046001600160401b031690036122655760405163df51c43160e01b815260040160405180910390fd5b61226e82613e5c565b5060088101805463ffffffff84811663ffffffff19831681179093556040805191909216808252602082019390935233917feb28196cc9984ca7d8c99b41fa943501351706fda54b50f983e60fdc08aa94a0910160405180910390a26040805160208101825260008152905133917f92ec5e11b09fd199655525004a1861acf5dd00f3a672ea8c750ec8bbf7ef6190916120f59185918891906159c8565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146123ac5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610a61565b50600080516020615cf983398151915290565b6123c7614c51565b610ee76123d48484613ee4565b604080516101208101825282546001600160a01b038082168352600160a01b82046001600160401b039081166020850152600160e01b9283900463ffffffff1694840194909452600185015460608401526002909401549283166080830152600160401b830490931660a082015291810460ff908116151560c0840152600160e81b82041660e0830152600160f01b900461ffff16610100820152613d20565b61247c613f67565b612486600061367f565b565b6040805161012081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081018290526101008101919091526124db8383613ee4565b604080516101208101825282546001600160a01b038082168352600160a01b82046001600160401b039081166020850152600160e01b9283900463ffffffff1694840194909452600185015460608401526002909401549283166080830152600160401b830490931660a082015291810460ff908116151560c0840152600160e81b82041660e0830152600160f01b900461ffff166101008201529392505050565b612585614c95565b6001600160a01b038216600090815261015f602090815260409182902082516101a08101845281546001600160801b038082168352600160801b909104169281019290925260018101549282019290925260028201546001600160401b03166060820152600382018054610e3e939160808401916117989061569c565b60655433906001600160a01b031681146126705760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610a61565b6126798161367f565b50565b60fc546000906001600160801b03166126958484613fc1565b610ee791906159f3565b60006126c56126b660fd546001600160a01b031690565b6126be613698565b6000613321565b905090565b60006126c56126e160fd546001600160a01b031690565b600061267c565b33600090815261015f6020526040812060058101549091600160401b9091046001600160401b0316900361272f5760405163df51c43160e01b815260040160405180910390fd5b60078101805463ffffffff848116600160e01b8181026001600160e01b0385161790945560408051338152949093049091166020840181905291830152907f6a5a36f1400b17f2daef49faa26a5133cbcc952cffc0e7f426f3c84d6d207f609060600160405180910390a16040805160208101825260008152905133917f506807cbd0dcbf141d2ec9b63b6891a27db1eb2d769dffe38cce227ff6a704f4916120f59185918891906159c8565b6000806127e98686613a3c565b6002810154909150600160e81b900460ff1615612819576040516328786e4960e11b815260040160405180910390fd5b6002810154600160401b90046001600160a01b0316331461284c576040516282b42960e81b815260040160405180910390fd5b6000612859828686613ab3565b604080516101208101825285546001600160a01b038082168352600160a01b82046001600160401b039081166020850152600160e01b9283900463ffffffff16948401949094526001880154606084015260028801549384166080840152600160401b84041660a0830152820460ff908116151560c0830152600160e81b83041660e0820152600160f01b90910461ffff1661010082015291945091507f39c729f66b0c8aa543d92bc83fb7e0914c9701326b96365b593f28ba706976e49061292190613d20565b86868487604051612936959493929190615a12565b60405180910390a16129488787613dbd565b5050949350505050565b60008061296385858560008061426a565b805460408051610120810182526001600160a01b038084168252600160a01b84046001600160401b0390811660208401819052600160e01b9586900463ffffffff16948401949094526001860154606084015260028601549081166080840152600160401b810490911660a083015292830460ff908116151560c0830152600160e81b84041660e0820152600160f01b90920461ffff1661010083015293509091507f20e2c2fc72b2cb9fbae9d7d8fd4bdf5bdcc4579043e1e9854e2baf045b6a31d390612a3090613d20565b604051612a3d919061533d565b60405180910390a1509392505050565b6001600160a01b038316600090815261015f6020526040902060078101546001600160401b0390811690841611612a9757604051635e5b3f1b60e01b815260040160405180910390fd5b60058101546001600160401b0390811690841610612ac857604051636c16ecb360e11b815260040160405180910390fd5b6007810154600090612af590612ae7906001600160401b031686615a47565b6001600160401b0316613cb7565b90506000612b098263ffffffff1685614628565b905082600601548114612b2f5760405163b8be1a8d60e01b815260040160405180910390fd5b60078301805467ffffffffffffffff19166001600160401b03878116918217909255600685018690556005850154600160401b900490911611610e11576007830154612b85906001600160401b03166001615874565b8360050160086101000a8154816001600160401b0302191690836001600160401b03160217905550505050505050565b33600090815261015f6020526040812060058101549091600160401b9091046001600160401b03169003612bfc5760405163df51c43160e01b815260040160405180910390fd5b80546001600160801b038381166001600160801b0319831681178455604080513381529290931660208301819052928201527f40873158a9e1446599b5dee14bfd652e53a6f48605dab5aaac3b8a12a56c7fce9060600160405180910390a16040805160208101825260008152905133917f2b876e4a8eb641937e15aa02b7b90d376ce4661b51337661d76d330d23aed536916120f5918591889190615a66565b33600090815261015f6020526040812060058101549091600160401b9091046001600160401b03169003612ce45760405163df51c43160e01b815260040160405180910390fd5b6000816004018054612cf59061569c565b80601f0160208091040260200160405190810160405280929190818152602001828054612d219061569c565b8015612d6e5780601f10612d4357610100808354040283529160200191612d6e565b820191906000526020600020905b815481529060010190602001808311612d5157829003601f168201915b505050505090508383836004019182612d889291906157b5565b507f1efad1d69168ff2e29c45661eed77d2de2b8c95f412cd22a65b15a38e24f708833828686604051612dbe9493929190615ac0565b60405180910390a16040805160208101825260008152905133917f61e70b9f3f2fcdff8071ea3b7dba108a38e7c1e59d0d9ddf60462a6c4cee85ea91612e0991859189918991615b02565b60405180910390a250505050565b6000610e3e82600061267c565b6001600160a01b038216600090815261015f6020526040812060058101549091600160401b9091046001600160401b03169003612e745760405163df51c43160e01b815260040160405180910390fd5b6007810154600160401b90046001600160a01b03163314612ea7576040516282b42960e81b815260040160405180910390fd5b80546001600160801b038381166001600160801b0319831681178455604080516001600160a01b03881681529290931660208301819052928201527f40873158a9e1446599b5dee14bfd652e53a6f48605dab5aaac3b8a12a56c7fce9060600160405180910390a1836001600160a01b03167f2b876e4a8eb641937e15aa02b7b90d376ce4661b51337661d76d330d23aed536828560405180602001604052806000815250604051612e0993929190615a66565b600081604051602001612f7091815260200190565b604051602081830303815290604052805190602001209050919050565b6000610e3e612fa460fd546001600160a01b031690565b8361267c565b6001600160a01b03811661300b5760405162461bcd60e51b815260206004820152602260248201527f6e657744656661756c7450726f7669646572206973207a65726f206164647265604482015261737360f01b6064820152608401610a61565b613013613700565b60fd80546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527f3db81271b05fbf6a656114a99415fdfd27fadb1a34c9a139eb029fba4f6dfdb091016115c7565b613075613700565b60fc80546001600160801b038381166001600160801b031983168117909355604080519190921680825260208201939093527fb73e06a6ae37bdd616d5087ef40ccc7ca25ea84e7cfa93dbf9a2815e2cdde67491016115c7565b6130dd61271061ffff615b3c565b81565b6001600160a01b0382166131365760405162461bcd60e51b815260206004820152601d60248201527f74617267657441646472657373206973207a65726f20616464726573730000006044820152606401610a61565b61313e613700565b60fc546001600160801b03600160801b909104811690821611156131745760405162976f7560e21b815260040160405180910390fd5b60fc8054829190601090613199908490600160801b90046001600160801b0316615653565b92506101000a8154816001600160801b0302191690836001600160801b031602179055506000826001600160a01b0316826001600160801b031660405160006040518083038185875af1925050503d8060008114613213576040519150601f19603f3d011682016040523d82523d6000602084013e613218565b606091505b50509050806132695760405162461bcd60e51b815260206004820152601760248201527f4661696c656420746f20776974686472617720666565730000000000000000006044820152606401610a61565b604080516001600160a01b03851681526001600160801b03841660208201527f78473f3f373f7673597f4f0fa5873cb4d375fea6d4339ad6b56dbd411513cb3f9101612211565b6132b8613f67565b606580546001600160a01b0383166001600160a01b031990911681179091556132e96033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b60008061333b8561333186612f5b565b600060018761426a565b8054600282015460408051610120810182526001600160a01b038085168252600160a01b85046001600160401b0390811660208401819052600160e01b9687900463ffffffff16948401949094526001870154606084015284166080830152600160401b8404811660a0830181905294840460ff908116151560c0840152600160e81b85041660e0830152600160f01b90930461ffff1661010082015293945092908816907fa4c85ab66677ced5caabbbba151714887944b9e0fee05f320e42a1b13a01fbc690889061340d90613d20565b60405161341b929190615b5b565b60405180910390a480546002820154600160a01b9091046001600160401b031690600160401b81046001600160a01b0390811691908816907f209bbfee3369097c31c36ce42994bdcac394866c881f603fb6296f240d6c37db90889061348f9061271090600160f01b900461ffff16615b3c565b604080516020810182526000815290516134ab93929190615b70565b60405180910390a454600160a01b90046001600160401b031690509392505050565b600054610100900460ff166134f45760405162461bcd60e51b8152600401610a6190615b95565b61248661466c565b600054610100900460ff166124865760405162461bcd60e51b8152600401610a6190615b95565b6001600160a01b0384166135715760405162461bcd60e51b815260206004820152601560248201527461646d696e206973207a65726f206164647265737360581b6044820152606401610a61565b6001600160a01b0382166135c75760405162461bcd60e51b815260206004820152601f60248201527f64656661756c7450726f7669646572206973207a65726f2061646472657373006044820152606401610a61565b60fb80546001600160a01b038087166001600160a01b0319928316179092556001600160801b03851660fc5560fd80549285169290911691909117905580156136795760005b602060ff8216101561367757600060fe60ff83166020811061363157613631615be0565b6003020180546001600160a01b0319166001908117825560028201805467ffffffffffffffff19166104d217905561012360f01b9181019190915591909101905061360d565b505b50505050565b606580546001600160a01b03191690556126798161469c565b610161546040516000916136dd9142914491339190602001938452602084019290925260601b6bffffffffffffffffffffffff19166040830152605482015260740190565b60408051601f198184030181529190528051602090910120610161819055919050565b6033546001600160a01b03163314801590613726575060fb546001600160a01b03163314155b15612486576040516282b42960e81b815260040160405180910390fd5b600080516020615cf9833981519152546001600160a01b031690565b612679613f67565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff161561379f5761379a836146ee565b505050565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156137f9575060408051601f3d908101601f191682019092526137f691810190615bf6565b60015b61385c5760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610a61565b600080516020615cf983398151915281146138cb5760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610a61565b5061379a83838361478a565b306001600160a01b031663cd3474d76040518163ffffffff1660e01b8152600401602060405180830381865afa158015613915573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139399190615c0f565b63ffffffff1663666972651461248657604051635a31e73d60e11b815260040160405180910390fd5b61396a614c95565b60405180610180016040528083600001516001600160801b0316815260200183602001516001600160801b031681526020018360400151815260200183606001516001600160401b03168152602001836080015181526020018360a0015181526020018360c001516001600160401b031681526020018360e001516001600160401b0316815260200183610100015181526020018361012001516001600160401b031681526020018361014001516001600160a01b0316815260200183610160015163ffffffff168152509050919050565b6000613a488383613ee4565b8054909150600160a01b90046001600160401b03161580613a76575080546001600160a01b03848116911614155b80613a95575080546001600160401b03838116600160a01b9092041614155b15610e3e57604051636211b9a960e11b815260040160405180910390fd5b825460009081908190613ad390600160e01b900463ffffffff1685614628565b90506000613ae086612f5b565b905086600101548183604051602001613b03929190918252602082015260400190565b6040516020818303038152906040528051906020012014613b375760405163b8be1a8d60e01b815260040160405180910390fd5b600287015460009350600160e01b900460ff1615613b7f5760028701546001600160401b03164080613b7c5760405163492aae0760e11b815260040160405180910390fd5b92505b6040805160208082018990528183018890526060808301879052835180840390910181526080909201909252805191012087546001600160a01b038116600090815261015f602052604090206007810154929650916001600160401b03600160a01b909204821691161015613c22578754600782018054600160a01b9092046001600160401b031667ffffffffffffffff19909216919091179055600681018690555b505050935093915050565b6000606060008060008661ffff166001600160401b03811115613c5257613c5261518d565b6040519080825280601f01601f191660200182016040528015613c7c576020820181803683370190505b50905060008087516020890160008d8df191503d925086831115613c9e578692505b828152826000602083013e909890975095505050505050565b600063ffffffff821115613d1c5760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203360448201526532206269747360d01b6064820152608401610a61565b5090565b613d28614c51565b60405180610100016040528083600001516001600160a01b0316815260200183602001516001600160401b03168152602001836040015163ffffffff1681526020018360600151815260200183608001516001600160401b031681526020018360a001516001600160a01b031681526020018360c001511515815260200160008460e0015160ff161115158152509050919050565b600080613dca84846147af565b9092509050600060fe60ff831660208110613de757613de7615be0565b6003020180549091506001600160a01b038681169116148015613e1d575080546001600160401b03858116600160a01b90920416145b15613e3957805467ffffffffffffffff60a01b19168155613677565b5050600090815261015e6020526040812081815560018101829055600201555050565b6000613e6c61271061ffff615b3c565b63ffffffff168263ffffffff161115613e9857604051639376b93b60e01b815260040160405180910390fd5b6000613ea661271084615c2c565b905063ffffffff8316613ebb61271083615b3c565b63ffffffff161015613ed557613ed2600182615c54565b90505b610ee78163ffffffff16614808565b6000806000613ef385856147af565b909250905060fe60ff821660208110613f0e57613f0e615be0565b6003020180549093506001600160a01b038681169116148015613f44575082546001600160401b03858116600160a01b90920416145b15613f50575050610e3e565b50600090815261015e602052604090209392505050565b6033546001600160a01b031633146124865760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a61565b6001600160a01b038216600090815261015f6020908152604080832081516101a08101835281546001600160801b038082168352600160801b909104169381019390935260018101549183019190915260028101546001600160401b0316606083015260038101805484939291608084019161403c9061569c565b80601f01602080910402602001604051908101604052809291908181526020018280546140689061569c565b80156140b55780601f1061408a576101008083540402835291602001916140b5565b820191906000526020600020905b81548152906001019060200180831161409857829003601f168201915b505050505081526020016004820180546140ce9061569c565b80601f01602080910402602001604051908101604052809291908181526020018280546140fa9061569c565b80156141475780601f1061411c57610100808354040283529160200191614147565b820191906000526020600020905b81548152906001019060200180831161412a57829003601f168201915b505050918352505060058201546001600160401b038082166020840152600160401b918290048116604084015260068401546060840152600784015490811660808401529081046001600160a01b031660a0830152600160e01b900463ffffffff90811660c083015260089092015490911660e090910152905060006127106141cf85613e5c565b61ffff166141dd9190615b3c565b9050600082610180015163ffffffff1611801561420a575081610180015163ffffffff168163ffffffff16115b1561426157610180820151825160009163ffffffff8116919061422d9085615c70565b63ffffffff1661423d9190615c8c565b6142479190615cae565b83519091506142579082906159f3565b9350505050610e3e565b50519050610e3e565b6001600160a01b038516600090815261015f602052604081206005810154600160401b90046001600160401b031682036142b75760405163df51c43160e01b815260040160405180910390fd5b60058101546001600160401b03600160401b82048116911681106142ee57604051633e51508560e01b815260040160405180910390fd5b60018260050160088282829054906101000a90046001600160401b03166143159190615874565b92506101000a8154816001600160401b0302191690836001600160401b031602179055506000614345898661267c565b9050806001600160801b03163410156143705760405162976f7560e21b815260040160405180910390fd5b600061437c8a87613fc1565b8454909150819085906010906143a3908490600160801b90046001600160801b03166159f3565b92506101000a8154816001600160801b0302191690836001600160801b03160217905550806143d13461486b565b6143db9190615653565b60fc80546010906143fd908490600160801b90046001600160801b03166159f3565b92506101000a8154816001600160801b0302191690836001600160801b0316021790555061442b8a846148d4565b80546001600160401b03808616600160a01b026001600160e01b03199092166001600160a01b038e1617919091178255600786015491965061447291612ae7911685615a47565b85546001600160e01b0316600160e01b63ffffffff928316810291909117875560078601540416158015906144c057506007840154855463ffffffff600160e01b9283900481169290910416115b156144de57604051635946ce3b60e11b815260040160405180910390fd5b60068401546040516144fd918b91602001918252602082015260400190565b60408051808303601f1901815291905280516020909101206001860155600285018054600160401b600160e01b03191633600160401b0217905561454043614a77565b6002860180546001600160401b039290921667ffffffffffffffff60ff60e01b011990921691909117600160e01b8a15150217905586614581576000614584565b60015b60028601805460ff92909216600160e81b0260ff60e81b19909216919091179055600884015463ffffffff166000036145cd576002850180546001600160f01b0316905561461b565b60088401546145fc9063ffffffff908116908816106145ec5786613e5c565b600885015463ffffffff16613e5c565b85600201601e6101000a81548161ffff021916908361ffff1602179055505b5050505095945050505050565b805b6001600160401b03831615610e3e57604080516020808201939093528151808203840181529082019091528051910120614665600184615a47565b925061462a565b600054610100900460ff166146935760405162461bcd60e51b8152600401610a6190615b95565b6124863361367f565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0381163b61475b5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610a61565b600080516020615cf983398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b61479383614adf565b6000825111806147a05750805b1561379a576136798383614b1f565b6040805160609390931b6bffffffffffffffffffffffff191660208085019190915260c09290921b6001600160c01b03191660348401528051601c818503018152603c9093019052815191012090600082901a601f1690565b600061ffff821115613d1c5760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203160448201526536206269747360d01b6064820152608401610a61565b60006001600160801b03821115613d1c5760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e20316044820152663238206269747360c81b6064820152608401610a61565b6000806148e184846147af565b915060fe905060ff8216602081106148fb576148fb615be0565b600302018054909250600160a01b90046001600160401b031615614a70578154600090614942906001600160a01b03811690600160a01b90046001600160401b03166147af565b50600090815261015e60205260409020835481546001600160a01b039182166001600160a01b031982168117845586546001600160e01b0319928316909117600160a01b918290046001600160401b039081169092021780855587546001600160e01b03909116600160e01b9182900463ffffffff16820217855560018089015490860155600280890180549190960180549190931667ffffffffffffffff19821681178455865491909416909317600160401b9384900490941690920292909217808355835460ff60e01b1982169083900460ff90811615159093029081178455845461ffff60e01b1990921660ff60e81b1990911617600160e81b91829004909216021780825591546001600160f01b03909216600160f01b9283900461ffff16909202919091179055505b5092915050565b60006001600160401b03821115613d1c5760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203660448201526534206269747360d01b6064820152608401610a61565b614ae8816146ee565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606001600160a01b0383163b614b875760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610a61565b600080846001600160a01b031684604051614ba29190615cdc565b600060405180830381855af49150503d8060008114614bdd576040519150601f19603f3d011682016040523d82523d6000602084013e614be2565b606091505b5091509150614c0a8282604051806060016040528060278152602001615d1960279139614c13565b95945050505050565b60608315614c22575081610ee7565b610ee78383815115614c375781518083602001fd5b8060405162461bcd60e51b8152600401610a61919061526a565b6040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081019190915290565b604080516101808101825260008082526020820181905291810182905260608082018390526080820181905260a082015260c0810182905260e0810182905261010081018290526101208101829052610140810182905261016081019190915290565b80356001600160801b0381168114614d0f57600080fd5b919050565b600060208284031215614d2657600080fd5b610ee782614cf8565b80356001600160a01b0381168114614d0f57600080fd5b80358015158114614d0f57600080fd5b600080600080600060a08688031215614d6e57600080fd5b614d7786614d2f565b9450614d8560208701614d2f565b9350614d9360408701614cf8565b9250614da160608701614d2f565b9150614daf60808701614d46565b90509295509295909350565b63ffffffff8116811461267957600080fd5b600060208284031215614ddf57600080fd5b8135610ee781614dbb565b60008060408385031215614dfd57600080fd5b614e0683614d2f565b91506020830135614e1681614dbb565b809150509250929050565b600060208284031215614e3357600080fd5b610ee782614d2f565b600080600060608486031215614e5157600080fd5b505081359360208301359350604090920135919050565b60008060408385031215614e7b57600080fd5b614e8483614d2f565b946020939093013593505050565b60005b83811015614ead578181015183820152602001614e95565b50506000910152565b60008151808452614ece816020860160208601614e92565b601f01601f19169290920160200192915050565b60208152614efc6020820183516001600160801b03169052565b60006020830151614f1860408401826001600160801b03169052565b50604083015160608301526060830151614f3d60808401826001600160401b03169052565b5060808301516101a060a0840152614f596101c0840182614eb6565b905060a0840151601f198483030160c0850152614f768282614eb6565b91505060c0840151614f9360e08501826001600160401b03169052565b5060e08401516001600160401b03811661010085015250610100840151610120840152610120840151614fd26101408501826001600160401b03169052565b506101408401516001600160a01b0381166101608501525061016084015163ffffffff81166101808501525061018084015163ffffffff81166101a08501525b509392505050565b6000806040838503121561502d57600080fd5b61503683614d2f565b915061504460208401614cf8565b90509250929050565b60008083601f84011261505f57600080fd5b5081356001600160401b0381111561507657600080fd5b60208301915083602082850101111561508e57600080fd5b9250929050565b80356001600160401b0381168114614d0f57600080fd5b600080600080600080600060a0888a0312156150c757600080fd5b6150d088614cf8565b96506020880135955060408801356001600160401b038111156150f257600080fd5b6150fe8a828b0161504d565b9096509450615111905060608901615095565b925060808801356001600160401b0381111561512c57600080fd5b6151388a828b0161504d565b989b979a50959850939692959293505050565b6000806000806080858703121561516157600080fd5b61516a85614d2f565b935061517860208601615095565b93969395505050506040820135916060013590565b634e487b7160e01b600052604160045260246000fd5b600080604083850312156151b657600080fd5b6151bf83614d2f565b915060208301356001600160401b038111156151da57600080fd5b8301601f810185136151eb57600080fd5b80356001600160401b038111156152045761520461518d565b604051601f8201601f19908116603f011681016001600160401b03811182821017156152325761523261518d565b60405281815282820160200187101561524a57600080fd5b816020840160208301376000602083830101528093505050509250929050565b602081526000610ee76020830184614eb6565b6000806040838503121561529057600080fd5b61529983614d2f565b915061504460208401615095565b60018060a01b0381511682526001600160401b03602082015116602083015263ffffffff60408201511660408301526060810151606083015260808101516152fa60808401826001600160401b03169052565b5060a081015161531560a08401826001600160a01b03169052565b5060c081015161532960c084018215159052565b5060e081015161379a60e084018215159052565b6101008101610e3e82846152a7565b81516001600160a01b031681526020808301516001600160401b0316908201526040808301516101208301916153899084018263ffffffff169052565b506060830151606083015260808301516153ae60808401826001600160401b03169052565b5060a08301516153c960a08401826001600160a01b03169052565b5060c08301516153dd60c084018215159052565b5060e08301516153f260e084018260ff169052565b50610100830151614a7061010084018261ffff169052565b602081526154246020820183516001600160801b03169052565b6000602083015161544060408401826001600160801b03169052565b5060408301516060830152606083015161546560808401826001600160401b03169052565b50608083015161018060a08401526154816101a0840182614eb6565b905060a0840151601f198483030160c085015261549e8282614eb6565b91505060c08401516154bb60e08501826001600160401b03169052565b5060e08401516001600160401b038116610100850152506101008401516101208401526101208401516154fa6101408501826001600160401b03169052565b506101408401516001600160a01b0381166101608501525061016084015163ffffffff8116610180850152615012565b60008060006060848603121561553f57600080fd5b61554884614d2f565b92506020840135915061555d60408501614d46565b90509250925092565b60008060006060848603121561557b57600080fd5b61558484614d2f565b925061559260208501615095565b929592945050506040919091013590565b600080602083850312156155b657600080fd5b82356001600160401b038111156155cc57600080fd5b6155d88582860161504d565b90969095509350505050565b6000602082840312156155f657600080fd5b5035919050565b60008060006060848603121561561257600080fd5b61561b84614d2f565b925060208401359150604084013561563281614dbb565b809150509250925092565b634e487b7160e01b600052601160045260246000fd5b6001600160801b038281168282160390811115610e3e57610e3e61563d565b6001600160801b03831681526040602082015260006156946040830184614eb6565b949350505050565b600181811c908216806156b057607f821691505b6020821081036156d057634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b601f82111561379a57806000526020600020601f840160051c810160208510156157955750805b601f840160051c820191505b8181101561367757600081556001016157a1565b6001600160401b038311156157cc576157cc61518d565b6157e0836157da835461569c565b8361576e565b6000601f84116001811461581457600085156157fc5750838201355b600019600387901b1c1916600186901b178355613677565b600083815260209020601f19861690835b828110156158455786850135825560209485019460019092019101615825565b50868210156158625760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b6001600160401b038181168382160190811115610e3e57610e3e61563d565b8082028115828204841417610e3e57610e3e61563d565b81810381811115610e3e57610e3e61563d565b61016081016158cc82876152a7565b84610100830152836101208301528261014083015295945050505050565b878152866020820152856040820152841515606082015260e06080820152600061591760e0830186614eb6565b63ffffffff851660a084015282810360c08401526159358185614eb6565b9a9950505050505050505050565b634e487b7160e01b600052601260045260246000fd5b60008261596857615968615943565b500490565b8481528360208201528260408201526080606082015260006159926080830184614eb6565b9695505050505050565b6001600160a01b03848116825283166020820152606060408201819052600090614c0a90830184614eb6565b63ffffffff8416815263ffffffff83166020820152606060408201526000614c0a6060830184614eb6565b6001600160801b038181168382160190811115610e3e57610e3e61563d565b6101808101615a2182886152a7565b856101008301528461012083015283610140830152826101608301529695505050505050565b6001600160401b038281168282160390811115610e3e57610e3e61563d565b6001600160801b03841681526001600160801b0383166020820152606060408201526000614c0a6060830184614eb6565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b0385168152606060208201819052600090615ae490830186614eb6565b8281036040840152615af7818587615a97565b979650505050505050565b606081526000615b156060830187614eb6565b8281036020840152615b28818688615a97565b90508281036040840152615af78185614eb6565b63ffffffff8181168382160290811690818114614a7057614a7061563d565b8281526101208101610ee760208301846152a7565b83815263ffffffff83166020820152606060408201526000614c0a6060830184614eb6565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b600060208284031215615c0857600080fd5b5051919050565b600060208284031215615c2157600080fd5b8151610ee781614dbb565b600063ffffffff831680615c4257615c42615943565b8063ffffffff84160491505092915050565b63ffffffff8181168382160190811115610e3e57610e3e61563d565b63ffffffff8281168282160390811115610e3e57610e3e61563d565b6001600160801b038181168382160290811690818114614a7057614a7061563d565b60006001600160801b03831680615cc757615cc7615943565b806001600160801b0384160491505092915050565b60008251615cee818460208701614e92565b919091019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212207c8716a34638aa337ebe1bdf16c11f5ff2791580f7fdab32324543a81dfcdfd964736f6c634300081d0033