340 txs
317 calls
constructor
constructor(address[] _assets, (address nttManager, uint8 dustDecimals)[] _assetConfigs, address _etherFiDataProvider)
functions
CANCEL_BRIDGE_SIG
viewfunction CANCEL_BRIDGE_SIG() view returns (bytes32)
cashModule
viewfunction cashModule() view returns (address)
ETH
viewfunction ETH() view returns (address)
etherFiDataProvider
viewfunction etherFiDataProvider() view returns (address)
getAssetConfig
viewfunction getAssetConfig(address asset) view returns (tuple)
getBridgeFee
viewfunction getBridgeFee(uint16 recipientChain, address asset) view returns (address, uint256)
getNonce
viewfunction getNonce(address safe) view returns (uint256)
getPendingBridge
viewfunction getPendingBridge(address safe) view returns (tuple)
REQUEST_BRIDGE_SIG
viewfunction REQUEST_BRIDGE_SIG() view returns (bytes32)
WORMHOLE_MODULE_ADMIN_ROLE
viewfunction WORMHOLE_MODULE_ADMIN_ROLE() view returns (bytes32)
cancelBridge
nonpayablefunction cancelBridge(address safe, address[] signers, bytes[] signatures)
cancelBridgeByCashModule
nonpayablefunction cancelBridgeByCashModule(address safe)
executeBridge
payablefunction executeBridge(address safe) payable
requestBridge
payablefunction requestBridge(address safe, uint16 destEid, address asset, uint256 amount, address destRecipient, address[] signers, bytes[] signatures) payable
setAssetConfig
nonpayablefunction setAssetConfig(address[] assets, tuple[] assetConfigs)
setupModule
nonpayablefunction setupModule(bytes data)
events
AssetConfigSet
event AssetConfigSet(address[] assets, (address nttManager, uint8 dustDecimals)[] assetConfigs)
BridgeCancelled
event BridgeCancelled(address indexed safe, uint16 indexed destEid, address indexed asset, uint256 amount, address destRecipient)
BridgeViaNTT
event BridgeViaNTT(address indexed token, uint256 amount, uint64 msgId)
BridgeWithWormhole
event BridgeWithWormhole(address indexed safe, uint16 indexed destEid, address indexed asset, uint256 amount, address destRecipient)
RequestBridgeWithWormhole
event RequestBridgeWithWormhole(address indexed safe, uint16 indexed destEid, address indexed asset, uint256 amount, address destRecipient)
errors
AmountNotAvailable
error AmountNotAvailable()
ArrayLengthMismatch
error ArrayLengthMismatch()
CannotFindMatchingWithdrawalForSafe
error CannotFindMatchingWithdrawalForSafe()
InsufficientAmount
error InsufficientAmount()
InsufficientAvailableBalanceOnSafe
error InsufficientAvailableBalanceOnSafe()
InsufficientNativeFee
error InsufficientNativeFee()
InvalidAmount
error InvalidAmount()
InvalidInput
error InvalidInput()
InvalidSignature
error InvalidSignature()
InvalidSignatures
error InvalidSignatures()
NoWithdrawalQueuedForWormhole
error NoWithdrawalQueuedForWormhole()
OnlyEtherFiSafe
error OnlyEtherFiSafe()
OnlySafeAdmin
error OnlySafeAdmin()
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
Unauthorized
error Unauthorized()
creation bytecode
0x60c060405234801561000f575f5ffd5b5060405161301538038061301583398101604081905261002e916103dc565b80806001600160a01b0381166100575760405163b4fa3fb360e01b815260040160405180910390fd5b806001600160a01b03166080816001600160a01b03168152505050806001600160a01b031663882d16986040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100ae573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100d291906104ae565b6001600160a01b031660a052506100e983836100f1565b505050610583565b8151815181146101145760405163512509d360e11b815260040160405180910390fd5b7f0a93d51b2793ea18ce510da8b8cb57b59048d8c53342680b2f2da35f6fe696005f5b8281101561024b575f6001600160a01b031685828151811061015b5761015b6104ce565b60200260200101516001600160a01b031614806101a557505f6001600160a01b031684828151811061018f5761018f6104ce565b60200260200101515f01516001600160a01b0316145b156101c35760405163b4fa3fb360e01b815260040160405180910390fd5b8381815181106101d5576101d56104ce565b6020026020010151825f015f8784815181106101f3576101f36104ce565b6020908102919091018101516001600160a01b0390811683528282019390935260409091015f2083518154949092015160ff16600160a01b026001600160a81b03199094169190921617919091179055600101610137565b507fd6591bad09e677e4ef11e193b462a86685cb87669825fcc649bf38b643261e39848460405161027d9291906104e2565b60405180910390a150505050565b634e487b7160e01b5f52604160045260245ffd5b604080519081016001600160401b03811182821017156102c1576102c161028b565b60405290565b604051601f8201601f191681016001600160401b03811182821017156102ef576102ef61028b565b604052919050565b5f6001600160401b0382111561030f5761030f61028b565b5060051b60200190565b80516001600160a01b038116811461032f575f5ffd5b919050565b5f82601f830112610343575f5ffd5b8151610356610351826102f7565b6102c7565b8082825260208201915060208360061b860101925085831115610377575f5ffd5b602085015b838110156103d25760408188031215610393575f5ffd5b61039b61029f565b6103a482610319565b8152602082015160ff811681146103b9575f5ffd5b602082810191909152908452929092019160400161037c565b5095945050505050565b5f5f5f606084860312156103ee575f5ffd5b83516001600160401b03811115610403575f5ffd5b8401601f81018613610413575f5ffd5b8051610421610351826102f7565b8082825260208201915060208360051b850101925088831115610442575f5ffd5b6020840193505b8284101561046b5761045a84610319565b825260209384019390910190610449565b6020880151909650925050506001600160401b0381111561048a575f5ffd5b61049686828701610334565b9250506104a560408501610319565b90509250925092565b5f602082840312156104be575f5ffd5b6104c782610319565b9392505050565b634e487b7160e01b5f52603260045260245ffd5b604080825283519082018190525f9060208501906060840190835b818110156105245783516001600160a01b03168352602093840193909201916001016104fd565b5050838103602080860191909152855180835291810192508501905f5b8181101561057757825180516001600160a01b0316855260209081015160ff168186015260409094019390920191600101610541565b50919695505050505050565b60805160a051612a246105f15f395f8181610196015281816107f20152818161092c01528181610d1401528181610dc40152818161113501526111e101525f81816103b7015281816103dc01528181610517015281816106c701528181610a800152610f6e0152612a245ff3fe6080604052600436106100d4575f3560e01c80638a2e5c3d116100785780638a2e5c3d1461024a578063909030d51461027d5780639e673bc31461029b578063b39b8611146102ce578063c760e2ff146102e1578063e08b81ee14610346578063eca5ba3014610379578063f9fba81b146103a6575f5ffd5b80631dda3c1c146100df5780632d0335ab146101005780632db274c8146101665780633575f0de146101855780635988e7a1146101c557806360b72616146101d85780636ec3ab67146101f75780638322fff214610223575f5ffd5b366100db57005b5f5ffd5b3480156100ea575f5ffd5b506100fe6100f9366004611f05565b6103d9565b005b34801561010b575f5ffd5b5061015361011a366004611fc8565b6001600160a01b03165f9081527f9425b2e03e09da4c20ff7a465da264f7a02bf7079e1dbb47fce0436e1d206d00602052604090205490565b6040519081526020015b60405180910390f35b348015610171575f5ffd5b506100fe610180366004611fc8565b610515565b348015610190575f5ffd5b506101b87f000000000000000000000000000000000000000000000000000000000000000081565b60405161015d9190611fea565b6100fe6101d3366004611fc8565b6106a6565b3480156101e3575f5ffd5b506100fe6101f236600461203e565b610a5f565b348015610202575f5ffd5b50610216610211366004611fc8565b610ef7565b60405161015d91906120d9565b34801561022e575f5ffd5b506101b873eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee81565b348015610255575f5ffd5b506101537f6aa129b587db2f56b32662e4af4556cdc69b6228434cb2791c6377894b40bf2c81565b348015610288575f5ffd5b506100fe6102973660046120e7565b5050565b3480156102a6575f5ffd5b506101537f7360ecb005ef445b1cb2b3a294f2c499b088f258b4531fffbc4c244d8cf7732381565b6100fe6102dc366004612169565b610f4d565b3480156102ec575f5ffd5b506103006102fb366004611fc8565b6113d6565b60405161015d9190815161ffff1681526020808301516001600160a01b039081169183019190915260408084015190830152606092830151169181019190915260800190565b348015610351575f5ffd5b506101537f43f887fd9f459029e5aa487338ae64439bb4e18a4e48fd3e94c9475d5add8ba581565b348015610384575f5ffd5b50610398610393366004612228565b61145d565b60405161015d92919061225d565b3480156103b1575f5ffd5b506101b87f000000000000000000000000000000000000000000000000000000000000000081565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166308c732596040518163ffffffff1660e01b8152600401602060405180830381865afa158015610436573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061045a9190612276565b604051632474521560e21b81529091506001600160a01b038216906391d14854906104ab907f43f887fd9f459029e5aa487338ae64439bb4e18a4e48fd3e94c9475d5add8ba5903390600401612291565b602060405180830381865afa1580156104c6573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104ea91906122a8565b610506576040516282b42960e81b815260040160405180910390fd5b6105108383611558565b505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663882d16986040518163ffffffff1660e01b8152600401602060405180830381865afa158015610571573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105959190612276565b6001600160a01b0316336001600160a01b0316146105c5576040516282b42960e81b815260040160405180910390fd5b5f6105ce6116dc565b6001600160a01b038084165f90815260019290920160205260409091206002810154909250166105fc575050565b8054600182015460028301546040516001600160a01b0362010000850481169461ffff1693878216937fb9bd9edfd959d356fb842460c7f041e58616196972549617d5076398abdbd45893610655939190911690612291565b60405180910390a46106656116dc565b6001600160a01b039092165f90815260019283016020526040812080546001600160b01b0319168155928301555060020180546001600160a01b0319169055565b6106ae611700565b60405163b7ca418b60e01b815281906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b7ca418b906106fc908490600401611fea565b602060405180830381865afa158015610717573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061073b91906122a8565b610758576040516334d0b49960e01b815260040160405180910390fd5b5f6107616116dc565b6001600160a01b038085165f908152600192830160209081526040918290208251608081018452815461ffff81168252620100009004851692810192909252938401549181019190915260029092015416606082018190529091506107d957604051638f87345d60e01b815260040160405180910390fd5b604051631c13359160e11b81525f906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906338266b2290610827908790600401611fea565b5f60405180830381865afa158015610841573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526108689190810190612503565b6020015160408101519091506001600160a01b03163014158061088e5750805151600114155b806108cb575081602001516001600160a01b0316815f01515f815181106108b7576108b76125bb565b60200260200101516001600160a01b031614155b806108f75750816040015181602001515f815181106108ec576108ec6125bb565b602002602001015114155b156109155760405163a78fbb5f60e01b815260040160405180910390fd5b604051631e0d280960e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690633c1a501290610961908790600401611fea565b5f604051808303815f87803b158015610978575f5ffd5b505af115801561098a573d5f5f3e3d5ffd5b505050506109a9825f0151836020015184604001518560600151611749565b81602001516001600160a01b0316825f015161ffff16856001600160a01b03167fac6249df8c1b3c7d9f4b6cfa0a9753ea39d69f4e6f06a72d4bb9ef32774221c885604001518660600151604051610a02929190612291565b60405180910390a4610a126116dc565b6001600160a01b0385165f90815260019182016020526040812080546001600160b01b03191681559182015560020180546001600160a01b031916905550610a5c915061195a9050565b50565b610a67611700565b60405163b7ca418b60e01b815285906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b7ca418b90610ab5908490600401611fea565b602060405180830381865afa158015610ad0573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610af491906122a8565b610b11576040516334d0b49960e01b815260040160405180910390fd5b5f610c1c7f6aa129b587db2f56b32662e4af4556cdc69b6228434cb2791c6377894b40bf2c46308a6001600160a01b03166369615a4c6040518163ffffffff1660e01b81526004016020604051808303815f875af1158015610b75573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b9991906125cf565b6040805160208101959095528401929092526001600160601b0319606091821b81168285015260748401929092528a901b16609482015260a8015b604051602081830303815290604052805190602001207f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f908152601c91909152603c902090565b60405163a732422d60e01b81529091506001600160a01b0388169063a732422d90610c539084908a908a908a908a9060040161260e565b602060405180830381865afa158015610c6e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c9291906122a8565b610caf5760405163274cf40160e01b815260040160405180910390fd5b5f610cb86116dc565b6001600160a01b03808a165f9081526001929092016020526040909120600281015490925016610cfb57604051638f87345d60e01b815260040160405180910390fd5b604051631c13359160e11b81525f906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906338266b2290610d49908c90600401611fea565b5f60405180830381865afa158015610d63573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610d8a9190810190612503565b9050306001600160a01b03168160200151604001516001600160a01b031603610e275760405163526cd20560e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a4d9a40a90610df9908c90600401611fea565b5f604051808303815f87803b158015610e10575f5ffd5b505af1158015610e22573d5f5f3e3d5ffd5b505050505b81546201000090046001600160a01b031615610ee4578154600183015460028401546040516001600160a01b0362010000850481169461ffff16938e8216937fb9bd9edfd959d356fb842460c7f041e58616196972549617d5076398abdbd45893610e96939190911690612291565b60405180910390a4610ea66116dc565b6001600160a01b038a165f90815260019182016020526040812080546001600160b01b03191681559182015560020180546001600160a01b03191690555b50505050610ef061195a565b5050505050565b604080518082019091525f8082526020820152610f126116dc565b6001600160a01b039283165f90815260209182526040908190208151808301909252549384168152600160a01b90930460ff16908301525090565b610f55611700565b60405163b7ca418b60e01b815289906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b7ca418b90610fa3908490600401611fea565b602060405180830381865afa158015610fbe573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fe291906122a8565b610fff576040516334d0b49960e01b815260040160405180910390fd5b6001600160a01b038616158061101c57506001600160a01b038816155b1561103a5760405163b4fa3fb360e01b815260040160405180910390fd5b61104b8a8a8a8a8a8a8a8a8a611971565b5f6110546116dc565b6001600160a01b038a81165f9081526020928352604090819020815180830190925254918216808252600160a01b90920460ff16928101929092529091506110af5760405163b4fa3fb360e01b815260040160405180910390fd5b5f8160200151600a6110c191906127f2565b60208301516110d190600a6127f2565b6110db908b612800565b6110e5919061281f565b9050805f036111075760405163162908e360e11b815260040160405180910390fd5b604051635c463eed60e11b81526001600160a01b038d811660048301528b81166024830152604482018390527f0000000000000000000000000000000000000000000000000000000000000000169063b88c7dda906064015f604051808303815f87803b158015611176575f5ffd5b505af1158015611188573d5f5f3e3d5ffd5b50505050896001600160a01b03168b61ffff168d6001600160a01b03167f2b492093ceabbd05ef076cf84123a8fac7ab1733976ed4655ca1eb6ecb321eba848c6040516111d6929190612291565b60405180910390a45f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636bc07b2b6040518163ffffffff1660e01b8152600401606060405180830381865afa15801561123b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061125f9190612836565b50509050806001600160401b03165f036112d65761127f8c8c848c611749565b8a6001600160a01b03168c61ffff168e6001600160a01b03167fac6249df8c1b3c7d9f4b6cfa0a9753ea39d69f4e6f06a72d4bb9ef32774221c8858d6040516112c9929190612291565b60405180910390a46113bf565b60405180608001604052808d61ffff1681526020018c6001600160a01b031681526020018381526020018a6001600160a01b03168152506113156116dc565b6001015f8f6001600160a01b03166001600160a01b031681526020019081526020015f205f820151815f015f6101000a81548161ffff021916908361ffff1602179055506020820151815f0160026101000a8154816001600160a01b0302191690836001600160a01b03160217905550604082015181600101556060820151816002015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055509050505b505050506113cb61195a565b505050505050505050565b604080516080810182525f8082526020820181905291810182905260608101919091526114016116dc565b6001600160a01b039283165f908152600191820160209081526040918290208251608081018452815461ffff81168252620100009004871692810192909252928301549181019190915260029091015490921660608301525090565b5f5f5f6114686116dc565b6001600160a01b038086165f9081526020839052604090205491925016806114a35760405163b4fa3fb360e01b815260040160405180910390fd5b6040805160018082528183019092525f916001600160a01b03841691639057412d918a9190602082018180368337019050506040518363ffffffff1660e01b81526004016114f2929190612876565b5f60405180830381865afa15801561150c573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261153391908101906128b6565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee96509450505050505b9250929050565b81518151811461157b5760405163512509d360e11b815260040160405180910390fd5b5f6115846116dc565b90505f5b8281101561169c575f6001600160a01b03168582815181106115ac576115ac6125bb565b60200260200101516001600160a01b031614806115f657505f6001600160a01b03168482815181106115e0576115e06125bb565b60200260200101515f01516001600160a01b0316145b156116145760405163b4fa3fb360e01b815260040160405180910390fd5b838181518110611626576116266125bb565b6020026020010151825f015f878481518110611644576116446125bb565b6020908102919091018101516001600160a01b0390811683528282019390935260409091015f2083518154949092015160ff16600160a01b026001600160a81b03199094169190921617919091179055600101611588565b507fd6591bad09e677e4ef11e193b462a86685cb87669825fcc649bf38b643261e3984846040516116ce9291906128f9565b60405180910390a150505050565b7f0a93d51b2793ea18ce510da8b8cb57b59048d8c53342680b2f2da35f6fe6960090565b5f5160206129f85f395f51905f525c1561172d57604051633ee5aeb560e01b815260040160405180910390fd5b61174760015f5160206129f85f395f51905f525b90611afa565b565b6117538383611b01565b5f61175c6116dc565b6001600160a01b038581165f9081526020928352604090819020815180830190925254918216808252600160a01b90920460ff16928101929092529091506117b75760405163b4fa3fb360e01b815260040160405180910390fd5b80516040805160018082528183019092525f926001600160a01b031691639057412d918991602082018180368337019050506040518363ffffffff1660e01b8152600401611806929190612876565b5f60405180830381865afa158015611820573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261184791908101906128b6565b9150508047101561186b57604051639c92bdfb60e01b815260040160405180910390fd5b8151611882906001600160a01b0387169086611bd3565b8151604051630961b94d60e41b81526004810186905261ffff881660248201526001600160a01b0385811660448301525f92169063961b94d090849060640160206040518083038185885af11580156118dd573d5f5f3e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190611902919061298d565b604080518781526001600160401b03831660208201529192506001600160a01b038816917ff76116bc28f75f5701d8893bfefda7eb7bb5349e761e4576cf0ccbba40185848910160405180910390a250505050505050565b6117475f5f5160206129f85f395f51905f52611741565b5f611a5b7f7360ecb005ef445b1cb2b3a294f2c499b088f258b4531fffbc4c244d8cf7732346308d6001600160a01b03166369615a4c6040518163ffffffff1660e01b81526004016020604051808303815f875af11580156119d5573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119f991906125cf565b8e8e8e8e8e604051602001611a39949392919061ffff9490941684526001600160a01b039283166020850152604084019190915216606082015260800190565b60408051601f1981840301815290829052610bd49695949392916020016129a6565b60405163a732422d60e01b81529091506001600160a01b038b169063a732422d90611a92908490899089908990899060040161260e565b602060405180830381865afa158015611aad573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ad191906122a8565b611aee5760405163274cf40160e01b815260040160405180910390fd5b50505050505050505050565b80825d5050565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeed196001600160a01b03831601611b47578047101561029757604051632ca2f52b60e11b815260040160405180910390fd5b6040516370a0823160e01b815281906001600160a01b038416906370a0823190611b75903090600401611fea565b602060405180830381865afa158015611b90573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bb491906125cf565b101561029757604051632ca2f52b60e11b815260040160405180910390fd5b5f836001600160a01b031663095ea7b38484604051602401611bf692919061225d565b604051602081830303815290604052915060e01b6020820180516001600160e01b0383818316178352505050509050611c2f8482611c9b565b611c9557611c8b84856001600160a01b031663095ea7b3865f604051602401611c5992919061225d565b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050611ce6565b611c958482611ce6565b50505050565b5f5f5f5f60205f8651602088015f8a5af192503d91505f519050828015611cda57508115611ccc5780600114611cda565b5f866001600160a01b03163b115b93505050505b92915050565b5f5f60205f8451602086015f885af180611d05576040513d5f823e3d81fd5b50505f513d91508115611d1c578060011415611d29565b6001600160a01b0384163b155b15611c955783604051635274afe760e01b8152600401611d499190611fea565b60405180910390fd5b634e487b7160e01b5f52604160045260245ffd5b604080519081016001600160401b0381118282101715611d8857611d88611d52565b60405290565b60405161016081016001600160401b0381118282101715611d8857611d88611d52565b604051608081016001600160401b0381118282101715611d8857611d88611d52565b60405160c081016001600160401b0381118282101715611d8857611d88611d52565b604051601f8201601f191681016001600160401b0381118282101715611e1d57611e1d611d52565b604052919050565b5f6001600160401b03821115611e3d57611e3d611d52565b5060051b60200190565b6001600160a01b0381168114610a5c575f5ffd5b5f82601f830112611e6a575f5ffd5b8135611e7d611e7882611e25565b611df5565b8082825260208201915060208360061b860101925085831115611e9e575f5ffd5b602085015b83811015611efb5760408188031215611eba575f5ffd5b611ec2611d66565b8135611ecd81611e47565b8152602082013560ff81168114611ee2575f5ffd5b6020828101919091529084529290920191604001611ea3565b5095945050505050565b5f5f60408385031215611f16575f5ffd5b82356001600160401b03811115611f2b575f5ffd5b8301601f81018513611f3b575f5ffd5b8035611f49611e7882611e25565b8082825260208201915060208360051b850101925087831115611f6a575f5ffd5b6020840193505b82841015611f95578335611f8481611e47565b825260209384019390910190611f71565b945050505060208301356001600160401b03811115611fb2575f5ffd5b611fbe85828601611e5b565b9150509250929050565b5f60208284031215611fd8575f5ffd5b8135611fe381611e47565b9392505050565b6001600160a01b0391909116815260200190565b5f5f83601f84011261200e575f5ffd5b5081356001600160401b03811115612024575f5ffd5b6020830191508360208260051b8501011115611551575f5ffd5b5f5f5f5f5f60608688031215612052575f5ffd5b853561205d81611e47565b945060208601356001600160401b03811115612077575f5ffd5b61208388828901611ffe565b90955093505060408601356001600160401b038111156120a1575f5ffd5b6120ad88828901611ffe565b969995985093965092949392505050565b80516001600160a01b0316825260209081015160ff16910152565b60408101611ce082846120be565b5f5f602083850312156120f8575f5ffd5b82356001600160401b0381111561210d575f5ffd5b8301601f8101851361211d575f5ffd5b80356001600160401b03811115612132575f5ffd5b856020828401011115612143575f5ffd5b6020919091019590945092505050565b803561ffff81168114612164575f5ffd5b919050565b5f5f5f5f5f5f5f5f5f60e08a8c031215612181575f5ffd5b893561218c81611e47565b985061219a60208b01612153565b975060408a01356121aa81611e47565b965060608a0135955060808a01356121c181611e47565b945060a08a01356001600160401b038111156121db575f5ffd5b6121e78c828d01611ffe565b90955093505060c08a01356001600160401b03811115612205575f5ffd5b6122118c828d01611ffe565b915080935050809150509295985092959850929598565b5f5f60408385031215612239575f5ffd5b61224283612153565b9150602083013561225281611e47565b809150509250929050565b6001600160a01b03929092168252602082015260400190565b5f60208284031215612286575f5ffd5b8151611fe381611e47565b9182526001600160a01b0316602082015260400190565b5f602082840312156122b8575f5ffd5b81518015158114611fe3575f5ffd5b805161216481611e47565b80516001600160401b0381168114612164575f5ffd5b5f61016082840312156122f9575f5ffd5b612301611d8e565b825181526020808401519082015260408084015190820152606080840151908201526080808401519082015260a08084015190820152905061234560c083016122d2565b60c082015261235660e083016122d2565b60e082015261236861010083016122d2565b61010082015261237b61012083016122d2565b6101208201526101409182015191810191909152919050565b5f82601f8301126123a3575f5ffd5b81516123b1611e7882611e25565b8082825260208201915060208360051b8601019250858311156123d2575f5ffd5b602085015b83811015611efb5780518352602092830192016123d7565b80516001600160601b0381168114612164575f5ffd5b5f60808284031215612415575f5ffd5b61241d611db1565b905081516001600160401b03811115612434575f5ffd5b8201601f81018413612444575f5ffd5b8051612452611e7882611e25565b8082825260208201915060208360051b850101925086831115612473575f5ffd5b6020840193505b8284101561249e57835161248d81611e47565b82526020938401939091019061247a565b845250505060208201516001600160401b038111156124bb575f5ffd5b6124c784828501612394565b6020830152506124d9604083016122c7565b60408201526124ea606083016123ef565b606082015292915050565b805160028110612164575f5ffd5b5f60208284031215612513575f5ffd5b81516001600160401b03811115612528575f5ffd5b8201610200818503121561253a575f5ffd5b612542611dd3565b61254c85836122e8565b81526101608201516001600160401b03811115612567575f5ffd5b61257386828501612405565b60208301525061258661018083016124f5565b60408201526101a082015160608201526101c082015160808201526125ae6101e083016124f5565b60a0820152949350505050565b634e487b7160e01b5f52603260045260245ffd5b5f602082840312156125df575f5ffd5b5051919050565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b85815260606020820181905281018490525f8560808301825b8781101561265757823561263a81611e47565b6001600160a01b0316825260209283019290910190600101612627565b50838103604085015284815260208082019250600586901b820101865f36829003601e19015b888210156126ea57848403601f19018652823581811261269b575f5ffd5b8a016020810190356001600160401b038111156126b6575f5ffd5b8036038213156126c4575f5ffd5b6126cf8682846125e6565b9550505060208301925060208601955060018201915061267d565b50919b9a5050505050505050505050565b634e487b7160e01b5f52601160045260245ffd5b6001815b600184111561274a5780850481111561272e5761272e6126fb565b600184161561273c57908102905b60019390931c928002612713565b935093915050565b5f8261276057506001611ce0565b8161276c57505f611ce0565b8160018114612782576002811461278c576127a8565b6001915050611ce0565b60ff84111561279d5761279d6126fb565b50506001821b611ce0565b5060208310610133831016604e8410600b84101617156127cb575081810a611ce0565b6127d75f19848461270f565b805f19048211156127ea576127ea6126fb565b029392505050565b5f611fe360ff841683612752565b5f8261281a57634e487b7160e01b5f52601260045260245ffd5b500490565b8082028115828204841417611ce057611ce06126fb565b5f5f5f60608486031215612848575f5ffd5b612851846122d2565b925061285f602085016122d2565b915061286d604085016122d2565b90509250925092565b61ffff83168152604060208201525f82518060408401528060208501606085015e5f606082850101526060601f19601f8301168401019150509392505050565b5f5f604083850312156128c7575f5ffd5b82516001600160401b038111156128dc575f5ffd5b6128e885828601612394565b602094909401519395939450505050565b604080825283519082018190525f9060208501906060840190835b8181101561293b5783516001600160a01b0316835260209384019390920191600101612914565b5050838103602080860191909152855180835291810192508501905f5b818110156129815761296b8484516120be565b6040939093019260209290920191600101612958565b50919695505050505050565b5f6020828403121561299d575f5ffd5b611fe3826122d2565b86815260208082018790526001600160601b0319606087811b821660408501526054840187905285901b16607483015282515f9181908501608885015e5f920160880191825250969550505050505056fe9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a164736f6c634300081c000a000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000dc515cb479a64552c5a11a57109c314e40a1a7780000000000000000000000000000000000000000000000000000000000000001000000000000000000000000056a5fa5da84ceb7f93d36e545c5905607d8bd810000000000000000000000000000000000000000000000000000000000000001000000000000000000000000552c09b224ec9146442767c0092c2928b61f62a1000000000000000000000000000000000000000000000000000000000000000a