[ { "inputs": [ { "internalType": "address", "name": "admin", "type": "address" }, { "internalType": "address", "name": "hub", "type": "address" }, { "internalType": "address", "name": "loanManager", "type": "address" }, { "internalType": "uint8", "name": "tokenDecimals", "type": "uint8" }, { "internalType": "string", "name": "fTokenName", "type": "string" }, { "internalType": "string", "name": "fTokenSymbol", "type": "string" }, { "internalType": "uint8", "name": "poolId", "type": "uint8" }, { "components": [ { "internalType": "uint256", "name": "lastUpdateTimestamp", "type": "uint256" }, { "components": [ { "internalType": "uint32", "name": "flashLoanFee", "type": "uint32" }, { "internalType": "uint32", "name": "retentionRate", "type": "uint32" }, { "internalType": "address", "name": "fTokenFeeRecipient", "type": "address" }, { "internalType": "address", "name": "tokenFeeClaimer", "type": "address" }, { "internalType": "uint256", "name": "totalRetainedAmount", "type": "uint256" }, { "internalType": "bytes32", "name": "tokenFeeRecipient", "type": "bytes32" } ], "internalType": "struct HubPoolState.FeeData", "name": "feeData", "type": "tuple" }, { "components": [ { "internalType": "uint16", "name": "optimalUtilisationRatio", "type": "uint16" }, { "internalType": "uint256", "name": "totalAmount", "type": "uint256" }, { "internalType": "uint256", "name": "interestRate", "type": "uint256" }, { "internalType": "uint256", "name": "interestIndex", "type": "uint256" } ], "internalType": "struct HubPoolState.DepositData", "name": "depositData", "type": "tuple" }, { "components": [ { "internalType": "uint32", "name": "vr0", "type": "uint32" }, { "internalType": "uint32", "name": "vr1", "type": "uint32" }, { "internalType": "uint32", "name": "vr2", "type": "uint32" }, { "internalType": "uint256", "name": "totalAmount", "type": "uint256" }, { "internalType": "uint256", "name": "interestRate", "type": "uint256" }, { "internalType": "uint256", "name": "interestIndex", "type": "uint256" } ], "internalType": "struct HubPoolState.VariableBorrowData", "name": "variableBorrowData", "type": "tuple" }, { "components": [ { "internalType": "uint32", "name": "sr0", "type": "uint32" }, { "internalType": "uint32", "name": "sr1", "type": "uint32" }, { "internalType": "uint32", "name": "sr2", "type": "uint32" }, { "internalType": "uint32", "name": "sr3", "type": "uint32" }, { "internalType": "uint16", "name": "optimalStableToTotalDebtRatio", "type": "uint16" }, { "internalType": "uint16", "name": "rebalanceUpUtilisationRatio", "type": "uint16" }, { "internalType": "uint16", "name": "rebalanceUpDepositInterestRate", "type": "uint16" }, { "internalType": "uint16", "name": "rebalanceDownDelta", "type": "uint16" }, { "internalType": "uint256", "name": "totalAmount", "type": "uint256" }, { "internalType": "uint256", "name": "interestRate", "type": "uint256" }, { "internalType": "uint256", "name": "averageInterestRate", "type": "uint256" } ], "internalType": "struct HubPoolState.StableBorrowData", "name": "stableBorrowData", "type": "tuple" }, { "components": [ { "internalType": "uint64", "name": "deposit", "type": "uint64" }, { "internalType": "uint64", "name": "borrow", "type": "uint64" }, { "internalType": "uint64", "name": "stableBorrowPercentage", "type": "uint64" } ], "internalType": "struct HubPoolState.CapsData", "name": "capsData", "type": "tuple" }, { "components": [ { "internalType": "bool", "name": "deprecated", "type": "bool" }, { "internalType": "bool", "name": "stableBorrowSupported", "type": "bool" }, { "internalType": "bool", "name": "canMintFToken", "type": "bool" }, { "internalType": "bool", "name": "flashLoanSupported", "type": "bool" } ], "internalType": "struct HubPoolState.ConfigData", "name": "configData", "type": "tuple" } ], "internalType": "struct HubPoolState.PoolData", "name": "pooldata", "type": "tuple" }, { "internalType": "contract IOracleManager", "name": "oracleManager", "type": "address" }, { "internalType": "uint16", "name": "chainId", "type": "uint16" }, { "internalType": "bytes32", "name": "spokeAddress", "type": "bytes32" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "AccessControlBadConfirmation", "type": "error" }, { "inputs": [ { "internalType": "uint48", "name": "schedule", "type": "uint48" } ], "name": "AccessControlEnforcedDefaultAdminDelay", "type": "error" }, { "inputs": [], "name": "AccessControlEnforcedDefaultAdminRules", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "defaultAdmin", "type": "address" } ], "name": "AccessControlInvalidDefaultAdmin", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "bytes32", "name": "neededRole", "type": "bytes32" } ], "name": "AccessControlUnauthorizedAccount", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "allowance", "type": "uint256" }, { "internalType": "uint256", "name": "needed", "type": "uint256" } ], "name": "ERC20InsufficientAllowance", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "uint256", "name": "balance", "type": "uint256" }, { "internalType": "uint256", "name": "needed", "type": "uint256" } ], "name": "ERC20InsufficientBalance", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "approver", "type": "address" } ], "name": "ERC20InvalidApprover", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "ERC20InvalidReceiver", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" } ], "name": "ERC20InvalidSender", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" } ], "name": "ERC20InvalidSpender", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "maxLoan", "type": "uint256" } ], "name": "ERC3156ExceededMaxLoan", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "ERC3156InvalidReceiver", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" } ], "name": "ERC3156UnsupportedToken", "type": "error" }, { "inputs": [ { "internalType": "uint16", "name": "chainId", "type": "uint16" } ], "name": "ExistingChainSpoke", "type": "error" }, { "inputs": [], "name": "FlashLoanFeeTooHigh", "type": "error" }, { "inputs": [], "name": "MathOverflowedMulDiv", "type": "error" }, { "inputs": [], "name": "MaxStableInterestRateTooHigh", "type": "error" }, { "inputs": [], "name": "MaxVariableInterestRateTooHigh", "type": "error" }, { "inputs": [ { "internalType": "uint16", "name": "chainId", "type": "uint16" } ], "name": "NoChainSpoke", "type": "error" }, { "inputs": [], "name": "OptimalStableToTotalDebtRatioTooHigh", "type": "error" }, { "inputs": [], "name": "OptimalUtilisationRatioTooHigh", "type": "error" }, { "inputs": [], "name": "OptimalUtilisationRatioTooLow", "type": "error" }, { "inputs": [], "name": "RatioExceedsOne", "type": "error" }, { "inputs": [], "name": "RebalanceUpDepositInterestRateTooHigh", "type": "error" }, { "inputs": [], "name": "RebalanceUpUtilisationRatioTooHigh", "type": "error" }, { "inputs": [], "name": "ReentrancyGuardReentrantCall", "type": "error" }, { "inputs": [], "name": "RetentionRateTooHigh", "type": "error" }, { "inputs": [ { "internalType": "uint8", "name": "bits", "type": "uint8" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "SafeCastOverflowedUintDowncast", "type": "error" }, { "inputs": [], "name": "StableBorrowPercentageTooHigh", "type": "error" }, { "inputs": [ { "internalType": "uint16", "name": "chainId", "type": "uint16" }, { "internalType": "bytes32", "name": "expected", "type": "bytes32" }, { "internalType": "bytes32", "name": "actual", "type": "bytes32" } ], "name": "UnmatchedChainSpoke", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [], "name": "DefaultAdminDelayChangeCanceled", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint48", "name": "newDelay", "type": "uint48" }, { "indexed": false, "internalType": "uint48", "name": "effectSchedule", "type": "uint48" } ], "name": "DefaultAdminDelayChangeScheduled", "type": "event" }, { "anonymous": false, "inputs": [], "name": "DefaultAdminTransferCanceled", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "newAdmin", "type": "address" }, { "indexed": false, "internalType": "uint48", "name": "acceptSchedule", "type": "uint48" } ], "name": "DefaultAdminTransferScheduled", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "variableBorrowInterestIndex", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "depositInterestIndex", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "lastUpdateTimestamp", "type": "uint256" } ], "name": "InterestIndexesUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "variableBorrowInterestRate", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "stableBorrowInterestRate", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "depositInterestRate", "type": "uint256" } ], "name": "InterestRatesUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "previousAdminRole", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "newAdminRole", "type": "bytes32" } ], "name": "RoleAdminChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleGranted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleRevoked", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "inputs": [], "name": "DEFAULT_ADMIN_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "HUB_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "LOAN_MANAGER_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "ORACLE_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "PARAM_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "acceptDefaultAdminTransfer", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" } ], "name": "allowance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "approve", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newAdmin", "type": "address" } ], "name": "beginDefaultAdminTransfer", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "burnFToken", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "cancelDefaultAdminTransfer", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint48", "name": "newDelay", "type": "uint48" } ], "name": "changeDefaultAdminDelay", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "clearTokenFees", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "defaultAdmin", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "defaultAdminDelay", "outputs": [ { "internalType": "uint48", "name": "", "type": "uint48" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "defaultAdminDelayIncreaseWait", "outputs": [ { "internalType": "uint48", "name": "", "type": "uint48" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "flashFee", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "contract IERC3156FlashBorrower", "name": "receiver", "type": "address" }, { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "flashLoan", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "getCapsData", "outputs": [ { "components": [ { "internalType": "uint64", "name": "deposit", "type": "uint64" }, { "internalType": "uint64", "name": "borrow", "type": "uint64" }, { "internalType": "uint64", "name": "stableBorrowPercentage", "type": "uint64" } ], "internalType": "struct HubPoolState.CapsData", "name": "", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "chainId", "type": "uint16" } ], "name": "getChainSpoke", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getConfigData", "outputs": [ { "components": [ { "internalType": "bool", "name": "deprecated", "type": "bool" }, { "internalType": "bool", "name": "stableBorrowSupported", "type": "bool" }, { "internalType": "bool", "name": "canMintFToken", "type": "bool" }, { "internalType": "bool", "name": "flashLoanSupported", "type": "bool" } ], "internalType": "struct HubPoolState.ConfigData", "name": "", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getDepositData", "outputs": [ { "components": [ { "internalType": "uint16", "name": "optimalUtilisationRatio", "type": "uint16" }, { "internalType": "uint256", "name": "totalAmount", "type": "uint256" }, { "internalType": "uint256", "name": "interestRate", "type": "uint256" }, { "internalType": "uint256", "name": "interestIndex", "type": "uint256" } ], "internalType": "struct HubPoolState.DepositData", "name": "", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getFeeData", "outputs": [ { "components": [ { "internalType": "uint32", "name": "flashLoanFee", "type": "uint32" }, { "internalType": "uint32", "name": "retentionRate", "type": "uint32" }, { "internalType": "address", "name": "fTokenFeeRecipient", "type": "address" }, { "internalType": "address", "name": "tokenFeeClaimer", "type": "address" }, { "internalType": "uint256", "name": "totalRetainedAmount", "type": "uint256" }, { "internalType": "bytes32", "name": "tokenFeeRecipient", "type": "bytes32" } ], "internalType": "struct HubPoolState.FeeData", "name": "", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getLastUpdateTimestamp", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getOracleManager", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getPoolId", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" } ], "name": "getRoleAdmin", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "contract IBridgeRouter", "name": "bridgeRouter", "type": "address" }, { "internalType": "uint16", "name": "adapterId", "type": "uint16" }, { "internalType": "uint256", "name": "gasLimit", "type": "uint256" }, { "internalType": "bytes32", "name": "accountId", "type": "bytes32" }, { "internalType": "uint16", "name": "chainId", "type": "uint16" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "bytes32", "name": "recipient", "type": "bytes32" } ], "name": "getSendTokenMessage", "outputs": [ { "components": [ { "components": [ { "internalType": "uint16", "name": "adapterId", "type": "uint16" }, { "internalType": "uint16", "name": "returnAdapterId", "type": "uint16" }, { "internalType": "uint256", "name": "receiverValue", "type": "uint256" }, { "internalType": "uint256", "name": "gasLimit", "type": "uint256" }, { "internalType": "uint256", "name": "returnGasLimit", "type": "uint256" } ], "internalType": "struct Messages.MessageParams", "name": "params", "type": "tuple" }, { "internalType": "bytes32", "name": "sender", "type": "bytes32" }, { "internalType": "uint16", "name": "destinationChainId", "type": "uint16" }, { "internalType": "bytes32", "name": "handler", "type": "bytes32" }, { "internalType": "bytes", "name": "payload", "type": "bytes" }, { "internalType": "uint64", "name": "finalityLevel", "type": "uint64" }, { "internalType": "bytes", "name": "extraArgs", "type": "bytes" } ], "internalType": "struct Messages.MessageToSend", "name": "", "type": "tuple" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "getStableBorrowData", "outputs": [ { "components": [ { "internalType": "uint32", "name": "sr0", "type": "uint32" }, { "internalType": "uint32", "name": "sr1", "type": "uint32" }, { "internalType": "uint32", "name": "sr2", "type": "uint32" }, { "internalType": "uint32", "name": "sr3", "type": "uint32" }, { "internalType": "uint16", "name": "optimalStableToTotalDebtRatio", "type": "uint16" }, { "internalType": "uint16", "name": "rebalanceUpUtilisationRatio", "type": "uint16" }, { "internalType": "uint16", "name": "rebalanceUpDepositInterestRate", "type": "uint16" }, { "internalType": "uint16", "name": "rebalanceDownDelta", "type": "uint16" }, { "internalType": "uint256", "name": "totalAmount", "type": "uint256" }, { "internalType": "uint256", "name": "interestRate", "type": "uint256" }, { "internalType": "uint256", "name": "averageInterestRate", "type": "uint256" } ], "internalType": "struct HubPoolState.StableBorrowData", "name": "", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getTokenFeeClaimer", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getTokenFeeRecipient", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getUpdatedDepositInterestIndex", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getUpdatedVariableBorrowInterestIndex", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getVariableBorrowData", "outputs": [ { "components": [ { "internalType": "uint32", "name": "vr0", "type": "uint32" }, { "internalType": "uint32", "name": "vr1", "type": "uint32" }, { "internalType": "uint32", "name": "vr2", "type": "uint32" }, { "internalType": "uint256", "name": "totalAmount", "type": "uint256" }, { "internalType": "uint256", "name": "interestRate", "type": "uint256" }, { "internalType": "uint256", "name": "interestIndex", "type": "uint256" } ], "internalType": "struct HubPoolState.VariableBorrowData", "name": "", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "grantRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "hasRole", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" } ], "name": "maxFlashLoan", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "mintFToken", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "mintFTokenForFeeRecipient", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "pendingDefaultAdmin", "outputs": [ { "internalType": "address", "name": "newAdmin", "type": "address" }, { "internalType": "uint48", "name": "schedule", "type": "uint48" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "pendingDefaultAdminDelay", "outputs": [ { "internalType": "uint48", "name": "newDelay", "type": "uint48" }, { "internalType": "uint48", "name": "schedule", "type": "uint48" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "poolId", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "uint256", "name": "maxStableRate", "type": "uint256" } ], "name": "preparePoolForBorrow", "outputs": [ { "components": [ { "internalType": "uint256", "name": "variableInterestIndex", "type": "uint256" }, { "internalType": "uint256", "name": "stableInterestRate", "type": "uint256" } ], "internalType": "struct DataTypes.BorrowPoolParams", "name": "borrowPoolParams", "type": "tuple" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "preparePoolForRebalanceDown", "outputs": [ { "components": [ { "internalType": "uint256", "name": "variableInterestIndex", "type": "uint256" }, { "internalType": "uint256", "name": "stableInterestRate", "type": "uint256" }, { "internalType": "uint256", "name": "threshold", "type": "uint256" } ], "internalType": "struct DataTypes.RebalanceDownPoolParams", "name": "rebalanceDownPoolParams", "type": "tuple" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "preparePoolForRebalanceUp", "outputs": [ { "components": [ { "internalType": "uint256", "name": "variableInterestIndex", "type": "uint256" }, { "internalType": "uint256", "name": "stableInterestRate", "type": "uint256" } ], "internalType": "struct DataTypes.BorrowPoolParams", "name": "borrowPoolParams", "type": "tuple" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "preparePoolForRepay", "outputs": [ { "components": [ { "internalType": "uint256", "name": "variableInterestIndex", "type": "uint256" }, { "internalType": "uint256", "name": "stableInterestRate", "type": "uint256" } ], "internalType": "struct DataTypes.BorrowPoolParams", "name": "", "type": "tuple" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "uint256", "name": "maxStableRate", "type": "uint256" } ], "name": "preparePoolForSwitchBorrowType", "outputs": [ { "components": [ { "internalType": "uint256", "name": "variableInterestIndex", "type": "uint256" }, { "internalType": "uint256", "name": "stableInterestRate", "type": "uint256" } ], "internalType": "struct DataTypes.BorrowPoolParams", "name": "borrowPoolParams", "type": "tuple" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "bool", "name": "isFAmount", "type": "bool" } ], "name": "preparePoolForWithdraw", "outputs": [ { "components": [ { "internalType": "uint256", "name": "underlingAmount", "type": "uint256" }, { "internalType": "uint256", "name": "fAmount", "type": "uint256" } ], "internalType": "struct DataTypes.WithdrawPoolParams", "name": "withdrawPoolParams", "type": "tuple" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "preparePoolForWithdrawFToken", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "renounceRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "revokeRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "rollbackDefaultAdminDelay", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "interfaceId", "type": "bytes4" } ], "name": "supportsInterface", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "uint64", "name": "deposit", "type": "uint64" }, { "internalType": "uint64", "name": "borrow", "type": "uint64" }, { "internalType": "uint64", "name": "stableBorrowPercentage", "type": "uint64" } ], "internalType": "struct HubPoolState.CapsData", "name": "capsData", "type": "tuple" } ], "name": "updateCapsData", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "bool", "name": "deprecated", "type": "bool" }, { "internalType": "bool", "name": "stableBorrowSupported", "type": "bool" }, { "internalType": "bool", "name": "canMintFToken", "type": "bool" }, { "internalType": "bool", "name": "flashLoanSupported", "type": "bool" } ], "internalType": "struct HubPoolState.ConfigData", "name": "configData", "type": "tuple" } ], "name": "updateConfigData", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "optimalUtilisationRatio", "type": "uint16" } ], "name": "updateDepositData", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint32", "name": "flashLoanFee", "type": "uint32" }, { "internalType": "uint32", "name": "retentionRate", "type": "uint32" }, { "internalType": "address", "name": "fTokenFeeRecipient", "type": "address" }, { "internalType": "address", "name": "tokenFeeClaimer", "type": "address" }, { "internalType": "bytes32", "name": "tokenFeeRecipient", "type": "bytes32" } ], "name": "updateFeeData", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "updateInterestIndexes", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "contract IOracleManager", "name": "newOracleManager", "type": "address" } ], "name": "updateOracleManager", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "oldBorrowAmount", "type": "uint256" }, { "internalType": "uint256", "name": "additionalBorrowAmount", "type": "uint256" }, { "internalType": "uint256", "name": "oldBorrowStableRate", "type": "uint256" }, { "internalType": "uint256", "name": "newBorrowStableRate", "type": "uint256" }, { "internalType": "bool", "name": "isStable", "type": "bool" } ], "name": "updatePoolWithBorrow", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "updatePoolWithDeposit", "outputs": [ { "components": [ { "internalType": "uint256", "name": "fAmount", "type": "uint256" }, { "internalType": "uint256", "name": "depositInterestIndex", "type": "uint256" }, { "components": [ { "internalType": "uint256", "name": "price", "type": "uint256" }, { "internalType": "uint8", "name": "decimals", "type": "uint8" } ], "internalType": "struct DataTypes.PriceFeed", "name": "priceFeed", "type": "tuple" } ], "internalType": "struct DataTypes.DepositPoolParams", "name": "", "type": "tuple" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "repaidBorrowAmount", "type": "uint256" }, { "internalType": "uint256", "name": "violatorLoanStableRate", "type": "uint256" }, { "internalType": "uint256", "name": "liquidatorOldBorrowAmount", "type": "uint256" }, { "internalType": "uint256", "name": "liquidatorOldLoanStableRate", "type": "uint256" }, { "internalType": "uint256", "name": "liquidatorNewLoanStableRate", "type": "uint256" } ], "name": "updatePoolWithLiquidation", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "uint256", "name": "oldLoanStableInterestRate", "type": "uint256" } ], "name": "updatePoolWithRebalance", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "principalPaid", "type": "uint256" }, { "internalType": "uint256", "name": "interestPaid", "type": "uint256" }, { "internalType": "uint256", "name": "loanStableRate", "type": "uint256" }, { "internalType": "uint256", "name": "excessAmount", "type": "uint256" } ], "name": "updatePoolWithRepay", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "principalPaid", "type": "uint256" }, { "internalType": "uint256", "name": "interestPaid", "type": "uint256" }, { "internalType": "uint256", "name": "loanStableRate", "type": "uint256" } ], "name": "updatePoolWithRepayWithCollateral", "outputs": [ { "components": [ { "internalType": "uint256", "name": "fAmount", "type": "uint256" } ], "internalType": "struct DataTypes.RepayWithCollateralPoolParams", "name": "", "type": "tuple" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "loanBorrowAmount", "type": "uint256" }, { "internalType": "bool", "name": "switchingToStable", "type": "bool" }, { "internalType": "uint256", "name": "oldLoanBorrowStableRate", "type": "uint256" } ], "name": "updatePoolWithSwitchBorrowType", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "underlyingAmount", "type": "uint256" } ], "name": "updatePoolWithWithdraw", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint32", "name": "sr0", "type": "uint32" }, { "internalType": "uint32", "name": "sr1", "type": "uint32" }, { "internalType": "uint32", "name": "sr2", "type": "uint32" }, { "internalType": "uint32", "name": "sr3", "type": "uint32" }, { "internalType": "uint16", "name": "optimalStableToTotalDebtRatio", "type": "uint16" }, { "internalType": "uint16", "name": "rebalanceUpUtilisationRatio", "type": "uint16" }, { "internalType": "uint16", "name": "rebalanceUpDepositInterestRate", "type": "uint16" }, { "internalType": "uint16", "name": "rebalanceDownDelta", "type": "uint16" } ], "name": "updateStableBorrowData", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint32", "name": "vr0", "type": "uint32" }, { "internalType": "uint32", "name": "vr1", "type": "uint32" }, { "internalType": "uint32", "name": "vr2", "type": "uint32" } ], "name": "updateVariableBorrowData", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "chainId", "type": "uint16" }, { "internalType": "bytes32", "name": "source", "type": "bytes32" } ], "name": "verifyReceiveToken", "outputs": [], "stateMutability": "view", "type": "function" } ]
60a06040523480156200001157600080fd5b50604051620062e4380380620062e483398101604081905262000034916200161d565b60016000558a8a8a8a8a8a8a8a8a84848a85858562015180846001600160a01b0381166200007d57604051636116401160e11b8152600060048201526024015b60405180910390fd5b600280546001600160d01b0316600160d01b65ffffffffffff851602179055620000a9600082620006f0565b5050508260ff1660808160ff1681525050600082602001516080018181525050600082604001516020018181525050670de0b6b3a764000082604001516060018181525050600082606001516060018181525050670de0b6b3a7640000826060015160a00181815250506000826080015161010001818152505060008260800151610140018181525050428260000181815250508160056000820151816000015560208201518160010160008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548163ffffffff021916908363ffffffff16021790555060408201518160000160086101000a8154816001600160a01b0302191690836001600160a01b0316021790555060608201518160010160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506080820151816002015560a08201518160030155505060408201518160050160008201518160000160006101000a81548161ffff021916908361ffff160217905550602082015181600101556040820151816002015560608201518160030155505060608201518160090160008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548163ffffffff021916908363ffffffff16021790555060408201518160000160086101000a81548163ffffffff021916908363ffffffff160217905550606082015181600101556080820151816002015560a082015181600301555050608082015181600d0160008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548163ffffffff021916908363ffffffff16021790555060408201518160000160086101000a81548163ffffffff021916908363ffffffff160217905550606082015181600001600c6101000a81548163ffffffff021916908363ffffffff16021790555060808201518160000160106101000a81548161ffff021916908361ffff16021790555060a08201518160000160126101000a81548161ffff021916908361ffff16021790555060c08201518160000160146101000a81548161ffff021916908361ffff16021790555060e08201518160000160166101000a81548161ffff021916908361ffff160217905550610100820151816001015561012082015181600201556101408201518160030155505060a08201518160110160008201518160000160006101000a8154816001600160401b0302191690836001600160401b0316021790555060208201518160000160086101000a8154816001600160401b0302191690836001600160401b0316021790555060408201518160000160106101000a8154816001600160401b0302191690836001600160401b03160217905550505060c08201518160120160008201518160000160006101000a81548160ff02191690831515021790555060208201518160000160016101000a81548160ff02191690831515021790555060408201518160000160026101000a81548160ff02191690831515021790555060608201518160000160036101000a81548160ff021916908315150217905550505090505080601860006101000a8154816001600160a01b0302191690836001600160a01b03160217905550620005a66200076660201b60201c565b620005b0620007cd565b620005ba62000820565b620005c462000886565b620005ce620009b7565b620005da6005620009f4565b620006067f3da98603b97a5eace5cf30dd35d7b6fa20c7ff063e690da242da665e55d4940385620006f0565b50620006337f352d05fe3946dbe49277552ba941e744d5a96d9c60bc1ba0ea5f1d3ae000f7c885620006f0565b505050505081601c9081620006499190620017c2565b50601d620006588282620017c2565b5050601e805460ff191660ff891617905550620006967f771d779a0ba6699dcd829c9f00e621a1fb0c21f45877b0e53857ea9ab192b51089620006f0565b50620006c37f5d9aa0bc240d0b6271521ead226b44272d7e3db7a6b7f0486f8ba0a26c565a6d88620006f0565b50505050505050505050620006df828262000bb760201b60201c565b505050505050505050505062001927565b600082620007515760006200070d6003546001600160a01b031690565b6001600160a01b0316146200073557604051631fe1e13d60e11b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0384161790555b6200075d838362000c08565b90505b92915050565b600654620186a063ffffffff9091161115620007955760405163eaf5e56f60e01b815260040160405180910390fd5b600654620f424064010000000090910463ffffffff161115620007cb5760405163c65884df60e01b815260040160405180910390fd5b565b600a5461ffff16600003620007f557604051633a16d4b760e21b815260040160405180910390fd5b600a5461271061ffff90911610620007cb576040516301952e4360e31b815260040160405180910390fd5b600e546305f5e1009063ffffffff6801000000000000000082048116916200085491640100000000820481169116620018a4565b620008609190620018a4565b63ffffffff161115620007cb576040516326a7055f60e21b815260040160405180910390fd5b601254600e546305f5e1009163ffffffff6c010000000000000000000000008204811692680100000000000000008304821692640100000000808204841693620008d8939190910481169116620018a4565b620008e49190620018a4565b620008f09190620018a4565b620008fc9190620018a4565b63ffffffff1611156200092257604051636aed75b560e11b815260040160405180910390fd5b601254612710600160801b90910461ffff1610620009535760405163d027c3d360e01b815260040160405180910390fd5b601254612710600160901b90910461ffff1611156200098557604051637705947960e11b815260040160405180910390fd5b601254612710600160a01b90910461ffff161115620007cb57604051632422078b60e01b815260040160405180910390fd5b601654670de0b6b3a7640000600160801b9091046001600160401b03161115620007cb576040516378578bd760e11b815260040160405180910390fd5b60408051808201909152600e82015460208201819052600a83015480835260009162000a2091620018cb565b9050600062000a3d82856005016001015462000c9e60201b60201c565b6009850154600586015491925063ffffffff640100000000820481169260009262000a849280821692869268010000000000000000900490911690879061ffff1662000ce8565b600d8701546005880154602088015192935060009262000b0f92869263ffffffff8083169364010000000084048216936801000000000000000081048316936c01000000000000000000000000909104909216918b9161ffff9091169062000aed908e62000c9e565b8f600d0160000160109054906101000a900461ffff1662000dc060201b60201c565b9050600062000b548562000b3b89600001518a60200151878d600d016003015462000ef660201b60201c565b60018b0154640100000000900463ffffffff1662000f54565b600b8901849055600f89018390556007890181905560408051858152602081018590529081018290529091507f9f3d2b2e2a767165238ebfd60447e6b7ea1648cf6410c0df533954838f334bab9060600160405180910390a15050505050505050565b61ffff82166000908152600460205260409020541562000bf157604051638c84688560e01b815261ffff8316600482015260240162000074565b61ffff909116600090815260046020526040902055565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff1662000c955760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a450600162000760565b50600062000760565b60008183111562000cc2576040516303b796e960e11b815260040160405180910390fd5b6000821162000cd35760006200075d565b6200075d83670de0b6b3a76400008462000f92565b600062000cf961ffff83166200105c565b831062000d775762000d4961271062000d1761ffff851682620018e1565b62000d4163ffffffff8816620f424062000d3561ffff89166200105c565b62000d41908a620018e1565b919062000f92565b62000d6562000d598789620018a4565b63ffffffff1662001070565b62000d719190620018cb565b62000db6565b62000d9961271061ffff841662000d418663ffffffff8a16620f424062000f92565b62000daa63ffffffff881662001070565b62000db69190620018cb565b9695505050505050565b600062000dd161ffff83166200105c565b83111562000e145762000e0e61271062000df061ffff851682620018e1565b62000d4163ffffffff8a16620f424062000d3561ffff89166200105c565b62000e17565b60005b62000e2661ffff86166200105c565b86111562000e9e5762000e6f61271062000e4561ffff881682620018e1565b62000d4163ffffffff8c16620f424062000e6361ffff8c166200105c565b62000d41908d620018e1565b62000e8c8a62000e808d8f620018a4565b62000d599190620018a4565b62000e989190620018cb565b62000edc565b62000ec061271061ffff871662000d418963ffffffff8e16620f424062000f92565b62000ed062000d598c8e620018a4565b62000edc9190620018cb565b62000ee89190620018cb565b9a9950505050505050505050565b60008062000f058587620018cb565b90506000811162000f1857600062000db6565b62000db6670de0b6b3a76400008262000f3388878462000f92565b62000f488a89670de0b6b3a764000062000f92565b62000d419190620018cb565b600062000f8862000f6f63ffffffff8416620f4240620018e1565b620f424062000d418787670de0b6b3a764000062000f92565b90505b9392505050565b600083830281600019858709828110838203039150508060000362000fce5783828162000fc35762000fc3620018f7565b049250505062000f8b565b80841162000fef5760405163227bc15360e01b815260040160405180910390fd5b6000848688096000868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b600062000760655af3107a4000836200190d565b60006200076064e8d4a51000836200190d565b6001600160a01b03811681146200109957600080fd5b50565b8051620010a98162001083565b919050565b805160ff81168114620010a957600080fd5b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715620010fb57620010fb620010c0565b60405290565b60405160c081016001600160401b0381118282101715620010fb57620010fb620010c0565b60405161016081016001600160401b0381118282101715620010fb57620010fb620010c0565b60405160e081016001600160401b0381118282101715620010fb57620010fb620010c0565b604051601f8201601f191681016001600160401b03811182821017156200119c576200119c620010c0565b604052919050565b600082601f830112620011b657600080fd5b81516001600160401b03811115620011d257620011d2620010c0565b6020620011e8601f8301601f1916820162001171565b8281528582848701011115620011fd57600080fd5b60005b838110156200121d57858101830151828201840152820162001200565b506000928101909101919091529392505050565b805163ffffffff81168114620010a957600080fd5b805161ffff81168114620010a957600080fd5b6000608082840312156200126c57600080fd5b62001276620010d6565b9050620012838262001246565b815260208201516020820152604082015160408201526060820151606082015292915050565b600060c08284031215620012bc57600080fd5b620012c662001101565b9050620012d38262001231565b8152620012e36020830162001231565b6020820152620012f66040830162001231565b6040820152606082015160608201526080820151608082015260a082015160a082015292915050565b600061016082840312156200133357600080fd5b6200133d62001126565b90506200134a8262001231565b81526200135a6020830162001231565b60208201526200136d6040830162001231565b6040820152620013806060830162001231565b6060820152620013936080830162001246565b6080820152620013a660a0830162001246565b60a0820152620013b960c0830162001246565b60c0820152620013cc60e0830162001246565b60e0820152610100828101519082015261012080830151908201526101409182015191810191909152919050565b80516001600160401b0381168114620010a957600080fd5b6000606082840312156200142557600080fd5b604051606081016001600160401b03811182821017156200144a576200144a620010c0565b6040529050806200145b83620013fa565b81526200146b60208401620013fa565b60208201526200147e60408401620013fa565b60408201525092915050565b80518015158114620010a957600080fd5b600060808284031215620014ae57600080fd5b620014b8620010d6565b9050620014c5826200148a565b8152620014d5602083016200148a565b6020820152620014e8604083016200148a565b6040820152620014fb606083016200148a565b606082015292915050565b60008183036104608112156200151b57600080fd5b620015256200114c565b83518152915060c0601f19820112156200153e57600080fd5b506200154962001101565b620015576020840162001231565b8152620015676040840162001231565b602082015260608301516200157c8162001083565b60408201526080830151620015918162001083565b606082015260a083810151608083015260c0840151908201526020820152620015be8360e0840162001259565b6040820152620015d3836101608401620012a9565b6060820152620015e88361022084016200131f565b6080820152620015fd83610380840162001412565b60a082015262001612836103e084016200149b565b60c082015292915050565b60008060008060008060008060008060006105a08c8e0312156200164057600080fd5b6200164b8c6200109c565b9a506200165b60208d016200109c565b99506200166b60408d016200109c565b98506200167b60608d01620010ae565b60808d01519098506001600160401b038111156200169857600080fd5b620016a68e828f01620011a4565b60a08e015190985090506001600160401b03811115620016c557600080fd5b620016d38e828f01620011a4565b965050620016e460c08d01620010ae565b9450620016f58d60e08e0162001506565b9350620017066105408d016200109c565b9250620017176105608d0162001246565b91506105808c015190509295989b509295989b9093969950565b600181811c908216806200174657607f821691505b6020821081036200176757634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620017bd576000816000526020600020601f850160051c81016020861015620017985750805b601f850160051c820191505b81811015620017b957828155600101620017a4565b5050505b505050565b81516001600160401b03811115620017de57620017de620010c0565b620017f681620017ef845462001731565b846200176d565b602080601f8311600181146200182e5760008415620018155750858301515b600019600386901b1c1916600185901b178555620017b9565b600085815260208120601f198616915b828110156200185f578886015182559484019460019091019084016200183e565b50858210156200187e5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b63ffffffff818116838216019080821115620018c457620018c46200188e565b5092915050565b808201808211156200076057620007606200188e565b818103818111156200076057620007606200188e565b634e487b7160e01b600052601260045260246000fd5b80820281158282048414176200076057620007606200188e565b60805161498c6200195860003960008181610790015281816107b90152818161152301526121e1015261498c6000f3fe608060405234801561001057600080fd5b506004361061046a5760003560e01c806381086e8f1161024c578063cc8463c811610146578063dd62ed3e116100c3578063e9e00c7211610087578063e9e00c7214610d9a578063ed7599bc14610dad578063f09c1db714610dc0578063f679ef7114610dd3578063f7078e1514610de657600080fd5b8063dd62ed3e14610d20578063ddd1f53614610d59578063e1e4688214610d6c578063e6f7e7d414610d74578063e91899ef14610d8757600080fd5b8063d4d1e01a1161010a578063d4d1e01a14610cd7578063d547741f14610cea578063d581ec4714610cfd578063d602b9fd14610d05578063d9d98ce414610d0d57600080fd5b8063cc8463c814610c7e578063cefc142914610c86578063cefe914214610c8e578063cf6eefb714610ca1578063d30588aa14610ccf57600080fd5b806395d89b41116101d4578063a9059cbb11610198578063a9059cbb14610c15578063b01ceccd14610c28578063ba08062214610c39578063bccaf92d14610c41578063c7b08fd014610c5457600080fd5b806395d89b4114610ba6578063988dc47c14610bae57806399dac98114610bbf578063a1eda53c14610be6578063a217fddf14610c0d57600080fd5b80638da5cb5b1161021b5780638da5cb5b14610a5b5780639109c94314610a6357806391d1485414610b6d57806392daf33f14610b8057806394efb9ce14610b9357600080fd5b806381086e8f1461095557806384c403761461097757806384ef8ffc1461098a5780638b15605b146109af57600080fd5b806334a4b61211610368578063525b9fde116102e55780636c9b0930116102a95780636c9b09301461086c5780636cc29fc71461087457806370a082311461087c57806377c6e1d4146108a55780637a92eebb146108c557600080fd5b8063525b9fde1461080b5780635cffe9de14610820578063613255ab14610833578063634e93da14610846578063649a5ec71461085957600080fd5b806338fff2d01161032c57806338fff2d01461078e5780633e0dc34e146107b4578063437b8c3d146107db57806348c8c5e0146107f057806351b1096e1461080357600080fd5b806334a4b612146106f6578063362e478a1461070957806336568abe1461071c57806336bce12e1461072f57806338a421591461074f57600080fd5b80631766ddbc116103f6578063291eb40c116103ba578063291eb40c1461068f5780632f2ff15d146106a4578063313ce567146106b757806333a595e4146106d057806333cf77c5146106e357600080fd5b80631766ddbc1461054857806318160ddd1461055b57806323b872dd14610563578063248a9ca314610576578063256a49351461059a57600080fd5b806307e2cea51161043d57806307e2cea5146104dd578063095ea7b3146105125780630aa6220b146105255780630ca0bb7f1461052d5780630dc2cf941461054057600080fd5b806301ffc9a71461046f578063022d63fb1461049757806302f6a7c5146104b357806306fdde03146104c8575b600080fd5b61048261047d366004613c59565b610ec4565b60405190151581526020015b60405180910390f35b620697805b60405165ffffffffffff909116815260200161048e565b6104c66104c1366004613c9a565b610eef565b005b6104d0610f38565b60405161048e9190613d05565b6105047f352d05fe3946dbe49277552ba941e744d5a96d9c60bc1ba0ea5f1d3ae000f7c881565b60405190815260200161048e565b610482610520366004613d2d565b610fca565b6104c6610fe2565b6104c661053b366004613dd1565b610ff8565b600954610504565b6104c6610556366004613e5c565b611076565b601b54610504565b610482610571366004613ea5565b611130565b610504610584366004613ee6565b6000908152600160208190526040909120015490565b61062b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152506040805160c08101825260065463ffffffff8082168352600160201b82041660208301526001600160a01b03600160401b9091048116928201929092526007549091166060820152600854608082015260095460a082015290565b60405161048e9190600060c08201905063ffffffff80845116835280602085015116602084015250604083015160018060a01b03808216604085015280606086015116606085015250506080830151608083015260a083015160a083015292915050565b610697611156565b60405161048e9190613eff565b6104c66106b2366004613f16565b61120e565b601e5460ff165b60405160ff909116815260200161048e565b6104c66106de366004613f5a565b611236565b6104c66106f1366004613ee6565b6112dc565b6104c6610704366004613fba565b611371565b6104c6610717366004613fef565b6113be565b6104c661072a366004613f16565b61143b565b61074261073d366004613ee6565b6114e7565b60405161048e919061403d565b610757611631565b60405161048e9190815161ffff16815260208083015190820152604080830151908201526060918201519181019190915260800190565b7f00000000000000000000000000000000000000000000000000000000000000006106be565b6106be7f000000000000000000000000000000000000000000000000000000000000000081565b61050460008051602061491783398151915281565b6104c66107fe366004613ee6565b611691565b6104c66116ce565b61050460008051602061493783398151915281565b61048261082e366004614072565b61175b565b610504610841366004613fba565b6118e4565b6104c6610854366004613fba565b611908565b6104c6610867366004614111565b61191c565b610504611930565b6106976119d8565b61050461088a366004613fba565b6001600160a01b031660009081526019602052604090205490565b6108b86108b3366004614139565b611a44565b60405161048e91906141a5565b6109226040805160608101825260008082526020820181905291810191909152506040805160608101825260165467ffffffffffffffff8082168352600160401b820481166020840152600160801b909104169181019190915290565b60408051825167ffffffffffffffff9081168252602080850151821690830152928201519092169082015260600161048e565b610968610963366004614266565b611bcd565b6040519051815260200161048e565b6104c6610985366004614292565b611c99565b6003546001600160a01b03165b6040516001600160a01b03909116815260200161048e565b610a20604080516080810182526000808252602082018190529181018290526060810191909152506040805160808101825260175460ff8082161515835261010082048116151560208401526201000082048116151593830193909352630100000090049091161515606082015290565b60405161048e919081511515815260208083015115159082015260408083015115159082015260609182015115159181019190915260800190565b610997611d14565b610b606040805161016081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081018290526101008101829052610120810182905261014081019190915250604080516101608101825260125463ffffffff8082168352600160201b820481166020840152600160401b8204811693830193909352600160601b8104909216606082015261ffff600160801b830481166080830152600160901b8304811660a0830152600160a01b8304811660c0830152600160b01b90920490911660e082015260135461010082015260145461012082015260155461014082015290565b60405161048e91906142cd565b610482610b7b366004613f16565b611d2d565b610697610b8e3660046143a4565b611d58565b610504610ba1366004613c9a565b611e21565b6104d0611e5b565b6007546001600160a01b0316610997565b6105047f771d779a0ba6699dcd829c9f00e621a1fb0c21f45877b0e53857ea9ab192b51081565b610bee611e6a565b6040805165ffffffffffff93841681529290911660208301520161048e565b610504600081565b610482610c23366004613d2d565b611ebe565b6018546001600160a01b0316610997565b610504611ecc565b6104c6610c4f3660046143c6565b611f44565b610c5c611f8a565b604080518251815260208084015190820152918101519082015260600161048e565b61049c612042565b6104c66120a1565b610697610c9c3660046143e2565b6120e1565b610ca961215a565b604080516001600160a01b03909316835265ffffffffffff90911660208301520161048e565b6104c661217b565b610697610ce53660046143a4565b612199565b6104c6610cf8366004613f16565b612301565b610504612329565b6104c6612364565b610504610d1b366004613d2d565b612377565b610504610d2e36600461440e565b6001600160a01b039182166000908152601a6020908152604080832093909416825291909152205490565b6104c6610d6736600461443c565b6123b7565b600554610504565b6104c6610d8236600461447f565b612436565b6104c6610d953660046144b1565b6124e6565b6104c6610da8366004613d2d565b61264d565b6104c6610dbb366004613d2d565b612681565b6104c6610dce3660046143a4565b6126ab565b6104c6610de1366004614548565b612746565b610e6c6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152506040805160c081018252600e5463ffffffff8082168352600160201b820481166020840152600160401b9091041691810191909152600f546060820152601054608082015260115460a082015290565b60405161048e9190600060c08201905063ffffffff80845116835280602085015116602084015280604085015116604084015250606083015160608301526080830151608083015260a083015160a083015292915050565b60006001600160e01b031982166318a4c3c360e11b1480610ee95750610ee9826127e9565b92915050565b600080516020614917833981519152610f078161281e565b610f116005612828565b600a805461ffff191661ffff8416179055610f2a612949565b610f34600561299a565b5050565b6060601c8054610f479061457d565b80601f0160208091040260200160405190810160405280929190818152602001828054610f739061457d565b8015610fc05780601f10610f9557610100808354040283529160200191610fc0565b820191906000526020600020905b815481529060010190602001808311610fa357829003601f168201915b5050505050905090565b600033610fd8818585612b1a565b5060019392505050565b6000610fed8161281e565b610ff5612b27565b50565b6000805160206149178339815191526110108161281e565b508051601780546020840151604085015160609095015161ffff1990921693151561ff00191693909317610100931515939093029290921763ffff00001916620100009315159390930263ff000000191692909217630100000091151591909102179055565b60008051602061493783398151915261108e8161281e565b611096612b32565b6040516369c8361d60e01b8152600560048201526024810187905260448101869052606481018590526084810184905282151560a482015273e3b0e4db870aa58a24f87d895c62d3dc5cd05883906369c8361d9060c4015b60006040518083038186803b15801561110657600080fd5b505af415801561111a573d6000803e3d6000fd5b505050506111286001600055565b505050505050565b60003361113e858285612b5c565b611149858585612bd4565b60019150505b9392505050565b60408051808201909152600080825260208201526000805160206149378339815191526111828161281e565b61118a612b32565b604051630e42859760e21b81526005600482015273e3b0e4db870aa58a24f87d895c62d3dc5cd058839063390a165c906024015b6040805180830381865af41580156111da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111fe91906145e1565b915061120a6001600055565b5090565b8161122c57604051631fe1e13d60e11b815260040160405180910390fd5b610f348282612c33565b60008051602061491783398151915261124e8161281e565b6112586005612828565b600680546001600160a01b03808716600160401b0268010000000000000000600160e01b031963ffffffff8a8116600160201b0267ffffffffffffffff19909516908c1617939093179290921691909117909155600780549185166001600160a01b031990921691909117905560098290556112d2612c59565b611128600561299a565b6000805160206149378339815191526112f48161281e565b6112fc612b32565b60405163507a8edb60e11b8152600560048201526024810183905273e3b0e4db870aa58a24f87d895c62d3dc5cd058839063a0f51db69060440160006040518083038186803b15801561134e57600080fd5b505af4158015611362573d6000803e3d6000fd5b505050505b610f346001600055565b7f352d05fe3946dbe49277552ba941e744d5a96d9c60bc1ba0ea5f1d3ae000f7c861139b8161281e565b50601880546001600160a01b0319166001600160a01b0392909216919091179055565b6000805160206149178339815191526113d68161281e565b8151601680546020850151604086015167ffffffffffffffff908116600160801b0267ffffffffffffffff60801b19928216600160401b026fffffffffffffffffffffffffffffffff1990941691909516179190911716919091179055610f34612cbb565b8115801561145657506003546001600160a01b038281169116145b156114dd5760008061146661215a565b90925090506001600160a01b038216151580611488575065ffffffffffff8116155b8061149b57504265ffffffffffff821610155b156114c8576040516319ca5ebb60e01b815265ffffffffffff821660048201526024015b60405180910390fd5b50506002805465ffffffffffff60a01b191690555b610f348282612cf8565b6114ef613c1b565b6000805160206149378339815191526115078161281e565b61150f612b32565b60185460405163e206f7e360e01b815260ff7f00000000000000000000000000000000000000000000000000000000000000001660048201526000916001600160a01b03169063e206f7e3906024016040805180830381865afa15801561157a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061159e919061463c565b60405163e7fca01d60e01b815290915073e3b0e4db870aa58a24f87d895c62d3dc5cd058839063e7fca01d906115dd9060059088908690600401614658565b608060405180830381865af41580156115fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061161e919061467e565b92505061162b6001600055565b50919050565b6116606040518060800160405280600061ffff1681526020016000815260200160008152602001600081525090565b5060408051608081018252600a5461ffff168152600b546020820152600c5491810191909152600d54606082015290565b6000805160206149378339815191526116a98161281e565b6116b1612b32565b60065461136790600160401b90046001600160a01b031683612d2b565b6000805160206149378339815191526116e68161281e565b6116ee612b32565b6040516327355a5d60e01b81526005600482015273e3b0e4db870aa58a24f87d895c62d3dc5cd05883906327355a5d9060240160006040518083038186803b15801561173957600080fd5b505af415801561174d573d6000803e3d6000fd5b50505050610ff56001600055565b600080611767866118e4565b90508085111561178d5760405163fd9a760960e01b8152600481018290526024016114bf565b60006117998787612377565b90506117a58887612d2b565b6040516323e30c8b60e01b81527f439148f0bbc682ca079e46d6e2c2f0c1e3b820f1a291b069d8882abf8cf18dd9906001600160a01b038a16906323e30c8b906117fd9033908c908c9088908d908d906004016146b3565b6020604051808303816000875af115801561181c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611840919061470f565b146118685760405162678c5b60e81b81526001600160a01b03891660048201526024016114bf565b600654600160401b90046001600160a01b031661188f893061188a858b61473e565b612b5c565b8115806118a357506001600160a01b038116155b156118c0576118bb896118b6848a61473e565b612d61565b6118d5565b6118ca8988612d61565b6118d5898284612bd4565b50600198975050505050505050565b6017546000906301000000900460ff166118ff576000610ee9565b610ee982612d97565b60006119138161281e565b610f3482612dbf565b60006119278161281e565b610f3482612e32565b60007f771d779a0ba6699dcd829c9f00e621a1fb0c21f45877b0e53857ea9ab192b51061195c8161281e565b611964612b32565b60405163db57b35d60e01b81526005600482015273e3b0e4db870aa58a24f87d895c62d3dc5cd058839063db57b35d90602401602060405180830381865af41580156119b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111fe919061470f565b6040805180820190915260008082526020820152600080516020614937833981519152611a048161281e565b611a0c612b32565b6040516316a5a99560e31b81526005600482015273e3b0e4db870aa58a24f87d895c62d3dc5cd058839063b52d4ca8906024016111be565b6040805161018081018252600060e08201818152610100830182905261012083018290526101408301829052610160830182905282526020820181905291810182905260608082018390526080820181905260a082019290925260c08101919091527f771d779a0ba6699dcd829c9f00e621a1fb0c21f45877b0e53857ea9ab192b510611ad08161281e565b611ad8612b32565b6000611ae386611e21565b6040805160a08101825261ffff8c16815260006020808301829052828401829052606083018d90526080830182905283518082018552918252835160e08101909452828452939450909290919081013381526020018961ffff168152602001848152602001611ba36040518060800160405280601280811115611b6857611b68614751565b81526020018d81526020018a81526020018b604051602001611b8c91815260200190565b604051602081830303815290604052815250612ea2565b8152600160208201526040019190915293505050611bc16001600055565b50979650505050505050565b604080516020810190915260008152600080516020614937833981519152611bf48161281e565b611bfc612b32565b604051632a7132f960e01b81526005600482015260248101869052604481018590526064810184905273e3b0e4db870aa58a24f87d895c62d3dc5cd0588390632a7132f990608401602060405180830381865af4158015611c61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c859190614767565b9150611c916001600055565b509392505050565b600080516020614937833981519152611cb18161281e565b611cb9612b32565b60405163179d264d60e01b8152600560048201526024810187905260448101869052606481018590526084810184905260a4810183905273e3b0e4db870aa58a24f87d895c62d3dc5cd058839063179d264d9060c4016110ee565b6000611d286003546001600160a01b031690565b905090565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6040805180820190915260008082526020820152600080516020614937833981519152611d848161281e565b611d8c612b32565b6040516362792ff360e11b815260056004820152602481018590526044810184905273e3b0e4db870aa58a24f87d895c62d3dc5cd058839063c4f25fe6906064015b6040805180830381865af4158015611dea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e0e91906145e1565b9150611e1a6001600055565b5092915050565b61ffff8116600090815260046020526040812054808203610ee95760405163aabd4b7760e01b815261ffff841660048201526024016114bf565b6060601d8054610f479061457d565b600354600090600160d01b900465ffffffffffff168015158015611e9657504265ffffffffffff821610155b611ea257600080611eb6565b600354600160a01b900465ffffffffffff16815b915091509091565b600033610fd8818585612bd4565b60405163347bdd6560e01b81526005600482015260009073e3b0e4db870aa58a24f87d895c62d3dc5cd058839063347bdd65906024015b602060405180830381865af4158015611f20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d28919061470f565b6000611f4f83611e21565b9050808214611f855760405163ca4d290b60e01b815261ffff8416600482015260248101839052604481018290526064016114bf565b505050565b611fae60405180606001604052806000815260200160008152602001600081525090565b600080516020614937833981519152611fc68161281e565b611fce612b32565b60405163242253f960e11b81526005600482015273e3b0e4db870aa58a24f87d895c62d3dc5cd0588390634844a7f290602401606060405180830381865af415801561201e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111fe91906147b7565b600354600090600160d01b900465ffffffffffff16801515801561206d57504265ffffffffffff8216105b61208857600254600160d01b900465ffffffffffff1661209b565b600354600160a01b900465ffffffffffff165b91505090565b60006120ab61215a565b509050336001600160a01b038216146120d957604051636116401160e11b81523360048201526024016114bf565b610ff5612ef0565b604080518082019091526000808252602082015260008051602061493783398151915261210d8161281e565b612115612b32565b604051627068a760e01b81526005600482015260248101859052831515604482015273e3b0e4db870aa58a24f87d895c62d3dc5cd0588390627068a790606401611dce565b6002546001600160a01b03811691600160a01b90910465ffffffffffff1690565b612183612b32565b61218d6005612828565b6121976001600055565b565b60408051808201909152600080825260208201526000805160206149378339815191526121c58161281e565b6121cd612b32565b60185460405163e206f7e360e01b815260ff7f00000000000000000000000000000000000000000000000000000000000000001660048201526000916001600160a01b03169063e206f7e3906024016040805180830381865afa158015612238573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061225c919061463c565b60405163346980bf60e01b8152600560048201526024810187905281516044820152602082015160ff1660648201526084810186905290915073e3b0e4db870aa58a24f87d895c62d3dc5cd058839063346980bf9060a4016040805180830381865af41580156122d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122f491906145e1565b925050611e1a6001600055565b8161231f57604051631fe1e13d60e11b815260040160405180910390fd5b610f348282612f89565b60405163d805587960e01b81526005600482015260009073e3b0e4db870aa58a24f87d895c62d3dc5cd058839063d805587990602401611f03565b600061236f8161281e565b610ff5612faf565b60006001600160a01b03831630146123ad57604051635ad3edc960e11b81526001600160a01b03841660048201526024016114bf565b61114f8383612fba565b6000805160206149178339815191526123cf8161281e565b6123d96005612828565b600e805463ffffffff848116600160401b026bffffffff000000000000000019878316600160201b0267ffffffffffffffff19909416928916929092179290921716179055612426612fd1565b612430600561299a565b50505050565b60008051602061493783398151915261244e8161281e565b612456612b32565b604051639a14165f60e01b8152600560048201526024810186905260448101859052606481018490526084810183905273e3b0e4db870aa58a24f87d895c62d3dc5cd0588390639a14165f9060a40160006040518083038186803b1580156124bd57600080fd5b505af41580156124d1573d6000803e3d6000fd5b505050506124df6001600055565b5050505050565b6000805160206149178339815191526124fe8161281e565b6125086005612828565b886005600d0160000160006101000a81548163ffffffff021916908363ffffffff160217905550876005600d0160000160046101000a81548163ffffffff021916908363ffffffff160217905550866005600d0160000160086101000a81548163ffffffff021916908363ffffffff160217905550856005600d01600001600c6101000a81548163ffffffff021916908363ffffffff160217905550846005600d0160000160106101000a81548161ffff021916908361ffff160217905550836005600d0160000160126101000a81548161ffff021916908361ffff160217905550826005600d0160000160146101000a81548161ffff021916908361ffff160217905550816005600d0160000160166101000a81548161ffff021916908361ffff16021790555061263861302c565b612642600561299a565b505050505050505050565b6000805160206149378339815191526126658161281e565b61266d612b32565b6126778383612d2b565b611f856001600055565b6000805160206149378339815191526126998161281e565b6126a1612b32565b6126778383612d61565b6000805160206149378339815191526126c38161281e565b6126cb612b32565b604051634aa56bd560e01b815260056004820152602481018490526044810183905273e3b0e4db870aa58a24f87d895c62d3dc5cd0588390634aa56bd59060640160006040518083038186803b15801561272457600080fd5b505af4158015612738573d6000803e3d6000fd5b50505050611f856001600055565b60008051602061493783398151915261275e8161281e565b612766612b32565b604051636a3dc43360e11b8152600560048201526024810185905283151560448201526064810183905273e3b0e4db870aa58a24f87d895c62d3dc5cd058839063d47b88669060840160006040518083038186803b1580156127c757600080fd5b505af41580156127db573d6000803e3d6000fd5b505050506124306001600055565b60006001600160e01b03198216637965db0b60e01b1480610ee957506301ffc9a760e01b6001600160e01b0319831614610ee9565b610ff58133613142565b60408051808201909152600e8201546020820152600a8201548152815460009061285290426147f3565b905060008260200151836000015161286a919061473e565b600b850154600386015485516020870151601089015494955092936128b193869261289992909190879061317b565b6001890154600160201b900463ffffffff16876131e1565b6003860155600c8501546000906128ca9083908661322b565b905060006128e78760050160020154886005016003015487613272565b600c880183905560088801819055428089556040805185815260208101849052908101829052919250907f182609dc2587bbc5673ad1243ef5656ef383ced0d15786b993cda2b67fbdbbe8906060015b60405180910390a15050505050505050565b600a5461ffff1660000361297057604051633a16d4b760e21b815260040160405180910390fd5b600a5461271061ffff90911610612197576040516301952e4360e31b815260040160405180910390fd5b60408051808201909152600e82015460208201819052600a8301548083526000916129c49161473e565b905060006129d9828560050160010154613298565b6009850154600586015491925063ffffffff600160201b8204811692600092612a1892808216928692600160401b900490911690879061ffff166132dd565b600d87015460058801546020880151929350600092612a8a92869263ffffffff80831693600160201b8404821693600160401b8104831693600160601b909104909216918b9161ffff90911690612a6f908e613298565b8f600d0160000160109054906101000a900461ffff1661338e565b90506000612ac485612aad89600001518a60200151878d600d016003015461317b565b60018b0154600160201b900463ffffffff166134a1565b600b8901849055600f89018390556007890181905560408051858152602081018590529081018290529091507f9f3d2b2e2a767165238ebfd60447e6b7ea1648cf6410c0df533954838f334bab90606001612937565b611f8583838360016134d0565b6121976000806135a5565b600260005403612b5557604051633ee5aeb560e01b815260040160405180910390fd5b6002600055565b6001600160a01b038381166000908152601a602090815260408083209386168352929052205460001981146124305781811015612bc557604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064016114bf565b612430848484840360006134d0565b6001600160a01b038316612bfe57604051634b637e8f60e11b8152600060048201526024016114bf565b6001600160a01b038216612c285760405163ec442f0560e01b8152600060048201526024016114bf565b611f85838383613665565b60008281526001602081905260409091200154612c4f8161281e565b612430838361378f565b600654620186a063ffffffff9091161115612c875760405163eaf5e56f60e01b815260040160405180910390fd5b600654620f4240600160201b90910463ffffffff1611156121975760405163c65884df60e01b815260040160405180910390fd5b601654670de0b6b3a7640000600160801b90910467ffffffffffffffff161115612197576040516378578bd760e11b815260040160405180910390fd5b6001600160a01b0381163314612d215760405163334bd91960e11b815260040160405180910390fd5b611f8582826137f7565b6001600160a01b038216612d555760405163ec442f0560e01b8152600060048201526024016114bf565b610f3460008383613665565b6001600160a01b038216612d8b57604051634b637e8f60e11b8152600060048201526024016114bf565b610f3482600083613665565b60006001600160a01b0382163014612db0576000610ee9565b601b54610ee9906000196147f3565b6000612dc9612042565b612dd242613834565b612ddc9190614806565b9050612de88282613867565b60405165ffffffffffff821681526001600160a01b038316907f3377dc44241e779dd06afab5b788a35ca5f3b778836e2990bdb26a2a4b2e5ed69060200160405180910390a25050565b6000612e3d826138e6565b612e4642613834565b612e509190614806565b9050612e5c82826135a5565b6040805165ffffffffffff8085168252831660208201527ff1038c18cf84a56e432fdbfaf746924b7ea511dfe03a6506a0ceba4888788d9b910160405180910390a15050565b80516060906012811115612eb857612eb8614751565b826020015183604001518460600151604051602001612eda9493929190614825565b6040516020818303038152906040529050919050565b600080612efb61215a565b91509150612f108165ffffffffffff16151590565b1580612f2457504265ffffffffffff821610155b15612f4c576040516319ca5ebb60e01b815265ffffffffffff821660048201526024016114bf565b612f686000612f636003546001600160a01b031690565b6137f7565b50612f7460008361378f565b5050600280546001600160d01b031916905550565b60008281526001602081905260409091200154612fa58161281e565b61243083836137f7565b612197600080613867565b60065460009061114f90839063ffffffff1661392e565b600e546305f5e1009063ffffffff600160401b8204811691612ffd91600160201b820481169116614863565b6130079190614863565b63ffffffff161115612197576040516326a7055f60e21b815260040160405180910390fd5b601254600e546305f5e1009163ffffffff600160601b8204811692600160401b8304821692600160201b80820484169361306d939190910481169116614863565b6130779190614863565b6130819190614863565b61308b9190614863565b63ffffffff1611156130b057604051636aed75b560e11b815260040160405180910390fd5b601254612710600160801b90910461ffff16106130e05760405163d027c3d360e01b815260040160405180910390fd5b601254612710600160901b90910461ffff16111561311157604051637705947960e11b815260040160405180910390fd5b601254612710600160a01b90910461ffff16111561219757604051632422078b60e01b815260040160405180910390fd5b61314c8282611d2d565b610f345760405163e2517d3f60e01b81526001600160a01b0382166004820152602481018390526044016114bf565b600080613188858761473e565b9050600081116131995760006131d5565b6131d5670de0b6b3a7640000826131b188878461394b565b6131c48a89670de0b6b3a764000061394b565b6131ce919061473e565b919061394b565b9150505b949350505050565b6000613217826301e133806131ce8663ffffffff16620f42406131ce8a670de0b6b3a76400008d61394b9092919063ffffffff16565b613221908761473e565b9695505050505050565b60006131d96132626132416301e1338087614896565b61325390670de0b6b3a764000061473e565b84670de0b6b3a7640000613a0f565b8490670de0b6b3a764000061394b565b60006131d961328685846301e1338061394b565b61326290670de0b6b3a764000061473e565b6000818311156132bb576040516303b796e960e11b815260040160405180910390fd5b600082116132ca57600061114f565b61114f83670de0b6b3a76400008461394b565b60006132ec8261ffff16613a7e565b83106133525761332b61271061330661ffff8516826147f3565b6131ce8763ffffffff16620f42406133218861ffff16613a7e565b6131ce908a6147f3565b6133436133388789614863565b63ffffffff16613a90565b61334d919061473e565b613221565b61337561271061ffff84166131ce8663ffffffff808b1690620f42409061394b16565b6133848763ffffffff16613a90565b613221919061473e565b600061339d8261ffff16613a7e565b8311156133d8576133d36127106133b861ffff8516826147f3565b6131ce8963ffffffff16620f42406133218861ffff16613a7e565b6133db565b60005b6133e88561ffff16613a7e565b86111561344f5761342861271061340361ffff8816826147f3565b6131ce8b63ffffffff16620f424061341e8b61ffff16613a7e565b6131ce908d6147f3565b6134408a6134368d8f614863565b6133389190614863565b61344a919061473e565b613489565b61347261271061ffff87166131ce8963ffffffff808f1690620f42409061394b16565b61347f6133388c8e614863565b613489919061473e565b613493919061473e565b9a9950505050505050505050565b60006131d96134b963ffffffff8416620f42406147f3565b620f42406131ce8787670de0b6b3a764000061394b565b6001600160a01b0384166134fa5760405163e602df0560e01b8152600060048201526024016114bf565b6001600160a01b03831661352457604051634a1406b160e11b8152600060048201526024016114bf565b6001600160a01b038085166000908152601a60209081526040808320938716835292905220829055801561243057826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161359791815260200190565b60405180910390a350505050565b600354600160d01b900465ffffffffffff168015613628574265ffffffffffff821610156135fe57600354600280546001600160d01b0316600160a01b90920465ffffffffffff16600160d01b02919091179055613628565b6040517f2b1fa2edafe6f7b9e97c1a9e0c3660e645beb2dcaa2d45bdbf9beaf5472e1ec590600090a15b50600380546001600160a01b0316600160a01b65ffffffffffff948516026001600160d01b031617600160d01b9290931691909102919091179055565b6001600160a01b0383166136905780601b6000828254613685919061473e565b909155506137029050565b6001600160a01b038316600090815260196020526040902054818110156136e35760405163391434e360e21b81526001600160a01b038516600482015260248101829052604481018390526064016114bf565b6001600160a01b03841660009081526019602052604090209082900390555b6001600160a01b03821661371e57601b8054829003905561373d565b6001600160a01b03821660009081526019602052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161378291815260200190565b60405180910390a3505050565b6000826137ed5760006137aa6003546001600160a01b031690565b6001600160a01b0316146137d157604051631fe1e13d60e11b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0384161790555b61114f8383613aa1565b60008215801561381457506003546001600160a01b038381169116145b1561382a57600380546001600160a01b03191690555b61114f8383613b1a565b600065ffffffffffff82111561120a576040516306dfcc6560e41b815260306004820152602481018390526044016114bf565b600061387161215a565b6002805465ffffffffffff8616600160a01b026001600160d01b03199091166001600160a01b0388161717905591506138b390508165ffffffffffff16151590565b15611f85576040517f8886ebfc4259abdbc16601dd8fb5678e54878f47b3c34836cfc51154a960510990600090a1505050565b6000806138f1612042565b90508065ffffffffffff168365ffffffffffff16116139195761391483826148aa565b61114f565b61114f65ffffffffffff841662069780613b87565b600061114f8363ffffffff80851690620f424090600190613b9d16565b60008383028160001985870982811083820303915050806000036139825783828161397857613978614880565b049250505061114f565b8084116139a25760405163227bc15360e01b815260040160405180910390fd5b6000848688096000868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b6000613a1c6002846148c9565b600003613a295781613a2b565b835b9050613a38600284614896565b92505b821561114f57613a4c84808461394b565b9350613a596002846148c9565b15613a6c57613a6981858461394b565b90505b613a77600284614896565b9250613a3b565b6000610ee9655af3107a4000836148dd565b6000610ee964e8d4a51000836148dd565b6000613aad8383611d2d565b613b125760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610ee9565b506000610ee9565b6000613b268383611d2d565b15613b125760008381526001602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610ee9565b6000818310613b96578161114f565b5090919050565b600080613bab86868661394b565b9050613bb683613bee565b8015613bd2575060008480613bcd57613bcd614880565b868809115b15613be557613be260018261473e565b90505b95945050505050565b60006002826003811115613c0457613c04614751565b613c0e91906148f4565b60ff166001149050919050565b60405180606001604052806000815260200160008152602001613c54604051806040016040528060008152602001600060ff1681525090565b905290565b600060208284031215613c6b57600080fd5b81356001600160e01b03198116811461114f57600080fd5b803561ffff81168114613c9557600080fd5b919050565b600060208284031215613cac57600080fd5b61114f82613c83565b60005b83811015613cd0578181015183820152602001613cb8565b50506000910152565b60008151808452613cf1816020860160208601613cb5565b601f01601f19169290920160200192915050565b60208152600061114f6020830184613cd9565b6001600160a01b0381168114610ff557600080fd5b60008060408385031215613d4057600080fd5b8235613d4b81613d18565b946020939093013593505050565b6040516060810167ffffffffffffffff81118282101715613d8a57634e487b7160e01b600052604160045260246000fd5b60405290565b6040805190810167ffffffffffffffff81118282101715613d8a57634e487b7160e01b600052604160045260246000fd5b80358015158114613c9557600080fd5b600060808284031215613de357600080fd5b6040516080810181811067ffffffffffffffff82111715613e1457634e487b7160e01b600052604160045260246000fd5b604052613e2083613dc1565b8152613e2e60208401613dc1565b6020820152613e3f60408401613dc1565b6040820152613e5060608401613dc1565b60608201529392505050565b600080600080600060a08688031215613e7457600080fd5b85359450602086013593506040860135925060608601359150613e9960808701613dc1565b90509295509295909350565b600080600060608486031215613eba57600080fd5b8335613ec581613d18565b92506020840135613ed581613d18565b929592945050506040919091013590565b600060208284031215613ef857600080fd5b5035919050565b815181526020808301519082015260408101610ee9565b60008060408385031215613f2957600080fd5b823591506020830135613f3b81613d18565b809150509250929050565b803563ffffffff81168114613c9557600080fd5b600080600080600060a08688031215613f7257600080fd5b613f7b86613f46565b9450613f8960208701613f46565b93506040860135613f9981613d18565b92506060860135613fa981613d18565b949793965091946080013592915050565b600060208284031215613fcc57600080fd5b813561114f81613d18565b803567ffffffffffffffff81168114613c9557600080fd5b60006060828403121561400157600080fd5b614009613d59565b61401283613fd7565b815261402060208401613fd7565b602082015261403160408401613fd7565b60408201529392505050565b600060808201905082518252602083015160208301526040830151611e1a60408401828051825260209081015160ff16910152565b60008060008060006080868803121561408a57600080fd5b853561409581613d18565b945060208601356140a581613d18565b935060408601359250606086013567ffffffffffffffff808211156140c957600080fd5b818801915088601f8301126140dd57600080fd5b8135818111156140ec57600080fd5b8960208285010111156140fe57600080fd5b9699959850939650602001949392505050565b60006020828403121561412357600080fd5b813565ffffffffffff8116811461114f57600080fd5b600080600080600080600060e0888a03121561415457600080fd5b873561415f81613d18565b965061416d60208901613c83565b9550604088013594506060880135935061418960808901613c83565b925060a0880135915060c0880135905092959891949750929550565b602081526000825161ffff808251166020850152806020830151166040850152506040810151606084015260608101516080840152608081015160a084015250602083015160c0830152604083015161420460e084018261ffff169052565b50606083015161010083015260808301516101608061012085015261422d610180850183613cd9565b915060a085015161424b61014086018267ffffffffffffffff169052565b5060c0850151848303601f1901828601526132218382613cd9565b60008060006060848603121561427b57600080fd5b505081359360208301359350604090920135919050565b600080600080600060a086880312156142aa57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b815163ffffffff168152610160810160208301516142f3602084018263ffffffff169052565b50604083015161430b604084018263ffffffff169052565b506060830151614323606084018263ffffffff169052565b506080830151614339608084018261ffff169052565b5060a083015161434f60a084018261ffff169052565b5060c083015161436560c084018261ffff169052565b5060e083015161437b60e084018261ffff169052565b506101008381015190830152610120808401519083015261014092830151929091019190915290565b600080604083850312156143b757600080fd5b50508035926020909101359150565b600080604083850312156143d957600080fd5b613d4b83613c83565b600080604083850312156143f557600080fd5b8235915061440560208401613dc1565b90509250929050565b6000806040838503121561442157600080fd5b823561442c81613d18565b91506020830135613f3b81613d18565b60008060006060848603121561445157600080fd5b61445a84613f46565b925061446860208501613f46565b915061447660408501613f46565b90509250925092565b6000806000806080858703121561449557600080fd5b5050823594602084013594506040840135936060013592509050565b600080600080600080600080610100898b0312156144ce57600080fd5b6144d789613f46565b97506144e560208a01613f46565b96506144f360408a01613f46565b955061450160608a01613f46565b945061450f60808a01613c83565b935061451d60a08a01613c83565b925061452b60c08a01613c83565b915061453960e08a01613c83565b90509295985092959890939650565b60008060006060848603121561455d57600080fd5b8335925061456d60208501613dc1565b9150604084013590509250925092565b600181811c9082168061459157607f821691505b60208210810361162b57634e487b7160e01b600052602260045260246000fd5b6000604082840312156145c357600080fd5b6145cb613d90565b9050815181526020820151602082015292915050565b6000604082840312156145f357600080fd5b61114f83836145b1565b60006040828403121561460f57600080fd5b614617613d90565b905081518152602082015160ff8116811461463157600080fd5b602082015292915050565b60006040828403121561464e57600080fd5b61114f83836145fd565b83815260208082018490528251604083015282015160ff166060820152608081016131d9565b60006080828403121561469057600080fd5b614698613d59565b825181526020830151602082015261403184604085016145fd565b6001600160a01b03878116825286166020820152604081018590526060810184905260a06080820181905281018290526000828460c0840137600060c0848401015260c0601f19601f8501168301019050979650505050505050565b60006020828403121561472157600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b80820180821115610ee957610ee9614728565b634e487b7160e01b600052602160045260246000fd5b60006020828403121561477957600080fd5b6040516020810181811067ffffffffffffffff821117156147aa57634e487b7160e01b600052604160045260246000fd5b6040529151825250919050565b6000606082840312156147c957600080fd5b6147d1613d59565b8251815260208301516020820152604083015160408201528091505092915050565b81810381811115610ee957610ee9614728565b65ffffffffffff818116838216019080821115611e1a57611e1a614728565b61ffff60f01b8560f01b16815283600282015282602282015260008251614853816042850160208701613cb5565b9190910160420195945050505050565b63ffffffff818116838216019080821115611e1a57611e1a614728565b634e487b7160e01b600052601260045260246000fd5b6000826148a5576148a5614880565b500490565b65ffffffffffff828116828216039080821115611e1a57611e1a614728565b6000826148d8576148d8614880565b500690565b8082028115828204841417610ee957610ee9614728565b600060ff83168061490757614907614880565b8060ff8416069150509291505056fe3da98603b97a5eace5cf30dd35d7b6fa20c7ff063e690da242da665e55d494035d9aa0bc240d0b6271521ead226b44272d7e3db7a6b7f0486f8ba0a26c565a6da26469706673582212206c46e1750244dca8672fae35bb76a66f41d5a56dd29379fa3e4af84ac3fa5e0a64736f6c634300081700330000000000000000000000004095f3c4bf6d6505bd32cffe0918863ebb6b2df2000000000000000000000000b39c03297e87032ff69f4d42a6698e4c4a934449000000000000000000000000f4c542518320f09943c35db6773b2f9feb2f847e000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000005a000000000000000000000000000000000000000000000000000000000000005e0000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000067245c8100000000000000000000000000000000000000000000000000000000000003e800000000000000000000000000000000000000000000000000000000000186a00000000000000000000000004095f3c4bf6d6505bd32cffe0918863ebb6b2df2000000000000000000000000079cb887a11b3784e3c45090ac616b3545c9ead90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d09cab631f02c8d8ce7009b3aa228bdf4aac67bd0000000000000000000000000000000000000000000000000000000000001b58000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000de0b6b3a76400000000000000000000000000000000000000000000000000000000000000002710000000000000000000000000000000000000000000000000000000000000ea6000000000000000000000000000000000000000000000000000000000001e84800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003e2c284391c0000000000000000000000000000000000000000000000000000de0b6b3a76400000000000000000000000000000000000000000000000000000000000000002710000000000000000000000000000000000000000000000000000000000000271000000000000000000000000000000000000000000000000000000000001e8480000000000000000000000000000000000000000000000000000000000005573000000000000000000000000000000000000000000000000000000000000007d00000000000000000000000000000000000000000000000000000000000002328000000000000000000000000000000000000000000000000000000000000157c00000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f8b0a10e47000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008f0d1800000000000000000000000000000000000000000000000000000000001c9c38000000000000000000000000000000000000000000000000000b1a2bc2ec5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007218bd1050d41a9ecfc517abdd294fb8116aee81000000000000000000000000000000000000000000000000000000000000006800000000000000000000000037d761883a01e9f0b0d7fe59eec8c21d94393cdd0000000000000000000000000000000000000000000000000000000000000019466f6c6b7320457468657265756d2028417262697472756d2900000000000000000000000000000000000000000000000000000000000000000000000000000d664554485f617262697472756d00000000000000000000000000000000000000