0 txs
0 calls
constructor
constructor(address _owner, address _permit2)
functions
beneficiarySettlements
viewfunction beneficiarySettlements(address beneficiary, address router, address token) view returns (uint256 amount)
CALLDATA_EXECUTOR
viewfunction CALLDATA_EXECUTOR() view returns (address)
ENTRYPOINT
viewfunction ENTRYPOINT() view returns (address)
FEE_COLLECTOR
viewfunction FEE_COLLECTOR() view returns (address)
getExtractedRequest
viewfunction getExtractedRequest(bytes32 requestHash) view returns (tuple)
getFulfilledRequest
viewfunction getFulfilledRequest(bytes32 requestHash) view returns (tuple)
getImpl
viewfunction getImpl(uint8 _implId) view returns (address)
getWhitelistedReceiver
viewfunction getWhitelistedReceiver(address router, uint256 destinationChainId) view returns (address)
hasRole
viewfunction hasRole(bytes32 role_, address address_) view returns (bool)
isBungeeRouter
viewfunction isBungeeRouter(address router) view returns (bool)
NATIVE_TOKEN_ADDRESS
viewfunction NATIVE_TOKEN_ADDRESS() view returns (address)
nominee
viewfunction nominee() view returns (address)
owner
viewfunction owner() view returns (address)
PERMIT2
viewfunction PERMIT2() view returns (address)
SINGLE_OUTPUT_IMPL_ID
viewfunction SINGLE_OUTPUT_IMPL_ID() view returns (uint8)
SWAP_EXECUTOR
viewfunction SWAP_EXECUTOR() view returns (address)
SWITCHBOARD_ROUTER
viewfunction SWITCHBOARD_ROUTER() view returns (address)
withdrawnRequests
viewfunction withdrawnRequests(bytes32 requestHash) view returns (tuple)
addBungeeRouter
nonpayablefunction addBungeeRouter(address _bungeeRouter)
addImpl
nonpayablefunction addImpl(uint8 _implId, address _newImplAddress) returns (uint8, address)
cancelRequest
payablefunction cancelRequest(tuple request, uint256 gasLimit) payable
claimOwner
nonpayablefunction claimOwner()
extractRequests
nonpayablefunction extractRequests(tuple[] extractExecs, address transmitter)
fulfilRequests
payablefunction fulfilRequests(tuple[] fulfilExecs) payable
grantRole
nonpayablefunction grantRole(bytes32 role_, address grantee_)
nominateOwner
nonpayablefunction nominateOwner(address nominee_)
receiveMsg
payablefunction receiveMsg(bytes payload) payable
removeImpl
nonpayablefunction removeImpl(uint8 _implId)
rescue
nonpayablefunction rescue(address token, address to, uint256 amount)
revokeRole
nonpayablefunction revokeRole(bytes32 role_, address revokee_)
setCalldataExecutor
nonpayablefunction setCalldataExecutor(address _calldataExecutor)
setEntrypoint
nonpayablefunction setEntrypoint(address _entrypoint)
setFeeCollector
nonpayablefunction setFeeCollector(address _feeCollector)
setSwapExecutor
nonpayablefunction setSwapExecutor(address _swapExecutor)
setSwitchboardRouter
nonpayablefunction setSwitchboardRouter(address _switchboardRouter)
settleRequests
payablefunction settleRequests(bytes32[] requestHashes, uint256 gasLimit, uint32 chainSlug, uint32 switchboardId) payable
setWhitelistedReceiver
nonpayablefunction setWhitelistedReceiver(address receiver, uint256 destinationChainId, address router)
withdrawBeneficiarySettlement
nonpayablefunction withdrawBeneficiarySettlement(address beneficiary, address router, address token)
withdrawRequestOnDestination
payablefunction withdrawRequestOnDestination(address router, tuple request, bytes withdrawRequestData) payable
events
CalldataExecutionFailed
event CalldataExecutionFailed(bytes32 requestHash, address to, bytes encodedData, uint256 minDestGasLimit)
ImplAdded
event ImplAdded(uint32 indexed implId, address implAddress)
ImplRemoved
event ImplRemoved(uint32 indexed implId, address prevImplAddress)
OwnerClaimed
event OwnerClaimed(address indexed claimer)
OwnerNominated
event OwnerNominated(address indexed nominee)
RequestCancelled
event RequestCancelled(bytes32 indexed requestHash, address token, uint256 amount, address to)
RequestCancelledOnDestination
event RequestCancelledOnDestination(bytes32 requestHash, uint8 implId, address transmitter, uint256 outboundFees)
RequestExtracted
event RequestExtracted(bytes32 indexed requestHash, uint8 implId, address transmitter, bytes execution)
RequestFulfilled
event RequestFulfilled(bytes32 indexed requestHash, uint8 implId, address fulfiller, bytes execution)
RequestSettled
event RequestSettled(bytes32 indexed requestHash)
RequestSettlementFailed
event RequestSettlementFailed(bytes32 indexed requestHash, bytes4 _error)
RequestsSettledOnDestination
event RequestsSettledOnDestination(bytes32[] requestHashes, uint8 implId, address transmitter, uint256 outboundFees)
RoleGranted
event RoleGranted(bytes32 indexed role, address indexed grantee)
RoleRevoked
event RoleRevoked(bytes32 indexed role, address indexed revokee)
errors
CallerNotDelegate
error CallerNotDelegate()
CallerNotEntrypoint
error CallerNotEntrypoint()
ImplAlreadyRegistered
error ImplAlreadyRegistered()
InsufficientNativeAmount
error InsufficientNativeAmount()
InvalidMsg
error InvalidMsg()
InvalidRequest
error InvalidRequest()
InvalidTokenAddress
error InvalidTokenAddress()
MinOutputNotMet
error MinOutputNotMet()
NoPermit
error NoPermit(bytes32 role)
OnlyNominee
error OnlyNominee()
OnlyOwner
error OnlyOwner()
Reentrancy
error Reentrancy()
RequestNotProcessed
error RequestNotProcessed()
RequestProcessed
error RequestProcessed()
RouterAlreadyRegistered
error RouterAlreadyRegistered()
RouterNotRegistered
error RouterNotRegistered()
ZeroAddress
error ZeroAddress()
creation bytecode
0x60a06040523480156200001157600080fd5b5060405162004968380380620049688339810160408190526200003491620000cb565b8181818062000043816200005b565b50506001600160a01b03166080525062000103915050565b600080546001600160a01b0383166001600160a01b0319918216811783556001805490921690915560405190917ffbe19c9b601f5ee90b44c7390f3fa2319eba01762d34ee372aeafd59b25c7f8791a250565b80516001600160a01b0381168114620000c657600080fd5b919050565b60008060408385031215620000df57600080fd5b620000ea83620000ae565b9150620000fa60208401620000ae565b90509250929050565b60805161484262000126600039600081816105b70152611ce301526148426000f3fe6080604052600436106102305760003560e01c80636afdd8501161012e578063a1f2226c116100ab578063d547741f1161006f578063d547741f146108c6578063df2ebdbb146108e6578063e8eb3cc61461090e578063e9899ed21461092e578063ee5125171461094e57600080fd5b8063a1f2226c1461084d578063a42dce8014610860578063b746078a14610880578063b8ae664914610893578063c7bfb9ce146108a657600080fd5b80638da5cb5b116100f25780638da5cb5b1461075157806391d148541461076f57806397a3deca1461078f5780639ce2800f146107af5780639ed0cb131461082d57600080fd5b80636afdd850146105a5578063733957f8146105d957806374f8d3fd146105f95780637f660b011461061957806389d536e01461063957600080fd5b806331feeadd116101bc5780633e774f66116101805780633e774f66146104905780635558c150146104b05780635b94db27146104c35780636a0706db146104e35780636a7372da1461050357600080fd5b806331feeadd146103d55780633bd1adec146103f55780633cbc7eaa1461040a5780633cf3c2b6146104315780633de408a11461044457600080fd5b80630e4bfd6e116102035780630e4bfd6e1461030c5780631e789c361461032c57806320f99c0a1461037557806320ff430b146103935780632f2ff15d146103b557600080fd5b80630341ac35146102355780630472a61d1461027b5780630b345879146102cc5780630cb352e0146102ec575b600080fd5b34801561024157600080fd5b50610255610250366004612de3565b61096e565b6040805160ff90931683526001600160a01b039091166020830152015b60405180910390f35b34801561028757600080fd5b506102b4610296366004612e1a565b60ff166000908152600860205260409020546001600160a01b031690565b6040516001600160a01b039091168152602001610272565b3480156102d857600080fd5b506005546102b4906001600160a01b031681565b3480156102f857600080fd5b506006546102b4906001600160a01b031681565b34801561031857600080fd5b506004546102b4906001600160a01b031681565b34801561033857600080fd5b50610365610347366004612e35565b6001600160a01b03166000908152600b602052604090205460ff1690565b6040519015158152602001610272565b34801561038157600080fd5b506001546001600160a01b03166102b4565b34801561039f57600080fd5b506103b36103ae366004612e52565b610a8a565b005b3480156103c157600080fd5b506103b36103d0366004612e93565b610b0f565b3480156103e157600080fd5b506103b36103f0366004612eb8565b610b48565b34801561040157600080fd5b506103b3610c54565b34801561041657600080fd5b5061041f600181565b60405160ff9091168152602001610272565b6103b361043f366004612f62565b610c8a565b34801561045057600080fd5b5061048261045f366004612eb8565b600d60209081526000938452604080852082529284528284209052825290205481565b604051908152602001610272565b34801561049c57600080fd5b506103b36104ab366004612fcf565b610e74565b6103b36104be366004613074565b610f62565b3480156104cf57600080fd5b506103b36104de366004612e35565b6110d8565b3480156104ef57600080fd5b506103b36104fe366004612e35565b61114d565b34801561050f57600080fd5b5061057561051e3660046130ec565b604080516060808201835260008083526020808401829052928401819052938452600c8252928290208251938401835280546001600160a01b03908116855260018201549285019290925260020154169082015290565b6040805182516001600160a01b039081168252602080850151908301529282015190921690820152606001610272565b3480156105b157600080fd5b506102b47f000000000000000000000000000000000000000000000000000000000000000081565b3480156105e557600080fd5b506103b36105f4366004612e35565b6111c0565b34801561060557600080fd5b506102b4610614366004613105565b611233565b34801561062557600080fd5b506007546102b4906001600160a01b031681565b34801561064557600080fd5b506107446106543660046130ec565b6040805161012081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081018290526101008101829052906000805160206147ed8339815191526000938452602090815260409384902084516101208101865281546001600160a01b0390811682526001830154811693820193909352600282015480841696820196909652600160a01b90950463ffffffff1660608601526003810154821660808601526004810154821660a0860152600581015490911660c0850152600681015460e0850152600701546101008401525090919050565b6040516102729190613131565b34801561075d57600080fd5b506000546001600160a01b03166102b4565b34801561077b57600080fd5b5061036561078a366004612e93565b611260565b34801561079b57600080fd5b506103b36107aa366004612e35565b61128e565b3480156107bb57600080fd5b506108126107ca3660046130ec565b604080518082018252600080825260209182018190529283526000805160206147cd833981519152815291819020815180830190925280548252600101549181019190915290565b60408051825181526020928301519281019290925201610272565b34801561083957600080fd5b506103b36108483660046131e5565b61133d565b6103b361085b36600461321c565b6113cb565b34801561086c57600080fd5b506103b361087b366004612e35565b611641565b6103b361088e366004613260565b6116b4565b6103b36108a13660046132a1565b6116e9565b3480156108b257600080fd5b506103b36108c1366004612e1a565b61196b565b3480156108d257600080fd5b506103b36108e1366004612e93565b611a35565b3480156108f257600080fd5b506102b473eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee81565b34801561091a57600080fd5b506003546102b4906001600160a01b031681565b34801561093a57600080fd5b506103b3610949366004612e35565b611a6a565b34801561095a57600080fd5b506103b3610969366004612e35565b611add565b33600090815260008051602061475f8339815191526020526040812054819060008051602061477f8339815191529060ff166109c55760405163962f633360e01b8152600481018290526024015b60405180910390fd5b60ff85166000908152600860205260409020546001600160a01b031680151580610a00575060ff808716600090815260096020526040902054165b15610a1e576040516373bfafa960e01b815260040160405180910390fd5b60ff861660008181526008602090815260409182902080546001600160a01b0319166001600160a01b038a1690811790915591519182527f891e2f61914a277b540f6cbff39daf187f334f204a2576ff5e72303d1cf2ce8b910160405180910390a25093949293505050565b3360009081527f4933f7bec34ee32db93e9f5cd7e0519781b395282211f4f6857489046ea38f7660205260409020547fc4c453d647953c0fd35db5a34ee76e60fb4abc3a8fb891a25936b70b38f292539060ff16610afe5760405163962f633360e01b8152600481018290526024016109bc565b610b09848484611b50565b50505050565b6000546001600160a01b03163314610b3a57604051635fc483c560e01b815260040160405180910390fd5b610b448282611bdc565b5050565b3068929eee149b4bd212685403610b675763ab143c066000526004601cfd5b3068929eee149b4bd21268556001600160a01b038084166000908152600d6020908152604080832086851684528252808320938516835292905220548015610c42576001600160a01b038481166000818152600d60209081526040808320888616808552908352818420958816808552959092528083209290925590516362524dd760e01b81526004810193909352602483018490526044830191909152906362524dd790606401600060405180830381600087803b158015610c2957600080fd5b505af1158015610c3d573d6000803e3d6000fd5b505050505b503868929eee149b4bd2126855505050565b6001546001600160a01b03163314610c7f57604051637c91ccdd60e01b815260040160405180910390fd5b610c8833611c37565b565b6000846001600160401b03811115610ca457610ca46132d6565b604051908082528060200260200182016040528015610ccd578160200160208202803683370190505b5090506000805160206147ed83398151915260005b86811015610d8a5760008260010160008a8a85818110610d0457610d046132ec565b9050602002013581526020019081526020016000206040518060400160405290816000820154815260200160018201548152505090508060200151600314610d5f5760405163a4d9007d60e01b815260040160405180910390fd5b8060000151848381518110610d7657610d766132ec565b602090810291909101015250600101610ce2565b50600460009054906101000a90046001600160a01b03166001600160a01b0316635813c9c534868660018a8d8d8a604051602001610dca9392919061336f565b6040516020818303038152906040526040518763ffffffff1660e01b8152600401610df99594939291906133ef565b6000604051808303818588803b158015610e1257600080fd5b505af1158015610e26573d6000803e3d6000fd5b50505050507f3e09b55b6efb54718ae4486c6229eaf5afca42c1aed76e189d9cfaeb3b539f4e878760013334604051610e63959493929190613432565b60405180910390a150505050505050565b6003546001600160a01b03163314610e9f5760405163b7d59a8360e01b815260040160405180910390fd5b60005b82811015610b0957838382818110610ebc57610ebc6132ec565b9050602002810190610ece919061346f565b610ed89080613490565b6101800135848483818110610eef57610eef6132ec565b9050602002810190610f01919061346f565b604001351015610f245760405163308657c360e21b815260040160405180910390fd5b610f5a848483818110610f3957610f396132ec565b9050602002810190610f4b919061346f565b610f549061375f565b83611c8a565b600101610ea2565b6001600160a01b0384166000908152600b602052604090205460ff16610f9b576040516315812c6160e11b815260040160405180910390fd5b6000610fae610fa98561387d565b612034565b9050610fc060e0850160c08601612e35565b6001600160a01b0316336001600160a01b031614610ff1576040516327b9066560e21b815260040160405180910390fd5b60008181526000805160206147cd833981519152602052604090206001908101546000805160206147ed8339815191529110156110415760405163234bc0ff60e21b815260040160405180910390fd5b604080518082018252600080825260026020808401918252868352600180870190915291849020925183555191015551630581fbbf60e01b81526001600160a01b03871690630581fbbf9061109e908890889088906004016138f7565b600060405180830381600087803b1580156110b857600080fd5b505af11580156110cc573d6000803e3d6000fd5b50505050505050505050565b6000546001600160a01b0316331461110357604051635fc483c560e01b815260040160405180910390fd5b600180546001600160a01b0319166001600160a01b0383169081179091556040517f906a1c6bd7e3091ea86693dd029a831c19049ce77f1dce2ce0bab1cacbabce2290600090a250565b33600090815260008051602061475f833981519152602052604090205460008051602061477f8339815191529060ff1661119d5760405163962f633360e01b8152600481018290526024016109bc565b50600580546001600160a01b0319166001600160a01b0392909216919091179055565b33600090815260008051602061475f833981519152602052604090205460008051602061477f8339815191529060ff166112105760405163962f633360e01b8152600481018290526024016109bc565b50600680546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038083166000908152600a60209081526040808320858452909152902054165b92915050565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff165b9392505050565b33600090815260008051602061475f833981519152602052604090205460008051602061477f8339815191529060ff166112de5760405163962f633360e01b8152600481018290526024016109bc565b6001600160a01b0382166000908152600b602052604090205460ff161561131857604051633ba24ff960e11b815260040160405180910390fd5b506001600160a01b03166000908152600b60205260409020805460ff19166001179055565b33600090815260008051602061475f833981519152602052604090205460008051602061477f8339815191529060ff1661138d5760405163962f633360e01b8152600481018290526024016109bc565b506001600160a01b039081166000908152600a60209081526040808320948352939052919091208054919092166001600160a01b0319909116179055565b60006113d9610fa98461387d565b90506113eb60e0840160c08501612e35565b6001600160a01b0316336001600160a01b03161415801561143357506114317f9f959e00d95122f5cbd677010436cf273ef535b86b056afc172852144b9491d733611260565b155b15611451576040516327b9066560e21b815260040160405180910390fd5b60008181526000805160206147cd83398151915260205260409020600101546000805160206147ed833981519152901561149e5760405163234bc0ff60e21b815260040160405180910390fd5b60408051808201825260008082526001602080840182815287845286830182528584209451855551938201939093558351818152808501909452909291828101908036833701905050905082816000815181106114fd576114fd6132ec565b6020908102919091010152604080516001808252818301909252600091816020016020820280368337019050509050600081600081518110611541576115416132ec565b60209081029190910101526004546001600160a01b0316635813c9c53488356115726101208b016101008c01613b0b565b60018a8888604051602001611588929190613b26565b6040516020818303038152906040526040518763ffffffff1660e01b81526004016115b79594939291906133ef565b6000604051808303818588803b1580156115d057600080fd5b505af11580156115e4573d6000803e3d6000fd5b5050604080518881526001602082015233918101919091523460608201527f315b5b12b5749bb31d7d3c18cee689619f441a29bbf35a2f958394e3fd309762935060800191506116319050565b60405180910390a1505050505050565b33600090815260008051602061475f833981519152602052604090205460008051602061477f8339815191529060ff166116915760405163962f633360e01b8152600481018290526024016109bc565b50600780546001600160a01b0319166001600160a01b0392909216919091179055565b6004546001600160a01b031633146116df57604051631bd147a760e01b815260040160405180910390fd5b610b44828261214d565b6000805b82811015611944576000848483818110611709576117096132ec565b905060200281019061171b9190613b73565b61172490613b89565b905060006117358260000151612034565b60008181526000805160206147cd83398151915260205260409020600101549091506000805160206147ed83398151915290156117855760405163234bc0ff60e21b815260040160405180910390fd5b6117ab83602001516001600160a01b03166000908152600b602052604090205460ff1690565b6117c8576040516315812c6160e11b815260040160405180910390fd5b8251516101800151604084015110156117f45760405163308657c360e21b815260040160405180910390fd5b82602001516001600160a01b0316634d1efe3d84608001518486336040518563ffffffff1660e01b815260040161182d93929190613e21565b6000604051808303818588803b15801561184657600080fd5b505af115801561185a573d6000803e3d6000fd5b505050505082608001518561186f9190613e68565b604080518082018252858201518152600360208083019182526000878152600180880183529085902093518455915192820192909255915192975084927fd83e4fbd120e768f3bb813ecfa1a2b16c323fa7dfa07db1cd6434b3cbc97bc75929133916118dd91899101613e7b565b60408051601f19818403018152908290526118f9939291613e8e565b60405180910390a28251805160a0808201519083015160c09093015160408701516101609093015161192e9492938791612291565b505050808061193c90613ec4565b9150506116ed565b508034101561196657604051637bf261fb60e01b815260040160405180910390fd5b505050565b33600090815260008051602061475f833981519152602052604090205460008051602061477f8339815191529060ff166119bb5760405163962f633360e01b8152600481018290526024016109bc565b60ff8216600081815260086020908152604080832080546001600160a01b031981169091556009835292819020805460ff19166001179055516001600160a01b0390921680835292917f21f97cc4493d15a39bb3e09017843c80cc31e5f6d3e35769cbde2d51caf993ab91015b60405180910390a2505050565b6000546001600160a01b03163314611a6057604051635fc483c560e01b815260040160405180910390fd5b610b44828261236e565b33600090815260008051602061475f833981519152602052604090205460008051602061477f8339815191529060ff16611aba5760405163962f633360e01b8152600481018290526024016109bc565b50600480546001600160a01b0319166001600160a01b0392909216919091179055565b33600090815260008051602061475f833981519152602052604090205460008051602061477f8339815191529060ff16611b2d5760405163962f633360e01b8152600481018290526024016109bc565b50600380546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038216611b775760405163d92e233d60e01b815260040160405180910390fd5b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeed196001600160a01b03841601611ba65761196682826123c6565b826001600160a01b03163b600003611bd157604051630f58058360e11b815260040160405180910390fd5b6119668383836123e2565b60008281526002602090815260408083206001600160a01b0385168085529252808320805460ff1916600117905551909184917f2ae6a113c0ed5b78a53413ffbb7679881f11145ccfba4fb92e863dfcd5a1d2f39190a35050565b600080546001600160a01b0383166001600160a01b0319918216811783556001805490921690915560405190917ffbe19c9b601f5ee90b44c7390f3fa2319eba01762d34ee372aeafd59b25c7f8791a250565b611cb082602001516001600160a01b03166000908152600b602052604090205460ff1690565b611ccd576040516315812c6160e11b815260040160405180910390fd5b6000611cdc8360000151612432565b9050611d0e7f0000000000000000000000000000000000000000000000000000000000000000828586602001516124a2565b6020808401516001600160a01b039081166000818152600a84526040808220885151860151835290945283812054935163ec756c9560e01b81529093849363ec756c9592611d6492889216908a90600401613fb7565b60408051808303816000875af1158015611d82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611da69190613fe1565b915091506000611dc16000805160206147ed83398151915290565b905060405180610120016040528087602001516001600160a01b03168152602001876000015160000151608001516001600160a01b0316815260200187600001516000015160c001516001600160a01b03168152602001876000015160000151610100015163ffffffff168152602001836001600160a01b03168152602001866001600160a01b031681526020018760e001516001600160a01b03168152602001848152602001876040015181525081600001600086815260200190815260200160002060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160020160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060608201518160020160146101000a81548163ffffffff021916908363ffffffff16021790555060808201518160030160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060a08201518160040160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060c08201518160050160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060e082015181600601556101008201518160070155905050837f14a241d5b404d2061ceb9a847972acfd690983f1d8a0fef9779b8191aa1b7ef2600187896040516020016120089190614006565b60408051601f1981840301815290829052612024939291613e8e565b60405180910390a2505050505050565b600060405160200161204590614019565b60405160208183030381529060405260405160200161206390614130565b60408051601f198184030181529082905261208192916020016142e1565b604051602081830303815290604052805190602001206120a4836000015161263e565b8360200151846040015185606001518660800151805190602001208760a001518860c00151805190602001208960e001516040516020016121309998979695949392919098895260208901979097526001600160a01b0395861660408901526060880194909452608087019290925260a086015260c085015260e0840152166101008201526101200190565b604051602081830303815290604052805190602001209050919050565b60006121598284614310565b60e01c905060008061216e8460048188614340565b81019061217b91906143f8565b9150915060005b82518110156122895781818151811061219d5761219d6132ec565b60200260200101516000036121d3576121ce8382815181106121c1576121c16132ec565b60200260200101516126e8565b612281565b600080612213868685815181106121ec576121ec6132ec565b6020026020010151868681518110612206576122066132ec565b60200260200101516129ae565b915091508161227e5784838151811061222e5761222e6132ec565b60200260200101517f07349f83fa11ddca53ca675ac3efd87202dffc9178afef9b223b3976e1949a478260405161227591906001600160e01b031991909116815260200190565b60405180910390a25b50505b600101612182565b505050505050565b835115806122a657506001600160a01b038616155b806122b957506001600160a01b03861630145b612289576040805160018082528183019092526000916020808301908036833701905050905082816000815181106122f3576122f36132ec565b60209081029190910101526040805160018082528183019092526000918160200160208202803683370190505090508281600081518110612336576123366132ec565b60200260200101906001600160a01b031690816001600160a01b031681525050612364888888888686612c11565b5050505050505050565b60008281526002602090815260408083206001600160a01b0385168085529252808320805460ff1916905551909184917f155aaafb6329a2098580462df33ec4b7441b19729b9601c5fc17ae1cf99a8a529190a35050565b60003860003884865af1610b445763b12d13eb6000526004601cfd5b816014528060345263a9059cbb60601b60005260206000604460106000875af1806001600051141661242757803d853b151710612427576390b8ec186000526004601cfd5b506000603452505050565b600060405160200161244390614019565b60405160208183030381529060405260405160200161246190614130565b60408051601f198184030181529082905261247f92916020016142e1565b604051602081830303815290604052805190602001206120a48360000151612d1e565b815151610120810151610140820151606080840151604094850151855160a08082018852600082860181815260808085018390529084526020808501839052938a0191909152885191820189526001600160a01b03978816958201958652810195909552928452918301529281019290925285169063137c29fe9084515161014001516040805180820182526000808252602091820152815180830183526001600160a01b03881681528082019390935287515160800151915189916125689101614130565b60405160208183030381529060405260405160200161258690614019565b60408051601f19818403018152908290526125a492916020016142e1565b60408051601f1981840301815260608301909152602e80835290919061479f60208301396040516020016125d99291906144b0565b60408051601f198184030181529082905260c08a01516001600160e01b031960e089901b16835261261096959493926004016144fe565b600060405180830381600087803b15801561262a57600080fd5b505af1158015612364573d6000803e3d6000fd5b600060405160200161264f90614130565b604051602081830303815290604052805190602001208260000151468460400151856060015186608001518760a001518860c001518960e001518a61010001518b61012001518c61014001518d61016001518e61018001518f6101a001516040516020016126ca9e9d9c9b9a999897969594939291906145a1565b60408051601f1981840301815290829052612130929160200161463d565b60006000805160206147ed8339815191526000838152602082815260409182902082516101208101845281546001600160a01b03908116825260018301548116938201849052600283015480821695830195909552600160a01b90940463ffffffff1660608201526003820154841660808201526004820154841660a0820152600582015490931660c0840152600681015460e084015260070154610100830152919250906127aa576040516341abc80160e01b815260040160405180910390fd5b6040805160608101825260808301516001600160a01b03908116825260e084015160208084019182528086018051841685870190815260008a8152600c8452878120965187549087166001600160a01b031991821617885594516001808901919091559151600297880180549188169187169190911790559289905286832080548516815590810180548516905594850180546001600160c01b031916905560038501805484169055600480860180548516905560058601805490941690935560068501829055600794850191909155925492519351632ad7b7d360e11b8152908101879052928116602484015216906355af6fa690604401600060405180830381600087803b1580156128bd57600080fd5b505af11580156128d1573d6000803e3d6000fd5b50508251608084015160e085015160208601516040516362524dd760e01b81526001600160a01b039384166004820152602481019290925282166044820152911692506362524dd79150606401600060405180830381600087803b15801561293857600080fd5b505af115801561294c573d6000803e3d6000fd5b50505050827fc74d65bbb9e63c78e05140eda2a63c9011b58af244ec5c5e596d4842fe84d32982608001518360e001518460200151604051611a28939291906001600160a01b0393841681526020810192909252909116604082015260600190565b60008281526000805160206147ed8339815191526020818152604080842081516101208101835281546001600160a01b03908116825260018301548116948201859052600283015480821694830194909452600160a01b90930463ffffffff1660608201526003820154831660808201526004820154831660a0820152600582015490921660c0830152600681015460e083015260070154610100820152839291612a695750600092506341abc80160e01b9150612c099050565b8663ffffffff16816060015163ffffffff1614612a9657506000925063f63c9e4d60e01b9150612c099050565b848161010001511115612ab95750600092506330be5d5d60e11b9150612c099050565b60e081015160c08201516001600160a01b039081166000908152600d602090815260408083208651851684528252808320608087015190941683529290529081208054909190612b0a908490613e68565b909155505060008681526020839052604080822080546001600160a01b03199081168255600182018054821690556002820180546001600160c01b031916905560038201805482169055600480830180548316905560058301805490921690915560068201849055600791820193909355549051630710376f60e11b81529182018890526001600160a01b031690630e206ede90602401600060405180830381600087803b158015612bbb57600080fd5b505af1158015612bcf573d6000803e3d6000fd5b50506040518892507f7eea86cc10df3b8a859a99d48d6858b1128a479f035d0223cf9dd929f37c60799150600090a2506001925060009150505b935093915050565b600083838387604051602401612c2a9493929190614663565b60408051601f198184030181529181526020820180516001600160e01b0316636c83392d60e01b17905260065490516337a8727d60e11b81529192506000916001600160a01b0390911690636f50e4fa90612c8d908b9086908c906004016146cd565b6020604051808303816000875af1158015612cac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cd09190614701565b905080612364577fcaf6a92baaa2579fa4947b96c59846b5f1e64162dce1b89d3e524b34c6820ca68589848a604051612d0c9493929190614723565b60405180910390a15050505050505050565b6000604051602001612d2f90614130565b604051602081830303815290604052805190602001204683602001518460400151856060015186608001518760a001518860c001518960e001518a61010001518b61012001518c61014001518d61016001518e61018001518f6101a001516040516020016126ca9e9d9c9b9a999897969594939291906145a1565b803560ff81168114612dbb57600080fd5b919050565b6001600160a01b0381168114612dd557600080fd5b50565b8035612dbb81612dc0565b60008060408385031215612df657600080fd5b612dff83612daa565b91506020830135612e0f81612dc0565b809150509250929050565b600060208284031215612e2c57600080fd5b61128782612daa565b600060208284031215612e4757600080fd5b813561128781612dc0565b600080600060608486031215612e6757600080fd5b8335612e7281612dc0565b92506020840135612e8281612dc0565b929592945050506040919091013590565b60008060408385031215612ea657600080fd5b823591506020830135612e0f81612dc0565b600080600060608486031215612ecd57600080fd5b8335612ed881612dc0565b92506020840135612ee881612dc0565b91506040840135612ef881612dc0565b809150509250925092565b60008083601f840112612f1557600080fd5b5081356001600160401b03811115612f2c57600080fd5b6020830191508360208260051b8501011115612f4757600080fd5b9250929050565b803563ffffffff81168114612dbb57600080fd5b600080600080600060808688031215612f7a57600080fd5b85356001600160401b03811115612f9057600080fd5b612f9c88828901612f03565b90965094505060208601359250612fb560408701612f4e565b9150612fc360608701612f4e565b90509295509295909350565b600080600060408486031215612fe457600080fd5b83356001600160401b03811115612ffa57600080fd5b61300686828701612f03565b9094509250506020840135612ef881612dc0565b60006102a0828403121561302d57600080fd5b50919050565b60008083601f84011261304557600080fd5b5081356001600160401b0381111561305c57600080fd5b602083019150836020828501011115612f4757600080fd5b6000806000806060858703121561308a57600080fd5b843561309581612dc0565b935060208501356001600160401b03808211156130b157600080fd5b6130bd8883890161301a565b945060408701359150808211156130d357600080fd5b506130e087828801613033565b95989497509550505050565b6000602082840312156130fe57600080fd5b5035919050565b6000806040838503121561311857600080fd5b823561312381612dc0565b946020939093013593505050565b81516001600160a01b03908116825260208084015182169083015260408084015191821690830152610120820190506060830151613177606084018263ffffffff169052565b50608083015161319260808401826001600160a01b03169052565b5060a08301516131ad60a08401826001600160a01b03169052565b5060c08301516131c860c08401826001600160a01b03169052565b5060e083015160e083015261010080840151818401525092915050565b6000806000606084860312156131fa57600080fd5b833561320581612dc0565b9250602084013591506040840135612ef881612dc0565b6000806040838503121561322f57600080fd5b82356001600160401b0381111561324557600080fd5b6132518582860161301a565b95602094909401359450505050565b6000806020838503121561327357600080fd5b82356001600160401b0381111561328957600080fd5b61329585828601613033565b90969095509350505050565b600080602083850312156132b457600080fd5b82356001600160401b038111156132ca57600080fd5b61329585828601612f03565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b81835260006001600160fb1b0383111561331b57600080fd5b8260051b80836020870137939093016020019392505050565b600081518084526020808501945080840160005b8381101561336457815187529582019590820190600101613348565b509495945050505050565b604081526000613383604083018587613302565b82810360208401526133958185613334565b9695505050505050565b60005b838110156133ba5781810151838201526020016133a2565b50506000910152565b600081518084526133db81602086016020860161339f565b601f01601f19169290920160200192915050565b600063ffffffff808816835280871660208401525060ff8516604083015283606083015260a0608083015261342760a08301846133c3565b979650505050505050565b608081526000613446608083018789613302565b60ff959095166020830152506001600160a01b0392909216604083015260609091015292915050565b6000823561011e1983360301811261348657600080fd5b9190910192915050565b6000823561029e1983360301811261348657600080fd5b6040516101c081016001600160401b03811182821017156134ca576134ca6132d6565b60405290565b60405161010081016001600160401b03811182821017156134ca576134ca6132d6565b60405161012081016001600160401b03811182821017156134ca576134ca6132d6565b604051601f8201601f191681016001600160401b038111828210171561353e5761353e6132d6565b604052919050565b60006101c0828403121561355957600080fd5b6135616134a7565b90508135815260208201356020820152604082013560408201526060820135606082015261359160808301612dd8565b60808201526135a260a08301612dd8565b60a08201526135b360c08301612dd8565b60c08201526135c460e08301612dd8565b60e08201526101006135d7818401612f4e565b908201526101206135e9838201612dd8565b908201526101408281013590820152610160613606818401612dd8565b9082015261018082810135908201526101a09182013591810191909152919050565b600082601f83011261363957600080fd5b81356001600160401b03811115613652576136526132d6565b613665601f8201601f1916602001613516565b81815284602083860101111561367a57600080fd5b816020850160208301376000918101602001919091529392505050565b60006102a082840312156136aa57600080fd5b6136b26134d0565b90506136be8383613546565b81526136cd6101c08301612dd8565b60208201526101e0820135604082015261020082013560608201526102208201356001600160401b038082111561370357600080fd5b61370f85838601613628565b608084015261024084013560a084015261026084013591508082111561373457600080fd5b5061374184828501613628565b60c0830152506137546102808301612dd8565b60e082015292915050565b6000610120823603121561377257600080fd5b61377a6134f3565b82356001600160401b038082111561379157600080fd5b61379d36838701613697565b83526137ab60208601612dd8565b60208401526040850135604084015260608501359150808211156137ce57600080fd5b6137da36838701613628565b606084015260808501359150808211156137f357600080fd5b6137ff36838701613628565b608084015261381060a08601612dd8565b60a084015260c085013591508082111561382957600080fd5b61383536838701613628565b60c084015261384660e08601612dd8565b60e08401526101009150818501358181111561386157600080fd5b61386d36828801613628565b8385015250505080915050919050565b600061125a3683613697565b6000808335601e198436030181126138a057600080fd5b83016020810192503590506001600160401b038111156138bf57600080fd5b803603821315612f4757600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60408152833560408201526020840135606082015260408401356080820152606084013560a0820152600061392e60808601612dd8565b6001600160a01b031660c083015261394860a08601612dd8565b6001600160a01b031660e083015261396260c08601612dd8565b610100613979818501836001600160a01b03169052565b61398560e08801612dd8565b915061012061399e818601846001600160a01b03169052565b6139a9828901612f4e565b925061014091506139c18286018463ffffffff169052565b6139cc818901612dd8565b9250506101606139e6818601846001600160a01b03169052565b610180925081880135838601526139fe818901612dd8565b9150506101a0613a18818601836001600160a01b03169052565b6101c0915082880135828601526101e09250808801358386015250613a3e818801612dd8565b9050610200613a57818601836001600160a01b03169052565b610220915082880135828601526102409250808801358386015250613a7e81880188613889565b91506102a06102608181880152613a9a6102e0880185856138ce565b93506102809250848a013583880152613ab5818b018b613889565b888603603f1901848a015295509050613acf8486836138ce565b94505050613ade818901612dd8565b915050613af76102c08501826001600160a01b03169052565b5082810360208401526133958185876138ce565b600060208284031215613b1d57600080fd5b61128782612f4e565b604080825283519082018190526000906020906060840190828701845b82811015613b5f57815184529284019290840190600101613b43565b505050838103828501526133958186613334565b60008235609e1983360301811261348657600080fd5b600060a08236031215613b9b57600080fd5b60405160a081016001600160401b038282108183111715613bbe57613bbe6132d6565b816040528435915080821115613bd357600080fd5b613bdf36838701613697565b835260208501359150613bf182612dc0565b816020840152604085013560408401526060850135915080821115613c1557600080fd5b50613c2236828601613628565b606083015250608092830135928101929092525090565b805182526020810151602083015260408101516040830152606081015160608301526080810151613c7560808401826001600160a01b03169052565b5060a0810151613c9060a08401826001600160a01b03169052565b5060c0810151613cab60c08401826001600160a01b03169052565b5060e0810151613cc660e08401826001600160a01b03169052565b506101008181015163ffffffff1690830152610120808201516001600160a01b03908116918401919091526101408083015190840152610160808301519091169083015261018080820151908301526101a090810151910152565b60006102a0613d31848451613c39565b60208301516001600160a01b03166101c085015260408301516101e0850152606083015161020085015260808301516102208501829052613d74828601826133c3565b91505060a083015161024085015260c0830151848203610260860152613d9a82826133c3565b91505060e0830151613db86102808601826001600160a01b03169052565b509392505050565b6000815160a08452613dd560a0850182613d21565b905060018060a01b0360208401511660208501526040830151604085015260608301518482036060860152613e0a82826133c3565b915050608083015160808501528091505092915050565b838152606060208201526000613e3a6060830185613dc0565b905060018060a01b0383166040830152949350505050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561125a5761125a613e52565b6020815260006112876020830184613dc0565b60ff841681526001600160a01b0383166020820152606060408201819052600090613ebb908301846133c3565b95945050505050565b600060018201613ed657613ed6613e52565b5060010190565b60006101208251818552613ef382860182613d21565b9150506020830151613f1060208601826001600160a01b03169052565b506040830151604085015260608301518482036060860152613f3282826133c3565b91505060808301518482036080860152613f4c82826133c3565b91505060a0830151613f6960a08601826001600160a01b03169052565b5060c083015184820360c0860152613f8182826133c3565b91505060e0830151613f9e60e08601826001600160a01b03169052565b50610100808401518583038287015261339583826133c3565b8381526001600160a01b0383166020820152606060408201819052600090613ebb90830184613edd565b60008060408385031215613ff457600080fd5b825191506020830151612e0f81612dc0565b6020815260006112876020830184613edd565b670a4cae2eacae6e8560c31b81527510985cda58d4995c5d595cdd0818985cda58d4995c4b60521b60088201527f6164647265737320737761704f7574707574546f6b656e2c0000000000000000601e820152751d5a5b9d0c8d4d881b5a5b94ddd85c13dd5d1c1d5d0b60521b603682015270189e5d195ccccc881b595d1859185d184b607a1b604c82015273189e5d195cc81859999a5b1a585d195199595ccb60621b605d820152721d5a5b9d0c8d4d881b5a5b91195cdd11d85ccb606a1b60718201527f62797465732064657374696e6174696f6e5061796c6f61642c0000000000000060848201527f61646472657373206578636c75736976655472616e736d697474657229000000609d82015260ba0190565b6c084c2e6d2c6a4cae2eacae6e85609b1b8152751d5a5b9d0c8d4d881bdc9a59da5b90da185a5b92590b60521b600d8201527f75696e743235362064657374696e6174696f6e436861696e49642c00000000006023820152701d5a5b9d0c8d4d88191958591b1a5b994b607a1b603e8201526d1d5a5b9d0c8d4d881b9bdb98d94b60921b604f8201526e1859191c995cdcc81cd95b99195c8b608a1b605d820152701859191c995cdcc81c9958d95a5d995c8b607a1b606c820152701859191c995cdcc819195b1959d85d194b607a1b607d820152751859191c995cdcc8189d5b99d95951d85d195dd85e4b60521b608e820152741d5a5b9d0ccc881cddda5d18da189bd85c9912590b605a1b60a4820152721859191c995cdcc81a5b9c1d5d151bdad95b8b606a1b60b9820152731d5a5b9d0c8d4d881a5b9c1d5d105b5bdd5b9d0b60621b60cc820152731859191c995cdcc81bdd5d1c1d5d151bdad95b8b60621b60e08201527f75696e74323536206d696e4f7574707574416d6f756e742c75696e743235362060f48201526c72656675656c416d6f756e742960981b6101148201526000610121820161125a565b600083516142f381846020880161339f565b83519083019061430781836020880161339f565b01949350505050565b6001600160e01b031981358181169160048510156143385780818660040360031b1b83161692505b505092915050565b6000808585111561435057600080fd5b8386111561435d57600080fd5b5050820193919092039150565b60006001600160401b03821115614383576143836132d6565b5060051b60200190565b600082601f83011261439e57600080fd5b813560206143b36143ae8361436a565b613516565b82815260059290921b840181019181810190868411156143d257600080fd5b8286015b848110156143ed57803583529183019183016143d6565b509695505050505050565b6000806040838503121561440b57600080fd5b82356001600160401b038082111561442257600080fd5b818501915085601f83011261443657600080fd5b813560206144466143ae8361436a565b82815260059290921b8401810191818101908984111561446557600080fd5b948201945b838610156144835785358252948201949082019061446a565b9650508601359250508082111561449957600080fd5b506144a68582860161438d565b9150509250929050565b6f52657175657374207769746e6573732960801b8152600083516144db81601085016020880161339f565b8351908301906144f281601084016020880161339f565b01601001949350505050565b6000610140614521838a5180516001600160a01b03168252602090810151910152565b6020890151604084015260408901516060840152614555608084018980516001600160a01b03168252602090810151910152565b6001600160a01b03871660c084015260e08301869052610100830181905261457f818401866133c3565b905082810361012084015261459481856133c3565b9998505050505050505050565b8e8152602081018e9052604081018d9052606081018c90526001600160a01b038b811660808301528a811660a083015289811660c0830152881660e08201526101c0810163ffffffff88166101008301526001600160a01b0387166101208301528561014083015261461f6101608301866001600160a01b03169052565b6101808201939093526101a001529c9b505050505050505050505050565b8281526000825161465581602085016020870161339f565b919091016020019392505050565b8481526000602060808184015261467d6080840187613334565b838103604085015285518082528287019183019060005b818110156146b95783516001600160a01b031683529284019291840191600101614694565b5050848103606086015261459481876133c3565b6001600160a01b03841681526060602082018190526000906146f1908301856133c3565b9050826040830152949350505050565b60006020828403121561471357600080fd5b8151801515811461128757600080fd5b8481526001600160a01b038416602082015260806040820181905260009061474d908301856133c3565b90508260608301529594505050505056fe01e90903605908818f4785c46825db30465c70bc0545136a320d85d90661836182db594318110a04b6349ce48645aa69f0892751bc893d15e61d9e2b9c4630f5546f6b656e5065726d697373696f6e73286164647265737320746f6b656e2c75696e7432353620616d6f756e742979b06a356cc9b4ff989730c568e8098eadbcb882c69316f29a17e156b9f21f0179b06a356cc9b4ff989730c568e8098eadbcb882c69316f29a17e156b9f21f00a2646970667358221220c8a9ea2902c68993d344745f8221be84c6830af6db6be32744c17e2db4729d3764736f6c63430008130033000000000000000000000000daee4d2156de6fe6f7d50ca047136d758f96a6f0000000000000000000000000000000000022d473030f116ddee9f6b43ac78ba3