0 txs
601 calls
constructor
constructor()
functions
decodeMsgBody
purefunction decodeMsgBody(bytes msgBody) pure returns (address, address, address, uint256)
destinationBridge
viewfunction destinationBridge(bytes32 chainId) view returns (bytes32)
getAllowedDestinationToken
viewfunction getAllowedDestinationToken(bytes32 destinationChain, address sourceToken) view returns (bytes32)
getFee
viewfunction getFee(address sender) view returns (uint256)
getSenderConfig
viewfunction getSenderConfig(address sender) view returns (tuple)
getTokenRateLimit
viewfunction getTokenRateLimit(address token, bytes32 sourceChainId) view returns (uint256 currentAmountInFlight, uint256 amountCanBeSent)
mailbox
viewfunction mailbox() view returns (address)
MSG_VERSION
viewfunction MSG_VERSION() view returns (uint8)
owner
viewfunction owner() view returns (address)
pendingOwner
viewfunction pendingOwner() view returns (address)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
acceptOwnership
nonpayablefunction acceptOwnership()
addDestinationToken
nonpayablefunction addDestinationToken(bytes32 destinationChain, address sourceToken, bytes32 destinationToken)
deposit
payablefunction deposit(bytes32 destinationChain, address token, address sender, bytes32 recipient, uint256 amount, bytes32 destinationCaller) payable returns (uint256, bytes32)
deposit
payablefunction deposit(bytes32 destinationChain, address token, bytes32 recipient, uint256 amount, bytes32 destinationCaller) payable returns (uint256, bytes32)
handlePayload
nonpayablefunction handlePayload(tuple payload) returns (bytes)
initialize
nonpayablefunction initialize(address owner_, address mailbox_)
removeDestinationToken
nonpayablefunction removeDestinationToken(bytes32 destinationChain, address sourceToken)
renounceOwnership
nonpayablefunction renounceOwnership()
rescueERC20
nonpayablefunction rescueERC20(address tokenContract, address to, uint256 amount)
setAllowance
nonpayablefunction setAllowance(address token, address tokenAdapter, bool allow)
setDestinationBridge
nonpayablefunction setDestinationBridge(bytes32 destinationChain, bytes32 destinationBridge_)
setSenderConfig
nonpayablefunction setSenderConfig(address sender, uint32 feeDiscount, bool whitelisted)
setTokenRateLimits
nonpayablefunction setTokenRateLimits(address token, tuple config)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
events
DepositToBridge
event DepositToBridge(address indexed fromAddress, bytes32 indexed toAddress, bytes32 indexed payloadHash)
DestinationBridgeSet
event DestinationBridgeSet(bytes32 indexed destinationChain, bytes32 indexed destinationBridge)
DestinationTokenAdded
event DestinationTokenAdded(bytes32 indexed destinationChain, bytes32 indexed destinationToken, address indexed sourceToken)
DestinationTokenRemoved
event DestinationTokenRemoved(bytes32 indexed destinationChain, bytes32 indexed destinationToken, address indexed sourceToken)
Initialized
event Initialized(uint64 version)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
OwnershipTransferStarted
event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner)
RateLimitsSet
event RateLimitsSet(address indexed token, bytes32 indexed sourceChainId, uint256 limit, uint256 window)
SenderConfigChanged
event SenderConfigChanged(address indexed sender, uint32 feeDiscount, bool whitelisted)
WithdrawFromBridge
event WithdrawFromBridge(address indexed recipient, bytes32 indexed chainId, address indexed token, uint256 amount)
errors
AddressEmptyCode
error AddressEmptyCode(address target)
AddressInsufficientBalance
error AddressInsufficientBalance(address account)
BridgeV2_AlreadyAllowed
error BridgeV2_AlreadyAllowed(bytes32 tokenId)
BridgeV2_BadMsgSender
error BridgeV2_BadMsgSender()
BridgeV2_InvalidMsgBodyLength
error BridgeV2_InvalidMsgBodyLength(uint256 expected, uint256 actual)
BridgeV2_InvalidRecipient
error BridgeV2_InvalidRecipient()
BridgeV2_InvalidToken
error BridgeV2_InvalidToken()
BridgeV2_MailboxExpected
error BridgeV2_MailboxExpected()
BridgeV2_NotEnoughFee
error BridgeV2_NotEnoughFee(uint256 expected, uint256 actual)
BridgeV2_PathNotAllowed
error BridgeV2_PathNotAllowed()
BridgeV2_PayloadSpent
error BridgeV2_PayloadSpent()
BridgeV2_SenderNotWhitelisted
error BridgeV2_SenderNotWhitelisted(address)
BridgeV2_TokenNotAllowed
error BridgeV2_TokenNotAllowed()
BridgeV2_TooBigDiscount
error BridgeV2_TooBigDiscount()
BridgeV2_VersionMismatch
error BridgeV2_VersionMismatch(uint8 expected, uint8 actual)
BridgeV2_ZeroAmount
error BridgeV2_ZeroAmount()
BridgeV2_ZeroBridge
error BridgeV2_ZeroBridge()
BridgeV2_ZeroChainId
error BridgeV2_ZeroChainId()
BridgeV2_ZeroMailbox
error BridgeV2_ZeroMailbox()
BridgeV2_ZeroPath
error BridgeV2_ZeroPath()
BridgeV2_ZeroRecipient
error BridgeV2_ZeroRecipient()
BridgeV2_ZeroSender
error BridgeV2_ZeroSender()
BridgeV2_ZeroToken
error BridgeV2_ZeroToken()
FailedInnerCall
error FailedInnerCall()
GMP_InvalidAddess
error GMP_InvalidAddess()
InvalidInitialization
error InvalidInitialization()
NotInitializing
error NotInitializing()
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
RateLimitExceeded
error RateLimitExceeded()
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
creation bytecode
0x60806040523480156200001157600080fd5b506200001c62000022565b620000d6565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff1615620000735760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b0390811614620000d35780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6126f080620000e66000396000f3fe6080604052600436106101665760003560e01c80637fe12268116100d1578063b2118a8d1161008a578063dab9b26211610064578063dab9b26214610531578063e30c397814610551578063e608103814610566578063f2fde38b1461058657600080fd5b8063b2118a8d146104b4578063b88c9148146104d4578063d5438eae146104f457600080fd5b80637fe12268146103a55780638da5cb5b146103fa57806398910ea414610427578063a1230fd514610461578063a7cf12b314610481578063a97af017146104a157600080fd5b80634b1c9b28116101235780634b1c9b28146102ed57806365b621281461031a5780636e48b60d1461033a578063715018a614610368578063793ea55b1461037d57806379ba50971461039057600080fd5b806301ffc9a71461016b5780630ec3fa1f146101a0578063236f67ab146101d5578063353c26b7146101f75780633be678be1461021e578063485cc955146102cd575b600080fd5b34801561017757600080fd5b5061018b610186366004611fdf565b6105a6565b60405190151581526020015b60405180910390f35b3480156101ac57600080fd5b506101c06101bb366004612029565b6105f8565b60408051928352602083019190915201610197565b3480156101e157600080fd5b506101f56101f0366004612055565b61067b565b005b34801561020357600080fd5b5061020c600181565b60405160ff9091168152602001610197565b34801561022a57600080fd5b506102aa610239366004612085565b604080518082018252600080825260209182018190526001600160a01b039390931683527fc94507416bfc109a2751d5191119e07e0958874eb50a6e7baf934f22dc74c00581529181902081518083019092525460ff811615158252610100900463ffffffff169181019190915290565b6040805182511515815260209283015163ffffffff169281019290925201610197565b3480156102d957600080fd5b506101f56102e83660046120a2565b610807565b3480156102f957600080fd5b5061030d61030836600461219c565b610939565b60405161019791906122a3565b34801561032657600080fd5b506101f56103353660046122b6565b610af3565b34801561034657600080fd5b5061035a610355366004612055565b610b8e565b604051908152602001610197565b34801561037457600080fd5b506101f5610c03565b6101c061038b366004612338565b610c17565b34801561039c57600080fd5b506101f5610c7d565b3480156103b157600080fd5b506103c56103c0366004612394565b610cca565b60405161019794939291906001600160a01b039485168152928416602084015292166040820152606081019190915260800190565b34801561040657600080fd5b5061040f610df6565b6040516001600160a01b039091168152602001610197565b34801561043357600080fd5b5061035a6104423660046123c9565b600090815260008051602061267b833981519152602052604090205490565b34801561046d57600080fd5b506101f561047c3660046123f0565b610e2b565b34801561048d57600080fd5b506101f561049c366004612444565b610f24565b6101c06104af36600461247c565b6110f7565b3480156104c057600080fd5b506101f56104cf3660046124c4565b611135565b3480156104e057600080fd5b5061035a6104ef366004612085565b611174565b34801561050057600080fd5b507fc94507416bfc109a2751d5191119e07e0958874eb50a6e7baf934f22dc74c003546001600160a01b031661040f565b34801561053d57600080fd5b506101f561054c3660046124f4565b6111a5565b34801561055d57600080fd5b5061040f6111c6565b34801561057257600080fd5b506101f5610581366004612524565b6111ef565b34801561059257600080fd5b506101f56105a1366004612085565b611265565b6000630bce696b60e31b6001600160e01b0319831614806105d75750630963936560e31b6001600160e01b03198316145b806105f257506301ffc9a760e01b6001600160e01b03198316145b92915050565b6000806106707fc94507416bfc109a2751d5191119e07e0958874eb50a6e7baf934f22dc74c0068261062a86886112ea565b8152602001908152602001600020604051806080016040529081600082015481526020016001820154815260200160028201548152602001600382015481525050611338565b915091509250929050565b610683611360565b816106a15760405163f7155ed160e01b815260040160405180910390fd5b6001600160a01b0381166106c85760405163047962f760e11b815260040160405180910390fd5b600082815260008051602061267b833981519152602081905260409091205461070457604051636c3b84ef60e01b815260040160405180910390fd5b600061071e846001600160a01b038516611392565b611392565b60008181526001840160205260409020549091508061075057604051630e94eedf60e21b815260040160405180910390fd5b600061075c8683611392565b60008181526002860160205260409020549091506001600160a01b0386811691161461079b57604051630e94eedf60e21b815260040160405180910390fd5b600083815260018501602090815260408083208390558383526002870190915280822080546001600160a01b0319169055516001600160a01b03871691849189917fb01763db13e492e9bf9c87ecb9326cf1bbc0018b92165a9e3672b665041258a391a4505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff1660008115801561084d5750825b905060008267ffffffffffffffff16600114801561086a5750303b155b905081158015610878575080155b156108965760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156108c057845460ff60401b1916600160401b1785555b6108c9876113ae565b6108d16113bf565b6108d96113c7565b6108e16113bf565b6108ea866113d7565b831561093057845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b6060610943611447565b7fc94507416bfc109a2751d5191119e07e0958874eb50a6e7baf934f22dc74c0035460008051602061267b833981519152906001600160a01b0316331461099d57604051637613be0560e11b815260040160405180910390fd5b8251600090815260048201602052604090205460ff16156109d157604051638e1cf1af60e01b815260040160405180910390fd5b82516000908152600482810160209081526040808420805460ff191660011790556003850154918701519051633a86392160e01b8152928301526001600160a01b031690633a86392190602401602060405180830381865afa158015610a3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a5f9190612546565b60008181526020849052604090205490915080610a8f57604051636c3b84ef60e01b815260040160405180910390fd5b80856060015114610ab35760405163d92eb40160e01b815260040160405180910390fd5b610ac283838760c0015161147f565b5050604080516000815260208101909152600160008051602061269b833981519152559150610aee9050565b919050565b610afb611360565b610b3460008051602061267b8339815191526006016000610b208460000151866112ea565b8152602001908152602001600020826115d8565b8051602082015160408084015190516001600160a01b038616927fc53515f4aabcc846b8d987352b98e4eb132d86d37c4a747b43bc7a1f96ed65d792610b8292918252602082015260400190565b60405180910390a35050565b600082815260008051602061267b8339815191526020526040812054610bb6575060006105f2565b7fc94507416bfc109a2751d5191119e07e0958874eb50a6e7baf934f22dc74c0016000610bec856001600160a01b038616611392565b815260200190815260200160002054905092915050565b610c0b611360565b610c1560006115f9565b565b600080610c22611447565b6001600160a01b038616610c4957604051630d84a40760e11b815260040160405180910390fd5b610c57888888888888611635565b91509150610c72600160008051602061269b83398151915255565b965096945050505050565b3380610c876111c6565b6001600160a01b031614610cbe5760405163118cdaa760e01b81526001600160a01b03821660048201526024015b60405180910390fd5b610cc7816115f9565b50565b6000806000806081855114610cff57845160405163d1702d3b60e01b8152608160048201526024810191909152604401610cb5565b6020850151602186015160418701516061880151608189015160009490941a9360018514610d4c57604051630ab4c16160e01b81526001600482015260ff86166024820152604401610cb5565b80600003610d6d576040516307c9d18b60e01b815260040160405180910390fd5b82610d8b57604051630d84a40760e11b815260040160405180910390fd5b81610da95760405163731d649f60e01b815260040160405180910390fd5b83610dc75760405163047962f760e11b815260040160405180910390fd5b610dd08461187c565b610dd98461187c565b610de28461187c565b919a50985096509450505050509193509193565b6000807f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005b546001600160a01b031692915050565b610e33611360565b6001600160a01b038316610e5a57604051630d84a40760e11b815260040160405180910390fd5b61271063ffffffff83161115610e83576040516315adfb4f60e21b815260040160405180910390fd5b6001600160a01b03831660008181527fc94507416bfc109a2751d5191119e07e0958874eb50a6e7baf934f22dc74c0056020908152604091829020805464ffffffffff191661010063ffffffff881690810260ff191691909117861515908117835584519182529281019290925282519093927f60b142005d5b2286f7b1595edcbff7e6e162c256b2063bc9c229aaa378be136b928290030190a250505050565b610f2c611360565b82610f4a5760405163f7155ed160e01b815260040160405180910390fd5b6001600160a01b038216610f715760405163047962f760e11b815260040160405180910390fd5b80610f8f5760405163047962f760e11b815260040160405180910390fd5b610f9983826118a5565b610fb657604051630b6a240160e21b815260040160405180910390fd5b600083815260008051602061267b8339815191526020819052604090912054610ff257604051636c3b84ef60e01b815260040160405180910390fd5b6000611007856001600160a01b038616611392565b905060006110158685611392565b60008381526001850160205260409020549091501561104a5760405163d87bed2f60e01b815260048101839052602401610cb5565b60008181526002840160205260409020546001600160a01b0316156110855760405163d87bed2f60e01b815260048101829052602401610cb5565b600082815260018401602090815260408083208790558383526002860190915280822080546001600160a01b0319166001600160a01b03891690811790915590519091869189917f85b4b27e17853a740d7664ee9ba73c3dac10f53c9051741cf459408a42f0b4d191a4505050505050565b600080611102611447565b611110878733888888611635565b9150915061112b600160008051602061269b83398151915255565b9550959350505050565b61113d611360565b6001600160a01b0382166111645760405163731d649f60e01b815260040160405180910390fd5b61116f838383611908565b505050565b60008061118381808080611967565b905061119e60008051602061267b83398151915284836119aa565b9392505050565b6111ad611360565b61116f8383836111be576000611a77565b600019611a77565b6000807f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c00610e1b565b6111f7611360565b8161121557604051633477e29f60e01b815260040160405180910390fd5b600082815260008051602061267b83398151915260208190526040808320849055519091839185917f988a0777c71c7db0b4dc5b18eb336a100a8f84486004364d4614eb1482c67c4291a3505050565b61126d611360565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0080546001600160a01b0319166001600160a01b03831690811782556112b1610df6565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a35050565b6000828260405160200161131a92919091825260601b6bffffffffffffffffffffffff1916602082015260340190565b60405160208183030381529060405280519060200120905092915050565b6000806113578360000151846020015185604001518660600151611b0d565b91509150915091565b33611369610df6565b6001600160a01b031614610c155760405163118cdaa760e01b8152336004820152602401610cb5565b604080516020810184905290810182905260009060600161131a565b6113b6611b8d565b610cc781611bd6565b610c15611b8d565b6113cf611b8d565b610c15611c08565b6113df611b8d565b6001600160a01b0381166114065760405163047d787160e51b815260040160405180910390fd5b7fc94507416bfc109a2751d5191119e07e0958874eb50a6e7baf934f22dc74c00380546001600160a01b0319166001600160a01b0392909216919091179055565b60008051602061269b83398151915280546001190161147957604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b600080600061148d84610cca565b935093505092506000801b8660010160006114b288610719886001600160a01b031690565b815260200190815260200160002054036114df57604051630e94eedf60e21b815260040160405180910390fd5b60008660060160006114f188876112ea565b8152602001908152602001600020905061150b8183611c10565b6040516340c10f1960e01b81526001600160a01b038481166004830152602482018490528516906340c10f1990604401600060405180830381600087803b15801561155557600080fd5b505af1158015611569573d6000803e3d6000fd5b50505050836001600160a01b031686846001600160a01b03167f84fbe57fba33897856b48aec8c489819948e53dcca04d4998ae711c520e8048d856040516115b391815260200190565b60405180910390a450505050505050565b600160008051602061269b83398151915255565b6115e3826000611c10565b6020810151600283015560400151600390910155565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0080546001600160a01b031916815561163182611c8f565b5050565b60008083600003611659576040516307c9d18b60e01b815260040160405180910390fd5b846116775760405163731d649f60e01b815260040160405180910390fd5b61168188866118a5565b61169e5760405163222c507760e01b815260040160405180910390fd5b3360009081527fc94507416bfc109a2751d5191119e07e0958874eb50a6e7baf934f22dc74c005602052604090205460008051602061267b8339815191529060ff166116ff57604051630b1ef87b60e01b8152336004820152602401610cb5565b6000898152602082905260409020548061172c57604051636c3b84ef60e01b815260040160405180910390fd5b600060018301816117468d6001600160a01b038e16611392565b815260208101919091526040016000205490508061177757604051630e94eedf60e21b815260040160405180910390fd5b6117818a88611d00565b6000611798826001600160a01b038c168b8b611967565b90506117a48482611d6a565b8360030160009054906101000a90046001600160a01b03166001600160a01b031663a9fb3550348e868b866040518663ffffffff1660e01b81526004016117ee949392919061255f565b604080518083038185885af115801561180b573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906118309190612584565b604051919750955085908a906001600160a01b038d16907fb5e5822e9968866bee39254bcbd3964c902977b8b65919d3a4afb761b81ee84890600090a450505050965096945050505050565b600060a082901c156118a157604051630f75c10d60e01b815260040160405180910390fd5b5090565b600060f883901c801580156118bc575060a083901c155b806118d757508060ff1660031480156118d7575060a083901c155b8061190057508060ff16600114806118f257508060ff166002145b8061190057508060ff166004145b949350505050565b6040516001600160a01b0383811660248301526044820183905261116f91859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050611da3565b60408051600160f81b60208201526021810195909552604185019390935260618401919091526081808401919091528151808403909101815260a1909201905290565b6001600160a01b038281166000908152600585016020526040808220546003870154915163c8f8dcd160e01b8152929361010090910463ffffffff169284929091169063c8f8dcd190611a0390849088906004016125a8565b602060405180830381865afa158015611a20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a449190612546565b9050612710611a5963ffffffff8416836125e2565b611a6391906125f9565b611a6d908261261b565b9695505050505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b179052611ac88482611e06565b611b07576040516001600160a01b03848116602483015260006044830152611afd91869182169063095ea7b390606401611935565b611b078482611da3565b50505050565b60008080611b1b864261261b565b9050838110611b305760009250849150611b83565b600084611b3d83886125e2565b611b4791906125f9565b905080881115611b6057611b5b818961261b565b611b63565b60005b935083861115611b7c57611b77848761261b565b611b7f565b60005b9250505b5094509492505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16610c1557604051631afcd79f60e31b815260040160405180910390fd5b611bde611b8d565b6001600160a01b038116610cbe57604051631e4fbdf760e01b815260006004820152602401610cb5565b6115c4611b8d565b600080611c4f84604051806080016040529081600082015481526020016001820154815260200160028201548152602001600382015481525050611338565b9150915080831115611c745760405163a74c1c5f60e01b815260040160405180910390fd5b611c7e838361262e565b845550504260019092019190915550565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b611d0c82333084611eae565b604051630852cd8d60e31b8152600481018290526001600160a01b038316906342966c6890602401600060405180830381600087803b158015611d4e57600080fd5b505af1158015611d62573d6000803e3d6000fd5b505050505050565b6000611d778333846119aa565b90508034101561116f57604051636c4ef6bf60e11b815260048101829052346024820152604401610cb5565b6000611db86001600160a01b03841683611ee7565b90508051600014158015611ddd575080806020019051810190611ddb9190612641565b155b1561116f57604051635274afe760e01b81526001600160a01b0384166004820152602401610cb5565b6000806000846001600160a01b031684604051611e23919061265e565b6000604051808303816000865af19150503d8060008114611e60576040519150601f19603f3d011682016040523d82523d6000602084013e611e65565b606091505b5091509150818015611e8f575080511580611e8f575080806020019051810190611e8f9190612641565b8015611ea557506000856001600160a01b03163b115b95945050505050565b6040516001600160a01b038481166024830152838116604483015260648201839052611b079186918216906323b872dd90608401611935565b606061119e8383600084600080856001600160a01b03168486604051611f0d919061265e565b60006040518083038185875af1925050503d8060008114611f4a576040519150601f19603f3d011682016040523d82523d6000602084013e611f4f565b606091505b5091509150611a6d868383606082611f6f57611f6a82611fb6565b61119e565b8151158015611f8657506001600160a01b0384163b155b15611faf57604051639996b31560e01b81526001600160a01b0385166004820152602401610cb5565b508061119e565b805115611fc65780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b600060208284031215611ff157600080fd5b81356001600160e01b03198116811461119e57600080fd5b6001600160a01b0381168114610cc757600080fd5b8035610aee81612009565b6000806040838503121561203c57600080fd5b823561204781612009565b946020939093013593505050565b6000806040838503121561206857600080fd5b82359150602083013561207a81612009565b809150509250929050565b60006020828403121561209757600080fd5b813561119e81612009565b600080604083850312156120b557600080fd5b82356120c081612009565b9150602083013561207a81612009565b634e487b7160e01b600052604160045260246000fd5b60405160e0810167ffffffffffffffff81118282101715612109576121096120d0565b60405290565b600082601f83011261212057600080fd5b813567ffffffffffffffff8082111561213b5761213b6120d0565b604051601f8301601f19908116603f01168101908282118183101715612163576121636120d0565b8160405283815286602085880101111561217c57600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000602082840312156121ae57600080fd5b813567ffffffffffffffff808211156121c657600080fd5b9083019060e082860312156121da57600080fd5b6121e26120e6565b823581526020830135602082015260408301356040820152606083013560608201526122106080840161201e565b608082015261222160a0840161201e565b60a082015260c08301358281111561223857600080fd5b6122448782860161210f565b60c08301525095945050505050565b60005b8381101561226e578181015183820152602001612256565b50506000910152565b6000815180845261228f816020860160208601612253565b601f01601f19169290920160200192915050565b60208152600061119e6020830184612277565b60008082840360808112156122ca57600080fd5b83356122d581612009565b92506060601f19820112156122e957600080fd5b506040516060810181811067ffffffffffffffff8211171561230d5761230d6120d0565b8060405250602084013581526040840135602082015260608401356040820152809150509250929050565b60008060008060008060c0878903121561235157600080fd5b86359550602087013561236381612009565b9450604087013561237381612009565b959894975094956060810135955060808101359460a0909101359350915050565b6000602082840312156123a657600080fd5b813567ffffffffffffffff8111156123bd57600080fd5b6119008482850161210f565b6000602082840312156123db57600080fd5b5035919050565b8015158114610cc757600080fd5b60008060006060848603121561240557600080fd5b833561241081612009565b9250602084013563ffffffff8116811461242957600080fd5b91506040840135612439816123e2565b809150509250925092565b60008060006060848603121561245957600080fd5b83359250602084013561246b81612009565b929592945050506040919091013590565b600080600080600060a0868803121561249457600080fd5b8535945060208601356124a681612009565b94979496505050506040830135926060810135926080909101359150565b6000806000606084860312156124d957600080fd5b83356124e481612009565b9250602084013561246b81612009565b60008060006060848603121561250957600080fd5b833561251481612009565b9250602084013561242981612009565b6000806040838503121561253757600080fd5b50508035926020909101359150565b60006020828403121561255857600080fd5b5051919050565b848152836020820152826040820152608060608201526000611a6d6080830184612277565b6000806040838503121561259757600080fd5b505080516020909101519092909150565b6001600160a01b038316815260406020820181905260009061190090830184612277565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176105f2576105f26125cc565b60008261261657634e487b7160e01b600052601260045260246000fd5b500490565b818103818111156105f2576105f26125cc565b808201808211156105f2576105f26125cc565b60006020828403121561265357600080fd5b815161119e816123e2565b60008251612670818460208701612253565b919091019291505056fec94507416bfc109a2751d5191119e07e0958874eb50a6e7baf934f22dc74c0009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a26469706673582212200d0ac0c832dd72f8fa2d0b6c0bf7b46d33d3a69bea4c894a1c00603154df76ea64736f6c63430008180033