40 txs
142 calls
constructor
constructor(address _asset, string _name, string _symbol, uint8 _underlyingDecimals, address _keeper, address _lzEndpoint, address _delegate)
functions
allowance
viewfunction allowance(address owner, address spender) view returns (uint256)
allowIndependence
viewfunction allowIndependence() view returns (bool)
allowInitializePath
viewfunction allowInitializePath(tuple origin) view returns (bool)
approvalRequired
purefunction approvalRequired() pure returns (bool)
asset
viewfunction asset() view returns (address)
balanceOf
viewfunction balanceOf(address account) view returns (uint256)
combineOptions
viewfunction combineOptions(uint32 _eid, uint16 _msgType, bytes _extraOptions) view returns (bytes)
currentEpoch
viewfunction currentEpoch() view returns (uint32)
decimalConversionRate
viewfunction decimalConversionRate() view returns (uint256)
decimals
viewfunction decimals() view returns (uint8)
depositAmountForEpoch
viewfunction depositAmountForEpoch() view returns (uint256)
endpoint
viewfunction endpoint() view returns (address)
enforcedOptions
viewfunction enforcedOptions(uint32 eid, uint16 msgType) view returns (bytes enforcedOption)
isComposeMsgSender
viewfunction isComposeMsgSender(tuple, bytes, address _sender) view returns (bool)
isPeer
viewfunction isPeer(uint32 _eid, bytes32 _peer) view returns (bool)
keeper
viewfunction keeper() view returns (address)
msgInspector
viewfunction msgInspector() view returns (address)
name
viewfunction name() view returns (string)
nextNonce
viewfunction nextNonce(uint32, bytes32) view returns (uint64 nonce)
oApp
viewfunction oApp() view returns (address)
oAppVersion
purefunction oAppVersion() pure returns (uint64 senderVersion, uint64 receiverVersion)
oftVersion
purefunction oftVersion() pure returns (bytes4 interfaceId, uint64 version)
owner
viewfunction owner() view returns (address)
peers
viewfunction peers(uint32 eid) view returns (bytes32 peer)
preCrime
viewfunction preCrime() view returns (address)
quoteOFT
viewfunction quoteOFT(tuple _sendParam) view returns (tuple oftLimit, tuple[] oftFeeDetails, tuple oftReceipt)
quoteSend
viewfunction quoteSend(tuple _sendParam, bool _payInLzToken) view returns (tuple msgFee)
SEND_AND_CALL
viewfunction SEND_AND_CALL() view returns (uint16)
SEND
viewfunction SEND() view returns (uint16)
sharedDecimals
viewfunction sharedDecimals() view returns (uint8)
symbol
viewfunction symbol() view returns (string)
token
viewfunction token() view returns (address)
totalSupply
viewfunction totalSupply() view returns (uint256)
underlyingDecimals
viewfunction underlyingDecimals() view returns (uint8)
WETH
viewfunction WETH() view returns (address)
withdrawalAmountForEpoch
viewfunction withdrawalAmountForEpoch() view returns (uint256)
withdrawalReceipts
viewfunction withdrawalReceipts(address) view returns (uint224 amount, uint32 epoch)
approve
nonpayablefunction approve(address spender, uint256 value) returns (bool)
completeWithdrawal
nonpayablefunction completeWithdrawal(address to)
completeWithdrawalETH
nonpayablefunction completeWithdrawalETH(address to)
deposit
nonpayablefunction deposit(address to, uint256 amount)
depositETH
payablefunction depositETH(address to) payable
depositETHToVault
payablefunction depositETHToVault(address from) payable
depositToVault
nonpayablefunction depositToVault(address from, uint256 amount)
initiateWithdrawal
nonpayablefunction initiateWithdrawal(uint224 amount)
initiateWithdrawalFromVault
nonpayablefunction initiateWithdrawalFromVault(address from, uint224 amount)
lzReceive
payablefunction lzReceive(tuple _origin, bytes32 _guid, bytes _message, address _executor, bytes _extraData) payable
lzReceiveAndRevert
payablefunction lzReceiveAndRevert(tuple[] _packets) payable
lzReceiveSimulate
payablefunction lzReceiveSimulate(tuple _origin, bytes32 _guid, bytes _message, address _executor, bytes _extraData) payable
permissionedBurn
nonpayablefunction permissionedBurn(address from, uint256 amount)
permissionedMint
nonpayablefunction permissionedMint(address to, uint256 amount)
processWithdrawals
nonpayablefunction processWithdrawals()
renounceOwnership
nonpayablefunction renounceOwnership()
send
payablefunction send(tuple _sendParam, tuple _fee, address _refundAddress) payable returns (tuple msgReceipt, tuple oftReceipt)
setAllowIndependence
nonpayablefunction setAllowIndependence(bool _allowIndependence)
setAsset
nonpayablefunction setAsset(address _asset)
setDecimals
nonpayablefunction setDecimals(uint8 _newDecimals)
setDelegate
nonpayablefunction setDelegate(address _delegate)
setEnforcedOptions
nonpayablefunction setEnforcedOptions(tuple[] _enforcedOptions)
setKeeper
nonpayablefunction setKeeper(address _keeper)
setMsgInspector
nonpayablefunction setMsgInspector(address _msgInspector)
setPeer
nonpayablefunction setPeer(uint32 _eid, bytes32 _peer)
setPreCrime
nonpayablefunction setPreCrime(address _preCrime)
transfer
nonpayablefunction transfer(address to, uint256 value) returns (bool)
transferAsset
nonpayablefunction transferAsset(address to, uint256 amount, address _token)
transferAssetETH
nonpayablefunction transferAssetETH(address to, uint256 amount)
transferFrom
nonpayablefunction transferFrom(address from, address to, uint256 value) returns (bool)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
events
AllowIndependenceSet
event AllowIndependenceSet(bool allowIndependence)
Approval
event Approval(address indexed owner, address indexed spender, uint256 value)
AssetTransferred
event AssetTransferred(address indexed to, uint256 amount)
Deposit
event Deposit(address indexed from, address indexed to, uint256 amount)
DepositToVault
event DepositToVault(address indexed user, uint256 amount)
EnforcedOptionSet
event EnforcedOptionSet((uint32 eid, uint16 msgType, bytes options)[] _enforcedOptions)
KeeperSet
event KeeperSet(address keeper)
MsgInspectorSet
event MsgInspectorSet(address inspector)
OFTReceived
event OFTReceived(bytes32 indexed guid, uint32 srcEid, address indexed toAddress, uint256 amountReceivedLD)
OFTSent
event OFTSent(bytes32 indexed guid, uint32 dstEid, address indexed fromAddress, uint256 amountSentLD, uint256 amountReceivedLD)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
PeerSet
event PeerSet(uint32 eid, bytes32 peer)
PermissionedBurn
event PermissionedBurn(address indexed from, uint256 amount)
PermissionedMint
event PermissionedMint(address indexed to, uint256 amount)
PreCrimeSet
event PreCrimeSet(address preCrimeAddress)
Transfer
event Transfer(address indexed from, address indexed to, uint256 value)
WithdrawalInitiated
event WithdrawalInitiated(address indexed user, uint224 amount, uint32 epoch)
WithdrawalsProcessed
event WithdrawalsProcessed(uint256 withdrawalAmount, uint256 balance, uint32 epoch)
Withdrawn
event Withdrawn(address indexed user, uint256 amount)
errors
AddressMustBeNonZero
error AddressMustBeNonZero()
AmountMustBeGreaterThanZero
error AmountMustBeGreaterThanZero()
AssetMustBeWETH
error AssetMustBeWETH()
CannotCompleteWithdrawalInSameEpoch
error CannotCompleteWithdrawalInSameEpoch()
ERC20InsufficientAllowance
error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed)
ERC20InsufficientBalance
error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed)
ERC20InvalidApprover
error ERC20InvalidApprover(address approver)
ERC20InvalidReceiver
error ERC20InvalidReceiver(address receiver)
ERC20InvalidSender
error ERC20InvalidSender(address sender)
ERC20InvalidSpender
error ERC20InvalidSpender(address spender)
IndependenceNotAllowed
error IndependenceNotAllowed()
InsufficientBalance
error InsufficientBalance()
InvalidDelegate
error InvalidDelegate()
InvalidEndpointCall
error InvalidEndpointCall()
InvalidLocalDecimals
error InvalidLocalDecimals()
InvalidOptions
error InvalidOptions(bytes options)
LzTokenUnavailable
error LzTokenUnavailable()
NoPeer
error NoPeer(uint32 eid)
NotEnoughNative
error NotEnoughNative(uint256 msgValue)
NotKeeper
error NotKeeper()
OnlyEndpoint
error OnlyEndpoint(address addr)
OnlyPeer
error OnlyPeer(uint32 eid, bytes32 sender)
OnlySelf
error OnlySelf()
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
SimulationResult
error SimulationResult(bytes result)
SlippageExceeded
error SlippageExceeded(uint256 amountLD, uint256 minAmountLD)
TransferFailed
error TransferFailed()
creation bytecode
0x60e060405273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc260c05234801562000028575f80fd5b5060405162004dfa38038062004dfa8339810160408190526200004b9162000381565b858585848484848484848181818133806200007f57604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b6200008a8162000250565b506001600160a01b038083166080528116620000b957604051632d618d8160e21b815260040160405180910390fd5b60805160405163ca5eb5e160e01b81526001600160a01b0383811660048301529091169063ca5eb5e1906024015f604051808303815f87803b158015620000fe575f80fd5b505af115801562000111573d5f803e3d5ffd5b5050505050505050620001296200029f60201b60201c565b60ff168360ff16101562000150576040516301e9714b60e41b815260040160405180910390fd5b6200015d6006846200045c565b6200016a90600a62000577565b60a0525060089150620001809050838262000618565b5060096200018f828262000618565b50506001600a555050506001600160a01b038a169250620001c6915050576040516309be64cd60e41b815260040160405180910390fd5b6001600160a01b038316620001ee576040516309be64cd60e41b815260040160405180910390fd5b5050600b8054600c80546001600160a01b039485166001600160a01b031990911617905560ff93909316600160c81b0261ffff60c01b196001600160c01b03199094169690921695909517600160a01b17919091161790925550620006e49050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600690565b80516001600160a01b0381168114620002bb575f80fd5b919050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112620002e4575f80fd5b81516001600160401b0380821115620003015762000301620002c0565b604051601f8301601f19908116603f011681019082821181831017156200032c576200032c620002c0565b816040528381526020925086602085880101111562000349575f80fd5b5f91505b838210156200036c57858201830151818301840152908201906200034d565b5f602085830101528094505050505092915050565b5f805f805f805f60e0888a03121562000398575f80fd5b620003a388620002a4565b60208901519097506001600160401b0380821115620003c0575f80fd5b620003ce8b838c01620002d4565b975060408a0151915080821115620003e4575f80fd5b50620003f38a828b01620002d4565b955050606088015160ff811681146200040a575f80fd5b93506200041a60808901620002a4565b92506200042a60a08901620002a4565b91506200043a60c08901620002a4565b905092959891949750929550565b634e487b7160e01b5f52601160045260245ffd5b60ff828116828216039081111562000478576200047862000448565b92915050565b600181815b80851115620004be57815f1904821115620004a257620004a262000448565b80851615620004b057918102915b93841c939080029062000483565b509250929050565b5f82620004d65750600162000478565b81620004e457505f62000478565b8160018114620004fd5760028114620005085762000528565b600191505062000478565b60ff8411156200051c576200051c62000448565b50506001821b62000478565b5060208310610133831016604e8410600b84101617156200054d575081810a62000478565b6200055983836200047e565b805f19048211156200056f576200056f62000448565b029392505050565b5f6200058760ff841683620004c6565b9392505050565b600181811c90821680620005a357607f821691505b602082108103620005c257634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156200061357805f5260205f20601f840160051c81016020851015620005ef5750805b601f840160051c820191505b8181101562000610575f8155600101620005fb565b50505b505050565b81516001600160401b03811115620006345762000634620002c0565b6200064c816200064584546200058e565b84620005c8565b602080601f83116001811462000682575f84156200066a5750858301515b5f19600386901b1c1916600185901b178555620006dc565b5f85815260208120601f198616915b82811015620006b25788860151825594840194600190910190840162000691565b5085821015620006d057878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b60805160a05160c051614674620007865f395f8181610a8f01528181611294015281816113400152818161171c015281816117d201528181611aef01528181611c3d0152611efa01525f818161097d01528181613072015281816130e4015261334d01525f818161074d01528181610f0d0152818161252b015281816127de01528181612c60015281816134420152818161354101526135f801526146745ff3fe6080604052600436106103e2575f3560e01c8063798002f0116101ff578063b98bd07011610113578063ca5eb5e1116100a8578063dd62ed3e11610078578063dd62ed3e14610c3a578063f2fde38b14610c7e578063fc0c546a146106d6578063fee047af14610c9d578063ff7bd03d14610cbd575f80fd5b8063ca5eb5e114610bca578063d045a0dc14610be9578063d0d552dd14610bfc578063d424388514610c1b575f80fd5b8063bd815db0116100e3578063bd815db014610b58578063be435c8c14610b6b578063c761ac8a14610b8a578063c7c7f5b314610ba9575f80fd5b8063b98bd07014610ad0578063ba71619f14610aef578063bb0b6a5314610b0e578063bc70b35414610b39575f80fd5b8063963efcaa11610194578063a8b90bc711610164578063a8b90bc714610a21578063a9059cbb14610a40578063aced166114610a5f578063ad5c464814610a7e578063b731ea0a14610ab1575f80fd5b8063963efcaa1461096c5780639649b0a21461099f5780639f68b964146109f0578063a3d1115814610a02575f80fd5b806382dea074116101cf57806382dea0741461090a578063857749b0146109295780638da5cb5b1461093c57806395d89b4114610958575f80fd5b8063798002f0146108745780637a1395aa146108935780637d25a05e146108b257806382413eac146108eb575f80fd5b8063313ce567116102f65780635e280f111161028b5780636fc1b31e1161025b5780636fc1b31e146107b657806370a08231146107d5578063715018a614610809578063748747e61461081d578063766718081461083c575f80fd5b80635e280f111461073c578063600f57ec1461076f5780636dbaf9ee146107845780636ded6fbe146107a3575f80fd5b806347e7ef24116102c657806347e7ef24146106b757806352ae2879146106d65780635535d461146106e85780635a0dfe4d14610707575f80fd5b8063313ce5671461062f5780633400288b1461064d57806338d52e0f1461066c5780633b6f743b1461068b575f80fd5b806317442b701161037757806325a760c21161034757806325a760c2146105985780632a228fc2146105ca5780632b032f3e146105de5780632cef206d146105fd5780632d2da8061461061c575f80fd5b806317442b701461053057806318160ddd146105515780631f5e13341461056557806323b872dd14610579575f80fd5b8063111ecdad116103b2578063111ecdad1461049757806313137d65146104ce578063134d4f25146104e3578063156a0d0f1461050a575f80fd5b806306fdde03146103ed578063095ea7b3146104175780630d35b415146104465780630f604a9314610474575f80fd5b366103e957005b5f80fd5b3480156103f8575f80fd5b50610401610cdc565b60405161040e91906136ad565b60405180910390f35b348015610422575f80fd5b506104366104313660046136d3565b610d6c565b604051901515815260200161040e565b348015610451575f80fd5b50610465610460366004613713565b610d85565b60405161040e93929190613744565b34801561047f575f80fd5b50610489600e5481565b60405190815260200161040e565b3480156104a2575f80fd5b506004546104b6906001600160a01b031681565b6040516001600160a01b03909116815260200161040e565b6104e16104dc36600461382f565b610f0b565b005b3480156104ee575f80fd5b506104f7600281565b60405161ffff909116815260200161040e565b348015610515575f80fd5b506040805162b9270b60e21b8152600160208201520161040e565b34801561053b575f80fd5b506040805160018152600260208201520161040e565b34801561055c575f80fd5b50600754610489565b348015610570575f80fd5b506104f7600181565b348015610584575f80fd5b506104366105933660046138c7565b610fcb565b3480156105a3575f80fd5b50600b546105b890600160c81b900460ff1681565b60405160ff909116815260200161040e565b3480156105d5575f80fd5b506104e1610ff0565b3480156105e9575f80fd5b506104e16105f83660046136d3565b61113d565b348015610608575f80fd5b506104e1610617366004613905565b6111b9565b6104e161062a366004613944565b61123d565b34801561063a575f80fd5b50600b54600160c81b900460ff166105b8565b348015610658575f80fd5b506104e1610667366004613977565b6113bb565b348015610677575f80fd5b50600b546104b6906001600160a01b031681565b348015610696575f80fd5b506106aa6106a536600461399e565b6113d1565b60405161040e91906139ec565b3480156106c2575f80fd5b506104e16106d13660046136d3565b611435565b3480156106e1575f80fd5b50306104b6565b3480156106f3575f80fd5b50610401610702366004613a14565b611509565b348015610712575f80fd5b50610436610721366004613977565b63ffffffff919091165f908152600160205260409020541490565b348015610747575f80fd5b506104b67f000000000000000000000000000000000000000000000000000000000000000081565b34801561077a575f80fd5b50610489600f5481565b34801561078f575f80fd5b506104e161079e366004613944565b6115ab565b6104e16107b1366004613944565b6116c4565b3480156107c1575f80fd5b506104e16107d0366004613944565b611829565b3480156107e0575f80fd5b506104896107ef366004613944565b6001600160a01b03165f9081526005602052604090205490565b348015610814575f80fd5b506104e1611886565b348015610828575f80fd5b506104e1610837366004613944565b611897565b348015610847575f80fd5b50600b5461085f90600160a01b900463ffffffff1681565b60405163ffffffff909116815260200161040e565b34801561087f575f80fd5b506104e161088e366004613a5b565b611914565b34801561089e575f80fd5b506104e16108ad366004613a74565b611aa5565b3480156108bd575f80fd5b506108d36108cc366004613977565b5f92915050565b6040516001600160401b03909116815260200161040e565b3480156108f6575f80fd5b50610436610905366004613a94565b611acd565b348015610915575f80fd5b506104e1610924366004613944565b611ae2565b348015610934575f80fd5b5060066105b8565b348015610947575f80fd5b505f546001600160a01b03166104b6565b348015610963575f80fd5b50610401611d19565b348015610977575f80fd5b506104897f000000000000000000000000000000000000000000000000000000000000000081565b3480156109aa575f80fd5b506109e26109b9366004613944565b600d6020525f90815260409020546001600160e01b03811690600160e01b900463ffffffff1682565b60405161040e929190613af6565b3480156109fb575f80fd5b505f610436565b348015610a0d575f80fd5b506104e1610a1c3660046136d3565b611d28565b348015610a2c575f80fd5b506104e1610a3b366004613b15565b611dfd565b348015610a4b575f80fd5b50610436610a5a3660046136d3565b611e52565b348015610a6a575f80fd5b50600c546104b6906001600160a01b031681565b348015610a89575f80fd5b506104b67f000000000000000000000000000000000000000000000000000000000000000081565b348015610abc575f80fd5b506002546104b6906001600160a01b031681565b348015610adb575f80fd5b506104e1610aea366004613b70565b611e5f565b348015610afa575f80fd5b506104e1610b093660046136d3565b611e79565b348015610b19575f80fd5b50610489610b28366004613bae565b60016020525f908152604090205481565b348015610b44575f80fd5b50610401610b53366004613bc7565b611fc9565b6104e1610b66366004613b70565b61216a565b348015610b76575f80fd5b506104e1610b85366004613c23565b6122ea565b348015610b95575f80fd5b506104e1610ba43660046136d3565b612461565b610bbc610bb7366004613c4d565b6124d1565b60405161040e929190613caa565b348015610bd5575f80fd5b506104e1610be4366004613944565b612504565b6104e1610bf736600461382f565b612585565b348015610c07575f80fd5b506104e1610c16366004613944565b6125b4565b348015610c26575f80fd5b506104e1610c35366004613944565b612605565b348015610c45575f80fd5b50610489610c54366004613cfb565b6001600160a01b039182165f90815260066020908152604080832093909416825291909152205490565b348015610c89575f80fd5b506104e1610c98366004613944565b61265b565b348015610ca8575f80fd5b50600b5461043690600160c01b900460ff1681565b348015610cc8575f80fd5b50610436610cd7366004613d27565b612695565b606060088054610ceb90613d41565b80601f0160208091040260200160405190810160405280929190818152602001828054610d1790613d41565b8015610d625780601f10610d3957610100808354040283529160200191610d62565b820191905f5260205f20905b815481529060010190602001808311610d4557829003601f168201915b5050505050905090565b5f33610d798185856126c9565b60019150505b92915050565b604080518082019091525f80825260208201526060610db560405180604001604052805f81526020015f81525090565b5f80306001600160a01b031663fc0c546a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610df3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e179190613d73565b6001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e52573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e769190613d8e565b604080518082018252848152602080820184905282515f80825291810190935290975091925090610ec9565b604080518082019091525f815260606020820152815260200190600190039081610ea25790505b5093505f80610eed604089013560608a0135610ee860208c018c613bae565b6126d6565b60408051808201909152918252602082015296989597505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163314610f5b576040516391ac5e4f60e01b81523360048201526024015b60405180910390fd5b60208701803590610f7590610f70908a613bae565b612711565b14610fb357610f876020880188613bae565b60405163309afaf360e21b815263ffffffff909116600482015260208801356024820152604401610f52565b610fc28787878787878761274c565b50505050505050565b5f33610fd88582856128aa565b610fe3858585612926565b60019150505b9392505050565b610ff8612983565b6110006129af565b600f54600e54111561104a576110456110205f546001600160a01b031690565b30600f54600e546110319190613dcd565b600b546001600160a01b03169291906129d9565b61108d565b600f54600e54101561108d5761108d61106a5f546001600160a01b031690565b600e54600f5461107a9190613dcd565b600b546001600160a01b03169190612a40565b600e54600f54600b54604080519384526020840192909252600160a01b900463ffffffff16908201527f28f43e09fc3816362a33b5a6e894df1b4208d2a6e5837169939cf0434af026559060600160405180910390a16001600b60148282829054906101000a900463ffffffff166111059190613de0565b92506101000a81548163ffffffff021916908363ffffffff1602179055505f600e819055505f600f8190555061113b6001600a55565b565b600c546001600160a01b0316331461116857604051631ea2564f60e31b815260040160405180910390fd5b6111728282612a71565b816001600160a01b03167f7333c4d498e1386177054f52d50ca759ef946eff3784f7f021387fd690508b97826040516111ad91815260200190565b60405180910390a25050565b6111c1612983565b815f036111e157604051635e85ae7360e01b815260040160405180910390fd5b826001600160a01b03167fff67663330fcde57965a89e0eed2698c4f260f4f4dfa83e4d8a1c1db935fa2358360405161121c91815260200190565b60405180910390a26112386001600160a01b0382168484612a40565b505050565b6112456129af565b600b54600160c01b900460ff1661126f5760405163043fb77f60e11b815260040160405180910390fd5b345f0361128f57604051635e85ae7360e01b815260040160405180910390fd5b600b547f00000000000000000000000000000000000000000000000000000000000000006001600160a01b039081169116146112de5760405163118ba16960e31b815260040160405180910390fd5b6112e88134612aa5565b34600f5f8282546112f99190613e04565b90915550506040513481526001600160a01b0382169033907f5548c837ab068cf56a2c2479df0882a4922fd203edb7517321831d95078c5f629060200160405180910390a37f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004015f604051808303818588803b158015611397575f80fd5b505af11580156113a9573d5f803e3d5ffd5b50505050506113b86001600a55565b50565b6113c3612983565b6113cd8282612ad9565b5050565b604080518082019091525f80825260208201525f6113ff60408501356060860135610ee86020880188613bae565b9150505f8061140e8684612b2d565b909250905061142b6114236020880188613bae565b838388612c4b565b9695505050505050565b61143d6129af565b600b54600160c01b900460ff166114675760405163043fb77f60e11b815260040160405180910390fd5b805f0361148757604051635e85ae7360e01b815260040160405180910390fd5b6114918282612aa5565b80600f5f8282546114a29190613e04565b90915550506040518181526001600160a01b0383169033907f5548c837ab068cf56a2c2479df0882a4922fd203edb7517321831d95078c5f629060200160405180910390a3600b546114ff906001600160a01b03163330846129d9565b6113cd6001600a55565b600360209081525f92835260408084209091529082529020805461152c90613d41565b80601f016020809104026020016040519081016040528092919081815260200182805461155890613d41565b80156115a35780601f1061157a576101008083540402835291602001916115a3565b820191905f5260205f20905b81548152906001019060200180831161158657829003601f168201915b505050505081565b6115b36129af565b335f908152600d602090815260408083208151808301909252546001600160e01b038116808352600160e01b90910463ffffffff1692820192909252910361160e57604051635e85ae7360e01b815260040160405180910390fd5b600b54602082015163ffffffff600160a01b90920482169116106116455760405163258e84af60e11b815260040160405180910390fd5b335f908152600d6020908152604080832092909255825182516001600160e01b0390911680825292516001600160a01b038616927f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5928290030190a2600b546116b8906001600160a01b03168483612a40565b50506113b86001600a55565b6116cc6129af565b600c546001600160a01b031633146116f757604051631ea2564f60e31b815260040160405180910390fd5b345f0361171757604051635e85ae7360e01b815260040160405180910390fd5b600b547f00000000000000000000000000000000000000000000000000000000000000006001600160a01b039081169116146117665760405163118ba16960e31b815260040160405180910390fd5b600c5461177c906001600160a01b031634612aa5565b34600f5f82825461178d9190613e04565b90915550506040513481526001600160a01b038216907f9f27a22fea017c09821db9e9e1700a69ddd6121050f29a783f8ca5f6876865f39060200160405180910390a27f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004015f604051808303818588803b158015611397575f80fd5b611831612983565b600480546001600160a01b0319166001600160a01b0383169081179091556040519081527ff0be4f1e87349231d80c36b33f9e8639658eeaf474014dee15a3e6a4d4414197906020015b60405180910390a150565b61188e612983565b61113b5f612d29565b61189f612983565b6001600160a01b0381166118c6576040516309be64cd60e41b815260040160405180910390fd5b600c80546001600160a01b0319166001600160a01b0383169081179091556040519081527fdc3dba1d64dd67c0dc8b12621edd0c6ca4303a9073c3a8fcac38115e73d67b6b9060200161187b565b61191c6129af565b600b54600160c01b900460ff166119465760405163043fb77f60e11b815260040160405180910390fd5b806001600160e01b03165f0361196f57604051635e85ae7360e01b815260040160405180910390fd5b335f908152600560205260409020546001600160e01b03821611156119a757604051631e9acf1760e31b815260040160405180910390fd5b6119ba33826001600160e01b0316612a71565b335f908152600d6020526040908190205481518083019092526001600160e01b031690806119e88484613e17565b6001600160e01b039081168252600b5463ffffffff600160a01b9091048116602093840152335f908152600d84526040812085519590940151909116600160e01b0293821693909317909155600e8054918516929091611a49908490613e04565b9091555050600b5460405133917f69214d191a9e2c11156aedc11f80105e29875ef3eacdde4b6e9f08bfe162dfdb91611a92918691600160a01b90910463ffffffff1690613af6565b60405180910390a2506113b86001600a55565b611aad612983565b600b805460ff909216600160c81b0260ff60c81b19909216919091179055565b6001600160a01b03811630145b949350505050565b611aea6129af565b600b547f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03908116911614611b395760405163118ba16960e31b815260040160405180910390fd5b335f908152600d602090815260408083208151808301909252546001600160e01b038116808352600160e01b90910463ffffffff16928201929092529103611b9457604051635e85ae7360e01b815260040160405180910390fd5b600b54602082015163ffffffff600160a01b9092048216911610611bcb5760405163258e84af60e11b815260040160405180910390fd5b335f908152600d6020908152604080832092909255825182516001600160e01b0390911680825292516001600160a01b038616927f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5928290030190a2604051632e1a7d4d60e01b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d906024015f604051808303815f87803b158015611c86575f80fd5b505af1158015611c98573d5f803e3d5ffd5b505050505f836001600160a01b0316826040515f6040518083038185875af1925050503d805f8114611ce5576040519150601f19603f3d011682016040523d82523d5f602084013e611cea565b606091505b5050905080611d0c576040516312171d8360e31b815260040160405180910390fd5b5050506113b86001600a55565b606060098054610ceb90613d41565b611d306129af565b600c546001600160a01b03163314611d5b57604051631ea2564f60e31b815260040160405180910390fd5b805f03611d7b57604051635e85ae7360e01b815260040160405180910390fd5b600c54611d91906001600160a01b031682612aa5565b80600f5f828254611da29190613e04565b90915550506040518181526001600160a01b038316907f9f27a22fea017c09821db9e9e1700a69ddd6121050f29a783f8ca5f6876865f39060200160405180910390a2600b546114ff906001600160a01b03168330846129d9565b611e05612983565b600b8054821515600160c01b0260ff60c01b199091161790556040517f96adcf1e48ac546c8fe3676c903cc458907e1e045d4c27130254a0bf7d9366ce9061187b90831515815260200190565b5f33610d79818585612926565b611e67612983565b6113cd611e748284613ed7565b612d78565b611e81612983565b805f03611ea157604051635e85ae7360e01b815260040160405180910390fd5b816001600160a01b03167fff67663330fcde57965a89e0eed2698c4f260f4f4dfa83e4d8a1c1db935fa23582604051611edc91815260200190565b60405180910390a2604051632e1a7d4d60e01b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d906024015f604051808303815f87803b158015611f43575f80fd5b505af1158015611f55573d5f803e3d5ffd5b505050505f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114611fa2576040519150601f19603f3d011682016040523d82523d5f602084013e611fa7565b606091505b5050905080611238576040516312171d8360e31b815260040160405180910390fd5b63ffffffff84165f90815260036020908152604080832061ffff87168452909152812080546060929190611ffc90613d41565b80601f016020809104026020016040519081016040528092919081815260200182805461202890613d41565b80156120735780601f1061204a57610100808354040283529160200191612073565b820191905f5260205f20905b81548152906001019060200180831161205657829003601f168201915b5050505050905080515f036120c15783838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250929450611ada9350505050565b5f8390036120d0579050611ada565b6002831061214d5761211684848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612e7992505050565b806121248460028188613fdf565b60405160200161213693929190614006565b604051602081830303815290604052915050611ada565b8383604051639a6d49cd60e01b8152600401610f52929190614054565b5f5b8181101561226d573683838381811061218757612187614067565b9050602002810190612199919061407b565b90506121cb6121ab6020830183613bae565b602083013563ffffffff919091165f908152600160205260409020541490565b6121d55750612265565b3063d045a0dc60c08301358360a08101356121f461010083018361409a565b612205610100890160e08a01613944565b6122136101208a018a61409a565b6040518963ffffffff1660e01b815260040161223597969594939291906140f0565b5f604051808303818588803b15801561224c575f80fd5b505af115801561225e573d5f803e3d5ffd5b5050505050505b60010161216c565b50336001600160a01b0316638e9e70996040518163ffffffff1660e01b81526004015f60405180830381865afa1580156122a9573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526122d09190810190614175565b604051638351eea760e01b8152600401610f5291906136ad565b6122f26129af565b600c546001600160a01b0316331461231d57604051631ea2564f60e31b815260040160405180910390fd5b806001600160e01b03165f0361234657604051635e85ae7360e01b815260040160405180910390fd5b61235930826001600160e01b0316612a71565b6001600160a01b0382165f908152600d6020526040908190205481518083019092526001600160e01b031690806123908484613e17565b6001600160e01b039081168252600b5463ffffffff600160a01b90910481166020938401526001600160a01b0387165f908152600d84526040812085519590940151909116600160e01b0293821693909317909155600e80549185169290916123fa908490613e04565b92505081905550826001600160a01b03167f69214d191a9e2c11156aedc11f80105e29875ef3eacdde4b6e9f08bfe162dfdb83600b60149054906101000a900463ffffffff1660405161244e929190613af6565b60405180910390a2506113cd6001600a55565b600c546001600160a01b0316331461248c57604051631ea2564f60e31b815260040160405180910390fd5b6124968282612aa5565b816001600160a01b03167fffb73e7f272503f7f95a05a3a748beaef6216eb560391e2f075d54a5d5b57456826040516111ad91815260200190565b6124d961361d565b604080518082019091525f80825260208201526124f7858585612ea5565b915091505b935093915050565b61250c612983565b60405163ca5eb5e160e01b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063ca5eb5e1906024015f604051808303815f87803b15801561256c575f80fd5b505af115801561257e573d5f803e3d5ffd5b5050505050565b3330146125a55760405163029a949d60e31b815260040160405180910390fd5b610fc287878787878787610fb3565b6125bc612983565b6001600160a01b0381166125e3576040516309be64cd60e41b815260040160405180910390fd5b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b61260d612983565b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527fd48d879cef83a1c0bdda516f27b13ddb1b3f8bbac1c9e1511bb2a659c24277609060200161187b565b612663612983565b6001600160a01b03811661268c57604051631e4fbdf760e01b81525f6004820152602401610f52565b6113b881612d29565b5f6020820180359060019083906126ac9086613bae565b63ffffffff16815260208101919091526040015f20541492915050565b6112388383836001612f9d565b5f806126e18561306f565b9150819050838110156124fc576040516371c4efed60e01b81526004810182905260248101859052604401610f52565b63ffffffff81165f9081526001602052604081205480610d7f5760405163f6ff4fb760e01b815263ffffffff84166004820152602401610f52565b5f61275d61275a87876130a5565b90565b90505f612788826127766127718a8a6130bc565b6130de565b61278360208d018d613bae565b613112565b90506028861115612848575f6127c46127a760608c0160408d016141dd565b6127b460208d018d613bae565b846127bf8c8c613139565b613183565b604051633e5ac80960e11b81529091506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690637cb59012906128199086908d905f9087906004016141f8565b5f604051808303815f87803b158015612830575f80fd5b505af1158015612842573d5f803e3d5ffd5b50505050505b6001600160a01b038216887fefed6d3500546b29533b128a29e3a94d70788727f0507505ac12eaf2e578fd9c61288160208d018d613bae565b6040805163ffffffff9092168252602082018690520160405180910390a3505050505050505050565b6001600160a01b038381165f908152600660209081526040808320938616835292905220545f19811015612920578181101561291257604051637dc7a0d960e11b81526001600160a01b03841660048201526024810182905260448101839052606401610f52565b61292084848484035f612f9d565b50505050565b6001600160a01b03831661294f57604051634b637e8f60e11b81525f6004820152602401610f52565b6001600160a01b0382166129785760405163ec442f0560e01b81525f6004820152602401610f52565b6112388383836131b5565b5f546001600160a01b0316331461113b5760405163118cdaa760e01b8152336004820152602401610f52565b6002600a54036129d257604051633ee5aeb560e01b815260040160405180910390fd5b6002600a55565b6040516001600160a01b0384811660248301528381166044830152606482018390526129209186918216906323b872dd906084015b604051602081830303815290604052915060e01b6020820180516001600160e01b0383818316178352505050506132db565b6040516001600160a01b0383811660248301526044820183905261123891859182169063a9059cbb90606401612a0e565b6001600160a01b038216612a9a57604051634b637e8f60e11b81525f6004820152602401610f52565b6113cd825f836131b5565b6001600160a01b038216612ace5760405163ec442f0560e01b81525f6004820152602401610f52565b6113cd5f83836131b5565b63ffffffff82165f81815260016020908152604091829020849055815192835282018390527f238399d427b947898edb290f5ff0f9109849b1c3ba196a42e35f00c50a54b98b910160405180910390a15050565b6060805f612b888560200135612b4286613347565b612b4f60a089018961409a565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061337292505050565b90935090505f81612b9a576001612b9d565b60025b9050612bbd612baf6020880188613bae565b82610b5360808a018a61409a565b6004549093506001600160a01b03168015612c415760405163043a78eb60e01b81526001600160a01b0382169063043a78eb90612c009088908890600401614228565b602060405180830381865afa158015612c1b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c3f919061424c565b505b5050509250929050565b604080518082019091525f80825260208201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ddc28c586040518060a001604052808863ffffffff168152602001612cad89612711565b8152602001878152602001868152602001851515815250306040518363ffffffff1660e01b8152600401612ce2929190614267565b6040805180830381865afa158015612cfc573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612d20919061430d565b95945050505050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f5b8151811015612e4957612da9828281518110612d9857612d98614067565b602002602001015160400151612e79565b818181518110612dbb57612dbb614067565b60200260200101516040015160035f848481518110612ddc57612ddc614067565b60200260200101515f015163ffffffff1663ffffffff1681526020019081526020015f205f848481518110612e1357612e13614067565b60200260200101516020015161ffff1661ffff1681526020019081526020015f209081612e40919061436b565b50600101612d7a565b507fbe4864a8e820971c0247f5992e2da559595f7bf076a21cb5928d443d2a13b6748160405161187b919061442a565b600281015161ffff81166003146113cd5781604051639a6d49cd60e01b8152600401610f5291906136ad565b612ead61361d565b604080518082019091525f80825260208201525f80612ee233604089013560608a0135612edd60208c018c613bae565b6133ec565b915091505f80612ef28984612b2d565b9092509050612f1e612f0760208b018b613bae565b8383612f18368d90038d018d6144b3565b8b613411565b60408051808201909152858152602080820186905282519298509096503391907f85496b760a4b7f8d66384b9df21b381f5d1b1e79f229a47aaf4c232edc2fe59a90612f6c908d018d613bae565b6040805163ffffffff909216825260208201899052810187905260600160405180910390a350505050935093915050565b6001600160a01b038416612fc65760405163e602df0560e01b81525f6004820152602401610f52565b6001600160a01b038316612fef57604051634a1406b160e11b81525f6004820152602401610f52565b6001600160a01b038085165f908152600660209081526040808320938716835292905220829055801561292057826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161306191815260200190565b60405180910390a350505050565b5f7f000000000000000000000000000000000000000000000000000000000000000061309b81846144e3565b610d7f9190614502565b5f6130b36020828486613fdf565b610fe991614519565b5f6130cb602860208486613fdf565b6130d491614536565b60c01c9392505050565b5f610d7f7f00000000000000000000000000000000000000000000000000000000000000006001600160401b038416614502565b5f6001600160a01b0384166131275761dead93505b6131318484612aa5565b509092915050565b60606131488260288186613fdf565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250929695505050505050565b60608484848460405160200161319c9493929190614566565b6040516020818303038152906040529050949350505050565b6001600160a01b0383166131df578060075f8282546131d49190613e04565b9091555061324f9050565b6001600160a01b0383165f90815260056020526040902054818110156132315760405163391434e360e21b81526001600160a01b03851660048201526024810182905260448101839052606401610f52565b6001600160a01b0384165f9081526005602052604090209082900390555b6001600160a01b03821661326b57600780548290039055613289565b6001600160a01b0382165f9081526005602052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516132ce91815260200190565b60405180910390a3505050565b5f8060205f8451602086015f885af1806132fa576040513d5f823e3d81fd5b50505f513d9150811561331157806001141561331e565b6001600160a01b0384163b155b1561292057604051635274afe760e01b81526001600160a01b0385166004820152602401610f52565b5f610d7f7f0000000000000000000000000000000000000000000000000000000000000000836144e3565b80516060901515806133bb5784846040516020016133a792919091825260c01b6001600160c01b031916602082015260280190565b6040516020818303038152906040526133e2565b848433856040516020016133d294939291906145b4565b6040516020818303038152906040525b9150935093915050565b5f806133f98585856126d6565b90925090506134088683612a71565b94509492505050565b61341961361d565b5f613426845f0151613517565b60208501519091501561344057613440846020015161353e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632637a450826040518060a001604052808b63ffffffff1681526020016134908c612711565b81526020018a81526020018981526020015f8960200151111515815250866040518463ffffffff1660e01b81526004016134cb929190614267565b60806040518083038185885af11580156134e7573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061350c91906145f6565b979650505050505050565b5f81341461353a576040516304fb820960e51b8152346004820152602401610f52565b5090565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e4fe1d946040518163ffffffff1660e01b8152600401602060405180830381865afa15801561359b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906135bf9190613d73565b90506001600160a01b0381166135e8576040516329b99a9560e11b815260040160405180910390fd5b6113cd6001600160a01b038216337f0000000000000000000000000000000000000000000000000000000000000000856129d9565b60405180606001604052805f80191681526020015f6001600160401b0316815260200161365b60405180604001604052805f81526020015f81525090565b905290565b5f5b8381101561367a578181015183820152602001613662565b50505f910152565b5f8151808452613699816020860160208601613660565b601f01601f19169290920160200192915050565b602081525f610fe96020830184613682565b6001600160a01b03811681146113b8575f80fd5b5f80604083850312156136e4575f80fd5b82356136ef816136bf565b946020939093013593505050565b5f60e0828403121561370d575f80fd5b50919050565b5f60208284031215613723575f80fd5b81356001600160401b03811115613738575f80fd5b611ada848285016136fd565b83518152602080850151908201525f60a08201604060a0604085015281865180845260c08601915060c08160051b870101935060208089015f5b838110156137bd5788870360bf190185528151805188528301518388018790526137aa87890182613682565b975050938201939082019060010161377e565b50508751606088015250505060208501516080850152509050611ada565b5f6060828403121561370d575f80fd5b5f8083601f8401126137fb575f80fd5b5081356001600160401b03811115613811575f80fd5b602083019150836020828501011115613828575f80fd5b9250929050565b5f805f805f805f60e0888a031215613845575f80fd5b61384f89896137db565b96506060880135955060808801356001600160401b0380821115613871575f80fd5b61387d8b838c016137eb565b909750955060a08a01359150613892826136bf565b90935060c089013590808211156138a7575f80fd5b506138b48a828b016137eb565b989b979a50959850939692959293505050565b5f805f606084860312156138d9575f80fd5b83356138e4816136bf565b925060208401356138f4816136bf565b929592945050506040919091013590565b5f805f60608486031215613917575f80fd5b8335613922816136bf565b9250602084013591506040840135613939816136bf565b809150509250925092565b5f60208284031215613954575f80fd5b8135610fe9816136bf565b803563ffffffff81168114613972575f80fd5b919050565b5f8060408385031215613988575f80fd5b6136ef8361395f565b80151581146113b8575f80fd5b5f80604083850312156139af575f80fd5b82356001600160401b038111156139c4575f80fd5b6139d0858286016136fd565b92505060208301356139e181613991565b809150509250929050565b815181526020808301519082015260408101610d7f565b803561ffff81168114613972575f80fd5b5f8060408385031215613a25575f80fd5b613a2e8361395f565b9150613a3c60208401613a03565b90509250929050565b80356001600160e01b0381168114613972575f80fd5b5f60208284031215613a6b575f80fd5b610fe982613a45565b5f60208284031215613a84575f80fd5b813560ff81168114610fe9575f80fd5b5f805f8060a08587031215613aa7575f80fd5b613ab186866137db565b935060608501356001600160401b03811115613acb575f80fd5b613ad7878288016137eb565b9094509250506080850135613aeb816136bf565b939692955090935050565b6001600160e01b0392909216825263ffffffff16602082015260400190565b5f60208284031215613b25575f80fd5b8135610fe981613991565b5f8083601f840112613b40575f80fd5b5081356001600160401b03811115613b56575f80fd5b6020830191508360208260051b8501011115613828575f80fd5b5f8060208385031215613b81575f80fd5b82356001600160401b03811115613b96575f80fd5b613ba285828601613b30565b90969095509350505050565b5f60208284031215613bbe575f80fd5b610fe98261395f565b5f805f8060608587031215613bda575f80fd5b613be38561395f565b9350613bf160208601613a03565b925060408501356001600160401b03811115613c0b575f80fd5b613c17878288016137eb565b95989497509550505050565b5f8060408385031215613c34575f80fd5b8235613c3f816136bf565b9150613a3c60208401613a45565b5f805f8385036080811215613c60575f80fd5b84356001600160401b03811115613c75575f80fd5b613c81878288016136fd565b9450506040601f1982011215613c95575f80fd5b506020840191506060840135613939816136bf565b5f60c082019050835182526001600160401b0360208501511660208301526040840151613ce4604084018280518252602090810151910152565b5082516080830152602083015160a0830152610fe9565b5f8060408385031215613d0c575f80fd5b8235613d17816136bf565b915060208301356139e1816136bf565b5f60608284031215613d37575f80fd5b610fe983836137db565b600181811c90821680613d5557607f821691505b60208210810361370d57634e487b7160e01b5f52602260045260245ffd5b5f60208284031215613d83575f80fd5b8151610fe9816136bf565b5f60208284031215613d9e575f80fd5b5051919050565b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b81810381811115610d7f57610d7f613db9565b63ffffffff818116838216019080821115613dfd57613dfd613db9565b5092915050565b80820180821115610d7f57610d7f613db9565b6001600160e01b03818116838216019080821115613dfd57613dfd613db9565b604051606081016001600160401b0381118282101715613e5957613e59613da5565b60405290565b604080519081016001600160401b0381118282101715613e5957613e59613da5565b604051601f8201601f191681016001600160401b0381118282101715613ea957613ea9613da5565b604052919050565b5f6001600160401b03821115613ec957613ec9613da5565b50601f01601f191660200190565b5f6001600160401b0380841115613ef057613ef0613da5565b8360051b6020613f01818301613e81565b868152918501918181019036841115613f18575f80fd5b865b84811015613fd357803586811115613f30575f80fd5b88016060368290031215613f42575f80fd5b613f4a613e37565b613f538261395f565b8152613f60868301613a03565b8682015260408083013589811115613f76575f80fd5b929092019136601f840112613f89575f80fd5b8235613f9c613f9782613eb1565b613e81565b8181523689838701011115613faf575f80fd5b818986018a8301375f91810189019190915290820152845250918301918301613f1a565b50979650505050505050565b5f8085851115613fed575f80fd5b83861115613ff9575f80fd5b5050820193919092039150565b5f8451614017818460208901613660565b8201838582375f930192835250909392505050565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b602081525f611ada60208301848661402c565b634e487b7160e01b5f52603260045260245ffd5b5f823561013e19833603018112614090575f80fd5b9190910192915050565b5f808335601e198436030181126140af575f80fd5b8301803591506001600160401b038211156140c8575f80fd5b602001915036819003821315613828575f80fd5b6001600160401b03811681146113b8575f80fd5b63ffffffff6140fe8961395f565b168152602088013560208201525f604089013561411a816140dc565b6001600160401b03811660408401525087606083015260e0608083015261414560e08301878961402c565b6001600160a01b03861660a084015282810360c084015261416781858761402c565b9a9950505050505050505050565b5f60208284031215614185575f80fd5b81516001600160401b0381111561419a575f80fd5b8201601f810184136141aa575f80fd5b80516141b8613f9782613eb1565b8181528560208385010111156141cc575f80fd5b612d20826020830160208601613660565b5f602082840312156141ed575f80fd5b8135610fe9816140dc565b60018060a01b038516815283602082015261ffff83166040820152608060608201525f61142b6080830184613682565b604081525f61423a6040830185613682565b8281036020840152612d208185613682565b5f6020828403121561425c575f80fd5b8151610fe981613991565b6040815263ffffffff8351166040820152602083015160608201525f604084015160a0608084015261429c60e0840182613682565b90506060850151603f198483030160a08501526142b98282613682565b60809690960151151560c08501525050506001600160a01b039190911660209091015290565b5f604082840312156142ef575f80fd5b6142f7613e5f565b9050815181526020820151602082015292915050565b5f6040828403121561431d575f80fd5b610fe983836142df565b601f82111561123857805f5260205f20601f840160051c8101602085101561434c5750805b601f840160051c820191505b8181101561257e575f8155600101614358565b81516001600160401b0381111561438457614384613da5565b614398816143928454613d41565b84614327565b602080601f8311600181146143cb575f84156143b45750858301515b5f19600386901b1c1916600185901b178555614422565b5f85815260208120601f198616915b828110156143f9578886015182559484019460019091019084016143da565b508582101561441657878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b5f60208083018184528085518083526040925060408601915060408160051b8701018488015f5b838110156144a557888303603f190185528151805163ffffffff1684528781015161ffff1688850152860151606087850181905261449181860183613682565b968901969450505090860190600101614451565b509098975050505050505050565b5f604082840312156144c3575f80fd5b6144cb613e5f565b82358152602083013560208201528091505092915050565b5f826144fd57634e487b7160e01b5f52601260045260245ffd5b500490565b8082028115828204841417610d7f57610d7f613db9565b80356020831015610d7f575f19602084900360031b1b1692915050565b6001600160c01b0319813581811691600885101561455e5780818660080360031b1b83161692505b505092915050565b6001600160401b0360c01b8560c01b16815263ffffffff60e01b8460e01b16600882015282600c8201525f82516145a481602c850160208701613660565b91909101602c0195945050505050565b8481526001600160401b0360c01b8460c01b1660208201528260288201525f82516145e6816048850160208701613660565b9190910160480195945050505050565b5f60808284031215614606575f80fd5b61460e613e37565b825181526020830151614620816140dc565b602082015261463284604085016142df565b6040820152939250505056fea26469706673582212202f6ffbae331ccdb453fb896cc4dd31ed3e4e96de762b0d41139938db7a29063a64736f6c634300081600330000000000000000000000001abaea1f7c830bd89acc67ec4af516284b1bc33c00000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000000600000000000000000000000070e1b787a5d677a5906acccf0b4f387b8bb1b5c30000000000000000000000001a44076050125825900e736c501f859c50fe728c00000000000000000000000070e1b787a5d677a5906acccf0b4f387b8bb1b5c3000000000000000000000000000000000000000000000000000000000000000a53747265616d2045555200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000973747265616d4555520000000000000000000000000000000000000000000000