0 txs
0 calls
constructor
constructor(address _cashModule)
functions
cashModule
viewfunction cashModule() view returns (address)
paused
viewfunction paused() view returns (bool)
proxiableUUID
viewfunction proxiableUUID() view returns (bytes32)
roleRegistry
viewfunction roleRegistry() view returns (address)
UPGRADE_INTERFACE_VERSION
viewfunction UPGRADE_INTERFACE_VERSION() view returns (string)
emitCashbackEvent
nonpayablefunction emitCashbackEvent(address safe, address spender, uint256 spendingInUsd, address cashbackToken, uint256 cashbackAmountToSafe, uint256 cashbackInUsdToSafe, uint256 cashbackAmountToSpender, uint256 cashbackInUsdToSpender, bool paid)
emitPendingCashbackClearedEvent
nonpayablefunction emitPendingCashbackClearedEvent(address recipient, address cashbackToken, uint256 cashbackAmount, uint256 cashbackInUsd)
emitReferrerCashbackEvent
nonpayablefunction emitReferrerCashbackEvent(address safe, address referrer, uint256 spendingInUsd, address cashbackToken, uint256 referrerCashbackAmt, uint256 referrerCashbackInUsd, bool paid)
emitReferrerCashbackPercentageSet
nonpayablefunction emitReferrerCashbackPercentageSet(uint64 oldPercentage, uint64 newPercentage)
emitRepayDebtManager
nonpayablefunction emitRepayDebtManager(address safe, address token, uint256 amount, uint256 amountInUsd)
emitSetCashbackSplitToSafeBps
nonpayablefunction emitSetCashbackSplitToSafeBps(address safe, uint256 oldSplitInBps, uint256 newSplitInBps)
emitSetDelays
nonpayablefunction emitSetDelays(uint64 withdrawalDelay, uint64 spendingLimitDelay, uint64 modeDelay)
emitSetMode
nonpayablefunction emitSetMode(address safe, uint8 prevMode, uint8 newMode, uint256 incomingModeStartTime)
emitSetSafeTiers
nonpayablefunction emitSetSafeTiers(address[] safes, uint8[] safeTiers)
emitSetTierCashbackPercentage
nonpayablefunction emitSetTierCashbackPercentage(uint8[] safeTiers, uint256[] cashbackPercentages)
emitSettlementDispatcherUpdated
nonpayablefunction emitSettlementDispatcherUpdated(uint8 binSponsor, address oldDispatcher, address newDispatcher)
emitSpend
nonpayablefunction emitSpend(address safe, bytes32 txId, uint8 binSponsor, address[] tokens, uint256[] amounts, uint256[] amountsInUsd, uint256 totalUsdAmt, uint8 mode)
emitSpendingLimitChanged
nonpayablefunction emitSpendingLimitChanged(address safe, tuple oldLimit, tuple newLimit)
emitWithdrawalAmountUpdated
nonpayablefunction emitWithdrawalAmountUpdated(address safe, address token, uint256 amount)
emitWithdrawalCancelled
nonpayablefunction emitWithdrawalCancelled(address safe, address[] tokens, uint256[] amounts, address recipient)
emitWithdrawalProcessed
nonpayablefunction emitWithdrawalProcessed(address safe, address[] tokens, uint256[] amounts, address recipient)
emitWithdrawalRequested
nonpayablefunction emitWithdrawalRequested(address safe, address[] tokens, uint256[] amounts, address recipient, uint256 finalizeTimestamp)
emitWithdrawTokensConfigured
nonpayablefunction emitWithdrawTokensConfigured(address[] tokens, bool[] shouldWhitelist)
initialize
nonpayablefunction initialize(address _roleRegistry)
pause
nonpayablefunction pause()
unpause
nonpayablefunction unpause()
upgradeToAndCall
payablefunction upgradeToAndCall(address newImplementation, bytes data) payable
events
Cashback
event Cashback(address indexed safe, address indexed spender, uint256 spendingInUsd, address cashbackToken, uint256 cashbackAmountToSafe, uint256 cashbackInUsdToSafe, uint256 cashbackAmountToSpender, uint256 cashbackInUsdToSpender, bool indexed paid)
CashbackSplitToSafeBpsSet
event CashbackSplitToSafeBpsSet(address indexed safe, uint256 oldSplitInBps, uint256 newSplitInBps)
DelaysSet
event DelaysSet(uint64 withdrawalDelay, uint64 spendingLimitDelay, uint64 modeDelay)
Initialized
event Initialized(uint64 version)
ModeSet
event ModeSet(address indexed safe, uint8 prevMode, uint8 newMode, uint256 incomingModeStartTime)
Paused
event Paused(address account)
PendingCashbackCleared
event PendingCashbackCleared(address indexed recipient, address cashbackToken, uint256 cashbackAmount, uint256 cashbackInUsd)
ReferrerCashback
event ReferrerCashback(address indexed safe, address indexed referrer, uint256 spendingInUsd, address cashbackToken, uint256 referrerCashbackAmt, uint256 referrerCashbackInUsd, bool indexed paid)
ReferrerCashbackPercentageSet
event ReferrerCashbackPercentageSet(uint64 oldCashbackPercentage, uint64 newCashbackPercentage)
RepayDebtManager
event RepayDebtManager(address indexed safe, address indexed token, uint256 debtAmount, uint256 debtAmountInUsd)
SafeTiersSet
event SafeTiersSet(address[] safes, uint8[] tiers)
SettlementDispatcheUpdated
event SettlementDispatcheUpdated(uint8 binSponsor, address oldDispatcher, address newDispatcher)
Spend
event Spend(address indexed safe, bytes32 indexed txId, uint8 indexed binSponsor, address[] tokens, uint256[] amounts, uint256[] amountInUsd, uint256 totalUsdAmt, uint8 mode)
SpendingLimitChanged
event SpendingLimitChanged(address indexed safe, (uint256 dailyLimit, uint256 monthlyLimit, uint256 spentToday, uint256 spentThisMonth, uint256 newDailyLimit, uint256 newMonthlyLimit, uint64 dailyRenewalTimestamp, uint64 monthlyRenewalTimestamp, uint64 dailyLimitChangeActivationTime, uint64 monthlyLimitChangeActivationTime, int256 timezoneOffset) oldLimit, (uint256 dailyLimit, uint256 monthlyLimit, uint256 spentToday, uint256 spentThisMonth, uint256 newDailyLimit, uint256 newMonthlyLimit, uint64 dailyRenewalTimestamp, uint64 monthlyRenewalTimestamp, uint64 dailyLimitChangeActivationTime, uint64 monthlyLimitChangeActivationTime, int256 timezoneOffset) newLimit)
TierCashbackPercentageSet
event TierCashbackPercentageSet(uint8[] tiers, uint256[] cashbackPercentages)
Unpaused
event Unpaused(address account)
Upgraded
event Upgraded(address indexed implementation)
WithdrawalAmountUpdated
event WithdrawalAmountUpdated(address indexed safe, address indexed token, uint256 amount)
WithdrawalCancelled
event WithdrawalCancelled(address indexed safe, address[] tokens, uint256[] amounts, address indexed recipient)
WithdrawalProcessed
event WithdrawalProcessed(address indexed safe, address[] tokens, uint256[] amounts, address indexed recipient)
WithdrawalRequested
event WithdrawalRequested(address indexed safe, address[] tokens, uint256[] amounts, address indexed recipient, uint256 finalizeTimestamp)
WithdrawTokensConfigured
event WithdrawTokensConfigured(address[] tokens, bool[] shouldWhitelist)
errors
AddressEmptyCode
error AddressEmptyCode(address target)
EnforcedPause
error EnforcedPause()
ERC1967InvalidImplementation
error ERC1967InvalidImplementation(address implementation)
ERC1967NonPayable
error ERC1967NonPayable()
ExpectedPause
error ExpectedPause()
FailedCall
error FailedCall()
InvalidInitialization
error InvalidInitialization()
NotInitializing
error NotInitializing()
OnlyCashModule
error OnlyCashModule()
OnlyRoleRegistryOwner
error OnlyRoleRegistryOwner()
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
Unauthorized
error Unauthorized()
UUPSUnauthorizedCallContext
error UUPSUnauthorizedCallContext()
UUPSUnsupportedProxiableUUID
error UUPSUnsupportedProxiableUUID(bytes32 slot)
creation bytecode
0x60c060405230608052348015610013575f5ffd5b5060405161226b38038061226b833981016040819052610032916100ff565b6001600160a01b03811660a05261004761004d565b5061012c565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161561009d5760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100fc5780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f6020828403121561010f575f5ffd5b81516001600160a01b0381168114610125575f5ffd5b9392505050565b60805160a0516121096101625f395f818161021b0152610d4f01525f8181610e0001528181610e290152610fdf01526121095ff3fe608060405260043610610195575f3560e01c80637269bb29116100e7578063c4d66de811610087578063d398e13e11610062578063d398e13e14610498578063de21d2cb146104b7578063ebc8acff146104d6578063f940b37f146104f5575f5ffd5b8063c4d66de81461043b578063cfd269ff1461045a578063d0a8fea514610479575f5ffd5b8063a853e0db116100c2578063a853e0db146103a1578063ab2a5f17146103c0578063ad3cb1cc146103df578063ae1901f51461041c575f5ffd5b80637269bb291461034f578063740242f21461036e5780638456cb591461038d575f5ffd5b80634f1ef286116101525780635cfd745b1161012d5780635cfd745b146102d35780636d15504b146102f25780637051eeeb1461031157806371aa1e0f14610330575f5ffd5b80634f1ef2861461027057806352d1902d146102835780635c975abb146102a5575f5ffd5b806308c73259146101995780630c18c250146101ca5780632b3b9591146101eb5780633575f0de1461020a5780633f4ba83a1461023d5780634739153e14610251575b5f5ffd5b3480156101a4575f5ffd5b506101ad610514565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156101d5575f5ffd5b506101e96101e4366004611376565b610542565b005b3480156101f6575f5ffd5b506101e9610205366004611510565b6105a6565b348015610215575f5ffd5b506101ad7f000000000000000000000000000000000000000000000000000000000000000081565b348015610248575f5ffd5b506101e96105f3565b34801561025c575f5ffd5b506101e961026b3660046115aa565b61065a565b6101e961027e366004611679565b6106c8565b34801561028e575f5ffd5b506102976106e7565b6040519081526020016101c1565b3480156102b0575f5ffd5b505f5160206120dd5f395f51905f525460ff1660405190151581526020016101c1565b3480156102de575f5ffd5b506101e96102ed36600461171c565b610702565b3480156102fd575f5ffd5b506101e961030c366004611777565b610755565b34801561031c575f5ffd5b506101e961032b3660046117e3565b6107c3565b34801561033b575f5ffd5b506101e961034a366004611510565b610815565b34801561035a575f5ffd5b506101e961036936600461187a565b610862565b348015610379575f5ffd5b506101e96103883660046118dd565b6108a7565b348015610398575f5ffd5b506101e9610901565b3480156103ac575f5ffd5b506101e96103bb3660046119d9565b610966565b3480156103cb575f5ffd5b506101e96103da366004611a1d565b6109a9565b3480156103ea575f5ffd5b5061040f604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516101c19190611a9c565b348015610427575f5ffd5b506101e9610436366004611ad1565b610a27565b348015610446575f5ffd5b506101e9610455366004611b2a565b610a60565b348015610465575f5ffd5b506101e9610474366004611376565b610b6c565b348015610484575f5ffd5b506101e9610493366004611b43565b610bc0565b3480156104a3575f5ffd5b506101e96104b2366004611c14565b610c1e565b3480156104c2575f5ffd5b506101e96104d1366004611c7e565b610c69565b3480156104e1575f5ffd5b506101e96104f0366004611cb7565b610cb1565b348015610500575f5ffd5b506101e961050f366004611ce8565b610cf9565b7fa5586bb7fe6c4d1a576fc53fefe6d5915940638d338769f6905020734977f500546001600160a01b031690565b61054a610d4d565b826001600160a01b0316846001600160a01b03167f774a98d5aacabc2dff76b4531406533e8f7e7fe933646d221fdd9f088ee1b2788484604051610598929190918252602082015260400190565b60405180910390a350505050565b6105ae610d4d565b806001600160a01b0316846001600160a01b03167f50efeea714c351006c4fa7822fb73539a491c1d587e149b8dc5bf4c1a70560668585604051610598929190611d92565b6105fb610514565b6040516317bf301f60e21b81523360048201526001600160a01b039190911690635efcc07c906024015f6040518083038186803b15801561063a575f5ffd5b505afa15801561064c573d5f5f3e3d5ffd5b50505050610658610d96565b565b610662610d4d565b85600181111561067457610674611db6565b87896001600160a01b03167f244f4cc0665ad7ee4709aa59b30d3ea581cecde1b0430a3f23a5dc609d4890fc88888888886040516106b6959493929190611dda565b60405180910390a45050505050505050565b6106d0610df5565b6106d982610e99565b6106e38282610f0e565b5050565b5f6106f0610fd4565b505f5160206120bd5f395f51905f5290565b61070a610d4d565b836001600160a01b03167ff6eabb9d9f10b3f417c46c38955eb7aea4886a913b32069a91a2af002dffee8d84848460405161074793929190611e34565b60405180910390a250505050565b61075d610d4d565b604080518681526001600160a01b038681166020830152918101859052606081018490528215159180891691908a16907fbea3376299fd4a4154a15ee47bad1a75515008a5eff6a6b7f9201df6c307203e9060800160405180910390a450505050505050565b6107cb610d4d565b60408051838152602081018390526001600160a01b038516917f924f842a696c18ba58a7aa6d0ff8ba2638475296a6ccb7dcc433ebac3b3cf39f91015b60405180910390a2505050565b61081d610d4d565b806001600160a01b0316846001600160a01b03167f5eed621d1eddc71f0ca04e002e24088109cd3fd594c7af230edbf9e73d6160478585604051610598929190611d92565b61086a610d4d565b7ff83edca8884b7bfc5ffcac35221eceb5e91ab682e2ad8b8818d53b7b2790c47b828260405161089b929190611e9f565b60405180910390a15050565b6108af610d4d565b816001600160a01b0316836001600160a01b03167fa240c4826a4f75edb281475f9abb4af98d8566f787e9d9752267a2f0228d9743836040516108f491815260200190565b60405180910390a3505050565b610909610514565b604051632fd0067b60e21b81523360048201526001600160a01b03919091169063bf4019ec906024015f6040518083038186803b158015610948575f5ffd5b505afa15801561095a573d5f5f3e3d5ffd5b5050505061065861101d565b61096e610d4d565b826001600160a01b03167f386efab796ecb0c216c9a39430a74f99716e683b28c915533174087017fe5d2d8383604051610808929190611f63565b6109b1610d4d565b604080518881526001600160a01b038881166020830152918101879052606081018690526080810185905260a0810184905282151591808b1691908c16907feb47a17fe64c36c7ac73cc029dd561d73e8df11215ed25fbb8c30653bf6d3a729060c00160405180910390a4505050505050505050565b610a2f610d4d565b7f33bdb4ad7a5e64d7fa41d735f724cc28a096df97d3349faf5bb084efb2bde4cc828260405161089b929190611f80565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f81158015610aa45750825b90505f826001600160401b03166001148015610abf5750303b155b905081158015610acd575080155b15610aeb5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610b1557845460ff60401b1916600160401b1785555b610b1e86611065565b8315610b6457845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b610b74610d4d565b604080516001600160a01b03858116825260208201859052918101839052908516907fb2304e3d75f4667ae0ecb838e9dda697e12be232df354a420abc4f76639026ca90606001610747565b610bc8610d4d565b816001600160a01b0316856001600160a01b03167fc48955aee858164993e89d10d9ad1aaf03010012434dac8ebae005105b1d4d6d868685604051610c0f93929190611fa4565b60405180910390a35050505050565b610c26610d4d565b7f4c1ac134bc04c2ce1a4e0d779d167b72a7bde79a5822e9577af08f0a7e3d2f4884848484604051610c5b9493929190611fd9565b60405180910390a150505050565b610c71610d4d565b7f9a7a564efdc544efb2511d89c7c8f8a2ffd24e178ebdd198acf620e3c769dd68838383604051610ca493929190612064565b60405180910390a1505050565b610cb9610d4d565b604080516001600160401b038085168252831660208201527fb07b127a37ca50fc53cb74f57fb1b4a82e87707c43e46499c27b2c857916810b910161089b565b610d01610d4d565b604080516001600160401b03808616825280851660208301528316918101919091527f0636ab8ae94ed9790b956b5528d2e025f4432b480391e5bb185211f71c42e84290606001610ca4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633146106585760405163e39d9c5760e01b815260040160405180910390fd5b610d9e6110b7565b5f5160206120dd5f395f51905f52805460ff191681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480610e7b57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610e6f5f5160206120bd5f395f51905f52546001600160a01b031690565b6001600160a01b031614155b156106585760405163703e46dd60e11b815260040160405180910390fd5b5f7fa5586bb7fe6c4d1a576fc53fefe6d5915940638d338769f6905020734977f5008054604051634766d28760e01b81523360048201529192506001600160a01b031690634766d287906024015f6040518083038186803b158015610efc575f5ffd5b505afa158015610b64573d5f5f3e3d5ffd5b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610f68575060408051601f3d908101601f19168201909252610f659181019061208f565b60015b610f9557604051634c9c8ce360e01b81526001600160a01b03831660048201526024015b60405180910390fd5b5f5160206120bd5f395f51905f528114610fc557604051632a87526960e21b815260048101829052602401610f8c565b610fcf83836110e6565b505050565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146106585760405163703e46dd60e11b815260040160405180910390fd5b61102561113b565b5f5160206120dd5f395f51905f52805460ff191660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610dd7565b61106d61116b565b7fa5586bb7fe6c4d1a576fc53fefe6d5915940638d338769f6905020734977f50080546001600160a01b0319166001600160a01b0383161781556110af6111b4565b6106e36111bc565b5f5160206120dd5f395f51905f525460ff1661065857604051638dfc202b60e01b815260040160405180910390fd5b6110ef826111dc565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a280511561113357610fcf828261123f565b6106e36112b1565b5f5160206120dd5f395f51905f525460ff16156106585760405163d93c066560e01b815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661065857604051631afcd79f60e31b815260040160405180910390fd5b61065861116b565b6111c461116b565b5f5160206120dd5f395f51905f52805460ff19169055565b806001600160a01b03163b5f0361121157604051634c9c8ce360e01b81526001600160a01b0382166004820152602401610f8c565b5f5160206120bd5f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b60605f5f846001600160a01b03168460405161125b91906120a6565b5f60405180830381855af49150503d805f8114611293576040519150601f19603f3d011682016040523d82523d5f602084013e611298565b606091505b50915091506112a88583836112d0565b95945050505050565b34156106585760405163b398979f60e01b815260040160405180910390fd5b6060826112e5576112e08261132f565b611328565b81511580156112fc57506001600160a01b0384163b155b1561132557604051639996b31560e01b81526001600160a01b0385166004820152602401610f8c565b50805b9392505050565b80511561133f5780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b50565b80356001600160a01b0381168114611371575f5ffd5b919050565b5f5f5f5f60808587031215611389575f5ffd5b6113928561135b565b93506113a06020860161135b565b93969395505050506040820135916060013590565b634e487b7160e01b5f52604160045260245ffd5b60405161016081016001600160401b03811182821017156113ec576113ec6113b5565b60405290565b604051601f8201601f191681016001600160401b038111828210171561141a5761141a6113b5565b604052919050565b5f6001600160401b0382111561143a5761143a6113b5565b5060051b60200190565b5f82601f830112611453575f5ffd5b813561146661146182611422565b6113f2565b8082825260208201915060208360051b860101925085831115611487575f5ffd5b602085015b838110156114ab5761149d8161135b565b83526020928301920161148c565b5095945050505050565b5f82601f8301126114c4575f5ffd5b81356114d261146182611422565b8082825260208201915060208360051b8601019250858311156114f3575f5ffd5b602085015b838110156114ab5780358352602092830192016114f8565b5f5f5f5f60808587031215611523575f5ffd5b61152c8561135b565b935060208501356001600160401b03811115611546575f5ffd5b61155287828801611444565b93505060408501356001600160401b0381111561156d575f5ffd5b611579878288016114b5565b9250506115886060860161135b565b905092959194509250565b60028110611358575f5ffd5b803561137181611593565b5f5f5f5f5f5f5f5f610100898b0312156115c2575f5ffd5b6115cb8961135b565b9750602089013596506115e060408a0161159f565b955060608901356001600160401b038111156115fa575f5ffd5b6116068b828c01611444565b95505060808901356001600160401b03811115611621575f5ffd5b61162d8b828c016114b5565b94505060a08901356001600160401b03811115611648575f5ffd5b6116548b828c016114b5565b93505060c0890135915061166a60e08a0161159f565b90509295985092959890939650565b5f5f6040838503121561168a575f5ffd5b6116938361135b565b915060208301356001600160401b038111156116ad575f5ffd5b8301601f810185136116bd575f5ffd5b80356001600160401b038111156116d6576116d66113b5565b6116e9601f8201601f19166020016113f2565b8181528660208385010111156116fd575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f5f5f5f6080858703121561172f575f5ffd5b6117388561135b565b9350602085013561174881611593565b9250604085013561175881611593565b9396929550929360600135925050565b80358015158114611371575f5ffd5b5f5f5f5f5f5f5f60e0888a03121561178d575f5ffd5b6117968861135b565b96506117a46020890161135b565b9550604088013594506117b96060890161135b565b93506080880135925060a088013591506117d560c08901611768565b905092959891949750929550565b5f5f5f606084860312156117f5575f5ffd5b6117fe8461135b565b95602085013595506040909401359392505050565b5f82601f830112611822575f5ffd5b813561183061146182611422565b8082825260208201915060208360051b860101925085831115611851575f5ffd5b602085015b838110156114ab5780356005811061186c575f5ffd5b835260209283019201611856565b5f5f6040838503121561188b575f5ffd5b82356001600160401b038111156118a0575f5ffd5b6118ac85828601611813565b92505060208301356001600160401b038111156118c7575f5ffd5b6118d3858286016114b5565b9150509250929050565b5f5f5f606084860312156118ef575f5ffd5b6118f88461135b565b92506119066020850161135b565b929592945050506040919091013590565b80356001600160401b0381168114611371575f5ffd5b5f610160828403121561193e575f5ffd5b6119466113c9565b823581526020808401359082015260408084013590820152606080840135908201526080808401359082015260a08084013590820152905061198a60c08301611917565b60c082015261199b60e08301611917565b60e08201526119ad6101008301611917565b6101008201526119c06101208301611917565b6101208201526101409182013591810191909152919050565b5f5f5f6102e084860312156119ec575f5ffd5b6119f58461135b565b9250611a04856020860161192d565b9150611a1485610180860161192d565b90509250925092565b5f5f5f5f5f5f5f5f5f6101208a8c031215611a36575f5ffd5b611a3f8a61135b565b9850611a4d60208b0161135b565b975060408a01359650611a6260608b0161135b565b955060808a0135945060a08a0135935060c08a0135925060e08a01359150611a8d6101008b01611768565b90509295985092959850929598565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f5f60408385031215611ae2575f5ffd5b82356001600160401b03811115611af7575f5ffd5b611b0385828601611444565b92505060208301356001600160401b03811115611b1e575f5ffd5b6118d385828601611813565b5f60208284031215611b3a575f5ffd5b6113288261135b565b5f5f5f5f5f60a08688031215611b57575f5ffd5b611b608661135b565b945060208601356001600160401b03811115611b7a575f5ffd5b611b8688828901611444565b94505060408601356001600160401b03811115611ba1575f5ffd5b611bad888289016114b5565b935050611bbc6060870161135b565b949793965091946080013592915050565b5f5f83601f840112611bdd575f5ffd5b5081356001600160401b03811115611bf3575f5ffd5b6020830191508360208260051b8501011115611c0d575f5ffd5b9250929050565b5f5f5f5f60408587031215611c27575f5ffd5b84356001600160401b03811115611c3c575f5ffd5b611c4887828801611bcd565b90955093505060208501356001600160401b03811115611c66575f5ffd5b611c7287828801611bcd565b95989497509550505050565b5f5f5f60608486031215611c90575f5ffd5b8335611c9b81611593565b9250611ca96020850161135b565b9150611a146040850161135b565b5f5f60408385031215611cc8575f5ffd5b611cd183611917565b9150611cdf60208401611917565b90509250929050565b5f5f5f60608486031215611cfa575f5ffd5b611d0384611917565b9250611d1160208501611917565b9150611a1460408501611917565b5f8151808452602084019350602083015f5b82811015611d585781516001600160a01b0316865260209586019590910190600101611d31565b5093949350505050565b5f8151808452602084019350602083015f5b82811015611d58578151865260209586019590910190600101611d74565b604081525f611da46040830185611d1f565b82810360208401526112a88185611d62565b634e487b7160e01b5f52602160045260245ffd5b6002811061135857611358611db6565b60a081525f611dec60a0830188611d1f565b8281036020840152611dfe8188611d62565b90508281036040840152611e128187611d62565b915050836060830152611e2483611dca565b8260808301529695505050505050565b60608101611e4185611dca565b848252611e4d84611dca565b602082019390935260400152919050565b5f8151808452602084019350602083015f5b82811015611d5857815160058110611e8a57611e8a611db6565b86526020958601959190910190600101611e70565b604081525f611da46040830185611e5e565b805182526020810151602083015260408101516040830152606081015160608301526080810151608083015260a081015160a083015260c0810151611f0160c08401826001600160401b03169052565b5060e0810151611f1c60e08401826001600160401b03169052565b50610100810151611f396101008401826001600160401b03169052565b50610120810151611f566101208401826001600160401b03169052565b5061014090810151910152565b6102c08101611f728285611eb1565b611328610160830184611eb1565b604081525f611f926040830185611d1f565b82810360208401526112a88185611e5e565b606081525f611fb66060830186611d1f565b8281036020840152611fc88186611d62565b915050826040830152949350505050565b604080825281018490525f8560608301825b87811015612019576001600160a01b036120048461135b565b16825260209283019290910190600101611feb565b50838103602080860191909152858252019050845f5b858110156120575761204082611768565b15158352602092830192919091019060010161202f565b5090979650505050505050565b6060810161207185611dca565b9381526001600160a01b039283166020820152911660409091015290565b5f6020828403121561209f575f5ffd5b5051919050565b5f82518060208501845e5f92019182525091905056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbccd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300a164736f6c634300081c000a0000000000000000000000007ca0b75e67e33c0014325b739a8d019c4fe445f0