@augmentedfinance/protocol-v1
Version:
Augmented Protocol smart contracts
1,112 lines • 54.5 kB
JavaScript
"use strict";
/* Autogenerated file. Do not edit manually. */
/* tslint:disable */
/* eslint-disable */
Object.defineProperty(exports, "__esModule", { value: true });
exports.VariableDebtTokenFactory = void 0;
const contracts_1 = require("@ethersproject/contracts");
class VariableDebtTokenFactory 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.VariableDebtTokenFactory = VariableDebtTokenFactory;
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: "index",
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: "from",
type: "address",
},
{
indexed: true,
internalType: "address",
name: "onBehalfOf",
type: "address",
},
{
indexed: false,
internalType: "uint256",
name: "value",
type: "uint256",
},
{
indexed: false,
internalType: "uint256",
name: "index",
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: "user",
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",
},
{
internalType: "uint256",
name: "index",
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: [],
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: "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: "getScaleIndex",
outputs: [
{
internalType: "uint256",
name: "",
type: "uint256",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "user",
type: "address",
},
],
name: "getScaledUserBalanceAndSupply",
outputs: [
{
internalType: "uint256",
name: "",
type: "uint256",
},
{
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: "index",
type: "uint256",
},
],
name: "mint",
outputs: [
{
internalType: "bool",
name: "firstBalance",
type: "bool",
},
],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [],
name: "name",
outputs: [
{
internalType: "string",
name: "",
type: "string",
},
],
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: "address",
name: "user",
type: "address",
},
],
name: "scaledBalanceOf",
outputs: [
{
internalType: "uint256",
name: "",
type: "uint256",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [],
name: "scaledTotalSupply",
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 = "0x6080604052620000136001600019620005b9565b600c556000600d553480156200002857600080fd5b506000808080806000604080516020808201808452600080845284519283019094528382528251929391926200006091839162000488565b5081516200007690600190602085019062000488565b506002805460ff929092166001600160a81b0319909216919091176101006001600160a01b03958616021790555050600380546001600160a01b0319908116948316949094179055600480549093169116179055604080516020810190915260008152620000ea90849084908490620000f3565b5050506200064e565b600a80546001600160a01b0319166001600160a01b03861617905561ffff821615620001245762000124826200013c565b82156200013657620001368362000221565b50505050565b6200014662000267565b61ffff811662000162576200015c600062000221565b620001ca565b62000170600160646200056a565b6200017d9060646200056a565b61ffff168161ffff161115620001ca5760405162461bcd60e51b815260206004820152600d60248201526c696c6c6567616c2076616c756560981b60448201526064015b60405180910390fd5b600a805461ffff60a01b1916600160a01b61ffff8416908102919091179091556040519081527fa4a0021d5a3e887ed39092287593218ba56daabb698755739666df81df918409906020015b60405180910390a150565b6200022b62000267565b6200023681620002c3565b6040518181527fe65c987b2e4668e09ba867026921588005b2b2063607a1e7e7d91683c8f91b7b9060200162000216565b600a546001600160a01b0316620002c15760405162461bcd60e51b815260206004820152601660248201527f636f6e74726f6c6c6572206973207265717569726564000000000000000000006044820152606401620001c1565b565b620002d981620002dc60201b620010fa1760201c565b50565b620002d981426007546001600160e01b0316821415620002fa575050565b6001600160e01b038211156200030f57600080fd5b60075463ffffffff600160e01b909104811690821681146200037c576007546001600160e01b0390811690620003489084906200038116565b600780546001600160e01b0319166001600160e01b0386811691909117909155620001369082811690849086906200040016565b505050565b60075463ffffffff600160e01b90910481169082161015620003db5760405162461bcd60e51b8152602060048201526012602482015271726574726f6163746976652075706461746560701b6044820152606401620001c1565b6007805463ffffffff909216600160e01b026001600160e01b03909216919091179055565b6009546200040d57505050565b8163ffffffff168163ffffffff16146200037c576009546200043f906ec097ce7bc90715b34b9f100000000062000549565b6200044b908462000597565b9250620004598282620005d3565b6200046b9063ffffffff168462000597565b600860008282546200047e91906200052e565b9091555050505050565b8280546200049690620005fb565b90600052602060002090601f016020900481019282620004ba576000855562000505565b82601f10620004d557805160ff191683800117855562000505565b8280016001018555821562000505579182015b8281111562000505578251825591602001919060010190620004e8565b506200051392915062000517565b5090565b5b8082111562000513576000815560010162000518565b6000821982111562000544576200054462000638565b500190565b6000826200056557634e487b7160e01b81526012600452602481fd5b500490565b600061ffff808316818516818304811182151516156200058e576200058e62000638565b02949350505050565b6000816000190483118215151615620005b457620005b462000638565b500290565b600082821015620005ce57620005ce62000638565b500390565b600063ffffffff83811690831681811015620005f357620005f362000638565b039392505050565b600181811c908216806200061057607f821691505b602082108114156200063257634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b612f5f806200065e6000396000f3fe608060405234801561001057600080fd5b50600436106102695760003560e01c8063893d20e811610151578063b3f1c93d116100c3578063dde43cba11610087578063dde43cba146105a3578063e3161ddd146105aa578063e4ae9af7146105b2578063e655dbd8146105c5578063f5298aca146105d8578063ff85a2ba146105eb57600080fd5b8063b3f1c93d1461054c578063b6fe2e9c1461055f578063c04a8a1014610572578063d299398314610585578063dd62ed3e1461058d57600080fd5b8063a8346a8c11610115578063a8346a8c146104d0578063a9059cbb146102a2578063a9dd77021461050e578063b16a19de14610521578063b187bd2614610532578063b1bf962d1461054457600080fd5b8063893d20e8146104655780638abc37d31461047b57806392efda79146104af57806395d89b41146104c05780639cfa7768146104c857600080fd5b8063313ce567116101ea57806355f4f197116101ae57806355f4f197146103de578063679aefce146103e65780636bd76d24146103ee57806370a08231146104275780637535d2461461043a57806375d264131461045f57600080fd5b8063313ce5671461036d57806337a92626146103825780633a7d4089146103955780634800df8c146103aa5780634d25c4f1146103bd57600080fd5b806316c38b3c1161023157806316c38b3c1461031757806318160ddd1461032c5780631da24f3e146103345780631dd0f4831461034757806323b872dd1461035a57600080fd5b806306fdde031461026e5780630746363d1461028c578063095ea7b3146102a25780630afbcdc9146102c55780630ca2103d146102ed575b600080fd5b610276610620565b6040516102839190612d2d565b60405180910390f35b6102946106b2565b604051908152602001610283565b6102b56102b0366004612931565b6106c7565b6040519015158152602001610283565b6102d86102d336600461283c565b6106db565b60408051928352602083019190915201610283565b6103006102fb366004612bd2565b6106f8565b604080519215158352602083019190915201610283565b61032a610325366004612a0c565b61074c565b005b6102946107be565b61029461034236600461283c565b6107d9565b61032a61035536600461283c565b6107e4565b6102b56103683660046128ac565b6107ef565b60025460405160ff9091168152602001610283565b61032a610390366004612a44565b61080c565b61039d6108fa565b6040516102839190612d40565b61032a6103b8366004612bb8565b610983565b600a54600160a01b900461ffff1660405161ffff9091168152602001610283565b610294610994565b6102946109a3565b6102946103fc366004612874565b6001600160a01b039182166000908152600b6020908152604080832093909416825291909152205490565b61029461043536600461283c565b6109ad565b6003546001600160a01b03165b6040516001600160a01b039091168152602001610283565b30610447565b60025461010090046001600160a01b0316610447565b61048e6104893660046129d7565b6109e2565b60408051938452602084019290925263ffffffff1690820152606001610283565b600a546001600160a01b0316610447565b610276610a1b565b610294610a2a565b6104e36104de366004612990565b610aae565b6040805194855263ffffffff9093166020850152901515918301919091526060820152608001610283565b61029461051c36600461283c565b610ada565b6004546001600160a01b0316610447565b600a54600160b01b900460ff166102b5565b610294610ae5565b6102b561055a3660046128ec565b610aef565b61032a61056d366004612874565b610c24565b61032a610580366004612931565b610c38565b610276610ca3565b61029461059b366004612874565b600092915050565b6001610294565b61032a610cad565b61032a6105c0366004612a7c565b610da3565b61032a6105d336600461283c565b610fab565b61032a6105e636600461295c565b610fef565b6105fe6105f936600461283c565b6110d6565b6040805193845263ffffffff9092166020840152151590820152606001610283565b60606000805461062f90612e9f565b80601f016020809104026020016040519081016040528092919081815260200182805461065b90612e9f565b80156106a85780601f1061067d576101008083540402835291602001916106a8565b820191906000526020600020905b81548152906001019060200180831161068b57829003601f168201915b5050505050905090565b60006106bc611104565b50600090565b905090565b60006106d161114b565b5060005b92915050565b6000806106e783611183565b6106ef6111ff565b91509150915091565b600080610703611104565b600a54600160a01b900461ffff1661071f5760006106ef611209565b600a54610738908490600160a01b900461ffff1661121d565b905061074381611312565b60019150915091565b61075461135a565b600a5460ff600160b01b9091041615158115151461078457600a805460ff60b01b1916600160b01b831515021790555b604051811515815233907facaf4ee8e6a4949ca96787d73dfff5165ff2c555b2304b8517dc5396053add859060200160405180910390a250565b60006106c26107cb610a2a565b6107d36111ff565b90611394565b60006106d582611183565b6107ec61143b565b50565b60006107f961114b565b5060009392505050565b60025460ff1690565b60408051808201909152600280825261383160f01b602083015254610847916101009091046001600160a01b0316903390628000089061147d565b6000610856602083018361283c565b6001600160a01b0316141561086a57600080fd5b600061087e600a546001600160a01b031690565b6001600160a01b03161461089157600080fd5b6107ec6108a1602083018361283c565b60006108b36060850160408601612bb8565b6108c06020860186612d88565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506114ae92505050565b61092b604051806060016040528060006001600160a01b0316815260200160608152602001600061ffff1681525090565b6040518060600160405280610948600a546001600160a01b031690565b6001600160a01b0316815260200161095e610ca3565b8152602001610978600a5461ffff600160a01b9091041690565b61ffff169052919050565b61098b611104565b6107ec816114f1565b600061099e611104565b6106bc565b60006106c2611209565b6000806109b983611183565b9050806109c95750600092915050565b6109db6109d4610a2a565b8290611394565b9392505050565b60008060004263ffffffff168463ffffffff161015610a0057600080fd5b610a0a85856115bf565b9093506000925090505b9250925092565b60606001805461062f90612e9f565b6003546004805460405163386497fd60e01b81526001600160a01b0391821692810192909252600092169063386497fd9060240160206040518083038186803b158015610a7657600080fd5b505afa158015610a8a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106c29190612bea565b600080600080610abc611104565b610ac8888888886115d8565b929b919a509850909650945050505050565b60006106d5826109ad565b60006106c26111ff565b6000610af9611629565b836001600160a01b0316856001600160a01b031614610b1d57610b1d84868561166e565b610b2684611183565b1590506000610b358484611746565b6040805180820190915260028152611a9b60f11b602082015290915081610b785760405162461bcd60e51b8152600401610b6f9190612d2d565b60405180910390fd5b50610b84858285611824565b6040518481526001600160a01b038616906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3846001600160a01b0316866001600160a01b03167f2f00e3cdd69a77be7ed215ec7b2a36784dd158f921fca79ac29deffa353fe6ee8686604051610c13929190918252602082015260400190565b60405180910390a350949350505050565b610c2c61143b565b610c346118a5565b5050565b336000818152600b602090815260408083206001600160a01b03878116808652918452938290208690556004548251941684529183018590529092917fda919360433220e13b51e8c211e490d148e61a3bd53de8c097194e458b97f3e1910160405180910390a35050565b60606106c2610a1b565b610cb56118db565b6000600260019054906101000a90046001600160a01b03166001600160a01b0316630261bf8b6040518163ffffffff1660e01b815260040160206040518083038186803b158015610d0557600080fd5b505afa158015610d19573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d3d9190612858565b604080518082019091526002815261064760f31b60208201529091506001600160a01b038216610d805760405162461bcd60e51b8152600401610b6f9190612d2d565b50600380546001600160a01b0319166001600160a01b0392909216919091179055565b60016000806000610db384611916565b92509250925080610dc457600d8490555b610dd16001600c54101590565b15610e5757610e528a8a8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8e018190048102820181019092528c815292508c91508b9081908401838280828437600092019190915250610e4d9250610803915050565b611b8c565b610eff565b610ee68a8a8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8e018190048102820181019092528c815292508c91508b9081908401838280828437600081840152601f19601f820116905080830192505050505050508d6060016020810190610e4d9190612c02565b610eff610ef8368d90038d018d612b2a565b8787611bcc565b610f0c60208c018c61283c565b6001600160a01b0316610f2560608d0160408e0161283c565b6001600160a01b03167f2bb6ce244a49e83b442fa9c0617811f0929cb9961fd5ce013ebf708dc4d8bf026000610f59610620565b610f61610a1b565b60025460ff168c8c604051610f7b96959493929190612c67565b60405180910390a380610f8e57600c8490555b81610f9e57600c8390556000600d555b5050505050505050505050565b60408051808201909152600280825261383160f01b602083015254610fe6916101009091046001600160a01b0316903390628000089061147d565b6107ec81611c98565b610ff7611629565b60006110038383611746565b60408051808201909152600281526106a760f31b60208201529091508161103d5760405162461bcd60e51b8152600401610b6f9190612d2d565b5061104b8482600085611ca0565b6040518381526000906001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a360408051848152602081018490526001600160a01b038616917f49995e5dd6158cf69ad3e9777c46755a1a826a446c6416992167462dad033b2a910160405180910390a250505050565b60008060006110e3611104565b6110ec84611d22565b9250925092505b9193909250565b6107ec8142611d30565b600a546001600160a01b0316331460405180604001604052806002815260200161039360f41b815250906107ec5760405162461bcd60e51b8152600401610b6f9190612d2d565b60405162461bcd60e51b815260206004820152600d60248201526c1393d517d4d5541413d4951151609a1b6044820152606401610b6f565b6040805160608082018352600080835260208084018290529284018190526001600160a01b03851681526005835283812084519283018552546001600160c01b038116835263ffffffff600160c01b8204811694840194909452600160e01b90049092169281019290925290516001600160c01b031692915050565b60006106c2611db8565b60006106c26007546001600160e01b031690565b600082158061122a575081155b15611237575060006106d5565b81600261124660016064612e1a565b611251906064612e1a565b61125b9190612de5565b61126b9061ffff16600019612e63565b6112759190612e06565b83111560405180604001604052806002815260200161068760f31b815250906112b15760405162461bcd60e51b8152600401610b6f9190612d2d565b506112be60016064612e1a565b6112c9906064612e1a565b61ffff1660026112db60016064612e1a565b6112e6906064612e1a565b6112f09190612de5565b61ffff166112fe8486612e44565b6113089190612dcd565b6109db9190612e06565b61131a611dc3565b61132381611e14565b6040518181527fe65c987b2e4668e09ba867026921588005b2b2063607a1e7e7d91683c8f91b7b906020015b60405180910390a150565b6002546113929061010090046001600160a01b0316336001604051806040016040528060028152602001611b9b60f11b81525061147d565b565b60008215806113a1575081155b156113ae575060006106d5565b816113c660026b033b2e3c9fd0803ce8000000612e06565b6113d290600019612e63565b6113dc9190612e06565b83111560405180604001604052806002815260200161068760f31b815250906114185760405162461bcd60e51b8152600401610b6f9190612d2d565b506b033b2e3c9fd0803ce8000000611431600282612e06565b6112fe8486612e44565b61144433611e1d565b60405180604001604052806002815260200161383160f01b815250906107ec5760405162461bcd60e51b8152600401610b6f9190612d2d565b611488848484611eb2565b81906114a75760405162461bcd60e51b8152600401610b6f9190612d2d565b5050505050565b600a80546001600160a01b0319166001600160a01b03861617905561ffff8216156114dc576114dc826114f1565b82156114eb576114eb83611312565b50505050565b6114f9611dc3565b61ffff81166115115761150c6000611312565b61156f565b61151d60016064612e1a565b611528906064612e1a565b61ffff168161ffff16111561156f5760405162461bcd60e51b815260206004820152600d60248201526c696c6c6567616c2076616c756560981b6044820152606401610b6f565b600a805461ffff60a01b1916600160a01b61ffff8416908102919091179091556040519081527fa4a0021d5a3e887ed39092287593218ba56daabb698755739666df81df9184099060200161134f565b6000806115cc8484611ecd565b915091505b9250929050565b6000806000806115e788611d22565b919550935091506115f88785612dcd565b935061ffff85161561161f57611612848661ffff1661121d565b61161c9087612dcd565b95505b5094509450949050565b600354604080518082019091526002815261323960f01b6020820152906001600160a01b031633146107ec5760405162461bcd60e51b8152600401610b6f9190612d2d565b6001600160a01b038084166000908152600b602090815260408083209386168352928152908290205482518084019093526002835261353960f01b9183019190915290828210156116d25760405162461bcd60e51b8152600401610b6f9190612d2d565b506001600160a01b038481166000818152600b6020908152604080832088861680855290835292819020958790039586905560045481519516855290840185905290927fda919360433220e13b51e8c211e490d148e61a3bd53de8c097194e458b97f3e1910160405180910390a350505050565b604080518082019091526002815261035360f41b6020820152600090826117805760405162461bcd60e51b8152600401610b6f9190612d2d565b50600061178e600284612e06565b90506b033b2e3c9fd0803ce80000006117a982600019612e63565b6117b39190612e06565b84111560405180604001604052806002815260200161068760f31b815250906117ef5760405162461bcd60e51b8152600401610b6f9190612d2d565b5082816118086b033b2e3c9fd0803ce800000087612e44565b6118129190612dcd565b61181c9190612e06565b949350505050565b6001600160a01b03831661187a5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610b6f565b61189582611886611db8565b6118909190612dcd565b611f78565b6118a0838383611f81565b505050565b60405162461bcd60e51b815260206004820152600b60248201526a155394d5541413d495115160aa1b6044820152606401610b6f565b60408051808201909152600280825261333360f01b602083015254611392916101009091046001600160a01b0316903390620200029061147d565b600160008061192783600019612e63565b83106119755760405162461bcd60e51b815260206004820152601960248201527f696e76616c696420636f6e7472616374207265766973696f6e000000000000006044820152606401610b6f565b600084116119c55760405162461bcd60e51b815260206004820152601e60248201527f696e636f727265637420696e697469616c697a6572207265766973696f6e00006044820152606401610b6f565b82841115611a155760405162461bcd60e51b815260206004820152601e60248201527f696e636f6e73697374656e7420636f6e7472616374207265766973696f6e00006044820152606401610b6f565b611a226001600019612e63565b600c541015611a9e576000600d54118015611a3e575082600c54105b91508180611a4b5750303b155b80611a575750600c5483115b611a995760405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606401610b6f565b611b0e565b611aab6001600019612e63565b600c54148015611aba5750303b155b611afc5760405162461bcd60e51b81526020600482015260136024820152721a5b9a5d1a585b1a5e995c88189b1bd8dad959606a1b6044820152606401610b6f565b6000600c55600d546000199350151591505b8115611b655783600d5411611b655760405162461bcd60e51b815260206004820152601f60248201527f696e636f7272656374206f72646572206f6620696e697469616c697a657273006044820152606401610b6f565b600c548411611b82578115611b7a576001600d555b5060016110f3565b5060009193909250565b8251611b9f90600090602086019061273b565b508151611bb390600190602085019061273b565b506002805460ff191660ff929092169190911790555050565b8251600380546001600160a01b03199081166001600160a01b039384169081179092556040808701516004805490931694169390931781558251630b6b5afb60e11b8152925191926316d6b5f69281830192602092829003018186803b158015611c3557600080fd5b505afa158015611c49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c6d9190612858565b600260016101000a8154816001600160a01b0302191690836001600160a01b03160217905550505050565b6107ec6118a5565b6001600160a01b038416611d005760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610b6f565b611d1683611d0c611db8565b6118909190612e63565b6114eb84848484611faa565b60008060006110ec84611fd5565b6007546001600160e01b0316821415611d47575050565b6001600160e01b03821115611d5b57600080fd5b60075463ffffffff600160e01b909104811690821681146118a0576007546001600160e01b0316611d8b83611fe3565b600780546001600160e01b0319166001600160e01b03868116919091179091556114eb9082168385612060565b60006106c260095490565b600a546001600160a01b03166113925760405162461bcd60e51b815260206004820152601660248201527518dbdb9d1c9bdb1b195c881a5cc81c995c5d5a5c995960521b6044820152606401610b6f565b6107ec816110fa565b600a546000906001600160a01b0316158015906106d55750600a5460405163ce91a05960e01b81526001600160a01b0384811660048301529091169063ce91a0599060240160206040518083038186803b158015611e7a57600080fd5b505afa158015611e8e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106d59190612a28565b600080611ec08585856120dc565b9092161515949350505050565b6001600160a01b03821660009081526005602052604081205481906001600160c01b0316611f00575060009050806115d1565b6001600160a01b0384166000818152600560209081526040808320815160608101835290546001600160c01b038116825263ffffffff600160c01b8204811683860152600160e01b9091041681830152938352600690915281205490918291611f6a919087612160565b909890975095505050505050565b610c3481612248565b6000806000611f908686612266565b925092509250611fa286848484612336565b505050505050565b6000806000611fba878787612399565b925092509250611fcc87848484612336565b50505050505050565b600080806110ec8442612478565b60075463ffffffff600160e01b9091048116908216101561203b5760405162461bcd60e51b8152602060048201526012602482015271726574726f6163746976652075706461746560701b6044820152606401610b6f565b6007805463ffffffff909216600160e01b026001600160e01b03909216919091179055565b60095461206c57505050565b8163ffffffff168163ffffffff16146118a05760095461209b906ec097ce7bc90715b34b9f1000000000612e06565b6120a59084612e44565b92506120b18282612e7a565b6120c19063ffffffff1684612e44565b600860008282546120d29190612dcd565b9091555050505050565b60405163cc8b29c160e01b81526001600160a01b038381166004830152602482018390526000919085169063cc8b29c19060440160206040518083038186803b15801561212857600080fd5b505afa15801561213c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061181c9190612bea565b6008546009546000908190156121d15760008061217b61256b565b915091506009546ec097ce7bc90715b34b9f100000000061219c9190612e06565b6121a69083612e44565b91506121b28187612e7a565b6121c29063ffffffff1683612e44565b6121cc9086612dcd565b945050505b848314806121e7575085516001600160c01b0316155b156121fb575050604084015160009061223f565b6ec097ce7bc90715b34b9f10000000006122158685612e63565b875161222a91906001600160c01b0316612e44565b6122349190612e06565b604087015190925090505b93509350939050565b600060095482141561225c57506000919050565b6106d5824261258a565b6001600160a01b0382166000908152600560209081526040808320815160608101835290546001600160c01b03811680835263ffffffff600160c01b8304811695840195909552600160e01b9091049093169181019190915282918291906122ce9086612dcd565b94506001600160c01b0385111561231d5760405162461bcd60e51b81526020600482015260136024820152720c4c2d8c2dcc6ca40d2e640e8dede40d0d2ced606b1b6044820152606401610b6f565b6123288682876125d4565b935093509350509250925092565b8261238d57600081600281111561235d57634e487b7160e01b600052602160045260246000fd5b148061238357506000612378600a546001600160a01b031690565b6001600160a01b0316145b1561238d576114eb565b6114eb848484846126cd565b6001600160a01b0383166000908152600560209081526040808320815160608101835290546001600160c01b038116825263ffffffff600160c01b8204811694830194909452600160e01b900490921690820152819081906123fb8686612dcd565b81516001600160c01b0316101561244d5760405162461bcd60e51b8152602060048201526016602482015275616d6f756e7420657863656564732062616c616e636560501b6044820152606401610b6f565b80516001600160c01b031695909503946124688782886125d4565b9350935093505093509350939050565b6001600160a01b0382166000908152600560209081526040808320815160608101835290546001600160c01b03811680835263ffffffff600160c01b8304811695840195909552600160e01b9091049093169181019190915282918291906124eb57600080600093509350935050610a14565b6001600160a01b038616600090815260066020526040812054819081906125149085908a612160565b6001600160a01b038c166000908152600660209081526040808320959095556005905292909220805463ffffffff8c16600160e01b026001600160e01b039091161790559750955060019450505050509250925092565b6007546001600160e01b03811691600160e01b90910463ffffffff1690565b600080600061259761256b565b915091506125a484611fe3565b81156125c8576125b5828286612060565b8363ffffffff168163ffffffff16141592505b50506009929092555090565b6000806000846040015163ffffffff16600014156125f4575060016125f8565b5060005b6001600160a01b03861660009081526006602052604081205442919081908190612624908a9086612160565b6001600160a01b03909c1660008181526006602090815260408083209590955584516060810186526001600160c01b039d8e1681529d81015163ffffffff9081168f83019081529981168f870190815293835260059091529390209b518c54975191518416600160e01b026001600160e01b039290941