0 txs
0 calls
constructor
constructor(address wormhole)
functions
getDefaultDeliveryProvider
viewfunction getDefaultDeliveryProvider() view returns (address deliveryProvider)
getDefaultDeliveryProviderOnChain
viewfunction getDefaultDeliveryProviderOnChain(uint16 targetChain) view returns (address deliveryProvider)
getOriginalOrDefaultDeliveryProvider
viewfunction getOriginalOrDefaultDeliveryProvider(uint16 targetChain) view returns (address deliveryProvider, address deliveryProviderOnTarget)
getRegisteredWormholeRelayerContract
viewfunction getRegisteredWormholeRelayerContract(uint16 chainId) view returns (bytes32)
quoteDeliveryPrice
viewfunction quoteDeliveryPrice(uint16 targetChain, uint256 receiverValue, bytes encodedExecutionParameters, address deliveryProviderAddress) view returns (uint256 nativePriceQuote, bytes encodedExecutionInfo)
quoteEVMDeliveryPrice
viewfunction quoteEVMDeliveryPrice(uint16 targetChain, uint256 receiverValue, uint256 gasLimit, address deliveryProviderAddress) view returns (uint256 nativePriceQuote, uint256 targetChainRefundPerGasUnused)
quoteEVMDeliveryPrice
viewfunction quoteEVMDeliveryPrice(uint16 targetChain, uint256 receiverValue, uint256 gasLimit) view returns (uint256 nativePriceQuote, uint256 targetChainRefundPerGasUnused)
quoteNativeForChain
viewfunction quoteNativeForChain(uint16 targetChain, uint256 currentChainAmount, address deliveryProviderAddress) view returns (uint256 targetChainAmount)
checkAndExecuteUpgradeMigration
nonpayablefunction checkAndExecuteUpgradeMigration()
deliver
payablefunction deliver(bytes[] encodedVMs, bytes encodedDeliveryVAA, address relayerRefundAddress, bytes deliveryOverrides) payable
executeInstruction
nonpayablefunction executeInstruction(tuple evmInstruction) returns (uint8 status, uint256 gasUsed, bytes targetRevertDataTruncated)
forward
payablefunction forward(uint16 targetChain, bytes32 targetAddress, bytes payload, uint256 receiverValue, uint256 paymentForExtraReceiverValue, bytes encodedExecutionParameters, uint16 refundChain, bytes32 refundAddress, address deliveryProviderAddress, tuple[] vaaKeys, uint8 consistencyLevel) payable
forwardPayloadToEvm
payablefunction forwardPayloadToEvm(uint16 targetChain, address targetAddress, bytes payload, uint256 receiverValue, uint256 gasLimit) payable
forwardToEvm
payablefunction forwardToEvm(uint16 targetChain, address targetAddress, bytes payload, uint256 receiverValue, uint256 paymentForExtraReceiverValue, uint256 gasLimit, uint16 refundChain, address refundAddress, address deliveryProviderAddress, tuple[] vaaKeys, uint8 consistencyLevel) payable
forwardVaasToEvm
payablefunction forwardVaasToEvm(uint16 targetChain, address targetAddress, bytes payload, uint256 receiverValue, uint256 gasLimit, tuple[] vaaKeys) payable
initialize
nonpayablefunction initialize(address defaultDeliveryProvider)
registerWormholeRelayerContract
nonpayablefunction registerWormholeRelayerContract(bytes encodedVm)
resend
payablefunction resend(tuple deliveryVaaKey, uint16 targetChain, uint256 newReceiverValue, bytes newEncodedExecutionParameters, address newDeliveryProviderAddress) payable returns (uint64 sequence)
resendToEvm
payablefunction resendToEvm(tuple deliveryVaaKey, uint16 targetChain, uint256 newReceiverValue, uint256 newGasLimit, address newDeliveryProviderAddress) payable returns (uint64 sequence)
send
payablefunction send(uint16 targetChain, bytes32 targetAddress, bytes payload, uint256 receiverValue, uint256 paymentForExtraReceiverValue, bytes encodedExecutionParameters, uint16 refundChain, bytes32 refundAddress, address deliveryProviderAddress, tuple[] vaaKeys, uint8 consistencyLevel) payable returns (uint64 sequence)
sendPayloadToEvm
payablefunction sendPayloadToEvm(uint16 targetChain, address targetAddress, bytes payload, uint256 receiverValue, uint256 gasLimit, uint16 refundChain, address refundAddress) payable returns (uint64 sequence)
sendPayloadToEvm
payablefunction sendPayloadToEvm(uint16 targetChain, address targetAddress, bytes payload, uint256 receiverValue, uint256 gasLimit) payable returns (uint64 sequence)
sendToEvm
payablefunction sendToEvm(uint16 targetChain, address targetAddress, bytes payload, uint256 receiverValue, uint256 paymentForExtraReceiverValue, uint256 gasLimit, uint16 refundChain, address refundAddress, address deliveryProviderAddress, tuple[] vaaKeys, uint8 consistencyLevel) payable returns (uint64 sequence)
sendVaasToEvm
payablefunction sendVaasToEvm(uint16 targetChain, address targetAddress, bytes payload, uint256 receiverValue, uint256 gasLimit, tuple[] vaaKeys, uint16 refundChain, address refundAddress) payable returns (uint64 sequence)
sendVaasToEvm
payablefunction sendVaasToEvm(uint16 targetChain, address targetAddress, bytes payload, uint256 receiverValue, uint256 gasLimit, tuple[] vaaKeys) payable returns (uint64 sequence)
setDefaultDeliveryProvider
nonpayablefunction setDefaultDeliveryProvider(bytes encodedVm)
submitContractUpgrade
nonpayablefunction submitContractUpgrade(bytes encodedVm)
events
AdminChanged
event AdminChanged(address previousAdmin, address newAdmin)
BeaconUpgraded
event BeaconUpgraded(address indexed beacon)
ContractUpgraded
event ContractUpgraded(address indexed oldContract, address indexed newContract)
Delivery
event Delivery(address indexed recipientContract, uint16 indexed sourceChain, uint64 indexed sequence, bytes32 deliveryVaaHash, uint8 status, uint256 gasUsed, uint8 refundStatus, bytes additionalStatusInfo, bytes overridesInfo)
SendEvent
event SendEvent(uint64 indexed sequence, uint256 deliveryQuote, uint256 paymentForExtraReceiverValue)
Upgraded
event Upgraded(address indexed implementation)
errors
Cancelled
error Cancelled(uint256 gasUsed, uint256 available, uint256 required)
ChainAlreadyRegistered
error ChainAlreadyRegistered(uint16 chainId, bytes32 registeredWormholeRelayerContract)
ContractUpgradeFailed
error ContractUpgradeFailed(bytes failure)
DeliveryProviderCannotReceivePayment
error DeliveryProviderCannotReceivePayment()
DeliveryProviderDoesNotSupportTargetChain
error DeliveryProviderDoesNotSupportTargetChain(address relayer, uint16 chainId)
DeliveryProviderPaymentFailed
error DeliveryProviderPaymentFailed(uint256 gasUsed)
DeliveryProviderReverted
error DeliveryProviderReverted(uint256 gasUsed)
ForwardRequestFromWrongAddress
error ForwardRequestFromWrongAddress(address msgSender, address deliveryTarget)
GovernanceActionAlreadyConsumed
error GovernanceActionAlreadyConsumed(bytes32 hash)
InsufficientRelayerFunds
error InsufficientRelayerFunds(uint256 msgValue, uint256 minimum)
InvalidDefaultDeliveryProvider
error InvalidDefaultDeliveryProvider(bytes32 defaultDeliveryProvider)
InvalidDeliveryVaa
error InvalidDeliveryVaa(string reason)
InvalidEmitter
error InvalidEmitter(bytes32 emitter, bytes32 registered, uint16 chainId)
InvalidFork
error InvalidFork()
InvalidGovernanceChainId
error InvalidGovernanceChainId(uint16 parsed, uint16 expected)
InvalidGovernanceContract
error InvalidGovernanceContract(bytes32 parsed, bytes32 expected)
InvalidGovernanceVM
error InvalidGovernanceVM(string reason)
InvalidMsgValue
error InvalidMsgValue(uint256 msgValue, uint256 totalFee)
InvalidOverrideGasLimit
error InvalidOverrideGasLimit()
InvalidOverrideReceiverValue
error InvalidOverrideReceiverValue()
InvalidOverrideRefundPerGasUnused
error InvalidOverrideRefundPerGasUnused()
InvalidPayloadAction
error InvalidPayloadAction(uint8 parsed, uint8 expected)
InvalidPayloadChainId
error InvalidPayloadChainId(uint16 parsed, uint16 expected)
InvalidPayloadId
error InvalidPayloadId(uint8 parsed, uint8 expected)
InvalidPayloadLength
error InvalidPayloadLength(uint256 received, uint256 expected)
InvalidPayloadModule
error InvalidPayloadModule(bytes32 parsed, bytes32 expected)
NoDeliveryInProgress
error NoDeliveryInProgress()
NotAnEvmAddress
error NotAnEvmAddress(bytes32)
ReentrantDelivery
error ReentrantDelivery(address msgSender, address lockedBy)
RequesterNotWormholeRelayer
error RequesterNotWormholeRelayer()
TargetChainIsNotThisChain
error TargetChainIsNotThisChain(uint16 targetChain)
UnexpectedExecutionInfoVersion
error UnexpectedExecutionInfoVersion(uint8 version, uint8 expectedVersion)
VaaKeysDoNotMatchVaas
error VaaKeysDoNotMatchVaas(uint8 index)
VaaKeysLengthDoesNotMatchVaasLength
error VaaKeysLengthDoesNotMatchVaasLength(uint256 keys, uint256 vaas)
VersionMismatchOverride
error VersionMismatchOverride(uint8 instructionVersion, uint8 overrideVersion)
creation bytecode
0x60c080604052346200013f5760208162005614803803809162000023828562000144565b8339810103126200013f57516001600160a01b038116908190036200013f5760208160049260805260405192838092634d4502c960e11b82525afa9081156200013357600091620000e9575b5060a05260405161549590816200017f8239608051818181610415015281816106fa015281816114740152818161182501528181611bc801528181612f9a0152818161304d0152818161356a0152614ad8015260a05181818161067f015281816114ad0152818161186501528181611c0901526132060152f35b6020813d82116200012a575b81620001046020938362000144565b810103126200012657519061ffff82168203620001235750386200006f565b80fd5b5080fd5b3d9150620000f5565b6040513d6000823e3d90fd5b600080fd5b601f909101601f19168101906001600160401b038211908210176200016857604052565b634e487b7160e01b600052604160045260246000fdfe6080604052600436101561001257600080fd5b60003560e01c80631d6bd5aa14611d705780632385904a14611cca57806324320c9f14611c9457806328b1d85214611ad55780632936558f14611aa05780632c75470f14611a84578063329a2be714611a4857806332b2fc0e146119a65780633a2c767d146119675780633e8267e71461190d5780633ed334df146116f45780634533e5ff1461167f5780634b5ca6f4146115eb5780634d48ec601461158a5780635cb8cae2146112755780636000415714610cb657806375ea8b5814610c9857806380ebabd014610c645780638b0301b114610c165780638fecdd0214610bca578063a60eb4c81461036b578063a79629d8146102fc578063b1eac8751461028e578063b686d0891461022e578063c23ee3c3146101dd578063c4d66de8146101765763c81fb7fe1461014557600080fd5b6020610165610153366122c6565b99989098979197969296959395613c23565b6001600160401b0360405191168152f35b346101d85760203660031901126101d8576004356001600160a01b038116908190036101d85760016000546101ae60ff821615612366565b60ff1916176000556000805160206153c083398151915280546001600160a01b0319169091179055005b600080fd5b346101d85760603660031901126101d85760406102226101fb611dad565b6000805160206153c0833981519152546001600160a01b0316906044359060243590614e29565b82519182526020820152f35b60e03660031901126101d85761024336611f90565b61024b611dbe565b60a4356001600160401b03918282116101d857602093610272610285933690600401611f32565b9061027b611df4565b9260843591614913565b60405191168152f35b6102fa61029a36612083565b94916102c26102ac8496959396614d3a565b5095604051906102bb82611e20565b81526134c9565b9161ffff6000805160206154008339815191525460a01c1693600080516020615440833981519152549560018060a01b031690613efb565b005b346101d85760803660031901126101d857610315611dad565b604435906001600160401b0382116101d85761033861034a923690600401611f32565b610340611e0a565b9160243590614e59565b9061036760405192839283526040602084015260408301906122a1565b0390f35b60803660031901126101d8576004356001600160401b0381116101d8576103969036906004016121fe565b6024356001600160401b0381116101d8576103b5903690600401611f32565b906044356001600160a01b03811681036101d857606435926001600160401b0384116101d85760006103ee610411953690600401611f32565b916040518096819263607ec5ef60e11b83526020600484015260248301906122a1565b03817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa80156107ff57600094600090600092610b9f575b5015610b7a5750606084015161ffff1660009081527f9e4e57806ba004485cfae8ca22fb13380f01c10b1b0ccf48c20464961643cf6d6020526040902054608085015190808203610b4d5750506104ad60e085015161509b565b916104bb602084015161263d565b6104c961010085015161263d565b60c085015160e0860151926000805160206153e0833981519152549060ff8216610b2257906001916101008360a81b039060081b16906001600160581b0360a81b1617176000805160206153e083398151915255600080516020615400833981519152549061ffff60a01b9060a01b169160018060a01b03169069ffffffffffffffffffff60b01b161717600080516020615400833981519152556000805160206154408339815191525561ffff606086015116946101406001600160401b0360a08301511691015190604051966105a088611e6d565b87526020870152604086015260018060a01b031660608501528260808501528160a0850152600060c0850152600060e0850152600061010085015280610120850152600061014085015260006105f960a08401516126da565b610602816126ba565b80610ae9575061061560a0840151612720565b9180516109bb575b5061065f9082602061066b945191015191610641606087015160808801519061261d565b906101408901526101008801528160e08801528060c088015261262a565b6101008501519061261d565b80341061099e575061ffff8151168061ffff7f0000000000000000000000000000000000000000000000000000000000000000160361098657506101600151908151815180820361096857505060005b825181101561080b576106f660006106d38385612f71565b516040518093819263a9e1189360e01b83526020600484015260248301906122a1565b03817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa9081156107ff576000916107be575b5061073e8285612f71565b519061ffff82511661ffff60608301511614918215926107ab575b821561078a575b505061076e576001016106bb565b604051633ad7858760e21b815260ff9091166004820152602490fd5b6001600160401b0380929350604060a0920151169201511614158580610760565b6020810151608083015114159250610759565b3d9150816000823e6107d08282611ef6565b60208183810103126101d85780516001600160401b0381116101d8576107f99282019101612416565b85610733565b6040513d6000823e3d90fd5b610814846127b4565b6001600160581b0360a81b6000805160206153e083398151915254166000805160206153e08339815191525569ffffffffffffffffffff60b01b6000805160206154008339815191525416600080516020615400833981519152556000600080516020615440833981519152556000805160206154208339815191528054600082558061089d57005b6005918183029183830403610952576000527f3956f3466fff97ca672672c3102a70900b3589f53a1cac769d9a51ee18555a4f908101905b8181106108de57005b806108ea849254612669565b80610913575b5060006001820155600060028201556000600382015560006004820155016108d5565b601f9081811160011461092d575050600081555b846108f0565b610949600092848452602084209201851c8201600183016126a3565b81835555610927565b634e487b7160e01b600052601160045260246000fd5b60449250604051916316bde1ed60e31b835260048301526024820152fd5b6024906040519063d8215fc960e01b82526004820152fd5b60449060405190620885af60e61b82523460048301526024820152fd5b9050610a16604051916109cd83611e89565b60008352606060208401526000604084015260206109ea8261538c565b6109fc828083860101519201846152f9565b9190838701528282850101516040870152855201906137de565b6060830151610a236126f7565b50815110610ad757610a3860208201516126da565b610a41816126ba565b80610aac5750610a546020820151612720565b918151906020840151602082015111610a9a578351905111610a88576060840152600060808401526040015161066b61061d565b6040516315fc687d60e31b8152600490fd5b60405163067dbecf60e11b8152600490fd5b80610ab86044926126ba565b60ff6040519163170cd96160e11b835260006004840152166024820152fd5b604051631c6e090160e31b8152600490fd5b80610af6610b1e926126ba565b60405163c1f4bdd960e01b815260ff9091166004820152600060248201529081906044820190565b0390fd5b6040516320b84ced60e01b81523360048201526001600160a01b03600884901c166024820152604490fd5b6064925061ffff6060870151169060405192633bb6036760e11b8452600484015260248301526044820152fd5b60405163b72c3b7f60e01b815260206004820152908190610b1e9060248301906122a1565b915050610bc09194503d806000833e610bb88183611ef6565b8101906125bd565b9094919486610453565b6020610165610bd8366121a6565b610be58592939495614cb1565b9260018060a01b036000805160206153c083398151915254169460405196610c0c88611e20565b6000885284613809565b60e03660031901126101d8576020610165610c3036611f90565b610c38611dbe565b610c40611df4565b91610c5a604051610c5081611e20565b60a43581526134c9565b9160843591614913565b346101d85760803660031901126101d8576040610222610c82611dad565b610c8a611e0a565b906044359060243590614e29565b6102fa610ca4366122c6565b99989098979197969296959395614459565b346101d8576003196020368201126101d857600435906001600160401b03908183116101d8576101209083360301126101d85760405190610cf682611e51565b610d0283600401611dcf565b825260208201926024810135845260448101358281116101d857610d2c9060043691840101611f32565b91604084019283526060840191606481013583526084810135608086015260a481013560a086015260c085019160c4820135835260e086019160e481013583526101048101359182116101d8576004610d8892369201016121fe565b92610100860193845230330361126357519551610de9939192906001600160a01b0390610db49061263d565b169451915190519261ffff87511690519060405195869463294ee51960e11b602087015260a0602487015260c48601906122a1565b94602319858703016044860152835180875260208701966020808360051b8301019601976000915b83831061122c57505050506064850152608484015260a483015203601f1981018352610e3e915082611ef6565b610e8460845a926080860151948151906040519660208089019401918af1923d80608410600114611224575b808252601f01601f19168101602001604052915a90612dfc565b8481101561121c57915b1561120b5750604051610ea081611e20565b6000815292600092600080516020615420833981519152549182610ee9575b50505060ff92610367915b60405194859416845260208401526060604084015260608301906122a1565b839450610efc610f05939460a092612dfc565b9101519061262a565b90610f0e612f85565b90610f1881611f79565b92610f266040519485611ef6565b818452601f19610f3583611f79565b0160005b8181106111f4575050600080916000935b8581861061117d575050610f5f92935061261d565b9080821061115957610fd360206001600160a01b03610f8b610120610f8389612f64565b51015161263d565b1661ffff610f9888612f64565b51511690610fa68587612dfc565b604051630cbcf9e160e21b815261ffff909316600484015260248301529092839190829081906044820190565b03915afa60009181611125575b50610ffe57604051632baa6b8960e11b815260048101879052602490fd5b61101890959495608061101088612f64565b51015161261d565b608061102387612f64565b51015260005b6000805160206154208339815191525481101561110f576110c8600261104e83612e62565b500154600361105c84612e62565b50015461107d84159182600014611107576110778789612dfc565b9061261d565b90156110f05761109561108f8a612f64565b51614ecc565b60ff60046110a287612e62565b50015460a01c16916110b386612e62565b50600401546001600160a01b03169389613007565b9050156110d757600101611029565b6040516336e7e91f60e11b815260048101869052602490fd5b6111026110fc85612e62565b50612ec0565b611095565b60009061261d565b5060039450859250610367915060ff9050610ebf565b9091506020813d602011611151575b8161114160209383611ef6565b810103126101d857519088610fe0565b3d9150611134565b8490606492604051926385880e2960e01b8452600484015260248301526044820152fd5b6111e9906111e46111d96111a26001959697866111998c612e62565b5001549061261d565b978b6111c28b6111bc6111b76110fc83612e62565b61509b565b92612f71565b526111cd8a8d612f71565b5060026111998b612e62565b60036111998a612e62565b61261d565b940193929190610f4a565b6020906111ff612e09565b82828901015201610f39565b60ff93506001925061036791610eca565b508391610e8e565b506084610e6a565b919395975091939560208061124d600193601f198682030187528c516122a1565b9a01930193019092899795939896949298610e11565b60405163390996ad60e11b8152600490fd5b346101d8576020806003193601126101d8576004356001600160401b0381116101d8576112a6903690600401611f32565b60018060a01b03917f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc926112dd8185541693613560565b828101516e576f726d686f6c6552656c6179657280820361156c57505060ff6021820151166002810361154d5750602381015161ffff90818116801580611545575b15611460575b50505061133e611338604383015161263d565b916137b3565b803b15611405571692836bffffffffffffffffffffffff60a01b825416179055600080604051857fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b8380a2632c75470f60e01b81850190815260048252906113a581611edb565b519082305af1906113b4612784565b91156113e35750507f2e4cc16c100f0b55e2df82ab0b1a7e294aa9cbd01b48fbaf622683fbc0507a49600080a3005b610b1e60405192839263135687c760e31b8452600484015260248301906122a1565b60405162461bcd60e51b815260048101849052602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608490fd5b60405163380e7c8960e21b815286816004817f00000000000000000000000000000000000000000000000000000000000000008a165afa9081156107ff57600091611510575b506114fe577f0000000000000000000000000000000000000000000000000000000000000000928316036114da5780611325565b60405163901f6ae360e01b815261ffff918216600482015291166024820152604490fd5b60405163ea03b6eb60e01b8152600490fd5b90508681813d831161153e575b6115278183611ef6565b810103126101d857611538906125b0565b896114a6565b503d61151d565b50600061131f565b60449060405190633460202560e21b8252600482015260026024820152fd5b6044925060405191633d254c6160e01b835260048301526024820152fd5b6102fa611596366120f4565b99909891979196939592949293926001600160a01b0390818a16156115d2575b6115c88291604051906102bb82611e20565b9616971690614459565b60008051602061540083398151915254821699506115b6565b60e03660031901126101d8576115ff611dad565b611607611dde565b906001600160401b03906044358281116101d857611629903690600401611f32565b60a4359161ffff831683036101d85760209461028593611647611df4565b9160018060a01b036000805160206153c08339815191525416936040519561166e87611e20565b600087526084359260643592613809565b6102fa61168b366121a6565b929391906116aa61169b84614d3a565b5094604051906102bb82611e20565b9061ffff6000805160206154008339815191525460a01c16926000805160206154408339815191525494604051976116e189611e20565b600089526001600160a01b031690613efb565b346101d8576020806003193601126101d8576004356001600160401b0381116101d85761172861172d913690600401611f32565b613560565b90808201516e576f726d686f6c6552656c6179657280820361156c57505060ff602183015116600181036118ee5750602382015161ffff90818116908115806118e6575b15611811575b5050602583015160458401519351604581036117f257501690816000527f9e4e57806ba004485cfae8ca22fb13380f01c10b1b0ccf48c20464961643cf6d91828252604060002054806117d4575060005252604060002055600080f35b6044925060405191637b5672c560e11b835260048301526024820152fd5b6044906040519063061bc83560e51b8252600482015260456024820152fd5b60405163380e7c8960e21b815284816004817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa9081156107ff576000916118b1575b506114fe577f000000000000000000000000000000000000000000000000000000000000000091838316146117775760405163901f6ae360e01b815261ffff918216600482015291166024820152604490fd5b90508481813d83116118df575b6118c88183611ef6565b810103126101d8576118d9906125b0565b8661185e565b503d6118be565b506001611771565b60449060405190633460202560e21b8252600482015260016024820152fd5b346101d85760203660031901126101d857602061195f61192b611dad565b61ffff166000527f9e4e57806ba004485cfae8ca22fb13380f01c10b1b0ccf48c20464961643cf6d60205260406000205490565b604051908152f35b6020610165611991611978366120f4565b9a9099919897929594604097949751906102bb82611e20565b6001600160a01b039586169790951690613c23565b6101003660031901126101d8576119bb611dad565b6119c3611dde565b6001600160401b03906044358281116101d8576119e4903690600401611f32565b60a4358381116101d8576119fc903690600401611fdc565b9060c43561ffff811681036101d8576001600160a01b039360e435919085831683036101d857602097610285966000805160206153c08339815191525416946084359260643592613809565b6020610165611a5636612083565b9491611a6183614cb1565b6000805160206153c0833981519152546001600160a01b03169590949084613809565b346101d85760003660031901126101d8576102fa303314612366565b346101d85760203660031901126101d8576020611ac3611abe611dad565b614cb1565b6040516001600160a01b039091168152f35b346101d8576020806003193601126101d8576004356001600160401b0381116101d857611728611b09913690600401611f32565b90808201516e576f726d686f6c6552656c6179657280820361156c57505060ff60218301511660038103611c755750602382015161ffff9182821690811580611c6d575b15611bb4575b50505050604381015190611b696113388361263d565b6001600160a01b0316908115611b9c57506000805160206153c083398151915280546001600160a01b0319169091179055005b60249060405190637a8ad12560e01b82526004820152fd5b60405163380e7c8960e21b815281816004817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa9182156107ff57600092611c37575b50506114fe577f0000000000000000000000000000000000000000000000000000000000000000928316036114da578080611b53565b90809250813d8311611c66575b611c4e8183611ef6565b810103126101d857611c5f906125b0565b8580611c01565b503d611c44565b506000611b4d565b60449060405190633460202560e21b8252600482015260036024820152fd5b346101d85760003660031901126101d8576000805160206153c0833981519152546040516001600160a01b039091168152602090f35b346101d85760603660031901126101d857611ce3611dad565b6044356001600160a01b038116908190036101d857604051630cbcf9e160e21b815261ffff9290921660048301526024803590830152602090829060449082905afa80156107ff57600090611d3e575b602090604051908152f35b506020813d8211611d68575b81611d5760209383611ef6565b810103126101d85760209051611d33565b3d9150611d4a565b346101d85760203660031901126101d857611d91611d8c611dad565b614d3a565b604080516001600160a01b039384168152919092166020820152f35b6004359061ffff821682036101d857565b6064359061ffff821682036101d857565b359061ffff821682036101d857565b602435906001600160a01b03821682036101d857565b60c435906001600160a01b03821682036101d857565b606435906001600160a01b03821682036101d857565b602081019081106001600160401b03821117611e3b57604052565b634e487b7160e01b600052604160045260246000fd5b61012081019081106001600160401b03821117611e3b57604052565b61016081019081106001600160401b03821117611e3b57604052565b606081019081106001600160401b03821117611e3b57604052565b61018081019081106001600160401b03821117611e3b57604052565b60c081019081106001600160401b03821117611e3b57604052565b604081019081106001600160401b03821117611e3b57604052565b90601f801991011681019081106001600160401b03821117611e3b57604052565b6001600160401b038111611e3b57601f01601f191660200190565b81601f820112156101d857803590611f4982611f17565b92611f576040519485611ef6565b828452602083830101116101d857816000926020809301838601378301015290565b6001600160401b038111611e3b5760051b60200190565b60609060031901126101d85760405190611fa982611e89565b8160043561ffff811681036101d85781526024356020820152604435906001600160401b03821682036101d85760400152565b81601f820112156101d857803590611ff382611f79565b9260409061200382519586611ef6565b83855260209182860191836060809702860101948186116101d8578401925b858410612033575050505050505090565b86848303126101d85782519061204882611e89565b61205185611dcf565b8252858501358683015283850135906001600160401b03821682036101d857828792868b950152815201930192612022565b60c06003198201126101d85760043561ffff811681036101d857916024356001600160a01b03811681036101d857916001600160401b03906044358281116101d857816120d291600401611f32565b92606435926084359260a4359182116101d8576120f191600401611fdc565b90565b906101606003198301126101d85761ffff9060043582811681036101d857926001600160a01b039160243583811681036101d857936001600160401b036044358181116101d8578461214891600401611f32565b94606435946084359460a4359460c43590811681036101d8579360e43584811681036101d857936101043590811681036101d85792610124359182116101d85761219491600401611fdc565b906101443560ff811681036101d85790565b60a06003198201126101d85760043561ffff811681036101d857916024356001600160a01b03811681036101d85791604435906001600160401b0382116101d8576121f391600401611f32565b906064359060843590565b9080601f830112156101d85781359061221682611f79565b926122246040519485611ef6565b828452602092838086019160051b830101928084116101d857848301915b8483106122525750505050505090565b82356001600160401b0381116101d857869161227384848094890101611f32565b815201920191612242565b60005b8381106122915750506000910152565b8181015183820152602001612281565b906020916122ba8151809281855285808601910161227e565b601f01601f1916010190565b6101606003198201126101d85761ffff9160043583811681036101d85792602435926001600160401b03916044358381116101d8578261230891600401611f32565b93606435936084359360a4358281116101d8578161232891600401611f32565b9360c43590811681036101d8579260e43592610104356001600160a01b03811681036101d85792610124359182116101d85761219491600401611fdc565b1561236d57565b634e487b7160e01b600052600160045260246000fd5b519060ff821682036101d857565b519063ffffffff821682036101d857565b519061ffff821682036101d857565b51906001600160401b03821682036101d857565b909291926123d281611f17565b916123e06040519384611ef6565b8294828452828201116101d85760206123fa93019061227e565b565b9080601f830112156101d85781516120f1926020016123c5565b9190610160838203126101d85760409283519161243283611e6d565b829461243d83612383565b8452602061244c818501612391565b8186015261245b828501612391565b82860152606061246c8186016123a2565b81870152608091828601518388015261248760a087016123b1565b60a088015261249860c08701612383565b60c088015260e0860151936001600160401b03948581116101d857866124bf9189016123fc565b60e08901526101006124d2818901612391565b9089015261012094858801518181116101d85788019387601f860112156101d8578451926124ff84611f79565b9861250c82519a8b611ef6565b848a5285808b019560071b880101968188116101d8578601945b8786106125455750505050505050505083015261014080910151910152565b88868303126101d857825190898201908282108783111761259b578a928992865288518152828901518382015261257d868a01612383565b8682015261258c878a01612383565b87820152815201950194612526565b60246000634e487b7160e01b81526041600452fd5b519081151582036101d857565b90916060828403126101d8578151926001600160401b03938481116101d857816125e8918501612416565b936125f5602085016125b0565b9360408101519182116101d857019080601f830112156101d85781516120f1926020016123c5565b9190820180921161095257565b8181029291811591840414171561095257565b8060a01c612651576001600160a01b031690565b6024906040519063033b960d60e41b82526004820152fd5b90600182811c92168015612699575b602083101461268357565b634e487b7160e01b600052602260045260246000fd5b91607f1691612678565b8181106126ae575050565b600081556001016126a3565b600111156126c457565b634e487b7160e01b600052602160045260246000fd5b6020818051810103126101d8576020015160018110156101d85790565b60405190604082018281106001600160401b03821117611e3b5760405260006020838281520152565b906127296126f7565b916060818051810103126101d85761274360208201612383565b90606060408201519101516020850152835260ff81166127605750565b60405163c1f4bdd960e01b815260ff91909116600482015260006024820152604490fd5b3d156127af573d9061279582611f17565b916127a36040519384611ef6565b82523d6000602084013e565b606090565b60009081602060a083015101518015612c91575b50612c8d576060604080516127dc81611e89565b848152846020820152015261ffff81511660a082015160208101519060408101519060c08501519061010086015161014060e0880151920151926040880151946080890151966040519861282f8a611e51565b8952602089015260408801526060870152608086015260a085015260c084015260e0830152610100820152826040518092636000415760e01b82526020600483015261ffff8151166024830152602081015160448301526101006128a4604083015161012060648601526101448501906122a1565b9160608101516084850152608081015160a485015260a081015160c485015260c081015160e485015260e081015161010485015201519060231983820301610124840152815180825260208201916020808360051b83010194019286915b838310612c5c5750505050508190038183305af1838185938693612bf8575b50612bb657505050612931612784565b61293a816134e7565b15612baa57905b6040519161294e83611e89565b82526002602083015260408201525b61296e602060a0840151015161263d565b9161ffff815116926001600160401b03602083015116946040830151906020850151926004841015612b965785519560a08601519560018060a01b036060820151166129cc6129c18a60c0850151612dfc565b60e08401519061262a565b9760208401516004811015612b825786906000600282148015612b76575b612b5b575b612b4057612a069190600303612b5457879061261d565b98612a2561ffff60c0840151168b60e0850151610100860151926131f9565b999060058b1015612b405791612a6e91612a7494938c158015612b36575b612b2e575b612a69612a6384608060606111e4969701519101519061261d565b34612dfc565b612dfc565b90613138565b15612b1c577fbccc00b713f54173962e7de6098f643d8ebf53d488d71f4b2a5171496d038f9e96612b01946040612ae8940151926101408101511515600014612b065761012091500151985b604051978897885260208801526040870152606086015260c0608086015260c08501906122a1565b83810360a08501526001600160a01b03909116956122a1565b0390a4565b5060405190612b1482611e20565b815298612ac0565b6040516304aeb27d60e51b8152600490fd5b899150612a48565b5060028d14612a43565b634e487b7160e01b88526021600452602488fd5b8a9061261d565b9150612b70606084015160808501519061261d565b916129ef565b505087600182146129ea565b634e487b7160e01b87526021600452602487fd5b634e487b7160e01b82526021600452602482fd5b5060c082015190612941565b600460ff82161015612be45760ff9060405193612bd285611e89565b8452166020830152604082015261295d565b634e487b7160e01b85526021600452602485fd5b93509150503d8085843e612c0c8184611ef6565b6060838281010312612c5857612c2183612383565b926020810151916040820151906001600160401b038211612c5457612c4a9290810191016123fc565b9290929138612921565b8780fd5b8480fd5b92955092955092602080612c7c600193601f1986820301875289516122a1565b970193019301889593879592612902565b5050565b612c9b915061263d565b61ffff9081835116906001600160401b036020850151169260408501519060a086015160018060a01b0360608801511690612cfb612ce2606083015160808401519061261d565b9360c0830151168460e0840151610100850151926131f9565b92906005841015612de857612d349291612a6e9185158015612dde575b612dd6575b612a6381608060606111e49401519101519061261d565b15612b1c577fbccc00b713f54173962e7de6098f643d8ebf53d488d71f4b2a5171496d038f9e91612db360405194612d6b86611e20565b60008087526101408a015115612dbe5750612ae86101208a0151965b60405195869586526000602087015260006040870152606086015260c0608086015260c08501906122a1565b0390a46001386127c8565b604051612ae891612dce82611e20565b815296612d87565b8b9150612d1d565b5060028614612d18565b634e487b7160e01b8a52602160045260248afd5b9190820391821161095257565b60405190612e1682611ea4565b606061016083600080825280602083015283604083015280848301528060808301528360a08301528060c08301528060e083015280610100830152806101208301526101408201520152565b600080516020615420833981519152908154811015612eaa57600591600052027f3956f3466fff97ca672672c3102a70900b3589f53a1cac769d9a51ee18555a4f0190600090565b634e487b7160e01b600052603260045260246000fd5b9060405191826000825492612ed484612669565b908184526001948581169081600014612f415750600114612efe575b50506123fa92500383611ef6565b9093915060005260209081600020936000915b818310612f295750506123fa93508201013880612ef0565b85548884018501529485019487945091830191612f11565b9150506123fa94506020925060ff191682840152151560051b8201013880612ef0565b805115612eaa5760200190565b8051821015612eaa5760209160051b010190565b604051631a90a21960e01b81526020816004817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa9081156107ff57600091612fd6575090565b906020823d8211612fff575b81612fef60209383611ef6565b81010312612ffc57505190565b80fd5b3d9150612fe2565b60ff90613042602093959896949798604051958694859384936358cd21bf60e11b8552600060048601526060602486015260648501906122a1565b9116604483015203917f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af19081156107ff576000916130d2575b5060406001600160401b03826130c27fda8540426b64ece7b164a9dce95448765f0a7263ef3ff85091c9c7361e4853649498612a6e898861261d565b96835195865260208601521692a2565b906020823d8211613130575b816130eb60209383611ef6565b81010312612ffc575060406001600160401b036131287fda8540426b64ece7b164a9dce95448765f0a7263ef3ff85091c9c7361e485364936123b1565b925050613086565b3d91506130de565b9080156131865760006020918160405161315181611e20565b5281805a926040519686880194f1913d80151560011461317e575b808252601f01601f1916010160405290565b50600061316c565b5050600190565b9190916040818403126101d85780519260208201516001600160401b0381116101d8576120f192016123fc565b6120f1939261ffff606093168252602082015281604082015201906122a1565b604051906131e782611e89565b60006040838281528260208201520152565b91909261ffff80931693837f0000000000000000000000000000000000000000000000000000000000000000168514613499576001600160a01b03938461323f8461263d565b169160009060409361325d855161325581611e20565b8481526134c9565b928086518093635cf3af3360e11b82528c600483015282602483015281806132916060998a604484015260648301906122a1565b03915afa90918282613473575b50506132bb575050505050505050506132b5612784565b50600390565b966132c8886111e4612f85565b87111561346557849298969497959793919351956132e587611e20565b600087526132f1612f85565b6132fb9087612dfc565b9061330591612dfc565b90835161331181611e20565b6000815261331e906134c9565b986133289061263d565b84519561333487611e20565b6000875285519a8b9963640fdbff60e11b8b528b60048c015260248b016000905260448b0161016090526101648b0161336c916122a1565b9460648b016000905260848b015260031994858b82030160a48c0152613391916122a1565b9960c48a015260e4890152166101048701528587030161012486015282519081875260209889808099019501936000925b84841061342d5750505050505082809160c86101448301520391305af191826133f9575b50506133f4576132b5612784565b600290565b81813d8311613426575b61340d8183611ef6565b810103126101d85761341e906123b1565b5038806133e6565b503d613403565b8551805182168852808b01518b8901528201516001600160401b0316828801528b998b995096830196909501946001909301926133c2565b505050505050505050600490565b6134909293503d8091833e6134888183611ef6565b81019061318d565b5090388061329e565b6134ba94509192506001600160a01b03916134b4915061263d565b16613138565b156134c457600090565b600190565b5160405190600060208301526040820152604081526120f181611e89565b60009160009160248151106135565763ffffffff60e01b600482015160e01b166385880e2960e01b8114908115613545575b8115613534575b506135285750565b60240151925060019150565b6336e7e91f60e11b14905038613520565b632baa6b8960e11b81149150613519565b5060009250829150565b9060018060a01b037f0000000000000000000000000000000000000000000000000000000000000000169160406135b981519263607ec5ef60e11b845260209560049187838701528580600095869360248301906122a1565b0381845afa80156136f757839584908592613791575b501561376e5750835163fbe3c2cd60e01b815287818481855afa90811561376457849161372b575b5061ffff908160608801511691811682036137015750508682918551928380926358b9591160e11b82525afa9081156136f75783916136c6575b5060808501518181036136ab575050610140840195865183527f970ad24d4754c92e299cabb86552091f5df0a15abc0f1b71f37d3e30031585dc9182825260ff8585205416613694575060e095965183525220600160ff19825416179055015190565b875185516364cbf47160e01b815291820152602490fd5b84516342852f8d60e11b815292830152602482015260449150fd5b90508681813d83116136f0575b6136dd8183611ef6565b810103126136ec575138613631565b8280fd5b503d6136d3565b84513d85823e3d90fd5b855163c97817ed60e01b815261ffff92831685820190815291909216602082015281900360400190fd5b90508781813d831161375d575b6137428183611ef6565b8101031261375957613753906123a2565b386135f7565b8380fd5b503d613738565b85513d86823e3d90fd5b8451630169d68560e71b8152808401899052908190610b1e9060248301906122a1565b9150506137a99195503d8085833e610bb88183611ef6565b90959195386135cf565b51604381036137bf5750565b6044906040519063061bc83560e51b8252600482015260436024820152fd5b51908082036137eb575050565b604492506040519163061bc83560e51b835260048301526024820152fd5b95939261382761ffff949a99969392989a604051906102bb82611e20565b91604051986138358a611e6d565b8589168a5260018060a01b031660208a0152604089015260608801526000608088015260a08701521660c085015260018060a01b031660e084015260018060a01b038516610100840152610120830152600f61014083015261ffff604051916328f41de360e01b835216600482015260208160248160018060a01b0388165afa9081156107ff57600091613be9575b5015613bb65761ffff815116926000606083015160a0840151956138fc6040519788938493635cf3af3360e11b8552600485016131ba565b03816001600160a01b0385165afa9384156107ff57600090600095613b96575b50613925612f85565b9260808101519561393a856111e4898661261d565b3403613b6b5761399295965061ffff8251169060208301519060408401519060608501519060206080870151604051809c8192630cbcf9e160e21b835289600484016020909392919361ffff60408201951681520152565b03816001600160a01b038c165afa998a156107ff5760009a613b35575b5060c086015160e08701518751604051633d77cbfd60e01b815261ffff9182166004820152949193921691906020856024816001600160a01b038f165afa9485156107ff57600095613af0575b509060049c613a719897969594939260018060a01b036101008c015116966101208c0151986040519a613a2e8c611ea4565b8b5260208b015260408a01526060890152608088015260a087015260c086015260e085015261010084015261012083015233610140830152610160820152614ecc565b91602060ff6101406080850151940151169460405197888092632fe4c87f60e21b825260018060a01b03165afa9485156107ff57613ab796600096613abf575b50613007565b15612b1c5790565b613ae291965060203d602011613ae9575b613ada8183611ef6565b8101906148f4565b9438613ab1565b503d613ad0565b97969594509291906020883d602011613b2d575b81613b1160209383611ef6565b810103126101d8579651959694959394919290919060046139fc565b3d9150613b04565b919099506020823d602011613b63575b81613b5260209383611ef6565b810103126101d857905198876139af565b3d9150613b45565b6044613b7b866111e48a8761261d565b60405190631f89f67160e01b82523460048301526024820152fd5b9050613bae9194503d806000833e6134888183611ef6565b93903861391c565b61010081015190516040516366b69b9d60e01b81526001600160a01b03909216600483015261ffff166024820152604490fd5b90506020813d602011613c1b575b81613c0460209383611ef6565b810103126101d857613c15906125b0565b386138c4565b3d9150613bf7565b979a9995919361ffff9360ff98959a96929a6040519b613c428d611e6d565b868c168d5260208d015260408c015260608b015260808a015260a08901521660c087015260e086015260018060a01b0387166101008601526101208501521661014083015261ffff604051916328f41de360e01b835216600482015260208160248160018060a01b0388165afa9081156107ff57600091613ec1575b5015613bb65761ffff815116926000606083015160a084015195613cf66040519788938493635cf3af3360e11b8552600485016131ba565b03816001600160a01b0385165afa9384156107ff576000908195613ea3575b50613d1e612f85565b926080810151613d32856111e4838661261d565b3403613e93575061ffff81511695602082015190613d89604084015191606085015190602060808701518c6040519586928392630cbcf9e160e21b8452600484016020909392919361ffff60408201951681520152565b03816001600160a01b038c165afa9081156107ff578893600092613e5a575b5061ffff60c0880151169160e088015193602061ffff8a5116602460405180998193633d77cbfd60e01b8352600483015260018060a01b03165afa9586156107ff57600096613e25575b5091613a719795939160049d9e97959360018060a01b036101008c015116966101208c0151986040519a613a2e8c611ea4565b90956020823d602011613e52575b81613e4060209383611ef6565b81010312612ffc575051946004613df2565b3d9150613e33565b91909293506020823d602011613e8b575b81613e7860209383611ef6565b81010312612ffc57505187929138613da8565b3d9150613e6b565b613b7b856111e46044938661261d565b90613eb99295503d8091833e6134888183611ef6565b939038613d15565b906020823d602011613ef3575b81613edb60209383611ef6565b81010312612ffc5750613eed906125b0565b38613cbe565b3d9150613ece565b989796959492909161ffff9492856040519b613f168d611e6d565b168b5260208b015260408a015260608901526000608089015260a08801521660c086015260e08501526001600160a01b0316610100840152610120830152600f6101408301526000805160206153e08339815191525460ff8116156144485760081c6001600160a01b03163381900361441f575060018060a01b036101008301511661ffff835116604051906328f41de360e01b82526004820152602081602481855afa9081156107ff576000916143e5575b50156143b25761ffff835116926000606082015160a0830151956140016040519788938493635cf3af3360e11b8552600485016131ba565b0381855afa80156107ff5760009460009161438d575b509061406a929161ffff8251169060208301519060408401519060608501519060206080870151604051809a8192630cbcf9e160e21b835289600484016020909392919361ffff60408201951681520152565b03818a5afa9788156107ff57600098614359575b5061ffff60c08701511660e08701519161ffff8851169360405194633d77cbfd60e01b865260048601526020856024818d5afa9485156107ff57600095614314575b509060049a6140f29897969594939260018060a01b036101008c015116966101208c0151986040519a613a2e8c611ea4565b90602060ff6101406080840151930151169360405195868092632fe4c87f60e21b82525afa9384156107ff576000946142f3575b506040519161413483611ec0565b825260208201953487526040830190815260608301918252608083019460018060a01b0316855260a083019384526000805160206154208339815191528054600160401b811015611e3b57614190906001928382019055612e62565b9490946142dd57519788516001600160401b038111611e3b576141b38654612669565b601f81116142a0575b506020601f8211600114614237578190600498999a9b60009261422c575b5050600019600383901b1c191690831b1785555b5190840155516002830155516003820155019160018060a01b0390511682549160ff60a01b905160a01b16916001600160581b0360a81b1617179055565b0151905038806141da565b601f1982169a8760005260206000209b60005b81811061428a5750916004999a9b9c918487959410614271575b505050811b0185556141ee565b015160001960f88460031b161c19169055388080614264565b838301518e559c86019c6020938401930161424a565b6142cd90876000526020600020601f840160051c810191602085106142d3575b601f0160051c01906126a3565b386141bc565b90915081906142c0565b634e487b7160e01b600052600060045260246000fd5b61430d91945060203d602011613ae957613ada8183611ef6565b9238614126565b97969594509291906020883d602011614351575b8161433560209383611ef6565b810103126101d8579651959694959394919290919060046140c0565b3d9150614328565b9097506020813d602011614385575b8161437560209383611ef6565b810103126101d85751963861407e565b3d9150614368565b61406a939295506143a991503d806000833e6134888183611ef6565b90949192614017565b61010083015183516040516366b69b9d60e01b81526001600160a01b03909216600483015261ffff166024820152604490fd5b90506020813d602011614417575b8161440060209383611ef6565b810103126101d857614411906125b0565b38613fc9565b3d91506143f3565b6040516313f32dd760e31b81523360048201526001600160a01b03919091166024820152604490fd5b60405162f1e13160e51b8152600490fd5b9a999897969594939291906040519b6144718d611e6d565b61ffff168c5260208c015260408b015260608a0152608089015260a088015261ffff1660c087015260e0860152600160a01b600190031661010085015261012084015260ff166101408301526000805160206153e08339815191525460ff8116156144485760081c6001600160a01b03163381900361441f575060018060a01b036101008301511661ffff835116604051906328f41de360e01b82526004820152602081602481855afa9081156107ff576000916148ba575b50156143b25761ffff835116926000606082015160a0830151956145626040519788938493635cf3af3360e11b8552600485016131ba565b0381855afa80156107ff57600094859161489b575b5061ffff825116906020830151906145c76040850151916060860151906020608088015160405180958192630cbcf9e160e21b83528a600484016020909392919361ffff60408201951681520152565b03818b5afa9081156107ff578893600092614862575b5061ffff60c0890151169160e089015193602061ffff8b5116602460405180998193633d77cbfd60e01b835260048301525afa9586156107ff5760009661482d575b50916146539795939160049b9a9997959360018060a01b036101008c015116966101208c0151986040519a613a2e8c611ea4565b90602060ff6101406080840151930151169360405195868092632fe4c87f60e21b82525afa9384156107ff5760009461480c575b506040519161469583611ec0565b825260208201953487526040830190815260608301918252608083019460018060a01b0316855260a083019384526000805160206154208339815191528054600160401b811015611e3b576146f1906001928382019055612e62565b9490946142dd57519788516001600160401b038111611e3b576147148654612669565b601f81116147da575b506020601f821160011461478b578190600498999a9b60009261422c575050600019600383901b1c191690831b1785555190840155516002830155516003820155019160018060a01b0390511682549160ff60a01b905160a01b16916001600160581b0360a81b1617179055565b601f1982169a8760005260206000209b60005b8181106147c45750916004999a9b9c91848795941061427157505050811b0185556141ee565b838301518e559c86019c6020938401930161479e565b61480690876000526020600020601f840160051c810191602085106142d357601f0160051c01906126a3565b3861471d565b61482691945060203d602011613ae957613ada8183611ef6565b9238614687565b90956020823d60201161485a575b8161484860209383611ef6565b81010312612ffc57505194600461461f565b3d915061483b565b91909293506020823d602011614893575b8161488060209383611ef6565b81010312612ffc575051879291386145dd565b3d9150614873565b90506148b191943d8091833e6134888183611ef6565b93909338614577565b906020823d6020116148ec575b816148d460209383611ef6565b81010312612ffc57506148e6906125b0565b3861452a565b3d91506148c7565b908160209103126101d857516001600160a01b03811681036101d85790565b9094929160018060a01b0391828616926040938451906328f41de360e01b825261ffff8a16600497818985015260209a8b85602481875afa8015614ca6576000958691614c6d575b5015614c3d575088999a9b889961498686938a9b519b8c948594635cf3af3360e11b865285016131ba565b0381855afa948515614c335783978496614c11575b506149a4612f85565b93966149b0858a61261d565b3403614bea5760838d938c9998979695938c614a77948151906149d282611ec0565b838252888201948552828201908152606082019b8c52614a0d614a0260a060808501948b86520195338752615235565b955191519c516152b7565b9151935192519b8c95600160f91b8b880152614a32815180928d60218b01910161227e565b86019161ffff60f01b9060f01b1660218301526023820152614a5d825180938b60438501910161227e565b019160438301526063820152036063810188520186611ef6565b8851632fe4c87f60e21b815296879182905afa948515614be057918493918b93614acd9897614bbf575b5088516358cd21bf60e11b8152808b0186905260606024820152978893849291839160648301906122a1565b60c8604483015203927f0000000000000000000000000000000000000000000000000000000000000000165af1938415614bb3578194614b7c575b5080614b695750614b1b82600092613138565b9684519283528201527fda8540426b64ece7b164a9dce95448765f0a7263ef3ff85091c9c7361e485364836001600160401b03841692a29315614b5c575050565b516304aeb27d60e51b8152fd5b634e487b7160e01b815260118652602490fd5b9093508781813d8311614bac575b614b948183611ef6565b8101031261375957614ba684916123b1565b93614b08565b503d614b8a565b508451903d90823e3d90fd5b85919650614bd990853d8711613ae957613ada8183611ef6565b9590614aa1565b87513d86823e3d90fd5b60448b8b614bf8888d61261d565b905191631f89f67160e01b835234908301526024820152fd5b909550614c299197503d8085833e6134888183611ef6565b969096943861499b565b88513d85823e3d90fd5b88516366b69b9d60e01b81526001600160a01b03909116818b0190815261ffff8e16602082015281906040010390fd5b90508c81813d8311614c9f575b614c848183611ef6565b81010312614c9b57614c95906125b0565b3861495b565b8580fd5b503d614c7a565b89513d6000823e3d90fd5b6000805160206153c083398151915254604051633d77cbfd60e01b815261ffff929092166004830152602090829060249082906001600160a01b03165afa80156107ff57600090614d07575b6120f1915061263d565b6020823d8211614d32575b81614d1f60209383611ef6565b81010312612ffc57506120f19051614cfd565b3d9150614d12565b600080516020615400833981519152546001600160a01b03908116929183158015614db9575b614da0575b61ffff60246020926040519485938492633d77cbfd60e01b845216600483015287165afa80156107ff57600090614d07576120f1915061263d565b6000805160206153c08339815191525482169350614d65565b506040516328f41de360e01b815261ffff82166004820152602081602481885afa9081156107ff57600091614df0575b5015614d60565b906020823d8211614e21575b81614e0960209383611ef6565b81010312612ffc5750614e1b906125b0565b38614de9565b3d9150614dfc565b92614e549493614e4c92614e46602095604051906102bb82611e20565b91614e59565b939093612720565b015190565b9260009291614e7f9460405195869485938493635cf3af3360e11b8552600485016131ba565b03916001600160a01b03165afa80156107ff576000918291614ead575b50614eaa9091611077612f85565b91565b614ec59150614eaa923d8091833e6134888183611ef6565b9091614e9c565b805190602080820151926040614ee4818501516152b7565b93614f4a608360608301519660808401519785519889928984019b600160f81b8d5261ffff60f01b809a60f01b1660218601526023850152614f2f815180928c60438801910161227e565b83019160438301526063820152036063810188520186611ef6565b614f5760a08201516152b7565b60c08201519360e0830151610100840151916101208501519361016061014087015196015196614f8a60ff895110612366565b875181519060ff60f81b9060f81b168b82015260018181809352614fad81611edb565b996000925b61502a575b505050519a8b9a5190818b8d01614fcd9261227e565b8a01815191828b808401920191614fe39261227e565b019660f01b168787015260228601526042850152606284015260828301528051809360a284019201916150159261227e565b010360828101825260a2016120f19082611ef6565b9091998c82518c101561509457829161508c8594926150548f61504e908896612f71565b51615235565b928851938161506c869351809286808701910161227e565b82016150808251809386808501910161227e565b01038084520182611ef6565b9b0192614fb2565b5099614fb7565b906150a4612e09565b916150ae8161538c565b918282016150d660228061ffff938460028201511689520151956020968789015201846152f9565b929060409081880152838501956150f78280838a01519901519601876152f9565b989060a08201526083808a89018760028201511660c0850152602281015160e0850152604281015161010085015260628101516101208501526082810151610140850152015199019360ff809a169661514f88611f79565b9761515c8651998a611ef6565b80895261516b601f1991611f79565b018460005b82811061521f5750505060005b88518110156151fa578b906151906131da565b97808c019060019384830151168481036151dd57508a6003830151168a526023820151888b01526001600160401b03602b8093015116898b015201976151d6828c612f71565b520161517d565b604490858b5191633ce5fedf60e11b835260048301526024820152fd5b509496925097925097506123fa959350610160880152606087015260808601526137de565b6152276131da565b82828d010152018590615170565b805160209060408284015193015160405193849260605160005b8181106152a25750600160f81b9085019586015260f01b6001600160f01b0319166021850152602384015260c01b6001600160c01b0319166043830152602b910390810182526120f190604b0182611ef6565b6080810151888201880152879550860161524f565b6120f16024825160405193849163ffffffff60e01b9060e01b1660208301526152e9815180926020868601910161227e565b8101036004810184520182611ef6565b9061531491600463ffffffff81848401015116920190615318565b9091565b9290821561536f578281019260405194601f8216928315615366575b838701938385019201015b8184106153565750508452601f01601f1916604052565b805184526020938401930161533f565b60209350615334565b9250905060405161537f81611e20565b6000815260003681379190565b600101519060ff600192168281036153a15750565b6044908360405191633ce5fedf60e11b835260048301526024820152fdfeebc28a1927f62765bfb7ada566eeab2d31a98c65dbd1e8cad64acae2a3ae45d41a2a8eb52f1d00a1242a3f8cc031e30a32870ff64f69009c4e06f75bd842fd221a2a8eb52f1d00a1242a3f8cc031e30a32870ff64f69009c4e06f75bd842fd231a2a8eb52f1d00a1242a3f8cc031e30a32870ff64f69009c4e06f75bd842fd251a2a8eb52f1d00a1242a3f8cc031e30a32870ff64f69009c4e06f75bd842fd24a2646970667358221220c7763b1cff8a3578b7a6011a42750ec671ba860b95cb4e3e8f2a1d141ea4a25164736f6c6343000813003300000000000000000000000098f3c9e6e3face36baad05fe09d375ef1464288b