0 txs
0 calls
constructor
constructor(bytes _configData, bytes _immutables, bytes _customConfigData)
functions
allowance
viewfunction allowance(address owner, address spender) view returns (uint256)
asset
viewfunction asset() view returns (address)
balanceOf
viewfunction balanceOf(address account) view returns (uint256)
borrowLimit
viewfunction borrowLimit() view returns (uint256)
circuitBreakerAddress
viewfunction circuitBreakerAddress() view returns (address)
cleanLiquidationFee
viewfunction cleanLiquidationFee() view returns (uint256)
collateralContract
viewfunction collateralContract() view returns (address)
convertToAssets
viewfunction convertToAssets(uint256 _shares) view returns (uint256 _assets)
convertToShares
viewfunction convertToShares(uint256 _assets) view returns (uint256 _shares)
currentRateInfo
viewfunction currentRateInfo() view returns (uint32 lastBlock, uint32 feeToProtocolRate, uint64 lastTimestamp, uint64 ratePerSec, uint64 fullUtilizationRate)
decimals
viewfunction decimals() view returns (uint8)
DEPLOYER_ADDRESS
viewfunction DEPLOYER_ADDRESS() view returns (address)
depositLimit
viewfunction depositLimit() view returns (uint256)
DEVIATION_PRECISION
viewfunction DEVIATION_PRECISION() view returns (uint256)
dirtyLiquidationFee
viewfunction dirtyLiquidationFee() view returns (uint256)
EXCHANGE_PRECISION
viewfunction EXCHANGE_PRECISION() view returns (uint256)
exchangeRateInfo
viewfunction exchangeRateInfo() view returns (address oracle, uint32 maxOracleDeviation, uint184 lastTimestamp, uint256 lowExchangeRate, uint256 highExchangeRate)
externalAssetVault
viewfunction externalAssetVault() view returns (address)
FEE_PRECISION
viewfunction FEE_PRECISION() view returns (uint256)
getConstants
purefunction getConstants() pure returns (uint256 _LTV_PRECISION, uint256 _LIQ_PRECISION, uint256 _UTIL_PREC, uint256 _FEE_PRECISION, uint256 _EXCHANGE_PRECISION, uint256 _DEVIATION_PRECISION, uint256 _RATE_PRECISION, uint256 _MAX_PROTOCOL_FEE)
getPairAccounting
viewfunction getPairAccounting() view returns (uint128 _totalAssetAmount, uint128 _totalAssetShares, uint128 _totalBorrowAmount, uint128 _totalBorrowShares, uint256 _totalCollateral)
getUserSnapshot
viewfunction getUserSnapshot(address _address) view returns (uint256 _userAssetShares, uint256 _userBorrowShares, uint256 _userCollateralBalance)
isBorrowAccessControlRevoked
viewfunction isBorrowAccessControlRevoked() view returns (bool)
isDepositAccessControlRevoked
viewfunction isDepositAccessControlRevoked() view returns (bool)
isInterestAccessControlRevoked
viewfunction isInterestAccessControlRevoked() view returns (bool)
isInterestPaused
viewfunction isInterestPaused() view returns (bool)
isLiquidateAccessControlRevoked
viewfunction isLiquidateAccessControlRevoked() view returns (bool)
isLiquidatePaused
viewfunction isLiquidatePaused() view returns (bool)
isLiquidationFeeSetterRevoked
viewfunction isLiquidationFeeSetterRevoked() view returns (bool)
isMaxLTVSetterRevoked
viewfunction isMaxLTVSetterRevoked() view returns (bool)
isOracleSetterRevoked
viewfunction isOracleSetterRevoked() view returns (bool)
isRateContractSetterRevoked
viewfunction isRateContractSetterRevoked() view returns (bool)
isRepayAccessControlRevoked
viewfunction isRepayAccessControlRevoked() view returns (bool)
isRepayPaused
viewfunction isRepayPaused() view returns (bool)
isWithdrawAccessControlRevoked
viewfunction isWithdrawAccessControlRevoked() view returns (bool)
isWithdrawPaused
viewfunction isWithdrawPaused() view returns (bool)
LIQ_PRECISION
viewfunction LIQ_PRECISION() view returns (uint256)
LTV_PRECISION
viewfunction LTV_PRECISION() view returns (uint256)
MAX_PROTOCOL_FEE
viewfunction MAX_PROTOCOL_FEE() view returns (uint256)
maxDeposit
viewfunction maxDeposit(address) view returns (uint256 _maxAssets)
maxLTV
viewfunction maxLTV() view returns (uint256)
maxMint
viewfunction maxMint(address) view returns (uint256 _maxShares)
maxRedeem
viewfunction maxRedeem(address _owner) view returns (uint256 _maxShares)
maxWithdraw
viewfunction maxWithdraw(address _owner) view returns (uint256 _maxAssets)
minCollateralRequiredOnDirtyLiquidation
viewfunction minCollateralRequiredOnDirtyLiquidation() view returns (uint256)
minURChangeForExternalAddInterest
viewfunction minURChangeForExternalAddInterest() view returns (uint256)
name
viewfunction name() view returns (string)
owner
viewfunction owner() view returns (address)
pendingOwner
viewfunction pendingOwner() view returns (address)
pendingTimelockAddress
viewfunction pendingTimelockAddress() view returns (address)
previewAddInterest
viewfunction previewAddInterest() view returns (uint256 _interestEarned, uint256 _feesAmount, uint256 _feesShare, tuple _newCurrentRateInfo, tuple _totalAsset, tuple _totalBorrow)
previewDeposit
viewfunction previewDeposit(uint256 _assets) view returns (uint256 _sharesReceived)
previewMint
viewfunction previewMint(uint256 _shares) view returns (uint256 _amount)
previewRedeem
viewfunction previewRedeem(uint256 _shares) view returns (uint256 _assets)
previewWithdraw
viewfunction previewWithdraw(uint256 _amount) view returns (uint256 _sharesToBurn)
pricePerShare
viewfunction pricePerShare() view returns (uint256 _amount)
protocolLiquidationFee
viewfunction protocolLiquidationFee() view returns (uint256)
RATE_PRECISION
viewfunction RATE_PRECISION() view returns (uint256)
rateContract
viewfunction rateContract() view returns (address)
swappers
viewfunction swappers(address) view returns (bool)
symbol
viewfunction symbol() view returns (string)
timelockAddress
viewfunction timelockAddress() view returns (address)
toAssetAmount
viewfunction toAssetAmount(uint256 _shares, bool _roundUp, bool _previewInterest) view returns (uint256 _amount)
toAssetShares
viewfunction toAssetShares(uint256 _amount, bool _roundUp, bool _previewInterest) view returns (uint256 _shares)
toBorrowAmount
viewfunction toBorrowAmount(uint256 _shares, bool _roundUp, bool _previewInterest) view returns (uint256 _amount)
toBorrowShares
viewfunction toBorrowShares(uint256 _amount, bool _roundUp, bool _previewInterest) view returns (uint256 _shares)
totalAsset
viewfunction totalAsset() view returns (uint128 amount, uint128 shares)
totalAssets
viewfunction totalAssets() view returns (uint256)
totalBorrow
viewfunction totalBorrow() view returns (uint128 amount, uint128 shares)
totalCollateral
viewfunction totalCollateral() view returns (uint256)
totalSupply
viewfunction totalSupply() view returns (uint256)
userBorrowShares
viewfunction userBorrowShares(address) view returns (uint256)
userCollateralBalance
viewfunction userCollateralBalance(address) view returns (uint256)
UTIL_PREC
viewfunction UTIL_PREC() view returns (uint256)
version
purefunction version() pure returns (uint256 _major, uint256 _minor, uint256 _patch)
acceptOwnership
nonpayablefunction acceptOwnership()
acceptTransferTimelock
nonpayablefunction acceptTransferTimelock()
addCollateral
nonpayablefunction addCollateral(uint256 _collateralAmount, address _borrower)
addInterest
nonpayablefunction addInterest(bool _returnAccounting) returns (uint256 _interestEarned, uint256 _feesAmount, uint256 _feesShare, tuple _currentRateInfo, tuple _totalAsset, tuple _totalBorrow)
approve
nonpayablefunction approve(address spender, uint256 amount) returns (bool)
borrowAsset
nonpayablefunction borrowAsset(uint256 _borrowAmount, uint256 _collateralAmount, address _receiver) returns (uint256 _shares)
changeFee
nonpayablefunction changeFee(uint32 _newFee)
decreaseAllowance
nonpayablefunction decreaseAllowance(address spender, uint256 subtractedValue) returns (bool)
deposit
nonpayablefunction deposit(uint256 _amount, address _receiver) returns (uint256 _sharesReceived)
increaseAllowance
nonpayablefunction increaseAllowance(address spender, uint256 addedValue) returns (bool)
liquidate
nonpayablefunction liquidate(uint128 _sharesToLiquidate, uint256 _deadline, address _borrower) returns (uint256 _collateralForLiquidator)
mint
nonpayablefunction mint(uint256 _shares, address _receiver) returns (uint256 _amount)
pause
nonpayablefunction pause()
redeem
nonpayablefunction redeem(uint256 _shares, address _receiver, address _owner) returns (uint256 _amountToReturn)
removeCollateral
nonpayablefunction removeCollateral(uint256 _collateralAmount, address _receiver)
renounceOwnership
nonpayablefunction renounceOwnership()
renounceTimelock
nonpayablefunction renounceTimelock()
repayAsset
nonpayablefunction repayAsset(uint256 _shares, address _borrower) returns (uint256 _amountToRepay)
revokeRateContractSetter
nonpayablefunction revokeRateContractSetter()
setExternalAssetVault
nonpayablefunction setExternalAssetVault(address vault)
setMaxLTV
nonpayablefunction setMaxLTV(uint256 _newMaxLTV)
setMinURChangeForExternalAddInterest
nonpayablefunction setMinURChangeForExternalAddInterest(uint256 _newURChange)
setRateContract
nonpayablefunction setRateContract(address _newRateContract)
setSwapper
nonpayablefunction setSwapper(address _swapper, bool _approval)
transfer
nonpayablefunction transfer(address to, uint256 amount) returns (bool)
transferFrom
nonpayablefunction transferFrom(address from, address to, uint256 amount) returns (bool)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
transferTimelock
nonpayablefunction transferTimelock(address _newTimelock)
unpause
nonpayablefunction unpause()
updateExchangeRate
nonpayablefunction updateExchangeRate() returns (bool _isBorrowAllowed, uint256 _lowExchangeRate, uint256 _highExchangeRate)
withdraw
nonpayablefunction withdraw(uint256 _amount, address _receiver, address _owner) returns (uint256 _sharesToBurn)
withdrawFees
nonpayablefunction withdrawFees(uint128 _shares, address _recipient) returns (uint256 _amountToTransfer)
events
AddCollateral
event AddCollateral(address indexed sender, address indexed borrower, uint256 collateralAmount)
AddInterest
event AddInterest(uint256 interestEarned, uint256 rate, uint256 feesAmount, uint256 feesShare)
Approval
event Approval(address indexed owner, address indexed spender, uint256 value)
BorrowAsset
event BorrowAsset(address indexed _borrower, address indexed _receiver, uint256 _borrowAmount, uint256 _sharesAdded)
ChangeFee
event ChangeFee(uint32 newFee)
Deposit
event Deposit(address indexed caller, address indexed owner, uint256 assets, uint256 shares)
Liquidate
event Liquidate(address indexed _borrower, uint256 _collateralForLiquidator, uint256 _sharesToLiquidate, uint256 _amountLiquidatorToRepay, uint256 _feesAmount, uint256 _sharesToAdjust, uint256 _amountToAdjust)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
OwnershipTransferStarted
event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner)
PauseInterest
event PauseInterest(bool isPaused)
PauseLiquidate
event PauseLiquidate(bool isPaused)
PauseRepay
event PauseRepay(bool isPaused)
PauseWithdraw
event PauseWithdraw(bool isPaused)
RemoveCollateral
event RemoveCollateral(address indexed _sender, uint256 _collateralAmount, address indexed _receiver, address indexed _borrower)
RepayAsset
event RepayAsset(address indexed payer, address indexed borrower, uint256 amountToRepay, uint256 shares)
RevokeBorrowAccessControl
event RevokeBorrowAccessControl(uint256 borrowLimit)
RevokeDepositAccessControl
event RevokeDepositAccessControl(uint256 depositLimit)
RevokeInterestAccessControl
event RevokeInterestAccessControl()
RevokeLiquidateAccessControl
event RevokeLiquidateAccessControl()
RevokeRateContractSetter
event RevokeRateContractSetter()
RevokeRepayAccessControl
event RevokeRepayAccessControl()
RevokeWithdrawAccessControl
event RevokeWithdrawAccessControl()
SetBorrowLimit
event SetBorrowLimit(uint256 limit)
SetDepositLimit
event SetDepositLimit(uint256 limit)
SetExternalAssetVault
event SetExternalAssetVault(address oldVault, address newVault)
SetMaxLTV
event SetMaxLTV(uint256 oldMaxLTV, uint256 newMaxLTV)
SetRateContract
event SetRateContract(address oldRateContract, address newRateContract)
SetSwapper
event SetSwapper(address swapper, bool approval)
SkipAddingInterest
event SkipAddingInterest(uint256 rateChange)
TimelockTransferred
event TimelockTransferred(address indexed previousTimelock, address indexed newTimelock)
TimelockTransferStarted
event TimelockTransferStarted(address indexed previousTimelock, address indexed newTimelock)
Transfer
event Transfer(address indexed from, address indexed to, uint256 value)
UpdatedMinURChange
event UpdatedMinURChange(uint256 newURChange)
UpdateExchangeRate
event UpdateExchangeRate(uint256 lowExchangeRate, uint256 highExchangeRate)
UpdateRate
event UpdateRate(uint256 oldRatePerSec, uint256 oldFullUtilizationRate, uint256 newRatePerSec, uint256 newFullUtilizationRate)
WarnOracleData
event WarnOracleData(address oracle)
Withdraw
event Withdraw(address indexed caller, address indexed receiver, address indexed owner, uint256 assets, uint256 shares)
WithdrawFees
event WithdrawFees(uint128 shares, address recipient, uint256 amountToTransfer, uint256 collateralAmount)
errors
AccessControlRevoked
error AccessControlRevoked()
BadDirtyLiquidation
error BadDirtyLiquidation()
BadProtocolFee
error BadProtocolFee()
BadSwapper
error BadSwapper()
BorrowerSolvent
error BorrowerSolvent()
ExceedsBorrowLimit
error ExceedsBorrowLimit()
ExceedsDepositLimit
error ExceedsDepositLimit()
ExceedsMaxOracleDeviation
error ExceedsMaxOracleDeviation()
ExternalAssetVaultOnly
error ExternalAssetVaultOnly()
Insolvent
error Insolvent(uint256 _borrow, uint256 _collateral, uint256 _exchangeRate)
InsufficientAssetsInContract
error InsufficientAssetsInContract(uint256 _assets, uint256 _request)
InterestPaused
error InterestPaused()
InvalidPath
error InvalidPath(address _expected, address _actual)
InvalidReceiver
error InvalidReceiver()
LiquidatePaused
error LiquidatePaused()
MinURChangeMax
error MinURChangeMax()
OnlyPendingTimelock
error OnlyPendingTimelock()
OnlyProtocolOrOwner
error OnlyProtocolOrOwner()
OnlyTimelock
error OnlyTimelock()
OnlyTimelockOrOwner
error OnlyTimelockOrOwner()
PastDeadline
error PastDeadline(uint256 _blockTimestamp, uint256 _deadline)
RepayPaused
error RepayPaused()
SetterRevoked
error SetterRevoked()
SlippageTooHigh
error SlippageTooHigh(uint256 _minOut, uint256 _actual)
WithdrawPaused
error WithdrawPaused()
creation bytecode
0x6101006040525f19600681905560085561001e6103e8620186a0610e05565b60175534801561002c575f5ffd5b50604051616c9e380380616c9e83398101604081905261004b91610ec7565b60408051602080820183525f8083528351918201909352918252600180546001600160a01b031916331790558491849184918361008d6100883390565b6102fc565b5f5f5f838060200190518101906100a49190610f6c565b919450925090506100b481610318565b6100bd826102fc565b505033608052600480546001600160a01b0319166001600160a01b039290921691909117905550600d6100f0838261102f565b50600e6100fd828261102f565b5050506001600f819055505f5f5f5f5f5f5f5f5f8b80602001905181019061012591906110ff565b985098509850985098509850985098509850886001600160a01b031660a0816001600160a01b031681525050876001600160a01b031660c0816001600160a01b0316815250505f601a5f0160046101000a81548163ffffffff021916908363ffffffff16021790555083601a5f0160186101000a8154816001600160401b0302191690836001600160401b031602179055506001426101c49190611199565b601a80546001600160401b03929092166801000000000000000002600160401b600160801b03199092169190911790556101ff600143611199565b601a805463ffffffff191663ffffffff928316179055601b80546001600160a01b038a81166001600160c01b031990921691909117600160a01b938a1693909302929092179055601580546001600160a01b0319169187169190911790556011829055620186a06102738362015f906111ac565b61027d9190610e05565b60125560145550601055505084515f94508493508392506102a89150850160209081019086016111c3565b9194509250905060186102bb848261102f565b5060196102c8838261102f565b5060ff811660e0526102d8610373565b50505050506102eb61060360201b60201c565b5050505050505050505050506112f2565b600380546001600160a01b031916905561031581610826565b50565b6001546040516001600160a01b038084169216907f31b6c5a04b069b6ec1b3cef44c4e7c1eadd721349cda9823d0b1877b3551cdc6905f90a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b6040805160a0810182525f808252602082018190529181018290526060810182905260808101829052819081908190506040805160a081018252601a5463ffffffff808216835264010000000082041660208301526001600160401b03680100000000000000008204811693830193909352600160801b810483166060830152600160c01b900490911660808201525f61040c82610877565b8051909150156105fb57805f0151955080606001519450806080015193508060a0015192507fc63977c8e2362a31182dc8e89a52252f9836922738e0abcfc0de6924972eafe5826060015183608001518360200151846040015160405161049c94939291906001600160401b03948516815292841660208401529083166040830152909116606082015260800190565b60405180910390a17f2b5229f33f1d24d5baab718e1e25d0d86195a9b6d786c2c0868edfb21a460e2585826020015186866040516104fc94939291909384526001600160401b039290921660208401526040830152606082015260800190565b60405180910390a16020818101516001600160401b0390811660608501819052604080850151831660808701819052429093169086018190524363ffffffff908116808852601a8054898801516001600160401b0319909116909217640100000000929093169190910291909117600160401b600160c01b03191668010000000000000000909202600160801b600160c01b03191691909117600160801b928302176001600160c01b0316600160c01b9093029290921790915560c08301518051908301516001600160801b03918216908216830217601f5560e0840151805190840151908216911690910217905582156105fb576105fb3084610c18565b509091929394565b6040805160a081018252601b546001600160a01b0381168252600160a01b900463ffffffff166020820152601c546001600160b81b0316918101829052601d546060820152601e5460808201525f918291829142146107ca575f815f01516001600160a01b031663bd9a548b6040518163ffffffff1660e01b8152600401606060405180830381865afa15801561069c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106c09190611240565b90955093509050801561070d5781516040516001600160a01b0390911681527ffc131c36b7e444dacda44901fd43641dcdcfdc43fe9e2601b3c1dd87061db9e59060200160405180910390a15b6001600160b81b034216604080840182905260608401869052608084018590528351601b8054602087015163ffffffff16600160a01b026001600160c01b03199091166001600160a01b0390931692909217919091179055601c80546001600160b81b031916909217909155601d859055601e849055517fc1f41e029acf5127d111625602160c4cee3e1a4d38e691e50544d1f7c68b77be906107bc9086908690918252602082015260400190565b60405180910390a1506107d9565b80606001519250806080015191505b608081015160608201515f91906107f09082611199565b6107fd90620186a06111ac565b6108079190610e05565b9050816020015163ffffffff16811161081f57600194505b5050909192565b600280546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6108d860408051610100810182525f8082526020808301829052828401829052606083018290526080830182905260a083018290528351808501855282815280820183905260c084015283518085019094528184528301529060e082015290565b4282604001516001600160401b0316141580156109035750600954670100000000000000900460ff16155b15610c135760018152604080518082018252601f546001600160801b038082168352600160801b91829004811660208085019190915260c0860193909352835180850185528354808316825292909204169181019190915260e08301528201515f90610978906001600160401b031642611199565b60055460c08401519192505f91610997916001600160a01b0316610cdc565b90505f81156109cd5760e08401515182906109be906001600160801b0316620186a06111ac565b6109c89190610e05565b6109cf565b5f5b601554608087015160405163cd3181d560e01b815260048101879052602481018490526001600160401b0390911660448201529192506001600160a01b03169063cd3181d5906064016040805180830381865afa158015610a32573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a569190611278565b6001600160401b039081166040870152166020850181905260e085015151670de0b6b3a76400009190610a92906001600160801b0316866111ac565b610a9c91906111ac565b610aa69190610e05565b6060850181905215801590610ada575060e08401515160608501516001600160801b0391610ad791908316906112a9565b11155b8015610afd575060608401516001600160801b0390610afa9084906112a9565b11155b15610c0f576060840151610b1090610d80565b60e08501518051610b229083906112bc565b6001600160801b03169052506060840151610b3c90610d80565b60c08501518051610b4e9083906112bc565b6001600160801b0316905250602085015163ffffffff1615610c0f57620186a0856020015163ffffffff168560600151610b8891906111ac565b610b929190610e05565b6080850181905260c0850151610ba8905f610cdc565b610bb29190611199565b8460c00151602001516001600160801b03168560800151610bd391906111ac565b610bdd9190610e05565b60a08501819052610bed90610d80565b8460c00151602001818151610c0291906112bc565b6001600160801b03169052505b5050505b919050565b6001600160a01b038216610c735760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064015b60405180910390fd5b80600c5f828254610c8491906112a9565b90915550506001600160a01b0382165f818152600a60209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b5f6001600160a01b038216610cfc575081516001600160801b0316610d7a565b60405163115de16960e11b81523060048201526001600160a01b038316906322bbc2d290602401602060405180830381865afa158015610d3e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d6291906112db565b8351610d7791906001600160801b03166112a9565b90505b92915050565b5f6001600160801b03821115610de85760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e20316044820152663238206269747360c81b6064820152608401610c6a565b5090565b505050565b634e487b7160e01b5f52601160045260245ffd5b5f82610e1f57634e487b7160e01b5f52601260045260245ffd5b500490565b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112610e47575f5ffd5b8151602083015f806001600160401b03841115610e6657610e66610e24565b50604051601f19601f85018116603f011681018181106001600160401b0382111715610e9457610e94610e24565b604052838152905080828401871015610eab575f5ffd5b8383602083015e5f602085830101528094505050505092915050565b5f5f5f60608486031215610ed9575f5ffd5b83516001600160401b03811115610eee575f5ffd5b610efa86828701610e38565b602086015190945090506001600160401b03811115610f17575f5ffd5b610f2386828701610e38565b604086015190935090506001600160401b03811115610f40575f5ffd5b610f4c86828701610e38565b9150509250925092565b80516001600160a01b0381168114610c13575f5ffd5b5f5f5f60608486031215610f7e575f5ffd5b610f8784610f56565b9250610f9560208501610f56565b9150610fa360408501610f56565b90509250925092565b600181811c90821680610fc057607f821691505b602082108103610fde57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115610dec57805f5260205f20601f840160051c810160208510156110095750805b601f840160051c820191505b81811015611028575f8155600101611015565b5050505050565b81516001600160401b0381111561104857611048610e24565b61105c816110568454610fac565b84610fe4565b6020601f82116001811461108e575f83156110775750848201515b5f19600385901b1c1916600184901b178455611028565b5f84815260208120601f198516915b828110156110bd578785015182556020948501946001909201910161109d565b50848210156110da57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b80516001600160401b0381168114610c13575f5ffd5b5f5f5f5f5f5f5f5f5f6101208a8c031215611118575f5ffd5b6111218a610f56565b985061112f60208b01610f56565b975061113d60408b01610f56565b965060608a015163ffffffff81168114611155575f5ffd5b955061116360808b01610f56565b945061117160a08b016110e9565b60c08b015160e08c0151610100909c01519a9d999c50979a9699959890979695945092505050565b81810381811115610d7a57610d7a610df1565b8082028115828204841417610d7a57610d7a610df1565b5f5f5f606084860312156111d5575f5ffd5b83516001600160401b038111156111ea575f5ffd5b6111f686828701610e38565b602086015190945090506001600160401b03811115611213575f5ffd5b61121f86828701610e38565b925050604084015160ff81168114611235575f5ffd5b809150509250925092565b5f5f5f60608486031215611252575f5ffd5b83518015158114611261575f5ffd5b602085015160409095015190969495509392505050565b5f5f60408385031215611289575f5ffd5b611292836110e9565b91506112a0602084016110e9565b90509250929050565b80820180821115610d7a57610d7a610df1565b6001600160801b038181168382160190811115610d7a57610d7a610df1565b5f602082840312156112eb575f5ffd5b5051919050565b60805160a05160c05160e05161594161135d5f395f6107e801525f8181610ce301528181614186015261426a01525f81816108310152818161374b01528181613c790152818161455301528181614b8a0152614d8701525f8181610d8e015261430f01526159415ff3fe608060405234801561000f575f5ffd5b506004361061063d575f3560e01c80638456cb5911610341578063c6e1c7c9116101ba578063e4b0007011610109578063ef8b30f7116100a9578063f384bd0511610084578063f384bd0514610e9d578063f6ccaad414610ea6578063f9557ccb14610eae578063fbbbf94c14610ecc575f5ffd5b8063ef8b30f714610e63578063f211c39014610e76578063f2fde38b14610e8a575f5ffd5b8063e63a391f116100e4578063e63a391f146108ec578063eafecffa14610e3e578063ecf7085814610e47578063eee2421914610e50575f5ffd5b8063e4b0007014610e1a578063e551d11d14610e22578063e5f13b1614610e2b575f5ffd5b8063d2a156e011610174578063daf33f2a1161014f578063daf33f2a14610dd6578063dd62ed3e14610de9578063e203641714610dfc578063e30c397814610e09575f5ffd5b8063d2a156e014610d89578063d41ddc9614610db0578063d905777e14610dc3575f5ffd5b8063c6e1c7c914610cde578063c6e6f59214610d05578063cacf3b5814610d18578063cadac47914610d20578063cdd72d5214610d33578063ce96cb7714610d76575f5ffd5b8063b3d7f6b911610290578063ba08765211610230578063c0a7e8921161020b578063c0a7e892146107d2578063c158e88d14610ca2578063c58e4df614610cb5578063c63d75b614610ccb575f5ffd5b8063ba08765214610c68578063bbb0962414610c7b578063bc410c6414610c8f575f5ffd5b8063b68d0a091161026b578063b68d0a0914610c3a578063b78294dd146108ec578063b7db54f514610c4d578063b8ca3b8314610c5f575f5ffd5b8063b3d7f6b914610bf5578063b460af9414610c08578063b5af306214610c1b575f5ffd5b806395d89b41116102fb5780639bc6ab86116102d65780639bc6ab8614610bbb5780639fe34bdc146108ec578063a457c2d714610bcf578063a9059cbb14610be2575f5ffd5b806395d89b4114610b5b57806399530b0614610b635780639a295e7314610b6b575f5ffd5b80638456cb5914610a795780638cad7fbe14610a815780638da5cb5b14610aa357806393f46f6414610ab457806394bf804d14610ac757806395d14ca814610ada575f5ffd5b80633f4ba83a116104d357806367800b5f1161042257806379ba5097116103c25780637d63fbc21161039d5780637d63fbc214610a025780637ec4b57114610a155780638142dd5314610a285780638285ef4014610a3b575f5ffd5b806379ba5097146109d45780637bcad14c146109dc5780637d37bdd7146109ef575f5ffd5b80636e553f65116103fd5780636e553f651461099357806370a08231146109a6578063715018a6146109b9578063721b0a47146109c1575f5ffd5b806367800b5f1461096c5780636b96668f146109805780636cd3cc77146108ec575f5ffd5b806349eb7af61161048d5780634cdad506116104685780634cdad506146109125780634f8b4ae7146109255780634fd422df1461092d57806354fd4d501461094c575f5ffd5b806349eb7af6146108ec5780634ac8eb5f146108f65780634bc66f32146108ff575f5ffd5b80633f4ba83a1461088e578063402d267d1461089657806345014095146108a957806345757e4a146108bc5780634732428c146108d057806349292427146108d9575f5ffd5b806318160ddd1161058f578063313ce5671161054957806338d52e0f1161052457806338d52e0f1461082f57806339509351146108555780633d417d2d146108685780633f2617cb1461087b575f5ffd5b8063313ce567146107e157806334680fe5146108125780633750076314610826575f5ffd5b806318160ddd146107665780631956473f1461077e5780631c2591d3146107875780631c6c95971461079a57806323b872dd146107bf5780632b3ba681146107d2575f5ffd5b8063095ea7b3116105fa5780630b4aecf0116105d55780630b4aecf01461072b5780630c70661d14610738578063115a334c1461074b57806311a2e4bc1461075d575f5ffd5b8063095ea7b3146106e85780630a28a4771461070b5780630a67918c1461071e575f5ffd5b806301e1d1141461064157806302ce728f1461065c57806306fdde031461068157806307a2d13a1461069657806308a0c375146106a9578063090f3f50146106be575b5f5ffd5b610649610f4a565b6040519081526020015b60405180910390f35b610664610f7a565b604080519315158452602084019290925290820152606001610653565b610689610fa2565b60405161065391906153d3565b6106496106a4366004615408565b611032565b6106bc6106b7366004615408565b611045565b005b5f546106d0906001600160a01b031681565b6040516001600160a01b039091168152602001610653565b6106fb6106f6366004615433565b6110b7565b6040519015158152602001610653565b610649610719366004615408565b6110ce565b6007546106fb9060ff1681565b6025546106fb9060ff1681565b6009546106fb9062010000900460ff1681565b6009546106fb90610100900460ff1681565b61064960115481565b601f54600160801b90046001600160801b0316610649565b61064960175481565b61064961079536600461546a565b6110fc565b6107ad6107a83660046154a9565b61116b565b604051610653969594939291906154c4565b6106fb6107cd36600461557f565b6113a7565b610649670de0b6b3a764000081565b60405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610653565b6009546106fb90600160301b900460ff1681565b61064960135481565b7f00000000000000000000000000000000000000000000000000000000000000006106d0565b6106fb610863366004615433565b6113ca565b6106496108763660046155bd565b6113eb565b6106bc6108893660046155eb565b6114b2565b6106bc61151d565b6106496108a4366004615617565b6115ee565b6106bc6108b7366004615617565b61163f565b6009546106fb90600160401b900460ff1681565b61064960125481565b6004546106d0906001600160a01b031681565b610649620186a081565b61064960215481565b6001546106d0906001600160a01b031681565b610649610920366004615408565b611653565b6106bc611679565b61064961093b366004615617565b60236020525f908152604090205481565b60035f805b60408051938452602084019290925290820152606001610653565b6009546106fb906301000000900460ff1681565b6106bc61098e366004615617565b61169b565b6106496109a13660046155bd565b611736565b6106496109b4366004615617565b611800565b6106bc61181a565b6106496109cf366004615648565b61182b565b6106bc611c5a565b6005546106d0906001600160a01b031681565b6106496109fd36600461546a565b611cd1565b6025546106fb9062010000900460ff1681565b610649610a2336600461546a565b611d30565b6106bc610a3636600461567a565b611d8f565b602054610a59906001600160801b0380821691600160801b90041682565b604080516001600160801b03938416815292909116602083015201610653565b6106bc611e5a565b6106fb610a8f366004615617565b60166020525f908152604090205460ff1681565b6002546001600160a01b03166106d0565b610649610ac236600461546a565b611f00565b610649610ad53660046155bd565b611f5f565b601a54610b1d9063ffffffff80821691600160201b8104909116906001600160401b03600160401b8204811691600160801b8104821691600160c01b9091041685565b6040805163ffffffff96871681529590941660208601526001600160401b03928316938501939093528116606084015216608082015260a001610653565b610689612022565b610649612031565b620186a0808080670de0b6b3a7640000818161c350604080519889526020890197909752958701949094526060860192909252608085015260a084015260c083015260e082015261010001610653565b6025546106fb906301000000900460ff1681565b6106fb610bdd366004615433565b61204b565b6106fb610bf0366004615433565b6120c5565b610649610c03366004615408565b6120d2565b610649610c1636600461569d565b6120f9565b610649610c29366004615617565b60226020525f908152604090205481565b610951610c48366004615617565b6121c3565b6025546106fb90610100900460ff1681565b61064961c35081565b610649610c7636600461569d565b6121ff565b6009546106fb90600160201b900460ff1681565b6106bc610c9d366004615408565b6122b5565b6106bc610cb0366004615617565b612316565b6009546106fb9065010000000000900460ff1681565b610649610cd9366004615617565b612327565b6106d07f000000000000000000000000000000000000000000000000000000000000000081565b610649610d13366004615408565b612380565b6107ad61238d565b6106bc610d2e3660046155bd565b6124f6565b610d3b61254b565b604080516001600160801b0396871681529486166020860152928516928401929092529092166060820152608081019190915260a001610653565b610649610d84366004615617565b612599565b6106d07f000000000000000000000000000000000000000000000000000000000000000081565b6106bc610dbe3660046155bd565b61263e565b610649610dd1366004615617565b6127c8565b610649610de43660046156d1565b612847565b610649610df73660046156fb565b612976565b6009546106fb9060ff1681565b6003546001600160a01b03166106d0565b6106bc6129a0565b61064960065481565b610649610e39366004615717565b6129e3565b61064960145481565b61064960085481565b6015546106d0906001600160a01b031681565b610649610e71366004615408565b612b68565b6009546106fb90600160381b900460ff1681565b6106bc610e98366004615617565b612b8e565b61064960105481565b6106bc612bff565b601f54610a59906001600160801b0380821691600160801b90041682565b601b54601c54601d54601e54610f05936001600160a01b03811693600160a01b90910463ffffffff16926001600160b81b039091169185565b604080516001600160a01b03909616865263ffffffff90941660208601526001600160b81b03909216928401929092526060830191909152608082015260a001610653565b5f5f610f5461238d565b50600554909550610f7494508593506001600160a01b0316915050612c0f565b91505090565b5f5f5f610f85612caa565b610f8d612d03565b925092509250610f9d6001600f55565b909192565b606060188054610fb190615742565b80601f0160208091040260200160405190810160405280929190818152602001828054610fdd90615742565b80156110285780601f10610fff57610100808354040283529160200191611028565b820191905f5260205f20905b81548152906001019060200180831161100b57829003601f168201915b5050505050905090565b5f61103f825f6001611cd1565b92915050565b61104d612f26565b602554610100900460ff161561107657604051631186953760e31b815260040160405180910390fd5b60105460408051918252602082018390527fe796e9ae748449310fcd1cc6718aab236c9b8d2e0e04dacb232ba564d5b338cc910160405180910390a1601055565b5f336110c4818585612f51565b5060019392505050565b5f5f6110d861238d565b509450505050506110f5836001836130759092919063ffffffff16565b9392505050565b5f8115611130575f61110c61238d565b509450505050506111288585836130759092919063ffffffff16565b9150506110f5565b60408051808201909152601f546001600160801b038082168352600160801b909104166020820152611163908585613075565b949350505050565b6040805160a0810182525f80825260208201819052918101829052606081018290526080810182905281908190604080518082019091525f8082526020820152604080518082019091525f80825260208201526111c6612caa565b6040805160a081018252601a5463ffffffff8082168352600160201b820481166020808501919091526001600160401b03600160401b8404811685870152600160801b80850482166060870152600160c01b9094041660808501526024546005548651808801909752601f546001600160801b0380821689529590049094169186019190915292965091925f92611267926001600160a01b031690612c0f16565b90505f811561129a57602054829061128b906001600160801b0316620186a0615788565b611295919061579f565b61129c565b5f5b602481905590505f8382116112ba576112b582856157be565b6112c4565b6112c484836157be565b905083158015906112ef5750620186a0601754856112e29190615788565b6112ec919061579f565b81105b1561132c576040518181527f479ca0b7370ecf25269e837ef2836a8fb256e3683a41bc4b22f6f61d0ee46d509060200160405180910390a1611340565b611334613104565b929d50909b5099509750505b8a1561139057604080518082018252601f546001600160801b038082168352600160801b918290048116602080850191909152845180860190955280548083168652929092041690830152965094505b5050505061139e6001600f55565b91939550919395565b5f336113b485828561339d565b6113bf858585613415565b506001949350505050565b5f336110c48185856113dc8383612976565b6113e691906157d1565b612f51565b5f6113f4612caa565b6001600160a01b03821661141b57604051631e4ec46b60e01b815260040160405180910390fd5b600954610100900460ff161561144457604051631e61c1e960e11b815260040160405180910390fd5b61144c613104565b505060408051808201909152602080546001600160801b038082168452600160801b9091041690820152925061148891508290508560016135be565b91506114a78161149784613633565b6114a087613633565b338761369f565b5061103f6001600f55565b6114ba6138e7565b6001600160a01b0382165f81815260166020908152604091829020805460ff19168515159081179091558251938452908301527fea1eefb4fd58778d7b274fe54045a9feeec8f2847899c2e71126d3a74d486da591015b60405180910390a15050565b611525613941565b60075460ff16611539576115395f19613985565b60095460ff1661154d5761154d5f196139ba565b60095462010000900460ff16611566576115665f6139ef565b600954600160201b900460ff16611580576115805f613a38565b600954600160301b900460ff1661159a5761159a5f613a85565b600954600160401b900460ff166115ec576115b3613104565b50505050506115c15f613ad6565b601a80546fffffffffffffffff00000000000000001916600160401b426001600160401b0316021790555b565b5f5f6115f861238d565b509450505050506008546116155f83612c0f90919063ffffffff16565b101561163757611625815f612c0f565b60085461163291906157be565b6110f5565b5f9392505050565b611647612f26565b61165081613b27565b50565b5f5f61165d61238d565b509450505050506110f5835f836135be9092919063ffffffff16565b611681612f26565b611689613b76565b6116925f613b27565b6115ec5f613ba0565b6116a3612f26565b60255462010000900460ff16156116cd57604051631186953760e31b815260040160405180910390fd5b601554604080516001600160a01b03928316815291831660208301527faeae842c8b3cd009fbb602e1ed072dc1aec69750e431ceae97f7543b466cd04c910160405180910390a1601580546001600160a01b0319166001600160a01b0392909216919091179055565b5f61173f612caa565b6001600160a01b03821661176657604051631e4ec46b60e01b815260040160405180910390fd5b61176e613104565b505060408051808201909152601f546001600160801b038082168352600160801b90910416602082015292508591506117a99050825f612c0f565b6117b391906157d1565b60085410156117d557604051630aad288560e21b815260040160405180910390fd5b6117e081855f613075565b91506114a7816117ef86613633565b6117f885613633565b866001613bfb565b6001600160a01b03165f908152600a602052604090205490565b6118226138e7565b6115ec5f613fc1565b5f611834612caa565b6001600160a01b03821661185b57604051631e4ec46b60e01b815260040160405180910390fd5b60095465010000000000900460ff161561188857604051631b4b0d7760e21b815260040160405180910390fd5b824211156118b757604051635ba2a8d560e01b8152426004820152602481018490526044015b60405180910390fd5b6118bf613104565b50505050505f6118cd612d03565b509150506118db8382613fda565b156118f957604051633af2cafd60e11b815260040160405180910390fd5b604080518082018252602080546001600160801b038082168452600160801b90910416828201526001600160a01b0386165f90815260228252838120546023909252928320549192909161194c90613633565b90505f8080670de0b6b3a76400008761196f886001600160801b038f16856135be565b6119799190615788565b611983919061579f565b90505f620186a0601154620186a061199b91906157d1565b6119a59084615788565b6119af919061579f565b90506119ba816140bc565b6119c3876140bc565b6119cd91906157e4565b93505f841315611a0557620186a0601254620186a06119ec91906157d1565b6119f69084615788565b611a00919061579f565b611a07565b855b60145490995015611a3d57620186a089601454611a249190615788565b611a2e919061579f565b9250611a3a838a6157be565b98505b505f9050611a5e611a59876001600160801b038e1660016135be565b613633565b90505f80808513611afd57611a738d8761580a565b91506001600160801b03821615611af857611a9b611a59896001600160801b0385165f6135be565b905080885f01818151611aae919061580a565b6001600160801b03908116909152601f805484935090915f91611ad39185911661580a565b92506101000a8154816001600160801b0302191690836001600160801b031602179055505b611b28565b611b086013546140bc565b851215611b28576040516326ff709960e11b815260040160405180910390fd5b8a6001600160a01b03167f821de4e13fff1938b3806eb2859b6a5d55111f00dcf286f8a793584228ff36f88b8f86888787604051611b9c969594939291909586526001600160801b03948516602087015292841660408601526060850191909152821660808401521660a082015260c00190565b60405180910390a250611bbd8783838f611bb69190615829565b338e61369f565b611bc889338c614125565b611bd383308c614125565b611bde308430614209565b6005546001600160a01b031615611c4857600554604051631e1b394160e11b81525f60048201526001600160a01b0390911690633c367282906024015f604051808303815f87803b158015611c31575f5ffd5b505af1158015611c43573d5f5f3e3d5ffd5b505050505b50505050505050506110f56001600f55565b60035433906001600160a01b03168114611cc85760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b60648201526084016118ae565b61165081613fc1565b5f8115611cfd575f611ce161238d565b509450505050506111288585836135be9092919063ffffffff16565b60408051808201909152601f546001600160801b038082168352600160801b9091041660208201526111639085856135be565b5f8115611d5c575f611d4061238d565b955050505050506111288585836135be9092919063ffffffff16565b60408051808201909152602080546001600160801b038082168452600160801b90910416908201526111639085856135be565b611d97612f26565b600954600160381b900460ff1615611dc25760405163a02a2bcd60e01b815260040160405180910390fd5b61c3508163ffffffff161115611deb5760405163da0afa5760e01b815260040160405180910390fd5b611df3613104565b5050601a805467ffffffff000000001916600160201b63ffffffff8716908102919091179091556040519081527f58a58c712558f3d6e20bed57421eb8f73048d881dea9e5bb80efb37c49680d1c93506020019150611e4f9050565b60405180910390a150565b611e626142d7565b60075460ff16611e7557611e755f613985565b60095460ff16611e8857611e885f6139ba565b60095462010000900460ff16611ea257611ea260016139ef565b600954600160201b900460ff16611ebd57611ebd6001613a38565b600954600160301b900460ff16611ed857611ed86001613a85565b600954600160401b900460ff166115ec57611ef1613104565b50505050506115ec6001613ad6565b5f8115611f2c575f611f1061238d565b955050505050506111288585836130759092919063ffffffff16565b60408051808201909152602080546001600160801b038082168452600160801b9091041690820152611163908585613075565b5f611f68612caa565b6001600160a01b038216611f8f57604051631e4ec46b60e01b815260040160405180910390fd5b611f97613104565b505060408051808201909152601f546001600160801b038082168352600160801b9091041660208201529250611fd391508290508560016135be565b915081611fe0825f612c0f565b611fea91906157d1565b600854101561200c57604051630aad288560e21b815260040160405180910390fd5b6114a78161201984613633565b6117f887613633565b606060198054610fb190615742565b5f612046670de0b6b3a76400005f6001611cd1565b905090565b5f33816120588286612976565b9050838110156120b85760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016118ae565b6113bf8286868403612f51565b5f336110c4818585613415565b5f5f6120dc61238d565b509450505050506110f5836001836135be9092919063ffffffff16565b5f612102612caa565b6001600160a01b03831661212957604051631e4ec46b60e01b815260040160405180910390fd5b6009546301000000900460ff16156121545760405163e0a3980360e01b815260040160405180910390fd5b61215c613104565b505060408051808201909152601f546001600160801b038082168352600160801b90910416602082015292506121989150829050866001613075565b91506121b8816121a787613633565b6121b085613633565b87875f614367565b506110f56001600f55565b5f5f5f6121cf84611800565b6001600160a01b039094165f90815260236020908152604080832054602290925290912054949590949350915050565b5f612208612caa565b6001600160a01b03831661222f57604051631e4ec46b60e01b815260040160405180910390fd5b6009546301000000900460ff161561225a5760405163e0a3980360e01b815260040160405180910390fd5b612262613104565b505060408051808201909152601f546001600160801b038082168352600160801b909104166020820152925061229d9150829050865f6135be565b91506121b8816122ac84613633565b6121b088613633565b6122bd613941565b620186a08111156122e15760405163017d28ed60e41b815260040160405180910390fd5b60178190556040518181527fb0a2e5eb716fabfb1aa7752f8bb8f33931cc548cce738a19d78a0acd325d5cc190602001611e4f565b61231e612f26565b611650816145e1565b5f5f61233161238d565b509450505050505f60085461234f5f84612c0f90919063ffffffff16565b10156123715761235f825f612c0f565b60085461236c91906157be565b612373565b5f5b905061116382825f613075565b5f61103f825f60016110fc565b6040805160a0810182525f80825260208201819052918101829052606081018290526080810182905281908190604080518082019091525f8082526020820152604080518082019091525f80825260208201526040805160a081018252601a5463ffffffff8082168352600160201b82041660208301526001600160401b03600160401b8204811693830193909352600160801b810483166060830152600160c01b9004909116608082015292505f6124458461463b565b8051909150156124a35760608082015160808084015160a085015160208601516001600160401b03908116958a019590955260408601519094169188019190915260c084015160e0850151929a5090985091965090935091506124ed565b604080518082018252601f546001600160801b038082168352600160801b918290048116602080850191909152845180860190955280548083168652929092041690830152935091505b50909192939495565b6124fe612caa565b6001600160a01b03811661252557604051631e4ec46b60e01b815260040160405180910390fd5b61252d613104565b505050505061253d338383614209565b6125476001600f55565b5050565b5f5f5f5f5f5f5f61255a61238d565b9550955050505050612578611a595f84612c0f90919063ffffffff16565b60209283015182519290930151602154919993985091965090945092509050565b6009545f906301000000900460ff16156125b457505f919050565b5f5f5f6125bf61238d565b9550955050945050505f306001600160a01b0316866001600160a01b0316146125f0576125eb86611800565b612604565b836125fa87611800565b61260491906157d1565b90505f6126138484600161497e565b90505f6126218584836135be565b90508082106126305780612632565b815b98975050505050505050565b612646612caa565b336001600160a01b03821661266e57604051631e4ec46b60e01b815260040160405180910390fd5b612676613104565b5050335f908152602360205260409020541592506126be915050575f61269a612d03565b50509050806126bc5760405163345513d960e01b815260040160405180910390fd5b505b6126c9838333614125565b6040805160a081018252601b546001600160a01b0381168252600160a01b900463ffffffff166020820152601c546001600160b81b031691810191909152601d546060820152601e5460808201819052612724908390613fda565b6127bc576001600160a01b0382165f9081526023602090815260409182902054825180840190935281546001600160801b038082168552600160801b9091041691830191909152612777919060016135be565b6001600160a01b0383165f90815260226020526040908190205460808401519151633b49de0f60e21b81526004810193909352602483015260448201526064016118ae565b50506125476001600f55565b6009545f906301000000900460ff16156127e357505f919050565b5f5f5f6127ee61238d565b9550955050945050505f6128048383600161497e565b90505f612812848383613075565b90505f6001600160a01b03881630146128335761282e88611800565b612621565b8561283d89611800565b61262191906157d1565b5f6128506138e7565b6001600160a01b03821661287757604051631e4ec46b60e01b815260040160405180910390fd5b60408051808201909152601f546001600160801b038082168352600160801b9091048116602083015284165f036128b7576128b4611a5930611800565b93505b6128cc816001600160801b03861660016135be565b91506128e23033866001600160801b0316612f51565b6128f8816128ef84613633565b8686305f614367565b305f81815260226020526040902054906129159082908690614125565b604080516001600160801b03871681526001600160a01b0386166020820152908101849052606081018290527faf48306b6b4f0ba30d00f05b21559d8d29934142980a553d8a014780c6c7e4529060800160405180910390a1505092915050565b6001600160a01b039182165f908152600b6020908152604080832093909416825291909152205490565b6129a8612f26565b6025805462ff00001916620100001790556040517f70328969870b42d0fc62ce5946530c50a466c5ad21af004a9f2f3a8eda9a4a0c905f90a1565b5f6129ec612caa565b336001600160a01b038316612a1457604051631e4ec46b60e01b815260040160405180910390fd5b612a1c613104565b5050602054612a3993508892506001600160801b031690506157d1565b6006541015612a5b576040516397ba4de360e01b815260040160405180910390fd5b5f612a64612d03565b5050905080612a865760405163345513d960e01b815260040160405180910390fd5b8415612a9757612a97338633614209565b612aa9612aa387613633565b856149da565b6040805160a081018252601b546001600160a01b0381168252600160a01b900463ffffffff166020820152601c546001600160b81b031691810191909152601d546060820152601e54608082018190529194509150612b09908390613fda565b612b5c576001600160a01b0382165f9081526023602090815260409182902054825180840190935281546001600160801b038082168552600160801b9091041691830191909152612777919060016135be565b50506110f56001600f55565b5f5f612b7261238d565b509450505050506110f5835f836130759092919063ffffffff16565b612b966138e7565b600380546001600160a01b0383166001600160a01b03199091168117909155612bc76002546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b612c07613b76565b6115ec614c12565b5f6001600160a01b038216612c2f575081516001600160801b031661103f565b60405163115de16960e11b81523060048201526001600160a01b038316906322bbc2d290602401602060405180830381865afa158015612c71573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c959190615848565b83516110f591906001600160801b03166157d1565b6002600f5403612cfc5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016118ae565b6002600f55565b6040805160a081018252601b546001600160a01b0381168252600160a01b900463ffffffff166020820152601c546001600160b81b0316918101829052601d546060820152601e5460808201525f91829182914214612eca575f815f01516001600160a01b031663bd9a548b6040518163ffffffff1660e01b8152600401606060405180830381865afa158015612d9c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612dc0919061585f565b909550935090508015612e0d5781516040516001600160a01b0390911681527ffc131c36b7e444dacda44901fd43641dcdcfdc43fe9e2601b3c1dd87061db9e59060200160405180910390a15b6001600160b81b034216604080840182905260608401869052608084018590528351601b8054602087015163ffffffff16600160a01b026001600160c01b03199091166001600160a01b0390931692909217919091179055601c80546001600160b81b031916909217909155601d859055601e849055517fc1f41e029acf5127d111625602160c4cee3e1a4d38e691e50544d1f7c68b77be90612ebc9086908690918252602082015260400190565b60405180910390a150612ed9565b80606001519250806080015191505b608081015160608201515f9190612ef090826157be565b612efd90620186a0615788565b612f07919061579f565b9050816020015163ffffffff168111612f1f57600194505b5050909192565b6001546001600160a01b031633146115ec57604051630e05f48560e11b815260040160405180910390fd5b6001600160a01b038316612fb35760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016118ae565b6001600160a01b0382166130145760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016118ae565b6001600160a01b038381165f818152600b602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b82515f906001600160801b0316810361308f5750816110f5565b835160208501516001600160801b03918216916130ad911685615788565b6130b7919061579f565b90508180156130f457508284602001516001600160801b0316855f01516001600160801b0316836130e89190615788565b6130f2919061579f565b105b156110f5576111638160016157d1565b5f5f5f5f6131386040805160a0810182525f8082526020820181905291810182905260608101829052608081019190915290565b506040805160a081018252601a5463ffffffff8082168352600160201b82041660208301526001600160401b03600160401b8204811693830193909352600160801b810483166060830152600160c01b900490911660808201525f61319c8261463b565b80519091501561339557805f0151955080606001519450806080015193508060a0015192507fc63977c8e2362a31182dc8e89a52252f9836922738e0abcfc0de6924972eafe5826060015183608001518360200151846040015160405161322c94939291906001600160401b03948516815292841660208401529083166040830152909116606082015260800190565b60405180910390a17f2b5229f33f1d24d5baab718e1e25d0d86195a9b6d786c2c0868edfb21a460e25858260200151868660405161328c94939291909384526001600160401b039290921660208401526040830152606082015260800190565b60405180910390a16020818101516001600160401b0390811660608501819052604080850151831660808701819052429093169086018190524363ffffffff908116808852601a80548988015167ffffffffffffffff19909116909217600160201b92909316919091029190911777ffffffffffffffffffffffffffffffff00000000000000001916600160401b90920267ffffffffffffffff60801b191691909117600160801b928302176001600160c01b0316600160c01b9093029290921790915560c08301518051908301516001600160801b03918216908216830217601f5560e084015180519084015190821691169091021790558215613395576133953084614c2a565b509091929394565b5f6133a88484612976565b90505f19811461340f57818110156134025760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016118ae565b61340f8484848403612f51565b50505050565b6001600160a01b0383166134795760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016118ae565b6001600160a01b0382166134db5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016118ae565b6001600160a01b0383165f908152600a6020526040902054818110156135525760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016118ae565b6001600160a01b038085165f818152600a602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906135b19086815260200190565b60405180910390a361340f565b5f83602001516001600160801b03165f036135da5750816110f5565b602084015184516001600160801b03918216916135f8911685615788565b613602919061579f565b90508180156130f4575082845f01516001600160801b031685602001516001600160801b0316836130e89190615788565b5f6001600160801b0382111561369b5760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e20316044820152663238206269747360c81b60648201526084016118ae565b5090565b83855f018181516136b0919061580a565b6001600160801b03169052506020850180518491906136d090839061580a565b6001600160801b039081169091526001600160a01b0383165f90815260236020526040812080549287169350916137089084906157be565b909155505084516020808701516001600160801b03908116600160801b0292169190911790556001600160a01b038216301461377c5761377c6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001683306001600160801b038816614cee565b6005546001600160a01b03161561388c57600554604051631e1b394160e11b8152600160048201526001600160a01b0390911690633c367282906024015f604051808303815f87803b1580156137d0575f5ffd5b505af11580156137e2573d5f5f3e3d5ffd5b5050600554604051639d6c635160e01b81523060048201525f93506001600160a01b039091169150639d6c635190602401602060405180830381865afa15801561382e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906138529190615848565b9050801561388a575f856001600160801b03168211613871578161387c565b856001600160801b03165b905061388781614cfa565b50505b505b604080516001600160801b038087168252851660208201526001600160a01b0380841692908516917f9dc1449a0ff0c152e18e8289d865b47acc6e1b76b1ecb239c13d6ee22a9206a791015b60405180910390a35050505050565b6002546001600160a01b031633146115ec5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016118ae565b6002546001600160a01b0316331480159061396757506001546001600160a01b03163314155b156115ec57604051636f54526960e01b815260040160405180910390fd5b60068190556040518181527fbf1ce7fb3a8e648b70ea830f99b52f7ea31554186d29763280751f42e77f638690602001611e4f565b60088190556040518181527f854df3eb95564502c8bc871ebdd15310ee26270f955f6c6bd8cea68e75045bc090602001611e4f565b600980548215156101000261ff00199091161790556040517f34a71a12fa81891b738d910d4d44ffabeeb12f8bc026844db237ea8bf8ebe8be90611e4f90831515815260200190565b6009805482151563010000000263ff000000199091161790556040517fc56dd3e14f5af3a74c61b7cdf855a3d8ab4401c78c0622a4d312de8a8f8736a290611e4f90831515815260200190565b60098054821515650100000000000265ff0000000000199091161790556040517f28bc4f9e24da61e7ba3aa697dfaefd0167093d2425c00b6190a7d3152ee6dfaa90611e4f90831515815260200190565b60098054821515600160381b0267ff00000000000000199091161790556040517fdea8bb46eee4300a7d2de86939c245f568dc5994576194cbfb69969e010dcb6790611e4f90831515815260200190565b5f80546001600160a01b0319166001600160a01b03838116918217835560015460405192939116917f162998b90abc2507f3953aa797827b03a14c42dbd9a35f09feaf02e0d592773a9190a350565b5f546001600160a01b031633146115ec57604051633d71279960e21b815260040160405180910390fd5b6001546040516001600160a01b038084169216907f31b6c5a04b069b6ec1b3cef44c4e7c1eadd721349cda9823d0b1877b3551cdc6905f90a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b83855f01818151613c0c9190615829565b6001600160801b0316905250602085018051849190613c2c908390615829565b6001600160801b03908116909152613c48915083908516614c2a565b845160208601516001600160801b03908116600160801b02911617601f558015613f7457613caa6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633306001600160801b038816614cee565b6005546001600160a01b031615801590613ce257506103e8613ccc865f612c0f565b613cd6919061579f565b846001600160801b0316115b15613f7457600554604051631e1b394160e11b8152600160048201526001600160a01b0390911690633c367282906024015f604051808303815f87803b158015613d2a575f5ffd5b505af1158015613d3c573d5f5f3e3d5ffd5b5050600554604051639d6c635160e01b81523060048201525f93506001600160a01b039091169150639d6c635190602401602060405180830381865afa158015613d88573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613dac9190615848565b90505f670b1a2bc2ec50000060055f9054906101000a90046001600160a01b03166001600160a01b03166301e1d1146040518163ffffffff1660e01b8152600401602060405180830381865afa158015613e08573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613e2c9190615848565b60055f9054906101000a90046001600160a01b03166001600160a01b0316639cfd2f2e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613e7c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613ea09190615848565b613eb290670de0b6b3a7640000615788565b613ebc919061579f565b6005546040516337082c1560e01b81523060048201529290911192505f916001600160a01b03909116906337082c1590602401602060405180830381865afa158015613f0a573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613f2e9190615848565b831190508180613f3b5750805b15613f70575f876001600160801b03168411613f575783613f62565b876001600160801b03165b9050613f6d81614cfa565b50505b5050505b604080516001600160801b038087168252851660208201526001600160a01b0384169133917fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d791016138d8565b600380546001600160a01b031916905561165081614e7d565b5f6010545f03613fec5750600161103f565b6001600160a01b0383165f90815260236020908152604080832054815180830190925282546001600160801b038082168452600160801b90910416928201929092526140399160016135be565b9050805f0361404c57600191505061103f565b6001600160a01b0384165f9081526022602052604081205490819003614076575f9250505061103f565b5f81620186a0670de0b6b3a764000061408f8887615788565b614099919061579f565b6140a39190615788565b6140ad919061579f565b60105410159695505050505050565b5f6001600160ff1b0382111561369b5760405162461bcd60e51b815260206004820152602860248201527f53616665436173743a2076616c756520646f65736e27742066697420696e2061604482015267371034b73a191a9b60c11b60648201526084016118ae565b6001600160a01b0381165f908152602260205260408120805485929061414c9084906157be565b925050819055508260215f82825461416491906157be565b90915550506001600160a01b03821630146141ad576141ad6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168385614ece565b806001600160a01b0316826001600160a01b0316336001600160a01b03167fbc290bb45104f73cf92115c9603987c3f8fd30c182a13603d8cffa49b5f59952866040516141fc91815260200190565b60405180910390a4505050565b6001600160a01b0381165f90815260226020526040812080548492906142309084906157d1565b925050819055508160215f82825461424891906157d1565b90915550506001600160a01b0383163014614292576142926001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016843085614cee565b806001600160a01b0316836001600160a01b03167fa32435755c235de2976ed44a75a2f85cb01faf0c894f639fe0c32bb9455fea8f8460405161306891815260200190565b6004546001600160a01b031633148015906142fd57506002546001600160a01b03163314155b80156143325750336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614155b801561434957506001546001600160a01b03163314155b156115ec57604051631d1e647b60e01b815260040160405180910390fd5b336001600160a01b0383161480159061437e575080155b156143b2575f61438e8333612976565b90505f1981146143b0576143b083336113e66001600160801b038916856157be565b505b60408051808201909152602080546001600160801b038082168452600160801b90910416908201525f906143e9908890600161497e565b9050856001600160801b0316811015614427576040516362ddb6d760e11b8152600481018290526001600160801b03871660248201526044016118ae565b6005546001600160a01b038481169116146144d35760408051808201909152602080546001600160801b038082168452600160801b90910416908201525f906144729089908361497e565b9050866001600160801b03168110156144d1575f614499826001600160801b038a166157be565b90506144a481614ed9565b505060408051808201909152601f546001600160801b038082168352600160801b90910416602082015297505b505b85875f018181516144e4919061580a565b6001600160801b031690525060208701805186919061450490839061580a565b6001600160801b03908116909152885160208a01518216600160801b0290821617601f55614536915084908716614f96565b6001600160a01b0384163014614583576145836001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016856001600160801b038916614ece565b604080516001600160801b038089168252871660208201526001600160a01b03808616929087169133917ffbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db910160405180910390a450505050505050565b600580546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527f555b230d631cc610f418cd672052f049221d785a7c2fba40a3bfe97f6180b5cb9101611511565b614643615353565b4282604001516001600160401b03161415801561466a5750600954600160381b900460ff16155b156149795760018152604080518082018252601f546001600160801b038082168352600160801b91829004811660208085019190915260c0860193909352835180850185528354808316825292909204169181019190915260e08301528201515f906146df906001600160401b0316426157be565b60055460c08401519192505f916146fe916001600160a01b0316612c0f565b90505f81156147345760e0840151518290614725906001600160801b0316620186a0615788565b61472f919061579f565b614736565b5f5b601554608087015160405163cd3181d560e01b815260048101879052602481018490526001600160401b0390911660448201529192506001600160a01b03169063cd3181d5906064016040805180830381865afa158015614799573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906147bd91906158a9565b6001600160401b039081166040870152166020850181905260e085015151670de0b6b3a764000091906147f9906001600160801b031686615788565b6148039190615788565b61480d919061579f565b6060850181905215801590614841575060e08401515160608501516001600160801b039161483e91908316906157d1565b11155b8015614864575060608401516001600160801b03906148619084906157d1565b11155b15614975576148768460600151613633565b60e08501518051614888908390615829565b6001600160801b031690525060608401516148a290613633565b60c085015180516148b4908390615829565b6001600160801b0316905250602085015163ffffffff161561497557620186a0856020015163ffffffff1685606001516148ee9190615788565b6148f8919061579f565b6080850181905260c085015161490e905f612c0f565b61491891906157be565b8460c00151602001516001600160801b031685608001516149399190615788565b614943919061579f565b60a0850181905261495390613633565b8460c001516020018181516149689190615829565b6001600160801b03169052505b5050505b919050565b5f81156149bb5782516005546001600160801b03909116906149aa9086906001600160a01b0316612c0f565b6149b491906157be565b90506110f5565b825184516149c9919061580a565b6001600160801b0316949350505050565b604080518082018252602080546001600160801b038082168452600160801b918290048116848401528451808601909552601f5480821686529190910416908301525f918290614a2c9083600161497e565b9050846001600160801b0316811015614a6a576040516362ddb6d760e11b8152600481018290526001600160801b03861660248201526044016118ae565b60408051808201909152601f546001600160801b038082168352600160801b9091041660208201525f90614a9f90848361497e565b9050856001600160801b0316811015614ad4575f614ac6826001600160801b0389166157be565b9050614ad181614ed9565b50505b614ae9836001600160801b0388166001613075565b935085835f01818151614afc9190615829565b6001600160801b0316905250614b1184613633565b83602001818151614b229190615829565b6001600160801b0390811690915284516020808701518316600160801b0291909216178155335f9081526023909152604081208054879350909190614b689084906157d1565b90915550506001600160a01b0385163014614bba57614bba6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016866001600160801b038916614ece565b604080516001600160801b0388168152602081018690526001600160a01b0387169133917f01348584ec81ac7acd52b7d66d9ade986dd909f3d513881c190fc31c90527efe910160405180910390a350505092915050565b5f80546001600160a01b03191690556115ec33613ba0565b6001600160a01b038216614c805760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016118ae565b80600c5f828254614c9191906157d1565b90915550506001600160a01b0382165f818152600a60209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b505050565b61340f848484846150c8565b60408051808201909152601f546001600160801b038082168352600160801b9091041660208201525f90614d3081846001613075565b6005549092505f90614d4a906001600160a01b0316611800565b9050828110614d595782614d5b565b805b60055460405163095ea7b360e01b81526001600160a01b039182166004820152602481018790529194507f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303815f875af1158015614dcd573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614df191906158da565b50600554604051630c264bc360e31b8152600481018690526001600160a01b03909116906361325e18906024015f604051808303815f87803b158015614e35575f5ffd5b505af1158015614e47573d5f5f3e3d5ffd5b50505050614e7682614e5886613633565b614e6186613633565b60055430906001600160a01b03166001614367565b5050919050565b600280546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b614ce9838383615133565b60408051808201909152601f546001600160801b038082168352600160801b9091041660208201525f90614f0e818484613075565b60055460405163f556d88960e01b8152600481018690529193506001600160a01b03169063f556d889906024015f604051808303815f87803b158015614f52575f5ffd5b505af1158015614f64573d5f5f3e3d5ffd5b50505050614f9081614f7585613633565b614f7e85613633565b6005546001600160a01b03165f613bfb565b50919050565b6001600160a01b038216614ff65760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016118ae565b6001600160a01b0382165f908152600a6020526040902054818110156150695760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016118ae565b6001600160a01b0383165f818152600a602090815260408083208686039055600c80548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b6040516001600160a01b038085166024830152831660448201526064810182905261340f9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152615163565b6040516001600160a01b038316602482015260448101829052614ce990849063a9059cbb60e01b906064016150fc565b5f6151b7826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166152369092919063ffffffff16565b905080515f14806151d75750808060200190518101906151d791906158da565b614ce95760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016118ae565b606061116384845f85855f5f866001600160a01b0316858760405161525b91906158f5565b5f6040518083038185875af1925050503d805f8114615295576040519150601f19603f3d011682016040523d82523d5f602084013e61529a565b606091505b50915091506152ab878383876152b6565b979650505050505050565b606083156153245782515f0361531d576001600160a01b0385163b61531d5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016118ae565b5081611163565b61116383838151156153395781518083602001fd5b8060405162461bcd60e51b81526004016118ae91906153d3565b6040518061010001604052805f151581526020015f6001600160401b031681526020015f6001600160401b031681526020015f81526020015f81526020015f81526020016153b0604080518082019091525f808252602082015290565b81526020016153ce604080518082019091525f808252602082015290565b905290565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f60208284031215615418575f5ffd5b5035919050565b6001600160a01b0381168114611650575f5ffd5b5f5f60408385031215615444575f5ffd5b823561544f8161541f565b946020939093013593505050565b8015158114611650575f5ffd5b5f5f5f6060848603121561547c575f5ffd5b83359250602084013561548e8161545d565b9150604084013561549e8161545d565b809150509250925092565b5f602082840312156154b9575f5ffd5b81356110f58161545d565b5f6101808201905087825286602083015285604083015263ffffffff855116606083015263ffffffff60208601511660808301526001600160401b0360408601511660a08301526001600160401b0360608601511660c08301526001600160401b0360808601511660e083015261555561010083018580516001600160801b03908116835260209182015116910152565b82516001600160801b03908116610140840152602084015116610160830152979650505050505050565b5f5f5f60608486031215615591575f5ffd5b833561559c8161541f565b925060208401356155ac8161541f565b929592945050506040919091013590565b5f5f604083850312156155ce575f5ffd5b8235915060208301356155e08161541f565b809150509250929050565b5f5f604083850312156155fc575f5ffd5b82356156078161541f565b915060208301356155e08161545d565b5f60208284031215615627575f5ffd5b81356110f58161541f565b80356001600160801b0381168114614979575f5ffd5b5f5f5f6060848603121561565a575f5ffd5b61566384615632565b925060208401359150604084013561549e8161541f565b5f6020828403121561568a575f5ffd5b813563ffffffff811681146110f5575f5ffd5b5f5f5f606084860312156156af575f5ffd5b8335925060208401356156c18161541f565b9150604084013561549e8161541f565b5f5f604083850312156156e2575f5ffd5b6156eb83615632565b915060208301356155e08161541f565b5f5f6040838503121561570c575f5ffd5b82356156eb8161541f565b5f5f5f60608486031215615729575f5ffd5b8335925060208401359150604084013561549e8161541f565b600181811c9082168061575657607f821691505b602082108103614f9057634e487b7160e01b5f52602260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b808202811582820484141761103f5761103f615774565b5f826157b957634e487b7160e01b5f52601260045260245ffd5b500490565b8181038181111561103f5761103f615774565b8082018082111561103f5761103f615774565b8181035f83128015838313168383128216171561580357615803615774565b5092915050565b6001600160801b03828116828216039081111561103f5761103f615774565b6001600160801b03818116838216019081111561103f5761103f615774565b5f60208284031215615858575f5ffd5b5051919050565b5f5f5f60608486031215615871575f5ffd5b835161587c8161545d565b602085015160409095015190969495509392505050565b80516001600160401b0381168114614979575f5ffd5b5f5f604083850312156158ba575f5ffd5b6158c383615893565b91506158d160208401615893565b90509250929050565b5f602082840312156158ea575f5ffd5b81516110f58161545d565b5f82518060208501845e5f92019182525091905056fea2646970667358221220b7193eb4f1343b7011a895c288fcfc8ae267683e59475da8d4c92fd470fc993864736f6c634300081d0033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000002200000000000000000000000000000000000000000000000000000000000000120000000000000000000000000ae750560b09ad1f5246f3b279b3767afd1d7916000000000000000000000000002f92800f57bcd74066f5709f1daa1a4302df875000000000000000000000000a80576c85a2022fef37530b94c9829c74a7404e400000000000000000000000000000000000000000000000000000000000013880000000000000000000000004e8d33ebd2470958be5af47b2a35cbd9f428e8880000000000000000000000000000000000000000000000000000000000015f90000000000000000000000000000000000000000000000000000000000000ea60000000000000000000000000000000000000000000000000000000000000271000000000000000000000000000000000000000000000000000000000000003e8000000000000000000000000000000000000000000000000000000000000006000000000000000000000000021fe3e26e824783ca7e374355a8d30ae8bbf6e3700000000000000000000000021fe3e26e824783ca7e374355a8d30ae8bbf6e3700000000000000000000000021fe3e26e824783ca7e374355a8d30ae8bbf6e3700000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000001154657374204c656e64696e67205061697200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000076661737056455200000000000000000000000000000000000000000000000000