0 txs
1 call
constructor
constructor(address token, address armProxy, bool allowlistEnabled)
functions
getAllowList
viewfunction getAllowList() view returns (address[])
getAllowListEnabled
viewfunction getAllowListEnabled() view returns (bool)
getArmProxy
viewfunction getArmProxy() view returns (address armProxy)
getCurrentInboundRateLimiterState
viewfunction getCurrentInboundRateLimiterState(uint64 remoteChainSelector) view returns (tuple)
getCurrentOutboundRateLimiterState
viewfunction getCurrentOutboundRateLimiterState(uint64 remoteChainSelector) view returns (tuple)
getProxyPool
viewfunction getProxyPool() view returns (address proxyPool)
getRateLimitAdmin
viewfunction getRateLimitAdmin() view returns (address)
getRouter
viewfunction getRouter() view returns (address router)
getSupportedChains
viewfunction getSupportedChains() view returns (uint64[])
getToken
viewfunction getToken() view returns (address token)
isSupportedChain
viewfunction isSupportedChain(uint64 remoteChainSelector) view returns (bool)
owner
viewfunction owner() view returns (address)
supportsInterface
purefunction supportsInterface(bytes4 interfaceId) pure returns (bool)
typeAndVersion
viewfunction typeAndVersion() view returns (string)
acceptOwnership
nonpayablefunction acceptOwnership()
applyAllowListUpdates
nonpayablefunction applyAllowListUpdates(address[] removes, address[] adds)
applyChainUpdates
nonpayablefunction applyChainUpdates(tuple[] chains)
directBurn
nonpayablefunction directBurn(uint256 amount)
initialize
nonpayablefunction initialize(address owner, address[] allowlist, address router)
lockOrBurn
nonpayablefunction lockOrBurn(address originalSender, bytes, uint256 amount, uint64 remoteChainSelector, bytes) returns (bytes)
releaseOrMint
nonpayablefunction releaseOrMint(bytes, address receiver, uint256 amount, uint64 remoteChainSelector, bytes)
setChainRateLimiterConfig
nonpayablefunction setChainRateLimiterConfig(uint64 remoteChainSelector, tuple outboundConfig, tuple inboundConfig)
setProxyPool
nonpayablefunction setProxyPool(address proxyPool)
setRateLimitAdmin
nonpayablefunction setRateLimitAdmin(address rateLimitAdmin)
setRouter
nonpayablefunction setRouter(address newRouter)
transferOwnership
nonpayablefunction transferOwnership(address to)
events
AllowListAdd
event AllowListAdd(address sender)
AllowListRemove
event AllowListRemove(address sender)
Burned
event Burned(address indexed sender, uint256 amount)
ChainAdded
event ChainAdded(uint64 remoteChainSelector, (bool isEnabled, uint128 capacity, uint128 rate) outboundRateLimiterConfig, (bool isEnabled, uint128 capacity, uint128 rate) inboundRateLimiterConfig)
ChainConfigured
event ChainConfigured(uint64 remoteChainSelector, (bool isEnabled, uint128 capacity, uint128 rate) outboundRateLimiterConfig, (bool isEnabled, uint128 capacity, uint128 rate) inboundRateLimiterConfig)
ChainRemoved
event ChainRemoved(uint64 remoteChainSelector)
Initialized
event Initialized(uint8 version)
Locked
event Locked(address indexed sender, uint256 amount)
Minted
event Minted(address indexed sender, address indexed recipient, uint256 amount)
OwnershipTransferred
event OwnershipTransferred(address indexed from, address indexed to)
OwnershipTransferRequested
event OwnershipTransferRequested(address indexed from, address indexed to)
Released
event Released(address indexed sender, address indexed recipient, uint256 amount)
RouterUpdated
event RouterUpdated(address oldRouter, address newRouter)
errors
AggregateValueMaxCapacityExceeded
error AggregateValueMaxCapacityExceeded(uint256 capacity, uint256 requested)
AggregateValueRateLimitReached
error AggregateValueRateLimitReached(uint256 minWaitInSeconds, uint256 available)
AllowListNotEnabled
error AllowListNotEnabled()
BadARMSignal
error BadARMSignal()
BucketOverfilled
error BucketOverfilled()
CallerIsNotARampOnRouter
error CallerIsNotARampOnRouter(address caller)
ChainAlreadyExists
error ChainAlreadyExists(uint64 chainSelector)
ChainNotAllowed
error ChainNotAllowed(uint64 remoteChainSelector)
DisabledNonZeroRateLimit
error DisabledNonZeroRateLimit((bool isEnabled, uint128 capacity, uint128 rate) config)
InvalidRatelimitRate
error InvalidRatelimitRate((bool isEnabled, uint128 capacity, uint128 rate) rateLimiterConfig)
NonExistentChain
error NonExistentChain(uint64 remoteChainSelector)
RateLimitMustBeDisabled
error RateLimitMustBeDisabled()
SenderNotAllowed
error SenderNotAllowed(address sender)
TokenMaxCapacityExceeded
error TokenMaxCapacityExceeded(uint256 capacity, uint256 requested, address tokenAddress)
TokenRateLimitReached
error TokenRateLimitReached(uint256 minWaitInSeconds, uint256 available, address tokenAddress)
Unauthorized
error Unauthorized(address caller)
ZeroAddressNotAllowed
error ZeroAddressNotAllowed()
creation bytecode
0x60e06040523480156200001157600080fd5b5060405162004c7b38038062004c7b833981810160405281019062000037919062000460565b828282338060006200004e6200023260201b60201c565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620000c0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000b7906200051d565b60405180910390fd5b81600060026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161462000148576200014781620002f960201b60201c565b5b505050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603620001b2576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508173ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff168152505080151560c08115158152505050505050505062000612565b600060019054906101000a900460ff161562000285576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200027c90620005b5565b60405180910390fd5b60ff801660008054906101000a900460ff1660ff161015620002f75760ff6000806101000a81548160ff021916908360ff1602179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860ff604051620002ee9190620005f5565b60405180910390a15b565b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae127860405160405180910390a350565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620003eb82620003be565b9050919050565b620003fd81620003de565b81146200040957600080fd5b50565b6000815190506200041d81620003f2565b92915050565b60008115159050919050565b6200043a8162000423565b81146200044657600080fd5b50565b6000815190506200045a816200042f565b92915050565b6000806000606084860312156200047c576200047b620003b9565b5b60006200048c868287016200040c565b93505060206200049f868287016200040c565b9250506040620004b28682870162000449565b9150509250925092565b600082825260208201905092915050565b7f43616e6e6f7420736574206f776e657220746f207a65726f0000000000000000600082015250565b600062000505601883620004bc565b91506200051282620004cd565b602082019050919050565b600060208201905081810360008301526200053881620004f6565b9050919050565b7f496e697469616c697a61626c653a20636f6e747261637420697320696e69746960008201527f616c697a696e6700000000000000000000000000000000000000000000000000602082015250565b60006200059d602783620004bc565b9150620005aa826200053f565b604082019050919050565b60006020820190508181036000830152620005d0816200058e565b9050919050565b600060ff82169050919050565b620005ef81620005d7565b82525050565b60006020820190506200060c6000830184620005e4565b92915050565b60805160a05160c0516145fa62000681600039600081816115b501528181611f1201528181611fed01526121470152600081816106ff0152818161109e0152611635015260008181610600015281816112d5015281816120b901528181612491015261253a01526145fa6000f3fe608060405234801561001057600080fd5b50600436106101ae5760003560e01c80638926f54f116100ee578063c0d7865511610097578063cf7401f311610071578063cf7401f31461047f578063dc5b68a61461049b578063e0351e13146104b7578063f2fde38b146104d5576101ae565b8063c0d7865514610415578063c4bffe2b14610431578063c75eea9c1461044f576101ae565b8063a7cd63b7116100c8578063a7cd63b7146103a9578063af58d59f146103c7578063b0f479a1146103f7576101ae565b80638926f54f1461032b5780638da5cb5b1461035b5780639687544514610379576101ae565b80635246492f1161015b5780636d3d1a58116101355780636d3d1a58146102cb57806379ba5097146102e95780637d54534e146102f35780638627fad61461030f576101ae565b80635246492f1461027557806354c8a4f3146102935780635995f063146102af576101ae565b806330f84ed21161018c57806330f84ed21461021f57806340dd8be91461023b57806341c944bb14610259576101ae565b806301ffc9a7146101b3578063181f5a77146101e357806321df0da714610201575b600080fd5b6101cd60048036038101906101c89190613267565b6104f1565b6040516101da91906132af565b60405180910390f35b6101eb6105c3565b6040516101f8919061335a565b60405180910390f35b6102096105fc565b60405161021691906133fb565b60405180910390f35b61023960048036038101906102349190613454565b610624565b005b6102436106b8565b6040516102509190613490565b60405180910390f35b610273600480360381019061026e91906134e1565b6106e7565b005b61027d6106fb565b60405161028a9190613490565b60405180910390f35b6102ad60048036038101906102a89190613573565b610723565b005b6102c960048036038101906102c4919061364b565b6107bd565b005b6102d3610e90565b6040516102e09190613490565b60405180910390f35b6102f1610eba565b005b61030d60048036038101906103089190613454565b611050565b005b61032960048036038101906103249190613808565b61109c565b005b610345600480360381019061034091906138bb565b6113cd565b60405161035291906132af565b60405180910390f35b6103636113f4565b6040516103709190613490565b60405180910390f35b610393600480360381019061038e919061393e565b61141d565b6040516103a09190613a4f565b60405180910390f35b6103b1611779565b6040516103be9190613b2f565b60405180910390f35b6103e160048036038101906103dc91906138bb565b61178a565b6040516103ee9190613c12565b60405180910390f35b6103ff6118f2565b60405161040c9190613490565b60405180910390f35b61042f600480360381019061042a9190613454565b61191c565b005b610439611a2f565b6040516104469190613ceb565b60405180910390f35b610469600480360381019061046491906138bb565b611b03565b6040516104769190613c12565b60405180910390f35b61049960048036038101906104949190613dce565b611c6b565b005b6104b560048036038101906104b09190613ee4565b611d4e565b005b6104bf611fe9565b6040516104cc91906132af565b60405180910390f35b6104ef60048036038101906104ea9190613454565b612011565b005b60007f317fa334000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806105bc57507f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b6040518060400160405280601781526020017f4275726e4d696e74546f6b656e506f6f6c20312e342e3000000000000000000081525081565b60007f0000000000000000000000000000000000000000000000000000000000000000905090565b61062c612025565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610692576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b807f75bb68f1b335d4dab6963140ecff58281174ef4362bb85a8593ab9379f24fae25550565b60007f75bb68f1b335d4dab6963140ecff58281174ef4362bb85a8593ab9379f24fae25460601b60601c905090565b6106ef612025565b6106f8816120b7565b50565b60007f0000000000000000000000000000000000000000000000000000000000000000905090565b61072b612025565b6107b7848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050838380806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050612145565b50505050565b6107c5612025565b60005b82829050811015610e8b5760008383838181106107e8576107e7613f53565b5b905061010002018036038101906107ff9190613ffb565b905061081481604001518260200151156122f9565b61082781606001518260200151156122f9565b806020015115610c5257610853816000015167ffffffffffffffff16600561245790919063ffffffff16565b6108985780600001516040517f1d5ad3c500000000000000000000000000000000000000000000000000000000815260040161088f9190614038565b60405180910390fd5b6040518060a001604052808260400151602001516fffffffffffffffffffffffffffffffff1681526020014263ffffffff168152602001826040015160000151151581526020018260400151602001516fffffffffffffffffffffffffffffffff1681526020018260400151604001516fffffffffffffffffffffffffffffffff1681525060076000836000015167ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a81548163ffffffff021916908363ffffffff16021790555060408201518160000160146101000a81548160ff02191690831515021790555060608201518160010160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060808201518160010160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055509050506040518060a001604052808260600151602001516fffffffffffffffffffffffffffffffff1681526020014263ffffffff168152602001826060015160000151151581526020018260600151602001516fffffffffffffffffffffffffffffffff1681526020018260600151604001516fffffffffffffffffffffffffffffffff1681525060086000836000015167ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a81548163ffffffff021916908363ffffffff16021790555060408201518160000160146101000a81548160ff02191690831515021790555060608201518160010160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060808201518160010160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055509050507f0f135cbb9afa12a8bf3bbd071c117bcca4ddeca6160ef7f33d012a81b9c0c471816000015182604001518360600151604051610c4593929190614095565b60405180910390a1610e79565b610c74816000015167ffffffffffffffff16600561247190919063ffffffff16565b610cb95780600001516040517f1e670e4b000000000000000000000000000000000000000000000000000000008152600401610cb09190614038565b60405180910390fd5b60086000826000015167ffffffffffffffff1667ffffffffffffffff168152602001908152602001600020600080820160006101000a8154906fffffffffffffffffffffffffffffffff02191690556000820160106101000a81549063ffffffff02191690556000820160146101000a81549060ff02191690556001820160006101000a8154906fffffffffffffffffffffffffffffffff02191690556001820160106101000a8154906fffffffffffffffffffffffffffffffff0219169055505060076000826000015167ffffffffffffffff1667ffffffffffffffff168152602001908152602001600020600080820160006101000a8154906fffffffffffffffffffffffffffffffff02191690556000820160106101000a81549063ffffffff02191690556000820160146101000a81549060ff02191690556001820160006101000a8154906fffffffffffffffffffffffffffffffff02191690556001820160106101000a8154906fffffffffffffffffffffffffffffffff021916905550507f5204aec90a3c794d8e90fded8b46ae9c7c552803e7e832e0c1d358396d8599168160000151604051610e709190614038565b60405180910390a15b5080610e84906140fb565b90506107c8565b505050565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f419061418f565b60405180910390fd5b60008060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905033600060026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b611058612025565b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663397796f76040518163ffffffff1660e01b8152600401602060405180830381865afa158015611107573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061112b91906141c4565b15611162576040517fc148371500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8161116c816113cd565b6111ad57806040517fa9902c7e0000000000000000000000000000000000000000000000000000000081526004016111a49190614038565b60405180910390fd5b6111b56106b8565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806112885750600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166383826b2b82336040518363ffffffff1660e01b81526004016112469291906141f1565b602060405180830381865afa158015611263573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061128791906141c4565b5b6112c957336040517f728fe07b0000000000000000000000000000000000000000000000000000000081526004016112c09190613490565b60405180910390fd5b6112d3838561248b565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166340c10f1986866040518363ffffffff1660e01b815260040161132e929190614229565b600060405180830381600087803b15801561134857600080fd5b505af115801561135c573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f9d228d69b5fdb8d273a2336f8fb8612d039631024ea9bf09c424a9503aa078f0866040516113bd9190614252565b60405180910390a3505050505050565b60006113ed8267ffffffffffffffff1660056124ea90919063ffffffff16565b9050919050565b60008060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606083611429816113cd565b61146a57806040517fa9902c7e0000000000000000000000000000000000000000000000000000000081526004016114619190614038565b60405180910390fd5b6114726106b8565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806115715750600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a8d87a3b826040518263ffffffff1660e01b81526004016115019190614038565b602060405180830381865afa15801561151e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115429190614282565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6115b257336040517f728fe07b0000000000000000000000000000000000000000000000000000000081526004016115a99190613490565b60405180910390fd5b887f000000000000000000000000000000000000000000000000000000000000000080156115f157506115ef81600261250490919063ffffffff16565b155b1561163357806040517fd0d2597600000000000000000000000000000000000000000000000000000000815260040161162a9190613490565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663397796f76040518163ffffffff1660e01b8152600401602060405180830381865afa15801561169e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116c291906141c4565b156116f9576040517fc148371500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6117038688612534565b61170c876120b7565b3373ffffffffffffffffffffffffffffffffffffffff167f696de425f79f4a40bc6d2122ca50507f0efbeabbff86a84871b7196ab8ea8df7886040516117529190614252565b60405180910390a26040518060200160405280600081525092505050979650505050505050565b60606117856002612593565b905090565b61179261318e565b6118eb600860008467ffffffffffffffff1667ffffffffffffffff1681526020019081526020016000206040518060a00160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160149054906101000a900460ff161515151581526020016001820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016001820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16815250506125b4565b9050919050565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611924612025565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361198a576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f02dc5c233404867c793b749c6d644beb2277536d18a7e7974d3f238e4c6f16848183604051611a239291906142af565b60405180910390a15050565b60606000611a3d600561266e565b90506000815167ffffffffffffffff811115611a5c57611a5b61369d565b5b604051908082528060200260200182016040528015611a8a5781602001602082028036833780820191505090505b50905060005b8251811015611afa57828181518110611aac57611aab613f53565b5b6020026020010151828281518110611ac757611ac6613f53565b5b602002602001019067ffffffffffffffff16908167ffffffffffffffff168152505080611af3906140fb565b9050611a90565b50809250505090565b611b0b61318e565b611c64600760008467ffffffffffffffff1667ffffffffffffffff1681526020019081526020016000206040518060a00160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160149054906101000a900460ff161515151581526020016001820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016001820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16815250506125b4565b9050919050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015611cfc5750611ccc6113f4565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b15611d3e57336040517f8e4a23d6000000000000000000000000000000000000000000000000000000008152600401611d359190613490565b60405180910390fd5b611d4983838361268f565b505050565b60008060019054906101000a900460ff16159050808015611d7f5750600160008054906101000a900460ff1660ff16105b80611dac5750611d8e306127a1565b158015611dab5750600160008054906101000a900460ff1660ff16145b5b611deb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de29061434a565b60405180910390fd5b60016000806101000a81548160ff021916908360ff1602179055508015611e28576001600060016101000a81548160ff0219169083151502179055505b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611e8f5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b15611ec6576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611ecf846127c4565b81600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f000000000000000000000000000000000000000000000000000000000000000015611f8a57611f89600067ffffffffffffffff811115611f5457611f5361369d565b5b604051908082528060200260200182016040528015611f825781602001602082028036833780820191505090505b5084612145565b5b8015611fe35760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024986001604051611fda91906143b2565b60405180910390a15b50505050565b60007f0000000000000000000000000000000000000000000000000000000000000000905090565b612019612025565b612022816127c4565b50565b600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146120b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ac90614419565b60405180910390fd5b565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166342966c68826040518263ffffffff1660e01b81526004016121109190614252565b600060405180830381600087803b15801561212a57600080fd5b505af115801561213e573d6000803e3d6000fd5b5050505050565b7f000000000000000000000000000000000000000000000000000000000000000061219c576040517f35f4a7b300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b825181101561222a5760008382815181106121bd576121bc613f53565b5b602002602001015190506121db81600261288490919063ffffffff16565b15612218577f800671136ab6cfee9fbe5ed1fb7ca417811aca3cf864800d127b927adedf75668160405161220f9190613490565b60405180910390a15b5080612223906140fb565b905061219f565b5060005b81518110156122f457600082828151811061224c5761224b613f53565b5b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361229057506122e3565b6122a48160026128b490919063ffffffff16565b156122e1577f2640d4d76caf8bf478aabfa982fa4e1c4eb71a37f93cd15e80dbc657911546d8816040516122d89190613490565b60405180910390a15b505b806122ed906140fb565b905061222e565b505050565b8160000151156123d35781602001516fffffffffffffffffffffffffffffffff1682604001516fffffffffffffffffffffffffffffffff161015806123545750600082604001516fffffffffffffffffffffffffffffffff16145b1561239657816040517f70505e5600000000000000000000000000000000000000000000000000000000815260040161238d9190614439565b60405180910390fd5b80156123ce576040517f433fc33d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612453565b600082604001516fffffffffffffffffffffffffffffffff161415806124105750600082602001516fffffffffffffffffffffffffffffffff1614155b1561245257816040517fd68af9cc0000000000000000000000000000000000000000000000000000000081526004016124499190614439565b60405180910390fd5b5b5050565b6000612469836000018360001b6128e4565b905092915050565b6000612483836000018360001b612954565b905092915050565b6124e6817f0000000000000000000000000000000000000000000000000000000000000000600860008667ffffffffffffffff1667ffffffffffffffff168152602001908152602001600020612a689092919063ffffffff16565b5050565b60006124fc836000018360001b612e32565b905092915050565b600061252c836000018373ffffffffffffffffffffffffffffffffffffffff1660001b612e32565b905092915050565b61258f817f0000000000000000000000000000000000000000000000000000000000000000600760008667ffffffffffffffff1667ffffffffffffffff168152602001908152602001600020612a689092919063ffffffff16565b5050565b606060006125a383600001612e55565b905060608190508092505050919050565b6125bc61318e565b61261f82606001516fffffffffffffffffffffffffffffffff1683600001516fffffffffffffffffffffffffffffffff16846020015163ffffffff16426126039190614454565b85608001516fffffffffffffffffffffffffffffffff16612eb1565b82600001906fffffffffffffffffffffffffffffffff1690816fffffffffffffffffffffffffffffffff168152505042826020019063ffffffff16908163ffffffff1681525050819050919050565b6060600061267e83600001612e55565b905060608190508092505050919050565b612698836113cd565b6126d957826040517f1e670e4b0000000000000000000000000000000000000000000000000000000081526004016126d09190614038565b60405180910390fd5b6126e48260006122f9565b61271d82600760008667ffffffffffffffff1667ffffffffffffffff168152602001908152602001600020612edd90919063ffffffff16565b6127288160006122f9565b61276181600860008667ffffffffffffffff1667ffffffffffffffff168152602001908152602001600020612edd90919063ffffffff16565b7f0350d63aa5f270e01729d00d627eeb8f3429772b1818c016c66a588a864f912b83838360405161279493929190614095565b60405180910390a1505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae127860405160405180910390a350565b60006128ac836000018373ffffffffffffffffffffffffffffffffffffffff1660001b612954565b905092915050565b60006128dc836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6128e4565b905092915050565b60006128f08383612e32565b61294957826000018290806001815401808255809150506001900390600052602060002001600090919091909150558260000180549050836001016000848152602001908152602001600020819055506001905061294e565b600090505b92915050565b60008083600101600084815260200190815260200160002054905060008114612a5c5760006001826129869190614454565b905060006001866000018054905061299e9190614454565b9050818114612a0d5760008660000182815481106129bf576129be613f53565b5b90600052602060002001549050808760000184815481106129e3576129e2613f53565b5b90600052602060002001819055508387600101600083815260200190815260200160002081905550505b85600001805480612a2157612a20614488565b5b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050612a62565b60009150505b92915050565b8260000160149054906101000a900460ff161580612a865750600082145b612e2d5760008360000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16905060008460010160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16905060008560000160109054906101000a900463ffffffff1663ffffffff1642612b209190614454565b905060008114612bc85781831115612b64576040517f9725942a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612ba28284838960010160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16612eb1565b9250428660000160106101000a81548163ffffffff021916908363ffffffff1602179055505b84821015612c8457600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612c435781856040517ff94ebcd1000000000000000000000000000000000000000000000000000000008152600401612c3a9291906144b7565b60405180910390fd5b8185856040517f1a76572a000000000000000000000000000000000000000000000000000000008152600401612c7b939291906144e0565b60405180910390fd5b84831015612da95760008660010160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050600081600183612cd39190614454565b8689612cdf9190614454565b612ce99190614517565b612cf3919061457a565b9050600073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1603612d685780856040517f15279c08000000000000000000000000000000000000000000000000000000008152600401612d5f9291906144b7565b60405180910390fd5b8085876040517fd0c8d23a000000000000000000000000000000000000000000000000000000008152600401612da0939291906144e0565b60405180910390fd5b8483612db59190614454565b9250828660000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055507f1871cdf8010e63f2eb8384381a68dfa7416dc571a5517e66e88b2d2d0c0a690a85604051612e219190614252565b60405180910390a15050505b505050565b600080836001016000848152602001908152602001600020541415905092915050565b606081600001805480602002602001604051908101604052809291908181526020018280548015612ea557602002820191906000526020600020905b815481526020019060010190808311612e91575b50505050509050919050565b6000612ed3858385612ec391906145ab565b86612ece9190614517565b613175565b9050949350505050565b60008260000160109054906101000a900463ffffffff1663ffffffff1642612f059190614454565b90506000811461300f57612fb18360010160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168460000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16838660010160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16612eb1565b8360000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550428360000160106101000a81548163ffffffff021916908363ffffffff1602179055505b61306182602001516fffffffffffffffffffffffffffffffff168460000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16613175565b8360000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555081600001518360000160146101000a81548160ff02191690831515021790555081602001518360010160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555081604001518360010160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055507f9ea3374b67bf275e6bb9c8ae68f9cae023e1c528b4b27e092f0bb209d3531c19826040516131689190614439565b60405180910390a1505050565b60008183106131845781613186565b825b905092915050565b6040518060a0016040528060006fffffffffffffffffffffffffffffffff168152602001600063ffffffff16815260200160001515815260200160006fffffffffffffffffffffffffffffffff16815260200160006fffffffffffffffffffffffffffffffff1681525090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6132448161320f565b811461324f57600080fd5b50565b6000813590506132618161323b565b92915050565b60006020828403121561327d5761327c613205565b5b600061328b84828501613252565b91505092915050565b60008115159050919050565b6132a981613294565b82525050565b60006020820190506132c460008301846132a0565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156133045780820151818401526020810190506132e9565b60008484015250505050565b6000601f19601f8301169050919050565b600061332c826132ca565b61333681856132d5565b93506133468185602086016132e6565b61334f81613310565b840191505092915050565b600060208201905081810360008301526133748184613321565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006133c16133bc6133b78461337c565b61339c565b61337c565b9050919050565b60006133d3826133a6565b9050919050565b60006133e5826133c8565b9050919050565b6133f5816133da565b82525050565b600060208201905061341060008301846133ec565b92915050565b60006134218261337c565b9050919050565b61343181613416565b811461343c57600080fd5b50565b60008135905061344e81613428565b92915050565b60006020828403121561346a57613469613205565b5b60006134788482850161343f565b91505092915050565b61348a81613416565b82525050565b60006020820190506134a56000830184613481565b92915050565b6000819050919050565b6134be816134ab565b81146134c957600080fd5b50565b6000813590506134db816134b5565b92915050565b6000602082840312156134f7576134f6613205565b5b6000613505848285016134cc565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126135335761353261350e565b5b8235905067ffffffffffffffff8111156135505761354f613513565b5b60208301915083602082028301111561356c5761356b613518565b5b9250929050565b6000806000806040858703121561358d5761358c613205565b5b600085013567ffffffffffffffff8111156135ab576135aa61320a565b5b6135b78782880161351d565b9450945050602085013567ffffffffffffffff8111156135da576135d961320a565b5b6135e68782880161351d565b925092505092959194509250565b60008083601f84011261360a5761360961350e565b5b8235905067ffffffffffffffff81111561362757613626613513565b5b6020830191508361010082028301111561364457613643613518565b5b9250929050565b6000806020838503121561366257613661613205565b5b600083013567ffffffffffffffff8111156136805761367f61320a565b5b61368c858286016135f4565b92509250509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6136d582613310565b810181811067ffffffffffffffff821117156136f4576136f361369d565b5b80604052505050565b60006137076131fb565b905061371382826136cc565b919050565b600067ffffffffffffffff8211156137335761373261369d565b5b61373c82613310565b9050602081019050919050565b82818337600083830152505050565b600061376b61376684613718565b6136fd565b90508281526020810184848401111561378757613786613698565b5b613792848285613749565b509392505050565b600082601f8301126137af576137ae61350e565b5b81356137bf848260208601613758565b91505092915050565b600067ffffffffffffffff82169050919050565b6137e5816137c8565b81146137f057600080fd5b50565b600081359050613802816137dc565b92915050565b600080600080600060a0868803121561382457613823613205565b5b600086013567ffffffffffffffff8111156138425761384161320a565b5b61384e8882890161379a565b955050602061385f8882890161343f565b9450506040613870888289016134cc565b9350506060613881888289016137f3565b925050608086013567ffffffffffffffff8111156138a2576138a161320a565b5b6138ae8882890161379a565b9150509295509295909350565b6000602082840312156138d1576138d0613205565b5b60006138df848285016137f3565b91505092915050565b60008083601f8401126138fe576138fd61350e565b5b8235905067ffffffffffffffff81111561391b5761391a613513565b5b60208301915083600182028301111561393757613936613518565b5b9250929050565b600080600080600080600060a0888a03121561395d5761395c613205565b5b600061396b8a828b0161343f565b975050602088013567ffffffffffffffff81111561398c5761398b61320a565b5b6139988a828b016138e8565b965096505060406139ab8a828b016134cc565b94505060606139bc8a828b016137f3565b935050608088013567ffffffffffffffff8111156139dd576139dc61320a565b5b6139e98a828b016138e8565b925092505092959891949750929550565b600081519050919050565b600082825260208201905092915050565b6000613a21826139fa565b613a2b8185613a05565b9350613a3b8185602086016132e6565b613a4481613310565b840191505092915050565b60006020820190508181036000830152613a698184613a16565b905092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613aa681613416565b82525050565b6000613ab88383613a9d565b60208301905092915050565b6000602082019050919050565b6000613adc82613a71565b613ae68185613a7c565b9350613af183613a8d565b8060005b83811015613b22578151613b098882613aac565b9750613b1483613ac4565b925050600181019050613af5565b5085935050505092915050565b60006020820190508181036000830152613b498184613ad1565b905092915050565b60006fffffffffffffffffffffffffffffffff82169050919050565b613b7681613b51565b82525050565b600063ffffffff82169050919050565b613b9581613b7c565b82525050565b613ba481613294565b82525050565b60a082016000820151613bc06000850182613b6d565b506020820151613bd36020850182613b8c565b506040820151613be66040850182613b9b565b506060820151613bf96060850182613b6d565b506080820151613c0c6080850182613b6d565b50505050565b600060a082019050613c276000830184613baa565b92915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613c62816137c8565b82525050565b6000613c748383613c59565b60208301905092915050565b6000602082019050919050565b6000613c9882613c2d565b613ca28185613c38565b9350613cad83613c49565b8060005b83811015613cde578151613cc58882613c68565b9750613cd083613c80565b925050600181019050613cb1565b5085935050505092915050565b60006020820190508181036000830152613d058184613c8d565b905092915050565b600080fd5b613d1b81613294565b8114613d2657600080fd5b50565b600081359050613d3881613d12565b92915050565b613d4781613b51565b8114613d5257600080fd5b50565b600081359050613d6481613d3e565b92915050565b600060608284031215613d8057613d7f613d0d565b5b613d8a60606136fd565b90506000613d9a84828501613d29565b6000830152506020613dae84828501613d55565b6020830152506040613dc284828501613d55565b60408301525092915050565b600080600060e08486031215613de757613de6613205565b5b6000613df5868287016137f3565b9350506020613e0686828701613d6a565b9250506080613e1786828701613d6a565b9150509250925092565b600067ffffffffffffffff821115613e3c57613e3b61369d565b5b602082029050602081019050919050565b6000613e60613e5b84613e21565b6136fd565b90508083825260208201905060208402830185811115613e8357613e82613518565b5b835b81811015613eac5780613e98888261343f565b845260208401935050602081019050613e85565b5050509392505050565b600082601f830112613ecb57613eca61350e565b5b8135613edb848260208601613e4d565b91505092915050565b600080600060608486031215613efd57613efc613205565b5b6000613f0b8682870161343f565b935050602084013567ffffffffffffffff811115613f2c57613f2b61320a565b5b613f3886828701613eb6565b9250506040613f498682870161343f565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006101008284031215613f9957613f98613d0d565b5b613fa360806136fd565b90506000613fb3848285016137f3565b6000830152506020613fc784828501613d29565b6020830152506040613fdb84828501613d6a565b60408301525060a0613fef84828501613d6a565b60608301525092915050565b6000610100828403121561401257614011613205565b5b600061402084828501613f82565b91505092915050565b614032816137c8565b82525050565b600060208201905061404d6000830184614029565b92915050565b6060820160008201516140696000850182613b9b565b50602082015161407c6020850182613b6d565b50604082015161408f6040850182613b6d565b50505050565b600060e0820190506140aa6000830186614029565b6140b76020830185614053565b6140c46080830184614053565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614106826134ab565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614138576141376140cc565b5b600182019050919050565b7f4d7573742062652070726f706f736564206f776e657200000000000000000000600082015250565b60006141796016836132d5565b915061418482614143565b602082019050919050565b600060208201905081810360008301526141a88161416c565b9050919050565b6000815190506141be81613d12565b92915050565b6000602082840312156141da576141d9613205565b5b60006141e8848285016141af565b91505092915050565b60006040820190506142066000830185614029565b6142136020830184613481565b9392505050565b614223816134ab565b82525050565b600060408201905061423e6000830185613481565b61424b602083018461421a565b9392505050565b6000602082019050614267600083018461421a565b92915050565b60008151905061427c81613428565b92915050565b60006020828403121561429857614297613205565b5b60006142a68482850161426d565b91505092915050565b60006040820190506142c46000830185613481565b6142d16020830184613481565b9392505050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b6000614334602e836132d5565b915061433f826142d8565b604082019050919050565b6000602082019050818103600083015261436381614327565b9050919050565b6000819050919050565b600060ff82169050919050565b600061439c6143976143928461436a565b61339c565b614374565b9050919050565b6143ac81614381565b82525050565b60006020820190506143c760008301846143a3565b92915050565b7f4f6e6c792063616c6c61626c65206279206f776e657200000000000000000000600082015250565b60006144036016836132d5565b915061440e826143cd565b602082019050919050565b60006020820190508181036000830152614432816143f6565b9050919050565b600060608201905061444e6000830184614053565b92915050565b600061445f826134ab565b915061446a836134ab565b9250828203905081811115614482576144816140cc565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60006040820190506144cc600083018561421a565b6144d9602083018461421a565b9392505050565b60006060820190506144f5600083018661421a565b614502602083018561421a565b61450f6040830184613481565b949350505050565b6000614522826134ab565b915061452d836134ab565b9250828201905080821115614545576145446140cc565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614585826134ab565b9150614590836134ab565b9250826145a05761459f61454b565b5b828204905092915050565b60006145b6826134ab565b91506145c1836134ab565b92508282026145cf816134ab565b915082820484148315176145e6576145e56140cc565b5b509291505056fea164736f6c6343000813000a0000000000000000000000007dff72693f6a4149b17e7c6314655f6a9f7c8b33000000000000000000000000c311a21e6fef769344eb1515588b9d535662a1450000000000000000000000000000000000000000000000000000000000000000