0 txs
5.3k calls
constructor
No constructor.
functions
allowlistedRecipients
viewfunction allowlistedRecipients(uint64, address) view returns (bool)
allowlistedSenders
viewfunction allowlistedSenders(uint64, address) view returns (bool)
extraArgsPerChain
viewfunction extraArgsPerChain(uint64) view returns (bytes)
getFee
viewfunction getFee(uint64 _destinationChainSelector, address _destinationChainRecipient, bytes _distributionData, bytes _extraArgs, bool _payFeesInLink) view returns (uint256 fee)
getRouter
viewfunction getRouter() view returns (address)
owner
viewfunction owner() view returns (address)
paused
viewfunction paused() view returns (bool)
proxiableUUID
viewfunction proxiableUUID() view returns (bytes32)
s_linkToken
viewfunction s_linkToken() view returns (address)
s_rareToken
viewfunction s_rareToken() view returns (address)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
UPGRADE_INTERFACE_VERSION
viewfunction UPGRADE_INTERFACE_VERSION() view returns (string)
allowlistRecipient
nonpayablefunction allowlistRecipient(uint64 _destinationChainSelector, address _destinationChainRecipient, bool allowed)
allowlistSender
nonpayablefunction allowlistSender(uint64 _sourceChainSelector, address _sourceChainSender, bool allowed)
ccipReceive
nonpayablefunction ccipReceive(tuple message)
initialize
nonpayablefunction initialize(address _router, address _link, address _rare, address admin)
pause
nonpayablefunction pause()
renounceOwnership
nonpayablefunction renounceOwnership()
send
payablefunction send(uint64 _destinationChainSelector, address _destinationChainRecipient, bytes _distributionData, bytes _extraArgs, bool _payFeesInLink) payable
setExtraArgs
nonpayablefunction setExtraArgs(uint64 _destinationChainSelector, uint256 _gasLimit)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
unpause
nonpayablefunction unpause()
upgradeToAndCall
payablefunction upgradeToAndCall(address newImplementation, bytes data) payable
withdraw
nonpayablefunction withdraw(address _beneficiary)
events
ExtraArgsSet
event ExtraArgsSet(uint64 indexed destinationChainSelector, bytes extraArgs)
Initialized
event Initialized(uint64 version)
MessageReceived
event MessageReceived(bytes32 indexed messageId, uint64 indexed sourceChainSelector, address indexed sourceChainSender)
MessageSent
event MessageSent(bytes32 indexed messageId, uint64 indexed destinationChainSelector, address indexed destinationChainRecipient, uint256 fee, bool payFeesInLink)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
Paused
event Paused(address account)
RecipientAllowlisted
event RecipientAllowlisted(uint64 indexed destinationChainSelector, address indexed destinationChainRecipient, bool allowed)
SenderAllowlisted
event SenderAllowlisted(uint64 indexed sourceChainSelector, address indexed sourceChainSender, bool allowed)
Unpaused
event Unpaused(address account)
Upgraded
event Upgraded(address indexed implementation)
errors
AddressEmptyCode
error AddressEmptyCode(address target)
EnforcedPause
error EnforcedPause()
ERC1967InvalidImplementation
error ERC1967InvalidImplementation(address implementation)
ERC1967NonPayable
error ERC1967NonPayable()
ExpectedPause
error ExpectedPause()
FailedCall
error FailedCall()
FailedToWithdrawEth
error FailedToWithdrawEth(address sender, address beneficiary, uint256 amount)
InsufficientBalance
error InsufficientBalance(uint256 balance, uint256 needed)
InsufficientEthForFee
error InsufficientEthForFee(uint256 ethSent, uint256 fee)
InvalidInitialization
error InvalidInitialization()
InvalidRouter
error InvalidRouter(address router)
NothingToWithdraw
error NothingToWithdraw()
NotInAllowlist
error NotInAllowlist(uint64 chainSelector, address account)
NotInitializing
error NotInitializing()
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
RecipientsAndAmountsLengthMismatch
error RecipientsAndAmountsLengthMismatch()
RefundFailed
error RefundFailed(address recipient, uint256 amount)
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
UUPSUnauthorizedCallContext
error UUPSUnauthorizedCallContext()
UUPSUnsupportedProxiableUUID
error UUPSUnsupportedProxiableUUID(bytes32 slot)
ZeroAddressUnsupported
error ZeroAddressUnsupported()
creation bytecode
0x60a06040523060805234801562000014575f80fd5b506200001f62000025565b620000d9565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff1615620000765760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b0390811614620000d65780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051612981620001005f395f81816111c8015281816111f1015261136f01526129815ff3fe608060405260043610610186575f3560e01c806384823c90116100d1578063ad3cb1cc1161007c578063f039a00911610057578063f039a009146104b0578063f2fde38b146104cf578063f8c8765e146104ee575f80fd5b8063ad3cb1cc14610420578063b0f479a114610475578063bf02568114610491575f80fd5b806389590ca8116100ac57806389590ca8146103b25780638da5cb5b146103c5578063944da83314610401575f80fd5b806384823c901461033b57806385572ffb1461035a5780638899962714610379575f80fd5b8063569236eb11610131578063733c52f91161010c578063733c52f9146102d15780637725135b146103085780638456cb5914610327575f80fd5b8063569236eb146102685780635c975abb14610287578063715018a6146102bd575f80fd5b80634f1ef286116101615780634f1ef2861461021457806351cff8d91461022757806352d1902d14610246575f80fd5b806301ffc9a714610191578063039faeb0146101c55780633f4ba83a146101fe575f80fd5b3661018d57005b5f80fd5b34801561019c575f80fd5b506101b06101ab366004611f5c565b61050d565b60405190151581526020015b60405180910390f35b3480156101d0575f80fd5b506101b06101df366004611fcb565b600260209081525f928352604080842090915290825290205460ff1681565b348015610209575f80fd5b506102126105a5565b005b6102126102223660046120fd565b6105b7565b348015610232575f80fd5b5061021261024136600461214a565b6105d6565b348015610251575f80fd5b5061025a6106c4565b6040519081526020016101bc565b348015610273575f80fd5b50610212610282366004612165565b6106f2565b348015610292575f80fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff166101b0565b3480156102c8575f80fd5b506102126107e2565b3480156102dc575f80fd5b506005546102f0906001600160a01b031681565b6040516001600160a01b0390911681526020016101bc565b348015610313575f80fd5b506004546102f0906001600160a01b031681565b348015610332575f80fd5b506102126107f3565b348015610346575f80fd5b5061021261035536600461219a565b610803565b348015610365575f80fd5b506102126103743660046121e0565b610882565b348015610384575f80fd5b506101b0610393366004611fcb565b600160209081525f928352604080842090915290825290205460ff1681565b6102126103c0366004612217565b6108c2565b3480156103d0575f80fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03166102f0565b34801561040c575f80fd5b5061025a61041b366004612217565b610b9c565b34801561042b575f80fd5b506104686040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516101bc91906122fa565b348015610480575f80fd5b505f546001600160a01b03166102f0565b34801561049c575f80fd5b506104686104ab36600461230c565b610d6e565b3480156104bb575f80fd5b506102126104ca36600461219a565b610e05565b3480156104da575f80fd5b506102126104e936600461214a565b610e7b565b3480156104f9575f80fd5b50610212610508366004612325565b610ece565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f85572ffb00000000000000000000000000000000000000000000000000000000148061059f57507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b6105ad6110d7565b6105b561114b565b565b6105bf6111bd565b6105c882611274565b6105d2828261127c565b5050565b6105de6110d7565b475f819003610619576040517fd0d04f6000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114610662576040519150601f19603f3d011682016040523d82523d5f602084013e610667565b606091505b50509050806106bf576040517f9d11f5630000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b0384166024820152604481018390526064015b60405180910390fd5b505050565b5f6106cd611364565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b6106fa6110d7565b60408051602080820183529083905281516024808201859052835180830390910181526044909101909252810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f97a657c90000000000000000000000000000000000000000000000000000000017905267ffffffffffffffff83165f9081526003602052604090209061078e9082612401565b5067ffffffffffffffff82165f818152600360205260409081902090517f25f4887ac9329371411c2984321de49ca898b00baf4b256827a238b920b28033916107d6916124c1565b60405180910390a25050565b6107ea6110d7565b6105b55f6113ad565b6107fb6110d7565b6105b561142a565b61080b6110d7565b67ffffffffffffffff83165f8181526001602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917fee43ac303444b0c8d82e2405506aaa0bde910d74c0397efcd0c3e6753d544ca891015b60405180910390a3505050565b5f546001600160a01b031633146108ae576040516335fdcccd60e21b81523360048201526024016106b6565b6108bf6108ba82612601565b611485565b50565b67ffffffffffffffff85165f9081526001602090815260408083206001600160a01b03881684529091529020548590859060ff1661092e57604051630b15942d60e41b815267ffffffffffffffff831660048201526001600160a01b03821660248201526044016106b6565b61093661160e565b5f808680602001905181019061094c9190612705565b91509150805182511461098b576040517f441d33a100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f805b82518110156109c6578281815181106109a9576109a96127ba565b6020026020010151826109bc91906127e2565b915060010161098e565b506109d1338261166a565b6040805160a0810182526001600160a01b038b1660c0808301919091528251808303909101815260e082018352815260208082018b905282515f8082529181018452909282019083610a44565b604080518082019091525f8082526020820152815260200190600190039081610a1e5790505b50815260200188610a55575f610a62565b6004546001600160a01b03165b6001600160a01b031681526020015f8a5111610b1c5767ffffffffffffffff8d165f9081526003602052604090208054610a9b9061237e565b80601f0160208091040260200160405190810160405280929190818152602001828054610ac79061237e565b8015610b125780601f10610ae957610100808354040283529160200191610b12565b820191905f5260205f20905b815481529060010190602001808311610af557829003601f168201915b5050505050610b1e565b895b905290505f80610b2f8d848b611682565b915091508b6001600160a01b03168d67ffffffffffffffff16837f1db8b02534131df99195eac316e72e12017fac36b8abdecd97b7d93b39bf7bca848d604051610b859291909182521515602082015260400190565b60405180910390a450505050505050505050505050565b6040805160a081019091526001600160a01b03851660c08201525f9081908060e0810160408051808303601f19018152918152908252602080830189905281515f8082529181018352929091019190610c16565b604080518082019091525f8082526020820152815260200190600190039081610bf05790505b50815260200184610c27575f610c34565b6004546001600160a01b03165b6001600160a01b031681526020015f865111610cee5767ffffffffffffffff89165f9081526003602052604090208054610c6d9061237e565b80601f0160208091040260200160405190810160405280929190818152602001828054610c999061237e565b8015610ce45780601f10610cbb57610100808354040283529160200191610ce4565b820191905f5260205f20905b815481529060010190602001808311610cc757829003601f168201915b5050505050610cf0565b855b90525f546040516320487ded60e01b81529192506001600160a01b0316906320487ded90610d24908a9085906004016127f5565b602060405180830381865afa158015610d3f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d6391906128d0565b979650505050505050565b60036020525f908152604090208054610d869061237e565b80601f0160208091040260200160405190810160405280929190818152602001828054610db29061237e565b8015610dfd5780601f10610dd457610100808354040283529160200191610dfd565b820191905f5260205f20905b815481529060010190602001808311610de057829003601f168201915b505050505081565b610e0d6110d7565b67ffffffffffffffff83165f8181526002602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f9a239a399a3630c36025f8c4b64b701240016edc1e1fdb83741c0c52f5d743d79101610875565b610e836110d7565b6001600160a01b038116610ec5576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f60048201526024016106b6565b6108bf816113ad565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff165f81158015610f185750825b90505f8267ffffffffffffffff166001148015610f345750303b155b905081158015610f42575080155b15610f79576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610fad57845468ff00000000000000001916680100000000000000001785555b6001600160a01b038916610fd457604051637827912560e01b815260040160405180910390fd5b6001600160a01b038816610ffb57604051637827912560e01b815260040160405180910390fd5b6001600160a01b03871661102257604051637827912560e01b815260040160405180910390fd5b61102b89611988565b6110336119f0565b61103c86611a00565b611044611a11565b600480546001600160a01b03808b1673ffffffffffffffffffffffffffffffffffffffff199283161790925560058054928a169290911691909117905583156110cc57845468ff000000000000000019168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050505050565b336111097f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146105b5576040517f118cdaa70000000000000000000000000000000000000000000000000000000081523360048201526024016106b6565b611153611a19565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300805460ff191681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061125657507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661124a7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b156105b55760405163703e46dd60e11b815260040160405180910390fd5b6108bf6110d7565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156112d6575060408051601f3d908101601f191682019092526112d3918101906128d0565b60015b6112fe57604051634c9c8ce360e01b81526001600160a01b03831660048201526024016106b6565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc811461135a576040517faa1d49a4000000000000000000000000000000000000000000000000000000008152600481018290526024016106b6565b6106bf8383611a74565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105b55760405163703e46dd60e11b815260040160405180910390fd5b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300805473ffffffffffffffffffffffffffffffffffffffff1981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b61143261160e565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300805460ff191660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2583361119f565b5f546001600160a01b031633146114b1576040516335fdcccd60e21b81523360048201526024016106b6565b806020015181604001518060200190518101906114ce91906128e7565b67ffffffffffffffff82165f9081526002602090815260408083206001600160a01b038516845290915290205460ff1661153657604051630b15942d60e41b815267ffffffffffffffff831660048201526001600160a01b03821660248201526044016106b6565b5f8084606001518060200190518101906115509190612705565b815191935091505f5b818110156115a55761159d848281518110611576576115766127ba565b6020026020010151848381518110611590576115906127ba565b6020026020010151611ac9565b600101611559565b5085604001518060200190518101906115be91906128e7565b6001600160a01b0316866020015167ffffffffffffffff16875f01517fcde44b4f1d4a51abfed5cbe2b4ae24632539d99980c5988af6d4e2eb990c235a60405160405180910390a4505050505050565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16156105b5576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6005546105d2906001600160a01b0316833084611ae0565b5f80546040516320487ded60e01b815282916001600160a01b0316906320487ded906116b490889088906004016127f5565b602060405180830381865afa1580156116cf573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116f391906128d0565b9050821561181c57600454611713906001600160a01b0316333084611ae0565b600480545f546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182169381019390935260248301849052169063095ea7b3906044016020604051808303815f875af115801561177f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117a39190612902565b505f546040516396f4e9f960e01b81526001600160a01b03909116906396f4e9f9906117d590889088906004016127f5565b6020604051808303815f875af11580156117f1573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061181591906128d0565b9150611980565b8034101561185f576040517fc9f9b36f000000000000000000000000000000000000000000000000000000008152346004820152602481018290526044016106b6565b5f546040516396f4e9f960e01b81526001600160a01b03909116906396f4e9f990839061189290899089906004016127f5565b60206040518083038185885af11580156118ae573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906118d391906128d0565b915080341115611980575f336118e9833461291d565b6040515f81818185875af1925050503d805f8114611922576040519150601f19603f3d011682016040523d82523d5f602084013e611927565b606091505b505090508061197e573361193b833461291d565b6040517faf73b0b20000000000000000000000000000000000000000000000000000000081526001600160a01b03909216600483015260248201526044016106b6565b505b935093915050565b611990611b62565b6001600160a01b0381166119c2576040516335fdcccd60e21b81526001600160a01b03821660048201526024016106b6565b5f805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6119f8611b62565b6105b5611bc9565b611a08611b62565b6108bf81611bfc565b6105b5611b62565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff166105b5576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611a7d82611c04565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a2805115611ac1576106bf8282611c87565b6105d2611cf9565b6005546105d2906001600160a01b03168383611d31565b6040516001600160a01b038481166024830152838116604483015260648201839052611b5c9186918216906323b872dd906084015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611d62565b50505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166105b5576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611bd1611b62565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300805460ff19169055565b610e83611b62565b806001600160a01b03163b5f03611c3957604051634c9c8ce360e01b81526001600160a01b03821660048201526024016106b6565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b60605f80846001600160a01b031684604051611ca39190612930565b5f60405180830381855af49150503d805f8114611cdb576040519150601f19603f3d011682016040523d82523d5f602084013e611ce0565b606091505b5091509150611cf0858383611ddc565b95945050505050565b34156105b5576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040516001600160a01b038381166024830152604482018390526106bf91859182169063a9059cbb90606401611b15565b5f611d766001600160a01b03841683611e54565b905080515f14158015611d9a575080806020019051810190611d989190612902565b155b156106bf576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024016106b6565b606082611df157611dec82611e61565b611e4d565b8151158015611e0857506001600160a01b0384163b155b15611e4a576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016106b6565b50805b9392505050565b6060611e4d83835f611ea3565b805115611e715780518082602001fd5b6040517fd6bda27500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606081471015611ee8576040517fcf479181000000000000000000000000000000000000000000000000000000008152476004820152602481018390526044016106b6565b5f80856001600160a01b03168486604051611f039190612930565b5f6040518083038185875af1925050503d805f8114611f3d576040519150601f19603f3d011682016040523d82523d5f602084013e611f42565b606091505b5091509150611f52868383611ddc565b9695505050505050565b5f60208284031215611f6c575f80fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611e4d575f80fd5b803567ffffffffffffffff81168114611fb2575f80fd5b919050565b6001600160a01b03811681146108bf575f80fd5b5f8060408385031215611fdc575f80fd5b611fe583611f9b565b91506020830135611ff581611fb7565b809150509250929050565b634e487b7160e01b5f52604160045260245ffd5b6040805190810167ffffffffffffffff8111828210171561203757612037612000565b60405290565b60405160a0810167ffffffffffffffff8111828210171561203757612037612000565b604051601f8201601f1916810167ffffffffffffffff8111828210171561208957612089612000565b604052919050565b5f82601f8301126120a0575f80fd5b813567ffffffffffffffff8111156120ba576120ba612000565b6120cd601f8201601f1916602001612060565b8181528460208386010111156120e1575f80fd5b816020850160208301375f918101602001919091529392505050565b5f806040838503121561210e575f80fd5b823561211981611fb7565b9150602083013567ffffffffffffffff811115612134575f80fd5b61214085828601612091565b9150509250929050565b5f6020828403121561215a575f80fd5b8135611e4d81611fb7565b5f8060408385031215612176575f80fd5b61217f83611f9b565b946020939093013593505050565b80151581146108bf575f80fd5b5f805f606084860312156121ac575f80fd5b6121b584611f9b565b925060208401356121c581611fb7565b915060408401356121d58161218d565b809150509250925092565b5f602082840312156121f0575f80fd5b813567ffffffffffffffff811115612206575f80fd5b820160a08185031215611e4d575f80fd5b5f805f805f60a0868803121561222b575f80fd5b61223486611f9b565b9450602086013561224481611fb7565b9350604086013567ffffffffffffffff80821115612260575f80fd5b61226c89838a01612091565b94506060880135915080821115612281575f80fd5b5061228e88828901612091565b925050608086013561229f8161218d565b809150509295509295909350565b5f5b838110156122c75781810151838201526020016122af565b50505f910152565b5f81518084526122e68160208601602086016122ad565b601f01601f19169290920160200192915050565b602081525f611e4d60208301846122cf565b5f6020828403121561231c575f80fd5b611e4d82611f9b565b5f805f8060808587031215612338575f80fd5b843561234381611fb7565b9350602085013561235381611fb7565b9250604085013561236381611fb7565b9150606085013561237381611fb7565b939692955090935050565b600181811c9082168061239257607f821691505b6020821081036123b057634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156106bf57805f5260205f20601f840160051c810160208510156123db5750805b601f840160051c820191505b818110156123fa575f81556001016123e7565b5050505050565b815167ffffffffffffffff81111561241b5761241b612000565b61242f81612429845461237e565b846123b6565b602080601f831160018114612462575f841561244b5750858301515b5f19600386901b1c1916600185901b1785556124b9565b5f85815260208120601f198616915b8281101561249057888601518255948401946001909101908401612471565b50858210156124ad57878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b5f60208083525f84546124d38161237e565b806020870152604060018084165f81146124f457600181146125105761253d565b60ff19851660408a0152604084151560051b8a0101955061253d565b895f5260205f205f5b858110156125345781548b8201860152908301908801612519565b8a016040019650505b509398975050505050505050565b5f67ffffffffffffffff82111561256457612564612000565b5060051b60200190565b5f82601f83011261257d575f80fd5b8135602061259261258d8361254b565b612060565b82815260069290921b840181019181810190868411156125b0575f80fd5b8286015b848110156125f657604081890312156125cb575f80fd5b6125d3612014565b81356125de81611fb7565b815281850135858201528352918301916040016125b4565b509695505050505050565b5f60a08236031215612611575f80fd5b61261961203d565b8235815261262960208401611f9b565b6020820152604083013567ffffffffffffffff80821115612648575f80fd5b61265436838701612091565b6040840152606085013591508082111561266c575f80fd5b61267836838701612091565b60608401526080850135915080821115612690575f80fd5b5061269d3682860161256e565b60808301525092915050565b5f82601f8301126126b8575f80fd5b815160206126c861258d8361254b565b8083825260208201915060208460051b8701019350868411156126e9575f80fd5b602086015b848110156125f657805183529183019183016126ee565b5f8060408385031215612716575f80fd5b825167ffffffffffffffff8082111561272d575f80fd5b818501915085601f830112612740575f80fd5b8151602061275061258d8361254b565b82815260059290921b8401810191818101908984111561276e575f80fd5b948201945b8386101561279557855161278681611fb7565b82529482019490820190612773565b918801519196509093505050808211156127ad575f80fd5b50612140858286016126a9565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b8082018082111561059f5761059f6127ce565b5f604067ffffffffffffffff851683526020604081850152845160a0604086015261282360e08601826122cf565b905081860151603f198087840301606088015261284083836122cf565b6040890151888203830160808a0152805180835290860194505f9350908501905b8084101561289357845180516001600160a01b0316835286015186830152938501936001939093019290860190612861565b5060608901516001600160a01b031660a08901526080890151888203830160c08a015295506128c281876122cf565b9a9950505050505050505050565b5f602082840312156128e0575f80fd5b5051919050565b5f602082840312156128f7575f80fd5b8151611e4d81611fb7565b5f60208284031215612912575f80fd5b8151611e4d8161218d565b8181038181111561059f5761059f6127ce565b5f82516129418184602087016122ad565b919091019291505056fea2646970667358221220939946a99c7ad89c46e9fe90f7384b5ebc3eb5d321384c802d2a434f51e783ec64736f6c63430008180033