ERC-20
Source Code
Overview
Max Total Supply
35,980,496.69469304 syUSD
Holders
11
Transfers
-
0
Market
Onchain Market Cap
-
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 8 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
| # | Exchange | Pair | Price | 24H Volume | % Volume |
|---|
Contract Name:
StableYieldCredit
Compiler Version
v0.8.0+commit.c7dfd78e
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2020-12-29
*/
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
interface IERC20 {
function totalSupply() external view returns (uint256);
function decimals() external view returns (uint256);
function balanceOf(address account) external view returns (uint256);
function transfer(address recipient, uint256 amount) external returns (bool);
function allowance(address owner, address spender) external view returns (uint256);
function approve(address spender, uint256 amount) external returns (bool);
function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(address indexed owner, address indexed spender, uint256 value);
}
library Address {
function isContract(address account) internal view returns (bool) {
bytes32 codehash;
bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
// solhint-disable-next-line no-inline-assembly
assembly { codehash := extcodehash(account) }
return (codehash != 0x0 && codehash != accountHash);
}
}
library SafeERC20 {
using Address for address;
function safeTransfer(IERC20 token, address to, uint value) internal {
callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
}
function safeTransferFrom(IERC20 token, address from, address to, uint value) internal {
callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
}
function safeApprove(IERC20 token, address spender, uint value) internal {
require((value == 0) || (token.allowance(address(this), spender) == 0),
"SafeERC20: approve from non-zero to non-zero allowance"
);
callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
}
function callOptionalReturn(IERC20 token, bytes memory data) private {
require(address(token).isContract(), "SafeERC20: call to non-contract");
// solhint-disable-next-line avoid-low-level-calls
(bool success, bytes memory returndata) = address(token).call(data);
require(success, "SafeERC20: low-level call failed");
if (returndata.length > 0) { // Return data is optional
// solhint-disable-next-line max-line-length
require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
}
}
}
interface Oracle {
function getPriceUSD(address reserve) external view returns (uint);
}
interface ISushiswapV2Factory {
event PairCreated(address indexed token0, address indexed token1, address pair, uint);
function feeTo() external view returns (address);
function feeToSetter() external view returns (address);
function getPair(address tokenA, address tokenB) external view returns (address pair);
function allPairs(uint) external view returns (address pair);
function allPairsLength() external view returns (uint);
function createPair(address tokenA, address tokenB) external returns (address pair);
function setFeeTo(address) external;
function setFeeToSetter(address) external;
}
interface ISushiswapV2Pair {
event Approval(address indexed owner, address indexed spender, uint value);
event Transfer(address indexed from, address indexed to, uint value);
function name() external pure returns (string memory);
function symbol() external pure returns (string memory);
function decimals() external pure returns (uint8);
function totalSupply() external view returns (uint);
function balanceOf(address owner) external view returns (uint);
function allowance(address owner, address spender) external view returns (uint);
function approve(address spender, uint value) external returns (bool);
function transfer(address to, uint value) external returns (bool);
function transferFrom(address from, address to, uint value) external returns (bool);
function DOMAIN_SEPARATOR() external view returns (bytes32);
function PERMIT_TYPEHASH() external pure returns (bytes32);
function nonces(address owner) external view returns (uint);
function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
event Mint(address indexed sender, uint amount0, uint amount1);
event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
event Swap(
address indexed sender,
uint amount0In,
uint amount1In,
uint amount0Out,
uint amount1Out,
address indexed to
);
event Sync(uint112 reserve0, uint112 reserve1);
function MINIMUM_LIQUIDITY() external pure returns (uint);
function factory() external view returns (address);
function token0() external view returns (address);
function token1() external view returns (address);
function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
function price0CumulativeLast() external view returns (uint);
function price1CumulativeLast() external view returns (uint);
function kLast() external view returns (uint);
function mint(address to) external returns (uint liquidity);
function burn(address to) external returns (uint amount0, uint amount1);
function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
function skim(address to) external;
function sync() external;
function initialize(address, address) external;
}
library SushiswapV2Library {
// returns sorted token addresses, used to handle return values from pairs sorted in this order
function sortTokens(address tokenA, address tokenB) internal pure returns (address token0, address token1) {
require(tokenA != tokenB, 'SushiswapV2Library: IDENTICAL_ADDRESSES');
(token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);
require(token0 != address(0), 'SushiswapV2Library: ZERO_ADDRESS');
}
// calculates the CREATE2 address for a pair without making any external calls
function pairFor(address factory, address tokenA, address tokenB) internal pure returns (address pair) {
(address token0, address token1) = sortTokens(tokenA, tokenB);
pair = address(uint160(uint(keccak256(abi.encodePacked(
hex'ff',
factory,
keccak256(abi.encodePacked(token0, token1)),
hex'e18a34eb0e04b04f7a0ac29a6e80748dca96319b42c54d679cb821dca90c6303' // init code hash
)))));
}
// fetches and sorts the reserves for a pair
function getReserves(address factory, address tokenA, address tokenB) internal view returns (uint reserveA, uint reserveB) {
(address token0,) = sortTokens(tokenA, tokenB);
(uint reserve0, uint reserve1,) = ISushiswapV2Pair(pairFor(factory, tokenA, tokenB)).getReserves();
(reserveA, reserveB) = tokenA == token0 ? (reserve0, reserve1) : (reserve1, reserve0);
}
// given some amount of an asset and pair reserves, returns an equivalent amount of the other asset
function quote(uint amountA, uint reserveA, uint reserveB) internal pure returns (uint amountB) {
require(amountA > 0, 'SushiswapV2Library: INSUFFICIENT_AMOUNT');
require(reserveA > 0 && reserveB > 0, 'SushiswapV2Library: INSUFFICIENT_LIQUIDITY');
amountB = amountA * reserveB / reserveA;
}
}
contract StableYieldCredit {
using SafeERC20 for IERC20;
/// @notice EIP-20 token name for this token
string public constant name = "Stable Yield Credit";
/// @notice EIP-20 token symbol for this token
string public constant symbol = "syUSD";
/// @notice EIP-20 token decimals for this token
uint8 public constant decimals = 8;
/// @notice Total number of tokens in circulation
uint public totalSupply = 0; // Initial 0
mapping(address => mapping (address => uint)) internal allowances;
mapping(address => uint) internal balances;
/// @notice The EIP-712 typehash for the contract's domain
bytes32 public constant DOMAIN_TYPEHASH = keccak256("EIP712Domain(string name,uint chainId,address verifyingContract)");
bytes32 public immutable DOMAINSEPARATOR;
/// @notice The EIP-712 typehash for the permit struct used by the contract
bytes32 public constant PERMIT_TYPEHASH = keccak256("Permit(address owner,address spender,uint value,uint nonce,uint deadline)");
/// @notice A record of states for signing / validating signatures
mapping (address => uint) public nonces;
function safe32(uint n, string memory errorMessage) internal pure returns (uint32) {
require(n < 2**32, errorMessage);
return uint32(n);
}
/// @notice The standard EIP-20 transfer event
event Transfer(address indexed from, address indexed to, uint amount);
/// @notice The standard EIP-20 approval event
event Approval(address indexed owner, address indexed spender, uint amount);
// Oracle used for price debt data (external to the AMM balance to avoid internal manipulation)
Oracle public constant LINK = Oracle(0x271bf4568fb737cc2e6277e9B1EE0034098cDA2a);
ISushiswapV2Factory public constant FACTORY = ISushiswapV2Factory(0xC0AEe478e3658e2610c5F7A4A2E1777cE9e4f2Ac);
// user => token => collateral
mapping (address => mapping(address => uint)) public collateral;
// user => token => credit
mapping (address => mapping(address => uint)) public collateralCredit;
address[] private _markets;
mapping (address => bool) pairs;
event Deposit(address indexed creditor, address indexed collateral, uint creditOut, uint amountIn, uint creditMinted);
event Withdraw(address indexed creditor, address indexed collateral, uint creditIn, uint creditOut, uint amountOut);
constructor () {
DOMAINSEPARATOR = keccak256(abi.encode(DOMAIN_TYPEHASH, keccak256(bytes(name)), _getChainId(), address(this)));
}
uint public FEE = 50;
uint public BASE = 10000;
uint public fees = 0;
uint public index = 0;
uint public distributed = 0;
uint public liquidity;
mapping(address => uint) public supplyIndex;
function update() external {
_update();
}
function _update() internal {
if (totalSupply > 0) {
if (fees > distributed) {
uint256 _diff = fees - distributed;
if (_diff > 0) {
uint256 _ratio = _diff * 1e8 / (totalSupply - liquidity);
if (_ratio > 0) {
index += _ratio;
distributed = fees;
}
}
}
}
}
function updateFor(address dst) public {
_update();
uint256 _supplied = balances[dst];
if (_supplied > 0) {
uint256 _supplyIndex = supplyIndex[dst];
supplyIndex[dst] = index;
uint256 _delta = index - _supplyIndex;
if (_delta > 0) {
uint256 _share = _supplied * _delta / 1e8;
claimable[dst] += _share;
}
} else {
supplyIndex[dst] = index;
}
}
mapping(address => uint) public claimable;
function claim() external {
_claimFor(msg.sender);
}
function claimFor(address dst) external {
_claimFor(dst);
}
function _claimFor(address dst) internal {
updateFor(dst);
fees -= claimable[dst];
// mint the amount
totalSupply += claimable[dst];
// transfer the amount to the recipient
balances[dst] += claimable[dst];
emit Transfer(address(0), dst, claimable[dst]);
claimable[dst] = 0;
distributed = fees;
}
function markets() external view returns (address[] memory) {
return _markets;
}
function _mint(address dst, uint amount) internal {
updateFor(dst);
// mint the amount
totalSupply += amount;
// transfer the amount to the recipient
balances[dst] += amount;
emit Transfer(address(0), dst, amount);
}
function _burn(address dst, uint amount) internal {
updateFor(dst);
// burn the amount
totalSupply -= amount;
// transfer the amount from the recipient
balances[dst] -= amount;
emit Transfer(dst, address(0), amount);
}
function depositAll(IERC20 token) external {
_deposit(token, token.balanceOf(msg.sender));
}
function deposit(IERC20 token, uint amount) external {
_deposit(token, amount);
}
function _addLiquidity(
address tokenA,
address tokenB,
uint amountADesired,
uint amountBDesired
) internal virtual returns (address pair, uint amountA, uint amountB) {
// create the pair if it doesn't exist yet
pair = FACTORY.getPair(tokenA, tokenB);
if (pair == address(0)) {
pair = FACTORY.createPair(tokenA, tokenB);
pairs[pair] = true;
_markets.push(tokenA);
} else if (!pairs[pair]) {
pairs[pair] = true;
_markets.push(tokenA);
}
(uint reserveA, uint reserveB) = SushiswapV2Library.getReserves(address(FACTORY), tokenA, tokenB);
if (reserveA == 0 && reserveB == 0) {
(amountA, amountB) = (amountADesired, amountBDesired);
} else {
uint amountBOptimal = SushiswapV2Library.quote(amountADesired, reserveA, reserveB);
if (amountBOptimal <= amountBDesired) {
(amountA, amountB) = (amountADesired, amountBOptimal);
} else {
uint amountAOptimal = SushiswapV2Library.quote(amountBDesired, reserveB, reserveA);
assert(amountAOptimal <= amountADesired);
(amountA, amountB) = (amountAOptimal, amountBDesired);
}
}
}
function _deposit(IERC20 token, uint amount) internal {
uint _value = LINK.getPriceUSD(address(token)) * amount / uint256(10)**token.decimals();
require(_value > 0, "!value");
(address _pair, uint amountA,) = _addLiquidity(address(token), address(this), amount, _value);
token.safeTransferFrom(msg.sender, _pair, amountA);
liquidity += _value;
_mint(_pair, _value); // Amount of scUSD to mint
uint _liquidity = ISushiswapV2Pair(_pair).mint(address(this));
collateral[msg.sender][address(token)] += _liquidity;
collateralCredit[msg.sender][address(token)] += _value;
uint _fee = _value * FEE / BASE;
_mint(msg.sender, _value - _fee);
fees += _fee;
emit Deposit(msg.sender, address(token), _value, amount, _value);
}
function withdrawAll(IERC20 token) external {
_withdraw(token, IERC20(address(this)).balanceOf(msg.sender));
}
function withdraw(IERC20 token, uint amount) external {
_withdraw(token, amount);
}
function _withdraw(IERC20 token, uint amount) internal {
uint _credit = collateralCredit[msg.sender][address(token)];
uint _collateral = collateral[msg.sender][address(token)];
if (_credit < amount) {
amount = _credit;
}
// Calculate % of collateral to release
uint _burned = _collateral * amount / _credit;
address _pair = FACTORY.getPair(address(token), address(this));
IERC20(_pair).safeTransfer(_pair, _burned); // send liquidity to pair
(uint _amount0, uint _amount1) = ISushiswapV2Pair(_pair).burn(msg.sender);
(address _token0,) = SushiswapV2Library.sortTokens(address(token), address(this));
(uint _amountA, uint _amountB) = address(token) == _token0 ? (_amount0, _amount1) : (_amount1, _amount0);
collateralCredit[msg.sender][address(token)] -= amount;
collateral[msg.sender][address(token)] -= _burned;
liquidity -= _amountB;
_burn(msg.sender, _amountB+amount); // Amount of scUSD to burn (value of A leaving the system)
emit Withdraw(msg.sender, address(token), amount, _amountB, _amountA);
}
/**
* @notice Get the number of tokens `spender` is approved to spend on behalf of `account`
* @param account The address of the account holding the funds
* @param spender The address of the account spending the funds
* @return The number of tokens approved
*/
function allowance(address account, address spender) external view returns (uint) {
return allowances[account][spender];
}
/**
* @notice Approve `spender` to transfer up to `amount` from `src`
* @dev This will overwrite the approval amount for `spender`
* and is subject to issues noted [here](https://eips.ethereum.org/EIPS/eip-20#approve)
* @param spender The address of the account which may transfer tokens
* @param amount The number of tokens that are approved (2^256-1 means infinite)
* @return Whether or not the approval succeeded
*/
function approve(address spender, uint amount) external returns (bool) {
allowances[msg.sender][spender] = amount;
emit Approval(msg.sender, spender, amount);
return true;
}
/**
* @notice Triggers an approval from owner to spends
* @param owner The address to approve from
* @param spender The address to be approved
* @param amount The number of tokens that are approved (2^256-1 means infinite)
* @param deadline The time at which to expire the signature
* @param v The recovery byte of the signature
* @param r Half of the ECDSA signature pair
* @param s Half of the ECDSA signature pair
*/
function permit(address owner, address spender, uint amount, uint deadline, uint8 v, bytes32 r, bytes32 s) external {
bytes32 structHash = keccak256(abi.encode(PERMIT_TYPEHASH, owner, spender, amount, nonces[owner]++, deadline));
bytes32 digest = keccak256(abi.encodePacked("\x19\x01", DOMAINSEPARATOR, structHash));
address signatory = ecrecover(digest, v, r, s);
require(signatory != address(0), "permit: signature");
require(signatory == owner, "permit: unauthorized");
require(block.timestamp <= deadline, "permit: expired");
allowances[owner][spender] = amount;
emit Approval(owner, spender, amount);
}
/**
* @notice Get the number of tokens held by the `account`
* @param account The address of the account to get the balance of
* @return The number of tokens held
*/
function balanceOf(address account) external view returns (uint) {
return balances[account];
}
/**
* @notice Transfer `amount` tokens from `msg.sender` to `dst`
* @param dst The address of the destination account
* @param amount The number of tokens to transfer
* @return Whether or not the transfer succeeded
*/
function transfer(address dst, uint amount) external returns (bool) {
_transferTokens(msg.sender, dst, amount);
return true;
}
/**
* @notice Transfer `amount` tokens from `src` to `dst`
* @param src The address of the source account
* @param dst The address of the destination account
* @param amount The number of tokens to transfer
* @return Whether or not the transfer succeeded
*/
function transferFrom(address src, address dst, uint amount) external returns (bool) {
address spender = msg.sender;
uint spenderAllowance = allowances[src][spender];
if (spender != src && spenderAllowance != type(uint).max) {
uint newAllowance = spenderAllowance - amount;
allowances[src][spender] = newAllowance;
emit Approval(src, spender, newAllowance);
}
_transferTokens(src, dst, amount);
return true;
}
function _transferTokens(address src, address dst, uint amount) internal {
require(src != address(0), "_transferTokens: zero address");
require(dst != address(0), "_transferTokens: zero address");
updateFor(src);
updateFor(dst);
balances[src] -= amount;
balances[dst] += amount;
emit Transfer(src, dst, amount);
if (pairs[src]) {
uint _fee = amount * FEE / BASE;
fees += _fee;
// burn the amount
totalSupply -= _fee;
// transfer the amount from the recipient
balances[dst] -= _fee;
emit Transfer(dst, address(0), _fee);
}
}
function _getChainId() internal view returns (uint) {
uint chainId;
assembly { chainId := chainid() }
return chainId;
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"creditor","type":"address"},{"indexed":true,"internalType":"address","name":"collateral","type":"address"},{"indexed":false,"internalType":"uint256","name":"creditOut","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"creditMinted","type":"uint256"}],"name":"Deposit","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":"amount","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"creditor","type":"address"},{"indexed":true,"internalType":"address","name":"collateral","type":"address"},{"indexed":false,"internalType":"uint256","name":"creditIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"creditOut","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountOut","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[],"name":"BASE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DOMAINSEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DOMAIN_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FACTORY","outputs":[{"internalType":"contract ISushiswapV2Factory","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LINK","outputs":[{"internalType":"contract Oracle","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PERMIT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","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":"amount","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":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"dst","type":"address"}],"name":"claimFor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"claimable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"collateral","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"collateralCredit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"depositAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"distributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"index","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"markets","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"supplyIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"dst","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"src","type":"address"},{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"update","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"dst","type":"address"}],"name":"updateFor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"withdrawAll","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
60a06040526000805560326008556127106009556000600a556000600b556000600c553480156200002f57600080fd5b5060408051808201909152601381527f537461626c65205969656c6420437265646974000000000000000000000000006020909101527f797cfab58fcb15f590eb8e4252d5c228ff88f94f907e119e80c4393a946e8f357f731d4321f0316462c5e2d7805654a6b50447396c1df9b8234424c9752f8ec7d2620000b1620000e8565b30604051602001620000c79493929190620000ec565b60408051601f19818403018152919052805160209091012060805262000110565b4690565b938452602084019290925260408301526001600160a01b0316606082015260800190565b6080516125e162000133600039600081816105b1015261095d01526125e16000f3fe608060405234801561001057600080fd5b50600436106102115760003560e01c806370a0823111610125578063d505accf116100ad578063e380fcad1161007c578063e380fcad146103f9578063ec342ad01461040c578063f3fef3a314610414578063f84b903e14610427578063fa09e6301461042f57610211565b8063d505accf146103ad578063dd62ed3e146103c0578063ddeae033146103d3578063de3db0fe146103e657610211565b80639f0d5f27116100f45780639f0d5f2714610364578063a2e6204514610377578063a9059cbb1461037f578063c57981b514610392578063cc218ece1461039a57610211565b806370a082311461032e5780637ecebe001461034157806395d89b41146103545780639af1d35a1461035c57610211565b806323b872dd116101a8578063313ce56711610177578063313ce567146102d65780633ac2a032146102eb578063402914f51461030057806347e7ef24146103135780634e71d92d1461032657610211565b806323b872dd146102ab5780632986c0e5146102be5780632dd31000146102c657806330adf81f146102ce57610211565b806318160ddd116101e457806318160ddd1461027e5780631a686502146102865780631b6b6d231461028e57806320606b70146102a357610211565b806306fdde0314610216578063095ea7b3146102345780630e0a5968146102545780631778e29c14610269575b600080fd5b61021e610442565b60405161022b91906120a4565b60405180910390f35b610247610242366004611dfe565b610471565b60405161022b919061203e565b610267610262366004611cd9565b6104db565b005b6102716105af565b60405161022b9190612049565b6102716105d3565b6102716105d9565b6102966105df565b60405161022b9190611f86565b6102716105f7565b6102476102b9366004611d49565b61061b565b6102716106e9565b6102966106ef565b610271610707565b6102de61072b565b60405161022b9190612389565b6102f3610730565b60405161022b9190611ff1565b61027161030e366004611cd9565b610792565b610267610321366004611dfe565b6107a4565b6102676107ae565b61027161033c366004611cd9565b6107b9565b61027161034f366004611cd9565b6107d8565b61021e6107ea565b61027161080b565b610267610372366004611cd9565b610811565b610267610899565b61024761038d366004611dfe565b6108a1565b6102716108b7565b6102716103a8366004611d11565b6108bd565b6102676103bb366004611d89565b6108da565b6102716103ce366004611d11565b610ae9565b6102676103e1366004611cd9565b610b14565b6102716103f4366004611d11565b610b1d565b610271610407366004611cd9565b610b3a565b610271610b4c565b610267610422366004611dfe565b610b52565b610271610b5c565b61026761043d366004611cd9565b610b62565b6040518060400160405280601381526020017214dd18589b1948165a595b190810dc99591a5d606a1b81525081565b3360008181526001602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906104ca908690612049565b60405180910390a350600192915050565b6104e3610be0565b6001600160a01b038116600090815260026020526040902054801561058e576001600160a01b0382166000908152600e602052604081208054600b54918290559190610530908390612502565b905080156105875760006305f5e10061054983866124e3565b61055391906123af565b6001600160a01b0386166000908152600f6020526040812080549293508392909190610580908490612397565b9091555050505b50506105ab565b600b546001600160a01b0383166000908152600e60205260409020555b5050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60005481565b600d5481565b73271bf4568fb737cc2e6277e9b1ee0034098cda2a81565b7f797cfab58fcb15f590eb8e4252d5c228ff88f94f907e119e80c4393a946e8f3581565b6001600160a01b03831660008181526001602090815260408083203380855292528220549192909190821480159061065557506000198114155b156106d05760006106668583612502565b6001600160a01b03808916600081815260016020908152604080832094891680845294909152908190208490555192935090917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906106c6908590612049565b60405180910390a3505b6106db868686610c61565b6001925050505b9392505050565b600b5481565b73c0aee478e3658e2610c5f7a4a2e1777ce9e4f2ac81565b7f5fae9ec55a1e547936e0e74d606b44cd5f912f9adcd0bba561fea62d570259e981565b600881565b6060600680548060200260200160405190810160405280929190818152602001828054801561078857602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161076a575b5050505050905090565b600f6020526000908152604090205481565b6105ab8282610e2b565b6107b733611146565b565b6001600160a01b0381166000908152600260205260409020545b919050565b60036020526000908152604090205481565b604051806040016040528060058152602001641cde5554d160da1b81525081565b600a5481565b61089681826001600160a01b03166370a08231336040518263ffffffff1660e01b81526004016108419190611f86565b60206040518083038186803b15801561085957600080fd5b505afa15801561086d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108919190611e97565b610e2b565b50565b6107b7610be0565b60006108ae338484610c61565b50600192915050565b60085481565b600460209081526000928352604080842090915290825290205481565b6001600160a01b038716600090815260036020526040812080547f5fae9ec55a1e547936e0e74d606b44cd5f912f9adcd0bba561fea62d570259e9918a918a918a91908661092783612545565b919050558960405160200161094196959493929190612052565b60405160208183030381529060405280519060200120905060007f00000000000000000000000000000000000000000000000000000000000000008260405160200161098e929190611f15565b6040516020818303038152906040528051906020012090506000600182878787604051600081526020016040526040516109cb9493929190612086565b6020604051602081039080840390855afa1580156109ed573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610a295760405162461bcd60e51b8152600401610a2090612290565b60405180910390fd5b896001600160a01b0316816001600160a01b031614610a5a5760405162461bcd60e51b8152600401610a209061221b565b86421115610a7a5760405162461bcd60e51b8152600401610a20906121bd565b6001600160a01b03808b166000818152600160209081526040808320948e1680845294909152908190208b9055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610ad5908c90612049565b60405180910390a350505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b61089681611146565b600560209081526000928352604080842090915290825290205481565b600e6020526000908152604090205481565b60095481565b6105ab8282611246565b600c5481565b6040516370a0823160e01b815261089690829030906370a0823190610b8b903390600401611f86565b60206040518083038186803b158015610ba357600080fd5b505afa158015610bb7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bdb9190611e97565b611246565b600054156107b757600c54600a5411156107b7576000600c54600a54610c069190612502565b90508015610896576000600d54600054610c209190612502565b610c2e836305f5e1006124e3565b610c3891906123af565b905080156105ab5780600b6000828254610c529190612397565b9091555050600a54600c555050565b6001600160a01b038316610c875760405162461bcd60e51b8152600401610a209061233c565b6001600160a01b038216610cad5760405162461bcd60e51b8152600401610a209061233c565b610cb6836104db565b610cbf826104db565b6001600160a01b03831660009081526002602052604081208054839290610ce7908490612502565b90915550506001600160a01b03821660009081526002602052604081208054839290610d14908490612397565b92505081905550816001600160a01b0316836001600160a01b031660008051602061258c83398151915283604051610d4c9190612049565b60405180910390a36001600160a01b03831660009081526007602052604090205460ff1615610e2657600060095460085483610d8891906124e3565b610d9291906123af565b905080600a6000828254610da69190612397565b9250508190555080600080828254610dbe9190612502565b90915550506001600160a01b03831660009081526002602052604081208054839290610deb908490612502565b90915550506040516000906001600160a01b0385169060008051602061258c83398151915290610e1c908590612049565b60405180910390a3505b505050565b6000826001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015610e6657600080fd5b505afa158015610e7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e9e9190611e97565b610ea990600a612415565b604051635708447d60e01b8152839073271bf4568fb737cc2e6277e9b1ee0034098cda2a90635708447d90610ee2908890600401611f86565b60206040518083038186803b158015610efa57600080fd5b505afa158015610f0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f329190611e97565b610f3c91906124e3565b610f4691906123af565b905060008111610f685760405162461bcd60e51b8152600401610a2090612168565b600080610f7785308686611522565b509092509050610f926001600160a01b0386163384846117f1565b82600d6000828254610fa49190612397565b90915550610fb49050828461184f565b6040516335313c2160e11b81526000906001600160a01b03841690636a62784290610fe3903090600401611f86565b602060405180830381600087803b158015610ffd57600080fd5b505af1158015611011573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110359190611e97565b3360009081526004602090815260408083206001600160a01b038b16845290915281208054929350839290919061106d908490612397565b90915550503360009081526005602090815260408083206001600160a01b038a168452909152812080548692906110a5908490612397565b9091555050600954600854600091906110be90876124e3565b6110c891906123af565b90506110dd336110d88388612502565b61184f565b80600a60008282546110ef9190612397565b90915550506040516001600160a01b0388169033907f4e2ca0515ed1aef1395f66b5303bb5d6f1bf9d61a353fa53f73f8ac9973fa9f6906111359089908b908290612373565b60405180910390a350505050505050565b61114f816104db565b6001600160a01b0381166000908152600f6020526040812054600a80549192909161117b908490612502565b90915550506001600160a01b0381166000908152600f6020526040812054815490919081906111ab908490612397565b90915550506001600160a01b0381166000908152600f6020908152604080832054600290925282208054919290916111e4908490612397565b90915550506001600160a01b0381166000818152600f602052604080822054905160008051602061258c8339815191529161121e91612049565b60405180910390a36001600160a01b03166000908152600f6020526040812055600a54600c55565b3360008181526005602090815260408083206001600160a01b03871680855290835281842054948452600483528184209084529091529020548282101561128b578192505b60008261129885846124e3565b6112a291906123af565b60405163e6a4390560e01b815290915060009073c0aee478e3658e2610c5f7a4a2e1777ce9e4f2ac9063e6a43905906112e19089903090600401611f9a565b60206040518083038186803b1580156112f957600080fd5b505afa15801561130d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113319190611cf5565b90506113476001600160a01b03821682846118d3565b600080826001600160a01b03166389afcb44336040518263ffffffff1660e01b81526004016113769190611f86565b6040805180830381600087803b15801561138f57600080fd5b505af11580156113a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113c79190611eaf565b9150915060006113d789306118f2565b509050600080826001600160a01b03168b6001600160a01b0316146113fd578385611400565b84845b915091508960056000336001600160a01b03166001600160a01b0316815260200190815260200160002060008d6001600160a01b03166001600160a01b03168152602001908152602001600020600082825461145c9190612502565b90915550503360009081526004602090815260408083206001600160a01b038f16845290915281208054899290611494908490612502565b9250508190555080600d60008282546114ad9190612502565b909155506114c69050336114c18c84612397565b61197c565b8a6001600160a01b0316336001600160a01b03167febff2602b3f468259e1e99f613fed6691f3a6526effe6ef3e768ba7ae7a36c4f8c848660405161150d93929190612373565b60405180910390a35050505050505050505050565b60405163e6a4390560e01b81526000908190819073c0aee478e3658e2610c5f7a4a2e1777ce9e4f2ac9063e6a4390590611562908a908a90600401611f9a565b60206040518083038186803b15801561157a57600080fd5b505afa15801561158e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115b29190611cf5565b92506001600160a01b0383166116bf576040516364e329cb60e11b815273c0aee478e3658e2610c5f7a4a2e1777ce9e4f2ac9063c9c65396906115fb908a908a90600401611f9a565b602060405180830381600087803b15801561161557600080fd5b505af1158015611629573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061164d9190611cf5565b6001600160a01b0381811660009081526007602052604081208054600160ff1990911681179091556006805491820181559091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b031916918a16919091179055925061174b565b6001600160a01b03831660009081526007602052604090205460ff1661174b576001600160a01b0383811660009081526007602052604081208054600160ff1990911681179091556006805491820181559091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319169189169190911790555b60008061176d73c0aee478e3658e2610c5f7a4a2e1777ce9e4f2ac8a8a6119f4565b9150915081600014801561177f575080155b1561178f578693508592506117e5565b600061179c888484611acd565b90508681116117b0578794509250826117e3565b60006117bd888486611acd565b9050888111156117dd57634e487b7160e01b600052600160045260246000fd5b94508693505b505b50509450945094915050565b611849846323b872dd60e01b85858560405160240161181293929190611fb4565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611b37565b50505050565b611858826104db565b806000808282546118699190612397565b90915550506001600160a01b03821660009081526002602052604081208054839290611896908490612397565b90915550506040516001600160a01b0383169060009060008051602061258c833981519152906118c7908590612049565b60405180910390a35050565b610e268363a9059cbb60e01b8484604051602401611812929190611fd8565b600080826001600160a01b0316846001600160a01b031614156119275760405162461bcd60e51b8152600401610a2090612121565b826001600160a01b0316846001600160a01b03161061194757828461194a565b83835b90925090506001600160a01b0382166119755760405162461bcd60e51b8152600401610a20906121e6565b9250929050565b611985826104db565b806000808282546119969190612502565b90915550506001600160a01b038216600090815260026020526040812080548392906119c3908490612502565b90915550506040516000906001600160a01b0384169060008051602061258c833981519152906118c7908590612049565b6000806000611a0385856118f2565b509050600080611a14888888611c1b565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015611a4c57600080fd5b505afa158015611a60573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a849190611e49565b506001600160701b031691506001600160701b03169150826001600160a01b0316876001600160a01b031614611abb578082611abe565b81815b90999098509650505050505050565b6000808411611aee5760405162461bcd60e51b8152600401610a2090612249565b600083118015611afe5750600082115b611b1a5760405162461bcd60e51b8152600401610a20906120d7565b82611b2583866124e3565b611b2f91906123af565b949350505050565b611b49826001600160a01b0316611c8b565b611b655760405162461bcd60e51b8152600401610a2090612305565b600080836001600160a01b031683604051611b809190611ef9565b6000604051808303816000865af19150503d8060008114611bbd576040519150601f19603f3d011682016040523d82523d6000602084013e611bc2565b606091505b509150915081611be45760405162461bcd60e51b8152600401610a2090612188565b8051156118495780806020019051810190611bff9190611e29565b6118495760405162461bcd60e51b8152600401610a20906122bb565b6000806000611c2a85856118f2565b91509150858282604051602001611c42929190611ed2565b60405160208183030381529060405280519060200120604051602001611c69929190611f30565b60408051601f1981840301815291905280516020909101209695505050505050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708115801590611b2f5750141592915050565b80516001600160701b03811681146107d357600080fd5b600060208284031215611cea578081fd5b81356106e281612576565b600060208284031215611d06578081fd5b81516106e281612576565b60008060408385031215611d23578081fd5b8235611d2e81612576565b91506020830135611d3e81612576565b809150509250929050565b600080600060608486031215611d5d578081fd5b8335611d6881612576565b92506020840135611d7881612576565b929592945050506040919091013590565b600080600080600080600060e0888a031215611da3578283fd5b8735611dae81612576565b96506020880135611dbe81612576565b95506040880135945060608801359350608088013560ff81168114611de1578384fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215611e10578182fd5b8235611e1b81612576565b946020939093013593505050565b600060208284031215611e3a578081fd5b815180151581146106e2578182fd5b600080600060608486031215611e5d578283fd5b611e6684611cc2565b9250611e7460208501611cc2565b9150604084015163ffffffff81168114611e8c578182fd5b809150509250925092565b600060208284031215611ea8578081fd5b5051919050565b60008060408385031215611ec1578182fd5b505080516020909101519092909150565b6bffffffffffffffffffffffff19606093841b811682529190921b16601482015260280190565b60008251611f0b818460208701612519565b9190910192915050565b61190160f01b81526002810192909252602282015260420190565b6001600160f81b0319815260609290921b6bffffffffffffffffffffffff1916600183015260158201527fe18a34eb0e04b04f7a0ac29a6e80748dca96319b42c54d679cb821dca90c6303603582015260550190565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b6020808252825182820181905260009190848201906040850190845b818110156120325783516001600160a01b03168352928401929184019160010161200d565b50909695505050505050565b901515815260200190565b90815260200190565b9586526001600160a01b0394851660208701529290931660408501526060840152608083019190915260a082015260c00190565b93845260ff9290921660208401526040830152606082015260800190565b60006020825282518060208401526120c3816040850160208701612519565b601f01601f19169190910160400192915050565b6020808252602a908201527f53757368697377617056324c6962726172793a20494e53554646494349454e546040820152695f4c495155494449545960b01b606082015260800190565b60208082526027908201527f53757368697377617056324c6962726172793a204944454e544943414c5f41446040820152664452455353455360c81b606082015260800190565b6020808252600690820152652176616c756560d01b604082015260600190565b6020808252818101527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604082015260600190565b6020808252600f908201526e1c195c9b5a5d0e88195e1c1a5c9959608a1b604082015260600190565b6020808252818101527f53757368697377617056324c6962726172793a205a45524f5f41444452455353604082015260600190565b6020808252601490820152731c195c9b5a5d0e881d5b985d5d1a1bdc9a5e995960621b604082015260600190565b60208082526027908201527f53757368697377617056324c6962726172793a20494e53554646494349454e5460408201526617d05353d5539560ca1b606082015260800190565b6020808252601190820152707065726d69743a207369676e617475726560781b604082015260600190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6040820152691bdd081cdd58d8d9595960b21b606082015260800190565b6020808252601f908201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604082015260600190565b6020808252601d908201527f5f7472616e73666572546f6b656e733a207a65726f2061646472657373000000604082015260600190565b9283526020830191909152604082015260600190565b60ff91909116815260200190565b600082198211156123aa576123aa612560565b500190565b6000826123ca57634e487b7160e01b81526012600452602481fd5b500490565b80825b60018086116123e1575061240c565b8187048211156123f3576123f3612560565b8086161561240057918102915b9490941c9380026123d2565b94509492505050565b60006106e2600019848460008261242e575060016106e2565b8161243b575060006106e2565b8160018114612451576002811461245b57612488565b60019150506106e2565b60ff84111561246c5761246c612560565b6001841b91508482111561248257612482612560565b506106e2565b5060208310610133831016604e8410600b84101617156124bb575081810a838111156124b6576124b6612560565b6106e2565b6124c884848460016123cf565b8086048211156124da576124da612560565b02949350505050565b60008160001904831182151516156124fd576124fd612560565b500290565b60008282101561251457612514612560565b500390565b60005b8381101561253457818101518382015260200161251c565b838111156118495750506000910152565b600060001982141561255957612559612560565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b038116811461089657600080fdfeddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa264697066735822122079898c12db6c5ebabe253fe34822a623078e7ebccc013ed63f9ea96d21b7082264736f6c63430008000033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102115760003560e01c806370a0823111610125578063d505accf116100ad578063e380fcad1161007c578063e380fcad146103f9578063ec342ad01461040c578063f3fef3a314610414578063f84b903e14610427578063fa09e6301461042f57610211565b8063d505accf146103ad578063dd62ed3e146103c0578063ddeae033146103d3578063de3db0fe146103e657610211565b80639f0d5f27116100f45780639f0d5f2714610364578063a2e6204514610377578063a9059cbb1461037f578063c57981b514610392578063cc218ece1461039a57610211565b806370a082311461032e5780637ecebe001461034157806395d89b41146103545780639af1d35a1461035c57610211565b806323b872dd116101a8578063313ce56711610177578063313ce567146102d65780633ac2a032146102eb578063402914f51461030057806347e7ef24146103135780634e71d92d1461032657610211565b806323b872dd146102ab5780632986c0e5146102be5780632dd31000146102c657806330adf81f146102ce57610211565b806318160ddd116101e457806318160ddd1461027e5780631a686502146102865780631b6b6d231461028e57806320606b70146102a357610211565b806306fdde0314610216578063095ea7b3146102345780630e0a5968146102545780631778e29c14610269575b600080fd5b61021e610442565b60405161022b91906120a4565b60405180910390f35b610247610242366004611dfe565b610471565b60405161022b919061203e565b610267610262366004611cd9565b6104db565b005b6102716105af565b60405161022b9190612049565b6102716105d3565b6102716105d9565b6102966105df565b60405161022b9190611f86565b6102716105f7565b6102476102b9366004611d49565b61061b565b6102716106e9565b6102966106ef565b610271610707565b6102de61072b565b60405161022b9190612389565b6102f3610730565b60405161022b9190611ff1565b61027161030e366004611cd9565b610792565b610267610321366004611dfe565b6107a4565b6102676107ae565b61027161033c366004611cd9565b6107b9565b61027161034f366004611cd9565b6107d8565b61021e6107ea565b61027161080b565b610267610372366004611cd9565b610811565b610267610899565b61024761038d366004611dfe565b6108a1565b6102716108b7565b6102716103a8366004611d11565b6108bd565b6102676103bb366004611d89565b6108da565b6102716103ce366004611d11565b610ae9565b6102676103e1366004611cd9565b610b14565b6102716103f4366004611d11565b610b1d565b610271610407366004611cd9565b610b3a565b610271610b4c565b610267610422366004611dfe565b610b52565b610271610b5c565b61026761043d366004611cd9565b610b62565b6040518060400160405280601381526020017214dd18589b1948165a595b190810dc99591a5d606a1b81525081565b3360008181526001602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906104ca908690612049565b60405180910390a350600192915050565b6104e3610be0565b6001600160a01b038116600090815260026020526040902054801561058e576001600160a01b0382166000908152600e602052604081208054600b54918290559190610530908390612502565b905080156105875760006305f5e10061054983866124e3565b61055391906123af565b6001600160a01b0386166000908152600f6020526040812080549293508392909190610580908490612397565b9091555050505b50506105ab565b600b546001600160a01b0383166000908152600e60205260409020555b5050565b7fd6e1492fab970753e31d1e0ba5c905c6e669e2c890736aef5c48895ba9da38f481565b60005481565b600d5481565b73271bf4568fb737cc2e6277e9b1ee0034098cda2a81565b7f797cfab58fcb15f590eb8e4252d5c228ff88f94f907e119e80c4393a946e8f3581565b6001600160a01b03831660008181526001602090815260408083203380855292528220549192909190821480159061065557506000198114155b156106d05760006106668583612502565b6001600160a01b03808916600081815260016020908152604080832094891680845294909152908190208490555192935090917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906106c6908590612049565b60405180910390a3505b6106db868686610c61565b6001925050505b9392505050565b600b5481565b73c0aee478e3658e2610c5f7a4a2e1777ce9e4f2ac81565b7f5fae9ec55a1e547936e0e74d606b44cd5f912f9adcd0bba561fea62d570259e981565b600881565b6060600680548060200260200160405190810160405280929190818152602001828054801561078857602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161076a575b5050505050905090565b600f6020526000908152604090205481565b6105ab8282610e2b565b6107b733611146565b565b6001600160a01b0381166000908152600260205260409020545b919050565b60036020526000908152604090205481565b604051806040016040528060058152602001641cde5554d160da1b81525081565b600a5481565b61089681826001600160a01b03166370a08231336040518263ffffffff1660e01b81526004016108419190611f86565b60206040518083038186803b15801561085957600080fd5b505afa15801561086d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108919190611e97565b610e2b565b50565b6107b7610be0565b60006108ae338484610c61565b50600192915050565b60085481565b600460209081526000928352604080842090915290825290205481565b6001600160a01b038716600090815260036020526040812080547f5fae9ec55a1e547936e0e74d606b44cd5f912f9adcd0bba561fea62d570259e9918a918a918a91908661092783612545565b919050558960405160200161094196959493929190612052565b60405160208183030381529060405280519060200120905060007fd6e1492fab970753e31d1e0ba5c905c6e669e2c890736aef5c48895ba9da38f48260405160200161098e929190611f15565b6040516020818303038152906040528051906020012090506000600182878787604051600081526020016040526040516109cb9493929190612086565b6020604051602081039080840390855afa1580156109ed573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610a295760405162461bcd60e51b8152600401610a2090612290565b60405180910390fd5b896001600160a01b0316816001600160a01b031614610a5a5760405162461bcd60e51b8152600401610a209061221b565b86421115610a7a5760405162461bcd60e51b8152600401610a20906121bd565b6001600160a01b03808b166000818152600160209081526040808320948e1680845294909152908190208b9055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610ad5908c90612049565b60405180910390a350505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b61089681611146565b600560209081526000928352604080842090915290825290205481565b600e6020526000908152604090205481565b60095481565b6105ab8282611246565b600c5481565b6040516370a0823160e01b815261089690829030906370a0823190610b8b903390600401611f86565b60206040518083038186803b158015610ba357600080fd5b505afa158015610bb7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bdb9190611e97565b611246565b600054156107b757600c54600a5411156107b7576000600c54600a54610c069190612502565b90508015610896576000600d54600054610c209190612502565b610c2e836305f5e1006124e3565b610c3891906123af565b905080156105ab5780600b6000828254610c529190612397565b9091555050600a54600c555050565b6001600160a01b038316610c875760405162461bcd60e51b8152600401610a209061233c565b6001600160a01b038216610cad5760405162461bcd60e51b8152600401610a209061233c565b610cb6836104db565b610cbf826104db565b6001600160a01b03831660009081526002602052604081208054839290610ce7908490612502565b90915550506001600160a01b03821660009081526002602052604081208054839290610d14908490612397565b92505081905550816001600160a01b0316836001600160a01b031660008051602061258c83398151915283604051610d4c9190612049565b60405180910390a36001600160a01b03831660009081526007602052604090205460ff1615610e2657600060095460085483610d8891906124e3565b610d9291906123af565b905080600a6000828254610da69190612397565b9250508190555080600080828254610dbe9190612502565b90915550506001600160a01b03831660009081526002602052604081208054839290610deb908490612502565b90915550506040516000906001600160a01b0385169060008051602061258c83398151915290610e1c908590612049565b60405180910390a3505b505050565b6000826001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015610e6657600080fd5b505afa158015610e7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e9e9190611e97565b610ea990600a612415565b604051635708447d60e01b8152839073271bf4568fb737cc2e6277e9b1ee0034098cda2a90635708447d90610ee2908890600401611f86565b60206040518083038186803b158015610efa57600080fd5b505afa158015610f0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f329190611e97565b610f3c91906124e3565b610f4691906123af565b905060008111610f685760405162461bcd60e51b8152600401610a2090612168565b600080610f7785308686611522565b509092509050610f926001600160a01b0386163384846117f1565b82600d6000828254610fa49190612397565b90915550610fb49050828461184f565b6040516335313c2160e11b81526000906001600160a01b03841690636a62784290610fe3903090600401611f86565b602060405180830381600087803b158015610ffd57600080fd5b505af1158015611011573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110359190611e97565b3360009081526004602090815260408083206001600160a01b038b16845290915281208054929350839290919061106d908490612397565b90915550503360009081526005602090815260408083206001600160a01b038a168452909152812080548692906110a5908490612397565b9091555050600954600854600091906110be90876124e3565b6110c891906123af565b90506110dd336110d88388612502565b61184f565b80600a60008282546110ef9190612397565b90915550506040516001600160a01b0388169033907f4e2ca0515ed1aef1395f66b5303bb5d6f1bf9d61a353fa53f73f8ac9973fa9f6906111359089908b908290612373565b60405180910390a350505050505050565b61114f816104db565b6001600160a01b0381166000908152600f6020526040812054600a80549192909161117b908490612502565b90915550506001600160a01b0381166000908152600f6020526040812054815490919081906111ab908490612397565b90915550506001600160a01b0381166000908152600f6020908152604080832054600290925282208054919290916111e4908490612397565b90915550506001600160a01b0381166000818152600f602052604080822054905160008051602061258c8339815191529161121e91612049565b60405180910390a36001600160a01b03166000908152600f6020526040812055600a54600c55565b3360008181526005602090815260408083206001600160a01b03871680855290835281842054948452600483528184209084529091529020548282101561128b578192505b60008261129885846124e3565b6112a291906123af565b60405163e6a4390560e01b815290915060009073c0aee478e3658e2610c5f7a4a2e1777ce9e4f2ac9063e6a43905906112e19089903090600401611f9a565b60206040518083038186803b1580156112f957600080fd5b505afa15801561130d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113319190611cf5565b90506113476001600160a01b03821682846118d3565b600080826001600160a01b03166389afcb44336040518263ffffffff1660e01b81526004016113769190611f86565b6040805180830381600087803b15801561138f57600080fd5b505af11580156113a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113c79190611eaf565b9150915060006113d789306118f2565b509050600080826001600160a01b03168b6001600160a01b0316146113fd578385611400565b84845b915091508960056000336001600160a01b03166001600160a01b0316815260200190815260200160002060008d6001600160a01b03166001600160a01b03168152602001908152602001600020600082825461145c9190612502565b90915550503360009081526004602090815260408083206001600160a01b038f16845290915281208054899290611494908490612502565b9250508190555080600d60008282546114ad9190612502565b909155506114c69050336114c18c84612397565b61197c565b8a6001600160a01b0316336001600160a01b03167febff2602b3f468259e1e99f613fed6691f3a6526effe6ef3e768ba7ae7a36c4f8c848660405161150d93929190612373565b60405180910390a35050505050505050505050565b60405163e6a4390560e01b81526000908190819073c0aee478e3658e2610c5f7a4a2e1777ce9e4f2ac9063e6a4390590611562908a908a90600401611f9a565b60206040518083038186803b15801561157a57600080fd5b505afa15801561158e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115b29190611cf5565b92506001600160a01b0383166116bf576040516364e329cb60e11b815273c0aee478e3658e2610c5f7a4a2e1777ce9e4f2ac9063c9c65396906115fb908a908a90600401611f9a565b602060405180830381600087803b15801561161557600080fd5b505af1158015611629573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061164d9190611cf5565b6001600160a01b0381811660009081526007602052604081208054600160ff1990911681179091556006805491820181559091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b031916918a16919091179055925061174b565b6001600160a01b03831660009081526007602052604090205460ff1661174b576001600160a01b0383811660009081526007602052604081208054600160ff1990911681179091556006805491820181559091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319169189169190911790555b60008061176d73c0aee478e3658e2610c5f7a4a2e1777ce9e4f2ac8a8a6119f4565b9150915081600014801561177f575080155b1561178f578693508592506117e5565b600061179c888484611acd565b90508681116117b0578794509250826117e3565b60006117bd888486611acd565b9050888111156117dd57634e487b7160e01b600052600160045260246000fd5b94508693505b505b50509450945094915050565b611849846323b872dd60e01b85858560405160240161181293929190611fb4565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611b37565b50505050565b611858826104db565b806000808282546118699190612397565b90915550506001600160a01b03821660009081526002602052604081208054839290611896908490612397565b90915550506040516001600160a01b0383169060009060008051602061258c833981519152906118c7908590612049565b60405180910390a35050565b610e268363a9059cbb60e01b8484604051602401611812929190611fd8565b600080826001600160a01b0316846001600160a01b031614156119275760405162461bcd60e51b8152600401610a2090612121565b826001600160a01b0316846001600160a01b03161061194757828461194a565b83835b90925090506001600160a01b0382166119755760405162461bcd60e51b8152600401610a20906121e6565b9250929050565b611985826104db565b806000808282546119969190612502565b90915550506001600160a01b038216600090815260026020526040812080548392906119c3908490612502565b90915550506040516000906001600160a01b0384169060008051602061258c833981519152906118c7908590612049565b6000806000611a0385856118f2565b509050600080611a14888888611c1b565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015611a4c57600080fd5b505afa158015611a60573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a849190611e49565b506001600160701b031691506001600160701b03169150826001600160a01b0316876001600160a01b031614611abb578082611abe565b81815b90999098509650505050505050565b6000808411611aee5760405162461bcd60e51b8152600401610a2090612249565b600083118015611afe5750600082115b611b1a5760405162461bcd60e51b8152600401610a20906120d7565b82611b2583866124e3565b611b2f91906123af565b949350505050565b611b49826001600160a01b0316611c8b565b611b655760405162461bcd60e51b8152600401610a2090612305565b600080836001600160a01b031683604051611b809190611ef9565b6000604051808303816000865af19150503d8060008114611bbd576040519150601f19603f3d011682016040523d82523d6000602084013e611bc2565b606091505b509150915081611be45760405162461bcd60e51b8152600401610a2090612188565b8051156118495780806020019051810190611bff9190611e29565b6118495760405162461bcd60e51b8152600401610a20906122bb565b6000806000611c2a85856118f2565b91509150858282604051602001611c42929190611ed2565b60405160208183030381529060405280519060200120604051602001611c69929190611f30565b60408051601f1981840301815291905280516020909101209695505050505050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708115801590611b2f5750141592915050565b80516001600160701b03811681146107d357600080fd5b600060208284031215611cea578081fd5b81356106e281612576565b600060208284031215611d06578081fd5b81516106e281612576565b60008060408385031215611d23578081fd5b8235611d2e81612576565b91506020830135611d3e81612576565b809150509250929050565b600080600060608486031215611d5d578081fd5b8335611d6881612576565b92506020840135611d7881612576565b929592945050506040919091013590565b600080600080600080600060e0888a031215611da3578283fd5b8735611dae81612576565b96506020880135611dbe81612576565b95506040880135945060608801359350608088013560ff81168114611de1578384fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215611e10578182fd5b8235611e1b81612576565b946020939093013593505050565b600060208284031215611e3a578081fd5b815180151581146106e2578182fd5b600080600060608486031215611e5d578283fd5b611e6684611cc2565b9250611e7460208501611cc2565b9150604084015163ffffffff81168114611e8c578182fd5b809150509250925092565b600060208284031215611ea8578081fd5b5051919050565b60008060408385031215611ec1578182fd5b505080516020909101519092909150565b6bffffffffffffffffffffffff19606093841b811682529190921b16601482015260280190565b60008251611f0b818460208701612519565b9190910192915050565b61190160f01b81526002810192909252602282015260420190565b6001600160f81b0319815260609290921b6bffffffffffffffffffffffff1916600183015260158201527fe18a34eb0e04b04f7a0ac29a6e80748dca96319b42c54d679cb821dca90c6303603582015260550190565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b6020808252825182820181905260009190848201906040850190845b818110156120325783516001600160a01b03168352928401929184019160010161200d565b50909695505050505050565b901515815260200190565b90815260200190565b9586526001600160a01b0394851660208701529290931660408501526060840152608083019190915260a082015260c00190565b93845260ff9290921660208401526040830152606082015260800190565b60006020825282518060208401526120c3816040850160208701612519565b601f01601f19169190910160400192915050565b6020808252602a908201527f53757368697377617056324c6962726172793a20494e53554646494349454e546040820152695f4c495155494449545960b01b606082015260800190565b60208082526027908201527f53757368697377617056324c6962726172793a204944454e544943414c5f41446040820152664452455353455360c81b606082015260800190565b6020808252600690820152652176616c756560d01b604082015260600190565b6020808252818101527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604082015260600190565b6020808252600f908201526e1c195c9b5a5d0e88195e1c1a5c9959608a1b604082015260600190565b6020808252818101527f53757368697377617056324c6962726172793a205a45524f5f41444452455353604082015260600190565b6020808252601490820152731c195c9b5a5d0e881d5b985d5d1a1bdc9a5e995960621b604082015260600190565b60208082526027908201527f53757368697377617056324c6962726172793a20494e53554646494349454e5460408201526617d05353d5539560ca1b606082015260800190565b6020808252601190820152707065726d69743a207369676e617475726560781b604082015260600190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6040820152691bdd081cdd58d8d9595960b21b606082015260800190565b6020808252601f908201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604082015260600190565b6020808252601d908201527f5f7472616e73666572546f6b656e733a207a65726f2061646472657373000000604082015260600190565b9283526020830191909152604082015260600190565b60ff91909116815260200190565b600082198211156123aa576123aa612560565b500190565b6000826123ca57634e487b7160e01b81526012600452602481fd5b500490565b80825b60018086116123e1575061240c565b8187048211156123f3576123f3612560565b8086161561240057918102915b9490941c9380026123d2565b94509492505050565b60006106e2600019848460008261242e575060016106e2565b8161243b575060006106e2565b8160018114612451576002811461245b57612488565b60019150506106e2565b60ff84111561246c5761246c612560565b6001841b91508482111561248257612482612560565b506106e2565b5060208310610133831016604e8410600b84101617156124bb575081810a838111156124b6576124b6612560565b6106e2565b6124c884848460016123cf565b8086048211156124da576124da612560565b02949350505050565b60008160001904831182151516156124fd576124fd612560565b500290565b60008282101561251457612514612560565b500390565b60005b8381101561253457818101518382015260200161251c565b838111156118495750506000910152565b600060001982141561255957612559612560565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b038116811461089657600080fdfeddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa264697066735822122079898c12db6c5ebabe253fe34822a623078e7ebccc013ed63f9ea96d21b7082264736f6c63430008000033
Deployed Bytecode Sourcemap
7777:13949:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7896:51;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17877:207;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;11198:499::-;;;;;;:::i;:::-;;:::i;:::-;;8570:40;;;:::i;:::-;;;;;;;:::i;8208:27::-;;;:::i;10566:21::-;;;:::i;9493:80::-;;;:::i;:::-;;;;;;;:::i;8444:119::-;;;:::i;20287:513::-;;;;;;:::i;:::-;;:::i;10498:21::-;;;:::i;9580:109::-;;;:::i;8700:128::-;;;:::i;8110:34::-;;;:::i;:::-;;;;;;;:::i;12339:94::-;;;:::i;:::-;;;;;;;:::i;11709:41::-;;;;;;:::i;:::-;;:::i;13139:95::-;;;;;;:::i;:::-;;:::i;11763:66::-;;;:::i;19462:108::-;;;;;;:::i;:::-;;:::i;8909:39::-;;;;;;:::i;:::-;;:::i;8008:::-;;;:::i;10471:20::-;;;:::i;13021:106::-;;;;;;:::i;:::-;;:::i;10656:55::-;;;:::i;19831:149::-;;;;;;:::i;:::-;;:::i;10407:20::-;;;:::i;9738:63::-;;;;;;:::i;:::-;;:::i;18571:688::-;;;;;;:::i;:::-;;:::i;17266:136::-;;;;;;:::i;:::-;;:::i;11841:73::-;;;;;;:::i;:::-;;:::i;9840:69::-;;;;;;:::i;:::-;;:::i;10600:43::-;;;;;;:::i;:::-;;:::i;10434:24::-;;;:::i;15638:97::-;;;;;;:::i;:::-;;:::i;10526:27::-;;;:::i;15502:124::-;;;;;;:::i;:::-;;:::i;7896:51::-;;;;;;;;;;;;;;-1:-1:-1;;;7896:51:0;;;;:::o;17877:207::-;17970:10;17942:4;17959:22;;;:10;:22;;;;;;;;-1:-1:-1;;;;;17959:31:0;;;;;;;;;;:40;;;18017:37;17942:4;;17959:31;;18017:37;;;;17993:6;;18017:37;:::i;:::-;;;;;;;;-1:-1:-1;18072:4:0;17877:207;;;;:::o;11198:499::-;11248:9;:7;:9::i;:::-;-1:-1:-1;;;;;11288:13:0;;11268:17;11288:13;;;:8;:13;;;;;;11316;;11312:378;;-1:-1:-1;;;;;11369:16:0;;11346:20;11369:16;;;:11;:16;;;;;;;11419:5;;11400:24;;;;11369:16;11346:20;11456;;11369:16;;11456:20;:::i;:::-;11439:37;-1:-1:-1;11495:10:0;;11491:131;;11524:14;11562:3;11541:18;11553:6;11541:9;:18;:::i;:::-;:24;;;;:::i;:::-;-1:-1:-1;;;;;11582:14:0;;;;;;:9;:14;;;;;:24;;11524:41;;-1:-1:-1;11524:41:0;;11582:14;;;:24;;11524:41;;11582:24;:::i;:::-;;;;-1:-1:-1;;;11491:131:0;11312:378;;;;;11673:5;;-1:-1:-1;;;;;11654:16:0;;;;;;:11;:16;;;;;:24;11312:378;11198:499;;:::o;8570:40::-;;;:::o;8208:27::-;;;;:::o;10566:21::-;;;;:::o;9493:80::-;9530:42;9493:80;:::o;8444:119::-;8486:77;8444:119;:::o;20287:513::-;-1:-1:-1;;;;;20446:15:0;;20366:4;20446:15;;;:10;:15;;;;;;;;20401:10;20446:24;;;;;;;;20366:4;;20401:10;;20446:24;20487:14;;;;;:52;;;-1:-1:-1;;20505:16:0;:34;;20487:52;20483:242;;;20556:17;20576:25;20595:6;20576:16;:25;:::i;:::-;-1:-1:-1;;;;;20616:15:0;;;;;;;:10;:15;;;;;;;;:24;;;;;;;;;;;;;;:39;;;20677:36;20556:45;;-1:-1:-1;20616:24:0;;20677:36;;;;20556:45;;20677:36;:::i;:::-;;;;;;;;20483:242;;20737:33;20753:3;20758;20763:6;20737:15;:33::i;:::-;20788:4;20781:11;;;;20287:513;;;;;;:::o;10498:21::-;;;;:::o;9580:109::-;9646:42;9580:109;:::o;8700:128::-;8742:86;8700:128;:::o;8110:34::-;8143:1;8110:34;:::o;12339:94::-;12381:16;12417:8;12410:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12410:15:0;;;;;;;;;;;;;;;;;;;;;;;12339:94;:::o;11709:41::-;;;;;;;;;;;;;:::o;13139:95::-;13203:23;13212:5;13219:6;13203:8;:23::i;11763:66::-;11800:21;11810:10;11800:9;:21::i;:::-;11763:66::o;19462:108::-;-1:-1:-1;;;;;19545:17:0;;19521:4;19545:17;;;:8;:17;;;;;;19462:108;;;;:::o;8909:39::-;;;;;;;;;;;;;:::o;8008:::-;;;;;;;;;;;;;;-1:-1:-1;;;8008:39:0;;;;:::o;10471:20::-;;;;:::o;13021:106::-;13075:44;13084:5;13091;-1:-1:-1;;;;;13091:15:0;;13107:10;13091:27;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13075:8;:44::i;:::-;13021:106;:::o;10656:55::-;10694:9;:7;:9::i;19831:149::-;19893:4;19910:40;19926:10;19938:3;19943:6;19910:15;:40::i;:::-;-1:-1:-1;19968:4:0;19831:149;;;;:::o;10407:20::-;;;;:::o;9738:63::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;18571:688::-;-1:-1:-1;;;;;18781:13:0;;18698:18;18781:13;;;:6;:13;;;;;:15;;8742:86;;18757:5;;18764:7;;18773:6;;18781:15;18698:18;18781:15;;;:::i;:::-;;;;;18798:8;18729:78;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;18719:89;;;;;;18698:110;;18819:14;18875:15;18892:10;18846:57;;;;;;;;;:::i;:::-;;;;;;;;;;;;;18836:68;;;;;;18819:85;;18915:17;18935:26;18945:6;18953:1;18956;18959;18935:26;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;18935:26:0;;-1:-1:-1;;18935:26:0;;;-1:-1:-1;;;;;;;18980:23:0;;18972:53;;;;-1:-1:-1;;;18972:53:0;;;;;;;:::i;:::-;;;;;;;;;19057:5;-1:-1:-1;;;;;19044:18:0;:9;-1:-1:-1;;;;;19044:18:0;;19036:51;;;;-1:-1:-1;;;19036:51:0;;;;;;;:::i;:::-;19125:8;19106:15;:27;;19098:55;;;;-1:-1:-1;;;19098:55:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19166:17:0;;;;;;;:10;:17;;;;;;;;:26;;;;;;;;;;;;;;:35;;;19219:32;;;;;19195:6;;19219:32;:::i;:::-;;;;;;;;18571:688;;;;;;;;;;:::o;17266:136::-;-1:-1:-1;;;;;17366:19:0;;;17342:4;17366:19;;;:10;:19;;;;;;;;:28;;;;;;;;;;;;;17266:136::o;11841:73::-;11892:14;11902:3;11892:9;:14::i;9840:69::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;10600:43::-;;;;;;;;;;;;;:::o;10434:24::-;;;;:::o;15638:97::-;15703:24;15713:5;15720:6;15703:9;:24::i;10526:27::-;;;;:::o;15502:124::-;15574:43;;-1:-1:-1;;;15574:43:0;;15557:61;;15567:5;;15589:4;;15574:31;;:43;;15606:10;;15574:43;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15557:9;:61::i;10723:463::-;10780:1;10766:11;:15;10762:417;;10809:11;;10802:4;;:18;10798:370;;;10841:13;10864:11;;10857:4;;:18;;;;:::i;:::-;10841:34;-1:-1:-1;10898:9:0;;10894:259;;10932:14;10978:9;;10964:11;;:23;;;;:::i;:::-;10949:11;:5;10957:3;10949:11;:::i;:::-;:39;;;;:::i;:::-;10932:56;-1:-1:-1;11015:10:0;;11011:123;;11061:6;11052:5;;:15;;;;;;;:::i;:::-;;;;-1:-1:-1;;11106:4:0;;11092:11;:18;10894:259;10798:370;10723:463::o;20808:756::-;-1:-1:-1;;;;;20900:17:0;;20892:59;;;;-1:-1:-1;;;20892:59:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20970:17:0;;20962:59;;;;-1:-1:-1;;;20962:59:0;;;;;;;:::i;:::-;21042:14;21052:3;21042:9;:14::i;:::-;21067;21077:3;21067:9;:14::i;:::-;-1:-1:-1;;;;;21094:13:0;;;;;;:8;:13;;;;;:23;;21111:6;;21094:13;:23;;21111:6;;21094:23;:::i;:::-;;;;-1:-1:-1;;;;;;;21128:13:0;;;;;;:8;:13;;;;;:23;;21145:6;;21128:13;:23;;21145:6;;21128:23;:::i;:::-;;;;;;;;21191:3;-1:-1:-1;;;;;21177:26:0;21186:3;-1:-1:-1;;;;;21177:26:0;-1:-1:-1;;;;;;;;;;;21196:6:0;21177:26;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;21228:10:0;;;;;;:5;:10;;;;;;;;21224:323;;;21255:9;21282:4;;21276:3;;21267:6;:12;;;;:::i;:::-;:19;;;;:::i;:::-;21255:31;;21309:4;21301;;:12;;;;;;;:::i;:::-;;;;;;;;21389:4;21374:11;;:19;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;21463:13:0;;;;;;:8;:13;;;;;:21;;21480:4;;21463:13;:21;;21480:4;;21463:21;:::i;:::-;;;;-1:-1:-1;;21504:31:0;;21526:1;;-1:-1:-1;;;;;21504:31:0;;;-1:-1:-1;;;;;;;;;;;21504:31:0;;;21530:4;;21504:31;:::i;:::-;;;;;;;;21224:323;;20808:756;;;:::o;14604:886::-;14669:11;14740:5;-1:-1:-1;;;;;14740:14:0;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14727:29;;14735:2;14727:29;:::i;:::-;14683:32;;-1:-1:-1;;;14683:32:0;;14718:6;;9530:42;;14683:16;;:32;;14708:5;;14683:32;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:41;;;;:::i;:::-;:73;;;;:::i;:::-;14669:87;;14784:1;14775:6;:10;14767:29;;;;-1:-1:-1;;;14767:29:0;;;;;;;:::i;:::-;14818:13;14833:12;14850:60;14872:5;14888:4;14895:6;14903;14850:13;:60::i;:::-;-1:-1:-1;14817:93:0;;-1:-1:-1;14817:93:0;-1:-1:-1;14931:50:0;-1:-1:-1;;;;;14931:22:0;;14954:10;14817:93;;14931:22;:50::i;:::-;15005:6;14992:9;;:19;;;;;;;:::i;:::-;;;;-1:-1:-1;15022:20:0;;-1:-1:-1;15028:5:0;15035:6;15022:5;:20::i;:::-;15108:43;;-1:-1:-1;;;15108:43:0;;15090:15;;-1:-1:-1;;;;;15108:28:0;;;;;:43;;15145:4;;15108:43;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15173:10;15162:22;;;;:10;:22;;;;;;;;-1:-1:-1;;;;;15162:38:0;;;;;;;;;:52;;15090:61;;-1:-1:-1;15090:61:0;;15162:38;;:22;:52;;15090:61;;15162:52;:::i;:::-;;;;-1:-1:-1;;15252:10:0;15235:28;;;;:16;:28;;;;;;;;-1:-1:-1;;;;;15235:44:0;;;;;;;;;:54;;15283:6;;15235:28;:54;;15283:6;;15235:54;:::i;:::-;;;;-1:-1:-1;;15327:4:0;;15321:3;;15300:9;;15327:4;15312:12;;:6;:12;:::i;:::-;:19;;;;:::i;:::-;15300:31;-1:-1:-1;15342:32:0;15348:10;15360:13;15300:31;15360:6;:13;:::i;:::-;15342:5;:32::i;:::-;15393:4;15385;;:12;;;;;;;:::i;:::-;;;;-1:-1:-1;;15423:59:0;;-1:-1:-1;;;;;15423:59:0;;;15431:10;;15423:59;;;;15459:6;;15467;;15459;;15423:59;:::i;:::-;;;;;;;;14604:886;;;;;;;:::o;11926:401::-;11978:14;11988:3;11978:9;:14::i;:::-;-1:-1:-1;;;;;12011:14:0;;;;;;:9;:14;;;;;;12003:4;:22;;12011:14;;12003:4;;:22;;12011:14;;12003:22;:::i;:::-;;;;-1:-1:-1;;;;;;;12089:14:0;;;;;;:9;:14;;;;;;12074:29;;12089:14;;;;;12074:29;;12089:14;;12074:29;:::i;:::-;;;;-1:-1:-1;;;;;;;12180:14:0;;;;;;:9;:14;;;;;;;;;12163:8;:13;;;;;:31;;12180:14;;12163:13;;:31;;12180:14;;12163:31;:::i;:::-;;;;-1:-1:-1;;;;;;;12210:41:0;;12227:1;12236:14;;;:9;:14;;;;;;;12210:41;;-1:-1:-1;;;;;;;;;;;12210:41:0;;;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;12272:14:0;12289:1;12272:14;;;:9;:14;;;;;:18;12315:4;;12301:11;:18;11926:401::o;15747:1215::-;15845:10;15813:12;15828:28;;;:16;:28;;;;;;;;-1:-1:-1;;;;;15828:44:0;;;;;;;;;;;;15902:22;;;:10;:22;;;;;:38;;;;;;;;;15965:16;;;15961:65;;;16007:7;15998:16;;15961:65;16095:12;16133:7;16110:20;16124:6;16110:11;:20;:::i;:::-;:30;;;;:::i;:::-;16167:46;;-1:-1:-1;;;16167:46:0;;16095:45;;-1:-1:-1;16151:13:0;;9646:42;;16167:15;;:46;;16191:5;;16207:4;;16167:46;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16151:62;-1:-1:-1;16234:42:0;-1:-1:-1;;;;;16234:26:0;;16151:62;16268:7;16234:26;:42::i;:::-;16314:13;16329;16363:5;-1:-1:-1;;;;;16346:28:0;;16375:10;16346:40;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16313:73;;;;16398:15;16418:60;16456:5;16472:4;16418:29;:60::i;:::-;16397:81;;;16490:13;16505;16540:7;-1:-1:-1;;;;;16522:25:0;16530:5;-1:-1:-1;;;;;16522:25:0;;:71;;16574:8;16584;16522:71;;;16551:8;16561;16522:71;16489:104;;;;16662:6;16614:16;:28;16631:10;-1:-1:-1;;;;;16614:28:0;-1:-1:-1;;;;;16614:28:0;;;;;;;;;;;;:44;16651:5;-1:-1:-1;;;;;16614:44:0;-1:-1:-1;;;;;16614:44:0;;;;;;;;;;;;;:54;;;;;;;:::i;:::-;;;;-1:-1:-1;;16690:10:0;16679:22;;;;:10;:22;;;;;;;;-1:-1:-1;;;;;16679:38:0;;;;;;;;;:49;;16721:7;;16679:22;:49;;16721:7;;16679:49;:::i;:::-;;;;;;;;16752:8;16739:9;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;16771:34:0;;-1:-1:-1;16777:10:0;16789:15;16798:6;16789:8;:15;:::i;:::-;16771:5;:34::i;:::-;16919:5;-1:-1:-1;;;;;16890:64:0;16899:10;-1:-1:-1;;;;;16890:64:0;;16927:6;16935:8;16945;16890:64;;;;;;;;:::i;:::-;;;;;;;;15747:1215;;;;;;;;;;;:::o;13246:1346::-;13524:31;;-1:-1:-1;;;13524:31:0;;13412:12;;;;;;9646:42;;13524:15;;:31;;13540:6;;13548;;13524:31;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13517:38;-1:-1:-1;;;;;;13570:18:0;;13566:266;;13612:34;;-1:-1:-1;;;13612:34:0;;9646:42;;13612:18;;:34;;13631:6;;13639;;13612:34;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;13661:11:0;;;;;;;:5;:11;;;;;:18;;13675:4;-1:-1:-1;;13661:18:0;;;;;;;;13694:8;:21;;;;;;;;;;;;;;-1:-1:-1;;;;;;13694:21:0;;;;;;;;;;13661:11;-1:-1:-1;13566:266:0;;;-1:-1:-1;;;;;13738:11:0;;;;;;:5;:11;;;;;;;;13733:99;;-1:-1:-1;;;;;13766:11:0;;;;;;;:5;:11;;;;;:18;;13780:4;-1:-1:-1;;13766:18:0;;;;;;;;13799:8;:21;;;;;;;;;;;;;;-1:-1:-1;;;;;;13799:21:0;;;;;;;;;;13733:99;13853:13;13868;13885:64;9646:42;13934:6;13942;13885:30;:64::i;:::-;13852:97;;;;13964:8;13976:1;13964:13;:30;;;;-1:-1:-1;13981:13:0;;13964:30;13960:625;;;14033:14;;-1:-1:-1;14049:14:0;;-1:-1:-1;13960:625:0;;;14097:19;14119:60;14144:14;14160:8;14170;14119:24;:60::i;:::-;14097:82;;14216:14;14198;:32;14194:380;;14273:14;;-1:-1:-1;14289:14:0;-1:-1:-1;14289:14:0;14194:380;;;14345:19;14367:60;14392:14;14408:8;14418;14367:24;:60::i;:::-;14345:82;;14471:14;14453;:32;;14446:40;;-1:-1:-1;;;14446:40:0;;;;;;;;;14527:14;-1:-1:-1;14543:14:0;;-1:-1:-1;14194:380:0;13960:625;;13246:1346;;;;;;;;;;:::o;1439:201::-;1537:95;1556:5;1586:27;;;1615:4;1621:2;1625:5;1563:68;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;1563:68:0;;;;;;;;;;;;;;-1:-1:-1;;;;;1563:68:0;-1:-1:-1;;;;;;1563:68:0;;;;;;;;;;1537:18;:95::i;:::-;1439:201;;;;:::o;12445:275::-;12506:14;12516:3;12506:9;:14::i;:::-;12574:6;12559:11;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;12640:13:0;;;;;;:8;:13;;;;;:23;;12657:6;;12640:13;:23;;12657:6;;12640:23;:::i;:::-;;;;-1:-1:-1;;12679:33:0;;-1:-1:-1;;;;;12679:33:0;;;12696:1;;-1:-1:-1;;;;;;;;;;;12679:33:0;;;12705:6;;12679:33;:::i;:::-;;;;;;;;12445:275;;:::o;1258:173::-;1338:85;1357:5;1387:23;;;1412:2;1416:5;1364:58;;;;;;;;;:::i;5946:353::-;6021:14;6037;6082:6;-1:-1:-1;;;;;6072:16:0;:6;-1:-1:-1;;;;;6072:16:0;;;6064:68;;;;-1:-1:-1;;;6064:68:0;;;;;;;:::i;:::-;6171:6;-1:-1:-1;;;;;6162:15:0;:6;-1:-1:-1;;;;;6162:15:0;;:53;;6200:6;6208;6162:53;;;6181:6;6189;6162:53;6143:72;;-1:-1:-1;6143:72:0;-1:-1:-1;;;;;;6234:20:0;;6226:65;;;;-1:-1:-1;;;6226:65:0;;;;;;;:::i;:::-;5946:353;;;;;:::o;12732:277::-;12793:14;12803:3;12793:9;:14::i;:::-;12861:6;12846:11;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;12929:13:0;;;;;;:8;:13;;;;;:23;;12946:6;;12929:13;:23;;12946:6;;12929:23;:::i;:::-;;;;-1:-1:-1;;12968:33:0;;12990:1;;-1:-1:-1;;;;;12968:33:0;;;-1:-1:-1;;;;;;;;;;;12968:33:0;;;12994:6;;12968:33;:::i;6936:393::-;7029:13;7044;7071:14;7090:26;7101:6;7109;7090:10;:26::i;:::-;7070:46;;;7128:13;7143;7178:32;7186:7;7195:6;7203;7178:7;:32::i;:::-;-1:-1:-1;;;;;7161:62:0;;:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7127:98;-1:-1:-1;;;;;7127:98:0;;;-1:-1:-1;;;;;7127:98:0;;;7269:6;-1:-1:-1;;;;;7259:16:0;:6;-1:-1:-1;;;;;7259:16:0;;:62;;7302:8;7312;7259:62;;;7279:8;7289;7259:62;7236:85;;;;-1:-1:-1;6936:393:0;-1:-1:-1;;;;;;;6936:393:0:o;7448:322::-;7530:12;7573:1;7563:7;:11;7555:63;;;;-1:-1:-1;;;7555:63:0;;;;;;;:::i;:::-;7648:1;7637:8;:12;:28;;;;;7664:1;7653:8;:12;7637:28;7629:83;;;;-1:-1:-1;;;7629:83:0;;;;;;;:::i;:::-;7754:8;7733:18;7743:8;7733:7;:18;:::i;:::-;:29;;;;:::i;:::-;7723:39;7448:322;-1:-1:-1;;;;7448:322:0:o;1998:598::-;2086:27;2094:5;-1:-1:-1;;;;;2086:25:0;;:27::i;:::-;2078:71;;;;-1:-1:-1;;;2078:71:0;;;;;;;:::i;:::-;2223:12;2237:23;2272:5;-1:-1:-1;;;;;2264:19:0;2284:4;2264:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2222:67;;;;2308:7;2300:52;;;;-1:-1:-1;;;2300:52:0;;;;;;;:::i;:::-;2369:17;;:21;2365:224;;2511:10;2500:30;;;;;;;;;;;;:::i;:::-;2492:85;;;;-1:-1:-1;;;2492:85:0;;;;;;;:::i;6391:487::-;6480:12;6506:14;6522;6540:26;6551:6;6559;6540:10;:26::i;:::-;6505:61;;;;6676:7;6729:6;6737;6712:32;;;;;;;;;:::i;:::-;;;;;;;;;;;;;6702:43;;;;;;6615:251;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;6615:251:0;;;;;;;;;6605:262;;6615:251;6605:262;;;;;6391:487;-1:-1:-1;;;;;;6391:487:0:o;818:374::-;878:4;1101:20;;944:66;1141:15;;;;;:42;;-1:-1:-1;1160:23:0;;;1133:51;-1:-1:-1;;818:374:0:o;14:190:1:-;95:13;;-1:-1:-1;;;;;137:42:1;;127:53;;117:2;;194:1;191;184:12;209:259;;321:2;309:9;300:7;296:23;292:32;289:2;;;342:6;334;327:22;289:2;386:9;373:23;405:33;432:5;405:33;:::i;473:263::-;;596:2;584:9;575:7;571:23;567:32;564:2;;;617:6;609;602:22;564:2;654:9;648:16;673:33;700:5;673:33;:::i;741:402::-;;;870:2;858:9;849:7;845:23;841:32;838:2;;;891:6;883;876:22;838:2;935:9;922:23;954:33;981:5;954:33;:::i;:::-;1006:5;-1:-1:-1;1063:2:1;1048:18;;1035:32;1076:35;1035:32;1076:35;:::i;:::-;1130:7;1120:17;;;828:315;;;;;:::o;1148:470::-;;;;1294:2;1282:9;1273:7;1269:23;1265:32;1262:2;;;1315:6;1307;1300:22;1262:2;1359:9;1346:23;1378:33;1405:5;1378:33;:::i;:::-;1430:5;-1:-1:-1;1487:2:1;1472:18;;1459:32;1500:35;1459:32;1500:35;:::i;:::-;1252:366;;1554:7;;-1:-1:-1;;;1608:2:1;1593:18;;;;1580:32;;1252:366::o;1623:853::-;;;;;;;;1835:3;1823:9;1814:7;1810:23;1806:33;1803:2;;;1857:6;1849;1842:22;1803:2;1901:9;1888:23;1920:33;1947:5;1920:33;:::i;:::-;1972:5;-1:-1:-1;2029:2:1;2014:18;;2001:32;2042:35;2001:32;2042:35;:::i;:::-;2096:7;-1:-1:-1;2150:2:1;2135:18;;2122:32;;-1:-1:-1;2201:2:1;2186:18;;2173:32;;-1:-1:-1;2257:3:1;2242:19;;2229:33;2306:4;2293:18;;2281:31;;2271:2;;2331:6;2323;2316:22;2271:2;1793:683;;;;-1:-1:-1;1793:683:1;;;;2359:7;2413:3;2398:19;;2385:33;;-1:-1:-1;2465:3:1;2450:19;;;2437:33;;1793:683;-1:-1:-1;;1793:683:1:o;2481:327::-;;;2610:2;2598:9;2589:7;2585:23;2581:32;2578:2;;;2631:6;2623;2616:22;2578:2;2675:9;2662:23;2694:33;2721:5;2694:33;:::i;:::-;2746:5;2798:2;2783:18;;;;2770:32;;-1:-1:-1;;;2568:240:1:o;2813:297::-;;2933:2;2921:9;2912:7;2908:23;2904:32;2901:2;;;2954:6;2946;2939:22;2901:2;2991:9;2985:16;3044:5;3037:13;3030:21;3023:5;3020:32;3010:2;;3071:6;3063;3056:22;3737:474;;;;3893:2;3881:9;3872:7;3868:23;3864:32;3861:2;;;3914:6;3906;3899:22;3861:2;3942:42;3974:9;3942:42;:::i;:::-;3932:52;;4003:51;4050:2;4039:9;4035:18;4003:51;:::i;:::-;3993:61;;4097:2;4086:9;4082:18;4076:25;4141:10;4134:5;4130:22;4123:5;4120:33;4110:2;;4172:6;4164;4157:22;4110:2;4200:5;4190:15;;;3851:360;;;;;:::o;4216:194::-;;4339:2;4327:9;4318:7;4314:23;4310:32;4307:2;;;4360:6;4352;4345:22;4307:2;-1:-1:-1;4388:16:1;;4297:113;-1:-1:-1;4297:113:1:o;4415:255::-;;;4555:2;4543:9;4534:7;4530:23;4526:32;4523:2;;;4576:6;4568;4561:22;4523:2;-1:-1:-1;;4604:16:1;;4660:2;4645:18;;;4639:25;4604:16;;4639:25;;-1:-1:-1;4513:157:1:o;4675:333::-;-1:-1:-1;;4902:2:1;4898:15;;;4894:24;;4882:37;;4953:15;;;;4949:24;4944:2;4935:12;;4928:46;4999:2;4990:12;;4822:186::o;5013:274::-;;5180:6;5174:13;5196:53;5242:6;5237:3;5230:4;5222:6;5218:17;5196:53;:::i;:::-;5265:16;;;;;5150:137;-1:-1:-1;;5150:137:1:o;5292:392::-;-1:-1:-1;;;5550:27:1;;5602:1;5593:11;;5586:27;;;;5638:2;5629:12;;5622:28;5675:2;5666:12;;5540:144::o;5689:636::-;-1:-1:-1;;;;;;6048:26:1;;6111:2;6107:15;;;;-1:-1:-1;;6103:53:1;6099:1;6090:11;;6083:74;6182:2;6173:12;;6166:28;6224:66;6219:2;6210:12;;6203:88;6316:2;6307:12;;6038:287::o;6330:203::-;-1:-1:-1;;;;;6494:32:1;;;;6476:51;;6464:2;6449:18;;6431:102::o;6538:304::-;-1:-1:-1;;;;;6768:15:1;;;6750:34;;6820:15;;6815:2;6800:18;;6793:43;6700:2;6685:18;;6667:175::o;6847:375::-;-1:-1:-1;;;;;7105:15:1;;;7087:34;;7157:15;;;;7152:2;7137:18;;7130:43;7204:2;7189:18;;7182:34;;;;7037:2;7022:18;;7004:218::o;7227:274::-;-1:-1:-1;;;;;7419:32:1;;;;7401:51;;7483:2;7468:18;;7461:34;7389:2;7374:18;;7356:145::o;7506:661::-;7677:2;7729:21;;;7799:13;;7702:18;;;7821:22;;;7506:661;;7677:2;7900:15;;;;7874:2;7859:18;;;7506:661;7946:195;7960:6;7957:1;7954:13;7946:195;;;8025:13;;-1:-1:-1;;;;;8021:39:1;8009:52;;8116:15;;;;8081:12;;;;8057:1;7975:9;7946:195;;;-1:-1:-1;8158:3:1;;7657:510;-1:-1:-1;;;;;;7657:510:1:o;8172:187::-;8337:14;;8330:22;8312:41;;8300:2;8285:18;;8267:92::o;8364:177::-;8510:25;;;8498:2;8483:18;;8465:76::o;8546:591::-;8833:25;;;-1:-1:-1;;;;;8932:15:1;;;8927:2;8912:18;;8905:43;8984:15;;;;8979:2;8964:18;;8957:43;9031:2;9016:18;;9009:34;9074:3;9059:19;;9052:35;;;;8885:3;9103:19;;9096:35;8820:3;8805:19;;8787:350::o;9142:398::-;9369:25;;;9442:4;9430:17;;;;9425:2;9410:18;;9403:45;9479:2;9464:18;;9457:34;9522:2;9507:18;;9500:34;9356:3;9341:19;;9323:217::o;10002:383::-;;10151:2;10140:9;10133:21;10183:6;10177:13;10226:6;10221:2;10210:9;10206:18;10199:34;10242:66;10301:6;10296:2;10285:9;10281:18;10276:2;10268:6;10264:15;10242:66;:::i;:::-;10369:2;10348:15;-1:-1:-1;;10344:29:1;10329:45;;;;10376:2;10325:54;;10123:262;-1:-1:-1;;10123:262:1:o;10390:406::-;10592:2;10574:21;;;10631:2;10611:18;;;10604:30;10670:34;10665:2;10650:18;;10643:62;-1:-1:-1;;;10736:2:1;10721:18;;10714:40;10786:3;10771:19;;10564:232::o;10801:403::-;11003:2;10985:21;;;11042:2;11022:18;;;11015:30;11081:34;11076:2;11061:18;;11054:62;-1:-1:-1;;;11147:2:1;11132:18;;11125:37;11194:3;11179:19;;10975:229::o;11209:329::-;11411:2;11393:21;;;11450:1;11430:18;;;11423:29;-1:-1:-1;;;11483:2:1;11468:18;;11461:36;11529:2;11514:18;;11383:155::o;11543:356::-;11745:2;11727:21;;;11764:18;;;11757:30;11823:34;11818:2;11803:18;;11796:62;11890:2;11875:18;;11717:182::o;11904:339::-;12106:2;12088:21;;;12145:2;12125:18;;;12118:30;-1:-1:-1;;;12179:2:1;12164:18;;12157:45;12234:2;12219:18;;12078:165::o;12248:356::-;12450:2;12432:21;;;12469:18;;;12462:30;12528:34;12523:2;12508:18;;12501:62;12595:2;12580:18;;12422:182::o;12609:344::-;12811:2;12793:21;;;12850:2;12830:18;;;12823:30;-1:-1:-1;;;12884:2:1;12869:18;;12862:50;12944:2;12929:18;;12783:170::o;12958:403::-;13160:2;13142:21;;;13199:2;13179:18;;;13172:30;13238:34;13233:2;13218:18;;13211:62;-1:-1:-1;;;13304:2:1;13289:18;;13282:37;13351:3;13336:19;;13132:229::o;13366:341::-;13568:2;13550:21;;;13607:2;13587:18;;;13580:30;-1:-1:-1;;;13641:2:1;13626:18;;13619:47;13698:2;13683:18;;13540:167::o;13712:406::-;13914:2;13896:21;;;13953:2;13933:18;;;13926:30;13992:34;13987:2;13972:18;;13965:62;-1:-1:-1;;;14058:2:1;14043:18;;14036:40;14108:3;14093:19;;13886:232::o;14123:355::-;14325:2;14307:21;;;14364:2;14344:18;;;14337:30;14403:33;14398:2;14383:18;;14376:61;14469:2;14454:18;;14297:181::o;14483:353::-;14685:2;14667:21;;;14724:2;14704:18;;;14697:30;14763:31;14758:2;14743:18;;14736:59;14827:2;14812:18;;14657:179::o;15023:319::-;15225:25;;;15281:2;15266:18;;15259:34;;;;15324:2;15309:18;;15302:34;15213:2;15198:18;;15180:162::o;15347:184::-;15519:4;15507:17;;;;15489:36;;15477:2;15462:18;;15444:87::o;15536:128::-;;15607:1;15603:6;15600:1;15597:13;15594:2;;;15613:18;;:::i;:::-;-1:-1:-1;15649:9:1;;15584:80::o;15669:217::-;;15735:1;15725:2;;-1:-1:-1;;;15760:31:1;;15814:4;15811:1;15804:15;15842:4;15767:1;15832:15;15725:2;-1:-1:-1;15871:9:1;;15715:171::o;15891:453::-;15987:6;16010:5;16024:314;16073:1;16110:2;16100:8;16097:16;16087:2;;16117:5;;;16087:2;16158:4;16153:3;16149:14;16143:4;16140:24;16137:2;;;16167:18;;:::i;:::-;16217:2;16207:8;16203:17;16200:2;;;16232:16;;;;16200:2;16311:17;;;;;16271:15;;16024:314;;;15968:376;;;;;;;:::o;16349:139::-;;16438:44;-1:-1:-1;;16465:8:1;16459:4;16493:922;16577:8;16567:2;;-1:-1:-1;16618:1:1;16632:5;;16567:2;16666:4;16656:2;;-1:-1:-1;16703:1:1;16717:5;;16656:2;16748:4;16766:1;16761:59;;;;16834:1;16829:183;;;;16741:271;;16761:59;16791:1;16782:10;;16805:5;;;16829:183;16866:3;16856:8;16853:17;16850:2;;;16873:18;;:::i;:::-;16929:1;16919:8;16915:16;16906:25;;16957:3;16950:5;16947:14;16944:2;;;16964:18;;:::i;:::-;16997:5;;;16741:271;;17096:2;17086:8;17083:16;17077:3;17071:4;17068:13;17064:36;17058:2;17048:8;17045:16;17040:2;17034:4;17031:12;17027:35;17024:77;17021:2;;;-1:-1:-1;17133:19:1;;;17168:14;;;17165:2;;;17185:18;;:::i;:::-;17218:5;;17021:2;17265:42;17303:3;17293:8;17287:4;17284:1;17265:42;:::i;:::-;17340:6;17335:3;17331:16;17322:7;17319:29;17316:2;;;17351:18;;:::i;:::-;17389:20;;16557:858;-1:-1:-1;;;;16557:858:1:o;17420:168::-;;17526:1;17522;17518:6;17514:14;17511:1;17508:21;17503:1;17496:9;17489:17;17485:45;17482:2;;;17533:18;;:::i;:::-;-1:-1:-1;17573:9:1;;17472:116::o;17593:125::-;;17661:1;17658;17655:8;17652:2;;;17666:18;;:::i;:::-;-1:-1:-1;17703:9:1;;17642:76::o;17723:258::-;17795:1;17805:113;17819:6;17816:1;17813:13;17805:113;;;17895:11;;;17889:18;17876:11;;;17869:39;17841:2;17834:10;17805:113;;;17936:6;17933:1;17930:13;17927:2;;;-1:-1:-1;;17971:1:1;17953:16;;17946:27;17776:205::o;17986:135::-;;-1:-1:-1;;18046:17:1;;18043:2;;;18066:18;;:::i;:::-;-1:-1:-1;18113:1:1;18102:13;;18033:88::o;18126:127::-;18187:10;18182:3;18178:20;18175:1;18168:31;18218:4;18215:1;18208:15;18242:4;18239:1;18232:15;18258:133;-1:-1:-1;;;;;18335:31:1;;18325:42;;18315:2;;18381:1;18378;18371:12
Swarm Source
ipfs://79898c12db6c5ebabe253fe34822a623078e7ebccc013ed63f9ea96d21b70822
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.
Add Token to MetaMask (Web3)