0 txs
0 calls
constructor
constructor(address _ccipRouter, address _ccipClient, address _lzEndpoint, address _initialOwner)
functions
allowedPeer
viewfunction allowedPeer(uint64 chainSelector, address messager) view returns (bool allowed)
allowInitializePath
viewfunction allowInitializePath(tuple origin) view returns (bool)
calculateCcSendMintBudgetFeeAndMessage
viewfunction calculateCcSendMintBudgetFeeAndMessage(uint64 destinationChainSelector, address messageReceiver, uint112 value, bytes extraArgs) view returns (uint256 fee, tuple evm2AnyMessage)
calculateCCSendTokenFeeAndMessage
viewfunction calculateCCSendTokenFeeAndMessage(uint64 destinationChainSelector, address messageReceiver, address sender, address recipient, uint256 value, bytes extraArgs) view returns (uint256 fee, tuple evm2AnyMessage)
ccClient
viewfunction ccClient() view returns (address)
endpoint
viewfunction endpoint() view returns (address)
getFeeAndMessage
viewfunction getFeeAndMessage(uint64 destinationChainSelector, address messageReceiver, bytes extraArgs, bytes data) view returns (uint256 fee, tuple evm2AnyMessage)
getRouter
viewfunction getRouter() view returns (address)
isComposeMsgSender
viewfunction isComposeMsgSender(tuple, bytes, address _sender) view returns (bool)
lzCalculateSendMintBudgetFee
viewfunction lzCalculateSendMintBudgetFee(uint32 _dstEid, uint112 value, bytes _options) view returns (uint256 nativeFee)
lzCalculateSendTokenFee
viewfunction lzCalculateSendTokenFee(uint32 _dstEid, address sender, address recipient, uint256 value, bytes _options) view returns (uint256 nativeFee)
lzPaused
viewfunction lzPaused() view returns (bool)
nextNonce
viewfunction nextNonce(uint32, bytes32) view returns (uint64 nonce)
oAppVersion
purefunction oAppVersion() pure returns (uint64 senderVersion, uint64 receiverVersion)
owner
viewfunction owner() view returns (address)
peers
viewfunction peers(uint32 eid) view returns (bytes32 peer)
supportsInterface
purefunction supportsInterface(bytes4 interfaceId) pure returns (bool)
ccipReceive
nonpayablefunction ccipReceive(tuple message)
lzReceive
payablefunction lzReceive(tuple _origin, bytes32 _guid, bytes _message, address _executor, bytes _extraData) payable
lzSendMintBudgetToChain
payablefunction lzSendMintBudgetToChain(uint32 _dstEid, uint112 value, bytes _options) payable returns (bytes32 messageId)
lzSendTokenToChain
payablefunction lzSendTokenToChain(uint32 _dstEid, address recipient, uint256 value, bytes _options) payable returns (bytes32 messageId)
lzSetPeer
nonpayablefunction lzSetPeer(uint32 _eid, bytes32 _peer)
renounceOwnership
nonpayablefunction renounceOwnership()
sendMintBudgetToChain
payablefunction sendMintBudgetToChain(uint64 destinationChainSelector, address messageReceiver, uint112 value, bytes extraArgs) payable returns (bytes32 messageId)
sendTokenToChain
payablefunction sendTokenToChain(uint64 destinationChainSelector, address messageReceiver, address recipient, uint256 value, bytes extraArgs) payable returns (bytes32 messageId)
setAllowedPeer
nonpayablefunction setAllowedPeer(uint64 chainSelector, address messager, bool allowed)
setDelegate
nonpayablefunction setDelegate(address _delegate)
setLZPaused
nonpayablefunction setLZPaused(bool isPaused)
setPeer
nonpayablefunction setPeer(uint32 _eid, bytes32 _peer)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
events
AllowedPeer
event AllowedPeer(uint64 chainSelector, address messager, bool allowed)
CCReceive
event CCReceive(bytes32 indexed messageID, bytes messageData)
CCReceiveLZ
event CCReceiveLZ(bytes32 indexed messageID, bytes messageData)
CCSendMintBudget
event CCSendMintBudget(bytes32 indexed messageID, bytes messageData)
CCSendMintBudgetLZ
event CCSendMintBudgetLZ(bytes32 indexed messageID, bytes messageData)
CCSendToken
event CCSendToken(bytes32 indexed messageID, bytes messageData)
CCSendTokenLZ
event CCSendTokenLZ(bytes32 indexed messageID, bytes messageData)
LZPaused
event LZPaused(bool isPaused)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
PeerSet
event PeerSet(uint32 eid, bytes32 peer)
errors
AddressEmptyCode
error AddressEmptyCode(address target)
AddressInsufficientBalance
error AddressInsufficientBalance(address account)
FailedInnerCall
error FailedInnerCall()
InsufficientFee
error InsufficientFee(uint256 required, uint256 actual)
InvalidDelegate
error InvalidDelegate()
InvalidEndpointCall
error InvalidEndpointCall()
InvalidRouter
error InvalidRouter(address router)
LzTokenUnavailable
error LzTokenUnavailable()
NoPeer
error NoPeer(uint32 eid)
NotEnoughNative
error NotEnoughNative(uint256 msgValue)
NotInAllowListed
error NotInAllowListed(uint64 chainSelector, address messager)
OnlyEndpoint
error OnlyEndpoint(address addr)
OnlyPeer
error OnlyPeer(uint32 eid, bytes32 sender)
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
creation bytecode
0x60e06040523480156200001157600080fd5b50604051620030a9380380620030a98339810160408190526200003491620001bf565b8282828181818180878c6001600160a01b0381166200006e576040516335fdcccd60e21b8152600060048201526024015b60405180910390fd5b6001600160a01b0390811660805290811660a0528116620000a657604051631e4fbdf760e01b81526000600482015260240162000065565b620000b18162000152565b506001600160a01b0380831660c0528116620000e057604051632d618d8160e21b815260040160405180910390fd5b60c05160405163ca5eb5e160e01b81526001600160a01b0383811660048301529091169063ca5eb5e190602401600060405180830381600087803b1580156200012857600080fd5b505af11580156200013d573d6000803e3d6000fd5b5050505050505050505050505050506200021c565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b0381168114620001ba57600080fd5b919050565b60008060008060808587031215620001d657600080fd5b620001e185620001a2565b9350620001f160208601620001a2565b92506200020160408601620001a2565b91506200021160608601620001a2565b905092959194509250565b60805160a05160c051612dd8620002d1600039600081816103c00152818161073d0152818161140e015281816118b401528181611c5e01528181611d7b0152611e4b01526000818161053001528181610892015281816109bf01528181610b4301528181610c6501528181610d9b01528181610e9901528181610fa30152818161131a015281816115bb0152611ae50152600081816104fa015281816110820152818161122501526116f00152612dd86000f3fe6080604052600436106101cd5760003560e01c8063715018a6116100f7578063b0f479a111610095578063e4608ce811610064578063e4608ce81461059f578063e9555a7a146105bf578063f2fde38b146105d9578063ff7bd03d146105f957600080fd5b8063b0f479a1146104eb578063b703567f1461051e578063bb0b6a5314610552578063ca5eb5e11461057f57600080fd5b806385572ffb116100d157806385572ffb1461047a5780638da5cb5b1461049a5780639c363f8b146104b8578063af763c60146104d857600080fd5b8063715018a6146103fa5780637d25a05e1461040f57806382413eac1461044b57600080fd5b80631b13bff31161016f578063310b6af81161013e578063310b6af81461034e5780633400288b1461036e57806349345bfc1461038e5780635e280f11146103ae57600080fd5b80631b13bff3146102e85780631b6341ca146103085780632b396ed0146103285780632d9773031461033b57600080fd5b806313137d65116101ab57806313137d651461026457806314f9dfbb1461027757806317442b70146102a557806319c45564146102c757600080fd5b806301ffc9a7146101d2578063024135f614610207578063045e3af214610229575b600080fd5b3480156101de57600080fd5b506101f26101ed36600461210a565b610619565b60405190151581526020015b60405180910390f35b34801561021357600080fd5b50610227610222366004612195565b6106b2565b005b34801561023557600080fd5b506101f26102443660046121e0565b600360209081526000928352604080842090915290825290205460ff1681565b61022761027236600461227a565b61073b565b34801561028357600080fd5b50610297610292366004612338565b61082d565b6040516101fe9291906124c5565b3480156102b157600080fd5b50604080516001815260026020820152016101fe565b6102da6102d53660046124e6565b610927565b6040519081526020016101fe565b3480156102f457600080fd5b5061022761030336600461256b565b610a86565b34801561031457600080fd5b50610297610323366004612588565b610ad5565b6102da610336366004612338565b610bd4565b6102da610349366004612621565b610d31565b34801561035a57600080fd5b506102da610369366004612682565b610e66565b34801561037a57600080fd5b506102276103893660046126a4565b610f5b565b34801561039a57600080fd5b506102da6103a9366004612621565b610f71565b3480156103ba57600080fd5b506103e27f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101fe565b34801561040657600080fd5b50610227611063565b34801561041b57600080fd5b5061043261042a3660046126a4565b600092915050565b60405167ffffffffffffffff90911681526020016101fe565b34801561045757600080fd5b506101f26104663660046126ce565b6001600160a01b0381163014949350505050565b34801561048657600080fd5b50610227610495366004612735565b611077565b3480156104a657600080fd5b506000546001600160a01b03166103e2565b3480156104c457600080fd5b506102976104d3366004612881565b6110ef565b6102da6104e6366004612910565b6112a9565b3480156104f757600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006103e2565b34801561052a57600080fd5b506103e27f000000000000000000000000000000000000000000000000000000000000000081565b34801561055e57600080fd5b506102da61056d366004612964565b60016020526000908152604090205481565b34801561058b57600080fd5b5061022761059a36600461297f565b6113ce565b3480156105ab57600080fd5b506102276105ba3660046126a4565b61146d565b3480156105cb57600080fd5b506002546101f29060ff1681565b3480156105e557600080fd5b506102276105f436600461297f565b61147f565b34801561060557600080fd5b506101f261061436600461299c565b6114d3565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f85572ffb0000000000000000000000000000000000000000000000000000000014806106ac57507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b6106ba611509565b67ffffffffffffffff831660008181526003602090815260408083206001600160a01b03871680855290835292819020805460ff1916861515908117909155815194855291840192909252908201527fe897bd60162c3b4a2b1db646658f212d1338043268b8e8544c54f34a224a24f19060600160405180910390a1505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633146107a4576040517f91ac5e4f0000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b602087018035906107be906107b9908a612964565b61154f565b14610815576107d06020880188612964565b6040517fc26bebcc00000000000000000000000000000000000000000000000000000000815263ffffffff90911660048201526020880135602482015260440161079b565b610824878787878787876115a4565b50505050505050565b600061086a6040518060a0016040528060608152602001606081526020016060815260200160006001600160a01b03168152602001606081525090565b604051633f95de0760e11b81526dffffffffffffffffffffffffffff861660048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690637f2bbc0e90602401600060405180830381865afa1580156108e1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261090991908101906129b8565b905061091888888787856110ef565b90999098509650505050505050565b67ffffffffffffffff861660009081526003602090815260408083206001600160a01b038916845290915281205460ff166109905760405163a0280ae760e01b815267ffffffffffffffff881660048201526001600160a01b038716602482015260440161079b565b60405163b85764f560e01b81523360048201526001600160a01b038681166024830152604482018690526000917f00000000000000000000000000000000000000000000000000000000000000009091169063b85764f5906064016000604051808303816000875af1158015610a0a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610a3291908101906129b8565b9050610a418888868685611667565b9150817f33025ba6b00deb9d8b01d53d63796788e0e248ae9499e54610fe38bce2444e5882604051610a739190612a26565b60405180910390a2509695505050505050565b610a8e611509565b6002805460ff19168215159081179091556040519081527f9d5bdd1bf7642eb0b282e29b5238683a20705993486eb9f3f03624dd22ef35c09060200160405180910390a150565b6000610b126040518060a0016040528060608152602001606081526020016060815260200160006001600160a01b03168152602001606081525090565b604051632207f81560e21b81526001600160a01b0388811660048301528781166024830152604482018790526000917f00000000000000000000000000000000000000000000000000000000000000009091169063881fe05490606401600060405180830381865afa158015610b8c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610bb491908101906129b8565b9050610bc38a8a8787856110ef565b909b909a5098505050505050505050565b67ffffffffffffffff851660009081526003602090815260408083206001600160a01b038816845290915281205460ff16610c3d5760405163a0280ae760e01b815267ffffffffffffffff871660048201526001600160a01b038616602482015260440161079b565b60405163515743fd60e11b81526dffffffffffffffffffffffffffff851660048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063a2ae87fa906024016000604051808303816000875af1158015610cb6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610cde91908101906129b8565b9050610ced8787868685611667565b9150817ffded04ddd0bd554dd80207f5cf62753799df9161f2d830a74804c9adc4b0c74182604051610d1f9190612a26565b60405180910390a25095945050505050565b60025460009060ff1615610d735760405162461bcd60e51b8152602060048201526009602482015268131697d4105554d15160ba1b604482015260640161079b565b60405163515743fd60e11b81526dffffffffffffffffffffffffffff851660048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063a2ae87fa906024016000604051808303816000875af1158015610dec573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610e1491908101906129b8565b9050610e23868286863461179f565b9150817f72e13b8c38191bb144d7db8a06b965d7ee0baff0951c98c27bb7d1efba85e34182604051610e559190612a26565b60405180910390a250949350505050565b604051632207f81560e21b81526001600160a01b03868116600483015285811660248301526044820185905260009182917f0000000000000000000000000000000000000000000000000000000000000000169063881fe05490606401600060405180830381865afa158015610ee0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610f0891908101906129b8565b90506000610f4d898387878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250925061189e915050565b519998505050505050505050565b610f63611509565b610f6d828261197f565b5050565b604051633f95de0760e11b81526dffffffffffffffffffffffffffff8416600482015260009081906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690637f2bbc0e90602401600060405180830381865afa158015610fea573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261101291908101906129b8565b90506000611057878387878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250925061189e915050565b51979650505050505050565b61106b611509565b61107560006119d4565b565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146110db576040517fd7f7333400000000000000000000000000000000000000000000000000000000815233600482015260240161079b565b6110ec6110e782612ae6565b611a3c565b50565b600061112c6040518060a0016040528060608152602001606081526020016060815260200160006001600160a01b03168152602001606081525090565b6040805160a081019091526001600160a01b03871660c08201528060e0810160408051808303601f1901815291815290825260208083018790528151600080825291810183529290910191906111a4565b604080518082019091526000808252602082015281526020019060019003908161117d5790505b50815260200160006001600160a01b0316815260200186868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050509152506040517f20487ded0000000000000000000000000000000000000000000000000000000081529091506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906320487ded9061125c908a908590600401612b93565b602060405180830381865afa158015611279573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061129d9190612bb6565b91509550959350505050565b60025460009060ff16156112eb5760405162461bcd60e51b8152602060048201526009602482015268131697d4105554d15160ba1b604482015260640161079b565b60405163b85764f560e01b81523360048201526001600160a01b038681166024830152604482018690526000917f00000000000000000000000000000000000000000000000000000000000000009091169063b85764f5906064016000604051808303816000875af1158015611365573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261138d91908101906129b8565b905061139c878286863461179f565b9150817f807c60b9fea886cff0b1e19b617c1dcec7abd65fc5f749bc0088ab90b161cb9982604051610d1f9190612a26565b6113d6611509565b6040517fca5eb5e10000000000000000000000000000000000000000000000000000000081526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063ca5eb5e190602401600060405180830381600087803b15801561145257600080fd5b505af1158015611466573d6000803e3d6000fd5b5050505050565b611475611509565b610f6d8282610f5b565b611487611509565b6001600160a01b0381166114ca576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526000600482015260240161079b565b6110ec816119d4565b60006020820180359060019083906114eb9086612964565b63ffffffff1681526020810191909152604001600020541492915050565b6000546001600160a01b03163314611075576040517f118cdaa700000000000000000000000000000000000000000000000000000000815233600482015260240161079b565b63ffffffff8116600090815260016020526040812054806106ac576040517ff6ff4fb700000000000000000000000000000000000000000000000000000000815263ffffffff8416600482015260240161079b565b60405163f6ec1c4d60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063f6ec1c4d906115f29088908890600401612bcf565b600060405180830381600087803b15801561160c57600080fd5b505af1158015611620573d6000803e3d6000fd5b50505050857fcb469615696db7ded9e04049076cc20ba6156f4aea9a21ad1db7a94ddf8ff3a08686604051611656929190612bcf565b60405180910390a250505050505050565b600080600061167988888888886110ef565b91509150813410156116c0576040517fa458261b0000000000000000000000000000000000000000000000000000000081526004810183905234602482015260440161079b565b6040517f96f4e9f90000000000000000000000000000000000000000000000000000000081526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906396f4e9f9908490611729908c908690600401612b93565b60206040518083038185885af1158015611747573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061176c9190612bb6565b9250600061177a8334612bfe565b11156117945761179461178d8334612bfe565b3390611b8f565b505095945050505050565b6000806117e3878787878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250925061189e915050565b80519091508310156118375760405162461bcd60e51b815260206004820152601360248201527f4c5a5f494e53554646494349454e545f46454500000000000000000000000000604482015260640161079b565b6000611891888888888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250604080518082019091528c815260208101919091529250339150611c2b9050565b5198975050505050505050565b60408051808201909152600080825260208201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ddc28c586040518060a001604052808863ffffffff1681526020016119018961154f565b8152602001878152602001868152602001851515815250306040518363ffffffff1660e01b8152600401611936929190612c1f565b6040805180830381865afa158015611952573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119769190612cc8565b95945050505050565b63ffffffff8216600081815260016020908152604091829020849055815192835282018390527f238399d427b947898edb290f5ff0f9109849b1c3ba196a42e35f00c50a54b98b910160405180910390a15050565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008160400151806020019051810190611a569190612ce4565b60208084015167ffffffffffffffff1660009081526003825260408082206001600160a01b0385168352909252205490915060ff16611ac957602082015160405163a0280ae760e01b815267ffffffffffffffff90911660048201526001600160a01b038216602482015260440161079b565b606082015160405163f6ec1c4d60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163f6ec1c4d91611b199190600401612a26565b600060405180830381600087803b158015611b3357600080fd5b505af1158015611b47573d6000803e3d6000fd5b5050505081600001517fa76e8bfca7bc12668a76418f51e4b6a884e03734335e3ad93d4d6355af6497708360600151604051611b839190612a26565b60405180910390a25050565b80471015611bb25760405163cd78605960e01b815230600482015260240161079b565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611bff576040519150601f19603f3d011682016040523d82523d6000602084013e611c04565b606091505b5050905080611c2657604051630a12f52160e11b815260040160405180910390fd5b505050565b611c336120c2565b6000611c428460000151611d36565b602085015190915015611c5c57611c5c8460200151611d77565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632637a450826040518060a001604052808b63ffffffff168152602001611cac8c61154f565b81526020018a815260200189815260200160008960200151111515815250866040518463ffffffff1660e01b8152600401611ce8929190612c1f565b60806040518083038185885af1158015611d06573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611d2b9190612d01565b979650505050505050565b6000813414611d73576040517f9f70412000000000000000000000000000000000000000000000000000000000815234600482015260240161079b565b5090565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e4fe1d946040518163ffffffff1660e01b8152600401602060405180830381865afa158015611dd7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dfb9190612ce4565b90506001600160a01b038116611e3d576040517f5373352a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805133602482018190527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03818116604485015260648085018890528551808603909101815260849094019094526020830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000179052610f6d938516928690611ef0908590611ef6565b50505050565b6000611f0b6001600160a01b03841683611f72565b90508051600014158015611f30575080806020019051810190611f2e9190612d69565b155b15611c26576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b038416600482015260240161079b565b6060611f8083836000611f87565b9392505050565b606081471015611fac5760405163cd78605960e01b815230600482015260240161079b565b600080856001600160a01b03168486604051611fc89190612d86565b60006040518083038185875af1925050503d8060008114612005576040519150601f19603f3d011682016040523d82523d6000602084013e61200a565b606091505b509150915061201a868383612024565b9695505050505050565b6060826120395761203482612099565b611f80565b815115801561205057506001600160a01b0384163b155b15612092576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b038516600482015260240161079b565b5080611f80565b8051156120a95780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b604051806060016040528060008019168152602001600067ffffffffffffffff168152602001612105604051806040016040528060008152602001600081525090565b905290565b60006020828403121561211c57600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611f8057600080fd5b67ffffffffffffffff811681146110ec57600080fd5b803561216d8161214c565b919050565b6001600160a01b03811681146110ec57600080fd5b80151581146110ec57600080fd5b6000806000606084860312156121aa57600080fd5b83356121b58161214c565b925060208401356121c581612172565b915060408401356121d581612187565b809150509250925092565b600080604083850312156121f357600080fd5b82356121fe8161214c565b9150602083013561220e81612172565b809150509250929050565b60006060828403121561222b57600080fd5b50919050565b60008083601f84011261224357600080fd5b50813567ffffffffffffffff81111561225b57600080fd5b60208301915083602082850101111561227357600080fd5b9250929050565b600080600080600080600060e0888a03121561229557600080fd5b61229f8989612219565b965060608801359550608088013567ffffffffffffffff808211156122c357600080fd5b6122cf8b838c01612231565b909750955060a08a013591506122e482612172565b90935060c089013590808211156122fa57600080fd5b506123078a828b01612231565b989b979a50959850939692959293505050565b80356dffffffffffffffffffffffffffff8116811461216d57600080fd5b60008060008060006080868803121561235057600080fd5b853561235b8161214c565b9450602086013561236b81612172565b93506123796040870161231a565b9250606086013567ffffffffffffffff81111561239557600080fd5b6123a188828901612231565b969995985093965092949392505050565b60005b838110156123cd5781810151838201526020016123b5565b50506000910152565b600081518084526123ee8160208601602086016123b2565b601f01601f19169290920160200192915050565b6000815160a0845261241760a08501826123d6565b90506020808401518583038287015261243083826123d6565b60408681015188830389830152805180845290850195509092506000918401905b8083101561248357855180516001600160a01b0316835285015185830152948401946001929092019190830190612451565b50606087015194506124a060608901866001600160a01b03169052565b6080870151945087810360808901526124b981866123d6565b98975050505050505050565b8281526040602082015260006124de6040830184612402565b949350505050565b60008060008060008060a087890312156124ff57600080fd5b863561250a8161214c565b9550602087013561251a81612172565b9450604087013561252a81612172565b935060608701359250608087013567ffffffffffffffff81111561254d57600080fd5b61255989828a01612231565b979a9699509497509295939492505050565b60006020828403121561257d57600080fd5b8135611f8081612187565b600080600080600080600060c0888a0312156125a357600080fd5b87356125ae8161214c565b965060208801356125be81612172565b955060408801356125ce81612172565b945060608801356125de81612172565b93506080880135925060a088013567ffffffffffffffff81111561260157600080fd5b6123078a828b01612231565b803563ffffffff8116811461216d57600080fd5b6000806000806060858703121561263757600080fd5b6126408561260d565b935061264e6020860161231a565b9250604085013567ffffffffffffffff81111561266a57600080fd5b61267687828801612231565b95989497509550505050565b60008060008060008060a0878903121561269b57600080fd5b61250a8761260d565b600080604083850312156126b757600080fd5b6126c08361260d565b946020939093013593505050565b60008060008060a085870312156126e457600080fd5b6126ee8686612219565b9350606085013567ffffffffffffffff81111561270a57600080fd5b61271687828801612231565b909450925050608085013561272a81612172565b939692955090935050565b60006020828403121561274757600080fd5b813567ffffffffffffffff81111561275e57600080fd5b820160a08185031215611f8057600080fd5b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156127a9576127a9612770565b60405290565b60405160a0810167ffffffffffffffff811182821017156127a9576127a9612770565b604051601f8201601f1916810167ffffffffffffffff811182821017156127fb576127fb612770565b604052919050565b600067ffffffffffffffff82111561281d5761281d612770565b50601f01601f191660200190565b600082601f83011261283c57600080fd5b813561284f61284a82612803565b6127d2565b81815284602083860101111561286457600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060006080868803121561289957600080fd5b85356128a48161214c565b945060208601356128b481612172565b9350604086013567ffffffffffffffff808211156128d157600080fd5b6128dd89838a01612231565b909550935060608801359150808211156128f657600080fd5b506129038882890161282b565b9150509295509295909350565b60008060008060006080868803121561292857600080fd5b6129318661260d565b9450602086013561294181612172565b935060408601359250606086013567ffffffffffffffff81111561239557600080fd5b60006020828403121561297657600080fd5b611f808261260d565b60006020828403121561299157600080fd5b8135611f8081612172565b6000606082840312156129ae57600080fd5b611f808383612219565b6000602082840312156129ca57600080fd5b815167ffffffffffffffff8111156129e157600080fd5b8201601f810184136129f257600080fd5b8051612a0061284a82612803565b818152856020838501011115612a1557600080fd5b6119768260208301602086016123b2565b602081526000611f8060208301846123d6565b600082601f830112612a4a57600080fd5b8135602067ffffffffffffffff821115612a6657612a66612770565b612a74818360051b016127d2565b82815260069290921b84018101918181019086841115612a9357600080fd5b8286015b84811015612adb5760408189031215612ab05760008081fd5b612ab8612786565b8135612ac381612172565b81528185013585820152835291830191604001612a97565b509695505050505050565b600060a08236031215612af857600080fd5b612b006127af565b82358152612b1060208401612162565b6020820152604083013567ffffffffffffffff80821115612b3057600080fd5b612b3c3683870161282b565b60408401526060850135915080821115612b5557600080fd5b612b613683870161282b565b60608401526080850135915080821115612b7a57600080fd5b50612b8736828601612a39565b60808301525092915050565b67ffffffffffffffff831681526040602082015260006124de6040830184612402565b600060208284031215612bc857600080fd5b5051919050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b818103818111156106ac57634e487b7160e01b600052601160045260246000fd5b6040815263ffffffff8351166040820152602083015160608201526000604084015160a06080840152612c5560e08401826123d6565b90506060850151603f198483030160a0850152612c7282826123d6565b60809690960151151560c08501525050506001600160a01b039190911660209091015290565b600060408284031215612caa57600080fd5b612cb2612786565b9050815181526020820151602082015292915050565b600060408284031215612cda57600080fd5b611f808383612c98565b600060208284031215612cf657600080fd5b8151611f8081612172565b600060808284031215612d1357600080fd5b6040516060810181811067ffffffffffffffff82111715612d3657612d36612770565b604052825181526020830151612d4b8161214c565b6020820152612d5d8460408501612c98565b60408201529392505050565b600060208284031215612d7b57600080fd5b8151611f8081612187565b60008251612d988184602087016123b2565b919091019291505056fea2646970667358221220542a9713c6b3fdb9e33de458eb7634ecf9ff00e8aaf4695d8ae7fb216ad4bbfc64736f6c6343000818003300000000000000000000000034b03cb9086d7d758ac55af71584f81a598759fe00000000000000000000000023ae4fd8e7844cdbc97775496ebd0e82486560280000000000000000000000001a44076050125825900e736c501f859c50fe728c00000000000000000000000093d84313e1ce20f8441f4c591a501639de363ef9