0 txs
0 calls
constructor
constructor(address _token, address _lzEndpoint, address _owner)
functions
allowInitializePath
viewfunction allowInitializePath(tuple origin) view returns (bool)
approvalRequired
purefunction approvalRequired() pure returns (bool)
combineOptions
viewfunction combineOptions(uint32 _eid, uint16 _msgType, bytes _extraOptions) view returns (bytes)
decimalConversionRate
viewfunction decimalConversionRate() 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)
msgInspector
viewfunction msgInspector() view returns (address)
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)
token
viewfunction token() view returns (address)
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
renounceOwnership
nonpayablefunction renounceOwnership()
send
payablefunction send(tuple _sendParam, tuple _fee, address _refundAddress) payable returns (tuple msgReceipt, tuple oftReceipt)
setDelegate
nonpayablefunction setDelegate(address _delegate)
setEnforcedOptions
nonpayablefunction setEnforcedOptions(tuple[] _enforcedOptions)
setMsgInspector
nonpayablefunction setMsgInspector(address _msgInspector)
setPeer
nonpayablefunction setPeer(uint32 _eid, bytes32 _peer)
setPreCrime
nonpayablefunction setPreCrime(address _preCrime)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
events
EnforcedOptionSet
event EnforcedOptionSet((uint32 eid, uint16 msgType, bytes options)[] _enforcedOptions)
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)
PreCrimeSet
event PreCrimeSet(address preCrimeAddress)
errors
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)
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)
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
SimulationResult
error SimulationResult(bytes result)
SlippageExceeded
error SlippageExceeded(uint256 amountLD, uint256 minAmountLD)
creation bytecode
0x60e060405234801562000010575f80fd5b5060405162004c0f38038062004c0f833981810160405281019062000036919062000432565b8282828273ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000083573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620000a99190620004c6565b8282818181818a5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160362000123575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016200011a919062000507565b60405180910390fd5b62000134816200030460201b60201c565b508173ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603620001cf576040517fb586360400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60805173ffffffffffffffffffffffffffffffffffffffff1663ca5eb5e1826040518263ffffffff1660e01b81526004016200020c919062000507565b5f604051808303815f87803b15801562000224575f80fd5b505af115801562000237573d5f803e3d5ffd5b50505050505050506200024f620003c560201b60201c565b60ff168360ff1610156200028f576040517f1e9714b000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6200029f620003c560201b60201c565b83620002ac91906200054f565b600a620002ba9190620006e3565b60a081815250505050508273ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff168152505050505050505062000733565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f6006905090565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f620003fc82620003d1565b9050919050565b6200040e81620003f0565b811462000419575f80fd5b50565b5f815190506200042c8162000403565b92915050565b5f805f606084860312156200044c576200044b620003cd565b5b5f6200045b868287016200041c565b93505060206200046e868287016200041c565b925050604062000481868287016200041c565b9150509250925092565b5f60ff82169050919050565b620004a2816200048b565b8114620004ad575f80fd5b50565b5f81519050620004c08162000497565b92915050565b5f60208284031215620004de57620004dd620003cd565b5b5f620004ed84828501620004b0565b91505092915050565b6200050181620003f0565b82525050565b5f6020820190506200051c5f830184620004f6565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6200055b826200048b565b915062000568836200048b565b9250828203905060ff81111562000584576200058362000522565b5b92915050565b5f8160011c9050919050565b5f808291508390505b6001851115620005e757808604811115620005bf57620005be62000522565b5b6001851615620005cf5780820291505b8081029050620005df856200058a565b94506200059f565b94509492505050565b5f82620006015760019050620006d3565b8162000610575f9050620006d3565b816001811462000629576002811462000634576200066a565b6001915050620006d3565b60ff84111562000649576200064862000522565b5b8360020a91508482111562000663576200066262000522565b5b50620006d3565b5060208310610133831016604e8410600b8410161715620006a45782820a9050838111156200069e576200069d62000522565b5b620006d3565b620006b3848484600162000596565b92509050818404811115620006cd57620006cc62000522565b5b81810290505b9392505050565b5f819050919050565b5f620006ef82620006da565b9150620006fc836200048b565b92506200072b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484620005f0565b905092915050565b60805160a05160c051614456620007b95f395f818161133201528181611d9c0152611f5701525f8181610ca101528181611c9401528181611cb501528181611d590152611e9b01525f81816108d601528181610b7801528181611125015281816114f40152818161186e01528181611fd80152818161222d015261232501526144565ff3fe6080604052600436106101ed575f3560e01c806382413eac1161010c578063bc70b3541161009f578063d045a0dc1161006e578063d045a0dc146106ec578063d424388514610708578063f2fde38b14610730578063fc0c546a14610758578063ff7bd03d14610782576101ed565b8063bc70b3541461063b578063bd815db014610677578063c7c7f5b314610693578063ca5eb5e1146106c4576101ed565b80639f68b964116100db5780639f68b96414610583578063b731ea0a146105ad578063b98bd070146105d7578063bb0b6a53146105ff576101ed565b806382413eac146104c9578063857749b0146105055780638da5cb5b1461052f578063963efcaa14610559576101ed565b80633b6f743b116101845780635e280f11116101535780635e280f11146104255780636fc1b31e1461044f578063715018a6146104775780637d25a05e1461048d576101ed565b80633b6f743b1461034757806352ae2879146103835780635535d461146103ad5780635a0dfe4d146103e9576101ed565b8063156a0d0f116101c0578063156a0d0f1461029f57806317442b70146102ca5780631f5e1334146102f55780633400288b1461031f576101ed565b80630d35b415146101f1578063111ecdad1461022f57806313137d6514610259578063134d4f2514610275575b5f80fd5b3480156101fc575f80fd5b50610217600480360381019061021291906124d1565b6107be565b60405161022693929190612721565b60405180910390f35b34801561023a575f80fd5b50610243610898565b604051610250919061279c565b60405180910390f35b610273600480360381019061026e9190612891565b6108bd565b005b348015610280575f80fd5b506102896109dd565b6040516102969190612964565b60405180910390f35b3480156102aa575f80fd5b506102b36109e2565b6040516102c19291906129d9565b60405180910390f35b3480156102d5575f80fd5b506102de610a0f565b6040516102ec929190612a00565b60405180910390f35b348015610300575f80fd5b50610309610a1d565b6040516103169190612964565b60405180910390f35b34801561032a575f80fd5b5061034560048036038101906103409190612a60565b610a22565b005b348015610352575f80fd5b5061036d60048036038101906103689190612ad3565b610a38565b60405161037a9190612b5a565b60405180910390f35b34801561038e575f80fd5b50610397610aa0565b6040516103a4919061279c565b60405180910390f35b3480156103b8575f80fd5b506103d360048036038101906103ce9190612b9d565b610aa7565b6040516103e09190612c2d565b60405180910390f35b3480156103f4575f80fd5b5061040f600480360381019061040a9190612a60565b610b4d565b60405161041c9190612c5c565b60405180910390f35b348015610430575f80fd5b50610439610b76565b6040516104469190612cd0565b60405180910390f35b34801561045a575f80fd5b5061047560048036038101906104709190612ce9565b610b9a565b005b348015610482575f80fd5b5061048b610c1c565b005b348015610498575f80fd5b506104b360048036038101906104ae9190612a60565b610c2f565b6040516104c09190612d14565b60405180910390f35b3480156104d4575f80fd5b506104ef60048036038101906104ea9190612d2d565b610c36565b6040516104fc9190612c5c565b60405180910390f35b348015610510575f80fd5b50610519610c70565b6040516105269190612db9565b60405180910390f35b34801561053a575f80fd5b50610543610c78565b604051610550919061279c565b60405180910390f35b348015610564575f80fd5b5061056d610c9f565b60405161057a9190612de1565b60405180910390f35b34801561058e575f80fd5b50610597610cc3565b6040516105a49190612c5c565b60405180910390f35b3480156105b8575f80fd5b506105c1610ccb565b6040516105ce919061279c565b60405180910390f35b3480156105e2575f80fd5b506105fd60048036038101906105f89190612e4f565b610cf0565b005b34801561060a575f80fd5b5061062560048036038101906106209190612e9a565b610d11565b6040516106329190612ed4565b60405180910390f35b348015610646575f80fd5b50610661600480360381019061065c9190612eed565b610d26565b60405161066e9190612c2d565b60405180910390f35b610691600480360381019061068c9190612fb3565b610f28565b005b6106ad60048036038101906106a8919061301c565b6110f4565b6040516106bb929190613113565b60405180910390f35b3480156106cf575f80fd5b506106ea60048036038101906106e59190612ce9565b61111b565b005b61070660048036038101906107019190612891565b6111ac565b005b348015610713575f80fd5b5061072e60048036038101906107299190612ce9565b611229565b005b34801561073b575f80fd5b5061075660048036038101906107519190612ce9565b6112ab565b005b348015610763575f80fd5b5061076c61132f565b604051610779919061279c565b60405180910390f35b34801561078d575f80fd5b506107a860048036038101906107a3919061313a565b611356565b6040516107b59190612c5c565b60405180910390f35b6107c661240b565b60606107d0612423565b5f8067ffffffffffffffff8016905060405180604001604052808381526020018281525094505f67ffffffffffffffff8111156108105761080f613165565b5b60405190808252806020026020018201604052801561084957816020015b61083661243b565b81526020019060019003908161082e5790505b5093505f80610872886040013589606001358a5f01602081019061086d9190612e9a565b611393565b915091506040518060400160405280838152602001828152509450505050509193909250565b60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b3373ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff161461094d57336040517f91ac5e4f000000000000000000000000000000000000000000000000000000008152600401610944919061279c565b60405180910390fd5b866020013561096c885f0160208101906109679190612e9a565b6113f2565b146109c557865f0160208101906109839190612e9a565b87602001356040517fc26bebcc0000000000000000000000000000000000000000000000000000000081526004016109bc9291906131a1565b60405180910390fd5b6109d487878787878787611463565b50505050505050565b600281565b5f807f02e49c2c000000000000000000000000000000000000000000000000000000006001915091509091565b5f8060016002915091509091565b600181565b610a2a6115ed565b610a348282611674565b5050565b610a40612454565b5f610a6584604001358560600135865f016020810190610a609190612e9a565b611393565b9150505f80610a7486846116d3565b91509150610a95865f016020810190610a8d9190612e9a565b838388611864565b935050505092915050565b5f30905090565b6003602052815f5260405f20602052805f5260405f205f91509150508054610ace906131f5565b80601f0160208091040260200160405190810160405280929190818152602001828054610afa906131f5565b8015610b455780601f10610b1c57610100808354040283529160200191610b45565b820191905f5260205f20905b815481529060010190602001808311610b2857829003601f168201915b505050505081565b5f8160015f8563ffffffff1663ffffffff1681526020019081526020015f205414905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b610ba26115ed565b8060045f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507ff0be4f1e87349231d80c36b33f9e8639658eeaf474014dee15a3e6a4d441419781604051610c11919061279c565b60405180910390a150565b610c246115ed565b610c2d5f611945565b565b5f92915050565b5f3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050949350505050565b5f6006905090565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f6001905090565b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610cf86115ed565b610d0d828290610d089190613456565b611a06565b5050565b6001602052805f5260405f205f915090505481565b60605f60035f8763ffffffff1663ffffffff1681526020019081526020015f205f8661ffff1661ffff1681526020019081526020015f208054610d68906131f5565b80601f0160208091040260200160405190810160405280929190818152602001828054610d94906131f5565b8015610ddf5780601f10610db657610100808354040283529160200191610ddf565b820191905f5260205f20905b815481529060010190602001808311610dc257829003601f168201915b505050505090505f815103610e3a5783838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f82011690508083019250505050505050915050610f20565b5f8484905003610e4d5780915050610f20565b60028484905010610ee157610ea484848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f82011690508083019250505050505050611b1b565b8084846002908092610eb893929190613472565b604051602001610eca9392919061350a565b604051602081830303815290604052915050610f20565b83836040517f9a6d49cd000000000000000000000000000000000000000000000000000000008152600401610f1792919061355b565b60405180910390fd5b949350505050565b5f5b828290508110156110475736838383818110610f4957610f4861357d565b5b9050602002810190610f5b91906135b6565b9050610f80815f015f016020810190610f749190612e9a565b825f0160200135610b4d565b610f8a575061103a565b3073ffffffffffffffffffffffffffffffffffffffff1663d045a0dc8260c00135835f018460a0013585806101000190610fc491906135de565b8760e0016020810190610fd79190612ce9565b88806101200190610fe891906135de565b6040518963ffffffff1660e01b815260040161100a9796959493929190613713565b5f604051808303818588803b158015611021575f80fd5b505af1158015611033573d5f803e3d5ffd5b5050505050505b8080600101915050610f2a565b503373ffffffffffffffffffffffffffffffffffffffff16638e9e70996040518163ffffffff1660e01b81526004015f60405180830381865afa158015611090573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906110b891906137e4565b6040517f8351eea70000000000000000000000000000000000000000000000000000000081526004016110eb9190612c2d565b60405180910390fd5b6110fc61246c565b611104612423565b61110f858585611b74565b91509150935093915050565b6111236115ed565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ca5eb5e1826040518263ffffffff1660e01b815260040161117c919061279c565b5f604051808303815f87803b158015611193575f80fd5b505af11580156111a5573d5f803e3d5ffd5b5050505050565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611211576040517f14d4a4e800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61122087878787878787611c79565b50505050505050565b6112316115ed565b8060025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fd48d879cef83a1c0bdda516f27b13ddb1b3f8bbac1c9e1511bb2a659c2427760816040516112a0919061279c565b60405180910390a150565b6112b36115ed565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611323575f6040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161131a919061279c565b60405180910390fd5b61132c81611945565b50565b5f7f0000000000000000000000000000000000000000000000000000000000000000905090565b5f816020013560015f845f0160208101906113719190612e9a565b63ffffffff1663ffffffff1681526020019081526020015f2054149050919050565b5f8061139e85611c91565b9150819050838110156113ea5780846040517f71c4efed0000000000000000000000000000000000000000000000000000000081526004016113e192919061382b565b60405180910390fd5b935093915050565b5f8060015f8463ffffffff1663ffffffff1681526020019081526020015f205490505f801b810361145a57826040517ff6ff4fb70000000000000000000000000000000000000000000000000000000081526004016114519190613852565b60405180910390fd5b80915050919050565b5f6114766114718787611cf0565b611d1a565b90505f6114a68261148f61148a8a8a611d25565b611d56565b8b5f0160208101906114a19190612e9a565b611d94565b90506114b28787611dea565b15611580575f6114f08a60400160208101906114ce919061386b565b8b5f0160208101906114e09190612e9a565b846114eb8c8c611dfd565b611e5f565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637cb59012848b5f856040518563ffffffff1660e01b815260040161155194939291906138cf565b5f604051808303815f87803b158015611568575f80fd5b505af115801561157a573d5f803e3d5ffd5b50505050505b8173ffffffffffffffffffffffffffffffffffffffff16887fefed6d3500546b29533b128a29e3a94d70788727f0507505ac12eaf2e578fd9c8b5f0160208101906115cb9190612e9a565b846040516115da929190613919565b60405180910390a3505050505050505050565b6115f5611e91565b73ffffffffffffffffffffffffffffffffffffffff16611613610c78565b73ffffffffffffffffffffffffffffffffffffffff161461167257611636611e91565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401611669919061279c565b60405180910390fd5b565b8060015f8463ffffffff1663ffffffff1681526020019081526020015f20819055507f238399d427b947898edb290f5ff0f9109849b1c3ba196a42e35f00c50a54b98b82826040516116c79291906131a1565b60405180910390a15050565b6060805f61173f85602001356116e886611e98565b878060a001906116f891906135de565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f82011690508083019250505050505050611ecc565b80925081945050505f81611754576001611757565b60025b9050611784865f01602081019061176e9190612e9a565b8288806080019061177f91906135de565b610d26565b92505f60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461185a578073ffffffffffffffffffffffffffffffffffffffff1663043a78eb86866040518363ffffffff1660e01b8152600401611819929190613940565b602060405180830381865afa158015611834573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118589190613989565b505b5050509250929050565b61186c612454565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ddc28c586040518060a001604052808863ffffffff1681526020016118c8896113f2565b8152602001878152602001868152602001851515815250306040518363ffffffff1660e01b81526004016118fd929190613a85565b6040805180830381865afa158015611917573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061193b9190613b2a565b9050949350505050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f5b8151811015611ae057611a38828281518110611a2757611a2661357d565b5b602002602001015160400151611b1b565b818181518110611a4b57611a4a61357d565b5b60200260200101516040015160035f848481518110611a6d57611a6c61357d565b5b60200260200101515f015163ffffffff1663ffffffff1681526020019081526020015f205f848481518110611aa557611aa461357d565b5b60200260200101516020015161ffff1661ffff1681526020019081526020015f209081611ad29190613ce9565b508080600101915050611a08565b507fbe4864a8e820971c0247f5992e2da559595f7bf076a21cb5928d443d2a13b67481604051611b109190613ecf565b60405180910390a150565b5f60028201519050600361ffff168161ffff1614611b7057816040517f9a6d49cd000000000000000000000000000000000000000000000000000000008152600401611b679190612c2d565b60405180910390fd5b5050565b611b7c61246c565b611b84612423565b5f80611bab33886040013589606001358a5f016020810190611ba69190612e9a565b611f3a565b915091505f80611bbb89846116d3565b91509150611bed895f016020810190611bd49190612e9a565b83838b803603810190611be79190613f50565b8b611fa5565b955060405180604001604052808581526020018481525094503373ffffffffffffffffffffffffffffffffffffffff16865f01517f85496b760a4b7f8d66384b9df21b381f5d1b1e79f229a47aaf4c232edc2fe59a8b5f016020810190611c549190612e9a565b8787604051611c6593929190613f7b565b60405180910390a350505050935093915050565b611c8887878787878787611463565b50505050505050565b5f7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000083611cdf919061400a565b611ce9919061403a565b9050919050565b5f82825f90602060ff1692611d0793929190613472565b90611d129190614085565b905092915050565b5f815f1c9050919050565b5f8282602060ff1690602860ff1692611d4093929190613472565b90611d4b919061410e565b60c01c905092915050565b5f7f00000000000000000000000000000000000000000000000000000000000000008267ffffffffffffffff16611d8d919061403a565b9050919050565b5f611de084847f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166120bb9092919063ffffffff16565b8290509392505050565b5f602860ff168383905011905092915050565b60608282602860ff16908092611e1593929190613472565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f82011690508083019250505050505050905092915050565b606084848484604051602001611e7894939291906141f4565b6040516020818303038152906040529050949350505050565b5f33905090565b5f7f000000000000000000000000000000000000000000000000000000000000000082611ec5919061400a565b9050919050565b60605f80835111905080611f01578484604051602001611eed92919061425d565b604051602081830303815290604052611f30565b8484611f0c3361213a565b85604051602001611f209493929190614288565b6040516020818303038152906040525b9150935093915050565b5f80611f47858585611393565b8092508193505050611f9c8630847f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1661215b909392919063ffffffff16565b94509492505050565b611fad61246c565b5f611fba845f01516121dd565b90505f84602001511115611fd657611fd5846020015161222a565b5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632637a450826040518060a001604052808b63ffffffff1681526020016120338c6113f2565b81526020018a81526020018981526020015f8960200151111515815250866040518463ffffffff1660e01b815260040161206e929190613a85565b60806040518083038185885af115801561208a573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906120af919061435a565b91505095945050505050565b612135838473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb85856040516024016120ee929190614385565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612370565b505050565b5f8173ffffffffffffffffffffffffffffffffffffffff165f1b9050919050565b6121d7848573ffffffffffffffffffffffffffffffffffffffff166323b872dd868686604051602401612190939291906143ac565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612370565b50505050565b5f81341461222257346040517f9f7041200000000000000000000000000000000000000000000000000000000081526004016122199190612de1565b60405180910390fd5b819050919050565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e4fe1d946040518163ffffffff1660e01b8152600401602060405180830381865afa158015612294573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122b891906143f5565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361231f576040517f5373352a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61236c337f0000000000000000000000000000000000000000000000000000000000000000848473ffffffffffffffffffffffffffffffffffffffff1661215b909392919063ffffffff16565b5050565b5f8060205f8451602086015f885af18061238f576040513d5f823e3d81fd5b3d92505f519150505f82146123a85760018114156123c3565b5f8473ffffffffffffffffffffffffffffffffffffffff163b145b1561240557836040517f5274afe70000000000000000000000000000000000000000000000000000000081526004016123fc919061279c565b60405180910390fd5b50505050565b60405180604001604052805f81526020015f81525090565b60405180604001604052805f81526020015f81525090565b60405180604001604052805f8152602001606081525090565b60405180604001604052805f81526020015f81525090565b60405180606001604052805f80191681526020015f67ffffffffffffffff168152602001612498612454565b81525090565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f60e082840312156124c8576124c76124af565b5b81905092915050565b5f602082840312156124e6576124e56124a7565b5b5f82013567ffffffffffffffff811115612503576125026124ab565b5b61250f848285016124b3565b91505092915050565b5f819050919050565b61252a81612518565b82525050565b604082015f8201516125445f850182612521565b5060208201516125576020850182612521565b50505050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f819050919050565b61259881612586565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156125d55780820151818401526020810190506125ba565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6125fa8261259e565b61260481856125a8565b93506126148185602086016125b8565b61261d816125e0565b840191505092915050565b5f604083015f83015161263d5f86018261258f565b506020830151848203602086015261265582826125f0565b9150508091505092915050565b5f61266d8383612628565b905092915050565b5f602082019050919050565b5f61268b8261255d565b6126958185612567565b9350836020820285016126a785612577565b805f5b858110156126e257848403895281516126c38582612662565b94506126ce83612675565b925060208a019950506001810190506126aa565b50829750879550505050505092915050565b604082015f8201516127085f850182612521565b50602082015161271b6020850182612521565b50505050565b5f60a0820190506127345f830186612530565b81810360408301526127468185612681565b905061275560608301846126f4565b949350505050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6127868261275d565b9050919050565b6127968161277c565b82525050565b5f6020820190506127af5f83018461278d565b92915050565b5f606082840312156127ca576127c96124af565b5b81905092915050565b5f819050919050565b6127e5816127d3565b81146127ef575f80fd5b50565b5f81359050612800816127dc565b92915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f84011261282757612826612806565b5b8235905067ffffffffffffffff8111156128445761284361280a565b5b6020830191508360018202830111156128605761285f61280e565b5b9250929050565b6128708161277c565b811461287a575f80fd5b50565b5f8135905061288b81612867565b92915050565b5f805f805f805f60e0888a0312156128ac576128ab6124a7565b5b5f6128b98a828b016127b5565b97505060606128ca8a828b016127f2565b965050608088013567ffffffffffffffff8111156128eb576128ea6124ab565b5b6128f78a828b01612812565b955095505060a061290a8a828b0161287d565b93505060c088013567ffffffffffffffff81111561292b5761292a6124ab565b5b6129378a828b01612812565b925092505092959891949750929550565b5f61ffff82169050919050565b61295e81612948565b82525050565b5f6020820190506129775f830184612955565b92915050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6129b18161297d565b82525050565b5f67ffffffffffffffff82169050919050565b6129d3816129b7565b82525050565b5f6040820190506129ec5f8301856129a8565b6129f960208301846129ca565b9392505050565b5f604082019050612a135f8301856129ca565b612a2060208301846129ca565b9392505050565b5f63ffffffff82169050919050565b612a3f81612a27565b8114612a49575f80fd5b50565b5f81359050612a5a81612a36565b92915050565b5f8060408385031215612a7657612a756124a7565b5b5f612a8385828601612a4c565b9250506020612a94858286016127f2565b9150509250929050565b5f8115159050919050565b612ab281612a9e565b8114612abc575f80fd5b50565b5f81359050612acd81612aa9565b92915050565b5f8060408385031215612ae957612ae86124a7565b5b5f83013567ffffffffffffffff811115612b0657612b056124ab565b5b612b12858286016124b3565b9250506020612b2385828601612abf565b9150509250929050565b604082015f820151612b415f850182612521565b506020820151612b546020850182612521565b50505050565b5f604082019050612b6d5f830184612b2d565b92915050565b612b7c81612948565b8114612b86575f80fd5b50565b5f81359050612b9781612b73565b92915050565b5f8060408385031215612bb357612bb26124a7565b5b5f612bc085828601612a4c565b9250506020612bd185828601612b89565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f612bff82612bdb565b612c098185612be5565b9350612c198185602086016125b8565b612c22816125e0565b840191505092915050565b5f6020820190508181035f830152612c458184612bf5565b905092915050565b612c5681612a9e565b82525050565b5f602082019050612c6f5f830184612c4d565b92915050565b5f819050919050565b5f612c98612c93612c8e8461275d565b612c75565b61275d565b9050919050565b5f612ca982612c7e565b9050919050565b5f612cba82612c9f565b9050919050565b612cca81612cb0565b82525050565b5f602082019050612ce35f830184612cc1565b92915050565b5f60208284031215612cfe57612cfd6124a7565b5b5f612d0b8482850161287d565b91505092915050565b5f602082019050612d275f8301846129ca565b92915050565b5f805f8060a08587031215612d4557612d446124a7565b5b5f612d52878288016127b5565b945050606085013567ffffffffffffffff811115612d7357612d726124ab565b5b612d7f87828801612812565b93509350506080612d928782880161287d565b91505092959194509250565b5f60ff82169050919050565b612db381612d9e565b82525050565b5f602082019050612dcc5f830184612daa565b92915050565b612ddb81612518565b82525050565b5f602082019050612df45f830184612dd2565b92915050565b5f8083601f840112612e0f57612e0e612806565b5b8235905067ffffffffffffffff811115612e2c57612e2b61280a565b5b602083019150836020820283011115612e4857612e4761280e565b5b9250929050565b5f8060208385031215612e6557612e646124a7565b5b5f83013567ffffffffffffffff811115612e8257612e816124ab565b5b612e8e85828601612dfa565b92509250509250929050565b5f60208284031215612eaf57612eae6124a7565b5b5f612ebc84828501612a4c565b91505092915050565b612ece816127d3565b82525050565b5f602082019050612ee75f830184612ec5565b92915050565b5f805f8060608587031215612f0557612f046124a7565b5b5f612f1287828801612a4c565b9450506020612f2387828801612b89565b935050604085013567ffffffffffffffff811115612f4457612f436124ab565b5b612f5087828801612812565b925092505092959194509250565b5f8083601f840112612f7357612f72612806565b5b8235905067ffffffffffffffff811115612f9057612f8f61280a565b5b602083019150836020820283011115612fac57612fab61280e565b5b9250929050565b5f8060208385031215612fc957612fc86124a7565b5b5f83013567ffffffffffffffff811115612fe657612fe56124ab565b5b612ff285828601612f5e565b92509250509250929050565b5f60408284031215613013576130126124af565b5b81905092915050565b5f805f60808486031215613033576130326124a7565b5b5f84013567ffffffffffffffff8111156130505761304f6124ab565b5b61305c868287016124b3565b935050602061306d86828701612ffe565b925050606061307e8682870161287d565b9150509250925092565b613091816127d3565b82525050565b6130a0816129b7565b82525050565b604082015f8201516130ba5f850182612521565b5060208201516130cd6020850182612521565b50505050565b608082015f8201516130e75f850182613088565b5060208201516130fa6020850182613097565b50604082015161310d60408501826130a6565b50505050565b5f60c0820190506131265f8301856130d3565b61313360808301846126f4565b9392505050565b5f6060828403121561314f5761314e6124a7565b5b5f61315c848285016127b5565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61319b81612a27565b82525050565b5f6040820190506131b45f830185613192565b6131c16020830184612ec5565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061320c57607f821691505b60208210810361321f5761321e6131c8565b5b50919050565b61322e826125e0565b810181811067ffffffffffffffff8211171561324d5761324c613165565b5b80604052505050565b5f61325f61249e565b905061326b8282613225565b919050565b5f67ffffffffffffffff82111561328a57613289613165565b5b602082029050602081019050919050565b5f80fd5b5f80fd5b5f80fd5b5f67ffffffffffffffff8211156132c1576132c0613165565b5b6132ca826125e0565b9050602081019050919050565b828183375f83830152505050565b5f6132f76132f2846132a7565b613256565b905082815260208101848484011115613313576133126132a3565b5b61331e8482856132d7565b509392505050565b5f82601f83011261333a57613339612806565b5b813561334a8482602086016132e5565b91505092915050565b5f606082840312156133685761336761329b565b5b6133726060613256565b90505f61338184828501612a4c565b5f83015250602061339484828501612b89565b602083015250604082013567ffffffffffffffff8111156133b8576133b761329f565b5b6133c484828501613326565b60408301525092915050565b5f6133e26133dd84613270565b613256565b905080838252602082019050602084028301858111156134055761340461280e565b5b835b8181101561344c57803567ffffffffffffffff81111561342a57613429612806565b5b8086016134378982613353565b85526020850194505050602081019050613407565b5050509392505050565b5f6134623684846133d0565b905092915050565b5f80fd5b5f80fd5b5f80858511156134855761348461346a565b5b838611156134965761349561346e565b5b6001850283019150848603905094509492505050565b5f81905092915050565b5f6134c082612bdb565b6134ca81856134ac565b93506134da8185602086016125b8565b80840191505092915050565b5f6134f183856134ac565b93506134fe8385846132d7565b82840190509392505050565b5f61351582866134b6565b91506135228284866134e6565b9150819050949350505050565b5f61353a8385612be5565b93506135478385846132d7565b613550836125e0565b840190509392505050565b5f6020820190508181035f83015261357481848661352f565b90509392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f80fd5b5f80fd5b5f80fd5b5f82356001610140038336030381126135d2576135d16135aa565b5b80830191505092915050565b5f80833560016020038436030381126135fa576135f96135aa565b5b80840192508235915067ffffffffffffffff82111561361c5761361b6135ae565b5b602083019250600182023603831315613638576136376135b2565b5b509250929050565b5f61364e6020840184612a4c565b905092915050565b61365f81612a27565b82525050565b5f61367360208401846127f2565b905092915050565b613684816129b7565b811461368e575f80fd5b50565b5f8135905061369f8161367b565b92915050565b5f6136b36020840184613691565b905092915050565b606082016136cb5f830183613640565b6136d75f850182613656565b506136e56020830183613665565b6136f26020850182613088565b5061370060408301836136a5565b61370d6040850182613097565b50505050565b5f60e0820190506137265f83018a6136bb565b6137336060830189612ec5565b818103608083015261374681878961352f565b905061375560a083018661278d565b81810360c083015261376881848661352f565b905098975050505050505050565b5f613788613783846132a7565b613256565b9050828152602081018484840111156137a4576137a36132a3565b5b6137af8482856125b8565b509392505050565b5f82601f8301126137cb576137ca612806565b5b81516137db848260208601613776565b91505092915050565b5f602082840312156137f9576137f86124a7565b5b5f82015167ffffffffffffffff811115613816576138156124ab565b5b613822848285016137b7565b91505092915050565b5f60408201905061383e5f830185612dd2565b61384b6020830184612dd2565b9392505050565b5f6020820190506138655f830184613192565b92915050565b5f602082840312156138805761387f6124a7565b5b5f61388d84828501613691565b91505092915050565b5f819050919050565b5f6138b96138b46138af84613896565b612c75565b612948565b9050919050565b6138c98161389f565b82525050565b5f6080820190506138e25f83018761278d565b6138ef6020830186612ec5565b6138fc60408301856138c0565b818103606083015261390e8184612bf5565b905095945050505050565b5f60408201905061392c5f830185613192565b6139396020830184612dd2565b9392505050565b5f6040820190508181035f8301526139588185612bf5565b9050818103602083015261396c8184612bf5565b90509392505050565b5f8151905061398381612aa9565b92915050565b5f6020828403121561399e5761399d6124a7565b5b5f6139ab84828501613975565b91505092915050565b5f82825260208201905092915050565b5f6139ce82612bdb565b6139d881856139b4565b93506139e88185602086016125b8565b6139f1816125e0565b840191505092915050565b613a0581612a9e565b82525050565b5f60a083015f830151613a205f860182613656565b506020830151613a336020860182613088565b5060408301518482036040860152613a4b82826139c4565b91505060608301518482036060860152613a6582826139c4565b9150506080830151613a7a60808601826139fc565b508091505092915050565b5f6040820190508181035f830152613a9d8185613a0b565b9050613aac602083018461278d565b9392505050565b613abc81612518565b8114613ac6575f80fd5b50565b5f81519050613ad781613ab3565b92915050565b5f60408284031215613af257613af161329b565b5b613afc6040613256565b90505f613b0b84828501613ac9565b5f830152506020613b1e84828501613ac9565b60208301525092915050565b5f60408284031215613b3f57613b3e6124a7565b5b5f613b4c84828501613add565b91505092915050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302613bb17fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613b76565b613bbb8683613b76565b95508019841693508086168417925050509392505050565b5f613bed613be8613be384612518565b612c75565b612518565b9050919050565b5f819050919050565b613c0683613bd3565b613c1a613c1282613bf4565b848454613b82565b825550505050565b5f90565b613c2e613c22565b613c39818484613bfd565b505050565b5b81811015613c5c57613c515f82613c26565b600181019050613c3f565b5050565b601f821115613ca157613c7281613b55565b613c7b84613b67565b81016020851015613c8a578190505b613c9e613c9685613b67565b830182613c3e565b50505b505050565b5f82821c905092915050565b5f613cc15f1984600802613ca6565b1980831691505092915050565b5f613cd98383613cb2565b9150826002028217905092915050565b613cf282612bdb565b67ffffffffffffffff811115613d0b57613d0a613165565b5b613d1582546131f5565b613d20828285613c60565b5f60209050601f831160018114613d51575f8415613d3f578287015190505b613d498582613cce565b865550613db0565b601f198416613d5f86613b55565b5f5b82811015613d8657848901518255600182019150602085019450602081019050613d61565b86831015613da35784890151613d9f601f891682613cb2565b8355505b6001600288020188555050505b505050505050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b613dea81612948565b82525050565b5f606083015f830151613e055f860182613656565b506020830151613e186020860182613de1565b5060408301518482036040860152613e3082826139c4565b9150508091505092915050565b5f613e488383613df0565b905092915050565b5f602082019050919050565b5f613e6682613db8565b613e708185613dc2565b935083602082028501613e8285613dd2565b805f5b85811015613ebd5784840389528151613e9e8582613e3d565b9450613ea983613e50565b925060208a01995050600181019050613e85565b50829750879550505050505092915050565b5f6020820190508181035f830152613ee78184613e5c565b905092915050565b5f81359050613efd81613ab3565b92915050565b5f60408284031215613f1857613f1761329b565b5b613f226040613256565b90505f613f3184828501613eef565b5f830152506020613f4484828501613eef565b60208301525092915050565b5f60408284031215613f6557613f646124a7565b5b5f613f7284828501613f03565b91505092915050565b5f606082019050613f8e5f830186613192565b613f9b6020830185612dd2565b613fa86040830184612dd2565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61401482612518565b915061401f83612518565b92508261402f5761402e613fb0565b5b828204905092915050565b5f61404482612518565b915061404f83612518565b925082820261405d81612518565b9150828204841483151761407457614073613fdd565b5b5092915050565b5f82905092915050565b5f614090838361407b565b8261409b81356127d3565b925060208210156140db576140d67fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83602003600802613b76565b831692505b505092915050565b5f7fffffffffffffffff00000000000000000000000000000000000000000000000082169050919050565b5f614119838361407b565b8261412481356140e3565b925060088210156141645761415f7fffffffffffffffff00000000000000000000000000000000000000000000000083600803600802613b76565b831692505b505092915050565b5f8160c01b9050919050565b5f6141828261416c565b9050919050565b61419a614195826129b7565b614178565b82525050565b5f8160e01b9050919050565b5f6141b6826141a0565b9050919050565b6141ce6141c982612a27565b6141ac565b82525050565b5f819050919050565b6141ee6141e982612518565b6141d4565b82525050565b5f6141ff8287614189565b60088201915061420f82866141bd565b60048201915061421f82856141dd565b60208201915061422f82846134b6565b915081905095945050505050565b5f819050919050565b614257614252826127d3565b61423d565b82525050565b5f6142688285614246565b6020820191506142788284614189565b6008820191508190509392505050565b5f6142938287614246565b6020820191506142a38286614189565b6008820191506142b38285614246565b6020820191506142c382846134b6565b915081905095945050505050565b5f815190506142df816127dc565b92915050565b5f815190506142f38161367b565b92915050565b5f6080828403121561430e5761430d61329b565b5b6143186060613256565b90505f614327848285016142d1565b5f83015250602061433a848285016142e5565b602083015250604061434e84828501613add565b60408301525092915050565b5f6080828403121561436f5761436e6124a7565b5b5f61437c848285016142f9565b91505092915050565b5f6040820190506143985f83018561278d565b6143a56020830184612dd2565b9392505050565b5f6060820190506143bf5f83018661278d565b6143cc602083018561278d565b6143d96040830184612dd2565b949350505050565b5f815190506143ef81612867565b92915050565b5f6020828403121561440a576144096124a7565b5b5f614417848285016143e1565b9150509291505056fea26469706673582212203f5e78e5287f629fa8a00fd9399b66ca03a41c624ff40b71d117d3553bd2e95564736f6c634300081600330000000000000000000000001d1cb8997570e73949930c01fe5796c88d7336c60000000000000000000000009740ff91f1985d8d2b71494ae1a2f723bb3ed9e400000000000000000000000057866ed63ca5f9744cef9aa270bd1f1dce935831