0 txs
0 calls
constructor
constructor(address _xsdToken, address _bankxToken, address _pidController, address _ethUsdPriceFeed)
functions
approvedFunctions
viewfunction approvedFunctions(address) view returns (bool)
bankxToken
viewfunction bankxToken() view returns (address)
canDeposit
viewfunction canDeposit() view returns (bool canDep, string reason)
canWithdraw
viewfunction canWithdraw() view returns (bool canWith, string reason)
chainlinkAutomationAddress
viewfunction chainlinkAutomationAddress() view returns (address)
currentInterestRate
viewfunction currentInterestRate() view returns (uint256)
debugUsdToXSD
viewfunction debugUsdToXSD(uint256 usdAmount) view returns (uint256 silverPricePerOunce, uint256 silverPricePerGram, uint256 numerator, uint256 xsdAmount)
ethUsdPriceFeed
viewfunction ethUsdPriceFeed() view returns (address)
getAvailableDepositUsdValue
viewfunction getAvailableDepositUsdValue() view returns (uint256)
getDaysUntilNextRateIncrease
viewfunction getDaysUntilNextRateIncrease() view returns (uint256)
getMaximumRate
purefunction getMaximumRate() pure returns (uint256)
getTargetUsdValue
viewfunction getTargetUsdValue() view returns (uint256)
getTimeUntilNextRateIncrease
viewfunction getTimeUntilNextRateIncrease() view returns (uint256)
getUserDepositInfo
viewfunction getUserDepositInfo(address user) view returns (tuple)
globalTransactionLockBlocks
viewfunction globalTransactionLockBlocks() view returns (uint256)
globalTransactionLockTime
viewfunction globalTransactionLockTime() view returns (uint256)
lastDailyRateIncreaseTimestamp
viewfunction lastDailyRateIncreaseTimestamp() view returns (uint256)
lastExecutionTimestamp
viewfunction lastExecutionTimestamp() view returns (uint256)
lastRateUpdate
viewfunction lastRateUpdate() view returns (uint256)
lastTransactionBlock
viewfunction lastTransactionBlock() view returns (uint256)
lastTransactionTimestamp
viewfunction lastTransactionTimestamp() view returns (uint256)
lastTransactionType
viewfunction lastTransactionType() view returns (uint256)
owner
viewfunction owner() view returns (address)
paused
viewfunction paused() view returns (bool)
pidController
viewfunction pidController() view returns (address)
rateIncreaseAmount
viewfunction rateIncreaseAmount() view returns (uint256)
rateIncreaseInterval
viewfunction rateIncreaseInterval() view returns (uint256)
rulesEngine
viewfunction rulesEngine() view returns (address)
rulesEngineCooldown
viewfunction rulesEngineCooldown() view returns (uint256)
targetDepositUsd
viewfunction targetDepositUsd() view returns (uint256)
targetMarketCapPercent
viewfunction targetMarketCapPercent() view returns (uint256)
totalBankXDepositedUsd
viewfunction totalBankXDepositedUsd() view returns (uint256)
totalDepositedAllTime
viewfunction totalDepositedAllTime() view returns (uint256)
totalNativeDepositedUsd
viewfunction totalNativeDepositedUsd() view returns (uint256)
totalXSDDepositedUsd
viewfunction totalXSDDepositedUsd() view returns (uint256)
userDeposits
viewfunction userDeposits(address) view returns (uint256 principalUsd, uint256 weightedRate, uint256 accumulatedInterest, uint256 lastUpdateTime)
xsdMarketCapUsd
viewfunction xsdMarketCapUsd() view returns (uint256)
xsdToken
viewfunction xsdToken() view returns (address)
xsdTokenPrice
viewfunction xsdTokenPrice() view returns (uint256)
xsdTokenSupply
viewfunction xsdTokenSupply() view returns (uint256)
addApprovedFunction
nonpayablefunction addApprovedFunction(address functionContract)
calculations
nonpayablefunction calculations()
deposit
payablefunction deposit() payable
flushBankX
nonpayablefunction flushBankX(address to, uint256 amount)
flushETH
nonpayablefunction flushETH(address to, uint256 amount)
flushXSD
nonpayablefunction flushXSD(address to, uint256 amount)
pause
nonpayablefunction pause()
receiveETH
payablefunction receiveETH(uint256 amount) payable
receiveXSD
nonpayablefunction receiveXSD(uint256 amount)
removeApprovedFunction
nonpayablefunction removeApprovedFunction(address functionContract)
renounceOwnership
nonpayablefunction renounceOwnership()
resetInterestRateToBase
nonpayablefunction resetInterestRateToBase()
setBankXToken
nonpayablefunction setBankXToken(address _address)
setChainlinkAutomationAddress
nonpayablefunction setChainlinkAutomationAddress(address _address)
setEthUsdPriceFeed
nonpayablefunction setEthUsdPriceFeed(address _address)
setGlobalTransactionLockBlocks
nonpayablefunction setGlobalTransactionLockBlocks(uint256 _blocks)
setGlobalTransactionLockTime
nonpayablefunction setGlobalTransactionLockTime(uint256 _time)
setPIDController
nonpayablefunction setPIDController(address _address)
setRateIncreaseAmount
nonpayablefunction setRateIncreaseAmount(uint256 _amount)
setRateIncreaseInterval
nonpayablefunction setRateIncreaseInterval(uint256 _interval)
setRulesEngine
nonpayablefunction setRulesEngine(address _address)
setRulesEngineCooldown
nonpayablefunction setRulesEngineCooldown(uint256 _cooldown)
setTargetMarketCapPercent
nonpayablefunction setTargetMarketCapPercent(uint256 _percent)
setXSDToken
nonpayablefunction setXSDToken(address _address)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
unpause
nonpayablefunction unpause()
updateLastExecutionTimestamp
nonpayablefunction updateLastExecutionTimestamp(uint256 timestamp)
updateMarketCapData
nonpayablefunction updateMarketCapData() returns (bool)
withdraw
nonpayablefunction withdraw(uint256 usdAmount)
withdrawETHForFunction
nonpayablefunction withdrawETHForFunction(uint256 amount) returns (bool)
events
AddressUpdated
event AddressUpdated(string parameter, address value)
BankXFlushed
event BankXFlushed(uint256 amount, address indexed to, uint256 timestamp)
ConfigUpdated
event ConfigUpdated(string parameter, uint256 value)
DailyInterestRateIncreased
event DailyInterestRateIncreased(uint256 oldRate, uint256 newRate, uint256 timestamp)
Deposit
event Deposit(address indexed user, uint256 amount, uint256 usdValue, uint256 rate)
ETHFlushed
event ETHFlushed(uint256 amount, address indexed to, uint256 timestamp)
ETHWithdrawnForFunction
event ETHWithdrawnForFunction(address indexed functionContract, uint256 amount)
FunctionApprovalChanged
event FunctionApprovalChanged(address indexed functionContract, bool approved)
InterestRateReset
event InterestRateReset(uint256 oldRate, uint256 newRate, uint256 timestamp)
InterestRateUpdated
event InterestRateUpdated(uint256 newRate)
MarketCapUpdated
event MarketCapUpdated(uint256 supply, uint256 price, uint256 marketCap, uint256 targetDeposit)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
Paused
event Paused(address account)
RulesEngineTriggered
event RulesEngineTriggered(bool success, uint256 timestamp)
TransactionTypeLocked
event TransactionTypeLocked(uint256 txType, uint256 blockNumber, uint256 timestamp)
Unpaused
event Unpaused(address account)
Withdrawal
event Withdrawal(address indexed user, uint256 xsdAmount, uint256 principalPortion, uint256 interestPortion)
XSDFlushed
event XSDFlushed(uint256 amount, address indexed to, uint256 timestamp)
errors
No errors.
creation bytecode
0x6080346200028c57601f620033d438819003918201601f191683019291906001600160401b03841183851017620002915781608092849260409687528339810103126200028c576200005181620002a7565b6200005f60208301620002a7565b906200007b606062000073868601620002a7565b9401620002a7565b6001600081815581546001600160a81b0319811633600881811b610100600160a81b03169290921790945588519694956001600160a01b0395948694919390921c8416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a367494654067e10000060075562015180600a556611c37937e08000600b55600a600c556078600e556003601255600f601355169384156200024a5750811693841562000206578116918215620001c257169283156200017e5760018060a01b03199283601454161760145582601554161760155581601754161760175560195416176019554260085542600955516131179081620002bd8239f35b845162461bcd60e51b815260206004820152601a60248201527f496e76616c6964207072696365206665656420616464726573730000000000006044820152606490fd5b855162461bcd60e51b815260206004820152601e60248201527f496e76616c69642050494420636f6e74726f6c6c6572206164647265737300006044820152606490fd5b855162461bcd60e51b815260206004820152601b60248201527f496e76616c69642042616e6b5820746f6b656e206164647265737300000000006044820152606490fd5b62461bcd60e51b815260206004820152601960248201527f496e76616c69642058534420746f6b656e2061646472657373000000000000006044820152606490fd5b600080fd5b634e487b7160e01b600052604160045260246000fd5b51906001600160a01b03821682036200028c5756fe608060408181526004918236101561032f575b50361561001e57600080fd5b3415801561002857005b610030612594565b610038612550565b6100496100436128c6565b906124ca565b6102fc576019548151638e15f47360e01b8152602093916001600160a01b031684828481845afa918215610287576000926102cd575b50600082131561029257848391855192838092633c05076160e21b82525afa90811561028757600091610241575b5091670de0b6b3a7640000610117837fffb0ec6522fc314e1fceda97fb281e984b5e1f784351fb615611fc0af15d51b69795606097959060ff811692601284106000146102125750610111925061010661010b91612fa5565b612fb6565b906124fa565b346124fa565b049061012233612f0b565b336000526002845282600020805480156000146101cb575082815560075460018201556003429101555b61015882600354612523565b600355610166828254612523565b90556001600f55436010554260115560075482513481526020810192909252604082015233907f36af321ec8d3c75236829c5317affd40ddb308863a1236d2d277a4025cccee1e90606090a28051916001835243908301524290820152a16001600055005b600182016102036101fc866101f66101e48554876124fa565b6101f0600754846124fa565b90612523565b94612523565b8093612530565b9055815560034291015561014c565b9192601210610223575b5050610111565b61023a925061010661023491612f92565b90612530565b388061021c565b8581813d8311610280575b61025681836126c9565b8101031261027c57519060ff821682036102795750670de0b6b3a76400006100ad565b80fd5b5080fd5b503d61024c565b84513d6000823e3d90fd5b835162461bcd60e51b81528084018690526015602482015274496e76616c6964204554482f55534420707269636560581b6044820152606490fd5b90918582813d83116102f5575b6102e481836126c9565b81010312610279575051903861007f565b503d6102da565b906020606492519162461bcd60e51b8352820152600d60248201526c09aeae6e840e6cadcc8408aa89609b1b6044820152fd5b600090813560e01c908162cdb6c1146123dc5750806307c42131146123bd5780630ba36dcd146123555780630f2de6a6146122d357806314289adf146122b45780631a87b811146122105780631cc976de146121565780632e1a7d4d14611c975780633065c70814610f10578063358d1fc614611c785780633771bf2314611c5957806337b560a214611c3a5780633bb0c41514611c1b5780633d71473b14611b975780633f4ba83a14611b0157806342f6fb2914611ad85780634d82680e14611ab95780634da0db8e14611a9a5780635491525314611a7b57806355fb0b8314611a525780635b6f9a80146119405780635c975abb1461191c5780635fe807db1461185357806366a7d2ca146118345780636794499e1461180b578063692a8fa0146117a95780636b976d521461178a5780636c6b0d96146117615780636ef7cb181461173d578063715018a6146116dc578063791f0000146116185780637c5acc27146115715780637caa54e7146115045780637f0c79681461149f57806381edbcdf146114805780638456cb591461142657806386a05fa7146113e857806387f9435e146113345780638da5cb5b14611307578063906afdd2146112825780639d3688f8146111fb5780639d92bf73146111dd578063ad6e8e1b14611159578063ae0f75fc146110ad578063b3a7834d14611012578063b4ca24e614610ff3578063b51459fe14610fd5578063b7de429014610fb8578063c3f366f414610f9b578063c55a27ee14610f7c578063c597e80214610f53578063c5a7036114610f2f578063cd9ccbcf14610f10578063d0e30db014610c95578063d53c33be14610c6c578063d78e138d14610c4d578063da8eaa0214610b5b578063dcc4275214610b3c578063e210e20f14610aa0578063e293dcbf14610a17578063e656b40a146109dc578063e78a5875146109ad578063ebc2551c1461098e578063f2fde38b146108b5578063f4b0530f1461080f578063f52cc913146107b7578063f6533e9a14610791578063f78b6c98146106ee578063fcb30bc9146106575763ff4c7e310361001257903461027c578160031936011261027c576020906007549051908152f35b50903461027c57602036600319011261027c5760806000805160206130a2833981519152916106846123f8565b61068c61246f565b6001600160a01b03166106a0811515612b3a565b806001600160601b0360a01b6018541617601855601a8251928084528301527f636861696e6c696e6b4175746f6d6174696f6e4164647265737300000000000060608301526020820152a180f35b5080923461027c57602036600319011261027c5760145483516323b872dd60e01b8152338184015230602482015291356044830152909160209183916064918391906001600160a01b03165af19081156107855761075492508391610757575b50612856565b80f35b610778915060203d811161077e575b61077081836126c9565b81019061283e565b3861074e565b503d610766565b505051903d90823e3d90fd5b50903461027c578160031936011261027c576020906107ae612cf4565b90519015158152f35b509190602036600319011261080b57813534036107d2578280f35b906020606492519162461bcd60e51b8352820152601360248201527208aa89040c2dadeeadce840dad2e6dac2e8c6d606b1b6044820152fd5b8280fd5b50913461080b57602036600319011261080b5780359061082d61246f565b811561087b57506000805160206130c28339815191529181608092600e55601382519280845283015272393ab632b9a2b733b4b732a1b7b7b63237bbb760691b60608301526020820152a180f35b606490602084519162461bcd60e51b835282015260146024820152730436f6f6c646f776e206d757374206265203e20360641b6044820152fd5b50913461080b57602036600319011261080b576108d06123f8565b6108d861246f565b6001600160a01b0381811693909290841561093c57505060018054610100600160a81b03198116600893841b610100600160a81b031617909155901c167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b906020608492519162461bcd60e51b8352820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152fd5b50903461027c578160031936011261027c57602090600b549051908152f35b50903461027c578160031936011261027c576109d8906109cb6128c6565b9290915192839283612453565b0390f35b50903461027c57602036600319011261027c576001610a0d6020946109ff612594565b610a07612550565b3561272b565b9255519015158152f35b50903461027c57602036600319011261027c5760806000805160206130a283398151915291610a446123f8565b610a4c61246f565b6001600160a01b0316610a60811515612b3a565b806001600160601b0360a01b6019541617601955600f8251928084528301526e195d1a155cd9141c9a58d951995959608a1b60608301526020820152a180f35b50903461027c578160031936011261027c5760207fa90e14be5aa57b910aa6dc16c31ff1b5cda380ae25a793b0d3f74df6131a7d7491610ade61246f565b6007805467494654067e10000091829055426008819055600981905583519182526020820183905260408201529091907f28f778ef046c33c685bdb631a31d0813a7fd7f63035bc1d43ef99030e039bf5490606090a151908152a180f35b50903461027c578160031936011261027c576020906013549051908152f35b50913461080b578160031936011261080b57610bd791610b796123f8565b9160206024358092610b8961246f565b6001600160a01b0386811696908990610ba3891515612b3a565b60145416928751998a958694859363a9059cbb60e01b8552840160209093929193604081019460018060a01b031681520152565b03925af1938415610c43577fca9f4c57af40473382861191a802294d7b63223f21fcaacdef2c5f2c459887f59394610c16918791610c25575b50613063565b8151908152426020820152a280f35b610c3d915060203d811161077e5761077081836126c9565b38610c10565b82513d87823e3d90fd5b50903461027c578160031936011261027c576020906010549051908152f35b50903461027c578160031936011261027c5760175490516001600160a01b039091168152602090f35b5091908260031936011261080b57610cab612594565b610cb3612550565b610cbe6100436128c6565b34156102fc576019548151638e15f47360e01b815292602092916001600160a01b031683858381845afa948515610e9d578695610ee1575b5085851315610ea757838291845192838092633c05076160e21b82525afa908115610e9d578691610e51575b5090670de0b6b3a7640000610d7b8660609695947fffb0ec6522fc314e1fceda97fb281e984b5e1f784351fb615611fc0af15d51b6989060ff811692601284106000146102125750610111925061010661010b91612fa5565b0490610d8633612f0b565b33875260028452828720805480610e29575082815560075460018201556003429101555b610db682600354612523565b600355610dc4828254612523565b90556001600f55436010554260115560075482513481526020810192909252604082015233907f36af321ec8d3c75236829c5317affd40ddb308863a1236d2d277a4025cccee1e90606090a28051916001835243908301524290820152a16001815580f35b60018201610e426101fc866101f66101e48554876124fa565b90558155600342910155610daa565b90508381819493953d8311610e96575b610e6b81836126c9565b81010312610e9257519260ff84168403610e92579192909190670de0b6b3a7640000610d22565b8580fd5b503d610e61565b83513d88823e3d90fd5b5082606492519162461bcd60e51b83528201526015602482015274496e76616c6964204554482f55534420707269636560581b6044820152fd5b9094508381813d8311610f09575b610ef981836126c9565b81010312610e9257519338610cf6565b503d610eef565b50903461027c578160031936011261027c57602090601d549051908152f35b50903461027c578160031936011261027c57602090610f4c612fc7565b9051908152f35b50903461027c578160031936011261027c5760155490516001600160a01b039091168152602090f35b50903461027c578160031936011261027c576020906012549051908152f35b50903461027c578160031936011261027c57602090610f4c612ff5565b50903461027c578160031936011261027c57602090610f4c613036565b50903461027c578160031936011261027c576109d8906109cb612abc565b50903461027c578160031936011261027c57602090601a549051908152f35b50903461027c57602036600319011261027c57806080926110316123f8565b816060845161103f8161267b565b8281528260208201528286820152015260018060a01b031681526002602052209080519061106c8261267b565b825492838352600181015460208401908152606060036002840154938587019485520154940193845282519485525160208501525190830152516060820152f35b50913461080b57602036600319011261080b578035906110cb61246f565b811561112357506000805160206130c2833981519152918160809260135560198251928084528301527f676c6f62616c5472616e73616374696f6e4c6f636b54696d650000000000000060608301526020820152a180f35b606490602084519162461bcd60e51b8352820152601060248201526f054696d65206d757374206265203e20360841b6044820152fd5b50903461027c57602036600319011261027c5760806000805160206130a2833981519152916111866123f8565b61118e61246f565b6001600160a01b03166111a2811515612b3a565b806001600160601b0360a01b6015541617601555600a825192808452830152693130b735bc2a37b5b2b760b11b60608301526020820152a180f35b50913461080b578260031936011261080b5760209250549051908152f35b50903461027c57602036600319011261027c5760806000805160206130a2833981519152916112286123f8565b61123061246f565b6001600160a01b0316611244811515612b3a565b806001600160601b0360a01b6017541617601755600d8251928084528301526c3834b221b7b73a3937b63632b960991b60608301526020820152a180f35b50903461027c57602036600319011261027c5760806000805160206130a2833981519152916112af6123f8565b6112b761246f565b6001600160a01b03166112cb811515612b3a565b806001600160601b0360a01b6016541617601655600b8251928084528301526a72756c6573456e67696e6560a81b60608301526020820152a180f35b50903461027c578160031936011261027c57600154905160089190911c6001600160a01b03168152602090f35b5091903461080b57602036600319011261080b576113506123f8565b61135861246f565b6001600160a01b0316808452601e6020528184205490929060ff16156113b7575060207ffb6d78987a69305b83ab86e84a0174fd3857b3533cf550d5d2ddc76a935a333e91838552601e825280852060ff19815416905551848152a280f35b6020606492519162461bcd60e51b8352820152600c60248201526b139bdd08185c1c1c9bdd995960a21b6044820152fd5b50903461027c57602036600319011261027c5760209160ff9082906001600160a01b036114136123f8565b168152601e855220541690519015158152f35b50903461027c578160031936011261027c5760207f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2589161146461246f565b61146c612550565b600160ff198154161760015551338152a180f35b50903461027c578160031936011261027c576020906009549051908152f35b5091903461080b57602036600319011261080b576016546001600160a01b031633036114cd575035600d5580f35b906020606492519162461bcd60e51b835282015260116024820152704f6e6c792052756c657320456e67696e6560781b6044820152fd5b50913461080b57602036600319011261080b576000805160206130c2833981519152916080913561153361246f565b80601255601b8251928084528301527f676c6f62616c5472616e73616374696f6e4c6f636b426c6f636b73000000000060608301526020820152a180f35b50913461080b57602036600319011261080b5780359061158f61246f565b81156115de57506000805160206130c28339815191529181608092600a556014825192808452830152731c985d19525b98dc99585cd9525b9d195c9d985b60621b60608301526020820152a180f35b606490602084519162461bcd60e51b835282015260146024820152730496e74657276616c206d757374206265203e20360641b6044820152fd5b5091903461080b57602036600319011261080b576116346123f8565b61163c61246f565b6001600160a01b031691611651831515612b3a565b828452601e60205260ff82852054166116a7575060207ffb6d78987a69305b83ab86e84a0174fd3857b3533cf550d5d2ddc76a935a333e91838552601e8252808520600160ff198254161790555160018152a280f35b6020606492519162461bcd60e51b8352820152601060248201526f105b1c9958591e48185c1c1c9bdd995960821b6044820152fd5b50346102795780600319360112610279576116f561246f565b60018054610100600160a81b03198116909155819060081c6001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b50903461027c578160031936011261027c57602090516802b5e3af16b18800008152f35b50903461027c578160031936011261027c5760185490516001600160a01b039091168152602090f35b50903461027c578160031936011261027c576020906005549051908152f35b50913461080b57602036600319011261080b576000805160206130c283398151915291608091356117d861246f565b80600b556012825192808452830152711c985d19525b98dc99585cd9505b5bdd5b9d60721b60608301526020820152a180f35b50903461027c578160031936011261027c5760165490516001600160a01b039091168152602090f35b50903461027c578160031936011261027c57602090600f549051908152f35b50913461080b57602036600319011261080b5780359061187161246f565b81151580611911575b156118dc57506000805160206130c28339815191529181608092600c5560646118a582601c546124fa565b04601d556016825192808452830152751d185c99d95d13585c9ad95d10d85c14195c98d95b9d60521b60608301526020820152a180f35b606490602084519162461bcd60e51b8352820152600f60248201526e125b9d985b1a59081c195c98d95b9d608a1b6044820152fd5b50606482111561187a565b50903461027c578160031936011261027c5760209060ff6001541690519015158152f35b50903461027c57602036600319011261027c576014548151637f759ffd60e01b815291908435906020908490879082906001600160a01b03165afa928315611a48578493611a11575b506127108084029084820414841517156119fe576204befb900493620f4240918281029281840414901517156119eb575090816119c9856109d894612530565b9151948594859094939260609260808301968352602083015260408201520152565b634e487b7160e01b815260118652602490fd5b634e487b7160e01b855260118652602485fd5b9092506020813d8211611a40575b81611a2c602093836126c9565b81010312611a3c57519138611989565b8380fd5b3d9150611a1f565b82513d86823e3d90fd5b50903461027c578160031936011261027c5760145490516001600160a01b039091168152602090f35b50903461027c578160031936011261027c576020906011549051908152f35b50903461027c578160031936011261027c576020906006549051908152f35b50903461027c578160031936011261027c576020906008549051908152f35b50903461027c578160031936011261027c5760195490516001600160a01b039091168152602090f35b50913461080b578260031936011261080b57611b1b61246f565b6001549060ff821615611b5d575060ff1916600155513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa90602090a180f35b606490602084519162461bcd60e51b8352820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152fd5b5091903461080b578260031936011261080b57611bb2612550565b611bc1600d54600e5490612523565b4210611be15782611bd0612cf4565b50611bd9612b78565b610754612e6a565b906020606492519162461bcd60e51b8352820152601460248201527310dbdbdb191bdddb881b9bdd08195b185c1cd95960621b6044820152fd5b50903461027c578160031936011261027c57602090600c549051908152f35b50903461027c578160031936011261027c57602090600e549051908152f35b50903461027c578160031936011261027c576020906003549051908152f35b50903461027c578160031936011261027c57602090600d549051908152f35b50913461080b57602080600319360112611a3c57813591611cb6612594565b611cbe612550565b611cc9610043612abc565b8215611cd581156125ea565b3386526002938484528587209182541561212657611cf233612f0b565b82549186840193845494611d11611d098787612523565b84111561262b565b8583111561211a57611d3d8687965b611d35611d2d898861266e565b98899361266e565b80945561266e565b808355159081612111575b50156121065750338952868652886003898220828155826001820155828a82015501555b611d7783865461266e565b8555600f87905543601055426011556014548851637f759ffd60e01b81526001600160a01b039182169391929188828981885afa9182156120fc578c926120c9575b50811561208f576127108083029283040361207c57620f424080840293840414171561206957906204befb611def920490612530565b88516370a0823160e01b8152308188015290958782602481875afa928b841561205e5789948994829161202c575b508c858210611f0b575b50506014548c5163a9059cbb60e01b81523394810194855260208501959095529395508593928490036040019284928e9250165af1908115611f0157927fffb0ec6522fc314e1fceda97fb281e984b5e1f784351fb615611fc0af15d51b6979492611ebe7f650fdf669e93aa6c8ff3defe2da9c12b64f1548e5e1e54e803f4c1beb6466c8e9360609998968c91611eea5750612856565b8551938452602084015260408301523391606090a2815192835243908301524290820152a16001815580f35b6107789150873d891161077e5761077081836126c9565b87513d8a823e3d90fd5b9194859497611f2183611f4b939994969961266e565b845163095ea7b360e01b8152308b8201908152602081019290925296879384928391604090910190565b03925af192831561202257611fa1611faf8c611f788d968998958996612005575b508a601454169761266e565b9451635a7ab59360e11b9181019182523060248201526044810195909552939182906064820190565b03601f1981018352826126c9565b51925af1611fbb6126eb565b5015611fcd57848287928b388c611e27565b875162461bcd60e51b815280830187905260126024820152711614d1081b5a5b9d1a5b99c819985a5b195960721b6044820152606490fd5b61201b90843d861161077e5761077081836126c9565b5038611f6c565b81513d86823e3d90fd5b9450509383813d8311612057575b61204481836126c9565b81010312611a3c57889388935138611e1d565b503d61203a565b8b51903d90823e3d90fd5b634e487b7160e01b8b526011875260248bfd5b634e487b7160e01b8c526011885260248cfd5b8a5162461bcd60e51b81528089018a90526014602482015273496e76616c69642073696c76657220707269636560601b6044820152606490fd5b9091508881813d83116120f5575b6120e181836126c9565b810103126120f157519038611db9565b8b80fd5b503d6120d7565b8b513d8e823e3d90fd5b600342910155611d6c565b90501538611d48565b611d3d83968796611d20565b865162461bcd60e51b8152808501869052600a602482015269139bc819195c1bdcda5d60b21b6044820152606490fd5b50913461080b578160031936011261080b576121d2916121746123f8565b916020602435809261218461246f565b6001600160a01b038681169690899061219e891515612b3a565b60155416928751998a958694859363a9059cbb60e01b8552840160209093929193604081019460018060a01b031681520152565b03925af1938415610c43577f16980bee311f143aae0fd4e0e3705a0a5453c92c635734e665dd34a5afcc6e2b9394610c16918791610c255750613063565b50913461080b578160031936011261080b57356001600160a01b038116919082900361080b5760243561224161246f565b61224c831515612b3a565b6122584782111561262b565b8381848282156122ab575b839283928392f1156122a157907f84d35fa754b4804740cc4ddd55053710736dbc07bdac096befa63b0fafa928a3918151908152426020820152a280f35b81513d85823e3d90fd5b506108fc612263565b50903461027c578160031936011261027c57602090601c549051908152f35b50903461027c57602036600319011261027c5760806000805160206130a2833981519152916123006123f8565b61230861246f565b6001600160a01b031661231c811515612b3a565b806001600160601b0360a01b60145416176014556008825192808452830152673c39b22a37b5b2b760c11b60608301526020820152a180f35b50903461027c57602036600319011261027c579081906001600160a01b0361237b6123f8565b168152600260205220906109d8825491600184015493600360028201549101549151948594859094939260609260808301968352602083015260408201520152565b50903461027c578160031936011261027c57602090601b549051908152f35b90503461027c578160031936011261027c57602090600a548152f35b600435906001600160a01b038216820361240e57565b600080fd5b919082519283825260005b84811061243f575050826000602080949584010152601f8019910116010190565b60208183018101518483018201520161241e565b60409061246c9392151581528160208201520190612413565b90565b60015460081c6001600160a01b0316330361248657565b606460405162461bcd60e51b815260206004820152602060248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152fd5b156124d25750565b60405162461bcd60e51b8152602060048201529081906124f6906024830190612413565b0390fd5b8181029291811591840414171561250d57565b634e487b7160e01b600052601160045260246000fd5b9190820180921161250d57565b811561253a570490565b634e487b7160e01b600052601260045260246000fd5b60ff6001541661255c57565b60405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606490fd5b6002600054146125a5576002600055565b60405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606490fd5b156125f157565b60405162461bcd60e51b81526020600482015260126024820152710416d6f756e74206d757374206265203e20360741b6044820152606490fd5b1561263257565b60405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b6044820152606490fd5b9190820391821161250d57565b6080810190811067ffffffffffffffff82111761269757604052565b634e487b7160e01b600052604160045260246000fd5b6040810190811067ffffffffffffffff82111761269757604052565b90601f8019910116810190811067ffffffffffffffff82111761269757604052565b3d15612726573d9067ffffffffffffffff8211612697576040519161271a601f8201601f1916602001846126c9565b82523d6000602084013e565b606090565b6016546001600160a01b031633148015612826575b156127e9576127508115156125ea565b8047106127a457600080808084335af16127686126eb565b506127735750600090565b6040519081527f60c43333a0081a84172e689d4170ac38cdf0c555204af8aea8dc199ca322380c60203392a2600190565b60405162461bcd60e51b815260206004820152601860248201527f496e73756666696369656e74204554482062616c616e636500000000000000006044820152606490fd5b60405162461bcd60e51b815260206004820152601560248201527410d85b1b195c881b9bdd08185d5d1a1bdc9a5e9959605a1b6044820152606490fd5b5033600052601e60205260ff60406000205416612740565b9081602091031261240e5751801515810361240e5790565b1561285d57565b60405162461bcd60e51b81526020600482015260136024820152721614d1081d1c985b9cd9995c8819985a5b1959606a1b6044820152606490fd5b604051906128a5826126ad565b601282527110dbdb9d1c9858dd081a5cc81c185d5cd95960721b6020830152565b60ff60015416612ab1576002600f5414801590612a82575b1561296b576001601d548061295f575b501561292357600190604051612903816126ad565b601081526f11195c1bdcda5d1cc8185b1b1bddd95960821b602082015290565b600090604051612932816126ad565b601c81527f546172676574206465706f736974206c696d6974207265616368656400000000602082015290565b905060045410386128ee565b6000908160105460125461297f8183612523565b4310612a6b575b50506011546013546129988183612523565b4210612a49575b50612a3391905060008115612a415750925b60008115612a395750925b612a25604051948592602084019091606b927f5472616e73616374696f6e206c6f636b3a205761697420000000000000000000835260178301526b010313637b1b5b99030b732160a51b6037830152604382015267207365636f6e647360c01b60638201520190565b03601f1981018452836126c9565b60009190565b9050926129bc565b9050926129b1565b612a3392945090612a5e612a63924292612523565b61266e565b92903861299f565b612a7b9250612a5e904392612523565b3880612986565b50612a9260105460125490612523565b431180156128de5750612aaa60115460135490612523565b42116128de565b60009061246c612898565b60ff60015416612ab1576001600f5414801590612b0b575b1561296b57600190604051612ae8816126ad565b601381527215da5d1a191c985dd85b1cc8185b1b1bddd959606a1b602082015290565b50612b1b60105460125490612523565b43118015612ad45750612b3360115460135490612523565b4211612ad4565b15612b4157565b60405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b6044820152606490fd5b600454601d5415612ce6575b601d541115612c5057612b996009544261266e565b600a541115612ba457565b7fa90e14be5aa57b910aa6dc16c31ff1b5cda380ae25a793b0d3f74df6131a7d7460206007547f49a9f84326867d114a1f5d84140055d17f1cf484f95fc528352cca2404e86bdd612c3c612bfa600b5484612523565b6802b5e3af16b18800009081811115612c485750925b836007554260085542600955604051918291854291846040919493926060820195825260208201520152565b0390a1604051908152a1565b905092612c10565b60075467494654067e10000090818103612c68575050565b817f28f778ef046c33c685bdb631a31d0813a7fd7f63035bc1d43ef99030e039bf54612c3c6020937fa90e14be5aa57b910aa6dc16c31ff1b5cda380ae25a793b0d3f74df6131a7d74956007554260085542600955604051918291429083604090939291936060810194815267494654067e10000060208201520152565b612cee612cf4565b50612b84565b6014546040516318160ddd60e01b8152602092916001600160a01b03919084908290600490829086165afa918215612e2b578491600093612e37575b509060049183601a556017541660405192838092631819c17b60e11b82525afa938415612e2b57600094612dde575b5050917fc5f99d79065b0b1f4a8ae94221487a33d3c5ca5ce6b47df1008b7bb9f1de29ae919281601b55612dd6620f4240612d9a84846124fa565b0480601c556064612dad600c54836124fa565b049081601d55604051948594859094939260609260808301968352602083015260408201520152565b0390a1600190565b81813d8311612e24575b612df281836126c9565b81010312611a3c575192507fc5f99d79065b0b1f4a8ae94221487a33d3c5ca5ce6b47df1008b7bb9f1de29ae38612d5f565b503d612de8565b6040513d6000823e3d90fd5b9182819492943d8311612e63575b612e4f81836126c9565b810103126102795750519083906004612d30565b503d612e45565b6016546001600160a01b03168015612f0857602060009160046040518094819363fce8f89360e01b83525af1908115612e2b577f628cfec93d1c5c8b41517d34ff4ec736bb95a2feb74009fc5f2a218df9880ccd91604091600091612eea575b5080612ee1575b81519015158152426020820152a1565b42600d55612ed1565b612f02915060203d811161077e5761077081836126c9565b38612eca565b50565b6001600160a01b031660009081526002602052604090208054908115612f8e576003810191612f3b83544261266e565b80612f47575b50505050565b6907baab4146b63dd00000612f75612f8093612f706201518060029504916001880154906124fa565b6124fa565b049201918254612523565b905542905538808080612f41565b5050565b60ff6011199116019060ff821161250d57565b60ff166012039060ff821161250d57565b60ff16604d811161250d57600a0a90565b601d5480158015612fe9575b612fe35760045461246c9161266e565b50600090565b50806004541015612fd3565b600454601d5411156130315761300d6009544261266e565b600a548082101561302a5762015180916130269161266e565b0490565b5050600090565b600090565b600454601d5411156130315761304e6009544261266e565b600a54908181101561302a5761246c9161266e565b1561306a57565b60405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b6044820152606490fdfe943e9d45a11aaae5d87503e3bc248665d9807856e5cf2bdb4a988bee4442278112c9dccd129ff783f1c8228eacdfa8e334ddecb7ec5c9a79ec662a4aed3d012aa264697066735822122044044be41886029de733b112543c83e761a39c9d22af6292350ef401f977310264736f6c63430008150033000000000000000000000000a3034ef5f9d98f4dac6fc44421642c2616d9e34600000000000000000000000093abe713002526d4ce708f890139f19313012f950000000000000000000000009f5f98657e714cfbb5af899b722685e8e7f71b7d000000000000000000000000eea52f6587f788cc12d0b5a28c48e61866c076f0