17 txs
18 calls
constructor
constructor(address _ethUsdFeed, address _feeRecipient)
functions
ethUsdFeed
viewfunction ethUsdFeed() view returns (address)
feeRecipient
viewfunction feeRecipient() view returns (address)
getRouters
viewfunction getRouters() view returns (address[])
getTrackedTokens
viewfunction getTrackedTokens() view returns (address[])
getUserClaimableETH
viewfunction getUserClaimableETH(address user) view returns (uint256)
isAdmin
viewfunction isAdmin(address) view returns (bool)
MAX_FEE_BPS
viewfunction MAX_FEE_BPS() view returns (uint256)
maxSlippageBps
viewfunction maxSlippageBps() view returns (uint256)
owner
viewfunction owner() view returns (address)
paused
viewfunction paused() view returns (bool)
priceFreshness
viewfunction priceFreshness() view returns (uint256)
routerAllowed
viewfunction routerAllowed(address) view returns (bool)
routerList
viewfunction routerList(uint256) view returns (address)
shares
viewfunction shares(address) view returns (uint256)
tokenUsdFeed
viewfunction tokenUsdFeed(address) view returns (address)
totalShares
viewfunction totalShares() view returns (uint256)
totalValueInETH
viewfunction totalValueInETH() view returns (uint256)
trackedTokens
viewfunction trackedTokens(uint256) view returns (address)
withdrawalFeeBps
viewfunction withdrawalFeeBps() view returns (uint256)
addTrackedToken
nonpayablefunction addTrackedToken(address token)
approveToken
nonpayablefunction approveToken(address token, address spender, uint256 amount)
deposit
payablefunction deposit() payable
executeTrade
nonpayablefunction executeTrade(address router, uint256 valueSent, bytes data)
pause
nonpayablefunction pause()
removeTrackedToken
nonpayablefunction removeTrackedToken(uint256 index)
renounceOwnership
nonpayablefunction renounceOwnership()
rescueToken
nonpayablefunction rescueToken(address token, uint256 amount, address to)
setAdmin
nonpayablefunction setAdmin(address admin, bool enabled)
setEthUsdFeed
nonpayablefunction setEthUsdFeed(address feed)
setFeeRecipient
nonpayablefunction setFeeRecipient(address recipient)
setMaxSlippageBps
nonpayablefunction setMaxSlippageBps(uint256 bps)
setPriceFreshness
nonpayablefunction setPriceFreshness(uint256 secondsThreshold)
setRouter
nonpayablefunction setRouter(address router, bool allowed)
setTokenUsdFeed
nonpayablefunction setTokenUsdFeed(address token, address feed)
setWithdrawalFeeBps
nonpayablefunction setWithdrawalFeeBps(uint256 bps)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
unpause
nonpayablefunction unpause()
withdraw
nonpayablefunction withdraw(uint256 shareAmount)
events
AdminSet
event AdminSet(address indexed admin, bool enabled)
Deposit
event Deposit(address indexed user, uint256 amountEth, uint256 mintedShares)
EthFeedSet
event EthFeedSet(address indexed feed)
FeeParamsUpdated
event FeeParamsUpdated(uint256 feeBps, address feeRecipient)
MaxSlippageUpdated
event MaxSlippageUpdated(uint256 bps)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
Paused
event Paused(address account)
PriceFreshnessUpdated
event PriceFreshnessUpdated(uint256 secondsThreshold)
Rescue
event Rescue(address indexed token, uint256 amount, address to)
RouterEnumerated
event RouterEnumerated(address[] routers)
RouterUpdated
event RouterUpdated(address indexed router, bool allowed)
TokenFeedSet
event TokenFeedSet(address indexed token, address indexed feed)
TokenTracked
event TokenTracked(address indexed token, bool added)
TradeExecuted
event TradeExecuted(address indexed router, uint256 valueSent, bytes data)
Unpaused
event Unpaused(address account)
Withdraw
event Withdraw(address indexed user, uint256 sharesBurned, uint256 grossEthOut, uint256 feeEth, uint256 netEthOut)
errors
BadIndex
error BadIndex()
EnforcedPause
error EnforcedPause()
ExpectedPause
error ExpectedPause()
FeeTooHigh
error FeeTooHigh()
InvalidParam
error InvalidParam()
NotAdmin
error NotAdmin()
NotAllowedRouter
error NotAllowedRouter()
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
ValueTooOld
error ValueTooOld()
WithdrawExceedsShares
error WithdrawExceedsShares()
ZeroAddress
error ZeroAddress()
ZeroAmount
error ZeroAmount()
creation bytecode
0x608060405260326005556064600755610e1060085534801561001f575f5ffd5b5060405161250c38038061250c83398101604081905261003e91610147565b338061006357604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b61006c816100dd565b50600180556001600160a01b038216158061008e57506001600160a01b038116155b156100ac5760405163d92e233d60e01b815260040160405180910390fd5b600b80546001600160a01b039384166001600160a01b03199182161790915560068054929093169116179055610178565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b0381168114610142575f5ffd5b919050565b5f5f60408385031215610158575f5ffd5b6101618361012c565b915061016f6020840161012c565b90509250929050565b612387806101855f395ff3fe608060405260043610610220575f3560e01c80638009b7bd1161011e578063ce7c2ac2116100a8578063e74b981b1161006d578063e74b981b1461062e578063f2fde38b1461064d578063f88c31ce1461066c578063f8a67a6214610680578063f9ac1f671461069f575f5ffd5b8063ce7c2ac2146105a8578063d0e30db0146105d3578063d55be8c6146105db578063d61729bf146105f0578063da3e33971461060f575f5ffd5b80638da5cb5b116100ee5780638da5cb5b14610525578063c23672cb14610541578063c2d7cf8c14610560578063c3c6467414610574578063c4aa739514610593575f5ffd5b80638009b7bd146104b45780638305368a146104d35780638456cb59146104f257806389dcfbb114610506575f5ffd5b80633f4ba83a116101aa5780635c975abb1161016f5780635c975abb1461042e578063604b57541461044b578063695def4c1461046a578063715018a61461048b5780637e9f72af1461049f575f5ffd5b80633f4ba83a1461039e57806346904840146103b25780634b0bddd2146103d15780634e53c13e146103f057806355a754751461040f575f5ffd5b806325fc1b3d116101f057806325fc1b3d146102fe5780632e1a7d4d1461031d57806330d1ad6d1461033c57806338e351021461035b5780633a98ef3914610389575f5ffd5b806304336bb31461022b57806312d2d79b14610253578063241675241461029f57806324d7806c146102c0575f5ffd5b3661022757005b5f5ffd5b348015610236575f5ffd5b5061024060055481565b6040519081526020015b60405180910390f35b34801561025e575f5ffd5b5061028761026d366004611e9d565b600d6020525f90815260409020546001600160a01b031681565b6040516001600160a01b03909116815260200161024a565b3480156102aa575f5ffd5b506102be6102b9366004611ebd565b6106be565b005b3480156102cb575f5ffd5b506102ee6102da366004611e9d565b60026020525f908152604090205460ff1681565b604051901515815260200161024a565b348015610309575f5ffd5b506102be610318366004611ebd565b610776565b348015610328575f5ffd5b506102be610337366004611ebd565b610838565b348015610347575f5ffd5b50610240610356366004611e9d565b610aff565b348015610366575f5ffd5b506102ee610375366004611e9d565b60096020525f908152604090205460ff1681565b348015610394575f5ffd5b5061024060045481565b3480156103a9575f5ffd5b506102be610b4d565b3480156103bd575f5ffd5b50600654610287906001600160a01b031681565b3480156103dc575f5ffd5b506102be6103eb366004611ee1565b610b5f565b3480156103fb575f5ffd5b5061028761040a366004611ebd565b610bc6565b34801561041a575f5ffd5b506102be610429366004611e9d565b610bee565b348015610439575f5ffd5b505f54600160a01b900460ff166102ee565b348015610456575f5ffd5b506102be610465366004611f16565b610ca5565b348015610475575f5ffd5b5061047e610e4b565b60405161024a9190611f99565b348015610496575f5ffd5b506102be610eab565b3480156104aa575f5ffd5b5061024060085481565b3480156104bf575f5ffd5b50600b54610287906001600160a01b031681565b3480156104de575f5ffd5b506102876104ed366004611ebd565b610ebc565b3480156104fd575f5ffd5b506102be610ecb565b348015610511575f5ffd5b506102be610520366004611e9d565b610edb565b348015610530575f5ffd5b505f546001600160a01b0316610287565b34801561054c575f5ffd5b506102be61055b366004611ebd565b61101e565b34801561056b575f5ffd5b506102406110d7565b34801561057f575f5ffd5b506102be61058e366004611ee1565b6111a4565b34801561059e575f5ffd5b5061024060075481565b3480156105b3575f5ffd5b506102406105c2366004611e9d565b60036020525f908152604090205481565b6102be611324565b3480156105e6575f5ffd5b506102406101f481565b3480156105fb575f5ffd5b506102be61060a366004611ebd565b611423565b34801561061a575f5ffd5b506102be610629366004611fe4565b61159d565b348015610639575f5ffd5b506102be610648366004611e9d565b611754565b348015610658575f5ffd5b506102be610667366004611e9d565b61181a565b348015610677575f5ffd5b5061047e611854565b34801561068b575f5ffd5b506102be61069a36600461201e565b6118b2565b3480156106aa575f5ffd5b506102be6106b9366004612057565b6119e0565b5f546001600160a01b031633148015906106e75750335f9081526002602052604090205460ff16155b1561070557604051637bfa4b9f60e01b815260040160405180910390fd5b6101f48111156107285760405163cd4e616760e01b815260040160405180910390fd5b6005819055600654604080518381526001600160a01b0390921660208301527feecc969cd8da3140016e16b0603215de782af59713abfc5055d917b88f4a7b9191015b60405180910390a150565b5f546001600160a01b0316331480159061079f5750335f9081526002602052604090205460ff16155b156107bd57604051637bfa4b9f60e01b815260040160405180910390fd5b6103e88111156108035760405162461bcd60e51b815260206004820152600c60248201526b736c6970706167653e31302560a01b60448201526064015b60405180910390fd5b60078190556040518181527f9c922f6d0c990b250e9dd0a427a5c8da7f44b960f697fecb31cbbd8ba79ec8c29060200161076b565b610840611ab8565b610848611ae2565b805f0361086857604051631f2a200560e01b815260040160405180910390fd5b335f9081526003602052604090205481111561089757604051632129209560e21b815260040160405180910390fd5b5f6108a06110d7565b90505f60045483836108b2919061209c565b6108bc91906120b3565b335f908152600360205260408120805492935085929091906108df9084906120d2565b925050819055508260045f8282546108f791906120d2565b90915550506005545f906127109061090f908461209c565b61091991906120b3565b90505f61092682846120d2565b9050824710156109785760405162461bcd60e51b815260206004820152601a60248201527f696e73756666696369656e7420455448206c697175696469747900000000000060448201526064016107fa565b6006546040515f916001600160a01b03169084908381818185875af1925050503d805f81146109c2576040519150601f19603f3d011682016040523d82523d5f602084013e6109c7565b606091505b5050905080610a0e5760405162461bcd60e51b8152602060048201526013602482015272199959481d1c985b9cd9995c8819985a5b1959606a1b60448201526064016107fa565b6040515f90339084908381818185875af1925050503d805f8114610a4d576040519150601f19603f3d011682016040523d82523d5f602084013e610a52565b606091505b5050905080610aa35760405162461bcd60e51b815260206004820152601860248201527f7769746864726177207472616e73666572206661696c6564000000000000000060448201526064016107fa565b60408051888152602081018790529081018590526060810184905233907fe08737ac48a1dab4b1a46c7dc9398bd5bfc6d7ad6fabb7cd8caa254de14def359060800160405180910390a2505050505050610afc60018055565b50565b5f6004545f03610b1057505f919050565b6004546001600160a01b0383165f90815260036020526040902054610b336110d7565b610b3d919061209c565b610b4791906120b3565b92915050565b610b55611b0c565b610b5d611b38565b565b610b67611b0c565b6001600160a01b0382165f81815260026020908152604091829020805460ff191685151590811790915591519182527fe68d2c359a771606c400cf8b87000cf5864010363d6a736e98f5047b7bbe18e991015b60405180910390a25050565b600a8181548110610bd5575f80fd5b5f918252602090912001546001600160a01b0316905081565b5f546001600160a01b03163314801590610c175750335f9081526002602052604090205460ff16155b15610c3557604051637bfa4b9f60e01b815260040160405180910390fd5b6001600160a01b038116610c5c5760405163d92e233d60e01b815260040160405180910390fd5b600b80546001600160a01b0319166001600160a01b0383169081179091556040517fee1d0e23ccf777e51883b586eb4c5453f924222d7caad7310fba59e1ec4b46f7905f90a250565b5f546001600160a01b03163314801590610cce5750335f9081526002602052604090205460ff16155b15610cec57604051637bfa4b9f60e01b815260040160405180910390fd5b610cf4611ab8565b610cfc611ae2565b6001600160a01b0384165f9081526009602052604090205460ff16610d3457604051633ba6b9a560e01b815260040160405180910390fd5b47831115610d5557604051633494a40d60e21b815260040160405180910390fd5b5f846001600160a01b0316848484604051610d719291906120e5565b5f6040518083038185875af1925050503d805f8114610dab576040519150601f19603f3d011682016040523d82523d5f602084013e610db0565b606091505b5050905080610df65760405162461bcd60e51b81526020600482015260126024820152711c9bdd5d195c8818d85b1b0819985a5b195960721b60448201526064016107fa565b846001600160a01b03167f3a01071b5ba48a1a263069a16f634ac859431aadc65b9a622c9566f778a7bb3a858585604051610e33939291906120f4565b60405180910390a250610e4560018055565b50505050565b6060600c805480602002602001604051908101604052809291908181526020018280548015610ea157602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311610e83575b5050505050905090565b610eb3611b0c565b610b5d5f611b8c565b600c8181548110610bd5575f80fd5b610ed3611b0c565b610b5d611bdb565b5f546001600160a01b03163314801590610f045750335f9081526002602052604090205460ff16155b15610f2257604051637bfa4b9f60e01b815260040160405180910390fd5b6001600160a01b038116610f495760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b038181165f908152600d602052604090205416610f995760405162461bcd60e51b81526020600482015260076024820152661b9bc81999595960ca1b60448201526064016107fa565b600c8054600180820183555f929092527fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c70180546001600160a01b0319166001600160a01b038416908117909155604051918252907f984a9a011223779b7712405b13be4a4d1a0897e0bec7e12f7a712325200f5ed49060200160405180910390a250565b5f546001600160a01b031633148015906110475750335f9081526002602052604090205460ff16155b1561106557604051637bfa4b9f60e01b815260040160405180910390fd5b603c8110156110a25760405162461bcd60e51b81526020600482015260096024820152681d1bdbc81cda1bdc9d60ba1b60448201526064016107fa565b60088190556040518181527fb12d1f8388ddd80f7278ffd576fea8ed6c7a8d7a62bf83baaf208f6d2387bc5d9060200161076b565b5f47815b600c5481101561119e575f600c82815481106110f9576110f9612129565b5f9182526020822001546040516370a0823160e01b81523060048201526001600160a01b03909116925082906370a0823190602401602060405180830381865afa158015611149573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061116d919061213d565b9050805f0361117d575050611196565b6111878282611c1d565b6111919085612154565b935050505b6001016110db565b50919050565b5f546001600160a01b031633148015906111cd5750335f9081526002602052604090205460ff16155b156111eb57604051637bfa4b9f60e01b815260040160405180910390fd5b6001600160a01b0382166112125760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0382165f9081526009602052604090205460ff16151581151514611320576001600160a01b0382165f908152600960205260409020805460ff191682158015919091179091556112e357600a80546001810182555f8290527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80180546001600160a01b0319166001600160a01b0385161790556040517f41b36c4838c2155f81d3f02abd14046464969878c67953b9f96637186d7f6c30916112da91612167565b60405180910390a15b816001600160a01b03167fab5814e9f0dc78998a367cdeb77f1143370431cce307f90adb6db02f49fd768a82604051610bba911515815260200190565b5050565b61132c611ab8565b611334611ae2565b345f0361135457604051631f2a200560e01b815260040160405180910390fd5b5f3461135e6110d7565b61136891906120d2565b90505f6004545f1480611379575081155b61139b57816004543461138c919061209c565b61139691906120b3565b61139d565b345b335f908152600360205260408120805492935083929091906113c0908490612154565b925050819055508060045f8282546113d89190612154565b9091555050604080513481526020810183905233917f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a15910160405180910390a25050610b5d60018055565b5f546001600160a01b0316331480159061144c5750335f9081526002602052604090205460ff16155b1561146a57604051637bfa4b9f60e01b815260040160405180910390fd5b600c54811061148c5760405163779ffa5760e11b815260040160405180910390fd5b5f600c82815481106114a0576114a0612129565b5f91825260209091200154600c80546001600160a01b039092169250906114c9906001906120d2565b815481106114d9576114d9612129565b5f91825260209091200154600c80546001600160a01b03909216918490811061150457611504612129565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b03160217905550600c805480611540576115406121aa565b5f828152602080822083015f1990810180546001600160a01b03191690559092019092556040519182526001600160a01b038316917f984a9a011223779b7712405b13be4a4d1a0897e0bec7e12f7a712325200f5ed49101610bba565b5f546001600160a01b031633148015906115c65750335f9081526002602052604090205460ff16155b156115e457604051637bfa4b9f60e01b815260040160405180910390fd5b6115ec611ab8565b60405163095ea7b360e01b81526001600160a01b0383811660048301525f602483015284169063095ea7b3906044016020604051808303815f875af1158015611637573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061165b91906121be565b61169e5760405162461bcd60e51b8152602060048201526014602482015273185c1c1c9bdd99481c995cd95d0819985a5b195960621b60448201526064016107fa565b60405163095ea7b360e01b81526001600160a01b0383811660048301526024820183905284169063095ea7b3906044016020604051808303815f875af11580156116ea573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061170e91906121be565b61174f5760405162461bcd60e51b8152602060048201526012602482015271185c1c1c9bdd99481cd95d0819985a5b195960721b60448201526064016107fa565b505050565b5f546001600160a01b0316331480159061177d5750335f9081526002602052604090205460ff16155b1561179b57604051637bfa4b9f60e01b815260040160405180910390fd5b6001600160a01b0381166117c25760405163d92e233d60e01b815260040160405180910390fd5b600680546001600160a01b0319166001600160a01b0383169081179091556005546040805191825260208201929092527feecc969cd8da3140016e16b0603215de782af59713abfc5055d917b88f4a7b91910161076b565b611822611b0c565b6001600160a01b03811661184b57604051631e4fbdf760e01b81525f60048201526024016107fa565b610afc81611b8c565b6060600a805480602002602001604051908101604052809291908181526020018280548015610ea157602002820191905f5260205f209081546001600160a01b03168152600190910190602001808311610e83575050505050905090565b6118ba611b0c565b6001600160a01b0381166118e15760405163d92e233d60e01b815260040160405180910390fd5b60405163a9059cbb60e01b81526001600160a01b0382811660048301526024820184905284169063a9059cbb906044016020604051808303815f875af115801561192d573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061195191906121be565b6119965760405162461bcd60e51b81526020600482015260166024820152751c995cd8dd59481d1c985b9cd9995c8819985a5b195960521b60448201526064016107fa565b604080518381526001600160a01b0383811660208301528516917fd27dd37d941f5a1b76926e48140fdbf50a0c59defb5431a391a1260279eb1c4c910160405180910390a2505050565b5f546001600160a01b03163314801590611a095750335f9081526002602052604090205460ff16155b15611a2757604051637bfa4b9f60e01b815260040160405180910390fd5b6001600160a01b0382161580611a4457506001600160a01b038116155b15611a625760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b038281165f818152600d602052604080822080546001600160a01b0319169486169485179055517fbe4827a60dffad42f53c481f71ce0c3153643cda67b20d35ac61d76838b2b6169190a35050565b5f54600160a01b900460ff1615610b5d5760405163d93c066560e01b815260040160405180910390fd5b600260015403611b0557604051633ee5aeb560e01b815260040160405180910390fd5b6002600155565b5f546001600160a01b03163314610b5d5760405163118cdaa760e01b81523360048201526024016107fa565b611b40611cd9565b5f805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b611be3611ab8565b5f805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611b6f3390565b6001600160a01b038083165f908152600d602052604081205490911680611c705760405162461bcd60e51b81526020600482015260076024820152661b9bc81999595960ca1b60448201526064016107fa565b5f5f611c7b83611d02565b509092509050815f611c8e83600a6122bc565b611c98838961209c565b611ca291906120b3565b90505f611cad611e2d565b9050670de0b6b3a7640000611cc2828461209c565b611ccc91906120b3565b9998505050505050505050565b5f54600160a01b900460ff16610b5d57604051638dfc202b60e01b815260040160405180910390fd5b5f5f5f5f849050806001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015611d45573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d6991906122e3565b506040805163313ce56760e01b815290519398509095506001600160a01b038516935063313ce56792600480830193506020928290030181865afa158015611db3573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611dd79190612331565b92505f8413611df957604051633494a40d60e21b815260040160405180910390fd5b600854611e0683426120d2565b1115611e255760405163d1fd648360e01b815260040160405180910390fd5b509193909250565b600b545f9081908190611e48906001600160a01b0316611d02565b509092509050815f611e5b83600a6122bc565b611e6d90670de0b6b3a764000061209c565b9050611e7982826120b3565b94505050505090565b80356001600160a01b0381168114611e98575f5ffd5b919050565b5f60208284031215611ead575f5ffd5b611eb682611e82565b9392505050565b5f60208284031215611ecd575f5ffd5b5035919050565b8015158114610afc575f5ffd5b5f5f60408385031215611ef2575f5ffd5b611efb83611e82565b91506020830135611f0b81611ed4565b809150509250929050565b5f5f5f5f60608587031215611f29575f5ffd5b611f3285611e82565b935060208501359250604085013567ffffffffffffffff811115611f54575f5ffd5b8501601f81018713611f64575f5ffd5b803567ffffffffffffffff811115611f7a575f5ffd5b876020828401011115611f8b575f5ffd5b949793965060200194505050565b602080825282518282018190525f918401906040840190835b81811015611fd95783516001600160a01b0316835260209384019390920191600101611fb2565b509095945050505050565b5f5f5f60608486031215611ff6575f5ffd5b611fff84611e82565b925061200d60208501611e82565b929592945050506040919091013590565b5f5f5f60608486031215612030575f5ffd5b61203984611e82565b92506020840135915061204e60408501611e82565b90509250925092565b5f5f60408385031215612068575f5ffd5b61207183611e82565b915061207f60208401611e82565b90509250929050565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417610b4757610b47612088565b5f826120cd57634e487b7160e01b5f52601260045260245ffd5b500490565b81810381811115610b4757610b47612088565b818382375f9101908152919050565b83815260406020820152816040820152818360608301375f818301606090810191909152601f909201601f1916010192915050565b634e487b7160e01b5f52603260045260245ffd5b5f6020828403121561214d575f5ffd5b5051919050565b80820180821115610b4757610b47612088565b602080825282548282018190525f848152918220906040840190835b81811015611fd95783546001600160a01b0316835260019384019360209093019201612183565b634e487b7160e01b5f52603160045260245ffd5b5f602082840312156121ce575f5ffd5b8151611eb681611ed4565b6001815b6001841115612214578085048111156121f8576121f8612088565b600184161561220657908102905b60019390931c9280026121dd565b935093915050565b5f8261222a57506001610b47565b8161223657505f610b47565b816001811461224c576002811461225657612272565b6001915050610b47565b60ff84111561226757612267612088565b50506001821b610b47565b5060208310610133831016604e8410600b8410161715612295575081810a610b47565b6122a15f1984846121d9565b805f19048211156122b4576122b4612088565b029392505050565b5f611eb660ff84168361221c565b805169ffffffffffffffffffff81168114611e98575f5ffd5b5f5f5f5f5f60a086880312156122f7575f5ffd5b612300866122ca565b60208701516040880151606089015192975090955093509150612325608087016122ca565b90509295509295909350565b5f60208284031215612341575f5ffd5b815160ff81168114611eb6575f5ffdfea2646970667358221220c0c55efe1c7fba5097f44fd097b0930cfe9b68edf30b1f2b83b7441f6e71bbbf64736f6c634300081e00330000000000000000000000005f4ec3df9cbd43714fe2740f5e3616155c5b841900000000000000000000000096713c4e658d08645d93ccd2a4f9ecd6e576d391