0 txs
4.8k calls
constructor
constructor()
functions
ADMIN_ROLE
viewfunction ADMIN_ROLE() view returns (bytes32)
cancelWindow
viewfunction cancelWindow() view returns (uint256)
contractAddressManager
viewfunction contractAddressManager() view returns (address)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
defaultDuration
viewfunction defaultDuration() view returns (uint256)
editWindow
viewfunction editWindow() view returns (uint256)
expectedSigner
viewfunction expectedSigner() view returns (address)
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)
getRoleMembers
viewfunction getRoleMembers(bytes32 role) view returns (address[])
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
isCancellable
viewfunction isCancellable(uint256 slashId, bool isAdmin) view returns (bool)
isClosed
viewfunction isClosed(uint256 slashId) view returns (bool)
isEditable
viewfunction isEditable(uint256 slashId) view returns (bool)
isOpen
viewfunction isOpen(uint256 slashId) view returns (bool)
OWNER_ROLE
viewfunction OWNER_ROLE() view returns (bytes32)
paused
viewfunction paused() view returns (bool)
proxiableUUID
viewfunction proxiableUUID() view returns (bytes32)
signatureUsed
viewfunction signatureUsed(bytes) view returns (bool)
signatureVerifier
viewfunction signatureVerifier() view returns (address)
slashCount
viewfunction slashCount() view returns (uint256)
slashes
viewfunction slashes(uint256) view returns (uint256 id, uint256 createdAt, uint256 duration, address subject, uint256 authorProfileId, uint256 cancelledAt, uint256 amount, uint8 slashType, string comment, string metadata, tuple attestationDetails)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
targetExistsAndAllowedForId
viewfunction targetExistsAndAllowedForId(uint256 _targetId) view returns (bool exists, bool allowed)
UPGRADE_INTERFACE_VERSION
viewfunction UPGRADE_INTERFACE_VERSION() view returns (string)
addAdmin
nonpayablefunction addAdmin(address admin)
cancelSlash
nonpayablefunction cancelSlash(uint256 slashId)
createSlash
nonpayablefunction createSlash(address subject, uint256 amount, string comment, string metadata, tuple attestationDetails, uint256 randValue, bytes signature)
createSlashAdmin
nonpayablefunction createSlashAdmin(address subject, uint256 amount, string comment, string metadata, tuple attestationDetails, uint256 authorProfileId)
editSlash
nonpayablefunction editSlash(uint256 slashId, string newComment, string newMetadata)
extendSlash
nonpayablefunction extendSlash(uint256 slashId, uint256 newDuration)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
initialize
nonpayablefunction initialize(address _owner, address _admin, address _expectedSigner, address _signatureVerifier, address _contractAddressManagerAddr)
pause
nonpayablefunction pause()
removeAdmin
nonpayablefunction removeAdmin(address admin)
renounceRole
nonpayablefunction renounceRole(bytes32 role, address callerConfirmation)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
setCancelWindow
nonpayablefunction setCancelWindow(uint256 newCancelWindow)
setDefaultDuration
nonpayablefunction setDefaultDuration(uint256 newDefaultDuration)
setEditWindow
nonpayablefunction setEditWindow(uint256 newEditWindow)
unpause
nonpayablefunction unpause()
updateContractAddressManager
nonpayablefunction updateContractAddressManager(address contractAddressesAddr)
updateExpectedSigner
nonpayablefunction updateExpectedSigner(address signer)
updateOwner
nonpayablefunction updateOwner(address owner)
updateSignatureVerifier
nonpayablefunction updateSignatureVerifier(address sinatureVerifier)
upgradeToAndCall
payablefunction upgradeToAndCall(address newImplementation, bytes data) payable
events
CancelWindowUpdated
event CancelWindowUpdated(uint256 newCancelWindow)
DefaultDurationUpdated
event DefaultDurationUpdated(uint256 newDefaultDuration)
EditWindowUpdated
event EditWindowUpdated(uint256 newEditWindow)
Initialized
event Initialized(uint64 version)
Paused
event Paused(address account)
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)
SlashCancelled
event SlashCancelled(uint256 id, address cancelledBy, uint256 cancelledAt)
SlashCreated
event SlashCreated(uint256 id, uint256 createdAt, uint256 duration, address indexed subject, bytes32 indexed attestationHash, uint256 authorProfileId, uint256 cancelledAt, uint256 amount, uint8 slashType, string comment, string metadata)
SlashEdited
event SlashEdited(uint256 id, string newComment, string newMetadata)
SlashExtended
event SlashExtended(uint256 id, uint256 newDuration)
Unpaused
event Unpaused(address account)
Upgraded
event Upgraded(address indexed implementation)
errors
AccessControlBadConfirmation
error AccessControlBadConfirmation()
AccessControlUnauthorizedAccount
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole)
AddressEmptyCode
error AddressEmptyCode(address target)
CancelWindowExpired
error CancelWindowExpired(uint256 slashId)
EditWindowExpired
error EditWindowExpired(uint256 slashId)
EnforcedPause
error EnforcedPause()
ERC1967InvalidImplementation
error ERC1967InvalidImplementation(address implementation)
ERC1967NonPayable
error ERC1967NonPayable()
ExpectedPause
error ExpectedPause()
FailedCall
error FailedCall()
InvalidCancelWindow
error InvalidCancelWindow(uint256 newCancelWindow)
InvalidDefaultDuration
error InvalidDefaultDuration(uint256 newDefaultDuration)
InvalidDuration
error InvalidDuration(uint256 slashId, uint256 newDuration)
InvalidEditWindow
error InvalidEditWindow(uint256 newEditWindow)
InvalidInitialization
error InvalidInitialization()
InvalidSignature
error InvalidSignature()
InvalidSlashDetails
error InvalidSlashDetails(string reason)
NotInitializing
error NotInitializing()
NotSlashAuthor
error NotSlashAuthor(uint256 slashId, address caller)
SelfSlash
error SelfSlash(address subject)
SignatureWasUsed
error SignatureWasUsed()
SlashIsCancelled
error SlashIsCancelled(uint256 slashId)
SlashIsClosed
error SlashIsClosed(uint256 slashId)
SlashNotFound
error SlashNotFound(uint256 slashId)
UUPSUnauthorizedCallContext
error UUPSUnauthorizedCallContext()
UUPSUnsupportedProxiableUUID
error UUPSUnsupportedProxiableUUID(bytes32 slot)
ZeroAddress
error ZeroAddress()
creation bytecode
0x60a06040523461003257610011610037565b604051613f9f6101c1823960805181818161318401526132ff0152613f9f90f35b600080fd5b61003f61007e565b610047610112565b565b61005d90610060906001600160a01b031682565b90565b6001600160a01b031690565b61005d90610049565b61005d9061006c565b610086610094565b61008f30610075565b608052565b61004761003f565b61005d9060401c60ff1690565b61005d905461009c565b61005d905b6001600160401b031690565b61005d90546100b3565b61005d906100b8906001600160401b031682565b906100f261005d61010e926100ce565b82546001600160401b0319166001600160401b03919091161790565b9055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0061013c816100a9565b6101ae57610149816100c4565b6001600160401b0391908290811603610160575050565b8161018f7fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2936101a9936100e2565b604051918291826001600160401b03909116815260200190565b0390a1565b63f92ee8a960e01b6000908152600490fdfe6080604052600436101561001257600080fd5b60003560e01c806301ffc9a71461030257806305917872146102fd57806308473f64146102f85780631459457a146102f35780631785f53c146102ee578063248a9ca3146102e95780632af7e2ea146102e45780632bb39d82146102df5780632bdd87ff146102da5780632cb3e494146102d55780632d205cd4146102d05780632f2ff15d146102cb57806336568abe146102c65780633f4ba83a146102c15780634aa7db95146102bc5780634d21497f146102b75780634d6861a6146102b25780634f1ef286146102ad57806352d1902d146102a85780635667981b146102a35780635c975abb1461029e5780635f526049146102995780636f4dc89614610294578063704802751461028f57806375b238fc1461028a5780637aec299a146102855780638456cb5914610280578063880cdc311461027b5780638a17cbc9146102765780639010d07c146102715780639063bf0e1461026c57806391d148541461026757806394f6874b14610262578063a12c64b51461025d578063a217fddf14610258578063a3246ad314610253578063ad3cb1cc1461024e578063ade9ae9714610249578063bb10c82914610244578063ca15c8731461023f578063d547741f1461023a578063d5c78a2814610235578063e051908114610230578063e58378bb1461022b578063ead15f6c14610226578063fdae3e3d146102215763fde919f60361031a57611265565b61123e565b6111f8565b610ecf565b610eb4565b610e99565b610e80565b610e65565b610e4a565b610d7a565b610d08565b610c34565b610ba9565b610b4e565b610b32565b610ade565b610abf565b610a19565b610a01565b6109e9565b6109d1565b6109b6565b610983565b61096b565b610952565b610917565b6108fc565b6108e4565b6108c9565b6108b5565b610865565b61084a565b610825565b6107ba565b6107a1565b610788565b610754565b61071f565b6106dd565b6106bb565b6104ea565b610492565b61047a565b61045e565b6103fa565b6103a1565b610349565b6001600160e01b031981165b0361031a57565b600080fd5b9050359061032c82610307565b565b9060208282031261031a576103429161031f565b90565b9052565b3461031a5761037661036461035f36600461032e565b611280565b60405191829182901515815260200190565b0390f35b80610313565b9050359061032c8261037a565b9060208282031261031a5761034291610380565b3461031a576103b96103b436600461038d565b611367565b604051005b6001600160a01b031690565b6001600160a01b038116610313565b9050359061032c826103ca565b9060208282031261031a57610342916103d9565b3461031a576103b961040d3660046103e6565b6113c9565b919060a08382031261031a5761042881846103d9565b9261043682602083016103d9565b9261034261044784604085016103d9565b93608061045782606087016103d9565b94016103d9565b3461031a576103b9610471366004610412565b93929092611642565b3461031a576103b961048d3660046103e6565b611685565b3461031a576103766104ad6104a836600461038d565b611694565b6040519182918290815260200190565b600091031261031a57565b610342916008021c81565b9061034291546104c8565b610342600060366104d3565b3461031a576104fa3660046104bd565b6103766104ad6104de565b634e487b7160e01b600052604160045260246000fd5b90601f01601f191681019081106001600160401b0382111761053c57604052565b610505565b9061032c61054e60405190565b928361051b565b6001600160401b03811161053c57602090601f01601f19160190565b0190565b90826000939282370152565b9092919261059661059182610555565b610541565b938185528183011161031a5761032c916020850190610575565b9080601f8301121561031a5781602061034293359101610581565b9081604091031261031a5790565b909182601f8301121561031a578135916001600160401b03831161031a57602001926001830284011161031a57565b9060e08282031261031a5761061d81836103d9565b9261062b8260208501610380565b9260408101356001600160401b03811161031a578361064b9183016105b0565b9260608201356001600160401b03811161031a578161066b9184016105b0565b9260808301356001600160401b03811161031a578261068b9185016105cb565b926106998360a08301610380565b9260c08201356001600160401b03811161031a576106b792016105d9565b9091565b3461031a576103b96106ce366004610608565b969590959491949392936118a1565b3461031a576103b96106f03660046103e6565b6118d5565b610342916008021c6001600160a01b031690565b9061034291546106f5565b610342600080610709565b3461031a5761072f3660046104bd565b61037661073a610714565b604051918291826001600160a01b03909116815260200190565b3461031a576103b961076736600461038d565b611a4a565b919060408382031261031a576103429060206104578286610380565b3461031a576103b961079b36600461076c565b90611a6e565b3461031a576103b96107b436600461076c565b90611a78565b3461031a576107ca3660046104bd565b6103b9611c13565b9160608383031261031a576107e78284610380565b9260208101356001600160401b03811161031a57836108079183016105b0565b9260408201356001600160401b03811161031a5761034292016105b0565b3461031a576103b96108383660046107d2565b91611e86565b610342600060396104d3565b3461031a5761085a3660046104bd565b6103766104ad61083e565b3461031a5761037661036461087b36600461038d565b611fd6565b91909160408184031261031a5761089783826103d9565b9260208201356001600160401b03811161031a5761034292016105b0565b6103b96108c3366004610880565b90612077565b3461031a576108d93660046104bd565b6103766104ad6120c4565b3461031a576103b96108f73660046103e6565b6120f2565b3461031a5761090c3660046104bd565b6103766103646120fb565b3461031a576103b961092a36600461038d565b612183565b919060408382031261031a5761034290602061094b8286610380565b9401610380565b3461031a576103b961096536600461092f565b906122de565b3461031a576103b961097e3660046103e6565b61231b565b3461031a576109933660046104bd565b610376600080516020613f4a8339815191526104ad565b610342600060376104d3565b3461031a576109c63660046104bd565b6103766104ad6109aa565b3461031a576109e13660046104bd565b6103b9612387565b3461031a576103b96109fc3660046103e6565b6123df565b3461031a576103b9610a1436600461038d565b612468565b3461031a5761037661073a610a2f36600461092f565b90612471565b909160c08284031261031a57610a4b83836103d9565b92610a598160208501610380565b9260408101356001600160401b03811161031a5782610a799183016105b0565b9260608201356001600160401b03811161031a5783610a999184016105b0565b926080830135906001600160401b03821161031a5760a061094b826103429487016105cb565b3461031a576103b9610ad2366004610a35565b949390939291926124f8565b3461031a57610376610364610af436600461076c565b90612510565b801515610313565b9050359061032c82610afa565b919060408382031261031a57610342906020610b2b8286610380565b9401610b02565b3461031a57610376610364610b48366004610b0f565b90612546565b3461031a57610b66610b6136600461038d565b6125bf565b90610376610b7360405190565b928392839015158152901515602082015260400190565b6103426103426103429290565b6103426000610b8a565b610342610b97565b3461031a57610bb93660046104bd565b6103766104ad610ba1565b90610be4610bdd610bd3845190565b8084529260200190565b9260200190565b9060005b818110610bf55750505090565b909192610c1b610c1460019286516001600160a01b0316815260200190565b9460200190565b929101610be8565b602080825261034292910190610bc4565b3461031a57610376610c4f610c4a36600461038d565b6125fa565b60405191829182610c23565b90610c6861059183610555565b918252565b610c776005610c5b565b640352e302e360dc1b602082015290565b610342610c6d565b610342610c88565b610342610c90565b60005b838110610cb35750506000910152565b8181015183820152602001610ca3565b610ce4610ced60209361057193610cd8815190565b80835293849260200190565b95869101610ca0565b601f01601f191690565b602080825261034292910190610cc3565b3461031a57610d183660046104bd565b610376610d23610c98565b60405191829182610cf7565b61034260006003610709565b610342906103be906001600160a01b031682565b61034290610d3b565b61034290610d4f565b61034590610d58565b60208101929161032c9190610d61565b3461031a57610d8a3660046104bd565b610376610d95610d2f565b60405191829182610d6a565b9060208282031261031a5781356001600160401b03811161031a5761034292016105b0565b610571610dde92602092610dd8815190565b94859290565b93849101610ca0565b610c686105719160209493610dc6565b610e0c610e0360405190565b92839283610de7565b03902090565b61034291610df7565b610342916008021c5b60ff1690565b906103429154610e1b565b6000610e45610342926002610e12565b610e2a565b3461031a57610376610364610e60366004610da1565b610e35565b3461031a576103766104ad610e7b36600461038d565b612611565b3461031a576103b9610e9336600461076c565b90612643565b3461031a57610376610364610eaf36600461038d565b61264d565b3461031a57610376610364610eca36600461038d565b6126c4565b3461031a57610edf3660046104bd565b610376600080516020613f0a8339815191526104ad565b90610f0090610b8a565b600052602052604060002090565b6103429081565b6103429054610f0e565b610342906103be565b6103429054610f1f565b61034290610e24565b6103429054610f32565b634e487b7160e01b600052602260045260246000fd5b9060016002830492168015610f7b575b6020831014610f7657565b610f45565b91607f1691610f6b565b80546000939291610fa2610f9883610f5b565b8085529360200190565b9160018116908115610ff45750600114610fbb57505050565b610fce9192939450600052602060002090565b916000925b818410610fe05750500190565b805484840152602090930192600101610fd3565b92949550505060ff1916825215156020020190565b9061034291610f85565b9061032c61102d9261102460405190565b93848092611009565b038361051b565b6103426040610541565b9061032c611066600161104f611034565b9461106061105c82611013565b8752565b01611013565b6020840152565b61107890603a610ef6565b61108181610f15565b9161108e60018301610f15565b9161109b60028201610f15565b916110a860038301610f28565b916110b560048201610f15565b916110c260058301610f15565b916110cf60068201610f15565b916110dc60078301610f3b565b916110e960088201611013565b91610342600a6110fb60098501611013565b930161103e565b634e487b7160e01b600052602160045260246000fd5b6002111561112257565b611102565b9061032c82611118565b61034290611127565b61034590611131565b80516040808452610342939160209161115f9190840190610cc3565b920151906020818403910152610cc3565b9081529897966101608a01969095909490939092909160208b015260408a0152606089016111a5916001600160a01b03169052565b608088015260a087015260c086015260e085016111c19161113a565b8381036101008501526111d391610cc3565b8281036101208401526111e591610cc3565b9080820390610140015261034291611143565b3461031a5761037661121361120e36600461038d565b61106d565b976112299b999b97919796929695939560405190565b9b8c9b8c611170565b610342600060386104d3565b3461031a5761124e3660046104bd565b6103766104ad611232565b61034260006001610709565b3461031a576112753660046104bd565b61037661073a611259565b635a05180f60e01b6001600160e01b031982161490811561129f575090565b61034291506126fa565b61032c906112c9600080516020613f4a833981519152612734565b612734565b61032c906112d561273f565b611305565b90600019905b9181191691161790565b906112fa61034261130192610b8a565b82546112da565b9055565b600061131081610b8a565b821461134c5750611347816104ad7f2c3d5040180c469bee63778bb76bcacfff76bfa03e2a3c629631ca9edc8c73ec9360366112ea565b0390a1565b63e64b1c2160e01b81526004810191909152602490fd5b0390fd5b61032c906112a9565b61032c9061138b600080516020613f4a833981519152612734565b6113b6565b906001600160a01b03906112e0565b906113af61034261130192610d58565b8254611390565b6113c261032c91610d58565b600361139f565b61032c90611370565b6103429060401c610e24565b61034290546113d2565b610342905b6001600160401b031690565b61034290546113e8565b6113ed6103426103429290565b906001600160401b03906112e0565b6113ed610342610342926001600160401b031690565b906114456103426113019261141f565b8254611410565b9068ff00000000000000009060401b6112e0565b9061147061034261130192151590565b825461144c565b61034590611403565b60208101929161032c9190611477565b92939091907ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a009485926114d26114cc6114c8866113de565b1590565b946113f9565b946000966114df88611403565b6001600160401b03881614806115dc575b60019761150c6114ff8a611403565b916001600160401b031690565b1490816115b4575b155b90816115ab575b5061159c579061154a94939291866115418a6115388b611403565b9c019b8c611435565b61158d576115e3565b61155357505050565b611581611347927fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d294611460565b60405191829182611480565b611597888b611460565b6115e3565b63f92ee8a960e01b8852600488fd5b1590503861151d565b90506115166115c230610d58565b3b6115d36115cf8c610b8a565b9190565b14919050611514565b50856114f0565b906115f09493929161284d565b6115f8612862565b61160c6116056001610b8a565b60396112ea565b61162261161b6202a300610b8a565b60366112ea565b61032c611630610e10610b8a565b61163b8160376112ea565b60386112ea565b9061032c94939291611490565b61032c9061166a600080516020613f0a833981519152612734565b61168290600080516020613f4a83398151915261286a565b50565b61032c9061164f565b90610f00565b60016116be610342926116a5600090565b506000600080516020613f2a8339815191525b0161168e565b01610f15565b9061032c979695949392916116d761273f565b611778565b9050519061032c8261037a565b9060208282031261031a57610342916116dc565b6040513d6000823e3d90fd5b61034260e0610541565b91909160408184031261031a5761172a6040610541565b9281356001600160401b03811161031a57816117479184016105b0565b845260208201356001600160401b03811161031a5761176692016105b0565b6020830152565b610342903690611713565b949596939091929361179061178b6128f6565b610d58565b97602061179c60405190565b63b8861c2360e01b8152336004820152998a9060249082905afa97881561189c5761032c9960009961184d575b50916118429161183d8a6117f587966117e5611847998e61294b565b6117666117f0611709565b938452565b6001600160a01b038b16604082015261180f886060830152565b61181a896080830152565b6118258a60a0830152565b6118386118318761176d565b60c0830152565b6129cf565b612c07565b61176d565b93612df9565b8499509161183d896117f56118479796946117e56118856118429860203d602011611895575b61187d818361051b565b8101906116e9565b9e505094969750505050916117c9565b503d611873565b6116fd565b9061032c979695949392916116c4565b61032c906118cc600080516020613f4a833981519152612734565b61032c9061300f565b61032c906118b1565b61032c906118ea61273f565b611912565b9081526001600160a01b03909116602082015260608101929161032c9160400152565b61192061034282603a610ef6565b61192981610f15565b6000906119386115cf83610b8a565b14611a345761195533600080516020613f4a833981519152612510565b906119636114c88386612546565b6119c95750916119aa6113479261199b7fd9ff2894bff7a6ea7792cd0dadb53f4099a3fd0097a30618dd6e9eaf72c060569515151590565b6119ba575b60054291016112ea565b60405191829142903390846118ef565b6119c48382613018565b6119a0565b80846119d760058601610f15565b6119e36115cf84610b8a565b11611a1f576119f18161264d565b611a0a5763cb0cb91560e01b8252600490910152602490fd5b6325cf659960e21b8252600490910152602490fd5b635029f89160e11b8252600490910152602490fd5b63e1f7055360e01b815260048101839052602490fd5b61032c906118de565b9061032c91611a646112c482611694565b90611682916130bf565b9061032c91611a53565b90611a82336103be565b6001600160a01b03821603611a9a576116829161286a565b63334bd91960e11b6000908152600490fd5b036000fd5b611abb6019610c5b565b7f4554484f535f494e544552414354494f4e5f434f4e54524f4c00000000000000602082015290565b610342611ab1565b610342611ae4565b9050519061032c826103ca565b9060208282031261031a5761034291611af4565b6001600160a01b03909116815260408101929161032c9160200152565b611b706020611b4461178b6003610f28565b611b4c611aec565b90611b5660405190565b9384928391829163d57f7aa360e01b835260048301610cf7565b03915afa90811561189c57600091611bdc575b50611b96335b916001600160a01b031690565b03611ba35761032c611c0b565b63e2517d3f60e01b6000908152611aac7f261fea28325784de45eba41a3fbb84c4196fbab02ee802566edfe26616ba5afb336004611b15565b611bfe915060203d602011611c04575b611bf6818361051b565b810190611b01565b38611b83565b503d611bec565b61032c613171565b61032c611b32565b9061032c9291611c2961273f565b611ddb565b9160001960089290920291821b911b6112e0565b9190611c5361034261130193610b8a565b908354611c2e565b61032c91600091611c42565b818110611c72575050565b80611c806000600193611c5b565b01611c67565b9190601f8111611c9557505050565b611ca761032c93600052602060002090565b906020601f840181900483019310611cc9575b6020601f909101040190611c67565b9091508190611cba565b90611cdc815190565b906001600160401b03821161053c57611cff82611cf98554610f5b565b85611c86565b602090601f8311600114611d3a57611301929160009183611d2f575b5050600019600883021c1916906002021790565b015190503880611d1b565b601f19831691611d4f85600052602060002090565b9260005b818110611d8d57509160029391856001969410611d74575b50505002019055565b01516000196008601f8516021c19169055388080611d6b565b91936020600181928787015181550195019201611d53565b9061032c91611cd3565b908152606060208201819052610342939192611dcd91840190610cc3565b916040818403910152610cc3565b929192611dec61034282603a610ef6565b611df581610f15565b600090611e046115cf83610b8a565b14611a3457611e156114c8846126c4565b611e70575084611e647fdf01ed2350ed882e02e4e9eec4b7dca2b3115c2e50e1945c426e045e417c1b269596600984611e518761134797613018565b611e5e8860088301611da5565b01611da5565b60405193849384611daf565b63067d338760e51b815260048101839052602490fd5b9061032c9291611c1b565b9061034590611127565b610342610160610541565b9061032c611f9d600a611eb7611e9b565b94611ec461105c82610f15565b611eda611ed360018301610f15565b6020880152565b611ef0611ee960028301610f15565b6040880152565b611f0f611eff60038301610f28565b6001600160a01b03166060880152565b611f25611f1e60048301610f15565b6080880152565b611f3b611f3460058301610f15565b60a0880152565b611f51611f4a60068301610f15565b60c0880152565b611f69611f6060078301610f3b565b60e08801611e91565b611f80611f7860088301611013565b610100880152565b611f97611f8f60098301611013565b610120880152565b0161103e565b610140840152565b61034290611ea6565b634e487b7160e01b600052601160045260246000fd5b91908201809211611fd157565b611fae565b600090611fe282610b8a565b81148015612042575b61203e57611ffd61200291603a610ef6565b611fa5565b60a08101516120136115cf84610b8a565b1161203e576120399150612033604061202d602084015190565b92015190565b90611fc4565b421090565b5090565b506120506103426039610f15565b8111611feb565b9061032c91612064613179565b9061032c9161207281613221565b61322a565b9061032c91612057565b6103429061208d6132e9565b6120bb565b6103427f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610b8a565b50610342612092565b6103426000612081565b61032c906120e9600080516020613f4a833981519152612734565b61032c90613343565b61032c906120ce565b61034261334c565b61032c9061211e600080516020613f4a833981519152612734565b61032c9061212a61273f565b600061213581610b8a565b821461216c5750611347816104ad7f23560b50d48a564a1ce1c83b1bfe045a4446832bb5a23e1a34833aa7dba144469360376112ea565b636471b92560e11b81526004810191909152602490fd5b61032c90612103565b61032c91906121a8600080516020613f4a833981519152612734565b9061032c916121b561273f565b6121cd565b90815260408101929161032c9160200152565b6121db61034282603a610ef6565b6121e481610f15565b906000916121f46115cf84610b8a565b146122c65761220560058201610f15565b6122116115cf84610b8a565b116122ae5761221f8361264d565b612296576002019061223361034283610f15565b84111561227d575090612268837fa07084f9a8d0dcd376ebfbe2e2b0cf1a0776d3eb7c636ebd644d9335569b086b94936112ea565b61134761227460405190565b928392836121ba565b63387a058b60e01b8152806113638585600484016121ba565b506325cf659960e21b81526004810191909152602490fd5b50635029f89160e11b81526004810191909152602490fd5b5063e1f7055360e01b81526004810191909152602490fd5b9061032c9161218c565b61032c90612303600080516020613f0a833981519152612734565b61168290600080516020613f4a8339815191526130bf565b61032c906122e8565b6123366020611b4461178b6003610f28565b03915afa90811561189c57600091612360575b5061235333611b89565b03611ba35761032c61237f565b612379915060203d602011611c0457611bf6818361051b565b38612349565b61032c6133d7565b61032c612324565b61032c906123aa600080516020613f0a833981519152612734565b61168290600080516020613f0a8339815191526123d96123d36123cd6000610b8a565b83612471565b8261286a565b506130bf565b61032c9061238f565b61032c90612403600080516020613f4a833981519152612734565b61032c9061240f61273f565b600061241a81610b8a565b82146124515750611347816104ad7f4f2edc2575d3ae667c1ef5cbfe085a70b4270126ebdff0a5c73a8060b71d1ee49360386112ea565b633ebf240960e01b81526004810191909152602490fd5b61032c906123e8565b906124ad61034261034293612484600090565b5060007fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e823717059320006116b8565b6133e8565b9061032c95949392916124c361273f565b61032c9594939291906124e3600080516020613f4a833981519152612734565b92919061184761032c9695611842818761294b565b9061032c95949392916124b2565b90610f0090610d58565b61034291600061253b61254193612525600090565b5082600080516020613f2a8339815191526116b8565b01612506565b610f3b565b906125516000610b8a565b821480156125aa575b6125a3576125678261264d565b6125a35761259d5761034261258d6020612588611ffd61259795603a610ef6565b015190565b6120336038610f15565b42111590565b50600190565b5050600090565b506125b86103426039610f15565b821161255a565b906125d36000612588611ffd85603a610ef6565b6125e06115cf6000610b8a565b1415809281936125ef57509190565b610342919350611fd6565b61260c61034261034292612484606090565b61341c565b61262361034261034292612484600090565b61342d565b9061032c916126396112c482611694565b906116829161286a565b9061032c91612628565b60009061265982610b8a565b811480156126af575b61203e57611ffd61267491603a610ef6565b60a08101516126856115cf84610b8a565b116126a85780612033604061202d602061269e95015190565b42101561259d5790565b5050600190565b506126bd6103426039610f15565b8111612662565b6126cd8161264d565b6126f4576103426126ea6020612588611ffd61259795603a610ef6565b6120336037610f15565b50600090565b637965db0b60e01b6001600160e01b0319821614908115612719575090565b61034291506001600160e01b0319166301ffc9a760e01b1490565b61032c903390613443565b6127476120fb565b61274d57565b63d93c066560e01b6000908152600490fd5b9061032c9493929161276f613472565b61278a565b6103be6103426103429290565b61034290612774565b92909391600061279981612781565b6001600160a01b0381166001600160a01b03871614908115612830575b8115612814575b5061280557506113c26127f09361178b6116829796946127dc946134b4565b600080516020613f0a8339815191526130bf565b50600080516020613f4a8339815191526130bf565b63d92e233d60e01b8152600490fd5b6001600160a01b031690506001600160a01b03851614386127bd565b90506001600160a01b0381166001600160a01b03881614906127b6565b9061032c9493929161275f565b61032c613472565b61032c61285a565b907fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e823717059320009061289781846134be565b92836128a4575b50505090565b6128ba926128b5916103429161168e565b61355a565b5038808061289e565b6128cd600d610c5b565b6c4554484f535f50524f46494c4560981b602082015290565b6103426128c3565b6103426128e6565b612910602061290861178b6003610f28565b611b4c6128ee565b03915afa801561189c576103429160009161292c575b50610d58565b612945915060203d602011611c0457611bf6818361051b565b38612926565b9061032c9161295a82826135c0565b6136b7565b9592946129a66129c19561299f6103429a9861298f6129b3976129888d98600060e08b019a0152565b60208d0152565b6001600160a01b031660408b0152565b6060890152565b8682036080880152610cc3565b9084820360a0860152610cc3565b9160c0818403910152611143565b612a376129da825190565b602083015190612a2b6129f760408601516001600160a01b031690565b94612a03606082015190565b90608081015160c060a083015192015192612a1d60405190565b98899760208901978861295f565b9081038252038261051b565b612a49612a42825190565b9160200190565b2090565b90916105719083908093610575565b610c68906020949361057193612a4d565b9091610e0c90612a7c60405190565b93849384612a5c565b909161034292612a6d565b9190612aa161254183836002612a85565b612aae5761032c92612b51565b63858c8a1f60e01b6000908152600490fd5b9050519061032c82610afa565b9060208282031261031a5761034291612ac0565b9190610ced81612af8816105719560209181520190565b8095610575565b612b246103429593949294611766606084019660008501906001600160a01b03169052565b6040818503910152612ae1565b9060ff906112e0565b90612b4a61034261130192151590565b8254612b31565b91602082829394612b6861178b61178b6001610f28565b90612b736000610f28565b612b98612b7f60405190565b96879586948594622ea33360e31b865260048601612aff565b03915afa801561189c57612bb291600091612bde57501590565b612bcc57612bc760019161032c936002612a85565b612b3a565b638baa579f60e01b6000908152600490fd5b6114c8915060203d602011612c00575b612bf8818361051b565b810190612acd565b503d612bee565b9061032c9291612a90565b6040808252610342939192612c2991840190610cc3565b916020818403910152610cc3565b6103429051611127565b90612b4a61034261130192611131565b6001612c70602061032c94612588612c6a600083015190565b86611da5565b9101611da5565b9061032c91612c51565b600a612d7c61014061032c94612ca1612c9b600083015190565b866112ea565b612cb8612caf602083015190565b600187016112ea565b612ccf612cc6604083015190565b600287016112ea565b612cef612ce660608301516001600160a01b031690565b6003870161139f565b612d06612cfd608083015190565b600487016112ea565b612d1d612d1460a083015190565b600587016112ea565b612d34612d2b60c083015190565b600687016112ea565b612d4c612d4360e08301612c37565b60078701612c41565b612d64612d5b61010083015190565b60088701611da5565b612588612d7361012083015190565b60098701611da5565b9101612c77565b9061032c91612c81565b90815296956101208801959094909390929091602089015260408801526060870152608086015260a085015260c08401612dc69161113a565b82810360e0840152612dd791610cc3565b9080820390610100015261034291610cc3565b6000198114611fd15760010190565b949391929092600093612e0b85610b8a565b95612e186103be87612781565b6001600160a01b03891614612f7a575b612e326039610f15565b97612e3d6036610f15565b612e45611e9b565b99612e5090898c0152565b612e5b4260208c0152565b60408a01526001600160a01b031660608901526080880152612e7c85610b8a565b60a088015260c0870152612e938460e08801611e91565b61010086015261012085015261014084015282612eb06039610f15565b612ebb90603a610ef6565b90612ec591612d83565b8201516020830151604084015191612ee760608601516001600160a01b031690565b608086015195612ef860a082015190565b60c0820151612f0960e08401612c37565b9161010084015193610120015194612f2090610d58565b9899612f2b60405190565b988998612f38988a612d8d565b037f1de3714b9e1c673dd48e1119f3d30048d6e6d3cd4f32ab3bb876f8a92d0b8a9291a3612f666039610f15565b612f6f90612dea565b61032c9060396112ea565b9550612fbe6020612f8c61178b6137b0565b81870151908888015191612f9f60405190565b809581948293612fb3638db70da460e01b90565b845260048401612c12565b03915afa90811561189c57600091612fd8575b5095612e28565b612ff1915060203d6020116118955761187d818361051b565b38612fd1565b61032c90613004816137ca565b61032c90600061139f565b61032c90612ff7565b61302361178b6128f6565b90602061302f60405190565b6389a9132b60e01b815233600482015292839060249082905afa91821561189c5760009261308f575b506115cf610342600461306b9301610f15565b036130735750565b63038bae3360e51b600090815260049190915233602452604490fd5b61306b91925061034260046130b56115cf9360203d6020116118955761187d818361051b565b9493505050613058565b907fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e82371705932000906130ec81846137e4565b92836130f85750505090565b6128ba92613109916103429161168e565b613855565b613116613875565b61032c6131476000807fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005b01612b3a565b7f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6113473361073a565b61032c61310e565b61318230610d58565b7f0000000000000000000000000000000000000000000000000000000000000000906131b66001600160a01b038316611b89565b149081156131d8575b506131c657565b63703e46dd60e11b6000908152600490fd5b90506131f5611b896131e8613898565b926001600160a01b031690565b1415386131bf565b61032c90613218600080516020613f0a833981519152612734565b61032c906137ca565b61032c906131fd565b9061323761178b83610d58565b90602061324360405190565b6352d1902d60e01b815292839060049082905afa600092816132c8575b5061329257505060016132705750565b634c9c8ce360e01b60009081526001600160a01b039091166004526024036000fd5b9092916132a0610342612092565b84036132b15761032c9293506138ae565b632a87526960e21b60009081526004859052602490fd5b6132e291935060203d6020116118955761187d818361051b565b9138613260565b6132f230610d58565b6133246001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016611b89565b036131c657565b61032c90613338816137ca565b61032c90600161139f565b61032c9061332b565b6103427fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300610f3b565b61337d61273f565b61032c6133ad600160007fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300613141565b7f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586113473361073a565b61032c613375565b61034290610b8a565b61341261340d61034293613408600061341795613403600090565b500190565b613955565b6133df565b612774565b610d4f565b606090613428906139f9565b905090565b61343e600061034292613403600090565b613a0e565b906134516114c88284612510565b613459575050565b63e2517d3f60e01b600090815291611aac916004611b15565b61347d6114c8613a22565b61348357565b631afcd79f60e31b6000908152600490fd5b9061032c916134a2613472565b906134af61032c9261300f565b613343565b9061032c91613495565b600080516020613f2a8339815191526134d78383612510565b15613540576000612bc7848261253b86826134f2970161168e565b61350c613506613500339390565b93610d58565b91610d58565b917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b61353760405190565b600090a4600190565b505050600090565b6103429081906001600160a01b031681565b906135876115cf61358261357d600061034296613575600090565b500194610d4f565b613548565b610b8a565b613ab1565b903590601e19368290030182121561031a57018035906001600160401b03821161031a576020019136829003831361031a57565b906000916135d3611b896103be85612781565b1415916135e86134286106b78385018561358c565b6135f46115cf83610b8a565b141591821561368b575b5050811580613683575b613652578161364a575b5061361957565b604051633e5ee98960e11b8152602060048201526008602482015267109bdd1a081cd95d60c21b6044820152606490fd5b905038613612565b604051633e5ee98960e11b8152602060048201526008602482015267139bdb99481cd95d60c21b6044820152606490fd5b508015613608565b6136ae9192506136a86134286106b78360206115cf95019061358c565b92610b8a565b141538806135fe565b90336001600160a01b0383161461375a576136d361178b6128f6565b9060206136df60405190565b6389a9132b60e01b815233600482015292839060249082905afa91821561189c57600092613739575b506137166103be6000612781565b6001600160a01b0384161461372f575061032c91613cbc565b61032c9250613b9d565b61375391925060203d6020116118955761187d818361051b565b9038613708565b6339487e4760e01b60009081526001600160a01b038316600452602490fd5b6137836011610c5b565b7022aa2427a9afa0aa2a22a9aa20aa24a7a760791b602082015290565b610342613779565b6103426137a0565b61291060206137c261178b6003610f28565b611b4c6137a8565b6000906137dc611b896103be84612781565b146128055750565b600080516020613f2a8339815191526138006114c88484612510565b15613540576001612bc784600061253b868261381c970161168e565b61382a613506613500339390565b917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d61353760405190565b906138706115cf61358261357d600061034296613575600090565b613d62565b6138806114c86120fb565b61388657565b638dfc202b60e01b6000908152600490fd5b61034260006138a8610342612092565b01610f28565b906138b882613d9c565b6138c182610d58565b7fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b6138eb60405190565b600090a280516138fe6115cf6000610b8a565b111561390d5761168291613e29565b505061032c613de7565b634e487b7160e01b600052603260045260246000fd5b805482101561395057613947600191600052602060002090565b91020190600090565b613917565b61034291600061396e92613967600090565b500161392d565b906104d3565b9061398f613983610bd3845490565b92600052602060002090565b9060005b8181106139a05750505090565b9091926139c46139bd6001926139b587610f15565b815260200190565b9460010190565b929101613993565b9061034291613974565b9061032c61102d926139e760405190565b938480926139cc565b610342906139d6565b600061034291613a07606090565b50016139f0565b600061034291613a1c600090565b50015490565b6103427ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a006113de565b91908203918211611fd157565b9190611c536103426113019390565b634e487b7160e01b600052603160045260246000fd5b61032c91600091613a58565b80548015613aac576000190190613aa9613aa3838361392d565b90613a7d565b55565b613a67565b90613ac7613ac2826001850161168e565b610f15565b613ad16000610b8a565b811461354057613b2f61034292600092613b2a956116b86001978893613aff613af986610b8a565b82613a4b565b88850191613b1d613b0e845490565b613b1789610b8a565b90613a4b565b808303613b345750505090565b613a89565b611c5b565b613b57613b5d613b6a94613b4e61396e613b65958961392d565b9283918861392d565b90613a58565b88880161168e565b6112ea565b38808061289e565b9290613b8f90610342959360408601918683036000880152612ae1565b926020818503910152612ae1565b6020613bc391613bae61178b6137b0565b613bba8383018361358c565b9490928061358c565b949092613bec613bd260405190565b9687958694859463236dc36960e21b865260048601613b72565b03915afa90811561189c57613c3391602091600091613c9f575b50613c1261178b6128f6565b60405193849283918291637dec74d760e01b83526004830190815260200190565b03915afa90811561189c57613c51916115cf91600091613c86575090565b14613c5857565b600080611363613c6782612781565b6339487e4760e01b83526001600160a01b031660048301526024820190565b610342915060203d6020116118955761187d818361051b565b613cb69150823d84116118955761187d818361051b565b38613c06565b90613cc861178b6128f6565b6020613cd360405190565b6389a9132b60e01b81526001600160a01b038516600482015291829060249082905afa90811561189c57613d10916115cf91600091613c86575090565b14613d185750565b6339487e4760e01b60009081526001600160a01b039091166004526024036000fd5b908154916801000000000000000083101561053c5782613b5791600161032c9501815561392d565b613d6f6114c88383613e50565b156125a357613d9791613b65906001613d9084613d8c8482613d3a565b5490565b930161168e565b600190565b6000813b613dac6115cf83610b8a565b14613dc7579061032c91613dc1610342612092565b0161139f565b634c9c8ce360e01b81526001600160a01b03919091166004820152602490fd5b6000613df281610b8a565b3411613dfb5750565b63b398979f60e01b8152600490fd5b3d15613e2457613e193d610c5b565b903d6000602084013e565b606090565b60008061034293613e38606090565b50602081519101845af4613e4a613e0a565b91613e7b565b613e69916001613ac292613e62600090565b500161168e565b613e766115cf6000610b8a565b141590565b90613e865750613eda565b815190600091613e986115cf84610b8a565b1480613ec5575b613ea857505090565b639996b31560e01b82526001600160a01b03166004820152602490fd5b50803b613ed46115cf84610b8a565b14613e9f565b8051600090613eeb6115cf83610b8a565b1115613efa5750805190602001fd5b63d6bda27560e01b8152600490fdfeb19546dff01e856fb3f010c267a7b1c60363cf8a4664e21cc89c26224620214e02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800a49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775a2646970667358221220ef94d7c0e915282664635c16d7ba34f6c058168bacb8c7c39113cc2d3811b5b264736f6c634300081a0033