45 txs
79 calls
constructor
constructor(address[5] _addresses, uint256 _duration, uint256 _minBridges, address[] _multiBridgeAdapters, uint256[] _chainId, address[] _bridges, uint256[] _mintingLimits, uint256[] _burningLimits, bytes4[2] _selectors)
functions
allowTokenUnwrapping
viewfunction allowTokenUnwrapping() view returns (bool)
bridges
viewfunction bridges(address) view returns (tuple minterParams, tuple burnerParams)
BURN_SELECTOR_SINGLE
viewfunction BURN_SELECTOR_SINGLE() view returns (bytes4)
BURN_SELECTOR
viewfunction BURN_SELECTOR() view returns (bytes4)
burningCurrentLimitOf
viewfunction burningCurrentLimitOf(address _bridge) view returns (uint256 _limit)
burningMaxLimitOf
viewfunction burningMaxLimitOf(address _bridge) view returns (uint256 _limit)
calculateTransferId
viewfunction calculateTransferId(uint256 destChainId) view returns (bytes32)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
deliveredBy
viewfunction deliveredBy(bytes32, address) view returns (bool)
destChainForMessage
viewfunction destChainForMessage(bytes32) view returns (uint256)
duration
viewfunction duration() view returns (uint256)
feeCollector
viewfunction feeCollector() view returns (address)
getControllerForChain
viewfunction getControllerForChain(uint256 chainId) view returns (address)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
minBridges
viewfunction minBridges() view returns (uint256)
MINT_SELECTOR
viewfunction MINT_SELECTOR() view returns (bytes4)
mintingCurrentLimitOf
viewfunction mintingCurrentLimitOf(address _bridge) view returns (uint256 _limit)
mintingMaxLimitOf
viewfunction mintingMaxLimitOf(address _bridge) view returns (uint256 _limit)
multiBridgeAdapters
viewfunction multiBridgeAdapters(address) view returns (bool)
nonce
viewfunction nonce() view returns (uint256)
PAUSE_ROLE
viewfunction PAUSE_ROLE() view returns (bytes32)
paused
viewfunction paused() view returns (bool)
receivedTransfers
viewfunction receivedTransfers(bytes32) view returns (address recipient, uint256 amount, bool unwrap, uint256 receivedSoFar, uint256 threshold, uint256 originChainId, bool executed)
relayedTransfers
viewfunction relayedTransfers(bytes32) view returns (address recipient, uint256 amount, bool unwrap, uint256 threshold, bytes32 transferId)
setTokenUnwrapping
viewfunction setTokenUnwrapping(bool) view
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
token
viewfunction token() view returns (address)
transfersPausedTo
viewfunction transfersPausedTo(uint256) view returns (bool)
execute
nonpayablefunction execute(bytes32 transferId)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
pause
nonpayablefunction pause()
pauseTransfersToChain
nonpayablefunction pauseTransfersToChain(uint256 _chainId, bool _pause)
receiveMessage
nonpayablefunction receiveMessage(bytes receivedMsg, uint256 originChain, address originSender)
renounceRole
nonpayablefunction renounceRole(bytes32 role, address account)
resendTransfer
payablefunction resendTransfer(bytes32 transferId, address adapter, bytes options) payable
resendTransfer
payablefunction resendTransfer(bytes32 transferId, address[] adapters, uint256[] fees, bytes[] options) payable
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
setControllerForChain
nonpayablefunction setControllerForChain(uint256[] chainId, address[] controller)
setLimits
nonpayablefunction setLimits(address _bridge, uint256 _mintingLimit, uint256 _burningLimit)
setMinBridges
nonpayablefunction setMinBridges(uint256 _minBridges)
setMultiBridgeAdapters
nonpayablefunction setMultiBridgeAdapters(address[] adapter, bool[] enabled)
transferTo
payablefunction transferTo(address recipient, uint256 amount, bool unwrap, uint256 destChainId, address bridgeAdapter, bytes bridgeOptions) payable
transferTo
payablefunction transferTo(address recipient, uint256 amount, bool unwrap, uint256 destChainId, address[] adapters, uint256[] fees, bytes[] options) payable
unpause
nonpayablefunction unpause()
withdraw
nonpayablefunction withdraw(address recipient)
events
AllowTokenUnwrappingSet
event AllowTokenUnwrappingSet(bool allowUnwrapping)
BridgeLimitsSet
event BridgeLimitsSet(uint256 _mintingLimit, uint256 _burningLimit, address indexed _bridge)
ControllerForChainSet
event ControllerForChainSet(address indexed controller, uint256 chainId)
LiquidityAdded
event LiquidityAdded(uint256 amount)
LiquidityRemoved
event LiquidityRemoved(uint256 amount)
MinBridgesSet
event MinBridgesSet(uint256 minBridges)
MultiBridgeAdapterSet
event MultiBridgeAdapterSet(address indexed adapter, bool enabled)
Paused
event Paused(address account)
RoleAdminChanged
event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole)
RoleGranted
event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender)
RoleRevoked
event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender)
TransferCreated
event TransferCreated(bytes32 indexed transferId, uint256 indexed destChainId, uint256 threshold, address indexed sender, address recipient, uint256 amount, bool unwrap)
TransferExecutable
event TransferExecutable(bytes32 indexed transferId)
TransferExecuted
event TransferExecuted(bytes32 indexed transferId)
TransferReceived
event TransferReceived(bytes32 indexed transferId, uint256 originChainId, address bridgeAdapter)
TransferRelayed
event TransferRelayed(bytes32 indexed transferId, address bridgeAdapter)
TransferResent
event TransferResent(bytes32 indexed transferId)
TransfersPausedToChain
event TransfersPausedToChain(uint256 indexed chainId, bool paused)
Unpaused
event Unpaused(address account)
errors
Controller_AdapterNotSupported
error Controller_AdapterNotSupported()
Controller_Chain_Not_Supported
error Controller_Chain_Not_Supported()
Controller_DuplicateAdapter
error Controller_DuplicateAdapter()
Controller_EtherTransferFailed
error Controller_EtherTransferFailed()
Controller_FeesSumMismatch
error Controller_FeesSumMismatch()
Controller_Invalid_Params
error Controller_Invalid_Params()
Controller_LimitsTooHigh
error Controller_LimitsTooHigh()
Controller_MultiBridgeTransfersDisabled
error Controller_MultiBridgeTransfersDisabled()
Controller_NotEnoughTokensInPool
error Controller_NotEnoughTokensInPool()
Controller_NotHighEnoughLimits
error Controller_NotHighEnoughLimits()
Controller_ThresholdNotMet
error Controller_ThresholdNotMet()
Controller_TokenBurnFailed
error Controller_TokenBurnFailed()
Controller_TokenMintFailed
error Controller_TokenMintFailed()
Controller_TransferNotExecutable
error Controller_TransferNotExecutable()
Controller_TransferResentByAadapter
error Controller_TransferResentByAadapter()
Controller_TransfersPausedToDestination
error Controller_TransfersPausedToDestination()
Controller_UnknownTransfer
error Controller_UnknownTransfer()
Controller_UnwrappingNotSupported
error Controller_UnwrappingNotSupported()
Controller_ZeroAmount
error Controller_ZeroAmount()
creation bytecode
0x60e06040523480156200001157600080fd5b506040516200497c3803806200497c833981016040819052620000349162000b2d565b888888888888888888886001602002015189600260200201516001805460ff191690558986868662000068600087620004a3565b620000836000805160206200495c83398151915287620004a3565b6200009e6000805160206200495c83398151915286620004b3565b83600003620000c057604051633f4e2f2960e21b815260040160405180910390fd5b600284905581518351141580620000d957508051835114155b15620000f857604051633f4e2f2960e21b815260040160405180910390fd5b8251156200018b5760005b835181101562000189576200017484828151811062000126576200012662000c4f565b602002602001015184838151811062000143576200014362000c4f565b602002602001015184848151811062000160576200016062000c4f565b60200260200101516200053b60201b60201c565b80620001808162000c7b565b91505062000103565b505b5050600160045550508a516001600160a01b0316159150819050620001bb575060608901516001600160a01b0316155b15620001da57604051633f4e2f2960e21b815260040160405180910390fd5b8851600580546001600160a01b0319166001600160a01b0392831617905560608a01511660805260068790556040518781527fe125065bd51f3e795dd066e6f64e43cedd27dc38adf0062c7be9eaa209ae11479060200160405180910390a1855115620003225760005b8651811015620003205760016009600089848151811062000269576200026962000c4f565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff021916908315150217905550868181518110620002bd57620002bd62000c4f565b60200260200101516001600160a01b03167fd3577f4d8ca054ac85e150e2a592220c54234d070e9f8ed0199869b7a17b2520600160405162000303911515815260200190565b60405180910390a280620003178162000c7b565b91505062000244565b505b60808901516001600160a01b0316156200042f5760005b85518110156200042d5789600460200201516008600088848151811062000364576200036462000c4f565b6020026020010151815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555089600460058110620003b457620003b462000c4f565b60200201516001600160a01b03167f3083b3b95a46df5c4a6cdd1fa242b76f968ed75bf364ec15de70e5b043f62831878381518110620003f857620003f862000c4f565b60200260200101516040516200041091815260200190565b60405180910390a280620004248162000c7b565b91505062000339565b505b6005805460ff60a01b19169055604051600081527f2b777c07ea46054410835bc43625d87926c44d9a6b4ec49a7e3248d434cfe5b59060200160405180910390a180516001600160e01b031990811660a0526020909101511660c0525062000d009f50505050505050505050505050505050565b620004af8282620004b3565b5050565b620004bf8282620005e5565b620004af576000828152602081815260408083206001600160a01b03851684529091529020805460ff19166001179055620004f73390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6200054a600260001962000c97565b82118062000565575062000562600260001962000c97565b81115b1562000584576040516301e8cafb60e71b815260040160405180910390fd5b62000590838362000610565b6200059c8382620006bb565b60408051838152602081018390526001600160a01b038516917f93f3bbfe8cfb354ec059175107653f49f6eb479a8622a7d83866ea015435c944910160405180910390a2505050565b6000828152602081815260408083206001600160a01b038516845290915290205460ff165b92915050565b6001600160a01b0382166000908152600360205260408120600201549062000638846200076b565b6001600160a01b0385166000908152600360205260409020600201849055905062000665838383620007a2565b6001600160a01b0385166000908152600360208190526040909120015560025462000691908462000c97565b6001600160a01b039094166000908152600360205260409020600181019490945550504290915550565b6001600160a01b03821660009081526003602052604081206006015490620006e38462000805565b6001600160a01b0385166000908152600360205260409020600601849055905062000710838383620007a2565b6001600160a01b0385166000908152600360205260409020600701556002546200073b908462000c97565b6001600160a01b039094166000908152600360205260409020600581019490945550504260049092019190915550565b6001600160a01b0381166000908152600360208190526040822090810154600282015482546001909301546200060a939062000839565b60008084841115620007e057620007ba858562000cba565b9050808311620007cc576000620007d8565b620007d8818462000cba565b9150620007fd565b620007ec848662000cba565b9050620007fa818462000cd0565b91505b509392505050565b6001600160a01b03811660009081526003602052604081206007810154600682015460048301546005909301546200060a93905b83838114620008bb57426002548462000853919062000cd0565b1162000861575082620008bb565b426002548462000872919062000cd0565b1115620008bb57600062000887844262000cba565b9050600062000897848362000ce6565b620008a3908462000cd0565b9050858111620008b45780620008b6565b855b925050505b949350505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715620009045762000904620008c3565b604052919050565b80516001600160a01b03811681146200092457600080fd5b919050565b600082601f8301126200093b57600080fd5b60405160a081016001600160401b0381118282101715620009605762000960620008c3565b6040528060a08401858111156200097657600080fd5b845b818110156200099b576200098c816200090c565b83526020928301920162000978565b509195945050505050565b60006001600160401b03821115620009c257620009c2620008c3565b5060051b60200190565b600082601f830112620009de57600080fd5b81516020620009f7620009f183620009a6565b620008d9565b82815260059290921b8401810191818101908684111562000a1757600080fd5b8286015b8481101562000a3d5762000a2f816200090c565b835291830191830162000a1b565b509695505050505050565b600082601f83011262000a5a57600080fd5b8151602062000a6d620009f183620009a6565b82815260059290921b8401810191818101908684111562000a8d57600080fd5b8286015b8481101562000a3d578051835291830191830162000a91565b600082601f83011262000abc57600080fd5b604080519081016001600160401b038111828210171562000ae15762000ae1620008c3565b806040525080604084018581111562000af957600080fd5b845b818110156200099b5780516001600160e01b03198116811462000b1e5760008081fd5b83526020928301920162000afb565b60008060008060008060008060006101c08a8c03121562000b4d57600080fd5b62000b598b8b62000929565b60a08b015160c08c015160e08d0151929b5090995097506001600160401b038082111562000b8657600080fd5b62000b948d838e01620009cc565b97506101008c015191508082111562000bac57600080fd5b62000bba8d838e0162000a48565b96506101208c015191508082111562000bd257600080fd5b62000be08d838e01620009cc565b95506101408c015191508082111562000bf857600080fd5b62000c068d838e0162000a48565b94506101608c015191508082111562000c1e57600080fd5b5062000c2d8c828d0162000a48565b92505062000c408b6101808c0162000aaa565b90509295985092959850929598565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001820162000c905762000c9062000c65565b5060010190565b60008262000cb557634e487b7160e01b600052601260045260246000fd5b500490565b818103818111156200060a576200060a62000c65565b808201808211156200060a576200060a62000c65565b80820281158282048414176200060a576200060a62000c65565b60805160a05160c051613c1762000d45600039600061071c015260006105b90152600081816108e301528181610d9e01528181610e430152610e910152613c176000f3fe6080604052600436106102805760003560e01c80637385e7fb1161014f578063c1eb7137116100c1578063d3a8b6311161007a578063d3a8b63114610a08578063d547741f14610a1b578063d6991b5b14610a3b578063e751f27114610a5b578063eab6995814610a7b578063fc0c546a14610a9157600080fd5b8063c1eb713714610898578063c415b95c146108d1578063cdf0366f1461091d578063ced67f0c1461093d578063d236ad68146109d5578063d30a41c8146109f557600080fd5b806391d148541161011357806391d148541461075f578063968638861461077f578063998955d31461082d578063a08d56541461084d578063a217fddf1461086d578063affed0e01461088257600080fd5b80637385e7fb1461066c5780637e0a8c6a1461069c5780638456cb59146106f557806387a131bb1461070a57806389a3b4fb1461073e57600080fd5b806336568abe116101f357806351cff8d9116101ac57806351cff8d914610587578063544fe464146105a75780635c975abb146105f4578063651fd2681461060c5780637256d8721461062c578063734afa2b1461064c57600080fd5b806336568abe146104d8578063365fc213146104f8578063389ed2671461051857806339c82de61461054c5780633f4ba83a1461055f5780634995c3e71461057457600080fd5b806315af3b671161024557806315af3b671461036d5780631f9bb777146103a8578063215e73e114610438578063248a9ca31461046857806327a65d3f146104985780632f2ff15d146104b857600080fd5b80625856cb1461028c57806301ffc9a7146102cc5780630c05f82c146102fc5780630fb5a6b41461033557806312ca7dbb1461034b57600080fd5b3661028757005b600080fd5b34801561029857600080fd5b506102b96102a736600461317c565b600d6020526000908152604090205481565b6040519081526020015b60405180910390f35b3480156102d857600080fd5b506102ec6102e7366004613195565b610ab1565b60405190151581526020016102c3565b34801561030857600080fd5b506102b96103173660046131d4565b6001600160a01b031660009081526003602052604090206002015490565b34801561034157600080fd5b506102b960025481565b34801561035757600080fd5b5061036b6103663660046131ff565b610ae8565b005b34801561037957600080fd5b506102ec61038836600461322f565b600e60209081526000928352604080842090915290825290205460ff1681565b3480156103b457600080fd5b506104006103c336600461317c565b600c60205260009081526040902080546001820154600283015460038401546004909401546001600160a01b0390931693919260ff909116919085565b604080516001600160a01b0390961686526020860194909452911515928401929092526060830191909152608082015260a0016102c3565b34801561044457600080fd5b506102ec6104533660046131d4565b60096020526000908152604090205460ff1681565b34801561047457600080fd5b506102b961048336600461317c565b60009081526020819052604090206001015490565b3480156104a457600080fd5b5061036b6104b3366004613331565b610b4c565b3480156104c457600080fd5b5061036b6104d336600461322f565b610c83565b3480156104e457600080fd5b5061036b6104f336600461322f565b610cad565b34801561050457600080fd5b5061036b6105133660046133f4565b610d30565b34801561052457600080fd5b506102b97f139c2898040ef16910dc9f44dc697df79363da767d8bc92f2e310312b816e46d81565b61036b61055a36600461355a565b610d54565b34801561056b57600080fd5b5061036b61117f565b61036b61058236600461361a565b6111b4565b34801561059357600080fd5b5061036b6105a23660046131d4565b6113ba565b3480156105b357600080fd5b506105db7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160e01b031990911681526020016102c3565b34801561060057600080fd5b5060015460ff166102ec565b34801561061857600080fd5b506102b96106273660046131d4565b611460565b34801561063857600080fd5b506102b961064736600461317c565b611495565b34801561065857600080fd5b5061036b610667366004613672565b6114dc565b34801561067857600080fd5b506102ec61068736600461317c565b600a6020526000908152604090205460ff1681565b3480156106a857600080fd5b5060408051808201909152600d81526c6275726e2875696e743235362960981b6020909101526105db7f42966c689b5afe9b9b3f8a7103b2a19980d59629bfd6a20a60972312ed41d83681565b34801561070157600080fd5b5061036b611982565b34801561071657600080fd5b506105db7f000000000000000000000000000000000000000000000000000000000000000081565b34801561074a57600080fd5b506005546102ec90600160a01b900460ff1681565b34801561076b57600080fd5b506102ec61077a36600461322f565b6119b4565b34801561078b57600080fd5b506107e661079a36600461317c565b600b6020526000908152604090208054600182015460028301546003840154600485015460058601546006909601546001600160a01b0390951695939460ff9384169492939192911687565b604080516001600160a01b0390981688526020880196909652931515948601949094526060850191909152608084015260a0830191909152151560c082015260e0016102c3565b34801561083957600080fd5b506102b96108483660046131d4565b6119dd565b34801561085957600080fd5b5061036b6108683660046136fc565b611a14565b34801561087957600080fd5b506102b9600081565b34801561088e57600080fd5b506102b960075481565b3480156108a457600080fd5b506102b96108b33660046131d4565b6001600160a01b031660009081526003602052604090206006015490565b3480156108dd57600080fd5b506109057f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016102c3565b34801561092957600080fd5b5061036b610938366004613731565b611a2a565b34801561094957600080fd5b506109c76109583660046131d4565b60036020818152600092835260409283902083516080808201865282548252600183015482850152600283015482870152938201546060808301919091528551948501865260048301548552600583015493850193909352600682015494840194909452600701549082015282565b6040516102c3929190613794565b3480156109e157600080fd5b5061036b6109f036600461317c565b611a3f565b61036b610a033660046137e0565b611a87565b61036b610a16366004613866565b611d79565b348015610a2757600080fd5b5061036b610a3636600461322f565b611eae565b348015610a4757600080fd5b50610905610a5636600461317c565b611ed3565b348015610a6757600080fd5b5061036b610a7636600461317c565b611eee565b348015610a8757600080fd5b506102b960065481565b348015610a9d57600080fd5b50600554610905906001600160a01b031681565b60006001600160e01b03198216637965db0b60e01b1480610ae257506301ffc9a760e01b6001600160e01b03198316145b92915050565b6000610af381612063565b6000838152600a6020908152604091829020805460ff1916851515908117909155915191825284917f8670d56066b58d6b5eff6e9ff63fb7bc28c6d4ec9676c45cf2360314e9e9c24a91015b60405180910390a2505050565b6000610b5781612063565b8151835114610b7957604051633f4e2f2960e21b815260040160405180910390fd5b60005b8351811015610c7d57828181518110610b9757610b976138f7565b602002602001015160096000868481518110610bb557610bb56138f7565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff021916908315150217905550838181518110610c0657610c066138f7565b60200260200101516001600160a01b03167fd3577f4d8ca054ac85e150e2a592220c54234d070e9f8ed0199869b7a17b2520848381518110610c4a57610c4a6138f7565b6020026020010151604051610c63911515815260200190565b60405180910390a280610c7581613923565b915050610b7c565b50505050565b600082815260208190526040902060010154610c9e81612063565b610ca8838361206d565b505050565b6001600160a01b0381163314610d225760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b610d2c82826120f1565b5050565b6000610d3b81612063565b604051633694061d60e11b815260040160405180910390fd5b610d5c612156565b610d646121af565b85600003610d8557604051636c13c71b60e01b815260040160405180910390fd5b604051633b46f5db60e21b8152600481018790526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063ed1bd76c90602401602060405180830381865afa158015610ded573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e11919061393c565b90508015610ef057610e31336005546001600160a01b03169030846121f7565b600554610e68906001600160a01b03167f000000000000000000000000000000000000000000000000000000000000000083612262565b600554604051631ae0d5eb60e21b81526001600160a01b039182166004820152602481018390527f000000000000000000000000000000000000000000000000000000000000000090911690636b8357ac90604401600060405180830381600087803b158015610ed757600080fd5b505af1158015610eeb573d6000803e3d6000fd5b505050505b610efa3388612377565b6000610f0660006119dd565b905087811015610f2957604051633ebc3cb560e11b815260040160405180910390fd5b610f346000896123bf565b610f3d85612419565b60065485511015610f6157604051633f4e2f2960e21b815260040160405180910390fd5b6001600160a01b038916610f8857604051633f4e2f2960e21b815260040160405180910390fd5b600654600003610fab5760405163d123a59d60e01b815260040160405180910390fd5b6000610fb687611ed3565b6001600160a01b031603610fdd57604051634ea9399d60e01b815260040160405180910390fd5b6000868152600a602052604090205460ff161561100d5760405163e5d48ceb60e01b815260040160405180910390fd5b600061101887611495565b60078054919250600061102a83613923565b919050555060006040518060a001604052808c6001600160a01b031681526020018b81526020018a15158152602001600654815260200183815250905087600d60008481526020019081526020016000208190555080600c600084815260200190815260200160002060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506020820151816001015560408201518160020160006101000a81548160ff021916908315150217905550606082015181600301556080820151816004015590505061110f8189898989346124d1565b600654604080519182526001600160a01b038d16602083015281018b905289151560608201523390899084907f7214d2a3fc41a2bc94a7a69749a3d127afd8d8e79e0573dbe7892d84ee6fdd749060800160405180910390a4505050506111766001600455565b50505050505050565b7f139c2898040ef16910dc9f44dc697df79363da767d8bc92f2e310312b816e46d6111a981612063565b6111b1612716565b50565b6111bc612156565b6111c46121af565b6000838152600d6020526040812054908190036111f45760405163789d685360e01b815260040160405180910390fd5b6000848152600c6020908152604091829020825160a08101845281546001600160a01b0316815260018083015493820193909352600282015460ff1615159381019390935260038101546060840181905260049091015460808401529003611395576000611261856119dd565b9050816020015181101561128857604051633ebc3cb560e11b815260040160405180910390fd5b846001600160a01b031663a4cbec7334856112a287611ed3565b88876040516020016112b49190613955565b6040516020818303038152906040526040518663ffffffff1660e01b81526004016112e294939291906139e5565b60206040518083038185885af1158015611300573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611325919061393c565b5060405186907fdc2df65ad98a3640553c4a6fa9e8b28b7cac67002cff20bfa132ad69b51b9e6d90600090a26040516001600160a01b038616815286907f5a94fe36b9c96bbd30dafe9eb364e4d1ac0751c6f8c114bd0977952694149c079060200160405180910390a2506113ae565b604051633f4e2f2960e21b815260040160405180910390fd5b5050610ca86001600455565b60006113c581612063565b6001600160a01b0382166113ec57604051633f4e2f2960e21b815260040160405180910390fd5b6000826001600160a01b03164760405160006040518083038185875af1925050503d8060008114611439576040519150601f19603f3d011682016040523d82523d6000602084013e61143e565b606091505b5050905080610ca857604051631bc19cc560e31b815260040160405180910390fd5b6001600160a01b038116600090815260036020819052604082209081015460028201548254600190930154610ae29390612768565b600081466007546040516020016114bf939291909283526020830191909152604082015260600190565b604051602081830303815290604052805190602001209050919050565b6114e4612156565b806001600160a01b03166114f783611ed3565b6001600160a01b03161461151e57604051633f4e2f2960e21b815260040160405180910390fd5b600061152c84860186613a2c565b905080606001516001036116ea5760808101516000908152600b60205260409020600101541561156f57604051632da0ab1960e01b815260040160405180910390fd5b6040805160e08101825282516001600160a01b039081168252602080850151818401908152858501511515848601908152600160608601818152608080880183815260a089018d815260c08a01858152928c01516000908152600b9098529987209851895498166001600160a01b0319909816979097178855935191870191909155905160028601805491151560ff199283161790559051600386015592516004850155935160058401559251600690920180549215159290911691909117905561163933611460565b9050816020015181101561166057604051633ebc3cb560e11b815260040160405180910390fd5b61166e3383602001516127e2565b816040015180156116885750600554600160a01b900460ff165b156116a45761169f82600001518360200151612839565b6116b6565b6116b68260000151836020015161283f565b60808201516040517fe843a2101c5af088cd2648db06f117411c38047d50a9f499f99cd99adb41490a90600090a25061193a565b3360009081526009602052604090205460ff1661171a57604051635cfb665160e01b815260040160405180910390fd5b60808101516000908152600e6020908152604080832033845290915290205460ff16151560010361175e5760405163c7d1b4c160e01b815260040160405180910390fd5b608080820180516000908152600e602090815260408083203384528252808320805460ff1916600190811790915593518352600b8252808320815160e08101835281546001600160a01b031681529481015492850192909252600282015460ff908116151591850191909152600382015460608501819052600483015495850195909552600582015460a085015260069091015416151560c08301529091900361185b576040518060e0016040528083600001516001600160a01b0316815260200183602001518152602001836040015115158152602001600181526020018360600151815260200185815260200160001515815250905061186f565b6060810180519061186b82613923565b9052505b80608001518160600151106118ad5760808201516040517fb23e240f843ae6fd7bc9d43aef3333ff0333d69a51e80b0d869df7546162622590600090a25b6080808301516000908152600b6020908152604091829020845181546001600160a01b039091166001600160a01b03199091161781559084015160018201559083015160028201805491151560ff199283161790556060840151600383015591830151600482015560a0830151600582015560c09092015160069092018054921515929091169190911790555b6080810151604080518581523360208201527fb56eee7198c2db26c3593517941abaa02608050011d356b4f29e8a5c6a269aed910160405180910390a250610c7d6001600455565b7f139c2898040ef16910dc9f44dc697df79363da767d8bc92f2e310312b816e46d6119ac81612063565b6111b1612911565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b6001600160a01b0381166000908152600360205260408120600781015460068201546004830154600590930154610ae29390612768565b6000611a1f81612063565b610c7d84848461294c565b6000611a3581612063565b610ca883836129e4565b6000611a4a81612063565b60068290556040518281527fe125065bd51f3e795dd066e6f64e43cedd27dc38adf0062c7be9eaa209ae1147906020015b60405180910390a15050565b611a8f612156565b611a976121af565b84600003611ab857604051636c13c71b60e01b815260040160405180910390fd5b84611ac2836119dd565b1015611ae157604051633ebc3cb560e11b815260040160405180910390fd5b611aeb82866123bf565b611af53386612377565b6001600160a01b038616611b1c57604051633f4e2f2960e21b815260040160405180910390fd5b6000611b2784611ed3565b6001600160a01b031603611b4e57604051634ea9399d60e01b815260040160405180910390fd5b6000838152600a602052604090205460ff1615611b7e5760405163e5d48ceb60e01b815260040160405180910390fd5b6000611b8984611495565b600780549192506000611b9b83613923565b90915550506000818152600d60209081526040808320879055805160a0810182526001600160a01b038b811682528184018b81528a1515838501908152600160608501818152608086018a81528a8a52600c90985295909720845181546001600160a01b031916908516178155915196820196909655945160028601805460ff191691151591909117905591516003850155915160049093019290925590841663a4cbec733487611c4b81611ed3565b8786604051602001611c5d9190613955565b6040516020818303038152906040526040518663ffffffff1660e01b8152600401611c8b94939291906139e5565b60206040518083038185885af1158015611ca9573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611cce919061393c565b5060408051600181526001600160a01b038a166020820152808201899052871515606082015290513391879185917f7214d2a3fc41a2bc94a7a69749a3d127afd8d8e79e0573dbe7892d84ee6fdd74919081900360800190a46040516001600160a01b038516815282907f5a94fe36b9c96bbd30dafe9eb364e4d1ac0751c6f8c114bd0977952694149c079060200160405180910390a25050611d716001600455565b505050505050565b611d81612156565b611d896121af565b6000848152600d602052604081205490819003611db95760405163789d685360e01b815260040160405180910390fd5b600654600003611ddc5760405163d123a59d60e01b815260040160405180910390fd5b611de584612419565b6000858152600c6020908152604091829020825160a08101845281546001600160a01b0316815260018083015493820193909352600282015460ff1615159381019390935260038101546060840181905260049091015460808401521115611395578351855114611e6957604051633f4e2f2960e21b815260040160405180910390fd5b611e778183878787346124d1565b60405186907fdc2df65ad98a3640553c4a6fa9e8b28b7cac67002cff20bfa132ad69b51b9e6d90600090a25050610c7d6001600455565b600082815260208190526040902060010154611ec981612063565b610ca883836120f1565b6000908152600860205260409020546001600160a01b031690565b611ef6612156565b611efe6121af565b6000818152600b602052604081206001810154909103611f315760405163789d685360e01b815260040160405180910390fd5b600681015460ff1615611f5757604051632da0ab1960e01b815260040160405180910390fd5b806004015481600301541015611f8057604051631b8d5dc160e01b815260040160405180910390fd5b6000611f8c6000611460565b90508160010154811015611fb357604051633ebc3cb560e11b815260040160405180910390fd5b611fc2600083600101546127e2565b60068201805460ff19166001179055600282015460ff168015611fee5750600554600160a01b900460ff165b15612012578154600183015461200d916001600160a01b031690612839565b61202c565b8154600183015461202c916001600160a01b03169061283f565b60405183907fe843a2101c5af088cd2648db06f117411c38047d50a9f499f99cd99adb41490a90600090a250506111b16001600455565b6111b18133612b03565b61207782826119b4565b610d2c576000828152602081815260408083206001600160a01b03851684529091529020805460ff191660011790556120ad3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6120fb82826119b4565b15610d2c576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6002600454036121a85760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610d19565b6002600455565b60015460ff16156121f55760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610d19565b565b6040516001600160a01b0380851660248301528316604482015260648101829052610c7d9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152612b5c565b8015806122dc5750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa1580156122b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122da919061393c565b155b6123475760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b6064820152608401610d19565b6040516001600160a01b038316602482015260448101829052610ca890849063095ea7b360e01b9060640161222b565b60055461238f906001600160a01b03168330846121f7565b6040518181527ffdb748c915e4e67b4bb23287bf4295a4595ce48b50343214369f72ccfb974cfa90602001611a7b565b60006123ca836119dd565b6001600160a01b03841660009081526003602052604090204260049091015590506123f58282613aaa565b6001600160a01b039093166000908152600360205260409020600701929092555050565b805160005b612429600183613aaa565b811015610ca857600061243d826001613abd565b90505b828110156124be5783818151811061245a5761245a6138f7565b60200260200101516001600160a01b031684838151811061247d5761247d6138f7565b60200260200101516001600160a01b0316036124ac57604051636e7c990560e01b815260040160405180910390fd5b806124b681613923565b915050612440565b50806124c981613923565b91505061241e565b825184511415806124e457508151845114155b1561250257604051633f4e2f2960e21b815260040160405180910390fd5b6000805b85518110156126f55760096000878381518110612525576125256138f7565b6020908102919091018101516001600160a01b0316825281019190915260400160009081205460ff161515900361256f57604051635cfb665160e01b815260040160405180910390fd5b858181518110612581576125816138f7565b60200260200101516001600160a01b031663a4cbec738683815181106125a9576125a96138f7565b6020026020010151896125bb8b611ed3565b8886815181106125cd576125cd6138f7565b60200260200101518d6040516020016125e69190613955565b6040516020818303038152906040526040518663ffffffff1660e01b815260040161261494939291906139e5565b60206040518083038185885af1158015612632573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612657919061393c565b5087608001517f5a94fe36b9c96bbd30dafe9eb364e4d1ac0751c6f8c114bd0977952694149c07878381518110612690576126906138f7565b60200260200101516040516126b491906001600160a01b0391909116815260200190565b60405180910390a28481815181106126ce576126ce6138f7565b6020026020010151826126e19190613abd565b9150806126ed81613923565b915050612506565b508181146111765760405163c0a890d760e01b815260040160405180910390fd5b61271e612c31565b6001805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b838381146127da57426002548461277f9190613abd565b1161278b5750826127da565b426002548461279a9190613abd565b11156127da5760006127ac8442613aaa565b905060006127ba8483613ad0565b6127c49084613abd565b90508581116127d357806127d5565b855b925050505b949350505050565b60006127ed83611460565b6001600160a01b038416600090815260036020526040902042905590506128148282613aaa565b6001600160a01b03909316600090815260036020819052604090912001929092555050565b610d2c82825b6005546040516370a0823160e01b815230600482015282916001600160a01b0316906370a0823190602401602060405180830381865afa158015612887573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128ab919061393c565b10156128ca57604051635e6090b160e01b815260040160405180910390fd5b6005546128e1906001600160a01b03168383612c7a565b6040518181527f0a2ac2d0ff5dd766a6215edf0289e7aedf3647514518fb2694c0c0584902e7cc90602001611a7b565b6129196121af565b6001805460ff1916811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2583361274b565b6129596002600019613ae7565b821180612971575061296e6002600019613ae7565b81115b1561298f576040516301e8cafb60e71b815260040160405180910390fd5b6129998383612caa565b6129a38382612d4f565b60408051838152602081018390526001600160a01b038516917f93f3bbfe8cfb354ec059175107653f49f6eb479a8622a7d83866ea015435c9449101610b3f565b8051825114612a0657604051633f4e2f2960e21b815260040160405180910390fd5b60005b8251811015610ca857818181518110612a2457612a246138f7565b602002602001015160086000858481518110612a4257612a426138f7565b6020026020010151815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550818181518110612a8e57612a8e6138f7565b60200260200101516001600160a01b03167f3083b3b95a46df5c4a6cdd1fa242b76f968ed75bf364ec15de70e5b043f62831848381518110612ad257612ad26138f7565b6020026020010151604051612ae991815260200190565b60405180910390a280612afb81613923565b915050612a09565b612b0d82826119b4565b610d2c57612b1a81612df9565b612b25836020612e0b565b604051602001612b36929190613b09565b60408051601f198184030181529082905262461bcd60e51b8252610d1991600401613b7e565b6000612bb1826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316612fad9092919063ffffffff16565b9050805160001480612bd2575080806020019051810190612bd29190613b91565b610ca85760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610d19565b60015460ff166121f55760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610d19565b6040516001600160a01b038316602482015260448101829052610ca890849063a9059cbb60e01b9060640161222b565b6001600160a01b03821660009081526003602052604081206002015490612cd084611460565b6001600160a01b03851660009081526003602052604090206002018490559050612cfb838383612fbc565b6001600160a01b03851660009081526003602081905260409091200155600254612d259084613ae7565b6001600160a01b039094166000908152600360205260409020600181019490945550504290915550565b6001600160a01b03821660009081526003602052604081206006015490612d75846119dd565b6001600160a01b03851660009081526003602052604090206006018490559050612da0838383612fbc565b6001600160a01b038516600090815260036020526040902060070155600254612dc99084613ae7565b6001600160a01b039094166000908152600360205260409020600581019490945550504260049092019190915550565b6060610ae26001600160a01b03831660145b60606000612e1a836002613ad0565b612e25906002613abd565b6001600160401b03811115612e3c57612e3c613254565b6040519080825280601f01601f191660200182016040528015612e66576020820181803683370190505b509050600360fc1b81600081518110612e8157612e816138f7565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110612eb057612eb06138f7565b60200101906001600160f81b031916908160001a9053506000612ed4846002613ad0565b612edf906001613abd565b90505b6001811115612f57576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110612f1357612f136138f7565b1a60f81b828281518110612f2957612f296138f7565b60200101906001600160f81b031916908160001a90535060049490941c93612f5081613bae565b9050612ee2565b508315612fa65760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610d19565b9392505050565b60606127da8484600085613013565b60008084841115612ff257612fd18585613aaa565b9050808311612fe1576000612feb565b612feb8184613aaa565b915061300b565b612ffc8486613aaa565b90506130088184613abd565b91505b509392505050565b6060824710156130745760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610d19565b600080866001600160a01b031685876040516130909190613bc5565b60006040518083038185875af1925050503d80600081146130cd576040519150601f19603f3d011682016040523d82523d6000602084013e6130d2565b606091505b50915091506127d5878383876060831561314d578251600003613146576001600160a01b0385163b6131465760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610d19565b50816127da565b6127da83838151156131625781518083602001fd5b8060405162461bcd60e51b8152600401610d199190613b7e565b60006020828403121561318e57600080fd5b5035919050565b6000602082840312156131a757600080fd5b81356001600160e01b031981168114612fa657600080fd5b6001600160a01b03811681146111b157600080fd5b6000602082840312156131e657600080fd5b8135612fa6816131bf565b80151581146111b157600080fd5b6000806040838503121561321257600080fd5b823591506020830135613224816131f1565b809150509250929050565b6000806040838503121561324257600080fd5b823591506020830135613224816131bf565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171561329257613292613254565b604052919050565b60006001600160401b038211156132b3576132b3613254565b5060051b60200190565b600082601f8301126132ce57600080fd5b813560206132e36132de8361329a565b61326a565b82815260059290921b8401810191818101908684111561330257600080fd5b8286015b84811015613326578035613319816131bf565b8352918301918301613306565b509695505050505050565b6000806040838503121561334457600080fd5b82356001600160401b038082111561335b57600080fd5b613367868387016132bd565b935060209150818501358181111561337e57600080fd5b85019050601f8101861361339157600080fd5b803561339f6132de8261329a565b81815260059190911b820183019083810190888311156133be57600080fd5b928401925b828410156133e55783356133d6816131f1565b825292840192908401906133c3565b80955050505050509250929050565b60006020828403121561340657600080fd5b8135612fa6816131f1565b600082601f83011261342257600080fd5b813560206134326132de8361329a565b82815260059290921b8401810191818101908684111561345157600080fd5b8286015b848110156133265780358352918301918301613455565b600082601f83011261347d57600080fd5b81356001600160401b0381111561349657613496613254565b6134a9601f8201601f191660200161326a565b8181528460208386010111156134be57600080fd5b816020850160208301376000918101602001919091529392505050565b600082601f8301126134ec57600080fd5b813560206134fc6132de8361329a565b82815260059290921b8401810191818101908684111561351b57600080fd5b8286015b848110156133265780356001600160401b0381111561353e5760008081fd5b61354c8986838b010161346c565b84525091830191830161351f565b600080600080600080600060e0888a03121561357557600080fd5b8735613580816131bf565b9650602088013595506040880135613597816131f1565b94506060880135935060808801356001600160401b03808211156135ba57600080fd5b6135c68b838c016132bd565b945060a08a01359150808211156135dc57600080fd5b6135e88b838c01613411565b935060c08a01359150808211156135fe57600080fd5b5061360b8a828b016134db565b91505092959891949750929550565b60008060006060848603121561362f57600080fd5b833592506020840135613641816131bf565b915060408401356001600160401b0381111561365c57600080fd5b6136688682870161346c565b9150509250925092565b6000806000806060858703121561368857600080fd5b84356001600160401b038082111561369f57600080fd5b818701915087601f8301126136b357600080fd5b8135818111156136c257600080fd5b8860208285010111156136d457600080fd5b60209283019650945050850135915060408501356136f1816131bf565b939692955090935050565b60008060006060848603121561371157600080fd5b833561371c816131bf565b95602085013595506040909401359392505050565b6000806040838503121561374457600080fd5b82356001600160401b038082111561375b57600080fd5b61376786838701613411565b9350602085013591508082111561377d57600080fd5b5061378a858286016132bd565b9150509250929050565b82518152602080840151818301526040808501518184015260608086015181850152845160808501529184015160a084015283015160c083015282015160e08201526101008101612fa6565b60008060008060008060c087890312156137f957600080fd5b8635613804816131bf565b955060208701359450604087013561381b816131f1565b9350606087013592506080870135613832816131bf565b915060a08701356001600160401b0381111561384d57600080fd5b61385989828a0161346c565b9150509295509295509295565b6000806000806080858703121561387c57600080fd5b8435935060208501356001600160401b038082111561389a57600080fd5b6138a6888389016132bd565b945060408701359150808211156138bc57600080fd5b6138c888838901613411565b935060608701359150808211156138de57600080fd5b506138eb878288016134db565b91505092959194509250565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016139355761393561390d565b5060010190565b60006020828403121561394e57600080fd5b5051919050565b81516001600160a01b0316815260208083015190820152604080830151151590820152606080830151908201526080918201519181019190915260a00190565b60005b838110156139b0578181015183820152602001613998565b50506000910152565b600081518084526139d1816020860160208601613995565b601f01601f19169290920160200192915050565b8481526001600160a01b0384166020820152608060408201819052600090613a0f908301856139b9565b8281036060840152613a2181856139b9565b979650505050505050565b600060a08284031215613a3e57600080fd5b60405160a081018181106001600160401b0382111715613a6057613a60613254565b6040528235613a6e816131bf565b8152602083810135908201526040830135613a88816131f1565b6040820152606083810135908201526080928301359281019290925250919050565b81810381811115610ae257610ae261390d565b80820180821115610ae257610ae261390d565b8082028115828204841417610ae257610ae261390d565b600082613b0457634e487b7160e01b600052601260045260246000fd5b500490565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351613b41816017850160208801613995565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351613b72816028840160208801613995565b01602801949350505050565b602081526000612fa660208301846139b9565b600060208284031215613ba357600080fd5b8151612fa6816131f1565b600081613bbd57613bbd61390d565b506000190190565b60008251613bd7818460208701613995565b919091019291505056fea26469706673582212202f1a8c30004a41417855d408b9141aae68d2ee5714d0c68fa942fb1c390b3f2164736f6c63430008130033139c2898040ef16910dc9f44dc697df79363da767d8bc92f2e310312b816e46d000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000005db7ad07d4903579a0342f7332bd4e3ed480d1af0000000000000000000000002107e06af838abae077ce92848a5cce625a60cff0000000000000000000000002ff4e5ff77e49eba45bffea2f75814d114f9c904000000000000000000000000bdfb7e0df174e7edeaad1bcfe074650ed79875db0000000000000000000000000000000000000000000000000000000000015180000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000000000000000000000000000000000000000000220000000000000000000000000000000000000000000000000000000000000026000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000970000000000000000000000000000000000000000000000000000000000000001000000000000000000000000dea0243b5ee5200d1feba615eaa7385598417b860000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000084595161401484a0000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000084595161401484a000000