@augmentedfinance/protocol-v1
Version:
Augmented Protocol smart contracts
1,228 lines • 61.2 kB
JavaScript
"use strict";
/* Autogenerated file. Do not edit manually. */
/* tslint:disable */
/* eslint-disable */
Object.defineProperty(exports, "__esModule", { value: true });
exports.MockStableDebtTokenFactory = void 0;
const contracts_1 = require("@ethersproject/contracts");
class MockStableDebtTokenFactory extends contracts_1.ContractFactory {
constructor(signer) {
super(_abi, _bytecode, signer);
}
deploy(overrides) {
return super.deploy(overrides || {});
}
getDeployTransaction(overrides) {
return super.getDeployTransaction(overrides || {});
}
attach(address) {
return super.attach(address);
}
connect(signer) {
return super.connect(signer);
}
static connect(address, signerOrProvider) {
return new contracts_1.Contract(address, _abi, signerOrProvider);
}
}
exports.MockStableDebtTokenFactory = MockStableDebtTokenFactory;
const _abi = [
{
inputs: [],
stateMutability: "nonpayable",
type: "constructor",
},
{
anonymous: false,
inputs: [
{
indexed: false,
internalType: "uint16",
name: "",
type: "uint16",
},
],
name: "BaselinePercentageUpdated",
type: "event",
},
{
anonymous: false,
inputs: [
{
indexed: true,
internalType: "address",
name: "fromUser",
type: "address",
},
{
indexed: true,
internalType: "address",
name: "toUser",
type: "address",
},
{
indexed: false,
internalType: "address",
name: "asset",
type: "address",
},
{
indexed: false,
internalType: "uint256",
name: "amount",
type: "uint256",
},
],
name: "BorrowAllowanceDelegated",
type: "event",
},
{
anonymous: false,
inputs: [
{
indexed: true,
internalType: "address",
name: "user",
type: "address",
},
{
indexed: false,
internalType: "uint256",
name: "amount",
type: "uint256",
},
{
indexed: false,
internalType: "uint256",
name: "currentBalance",
type: "uint256",
},
{
indexed: false,
internalType: "uint256",
name: "balanceIncrease",
type: "uint256",
},
{
indexed: false,
internalType: "uint256",
name: "avgStableRate",
type: "uint256",
},
{
indexed: false,
internalType: "uint256",
name: "newTotalSupply",
type: "uint256",
},
],
name: "Burn",
type: "event",
},
{
anonymous: false,
inputs: [
{
indexed: true,
internalType: "address",
name: "by",
type: "address",
},
{
indexed: false,
internalType: "bool",
name: "paused",
type: "bool",
},
],
name: "EmergencyPaused",
type: "event",
},
{
anonymous: false,
inputs: [
{
indexed: true,
internalType: "address",
name: "underlyingAsset",
type: "address",
},
{
indexed: true,
internalType: "address",
name: "pool",
type: "address",
},
{
indexed: false,
internalType: "address",
name: "treasury",
type: "address",
},
{
indexed: false,
internalType: "string",
name: "tokenName",
type: "string",
},
{
indexed: false,
internalType: "string",
name: "tokenSymbol",
type: "string",
},
{
indexed: false,
internalType: "uint8",
name: "tokenDecimals",
type: "uint8",
},
{
indexed: false,
internalType: "bytes",
name: "params",
type: "bytes",
},
],
name: "Initialized",
type: "event",
},
{
anonymous: false,
inputs: [
{
indexed: true,
internalType: "address",
name: "user",
type: "address",
},
{
indexed: true,
internalType: "address",
name: "onBehalfOf",
type: "address",
},
{
indexed: false,
internalType: "uint256",
name: "amount",
type: "uint256",
},
{
indexed: false,
internalType: "uint256",
name: "currentBalance",
type: "uint256",
},
{
indexed: false,
internalType: "uint256",
name: "balanceIncrease",
type: "uint256",
},
{
indexed: false,
internalType: "uint256",
name: "newRate",
type: "uint256",
},
{
indexed: false,
internalType: "uint256",
name: "avgStableRate",
type: "uint256",
},
{
indexed: false,
internalType: "uint256",
name: "newTotalSupply",
type: "uint256",
},
],
name: "Mint",
type: "event",
},
{
anonymous: false,
inputs: [
{
indexed: false,
internalType: "address",
name: "provider",
type: "address",
},
{
indexed: false,
internalType: "address",
name: "token",
type: "address",
},
],
name: "ProviderAdded",
type: "event",
},
{
anonymous: false,
inputs: [
{
indexed: false,
internalType: "address",
name: "provider",
type: "address",
},
],
name: "ProviderRemoved",
type: "event",
},
{
anonymous: false,
inputs: [
{
indexed: false,
internalType: "uint256",
name: "rate",
type: "uint256",
},
],
name: "RateUpdated",
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: "POOL",
outputs: [
{
internalType: "address",
name: "",
type: "address",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [],
name: "REVISION",
outputs: [
{
internalType: "uint256",
name: "",
type: "uint256",
},
],
stateMutability: "pure",
type: "function",
},
{
inputs: [],
name: "UNDERLYING_ASSET_ADDRESS",
outputs: [
{
internalType: "address",
name: "",
type: "address",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "",
type: "address",
},
{
internalType: "address",
name: "",
type: "address",
},
],
name: "addRewardProvider",
outputs: [],
stateMutability: "view",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "",
type: "address",
},
{
internalType: "address",
name: "",
type: "address",
},
],
name: "allowance",
outputs: [
{
internalType: "uint256",
name: "",
type: "uint256",
},
],
stateMutability: "pure",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "",
type: "address",
},
{
internalType: "uint256",
name: "",
type: "uint256",
},
],
name: "approve",
outputs: [
{
internalType: "bool",
name: "",
type: "bool",
},
],
stateMutability: "pure",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "delegatee",
type: "address",
},
{
internalType: "uint256",
name: "amount",
type: "uint256",
},
],
name: "approveDelegation",
outputs: [],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [],
name: "attachedToRewardController",
outputs: [
{
internalType: "uint256",
name: "",
type: "uint256",
},
],
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: "fromUser",
type: "address",
},
{
internalType: "address",
name: "toUser",
type: "address",
},
],
name: "borrowAllowance",
outputs: [
{
internalType: "uint256",
name: "",
type: "uint256",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "user",
type: "address",
},
{
internalType: "uint256",
name: "amount",
type: "uint256",
},
],
name: "burn",
outputs: [],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "holder",
type: "address",
},
{
internalType: "uint32",
name: "at",
type: "uint32",
},
],
name: "calcRewardFor",
outputs: [
{
internalType: "uint256",
name: "amount",
type: "uint256",
},
{
internalType: "uint256",
name: "",
type: "uint256",
},
{
internalType: "uint32",
name: "since",
type: "uint32",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "holder",
type: "address",
},
],
name: "claimRewardFor",
outputs: [
{
internalType: "uint256",
name: "",
type: "uint256",
},
{
internalType: "uint32",
name: "",
type: "uint32",
},
{
internalType: "bool",
name: "",
type: "bool",
},
],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "holder",
type: "address",
},
{
internalType: "uint256",
name: "baseAmount",
type: "uint256",
},
{
internalType: "uint256",
name: "limit",
type: "uint256",
},
{
internalType: "uint16",
name: "minPct",
type: "uint16",
},
],
name: "claimRewardWithLimitFor",
outputs: [
{
internalType: "uint256",
name: "amount",
type: "uint256",
},
{
internalType: "uint32",
name: "since",
type: "uint32",
},
{
internalType: "bool",
name: "keepPull",
type: "bool",
},
{
internalType: "uint256",
name: "newLimit",
type: "uint256",
},
],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "account",
type: "address",
},
],
name: "cumulatedInterest",
outputs: [
{
internalType: "uint256",
name: "",
type: "uint256",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [],
name: "decimals",
outputs: [
{
internalType: "uint8",
name: "",
type: "uint8",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [],
name: "detachedFromRewardController",
outputs: [
{
internalType: "uint256",
name: "",
type: "uint256",
},
],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [],
name: "getAverageStableRate",
outputs: [
{
internalType: "uint256",
name: "",
type: "uint256",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [],
name: "getBaselinePercentage",
outputs: [
{
internalType: "uint16",
name: "",
type: "uint16",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [],
name: "getIncentivesController",
outputs: [
{
internalType: "address",
name: "",
type: "address",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [],
name: "getOwner",
outputs: [
{
internalType: "address",
name: "",
type: "address",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [],
name: "getPoolName",
outputs: [
{
internalType: "string",
name: "",
type: "string",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [],
name: "getRate",
outputs: [
{
internalType: "uint256",
name: "",
type: "uint256",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [],
name: "getRewardController",
outputs: [
{
internalType: "address",
name: "",
type: "address",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [],
name: "getSupplyData",
outputs: [
{
internalType: "uint256",
name: "",
type: "uint256",
},
{
internalType: "uint256",
name: "",
type: "uint256",
},
{
internalType: "uint256",
name: "",
type: "uint256",
},
{
internalType: "uint40",
name: "",
type: "uint40",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [],
name: "getTotalSupplyAndAvgRate",
outputs: [
{
internalType: "uint256",
name: "",
type: "uint256",
},
{
internalType: "uint256",
name: "",
type: "uint256",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [],
name: "getTotalSupplyLastUpdated",
outputs: [
{
internalType: "uint40",
name: "",
type: "uint40",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "user",
type: "address",
},
],
name: "getUserLastUpdated",
outputs: [
{
internalType: "uint40",
name: "",
type: "uint40",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "user",
type: "address",
},
],
name: "getUserStableRate",
outputs: [
{
internalType: "uint256",
name: "",
type: "uint256",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [
{
components: [
{
internalType: "address",
name: "pool",
type: "address",
},
{
internalType: "address",
name: "treasury",
type: "address",
},
{
internalType: "address",
name: "underlyingAsset",
type: "address",
},
{
internalType: "uint8",
name: "underlyingDecimals",
type: "uint8",
},
],
internalType: "struct PoolTokenConfig",
name: "config",
type: "tuple",
},
{
internalType: "string",
name: "name",
type: "string",
},
{
internalType: "string",
name: "symbol",
type: "string",
},
{
internalType: "bytes",
name: "params",
type: "bytes",
},
],
name: "initialize",
outputs: [],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [
{
components: [
{
internalType: "contract IRewardController",
name: "controller",
type: "address",
},
{
internalType: "string",
name: "poolName",
type: "string",
},
{
internalType: "uint16",
name: "baselinePercentage",
type: "uint16",
},
],
internalType: "struct IInitializableRewardPool.InitRewardPoolData",
name: "config",
type: "tuple",
},
],
name: "initializeRewardPool",
outputs: [],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [],
name: "initializedRewardPoolWith",
outputs: [
{
components: [
{
internalType: "contract IRewardController",
name: "controller",
type: "address",
},
{
internalType: "string",
name: "poolName",
type: "string",
},
{
internalType: "uint16",
name: "baselinePercentage",
type: "uint16",
},
],
internalType: "struct IInitializableRewardPool.InitRewardPoolData",
name: "",
type: "tuple",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [],
name: "isPaused",
outputs: [
{
internalType: "bool",
name: "",
type: "bool",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "user",
type: "address",
},
{
internalType: "address",
name: "onBehalfOf",
type: "address",
},
{
internalType: "uint256",
name: "amount",
type: "uint256",
},
{
internalType: "uint256",
name: "rate",
type: "uint256",
},
],
name: "mint",
outputs: [
{
internalType: "bool",
name: "",
type: "bool",
},
],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [],
name: "name",
outputs: [
{
internalType: "string",
name: "",
type: "string",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "user",
type: "address",
},
],
name: "principalBalanceOf",
outputs: [
{
internalType: "uint256",
name: "",
type: "uint256",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "provider",
type: "address",
},
],
name: "removeRewardProvider",
outputs: [],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "user",
type: "address",
},
],
name: "rewardedBalanceOf",
outputs: [
{
internalType: "uint256",
name: "",
type: "uint256",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [
{
internalType: "uint16",
name: "factor",
type: "uint16",
},
],
name: "setBaselinePercentage",
outputs: [],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "hook",
type: "address",
},
],
name: "setIncentivesController",
outputs: [],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [
{
internalType: "bool",
name: "paused",
type: "bool",
},
],
name: "setPaused",
outputs: [],
stateMutability: "nonpayable",
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: "",
type: "address",
},
{
internalType: "uint256",
name: "",
type: "uint256",
},
],
name: "transfer",
outputs: [
{
internalType: "bool",
name: "",
type: "bool",
},
],
stateMutability: "pure",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "",
type: "address",
},
{
internalType: "address",
name: "",
type: "address",
},
{
internalType: "uint256",
name: "",
type: "uint256",
},
],
name: "transferFrom",
outputs: [
{
internalType: "bool",
name: "",
type: "bool",
},
],
stateMutability: "pure",
type: "function",
},
{
inputs: [
{
internalType: "uint256",
name: "baseline",
type: "uint256",
},
],
name: "updateBaseline",
outputs: [
{
internalType: "bool",
name: "hasBaseline",
type: "bool",
},
{
internalType: "uint256",
name: "appliedRate",
type: "uint256",
},
],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [],
name: "updatePool",
outputs: [],
stateMutability: "nonpayable",
type: "function",
},
];
const _bytecode = "0x608060405262000013600160001962000698565b600c556000600d553480156200002857600080fd5b506000808080806000604080516020808201808452600080845284519283019094528382528251929391926200006091839162000567565b5081516200007690600190602085019062000567565b506002805460ff929092166001600160a81b0319909216919091176101006001600160a01b03958616021790555050600380546001600160a01b0319908116948316949094179055600480549093169116179055604080516020810190915260008152620000ea90849084908490620000fe565b50620000f891505062000147565b6200072d565b600a80546001600160a01b0319166001600160a01b03861617905561ffff8216156200012f576200012f8262000221565b82156200014157620001418362000302565b50505050565b303b156200019c5760405162461bcd60e51b815260206004820152601460248201527f6f6e6c7920666f7220636f6e7374727563746f7200000000000000000000000060448201526064015b60405180910390fd5b620001ab600160001962000698565b600c541415620001bc576000600c55565b600c54156200021f5760405162461bcd60e51b815260206004820152602860248201527f63616e206f6e6c792062652063616c6c6564206265666f726520696e697469616044820152676c697a657228732960c01b606482015260840162000193565b565b6200022b62000348565b61ffff8116620002475762000241600062000302565b620002ab565b620002556001606462000649565b6200026290606462000649565b61ffff168161ffff161115620002ab5760405162461bcd60e51b815260206004820152600d60248201526c696c6c6567616c2076616c756560981b604482015260640162000193565b600a805461ffff60a01b1916600160a01b61ffff8416908102919091179091556040519081527fa4a0021d5a3e887ed39092287593218ba56daabb698755739666df81df918409906020015b60405180910390a150565b6200030c62000348565b6200031781620003a2565b6040518181527fe65c987b2e4668e09ba867026921588005b2b2063607a1e7e7d91683c8f91b7b90602001620002f7565b600a546001600160a01b03166200021f5760405162461bcd60e51b815260206004820152601660248201527f636f6e74726f6c6c657220697320726571756972656400000000000000000000604482015260640162000193565b620003b881620003bb60201b620014c11760201c565b50565b620003b881426007546001600160e01b0316821415620003d9575050565b6001600160e01b03821115620003ee57600080fd5b60075463ffffffff600160e01b909104811690821681146200045b576007546001600160e01b0390811690620004279084906200046016565b600780546001600160e01b0319166001600160e01b038681169190911790915562000141908281169084908690620004df16565b505050565b60075463ffffffff600160e01b90910481169082161015620004ba5760405162461bcd60e51b8152602060048201526012602482015271726574726f6163746976652075706461746560701b604482015260640162000193565b6007805463ffffffff909216600160e01b026001600160e01b03909216919091179055565b600954620004ec57505050565b8163ffffffff168163ffffffff16146200045b576009546200051e906ec097ce7bc90715b34b9f100000000062000628565b6200052a908462000676565b9250620005388282620006b2565b6200054a9063ffffffff168462000676565b600860008282546200055d91906200060d565b9091555050505050565b8280546200057590620006da565b90600052602060002090601f016020900481019282620005995760008555620005e4565b82601f10620005b457805160ff1916838001178555620005e4565b82800160010185558215620005e4579182015b82811115620005e4578251825591602001919060010190620005c7565b50620005f2929150620005f6565b5090565b5b80821115620005f25760008155600101620005f7565b6000821982111562000623576200062362000717565b500190565b6000826200064457634e487b7160e01b81526012600452602481fd5b500490565b600061ffff808316818516818304811182151516156200066d576200066d62000717565b02949350505050565b600081600019048311821515161562000693576200069362000717565b500290565b600082821015620006ad57620006ad62000717565b500390565b600063ffffffff83811690831681811015620006d257620006d262000717565b039392505050565b600181811c90821680620006ef57607f821691505b602082108114156200071157634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6135da806200073d6000396000f3fe608060405234801561001057600080fd5b50600436106102955760003560e01c806390f6fcf211610167578063c04a8a10116100ce578063e4ae9af711610087578063e4ae9af71461064a578063e655dbd81461065d578063e748489014610670578063e78c9b3b1461067f578063f731e9be146106a8578063ff85a2ba146106c557600080fd5b8063c04a8a10146105f6578063c634dfaa14610609578063d29939831461061c578063dd62ed3e14610624578063dde43cba1461063a578063e3161ddd1461064257600080fd5b8063a9dd770211610120578063a9dd770214610587578063b16a19de1461059a578063b187bd26146105ab578063b3f1c93d146105bd578063b6fe2e9c146105d0578063b9c7e266146105e357600080fd5b806390f6fcf21461051557806392efda791461051d57806395d89b411461052e5780639dc29fac14610536578063a8346a8c14610549578063a9059cbb146102ce57600080fd5b80634800df8c1161020b5780637535d246116101c45780637535d2461461042b57806375d2641314610450578063797743381461045657806379ce6b8c14610485578063893d20e8146104cb5780638abc37d3146104e157600080fd5b80634800df8c1461039b5780634d25c4f1146103ae57806355f4f197146103cf578063679aefce146103d75780636bd76d24146103df57806370a082311461041857600080fd5b806318160ddd1161025d57806318160ddd146103305780631dd0f4831461033857806323b872dd1461034b578063313ce5671461035e57806337a92626146103735780633a7d40891461038657600080fd5b806306fdde031461029a5780630746363d146102b8578063095ea7b3146102ce5780630ca2103d146102f157806316c38b3c1461031b575b600080fd5b6102a26106fa565b6040516102af91906133a8565b60405180910390f35b6102c061078c565b6040519081526020016102af565b6102e16102dc366004612fe0565b6107a1565b60405190151581526020016102af565b6103046102ff36600461324d565b6107b5565b6040805192151583526020830191909152016102af565b61032e610329366004613087565b610812565b005b6102c0610884565b61032e610346366004612eeb565b610891565b6102e1610359366004612f5b565b61089c565b60025460405160ff90911681526020016102af565b61032e6103813660046130bf565b6108ba565b61038e6109a8565b6040516102af91906133bb565b61032e6103a9366004613233565b610a31565b600a54600160a01b900461ffff1660405161ffff90911681526020016102af565b6102c0610a42565b6102c0610a51565b6102c06103ed366004612f23565b6001600160a01b039182166000908152600b6020908152604080832093909416825291909152205490565b6102c0610426366004612eeb565b610a5b565b6003546001600160a01b03165b6040516001600160a01b0390911681526020016102af565b30610438565b61045e610a8a565b6040805194855260208501939093529183015264ffffffffff1660608201526080016102af565b6104b5610493366004612eeb565b6001600160a01b031660009081526013602052604090205464ffffffffff1690565b60405164ffffffffff90911681526020016102af565b60025461010090046001600160a01b0316610438565b6104f46104ef366004613052565b610ac0565b60408051938452602084019290925263ffffffff16908201526060016102af565b6012546102c0565b600a546001600160a01b0316610438565b6102a2610af9565b61032e610544366004612fe0565b610b08565b61055c61055736600461300b565b610da3565b6040805194855263ffffffff90931660208501529015159183019190915260608201526080016102af565b6102c0610595366004612eeb565b610dcf565b6004546001600160a01b0316610438565b600a54600160b01b900460ff166102e1565b6102e16105cb366004612f9b565b610dda565b61032e6105de366004612f23565b61106f565b6102c06105f1366004612eeb565b611083565b61032e610604366004612fe0565b6110b8565b6102c0610617366004612eeb565b611123565b6102a261112e565b6102c0610632366004612f23565b600092915050565b6102c0611138565b61032e611142565b61032e6106583660046130f7565b611238565b61032e61066b366004612eeb565b611440565b60155464ffffffffff166104b5565b6102c061068d366004612eeb565b6001600160a01b031660009081526014602052604090205490565b6106b0611484565b604080519283526020830191909152016102af565b6106d86106d3366004612eeb565b61149d565b6040805193845263ffffffff90921660208401521515908201526060016102af565b6060600080546107099061351a565b80601f01602080910402602001604051908101604052809291908181526020018280546107359061351a565b80156107825780601f1061075757610100808354040283529160200191610782565b820191906000526020600020905b81548152906001019060200180831161076557829003601f168201915b5050505050905090565b60006107966114cb565b50600090565b905090565b60006107ab611512565b5060005b92915050565b6000806107c06114cb565b600a54600160a01b900461ffff166107e55760006107dc61154a565b91509150915091565b600a546107fe908490600160a01b900461ffff1661155e565b905061080981611653565b60019150915091565b61081a61169b565b600a5460ff600160b01b9091041615158115151461084a57600a805460ff60b01b1916600160b01b831515021790555b604051811515815233907facaf4ee8e6a4949ca96787d73dfff5165ff2c555b2304b8517dc5396053add859060200160405180910390a250565b600061079c6012546116d5565b61089961171c565b50565b60006108a6611512565b5060005b9392505050565b60025460ff1690565b60408051808201909152600280825261383160f01b6020830152546108f5916101009091046001600160a01b0316903390628000089061175e565b60006109046020830183612eeb565b6001600160a01b0316141561091857600080fd5b600061092c600a546001600160a01b031690565b6001600160a01b03161461093f57600080fd5b61089961094f6020830183612eeb565b60006109616060850160408601613233565b61096e6020860186613403565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061178f92505050565b6109d9604051806060016040528060006001600160a01b0316815260200160608152602001600061ffff1681525090565b60405180606001604052806109f6600a546001600160a01b031690565b6001600160a01b03168152602001610a0c61112e565b8152602001610a26600a5461ffff600160a01b9091041690565b61ffff169052919050565b610a396114cb565b610899816117d2565b6000610a4c6114cb565b610796565b600061079c61154a565b600080610a67836118a0565b905080610a775750600092915050565b6108aa610a8384611083565b829061191c565b60008060008060006012549050610a9f6119c1565b610aa8826116d5565b601554919790965091945064ffffffffff1692509050565b60008060004263ffffffff168463ffffffff161015610ade57600080fd5b610ae885856119cb565b9093506000925090505b9250925092565b6060600180546107099061351a565b610b106119e4565b600080610b1c84611a29565b92509250506000610b2b610884565b6001600160a01b038616600090815260146020526040812054919250908190868411610b5b576000601255610bd6565b610b6587856134de565b91506000610b7e610b7586611a81565b6012549061191c565b90506000610b95610b8e8a611a81565b849061191c565b9050818110610baf57600093508360128190559450610bd3565b610bcb610bbb85611a81565b610bc583856134de565b90611ae4565b601281905594505b50505b85871415610c14576001600160a01b038816600090815260146020908152604080832083905560139091529020805464ffffffffff19169055610c42565b6001600160a01b0388166000908152601360205260409020805464ffffffffff19164264ffffffffff161790555b6015805464ffffffffff19164264ffffffffff1617905586851115610ce3576000610c6d88876134de565b9050610c7a898285611bb8565b6040805182815260208101899052908101879052606081018390526080810185905260a081018490526001600160a01b038a169081907fc16f4e4ca34d790de4c656c72fd015c667d688f20be64eea360618545c4c530f9060c00160405180910390a350610d58565b6000610cef86896134de565b9050610cfc898285611bd4565b604080518281526020810189905290810187905260608101859052608081018490526001600160a01b038a16907f44bd20a79e993bdcc7cbedf54a3b4d19fb78490124b6b90d04fe3242eea579e89060a00160405180910390a2505b6040518781526000906001600160a01b038a16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050505050505050565b600080600080610db16114cb565b610dbd88888888611beb565b929b919a509850909650945050505050565b60006107af82610a5b565b6000610de46119e4565b610e0f6040518060800160405280600081526020016000815260200160008152602001600081525090565b846001600160a01b0316866001600160a01b031614610e3357610e33858786611c3c565b600080610e3f87611a29565b9250925050610e4c610884565b8084526012546060850152610e62908790613448565b60208401526000610e738688611d14565b9050610eb7610e828885613448565b6001600160a01b038a166000908152601460205260409020548390610ea79087611d14565b610eb19190613448565b90611da9565b604080860182905280518082019091526002815261373960f01b6020820152906fffffffffffffffffffffffffffffffff1015610f105760405162461bcd60e51b8152600401610f0791906133a8565b60405180910390fd5b506040808501516001600160a01b038a16600090815260146020908152838220929092556013825291909120805464ffffffffff421664ffffffffff19918216811790925560158054909116909117905584015184516060860151610f7b92918491610ea791611d14565b60128190556060850152610f9d88610f93848a613448565b8660200151611bb8565b876001600160a01b0316896001600160a01b03167fc16f4e4ca34d790de4c656c72fd015c667d688f20be64eea360618545c4c530f89868689604001518a606001518b6020015160405161101996959493929190958652602086019490945260408501929092526060840152608083015260a082015260c00190565b60405180910390a36040518781526001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050159695505050505050565b61107761171c565b61107f611e63565b5050565b6001600160a01b03811660009081526014602090815260408083205460139092528220546107af919064ffffffffff16611e99565b336000818152600b602090815260408083206001600160a01b03878116808652918452938290208690556004548251941684529183018590529092917fda919360433220e13b51e8c211e490d148e61a3bd53de8c097194e458b97f3e1910160405180910390a35050565b60006107af826118a0565b606061079c610af9565b600061079c611ea6565b61114a611eb3565b6000600260019054906101000a90046001600160a01b03166001600160a01b0316630261bf8b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561119a57600080fd5b505afa1580156111ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111d29190612f07565b604080518082019091526002815261064760f31b60208201529091506001600160a01b0382166112155760405162461bcd60e51b8152600401610f0791906133a8565b50600380546001600160a01b0319166001600160a01b0392909216919091179055565b6001600080600061124884611eee565b9250925092508061125957600d8490555b6112666001600c54101590565b156112ec576112e78a8a8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8e018190048102820181019092528c815292508c91508b90819084018382808284376000920191909152506112e292506108b1915050565b61216f565b611394565b61137b8a8a8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8e018190048102820181019092528c815292508c91508b9081908401838280828437600081840152601f19601f820116905080830192505050505050508d60600160208101906112e2919061327d565b61139461138d368d90038d018d6131a5565b87876121af565b6113a160208c018c612eeb565b6001600160a01b03166113ba60608d0160408e01612eeb565b6001600160a01b03167f2bb6ce244a49e83b442fa9c0617811f0929cb9961fd5ce013ebf708dc4d8bf0260006113ee6106fa565b6113f6610af9565b60025460ff168c8c604051611410969594939291906132e2565b60405180910390a38061142357600c8490555b8161143357600c8390556000600d555b5050505050505050505050565b60408051808201909152600280825261383160f01b60208301525461147b916101009091046001600160a01b0316903390628000089061175e565b6108998161227b565b6012546000908190611495816116d5565b939092509050565b60008060006114aa6114cb565b6114b384612283565b9250925092505b9193909250565b6108998142612291565b600a546001600160a01b0316331460405180604001604052806002815260200161039360f41b815250906108995760405162461bcd60e51b8152600401610f0791906133a8565b60405162461bcd60e51b815260206004820152600d60248201526c1393d517d4d5541413d4951151609a1b6044820152606401610f07565b600061079c6007546001600160e01b031690565b600082158061156b575081155b15611578575060006107af565b81600261158760016064613495565b611592906064613495565b61159c9190613460565b6115ac9061ffff166000196134de565b6115b69190613481565b83111560405180604001604052806002815260200161068760f31b815250906115f25760405162461bcd60e51b8152600401610f0791906133a8565b506115ff60016064613495565b61160a906064613495565b61ffff16600261161c60016064613495565b611627906064613495565b6116319190613460565b61ffff1661163f84866134bf565b6116499190613448565b6108aa9190613481565b61165b612319565b6116648161236a565b6040518181527fe65c987b2e4668e09ba867026921588005b2b2063607a1e7e7d91683c8f91b7b906020015b60405180910390a150565b6002546116d39061010090046001600160a01b0316336001604051806040016040528060028152602001611b9b60f11b81525061175e565b565b6000806116e06119c1565b9050806116f05750600092915050565b60155460009061170890859064ffffffffff16611e99565b9050611714828261191c565b949350505050565b61172533612373565b60405180604001604052806002815260200161383160f01b815250906108995760405162461bcd60e51b8152600401610f0791906133a8565b611769848484612408565b81906117885760405162461bcd60e51b8152600401610f0791906133a8565b5050505050565b600a80546001600160a01b0319166001600160a01b03861617905561ffff8216156117bd576117bd826117d2565b82156117cc576117cc83611653565b50505050565b6117da612319565b61ffff81166117f2576117ed6000611653565b611850565b6117fe60016064613495565b611809906064613495565b61ffff168161ffff1611156118505760405162461bcd60e51b815260206004820152600d60248201526c696c6c6567616c2076616c756560981b6044820152606401610f07565b600a805461ffff60a01b1916600160a01b61ffff8416908102919091179091556040519081527fa4a0021d5a3e887ed39092287593218ba56daabb698755739666df81df91840990602001611690565b6040805160608082018352600080835260208084018290529284018190526001600160a01b03851681526005835283812084519283018552546001600160c01b038116835263ffffffff600160c01b8204811694840194909452600160e01b90049092169281019290925290516001600160c01b031692915050565b6000821580611929575081155b15611936575060006107af565b8161194d6002676765c793fa10079d601b1b613481565b611959906000196134de565b6119639190613481565b83111560405180604001604052806002815260200161068760f31b8152509061199f5760405162461bcd60e51b8152600401610f0791906133a8565b50676765c793fa10079d601b1b6119b7600282613481565b61163f84866134bf565b600061079c612423565b6000806119d8848461242e565b915091505b9250929050565b600354604080518082019091526002815261323960f01b6020820152906001600160a01b031633146108995760405162461bcd60e51b8152600401610f0791906133a8565b600080600080611a38856118a0565b905080611a50576000806000935093509350506114ba565b600081611a5c87610a5b565b611a6691906134de565b905081611a738282613448565b909790965090945092505050565b600080611a92633b9aca00846134bf565b905082611aa3633b9aca0083613481565b1460405180604001604052806002815260200161068760f31b81525090611add5760405162461bcd60e51b8152600401610f0791906133a8565b5092915050565b604080518082019091526002815261035360f41b602082015260009082611b1e5760405162461bcd60e51b8152600401610f0791906133a8565b506000611b2c600284613481565b9050676765c793fa10079d601b1b611b46826000196134de565b611b509190613481565b84111560405180604001604052806002815260200161068760f31b81525090611b8c5760405162461bcd60e51b8152600401610f0791906133a8565b508281611ba4676765c793fa10079d601b1b876134bf565b611bae9190613448565b6117149190613481565b611bcf8383676765c793fa10079d601b1b846124d9565b505050565b611bcf8383676765c793fa10079d601b1b846124ed565b600080600080611bfa88612283565b91955093509150611c0b8785613448565b935061ffff851615611c3257611c25848661ffff1661155e565b611c2f9087613448565b95505b5094509450949050565b6001600160a01b038084166000908152600b602090815260408083209386168352928152908290205482518084019093526002835261353960f01b918301919091529082821015611ca05760405162461bcd60e51b8152600401610f0791906133a8565b506001600160a01b038481166000818152600b6020908152604080832088861680855290835292819020958790039586905560045481519516855290840185905290927fda919360433220e13b51e8c211e490d148e61a3bd53de8c097194e458b97f3e1910160405180910390a350505050565b6000821580611d21575081155b15611d2e575060006107af565b81611d426002670de0b6b3a7640000613481565b611d4e906000196134de565b611d589190613481565b83111560405180604001604052806002815260200161068760f31b81525090611d945760405162461bcd60e51b8152600401610f0791906133a8565b50670de0b6b3a76400006119b7600282613481565b604080518082019091526002815261035360f41b602082015260009082611de35760405162461bcd60e51b8152600401610f0791906133a8565b506000611df1600284613481565b9050670de0b6b3a7640000611e08826000196134de565b611e129190613481565b84111560405180604001604052806002815260200161068760f31b81525090611e4e5760405162461bcd60e51b8152600401610f0791906133a8565b508281611ba4670de0b6b3a7640000876134bf565b60405162461bcd60e51b815260206004820152600b60248201526a155394d5541413d495115160aa1b6044820152606401610f07565b60006108aa838342612503565b600061079c600180613448565b60408051808201909152600280825261333360f01b6020830152546116d3916101009091046001600160a01b0316903390620200029061175e565b6000806000611efb611ea6565b9250611f0a60016000196134de565b8310611f585760405162461bcd60e51b815260206004820152601960248201527f696e76616c696420636f6e7472616374207265766973696f6e000000000000006044820152606401610f07565b60008411611fa85760405162461bcd60e51b815260206004820152601e60248201527f696e636f727265637420696e697469616c697a6572207265766973696f6e00006044820152606401610f07565b82841115611ff85760405162461bcd60e51b815260206004820152601e60248201527f696e636f6e73697374656e7420636f6e7472616374207265766973696f6e00006044820152606401610f07565b61200560016000196134de565b60