0 txs
80 calls
constructor
constructor(address _lifi, address _mito)
functions
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
destinationGas
viewfunction destinationGas() view returns (uint256)
destinationGasReceiver
viewfunction destinationGasReceiver() view returns (address)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
getRoleMember
viewfunction getRoleMember(bytes32 role, uint256 index) view returns (address)
getRoleMemberCount
viewfunction getRoleMemberCount(bytes32 role) view returns (uint256)
getRoleMembers
viewfunction getRoleMembers(bytes32 role) view returns (address[])
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
isVaultAllowed
viewfunction isVaultAllowed(address vault) view returns (bool)
lifi
viewfunction lifi() view returns (address)
mito
viewfunction mito() view returns (address)
MITOSIS_DOMAIN_ID
viewfunction MITOSIS_DOMAIN_ID() view returns (uint32)
nextOperationId
viewfunction nextOperationId(address sender) view returns (bytes32)
operationNonce
viewfunction operationNonce(address sender) view returns (uint256)
proxiableUUID
viewfunction proxiableUUID() view returns (bytes32)
quoteMigrateHubAsset
viewfunction quoteMigrateHubAsset(uint256 amount, address receiver, address vaultAddr) view returns (uint256)
quoteTransferMitosisHypERC20Remote
viewfunction quoteTransferMitosisHypERC20Remote(address tokenAddr, address receiver, uint256 amount) view returns (uint256 gas)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
UPGRADE_INTERFACE_VERSION
viewfunction UPGRADE_INTERFACE_VERSION() view returns (string)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
initialize
nonpayablefunction initialize(address admin)
migrate
payablefunction migrate(address vaultAddr, uint256 amount, bytes lifiCalldata) payable
migrateHubAsset
payablefunction migrateHubAsset(uint256 amount, address receiver, address vaultAddr) payable
renounceRole
nonpayablefunction renounceRole(bytes32 role, address callerConfirmation)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
setDestinationGas
nonpayablefunction setDestinationGas(uint256 gas)
setDestinationGasReceiver
nonpayablefunction setDestinationGasReceiver(address receiver)
setVaultAllowed
nonpayablefunction setVaultAllowed(address vault, bool allowed)
transferMitosisHypERC20Remote
payablefunction transferMitosisHypERC20Remote(address tokenAddr, address receiver, uint256 amount) payable
upgradeToAndCall
payablefunction upgradeToAndCall(address newImplementation, bytes data) payable
events
DestinationGasReceiverSet
event DestinationGasReceiverSet(address receiver)
DestinationGasSet
event DestinationGasSet(uint256 gas)
HubAssetMigration
event HubAssetMigration(address indexed sender, address indexed receiver, address indexed vaultAddr, uint256 amount, uint256 hplGas)
Initialized
event Initialized(uint64 version)
MigrationInitiated
event MigrationInitiated(bytes32 indexed operationId, address indexed sender, address indexed vaultAddr, uint256 amount, uint256 redeemed, uint256 lifiGas)
MitosisHypERC20Transferred
event MitosisHypERC20Transferred(bytes32 indexed messageId, address indexed receiver, address indexed tokenAddr, address sender, uint256 amount, uint256 hplGas)
RoleAdminChanged
event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole)
RoleGranted
event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender)
RoleRevoked
event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender)
Upgraded
event Upgraded(address indexed implementation)
VaultAllowed
event VaultAllowed(address indexed vault, bool allowed)
errors
AccessControlBadConfirmation
error AccessControlBadConfirmation()
AccessControlUnauthorizedAccount
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole)
AddressEmptyCode
error AddressEmptyCode(address target)
AllowanceNotSpent
error AllowanceNotSpent()
ERC1967InvalidImplementation
error ERC1967InvalidImplementation(address implementation)
ERC1967NonPayable
error ERC1967NonPayable()
FailedCall
error FailedCall()
InsufficientBalance
error InsufficientBalance()
InsufficientBalance
error InsufficientBalance(uint256 balance, uint256 needed)
InsufficientDestinationGas
error InsufficientDestinationGas()
InsufficientLiFiGas
error InsufficientLiFiGas()
InvalidAmount
error InvalidAmount()
InvalidInitialization
error InvalidInitialization()
InvalidReceiver
error InvalidReceiver()
InvalidVaultAddress
error InvalidVaultAddress()
NativeGasQuoteNotFound
error NativeGasQuoteNotFound()
NotInitializing
error NotInitializing()
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
UUPSUnauthorizedCallContext
error UUPSUnauthorizedCallContext()
UUPSUnsupportedProxiableUUID
error UUPSUnsupportedProxiableUUID(bytes32 slot)
VaultNotAllowed
error VaultNotAllowed()
creation bytecode
0x6101006040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff1681525061005f604051806060016040528060238152602001614744602391396101cb60201b60201c565b60a090815250348015610070575f5ffd5b5060405161476738038061476783398181016040528101906100929190610245565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036100f7576040517f1e4ec46b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361015c576040517f1e4ec46b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1660e08173ffffffffffffffffffffffffffffffffffffffff16815250505050610283565b5f600182516020840120035f5260ff1960205f20169050919050565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610214826101eb565b9050919050565b6102248161020a565b811461022e575f5ffd5b50565b5f8151905061023f8161021b565b92915050565b5f5f6040838503121561025b5761025a6101e7565b5b5f61026885828601610231565b925050602061027985828601610231565b9150509250929050565b60805160a05160c05160e0516144486102fc5f395f8181610d8e01528181610ead01528181610ef501528181610f8401528181611127015261187501525f8181610a290152818161201d015281816120ad015261211201525f61079e01525f818161248f015281816124e401526126a301526144485ff3fe6080604052600436106101d0575f3560e01c8063a217fddf116100f6578063bbc2f1b411610094578063ca15c87311610063578063ca15c873146106f0578063d547741f1461072c578063e184274e14610754578063ee55a283146107705761022a565b8063bbc2f1b41461063a578063bd991e9b14610676578063c4049828146106a0578063c4d66de8146106c85761022a565b8063ad3cb1cc116100d0578063ad3cb1cc14610582578063af0f6bb8146105ac578063b4aeb99e146105e8578063b5534640146106105761022a565b8063a217fddf146104f4578063a3246ad31461051e578063ab05a1e31461055a5761022a565b806352d1902d1161016e5780639010d07c1161013d5780639010d07c1461043657806391d1485414610472578063956f02cb146104ae5780639a916cb9146104ca5761022a565b806352d1902d146103785780635971baa8146103a257806362202ade146103be57806380f86883146103fa5761022a565b80632f2ff15d116101aa5780632f2ff15d146102e257806336568abe1461030a57806346d1cc22146103325780634f1ef2861461035c5761022a565b806301ffc9a71461022e578063248a9ca31461026a578063280ccd87146102a65761022a565b3661022a57610228346101e161079a565b6001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166107c690919063ffffffff16565b005b5f5ffd5b348015610239575f5ffd5b50610254600480360381019061024f9190613512565b61088c565b6040516102619190613557565b60405180910390f35b348015610275575f5ffd5b50610290600480360381019061028b91906135a3565b610905565b60405161029d91906135dd565b60405180910390f35b3480156102b1575f5ffd5b506102cc60048036038101906102c79190613650565b61092f565b6040516102d99190613557565b60405180910390f35b3480156102ed575f5ffd5b506103086004803603810190610303919061367b565b61098a565b005b348015610315575f5ffd5b50610330600480360381019061032b919061367b565b6109ac565b005b34801561033d575f5ffd5b50610346610a27565b60405161035391906136d9565b60405180910390f35b6103766004803603810190610371919061382e565b610a4b565b005b348015610383575f5ffd5b5061038c610a6a565b60405161039991906135dd565b60405180910390f35b6103bc60048036038101906103b791906138bb565b610a9b565b005b3480156103c9575f5ffd5b506103e460048036038101906103df9190613650565b611061565b6040516103f1919061391a565b60405180910390f35b348015610405575f5ffd5b50610420600480360381019061041b91906138bb565b6110b0565b60405161042d919061391a565b60405180910390f35b348015610441575f5ffd5b5061045c60048036038101906104579190613933565b611243565b6040516104699190613980565b60405180910390f35b34801561047d575f5ffd5b506104986004803603810190610493919061367b565b61127c565b6040516104a59190613557565b60405180910390f35b6104c860048036038101906104c39190613999565b6112ed565b005b3480156104d5575f5ffd5b506104de6114d8565b6040516104eb9190613a07565b60405180910390f35b3480156104ff575f5ffd5b506105086114df565b60405161051591906135dd565b60405180910390f35b348015610529575f5ffd5b50610544600480360381019061053f91906135a3565b6114e5565b6040516105519190613ad7565b60405180910390f35b348015610565575f5ffd5b50610580600480360381019061057b9190613b21565b611514565b005b34801561058d575f5ffd5b506105966115d0565b6040516105a39190613bbf565b60405180910390f35b3480156105b7575f5ffd5b506105d260048036038101906105cd9190613999565b611609565b6040516105df919061391a565b60405180910390f35b3480156105f3575f5ffd5b5061060e60048036038101906106099190613650565b61177a565b005b34801561061b575f5ffd5b5061062461180a565b604051610631919061391a565b60405180910390f35b348015610645575f5ffd5b50610660600480360381019061065b9190613650565b61181b565b60405161066d91906135dd565b60405180910390f35b348015610681575f5ffd5b5061068a611873565b60405161069791906136d9565b60405180910390f35b3480156106ab575f5ffd5b506106c660048036038101906106c19190613bdf565b611897565b005b3480156106d3575f5ffd5b506106ee60048036038101906106e99190613650565b6118ed565b005b3480156106fb575f5ffd5b50610716600480360381019061071191906135a3565b611af7565b604051610723919061391a565b60405180910390f35b348015610737575f5ffd5b50610752600480360381019061074d919061367b565b611b25565b005b61076e60048036038101906107699190613c67565b611b47565b005b34801561077b575f5ffd5b506107846122bd565b6040516107919190613980565b60405180910390f35b5f5f7f000000000000000000000000000000000000000000000000000000000000000090508091505090565b8047101561080d5747816040517fcf479181000000000000000000000000000000000000000000000000000000008152600401610804929190613cd8565b60405180910390fd5b5f5f8373ffffffffffffffffffffffffffffffffffffffff168360405161083390613d2c565b5f6040518083038185875af1925050503d805f811461086d576040519150601f19603f3d011682016040523d82523d5f602084013e610872565b606091505b50915091508161088657610885816122ee565b5b50505050565b5f7f5a05180f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108fe57506108fd82612332565b5b9050919050565b5f5f61090f6123ab565b9050805f015f8481526020019081526020015f2060010154915050919050565b5f61093861079a565b6003015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b61099382610905565b61099c816123d2565b6109a683836123e6565b50505050565b6109b4612436565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610a18576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a22828261243d565b505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b610a5361248d565b610a5c82612573565b610a668282612583565b5050565b5f610a736126a1565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b905090565b610aa3612728565b5f8311610adc576040517f2c5211c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610b41576040517f1e4ec46b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f610b4a61079a565b9050806003015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16610bce576040517f5040aaa300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f829050610c06610bdd612436565b30878473ffffffffffffffffffffffffffffffffffffffff1661277c909392919063ffffffff16565b5f8173ffffffffffffffffffffffffffffffffffffffff16634cdad506876040518263ffffffff1660e01b8152600401610c40919061391a565b602060405180830381865afa158015610c5b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c7f9190613d54565b9050610d1a8273ffffffffffffffffffffffffffffffffffffffff16637bde82f28830604051602401610cb3929190613d7f565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050508373ffffffffffffffffffffffffffffffffffffffff166127fe90919063ffffffff16565b505f8273ffffffffffffffffffffffffffffffffffffffff166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d65573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d899190613de1565b90505f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16633c57dd5d8389866040518463ffffffff1660e01b8152600401610de993929190613e0c565b602060405180830381865afa158015610e04573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e289190613d54565b905034811115610e64576040517f86f9fd3e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80341115610ea857610ea78134610e7b9190613e6e565b610e83612436565b73ffffffffffffffffffffffffffffffffffffffff166107c690919063ffffffff16565b5b610ef37f0000000000000000000000000000000000000000000000000000000000000000848473ffffffffffffffffffffffffffffffffffffffff166128139092919063ffffffff16565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16638340f54982848a876040518563ffffffff1660e01b8152600401610f5193929190613e0c565b5f604051808303818588803b158015610f68575f5ffd5b505af1158015610f7a573d5f5f3e3d5ffd5b5050505050610fca7f00000000000000000000000000000000000000000000000000000000000000005f8473ffffffffffffffffffffffffffffffffffffffff166128139092919063ffffffff16565b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16611000612436565b73ffffffffffffffffffffffffffffffffffffffff167f54c1b8376bbfde9f86c27b8d9daae73892649296495c441988086d7adc4fedf08b85604051611047929190613cd8565b60405180910390a4505050505061105c612920565b505050565b5f61106a61079a565b6002015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b5f5f8290505f8173ffffffffffffffffffffffffffffffffffffffff166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110ff573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111239190613de1565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16633c57dd5d82878573ffffffffffffffffffffffffffffffffffffffff16634cdad5068b6040518263ffffffff1660e01b815260040161119c919061391a565b602060405180830381865afa1580156111b7573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111db9190613d54565b6040518463ffffffff1660e01b81526004016111f993929190613e0c565b602060405180830381865afa158015611214573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112389190613d54565b925050509392505050565b5f5f61124d612937565b905061127383825f015f8781526020019081526020015f2061295e90919063ffffffff16565b91505092915050565b5f5f6112866123ab565b9050805f015f8581526020019081526020015f205f015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1691505092915050565b6112f5612728565b611329611300612436565b30838673ffffffffffffffffffffffffffffffffffffffff1661277c909392919063ffffffff16565b5f611335848484611609565b905034811115611371576040517f86f9fd3e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b803411156113b5576113b481346113889190613e6e565b611390612436565b73ffffffffffffffffffffffffffffffffffffffff166107c690919063ffffffff16565b5b5f8473ffffffffffffffffffffffffffffffffffffffff166381b4e8b4836201e7906113f68873ffffffffffffffffffffffffffffffffffffffff16612975565b876040518563ffffffff1660e01b815260040161141593929190613ea1565b60206040518083038185885af1158015611431573d5f5f3e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906114569190613eea565b90508473ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16827f3f068f8869cbb6a81786c7a6624a420395312d59a858c26ca3261ddb0cc7f58e6114b0612436565b87876040516114c193929190613f15565b60405180910390a450506114d3612920565b505050565b6201e79081565b5f5f1b81565b60605f6114f0612937565b905061150c815f015f8581526020019081526020015f20612996565b915050919050565b5f5f1b611520816123d2565b8161152961079a565b6003015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508273ffffffffffffffffffffffffffffffffffffffff167f4351eca17cfb635b191154118486453ff79799ff42f716691d63ba01a1139cb3836040516115c39190613557565b60405180910390a2505050565b6040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b5f5f8473ffffffffffffffffffffffffffffffffffffffff16638bd90b826201e79061164a8773ffffffffffffffffffffffffffffffffffffffff16612975565b866040518463ffffffff1660e01b815260040161166993929190613ea1565b5f60405180830381865afa158015611683573d5f5f3e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906116ab919061406f565b90505f5f90505b8151811015611740575f73ffffffffffffffffffffffffffffffffffffffff168282815181106116e5576116e46140b6565b5b60200260200101515f015173ffffffffffffffffffffffffffffffffffffffff16036117335781818151811061171e5761171d6140b6565b5b60200260200101516020015192505050611773565b80806001019150506116b2565b506040517f7eda513c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9392505050565b5f5f1b611786816123d2565b8161178f61079a565b6001015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f5f72d967aa1a730f059716a729f66fa51c43f2f54039414b39f59f7b8197009d826040516117fe9190613980565b60405180910390a15050565b5f61181361079a565b5f0154905090565b5f61186c8261182861079a565b6002015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546129b5565b9050919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f5f1b6118a3816123d2565b816118ac61079a565b5f01819055507fb7de3a0797b1f99cd8630cad232b790fb8fbb6b33578ff0dd0a121ab35d10d94826040516118e1919061391a565b60405180910390a15050565b5f6118f66129e9565b90505f815f0160089054906101000a900460ff161590505f825f015f9054906101000a900467ffffffffffffffff1690505f5f8267ffffffffffffffff1614801561193e5750825b90505f60018367ffffffffffffffff1614801561197157505f3073ffffffffffffffffffffffffffffffffffffffff163b145b90508115801561197f575080155b156119b6576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001855f015f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055508315611a03576001855f0160086101000a81548160ff0219169083151502179055505b5f73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1603611a68576040517f1e4ec46b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611a70612a10565b611a78612a1a565b611a80612a24565b611a88612a36565b611a945f5f1b876123e6565b508315611aef575f855f0160086101000a81548160ff0219169083151502179055507fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d26001604051611ae69190614138565b60405180910390a15b505050505050565b5f5f611b01612937565b9050611b1d815f015f8581526020019081526020015f20612a40565b915050919050565b611b2e82610905565b611b37816123d2565b611b41838361243d565b50505050565b611b4f612728565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611bb4576040517f0306120100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8311611bed576040517f2c5211c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f849050611c25611bfc612436565b30868473ffffffffffffffffffffffffffffffffffffffff1661277c909392919063ffffffff16565b5f8173ffffffffffffffffffffffffffffffffffffffff16634cdad506866040518263ffffffff1660e01b8152600401611c5f919061391a565b602060405180830381865afa158015611c7a573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c9e9190613d54565b9050611d398273ffffffffffffffffffffffffffffffffffffffff16637bde82f28730604051602401611cd2929190613d7f565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050508373ffffffffffffffffffffffffffffffffffffffff166127fe90919063ffffffff16565b505f8273ffffffffffffffffffffffffffffffffffffffff166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d84573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611da89190613de1565b90505f8173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611de49190613980565b602060405180830381865afa158015611dff573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e239190613d54565b905082811015611e5f576040517ff4d678b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f611e6861079a565b9050806003015f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16611eec576040517f5040aaa300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f815f0154905034811115611f2d576040517f86f9fd3e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8134611f3a9190613e6e565b90505f8111611f75576040517f7f8a8b1200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff16836001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120185761201782846001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166107c690919063ffffffff16565b5b6120637f0000000000000000000000000000000000000000000000000000000000000000878773ffffffffffffffffffffffffffffffffffffffff166128139092919063ffffffff16565b6120f189898080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f82011690508083019250505050505050827f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16612a539092919063ffffffff16565b505f8573ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e307f00000000000000000000000000000000000000000000000000000000000000006040518363ffffffff1660e01b815260040161214e9291906141a3565b602060405180830381865afa158015612169573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061218d9190613d54565b146121c4576040517f6e8c7ea200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f836002015f6121d2612436565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f81548092919061221b906141ca565b9190505590505f61223361222d612436565b836129b5565b90508c73ffffffffffffffffffffffffffffffffffffffff16612254612436565b73ffffffffffffffffffffffffffffffffffffffff16827f587259b92b95dd191fea15bfaf0f622372e6c64a2f70f5ad1f6561382ec377478f8c8860405161229e93929190614211565b60405180910390a45050505050505050506122b7612920565b50505050565b5f6122c661079a565b6001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f815111156123005780518082602001fd5b6040517fd6bda27500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f7f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806123a457506123a382612b1e565b5b9050919050565b5f7f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800905090565b6123e3816123de612436565b612b87565b50565b5f5f6123f0612937565b90505f6123fd8585612bd8565b9050801561242b5761242984835f015f8881526020019081526020015f20612cd090919063ffffffff16565b505b809250505092915050565b5f33905090565b5f5f612447612937565b90505f6124548585612cfd565b905080156124825761248084835f015f8881526020019081526020015f20612df590919063ffffffff16565b505b809250505092915050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16148061253a57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16612521612e22565b73ffffffffffffffffffffffffffffffffffffffff1614155b15612571576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f5f1b61257f816123d2565b5050565b8173ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156125eb57506040513d601f19601f820116820180604052508101906125e89190613eea565b60015b61262c57816040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526004016126239190613980565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b811461269257806040517faa1d49a400000000000000000000000000000000000000000000000000000000815260040161268991906135dd565b60405180910390fd5b61269c8383612e75565b505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614612726576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f612731612ee7565b90506002815f015403612770576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002815f018190555050565b6127f8848573ffffffffffffffffffffffffffffffffffffffff166323b872dd8686866040516024016127b193929190613e0c565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612f0e565b50505050565b606061280b83835f612a53565b905092915050565b5f8373ffffffffffffffffffffffffffffffffffffffff1663095ea7b38484604051602401612843929190614246565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505090506128918482612fa9565b61291a5761290f848573ffffffffffffffffffffffffffffffffffffffff1663095ea7b3865f6040516024016128c89291906142a6565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612f0e565b6129198482612f0e565b5b50505050565b5f612929612ee7565b90506001815f018190555050565b5f7fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e82371705932000905090565b5f61296b835f0183613002565b5f1c905092915050565b5f8173ffffffffffffffffffffffffffffffffffffffff165f1b9050919050565b60605f6129a4835f01613029565b905060608190508092505050919050565b5f4683836040516020016129cb93929190614332565b60405160208183030381529060405280519060200120905092915050565b5f7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00905090565b612a18613082565b565b612a22613082565b565b612a2c613082565b612a346130c2565b565b612a3e613082565b565b5f612a4c825f016130e1565b9050919050565b606081471015612a9c5747826040517fcf479181000000000000000000000000000000000000000000000000000000008152600401612a93929190613cd8565b60405180910390fd5b5f5f8573ffffffffffffffffffffffffffffffffffffffff168486604051612ac491906143a8565b5f6040518083038185875af1925050503d805f8114612afe576040519150601f19603f3d011682016040523d82523d5f602084013e612b03565b606091505b5091509150612b138683836130f0565b925050509392505050565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612b91828261127c565b612bd45780826040517fe2517d3f000000000000000000000000000000000000000000000000000000008152600401612bcb9291906143be565b60405180910390fd5b5050565b5f5f612be26123ab565b9050612bee848461127c565b612cc5576001815f015f8681526020019081526020015f205f015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550612c61612436565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050612cca565b5f9150505b92915050565b5f612cf5835f018373ffffffffffffffffffffffffffffffffffffffff165f1b61317d565b905092915050565b5f5f612d076123ab565b9050612d13848461127c565b15612dea575f815f015f8681526020019081526020015f205f015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550612d86612436565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16857ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a46001915050612def565b5f9150505b92915050565b5f612e1a835f018373ffffffffffffffffffffffffffffffffffffffff165f1b6131e4565b905092915050565b5f612e4e7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b6132e0565b5f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b612e7e826132e9565b8173ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a25f81511115612eda57612ed482826133b2565b50612ee3565b612ee2613432565b5b5050565b5f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00905090565b5f5f60205f8451602086015f885af180612f2d576040513d5f823e3d81fd5b3d92505f519150505f8214612f46576001811415612f61565b5f8473ffffffffffffffffffffffffffffffffffffffff163b145b15612fa357836040517f5274afe7000000000000000000000000000000000000000000000000000000008152600401612f9a9190613980565b60405180910390fd5b50505050565b5f5f5f5f60205f8651602088015f8a5af192503d91505f519050828015612ff757505f8214612fdb5760018114612ff6565b5f8673ffffffffffffffffffffffffffffffffffffffff163b115b5b935050505092915050565b5f825f018281548110613018576130176140b6565b5b905f5260205f200154905092915050565b6060815f0180548060200260200160405190810160405280929190818152602001828054801561307657602002820191905f5260205f20905b815481526020019060010190808311613062575b50505050509050919050565b61308a61346e565b6130c0576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6130ca613082565b5f6130d3612ee7565b90506001815f018190555050565b5f815f01805490509050919050565b60608261310557613100826122ee565b613175565b5f825114801561312b57505f8473ffffffffffffffffffffffffffffffffffffffff163b145b1561316d57836040517f9996b3150000000000000000000000000000000000000000000000000000000081526004016131649190613980565b60405180910390fd5b819050613176565b5b9392505050565b5f613188838361348c565b6131da57825f0182908060018154018082558091505060019003905f5260205f20015f9091909190915055825f0180549050836001015f8481526020019081526020015f2081905550600190506131de565b5f90505b92915050565b5f5f836001015f8481526020019081526020015f205490505f81146132d5575f6001826132119190613e6e565b90505f6001865f01805490506132279190613e6e565b905080821461328d575f865f018281548110613246576132456140b6565b5b905f5260205f200154905080875f018481548110613267576132666140b6565b5b905f5260205f20018190555083876001015f8381526020019081526020015f2081905550505b855f018054806132a05761329f6143e5565b5b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f9055600193505050506132da565b5f9150505b92915050565b5f819050919050565b5f8173ffffffffffffffffffffffffffffffffffffffff163b0361334457806040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815260040161333b9190613980565b60405180910390fd5b806133707f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b6132e0565b5f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60605f5f8473ffffffffffffffffffffffffffffffffffffffff16846040516133db91906143a8565b5f60405180830381855af49150503d805f8114613413576040519150601f19603f3d011682016040523d82523d5f602084013e613418565b606091505b50915091506134288583836130f0565b9250505092915050565b5f34111561346c576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f6134776129e9565b5f0160089054906101000a900460ff16905090565b5f5f836001015f8481526020019081526020015f20541415905092915050565b5f604051905090565b5f5ffd5b5f5ffd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6134f1816134bd565b81146134fb575f5ffd5b50565b5f8135905061350c816134e8565b92915050565b5f60208284031215613527576135266134b5565b5b5f613534848285016134fe565b91505092915050565b5f8115159050919050565b6135518161353d565b82525050565b5f60208201905061356a5f830184613548565b92915050565b5f819050919050565b61358281613570565b811461358c575f5ffd5b50565b5f8135905061359d81613579565b92915050565b5f602082840312156135b8576135b76134b5565b5b5f6135c58482850161358f565b91505092915050565b6135d781613570565b82525050565b5f6020820190506135f05f8301846135ce565b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61361f826135f6565b9050919050565b61362f81613615565b8114613639575f5ffd5b50565b5f8135905061364a81613626565b92915050565b5f60208284031215613665576136646134b5565b5b5f6136728482850161363c565b91505092915050565b5f5f60408385031215613691576136906134b5565b5b5f61369e8582860161358f565b92505060206136af8582860161363c565b9150509250929050565b5f6136c3826135f6565b9050919050565b6136d3816136b9565b82525050565b5f6020820190506136ec5f8301846136ca565b92915050565b5f5ffd5b5f5ffd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b613740826136fa565b810181811067ffffffffffffffff8211171561375f5761375e61370a565b5b80604052505050565b5f6137716134ac565b905061377d8282613737565b919050565b5f67ffffffffffffffff82111561379c5761379b61370a565b5b6137a5826136fa565b9050602081019050919050565b828183375f83830152505050565b5f6137d26137cd84613782565b613768565b9050828152602081018484840111156137ee576137ed6136f6565b5b6137f98482856137b2565b509392505050565b5f82601f830112613815576138146136f2565b5b81356138258482602086016137c0565b91505092915050565b5f5f60408385031215613844576138436134b5565b5b5f6138518582860161363c565b925050602083013567ffffffffffffffff811115613872576138716134b9565b5b61387e85828601613801565b9150509250929050565b5f819050919050565b61389a81613888565b81146138a4575f5ffd5b50565b5f813590506138b581613891565b92915050565b5f5f5f606084860312156138d2576138d16134b5565b5b5f6138df868287016138a7565b93505060206138f08682870161363c565b92505060406139018682870161363c565b9150509250925092565b61391481613888565b82525050565b5f60208201905061392d5f83018461390b565b92915050565b5f5f60408385031215613949576139486134b5565b5b5f6139568582860161358f565b9250506020613967858286016138a7565b9150509250929050565b61397a81613615565b82525050565b5f6020820190506139935f830184613971565b92915050565b5f5f5f606084860312156139b0576139af6134b5565b5b5f6139bd8682870161363c565b93505060206139ce8682870161363c565b92505060406139df868287016138a7565b9150509250925092565b5f63ffffffff82169050919050565b613a01816139e9565b82525050565b5f602082019050613a1a5f8301846139f8565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b613a5281613615565b82525050565b5f613a638383613a49565b60208301905092915050565b5f602082019050919050565b5f613a8582613a20565b613a8f8185613a2a565b9350613a9a83613a3a565b805f5b83811015613aca578151613ab18882613a58565b9750613abc83613a6f565b925050600181019050613a9d565b5085935050505092915050565b5f6020820190508181035f830152613aef8184613a7b565b905092915050565b613b008161353d565b8114613b0a575f5ffd5b50565b5f81359050613b1b81613af7565b92915050565b5f5f60408385031215613b3757613b366134b5565b5b5f613b448582860161363c565b9250506020613b5585828601613b0d565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f613b9182613b5f565b613b9b8185613b69565b9350613bab818560208601613b79565b613bb4816136fa565b840191505092915050565b5f6020820190508181035f830152613bd78184613b87565b905092915050565b5f60208284031215613bf457613bf36134b5565b5b5f613c01848285016138a7565b91505092915050565b5f5ffd5b5f5ffd5b5f5f83601f840112613c2757613c266136f2565b5b8235905067ffffffffffffffff811115613c4457613c43613c0a565b5b602083019150836001820283011115613c6057613c5f613c0e565b5b9250929050565b5f5f5f5f60608587031215613c7f57613c7e6134b5565b5b5f613c8c8782880161363c565b9450506020613c9d878288016138a7565b935050604085013567ffffffffffffffff811115613cbe57613cbd6134b9565b5b613cca87828801613c12565b925092505092959194509250565b5f604082019050613ceb5f83018561390b565b613cf8602083018461390b565b9392505050565b5f81905092915050565b50565b5f613d175f83613cff565b9150613d2282613d09565b5f82019050919050565b5f613d3682613d0c565b9150819050919050565b5f81519050613d4e81613891565b92915050565b5f60208284031215613d6957613d686134b5565b5b5f613d7684828501613d40565b91505092915050565b5f604082019050613d925f83018561390b565b613d9f6020830184613971565b9392505050565b5f613db082613615565b9050919050565b613dc081613da6565b8114613dca575f5ffd5b50565b5f81519050613ddb81613db7565b92915050565b5f60208284031215613df657613df56134b5565b5b5f613e0384828501613dcd565b91505092915050565b5f606082019050613e1f5f830186613971565b613e2c6020830185613971565b613e39604083018461390b565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613e7882613888565b9150613e8383613888565b9250828203905081811115613e9b57613e9a613e41565b5b92915050565b5f606082019050613eb45f8301866139f8565b613ec160208301856135ce565b613ece604083018461390b565b949350505050565b5f81519050613ee481613579565b92915050565b5f60208284031215613eff57613efe6134b5565b5b5f613f0c84828501613ed6565b91505092915050565b5f606082019050613f285f830186613971565b613f35602083018561390b565b613f42604083018461390b565b949350505050565b5f67ffffffffffffffff821115613f6457613f6361370a565b5b602082029050602081019050919050565b5f5ffd5b5f81519050613f8781613626565b92915050565b5f60408284031215613fa257613fa1613f75565b5b613fac6040613768565b90505f613fbb84828501613f79565b5f830152506020613fce84828501613d40565b60208301525092915050565b5f613fec613fe784613f4a565b613768565b9050808382526020820190506040840283018581111561400f5761400e613c0e565b5b835b8181101561403857806140248882613f8d565b845260208401935050604081019050614011565b5050509392505050565b5f82601f830112614056576140556136f2565b5b8151614066848260208601613fda565b91505092915050565b5f60208284031215614084576140836134b5565b5b5f82015167ffffffffffffffff8111156140a1576140a06134b9565b5b6140ad84828501614042565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f819050919050565b5f67ffffffffffffffff82169050919050565b5f819050919050565b5f61412261411d614118846140e3565b6140ff565b6140ec565b9050919050565b61413281614108565b82525050565b5f60208201905061414b5f830184614129565b92915050565b5f61416b614166614161846135f6565b6140ff565b6135f6565b9050919050565b5f61417c82614151565b9050919050565b5f61418d82614172565b9050919050565b61419d81614183565b82525050565b5f6040820190506141b65f830185613971565b6141c36020830184614194565b9392505050565b5f6141d482613888565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361420657614205613e41565b5b600182019050919050565b5f6060820190506142245f83018661390b565b614231602083018561390b565b61423e604083018461390b565b949350505050565b5f6040820190506142595f830185613971565b614266602083018461390b565b9392505050565b5f819050919050565b5f61429061428b6142868461426d565b6140ff565b613888565b9050919050565b6142a081614276565b82525050565b5f6040820190506142b95f830185613971565b6142c66020830184614297565b9392505050565b5f819050919050565b6142e76142e282613888565b6142cd565b82525050565b5f8160601b9050919050565b5f614303826142ed565b9050919050565b5f614314826142f9565b9050919050565b61432c61432782613615565b61430a565b82525050565b5f61433d82866142d6565b60208201915061434d828561431b565b60148201915061435d82846142d6565b602082019150819050949350505050565b5f81519050919050565b5f6143828261436e565b61438c8185613cff565b935061439c818560208601613b79565b80840191505092915050565b5f6143b38284614378565b915081905092915050565b5f6040820190506143d15f830185613971565b6143de60208301846135ce565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffdfea2646970667358221220093ddb131157f3d3a8bb1cad4fbd39291e61634bf5d8bc531e113e318aa7fb8164736f6c634300081d00336d69746f7369732e73746f726167652e4c6946694d6967726174696f6e48656c7065720000000000000000000000001231deb6f5749ef6ce6943a275a1d3e7486f4eae00000000000000000000000012481632fcf42878b5e478e430e2aeb6b1f62429